;* *
;* *
;* *
-;*(C) 2003 Ullrich von Bassewitz *
-;* Römerstrasse 52 *
-;* D-70794 Filderstadt *
-;*EMail: uz@cc65.org *
+;*(C) 2003-2006, Ullrich von Bassewitz *
+;* Römerstrasse 52 *
+;* D-70794 Filderstadt *
+;*EMail: uz@cc65.org *
;* *
;* *
;*This software is provided 'as-is', without any expressed or implied *
;------------------------------------------------------------------------------
-; Offsets into the driver header
+; The driver header
+
+.struct SER_HDR
+ ID .byte 3 ; Contains 0x73, 0x65, 0x72 ("ser")
+ VERSION .byte 1 ; Interface version
+ LIBREF .addr ; Library reference
+ JUMPTAB .struct
+ SER_INSTALL .addr ; SER_INSTALL routine
+ SER_UNINSTALL .addr ; SER_UNINSTALL routine
+ SER_OPEN .addr ; SER_OPEN routine
+ SER_CLOSE .addr ; SER_CLOSE routine
+ SER_GET .addr ; SER_GET routine
+ SER_PUT .addr ; SER_PUT routine
+ SER_STATUS .addr ; SER_STATUS routine
+ SER_IOCTL .addr ; SER_IOCTL routine
+ SER_IRQ .addr ; SER_IRQ routine
+ .endstruct
+.endstruct
-SER_HDR_ID = 0 ; Contains 0x73, 0x65, 0x72 ("ser")
-SER_HDR_VERSION = 3 ; Interface version
-SER_HDR_JUMPTAB = 4
-SER_HDR_INSTALL = SER_HDR_JUMPTAB+0 ; INSTALL routine
-SER_HDR_UNINSTALL = SER_HDR_JUMPTAB+2 ; UNINSTALL routine
-SER_HDR_PARAMS = SER_HDR_JUMPTAB+4 ; PARAMS routine
-SER_HDR_GET = SER_HDR_JUMPTAB+6 ; GET routine
-SER_HDR_PUT = SER_HDR_JUMPTAB+8 ; PUT routine
-SER_HDR_PAUSE = SER_HDR_JUMPTAB+10 ; PAUSE routine
-SER_HDR_UNPAUSE = SER_HDR_JUMPTAB+12 ; UNPAUSE routine
-SER_HDR_STATUS = SER_HDR_JUMPTAB+14 ; STATUS routine
-SER_HDR_IOCTL = SER_HDR_JUMPTAB+16 ; IOCTL routine
+;------------------------------------------------------------------------------
+; The SER API version, stored SER_HDR::VERSION
-SER_HDR_JUMPCOUNT = 9 ; Number of jump vectors
+SER_API_VERSION = $02
;------------------------------------------------------------------------------
-; Offsets into the struct passed to ser_params
+; ser_params
-SER_PARAMS_BAUDRATE = 0 ; Baudrate
-SER_PARAMS_DATABITS = 1 ; Number of data bits
-SER_PARAMS_STOPBITS = 2 ; Number of stop bits
-SER_PARAMS_PARITY = 3 ; Parity setting
-SER_PARAMS_HANDSHAKE = 4 ; Type of handshake to use
+.struct SER_PARAMS
+ BAUDRATE .byte ; Baudrate
+ DATABITS .byte ; Number of data bits
+ STOPBITS .byte ; Number of stop bits
+ PARITY .byte ; Parity setting
+ HANDSHAKE .byte ; Type of handshake to use
+.endstruct
;------------------------------------------------------------------------------
; Serial parameters
; Baudrate
SER_BAUD_45_5 = $00
-SER_BAUD_50 = $01
+SER_BAUD_50 = $01
SER_BAUD_75 = $02
-SER_BAUD_110 = $03
-SER_BAUD_134_5 = $04
+SER_BAUD_110 = $03
+SER_BAUD_134_5 = $04
SER_BAUD_150 = $05
-SER_BAUD_300 = $06
-SER_BAUD_600 = $07
-SER_BAUD_1200 = $08
+SER_BAUD_300 = $06
+SER_BAUD_600 = $07
+SER_BAUD_1200 = $08
SER_BAUD_1800 = $09
-SER_BAUD_2400 = $0A
+SER_BAUD_2400 = $0A
SER_BAUD_3600 = $0B
-SER_BAUD_4800 = $0C
+SER_BAUD_4800 = $0C
SER_BAUD_7200 = $0D
-SER_BAUD_9600 = $0E
-SER_BAUD_19200 = $0F
-SER_BAUD_38400 = $10
-SER_BAUD_57600 = $11
-SER_BAUD_115200 = $12
-SER_BAUD_230400 = $13
-
+SER_BAUD_9600 = $0E
+SER_BAUD_19200 = $0F
+SER_BAUD_38400 = $10
+SER_BAUD_57600 = $11
+SER_BAUD_115200 = $12
+SER_BAUD_230400 = $13
+SER_BAUD_31250 = $14
+SER_BAUD_62500 = $15
+SER_BAUD_56_875 = $16
+
; Data bit settings
-SER_BITS_5 = $00
-SER_BITS_6 = $01
-SER_BITS_7 = $02
-SER_BITS_8 = $03
+SER_BITS_5 = $00
+SER_BITS_6 = $01
+SER_BITS_7 = $02
+SER_BITS_8 = $03
; Stop bit settings
-SER_STOP_1 = $00
-SER_STOP_2 = $01
+SER_STOP_1 = $00
+SER_STOP_2 = $01
; Parity
-SER_PAR_NONE = $00
-SER_PAR_ODD = $01
-SER_PAR_EVEN = $02
-SER_PAR_MARK = $03
-SER_PAR_SPACE = $04
+SER_PAR_NONE = $00
+SER_PAR_ODD = $01
+SER_PAR_EVEN = $02
+SER_PAR_MARK = $03
+SER_PAR_SPACE = $04
; Handshake
SER_HS_NONE = $00 ; No handshake
SER_HS_HW = $01 ; Hardware (RTS/CTS) handshake
SER_HS_SW = $02 ; Software handshake
-; Bit masks to mask out things from the status returned by rs232_status
-SER_STATUS_PE = $01 ; Parity error
-SER_STATUS_FE = $02 ; Framing error
-SER_STATUS_OE = $04 ; Overrun error
-SER_STATUS_DCD = $20 ; NOT data carrier detect
-SER_STATUS_DSR = $40 ; NOT data set ready
+; Bit masks to mask out things from the status returned by ser_status
+SER_STATUS_PE = $01 ; Parity error
+SER_STATUS_FE = $02 ; Framing error
+SER_STATUS_OE = $04 ; Overrun error
+SER_STATUS_DCD = $20 ; NOT data carrier detect
+SER_STATUS_DSR = $40 ; NOT data set ready
;------------------------------------------------------------------------------
; Variables
- .global _ser_drv ; Pointer to driver
+ .global _ser_drv ; Pointer to driver
;------------------------------------------------------------------------------
; Driver entry points
.global ser_install
.global ser_uninstall
- .global ser_params
+ .global ser_open
+ .global ser_close
.global ser_get
.global ser_put
- .global ser_pause
- .global ser_unpause
.global ser_status
.global ser_ioctl
-
+ .global ser_irq
;------------------------------------------------------------------------------
-; ASM functions
+; C callable functions
+ .global _ser_load_driver
.global _ser_unload
.global _ser_install
.global _ser_uninstall
- .global _ser_params
+ .global _ser_open
+ .global _ser_close
.global _ser_get
.global _ser_put
- .global _ser_pause
- .global _ser_unpause
.global _ser_status
.global _ser_ioctl
-
+ .global _ser_clear_ptr