diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index cff99f0a..d7b066c3 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1588,8 +1588,7 @@ HB_CPU2: #ENDIF ; #IF (KIOENABLE) - LD A,%11111001 ; RESET ALL DEVICES, SET DAISYCHAIN - OUT (KIOBASE+$0E),A ; DO IT + CALL KIO_PREINIT #ENDIF ; #IF (CTCENABLE) @@ -2239,6 +2238,9 @@ HB_PCINITTBLLEN .EQU (($ - HB_PCINITTBL) / 2) ;================================================================================================== ; HB_INITTBL: +#IF (KIOENABLE) + .DW KIO_INIT +#ENDIF #IF (CTCENABLE) .DW CTC_INIT #ENDIF @@ -4794,6 +4796,14 @@ SIZ_UF .EQU $ - ORG_UF .ECHO SIZ_UF .ECHO " bytes.\n" #ENDIF +#IF (KIOENABLE) +ORG_KIO .EQU $ + #INCLUDE "kio.asm" +SIZ_KIO .EQU $ - ORG_KIO + .ECHO "KIO occupies " + .ECHO SIZ_KIO + .ECHO " bytes.\n" +#ENDIF #IF (CTCENABLE) ORG_CTC .EQU $ #INCLUDE "ctc.asm" diff --git a/Source/HBIOS/kio.asm b/Source/HBIOS/kio.asm new file mode 100644 index 00000000..8c7867c7 --- /dev/null +++ b/Source/HBIOS/kio.asm @@ -0,0 +1,92 @@ +;___KIO________________________________________________________________________________________________________________ +; +; Z80 KIO +; +; DISPLAY CONFIGURATION DETAILS +;______________________________________________________________________________________________________________________ +; +; +; +KIO_PIOADAT .EQU KIOBASE + $00 +KIO_PIOACMD .EQU KIOBASE + $01 +KIO_PIOBDAT .EQU KIOBASE + $02 +KIO_PIOBCMD .EQU KIOBASE + $03 +KIO_CTC0 .EQU KIOBASE + $04 +KIO_CTC1 .EQU KIOBASE + $05 +KIO_CTC2 .EQU KIOBASE + $06 +KIO_CTC3 .EQU KIOBASE + $07 +KIO_SIOADAT .EQU KIOBASE + $08 +KIO_SIOACMD .EQU KIOBASE + $09 +KIO_SIOBDAT .EQU KIOBASE + $0A +KIO_SIOBCMD .EQU KIOBASE + $0B +KIO_PIACDAT .EQU KIOBASE + $0C +KIO_PIACCMD .EQU KIOBASE + $0D +KIO_KIOCMD .EQU KIOBASE + $0E +KIO_KIOCMDB .EQU KIOBASE + $0F +; +; +; +KIO_PREINIT: + CALL KIO_DETECT + RET NZ +; + ; RECORD PRESENCE + LD A,$FF + LD (KIO_EXISTS),A + ; INITIALIZE KIO + LD A,%11111001 ; RESET ALL DEVICES, SET DAISYCHAIN + OUT (KIO_KIOCMD),A ; DO IT +; + XOR A + RET +; +; +; +KIO_INIT: + ; ANNOUNCE PORT + CALL NEWLINE ; FORMATTING + PRTS("KIO:$") ; FORMATTING +; + PRTS(" IO=0x$") ; FORMATTING + LD A,KIOBASE ; GET BASE PORT + CALL PRTHEXBYTE ; PRINT BASE PORT +; + LD A,(KIO_EXISTS) + OR A + JR Z,KIO_INIT2 +; + PRTS(" ENABLED$") ; DISPLAY ENABLED + XOR A ; SIGNAL SUCCESS + RET ; DONE +; +KIO_INIT2: + PRTS(" NOT PRESENT$") ; NOT ZERO, H/W NOT PRESENT + OR $FF ; SIGNAL FAILURE + RET ; BAIL OUT +; +; +; +KIO_DETECT: + LD C,KIO_SIOBCMD ; USE SIOB COMMAND PORT + LD B,2 ; SIO REG 2 +; + OUT (C),B + XOR A ; ZERO + OUT (C),A ; WRITE IT + OUT (C),B + IN A,(C) + AND $F0 ; TOP NIBBLE ONLY + RET NZ ; FAIL IF NOT ZERO +; + OUT (C),B + LD A,$FF ; $FF + OUT (C),A ; WRITE IT + OUT (C),B + IN A,(C) + AND $F0 ; TOP NIBBLE ONLY + CP $F0 ; COMPARE + RET ; DONE, Z IF FOUND, NZ IF MISCOMPARE +; +; +; +KIO_EXISTS .DB 0 diff --git a/Source/ver.inc b/Source/ver.inc index 07caab2b..3a709f3a 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.80" +#DEFINE BIOSVER "3.1.1-pre.81" diff --git a/Source/ver.lib b/Source/ver.lib index bd153311..e7006998 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.80" + db "3.1.1-pre.81" endm