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 #IFDEF PLTWBW
; ;
; IF WE HAVE MULTIPLE DRIVES AND THE FIRST DRIVE IS RAM DRIVE ; 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:) ; THEN MAKE OUR DEFAULT STARTUP DRIVE THE SECOND DRIVE (B:)
;
; CHECK FOR 2+ DRIVES
LD HL,(DRVMAPADR) ; POINT TO DRIVE MAP LD HL,(DRVMAPADR) ; POINT TO DRIVE MAP
DEC HL ; BUMP BACK TO DRIVE COUNT DEC HL ; BUMP BACK TO DRIVE COUNT
LD A,(HL) ; GET IT LD A,(HL) ; GET IT
CP 2 ; COMPARE TO 2 CP 2 ; COMPARE TO 2
JR C,INIT2X ; IF LESS THAN 2, THEN DONE JR C,INIT2X ; IF LESS THAN 2, THEN DONE
; ;
; CHECK IF FIRST UNIT IS RAM
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO 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 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 LD A,C ; GET ATTRIBUTES
AND %00111000 ; ISOLATE TYPE BITS
CP %00101000 ; TYPE = RAM? CP %00101000 ; TYPE = RAM?
JR NZ,INIT2X ; IF NOT THEN DONE 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 A,1 ; USE SECOND DRIVE AS DEFAULT
LD (DEFDRIVE),A ; RECORD DEFAULT DRIVE LD (DEFDRIVE),A ; RECORD DEFAULT DRIVE
; ;
@ -2712,14 +2731,6 @@ DRV_INIT:
; GET BOOT UNIT/SLICE INFO ; GET BOOT UNIT/SLICE INFO
LD DE,(HCB + HCB_BOOTVOL) ; BOOT VOLUME (UNIT, SLICE) LD DE,(HCB + HCB_BOOTVOL) ; BOOT VOLUME (UNIT, SLICE)
LD (BOOTVOL),DE ; D -> UNIT, E -> 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 ; SETUP THE DRVMAP STRUCTURE
LD HL,(HEAPTOP) ; GET CURRENT HEAP TOP LD HL,(HEAPTOP) ; GET CURRENT HEAP TOP
@ -2808,11 +2819,8 @@ DRV_INIT5:
LD A,E ; SLICES PER VOLUME VALUE TO ACCUM LD A,E ; SLICES PER VOLUME VALUE TO ACCUM
LD (HDSPV),A ; SAVE IT LD (HDSPV),A ; SAVE IT
LD DE,(BOOTVOL) ; BOOT VOLUME (UNIT, SLICE) 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 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: DRV_INIT5A:
LD A,(DRVLSTC) ; ACTIVE DRIVE LIST COUNT TO ACCUM LD A,(DRVLSTC) ; ACTIVE DRIVE LIST COUNT TO ACCUM
@ -2848,9 +2856,10 @@ DRV_INIT7: ; PROCESS UNIT
DRV_INIT8: DRV_INIT8:
; SLICE CREATION LOOP ; SLICE CREATION LOOP
; DE=UNIT/SLICE, B=SLICE CNT ; 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 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 CP D ; COMPARE TO CUR UNIT
JR NZ,DRV_INIT8A ; IF NE, OK TO CONTINUE JR NZ,DRV_INIT8A ; IF NE, OK TO CONTINUE
LD A,(BOOTVOL) ; GET BOOT SLICE 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: MD_CFGTBL:
#IF (MDRAM) #IF (MDRAM)
; DEVICE 1 (RAM)
.DB 1 ; DRIVER DEVICE NUMBER
; DEVICE 0 (RAM)
.DB 0 ; DEVICE NUMBER
.DB 0 ; DEVICE STATUS .DB 0 ; DEVICE STATUS
.DW 0,0 ; CURRENT LBA .DW 0,0 ; CURRENT LBA
.DB MID_MDRAM ; DEVICE MEDIA ID .DB MID_MDRAM ; DEVICE MEDIA ID
@ -42,8 +42,8 @@ MD_CFGTBL:
#ENDIF #ENDIF
; ;
#IF (MDROM) #IF (MDROM)
; DEVICE 0 (ROM)
.DB 0 ; DEVICE NUMBER
; DEVICE 1 (ROM)
.DB 1 ; DEVICE NUMBER
.DB 0 ; DEVICE STATUS .DB 0 ; DEVICE STATUS
.DW 0,0 ; CURRENT LBA .DW 0,0 ; CURRENT LBA
.DB MID_MDROM ; DEVICE MEDIA ID .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 LD A,(IY+MD_DEV) ; GET DEVICE NUMBER
OR A ; SET FLAGS OR A ; SET FLAGS
JR Z,MD_CAP0 ; UNIT 0 JR Z,MD_CAP0 ; UNIT 0
@ -169,11 +169,11 @@ MD_CAP: ; ASSUMES THAT UNIT 1 IS RAM, UNIT 0 IS ROM
OR A OR A
RET RET
MD_CAP0: 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 LD B,4 ; SET # RESERVED ROM BANKS
JR MD_CAP2 JR MD_CAP2
MD_CAP1: 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 LD B,8 ; SET # RESERVED RAM BANKS
MD_CAP2: MD_CAP2:
SUB B ; SUBTRACT OUT RESERVED BANKS SUB B ; SUBTRACT OUT RESERVED BANKS
@ -619,12 +619,12 @@ MD_IOSETUP:
POP AF ; GET BANK AND FLAGS BACK POP AF ; GET BANK AND FLAGS BACK
JR Z,MD_IOSETUP2 ; DO ROM DRIVE, ELSE FALL THRU FOR RAM DRIVE 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 RET
; ;
MD_IOSETUP2: ; ROM
ADD A,BID_ROMD0
MD_IOSETUP2: ; RAM
ADD A,BID_RAMD0
RET RET
; ;
; ;

2
Source/HBIOS/romldr.asm

@ -648,7 +648,7 @@ romload1:
; Record boot information ; Record boot information
pop af ; recover source bank pop af ; recover source bank
ld l,a ; L := 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 b,BF_SYSSET ; HBIOS func: system set
ld c,BF_SYSSET_BOOTINFO ; BBIOS subfunc: boot info ld c,BF_SYSSET_BOOTINFO ; BBIOS subfunc: boot info
rst 08 ; do it 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 RMN 1
#DEFINE RUP 1 #DEFINE RUP 1
#DEFINE RTP 0 #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 rup equ 1
rtp equ 0 rtp equ 0
biosver macro biosver macro
db "3.1.1-pre.65"
db "3.1.1-pre.66"
endm endm

Loading…
Cancel
Save