diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 26919279..1edf01e5 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -42,6 +42,7 @@ Version 2.9.2 - WBW: Switch RC/SC Z180 platforms to 115,200 default baud rate - PMS: Enhanced PPIDE driver to handle multiple PPI interfaces - PMS: Added a ROM based game +- WBW: Only assign drive letters to hard disk devices with media Version 2.9.1 ------------- diff --git a/ReadMe.txt b/ReadMe.txt index f9f522d0..ecfc0831 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -7,7 +7,7 @@ *********************************************************************** Wayne Warthen (wwarthen@gmail.com) -Version 2.9.2-pre.28, 2020-02-07 +Version 2.9.2-pre.29, 2020-02-08 https://www.retrobrewcomputers.org/ RomWBW is a ROM-based implementation of CP/M-80 2.2 and Z-System for diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index 971d3690..b0ae7c29 100644 --- a/Source/CBIOS/cbios.asm +++ b/Source/CBIOS/cbios.asm @@ -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" diff --git a/Source/CBIOS/ver.inc b/Source/CBIOS/ver.inc index ed995cd7..b65ec245 100644 --- a/Source/CBIOS/ver.inc +++ b/Source/CBIOS/ver.inc @@ -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" diff --git a/Source/CPM22/ver.inc b/Source/CPM22/ver.inc index ed995cd7..b65ec245 100644 --- a/Source/CPM22/ver.inc +++ b/Source/CPM22/ver.inc @@ -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" diff --git a/Source/CPM3/ver.inc b/Source/CPM3/ver.inc index 0b96de4f..2fc0ccc8 100644 --- a/Source/CPM3/ver.inc +++ b/Source/CPM3/ver.inc @@ -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 diff --git a/Source/HBIOS/Build.ps1 b/Source/HBIOS/Build.ps1 index 1572af95..1e653395 100644 --- a/Source/HBIOS/Build.ps1 +++ b/Source/HBIOS/Build.ps1 @@ -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. diff --git a/Source/HBIOS/ppide.asm b/Source/HBIOS/ppide.asm index 98dfd096..fc964390 100644 --- a/Source/HBIOS/ppide.asm +++ b/Source/HBIOS/ppide.asm @@ -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 - ; ; ; diff --git a/Source/HBIOS/ver.inc b/Source/HBIOS/ver.inc index ed995cd7..b65ec245 100644 --- a/Source/HBIOS/ver.inc +++ b/Source/HBIOS/ver.inc @@ -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" diff --git a/Source/ZSDOS/ver.inc b/Source/ZSDOS/ver.inc index ed995cd7..b65ec245 100644 --- a/Source/ZSDOS/ver.inc +++ b/Source/ZSDOS/ver.inc @@ -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"