From 1945c0f52dedc93c4b9a8b1dcf93946b6683c7e9 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sat, 20 Mar 2021 11:55:12 -0700 Subject: [PATCH] CBIOS default drive assignment cleanup Improved the way that the default drive is assigned in the scenario where you are booting to a ROM-based OS. This should allow removal of either the RAM drive or the ROM drive without causing unexpected consequences. --- Source/CBIOS/cbios.asm | 47 ++++++++++++++++++------------ Source/HBIOS/md.asm | 22 +++++++------- Source/HBIOS/romldr.asm | 2 +- Source/RomDsk/ROM_256KB/FLASH.COM | Bin 14076 -> 0 bytes Source/ver.inc | 2 +- Source/ver.lib | 2 +- 6 files changed, 42 insertions(+), 33 deletions(-) delete mode 100644 Source/RomDsk/ROM_256KB/FLASH.COM diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index 43a7d4c8..695c823d 100644 --- a/Source/CBIOS/cbios.asm +++ b/Source/CBIOS/cbios.asm @@ -2174,23 +2174,42 @@ INIT2: #IFDEF PLTWBW ; ; IF WE HAVE MULTIPLE DRIVES AND THE FIRST DRIVE IS RAM DRIVE + ; AND THE SECOND DRIVE IS ROM DRIVE OR FLASH DRIVE ; THEN MAKE OUR DEFAULT STARTUP DRIVE THE SECOND DRIVE (B:) +; + ; CHECK FOR 2+ DRIVES LD HL,(DRVMAPADR) ; POINT TO DRIVE MAP DEC HL ; BUMP BACK TO DRIVE COUNT LD A,(HL) ; GET IT CP 2 ; COMPARE TO 2 JR C,INIT2X ; IF LESS THAN 2, THEN DONE ; + ; CHECK IF FIRST UNIT IS RAM LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO - INC HL ; POINT TO UNIT FIELD - LD C,(HL) ; ... OF FIRST DRIVE + INC HL ; POINT TO UNIT FIELD OF FIRST DRIVE + LD C,(HL) ; PUT UNIT NUM IN C RST 08 ; CALL HBIOS - LD A,D ; DEVICE TYPE TO A - CP DIODEV_MD ; MEMORY DISK DEVICE? - JR NZ,INIT2X ; IF NOT, THEN DONE LD A,C ; GET ATTRIBUTES + AND %00111000 ; ISOLATE TYPE BITS CP %00101000 ; TYPE = RAM? JR NZ,INIT2X ; IF NOT THEN DONE +; + ; CHECK IF SECOND UNIT IS ROM OR FLASH + LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO + LD HL,(DRVMAPADR) ; POINT TO DRIVE MAP + LD A,4 ; 4 BYTES PER ENTRY + CALL ADDHLA ; POINT TO UNIT FIELD OF SECOND DRIVE + LD C,(HL) ; PUT UNIT NUM IN C + RST 08 ; CALL HBIOS + LD A,C ; GET ATTRIBUTES + AND %00111000 ; ISOLATE TYPE BITS + CP %00100000 ; TYPE = ROM? + JR Z,INIT2A ; IF SO, ADJUST DEF DRIVE + CP %00111000 ; TYPE = FLASH? + JR NZ,INIT2X ; IF NOT THEN DONE +; +INIT2A: + ; CRITERIA MET, ADJUST DEF DRIVE TO B: LD A,1 ; USE SECOND DRIVE AS DEFAULT LD (DEFDRIVE),A ; RECORD DEFAULT DRIVE ; @@ -2712,14 +2731,6 @@ DRV_INIT: ; GET BOOT UNIT/SLICE INFO LD DE,(HCB + HCB_BOOTVOL) ; BOOT VOLUME (UNIT, SLICE) LD (BOOTVOL),DE ; D -> UNIT, E -> SLICE -;; -; ; INIT DEFAULT -; LD A,D ; BOOT UNIT? -; CP 1 ; IF ROM BOOT, DEF DRIVE SHOULD BE B: -; JR Z,DRV_INIT1 ; ... SO LEAVE AS IS AND SKIP AHEAD -; XOR A ; ELSE FORCE TO DRIVE A: -;DRV_INIT1: -; LD (DEFDRIVE),A ; STORE IT ; ; SETUP THE DRVMAP STRUCTURE LD HL,(HEAPTOP) ; GET CURRENT HEAP TOP @@ -2808,11 +2819,8 @@ DRV_INIT5: LD A,E ; SLICES PER VOLUME VALUE TO ACCUM LD (HDSPV),A ; SAVE IT LD DE,(BOOTVOL) ; BOOT VOLUME (UNIT, SLICE) - LD A,1 ; ROM DISK UNIT? - CP D ; CHECK IT - JR Z,DRV_INIT5A ; IF SO, SKIP BOOT DRIVE LD B,1 ; JUST ONE SLICE PLEASE - CALL DRV_INIT8A ; DO THE BOOT DEVICE + CALL DRV_INIT8A ; DO THE BOOT UNIT & SLICE FIRST ; DRV_INIT5A: LD A,(DRVLSTC) ; ACTIVE DRIVE LIST COUNT TO ACCUM @@ -2848,9 +2856,10 @@ DRV_INIT7: ; PROCESS UNIT DRV_INIT8: ; SLICE CREATION LOOP ; DE=UNIT/SLICE, B=SLICE CNT +; + ; FIRST, CHECK TO SEE IF THIS IS THE BOOT VOL & SLICE. + ; IF SO, IT HAS ALREADY BEEN PROCESSED ABOVE, SO SKIP IT HERE. LD A,(BOOTVOL + 1) ; GET BOOT UNIT - CP 1 ; ROM BOOT? - JR Z,DRV_INIT8A ; IF SO, OK TO CONTINUE CP D ; COMPARE TO CUR UNIT JR NZ,DRV_INIT8A ; IF NE, OK TO CONTINUE LD A,(BOOTVOL) ; GET BOOT SLICE diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index b6c2d8eb..8ef62440 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -33,8 +33,8 @@ MD_FVAR .EQU 1 ; FLASH VERIFY AFTER WRITE ; MD_CFGTBL: #IF (MDRAM) - ; DEVICE 1 (RAM) - .DB 1 ; DRIVER DEVICE NUMBER + ; DEVICE 0 (RAM) + .DB 0 ; DEVICE NUMBER .DB 0 ; DEVICE STATUS .DW 0,0 ; CURRENT LBA .DB MID_MDRAM ; DEVICE MEDIA ID @@ -42,8 +42,8 @@ MD_CFGTBL: #ENDIF ; #IF (MDROM) - ; DEVICE 0 (ROM) - .DB 0 ; DEVICE NUMBER + ; DEVICE 1 (ROM) + .DB 1 ; DEVICE NUMBER .DB 0 ; DEVICE STATUS .DW 0,0 ; CURRENT LBA .DB MID_MDROM ; DEVICE MEDIA ID @@ -158,7 +158,7 @@ MD_RESET: ; ; ; -MD_CAP: ; ASSUMES THAT UNIT 1 IS RAM, UNIT 0 IS ROM +MD_CAP: ; ASSUMES THAT UNIT 0 IS RAM, UNIT 1 IS ROM LD A,(IY+MD_DEV) ; GET DEVICE NUMBER OR A ; SET FLAGS JR Z,MD_CAP0 ; UNIT 0 @@ -169,11 +169,11 @@ MD_CAP: ; ASSUMES THAT UNIT 1 IS RAM, UNIT 0 IS ROM OR A RET MD_CAP0: - LD A,(HCB + HCB_ROMBANKS) ; POINT TO ROM BANK COUNT + LD A,(HCB + HCB_RAMBANKS) ; POINT TO RAM BANK COUNT LD B,4 ; SET # RESERVED ROM BANKS JR MD_CAP2 MD_CAP1: - LD A,(HCB + HCB_RAMBANKS) ; POINT TO RAM BANK COUNT + LD A,(HCB + HCB_ROMBANKS) ; POINT TO ROM BANK COUNT LD B,8 ; SET # RESERVED RAM BANKS MD_CAP2: SUB B ; SUBTRACT OUT RESERVED BANKS @@ -619,12 +619,12 @@ MD_IOSETUP: POP AF ; GET BANK AND FLAGS BACK JR Z,MD_IOSETUP2 ; DO ROM DRIVE, ELSE FALL THRU FOR RAM DRIVE ; -MD_IOSETUP1: ; RAM - ADD A,BID_RAMD0 +MD_IOSETUP1: ; ROM + ADD A,BID_ROMD0 RET ; -MD_IOSETUP2: ; ROM - ADD A,BID_ROMD0 +MD_IOSETUP2: ; RAM + ADD A,BID_RAMD0 RET ; ; diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 05b4cc33..685671aa 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -648,7 +648,7 @@ romload1: ; Record boot information pop af ; recover source bank ld l,a ; L := source bank - ld de,$0100 ; boot volume/slice + ld de,$0000 ; boot vol=0, slice=0 ld b,BF_SYSSET ; HBIOS func: system set ld c,BF_SYSSET_BOOTINFO ; BBIOS subfunc: boot info rst 08 ; do it diff --git a/Source/RomDsk/ROM_256KB/FLASH.COM b/Source/RomDsk/ROM_256KB/FLASH.COM deleted file mode 100644 index c81f9c545c86a9fa8e0f4161e827e4ce9e44ae9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14076 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 diff --git a/Source/ver.inc b/Source/ver.inc index 255c6176..53785179 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.65" +#DEFINE BIOSVER "3.1.1-pre.66" diff --git a/Source/ver.lib b/Source/ver.lib index 5a04fb6a..a20b1715 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.65" + db "3.1.1-pre.66" endm