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
@ -1,11 +1,11 @@
|
||||
; 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
|
||||
CALL .TEST_SIZE
|
||||
;
|
||||
LD A,D
|
||||
OR E
|
||||
@ -15,16 +15,15 @@ READ: LD (.R_POINT),HL
|
||||
LD A,(IY+_sFM.DRIVE)
|
||||
CALL OPENDSK
|
||||
JP C,.ERR_1
|
||||
;<3B> áçñâ á¬¥é¥¨ï ¢ ᥪâ®à å
|
||||
;<3B> áçñâ á¬¥é¥¨ï ¢ ᥪâ®à å ;!HARDCODE sectro size
|
||||
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 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)
|
||||
;OR A
|
||||
RR L
|
||||
RR D
|
||||
RR E
|
||||
@ -93,7 +92,7 @@ READ: LD (.R_POINT),HL
|
||||
LD HL,0
|
||||
CALL MOVE_FP.F_current
|
||||
POP DE
|
||||
.NOREAD:
|
||||
.NOREAD: ;
|
||||
.COD+1: LD A,0
|
||||
OR A
|
||||
RET
|
||||
@ -144,16 +143,14 @@ READ: LD (.R_POINT),HL
|
||||
LD (.R_POINT),DE
|
||||
EXX
|
||||
JP .ROV4
|
||||
;
|
||||
.ERR_3: POP HL
|
||||
.ERR_2: POP HL
|
||||
.ERR_1: POP BC
|
||||
SCF
|
||||
RET
|
||||
|
||||
|
||||
|
||||
TSTSIZE:
|
||||
XOR A
|
||||
;
|
||||
.TEST_SIZE: XOR A
|
||||
LD (READ.COD),A
|
||||
LD L,(IY+_sFM.F_POSITION) ;FP LOW
|
||||
LD H,(IY+_sFM.F_POSITION+1)
|
||||
@ -168,8 +165,7 @@ TSTSIZE:
|
||||
INC HL
|
||||
;ADC HL,DE
|
||||
;
|
||||
.no_inc_hl:
|
||||
EXX ;HL':HL - NEW FP
|
||||
.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
|
||||
|
||||
@ -79,6 +79,7 @@ FM_FIND: CP FMCOUNT+1
|
||||
; A=0
|
||||
OR (IY) ;+00 NAME
|
||||
RET
|
||||
;
|
||||
.error: XOR A
|
||||
LD A,DSS_Error.sys.INVALID_HANDLE
|
||||
RET
|
||||
@ -145,35 +146,20 @@ GET_FM: LD IY,0
|
||||
|
||||
; HL:IX - OFFSET POINTER
|
||||
; A - FILE MANIPULATOR
|
||||
MOVE_FP:
|
||||
CALL SET_FM
|
||||
MOVE_FP: CALL SET_FM
|
||||
RET C
|
||||
INC B
|
||||
DEC B
|
||||
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
|
||||
DJNZ .B_1
|
||||
;from Start File
|
||||
.F_start:
|
||||
; B=0
|
||||
LD C,B
|
||||
.F_start: LD C,B
|
||||
LD D,B
|
||||
LD E,B
|
||||
JP .DO
|
||||
;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_1: DJNZ .B_2
|
||||
;from Current Position
|
||||
.F_current:
|
||||
LD C,(IY+_sFM.F_POSITION)
|
||||
.F_current: LD C,(IY+_sFM.F_POSITION)
|
||||
LD B,(IY+_sFM.F_POSITION+1)
|
||||
LD E,(IY+_sFM.F_POSITION+2)
|
||||
LD D,(IY+_sFM.F_POSITION+3)
|
||||
@ -187,6 +173,21 @@ MOVE_FP:
|
||||
LD (IY+_sFM.F_POSITION+3),H
|
||||
XOR A
|
||||
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
|
||||
; CY - FILE POINTER > SIZE
|
||||
|
||||
111
DSS/DOS_Proc.asm
111
DSS/DOS_Proc.asm
@ -63,28 +63,23 @@
|
||||
; DJNZ .GETN6
|
||||
; RET
|
||||
;---------------;---------------;---------------
|
||||
GetName:
|
||||
LD BC,#08FF ;!HARDCODE ¤«¨ ¨¬¥¨ + áçñâ稪
|
||||
GetName: LD BC,#08FF ;!HARDCODE ¤«¨ ¨¬¥¨ + áçñâ稪
|
||||
LD A,' '
|
||||
.loop: CP (HL)
|
||||
JR Z,.skip
|
||||
LDI
|
||||
DJNZ .loop
|
||||
;;;;
|
||||
JP .extension
|
||||
;;;;
|
||||
;
|
||||
.skip: LD C,B
|
||||
LD B,0
|
||||
; CF=0
|
||||
ADC HL,BC
|
||||
;;;;
|
||||
.extension:
|
||||
CP (HL)
|
||||
.extension: CP (HL)
|
||||
LD A,"."
|
||||
JR NZ,.copy_extension
|
||||
JR NZ,.copy_ext
|
||||
XOR A
|
||||
.copy_extension:
|
||||
LD (DE),A
|
||||
.copy_ext: LD (DE),A
|
||||
INC DE
|
||||
RET Z ;no copy extension
|
||||
; copy extension
|
||||
@ -100,13 +95,11 @@ GetName:
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; ’¥áâ ¤®¯ãá⨬®¥ ¨¬ï ¨ áâநâìáï ¤¨áª.
|
||||
; ¢å®¤: hl=áâப ¨¬¥¨
|
||||
; ¢ë室: (TMPNAME)
|
||||
GETWORD:
|
||||
; !TEST
|
||||
GETWORD: ; !TEST
|
||||
INC HL
|
||||
LD A,(HL)
|
||||
DEC HL
|
||||
@ -138,10 +131,8 @@ GETWORD:
|
||||
RET NZ
|
||||
INC HL
|
||||
;
|
||||
.dir_loop:
|
||||
LD DE,TMPNAME
|
||||
.dir_loop: LD DE,TMPNAME
|
||||
LD BC,#0DFF
|
||||
;
|
||||
.loop: LD A,(HL)
|
||||
INC HL
|
||||
CP '\' ;
|
||||
@ -164,8 +155,7 @@ GETWORD:
|
||||
LD (TMPNAME),A
|
||||
RET
|
||||
;
|
||||
.DIR_NAME:
|
||||
XOR A
|
||||
.DIR_NAME: XOR A
|
||||
LD (DE),A
|
||||
PUSH HL
|
||||
LD HL,TMPNAME
|
||||
@ -191,6 +181,7 @@ GETWORD:
|
||||
; JR .loop
|
||||
;
|
||||
|
||||
|
||||
; <20>ãä¥à ¨¬¥¨ 8.3 ä®à¬ â
|
||||
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 ä®à¬ â
|
||||
; ¢å®¤: hl = 8.3 ¨¬ï
|
||||
@ -528,7 +436,6 @@ DIR_PATH_CHECK: LD A,(HL)
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
CHECK_NAME:
|
||||
LD HL,MASKARE
|
||||
|
||||
@ -170,6 +170,8 @@ SEARCH:
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; FIND "MASKAREA" IN DIRECTORY
|
||||
; [ ] fat32
|
||||
; ¢ë室: IY:DE - cluster number
|
||||
FINDDIR:
|
||||
SET_PAGE_X DIRPAGE
|
||||
;
|
||||
@ -238,6 +240,7 @@ FINDDIR:
|
||||
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
.ADDSPEC:
|
||||
LD HL,WorkDirectory+1
|
||||
LD BC,WorkDirectory.DEPTH-1
|
||||
@ -290,6 +293,10 @@ FINDDIR:
|
||||
; ; JP IT_DIR
|
||||
;
|
||||
.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 D,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
|
||||
POP AF
|
||||
@ -316,38 +323,121 @@ FINDDIR:
|
||||
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>à®ç¨â âì ᯨ᮪ ª â «®£
|
||||
LOADDIR:
|
||||
XOR A
|
||||
LD H,A
|
||||
LD L,A
|
||||
LD IX,0
|
||||
LD B,A ; ®â ç « ä ©«
|
||||
CALL MOVE_FP
|
||||
|
||||
SET_PAGE_X DIRPAGE
|
||||
AND A
|
||||
; [x] fat32 ;!TEST
|
||||
LOADDIR: ;!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
|
||||
; ;!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
|
||||
;!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 ; á®åà. ¢ ¤¥áªà¨¯â®à
|
||||
; ®¬¥à ¯¥à¢®£® ª« áâ¥à
|
||||
; [ ] 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 ; ªã¤
|
||||
EX AF,AF'
|
||||
JR Z,.LoadRootDir
|
||||
.read_dir: LD HL,DIRPAGE.buffer ; ªã¤
|
||||
LD DE,#4000 ; ᪮«ìª®
|
||||
XOR A ; ¤¥áªà¨¯â®à
|
||||
CALL READ ; ç⥨¥ ¨§ ä ©«
|
||||
@ -355,8 +445,8 @@ LOADDIR:
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
.LoadRootDir:
|
||||
LD HL,(FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤
|
||||
;
|
||||
.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-ª â «®£
|
||||
@ -372,11 +462,94 @@ LOADDIR:
|
||||
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
|
||||
EX AF,AF'
|
||||
;
|
||||
@ -396,7 +569,7 @@ WRT_HND: SET_PAGE_X DIRPAGE
|
||||
JR Z,.WRT_HN2
|
||||
;ADD IX,BC
|
||||
ADD HL,BC
|
||||
JR NC,.loop
|
||||
JR NC,.loop ;!FIXIT ª®«¨ç¥á⢮ § ¯¨á¥© ª â «®£ = áâà ¨æ
|
||||
;
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
@ -427,59 +600,6 @@ WRT_HND: SET_PAGE_X DIRPAGE
|
||||
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
|
||||
; RET Z
|
||||
|
||||
|
||||
; ॣ. D - ®¬¥à ¤¨áª
|
||||
; [ ] fat32
|
||||
RD_BPB: LD C,SLOT3
|
||||
IN B,(C)
|
||||
PUSH BC
|
||||
@ -534,6 +656,8 @@ RD_BPB: LD C,SLOT3
|
||||
LD E,A
|
||||
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.RootDirStartCluster_L),DE
|
||||
LD (FatBuffer.RootDirStartCluster_H),DE
|
||||
LD (FatBuffer.SectorsPerFAT_H),A
|
||||
;
|
||||
;
|
||||
|
||||
@ -1 +1 @@
|
||||
953
|
||||
956
|
||||
Loading…
Reference in New Issue
Block a user