Browse Source

Improve OS Boot Drive Assignment

- Modified the Disk Device function call (DIODEVICE) to provide new attributes related to disk size and removability.
- Leveraged API change to allow handling drive assignment differently depending on ATAPI vs. ATA interface.
patch
Wayne Warthen 3 years ago
parent
commit
5457a7e7fd
  1. BIN
      Doc/RomWBW Applications.pdf
  2. BIN
      Doc/RomWBW Disk Catalog.pdf
  3. BIN
      Doc/RomWBW Errata.pdf
  4. BIN
      Doc/RomWBW ROM Applications.pdf
  5. BIN
      Doc/RomWBW System Guide.pdf
  6. BIN
      Doc/RomWBW User Guide.pdf
  7. 6
      ReadMe.md
  8. 6
      ReadMe.txt
  9. 15
      Source/Apps/assign.asm
  10. 64
      Source/CBIOS/cbios.asm
  11. 49
      Source/CPM3/boot.z80
  12. 5
      Source/Doc/ReadMe.md
  13. 38
      Source/Doc/SystemGuide.md
  14. 58
      Source/Doc/UserGuide.md
  15. 12
      Source/HBIOS/fd.asm
  16. 17
      Source/HBIOS/hbios.asm
  17. 2
      Source/HBIOS/hdsk.asm
  18. 24
      Source/HBIOS/ide.asm
  19. 2
      Source/HBIOS/imm.asm
  20. 6
      Source/HBIOS/md.asm
  21. 2
      Source/HBIOS/ppa.asm
  22. 24
      Source/HBIOS/ppide.asm
  23. 2
      Source/HBIOS/ppp.asm
  24. 2
      Source/HBIOS/prp.asm
  25. 2
      Source/HBIOS/rf.asm
  26. 34
      Source/HBIOS/romldr.asm
  27. 2
      Source/HBIOS/sd.asm
  28. 2
      Source/HBIOS/syq.asm
  29. 1
      Source/pSys/ReadMe.txt
  30. 2
      Source/ver.inc
  31. 2
      Source/ver.lib

BIN
Doc/RomWBW Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW Disk Catalog.pdf

Binary file not shown.

BIN
Doc/RomWBW Errata.pdf

Binary file not shown.

BIN
Doc/RomWBW ROM Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW System Guide.pdf

Binary file not shown.

BIN
Doc/RomWBW User Guide.pdf

Binary file not shown.

6
ReadMe.md

@ -3,7 +3,7 @@
**RomWBW ReadMe** \ **RomWBW ReadMe** \
Version 3.3 \ Version 3.3 \
Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \
06 Jun 2023
20 Jun 2023
# Overview # Overview
@ -183,6 +183,10 @@ let me know if I missed you!
- The RomWBW Disk Catalog document was produced by Mykl Orders. - The RomWBW Disk Catalog document was produced by Mykl Orders.
- Rob Prouse has created many of the supplemental disk images including
Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft BASIC Compiler,
Microsoft Fortran Compiler, and a Games compendium.
Contributions of all kinds to RomWBW are very welcome. Contributions of all kinds to RomWBW are very welcome.
# Licensing # Licensing

6
ReadMe.txt

@ -1,6 +1,6 @@
RomWBW ReadMe RomWBW ReadMe
Wayne Warthen (wwarthen@gmail.com) Wayne Warthen (wwarthen@gmail.com)
06 Jun 2023
20 Jun 2023
@ -185,6 +185,10 @@ let me know if I missed you!
- The RomWBW Disk Catalog document was produced by Mykl Orders. - The RomWBW Disk Catalog document was produced by Mykl Orders.
- Rob Prouse has created many of the supplemental disk images
including Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft
BASIC Compiler, Microsoft Fortran Compiler, and a Games compendium.
Contributions of all kinds to RomWBW are very welcome. Contributions of all kinds to RomWBW are very welcome.

15
Source/Apps/assign.asm

@ -30,11 +30,11 @@
; 2021-12-06 [WBW] Fix inverted ROM/RAM DPB mapping in buffer alloc ; 2021-12-06 [WBW] Fix inverted ROM/RAM DPB mapping in buffer alloc
; 2022-02-28 [WBW] Use HBIOS to swap banks under CP/M 3 ; 2022-02-28 [WBW] Use HBIOS to swap banks under CP/M 3
; Use CPM3 BDOS direct BIOS call to get DRVTBL adr ; Use CPM3 BDOS direct BIOS call to get DRVTBL adr
; 2023-06-19 [WBW] Update for revised DIODEVICE API
;_______________________________________________________________________________ ;_______________________________________________________________________________
; ;
; ToDo: ; ToDo:
; 1) Do something to prevent assigning slices when device does not support them
; 2) ASSIGN C: causes drive map to be reinstalled unnecessarily
; 1) ASSIGN C: causes drive map to be reinstalled unnecessarily
;_______________________________________________________________________________ ;_______________________________________________________________________________
; ;
;=============================================================================== ;===============================================================================
@ -1405,12 +1405,11 @@ chkdev: ; HBIOS variant
; get device/unit info ; get device/unit info
ld b,$17 ; hbios func: diodevice ld b,$17 ; hbios func: diodevice
ld c,a ; unit to C ld c,a ; unit to C
rst 08 ; call hbios, D := device, E := unit
ld a,d ; device to A
rst 08 ; call hbios, C := device attributes
; ;
; check slice support ; check slice support
cp $30 ; A has device/unit, in hard disk range?
jr c,chkdev1 ; if not hard disk, check slice val
bit 5,c ; high capacity device?
jr z,chkdev1 ; if not high cap, check slice val
xor a ; otherwise, signal OK xor a ; otherwise, signal OK
ret ret
; ;
@ -1943,10 +1942,10 @@ stack .equ $ ; stack top
; Messages ; Messages
; ;
indent .db " ",0 indent .db " ",0
msgban1 .db "ASSIGN v1.5 for RomWBW CP/M ",0
msgban1 .db "ASSIGN v1.6 for RomWBW CP/M ",0
msg22 .db "2.2",0 msg22 .db "2.2",0
msg3 .db "3",0 msg3 .db "3",0
msbban2 .db ", 28-Feb-2022",0
msbban2 .db ", 16-Jun-2023",0
msghb .db " (HBIOS Mode)",0 msghb .db " (HBIOS Mode)",0
msgub .db " (UBIOS Mode)",0 msgub .db " (UBIOS Mode)",0
msgban3 .db "Copyright 2021, Wayne Warthen, GNU GPL v3",0 msgban3 .db "Copyright 2021, Wayne Warthen, GNU GPL v3",0

64
Source/CBIOS/cbios.asm

@ -2291,8 +2291,8 @@ INIT2:
LD C,(HL) ; PUT UNIT NUM IN C LD C,(HL) ; PUT UNIT NUM IN C
RST 08 ; CALL HBIOS RST 08 ; CALL HBIOS
LD A,C ; GET ATTRIBUTES LD A,C ; GET ATTRIBUTES
AND %00111000 ; ISOLATE TYPE BITS
CP %00101000 ; TYPE = RAM?
AND %10001111 ; ISOLATE TYPE BITS
CP %00000101 ; NOT FLOPPY, TYPE = RAM?
JR NZ,INIT2X ; IF NOT THEN DONE JR NZ,INIT2X ; IF NOT THEN DONE
; ;
; CHECK IF SECOND UNIT IS ROM OR FLASH ; CHECK IF SECOND UNIT IS ROM OR FLASH
@ -2303,10 +2303,10 @@ INIT2:
LD C,(HL) ; PUT UNIT NUM IN C LD C,(HL) ; PUT UNIT NUM IN C
RST 08 ; CALL HBIOS RST 08 ; CALL HBIOS
LD A,C ; GET ATTRIBUTES LD A,C ; GET ATTRIBUTES
AND %00111000 ; ISOLATE TYPE BITS
CP %00100000 ; TYPE = ROM?
AND %10001111 ; ISOLATE TYPE BITS
CP %00000100 ; NOT FLOPPY, TYPE = ROM?
JR Z,INIT2A ; IF SO, ADJUST DEF DRIVE JR Z,INIT2A ; IF SO, ADJUST DEF DRIVE
CP %00111000 ; TYPE = FLASH?
CP %00000111 ; NOT FLOPPY, TYPE = FLASH?
JR NZ,INIT2X ; IF NOT THEN DONE JR NZ,INIT2X ; IF NOT THEN DONE
; ;
INIT2A: INIT2A:
@ -2904,61 +2904,51 @@ DRV_INIT:
LD HL,DRVLST ; INIT HL PTR TO DRIVE LIST LD HL,DRVLST ; INIT HL PTR TO DRIVE LIST
; ;
DRV_INIT2: DRV_INIT2:
PUSH BC ; SAVE LOOP CNT & UNIT
CALL DRV_INIT3 ; CHECK DRIVE CALL DRV_INIT3 ; CHECK DRIVE
POP BC ; RECOVER LOOP CNT & UNIT
INC C ; NEXT UNIT INC C ; NEXT UNIT
DJNZ DRV_INIT2 ; LOOP DJNZ DRV_INIT2 ; LOOP
LD A,D ; TOTAL DEVICE COUNT TO D
LD A,D ; TOTAL DEVICE COUNT TO A
LD (DRVLSTC),A ; SAVE THE COUNT LD (DRVLSTC),A ; SAVE THE COUNT
JR DRV_INIT4 ; CONTINUE JR DRV_INIT4 ; CONTINUE
; ;
DRV_INIT3: DRV_INIT3:
; GET DEVICE ATTRIBUTES
PUSH DE ; SAVE DE (HARD DISK VOLUME COUNTER) PUSH DE ; SAVE DE (HARD DISK VOLUME COUNTER)
PUSH HL ; SAVE DRIVE LIST PTR PUSH HL ; SAVE DRIVE LIST PTR
PUSH BC ; SAVE LOOP CONTROL PUSH BC ; SAVE LOOP CONTROL
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
RST 08 ; CALL HBIOS, UNIT TO C RST 08 ; CALL HBIOS, UNIT TO C
LD A,D ; DEVICE TYPE TO A
LD A,C ; DEVICE ATTRIBUTES TO A
POP BC ; RESTORE LOOP CONTROL POP BC ; RESTORE LOOP CONTROL
POP HL ; RESTORE DRIVE LIST PTR POP HL ; RESTORE DRIVE LIST PTR
POP DE ; RESTORE DE POP DE ; RESTORE DE
CP DIODEV_IDE ; HARD DISK DEVICE?
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
LD B,A ; ATTRIBUTES TO B
; ;
DRV_INIT3A:
; CHECK FOR HARD DISK REMOVABLE CARTRIDGE DRIVES
CP DIODEV_PPA ; PPA (ZIP DRIVE) IS REMOVABLE
JR Z,DRV_INIT3B ; IF SO, SKIP MEDIA CHECK
CP DIODEV_IMM ; IMM (ZIP DRIVE) IS REMOVABLE
JR Z,DRV_INIT3B ; IF SO, SKIP MEDIA CHECK
CP DIODEV_SYQ ; IMM (ZIP DRIVE) IS REMOVABLE
JR Z,DRV_INIT3B ; IF SO, SKIP MEDIA CHECK
; CHECK FOR ACTIVE AND RETURN IF NOT
; IF DEVICE IS NOT REMOVABLE, THEN CHECK TO ENSURE IT IS
; ACTUALLY ONLINE. IF NOT, SKIP UNIT ENTIRELY.
BIT 6,B ; REMOVABLE?
JR NZ,DRV_INIT3A ; IF SO, SKIP MEDIA CHECK
PUSH DE ; SAVE DE (HARD DISK VOLUME COUNTER) PUSH DE ; SAVE DE (HARD DISK VOLUME COUNTER)
PUSH HL ; SAVE DRIVE LIST PTR PUSH HL ; SAVE DRIVE LIST PTR
PUSH BC ; SAVE LOOP CONTROL PUSH BC ; SAVE LOOP CONTROL
LD B,BF_DIOMEDIA ; HBIOS FUNC: SENSE MEDIA LD B,BF_DIOMEDIA ; HBIOS FUNC: SENSE MEDIA
LD E,1 ; PERFORM MEDIA DISCOVERY LD E,1 ; PERFORM MEDIA DISCOVERY
RST 08
RST 08 ; DO IT
POP BC ; RESTORE LOOP CONTROL POP BC ; RESTORE LOOP CONTROL
POP HL ; RESTORE DRIVE LIST PTR POP HL ; RESTORE DRIVE LIST PTR
POP DE ; RESTORE DE POP DE ; RESTORE DE
RET NZ ; IF NO MEDIA, JUST RETURN
DRV_INIT3B:
; IF ACTIVE...
RET NZ ; OFFLINE, SKIP ENTIRE UNIT
;
DRV_INIT3A:
LD (HL),C ; SAVE UNIT NUM IN LIST LD (HL),C ; SAVE UNIT NUM IN LIST
INC HL ; BUMP PTR INC HL ; BUMP PTR
INC D ; INC TOTAL DEVICE COUNT INC D ; INC TOTAL DEVICE COUNT
BIT 5,B ; HIGH CAPACITY?
RET Z ; DONE IF NOT
INC E ; INCREMENT HARD DISK COUNT INC E ; INCREMENT HARD DISK COUNT
RET ; AND RETURN
RET ; DONE
; ;
DRV_INIT4: ; SET SLICES PER VOLUME (HDSPV) BASED ON HARD DISK VOLUME COUNT DRV_INIT4: ; SET SLICES PER VOLUME (HDSPV) BASED ON HARD DISK VOLUME COUNT
LD A,E ; HARD DISK VOLUME COUNT TO A LD A,E ; HARD DISK VOLUME COUNT TO A
@ -2987,7 +2977,8 @@ DRV_INIT6: ; LOOP THRU ALL UNITS AVAILABLE
LD C,(HL) ; GET UNIT NUM FROM LIST LD C,(HL) ; GET UNIT NUM FROM LIST
PUSH BC ; PRESERVE LOOP CONTROL PUSH BC ; PRESERVE LOOP CONTROL
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
RST 08 ; CALL HBIOS, D := DEVICE TYPE
RST 08 ; CALL HBIOS, C := DEVICE ATTRIBUTES
LD A,C ; DEVICE ATTRIBUTES TO A
POP BC ; GET UNIT INDEX BACK IN C POP BC ; GET UNIT INDEX BACK IN C
PUSH BC ; RESAVE LOOP CONTROL PUSH BC ; RESAVE LOOP CONTROL
CALL DRV_INIT7 ; MAKE DRIVE MAP ENTRY(S) CALL DRV_INIT7 ; MAKE DRIVE MAP ENTRY(S)
@ -3001,10 +2992,9 @@ DRV_INIT6: ; LOOP THRU ALL UNITS AVAILABLE
DRV_INIT7: ; PROCESS UNIT DRV_INIT7: ; PROCESS UNIT
LD E,0 ; INITIALIZE SLICE INDEX LD E,0 ; INITIALIZE SLICE INDEX
LD B,1 ; DEFAULT LOOP COUNTER LD B,1 ; DEFAULT LOOP COUNTER
LD A,D ; DEVICE TYPE TO ACCUM
LD D,C ; UNIT NUMBER TO D LD D,C ; UNIT NUMBER TO D
CP DIODEV_IDE ; HARD DISK DEVICE?
JR C,DRV_INIT8 ; NOPE, LEAVE LOOP COUNT AT 1
BIT 5,A ; HIGH CAPACITY DEVICE?
JR Z,DRV_INIT8 ; NOPE, LEAVE LOOP COUNT AT 1
LD A,(HDSPV) ; GET SLICES PER VOLUME TO ACCUM LD A,(HDSPV) ; GET SLICES PER VOLUME TO ACCUM
LD B,A ; MOVE TO B FOR LOOP COUNTER LD B,A ; MOVE TO B FOR LOOP COUNTER
; ;
@ -3415,7 +3405,7 @@ DIRBUF .DW 0 ; DIR BUF POINTER
HEAPTOP .DW BUFPOOL ; CURRENT TOP OF HEAP HEAPTOP .DW BUFPOOL ; CURRENT TOP OF HEAP
BOOTVOL .DW 0 ; BOOT VOLUME, MSB=BOOT UNIT, LSB=BOOT SLICE BOOTVOL .DW 0 ; BOOT VOLUME, MSB=BOOT UNIT, LSB=BOOT SLICE
HDSPV .DB 2 ; SLICES PER VOLUME FOR HARD DISKS (MUST BE >= 1) HDSPV .DB 2 ; SLICES PER VOLUME FOR HARD DISKS (MUST BE >= 1)
DRVLST .FILL 32 ; ACTIVE DRIVE LIST USED DURINT DRV_INIT
DRVLST .FILL 32 ; ACTIVE DRIVE LIST USED DURING DRV_INIT
DRVLSTC .DB 0 ; ENTRY COUNT FOR ACTIVE DRIVE LIST DRVLSTC .DB 0 ; ENTRY COUNT FOR ACTIVE DRIVE LIST
; ;
#IFDEF PLTWBW #IFDEF PLTWBW

49
Source/CPM3/boot.z80

@ -156,7 +156,9 @@ dinit:
ld hl,drvlst ; init hl ptr to drive list ld hl,drvlst ; init hl ptr to drive list
; ;
dinit2: dinit2:
push bc ; save loop cnt & unit
call dinit3 ; check drive call dinit3 ; check drive
pop bc ; recover loop cnt & unit
inc c ; next unit inc c ; next unit
djnz dinit2 ; loop djnz dinit2 ; loop
ld a,d ; total device count to d ld a,d ; total device count to d
@ -169,48 +171,35 @@ dinit3:
push bc ; save loop control push bc ; save loop control
ld b,17h ; hbios func: report device info ld b,17h ; hbios func: report device info
rst 08 ; call hbios, unit to c rst 08 ; call hbios, unit to c
ld a,d ; device type to a
ld a,c ; device attributes to a
pop bc ; restore loop control pop bc ; restore loop control
pop hl ; restore drive list ptr pop hl ; restore drive list ptr
pop de ; restore de pop de ; restore de
cp 30h ; hard disk device?
jr nc,dinit3a ; if so, handle special
ld (hl),c ; save unit num in list
inc hl ; bump ptr
inc d ; inc total device count
ret
ld b,a ; attributes to b
; ;
dinit3a:
; check for hard disk removable cartridge drives
cp 0A0h ; ppa (zip drive) is removable
jr z,dinit3b ; if so, skip media check
cp 0B0h ; imm (zip drive) is removable
jr z,dinit3b ; if so, skip media check
cp 0C0h ; syq (syquest drive) is removable
jr z,dinit3b ; if so, skip media check
; check for active and return if not
; if device is not removable, then check to ensure it is
; actually online. if not, skip unit entirely.
bit 6,b ; removable?
jr nz,dinit3a ; if so, skip media check
push de ; save de (hard disk volume counter) push de ; save de (hard disk volume counter)
push hl ; save drive list ptr push hl ; save drive list ptr
push bc ; save loop control push bc ; save loop control
ld b,18h ; hbios func: sense media ld b,18h ; hbios func: sense media
ld e,1 ; perform media discovery ld e,1 ; perform media discovery
rst 08
rst 08 ; do it
pop bc ; restore loop control pop bc ; restore loop control
pop hl ; restore drive list ptr pop hl ; restore drive list ptr
pop de ; restore de pop de ; restore de
ret nz ; if no media, just return
dinit3b:
; if active...
ret nz ; offline, skip entire unit
;
dinit3a:
ld (hl),c ; save unit num in list ld (hl),c ; save unit num in list
inc hl ; bump ptr inc hl ; bump ptr
inc d ; inc total device count inc d ; inc total device count
bit 5,b ; high capacity?
ret z ; done if not
inc e ; increment hard disk count inc e ; increment hard disk count
ret ; and return
ret ; done
dinit4: ; set slices per volume (hdspv) based on hard disk volume count dinit4: ; set slices per volume (hdspv) based on hard disk volume count
ld a,e ; hard disk volume count to a ld a,e ; hard disk volume count to a
@ -247,7 +236,8 @@ dinit6:
push bc ; preserve loop control push bc ; preserve loop control
push hl ; preserve dph pointer push hl ; preserve dph pointer
ld b,17h ; hbios func: report device info ld b,17h ; hbios func: report device info
rst 08 ; call hbios, d := device type
rst 08 ; call hbios, a := device attributes
ld a,c ; device attributes to a
pop hl ; restore dph pointer pop hl ; restore dph pointer
pop bc ; get unit index back in c pop bc ; get unit index back in c
push bc ; resave loop control push bc ; resave loop control
@ -262,10 +252,9 @@ dinit6:
dinit7: ; process a unit (all slices) dinit7: ; process a unit (all slices)
ld e,0 ; initialize slice index ld e,0 ; initialize slice index
ld b,1 ; default loop counter ld b,1 ; default loop counter
ld a,d ; device type to accum
ld d,c ; unit number to d ld d,c ; unit number to d
cp 030h ; hard disk device?
jr c,dinit8 ; nope, leave loop count at 1
bit 5,a ; high capacity device?
jr z,dinit8 ; nope, leave loop count at 1
ld a,(hdspv) ; get slices per volume to accum ld a,(hdspv) ; get slices per volume to accum
ld b,a ; move to b for loop counter ld b,a ; move to b for loop counter

5
Source/Doc/ReadMe.md

@ -172,6 +172,11 @@ please let me know if I missed you!
* The RomWBW Disk Catalog document was produced by Mykl Orders. * The RomWBW Disk Catalog document was produced by Mykl Orders.
* Rob Prouse has created many of the supplemental disk images
including Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft
BASIC Compiler, Microsoft Fortran Compiler, and a Games
compendium.
Contributions of all kinds to RomWBW are very welcome. Contributions of all kinds to RomWBW are very welcome.
# Licensing # Licensing

38
Source/Doc/SystemGuide.md

@ -757,28 +757,36 @@ of memory because it avoids a double copy.
Reports device information about the specified Disk Unit (C). The Reports device information about the specified Disk Unit (C). The
Status (A) is a standard HBIOS result code. Status (A) is a standard HBIOS result code.
Bit 7 of the Device Attribute (C) value returned indicates whether the
device is a floppy disk. If it is a floppy disk, the Device Attribute
(C) value is encoded as follows:
The Device Attribute (C) value returned indicates various
feature indicators related to the device being referenced
by the specified Disk Unit (C). The high 3 bits apply to
all devices. The definition of the low 5 bits depends on
whether the device is a Floppy (indicated by bit 5).
The common bits are:
| **Bits** | **Definition** | | **Bits** | **Definition** |
|---------:|--------------------------------------------------| |---------:|--------------------------------------------------|
| 7 | = 1 (Floppy Disk) |
| 6-5 | Form Factor: 0=8", 1=5.25", 2=3.5", 3=Other |
| 4 | Sides: 0=SS, 1=DS |
| 3-2 | Density: 0=SD, 1=DD, 2=HD, 3=ED |
| 1-0 | Reserved |
| 7 | Floppy |
| 6 | Removable |
| 5 | High Capacity (>8 MB) |
If the Disk Unit (C) specified is a not floppy disk, then the Device
Attribute (C) encoding is as follows:
The Floppy specific bits are:
| **Bits** | **Definition** | | **Bits** | **Definition** |
|---------:|--------------------------------------------------| |---------:|--------------------------------------------------|
| 7 | = 0 (not Floppy Disk) |
| 6 | Removable |
| 5-3 | Type: 0=Hard, 1=CF, 2=SD, 3=USB, |
| | 4=ROM, 5=RAM, 6=RAMF, 7=FLASH |
| 2-0 | Reserved |
| 4-3 | Form Factor: 0=8", 1=5.25", 2=3.5", 3=Other |
| 2 | Sides: 0=SS, 1=DS |
| 1-0 | Density: 0=SD, 1=DD, 2=HD, 3=ED |
The non-Floppy specific bits are:
| **Bits** | **Definition** |
|---------:|--------------------------------------------------|
| 4 | LBA Capable |
| 3-0 | Media Type: 0=Hard Disk, 1=CF, 2=SD, 3=USB, |
| | 4=ROM, 5=RAM, 6=RAMF, 7=FLASH, 8=CD-ROM, |
| | 9=Cartridge |
Device Type (D) indicates the specific hardware driver that handles the Device Type (D) indicates the specific hardware driver that handles the
specified Disk Unit (C). Values are listed at the start of this specified Disk Unit (C). Values are listed at the start of this

58
Source/Doc/UserGuide.md

@ -2213,18 +2213,23 @@ file which is bootable.
output will be garbled if no such terminal or emulator output will be garbled if no such terminal or emulator
is used for console output. is used for console output.
* There is no straightforward mechanism to move files in
* There is no built-in mechanism to move files in
and out of p-System. However, the .vol files in Source/pSys and out of p-System. However, the .vol files in Source/pSys
can be read and modified by CiderPress. CiderPress is able can be read and modified by CiderPress. CiderPress is able
to add and remove individual files. to add and remove individual files.
Andrew Davidson has created a Python script that can extract p-System
volumes from an existing disk image file. The script is also capable
of inserting a modified volume back into the disk image file.
This tool is available at
<https://github.com/robosnacks/psysimg>.
## FreeRTOS ## FreeRTOS
Phillip Stevens has ported FreeRTOS to run under RomWBW. FreeRTOS is Phillip Stevens has ported FreeRTOS to run under RomWBW. FreeRTOS is
not provided in the RomWBW distribution. FreeRTOS is available under not provided in the RomWBW distribution. FreeRTOS is available under
the
[MIT licence](https://www.freertos.org/a00114.html) and further general
information is available at
the [MIT licence](https://www.freertos.org/a00114.html)
and further general information is available at
[FreeRTOS](https://www.freertos.org/RTOS.html). [FreeRTOS](https://www.freertos.org/RTOS.html).
You can also contact Phillip for detailed information on the Z180 You can also contact Phillip for detailed information on the Z180
@ -3152,6 +3157,46 @@ directed to complete a partial flash using the /P command line switch.
`E>FLASH WRITE ROM.UPD /P` `E>FLASH WRITE ROM.UPD /P`
# Related Projects
Outside of the hardware platforms adapted to RomWBW, there are a variety
of software projects that either target RomWBW specifically or provide
a RomWBW-specific variation.
## Z88DK
Z88DK is a software powerful development kit for Z80 computers
supporting both C and assembly language. This kit now provides
specific library support for RomWBW HBIOS. The Z88DK project is
hosted at <https://github.com/z88dk/z88dk>.
## Paleo Editor
Steve Garcia has created a Windows-hosted IDE that is tailored to
development of RomWBW. The project can be found at
<https://github.com/alloidian/PaleoEditor>.
## p-System Volume Management Script
Andrew Davidson has created a Python script to automate the insertion
and deletion of volumes within the p-System disk image. These scripts
are hosted at <https://github.com/robosnacks/psysimg>.
## Z80 fig-FORTH
Dimitri Theulings' implementation of fig-FORTH for the Z80 has a
RomWBW-specific variant. This fig-FORTH is built into the RomWBW
ROM. However, the project itself is hosted at
<https://github.com/dimitrit/figforth>.
## RomWBW Date/Time Utility
Kevin Boone has created a generic application that will display or
set the date/time of an RTC on RomWBW. The application runs on all of
the CP/M OS variants. This tool (`WDATE`) is included on the RomWBW
OS disk images. The project is hosted at
<https://github.com/kevinboone/wdate-cpm>.
# Acknowledgments # Acknowledgments
I want to acknowledge that a great deal of the code and inspiration I want to acknowledge that a great deal of the code and inspiration
@ -3217,6 +3262,11 @@ please let me know if I missed you!
* The RomWBW Disk Catalog document was produced by Mykl Orders. * The RomWBW Disk Catalog document was produced by Mykl Orders.
* Rob Prouse has created many of the supplemental disk images
including Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft
BASIC Compiler, Microsoft Fortran Compiler, and a Games
compendium.
Contributions of all kinds to RomWBW are very welcome. Contributions of all kinds to RomWBW are very welcome.
# Licensing # Licensing

12
Source/HBIOS/fd.asm

@ -231,12 +231,12 @@ FDMM_8 .DB FDM111, $FF
; FDT_ VALUES DEFINED IN STD.ASM ; FDT_ VALUES DEFINED IN STD.ASM
; ;
FD_DEVATTR: FD_DEVATTR:
.DB %11100000 ; DRIVE TYPE NONE
.DB %11010100 ; DRIVE TYPE 3.5 DD
.DB %11011000 ; DRIVE TYPE 3.5 HD
.DB %10110100 ; DRIVE TYPE 5.25 DD
.DB %10111000 ; DRIVE TYPE 5.25 HD
.DB %10010100 ; DRIVE TYPE 8
.DB %110 00000 ; DRIVE TYPE NONE
.DB %110 10101 ; DRIVE TYPE 3.5 DD
.DB %110 10110 ; DRIVE TYPE 3.5 HD
.DB %110 01101 ; DRIVE TYPE 5.25 DD
.DB %110 01110 ; DRIVE TYPE 5.25 HD
.DB %110 00101 ; DRIVE TYPE 8
; ;
; FDC COMMANDS ; FDC COMMANDS
; ;

17
Source/HBIOS/hbios.asm

@ -6744,7 +6744,7 @@ PS_DISK:
; ;
; DEVICE COLUMN ; DEVICE COLUMN
LD B,BF_DIODEVICE ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C LD B,BF_DIODEVICE ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C
RST 08 ; DE:=DEVTYP/NUM, H:=DISK ATTRIBUTES
RST 08 ; DE:=DEVTYP/NUM, C:=DISK ATTRIBUTES
PUSH BC ; SAVE ATTRIBUTES PUSH BC ; SAVE ATTRIBUTES
LD HL,PS_DDMD ; POINT TO DISK DEVICE TYPE NAME TABLE LD HL,PS_DDMD ; POINT TO DISK DEVICE TYPE NAME TABLE
CALL PS_PRTDEV ; PRINT DISK DEVICE NMEMONIC PADDED TO FIELD WIDTH CALL PS_PRTDEV ; PRINT DISK DEVICE NMEMONIC PADDED TO FIELD WIDTH
@ -6768,7 +6768,7 @@ PS_PRTDT:
LD C,E LD C,E
LD DE,PS_DTHARD LD DE,PS_DTHARD
LD A,00111000B
LD A,00001111B
CALL PRTIDXMSK CALL PRTIDXMSK
CALL PS_PAD18 ; PAD TO 18 SPACES CALL PS_PAD18 ; PAD TO 18 SPACES
RET RET
@ -6780,10 +6780,7 @@ PS_PRTDC:
LD A,E ; ATTRIBUTE TO ACCUM LD A,E ; ATTRIBUTE TO ACCUM
BIT 7,A ; TEST FOR FLOPPY BIT 7,A ; TEST FOR FLOPPY
JR NZ,PS_PRTDC2 ; HANDLE FLOPPY JR NZ,PS_PRTDC2 ; HANDLE FLOPPY
RRCA ; ISOLATE TYPE BITS
RRCA
RRCA
AND $07
AND $0F ; ISOLATE TYPE BITS
CP 4 ; ROM DISK? CP 4 ; ROM DISK?
JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB
CP 5 ; RAM DISK? CP 5 ; RAM DISK?
@ -6821,15 +6818,15 @@ PS_PRTDC1:
PS_PRTDC2: PS_PRTDC2:
LD C,E ; ATTRIBUTE TO C FOR SAFE KEEPING LD C,E ; ATTRIBUTE TO C FOR SAFE KEEPING
; ;
LD A,01100000B ; DISPLAY FORM FACTOR
LD A,%00011000 ; DISPLAY FORM FACTOR
LD DE,PS_FLP_FSTR ; WHICH IS DEFINED IN LD DE,PS_FLP_FSTR ; WHICH IS DEFINED IN
CALL PRTIDXMSK ; BITS 5 AND 6. CALL PRTIDXMSK ; BITS 5 AND 6.
; ;
LD A,00010000B ; DISPLAY SIDES
LD A,%00000100 ; DISPLAY SIDES
LD DE,PS_FLP_SSTR ; WHICH IS DEFINED LD DE,PS_FLP_SSTR ; WHICH IS DEFINED
CALL PRTIDXMSK ; IN BIT 4 CALL PRTIDXMSK ; IN BIT 4
; ;
LD A,00001100B ; DISPLAY DENSITY
LD A,%00000011 ; DISPLAY DENSITY
LD DE,PS_FLP_DSTR ; WHICH IS DEFINED IN LD DE,PS_FLP_DSTR ; WHICH IS DEFINED IN
CALL PRTIDXMSK ; BITS 2 AND 3. CALL PRTIDXMSK ; BITS 2 AND 3.
; ;
@ -7183,6 +7180,8 @@ PS_DTROM .TEXT "ROM Disk$"
PS_DTRAM .TEXT "RAM Disk$" PS_DTRAM .TEXT "RAM Disk$"
PS_DTRF .TEXT "RAM Floppy$" PS_DTRF .TEXT "RAM Floppy$"
PS_DTFSH .TEXT "Flash Drive$" PS_DTFSH .TEXT "Flash Drive$"
PS_DTCD .TEXT "CD-ROM$"
PS_DTCRT .TEXT "Cartridge$"
PS_DTOTHER .TEXT "???$" PS_DTOTHER .TEXT "???$"
; ;
; FLOPPY ATTRIBUTE STRINGS ; FLOPPY ATTRIBUTE STRINGS

2
Source/HBIOS/hdsk.asm

@ -166,7 +166,7 @@ HDSK_GEOM:
HDSK_DEVICE: HDSK_DEVICE:
LD D,DIODEV_HDSK ; D := DEVICE TYPE LD D,DIODEV_HDSK ; D := DEVICE TYPE
LD E,(IY+HDSK_DEV) ; E := PHYSICAL DEVICE NUMBER LD E,(IY+HDSK_DEV) ; E := PHYSICAL DEVICE NUMBER
LD C,%00000000 ; C := ATTRIBUTES, NON-REMOVABLE HARD DISK
LD C,%00110000 ; C := ATTRIBUTES, NON-REMOVABLE HARD DISK
LD H,0 ; H := 0, DRIVER HAS NO MODES LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,HDSK_IO ; L := BASE I/O ADDRESS LD L,HDSK_IO ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS

24
Source/HBIOS/ide.asm

@ -566,10 +566,14 @@ IDE_STATUS:
IDE_DEVICE: IDE_DEVICE:
LD D,DIODEV_IDE ; D := DEVICE TYPE LD D,DIODEV_IDE ; D := DEVICE TYPE
LD E,(IY+IDE_DEV) ; E := PHYSICAL DEVICE NUMBER LD E,(IY+IDE_DEV) ; E := PHYSICAL DEVICE NUMBER
LD C,%01111001 ; ATAPI ATTRIBUTES
LD A,(IY+IDE_TYPE) ; CHECK TYPE VALUE
CP IDE_TYPEATAPI ; ATAPI?
JR Z,IDE_DEVICE1 ; IF SO, DONE
LD C,%00110001 ; COMPACTFLASH ATTRIBUTES
BIT 0,(IY+IDE_MED) ; TEST CF BIT IN FLAGS BIT 0,(IY+IDE_MED) ; TEST CF BIT IN FLAGS
LD C,%00000000 ; ASSUME NON-REMOVABLE HARD DISK
JR Z,IDE_DEVICE1 ; IF Z, WE ARE DONE
LD C,%01001000 ; OTHERWISE REMOVABLE COMPACT FLASH
JR NZ,IDE_DEVICE1 ; IF SET, DONE
LD C,%00110000 ; GENERIC HARD DISK ATTRIBUTES
IDE_DEVICE1: IDE_DEVICE1:
LD H,(IY+IDE_MODE) ; H := MODE LD H,(IY+IDE_MODE) ; H := MODE
LD L,(IY+IDE_IOBASE) ; L := BASE I/O ADDRESS LD L,(IY+IDE_IOBASE) ; L := BASE I/O ADDRESS
@ -788,6 +792,13 @@ IDE_PKT_RDSEC:
PRTS(" PKT$") PRTS(" PKT$")
#ENDIF #ENDIF
; SETUP LBA ; SETUP LBA
;
#IF (DSKYENABLE)
LD A,IDE_LBA
CALL LDHLIYA
CALL HB_DSKACT ; SHOW ACTIVITY
#ENDIF
;
; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN
LD HL,IDE_PKTCMD_RW10+3 ; START OF LBA FIELD IN CDB (MSB) LD HL,IDE_PKTCMD_RW10+3 ; START OF LBA FIELD IN CDB (MSB)
LD A,(IY+IDE_LBA+2) ; THIRD BYTE OF LBA FIELD IN CFG (MSB) LD A,(IY+IDE_LBA+2) ; THIRD BYTE OF LBA FIELD IN CFG (MSB)
@ -848,6 +859,13 @@ IDE_PKT_WRSEC:
PRTS(" PKT$") PRTS(" PKT$")
#ENDIF #ENDIF
; SETUP LBA ; SETUP LBA
;
#IF (DSKYENABLE)
LD A,IDE_LBA
CALL LDHLIYA
CALL HB_DSKACT ; SHOW ACTIVITY
#ENDIF
;
; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN
LD HL,IDE_PKTCMD_RW10+3 ; START OF LBA FIELD IN CDB (MSB) LD HL,IDE_PKTCMD_RW10+3 ; START OF LBA FIELD IN CDB (MSB)
LD A,(IY+IDE_LBA+2) ; THIRD BYTE OF LBA FIELD IN CFG (MSB) LD A,(IY+IDE_LBA+2) ; THIRD BYTE OF LBA FIELD IN CFG (MSB)

2
Source/HBIOS/imm.asm

@ -405,7 +405,7 @@ IMM_RESET:
IMM_DEVICE: IMM_DEVICE:
LD D,DIODEV_IMM ; D := DEVICE TYPE LD D,DIODEV_IMM ; D := DEVICE TYPE
LD E,(IY+IMM_DEV) ; E := PHYSICAL DEVICE NUMBER LD E,(IY+IMM_DEV) ; E := PHYSICAL DEVICE NUMBER
LD C,%01000000 ; C := REMOVABLE HARD DISK
LD C,%01111001 ; C := REMOVABLE HARD DISK
LD H,(IY+IMM_MODE) ; H := MODE LD H,(IY+IMM_MODE) ; H := MODE
LD L,(IY+IMM_IOBASE) ; L := BASE I/O ADDRESS LD L,(IY+IMM_IOBASE) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS

6
Source/HBIOS/md.asm

@ -21,9 +21,9 @@ MD_LBA .EQU 2 ; OFFSET OF LBA (DWORD)
MD_MID .EQU 6 ; OFFSET OF MEDIA ID (BYTE) MD_MID .EQU 6 ; OFFSET OF MEDIA ID (BYTE)
MD_ATTRIB .EQU 7 ; OFFSET OF ATTRIBUTE (BYTE) MD_ATTRIB .EQU 7 ; OFFSET OF ATTRIBUTE (BYTE)
; ;
MD_AROM .EQU %00100000 ; ROM ATTRIBUTE
MD_ARAM .EQU %00101000 ; RAM ATTRIBUTE
MD_AFSH .EQU %00111000 ; FLASH ATTRIBUTE
MD_AROM .EQU %00010100 ; ROM ATTRIBUTE
MD_ARAM .EQU %00010101 ; RAM ATTRIBUTE
MD_AFSH .EQU %00010111 ; FLASH ATTRIBUTE
; ;
MD_FDBG .EQU 0 ; FLASH DEBUG CODE MD_FDBG .EQU 0 ; FLASH DEBUG CODE
MD_FVBS .EQU 1 ; FLASH VERBOSE OUTPUT MD_FVBS .EQU 1 ; FLASH VERBOSE OUTPUT

2
Source/HBIOS/ppa.asm

@ -402,7 +402,7 @@ PPA_RESET:
PPA_DEVICE: PPA_DEVICE:
LD D,DIODEV_PPA ; D := DEVICE TYPE LD D,DIODEV_PPA ; D := DEVICE TYPE
LD E,(IY+PPA_DEV) ; E := PHYSICAL DEVICE NUMBER LD E,(IY+PPA_DEV) ; E := PHYSICAL DEVICE NUMBER
LD C,%01000000 ; C := REMOVABLE HARD DISK
LD C,%01111001 ; C := REMOVABLE HARD DISK
LD H,(IY+PPA_MODE) ; H := MODE LD H,(IY+PPA_MODE) ; H := MODE
LD L,(IY+PPA_IOBASE) ; L := BASE I/O ADDRESS LD L,(IY+PPA_IOBASE) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS

24
Source/HBIOS/ppide.asm

@ -572,10 +572,14 @@ PPIDE_STATUS:
PPIDE_DEVICE: PPIDE_DEVICE:
LD D,DIODEV_PPIDE ; D := DEVICE TYPE LD D,DIODEV_PPIDE ; D := DEVICE TYPE
LD E,(IY+PPIDE_DEV) ; E := PHYSICAL DEVICE NUMBER LD E,(IY+PPIDE_DEV) ; E := PHYSICAL DEVICE NUMBER
LD C,%01111001 ; ATAPI ATTRIBUTES
LD A,(IY+PPIDE_TYPE) ; CHECK TYPE VALUE
CP PPIDE_TYPEATAPI ; ATAPI?
JR Z,PPIDE_DEVICE1 ; IF SO, DONE
LD C,%00110001 ; COMPACTFLASH ATTRIBUTES
BIT 0,(IY+PPIDE_MED) ; TEST CF BIT IN FLAGS BIT 0,(IY+PPIDE_MED) ; TEST CF BIT IN FLAGS
LD C,%00000000 ; ASSUME NON-REMOVABLE HARD DISK
JR Z,PPIDE_DEVICE1 ; IF Z, WE ARE DONE
LD C,%01001000 ; OTHERWISE REMOVABLE COMPACT FLASH
JR NZ,PPIDE_DEVICE1 ; IF SET, DONE
LD C,%00110000 ; GENERIC HARD DISK ATTRIBUTES
PPIDE_DEVICE1: PPIDE_DEVICE1:
LD H,0 ; H := 0, DRIVER HAS NO MODES LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,(IY+PPIDE_DATALO) ; L := BASE I/O ADDRESS LD L,(IY+PPIDE_DATALO) ; L := BASE I/O ADDRESS
@ -794,6 +798,13 @@ PPIDE_PKT_RDSEC:
PRTS(" PKT$") PRTS(" PKT$")
#ENDIF #ENDIF
; SETUP LBA ; SETUP LBA
;
#IF (DSKYENABLE)
LD A,PPIDE_LBA
CALL LDHLIYA
CALL HB_DSKACT ; SHOW ACTIVITY
#ENDIF
;
; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN
LD HL,PPIDE_PKTCMD_RW10+3 ; START OF LBA FIELD IN CDB (MSB) LD HL,PPIDE_PKTCMD_RW10+3 ; START OF LBA FIELD IN CDB (MSB)
LD A,(IY+PPIDE_LBA+2) ; THIRD BYTE OF LBA FIELD IN CFG (MSB) LD A,(IY+PPIDE_LBA+2) ; THIRD BYTE OF LBA FIELD IN CFG (MSB)
@ -854,6 +865,13 @@ PPIDE_PKT_WRSEC:
PRTS(" PKT$") PRTS(" PKT$")
#ENDIF #ENDIF
; SETUP LBA ; SETUP LBA
;
#IF (DSKYENABLE)
LD A,PPIDE_LBA
CALL LDHLIYA
CALL HB_DSKACT ; SHOW ACTIVITY
#ENDIF
;
; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN
LD HL,PPIDE_PKTCMD_RW10+3 ; START OF LBA FIELD IN CDB (MSB) LD HL,PPIDE_PKTCMD_RW10+3 ; START OF LBA FIELD IN CDB (MSB)
LD A,(IY+PPIDE_LBA+2) ; THIRD BYTE OF LBA FIELD IN CFG (MSB) LD A,(IY+PPIDE_LBA+2) ; THIRD BYTE OF LBA FIELD IN CFG (MSB)

2
Source/HBIOS/ppp.asm

@ -689,7 +689,7 @@ PPPSD_RESET:
PPPSD_DEVICE: PPPSD_DEVICE:
LD D,DIODEV_PPPSD ; D := DEVICE TYPE LD D,DIODEV_PPPSD ; D := DEVICE TYPE
LD E,(IY+PPPSD_DEV) ; E := PHYSICAL DEVICE NUMBER LD E,(IY+PPPSD_DEV) ; E := PHYSICAL DEVICE NUMBER
LD C,%01010000 ; C := ATTRIBUTES, REMOVABLE, SD CARD
LD C,%01110010 ; C := ATTRIBUTES, REMOVABLE, SD CARD
LD H,0 ; H := 0, DRIVER HAS NO MODES LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,PPPBASE ; L := BASE I/O ADDRESS LD L,PPPBASE ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS

2
Source/HBIOS/prp.asm

@ -546,7 +546,7 @@ PRPSD_RESET:
PRPSD_DEVICE: PRPSD_DEVICE:
LD D,DIODEV_PRPSD ; D := DEVICE TYPE LD D,DIODEV_PRPSD ; D := DEVICE TYPE
LD E,(IY+PRPSD_DEV) ; E := PHYSICAL DEVICE NUMBER LD E,(IY+PRPSD_DEV) ; E := PHYSICAL DEVICE NUMBER
LD C,%01010000 ; C := ATTRIBUTES, REMOVABLE, SD CARD
LD C,%01110010 ; C := ATTRIBUTES, REMOVABLE, SD CARD
LD H,0 ; H := 0, DRIVER HAS NO MODES LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,PRP_IOBASE ; L := BASE I/O ADDRESS LD L,PRP_IOBASE ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS

2
Source/HBIOS/rf.asm

@ -178,7 +178,7 @@ RF_GEOM:
RF_DEVICE: RF_DEVICE:
LD D,DIODEV_RF ; D := DEVICE TYPE LD D,DIODEV_RF ; D := DEVICE TYPE
LD E,(IY+RF_DEV) ; E := PHYSICAL DEVICE NUMBER LD E,(IY+RF_DEV) ; E := PHYSICAL DEVICE NUMBER
LD C,%00110000 ; C := ATTRIBUTES, NON-REMOVABLE RAM FLOPPY
LD C,%00010110 ; C := ATTRIBUTES, NON-REMOVABLE RAM FLOPPY
LD H,0 ; H := 0, DRIVER HAS NO MODES LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,(IY+RF_IOAD) ; L := BASE I/O ADDRESS LD L,(IY+RF_IOAD) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS

34
Source/HBIOS/romldr.asm

@ -450,10 +450,9 @@ fp_hdboot1:
push bc ; save loop control push bc ; save loop control
ld b,BF_DIODEVICE ; HBIOS Disk Device func ld b,BF_DIODEVICE ; HBIOS Disk Device func
rst 08 ; unit in C, do it rst 08 ; unit in C, do it
bit 5,C ; high capacity disk?
pop bc ; restore loop control pop bc ; restore loop control
ld a,d ; device type to A
cp DIODEV_IDE ; type IDE or greater is HD
jr c,fp_hdboot2 ; if not, continue loop
jr z,fp_hdboot2 ; if not, continue loop
push bc ; save loop control push bc ; save loop control
ld b,BF_DIOMEDIA ; HBIOS Sense Media ld b,BF_DIOMEDIA ; HBIOS Sense Media
ld e,1 ; perform media discovery ld e,1 ; perform media discovery
@ -488,11 +487,10 @@ fp_flopboot1:
push de ; save floppy down ctr push de ; save floppy down ctr
ld b,BF_DIODEVICE ; HBIOS Disk Device func ld b,BF_DIODEVICE ; HBIOS Disk Device func
rst 08 ; unit in C, do it rst 08 ; unit in C, do it
ld a,d ; device type to A
bit 7,c ; floppy device?
pop de ; restore loop control pop de ; restore loop control
pop bc ; restore floppy down ctr pop bc ; restore floppy down ctr
cp DIODEV_FD ; type FD?
jr nz,fp_flopboot3 ; if not floppy, skip
jr z,fp_flopboot3 ; if not floppy, skip
dec e ; decrement down ctr dec e ; decrement down ctr
jr z,fp_flopboot2 ; if ctr expired, boot this unit jr z,fp_flopboot2 ; if ctr expired, boot this unit
fp_flopboot3: fp_flopboot3:
@ -1017,6 +1015,18 @@ diskboot:
cp e ; compare to count cp e ; compare to count
jp nc,err_nodisk ; handle no disk err jp nc,err_nodisk ; handle no disk err
; ;
; If non-zero slice requested, confirm device can handle it
ld a,(bootslice) ; get slice
or a ; set flags
jr z,diskboot0 ; slice 0, skip slice check
ld a,(bootunit) ; get disk unit
ld c,a ; put in C for func call
ld b,BF_DIODEVICE ; HBIOS func: device info
rst 08 ; do it
bit 5,c ; high capacity device?
jp z,err_noslice ; no such slice, handle err
;
diskboot0:
; Sense media ; Sense media
ld a,(bootunit) ; get boot disk unit ld a,(bootunit) ; get boot disk unit
ld c,a ; put in C for func call ld c,a ; put in C for func call
@ -1026,18 +1036,6 @@ diskboot:
jp nz,err_diskio ; handle error jp nz,err_diskio ; handle error
ld a,e ; media id to A ld a,e ; media id to A
ld (mediaid),a ; save media id ld (mediaid),a ; save media id
;
; If non-zero slice requested, confirm device can handle it
ld a,(bootslice) ; get slice
or a ; set flags
jr z,diskboot1 ; slice 0, skip slice check
ld a,(bootunit) ; get disk unit
ld c,a ; put in C for func call
ld b,BF_DIODEVICE ; HBIOS func: device info
rst 08 ; do it
ld a,d ; device type to A
cp DIODEV_IDE ; IDE is max slice device type
jp c,err_noslice ; no such slice, handle err
; ;
#endif #endif
; ;

2
Source/HBIOS/sd.asm

@ -928,7 +928,7 @@ SD_RESET:
SD_DEVICE: SD_DEVICE:
LD D,DIODEV_SD ; D := DEVICE TYPE LD D,DIODEV_SD ; D := DEVICE TYPE
LD E,(IY+SD_DEV) ; E := PHYSICAL DEVICE NUMBER LD E,(IY+SD_DEV) ; E := PHYSICAL DEVICE NUMBER
LD C,%01010000 ; C := ATTRIBUTES, REMOVABLE, SD CARD
LD C,%01110010 ; C := ATTRIBUTES, REMOVABLE, SD CARD
LD H,SDMODE ; H := MODE LD H,SDMODE ; H := MODE
LD L,(SD_IOBASE) ; L := BASE I/O ADDRESS LD L,(SD_IOBASE) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS

2
Source/HBIOS/syq.asm

@ -461,7 +461,7 @@ SYQ_RESET:
SYQ_DEVICE: SYQ_DEVICE:
LD D,DIODEV_SYQ ; D := DEVICE TYPE LD D,DIODEV_SYQ ; D := DEVICE TYPE
LD E,(IY+SYQ_DEV) ; E := PHYSICAL DEVICE NUMBER LD E,(IY+SYQ_DEV) ; E := PHYSICAL DEVICE NUMBER
LD C,%01000000 ; C := REMOVABLE HARD DISK
LD C,%01111001 ; C := REMOVABLE HARD DISK
LD H,(IY+SYQ_MODE) ; H := MODE LD H,(IY+SYQ_MODE) ; H := MODE
LD L,(IY+SYQ_IOBASE) ; L := BASE I/O ADDRESS LD L,(IY+SYQ_IOBASE) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS

1
Source/pSys/ReadMe.txt

@ -88,7 +88,6 @@ by CiderPress. The script is also capable of re-inserting a modified
volume back into the disk image file. This tool is available at: volume back into the disk image file. This tool is available at:
https://github.com/robosnacks/psysimg. https://github.com/robosnacks/psysimg.
There is currently no support for floppy drives. There is currently no support for floppy drives.
Wayne Warthen Wayne Warthen

2
Source/ver.inc

@ -2,7 +2,7 @@
#DEFINE RMN 3 #DEFINE RMN 3
#DEFINE RUP 0 #DEFINE RUP 0
#DEFINE RTP 0 #DEFINE RTP 0
#DEFINE BIOSVER "3.3.0-dev.25"
#DEFINE BIOSVER "3.3.0-dev.26"
#define rmj RMJ #define rmj RMJ
#define rmn RMN #define rmn RMN
#define rup RUP #define rup RUP

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 3
rup equ 0 rup equ 0
rtp equ 0 rtp equ 0
biosver macro biosver macro
db "3.3.0-dev.25"
db "3.3.0-dev.26"
endm endm

Loading…
Cancel
Save