Browse Source

Add capability to change which console is default

pull/38/head
b1ackmai1er 7 years ago
parent
commit
8c49962102
  1. 126
      Source/HBIOS/hbios.asm
  2. 22
      Source/HBIOS/usbfifo.asm

126
Source/HBIOS/hbios.asm

@ -1044,9 +1044,6 @@ HB_CPU1:
CALL FILL ; DO IT CALL FILL ; DO IT
; ;
DIAG(%00111111) DIAG(%00111111)
;
; PRE-CONSOLE INITIALIZATION
;
#IF 0 #IF 0
; ;
; TEST DEBUG *************************************************************************************** ; TEST DEBUG ***************************************************************************************
@ -1058,21 +1055,28 @@ HB_CPU1:
; ;
#ENDIF #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 #IF 0
; ;
@ -1428,19 +1432,7 @@ HB_PCPU:
CALL NEWLINE CALL NEWLINE
LD B,HB_INITTBLLEN LD B,HB_INITTBLLEN
LD DE,HB_INITTBL 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 ; RECORD HEAP CURB AT THE CURRENT VALUE OF HEAP TOP. HEAP CURB
; MARKS THE POINT IN THE HEAP AFTER WHICH MEMORY IS RELEASED ; MARKS THE POINT IN THE HEAP AFTER WHICH MEMORY IS RELEASED
@ -1523,6 +1515,50 @@ INITSYS3:
; ;
RET 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 ; TABLE OF INITIALIZATION ENTRY POINTS
;================================================================================================== ;==================================================================================================
@ -1600,6 +1636,9 @@ HB_INITTBL:
#IF (PIO_4P | PIO_ZP) #IF (PIO_4P | PIO_ZP)
.DW PIO_INIT .DW PIO_INIT
#ENDIF #ENDIF
#IF (UFENABLE)
.DW UF_INIT
#ENDIF
; ;
HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2) HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2)
; ;
@ -2693,7 +2732,7 @@ SIZ_MD .EQU $ - ORG_MD
.ECHO SIZ_MD .ECHO SIZ_MD
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
;
#IF (FDENABLE) #IF (FDENABLE)
ORG_FD .EQU $ ORG_FD .EQU $
#INCLUDE "fd.asm" #INCLUDE "fd.asm"
@ -2702,7 +2741,7 @@ SIZ_FD .EQU $ - ORG_FD
.ECHO SIZ_FD .ECHO SIZ_FD
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
;
#IF (RFENABLE) #IF (RFENABLE)
ORG_RF .EQU $ ORG_RF .EQU $
#INCLUDE "rf.asm" #INCLUDE "rf.asm"
@ -2711,7 +2750,7 @@ SIZ_RF .EQU $ - ORG_RF
.ECHO SIZ_RF .ECHO SIZ_RF
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
;
#IF (IDEENABLE) #IF (IDEENABLE)
ORG_IDE .EQU $ ORG_IDE .EQU $
#INCLUDE "ide.asm" #INCLUDE "ide.asm"
@ -2720,7 +2759,7 @@ SIZ_IDE .EQU $ - ORG_IDE
.ECHO SIZ_IDE .ECHO SIZ_IDE
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
;
#IF (PPIDEENABLE) #IF (PPIDEENABLE)
ORG_PPIDE .EQU $ ORG_PPIDE .EQU $
#INCLUDE "ppide.asm" #INCLUDE "ppide.asm"
@ -2729,7 +2768,7 @@ SIZ_PPIDE .EQU $ - ORG_PPIDE
.ECHO SIZ_PPIDE .ECHO SIZ_PPIDE
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
;
#IF (SDENABLE) #IF (SDENABLE)
ORG_SD .EQU $ ORG_SD .EQU $
#INCLUDE "sd.asm" #INCLUDE "sd.asm"
@ -2738,7 +2777,7 @@ SIZ_SD .EQU $ - ORG_SD
.ECHO SIZ_SD .ECHO SIZ_SD
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
;
#IF (HDSKENABLE) #IF (HDSKENABLE)
ORG_HDSK .EQU $ ORG_HDSK .EQU $
#INCLUDE "hdsk.asm" #INCLUDE "hdsk.asm"
@ -2747,7 +2786,7 @@ SIZ_HDSK .EQU $ - ORG_HDSK
.ECHO SIZ_HDSK .ECHO SIZ_HDSK
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
;
#IF (TERMENABLE) #IF (TERMENABLE)
ORG_TERM .EQU $ ORG_TERM .EQU $
#INCLUDE "term.asm" #INCLUDE "term.asm"
@ -2774,6 +2813,7 @@ SIZ_AY .EQU $ - ORG_AY
.ECHO SIZ_AY .ECHO SIZ_AY
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
;
#IF (PIO_4P | PIO_ZP | PPI_SBC) #IF (PIO_4P | PIO_ZP | PPI_SBC)
ORG_PIO .EQU $ ORG_PIO .EQU $
#INCLUDE "pio.asm" #INCLUDE "pio.asm"
@ -2782,7 +2822,15 @@ SIZ_PIO .EQU $ - ORG_PIO
.ECHO SIZ_PIO .ECHO SIZ_PIO
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #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 #DEFINE USEDELAY
#INCLUDE "util.asm" #INCLUDE "util.asm"

22
Source/HBIOS/usbfifo.asm

@ -19,7 +19,7 @@ FIFO_SEND_IMM .EQU (FIFO_BASE+2)
; ;
; DEVICE DESCRIPTION TABLE ; 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 ; SETUP THE DISPATCH TABLE ENTRY AND INITIALIZE HARDWARE
; ;
@ -33,6 +33,7 @@ UF_PREINIT:
LD BC,UF_FNTBL ; BC := FUNCTION TABLE ADDRESS LD BC,UF_FNTBL ; BC := FUNCTION TABLE ADDRESS
CALL CIO_ADDENT ; ADD ENTRY IF FOUND, BC:DE CALL CIO_ADDENT ; ADD ENTRY IF FOUND, BC:DE
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
UF_FAIL:
RET ; AND RETURN RET ; AND RETURN
; ;
; INITIALIZATION ROUTINE ; INITIALIZATION ROUTINE
@ -72,7 +73,8 @@ UF_OUT:
CALL UF_OST ; READY FOR CHAR? CALL UF_OST ; READY FOR CHAR?
JR Z,UF_OUT ; LOOP IF NOT JR Z,UF_OUT ; LOOP IF NOT
LD C,FIFO_DATA LD C,FIFO_DATA
OUT (C),E
OUT (C),E ; WRITE TO FIFO
OUT (FIFO_SEND_IMM),A ; SEND IMMEDIATE
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
; ;
@ -95,7 +97,7 @@ UF_OST:
; ;
; INITIALIZATION THE SETUP PARAMETER WORD AND INITIALIZE DEVICE ; INITIALIZATION THE SETUP PARAMETER WORD AND INITIALIZE DEVICE
; SAVE NEW SPW IF NOT A RE-INIT. ALWAYS 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: UF_INITDEV:
; ;
@ -121,8 +123,8 @@ UF_FLUSH:
IN A,(FIFO_DATA) ; CLEAR BUFFER BY READING IN A,(FIFO_DATA) ; CLEAR BUFFER BY READING
JR UF_FLUSH ; ALL THE DATA JR UF_FLUSH ; ALL THE DATA
UFBUFEMPTY: 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. RET ; NZ STATUS HERE INDICATES FAIL.
; ;
; USB-FIFO WILL APPEAR AS A SERIAL DEVICE AT DEFAULT SERIAL MODE ; USB-FIFO WILL APPEAR AS A SERIAL DEVICE AT DEFAULT SERIAL MODE
@ -138,14 +140,18 @@ UF_QUERY:
UF_DEVICE: UF_DEVICE:
LD D,CIODEV_SIO ; D := DEVICE TYPE LD D,CIODEV_SIO ; D := DEVICE TYPE
XOR A ; SIGNAL SUCCESS 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 LD C,A ; C := DEVICE TYPE, 0x00 IS RS-232
RET RET
; ;
; USB-FIFO DETECTION ROUTINE ; USB-FIFO DETECTION ROUTINE
; ;
UF_DETECT: 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 RET
; ;
; DRIVER FUNCTION TABLE ; DRIVER FUNCTION TABLE
@ -159,6 +165,6 @@ UF_FNTBL:
.DW UF_QUERY .DW UF_QUERY
.DW UF_DEVICE .DW UF_DEVICE
#IF (($ - UF_FNTBL) != (CIO_FNCNT * 2)) #IF (($ - UF_FNTBL) != (CIO_FNCNT * 2))
.ECHO "*** INVALID SIO FUNCTION TABLE ***\n"
.ECHO "*** INVALID USB-FIFO FUNCTION TABLE ***\n"
#ENDIF #ENDIF
; ;

Loading…
Cancel
Save