forked from MirrorRepos/RomWBW
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
228 lines
6.1 KiB
228 lines
6.1 KiB
;:::::::::::::::::::::::::::::::::::::::::::::::::*************************
|
|
; Byte I/O Routines *** Hardware Specific ***
|
|
; - Retro-Brew Processor boards w/ HBIOS - *************************
|
|
;
|
|
; Several serial and parallel options exist with HBIOS. With SBC, SIMH or
|
|
; ZETA two serial ports are available at RS-232 signalling levels via a
|
|
; 16650 compatible UART. For Mark IV or N8, the internal ACSI ports
|
|
; are used. The primary port defined here as COM1 uses ASCI Channel A of
|
|
; the Z80182. COM2 uses ACSI Channel B are available at TTL voltage levels
|
|
; A full Parallel port is available on SBC and ZETA is used as the
|
|
; primary List (Printer) Device.
|
|
;
|
|
;
|
|
; 1.3 - 27 Mar 14 - Initial N8VEM test release WW+LN
|
|
; 1.2 - 28 Aug 01 - Final scrub for GPL release. HFB
|
|
; 1.1a- 11 May 97 - Cleaned code, fixed added port accesses. HFB
|
|
; 1.1 - 25 Jan 97 - Revised ESCC Baud rate calcs, added COM3-5. HFB
|
|
; 1.0 - 19 Jun 96 - Initial Release for the P112 from YASBEC. HFB
|
|
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
; Place constants for Expansions here
|
|
|
|
CSEG
|
|
|
|
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
; Byte Device Control Tables
|
|
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
|
|
DEVCFG:
|
|
|
|
COM1: DEFB 'COM1' ; 4-Char ID
|
|
DEFB 11101011B ; Baud Rate
|
|
; ||||++++--- Baud Rate setting (19.2 kbps)
|
|
; ++++------- Maximum Baud Rate (115.2 kbps)
|
|
; Rates are as:
|
|
; 0000 = None 0001 = 134.5 0011 = 50 0011 = 75
|
|
; 0100 = 150 0101 = 300 0110 = 600 0111 = 1200
|
|
; 1000 = 2400 1001 = 4800 1010 = 9600 1011 = 19200
|
|
; 1100 = 38400 1101 = 76800 1110 = 115200 1111 = Fixed
|
|
|
|
DEFB 11100001B ; Config Byte (In,Out,CTS/RTS control,1 Stop)
|
|
; |||||||+---------- Stop Bits 1 (1), 2 (0)
|
|
; ||||||+----------- Parity Enable (1), Disable (0)
|
|
; |||||+------------ Parity Even (1), Odd (0)
|
|
; ||||+------------- Data Bits 8 (0), 7 (1)
|
|
; |||+-------------- Xon-Xoff Handshake
|
|
; ||+--------------- CTS/RTS Handshake
|
|
; |+---------------- Input Device No (0), Yes (1)
|
|
; +----------------- Output Device No (0), Yes (1)
|
|
|
|
DEFB 0FFH ; Input Data Mask
|
|
DEFB 0FFH ; Output Data Mask
|
|
|
|
DEFW COM1OT ; COM 1 Byte Output
|
|
DEFW COM1OS ; COM 1 Output Status
|
|
DEFW COM1IN ; COM 1 Byte Input
|
|
DEFW COM1IS ; COM 1 Input Status
|
|
|
|
COM2: DEFB 'COM2' ; 4-Char ID
|
|
DEFB 11101010B ; Baud Rate (115.2k Max, 9600 Set)
|
|
DEFB 11100001B ; Config Byte (In,Out,CTS/RTS control,1 Stop)
|
|
DEFB 0FFH ; Input Data Mask
|
|
DEFB 0FFH ; Output Data Mask
|
|
|
|
DEFW COM2OT ; COM 2 Byte Output
|
|
DEFW COM2OS ; COM 2 Output Status
|
|
DEFW COM2IN ; COM 2 Byte Input
|
|
DEFW COM2IS ; COM 2 Input Status
|
|
|
|
PIO1: DEFB 'PIO1' ; 4-Char ID
|
|
DEFB 00000000B ; Baud Rate (None)
|
|
DEFB 10000000B ; Config Byte (Output Only)
|
|
DEFB 0FFH ; Input Data Mask
|
|
DEFB 07FH ; Output Data Mask
|
|
|
|
DEFW PIO1OT ; PIO Byte Output
|
|
DEFW PIO1OS ; PIO Output Status
|
|
DEFW PIO1IN ; PIO Byte Input
|
|
DEFW PIO1IS ; PIO Input Status
|
|
|
|
IF MOVCPM OR [MORDEV]
|
|
DEFB 'NULL' ; 4-Char ID
|
|
DEFB 00000000B ; Baud Rate (None)
|
|
DEFB 11000000B ; Config Byte
|
|
DEFB 0FFH ; Input Data Mask
|
|
DEFB 0FFH ; Output Data Mask
|
|
|
|
DEFW ISFALSE ; Null Output
|
|
DEFW ISTRUE ; Null Output Status
|
|
DEFW ISFALSE ; Null Input
|
|
DEFW ISTRUE ; Null Input Status
|
|
ENDIF
|
|
|
|
DEFB 0 ; - End-of-Table marker
|
|
MAXBDV EQU [$-DEVCFG-1]/[COM2-COM1] ; Number of Character Devices Defined
|
|
|
|
DEVTBL: LD HL,DEVCFG ; BYTE device table
|
|
RET ; CP/M-3 device init
|
|
|
|
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
; COM1 Drivers
|
|
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
|
|
; Uses HBIOS
|
|
;.....
|
|
; COM1 Input Status Test
|
|
|
|
COM1IS:
|
|
LD BC,0200H + HB_IODEV ; Func=$02 (IS), Device/Unit=HB_IODEV
|
|
CALL HBX_INVOKE
|
|
RET
|
|
|
|
;.....
|
|
; COM1 Input Routine
|
|
; Remain in Loop until Char ready, then Return Char in A
|
|
|
|
COM1IN:
|
|
LD BC,0000H + HB_IODEV ; Func=$00 (IN), Device/Unit=HB_IODEV
|
|
CALL HBX_INVOKE
|
|
LD A,E
|
|
RET
|
|
|
|
;.....
|
|
; COM1 Output Status Test
|
|
|
|
COM1OS:
|
|
LD BC,0300H + HB_IODEV ; Func=$03 (OS), Device/Unit=HB_IODEV
|
|
CALL HBX_INVOKE
|
|
RET
|
|
|
|
;.....
|
|
; COM1 Output Routine (Byte to Send in C)
|
|
|
|
COM1OT:
|
|
LD E,C ; Character to E
|
|
LD BC,0100H + HB_IODEV ; Func=$01 (OT), Device/Unit=HB_IODEV
|
|
CALL HBX_INVOKE
|
|
RET
|
|
|
|
PAGE
|
|
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
; COM2 Drivers
|
|
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
|
|
; Uses HBIOS
|
|
;.....
|
|
; COM2 Input Status Test
|
|
|
|
COM2IS:
|
|
LD BC,0200H + HB_IODEV + 1 ; Func=$02 (IS), Device/Unit=HB_IODEV
|
|
CALL HBX_INVOKE
|
|
RET
|
|
|
|
;.....
|
|
; COM2 Input Routine
|
|
; Remain in Loop until Char ready, then Return Char in A
|
|
|
|
COM2IN:
|
|
LD BC,0000H + HB_IODEV + 1 ; Func=$00 (IN), Device/Unit=HB_IODEV
|
|
CALL HBX_INVOKE
|
|
LD A,E
|
|
RET
|
|
|
|
;.....
|
|
; COM2 Output Status Test
|
|
|
|
COM2OS:
|
|
LD BC,0300H + HB_IODEV + 1 ; Func=$03 (OS), Device/Unit=HB_IODEV
|
|
CALL HBX_INVOKE
|
|
RET
|
|
|
|
;.....
|
|
; COM2 Output Routine (Byte to Send in C)
|
|
|
|
COM2OT:
|
|
LD E,C ; Character to E
|
|
LD BC,0100H + HB_IODEV + 1 ; Func=$01 (OT), Device/Unit=HB_IODEV
|
|
CALL HBX_INVOKE
|
|
RET
|
|
|
|
PAGE
|
|
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
; Parallel I/O Drivers
|
|
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
; Uses "Standard" Parallel Centronics mode of SMC37C655 (output only)
|
|
;.....
|
|
; Parallel Input Status Test
|
|
|
|
PIO1IS: JR ISTRUE ; Not implemented
|
|
|
|
;.....
|
|
; Parallel Input Data fetch
|
|
|
|
PIO1IN: JP ISFALSE ; Not implemented
|
|
|
|
;.....
|
|
; Parallel Output Status Test
|
|
|
|
PIO1OS: JP ISTRUE ; Not implemented
|
|
|
|
;.....
|
|
; Parallel Output Routine
|
|
|
|
PIO1OT: JP ISFALSE ; Not implemented
|
|
|
|
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
;:: Helper Functions ::
|
|
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
|
|
ISTRUE: OR 0FFH ; Else set flags for Ready
|
|
RET
|
|
|
|
|
|
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
;:: D e v i c e I n i t i a l i z a t i o n ::
|
|
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
|
|
CSEG
|
|
DEVINI:
|
|
IF BANKED
|
|
CALL BIOSTK
|
|
CALL GOSYSB
|
|
JP JDVINI
|
|
COMMON /BANK2/
|
|
JDVINI:
|
|
ENDIF
|
|
|
|
RET ; WW
|
|
|