Browse Source

md updates

patch
b1ackmai1er 5 years ago
parent
commit
2e62948309
  1. 1
      Source/CBIOS/cbios.asm
  2. 4
      Source/HBIOS/Build.sh
  3. 172
      Source/HBIOS/md.asm

1
Source/CBIOS/cbios.asm

@ -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
Source/HBIOS/Build.sh

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

172
Source/HBIOS/md.asm

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

Loading…
Cancel
Save