From 8c49962102472dd6c9cf1af4e033244e61c08945 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 4 Aug 2019 02:32:51 +0800 Subject: [PATCH] Add capability to change which console is default --- Source/HBIOS/hbios.asm | 126 +++++++++++++++++++++++++++------------ Source/HBIOS/usbfifo.asm | 22 ++++--- 2 files changed, 101 insertions(+), 47 deletions(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index e54da998..d0011714 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1044,9 +1044,6 @@ HB_CPU1: CALL FILL ; DO IT ; DIAG(%00111111) -; -; PRE-CONSOLE INITIALIZATION -; #IF 0 ; ; TEST DEBUG *************************************************************************************** @@ -1058,21 +1055,28 @@ HB_CPU1: ; #ENDIF ; -#IF (ASCIENABLE) - CALL ASCI_PREINIT -#ENDIF -#IF (UARTENABLE) - CALL UART_PREINIT -#ENDIF -#IF (SIOENABLE) - CALL SIO_PREINIT -#ENDIF -#IF (ACIAENABLE) - CALL ACIA_PREINIT -#ENDIF -#IF (PIO_4P | PIO_ZP) - CALL PIO_PREINIT -#ENDIF +; PRE-CONSOLE INITIALIZATION +; + LD A,FORCECON ; CALCULATE PRE-INIT TABLE + RLCA ; ENTRY THAT WE WANT TO + LD DE,(PC_INITTBL) ; EXECUTE FIRST + LD HL,PC_INITTBL + PUSH HL + PUSH DE + PUSH HL + CALL ADDHLA + POP DE ; PLACE IT AT THE TOP OF THE + PUSH HL ; TABLE BY SWAPPING IT + LDI ; WITH THE FIRST (DUMMY) + LDI ; ENTRY + POP HL + POP DE + LD (HL),D + INC HL + LD (HL),E + LD B,PC_INITTBLLEN + POP DE + CALL CALLLIST ; PROCESS THE PRE-INIT CALL TABLE ; #IF 0 ; @@ -1428,19 +1432,7 @@ HB_PCPU: CALL NEWLINE LD B,HB_INITTBLLEN LD DE,HB_INITTBL -INITSYS1: - LD A,(DE) - LD L,A - INC DE - LD A,(DE) - LD H,A - INC DE - PUSH DE - PUSH BC - CALL JPHL - POP BC - POP DE - DJNZ INITSYS1 + CALL CALLLIST ; ; RECORD HEAP CURB AT THE CURRENT VALUE OF HEAP TOP. HEAP CURB ; MARKS THE POINT IN THE HEAP AFTER WHICH MEMORY IS RELEASED @@ -1523,6 +1515,50 @@ INITSYS3: ; RET ; +; CALL A LIST OF ROUTINES POINTED TO BY DE OF LENGTH B. +; +CALLLIST: + LD A,(DE) + LD L,A + INC DE + LD A,(DE) + LD H,A + INC DE + PUSH DE + PUSH BC + CALL JPHL + POP BC + POP DE + DJNZ CALLLIST +CALLDUMMY: + RET +; +;================================================================================================== +; TABLE OF PRE-CONSOLE INITIALIZATION ENTRY POINTS +;================================================================================================== + +PC_INITTBL: + .DW CALLDUMMY ; RESERVED FOR FORCING PRIMARY CONSOLE +#IF (ASCIENABLE) + .DW ASCI_PREINIT +#ENDIF +#IF (UARTENABLE) + .DW UART_PREINIT +#ENDIF +#IF (SIOENABLE) + .DW SIO_PREINIT +#ENDIF +#IF (ACIAENABLE) + .DW ACIA_PREINIT +#ENDIF +#IF (PIO_4P | PIO_ZP) + .DW PIO_PREINIT +#ENDIF +#IF (UFENABLE) + .DW UF_PREINIT +#ENDIF +PC_INITTBLLEN .EQU (($ - PC_INITTBL) / 2) + ;================================================================================================== ; TABLE OF INITIALIZATION ENTRY POINTS ;================================================================================================== @@ -1600,6 +1636,9 @@ HB_INITTBL: #IF (PIO_4P | PIO_ZP) .DW PIO_INIT #ENDIF +#IF (UFENABLE) + .DW UF_INIT +#ENDIF ; HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2) ; @@ -2693,7 +2732,7 @@ SIZ_MD .EQU $ - ORG_MD .ECHO SIZ_MD .ECHO " bytes.\n" #ENDIF - +; #IF (FDENABLE) ORG_FD .EQU $ #INCLUDE "fd.asm" @@ -2702,7 +2741,7 @@ SIZ_FD .EQU $ - ORG_FD .ECHO SIZ_FD .ECHO " bytes.\n" #ENDIF - +; #IF (RFENABLE) ORG_RF .EQU $ #INCLUDE "rf.asm" @@ -2711,7 +2750,7 @@ SIZ_RF .EQU $ - ORG_RF .ECHO SIZ_RF .ECHO " bytes.\n" #ENDIF - +; #IF (IDEENABLE) ORG_IDE .EQU $ #INCLUDE "ide.asm" @@ -2720,7 +2759,7 @@ SIZ_IDE .EQU $ - ORG_IDE .ECHO SIZ_IDE .ECHO " bytes.\n" #ENDIF - +; #IF (PPIDEENABLE) ORG_PPIDE .EQU $ #INCLUDE "ppide.asm" @@ -2729,7 +2768,7 @@ SIZ_PPIDE .EQU $ - ORG_PPIDE .ECHO SIZ_PPIDE .ECHO " bytes.\n" #ENDIF - +; #IF (SDENABLE) ORG_SD .EQU $ #INCLUDE "sd.asm" @@ -2738,7 +2777,7 @@ SIZ_SD .EQU $ - ORG_SD .ECHO SIZ_SD .ECHO " bytes.\n" #ENDIF - +; #IF (HDSKENABLE) ORG_HDSK .EQU $ #INCLUDE "hdsk.asm" @@ -2747,7 +2786,7 @@ SIZ_HDSK .EQU $ - ORG_HDSK .ECHO SIZ_HDSK .ECHO " bytes.\n" #ENDIF - +; #IF (TERMENABLE) ORG_TERM .EQU $ #INCLUDE "term.asm" @@ -2774,6 +2813,7 @@ SIZ_AY .EQU $ - ORG_AY .ECHO SIZ_AY .ECHO " bytes.\n" #ENDIF +; #IF (PIO_4P | PIO_ZP | PPI_SBC) ORG_PIO .EQU $ #INCLUDE "pio.asm" @@ -2782,7 +2822,15 @@ SIZ_PIO .EQU $ - ORG_PIO .ECHO SIZ_PIO .ECHO " bytes.\n" #ENDIF - +; +#IF (UFENABLE) +ORG_UF .EQU $ + #INCLUDE "usbfifo.asm" +SIZ_UF .EQU $ - ORG_UF + .ECHO "USB-FIFO occupies " + .ECHO SIZ_UF + .ECHO " bytes.\n" +#ENDIF ; #DEFINE USEDELAY #INCLUDE "util.asm" diff --git a/Source/HBIOS/usbfifo.asm b/Source/HBIOS/usbfifo.asm index 7e6ccb55..25bc018f 100644 --- a/Source/HBIOS/usbfifo.asm +++ b/Source/HBIOS/usbfifo.asm @@ -19,7 +19,7 @@ FIFO_SEND_IMM .EQU (FIFO_BASE+2) ; ; DEVICE DESCRIPTION TABLE ; -UF_CFG: .DW DEFSIOACFG ; DUMMY CONFIGURATION +UF_CFG: .DW SER_9600_8N1 ; DUMMY CONFIGURATION ; ; SETUP THE DISPATCH TABLE ENTRY AND INITIALIZE HARDWARE ; @@ -33,6 +33,7 @@ UF_PREINIT: LD BC,UF_FNTBL ; BC := FUNCTION TABLE ADDRESS CALL CIO_ADDENT ; ADD ENTRY IF FOUND, BC:DE XOR A ; SIGNAL SUCCESS +UF_FAIL: RET ; AND RETURN ; ; INITIALIZATION ROUTINE @@ -72,7 +73,8 @@ UF_OUT: CALL UF_OST ; READY FOR CHAR? JR Z,UF_OUT ; LOOP IF NOT LD C,FIFO_DATA - OUT (C),E + OUT (C),E ; WRITE TO FIFO + OUT (FIFO_SEND_IMM),A ; SEND IMMEDIATE XOR A ; SIGNAL SUCCESS RET ; @@ -95,7 +97,7 @@ UF_OST: ; ; INITIALIZATION THE SETUP PARAMETER WORD AND INITIALIZE DEVICE ; SAVE NEW SPW IF NOT A RE-INIT. ALWAYS INITIALIZE DEVICE. -; SPW IS NOT VAIDATED BUT IT IS NOT USED FOR ANYTHING. +; SPW IS NOT VALIDATED BUT IT IS NOT USED FOR ANYTHING. ; UF_INITDEV: ; @@ -121,8 +123,8 @@ UF_FLUSH: IN A,(FIFO_DATA) ; CLEAR BUFFER BY READING JR UF_FLUSH ; ALL THE DATA UFBUFEMPTY: - LD (IY + 0),E ; SAVE LOW WORD - LD (IY + 1),D ; SAVE HI WORD + LD (IY+0),E ; SAVE LOW WORD + LD (IY+1),D ; SAVE HI WORD RET ; NZ STATUS HERE INDICATES FAIL. ; ; USB-FIFO WILL APPEAR AS A SERIAL DEVICE AT DEFAULT SERIAL MODE @@ -138,14 +140,18 @@ UF_QUERY: UF_DEVICE: LD D,CIODEV_SIO ; D := DEVICE TYPE XOR A ; SIGNAL SUCCESS - LD E,A ; E := PHYSICAL UNIT + LD E,A ; E := PHYSICAL UNIT, ALWAYS 0 LD C,A ; C := DEVICE TYPE, 0x00 IS RS-232 RET ; ; USB-FIFO DETECTION ROUTINE ; UF_DETECT: - LD A,1 ; 0 = NONE +; IN A,(FIFO_STATUS) ; DON'T LOAD DRIVER IF +; AND 10000001B ; CABLE DISCONNECTED +; SUB 10000001B ; A=0 +; RET Z + LD A,1 ; A=1 RET ; ; DRIVER FUNCTION TABLE @@ -159,6 +165,6 @@ UF_FNTBL: .DW UF_QUERY .DW UF_DEVICE #IF (($ - UF_FNTBL) != (CIO_FNCNT * 2)) - .ECHO "*** INVALID SIO FUNCTION TABLE ***\n" + .ECHO "*** INVALID USB-FIFO FUNCTION TABLE ***\n" #ENDIF ;