-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 !TODO
‚ ¦­®¥: ‚ ¦­®¥:
[ ] ¯¥à¥¤ ­ ç «®¬ à ¡®âë «î¡®© ¯à®æ¥¤ãàë § ¯¨á¨/ç⥭¨ï ¤à ©¢  ãáâ ­ ¢«¨¢ âì ä« £, ç⮡ ­¥ ¡ë«® ¯®¢â®à­®£® ¢ë§®¢  (¨§ ¯à¥à뢠­¨ï, ­ ¯à¨¬¥à) [ ] ¯¥à¥¤ ­ ç «®¬ à ¡®âë «î¡®© ¯à®æ¥¤ãàë § ¯¨á¨/ç⥭¨ï ¤à ©¢  ãáâ ­ ¢«¨¢ âì ä« £, ç⮡ ­¥ ¡ë«® ¯®¢â®à­®£® ¢ë§®¢  (¨§ ¯à¥à뢠­¨ï, ­ ¯à¨¬¥à)
@ -8,7 +17,7 @@
‚®®¡é¥ ­¥ ¢ ¦­®¥: ‚®®¡é¥ ­¥ ¢ ¦­®¥:
[ ] ¨á¯à ¢¨âì ¢ë室 ¨§ ä㭪樨 #41 ¯à¨ ¢®§¬®¦­®¬ 㢥«¨ç¥­¨¨ ­®¬¥à  â áª¨ ­  1 ¯à¨ 255 [ ] ¨á¯à ¢¨âì ¢ë室 ¨§ ä㭪樨 #41 ¯à¨ ¢®§¬®¦­®¬ 㢥«¨ç¥­¨¨ ­®¬¥à  â áª¨ ­  1 ¯à¨ 255
------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------
DSS 1.70.2 DSS 1.70.2
ˆ§¬¥­¥­¨ï ¯®á«¥ ¢¥àᨨ 1.70 ˆ§¬¥­¥­¨ï ¯®á«¥ ¢¥àᨨ 1.70

View File

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

View File

@ -770,12 +770,7 @@ WRITE: LD (.R_POINT),HL
LD A,(IY+_sFM.DRIVE) LD A,(IY+_sFM.DRIVE)
CALL OPENDSK CALL OPENDSK
JR C,PWERR1 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 C,(IY+_sFM.F_POSITION)
LD A,(IY+_sFM.F_POSITION+1) LD A,(IY+_sFM.F_POSITION+1)
LD E,A LD E,A
@ -882,6 +877,7 @@ WRITE: LD (.R_POINT),HL
LD (IY+_sFM.F_SIZE+3),B LD (IY+_sFM.F_SIZE+3),B
AND A AND A
RET RET
;
.WOV1: PUSH BC .WOV1: PUSH BC
PUSH HL PUSH HL
PUSH DE PUSH DE

View File

@ -8,7 +8,7 @@
;--------------------------------------------------------------- ;---------------------------------------------------------------
;R13 06-04-2023 BAO ”ã­ªæ¨î SETBOOT ¬®¦­® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४⭮) ;R13 06-04-2023 BAO ”ã­ªæ¨î SETBOOT ¬®¦­® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४⭮)
;R12 03-04-2023 BAO „®¡ ¢«¥­  äã­ªæ¨ï à¥áª ­  ¤à ©¢®¢ LD C,8 : RST #10 ;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 ;R10 03-04-2003 DNS IMPROVED FN. VERSION
;R09 27-03-2003 DNS PASTED SET/GET BOOT FN. ;R09 27-03-2003 DNS PASTED SET/GET BOOT FN.
;R08 14-11-2002 DNS IMPROVE BPB-FUNCTION ;R08 14-11-2002 DNS IMPROVE BPB-FUNCTION
@ -593,79 +593,6 @@ WorkDirectory EQU CurrentDirectory
.DEPTH EQU CurrentDirectory.DEPTH .DEPTH EQU CurrentDirectory.DEPTH
ENDIF 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 ;R12
;/////////////////////////////////////////////////////////////////////// ;///////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #08 (DSS_RESCAN). <20>¥à¥áª ­¨à®¢ âì ¤¥¢ ©áë á¨á⥬ë. ; ”ã­ªæ¨ï #08 (DSS_RESCAN). <20>¥à¥áª ­¨à®¢ âì ¤¥¢ ©áë á¨á⥬ë.
@ -705,10 +632,6 @@ SCANDRV:
;/////////////////////////////////////////////////////////////////////// ;///////////////////////////////////////////////////////////////////////
; ;
;R12
;GOD EQU 1999-1980*512 ;GOD EQU 1999-1980*512
;FHAND DB " " ;FHAND DB " "
@ -723,3 +646,64 @@ SCANDRV:
;//MODULE: DOS_X ;//MODULE: DOS_X
;[END] ;[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 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 MACRO _mDSS_Version
DB 'DSS_' 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 MACRO C_OSRELEASE
DB "Estex DSS",0 DB "Estex DSS",0
ENDM 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 DEC B
JP Z,GETNAME ;8 ; ¯à¥®¡à. ¨¬ï 11 -> 8.3 ä®à¬ â JP Z,GETNAME ;8 ; ¯à¥®¡à. ¨¬ï 11 -> 8.3 ä®à¬ â
DEC B 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 EX_RESR: LD A,DSS_Error.sys.INVALID_FUNCTION
SCF SCF
RET RET
@ -692,7 +692,7 @@ FINDPATH:
;CALL CURRDIR_FN ;CALL CURRDIR_FN
; ;
CALL .MAKE_PATH_ARRAY CALL .MAKE_PATH_ARRAY
LD HL,PATH_PNT_ARRAY LD HL,ENVPAGE.PATH_PNT_ARRAY
.NEXTPATHI: .NEXTPATHI:
LD E,(HL) LD E,(HL)
INC HL INC HL
@ -707,12 +707,12 @@ 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 ;LD DE,MASKARE
CALL MASK CALL MASK.name
JR C,.BADPATH JR C,.BADPATH
CALL TST_EXT CALL TST_EXT
JR C,.BADPATH JR C,.BADPATH
CALL SEARCH CALL SEARCH.File
.BADPATH: .BADPATH:
POP BC POP BC
POP HL POP HL
@ -728,15 +728,14 @@ FINDPATH:
.GOTO_CURDIR: .GOTO_CURDIR:
PUSH AF PUSH AF
PUSH HL PUSH HL
;LD HL,TMP_CURDIR
LD HL,CurrentDirectory LD HL,CurrentDirectory
CALL CHDIR CALL CHDIR
POP HL POP HL
POP AF POP AF
RET RET
.MAKE_PATH_ARRAY: .MAKE_PATH_ARRAY:
LD HL,PATH_PNT_ARRAY-1 ;R04 -1 LD HL,ENVPAGE.PATH_PNT_ARRAY-1 ;R04 -1
LD DE,ENVTEMP-1 LD DE,ENVPAGE.ENVTEMP-1
LD B,#00 LD B,#00
.NEXTAR: .NEXTAR:
LD (HL),C ;R04 LD (HL),C ;R04
@ -778,15 +777,12 @@ FINDPATH:
LD (HL),A LD (HL),A
RET RET
ENVPATH DB "PATH=",0 ENVPATH: DB "PATH=",0
;;; ;;;
; !TODO ‘„…‹€’œ <E28098>“Š<E28099>މ ¨ ®¡®§­ ç¨âì áâà ­¨æã ;TMP_CURDIR_AUTO EQU #FB00
TMP_CURDIR_AUTO EQU #FB00 ; ­¥ ­ã¦­® ¥á«¨ SAVE_PATH_MACRO = 1
PATH_PNT_ARRAY EQU #FC80 ; TMP_CURDIR EQU #FD00
; !FIXIT ­¥ ­ã¦­® ¥á«¨ SAVE_PATH_MACRO = 1
TMP_CURDIR EQU #FD00
ENVTEMP EQU #FE00
;///////////////////////////////////////////////////////////////////// ;/////////////////////////////////////////////////////////////////////
@ -847,8 +843,8 @@ EXEC_1: ;LD (CMDLINE),HL
LD (OPEN.TMP),A LD (OPEN.TMP),A
CALL GETWORD CALL GETWORD
RET C RET C
LD HL,TMPNAME ; LD HL,TMPNAME
LD DE,MASKARE ; LD DE,MASKARE
CALL MASK CALL MASK
RET C RET C
CALL TST_EXT CALL TST_EXT
@ -877,11 +873,10 @@ EXEC_1: ;LD (CMDLINE),HL
EXEC0_SHORT: EXEC0_SHORT:
CALL EXEC_1 CALL EXEC_1
RET C RET C
;FILE NOT FOUND, SEARCHING IN PATH ;FILE NOT FOUND, SEARCHING IN PATH
; GET PATH AND ETC. ; GET PATH AND ETC.
LD HL,ENVPATH LD HL,ENVPATH
LD DE,ENVTEMP LD DE,ENVPAGE.ENVTEMP
LD B,high Dss.Environ.Get LD B,high Dss.Environ.Get
CALL ENVIRON CALL ENVIRON

View File

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

View File

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

View File

@ -302,7 +302,8 @@ SETUP_CURSORS:
CTRLKEY LD HL,HOST CTRLKEY:
LD HL,HOST
LD A,(HEAD) LD A,(HEAD)
CP (HL) CP (HL)
LD BC,(KEYFLAG) LD BC,(KEYFLAG)
@ -311,7 +312,8 @@ CTRLKEY LD HL,HOST
DEC A DEC A
RET RET
TESTKEY LD HL,HOST TESTKEY:
LD HL,HOST
LD A,(HEAD) LD A,(HEAD)
CP (HL) CP (HL)
RET Z RET Z
@ -348,7 +350,8 @@ TESTKEY LD HL,HOST
; RET ; RET
;small optimization ;small optimization
K_CLEAR LD A,(HOST) K_CLEAR:
LD A,(HOST)
LD (HEAD),A LD (HEAD),A
LD A,#2F LD A,#2F
CP B CP B
@ -363,7 +366,7 @@ K_CLEAR LD A,(HOST)
RET RET
; ;
PUTSYM LD HL,HEAD PUTSYM: LD HL,HEAD
LD A,(HOST) LD A,(HOST)
SUB 4 SUB 4
AND #3F AND #3F
@ -386,7 +389,7 @@ PUTSYM LD HL,HEAD
LD (HL),C LD (HL),C
RET RET
GETSYM LD HL,HOST GETSYM: LD HL,HOST
LD A,(HEAD) LD A,(HEAD)
CP (HL) CP (HL)
RET Z RET Z
@ -407,38 +410,41 @@ GETSYM LD HL,HOST
LD C,(HL) LD C,(HL)
RET RET
FULL_BF EX AF,AF' FULL_BF:
EX AF,AF'
BIT SF_BUFF,(IX+SOUND_K) BIT SF_BUFF,(IX+SOUND_K)
JR Z,FBF JR Z,.FBF
EXX EXX
LD DE,230 LD DE,230
LD HL,50 LD HL,50
CALL BEEP CALL BEEP
EXX EXX
FBF EX AF,AF' .FBF: EX AF,AF'
RET 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) KEYSCAN:
JR RESCAN LD IX,KEYFLAG
.RESCAN:
E1_KEY SET FLAG_E1,(IX+KEYFLG) IN A,(COM_A)
JR RESCAN
KEYSCAN LD IX,KEYFLAG
RESCAN IN A,(COM_A)
BIT 0,A BIT 0,A
RET Z RET Z
IN A,(DAT_A) IN A,(DAT_A)
CP #F0 CP #F0
JR Z,F0_KEY JR Z,FULL_BF.F0_KEY
CP #E0 CP #E0
JR Z,E0_KEY JR Z,FULL_BF.E0_KEY
CP #E1 CP #E1
JR Z,E1_KEY JR Z,FULL_BF.E1_KEY
BIT FLAG_F0,(IX+KEYFLG) BIT FLAG_F0,(IX+KEYFLG)
JR NZ,UN_KEY JR NZ,UN_KEY
LD L,A 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 TABisSPACES 0
DEFINE EnoughtOnly_LF 0 DEFINE EnoughtOnly_LF 0
DEFINE CLASSIC_CURSOR 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 DEFINE MINIMUM_BIOS_VERSION 2*256 + 55 ; version 2.55
; ;
;-------------------[MEMORY]-------------------------; ;-------------------[MEMORY]-------------------------;
@ -24,13 +23,22 @@ DSS_MAX_DRIVES_AMOUNT EQU 26
; DEFINE OLD_SET_BANK 0 ; DEFINE OLD_SET_BANK 0
;---------------------[ «®£.­®¬¥à  áâà ­¨æ ¯ ¬ï⨠]--------------------- ;---------------------[ «®£.­®¬¥à  áâà ­¨æ ¯ ¬ï⨠]---------------------
DEFINE USING_MEMPAGES 4 ; à §¬¥à ¡«®ª  ¤®¯®«­¨â¥«ì­ëå áâà ­¨æ
; ªíè ᯨ᪠ ª â «®£  ; ªíè ᯨ᪠ ª â «®£ 
DIRPAGE EQU 0 DIRPAGE EQU 0
.buffer EQU #C000
;
FATPAGE EQU 1 FATPAGE EQU 1
.cache EQU #C000
;
TXTPAGE EQU 2 TXTPAGE EQU 2
;
ENVPAGE EQU TXTPAGE ENVPAGE EQU TXTPAGE
.PATH_PNT_ARRAY EQU #FC80
.ENVTEMP EQU #FE00
;
DRVPAGE EQU 3 DRVPAGE EQU 3
DEFINE USING_MEMPAGES 4 ; à §¬¥à ¡«®ª  ¤®¯®«­¨â¥«ì­ëå áâà ­¨æ ;
COREPAGE EQU 4 ; ®­  ®â¤¥«ì­® ¨ ­¥ á ¡«®ª®¬ ¢ëè¥. COREPAGE EQU 4 ; ®­  ®â¤¥«ì­® ¨ ­¥ á ¡«®ª®¬ ¢ëè¥.
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
DIRECTORY_PATH_LENGTH EQU 256 ; '\' + 255, 0 DIRECTORY_PATH_LENGTH EQU 256 ; '\' + 255, 0
@ -38,8 +46,8 @@ ENVIRONMENT_STRING_LENGTH EQU 255
TXTADDR EQU #C000 TXTADDR EQU #C000
ENVADDR EQU #E400 ENVADDR EQU #E400
DIR EQU #C000 ;DIR EQU #C000
FAT_CACHE EQU #C000 ;FAT_CACHE EQU #C000
FMCOUNT EQU 10 ; Š®«¨ç¥á⢮ ä ©«®¢ëå ¬ ­¨¯ã«ïâ®à®¢ FMCOUNT EQU 10 ; Š®«¨ç¥á⢮ ä ©«®¢ëå ¬ ­¨¯ã«ïâ®à®¢
HANDBUF.SIZE EQU 32 HANDBUF.SIZE EQU 32