|
|
|
|
@@ -24,6 +24,7 @@
|
|
|
|
|
.include "zeropage.inc"
|
|
|
|
|
.include "ser-kernel.inc"
|
|
|
|
|
.include "ser-error.inc"
|
|
|
|
|
.include "cbm_kernal.inc"
|
|
|
|
|
.include "c64.inc"
|
|
|
|
|
|
|
|
|
|
.macpack module
|
|
|
|
|
@@ -45,15 +46,15 @@
|
|
|
|
|
|
|
|
|
|
; Jump table
|
|
|
|
|
|
|
|
|
|
.word INSTALL
|
|
|
|
|
.word UNINSTALL
|
|
|
|
|
.word OPEN
|
|
|
|
|
.word CLOSE
|
|
|
|
|
.word GET
|
|
|
|
|
.word PUT
|
|
|
|
|
.word STATUS
|
|
|
|
|
.word IOCTL
|
|
|
|
|
.word IRQ
|
|
|
|
|
.word SER_INSTALL
|
|
|
|
|
.word SER_UNINSTALL
|
|
|
|
|
.word SER_OPEN
|
|
|
|
|
.word SER_CLOSE
|
|
|
|
|
.word SER_GET
|
|
|
|
|
.word SER_PUT
|
|
|
|
|
.word SER_STATUS
|
|
|
|
|
.word SER_IOCTL
|
|
|
|
|
.word SER_IRQ
|
|
|
|
|
|
|
|
|
|
;----------------------------------------------------------------------------
|
|
|
|
|
; I/O definitions
|
|
|
|
|
@@ -136,11 +137,11 @@ ParityTable:
|
|
|
|
|
.code
|
|
|
|
|
|
|
|
|
|
;----------------------------------------------------------------------------
|
|
|
|
|
; INSTALL routine. Is called after the driver is loaded into memory. If
|
|
|
|
|
; SER_INSTALL routine. Is called after the driver is loaded into memory. If
|
|
|
|
|
; possible, check if the hardware is present.
|
|
|
|
|
; Must return an SER_ERR_xx code in a/x.
|
|
|
|
|
|
|
|
|
|
INSTALL:
|
|
|
|
|
SER_INSTALL:
|
|
|
|
|
|
|
|
|
|
; Deactivate DTR and disable 6551 interrupts
|
|
|
|
|
|
|
|
|
|
@@ -165,10 +166,10 @@ SetNMI: sta NMIVec
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
;----------------------------------------------------------------------------
|
|
|
|
|
; UNINSTALL routine. Is called before the driver is removed from memory.
|
|
|
|
|
; SER_UNINSTALL routine. Is called before the driver is removed from memory.
|
|
|
|
|
; Must return an SER_ERR_xx code in a/x.
|
|
|
|
|
|
|
|
|
|
UNINSTALL:
|
|
|
|
|
SER_UNINSTALL:
|
|
|
|
|
|
|
|
|
|
; Stop interrupts, drop DTR
|
|
|
|
|
|
|
|
|
|
@@ -185,7 +186,7 @@ UNINSTALL:
|
|
|
|
|
; PARAMS routine. A pointer to a ser_params structure is passed in ptr1.
|
|
|
|
|
; Must return an SER_ERR_xx code in a/x.
|
|
|
|
|
|
|
|
|
|
OPEN:
|
|
|
|
|
SER_OPEN:
|
|
|
|
|
|
|
|
|
|
; Check if the handshake setting is valid
|
|
|
|
|
|
|
|
|
|
@@ -256,11 +257,11 @@ InvBaud:
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
;----------------------------------------------------------------------------
|
|
|
|
|
; CLOSE: Close the port, disable interrupts and flush the buffer. Called
|
|
|
|
|
; SER_CLOSE: Close the port, disable interrupts and flush the buffer. Called
|
|
|
|
|
; without parameters. Must return an error code in a/x.
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
CLOSE:
|
|
|
|
|
SER_CLOSE:
|
|
|
|
|
|
|
|
|
|
; Stop interrupts, drop DTR
|
|
|
|
|
|
|
|
|
|
@@ -278,12 +279,13 @@ CLOSE:
|
|
|
|
|
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 pointer to by ptr1. If no data is available, SER_ERR_NO_DATA is
|
|
|
|
|
; return.
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
GET: ldx SendFreeCnt ; Send data if necessary
|
|
|
|
|
SER_GET:
|
|
|
|
|
ldx SendFreeCnt ; Send data if necessary
|
|
|
|
|
inx ; X == $FF?
|
|
|
|
|
beq @L1
|
|
|
|
|
lda #$00
|
|
|
|
|
@@ -322,11 +324,11 @@ GET: ldx SendFreeCnt ; Send data if necessary
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
;----------------------------------------------------------------------------
|
|
|
|
|
; PUT: Output character in A.
|
|
|
|
|
; SER_PUT: Output character in A.
|
|
|
|
|
; Must return an error code in a/x.
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
PUT:
|
|
|
|
|
SER_PUT:
|
|
|
|
|
|
|
|
|
|
; Try to send
|
|
|
|
|
|
|
|
|
|
@@ -356,31 +358,33 @@ PUT:
|
|
|
|
|
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 error code in a/x.
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
STATUS: lda ACIA_STATUS
|
|
|
|
|
SER_STATUS:
|
|
|
|
|
lda ACIA_STATUS
|
|
|
|
|
ldx #0
|
|
|
|
|
sta (ptr1,x)
|
|
|
|
|
txa ; SER_ERR_OK
|
|
|
|
|
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 error code in a/x.
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
IOCTL: lda #<SER_ERR_INV_IOCTL ; We don't support ioclts for now
|
|
|
|
|
SER_IOCTL:
|
|
|
|
|
lda #<SER_ERR_INV_IOCTL ; We don't support ioclts for now
|
|
|
|
|
ldx #>SER_ERR_INV_IOCTL
|
|
|
|
|
rts
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
;----------------------------------------------------------------------------
|
|
|
|
|
; IRQ: Not used on the C64
|
|
|
|
|
; SER_IRQ: Not used on the C64
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
IRQ = $0000
|
|
|
|
|
SER_IRQ = $0000
|
|
|
|
|
|
|
|
|
|
;----------------------------------------------------------------------------
|
|
|
|
|
;
|
|
|
|
|
@@ -476,4 +480,3 @@ InitBuffers:
|
|
|
|
|
stx RecvFreeCnt
|
|
|
|
|
stx SendFreeCnt
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
|