mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-18 10:50:34 +03:00
...
This commit is contained in:
parent
81595cbb58
commit
2a6d817a9d
@ -55,6 +55,9 @@
|
|||||||
include 'API/MkDir.asm'
|
include 'API/MkDir.asm'
|
||||||
include 'API/RmDir.asm'
|
include 'API/RmDir.asm'
|
||||||
include 'API/DosName.asm'
|
include 'API/DosName.asm'
|
||||||
|
include 'API/Read.asm'
|
||||||
|
include 'API/Write.asm'
|
||||||
|
|
||||||
|
|
||||||
;R09
|
;R09
|
||||||
;„ã¡«ì - CHNDISK = OPENDSK
|
;„ã¡«ì - CHNDISK = OPENDSK
|
||||||
|
|||||||
199
DSS/API/Read.asm
Normal file
199
DSS/API/Read.asm
Normal 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
208
DSS/API/Write.asm
Normal 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
|
||||||
|
;
|
||||||
834
DSS/DOS_FM.ASM
834
DSS/DOS_FM.ASM
@ -177,840 +177,6 @@ MOVE_CP:
|
|||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
RET
|
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
|
; HL:DE / C => DE:IX HL-OSTATOK (DE:BC.HL). ‹¥£ª® ¯¥à¥¤¥« âì ¯®¤ HL:DE / A => HL:DE.A
|
||||||
DIV_for_SPC:
|
DIV_for_SPC:
|
||||||
|
|||||||
@ -196,8 +196,7 @@ TMPNAME: DZ ' ' ; 12
|
|||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
; IN: A - drive number
|
; IN: A - drive number
|
||||||
;
|
;
|
||||||
OPENDSK:
|
OPENDSK:;!TEST DRV.Open ®¡å®¤ R10
|
||||||
;!TEST DRV.Open ®¡å®¤ R10
|
|
||||||
LD C,A
|
LD C,A
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(FatBuffer.DRIVE)
|
||||||
CP C
|
CP C
|
||||||
|
|||||||
@ -485,7 +485,7 @@ SAVEDIR:
|
|||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
; !FIXIT çñâ ¥ ¨á¯®«ì§ã¥âáï
|
; !FIXIT çñâ ¥ ¨á¯®«ì§ã¥âáï
|
||||||
IF COMPILE_UNUSED_CODE
|
IF COMPILE_UNUSED_CODE
|
||||||
TESTDSK:
|
TESTDSK: ;????? ¢®§¬®¦®, çâ® âãâ «®£¨ç¥¥, 祬 ¢ ç «¥ OPENDSK, ¥á«¨ ¡ã¤¥â à ¡®â âì Dss.DRV.Open
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(FatBuffer.DRIVE)
|
||||||
LD C,Dss.DRV.MediaCheck
|
LD C,Dss.DRV.MediaCheck
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
|
|||||||
@ -33,7 +33,8 @@ G_CLUST:
|
|||||||
RET
|
RET
|
||||||
|
|
||||||
; HL - CLUSTER
|
; HL - CLUSTER
|
||||||
INC_FAT PUSH HL
|
INC_FAT:
|
||||||
|
PUSH HL
|
||||||
CALL G_CLUST
|
CALL G_CLUST
|
||||||
POP DE
|
POP DE
|
||||||
RET C
|
RET C
|
||||||
@ -53,7 +54,7 @@ INC_FAT PUSH HL
|
|||||||
POP HL
|
POP HL
|
||||||
LD DE,(FatBuffer.ENDCLUS) ; ®¬¥à ª« áâ¥à
|
LD DE,(FatBuffer.ENDCLUS) ; ®¬¥à ª« áâ¥à
|
||||||
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||||
;!TEST ;!TODO 2/12/23 [ ] ¡ £ á ¨§¡ëâ®ç®© § ¯¨áìî WR_FAT?
|
;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç®© § ¯¨áìî WR_FAT?
|
||||||
;CALL WR_FAT ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
;CALL WR_FAT ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||||
;
|
;
|
||||||
AND A
|
AND A
|
||||||
@ -281,7 +282,7 @@ W_T_F12: ;!FIXIT
|
|||||||
|
|
||||||
CALL GET_FAT12_CELL
|
CALL GET_FAT12_CELL
|
||||||
POP DE
|
POP DE
|
||||||
JP C,W_T_F01 ; ®¬¥à ¥çñâë©
|
JR C,W_T_F01 ; ®¬¥à ¥çñâë©
|
||||||
LD (HL),E
|
LD (HL),E
|
||||||
INC HL
|
INC HL
|
||||||
LD A,(HL)
|
LD A,(HL)
|
||||||
@ -299,16 +300,23 @@ W_T_F12: ;!FIXIT
|
|||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
W_T_F01:; ¢«¥¢® 4 ¡¨âa
|
W_T_F01:; ¢«¥¢® 4 ¡¨âa
|
||||||
SLA E
|
;SLA E
|
||||||
LD A,E
|
;LD A,E
|
||||||
RL D
|
;RL D
|
||||||
RLA
|
;RLA
|
||||||
RL D
|
;RL D
|
||||||
RLA
|
;RLA
|
||||||
RL D
|
;RL D
|
||||||
RLA
|
;RLA
|
||||||
RL D
|
;RL D
|
||||||
LD E,A
|
;LD E,A
|
||||||
|
;
|
||||||
|
ex de,hl
|
||||||
|
add hl,hl
|
||||||
|
add hl,hl
|
||||||
|
add hl,hl
|
||||||
|
add hl,hl
|
||||||
|
ex de,hl
|
||||||
;
|
;
|
||||||
LD A,(HL)
|
LD A,(HL)
|
||||||
AND #0F
|
AND #0F
|
||||||
@ -390,7 +398,7 @@ WR_FAT: SET_PAGE_X FATPAGE
|
|||||||
LD HL,FAT_CACHE.Sectors
|
LD HL,FAT_CACHE.Sectors
|
||||||
; CF = 0
|
; CF = 0
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JP C,.ERR
|
JR C,.ERR
|
||||||
LD A,L
|
LD A,L
|
||||||
.WALLFAT:; !TODO çñ¡ áà §ã ¢ IX ¥ £à㧨âì FAT_FRM?
|
.WALLFAT:; !TODO çñ¡ áà §ã ¢ IX ¥ £à㧨âì FAT_FRM?
|
||||||
LD H,B
|
LD H,B
|
||||||
@ -473,33 +481,33 @@ GET_FAT12_CELL:
|
|||||||
PUSH AF ; á®åà. ä« £
|
PUSH AF ; á®åà. ä« £
|
||||||
ADD HL,DE ; CLUSTER * 1.5
|
ADD HL,DE ; CLUSTER * 1.5
|
||||||
;
|
;
|
||||||
;!FIXIT ®¯â¨¬¨§¨à®¢ âì
|
|
||||||
;IF COMPILE_UNUSED_CODE
|
;IF COMPILE_UNUSED_CODE
|
||||||
LD A,H
|
;!FIXIT ®¯â¨¬¨§¨à®¢ âì
|
||||||
LD B,H
|
LD A,H
|
||||||
|
LD B,H
|
||||||
|
|
||||||
;
|
;
|
||||||
AND #1F
|
AND #1F
|
||||||
;AND FAT_CACHE.Size_Mask_16
|
;AND FAT_CACHE.Size_Mask_16
|
||||||
;
|
;
|
||||||
|
|
||||||
LD H,A
|
LD H,A
|
||||||
LD A,B
|
LD A,B
|
||||||
|
|
||||||
;
|
;
|
||||||
RLCA
|
RLCA
|
||||||
RLCA
|
RLCA
|
||||||
RLCA
|
RLCA
|
||||||
;DUP FAT_CACHE.Degree_16
|
;DUP FAT_CACHE.Degree_16
|
||||||
; RRCA
|
; RRCA
|
||||||
;EDUP
|
;EDUP
|
||||||
AND #07
|
AND #07
|
||||||
;AND FAT_CACHE.Part_Mask_16
|
;AND FAT_CACHE.Part_Mask_16
|
||||||
;
|
;
|
||||||
|
|
||||||
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
||||||
CP C
|
CP C
|
||||||
CALL NZ,READ_FAT ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-
|
CALL NZ,READ_FAT ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-
|
||||||
;ENDIF
|
;ENDIF
|
||||||
;
|
;
|
||||||
LD DE,FATPAGE.cache
|
LD DE,FATPAGE.cache
|
||||||
@ -508,6 +516,392 @@ GET_FAT12_CELL:
|
|||||||
RET
|
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
|
FatCache: WORD #0000
|
||||||
.Block EQU FatCache
|
.Block EQU FatCache
|
||||||
.Update EQU FatCache+1
|
.Update EQU FatCache+1
|
||||||
@ -629,4 +1023,25 @@ FAT_Max_Cluster: WORD #0FF0 ;
|
|||||||
; LD C,6
|
; LD C,6
|
||||||
; RST #18
|
; RST #18
|
||||||
; RET
|
; 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
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -1 +1 @@
|
|||||||
790
|
805
|
||||||
@ -15,7 +15,7 @@
|
|||||||
define _shift _bit&1)) + _bit&2)) + _bit&4)) + _bit&8)) + _bit&16)) + _bit&32)) + _bit&64)) + _bit&128))
|
define _shift _bit&1)) + _bit&2)) + _bit&4)) + _bit&8)) + _bit&16)) + _bit&32)) + _bit&64)) + _bit&128))
|
||||||
;
|
;
|
||||||
FAT_CACHE:
|
FAT_CACHE:
|
||||||
.Size EQU #1000
|
.Size EQU #2000
|
||||||
.Sector_Size EQU #200
|
.Sector_Size EQU #200
|
||||||
.Sectors EQU .Size / .Sector_Size
|
.Sectors EQU .Size / .Sector_Size
|
||||||
; for FAT16
|
; for FAT16
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
288
|
289
|
||||||
Loading…
Reference in New Issue
Block a user