@ -2291,8 +2291,8 @@ INIT2:
LD C ,( HL ) ; PUT UNIT NUM IN C
RST 08 ; CALL HBIOS
LD A , C ; GET ATTRIBUTES
AND % 00111000 ; ISOLATE TYPE BITS
CP % 00101000 ; TYPE = RAM?
AND % 10001111 ; ISOLATE TYPE BITS
CP % 00000 101 ; NOT FLOPPY, TYPE = RAM?
JR NZ , INIT2X ; IF NOT THEN DONE
;
; CHECK IF SECOND UNIT IS ROM OR FLASH
@ -2303,10 +2303,10 @@ INIT2:
LD C ,( HL ) ; PUT UNIT NUM IN C
RST 08 ; CALL HBIOS
LD A , C ; GET ATTRIBUTES
AND % 00111000 ; ISOLATE TYPE BITS
CP % 001 00000 ; TYPE = ROM?
AND % 10001111 ; ISOLATE TYPE BITS
CP % 000001 00 ; NOT FLOPPY, TYPE = ROM?
JR Z , INIT2A ; IF SO, ADJUST DEF DRIVE
CP % 00111000 ; TYPE = FLASH?
CP % 00000 111 ; NOT FLOPPY, TYPE = FLASH?
JR NZ , INIT2X ; IF NOT THEN DONE
;
INIT2A:
@ -2904,61 +2904,51 @@ DRV_INIT:
LD HL , DRVLST ; INIT HL PTR TO DRIVE LIST
;
DRV_INIT2:
PUSH BC ; SAVE LOOP CNT & UNIT
CALL DRV_INIT3 ; CHECK DRIVE
POP BC ; RECOVER LOOP CNT & UNIT
INC C ; NEXT UNIT
DJNZ DRV_INIT2 ; LOOP
LD A , D ; TOTAL DEVICE COUNT TO D
LD A , D ; TOTAL DEVICE COUNT TO A
LD ( DRVLSTC ), A ; SAVE THE COUNT
JR DRV_INIT4 ; CONTINUE
;
DRV_INIT3:
; GET DEVICE ATTRIBUTES
PUSH DE ; SAVE DE (HARD DISK VOLUME COUNTER)
PUSH HL ; SAVE DRIVE LIST PTR
PUSH BC ; SAVE LOOP CONTROL
LD B , BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
RST 08 ; CALL HBIOS, UNIT TO C
LD A , D ; DEVICE TYPE TO A
LD A , C ; DEVICE ATTRIBUTES TO A
POP BC ; RESTORE LOOP CONTROL
POP HL ; RESTORE DRIVE LIST PTR
POP DE ; RESTORE DE
CP DI ODEV_IDE ; HARD DISK DEVICE?
JR NC , DRV_INIT3A ; IF SO, HANDLE SPECIAL
LD ( HL ), C ; SAVE UNIT NUM IN LIST
INC HL ; BUMP PTR
INC D ; INC TOTAL DEVICE COUNT
RET
LD B , A ; ATTRIBUTES TO B
;
DRV_INIT3A:
; CHECK FOR HARD DISK REMOVABLE CARTRIDGE DRIVES
CP DI ODEV_PPA ; PPA (ZIP DRIVE) IS REMOVABLE
JR Z , DRV_INIT3B ; IF SO, SKIP MEDIA CHECK
CP DI ODEV_IMM ; IMM (ZIP DRIVE) IS REMOVABLE
JR Z , DRV_INIT3B ; IF SO, SKIP MEDIA CHECK
CP DI ODEV_SYQ ; IMM (ZIP DRIVE) IS REMOVABLE
JR Z , DRV_INIT3B ; IF SO, SKIP MEDIA CHECK
; CHECK FOR ACTIVE AND RETURN IF NOT
; IF DEVICE IS NOT REMOVABLE, THEN CHECK TO ENSURE IT IS
; ACTUALLY ONLINE. IF NOT, SKIP UNIT ENTIRELY.
BIT 6 , B ; REMOVABLE?
JR NZ , DRV_INIT3A ; IF SO, SKIP MEDIA CHECK
PUSH DE ; SAVE DE (HARD DISK VOLUME COUNTER)
PUSH HL ; SAVE DRIVE LIST PTR
PUSH BC ; SAVE LOOP CONTROL
LD B , BF_DIOMEDIA ; HBIOS FUNC: SENSE MEDIA
LD E , 1 ; PERFORM MEDIA DISCOVERY
RST 08
RST 08 ; DO IT
POP BC ; RESTORE LOOP CONTROL
POP HL ; RESTORE DRIVE LIST PTR
POP DE ; RESTORE DE
RET NZ ; IF NO MEDIA, JUST RETURN
DRV_INIT3B:
; IF ACTIVE...
RET NZ ; OFFLINE, SKIP ENTIRE UNIT
;
DRV_INIT3A:
LD ( HL ), C ; SAVE UNIT NUM IN LIST
INC HL ; BUMP PTR
INC D ; INC TOTAL DEVICE COUNT
BIT 5 , B ; HIGH CAPACITY?
RET Z ; DONE IF NOT
INC E ; INCREMENT HARD DISK COUNT
RET ; AND RETURN
RET ; DONE
;
DRV_INIT4: ; SET SLICES PER VOLUME (HDSPV) BASED ON HARD DISK VOLUME COUNT
LD A , E ; HARD DISK VOLUME COUNT TO A
@ -2987,7 +2977,8 @@ DRV_INIT6: ; LOOP THRU ALL UNITS AVAILABLE
LD C ,( HL ) ; GET UNIT NUM FROM LIST
PUSH BC ; PRESERVE LOOP CONTROL
LD B , BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
RST 08 ; CALL HBIOS, D := DEVICE TYPE
RST 08 ; CALL HBIOS, C := DEVICE ATTRIBUTES
LD A , C ; DEVICE ATTRIBUTES TO A
POP BC ; GET UNIT INDEX BACK IN C
PUSH BC ; RESAVE LOOP CONTROL
CALL DRV_INIT7 ; MAKE DRIVE MAP ENTRY(S)
@ -3001,10 +2992,9 @@ DRV_INIT6: ; LOOP THRU ALL UNITS AVAILABLE
DRV_INIT7: ; PROCESS UNIT
LD E , 0 ; INITIALIZE SLICE INDEX
LD B , 1 ; DEFAULT LOOP COUNTER
LD A , D ; DEVICE TYPE TO ACCUM
LD D , C ; UNIT NUMBER TO D
CP DI ODEV_IDE ; HARD DISK DEVICE?
JR C , DRV_INIT8 ; NOPE, LEAVE LOOP COUNT AT 1
BIT 5 , A ; HIGH CAPACITY DEVICE?
JR Z , DRV_INIT8 ; NOPE, LEAVE LOOP COUNT AT 1
LD A ,( HDSPV ) ; GET SLICES PER VOLUME TO ACCUM
LD B , A ; MOVE TO B FOR LOOP COUNTER
;
@ -3415,7 +3405,7 @@ DIRBUF .DW 0 ; DIR BUF POINTER
HEAPTOP .DW BUFPOOL ; CURRENT TOP OF HEAP
BOOTVOL .DW 0 ; BOOT VOLUME, MSB=BOOT UNIT, LSB=BOOT SLICE
HDSPV .DB 2 ; SLICES PER VOLUME FOR HARD DISKS (MUST BE >= 1)
DRVLST .FILL 32 ; ACTIVE DRIVE LIST USED DURINT DRV_INIT
DRVLST .FILL 32 ; ACTIVE DRIVE LIST USED DURING DRV_INIT
DRVLSTC .DB 0 ; ENTRY COUNT FOR ACTIVE DRIVE LIST
;
# IFDEF PLTWBW