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 SCF
RET NZ RET NZ
LD IY,BOOT ;Analysing Block Parametr BIOS LD IY,BOOT ;Analysing Block Parametr BIOS
LD A,(IY+_sBOOT_SEC.ID_FORM) LD A,(IY+_sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
CP #F0 CP #F0
RET C RET C
LD HL,0 ;calc. first sector FAT LD HL,0 ;calc. first sector FAT
LD (DIR_FRH),HL LD (DIR_FRH),HL
LD E,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec LD E,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS) ;Reserve sec
LD D,(IY+_sBOOT_SEC.RESERVE+1) LD D,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS+1)
ADD HL,DE ADD HL,DE
LD (FAT_FRM),HL ;first sector FAT LD (FAT_FRM),HL ;first sector FAT
LD E,(IY+_sBOOT_SEC.S_P_F) ;sectors in FAT LD E,(IY+_sBOOT_SECTOR_PARAMS.S_P_F) ;sectors in FAT
LD D,(IY+_sBOOT_SEC.S_P_F+1) LD D,(IY+_sBOOT_SECTOR_PARAMS.S_P_F+1)
LD A,(BOOT.FAT_NUM) ;amount FATs LD A,(BOOT.FAT_NUM) ;amount FATs
C_DATA1: ADD HL,DE C_DATA1: ADD HL,DE
DEC A DEC A
JR NZ,C_DATA1 JR NZ,C_DATA1
LD (DIR_FRM),HL ;first sector DIR LD (DIR_FRM),HL ;first sector DIR
EX DE,HL EX DE,HL
LD L,(IY+_sBOOT_SEC.F_P_DIR) ;Number file handel LD L,(IY+_sBOOT_SECTOR_PARAMS.F_P_DIR) ;Number file handel
LD H,(IY+_sBOOT_SEC.F_P_DIR+1) LD H,(IY+_sBOOT_SECTOR_PARAMS.F_P_DIR+1)
ADD HL,HL ADD HL,HL
ADD HL,HL ADD HL,HL
ADD HL,HL ADD HL,HL
@ -381,8 +381,8 @@ C_DATA1: ADD HL,DE
ADD HL,DE ADD HL,DE
LD (DAT_FRM),HL ;First sector data LD (DAT_FRM),HL ;First sector data
LD C,(IY+_sBOOT_SEC.B_P_S) ;Size sector LD C,(IY+_sBOOT_SECTOR_PARAMS.B_P_S) ;Size sector
LD B,(IY+_sBOOT_SEC.B_P_S+1) LD B,(IY+_sBOOT_SECTOR_PARAMS.B_P_S+1)
LD HL,0 LD HL,0
LD A,(BOOT.S_P_C) LD A,(BOOT.S_P_C)
NEXTAD3: NEXTAD3:
@ -437,7 +437,7 @@ BPB_FAT
XOR A XOR A
RET RET
IBMDOS_ LD A,(IY+_sBOOT_SEC.ID_FORM) IBMDOS_ LD A,(IY+_sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
CP #F0 CP #F0
RET C RET C
CP #F8 CP #F8
@ -724,7 +724,7 @@ MASKARE DB "SYSTEM DOS"
FATMSG DB "FAT" FATMSG DB "FAT"
; Area for boot sector [512Bytes] ; Area for boot sector [512Bytes]
BOOT _sBOOT_SEC = $ BOOT _sBOOT_SECTOR_PARAMS = $
; BOOT EQU $ ; BOOT EQU $
; ID_NAME EQU BOOT+#03 ; +03 DOS NAME ; 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 LD BC,1*256 + BIOS.DRV_READ
RST ToBIOS RST ToBIOS
POP BC POP BC
LD HL,(buffer + _sBOOT_SEC.RESERVE) LD HL,(buffer + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS)
LD DE,04 ;!HARDCODE ¬¨­¨¬ «ì­®¥ à ááâ®ï­¨¥ ­  ¤à ©¢¥ ®â ­ã«¥¢®£® ᥪâ®à  ¤® ä â  (¤«¨­  § £àã§ç¨ª  + 1) LD DE,04 ;!HARDCODE ¬¨­¨¬ «ì­®¥ à ááâ®ï­¨¥ ­  ¤à ©¢¥ ®â ­ã«¥¢®£® ᥪâ®à  ¤® ä â  (¤«¨­  § £àã§ç¨ª  + 1)
AND A AND A
SBC HL,DE SBC HL,DE

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -25,6 +25,12 @@ SCANDRV:
LD A,Dss.DRV.RescanDRV LD A,Dss.DRV.RescanDRV
LD C,Dss.DRV.RescanDRV LD C,Dss.DRV.RescanDRV
RST ToDSS.DRV 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 LD (LDRIVE),A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 4. ­  ¢á直© á«ãç © ¯¥à¥ç¨â뢠¥¬ ¤¨à४â®à¨î ; 4. ­  ¢á直© á«ãç © ¯¥à¥ç¨â뢠¥¬ ¤¨à४â®à¨î
@ -47,6 +53,10 @@ SCANDRV:
RET PO RET PO
EI EI
RET 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 BC
POP DE POP DE
RET C RET C
LD (IY+_sFM.TIME),E LD (IY + _sFM.FS_REC.TIME),E
LD (IY+_sFM.TIME+1),D LD (IY + _sFM.FS_REC.TIME+1),D
LD (IY+_sFM.DATE),C LD (IY + _sFM.FS_REC.DATE),C
LD (IY+_sFM.DATE+1),B LD (IY + _sFM.FS_REC.DATE+1),B
SET 7,(IY+_sFM.ACCESS_MODE) ;R006 ; ãáâ. ¯à¨§­ ª ¨§¬¥­¥­¨ï ä ©«  SET 7,(IY + _sFM.ACCESS_MODE) ;R006 ; ãáâ. ¯à¨§­ ª ¨§¬¥­¥­¨ï ä ©« 
AND A AND A
RET RET
; ;

View File

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

View File

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

View File

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

View File

@ -216,24 +216,19 @@ OPENDSK:;!TEST DRV.Open
POP BC POP BC
JP C,.error JP C,.error
;[ ] 29/02/2024 fix "open drive error" ;[ ] 29/02/2024 fix "open drive error"
IF TEST_FEATURE
LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE)
LD D,A LD D,A
PUSH DE PUSH DE
ENDIF
; ;
LD A,B LD A,B
LD (FatBuffer.DRIVE),A LD (FatBuffer.DRIVE),A
; ;
CALL RD_BPB CALL RD_BPB
;[ ] 29/02/2024 fix "open drive error" ;[ ] 29/02/2024 fix "open drive error"
IF TEST_FEATURE
POP DE POP DE
LD A,D LD A,D
JR C,.error_disk JR C,.error_disk
ELSE ; RET C
RET C
ENDIF
; ;
.exit: LD A,(LDRIVE) .exit: LD A,(LDRIVE)
AND A AND A
@ -244,19 +239,28 @@ OPENDSK:;!TEST DRV.Open
LD A,DSS_Error.sys.NOT_READY LD A,DSS_Error.sys.NOT_READY
RET RET
;[ ] 29/02/2024 fix "open drive error" ;[ ] 29/02/2024 fix "open drive error"
IF TEST_FEATURE
.error_disk: .error_disk:
CALL OPENDSK.force 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 LD A,DSS_Error.sys.NOT_READY
SCF SCF
RET 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 ;XOR A
;CALL SET_FM ;CALL SET_FM
LD IY,CORE_BUFFERS.FM_BUF LD IY,CORE_BUFFERS.FM_BUF
@ -266,11 +270,12 @@ OPENDIR:;!TEST ;[x] some optimize
JR NZ,.SUBDIR JR NZ,.SUBDIR
.REROOT1: .REROOT1:
LD DE,0 LD DE,0
;!TEST ;[x] some optimize ;[x] some optimizations
;LD (IY+_sFM.ST_CLUSTER),E ;LD (IY+_sFM.FIRST_CLUSTER_L),E
;LD (IY+_sFM.ST_CLUSTER+1),D ;LD (IY+_sFM.FIRST_CLUSTER_L+1),D
; [ ] fat32
EX DE,HL 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 EX DE,HL
; ;
CALL LOADDIR CALL LOADDIR
@ -284,11 +289,12 @@ OPENDIR:;!TEST ;[x] some optimize
.SUBDIR: .SUBDIR:
CP "." CP "."
JR NZ,.SUBDIR2 JR NZ,.SUBDIR2
;!TEST ;[x] some optimize ;!TEST ;[x] some optimizations
;LD A,(IY+_sFM.ST_CLUSTER) ;R005 ;LD A,(IY+_sFM.FIRST_CLUSTER_L) ;R005
LD A,(CORE_BUFFERS.FM_BUF + _sFM.ST_CLUSTER) ;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 JR NZ,.SUDI1 ;R005
INC HL ;R005 INC HL ;R005
LD A,(HL) ;R005 LD A,(HL) ;R005
@ -314,16 +320,16 @@ OPENDIR:;!TEST ;[x] some optimize
.SUBDIR3: .SUBDIR3:
CALL FINDDIR CALL FINDDIR
RET C RET C
;!TEST ;[x] some optimize ;!TEST ;[x] some optimizations
;LD (IY+_sFM.ST_CLUSTER),E ;LD (IY+_sFM.FIRST_CLUSTER_L),E
;LD (IY+_sFM.ST_CLUSTER+1),D ;LD (IY+_sFM.FIRST_CLUSTER_L+1),D
;LD DE,#4000 ;!HARDCODE ;LD DE,#4000 ;!HARDCODE
;LD (IY+_sFM.F_SIZE),E ;LD (IY+_sFM.F_SIZE),E
;LD (IY+_sFM.F_SIZE+1),D ;LD (IY+_sFM.F_SIZE+1),D
EX DE,HL 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 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 EX DE,HL
; ;
JP LOADDIR JP LOADDIR
@ -335,7 +341,6 @@ OPENDIR:;!TEST ;[x] some optimize
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; .custom:
; <20>८¡à §®¢ âì ¨¬ï 8.3 -> 11 ä®à¬ â ; <20>८¡à §®¢ âì ¨¬ï 8.3 -> 11 ä®à¬ â
; ¢å®¤: hl = 8.3 ¨¬ï ; ¢å®¤: hl = 8.3 ¨¬ï
; de = ¡ãä¥à ¨¬¥­¨ 11 ᨬ¢. ä®à¬ â  ; 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 ;R01
; Area for boot sector BootSector. ; 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 ; end boot sector
;R01 ;R01
@ -451,7 +427,7 @@ ADRST10: ;DS 512 ;,0
INCLUDE "EXECUTE.ASM" INCLUDE "EXECUTE.ASM"
INCLUDE "INTMOUSE.ASM" INCLUDE "INTMOUSE.ASM"
INCLUDE "Procedures.asm" INCLUDE "Procedures.asm"
INCLUDE "Kernel_Panic.asm"
;!FIXIT ª ¡ãä¥à ¬ ;!FIXIT ª ¡ãä¥à ¬
; Œ áᨢ «®£. ­®¬¥à®¢ ¡ ­®ª à áè¨à¥­¨ï DSS ; Œ áᨢ «®£. ­®¬¥à®¢ ¡ ­®ª à áè¨à¥­¨ï DSS
@ -486,15 +462,15 @@ WorkDirectory: DB '\'
CLEAR_ZONE.start EQU $ CLEAR_ZONE.start EQU $
MODULE CORE_BUFFERS MODULE CORE_BUFFERS
BUFFERSplace _sBuffers=$ BUFFERSplace _sBuffers=$
FM_BUF _sFM = BUFFERSplace.FileManipulator FM_BUF _sFM = BUFFERSplace.FileManipulator
.Size EQU _sFM .Size EQU _sFM
.FullSize EQU FMCOUNT*FM_BUF.Size .FullSize EQU FMCOUNT*FM_BUF.Size
BootSector _sBOOT_SEC = BUFFERSplace.BootSector BootSector _sBOOT_SECTOR_PARAMS = BUFFERSplace.BootSector
EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header
XSTACK EQU BUFFERSplace.Stack.SPoint XSTACK EQU BUFFERSplace.Stack.SPoint
BUFFER EQU BUFFERSplace.Buffer BUFFER EQU BUFFERSplace.Buffer
SECBUF EQU BUFFER ;!TODO ®â¤¥«¨âì SECBUF ®â BUFFER SECBUF EQU BUFFER ;!TODO ®â¤¥«¨âì SECBUF ®â BUFFER
ENDMODULE ENDMODULE
CLEAR_ZONE.size EQU _sBuffers CLEAR_ZONE.size EQU _sBuffers

View File

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

View File

@ -11,8 +11,8 @@
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; <20>®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ª â «®£  ; <20>®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ª â «®£ 
; ;
; ¢å®¤: a= âਡãâ § ¯¨á¨ ; ¢å®¤: a =  âਡãâ § ¯¨á¨
; ¢ë室: de'=¨­¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£  ; ¢ë室: de = ¨­¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£ 
; (HANDBUF) = file's direcory record ; (HANDBUF) = file's direcory record
; CF - ª â «®£ ­¥ ­ ©¤¥­ ; CF - ª â «®£ ­¥ ­ ©¤¥­
SEARCH: SEARCH:
@ -63,21 +63,23 @@ SEARCH:
INC HL INC HL
INC DE INC DE
DJNZ .loop_compare DJNZ .loop_compare
;
LD D,XH
LD E,XL
;[x] 9/11/23 ®¯â¨¬¨§ æ¨ï ¤«ï ¨­¤¥ªá  § ¯¨á¨ ¢ ᯨ᪥ ª â «®£  (¢®§¬®¦­® ¯®­ ¤®¡¨âáï ¢¥à­ãâì) ;[x] 9/11/23 ®¯â¨¬¨§ æ¨ï ¤«ï ¨­¤¥ªá  § ¯¨á¨ ¢ ᯨ᪥ ª â «®£  (¢®§¬®¦­® ¯®­ ¤®¡¨âáï ¢¥à­ãâì)
EXX
; LD D,XH ; LD D,XH
; LD E,XL ; LD E,XL
LD D,XH PUSH IX
LD E,XL
EXX
LD D,XH
LD E,XL
EXX EXX
; ;
LD HL,HANDBUF LD HL,HANDBUF
EX DE,HL EX DE,HL
LD BC,HANDBUF.SIZE LD BC,HANDBUF.SIZE
LDIR LDIR
;POP AF ;[x] 9/11/23 ®¯â¨¬¨§ æ¨ï ¤«ï ¨­¤¥ªá  § ¯¨á¨ ¢ ᯨ᪥ ª â «®£  (¢®§¬®¦­® ¯®­ ¤®¡¨âáï 㤠«¨âì)
POP DE
;
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
EX AF,AF' EX AF,AF'
@ -174,13 +176,13 @@ FINDDIR:
PUSH AF PUSH AF
LD IX,DIRPAGE.buffer LD IX,DIRPAGE.buffer
.big_loop: .big_loop:
LD A,(IX+00) LD A,(IX + _sFAT_DIRECTORY_RECORD.NAME)
OR A OR A
JR Z,.error JR Z,.error
CP #E5 CP #E5
JR Z,.next_step JR Z,.next_step
LD A,(IX+11) ;!HARDCODE LD A,(IX + _sFAT_DIRECTORY_RECORD.ATTRIBUT)
AND #10 ;!HARDCODE AND FAT_ATTR.DIRECTORY
JR Z,.next_step JR Z,.next_step
LD HL,MASKARE LD HL,MASKARE
LD D,XH LD D,XH
@ -197,10 +199,10 @@ FINDDIR:
INC DE INC DE
DJNZ .loop DJNZ .loop
; ;
LD A,(IX+0) LD A,(IX + _sFAT_DIRECTORY_RECORD.NAME)
CP "." CP "."
JP NZ,.ADDSPEC JP NZ,.ADDSPEC
LD A,(IX+1) ;!HARDCODE LD A,(IX + _sFAT_DIRECTORY_RECORD.NAME + 1)
CP "." CP "."
JP NZ,.IT_DIR JP NZ,.IT_DIR
LD HL,WorkDirectory LD HL,WorkDirectory
@ -287,9 +289,9 @@ FINDDIR:
; .MM3: LD (HL),0 ; .MM3: LD (HL),0
; ; JP IT_DIR ; ; JP IT_DIR
; ;
.IT_DIR: .IT_DIR: ; [ ] fat32
LD E,(IX+_sFM.ST_CLUSTER) LD E,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
LD D,(IX+_sFM.ST_CLUSTER+1) LD D,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
AND A AND A
@ -331,25 +333,20 @@ LOADDIR:
PUSH AF PUSH AF
;!TEST no ldir ;!TEST no ldir
; ®ç¨áâ¨âì ª¥è ª â «®£  ; ®ç¨áâ¨âì ª¥è ª â «®£ 
; LD HL,#C000 ; LD HL,#C000
; LD DE,#C001 ; LD DE,#C001
; LD BC,#3FFF ; LD BC,#3FFF
; LD (HL),L ; LD (HL),L
; LDIR ; LDIR
; ;
;
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª  LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD (IY+_sFM.DRIVE),A ; á®åà. ¢ ¤¥áªà¨¯â®à LD (IY+_sFM.DRIVE),A ; á®åà. ¢ ¤¥áªà¨¯â®à
; ; ­®¬¥à ¯¥à¢®£® ª« áâ¥à 
;LD D,(IY+_sFM.ST_CLUSTER+1) ; de=­®¬¥à ¯¥à¢®£® ª« áâ¥à  ; [ ] fat32
;LD E,(IY+_sFM.ST_CLUSTER) LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
;LD A,D OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
;OR E
; ­®¬¥à ¯¥à¢®£® ª« áâ¥à 
LD A,(IY+_sFM.ST_CLUSTER)
OR (IY+_sFM.ST_CLUSTER+1)
;
JP Z,.LROTDIR ; root ?? JP Z,.LROTDIR ; root ??
;
LD HL,DIRPAGE.buffer ; ªã¤  LD HL,DIRPAGE.buffer ; ªã¤ 
LD DE,#4000 ; ᪮«ìª® LD DE,#4000 ; ᪮«ìª®
XOR A ; ¤¥áªà¨¯â®à XOR A ; ¤¥áªà¨¯â®à
@ -362,17 +359,10 @@ LOADDIR:
LD HL,(FatBuffer.DIR_FRH) ; áâ. à §àï¤ LD HL,(FatBuffer.DIR_FRH) ; áâ. à §àï¤
LD IX,(FatBuffer.DIR_FRL) ; ­®¬¥à «®£. ᥪâ®à  LD IX,(FatBuffer.DIR_FRL) ; ­®¬¥à «®£. ᥪâ®à 
LD A,(FatBuffer.DIR_S_S) LD A,(FatBuffer.DIR_S_S)
;!TEST LD B,32 ; !HARDCODE 16384/(sector 512). à §¬¥à root-ª â «®£ 
LD B,32 ; !HARDCODE 16384/(sector 512). à §¬¥à root-ª â «®£  CP B
CP B JR NC,.RTD1
JR NC,.RTD1 LD B,A ; ç¨á«® ᥪâ®à®¢
LD B,A ; ç¨á«® ᥪâ®à®¢
;LD B,32 ; !HARDCODE 16384/(sector 512). à §¬¥à root-ª â «®£ 
;SUB B
;JR NC,.RTD1
;ADD A,B
;LD B,A ; ç¨á«® ᥪâ®à®¢
;
.RTD1: LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª  .RTD1: LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD DE,DIRPAGE.buffer ; ¡ãä¥à LD DE,DIRPAGE.buffer ; ¡ãä¥à
LD C,Dss.DRV.Read ; ç⥭¨¥ ᥪâ®à®¢ LD C,Dss.DRV.Read ; ç⥭¨¥ ᥪâ®à®¢
@ -453,13 +443,15 @@ SAVEDIR:
; ;
LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE)
LD (IY+_sFM.DRIVE),A LD (IY+_sFM.DRIVE),A
LD D,(IY+_sFM.ST_CLUSTER) ;[ ] fat32
LD E,(IY+_sFM.ST_CLUSTER+1) LD D,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
LD E,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
LD A,D LD A,D
OR E OR E
JP Z,.SROTDIR JP Z,.SROTDIR
LD HL,DIRPAGE.buffer LD HL,DIRPAGE.buffer
; à §¬¥à ᯨ᪠ ª â «®£  size_cash_directory ; à §¬¥à ᯨ᪠ ª â «®£  size_cash_directory
;!FIXIT ¥á«¨ ®­  ­ã¦­ , â® ¯à®¢¥à¨âì ­  ¡ £¨ (­ ¯à¨¬¥à, à §¬¥à ¤¨à४â®à¨¨ ¬¥­ìè¥ ¯à¨ ®âªàë⨨ ¨ ¡®«ìè¥ ¯®á«¥ ¯à ¢®ª)
.DIRSIZE+1: .DIRSIZE+1:
LD DE,0 LD DE,0
XOR A XOR A
@ -489,23 +481,21 @@ SAVEDIR:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; !FIXIT çñâ ­¥ ¨á¯®«ì§ã¥âáï ; ­¥ ¨á¯®«ì§ã¥âáï
IF COMPILE_UNUSED_CODE ; TESTDSK: ;????? ¢®§¬®¦­®, çâ® âãâ «®£¨ç­¥¥, 祬 ¢ ­ ç «¥ OPENDSK, ¥á«¨ ¡ã¤¥â à ¡®â âì Dss.DRV.Open
TESTDSK: ;????? ¢®§¬®¦­®, çâ® âãâ «®£¨ç­¥¥, 祬 ¢ ­ ç «¥ OPENDSK, ¥á«¨ ¡ã¤¥â à ¡®â âì Dss.DRV.Open ; LD A,(FatBuffer.DRIVE)
LD A,(FatBuffer.DRIVE) ; LD C,Dss.DRV.MediaCheck
LD C,Dss.DRV.MediaCheck ; RST ToDSS.DRV
RST ToDSS.DRV ; OR A
OR A ; RET Z
RET Z
ENDIF
; ॣ. D - ­®¬¥à ¤¨áª  ; ॣ. D - ­®¬¥à ¤¨áª 
RD_BPB: LD C,SLOT3 RD_BPB: LD C,SLOT3
IN B,(C) IN B,(C)
PUSH BC PUSH BC
IN A,(SLOT0) IN A,(SLOT0)
OUT (SLOT3),A OUT (SLOT3),A
LD A,(FatBuffer.DRIVE) ;¢ë§®¢ RD_BPB ¬®¦¥â ¢ ¤ «ì­¥©è¥¬ ¯®­ ¤®¡¨âìáï, ¯ã᪠© ®­  á ¬  ¤®áâ ñâ ¯¥à¥¬¥­­ãî DRIVE LD A,(FatBuffer.DRIVE)
;R08 ;R08
;LD DE,BOOT+#C000 ;LD DE,BOOT+#C000
LD DE,CORE_BUFFERS.SECBUF+#C000 LD DE,CORE_BUFFERS.SECBUF+#C000
@ -519,7 +509,7 @@ RD_BPB: LD C,SLOT3
//PUSH IY ; ¯®ª  ¡¥§ ¨­¤¥ªá­®£®, ­® ¬®¦¥â ¯à¨£®¤¨âìáï //PUSH IY ; ¯®ª  ¡¥§ ¨­¤¥ªá­®£®, ­® ¬®¦¥â ¯à¨£®¤¨âìáï
LD DE,#AA55 ; ᨣ­ âãà  ;R05 LD DE,#AA55 ; ᨣ­ âãà  ;R05
LD HL,(CORE_BUFFERS.SECBUF+510) ;R08 ;R07 LD HL,(CORE_BUFFERS.SECBUF+_sBOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07
;R05 ;R05
AND A AND A
SBC HL,DE SBC HL,DE
@ -527,38 +517,38 @@ RD_BPB: LD C,SLOT3
;R08 ;R08
LD HL,CORE_BUFFERS.SECBUF LD HL,CORE_BUFFERS.SECBUF
LD DE,CORE_BUFFERS.BootSector LD DE,CORE_BUFFERS.BootSector
LD BC,_sBOOT_SEC ; size LD BC,_sBOOT_SECTOR_PARAMS ; size
LDIR LDIR
; ;
//LD IY,BootSector ; ¯®ª  ¡¥§ ¨­¤¥ªá­®£®, ­® ¬®¦¥â ¯à¨£®¤¨âìáï //LD IY,BootSector ; ¯®ª  ¡¥§ ¨­¤¥ªá­®£®, ­® ¬®¦¥â ¯à¨£®¤¨âìáï
//LD A,(IY+_sBOOT_SEC.ID_FORM) //LD A,(IY+_sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
LD A,(CORE_BUFFERS.BootSector.ID_FORM) LD A,(CORE_BUFFERS.BootSector.DRIVE_TYPE)
CP #F0 CP #F0
JP C,DOS_X_Error.UnknownBPB JP C,DOS_X_Error.UnknownBPB
;!TEST ;!TEST
;LD HL,0 ; calc. first sector FAT ;LD HL,0 ; calc. first sector FAT
;LD E,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec ;LD E,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS) ;Reserve sec
;LD D,(IY+_sBOOT_SEC.RESERVE+1) ;LD D,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS+1)
;ADD HL,DE ;ADD HL,DE
//LD L,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec //LD L,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS) ;Reserve sec
//LD H,(IY+_sBOOT_SEC.RESERVE+1) //LD H,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS+1)
LD HL,(CORE_BUFFERS.BootSector.RESERVE) LD HL,(CORE_BUFFERS.BootSector.RESERVED_SECTORS)
; ;
; LD E,(IY+_sBOOT_SEC.HIDDEN) ;Hidden sec ; LD E,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN) ;Hidden sec
; LD D,(IY+_sBOOT_SEC.HIDDEN+1) ; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1)
; ADD HL,DE ; ADD HL,DE
;LD (FatBuffer.FAT_FRM),HL ; first sector FAT ;LD (FatBuffer.FAT_FRM),HL ; first sector FAT
LD (FatBuffer.FAT1_XX),HL ; first sector FAT #1 LD (FatBuffer.FAT1_XX),HL ; first sector FAT #1
LD (FatBuffer.FAT2_XX),HL LD (FatBuffer.FAT2_XX),HL
//LD E,(IY+_sBOOT_SEC.S_P_F) ; sectors in FAT //LD E,(IY+_sBOOT_SECTOR_PARAMS.S_P_F) ; sectors in FAT
//LD D,(IY+_sBOOT_SEC.S_P_F+1) //LD D,(IY+_sBOOT_SECTOR_PARAMS.S_P_F+1)
LD DE,(CORE_BUFFERS.BootSector.S_P_F) LD DE,(CORE_BUFFERS.BootSector.S_P_F)
@ -577,8 +567,8 @@ RD_BPB: LD C,SLOT3
AND A AND A
; CF = 0 ; CF = 0
//LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sectors //LD C,(IY+_sBOOT_SECTOR_PARAMS.B_P_S) ; Size sectors
//LD B,(IY+_sBOOT_SEC.B_P_S+1) //LD B,(IY+_sBOOT_SECTOR_PARAMS.B_P_S+1)
LD BC,(CORE_BUFFERS.BootSector.B_P_S) LD BC,(CORE_BUFFERS.BootSector.B_P_S)
; RL C ; RL C
; RL B ; RL B
@ -591,19 +581,23 @@ RD_BPB: LD C,SLOT3
; LD A,C ; LD A,C
;;;; ;;;;
LD A,B LD A,B
;
RL C RL C
RLA RLA
;
RL C RL C
RLA RLA
;
RL C RL C
RLA RLA
;
LD C,A LD C,A
LD B,0 ; BC - File handels in sectors LD B,0 ; BC - File handels in sectors
;;;; ;;;;
LD (FatBuffer.F_P_S),A LD (FatBuffer.F_P_S),A
//LD E,(IY+_sBOOT_SEC.F_P_DIR) ; Number file handel //LD E,(IY+_sBOOT_SECTOR_PARAMS.F_P_DIR) ; Number file handel
//LD D,(IY+_sBOOT_SEC.F_P_DIR+1) //LD D,(IY+_sBOOT_SECTOR_PARAMS.F_P_DIR+1)
LD DE,(CORE_BUFFERS.BootSector.F_P_DIR) LD DE,(CORE_BUFFERS.BootSector.F_P_DIR)
EX DE,HL EX DE,HL
@ -628,19 +622,19 @@ RD_BPB: LD C,SLOT3
;LD H,B ; âãâ ¢ B ­®«ì ¤®«¦¥­ ¡ëâì ;LD H,B ; âãâ ¢ B ­®«ì ¤®«¦¥­ ¡ëâì
;LD L,B ;LD L,B
;LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sector ;LD C,(IY+_sBOOT_SECTOR_PARAMS.B_P_S) ; Size sector
;LD B,(IY+_sBOOT_SEC.B_P_S+1) ;LD B,(IY+_sBOOT_SECTOR_PARAMS.B_P_S+1)
//LD L,(IY+_sBOOT_SEC.B_P_S) ; Size sector //LD L,(IY+_sBOOT_SECTOR_PARAMS.B_P_S) ; Size sector
//LD H,(IY+_sBOOT_SEC.B_P_S+1) //LD H,(IY+_sBOOT_SECTOR_PARAMS.B_P_S+1)
LD HL,(CORE_BUFFERS.BootSector.B_P_S) ; Size sector 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 ;NEXTAD3
; .loop3: ADD HL,BC ; calc. cluster size ; .loop3: ADD HL,BC ; calc. cluster size
; DEC A ; DEC A
; JR NZ,.loop3 ; JR NZ,.loop3
;!TODO ¯à®¢¥à¨âì ¯à ¢¨«ì­® «¨ áç¨â ¥â
XOR 1 ; calc. cluster size XOR 1 ; calc. cluster size
JR Z,.loop3.end JR Z,.loop3.end
RRA RRA
@ -649,7 +643,6 @@ RD_BPB: LD C,SLOT3
JP NC,.loop3 JP NC,.loop3
.loop3.end: .loop3.end:
; ;
LD (FatBuffer.CLU_LEN),HL LD (FatBuffer.CLU_LEN),HL
EX DE,HL EX DE,HL
LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize
@ -663,6 +656,12 @@ RD_BPB: LD C,SLOT3
;ENDIF ;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 HL,CORE_BUFFERS.BootSector.ID_FAT ;!!!!!   ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥­­®£® BootSector, â® ¡ã¤¥â ¡ £ 
LD DE,FatBuffer.MSG LD DE,FatBuffer.MSG
LD B,3 LD B,3
@ -678,10 +677,25 @@ RD_BPB: LD C,SLOT3
INC HL INC HL
CP ' ' CP ' '
JR Z,.loop6 JR Z,.loop6
;
CP '1' CP '1'
JP NZ,DOS_X_Error.UnknownBPB IF _FAT32_ENABLE
LD A,(HL) 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 CP '6' ; FAT16
LD HL,#FFFF LD HL,#FFFF
JR Z,.BPB_FAT JR Z,.BPB_FAT
@ -689,8 +703,9 @@ RD_BPB: LD C,SLOT3
JP NZ,DOS_X_Error.UnknownBPB JP NZ,DOS_X_Error.UnknownBPB
LD HL,#0FFF LD HL,#0FFF
.BPB_FAT: .BPB_FAT:
LD (FatBuffer.FAT_TYP),A SUB #26 ; A-#26 = fat type (12, 16, 32)
LD (FatBuffer.ENDCLUS),HL LD (FatBuffer.FAT_TYPE),A
LD (FatBuffer.ENDCLUS_LOW),HL
;!TODO ­¥ ¨á¯®«ì§ãîâáï §­ ç¥­¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ­ï¥¬ë¥ ¢ FatBuffer ;!TODO ­¥ ¨á¯®«ì§ãîâáï §­ ç¥­¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ­ï¥¬ë¥ ¢ FatBuffer
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
@ -698,8 +713,8 @@ RD_BPB: LD C,SLOT3
LD HL,0 LD HL,0
//LD C,(IY+_sBOOT_SEC.S_P_T) ; Sector per track //LD C,(IY+_sBOOT_SECTOR_PARAMS.S_P_T) ; Sector per track
//LD B,(IY+_sBOOT_SEC.S_P_T+1) //LD B,(IY+_sBOOT_SECTOR_PARAMS.S_P_T+1)
LD BC,(CORE_BUFFERS.BootSector.S_P_T) ; Sector per track LD BC,(CORE_BUFFERS.BootSector.S_P_T) ; Sector per track
LD A,(CORE_BUFFERS.BootSector.HEADS) ;!!!!!   ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥­­®£® BootSector, â® ¡ã¤¥â ¡ £  LD A,(CORE_BUFFERS.BootSector.HEADS) ;!!!!!   ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥­­®£® BootSector, â® ¡ã¤¥â ¡ £ 
@ -712,28 +727,27 @@ RD_BPB: LD C,SLOT3
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
LD DE,(FatBuffer.DAT_FRL) LD DE,(FatBuffer.DAT_FRL)
; LD E,(IY+_sBOOT_SEC.HIDDEN) ;Hidden sec ; LD E,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN) ;Hidden sec
; LD D,(IY+_sBOOT_SEC.HIDDEN+1) ; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1)
; AND A ; AND A
; SBC HL,DE ; SBC HL,DE
; EX DE,HL ; EX DE,HL
//LD L,(IY+_sBOOT_SEC.S_P_D) //LD L,(IY+_sBOOT_SECTOR_PARAMS.S_P_D)
//LD H,(IY+_sBOOT_SEC.S_P_D+1) //LD H,(IY+_sBOOT_SECTOR_PARAMS.S_P_D+1)
LD HL,(CORE_BUFFERS.BootSector.S_P_D) LD HL,(CORE_BUFFERS.BootSector.S_P_D)
LD A,H LD A,H
OR L OR L
JP NZ,.HDDSMAL JP NZ,.HDDSMAL
; ;
//LD L,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS) //LD L,(IY+_sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS)
//LD H,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+1) //LD H,(IY+_sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS+1)
LD HL,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS) LD HL,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS_L)
//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 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 AND A
SBC HL,DE SBC HL,DE
JP NC,.HDDBIG JP NC,.HDDBIG
@ -753,45 +767,37 @@ RD_BPB: LD C,SLOT3
RR L RR L
JP .S4C01 JP .S4C01
.S4C02: INC HL .S4C02: INC HL
LD (FAT_Max_Cluster),HL LD (FAT_Max_Cluster_L),HL
//POP IY //POP IY
; LD DE,FAT XOR A
; LD HL,0 LD H,A
; LD IX,(FAT_FRM) LD L,A
; LD B,3 LD (FatCache.Block),HL
; LD A,(DRIVE) LD (FatCache.Update),A
; LD C,Dss.DRV.Read
; RST ToDSS.DRV
; JP C,RDERR1
LD HL,0
LD (FatCache),HL
SET_PAGE_X FATPAGE SET_PAGE_X FATPAGE
PUSH AF PUSH AF
XOR A XOR A
CALL READ_FAT CALL READ_FAT_TABLE
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
CALL R_CLUST CALL R_CLUST
XOR A XOR A
RET RET
;!TODO detect fat type by clusters!
.IBM_DOS: .IBM_DOS:
LD A,(CORE_BUFFERS.BootSector.ID_FORM) LD A,(CORE_BUFFERS.BootSector.DRIVE_TYPE)
CP #F0 CP #F0
JR C,DOS_X_Error.UnknownBPB JR C,DOS_X_Error.UnknownBPB
;????? ­ ¤® «¨ ¨§¬¥­¨âì? ; ID ram-¤¨áª  - #FA
// OR 2 CP #F8 ; !FIXIT ­¥ ®¡ï§ â¥«ì­® ¥á«¨ ¢¨­â, â® ­¥ FAT12
// CP #FA ; ID ram-¤¨áª 
CP #F8 ;   ¥á«¨ ­¥ F8?
;?????
LD A,'6' LD A,'6'
LD HL,#FFFF LD HL,#FFFF
JP Z,.BPB_FAT JP Z,.BPB_FAT
;
LD A,'2' LD A,'2'
LD HL,#0FFF LD HL,#0FFF
JP .BPB_FAT JP .BPB_FAT
@ -813,7 +819,8 @@ FatBuffer:
.MSG: DB 'FAT' .MSG: DB 'FAT'
.READ_PG: DB #00 ;!TODO ­¥ ¨á¯®«ì§ãîâáï ­¥ª®â®àë¥ §­ ç¥­¨ï, ­® § ¤ã¬ª  ­¥¯«®å ï))) .READ_PG: DB #00 ;!TODO ­¥ ¨á¯®«ì§ãîâáï ­¥ª®â®àë¥ §­ ç¥­¨ï, ­® § ¤ã¬ª  ­¥¯«®å ï)))
.BLOCK: DB #00 .BLOCK: DB #00
.DIR_CLU: DW #0000 .DIR_CLU_L: DW #0000
.DIR_CLU_H: DW #0000 ; fat32
.DRIVE: DB #FF .DRIVE: DB #FF
.FAT_FRM: .FAT_FRM:
.FAT1_XX: DW #0000 ; MSD_FAT_SEC first sector FAT .FAT1_XX: DW #0000 ; MSD_FAT_SEC first sector FAT
@ -823,15 +830,19 @@ FatBuffer:
.F_P_S: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥ .F_P_S: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
.DIR_S_S: DB #00 ; DIR_SEC_SIZE .DIR_S_S: DB #00 ; DIR_SEC_SIZE
.DAT_FRL: DW #0000 ; MSD_DAT_SEC low .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: .CLU_LEN:
.B_P_C: DW #0000 ; CLUSTER_LEN .B_P_C: DW #0000 ; CLUSTER_LEN
.C_P_B: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï? .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 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  樫¨­¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï? .S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  樫¨­¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
.ENDCLUS: DW #FFFF .ENDCLUS_LOW: DW #FFFF
.ENDCLUS_HIGH: DW #FFFF ; !TODO for fat32
; ;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; ;
INCLUDE "FAT12_16.ASM" 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 LD (G_CLUST.num),HL
RET RET
.FAT32: WORD 0
; ­ ©â¨ ¯¥à¢ë© ᢮¡®¤­ë© ª« áâ¥à ; ­ ©â¨ ¯¥à¢ë© ᢮¡®¤­ë© ª« áâ¥à
; [ ] fat32
G_CLUST: G_CLUST:
.num+1: LD HL,#0001 .num+1: LD HL,#0001
.loop: INC HL ; ­®¬¥à ª« áâ¥à  .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 CP DSS_Error.sys.DISK_FULL
SCF SCF
RET Z ; ®è¨¡ª  ? RET Z ; ®è¨¡ª  ?
@ -30,10 +41,11 @@ G_CLUST:
OR E OR E
JR NZ,.loop JR NZ,.loop
LD (G_CLUST.num),HL LD (G_CLUST.num),HL
XOR A ; XOR A
RET RET
; HL - CLUSTER ; HL - CLUSTER
; [ ] fat32
INC_FAT: INC_FAT:
PUSH HL PUSH HL
CALL G_CLUST CALL G_CLUST
@ -41,22 +53,21 @@ INC_FAT:
RET C RET C
; ;
PUSH HL PUSH HL
PUSH HL ; PUSH HL
EX DE,HL ; hl=­®¬¥à ª« áâ¥à  ; EX DE,HL ; hl=­®¬¥à ª« áâ¥à 
.loop: CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à  ; .loop: CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
; EX DE,HL
; JR NC,.loop ; ­¥ ª®­¥æ 楯®çª¨
EX DE,HL EX DE,HL
JR NC,.loop ; ­¥ ª®­¥æ 楯®çª¨ ; POP DE ; ­®¬¥à ª« áâ¥à 
EX DE,HL CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
POP DE ; ­®¬¥à ª« áâ¥à 
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
;!FIXIT <­¥â ª®­âà®«ï ®è¨¡ª¨> ;!FIXIT <­¥â ª®­âà®«ï ®è¨¡ª¨>
; ;
;
POP HL POP HL
LD DE,(FatBuffer.ENDCLUS) ; ­®¬¥à ª« áâ¥à  LD DE,(FatBuffer.ENDCLUS_LOW) ; ­®¬¥à ª« áâ¥à 
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à  CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WR_FAT? ;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WRITE_FAT_TABLE?
;CALL WR_FAT ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª ;CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
; ;
AND A AND A
RET RET
@ -65,66 +76,74 @@ INC_FAT:
;----------------------------------------------------------- ;-----------------------------------------------------------
; <20>à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à  ; <20>à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
; ¢å®¤: hl = ­®¬¥à ª« áâ¥à  ; ¢å®¤: hl = ­®¬¥à ª« áâ¥à 
; de = <E28099>˜…… á«®¢® ­®¬¥à  ª« áâ¥à  (⮫쪮 ¤«ï FAT32)
; ¢ë室: hl = ­®¬¥à ª« áâ¥à  ; ¢ë室: hl = ­®¬¥à ª« áâ¥à 
; de = ­®¬¥à á«¥¤. ª« áâ¥à  ; de = ­®¬¥à á«¥¤. ª« áâ¥à  (¥á«¨ 0, â® ª« áâ¥à hl ᢮¡®¤¥­)
; CF - ª®­¥æ 楯®çª¨ ; CF - ª®­¥æ 楯®çª¨
;!FIXIT ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - à §¤¥« ­¥ ¡®«ìè¥ 2Gb ;!FIXIT ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - à §¤¥« ­¥ ¡®«ìè¥ 2Gb
;----------------------------------------------------------- ;-----------------------------------------------------------
R_F_FAT: ;[ ] fat32
EX DE,HL READ_FROM_FAT:
LD HL,(FAT_Max_Cluster) ;[x] fat32
AND A 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 SBC HL,DE
EX DE,HL EX DE,HL
LD A,DSS_Error.sys.DISK_FULL LD A,DSS_Error.sys.DISK_FULL
;[x] fat32
POP DE
;
RET C RET C
SET_PAGE_X FATPAGE SET_PAGE_X FATPAGE
PUSH HL PUSH HL
PUSH AF PUSH AF
LD A,(FatBuffer.FAT_TYP) LD A,(FatBuffer.FAT_TYPE)
CP "2" ; fat12 CP 16 ; fat16
JR Z,R_F_F12 JR C,.FAT12
JR NZ,.FAT32
; fat16, ¯à®áâ® ç¨â âì á«¥¤. ­®¬¥à ; fat16, ¯à®áâ® ç¨â âì á«¥¤. ­®¬¥à
R_F_F16: .FAT16: CALL GET_FAT16_CELL
CALL GET_FAT16_CELL
LD E,(HL) ; ¯à®ç¨â âì ­®¬¥à ª« áâ¥à  LD E,(HL) ; ¯à®ç¨â âì ­®¬¥à ª« áâ¥à 
INC HL INC HL
LD D,(HL) LD D,(HL)
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
;!TODO #FFF7 - ª« áâ¥à á ª®áïªç­ë¬¨ ᥪâ®à ¬¨ ;!TODO #FFF7 - ª« áâ¥à á ª®áïç­ë¬¨ ᥪâ®à ¬¨
LD HL,#FFEF ;!HARDCODE LD HL,#FFEF ;!HARDCODE
XOR A ; DssErr.sys.NO_ERROR XOR A ; DssErr.sys.NO_ERROR
SBC HL,DE ; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë SBC HL,DE ; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë
POP HL POP HL
RET RET
; ;
R_F_F12: .FAT12: CALL GET_FAT12_CELL
CALL GET_FAT12_CELL
LD E,(HL) LD E,(HL)
INC HL INC HL
LD D,(HL) LD D,(HL)
JR C,R_F_F01 JR C,.Correct_1
LD A,D LD A,D
AND #0F AND #0F
LD D,A LD D,A
JP R_F_F02 JR .Correct_2
; ;
R_F_F01: .Correct_1:
LD A,E LD A,E
AND #F0 AND #F0
RR D ; ¢¯à ¢® ­  4 ¡¨âa DUP 4 ; ¢¯à ¢® ­  4 ¡¨âa
RRA RR D
RR D RRA
RRA EDUP
RR D
RRA
RR D
RRA
LD E,A LD E,A
R_F_F02: .Correct_2:
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
LD HL,#0FEF LD HL,#0FEF
@ -132,20 +151,21 @@ R_F_F02:
SBC HL,DE ; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë SBC HL,DE ; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë
POP HL POP HL
RET RET
.FAT32: ; [ ] fat32
CALL GET_FAT32_CELL
DI
HALT
;----------------------------------------------------------- ;-----------------------------------------------------------
; ‡ ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à  ; ‡ ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
; ¢å®¤: de = ­®¬¥à ª« áâ¥à  ; ¢å®¤: hl = ­®¬¥à ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì
; hl = ? ­®¬¥à ¯¥à¢®£® ª« áâ¥à  ; de = ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì
; ¢ë室: hl = ? ­®¬¥à á«¥¤. ª« áâ¥à  ; ¢ë室: â ª®© ¦¥ ª ª ¨ ¢å®¤
; de = ­®¬¥à ª« áâ¥à 
; in: HL - CLUSTER
; out: DE - (CLUSTER)
;----------------------------------------------------------- ;-----------------------------------------------------------
W_T_FAT: ; [ ] fat32
WRITE_TO_FAT:
PUSH DE PUSH DE
EX DE,HL EX DE,HL
LD HL,(FAT_Max_Cluster) LD HL,(FAT_Max_Cluster_L)
AND A AND A
SBC HL,DE SBC HL,DE
EX DE,HL EX DE,HL
@ -161,30 +181,12 @@ W_T_FAT:
;LD A,1 ;LD A,1
;LD (FatCache.Update),A ;LD (FatCache.Update),A
; ;
LD A,(FatBuffer.FAT_TYP) LD A,(FatBuffer.FAT_TYPE)
CP "2" ; fat12 CP 16 ; fat16
JR Z,W_T_F12 JR C,.FAT12
W_T_F16: JR NZ,.FAT32
PUSH DE ;
; LD A,H .FAT16: PUSH DE
; 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
CALL GET_FAT16_CELL CALL GET_FAT16_CELL
POP DE POP DE
LD (HL),E ; á®åà. ¢ ª¥è¥ FAT-  LD (HL),E ; á®åà. ¢ ª¥è¥ FAT- 
@ -194,18 +196,17 @@ W_T_F16:
POP HL POP HL
OUT (SLOT3),A OUT (SLOT3),A
; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD ; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD
LD A,1 XOR A
INC A
LD (FatCache.Update),A LD (FatCache.Update),A
; ; CF = 0
XOR A
RET RET
; ;
; fat12 .FAT12: ;!FIXIT ¯¥à¥¤¥« âì ­  ¯¥à¥¬¥­­ë¥ FAT_CACHE
W_T_F12: ;!FIXIT ¯¥à¥¤¥« âì ­  ¯¥à¥¬¥­­ë¥ FAT_CACHE
PUSH DE PUSH DE
CALL GET_FAT12_CELL CALL GET_FAT12_CELL
POP DE POP DE
JR C,W_T_F01 ; ­®¬¥à ­¥çñâ­ë© JR C,.Correct_1 ; ­®¬¥à ­¥çñâ­ë©
LD (HL),E LD (HL),E
INC HL INC HL
LD A,(HL) LD A,(HL)
@ -216,30 +217,19 @@ W_T_F12: ;!FIXIT
POP HL POP HL
OUT (SLOT3),A OUT (SLOT3),A
; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD ; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD
LD A,1 XOR A
INC A
LD (FatCache.Update),A LD (FatCache.Update),A
; ; CF = 0
AND A
RET RET
; .Correct_1:
W_T_F01:; ¢«¥¢® ­  4 ¡¨âa ; ¢«¥¢® ­  4 ¡¨âa
;SLA E EX DE,HL
;LD A,E ADD HL,HL
;RL D ADD HL,HL
;RLA ADD HL,HL
;RL D ADD HL,HL
;RLA EX DE,HL
;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
; ;
LD A,(HL) LD A,(HL)
AND #0F AND #0F
@ -251,26 +241,34 @@ W_T_F01:;
POP HL POP HL
OUT (SLOT3),A OUT (SLOT3),A
; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD ; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD
LD A,1 XOR A
INC A
LD (FatCache.Update),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 ;RX01
;RE_FAT: ;RE_FAT:
; <20>à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-  ; <20>à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
; A - NEW FAT BLOCK ; A - NEW FAT BLOCK
READ_FAT: READ_FAT_TABLE:
PUSH HL PUSH HL
PUSH AF PUSH AF
LD A,(FatCache.Update) LD A,(FatCache.Update)
OR A OR A
CALL NZ,WR_FAT.Start CALL NZ,WRITE_FAT_TABLE.Start
POP AF POP AF
LD L,A LD L,A
LD H,0 XOR A
LD (FatCache),HL LD H,A ;!FIXIT fat32 - ã ä â32 ¡«®ª®¢ ¬®¦¥â ¡ëâì ¢ «®¬
LD (FatCache.Block),HL
LD (FatCache.Update),A
;FAT BLOCK ^ FAT_CACHE.Degree = SECTOR OF FAT ;FAT BLOCK ^ FAT_CACHE.Degree = SECTOR OF FAT
DUP FAT_CACHE.Degree_16 DUP FAT_CACHE.Degree_16
ADD HL,HL ;x2 ADD HL,HL ;x2
@ -284,7 +282,7 @@ READ_FAT:
;LD IX,0 ;LD IX,0
;ADD IX,DE ; ­®¬¥à «®£. ᥪâ®à  ;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 DE,FATPAGE.cache ; ªã¤  ; DE - FAT ADDRESS
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª  LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD BC,FAT_CACHE.Sectors*256 + Dss.DRV.Read ;ॣ B * FAT_CACHE.Sector_Size = CASH SIZE LD BC,FAT_CACHE.Sectors*256 + Dss.DRV.Read ;ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
@ -293,15 +291,17 @@ READ_FAT:
RET RET
; <20>®¤ª«îç¨âì ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª ; <20>®¤ª«îç¨âì ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
WR_FAT: SET_PAGE_X FATPAGE WRITE_FAT_TABLE:
SET_PAGE_X FATPAGE
PUSH AF PUSH AF
CALL .Start ;!TODO ­¥â ª®­âà®«ï ®è¨¡®ª CALL .Start ;!TODO ­¥â ª®­âà®«ï ®è¨¡®ª
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
RET RET
; ‡ ¯¨áì ª¥è  (¢á¥£®?) FAT-  ­  ¤¨áª ; ‡ ¯¨áì ª¥è  FAT-  ­  ¤¨áª
.Start: LD HL,(FatCache) .Start: LD HL,(FatCache.Block)
LD H,0 ;
;LD H,0
;FAT BLOCK * 16 = SECTOR OF FAT ;FAT BLOCK * 16 = SECTOR OF FAT
DUP FAT_CACHE.Degree_16 DUP FAT_CACHE.Degree_16
ADD HL,HL ;x2 ADD HL,HL ;x2
@ -348,14 +348,17 @@ WR_FAT: SET_PAGE_X FATPAGE
LD DE,(FatBuffer.FAT2_XX) LD DE,(FatBuffer.FAT2_XX)
ADD HL,DE ADD HL,DE
EX DE,HL EX DE,HL
LD XH,D
LD XL,E
; ;
LD XH,D LD HL,0
LD XL,E ; CF = ADD HL,DE
;LD IX,0 ; [ ] fat32 - ¢â®à ï â ¡«¨æ  ä â ¬®¦¥â ¦¥ ã¥å âì ¤ «ìè¥ 16-¡¨â «®£¨ç¥áª®£® ᥪâ®à ?
;ADD IX,DE ; ­®¬¥à «®£. ᥪâ®à  IF _FAT32_ENABLE
RL L
ENDIF
; ;
LD DE,FATPAGE.cache LD DE,FATPAGE.cache
LD HL,0
LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE)
LD C,Dss.DRV.Write LD C,Dss.DRV.Write
RST ToDSS.DRV RST ToDSS.DRV
@ -386,9 +389,9 @@ GET_FAT16_CELL:
AND FAT_CACHE.Part_Mask_16 AND FAT_CACHE.Part_Mask_16
; ;
ADD HL,HL ; HL - FAT OFFSET (FROM CASH) 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 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-  LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT- 
ADD HL,DE ; ­  ï祩ªã FAT ADD HL,DE ; ­  ï祩ªã FAT
RET RET
@ -399,24 +402,21 @@ GET_FAT16_CELL:
GET_FAT12_CELL: GET_FAT12_CELL:
LD D,H LD D,H
LD E,L LD E,L
RR H SRL H
RR L ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF RR L ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF
PUSH AF ; á®åà. ä« £ PUSH AF ; á®åà. ä« £
ADD HL,DE ; CLUSTER * 1.5 ADD HL,DE ; CLUSTER * 1.5
; ;
;IF COMPILE_UNUSED_CODE IF FAT_CACHE.Size < #2000
;!FIXIT ®¯â¨¬¨§¨à®¢ âì ;!FIXIT ®¯â¨¬¨§¨à®¢ âì
LD A,H LD A,H
LD B,H LD B,H
; ;
AND #1F AND #1F
;AND FAT_CACHE.Size_Mask_16 ;AND FAT_CACHE.Size_Mask_16
; ;
LD H,A LD H,A
LD A,B LD A,B
; ;
RLCA RLCA
RLCA RLCA
@ -427,11 +427,10 @@ GET_FAT12_CELL:
AND #07 AND #07
;AND FAT_CACHE.Part_Mask_16 ;AND FAT_CACHE.Part_Mask_16
; ;
LD BC,(FatCache.Block) ; C - BLOCK FAT IN CASH
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
CP C CP C
CALL NZ,READ_FAT ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-  CALL NZ,READ_FAT_TABLE ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
;ENDIF ENDIF
; ;
LD DE,FATPAGE.cache LD DE,FATPAGE.cache
ADD HL,DE ADD HL,DE
@ -441,8 +440,8 @@ GET_FAT12_CELL:
; in: HL - CLUSTER ; in: HL - CLUSTER
; out: HL:IX - SECTOR ; out: HL:IX - SECTOR
NSECTOR: NSECTOR:;[x] fat32
LD DE,0 ;!FIXIT for FAT32 LD DE,(FAT_Max_Cluster_H)
DEC HL DEC HL
DEC HL DEC HL
LD A,(CORE_BUFFERS.BootSector.S_P_C) LD A,(CORE_BUFFERS.BootSector.S_P_C)
@ -470,53 +469,58 @@ NSECTOR:
RET RET
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
;[ ] fat32
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
MACRO _GetSavedCluster exit_to MACRO _GetSavedCluster exit_to
LD E,(IY+_sFM.KnownCluster_L) LD E,(IY+_sFM.KnownCluster_L)
LD D,(IY+_sFM.KnownCluster_H) LD D,(IY+_sFM.KnownCluster_L+1)
LD A,D LD A,D
INC B
OR E OR E
JR Z,exit_to JR Z,exit_to
DEC B
; ;
PUSH DE PUSH DE
PUSH HL PUSH HL
PUSH BC PUSH BC
LD E,(IY+_sFM.KnownOffset_L) LD E,(IY+_sFM.KnownOffset_L)
LD D,(IY+_sFM.KnownOffset_H) LD D,(IY+_sFM.KnownOffset_L+1)
LD A,D LD A,D
OR E OR E
JR Z,.noOptimization_1 JR Z,.noOptimization_1
; ;
POP HL POP HL
AND A
SBC HL,DE SBC HL,DE
JR C,.noOptimization_2 JR C,.noOptimization_2
; ;
LD C,L LD C,L
LD B,H LD B,H
POP HL
POP DE POP DE
POP HL
; ;
EX DE,HL INC B
JP exit_to JP exit_to
.noOptimization_1: .noOptimization_1:
POP BC POP BC
.noOptimization_2: .noOptimization_2:
POP HL POP HL
POP DE POP DE
INC B
JP exit_to JP exit_to
ENDM ENDM
;
;[ ] fat32
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
MACRO _SaveGetedCluster MACRO _SaveGetedCluster
LD (IY+_sFM.KnownCluster_L),L LD (IY+_sFM.KnownCluster_L),L
LD (IY+_sFM.KnownCluster_H),H LD (IY+_sFM.KnownCluster_L+1),H
POP BC POP BC
LD (IY+_sFM.KnownOffset_L),C LD (IY+_sFM.KnownOffset_L),C
LD (IY+_sFM.KnownOffset_H),B LD (IY+_sFM.KnownOffset_L+1),B
ENDM ENDM
;; ;;
BLOK_RD.ECL2: BLOCK_READ.ECL2:
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
POP BC POP BC
; ;
@ -528,38 +532,42 @@ BLOK_RD.ECL2:
;READ SECTORS OF FILE ;READ SECTORS OF FILE
;HL:DE - FP (in sectors) ;HL:DE - FP (in sectors)
; B - Amount sectors ; B - Amount sectors
BLOK_RD: PUSH BC BLOCK_READ:
PUSH BC
LD (READ.PointerOnBuffer),IX LD (READ.PointerOnBuffer),IX
LD A,(CORE_BUFFERS.BootSector.S_P_C) ;SECTORS PER CLUSTER LD A,(CORE_BUFFERS.BootSector.S_P_C) ;SECTORS PER CLUSTER
LD C,A LD C,A
LD B,0 ;!FIXIT LD B,0
;HL:DE / BC => DE:IX HL-OSTATOK ;HL:DE / BC => DE:IX HL-OSTATOK
CALL DIV_for_SPC CALL DIV_for_SPC
;!FIXIT ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - à §¤¥« ­¥ ¡®«ìè¥ 2Gb ; [ ] fat32. ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - ä ©« ­¥ ¡®«ìè¥ 2Gb
LD B,XH LD B,XH
LD C,XL LD C,XL
PUSH HL ;RESIDUE PUSH HL ;RESIDUE
LD L,(IY+_sFM.ST_CLUSTER) ;START CLUSTER LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ;START CLUSTER
LD H,(IY+_sFM.ST_CLUSTER+1) LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
LD A,H LD A,H
OR L OR L
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
;JR NZ,BLOKRD2 ;JR NZ,BLOKRD2
PUSH BC PUSH BC
JR Z,.ECL2 JR Z,.ECL2
;JP ECL2 ;RY01 JR BLOKRD0 ;JP ECL2 ;RY01 JR BLOKRD0
_GetSavedCluster .enter_loop1 _GetSavedCluster .enter_loop1
; ;
.loop1: PUSH BC .loop1: PUSH BC
CALL R_F_FAT CALL READ_FROM_FAT
POP BC POP BC
JR C,.ECL2 ;RY01 JR C,.ECL2 ;RY01
EX DE,HL EX DE,HL
DEC BC ; DEC BC
.enter_loop1: .enter_loop1:
LD A,B ; - ᬥ饭¨¥ ¢­ãâਠ䠩«  ¢ ª« áâ¥à å ; LD A,B ; - ᬥ饭¨¥ ¢­ãâਠ䠩«  ¢ ª« áâ¥à å
OR C ; OR C
JR NZ,.loop1 ; JR NZ,.loop1
INC B
DEC BC
DJNZ .loop1
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
_SaveGetedCluster _SaveGetedCluster
; ;
@ -619,7 +627,7 @@ BLOK_RD: PUSH BC
.BLOKRD7: .BLOKRD7:
EX DE,HL EX DE,HL
PUSH BC PUSH BC
CALL R_F_FAT CALL READ_FROM_FAT
POP BC POP BC
JR C,.ECL1 ;RY01 JR C,.ECL1 ;RY01
EX DE,HL EX DE,HL
@ -674,12 +682,12 @@ BLOK_WR:
LD B,0 LD B,0
;HL:DE / BC => DE:IX HL-OSTATOK ;HL:DE / BC => DE:IX HL-OSTATOK
CALL DIV_for_SPC CALL DIV_for_SPC
; [ ] fat32. ¤ «¥¥ § â®çª  ­  â®, çâ® ¢ DE ¢á¥£¤  0 - ä ©« ­¥ ¡®«ìè¥ 2Gb
LD B,XH LD B,XH
LD C,XL LD C,XL
PUSH HL ;RESIDUE
PUSH HL ;RESIDUE LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ;START CLUSTER
LD L,(IY+_sFM.ST_CLUSTER) ;START CLUSTER LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
LD H,(IY+_sFM.ST_CLUSTER+1)
LD A,H LD A,H
OR L OR L
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
@ -690,35 +698,40 @@ BLOK_WR:
PUSH BC PUSH BC
CALL G_CLUST CALL G_CLUST
JP C,.Error JP C,.Error
LD (IY+_sFM.ST_CLUSTER),L LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),L
LD (IY+_sFM.ST_CLUSTER+1),H LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),H
LD DE,(FatBuffer.ENDCLUS) LD DE,(FatBuffer.ENDCLUS_LOW)
CALL W_T_FAT CALL WRITE_TO_FAT
PUSH HL PUSH HL
;!TEST ;!TODO 2/12/23 [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WR_FAT? ;!TEST ;!TODO 2/12/23 [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WRITE_FAT_TABLE?
;CALL WR_FAT ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª ;CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
; ;
POP HL POP HL
POP BC POP BC
INC B
JP .WR2 JP .WR2
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
.GetSavedCluster: .GetSavedCluster:
_GetSavedCluster .WR2 _GetSavedCluster .WR2
; ;
.loop: PUSH BC .loop: PUSH BC
CALL R_F_FAT CALL READ_FROM_FAT
JR NC,.WRB JR NC,.WRB
PUSH HL PUSH HL
CALL INC_FAT CALL INC_FAT
POP HL POP HL
JP C,.Error JP C,.Error
CALL R_F_FAT CALL READ_FROM_FAT
.WRB: POP BC .WRB: POP BC
EX DE,HL EX DE,HL
; DEC BC
.WR2:
; LD A,B
; OR C
; JR NZ,.loop
INC B
DEC BC DEC BC
.WR2: LD A,B DJNZ .loop
OR C
JR NZ,.loop
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
_SaveGetedCluster _SaveGetedCluster
@ -778,13 +791,13 @@ BLOK_WR:
RET Z RET Z
.WR7: EX DE,HL .WR7: EX DE,HL
PUSH BC PUSH BC
CALL R_F_FAT CALL READ_FROM_FAT
JR NC,.WR9 JR NC,.WR9
PUSH HL PUSH HL
CALL INC_FAT CALL INC_FAT
POP HL POP HL
JR C,.ErrorFull JR C,.ErrorFull
CALL R_F_FAT CALL READ_FROM_FAT
.WR9: POP BC .WR9: POP BC
EX DE,HL EX DE,HL
PUSH HL PUSH HL
@ -825,10 +838,11 @@ BLOK_WR:
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
FatCache: WORD #0000 FatCache: ;WORD #0000
.Block EQU FatCache .Block WORD #0000 ;EQU FatCache
.Update EQU FatCache+1 .Update BYTE 0 ;EQU FatCache+1
FAT_Max_Cluster: WORD #0FF0 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.) FAT_Max_Cluster_L: WORD #0FF0 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
FAT_Max_Cluster_H: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
;//MODULE: FAT_X ;//MODULE: FAT_X
;[END] ;[END]
@ -838,7 +852,7 @@ FAT_Max_Cluster: WORD #0FF0 ;
;; HL - CLUSTER ;; HL - CLUSTER
;; DE - (CLUSTER) ;; DE - (CLUSTER)
; ;
;R_F_FAT EX DE,HL ;READ_FROM_FAT EX DE,HL
; LD HL,(FAT_Max_Cluster) ; LD HL,(FAT_Max_Cluster)
; AND A ; AND A
; SBC HL,DE ; SBC HL,DE
@ -859,7 +873,7 @@ FAT_Max_Cluster: WORD #0FF0 ;
; DEC A ; DEC A
; LD BC,(FatCache) ; A - ELEMENT OF CASH ; LD BC,(FatCache) ; A - ELEMENT OF CASH
; CP C ; CP C
; CALL NZ,READ_FAT ; CALL NZ,READ_FAT_TABLE
; LD DE,FAT ; LD DE,FAT
; ADD HL,DE ; ADD HL,DE
; LD E,(HL) ; 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 H,0
; LD (FatCache),HL ; LD (FatCache),HL
; LD E,L ; 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 B,0
LD (YHOT_SP),BC LD (YHOT_SP),BC
EXX EXX
LD A,(M_XSIZE) LD A,(M_XSIZE)
LD C,A LD C,A
LD B,0 LD B,0
LD A,(M_YSIZE) LD A,(M_YSIZE)
LD HL,0 LD HL,0
MSCURS1 ADD HL,BC MSCURS1 ADD HL,BC
DEC A DEC A
JR NZ,MSCURS1 JR NZ,MSCURS1
PUSH HL PUSH HL
LD BC,M_IMAGE.Size+1 LD BC,M_IMAGE.Size+1
AND A AND A
SBC HL,BC SBC HL,BC
CCF CCF
EXX EXX
POP BC POP BC
POP HL POP HL
@ -303,19 +303,19 @@ NOLOADM POP HL
MS_BCUR PUSH IX MS_BCUR PUSH IX
EXX EXX
LD A,(M_XSIZE) LD A,(M_XSIZE)
LD C,A LD C,A
LD B,0 LD B,0
LD A,(M_YSIZE) LD A,(M_YSIZE)
LD HL,0 LD HL,0
MSBCUR1 ADD HL,BC MSBCUR1 ADD HL,BC
DEC A DEC A
JR NZ,MSBCUR1 JR NZ,MSBCUR1
PUSH HL PUSH HL
LD BC,M_IMAGE.Size+1 LD BC,M_IMAGE.Size+1
AND A AND A
SBC HL,BC SBC HL,BC
CCF CCF
EXX EXX
POP BC POP BC
POP HL POP HL

View File

@ -247,14 +247,14 @@ Cursor_Off:
; ‚¥ªâ®à ®¡á«ã¦¨¢ ­¨ï ªãàá®à  ; ‚¥ªâ®à ®¡á«ã¦¨¢ ­¨ï ªãàá®à 
cursor_interrupt: cursor_interrupt:
LD A,(Cursor_Off.Flag) LD A,(Cursor_Off.Flag)
OR A OR A
RET Z RET Z
.timer+1: LD A,1 ; ¯ ã§  ¬¨£ ­¨ï .timer+1: LD A,1 ; ¯ ã§  ¬¨£ ­¨ï
DEC A DEC A
CALL Z,Cursor CALL Z,Cursor
LD (.timer),A LD (.timer),A
RET RET
; <20> áâனª  §­ ª®£¥­¥à â®à  ªãàá®à  ç¥àâ®çª®© ; <20> áâனª  §­ ª®£¥­¥à â®à  ªãàá®à  ç¥àâ®çª®©
SETUP_CURSORS: SETUP_CURSORS:
@ -414,9 +414,9 @@ FULL_BF:
BIT SF_BUFF,(IX+SOUND_K) BIT SF_BUFF,(IX+SOUND_K)
JR Z,.FBF JR Z,.FBF
EXX EXX
LD DE,230 LD DE,230
LD HL,50 LD HL,50
CALL BEEP CALL BEEP
EXX EXX
.FBF: EX AF,AF' .FBF: EX AF,AF'
RET RET
@ -530,9 +530,9 @@ RUS_X BIT X_CTRL,(IX+K_SHIFT)
BIT SF_ALT,(IX+SOUND_K) BIT SF_ALT,(IX+SOUND_K)
RET Z RET Z
EXX EXX
LD DE,190 LD DE,190
LD HL,20 LD HL,20
CALL BEEP CALL BEEP
EXX EXX
RET 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 _CALC_DEVICE_ENTRY OLD_TABLES.DEVICE
LD A,(HL) LD A,(HL)
INC A INC A
JP Z,ERROR_BOOTDRV_DIES SCF
;JP Z,ERROR_BOOTDRV_DIES
RET Z
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 6. § ¬¥­ï¥¬ ­®¢ë¥ â ¡«¨æë ­  ¬®¤¨ä¨æ¨à®¢ ­­ë¥ áâ àë¥ ; 6. § ¬¥­ï¥¬ ­®¢ë¥ â ¡«¨æë ­  ¬®¤¨ä¨æ¨à®¢ ­­ë¥ áâ àë¥
@ -127,6 +129,7 @@ ReScanDRV:
;7. ¢ë室 ;7. ¢ë室
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
LD A,(DRV_PAGE.LDRIVE) LD A,(DRV_PAGE.LDRIVE)
AND A
RET RET
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
@ -274,42 +277,42 @@ Find_Record:
;-----------------------[] ;-----------------------[]
;-----------------------[] ;-----------------------[]
ERROR_BOOTDRV_DIES: ; ERROR_BOOTDRV_DIES:
DI ; DI
LD E,1 ; LD E,1
LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default ; LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default
RST ToBIOS ; RST ToBIOS
; ; ;
LD HL,#2050 ; LD HL,#2050
LD DE,0 ; LD DE,0
LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_CLS_WIN ; LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_CLS_WIN
RST ToBIOS ; RST ToBIOS
; ; ;
LD A,1 ; LD A,1
OUT (SCREEN_SWITCH),A ; set scr-2 ; OUT (SCREEN_SWITCH),A ; set scr-2
; ; ;
LD HL,.ERROR_MSG ; LD HL,.ERROR_MSG
LD DE,#A000 ; LD DE,#A000
LD BC,.ERROR_MSG.size ; LD BC,.ERROR_MSG.size
LD A,C ; LD A,C
LDIR ; LDIR
; ; ;
LD DE,16*256 + (80-.ERROR_MSG.size)/2 ;X=0, Y=16 ; LD DE,16*256 + (80-.ERROR_MSG.size)/2 ;X=0, Y=16
LD C,BIOS.LP_SET_PLACE ; LD C,BIOS.LP_SET_PLACE
RST ToBIOS ; RST ToBIOS
; ; ;
LD HL,#A000 ; LD HL,#A000
LD DE,0*256 + COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE ; LD DE,0*256 + COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE
LD B,A ; LD B,A
LD C,BIOS.LP_PRINT_LINE3 ; LD C,BIOS.LP_PRINT_LINE3
RST ToBIOS ; RST ToBIOS
; ; ;
.loop: DI ; .loop: DI
HALT ; HALT
JR .loop ; JR .loop
; ; ;
.ERROR_MSG: DZ "Kernel panic! Boot disk lost. Press Ctrl+Alt+Del or RESET." ; .ERROR_MSG: DZ "Kernel panic! Boot disk lost. Press Ctrl+Alt+Del or RESET."
.ERROR_MSG.size EQU $-.ERROR_MSG ; .ERROR_MSG.size EQU $-.ERROR_MSG
;-----------------------[] ;-----------------------[]
@ -449,7 +452,7 @@ KILL_FM:;
CP C CP C
JR NZ,.skip JR NZ,.skip
XOR A XOR A
LD (IY+_sFM.NAME),A ; £à®å ¥¬ ¬ ­¨¯ã«ïâ®à LD (IY+_sFM.FS_REC.NAME),A ; £à®å ¥¬ ¬ ­¨¯ã«ïâ®à
.skip: DJNZ .loop_fm .skip: DJNZ .loop_fm
; ;
POP AF POP AF

View File

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

View File

@ -1,41 +1,43 @@
; ;
STRUCT _sStack ; 256 bytes STRUCT _sStack ; 256 bytes
buffer BLOCK 256,0 .buffer BLOCK 256,0
SPoint BYTE 0 .SPoint BYTE 0
ENDS ENDS
; ;
; ;
STRUCT _sEXE_HEADER ; 512 bytes STRUCT _sEXE_HEADER ; 512 bytes
EXE_EXT TEXT 3,{"EX","E"} .EXE_EXT TEXT 3,{"EX","E"}
VERSION BYTE 0 .VERSION BYTE 0
OFFCOD1 WORD 0 .OFFCOD1 WORD 0
OFFCOD2 WORD 0 .OFFCOD2 WORD 0
LOADER WORD 0 .LOADER WORD 0
RESERVED BLOCK 6,0 .RESERVED BLOCK 6,0
LD_ADDR WORD 0 .LD_ADDR WORD 0
PC_REG WORD 0 .PC_REG WORD 0
SP_REG WORD 0 .SP_REG WORD 0
RESERVED2 BLOCK 490,0 .RESERVED2 BLOCK 490,0
ENDS ENDS
; ;
;File Manipulator (FM) ;File Manipulator (FM)
STRUCT _sFM ; 47 bytes ;[ ] fat32
STRUCT _sFM ; 51 bytes
; from FAT ; from FAT
.NAME: TEXT 8,{". "," "} ;+ #00 +00 NAME ; .NAME: TEXT 8,{". "," "} ;+ #00 +00 NAME
.EXT: TEXT 3,{" "," "} ;+ #08 +08 EXT ; .EXT: TEXT 3,{" "," "} ;+ #08 +08 EXT
.ATTRIBUT: BYTE #10 ;+ #0B +11 ATTRIBUT ; .ATTRIBUT: BYTE #10 ;+ #0B +11 ATTRIBUT
.RESERVED_NT: BYTE #00 ;+ #0C +12 RESERVED ; .RESERVED_NT: BYTE #00 ;+ #0C +12 RESERVED
.RESERVED_FAT32: BYTE #00 ;+ #0D +13 RESERVED ; .RESERVED_FAT32: BYTE #00 ;+ #0D +13 RESERVED
.CREATE_TIME_FAT32: WORD #0000 ;+ #0E +14 RESERVED ; .CREATE_TIME_FAT32: WORD #0000 ;+ #0E +14 RESERVED
.CREATE_DATE_FAT32: WORD #0000 ;+ #10 +16 RESERVED ; .CREATE_DATE_FAT32: WORD #0000 ;+ #10 +16 RESERVED
.RESERVED_FAT32_1: WORD #0000 ;+ #12 +18 RESERVED ; .RESERVED_FAT32_1: WORD #0000 ;+ #12 +18 RESERVED
.RESERVED_FAT32_2: WORD #0000 ;+ #14 +20 RESERVED ; .FIRST_CLUSTER_H: WORD #0000 ;+ #14 +20 RESERVED
.TIME: WORD #0000 ;+ #16 +22 TIME ; .TIME: WORD #0000 ;+ #16 +22 TIME
.DATE: WORD #0000 ;+ #18 +24 DATE ; .DATE: WORD #0000 ;+ #18 +24 DATE
.ST_CLUSTER: WORD #0000 ;+ #1A +26 START CLUSTER ; .FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER ;!TODO fat32
.F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE ; .F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE
.FS_REC: _sFAT_DIRECTORY_RECORD
; from Core ; from Core
.F_POSITION: DWORD #00000000 ;+ #20 +32 FILE POSITION (FP) .F_POSITION: DWORD #00000000 ;+ #20 +32 FILE POSITION (FP)
.DIR_CLUSTER: WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER .DIR_CLUSTER: WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER
@ -44,10 +46,10 @@ RESERVED2 BLOCK 490,0
.ACCESS_MODE: BYTE #00 ;+ #29 +41 ACCESS MODE ¯à¨§­ ª ¨§¬¥­¥­¨ï ä ©«  .ACCESS_MODE: BYTE #00 ;+ #29 +41 ACCESS MODE ¯à¨§­ ª ¨§¬¥­¥­¨ï ä ©« 
.TASK_NUM: BYTE #00 ;+ #2A +42 TASK .TASK_NUM: BYTE #00 ;+ #2A +42 TASK
;.EMPTY: BYTE #00 ;+ #2B +43 EMPTY ;.EMPTY: BYTE #00 ;+ #2B +43 EMPTY
.KnownCluster_L: BYTE 0 ;+ #2B +43 Œ« ¤è¨© ¡ ©â ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩«  .KnownCluster_L: WORD #0000 ;+ #2B +43 Œ« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩« 
.KnownCluster_H: BYTE 0 ;+ #2C +44 ‘â à訩 ¡ ©â ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩«  .KnownCluster_H: WORD #0000 ;+ #2C +44 ‘â à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩« 
.KnownOffset_L: BYTE 0 ;+ #2D +45 Œ« ¤è¨© ¡ ©â ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à . .KnownOffset_L: WORD #0000 ;+ #2D +45 Œ« ¤è¥¥ á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
.KnownOffset_H: BYTE 0 ;+ #2E +46 ‘â à訩 ¡ ©â ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à . .KnownOffset_H: WORD #0000 ;+ #2E +46 ‘â à襥 á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
ENDS ENDS
; ;
@ -67,12 +69,12 @@ RESERVED2 BLOCK 490,0
; ;
STRUCT _sBuffers STRUCT _sBuffers
FileManipulator _sFM ; 44 bytes + 44 bytes * (FMCOUNT-1) .FileManipulator _sFM ; 44 bytes + 44 bytes * (FMCOUNT-1)
FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0 ; .FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0 ;
BootSector _sBOOT_SEC ; 62 bytes ;!TODO ¯¥à¥­¥á⨠¢ ®¡« áâì ¡ãä¥à®¢ .BootSector _sBOOT_SECTOR_PARAMS ; 62 bytes ;!TODO ¯¥à¥­¥á⨠¢ ®¡« áâì ¡ãä¥à®¢
EXE_Header _sEXE_HEADER ; 512 bytes .EXE_Header _sEXE_HEADER ; 512 bytes
Stack _sStack ; 256 bytes .Stack _sStack ; 256 bytes
Buffer BLOCK 512,0 ; FOR BUFFER & SECBUF .Buffer BLOCK 512,0 ; FOR BUFFER & SECBUF
MemoryTable BLOCK 256,0 ; 256 bytes .MemoryTable BLOCK 256,0 ; 256 bytes
ENDS 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 ¤¨áª®¢ ¢ á¨á⥬¥ ;LD_DSK EQU 16 ; ¬ ªá¨¬ «ì­®¥ ª®«¨ç¥á⢮ «®£¨ç¥áª¨å HDD ¤¨áª®¢ ¢ á¨á⥬¥
///////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////
DEFINE _FAT32_ENABLE 1 ;!TODO ¯®ª  ­¥¤®¤¥« ­®
define _bit (1<?((FAT_CACHE.Sectors-1) 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)) 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 ;FAT_CACHE EQU #C000
FMCOUNT EQU 10 ; Š®«¨ç¥á⢮ ä ©«®¢ëå ¬ ­¨¯ã«ïâ®à®¢ 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 ; ¨¬ï ä ©«  1: ld hl,work_buffer1 ; ¨¬ï ä ©« 
ld de,work_buffer1 ; 80 ¡ãä¥à ld de,work_buffer1 ; 80 ¡ãä¥à
ld a,#37 ;  âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ ) ld a,#37 ;  âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ )
ld bc,0*256 + Dss.F_First ; f_first (ä®à¬ â 11) ld bc,Dss.F_First.FATname ; f_first (ä®à¬ â 11)
RST ToDSS RST ToDSS
JR C,.dir_empty ;R14 JR C,.dir_empty ;R14
CALL .Print_Header CALL .Print_Header
@ -610,7 +610,7 @@ read_disk_info:
ld hl,mask_fname ; "*.*" ¨¬ï ¬¥âª¨ ld hl,mask_fname ; "*.*" ¨¬ï ¬¥âª¨
ld de,work_buffer1 ; ªã¤  ld de,work_buffer1 ; ªã¤ 
ld a,FAT_ATTR.VOLUME_ID ;  âਡãâ ¬¥âª¨ ⮬  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 RST ToDSS
push af push af
call restore_path ; ¢®ááâ. ⥪. ¯ãâì call restore_path ; ¢®ááâ. ⥪. ¯ãâì

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