From 882f6fd10342529e7f6407fe8bdbe77a9663dbaf Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira Date: Sun, 15 Oct 2023 15:26:58 +0200 Subject: [PATCH] Fix ACIA check so we don't enable RX/TX with IRQs on --- libsrc/apple2/ser/a2.ssc.s | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index c7890c591..762050a66 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -252,32 +252,23 @@ NotIIgs:ldx #<$C000 lda ACIA_CMD,x ; and command register. So we can restore them sta tmp2 ; if this isn't a 6551. - and #%11111110 - sta ACIA_CMD,x ; Disable receiver/transmitter - - lda ACIA_CMD,x ; Reload register - and #%00000001 - bne NotAcia ; We expect command register bit 0 to be 0 - - lda tmp2 - ora #%00000001 ; Enable receiver/transmitter + ldy #%00000010 ; Disable TX/RX, disable IRQ +: tya sta ACIA_CMD,x - sta tmp3 ; Store it for comparison - - lda ACIA_CMD,x ; Is command register what we wrote? - cmp tmp3 + cmp ACIA_CMD,x ; Verify what we stored is there bne NotAcia + iny ; Enable TX/RX, disable IRQ + cpy #%00000100 + bne :- + sta ACIA_STATUS,x ; Reset ACIA + lda ACIA_CMD,x ; Check that RX/TX is disabled + lsr + bcc AciaOK - sta ACIA_STATUS,x ; Reset Acia (value written is not important) - - lda ACIA_CMD,x ; Is the Acia disabled now? - and #%00000001 - beq AciaOK - -NotAcia:lda tmp2 ; Restore original values - sta ACIA_CMD,x - lda tmp1 - sta ACIA_STATUS,x +NotAcia:lda tmp2 ; Restore original values + sta ACIA_CMD,x + lda tmp1 + sta ACIA_STATUS,x NoDev: lda #SER_ERR_NO_DEVICE bne Out