diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index a9850fc6..6240a81b 100644 --- a/Source/CBIOS/cbios.asm +++ b/Source/CBIOS/cbios.asm @@ -290,6 +290,7 @@ DPBMAP: .DW DPB_FD120 ; MID_FD120 .DW DPB_FD111 ; MID_FD111 .DW DPB_HDNEW ; MID_HDNEW (1024 DIR ENTRIES) + .DW DPB_ROM ; MID_MDFSH ; DPBCNT .EQU ($ - DPBMAP) / 2 ; diff --git a/Source/Doc/Architecture.md b/Source/Doc/Architecture.md index f194f9a9..572b7838 100644 --- a/Source/Doc/Architecture.md +++ b/Source/Doc/Architecture.md @@ -607,6 +607,8 @@ MID\_FD144 | 6 | 3.5" 1.44M Floppy MID\_FD360 | 7 | 5.25" 360K Floppy MID\_FD120 | 8 | 5.25" 1.2M Floppy MID\_FD111 | 9 | 8" 1.11M Floppy +MID\_HDNEW | 10 | Hard Disk with 1024 Directory entries +MID\_MDFSH | 11 | FLASH Drive ### Function 0x10 -- Disk Status (DIOSTATUS) @@ -765,9 +767,9 @@ Bit 7: 1=Floppy, 0=Hard Disk (or similar, e.g. CF, SD, RAM) | Bits 1-0: Reserved | If Hard Disk: -| Bit 6: Removable\ +| Bit 6: Removable | Bits: 5-3: Type (0=Hard, 1=CF, 2=SD, 3=USB, -| 4=ROM, 5=RAM, 6=RAMF, 7=Reserved) +| 4=ROM, 5=RAM, 6=RAMF, 7=FLASH) | Bits 2-0: Reserved Each disk device is handled by an appropriate driver (IDE, SD, diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index 2457bc9c..95f08bf8 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -148,6 +148,7 @@ MID_FD360 .EQU 7 MID_FD120 .EQU 8 MID_FD111 .EQU 9 MID_HDNEW .EQU 10 +MID_MDFSH .EQU 11 ; ; CHAR DEVICE IDS ; diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index b3fb5180..3538832a 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -5,6 +5,13 @@ ; ; MD DEVICE CONFIGURATION ; +; +; DISK DEVICE TYPE ID MEDIA ID ATTRIBUTE +;-------------------------------------------------------------------------------------------------- +; 0x00 MEMORY DISK 0x02 RAM DRIVE %00101000 HD STYLE, NON-REMOVABLE, TYPE-RAM +; 0x00 MEMORY DISK 0x01 ROM DRIVE %00100000 HD STYLE, NON-REMOVABLE, TYPE-ROM +; 0x00 MEMORY DISK 0x0B FLASH DRIVE %00111000 HD STYLE, NON-REMOVABLE, TYPE-FLASH +; MD_DEVCNT .EQU 2 ; NUMBER OF MD DEVICES SUPPORTED MD_CFGSIZ .EQU 8 ; SIZE OF CFG TBL ENTRIES ; @@ -18,8 +25,6 @@ MD_AROM .EQU %00100000 ; ROM ATTRIBUTE MD_ARAM .EQU %00101000 ; RAM ATTRIBUTE MD_AFSH .EQU %00111000 ; FLASH ATTRIBUTE ; -MID_MDFS .EQU 10 ; REWRITEABLE FLASH MEDIA -; ; DEVICE CONFIG TABLE (RAM DEVICE FIRST TO MAKE IT ALWAYS FIRST DRIVE) ; MD_CFGTBL: @@ -59,19 +64,22 @@ MD_INIT: ; ; SETUP THE DIO TABLE ENTRIES ; + LD A,(FF_RW) ; IF FLASH + OR A ; FILESYSTEM + JR NZ,MD_IN1 ; CAPABLE, + LD A,MID_MDFSH ; UPDATE ROM DIO + LD (MD_CFGTBL + MD_CFGSIZ + MD_MID),A + LD A,MD_AFSH + LD (MD_CFGTBL + MD_CFGSIZ + MD_ATTRIB),A +MD_IN1: LD BC,MD_FNTBL LD DE,MD_CFGTBL PUSH BC - CALL DIO_ADDENT + CALL DIO_ADDENT ; ADD FIRST ENTRY POP BC -;#IF (FFENABLE) ; IF FLASH -; LD A,(FF_RW) ; FILESYSTEM -; OR A ; ENABLED SKIP -; JR Z,MD_IN1 ; ROM DISK -;#ENDIF LD DE,MD_CFGTBL + MD_CFGSIZ - CALL DIO_ADDENT -MD_IN1: + CALL DIO_ADDENT ; ADD SECOND ENTRY + XOR A ; INIT SUCCEEDED RET ; RETURN ; @@ -216,9 +224,12 @@ MD_WRITE: CALL HB_DSKWRITE ; HOOK HBIOS DISK WRITE SUPERVISOR LD BC,MD_WRSEC ; GET ADR OF SECTOR WRITE FUNC LD (MD_RWFNADR),BC ; SAVE IT AS PENDING IO FUNC - LD A,(IY+MD_DEV) ; GET DEVICE NUMBER - OR A ; SET FLAGS TO TEST FOR ROM (UNIT 0) - JR NZ,MD_RW ; NOT ROM, SO OK TO WRITE, CONTINUE +; LD A,(IY+MD_DEV) ; GET DEVICE NUMBER +; OR A ; SET FLAGS TO TEST FOR ROM (UNIT 0) +; JR NZ,MD_RW ; NOT ROM, SO OK TO WRITE, CONTINUE + LD A,(IY+MD_MID ) ; IF THE DEVICES MEDIA + CP MID_MDROM ; IS NOT ROM THEN WE CAN + JR NZ,MD_RW ; WRITE TO IT LD E,0 ; UNIT IS READ ONLY, ZERO SECTORS WRITTEN LD A,ERR_READONLY ; SIGNAL ERROR OR A ; SET FLAGS @@ -500,9 +511,9 @@ FF_PROBE: LD A,(FF_RW) ; R/W FLAG TO R/O OR H OR L - LD (FF_RW),A - POP DE - POP HL + LD (FF_RW),A ; A NON ZERO VALUE + POP DE ; MEANS WE CAN'T + POP HL ; ENABLE FLASH WRITING ; CALL FF_LAND ; LOOKUP AND DISPLAY POP BC