mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
SAVEDIR, LOADDIR, OPENDIR
This commit is contained in:
parent
b515b2429f
commit
53dbf83712
370
DSS/API/Read.asm
370
DSS/API/Read.asm
@ -1,189 +1,185 @@
|
|||||||
; HL - ADDRESS
|
; HL - BUFFER ADDRESS
|
||||||
; DE - SIZE
|
; DE - BLOCK 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 .TEST_SIZE
|
||||||
;
|
;
|
||||||
LD A,D
|
LD A,D
|
||||||
OR E
|
OR E
|
||||||
JP Z,.NOREAD
|
JP Z,.NOREAD
|
||||||
;
|
;
|
||||||
PUSH DE
|
PUSH DE
|
||||||
LD A,(IY+_sFM.DRIVE)
|
LD A,(IY+_sFM.DRIVE)
|
||||||
CALL OPENDSK
|
CALL OPENDSK
|
||||||
JP C,.ERR_1
|
JP C,.ERR_1
|
||||||
;<3B> áçñâ á¬¥é¥¨ï ¢ ᥪâ®à å
|
;<3B> áçñâ á¬¥é¥¨ï ¢ ᥪâ®à å ;!HARDCODE sectro size
|
||||||
LD H,0 ;!HARDCODE max file size = 8 gb
|
LD H,0 ;!HARDCODE max file size = 8 gb
|
||||||
LD L,(IY+_sFM.F_POSITION+3)
|
LD E,(IY+_sFM.F_POSITION+1)
|
||||||
LD D,(IY+_sFM.F_POSITION+2)
|
LD D,(IY+_sFM.F_POSITION+2)
|
||||||
LD E,(IY+_sFM.F_POSITION+1)
|
LD L,(IY+_sFM.F_POSITION+3)
|
||||||
LD A,E
|
LD A,E
|
||||||
AND #01
|
AND #01
|
||||||
LD B,A
|
LD B,A
|
||||||
LD C,(IY+_sFM.F_POSITION)
|
LD C,(IY+_sFM.F_POSITION)
|
||||||
;OR A
|
RR L
|
||||||
RR L
|
RR D
|
||||||
RR D
|
RR E
|
||||||
RR E
|
;HL:DE FP (in sectors)
|
||||||
;HL:DE FP (in sectors)
|
;BC FP residue (in bytes)
|
||||||
;BC FP residue (in bytes)
|
;
|
||||||
;
|
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
|
.R_POINT+2: LD IX,0
|
||||||
.R_POINT+2: LD IX,0
|
CALL BLOCK_READ
|
||||||
CALL BLOCK_READ
|
JP C,.ERR_1
|
||||||
JP C,.ERR_1
|
LD DE,(.R_POINT)
|
||||||
LD DE,(.R_POINT)
|
|
||||||
.PointerOnBuffer+1:
|
.PointerOnBuffer+1:
|
||||||
LD HL,0 // LD HL,(READMEM)
|
LD HL,0 // LD HL,(READMEM)
|
||||||
AND A
|
AND A
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
LD C,H
|
LD C,H
|
||||||
LD B,0
|
LD B,0
|
||||||
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,CORE_BUFFERS.BUFFER+#C000
|
LD IX,CORE_BUFFERS.BUFFER+#C000
|
||||||
LD B,1
|
LD B,1
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
PUSH AF
|
PUSH AF
|
||||||
IN A,(SLOT0)
|
IN A,(SLOT0)
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
CALL BLOCK_READ
|
CALL BLOCK_READ
|
||||||
POP BC
|
POP BC
|
||||||
LD C,SLOT3
|
LD C,SLOT3
|
||||||
OUT (C),B
|
OUT (C),B
|
||||||
JP C,.ERR_1
|
JP C,.ERR_1
|
||||||
LD HL,CORE_BUFFERS.BUFFER
|
LD HL,CORE_BUFFERS.BUFFER
|
||||||
LD DE,(.R_POINT)
|
LD DE,(.R_POINT)
|
||||||
POP BC
|
POP BC
|
||||||
LDIR
|
LDIR
|
||||||
LD (.R_POINT),DE
|
LD (.R_POINT),DE
|
||||||
.ROV6: LD HL,(.R_POINT)
|
.ROV6: LD HL,(.R_POINT)
|
||||||
.S_POINT+1: LD DE,0
|
.S_POINT+1: LD DE,0
|
||||||
;EX DE,HL
|
;EX DE,HL
|
||||||
AND A
|
AND A
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
PUSH HL
|
PUSH HL
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD XH,D
|
LD XH,D
|
||||||
LD XL,E
|
LD XL,E
|
||||||
LD HL,0
|
LD HL,0
|
||||||
CALL MOVE_FP.F_current
|
CALL MOVE_FP.F_current
|
||||||
POP DE
|
POP DE
|
||||||
.NOREAD:
|
.NOREAD: ;
|
||||||
.COD+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,CORE_BUFFERS.BUFFER+#C000
|
LD IX,CORE_BUFFERS.BUFFER+#C000
|
||||||
LD B,1
|
LD B,1
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
PUSH AF
|
PUSH AF
|
||||||
IN A,(SLOT0)
|
IN A,(SLOT0)
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
CALL BLOCK_READ
|
CALL BLOCK_READ
|
||||||
POP BC
|
POP BC
|
||||||
LD C,SLOT3
|
LD C,SLOT3
|
||||||
OUT (C),B
|
OUT (C),B
|
||||||
POP HL
|
POP HL
|
||||||
JP C,.ERR_3
|
JP C,.ERR_3
|
||||||
; inc HL:DE
|
; inc HL:DE
|
||||||
LD BC,1
|
LD BC,1
|
||||||
ADD HL,BC
|
ADD HL,BC
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
POP HL
|
POP HL
|
||||||
LD C,B
|
LD C,B
|
||||||
ADC HL,BC
|
ADC HL,BC
|
||||||
;
|
;
|
||||||
EXX
|
EXX
|
||||||
POP DE
|
POP DE
|
||||||
LD HL,512 ;!HARDCODE sector size!
|
LD HL,512 ;!HARDCODE sector size!
|
||||||
AND A
|
AND A
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
LD B,H
|
LD B,H
|
||||||
LD C,L
|
LD C,L
|
||||||
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 ;!TODO ¬®¦® âãâ ã¯à®áâ¨âì ¤ «ì¥©èãî ¢¥âªã?
|
LD HL,0 ;!TODO ¬®¦® âãâ ã¯à®áâ¨âì ¤ «ì¥©èãî ¢¥âªã?
|
||||||
.ROV3: PUSH HL
|
.ROV3: PUSH HL
|
||||||
LD HL,CORE_BUFFERS.BUFFER
|
LD HL,CORE_BUFFERS.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
|
;
|
||||||
.ERR_2: POP HL
|
.ERR_3: POP HL
|
||||||
.ERR_1: POP BC
|
.ERR_2: POP HL
|
||||||
SCF
|
.ERR_1: POP BC
|
||||||
RET
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.TEST_SIZE: XOR A
|
||||||
TSTSIZE:
|
LD (READ.COD),A
|
||||||
XOR A
|
LD L,(IY+_sFM.F_POSITION) ;FP LOW
|
||||||
LD (READ.COD),A
|
LD H,(IY+_sFM.F_POSITION+1)
|
||||||
LD L,(IY+_sFM.F_POSITION) ;FP LOW
|
ADD HL,DE
|
||||||
LD H,(IY+_sFM.F_POSITION+1)
|
;
|
||||||
ADD HL,DE
|
EXX
|
||||||
;
|
;LD DE,0 ;!TEST
|
||||||
EXX
|
LD L,(IY+_sFM.F_POSITION+2) ;FP HIGH
|
||||||
;LD DE,0 ;!TEST
|
LD H,(IY+_sFM.F_POSITION+3)
|
||||||
LD L,(IY+_sFM.F_POSITION+2) ;FP HIGH
|
;!TEST
|
||||||
LD H,(IY+_sFM.F_POSITION+3)
|
JR NC,.no_inc_hl
|
||||||
;!TEST
|
INC HL
|
||||||
JR NC,.no_inc_hl
|
;ADC HL,DE
|
||||||
INC HL
|
;
|
||||||
;ADC HL,DE
|
.no_inc_hl: EXX ;HL':HL - NEW FP
|
||||||
;
|
;
|
||||||
.no_inc_hl:
|
LD C,(IY+_sFM.FS_REC.F_SIZE)
|
||||||
EXX ;HL':HL - NEW FP
|
LD B,(IY+_sFM.FS_REC.F_SIZE+1) ;SIZE LOW
|
||||||
;
|
AND A
|
||||||
LD C,(IY+_sFM.FS_REC.F_SIZE)
|
SBC HL,BC
|
||||||
LD B,(IY+_sFM.FS_REC.F_SIZE+1) ;SIZE LOW
|
EXX
|
||||||
AND A
|
LD C,(IY+_sFM.FS_REC.F_SIZE+2) ;SIZE HIGH
|
||||||
SBC HL,BC
|
LD B,(IY+_sFM.FS_REC.F_SIZE+3)
|
||||||
EXX
|
SBC HL,BC
|
||||||
LD C,(IY+_sFM.FS_REC.F_SIZE+2) ;SIZE HIGH
|
EXX
|
||||||
LD B,(IY+_sFM.FS_REC.F_SIZE+3)
|
RET C ;OK READ ALL
|
||||||
SBC HL,BC
|
EX DE,HL
|
||||||
EXX
|
SBC HL,DE ;VERY BIG
|
||||||
RET C ;OK READ ALL
|
EX DE,HL
|
||||||
EX DE,HL
|
LD A,#FF
|
||||||
SBC HL,DE ;VERY BIG
|
LD (READ.COD),A
|
||||||
EX DE,HL
|
RET
|
||||||
LD A,#FF
|
|
||||||
LD (READ.COD),A
|
|
||||||
RET
|
|
||||||
@ -79,6 +79,7 @@ FM_FIND: CP FMCOUNT+1
|
|||||||
; A=0
|
; A=0
|
||||||
OR (IY) ;+00 NAME
|
OR (IY) ;+00 NAME
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
.error: XOR A
|
.error: XOR A
|
||||||
LD A,DSS_Error.sys.INVALID_HANDLE
|
LD A,DSS_Error.sys.INVALID_HANDLE
|
||||||
RET
|
RET
|
||||||
@ -145,48 +146,48 @@ GET_FM: LD IY,0
|
|||||||
|
|
||||||
; HL:IX - OFFSET POINTER
|
; HL:IX - OFFSET POINTER
|
||||||
; A - FILE MANIPULATOR
|
; A - FILE MANIPULATOR
|
||||||
MOVE_FP:
|
MOVE_FP: CALL SET_FM
|
||||||
CALL SET_FM
|
RET C
|
||||||
RET C
|
INC B
|
||||||
INC B
|
DJNZ .B_1
|
||||||
DEC B
|
;from Start File
|
||||||
JR Z,.F_start
|
; B=0
|
||||||
DEC B
|
.F_start: LD C,B
|
||||||
JR Z,.F_current
|
LD D,B
|
||||||
DEC B
|
LD E,B
|
||||||
JR Z,.B_end
|
JP .DO
|
||||||
LD A,DSS_Error.sys.INVALID_FUNCTION
|
;
|
||||||
SCF
|
.B_1: DJNZ .B_2
|
||||||
RET
|
;from Current Position
|
||||||
;from Start File
|
.F_current: LD C,(IY+_sFM.F_POSITION)
|
||||||
.F_start:
|
LD B,(IY+_sFM.F_POSITION+1)
|
||||||
; B=0
|
LD E,(IY+_sFM.F_POSITION+2)
|
||||||
LD C,B
|
LD D,(IY+_sFM.F_POSITION+3)
|
||||||
LD D,B
|
.DO: ADD IX,BC
|
||||||
LD E,B
|
ADC HL,DE
|
||||||
JP .DO
|
LD D,XH
|
||||||
;from End File
|
LD E,XL
|
||||||
.B_end: LD C,(IY + _sFM.FS_REC.F_SIZE)
|
LD (IY+_sFM.F_POSITION),E
|
||||||
LD B,(IY + _sFM.FS_REC.F_SIZE+1)
|
LD (IY+_sFM.F_POSITION+1),D
|
||||||
LD E,(IY + _sFM.FS_REC.F_SIZE+2)
|
LD (IY+_sFM.F_POSITION+2),L
|
||||||
LD D,(IY + _sFM.FS_REC.F_SIZE+3)
|
LD (IY+_sFM.F_POSITION+3),H
|
||||||
JP .DO
|
XOR A
|
||||||
;from Current Position
|
RET
|
||||||
.F_current:
|
;
|
||||||
LD C,(IY+_sFM.F_POSITION)
|
.B_2: DJNZ .error
|
||||||
LD B,(IY+_sFM.F_POSITION+1)
|
;from End File
|
||||||
LD E,(IY+_sFM.F_POSITION+2)
|
.B_end: LD C,(IY + _sFM.FS_REC.F_SIZE)
|
||||||
LD D,(IY+_sFM.F_POSITION+3)
|
LD B,(IY + _sFM.FS_REC.F_SIZE+1)
|
||||||
.DO: ADD IX,BC
|
LD E,(IY + _sFM.FS_REC.F_SIZE+2)
|
||||||
ADC HL,DE
|
LD D,(IY + _sFM.FS_REC.F_SIZE+3)
|
||||||
LD D,XH
|
JP .DO
|
||||||
LD E,XL
|
; B > 2
|
||||||
LD (IY+_sFM.F_POSITION),E
|
.error: LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
LD (IY+_sFM.F_POSITION+1),D
|
SCF
|
||||||
LD (IY+_sFM.F_POSITION+2),L
|
RET
|
||||||
LD (IY+_sFM.F_POSITION+3),H
|
;;;;;;;;;
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;FP COMPARE
|
;FP COMPARE
|
||||||
; CY - FILE POINTER > SIZE
|
; CY - FILE POINTER > SIZE
|
||||||
|
|||||||
279
DSS/DOS_Proc.asm
279
DSS/DOS_Proc.asm
@ -63,116 +63,106 @@
|
|||||||
; DJNZ .GETN6
|
; DJNZ .GETN6
|
||||||
; RET
|
; RET
|
||||||
;---------------;---------------;---------------
|
;---------------;---------------;---------------
|
||||||
GetName:
|
GetName: LD BC,#08FF ;!HARDCODE ¤«¨ ¨¬¥¨ + áçñâ稪
|
||||||
LD BC,#08FF ;!HARDCODE ¤«¨ ¨¬¥¨ + áçñâ稪
|
LD A,' '
|
||||||
LD A,' '
|
.loop: CP (HL)
|
||||||
.loop: CP (HL)
|
JR Z,.skip
|
||||||
JR Z,.skip
|
LDI
|
||||||
LDI
|
DJNZ .loop
|
||||||
DJNZ .loop
|
JP .extension
|
||||||
;;;;
|
;
|
||||||
JP .extension
|
.skip: LD C,B
|
||||||
;;;;
|
LD B,0
|
||||||
.skip: LD C,B
|
; CF=0
|
||||||
LD B,0
|
ADC HL,BC
|
||||||
; CF=0
|
.extension: CP (HL)
|
||||||
ADC HL,BC
|
LD A,"."
|
||||||
;;;;
|
JR NZ,.copy_ext
|
||||||
.extension:
|
XOR A
|
||||||
CP (HL)
|
.copy_ext: LD (DE),A
|
||||||
LD A,"."
|
INC DE
|
||||||
JR NZ,.copy_extension
|
RET Z ;no copy extension
|
||||||
XOR A
|
; copy extension
|
||||||
.copy_extension:
|
LD BC,#03FF ;!HARDCODE ¤«¨ à áè¨à¥¨ï + áçñâ稪
|
||||||
LD (DE),A
|
LD A,' '
|
||||||
INC DE
|
.loop2: CP (HL)
|
||||||
RET Z ;no copy extension
|
JR Z,.exit
|
||||||
; copy extension
|
LDI
|
||||||
LD BC,#03FF ;!HARDCODE ¤«¨ à áè¨à¥¨ï + áçñâ稪
|
DJNZ .loop2
|
||||||
LD A,' '
|
.exit: XOR A
|
||||||
.loop2: CP (HL)
|
LD (DE),A
|
||||||
JR Z,.exit
|
RET
|
||||||
LDI
|
|
||||||
DJNZ .loop2
|
|
||||||
.exit: XOR A
|
|
||||||
LD (DE),A
|
|
||||||
RET
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
; ’¥áâ ¤®¯ãá⨬®¥ ¨¬ï ¨ áâநâìáï ¤¨áª.
|
; ’¥áâ ¤®¯ãá⨬®¥ ¨¬ï ¨ áâநâìáï ¤¨áª.
|
||||||
; ¢å®¤: hl=áâப ¨¬¥¨
|
; ¢å®¤: hl=áâப ¨¬¥¨
|
||||||
; ¢ë室: (TMPNAME)
|
; ¢ë室: (TMPNAME)
|
||||||
GETWORD:
|
GETWORD: ; !TEST
|
||||||
; !TEST
|
INC HL
|
||||||
INC HL
|
LD A,(HL)
|
||||||
LD A,(HL)
|
DEC HL
|
||||||
DEC HL
|
CP ':'
|
||||||
CP ':'
|
JR NZ,.dir_loop
|
||||||
JR NZ,.dir_loop
|
|
||||||
|
|
||||||
LD A,(HL)
|
LD A,(HL)
|
||||||
CP 'a'
|
CP 'a'
|
||||||
JR C,.next
|
JR C,.next
|
||||||
CP 'z'+1
|
CP 'z'+1
|
||||||
JR NC,.next
|
JR NC,.next
|
||||||
SUB #20
|
SUB #20
|
||||||
.next: SUB 'A'
|
.next: SUB 'A'
|
||||||
INC HL
|
INC HL
|
||||||
INC HL
|
INC HL
|
||||||
PUSH HL
|
PUSH HL
|
||||||
CALL CHNDISK
|
CALL CHNDISK
|
||||||
;CALL OPENDSK
|
;CALL OPENDSK
|
||||||
POP HL
|
POP HL
|
||||||
RET C
|
RET C
|
||||||
LD A,(HL)
|
LD A,(HL)
|
||||||
OR A
|
OR A
|
||||||
JR Z,.done
|
JR Z,.done
|
||||||
CP ' ' ;
|
CP ' ' ;
|
||||||
JR Z,.done
|
JR Z,.done
|
||||||
CP '\' ;
|
CP '\' ;
|
||||||
SCF
|
SCF
|
||||||
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||||||
RET NZ
|
RET NZ
|
||||||
INC HL
|
INC HL
|
||||||
;
|
;
|
||||||
.dir_loop:
|
.dir_loop: LD DE,TMPNAME
|
||||||
LD DE,TMPNAME
|
LD BC,#0DFF
|
||||||
LD BC,#0DFF
|
.loop: LD A,(HL)
|
||||||
;
|
INC HL
|
||||||
.loop: LD A,(HL)
|
CP '\' ;
|
||||||
INC HL
|
JR Z,.DIR_NAME
|
||||||
CP '\' ;
|
; AND A
|
||||||
JR Z,.DIR_NAME
|
; JR Z,.DIR_NAME
|
||||||
; AND A
|
;CP ':'
|
||||||
; JR Z,.DIR_NAME
|
;JR Z,.DRV_NAME
|
||||||
;CP ':'
|
LD (DE),A
|
||||||
;JR Z,.DRV_NAME
|
INC DE
|
||||||
LD (DE),A
|
CP ' '+1
|
||||||
INC DE
|
CCF
|
||||||
CP ' '+1
|
RET NC
|
||||||
CCF
|
DJNZ .loop
|
||||||
RET NC
|
LD A,DSS_Error.sys.INVALID_NAME
|
||||||
DJNZ .loop
|
SCF
|
||||||
LD A,DSS_Error.sys.INVALID_NAME
|
RET
|
||||||
SCF
|
;
|
||||||
RET
|
.done: XOR A
|
||||||
;
|
LD (TMPNAME),A
|
||||||
.done: XOR A
|
RET
|
||||||
LD (TMPNAME),A
|
;
|
||||||
RET
|
.DIR_NAME: XOR A
|
||||||
;
|
LD (DE),A
|
||||||
.DIR_NAME:
|
PUSH HL
|
||||||
XOR A
|
LD HL,TMPNAME
|
||||||
LD (DE),A
|
CALL OPENDIR
|
||||||
PUSH HL
|
POP HL
|
||||||
LD HL,TMPNAME
|
RET C
|
||||||
CALL OPENDIR
|
JR .dir_loop
|
||||||
POP HL
|
|
||||||
RET C
|
|
||||||
JR .dir_loop
|
|
||||||
; .DRV_NAME:
|
; .DRV_NAME:
|
||||||
; LD A,(TMPNAME)
|
; LD A,(TMPNAME)
|
||||||
; CP 'a'
|
; CP 'a'
|
||||||
@ -191,6 +181,7 @@ GETWORD:
|
|||||||
; JR .loop
|
; JR .loop
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
; <20>ãä¥à ¨¬¥¨ 8.3 ä®à¬ â
|
; <20>ãä¥à ¨¬¥¨ 8.3 ä®à¬ â
|
||||||
TMPNAME: DZ ' ' ; 12 ¯à®¡¥«®¢ ¨ 0 ;!FIXIT ª ¡ãä¥à ¬
|
TMPNAME: DZ ' ' ; 12 ¯à®¡¥«®¢ ¨ 0 ;!FIXIT ª ¡ãä¥à ¬
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
@ -262,89 +253,6 @@ OPENDSK:;!TEST DRV.Open
|
|||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
|
||||||
; ¢å®¤: HL - ¨¬ï ¤¨à¥ªâ®à¨¨
|
|
||||||
OPENDIR:;[x] some optimizations
|
|
||||||
;XOR A
|
|
||||||
;CALL SET_FM
|
|
||||||
LD IY,CORE_BUFFERS.FM_BUF
|
|
||||||
;
|
|
||||||
LD A,(HL)
|
|
||||||
OR A
|
|
||||||
JR NZ,.SUBDIR
|
|
||||||
.REROOT1:
|
|
||||||
LD DE,0
|
|
||||||
;[x] some optimizations
|
|
||||||
; LD (IY+_sFM.FIRST_CLUSTER_L),E
|
|
||||||
; LD (IY+_sFM.FIRST_CLUSTER_L+1),D
|
|
||||||
; [ ] fat32
|
|
||||||
EX DE,HL
|
|
||||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL
|
|
||||||
EX DE,HL
|
|
||||||
;
|
|
||||||
CALL LOADDIR
|
|
||||||
LD HL,WorkDirectory
|
|
||||||
LD (HL),'\'
|
|
||||||
INC HL
|
|
||||||
LD (HL),#00
|
|
||||||
; CF=0
|
|
||||||
;AND A
|
|
||||||
RET
|
|
||||||
.SUBDIR:
|
|
||||||
CP "."
|
|
||||||
JR NZ,.SUBDIR2
|
|
||||||
;!TEST ;[x] some optimizations
|
|
||||||
;LD A,(IY+_sFM.FIRST_CLUSTER_L) ;R005
|
|
||||||
; [ ] fat32
|
|
||||||
LD A,(CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L) ;R005
|
|
||||||
;
|
|
||||||
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1) ;R005
|
|
||||||
JR NZ,.SUDI1 ;R005
|
|
||||||
INC HL ;R005
|
|
||||||
LD A,(HL) ;R005
|
|
||||||
OR A ;R005
|
|
||||||
DEC HL ;R005
|
|
||||||
JR Z,.REROOT1 ;R005
|
|
||||||
.SUDI1: EXX
|
|
||||||
LD HL,MASKARE
|
|
||||||
LD DE,MASKARE+1
|
|
||||||
LD BC,10 ;!HARDCODE
|
|
||||||
LD (HL),' '
|
|
||||||
LDIR
|
|
||||||
EXX
|
|
||||||
LD DE,MASKARE
|
|
||||||
.loop: LDI
|
|
||||||
LD A,(HL)
|
|
||||||
OR A
|
|
||||||
JR NZ,.loop
|
|
||||||
JR .SUBDIR3
|
|
||||||
.SUBDIR2:
|
|
||||||
CALL MASK.name
|
|
||||||
RET C
|
|
||||||
.SUBDIR3:
|
|
||||||
CALL FINDDIR
|
|
||||||
RET C
|
|
||||||
;!TEST ;[x] some optimizations
|
|
||||||
;LD (IY+_sFM.FIRST_CLUSTER_L),E
|
|
||||||
;LD (IY+_sFM.FIRST_CLUSTER_L+1),D
|
|
||||||
;LD DE,#4000 ;!HARDCODE
|
|
||||||
;LD (IY+_sFM.F_SIZE),E
|
|
||||||
;LD (IY+_sFM.F_SIZE+1),D
|
|
||||||
EX DE,HL
|
|
||||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL ; [ ] fat32
|
|
||||||
LD HL,#4000 ;!HARDCODE
|
|
||||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.F_SIZE),HL
|
|
||||||
EX DE,HL
|
|
||||||
;
|
|
||||||
JP LOADDIR
|
|
||||||
; CF=0
|
|
||||||
;AND A
|
|
||||||
;RET
|
|
||||||
;----------------------------------------------------------------------;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
; <20>८¡à §®¢ âì ¨¬ï 8.3 -> 11 ä®à¬ â
|
; <20>८¡à §®¢ âì ¨¬ï 8.3 -> 11 ä®à¬ â
|
||||||
; ¢å®¤: hl = 8.3 ¨¬ï
|
; ¢å®¤: hl = 8.3 ¨¬ï
|
||||||
@ -528,7 +436,6 @@ DIR_PATH_CHECK: LD A,(HL)
|
|||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
CHECK_NAME:
|
CHECK_NAME:
|
||||||
LD HL,MASKARE
|
LD HL,MASKARE
|
||||||
|
|||||||
@ -170,6 +170,8 @@ SEARCH:
|
|||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
; FIND "MASKAREA" IN DIRECTORY
|
; FIND "MASKAREA" IN DIRECTORY
|
||||||
|
; [ ] fat32
|
||||||
|
; ¢ë室: IY:DE - cluster number
|
||||||
FINDDIR:
|
FINDDIR:
|
||||||
SET_PAGE_X DIRPAGE
|
SET_PAGE_X DIRPAGE
|
||||||
;
|
;
|
||||||
@ -237,7 +239,8 @@ FINDDIR:
|
|||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
.ADDSPEC:
|
.ADDSPEC:
|
||||||
LD HL,WorkDirectory+1
|
LD HL,WorkDirectory+1
|
||||||
LD BC,WorkDirectory.DEPTH-1
|
LD BC,WorkDirectory.DEPTH-1
|
||||||
@ -290,8 +293,12 @@ FINDDIR:
|
|||||||
; ; JP IT_DIR
|
; ; JP IT_DIR
|
||||||
;
|
;
|
||||||
.IT_DIR: ; [ ] fat32
|
.IT_DIR: ; [ ] fat32
|
||||||
|
LD E,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
|
||||||
|
LD D,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
|
||||||
|
LD YH,D
|
||||||
|
LD YL,E
|
||||||
LD E,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
|
LD E,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
|
||||||
LD D,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
|
LD D,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
|
||||||
POP AF
|
POP AF
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
AND A
|
AND A
|
||||||
@ -316,67 +323,233 @@ FINDDIR:
|
|||||||
RET
|
RET
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
CHECK_ZERO_CLUSTER:
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,(CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L) ;R005
|
||||||
|
LD A,L
|
||||||
|
OR H
|
||||||
|
LD HL,(CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H)
|
||||||
|
OR L
|
||||||
|
OR H
|
||||||
|
EX DE,HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; ¢å®¤: HL - ¨¬ï ¤¨à¥ªâ®à¨¨
|
||||||
|
; [x] fat32
|
||||||
|
OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JR NZ,.SUBDIR
|
||||||
|
.REROOT: ; fat32
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,(FatBuffer.RootDirStartCluster_L)
|
||||||
|
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL
|
||||||
|
LD HL,(FatBuffer.RootDirStartCluster_H)
|
||||||
|
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),HL
|
||||||
|
EX DE,HL
|
||||||
|
CALL LOADDIR
|
||||||
|
; CF=0
|
||||||
|
LD HL,WorkDirectory
|
||||||
|
LD (HL),'\'
|
||||||
|
INC HL
|
||||||
|
LD (HL),#00
|
||||||
|
;AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.SUBDIR: CP "."
|
||||||
|
JR NZ,.SUBDIR2
|
||||||
|
; fat32
|
||||||
|
CALL CHECK_ZERO_CLUSTER
|
||||||
|
JR NZ,.no_root ;R005
|
||||||
|
; "cd ." or "cd .."
|
||||||
|
;R005
|
||||||
|
INC HL
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
DEC HL
|
||||||
|
JR Z,.REROOT
|
||||||
|
;
|
||||||
|
.no_root: EXX
|
||||||
|
LD HL,MASKARE
|
||||||
|
LD DE,MASKARE+1
|
||||||
|
LD BC,10 ;!HARDCODE
|
||||||
|
LD (HL),' '
|
||||||
|
LDIR
|
||||||
|
EXX
|
||||||
|
LD DE,MASKARE
|
||||||
|
.loop: LDI
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JR NZ,.loop
|
||||||
|
JR .SUBDIR3
|
||||||
|
;
|
||||||
|
.SUBDIR2: CALL MASK.name
|
||||||
|
RET C
|
||||||
|
; fat32
|
||||||
|
.SUBDIR3: CALL FINDDIR
|
||||||
|
RET C
|
||||||
|
EX DE,HL
|
||||||
|
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL ; [ ] fat32
|
||||||
|
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),IY ; [ ] fat32
|
||||||
|
LD HL,#4000 ;!HARDCODE
|
||||||
|
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.F_SIZE),HL
|
||||||
|
;EX DE,HL
|
||||||
|
JP LOADDIR
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
; <20>à®ç¨â âì ᯨ᮪ ª â «®£
|
; <20>à®ç¨â âì ᯨ᮪ ª â «®£
|
||||||
LOADDIR:
|
; [x] fat32 ;!TEST
|
||||||
XOR A
|
LOADDIR: ;!TODO optimize
|
||||||
LD H,A
|
; XOR A ; FILE MANIPULATOR = 0
|
||||||
LD L,A
|
; LD H,A
|
||||||
LD IX,0
|
; LD L,A
|
||||||
LD B,A ; ®â ç « ä ©«
|
; LD IX,0
|
||||||
CALL MOVE_FP
|
; LD B,A ; ®â ç « ä ©«
|
||||||
|
; CALL MOVE_FP
|
||||||
|
; ;
|
||||||
|
; SET_PAGE_X DIRPAGE
|
||||||
|
; AND A
|
||||||
|
; PUSH AF
|
||||||
|
; ;!TEST no ldir
|
||||||
|
; ; ®ç¨áâ¨âì ª¥è ª â «®£
|
||||||
|
; ; LD HL,#C000
|
||||||
|
; ; LD DE,#C001
|
||||||
|
; ; LD BC,#3FFF
|
||||||
|
; ; LD (HL),L
|
||||||
|
; ; LDIR
|
||||||
|
; ;
|
||||||
|
; LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||||
|
; LD (IY+_sFM.DRIVE),A ; á®åà. ¢ ¤¥áªà¨¯â®à
|
||||||
|
; ; ®¬¥à ¯¥à¢®£® ª« áâ¥à
|
||||||
|
; ; [x] fat32
|
||||||
|
; LD A,(FatBuffer.FAT_TYPE)
|
||||||
|
; XOR 32
|
||||||
|
; JR Z,.read_dir
|
||||||
|
; ;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
||||||
|
; LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
||||||
|
; OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||||
|
CALL LOAD_SAVE_DIR_PREPARE
|
||||||
|
PUSH AF
|
||||||
|
EX AF,AF'
|
||||||
|
JR Z,.LoadRootDir
|
||||||
|
.read_dir: LD HL,DIRPAGE.buffer ; ªã¤
|
||||||
|
LD DE,#4000 ; ᪮«ìª®
|
||||||
|
XOR A ; ¤¥áªà¨¯â®à
|
||||||
|
CALL READ ; ç⥨¥ ¨§ ä ©«
|
||||||
|
LD (SAVEDIR.DIRSIZE),DE ; ç¨á«® ¯à®ç¨â. ¡ ©â®¢
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.LoadRootDir: LD HL,(FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤
|
||||||
|
LD IX,(FatBuffer.RootDirFirstSector_L) ; ®¬¥à «®£. ᥪâ®à
|
||||||
|
LD A,(FatBuffer.DirSizeInSectors)
|
||||||
|
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£
|
||||||
|
CP B
|
||||||
|
JR NC,.RTD1
|
||||||
|
LD B,A ; ç¨á«® ᥪâ®à®¢
|
||||||
|
.RTD1: LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||||
|
LD DE,DIRPAGE.buffer ; ¡ãä¥à
|
||||||
|
LD C,Dss.DRV.Read ; ç⥨¥ ᥪâ®à®¢
|
||||||
|
RST ToDSS.DRV
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
SET_PAGE_X DIRPAGE
|
LOAD_SAVE_DIR_PREPARE:
|
||||||
AND A
|
;!TODO optimize
|
||||||
PUSH AF
|
XOR A ; FILE MANIPULATOR = 0
|
||||||
;!TEST no ldir
|
LD H,A
|
||||||
; ®ç¨áâ¨âì ª¥è ª â «®£
|
LD L,A
|
||||||
; LD HL,#C000
|
LD IX,0
|
||||||
; LD DE,#C001
|
LD B,A ; ®â ç « ä ©«
|
||||||
; LD BC,#3FFF
|
CALL MOVE_FP
|
||||||
; LD (HL),L
|
;
|
||||||
; LDIR
|
SET_PAGE_X DIRPAGE
|
||||||
;
|
AND A
|
||||||
LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
EX AF,AF'
|
||||||
LD (IY+_sFM.DRIVE),A ; á®åà. ¢ ¤¥áªà¨¯â®à
|
;
|
||||||
; ®¬¥à ¯¥à¢®£® ª« áâ¥à
|
LD A,(FatBuffer.DRIVE)
|
||||||
; [ ] fat32
|
LD (IY+_sFM.DRIVE),A
|
||||||
LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
; [x] fat32
|
||||||
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
LD A,(FatBuffer.FAT_TYPE)
|
||||||
JP Z,.LoadRootDir
|
CP FAT_TYPE.x32 - 1
|
||||||
;
|
JR NC,.exit
|
||||||
LD HL,DIRPAGE.buffer ; ªã¤
|
;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
||||||
LD DE,#4000 ; ᪮«ìª®
|
LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
||||||
XOR A ; ¤¥áªà¨¯â®à
|
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||||
CALL READ ; ç⥨¥ ¨§ ä ©«
|
.exit: EX AF,AF'
|
||||||
LD (SAVEDIR.DIRSIZE),DE ; ç¨á«® ¯à®ç¨â. ¡ ©â®¢
|
RET
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
;!TODO FAT procedures
|
||||||
RET
|
;----------------------------------------------------------------------;
|
||||||
.LoadRootDir:
|
; ‘¡à®á¨âì ª¥è ª â «®£ ¤¨áª.
|
||||||
LD HL,(FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤
|
; ¢å®¤: iy=áâàãªâãà ¤¥áªà¨¯â®à
|
||||||
LD IX,(FatBuffer.RootDirFirstSector_L) ; ®¬¥à «®£. ᥪâ®à
|
; [x] fat32 ;!TEST
|
||||||
LD A,(FatBuffer.DirSizeInSectors)
|
SAVEDIR: ;!TODO optimize
|
||||||
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£
|
; XOR A ; FILE MANIPULATOR = 0
|
||||||
CP B
|
; LD H,A
|
||||||
JR NC,.RTD1
|
; LD L,A
|
||||||
LD B,A ; ç¨á«® ᥪâ®à®¢
|
; LD IX,0
|
||||||
.RTD1: LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
; LD B,A ; ®â ç « ä ©«
|
||||||
LD DE,DIRPAGE.buffer ; ¡ãä¥à
|
; CALL MOVE_FP
|
||||||
LD C,Dss.DRV.Read ; ç⥨¥ ᥪâ®à®¢
|
; ;
|
||||||
RST ToDSS.DRV
|
; SET_PAGE_X DIRPAGE
|
||||||
POP AF
|
; AND A
|
||||||
OUT (SLOT3),A
|
; PUSH AF
|
||||||
RET
|
; ;
|
||||||
|
; LD A,(FatBuffer.DRIVE)
|
||||||
|
; LD (IY+_sFM.DRIVE),A
|
||||||
|
; ; [x] fat32
|
||||||
|
; LD A,(FatBuffer.FAT_TYPE)
|
||||||
|
; XOR 32
|
||||||
|
; JR Z,.save_dir
|
||||||
|
; ;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
||||||
|
; LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
||||||
|
; OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||||
|
CALL LOAD_SAVE_DIR_PREPARE
|
||||||
|
PUSH AF
|
||||||
|
EX AF,AF'
|
||||||
|
JR Z,.SaveRootDir
|
||||||
|
.save_dir: LD HL,DIRPAGE.buffer
|
||||||
|
; à §¬¥à ᯨ᪠ª â «®£ size_cash_directory
|
||||||
|
;!FIXIT ¥á«¨ ® 㦠, â® ¯à®¢¥à¨âì ¡ £¨ ( ¯à¨¬¥à, à §¬¥à ¤¨à४â®à¨¨ ¬¥ìè¥ ¯à¨ ®âªàë⨨ ¨ ¡®«ìè¥ ¯®á«¥ ¯à ¢®ª)
|
||||||
|
; ª®£¤ ¡ã¤¥â ç⥨¥ ªã᪠¬¨ ª â «®£ ¢ ªíè, âãâ ¥éñ áçñâ稪 ¯à¨ªàãâ¨âì
|
||||||
|
.DIRSIZE+1: LD DE,0
|
||||||
|
XOR A
|
||||||
|
CALL WRITE
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.SaveRootDir: LD HL,(FatBuffer.RootDirFirstSector_H)
|
||||||
|
LD IX,(FatBuffer.RootDirFirstSector_L)
|
||||||
|
LD A,(FatBuffer.DirSizeInSectors)
|
||||||
|
LD B,32 ;!HARDCODE sector size 512, Root Dir max size in sectors
|
||||||
|
SUB B
|
||||||
|
JR NC,.RTD1S
|
||||||
|
ADD A,B
|
||||||
|
LD B,A
|
||||||
|
.RTD1S: LD A,(FatBuffer.DRIVE)
|
||||||
|
LD DE,DIRPAGE.buffer
|
||||||
|
LD C,Dss.DRV.Write
|
||||||
|
RST ToDSS.DRV
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
RET
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
; ᪮¯¨à®¢ âì § ¯¨áì ¢ ᯨ᮪ ¤¨áª (ª â «®£ )
|
; ᪮¯¨à®¢ âì § ¯¨áì ¢ ᯨ᮪ ¤¨áª (ª â «®£ ) de ix iy
|
||||||
; ¨ á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
; ¨ á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||||
|
; ¢å®¤: (HANDBUF) - § ¯¨áì ª â «®£
|
||||||
WRT_HND: SET_PAGE_X DIRPAGE
|
WRT_HND: SET_PAGE_X DIRPAGE
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
;
|
;
|
||||||
@ -396,7 +569,7 @@ WRT_HND: SET_PAGE_X DIRPAGE
|
|||||||
JR Z,.WRT_HN2
|
JR Z,.WRT_HN2
|
||||||
;ADD IX,BC
|
;ADD IX,BC
|
||||||
ADD HL,BC
|
ADD HL,BC
|
||||||
JR NC,.loop
|
JR NC,.loop ;!FIXIT ª®«¨ç¥á⢮ § ¯¨á¥© ª â «®£ = áâà ¨æ
|
||||||
;
|
;
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
@ -427,59 +600,6 @@ WRT_HND: SET_PAGE_X DIRPAGE
|
|||||||
JP SAVEDIR
|
JP SAVEDIR
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
;!TODO FAT procedures
|
|
||||||
;----------------------------------------------------------------------;
|
|
||||||
; ‘¡à®á¨âì ª¥è ª â «®£ ¤¨áª.
|
|
||||||
; ¢å®¤: iy=áâàãªâãà ¤¥áªà¨¯â®à
|
|
||||||
; [ ] fat32
|
|
||||||
SAVEDIR:
|
|
||||||
XOR A
|
|
||||||
LD HL,0
|
|
||||||
LD IX,0
|
|
||||||
LD B,0
|
|
||||||
CALL MOVE_FP
|
|
||||||
;
|
|
||||||
SET_PAGE_X DIRPAGE
|
|
||||||
PUSH AF
|
|
||||||
;
|
|
||||||
LD A,(FatBuffer.DRIVE)
|
|
||||||
LD (IY+_sFM.DRIVE),A
|
|
||||||
;[ ] fat32
|
|
||||||
LD D,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
|
||||||
LD E,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
|
||||||
LD A,D
|
|
||||||
OR E
|
|
||||||
JP Z,.SaveRootDir
|
|
||||||
LD HL,DIRPAGE.buffer
|
|
||||||
; à §¬¥à ᯨ᪠ª â «®£ size_cash_directory
|
|
||||||
;!FIXIT ¥á«¨ ® 㦠, â® ¯à®¢¥à¨âì ¡ £¨ ( ¯à¨¬¥à, à §¬¥à ¤¨à४â®à¨¨ ¬¥ìè¥ ¯à¨ ®âªàë⨨ ¨ ¡®«ìè¥ ¯®á«¥ ¯à ¢®ª)
|
|
||||||
.DIRSIZE+1:
|
|
||||||
LD DE,0
|
|
||||||
XOR A
|
|
||||||
CALL WRITE
|
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
.SaveRootDir:
|
|
||||||
LD HL,(FatBuffer.RootDirFirstSector_H)
|
|
||||||
LD IX,(FatBuffer.RootDirFirstSector_L)
|
|
||||||
LD A,(FatBuffer.DirSizeInSectors)
|
|
||||||
LD B,32 ;!HARDCODE sector size 512
|
|
||||||
SUB B
|
|
||||||
JR NC,.RTD1S
|
|
||||||
ADD A,B
|
|
||||||
LD B,A
|
|
||||||
.RTD1S: LD A,(FatBuffer.DRIVE)
|
|
||||||
LD DE,DIRPAGE.buffer
|
|
||||||
LD C,Dss.DRV.Write
|
|
||||||
RST ToDSS.DRV
|
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
;----------------------------------------------------------------------;
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
; ¥ ¨á¯®«ì§ã¥âáï
|
; ¥ ¨á¯®«ì§ã¥âáï
|
||||||
@ -490,7 +610,9 @@ SAVEDIR:
|
|||||||
; OR A
|
; OR A
|
||||||
; RET Z
|
; RET Z
|
||||||
|
|
||||||
|
|
||||||
; ॣ. D - ®¬¥à ¤¨áª
|
; ॣ. D - ®¬¥à ¤¨áª
|
||||||
|
; [ ] fat32
|
||||||
RD_BPB: LD C,SLOT3
|
RD_BPB: LD C,SLOT3
|
||||||
IN B,(C)
|
IN B,(C)
|
||||||
PUSH BC
|
PUSH BC
|
||||||
@ -534,6 +656,8 @@ RD_BPB: LD C,SLOT3
|
|||||||
LD E,A
|
LD E,A
|
||||||
LD (FatBuffer.FAT1_SEC_H),DE ; high word first sector FAT #1
|
LD (FatBuffer.FAT1_SEC_H),DE ; high word first sector FAT #1
|
||||||
LD (FatBuffer.FAT2_SEC_H),DE ; high word first sector FAT #1
|
LD (FatBuffer.FAT2_SEC_H),DE ; high word first sector FAT #1
|
||||||
|
LD (FatBuffer.RootDirStartCluster_L),DE
|
||||||
|
LD (FatBuffer.RootDirStartCluster_H),DE
|
||||||
LD (FatBuffer.SectorsPerFAT_H),A
|
LD (FatBuffer.SectorsPerFAT_H),A
|
||||||
;
|
;
|
||||||
;
|
;
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
953
|
956
|
||||||
Loading…
Reference in New Issue
Block a user