bug fixing

This commit is contained in:
Anatoliy Belyanskiy 2023-11-17 02:11:03 +10:00
parent 6333672fa6
commit f93e0ad5b2
5 changed files with 177 additions and 131 deletions

View File

@ -1,6 +1,7 @@
!FIXIT !FIXIT
[ ] D:\>copy dss\system.dos c:\system.dos [ ] D:\>copy dss\system.dos c:\system.dos (bp 812d, 8136)
Can't open source file Can't open source file
[ ] E:\BIN\MENU>c:\dss [ ] E:\BIN\MENU>c:\dss
çâ®-â® ¯à® § ¯®«­¥­­®áâì ¤¨à¥ªâ®à¨¨ çâ®-â® ¯à® § ¯®«­¥­­®áâì ¤¨à¥ªâ®à¨¨
[ ] C:\????? ¨«¨ ????? [ ] C:\????? ¨«¨ ?????

View File

@ -39,7 +39,7 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
RET C RET C
LD A,C LD A,C
; ;
;
INC B INC B
DEC B DEC B
JP Z,.RATTRIB JP Z,.RATTRIB
@ -49,21 +49,31 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
SCF SCF
RET RET
.RATTRIB: .RATTRIB:
XOR A ;!TEST ;[ ] 16/11/23 optimize get attribute
;XOR A
;
CALL .OPENATR ;R02 CALL .OPENATR ;R02
RET C RET C
LD B,(IY+_sFM.ATTRIBUT) ;!TEST ;[ ] 16/11/23 optimize get attribute
PUSH BC LD A,(HANDBUF+_sFM.ATTRIBUT)
CALL CLOSE ;LD B,(IY+_sFM.ATTRIBUT)
POP BC ;PUSH BC
RET C ;CALL CLOSE
LD A,B ;POP BC
;AND A ;RET C
;LD A,B
;
RET RET
.WATTRIB: .WATTRIB:
PUSH AF PUSH AF
XOR A XOR A
;!TEST ;[ ] 16/11/23 optimize get attribute
LD (OPEN.TMP),A
;
CALL .OPENATR ;R02 CALL .OPENATR ;R02
;!TEST ;[ ] 16/11/23 optimize get attribute
CALL NC,OPEN.FM
;
POP BC POP BC
RET C RET C
SET 7,(IY+_sFM.ACCESS_MODE) SET 7,(IY+_sFM.ACCESS_MODE)
@ -71,27 +81,27 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
LD (IY+_sFM.ATTRIBUT),B LD (IY+_sFM.ATTRIBUT),B
PUSH BC PUSH BC
CALL CLOSE CALL CLOSE
POP BC .error: POP BC
RET C RET C
LD A,B LD A,B
;AND A
RET RET
;R02 ;R02
.OPENATR: .OPENATR:
LD (OPEN.TMP),A ; à ¡. ï祩ª  (§¤¥áì  âਡãâ § ¯¨á¨) ;!TEST ;[ ] 16/11/23 optimize get attribute
;LD (OPEN.TMP),A ; à ¡. ï祩ª  (§¤¥áì  âਡãâ § ¯¨á¨)
;
CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C RET C
; LD HL,TMPNAME
; LD DE,MASKARE
CALL MASK CALL MASK
RET C RET C
LD A,FAT_ATTR.NoVolID LD A,FAT_ATTR.NoVolID
CALL SEARCH.Custom ;!TEST ;[ ] 16/11/23 optimize get attribute
; JR NC,OPENAT ; ­  ¯®¨áª ᢮¡. ¤¥áªà¨¯â®à  JP SEARCH.Custom
; ; § ¯¨áì ­¥ ­ ©¤¥­  ;CALL SEARCH.Custom
; RET ;RET C ; § ¯¨áì ­¥ ­ ©¤¥­ 
RET C ; § ¯¨áì ­¥ ­ ©¤¥­  ;JP OPEN.FM ; ­  ¯®¨áª ᢮¡. ¤¥áªà¨¯â®à 
JP OPEN.FM ; ­  ¯®¨áª ᢮¡. ¤¥áªà¨¯â®à  ;
;
;R02 ;R02
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
@ -308,28 +318,24 @@ RENAME: ;!TEST Current Dir ;[x] 15/10/23
; CF=1, A - ª®¤ ®è¨¡ª¨. ; CF=1, A - ª®¤ ®è¨¡ª¨.
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
OPEN_FN:;!TEST Current Dir ;[x] 15/10/23 OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
LD C,A LD (OPEN.TMP),A
PUSH HL PUSH HL
PUSH BC
CALL DIR_PATH_CHECK.forceCheck CALL DIR_PATH_CHECK.forceCheck
POP BC
POP HL POP HL
RET C RET C
LD A,C JR OPEN.start
;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir? ;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir?
; ;
;R08 ;R08
OPEN: LD (.TMP),A ; enter point for CREATE OPEN: LD (.TMP),A ; enter point from CREATE
CALL GETWORD .start: CALL GETWORD
RET C RET C
; LD HL,TMPNAME CALL MASK ; enter point from OPEN_FN
; LD DE,MASKARE
CALL MASK
RET C RET C
.FILE: CALL SEARCH.File ; enter point for EXEC .FILE: CALL SEARCH.File ; enter point from EXEC
RET C RET C
;R02 ;R02
.FM: CALL GET_FM ; enter point for ATTRIB .FM: CALL GET_FM ; enter point from ATTRIB
RET C RET C
LD A,C LD A,C
EX AF,AF' EX AF,AF'
@ -581,17 +587,17 @@ CHNDISK_FN:
POP AF POP AF
RET RET
CHNDISK:;[x] ¡®«¥¥ ª®à४⭠ï ᬥ­  ¤¨áª  CHNDISK:;[x] ¡®«¥¥ ª®à४⭠ï ᬥ­  ¤¨áª 
CALL OPENDSK CALL OPENDSK
; ;
;R10 ;R10
RET C RET C
LD HL,WorkDirectory LD HL,WorkDirectory
LD (HL),0 LD (HL),0
PUSH AF PUSH AF
CALL OPENDIR CALL OPENDIR
POP BC POP BC
RET C RET C
LD A,B LD A,B
RET RET
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
@ -1204,8 +1210,6 @@ DOSNAME:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; —⥭¨¥ ॣ¨áâ஢ CMOS ; —⥭¨¥ ॣ¨áâ஢ CMOS
; ¢å®¤: d=­®¬¥à ॣ¨áâà  ; ¢å®¤: d=­®¬¥à ॣ¨áâà 
@ -1368,32 +1372,69 @@ 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:
; LD BC,#08FF
; .GETN1: LD A,(HL)
; CP " "
; JR NZ,.GETN3
; .GETN2: INC HL
; DJNZ .GETN2
; JR .GETN4
; .GETN3: LDI
; DJNZ .GETN1
; ;
; .GETN4: LD A,(HL)
; CP " "
; LD A,"."
; JR NZ,.GETN5
; LD A,#00
; .GETN5: LD (DE),A
; INC DE
; RET Z
; LD B,#03
; .GETN6: LD A,(HL)
; CP " "
; RET Z
; LDI
; XOR A
; LD (DE),A
; DJNZ .GETN6
; RET
;---------------;---------------;---------------
GETNAME: GETNAME:
LD BC,#08FF LD BC,#08FF
.GETN1: LD A,(HL) LD A,' '
CP " " .loop: CP (HL)
JR NZ,.GETN3 JR Z,.skip
.GETN2: INC HL
DJNZ .GETN2
JR .GETN4
.GETN3: LDI
DJNZ .GETN1
.GETN4: LD A,(HL)
CP " "
LD A,"."
JR NZ,.GETN5
LD A,#00
.GETN5: LD (DE),A
INC DE
RET Z
LD B,#03
.GETN6: LD A,(HL)
CP " "
RET Z
LDI LDI
DJNZ .loop
;;;;
JP .extension
;;;;
.skip: LD C,B
LD B,0
; CF=0
ADC HL,BC
;;;;
.extension:
CP (HL)
LD A,"."
JR NZ,.copy_extension
XOR A XOR A
.copy_extension:
LD (DE),A
INC DE
RET Z ;no copy extension
; copy extension
LD BC,#03FF ;!HARDCODE ¤«¨­  à áè¨à¥­¨ï + áçñâ稪
LD A,' '
.loop2: CP (HL)
JR Z,.exit
LDI
DJNZ .loop2
.exit: XOR A
LD (DE),A LD (DE),A
DJNZ .GETN6
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
@ -1401,8 +1442,9 @@ GETNAME:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; <20>®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ª â «®£  ; <20>®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ª â «®£ 
; ;
; ¢å®¤: a= âਡãâ § ¯¨á¨ ; ¢å®¤: a= âਡãâ § ¯¨á¨
; ¢ë室: de'=¨­¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£  ; ¢ë室: de'=¨­¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£ 
; (HANDBUF) = file's direcory record
; CF - ª â «®£ ­¥ ­ ©¤¥­ ; CF - ª â «®£ ­¥ ­ ©¤¥­
SEARCH: SEARCH:
.Dir: LD A,FAT_ATTR.DIRECTORY .Dir: LD A,FAT_ATTR.DIRECTORY
@ -1497,7 +1539,8 @@ SEARCH:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ’¥áâ ­  ¤®¯ãá⨬®¥ ¨¬ï ¨ ­ áâநâìáï ­  ¤¨áª. ; ’¥áâ ­  ¤®¯ãá⨬®¥ ¨¬ï ¨ ­ áâநâìáï ­  ¤¨áª.
; ¢å®¤: hl=áâப  ¨¬¥­¨ ; ¢å®¤: hl=áâப  ¨¬¥­¨
; ¢ë室: (TMPNAME)
GETWORD: GETWORD:
; !TEST ; !TEST
INC HL INC HL
@ -1517,11 +1560,21 @@ GETWORD:
INC HL INC HL
PUSH HL PUSH HL
;!TEST CHNDISK OPENDSK ;!TEST CHNDISK OPENDSK
;CALL OPENDSK
CALL CHNDISK CALL CHNDISK
;CALL OPENDSK
; ;
POP HL POP HL
RET C RET C
LD A,(HL)
OR A
RET Z
CP ' ' ;
RET Z
CP '\' ;
SCF
LD A,DSS_Error.sys.PATH_NOT_FOUND
RET NZ
INC HL
; ;
.dir_loop: .dir_loop:
LD DE,TMPNAME LD DE,TMPNAME
@ -1529,7 +1582,7 @@ GETWORD:
; ;
.loop: LD A,(HL) .loop: LD A,(HL)
INC HL INC HL
CP '\' CP '\' ;
JR Z,.DIR_NAME JR Z,.DIR_NAME
; AND A ; AND A
; JR Z,.DIR_NAME ; JR Z,.DIR_NAME
@ -1544,6 +1597,7 @@ GETWORD:
LD A,DSS_Error.sys.INVALID_NAME LD A,DSS_Error.sys.INVALID_NAME
SCF SCF
RET RET
;
.DIR_NAME: .DIR_NAME:
XOR A XOR A
LD (DE),A LD (DE),A
@ -1631,7 +1685,8 @@ OPENDIR:;!TEST ;[ ] some optimize
LD (HL),'\' LD (HL),'\'
INC HL INC HL
LD (HL),#00 LD (HL),#00
AND A ; CF=0
;AND A
RET RET
.SUBDIR: .SUBDIR:
CP "." CP "."
@ -1679,7 +1734,8 @@ OPENDIR:;!TEST ;[ ] some optimize
EX DE,HL EX DE,HL
; ;
CALL LOADDIR CALL LOADDIR
AND A ; CF=0
;AND A
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
@ -1691,97 +1747,96 @@ FINDDIR:
; ;
PUSH AF PUSH AF
LD IX,DIRPAGE.buffer LD IX,DIRPAGE.buffer
.F_01: LD A,(IX+00) .big_loop:
LD A,(IX+00)
OR A OR A
JR Z,.error JR Z,.error
CP #E5 CP #E5
JR Z,.F_03 JR Z,.next_step
LD A,(IX+11) LD A,(IX+11) ;!HARDCODE
AND #10 AND #10 ;!HARDCODE
JR Z,.F_03 JR Z,.next_step
LD HL,MASKARE LD HL,MASKARE
LD D,XH LD D,XH
LD E,XL LD E,XL
EX DE,HL EX DE,HL
LD B,11 LD B,11 ;!HARDCODE
.loop: LD A,(DE) .loop: LD A,(DE)
CP "?" CP "?"
JR Z,.F_05 JR Z,.compared
CP (HL) CP (HL)
JR NZ,.F_03 JR NZ,.next_step
.F_05: INC HL .compared:
INC HL
INC DE INC DE
DJNZ .loop DJNZ .loop
;
LD A,(IX+0) LD A,(IX+0)
CP "." CP "."
JP NZ,.ADDSPEC JP NZ,.ADDSPEC
LD A,(IX+1) LD A,(IX+1) ;!HARDCODE
CP "." CP "."
JP NZ,.IT_DIR JP NZ,.IT_DIR
;LD HL,CurrentDirectory
LD HL,WorkDirectory LD HL,WorkDirectory
LD D,H LD D,H
LD E,L LD E,L
INC HL INC HL
;LD BC,CurrentDirectory.DEPTH
LD BC,WorkDirectory.DEPTH LD BC,WorkDirectory.DEPTH
XOR A XOR A
CPIR ;!FIXIT ­¥â ¯à®¢¥àª¨ ­  § ¢¥à襭¨¥ ¯® BC=0 CPIR ;!FIXIT ­¥â ¯à®¢¥àª¨ ­  § ¢¥à襭¨¥ ¯® BC=0
DEC HL ;R09 ;[x] ¨á¯à ¢«¥­ ¡ £ á ¯ àᨭ£®¬ ¡ãä¥à  ª â «®£  DEC HL ;R09
DEC HL DEC HL
;LD BC,CurrentDirectory.DEPTH
LD BC,WorkDirectory.DEPTH LD BC,WorkDirectory.DEPTH
LD A,'\' LD A,'\'
CPDR CPDR
INC HL INC HL
;AND A
; CF = 0
EX DE,HL EX DE,HL
; CF = 0
SBC HL,DE SBC HL,DE
EX DE,HL EX DE,HL
JR NZ,.MM3 JR NZ,.MM3
JP .MM2_5 INC HL
.F_03: LD BC,#0020 .MM3: LD (HL),0
JP .IT_DIR
;
.next_step:
LD BC,#0020 ;!HARDCODE
ADD IX,BC ADD IX,BC
JR NC,.F_01 JR NC,.big_loop
;
.error: POP AF .error: POP AF
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 E,XL
LD D,XH
LD HL,WorkDirectory+1 LD HL,WorkDirectory+1
LD BC,WorkDirectory.DEPTH-1 LD BC,WorkDirectory.DEPTH-1
; XOR A
; CPIR ;!FIXIT ­¥â ¯à®¢¥àª¨ ­  § ¢¥à襭¨¥ ¯® BC=0
; DEC HL
; DEC HL
; LD A,'\' ; #5C
; CP (HL)
; INC HL
; JR Z,.ADDSPE0
; LD (HL),A
; INC HL
; .ADDSPE0:
CALL .CHECK_SLASH CALL .CHECK_SLASH
;R11 ;R11
LD A,B LD A,B
AND A AND A
JR NZ,.MM1 JR NZ,.nxt
LD A,C LD A,C
CP 8 CP 8+1+3 ;!HARDCODE ¨¬ï ª â «®£  + â®çª  + à áè¨à¥­¨¥
JR C,FINDDIR.error JR C,FINDDIR.error
;R11 .nxt: ;
LD BC,#0820 LD E,XL
LD D,XH
; [ ] ®¯â¨¬¨§ æ¨ï ¯® à §¬¥àã
EX DE,HL
CALL GETNAME
EX DE,HL
;
/*
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 ;!FIXIT ¢®â âãâ ¬®¦¥â ¢ë«¥§ âì §  ¯à¥¤¥«ë ¡ãä¥à  ¯à¨ ¤«¨­­®¬ ¯ã⨠¨ £à®å âì ª®¤ ¨ ¤ ­­ë¥. R11 ¢à¥¬¥­® «¥ç¨â ª®áâë«ñ¬
INC HL INC HL
.MM2 DJNZ .MM1 .MM2 DJNZ .MM1 ;x42-40 50-55
LD A,(DE) LD A,(DE)
INC DE INC DE
CP C CP C
@ -1803,6 +1858,7 @@ FINDDIR:
.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)
@ -2138,24 +2194,14 @@ DIR_PATH_CHANGE:
ADD 'A' ADD 'A'
LD (CurrentPath),A LD (CurrentPath),A
; ;
.Current: ;LD HL,WorkDirectory .Current: LD HL,CurrentDirectory
;LD DE,CurrentDirectory
;LD BC,DIRECTORY_PATH_LENGTH
;LDIR
;RET
LD HL,CurrentDirectory
JP CURRDIR JP CURRDIR
; ;
.FullWork: LD A,(CurrentPath) .FullWork: LD A,(CurrentPath)
SUB 'A' SUB 'A'
LD (FatBuffer.DRIVE),A LD (FatBuffer.DRIVE),A
; ;
.Work: ;LD HL,CurrentDirectory .Work: LD HL,WorkDirectory
;LD DE,WorkDirectory
;LD BC,DIRECTORY_PATH_LENGTH
;LDIR
;RET
LD HL,WorkDirectory
JP CURRDIR_FN JP CURRDIR_FN
; ;
@ -2196,11 +2242,10 @@ DIR_PATH_CHECK: LD A,(HL)
INC HL INC HL
INC DE INC DE
JR Z,.loop JR Z,.loop
JP .gotoPath
; ;
JR .ReDir
.end: CP (HL) .end: CP (HL)
RET Z RET Z
.ReDir: LD HL,CurrentPath
JR .gotoPath JR .gotoPath
; ;
.checkDrive: LD HL,CurrentPath .checkDrive: LD HL,CurrentPath
@ -2209,6 +2254,7 @@ DIR_PATH_CHECK: LD A,(HL)
CP (HL) CP (HL)
RET RET
.gotoPath: CALL FINDDIR.CHECK_SLASH .gotoPath: CALL FINDDIR.CHECK_SLASH
LD HL,CurrentPath
JP GETWORD JP GETWORD
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;

View File

@ -590,10 +590,10 @@ READ: LD (.R_POINT),HL
CALL SET_FM CALL SET_FM
RET C RET C
CALL TSTSIZE CALL TSTSIZE
;!FIXIT ¬®¦­® ¯¥à¥­¥á⨠¢ ­ ç «® ¯à®æ¥¤ãàë ;
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)

View File

@ -707,7 +707,6 @@ FINDPATH:
CALL NZ,CHDIR CALL NZ,CHDIR
JR C,.BADPATH JR C,.BADPATH
LD HL,CORE_BUFFERS.EXEBUFF LD HL,CORE_BUFFERS.EXEBUFF
;LD DE,MASKARE
CALL MASK.name CALL MASK.name
JR C,.BADPATH JR C,.BADPATH
CALL TST_EXT CALL TST_EXT

View File

@ -1 +1 @@
595 618