RAM Disk Auto-Format Improvements

- Detect the situation where the RAM disk area is all zeroes and handle it properly as uninitialized.
This commit is contained in:
Wayne Warthen
2021-10-27 15:06:24 -07:00
parent 535dc1314e
commit 2e6122025d
4 changed files with 35 additions and 2 deletions

View File

@@ -2471,6 +2471,17 @@ MD_INIT4:
CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE)
;
#IF (CLRRAMDISK == CLR_AUTO)
; CHECK THE FIRST SECTOR (512 BYTES) FOR ALL ZEROES. IF SO,
; IT IMPLIES THE RAM IS UNINITIALIZED.
LD HL,0 ; START AT BEGINING OF RAM DISK
LD BC,512 ; COMPARE 512 BYTES
XOR A ; COMPARE TO ZERO
CLRRAM000:
CPI ; A - (HL), HL++, BC--
JR NZ,CLRRAM00 ; IF NOT ZERO, GO TO NEXT TEST
JP PE,CLRRAM000 ; LOOP THRU ALL BYTES
JR CLRRAM2 ; ALL ZEROES, JUMP TO INIT
CLRRAM00:
; CHECK FIRST 32 DIRECTORY ENTRIES. IF ANY START WITH AN INVALID
; VALUE, INIT THE RAM DISK. VALID ENTRIES ARE E5 (EMPTY ENTRY) OR
; 0-15 (USER NUMBER).
@@ -2528,6 +2539,17 @@ CLRRAM3:
CALL HB_BNKSEL ; SELECT BANK
#IF (CLRRAMDISK == CLR_AUTO)
; CHECK THE FIRST SECTOR (512 BYTES) FOR ALL ZEROES. IF SO,
; IT IMPLIES THE RAM IS UNINITIALIZED.
LD HL,0 ; START AT BEGINING OF RAM DISK
LD BC,512 ; COMPARE 512 BYTES
XOR A ; COMPARE TO ZERO
CLRRAM000:
CPI ; A - (HL), HL++, BC--
JR NZ,CLRRAM00 ; IF NOT ZERO, GO TO NEXT TEST
JP PE,CLRRAM000 ; LOOP THRU ALL BYTES
JR CLRRAM2 ; ALL ZEROES, JUMP TO INIT
CLRRAM00:
; CHECK FIRST 32 DIRECTORY ENTRIES. IF ANY START WITH AN INVALID
; VALUE, INIT THE RAM DISK. VALID ENTRIES ARE E5 (EMPTY ENTRY) OR
; 0-15 (USER NUMBER).