diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 69098fd3..c45b61e2 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -48,6 +48,7 @@ Version 3.1.1 - WBW: Added support for MBC FDC to FDU application - WBW: Added support for MBC FDC to HBIOS - WBW: Refactored make process +- WBW: Added ROM verification to boot process Version 3.1 ----------- diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index d7990f4a..6ed7af9a 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -2066,6 +2066,65 @@ HB_Z280BUS1: CALL PRTHEXWORDHL #ENDIF ; +; ROM CHECKSUM VERIFICATION +; EACH OF THE FIRST 4 ROM BANKS HAS A CHECKSUM INJECTED SUCH THAT +; A COMPUTED CHECKSUM ACROSS THE ENTIRE BANK SHOLD ALWAYS BE ZERO +; +HB_ROMCK: + CALL NEWLINE + PRTS("ROM VERIFY:$") +; + ; COPY CHECKSUM ROUTINE TO UPPER RAM + LD HL,HB_CKBNK + LD DE,$8000 + LD BC,HB_CKBNKSIZ + LDIR +; + ; TEST FIRST 4 BANKS OF ROM + LD B,4 ; 4 BANKS + LD C,0 ; STARTING AT BANK 0 +HB_ROMCK1: + PUSH BC ; SAVE LOOP CONTROL + CALL $8000 ; TEST THE BANK + CALL PC_SPACE ; FORMATTING + CALL PRTHEXBYTE ; PRINT RESULT + POP BC ; RESTORE LOOP CONTROL + OR A ; SET FLAGS + JR NZ,HB_ROMCK2 ; HANDLE FAILURE + INC C ; NEXT BANK + DJNZ HB_ROMCK1 ; LOOP FOR BANKS + PRTS(" PASS$") ; DISPLAY SUCCESS + JR HB_ROMCKZ ; CONTINUE BOOT +HB_ROMCK2: + PRTS(" FAIL$") ; DISPLAY ERROR + JR HB_ROMCKZ ; CONTINUE BOOT +; +; VERIFY ROM CHECKSUM BANK SPECIFIED IN REG C +; THIS MUST BE COPIED TO UPPER RAM TO RUN +; +HB_CKBNK: + LD A,(HB_CURBNK) ; GET CURRENT BANK + LD E,A ; SAVE IN E + LD A,C ; BANK TO TEST + CALL HBX_BNKSEL ; SELECT BANK IT + LD HL,$7FFF ; START AT BANK END + LD BC,1 ; DECREMENT VALUE + XOR A ; ZERO ACCUM +HB_CKBNK1: + ADD A,(HL) ; ADD NEXT BYTE + OR A ; CLEAR CARRY + SBC HL,BC ; DECREMENT + JR NC,HB_CKBNK1 ; LOOP TILL DONE + PUSH AF ; SAVE RESULT + LD A,E ; BANK TO RESTORE + CALL HBX_BNKSEL ; RESTORE ORIG BANK + POP AF ; RECOVER RESULT + RET ; AND DONE +; +HB_CKBNKSIZ .EQU $-HB_CKBNK ; SIZE OF ROUTINE +; +HB_ROMCKZ: +; ; LOW BATTERY DIAGNOSTIC MESSAGE ; #IF (BATCOND) diff --git a/Source/ver.inc b/Source/ver.inc index d11bc59a..5ef69718 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.100" +#DEFINE BIOSVER "3.1.1-pre.101" diff --git a/Source/ver.lib b/Source/ver.lib index 17928200..34f75d1a 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.100" + db "3.1.1-pre.101" endm