diff --git a/Source/HBIOS/esp.asm b/Source/HBIOS/esp.asm index 5a76ffb7..e8820e1d 100644 --- a/Source/HBIOS/esp.asm +++ b/Source/HBIOS/esp.asm @@ -364,7 +364,8 @@ ESPCON_INIT: PUSH IY ; COPY CONFIG ENTRY PTR POP DE ; ... TO DE CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED - LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + ;;;LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + CALL CIO_SETCRT ; SET OURSELVES AS THE CRT DEVICE ; ; ANNOUNCE OURSLEVES ; diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 07dd5ad9..37ae2ad3 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -2148,6 +2148,11 @@ HB_START2: LD (RTC_DISPACT),A ; RTC DEVICE LD (DSKY_DISPACT),A ; DSKY DEVICE ; +; INITIALIZE SOME HCB ENTRIES +; + OR $FF ; $FF TO ACCUM + LD (CB_CRTDEV),A ; RESET CRT DEVICE +; ; CLEAR INTERRUPT VECTOR TABLES ; ; THIS IS REALLY ONLY REQUIRED ON A RESTART, BUT IT DOESN'T HURT TO @@ -3324,11 +3329,27 @@ HB_WDZ: #ENDIF ; #IF (PLATFORM == PLT_FZ80) + ; IOBYTE: XXXXXVVC + ; 00- FORCE ONBOARD VGA/PS2 KBD (FV) + ; --1 FORCE PROPELLER CONSOLE (SCON) + ; 110 NORMAL USB SERIAL BOOT + ; + ; WE ASSUME THAT THE ONBOARD VGA (FV) IS ALWAYS DETECTED AND + ; WILL BE THE CURRENT CRTDEV. SCON IS ASSUMED TO BE THE + ; DEVICE AT CRTDEV + 1. THESE ARE REASONABLE ASSUMPTIONS + ; UNLESS THE DRIVER DETECTION OR DRIVER ORDER IS CHANGED. IN A,($36) ; GET IO BYTE - AND %00000001 ; ISOLATE CONSOLE BIT - JR Z,INITSYS3 ; NOT SET, BYPASS CONSOLE SWITCH + AND %00000110 ; ISOLATE BITS + JR Z,HB_CRTACT ; FORCE ONBOARD CRT + IN A,($36) ; GET IO BYTE + AND %00000001 ; ISOLATE BIT + JR Z,INITSYS3 ; NORMAL USB SERIAL BOOT + LD A,(CB_CRTDEV) ; GET CRT DEV + INC A ; SWITCH FROM FV -> SCON + LD (CB_CRTDEV),A ; SAVE IT AND DO CONSOLE SWITCH #ENDIF ; +HB_CRTACT: LD A,(CB_CRTDEV) ; GET CRT DISPLAY DEVICE LD (HB_NEWCON),A ; AND QUEUE TO SWITCH ; @@ -3805,6 +3826,15 @@ HB_INITTBL: #IF (FVENABLE) .DW FV_INIT #ENDIF +#IF (PRPENABLE) + .DW PRP_INIT +#ENDIF +#IF (PPPENABLE) + .DW PPP_INIT +#ENDIF +#IF (SCONENABLE) + .DW SCON_INIT +#ENDIF #IF (DMAENABLE) .DW DMA_INIT #ENDIF @@ -3838,15 +3868,6 @@ HB_INITTBL: #IF (SYQENABLE) .DW SYQ_INIT #ENDIF -#IF (PRPENABLE) - .DW PRP_INIT -#ENDIF -#IF (PPPENABLE) - .DW PPP_INIT -#ENDIF -#IF (SCONENABLE) - .DW SCON_INIT -#ENDIF #IF (CHENABLE) .DW CH_INIT #ENDIF @@ -3980,6 +4001,24 @@ CIO_SIZ .EQU CIO_MAX * 4 ; EACH ENTRY IS 4 BYTES CIO_CNT .DB 0 ; ENTRY COUNT PREFIX CIO_TBL .FILL CIO_SIZ,0 ; SPACE FOR ENTRIES ; +; CRT TYPE CHAR DEVICES CALL THIS TO REGISTER THAT THEY WANT TO BE THE +; DEFAULT CRT DEVICE. THIS ROUTINE WILL SET CB_CRTDEV WHEN CALLED THE +; FIRST TIME. SUBSEQUENT CALLS ARE IGNORED. THIS ENSURES THAT THE +; *FIRST* CRT DEVICE WINS. +; +CIO_SETCRT: + PUSH AF ; SAVE INCOMING CRT DEV NUM + LD A,(CB_CRTDEV) ; GET CURRENT CRT DEV NUM + INC A ; $FF -> $00 + JR NZ,CIO_SETCRT_Z ; IF ALREADY SET, LEAVE IT ALONE + POP AF ; RESTORE AF + LD (CB_CRTDEV),A ; SAVE CRT DEV NUM + RET ; AND DONE +; +CIO_SETCRT_Z: + POP AF ; RESTORE AF + RET ; AND DONE +; ;-------------------------------------------------------------------------------------------------- ; DISK I/O DEVICE FUNCTION DISPATCHER ;-------------------------------------------------------------------------------------------------- diff --git a/Source/HBIOS/ppp.asm b/Source/HBIOS/ppp.asm index 434b9e75..a4afb9e5 100644 --- a/Source/HBIOS/ppp.asm +++ b/Source/HBIOS/ppp.asm @@ -276,7 +276,8 @@ PPPCON_INIT: LD E,CIODEV_PPPCON ; DEVICE TYPE LD BC,PPPCON_FNTBL ; BC := FUNCTION TABLE ADDRESS CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED - LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + ;;;LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + CALL CIO_SETCRT ; SET OURSELVES AS THE CRT DEVICE ; XOR A RET diff --git a/Source/HBIOS/prp.asm b/Source/HBIOS/prp.asm index fb987eb9..f00557ed 100644 --- a/Source/HBIOS/prp.asm +++ b/Source/HBIOS/prp.asm @@ -150,7 +150,8 @@ PRPCON_INIT: LD E,CIODEV_PRPCON ; DEVICE TYPE LD BC,PRPCON_FNTBL ; BC := FUNCTION TABLE ADDRESS CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED - LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + ;;;LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + CALL CIO_SETCRT ; SET OURSELVES AS THE CRT DEVICE ; XOR A ; SIGNAL SUCCESS RET diff --git a/Source/HBIOS/scon.asm b/Source/HBIOS/scon.asm index bf8f2857..9d8452de 100644 --- a/Source/HBIOS/scon.asm +++ b/Source/HBIOS/scon.asm @@ -46,7 +46,8 @@ SCON_INIT: LD E,CIODEV_SCON ; DEVICE TYPE LD BC,SCON_FNTBL ; BC := FUNCTION TABLE ADDRESS CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED - LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + ;;;LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + CALL CIO_SETCRT ; SET OURSELVES AS THE CRT DEVICE ; XOR A ; SIGNAL SUCCESS RET diff --git a/Source/HBIOS/term.asm b/Source/HBIOS/term.asm index 1325cff2..6f193013 100644 --- a/Source/HBIOS/term.asm +++ b/Source/HBIOS/term.asm @@ -76,7 +76,8 @@ TERM_ATTACH: PUSH HL ; COPY VDA INSTANCE DATA PTR POP DE ; ... TO DE CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED - LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + ;;;LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + CALL CIO_SETCRT ; SET OURSELVES AS THE CRT DEVICE ; ; INCREMENT DEVICE COUNT LD HL,TERM_DEVCNT ; POINT TO DEVICE COUNT diff --git a/Source/ver.inc b/Source/ver.inc index 055305ab..51e79644 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 5 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.5.0-dev.75" +#DEFINE BIOSVER "3.5.0-dev.76" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index d15eaaba..ed3c00ff 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 5 rup equ 0 rtp equ 0 biosver macro - db "3.5.0-dev.75" + db "3.5.0-dev.76" endm