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:
@@ -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
|
||||||
|
|
||||||
;----------------------------------------------------------------------------
|
;----------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user