From b3ec557ab9f7a38270e48ea820ff891d68f7f12a Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Tue, 26 May 2020 15:33:31 -0700 Subject: [PATCH] CIO DEVICE API update - Updates DEVICE call for all CIO devices to return unit mode and I/O base address - Improved experimental XModem (XMX.COM) that uses direct hardware I/O for UART and USB-FIFO devices --- Doc/RomWBW Applications.pdf | Bin 141698 -> 141698 bytes Doc/RomWBW Architecture.pdf | Bin 427689 -> 427740 bytes Doc/RomWBW Disk Catalog.pdf | Bin 130980 -> 130980 bytes Doc/RomWBW Getting Started.pdf | Bin 170905 -> 170905 bytes Source/Apps/XM/xmx.180 | 581 ++++++++++++++++++++++++--------- Source/Doc/Architecture.md | 4 +- Source/HBIOS/API.txt | 4 + Source/HBIOS/acia.asm | 2 + Source/HBIOS/asci.asm | 2 + Source/HBIOS/duart.asm | 10 +- Source/HBIOS/pio.asm | 2 + Source/HBIOS/ppp.asm | 2 + Source/HBIOS/prp.asm | 2 + Source/HBIOS/sio.asm | 6 + Source/HBIOS/uart.asm | 2 + Source/HBIOS/uf.asm | 2 + Source/ver.inc | 2 +- Source/ver.lib | 2 +- 18 files changed, 457 insertions(+), 166 deletions(-) diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 9b9368395c19a9e1f28aece985f7da76a6c3e3be..df2425ce7ac63b6f5b7269c49e16f230ccc15fd0 100644 GIT binary patch delta 135 zcmZp=%+Yk2qhSl<;{WVsh9)K^h9=Wj{b!VcakiiR&lswi;AUazWN7K)0+hEjG;p>s zHaBu{b+t4%vNSL=cQkggQ?MbZBv!%Bj;pvNv8be?C^e1C(Adz>(2Pq})z#mP3jnLf BB)$Lu delta 135 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 diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index 4ee85ddf92054a43b044bc65cab1b3e5db0f8907..e1dedd0b6cc8e525e0d3c7eea5bfe631b90c33e0 100644 GIT binary patch delta 111 zcmZ4TpMA-H_J%EtM_;m=8Jd`w7#UAL^O8{p#@YV|1-)00K|qMQvd(} delta 111 zcmZ4TpMA-H_J%EtM_;m=8k(4zo0?BQ^O8{p#@YVvlqoJdvqnVSLfvJVLvz>wsAtlq>|1-)00K+RFB>(^b diff --git a/Doc/RomWBW Getting Started.pdf b/Doc/RomWBW Getting Started.pdf index 90f6e84be9845cc2ad524468d58fb5f333b83904..598da3515e13144972f53f70b41cdccea459a045 100644 GIT binary patch delta 113 zcmbQaoonWHu7(!IElh5?>}G~0CMJdk(|vQ9WMG`_1-VQob)7AZOpMK4oGe_7EL;pt hO^jR(OpFW-ja)2D49tuz9S!UhYzQftUNf6X7681h9Bcpp delta 113 zcmbQaoonWHu7(!IElh5??52h$rsgIl(|vQ9WMG`_1-VQob)8*}3|%eF+>FgE3>_^j h&CCo8oD3~YoGpw@EM1*l4J_>xYzQftUNf6X768%>9P|JH diff --git a/Source/Apps/XM/xmx.180 b/Source/Apps/XM/xmx.180 index a07cfa68..479a3dfb 100644 --- a/Source/Apps/XM/xmx.180 +++ b/Source/Apps/XM/xmx.180 @@ -61,14 +61,74 @@ MINIT: CALL IDBIO ; 1=HBIOS, 2=UBIOS LD (BIOID),A ; Save it DEC A ; Test for HBIOS - JR Z,HINIT ; Do HBIOS setup + JR Z,MINIT_HB ; Do HBIOS setup DEC A ; Test for UBIOS - JR Z,UINIT ; Do UBIOS setup + JR Z,MINIT_UB ; Do UBIOS setup ; ; Neither UNA nor RomWBW LD DE,ERR_BIO ; BIOS error message JP FAIL ; Print msg and bail out ; +MINIT_HB: + ; Display RomWBW notification string + LD DE,HB_TAG ; BIOS notification string + LD C,9 ; BDOS string display function + CALL BDOS ; Do it +; + ; Get CPU speed from RomWBW HBIOS and save it + LD B,0F8H ; HBIOS SYSGET function 0xF8 + LD C,0F0H ; CPUINFO subfunction 0xF0 + RST 08 ; Do it, L := CPU speed in MHz + LD A,L ; Move it to A + LD (CPUSPD),A ; Save it +; + ; Get HBIOS bank id + LD BC,0F8F2H ; HBIOS SYSGET, Bank Info + RST 08 ; do it + JP NZ,APIERR ; handle API error + LD A,D ; BIOS bank id to A + LD (BIOSBID),A ; save it +; + ; Lookup current console to use as default for transfer + LD B,0FAH ; HBIOS PEEK + LD A,(BIOSBID) ; get BIOS bank id + LD D,A ; ... and put in D + LD HL,100H + 12H ; HCB console unit address + RST 08 ; E := value + LD A,E ; put in A + LD (UNIT),A ; save it +; + ; Get HBIOS character 0 device type + LD B,006H ; HBIOS DEVICE function 0x06 + LD C,000H ; HBIOS char 0 device + RST 08 ; Do it, D=device type + LD A,D ; Put result in A + CP 000H ; UART? + JP Z,UA_INIT ; If so, do UART H/W init + CP 080H ; USB-FIFO? + JP Z,UF_INIT ; If so, do USB-FIFO H/W init + JP HB_INIT ; Otherwise, use BIOS I/O +; +MINIT_UB: + ; Display UNA notification string + LD DE,UB_TAG ; BIOS notification string + LD C,9 ; BDOS string display function + CALL BDOS ; Do it +; + ; Get CPU speed from UNA and save it + LD C,0F8H ; UNA BIOS Get PHI function + RST 08 ; Returns speed in Hz in DE:HL + LD B,4 ; Divide MHz in DE:HL by 100000H +MINIT_UB1: + SRL D ; ... to get approx CPU speed in + RR E ; ...MHz. Throw away HL, and + DJNZ MINIT_UB1 ; ...right shift DE by 4. + INC E ; Fix up for value truncation + LD A,E ; Put in A + LD (CPUSPD),A ; Save it +; + JP UB_INIT ; UNA BIOS init +; MINIT_RET: PUSH HL ; Save HL (JP table adr) @@ -107,45 +167,35 @@ MINIT_RET: LD HL,(RCVSCL) ; HL := receive scalar RET ; and return ; -HINIT: - ; Display RomWBW notification string - LD DE,HBTAG ; BIOS notification string - LD C,9 ; BDOS string display function - CALL BDOS ; Do it -; - ; Get CPU speed from RomWBW HBIOS and save it - LD B,0F8H ; HBIOS SYSGET function 0xF8 - LD C,0F0H ; CPUINFO subfunction 0xF0 - RST 08 ; Do it, L := CPU speed in MHz - LD A,L ; Move it to A - LD (CPUSPD),A ; Save it -; - JP H_INIT ; HBIOS init +;----------------------------------------------------------------------- ; -UINIT: - ; Display UNA notification string - LD DE,UBTAG ; BIOS notification string - LD C,9 ; BDOS string display function - CALL BDOS ; Do it +; Uninitialize modem ; - ; Get CPU speed from UNA and save it - LD C,0F8H ; UNA BIOS Get PHI function - RST 08 ; Returns speed in Hz in DE:HL - LD B,4 ; Divide MHz in DE:HL by 100000H -UINIT1: - SRL D ; ... to get approx CPU speed in - RR E ; ...MHz. Throw away HL, and - DJNZ UINIT1 ; ...right shift DE by 4. - INC E ; Fix up for value truncation - LD A,E ; Put in A - LD (CPUSPD),A ; Save it +UNINIT: + LD A,(BIOID) + CP 1 ; Is HBIOS? + JR Z,HUNINIT ; Handle HBIOS + CP 2 ; Is UBIOS? + JR Z,UUNINIT ; Handle UBIOS + RET ; Just return ; - JP U_INIT ; UNA BIOS init +HUNINIT: + ; HBIOS: Reset character device 0 + LD B,04H ; HBIOS CIOINIT function 0x04 + LD A,(UNIT) ; HBIOS serial unit number + LD C,A ; Put in C for func call + LD DE,-1 ; Reset w/ current settings + RST 08 ; Do it + RET ; not initialized, so no 'UN-INITIALIZE' ; -HWERR: - ; Failed to identify target comm hardware - LD DE,ERR_HW ; Hardware error message - JP FAIL ; Print message and bail out +UUNINIT: + ; UBIOS: Reset character device 0 + LD C,10H ; UNA INIT function 0x10 + LD A,(UNIT) ; UBIOS serial unit number + LD B,A ; Put in B for func call + LD DE,-1 ; Reset w/ current settings + RST 08 ; Do it + RET ; not initialized, so no 'UN-INITIALIZE' ; ; Identify active BIOS. RomWBW HBIOS=1, UNA UBIOS=2, else 0 ; @@ -184,6 +234,16 @@ IDBIO2: XOR A ; Setup return value of 0 RET ; and done ; +HWERR: + ; Failed to identify target comm hardware + LD DE,ERR_HW ; Hardware error message + JP FAIL ; Print message and bail out +; +APIERR: + ; API returned unepected failure + LD DE,ERR_API ; API error message + JP FAIL ; Pprint message and bail out +; FAIL: ; DE has error string address LD C,9 ; BDOS string display function @@ -192,36 +252,6 @@ FAIL: ; ;----------------------------------------------------------------------- ; -; Uninitialize modem -; -UNINIT: - LD A,(BIOID) - CP 1 ; Is HBIOS? - JR Z,H_UNINIT ; Handle HBIOS - CP 2 ; Is UBIOS? - JR Z,U_UNINIT ; Handle UBIOS - RET ; Just return -; -H_UNINIT: - ; HBIOS: Reset character device 0 - LD B,04H ; HBIOS CIOINIT function 0x04 - LD A,(UNIT) ; HBIOS serial unit number - LD C,A ; Put in C for func call - LD DE,-1 ; Reset w/ current settings - RST 08 ; Do it - RET ; not initialized, so no 'UN-INITIALIZE' -; -U_UNINIT: - ; UBIOS: Reset character device 0 - LD C,10H ; UNA INIT function 0x10 - LD A,(UNIT) ; UBIOS serial unit number - LD B,A ; Put in B for func call - LD DE,-1 ; Reset w/ current settings - RST 08 ; Do it - RET ; not initialized, so no 'UN-INITIALIZE' -; -;----------------------------------------------------------------------- -; ; The following are all dummy routines that are unused because MINIT ; dynamically installs the real jump table. ; @@ -240,17 +270,20 @@ EXTRA3: BIOID DB 0 ; BIOS ID, 1=HBIOS, 2=UBIOS CPUSPD DB 10 ; CPU speed in MHz RCVSCL DW 6600 ; RECV loop timeout scalar -UNIT DB 0 ; HBIOS serial device unit number +UNIT DB 0 ; BIOS serial device unit number +BIOSBID DB 00H ; BIOS bank id ; TAG DB "RomWBW, 23-May-2020$" ; -H_LBL DB ", HBIOS FastPath$" -U_LBL DB ", UNA UBIOS$" +HB_LBL DB ", HBIOS FastPath$" +UB_LBL DB ", UNA UBIOS$" +UA_LBL DB ", UART$" +UF_LBL DB ", USB-FIFO$" COM_LBL DB " on COM$" EXP_LBL DB 13, 10, 13, 10, "*** Experimental ***$" ; -UBTAG DB " [UNA]$" -HBTAG DB " [WBW]$" +UB_TAG DB " [UNA]$" +HB_TAG DB " [WBW]$" ; CRLF DB 13, 10, "$" ; @@ -270,38 +303,22 @@ ERR_API DB 13, 10, 13, 10, "++ BIOS API Error ++", 13, 10, "$" ; table at program startup. See MINIT above. Note that only a ; subset of the jump table is overlaid (SENDR to SPEED). ; -H_JPTBL: - JP H_SENDR ; send character (via pop psw) - JP H_CAROK ; test for carrier - JP H_MDIN ; receive data byte - JP H_GETCHR ; get character from modem - JP H_RCVRDY ; check receive ready - JP H_SNDRDY ; check send ready - JP H_SPEED ; get speed value for file transfer time +HB_JPTBL: + JP HB_SENDR ; send character (via pop psw) + JP HB_CAROK ; test for carrier + JP HB_MDIN ; receive data byte + JP HB_GETCHR ; get character from modem + JP HB_RCVRDY ; check receive ready + JP HB_SNDRDY ; check send ready + JP HB_SPEED ; get speed value for file transfer time ; ;----------------------------------------------------------------------- ; ; HBIOS initialization ; -H_INIT: +HB_INIT: LD HL,2150 ; Smaller receive loop timeout scalar LD (RCVSCL),HL ; ... to compensate for BIOS overhead -; - ; Get HBIOS bank id - LD BC,0F8F2H ; HBIOS SYSGET, Bank Info - RST 08 ; do it - JR NZ,H_APIERR ; handle API error - LD A,D ; BIOS bank id to A - LD (H_BNKID),A ; save it -; - ; Lookup current console to use as default for transfer - LD B,0FAH ; HBIOS PEEK - LD A,(H_BNKID) ; get BIOS bank id - LD D,A ; ... and put in D - LD HL,100H + 12H ; HCB console unit address - RST 08 ; E := value - LD A,E ; put in A - LD (UNIT),A ; save it ; ; Patch SENDR w/ FastPath addresses LD BC,0F801H ; Get CIO func/data adr @@ -309,9 +326,9 @@ H_INIT: LD A,(UNIT) ; get desired char unit LD E,A ; and put in E RST 08 - JR NZ,H_APIERR ; handle API error - LD (H_UDAT),DE ; Plug in data adr - LD (H_SCFN),HL ; Plug in func adr + JP NZ,APIERR ; handle API error + LD (HB_UDAT),DE ; Plug in data adr + LD (HB_SCFN),HL ; Plug in func adr ; ; Patch GETCHR/MDIN w/ FastPath addresses LD BC,0F801H ; Get CIO func/data adr @@ -319,8 +336,8 @@ H_INIT: LD A,(UNIT) ; get desired char unit LD E,A ; and put in E RST 08 - JR NZ,H_APIERR ; handle API error - LD (H_GCFN),HL ; Plug in func adr + JP NZ,APIERR ; handle API error + LD (HB_GCFN),HL ; Plug in func adr ; ; Patch RCVRDY w/ FastPath addresses LD BC,0F801H ; Get CIO func/data adr @@ -328,8 +345,8 @@ H_INIT: LD A,(UNIT) ; get desired char unit LD E,A ; and put in E RST 08 - JR NZ,H_APIERR ; handle API error - LD (H_RRFN),HL ; Plug in func adr + JP NZ,APIERR ; handle API error + LD (HB_RRFN),HL ; Plug in func adr ; ; Patch SNDRDY w/ FastPath addresses LD BC,0F801H ; Get CIO func/data adr @@ -337,31 +354,27 @@ H_INIT: LD A,(UNIT) ; get desired char unit LD E,A ; and put in E RST 08 - JR NZ,H_APIERR ; handle API error - LD (H_SRFN),HL ; Plug in func adr + JP NZ,APIERR ; handle API error + LD (HB_SRFN),HL ; Plug in func adr ; - LD HL,H_JPTBL - LD DE,H_LBL + LD HL,HB_JPTBL + LD DE,HB_LBL JP MINIT_RET ; -H_APIERR: - LD DE,ERR_API - JP FAIL -; ;----------------------------------------------------------------------- ; ; Send character on top of stack ; -H_SENDR: +HB_SENDR: POP AF ; get character to send from stack PUSH BC PUSH DE PUSH HL LD E,A ; character to E - LD IY,(H_UDAT) - LD A,(H_BNKID) ; call into HBIOS bank + LD IY,(HB_UDAT) + LD A,(BIOSBID) ; call into HBIOS bank LD IX,0000H -H_SCFN EQU $-2 +HB_SCFN EQU $-2 CALL 0FFF9H ; HBIOS bank call POP HL POP DE @@ -372,28 +385,31 @@ H_SCFN EQU $-2 ; ; Test and report carrier status, Z set if carrier present ; -H_CAROK: +HB_CAROK: XOR A ; not used, always indicate present RET ; ;----------------------------------------------------------------------- ; -; Get a character (assume character ready has already been tested) +; Get a character ; -; GETCHR must NOT block. +; GETCHR must not block ; -H_GETCHR: - CALL H_RCVRDY +HB_GETCHR: + CALL HB_RCVRDY RET NZ - -H_MDIN: + ; Fall thru if char ready +; +; MDIN can assume a character is ready +; +HB_MDIN: PUSH BC PUSH DE PUSH HL - LD IY,(H_UDAT) - LD A,(H_BNKID) ; call into HBIOS bank + LD IY,(HB_UDAT) + LD A,(BIOSBID) ; call into HBIOS bank LD IX,0000H -H_GCFN EQU $-2 +HB_GCFN EQU $-2 CALL 0FFF9H ; HBIOS bank call LD A,E ; byte received to A POP HL @@ -407,14 +423,14 @@ H_GCFN EQU $-2 ; Error code returned in A register ; *** Error code does not seem to be used *** ; -H_RCVRDY: +HB_RCVRDY: PUSH BC PUSH DE PUSH HL - LD IY,(H_UDAT) - LD A,(H_BNKID) ; call into HBIOS bank + LD IY,(HB_UDAT) + LD A,(BIOSBID) ; call into HBIOS bank LD IX,0000H -H_RRFN EQU $-2 +HB_RRFN EQU $-2 CALL 0FFF9H ; HBIOS bank call SUB 1 ; CF set IFF zero RL A ; CF to bit 0 of A @@ -429,14 +445,14 @@ H_RRFN EQU $-2 ; ; Test for ready to send a character, Z = ready ; -H_SNDRDY: +HB_SNDRDY: PUSH BC PUSH DE PUSH HL - LD IY,(H_UDAT) - LD A,(H_BNKID) ; call into HBIOS bank + LD IY,(HB_UDAT) + LD A,(BIOSBID) ; call into HBIOS bank LD IX,0000H -H_SRFN EQU $-2 +HB_SRFN EQU $-2 CALL 0FFF9H ; HBIOS bank call SUB 1 ; CF set IFF zero RL A ; CF to bit 0 of A @@ -450,14 +466,13 @@ H_SRFN EQU $-2 ; ; Report baud rate (index into SPTBL returned in register A) ; -H_SPEED: +HB_SPEED: LD A,8 ; arbitrarily return 9600 baud RET ; ; ; -H_BNKID DB 00H ; HBIOS bank id -H_UDAT DW 0000H ; Unit data address +HB_UDAT DW 0000H ; Unit data address ; ; ;======================================================================= @@ -472,20 +487,20 @@ H_UDAT DW 0000H ; Unit data address ; table at program startup. See MINIT above. Note that only a ; subset of the jump table is overlaid (SENDR to SPEED). ; -U_JPTBL: - JP U_SENDR ; send character (via pop psw) - JP U_CAROK ; test for carrier - JP U_MDIN ; receive data byte - JP U_GETCHR ; get character from modem - JP U_RCVRDY ; check receive ready - JP U_SNDRDY ; check send ready - JP U_SPEED ; get speed value for file transfer time +UB_JPTBL: + JP UB_SENDR ; send character (via pop psw) + JP UB_CAROK ; test for carrier + JP UB_MDIN ; receive data byte + JP UB_GETCHR ; get character from modem + JP UB_RCVRDY ; check receive ready + JP UB_SNDRDY ; check send ready + JP UB_SPEED ; get speed value for file transfer time ; ;----------------------------------------------------------------------- ; ; UBIOS initialization ; -U_INIT: +UB_INIT: ; ; TODO: ; - TEST!!! @@ -494,15 +509,15 @@ U_INIT: LD HL,3000 ; Smaller receive loop timeout scalar LD (RCVSCL),HL ; ... to compensate for BIOS overhead ; - LD HL,U_JPTBL - LD DE,U_LBL + LD HL,UB_JPTBL + LD DE,UB_LBL JP MINIT_RET ; ;----------------------------------------------------------------------- ; ; Send character on top of stack ; -U_SENDR: +UB_SENDR: POP AF ; get character to send from stack PUSH BC PUSH DE @@ -519,21 +534,24 @@ U_SENDR: ; ; Test and report carrier status, Z set if carrier present ; -U_CAROK: +UB_CAROK: XOR A ; not used, always indicate present RET ; ;----------------------------------------------------------------------- ; -; Get a character (assume character ready has already been tested) +; Get a character ; -; GETCHR must NOT block. +; GETCHR must not block ; -U_GETCHR: - CALL U_RCVRDY +UB_GETCHR: + CALL UB_RCVRDY RET NZ - -U_MDIN: + ; Fall thru if char ready +; +; MDIN can assume a character is ready +; +UB_MDIN: PUSH BC PUSH DE PUSH HL @@ -551,7 +569,7 @@ U_MDIN: ; Error code returned in A register ; *** Error code does not seem to be used *** ; -U_RCVRDY: +UB_RCVRDY: PUSH BC PUSH DE PUSH HL @@ -570,7 +588,7 @@ U_RCVRDY: ; ; Test for ready to send a character, Z = ready ; -U_SNDRDY: +UB_SNDRDY: PUSH BC PUSH DE PUSH HL @@ -588,7 +606,252 @@ U_SNDRDY: ; ; Report baud rate (index into SPTBL returned in register A) ; -U_SPEED: +UB_SPEED: + LD A,8 ; arbitrarily return 9600 baud + RET +; +;======================================================================= +;======================================================================= +; +; 8250-like UART +; +;======================================================================= +;======================================================================= +; +; UART constants +; +UA_SNDB EQU 20H ; bit to test for send ready +UA_SNDR EQU 20H ; value when ready to send +UA_RCVB EQU 01H ; bit to test for receive ready +UA_RCVR EQU 01H ; value when ready to receive +UA_PARE EQU 04H ; bit for parity error +UA_OVRE EQU 02H ; bit for overrun error +UA_FRME EQU 08H ; bit for framing error +UA_ERRS EQU UA_FRME | UA_OVRE | UA_PARE +; +; Following jump table is dynamically patched into real jump +; table at program startup. See MINIT above. Note that only a +; subset of the jump table is overlaid (SENDR to SPEED). +; +UA_JPTBL: + JP UA_SENDR ; send character (via pop psw) + JP UA_CAROK ; test for carrier + JP UA_MDIN ; receive data byte + JP UA_GETCHR ; get character from modem + JP UA_RCVRDY ; check receive ready + JP UA_SNDRDY ; check send ready + JP UA_SPEED ; get speed value for file transfer time +; +;----------------------------------------------------------------------- +; +; UART initialization +; +UA_INIT: + LD DE,13000 ; Receive loop timeout scalar + LD (RCVSCL),DE ; ... for UART RCVRDY timing +; + LD A,L ; Get base I/O port address + LD (UA_SCP),A ; Set port value in SENDR + LD (UA_GCP),A ; Set port value in GETCHR + ADD A,5 ; UART control port is 5 higher + LD (UA_RRP),A ; Set port value in RCVRDY + LD (UA_SRP),A ; Set port value in SNDRDY +; + LD HL,UA_JPTBL + LD DE,UA_LBL + JP MINIT_RET +; +;----------------------------------------------------------------------- +; +; Send character on top of stack +; +UA_SENDR: + POP AF ; get character to send from stack + OUT (0FFH),A ; send to port +UA_SCP EQU $-1 ; port value + RET +; +;----------------------------------------------------------------------- +; +; Test and report carrier status, Z set if carrier present +; +UA_CAROK: + XOR A ; not used, always indicate present + RET +; +;----------------------------------------------------------------------- +; +; Get a character +; +; GETCHR must not block +; +UA_GETCHR: + CALL UA_RCVRDY + RET NZ + ; Fall thru if char ready +; +; MDIN can assume a character is ready +; +UA_MDIN: + IN A,(0FFH) ; read character from port +UA_GCP EQU $-1 ; port value + RET +; +;----------------------------------------------------------------------- +; +; Test for character ready to receive, Z = ready +; Error code returned in A register +; *** Error code does not seem to be used *** +; +UA_RCVRDY: + IN A,(0FFH) ; get modem status +UA_RRP EQU $-1 ; port value + AND UA_RCVB ; isolate ready bit + CP UA_RCVR ; test it (set flags) + LD A,0 ; report no line errors +; + RET +; +;----------------------------------------------------------------------- +; +; Test for ready to send a character, Z = ready +; +UA_SNDRDY: + IN A,(0FFH) ; get status +UA_SRP EQU $-1 ; port value + AND UA_SNDB ; isolate transmit ready bit + CP UA_SNDR ; test for ready value + RET +; +;----------------------------------------------------------------------- +; +; Report baud rate (index into SPTBL returned in register A) +; +UA_SPEED: + LD A,8 ; arbitrarily return 9600 baud + RET +; +; +; +UA_BASE DB 00H ; UART base port I/O address +UA_CTLP DB 00H ; UART control port I/O address +; +; +;======================================================================= +;======================================================================= +; +; WILL SOWERBUTTS ECB USB-FIFO +; +;======================================================================= +;======================================================================= +; +UF_BASE EQU 0CH +UF_DATA EQU (UF_BASE+0) +UF_STATUS EQU (UF_BASE+1) +UF_SEND_IMM EQU (UF_BASE+2) +; +; Following jump table is dynamically patched over initial jump +; table at program startup. See MINIT above. Note that only a +; subset of the jump table is overlaid (SENDR to SPEED). +; +UF_JPTBL: + JP UF_SENDR ; send character (via pop psw) + JP UF_CAROK ; test for carrier + JP UF_MDIN ; receive data byte + JP UF_GETCHR ; get character from modem + JP UF_RCVRDY ; check receive ready + JP UF_SNDRDY ; check send ready + JP UF_SPEED ; get speed value for file transfer time +; +;----------------------------------------------------------------------- +; +; USB-FIFO initialization +; +UF_INIT: + LD HL,12000 ; Receive loop timeout scalar + LD (RCVSCL),HL ; ... for UART RCVRDY timing +; + LD A,L ; Get base I/O port address (data port) + LD (UF_SCDP),A ; Set data port in SENDR + LD (UF_GCDP),A ; Set data port in GETCHR/MDIN + INC A ; Bump to status port + LD (UF_RRSP),A ; Set status port in RCVRDY + LD (UF_SRSP),A ; Set status port in SNDRDY + INC A ; Bump to send immediate port + LD (UF_SCIP),A ; Set send immed port in SENDR +; + LD HL,UF_JPTBL + LD DE,UF_LBL + JP MINIT_RET +; +;----------------------------------------------------------------------- +; +; Send character on top of stack +; +UF_SENDR: + + POP AF ; get character to send from stack + OUT (0FFH),A ; write to fifo +UF_SCDP EQU $-1 ; data port + OUT (0FFH),A ; send immediate +UF_SCIP EQU $-1 ; send immediate port + RET +; +;----------------------------------------------------------------------- +; +; Test and report carrier status, Z set if carrier present +; +UF_CAROK: + XOR A ; not used, always indicate present + RET +; +;----------------------------------------------------------------------- +; +; Get a character (assume character ready has already been tested) +; +; GETCHR must not block +; +UF_GETCHR: + CALL UF_RCVRDY + RET NZ + ; Fall thru if char ready +; +; MDIN can assume a character is ready +; +UF_MDIN: + IN A,(0FFH) ; get char +UF_GCDP EQU $-1 ; data port + RET +; +;----------------------------------------------------------------------- +; +; Test for character ready to receive, Z = ready +; Error code returned in A register +; *** Error code does not seem to be used *** +; +UF_RCVRDY: + IN A,(0FFH) ; b7=0 if char avail, =1 if no char. +UF_RRSP EQU $-1 ; status port + RLCA ; b0=0 if char avail, =1 if no char. + AND 00000001B ; a=0, zf=1 if no char, a=1, zf=0 if char avail. + LD A,0 + RET +; +;----------------------------------------------------------------------- +; +; Test for ready to send a character, Z = ready +; +UF_SNDRDY: + IN A,(0FFH) ; bit 0=0 if space avail, =1 IF FULL +UF_SRSP EQU $-1 ; status port + AND 00000001B ; A=0, ZF=1 if space avail, A=1, ZF=0 if full. + RET +; +;----------------------------------------------------------------------- +; +; Report baud rate (index into SPTBL returned in register A) +; +UF_SPEED: LD A,8 ; arbitrarily return 9600 baud RET ; diff --git a/Source/Doc/Architecture.md b/Source/Doc/Architecture.md index 8f3ed193..a4c793da 100644 --- a/Source/Doc/Architecture.md +++ b/Source/Doc/Architecture.md @@ -558,6 +558,8 @@ unit. Register pair DE contains the line characteristics upon return. | C: Serial Device Attributes | D: Serial Device Type | E: Serial Device Number +| H: Serial Device Unit Mode +| L: Serial Device Unit I/O Base Address Reports information about the character device unit specified. Register C indicates the device attributes: 0=RS-232 and 1=Terminal. Register D @@ -954,7 +956,7 @@ Documentation required... Documentation required... -### Function 0x28 -- RTC DEVICE (DIODEVICE) +### Function 0x28 -- RTC DEVICE (RTCDEVICE) | _Entry Parameters_ | B: 0x28 diff --git a/Source/HBIOS/API.txt b/Source/HBIOS/API.txt index b0396e9a..013ec895 100644 --- a/Source/HBIOS/API.txt +++ b/Source/HBIOS/API.txt @@ -267,6 +267,8 @@ DEVICE ($06): D=Device Type E=Device Number C=Device Attributes + H=Device Mode + L=Base I/O Adr Serial Device Attributes Byte: 7: 0=RS-232, 1=Terminal @@ -331,6 +333,8 @@ DEVICE ($17) D=Device Type (MD, FD, IDE, etc.) E=Device Number (0..n) C=Device Attributes + H=Device Mode + L=Base I/O Adr Report the Device Type (Floppy, IDE, SD, etc.) and Device Number. Call does not perform any I/O and succeeds even if the device is in an error state. diff --git a/Source/HBIOS/acia.asm b/Source/HBIOS/acia.asm index 4c3c1255..1ca7f218 100644 --- a/Source/HBIOS/acia.asm +++ b/Source/HBIOS/acia.asm @@ -571,6 +571,8 @@ ACIA_DEVICE: LD D,CIODEV_ACIA ; D := DEVICE TYPE LD E,(IY) ; E := PHYSICAL UNIT LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232 + LD H,0 ; H := 0, DRIVER HAS NO MODES + LD L,(IY+3) ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS RET ; diff --git a/Source/HBIOS/asci.asm b/Source/HBIOS/asci.asm index 26a71d87..0a064734 100644 --- a/Source/HBIOS/asci.asm +++ b/Source/HBIOS/asci.asm @@ -575,6 +575,8 @@ ASCI_DEVICE: LD D,CIODEV_ASCI ; D := DEVICE TYPE LD E,(IY) ; E := PHYSICAL UNIT LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232 + LD H,0 ; H := 0, DRIVER HAS NO MODES + LD L,(IY+3) ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS RET ; diff --git a/Source/HBIOS/duart.asm b/Source/HBIOS/duart.asm index af716ece..dda23fa2 100644 --- a/Source/HBIOS/duart.asm +++ b/Source/HBIOS/duart.asm @@ -611,10 +611,12 @@ DUART_QUERY: ; ; DUART_DEVICE: - LD D,CIODEV_DUART ; D := DEVICE TYPE - LD E,(IY) ; E := PHYSICAL UNIT - LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232 - XOR A ; SIGNAL SUCCESS + LD D,CIODEV_DUART ; D := DEVICE TYPE + LD E,(IY) ; E := PHYSICAL UNIT + LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232 + LD H,0 ; H := 0, DRIVER HAS NO MODES + LD L,(IY+3) ; L := BASE I/O ADDRESS + XOR A ; SIGNAL SUCCESS RET ; ; DUART DETECTION ROUTINE diff --git a/Source/HBIOS/pio.asm b/Source/HBIOS/pio.asm index 349858a2..c0d230f7 100644 --- a/Source/HBIOS/pio.asm +++ b/Source/HBIOS/pio.asm @@ -720,6 +720,8 @@ PPI_DEVICE: LD D,CIODEV_PIO ; D := DEVICE TYPE LD E,(IY) ; E := PHYSICAL UNIT LD C,$40 ; C := ATTRIBUTE + LD H,0 ; H := 0, DRIVER HAS NO MODES + LD L,(IY+3) ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS RET ; diff --git a/Source/HBIOS/ppp.asm b/Source/HBIOS/ppp.asm index e564db7d..bad672cf 100644 --- a/Source/HBIOS/ppp.asm +++ b/Source/HBIOS/ppp.asm @@ -357,6 +357,8 @@ PPPCON_DEVICE: LD D,CIODEV_PPPCON ; D := DEVICE TYPE LD E,0 ; E := DEVICE NUM, ALWAYS 0 LD C,$BF ; C := DEVICE TYPE, 0xBF IS PROP TERM + LD H,0 ; H := 0, DRIVER HAS NO MODES + LD L,PPIBASE ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS RET ; diff --git a/Source/HBIOS/prp.asm b/Source/HBIOS/prp.asm index 3ed73f09..9a62a741 100644 --- a/Source/HBIOS/prp.asm +++ b/Source/HBIOS/prp.asm @@ -230,6 +230,8 @@ PRPCON_DEVICE: LD D,CIODEV_PRPCON ; D := DEVICE TYPE LD E,0 ; E := DEVICE NUM, ALWAYS 0 LD C,$BF ; C := DEVICE TYPE, 0xBF IS PROP TERM + LD H,0 ; H := 0, DRIVER HAS NO MODES + LD L,PRP_IOBASE ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS RET ; diff --git a/Source/HBIOS/sio.asm b/Source/HBIOS/sio.asm index 9d7fc13a..9debbc45 100644 --- a/Source/HBIOS/sio.asm +++ b/Source/HBIOS/sio.asm @@ -949,6 +949,8 @@ SIO_DEVICE: LD D,CIODEV_SIO ; D := DEVICE TYPE LD E,(IY) ; E := PHYSICAL UNIT LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232 + LD H,(IY+14) ; H := MODE + LD L,(IY+3) ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS RET ; @@ -1147,6 +1149,7 @@ SIO0A_CFG: .DW SIO0ACLK & $FFFF ; CLOCK FREQ AS .DW SIO0ACLK >> 16 ; ... DWORD VALUE .DB SIO0ACTCC ; CTC CHANNEL + .DB SIO0MODE ; MODE ; SIO_CFGSIZ .EQU $ - SIO_CFG ; SIZE OF ONE CFG TABLE ENTRY ; @@ -1162,6 +1165,7 @@ SIO0B_CFG: .DW SIO0BCLK & $FFFF ; CLOCK FREQ AS .DW SIO0BCLK >> 16 ; ... DWORD VALUE .DB SIO0BCTCC ; CTC CHANNEL + .DB SIO0MODE ; MODE ; #IF (SIOCNT >= 2) ; @@ -1177,6 +1181,7 @@ SIO1A_CFG: .DW SIO1ACLK & $FFFF ; CLOCK FREQ AS .DW SIO1ACLK >> 16 ; ... DWORD VALUE .DB SIO1ACTCC ; CTC CHANNEL + .DB SIO1MODE ; MODE ; ; SIO1 CHANNEL B SIO1B_CFG: @@ -1190,6 +1195,7 @@ SIO1B_CFG: .DW SIO1BCLK & $FFFF ; CLOCK FREQ AS .DW SIO1BCLK >> 16 ; ... DWORD VALUE .DB SIO1BCTCC ; CTC CHANNEL + .DB SIO1MODE ; MODE ; #ENDIF ; diff --git a/Source/HBIOS/uart.asm b/Source/HBIOS/uart.asm index af00cebe..52ecd2cf 100644 --- a/Source/HBIOS/uart.asm +++ b/Source/HBIOS/uart.asm @@ -339,6 +339,8 @@ UART_DEVICE: LD D,CIODEV_UART ; D := DEVICE TYPE LD E,(IY) ; E := PHYSICAL UNIT LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232 + LD H,0 ; H := 0, DRIVER HAS NO MODES + LD L,(IY+2) ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS RET ; diff --git a/Source/HBIOS/uf.asm b/Source/HBIOS/uf.asm index efc3d9b3..b67c15ab 100644 --- a/Source/HBIOS/uf.asm +++ b/Source/HBIOS/uf.asm @@ -154,6 +154,8 @@ UF_DEVICE: XOR A ; SIGNAL SUCCESS LD E,A ; E := PHYSICAL UNIT, ALWAYS 0 LD C,A ; C := DEVICE TYPE, 0x00 IS RS-232 + LD H,0 ; H := 0, DRIVER HAS NO MODES + LD L,UFBASE ; L := BASE I/O ADDRESS RET ; ; USB-FIFO DETECTION ROUTINE diff --git a/Source/ver.inc b/Source/ver.inc index ff8f4c70..53106fe9 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.16" +#DEFINE BIOSVER "3.1.1-pre.17" diff --git a/Source/ver.lib b/Source/ver.lib index 14fd4afe..b2bb943d 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.16" + db "3.1.1-pre.17" endm