1
0
mirror of https://github.com/cc65/cc65.git synced 2026-04-25 22:18:27 +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
+20 -19
View File
@@ -64,15 +64,15 @@ ACIA_STATUS := ACIA+1 ; Status register
ACIA_CMD := ACIA+2 ; Command register ACIA_CMD := ACIA+2 ; Command register
ACIA_CTRL := ACIA+3 ; Control 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 ; Global variables
; ;
.bss .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 SendHead: .res 1 ; Head of send buffer
SendTail: .res 1 ; Tail of send buffer SendTail: .res 1 ; Tail of send buffer
SendFreeCnt: .res 1 ; Number of bytes in send buffer SendFreeCnt: .res 1 ; Number of bytes in send buffer
@@ -353,26 +353,27 @@ SER_IOCTL:
; ;
SER_IRQ: SER_IRQ:
lda ACIA_STATUS ; Check ACIA status for receive interrupt lda ACIA_STATUS ;(4) ;status ;check for byte received
and #$08 and #$08 ;(2)
beq @L9 ; Jump if no ACIA interrupt (carry still clear) beq @L9 ;(2*)
lda ACIA_DATA ; Get byte from ACIA
ldx RecvFreeCnt ; Check if we have free space left @L1: lda ACIA_DATA ;(4) data ;get byte and put into receive buffer
beq @L1 ; Jump if no space in receive buffer ldy RecvTail ;(4)
ldy RecvTail ; Load buffer pointer ldx RecvFreeCnt ;(4)
sta RecvBuf,y ; Store received byte in buffer beq @L3 ;(2*) Jump if no space in receive buffer
inc RecvTail ; Increment buffer pointer sta RecvBuf,y ;(5)
dec RecvFreeCnt ; Decrement free space counter inc RecvTail ;(6)
cpx #33 ; Check for buffer space low dec RecvFreeCnt ;(6)
bcc @L1 ; Assert flow control if buffer space low cpx #33 ;(2) check for buffer space low
bcc @L2 ;(2*)
rts ; Return with carry set (interrupt handled) rts ; Return with carry set (interrupt handled)
; Assert flow control if buffer space too low ; Assert flow control if buffer space too low
@L1: lda RtsOff @L2: lda RtsOff ;(3) assert flow control if buffer space too low
sta ACIA_CMD sta ACIA_CMD ;(4) command
sta Stopped sta Stopped ;(3)
sec ; Interrupt handled @L3: sec ; Interrupt handled
@L9: rts @L9: rts
;---------------------------------------------------------------------------- ;----------------------------------------------------------------------------