|
|
|
@ -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 |
|
|
|
|