This commit is contained in:
Anatoliy Belyanskiy 2023-11-20 03:59:47 +10:00
parent f93e0ad5b2
commit 497344d117
3 changed files with 118 additions and 102 deletions

View File

@ -49,12 +49,12 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
SCF SCF
RET RET
.RATTRIB: .RATTRIB:
;!TEST ;[ ] 16/11/23 optimize get attribute ;!TEST ;[x] 16/11/23 optimize get attribute
;XOR A ;XOR A
; ;
CALL .OPENATR ;R02 CALL .OPENATR ;R02
RET C RET C
;!TEST ;[ ] 16/11/23 optimize get attribute ;!TEST ;[x] 16/11/23 optimize get attribute
LD A,(HANDBUF+_sFM.ATTRIBUT) LD A,(HANDBUF+_sFM.ATTRIBUT)
;LD B,(IY+_sFM.ATTRIBUT) ;LD B,(IY+_sFM.ATTRIBUT)
;PUSH BC ;PUSH BC
@ -67,11 +67,11 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
.WATTRIB: .WATTRIB:
PUSH AF PUSH AF
XOR A XOR A
;!TEST ;[ ] 16/11/23 optimize get attribute ;!TEST ;[x] 16/11/23 optimize get attribute
LD (OPEN.TMP),A LD (OPEN.TMP),A
; ;
CALL .OPENATR ;R02 CALL .OPENATR ;R02
;!TEST ;[ ] 16/11/23 optimize get attribute ;!TEST ;[x] 16/11/23 optimize get attribute
CALL NC,OPEN.FM CALL NC,OPEN.FM
; ;
POP BC POP BC
@ -87,7 +87,7 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
RET RET
;R02 ;R02
.OPENATR: .OPENATR:
;!TEST ;[ ] 16/11/23 optimize get attribute ;!TEST ;[x] 16/11/23 optimize get attribute
;LD (OPEN.TMP),A ; à ¡. ï祩ª  (§¤¥áì  âਡãâ § ¯¨á¨) ;LD (OPEN.TMP),A ; à ¡. ï祩ª  (§¤¥áì  âਡãâ § ¯¨á¨)
; ;
CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
@ -95,7 +95,7 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
CALL MASK CALL MASK
RET C RET C
LD A,FAT_ATTR.NoVolID LD A,FAT_ATTR.NoVolID
;!TEST ;[ ] 16/11/23 optimize get attribute ;!TEST ;[x] 16/11/23 optimize get attribute
JP SEARCH.Custom JP SEARCH.Custom
;CALL SEARCH.Custom ;CALL SEARCH.Custom
;RET C ; § ¯¨áì ­¥ ­ ©¤¥­  ;RET C ; § ¯¨áì ­¥ ­ ©¤¥­ 
@ -199,20 +199,18 @@ DEL_FN: ;!TEST
; ;
CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C RET C
; LD HL,TMPNAME
; LD DE,MASKARE
CALL MASK CALL MASK
RET C RET C
; ;
; LD DE,MASKARE ;!TEST optimization
; CALL MASK ;LD HL,MASKARE
; RET C ;LD BC,11
LD HL,MASKARE ;LD A,"?"
LD BC,11 ;CPIR
LD A,"?" ;LD A,DSS_Error.sys.INVALID_NAME
CPIR ;SCF
LD A,DSS_Error.sys.INVALID_NAME CALL CHECK_NAME
SCF ;
RET Z RET Z
CALL LOADDIR CALL LOADDIR
CALL SEARCH.File CALL SEARCH.File
@ -264,12 +262,15 @@ RENAME: ;!TEST Current Dir ;[x] 15/10/23
CALL MASK.name CALL MASK.name
POP DE POP DE
RET C RET C
LD HL,MASKARE ;!TEST optimization
LD BC,11 ;LD HL,MASKARE
LD A,"?" ;LD BC,11
CPIR ;LD A,"?"
LD A,DSS_Error.sys.INVALID_NAME ;CPIR
SCF ;LD A,DSS_Error.sys.INVALID_NAME
;SCF
CALL CHECK_NAME
;
RET Z RET Z
PUSH DE PUSH DE
CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£  CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£ 
@ -281,12 +282,15 @@ RENAME: ;!TEST Current Dir ;[x] 15/10/23
;LD DE,MASKARE ;LD DE,MASKARE
CALL MASK.name CALL MASK.name
RET C RET C
LD HL,MASKARE ;!TEST optimization
LD BC,11 ;LD HL,MASKARE
LD A,"?" ;LD BC,11
CPIR ;LD A,"?"
LD A,DSS_Error.sys.INVALID_NAME ;CPIR
SCF ;LD A,DSS_Error.sys.INVALID_NAME
;SCF
CALL CHECK_NAME
;
RET Z RET Z
PUSH IX PUSH IX
LD A,FAT_ATTR.NoSYSnoVolID LD A,FAT_ATTR.NoSYSnoVolID
@ -397,7 +401,7 @@ CLOSE: LD (.TMP),A
LD E,(IY+_sFM.DIR_CLUSTER) LD E,(IY+_sFM.DIR_CLUSTER)
LD D,(IY+_sFM.DIR_CLUSTER+1) LD D,(IY+_sFM.DIR_CLUSTER+1)
PUSH DE PUSH DE
; [ ] 15/11/2023 -bug with bad clusters ;!TEST ; [x] 15/11/2023 -bug with bad clusters ;!TEST
LD A,(IY+_sFM.DRIVE) LD A,(IY+_sFM.DRIVE)
CALL OPENDSK CALL OPENDSK
; ;
@ -406,7 +410,7 @@ CLOSE: LD (.TMP),A
POP DE POP DE
LD (IY+_sFM.DIR_CLUSTER),E LD (IY+_sFM.DIR_CLUSTER),E
LD (IY+_sFM.DIR_CLUSTER+1),D LD (IY+_sFM.DIR_CLUSTER+1),D
; [ ] 15/11/2023 -bug with bad clusters ;!TEST ; [x] 15/11/2023 -bug with bad clusters ;!TEST
LD (IY+_sFM.ST_CLUSTER),E LD (IY+_sFM.ST_CLUSTER),E
LD (IY+_sFM.ST_CLUSTER+1),D LD (IY+_sFM.ST_CLUSTER+1),D
; ;
@ -452,6 +456,7 @@ CLOSE: LD (.TMP),A
; C - #19 ; C - #19
; HL - 㪠§ â¥«ì ­  ä ©«®¢ãî ᯥæ¨ä¨ª æ¨î ; HL - 㪠§ â¥«ì ­  ä ©«®¢ãî ᯥæ¨ä¨ª æ¨î
; DE - à ¡®ç¨© ¡ãä¥à 44 ¡ ©â , ¥á«¨ B=0, ¨­ ç¥ 256 ¡ ©â ; DE - à ¡®ç¨© ¡ãä¥à 44 ¡ ©â , ¥á«¨ B=0, ¨­ ç¥ 256 ¡ ©â
; ;!!!!! ­  á ¬®¬ ¤¥«¥ ᥩç á ¥á«¨ B=1, à ¡®ç¨© ¡ãä¥à 46 ¡ ©â
; A -  âਡãâë, ¨á¯®«ì§ã¥¬ë¥ ¯à¨ ¯®¨áª¥ ; A -  âਡãâë, ¨á¯®«ì§ã¥¬ë¥ ¯à¨ ¯®¨áª¥
; B = 0 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ 11 ¡ ©â "FilenameExt" ; B = 0 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ 11 ¡ ©â "FilenameExt"
; B = 1 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ DOS "filename.ext",0 ; B = 1 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ DOS "filename.ext",0
@ -478,13 +483,12 @@ F_FIRST:
PUSH HL PUSH HL
;!TEST Current Dir ;[x] 15/10/23 ;!TEST Current Dir ;[x] 15/10/23
CALL DIR_PATH_CHECK CALL DIR_PATH_CHECK
RET C
; ;
CALL LOADDIR CALL LOADDIR
POP HL POP HL
CALL GETWORD CALL GETWORD
RET C RET C
; LD HL,TMPNAME
; LD DE,MASKARE
CALL MASK CALL MASK
RET C RET C
LD A,(.TMP) LD A,(.TMP)
@ -556,10 +560,8 @@ F_NEXT:
JP F_FIRST.FIND_S JP F_FIRST.FIND_S
.NSEARCH: .NSEARCH:
EX AF,AF' EX AF,AF'
SET_PAGE_X DIRPAGE SET_PAGE_X DIRPAGE
PUSH AF ;PUSH AF
EX AF,AF' EX AF,AF'
CPL CPL
LD C,A LD C,A
@ -907,14 +909,10 @@ CHDIR: CALL GETWORD ;
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0 ; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
MKDIR: ;!TEST Current Dir ;[x] 15/10/23 MKDIR: ;!TEST Current Dir ;[x] 15/10/23
LD C,A
PUSH HL PUSH HL
PUSH BC
CALL DIR_PATH_CHECK CALL DIR_PATH_CHECK
POP BC
POP HL POP HL
RET C RET C
LD A,C
CALL .START CALL .START
PUSH AF PUSH AF
LD HL,CurrentDirectory LD HL,CurrentDirectory
@ -1080,14 +1078,10 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0 ; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
RMDIR: ;!TEST Current Dir ;[x] 15/10/23 RMDIR: ;!TEST Current Dir ;[x] 15/10/23
LD C,A
PUSH HL PUSH HL
PUSH BC
CALL DIR_PATH_CHECK CALL DIR_PATH_CHECK
POP BC
POP HL POP HL
RET C RET C
LD A,C
CALL .START CALL .START
PUSH AF PUSH AF
LD HL,CurrentDirectory LD HL,CurrentDirectory
@ -1098,16 +1092,17 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
; ;
.START: CALL GETWORD .START: CALL GETWORD
RET C RET C
; LD HL,TMPNAME
; LD DE,MASKARE
CALL MASK CALL MASK
RET C RET C
LD HL,MASKARE ;!TEST optimization
LD BC,11 ;LD HL,MASKARE
LD A,"?" ;LD BC,11
CPIR ;LD A,"?"
LD A,DSS_Error.sys.INVALID_NAME ;CPIR
SCF ;LD A,DSS_Error.sys.INVALID_NAME
;SCF
CALL CHECK_NAME
;
RET Z RET Z
CALL LOADDIR CALL LOADDIR
CALL SEARCH.Dir CALL SEARCH.Dir
@ -1372,7 +1367,6 @@ RMKTIME:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; HL - 11 bytes filename "FILENAMEEXT" ; HL - 11 bytes filename "FILENAMEEXT"
; DE - DOS filename "FILENAME.EXT",0 ; DE - DOS filename "FILENAME.EXT",0
;!FIXIT ­¥ª®à४⭮ à ¡®â ¥â
; GETNAME: ; GETNAME:
; LD BC,#08FF ; LD BC,#08FF
; .GETN1: LD A,(HL) ; .GETN1: LD A,(HL)
@ -1460,7 +1454,7 @@ SEARCH:
.File: LD A,FAT_ATTR.NoDIRnoVolID .File: LD A,FAT_ATTR.NoDIRnoVolID
.Custom: EX AF,AF' ; A = 76ADLSHR .Custom: EX AF,AF' ; A = 76ADLSHR
SET_PAGE_X DIRPAGE SET_PAGE_X DIRPAGE
PUSH AF ;PUSH AF
EX AF,AF' EX AF,AF'
; ;
CPL CPL
@ -1508,8 +1502,10 @@ SEARCH:
EX DE,HL EX DE,HL
LD BC,HANDBUF.SIZE LD BC,HANDBUF.SIZE
LDIR LDIR
POP AF ;POP AF
EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
EX AF,AF'
AND A AND A
RET RET
.next_record: .next_record:
@ -1522,14 +1518,16 @@ SEARCH:
ADD IX,DE ADD IX,DE
JR NC,.loop JR NC,.loop
.error_too_many_files: .error_too_many_files:
POP AF ;POP AF
EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR
SCF SCF
RET RET
; ;
.error_file_not_found: .error_file_not_found:
POP AF ;POP AF
EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
LD A,DSS_Error.sys.FILE_NOT_FOUND LD A,DSS_Error.sys.FILE_NOT_FOUND
SCF SCF
@ -1559,10 +1557,8 @@ GETWORD:
INC HL INC HL
INC HL INC HL
PUSH HL PUSH HL
;!TEST CHNDISK OPENDSK
CALL CHNDISK CALL CHNDISK
;CALL OPENDSK ;CALL OPENDSK
;
POP HL POP HL
RET C RET C
LD A,(HL) LD A,(HL)
@ -1663,7 +1659,7 @@ OPENDSK:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
OPENDIR:;!TEST ;[ ] some optimize OPENDIR:;!TEST ;[x] some optimize
;XOR A ;XOR A
;CALL SET_FM ;CALL SET_FM
LD IY,CORE_BUFFERS.FM_BUF LD IY,CORE_BUFFERS.FM_BUF
@ -1673,7 +1669,7 @@ OPENDIR:;!TEST ;[ ] some optimize
JR NZ,.SUBDIR JR NZ,.SUBDIR
.REROOT1: .REROOT1:
LD DE,0 LD DE,0
;!TEST ;[ ] some optimize ;!TEST ;[x] some optimize
;LD (IY+_sFM.ST_CLUSTER),E ;LD (IY+_sFM.ST_CLUSTER),E
;LD (IY+_sFM.ST_CLUSTER+1),D ;LD (IY+_sFM.ST_CLUSTER+1),D
EX DE,HL EX DE,HL
@ -1691,7 +1687,7 @@ OPENDIR:;!TEST ;[ ] some optimize
.SUBDIR: .SUBDIR:
CP "." CP "."
JR NZ,.SUBDIR2 JR NZ,.SUBDIR2
;!TEST ;[ ] some optimize ;!TEST ;[x] some optimize
;LD A,(IY+_sFM.ST_CLUSTER) ;R05 ;LD A,(IY+_sFM.ST_CLUSTER) ;R05
LD A,(CORE_BUFFERS.FM_BUF + _sFM.ST_CLUSTER) ;R05 LD A,(CORE_BUFFERS.FM_BUF + _sFM.ST_CLUSTER) ;R05
; ;
@ -1721,7 +1717,7 @@ OPENDIR:;!TEST ;[ ] some optimize
.SUBDIR3: .SUBDIR3:
CALL FINDDIR CALL FINDDIR
RET C RET C
;!TEST ;[ ] some optimize ;!TEST ;[x] some optimize
;LD (IY+_sFM.ST_CLUSTER),E ;LD (IY+_sFM.ST_CLUSTER),E
;LD (IY+_sFM.ST_CLUSTER+1),D ;LD (IY+_sFM.ST_CLUSTER+1),D
;LD DE,#4000 ;!HARDCODE ;LD DE,#4000 ;!HARDCODE
@ -1783,7 +1779,8 @@ FINDDIR:
INC HL INC HL
LD BC,WorkDirectory.DEPTH LD BC,WorkDirectory.DEPTH
XOR A XOR A
CPIR ;!FIXIT ­¥â ¯à®¢¥àª¨ ­  § ¢¥à襭¨¥ ¯® BC=0 CPIR
JP PO,.error ;[x] 20/11/23 ¯à®¢¥àª  ­  ¢ë室 §  £à ­¨æë
DEC HL ;R09 DEC HL ;R09
DEC HL DEC HL
LD BC,WorkDirectory.DEPTH LD BC,WorkDirectory.DEPTH
@ -1813,52 +1810,53 @@ FINDDIR:
LD HL,WorkDirectory+1 LD HL,WorkDirectory+1
LD BC,WorkDirectory.DEPTH-1 LD BC,WorkDirectory.DEPTH-1
CALL .CHECK_SLASH CALL .CHECK_SLASH
JR C,.error
;R11 ;R11
LD A,B LD A,B
AND A AND A
JR NZ,.nxt JR NZ,.nxt
LD A,C LD A,C
CP 8+1+3 ;!HARDCODE ¨¬ï ª â «®£  + â®çª  + à áè¨à¥­¨¥ CP 8+1+3 ;!HARDCODE ¨¬ï ª â «®£  + â®çª  + à áè¨à¥­¨¥
JR C,FINDDIR.error JR C,.error
.nxt: ; .nxt: ;
LD E,XL LD E,XL
LD D,XH LD D,XH
; [ ] ®¯â¨¬¨§ æ¨ï ¯® à §¬¥àã ; [x] ®¯â¨¬¨§ æ¨ï ¯® à §¬¥àã
EX DE,HL EX DE,HL
CALL GETNAME CALL GETNAME
EX DE,HL EX DE,HL
; ;
/*
LD BC,256*8 + ' ' ;!HARDCODE ; LD BC,256*8 + ' ' ;!HARDCODE
.MM1: LD A,(DE) ; .MM1: LD A,(DE)
INC DE ; INC DE
CP C ; CP C
JR Z,.MM2 ; JR Z,.MM2
LD (HL),A ;!FIXIT ¢®â âãâ ¬®¦¥â ¢ë«¥§ âì §  ¯à¥¤¥«ë ¡ãä¥à  ¯à¨ ¤«¨­­®¬ ¯ã⨠¨ £à®å âì ª®¤ ¨ ¤ ­­ë¥. R11 ¢à¥¬¥­® «¥ç¨â ª®áâë«ñ¬ ; LD (HL),A
INC HL ; INC HL
.MM2 DJNZ .MM1 ;x42-40 50-55 ; .MM2 DJNZ .MM1 ;x42-40 50-55
LD A,(DE) ; LD A,(DE)
INC DE ; INC DE
CP C ; CP C
JR Z,.MM3 ; JR Z,.MM3
LD (HL),"." ; LD (HL),"."
INC HL ; INC HL
LD (HL),A ; LD (HL),A
INC HL ; INC HL
LD A,(DE) ; LD A,(DE)
INC DE ; INC DE
CP C ; CP C
JR Z,.MM3 ; JR Z,.MM3
LD (HL),A ; LD (HL),A
INC HL ; INC HL
LD A,(DE) ; LD A,(DE)
CP C ; CP C
JR Z,.MM3 ; JR Z,.MM3
LD (HL),A ; LD (HL),A
.MM2_5: INC HL ; .MM2_5: INC HL
.MM3: LD (HL),0 ; .MM3: LD (HL),0
; JP IT_DIR ; ; JP IT_DIR
*/
.IT_DIR: .IT_DIR:
LD E,(IX+_sFM.ST_CLUSTER) LD E,(IX+_sFM.ST_CLUSTER)
LD D,(IX+_sFM.ST_CLUSTER+1) LD D,(IX+_sFM.ST_CLUSTER+1)
@ -1868,7 +1866,11 @@ FINDDIR:
RET RET
.CHECK_SLASH: .CHECK_SLASH:
XOR A XOR A
CPIR ;!FIXIT ­¥â ¯à®¢¥àª¨ ­  § ¢¥à襭¨¥ ¯® BC=0 CPIR
;[x] 20/11/23 ¯à®¢¥àª  ­  ¢ë室 §  £à ­¨æë
SCF
RET PO
;
DEC HL DEC HL
DEC HL DEC HL
LD A,'\' ; #5C LD A,'\' ; #5C
@ -2254,11 +2256,25 @@ DIR_PATH_CHECK: LD A,(HL)
CP (HL) CP (HL)
RET RET
.gotoPath: CALL FINDDIR.CHECK_SLASH .gotoPath: CALL FINDDIR.CHECK_SLASH
LD A,DSS_Error.sys.PATH_NOT_FOUND
RET C
LD HL,CurrentPath LD HL,CurrentPath
JP GETWORD JP GETWORD
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
CHECK_NAME:
LD HL,MASKARE
.custom: LD BC,11 ;!HARDCODE
LD A,"?"
CPIR
LD A,DSS_Error.sys.INVALID_NAME
SCF
RET
;----------------------------------------------------------------------;
;!FIXIT ª ¡ãä¥à ¬ ;!FIXIT ª ¡ãä¥à ¬
; Œ áᨢ «®£. ­®¬¥à®¢ ¡ ­®ª à áè¨à¥­¨ï DSS ; Œ áᨢ «®£. ­®¬¥à®¢ ¡ ­®ª à áè¨à¥­¨ï DSS
BANKTBL: BLOCK USING_MEMPAGES+1,#FF ; +1 ¤«ï COREPAGE BANKTBL: BLOCK USING_MEMPAGES+1,#FF ; +1 ¤«ï COREPAGE

View File

@ -1 +1 @@
618 607

@ -1 +1 @@
Subproject commit b69773d50cb2c0e1da44f7f20c7daa32871f2308 Subproject commit 18269745815d90e76686f5693e0cb45f8f31741c