|
|
|
@ -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) |
|
|
|
|