This commit is contained in:
Anatoliy Belyanskiy 2023-12-16 04:22:49 +10:00
parent 81595cbb58
commit 2a6d817a9d
10 changed files with 868 additions and 878 deletions

View File

@ -55,6 +55,9 @@
include 'API/MkDir.asm'
include 'API/RmDir.asm'
include 'API/DosName.asm'
include 'API/Read.asm'
include 'API/Write.asm'
;R09
;„ã¡«ì - CHNDISK = OPENDSK

199
DSS/API/Read.asm Normal file
View File

@ -0,0 +1,199 @@
; HL - ADDRESS
; DE - SIZE
; A - FM
READ: LD (.R_POINT),HL
LD (.S_POINT),HL
CALL SET_FM
RET C
CALL TSTSIZE
;
LD A,D
OR E
JP Z,.NOREAD
;
PUSH DE
LD A,(IY+_sFM.DRIVE)
CALL OPENDSK
JP C,.ERR_1
;<3B> áçñâ ᬥ饭¨ï ¢ ᥪâ®à å
; LD C,(IY+_sFM.F_POSITION)
; LD E,(IY+_sFM.F_POSITION+1)
; LD A,E
; AND #01
; LD B,A
; LD D,(IY+_sFM.F_POSITION+2)
; LD L,(IY+_sFM.F_POSITION+3)
; LD H,0
; OR A
; RR L
; RR D
; RR E
LD H,0
LD L,(IY+_sFM.F_POSITION+3)
LD D,(IY+_sFM.F_POSITION+2)
LD E,(IY+_sFM.F_POSITION+1)
LD A,E
AND #01
LD B,A
LD C,(IY+_sFM.F_POSITION)
;OR A
RR L
RR D
RR E
;HL:DE FP (in sectors)
;BC FP residue (in bytes)
;
;LD A,B
OR C
JP NZ,.ROV1
.ROV4: POP BC
PUSH BC
SRL B
JR Z,.ROV2
LD (.SECTORH),HL
LD (.SECTORL),DE
.R_POINT+2: LD IX,0
CALL BLOK_RD
JP C,.ERR_1
LD DE,(.R_POINT)
.PointerOnBuffer+1:
LD HL,0 // LD HL,(READMEM)
AND A
SBC HL,DE
LD C,H
LD B,0
ADD HL,DE
LD (.R_POINT),HL
SRL C
.SECTORL+1: LD HL,0 // LD HL,(SECTORL)
ADD HL,BC
EX DE,HL
.SECTORH+1: LD HL,0 // LD HL,(SECTORH)
LD C,B
ADC HL,BC
.ROV2: POP BC
LD A,B
AND #01
LD B,A
OR C
JP Z,.ROV6
PUSH BC
LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_RD
POP BC
LD C,SLOT3
OUT (C),B
JP C,.ERR_1
LD HL,CORE_BUFFERS.BUFFER
LD DE,(.R_POINT)
POP BC
LDIR
LD (.R_POINT),DE
.ROV6: LD HL,(.R_POINT)
.S_POINT+1: LD DE,0
;EX DE,HL
AND A
SBC HL,DE
PUSH HL
EX DE,HL
LD XH,D
LD XL,E
LD HL,0
CALL MOVE_FP.F_current
POP DE
.NOREAD:
.COD+1: LD A,0
OR A
RET
.ROV1: PUSH BC
PUSH HL
PUSH DE
LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_RD
POP BC
LD C,SLOT3
OUT (C),B
POP HL
JP C,.ERR_3
LD BC,1
ADD HL,BC
EX DE,HL
POP HL
LD C,B
ADC HL,BC
EXX
POP DE
LD HL,512 ;!HARDCODE
AND A
SBC HL,DE
LD B,H
LD C,L
POP HL
AND A
SBC HL,BC
JR NC,.ROV3
ADD HL,BC
LD B,H
LD C,L
LD HL,0 ;!TODO ¬®¦­® âãâ ã¯à®áâ¨âì ¤ «ì­¥©èãî ¢¥âªã?
.ROV3: PUSH HL
LD HL,CORE_BUFFERS.BUFFER
ADD HL,DE
LD DE,(.R_POINT)
LDIR
LD (.R_POINT),DE
EXX
JP .ROV4
.ERR_3: POP HL
.ERR_2: POP HL
.ERR_1: POP BC
SCF
RET
TSTSIZE:
XOR A
LD (READ.COD),A
LD L,(IY+_sFM.F_POSITION) ;FP LOW
LD H,(IY+_sFM.F_POSITION+1)
ADD HL,DE
;
EXX
;LD DE,0 ;!TEST
LD L,(IY+_sFM.F_POSITION+2) ;FP HIGH
LD H,(IY+_sFM.F_POSITION+3)
;!TEST
JR NC,.no_inc_hl
INC HL
;ADC HL,DE
;
.no_inc_hl:
EXX ;HL':HL - NEW FP
;
LD C,(IY+_sFM.F_SIZE)
LD B,(IY+_sFM.F_SIZE+1) ;SIZE LOW
AND A
SBC HL,BC
EXX
LD C,(IY+_sFM.F_SIZE+2) ;SIZE HIGH
LD B,(IY+_sFM.F_SIZE+3)
SBC HL,BC
EXX
RET C ;OK READ ALL
EX DE,HL
SBC HL,DE ;VERY BIG
EX DE,HL
LD A,#FF
LD (READ.COD),A
RET

208
DSS/API/Write.asm Normal file
View File

@ -0,0 +1,208 @@
WRITE.ERR3:
POP HL
WRITE.ERR2:
POP HL
WRITE.ERR1:
POP BC
SCF
RET
WRITE.RD_ONLY:
POP DE
LD A,DSS_Error.sys.READONLY
SCF
RET
; HL - ADDRESS
; DE - SIZE
; A - FM
WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] ¨§¡ëâ®ç­ë¥ ¢ë§®¢ë WR_FAT
CALL .Start
PUSH AF
LD A,(FatCache.Update)
OR A
CALL NZ,WR_FAT ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
POP AF
RET
;
.Start: LD (.R_POINT),HL
LD (.S_POINT),HL
PUSH DE
CALL SET_FM
JR C,.ERR1
LD A,(IY+_sFM.ACCESS_MODE)
AND FAT_ATTR.READ_ONLY
JR NZ,.RD_ONLY
SET 7,(IY+_sFM.ACCESS_MODE)
SET 5,(IY+_sFM.ATTRIBUT)
LD A,(IY+_sFM.DRIVE)
CALL OPENDSK
JR C,.ERR1
;
LD C,(IY+_sFM.F_POSITION)
LD A,(IY+_sFM.F_POSITION+1)
LD E,A
AND #01
LD B,A
LD D,(IY+_sFM.F_POSITION+2)
LD L,(IY+_sFM.F_POSITION+3)
LD H,0
OR A
RR L
RR D
RR E
; HL:DE - FP (in sectors)
; BC - FP residue (in bytes)
LD A,B
OR C
JP NZ,.WOV1
.WOV4: POP BC
PUSH BC
SRL B
JR Z,.WOV2
PUSH HL
PUSH DE
PUSH BC
.R_POINT+2:
LD IX,0
CALL BLOK_WR
POP BC
JR C,.ERR3
LD C,B
LD HL,(.R_POINT)
LD DE,#0200 ;!HARDCODE
.WOV5: ADD HL,DE
DJNZ .WOV5
; B=0
LD (.R_POINT),HL
;LD B,0
POP HL
ADD HL,BC
EX DE,HL
POP HL
LD C,B
ADC HL,BC
.WOV2: POP BC
LD A,B
AND #01
LD B,A
OR C
JR Z,.WOV6
PUSH HL
PUSH DE
PUSH BC
LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_RD
POP BC
LD C,SLOT3
OUT (C),B
LD DE,CORE_BUFFERS.BUFFER
LD HL,(.R_POINT)
POP BC
JP C,.ERR2
LDIR
LD (.R_POINT),HL
POP DE
POP HL
LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_WR
POP BC
LD C,SLOT3
OUT (C),B
RET C
.WOV6: LD HL,(.R_POINT)
.S_POINT+1: LD DE,0
; CF=0
;AND A
SBC HL,DE
PUSH HL
EX DE,HL
LD XH,D
LD XL,E
LD HL,0
CALL MOVE_FP.F_current
CALL MOVE_CP
POP DE
RET NC ; …᫨ à §¬¥à ä ©«  ­  ¤¨áª¥ <20>… áâ « ¡®«ìè¥, 祬 ¡ë«
; …᫨ à §¬¥à ä ©«  ­  ¤¨áª¥ áâ « ¡®«ìè¥, 祬 ¡ë«
LD L,(IY+_sFM.F_POSITION+0)
LD H,(IY+_sFM.F_POSITION+1)
LD C,(IY+_sFM.F_POSITION+2)
LD B,(IY+_sFM.F_POSITION+3)
LD (IY+_sFM.F_SIZE+0),L
LD (IY+_sFM.F_SIZE+1),H
LD (IY+_sFM.F_SIZE+2),C
LD (IY+_sFM.F_SIZE+3),B
AND A
RET
;
.WOV1: PUSH BC
PUSH HL
PUSH DE
LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_RD
POP BC
LD C,SLOT3
OUT (C),B
POP DE
POP HL
EXX
POP DE
JP C,.ERR1
LD HL,512 ;!HARDCODE
AND A
SBC HL,DE
LD B,H
LD C,L
POP HL
AND A
SBC HL,BC
JR NC,.WOV3
ADD HL,BC
LD B,H
LD C,L
LD HL,0
.WOV3: PUSH HL
LD HL,CORE_BUFFERS.BUFFER
ADD HL,DE
LD DE,(.R_POINT)
EX DE,HL
LDIR
LD (.R_POINT),HL
EXX
PUSH HL
PUSH DE
LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_WR
POP BC
LD C,SLOT3
OUT (C),B
POP HL
JP C,.ERR2
LD BC,1
ADD HL,BC
EX DE,HL
POP HL
LD C,B
ADC HL,BC
JP .WOV4
;

View File

@ -177,840 +177,6 @@ MOVE_CP:
SBC HL,DE
RET
;--------------------
ECL2:
;[x] SAVE CLUSTER AFTER READ ;!TEST
POP BC
;
POP BC
POP DE
AND A
RET
BLOKRD0 POP BC
POP DE
SCF
RET
;READ SECTORS OF FILE
;HL:DE - FP (in sectors)
; B - Amount sectors
BLOK_RD: PUSH BC
LD (READ.MEM),IX
LD A,(CORE_BUFFERS.BootSector.S_P_C) ;SECTORS PER CLUSTER
LD C,A
LD B,0 ;!FIXIT
;HL:DE / BC => DE:IX HL-OSTATOK
CALL DIV_for_SPC
;!FIXIT ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - à §¤¥« ­¥ ¡®«ìè¥ 2Gb
LD B,XH
LD C,XL
PUSH HL ;RESIDUE
LD L,(IY+_sFM.ST_CLUSTER) ;START CLUSTER
LD H,(IY+_sFM.ST_CLUSTER+1)
LD A,H
OR L
;[x] SAVE CLUSTER AFTER READ ;!TEST
;JR NZ,BLOKRD2
PUSH BC
JR NZ,.saveClustersOffset
;
JP ECL2 ;R01 JR BLOKRD0
.saveClustersOffset:
;[x] SAVE CLUSTER AFTER READ ;!TEST
LD E,(IY+_sFM.KnownCluster_L)
LD D,(IY+_sFM.KnownCluster_H)
LD A,D
OR E
JR Z,BLOKRD2
PUSH DE
PUSH HL
PUSH BC
LD E,(IY+_sFM.KnownOffset_L)
LD D,(IY+_sFM.KnownOffset_H)
LD A,D
OR E
JR Z,.noOptimization_1
POP HL
AND A
SBC HL,DE
JR C,.noOptimization_2
LD C,L
LD B,H
POP HL
POP DE
EX DE,HL
JP BLOKRD2
.noOptimization_1:
POP BC
.noOptimization_2:
POP HL
POP DE
JP BLOKRD2
;
BLOKRD1:
PUSH BC
CALL R_F_FAT
POP BC
JR C,ECL2 ;R01
EX DE,HL
DEC BC
BLOKRD2:
LD A,B ; - ᬥ饭¨¥ ¢­ãâਠ䠩«  ¢ ª« áâ¥à å
OR C
JR NZ,BLOKRD1
;[x] SAVE CLUSTER AFTER READ ;!TEST
LD (IY+_sFM.KnownCluster_L),L
LD (IY+_sFM.KnownCluster_H),H
POP BC
LD (IY+_sFM.KnownOffset_L),C
LD (IY+_sFM.KnownOffset_H),B
;
POP DE
POP BC
LD A,(CORE_BUFFERS.BootSector.S_P_C)
SUB E
LD C,A ;\
CP B ; \
JR C,BLOKRD3 ;SIZE > RESIDUE CLUSTER ; \
LD C,B ;SIZE < CLUSTER ;->-|--> ; !TODO à §®¡à âìáï
BLOKRD3 LD A,B ; /
SUB C ; /
LD B,A ;/
PUSH HL
PUSH BC
PUSH DE
CALL NSECTOR
POP DE
ADD IX,DE
JR NC,BLOKRD4
INC HL
BLOKRD4 LD DE,(READ.MEM)
LD A,(FatBuffer.DRIVE)
LD B,C
LD C,Dss.DRV.Read
RST ToDSS.DRV
JP C,BLOKRD0
POP BC
LD HL,(READ.MEM)
LD DE,(CORE_BUFFERS.BootSector.B_P_S)
BLOKRD5 ADD HL,DE
DEC C
JR NZ,BLOKRD5
LD (READ.MEM),HL
POP DE
LD A,B
OR A
RET Z
BLOKRD6 LD HL,CORE_BUFFERS.BootSector.S_P_C
LD A,B
SUB (HL)
LD B,A
LD C,(HL)
JR NC,BLOKRD7
LD B,0
ADD A,(HL) ;0 AND CF
LD C,A
OR A ;CLEAR CF
RET Z
BLOKRD7 EX DE,HL
PUSH BC
CALL R_F_FAT
POP BC
JP C,ECL1 ;R01?
EX DE,HL
PUSH HL
PUSH BC
CALL NSECTOR
LD DE,(READ.MEM)
LD A,(FatBuffer.DRIVE)
LD B,C
LD C,Dss.DRV.Read
RST ToDSS.DRV
JP C,BLOKRD0
POP BC
LD HL,(READ.MEM)
LD DE,(CORE_BUFFERS.BootSector.B_P_S)
BLOKRD8 ADD HL,DE
DEC C
JR NZ,BLOKRD8
LD (READ.MEM),HL
POP DE
JR BLOKRD6
ECL1 AND A
RET
;-----------------------------------------------------------------------
BLOK_WR.Error:
POP BC
;[x] SAVE CLUSTER AFTER WRITE ;!TEST
POP BC
;
BLOK_WR.ErrorWrite:
POP BC
POP DE
LD A,DSS_Error.sys.WRITE_ERROR
SCF
RET
;
;WRITE SECTORS OF FILE
;HL:DE - FP (in sectors), IX - data in RAM
; B - Amount sectors
BLOK_WR:
PUSH BC
LD (READ.MEM),IX
LD A,(CORE_BUFFERS.BootSector.S_P_C) ;SECTORS PER CLUSTER
LD C,A
LD B,0
;HL:DE / BC => DE:IX HL-OSTATOK
CALL DIV_for_SPC
LD B,XH
LD C,XL
PUSH HL ;RESIDUE
LD L,(IY+_sFM.ST_CLUSTER) ;START CLUSTER
LD H,(IY+_sFM.ST_CLUSTER+1)
LD A,H
OR L
;[x] SAVE CLUSTER AFTER WRITE ;!TEST
;JR NZ,BLOKWR2
PUSH BC
JR NZ,.saveClustersOffset
;
PUSH BC
CALL G_CLUST
JR C,.Error
LD (IY+_sFM.ST_CLUSTER),L
LD (IY+_sFM.ST_CLUSTER+1),H
LD DE,(FatBuffer.ENDCLUS)
CALL W_T_FAT
PUSH HL
;!TEST ;!TODO 2/12/23 [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WR_FAT?
;CALL WR_FAT ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
;
POP HL
POP BC
JP .WR2
.saveClustersOffset:
;[x] SAVE CLUSTER AFTER WRITE ;!TEST
LD E,(IY+_sFM.KnownCluster_L)
LD D,(IY+_sFM.KnownCluster_H)
LD A,D
OR E
JR Z,.WR2
;
PUSH DE
PUSH HL
PUSH BC
LD E,(IY+_sFM.KnownOffset_L)
LD D,(IY+_sFM.KnownOffset_H)
LD A,D
OR E
JR Z,.noOptimization_1
;
POP HL
AND A
SBC HL,DE
JR C,.noOptimization_2
;
LD C,L
LD B,H
POP HL
POP DE
;
EX DE,HL
JP .WR2
.noOptimization_1:
POP BC
.noOptimization_2:
POP HL
POP DE
JP .WR2
;
.loop: PUSH BC
CALL R_F_FAT
JR NC,.WRB
PUSH HL
CALL INC_FAT
POP HL
JR C,.Error
CALL R_F_FAT
.WRB: POP BC
EX DE,HL
DEC BC
.WR2: LD A,B
OR C
JR NZ,.loop
;[x] SAVE CLUSTER AFTER WRITE ;!TEST
LD (IY+_sFM.KnownCluster_L),L
LD (IY+_sFM.KnownCluster_H),H
POP BC
LD (IY+_sFM.KnownOffset_L),C
LD (IY+_sFM.KnownOffset_H),B
;
POP DE
POP BC
LD A,(CORE_BUFFERS.BootSector.S_P_C)
SUB E
LD C,A
CP B
JR C,.WR3 ;SIZE > RESIDUE CLUSTER
LD C,B ;SIZE < CLUSTER
.WR3: LD A,B
SUB C
LD B,A
PUSH HL
PUSH BC
PUSH DE
CALL NSECTOR
POP DE
ADD IX,DE
JR NC,.WR4
INC HL
; DOUBLE 1
.WR4: LD DE,(READ.MEM)
LD A,(FatBuffer.DRIVE)
LD B,C
LD C,Dss.DRV.Write
RST ToDSS.DRV
JP C,.ErrorWrite
POP BC
LD HL,(READ.MEM)
LD DE,(CORE_BUFFERS.BootSector.B_P_S)
;
.loop2: ADD HL,DE
DEC C
JR NZ,.loop2
;
LD (READ.MEM),HL
POP DE
;
LD A,B
OR A
RET Z
;
.big_loop:
LD HL,CORE_BUFFERS.BootSector.S_P_C
LD A,B
SUB (HL)
LD B,A
LD C,(HL)
JR NC,.WR7
LD B,0
ADD A,(HL) ;0 AND CF
LD C,A
OR A ;CLEAR CF
RET Z
.WR7: EX DE,HL
PUSH BC
CALL R_F_FAT
JR NC,.WR9
PUSH HL
CALL INC_FAT
POP HL
JR C,.ErrorFull
CALL R_F_FAT
.WR9: POP BC
EX DE,HL
PUSH HL
PUSH BC
CALL NSECTOR
; DOUBLE 1
LD DE,(READ.MEM)
LD A,(FatBuffer.DRIVE)
LD B,C
LD C,Dss.DRV.Write
RST ToDSS.DRV
JP C,.ErrorWrite
POP BC
LD HL,(READ.MEM)
LD DE,(CORE_BUFFERS.BootSector.B_P_S)
.loop3: ADD HL,DE
DEC C
JR NZ,.loop3
LD (READ.MEM),HL
POP DE
;
JR .big_loop
;
.ErrorFull:
POP BC
LD A,DSS_Error.sys.DISK_FULL
SCF
RET
TSTSIZE:
XOR A
LD (READ.COD),A
LD L,(IY+_sFM.F_POSITION) ;FP LOW
LD H,(IY+_sFM.F_POSITION+1)
ADD HL,DE
;
EXX
;LD DE,0 ;!TEST
LD L,(IY+_sFM.F_POSITION+2) ;FP HIGH
LD H,(IY+_sFM.F_POSITION+3)
;!TEST
JR NC,.no_inc_hl
INC HL
;ADC HL,DE
;
.no_inc_hl:
EXX ;HL':HL - NEW FP
;
LD C,(IY+_sFM.F_SIZE)
LD B,(IY+_sFM.F_SIZE+1) ;SIZE LOW
AND A
SBC HL,BC
EXX
LD C,(IY+_sFM.F_SIZE+2) ;SIZE HIGH
LD B,(IY+_sFM.F_SIZE+3)
SBC HL,BC
EXX
RET C ;OK READ ALL
EX DE,HL
SBC HL,DE ;VERY BIG
EX DE,HL
LD A,#FF
LD (READ.COD),A
RET
; HL - ADDRESS
; DE - SIZE
; A - FM
;READ_FN:
; _mSavePath 1
; HL - ADDRESS
; DE - SIZE
; A - FM
READ: LD (.R_POINT),HL
LD (.S_POINT),HL
CALL SET_FM
RET C
CALL TSTSIZE
;
LD A,D
OR E
JP Z,.NOREAD
;
PUSH DE
LD A,(IY+_sFM.DRIVE)
CALL OPENDSK
JP C,.ERR_1
;<3B> áçñâ ᬥ饭¨ï ¢ ᥪâ®à å
; LD C,(IY+_sFM.F_POSITION)
; LD E,(IY+_sFM.F_POSITION+1)
; LD A,E
; AND #01
; LD B,A
; LD D,(IY+_sFM.F_POSITION+2)
; LD L,(IY+_sFM.F_POSITION+3)
; LD H,0
; OR A
; RR L
; RR D
; RR E
LD H,0
LD L,(IY+_sFM.F_POSITION+3)
LD D,(IY+_sFM.F_POSITION+2)
LD E,(IY+_sFM.F_POSITION+1)
LD A,E
AND #01
LD B,A
LD C,(IY+_sFM.F_POSITION)
;OR A
RR L
RR D
RR E
;HL:DE FP (in sectors)
;BC FP residue (in bytes)
;
;LD A,B
OR C
JP NZ,.ROV1
.ROV4: POP BC
PUSH BC
SRL B
JR Z,.ROV2
LD (.SECTORH),HL
LD (.SECTORL),DE
.R_POINT+2: LD IX,0
CALL BLOK_RD
JP C,.ERR_1
LD DE,(.R_POINT)
.MEM+1: LD HL,0 // LD HL,(READMEM)
AND A
SBC HL,DE
LD C,H
LD B,0
ADD HL,DE
LD (.R_POINT),HL
SRL C
.SECTORL+1: LD HL,0 // LD HL,(SECTORL)
ADD HL,BC
EX DE,HL
.SECTORH+1: LD HL,0 // LD HL,(SECTORH)
LD C,B
ADC HL,BC
.ROV2: POP BC
LD A,B
AND #01
LD B,A
OR C
JP Z,.ROV6
PUSH BC
LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_RD
POP BC
LD C,SLOT3
OUT (C),B
JP C,.ERR_1
LD HL,CORE_BUFFERS.BUFFER
LD DE,(.R_POINT)
POP BC
LDIR
LD (.R_POINT),DE
.ROV6: LD HL,(.R_POINT)
.S_POINT+1: LD DE,0
;EX DE,HL
AND A
SBC HL,DE
PUSH HL
EX DE,HL
LD XH,D
LD XL,E
LD HL,0
CALL MOVE_FP.F_current
POP DE
.NOREAD:
.COD+1: LD A,0
OR A
RET
.ROV1: PUSH BC
PUSH HL
PUSH DE
LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_RD
POP BC
LD C,SLOT3
OUT (C),B
POP HL
JP C,.ERR_3
LD BC,1
ADD HL,BC
EX DE,HL
POP HL
LD C,B
ADC HL,BC
EXX
POP DE
LD HL,512 ;!HARDCODE
AND A
SBC HL,DE
LD B,H
LD C,L
POP HL
AND A
SBC HL,BC
JR NC,.ROV3
ADD HL,BC
LD B,H
LD C,L
LD HL,0 ;!TODO ¬®¦­® âãâ ã¯à®áâ¨âì ¤ «ì­¥©èãî ¢¥âªã?
.ROV3: PUSH HL
LD HL,CORE_BUFFERS.BUFFER
ADD HL,DE
LD DE,(.R_POINT)
LDIR
LD (.R_POINT),DE
EXX
JP .ROV4
.ERR_3: POP HL
.ERR_2: POP HL
.ERR_1: POP BC
SCF
RET
PWERR3: POP HL
PWERR2: POP HL
PWERR1: POP BC
SCF
RET
RD_ONLY: POP DE
LD A,DSS_Error.sys.READONLY
SCF
RET
; HL - ADDRESS
; DE - SIZE
; A - FM
WRITE:
;!TEST ;!TODO 5/12/23 [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WR_FAT?
CALL WRITE_
PUSH AF
LD A,(FatCache.Update)
OR A
CALL NZ,WR_FAT ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
POP AF
RET
;
;
WRITE_: LD (.R_POINT),HL
LD (.S_POINT),HL
PUSH DE
CALL SET_FM
JR C,PWERR1
LD A,(IY+_sFM.ACCESS_MODE)
AND FAT_ATTR.READ_ONLY
JR NZ,RD_ONLY
SET 7,(IY+_sFM.ACCESS_MODE)
SET 5,(IY+_sFM.ATTRIBUT)
LD A,(IY+_sFM.DRIVE)
CALL OPENDSK
JR C,PWERR1
;
LD C,(IY+_sFM.F_POSITION)
LD A,(IY+_sFM.F_POSITION+1)
LD E,A
AND #01
LD B,A
LD D,(IY+_sFM.F_POSITION+2)
LD L,(IY+_sFM.F_POSITION+3)
LD H,0
OR A
RR L
RR D
RR E
; HL:DE - FP (in sectors)
; BC - FP residue (in bytes)
LD A,B
OR C
JP NZ,.WOV1
.WOV4: POP BC
PUSH BC
SRL B
JR Z,.WOV2
PUSH HL
PUSH DE
PUSH BC
.R_POINT+2:
LD IX,0
CALL BLOK_WR
POP BC
JR C,PWERR3
LD C,B
LD HL,(.R_POINT)
LD DE,#0200 ;!HARDCODE
.WOV5: ADD HL,DE
DJNZ .WOV5
; B=0
LD (.R_POINT),HL
;LD B,0
POP HL
ADD HL,BC
EX DE,HL
POP HL
LD C,B
ADC HL,BC
.WOV2: POP BC
LD A,B
AND #01
LD B,A
OR C
JR Z,.WOV6
PUSH HL
PUSH DE
PUSH BC
LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_RD
POP BC
LD C,SLOT3
OUT (C),B
LD DE,CORE_BUFFERS.BUFFER
LD HL,(.R_POINT)
POP BC
JP C,PWERR2
LDIR
LD (.R_POINT),HL
POP DE
POP HL
LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_WR
POP BC
LD C,SLOT3
OUT (C),B
RET C
.WOV6: LD HL,(.R_POINT)
.S_POINT+1: LD DE,0
; CF=0
;AND A
SBC HL,DE
PUSH HL
EX DE,HL
LD XH,D
LD XL,E
LD HL,0
CALL MOVE_FP.F_current
CALL MOVE_CP
POP DE
RET NC ; …᫨ à §¬¥à ä ©«  ­  ¤¨áª¥ <20>… áâ « ¡®«ìè¥, 祬 ¡ë«
; …᫨ à §¬¥à ä ©«  ­  ¤¨áª¥ áâ « ¡®«ìè¥, 祬 ¡ë«
LD L,(IY+_sFM.F_POSITION+0)
LD H,(IY+_sFM.F_POSITION+1)
LD C,(IY+_sFM.F_POSITION+2)
LD B,(IY+_sFM.F_POSITION+3)
LD (IY+_sFM.F_SIZE+0),L
LD (IY+_sFM.F_SIZE+1),H
LD (IY+_sFM.F_SIZE+2),C
LD (IY+_sFM.F_SIZE+3),B
AND A
RET
;
.WOV1: PUSH BC
PUSH HL
PUSH DE
LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_RD
POP BC
LD C,SLOT3
OUT (C),B
POP DE
POP HL
EXX
POP DE
JP C,PWERR1
LD HL,512 ;!HARDCODE
AND A
SBC HL,DE
LD B,H
LD C,L
POP HL
AND A
SBC HL,BC
JR NC,.WOV3
ADD HL,BC
LD B,H
LD C,L
LD HL,0
.WOV3: PUSH HL
LD HL,CORE_BUFFERS.BUFFER
ADD HL,DE
LD DE,(.R_POINT)
EX DE,HL
LDIR
LD (.R_POINT),HL
EXX
PUSH HL
PUSH DE
LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_WR
POP BC
LD C,SLOT3
OUT (C),B
POP HL
JP C,PWERR2
LD BC,1
ADD HL,BC
EX DE,HL
POP HL
LD C,B
ADC HL,BC
JP .WOV4
////////////// OLD ////////////////
; HL - CLUSTER
; HL:IX - SECTOR
; NSECTOR: DEC HL
; DEC HL
; EX DE,HL
; LD A,(CORE_BUFFERS.BootSector.S_P_C)
; LD B,A
; LD HL,0
; LD IX,0
; ADD_DE1: ADD IX,DE
; JR NC,ADD_DE2
; INC HL
; ADD_DE2: DJNZ ADD_DE1
; LD DE,(FatBuffer.DAT_FRM) ;first data sector
; ADD IX,DE
; LD DE,#0000
; ADC HL,DE
; RET
////////////// NEW //////////////////
; in: HL - CLUSTER
; out: HL:IX - SECTOR
NSECTOR:
LD DE,0
DEC HL
DEC HL
LD A,(CORE_BUFFERS.BootSector.S_P_C)
XOR 1
JR Z,.skip
;
RRA
.loop: ADD HL,HL
RL E
RL D
;
RRA
JP NC,.loop
;
.skip: EX DE,HL
LD XL,E
LD XH,D
LD DE,(FatBuffer.DAT_FRM) ;first data sector
XOR A
ADD IX,DE
LD D,A
LD E,A
ADC HL,DE
;!TODO   ­ ¤® «¨ ¯à®¢¥àïâì ¯¥à¥¯®«­¥­¨¥ HL:IX?
RET
/////////////////////////////////////
; HL:DE / C => DE:IX HL-OSTATOK (DE:BC.HL). ‹¥£ª® ¯¥à¥¤¥« âì ¯®¤ HL:DE / A => HL:DE.A
DIV_for_SPC:

View File

@ -196,8 +196,7 @@ TMPNAME: DZ ' ' ; 12
;----------------------------------------------------------------------;
; IN: A - drive number
;
OPENDSK:
;!TEST DRV.Open ®¡å®¤ R10
OPENDSK:;!TEST DRV.Open ®¡å®¤ R10
LD C,A
LD A,(FatBuffer.DRIVE)
CP C

View File

@ -485,7 +485,7 @@ SAVEDIR:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; !FIXIT çñâ ­¥ ¨á¯®«ì§ã¥âáï
IF COMPILE_UNUSED_CODE
TESTDSK:
TESTDSK: ;????? ¢®§¬®¦­®, çâ® âãâ «®£¨ç­¥¥, 祬 ¢ ­ ç «¥ OPENDSK, ¥á«¨ ¡ã¤¥â à ¡®â âì Dss.DRV.Open
LD A,(FatBuffer.DRIVE)
LD C,Dss.DRV.MediaCheck
RST ToDSS.DRV

View File

@ -33,7 +33,8 @@ G_CLUST:
RET
; HL - CLUSTER
INC_FAT PUSH HL
INC_FAT:
PUSH HL
CALL G_CLUST
POP DE
RET C
@ -53,7 +54,7 @@ INC_FAT PUSH HL
POP HL
LD DE,(FatBuffer.ENDCLUS) ; ­®¬¥à ª« áâ¥à 
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
;!TEST ;!TODO 2/12/23 [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WR_FAT?
;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WR_FAT?
;CALL WR_FAT ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
;
AND A
@ -281,7 +282,7 @@ W_T_F12: ;!FIXIT
CALL GET_FAT12_CELL
POP DE
JP C,W_T_F01 ; ­®¬¥à ­¥çñâ­ë©
JR C,W_T_F01 ; ­®¬¥à ­¥çñâ­ë©
LD (HL),E
INC HL
LD A,(HL)
@ -299,16 +300,23 @@ W_T_F12: ;!FIXIT
RET
;
W_T_F01:; ¢«¥¢® ­  4 ¡¨âa
SLA E
LD A,E
RL D
RLA
RL D
RLA
RL D
RLA
RL D
LD E,A
;SLA E
;LD A,E
;RL D
;RLA
;RL D
;RLA
;RL D
;RLA
;RL D
;LD E,A
;
ex de,hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl
ex de,hl
;
LD A,(HL)
AND #0F
@ -390,7 +398,7 @@ WR_FAT: SET_PAGE_X FATPAGE
LD HL,FAT_CACHE.Sectors
; CF = 0
SBC HL,DE
JP C,.ERR
JR C,.ERR
LD A,L
.WALLFAT:; !TODO çñ¡ áà §ã ¢ IX ­¥ £à㧨âì FAT_FRM?
LD H,B
@ -473,33 +481,33 @@ GET_FAT12_CELL:
PUSH AF ; á®åà. ä« £
ADD HL,DE ; CLUSTER * 1.5
;
;!FIXIT ®¯â¨¬¨§¨à®¢ âì
;IF COMPILE_UNUSED_CODE
LD A,H
LD B,H
;
AND #1F
;AND FAT_CACHE.Size_Mask_16
;
;!FIXIT ®¯â¨¬¨§¨à®¢ âì
LD A,H
LD B,H
;
AND #1F
;AND FAT_CACHE.Size_Mask_16
;
LD H,A
LD A,B
LD H,A
LD A,B
;
RLCA
RLCA
RLCA
;DUP FAT_CACHE.Degree_16
; RRCA
;EDUP
AND #07
;AND FAT_CACHE.Part_Mask_16
;
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
CP C
CALL NZ,READ_FAT ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
;
RLCA
RLCA
RLCA
;DUP FAT_CACHE.Degree_16
; RRCA
;EDUP
AND #07
;AND FAT_CACHE.Part_Mask_16
;
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
CP C
CALL NZ,READ_FAT ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
;ENDIF
;
LD DE,FATPAGE.cache
@ -508,6 +516,392 @@ GET_FAT12_CELL:
RET
; in: HL - CLUSTER
; out: HL:IX - SECTOR
NSECTOR:
LD DE,0
DEC HL
DEC HL
LD A,(CORE_BUFFERS.BootSector.S_P_C)
XOR 1
JR Z,.skip
;
RRA
.loop: ADD HL,HL
RL E
RL D
;
RRA
JP NC,.loop
;
.skip: EX DE,HL
LD XL,E
LD XH,D
LD DE,(FatBuffer.DAT_FRM) ;first data sector
XOR A
ADD IX,DE
LD D,A
LD E,A
ADC HL,DE
;!TODO   ­ ¤® «¨ ¯à®¢¥àïâì ¯¥à¥¯®«­¥­¨¥ HL:IX?
RET
////////////////////////////////////////////////////////////////////////
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
MACRO _GetSavedCluster exit_to
LD E,(IY+_sFM.KnownCluster_L)
LD D,(IY+_sFM.KnownCluster_H)
LD A,D
OR E
JR Z,exit_to
;
PUSH DE
PUSH HL
PUSH BC
LD E,(IY+_sFM.KnownOffset_L)
LD D,(IY+_sFM.KnownOffset_H)
LD A,D
OR E
JR Z,.noOptimization_1
;
POP HL
AND A
SBC HL,DE
JR C,.noOptimization_2
;
LD C,L
LD B,H
POP HL
POP DE
;
EX DE,HL
JP exit_to
.noOptimization_1:
POP BC
.noOptimization_2:
POP HL
POP DE
JP exit_to
ENDM
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
MACRO _SaveGetedCluster
LD (IY+_sFM.KnownCluster_L),L
LD (IY+_sFM.KnownCluster_H),H
POP BC
LD (IY+_sFM.KnownOffset_L),C
LD (IY+_sFM.KnownOffset_H),B
ENDM
;;
BLOK_RD.ECL2:
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
POP BC
;
POP BC
POP DE
AND A
RET
;
;READ SECTORS OF FILE
;HL:DE - FP (in sectors)
; B - Amount sectors
BLOK_RD: PUSH BC
LD (READ.PointerOnBuffer),IX
LD A,(CORE_BUFFERS.BootSector.S_P_C) ;SECTORS PER CLUSTER
LD C,A
LD B,0 ;!FIXIT
;HL:DE / BC => DE:IX HL-OSTATOK
CALL DIV_for_SPC
;!FIXIT ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - à §¤¥« ­¥ ¡®«ìè¥ 2Gb
LD B,XH
LD C,XL
PUSH HL ;RESIDUE
LD L,(IY+_sFM.ST_CLUSTER) ;START CLUSTER
LD H,(IY+_sFM.ST_CLUSTER+1)
LD A,H
OR L
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
;JR NZ,BLOKRD2
PUSH BC
JR Z,.ECL2
;JP ECL2 ;R01 JR BLOKRD0
_GetSavedCluster .enter_loop1
;
.loop1: PUSH BC
CALL R_F_FAT
POP BC
JR C,.ECL2 ;R01
EX DE,HL
DEC BC
.enter_loop1:
LD A,B ; - ᬥ饭¨¥ ¢­ãâਠ䠩«  ¢ ª« áâ¥à å
OR C
JR NZ,.loop1
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
_SaveGetedCluster
;
POP DE
POP BC
LD A,(CORE_BUFFERS.BootSector.S_P_C)
SUB E
LD C,A ;\
CP B ; \
JR C,.skip1 ;SIZE > RESIDUE CLUSTER ; \
LD C,B ;SIZE < CLUSTER ;->-|--> ; !TODO à §®¡à âìáï
.skip1: LD A,B ; /
SUB C ; /
LD B,A ;/
PUSH HL
PUSH BC
PUSH DE
CALL NSECTOR
POP DE
ADD IX,DE
JR NC,.skip2
INC HL
.skip2: LD DE,(READ.PointerOnBuffer)
LD A,(FatBuffer.DRIVE)
LD B,C
LD C,Dss.DRV.Read
RST ToDSS.DRV
JR C,.Error
POP BC
LD HL,(READ.PointerOnBuffer)
LD DE,(CORE_BUFFERS.BootSector.B_P_S)
;!TEST
LD A,B
LD B,C
.loop2: ADD HL,DE
;DEC C
;JR NZ,.loop2
DJNZ .loop2
LD (READ.PointerOnBuffer),HL
POP DE
;LD A,B
OR A
RET Z
LD B,A
;
.loop4: LD HL,CORE_BUFFERS.BootSector.S_P_C
LD A,B
SUB (HL)
LD B,A
LD C,(HL)
JR NC,.BLOKRD7
LD B,0
ADD A,(HL) ;0 AND CF
LD C,A
OR A ;CLEAR CF
RET Z
.BLOKRD7:
EX DE,HL
PUSH BC
CALL R_F_FAT
POP BC
JR C,.ECL1 ;R01?
EX DE,HL
PUSH HL
PUSH BC
CALL NSECTOR
LD DE,(READ.PointerOnBuffer)
LD A,(FatBuffer.DRIVE)
LD B,C
LD C,Dss.DRV.Read
RST ToDSS.DRV
JR C,.Error
POP BC
LD HL,(READ.PointerOnBuffer)
LD DE,(CORE_BUFFERS.BootSector.B_P_S)
.loop3: ADD HL,DE
DEC C
JR NZ,.loop3
LD (READ.PointerOnBuffer),HL
POP DE
JP .loop4
;
.Error: POP BC
POP DE
;SCF
RET
;
.ECL1: AND A
RET
;-----------------------------------------------------------------------
; BLOK_WR.Error:
; POP BC
; ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
; POP BC
;
; BLOK_WR.ErrorWrite:
; POP BC
; POP DE
; LD A,DSS_Error.sys.WRITE_ERROR
; SCF
; RET
;
;WRITE SECTORS OF FILE
;HL:DE - FP (in sectors), IX - data in RAM
; B - Amount sectors
BLOK_WR:
PUSH BC
LD (READ.PointerOnBuffer),IX
LD A,(CORE_BUFFERS.BootSector.S_P_C) ;SECTORS PER CLUSTER
LD C,A
LD B,0
;HL:DE / BC => DE:IX HL-OSTATOK
CALL DIV_for_SPC
LD B,XH
LD C,XL
PUSH HL ;RESIDUE
LD L,(IY+_sFM.ST_CLUSTER) ;START CLUSTER
LD H,(IY+_sFM.ST_CLUSTER+1)
LD A,H
OR L
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
;JR NZ,BLOKWR2
PUSH BC
JR NZ,.GetSavedCluster
;
PUSH BC
CALL G_CLUST
JP C,.Error
LD (IY+_sFM.ST_CLUSTER),L
LD (IY+_sFM.ST_CLUSTER+1),H
LD DE,(FatBuffer.ENDCLUS)
CALL W_T_FAT
PUSH HL
;!TEST ;!TODO 2/12/23 [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WR_FAT?
;CALL WR_FAT ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
;
POP HL
POP BC
JP .WR2
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
.GetSavedCluster:
_GetSavedCluster .WR2
;
.loop: PUSH BC
CALL R_F_FAT
JR NC,.WRB
PUSH HL
CALL INC_FAT
POP HL
JP C,.Error
CALL R_F_FAT
.WRB: POP BC
EX DE,HL
DEC BC
.WR2: LD A,B
OR C
JR NZ,.loop
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
_SaveGetedCluster
;
POP DE
POP BC
LD A,(CORE_BUFFERS.BootSector.S_P_C)
SUB E
LD C,A
CP B
JR C,.WR3 ;SIZE > RESIDUE CLUSTER
LD C,B ;SIZE < CLUSTER
.WR3: LD A,B
SUB C
LD B,A
PUSH HL
PUSH BC
PUSH DE
CALL NSECTOR
POP DE
ADD IX,DE
JR NC,.WR4
INC HL
; DOUBLE 1
.WR4: LD DE,(READ.PointerOnBuffer)
LD A,(FatBuffer.DRIVE)
LD B,C
LD C,Dss.DRV.Write
RST ToDSS.DRV
JR C,.ErrorWrite
POP BC
LD HL,(READ.PointerOnBuffer)
LD DE,(CORE_BUFFERS.BootSector.B_P_S)
;
.loop2: ADD HL,DE
DEC C
JR NZ,.loop2
;
LD (READ.PointerOnBuffer),HL
POP DE
;
LD A,B
OR A
RET Z
;
.big_loop:
LD HL,CORE_BUFFERS.BootSector.S_P_C
LD A,B
SUB (HL)
LD B,A
LD C,(HL)
JR NC,.WR7
LD B,0
ADD A,(HL) ;0 AND CF
LD C,A
OR A ;CLEAR CF
RET Z
.WR7: EX DE,HL
PUSH BC
CALL R_F_FAT
JR NC,.WR9
PUSH HL
CALL INC_FAT
POP HL
JR C,.ErrorFull
CALL R_F_FAT
.WR9: POP BC
EX DE,HL
PUSH HL
PUSH BC
CALL NSECTOR
; DOUBLE 1
LD DE,(READ.PointerOnBuffer)
LD A,(FatBuffer.DRIVE)
LD B,C
LD C,Dss.DRV.Write
RST ToDSS.DRV
JR C,.ErrorWrite
POP BC
LD HL,(READ.PointerOnBuffer)
LD DE,(CORE_BUFFERS.BootSector.B_P_S)
.loop3: ADD HL,DE
DEC C
JR NZ,.loop3
LD (READ.PointerOnBuffer),HL
POP DE
;
JP .big_loop
;
.Error: POP BC
POP BC ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
.ErrorWrite:
POP BC
POP DE
LD A,DSS_Error.sys.WRITE_ERROR
;SCF
RET
;
.ErrorFull:
POP BC
LD A,DSS_Error.sys.DISK_FULL
;SCF
RET
////////////////////////////////////////////////////////////////////////
FatCache: WORD #0000
.Block EQU FatCache
.Update EQU FatCache+1
@ -629,4 +1023,25 @@ FAT_Max_Cluster: WORD #0FF0 ;
; LD C,6
; RST #18
; RET
////////////// OLD ////////////////
; HL - CLUSTER
; HL:IX - SECTOR
; NSECTOR: DEC HL
; DEC HL
; EX DE,HL
; LD A,(CORE_BUFFERS.BootSector.S_P_C)
; LD B,A
; LD HL,0
; LD IX,0
; ADD_DE1: ADD IX,DE
; JR NC,ADD_DE2
; INC HL
; ADD_DE2: DJNZ ADD_DE1
; LD DE,(FatBuffer.DAT_FRM) ;first data sector
; ADD IX,DE
; LD DE,#0000
; ADC HL,DE
; RET
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -1 +1 @@
790
805

View File

@ -15,7 +15,7 @@
define _shift _bit&1)) + _bit&2)) + _bit&4)) + _bit&8)) + _bit&16)) + _bit&32)) + _bit&64)) + _bit&128))
;
FAT_CACHE:
.Size EQU #1000
.Size EQU #2000
.Sector_Size EQU #200
.Sectors EQU .Size / .Sector_Size
; for FAT16

View File

@ -1 +1 @@
288
289