mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
SAVEDIR, LOADDIR, OPENDIR
This commit is contained in:
parent
b515b2429f
commit
53dbf83712
@ -1,11 +1,11 @@
|
|||||||
; 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
|
||||||
@ -15,16 +15,15 @@ READ: LD (.R_POINT),HL
|
|||||||
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 D,(IY+_sFM.F_POSITION+2)
|
|
||||||
LD E,(IY+_sFM.F_POSITION+1)
|
LD E,(IY+_sFM.F_POSITION+1)
|
||||||
|
LD D,(IY+_sFM.F_POSITION+2)
|
||||||
|
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
|
||||||
@ -93,7 +92,7 @@ READ: LD (.R_POINT),HL
|
|||||||
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
|
||||||
@ -144,16 +143,14 @@ READ: LD (.R_POINT),HL
|
|||||||
LD (.R_POINT),DE
|
LD (.R_POINT),DE
|
||||||
EXX
|
EXX
|
||||||
JP .ROV4
|
JP .ROV4
|
||||||
|
;
|
||||||
.ERR_3: POP HL
|
.ERR_3: POP HL
|
||||||
.ERR_2: POP HL
|
.ERR_2: POP HL
|
||||||
.ERR_1: POP BC
|
.ERR_1: POP BC
|
||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
|
.TEST_SIZE: XOR A
|
||||||
|
|
||||||
TSTSIZE:
|
|
||||||
XOR A
|
|
||||||
LD (READ.COD),A
|
LD (READ.COD),A
|
||||||
LD L,(IY+_sFM.F_POSITION) ;FP LOW
|
LD L,(IY+_sFM.F_POSITION) ;FP LOW
|
||||||
LD H,(IY+_sFM.F_POSITION+1)
|
LD H,(IY+_sFM.F_POSITION+1)
|
||||||
@ -168,8 +165,7 @@ TSTSIZE:
|
|||||||
INC HL
|
INC HL
|
||||||
;ADC HL,DE
|
;ADC HL,DE
|
||||||
;
|
;
|
||||||
.no_inc_hl:
|
.no_inc_hl: EXX ;HL':HL - NEW FP
|
||||||
EXX ;HL':HL - NEW FP
|
|
||||||
;
|
;
|
||||||
LD C,(IY+_sFM.FS_REC.F_SIZE)
|
LD C,(IY+_sFM.FS_REC.F_SIZE)
|
||||||
LD B,(IY+_sFM.FS_REC.F_SIZE+1) ;SIZE LOW
|
LD B,(IY+_sFM.FS_REC.F_SIZE+1) ;SIZE LOW
|
||||||
|
|||||||
@ -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,35 +146,20 @@ 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
|
||||||
DEC B
|
DJNZ .B_1
|
||||||
JR Z,.F_start
|
|
||||||
DEC B
|
|
||||||
JR Z,.F_current
|
|
||||||
DEC B
|
|
||||||
JR Z,.B_end
|
|
||||||
LD A,DSS_Error.sys.INVALID_FUNCTION
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
;from Start File
|
;from Start File
|
||||||
.F_start:
|
|
||||||
; B=0
|
; B=0
|
||||||
LD C,B
|
.F_start: LD C,B
|
||||||
LD D,B
|
LD D,B
|
||||||
LD E,B
|
LD E,B
|
||||||
JP .DO
|
JP .DO
|
||||||
;from End File
|
;
|
||||||
.B_end: LD C,(IY + _sFM.FS_REC.F_SIZE)
|
.B_1: DJNZ .B_2
|
||||||
LD B,(IY + _sFM.FS_REC.F_SIZE+1)
|
|
||||||
LD E,(IY + _sFM.FS_REC.F_SIZE+2)
|
|
||||||
LD D,(IY + _sFM.FS_REC.F_SIZE+3)
|
|
||||||
JP .DO
|
|
||||||
;from Current Position
|
;from Current Position
|
||||||
.F_current:
|
.F_current: LD C,(IY+_sFM.F_POSITION)
|
||||||
LD C,(IY+_sFM.F_POSITION)
|
|
||||||
LD B,(IY+_sFM.F_POSITION+1)
|
LD B,(IY+_sFM.F_POSITION+1)
|
||||||
LD E,(IY+_sFM.F_POSITION+2)
|
LD E,(IY+_sFM.F_POSITION+2)
|
||||||
LD D,(IY+_sFM.F_POSITION+3)
|
LD D,(IY+_sFM.F_POSITION+3)
|
||||||
@ -187,6 +173,21 @@ MOVE_FP:
|
|||||||
LD (IY+_sFM.F_POSITION+3),H
|
LD (IY+_sFM.F_POSITION+3),H
|
||||||
XOR A
|
XOR A
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
|
.B_2: DJNZ .error
|
||||||
|
;from End File
|
||||||
|
.B_end: LD C,(IY + _sFM.FS_REC.F_SIZE)
|
||||||
|
LD B,(IY + _sFM.FS_REC.F_SIZE+1)
|
||||||
|
LD E,(IY + _sFM.FS_REC.F_SIZE+2)
|
||||||
|
LD D,(IY + _sFM.FS_REC.F_SIZE+3)
|
||||||
|
JP .DO
|
||||||
|
; B > 2
|
||||||
|
.error: LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;FP COMPARE
|
;FP COMPARE
|
||||||
; CY - FILE POINTER > SIZE
|
; CY - FILE POINTER > SIZE
|
||||||
|
|||||||
111
DSS/DOS_Proc.asm
111
DSS/DOS_Proc.asm
@ -63,28 +63,23 @@
|
|||||||
; 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
|
.skip: LD C,B
|
||||||
LD B,0
|
LD B,0
|
||||||
; CF=0
|
; CF=0
|
||||||
ADC HL,BC
|
ADC HL,BC
|
||||||
;;;;
|
.extension: CP (HL)
|
||||||
.extension:
|
|
||||||
CP (HL)
|
|
||||||
LD A,"."
|
LD A,"."
|
||||||
JR NZ,.copy_extension
|
JR NZ,.copy_ext
|
||||||
XOR A
|
XOR A
|
||||||
.copy_extension:
|
.copy_ext: LD (DE),A
|
||||||
LD (DE),A
|
|
||||||
INC DE
|
INC DE
|
||||||
RET Z ;no copy extension
|
RET Z ;no copy extension
|
||||||
; copy extension
|
; copy extension
|
||||||
@ -100,13 +95,11 @@ GetName:
|
|||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
; ’¥áâ ¤®¯ãá⨬®¥ ¨¬ï ¨ áâநâìáï ¤¨áª.
|
; ’¥áâ ¤®¯ãá⨬®¥ ¨¬ï ¨ áâநâìáï ¤¨áª.
|
||||||
; ¢å®¤: hl=áâப ¨¬¥¨
|
; ¢å®¤: hl=áâப ¨¬¥¨
|
||||||
; ¢ë室: (TMPNAME)
|
; ¢ë室: (TMPNAME)
|
||||||
GETWORD:
|
GETWORD: ; !TEST
|
||||||
; !TEST
|
|
||||||
INC HL
|
INC HL
|
||||||
LD A,(HL)
|
LD A,(HL)
|
||||||
DEC HL
|
DEC HL
|
||||||
@ -138,10 +131,8 @@ GETWORD:
|
|||||||
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)
|
.loop: LD A,(HL)
|
||||||
INC HL
|
INC HL
|
||||||
CP '\' ;
|
CP '\' ;
|
||||||
@ -164,8 +155,7 @@ GETWORD:
|
|||||||
LD (TMPNAME),A
|
LD (TMPNAME),A
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.DIR_NAME:
|
.DIR_NAME: XOR A
|
||||||
XOR A
|
|
||||||
LD (DE),A
|
LD (DE),A
|
||||||
PUSH HL
|
PUSH HL
|
||||||
LD HL,TMPNAME
|
LD HL,TMPNAME
|
||||||
@ -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
|
||||||
;
|
;
|
||||||
@ -238,6 +240,7 @@ FINDDIR:
|
|||||||
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,6 +293,10 @@ 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
|
||||||
@ -316,38 +323,121 @@ 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
|
; 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
|
PUSH AF
|
||||||
;!TEST no ldir
|
EX AF,AF'
|
||||||
; ®ç¨áâ¨âì ª¥è ª â «®£
|
JR Z,.LoadRootDir
|
||||||
; LD HL,#C000
|
.read_dir: LD HL,DIRPAGE.buffer ; ªã¤
|
||||||
; LD DE,#C001
|
|
||||||
; LD BC,#3FFF
|
|
||||||
; LD (HL),L
|
|
||||||
; LDIR
|
|
||||||
;
|
|
||||||
LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
|
||||||
LD (IY+_sFM.DRIVE),A ; á®åà. ¢ ¤¥áªà¨¯â®à
|
|
||||||
; ®¬¥à ¯¥à¢®£® ª« áâ¥à
|
|
||||||
; [ ] fat32
|
|
||||||
LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
|
||||||
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
|
||||||
JP Z,.LoadRootDir
|
|
||||||
;
|
|
||||||
LD HL,DIRPAGE.buffer ; ªã¤
|
|
||||||
LD DE,#4000 ; ᪮«ìª®
|
LD DE,#4000 ; ᪮«ìª®
|
||||||
XOR A ; ¤¥áªà¨¯â®à
|
XOR A ; ¤¥áªà¨¯â®à
|
||||||
CALL READ ; ç⥨¥ ¨§ ä ©«
|
CALL READ ; ç⥨¥ ¨§ ä ©«
|
||||||
@ -355,8 +445,8 @@ LOADDIR:
|
|||||||
POP AF
|
POP AF
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
RET
|
RET
|
||||||
.LoadRootDir:
|
;
|
||||||
LD HL,(FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤
|
.LoadRootDir: LD HL,(FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤
|
||||||
LD IX,(FatBuffer.RootDirFirstSector_L) ; ®¬¥à «®£. ᥪâ®à
|
LD IX,(FatBuffer.RootDirFirstSector_L) ; ®¬¥à «®£. ᥪâ®à
|
||||||
LD A,(FatBuffer.DirSizeInSectors)
|
LD A,(FatBuffer.DirSizeInSectors)
|
||||||
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£
|
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£
|
||||||
@ -372,11 +462,94 @@ LOADDIR:
|
|||||||
RET
|
RET
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
LOAD_SAVE_DIR_PREPARE:
|
||||||
|
;!TODO optimize
|
||||||
|
XOR A ; FILE MANIPULATOR = 0
|
||||||
|
LD H,A
|
||||||
|
LD L,A
|
||||||
|
LD IX,0
|
||||||
|
LD B,A ; ®â ç « ä ©«
|
||||||
|
CALL MOVE_FP
|
||||||
|
;
|
||||||
|
SET_PAGE_X DIRPAGE
|
||||||
|
AND A
|
||||||
|
EX AF,AF'
|
||||||
|
;
|
||||||
|
LD A,(FatBuffer.DRIVE)
|
||||||
|
LD (IY+_sFM.DRIVE),A
|
||||||
|
; [x] fat32
|
||||||
|
LD A,(FatBuffer.FAT_TYPE)
|
||||||
|
CP FAT_TYPE.x32 - 1
|
||||||
|
JR NC,.exit
|
||||||
|
;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
||||||
|
LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
||||||
|
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||||
|
.exit: EX AF,AF'
|
||||||
|
RET
|
||||||
|
|
||||||
|
;!TODO FAT procedures
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; ‘¡à®á¨âì ª¥è ª â «®£ ¤¨áª.
|
||||||
|
; ¢å®¤: iy=áâàãªâãà ¤¥áªà¨¯â®à
|
||||||
|
; [x] fat32 ;!TEST
|
||||||
|
SAVEDIR: ;!TODO optimize
|
||||||
|
; XOR A ; FILE MANIPULATOR = 0
|
||||||
|
; LD H,A
|
||||||
|
; LD L,A
|
||||||
|
; LD IX,0
|
||||||
|
; LD B,A ; ®â ç « ä ©«
|
||||||
|
; CALL MOVE_FP
|
||||||
|
; ;
|
||||||
|
; SET_PAGE_X DIRPAGE
|
||||||
|
; AND A
|
||||||
|
; PUSH AF
|
||||||
|
; ;
|
||||||
|
; 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