Browse Source

Changed the Attribute for MD RF devices reordering/fliping (RF<->Flash) so bit masks are easier

pull/479/head
Mark Pruden 1 year ago
parent
commit
8d8868e5d5
  1. BIN
      Doc/RomWBW System Guide.pdf
  2. 10
      Source/Apps/assign/assign.asm
  3. 6
      Source/CBIOS/cbios.asm
  4. 2
      Source/Doc/SystemGuide.md
  5. 2
      Source/HBIOS/hbios.asm
  6. 54
      Source/HBIOS/md.asm
  7. 14
      Source/HBIOS/rf.asm

BIN
Doc/RomWBW System Guide.pdf

Binary file not shown.

10
Source/Apps/assign/assign.asm

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

6
Source/CBIOS/cbios.asm

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

2
Source/Doc/SystemGuide.md

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

2
Source/HBIOS/hbios.asm

@ -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 "???$"

54
Source/HBIOS/md.asm

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

14
Source/HBIOS/rf.asm

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

Loading…
Cancel
Save