mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
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:
@@ -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).
|
||||
|
||||
@@ -328,6 +328,17 @@ clrram:
|
||||
;call hb_bnksel ; select bank
|
||||
call 0FFF3h ; select bank
|
||||
|
||||
; 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).
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
#DEFINE RMN 1
|
||||
#DEFINE RUP 1
|
||||
#DEFINE RTP 0
|
||||
#DEFINE BIOSVER "3.1.1-pre.131"
|
||||
#DEFINE BIOSVER "3.1.1-pre.132"
|
||||
|
||||
@@ -3,5 +3,5 @@ rmn equ 1
|
||||
rup equ 1
|
||||
rtp equ 0
|
||||
biosver macro
|
||||
db "3.1.1-pre.131"
|
||||
db "3.1.1-pre.132"
|
||||
endm
|
||||
|
||||
Reference in New Issue
Block a user