mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Changed the Attribute for MD RF devices reordering/fliping (RF<->Flash) so bit masks are easier
This commit is contained in:
@@ -614,17 +614,11 @@ bootdra:
|
||||
; Note: if MDFFENABLE is enabled, this wont select the ROM since the
|
||||
; driver returns MD_AFSH (%00010111), and we cannot generalise this mask
|
||||
bootdro:
|
||||
ld a,$FF ; specific mask to include all BITS
|
||||
ld a,%11111101 ; ROM mask, excluding Bit 1, which varies
|
||||
ld (atrmask),a ; mask for device attributes
|
||||
ld a,%00010100 ; specific mask for ROM drive. "MD_AROM"
|
||||
ld a,%00010100 ; for values "MD_AROM", "MD_AFSH"; Att="000101x0"
|
||||
ld (atrcomp),a ; compare to after mask
|
||||
call bootadds ; do single slice assignment
|
||||
; possible workaround below, not elegant. other woraround is to have a specific option for this code
|
||||
; Better option is change the definitions for device attribute media types to
|
||||
; 4=ROM, 5=RAM, 6=FLASH, 7=RAMF, (6,7 swapped) so much easir to mask RAM/ROM as only 1 bit difference
|
||||
; ld a,%00010111 ; specific mask for ROM drive. "MD_AFSH"
|
||||
; ld (atrcomp),a ; compare to after mask
|
||||
; call bootadds ; do single slice assignment
|
||||
ret ; Finished, returning error
|
||||
;
|
||||
; FLOPPY DRIVE(S)
|
||||
|
||||
@@ -2343,10 +2343,8 @@ INIT2:
|
||||
LD C,(HL) ; PUT UNIT NUM IN C
|
||||
RST 08 ; CALL HBIOS
|
||||
LD A,C ; GET ATTRIBUTES
|
||||
AND %10001111 ; ISOLATE TYPE BITS
|
||||
CP %00000100 ; NOT FLOPPY, TYPE = ROM?
|
||||
JR Z,INIT2A ; IF SO, ADJUST DEF DRIVE
|
||||
CP %00000111 ; NOT FLOPPY, TYPE = FLASH?
|
||||
AND %10001101 ; ISOLATE TYPE BITS, NOT FLOPPY
|
||||
CP %00000100 ; TYPE=ROM/FLASH ; Att="0xxx01x0"
|
||||
JR NZ,INIT2X ; IF NOT THEN DONE
|
||||
;
|
||||
INIT2A:
|
||||
|
||||
@@ -1162,7 +1162,7 @@ The non-Floppy specific bits are:
|
||||
|---------:|--------------------------------------------------|
|
||||
| 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, |
|
||||
| | 4=ROM, 5=RAM, 6=FLASH, 7=RAMF, 8=CD-ROM, |
|
||||
| | 9=Cartridge |
|
||||
|
||||
Device Type (D) indicates the specific hardware driver that handles the
|
||||
|
||||
@@ -8701,8 +8701,8 @@ PS_DTSD .TEXT "SD Card$"
|
||||
PS_DTUSB .TEXT "USB Drive$"
|
||||
PS_DTROM .TEXT "ROM Disk$"
|
||||
PS_DTRAM .TEXT "RAM Disk$"
|
||||
PS_DTFSH .TEXT "Flash ROM"
|
||||
PS_DTRF .TEXT "RAM Floppy$"
|
||||
PS_DTFSH .TEXT "Flash Drive$"
|
||||
PS_DTCD .TEXT "CD-ROM$"
|
||||
PS_DTCRT .TEXT "Cartridge$"
|
||||
PS_DTOTHER .TEXT "???$"
|
||||
|
||||
@@ -23,7 +23,7 @@ MD_ATTRIB .EQU 7 ; OFFSET OF ATTRIBUTE (BYTE)
|
||||
;
|
||||
MD_AROM .EQU %00010100 ; ROM ATTRIBUTE
|
||||
MD_ARAM .EQU %00010101 ; RAM ATTRIBUTE
|
||||
MD_AFSH .EQU %00010111 ; FLASH ATTRIBUTE
|
||||
MD_AFSH .EQU %00010110 ; FLASH ATTRIBUTE
|
||||
;
|
||||
MD_FDBG .EQU 0 ; FLASH DEBUG CODE
|
||||
MD_FVBS .EQU 1 ; FLASH VERBOSE OUTPUT
|
||||
@@ -109,9 +109,9 @@ MD_INIT:
|
||||
; SETUP THE DIO TABLE ENTRIES
|
||||
;
|
||||
#IF (MDROM & MDFFENABLE)
|
||||
LD A,(MD_FFSEN) ; IF FLASH
|
||||
OR A ; FILESYSTEM
|
||||
JR NZ,MD_INIT1 ; CAPABLE,
|
||||
LD A,(MD_FFSEN) ; IF FLASH
|
||||
OR A ; FILESYSTEM
|
||||
JR NZ,MD_INIT1 ; CAPABLE,
|
||||
LD A,MD_AFSH ; UPDATE ROM DIO
|
||||
LD (MD_CFGTBL + MD_CFGSIZ + MD_ATTRIB),A
|
||||
MD_INIT1:
|
||||
@@ -177,7 +177,7 @@ MD_RESET:
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
MD_CAP: ; ASSUMES THAT UNIT 0 IS RAM, UNIT 1 IS ROM
|
||||
LD A,(IY+MD_DEV) ; GET DEVICE NUMBER
|
||||
OR A ; SET FLAGS
|
||||
@@ -259,7 +259,7 @@ MD_READ:
|
||||
;
|
||||
#IF (MDFFENABLE)
|
||||
LD A,(IY+MD_ATTRIB) ; GET ADR OF SECTOR READ FUNC
|
||||
LD BC,MD_RDSECF ;
|
||||
LD BC,MD_RDSECF ;
|
||||
CP MD_AFSH ; RAM / ROM = MD_RDSEC
|
||||
JR Z,MD_RD1 ; FLASH = MD_RDSECF
|
||||
#ENDIF
|
||||
@@ -275,7 +275,7 @@ MD_WRITE:
|
||||
;
|
||||
#IF (MDFFENABLE)
|
||||
LD A,(IY+MD_ATTRIB) ; GET ADR OF SECTOR WRITE FUNC
|
||||
LD BC,MD_WRSECF ;
|
||||
LD BC,MD_WRSECF ;
|
||||
CP MD_AFSH ; RAM / ROM = MD_WRSEC
|
||||
JR Z,MD_WR1 ; FLASH = MD_WRSECF
|
||||
#ENDIF
|
||||
@@ -371,7 +371,7 @@ MD_SECM:
|
||||
LD D,A ; FROM THE START
|
||||
LD E,0
|
||||
;
|
||||
LD HL,MD_F4KBUF ; POINT TO THE SECTOR WE
|
||||
LD HL,MD_F4KBUF ; POINT TO THE SECTOR WE
|
||||
ADD HL,DE ; WANT TO COPY
|
||||
LD DE,(MD_DSKBUF)
|
||||
;
|
||||
@@ -385,7 +385,7 @@ MD_SECM:
|
||||
JP DMALDIR ; 4K SECTOR TO THE DISK BUFFER
|
||||
#ENDIF
|
||||
MD_NODMA:
|
||||
#IF (!(DMAENABLE & (DMAMODE!=DMAMODE_NONE)))
|
||||
#IF (!(DMAENABLE & (DMAMODE!=DMAMODE_NONE)))
|
||||
LD BC,512 ; COPY ONE 512B SECTOR FROM THE
|
||||
LDIR ; 4K SECTOR TO THE DISK BUFFER
|
||||
XOR A
|
||||
@@ -407,7 +407,7 @@ MD_NODMA:
|
||||
;
|
||||
MD_IOSETUPF:
|
||||
LD L,(IY+MD_LBA+0) ; HL := LOW WORD OF LBA
|
||||
LD H,(IY+MD_LBA+1)
|
||||
LD H,(IY+MD_LBA+1)
|
||||
INC H ; SKIP FIRST 128MB (256 SECTORS)
|
||||
;
|
||||
LD A,L ; SAVE LBA 4K
|
||||
@@ -421,7 +421,7 @@ MD_IOSETUPF:
|
||||
LD L,D ; DE:HL = HLX512
|
||||
SLA H
|
||||
RL E
|
||||
RL D
|
||||
RL D
|
||||
;
|
||||
RET
|
||||
;
|
||||
@@ -443,7 +443,7 @@ MD_CALBAS:
|
||||
;
|
||||
#IF (MD_FDBG==1)
|
||||
CALL PC_SPACE ; DISPLAY SECTOR
|
||||
CALL PRTHEX32 ; SECTOR ADDRESS
|
||||
CALL PRTHEX32 ; SECTOR ADDRESS
|
||||
CALL PC_SPACE ; IN DE:HL
|
||||
#ENDIF
|
||||
;
|
||||
@@ -478,7 +478,7 @@ MD_WRSECF: ; CALLED FROM MD_RW
|
||||
PUSH HL ; IS THE SECTOR
|
||||
LD HL,(MD_LBA4K) ; WE WANT TO
|
||||
XOR A ; WRITE ALREADY
|
||||
SBC HL,BC ; IN THE 4K
|
||||
SBC HL,BC ; IN THE 4K
|
||||
POP HL ; BLOCK WE HAVE
|
||||
JR Z,MD_SECM1 ; IN THE BUFFER
|
||||
;
|
||||
@@ -504,7 +504,7 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER
|
||||
LD D,A ; FROM THE START
|
||||
LD E,0
|
||||
;
|
||||
LD HL,MD_F4KBUF ; POINT TO THE SECTOR WE
|
||||
LD HL,MD_F4KBUF ; POINT TO THE SECTOR WE
|
||||
ADD HL,DE ; WANT TO COPY
|
||||
EX DE,HL
|
||||
;
|
||||
@@ -562,7 +562,7 @@ MD_LBA4K .DW $FFFF ; LBA OF CURRENT SECTOR
|
||||
MD_FBAS .DW $FFFF ; BANK AND SECTOR
|
||||
#ENDIF
|
||||
;
|
||||
; READ RAM / ROM
|
||||
; READ RAM / ROM
|
||||
;
|
||||
MD_RDSEC:
|
||||
CALL MD_IOSETUP ; SETUP FOR MEMORY COPY
|
||||
@@ -744,7 +744,7 @@ MDSTR_LEN .TEXT "LEN=$"
|
||||
; FLASH DRIVERS
|
||||
;==================================================================================================
|
||||
;
|
||||
; UPPER RAM BANK IS ALWAYS AVAILABLE REGARDLESS OF MEMORY BANK SELECTION.
|
||||
; UPPER RAM BANK IS ALWAYS AVAILABLE REGARDLESS OF MEMORY BANK SELECTION.
|
||||
; HBX_BNKSEL AND HB_CURBNK ARE ALWAYS AVAILABLE IN UPPER MEMORY.
|
||||
;
|
||||
; THE STACK IS IN UPPER MEMORY DURING BIOS INITIALIZATION BUT IS IN LOWER
|
||||
@@ -754,7 +754,7 @@ MDSTR_LEN .TEXT "LEN=$"
|
||||
; AND THE FLASH CHIP IS SWITCHED INTO THE LOWER BANK.
|
||||
;
|
||||
; EACH FLASH ROUTINE MUST FIT INTO TO THE HBX_BUF, INCLUDING IT'S LOCAL STACK WHICH
|
||||
; IS REQUIRED FOR CALLING THE BANK SWITCH ROUTINES.
|
||||
; IS REQUIRED FOR CALLING THE BANK SWITCH ROUTINES.
|
||||
;
|
||||
; INSPIRED BY WILL SOWERBUTTS FLASH4 UTILITY - https://github.com/willsowerbutts/flash4/
|
||||
;
|
||||
@@ -775,7 +775,7 @@ MD_FINIT:
|
||||
CALL MD_CALCU ; DISPLAY
|
||||
;
|
||||
#IF (MD_FVBS==1)
|
||||
CALL NEWLINE ; OF UNITS
|
||||
CALL NEWLINE ; OF UNITS
|
||||
PRTS("MD: FLASH=$")
|
||||
CALL PRTDECB ; CONFIGURED FOR.
|
||||
#ENDIF
|
||||
@@ -786,14 +786,14 @@ MD_PROBE:
|
||||
LD E,C ;
|
||||
LD H,D ; WE INCREASE E BY $08
|
||||
LD L,D ; ON EACH CYCLE THROUGH
|
||||
;
|
||||
;
|
||||
PUSH BC
|
||||
#IF (MD_FVBS==1)
|
||||
CALL PC_SPACE
|
||||
CALL MD_CALCU
|
||||
INC A
|
||||
SUB B ; PRINT
|
||||
CALL PRTDECB ; DEVICE
|
||||
CALL PRTDECB ; DEVICE
|
||||
LD A,'=' ; NUMBER
|
||||
CALL COUT
|
||||
#ENDIF
|
||||
@@ -872,7 +872,7 @@ MD_NXT1:
|
||||
CP C
|
||||
JR NZ,MD_NXT0 ; FIRST BYTE DOES NOT MATCH
|
||||
;
|
||||
INC HL
|
||||
INC HL
|
||||
LD A,(HL)
|
||||
CP B
|
||||
DEC HL
|
||||
@@ -903,18 +903,18 @@ MD_NXT2:
|
||||
;======================================================================
|
||||
; COMMON FUNCTION CALL FOR:
|
||||
;
|
||||
; MD_FIDEN_R - IDENTIFY FLASH CHIP
|
||||
; MD_FIDEN_R - IDENTIFY FLASH CHIP
|
||||
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED
|
||||
; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED
|
||||
; ON EXIT BC CONTAINS THE CHIP ID BYTES.
|
||||
; A NO STATUS IS RETURNED
|
||||
; A NO STATUS IS RETURNED
|
||||
;
|
||||
; MD_FERAS_R - ERASE FLASH SECTOR
|
||||
; MD_FERAS_R - ERASE FLASH SECTOR
|
||||
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED
|
||||
; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED
|
||||
; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL
|
||||
;
|
||||
; MD_FREAD_R - READ FLASH SECTOR
|
||||
; MD_FREAD_R - READ FLASH SECTOR
|
||||
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED
|
||||
; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED
|
||||
; IX POINTS TO WHERE TO SAVE DATA
|
||||
@@ -926,7 +926,7 @@ MD_NXT2:
|
||||
; IX POINTS TO DATA TO COMPARE.
|
||||
; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL
|
||||
;
|
||||
; MD_FWRIT_R - WRITE FLASH SECTOR
|
||||
; MD_FWRIT_R - WRITE FLASH SECTOR
|
||||
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED
|
||||
; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED
|
||||
; IX POINTS TO DATA TO BE WRITTEN
|
||||
@@ -979,7 +979,7 @@ MD_FNCALL: ; USING HBX_BUF FOR CODE AREA
|
||||
LD A,C ; RETURN WITH STATUS IN A
|
||||
RET ; RETURN TO MD_READF, MD_WRITEF
|
||||
;
|
||||
MD_SAVSTK .DW 0
|
||||
MD_SAVSTK .DW 0
|
||||
;
|
||||
#INCLUDE "flashlib.inc"
|
||||
;
|
||||
|
||||
@@ -13,7 +13,7 @@ RF_U3IO .EQU $AC ; BASED ADDRESS OF RAMFLOPPY 4
|
||||
; IO PORT OFFSETS
|
||||
;
|
||||
RF_DAT .EQU 0 ; DATA IN/OUT ONLY TO SRAM - R/W
|
||||
RF_AL .EQU 1 ; ADDRESS LOW FOR RAMF MEMORY - W/O
|
||||
RF_AL .EQU 1 ; ADDRESS LOW FOR RAMF MEMORY - W/O
|
||||
RF_AH .EQU 2 ; ADDRESS HIGH FOR RAMF MEMORY - W/O
|
||||
RF_ST .EQU 3 ; STATUS PORT - R/O
|
||||
;
|
||||
@@ -30,7 +30,7 @@ RF_IOAD .EQU 7 ; OFFSET OF DEVICE IO ADDRESS
|
||||
|
||||
#IF ($RF_DEVCNT > RF_MAXRF)
|
||||
.ECHO "*** ONLY 4 RAM FLOPPY DEVICES SUPPORTED ***\n"
|
||||
RF_DEVCNT .SET RF_MAXRF
|
||||
RF_DEVCNT .SET RF_MAXRF
|
||||
#ENDIF
|
||||
;
|
||||
; DEVICE CONFIG TABLE (RAM DEVICE FIRST TO MAKE IT ALWAYS FIRST DRIVE)
|
||||
@@ -97,7 +97,7 @@ RF_CFGTBL:
|
||||
;
|
||||
RF_INIT:
|
||||
CALL NEWLINE ; FORMATTING
|
||||
PRTS("RF:$")
|
||||
PRTS("RF:$")
|
||||
|
||||
LD B,RF_DEVCNT ; LOOP CONTROL
|
||||
LD IY,RF_CFGTBL ; START OF CFG TABLE
|
||||
@@ -113,7 +113,7 @@ RF_INIT0:
|
||||
POP BC ; RESTORE BC
|
||||
DJNZ RF_INIT0 ; LOOP AS NEEDED
|
||||
|
||||
PRTS(" DEVICES=$") ; DISPLAY NUMBER
|
||||
PRTS(" DEVICES=$") ; DISPLAY NUMBER
|
||||
LD A,RF_DEVCNT ; OF DEVICES
|
||||
CALL PRTDECB
|
||||
;
|
||||
@@ -123,7 +123,7 @@ RF_INIT0:
|
||||
RF_UNIT:
|
||||
PRTS(" IO=0x$") ; DISPLAY
|
||||
LD A,(IY+RF_IOAD) ; PORT AND
|
||||
CALL PRTHEXBYTE ; WRITE
|
||||
CALL PRTHEXBYTE ; WRITE
|
||||
PRTS(" WP=$") ; PROTECT
|
||||
ADD A,RF_ST ; STATUS OF
|
||||
LD C,A ; THIS DEVICE
|
||||
@@ -198,7 +198,7 @@ RF_GEOM:
|
||||
RF_DEVICE:
|
||||
LD D,DIODEV_RF ; D := DEVICE TYPE
|
||||
LD E,(IY+RF_DEV) ; E := PHYSICAL DEVICE NUMBER
|
||||
LD C,%00010110 ; C := ATTRIBUTES, NON-REMOVABLE RAM FLOPPY
|
||||
LD C,%00010111 ; 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
|
||||
@@ -345,7 +345,7 @@ RF_SETADR:
|
||||
OR RF_AL ; ADDRESS TO THE
|
||||
LD C,A ; TO THE MSB AND
|
||||
LD A,(IY+RF_LBA+0) ; LSB SECTRK
|
||||
OUT (C),A ; REGISTERS.
|
||||
OUT (C),A ; REGISTERS.
|
||||
LD A,(IY+RF_LBA+1) ; BYTE COUNTER
|
||||
INC C ; IS RESET
|
||||
OUT (C),A
|
||||
|
||||
Reference in New Issue
Block a user