From 26e7d2f99001ffaaa809f3002bcee7422c125111 Mon Sep 17 00:00:00 2001 From: Peter Ferrie Date: Fri, 7 Jun 2019 23:23:29 -0400 Subject: [PATCH] pt3_player: optimize mockingboard writes --- pt3_player/interrupt_handler.s | 9 ++++----- pt3_player/mockingboard_a.s | 22 ++++++++++------------ 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/pt3_player/interrupt_handler.s b/pt3_player/interrupt_handler.s index 78691e18..107c14c9 100644 --- a/pt3_player/interrupt_handler.s +++ b/pt3_player/interrupt_handler.s @@ -105,15 +105,14 @@ mb_not_13: ; address stx MOCK_6522_ORA1 ; put address on PA1 ; 4 stx MOCK_6522_ORA2 ; put address on PA2 ; 4 - lda #MOCK_AY_LATCH_ADDR ; latch_address for PB1 ; 2 - sta MOCK_6522_ORB1 ; latch_address on PB1 ; 4 - sta MOCK_6522_ORB2 ; latch_address on PB2 ; 4 + ldy #MOCK_AY_LATCH_ADDR ; latch_address for PB1 ; 2 + sty MOCK_6522_ORB1 ; latch_address on PB1 ; 4 + sty MOCK_6522_ORB2 ; latch_address on PB2 ; 4 ldy #MOCK_AY_INACTIVE ; go inactive ; 2 sty MOCK_6522_ORB1 ; 4 sty MOCK_6522_ORB2 ; 4 ; value - lda AY_REGISTERS,X ; load register value ; 4 sta MOCK_6522_ORA1 ; put value on PA1 ; 4 sta MOCK_6522_ORA2 ; put value on PA2 ; 4 lda #MOCK_AY_WRITE ; ; 2 @@ -122,7 +121,7 @@ mb_not_13: sty MOCK_6522_ORB1 ; 4 sty MOCK_6522_ORB2 ; 4 ;=========== - ; 60 + ; 56 mb_no_write: inx ; point to next register ; 2 cpx #14 ; if 14 we're done ; 2 diff --git a/pt3_player/mockingboard_a.s b/pt3_player/mockingboard_a.s index bf8b7cdd..20bd5b8f 100644 --- a/pt3_player/mockingboard_a.s +++ b/pt3_player/mockingboard_a.s @@ -74,6 +74,15 @@ reset_ay_both: rts + ;======================================= + ; clear ay -- clear all 14 AY registers + ; should silence the card + ;======================================= +clear_ay_both: + ldx #14 + lda #0 + sta MB_VALUE +clear_ay_left_loop: ; Write sequence ; Inactive -> Latch Address -> Inactive -> Write Data -> Inactive @@ -104,19 +113,8 @@ write_ay_both: sty MOCK_6522_ORB1 ; 3 sty MOCK_6522_ORB2 ; 3 - rts ; 6 ;=========== - ; 51 - ;======================================= - ; clear ay -- clear all 14 AY registers - ; should silence the card - ;======================================= -clear_ay_both: - ldx #14 - lda #0 - sta MB_VALUE -clear_ay_left_loop: - jsr write_ay_both + ; 45 dex bpl clear_ay_left_loop rts