Drive letter assignment enhancement

Drive letters are now only pre-assigned to hard disk type devices that have media inserted.  Media can still be inserted on-the-fly and drive letters assigned using ASSIGN.
This commit is contained in:
Wayne Warthen
2020-02-08 14:24:36 -08:00
parent ae287ca56d
commit d8bbb1e8ca
10 changed files with 90 additions and 27 deletions

View File

@@ -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 DIODEV_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"

View File

@@ -2,4 +2,4 @@
#DEFINE RMN 9
#DEFINE RUP 2
#DEFINE RTP 0
#DEFINE BIOSVER "2.9.2-pre.28"
#DEFINE BIOSVER "2.9.2-pre.29"

View File

@@ -2,4 +2,4 @@
#DEFINE RMN 9
#DEFINE RUP 2
#DEFINE RTP 0
#DEFINE BIOSVER "2.9.2-pre.28"
#DEFINE BIOSVER "2.9.2-pre.29"

View File

@@ -3,5 +3,5 @@ rmn equ 9
rup equ 2
rtp equ 0
biosver macro
db "2.9.2-pre.28"
db "2.9.2-pre.29"
endm

View File

@@ -140,7 +140,7 @@ Function Concat($InputFileList, $OutputFile)
#
# Since TASM has no mechanism to include files dynamically based on variables, a file
# if built on-the-fly here for imbedding in the build process. This file is basically
# is built on-the-fly here for imbedding in the build process. This file is basically
# just used to include the platform and config files. It also passes in some values
# from the build to include in the build.

View File

@@ -990,14 +990,17 @@ PPIDE_RESET:
LD DE,150000/16 ; ~???MS
CALL VDELAY
;
CALL PPIDE_INITUNIT ; INIT CURRENT UNIT
; INITIALIZE THE INDIVIDUAL UNITS (MASTER AND SLAVE).
; BASED ON TESTING, IT APPEARS THAT THE MASTER UNIT MUST
; BE DONE FIRST OR THIS BEHAVES BADLY.
PUSH IY ; SAVE CFG PTR
CALL PPIDE_GOPARTNER ; POINT TO PARTNER
BIT 0,(IY+PPIDE_ACC) ; MASTER?
CALL Z,PPIDE_GOPARTNER ; IF NOT, SWITCH TO MASTER
CALL PPIDE_INITUNIT ; INIT CURRENT UNIT
CALL PPIDE_GOPARTNER ; POINT TO SLAVE
CALL PPIDE_INITUNIT ; INIT PARTNER UNIT
POP IY ; RECOVER ORIG CFG PTR
;
RET
;
;
;

View File

@@ -2,4 +2,4 @@
#DEFINE RMN 9
#DEFINE RUP 2
#DEFINE RTP 0
#DEFINE BIOSVER "2.9.2-pre.28"
#DEFINE BIOSVER "2.9.2-pre.29"

View File

@@ -2,4 +2,4 @@
#DEFINE RMN 9
#DEFINE RUP 2
#DEFINE RTP 0
#DEFINE BIOSVER "2.9.2-pre.28"
#DEFINE BIOSVER "2.9.2-pre.29"