From a69218877c9a2fdddabb7e16c73547021ef8bc4c Mon Sep 17 00:00:00 2001 From: b1ackmai1er <39449559+b1ackmai1er@users.noreply.github.com> Date: Sun, 7 Oct 2018 15:45:46 +0800 Subject: [PATCH] Extend serial device type to support 4 devices including parallel port device. --- Source/HBIOS/hbios.asm | 52 ++++++++++++++++++++++++++++++++++-------- Source/HBIOS/pio.asm | 43 ++++++++++++++++++++++------------ 2 files changed, 70 insertions(+), 25 deletions(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index b0b765d1..59f40d5f 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -2808,7 +2808,7 @@ PS_SERIAL: PUSH BC ; SAVE UNIT INDEX FOR LATER ; ; UNIT COLUMN - PRTS("Char. $") + PRTS("CharIO $") LD A,C ; MOVE UNIT NUM TO A CALL PRTDECB ; PRINT IT, ASSUME SINGLE DIGIT PRTS(" $") ; PAD TO NEXT COLUMN @@ -2833,10 +2833,17 @@ PS_SERIAL: ; PS_PRTST: LD HL,PS_STRS232 ; ASSUME RS-232 - BIT 7,C ; 0=RS-232, 1=TERMINAL - JR Z,PS_PRTST1 ; HANDLE TERMINAL TYPE - LD HL,PS_STTERM ; TYPE IS TERMINAL -; + LD A,C + AND $C0 + JR Z,PS_PRTST1 ; 00 TYPE 0 - RS-232 + LD HL,PS_STTERM + CP $40 + JR Z,PS_PRTST1 ; 40 TYPE 1 - Terminal + LD HL,PS_STPPT + CP $80 + JR Z,PS_PRTST1 ; 80 TYPE 2 - Parallel + LD HL,PS_STUDEF +; ; C0 TYPE 3 - Undefined PS_PRTST1: CALL PS_PRT ; PRINT $ TERM STRING AT (HL), C:=CHARS PRINTED LD A,18 ; 18 CHAR FIELD @@ -2847,9 +2854,15 @@ PS_PRTST1: ; PRINT SERIAL CONFIG (UNIT IN E, ATTRIBUTE IN C) ; PS_PRTSC: - BIT 7,C ; 0=RS-232, 1=TERMINAL - JR NZ,PS_PRTSC1 ; PRINT TERMINAL CONFIG -; + LD A,C + AND $C0 + JR Z,PS_PRTSC0_1 ; 00 TYPE 0 - RS-232 + CP $40 + JR Z,PS_PRTSC1 ; 40 TYPE 1 - Terminal + CP $80 + JR Z,PS_PRTSC2_1 ; 80 TYPE 2 - Parallel +; ; C0 TYPE 3 - Undefined +PS_PRTSC0_1: ; PRINT RS-232 CONFIG LD B,BF_CIOQUERY ; HBIOS FUNC: GET CIO CONFIG LD C,E ; SET SERIAL UNIT NUM @@ -2907,6 +2920,23 @@ PS_PRTSC0: ; RET ; +PS_PRTSC2_1: + ; PRINT PARALLEL CONFIG + LD B,BF_CIOQUERY ; HBIOS FUNC: GET CIO CONFIG + LD C,E ; SET SERIAL UNIT NUM + RST 08 ; DE:HL := I/O CONFIG + LD A,D ; TEST FOR $FF + AND E + INC A ; SET Z IF DE == $FF + JP Z,PS_PRTNUL ; $FF == NO CONFIG DEFINED + LD A,E + OR A + LD HL,PS_STPPTIN + JR Z,PS_PRTST1 + LD HL,PS_STPPTOUT + JR PS_PRTST1 + RET +; PS_PRTSC1: ; PRINT TERMINAL CONFIG LD A,C ; GET ATTRIBUTE VALUE @@ -3111,12 +3141,14 @@ PS_SDPIO .TEXT "PORT$" PS_STRS232 .TEXT "RS-232$" PS_STTERM .TEXT "Terminal$" PS_STPPT .TEXT "Parallel$" +PS_STUDEF .TEXT "Undefined$" ; PS_STPARMAP .DB "NONENMNS" - ; -; SERIAL TYPE STRINGS +; PARALLEL TYPE STRINGS ; +PS_STPPTIN .TEXT "Input$" +PS_STPPTOUT .TEXT "Output$" ; ; VIDEO DEVICE STRINGS ; diff --git a/Source/HBIOS/pio.asm b/Source/HBIOS/pio.asm index 87a3d0ec..d9e2af85 100644 --- a/Source/HBIOS/pio.asm +++ b/Source/HBIOS/pio.asm @@ -13,6 +13,13 @@ PIO4B .EQU ; ECB-4PIO PIO5A .EQU ; ECB-4PIO PIO5B .EQU ; ECB-4PIO +PIO_Input .EQU $0000 +PIO_Output .EQU $0001 + + +DEFPIOCFGA .EQU $8000 + PIO_Input +DEFPIOCFGB .EQU $8000 + PIO_Output + PIO_NONE .EQU 0 PIO_ZPIO .EQU 1 PIO_8255 .EQU 2 @@ -122,7 +129,7 @@ PIO_CFG: .DB PIO_ZPIO ; PIO TYPE (SET DURING INIT) .DB 0 ; PIO CHANNEL (A) .DB PIOBASE+2 ; BASE PORT (CMD PORT) - .DW DEFSIOACFG ; LINE CONFIGURATION + .DW DEFPIOCFGA ; LINE CONFIGURATION .DW SIOA_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; ; PIO CHANNEL B @@ -130,7 +137,7 @@ PIO_CFG: .DB PIO_ZPIO ; PIO TYPE (SET DURING INIT) .DB 1 ; PIO CHANNEL (B) .DB PIOBASE+3 ; BASE PORT (CMD PORT) - .DW DEFSIOBCFG ; LINE CONFIGURATION + .DW DEFPIOCFGB ; LINE CONFIGURATION .DW SIOB_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; ; PIO CHANNEL A @@ -138,7 +145,7 @@ PIO_CFG: .DB PIO_ZPIO ; PIO TYPE (SET DURING INIT) .DB 0 ; PIO CHANNEL (A) .DB PIOBASE+6 ; BASE PORT (CMD PORT) - .DW DEFSIOACFG ; LINE CONFIGURATION + .DW DEFPIOCFGA ; LINE CONFIGURATION .DW SIOA_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; ; PIO CHANNEL B @@ -146,14 +153,14 @@ PIO_CFG: .DB PIO_ZPIO ; PIO TYPE (SET DURING INIT) .DB 1 ; PIO CHANNEL (B) .DB PIOBASE+7 ; BASE PORT (CMD PORT) - .DW DEFSIOBCFG ; LINE CONFIGURATION + .DW DEFPIOCFGB ; LINE CONFIGURATION .DW SIOB_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; PIO CHANNEL A .DB 4 ; DEVICE NUMBER (SET DURING INIT) .DB PIO_ZPIO ; PIO TYPE (SET DURING INIT) .DB 0 ; PIO CHANNEL (A) .DB 4PIOBASE+2 ; BASE PORT (CMD PORT) - .DW DEFSIOACFG ; LINE CONFIGURATION + .DW DEFPIOCFGA ; LINE CONFIGURATION .DW SIOA_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; ; PIO CHANNEL B @@ -161,7 +168,7 @@ PIO_CFG: .DB PIO_ZPIO ; PIO TYPE (SET DURING INIT) .DB 1 ; PIO CHANNEL (B) .DB 4PIOBASE+3 ; BASE PORT (CMD PORT) - .DW DEFSIOBCFG ; LINE CONFIGURATION + .DW DEFPIOCFGB ; LINE CONFIGURATION .DW SIOB_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; ; PIO CHANNEL A @@ -169,7 +176,7 @@ PIO_CFG: .DB PIO_ZPIO ; PIO TYPE (SET DURING INIT) .DB 0 ; PIO CHANNEL (A) .DB 4PIOBASE+6 ; BASE PORT (CMD PORT) - .DW DEFSIOACFG ; LINE CONFIGURATION + .DW DEFPIOCFGA ; LINE CONFIGURATION .DW SIOA_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; ; PIO CHANNEL B @@ -177,7 +184,7 @@ PIO_CFG: .DB PIO_ZPIO ; PIO TYPE (SET DURING INIT) .DB 1 ; PIO CHANNEL (B) .DB 4PIOBASE+7 ; BASE PORT (CMD PORT) - .DW DEFSIOBCFG ; LINE CONFIGURATION + .DW DEFPIOCFGB ; LINE CONFIGURATION .DW SIOB_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; ; PIO CHANNEL A @@ -185,7 +192,7 @@ PIO_CFG: .DB PIO_ZPIO ; PIO TYPE (SET DURING INIT) .DB 0 ; PIO CHANNEL (A) .DB 4PIOBASE+10 ; BASE PORT (CMD PORT) - .DW DEFSIOACFG ; LINE CONFIGURATION + .DW DEFPIOCFGA ; LINE CONFIGURATION .DW SIOA_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; ; PIO CHANNEL B @@ -193,7 +200,7 @@ PIO_CFG: .DB PIO_ZPIO ; PIO TYPE (SET DURING INIT) .DB 1 ; PIO CHANNEL (B) .DB 4PIOBASE+11 ; BASE PORT (CMD PORT) - .DW DEFSIOBCFG ; LINE CONFIGURATION + .DW DEFPIOCFGB ; LINE CONFIGURATION .DW SIOB_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; ; PIO CHANNEL A @@ -201,7 +208,7 @@ PIO_CFG: .DB PIO_ZPIO ; PIO TYPE (SET DURING INIT) .DB 0 ; PIO CHANNEL (A) .DB 4PIOBASE+14 ; BASE PORT (CMD PORT) - .DW DEFSIOACFG ; LINE CONFIGURATION + .DW DEFPIOCFGA ; LINE CONFIGURATION .DW SIOA_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; ; PIO CHANNEL B @@ -209,7 +216,7 @@ PIO_CFG: .DB PIO_ZPIO ; PIO TYPE (SET DURING INIT) .DB 1 ; PIO CHANNEL (B) .DB 4PIOBASE+15 ; BASE PORT (CMD PORT) - .DW DEFSIOBCFG ; LINE CONFIGURATION + .DW DEFPIOCFGB ; LINE CONFIGURATION .DW SIOB_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; ; PIO CHANNEL A @@ -217,7 +224,7 @@ PIO_CFG: .DB PIO_ZPIO ; PIO TYPE (SET DURING INIT) .DB 0 ; PIO CHANNEL (A) .DB 4PIOBASE+14 ; BASE PORT (CMD PORT) - .DW DEFSIOACFG ; LINE CONFIGURATION + .DW DEFPIOCFGA ; LINE CONFIGURATION .DW SIOA_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; ; PIO CHANNEL B @@ -225,7 +232,7 @@ PIO_CFG: .DB PIO_8255 ; PIO TYPE (SET DURING INIT) .DB 1 ; PIO CHANNEL (B) .DB 4PIOBASE+15 ; BASE PORT (CMD PORT) - .DW DEFSIOBCFG ; LINE CONFIGURATION + .DW DEFPIOCFGB ; LINE CONFIGURATION .DW SIOB_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; ; @@ -259,6 +266,10 @@ PIO_IST: PIO_OST: RET ; +; PIO_INITDEV - Configure device. +; If DE = FFFF then extract the configuratio information from the table of devices and program the device using those settings. +; Otherwise use the configuration information in DE to program those settings and save them in the device table + PIO_INITDEV: XOR A ; SIGNAL SUCCESS RET @@ -284,7 +295,9 @@ PIO_QUERY: PIO_DEVICE: LD D,CIODEV_PIO ; D := DEVICE TYPE LD E,(IY) ; E := PHYSICAL UNIT - LD C,$80 + LD A,E + SET 7,A + LD C,A XOR A ; SIGNAL SUCCESS RET ;