-bug: CLOSE_FN могла генерировать потерянные кластеры и запарывать файлы. И куча мелких правок заодно.

This commit is contained in:
Anatoliy Belyanskiy 2023-11-15 02:43:58 +10:00
parent c37fdf343c
commit 34ee5a9db8
11 changed files with 340 additions and 396 deletions

View File

@ -1,3 +1,12 @@
!FIXIT
[ ] D:\>copy dss\system.dos c:\system.dos
Can't open source file
[ ] E:\BIN\MENU>c:\dss
çâ®-â® ¯à® § ¯®«­¥­­®áâì ¤¨à¥ªâ®à¨¨
[ ] C:\????? ¨«¨ ?????
¨á¯®«­ï¥âáï ª ª ª®¬ ­¤ 
-----------------------------------------------------------------------------------------------------------------------------------------------
!TODO
‚ ¦­®¥:
[ ] ¯¥à¥¤ ­ ç «®¬ à ¡®âë «î¡®© ¯à®æ¥¤ãàë § ¯¨á¨/ç⥭¨ï ¤à ©¢  ãáâ ­ ¢«¨¢ âì ä« £, ç⮡ ­¥ ¡ë«® ¯®¢â®à­®£® ¢ë§®¢  (¨§ ¯à¥à뢠­¨ï, ­ ¯à¨¬¥à)
@ -8,7 +17,7 @@
‚®®¡é¥ ­¥ ¢ ¦­®¥:
[ ] ¨á¯à ¢¨âì ¢ë室 ¨§ ä㭪樨 #41 ¯à¨ ¢®§¬®¦­®¬ 㢥«¨ç¥­¨¨ ­®¬¥à  â áª¨ ­  1 ¯à¨ 255
-------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------
DSS 1.70.2
ˆ§¬¥­¥­¨ï ¯®á«¥ ¢¥àᨨ 1.70

View File

@ -81,12 +81,12 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
LD (OPEN.TMP),A ; à ¡. ï祩ª  (§¤¥áì  âਡãâ § ¯¨á¨)
CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C
LD HL,TMPNAME
LD DE,MASKARE
; LD HL,TMPNAME
; LD DE,MASKARE
CALL MASK
RET C
LD A,FAT_ATTR.NoVolID
CALL SEARCH.ASEARCH
CALL SEARCH.Custom
; JR NC,OPENAT ; ­  ¯®¨áª ᢮¡. ¤¥áªà¨¯â®à 
; ; § ¯¨áì ­¥ ­ ©¤¥­ 
; RET
@ -106,7 +106,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
;
CALL .Prepare
RET C
CALL SEARCH
CALL SEARCH.File
CALL NC,DELETE ;FILE EXIST RECREAT
JR .DO
;
@ -120,7 +120,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
;
CALL .Prepare
RET C
CALL SEARCH
CALL SEARCH.File
LD A,DSS_Error.sys.FILE_EXISTS
CCF
RET C
@ -158,19 +158,21 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
DJNZ .loop2
;
CALL WRT_HND
CALL SAVEDIR
RET C
;CALL SAVEDIR
.PATH0+1:
LD HL,0
XOR A
JP OPEN ;R08
LD (OPEN.TMP),A
JP OPEN.FILE ;R08
.Prepare:
AND #E7 ;R04 %76A00SHR = !FAT_ATTR
AND #E7 ;R04 %76A00SHR = !FAT_ATTR ;!HARDCODE
LD (.TMP),A
LD (.PATH0),HL
CALL GETWORD
RET C
LD HL,TMPNAME
LD DE,MASKARE
; LD HL,TMPNAME
; LD DE,MASKARE
JP MASK
CREAT_N EQU CREATE.NEW
@ -187,8 +189,8 @@ DEL_FN: ;!TEST
;
CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C
LD HL,TMPNAME
LD DE,MASKARE
; LD HL,TMPNAME
; LD DE,MASKARE
CALL MASK
RET C
;
@ -203,7 +205,7 @@ DEL_FN: ;!TEST
SCF
RET Z
CALL LOADDIR
CALL SEARCH
CALL SEARCH.File
RET C
;JP DELETE
; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥­­ ï"
@ -239,19 +241,17 @@ DELETE: SET_PAGE_X DIRPAGE
; INPUT: HL - "old_name.ext",#00 without simbols * ?
; DE - "new_name.ext",#00 without simbols * ?
////////////////////////////////////////////////////////////////////////
RENAME:
;!TEST Current Dir ;[x] 15/10/23
PUSH HL
PUSH DE
CALL DIR_PATH_CHECK.forceCheck
POP DE
POP HL
RET C
;
RENAME: ;!TEST Current Dir ;[x] 15/10/23
PUSH HL
PUSH DE
CALL DIR_PATH_CHECK.forceCheck
POP DE
POP HL
RET C
;
PUSH DE
LD DE,MASKARE
CALL MASK
;LD DE,MASKARE
CALL MASK.name
POP DE
RET C
LD HL,MASKARE
@ -265,11 +265,11 @@ RENAME:
CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£ 
;LD A,#33
LD A,FAT_ATTR.NoSYSnoVolID
CALL SEARCH.ASEARCH ; ŻŽ¨áŞ § Ż¨á¨ ˘ ᯨ᪼ ¤¨áŞ 
CALL SEARCH.Custom ; ŻŽ¨áŞ § Ż¨á¨ ˘ ᯨ᪼ ¤¨áŞ 
POP HL
RET C
LD DE,MASKARE
CALL MASK
;LD DE,MASKARE
CALL MASK.name
RET C
LD HL,MASKARE
LD BC,11
@ -280,7 +280,7 @@ RENAME:
RET Z
PUSH IX
LD A,FAT_ATTR.NoSYSnoVolID
CALL SEARCH.ASEARCH ; ŻŽ¨áŞ § Ż¨á¨ ˘ ᯨ᪼ ¤¨áŞ 
CALL SEARCH.Custom ; ŻŽ¨áŞ § Ż¨á¨ ˘ ᯨ᪼ ¤¨áŞ 
POP IX
LD A,DSS_Error.sys.FILE_EXISTS
CCF
@ -304,8 +304,8 @@ RENAME:
; A=0 ç⥭¨¥/§ ¯¨áì
; A=1 ç⥭¨¥
; A=2 § ¯¨áì
; ˘ë厤: A - ¤ĽáŞŕ¨ŻâŽŕ ä ŠŤ , ĽáŤ¨ CF=0
; ŞŽ¤ Žč¨ĄŞ¨, ĽáŤ¨ CF=1
; ˘ë厤: CF=0, A - ¤ĽáŞŕ¨ŻâŽŕ ä ŠŤ .
; CF=1, A - ŞŽ¤ Žč¨ĄŞ¨.
////////////////////////////////////////////////////////////////////////
OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
LD C,A
@ -322,22 +322,14 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
OPEN: LD (.TMP),A ; enter point for CREATE
CALL GETWORD
RET C
LD HL,TMPNAME
LD DE,MASKARE
; LD HL,TMPNAME
; LD DE,MASKARE
CALL MASK
RET C
.FILE: CALL SEARCH ; enter point for EXEC
.FILE: CALL SEARCH.File ; enter point for EXEC
RET C
;R02
.FM: ; enter point for ATTRIB
; [ ] 13/11/2023 -bug with bad clusters ;!TEST
; XOR A
; CALL SET_FM
; LD C,(IY+_sFM.ST_CLUSTER)
; LD B,(IY+_sFM.ST_CLUSTER+1)
; PUSH BC
;
CALL GET_FM
.FM: CALL GET_FM ; enter point for ATTRIB
RET C
LD A,C
EX AF,AF'
@ -396,25 +388,28 @@ CLOSE: LD (.TMP),A
RET NZ
BIT 7,(IY+_sFM.ACCESS_MODE)
JR Z,.NOTMODF
LD D,(IY+_sFM.DIR_CLUSTER)
LD E,(IY+_sFM.DIR_CLUSTER+1)
LD E,(IY+_sFM.DIR_CLUSTER)
LD D,(IY+_sFM.DIR_CLUSTER+1)
PUSH DE
; [ ] 13/11/2023 -bug with bad clusters ;!TEST
; [ ] 15/11/2023 -bug with bad clusters ;!TEST
LD A,(IY+_sFM.DRIVE)
CALL OPENDSK
IF TEST_FEATURE
CALL SET_DIR
ENDIF
;
XOR A
CALL SET_FM
POP DE
LD (IY+_sFM.DIR_CLUSTER),D
LD (IY+_sFM.DIR_CLUSTER+1),E
LD (IY+_sFM.DIR_CLUSTER),E
LD (IY+_sFM.DIR_CLUSTER+1),D
; [ ] 15/11/2023 -bug with bad clusters ;!TEST
LD (IY+_sFM.ST_CLUSTER),E
LD (IY+_sFM.ST_CLUSTER+1),D
;
CALL LOADDIR
.TMP+1: LD A,0
CALL SET_FM
;
SET_PAGE_X DIRPAGE
;
;TEST 9/11/23
; LD HL,DIR
; LD DE,#0020
@ -434,12 +429,10 @@ CLOSE: LD (.TMP),A
LD D,YH
LD E,YL
EX DE,HL
PUSH HL
SET_PAGE_X DIRPAGE
POP HL
LD BC,#0020
;PUSH HL
;SET_PAGE_X DIRPAGE
;POP HL
LD BC,#0020 ;!HARDCODE
LDIR
OUT (SLOT3),A
CALL SAVEDIR
@ -484,12 +477,12 @@ F_FIRST:
POP HL
CALL GETWORD
RET C
LD HL,TMPNAME
LD DE,MASKARE
; LD HL,TMPNAME
; LD DE,MASKARE
CALL MASK
RET C
LD A,(.TMP)
CALL SEARCH.ASEARCH
CALL SEARCH.Custom
RET C
LD HL,MASKARE
.DTABUF+1:
@ -573,8 +566,8 @@ F_NEXT:
LD IX,0
LD A,XH
OR XL
JP Z,SEARCH.error
JP SEARCH.SEARCH1
JP Z,SEARCH.error_too_many_files
JP SEARCH.loop
////////////////////////////////////////////////////////////////////////
;
@ -926,18 +919,18 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
;
.START: CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C
LD HL,TMPNAME ; 8.3 ¨Źď
LD DE,MASKARE ; ĄăäĽŕ ¨ŹĽ­¨ 11 ᨏ˘. äŽŕŹ â 
;LD HL,TMPNAME ; 8.3 ¨Źď
;LD DE,MASKARE ; ĄăäĽŕ ¨ŹĽ­¨ 11 ᨏ˘. äŽŕŹ â 
CALL MASK ; ¯à¥®¡à. ¨¬ï 8.3 -> 11 ä®à¬ â
RET C
;!TEST optimization à ­¥¥ GETWORD 㦥 § £à㧨« ¤¨à¥ªâ®à¨î
;CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£ 
;
CALL DSEARCH ; ŻŽ¨áŞ § Ż¨á¨ Ş â ŤŽŁ  ˘ ᯨ᪼ ¤¨áŞ 
CALL SEARCH.Dir ; ŻŽ¨áŞ § Ż¨á¨ Ş â ŤŽŁ  ˘ ᯨ᪼ ¤¨áŞ 
LD A,DSS_Error.sys.DIR_EXISTS
CCF
RET C ; ª â «®£ ­ ©¤¥­
;
CALL G_CLUST
RET C
PUSH HL
@ -953,11 +946,11 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
LD (HL),A
INC HL
LD BC,#0A00 ; b=áç¥â稪
;
.loop1: LD (HL),C
INC HL
DJNZ .loop1
;
PUSH HL
CALL SYSTIME ; ã§­ âì ⥪. ¤ âã ¨ ¢à¥¬ï
CALL MK_TIME ; § ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
@ -977,21 +970,21 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
LD (HL),D
INC HL
LD BC,#0400 ; b=áç¥â稪
;
.loop2: LD (HL),C
INC HL
DJNZ .loop2
;
CALL WRT_HND ; ᪮¯¨à. ­®¢ãî § ¯¨áì ¢ ᯨ᮪ ¤¨áª  (ª â «®£ )
CALL SAVEDIR ; áĄŕŽá¨âě ŞĽč Ş â ŤŽŁ  ­  ¤¨áŞ
;CALL SAVEDIR ; ¨ áĄŕŽá¨âě ŞĽč Ş â ŤŽŁ  ­  ¤¨áŞ
LD HL,CORE_BUFFERS.SECBUF ; ¡ãä¥à
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£ 
LD BC,10*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
;
.loop3: INC HL
LD (HL),C
DJNZ .loop3
;
INC HL
LD DE,HANDBUF+11 ; ï祩ª   âਡã⮢ ä ©« 
EX DE,HL
@ -1005,23 +998,14 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
.MKD03: INC HL
LD (HL),C
DJNZ .MKD03
;
INC HL
; IF OLD_SET_BANK
; PUSH HL
; ENDIF
SET_PAGE_X DIRPAGE
; IF OLD_SET_BANK
; POP HL
; ENDIF
PUSH AF
LD A,(DIR)
;
LD A,(DIRPAGE.buffer)
CP "."
LD DE,DIR+11 ;  âਥăâë § Ż¨á¨
LD DE,DIRPAGE.buffer+11 ;  âਥăâë § Ż¨á¨ ;!HARDCODE
JP Z,.MKD04
LD IX,HANDBUF
XOR A
@ -1033,7 +1017,7 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
LDIR
POP AF
OUT (SLOT3),A
;
EX DE,HL
LD D,H
LD E,L
@ -1041,7 +1025,7 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
LD (HL),0
LD BC,512-65
LDIR ;!FIXIT ­ã¦­® «¨ â ª ¬­®£® £à®å âì?
;
POP HL
CALL NSECTOR
LD A,(CORE_BUFFERS.BootSector.S_P_C) ; ᥪâ®à®¢ ­  ª« áâ¥à
@ -1052,21 +1036,21 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
;
;
LD A,(FatBuffer.DRIVE)
LD DE,CORE_BUFFERS.SECBUF+#C000
LD BC,1*256 + Dss.DRV.Write
RST ToDSS.DRV
;
;
POP AF
OUT (SLOT3),A
;
LD HL,CORE_BUFFERS.SECBUF
LD DE,CORE_BUFFERS.SECBUF+1
LD BC,511
LD (HL),0
LDIR ;!FIXIT ­ã¦­® «¨ â ª ¬­®£® £à®å âì?
;
POP IX
POP HL
INC IX
@ -1109,8 +1093,8 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
;
.START: CALL GETWORD
RET C
LD HL,TMPNAME
LD DE,MASKARE
; LD HL,TMPNAME
; LD DE,MASKARE
CALL MASK
RET C
LD HL,MASKARE
@ -1121,7 +1105,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
SCF
RET Z
CALL LOADDIR
CALL DSEARCH
CALL SEARCH.Dir
RET C
LD HL,(HANDBUF+_sFM.ST_CLUSTER)
PUSH IX
@ -1211,7 +1195,7 @@ DOSNAME:
DEC B
JP Z,GETNAME
DEC B
JP Z,MASK
JP Z,MASK.custom
LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET
@ -1382,56 +1366,6 @@ RMKTIME:
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; áŞŽŻ¨ŕŽ˘ âě § Ż¨áě ˘ ᯨᎪ ¤¨áŞ  (Ş â ŤŽŁ )
WRT_HND:
SET_PAGE_X DIRPAGE
PUSH AF
LD IX,DIR
;TEST 9/11/23
; EXX
; LD DE,0
; EXX
;
.loop: LD A,(IX+00)
OR A
JR Z,.WRT_HN2
CP #E5
JR Z,.WRT_HN2
LD BC,#0020
ADD IX,BC
JR NC,.loop
;
POP AF
OUT (SLOT3),A
LD A,DSS_Error.sys.ROOT_OVERFLOW
SCF
RET
.WRT_HN2:
LD D,XH
LD E,XL
LD HL,HANDBUF
LD BC,HANDBUF.SIZE
LDIR
POP AF
OUT (SLOT3),A
LD HL,DIR
LD BC,(SAVEDIR.DIRSIZE)
DEC BC
ADD HL,BC
AND A
SBC HL,DE
RET NC
LD HL,(SAVEDIR.DIRSIZE)
LD BC,(FatBuffer.B_P_C)
ADD HL,BC
LD (SAVEDIR.DIRSIZE),HL
AND A
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; HL - 11 bytes filename "FILENAMEEXT"
; DE - DOS filename "FILENAME.EXT",0
@ -1471,57 +1405,54 @@ GETNAME:
; ¢å®¤: a= âਡãâ § ¯¨á¨
; ¢ë室: de'=¨­¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£ 
; CF - ª â «®£ ­¥ ­ ©¤¥­
DSEARCH:
LD A,FAT_ATTR.DIRECTORY
CALL SEARCH.ASEARCH
SEARCH:
.Dir: LD A,FAT_ATTR.DIRECTORY
CALL SEARCH.Custom
RET NC
LD A,DSS_Error.sys.PATH_NOT_FOUND
CP DSS_Error.sys.PATH_NOT_FOUND + 1
RET C
;
SCF
LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
;OUT: DE' - ŻŽŕď¤ŞŽ˘ëŠ ­ŽŹĽŕ FM
SEARCH: LD A,FAT_ATTR.NoDIRnoVolID
.ASEARCH:
; A = 76ADLSHR
EX AF,AF'
;
.File: LD A,FAT_ATTR.NoDIRnoVolID
.Custom: EX AF,AF' ; A = 76ADLSHR
SET_PAGE_X DIRPAGE
PUSH AF
EX AF,AF'
;
CPL
LD C,A
LD IX,DIR
LD IX,DIRPAGE.buffer
;TEST 9/11/23
; EXX
; LD DE,0
; EXX
;
.SEARCH1:
LD A,(IX+00)
.loop: LD A,(IX+00)
OR A
JR Z,.SEARCH4
JR Z,.error_file_not_found
CP #E5 ;!HARDCODE #E5 - § ¯¨áì ¢ ¤¨à¥ªâ®à¨¨ ᢮¡®¤­ , â ª ª ª ä ©«/¤¨à¥ªâ®à¨ï ¡ë«¨ 㤠«¥­ë
JR Z,.SEARCH3
JR Z,.next_record
LD A,(IX+11)
AND C
JR NZ,.SEARCH3
JR NZ,.next_record
LD HL,MASKARE
LD D,XH
LD E,XL
LD B,11
EX DE,HL
.SEARCH2:
.loop_compare:
LD A,(DE)
CP '?'
JR Z,.SEARCH5
JR Z,.next_char
CP (HL)
JR NZ,.SEARCH3
.SEARCH5:
JR NZ,.next_record
.next_char:
INC HL
INC DE
DJNZ .SEARCH2
DJNZ .loop_compare
;!TEST 9/11/23
; LD D,XH
; LD E,XL
@ -1540,7 +1471,7 @@ SEARCH: LD A,FAT_ATTR.NoDIRnoVolID
OUT (SLOT3),A
AND A
RET
.SEARCH3:
.next_record:
;!TEST 9/11/23
; EXX
; INC DE
@ -1548,13 +1479,15 @@ SEARCH: LD A,FAT_ATTR.NoDIRnoVolID
;
LD DE,#0020 ;!HARDCODE
ADD IX,DE
JR NC,.SEARCH1
.error: POP AF
JR NC,.loop
.error_too_many_files:
POP AF
OUT (SLOT3),A
LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR
SCF
RET
.SEARCH4:
;
.error_file_not_found:
POP AF
OUT (SLOT3),A
LD A,DSS_Error.sys.FILE_NOT_FOUND
@ -1657,13 +1590,6 @@ OPENDSK:
LD A,C
;
.force: PUSH AF
; [ ] 13/11/2023 -bug with bad clusters ;!TEST
;PUSH AF
;LD A,(FATCASH.Update)
;OR A
;CALL NZ,WR_FAT
;POP AF
;
LD C,Dss.DRV.Open
RST ToDSS.DRV
POP BC
@ -1727,8 +1653,8 @@ OPENDIR:
JR NZ,.loop
JR .SUBDIR3
.SUBDIR2:
LD DE,MASKARE
CALL MASK
;LD DE,MASKARE
CALL MASK.name
RET C
.SUBDIR3:
CALL FINDDIR
@ -1750,7 +1676,7 @@ FINDDIR:
SET_PAGE_X DIRPAGE
;
PUSH AF
LD IX,DIR
LD IX,DIRPAGE.buffer
.F_01: LD A,(IX+00)
OR A
JR Z,.error
@ -1888,6 +1814,7 @@ FINDDIR:
;----------------------------------------------------------------------;
; .custom:
; <20>८¡à §®¢ âì ¨¬ï 8.3 -> 11 ä®à¬ â
; ¢å®¤: hl = 8.3 ¨¬ï
; de = ¡ãä¥à ¨¬¥­¨ 11 ᨬ¢. ä®à¬ â 
@ -1897,7 +1824,9 @@ FINDDIR:
; DE - 11 bytes filename
; RET: C=2 FILE WITHOUT EXTENTION
; C=1 FILE WITH EXTENTION
MASK: PUSH HL
MASK: LD HL,TMPNAME
.name: LD DE,MASKARE
.custom: PUSH HL
PUSH DE
LD H,D
LD L,E
@ -2053,10 +1982,11 @@ LOADDIR:
LD A,D
OR E
JP Z,.LROTDIR ; root ??
LD HL,DIR ; Şă¤ 
LD HL,DIRPAGE.buffer ; Şă¤ 
LD DE,#4000 ; ᪮«ìª®
XOR A ; ¤¥áªà¨¯â®à
CALL READ ; ç⥭¨¥ ¨§ ä ©« 
;!FIXIT ŻŕŽ˘ĽŕŞ  ­  Žč¨ĄŞă
LD (SAVEDIR.DIRSIZE),DE ; ç¨á«® ¯à®ç¨â. ¡ ©â®¢
POP AF
OUT (SLOT3),A
@ -2078,7 +2008,7 @@ LOADDIR:
;LD B,A ; ç¨á«® ᥪâ®à®¢
;
.RTD1: LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD DE,DIR ; ĄăäĽŕ
LD DE,DIRPAGE.buffer ; ĄăäĽŕ
LD C,Dss.DRV.Read ; ç⥭¨¥ ᥪâ®à®¢
RST ToDSS.DRV
POP AF
@ -2088,6 +2018,56 @@ LOADDIR:
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; áŞŽŻ¨ŕŽ˘ âě § Ż¨áě ˘ ᯨᎪ ¤¨áŞ  (Ş â ŤŽŁ )
; ¨ áĄŕŽá¨âě ŞĽč Ş â ŤŽŁ  ­  ¤¨áŞ
WRT_HND: SET_PAGE_X DIRPAGE
EX AF,AF'
;
LD IX,DIRPAGE.buffer
;TEST 9/11/23
; EXX
; LD DE,0
; EXX
;
.loop: LD A,(IX+00)
OR A
JR Z,.WRT_HN2
CP #E5
JR Z,.WRT_HN2
LD BC,#0020
ADD IX,BC
JR NC,.loop
;
EX AF,AF'
OUT (SLOT3),A
LD A,DSS_Error.sys.ROOT_OVERFLOW
SCF
RET
.WRT_HN2:
LD D,XH
LD E,XL
LD HL,HANDBUF
LD BC,HANDBUF.SIZE
LDIR
EX AF,AF'
OUT (SLOT3),A
LD HL,DIRPAGE.buffer
LD BC,(SAVEDIR.DIRSIZE)
DEC BC
ADD HL,BC
AND A
SBC HL,DE
JR NC,SAVEDIR
LD HL,(SAVEDIR.DIRSIZE)
LD BC,(FatBuffer.B_P_C)
ADD HL,BC
LD (SAVEDIR.DIRSIZE),HL
AND A
JP SAVEDIR
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; ‘¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª.
; ¢å®¤: iy=áâàãªâãà  ¤¥áªà¨¯â®à 
@ -2097,10 +2077,10 @@ SAVEDIR:
LD IX,0
LD B,0
CALL MOVE_FP
;
SET_PAGE_X DIRPAGE
PUSH AF
;
LD A,(FatBuffer.DRIVE)
LD (IY+_sFM.DRIVE),A
LD D,(IY+_sFM.ST_CLUSTER)
@ -2108,7 +2088,7 @@ SAVEDIR:
LD A,D
OR E
JP Z,.SROTDIR
LD HL,DIR
LD HL,DIRPAGE.buffer
; à §¬¥à ᯨ᪠ ª â «®£  size_cash_directory
.DIRSIZE+1:
LD DE,0
@ -2128,7 +2108,7 @@ SAVEDIR:
ADD A,B
LD B,A
.RTD1S: LD A,(FatBuffer.DRIVE)
LD DE,DIR
LD DE,DIRPAGE.buffer
LD C,Dss.DRV.Write
RST ToDSS.DRV
POP AF
@ -2219,47 +2199,11 @@ DIR_PATH_CHECK: LD A,(HL)
JP GETWORD
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
IF TEST_FEATURE
; [ ] 13/11/2023 -bug with bad clusters ;!TEST
; in: IY - FM ¤Ťď ä ŠŤ  ¤¨ŕ༪âŽŕ¨î ŞŽâŽŕŽŁŽ Łŕ㧨Ź
SET_DIR:
LD L,(IY+_sFM.DIR_CLUSTER)
LD H,(IY+_sFM.DIR_CLUSTER+1)
;
PUSH IY
XOR A
CALL SET_FM
EX DE,HL
LD L,(IY+_sFM.ST_CLUSTER)
LD H,(IY+_sFM.ST_CLUSTER+1)
AND A
SBC HL,DE
JR Z,.exit
LD HL,#4000 ;!HARDCODE
;LD A,D
;OR E
;JR Z,.ROOT
EX DE,HL
LD (IY+_sFM.F_SIZE),E
LD (IY+_sFM.F_SIZE+1),D
LD (IY+_sFM.ST_CLUSTER),L
LD (IY+_sFM.ST_CLUSTER+1),H
CALL LOADDIR
;
.exit: POP IY
RET
ENDIF
;----------------------------------------------------------------------;
;!FIXIT ª ¡ãä¥à ¬
; Œ áᨢ «®£. ­®¬¥à®¢ ¡ ­®ª à áè¨à¥­¨ï DSS
BANKTBL: BLOCK USING_MEMPAGES+1,#FF ; +1 ¤«ï COREPAGE
;
HANDBUF: BLOCK HANDBUF.SIZE,0
MASKARE: BLOCK 8,0 ; ¨¬ï ä ©« 
BLOCK 3,0 ; à áè.

View File

@ -770,12 +770,7 @@ WRITE: LD (.R_POINT),HL
LD A,(IY+_sFM.DRIVE)
CALL OPENDSK
JR C,PWERR1
; [ ] 13/11/2023 -bug with bad clusters ;!TEST
; IF TEST_FEATURE
; CALL SET_DIR
; JR C,PWERR1
; ENDIF
;
;
LD C,(IY+_sFM.F_POSITION)
LD A,(IY+_sFM.F_POSITION+1)
LD E,A
@ -882,6 +877,7 @@ WRITE: LD (.R_POINT),HL
LD (IY+_sFM.F_SIZE+3),B
AND A
RET
;
.WOV1: PUSH BC
PUSH HL
PUSH DE

View File

@ -8,7 +8,7 @@
;---------------------------------------------------------------
;R13 06-04-2023 BAO ”ã­ªæ¨î SETBOOT ¬®¦­® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४⭮)
;R12 03-04-2023 BAO „®¡ ¢«¥­  äã­ªæ¨ï à¥áª ­  ¤à ©¢®¢ LD C,8 : RST #10
;R11 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR ;!FIXIT à ¡®â ¥â ªà¨¢®
;R11 - 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
;R10 03-04-2003 DNS IMPROVED FN. VERSION
;R09 27-03-2003 DNS PASTED SET/GET BOOT FN.
;R08 14-11-2002 DNS IMPROVE BPB-FUNCTION
@ -593,79 +593,6 @@ WorkDirectory EQU CurrentDirectory
.DEPTH EQU CurrentDirectory.DEPTH
ENDIF
;R11
; !TODO ¯®ç¨­¨âì
IF SAVE_PATH_MACRO
SAVE_CUR_PATH
PUSH IX
PUSH IY
PUSH HL
PUSH DE
PUSH BC
PUSH AF
SET_PAGE_X ENVPAGE
PUSH AF
CALL CURRDSK
ADD A,"A"
LD HL,TMP_CURDIR_AUTO
LD (HL),A
INC HL
LD A,":"
LD (HL),A
INC HL
CALL CURRDIR_FN
; ¯®ç¥¬ã ­¥ POP AF : OUT (SLOT3),A
//POP BC
//LD A,B
//OUT (SLOT3),A
POP AF
OUT (SLOT3),A
;
;
POP AF
POP BC
POP DE
POP HL
POP IY
POP IX
RET
; !TODO ¯®ç¨­¨âì
BACK_CUR_PATH:
RET NC
.force: PUSH IY
PUSH IX
PUSH HL
PUSH DE
PUSH BC
PUSH AF
SET_PAGE_X ENVPAGE
PUSH AF
LD HL,TMP_CURDIR_AUTO
CALL CHDIR
; ¯®ç¥¬ã ­¥ POP AF : OUT (SLOT3),A
//POP BC
//LD A,B
//OUT (SLOT3),A
POP AF
OUT (SLOT3),A
;
POP AF
POP BC
POP DE
POP HL
POP IX
POP IY
RET
ENDIF
;R11
;R12
;///////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #08 (DSS_RESCAN). <20>¥à¥áª ­¨à®¢ âì ¤¥¢ ©áë á¨á⥬ë.
@ -705,10 +632,6 @@ SCANDRV:
;///////////////////////////////////////////////////////////////////////
;
;R12
;GOD EQU 1999-1980*512
;FHAND DB " "
@ -723,3 +646,64 @@ SCANDRV:
;//MODULE: DOS_X
;[END]
;R11
; IF SAVE_PATH_MACRO
; SAVE_CUR_PATH
; PUSH IX
; PUSH IY
; PUSH HL
; PUSH DE
; PUSH BC
; PUSH AF
;
; SET_PAGE_X ENVPAGE
; PUSH AF
;
; CALL CURRDSK
; ADD A,"A"
; LD HL,TMP_CURDIR_AUTO
; LD (HL),A
; INC HL
; LD A,":"
; LD (HL),A
; INC HL
; CALL CURRDIR_FN
;
; POP AF
; OUT (SLOT3),A
;
; POP AF
; POP BC
; POP DE
; POP HL
; POP IY
; POP IX
; RET
;
; BACK_CUR_PATH:
; RET NC
; .force: PUSH IY
; PUSH IX
; PUSH HL
; PUSH DE
; PUSH BC
; PUSH AF
;
; SET_PAGE_X ENVPAGE
; PUSH AF
;
; LD HL,TMP_CURDIR_AUTO
; CALL CHDIR
;
; POP AF
; OUT (SLOT3),A
;
; POP AF
; POP BC
; POP DE
; POP HL
; POP IX
; POP IY
; RET
; ENDIF
;

View File

@ -148,31 +148,6 @@ XLAT_T: DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00
ENDM
;
;
MACRO _mSavePath force
IF SAVE_PATH_MACRO
PUSH HL
IF force==1
LD HL,BACK_CUR_PATH.force
ELSE
LD HL,BACK_CUR_PATH
ENDIF
EX (SP),HL
CALL SAVE_CUR_PATH
ENDIF
ENDM
MACRO _mRestorePath
IF SAVE_PATH_MACRO
CALL BACK_CUR_PATH.force
ENDIF
ENDM
MACRO _mRestorStackAfterRestorePath
IF SAVE_PATH_MACRO
POP HL ;CLEAR STACK "BACK_CUR_PATH"
ENDIF
ENDM
;
;
MACRO _mDSS_Version
DB 'DSS_'
@ -224,4 +199,30 @@ XLAT_T: DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00
MACRO C_OSRELEASE
DB "Estex DSS",0
ENDM
;
////////////////////////////////////////////////////////////////////////
;
; MACRO _mSavePath force
; IF SAVE_PATH_MACRO
; PUSH HL
; IF force==1
; LD HL,BACK_CUR_PATH.force
; ELSE
; LD HL,BACK_CUR_PATH
; ENDIF
; EX (SP),HL
; CALL SAVE_CUR_PATH
; ENDIF
; ENDM
; MACRO _mRestorePath
; IF SAVE_PATH_MACRO
; CALL BACK_CUR_PATH.force
; ENDIF
; ENDM
; MACRO _mRestorStackAfterRestorePath
; IF SAVE_PATH_MACRO
; POP HL ;CLEAR STACK "BACK_CUR_PATH"
; ENDIF
; ENDM
;

View File

@ -182,7 +182,7 @@ EX_PATH: EXX
DEC B
JP Z,GETNAME ;8 ; ¯à¥®¡à. ¨¬ï 11 -> 8.3 ä®à¬ â
DEC B
JP Z,MASK ;9 ; ¯à¥®¡à. ¨¬ï 8.3 -> 11 ä®à¬ â
JP Z,MASK.custom ;9 ; ¯à¥®¡à. ¨¬ï 8.3 -> 11 ä®à¬ â
EX_RESR: LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET
@ -692,7 +692,7 @@ FINDPATH:
;CALL CURRDIR_FN
;
CALL .MAKE_PATH_ARRAY
LD HL,PATH_PNT_ARRAY
LD HL,ENVPAGE.PATH_PNT_ARRAY
.NEXTPATHI:
LD E,(HL)
INC HL
@ -707,12 +707,12 @@ FINDPATH:
CALL NZ,CHDIR
JR C,.BADPATH
LD HL,CORE_BUFFERS.EXEBUFF
LD DE,MASKARE
CALL MASK
;LD DE,MASKARE
CALL MASK.name
JR C,.BADPATH
CALL TST_EXT
JR C,.BADPATH
CALL SEARCH
CALL SEARCH.File
.BADPATH:
POP BC
POP HL
@ -728,15 +728,14 @@ FINDPATH:
.GOTO_CURDIR:
PUSH AF
PUSH HL
;LD HL,TMP_CURDIR
LD HL,CurrentDirectory
CALL CHDIR
POP HL
POP AF
RET
.MAKE_PATH_ARRAY:
LD HL,PATH_PNT_ARRAY-1 ;R04 -1
LD DE,ENVTEMP-1
LD HL,ENVPAGE.PATH_PNT_ARRAY-1 ;R04 -1
LD DE,ENVPAGE.ENVTEMP-1
LD B,#00
.NEXTAR:
LD (HL),C ;R04
@ -778,15 +777,12 @@ FINDPATH:
LD (HL),A
RET
ENVPATH DB "PATH=",0
ENVPATH: DB "PATH=",0
;;;
; !TODO ‘„…‹€’œ <E28098>“Š<E28099>މ ¨ ®¡®§­ ç¨âì áâà ­¨æã
TMP_CURDIR_AUTO EQU #FB00
PATH_PNT_ARRAY EQU #FC80
; !FIXIT ­¥ ­ã¦­® ¥á«¨ SAVE_PATH_MACRO = 1
TMP_CURDIR EQU #FD00
ENVTEMP EQU #FE00
;TMP_CURDIR_AUTO EQU #FB00
; ­¥ ­ã¦­® ¥á«¨ SAVE_PATH_MACRO = 1
; TMP_CURDIR EQU #FD00
;/////////////////////////////////////////////////////////////////////
@ -847,8 +843,8 @@ EXEC_1: ;LD (CMDLINE),HL
LD (OPEN.TMP),A
CALL GETWORD
RET C
LD HL,TMPNAME
LD DE,MASKARE
; LD HL,TMPNAME
; LD DE,MASKARE
CALL MASK
RET C
CALL TST_EXT
@ -877,11 +873,10 @@ EXEC_1: ;LD (CMDLINE),HL
EXEC0_SHORT:
CALL EXEC_1
RET C
;FILE NOT FOUND, SEARCHING IN PATH
; GET PATH AND ETC.
LD HL,ENVPATH
LD DE,ENVTEMP
LD DE,ENVPAGE.ENVTEMP
LD B,high Dss.Environ.Get
CALL ENVIRON

View File

@ -94,7 +94,7 @@ R_F_F16:
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
CP C
CALL NZ,RE_FAT ; A != C - READ NEW BLOCK FAT
LD DE,FAT_CACHE ; ­ ç ŤŽ ŞĽč  FAT- 
LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT- 
ADD HL,DE ; ­  ï祩ªã FAT
LD E,(HL) ; ¯à®ç¨â âì ­®¬¥à ª« áâ¥à 
INC HL
@ -196,7 +196,7 @@ R_F_F12:
CALL NZ,RE_FAT ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
ENDIF
;
LD DE,FAT_CACHE ; ­ ç ŤŽ ŞĽč  FAT- 
LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT- 
ADD HL,DE ; ­  ï祩ªã FAT
POP AF ; ¢®ááâ. ä« £
LD E,(HL)
@ -286,7 +286,7 @@ W_T_F16:
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
CP C
CALL NZ,RE_FAT ; A != C - READ NEW BLOCK FAT
LD DE,FAT_CACHE
LD DE,FATPAGE.cache
ADD HL,DE ; ­  ï祩ªã FAT
POP DE
LD (HL),E ; á®åà. ¢ ª¥è¥ FAT- 
@ -329,7 +329,7 @@ W_T_F12:
CALL NZ,RE_FAT ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
ENDIF
;
LD DE,FAT_CACHE
LD DE,FATPAGE.cache
ADD HL,DE
POP AF
POP DE
@ -403,7 +403,7 @@ RE_FAT: PUSH HL
LD IX,0
ADD IX,DE ; ­®¬¥à «®£. ᥪâ®à 
LD HL,0 ; áâ. à §àï¤ ; HL:IX - SECTOR FAT FOR READING
LD DE,FAT_CACHE ; Şă¤  ; DE - FAT ADDRESS
LD DE,FATPAGE.cache ; ªã¤  ; DE - FAT ADDRESS
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD BC,16*256 + Dss.DRV.Read ;ॣ B: 16 * 512 = 8192 (CASH SIZE) ;!TODO FATcacheSize
RST ToDSS.DRV
@ -452,7 +452,7 @@ WR_FAT: SET_PAGE_X FATPAGE
;HL:IX - SECTOR OF FAT FOR SAVE
ADD IX,DE ; ­®¬¥à «®£. ᥪâ®à 
LD HL,0 ; áâ. à §àï¤
LD DE,FAT_CACHE ; ŽâŞă¤ 
LD DE,FATPAGE.cache ; ®âªã¤ 
LD B,A ; ç¨á«® ᥪâ®à®¢
LD C,Dss.DRV.Write ; § ¯¨áì ᥪâ®à®¢
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
@ -465,7 +465,7 @@ WR_FAT: SET_PAGE_X FATPAGE
EX DE,HL
LD IX,0
ADD IX,DE
LD DE,FAT_CACHE
LD DE,FATPAGE.cache
LD HL,0
LD A,(FatBuffer.DRIVE)
LD C,Dss.DRV.Write

View File

@ -657,8 +657,9 @@ TST_01: IN A,(CMOUSE)
LD A,B
OR C
JR NZ,TST_01
;JR NC,TST_01
SCF
RET
;JR NC,TST_01
;
.NXT: IN A,(DMOUSE)
@ -667,19 +668,19 @@ TST_01: IN A,(CMOUSE)
CCF
RET NZ
;!TEST mouse freeeeezzzz
;[x] mouse freeeeezzzz !TEST
LD BC,#2000
;
TST_02: IN A,(CMOUSE)
RRCA
;!TEST mouse freeeeezzzz
;[x] mouse freeeeezzzz !TEST
JR C,.NXT
DEC BC
LD A,B
OR C
JR NZ,TST_02
;JR NC,TST_02
RET
;JR NC,TST_02
;
.NXT: IN A,(DMOUSE)
LD D,A

View File

@ -302,7 +302,8 @@ SETUP_CURSORS:
CTRLKEY LD HL,HOST
CTRLKEY:
LD HL,HOST
LD A,(HEAD)
CP (HL)
LD BC,(KEYFLAG)
@ -311,7 +312,8 @@ CTRLKEY LD HL,HOST
DEC A
RET
TESTKEY LD HL,HOST
TESTKEY:
LD HL,HOST
LD A,(HEAD)
CP (HL)
RET Z
@ -348,7 +350,8 @@ TESTKEY LD HL,HOST
; RET
;small optimization
K_CLEAR LD A,(HOST)
K_CLEAR:
LD A,(HOST)
LD (HEAD),A
LD A,#2F
CP B
@ -363,7 +366,7 @@ K_CLEAR LD A,(HOST)
RET
;
PUTSYM LD HL,HEAD
PUTSYM: LD HL,HEAD
LD A,(HOST)
SUB 4
AND #3F
@ -386,7 +389,7 @@ PUTSYM LD HL,HEAD
LD (HL),C
RET
GETSYM LD HL,HOST
GETSYM: LD HL,HOST
LD A,(HEAD)
CP (HL)
RET Z
@ -407,38 +410,41 @@ GETSYM LD HL,HOST
LD C,(HL)
RET
FULL_BF EX AF,AF'
FULL_BF:
EX AF,AF'
BIT SF_BUFF,(IX+SOUND_K)
JR Z,FBF
JR Z,.FBF
EXX
LD DE,230
LD HL,50
CALL BEEP
EXX
FBF EX AF,AF'
.FBF: EX AF,AF'
RET
.E0_KEY:
SET FLAG_E0,(IX+KEYFLG)
JR KEYSCAN.RESCAN
.F0_KEY:
SET FLAG_F0,(IX+KEYFLG)
JR KEYSCAN.RESCAN
.E1_KEY:
SET FLAG_E1,(IX+KEYFLG)
JR KEYSCAN.RESCAN
E0_KEY SET FLAG_E0,(IX+KEYFLG)
JR RESCAN
F0_KEY SET FLAG_F0,(IX+KEYFLG)
JR RESCAN
E1_KEY SET FLAG_E1,(IX+KEYFLG)
JR RESCAN
KEYSCAN LD IX,KEYFLAG
RESCAN IN A,(COM_A)
KEYSCAN:
LD IX,KEYFLAG
.RESCAN:
IN A,(COM_A)
BIT 0,A
RET Z
IN A,(DAT_A)
CP #F0
JR Z,F0_KEY
JR Z,FULL_BF.F0_KEY
CP #E0
JR Z,E0_KEY
JR Z,FULL_BF.E0_KEY
CP #E1
JR Z,E1_KEY
JR Z,FULL_BF.E1_KEY
BIT FLAG_F0,(IX+KEYFLG)
JR NZ,UN_KEY
LD L,A

View File

@ -1 +1 @@
567
579

View File

@ -15,8 +15,7 @@ DSS_MAX_DRIVES_AMOUNT EQU 26
DEFINE TABisSPACES 0
DEFINE EnoughtOnly_LF 0
DEFINE CLASSIC_CURSOR 0
DEFINE SAVE_PATH_MACRO 0 ;\____ «¨¡® â®, «¨¡® â®
DEFINE SAVE_PATH_CODE 1 ;/
DEFINE SAVE_PATH_CODE 1
DEFINE MINIMUM_BIOS_VERSION 2*256 + 55 ; version 2.55
;
;-------------------[MEMORY]-------------------------;
@ -24,13 +23,22 @@ DSS_MAX_DRIVES_AMOUNT EQU 26
; DEFINE OLD_SET_BANK 0
;---------------------[ «®£.­®¬¥à  áâà ­¨æ ¯ ¬ï⨠]---------------------
DEFINE USING_MEMPAGES 4 ; à §¬¥à ¡«®ª  ¤®¯®«­¨â¥«ì­ëå áâà ­¨æ
; ªíè ᯨ᪠ ª â «®£ 
DIRPAGE EQU 0
.buffer EQU #C000
;
FATPAGE EQU 1
.cache EQU #C000
;
TXTPAGE EQU 2
;
ENVPAGE EQU TXTPAGE
.PATH_PNT_ARRAY EQU #FC80
.ENVTEMP EQU #FE00
;
DRVPAGE EQU 3
DEFINE USING_MEMPAGES 4 ; à §¬¥à ¡«®ª  ¤®¯®«­¨â¥«ì­ëå áâà ­¨æ
;
COREPAGE EQU 4 ; ®­  ®â¤¥«ì­® ¨ ­¥ á ¡«®ª®¬ ¢ëè¥.
;-----------------------------------------------------------------------
DIRECTORY_PATH_LENGTH EQU 256 ; '\' + 255, 0
@ -38,8 +46,8 @@ ENVIRONMENT_STRING_LENGTH EQU 255
TXTADDR EQU #C000
ENVADDR EQU #E400
DIR EQU #C000
FAT_CACHE EQU #C000
;DIR EQU #C000
;FAT_CACHE EQU #C000
FMCOUNT EQU 10 ; Š®«¨ç¥á⢮ ä ©«®¢ëå ¬ ­¨¯ã«ïâ®à®¢
HANDBUF.SIZE EQU 32