@ -302,7 +302,7 @@ BOOT:
LD SP , STACK ; STACK FOR INITIALIZATION
;
; COPY INITIALIZATION CODE TO RUNNINT LOCATION $8000
; COPY INITIALIZATION CODE TO RUNNING LOCATION $8000
LD HL , BUFPOOL
LD DE , $ 8000
LD BC , CBIOS_END - BUFPOOL
@ -2014,7 +2014,7 @@ AUTOSUB:
INC A ; CHECK FOR ERR, $FF --> $00
RET Z ; ERR, DO NOT ATTEMPT AUTO SUBMIT
;
LD HL , CMD ; ADDRESS OF STARTUP COMMAND
LD HL , CMD ; ADDRESS OF STARTUP COMMANDs
LD DE , CCP_LOC + 7 ; START OF COMMAND BUFFER IN CCP
LD BC , CMDLEN ; LENGTH OF AUTOSTART COMMAND
LDIR ; PATCH COMMAND LINE INTO CCP
@ -2398,7 +2398,11 @@ DRV_INIT:
LD ( DRVMAPADR ), HL ; SAVE AS DRVMAP ADDRESS
LD ( HEAPTOP ), HL ; AND AS NEW HEAP TOP
;
; SETUP TO LOOP THROUGH AVAILABLE DEVICES
; SETUP TO LOOP THROUGH AVAILABLE DEVICES BUILDING LIST OF
; ACTIVE UNITS AND COUNTING NUMBER OF ACTIVE HARD DISK
; DEVICES. NON-HARD DISK UNITS ARE ALWAYS CONSIDERED
; ACTIVE, BUT HARD DISK UNITS ARE ONLY CONSIDERED ACTIVE
; IF THERE IS MEDIA IN THE DRIVE.
LD B , BF_SYSGET
LD C , BF_SYSGET_DIOCNT
RST 08 ; E := DISK UNIT COUNT
@ -2408,31 +2412,76 @@ DRV_INIT:
RET Z ; HANDLE ZERO DEVICES (ALBEIT POORLY)
;
; LOOP THRU DEVICES TO COUNT TOTAL HARD DISK VOLUMES
PUSH BC ; SAVE THE DEVICE COUNT
LD C , 0 ; USE C AS DEVICE LIST INDEX
LD E , 0 ; INIT E FOR HARD DISK VOLUME COUNT
LD C , 0 ; INIT C AS DEVICE LIST INDEX
LD D , 0 ; INIT D AS TOTAL DEVICE COUNT
LD E , 0 ; INIT E FOR HARD DISK DEVICE COUNT
LD HL , DRVLST ; INIT HL PTR TO DRIVE LIST
;
DRV_INIT2:
PUSH BC ; SAVE LOOP CONTROL
CALL DRV_INIT3 ; CHECK DRIVE
POP BC ; RESTORE LOOP CONTROL
INC C ; NEXT UNIT
DJNZ DRV_INIT2 ; LOOP
POP BC ; RESTORE UNIT COUNT IN B
LD A , D ; TOTAL DEVICE COUNT TO D
LD ( DRVLSTC ), A ; SAVE THE COUNT
JR DRV_INIT4 ; CONTINUE
;
DRV_INIT3:
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
POP BC ; RESTORE LOOP CONTROL
POP HL ; RESTORE DRIVE LIST PTR
POP DE ; RESTORE DE
CP DI ODEV_IDE ; HARD DISK DEVICE?
RET C ; NOPE, RETURN
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
;
DRV_INIT3A:
; CHECK FOR ACTIVE AND RETURN IF NOT
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
POP BC ; RESTORE LOOP CONTROL
POP HL ; RESTORE DRIVE LIST PTR
POP DE ; RESTORE DE
RET NZ ; IF NO MEDIA, JUST RETURN
; IF ACTIVE...
LD ( HL ), C ; SAVE UNIT NUM IN LIST
INC HL ; BUMP PTR
INC D ; INC TOTAL DEVICE COUNT
INC E ; INCREMENT HARD DISK COUNT
RET ; AND RETURN
;
DRV_INIT4: ; SET SLICES PER VOLUME (HDSPV) BASED ON HARD DISK VOLUME COUNT
; ; *** DEBUG ***
; CALL NEWLINE2
; LD A,(DRVLSTC)
; LD B,A
; CALL PRTHEXBYTE
; LD A,' '
; CALL COUT
; LD HL,DRVLST
;TEMP1:
; LD A,(HL)
; INC HL
; CALL PRTHEXBYTE
; DJNZ TEMP1
; ; *** DEBUG ***
LD A , E ; HARD DISK VOLUME COUNT TO A
LD E , 8 ; ASSUME 8 SLICES PER VOLUME
DEC A ; DEC ACCUM TO CHECK FOR COUNT = 1
@ -2446,14 +2495,20 @@ DRV_INIT5:
LD A , E ; SLICES PER VOLUME VALUE TO ACCUM
LD ( HDSPV ), A ; SAVE IT
;
; SETUP TO ENUMERATE DEVICES TO BUILD DRVMAP
LD B , BF_SYSGET
LD C , BF_SYSGET_DIOCNT
RST 08 ; E := DISK UNIT COUNT
LD B , E ; COUNT TO B
LD C , 0 ; USE C AS DEVICE LIST INDEX
; ; SETUP TO ENUMERATE DEVICES TO BUILD DRVMAP
; LD B,BF_SYSGET
; LD C,BF_SYSGET_DIOCNT
; RST 08 ; E := DISK UNIT COUNT
; LD B,E ; COUNT TO B
; LD C,0 ; USE C AS DEVICE LIST INDEX
;
LD A ,( DRVLSTC ) ; ACTIVE DRIVE LIST COUNT TO ACCUM
LD B , A ; ... AND MOVE TO B FOR LOOP COUNTER
LD HL , DRVLST ; HL IS PTR TO ACTIVE DRIVE LIST
;
DRV_INIT6: ; LOOP THRU ALL UNITS AVAILABLE
PUSH HL ; PRESERVE DRIVE LIST PTR
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
@ -2462,6 +2517,8 @@ DRV_INIT6: ; LOOP THRU ALL UNITS AVAILABLE
CALL DRV_INIT7 ; MAKE DRIVE MAP ENTRY(S)
POP BC ; RESTORE LOOP CONTROL
INC C ; INCREMENT LIST INDEX
POP HL ; RESTORE DRIVE LIST PTR
INC HL ; INCREMENT ACTIVE DRIVE LIST PTR
DJNZ DRV_INIT6 ; LOOP AS NEEDED
RET ; FINISHED
;
@ -2880,6 +2937,8 @@ HEAPTOP .DW BUFPOOL ; CURRENT TOP OF HEAP
BOOTVOL .DW 0 ; BOOT VOLUME, MSB=BOOT UNIT, LSB=BOOT SLICE
BNKRAMD .DB 0 ; STARTING BANK ID FOR RAM DRIVE
HDSPV .DB 2 ; SLICES PER VOLUME FOR HARD DISKS (MUST BE >= 1)
DRVLST .FILL 32 ; ACTIVE DRIVE LIST USED DURINT DRV_INIT
DRVLSTC .DB 0 ; ENTRY COUNT FOR ACTIVE DRIVE LIST
;
CMD .DB CMDLEN - 2
.TEXT "SUBMIT PROFILE"