mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
Preparing for FAT32
This commit is contained in:
parent
ac928f6fc0
commit
0312779217
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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 ; á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||||
;
|
;
|
||||||
@ -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
|
||||||
;
|
;
|
||||||
@ -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
|
||||||
|
|||||||
@ -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'
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
;///////////////////////////////////////////////////////////////////////
|
;///////////////////////////////////////////////////////////////////////
|
||||||
;
|
;
|
||||||
@ -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
|
||||||
;
|
;
|
||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
;
|
;
|
||||||
@ -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 ᨬ¢. ä®à¬ â
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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
|
||||||
;
|
;
|
||||||
@ -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
138
DSS/FS/FAT/FAT32.asm
Normal 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
|
||||||
|
*/
|
||||||
|
;
|
||||||
@ -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
|
||||||
|
|||||||
@ -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
75
DSS/Kernel_Panic.asm
Normal 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
|
||||||
|
;-----------------------[]
|
||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
;=======================================================================
|
||||||
;=======================================================
|
|
||||||
@ -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
|
||||||
;
|
;
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
943
|
942
|
||||||
@ -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
|
||||||
;----------------------------------------------------;
|
;----------------------------------------------------;
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
Loading…
Reference in New Issue
Block a user