diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index b2ef5838..cc4f2d11 100644 Binary files a/Doc/RomWBW Applications.pdf and b/Doc/RomWBW Applications.pdf differ diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index 57c8e120..750d3a32 100644 Binary files a/Doc/RomWBW Disk Catalog.pdf and b/Doc/RomWBW Disk Catalog.pdf differ diff --git a/Doc/RomWBW Errata.pdf b/Doc/RomWBW Errata.pdf index eb27ebc8..a33d9da4 100644 Binary files a/Doc/RomWBW Errata.pdf and b/Doc/RomWBW Errata.pdf differ diff --git a/Doc/RomWBW ROM Applications.pdf b/Doc/RomWBW ROM Applications.pdf index 4df079e7..7c58dbeb 100644 Binary files a/Doc/RomWBW ROM Applications.pdf and b/Doc/RomWBW ROM Applications.pdf differ diff --git a/Doc/RomWBW System Guide.pdf b/Doc/RomWBW System Guide.pdf index bcf9d302..5cab0d79 100644 Binary files a/Doc/RomWBW System Guide.pdf and b/Doc/RomWBW System Guide.pdf differ diff --git a/Doc/RomWBW User Guide.pdf b/Doc/RomWBW User Guide.pdf index e390f459..da0be1a5 100644 Binary files a/Doc/RomWBW User Guide.pdf and b/Doc/RomWBW User Guide.pdf differ diff --git a/ReadMe.md b/ReadMe.md index 1af8654c..dd9e1917 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,7 +3,7 @@ **RomWBW ReadMe** \ Version 3.3 \ Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ -06 Jun 2023 +20 Jun 2023 # Overview @@ -183,6 +183,10 @@ let me know if I missed you! - 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. # Licensing diff --git a/ReadMe.txt b/ReadMe.txt index 47d25c02..36fea024 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,6 +1,6 @@ RomWBW ReadMe 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. +- 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. diff --git a/Source/Apps/assign.asm b/Source/Apps/assign.asm index 728ed868..33fe5937 100644 --- a/Source/Apps/assign.asm +++ b/Source/Apps/assign.asm @@ -30,11 +30,11 @@ ; 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 ; Use CPM3 BDOS direct BIOS call to get DRVTBL adr +; 2023-06-19 [WBW] Update for revised DIODEVICE API ;_______________________________________________________________________________ ; ; 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 ld b,$17 ; hbios func: diodevice 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 - 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 ret ; @@ -1943,10 +1942,10 @@ stack .equ $ ; stack top ; Messages ; 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 msg3 .db "3",0 -msbban2 .db ", 28-Feb-2022",0 +msbban2 .db ", 16-Jun-2023",0 msghb .db " (HBIOS Mode)",0 msgub .db " (UBIOS Mode)",0 msgban3 .db "Copyright 2021, Wayne Warthen, GNU GPL v3",0 diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index 9d5f395f..2a5ec79f 100644 --- a/Source/CBIOS/cbios.asm +++ b/Source/CBIOS/cbios.asm @@ -2291,8 +2291,8 @@ INIT2: LD C,(HL) ; PUT UNIT NUM IN C RST 08 ; CALL HBIOS 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 ; ; CHECK IF SECOND UNIT IS ROM OR FLASH @@ -2303,10 +2303,10 @@ INIT2: 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? + AND %10001111 ; ISOLATE TYPE BITS + CP %00000100 ; NOT FLOPPY, TYPE = ROM? 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 ; INIT2A: @@ -2904,61 +2904,51 @@ DRV_INIT: LD HL,DRVLST ; INIT HL PTR TO DRIVE LIST ; DRV_INIT2: + PUSH BC ; SAVE LOOP CNT & UNIT CALL DRV_INIT3 ; CHECK DRIVE + POP BC ; RECOVER LOOP CNT & UNIT INC C ; NEXT UNIT 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 JR DRV_INIT4 ; CONTINUE ; DRV_INIT3: + ; GET DEVICE ATTRIBUTES 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 + LD A,C ; DEVICE ATTRIBUTES TO A POP BC ; RESTORE LOOP CONTROL POP HL ; RESTORE DRIVE LIST PTR 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 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 - + RST 08 ; DO IT POP BC ; RESTORE LOOP CONTROL POP HL ; RESTORE DRIVE LIST PTR 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 INC HL ; BUMP PTR INC D ; INC TOTAL DEVICE COUNT + BIT 5,B ; HIGH CAPACITY? + RET Z ; DONE IF NOT INC E ; INCREMENT HARD DISK COUNT - RET ; AND RETURN + RET ; DONE ; DRV_INIT4: ; SET SLICES PER VOLUME (HDSPV) BASED ON HARD DISK VOLUME COUNT 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 PUSH BC ; PRESERVE LOOP CONTROL 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 PUSH BC ; RESAVE LOOP CONTROL CALL DRV_INIT7 ; MAKE DRIVE MAP ENTRY(S) @@ -3001,10 +2992,9 @@ DRV_INIT6: ; LOOP THRU ALL UNITS AVAILABLE DRV_INIT7: ; PROCESS UNIT LD E,0 ; INITIALIZE SLICE INDEX LD B,1 ; DEFAULT LOOP COUNTER - LD A,D ; DEVICE TYPE TO ACCUM 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 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 BOOTVOL .DW 0 ; BOOT VOLUME, MSB=BOOT UNIT, LSB=BOOT SLICE 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 ; #IFDEF PLTWBW diff --git a/Source/CPM3/boot.z80 b/Source/CPM3/boot.z80 index fdb86aa3..d2b74d0f 100644 --- a/Source/CPM3/boot.z80 +++ b/Source/CPM3/boot.z80 @@ -156,7 +156,9 @@ dinit: ld hl,drvlst ; init hl ptr to drive list ; dinit2: + push bc ; save loop cnt & unit call dinit3 ; check drive + pop bc ; recover loop cnt & unit inc c ; next unit djnz dinit2 ; loop ld a,d ; total device count to d @@ -169,48 +171,35 @@ dinit3: push bc ; save loop control ld b,17h ; hbios func: report device info 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 hl ; restore drive list ptr 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 hl ; save drive list ptr push bc ; save loop control - ld b,18h ; hbios func: sense media ld e,1 ; perform media discovery - rst 08 - + rst 08 ; do it pop bc ; restore loop control pop hl ; restore drive list ptr 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 inc hl ; bump ptr inc d ; inc total device count + bit 5,b ; high capacity? + ret z ; done if not inc e ; increment hard disk count - ret ; and return + ret ; done dinit4: ; set slices per volume (hdspv) based on hard disk volume count ld a,e ; hard disk volume count to a @@ -247,7 +236,8 @@ dinit6: push bc ; preserve loop control push hl ; preserve dph pointer 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 bc ; get unit index back in c push bc ; resave loop control @@ -262,10 +252,9 @@ dinit6: dinit7: ; process a unit (all slices) ld e,0 ; initialize slice index ld b,1 ; default loop counter - ld a,d ; device type to accum 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 b,a ; move to b for loop counter diff --git a/Source/Doc/ReadMe.md b/Source/Doc/ReadMe.md index d62fe67f..656fceaf 100644 --- a/Source/Doc/ReadMe.md +++ b/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. +* 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. # Licensing diff --git a/Source/Doc/SystemGuide.md b/Source/Doc/SystemGuide.md index 687ddccf..4250d8f8 100644 --- a/Source/Doc/SystemGuide.md +++ b/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 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** | |---------:|--------------------------------------------------| -| 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** | |---------:|--------------------------------------------------| -| 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 specified Disk Unit (C). Values are listed at the start of this diff --git a/Source/Doc/UserGuide.md b/Source/Doc/UserGuide.md index 78378edb..e34d7ab8 100644 --- a/Source/Doc/UserGuide.md +++ b/Source/Doc/UserGuide.md @@ -2213,18 +2213,23 @@ file which is bootable. output will be garbled if no such terminal or emulator 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 can be read and modified by CiderPress. CiderPress is able 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 + . + ## FreeRTOS Phillip Stevens has ported FreeRTOS to run under RomWBW. FreeRTOS is 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). 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` +# 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 . + +## Paleo Editor + +Steve Garcia has created a Windows-hosted IDE that is tailored to +development of RomWBW. The project can be found at +. + +## 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 . + +## 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 +. + +## 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 +. + # Acknowledgments 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. +* 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. # Licensing diff --git a/Source/HBIOS/fd.asm b/Source/HBIOS/fd.asm index 2ffa4755..55b782fc 100644 --- a/Source/HBIOS/fd.asm +++ b/Source/HBIOS/fd.asm @@ -231,12 +231,12 @@ FDMM_8 .DB FDM111, $FF ; FDT_ VALUES DEFINED IN STD.ASM ; 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 ; diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 6dce028d..56e50427 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -6744,7 +6744,7 @@ PS_DISK: ; ; DEVICE COLUMN 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 LD HL,PS_DDMD ; POINT TO DISK DEVICE TYPE NAME TABLE CALL PS_PRTDEV ; PRINT DISK DEVICE NMEMONIC PADDED TO FIELD WIDTH @@ -6768,7 +6768,7 @@ PS_PRTDT: LD C,E LD DE,PS_DTHARD - LD A,00111000B + LD A,00001111B CALL PRTIDXMSK CALL PS_PAD18 ; PAD TO 18 SPACES RET @@ -6780,10 +6780,7 @@ PS_PRTDC: LD A,E ; ATTRIBUTE TO ACCUM BIT 7,A ; TEST FOR FLOPPY JR NZ,PS_PRTDC2 ; HANDLE FLOPPY - RRCA ; ISOLATE TYPE BITS - RRCA - RRCA - AND $07 + AND $0F ; ISOLATE TYPE BITS CP 4 ; ROM DISK? JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB CP 5 ; RAM DISK? @@ -6821,15 +6818,15 @@ PS_PRTDC1: PS_PRTDC2: 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 CALL PRTIDXMSK ; BITS 5 AND 6. ; - LD A,00010000B ; DISPLAY SIDES + LD A,%00000100 ; DISPLAY SIDES LD DE,PS_FLP_SSTR ; WHICH IS DEFINED CALL PRTIDXMSK ; IN BIT 4 ; - LD A,00001100B ; DISPLAY DENSITY + LD A,%00000011 ; DISPLAY DENSITY LD DE,PS_FLP_DSTR ; WHICH IS DEFINED IN CALL PRTIDXMSK ; BITS 2 AND 3. ; @@ -7183,6 +7180,8 @@ PS_DTROM .TEXT "ROM Disk$" PS_DTRAM .TEXT "RAM Disk$" PS_DTRF .TEXT "RAM Floppy$" PS_DTFSH .TEXT "Flash Drive$" +PS_DTCD .TEXT "CD-ROM$" +PS_DTCRT .TEXT "Cartridge$" PS_DTOTHER .TEXT "???$" ; ; FLOPPY ATTRIBUTE STRINGS diff --git a/Source/HBIOS/hdsk.asm b/Source/HBIOS/hdsk.asm index 172595a6..4076fb78 100644 --- a/Source/HBIOS/hdsk.asm +++ b/Source/HBIOS/hdsk.asm @@ -166,7 +166,7 @@ HDSK_GEOM: HDSK_DEVICE: LD D,DIODEV_HDSK ; D := DEVICE TYPE 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 L,HDSK_IO ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS diff --git a/Source/HBIOS/ide.asm b/Source/HBIOS/ide.asm index 5b944de6..a1fe1e9e 100644 --- a/Source/HBIOS/ide.asm +++ b/Source/HBIOS/ide.asm @@ -566,10 +566,14 @@ IDE_STATUS: IDE_DEVICE: LD D,DIODEV_IDE ; D := DEVICE TYPE 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 - 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: LD H,(IY+IDE_MODE) ; H := MODE LD L,(IY+IDE_IOBASE) ; L := BASE I/O ADDRESS @@ -788,6 +792,13 @@ IDE_PKT_RDSEC: PRTS(" PKT$") #ENDIF ; SETUP LBA +; +#IF (DSKYENABLE) + LD A,IDE_LBA + CALL LDHLIYA + CALL HB_DSKACT ; SHOW ACTIVITY +#ENDIF +; ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN 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) @@ -848,6 +859,13 @@ IDE_PKT_WRSEC: PRTS(" PKT$") #ENDIF ; SETUP LBA +; +#IF (DSKYENABLE) + LD A,IDE_LBA + CALL LDHLIYA + CALL HB_DSKACT ; SHOW ACTIVITY +#ENDIF +; ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN 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) diff --git a/Source/HBIOS/imm.asm b/Source/HBIOS/imm.asm index c104b66a..2f5b457d 100644 --- a/Source/HBIOS/imm.asm +++ b/Source/HBIOS/imm.asm @@ -405,7 +405,7 @@ IMM_RESET: IMM_DEVICE: LD D,DIODEV_IMM ; D := DEVICE TYPE 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 L,(IY+IMM_IOBASE) ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index 8277468e..2ada547a 100644 --- a/Source/HBIOS/md.asm +++ b/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_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_FVBS .EQU 1 ; FLASH VERBOSE OUTPUT diff --git a/Source/HBIOS/ppa.asm b/Source/HBIOS/ppa.asm index 5b7c370e..c9da8303 100644 --- a/Source/HBIOS/ppa.asm +++ b/Source/HBIOS/ppa.asm @@ -402,7 +402,7 @@ PPA_RESET: PPA_DEVICE: LD D,DIODEV_PPA ; D := DEVICE TYPE 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 L,(IY+PPA_IOBASE) ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS diff --git a/Source/HBIOS/ppide.asm b/Source/HBIOS/ppide.asm index f37cac09..acf13295 100644 --- a/Source/HBIOS/ppide.asm +++ b/Source/HBIOS/ppide.asm @@ -572,10 +572,14 @@ PPIDE_STATUS: PPIDE_DEVICE: LD D,DIODEV_PPIDE ; D := DEVICE TYPE 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 - 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: LD H,0 ; H := 0, DRIVER HAS NO MODES LD L,(IY+PPIDE_DATALO) ; L := BASE I/O ADDRESS @@ -794,6 +798,13 @@ PPIDE_PKT_RDSEC: PRTS(" PKT$") #ENDIF ; SETUP LBA +; +#IF (DSKYENABLE) + LD A,PPIDE_LBA + CALL LDHLIYA + CALL HB_DSKACT ; SHOW ACTIVITY +#ENDIF +; ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN 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) @@ -854,6 +865,13 @@ PPIDE_PKT_WRSEC: PRTS(" PKT$") #ENDIF ; SETUP LBA +; +#IF (DSKYENABLE) + LD A,PPIDE_LBA + CALL LDHLIYA + CALL HB_DSKACT ; SHOW ACTIVITY +#ENDIF +; ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN 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) diff --git a/Source/HBIOS/ppp.asm b/Source/HBIOS/ppp.asm index ac61f866..25f11e5b 100644 --- a/Source/HBIOS/ppp.asm +++ b/Source/HBIOS/ppp.asm @@ -689,7 +689,7 @@ PPPSD_RESET: PPPSD_DEVICE: LD D,DIODEV_PPPSD ; D := DEVICE TYPE 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 L,PPPBASE ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS diff --git a/Source/HBIOS/prp.asm b/Source/HBIOS/prp.asm index f34c6cf9..960895dc 100644 --- a/Source/HBIOS/prp.asm +++ b/Source/HBIOS/prp.asm @@ -546,7 +546,7 @@ PRPSD_RESET: PRPSD_DEVICE: LD D,DIODEV_PRPSD ; D := DEVICE TYPE 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 L,PRP_IOBASE ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS diff --git a/Source/HBIOS/rf.asm b/Source/HBIOS/rf.asm index 17aa5305..8af08c78 100644 --- a/Source/HBIOS/rf.asm +++ b/Source/HBIOS/rf.asm @@ -178,7 +178,7 @@ RF_GEOM: RF_DEVICE: LD D,DIODEV_RF ; D := DEVICE TYPE 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 L,(IY+RF_IOAD) ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 5cd47951..380340e9 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -450,10 +450,9 @@ fp_hdboot1: push bc ; save loop control ld b,BF_DIODEVICE ; HBIOS Disk Device func rst 08 ; unit in C, do it + bit 5,C ; high capacity disk? 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 ld b,BF_DIOMEDIA ; HBIOS Sense Media ld e,1 ; perform media discovery @@ -488,11 +487,10 @@ fp_flopboot1: push de ; save floppy down ctr ld b,BF_DIODEVICE ; HBIOS Disk Device func 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 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 jr z,fp_flopboot2 ; if ctr expired, boot this unit fp_flopboot3: @@ -1017,6 +1015,18 @@ diskboot: cp e ; compare to count 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 ld a,(bootunit) ; get boot disk unit ld c,a ; put in C for func call @@ -1026,18 +1036,6 @@ diskboot: jp nz,err_diskio ; handle error ld a,e ; media id to A 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 ; diff --git a/Source/HBIOS/sd.asm b/Source/HBIOS/sd.asm index 3d75063b..39b44d90 100644 --- a/Source/HBIOS/sd.asm +++ b/Source/HBIOS/sd.asm @@ -928,7 +928,7 @@ SD_RESET: SD_DEVICE: LD D,DIODEV_SD ; D := DEVICE TYPE 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 L,(SD_IOBASE) ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS diff --git a/Source/HBIOS/syq.asm b/Source/HBIOS/syq.asm index 8fd81a79..8350d915 100644 --- a/Source/HBIOS/syq.asm +++ b/Source/HBIOS/syq.asm @@ -461,7 +461,7 @@ SYQ_RESET: SYQ_DEVICE: LD D,DIODEV_SYQ ; D := DEVICE TYPE 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 L,(IY+SYQ_IOBASE) ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS diff --git a/Source/pSys/ReadMe.txt b/Source/pSys/ReadMe.txt index 749a38ed..ad6bd7e3 100644 --- a/Source/pSys/ReadMe.txt +++ b/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: https://github.com/robosnacks/psysimg. - There is currently no support for floppy drives. Wayne Warthen diff --git a/Source/ver.inc b/Source/ver.inc index 178650d6..af20d72b 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 3 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.3.0-dev.25" +#DEFINE BIOSVER "3.3.0-dev.26" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 2333361d..99efa83e 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 3 rup equ 0 rtp equ 0 biosver macro - db "3.3.0-dev.25" + db "3.3.0-dev.26" endm