Carry is clear on IRQ entry
git-svn-id: svn://svn.cc65.org/cc65/trunk@3500 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
3c4cd1fff9
commit
f096dc95ae
3 changed files with 27 additions and 43 deletions
|
@ -344,8 +344,9 @@ IOCTL: lda #<SER_ERR_INV_IOCTL ; We don't support ioclts for now
|
||||||
|
|
||||||
;----------------------------------------------------------------------------
|
;----------------------------------------------------------------------------
|
||||||
; IRQ: Called from the builtin runtime IRQ handler as a subroutine. All
|
; IRQ: Called from the builtin runtime IRQ handler as a subroutine. All
|
||||||
; registers are already save, no parameters are passed and no return code
|
; registers are already save, no parameters are passed, but the carry flag
|
||||||
; is expected.
|
; is clear on entry. The routine must return with carry set if the interrupt
|
||||||
|
; was handled, otherwise with carry clear.
|
||||||
;
|
;
|
||||||
|
|
||||||
IRQ: lda #$0F
|
IRQ: lda #$0F
|
||||||
|
@ -353,7 +354,7 @@ IRQ: lda #$0F
|
||||||
ldy #ACIA::STATUS
|
ldy #ACIA::STATUS
|
||||||
lda (acia),y ; Check ACIA status for receive interrupt
|
lda (acia),y ; Check ACIA status for receive interrupt
|
||||||
and #$08
|
and #$08
|
||||||
beq @L10 ; Jump if no ACIA interrupt
|
beq @L9 ; Jump if no ACIA interrupt (carry still clear)
|
||||||
ldy #ACIA::DATA
|
ldy #ACIA::DATA
|
||||||
lda (acia),y ; Get byte from ACIA
|
lda (acia),y ; Get byte from ACIA
|
||||||
ldx RecvFreeCnt ; Check if we have free space left
|
ldx RecvFreeCnt ; Check if we have free space left
|
||||||
|
@ -379,13 +380,6 @@ IRQ: lda #$0F
|
||||||
sta IndReg
|
sta IndReg
|
||||||
rts
|
rts
|
||||||
|
|
||||||
; No ACIA interrupt
|
|
||||||
|
|
||||||
@L10: clc ; Interrupt not handled
|
|
||||||
lda ExecReg
|
|
||||||
sta IndReg
|
|
||||||
rts
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------------
|
;----------------------------------------------------------------------------
|
||||||
; Try to send a byte. Internal routine. A = TryHard
|
; Try to send a byte. Internal routine. A = TryHard
|
||||||
|
|
||||||
|
|
|
@ -344,8 +344,9 @@ IOCTL: lda #<SER_ERR_INV_IOCTL ; We don't support ioclts for now
|
||||||
|
|
||||||
;----------------------------------------------------------------------------
|
;----------------------------------------------------------------------------
|
||||||
; IRQ: Called from the builtin runtime IRQ handler as a subroutine. All
|
; IRQ: Called from the builtin runtime IRQ handler as a subroutine. All
|
||||||
; registers are already save, no parameters are passed and no return code
|
; registers are already save, no parameters are passed, but the carry flag
|
||||||
; is expected.
|
; is clear on entry. The routine must return with carry set if the interrupt
|
||||||
|
; was handled, otherwise with carry clear.
|
||||||
;
|
;
|
||||||
|
|
||||||
IRQ: lda #$0F
|
IRQ: lda #$0F
|
||||||
|
@ -353,7 +354,7 @@ IRQ: lda #$0F
|
||||||
ldy #ACIA::STATUS
|
ldy #ACIA::STATUS
|
||||||
lda (acia),y ; Check ACIA status for receive interrupt
|
lda (acia),y ; Check ACIA status for receive interrupt
|
||||||
and #$08
|
and #$08
|
||||||
beq @L10 ; Jump if no ACIA interrupt
|
beq @L9 ; Jump if no ACIA interrupt (carry still clear)
|
||||||
ldy #ACIA::DATA
|
ldy #ACIA::DATA
|
||||||
lda (acia),y ; Get byte from ACIA
|
lda (acia),y ; Get byte from ACIA
|
||||||
ldx RecvFreeCnt ; Check if we have free space left
|
ldx RecvFreeCnt ; Check if we have free space left
|
||||||
|
@ -379,13 +380,6 @@ IRQ: lda #$0F
|
||||||
sta IndReg
|
sta IndReg
|
||||||
rts
|
rts
|
||||||
|
|
||||||
; No ACIA interrupt
|
|
||||||
|
|
||||||
@L10: clc ; Interrupt not handled
|
|
||||||
lda ExecReg
|
|
||||||
sta IndReg
|
|
||||||
rts
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------------
|
;----------------------------------------------------------------------------
|
||||||
; Try to send a byte. Internal routine. A = TryHard
|
; Try to send a byte. Internal routine. A = TryHard
|
||||||
|
|
||||||
|
|
|
@ -346,13 +346,14 @@ IOCTL: lda #<SER_ERR_INV_IOCTL ; We don't support ioclts for now
|
||||||
|
|
||||||
;----------------------------------------------------------------------------
|
;----------------------------------------------------------------------------
|
||||||
; IRQ: Called from the builtin runtime IRQ handler as a subroutine. All
|
; IRQ: Called from the builtin runtime IRQ handler as a subroutine. All
|
||||||
; registers are already save, no parameters are passed and no return code
|
; registers are already save, no parameters are passed, but the carry flag
|
||||||
; is expected.
|
; is clear on entry. The routine must return with carry set if the interrupt
|
||||||
|
; was handled, otherwise with carry clear.
|
||||||
;
|
;
|
||||||
|
|
||||||
IRQ: lda ACIA_STATUS ; Check ACIA status for receive interrupt
|
IRQ: lda ACIA_STATUS ; Check ACIA status for receive interrupt
|
||||||
and #$08
|
and #$08
|
||||||
beq @L10 ; Jump if no ACIA interrupt
|
beq @L9 ; Jump if no ACIA interrupt (carry still clear)
|
||||||
lda ACIA_DATA ; Get byte from ACIA
|
lda ACIA_DATA ; Get byte from ACIA
|
||||||
ldx RecvFreeCnt ; Check if we have free space left
|
ldx RecvFreeCnt ; Check if we have free space left
|
||||||
beq @L1 ; Jump if no space in receive buffer
|
beq @L1 ; Jump if no space in receive buffer
|
||||||
|
@ -370,12 +371,7 @@ IRQ: lda ACIA_STATUS ; Check ACIA status for receive interrupt
|
||||||
sta ACIA_CMD
|
sta ACIA_CMD
|
||||||
sta Stopped
|
sta Stopped
|
||||||
sec ; Interrupt handled
|
sec ; Interrupt handled
|
||||||
rts
|
@L9: rts
|
||||||
|
|
||||||
; No ACIA interrupt
|
|
||||||
|
|
||||||
@L10: clc ; Interrupt not handled
|
|
||||||
rts
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------------
|
;----------------------------------------------------------------------------
|
||||||
; Try to send a byte. Internal routine. A = TryHard
|
; Try to send a byte. Internal routine. A = TryHard
|
||||||
|
|
Loading…
Add table
Reference in a new issue