Browse Source

RAM Disk Auto-Format Improvements

- Detect the situation where the RAM disk area is all zeroes and handle it properly as uninitialized.
pull/270/head
Wayne Warthen 4 years ago
parent
commit
2e6122025d
  1. 22
      Source/CBIOS/cbios.asm
  2. 11
      Source/CPM3/boot.z80
  3. 2
      Source/ver.inc
  4. 2
      Source/ver.lib

22
Source/CBIOS/cbios.asm

@ -2471,6 +2471,17 @@ MD_INIT4:
CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE) CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE)
; ;
#IF (CLRRAMDISK == CLR_AUTO) #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 ; CHECK FIRST 32 DIRECTORY ENTRIES. IF ANY START WITH AN INVALID
; VALUE, INIT THE RAM DISK. VALID ENTRIES ARE E5 (EMPTY ENTRY) OR ; VALUE, INIT THE RAM DISK. VALID ENTRIES ARE E5 (EMPTY ENTRY) OR
; 0-15 (USER NUMBER). ; 0-15 (USER NUMBER).
@ -2528,6 +2539,17 @@ CLRRAM3:
CALL HB_BNKSEL ; SELECT BANK CALL HB_BNKSEL ; SELECT BANK
#IF (CLRRAMDISK == CLR_AUTO) #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 ; CHECK FIRST 32 DIRECTORY ENTRIES. IF ANY START WITH AN INVALID
; VALUE, INIT THE RAM DISK. VALID ENTRIES ARE E5 (EMPTY ENTRY) OR ; VALUE, INIT THE RAM DISK. VALID ENTRIES ARE E5 (EMPTY ENTRY) OR
; 0-15 (USER NUMBER). ; 0-15 (USER NUMBER).

11
Source/CPM3/boot.z80

@ -328,6 +328,17 @@ clrram:
;call hb_bnksel ; select bank ;call hb_bnksel ; select bank
call 0FFF3h ; 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 ; Check first 32 directory entries. If any start with an invalid
; value, init the ram disk. Valid entries are e5 (empty entry) or ; value, init the ram disk. Valid entries are e5 (empty entry) or
; 0-15 (user number). ; 0-15 (user number).

2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1 #DEFINE RMN 1
#DEFINE RUP 1 #DEFINE RUP 1
#DEFINE RTP 0 #DEFINE RTP 0
#DEFINE BIOSVER "3.1.1-pre.131"
#DEFINE BIOSVER "3.1.1-pre.132"

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 1
rup equ 1 rup equ 1
rtp equ 0 rtp equ 0
biosver macro biosver macro
db "3.1.1-pre.131"
db "3.1.1-pre.132"
endm endm

Loading…
Cancel
Save