1
0
mirror of https://github.com/cc65/cc65.git synced 2026-03-10 17:21:49 +00:00

Use Kernal locations for serial buffer ptrs

This commit is contained in:
Richard Halkyard
2019-10-29 22:44:29 -05:00
parent 3bd4d05598
commit 89c8a988bf

View File

@@ -64,15 +64,15 @@ ACIA_STATUS := ACIA+1 ; Status register
ACIA_CMD := ACIA+2 ; Command register
ACIA_CTRL := ACIA+3 ; Control register
RecvHead := $07D1 ; Head of receive buffer
RecvTail := $07D2 ; Tail of receive buffer
RecvFreeCnt := $07D3 ; Number of bytes in receive buffer
;----------------------------------------------------------------------------
;
; Global variables
;
.bss
RecvHead: .res 1 ; Head of receive buffer
RecvTail: .res 1 ; Tail of receive buffer
RecvFreeCnt: .res 1 ; Number of bytes in receive buffer
SendHead: .res 1 ; Head of send buffer
SendTail: .res 1 ; Tail of send buffer
SendFreeCnt: .res 1 ; Number of bytes in send buffer
@@ -353,26 +353,27 @@ SER_IOCTL:
;
SER_IRQ:
lda ACIA_STATUS ; Check ACIA status for receive interrupt
and #$08
beq @L9 ; Jump if no ACIA interrupt (carry still clear)
lda ACIA_DATA ; Get byte from ACIA
ldx RecvFreeCnt ; Check if we have free space left
beq @L1 ; Jump if no space in receive buffer
ldy RecvTail ; Load buffer pointer
sta RecvBuf,y ; Store received byte in buffer
inc RecvTail ; Increment buffer pointer
dec RecvFreeCnt ; Decrement free space counter
cpx #33 ; Check for buffer space low
bcc @L1 ; Assert flow control if buffer space low
lda ACIA_STATUS ;(4) ;status ;check for byte received
and #$08 ;(2)
beq @L9 ;(2*)
@L1: lda ACIA_DATA ;(4) data ;get byte and put into receive buffer
ldy RecvTail ;(4)
ldx RecvFreeCnt ;(4)
beq @L3 ;(2*) Jump if no space in receive buffer
sta RecvBuf,y ;(5)
inc RecvTail ;(6)
dec RecvFreeCnt ;(6)
cpx #33 ;(2) check for buffer space low
bcc @L2 ;(2*)
rts ; Return with carry set (interrupt handled)
; Assert flow control if buffer space too low
@L1: lda RtsOff
sta ACIA_CMD
sta Stopped
sec ; Interrupt handled
@L2: lda RtsOff ;(3) assert flow control if buffer space too low
sta ACIA_CMD ;(4) command
sta Stopped ;(3)
@L3: sec ; Interrupt handled
@L9: rts
;----------------------------------------------------------------------------