mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-11-14 11:30:52 +03:00
SAVEDIR, LOADDIR, OPENDIR
This commit is contained in:
1 parent
b515b2429f
commit
53dbf83712
5 files changed
+551
-523
No files matched your search
+183
-187
@@ -1,189 +1,185 @@
|
||||
; HL - ADDRESS
|
||||
; DE - SIZE
|
||||
; HL - BUFFER ADDRESS
|
||||
; DE - BLOCK 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
|
||||
;� áçñâ á¬¥é¥¨ï ¢ ᥪâ®à å
|
||||
LD H,0 ;!HARDCODE max file size = 8 gb
|
||||
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)
|
||||
;
|
||||
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 BLOCK_READ
|
||||
JP C,.ERR_1
|
||||
LD DE,(.R_POINT)
|
||||
READ: LD (.R_POINT),HL
|
||||
LD (.S_POINT),HL
|
||||
CALL SET_FM
|
||||
RET C
|
||||
CALL .TEST_SIZE
|
||||
;
|
||||
LD A,D
|
||||
OR E
|
||||
JP Z,.NOREAD
|
||||
;
|
||||
PUSH DE
|
||||
LD A,(IY+_sFM.DRIVE)
|
||||
CALL OPENDSK
|
||||
JP C,.ERR_1
|
||||
;� áçñâ á¬¥é¥¨ï ¢ ᥪâ®à å ;!HARDCODE sectro size
|
||||
LD H,0 ;!HARDCODE max file size = 8 gb
|
||||
LD E,(IY+_sFM.F_POSITION+1)
|
||||
LD D,(IY+_sFM.F_POSITION+2)
|
||||
LD L,(IY+_sFM.F_POSITION+3)
|
||||
LD A,E
|
||||
AND #01
|
||||
LD B,A
|
||||
LD C,(IY+_sFM.F_POSITION)
|
||||
RR L
|
||||
RR D
|
||||
RR E
|
||||
;HL:DE FP (in sectors)
|
||||
;BC FP residue (in bytes)
|
||||
;
|
||||
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 BLOCK_READ
|
||||
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 BLOCK_READ
|
||||
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 BLOCK_READ
|
||||
POP BC
|
||||
LD C,SLOT3
|
||||
OUT (C),B
|
||||
POP HL
|
||||
JP C,.ERR_3
|
||||
; inc HL:DE
|
||||
LD BC,1
|
||||
ADD HL,BC
|
||||
EX DE,HL
|
||||
POP HL
|
||||
LD C,B
|
||||
ADC HL,BC
|
||||
;
|
||||
EXX
|
||||
POP DE
|
||||
LD HL,512 ;!HARDCODE sector size!
|
||||
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.FS_REC.F_SIZE)
|
||||
LD B,(IY+_sFM.FS_REC.F_SIZE+1) ;SIZE LOW
|
||||
AND A
|
||||
SBC HL,BC
|
||||
EXX
|
||||
LD C,(IY+_sFM.FS_REC.F_SIZE+2) ;SIZE HIGH
|
||||
LD B,(IY+_sFM.FS_REC.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
|
||||
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 BLOCK_READ
|
||||
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 BLOCK_READ
|
||||
POP BC
|
||||
LD C,SLOT3
|
||||
OUT (C),B
|
||||
POP HL
|
||||
JP C,.ERR_3
|
||||
; inc HL:DE
|
||||
LD BC,1
|
||||
ADD HL,BC
|
||||
EX DE,HL
|
||||
POP HL
|
||||
LD C,B
|
||||
ADC HL,BC
|
||||
;
|
||||
EXX
|
||||
POP DE
|
||||
LD HL,512 ;!HARDCODE sector size!
|
||||
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
|
||||
;
|
||||
.TEST_SIZE: 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.FS_REC.F_SIZE)
|
||||
LD B,(IY+_sFM.FS_REC.F_SIZE+1) ;SIZE LOW
|
||||
AND A
|
||||
SBC HL,BC
|
||||
EXX
|
||||
LD C,(IY+_sFM.FS_REC.F_SIZE+2) ;SIZE HIGH
|
||||
LD B,(IY+_sFM.FS_REC.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
|
||||
Reference in new issue
Block a user