mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
md updates
This commit is contained in:
@@ -290,7 +290,6 @@ 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
|
||||
;
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
set -e
|
||||
|
||||
CPMCP=../../Tools/`uname`/cpmcp
|
||||
CPMCH=../../Tools/`uname`/cpmchattrib
|
||||
|
||||
timestamp=$(date +%Y-%m-%d)
|
||||
#timestamp="2020-02-24"
|
||||
@@ -144,6 +145,9 @@ echo "copying systems to $romdiskfile"
|
||||
$CPMCP -f $romfmt $romdiskfile ../CPM22/cpm_$BIOS.sys 0:cpm.sys
|
||||
$CPMCP -f $romfmt $romdiskfile ../ZSDOS/zsys_$BIOS.sys 0:zsys.sys
|
||||
|
||||
echo "setting files in the ROM disk image to read only"
|
||||
$CPMCH -f $romfmt $romdiskfile r 0:*.*
|
||||
|
||||
if [ $platform = UNA ] ; then
|
||||
cp osimg.bin $outdir/UNA_WBW_SYS.bin
|
||||
cp $romdiskfile $outdir/UNA_WBW_ROM$romsize.bin
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
;--------------------------------------------------------------------------------------------------
|
||||
; 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 0x01 FLASH DRIVE %00111000 HD STYLE, NON-REMOVABLE, TYPE-FLASH
|
||||
; 0x00 MEMORY DISK 0x01 ROM 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
|
||||
@@ -173,27 +173,17 @@ MD_GEOM1:
|
||||
;
|
||||
MD_DEVICE:
|
||||
LD D,DIODEV_MD ; D := DEVICE TYPE
|
||||
; LD A,(IY+MD_DEV) ; GET DEVICE NUMBER
|
||||
; LD E,A ; PUT IN E FOR RETURN
|
||||
; OR A ; SET FLAGS
|
||||
LD E,(IY+MD_DEV)
|
||||
LD C,(IY+MD_ATTRIB)
|
||||
; LD C,%00100000 ; ASSUME ROM DISK ATTRIBUTES
|
||||
; JR Z,MD_DEVICE1 ; IF ZERO, IT IS ROM DISK, DONE
|
||||
; LD C,%00101000 ; USE RAM DISK ATTRIBUTES
|
||||
LD E,(IY+MD_DEV) ; GET DEVICE NUMBER
|
||||
LD C,(IY+MD_ATTRIB) ; GET ATTRIBUTE
|
||||
LD H,0 ; H := 0, DRIVER HAS NO MODES
|
||||
LD L,0 ; L := 0, NO BASE I/O ADDRESS
|
||||
MD_DEVICE1:
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
MD_MEDIA:
|
||||
; LD A,(IY+MD_DEV) ; GET DEVICE NUM
|
||||
; ADD A,MID_MDROM ; OFFSET BY MD ROM
|
||||
; LD E,A ; RESULTANT MEDIA ID TO E
|
||||
LD E,(IY+MD_MID)
|
||||
LD E,(IY+MD_MID) ; GET MEDIA ID
|
||||
LD D,0 ; D:0=0 MEANS NO MEDIA CHANGE
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
@@ -210,7 +200,6 @@ MD_SEEK:
|
||||
LD (IY+MD_LBA+3),D ; ...
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
|
||||
;
|
||||
;
|
||||
;
|
||||
@@ -238,11 +227,8 @@ MD_WRITE:
|
||||
LD BC,MD_WRSEC
|
||||
MD_WR1:
|
||||
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_MID) ; IF THE DEVICES MEDIA
|
||||
CP MID_MDROM ; IS NOT ROM THEN WE CAN
|
||||
LD A,(IY+MD_ATTRIB) ; IF THE DEVICES ATTRIBUTE
|
||||
CP MD_AROM ; 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
|
||||
@@ -286,9 +272,73 @@ MD_RW3:
|
||||
; READ FLASH
|
||||
;
|
||||
MD_RDSECF:
|
||||
CALL MD_IOSETUPF
|
||||
CALL MD_RDSEC
|
||||
PRTS("rf$");
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
MD_IOSETUPF:
|
||||
PUSH IY
|
||||
LD L,(IY+MD_LBA+0) ; HL := LOW WORD OF LBA
|
||||
LD H,(IY+MD_LBA+1)
|
||||
INC H ; SKIP FIRST 128MB (256 SECTORS)
|
||||
; LD DE,256
|
||||
; ADD HL,DE
|
||||
;
|
||||
CALL PRTHEXWORDHL
|
||||
;
|
||||
LD A,L ; SAVE LBA 4K
|
||||
AND %11111000 ; BLOCK WE ARE
|
||||
LD C,A ; GOING TO
|
||||
LD B,H ; ACCESS
|
||||
;
|
||||
LD D,0 ; CONVERT LBA
|
||||
LD E,H ; TO ADDRESS
|
||||
LD H,L ; MULTIPLY BY 512
|
||||
LD L,D ; DE:HL = HLX512
|
||||
SLA H
|
||||
RL E
|
||||
RL D
|
||||
;
|
||||
CALL PC_COLON
|
||||
CALL PRTHEX32
|
||||
CALL PC_SPACE
|
||||
;
|
||||
PUSH HL ; IS THE SECTOR
|
||||
LD HL,MD_LBA4K ; WE WANT TO
|
||||
LD A,C ; READ ALREADY
|
||||
CP (HL) ; IN THE 4K
|
||||
JR NZ,MD_SECR ; BLOCK WE HAVE
|
||||
INC HL ; IN THE BUFFER
|
||||
LD A,B
|
||||
CP (HL)
|
||||
JR Z,MD_SECM
|
||||
;
|
||||
MD_SECR:
|
||||
POP HL ; DESIRED SECTOR
|
||||
; IS NOT IN BUFFER
|
||||
LD (MD_LBA4K),BC ; WE WILL READ IN
|
||||
; A NEW 4K SECTOR.
|
||||
; SAVE THE 4K LBA
|
||||
; FOR FUTURE CHECKS
|
||||
;
|
||||
LD IX,FF_BUFFER ; SET DESTINATION ADDRESS
|
||||
CALL FF_RINIT ; READ 4K SECTOR
|
||||
;
|
||||
LD DE,FF_BUFFER
|
||||
CALL DUMP_BUFFER
|
||||
PUSH HL
|
||||
;
|
||||
MD_SECM:POP HL
|
||||
POP IY
|
||||
RET
|
||||
;
|
||||
MD_LBA4K .DW $FFFF
|
||||
|
||||
;
|
||||
;
|
||||
; READ RAM / ROM
|
||||
;
|
||||
MD_RDSEC:
|
||||
@@ -324,6 +374,7 @@ MD_RDSEC:
|
||||
;
|
||||
MD_WRSECF:
|
||||
CALL MD_WRSEC
|
||||
PRTS("wf$");
|
||||
RET
|
||||
;
|
||||
; WRITE RAM
|
||||
@@ -424,6 +475,7 @@ MD_IOSETUP2: ; ROM
|
||||
;
|
||||
;
|
||||
;
|
||||
#IF (MDTRACE >= 2)
|
||||
MD_PRT:
|
||||
PUSH AF
|
||||
PUSH BC
|
||||
@@ -465,6 +517,7 @@ MD_PRT:
|
||||
POP AF
|
||||
|
||||
RET
|
||||
#ENDIF
|
||||
;
|
||||
;
|
||||
;
|
||||
@@ -492,7 +545,6 @@ MD_PRT:
|
||||
;==================================================================================================
|
||||
;
|
||||
FF_DBG: .EQU 0 ; DEBUG
|
||||
FF_HBX: .EQU 1 ; =0 USE STACK, =1 USE HBX_BUF
|
||||
;
|
||||
FF_RW .DB 00h ; READ WRITE FLAG
|
||||
FF_TGT .EQU 0BFB7H ; TARGET CHIP FOR R/W FILESYSTEM
|
||||
@@ -687,55 +739,6 @@ FF_NXT2:CALL PRTSTR ; AFTER SEARCH DISPLAY THE RESULT
|
||||
;
|
||||
;======================================================================
|
||||
;
|
||||
#IF (FF_HBX==0)
|
||||
FF_FNCALL: ; USING STACK FOR CODE AREA
|
||||
CALL FF_CALCA ; GET BANK AND SECTOR DATA IN IY
|
||||
;
|
||||
POP DE ; GET ROUTINE TO CALL
|
||||
;
|
||||
LD (FF_STACK),SP ; SAVE STACK
|
||||
LD HL,(FF_STACK)
|
||||
;
|
||||
LD BC,64
|
||||
; LD BC,FF_I_SZ ; CODE SIZE REQUIRED
|
||||
CCF ; CREATE A RELOCATABLE
|
||||
SBC HL,BC ; CODE BUFFER IN THE
|
||||
LD SP,HL ; STACK AREA
|
||||
;
|
||||
PUSH HL ; SAVE THE EXECUTE ADDRESS
|
||||
EX DE,HL ; PUT EXECUTE / START ADDRESS IN DE
|
||||
; LD HL,FF_IDENT ; COPY OUR RELOCATABLE
|
||||
LDIR ; CODE TO THE BUFFER
|
||||
POP HL ; CALL OUR RELOCATABLE CODE
|
||||
|
||||
PUSH IY ; PUT BANK AND SECTOR
|
||||
POP BC ; DATA IN BC
|
||||
;
|
||||
#IF (FF_DBG==1)
|
||||
CALL PRTHEXWORD
|
||||
#ENDIF
|
||||
;
|
||||
HB_DI
|
||||
CALL JPHL ; EXECUTE RELOCATED CODE
|
||||
HB_EI
|
||||
;
|
||||
LD HL,(FF_STACK) ; RESTORE ORIGINAL
|
||||
LD SP,HL ; STACK POSITION
|
||||
;
|
||||
#IF (FF_DBG==1)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXWORD
|
||||
CALL PC_SPACE
|
||||
EX DE,HL
|
||||
CALL PRTHEXWORDHL
|
||||
CALL PC_SPACE
|
||||
EX DE,HL
|
||||
#ENDIF
|
||||
;
|
||||
LD A,C ; RETURN WITH STATUS IN A
|
||||
;
|
||||
RET
|
||||
#ELSE
|
||||
FF_FNCALL: ; USING HBX_BUF FOR CODE AREA
|
||||
CALL FF_CALCA ; GET BANK AND SECTOR DATA IN IY
|
||||
;
|
||||
@@ -744,10 +747,10 @@ FF_FNCALL: ; USING HBX_BUF FOR CODE AREA
|
||||
LD DE,HBX_BUF ; PUT EXECUTE / START ADDRESS IN DE
|
||||
LD BC,HBX_BUFSIZ ; CODE SIZE REQUIRED
|
||||
;
|
||||
PUSH DE ; SAVE THE EXECUTE ADDRESS
|
||||
; PUSH DE ; SAVE THE EXECUTE ADDRESS
|
||||
; COPY OUR RELOCATABLE
|
||||
LDIR ; CODE TO THE BUFFER
|
||||
POP HL ; CALL OUR RELOCATABLE CODE
|
||||
; POP HL ; CALL OUR RELOCATABLE CODE
|
||||
|
||||
PUSH IY ; PUT BANK AND SECTOR
|
||||
POP BC ; DATA IN BC
|
||||
@@ -757,7 +760,7 @@ FF_FNCALL: ; USING HBX_BUF FOR CODE AREA
|
||||
#ENDIF
|
||||
;
|
||||
HB_DI
|
||||
CALL JPHL ; EXECUTE RELOCATED CODE
|
||||
CALL HBX_BUF ; EXECUTE RELOCATED CODE
|
||||
HB_EI
|
||||
;
|
||||
#IF (FF_DBG==1)
|
||||
@@ -773,8 +776,6 @@ FF_FNCALL: ; USING HBX_BUF FOR CODE AREA
|
||||
LD A,C ; RETURN WITH STATUS IN A
|
||||
;
|
||||
RET
|
||||
|
||||
#ENDIF
|
||||
;
|
||||
;======================================================================
|
||||
; IDENTIFY FLASH CHIP.
|
||||
@@ -865,7 +866,7 @@ FF_EINIT:
|
||||
; ON ENTRY BC CONTAINS BANK AND SECTOR DATA
|
||||
; A CONTAINS CURRENT BANK
|
||||
; ON EXIT DE CONTAINS ID WORD
|
||||
; A RETURNS STATUS FLASH 0=SUCCESS FF=FAIL
|
||||
; C RETURNS STATUS FLASH 0=SUCCESS FF=FAIL
|
||||
;======================================================================
|
||||
;
|
||||
FF_ERASE: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
|
||||
@@ -1086,19 +1087,22 @@ FF_RINIT:
|
||||
; ON ENTRY BC CONTAINS BANK AND SECTOR DATA
|
||||
; IX POINTS TO DATA TO BE WRITTEN
|
||||
; A CONTAINS CURRENT BANK
|
||||
; ON EXIT A RETURNS STATUS FLASH 0=SUCCESS FF=FAIL
|
||||
; ON EXIT NO STATUS RETURNED
|
||||
;======================================================================
|
||||
;
|
||||
FF_SREAD: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
|
||||
;
|
||||
PUSH AF ; SAVE CURRENT BANK
|
||||
;
|
||||
LD H,C ; SECTOR
|
||||
LD L,$00 ; ADDRESS
|
||||
LD D,L ; INITIALIZE
|
||||
LD E,L ; BYTE COUNT
|
||||
;
|
||||
FF_RD1:
|
||||
LD (FF_RST),SP ; SAVE STACK
|
||||
LD SP,HBX_BUF + (FF_RD1-FF_SREAD) ; SETUP TEMP STACK
|
||||
;
|
||||
PUSH AF ; SAVE CURRENT BANK
|
||||
;
|
||||
FF_RD1:
|
||||
LD A,B ; SELECT BANK
|
||||
CALL HBX_BNKSEL ; TO READ
|
||||
LD C,(HL) ; READ BYTE
|
||||
@@ -1107,7 +1111,7 @@ FF_RD1:
|
||||
PUSH AF ; SELECT BANK
|
||||
CALL HBX_BNKSEL ; TO WRITE
|
||||
LD (IX+0),C ; WRITE BYTE
|
||||
|
||||
;
|
||||
INC HL ; NEXT SOURCE LOCATION
|
||||
INC IX ; NEXT DESTINATION LOCATION
|
||||
;
|
||||
@@ -1116,10 +1120,12 @@ FF_RD1:
|
||||
JR Z,FF_RD1
|
||||
|
||||
POP AF ; RETURN TO ORIGINAL BANK
|
||||
; CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY
|
||||
XOR A
|
||||
CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY
|
||||
; LD C,D ; RETURN STATUS
|
||||
LD SP,(FF_RST) ; RESTORE STACK
|
||||
;
|
||||
RET
|
||||
FF_RST .DW 0 ; SAVE STACK
|
||||
;
|
||||
FF_R_SZ .EQU $-FF_SREAD ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
|
||||
;
|
||||
|
||||
Reference in New Issue
Block a user