промежуточное

This commit is contained in:
Anatoliy Belyanskiy 2023-11-14 04:30:26 +10:00
parent 59a72bf084
commit c37fdf343c
13 changed files with 344 additions and 223 deletions

View File

@ -184,10 +184,10 @@ CONTINUE:
CALL DOSMESS CALL DOSMESS
LD A,(DRIVE) LD A,(DRIVE)
LD BC,Dss.BootDSK.Set*256 + Dss.BootDSK LD BC,Dss.BootDSK.Set
RST ToDSS RST ToDSS
LD B,0 LD B,high Dss.BootDSK.Get
ELSE ELSE
IF ORIGINAL_DSS IF ORIGINAL_DSS
@ -205,10 +205,10 @@ CONTINUE:
IF ORIGINAL_DSS IF ORIGINAL_DSS
LD A,(DRIVE) LD A,(DRIVE)
LD BC,Dss.BootDSK.Set*256 + Dss.BootDSK LD BC,Dss.BootDSK.Set
RST ToDSS RST ToDSS
LD B,0 LD B,high Dss.BootDSK.Get
ENDIF ENDIF
ENDIF ENDIF

View File

@ -1,8 +1,9 @@
!TODO !TODO
‚ ¦­®¥: ‚ ¦­®¥:
[ ] ¯¥à¥¤ ­ ç «®¬ à ¡®âë «î¡®© ¯à®æ¥¤ãàë § ¯¨á¨/ç⥭¨ï ¤à ©¢  ãáâ ­ ¢«¨¢ âì ä« £, ç⮡ ­¥ ¡ë«® ¯®¢â®à­®£® ¢ë§®¢  (¨§ ¯à¥à뢠­¨ï, ­ ¯à¨¬¥à)
[ ] ¡«®ª¨à®¢ª  ä ©«®¢ ¢ ä ©«®¢ëå ¬ ­¨¯ã«ïâ®à å (ç⮡ ­¥ ®âªà뢠âì ­  § ¯¨áì 㦥 ®âªàëâë© ­  § ¯¨áì ä ©«, ­ ¯à¨¬¥à)
‘।­¥¥: ‘।­¥¥:
[ ] ¯¥à¥¤ à¥áª ­®¬ ¤à ©¢®¢ ¯à®¢¥àïâì ®âªàëâë¥ åí­¤«ë ¨ ¥á«¨ ¡ãª¢  ¤¨áª  ¬¥­ï¥âáï, â® ¬¥­ïâì ¤à ©¢ ¢ åí­¤«¥ [x] ;!TEST ¯¥à¥¤ à¥áª ­®¬ ¤à ©¢®¢ ¯à®¢¥àïâì ®âªàëâë¥ åí­¤«ë ¨ ¥á«¨ ¡ãª¢  ¤¨áª  ¬¥­ï¥âáï, â® ¬¥­ïâì ¤à ©¢ ¢ åí­¤«¥
[ ] ­ ç âì à ¡®â âì á äã­ªæ¨ï¬¨ REMOVABLE ¨ MEDIA CHECK rst #18. ‚®§¢à é âì §­ ç¥­¨¥ #FF, ¥á«¨ ¯®à冷ª ¡ãª¢ ¨§¬¥­¨«áï [ ] ­ ç âì à ¡®â âì á äã­ªæ¨ï¬¨ REMOVABLE ¨ MEDIA CHECK rst #18. ‚®§¢à é âì §­ ç¥­¨¥ #FF, ¥á«¨ ¯®à冷ª ¡ãª¢ ¨§¬¥­¨«áï
‚®®¡é¥ ­¥ ¢ ¦­®¥: ‚®®¡é¥ ­¥ ¢ ¦­®¥:
@ -11,14 +12,16 @@
DSS 1.70.2 DSS 1.70.2
ˆ§¬¥­¥­¨ï ¯®á«¥ ¢¥àᨨ 1.70 ˆ§¬¥­¥­¨ï ¯®á«¥ ¢¥àᨨ 1.70
[+] ¨á¯à ¢«¥­ ¡ £ á "C:\>CD E:\" CORE:
[+] ¨á¯à ¢«¥­ ¡ £ á ¯¥à¥ª«î祭¨¥¬ ­  ¤à㣮© ¤¨áª ¨§ ­¥ª®à­¥¢®© ¤¨à¥ªâ®à¨¨, ª®£¤  ­  ­®¢®¬ ¤¨áª¥ ®ª §ë¢ «áï ¢ ­¥áãé¥áâ¢ãî饩 ¤¨à¥ªâ®à¨¨ [+] ¯à¨ ç⥭¨¨/§ ¯¨á¨ ä ©«  ­¥ ¯à®¨á室¨â "宫®á⮥" ¯¥à¥ç¨â뢠­¨¥ ª« áâ¥à®¢ ®â ­ ç «  ä ©« 
[+] ¯à¨ ç⥭¨¨/§ ¯¨á¨ ä ©«  ­¥ ¯à®¨á室¨â ¨§¡ëâ®ç­®¥ ¯¥à¥ç¨â뢠­¨¥ ª« áâ¥à®¢ ®â ­ ç «  ä ©« 
[+] ¯¥à¥ç¨â뢠­¨¥ BPB ⥯¥àì ¤¥« ¥âáï ­¥ ­  ª ¦¤ë© ç¨å,   ª®£¤  ­ ¤® (¨ ¡ £  ¯à¨ § £à㧪¥ á ¤¨áª  "B:" ­¥â :-P ) [+] ¯¥à¥ç¨â뢠­¨¥ BPB ⥯¥àì ¤¥« ¥âáï ­¥ ­  ª ¦¤ë© ç¨å,   ª®£¤  ­ ¤® (¨ ¡ £  ¯à¨ § £à㧪¥ á ¤¨áª  "B:" ­¥â :-P )
[+] ¨§¬¥­¥­  à ¡®â  á RAM DISK, ⥯¥àì ®­ ¬®¦¥â ¡ëâì § £àã§®ç­ë¬ [+] ¨§¬¥­¥­  à ¡®â  á RAM DISK, ⥯¥àì ®­ ¬®¦¥â ¡ëâì § £àã§®ç­ë¬
[+] ¯¥à¥å®¤ ­  ¤à㣮© ¤¨áª ¯à®¨á室¨â ¡¥§ ¡ £  á ¤¨à¥ªâ®à¨¥© ®â áâ à®£® ¤¨áª 
[+] ¨á¯à ¢«¥­ë ¡ £¨ á ®¡à ¡®âª®© ¡ãä¥à®¢ ª®¬ ­¤­®© áâப¨
[+] ¨á¯à ¢«¥­ë ¡ £¨ ¢ äã­ªæ¨ïå: WINCOPY, WINREST, SCROLL, SETVMOD, SELPAGE [+] ¨á¯à ¢«¥­ë ¡ £¨ ¢ äã­ªæ¨ïå: WINCOPY, WINREST, SCROLL, SETVMOD, SELPAGE
SHELL:
[+] ¨á¯à ¢«¥­ ¡ £ á "C:\>CD E:\"
[+] ¨á¯à ¢«¥­ë ¡ £¨ á ®¡à ¡®âª®© ¡ãä¥à®¢ ª®¬ ­¤­®© áâப¨
UNSORTED:
[+] ¨á¯à ¢«¥­ ¡ £ á ¯¥à¥ª«î祭¨¥¬ ­  ¤à㣮© ¤¨áª ¨§ ­¥ª®à­¥¢®© ¤¨à¥ªâ®à¨¨, ª®£¤  ­  ­®¢®¬ ¤¨áª¥ ®ª §ë¢ «áï ¢ ­¥áãé¥áâ¢ãî饩 ¤¨à¥ªâ®à¨¨
[+] ¬¥«ª¨¥ ¨ ­¥ ®ç¥­ì ®¯â¨¬¨§ æ¨¨ [+] ¬¥«ª¨¥ ¨ ­¥ ®ç¥­ì ®¯â¨¬¨§ æ¨¨
;ˆ§¬¥­¥­¨ï ¯®á«¥ ¢¥àᨨ 1.60 ;ˆ§¬¥­¥­¨ï ¯®á«¥ ¢¥àᨨ 1.60

View File

@ -316,6 +316,7 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
POP HL POP HL
RET C RET C
LD A,C LD A,C
;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir
; ;
;R08 ;R08
OPEN: LD (.TMP),A ; enter point for CREATE OPEN: LD (.TMP),A ; enter point for CREATE
@ -328,7 +329,15 @@ OPEN: LD (.TMP),A ; enter point for CREATE
.FILE: CALL SEARCH ; enter point for EXEC .FILE: CALL SEARCH ; enter point for EXEC
RET C RET C
;R02 ;R02
.FM: CALL GET_FM ; enter point for ATTRIB .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'
@ -390,6 +399,13 @@ CLOSE: LD (.TMP),A
LD D,(IY+_sFM.DIR_CLUSTER) LD D,(IY+_sFM.DIR_CLUSTER)
LD E,(IY+_sFM.DIR_CLUSTER+1) LD E,(IY+_sFM.DIR_CLUSTER+1)
PUSH DE PUSH DE
; [ ] 13/11/2023 -bug with bad clusters ;!TEST
LD A,(IY+_sFM.DRIVE)
CALL OPENDSK
IF TEST_FEATURE
CALL SET_DIR
ENDIF
;
XOR A XOR A
CALL SET_FM CALL SET_FM
POP DE POP DE
@ -866,7 +882,14 @@ CHDIR_FN:
POP HL POP HL
RET C RET C
CALL CHDIR CALL CHDIR
JP DIR_PATH_CHANGE.FullCurrent ; ¥á«¨ 㤠筮, â® ª®¯¨à㥬 WorkDirectory ¢ CurrentDirectory
JP NC,DIR_PATH_CHANGE.FullCurrent
; ¥á«¨ ­¥ã¤ ç­®, â® ¢®§¢à é ¥¬áï â㤠 ®âªã¤  ¯à¨è«¨
PUSH AF
LD HL,CurrentDirectory
CALL CHDIR
POP AF
RET
; ;
CHDIR: CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª CHDIR: CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C RET C
@ -876,6 +899,7 @@ CHDIR: CALL GETWORD ;
CALL NZ,OPENDIR CALL NZ,OPENDIR
RET RET
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #1B. ‘®§¤ ­¨¥ ª â «®£ . ; ”ã­ªæ¨ï #1B. ‘®§¤ ­¨¥ ª â «®£ .
; ;
@ -893,15 +917,22 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
POP HL POP HL
RET C RET C
LD A,C LD A,C
CALL .START
PUSH AF
LD HL,CurrentDirectory
CALL CHDIR
POP AF
RET
; ;
.START: CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
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
CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£  ;!TEST optimization à ­¥¥ GETWORD 㦥 § £à㧨« ¤¨à¥ªâ®à¨î
;CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£ 
;
CALL DSEARCH ; ¯®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ¤¨áª  CALL DSEARCH ; ¯®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ¤¨áª 
LD A,DSS_Error.sys.DIR_EXISTS LD A,DSS_Error.sys.DIR_EXISTS
CCF CCF
@ -1049,6 +1080,7 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
AND A AND A
RET RET
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #1C. “¤ «¥­¨¥ ª â «®£ . ; ”ã­ªæ¨ï #1C. “¤ «¥­¨¥ ª â «®£ .
; Œ®¦­® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£. ; Œ®¦­® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£.
@ -1067,8 +1099,15 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
POP HL POP HL
RET C RET C
LD A,C LD A,C
CALL .START
PUSH AF
LD HL,CurrentDirectory
CALL CHDIR
CALL DIR_PATH_CHANGE.Current
POP AF
RET
; ;
CALL GETWORD .START: CALL GETWORD
RET C RET C
LD HL,TMPNAME LD HL,TMPNAME
LD DE,MASKARE LD DE,MASKARE
@ -1606,6 +1645,8 @@ TMPNAME: DZ ' ' ; 12
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; IN: A - drive number
;
;????? R10 ;????? R10
OPENDSK: OPENDSK:
;!TEST DRV.Open ®¡å®¤ ;!TEST DRV.Open ®¡å®¤
@ -1616,6 +1657,13 @@ 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
@ -1666,18 +1714,17 @@ OPENDIR:
DEC HL ;R05 DEC HL ;R05
JR Z,.REROOT1 ;R05 JR Z,.REROOT1 ;R05
.SUDI1: EXX .SUDI1: EXX
LD HL,MASKARE LD HL,MASKARE ;!FIXIT ¬®¦­® ­¥ § â¨à âì ¯à¥¤¢ à¨â¥«ì­®?
LD DE,MASKARE+1 LD DE,MASKARE+1
LD BC,10 ;!HARDCODE LD BC,10 ;!HARDCODE
LD (HL),' ' LD (HL),' '
LDIR LDIR
EXX EXX
LD DE,MASKARE LD DE,MASKARE
.SUBDIR0: .loop: LDI
LDI
LD A,(HL) LD A,(HL)
OR A OR A
JR NZ,.SUBDIR0 JR NZ,.loop
JR .SUBDIR3 JR .SUBDIR3
.SUBDIR2: .SUBDIR2:
LD DE,MASKARE LD DE,MASKARE
@ -1688,7 +1735,7 @@ OPENDIR:
RET C RET C
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 LD DE,#4000 ;!HARDCODE
LD (IY+_sFM.F_SIZE),E LD (IY+_sFM.F_SIZE),E
LD (IY+_sFM.F_SIZE+1),D LD (IY+_sFM.F_SIZE+1),D
CALL LOADDIR CALL LOADDIR
@ -1993,11 +2040,11 @@ LOADDIR:
PUSH AF PUSH AF
;!TEST no ldir ;!TEST no ldir
; ®ç¨áâ¨âì ª¥è ª â «®£  ; ®ç¨áâ¨âì ª¥è ª â «®£ 
;LD HL,#C000 ; LD HL,#C000
;LD DE,#C001 ; LD DE,#C001
;LD BC,#3FFF ; LD BC,#3FFF
;LD (HL),L ; LD (HL),L
;LDIR ; LDIR
; ;
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª  LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD (IY+_sFM.DRIVE),A ; á®åà. ¢ ¤¥áªà¨¯â®à LD (IY+_sFM.DRIVE),A ; á®åà. ¢ ¤¥áªà¨¯â®à
@ -2019,11 +2066,17 @@ LOADDIR:
LD HL,(FatBuffer.DIR_FRH) ; áâ. à §àï¤ LD HL,(FatBuffer.DIR_FRH) ; áâ. à §àï¤
LD IX,(FatBuffer.DIR_FRL) ; ­®¬¥à «®£. ᥪâ®à  LD IX,(FatBuffer.DIR_FRL) ; ­®¬¥à «®£. ᥪâ®à 
LD A,(FatBuffer.DIR_S_S) LD A,(FatBuffer.DIR_S_S)
LD B,32 ; !HARDCODE à §¬¥à root-ª â «®£  ;!TEST
SUB B LD B,32 ; !HARDCODE 16384/(sector 512). à §¬¥à root-ª â «®£ 
CP B
JR NC,.RTD1 JR NC,.RTD1
ADD A,B
LD B,A ; ç¨á«® ᥪâ®à®¢ LD B,A ; ç¨á«® ᥪâ®à®¢
;LD B,32 ; !HARDCODE 16384/(sector 512). à §¬¥à root-ª â «®£ 
;SUB B
;JR NC,.RTD1
;ADD A,B
;LD B,A ; ç¨á«® ᥪâ®à®¢
;
.RTD1: LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª  .RTD1: LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD DE,DIR ; ¡ãä¥à LD DE,DIR ; ¡ãä¥à
LD C,Dss.DRV.Read ; ç⥭¨¥ ᥪâ®à®¢ LD C,Dss.DRV.Read ; ç⥭¨¥ ᥪâ®à®¢
@ -2086,26 +2139,34 @@ SAVEDIR:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;!TEST Current Dir ;[x] 15/10/23
DIR_PATH_CHANGE: DIR_PATH_CHANGE:
.FullCurrent: LD A,(FatBuffer.DRIVE) .FullCurrent: LD A,(FatBuffer.DRIVE)
ADD 'A' ADD 'A'
LD (CurrentPath),A LD (CurrentPath),A
; ;
.Current: LD HL,WorkDirectory .Current: ;LD HL,WorkDirectory
LD DE,CurrentDirectory ;LD DE,CurrentDirectory
LD BC,DIRECTORY_PATH_LENGTH ;LD BC,DIRECTORY_PATH_LENGTH
LDIR ;LDIR
RET ;RET
LD HL,CurrentDirectory
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,CurrentDirectory
LD DE,WorkDirectory ;LD DE,WorkDirectory
LD BC,DIRECTORY_PATH_LENGTH ;LD BC,DIRECTORY_PATH_LENGTH
LDIR ;LDIR
RET ;RET
LD HL,WorkDirectory
JP CURRDIR_FN
;
;
DIR_PATH_CHECK: LD A,(HL) DIR_PATH_CHECK: LD A,(HL)
CP '\' CP '\'
JR NZ,.notRootDir JR NZ,.notRootDir
@ -2158,6 +2219,41 @@ 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
;----------------------------------------------------------------------;

View File

@ -118,7 +118,8 @@ GET_FM: LD IY,0
; HL:IX - OFFSET POINTER ; HL:IX - OFFSET POINTER
; A - FILE MANIPULATOR ; A - FILE MANIPULATOR
MOVE_FP CALL SET_FM MOVE_FP:
CALL SET_FM
RET C RET C
INC B INC B
DEC B DEC B
@ -254,7 +255,6 @@ BLOK_RD: PUSH BC
POP DE POP DE
JP BLOKRD2 JP BLOKRD2
; ;
BLOKRD1: BLOKRD1:
PUSH BC PUSH BC
CALL R_F_FAT CALL R_F_FAT
@ -357,15 +357,18 @@ BLOKWRC:
;[x] SAVE CLUSTER AFTER WRITE ;!TEST ;[x] SAVE CLUSTER AFTER WRITE ;!TEST
POP BC POP BC
; ;
BLOKWR0 POP BC BLOK_WR.ErrorWrite:
POP BC
POP DE POP DE
LD A,DSS_Error.sys.WRITE_ERROR
SCF SCF
RET RET
;WRITE SECTORS OF FILE ;WRITE SECTORS OF FILE
;HL:DE - FP (in sectors) ;HL:DE - FP (in sectors), IX - data in RAM
; B - Amount sectors ; B - Amount sectors
BLOK_WR PUSH BC BLOK_WR:
PUSH BC
LD (READ.MEM),IX LD (READ.MEM),IX
LD A,(CORE_BUFFERS.BootSector.S_P_C) ;SECTORS PER CLUSTER LD A,(CORE_BUFFERS.BootSector.S_P_C) ;SECTORS PER CLUSTER
LD C,A LD C,A
@ -396,7 +399,7 @@ BLOK_WR PUSH BC
CALL WR_FAT CALL WR_FAT
POP HL POP HL
POP BC POP BC
JP BLOKWR2 JP .WR2
.saveClustersOffset: .saveClustersOffset:
;[x] SAVE CLUSTER AFTER WRITE ;!TEST ;[x] SAVE CLUSTER AFTER WRITE ;!TEST
@ -404,7 +407,7 @@ BLOK_WR PUSH BC
LD D,(IY+_sFM.KnownCluster_H) LD D,(IY+_sFM.KnownCluster_H)
LD A,D LD A,D
OR E OR E
JR Z,BLOKWR2 JR Z,.WR2
; ;
PUSH DE PUSH DE
PUSH HL PUSH HL
@ -426,30 +429,30 @@ BLOK_WR PUSH BC
POP DE POP DE
; ;
EX DE,HL EX DE,HL
JP BLOKWR2 JP .WR2
.noOptimization_1: .noOptimization_1:
POP BC POP BC
.noOptimization_2: .noOptimization_2:
POP HL POP HL
POP DE POP DE
JP BLOKWR2 JP .WR2
; ;
BLOKWR1 PUSH BC .loop: PUSH BC
CALL R_F_FAT CALL R_F_FAT
JR NC,BLOKWRB JR NC,.WRB
PUSH HL PUSH HL
CALL INC_FAT CALL INC_FAT
POP HL POP HL
JR C,BLOKWRC JR C,BLOKWRC
CALL R_F_FAT CALL R_F_FAT
BLOKWRB POP BC .WRB: POP BC
EX DE,HL EX DE,HL
DEC BC DEC BC
BLOKWR2 LD A,B .WR2: LD A,B
OR C OR C
JR NZ,BLOKWR1 JR NZ,.loop
;[x] SAVE CLUSTER AFTER WRITE ;!TEST ;[x] SAVE CLUSTER AFTER WRITE ;!TEST
LD (IY+_sFM.KnownCluster_L),L LD (IY+_sFM.KnownCluster_L),L
@ -465,9 +468,9 @@ BLOKWR2 LD A,B
SUB E SUB E
LD C,A LD C,A
CP B CP B
JR C,BLOKWR3 ;SIZE > RESIDUE CLUSTER JR C,.WR3 ;SIZE > RESIDUE CLUSTER
LD C,B ;SIZE < CLUSTER LD C,B ;SIZE < CLUSTER
BLOKWR3 LD A,B .WR3: LD A,B
SUB C SUB C
LD B,A LD B,A
PUSH HL PUSH HL
@ -476,89 +479,94 @@ BLOKWR3 LD A,B
CALL NSECTOR CALL NSECTOR
POP DE POP DE
ADD IX,DE ADD IX,DE
JR NC,BLOKWR4 JR NC,.WR4
INC HL INC HL
BLOKWR4 LD DE,(READ.MEM) ; DOUBLE 1
.WR4: LD DE,(READ.MEM)
LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE)
LD B,C LD B,C
LD C,Dss.DRV.Write LD C,Dss.DRV.Write
RST ToDSS.DRV RST ToDSS.DRV
JP C,BLOKWR0 JP C,.ErrorWrite
POP BC POP BC
LD HL,(READ.MEM) LD HL,(READ.MEM)
LD DE,(CORE_BUFFERS.BootSector.B_P_S) LD DE,(CORE_BUFFERS.BootSector.B_P_S)
BLOKWR5 ADD HL,DE .loop2: ADD HL,DE
DEC C DEC C
JR NZ,BLOKWR5 JR NZ,.loop2
LD (READ.MEM),HL LD (READ.MEM),HL
POP DE POP DE
;
LD A,B LD A,B
OR A OR A
RET Z RET Z
BLOKWR6 LD HL,CORE_BUFFERS.BootSector.S_P_C .WR6: LD HL,CORE_BUFFERS.BootSector.S_P_C
LD A,B LD A,B
SUB (HL) SUB (HL)
LD B,A LD B,A
LD C,(HL) LD C,(HL)
JR NC,BLOKWR7 JR NC,.WR7
LD B,0 LD B,0
ADD A,(HL) ;0 AND CF ADD A,(HL) ;0 AND CF
LD C,A LD C,A
OR A ;CLEAR CF OR A ;CLEAR CF
RET Z RET Z
BLOKWR7 EX DE,HL .WR7: EX DE,HL
PUSH BC PUSH BC
CALL R_F_FAT CALL R_F_FAT
JR NC,BLOKWR9 JR NC,.WR9
PUSH HL PUSH HL
CALL INC_FAT CALL INC_FAT
POP HL POP HL
JR C,BLOKWRA JR C,.ErrorFull
CALL R_F_FAT CALL R_F_FAT
BLOKWR9 POP BC .WR9: POP BC
EX DE,HL EX DE,HL
PUSH HL PUSH HL
PUSH BC PUSH BC
CALL NSECTOR CALL NSECTOR
; DOUBLE 1
LD DE,(READ.MEM) LD DE,(READ.MEM)
LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE)
LD B,C LD B,C
LD C,Dss.DRV.Write LD C,Dss.DRV.Write
RST ToDSS.DRV RST ToDSS.DRV
JP C,BLOKWR0 JP C,.ErrorWrite
POP BC POP BC
LD HL,(READ.MEM) LD HL,(READ.MEM)
LD DE,(CORE_BUFFERS.BootSector.B_P_S) LD DE,(CORE_BUFFERS.BootSector.B_P_S)
BLOKWR8 ADD HL,DE .loop3: ADD HL,DE
DEC C DEC C
JR NZ,BLOKWR8 JR NZ,.loop3
LD (READ.MEM),HL LD (READ.MEM),HL
POP DE POP DE
JR BLOKWR6 ;
JR .WR6
BLOKWRA POP BC .ErrorFull:
POP BC
LD A,DSS_Error.sys.DISK_FULL LD A,DSS_Error.sys.DISK_FULL
SCF SCF
RET RET
TSTSIZE XOR A TSTSIZE:
XOR A
LD (READ.COD),A LD (READ.COD),A
LD L,(IY+32) ;FP LOW _sFM.F_POSITION LD L,(IY+_sFM.F_POSITION) ;FP LOW
LD H,(IY+33) LD H,(IY+_sFM.F_POSITION+1)
ADD HL,DE ADD HL,DE
EXX EXX
LD DE,0 LD DE,0
LD L,(IY+34) ;FP HIGH LD L,(IY+_sFM.F_POSITION+2) ;FP HIGH
LD H,(IY+35) LD H,(IY+_sFM.F_POSITION+3)
ADC HL,DE ADC HL,DE
EXX ;HL':HL - NEW FP EXX ;HL':HL - NEW FP
LD C,(IY+28) ; _sFM.F_SIZE LD C,(IY+_sFM.F_SIZE)
LD B,(IY+29) ;SIZE LOW LD B,(IY+_sFM.F_SIZE+1) ;SIZE LOW
AND A AND A
SBC HL,BC SBC HL,BC
EXX EXX
LD C,(IY+30) ;SIZE HIGH LD C,(IY+_sFM.F_SIZE+2) ;SIZE HIGH
LD B,(IY+31) LD B,(IY+_sFM.F_SIZE+3)
SBC HL,BC SBC HL,BC
EXX EXX
RET C ;OK READ ALL RET C ;OK READ ALL
@ -577,7 +585,7 @@ TSTSIZE XOR A
; HL - ADDRESS ; HL - ADDRESS
; DE - SIZE ; DE - SIZE
; A - FM ; A - FM
READ: LD (R_POINT),HL READ: LD (.R_POINT),HL
LD (.S_POINT),HL LD (.S_POINT),HL
CALL SET_FM CALL SET_FM
RET C RET C
@ -628,17 +636,17 @@ READ: LD (R_POINT),HL
JR Z,.ROV2 JR Z,.ROV2
LD (.SECTORH),HL LD (.SECTORH),HL
LD (.SECTORL),DE LD (.SECTORL),DE
LD IX,(R_POINT) .R_POINT+2: LD IX,0
CALL BLOK_RD CALL BLOK_RD
JP C,.ERR_1 JP C,.ERR_1
LD DE,(R_POINT) LD DE,(.R_POINT)
.MEM+1: LD HL,0 // LD HL,(READMEM) .MEM+1: LD HL,0 // LD HL,(READMEM)
AND A AND A
SBC HL,DE SBC HL,DE
LD C,H LD C,H
LD B,0 LD B,0
ADD HL,DE ADD HL,DE
LD (R_POINT),HL LD (.R_POINT),HL
SRL C SRL C
.SECTORL+1: LD HL,0 // LD HL,(SECTORL) .SECTORL+1: LD HL,0 // LD HL,(SECTORL)
ADD HL,BC ADD HL,BC
@ -665,14 +673,13 @@ READ: LD (R_POINT),HL
OUT (C),B OUT (C),B
JP C,.ERR_1 JP C,.ERR_1
LD HL,CORE_BUFFERS.BUFFER LD HL,CORE_BUFFERS.BUFFER
LD DE,(R_POINT) LD DE,(.R_POINT)
POP BC POP BC
LDIR LDIR
LD (R_POINT),DE LD (.R_POINT),DE
.ROV6: .ROV6: LD HL,(.R_POINT)
.S_POINT+1: LD HL,0 .S_POINT+1: LD DE,0
LD DE,(R_POINT) ;EX DE,HL
EX DE,HL
AND A AND A
SBC HL,DE SBC HL,DE
PUSH HL PUSH HL
@ -709,7 +716,7 @@ READ: LD (R_POINT),HL
ADC HL,BC ADC HL,BC
EXX EXX
POP DE POP DE
LD HL,512 LD HL,512 ;!HARDCODE
AND A AND A
SBC HL,DE SBC HL,DE
LD B,H LD B,H
@ -721,13 +728,13 @@ READ: LD (R_POINT),HL
ADD HL,BC ADD HL,BC
LD B,H LD B,H
LD C,L LD C,L
LD HL,0 LD HL,0 ;!TODO ¬®¦­® âãâ ã¯à®áâ¨âì ¤ «ì­¥©èãî ¢¥âªã?
.ROV3: PUSH HL .ROV3: PUSH HL
LD HL,CORE_BUFFERS.BUFFER LD HL,CORE_BUFFERS.BUFFER
ADD HL,DE ADD HL,DE
LD DE,(R_POINT) LD DE,(.R_POINT)
LDIR LDIR
LD (R_POINT),DE LD (.R_POINT),DE
EXX EXX
JP .ROV4 JP .ROV4
.ERR_3: POP HL .ERR_3: POP HL
@ -750,11 +757,11 @@ RD_ONLY: POP DE
; HL - ADDRESS ; HL - ADDRESS
; DE - SIZE ; DE - SIZE
; A - FM ; A - FM
WRITE: LD (R_POINT),HL WRITE: LD (.R_POINT),HL
LD (READ.S_POINT),HL LD (.S_POINT),HL
PUSH DE PUSH DE
CALL SET_FM CALL SET_FM
JP C,PWERR1 JR C,PWERR1
LD A,(IY+_sFM.ACCESS_MODE) LD A,(IY+_sFM.ACCESS_MODE)
AND FAT_ATTR.READ_ONLY AND FAT_ATTR.READ_ONLY
JR NZ,RD_ONLY JR NZ,RD_ONLY
@ -762,7 +769,13 @@ WRITE: LD (R_POINT),HL
SET 5,(IY+_sFM.ATTRIBUT) SET 5,(IY+_sFM.ATTRIBUT)
LD A,(IY+_sFM.DRIVE) LD A,(IY+_sFM.DRIVE)
CALL OPENDSK CALL OPENDSK
JP 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
@ -779,38 +792,39 @@ WRITE: LD (R_POINT),HL
; BC - FP residue (in bytes) ; BC - FP residue (in bytes)
LD A,B LD A,B
OR C OR C
JP NZ,WOV1 JP NZ,.WOV1
WOV4: POP BC .WOV4: POP BC
PUSH BC PUSH BC
SRL B SRL B
JR Z,WOV2 JR Z,.WOV2
PUSH HL PUSH HL
PUSH DE PUSH DE
PUSH BC PUSH BC
R_POINT+2: LD IX,0 // LD IX,(R_POINT) .R_POINT+2:
LD IX,0
CALL BLOK_WR CALL BLOK_WR
POP BC POP BC
JP C,PWERR3 JR C,PWERR3
LD C,B LD C,B
LD HL,(R_POINT) LD HL,(.R_POINT)
LD DE,#0200 LD DE,#0200 ;!HARDCODE
WOV5: ADD HL,DE .WOV5: ADD HL,DE
DJNZ WOV5 DJNZ .WOV5
LD (R_POINT),HL ; B=0
LD B,0 LD (.R_POINT),HL
;LD B,0
POP HL POP HL
ADD HL,BC ADD HL,BC
EX DE,HL EX DE,HL
POP HL POP HL
LD C,B LD C,B
ADC HL,BC ADC HL,BC
WOV2: POP BC .WOV2: POP BC
LD A,B LD A,B
AND #01 AND #01
LD B,A LD B,A
OR C OR C
JP Z,WOV6 JR Z,.WOV6
PUSH HL PUSH HL
PUSH DE PUSH DE
PUSH BC PUSH BC
@ -825,11 +839,11 @@ WOV2: POP BC
LD C,SLOT3 LD C,SLOT3
OUT (C),B OUT (C),B
LD DE,CORE_BUFFERS.BUFFER LD DE,CORE_BUFFERS.BUFFER
LD HL,(R_POINT) LD HL,(.R_POINT)
POP BC POP BC
JP C,PWERR2 JP C,PWERR2
LDIR LDIR
LD (R_POINT),HL LD (.R_POINT),HL
POP DE POP DE
POP HL POP HL
LD IX,CORE_BUFFERS.BUFFER+#C000 LD IX,CORE_BUFFERS.BUFFER+#C000
@ -843,9 +857,10 @@ WOV2: POP BC
LD C,SLOT3 LD C,SLOT3
OUT (C),B OUT (C),B
RET C RET C
WOV6: LD DE,(READ.S_POINT) .WOV6: LD HL,(.R_POINT)
LD HL,(R_POINT) .S_POINT+1: LD DE,0
AND A ; CF=0
;AND A
SBC HL,DE SBC HL,DE
PUSH HL PUSH HL
EX DE,HL EX DE,HL
@ -855,18 +870,19 @@ WOV6: LD DE,(READ.S_POINT)
CALL MOVE_FP.F_current CALL MOVE_FP.F_current
CALL MOVE_CP CALL MOVE_CP
POP DE POP DE
RET NC RET NC ; …᫨ à §¬¥à ä ©«  ­  ¤¨áª¥ <20>… áâ « ¡®«ìè¥, 祬 ¡ë«
LD L,(IY+32) ; …᫨ à §¬¥à ä ©«  ­  ¤¨áª¥ áâ « ¡®«ìè¥, 祬 ¡ë«
LD H,(IY+33) LD L,(IY+_sFM.F_POSITION+0)
LD C,(IY+34) LD H,(IY+_sFM.F_POSITION+1)
LD B,(IY+35) LD C,(IY+_sFM.F_POSITION+2)
LD (IY+28),L LD B,(IY+_sFM.F_POSITION+3)
LD (IY+29),H LD (IY+_sFM.F_SIZE+0),L
LD (IY+30),C LD (IY+_sFM.F_SIZE+1),H
LD (IY+31),B LD (IY+_sFM.F_SIZE+2),C
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
LD IX,CORE_BUFFERS.BUFFER+#C000 LD IX,CORE_BUFFERS.BUFFER+#C000
@ -884,7 +900,7 @@ WOV1: PUSH BC
EXX EXX
POP DE POP DE
JP C,PWERR1 JP C,PWERR1
LD HL,512 LD HL,512 ;!HARDCODE
AND A AND A
SBC HL,DE SBC HL,DE
LD B,H LD B,H
@ -892,18 +908,18 @@ WOV1: PUSH BC
POP HL POP HL
AND A AND A
SBC HL,BC SBC HL,BC
JR NC,WOV3 JR NC,.WOV3
ADD HL,BC ADD HL,BC
LD B,H LD B,H
LD C,L LD C,L
LD HL,0 LD HL,0
WOV3: PUSH HL .WOV3: PUSH HL
LD HL,CORE_BUFFERS.BUFFER LD HL,CORE_BUFFERS.BUFFER
ADD HL,DE ADD HL,DE
LD DE,(R_POINT) LD DE,(.R_POINT)
EX DE,HL EX DE,HL
LDIR LDIR
LD (R_POINT),HL LD (.R_POINT),HL
EXX EXX
PUSH HL PUSH HL
PUSH DE PUSH DE
@ -925,7 +941,7 @@ WOV3: PUSH HL
POP HL POP HL
LD C,B LD C,B
ADC HL,BC ADC HL,BC
JP WOV4 JP .WOV4
////////////// OLD //////////////// ////////////// OLD ////////////////
; HL - CLUSTER ; HL - CLUSTER

View File

@ -882,7 +882,7 @@ EXEC0_SHORT:
; GET PATH AND ETC. ; GET PATH AND ETC.
LD HL,ENVPATH LD HL,ENVPATH
LD DE,ENVTEMP LD DE,ENVTEMP
LD B,Dss.Environ.Get LD B,high Dss.Environ.Get
CALL ENVIRON CALL ENVIRON
LD HL,(CMDLINE) LD HL,(CMDLINE)

View File

@ -16,14 +16,14 @@ R_CLUST LD HL,#0001
G_CLUST: G_CLUST:
.num+1: LD HL,#0001 .num+1: LD HL,#0001
G_CLUS1: INC HL ; ­®¬¥à ª« áâ¥à  .loop: INC HL ; ­®¬¥à ª« áâ¥à 
CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à  CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
CP DSS_Error.sys.DISK_FULL CP DSS_Error.sys.DISK_FULL
SCF SCF
RET Z ; ®è¨¡ª  ? RET Z ; ®è¨¡ª  ?
LD A,D LD A,D
OR E OR E
JR NZ,G_CLUS1 JR NZ,.loop
LD (G_CLUST.num),HL LD (G_CLUST.num),HL
XOR A XOR A
RET RET
@ -36,9 +36,9 @@ INC_FAT PUSH HL
PUSH HL PUSH HL
PUSH HL PUSH HL
EX DE,HL ; hl=­®¬¥à ª« áâ¥à  EX DE,HL ; hl=­®¬¥à ª« áâ¥à 
INC_FA2 CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à  .loop: CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
EX DE,HL EX DE,HL
JR NC,INC_FA2 ; ­¥ ª®­¥æ 楯®çª¨ JR NC,.loop ; ­¥ ª®­¥æ 楯®çª¨
EX DE,HL EX DE,HL
POP DE ; ­®¬¥à ª« áâ¥à  POP DE ; ­®¬¥à ª« áâ¥à 
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à  CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
@ -59,6 +59,7 @@ INC_FA2 CALL R_F_FAT ;
; CF - ª®­¥æ 楯®çª¨ ; CF - ª®­¥æ 楯®çª¨
;!FIXIT ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - à §¤¥« ­¥ ¡®«ìè¥ 2Gb ;!FIXIT ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - à §¤¥« ­¥ ¡®«ìè¥ 2Gb
;----------------------------------------------------------- ;-----------------------------------------------------------
;!FIXIT ®â¤ ñâ à §­ë© CF ¯à¨ 㤠筮¬ § ¢¥à襭¨¨ ¢ § ¢¨á¨¬®á⨠®â FAT16/FAT12
R_F_FAT: R_F_FAT:
EX DE,HL EX DE,HL
LD HL,(MAX_CLU) LD HL,(MAX_CLU)
@ -171,7 +172,8 @@ R_F_F16:
; RR H ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF ; RR H ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF
; RR L ; CLUSTER * 1.5 ; RR L ; CLUSTER * 1.5
; PUSH AF ; á®åà. ä« £ ; PUSH AF ; á®åà. ä« £
R_F_F12 LD D,H R_F_F12:
LD D,H
LD E,L LD E,L
RR H RR H
RR L ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF RR L ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF
@ -217,7 +219,8 @@ R_F_F12 LD D,H
; RR E ; RR E
; RR D ; RR D
; RR E ; RR E
R_F_F01 LD A,E R_F_F01:
LD A,E
AND #F0 AND #F0
RR D ; ¢¯à ¢® ­  4 ¡¨âa RR D ; ¢¯à ¢® ­  4 ¡¨âa
RRA RRA
@ -228,7 +231,8 @@ R_F_F01 LD A,E
RR D RR D
RRA RRA
LD E,A LD E,A
R_F_F02 POP AF R_F_F02:
POP AF
OUT (SLOT3),A OUT (SLOT3),A
LD HL,#0FEF LD HL,#0FEF
XOR A ; ®¡­ã«ï¥¬ CF ¨ ãáâ ­ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = ­ã«î XOR A ; ®¡­ã«ï¥¬ CF ¨ ãáâ ­ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = ­ã«î
@ -295,7 +299,8 @@ W_T_F16:
RET RET
; ;
; fat12 ; fat12
W_T_F12 PUSH DE W_T_F12:
PUSH DE
LD D,H LD D,H
LD E,L LD E,L
; ADD HL,HL ; ADD HL,HL
@ -408,14 +413,14 @@ RE_FAT: PUSH HL
; <20>®¤ª«îç¨âì ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª ; <20>®¤ª«îç¨âì ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
WR_FAT: SET_PAGE_X FATPAGE WR_FAT: SET_PAGE_X FATPAGE
PUSH AF PUSH AF
CALL .Start CALL .Start ;!TODO ­¥â ª®­âà®«ï ®è¨¡®ª
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
RET RET
; ‡ ¯¨áì ª¥è  (¢á¥£®?) FAT-  ­  ¤¨áª ; ‡ ¯¨áì ª¥è  (¢á¥£®?) FAT-  ­  ¤¨áª
.Start: LD HL,(FATCASH) .Start: LD HL,(FATCASH)
LD H,0 LD H,0
LD (FATCASH),HL ;LD (FATCASH),HL
ADD HL,HL ADD HL,HL
ADD HL,HL ADD HL,HL
ADD HL,HL ADD HL,HL
@ -426,9 +431,8 @@ WR_FAT: SET_PAGE_X FATPAGE
LD C,L ;BC - BLOCK OF FAT LD C,L ;BC - BLOCK OF FAT
LD DE,16 ;!HARDCODE ;!TODO FATcacheSize LD DE,16 ;!HARDCODE ;!TODO FATcacheSize
ADD HL,DE ;+ SIZE CASH (16 SECTORS) ADD HL,DE ;+ SIZE CASH (16 SECTORS)
LD A,E ;!HARDCODE ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï ç⥭¨ï ¢ ªíè ;!TODO FATcacheSize
LD DE,(CORE_BUFFERS.BootSector.S_P_F) ; ᥪâ®à®¢ ­  FAT LD DE,(CORE_BUFFERS.BootSector.S_P_F) ; ᥪâ®à®¢ ­  FAT
LD A,16 ;!HARDCODE ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï ç⥭¨ï ¢ ªíè ;!TODO FATcacheSize
AND A AND A
SBC HL,DE SBC HL,DE
JR C,.WALLFAT JR C,.WALLFAT
@ -436,7 +440,7 @@ WR_FAT: SET_PAGE_X FATPAGE
LD HL,16 ;!HARDCODE ; ç¨á«® ᥪâ®à®¢ ;!TODO FATcacheSize LD HL,16 ;!HARDCODE ; ç¨á«® ᥪâ®à®¢ ;!TODO FATcacheSize
; CF = 0 ; CF = 0
SBC HL,DE SBC HL,DE
JP C,FATERR JP C,.ERR
LD A,L LD A,L
.WALLFAT: .WALLFAT:
LD H,B LD H,B
@ -466,9 +470,15 @@ WR_FAT: SET_PAGE_X FATPAGE
LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE)
LD C,Dss.DRV.Write LD C,Dss.DRV.Write
RST ToDSS.DRV RST ToDSS.DRV
AND A ;!TODO ­¥â ª®­âà®«ï ®è¨¡®ª
;
.ERR: LD A,0
LD (FATCASH.Update),A
RET NC
POP HL
; CF = 1
RET RET
;R01 ;R01
;R01WR_FAT LD HL,(FATCASH) ;R01WR_FAT LD HL,(FATCASH)
;R01 LD H,0 ;R01 LD H,0
;R01 LD (FATCASH),HL ;R01 LD (FATCASH),HL
@ -521,10 +531,6 @@ WR_FAT: SET_PAGE_X FATPAGE
;R01 RST #18 ;R01 RST #18
;R01 RET ;R01 RET
FATERR: POP HL
; CF = 1
RET
FATCASH: WORD #0000 FATCASH: WORD #0000
.Block EQU FATCASH .Block EQU FATCASH
.Update EQU FATCASH+1 .Update EQU FATCASH+1

View File

@ -23,31 +23,31 @@ RESERVED2 BLOCK 490,0
;File Manipulator (FM) ;File Manipulator (FM)
STRUCT _sFM ; 47 bytes STRUCT _sFM ; 47 bytes
; from FAT ; from FAT
.NAME: TEXT 8,{". "," "} ;+00 NAME .NAME: TEXT 8,{". "," "} ;+ #00 +00 NAME
.EXT: TEXT 3,{" "," "} ;+08 EXT .EXT: TEXT 3,{" "," "} ;+ #08 +08 EXT
.ATTRIBUT: BYTE #10 ;+11 ATTRIBUT .ATTRIBUT: BYTE #10 ;+ #0B +11 ATTRIBUT
.RESERVED_NT: BYTE #00 ;+12 RESERVED .RESERVED_NT: BYTE #00 ;+ #0C +12 RESERVED
.RESERVED_FAT32: BYTE #00 ;+13 RESERVED .RESERVED_FAT32: BYTE #00 ;+ #0D +13 RESERVED
.CREATE_TIME_FAT32: WORD #0000 ;+14 RESERVED .CREATE_TIME_FAT32: WORD #0000 ;+ #0E +14 RESERVED
.CREATE_DATE_FAT32: WORD #0000 ;+16 RESERVED .CREATE_DATE_FAT32: WORD #0000 ;+ #10 +16 RESERVED
.RESERVED_FAT32_1: WORD #0000 ;+18 RESERVED .RESERVED_FAT32_1: WORD #0000 ;+ #12 +18 RESERVED
.RESERVED_FAT32_2: WORD #0000 ;+20 RESERVED .RESERVED_FAT32_2: WORD #0000 ;+ #14 +20 RESERVED
.TIME: WORD #0000 ;+22 TIME .TIME: WORD #0000 ;+ #16 +22 TIME
.DATE: WORD #0000 ;+24 DATE .DATE: WORD #0000 ;+ #18 +24 DATE
.ST_CLUSTER: WORD #0000 ;+26 START CLUSTER .ST_CLUSTER: WORD #0000 ;+ #1A +26 START CLUSTER
.F_SIZE: DWORD #00000000 ;+28 SIZE FILE .F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE
; from Core ; from Core
.F_POSITION: DWORD #00000000 ;+32 FILE POSITION (FP) .F_POSITION: DWORD #00000000 ;+ #20 +32 FILE POSITION (FP)
.DIR_CLUSTER: WORD #0000 ;+36 DIRECTORY CLUSTER .DIR_CLUSTER: WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER
.HANDLE: WORD #0000 ;+38 HANDLE NUMBER .HANDLE: WORD #0000 ;+ #26 +38 HANDLE NUMBER
.DRIVE: BYTE #00 ;+40 DRIVE OR CURRENT .DRIVE: BYTE #00 ;+ #28 +40 DRIVE OR CURRENT
.ACCESS_MODE: BYTE #00 ;+41 ACCESS MODE ¯à¨§­ ª ¨§¬¥­¥­¨ï ä ©«  .ACCESS_MODE: BYTE #00 ;+ #29 +41 ACCESS MODE ¯à¨§­ ª ¨§¬¥­¥­¨ï ä ©« 
.TASK_NUM: BYTE #00 ;+42 TASK .TASK_NUM: BYTE #00 ;+ #2A +42 TASK
;.EMPTY: BYTE #00 ;+43 EMPTY ;.EMPTY: BYTE #00 ;+ #2B +43 EMPTY
.KnownCluster_L: BYTE 0 ;+43 Œ« ¤è¨© ¡ ©â ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩«  .KnownCluster_L: BYTE 0 ;+ #2B +43 Œ« ¤è¨© ¡ ©â ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩« 
.KnownCluster_H: BYTE 0 ;+44 ‘â à訩 ¡ ©â ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩«  .KnownCluster_H: BYTE 0 ;+ #2C +44 ‘â à訩 ¡ ©â ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩« 
.KnownOffset_L: BYTE 0 ;+45 Œ« ¤è¨© ¡ ©â ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à . .KnownOffset_L: BYTE 0 ;+ #2D +45 Œ« ¤è¨© ¡ ©â ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
.KnownOffset_H: BYTE 0 ;+46 ‘â à訩 ¡ ©â ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à . .KnownOffset_H: BYTE 0 ;+ #2E +46 ‘â à訩 ¡ ©â ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
ENDS ENDS
; ;

View File

@ -1 +1 @@
537 567

View File

@ -1,5 +1,5 @@
; ;
DEFINE TEST_FEATURE 1 DEFINE TEST_FEATURE 0
; ;
; ;

View File

@ -403,7 +403,7 @@ EVALSTR: ld a,(hl)
ld h,b ; hl=¨¬ï ¯¥à¥¬. ld h,b ; hl=¨¬ï ¯¥à¥¬.
ld l,c ld l,c
inc hl inc hl
ld bc,Dss.Environ.Get*256 + Dss.Environ ; ¯®«ãç¨âì ¯¥à¥¬. ®ªà㦥­¨ï ld bc,Dss.Environ.Get ; ¯®«ãç¨âì ¯¥à¥¬. ®ªà㦥­¨ï
RST ToDSS RST ToDSS
.TNOVAR: pop hl .TNOVAR: pop hl
inc hl inc hl

View File

@ -27,7 +27,7 @@ cmd_path:
ld (hl),"A" ld (hl),"A"
dec hl dec hl
ld (hl),"P" ; ­ ç «® áâப¨ ¨¬¥­¨ ld (hl),"P" ; ­ ç «® áâப¨ ¨¬¥­¨
ld bc,Dss.Environ.Set*256 + Dss.Environ ; ãáâ ­./㤠«¨âì ¯¥à¥¬. ®ªà㦥­¨ï ld bc,Dss.Environ.Set ; ãáâ ­./㤠«¨âì ¯¥à¥¬. ®ªà㦥­¨ï
RST ToDSS RST ToDSS
call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
ret ret
@ -36,7 +36,7 @@ cmd_path:
A85B9: ;ld de,T9186 ; ªã¤  A85B9: ;ld de,T9186 ; ªã¤ 
ld de,work_buffer1; ld de,work_buffer1;
ld hl,T858C ; ¨¬ï ¯¥à¥¬¥­­®© "PATH=" ld hl,T858C ; ¨¬ï ¯¥à¥¬¥­­®© "PATH="
ld bc,Dss.Environ.Get*256 + Dss.Environ ; ¯®«ãç¨âì ¯¥à¥¬¥­­ãî ®ªà㦥­¨ï ld bc,Dss.Environ.Get ; ¯®«ãç¨âì ¯¥à¥¬¥­­ãî ®ªà㦥­¨ï
RST ToDSS RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
ld hl,T858C ; "PATH=",0 ld hl,T858C ; "PATH=",0

View File

@ -14,7 +14,7 @@ cmd_set:ld a,(de) ;
jr c,cmd_set jr c,cmd_set
dec de dec de
ex de,hl ex de,hl
ld bc,Dss.Environ.Set*256 + Dss.Environ ld bc,Dss.Environ.Set
RST ToDSS RST ToDSS
call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
ret ret
@ -22,7 +22,7 @@ cmd_set:ld a,(de) ;
; <20>®ª § âì á¨á⥬­®¥ ®ªà㦥­¨¥ ; <20>®ª § âì á¨á⥬­®¥ ®ªà㦥­¨¥
A85EE: ;ld hl,T9186 ; ªã¤  A85EE: ;ld hl,T9186 ; ªã¤ 
ld hl,work_buffer1; ld hl,work_buffer1;
ld bc,Dss.Environ.Read*256 + Dss.Environ ; ¯®«ãç¨âì á¨áâ. ®ªà㦥­¨¥ ld bc,Dss.Environ.Read ; ¯®«ãç¨âì á¨áâ. ®ªà㦥­¨¥
RST ToDSS RST ToDSS
;ld hl,T9186 ;ld hl,T9186
ld hl,work_buffer1; ld hl,work_buffer1;

@ -1 +1 @@
Subproject commit 8641b77d8ebe42ae042bb8df3902300e678048eb Subproject commit b69773d50cb2c0e1da44f7f20c7daa32871f2308