This commit is contained in:
Anatoliy Belyanskiy 2023-09-17 04:13:36 +10:00
parent 8a1abd44ab
commit 615d9cb2e2
6 changed files with 95 additions and 74 deletions

View File

@ -547,7 +547,7 @@ ADD_DE2 DJNZ ADD_DE1
RET RET
;----------------- ;-----------------
;!TODO сЄЅЋ ть этЎ Ќ ЊрЎс ЌЈ ЈЋЈ Ј­ЊЋюЄ ЌЈ у­ЈЂЅрс Ћь­ыЌЈ. ЏЎЂтЎряются Ђ ЄЎсЅ Ј Ѕщё ЃЄЅ-тЎ
; HL - CLUSTER ; HL - CLUSTER
; DE - (CLUSTER) ; DE - (CLUSTER)
R_F_FAT: PUSH HL R_F_FAT: PUSH HL

View File

@ -174,12 +174,12 @@ BLOKRD0 POP BC
;HL:DE - FP (in sectors) ;HL:DE - FP (in sectors)
; B - Amount sectors ; B - Amount sectors
BLOK_RD: PUSH BC BLOK_RD: PUSH BC
LD (READMEM),IX LD (READ.MEM),IX
LD A,(BootSector.S_P_C) ;SECTORS PER CLUSTER LD A,(BootSector.S_P_C) ;SECTORS PER CLUSTER
LD C,A LD C,A
LD B,0 LD B,0 ;!FIXIT
;HL:DE / BC => DE:IX HL-OSTATOK ;HL:DE / BC => DE:IX HL-OSTATOK
CALL DIV_for_SPC ;!FIXIT § ¬¥­¨âì ¢ë§®¢ HLDE/BC ­  HLDE/C CALL DIV_for_SPC
;!FIXIT ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - à §¤¥« ­¥ ¡®«ìè¥ 2Gb ;!FIXIT ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - à §¤¥« ­¥ ¡®«ìè¥ 2Gb
LD B,XH LD B,XH
LD C,XL LD C,XL
@ -272,19 +272,19 @@ BLOKRD3 LD A,B ; /
ADD IX,DE ADD IX,DE
JR NC,BLOKRD4 JR NC,BLOKRD4
INC HL INC HL
BLOKRD4 LD DE,(READMEM) BLOKRD4 LD DE,(READ.MEM)
LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE)
LD B,C LD B,C
LD C,Dss.DRV.Read LD C,Dss.DRV.Read
RST ToDSS.DRV RST ToDSS.DRV
JP C,BLOKRD0 JP C,BLOKRD0
POP BC POP BC
LD HL,(READMEM) LD HL,(READ.MEM)
LD DE,(BootSector.B_P_S) LD DE,(BootSector.B_P_S)
BLOKRD5 ADD HL,DE BLOKRD5 ADD HL,DE
DEC C DEC C
JR NZ,BLOKRD5 JR NZ,BLOKRD5
LD (READMEM),HL LD (READ.MEM),HL
POP DE POP DE
LD A,B LD A,B
OR A OR A
@ -309,19 +309,19 @@ BLOKRD7 EX DE,HL
PUSH HL PUSH HL
PUSH BC PUSH BC
CALL NSECTOR CALL NSECTOR
LD DE,(READMEM) LD DE,(READ.MEM)
LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE)
LD B,C LD B,C
LD C,Dss.DRV.Read LD C,Dss.DRV.Read
RST ToDSS.DRV RST ToDSS.DRV
JP C,BLOKRD0 JP C,BLOKRD0
POP BC POP BC
LD HL,(READMEM) LD HL,(READ.MEM)
LD DE,(BootSector.B_P_S) LD DE,(BootSector.B_P_S)
BLOKRD8 ADD HL,DE BLOKRD8 ADD HL,DE
DEC C DEC C
JR NZ,BLOKRD8 JR NZ,BLOKRD8
LD (READMEM),HL LD (READ.MEM),HL
POP DE POP DE
JR BLOKRD6 JR BLOKRD6
@ -344,7 +344,7 @@ BLOKWR0 POP BC
;HL:DE - FP (in sectors) ;HL:DE - FP (in sectors)
; B - Amount sectors ; B - Amount sectors
BLOK_WR PUSH BC BLOK_WR PUSH BC
LD (READMEM),IX LD (READ.MEM),IX
LD A,(BootSector.S_P_C) ;SECTORS PER CLUSTER LD A,(BootSector.S_P_C) ;SECTORS PER CLUSTER
LD C,A LD C,A
LD B,0 LD B,0
@ -457,19 +457,19 @@ BLOKWR3 LD A,B
ADD IX,DE ADD IX,DE
JR NC,BLOKWR4 JR NC,BLOKWR4
INC HL INC HL
BLOKWR4 LD DE,(READMEM) BLOKWR4 LD DE,(READ.MEM)
LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE)
LD B,C LD B,C
LD C,Dss.DRV.Write LD C,Dss.DRV.Write
RST ToDSS.DRV RST ToDSS.DRV
JP C,BLOKWR0 JP C,BLOKWR0
POP BC POP BC
LD HL,(READMEM) LD HL,(READ.MEM)
LD DE,(BootSector.B_P_S) LD DE,(BootSector.B_P_S)
BLOKWR5 ADD HL,DE BLOKWR5 ADD HL,DE
DEC C DEC C
JR NZ,BLOKWR5 JR NZ,BLOKWR5
LD (READMEM),HL LD (READ.MEM),HL
POP DE POP DE
LD A,B LD A,B
OR A OR A
@ -499,19 +499,19 @@ BLOKWR9 POP BC
PUSH HL PUSH HL
PUSH BC PUSH BC
CALL NSECTOR CALL NSECTOR
LD DE,(READMEM) LD DE,(READ.MEM)
LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE)
LD B,C LD B,C
LD C,Dss.DRV.Write LD C,Dss.DRV.Write
RST ToDSS.DRV RST ToDSS.DRV
JP C,BLOKWR0 JP C,BLOKWR0
POP BC POP BC
LD HL,(READMEM) LD HL,(READ.MEM)
LD DE,(BootSector.B_P_S) LD DE,(BootSector.B_P_S)
BLOKWR8 ADD HL,DE BLOKWR8 ADD HL,DE
DEC C DEC C
JR NZ,BLOKWR8 JR NZ,BLOKWR8
LD (READMEM),HL LD (READ.MEM),HL
POP DE POP DE
JR BLOKWR6 JR BLOKWR6
@ -521,7 +521,7 @@ BLOKWRA POP BC
RET RET
TSTSIZE XOR A TSTSIZE XOR A
LD (READCOD),A LD (READ.COD),A
LD L,(IY+32) ;FP LOW _sFM.F_POSITION LD L,(IY+32) ;FP LOW _sFM.F_POSITION
LD H,(IY+33) LD H,(IY+33)
ADD HL,DE ADD HL,DE
@ -545,25 +545,24 @@ TSTSIZE XOR A
SBC HL,DE ;VERY BIG SBC HL,DE ;VERY BIG
EX DE,HL EX DE,HL
LD A,#FF LD A,#FF
LD (READCOD),A LD (READ.COD),A
RET RET
; HL - ADDRESS ; HL - ADDRESS
; DE - SIZE ; DE - SIZE
; A - FM ; A - FM
READ: LD (R_POINT),HL READ: LD (R_POINT),HL
LD (S_POINT),HL LD (.S_POINT),HL
CALL SET_FM CALL SET_FM
RET C RET C
CALL TSTSIZE CALL TSTSIZE
LD A,D LD A,D
OR E OR E
JP Z,NOREAD ;!FIXIT ¬®¦­® ¯¥à¥­¥á⨠¢ ­ ç «® ¯à®æ¥¤ãàë JP Z,.NOREAD ;!FIXIT ¬®¦­® ¯¥à¥­¥á⨠¢ ­ ç «® ¯à®æ¥¤ãàë
PUSH DE PUSH DE
LD A,(IY+_sFM.DRIVE) LD A,(IY+_sFM.DRIVE)
CALL OPENDSK CALL OPENDSK
; JP C,.ERR_1
JP C,RPERR1
;<3B> áçñâ ᬥ饭¨ï ¢ ᥪâ®à å ;<3B> áçñâ ᬥ饭¨ï ¢ ᥪâ®à å
; LD C,(IY+_sFM.F_POSITION) ; LD C,(IY+_sFM.F_POSITION)
; LD E,(IY+_sFM.F_POSITION+1) ; LD E,(IY+_sFM.F_POSITION+1)
@ -594,18 +593,18 @@ READ: LD (R_POINT),HL
; ;
;LD A,B ;LD A,B
OR C OR C
JP NZ,ROV1 JP NZ,.ROV1
ROV4: POP BC .ROV4: POP BC
PUSH BC PUSH BC
SRL B SRL B
JR Z,ROV2 JR Z,.ROV2
LD (SECTORH),HL LD (.SECTORH),HL
LD (SECTORL),DE LD (.SECTORL),DE
LD IX,(R_POINT) LD IX,(R_POINT)
CALL BLOK_RD CALL BLOK_RD
JP C,RPERR1 JP C,.ERR_1
LD DE,(R_POINT) LD DE,(R_POINT)
READMEM+1: LD HL,0 // LD HL,(READMEM) .MEM+1: LD HL,0 // LD HL,(READMEM)
AND A AND A
SBC HL,DE SBC HL,DE
LD C,H LD C,H
@ -613,18 +612,18 @@ READMEM+1: LD HL,0 // LD HL,(READMEM)
ADD HL,DE ADD HL,DE
LD (R_POINT),HL LD (R_POINT),HL
SRL C SRL C
SECTORL+1: LD HL,0 // LD HL,(SECTORL) .SECTORL+1: LD HL,0 // LD HL,(SECTORL)
ADD HL,BC ADD HL,BC
EX DE,HL EX DE,HL
SECTORH+1: LD HL,0 // LD HL,(SECTORH) .SECTORH+1: LD HL,0 // LD HL,(SECTORH)
LD C,B LD C,B
ADC HL,BC ADC HL,BC
ROV2: POP BC .ROV2: POP BC
LD A,B LD A,B
AND #01 AND #01
LD B,A LD B,A
OR C OR C
JP Z,ROV6 JP Z,.ROV6
PUSH BC PUSH BC
LD IX,BUFFER+#C000 LD IX,BUFFER+#C000
LD B,1 LD B,1
@ -636,14 +635,14 @@ ROV2: POP BC
POP BC POP BC
LD C,SLOT3 LD C,SLOT3
OUT (C),B OUT (C),B
JP C,RPERR1 JP C,.ERR_1
LD HL,BUFFER LD HL,BUFFER
LD DE,(R_POINT) LD DE,(R_POINT)
POP BC POP BC
LDIR LDIR
LD (R_POINT),DE LD (R_POINT),DE
ROV6: .ROV6:
S_POINT+1: LD HL,0 .S_POINT+1: LD HL,0
LD DE,(R_POINT) LD DE,(R_POINT)
EX DE,HL EX DE,HL
AND A AND A
@ -655,12 +654,11 @@ S_POINT+1: LD HL,0
LD HL,0 LD HL,0
CALL MOVE_FP.F_current CALL MOVE_FP.F_current
POP DE POP DE
NOREAD: .NOREAD:
READCOD+1: LD A,0 .COD+1: LD A,0
OR A OR A
RET RET
.ROV1: PUSH BC
ROV1: PUSH BC
PUSH HL PUSH HL
PUSH DE PUSH DE
LD IX,BUFFER+#C000 LD IX,BUFFER+#C000
@ -674,7 +672,7 @@ ROV1: PUSH BC
LD C,SLOT3 LD C,SLOT3
OUT (C),B OUT (C),B
POP HL POP HL
JP C,RPERR3 JP C,.ERR_3
LD BC,1 LD BC,1
ADD HL,BC ADD HL,BC
EX DE,HL EX DE,HL
@ -691,23 +689,22 @@ ROV1: PUSH BC
POP HL POP HL
AND A AND A
SBC HL,BC SBC HL,BC
JR NC,ROV3 JR NC,.ROV3
ADD HL,BC ADD HL,BC
LD B,H LD B,H
LD C,L LD C,L
LD HL,0 LD HL,0
ROV3: PUSH HL .ROV3: PUSH HL
LD HL,BUFFER LD HL,BUFFER
ADD HL,DE ADD HL,DE
LD DE,(R_POINT) LD DE,(R_POINT)
LDIR LDIR
LD (R_POINT),DE LD (R_POINT),DE
EXX EXX
JP ROV4 JP .ROV4
.ERR_3: POP HL
RPERR3: POP HL .ERR_2: POP HL
RPERR2: POP HL .ERR_1: POP BC
RPERR1: POP BC
SCF SCF
RET RET
@ -726,7 +723,7 @@ RD_ONLY: POP DE
; DE - SIZE ; DE - SIZE
; A - FM ; A - FM
WRITE: LD (R_POINT),HL WRITE: LD (R_POINT),HL
LD (S_POINT),HL LD (READ.S_POINT),HL
PUSH DE PUSH DE
CALL SET_FM CALL SET_FM
JP C,PWERR1 JP C,PWERR1
@ -762,7 +759,7 @@ WOV4: POP BC
PUSH HL PUSH HL
PUSH DE PUSH DE
PUSH BC PUSH BC
R_POINT+2: LD IX,0 // LD IX,(R_POINT) R_POINT+2: LD IX,0 // LD IX,(R_POINT)
CALL BLOK_WR CALL BLOK_WR
POP BC POP BC
@ -818,7 +815,7 @@ WOV2: POP BC
LD C,SLOT3 LD C,SLOT3
OUT (C),B OUT (C),B
RET C RET C
WOV6: LD DE,(S_POINT) WOV6: LD DE,(READ.S_POINT)
LD HL,(R_POINT) LD HL,(R_POINT)
AND A AND A
SBC HL,DE SBC HL,DE
@ -922,8 +919,8 @@ WOV3: PUSH HL
; ADC HL,DE ; ADC HL,DE
; RET ; RET
///////////////////////////////////// /////////////////////////////////////
; HL - CLUSTER ; in: HL - CLUSTER
; HL:IX - SECTOR ; out: HL:IX - SECTOR
NSECTOR: DEC HL NSECTOR: DEC HL
DEC HL DEC HL
LD DE,0 LD DE,0

View File

@ -289,27 +289,39 @@ RD_BPB: LD C,SLOT3
LD (FatBuffer.DIR_S_S),A LD (FatBuffer.DIR_S_S),A
ADD HL,BC ; Start DATA area ADD HL,BC ; Start DATA area
LD (FatBuffer.DAT_FRM),HL LD (FatBuffer.DAT_FRM),HL
;LD HL,0 ;!TODO ­¥ ¨á¯®«ì§ãîâáï §­ ç¥­¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ­ï¥¬ë¥ ¢ FatBuffer
LD H,B ; âãâ ¢ B ­®«ì ¤®«¦¥­ ¡ëâì
LD L,B
LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sector
LD B,(IY+_sBOOT_SEC.B_P_S+1)
LD A,(BootSector.S_P_C)
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
IF COMPILE_UNUSED_CODE IF COMPILE_UNUSED_CODE
;!TODO ­¥ ¨á¯®«ì§ãîâáï §­ ç¥­¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ­ï¥¬ë¥ ¢ FatBuffer ;LD HL,0
;NEXTAD3
.loop3: ADD HL,BC ; calc. cluster size
DEC A
JR NZ,.loop3
;LD H,B ; âãâ ¢ B ­®«ì ¤®«¦¥­ ¡ëâì
;LD L,B
;LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sector
;LD B,(IY+_sBOOT_SEC.B_P_S+1)
LD L,(IY+_sBOOT_SEC.B_P_S) ; Size sector
LD H,(IY+_sBOOT_SEC.B_P_S+1)
LD A,(BootSector.S_P_C)
;NEXTAD3
; .loop3: ADD HL,BC ; calc. cluster size
; DEC A
; JR NZ,.loop3
;!TODO ¯à®¢¥à¨âì ¯à ¢¨«ì­® «¨ áç¨â ¥â
XOR 1 ; calc. cluster size
JR Z,.loop3.end
RRA
.loop3: ADD HL,HL
RRCA
JP NC,.loop3
.loop3.end:
;
LD (FatBuffer.CLU_LEN),HL LD (FatBuffer.CLU_LEN),HL
EX DE,HL EX DE,HL
LD HL,#3FFF ;!TODO FATcacheSize LD HL,#3FFF ;!TODO FATcacheSize
XOR A ;XOR A
;NEXTAD4 ; A = 0
;NEXTAD4 ;!FIXIT ®¯â¨¬¨§¨à®¢ âì ª®£¤  ¯®­ ¤®¡¨âáï
.loop4: INC A .loop4: INC A
JP Z,DOS_X_Error.UnknownBPB JP Z,DOS_X_Error.UnknownBPB
SBC HL,DE SBC HL,DE
@ -346,6 +358,11 @@ RD_BPB: LD C,SLOT3
.BPB_FAT: .BPB_FAT:
LD (FatBuffer.FAT_TYP),A LD (FatBuffer.FAT_TYP),A
LD (FatBuffer.ENDCLUS),HL LD (FatBuffer.ENDCLUS),HL
;!TODO ­¥ ¨á¯®«ì§ãîâáï §­ ç¥­¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ­ï¥¬ë¥ ¢ FatBuffer
////////////////////////////////////////////////////////////////////////
IF COMPILE_UNUSED_CODE
LD HL,0 LD HL,0
LD C,(IY+_sBOOT_SEC.S_P_T) ; Sector per track LD C,(IY+_sBOOT_SEC.S_P_T) ; Sector per track
LD B,(IY+_sBOOT_SEC.S_P_T+1) LD B,(IY+_sBOOT_SEC.S_P_T+1)
@ -355,6 +372,8 @@ RD_BPB: LD C,SLOT3
DEC A DEC A
JR NZ,.BPB_L1 JR NZ,.BPB_L1
LD (FatBuffer.S_X_H),HL LD (FatBuffer.S_X_H),HL
ENDIF
////////////////////////////////////////////////////////////////////////
LD DE,(FatBuffer.DAT_FRM) LD DE,(FatBuffer.DAT_FRM)
; LD E,(IY+#1C) ;Hidden sec ; LD E,(IY+#1C) ;Hidden sec

View File

@ -50,8 +50,8 @@ INC_FA2 CALL R_F_FAT
;R01 ;R01
; HL - CLUSTER ; IN: HL - CLUSTER
; DE - (CLUSTER) ; OUT: DE - (CLUSTER)
;!FIXIT ¤ ŤĽĽ § âŽçŞ  ­  âŽ, ç⎠˘ DE ˘áĽŁ¤  0 - ŕ §¤ĽŤ ­Ľ ĄŽŤěčĽ 2Gb ;!FIXIT ¤ ŤĽĽ § âŽçŞ  ­  âŽ, ç⎠˘ DE ˘áĽŁ¤  0 - ŕ §¤ĽŤ ­Ľ ĄŽŤěčĽ 2Gb
R_F_FAT: R_F_FAT:
EX DE,HL EX DE,HL
@ -85,8 +85,13 @@ R_F_F16:
; ;
AND #0F ; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES) AND #0F ; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
ADD HL,HL ; HL - FAT OFFSET (FROM CASH) ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH ;!TEST
CP C LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
CP C
//LD C,A
//LD A,(FATCASH.Block)
//CP C
;
CALL NZ,RE_FAT ; A != C - READ NEW BLOCK FAT CALL NZ,RE_FAT ; A != C - READ NEW BLOCK FAT
LD DE,FAT LD DE,FAT
ADD HL,DE ADD HL,DE

View File

@ -1 +1 @@
275 280

@ -1 +1 @@
Subproject commit cf19a287a2cfe1946de5c1d50a255c43ae4fc390 Subproject commit b593cb606636c961e49597b9b1e5b6ee72d191c9