.addr $0000
; Jump table
- .addr INSTALL
- .addr UNINSTALL
- .addr OPEN
- .addr CLOSE
- .addr GET
- .addr PUT
- .addr STATUS
- .addr IOCTL
- .addr IRQ
+ .addr SER_INSTALL
+ .addr SER_UNINSTALL
+ .addr SER_OPEN
+ .addr SER_CLOSE
+ .addr SER_GET
+ .addr SER_PUT
+ .addr SER_STATUS
+ .addr SER_IOCTL
+ .addr SER_IRQ
;----------------------------------------------------------------------------
; Global variables
.code
;----------------------------------------------------------------------------
-; INSTALL: Is called after the driver is loaded into memory.
+; SER_INSTALL: Is called after the driver is loaded into memory.
;
; Must return an SER_ERR_xx code in a/x.
-INSTALL:
+SER_INSTALL:
; Set up IRQ vector ?
;----------------------------------------------------------------------------
-; UNINSTALL: Is called before the driver is removed from memory.
+; SER_UNINSTALL: Is called before the driver is removed from memory.
; No return code required (the driver is removed from memory on return).
;
-UNINSTALL:
+SER_UNINSTALL:
;----------------------------------------------------------------------------
-; CLOSE: Close the port and disable interrupts. Called without parameters.
+; SER_CLOSE: Close the port and disable interrupts. Called without parameters.
; Must return an SER_ERR_xx code in a/x.
-CLOSE:
+SER_CLOSE:
; Disable interrupts
; Done, return an error code
lda #<SER_ERR_OK
rts
;----------------------------------------------------------------------------
-; OPEN: A pointer to a ser_params structure is passed in ptr1.
+; SER_OPEN: A pointer to a ser_params structure is passed in ptr1.
;
; The Lynx has only two correct serial data formats:
; 8 bits, parity mark, 1 stop bit
;
; Must return an SER_ERR_xx code in a/x.
-OPEN:
+SER_OPEN:
stz RxPtrIn
stz RxPtrOut
stz TxPtrIn
rts
;----------------------------------------------------------------------------
-; GET: Will fetch a character from the receive buffer and store it into the
+; SER_GET: Will fetch a character from the receive buffer and store it into the
; variable pointed to by ptr1. If no data is available, SER_ERR_NO_DATA is
; returned.
-GET:
+SER_GET:
lda RxPtrIn
cmp RxPtrOut
bne GetByte
rts
GetByte:
ldy RxPtrOut
- lda RxBuffer,y
+ lda RxBuffer,y
inc RxPtrOut
ldx #$00
sta (ptr1,x)
rts
;----------------------------------------------------------------------------
-; PUT: Output character in A.
+; SER_PUT: Output character in A.
; Must return an SER_ERR_xx code in a/x.
-PUT:
+SER_PUT:
tax
lda TxPtrIn
ina
rts
;----------------------------------------------------------------------------
-; STATUS: Return the status in the variable pointed to by ptr1.
+; SER_STATUS: Return the status in the variable pointed to by ptr1.
; Must return an SER_ERR_xx code in a/x.
-STATUS:
+SER_STATUS:
ldy SerialStat
ldx #$00
sta (ptr1,x)
rts
;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
+; SER_IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
; specific data in ptr1, and the ioctl code in A.
; Must return an SER_ERR_xx code in a/x.
-IOCTL:
+SER_IOCTL:
lda #<SER_ERR_INV_IOCTL
ldx #>SER_ERR_INV_IOCTL
rts
;----------------------------------------------------------------------------
-; IRQ: Called from the builtin runtime IRQ handler as a subroutine. All
+; SER_IRQ: Called from the builtin runtime IRQ handler as a subroutine. All
; registers are already saved, no parameters are passed, but the carry flag
; is clear on entry. The routine must return with carry set if the interrupt
; was handled, otherwise with carry clear.
; Both the Tx and Rx interrupts are level sensitive instead of edge sensitive.
; Due to this bug you have to disable the interrupt before clearing it.
-IRQ:
+SER_IRQ:
lda INTSET ; Poll all pending interrupts
and #SERIAL_INTERRUPT
bne @L0
@IRQexit:
clc
rts
-