Preparing for FAT32

This commit is contained in:
Anatoliy Belyanskiy 2024-03-12 03:50:25 +10:00
parent ac928f6fc0
commit 0312779217
32 changed files with 1088 additions and 817 deletions

View File

@ -348,26 +348,26 @@ NX2: LD HL,(BOOT+510)
SCF
RET NZ
LD IY,BOOT ;Analysing Block Parametr BIOS
LD A,(IY+_sBOOT_SEC.ID_FORM)
LD A,(IY+_sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
CP #F0
RET C
LD HL,0 ;calc. first sector FAT
LD (DIR_FRH),HL
LD E,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
LD D,(IY+_sBOOT_SEC.RESERVE+1)
LD E,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS) ;Reserve sec
LD D,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS+1)
ADD HL,DE
LD (FAT_FRM),HL ;first sector FAT
LD E,(IY+_sBOOT_SEC.S_P_F) ;sectors in FAT
LD D,(IY+_sBOOT_SEC.S_P_F+1)
LD E,(IY+_sBOOT_SECTOR_PARAMS.S_P_F) ;sectors in FAT
LD D,(IY+_sBOOT_SECTOR_PARAMS.S_P_F+1)
LD A,(BOOT.FAT_NUM) ;amount FATs
C_DATA1: ADD HL,DE
DEC A
JR NZ,C_DATA1
LD (DIR_FRM),HL ;first sector DIR
EX DE,HL
LD L,(IY+_sBOOT_SEC.F_P_DIR) ;Number file handel
LD H,(IY+_sBOOT_SEC.F_P_DIR+1)
LD L,(IY+_sBOOT_SECTOR_PARAMS.F_P_DIR) ;Number file handel
LD H,(IY+_sBOOT_SECTOR_PARAMS.F_P_DIR+1)
ADD HL,HL
ADD HL,HL
ADD HL,HL
@ -381,8 +381,8 @@ C_DATA1: ADD HL,DE
ADD HL,DE
LD (DAT_FRM),HL ;First sector data
LD C,(IY+_sBOOT_SEC.B_P_S) ;Size sector
LD B,(IY+_sBOOT_SEC.B_P_S+1)
LD C,(IY+_sBOOT_SECTOR_PARAMS.B_P_S) ;Size sector
LD B,(IY+_sBOOT_SECTOR_PARAMS.B_P_S+1)
LD HL,0
LD A,(BOOT.S_P_C)
NEXTAD3:
@ -437,7 +437,7 @@ BPB_FAT
XOR A
RET
IBMDOS_ LD A,(IY+_sBOOT_SEC.ID_FORM)
IBMDOS_ LD A,(IY+_sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
CP #F0
RET C
CP #F8
@ -724,7 +724,7 @@ MASKARE DB "SYSTEM DOS"
FATMSG DB "FAT"
; Area for boot sector [512Bytes]
BOOT _sBOOT_SEC = $
BOOT _sBOOT_SECTOR_PARAMS = $
; BOOT EQU $
; ID_NAME EQU BOOT+#03 ; +03 DOS NAME

View File

@ -357,7 +357,7 @@ write_to_: ld a,(disk) ;
LD BC,1*256 + BIOS.DRV_READ
RST ToBIOS
POP BC
LD HL,(buffer + _sBOOT_SEC.RESERVE)
LD HL,(buffer + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS)
LD DE,04 ;!HARDCODE ¬¨­¨¬ «ì­®¥ à ááâ®ï­¨¥ ­  ¤à ©¢¥ ®â ­ã«¥¢®£® ᥪâ®à  ¤® ä â  (¤«¨­  § £àã§ç¨ª  + 1)
AND A
SBC HL,DE

View File

@ -31,7 +31,7 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
CALL .OPENATR ;R002
RET C
;!TEST ;[x] 16/11/23 optimize get attribute
LD A,(HANDBUF+_sFM.ATTRIBUT)
LD A,(HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT)
;LD B,(IY+_sFM.ATTRIBUT)
;PUSH BC
;CALL CLOSE
@ -56,7 +56,7 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
RET C
SET 7,(IY+_sFM.ACCESS_MODE)
RES 3,B ;CLEAR LABEL ATTR ;R003 ;!HARDCODE attribute bit
LD (IY+_sFM.ATTRIBUT),B
LD (IY+_sFM.FS_REC.ATTRIBUT),B
PUSH BC
CALL CLOSE_FN
.error: POP BC

View File

@ -31,8 +31,8 @@ CLOSE_FN:
LD (IY+_sFM.DIR_CLUSTER),E
LD (IY+_sFM.DIR_CLUSTER+1),D
; [x] 15/11/2023 -bug with bad clusters ;!TEST
LD (IY+_sFM.ST_CLUSTER),E
LD (IY+_sFM.ST_CLUSTER+1),D
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),E
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),D
;
CALL LOADDIR
.TMP+1: LD A,0

View File

@ -13,13 +13,22 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
POP BC
POP HL
RET C
LD A,C
LD A,C ;
;
CALL .Prepare
RET C
CALL SEARCH.File
CALL NC,DEL_FN.DELETE ;FILE EXIST RECREAT
JR .DO
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
;CALL NC,DEL_FN.DELETE ;FILE EXIST RECREAT
CALL NC,.FILE_EXISTS_DEL ;FILE EXIST RECREAT
CP DSS_Error.sys.FILE_NOT_FOUND
JR Z,.DO
SCF
RET
.FILE_EXISTS_DEL:
CALL DEL_FN.DELETE
LD A,DSS_Error.sys.FILE_NOT_FOUND
RET
;
.NEW_FN:
AND FAT_ATTR.NoVolID ; [x] 2/12/23 ˘ŕĽŹĽ­­ëŠ ä¨Şá ¤Ťď volume ID
@ -36,10 +45,17 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
CALL .Prepare
RET C
CALL SEARCH.File
LD A,DSS_Error.sys.FILE_EXISTS
CCF
RET C
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
; LD A,DSS_Error.sys.FILE_EXISTS
; CCF
; RET C
JR NC,.FILE_EXISTS
CP DSS_Error.sys.FILE_NOT_FOUND
SCF
RET NZ
;
;
;no_file_found
.DO: LD HL,MASKARE
LD DE,HANDBUF
LD BC,11
@ -89,6 +105,12 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
; LD HL,TMPNAME
; LD DE,MASKARE
JP MASK
;
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
.FILE_EXISTS:
LD A,DSS_Error.sys.FILE_EXISTS
CCF
RET
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
; OUTPUT: A - FM
CREAT_N EQU CREATE.NEW_FN

View File

@ -26,26 +26,27 @@ DEL_FN: ;!TEST
CALL LOADDIR
CALL SEARCH.File
RET C
;JP .DELETE
; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥­­ ï"
.DELETE: SET_PAGE_X DIRPAGE
LD (IX+_sFM.NAME),#E5 ; ¯à¨§­ ª 㤠«¥­¨ï ä ©« 
LD E,(IX+_sFM.ST_CLUSTER) ; ü ¯¥à¢®£® ª« áâ¥à 
LD D,(IX+_sFM.ST_CLUSTER+1)
.DELETE:
SET_PAGE_X DIRPAGE
LD (IX + _sFAT_DIRECTORY_RECORD.NAME),#E5 ; ¯à¨§­ ª 㤠«¥­¨ï ä ©« 
; [ ] fat32
LD E,(IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; ü ¯¥à¢®£® ª« áâ¥à 
LD D,(IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
;
OUT (SLOT3),A
LD A,E
OR D
JP Z,SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
.loop: EX DE,HL ; hl=­®¬¥à ª« áâ¥à 
CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
PUSH DE ; ­®¬¥à á«¥¤. ª« áâ¥à 
PUSH AF
LD DE,#0000 ; ­®¬¥à ª« áâ¥à 
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
POP AF
POP DE
JP NC,.loop
CALL WR_FAT ;!FIXIT ¬®¦¥â ­¥ ­ã¦­  âãâ? ’ ¬ ¤ «ìè¥ ¡ã¤¥â
CALL WRITE_FAT_TABLE ;!FIXIT ¬®¦¥â ­¥ ­ã¦­  âãâ? ’ ¬ ¤ «ìè¥ ¡ã¤¥â
JP SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
;

View File

@ -14,11 +14,11 @@ GET_D_T:
CALL SET_FM
RET C
; ¢à¥¬ï/¤ âã ¨§ áâàãªâãàë ¤¥áªà.
LD E,(IY+_sFM.TIME) ; ¢à¥¬ï
LD D,(IY+_sFM.TIME+1) ;
LD C,(IY+_sFM.DATE) ; ¤ â 
LD B,(IY+_sFM.DATE+1) ;
CALL RMKTIME ; à áª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
LD E,(IY+_sFM.FS_REC.TIME) ; ¢à¥¬ï
LD D,(IY+_sFM.FS_REC.TIME+1) ;
LD C,(IY+_sFM.FS_REC.DATE) ; ¤ â 
LD B,(IY+_sFM.FS_REC.DATE+1) ;
CALL RMKTIME ; à áª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
AND A
RET
;

View File

@ -6,6 +6,13 @@
;
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
////////////////////////////////////////////////////////////////////////
;error
MKDIR.DIR_EXISTS:
LD A,DSS_Error.sys.DIR_EXISTS
CCF
RET
MKDIR: ;!TEST Current Dir ;[x] 15/10/23
PUSH HL
CALL DIR_PATH_CHECK
@ -28,16 +35,22 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
;CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£ 
;
CALL SEARCH.Dir ; ¯®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ¤¨áª 
LD A,DSS_Error.sys.DIR_EXISTS
CCF
RET C ; ª â «®£ ­ ©¤¥­
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
; LD A,DSS_Error.sys.DIR_EXISTS
; CCF
; RET C ; ª â «®£ ­ ©¤¥­
JR NC,.DIR_EXISTS
CP DSS_Error.sys.FILE_NOT_FOUND
SCF
RET NZ
;
CALL G_CLUST
RET C
PUSH HL
LD DE,(FatBuffer.ENDCLUS) ; ­®¬¥à ª« áâ¥à 
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
CALL WR_FAT ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
; [ ] fat32
LD DE,(FatBuffer.ENDCLUS_LOW) ; ­®¬¥à ª« áâ¥à 
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
LD HL,MASKARE
LD DE,HANDBUF
LD BC,11
@ -80,7 +93,7 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
LD HL,CORE_BUFFERS.SECBUF ; ¡ãä¥à
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£ 
LD BC,10*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
LD BC,10*256 + ' ' ; !HARDCODE b=áç¥â稪, c=¯à®¡¥«
;
.loop3: INC HL
LD (HL),C
@ -110,11 +123,12 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
JP Z,.MKD04
LD IX,HANDBUF
XOR A
LD (IX+_sFM.ST_CLUSTER),A
LD (IX+_sFM.ST_CLUSTER+1),A
LD DE,HANDBUF+11 ; ï祩ª   âਡã⮢ ä ©« 
; [ ] fat32
LD (IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),A
LD (IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1),A
LD DE,HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª   âਡã⮢ ä ©« 
.MKD04: EX DE,HL
LD BC,HANDBUF.SIZE-11
LD BC,HANDBUF.SIZE - _sFAT_DIRECTORY_RECORD.ATTRIBUT
LDIR
POP AF
OUT (SLOT3),A

View File

@ -6,6 +6,8 @@
; A=0 ç⥭¨¥/§ ¯¨áì
; A=1 ç⥭¨¥
; A=2 § ¯¨áì
; ;!TODO A=3 § ¯¨áì ¡¥§ «¨è­¨å á®åà ­¥­¨© ªíè  FAT
; ;!TODO A=4 § ¯¨á âì ªíè FAT
; ¢ë室: CF=0, A - ¤¥áªà¨¯â®à ä ©« .
; CF=1, A - ª®¤ ®è¨¡ª¨.
////////////////////////////////////////////////////////////////////////
@ -18,23 +20,26 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
;JR .start
;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir?
;R008 ;
;OPEN: ;
;LD (.TMP),A ; enter point from CREATE
.start: CALL GETWORD
RET C
CALL MASK ; enter point from OPEN_FN
CALL MASK
RET C
.FILE: CALL SEARCH.File ; enter point from EXEC
.FILE: CALL SEARCH.File ; enter point from EXEC, CREATE
RET C
;!TEST 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS
PUSH DE ; á®å࠭塞 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS (¯®«ã祭 ¨§ SEARCH)
;R002 ;
.FM: CALL GET_FM ; enter point from ATTRIB
RET C
LD A,C
EX AF,AF'
EXX
LD (IY+_sFM.HANDLE),E
LD (IY+_sFM.HANDLE+1),D
EXX
;!TEST 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS
POP DE
; EXX
LD (IY+_sFM.HANDLE),E
LD (IY+_sFM.HANDLE+1),D
; EXX
;
LD D,YH
LD E,YL
LD HL,HANDBUF
@ -45,11 +50,11 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
LD A,(TASK)
LD (IY+_sFM.TASK_NUM),A
XOR A
;
; [ ] fat32
LD (IY+_sFM.KnownCluster_L),A
LD (IY+_sFM.KnownCluster_H),A
LD (IY+_sFM.KnownCluster_L+1),A
LD (IY+_sFM.KnownOffset_L),A
LD (IY+_sFM.KnownOffset_H),A
LD (IY+_sFM.KnownOffset_L+1),A
;
LD (IY+_sFM.F_POSITION),A
LD (IY+_sFM.F_POSITION+1),A
@ -57,10 +62,12 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
LD (IY+_sFM.F_POSITION+3),A
LD A,(FatBuffer.DRIVE)
LD (IY+_sFM.DRIVE),A
LD HL,CORE_BUFFERS.FM_BUF+_sFM.ST_CLUSTER
; [ ] fat32
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_L
LD E,(HL)
INC HL
LD D,(HL)
; [ ] fat32
LD (IY+_sFM.DIR_CLUSTER),E
LD (IY+_sFM.DIR_CLUSTER+1),D
EX AF,AF'

View File

@ -16,19 +16,7 @@ READ: LD (.R_POINT),HL
CALL OPENDSK
JP C,.ERR_1
;<3B> áçñâ ᬥ饭¨ï ¢ ᥪâ®à å
; LD C,(IY+_sFM.F_POSITION)
; LD E,(IY+_sFM.F_POSITION+1)
; LD A,E
; AND #01
; LD B,A
; LD D,(IY+_sFM.F_POSITION+2)
; LD L,(IY+_sFM.F_POSITION+3)
; LD H,0
; OR A
; RR L
; RR D
; RR E
LD H,0 ;
LD H,0 ;!HARDCODE max file size = 8 gb
LD L,(IY+_sFM.F_POSITION+3)
LD D,(IY+_sFM.F_POSITION+2)
LD E,(IY+_sFM.F_POSITION+1)
@ -43,7 +31,6 @@ READ: LD (.R_POINT),HL
;HL:DE FP (in sectors)
;BC FP residue (in bytes)
;
;LD A,B
OR C
JP NZ,.ROV1
.ROV4: POP BC
@ -53,7 +40,7 @@ READ: LD (.R_POINT),HL
LD (.SECTORH),HL
LD (.SECTORL),DE
.R_POINT+2: LD IX,0
CALL BLOK_RD
CALL BLOCK_READ
JP C,.ERR_1
LD DE,(.R_POINT)
.PointerOnBuffer+1:
@ -84,7 +71,7 @@ READ: LD (.R_POINT),HL
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_RD
CALL BLOCK_READ
POP BC
LD C,SLOT3
OUT (C),B
@ -109,7 +96,8 @@ READ: LD (.R_POINT),HL
.NOREAD:
.COD+1: LD A,0
OR A
RET
RET
;
.ROV1: PUSH BC
PUSH HL
PUSH DE
@ -119,39 +107,41 @@ READ: LD (.R_POINT),HL
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_RD
CALL BLOCK_READ
POP BC
LD C,SLOT3
OUT (C),B
POP HL
JP C,.ERR_3
; inc HL:DE
LD BC,1
ADD HL,BC
EX DE,HL
POP HL
LD C,B
ADC HL,BC
;
EXX
POP DE
LD HL,512 ;!HARDCODE
AND A
SBC HL,DE
LD B,H
LD C,L
POP HL
AND A
SBC HL,BC
JR NC,.ROV3
ADD HL,BC
LD B,H
LD C,L
LD HL,0 ;!TODO ¬®¦­® âãâ ã¯à®áâ¨âì ¤ «ì­¥©èãî ¢¥âªã?
.ROV3: PUSH HL
LD HL,CORE_BUFFERS.BUFFER
ADD HL,DE
LD DE,(.R_POINT)
LDIR
LD (.R_POINT),DE
POP DE
LD HL,512 ;!HARDCODE sector size!
AND A
SBC HL,DE
LD B,H
LD C,L
POP HL
AND A
SBC HL,BC
JR NC,.ROV3
ADD HL,BC
LD B,H
LD C,L
LD HL,0 ;!TODO ¬®¦­® âãâ ã¯à®áâ¨âì ¤ «ì­¥©èãî ¢¥âªã?
.ROV3: PUSH HL
LD HL,CORE_BUFFERS.BUFFER
ADD HL,DE
LD DE,(.R_POINT)
LDIR
LD (.R_POINT),DE
EXX
JP .ROV4
.ERR_3: POP HL
@ -170,24 +160,24 @@ TSTSIZE:
ADD HL,DE
;
EXX
;LD DE,0 ;!TEST
LD L,(IY+_sFM.F_POSITION+2) ;FP HIGH
LD H,(IY+_sFM.F_POSITION+3)
;!TEST
JR NC,.no_inc_hl
INC HL
;ADC HL,DE
;
;LD DE,0 ;!TEST
LD L,(IY+_sFM.F_POSITION+2) ;FP HIGH
LD H,(IY+_sFM.F_POSITION+3)
;!TEST
JR NC,.no_inc_hl
INC HL
;ADC HL,DE
;
.no_inc_hl:
EXX ;HL':HL - NEW FP
;
LD C,(IY+_sFM.F_SIZE)
LD B,(IY+_sFM.F_SIZE+1) ;SIZE LOW
LD C,(IY+_sFM.FS_REC.F_SIZE)
LD B,(IY+_sFM.FS_REC.F_SIZE+1) ;SIZE LOW
AND A
SBC HL,BC
EXX
LD C,(IY+_sFM.F_SIZE+2) ;SIZE HIGH
LD B,(IY+_sFM.F_SIZE+3)
LD C,(IY+_sFM.FS_REC.F_SIZE+2) ;SIZE HIGH
LD B,(IY+_sFM.FS_REC.F_SIZE+3)
SBC HL,BC
EXX
RET C ;OK READ ALL

View File

@ -37,68 +37,76 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
CALL LOADDIR
CALL SEARCH.Dir
RET C
LD HL,(HANDBUF+_sFM.ST_CLUSTER)
; [ ] fat32
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
PUSH IX
.RMD17: PUSH HL
CALL NSECTOR
LD A,(CORE_BUFFERS.BootSector.S_P_C)
.RMD12: PUSH AF
; ­ ç¨­ ¥¬ ¢ëç¨â뢠âì ᮤ¥à¦¨¬®¥ ª â «®£  ¯®á¥ªâ®à­®
.read_dir_loop:
PUSH AF
PUSH HL
PUSH IX
;
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
LD DE,CORE_BUFFERS.SECBUF+#C000
LD BC,1*256 + Dss.DRV.Read
LD A,(FatBuffer.DRIVE)
RST ToDSS.DRV
POP AF
OUT (SLOT3),A
LD B,16 ;!HARDCODE 16 * 32 = 512; 32 - à §¬¥à § ¯¨á¨, 512 - à §¬¥à áç¨â ­­®£® ᥪâ®à 
;
;!HARDCODE 16 * 32 = 512; 32 - à §¬¥à § ¯¨á¨, 512 - à §¬¥à áç¨â ­­®£® ᥪâ®à 
LD B,16
LD HL,CORE_BUFFERS.SECBUF
.RMD10: LD A,(HL)
.check_dir_loop:
LD A,(HL)
OR A
JP Z,.RMD15 ;DIR EMPTY
JP Z,.RMD15 ;DIR EMPTY
CP "."
JR Z,.RMD14
CP #E5 ;!HARDCODE ¡ ©â 㤠«¥­¨ï ä ©« 
JR Z,.RMD14
LD DE,11 ;!HARDCODE ᬥé. ¤® ¡ ©â   âਡã⮢
JR Z,.next_record
CP #E5 ;!HARDCODE ¡ ©â 㤠«¥­¨ï ä ©« 
JR Z,.next_record
LD DE,_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ᬥé. ¤® ¡ ©â   âਡã⮢
ADD HL,DE
LD A,(HL)
SBC HL,DE
;BIT 3,A
AND %0000'1000
AND FAT_ATTR.VOLUME_ID
JP Z,.error ;DIR NOT EMPTY
.RMD14: LD DE,#0020
.next_record:
LD DE,#0020
ADD HL,DE
DJNZ .RMD10
DJNZ .check_dir_loop
;
POP IX
POP HL
INC IX
LD A,XH
OR XL
JR NZ,.RMD11
JR NZ,.no_inc_hl
INC HL
.RMD11: POP AF
.no_inc_hl:
POP AF
DEC A
JR NZ,.RMD12
JR NZ,.read_dir_loop
;
POP HL ; ­®¬¥à ª« áâ¥à 
CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
EX DE,HL ; hl=­®¬¥à á«¥¤. ª« áâ¥à 
JR NC,.RMD17 ; ­¥ ª®­¥æ 楯®çª¨
.RMD18: POP IX
.delete:
POP IX
JP DEL_FN.DELETE ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥­­ ï"
.RMD15: POP IX
POP HL
POP AF
POP HL
JR .RMD18
JR .delete
;
.error: POP IX
POP HL
POP AF

View File

@ -25,6 +25,12 @@ SCANDRV:
LD A,Dss.DRV.RescanDRV
LD C,Dss.DRV.RescanDRV
RST ToDSS.DRV
; 能恥丞<E681A5> <20> 株芋芥 boot disk lost
LD HL,.BOOT_DSK_LOST
LD E, +(80-.BOOT_DSK_LOST.size)/2 ; coord X
LD BC,.BOOT_DSK_LOST.size
JP C,KERNEL_PANIC
;
LD (LDRIVE),A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 4. ­  ¢á直© á«ãç © ¯¥à¥ç¨â뢠¥¬ ¤¨à४â®à¨î
@ -47,6 +53,10 @@ SCANDRV:
RET PO
EI
RET
;
.BOOT_DSK_LOST:
DZ "Boot drive lost o_O"
.BOOT_DSK_LOST.size EQU $-.BOOT_DSK_LOST
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
;///////////////////////////////////////////////////////////////////////
;

View File

@ -20,11 +20,11 @@ PUT_D_T:
POP BC
POP DE
RET C
LD (IY+_sFM.TIME),E
LD (IY+_sFM.TIME+1),D
LD (IY+_sFM.DATE),C
LD (IY+_sFM.DATE+1),B
SET 7,(IY+_sFM.ACCESS_MODE) ;R006 ; ãáâ. ¯à¨§­ ª ¨§¬¥­¥­¨ï ä ©« 
LD (IY + _sFM.FS_REC.TIME),E
LD (IY + _sFM.FS_REC.TIME+1),D
LD (IY + _sFM.FS_REC.DATE),C
LD (IY + _sFM.FS_REC.DATE+1),B
SET 7,(IY + _sFM.ACCESS_MODE) ;R006 ; ãáâ. ¯à¨§­ ª ¨§¬¥­¥­¨ï ä ©« 
AND A
RET
;

View File

@ -15,12 +15,12 @@ WRITE.RD_ONLY:
; HL - ADDRESS
; DE - SIZE
; A - FM
WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] ¨§¡ëâ®ç­ë¥ ¢ë§®¢ë WR_FAT
WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] ¨§¡ëâ®ç­ë¥ ¢ë§®¢ë WRITE_FAT_TABLE
CALL .Start
PUSH AF
LD A,(FatCache.Update)
OR A
CALL NZ,WR_FAT ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
CALL NZ,WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
POP AF
RET
;
@ -32,9 +32,9 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
LD A,(IY+_sFM.ACCESS_MODE)
AND FAT_ATTR.READ_ONLY
JR NZ,.RD_ONLY
SET 7,(IY+_sFM.ACCESS_MODE)
SET 5,(IY+_sFM.ATTRIBUT)
LD A,(IY+_sFM.DRIVE)
SET 7,(IY + _sFM.ACCESS_MODE)
SET 5,(IY + _sFM.FS_REC.ATTRIBUT)
LD A,(IY + _sFM.DRIVE)
CALL OPENDSK
JR C,.ERR1
;
@ -96,7 +96,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_RD
CALL BLOCK_READ
POP BC
LD C,SLOT3
OUT (C),B
@ -134,14 +134,14 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
POP DE
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
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.FS_REC.F_SIZE+0),L
LD (IY + _sFM.FS_REC.F_SIZE+1),H
LD (IY + _sFM.FS_REC.F_SIZE+2),C
LD (IY + _sFM.FS_REC.F_SIZE+3),B
AND A
RET
;
@ -154,35 +154,35 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
CALL BLOK_RD
CALL BLOCK_READ
POP BC
LD C,SLOT3
OUT (C),B
POP DE
POP HL
EXX
POP DE
JP C,.ERR1
LD HL,512 ;!HARDCODE
AND A
SBC HL,DE
LD B,H
LD C,L
POP HL
AND A
SBC HL,BC
JR NC,.WOV3
ADD HL,BC
LD B,H
LD C,L
LD HL,0
.WOV3: PUSH HL
LD HL,CORE_BUFFERS.BUFFER
ADD HL,DE
LD DE,(.R_POINT)
EX DE,HL
LDIR
LD (.R_POINT),HL
POP DE
JP C,.ERR1
LD HL,512 ;!HARDCODE sector size!
AND A
SBC HL,DE
LD B,H
LD C,L
POP HL
AND A
SBC HL,BC
JR NC,.WOV3
ADD HL,BC
LD B,H
LD C,L
LD HL,0
.WOV3: PUSH HL
LD HL,CORE_BUFFERS.BUFFER
ADD HL,DE
LD DE,(.R_POINT)
EX DE,HL
LDIR
LD (.R_POINT),HL
EXX
PUSH HL
PUSH DE

View File

@ -57,15 +57,15 @@ DISKINF:; [ ] 22/11/23
;
EX DE,HL
LD HL,CORE_BUFFERS.BootSector.ID_FAT
LD A,8 ;!HARDCODE _sBOOT_SEC.ID_FAT.length
LD A,8 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length
CALL .mCOPY_LOOP
;
LD HL,CORE_BUFFERS.BootSector.BPB_SERIAL_NUMBER
LD A,4 ;!HARDCODE _sBOOT_SEC.BPB_SERIAL_NUMBER
LD A,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER
CALL .mCOPY_LOOP
;
LD HL,CORE_BUFFERS.BootSector.BPB_LABEL
LD A,11 ;!HARDCODE _sBOOT_SEC.BPB_LABEL
LD A,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL
CALL .mCOPY_LOOP
;
PUSH DE
@ -113,16 +113,14 @@ DISKINF:; [ ] 22/11/23
RET C
;
.CheckFreeSpace:
;
XOR A
OR B
CALL NZ,.CURRDS
;
;
.FRESP2:
;.FRESP2:
LD D,B
LD E,C
LD HL,(FAT_Max_Cluster)
LD HL,(FAT_Max_Cluster_L)
DEC HL
LD BC,(CORE_BUFFERS.BootSector.B_P_S)
LD A,(CORE_BUFFERS.BootSector.S_P_C)
@ -133,7 +131,7 @@ DISKINF:; [ ] 22/11/23
LD HL,2
LD BC,0
.FRESP: PUSH BC
CALL R_F_FAT
CALL READ_FROM_FAT
POP BC
CP DSS_Error.sys.DISK_FULL
RET Z

View File

@ -43,7 +43,7 @@ FM_BUF: _sFM
; ­  ¢ë室¥ ¡¥§ ®è¨¡®ª IY 㪠§ë¢ ¥â ­  ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
MACRO _mFM_FIND
CP FMCOUNT
CP FMCOUNT+1
JR NC,ABS_FM
PUSH DE
@ -75,7 +75,7 @@ RES_FM: _mFM_FIND
SCF
RET Z
XOR A
LD (IY+0),A
LD (IY + _sFM.FS_REC.NAME),A
RET
;
GET_FM: LD B,FMCOUNT
@ -84,7 +84,7 @@ GET_FM: LD B,FMCOUNT
LD DE,CORE_BUFFERS.FM_BUF.Size
.loop: ADD IY,DE
INC C
LD A,(IY+0)
LD A,(IY + _sFM.FS_REC.NAME)
OR A
RET Z
DJNZ .loop
@ -138,10 +138,10 @@ MOVE_FP:
LD E,B
JP .DO
;from End File
.B_end: LD C,(IY+_sFM.F_SIZE)
LD B,(IY+_sFM.F_SIZE+1)
LD E,(IY+_sFM.F_SIZE+2)
LD D,(IY+_sFM.F_SIZE+3)
.B_end: LD C,(IY + _sFM.FS_REC.F_SIZE)
LD B,(IY + _sFM.FS_REC.F_SIZE+1)
LD E,(IY + _sFM.FS_REC.F_SIZE+2)
LD D,(IY + _sFM.FS_REC.F_SIZE+3)
JP .DO
;from Current Position
.F_current:
@ -164,16 +164,16 @@ MOVE_FP:
; CY - FILE POINTER > SIZE
; NC - FILE POINTER < SIZE
MOVE_CP:
LD L,(IY+_sFM.F_SIZE)
LD H,(IY+_sFM.F_SIZE+1)
LD E,(IY+_sFM.F_POSITION)
LD D,(IY+_sFM.F_POSITION+1)
LD L,(IY + _sFM.FS_REC.F_SIZE)
LD H,(IY + _sFM.FS_REC.F_SIZE+1)
LD E,(IY + _sFM.F_POSITION)
LD D,(IY + _sFM.F_POSITION+1)
AND A
SBC HL,DE
LD L,(IY+_sFM.F_SIZE+2)
LD H,(IY+_sFM.F_SIZE+3)
LD E,(IY+_sFM.F_POSITION+2)
LD D,(IY+_sFM.F_POSITION+3)
LD L,(IY + _sFM.FS_REC.F_SIZE+2)
LD H,(IY + _sFM.FS_REC.F_SIZE+3)
LD E,(IY + _sFM.F_POSITION+2)
LD D,(IY + _sFM.F_POSITION+3)
SBC HL,DE
RET
;

View File

@ -216,24 +216,19 @@ OPENDSK:;!TEST DRV.Open
POP BC
JP C,.error
;[ ] 29/02/2024 fix "open drive error"
IF TEST_FEATURE
LD A,(FatBuffer.DRIVE)
LD D,A
PUSH DE
ENDIF
;
LD A,B
LD (FatBuffer.DRIVE),A
;
CALL RD_BPB
;[ ] 29/02/2024 fix "open drive error"
IF TEST_FEATURE
POP DE
LD A,D
JR C,.error_disk
ELSE
RET C
ENDIF
; RET C
;
.exit: LD A,(LDRIVE)
AND A
@ -244,19 +239,28 @@ OPENDSK:;!TEST DRV.Open
LD A,DSS_Error.sys.NOT_READY
RET
;[ ] 29/02/2024 fix "open drive error"
IF TEST_FEATURE
.error_disk:
CALL OPENDSK.force
LD A,(BOOTDSK.NUM)
CALL C,OPENDSK.force
; ¯à®¢¥àª  ­  ®è¨¡ªã
LD HL,.NOT_READY
LD E, +(80-.NOT_READY.size)/2 ; coord X
LD BC,.NOT_READY.size
JP C,KERNEL_PANIC
;
LD A,DSS_Error.sys.NOT_READY
SCF
RET
ENDIF
;
.NOT_READY: DZ "Boot drive not ready..."
.NOT_READY.size EQU $-.NOT_READY
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
OPENDIR:;!TEST ;[x] some optimize
OPENDIR:;[x] some optimizations
;XOR A
;CALL SET_FM
LD IY,CORE_BUFFERS.FM_BUF
@ -266,11 +270,12 @@ OPENDIR:;!TEST ;[x] some optimize
JR NZ,.SUBDIR
.REROOT1:
LD DE,0
;!TEST ;[x] some optimize
;LD (IY+_sFM.ST_CLUSTER),E
;LD (IY+_sFM.ST_CLUSTER+1),D
;[x] some optimizations
;LD (IY+_sFM.FIRST_CLUSTER_L),E
;LD (IY+_sFM.FIRST_CLUSTER_L+1),D
; [ ] fat32
EX DE,HL
LD (CORE_BUFFERS.FM_BUF + _sFM.ST_CLUSTER),HL
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL
EX DE,HL
;
CALL LOADDIR
@ -284,11 +289,12 @@ OPENDIR:;!TEST ;[x] some optimize
.SUBDIR:
CP "."
JR NZ,.SUBDIR2
;!TEST ;[x] some optimize
;LD A,(IY+_sFM.ST_CLUSTER) ;R005
LD A,(CORE_BUFFERS.FM_BUF + _sFM.ST_CLUSTER) ;R005
;!TEST ;[x] some optimizations
;LD A,(IY+_sFM.FIRST_CLUSTER_L) ;R005
; [ ] fat32
LD A,(CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L) ;R005
;
OR (IY+_sFM.ST_CLUSTER+1) ;R005
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1) ;R005
JR NZ,.SUDI1 ;R005
INC HL ;R005
LD A,(HL) ;R005
@ -314,16 +320,16 @@ OPENDIR:;!TEST ;[x] some optimize
.SUBDIR3:
CALL FINDDIR
RET C
;!TEST ;[x] some optimize
;LD (IY+_sFM.ST_CLUSTER),E
;LD (IY+_sFM.ST_CLUSTER+1),D
;!TEST ;[x] some optimizations
;LD (IY+_sFM.FIRST_CLUSTER_L),E
;LD (IY+_sFM.FIRST_CLUSTER_L+1),D
;LD DE,#4000 ;!HARDCODE
;LD (IY+_sFM.F_SIZE),E
;LD (IY+_sFM.F_SIZE+1),D
EX DE,HL
LD (CORE_BUFFERS.FM_BUF + _sFM.ST_CLUSTER),HL
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL ; [ ] fat32
LD HL,#4000 ;!HARDCODE
LD (CORE_BUFFERS.FM_BUF + _sFM.F_SIZE),HL
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.F_SIZE),HL
EX DE,HL
;
JP LOADDIR
@ -335,7 +341,6 @@ OPENDIR:;!TEST ;[x] some optimize
;----------------------------------------------------------------------;
; .custom:
; <20>८¡à §®¢ âì ¨¬ï 8.3 -> 11 ä®à¬ â
; ¢å®¤: hl = 8.3 ¨¬ï
; de = ¡ãä¥à ¨¬¥­¨ 11 ᨬ¢. ä®à¬ â 

View File

@ -232,33 +232,9 @@ PORTAL.out_MAIN: ;
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
;
/*
STRUCT _sBOOT_SEC
.JMP: BLOCK 3,0 ; +#00 "JMP"
.ID_NAME: TEXT 8,{"DSS_1.7","0"} ; +#03 DOS NAME - DB "DSS_1.70"
; Block Parameters BIOS
.B_P_S: WORD #200 ; +#0B BYTE PER SECTOR
.S_P_C: BYTE 2 ; +#0D SECTORS PER CLUSTER
.RESERVE: WORD 1 ; +#0E RESERVE SECTORS
.FAT_NUM: BYTE 2 ; +#10 AMOUNT FATS
.F_P_DIR: WORD 112 ; +#11 FILES IN DIRECTORY
.S_P_D: WORD 1440 ; +#13 ALL SECTORS ON DISK
.ID_FORM: BYTE #F0 ; +#15 ID FORMAT
.S_P_F: WORD 2 ; +#16 SIZE FAT IN SECTORS
.S_P_T: WORD 9 ; +#18 SECTOR PER TRACK
.HEADS: WORD 2 ; +#1A AMOUNT SIDES
.HIDDEN: DWORD 0 ; +#1C HIDDEN SECTORS
.BPB_BIG_TOTAL_SECTORS: DWORD 0 ; +#20 BIG TOTAL SECTOR
.BPB_PHISICAL_DRIVE_NUMBER: WORD #80 ; +#24 PHISICAL DRIVE NUMBER
.BPB_EXT_BOOT_RECORD_SIGNATURE: BYTE #29 ; +#26 EXTENDED BOOT RECORD SIGNATURE
.BPB_SERIAL_NUMBER: DWORD 0 ; +#27 VOLUME SERIAL NUMBER
.BPB_LABEL: TEXT 11,{"NO NAME"," "} ; +#2B DISK LABEL
.ID_FAT: TEXT 8,{"FAT16"," "} ; +#36 FILE SYSTEM ID ( BPB_FS_ID )
ENDS
*/
;R01
; Area for boot sector BootSector.
;BootSector _sBOOT_SEC ,{ "DSS_","0"+VERS,".",MODF/10+"0",MODF-(MODF/10)*10+"0" }
;BootSector _sBOOT_SECTOR_PARAMS ,{ "DSS_","0"+VERS,".",MODF/10+"0",MODF-(MODF/10)*10+"0" }
; end boot sector
;R01
@ -451,7 +427,7 @@ ADRST10: ;DS 512 ;,0
INCLUDE "EXECUTE.ASM"
INCLUDE "INTMOUSE.ASM"
INCLUDE "Procedures.asm"
INCLUDE "Kernel_Panic.asm"
;!FIXIT ª ¡ãä¥à ¬
; Œ áᨢ «®£. ­®¬¥à®¢ ¡ ­®ª à áè¨à¥­¨ï DSS
@ -486,15 +462,15 @@ WorkDirectory: DB '\'
CLEAR_ZONE.start EQU $
MODULE CORE_BUFFERS
BUFFERSplace _sBuffers=$
FM_BUF _sFM = BUFFERSplace.FileManipulator
.Size EQU _sFM
.FullSize EQU FMCOUNT*FM_BUF.Size
BootSector _sBOOT_SEC = BUFFERSplace.BootSector
EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header
XSTACK EQU BUFFERSplace.Stack.SPoint
BUFFER EQU BUFFERSplace.Buffer
SECBUF EQU BUFFER ;!TODO ®â¤¥«¨âì SECBUF ®â BUFFER
BUFFERSplace _sBuffers=$
FM_BUF _sFM = BUFFERSplace.FileManipulator
.Size EQU _sFM
.FullSize EQU FMCOUNT*FM_BUF.Size
BootSector _sBOOT_SECTOR_PARAMS = BUFFERSplace.BootSector
EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header
XSTACK EQU BUFFERSplace.Stack.SPoint
BUFFER EQU BUFFERSplace.Buffer
SECBUF EQU BUFFER ;!TODO ®â¤¥«¨âì SECBUF ®â BUFFER
ENDMODULE
CLEAR_ZONE.size EQU _sBuffers

View File

@ -151,20 +151,20 @@ PATH_PR EQU 2 ;%00000100
EXTN_PR EQU 1 ;%00000010
NAM_PR EQU 0 ;%00000001
EX_PATH: EXX
LD HL,NM_PATH_A ;BUILT-IN BUFFER FOR PATH ;!!!!! ¨á¯®«ì§ã¥âáï ®¡é¨© ¡ãä¥à
LD (NM_PATH),HL
LD HL,NM_NAME_A
LD (NM_NAME),HL
LD HL,NM_EXTN_A
LD (NM_EXTN),HL
LD HL,NM_DRIVE_A
LD (NM_DRIVE),HL
EX_PATH:
EXX
LD HL,NM_PATH_A ;BUILT-IN BUFFER FOR PATH ;!!!!! ¨á¯®«ì§ã¥âáï ®¡é¨© ¡ãä¥à
LD (NM_PATH),HL
LD HL,NM_NAME_A
LD (NM_NAME),HL
LD HL,NM_EXTN_A
LD (NM_EXTN),HL
LD HL,NM_DRIVE_A
LD (NM_DRIVE),HL
EXX
INC B
DEC B
;JR Z,EX_GET_ALL
JR Z,EX_FULL ;0 ; à §®¡à âì áâபã
JR Z,EX_FULL ;0 ; à §®¡à âì áâபã
DEC B
JR Z,EX_GET_DRIVE ;1 ; ¢ë¤¥«¨âì ¨¬ï ¤¨áª 
DEC B
@ -222,10 +222,6 @@ EX_GET_TYPE
LD (NM_EXTN),DE
JR EX_FULL
; <20> §®¡à âì áâபã
; EX_GET_ALL
; JR EX_FULL
; ‚뤥«¨âì ¤¨áª, ¯ãâì, ä ©« ¨ à áè.
EX_GET_ALL_EX:
EX DE,HL
@ -253,15 +249,15 @@ EX_GET_ALL_EX:
; <20> §®¡à âì áâபã
EX_FULL: EX AF,AF'
EXX
XOR A
LD HL,(NM_PATH)
LD (HL),A
LD HL,(NM_NAME) ;  ¤à¥á ¡ãä¥à  ¯®¤ ¨¬ï ä ©« 
LD (HL),A
LD HL,(NM_EXTN)
LD (HL),A
LD HL,(NM_DRIVE)
LD (HL),A
XOR A
LD HL,(NM_PATH)
LD (HL),A
LD HL,(NM_NAME) ;  ¤à¥á ¡ãä¥à  ¯®¤ ¨¬ï ä ©« 
LD (HL),A
LD HL,(NM_EXTN)
LD (HL),A
LD HL,(NM_DRIVE)
LD (HL),A
EXX
EX AF,AF'
EX_PAT0: LD DE,TMPBUF
@ -1070,21 +1066,21 @@ _TST_PROC:
JP C,ERREXE0
LD (EXE_MEM),A
EXX
POP DE ;á­¨¬ ¥¬ á® á⥪   ¤à¥á ¢®§¢à â 
LD HL,#0000
ADD HL,SP
LD SP,(EXSTACK)
PUSH HL
PUSH DE
IN A,(SLOT3)
LD D,A
IN A,(SLOT2)
LD E,A
IN A,(SLOT1)
PUSH DE
PUSH AF
LD (EXSTACK),SP
LD SP,HL
POP DE ;á­¨¬ ¥¬ á® á⥪   ¤à¥á ¢®§¢à â 
LD HL,#0000
ADD HL,SP
LD SP,(EXSTACK)
PUSH HL
PUSH DE
IN A,(SLOT3)
LD D,A
IN A,(SLOT2)
LD E,A
IN A,(SLOT1)
PUSH DE
PUSH AF
LD (EXSTACK),SP
LD SP,HL
EXX
; <20>Ž•<C5BD><EFBFBD>Ÿ…Ÿ DE ¯¥à¥¤ ¢ë§®¢®¬ BIOS,   ¡¨®á ¯®ª  ¥£® ¨ ­¥ ¯®àâ¨â
LD A,(EXE_MEM)

View File

@ -11,8 +11,8 @@
;----------------------------------------------------------------------;
; <20>®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ª â «®£ 
;
; ¢å®¤: a= âਡãâ § ¯¨á¨
; ¢ë室: de'=¨­¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£ 
; ¢å®¤: a =  âਡãâ § ¯¨á¨
; ¢ë室: de = ¨­¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£ 
; (HANDBUF) = file's direcory record
; CF - ª â «®£ ­¥ ­ ©¤¥­
SEARCH:
@ -63,21 +63,23 @@ SEARCH:
INC HL
INC DE
DJNZ .loop_compare
;
LD D,XH
LD E,XL
;[x] 9/11/23 ®¯â¨¬¨§ æ¨ï ¤«ï ¨­¤¥ªá  § ¯¨á¨ ¢ ᯨ᪥ ª â «®£  (¢®§¬®¦­® ¯®­ ¤®¡¨âáï ¢¥à­ãâì)
EXX
; LD D,XH
; LD E,XL
LD D,XH
LD E,XL
EXX
LD D,XH
LD E,XL
PUSH IX
EXX
;
LD HL,HANDBUF
EX DE,HL
LD BC,HANDBUF.SIZE
LDIR
;POP AF
;[x] 9/11/23 ®¯â¨¬¨§ æ¨ï ¤«ï ¨­¤¥ªá  § ¯¨á¨ ¢ ᯨ᪥ ª â «®£  (¢®§¬®¦­® ¯®­ ¤®¡¨âáï 㤠«¨âì)
POP DE
;
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
@ -174,13 +176,13 @@ FINDDIR:
PUSH AF
LD IX,DIRPAGE.buffer
.big_loop:
LD A,(IX+00)
LD A,(IX + _sFAT_DIRECTORY_RECORD.NAME)
OR A
JR Z,.error
CP #E5
JR Z,.next_step
LD A,(IX+11) ;!HARDCODE
AND #10 ;!HARDCODE
LD A,(IX + _sFAT_DIRECTORY_RECORD.ATTRIBUT)
AND FAT_ATTR.DIRECTORY
JR Z,.next_step
LD HL,MASKARE
LD D,XH
@ -197,10 +199,10 @@ FINDDIR:
INC DE
DJNZ .loop
;
LD A,(IX+0)
LD A,(IX + _sFAT_DIRECTORY_RECORD.NAME)
CP "."
JP NZ,.ADDSPEC
LD A,(IX+1) ;!HARDCODE
LD A,(IX + _sFAT_DIRECTORY_RECORD.NAME + 1)
CP "."
JP NZ,.IT_DIR
LD HL,WorkDirectory
@ -287,9 +289,9 @@ FINDDIR:
; .MM3: LD (HL),0
; ; JP IT_DIR
;
.IT_DIR:
LD E,(IX+_sFM.ST_CLUSTER)
LD D,(IX+_sFM.ST_CLUSTER+1)
.IT_DIR: ; [ ] fat32
LD E,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
LD D,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
POP AF
OUT (SLOT3),A
AND A
@ -331,25 +333,20 @@ 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 ; á®åà. ¢ ¤¥áªà¨¯â®à
;
;LD D,(IY+_sFM.ST_CLUSTER+1) ; de=­®¬¥à ¯¥à¢®£® ª« áâ¥à 
;LD E,(IY+_sFM.ST_CLUSTER)
;LD A,D
;OR E
; ­®¬¥à ¯¥à¢®£® ª« áâ¥à 
LD A,(IY+_sFM.ST_CLUSTER)
OR (IY+_sFM.ST_CLUSTER+1)
;
; ­®¬¥à ¯¥à¢®£® ª« áâ¥à 
; [ ] fat32
LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
JP Z,.LROTDIR ; root ??
;
LD HL,DIRPAGE.buffer ; ªã¤ 
LD DE,#4000 ; ᪮«ìª®
XOR A ; ¤¥áªà¨¯â®à
@ -362,17 +359,10 @@ LOADDIR:
LD HL,(FatBuffer.DIR_FRH) ; áâ. à §àï¤
LD IX,(FatBuffer.DIR_FRL) ; ­®¬¥à «®£. ᥪâ®à 
LD A,(FatBuffer.DIR_S_S)
;!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 ; ç¨á«® ᥪâ®à®¢
;
LD B,32 ; !HARDCODE 16384/(sector 512). à §¬¥à root-ª â «®£ 
CP B
JR NC,.RTD1
LD B,A ; ç¨á«® ᥪâ®à®¢
.RTD1: LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD DE,DIRPAGE.buffer ; ¡ãä¥à
LD C,Dss.DRV.Read ; ç⥭¨¥ ᥪâ®à®¢
@ -453,13 +443,15 @@ SAVEDIR:
;
LD A,(FatBuffer.DRIVE)
LD (IY+_sFM.DRIVE),A
LD D,(IY+_sFM.ST_CLUSTER)
LD E,(IY+_sFM.ST_CLUSTER+1)
;[ ] fat32
LD D,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
LD E,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
LD A,D
OR E
JP Z,.SROTDIR
LD HL,DIRPAGE.buffer
; à §¬¥à ᯨ᪠ ª â «®£  size_cash_directory
;!FIXIT ¥á«¨ ®­  ­ã¦­ , â® ¯à®¢¥à¨âì ­  ¡ £¨ (­ ¯à¨¬¥à, à §¬¥à ¤¨à४â®à¨¨ ¬¥­ìè¥ ¯à¨ ®âªàë⨨ ¨ ¡®«ìè¥ ¯®á«¥ ¯à ¢®ª)
.DIRSIZE+1:
LD DE,0
XOR A
@ -489,23 +481,21 @@ SAVEDIR:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; !FIXIT çñâ ­¥ ¨á¯®«ì§ã¥âáï
IF COMPILE_UNUSED_CODE
TESTDSK: ;????? ¢®§¬®¦­®, çâ® âãâ «®£¨ç­¥¥, 祬 ¢ ­ ç «¥ OPENDSK, ¥á«¨ ¡ã¤¥â à ¡®â âì Dss.DRV.Open
LD A,(FatBuffer.DRIVE)
LD C,Dss.DRV.MediaCheck
RST ToDSS.DRV
OR A
RET Z
ENDIF
; ­¥ ¨á¯®«ì§ã¥âáï
; TESTDSK: ;????? ¢®§¬®¦­®, çâ® âãâ «®£¨ç­¥¥, 祬 ¢ ­ ç «¥ OPENDSK, ¥á«¨ ¡ã¤¥â à ¡®â âì Dss.DRV.Open
; LD A,(FatBuffer.DRIVE)
; LD C,Dss.DRV.MediaCheck
; RST ToDSS.DRV
; OR A
; RET Z
; ॣ. D - ­®¬¥à ¤¨áª 
RD_BPB: LD C,SLOT3
IN B,(C)
PUSH BC
IN A,(SLOT0)
OUT (SLOT3),A
LD A,(FatBuffer.DRIVE) ;¢ë§®¢ RD_BPB ¬®¦¥â ¢ ¤ «ì­¥©è¥¬ ¯®­ ¤®¡¨âìáï, ¯ã᪠© ®­  á ¬  ¤®áâ ñâ ¯¥à¥¬¥­­ãî DRIVE
LD A,(FatBuffer.DRIVE)
;R08
;LD DE,BOOT+#C000
LD DE,CORE_BUFFERS.SECBUF+#C000
@ -519,7 +509,7 @@ RD_BPB: LD C,SLOT3
//PUSH IY ; ¯®ª  ¡¥§ ¨­¤¥ªá­®£®, ­® ¬®¦¥â ¯à¨£®¤¨âìáï
LD DE,#AA55 ; ᨣ­ âãà  ;R05
LD HL,(CORE_BUFFERS.SECBUF+510) ;R08 ;R07
LD HL,(CORE_BUFFERS.SECBUF+_sBOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07
;R05
AND A
SBC HL,DE
@ -527,38 +517,38 @@ RD_BPB: LD C,SLOT3
;R08
LD HL,CORE_BUFFERS.SECBUF
LD DE,CORE_BUFFERS.BootSector
LD BC,_sBOOT_SEC ; size
LD BC,_sBOOT_SECTOR_PARAMS ; size
LDIR
;
//LD IY,BootSector ; ¯®ª  ¡¥§ ¨­¤¥ªá­®£®, ­® ¬®¦¥â ¯à¨£®¤¨âìáï
//LD A,(IY+_sBOOT_SEC.ID_FORM)
LD A,(CORE_BUFFERS.BootSector.ID_FORM)
//LD A,(IY+_sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
LD A,(CORE_BUFFERS.BootSector.DRIVE_TYPE)
CP #F0
JP C,DOS_X_Error.UnknownBPB
;!TEST
;LD HL,0 ; calc. first sector FAT
;LD E,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
;LD D,(IY+_sBOOT_SEC.RESERVE+1)
;LD E,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS) ;Reserve sec
;LD D,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS+1)
;ADD HL,DE
//LD L,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
//LD H,(IY+_sBOOT_SEC.RESERVE+1)
LD HL,(CORE_BUFFERS.BootSector.RESERVE)
//LD L,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS) ;Reserve sec
//LD H,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS+1)
LD HL,(CORE_BUFFERS.BootSector.RESERVED_SECTORS)
;
; LD E,(IY+_sBOOT_SEC.HIDDEN) ;Hidden sec
; LD D,(IY+_sBOOT_SEC.HIDDEN+1)
; LD E,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN) ;Hidden sec
; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1)
; ADD HL,DE
;LD (FatBuffer.FAT_FRM),HL ; first sector FAT
LD (FatBuffer.FAT1_XX),HL ; first sector FAT #1
LD (FatBuffer.FAT2_XX),HL
//LD E,(IY+_sBOOT_SEC.S_P_F) ; sectors in FAT
//LD D,(IY+_sBOOT_SEC.S_P_F+1)
//LD E,(IY+_sBOOT_SECTOR_PARAMS.S_P_F) ; sectors in FAT
//LD D,(IY+_sBOOT_SECTOR_PARAMS.S_P_F+1)
LD DE,(CORE_BUFFERS.BootSector.S_P_F)
@ -577,8 +567,8 @@ RD_BPB: LD C,SLOT3
AND A
; CF = 0
//LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sectors
//LD B,(IY+_sBOOT_SEC.B_P_S+1)
//LD C,(IY+_sBOOT_SECTOR_PARAMS.B_P_S) ; Size sectors
//LD B,(IY+_sBOOT_SECTOR_PARAMS.B_P_S+1)
LD BC,(CORE_BUFFERS.BootSector.B_P_S)
; RL C
; RL B
@ -591,19 +581,23 @@ RD_BPB: LD C,SLOT3
; LD A,C
;;;;
LD A,B
;
RL C
RLA
;
RL C
RLA
;
RL C
RLA
;
LD C,A
LD B,0 ; BC - File handels in sectors
;;;;
LD (FatBuffer.F_P_S),A
//LD E,(IY+_sBOOT_SEC.F_P_DIR) ; Number file handel
//LD D,(IY+_sBOOT_SEC.F_P_DIR+1)
//LD E,(IY+_sBOOT_SECTOR_PARAMS.F_P_DIR) ; Number file handel
//LD D,(IY+_sBOOT_SECTOR_PARAMS.F_P_DIR+1)
LD DE,(CORE_BUFFERS.BootSector.F_P_DIR)
EX DE,HL
@ -628,19 +622,19 @@ RD_BPB: LD C,SLOT3
;LD H,B ; âãâ ¢ B ­®«ì ¤®«¦¥­ ¡ëâì
;LD L,B
;LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sector
;LD B,(IY+_sBOOT_SEC.B_P_S+1)
;LD C,(IY+_sBOOT_SECTOR_PARAMS.B_P_S) ; Size sector
;LD B,(IY+_sBOOT_SECTOR_PARAMS.B_P_S+1)
//LD L,(IY+_sBOOT_SEC.B_P_S) ; Size sector
//LD H,(IY+_sBOOT_SEC.B_P_S+1)
//LD L,(IY+_sBOOT_SECTOR_PARAMS.B_P_S) ; Size sector
//LD H,(IY+_sBOOT_SECTOR_PARAMS.B_P_S+1)
LD HL,(CORE_BUFFERS.BootSector.B_P_S) ; Size sector
LD A,(CORE_BUFFERS.BootSector.S_P_C) ;!TODO FATcacheSize
LD A,(CORE_BUFFERS.BootSector.S_P_C)
;!TODO FATcacheSize
;NEXTAD3
; .loop3: ADD HL,BC ; calc. cluster size
; DEC A
; JR NZ,.loop3
;!TODO ¯à®¢¥à¨âì ¯à ¢¨«ì­® «¨ áç¨â ¥â
XOR 1 ; calc. cluster size
JR Z,.loop3.end
RRA
@ -649,7 +643,6 @@ RD_BPB: LD C,SLOT3
JP NC,.loop3
.loop3.end:
;
LD (FatBuffer.CLU_LEN),HL
EX DE,HL
LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize
@ -663,6 +656,12 @@ RD_BPB: LD C,SLOT3
;ENDIF
////////////////////////////////////////////////////////////////////////
;!TODO detect fat type by clusters!
;[ ] fat32 reset fat32 variables
LD HL,0
LD (FatBuffer.ENDCLUS_HIGH),HL
LD (FAT_Max_Cluster_H),HL
;
LD HL,CORE_BUFFERS.BootSector.ID_FAT ;!!!!!   ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥­­®£® BootSector, â® ¡ã¤¥â ¡ £ 
LD DE,FatBuffer.MSG
LD B,3
@ -678,10 +677,25 @@ RD_BPB: LD C,SLOT3
INC HL
CP ' '
JR Z,.loop6
;
CP '1'
JP NZ,DOS_X_Error.UnknownBPB
LD A,(HL)
IF _FAT32_ENABLE
JP Z,.fat1x
;[ ] fat32
CP '2'
JP NZ,DOS_X_Error.UnknownBPB
LD A,#46 ; #46-#26 = 32 fat type
LD HL,#0FFF
LD (FatBuffer.ENDCLUS_HIGH),HL
LD (FAT_Max_Cluster_H),HL
LD H,#FF
JR .BPB_FAT
;
ELSE
JP NZ,DOS_X_Error.UnknownBPB
ENDIF
;
.fat1x: LD A,(HL)
CP '6' ; FAT16
LD HL,#FFFF
JR Z,.BPB_FAT
@ -689,8 +703,9 @@ RD_BPB: LD C,SLOT3
JP NZ,DOS_X_Error.UnknownBPB
LD HL,#0FFF
.BPB_FAT:
LD (FatBuffer.FAT_TYP),A
LD (FatBuffer.ENDCLUS),HL
SUB #26 ; A-#26 = fat type (12, 16, 32)
LD (FatBuffer.FAT_TYPE),A
LD (FatBuffer.ENDCLUS_LOW),HL
;!TODO ­¥ ¨á¯®«ì§ãîâáï §­ ç¥­¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ­ï¥¬ë¥ ¢ FatBuffer
////////////////////////////////////////////////////////////////////////
@ -698,8 +713,8 @@ RD_BPB: LD C,SLOT3
LD HL,0
//LD C,(IY+_sBOOT_SEC.S_P_T) ; Sector per track
//LD B,(IY+_sBOOT_SEC.S_P_T+1)
//LD C,(IY+_sBOOT_SECTOR_PARAMS.S_P_T) ; Sector per track
//LD B,(IY+_sBOOT_SECTOR_PARAMS.S_P_T+1)
LD BC,(CORE_BUFFERS.BootSector.S_P_T) ; Sector per track
LD A,(CORE_BUFFERS.BootSector.HEADS) ;!!!!!   ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥­­®£® BootSector, â® ¡ã¤¥â ¡ £ 
@ -712,28 +727,27 @@ RD_BPB: LD C,SLOT3
////////////////////////////////////////////////////////////////////////
LD DE,(FatBuffer.DAT_FRL)
; LD E,(IY+_sBOOT_SEC.HIDDEN) ;Hidden sec
; LD D,(IY+_sBOOT_SEC.HIDDEN+1)
; LD E,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN) ;Hidden sec
; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1)
; AND A
; SBC HL,DE
; EX DE,HL
//LD L,(IY+_sBOOT_SEC.S_P_D)
//LD H,(IY+_sBOOT_SEC.S_P_D+1)
//LD L,(IY+_sBOOT_SECTOR_PARAMS.S_P_D)
//LD H,(IY+_sBOOT_SECTOR_PARAMS.S_P_D+1)
LD HL,(CORE_BUFFERS.BootSector.S_P_D)
LD A,H
OR L
JP NZ,.HDDSMAL
;
//LD L,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS)
//LD H,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+1)
LD HL,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS)
//LD C,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+2)
//LD B,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+3)
LD BC,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS+2)
//LD L,(IY+_sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS)
//LD H,(IY+_sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS+1)
LD HL,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS_L)
//LD C,(IY+_sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS+2)
//LD B,(IY+_sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS+3)
LD BC,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS_H)
AND A
SBC HL,DE
JP NC,.HDDBIG
@ -753,45 +767,37 @@ RD_BPB: LD C,SLOT3
RR L
JP .S4C01
.S4C02: INC HL
LD (FAT_Max_Cluster),HL
LD (FAT_Max_Cluster_L),HL
//POP IY
; LD DE,FAT
; LD HL,0
; LD IX,(FAT_FRM)
; LD B,3
; LD A,(DRIVE)
; LD C,Dss.DRV.Read
; RST ToDSS.DRV
; JP C,RDERR1
LD HL,0
LD (FatCache),HL
XOR A
LD H,A
LD L,A
LD (FatCache.Block),HL
LD (FatCache.Update),A
SET_PAGE_X FATPAGE
PUSH AF
XOR A
CALL READ_FAT
CALL READ_FAT_TABLE
POP AF
OUT (SLOT3),A
CALL R_CLUST
XOR A
RET
;!TODO detect fat type by clusters!
.IBM_DOS:
LD A,(CORE_BUFFERS.BootSector.ID_FORM)
LD A,(CORE_BUFFERS.BootSector.DRIVE_TYPE)
CP #F0
JR C,DOS_X_Error.UnknownBPB
;????? ­ ¤® «¨ ¨§¬¥­¨âì?
// OR 2
// CP #FA ; ID ram-¤¨áª 
CP #F8 ;   ¥á«¨ ­¥ F8?
;?????
; ID ram-¤¨áª  - #FA
CP #F8 ; !FIXIT ­¥ ®¡ï§ â¥«ì­® ¥á«¨ ¢¨­â, â® ­¥ FAT12
LD A,'6'
LD HL,#FFFF
JP Z,.BPB_FAT
;
LD A,'2'
LD HL,#0FFF
JP .BPB_FAT
@ -813,7 +819,8 @@ FatBuffer:
.MSG: DB 'FAT'
.READ_PG: DB #00 ;!TODO ­¥ ¨á¯®«ì§ãîâáï ­¥ª®â®àë¥ §­ ç¥­¨ï, ­® § ¤ã¬ª  ­¥¯«®å ï)))
.BLOCK: DB #00
.DIR_CLU: DW #0000
.DIR_CLU_L: DW #0000
.DIR_CLU_H: DW #0000 ; fat32
.DRIVE: DB #FF
.FAT_FRM:
.FAT1_XX: DW #0000 ; MSD_FAT_SEC first sector FAT
@ -823,15 +830,19 @@ FatBuffer:
.F_P_S: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
.DIR_S_S: DB #00 ; DIR_SEC_SIZE
.DAT_FRL: DW #0000 ; MSD_DAT_SEC low
;.DAT_FRH: DW #0000 ; MSD_DAT_SEC high ; !TODO ®£à ­¨ç¥­¨¥ ¢ 32 ƒ¨£  ;!FIXIT ­¥ ¨á¯®«ì§ã¥âáï
.DAT_FRH: DW #0000 ; MSD_DAT_SEC high ; !TODO ®£à ­¨ç¥­¨¥ ¢ 32 ƒ¨£  ;!FIXIT ­¥ ¨á¯®«ì§ã¥âáï
.CLU_LEN:
.B_P_C: DW #0000 ; CLUSTER_LEN
.C_P_B: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï?
.FAT_TYP: DB #00 ; TYPE FAT (#32 - 12bit, #36 - 16bit)
.FAT_TYPE: DB #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ;!TODO fat32
.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  樫¨­¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
.ENDCLUS: DW #FFFF
.ENDCLUS_LOW: DW #FFFF
.ENDCLUS_HIGH: DW #FFFF ; !TODO for fat32
;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;
INCLUDE "FAT12_16.ASM"
IF _FAT32_ENABLE
INCLUDE "FAT32.ASM"
ENDIF
;

View File

@ -14,15 +14,26 @@
;---------------------------------------------------------------
; “áâ ­®¢¨âì ­ ç «ì­ë© ª« áâ¥à ¤«ï ç⥭¨ï
R_CLUST LD HL,#0001
; [ ] fat32
R_CLUST:
LD HL,#0001
LD (G_CLUST.num),HL
RET
.FAT32: WORD 0
; ­ ©â¨ ¯¥à¢ë© ᢮¡®¤­ë© ª« áâ¥à
; [ ] fat32
G_CLUST:
.num+1: LD HL,#0001
.loop: INC HL ; ­®¬¥à ª« áâ¥à 
CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
; [x] fat32
IF _FAT32_ENABLE
LD A,(FatBuffer.FAT_TYPE)
XOR 32
CALL Z,SET_FAT32.CHECK_INC_HIGH_CLUSTER
ENDIF
;
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
CP DSS_Error.sys.DISK_FULL
SCF
RET Z ; ®è¨¡ª  ?
@ -30,10 +41,11 @@ G_CLUST:
OR E
JR NZ,.loop
LD (G_CLUST.num),HL
XOR A
; XOR A
RET
; HL - CLUSTER
; [ ] fat32
INC_FAT:
PUSH HL
CALL G_CLUST
@ -41,22 +53,21 @@ INC_FAT:
RET C
;
PUSH HL
PUSH HL
EX DE,HL ; hl=­®¬¥à ª« áâ¥à 
.loop: CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
; PUSH HL
; EX DE,HL ; hl=­®¬¥à ª« áâ¥à 
; .loop: CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
; EX DE,HL
; JR NC,.loop ; ­¥ ª®­¥æ 楯®çª¨
EX DE,HL
JR NC,.loop ; ­¥ ª®­¥æ 楯®çª¨
EX DE,HL
POP DE ; ­®¬¥à ª« áâ¥à 
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
; POP DE ; ­®¬¥à ª« áâ¥à 
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
;!FIXIT <­¥â ª®­âà®«ï ®è¨¡ª¨>
;
;
POP HL
LD DE,(FatBuffer.ENDCLUS) ; ­®¬¥à ª« áâ¥à 
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WR_FAT?
;CALL WR_FAT ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
LD DE,(FatBuffer.ENDCLUS_LOW) ; ­®¬¥à ª« áâ¥à 
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WRITE_FAT_TABLE?
;CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
;
AND A
RET
@ -65,66 +76,74 @@ INC_FAT:
;-----------------------------------------------------------
; <20>à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
; ¢å®¤: hl = ­®¬¥à ª« áâ¥à 
; de = <E28099>˜…… á«®¢® ­®¬¥à  ª« áâ¥à  (⮫쪮 ¤«ï FAT32)
; ¢ë室: hl = ­®¬¥à ª« áâ¥à 
; de = ­®¬¥à á«¥¤. ª« áâ¥à 
; de = ­®¬¥à á«¥¤. ª« áâ¥à  (¥á«¨ 0, â® ª« áâ¥à hl ᢮¡®¤¥­)
; CF - ª®­¥æ 楯®çª¨
;!FIXIT ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - à §¤¥« ­¥ ¡®«ìè¥ 2Gb
;-----------------------------------------------------------
R_F_FAT:
EX DE,HL
LD HL,(FAT_Max_Cluster)
AND A
;[ ] fat32
READ_FROM_FAT:
;[x] fat32
PUSH DE
LD A,(FatBuffer.FAT_TYPE)
XOR 32
JR NZ,.low ; Z=0 ¯à®¢¥à塞 ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à 
LD HL,(FAT_Max_Cluster_H) ; ¯à®¢¥à塞 áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à 
JP .high
;
.low: EX DE,HL
LD HL,(FAT_Max_Cluster_L)
.high: ; CF = 0
SBC HL,DE
EX DE,HL
LD A,DSS_Error.sys.DISK_FULL
;[x] fat32
POP DE
;
RET C
SET_PAGE_X FATPAGE
PUSH HL
PUSH AF
LD A,(FatBuffer.FAT_TYP)
CP "2" ; fat12
JR Z,R_F_F12
LD A,(FatBuffer.FAT_TYPE)
CP 16 ; fat16
JR C,.FAT12
JR NZ,.FAT32
; fat16, ¯à®áâ® ç¨â âì á«¥¤. ­®¬¥à
R_F_F16:
CALL GET_FAT16_CELL
.FAT16: CALL GET_FAT16_CELL
LD E,(HL) ; ¯à®ç¨â âì ­®¬¥à ª« áâ¥à 
INC HL
LD D,(HL)
POP AF
OUT (SLOT3),A
;!TODO #FFF7 - ª« áâ¥à á ª®áïªç­ë¬¨ ᥪâ®à ¬¨
;!TODO #FFF7 - ª« áâ¥à á ª®áïç­ë¬¨ ᥪâ®à ¬¨
LD HL,#FFEF ;!HARDCODE
XOR A ; DssErr.sys.NO_ERROR
SBC HL,DE ; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë
POP HL
RET
;
R_F_F12:
CALL GET_FAT12_CELL
.FAT12: CALL GET_FAT12_CELL
LD E,(HL)
INC HL
LD D,(HL)
JR C,R_F_F01
JR C,.Correct_1
LD A,D
AND #0F
LD D,A
JP R_F_F02
JR .Correct_2
;
R_F_F01:
.Correct_1:
LD A,E
AND #F0
RR D ; ¢¯à ¢® ­  4 ¡¨âa
RRA
RR D
RRA
RR D
RRA
RR D
RRA
DUP 4 ; ¢¯à ¢® ­  4 ¡¨âa
RR D
RRA
EDUP
LD E,A
R_F_F02:
.Correct_2:
POP AF
OUT (SLOT3),A
LD HL,#0FEF
@ -132,20 +151,21 @@ R_F_F02:
SBC HL,DE ; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë
POP HL
RET
.FAT32: ; [ ] fat32
CALL GET_FAT32_CELL
DI
HALT
;-----------------------------------------------------------
; ‡ ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
; ¢å®¤: de = ­®¬¥à ª« áâ¥à 
; hl = ? ­®¬¥à ¯¥à¢®£® ª« áâ¥à 
; ¢ë室: hl = ? ­®¬¥à á«¥¤. ª« áâ¥à 
; de = ­®¬¥à ª« áâ¥à 
; in: HL - CLUSTER
; out: DE - (CLUSTER)
; ¢å®¤: hl = ­®¬¥à ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì
; de = ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì
; ¢ë室: â ª®© ¦¥ ª ª ¨ ¢å®¤
;-----------------------------------------------------------
W_T_FAT:
; [ ] fat32
WRITE_TO_FAT:
PUSH DE
EX DE,HL
LD HL,(FAT_Max_Cluster)
LD HL,(FAT_Max_Cluster_L)
AND A
SBC HL,DE
EX DE,HL
@ -161,30 +181,12 @@ W_T_FAT:
;LD A,1
;LD (FatCache.Update),A
;
LD A,(FatBuffer.FAT_TYP)
CP "2" ; fat12
JR Z,W_T_F12
W_T_F16:
PUSH DE
; LD A,H
; LD B,H
; ;AND #0F
; AND FAT_CACHE.Size_Mask_16
; LD H,A
; LD A,B
; ; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
; DUP FAT_CACHE.Degree_16
; RRCA
; EDUP
; ;AND #0F
; AND FAT_CACHE.Part_Mask_16
; ;
; ADD HL,HL ; HL - FAT OFFSET (FROM CASH) ;!HARDCODE fat16 - à §¬¥à § ¯¨á¨ FAT
; LD BC,(FatCache) ; C - BLOCK FAT IN CASH
; CP C
; CALL NZ,READ_FAT ; A != C - READ NEW BLOCK FAT
; LD DE,FATPAGE.cache
; ADD HL,DE ; ­  ï祩ªã FAT
LD A,(FatBuffer.FAT_TYPE)
CP 16 ; fat16
JR C,.FAT12
JR NZ,.FAT32
;
.FAT16: PUSH DE
CALL GET_FAT16_CELL
POP DE
LD (HL),E ; á®åà. ¢ ª¥è¥ FAT- 
@ -194,18 +196,17 @@ W_T_F16:
POP HL
OUT (SLOT3),A
; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD
LD A,1
XOR A
INC A
LD (FatCache.Update),A
;
XOR A
; CF = 0
RET
;
; fat12
W_T_F12: ;!FIXIT ¯¥à¥¤¥« âì ­  ¯¥à¥¬¥­­ë¥ FAT_CACHE
.FAT12: ;!FIXIT ¯¥à¥¤¥« âì ­  ¯¥à¥¬¥­­ë¥ FAT_CACHE
PUSH DE
CALL GET_FAT12_CELL
POP DE
JR C,W_T_F01 ; ­®¬¥à ­¥çñâ­ë©
JR C,.Correct_1 ; ­®¬¥à ­¥çñâ­ë©
LD (HL),E
INC HL
LD A,(HL)
@ -216,30 +217,19 @@ W_T_F12: ;!FIXIT
POP HL
OUT (SLOT3),A
; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD
LD A,1
XOR A
INC A
LD (FatCache.Update),A
;
AND A
; CF = 0
RET
;
W_T_F01:; ¢«¥¢® ­  4 ¡¨âa
;SLA E
;LD A,E
;RL D
;RLA
;RL D
;RLA
;RL D
;RLA
;RL D
;LD E,A
;
ex de,hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl
ex de,hl
.Correct_1:
; ¢«¥¢® ­  4 ¡¨âa
EX DE,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
EX DE,HL
;
LD A,(HL)
AND #0F
@ -251,26 +241,34 @@ W_T_F01:;
POP HL
OUT (SLOT3),A
; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD
LD A,1
XOR A
INC A
LD (FatCache.Update),A
;
AND A
RET
; LD A,1
; LD (FatCache.Update),A
; AND A
; CF = 0
RET
.FAT32: ; [ ] fat32
DI
HALT
;RX01
;RE_FAT:
; <20>à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
; A - NEW FAT BLOCK
READ_FAT:
READ_FAT_TABLE:
PUSH HL
PUSH AF
LD A,(FatCache.Update)
OR A
CALL NZ,WR_FAT.Start
CALL NZ,WRITE_FAT_TABLE.Start
POP AF
LD L,A
LD H,0
LD (FatCache),HL
XOR A
LD H,A ;!FIXIT fat32 - ã ä â32 ¡«®ª®¢ ¬®¦¥â ¡ëâì ¢ «®¬
LD (FatCache.Block),HL
LD (FatCache.Update),A
;FAT BLOCK ^ FAT_CACHE.Degree = SECTOR OF FAT
DUP FAT_CACHE.Degree_16
ADD HL,HL ;x2
@ -284,7 +282,7 @@ READ_FAT:
;LD IX,0
;ADD IX,DE ; ­®¬¥à «®£. ᥪâ®à 
;
LD HL,0 ; áâ. à §àï¤ ; HL:IX - SECTOR FAT FOR READING ;!TODO FAT32
LD HL,0 ; áâ. à §àï¤ ; HL:IX - SECTOR FAT FOR READING
LD DE,FATPAGE.cache ; ªã¤  ; DE - FAT ADDRESS
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD BC,FAT_CACHE.Sectors*256 + Dss.DRV.Read ;ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
@ -293,15 +291,17 @@ READ_FAT:
RET
; <20>®¤ª«îç¨âì ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
WR_FAT: SET_PAGE_X FATPAGE
WRITE_FAT_TABLE:
SET_PAGE_X FATPAGE
PUSH AF
CALL .Start ;!TODO ­¥â ª®­âà®«ï ®è¨¡®ª
POP AF
OUT (SLOT3),A
RET
; ‡ ¯¨áì ª¥è  (¢á¥£®?) FAT-  ­  ¤¨áª
.Start: LD HL,(FatCache)
LD H,0
; ‡ ¯¨áì ª¥è  FAT-  ­  ¤¨áª
.Start: LD HL,(FatCache.Block)
;
;LD H,0
;FAT BLOCK * 16 = SECTOR OF FAT
DUP FAT_CACHE.Degree_16
ADD HL,HL ;x2
@ -348,14 +348,17 @@ WR_FAT: SET_PAGE_X FATPAGE
LD DE,(FatBuffer.FAT2_XX)
ADD HL,DE
EX DE,HL
LD XH,D
LD XL,E
;
LD XH,D
LD XL,E
;LD IX,0
;ADD IX,DE ; ­®¬¥à «®£. ᥪâ®à 
LD HL,0
; CF = ADD HL,DE
; [ ] fat32 - ¢â®à ï â ¡«¨æ  ä â ¬®¦¥â ¦¥ ã¥å âì ¤ «ìè¥ 16-¡¨â «®£¨ç¥áª®£® ᥪâ®à ?
IF _FAT32_ENABLE
RL L
ENDIF
;
LD DE,FATPAGE.cache
LD HL,0
LD A,(FatBuffer.DRIVE)
LD C,Dss.DRV.Write
RST ToDSS.DRV
@ -386,9 +389,9 @@ GET_FAT16_CELL:
AND FAT_CACHE.Part_Mask_16
;
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
LD BC,(FatCache.Block) ; BC - BLOCK FAT IN CASH
CP C
CALL NZ,READ_FAT ; A != C - READ NEW BLOCK FAT
CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT- 
ADD HL,DE ; ­  ï祩ªã FAT
RET
@ -399,24 +402,21 @@ GET_FAT16_CELL:
GET_FAT12_CELL:
LD D,H
LD E,L
RR H
SRL H
RR L ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF
PUSH AF ; á®åà. ä« £
ADD HL,DE ; CLUSTER * 1.5
;
;IF COMPILE_UNUSED_CODE
IF FAT_CACHE.Size < #2000
;!FIXIT ®¯â¨¬¨§¨à®¢ âì
LD A,H
LD B,H
;
AND #1F
;AND FAT_CACHE.Size_Mask_16
;
LD H,A
LD A,B
;
RLCA
RLCA
@ -427,11 +427,10 @@ GET_FAT12_CELL:
AND #07
;AND FAT_CACHE.Part_Mask_16
;
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
LD BC,(FatCache.Block) ; C - BLOCK FAT IN CASH
CP C
CALL NZ,READ_FAT ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
;ENDIF
CALL NZ,READ_FAT_TABLE ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
ENDIF
;
LD DE,FATPAGE.cache
ADD HL,DE
@ -441,8 +440,8 @@ GET_FAT12_CELL:
; in: HL - CLUSTER
; out: HL:IX - SECTOR
NSECTOR:
LD DE,0 ;!FIXIT for FAT32
NSECTOR:;[x] fat32
LD DE,(FAT_Max_Cluster_H)
DEC HL
DEC HL
LD A,(CORE_BUFFERS.BootSector.S_P_C)
@ -470,53 +469,58 @@ NSECTOR:
RET
////////////////////////////////////////////////////////////////////////
;[ ] fat32
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
MACRO _GetSavedCluster exit_to
LD E,(IY+_sFM.KnownCluster_L)
LD D,(IY+_sFM.KnownCluster_H)
LD D,(IY+_sFM.KnownCluster_L+1)
LD A,D
INC B
OR E
JR Z,exit_to
DEC B
;
PUSH DE
PUSH HL
PUSH BC
LD E,(IY+_sFM.KnownOffset_L)
LD D,(IY+_sFM.KnownOffset_H)
LD D,(IY+_sFM.KnownOffset_L+1)
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
POP HL
;
EX DE,HL
INC B
JP exit_to
.noOptimization_1:
POP BC
.noOptimization_2:
POP HL
POP DE
INC B
JP exit_to
ENDM
;
;[ ] fat32
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
MACRO _SaveGetedCluster
LD (IY+_sFM.KnownCluster_L),L
LD (IY+_sFM.KnownCluster_H),H
LD (IY+_sFM.KnownCluster_L+1),H
POP BC
LD (IY+_sFM.KnownOffset_L),C
LD (IY+_sFM.KnownOffset_H),B
LD (IY+_sFM.KnownOffset_L+1),B
ENDM
;;
BLOK_RD.ECL2:
BLOCK_READ.ECL2:
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
POP BC
;
@ -528,38 +532,42 @@ BLOK_RD.ECL2:
;READ SECTORS OF FILE
;HL:DE - FP (in sectors)
; B - Amount sectors
BLOK_RD: PUSH BC
BLOCK_READ:
PUSH BC
LD (READ.PointerOnBuffer),IX
LD A,(CORE_BUFFERS.BootSector.S_P_C) ;SECTORS PER CLUSTER
LD C,A
LD B,0 ;!FIXIT
LD B,0
;HL:DE / BC => DE:IX HL-OSTATOK
CALL DIV_for_SPC
;!FIXIT ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - à §¤¥« ­¥ ¡®«ìè¥ 2Gb
; [ ] fat32. ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - ä ©« ­¥ ¡®«ìè¥ 2Gb
LD B,XH
LD C,XL
PUSH HL ;RESIDUE
LD L,(IY+_sFM.ST_CLUSTER) ;START CLUSTER
LD H,(IY+_sFM.ST_CLUSTER+1)
PUSH HL ;RESIDUE
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ;START CLUSTER
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
LD A,H
OR L
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
;JR NZ,BLOKRD2
PUSH BC
JR Z,.ECL2
;JP ECL2 ;RY01 JR BLOKRD0
;JP ECL2 ;RY01 JR BLOKRD0
_GetSavedCluster .enter_loop1
;
.loop1: PUSH BC
CALL R_F_FAT
CALL READ_FROM_FAT
POP BC
JR C,.ECL2 ;RY01
JR C,.ECL2 ;RY01
EX DE,HL
DEC BC
; DEC BC
.enter_loop1:
LD A,B ; - ᬥ饭¨¥ ¢­ãâਠ䠩«  ¢ ª« áâ¥à å
OR C
JR NZ,.loop1
; LD A,B ; - ᬥ饭¨¥ ¢­ãâਠ䠩«  ¢ ª« áâ¥à å
; OR C
; JR NZ,.loop1
INC B
DEC BC
DJNZ .loop1
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
_SaveGetedCluster
;
@ -619,7 +627,7 @@ BLOK_RD: PUSH BC
.BLOKRD7:
EX DE,HL
PUSH BC
CALL R_F_FAT
CALL READ_FROM_FAT
POP BC
JR C,.ECL1 ;RY01
EX DE,HL
@ -674,12 +682,12 @@ BLOK_WR:
LD B,0
;HL:DE / BC => DE:IX HL-OSTATOK
CALL DIV_for_SPC
; [ ] fat32. ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - ä ©« ­¥ ¡®«ìè¥ 2Gb
LD B,XH
LD C,XL
PUSH HL ;RESIDUE
LD L,(IY+_sFM.ST_CLUSTER) ;START CLUSTER
LD H,(IY+_sFM.ST_CLUSTER+1)
PUSH HL ;RESIDUE
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ;START CLUSTER
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
LD A,H
OR L
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
@ -690,35 +698,40 @@ BLOK_WR:
PUSH BC
CALL G_CLUST
JP C,.Error
LD (IY+_sFM.ST_CLUSTER),L
LD (IY+_sFM.ST_CLUSTER+1),H
LD DE,(FatBuffer.ENDCLUS)
CALL W_T_FAT
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),L
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),H
LD DE,(FatBuffer.ENDCLUS_LOW)
CALL WRITE_TO_FAT
PUSH HL
;!TEST ;!TODO 2/12/23 [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WR_FAT?
;CALL WR_FAT ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
;!TEST ;!TODO 2/12/23 [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WRITE_FAT_TABLE?
;CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
;
POP HL
POP BC
INC B
JP .WR2
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
.GetSavedCluster:
_GetSavedCluster .WR2
;
.loop: PUSH BC
CALL R_F_FAT
CALL READ_FROM_FAT
JR NC,.WRB
PUSH HL
CALL INC_FAT
POP HL
JP C,.Error
CALL R_F_FAT
CALL READ_FROM_FAT
.WRB: POP BC
EX DE,HL
; DEC BC
.WR2:
; LD A,B
; OR C
; JR NZ,.loop
INC B
DEC BC
.WR2: LD A,B
OR C
JR NZ,.loop
DJNZ .loop
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
_SaveGetedCluster
@ -778,13 +791,13 @@ BLOK_WR:
RET Z
.WR7: EX DE,HL
PUSH BC
CALL R_F_FAT
CALL READ_FROM_FAT
JR NC,.WR9
PUSH HL
CALL INC_FAT
POP HL
JR C,.ErrorFull
CALL R_F_FAT
CALL READ_FROM_FAT
.WR9: POP BC
EX DE,HL
PUSH HL
@ -825,10 +838,11 @@ BLOK_WR:
////////////////////////////////////////////////////////////////////////
FatCache: WORD #0000
.Block EQU FatCache
.Update EQU FatCache+1
FAT_Max_Cluster: WORD #0FF0 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
FatCache: ;WORD #0000
.Block WORD #0000 ;EQU FatCache
.Update BYTE 0 ;EQU FatCache+1
FAT_Max_Cluster_L: WORD #0FF0 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
FAT_Max_Cluster_H: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
;//MODULE: FAT_X
;[END]
@ -838,7 +852,7 @@ FAT_Max_Cluster: WORD #0FF0 ;
;; HL - CLUSTER
;; DE - (CLUSTER)
;
;R_F_FAT EX DE,HL
;READ_FROM_FAT EX DE,HL
; LD HL,(FAT_Max_Cluster)
; AND A
; SBC HL,DE
@ -859,7 +873,7 @@ FAT_Max_Cluster: WORD #0FF0 ;
; DEC A
; LD BC,(FatCache) ; A - ELEMENT OF CASH
; CP C
; CALL NZ,READ_FAT
; CALL NZ,READ_FAT_TABLE
; LD DE,FAT
; ADD HL,DE
; LD E,(HL)
@ -895,7 +909,7 @@ FAT_Max_Cluster: WORD #0FF0 ;
;
;
;WR_FAT LD HL,(FatCache)
;WRITE_FAT_TABLE LD HL,(FatCache)
; LD H,0
; LD (FatCache),HL
; LD E,L

138
DSS/FS/FAT/FAT32.asm Normal file
View File

@ -0,0 +1,138 @@
;!TODO fat32
;=======================================================================
;BPB
;LD (FatBuffer.FAT2_XX),HL
;LD (FatBuffer.DIR_FRL),HL ; first sector DIR
;BPB32
;LD HL,(CORE_BUFFERS.BootSector+#2C) ;fat32 <20>¥à¢ë© ª« áâ¥à ª®à­¥¢®£® ª â «®£  (®¡ëç­® 2) 4 ¡ ©â 
;FAT Max Cluster
;LD (FAT_Max_Cluster_L),HL
;=======================================================================
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ª®áâ뫨
MODULE SET_FAT32
; ‚•Ž„: HL - ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¯®á«¥ ¨­ªà¥¬¥­â 
; ‚›•Ž„: HL - ª ª ¨ ¢å®¤
; DE - áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¯®á«¥ ¨­ªà¥¬¥­â 
CHECK_INC_HIGH_CLUSTER:
LD DE,(R_CLUST.FAT32)
;
LD A,H
OR L
RET NZ
;
INC DE
; !FIXIT ¯à®¢¥àïâì ¯¥à¥¯®«­¥­¨¥?
RET
ENDMODULE
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;¢å®¤: DE:HL - ­®¬¥à ª« áâ¥à 
;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE
GET_FAT32_CELL:
;[ ] fat32
DI
HALT
LD A,H
LD B,H
;AND #0F
AND FAT_CACHE.Size_Mask_16
LD H,A
LD A,B
; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
DUP FAT_CACHE.Degree_16
RRCA
EDUP
;AND #0F
AND FAT_CACHE.Part_Mask_16
;
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
LD BC,(FatCache.Block) ; BC - BLOCK FAT IN CASH
CP C
CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT- 
ADD HL,DE ; ­  ï祩ªã FAT
RET
/*
; <20>à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
; A - NEW FAT BLOCK
READ_FAT32:
PUSH HL
PUSH AF
LD A,(FatCache.Update)
OR A
CALL NZ,WRITE_FAT_TABLE.Start
POP AF
LD L,A
XOR A
LD H,A ;!FIXIT fat32
LD (FatCache.Block),HL
LD (FatCache.Update),A
;FAT BLOCK ^ FAT_CACHE.Degree = SECTOR OF FAT
DUP FAT_CACHE.Degree_16
ADD HL,HL ;x2
EDUP
LD DE,(FatBuffer.FAT_FRM)
ADD HL,DE
EX DE,HL
;
LD XH,D
LD XL,E
;LD IX,0
;ADD IX,DE ; ­®¬¥à «®£. ᥪâ®à 
;
LD HL,0 ; áâ. à §àï¤ ; HL:IX - SECTOR FAT FOR READING ;!TODO FAT32
LD DE,FATPAGE.cache ; ªã¤  ; DE - FAT ADDRESS
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD BC,FAT_CACHE.Sectors*256 + Dss.DRV.Read ;ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
RST ToDSS.DRV
POP HL
RET
;¢å®¤: HL - ­®¬¥à ª« áâ¥à 
;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE
GET_FAT32_CELL:
LD A,H
LD B,H
;AND #0F
AND FAT_CACHE.Size_Mask_16
LD H,A
LD A,B
; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
DUP FAT_CACHE.Degree_16
RRCA
EDUP
;AND #0F
AND FAT_CACHE.Part_Mask_16
;
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
LD BC,(FatCache.Block) ; C - BLOCK FAT IN CASH
CP C
CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT- 
ADD HL,DE ; ­  ï祩ªã FAT
RET
R_F_F16:
CALL GET_FAT16_CELL
LD E,(HL) ; ¯à®ç¨â âì ­®¬¥à ª« áâ¥à 
INC HL
LD D,(HL)
POP AF
OUT (SLOT3),A
;!TODO #FFF7 - ª« áâ¥à á ª®áïªç­ë¬¨ ᥪâ®à ¬¨
LD HL,#FFEF ;!HARDCODE
XOR A ; DssErr.sys.NO_ERROR
SBC HL,DE ; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë
POP HL
RET
*/
;

View File

@ -273,19 +273,19 @@ MS_CURS PUSH BC
LD B,0
LD (YHOT_SP),BC
EXX
LD A,(M_XSIZE)
LD C,A
LD B,0
LD A,(M_YSIZE)
LD HL,0
MSCURS1 ADD HL,BC
DEC A
JR NZ,MSCURS1
PUSH HL
LD BC,M_IMAGE.Size+1
AND A
SBC HL,BC
CCF
LD A,(M_XSIZE)
LD C,A
LD B,0
LD A,(M_YSIZE)
LD HL,0
MSCURS1 ADD HL,BC
DEC A
JR NZ,MSCURS1
PUSH HL
LD BC,M_IMAGE.Size+1
AND A
SBC HL,BC
CCF
EXX
POP BC
POP HL
@ -303,19 +303,19 @@ NOLOADM POP HL
MS_BCUR PUSH IX
EXX
LD A,(M_XSIZE)
LD C,A
LD B,0
LD A,(M_YSIZE)
LD HL,0
MSBCUR1 ADD HL,BC
DEC A
JR NZ,MSBCUR1
PUSH HL
LD BC,M_IMAGE.Size+1
AND A
SBC HL,BC
CCF
LD A,(M_XSIZE)
LD C,A
LD B,0
LD A,(M_YSIZE)
LD HL,0
MSBCUR1 ADD HL,BC
DEC A
JR NZ,MSBCUR1
PUSH HL
LD BC,M_IMAGE.Size+1
AND A
SBC HL,BC
CCF
EXX
POP BC
POP HL

View File

@ -247,14 +247,14 @@ Cursor_Off:
; ‚¥ªâ®à ®¡á«ã¦¨¢ ­¨ï ªãàá®à 
cursor_interrupt:
LD A,(Cursor_Off.Flag)
OR A
RET Z
LD A,(Cursor_Off.Flag)
OR A
RET Z
.timer+1: LD A,1 ; ¯ ã§  ¬¨£ ­¨ï
DEC A
CALL Z,Cursor
LD (.timer),A
RET
DEC A
CALL Z,Cursor
LD (.timer),A
RET
; <20> áâனª  §­ ª®£¥­¥à â®à  ªãàá®à  ç¥àâ®çª®©
SETUP_CURSORS:
@ -414,9 +414,9 @@ FULL_BF:
BIT SF_BUFF,(IX+SOUND_K)
JR Z,.FBF
EXX
LD DE,230
LD HL,50
CALL BEEP
LD DE,230
LD HL,50
CALL BEEP
EXX
.FBF: EX AF,AF'
RET
@ -530,9 +530,9 @@ RUS_X BIT X_CTRL,(IX+K_SHIFT)
BIT SF_ALT,(IX+SOUND_K)
RET Z
EXX
LD DE,190
LD HL,20
CALL BEEP
LD DE,190
LD HL,20
CALL BEEP
EXX
RET

75
DSS/Kernel_Panic.asm Normal file
View File

@ -0,0 +1,75 @@
MACRO PRINT_LINE_KERNEL_PANIC txtString, txtStringSize, txtColor, coordY
LD HL,txtString
LD DE,#A000
LD BC,txtStringSize
LD A,C
LDIR
;
LD DE,coordY*256 + (80-txtStringSize)/2 ;X=0, Y=15
LD C,BIOS.LP_SET_PLACE
RST ToBIOS
;
LD HL,#A000
LD DE,0*256 + txtColor
LD B,A
LD C,BIOS.LP_PRINT_LINE3
RST ToBIOS
ENDM
;-----------------------[]
; HL - á®®¡é¥­¨¥
; E - ª®®à¤¨­ â  X ­  ⥪á⮢®¬ íªà ­¥
; BC - ¤«¨­  á®®¡é¥­¨ï
KERNEL_PANIC:
DI
;
PUSH DE
PUSH HL
PUSH BC
;
LD E,1
LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default
RST ToBIOS
;
LD HL,#2050
LD DE,0
LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_CLS_WIN
RST ToBIOS
;
LD A,1
OUT (SCREEN_SWITCH),A ; set scr-2
;
PRINT_LINE_KERNEL_PANIC .kernel_panic, .kernel_panic.size, +(COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.RED), 13
PRINT_LINE_KERNEL_PANIC .press_CAD, .press_CAD.size, +(COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE), 18
;
POP BC
POP HL
LD DE,#A000
LD A,C
LDIR
;
POP DE
LD D,15
LD C,BIOS.LP_SET_PLACE
RST ToBIOS
;
LD HL,#A000
LD DE,0*256 + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE
LD B,A
LD C,BIOS.LP_PRINT_LINE3
RST ToBIOS
;
.loop: DI
HALT
JR .loop
.print_line:
RET
;
.kernel_panic: DZ "KERNEL PANIC!"
.kernel_panic.size EQU $-.kernel_panic
;
.press_CAD: DZ "Press Ctrl+Alt+Del or RESET."
.press_CAD.size EQU $-.press_CAD
;-----------------------[]

View File

@ -112,7 +112,9 @@ ReScanDRV:
_CALC_DEVICE_ENTRY OLD_TABLES.DEVICE
LD A,(HL)
INC A
JP Z,ERROR_BOOTDRV_DIES
SCF
;JP Z,ERROR_BOOTDRV_DIES
RET Z
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 6. § ¬¥­ï¥¬ ­®¢ë¥ â ¡«¨æë ­  ¬®¤¨ä¨æ¨à®¢ ­­ë¥ áâ àë¥
@ -127,6 +129,7 @@ ReScanDRV:
;7. ¢ë室
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
LD A,(DRV_PAGE.LDRIVE)
AND A
RET
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
@ -274,42 +277,42 @@ Find_Record:
;-----------------------[]
;-----------------------[]
ERROR_BOOTDRV_DIES:
DI
LD E,1
LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default
RST ToBIOS
;
LD HL,#2050
LD DE,0
LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_CLS_WIN
RST ToBIOS
;
LD A,1
OUT (SCREEN_SWITCH),A ; set scr-2
;
LD HL,.ERROR_MSG
LD DE,#A000
LD BC,.ERROR_MSG.size
LD A,C
LDIR
;
LD DE,16*256 + (80-.ERROR_MSG.size)/2 ;X=0, Y=16
LD C,BIOS.LP_SET_PLACE
RST ToBIOS
;
LD HL,#A000
LD DE,0*256 + COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE
LD B,A
LD C,BIOS.LP_PRINT_LINE3
RST ToBIOS
;
.loop: DI
HALT
JR .loop
;
.ERROR_MSG: DZ "Kernel panic! Boot disk lost. Press Ctrl+Alt+Del or RESET."
.ERROR_MSG.size EQU $-.ERROR_MSG
; ERROR_BOOTDRV_DIES:
; DI
; LD E,1
; LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default
; RST ToBIOS
; ;
; LD HL,#2050
; LD DE,0
; LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_CLS_WIN
; RST ToBIOS
; ;
; LD A,1
; OUT (SCREEN_SWITCH),A ; set scr-2
; ;
; LD HL,.ERROR_MSG
; LD DE,#A000
; LD BC,.ERROR_MSG.size
; LD A,C
; LDIR
; ;
; LD DE,16*256 + (80-.ERROR_MSG.size)/2 ;X=0, Y=16
; LD C,BIOS.LP_SET_PLACE
; RST ToBIOS
; ;
; LD HL,#A000
; LD DE,0*256 + COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE
; LD B,A
; LD C,BIOS.LP_PRINT_LINE3
; RST ToBIOS
; ;
; .loop: DI
; HALT
; JR .loop
; ;
; .ERROR_MSG: DZ "Kernel panic! Boot disk lost. Press Ctrl+Alt+Del or RESET."
; .ERROR_MSG.size EQU $-.ERROR_MSG
;-----------------------[]
@ -449,7 +452,7 @@ KILL_FM:;
CP C
JR NZ,.skip
XOR A
LD (IY+_sFM.NAME),A ; £à®å ¥¬ ¬ ­¨¯ã«ïâ®à
LD (IY+_sFM.FS_REC.NAME),A ; £à®å ¥¬ ¬ ­¨¯ã«ïâ®à
.skip: DJNZ .loop_fm
;
POP AF

View File

@ -171,7 +171,7 @@
; IDE0 EQU #0C1C0
; IDE1 EQU #0C1C8
PART EQU #C000
PARTITION_BUFFER _sBOOT_SECTOR = #C000 ; EQU #C000 _sBOOT_SECTOR
HDDRIVE INC C
DEC C
@ -245,7 +245,7 @@ NX_DVCI: PUSH BC
LD C,BIOS.DRV_DETECT
RST ToBIOS
;JR C,.NO_DRIVE
CALL NC,PARTIT
CALL NC,DEFINE_PARTITIONS.BEGIN
POP BC
INC C
JR C,NX_DVCI
@ -515,35 +515,39 @@ CHECKH: PUSH IY
POP IY
RET
;-----------------
EASYDOS:
MEDIDOS:
HIGHDOS:
LD E,(IY+08)
LD D,(IY+09)
LD L,(IY+10)
LD H,(IY+11)
LD IX,(CURSECL)
;------------------------------[ PARTIT ]------------------------------;
DEFINE_PARTITIONS:
.FAT32_DOS:
.EASYDOS:
.MEDIDOS:
.HIGHDOS:
LD E,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 0)
LD D,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 1)
LD L,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 2)
LD H,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 3)
LD IX,(CURRENT_SECTOR_L)
ADD IX,DE
LD DE,(CURSECH)
LD DE,(CURRENT_SECTOR_H)
ADC HL,DE
LD D,XH
LD E,XL
;BPB SECTOR
LD IX,(OFFSECT)
LD (IX+LOGDRV.SECTOR_OFFSET+0),E ;BPB SECTOR
LD (IX+LOGDRV.SECTOR_OFFSET+1),D
LD (IX+LOGDRV.SECTOR_OFFSET+2),L
LD (IX+LOGDRV.SECTOR_OFFSET+3),H
LD E,(IY+12)
LD D,(IY+13)
LD L,(IY+14)
LD H,(IY+15)
LD (IX+LOGDRV.SIZE_IN_SECTORS+0),E ;SIZE DISK
LD (IX+LOGDRV.SIZE_IN_SECTORS+1),D
LD (IX+LOGDRV.SIZE_IN_SECTORS+2),L
LD (IX+LOGDRV.SIZE_IN_SECTORS+3),H
LD (IX + LOGDRV.SECTOR_OFFSET + 0),E
LD (IX + LOGDRV.SECTOR_OFFSET + 1),D
LD (IX + LOGDRV.SECTOR_OFFSET + 2),L
LD (IX + LOGDRV.SECTOR_OFFSET + 3),H
LD E,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 0)
LD D,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 1)
LD L,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 2)
LD H,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 3)
;SIZE DISK
LD (IX + LOGDRV.SIZE_IN_SECTORS + 0),E
LD (IX + LOGDRV.SIZE_IN_SECTORS + 1),D
LD (IX + LOGDRV.SIZE_IN_SECTORS + 2),L
LD (IX + LOGDRV.SIZE_IN_SECTORS + 3),H
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
ExtendedPartitionFlag+1:
.ExtendedPartitionFlag+1:
LD A,0
OR A ; !TODO § £à㧪  á à áè¨à¥­­®£® à §¤¥«  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
LD A,#FF
@ -551,10 +555,10 @@ ExtendedPartitionFlag+1:
;
POP BC
PUSH BC
LD A,4 ;!HARDCODE MBR: Number of entries in the partition table
LD A,+(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD) ; Number of entries in the partition table
SUB B
.not_supported:
LD (IX+LOGDRV.PARTITION_RECORD_NUM),A
LD (IX + LOGDRV.PARTITION_RECORD_NUM),A
;
;!TEST <09>®¤áâà å®¢ª  ®â ¯¥à¥¯®«­¥­¨ï â ¡«¨æë LOGDRV
LD A,(DRVCLC.count)
@ -564,66 +568,60 @@ ExtendedPartitionFlag+1:
LD (DRVCLC.count),A
;
LD A,(DRV_NUM)
LD (IX+LOGDRV.PHISICAL_DRV_NUMBER),A
LD (IX + LOGDRV.PHISICAL_DRV_NUMBER),A
LD DE,LOGDRV.TBL_Entry ;DSKITEM
ADD IX,DE
LD (OFFSECT),IX
JP NXTPART
; NXTPART:
; LD DE,#10 ;!HARDCODE SZ_PTE - Size of a partition table entry
; ADD IY,DE
; POP BC
; DJNZ DOSAGA
; AND A
; RET
JP .NextPartition
;
NOEXTDS:
.NotExtended:
CP PartitionSysTypes.FAT16
JR Z,HIGHDOS
JR Z,.HIGHDOS
CP PartitionSysTypes.FAT16_LBA
JR Z,HIGHDOS
JR Z,.HIGHDOS
CP PartitionSysTypes.FAT16_32Mb
JR Z,MEDIDOS
JR Z,.MEDIDOS
CP PartitionSysTypes.FAT12
JR Z,EASYDOS
JR Z,.EASYDOS
;[ ] fat32
CP PartitionSysTypes.FAT32
JP Z,.FAT32_DOS
CP PartitionSysTypes.FAT32_LBA
JP Z,.FAT32_DOS
;
CP PartitionSysTypes.Win_Ext_LBA
JR Z,SUBLEV
JR Z,.SubLevel
;[x] 17/12/23 ¯à®¯ã᪠ࠧ¤¥«®¢ á ­¥¨§¢¥áâ­ë¬¨ ”‘, ®¯â¨¬¨§ æ¨ï ¤¥â¥ªâ 
;OR A ;PartitionSysTypes.Empty
;OR A ;PartitionSysTypes.Empty
;JR NZ,NXTPART
JR NXTPART ; à §¤¥« ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
;POP BC ; ¡ « ­á á⥪ 
JR .NextPartition ; à §¤¥« ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
;POP BC ; ¡ « ­á á⥪ 
;RET
;POP BC
;OR A
;RET Z
;NODEFIN:
;SCF
;RET
;RET
;
PARTIT: IN A,(SLOT3)
.BEGIN: IN A,(SLOT3)
PUSH AF
LD A,SHARED_PAGE
OUT (SLOT3),A
CALL PARTIT1
CALL .Start
POP AF
OUT (SLOT3),A
RET
PARTIT1:
LD IX,0
.Start: LD IX,0
LD DE,0
LD (EXTDOSL),DE ;R01
LD (EXTDOSH),IX ;R01
PARTIT2:
LD (CURSECL),DE
LD (CURSECH),IX
CALL LOADSEC
;
LD HL,(PART+510) ;!HARDCODE Signature word
.LOOP: LD (CURRENT_SECTOR_L),DE
LD (CURRENT_SECTOR_H),IX
CALL .LOAD_SECTOR
;
LD HL,(PARTITION_BUFFER.MBR_SIGNATURE)
LD DE,#AA55
AND A
SBC HL,DE
@ -632,59 +630,59 @@ PARTIT2:
SCF
RET NZ
;
LD IY,PART+#01BE ;!HARDCODE MBR: Offset of partition table in the MBR
LD B,4 ;!HARDCODE MBR: Number of entries in the partition table
DOSAGA: PUSH BC
LD A,(IY+4)
LD IY,PARTITION_BUFFER.PARTITION_TABLE ; Offset of partition table in the MBR
LD B,+(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD) ; Number of entries in the partition table
.DOSAGA:
PUSH BC
LD A,(IY+_sMBR_PARTITION_RECORD.FS_ID)
CP PartitionSysTypes.Extended
JR NZ,NOEXTDS
SUBLEV: PUSH IY
LD DE,(CURSECL)
LD IX,(CURSECH)
JR NZ,.NotExtended
.SubLevel:
PUSH IY
LD DE,(CURRENT_SECTOR_L)
LD IX,(CURRENT_SECTOR_H)
PUSH DE
PUSH IX
;[ ] 17/12/23 ¯à®¯ã᪠ࠧ¤¥«®¢ á ­¥¨§¢¥áâ­ë¬¨ ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à  à §¤¥«®¢
LD A,(ExtendedPartitionFlag)
LD A,(.ExtendedPartitionFlag)
INC A
LD (ExtendedPartitionFlag),A ; !TODO § £à㧪  á à áè¨à¥­­®£® à §¤¥«  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
LD (.ExtendedPartitionFlag),A ; !TODO § £à㧪  á à áè¨à¥­­®£® à §¤¥«  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
;
CALL EXTDOS
CALL .ParseExtended
;[ ] 17/12/23 ¯à®¯ã᪠ࠧ¤¥«®¢ á ­¥¨§¢¥áâ­ë¬¨ ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à  à §¤¥«®¢
LD A,(ExtendedPartitionFlag)
LD A,(.ExtendedPartitionFlag)
DEC A
LD (ExtendedPartitionFlag),A ; !TODO § £à㧪  á à áè¨à¥­­®£® à §¤¥«  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
LD (.ExtendedPartitionFlag),A ; !TODO § £à㧪  á à áè¨à¥­­®£® à §¤¥«  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
;
POP IX
POP DE
LD (CURSECL),DE
LD (CURSECH),IX
CALL LOADSEC
LD (CURRENT_SECTOR_L),DE
LD (CURRENT_SECTOR_H),IX
CALL .LOAD_SECTOR
POP IY
NXTPART:
LD DE,#10 ;!HARDCODE SZ_PTE - Size of a partition table entry
.NextPartition:
LD DE,_sMBR_PARTITION_RECORD ;Size of a partition table entry
ADD IY,DE
POP BC
DJNZ DOSAGA
DJNZ .DOSAGA
AND A
RET
;
EXTDOS: LD HL,(EXTDOSL)
.ParseExtended:
LD HL,(EXTDOSL)
LD DE,(EXTDOSH)
LD A,L
OR H
OR E
OR D
LD E,(IY+08)
LD D,(IY+09)
LD L,(IY+10)
LD H,(IY+11)
JP NZ,EXTDOS2
LD E,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 0)
LD D,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 1)
LD L,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 2)
LD H,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 3)
JP NZ,.EXTDOS2
LD (EXTDOSL),DE
LD (EXTDOSH),HL
LD IX,(EXTDOSH)
JP PARTIT2
;
EXTDOS2:
.EXTDOS2:
LD IX,(EXTDOSL)
ADD IX,DE
PUSH IX
@ -693,27 +691,28 @@ EXTDOS2:
PUSH HL
POP IX
POP DE
JP PARTIT2
LOADSEC:
JP .LOOP
;
.LOAD_SECTOR:
PUSH IY
LD IX,(CURSECL)
LD HL,(CURSECH)
LD DE,PART
LD IX,(CURRENT_SECTOR_L)
LD HL,(CURRENT_SECTOR_H)
LD DE,PARTITION_BUFFER
LD A,(DRV_NUM)
LD BC,1*256 + BIOS.DRV_READ
RST ToBIOS
POP IY
RET
;----------------------------------------------------------------------;
;
DRV_NUM DB #00 ;PHISICAL DRIVE NUMBER. ­®¬¥à ¤¥¢ ©á  (#80/#81 - primary ¬ áâ¥à/á«¥©¢, #82/#83 - secondary ¬ áâ¥à/á«¥©¢)
CURSECL DW #0000 ;CURRENT SECTOR LOADED
CURSECH DW #0000
EXTDOSL DW #0000 ;CURRENT PARTITION TABLE
EXTDOSH DW #0000
OFFSECT DW LOGDRV ;POINTER ON CURRENT DISK RECORD
;=======================================================
;=======================================================================
; PHISICAL DRIVE NUMBER
; #80/#81 - primary ¬ áâ¥à/á«¥©¢, #82/#83 - secondary ¬ áâ¥à/á«¥©¢
DRV_NUM: DB #00
CURRENT_SECTOR_L: DW #0000
CURRENT_SECTOR_H: DW #0000
EXTDOSL: DW #0000 ;CURRENT PARTITION TABLE
EXTDOSH: DW #0000
OFFSECT: DW LOGDRV ;POINTER ON CURRENT DISK RECORD
;=======================================================================

View File

@ -1,41 +1,43 @@
;
STRUCT _sStack ; 256 bytes
buffer BLOCK 256,0
SPoint BYTE 0
.buffer BLOCK 256,0
.SPoint BYTE 0
ENDS
;
;
STRUCT _sEXE_HEADER ; 512 bytes
EXE_EXT TEXT 3,{"EX","E"}
VERSION BYTE 0
OFFCOD1 WORD 0
OFFCOD2 WORD 0
LOADER WORD 0
RESERVED BLOCK 6,0
LD_ADDR WORD 0
PC_REG WORD 0
SP_REG WORD 0
RESERVED2 BLOCK 490,0
.EXE_EXT TEXT 3,{"EX","E"}
.VERSION BYTE 0
.OFFCOD1 WORD 0
.OFFCOD2 WORD 0
.LOADER WORD 0
.RESERVED BLOCK 6,0
.LD_ADDR WORD 0
.PC_REG WORD 0
.SP_REG WORD 0
.RESERVED2 BLOCK 490,0
ENDS
;
;File Manipulator (FM)
STRUCT _sFM ; 47 bytes
;[ ] fat32
STRUCT _sFM ; 51 bytes
; from FAT
.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
; .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
; .FIRST_CLUSTER_H: WORD #0000 ;+ #14 +20 RESERVED
; .TIME: WORD #0000 ;+ #16 +22 TIME
; .DATE: WORD #0000 ;+ #18 +24 DATE
; .FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER ;!TODO fat32
; .F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE
.FS_REC: _sFAT_DIRECTORY_RECORD
; from Core
.F_POSITION: DWORD #00000000 ;+ #20 +32 FILE POSITION (FP)
.DIR_CLUSTER: WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER
@ -44,10 +46,10 @@ RESERVED2 BLOCK 490,0
.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 ‘â à訩 ¡ ©â ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
.KnownCluster_L: WORD #0000 ;+ #2B +43 Œ« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩« 
.KnownCluster_H: WORD #0000 ;+ #2C +44 ‘â à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩« 
.KnownOffset_L: WORD #0000 ;+ #2D +45 Œ« ¤è¥¥ á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
.KnownOffset_H: WORD #0000 ;+ #2E +46 ‘â à襥 á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
ENDS
;
@ -67,12 +69,12 @@ RESERVED2 BLOCK 490,0
;
STRUCT _sBuffers
FileManipulator _sFM ; 44 bytes + 44 bytes * (FMCOUNT-1)
FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0 ;
BootSector _sBOOT_SEC ; 62 bytes ;!TODO ¯¥à¥­¥á⨠¢ ®¡« áâì ¡ãä¥à®¢
EXE_Header _sEXE_HEADER ; 512 bytes
Stack _sStack ; 256 bytes
Buffer BLOCK 512,0 ; FOR BUFFER & SECBUF
MemoryTable BLOCK 256,0 ; 256 bytes
.FileManipulator _sFM ; 44 bytes + 44 bytes * (FMCOUNT-1)
.FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0 ;
.BootSector _sBOOT_SECTOR_PARAMS ; 62 bytes ;!TODO ¯¥à¥­¥á⨠¢ ®¡« áâì ¡ãä¥à®¢
.EXE_Header _sEXE_HEADER ; 512 bytes
.Stack _sStack ; 256 bytes
.Buffer BLOCK 512,0 ; FOR BUFFER & SECBUF
.MemoryTable BLOCK 256,0 ; 256 bytes
ENDS
;

View File

@ -1 +1 @@
943
942

View File

@ -1,5 +1,5 @@
;
DEFINE TEST_FEATURE 1
DEFINE TEST_FEATURE 0
;
;
@ -17,6 +17,8 @@
;LD_DSK EQU 16 ; ¬ ªá¨¬ «ì­®¥ ª®«¨ç¥á⢮ «®£¨ç¥áª¨å HDD ¤¨áª®¢ ¢ á¨á⥬¥
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
DEFINE _FAT32_ENABLE 1 ;!TODO ¯®ª  ­¥¤®¤¥« ­®
define _bit (1<?((FAT_CACHE.Sectors-1)
define _shift _bit&1)) + _bit&2)) + _bit&4)) + _bit&8)) + _bit&16)) + _bit&32)) + _bit&64)) + _bit&128))
;
@ -83,7 +85,7 @@ ENVADDR EQU #E400
;FAT_CACHE EQU #C000
FMCOUNT EQU 10 ; Š®«¨ç¥á⢮ ä ©«®¢ëå ¬ ­¨¯ã«ïâ®à®¢
HANDBUF.SIZE EQU 32
HANDBUF.SIZE EQU 32 ; !HARDCODE _sFAT_DIRECTORY_RECORD
;----------------------------------------------------;
;

View File

@ -54,7 +54,7 @@ cmd_dir:
1: ld hl,work_buffer1 ; ¨¬ï ä ©« 
ld de,work_buffer1 ; 80 ¡ãä¥à
ld a,#37 ;  âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ )
ld bc,0*256 + Dss.F_First ; f_first (ä®à¬ â 11)
ld bc,Dss.F_First.FATname ; f_first (ä®à¬ â 11)
RST ToDSS
JR C,.dir_empty ;R14
CALL .Print_Header
@ -610,7 +610,7 @@ read_disk_info:
ld hl,mask_fname ; "*.*" ¨¬ï ¬¥âª¨
ld de,work_buffer1 ; ªã¤ 
ld a,FAT_ATTR.VOLUME_ID ;  âਡãâ ¬¥âª¨ ⮬ 
ld bc,0*256 + Dss.F_First ; f_first, ä®à¬ â 11
ld bc,Dss.F_First.FATname ; f_first, ä®à¬ â 11
RST ToDSS
push af
call restore_path ; ¢®ááâ. ⥪. ¯ãâì

@ -1 +1 @@
Subproject commit cbc1fd596a5a56298407c13a529a574e968235c7
Subproject commit 42dfec072030351eb386205ead32983bbc1c4909