This commit is contained in:
Anatoliy Belyanskiy 2023-11-11 00:26:36 +10:00
parent fed7066721
commit 59a72bf084
7 changed files with 181 additions and 117 deletions

View File

@ -78,7 +78,7 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
RET
;R02
.OPENATR:
LD (F_FIRST.ACCESS),A ; à ¡. ï祩ª  (§¤¥áì  âਡãâ § ¯¨á¨)
LD (OPEN.TMP),A ; à ¡. ï祩ª  (§¤¥áì  âਡãâ § ¯¨á¨)
CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C
LD HL,TMPNAME
@ -130,7 +130,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
LD BC,11
LDIR
EX DE,HL
LD A,(F_FIRST.ACCESS)
.TMP+1: LD A,0
LD (HL),A
INC HL
LD BC,#0A00 ;!HARDCODE
@ -165,7 +165,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
JP OPEN ;R08
.Prepare:
AND #E7 ;R04 %76A00SHR = !FAT_ATTR
LD (F_FIRST.ACCESS),A
LD (.TMP),A
LD (.PATH0),HL
CALL GETWORD
RET C
@ -318,17 +318,17 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
LD A,C
;
;R08
OPEN: LD (F_FIRST.ACCESS),A
OPEN: LD (.TMP),A ; enter point for CREATE
CALL GETWORD
RET C
LD HL,TMPNAME
LD DE,MASKARE
CALL MASK
RET C
.FILE: CALL SEARCH
.FILE: CALL SEARCH ; enter point for EXEC
RET C
;R02
.FM: CALL GET_FM
.FM: CALL GET_FM ; enter point for ATTRIB
RET C
LD A,C
EX AF,AF'
@ -341,11 +341,17 @@ OPEN: LD (F_FIRST.ACCESS),A
LD HL,HANDBUF
LD BC,HANDBUF.SIZE
LDIR
LD A,(F_FIRST.ACCESS)
.TMP+1: LD A,0
LD (IY+_sFM.ACCESS_MODE),A
LD A,(TASK)
LD (IY+_sFM.TASK_NUM),A
XOR A
;
LD (IY+_sFM.KnownCluster_L),A
LD (IY+_sFM.KnownCluster_H),A
LD (IY+_sFM.KnownOffset_L),A
LD (IY+_sFM.KnownOffset_H),A
;
LD (IY+_sFM.F_POSITION),A
LD (IY+_sFM.F_POSITION+1),A
LD (IY+_sFM.F_POSITION+2),A
@ -371,7 +377,7 @@ OPEN: LD (F_FIRST.ACCESS),A
////////////////////////////////////////////////////////////////////////
CLOSE_FN:
;R08
CLOSE: LD (F_FIRST.ACCESS),A
CLOSE: LD (.TMP),A
CALL SET_FM
RET C
LD A,(TASK)
@ -390,20 +396,25 @@ CLOSE: LD (F_FIRST.ACCESS),A
LD (IY+_sFM.DIR_CLUSTER),D
LD (IY+_sFM.DIR_CLUSTER+1),E
CALL LOADDIR
LD A,(F_FIRST.ACCESS)
.TMP+1: LD A,0
CALL SET_FM
LD HL,DIR
LD DE,#0020
LD C,(IY+_sFM.HANDLE)
LD B,(IY+_sFM.HANDLE+1)
JR .CLOSE2
.CLOSE1:
ADD HL,DE
DEC BC
.CLOSE2:
LD A,B
OR C
JR NZ,.CLOSE1
;
;TEST 9/11/23
; LD HL,DIR
; LD DE,#0020
; LD C,(IY+_sFM.HANDLE)
; LD B,(IY+_sFM.HANDLE+1)
; JR .CLOSE2
; .CLOSE1:
; ADD HL,DE
; DEC BC
; .CLOSE2:
; LD A,B
; OR C
; JR NZ,.CLOSE1
LD L,(IY+_sFM.HANDLE)
LD H,(IY+_sFM.HANDLE+1)
;
LD D,YH
LD E,YL
EX DE,HL
@ -417,7 +428,7 @@ CLOSE: LD (F_FIRST.ACCESS),A
OUT (SLOT3),A
CALL SAVEDIR
.NOTMODF:
LD A,(F_FIRST.ACCESS)
LD A,(.TMP)
CALL RES_FM
RET
@ -445,7 +456,7 @@ F_FIRST:
; RET C
; LD A,C
; ;
LD (.ACCESS),A
LD (.TMP),A
LD (.DTABUF),DE
LD A,B
LD (.FNDMODE),A
@ -461,8 +472,7 @@ F_FIRST:
LD DE,MASKARE
CALL MASK
RET C
.ACCESS+1:
LD A,0
LD A,(.TMP)
CALL SEARCH.ASEARCH
RET C
LD HL,MASKARE
@ -470,7 +480,7 @@ F_FIRST:
LD DE,0
LD BC,11 ;!HARDCODE
LDIR
LD A,(.ACCESS)
.TMP+1: LD A,0
LD (DE),A
.FIND_S:
INC DE
@ -538,10 +548,11 @@ F_NEXT:
EX AF,AF'
CPL
LD C,A
EXX
LD DE,0
EXX
;TEST 9/11/23
; EXX
; LD DE,0
; EXX
;
.CURHND+2:
LD IX,0
LD A,XH
@ -1339,9 +1350,10 @@ WRT_HND:
PUSH AF
LD IX,DIR
EXX
LD DE,0
EXX
;TEST 9/11/23
; EXX
; LD DE,0
; EXX
;
.loop: LD A,(IX+00)
OR A
@ -1430,20 +1442,23 @@ DSEARCH:
;----------------------------------------------------------------------;
;OUT: DE' - ¯®à浪®¢ë© ­®¬¥à FM
SEARCH: LD A,FAT_ATTR.NoDIRnoVolID
.ASEARCH:
EX AF,AF' ; 76ADLSHR
; A = 76ADLSHR
EX AF,AF'
SET_PAGE_X DIRPAGE
PUSH AF
EX AF,AF'
;
CPL
LD C,A
LD IX,DIR
EXX
LD DE,0
EXX
;TEST 9/11/23
; EXX
; LD DE,0
; EXX
;
.SEARCH1:
LD A,(IX+00)
OR A
@ -1468,8 +1483,16 @@ SEARCH: LD A,FAT_ATTR.NoDIRnoVolID
INC HL
INC DE
DJNZ .SEARCH2
LD D,XH
LD E,XL
;!TEST 9/11/23
; LD D,XH
; LD E,XL
LD D,XH
LD E,XL
EXX
LD D,XH
LD E,XL
EXX
;
LD HL,HANDBUF
EX DE,HL
LD BC,HANDBUF.SIZE
@ -1479,12 +1502,14 @@ SEARCH: LD A,FAT_ATTR.NoDIRnoVolID
AND A
RET
.SEARCH3:
EXX
INC DE
EXX
;!TEST 9/11/23
; EXX
; INC DE
; EXX
;
LD DE,#0020 ;!HARDCODE
ADD IX,DE
JR NC,SEARCH.SEARCH1
JR NC,.SEARCH1
.error: POP AF
OUT (SLOT3),A
LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR
@ -2143,6 +2168,7 @@ HANDBUF: BLOCK HANDBUF.SIZE,0
MASKARE: BLOCK 8,0 ; ¨¬ï ä ©« 
BLOCK 3,0 ; à áè.
BLOCK 21,0 ; 11+21=32
;TMP_BYTE: DB 0 ; ACCESS:
;
;PATH0: DW #0000

View File

@ -59,19 +59,18 @@ FM_BUF: _sFM
; A=0
OR (IY) ;+00 NAME
ENDM
////////////////////////////////////////////////////////////////////////
SET_FM:
_mFM_FIND
LD A,DSS_Error.sys.NO_ERROR
SET_FM: _mFM_FIND
LD A,DSS_Error.sys.NO_ERROR
RET NZ
ABS_FM LD A,DSS_Error.sys.INVALID_HANDLE
SCF
RET
RES_FM:
_mFM_FIND
RES_FM: _mFM_FIND
LD A,DSS_Error.sys.INVALID_HANDLE
;EXX
SCF
@ -79,7 +78,7 @@ RES_FM:
XOR A
LD (IY+0),A
RET
;
GET_FM: LD B,FMCOUNT
LD C,#FF
LD IY,CORE_BUFFERS.FM_BUF - CORE_BUFFERS.FM_BUF.Size
@ -93,6 +92,29 @@ GET_FM: LD B,FMCOUNT
LD A,DSS_Error.sys.NO_HANDLES
SCF
RET
/*
;!TEST CHECK LOCKING 10/11/2023
GET_FM: LD IY,0
LD (.freeHandle),IY
;
LD B,FMCOUNT
LD C,#FF
LD IY,CORE_BUFFERS.FM_BUF - CORE_BUFFERS.FM_BUF.Size
LD DE,CORE_BUFFERS.FM_BUF.Size
.loop: ADD IY,DE
INC C
; CHECK LOCKING
;
.cont: LD A,(IY+0)
OR A
RET Z
DJNZ .loop
LD A,DSS_Error.sys.NO_HANDLES
SCF
RET
*/
; HL:IX - OFFSET POINTER
; A - FILE MANIPULATOR
@ -157,7 +179,7 @@ MOVE_CP:
;--------------------
ECL2:
;!TEST SAVE CLUSTER AFTER READ
;[x] SAVE CLUSTER AFTER READ ;!TEST
POP BC
;
POP BC
@ -188,15 +210,15 @@ BLOK_RD: PUSH BC
LD H,(IY+_sFM.ST_CLUSTER+1)
LD A,H
OR L
;!TEST SAVE CLUSTER AFTER READ
;[x] SAVE CLUSTER AFTER READ ;!TEST
;JR NZ,BLOKRD2
PUSH BC
JR NZ,.testFunc
JR NZ,.saveClustersOffset
;
JP ECL2 ;R01 JR BLOKRD0
.testFunc:
;!TEST SAVE CLUSTER AFTER READ
.saveClustersOffset:
;[x] SAVE CLUSTER AFTER READ ;!TEST
LD E,(IY+_sFM.KnownCluster_L)
LD D,(IY+_sFM.KnownCluster_H)
LD A,D
@ -225,13 +247,13 @@ BLOK_RD: PUSH BC
EX DE,HL
JP BLOKRD2
;
.noOptimization_1:
POP BC
POP BC
.noOptimization_2:
POP HL
POP DE
JP BLOKRD2
POP HL
POP DE
JP BLOKRD2
;
BLOKRD1:
PUSH BC
@ -245,7 +267,7 @@ BLOKRD2:
OR C
JR NZ,BLOKRD1
;!TEST SAVE CLUSTER AFTER READ
;[x] SAVE CLUSTER AFTER READ ;!TEST
LD (IY+_sFM.KnownCluster_L),L
LD (IY+_sFM.KnownCluster_H),H
POP BC
@ -332,7 +354,7 @@ ECL1 AND A
BLOKWRC:
POP BC
;!TEST SAVE CLUSTER AFTER WRITE
;[x] SAVE CLUSTER AFTER WRITE ;!TEST
POP BC
;
BLOKWR0 POP BC
@ -358,10 +380,10 @@ BLOK_WR PUSH BC
LD H,(IY+_sFM.ST_CLUSTER+1)
LD A,H
OR L
;!TEST SAVE CLUSTER AFTER WRITE
;[x] SAVE CLUSTER AFTER WRITE ;!TEST
;JR NZ,BLOKWR2
PUSH BC
JR NZ,.testFunc
JR NZ,.saveClustersOffset
;
PUSH BC
CALL G_CLUST
@ -376,14 +398,14 @@ BLOK_WR PUSH BC
POP BC
JP BLOKWR2
.testFunc:
;!TEST SAVE CLUSTER AFTER WRITE
.saveClustersOffset:
;[x] SAVE CLUSTER AFTER WRITE ;!TEST
LD E,(IY+_sFM.KnownCluster_L)
LD D,(IY+_sFM.KnownCluster_H)
LD A,D
OR E
JR Z,BLOKWR2
;
PUSH DE
PUSH HL
PUSH BC
@ -392,27 +414,26 @@ BLOK_WR PUSH BC
LD A,D
OR E
JR Z,.noOptimization_1
;
POP HL
AND A
SBC HL,DE
JR C,.noOptimization_2
;
LD C,L
LD B,H
POP HL
POP DE
;
EX DE,HL
JP BLOKWR2
;
.noOptimization_1:
POP BC
POP BC
.noOptimization_2:
POP HL
POP DE
JP BLOKWR2
POP HL
POP DE
JP BLOKWR2
;
BLOKWR1 PUSH BC
@ -430,7 +451,7 @@ BLOKWR2 LD A,B
OR C
JR NZ,BLOKWR1
;!TEST SAVE CLUSTER AFTER WRITE
;[x] SAVE CLUSTER AFTER WRITE ;!TEST
LD (IY+_sFM.KnownCluster_L),L
LD (IY+_sFM.KnownCluster_H),H
POP BC
@ -735,7 +756,7 @@ WRITE: LD (R_POINT),HL
CALL SET_FM
JP C,PWERR1
LD A,(IY+_sFM.ACCESS_MODE)
AND #01
AND FAT_ATTR.READ_ONLY
JR NZ,RD_ONLY
SET 7,(IY+_sFM.ACCESS_MODE)
SET 5,(IY+_sFM.ATTRIBUT)

View File

@ -822,7 +822,8 @@ ENVTEMP EQU #FE00
; +00 1 db ? ; „«¨­  ª®¬-áâப¨
; +01 127 ds ? ; <20> à ¬¥âàë ª®¬-áâப¨, § ª ­ç¨¢ ¥âáï ­ã«¥¬
;/////////////////////////////////////////////////////////////////////
EXEC: INC B ;R03
EXEC: LD (CMDLINE),HL
INC B ;R03
DEC B ;R03
JR Z,.VAR_1 ;R03
DEC B ;R03
@ -831,19 +832,19 @@ EXEC: INC B ;R03
SCF ;R03
RET ;R03
;
.VAR_1: LD (CMDLINE),HL
.VAR_1: ;LD (CMDLINE),HL
CALL CHECKPATH ;CHECK FOR '\' - SHORT/FULL NAME
LD HL,(CMDLINE)
;LD HL,(CMDLINE)
JR C,EXEC0_SHORT
.VAR_2: CALL EXEC_1
SCF
RET ; File not found - exit
; ¯à¨ ¢ë室¥ á ®è¨¡ª®©, ¢ ॣ¨áâॠ€ - ª®¤ ®è¨¡ª¨
EXEC_1: LD (CMDLINE),HL
LD A,#01 ; %7600000R = !FAT_ATTR ;!HARDCODE
LD (F_FIRST.ACCESS),A
EXEC_1: ;LD (CMDLINE),HL
LD HL,(CMDLINE)
LD A,FAT_ATTR.READ_ONLY
LD (OPEN.TMP),A
CALL GETWORD
RET C
LD HL,TMPNAME
@ -853,16 +854,22 @@ EXEC_1: LD (CMDLINE),HL
CALL TST_EXT
LD A,DSS_Error.sys.FILE_NOT_FOUND
RET C
_mINCTASK ;R08
_mINCTASK ;R08
CALL OPEN.FILE
JR NC,.noError
_mDECTASK ;R08
AND A
RET
;
.noError:
JR C,.Error
POP HL ; 㡨ࠥ¬ «¨è­¨©  ¤à¥á_¢®§¢à â _¢_¢ë§¢ ¢èãî_¯à®æ¥¤ãàã
JP EXEC02 ;R07 CONTINUE EXECUTING PROGRAM
.Error: _mDECTASK ;R08
AND A
RET
; JR NC,.noError
; _mDECTASK ;R08
; AND A
; RET
; ;
; .noError:
; POP HL ; 㡨ࠥ¬ «¨è­¨©  ¤à¥á_¢®§¢à â _¢_¢ë§¢ ¢èãî_¯à®æ¥¤ãàã
; JP EXEC02 ;R07 CONTINUE EXECUTING PROGRAM
;SHORT NAME
@ -871,7 +878,7 @@ EXEC0_SHORT:
CALL EXEC_1
RET C
;FILE NO FOUND, SEARCHING IN PATH
;FILE NOT FOUND, SEARCHING IN PATH
; GET PATH AND ETC.
LD HL,ENVPATH
LD DE,ENVTEMP
@ -960,8 +967,10 @@ _RET_1: LD DE,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR) ; ¡ãä¥à
LD A,(EXE_FM) ; ¤¥áªà. ä ©« 
CALL READ ; ç⥭¨¥ ¨§ ä ©« 
LD A,(EXE_FM) ; ¤¥áªà. ä ©« 
CALL CLOSE ; § ªàëâì ä ©«
;!TEST ;[x] no close source EXE file before start 08/11/23
; LD A,(EXE_FM) ; ¤¥áªà. ä ©« 
; CALL CLOSE ; § ªàëâì ä ©«
;
JP _TST_PROC_2
RETFAR: LD B,DSS_Error.sys.UNEXPECTED_APP_TRMN
@ -997,7 +1006,7 @@ ERREXE0: LD A,DSS_Error.sys.NOT_ENOUGH_MEMORY
ERREXE: PUSH AF
LD A,(EXE_FM)
CALL CLOSE
_mDECTASK
_mDECTASK
POP AF
RET
@ -1111,7 +1120,7 @@ FRC000: LD A,(DE)
LD HL,(CORE_BUFFERS.EXEBUFF.OFFCOD2)
LD IX,(CORE_BUFFERS.EXEBUFF.OFFCOD1)
LD B,Dss.Move_FP.FrStart
LD B,high Dss.Move_FP.FrStart
LD A,(EXE_FM)
CALL MOVE_FP
;R02
@ -1162,8 +1171,9 @@ LEAVE: LD A,B
LD SP,(EXSTACK)
;[x] 25/10/23 close EXE FM
POP AF
CALL RES_FM
_mDECTASK
;CALL RES_FM
CALL CLOSE
_mDECTASK
;
POP AF
POP HL
@ -1198,9 +1208,7 @@ WAIT: LD A,(ERLEVEL)
RET
;/////////////////////////////////////////////////////////////////////
;!TODO § ¬¥­¨âì âãâ CALL CURRDIR ¨ CALL CURRDSK ­  ¤à㣮¥, ª®£¤  ¡ã¤¥â á®åà ­ïâìáï current dir
;
M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
DEC H
LD D,H

View File

@ -21,28 +21,37 @@ RESERVED2 BLOCK 490,0
;
;File Manipulator (FM)
STRUCT _sFM ; 44 bytes
STRUCT _sFM ; 47 bytes
; from FAT
.NAME: TEXT 8,{". "," "} ;+00 NAME
.EXT: TEXT 3,{" "," "} ;+08 EXT
.ATTRIBUT: BYTE #10 ;+11 ATTRIBUT
.KnownCluster_L: BYTE 0 ;+12 Œ« ¤è¨© ¡ ©â ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩« 
.KnownCluster_H: BYTE 0 ;+13 ‘â à訩 ¡ ©â ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩« 
.KnownOffset_L: BYTE 0 ;+14 Œ« ¤è¨© ¡ ©â ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
.KnownOffset_H: BYTE 0 ;+15 ‘â à訩 ¡ ©â ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
.RESERVED_X: BLOCK 6,0 ;+16 RESERVED
.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 #0000 ;+28 SIZE FILE
.F_POSITION: DWORD #0000 ;+32 FILE POSITION (FP)
.F_SIZE: DWORD #00000000 ;+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
;.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 ‘â à訩 ¡ ©â ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
ENDS
;
;
; NAM EQU 0 ; LEN4 EQU 31
; EXT EQU 8 ; POS1 EQU 32
; ATR EQU 11 ; POS2 EQU 33

View File

@ -1 +1 @@
522
537

View File

@ -1 +1 @@
94
96

@ -1 +1 @@
Subproject commit 4c835d305fd5d1bc296039706d5e163c1f2224ca
Subproject commit 8641b77d8ebe42ae042bb8df3902300e678048eb