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

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
LD A,(DRIVE)
LD BC,Dss.BootDSK.Set*256 + Dss.BootDSK
LD BC,Dss.BootDSK.Set
RST ToDSS
LD B,0
LD B,high Dss.BootDSK.Get
ELSE
IF ORIGINAL_DSS
@ -205,10 +205,10 @@ CONTINUE:
IF ORIGINAL_DSS
LD A,(DRIVE)
LD BC,Dss.BootDSK.Set*256 + Dss.BootDSK
LD BC,Dss.BootDSK.Set
RST ToDSS
LD B,0
LD B,high Dss.BootDSK.Get
ENDIF
ENDIF

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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