diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 2c15b811..d10cddfe 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -64,10 +64,6 @@ ; - dsky.asm ; - unlzsa2s.asm ; -; TODO -; - Add remaining service routine stubs for IM3 (NMI, etc.) -; - Fix app boot under Z280 -; ; INCLUDE GENERIC STUFF ; #INCLUDE "std.asm" @@ -962,6 +958,23 @@ HB_IVT0F: JP HB_BADINT \ .DB 0 ;================================================================================================== ; HB_START: +#IFDEF APPBOOT + #IF (MEMMGR == MM_Z280) + LD A,%00000001 + OUT (DIAGPORT),A + LD DE,Z280_BOOTERR + LD C,9 + LD A,%00000010 + OUT (DIAGPORT),A + CALL $0005 + LD A,%00001000 + OUT (DIAGPORT),A + RET +; +Z280_BOOTERR .TEXT "\r\n\r\n*** Application mode boot not supported under Z280 native memory management!!!\r\n\r\n$" + #ENDIF +#ENDIF + DI ; NO INTERRUPTS IM 1 ; INTERRUPT MODE 1 ; @@ -3602,16 +3615,109 @@ HB_BADINTCNT .DB 0 #IF (MEMMGR == MM_Z280) ; Z280_BADINT: - CALL NEWLINE + ; SAVE REASON CODE FOR POSSIBLE RETURN VIA RETIL + EX (SP),HL ; GET MSR, SAVE HL + LD (HB_RCSAV),HL ; SAVE IT + POP HL ; RECOVER HL, POP STACK + ; SAVE MSR FOR POSSIBLE RETURN VIA RETIL + EX (SP),HL ; GET MSR, SAVE HL + LD (HB_MSRSAV),HL ; SAVE IT + POP HL ; RECOVER HL, POP STACK +; + PUSH DE LD DE,Z280_BADINTSTR + CALL NEWLINE2 + PRTS("+++ $") CALL WRITESTR - POP HL ; DUMP MSR - POP HL ; GET RET ADR - CALL PRTHEXWORDHL + POP DE + CALL XREGDMP +; + ; RECOVER MSR, THEN RETURN VIA RETIL + PUSH HL ; SAVE HL + LD HL,(HB_RCSAV) ; GET SAVED REASON CODE + PRTS(" RC=$") + CALL PRTHEXWORDHL ; DUMP MSR + LD HL,(HB_MSRSAV) ; GET SAVED MSR + PRTS(" MSR=$") + CALL PRTHEXWORDHL ; DUMP MSR + EX (SP),HL ; MSR TO STK, RECOVER HL +; + .DB $ED,$55 ; RETIL +; +Z280_SSTEP: + ; SAVE HL AND MSR FOR POSSIBLE RETURN VIA RETIL + EX (SP),HL ; GET MSR, SAVE HL + LD (HB_MSRSAV),HL ; SAVE IT + POP HL ; RECOVER HL, POP STACK +; + PUSH DE + LD DE,Z280_SSTEPSTR + JP Z280_DIAG +; +Z280_BRKHLT: + ; SAVE HL AND MSR FOR POSSIBLE RETURN VIA RETIL + EX (SP),HL ; GET MSR, SAVE HL + LD (HB_MSRSAV),HL ; SAVE IT + POP HL ; RECOVER HL, POP STACK +; + PUSH DE + LD DE,Z280_BRKHLTSTR + JP Z280_DIAG +; +Z280_DIVEXC: + ; SAVE HL AND MSR FOR POSSIBLE RETURN VIA RETIL + EX (SP),HL ; GET MSR, SAVE HL + LD (HB_MSRSAV),HL ; SAVE IT + POP HL ; RECOVER HL, POP STACK +; + PUSH DE + LD DE,Z280_DIVEXCSTR + JP Z280_DIAG +; +Z280_STKOVR: + ; SAVE HL AND MSR FOR POSSIBLE RETURN VIA RETIL + EX (SP),HL ; GET MSR, SAVE HL + LD (HB_MSRSAV),HL ; SAVE IT + POP HL ; RECOVER HL, POP STACK +; + PUSH DE + LD DE,Z280_STKOVRSTR + JP Z280_DIAG +; +Z280_ACCVIO: + ; SAVE HL AND MSR FOR POSSIBLE RETURN VIA RETIL + EX (SP),HL ; GET MSR, SAVE HL + LD (HB_MSRSAV),HL ; SAVE IT + POP HL ; RECOVER HL, POP STACK +; + PUSH DE + LD DE,Z280_ACCVIOSTR + JP Z280_DIAG +; +Z280_DIAG: + CALL NEWLINE2 + PRTS("+++ $") + CALL WRITESTR + POP DE + CALL XREGDMP +; + ; RECOVER MSR, THEN RETURN VIA RETIL + PUSH HL ; SAVE HL + LD HL,(HB_MSRSAV) ; GET SAVED MSR + PRTS(" MSR=$") + CALL PRTHEXWORDHL ; DUMP MSR + EX (SP),HL ; MSR TO STK, RECOVER HL +; + ;.DB $ED,$55 ; RETIL DI HALT ; -Z280_BADINTSTR .TEXT "\n\n*** Z280 BAD INT @$" +Z280_BADINTSTR .TEXT "BAD INT $" +Z280_SSTEPSTR .TEXT "SINGLE STEP $" +Z280_BRKHLTSTR .TEXT "BREAK HALT $" +Z280_DIVEXCSTR .TEXT "DIVISION EXCEPTION $" +Z280_STKOVRSTR .TEXT "STACK OVERFLOW $" +Z280_ACCVIOSTR .TEXT "ACCESS VIOLATION $" ; #ENDIF ; @@ -3685,7 +3791,8 @@ Z280_PRIVINSTX: EX (SP),HL ; MSR TO STK, RECOVER HL .DB $ED,$55 ; RETIL ; -HB_MSRSAV .DW 0 +HB_MSRSAV .DW 0 ; SAVED MSR +HB_RCSAV .DW 0 ; SAVED REASON CODE ; Z280_PRIVSTR .TEXT "\r\n\r\n*** Privileged Instruction @$" ; @@ -3898,27 +4005,27 @@ Z280_IVT: .DW $0000 ; UART TRANSMITTER MSR .DW Z280_BADINT ; UART TRANSMITTER VECTOR .DW $0000 ; SINGLE STEP TRAP MSR - .DW Z280_BADINT ; SINGLE STEP TRAP VECTOR + .DW Z280_SSTEP ; SINGLE STEP TRAP VECTOR .DW $0000 ; BREAK ON HALT TRAP MSR - .DW Z280_BADINT ; BREAK ON HALT TRAP VECTOR + .DW Z280_BRKHLT ; BREAK ON HALT TRAP VECTOR .DW $0000 ; DIVISION EXCEPTION TRAP MSR - .DW Z280_BADINT ; DIVISION EXCEPTION TRAP VECTOR + .DW Z280_DIVEXC ; DIVISION EXCEPTION TRAP VECTOR .DW $0000 ; STACK OVERFLOW WARNING TRAP MSR - .DW Z280_BADINT ; STACK OVERFLOW WARNING TRAP VECTOR + .DW Z280_STKOVR ; STACK OVERFLOW WARNING TRAP VECTOR .DW $0000 ; ACCESS VIOLATION TRAP MSR - .DW Z280_BADINT ; ACCESS VIOLATION TRAP VECTOR + .DW Z280_ACCVIO ; ACCESS VIOLATION TRAP VECTOR .DW $0000 ; SYSTEM CALL TRAP MSR .DW Z280_SYSCALL ; SYSTEM CALL TRAP VECTOR .DW $0000 ; PRIVILEGED INSTRUCTION TRAP MSR .DW Z280_PRIVINST ; PRIVILEGED INSTRUCTION TRAP VECTOR .DW $0000 ; EPU <- MEMORY EXTENDED INSTRUCTION TRAP MSR - .DW Z280_BADINT ; EPU <- MEMORY EXTENDED INSTRUCTION TRAP VECTOR + .DW $0000 ; EPU <- MEMORY EXTENDED INSTRUCTION TRAP VECTOR .DW $0000 ; MEMORY <- EPU EXTENDED INSTRUCTION TRAP MSR - .DW Z280_BADINT ; MEMORY <- EPU EXTENDED INSTRUCTION TRAP VECTOR + .DW $0000 ; MEMORY <- EPU EXTENDED INSTRUCTION TRAP VECTOR .DW $0000 ; A <- EPU EXTENDED INSTRUCTION TRAP MSR - .DW Z280_BADINT ; A <- EPU EXTENDED INSTRUCTION TRAP VECTOR + .DW $0000 ; A <- EPU EXTENDED INSTRUCTION TRAP VECTOR .DW $0000 ; EPU INTERNAL OPERATION EXTENDED INSTRUCTION TRAP MSR - .DW Z280_BADINT ; EPU INTERNAL OPERATION EXTENDED INSTRUCTION TRAP VECTOR + .DW $0000 ; EPU INTERNAL OPERATION EXTENDED INSTRUCTION TRAP VECTOR .DW 0, 0 ; RESERVED .DW 0, 0 ; RESERVED ; PROGRAM COUNTER VALUES FOR NMI/INTA diff --git a/Source/HBIOS/usrrom.asm b/Source/HBIOS/usrrom.asm index c230e0f9..ead329be 100644 --- a/Source/HBIOS/usrrom.asm +++ b/Source/HBIOS/usrrom.asm @@ -8,14 +8,11 @@ LF .EQU 0AH ; .ORG USR_LOC ; - LD HL,BOOTMSG ; INTRODUCTION + LD HL,BOOTMSG ; INTRODUCTION CALL PRTSTR - CALL CIN ; DO STUFF + CALL CIN ; DO STUFF ; - ;LD A,00H ; RETURN TO ROM LOADER - ;LD HL,0000H - ;JP 0FFF9H LD B,BF_SYSRESET ; SYSTEM RESTART LD C,BF_SYSRES_WARM ; WARM START CALL $FFF0 ; CALL HBIOS diff --git a/Source/HBIOS/util.asm b/Source/HBIOS/util.asm index bccb3925..707c7ddf 100644 --- a/Source/HBIOS/util.asm +++ b/Source/HBIOS/util.asm @@ -125,7 +125,7 @@ PRTSTR: ; PRINT A STRING DIRECT: REFERENCED BY POINTER AT TOP OF STACK ; STRING MUST BE TERMINATED BY '$' ; USAGE: -; CALL PRTSTR +; CALL PRTSTRD ; .DB "HELLO$" ; ... ; diff --git a/Source/ver.inc b/Source/ver.inc index 708cbf23..49dabc01 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.36" +#DEFINE BIOSVER "3.1.1-pre.38" diff --git a/Source/ver.lib b/Source/ver.lib index a71f2b66..973c277f 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.36" + db "3.1.1-pre.38" endm