From a60eb57a47cdbf0fb265b6b34f684999f4915508 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Wed, 8 Nov 2017 19:11:15 -0800 Subject: [PATCH] Add RC2014 Support to XMODEM App --- Source/Apps/XM/xmhb.180 | 192 ++++++++++++++---------------------- Source/HBIOS/cfg_mk4.asm | 1 + Source/HBIOS/cfg_n8.asm | 1 + Source/HBIOS/cfg_rc.asm | 2 +- Source/HBIOS/cfg_sbc.asm | 1 + Source/HBIOS/cfg_zeta.asm | 1 + Source/HBIOS/hbios.asm | 13 --- Source/RomDsk/RC/XMODEM.COM | Bin 4224 -> 0 bytes 8 files changed, 78 insertions(+), 133 deletions(-) delete mode 100644 Source/RomDsk/RC/XMODEM.COM diff --git a/Source/Apps/XM/xmhb.180 b/Source/Apps/XM/xmhb.180 index c8cd9f02..322ffa3f 100644 --- a/Source/Apps/XM/xmhb.180 +++ b/Source/Apps/XM/xmhb.180 @@ -3,7 +3,7 @@ ; XMHB.Z80 - XMODEMXX PATCH FILE FOR ROMWBW HBIOS ; ; Wayne Warthen - wwarthen@gmail.com -; Updated: 2017-08-09 +; Updated: 2017-11-08 ; ;======================================================================= ; @@ -84,7 +84,7 @@ MINIT: HINIT: ; ; Display RomWBW notification string - LD DE,HBIOS ; BIOS notification string + LD DE,HBTAG ; BIOS notification string LD C,9 ; BDOS string display function CALL BDOS ; Do it ; @@ -106,7 +106,7 @@ HINIT: UINIT: ; ; Display UNA notification string - LD DE,UBIOS ; BIOS notification string + LD DE,UBTAG ; BIOS notification string LD C,9 ; BDOS string display function CALL BDOS ; Do it ; @@ -146,25 +146,11 @@ MINIT2: JR MINIT3 ; Complete the initialization ; RCINIT: - ; Check for SIO/2 serial port - LD C,080H ; SIO command port - XOR A ; RD0 - OUT (C),A ; Access RD0 - IN A,(C) ; Get RD0 value - LD B,A ; Save it - LD A,1 ; RD1 - OUT (C),A ; Access RD1 - IN A,(C) ; Get RD1 value - CP B ; Compare - JR Z,RCINIT1 ; If equal, no SIO port there - LD HL,SIO_JPTBL ; SIO jump table address - LD DE,SIO ; SIO port notification string - JR MINIT3 ; Complete the initialization -; -RCINIT1: - ; Assume RC2014 ACIA port - LD HL,ACIA_JPTBL ; ACIA jump table address - LD DE,ACIA ; ACIA port notification string + ; RC2014, use HBIOS calls + LD HL,HBIOS_JPTBL ; HBIOS jump table address + LD DE,HBCON ; HBIOS console notification string + LD A,1 ; Force lower CPU speed + LD (CPUSPD),A ; ... to compensate for BIOS overhead JR MINIT3 ; Complete the initialization ; MINIT3: @@ -232,15 +218,15 @@ BIOID DB 0 ; BIOS ID, 1=HBIOS, 2=UBIOS PLTID DB 0 ; Platform ID CPUSPD DB 0 ; CPU speed in MHz ; -RBC DB "RBC, 06-Nov-2017$" +RBC DB "RBC, 08-Nov-2017$" ; UART DB ", UART0$" ASCI DB ", ASCI0$" -SIO DB ", SIO0$" -ACIA DB ", ACIA0$" +HBCON DB ", HBIOS CONSOLE$" +UBCON DB ", UBIOS CONSOLE$" ; -UBIOS DB " [UNA]$" -HBIOS DB " [WBW]$" +UBTAG DB " [UNA]$" +HBTAG DB " [WBW]$" ; CRLF DB 13, 10, "$" ; @@ -496,46 +482,47 @@ A_SPEED: LD A,8 ; arbitrarily return 9600 baud RET ; -;======================================================================= -;======================================================================= -; -; RC2014 SIO/2 +; HBIOS CONSOLE ; ;======================================================================= ;======================================================================= ; -; SIO port constants -; -S_CMD EQU 80H ; SIO Command port -S_DAT EQU 81H ; SIO Data port -; ; 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). ; -SIO_JPTBL: - JP S_SENDR ;send character (via pop psw) - JP S_CAROK ;test for carrier - JP S_MDIN ;receive data byte - JP S_GETCHR ;get character from modem - JP S_RCVRDY ;check receive ready - JP S_SNDRDY ;check send ready - JP S_SPEED ;get speed value for file transfer time +HBIOS_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 ; ;----------------------------------------------------------------------- ; ; Send character on top of stack ; -S_SENDR: +HB_SENDR: POP AF ; get character to send from stack - OUT (S_DAT),A ; send to port + PUSH BC + PUSH DE + PUSH HL + LD B,01H ; HBIOS OUT function + LD C,0 ; console is unit 0 by fiat + LD E,A ; character to E + RST 08 ; HBIOS call + POP HL + POP DE + POP BC RET ; ;----------------------------------------------------------------------- ; ; Test and rep;ort carrier status, Z set if carrier present ; -S_CAROK: +HB_CAROK: XOR A ; not used, always indicate present RET ; @@ -543,9 +530,18 @@ S_CAROK: ; ; Get a character (assume character ready has already been tested) ; -S_MDIN: -S_GETCHR: - IN A,(S_DAT) ; read character from port +HB_MDIN: +HB_GETCHR: + PUSH BC + PUSH DE + PUSH HL + LD B,00H ; HBIOS IN function + LD C,0 ; console is unit 0 by fiat + RST 08 ; HBIOS call + LD A,E ; byte received to A + POP HL + POP DE + POP BC RET ; ;----------------------------------------------------------------------- @@ -554,89 +550,47 @@ S_GETCHR: ; Error code returned in A register ; *** Error code does not seem to be used *** ; -S_RCVRDY: - XOR A ; A := 0 - OUT (S_CMD),A ; Access RD0 - IN A,(S_CMD) ; Get RD0 - AND 00000001B ; Isolate rx ready bit - CP 00000001B ; ZF = rx ready -; - IF ERRDET -; - ; With error detection (slower) - PUSH BC ; save BC - PUSH AF ; save AF - LD A,1 ; A := 1 - OUT (S_CMD),A ; Access RD1 - IN A,(S_CMD) ; Get RD1 - AND 01110000B ; isolate line err bits - POP AF ; restore AF - LD A,B ; err bits (B) to A - POP BC ; restore BC -; - ELSE -; - ; No error detection (faster) +HB_RCVRDY: + PUSH BC + PUSH DE + PUSH HL + LD B,02H ; HBIOS IST function + LD C,0 ; console is unit 0 by fiat + RST 08 ; HBIOS call, A := bytes pending + SUB 1 ; CF set IFF zero + RL A ; CF to bit 0 of A + AND 01H ; set Z flag as needed LD A,0 ; report no line errors -; - ENDIF -; + POP HL + POP DE + POP BC RET ; ;----------------------------------------------------------------------- ; ; Test for ready to send a character, Z = ready ; -S_SNDRDY: - XOR A ; A := 0 - OUT (S_CMD),A ; Access RD0 - IN A,(S_CMD) ; Get RD0 - AND 00000100B ; Isolate tx empty bit - CP 00000100B ; ZF = tx empty +HB_SNDRDY: + PUSH BC + PUSH DE + PUSH HL + LD B,03H ; HBIOS OST function + LD C,0 ; console is unit 0 by fiat + RST 08 ; HBIOS call, A := bytes pending + SUB 1 ; CF set IFF zero + RL A ; CF to bit 0 of A + AND 01H ; set Z flag as needed + POP HL + POP DE + POP BC RET ; ;----------------------------------------------------------------------- ; ; Report baud rate (index into SPTBL returned in regsiter A) ; -S_SPEED: +HB_SPEED: LD A,8 ; arbitrarily return 9600 baud RET -; -;======================================================================= -;======================================================================= -; -; RC2014 ACIA -; -;======================================================================= -;======================================================================= -; -; ACIA port constants -; -C_CMD EQU 80H ; SIO Command port -C_DAT EQU 81H ; SIO Data port -; -; 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). -; -ACIA_JPTBL: - JP C_SENDR ;send character (via pop psw) - JP C_CAROK ;test for carrier - JP C_MDIN ;receive data byte - JP C_GETCHR ;get character from modem - JP C_RCVRDY ;check receive ready - JP C_SNDRDY ;check send ready - JP C_SPEED ;get speed value for file transfer time -; -C_SENDR: -C_CAROK: -C_MDIN: -C_GETCHR: -C_RCVRDY: -C_SNDRDY: -C_SPEED: - ; Not yet implemeted... - JP 0 ; END diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 818c6834..37643ba3 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -22,6 +22,7 @@ DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC ASCIENABLE .EQU TRUE ; TRUE FOR Z180 ASCI SUPPORT UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) UARTOSC .EQU 1843200 ; UART OSC FREQUENCY +SIOENABLE .EQU TRUE ; TRUE FOR ZILOG SIO/2 SUPPORT ; VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 2c956182..be33bff4 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -22,6 +22,7 @@ DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC ASCIENABLE .EQU TRUE ; TRUE FOR Z180 ASCI SUPPORT UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) UARTOSC .EQU 1843200 ; UART OSC FREQUENCY +SIOENABLE .EQU TRUE ; TRUE FOR ZILOG SIO/2 SUPPORT ; VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT diff --git a/Source/HBIOS/cfg_rc.asm b/Source/HBIOS/cfg_rc.asm index ac65a734..b88e059b 100644 --- a/Source/HBIOS/cfg_rc.asm +++ b/Source/HBIOS/cfg_rc.asm @@ -22,7 +22,7 @@ DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC ASCIENABLE .EQU FALSE ; TRUE FOR Z180 ASCI SUPPORT UARTENABLE .EQU FALSE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) UARTOSC .EQU 1843200 ; UART OSC FREQUENCY -SIOENABLE .EQU TRUE ; TRUE FOR SIO SUPPORT +SIOENABLE .EQU TRUE ; TRUE FOR ZILOG SIO/2 SUPPORT ; VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index 3dc3e1c9..541495fc 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -22,6 +22,7 @@ DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC ASCIENABLE .EQU FALSE ; TRUE FOR Z180 ASCI SUPPORT UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) UARTOSC .EQU 1843200 ; UART OSC FREQUENCY +SIOENABLE .EQU FALSE ; TRUE FOR ZILOG SIO/2 SUPPORT ; VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index c83ade49..b495a9f2 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -22,6 +22,7 @@ DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC ASCIENABLE .EQU FALSE ; TRUE FOR Z180 ASCI SUPPORT UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) UARTOSC .EQU 1843200 ; UART OSC FREQUENCY +SIOENABLE .EQU TRUE ; TRUE FOR ZILOG SIO/2 SUPPORT ; VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index ccca08c4..e7a63ffa 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -208,16 +208,13 @@ HBX_INVOKE: LD A,(HB_CURBNK) ; GET CURRENT BANK LD (HB_INVBNK),A ; SAVE INVOCATION BANK -; HB_DI LD SP,HBX_TMPSTK ; USE SMALL TEMP STACK FRAME IN HI MEM FOR BANK SWITCH LD A,BID_BIOS ; HBIOS BANK CALL HBX_BNKSEL ; SELECT IT LD SP,HB_STACK ; NOW USE FULL HBIOS STACK IN HBIOS BANK -; HB_EI CALL HB_DISPATCH ; CALL HBIOS FUNCTION DISPATCHER -; HB_DI LD SP,HBX_TMPSTK ; USE SMALL TEMP STACK FRAME IN HI MEM FOR BANK SWITCH PUSH AF ; SAVE AF (FUNCTION RETURN) LD A,(HB_INVBNK) ; LOAD ORIGINAL BANK @@ -225,7 +222,6 @@ HBX_INVOKE: POP AF ; RESTORE AF LD SP,0 ; RESTORE ORIGINAL STACK FRAME HBX_INVSP .EQU $ - 2 -; HB_EI RET ; RETURN TO CALLER ; @@ -481,15 +477,6 @@ INT_BAD: ; BAD INTERRUPT HANDLER ; #IF (SIOENABLE) INT_SIO: ; SIO DEVICE INTERRUPT HANDLER - ;PUSH AF - ;IN A,(SIOA_DAT) - ;LD A,'=' - ;OUT (SIOA_DAT),A - ;POP AF - ;EI - ;RETI - - PUSH HL ; SAVE HL LD HL,SIO_INT ; HL := SIO INT HANDLER IN BIOS BANK JR HBX_INT ; TO TO ROUTING CODE diff --git a/Source/RomDsk/RC/XMODEM.COM b/Source/RomDsk/RC/XMODEM.COM deleted file mode 100644 index a50fd5753d5c377ed2418bdb3985e8beba5c1d75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4224 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 ZZJPB=`I`Bg`iK~gBY@)mX8Zpc{{ut?;Ftga