mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
Preparing for FAT32
This commit is contained in:
parent
ac928f6fc0
commit
0312779217
@ -348,26 +348,26 @@ NX2: LD HL,(BOOT+510)
|
||||
SCF
|
||||
RET NZ
|
||||
LD IY,BOOT ;Analysing Block Parametr BIOS
|
||||
LD A,(IY+_sBOOT_SEC.ID_FORM)
|
||||
LD A,(IY+_sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
||||
CP #F0
|
||||
RET C
|
||||
LD HL,0 ;calc. first sector FAT
|
||||
LD (DIR_FRH),HL
|
||||
|
||||
LD E,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
|
||||
LD D,(IY+_sBOOT_SEC.RESERVE+1)
|
||||
LD E,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS) ;Reserve sec
|
||||
LD D,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS+1)
|
||||
ADD HL,DE
|
||||
LD (FAT_FRM),HL ;first sector FAT
|
||||
LD E,(IY+_sBOOT_SEC.S_P_F) ;sectors in FAT
|
||||
LD D,(IY+_sBOOT_SEC.S_P_F+1)
|
||||
LD E,(IY+_sBOOT_SECTOR_PARAMS.S_P_F) ;sectors in FAT
|
||||
LD D,(IY+_sBOOT_SECTOR_PARAMS.S_P_F+1)
|
||||
LD A,(BOOT.FAT_NUM) ;amount FATs
|
||||
C_DATA1: ADD HL,DE
|
||||
DEC A
|
||||
JR NZ,C_DATA1
|
||||
LD (DIR_FRM),HL ;first sector DIR
|
||||
EX DE,HL
|
||||
LD L,(IY+_sBOOT_SEC.F_P_DIR) ;Number file handel
|
||||
LD H,(IY+_sBOOT_SEC.F_P_DIR+1)
|
||||
LD L,(IY+_sBOOT_SECTOR_PARAMS.F_P_DIR) ;Number file handel
|
||||
LD H,(IY+_sBOOT_SECTOR_PARAMS.F_P_DIR+1)
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
@ -381,8 +381,8 @@ C_DATA1: ADD HL,DE
|
||||
ADD HL,DE
|
||||
LD (DAT_FRM),HL ;First sector data
|
||||
|
||||
LD C,(IY+_sBOOT_SEC.B_P_S) ;Size sector
|
||||
LD B,(IY+_sBOOT_SEC.B_P_S+1)
|
||||
LD C,(IY+_sBOOT_SECTOR_PARAMS.B_P_S) ;Size sector
|
||||
LD B,(IY+_sBOOT_SECTOR_PARAMS.B_P_S+1)
|
||||
LD HL,0
|
||||
LD A,(BOOT.S_P_C)
|
||||
NEXTAD3:
|
||||
@ -437,7 +437,7 @@ BPB_FAT
|
||||
XOR A
|
||||
RET
|
||||
|
||||
IBMDOS_ LD A,(IY+_sBOOT_SEC.ID_FORM)
|
||||
IBMDOS_ LD A,(IY+_sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
||||
CP #F0
|
||||
RET C
|
||||
CP #F8
|
||||
@ -724,7 +724,7 @@ MASKARE DB "SYSTEM DOS"
|
||||
FATMSG DB "FAT"
|
||||
|
||||
; Area for boot sector [512Bytes]
|
||||
BOOT _sBOOT_SEC = $
|
||||
BOOT _sBOOT_SECTOR_PARAMS = $
|
||||
|
||||
; BOOT EQU $
|
||||
; ID_NAME EQU BOOT+#03 ; +03 DOS NAME
|
||||
|
||||
@ -357,7 +357,7 @@ write_to_: ld a,(disk) ;
|
||||
LD BC,1*256 + BIOS.DRV_READ
|
||||
RST ToBIOS
|
||||
POP BC
|
||||
LD HL,(buffer + _sBOOT_SEC.RESERVE)
|
||||
LD HL,(buffer + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS)
|
||||
LD DE,04 ;!HARDCODE ¬¨¨¬ «ì®¥ à ááâ®ï¨¥ ¤à ©¢¥ ®â ã«¥¢®£® ᥪâ®à ¤® ä â (¤«¨ § £àã§ç¨ª + 1)
|
||||
AND A
|
||||
SBC HL,DE
|
||||
|
||||
@ -31,7 +31,7 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
|
||||
CALL .OPENATR ;R002
|
||||
RET C
|
||||
;!TEST ;[x] 16/11/23 optimize get attribute
|
||||
LD A,(HANDBUF+_sFM.ATTRIBUT)
|
||||
LD A,(HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT)
|
||||
;LD B,(IY+_sFM.ATTRIBUT)
|
||||
;PUSH BC
|
||||
;CALL CLOSE
|
||||
@ -56,7 +56,7 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
|
||||
RET C
|
||||
SET 7,(IY+_sFM.ACCESS_MODE)
|
||||
RES 3,B ;CLEAR LABEL ATTR ;R003 ;!HARDCODE attribute bit
|
||||
LD (IY+_sFM.ATTRIBUT),B
|
||||
LD (IY+_sFM.FS_REC.ATTRIBUT),B
|
||||
PUSH BC
|
||||
CALL CLOSE_FN
|
||||
.error: POP BC
|
||||
|
||||
@ -31,8 +31,8 @@ CLOSE_FN:
|
||||
LD (IY+_sFM.DIR_CLUSTER),E
|
||||
LD (IY+_sFM.DIR_CLUSTER+1),D
|
||||
; [x] 15/11/2023 -bug with bad clusters ;!TEST
|
||||
LD (IY+_sFM.ST_CLUSTER),E
|
||||
LD (IY+_sFM.ST_CLUSTER+1),D
|
||||
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),E
|
||||
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),D
|
||||
;
|
||||
CALL LOADDIR
|
||||
.TMP+1: LD A,0
|
||||
|
||||
@ -13,13 +13,22 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
||||
POP BC
|
||||
POP HL
|
||||
RET C
|
||||
LD A,C
|
||||
LD A,C ;
|
||||
;
|
||||
CALL .Prepare
|
||||
RET C
|
||||
CALL SEARCH.File
|
||||
CALL NC,DEL_FN.DELETE ;FILE EXIST RECREAT
|
||||
JR .DO
|
||||
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
|
||||
;CALL NC,DEL_FN.DELETE ;FILE EXIST RECREAT
|
||||
CALL NC,.FILE_EXISTS_DEL ;FILE EXIST RECREAT
|
||||
CP DSS_Error.sys.FILE_NOT_FOUND
|
||||
JR Z,.DO
|
||||
SCF
|
||||
RET
|
||||
.FILE_EXISTS_DEL:
|
||||
CALL DEL_FN.DELETE
|
||||
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
||||
RET
|
||||
;
|
||||
.NEW_FN:
|
||||
AND FAT_ATTR.NoVolID ; [x] 2/12/23 ˘ŕĽŹĽëŠ ä¨Şá ¤Ťď volume ID
|
||||
@ -36,10 +45,17 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
||||
CALL .Prepare
|
||||
RET C
|
||||
CALL SEARCH.File
|
||||
LD A,DSS_Error.sys.FILE_EXISTS
|
||||
CCF
|
||||
RET C
|
||||
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
|
||||
; LD A,DSS_Error.sys.FILE_EXISTS
|
||||
; CCF
|
||||
; RET C
|
||||
JR NC,.FILE_EXISTS
|
||||
CP DSS_Error.sys.FILE_NOT_FOUND
|
||||
SCF
|
||||
RET NZ
|
||||
;
|
||||
;
|
||||
;no_file_found
|
||||
.DO: LD HL,MASKARE
|
||||
LD DE,HANDBUF
|
||||
LD BC,11
|
||||
@ -89,6 +105,12 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
||||
; LD HL,TMPNAME
|
||||
; LD DE,MASKARE
|
||||
JP MASK
|
||||
;
|
||||
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
|
||||
.FILE_EXISTS:
|
||||
LD A,DSS_Error.sys.FILE_EXISTS
|
||||
CCF
|
||||
RET
|
||||
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
|
||||
; OUTPUT: A - FM
|
||||
CREAT_N EQU CREATE.NEW_FN
|
||||
|
||||
@ -26,26 +26,27 @@ DEL_FN: ;!TEST
|
||||
CALL LOADDIR
|
||||
CALL SEARCH.File
|
||||
RET C
|
||||
;JP .DELETE
|
||||
; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||||
.DELETE: SET_PAGE_X DIRPAGE
|
||||
LD (IX+_sFM.NAME),#E5 ; ¯à¨§ ª 㤠«¥¨ï ä ©«
|
||||
LD E,(IX+_sFM.ST_CLUSTER) ; ü ¯¥à¢®£® ª« áâ¥à
|
||||
LD D,(IX+_sFM.ST_CLUSTER+1)
|
||||
.DELETE:
|
||||
SET_PAGE_X DIRPAGE
|
||||
LD (IX + _sFAT_DIRECTORY_RECORD.NAME),#E5 ; ¯à¨§ ª 㤠«¥¨ï ä ©«
|
||||
; [ ] fat32
|
||||
LD E,(IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; ü ¯¥à¢®£® ª« áâ¥à
|
||||
LD D,(IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
|
||||
;
|
||||
OUT (SLOT3),A
|
||||
LD A,E
|
||||
OR D
|
||||
JP Z,SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||
.loop: EX DE,HL ; hl=®¬¥à ª« áâ¥à
|
||||
CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
PUSH DE ; ®¬¥à á«¥¤. ª« áâ¥à
|
||||
PUSH AF
|
||||
LD DE,#0000 ; ®¬¥à ª« áâ¥à
|
||||
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
POP AF
|
||||
POP DE
|
||||
JP NC,.loop
|
||||
CALL WR_FAT ;!FIXIT ¬®¦¥â ¥ 㦠âãâ? ’ ¬ ¤ «ìè¥ ¡ã¤¥â
|
||||
CALL WRITE_FAT_TABLE ;!FIXIT ¬®¦¥â ¥ 㦠âãâ? ’ ¬ ¤ «ìè¥ ¡ã¤¥â
|
||||
JP SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||
;
|
||||
@ -14,11 +14,11 @@ GET_D_T:
|
||||
CALL SET_FM
|
||||
RET C
|
||||
; ¢à¥¬ï/¤ âã ¨§ áâàãªâãàë ¤¥áªà.
|
||||
LD E,(IY+_sFM.TIME) ; ¢à¥¬ï
|
||||
LD D,(IY+_sFM.TIME+1) ;
|
||||
LD C,(IY+_sFM.DATE) ; ¤ â
|
||||
LD B,(IY+_sFM.DATE+1) ;
|
||||
CALL RMKTIME ; à ᪮¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||||
LD E,(IY+_sFM.FS_REC.TIME) ; ¢à¥¬ï
|
||||
LD D,(IY+_sFM.FS_REC.TIME+1) ;
|
||||
LD C,(IY+_sFM.FS_REC.DATE) ; ¤ â
|
||||
LD B,(IY+_sFM.FS_REC.DATE+1) ;
|
||||
CALL RMKTIME ; à ᪮¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
@ -6,6 +6,13 @@
|
||||
;
|
||||
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
;error
|
||||
MKDIR.DIR_EXISTS:
|
||||
LD A,DSS_Error.sys.DIR_EXISTS
|
||||
CCF
|
||||
RET
|
||||
|
||||
|
||||
MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
PUSH HL
|
||||
CALL DIR_PATH_CHECK
|
||||
@ -28,16 +35,22 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
;CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£
|
||||
;
|
||||
CALL SEARCH.Dir ; ¯®¨áª § ¯¨á¨ ª â «®£ ¢ ᯨ᪥ ¤¨áª
|
||||
LD A,DSS_Error.sys.DIR_EXISTS
|
||||
CCF
|
||||
RET C ; ª â «®£ ©¤¥
|
||||
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
|
||||
; LD A,DSS_Error.sys.DIR_EXISTS
|
||||
; CCF
|
||||
; RET C ; ª â «®£ ©¤¥
|
||||
JR NC,.DIR_EXISTS
|
||||
CP DSS_Error.sys.FILE_NOT_FOUND
|
||||
SCF
|
||||
RET NZ
|
||||
;
|
||||
CALL G_CLUST
|
||||
RET C
|
||||
PUSH HL
|
||||
LD DE,(FatBuffer.ENDCLUS) ; ®¬¥à ª« áâ¥à
|
||||
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
CALL WR_FAT ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
; [ ] fat32
|
||||
LD DE,(FatBuffer.ENDCLUS_LOW) ; ®¬¥à ª« áâ¥à
|
||||
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
LD HL,MASKARE
|
||||
LD DE,HANDBUF
|
||||
LD BC,11
|
||||
@ -80,7 +93,7 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||
LD HL,CORE_BUFFERS.SECBUF ; ¡ãä¥à
|
||||
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£
|
||||
LD BC,10*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
|
||||
LD BC,10*256 + ' ' ; !HARDCODE b=áç¥â稪, c=¯à®¡¥«
|
||||
;
|
||||
.loop3: INC HL
|
||||
LD (HL),C
|
||||
@ -110,11 +123,12 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
JP Z,.MKD04
|
||||
LD IX,HANDBUF
|
||||
XOR A
|
||||
LD (IX+_sFM.ST_CLUSTER),A
|
||||
LD (IX+_sFM.ST_CLUSTER+1),A
|
||||
LD DE,HANDBUF+11 ; ï祩ª âਡã⮢ ä ©«
|
||||
; [ ] fat32
|
||||
LD (IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),A
|
||||
LD (IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1),A
|
||||
LD DE,HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª âਡã⮢ ä ©«
|
||||
.MKD04: EX DE,HL
|
||||
LD BC,HANDBUF.SIZE-11
|
||||
LD BC,HANDBUF.SIZE - _sFAT_DIRECTORY_RECORD.ATTRIBUT
|
||||
LDIR
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
|
||||
@ -6,6 +6,8 @@
|
||||
; A=0 ç⥨¥/§ ¯¨áì
|
||||
; A=1 ç⥨¥
|
||||
; A=2 § ¯¨áì
|
||||
; ;!TODO A=3 § ¯¨áì ¡¥§ «¨è¨å á®åà ¥¨© ªíè FAT
|
||||
; ;!TODO A=4 § ¯¨á âì ªíè FAT
|
||||
; ¢ë室: CF=0, A - ¤¥áªà¨¯â®à ä ©« .
|
||||
; CF=1, A - ª®¤ ®è¨¡ª¨.
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
@ -18,23 +20,26 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
|
||||
;JR .start
|
||||
;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir?
|
||||
;R008 ;
|
||||
;OPEN: ;
|
||||
;LD (.TMP),A ; enter point from CREATE
|
||||
.start: CALL GETWORD
|
||||
RET C
|
||||
CALL MASK ; enter point from OPEN_FN
|
||||
CALL MASK
|
||||
RET C
|
||||
.FILE: CALL SEARCH.File ; enter point from EXEC
|
||||
.FILE: CALL SEARCH.File ; enter point from EXEC, CREATE
|
||||
RET C
|
||||
;!TEST 㪠§ â¥«ì § ¯¨áì ¢ ª â «®£¥ FS
|
||||
PUSH DE ; á®åà 塞 㪠§ â¥«ì § ¯¨áì ¢ ª â «®£¥ FS (¯®«ãç¥ ¨§ SEARCH)
|
||||
;R002 ;
|
||||
.FM: CALL GET_FM ; enter point from ATTRIB
|
||||
RET C
|
||||
LD A,C
|
||||
EX AF,AF'
|
||||
EXX
|
||||
LD (IY+_sFM.HANDLE),E
|
||||
LD (IY+_sFM.HANDLE+1),D
|
||||
EXX
|
||||
;!TEST 㪠§ â¥«ì § ¯¨áì ¢ ª â «®£¥ FS
|
||||
POP DE
|
||||
; EXX
|
||||
LD (IY+_sFM.HANDLE),E
|
||||
LD (IY+_sFM.HANDLE+1),D
|
||||
; EXX
|
||||
;
|
||||
LD D,YH
|
||||
LD E,YL
|
||||
LD HL,HANDBUF
|
||||
@ -45,11 +50,11 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
|
||||
LD A,(TASK)
|
||||
LD (IY+_sFM.TASK_NUM),A
|
||||
XOR A
|
||||
;
|
||||
; [ ] fat32
|
||||
LD (IY+_sFM.KnownCluster_L),A
|
||||
LD (IY+_sFM.KnownCluster_H),A
|
||||
LD (IY+_sFM.KnownCluster_L+1),A
|
||||
LD (IY+_sFM.KnownOffset_L),A
|
||||
LD (IY+_sFM.KnownOffset_H),A
|
||||
LD (IY+_sFM.KnownOffset_L+1),A
|
||||
;
|
||||
LD (IY+_sFM.F_POSITION),A
|
||||
LD (IY+_sFM.F_POSITION+1),A
|
||||
@ -57,10 +62,12 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
|
||||
LD (IY+_sFM.F_POSITION+3),A
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD (IY+_sFM.DRIVE),A
|
||||
LD HL,CORE_BUFFERS.FM_BUF+_sFM.ST_CLUSTER
|
||||
; [ ] fat32
|
||||
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_L
|
||||
LD E,(HL)
|
||||
INC HL
|
||||
LD D,(HL)
|
||||
; [ ] fat32
|
||||
LD (IY+_sFM.DIR_CLUSTER),E
|
||||
LD (IY+_sFM.DIR_CLUSTER+1),D
|
||||
EX AF,AF'
|
||||
|
||||
@ -16,19 +16,7 @@ READ: LD (.R_POINT),HL
|
||||
CALL OPENDSK
|
||||
JP C,.ERR_1
|
||||
;<3B> áçñâ á¬¥é¥¨ï ¢ ᥪâ®à å
|
||||
; LD C,(IY+_sFM.F_POSITION)
|
||||
; LD E,(IY+_sFM.F_POSITION+1)
|
||||
; LD A,E
|
||||
; AND #01
|
||||
; LD B,A
|
||||
; LD D,(IY+_sFM.F_POSITION+2)
|
||||
; LD L,(IY+_sFM.F_POSITION+3)
|
||||
; LD H,0
|
||||
; OR A
|
||||
; RR L
|
||||
; RR D
|
||||
; RR E
|
||||
LD H,0 ;
|
||||
LD H,0 ;!HARDCODE max file size = 8 gb
|
||||
LD L,(IY+_sFM.F_POSITION+3)
|
||||
LD D,(IY+_sFM.F_POSITION+2)
|
||||
LD E,(IY+_sFM.F_POSITION+1)
|
||||
@ -43,7 +31,6 @@ READ: LD (.R_POINT),HL
|
||||
;HL:DE FP (in sectors)
|
||||
;BC FP residue (in bytes)
|
||||
;
|
||||
;LD A,B
|
||||
OR C
|
||||
JP NZ,.ROV1
|
||||
.ROV4: POP BC
|
||||
@ -53,7 +40,7 @@ READ: LD (.R_POINT),HL
|
||||
LD (.SECTORH),HL
|
||||
LD (.SECTORL),DE
|
||||
.R_POINT+2: LD IX,0
|
||||
CALL BLOK_RD
|
||||
CALL BLOCK_READ
|
||||
JP C,.ERR_1
|
||||
LD DE,(.R_POINT)
|
||||
.PointerOnBuffer+1:
|
||||
@ -84,7 +71,7 @@ READ: LD (.R_POINT),HL
|
||||
PUSH AF
|
||||
IN A,(SLOT0)
|
||||
OUT (SLOT3),A
|
||||
CALL BLOK_RD
|
||||
CALL BLOCK_READ
|
||||
POP BC
|
||||
LD C,SLOT3
|
||||
OUT (C),B
|
||||
@ -109,7 +96,8 @@ READ: LD (.R_POINT),HL
|
||||
.NOREAD:
|
||||
.COD+1: LD A,0
|
||||
OR A
|
||||
RET
|
||||
RET
|
||||
;
|
||||
.ROV1: PUSH BC
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
@ -119,39 +107,41 @@ READ: LD (.R_POINT),HL
|
||||
PUSH AF
|
||||
IN A,(SLOT0)
|
||||
OUT (SLOT3),A
|
||||
CALL BLOK_RD
|
||||
CALL BLOCK_READ
|
||||
POP BC
|
||||
LD C,SLOT3
|
||||
OUT (C),B
|
||||
POP HL
|
||||
JP C,.ERR_3
|
||||
; inc HL:DE
|
||||
LD BC,1
|
||||
ADD HL,BC
|
||||
EX DE,HL
|
||||
POP HL
|
||||
LD C,B
|
||||
ADC HL,BC
|
||||
;
|
||||
EXX
|
||||
POP DE
|
||||
LD HL,512 ;!HARDCODE
|
||||
AND A
|
||||
SBC HL,DE
|
||||
LD B,H
|
||||
LD C,L
|
||||
POP HL
|
||||
AND A
|
||||
SBC HL,BC
|
||||
JR NC,.ROV3
|
||||
ADD HL,BC
|
||||
LD B,H
|
||||
LD C,L
|
||||
LD HL,0 ;!TODO ¬®¦® âãâ ã¯à®áâ¨âì ¤ «ì¥©èãî ¢¥âªã?
|
||||
.ROV3: PUSH HL
|
||||
LD HL,CORE_BUFFERS.BUFFER
|
||||
ADD HL,DE
|
||||
LD DE,(.R_POINT)
|
||||
LDIR
|
||||
LD (.R_POINT),DE
|
||||
POP DE
|
||||
LD HL,512 ;!HARDCODE sector size!
|
||||
AND A
|
||||
SBC HL,DE
|
||||
LD B,H
|
||||
LD C,L
|
||||
POP HL
|
||||
AND A
|
||||
SBC HL,BC
|
||||
JR NC,.ROV3
|
||||
ADD HL,BC
|
||||
LD B,H
|
||||
LD C,L
|
||||
LD HL,0 ;!TODO ¬®¦® âãâ ã¯à®áâ¨âì ¤ «ì¥©èãî ¢¥âªã?
|
||||
.ROV3: PUSH HL
|
||||
LD HL,CORE_BUFFERS.BUFFER
|
||||
ADD HL,DE
|
||||
LD DE,(.R_POINT)
|
||||
LDIR
|
||||
LD (.R_POINT),DE
|
||||
EXX
|
||||
JP .ROV4
|
||||
.ERR_3: POP HL
|
||||
@ -170,24 +160,24 @@ TSTSIZE:
|
||||
ADD HL,DE
|
||||
;
|
||||
EXX
|
||||
;LD DE,0 ;!TEST
|
||||
LD L,(IY+_sFM.F_POSITION+2) ;FP HIGH
|
||||
LD H,(IY+_sFM.F_POSITION+3)
|
||||
;!TEST
|
||||
JR NC,.no_inc_hl
|
||||
INC HL
|
||||
;ADC HL,DE
|
||||
;
|
||||
;LD DE,0 ;!TEST
|
||||
LD L,(IY+_sFM.F_POSITION+2) ;FP HIGH
|
||||
LD H,(IY+_sFM.F_POSITION+3)
|
||||
;!TEST
|
||||
JR NC,.no_inc_hl
|
||||
INC HL
|
||||
;ADC HL,DE
|
||||
;
|
||||
.no_inc_hl:
|
||||
EXX ;HL':HL - NEW FP
|
||||
;
|
||||
LD C,(IY+_sFM.F_SIZE)
|
||||
LD B,(IY+_sFM.F_SIZE+1) ;SIZE LOW
|
||||
LD C,(IY+_sFM.FS_REC.F_SIZE)
|
||||
LD B,(IY+_sFM.FS_REC.F_SIZE+1) ;SIZE LOW
|
||||
AND A
|
||||
SBC HL,BC
|
||||
EXX
|
||||
LD C,(IY+_sFM.F_SIZE+2) ;SIZE HIGH
|
||||
LD B,(IY+_sFM.F_SIZE+3)
|
||||
LD C,(IY+_sFM.FS_REC.F_SIZE+2) ;SIZE HIGH
|
||||
LD B,(IY+_sFM.FS_REC.F_SIZE+3)
|
||||
SBC HL,BC
|
||||
EXX
|
||||
RET C ;OK READ ALL
|
||||
|
||||
@ -37,68 +37,76 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
CALL LOADDIR
|
||||
CALL SEARCH.Dir
|
||||
RET C
|
||||
LD HL,(HANDBUF+_sFM.ST_CLUSTER)
|
||||
; [ ] fat32
|
||||
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
|
||||
PUSH IX
|
||||
.RMD17: PUSH HL
|
||||
CALL NSECTOR
|
||||
LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
||||
.RMD12: PUSH AF
|
||||
; ç¨ ¥¬ ¢ëç¨âë¢ âì ᮤ¥à¦¨¬®¥ ª â «®£ ¯®á¥ªâ®à®
|
||||
.read_dir_loop:
|
||||
PUSH AF
|
||||
PUSH HL
|
||||
PUSH IX
|
||||
;
|
||||
IN A,(SLOT3)
|
||||
PUSH AF
|
||||
IN A,(SLOT0)
|
||||
OUT (SLOT3),A
|
||||
|
||||
LD DE,CORE_BUFFERS.SECBUF+#C000
|
||||
LD BC,1*256 + Dss.DRV.Read
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
RST ToDSS.DRV
|
||||
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
|
||||
LD B,16 ;!HARDCODE 16 * 32 = 512; 32 - à §¬¥à § ¯¨á¨, 512 - à §¬¥à áç¨â ®£® ᥪâ®à
|
||||
;
|
||||
;!HARDCODE 16 * 32 = 512; 32 - à §¬¥à § ¯¨á¨, 512 - à §¬¥à áç¨â ®£® ᥪâ®à
|
||||
LD B,16
|
||||
LD HL,CORE_BUFFERS.SECBUF
|
||||
.RMD10: LD A,(HL)
|
||||
.check_dir_loop:
|
||||
LD A,(HL)
|
||||
OR A
|
||||
JP Z,.RMD15 ;DIR EMPTY
|
||||
JP Z,.RMD15 ;DIR EMPTY
|
||||
CP "."
|
||||
JR Z,.RMD14
|
||||
CP #E5 ;!HARDCODE ¡ ©â 㤠«¥¨ï ä ©«
|
||||
JR Z,.RMD14
|
||||
LD DE,11 ;!HARDCODE ᬥé. ¤® ¡ ©â âਡã⮢
|
||||
JR Z,.next_record
|
||||
CP #E5 ;!HARDCODE ¡ ©â 㤠«¥¨ï ä ©«
|
||||
JR Z,.next_record
|
||||
LD DE,_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ᬥé. ¤® ¡ ©â âਡã⮢
|
||||
ADD HL,DE
|
||||
LD A,(HL)
|
||||
SBC HL,DE
|
||||
;BIT 3,A
|
||||
AND %0000'1000
|
||||
AND FAT_ATTR.VOLUME_ID
|
||||
JP Z,.error ;DIR NOT EMPTY
|
||||
.RMD14: LD DE,#0020
|
||||
.next_record:
|
||||
LD DE,#0020
|
||||
ADD HL,DE
|
||||
DJNZ .RMD10
|
||||
|
||||
DJNZ .check_dir_loop
|
||||
;
|
||||
POP IX
|
||||
POP HL
|
||||
INC IX
|
||||
LD A,XH
|
||||
OR XL
|
||||
JR NZ,.RMD11
|
||||
JR NZ,.no_inc_hl
|
||||
INC HL
|
||||
.RMD11: POP AF
|
||||
.no_inc_hl:
|
||||
POP AF
|
||||
DEC A
|
||||
JR NZ,.RMD12
|
||||
JR NZ,.read_dir_loop
|
||||
;
|
||||
POP HL ; ®¬¥à ª« áâ¥à
|
||||
CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
EX DE,HL ; hl=®¬¥à á«¥¤. ª« áâ¥à
|
||||
JR NC,.RMD17 ; ¥ ª®¥æ 楯®çª¨
|
||||
.RMD18: POP IX
|
||||
.delete:
|
||||
POP IX
|
||||
JP DEL_FN.DELETE ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||||
.RMD15: POP IX
|
||||
POP HL
|
||||
POP AF
|
||||
POP HL
|
||||
JR .RMD18
|
||||
JR .delete
|
||||
;
|
||||
.error: POP IX
|
||||
POP HL
|
||||
POP AF
|
||||
|
||||
@ -25,6 +25,12 @@ SCANDRV:
|
||||
LD A,Dss.DRV.RescanDRV
|
||||
LD C,Dss.DRV.RescanDRV
|
||||
RST ToDSS.DRV
|
||||
; 能恥丞<E681A5> <20> 株芋芥 boot disk lost
|
||||
LD HL,.BOOT_DSK_LOST
|
||||
LD E, +(80-.BOOT_DSK_LOST.size)/2 ; coord X
|
||||
LD BC,.BOOT_DSK_LOST.size
|
||||
JP C,KERNEL_PANIC
|
||||
;
|
||||
LD (LDRIVE),A
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
; 4. ¢á直© á«ãç © ¯¥à¥ç¨âë¢ ¥¬ ¤¨à४â®à¨î
|
||||
@ -47,6 +53,10 @@ SCANDRV:
|
||||
RET PO
|
||||
EI
|
||||
RET
|
||||
;
|
||||
.BOOT_DSK_LOST:
|
||||
DZ "Boot drive lost o_O"
|
||||
.BOOT_DSK_LOST.size EQU $-.BOOT_DSK_LOST
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
;///////////////////////////////////////////////////////////////////////
|
||||
;
|
||||
@ -20,11 +20,11 @@ PUT_D_T:
|
||||
POP BC
|
||||
POP DE
|
||||
RET C
|
||||
LD (IY+_sFM.TIME),E
|
||||
LD (IY+_sFM.TIME+1),D
|
||||
LD (IY+_sFM.DATE),C
|
||||
LD (IY+_sFM.DATE+1),B
|
||||
SET 7,(IY+_sFM.ACCESS_MODE) ;R006 ; ãáâ. ¯à¨§ ª ¨§¬¥¥¨ï ä ©«
|
||||
LD (IY + _sFM.FS_REC.TIME),E
|
||||
LD (IY + _sFM.FS_REC.TIME+1),D
|
||||
LD (IY + _sFM.FS_REC.DATE),C
|
||||
LD (IY + _sFM.FS_REC.DATE+1),B
|
||||
SET 7,(IY + _sFM.ACCESS_MODE) ;R006 ; ãáâ. ¯à¨§ ª ¨§¬¥¥¨ï ä ©«
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
@ -15,12 +15,12 @@ WRITE.RD_ONLY:
|
||||
; HL - ADDRESS
|
||||
; DE - SIZE
|
||||
; A - FM
|
||||
WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] ¨§¡ëâ®çë¥ ¢ë§®¢ë WR_FAT
|
||||
WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] ¨§¡ëâ®çë¥ ¢ë§®¢ë WRITE_FAT_TABLE
|
||||
CALL .Start
|
||||
PUSH AF
|
||||
LD A,(FatCache.Update)
|
||||
OR A
|
||||
CALL NZ,WR_FAT ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
CALL NZ,WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
@ -32,9 +32,9 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
|
||||
LD A,(IY+_sFM.ACCESS_MODE)
|
||||
AND FAT_ATTR.READ_ONLY
|
||||
JR NZ,.RD_ONLY
|
||||
SET 7,(IY+_sFM.ACCESS_MODE)
|
||||
SET 5,(IY+_sFM.ATTRIBUT)
|
||||
LD A,(IY+_sFM.DRIVE)
|
||||
SET 7,(IY + _sFM.ACCESS_MODE)
|
||||
SET 5,(IY + _sFM.FS_REC.ATTRIBUT)
|
||||
LD A,(IY + _sFM.DRIVE)
|
||||
CALL OPENDSK
|
||||
JR C,.ERR1
|
||||
;
|
||||
@ -96,7 +96,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
|
||||
PUSH AF
|
||||
IN A,(SLOT0)
|
||||
OUT (SLOT3),A
|
||||
CALL BLOK_RD
|
||||
CALL BLOCK_READ
|
||||
POP BC
|
||||
LD C,SLOT3
|
||||
OUT (C),B
|
||||
@ -134,14 +134,14 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
|
||||
POP DE
|
||||
RET NC ; …᫨ à §¬¥à ä ©« ¤¨áª¥ <20>… áâ « ¡®«ìè¥, 祬 ¡ë«
|
||||
; …᫨ à §¬¥à ä ©« ¤¨áª¥ áâ « ¡®«ìè¥, 祬 ¡ë«
|
||||
LD L,(IY+_sFM.F_POSITION+0)
|
||||
LD H,(IY+_sFM.F_POSITION+1)
|
||||
LD C,(IY+_sFM.F_POSITION+2)
|
||||
LD B,(IY+_sFM.F_POSITION+3)
|
||||
LD (IY+_sFM.F_SIZE+0),L
|
||||
LD (IY+_sFM.F_SIZE+1),H
|
||||
LD (IY+_sFM.F_SIZE+2),C
|
||||
LD (IY+_sFM.F_SIZE+3),B
|
||||
LD L,(IY + _sFM.F_POSITION+0)
|
||||
LD H,(IY + _sFM.F_POSITION+1)
|
||||
LD C,(IY + _sFM.F_POSITION+2)
|
||||
LD B,(IY + _sFM.F_POSITION+3)
|
||||
LD (IY + _sFM.FS_REC.F_SIZE+0),L
|
||||
LD (IY + _sFM.FS_REC.F_SIZE+1),H
|
||||
LD (IY + _sFM.FS_REC.F_SIZE+2),C
|
||||
LD (IY + _sFM.FS_REC.F_SIZE+3),B
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
@ -154,35 +154,35 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
|
||||
PUSH AF
|
||||
IN A,(SLOT0)
|
||||
OUT (SLOT3),A
|
||||
CALL BLOK_RD
|
||||
CALL BLOCK_READ
|
||||
POP BC
|
||||
LD C,SLOT3
|
||||
OUT (C),B
|
||||
POP DE
|
||||
POP HL
|
||||
EXX
|
||||
POP DE
|
||||
JP C,.ERR1
|
||||
LD HL,512 ;!HARDCODE
|
||||
AND A
|
||||
SBC HL,DE
|
||||
LD B,H
|
||||
LD C,L
|
||||
POP HL
|
||||
AND A
|
||||
SBC HL,BC
|
||||
JR NC,.WOV3
|
||||
ADD HL,BC
|
||||
LD B,H
|
||||
LD C,L
|
||||
LD HL,0
|
||||
.WOV3: PUSH HL
|
||||
LD HL,CORE_BUFFERS.BUFFER
|
||||
ADD HL,DE
|
||||
LD DE,(.R_POINT)
|
||||
EX DE,HL
|
||||
LDIR
|
||||
LD (.R_POINT),HL
|
||||
POP DE
|
||||
JP C,.ERR1
|
||||
LD HL,512 ;!HARDCODE sector size!
|
||||
AND A
|
||||
SBC HL,DE
|
||||
LD B,H
|
||||
LD C,L
|
||||
POP HL
|
||||
AND A
|
||||
SBC HL,BC
|
||||
JR NC,.WOV3
|
||||
ADD HL,BC
|
||||
LD B,H
|
||||
LD C,L
|
||||
LD HL,0
|
||||
.WOV3: PUSH HL
|
||||
LD HL,CORE_BUFFERS.BUFFER
|
||||
ADD HL,DE
|
||||
LD DE,(.R_POINT)
|
||||
EX DE,HL
|
||||
LDIR
|
||||
LD (.R_POINT),HL
|
||||
EXX
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
|
||||
@ -57,15 +57,15 @@ DISKINF:; [ ] 22/11/23
|
||||
;
|
||||
EX DE,HL
|
||||
LD HL,CORE_BUFFERS.BootSector.ID_FAT
|
||||
LD A,8 ;!HARDCODE _sBOOT_SEC.ID_FAT.length
|
||||
LD A,8 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length
|
||||
CALL .mCOPY_LOOP
|
||||
;
|
||||
LD HL,CORE_BUFFERS.BootSector.BPB_SERIAL_NUMBER
|
||||
LD A,4 ;!HARDCODE _sBOOT_SEC.BPB_SERIAL_NUMBER
|
||||
LD A,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER
|
||||
CALL .mCOPY_LOOP
|
||||
;
|
||||
LD HL,CORE_BUFFERS.BootSector.BPB_LABEL
|
||||
LD A,11 ;!HARDCODE _sBOOT_SEC.BPB_LABEL
|
||||
LD A,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL
|
||||
CALL .mCOPY_LOOP
|
||||
;
|
||||
PUSH DE
|
||||
@ -113,16 +113,14 @@ DISKINF:; [ ] 22/11/23
|
||||
RET C
|
||||
;
|
||||
.CheckFreeSpace:
|
||||
;
|
||||
XOR A
|
||||
OR B
|
||||
CALL NZ,.CURRDS
|
||||
;
|
||||
;
|
||||
.FRESP2:
|
||||
;.FRESP2:
|
||||
LD D,B
|
||||
LD E,C
|
||||
LD HL,(FAT_Max_Cluster)
|
||||
LD HL,(FAT_Max_Cluster_L)
|
||||
DEC HL
|
||||
LD BC,(CORE_BUFFERS.BootSector.B_P_S)
|
||||
LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
||||
@ -133,7 +131,7 @@ DISKINF:; [ ] 22/11/23
|
||||
LD HL,2
|
||||
LD BC,0
|
||||
.FRESP: PUSH BC
|
||||
CALL R_F_FAT
|
||||
CALL READ_FROM_FAT
|
||||
POP BC
|
||||
CP DSS_Error.sys.DISK_FULL
|
||||
RET Z
|
||||
|
||||
@ -43,7 +43,7 @@ FM_BUF: _sFM
|
||||
|
||||
; ¢ë室¥ ¡¥§ ®è¨¡®ª IY 㪠§ë¢ ¥â ä ©«®¢ë© ¬ ¨¯ã«ïâ®à
|
||||
MACRO _mFM_FIND
|
||||
CP FMCOUNT
|
||||
CP FMCOUNT+1
|
||||
JR NC,ABS_FM
|
||||
PUSH DE
|
||||
|
||||
@ -75,7 +75,7 @@ RES_FM: _mFM_FIND
|
||||
SCF
|
||||
RET Z
|
||||
XOR A
|
||||
LD (IY+0),A
|
||||
LD (IY + _sFM.FS_REC.NAME),A
|
||||
RET
|
||||
;
|
||||
GET_FM: LD B,FMCOUNT
|
||||
@ -84,7 +84,7 @@ GET_FM: LD B,FMCOUNT
|
||||
LD DE,CORE_BUFFERS.FM_BUF.Size
|
||||
.loop: ADD IY,DE
|
||||
INC C
|
||||
LD A,(IY+0)
|
||||
LD A,(IY + _sFM.FS_REC.NAME)
|
||||
OR A
|
||||
RET Z
|
||||
DJNZ .loop
|
||||
@ -138,10 +138,10 @@ MOVE_FP:
|
||||
LD E,B
|
||||
JP .DO
|
||||
;from End File
|
||||
.B_end: LD C,(IY+_sFM.F_SIZE)
|
||||
LD B,(IY+_sFM.F_SIZE+1)
|
||||
LD E,(IY+_sFM.F_SIZE+2)
|
||||
LD D,(IY+_sFM.F_SIZE+3)
|
||||
.B_end: LD C,(IY + _sFM.FS_REC.F_SIZE)
|
||||
LD B,(IY + _sFM.FS_REC.F_SIZE+1)
|
||||
LD E,(IY + _sFM.FS_REC.F_SIZE+2)
|
||||
LD D,(IY + _sFM.FS_REC.F_SIZE+3)
|
||||
JP .DO
|
||||
;from Current Position
|
||||
.F_current:
|
||||
@ -164,16 +164,16 @@ MOVE_FP:
|
||||
; CY - FILE POINTER > SIZE
|
||||
; NC - FILE POINTER < SIZE
|
||||
MOVE_CP:
|
||||
LD L,(IY+_sFM.F_SIZE)
|
||||
LD H,(IY+_sFM.F_SIZE+1)
|
||||
LD E,(IY+_sFM.F_POSITION)
|
||||
LD D,(IY+_sFM.F_POSITION+1)
|
||||
LD L,(IY + _sFM.FS_REC.F_SIZE)
|
||||
LD H,(IY + _sFM.FS_REC.F_SIZE+1)
|
||||
LD E,(IY + _sFM.F_POSITION)
|
||||
LD D,(IY + _sFM.F_POSITION+1)
|
||||
AND A
|
||||
SBC HL,DE
|
||||
LD L,(IY+_sFM.F_SIZE+2)
|
||||
LD H,(IY+_sFM.F_SIZE+3)
|
||||
LD E,(IY+_sFM.F_POSITION+2)
|
||||
LD D,(IY+_sFM.F_POSITION+3)
|
||||
LD L,(IY + _sFM.FS_REC.F_SIZE+2)
|
||||
LD H,(IY + _sFM.FS_REC.F_SIZE+3)
|
||||
LD E,(IY + _sFM.F_POSITION+2)
|
||||
LD D,(IY + _sFM.F_POSITION+3)
|
||||
SBC HL,DE
|
||||
RET
|
||||
;
|
||||
@ -216,24 +216,19 @@ OPENDSK:;!TEST DRV.Open
|
||||
POP BC
|
||||
JP C,.error
|
||||
;[ ] 29/02/2024 fix "open drive error"
|
||||
IF TEST_FEATURE
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD D,A
|
||||
PUSH DE
|
||||
ENDIF
|
||||
;
|
||||
LD A,B
|
||||
LD (FatBuffer.DRIVE),A
|
||||
;
|
||||
CALL RD_BPB
|
||||
;[ ] 29/02/2024 fix "open drive error"
|
||||
IF TEST_FEATURE
|
||||
POP DE
|
||||
LD A,D
|
||||
JR C,.error_disk
|
||||
ELSE
|
||||
RET C
|
||||
ENDIF
|
||||
; RET C
|
||||
;
|
||||
.exit: LD A,(LDRIVE)
|
||||
AND A
|
||||
@ -244,19 +239,28 @@ OPENDSK:;!TEST DRV.Open
|
||||
LD A,DSS_Error.sys.NOT_READY
|
||||
RET
|
||||
;[ ] 29/02/2024 fix "open drive error"
|
||||
IF TEST_FEATURE
|
||||
.error_disk:
|
||||
CALL OPENDSK.force
|
||||
LD A,(BOOTDSK.NUM)
|
||||
CALL C,OPENDSK.force
|
||||
; ¯à®¢¥àª ®è¨¡ªã
|
||||
LD HL,.NOT_READY
|
||||
LD E, +(80-.NOT_READY.size)/2 ; coord X
|
||||
LD BC,.NOT_READY.size
|
||||
JP C,KERNEL_PANIC
|
||||
;
|
||||
LD A,DSS_Error.sys.NOT_READY
|
||||
SCF
|
||||
RET
|
||||
ENDIF
|
||||
;
|
||||
.NOT_READY: DZ "Boot drive not ready..."
|
||||
.NOT_READY.size EQU $-.NOT_READY
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
OPENDIR:;!TEST ;[x] some optimize
|
||||
OPENDIR:;[x] some optimizations
|
||||
;XOR A
|
||||
;CALL SET_FM
|
||||
LD IY,CORE_BUFFERS.FM_BUF
|
||||
@ -266,11 +270,12 @@ OPENDIR:;!TEST ;[x] some optimize
|
||||
JR NZ,.SUBDIR
|
||||
.REROOT1:
|
||||
LD DE,0
|
||||
;!TEST ;[x] some optimize
|
||||
;LD (IY+_sFM.ST_CLUSTER),E
|
||||
;LD (IY+_sFM.ST_CLUSTER+1),D
|
||||
;[x] some optimizations
|
||||
;LD (IY+_sFM.FIRST_CLUSTER_L),E
|
||||
;LD (IY+_sFM.FIRST_CLUSTER_L+1),D
|
||||
; [ ] fat32
|
||||
EX DE,HL
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.ST_CLUSTER),HL
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL
|
||||
EX DE,HL
|
||||
;
|
||||
CALL LOADDIR
|
||||
@ -284,11 +289,12 @@ OPENDIR:;!TEST ;[x] some optimize
|
||||
.SUBDIR:
|
||||
CP "."
|
||||
JR NZ,.SUBDIR2
|
||||
;!TEST ;[x] some optimize
|
||||
;LD A,(IY+_sFM.ST_CLUSTER) ;R005
|
||||
LD A,(CORE_BUFFERS.FM_BUF + _sFM.ST_CLUSTER) ;R005
|
||||
;!TEST ;[x] some optimizations
|
||||
;LD A,(IY+_sFM.FIRST_CLUSTER_L) ;R005
|
||||
; [ ] fat32
|
||||
LD A,(CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L) ;R005
|
||||
;
|
||||
OR (IY+_sFM.ST_CLUSTER+1) ;R005
|
||||
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1) ;R005
|
||||
JR NZ,.SUDI1 ;R005
|
||||
INC HL ;R005
|
||||
LD A,(HL) ;R005
|
||||
@ -314,16 +320,16 @@ OPENDIR:;!TEST ;[x] some optimize
|
||||
.SUBDIR3:
|
||||
CALL FINDDIR
|
||||
RET C
|
||||
;!TEST ;[x] some optimize
|
||||
;LD (IY+_sFM.ST_CLUSTER),E
|
||||
;LD (IY+_sFM.ST_CLUSTER+1),D
|
||||
;!TEST ;[x] some optimizations
|
||||
;LD (IY+_sFM.FIRST_CLUSTER_L),E
|
||||
;LD (IY+_sFM.FIRST_CLUSTER_L+1),D
|
||||
;LD DE,#4000 ;!HARDCODE
|
||||
;LD (IY+_sFM.F_SIZE),E
|
||||
;LD (IY+_sFM.F_SIZE+1),D
|
||||
EX DE,HL
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.ST_CLUSTER),HL
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL ; [ ] fat32
|
||||
LD HL,#4000 ;!HARDCODE
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.F_SIZE),HL
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.F_SIZE),HL
|
||||
EX DE,HL
|
||||
;
|
||||
JP LOADDIR
|
||||
@ -335,7 +341,6 @@ OPENDIR:;!TEST ;[x] some optimize
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; .custom:
|
||||
; <20>८¡à §®¢ âì ¨¬ï 8.3 -> 11 ä®à¬ â
|
||||
; ¢å®¤: hl = 8.3 ¨¬ï
|
||||
; de = ¡ãä¥à ¨¬¥¨ 11 ᨬ¢. ä®à¬ â
|
||||
|
||||
@ -232,33 +232,9 @@ PORTAL.out_MAIN: ;
|
||||
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
|
||||
;
|
||||
|
||||
/*
|
||||
STRUCT _sBOOT_SEC
|
||||
.JMP: BLOCK 3,0 ; +#00 "JMP"
|
||||
.ID_NAME: TEXT 8,{"DSS_1.7","0"} ; +#03 DOS NAME - DB "DSS_1.70"
|
||||
; Block Parameters BIOS
|
||||
.B_P_S: WORD #200 ; +#0B BYTE PER SECTOR
|
||||
.S_P_C: BYTE 2 ; +#0D SECTORS PER CLUSTER
|
||||
.RESERVE: WORD 1 ; +#0E RESERVE SECTORS
|
||||
.FAT_NUM: BYTE 2 ; +#10 AMOUNT FATS
|
||||
.F_P_DIR: WORD 112 ; +#11 FILES IN DIRECTORY
|
||||
.S_P_D: WORD 1440 ; +#13 ALL SECTORS ON DISK
|
||||
.ID_FORM: BYTE #F0 ; +#15 ID FORMAT
|
||||
.S_P_F: WORD 2 ; +#16 SIZE FAT IN SECTORS
|
||||
.S_P_T: WORD 9 ; +#18 SECTOR PER TRACK
|
||||
.HEADS: WORD 2 ; +#1A AMOUNT SIDES
|
||||
.HIDDEN: DWORD 0 ; +#1C HIDDEN SECTORS
|
||||
.BPB_BIG_TOTAL_SECTORS: DWORD 0 ; +#20 BIG TOTAL SECTOR
|
||||
.BPB_PHISICAL_DRIVE_NUMBER: WORD #80 ; +#24 PHISICAL DRIVE NUMBER
|
||||
.BPB_EXT_BOOT_RECORD_SIGNATURE: BYTE #29 ; +#26 EXTENDED BOOT RECORD SIGNATURE
|
||||
.BPB_SERIAL_NUMBER: DWORD 0 ; +#27 VOLUME SERIAL NUMBER
|
||||
.BPB_LABEL: TEXT 11,{"NO NAME"," "} ; +#2B DISK LABEL
|
||||
.ID_FAT: TEXT 8,{"FAT16"," "} ; +#36 FILE SYSTEM ID ( BPB_FS_ID )
|
||||
ENDS
|
||||
*/
|
||||
;R01
|
||||
; Area for boot sector BootSector.
|
||||
;BootSector _sBOOT_SEC ,{ "DSS_","0"+VERS,".",MODF/10+"0",MODF-(MODF/10)*10+"0" }
|
||||
;BootSector _sBOOT_SECTOR_PARAMS ,{ "DSS_","0"+VERS,".",MODF/10+"0",MODF-(MODF/10)*10+"0" }
|
||||
; end boot sector
|
||||
;R01
|
||||
|
||||
@ -451,7 +427,7 @@ ADRST10: ;DS 512 ;,0
|
||||
INCLUDE "EXECUTE.ASM"
|
||||
INCLUDE "INTMOUSE.ASM"
|
||||
INCLUDE "Procedures.asm"
|
||||
|
||||
INCLUDE "Kernel_Panic.asm"
|
||||
|
||||
;!FIXIT ª ¡ãä¥à ¬
|
||||
; Œ áᨢ «®£. ®¬¥à®¢ ¡ ®ª à áè¨à¥¨ï DSS
|
||||
@ -486,15 +462,15 @@ WorkDirectory: DB '\'
|
||||
CLEAR_ZONE.start EQU $
|
||||
|
||||
MODULE CORE_BUFFERS
|
||||
BUFFERSplace _sBuffers=$
|
||||
FM_BUF _sFM = BUFFERSplace.FileManipulator
|
||||
.Size EQU _sFM
|
||||
.FullSize EQU FMCOUNT*FM_BUF.Size
|
||||
BootSector _sBOOT_SEC = BUFFERSplace.BootSector
|
||||
EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header
|
||||
XSTACK EQU BUFFERSplace.Stack.SPoint
|
||||
BUFFER EQU BUFFERSplace.Buffer
|
||||
SECBUF EQU BUFFER ;!TODO ®â¤¥«¨âì SECBUF ®â BUFFER
|
||||
BUFFERSplace _sBuffers=$
|
||||
FM_BUF _sFM = BUFFERSplace.FileManipulator
|
||||
.Size EQU _sFM
|
||||
.FullSize EQU FMCOUNT*FM_BUF.Size
|
||||
BootSector _sBOOT_SECTOR_PARAMS = BUFFERSplace.BootSector
|
||||
EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header
|
||||
XSTACK EQU BUFFERSplace.Stack.SPoint
|
||||
BUFFER EQU BUFFERSplace.Buffer
|
||||
SECBUF EQU BUFFER ;!TODO ®â¤¥«¨âì SECBUF ®â BUFFER
|
||||
ENDMODULE
|
||||
CLEAR_ZONE.size EQU _sBuffers
|
||||
|
||||
|
||||
@ -151,20 +151,20 @@ PATH_PR EQU 2 ;%00000100
|
||||
EXTN_PR EQU 1 ;%00000010
|
||||
NAM_PR EQU 0 ;%00000001
|
||||
|
||||
EX_PATH: EXX
|
||||
LD HL,NM_PATH_A ;BUILT-IN BUFFER FOR PATH ;!!!!! ¨á¯®«ì§ã¥âáï ®¡é¨© ¡ãä¥à
|
||||
LD (NM_PATH),HL
|
||||
LD HL,NM_NAME_A
|
||||
LD (NM_NAME),HL
|
||||
LD HL,NM_EXTN_A
|
||||
LD (NM_EXTN),HL
|
||||
LD HL,NM_DRIVE_A
|
||||
LD (NM_DRIVE),HL
|
||||
EX_PATH:
|
||||
EXX
|
||||
LD HL,NM_PATH_A ;BUILT-IN BUFFER FOR PATH ;!!!!! ¨á¯®«ì§ã¥âáï ®¡é¨© ¡ãä¥à
|
||||
LD (NM_PATH),HL
|
||||
LD HL,NM_NAME_A
|
||||
LD (NM_NAME),HL
|
||||
LD HL,NM_EXTN_A
|
||||
LD (NM_EXTN),HL
|
||||
LD HL,NM_DRIVE_A
|
||||
LD (NM_DRIVE),HL
|
||||
EXX
|
||||
INC B
|
||||
DEC B
|
||||
;JR Z,EX_GET_ALL
|
||||
JR Z,EX_FULL ;0 ; à §®¡à âì áâபã
|
||||
JR Z,EX_FULL ;0 ; à §®¡à âì áâபã
|
||||
DEC B
|
||||
JR Z,EX_GET_DRIVE ;1 ; ¢ë¤¥«¨âì ¨¬ï ¤¨áª
|
||||
DEC B
|
||||
@ -222,10 +222,6 @@ EX_GET_TYPE
|
||||
LD (NM_EXTN),DE
|
||||
JR EX_FULL
|
||||
|
||||
; <20> §®¡à âì áâபã
|
||||
; EX_GET_ALL
|
||||
; JR EX_FULL
|
||||
|
||||
; ‚뤥«¨âì ¤¨áª, ¯ãâì, ä ©« ¨ à áè.
|
||||
EX_GET_ALL_EX:
|
||||
EX DE,HL
|
||||
@ -253,15 +249,15 @@ EX_GET_ALL_EX:
|
||||
; <20> §®¡à âì áâபã
|
||||
EX_FULL: EX AF,AF'
|
||||
EXX
|
||||
XOR A
|
||||
LD HL,(NM_PATH)
|
||||
LD (HL),A
|
||||
LD HL,(NM_NAME) ; ¤à¥á ¡ãä¥à ¯®¤ ¨¬ï ä ©«
|
||||
LD (HL),A
|
||||
LD HL,(NM_EXTN)
|
||||
LD (HL),A
|
||||
LD HL,(NM_DRIVE)
|
||||
LD (HL),A
|
||||
XOR A
|
||||
LD HL,(NM_PATH)
|
||||
LD (HL),A
|
||||
LD HL,(NM_NAME) ; ¤à¥á ¡ãä¥à ¯®¤ ¨¬ï ä ©«
|
||||
LD (HL),A
|
||||
LD HL,(NM_EXTN)
|
||||
LD (HL),A
|
||||
LD HL,(NM_DRIVE)
|
||||
LD (HL),A
|
||||
EXX
|
||||
EX AF,AF'
|
||||
EX_PAT0: LD DE,TMPBUF
|
||||
@ -1070,21 +1066,21 @@ _TST_PROC:
|
||||
JP C,ERREXE0
|
||||
LD (EXE_MEM),A
|
||||
EXX
|
||||
POP DE ;ᨬ ¥¬ á® á⥪ ¤à¥á ¢®§¢à â
|
||||
LD HL,#0000
|
||||
ADD HL,SP
|
||||
LD SP,(EXSTACK)
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
IN A,(SLOT3)
|
||||
LD D,A
|
||||
IN A,(SLOT2)
|
||||
LD E,A
|
||||
IN A,(SLOT1)
|
||||
PUSH DE
|
||||
PUSH AF
|
||||
LD (EXSTACK),SP
|
||||
LD SP,HL
|
||||
POP DE ;ᨬ ¥¬ á® á⥪ ¤à¥á ¢®§¢à â
|
||||
LD HL,#0000
|
||||
ADD HL,SP
|
||||
LD SP,(EXSTACK)
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
IN A,(SLOT3)
|
||||
LD D,A
|
||||
IN A,(SLOT2)
|
||||
LD E,A
|
||||
IN A,(SLOT1)
|
||||
PUSH DE
|
||||
PUSH AF
|
||||
LD (EXSTACK),SP
|
||||
LD SP,HL
|
||||
EXX
|
||||
; <20>… ‘Ž•<C5BD>€<EFBFBD>Ÿ…’‘Ÿ DE ¯¥à¥¤ ¢ë§®¢®¬ BIOS, ¡¨®á ¯®ª ¥£® ¨ ¥ ¯®àâ¨â
|
||||
LD A,(EXE_MEM)
|
||||
|
||||
@ -11,8 +11,8 @@
|
||||
;----------------------------------------------------------------------;
|
||||
; <20>®¨áª § ¯¨á¨ ª â «®£ ¢ ᯨ᪥ ª â «®£
|
||||
;
|
||||
; ¢å®¤: a= âਡãâ § ¯¨á¨
|
||||
; ¢ë室: de'=¨¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£
|
||||
; ¢å®¤: a = âਡãâ § ¯¨á¨
|
||||
; ¢ë室: de = ¨¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£
|
||||
; (HANDBUF) = file's direcory record
|
||||
; CF - ª â «®£ ¥ ©¤¥
|
||||
SEARCH:
|
||||
@ -63,21 +63,23 @@ SEARCH:
|
||||
INC HL
|
||||
INC DE
|
||||
DJNZ .loop_compare
|
||||
;
|
||||
LD D,XH
|
||||
LD E,XL
|
||||
;[x] 9/11/23 ®¯â¨¬¨§ æ¨ï ¤«ï ¨¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£ (¢®§¬®¦® ¯® ¤®¡¨âáï ¢¥àãâì)
|
||||
EXX
|
||||
; LD D,XH
|
||||
; LD E,XL
|
||||
LD D,XH
|
||||
LD E,XL
|
||||
EXX
|
||||
LD D,XH
|
||||
LD E,XL
|
||||
PUSH IX
|
||||
EXX
|
||||
;
|
||||
LD HL,HANDBUF
|
||||
EX DE,HL
|
||||
LD BC,HANDBUF.SIZE
|
||||
LDIR
|
||||
;POP AF
|
||||
;[x] 9/11/23 ®¯â¨¬¨§ æ¨ï ¤«ï ¨¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£ (¢®§¬®¦® ¯® ¤®¡¨âáï 㤠«¨âì)
|
||||
POP DE
|
||||
;
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
EX AF,AF'
|
||||
@ -174,13 +176,13 @@ FINDDIR:
|
||||
PUSH AF
|
||||
LD IX,DIRPAGE.buffer
|
||||
.big_loop:
|
||||
LD A,(IX+00)
|
||||
LD A,(IX + _sFAT_DIRECTORY_RECORD.NAME)
|
||||
OR A
|
||||
JR Z,.error
|
||||
CP #E5
|
||||
JR Z,.next_step
|
||||
LD A,(IX+11) ;!HARDCODE
|
||||
AND #10 ;!HARDCODE
|
||||
LD A,(IX + _sFAT_DIRECTORY_RECORD.ATTRIBUT)
|
||||
AND FAT_ATTR.DIRECTORY
|
||||
JR Z,.next_step
|
||||
LD HL,MASKARE
|
||||
LD D,XH
|
||||
@ -197,10 +199,10 @@ FINDDIR:
|
||||
INC DE
|
||||
DJNZ .loop
|
||||
;
|
||||
LD A,(IX+0)
|
||||
LD A,(IX + _sFAT_DIRECTORY_RECORD.NAME)
|
||||
CP "."
|
||||
JP NZ,.ADDSPEC
|
||||
LD A,(IX+1) ;!HARDCODE
|
||||
LD A,(IX + _sFAT_DIRECTORY_RECORD.NAME + 1)
|
||||
CP "."
|
||||
JP NZ,.IT_DIR
|
||||
LD HL,WorkDirectory
|
||||
@ -287,9 +289,9 @@ FINDDIR:
|
||||
; .MM3: LD (HL),0
|
||||
; ; JP IT_DIR
|
||||
;
|
||||
.IT_DIR:
|
||||
LD E,(IX+_sFM.ST_CLUSTER)
|
||||
LD D,(IX+_sFM.ST_CLUSTER+1)
|
||||
.IT_DIR: ; [ ] fat32
|
||||
LD E,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
|
||||
LD D,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
AND A
|
||||
@ -331,25 +333,20 @@ LOADDIR:
|
||||
PUSH AF
|
||||
;!TEST no ldir
|
||||
; ®ç¨áâ¨âì ª¥è ª â «®£
|
||||
; LD HL,#C000
|
||||
; LD DE,#C001
|
||||
; LD BC,#3FFF
|
||||
; LD (HL),L
|
||||
; LDIR
|
||||
; LD HL,#C000
|
||||
; LD DE,#C001
|
||||
; LD BC,#3FFF
|
||||
; LD (HL),L
|
||||
; LDIR
|
||||
;
|
||||
;
|
||||
LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
LD (IY+_sFM.DRIVE),A ; á®åà. ¢ ¤¥áªà¨¯â®à
|
||||
;
|
||||
;LD D,(IY+_sFM.ST_CLUSTER+1) ; de=®¬¥à ¯¥à¢®£® ª« áâ¥à
|
||||
;LD E,(IY+_sFM.ST_CLUSTER)
|
||||
;LD A,D
|
||||
;OR E
|
||||
; ®¬¥à ¯¥à¢®£® ª« áâ¥à
|
||||
LD A,(IY+_sFM.ST_CLUSTER)
|
||||
OR (IY+_sFM.ST_CLUSTER+1)
|
||||
;
|
||||
; ®¬¥à ¯¥à¢®£® ª« áâ¥à
|
||||
; [ ] fat32
|
||||
LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
||||
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||
JP Z,.LROTDIR ; root ??
|
||||
;
|
||||
LD HL,DIRPAGE.buffer ; ªã¤
|
||||
LD DE,#4000 ; ᪮«ìª®
|
||||
XOR A ; ¤¥áªà¨¯â®à
|
||||
@ -362,17 +359,10 @@ LOADDIR:
|
||||
LD HL,(FatBuffer.DIR_FRH) ; áâ. à §àï¤
|
||||
LD IX,(FatBuffer.DIR_FRL) ; ®¬¥à «®£. ᥪâ®à
|
||||
LD A,(FatBuffer.DIR_S_S)
|
||||
;!TEST
|
||||
LD B,32 ; !HARDCODE 16384/(sector 512). à §¬¥à root-ª â «®£
|
||||
CP B
|
||||
JR NC,.RTD1
|
||||
LD B,A ; ç¨á«® ᥪâ®à®¢
|
||||
;LD B,32 ; !HARDCODE 16384/(sector 512). à §¬¥à root-ª â «®£
|
||||
;SUB B
|
||||
;JR NC,.RTD1
|
||||
;ADD A,B
|
||||
;LD B,A ; ç¨á«® ᥪâ®à®¢
|
||||
;
|
||||
LD B,32 ; !HARDCODE 16384/(sector 512). à §¬¥à root-ª â «®£
|
||||
CP B
|
||||
JR NC,.RTD1
|
||||
LD B,A ; ç¨á«® ᥪâ®à®¢
|
||||
.RTD1: LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
LD DE,DIRPAGE.buffer ; ¡ãä¥à
|
||||
LD C,Dss.DRV.Read ; ç⥨¥ ᥪâ®à®¢
|
||||
@ -453,13 +443,15 @@ SAVEDIR:
|
||||
;
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD (IY+_sFM.DRIVE),A
|
||||
LD D,(IY+_sFM.ST_CLUSTER)
|
||||
LD E,(IY+_sFM.ST_CLUSTER+1)
|
||||
;[ ] fat32
|
||||
LD D,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
||||
LD E,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||
LD A,D
|
||||
OR E
|
||||
JP Z,.SROTDIR
|
||||
LD HL,DIRPAGE.buffer
|
||||
; à §¬¥à ᯨ᪠ª â «®£ size_cash_directory
|
||||
;!FIXIT ¥á«¨ ® 㦠, â® ¯à®¢¥à¨âì ¡ £¨ ( ¯à¨¬¥à, à §¬¥à ¤¨à४â®à¨¨ ¬¥ìè¥ ¯à¨ ®âªàë⨨ ¨ ¡®«ìè¥ ¯®á«¥ ¯à ¢®ª)
|
||||
.DIRSIZE+1:
|
||||
LD DE,0
|
||||
XOR A
|
||||
@ -489,23 +481,21 @@ SAVEDIR:
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
; !FIXIT çñâ ¥ ¨á¯®«ì§ã¥âáï
|
||||
IF COMPILE_UNUSED_CODE
|
||||
TESTDSK: ;????? ¢®§¬®¦®, çâ® âãâ «®£¨ç¥¥, 祬 ¢ ç «¥ OPENDSK, ¥á«¨ ¡ã¤¥â à ¡®â âì Dss.DRV.Open
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD C,Dss.DRV.MediaCheck
|
||||
RST ToDSS.DRV
|
||||
OR A
|
||||
RET Z
|
||||
ENDIF
|
||||
; ¥ ¨á¯®«ì§ã¥âáï
|
||||
; TESTDSK: ;????? ¢®§¬®¦®, çâ® âãâ «®£¨ç¥¥, 祬 ¢ ç «¥ OPENDSK, ¥á«¨ ¡ã¤¥â à ¡®â âì Dss.DRV.Open
|
||||
; LD A,(FatBuffer.DRIVE)
|
||||
; LD C,Dss.DRV.MediaCheck
|
||||
; RST ToDSS.DRV
|
||||
; OR A
|
||||
; RET Z
|
||||
|
||||
; ॣ. D - ®¬¥à ¤¨áª
|
||||
RD_BPB: LD C,SLOT3
|
||||
IN B,(C)
|
||||
PUSH BC
|
||||
|
||||
IN A,(SLOT0)
|
||||
OUT (SLOT3),A
|
||||
LD A,(FatBuffer.DRIVE) ;¢ë§®¢ RD_BPB ¬®¦¥â ¢ ¤ «ì¥©è¥¬ ¯® ¤®¡¨âìáï, ¯ã᪠© ® á ¬ ¤®áâ ñâ ¯¥à¥¬¥ãî DRIVE
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
;R08
|
||||
;LD DE,BOOT+#C000
|
||||
LD DE,CORE_BUFFERS.SECBUF+#C000
|
||||
@ -519,7 +509,7 @@ RD_BPB: LD C,SLOT3
|
||||
//PUSH IY ; ¯®ª ¡¥§ ¨¤¥ªá®£®, ® ¬®¦¥â ¯à¨£®¤¨âìáï
|
||||
|
||||
LD DE,#AA55 ; ᨣ âãà ;R05
|
||||
LD HL,(CORE_BUFFERS.SECBUF+510) ;R08 ;R07
|
||||
LD HL,(CORE_BUFFERS.SECBUF+_sBOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07
|
||||
;R05
|
||||
AND A
|
||||
SBC HL,DE
|
||||
@ -527,38 +517,38 @@ RD_BPB: LD C,SLOT3
|
||||
;R08
|
||||
LD HL,CORE_BUFFERS.SECBUF
|
||||
LD DE,CORE_BUFFERS.BootSector
|
||||
LD BC,_sBOOT_SEC ; size
|
||||
LD BC,_sBOOT_SECTOR_PARAMS ; size
|
||||
LDIR
|
||||
;
|
||||
|
||||
//LD IY,BootSector ; ¯®ª ¡¥§ ¨¤¥ªá®£®, ® ¬®¦¥â ¯à¨£®¤¨âìáï
|
||||
//LD A,(IY+_sBOOT_SEC.ID_FORM)
|
||||
LD A,(CORE_BUFFERS.BootSector.ID_FORM)
|
||||
//LD A,(IY+_sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
||||
LD A,(CORE_BUFFERS.BootSector.DRIVE_TYPE)
|
||||
|
||||
CP #F0
|
||||
JP C,DOS_X_Error.UnknownBPB
|
||||
|
||||
;!TEST
|
||||
;LD HL,0 ; calc. first sector FAT
|
||||
;LD E,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
|
||||
;LD D,(IY+_sBOOT_SEC.RESERVE+1)
|
||||
;LD E,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS) ;Reserve sec
|
||||
;LD D,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS+1)
|
||||
;ADD HL,DE
|
||||
|
||||
//LD L,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
|
||||
//LD H,(IY+_sBOOT_SEC.RESERVE+1)
|
||||
LD HL,(CORE_BUFFERS.BootSector.RESERVE)
|
||||
//LD L,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS) ;Reserve sec
|
||||
//LD H,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS+1)
|
||||
LD HL,(CORE_BUFFERS.BootSector.RESERVED_SECTORS)
|
||||
;
|
||||
|
||||
; LD E,(IY+_sBOOT_SEC.HIDDEN) ;Hidden sec
|
||||
; LD D,(IY+_sBOOT_SEC.HIDDEN+1)
|
||||
; LD E,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN) ;Hidden sec
|
||||
; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1)
|
||||
; ADD HL,DE
|
||||
|
||||
;LD (FatBuffer.FAT_FRM),HL ; first sector FAT
|
||||
LD (FatBuffer.FAT1_XX),HL ; first sector FAT #1
|
||||
LD (FatBuffer.FAT2_XX),HL
|
||||
|
||||
//LD E,(IY+_sBOOT_SEC.S_P_F) ; sectors in FAT
|
||||
//LD D,(IY+_sBOOT_SEC.S_P_F+1)
|
||||
//LD E,(IY+_sBOOT_SECTOR_PARAMS.S_P_F) ; sectors in FAT
|
||||
//LD D,(IY+_sBOOT_SECTOR_PARAMS.S_P_F+1)
|
||||
LD DE,(CORE_BUFFERS.BootSector.S_P_F)
|
||||
|
||||
|
||||
@ -577,8 +567,8 @@ RD_BPB: LD C,SLOT3
|
||||
AND A
|
||||
; CF = 0
|
||||
|
||||
//LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sectors
|
||||
//LD B,(IY+_sBOOT_SEC.B_P_S+1)
|
||||
//LD C,(IY+_sBOOT_SECTOR_PARAMS.B_P_S) ; Size sectors
|
||||
//LD B,(IY+_sBOOT_SECTOR_PARAMS.B_P_S+1)
|
||||
LD BC,(CORE_BUFFERS.BootSector.B_P_S)
|
||||
; RL C
|
||||
; RL B
|
||||
@ -591,19 +581,23 @@ RD_BPB: LD C,SLOT3
|
||||
; LD A,C
|
||||
;;;;
|
||||
LD A,B
|
||||
;
|
||||
RL C
|
||||
RLA
|
||||
;
|
||||
RL C
|
||||
RLA
|
||||
;
|
||||
RL C
|
||||
RLA
|
||||
;
|
||||
LD C,A
|
||||
LD B,0 ; BC - File handels in sectors
|
||||
;;;;
|
||||
LD (FatBuffer.F_P_S),A
|
||||
|
||||
//LD E,(IY+_sBOOT_SEC.F_P_DIR) ; Number file handel
|
||||
//LD D,(IY+_sBOOT_SEC.F_P_DIR+1)
|
||||
//LD E,(IY+_sBOOT_SECTOR_PARAMS.F_P_DIR) ; Number file handel
|
||||
//LD D,(IY+_sBOOT_SECTOR_PARAMS.F_P_DIR+1)
|
||||
LD DE,(CORE_BUFFERS.BootSector.F_P_DIR)
|
||||
|
||||
EX DE,HL
|
||||
@ -628,19 +622,19 @@ RD_BPB: LD C,SLOT3
|
||||
|
||||
;LD H,B ; âãâ ¢ B ®«ì ¤®«¦¥ ¡ëâì
|
||||
;LD L,B
|
||||
;LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sector
|
||||
;LD B,(IY+_sBOOT_SEC.B_P_S+1)
|
||||
;LD C,(IY+_sBOOT_SECTOR_PARAMS.B_P_S) ; Size sector
|
||||
;LD B,(IY+_sBOOT_SECTOR_PARAMS.B_P_S+1)
|
||||
|
||||
//LD L,(IY+_sBOOT_SEC.B_P_S) ; Size sector
|
||||
//LD H,(IY+_sBOOT_SEC.B_P_S+1)
|
||||
//LD L,(IY+_sBOOT_SECTOR_PARAMS.B_P_S) ; Size sector
|
||||
//LD H,(IY+_sBOOT_SECTOR_PARAMS.B_P_S+1)
|
||||
LD HL,(CORE_BUFFERS.BootSector.B_P_S) ; Size sector
|
||||
|
||||
LD A,(CORE_BUFFERS.BootSector.S_P_C) ;!TODO FATcacheSize
|
||||
LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
||||
;!TODO FATcacheSize
|
||||
;NEXTAD3
|
||||
; .loop3: ADD HL,BC ; calc. cluster size
|
||||
; DEC A
|
||||
; JR NZ,.loop3
|
||||
;!TODO ¯à®¢¥à¨âì ¯à ¢¨«ì® «¨ áç¨â ¥â
|
||||
XOR 1 ; calc. cluster size
|
||||
JR Z,.loop3.end
|
||||
RRA
|
||||
@ -649,7 +643,6 @@ RD_BPB: LD C,SLOT3
|
||||
JP NC,.loop3
|
||||
.loop3.end:
|
||||
;
|
||||
|
||||
LD (FatBuffer.CLU_LEN),HL
|
||||
EX DE,HL
|
||||
LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize
|
||||
@ -663,6 +656,12 @@ RD_BPB: LD C,SLOT3
|
||||
;ENDIF
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
;!TODO detect fat type by clusters!
|
||||
;[ ] fat32 reset fat32 variables
|
||||
LD HL,0
|
||||
LD (FatBuffer.ENDCLUS_HIGH),HL
|
||||
LD (FAT_Max_Cluster_H),HL
|
||||
;
|
||||
LD HL,CORE_BUFFERS.BootSector.ID_FAT ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
||||
LD DE,FatBuffer.MSG
|
||||
LD B,3
|
||||
@ -678,10 +677,25 @@ RD_BPB: LD C,SLOT3
|
||||
INC HL
|
||||
CP ' '
|
||||
JR Z,.loop6
|
||||
|
||||
;
|
||||
CP '1'
|
||||
JP NZ,DOS_X_Error.UnknownBPB
|
||||
LD A,(HL)
|
||||
IF _FAT32_ENABLE
|
||||
JP Z,.fat1x
|
||||
;[ ] fat32
|
||||
CP '2'
|
||||
JP NZ,DOS_X_Error.UnknownBPB
|
||||
LD A,#46 ; #46-#26 = 32 fat type
|
||||
LD HL,#0FFF
|
||||
LD (FatBuffer.ENDCLUS_HIGH),HL
|
||||
LD (FAT_Max_Cluster_H),HL
|
||||
LD H,#FF
|
||||
JR .BPB_FAT
|
||||
;
|
||||
ELSE
|
||||
JP NZ,DOS_X_Error.UnknownBPB
|
||||
ENDIF
|
||||
;
|
||||
.fat1x: LD A,(HL)
|
||||
CP '6' ; FAT16
|
||||
LD HL,#FFFF
|
||||
JR Z,.BPB_FAT
|
||||
@ -689,8 +703,9 @@ RD_BPB: LD C,SLOT3
|
||||
JP NZ,DOS_X_Error.UnknownBPB
|
||||
LD HL,#0FFF
|
||||
.BPB_FAT:
|
||||
LD (FatBuffer.FAT_TYP),A
|
||||
LD (FatBuffer.ENDCLUS),HL
|
||||
SUB #26 ; A-#26 = fat type (12, 16, 32)
|
||||
LD (FatBuffer.FAT_TYPE),A
|
||||
LD (FatBuffer.ENDCLUS_LOW),HL
|
||||
|
||||
;!TODO ¥ ¨á¯®«ì§ãîâáï § ç¥¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ï¥¬ë¥ ¢ FatBuffer
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
@ -698,8 +713,8 @@ RD_BPB: LD C,SLOT3
|
||||
|
||||
LD HL,0
|
||||
|
||||
//LD C,(IY+_sBOOT_SEC.S_P_T) ; Sector per track
|
||||
//LD B,(IY+_sBOOT_SEC.S_P_T+1)
|
||||
//LD C,(IY+_sBOOT_SECTOR_PARAMS.S_P_T) ; Sector per track
|
||||
//LD B,(IY+_sBOOT_SECTOR_PARAMS.S_P_T+1)
|
||||
LD BC,(CORE_BUFFERS.BootSector.S_P_T) ; Sector per track
|
||||
|
||||
LD A,(CORE_BUFFERS.BootSector.HEADS) ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
||||
@ -712,28 +727,27 @@ RD_BPB: LD C,SLOT3
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
LD DE,(FatBuffer.DAT_FRL)
|
||||
; LD E,(IY+_sBOOT_SEC.HIDDEN) ;Hidden sec
|
||||
; LD D,(IY+_sBOOT_SEC.HIDDEN+1)
|
||||
; LD E,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN) ;Hidden sec
|
||||
; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1)
|
||||
; AND A
|
||||
; SBC HL,DE
|
||||
; EX DE,HL
|
||||
|
||||
//LD L,(IY+_sBOOT_SEC.S_P_D)
|
||||
//LD H,(IY+_sBOOT_SEC.S_P_D+1)
|
||||
//LD L,(IY+_sBOOT_SECTOR_PARAMS.S_P_D)
|
||||
//LD H,(IY+_sBOOT_SECTOR_PARAMS.S_P_D+1)
|
||||
LD HL,(CORE_BUFFERS.BootSector.S_P_D)
|
||||
|
||||
LD A,H
|
||||
OR L
|
||||
JP NZ,.HDDSMAL
|
||||
;
|
||||
//LD L,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS)
|
||||
//LD H,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+1)
|
||||
LD HL,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS)
|
||||
|
||||
//LD C,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+2)
|
||||
//LD B,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+3)
|
||||
LD BC,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS+2)
|
||||
//LD L,(IY+_sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS)
|
||||
//LD H,(IY+_sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS+1)
|
||||
LD HL,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS_L)
|
||||
|
||||
//LD C,(IY+_sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS+2)
|
||||
//LD B,(IY+_sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS+3)
|
||||
LD BC,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS_H)
|
||||
AND A
|
||||
SBC HL,DE
|
||||
JP NC,.HDDBIG
|
||||
@ -753,45 +767,37 @@ RD_BPB: LD C,SLOT3
|
||||
RR L
|
||||
JP .S4C01
|
||||
.S4C02: INC HL
|
||||
LD (FAT_Max_Cluster),HL
|
||||
LD (FAT_Max_Cluster_L),HL
|
||||
|
||||
//POP IY
|
||||
|
||||
; LD DE,FAT
|
||||
; LD HL,0
|
||||
; LD IX,(FAT_FRM)
|
||||
; LD B,3
|
||||
; LD A,(DRIVE)
|
||||
; LD C,Dss.DRV.Read
|
||||
; RST ToDSS.DRV
|
||||
; JP C,RDERR1
|
||||
LD HL,0
|
||||
LD (FatCache),HL
|
||||
XOR A
|
||||
LD H,A
|
||||
LD L,A
|
||||
LD (FatCache.Block),HL
|
||||
LD (FatCache.Update),A
|
||||
|
||||
SET_PAGE_X FATPAGE
|
||||
|
||||
PUSH AF
|
||||
XOR A
|
||||
CALL READ_FAT
|
||||
CALL READ_FAT_TABLE
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
CALL R_CLUST
|
||||
XOR A
|
||||
RET
|
||||
|
||||
;!TODO detect fat type by clusters!
|
||||
.IBM_DOS:
|
||||
LD A,(CORE_BUFFERS.BootSector.ID_FORM)
|
||||
LD A,(CORE_BUFFERS.BootSector.DRIVE_TYPE)
|
||||
CP #F0
|
||||
JR C,DOS_X_Error.UnknownBPB
|
||||
;????? ¤® «¨ ¨§¬¥¨âì?
|
||||
// OR 2
|
||||
// CP #FA ; ID ram-¤¨áª
|
||||
CP #F8 ; ¥á«¨ ¥ F8?
|
||||
;?????
|
||||
; ID ram-¤¨áª - #FA
|
||||
CP #F8 ; !FIXIT ¥ ®¡ï§ â¥«ì® ¥á«¨ ¢¨â, â® ¥ FAT12
|
||||
LD A,'6'
|
||||
LD HL,#FFFF
|
||||
JP Z,.BPB_FAT
|
||||
|
||||
;
|
||||
LD A,'2'
|
||||
LD HL,#0FFF
|
||||
JP .BPB_FAT
|
||||
@ -813,7 +819,8 @@ FatBuffer:
|
||||
.MSG: DB 'FAT'
|
||||
.READ_PG: DB #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
||||
.BLOCK: DB #00
|
||||
.DIR_CLU: DW #0000
|
||||
.DIR_CLU_L: DW #0000
|
||||
.DIR_CLU_H: DW #0000 ; fat32
|
||||
.DRIVE: DB #FF
|
||||
.FAT_FRM:
|
||||
.FAT1_XX: DW #0000 ; MSD_FAT_SEC first sector FAT
|
||||
@ -823,15 +830,19 @@ FatBuffer:
|
||||
.F_P_S: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
||||
.DIR_S_S: DB #00 ; DIR_SEC_SIZE
|
||||
.DAT_FRL: DW #0000 ; MSD_DAT_SEC low
|
||||
;.DAT_FRH: DW #0000 ; MSD_DAT_SEC high ; !TODO ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£ ;!FIXIT ¥ ¨á¯®«ì§ã¥âáï
|
||||
.DAT_FRH: DW #0000 ; MSD_DAT_SEC high ; !TODO ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£ ;!FIXIT ¥ ¨á¯®«ì§ã¥âáï
|
||||
.CLU_LEN:
|
||||
.B_P_C: DW #0000 ; CLUSTER_LEN
|
||||
.C_P_B: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
||||
.FAT_TYP: DB #00 ; TYPE FAT (#32 - 12bit, #36 - 16bit)
|
||||
.FAT_TYPE: DB #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ;!TODO fat32
|
||||
.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
||||
.ENDCLUS: DW #FFFF
|
||||
.ENDCLUS_LOW: DW #FFFF
|
||||
.ENDCLUS_HIGH: DW #FFFF ; !TODO for fat32
|
||||
;
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
;
|
||||
INCLUDE "FAT12_16.ASM"
|
||||
IF _FAT32_ENABLE
|
||||
INCLUDE "FAT32.ASM"
|
||||
ENDIF
|
||||
;
|
||||
@ -14,15 +14,26 @@
|
||||
;---------------------------------------------------------------
|
||||
|
||||
; “áâ ®¢¨âì ç «ìë© ª« áâ¥à ¤«ï ç⥨ï
|
||||
R_CLUST LD HL,#0001
|
||||
; [ ] fat32
|
||||
R_CLUST:
|
||||
LD HL,#0001
|
||||
LD (G_CLUST.num),HL
|
||||
RET
|
||||
.FAT32: WORD 0
|
||||
|
||||
; ©â¨ ¯¥à¢ë© ᢮¡®¤ë© ª« áâ¥à
|
||||
; [ ] fat32
|
||||
G_CLUST:
|
||||
.num+1: LD HL,#0001
|
||||
.loop: INC HL ; ®¬¥à ª« áâ¥à
|
||||
CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
; [x] fat32
|
||||
IF _FAT32_ENABLE
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
XOR 32
|
||||
CALL Z,SET_FAT32.CHECK_INC_HIGH_CLUSTER
|
||||
ENDIF
|
||||
;
|
||||
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
CP DSS_Error.sys.DISK_FULL
|
||||
SCF
|
||||
RET Z ; ®è¨¡ª ?
|
||||
@ -30,10 +41,11 @@ G_CLUST:
|
||||
OR E
|
||||
JR NZ,.loop
|
||||
LD (G_CLUST.num),HL
|
||||
XOR A
|
||||
; XOR A
|
||||
RET
|
||||
|
||||
; HL - CLUSTER
|
||||
; [ ] fat32
|
||||
INC_FAT:
|
||||
PUSH HL
|
||||
CALL G_CLUST
|
||||
@ -41,22 +53,21 @@ INC_FAT:
|
||||
RET C
|
||||
;
|
||||
PUSH HL
|
||||
PUSH HL
|
||||
EX DE,HL ; hl=®¬¥à ª« áâ¥à
|
||||
.loop: CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
; PUSH HL
|
||||
; EX DE,HL ; hl=®¬¥à ª« áâ¥à
|
||||
; .loop: CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
; EX DE,HL
|
||||
; JR NC,.loop ; ¥ ª®¥æ 楯®çª¨
|
||||
EX DE,HL
|
||||
JR NC,.loop ; ¥ ª®¥æ 楯®çª¨
|
||||
EX DE,HL
|
||||
POP DE ; ®¬¥à ª« áâ¥à
|
||||
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
; POP DE ; ®¬¥à ª« áâ¥à
|
||||
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
;!FIXIT <¥â ª®âà®«ï ®è¨¡ª¨>
|
||||
;
|
||||
;
|
||||
POP HL
|
||||
LD DE,(FatBuffer.ENDCLUS) ; ®¬¥à ª« áâ¥à
|
||||
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç®© § ¯¨áìî WR_FAT?
|
||||
;CALL WR_FAT ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
LD DE,(FatBuffer.ENDCLUS_LOW) ; ®¬¥à ª« áâ¥à
|
||||
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç®© § ¯¨áìî WRITE_FAT_TABLE?
|
||||
;CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
;
|
||||
AND A
|
||||
RET
|
||||
@ -65,66 +76,74 @@ INC_FAT:
|
||||
;-----------------------------------------------------------
|
||||
; <20>à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
; ¢å®¤: hl = ®¬¥à ª« áâ¥à
|
||||
; de = ‘’€<E28099>˜…… á«®¢® ®¬¥à ª« áâ¥à (⮫쪮 ¤«ï FAT32)
|
||||
; ¢ë室: hl = ®¬¥à ª« áâ¥à
|
||||
; de = ®¬¥à á«¥¤. ª« áâ¥à
|
||||
; de = ®¬¥à á«¥¤. ª« áâ¥à (¥á«¨ 0, â® ª« áâ¥à hl ᢮¡®¤¥)
|
||||
; CF - ª®¥æ 楯®çª¨
|
||||
;!FIXIT ¤ «¥¥ § â®çª â®, çâ® ¢ DE ¢á¥£¤ 0 - à §¤¥« ¥ ¡®«ìè¥ 2Gb
|
||||
;-----------------------------------------------------------
|
||||
R_F_FAT:
|
||||
EX DE,HL
|
||||
LD HL,(FAT_Max_Cluster)
|
||||
AND A
|
||||
;[ ] fat32
|
||||
READ_FROM_FAT:
|
||||
;[x] fat32
|
||||
PUSH DE
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
XOR 32
|
||||
JR NZ,.low ; Z=0 ¯à®¢¥à塞 ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||
LD HL,(FAT_Max_Cluster_H) ; ¯à®¢¥à塞 áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
||||
JP .high
|
||||
;
|
||||
.low: EX DE,HL
|
||||
LD HL,(FAT_Max_Cluster_L)
|
||||
.high: ; CF = 0
|
||||
SBC HL,DE
|
||||
EX DE,HL
|
||||
LD A,DSS_Error.sys.DISK_FULL
|
||||
;[x] fat32
|
||||
POP DE
|
||||
;
|
||||
RET C
|
||||
|
||||
SET_PAGE_X FATPAGE
|
||||
|
||||
PUSH HL
|
||||
PUSH AF
|
||||
LD A,(FatBuffer.FAT_TYP)
|
||||
CP "2" ; fat12
|
||||
JR Z,R_F_F12
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
CP 16 ; fat16
|
||||
JR C,.FAT12
|
||||
JR NZ,.FAT32
|
||||
; fat16, ¯à®áâ® ç¨â âì á«¥¤. ®¬¥à
|
||||
R_F_F16:
|
||||
CALL GET_FAT16_CELL
|
||||
.FAT16: CALL GET_FAT16_CELL
|
||||
LD E,(HL) ; ¯à®ç¨â âì ®¬¥à ª« áâ¥à
|
||||
INC HL
|
||||
LD D,(HL)
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
;!TODO #FFF7 - ª« áâ¥à á ª®áïªç묨 ᥪâ®à ¬¨
|
||||
;!TODO #FFF7 - ª« áâ¥à á ª®áïç묨 ᥪâ®à ¬¨
|
||||
LD HL,#FFEF ;!HARDCODE
|
||||
XOR A ; DssErr.sys.NO_ERROR
|
||||
SBC HL,DE ; ¯à®¢¥àª á«ã¦. ª« áâ¥àë
|
||||
POP HL
|
||||
RET
|
||||
;
|
||||
R_F_F12:
|
||||
CALL GET_FAT12_CELL
|
||||
.FAT12: CALL GET_FAT12_CELL
|
||||
LD E,(HL)
|
||||
INC HL
|
||||
LD D,(HL)
|
||||
JR C,R_F_F01
|
||||
JR C,.Correct_1
|
||||
LD A,D
|
||||
AND #0F
|
||||
LD D,A
|
||||
JP R_F_F02
|
||||
JR .Correct_2
|
||||
;
|
||||
R_F_F01:
|
||||
.Correct_1:
|
||||
LD A,E
|
||||
AND #F0
|
||||
RR D ; ¢¯à ¢® 4 ¡¨âa
|
||||
RRA
|
||||
RR D
|
||||
RRA
|
||||
RR D
|
||||
RRA
|
||||
RR D
|
||||
RRA
|
||||
DUP 4 ; ¢¯à ¢® 4 ¡¨âa
|
||||
RR D
|
||||
RRA
|
||||
EDUP
|
||||
LD E,A
|
||||
R_F_F02:
|
||||
.Correct_2:
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
LD HL,#0FEF
|
||||
@ -132,20 +151,21 @@ R_F_F02:
|
||||
SBC HL,DE ; ¯à®¢¥àª á«ã¦. ª« áâ¥àë
|
||||
POP HL
|
||||
RET
|
||||
|
||||
.FAT32: ; [ ] fat32
|
||||
CALL GET_FAT32_CELL
|
||||
DI
|
||||
HALT
|
||||
;-----------------------------------------------------------
|
||||
; ‡ ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
; ¢å®¤: de = ®¬¥à ª« áâ¥à
|
||||
; hl = ? ®¬¥à ¯¥à¢®£® ª« áâ¥à
|
||||
; ¢ë室: hl = ? ®¬¥à á«¥¤. ª« áâ¥à
|
||||
; de = ®¬¥à ª« áâ¥à
|
||||
; in: HL - CLUSTER
|
||||
; out: DE - (CLUSTER)
|
||||
; ¢å®¤: hl = ®¬¥à ª« áâ¥à ¢ ª®â®àë© § ¯¨á âì
|
||||
; de = ®¬¥à ª« áâ¥à ª®â®àë© ¢¯¨á âì
|
||||
; ¢ë室: â ª®© ¦¥ ª ª ¨ ¢å®¤
|
||||
;-----------------------------------------------------------
|
||||
W_T_FAT:
|
||||
; [ ] fat32
|
||||
WRITE_TO_FAT:
|
||||
PUSH DE
|
||||
EX DE,HL
|
||||
LD HL,(FAT_Max_Cluster)
|
||||
LD HL,(FAT_Max_Cluster_L)
|
||||
AND A
|
||||
SBC HL,DE
|
||||
EX DE,HL
|
||||
@ -161,30 +181,12 @@ W_T_FAT:
|
||||
;LD A,1
|
||||
;LD (FatCache.Update),A
|
||||
;
|
||||
LD A,(FatBuffer.FAT_TYP)
|
||||
CP "2" ; fat12
|
||||
JR Z,W_T_F12
|
||||
W_T_F16:
|
||||
PUSH DE
|
||||
; LD A,H
|
||||
; LD B,H
|
||||
; ;AND #0F
|
||||
; AND FAT_CACHE.Size_Mask_16
|
||||
; LD H,A
|
||||
; LD A,B
|
||||
; ; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
|
||||
; DUP FAT_CACHE.Degree_16
|
||||
; RRCA
|
||||
; EDUP
|
||||
; ;AND #0F
|
||||
; AND FAT_CACHE.Part_Mask_16
|
||||
; ;
|
||||
; ADD HL,HL ; HL - FAT OFFSET (FROM CASH) ;!HARDCODE fat16 - à §¬¥à § ¯¨á¨ FAT
|
||||
; LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
||||
; CP C
|
||||
; CALL NZ,READ_FAT ; A != C - READ NEW BLOCK FAT
|
||||
; LD DE,FATPAGE.cache
|
||||
; ADD HL,DE ; ï祩ªã FAT
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
CP 16 ; fat16
|
||||
JR C,.FAT12
|
||||
JR NZ,.FAT32
|
||||
;
|
||||
.FAT16: PUSH DE
|
||||
CALL GET_FAT16_CELL
|
||||
POP DE
|
||||
LD (HL),E ; á®åà. ¢ ª¥è¥ FAT-
|
||||
@ -194,18 +196,17 @@ W_T_F16:
|
||||
POP HL
|
||||
OUT (SLOT3),A
|
||||
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
||||
LD A,1
|
||||
XOR A
|
||||
INC A
|
||||
LD (FatCache.Update),A
|
||||
;
|
||||
XOR A
|
||||
; CF = 0
|
||||
RET
|
||||
;
|
||||
; fat12
|
||||
W_T_F12: ;!FIXIT ¯¥à¥¤¥« âì ¯¥à¥¬¥ë¥ FAT_CACHE
|
||||
.FAT12: ;!FIXIT ¯¥à¥¤¥« âì ¯¥à¥¬¥ë¥ FAT_CACHE
|
||||
PUSH DE
|
||||
CALL GET_FAT12_CELL
|
||||
POP DE
|
||||
JR C,W_T_F01 ; ®¬¥à ¥çñâë©
|
||||
JR C,.Correct_1 ; ®¬¥à ¥çñâë©
|
||||
LD (HL),E
|
||||
INC HL
|
||||
LD A,(HL)
|
||||
@ -216,30 +217,19 @@ W_T_F12: ;!FIXIT
|
||||
POP HL
|
||||
OUT (SLOT3),A
|
||||
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
||||
LD A,1
|
||||
XOR A
|
||||
INC A
|
||||
LD (FatCache.Update),A
|
||||
;
|
||||
AND A
|
||||
; CF = 0
|
||||
RET
|
||||
;
|
||||
W_T_F01:; ¢«¥¢® 4 ¡¨âa
|
||||
;SLA E
|
||||
;LD A,E
|
||||
;RL D
|
||||
;RLA
|
||||
;RL D
|
||||
;RLA
|
||||
;RL D
|
||||
;RLA
|
||||
;RL D
|
||||
;LD E,A
|
||||
;
|
||||
ex de,hl
|
||||
add hl,hl
|
||||
add hl,hl
|
||||
add hl,hl
|
||||
add hl,hl
|
||||
ex de,hl
|
||||
.Correct_1:
|
||||
; ¢«¥¢® 4 ¡¨âa
|
||||
EX DE,HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
EX DE,HL
|
||||
;
|
||||
LD A,(HL)
|
||||
AND #0F
|
||||
@ -251,26 +241,34 @@ W_T_F01:;
|
||||
POP HL
|
||||
OUT (SLOT3),A
|
||||
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
||||
LD A,1
|
||||
XOR A
|
||||
INC A
|
||||
LD (FatCache.Update),A
|
||||
;
|
||||
AND A
|
||||
RET
|
||||
|
||||
; LD A,1
|
||||
; LD (FatCache.Update),A
|
||||
; AND A
|
||||
; CF = 0
|
||||
RET
|
||||
.FAT32: ; [ ] fat32
|
||||
DI
|
||||
HALT
|
||||
;RX01
|
||||
;RE_FAT:
|
||||
; <20>à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-
|
||||
; A - NEW FAT BLOCK
|
||||
READ_FAT:
|
||||
READ_FAT_TABLE:
|
||||
PUSH HL
|
||||
PUSH AF
|
||||
LD A,(FatCache.Update)
|
||||
OR A
|
||||
CALL NZ,WR_FAT.Start
|
||||
CALL NZ,WRITE_FAT_TABLE.Start
|
||||
POP AF
|
||||
LD L,A
|
||||
LD H,0
|
||||
LD (FatCache),HL
|
||||
XOR A
|
||||
LD H,A ;!FIXIT fat32 - ã ä â32 ¡«®ª®¢ ¬®¦¥â ¡ëâì ¢ «®¬
|
||||
LD (FatCache.Block),HL
|
||||
LD (FatCache.Update),A
|
||||
;FAT BLOCK ^ FAT_CACHE.Degree = SECTOR OF FAT
|
||||
DUP FAT_CACHE.Degree_16
|
||||
ADD HL,HL ;x2
|
||||
@ -284,7 +282,7 @@ READ_FAT:
|
||||
;LD IX,0
|
||||
;ADD IX,DE ; ®¬¥à «®£. ᥪâ®à
|
||||
;
|
||||
LD HL,0 ; áâ. à §àï¤ ; HL:IX - SECTOR FAT FOR READING ;!TODO FAT32
|
||||
LD HL,0 ; áâ. à §àï¤ ; HL:IX - SECTOR FAT FOR READING
|
||||
LD DE,FATPAGE.cache ; ªã¤ ; DE - FAT ADDRESS
|
||||
LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
LD BC,FAT_CACHE.Sectors*256 + Dss.DRV.Read ;ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
|
||||
@ -293,15 +291,17 @@ READ_FAT:
|
||||
RET
|
||||
|
||||
; <20>®¤ª«îç¨âì ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
WR_FAT: SET_PAGE_X FATPAGE
|
||||
WRITE_FAT_TABLE:
|
||||
SET_PAGE_X FATPAGE
|
||||
PUSH AF
|
||||
CALL .Start ;!TODO ¥â ª®âà®«ï ®è¨¡®ª
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
; ‡ ¯¨áì ª¥è (¢á¥£®?) FAT- ¤¨áª
|
||||
.Start: LD HL,(FatCache)
|
||||
LD H,0
|
||||
; ‡ ¯¨áì ª¥è FAT- ¤¨áª
|
||||
.Start: LD HL,(FatCache.Block)
|
||||
;
|
||||
;LD H,0
|
||||
;FAT BLOCK * 16 = SECTOR OF FAT
|
||||
DUP FAT_CACHE.Degree_16
|
||||
ADD HL,HL ;x2
|
||||
@ -348,14 +348,17 @@ WR_FAT: SET_PAGE_X FATPAGE
|
||||
LD DE,(FatBuffer.FAT2_XX)
|
||||
ADD HL,DE
|
||||
EX DE,HL
|
||||
LD XH,D
|
||||
LD XL,E
|
||||
;
|
||||
LD XH,D
|
||||
LD XL,E
|
||||
;LD IX,0
|
||||
;ADD IX,DE ; ®¬¥à «®£. ᥪâ®à
|
||||
LD HL,0
|
||||
; CF = ADD HL,DE
|
||||
; [ ] fat32 - ¢â®à ï â ¡«¨æ ä â ¬®¦¥â ¦¥ ã¥å âì ¤ «ìè¥ 16-¡¨â «®£¨ç¥áª®£® ᥪâ®à ?
|
||||
IF _FAT32_ENABLE
|
||||
RL L
|
||||
ENDIF
|
||||
;
|
||||
LD DE,FATPAGE.cache
|
||||
LD HL,0
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD C,Dss.DRV.Write
|
||||
RST ToDSS.DRV
|
||||
@ -386,9 +389,9 @@ GET_FAT16_CELL:
|
||||
AND FAT_CACHE.Part_Mask_16
|
||||
;
|
||||
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
||||
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
||||
LD BC,(FatCache.Block) ; BC - BLOCK FAT IN CASH
|
||||
CP C
|
||||
CALL NZ,READ_FAT ; A != C - READ NEW BLOCK FAT
|
||||
CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
|
||||
LD DE,FATPAGE.cache ; ç «® ª¥è FAT-
|
||||
ADD HL,DE ; ï祩ªã FAT
|
||||
RET
|
||||
@ -399,24 +402,21 @@ GET_FAT16_CELL:
|
||||
GET_FAT12_CELL:
|
||||
LD D,H
|
||||
LD E,L
|
||||
RR H
|
||||
SRL H
|
||||
RR L ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF
|
||||
PUSH AF ; á®åà. ä« £
|
||||
ADD HL,DE ; CLUSTER * 1.5
|
||||
;
|
||||
;IF COMPILE_UNUSED_CODE
|
||||
IF FAT_CACHE.Size < #2000
|
||||
;!FIXIT ®¯â¨¬¨§¨à®¢ âì
|
||||
LD A,H
|
||||
LD B,H
|
||||
|
||||
;
|
||||
AND #1F
|
||||
;AND FAT_CACHE.Size_Mask_16
|
||||
;
|
||||
|
||||
LD H,A
|
||||
LD A,B
|
||||
|
||||
;
|
||||
RLCA
|
||||
RLCA
|
||||
@ -427,11 +427,10 @@ GET_FAT12_CELL:
|
||||
AND #07
|
||||
;AND FAT_CACHE.Part_Mask_16
|
||||
;
|
||||
|
||||
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
||||
LD BC,(FatCache.Block) ; C - BLOCK FAT IN CASH
|
||||
CP C
|
||||
CALL NZ,READ_FAT ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-
|
||||
;ENDIF
|
||||
CALL NZ,READ_FAT_TABLE ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-
|
||||
ENDIF
|
||||
;
|
||||
LD DE,FATPAGE.cache
|
||||
ADD HL,DE
|
||||
@ -441,8 +440,8 @@ GET_FAT12_CELL:
|
||||
|
||||
; in: HL - CLUSTER
|
||||
; out: HL:IX - SECTOR
|
||||
NSECTOR:
|
||||
LD DE,0 ;!FIXIT for FAT32
|
||||
NSECTOR:;[x] fat32
|
||||
LD DE,(FAT_Max_Cluster_H)
|
||||
DEC HL
|
||||
DEC HL
|
||||
LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
||||
@ -470,53 +469,58 @@ NSECTOR:
|
||||
RET
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
;[ ] fat32
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
MACRO _GetSavedCluster exit_to
|
||||
LD E,(IY+_sFM.KnownCluster_L)
|
||||
LD D,(IY+_sFM.KnownCluster_H)
|
||||
LD D,(IY+_sFM.KnownCluster_L+1)
|
||||
LD A,D
|
||||
INC B
|
||||
OR E
|
||||
JR Z,exit_to
|
||||
DEC B
|
||||
;
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
LD E,(IY+_sFM.KnownOffset_L)
|
||||
LD D,(IY+_sFM.KnownOffset_H)
|
||||
LD D,(IY+_sFM.KnownOffset_L+1)
|
||||
LD A,D
|
||||
OR E
|
||||
JR Z,.noOptimization_1
|
||||
;
|
||||
POP HL
|
||||
AND A
|
||||
SBC HL,DE
|
||||
JR C,.noOptimization_2
|
||||
;
|
||||
LD C,L
|
||||
LD B,H
|
||||
POP HL
|
||||
POP DE
|
||||
POP HL
|
||||
;
|
||||
EX DE,HL
|
||||
INC B
|
||||
JP exit_to
|
||||
.noOptimization_1:
|
||||
POP BC
|
||||
.noOptimization_2:
|
||||
POP HL
|
||||
POP DE
|
||||
INC B
|
||||
JP exit_to
|
||||
ENDM
|
||||
;
|
||||
;[ ] fat32
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
MACRO _SaveGetedCluster
|
||||
LD (IY+_sFM.KnownCluster_L),L
|
||||
LD (IY+_sFM.KnownCluster_H),H
|
||||
LD (IY+_sFM.KnownCluster_L+1),H
|
||||
POP BC
|
||||
LD (IY+_sFM.KnownOffset_L),C
|
||||
LD (IY+_sFM.KnownOffset_H),B
|
||||
LD (IY+_sFM.KnownOffset_L+1),B
|
||||
ENDM
|
||||
;;
|
||||
|
||||
BLOK_RD.ECL2:
|
||||
BLOCK_READ.ECL2:
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
POP BC
|
||||
;
|
||||
@ -528,38 +532,42 @@ BLOK_RD.ECL2:
|
||||
;READ SECTORS OF FILE
|
||||
;HL:DE - FP (in sectors)
|
||||
; B - Amount sectors
|
||||
BLOK_RD: PUSH BC
|
||||
BLOCK_READ:
|
||||
PUSH BC
|
||||
LD (READ.PointerOnBuffer),IX
|
||||
LD A,(CORE_BUFFERS.BootSector.S_P_C) ;SECTORS PER CLUSTER
|
||||
LD C,A
|
||||
LD B,0 ;!FIXIT
|
||||
LD B,0
|
||||
;HL:DE / BC => DE:IX HL-OSTATOK
|
||||
CALL DIV_for_SPC
|
||||
;!FIXIT ¤ «¥¥ § â®çª â®, çâ® ¢ DE ¢á¥£¤ 0 - à §¤¥« ¥ ¡®«ìè¥ 2Gb
|
||||
; [ ] fat32. ¤ «¥¥ § â®çª â®, çâ® ¢ DE ¢á¥£¤ 0 - ä ©« ¥ ¡®«ìè¥ 2Gb
|
||||
LD B,XH
|
||||
LD C,XL
|
||||
PUSH HL ;RESIDUE
|
||||
LD L,(IY+_sFM.ST_CLUSTER) ;START CLUSTER
|
||||
LD H,(IY+_sFM.ST_CLUSTER+1)
|
||||
PUSH HL ;RESIDUE
|
||||
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ;START CLUSTER
|
||||
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||
LD A,H
|
||||
OR L
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
;JR NZ,BLOKRD2
|
||||
PUSH BC
|
||||
JR Z,.ECL2
|
||||
;JP ECL2 ;RY01 JR BLOKRD0
|
||||
;JP ECL2 ;RY01 JR BLOKRD0
|
||||
_GetSavedCluster .enter_loop1
|
||||
;
|
||||
.loop1: PUSH BC
|
||||
CALL R_F_FAT
|
||||
CALL READ_FROM_FAT
|
||||
POP BC
|
||||
JR C,.ECL2 ;RY01
|
||||
JR C,.ECL2 ;RY01
|
||||
EX DE,HL
|
||||
DEC BC
|
||||
; DEC BC
|
||||
.enter_loop1:
|
||||
LD A,B ; ‚‘ - ᬥ饨¥ ¢ãâà¨ ä ©« ¢ ª« áâ¥à å
|
||||
OR C
|
||||
JR NZ,.loop1
|
||||
; LD A,B ; ‚‘ - ᬥ饨¥ ¢ãâà¨ ä ©« ¢ ª« áâ¥à å
|
||||
; OR C
|
||||
; JR NZ,.loop1
|
||||
INC B
|
||||
DEC BC
|
||||
DJNZ .loop1
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
_SaveGetedCluster
|
||||
;
|
||||
@ -619,7 +627,7 @@ BLOK_RD: PUSH BC
|
||||
.BLOKRD7:
|
||||
EX DE,HL
|
||||
PUSH BC
|
||||
CALL R_F_FAT
|
||||
CALL READ_FROM_FAT
|
||||
POP BC
|
||||
JR C,.ECL1 ;RY01
|
||||
EX DE,HL
|
||||
@ -674,12 +682,12 @@ BLOK_WR:
|
||||
LD B,0
|
||||
;HL:DE / BC => DE:IX HL-OSTATOK
|
||||
CALL DIV_for_SPC
|
||||
; [ ] fat32. ¤ «¥¥ § â®çª â®, çâ® ¢ DE ¢á¥£¤ 0 - ä ©« ¥ ¡®«ìè¥ 2Gb
|
||||
LD B,XH
|
||||
LD C,XL
|
||||
|
||||
PUSH HL ;RESIDUE
|
||||
LD L,(IY+_sFM.ST_CLUSTER) ;START CLUSTER
|
||||
LD H,(IY+_sFM.ST_CLUSTER+1)
|
||||
PUSH HL ;RESIDUE
|
||||
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ;START CLUSTER
|
||||
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||
LD A,H
|
||||
OR L
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
@ -690,35 +698,40 @@ BLOK_WR:
|
||||
PUSH BC
|
||||
CALL G_CLUST
|
||||
JP C,.Error
|
||||
LD (IY+_sFM.ST_CLUSTER),L
|
||||
LD (IY+_sFM.ST_CLUSTER+1),H
|
||||
LD DE,(FatBuffer.ENDCLUS)
|
||||
CALL W_T_FAT
|
||||
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),L
|
||||
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),H
|
||||
LD DE,(FatBuffer.ENDCLUS_LOW)
|
||||
CALL WRITE_TO_FAT
|
||||
PUSH HL
|
||||
;!TEST ;!TODO 2/12/23 [ ] ¡ £ á ¨§¡ëâ®ç®© § ¯¨áìî WR_FAT?
|
||||
;CALL WR_FAT ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
;!TEST ;!TODO 2/12/23 [ ] ¡ £ á ¨§¡ëâ®ç®© § ¯¨áìî WRITE_FAT_TABLE?
|
||||
;CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
;
|
||||
POP HL
|
||||
POP BC
|
||||
INC B
|
||||
JP .WR2
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
.GetSavedCluster:
|
||||
_GetSavedCluster .WR2
|
||||
;
|
||||
.loop: PUSH BC
|
||||
CALL R_F_FAT
|
||||
CALL READ_FROM_FAT
|
||||
JR NC,.WRB
|
||||
PUSH HL
|
||||
CALL INC_FAT
|
||||
POP HL
|
||||
JP C,.Error
|
||||
CALL R_F_FAT
|
||||
CALL READ_FROM_FAT
|
||||
.WRB: POP BC
|
||||
EX DE,HL
|
||||
; DEC BC
|
||||
.WR2:
|
||||
; LD A,B
|
||||
; OR C
|
||||
; JR NZ,.loop
|
||||
INC B
|
||||
DEC BC
|
||||
.WR2: LD A,B
|
||||
OR C
|
||||
JR NZ,.loop
|
||||
DJNZ .loop
|
||||
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
_SaveGetedCluster
|
||||
@ -778,13 +791,13 @@ BLOK_WR:
|
||||
RET Z
|
||||
.WR7: EX DE,HL
|
||||
PUSH BC
|
||||
CALL R_F_FAT
|
||||
CALL READ_FROM_FAT
|
||||
JR NC,.WR9
|
||||
PUSH HL
|
||||
CALL INC_FAT
|
||||
POP HL
|
||||
JR C,.ErrorFull
|
||||
CALL R_F_FAT
|
||||
CALL READ_FROM_FAT
|
||||
.WR9: POP BC
|
||||
EX DE,HL
|
||||
PUSH HL
|
||||
@ -825,10 +838,11 @@ BLOK_WR:
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
FatCache: WORD #0000
|
||||
.Block EQU FatCache
|
||||
.Update EQU FatCache+1
|
||||
FAT_Max_Cluster: WORD #0FF0 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||
FatCache: ;WORD #0000
|
||||
.Block WORD #0000 ;EQU FatCache
|
||||
.Update BYTE 0 ;EQU FatCache+1
|
||||
FAT_Max_Cluster_L: WORD #0FF0 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||
FAT_Max_Cluster_H: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||
|
||||
;//MODULE: FAT_X
|
||||
;[END]
|
||||
@ -838,7 +852,7 @@ FAT_Max_Cluster: WORD #0FF0 ;
|
||||
;; HL - CLUSTER
|
||||
;; DE - (CLUSTER)
|
||||
;
|
||||
;R_F_FAT EX DE,HL
|
||||
;READ_FROM_FAT EX DE,HL
|
||||
; LD HL,(FAT_Max_Cluster)
|
||||
; AND A
|
||||
; SBC HL,DE
|
||||
@ -859,7 +873,7 @@ FAT_Max_Cluster: WORD #0FF0 ;
|
||||
; DEC A
|
||||
; LD BC,(FatCache) ; A - ELEMENT OF CASH
|
||||
; CP C
|
||||
; CALL NZ,READ_FAT
|
||||
; CALL NZ,READ_FAT_TABLE
|
||||
; LD DE,FAT
|
||||
; ADD HL,DE
|
||||
; LD E,(HL)
|
||||
@ -895,7 +909,7 @@ FAT_Max_Cluster: WORD #0FF0 ;
|
||||
;
|
||||
;
|
||||
|
||||
;WR_FAT LD HL,(FatCache)
|
||||
;WRITE_FAT_TABLE LD HL,(FatCache)
|
||||
; LD H,0
|
||||
; LD (FatCache),HL
|
||||
; LD E,L
|
||||
|
||||
138
DSS/FS/FAT/FAT32.asm
Normal file
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 (YHOT_SP),BC
|
||||
EXX
|
||||
LD A,(M_XSIZE)
|
||||
LD C,A
|
||||
LD B,0
|
||||
LD A,(M_YSIZE)
|
||||
LD HL,0
|
||||
MSCURS1 ADD HL,BC
|
||||
DEC A
|
||||
JR NZ,MSCURS1
|
||||
PUSH HL
|
||||
LD BC,M_IMAGE.Size+1
|
||||
AND A
|
||||
SBC HL,BC
|
||||
CCF
|
||||
LD A,(M_XSIZE)
|
||||
LD C,A
|
||||
LD B,0
|
||||
LD A,(M_YSIZE)
|
||||
LD HL,0
|
||||
MSCURS1 ADD HL,BC
|
||||
DEC A
|
||||
JR NZ,MSCURS1
|
||||
PUSH HL
|
||||
LD BC,M_IMAGE.Size+1
|
||||
AND A
|
||||
SBC HL,BC
|
||||
CCF
|
||||
EXX
|
||||
POP BC
|
||||
POP HL
|
||||
@ -303,19 +303,19 @@ NOLOADM POP HL
|
||||
|
||||
MS_BCUR PUSH IX
|
||||
EXX
|
||||
LD A,(M_XSIZE)
|
||||
LD C,A
|
||||
LD B,0
|
||||
LD A,(M_YSIZE)
|
||||
LD HL,0
|
||||
MSBCUR1 ADD HL,BC
|
||||
DEC A
|
||||
JR NZ,MSBCUR1
|
||||
PUSH HL
|
||||
LD BC,M_IMAGE.Size+1
|
||||
AND A
|
||||
SBC HL,BC
|
||||
CCF
|
||||
LD A,(M_XSIZE)
|
||||
LD C,A
|
||||
LD B,0
|
||||
LD A,(M_YSIZE)
|
||||
LD HL,0
|
||||
MSBCUR1 ADD HL,BC
|
||||
DEC A
|
||||
JR NZ,MSBCUR1
|
||||
PUSH HL
|
||||
LD BC,M_IMAGE.Size+1
|
||||
AND A
|
||||
SBC HL,BC
|
||||
CCF
|
||||
EXX
|
||||
POP BC
|
||||
POP HL
|
||||
|
||||
@ -247,14 +247,14 @@ Cursor_Off:
|
||||
|
||||
; ‚¥ªâ®à ®¡á«ã¦¨¢ ¨ï ªãàá®à
|
||||
cursor_interrupt:
|
||||
LD A,(Cursor_Off.Flag)
|
||||
OR A
|
||||
RET Z
|
||||
LD A,(Cursor_Off.Flag)
|
||||
OR A
|
||||
RET Z
|
||||
.timer+1: LD A,1 ; ¯ ã§ ¬¨£ ¨ï
|
||||
DEC A
|
||||
CALL Z,Cursor
|
||||
LD (.timer),A
|
||||
RET
|
||||
DEC A
|
||||
CALL Z,Cursor
|
||||
LD (.timer),A
|
||||
RET
|
||||
|
||||
; <20> áâனª § ª®£¥¥à â®à ªãàá®à ç¥àâ®çª®©
|
||||
SETUP_CURSORS:
|
||||
@ -414,9 +414,9 @@ FULL_BF:
|
||||
BIT SF_BUFF,(IX+SOUND_K)
|
||||
JR Z,.FBF
|
||||
EXX
|
||||
LD DE,230
|
||||
LD HL,50
|
||||
CALL BEEP
|
||||
LD DE,230
|
||||
LD HL,50
|
||||
CALL BEEP
|
||||
EXX
|
||||
.FBF: EX AF,AF'
|
||||
RET
|
||||
@ -530,9 +530,9 @@ RUS_X BIT X_CTRL,(IX+K_SHIFT)
|
||||
BIT SF_ALT,(IX+SOUND_K)
|
||||
RET Z
|
||||
EXX
|
||||
LD DE,190
|
||||
LD HL,20
|
||||
CALL BEEP
|
||||
LD DE,190
|
||||
LD HL,20
|
||||
CALL BEEP
|
||||
EXX
|
||||
RET
|
||||
|
||||
|
||||
75
DSS/Kernel_Panic.asm
Normal file
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
|
||||
LD A,(HL)
|
||||
INC A
|
||||
JP Z,ERROR_BOOTDRV_DIES
|
||||
SCF
|
||||
;JP Z,ERROR_BOOTDRV_DIES
|
||||
RET Z
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
|
||||
; 6. § ¬¥ï¥¬ ®¢ë¥ â ¡«¨æë ¬®¤¨ä¨æ¨à®¢ ë¥ áâ àë¥
|
||||
@ -127,6 +129,7 @@ ReScanDRV:
|
||||
;7. ¢ë室
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
LD A,(DRV_PAGE.LDRIVE)
|
||||
AND A
|
||||
RET
|
||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||
|
||||
@ -274,42 +277,42 @@ Find_Record:
|
||||
;-----------------------[]
|
||||
|
||||
;-----------------------[]
|
||||
ERROR_BOOTDRV_DIES:
|
||||
DI
|
||||
LD E,1
|
||||
LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default
|
||||
RST ToBIOS
|
||||
;
|
||||
LD HL,#2050
|
||||
LD DE,0
|
||||
LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_CLS_WIN
|
||||
RST ToBIOS
|
||||
;
|
||||
LD A,1
|
||||
OUT (SCREEN_SWITCH),A ; set scr-2
|
||||
;
|
||||
LD HL,.ERROR_MSG
|
||||
LD DE,#A000
|
||||
LD BC,.ERROR_MSG.size
|
||||
LD A,C
|
||||
LDIR
|
||||
;
|
||||
LD DE,16*256 + (80-.ERROR_MSG.size)/2 ;X=0, Y=16
|
||||
LD C,BIOS.LP_SET_PLACE
|
||||
RST ToBIOS
|
||||
;
|
||||
LD HL,#A000
|
||||
LD DE,0*256 + COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE
|
||||
LD B,A
|
||||
LD C,BIOS.LP_PRINT_LINE3
|
||||
RST ToBIOS
|
||||
;
|
||||
.loop: DI
|
||||
HALT
|
||||
JR .loop
|
||||
;
|
||||
.ERROR_MSG: DZ "Kernel panic! Boot disk lost. Press Ctrl+Alt+Del or RESET."
|
||||
.ERROR_MSG.size EQU $-.ERROR_MSG
|
||||
; ERROR_BOOTDRV_DIES:
|
||||
; DI
|
||||
; LD E,1
|
||||
; LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default
|
||||
; RST ToBIOS
|
||||
; ;
|
||||
; LD HL,#2050
|
||||
; LD DE,0
|
||||
; LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_CLS_WIN
|
||||
; RST ToBIOS
|
||||
; ;
|
||||
; LD A,1
|
||||
; OUT (SCREEN_SWITCH),A ; set scr-2
|
||||
; ;
|
||||
; LD HL,.ERROR_MSG
|
||||
; LD DE,#A000
|
||||
; LD BC,.ERROR_MSG.size
|
||||
; LD A,C
|
||||
; LDIR
|
||||
; ;
|
||||
; LD DE,16*256 + (80-.ERROR_MSG.size)/2 ;X=0, Y=16
|
||||
; LD C,BIOS.LP_SET_PLACE
|
||||
; RST ToBIOS
|
||||
; ;
|
||||
; LD HL,#A000
|
||||
; LD DE,0*256 + COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE
|
||||
; LD B,A
|
||||
; LD C,BIOS.LP_PRINT_LINE3
|
||||
; RST ToBIOS
|
||||
; ;
|
||||
; .loop: DI
|
||||
; HALT
|
||||
; JR .loop
|
||||
; ;
|
||||
; .ERROR_MSG: DZ "Kernel panic! Boot disk lost. Press Ctrl+Alt+Del or RESET."
|
||||
; .ERROR_MSG.size EQU $-.ERROR_MSG
|
||||
;-----------------------[]
|
||||
|
||||
|
||||
@ -449,7 +452,7 @@ KILL_FM:;
|
||||
CP C
|
||||
JR NZ,.skip
|
||||
XOR A
|
||||
LD (IY+_sFM.NAME),A ; £à®å ¥¬ ¬ ¨¯ã«ïâ®à
|
||||
LD (IY+_sFM.FS_REC.NAME),A ; £à®å ¥¬ ¬ ¨¯ã«ïâ®à
|
||||
.skip: DJNZ .loop_fm
|
||||
;
|
||||
POP AF
|
||||
|
||||
@ -171,7 +171,7 @@
|
||||
|
||||
; IDE0 EQU #0C1C0
|
||||
; IDE1 EQU #0C1C8
|
||||
PART EQU #C000
|
||||
PARTITION_BUFFER _sBOOT_SECTOR = #C000 ; EQU #C000 _sBOOT_SECTOR
|
||||
|
||||
HDDRIVE INC C
|
||||
DEC C
|
||||
@ -245,7 +245,7 @@ NX_DVCI: PUSH BC
|
||||
LD C,BIOS.DRV_DETECT
|
||||
RST ToBIOS
|
||||
;JR C,.NO_DRIVE
|
||||
CALL NC,PARTIT
|
||||
CALL NC,DEFINE_PARTITIONS.BEGIN
|
||||
POP BC
|
||||
INC C
|
||||
JR C,NX_DVCI
|
||||
@ -515,35 +515,39 @@ CHECKH: PUSH IY
|
||||
POP IY
|
||||
RET
|
||||
|
||||
;-----------------
|
||||
EASYDOS:
|
||||
MEDIDOS:
|
||||
HIGHDOS:
|
||||
LD E,(IY+08)
|
||||
LD D,(IY+09)
|
||||
LD L,(IY+10)
|
||||
LD H,(IY+11)
|
||||
LD IX,(CURSECL)
|
||||
;------------------------------[ PARTIT ]------------------------------;
|
||||
DEFINE_PARTITIONS:
|
||||
.FAT32_DOS:
|
||||
.EASYDOS:
|
||||
.MEDIDOS:
|
||||
.HIGHDOS:
|
||||
LD E,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 0)
|
||||
LD D,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 1)
|
||||
LD L,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 2)
|
||||
LD H,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 3)
|
||||
LD IX,(CURRENT_SECTOR_L)
|
||||
ADD IX,DE
|
||||
LD DE,(CURSECH)
|
||||
LD DE,(CURRENT_SECTOR_H)
|
||||
ADC HL,DE
|
||||
LD D,XH
|
||||
LD E,XL
|
||||
;BPB SECTOR
|
||||
LD IX,(OFFSECT)
|
||||
LD (IX+LOGDRV.SECTOR_OFFSET+0),E ;BPB SECTOR
|
||||
LD (IX+LOGDRV.SECTOR_OFFSET+1),D
|
||||
LD (IX+LOGDRV.SECTOR_OFFSET+2),L
|
||||
LD (IX+LOGDRV.SECTOR_OFFSET+3),H
|
||||
LD E,(IY+12)
|
||||
LD D,(IY+13)
|
||||
LD L,(IY+14)
|
||||
LD H,(IY+15)
|
||||
LD (IX+LOGDRV.SIZE_IN_SECTORS+0),E ;SIZE DISK
|
||||
LD (IX+LOGDRV.SIZE_IN_SECTORS+1),D
|
||||
LD (IX+LOGDRV.SIZE_IN_SECTORS+2),L
|
||||
LD (IX+LOGDRV.SIZE_IN_SECTORS+3),H
|
||||
LD (IX + LOGDRV.SECTOR_OFFSET + 0),E
|
||||
LD (IX + LOGDRV.SECTOR_OFFSET + 1),D
|
||||
LD (IX + LOGDRV.SECTOR_OFFSET + 2),L
|
||||
LD (IX + LOGDRV.SECTOR_OFFSET + 3),H
|
||||
LD E,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 0)
|
||||
LD D,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 1)
|
||||
LD L,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 2)
|
||||
LD H,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 3)
|
||||
;SIZE DISK
|
||||
LD (IX + LOGDRV.SIZE_IN_SECTORS + 0),E
|
||||
LD (IX + LOGDRV.SIZE_IN_SECTORS + 1),D
|
||||
LD (IX + LOGDRV.SIZE_IN_SECTORS + 2),L
|
||||
LD (IX + LOGDRV.SIZE_IN_SECTORS + 3),H
|
||||
;[ ] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||
ExtendedPartitionFlag+1:
|
||||
.ExtendedPartitionFlag+1:
|
||||
LD A,0
|
||||
OR A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
LD A,#FF
|
||||
@ -551,10 +555,10 @@ ExtendedPartitionFlag+1:
|
||||
;
|
||||
POP BC
|
||||
PUSH BC
|
||||
LD A,4 ;!HARDCODE MBR: Number of entries in the partition table
|
||||
LD A,+(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD) ; Number of entries in the partition table
|
||||
SUB B
|
||||
.not_supported:
|
||||
LD (IX+LOGDRV.PARTITION_RECORD_NUM),A
|
||||
LD (IX + LOGDRV.PARTITION_RECORD_NUM),A
|
||||
;
|
||||
;!TEST <09>®¤áâà 客ª ®â ¯¥à¥¯®«¥¨ï â ¡«¨æë LOGDRV
|
||||
LD A,(DRVCLC.count)
|
||||
@ -564,66 +568,60 @@ ExtendedPartitionFlag+1:
|
||||
LD (DRVCLC.count),A
|
||||
;
|
||||
LD A,(DRV_NUM)
|
||||
LD (IX+LOGDRV.PHISICAL_DRV_NUMBER),A
|
||||
LD (IX + LOGDRV.PHISICAL_DRV_NUMBER),A
|
||||
LD DE,LOGDRV.TBL_Entry ;DSKITEM
|
||||
ADD IX,DE
|
||||
LD (OFFSECT),IX
|
||||
JP NXTPART
|
||||
; NXTPART:
|
||||
; LD DE,#10 ;!HARDCODE SZ_PTE - Size of a partition table entry
|
||||
; ADD IY,DE
|
||||
; POP BC
|
||||
; DJNZ DOSAGA
|
||||
; AND A
|
||||
; RET
|
||||
|
||||
|
||||
JP .NextPartition
|
||||
;
|
||||
NOEXTDS:
|
||||
.NotExtended:
|
||||
CP PartitionSysTypes.FAT16
|
||||
JR Z,HIGHDOS
|
||||
JR Z,.HIGHDOS
|
||||
CP PartitionSysTypes.FAT16_LBA
|
||||
JR Z,HIGHDOS
|
||||
JR Z,.HIGHDOS
|
||||
CP PartitionSysTypes.FAT16_32Mb
|
||||
JR Z,MEDIDOS
|
||||
JR Z,.MEDIDOS
|
||||
CP PartitionSysTypes.FAT12
|
||||
JR Z,EASYDOS
|
||||
JR Z,.EASYDOS
|
||||
;[ ] fat32
|
||||
CP PartitionSysTypes.FAT32
|
||||
JP Z,.FAT32_DOS
|
||||
CP PartitionSysTypes.FAT32_LBA
|
||||
JP Z,.FAT32_DOS
|
||||
;
|
||||
CP PartitionSysTypes.Win_Ext_LBA
|
||||
JR Z,SUBLEV
|
||||
JR Z,.SubLevel
|
||||
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¤¥â¥ªâ
|
||||
;OR A ;PartitionSysTypes.Empty
|
||||
;OR A ;PartitionSysTypes.Empty
|
||||
;JR NZ,NXTPART
|
||||
JR NXTPART ; à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
;POP BC ; ¡ « á á⥪
|
||||
JR .NextPartition ; à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
;POP BC ; ¡ « á á⥪
|
||||
;RET
|
||||
;POP BC
|
||||
;OR A
|
||||
;RET Z
|
||||
;NODEFIN:
|
||||
;SCF
|
||||
;RET
|
||||
;RET
|
||||
;
|
||||
|
||||
PARTIT: IN A,(SLOT3)
|
||||
.BEGIN: IN A,(SLOT3)
|
||||
PUSH AF
|
||||
LD A,SHARED_PAGE
|
||||
OUT (SLOT3),A
|
||||
CALL PARTIT1
|
||||
CALL .Start
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
|
||||
PARTIT1:
|
||||
LD IX,0
|
||||
.Start: LD IX,0
|
||||
LD DE,0
|
||||
LD (EXTDOSL),DE ;R01
|
||||
LD (EXTDOSH),IX ;R01
|
||||
PARTIT2:
|
||||
LD (CURSECL),DE
|
||||
LD (CURSECH),IX
|
||||
CALL LOADSEC
|
||||
;
|
||||
LD HL,(PART+510) ;!HARDCODE Signature word
|
||||
.LOOP: LD (CURRENT_SECTOR_L),DE
|
||||
LD (CURRENT_SECTOR_H),IX
|
||||
CALL .LOAD_SECTOR
|
||||
;
|
||||
LD HL,(PARTITION_BUFFER.MBR_SIGNATURE)
|
||||
LD DE,#AA55
|
||||
AND A
|
||||
SBC HL,DE
|
||||
@ -632,59 +630,59 @@ PARTIT2:
|
||||
SCF
|
||||
RET NZ
|
||||
;
|
||||
LD IY,PART+#01BE ;!HARDCODE MBR: Offset of partition table in the MBR
|
||||
LD B,4 ;!HARDCODE MBR: Number of entries in the partition table
|
||||
DOSAGA: PUSH BC
|
||||
LD A,(IY+4)
|
||||
LD IY,PARTITION_BUFFER.PARTITION_TABLE ; Offset of partition table in the MBR
|
||||
LD B,+(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD) ; Number of entries in the partition table
|
||||
.DOSAGA:
|
||||
PUSH BC
|
||||
LD A,(IY+_sMBR_PARTITION_RECORD.FS_ID)
|
||||
CP PartitionSysTypes.Extended
|
||||
JR NZ,NOEXTDS
|
||||
SUBLEV: PUSH IY
|
||||
LD DE,(CURSECL)
|
||||
LD IX,(CURSECH)
|
||||
JR NZ,.NotExtended
|
||||
.SubLevel:
|
||||
PUSH IY
|
||||
LD DE,(CURRENT_SECTOR_L)
|
||||
LD IX,(CURRENT_SECTOR_H)
|
||||
PUSH DE
|
||||
PUSH IX
|
||||
;[ ] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à à §¤¥«®¢
|
||||
LD A,(ExtendedPartitionFlag)
|
||||
LD A,(.ExtendedPartitionFlag)
|
||||
INC A
|
||||
LD (ExtendedPartitionFlag),A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
LD (.ExtendedPartitionFlag),A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
;
|
||||
CALL EXTDOS
|
||||
CALL .ParseExtended
|
||||
;[ ] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à à §¤¥«®¢
|
||||
LD A,(ExtendedPartitionFlag)
|
||||
LD A,(.ExtendedPartitionFlag)
|
||||
DEC A
|
||||
LD (ExtendedPartitionFlag),A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
LD (.ExtendedPartitionFlag),A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
;
|
||||
POP IX
|
||||
POP DE
|
||||
LD (CURSECL),DE
|
||||
LD (CURSECH),IX
|
||||
CALL LOADSEC
|
||||
LD (CURRENT_SECTOR_L),DE
|
||||
LD (CURRENT_SECTOR_H),IX
|
||||
CALL .LOAD_SECTOR
|
||||
POP IY
|
||||
NXTPART:
|
||||
LD DE,#10 ;!HARDCODE SZ_PTE - Size of a partition table entry
|
||||
.NextPartition:
|
||||
LD DE,_sMBR_PARTITION_RECORD ;Size of a partition table entry
|
||||
ADD IY,DE
|
||||
POP BC
|
||||
DJNZ DOSAGA
|
||||
DJNZ .DOSAGA
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
EXTDOS: LD HL,(EXTDOSL)
|
||||
.ParseExtended:
|
||||
LD HL,(EXTDOSL)
|
||||
LD DE,(EXTDOSH)
|
||||
LD A,L
|
||||
OR H
|
||||
OR E
|
||||
OR D
|
||||
LD E,(IY+08)
|
||||
LD D,(IY+09)
|
||||
LD L,(IY+10)
|
||||
LD H,(IY+11)
|
||||
JP NZ,EXTDOS2
|
||||
LD E,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 0)
|
||||
LD D,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 1)
|
||||
LD L,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 2)
|
||||
LD H,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 3)
|
||||
JP NZ,.EXTDOS2
|
||||
LD (EXTDOSL),DE
|
||||
LD (EXTDOSH),HL
|
||||
LD IX,(EXTDOSH)
|
||||
JP PARTIT2
|
||||
;
|
||||
EXTDOS2:
|
||||
.EXTDOS2:
|
||||
LD IX,(EXTDOSL)
|
||||
ADD IX,DE
|
||||
PUSH IX
|
||||
@ -693,27 +691,28 @@ EXTDOS2:
|
||||
PUSH HL
|
||||
POP IX
|
||||
POP DE
|
||||
JP PARTIT2
|
||||
|
||||
LOADSEC:
|
||||
JP .LOOP
|
||||
;
|
||||
.LOAD_SECTOR:
|
||||
PUSH IY
|
||||
LD IX,(CURSECL)
|
||||
LD HL,(CURSECH)
|
||||
LD DE,PART
|
||||
LD IX,(CURRENT_SECTOR_L)
|
||||
LD HL,(CURRENT_SECTOR_H)
|
||||
LD DE,PARTITION_BUFFER
|
||||
LD A,(DRV_NUM)
|
||||
LD BC,1*256 + BIOS.DRV_READ
|
||||
RST ToBIOS
|
||||
POP IY
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
;
|
||||
|
||||
DRV_NUM DB #00 ;PHISICAL DRIVE NUMBER. ®¬¥à ¤¥¢ ©á (#80/#81 - primary ¬ áâ¥à/á«¥©¢, #82/#83 - secondary ¬ áâ¥à/á«¥©¢)
|
||||
|
||||
CURSECL DW #0000 ;CURRENT SECTOR LOADED
|
||||
CURSECH DW #0000
|
||||
|
||||
EXTDOSL DW #0000 ;CURRENT PARTITION TABLE
|
||||
EXTDOSH DW #0000
|
||||
|
||||
OFFSECT DW LOGDRV ;POINTER ON CURRENT DISK RECORD
|
||||
|
||||
;=======================================================
|
||||
;=======================================================================
|
||||
; PHISICAL DRIVE NUMBER
|
||||
; #80/#81 - primary ¬ áâ¥à/á«¥©¢, #82/#83 - secondary ¬ áâ¥à/á«¥©¢
|
||||
DRV_NUM: DB #00
|
||||
CURRENT_SECTOR_L: DW #0000
|
||||
CURRENT_SECTOR_H: DW #0000
|
||||
EXTDOSL: DW #0000 ;CURRENT PARTITION TABLE
|
||||
EXTDOSH: DW #0000
|
||||
OFFSECT: DW LOGDRV ;POINTER ON CURRENT DISK RECORD
|
||||
;=======================================================================
|
||||
@ -1,41 +1,43 @@
|
||||
;
|
||||
STRUCT _sStack ; 256 bytes
|
||||
buffer BLOCK 256,0
|
||||
SPoint BYTE 0
|
||||
.buffer BLOCK 256,0
|
||||
.SPoint BYTE 0
|
||||
ENDS
|
||||
;
|
||||
|
||||
;
|
||||
STRUCT _sEXE_HEADER ; 512 bytes
|
||||
EXE_EXT TEXT 3,{"EX","E"}
|
||||
VERSION BYTE 0
|
||||
OFFCOD1 WORD 0
|
||||
OFFCOD2 WORD 0
|
||||
LOADER WORD 0
|
||||
RESERVED BLOCK 6,0
|
||||
LD_ADDR WORD 0
|
||||
PC_REG WORD 0
|
||||
SP_REG WORD 0
|
||||
RESERVED2 BLOCK 490,0
|
||||
.EXE_EXT TEXT 3,{"EX","E"}
|
||||
.VERSION BYTE 0
|
||||
.OFFCOD1 WORD 0
|
||||
.OFFCOD2 WORD 0
|
||||
.LOADER WORD 0
|
||||
.RESERVED BLOCK 6,0
|
||||
.LD_ADDR WORD 0
|
||||
.PC_REG WORD 0
|
||||
.SP_REG WORD 0
|
||||
.RESERVED2 BLOCK 490,0
|
||||
ENDS
|
||||
;
|
||||
|
||||
;File Manipulator (FM)
|
||||
STRUCT _sFM ; 47 bytes
|
||||
;[ ] fat32
|
||||
STRUCT _sFM ; 51 bytes
|
||||
; from FAT
|
||||
.NAME: TEXT 8,{". "," "} ;+ #00 +00 NAME
|
||||
.EXT: TEXT 3,{" "," "} ;+ #08 +08 EXT
|
||||
.ATTRIBUT: BYTE #10 ;+ #0B +11 ATTRIBUT
|
||||
.RESERVED_NT: BYTE #00 ;+ #0C +12 RESERVED
|
||||
.RESERVED_FAT32: BYTE #00 ;+ #0D +13 RESERVED
|
||||
.CREATE_TIME_FAT32: WORD #0000 ;+ #0E +14 RESERVED
|
||||
.CREATE_DATE_FAT32: WORD #0000 ;+ #10 +16 RESERVED
|
||||
.RESERVED_FAT32_1: WORD #0000 ;+ #12 +18 RESERVED
|
||||
.RESERVED_FAT32_2: WORD #0000 ;+ #14 +20 RESERVED
|
||||
.TIME: WORD #0000 ;+ #16 +22 TIME
|
||||
.DATE: WORD #0000 ;+ #18 +24 DATE
|
||||
.ST_CLUSTER: WORD #0000 ;+ #1A +26 START CLUSTER
|
||||
.F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE
|
||||
; .NAME: TEXT 8,{". "," "} ;+ #00 +00 NAME
|
||||
; .EXT: TEXT 3,{" "," "} ;+ #08 +08 EXT
|
||||
; .ATTRIBUT: BYTE #10 ;+ #0B +11 ATTRIBUT
|
||||
; .RESERVED_NT: BYTE #00 ;+ #0C +12 RESERVED
|
||||
; .RESERVED_FAT32: BYTE #00 ;+ #0D +13 RESERVED
|
||||
; .CREATE_TIME_FAT32: WORD #0000 ;+ #0E +14 RESERVED
|
||||
; .CREATE_DATE_FAT32: WORD #0000 ;+ #10 +16 RESERVED
|
||||
; .RESERVED_FAT32_1: WORD #0000 ;+ #12 +18 RESERVED
|
||||
; .FIRST_CLUSTER_H: WORD #0000 ;+ #14 +20 RESERVED
|
||||
; .TIME: WORD #0000 ;+ #16 +22 TIME
|
||||
; .DATE: WORD #0000 ;+ #18 +24 DATE
|
||||
; .FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER ;!TODO fat32
|
||||
; .F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE
|
||||
.FS_REC: _sFAT_DIRECTORY_RECORD
|
||||
; from Core
|
||||
.F_POSITION: DWORD #00000000 ;+ #20 +32 FILE POSITION (FP)
|
||||
.DIR_CLUSTER: WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER
|
||||
@ -44,10 +46,10 @@ RESERVED2 BLOCK 490,0
|
||||
.ACCESS_MODE: BYTE #00 ;+ #29 +41 ACCESS MODE ¯à¨§ ª ¨§¬¥¥¨ï ä ©«
|
||||
.TASK_NUM: BYTE #00 ;+ #2A +42 TASK
|
||||
;.EMPTY: BYTE #00 ;+ #2B +43 EMPTY
|
||||
.KnownCluster_L: BYTE 0 ;+ #2B +43 Œ« ¤è¨© ¡ ©â ®¬¥à ª« áâ¥à ¤«ï ª®â®à®£® ¨§¢¥áâ® ®â®á¨â¥«ì®¥ ᬥ饨¥ ¢ãâà¨ ä ©«
|
||||
.KnownCluster_H: BYTE 0 ;+ #2C +44 ‘â à訩 ¡ ©â ®¬¥à ª« áâ¥à ¤«ï ª®â®à®£® ¨§¢¥áâ® ®â®á¨â¥«ì®¥ ᬥ饨¥ ¢ãâà¨ ä ©«
|
||||
.KnownOffset_L: BYTE 0 ;+ #2D +45 Œ« ¤è¨© ¡ ©â ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||
.KnownOffset_H: BYTE 0 ;+ #2E +46 ‘â à訩 ¡ ©â ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||
.KnownCluster_L: WORD #0000 ;+ #2B +43 Œ« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à ¤«ï ª®â®à®£® ¨§¢¥áâ® ®â®á¨â¥«ì®¥ ᬥ饨¥ ¢ãâà¨ ä ©«
|
||||
.KnownCluster_H: WORD #0000 ;+ #2C +44 ‘â à襥 á«®¢® ®¬¥à ª« áâ¥à ¤«ï ª®â®à®£® ¨§¢¥áâ® ®â®á¨â¥«ì®¥ ᬥ饨¥ ¢ãâà¨ ä ©«
|
||||
.KnownOffset_L: WORD #0000 ;+ #2D +45 Œ« ¤è¥¥ á«®¢® ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||
.KnownOffset_H: WORD #0000 ;+ #2E +46 ‘â à襥 á«®¢® ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||
ENDS
|
||||
;
|
||||
|
||||
@ -67,12 +69,12 @@ RESERVED2 BLOCK 490,0
|
||||
|
||||
;
|
||||
STRUCT _sBuffers
|
||||
FileManipulator _sFM ; 44 bytes + 44 bytes * (FMCOUNT-1)
|
||||
FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0 ;
|
||||
BootSector _sBOOT_SEC ; 62 bytes ;!TODO ¯¥à¥¥á⨠¢ ®¡« áâì ¡ãä¥à®¢
|
||||
EXE_Header _sEXE_HEADER ; 512 bytes
|
||||
Stack _sStack ; 256 bytes
|
||||
Buffer BLOCK 512,0 ; FOR BUFFER & SECBUF
|
||||
MemoryTable BLOCK 256,0 ; 256 bytes
|
||||
.FileManipulator _sFM ; 44 bytes + 44 bytes * (FMCOUNT-1)
|
||||
.FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0 ;
|
||||
.BootSector _sBOOT_SECTOR_PARAMS ; 62 bytes ;!TODO ¯¥à¥¥á⨠¢ ®¡« áâì ¡ãä¥à®¢
|
||||
.EXE_Header _sEXE_HEADER ; 512 bytes
|
||||
.Stack _sStack ; 256 bytes
|
||||
.Buffer BLOCK 512,0 ; FOR BUFFER & SECBUF
|
||||
.MemoryTable BLOCK 256,0 ; 256 bytes
|
||||
ENDS
|
||||
;
|
||||
|
||||
@ -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 ¤¨áª®¢ ¢ á¨á⥬¥
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
DEFINE _FAT32_ENABLE 1 ;!TODO ¯®ª ¥¤®¤¥« ®
|
||||
|
||||
define _bit (1<?((FAT_CACHE.Sectors-1)
|
||||
define _shift _bit&1)) + _bit&2)) + _bit&4)) + _bit&8)) + _bit&16)) + _bit&32)) + _bit&64)) + _bit&128))
|
||||
;
|
||||
@ -83,7 +85,7 @@ ENVADDR EQU #E400
|
||||
;FAT_CACHE EQU #C000
|
||||
|
||||
FMCOUNT EQU 10 ; Š®«¨ç¥á⢮ ä ©«®¢ëå ¬ ¨¯ã«ïâ®à®¢
|
||||
HANDBUF.SIZE EQU 32
|
||||
HANDBUF.SIZE EQU 32 ; !HARDCODE _sFAT_DIRECTORY_RECORD
|
||||
;----------------------------------------------------;
|
||||
;
|
||||
|
||||
|
||||
@ -54,7 +54,7 @@ cmd_dir:
|
||||
1: ld hl,work_buffer1 ; ¨¬ï ä ©«
|
||||
ld de,work_buffer1 ; 80 ¡ãä¥à
|
||||
ld a,#37 ; âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ )
|
||||
ld bc,0*256 + Dss.F_First ; f_first (ä®à¬ â 11)
|
||||
ld bc,Dss.F_First.FATname ; f_first (ä®à¬ â 11)
|
||||
RST ToDSS
|
||||
JR C,.dir_empty ;R14
|
||||
CALL .Print_Header
|
||||
@ -610,7 +610,7 @@ read_disk_info:
|
||||
ld hl,mask_fname ; "*.*" ¨¬ï ¬¥âª¨
|
||||
ld de,work_buffer1 ; ªã¤
|
||||
ld a,FAT_ATTR.VOLUME_ID ; âਡãâ ¬¥âª¨ ⮬
|
||||
ld bc,0*256 + Dss.F_First ; f_first, ä®à¬ â 11
|
||||
ld bc,Dss.F_First.FATname ; f_first, ä®à¬ â 11
|
||||
RST ToDSS
|
||||
push af
|
||||
call restore_path ; ¢®ááâ. ⥪. ¯ãâì
|
||||
|
||||
@ -1 +1 @@
|
||||
Subproject commit cbc1fd596a5a56298407c13a529a574e968235c7
|
||||
Subproject commit 42dfec072030351eb386205ead32983bbc1c4909
|
||||
Loading…
Reference in New Issue
Block a user