Browse Source

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.
pull/199/head
Wayne Warthen 5 years ago
parent
commit
1945c0f52d
  1. 47
      Source/CBIOS/cbios.asm
  2. 22
      Source/HBIOS/md.asm
  3. 2
      Source/HBIOS/romldr.asm
  4. BIN
      Source/RomDsk/ROM_256KB/FLASH.COM
  5. 2
      Source/ver.inc
  6. 2
      Source/ver.lib

47
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

22
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
;
;

2
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

BIN
Source/RomDsk/ROM_256KB/FLASH.COM

Binary file not shown.

2
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"

2
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

Loading…
Cancel
Save