mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
-bug in GETWORD: fixed "cd x:" incorrect behavior
This commit is contained in:
parent
54b1e804ba
commit
f13fdf4eab
@ -310,7 +310,7 @@ SET_PRM: PUSH BC
|
|||||||
LD A,B
|
LD A,B
|
||||||
LD C,BIOS.DRV_GET_PAR
|
LD C,BIOS.DRV_GET_PAR
|
||||||
RST ToBIOS_18
|
RST ToBIOS_18
|
||||||
LD A,(BOOT.S_P_T)
|
LD A,(BOOT.SectorsPerTrack)
|
||||||
LD L,A
|
LD L,A
|
||||||
POP AF
|
POP AF
|
||||||
PUSH AF
|
PUSH AF
|
||||||
@ -358,16 +358,16 @@ NX2: LD HL,(BOOT+510)
|
|||||||
LD D,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS+1)
|
LD D,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS+1)
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
LD (FAT_FRM),HL ;first sector FAT
|
LD (FAT_FRM),HL ;first sector FAT
|
||||||
LD E,(IY+_sBOOT_SECTOR_PARAMS.S_P_F) ;sectors in FAT
|
LD E,(IY+_sBOOT_SECTOR_PARAMS.SectorsPerFAT16) ;sectors in FAT
|
||||||
LD D,(IY+_sBOOT_SECTOR_PARAMS.S_P_F+1)
|
LD D,(IY+_sBOOT_SECTOR_PARAMS.SectorsPerFAT16+1)
|
||||||
LD A,(BOOT.FAT_NUM) ;amount FATs
|
LD A,(BOOT.Number_of_FATs) ;amount FATs
|
||||||
C_DATA1: ADD HL,DE
|
C_DATA1: ADD HL,DE
|
||||||
DEC A
|
DEC A
|
||||||
JR NZ,C_DATA1
|
JR NZ,C_DATA1
|
||||||
LD (DIR_FRM),HL ;first sector DIR
|
LD (DIR_FRM),HL ;first sector DIR
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD L,(IY+_sBOOT_SECTOR_PARAMS.F_P_DIR) ;Number file handel
|
LD L,(IY+_sBOOT_SECTOR_PARAMS.FilesInRootDIR) ;Number file handel
|
||||||
LD H,(IY+_sBOOT_SECTOR_PARAMS.F_P_DIR+1)
|
LD H,(IY+_sBOOT_SECTOR_PARAMS.FilesInRootDIR+1)
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
@ -381,10 +381,10 @@ C_DATA1: ADD HL,DE
|
|||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
LD (DAT_FRM),HL ;First sector data
|
LD (DAT_FRM),HL ;First sector data
|
||||||
|
|
||||||
LD C,(IY+_sBOOT_SECTOR_PARAMS.B_P_S) ;Size sector
|
LD C,(IY+_sBOOT_SECTOR_PARAMS.BytesPerSector) ;Size sector
|
||||||
LD B,(IY+_sBOOT_SECTOR_PARAMS.B_P_S+1)
|
LD B,(IY+_sBOOT_SECTOR_PARAMS.BytesPerSector+1)
|
||||||
LD HL,0
|
LD HL,0
|
||||||
LD A,(BOOT.S_P_C)
|
LD A,(BOOT.SectorsPerCluster)
|
||||||
NEXTAD3:
|
NEXTAD3:
|
||||||
ADD HL,BC ;calc. cluster size
|
ADD HL,BC ;calc. cluster size
|
||||||
DEC A
|
DEC A
|
||||||
@ -518,7 +518,7 @@ FLOAD: LD (READMEM),DE
|
|||||||
LD_FILE: PUSH HL
|
LD_FILE: PUSH HL
|
||||||
CALL NSECTOR
|
CALL NSECTOR
|
||||||
LD DE,(READMEM)
|
LD DE,(READMEM)
|
||||||
LD A,(BOOT.S_P_C)
|
LD A,(BOOT.SectorsPerCluster)
|
||||||
CP #20
|
CP #20
|
||||||
JR C,SMALL_CLUSTER
|
JR C,SMALL_CLUSTER
|
||||||
LD BC,#20*256 + BIOS.DRV_READ_LONG
|
LD BC,#20*256 + BIOS.DRV_READ_LONG
|
||||||
@ -554,7 +554,7 @@ SMALL_CLUSTER:
|
|||||||
; DEC HL
|
; DEC HL
|
||||||
; DEC HL
|
; DEC HL
|
||||||
; EX DE,HL
|
; EX DE,HL
|
||||||
; LD A,(BOOT.S_P_C)
|
; LD A,(BOOT.SectorsPerCluster)
|
||||||
; LD B,A
|
; LD B,A
|
||||||
; LD HL,0
|
; LD HL,0
|
||||||
; LD IX,0
|
; LD IX,0
|
||||||
@ -578,7 +578,7 @@ NSECTOR:
|
|||||||
LD DE,0
|
LD DE,0
|
||||||
DEC HL
|
DEC HL
|
||||||
DEC HL
|
DEC HL
|
||||||
LD A,(BOOT.S_P_C)
|
LD A,(BOOT.SectorsPerCluster)
|
||||||
XOR 1
|
XOR 1
|
||||||
JR Z,.skip
|
JR Z,.skip
|
||||||
;
|
;
|
||||||
@ -643,7 +643,7 @@ R_F_F12 LD D,H
|
|||||||
RR L
|
RR L
|
||||||
PUSH AF
|
PUSH AF
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD HL,(BOOT.B_P_S)
|
LD HL,(BOOT.BytesPerSector)
|
||||||
LD B,H
|
LD B,H
|
||||||
LD C,L
|
LD C,L
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
|
|||||||
@ -30,6 +30,6 @@ CHDIR: CALL GETWORD ;
|
|||||||
LD HL,TMPNAME
|
LD HL,TMPNAME
|
||||||
LD A,(HL)
|
LD A,(HL)
|
||||||
OR A
|
OR A
|
||||||
CALL NZ,OPENDIR
|
RET Z
|
||||||
RET
|
JP OPENDIR
|
||||||
;
|
;
|
||||||
@ -3,8 +3,6 @@
|
|||||||
; A - File attribute
|
; A - File attribute
|
||||||
; OUTPUT: A - FM
|
; OUTPUT: A - FM
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
CREATE_FN:
|
|
||||||
AND FAT_ATTR.NoVolID ; [x] 2/12/23 ¢à¥¬¥ë© ä¨ªá ¤«ï volume ID
|
|
||||||
CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
||||||
PUSH HL
|
PUSH HL
|
||||||
LD C,A
|
LD C,A
|
||||||
@ -13,7 +11,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
POP BC
|
POP BC
|
||||||
POP HL
|
POP HL
|
||||||
RET C
|
RET C
|
||||||
LD A,C ;
|
LD A,C
|
||||||
;
|
;
|
||||||
CALL .Prepare
|
CALL .Prepare
|
||||||
RET C
|
RET C
|
||||||
@ -30,8 +28,8 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.NEW_FN:
|
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
|
||||||
AND FAT_ATTR.NoVolID ; [x] 2/12/23 ¢à¥¬¥ë© ä¨ªá ¤«ï volume ID
|
; OUTPUT: A - FM
|
||||||
.NEW: ;!TEST Current Dir ;[x] 15/10/23
|
.NEW: ;!TEST Current Dir ;[x] 15/10/23
|
||||||
PUSH HL
|
PUSH HL
|
||||||
LD C,A
|
LD C,A
|
||||||
@ -69,7 +67,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
.loop1: LD (HL),C
|
.loop1: LD (HL),C
|
||||||
INC HL
|
INC HL
|
||||||
DJNZ .loop1
|
DJNZ .loop1
|
||||||
;
|
;AaRR
|
||||||
PUSH HL
|
PUSH HL
|
||||||
CALL SYSTIME
|
CALL SYSTIME
|
||||||
CALL MK_TIME
|
CALL MK_TIME
|
||||||
@ -97,7 +95,8 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
LD (OPEN_FN.TMP),A
|
LD (OPEN_FN.TMP),A
|
||||||
JP OPEN_FN.FILE ;R008
|
JP OPEN_FN.FILE ;R008
|
||||||
.Prepare:
|
.Prepare:
|
||||||
AND #E7 ;R004 %76A00SHR = !FAT_ATTR ;!HARDCODE
|
;AND #E7 ;R004 %76A00SHR = !FAT_ATTR ;!HARDCODE
|
||||||
|
AND FAT_ATTR.NoDIRnoVolID
|
||||||
LD (.TMP),A
|
LD (.TMP),A
|
||||||
LD (.PATH0),HL
|
LD (.PATH0),HL
|
||||||
CALL GETWORD
|
CALL GETWORD
|
||||||
@ -111,7 +110,4 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
LD A,DSS_Error.sys.FILE_EXISTS
|
LD A,DSS_Error.sys.FILE_EXISTS
|
||||||
CCF
|
CCF
|
||||||
RET
|
RET
|
||||||
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
|
|
||||||
; OUTPUT: A - FM
|
|
||||||
CREAT_N EQU CREATE.NEW_FN
|
|
||||||
;
|
;
|
||||||
@ -143,7 +143,7 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
;
|
;
|
||||||
POP HL
|
POP HL
|
||||||
CALL NSECTOR
|
CALL NSECTOR
|
||||||
LD A,(CORE_BUFFERS.BootSector.S_P_C) ; ᥪâ®à®¢ ª« áâ¥à
|
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ; ᥪâ®à®¢ ª« áâ¥à
|
||||||
.MKD12: PUSH AF
|
.MKD12: PUSH AF
|
||||||
PUSH HL ; áâ. à §àï¤
|
PUSH HL ; áâ. à §àï¤
|
||||||
PUSH IX ; ®¬¥à «®£. ᥪâ®à
|
PUSH IX ; ®¬¥à «®£. ᥪâ®à
|
||||||
|
|||||||
@ -42,7 +42,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
PUSH IX
|
PUSH IX
|
||||||
.RMD17: PUSH HL
|
.RMD17: PUSH HL
|
||||||
CALL NSECTOR
|
CALL NSECTOR
|
||||||
LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||||
; ç¨ ¥¬ ¢ëç¨âë¢ âì ᮤ¥à¦¨¬®¥ ª â «®£ ¯®á¥ªâ®à®
|
; ç¨ ¥¬ ¢ëç¨âë¢ âì ᮤ¥à¦¨¬®¥ ª â «®£ ¯®á¥ªâ®à®
|
||||||
.read_dir_loop:
|
.read_dir_loop:
|
||||||
PUSH AF
|
PUSH AF
|
||||||
@ -93,7 +93,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
POP AF
|
POP AF
|
||||||
DEC A
|
DEC A
|
||||||
JR NZ,.read_dir_loop
|
JR NZ,.read_dir_loop
|
||||||
;
|
; [ ] fat32
|
||||||
POP HL ; ®¬¥à ª« áâ¥à
|
POP HL ; ®¬¥à ª« áâ¥à
|
||||||
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||||
EX DE,HL ; hl=®¬¥à á«¥¤. ª« áâ¥à
|
EX DE,HL ; hl=®¬¥à á«¥¤. ª« áâ¥à
|
||||||
|
|||||||
@ -122,8 +122,8 @@ DISKINF:; [ ] 22/11/23
|
|||||||
LD E,C
|
LD E,C
|
||||||
LD HL,(FAT_Max_Cluster_L)
|
LD HL,(FAT_Max_Cluster_L)
|
||||||
DEC HL
|
DEC HL
|
||||||
LD BC,(CORE_BUFFERS.BootSector.B_P_S)
|
LD BC,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||||
LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
|||||||
@ -116,7 +116,7 @@ GETWORD:
|
|||||||
LD A,(HL)
|
LD A,(HL)
|
||||||
CP 'a'
|
CP 'a'
|
||||||
JR C,.next
|
JR C,.next
|
||||||
CP '{'
|
CP 'z'+1
|
||||||
JR NC,.next
|
JR NC,.next
|
||||||
SUB #20
|
SUB #20
|
||||||
.next: SUB 'A'
|
.next: SUB 'A'
|
||||||
@ -129,9 +129,9 @@ GETWORD:
|
|||||||
RET C
|
RET C
|
||||||
LD A,(HL)
|
LD A,(HL)
|
||||||
OR A
|
OR A
|
||||||
RET Z
|
JR Z,.done
|
||||||
CP ' ' ;
|
CP ' ' ;
|
||||||
RET Z
|
JR Z,.done
|
||||||
CP '\' ;
|
CP '\' ;
|
||||||
SCF
|
SCF
|
||||||
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||||||
@ -160,6 +160,10 @@ GETWORD:
|
|||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
.done: XOR A
|
||||||
|
LD (TMPNAME),A
|
||||||
|
RET
|
||||||
|
;
|
||||||
.DIR_NAME:
|
.DIR_NAME:
|
||||||
XOR A
|
XOR A
|
||||||
LD (DE),A
|
LD (DE),A
|
||||||
@ -260,6 +264,7 @@ OPENDSK:;!TEST DRV.Open
|
|||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
; ¢å®¤: HL - ¨¬ï ¤¨à¥ªâ®à¨¨
|
||||||
OPENDIR:;[x] some optimizations
|
OPENDIR:;[x] some optimizations
|
||||||
;XOR A
|
;XOR A
|
||||||
;CALL SET_FM
|
;CALL SET_FM
|
||||||
|
|||||||
@ -358,7 +358,7 @@ ADRST10: ;DS 512 ;,0
|
|||||||
;...............................................[LOW ADDRESS ]:
|
;...............................................[LOW ADDRESS ]:
|
||||||
; 0 1 2 3 4 5 6 7 8 9 DEC HEX
|
; 0 1 2 3 4 5 6 7 8 9 DEC HEX
|
||||||
DB low F_START, low CHNDISK_FN, low CURDISK_FN,low DISKINF, low NOPS, low NOPS, low NOPS, low NOPS, low SCANDRV, low BOOTDSK ; 0 00..09
|
DB low F_START, low CHNDISK_FN, low CURDISK_FN,low DISKINF, low NOPS, low NOPS, low NOPS, low NOPS, low SCANDRV, low BOOTDSK ; 0 00..09
|
||||||
DB low CREATE_FN, low CREAT_N, low NOPS, low NOPS, low DEL_FN, low NOPS, low RENAME, low OPEN_FN, low CLOSE_FN, low READ ; 1 0A..13
|
DB low CREATE, low CREATE.NEW, low NOPS, low NOPS, low DEL_FN, low NOPS, low RENAME, low OPEN_FN, low CLOSE_FN, low READ ; 1 0A..13
|
||||||
DB low WRITE, low MOVE_FP, low ATTRIB, low GET_D_T, low PUT_D_T, low F_FIRST, low F_NEXT, low MKDIR, low RMDIR, low CHDIR_FN ; 2 14..1D
|
DB low WRITE, low MOVE_FP, low ATTRIB, low GET_D_T, low PUT_D_T, low F_FIRST, low F_NEXT, low MKDIR, low RMDIR, low CHDIR_FN ; 2 14..1D
|
||||||
DB low CURRDIR_FN,low NOPS, low NOPS, low SYSTIME, low SETTIME, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 3 1E..27
|
DB low CURRDIR_FN,low NOPS, low NOPS, low SYSTIME, low SETTIME, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 3 1E..27
|
||||||
DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low WAITKEY, low SCANKEY ; 4 28..31
|
DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low WAITKEY, low SCANKEY ; 4 28..31
|
||||||
@ -385,7 +385,7 @@ ADRST10: ;DS 512 ;,0
|
|||||||
ENDIF
|
ENDIF
|
||||||
;...............................................[HIGH ADDRESS]:
|
;...............................................[HIGH ADDRESS]:
|
||||||
DB high F_START, high CHNDISK_FN,high CURDISK_FN,high DISKINF,high NOPS, high NOPS, high NOPS, high NOPS, high SCANDRV, high BOOTDSK
|
DB high F_START, high CHNDISK_FN,high CURDISK_FN,high DISKINF,high NOPS, high NOPS, high NOPS, high NOPS, high SCANDRV, high BOOTDSK
|
||||||
DB high CREATE_FN, high CREAT_N, high NOPS, high NOPS, high DEL_FN, high NOPS, high RENAME, high OPEN_FN,high CLOSE_FN,high READ
|
DB high CREATE, high CREATE.NEW,high NOPS, high NOPS, high DEL_FN, high NOPS, high RENAME, high OPEN_FN,high CLOSE_FN,high READ
|
||||||
DB high WRITE, high MOVE_FP, high ATTRIB, high GET_D_T,high PUT_D_T,high F_FIRST,high F_NEXT, high MKDIR, high RMDIR, high CHDIR_FN
|
DB high WRITE, high MOVE_FP, high ATTRIB, high GET_D_T,high PUT_D_T,high F_FIRST,high F_NEXT, high MKDIR, high RMDIR, high CHDIR_FN
|
||||||
DB high CURRDIR_FN,high NOPS, high NOPS, high SYSTIME,high SETTIME,high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
|
DB high CURRDIR_FN,high NOPS, high NOPS, high SYSTIME,high SETTIME,high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
|
||||||
DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high WAITKEY, high SCANKEY
|
DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high WAITKEY, high SCANKEY
|
||||||
|
|||||||
@ -16,7 +16,8 @@
|
|||||||
; (HANDBUF) = file's direcory record
|
; (HANDBUF) = file's direcory record
|
||||||
; CF - ª â «®£ ¥ ©¤¥
|
; CF - ª â «®£ ¥ ©¤¥
|
||||||
SEARCH:
|
SEARCH:
|
||||||
.Dir: LD A,FAT_ATTR.DIRECTORY
|
.Dir: ;LD A,FAT_ATTR.DIRECTORY
|
||||||
|
LD A,FAT_ATTR.HiddenSysDir
|
||||||
CALL SEARCH.Custom
|
CALL SEARCH.Custom
|
||||||
RET NC
|
RET NC
|
||||||
CP DSS_Error.sys.PATH_NOT_FOUND + 1
|
CP DSS_Error.sys.PATH_NOT_FOUND + 1
|
||||||
@ -40,12 +41,12 @@ SEARCH:
|
|||||||
; LD DE,0
|
; LD DE,0
|
||||||
; EXX
|
; EXX
|
||||||
;
|
;
|
||||||
.loop: LD A,(IX+00)
|
.loop: LD A,(IX+_sFAT_DIRECTORY_RECORD.NAME)
|
||||||
OR A
|
OR A
|
||||||
JR Z,.error_file_not_found
|
JR Z,.error_file_not_found
|
||||||
CP #E5 ;!HARDCODE #E5 - § ¯¨áì ¢ ¤¨à¥ªâ®à¨¨ ᢮¡®¤ , â ª ª ª ä ©«/¤¨à¥ªâ®à¨ï ¡ë«¨ 㤠«¥ë
|
CP #E5 ;!HARDCODE #E5 - § ¯¨áì ¢ ¤¨à¥ªâ®à¨¨ ᢮¡®¤ , â ª ª ª ä ©«/¤¨à¥ªâ®à¨ï ¡ë«¨ 㤠«¥ë
|
||||||
JR Z,.next_record
|
JR Z,.next_record
|
||||||
LD A,(IX+11)
|
LD A,(IX+_sFAT_DIRECTORY_RECORD.ATTRIBUT)
|
||||||
AND C
|
AND C
|
||||||
JR NZ,.next_record
|
JR NZ,.next_record
|
||||||
LD HL,MASKARE
|
LD HL,MASKARE
|
||||||
@ -345,7 +346,7 @@ LOADDIR:
|
|||||||
; [ ] fat32
|
; [ ] fat32
|
||||||
LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
||||||
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||||
JP Z,.LROTDIR ; root ??
|
JP Z,.LoadRootDir
|
||||||
;
|
;
|
||||||
LD HL,DIRPAGE.buffer ; ªã¤
|
LD HL,DIRPAGE.buffer ; ªã¤
|
||||||
LD DE,#4000 ; ᪮«ìª®
|
LD DE,#4000 ; ᪮«ìª®
|
||||||
@ -355,11 +356,11 @@ LOADDIR:
|
|||||||
POP AF
|
POP AF
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
RET
|
RET
|
||||||
.LROTDIR:
|
.LoadRootDir:
|
||||||
LD HL,(FatBuffer.DIR_FRH) ; áâ. à §àï¤
|
LD HL,(FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤
|
||||||
LD IX,(FatBuffer.DIR_FRL) ; ®¬¥à «®£. ᥪâ®à
|
LD IX,(FatBuffer.RootDirFirstSector_L) ; ®¬¥à «®£. ᥪâ®à
|
||||||
LD A,(FatBuffer.DIR_S_S)
|
LD A,(FatBuffer.DirSizeInSectros)
|
||||||
LD B,32 ; !HARDCODE 16384/(sector 512). à §¬¥à root-ª â «®£
|
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£
|
||||||
CP B
|
CP B
|
||||||
JR NC,.RTD1
|
JR NC,.RTD1
|
||||||
LD B,A ; ç¨á«® ᥪâ®à®¢
|
LD B,A ; ç¨á«® ᥪâ®à®¢
|
||||||
@ -420,7 +421,7 @@ WRT_HND: SET_PAGE_X DIRPAGE
|
|||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JR NC,SAVEDIR
|
JR NC,SAVEDIR
|
||||||
LD HL,(SAVEDIR.DIRSIZE)
|
LD HL,(SAVEDIR.DIRSIZE)
|
||||||
LD BC,(FatBuffer.B_P_C)
|
LD BC,(FatBuffer.BytesPerCluster)
|
||||||
ADD HL,BC
|
ADD HL,BC
|
||||||
LD (SAVEDIR.DIRSIZE),HL
|
LD (SAVEDIR.DIRSIZE),HL
|
||||||
AND A
|
AND A
|
||||||
@ -448,7 +449,7 @@ SAVEDIR:
|
|||||||
LD E,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
LD E,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||||
LD A,D
|
LD A,D
|
||||||
OR E
|
OR E
|
||||||
JP Z,.SROTDIR
|
JP Z,.SaveRootDir
|
||||||
LD HL,DIRPAGE.buffer
|
LD HL,DIRPAGE.buffer
|
||||||
; à §¬¥à ᯨ᪠ª â «®£ size_cash_directory
|
; à §¬¥à ᯨ᪠ª â «®£ size_cash_directory
|
||||||
;!FIXIT ¥á«¨ ® 㦠, â® ¯à®¢¥à¨âì ¡ £¨ ( ¯à¨¬¥à, à §¬¥à ¤¨à४â®à¨¨ ¬¥ìè¥ ¯à¨ ®âªàë⨨ ¨ ¡®«ìè¥ ¯®á«¥ ¯à ¢®ª)
|
;!FIXIT ¥á«¨ ® 㦠, â® ¯à®¢¥à¨âì ¡ £¨ ( ¯à¨¬¥à, à §¬¥à ¤¨à४â®à¨¨ ¬¥ìè¥ ¯à¨ ®âªàë⨨ ¨ ¡®«ìè¥ ¯®á«¥ ¯à ¢®ª)
|
||||||
@ -460,11 +461,11 @@ SAVEDIR:
|
|||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
.SROTDIR:
|
.SaveRootDir:
|
||||||
LD HL,(FatBuffer.DIR_FRH)
|
LD HL,(FatBuffer.RootDirFirstSector_H)
|
||||||
LD IX,(FatBuffer.DIR_FRL)
|
LD IX,(FatBuffer.RootDirFirstSector_L)
|
||||||
LD A,(FatBuffer.DIR_S_S)
|
LD A,(FatBuffer.DirSizeInSectros)
|
||||||
LD B,32 ;!HARDCODE
|
LD B,32 ;!HARDCODE sector size 512
|
||||||
SUB B
|
SUB B
|
||||||
JR NC,.RTD1S
|
JR NC,.RTD1S
|
||||||
ADD A,B
|
ADD A,B
|
||||||
@ -496,18 +497,13 @@ RD_BPB: LD C,SLOT3
|
|||||||
IN A,(SLOT0)
|
IN A,(SLOT0)
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(FatBuffer.DRIVE)
|
||||||
;R08
|
LD DE,CORE_BUFFERS.SECBUF+#C000 ;R08
|
||||||
;LD DE,BOOT+#C000
|
|
||||||
LD DE,CORE_BUFFERS.SECBUF+#C000
|
|
||||||
;R08
|
|
||||||
LD C,Dss.DRV.GetBPB
|
LD C,Dss.DRV.GetBPB
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
POP BC
|
POP BC
|
||||||
OUT (C),B
|
OUT (C),B
|
||||||
JP C,DOS_X_Error.Not_ready
|
JP C,DOS_X_Error.Not_ready
|
||||||
|
|
||||||
//PUSH IY ; ¯®ª ¡¥§ ¨¤¥ªá®£®, ® ¬®¦¥â ¯à¨£®¤¨âìáï
|
|
||||||
|
|
||||||
LD DE,#AA55 ; ᨣ âãà ;R05
|
LD DE,#AA55 ; ᨣ âãà ;R05
|
||||||
LD HL,(CORE_BUFFERS.SECBUF+_sBOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07
|
LD HL,(CORE_BUFFERS.SECBUF+_sBOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07
|
||||||
;R05
|
;R05
|
||||||
@ -520,39 +516,21 @@ RD_BPB: LD C,SLOT3
|
|||||||
LD BC,_sBOOT_SECTOR_PARAMS ; size
|
LD BC,_sBOOT_SECTOR_PARAMS ; size
|
||||||
LDIR
|
LDIR
|
||||||
;
|
;
|
||||||
|
|
||||||
//LD IY,BootSector ; ¯®ª ¡¥§ ¨¤¥ªá®£®, ® ¬®¦¥â ¯à¨£®¤¨âìáï
|
|
||||||
//LD A,(IY+_sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
|
||||||
LD A,(CORE_BUFFERS.BootSector.DRIVE_TYPE)
|
LD A,(CORE_BUFFERS.BootSector.DRIVE_TYPE)
|
||||||
|
|
||||||
CP #F0
|
CP #F0
|
||||||
JP C,DOS_X_Error.UnknownBPB
|
JP C,DOS_X_Error.UnknownBPB
|
||||||
|
; calc. first sector FAT
|
||||||
;!TEST
|
|
||||||
;LD HL,0 ; calc. first sector FAT
|
|
||||||
;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_SECTOR_PARAMS.RESERVED_SECTORS) ;Reserve sec
|
|
||||||
//LD H,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS+1)
|
|
||||||
LD HL,(CORE_BUFFERS.BootSector.RESERVED_SECTORS)
|
LD HL,(CORE_BUFFERS.BootSector.RESERVED_SECTORS)
|
||||||
;
|
;
|
||||||
|
|
||||||
; LD E,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN) ;Hidden sec
|
; LD E,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN) ;Hidden sec
|
||||||
; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1)
|
; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1)
|
||||||
; ADD HL,DE
|
; ADD HL,DE
|
||||||
|
;
|
||||||
;LD (FatBuffer.FAT_FRM),HL ; first sector FAT
|
|
||||||
LD (FatBuffer.FAT1_SEC_L),HL ; first sector FAT #1
|
LD (FatBuffer.FAT1_SEC_L),HL ; first sector FAT #1
|
||||||
LD (FatBuffer.FAT2_SEC_L),HL
|
LD (FatBuffer.FAT2_SEC_L),HL ; first sector FAT #2
|
||||||
|
;
|
||||||
//LD E,(IY+_sBOOT_SECTOR_PARAMS.S_P_F) ; sectors in FAT
|
LD DE,(CORE_BUFFERS.BootSector.SectorsPerFAT16)
|
||||||
//LD D,(IY+_sBOOT_SECTOR_PARAMS.S_P_F+1)
|
LD A,(CORE_BUFFERS.BootSector.Number_of_FATs) ; amount FATs
|
||||||
LD DE,(CORE_BUFFERS.BootSector.S_P_F)
|
|
||||||
|
|
||||||
|
|
||||||
LD A,(CORE_BUFFERS.BootSector.FAT_NUM) ; amount FATs
|
|
||||||
CP 1
|
CP 1
|
||||||
JR Z,.loop1
|
JR Z,.loop1
|
||||||
DEC A
|
DEC A
|
||||||
@ -562,80 +540,47 @@ RD_BPB: LD C,SLOT3
|
|||||||
.loop1: ADD HL,DE
|
.loop1: ADD HL,DE
|
||||||
DEC A
|
DEC A
|
||||||
JR NZ,.loop1
|
JR NZ,.loop1
|
||||||
LD (FatBuffer.DIR_FRL),HL ; first sector DIR
|
;
|
||||||
; CF = ? ¬ «® «¨
|
LD (FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
|
||||||
AND A
|
LD BC,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||||
; CF = 0
|
|
||||||
|
|
||||||
//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
|
|
||||||
; RL C
|
|
||||||
; RL B
|
|
||||||
; RL C
|
|
||||||
; RL B
|
|
||||||
; LD C,B
|
|
||||||
; LD B,0 ; BC - File handels in sectors
|
|
||||||
; LD A,C
|
|
||||||
;;;;
|
|
||||||
LD A,B
|
LD A,B
|
||||||
|
AND A
|
||||||
;
|
;
|
||||||
RL C
|
RL C
|
||||||
RLA
|
RLA
|
||||||
;
|
|
||||||
RL C
|
RL C
|
||||||
RLA
|
RLA
|
||||||
;
|
|
||||||
RL C
|
RL C
|
||||||
RLA
|
RLA
|
||||||
;
|
;
|
||||||
LD C,A
|
LD C,A
|
||||||
LD B,0 ; BC - File handels in sectors
|
LD B,0 ; BC - File handels in sectors
|
||||||
;;;;
|
;;;;
|
||||||
LD (FatBuffer.F_P_S),A
|
LD (FatBuffer.FilesPerSector),A
|
||||||
|
;
|
||||||
//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
|
EX DE,HL
|
||||||
DEC HL
|
LD HL,(CORE_BUFFERS.BootSector.FilesInRootDIR) ; 0 for fat32
|
||||||
|
DEC HL ; [ ]fat32
|
||||||
XOR A
|
XOR A
|
||||||
;NEXTAD2
|
;NEXTAD2
|
||||||
.loop2: INC A
|
.loop2: INC A
|
||||||
JP Z,DOS_X_Error.UnknownBPB
|
JP Z,DOS_X_Error.UnknownBPB
|
||||||
SBC HL,BC
|
SBC HL,BC
|
||||||
JR NC,.loop2
|
JR NC,.loop2
|
||||||
|
;
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD C,A ; A - sectors in DIR
|
LD C,A ; A - sectors in DIR
|
||||||
LD B,0
|
LD B,0
|
||||||
LD (FatBuffer.DIR_S_S),A
|
LD (FatBuffer.DirSizeInSectros),A
|
||||||
ADD HL,BC ; Start DATA area
|
ADD HL,BC ; Start DATA area
|
||||||
LD (FatBuffer.DAT_FRL),HL
|
LD (FatBuffer.FirstDataSector_L),HL
|
||||||
;!TODO ¥ ¨á¯®«ì§ãîâáï § ç¥¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ï¥¬ë¥ ¢ FatBuffer
|
; B = 0
|
||||||
////////////////////////////////////////////////////////////////////////
|
;
|
||||||
;IF COMPILE_UNUSED_CODE
|
LD HL,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||||
;LD HL,0
|
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||||
|
|
||||||
;LD H,B ; âãâ ¢ B ®«ì ¤®«¦¥ ¡ëâì
|
|
||||||
;LD L,B
|
|
||||||
;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_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
|
;!TODO FATcacheSize
|
||||||
;NEXTAD3
|
; calc. cluster size
|
||||||
; .loop3: ADD HL,BC ; calc. cluster size
|
XOR 1
|
||||||
; DEC A
|
|
||||||
; JR NZ,.loop3
|
|
||||||
XOR 1 ; calc. cluster size
|
|
||||||
JR Z,.loop3.end
|
JR Z,.loop3.end
|
||||||
RRA
|
RRA
|
||||||
.loop3: ADD HL,HL
|
.loop3: ADD HL,HL
|
||||||
@ -643,7 +588,7 @@ RD_BPB: LD C,SLOT3
|
|||||||
JP NC,.loop3
|
JP NC,.loop3
|
||||||
.loop3.end:
|
.loop3.end:
|
||||||
;
|
;
|
||||||
LD (FatBuffer.CLU_LEN),HL
|
LD (FatBuffer.BytesPerCluster),HL
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize
|
LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize
|
||||||
XOR A
|
XOR A
|
||||||
@ -652,11 +597,9 @@ RD_BPB: LD C,SLOT3
|
|||||||
JP Z,DOS_X_Error.UnknownBPB
|
JP Z,DOS_X_Error.UnknownBPB
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JR NC,.loop4
|
JR NC,.loop4
|
||||||
LD (FatBuffer.C_P_B),A ; A - Clusters per bank (16k)
|
LD (FatBuffer.ClusterPerBank),A ; A - Clusters per bank (16k)
|
||||||
;ENDIF
|
;
|
||||||
////////////////////////////////////////////////////////////////////////
|
;!TODO detect fat type by clusters!
|
||||||
|
|
||||||
;!TODO detect fat type by clusters!
|
|
||||||
;[ ] fat32 reset fat32 variables
|
;[ ] fat32 reset fat32 variables
|
||||||
LD HL,0
|
LD HL,0
|
||||||
LD (FatBuffer.ENDCLUS_HIGH),HL
|
LD (FatBuffer.ENDCLUS_HIGH),HL
|
||||||
@ -707,57 +650,36 @@ RD_BPB: LD C,SLOT3
|
|||||||
LD (FatBuffer.FAT_TYPE),A
|
LD (FatBuffer.FAT_TYPE),A
|
||||||
LD (FatBuffer.ENDCLUS_LOW),HL
|
LD (FatBuffer.ENDCLUS_LOW),HL
|
||||||
|
|
||||||
;!TODO ¥ ¨á¯®«ì§ãîâáï § ç¥¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ï¥¬ë¥ ¢ FatBuffer
|
;!TODO ¥ ¨á¯®«ì§ã¥âáï § 票¥ ¢ëç¨á«ï¥¬®¥ ¨ á®åà 塞®¥ ¢ FatBuffer
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
;IF COMPILE_UNUSED_CODE
|
; LD HL,0
|
||||||
|
; LD BC,(CORE_BUFFERS.BootSector.SectorsPerTrack) ; Sector per track
|
||||||
LD HL,0
|
; LD A,(CORE_BUFFERS.BootSector.HEADS)
|
||||||
|
; .BPB_L1:; calc. sector per cylinder
|
||||||
//LD C,(IY+_sBOOT_SECTOR_PARAMS.S_P_T) ; Sector per track
|
; ADD HL,BC
|
||||||
//LD B,(IY+_sBOOT_SECTOR_PARAMS.S_P_T+1)
|
; DEC A
|
||||||
LD BC,(CORE_BUFFERS.BootSector.S_P_T) ; Sector per track
|
; JR NZ,.BPB_L1
|
||||||
|
; LD (FatBuffer.S_X_H),HL
|
||||||
LD A,(CORE_BUFFERS.BootSector.HEADS) ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
|
||||||
.BPB_L1: ; calc. sector per cylinder
|
|
||||||
ADD HL,BC
|
|
||||||
DEC A
|
|
||||||
JR NZ,.BPB_L1
|
|
||||||
LD (FatBuffer.S_X_H),HL
|
|
||||||
;ENDIF
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; [ ] fat32
|
||||||
LD DE,(FatBuffer.DAT_FRL)
|
LD HL,(CORE_BUFFERS.BootSector.SectorsPerDrive)
|
||||||
; LD E,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN) ;Hidden sec
|
LD DE,(FatBuffer.FirstDataSector_L)
|
||||||
; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1)
|
|
||||||
; AND A
|
|
||||||
; SBC HL,DE
|
|
||||||
; EX DE,HL
|
|
||||||
|
|
||||||
//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
|
LD A,H
|
||||||
OR L
|
OR L
|
||||||
JP NZ,.HDDSMAL
|
JP NZ,.HDDSMAL
|
||||||
;
|
;
|
||||||
//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 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)
|
LD BC,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS_H)
|
||||||
AND A
|
AND A
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JP NC,.HDDBIG
|
JP NC,.HDDBIG
|
||||||
DEC BC
|
DEC BC
|
||||||
JP .HDDBIG
|
JP .HDDBIG
|
||||||
.HDDSMAL:
|
;
|
||||||
;AND A ;âãâ CF ¯®«î¡ á á¡à®è¥ ¤®«¦¥ ¡ëâì
|
.HDDSMAL:; CF = 0
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
LD BC,0
|
LD BC,0
|
||||||
.HDDBIG: LD A,(CORE_BUFFERS.BootSector.S_P_C) ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
.HDDBIG: LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||||
SCF
|
SCF
|
||||||
.S4C01: RRA
|
.S4C01: RRA
|
||||||
JR C,.S4C02
|
JR C,.S4C02
|
||||||
@ -768,9 +690,7 @@ RD_BPB: LD C,SLOT3
|
|||||||
JP .S4C01
|
JP .S4C01
|
||||||
.S4C02: INC HL
|
.S4C02: INC HL
|
||||||
LD (FAT_Max_Cluster_L),HL
|
LD (FAT_Max_Cluster_L),HL
|
||||||
|
;
|
||||||
//POP IY
|
|
||||||
|
|
||||||
XOR A
|
XOR A
|
||||||
LD H,A
|
LD H,A
|
||||||
LD L,A
|
LD L,A
|
||||||
@ -808,7 +728,6 @@ RD_BPB: LD C,SLOT3
|
|||||||
;
|
;
|
||||||
DOS_X_Error:
|
DOS_X_Error:
|
||||||
.UnknownBPB:
|
.UnknownBPB:
|
||||||
//POP IY
|
|
||||||
LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
@ -823,22 +742,21 @@ FatBuffer:
|
|||||||
.MSG: DB 'FAT'
|
.MSG: DB 'FAT'
|
||||||
.READ_PG: DB #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
.READ_PG: DB #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
||||||
.BLOCK: DB #00
|
.BLOCK: DB #00
|
||||||
.DIR_CLU_L: DW #0000
|
.RootDirStartCluster_L: DW #0000
|
||||||
.DIR_CLU_H: DW #0000 ; [ ] fat32
|
.RootDirStartCluster_H: DW #0000 ; [ ] fat32
|
||||||
.DRIVE: DB #FF
|
.DRIVE: DB #FF
|
||||||
.FAT1_SEC_L: DW #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM)
|
.FAT1_SEC_L: DW #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM)
|
||||||
.FAT1_SEC_H: DW #0000 ; [ ] fat32
|
.FAT1_SEC_H: DW #0000 ; [ ] fat32
|
||||||
.FAT2_SEC_L: DW #0000
|
.FAT2_SEC_L: DW #0000
|
||||||
.FAT2_SEC_H: DW #0000 ; [ ] fat32
|
.FAT2_SEC_H: DW #0000 ; [ ] fat32
|
||||||
.DIR_FRH: DW #0000 ; MSD_CAT_SEC first sector DIR ; !TODO ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£ ;!FIXIT ¥ ¨á¯®«ì§ã¥âáï
|
.RootDirFirstSector_H: DW #0000 ; MSD_CAT_SEC first sector DIR ; !TODO ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£ ;!FIXIT ¥ ¨á¯®«ì§ã¥âáï
|
||||||
.DIR_FRL: DW #0000 ; MSD_CAT_SEC first sector DIR
|
.RootDirFirstSector_L: DW #0000 ; MSD_CAT_SEC first sector DIR
|
||||||
.F_P_S: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
.FilesPerSector: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
||||||
.DIR_S_S: DB #00 ; DIR_SEC_SIZE
|
.DirSizeInSectros: DB #00 ; DIR_SEC_SIZE
|
||||||
.DAT_FRL: DW #0000 ; MSD_DAT_SEC low
|
.FirstDataSector_L: DW #0000 ; MSD_DAT_SEC low
|
||||||
.DAT_FRH: DW #0000 ; MSD_DAT_SEC high ; !TODO ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£ ;!FIXIT ¥ ¨á¯®«ì§ã¥âáï
|
.FirstDataSector_H: DW #0000 ; MSD_DAT_SEC high ; !TODO ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£ ; [ ] fat32
|
||||||
.CLU_LEN:
|
.BytesPerCluster: DW #0000 ; CLUSTER_LEN
|
||||||
.B_P_C: DW #0000 ; CLUSTER_LEN
|
.ClusterPerBank: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
||||||
.C_P_B: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
|
||||||
.FAT_TYPE: DB #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; [x] fat32
|
.FAT_TYPE: DB #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; [x] fat32
|
||||||
.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
||||||
.ENDCLUS_LOW: DW #FFFF
|
.ENDCLUS_LOW: DW #FFFF
|
||||||
|
|||||||
@ -327,7 +327,7 @@ WRITE_FAT_TABLE:
|
|||||||
LD DE,FAT_CACHE.Sectors
|
LD DE,FAT_CACHE.Sectors
|
||||||
ADD HL,DE ;+ SIZE CASH (16 SECTORS)
|
ADD HL,DE ;+ SIZE CASH (16 SECTORS)
|
||||||
LD A,E ;!HARDCODE ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï çâ¥¨ï ¢ ªíè
|
LD A,E ;!HARDCODE ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï çâ¥¨ï ¢ ªíè
|
||||||
LD DE,(CORE_BUFFERS.BootSector.S_P_F) ; ᥪâ®à®¢ FAT
|
LD DE,(CORE_BUFFERS.BootSector.SectorsPerFAT16) ; ᥪâ®à®¢ FAT
|
||||||
AND A
|
AND A
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JR C,.WALLFAT
|
JR C,.WALLFAT
|
||||||
@ -520,13 +520,13 @@ GET_FAT12_CELL:
|
|||||||
RET
|
RET
|
||||||
|
|
||||||
|
|
||||||
; in: HL - CLUSTER
|
; in: DE:HL - CLUSTER
|
||||||
; out: HL:IX - SECTOR
|
; out: HL:IX - SECTOR
|
||||||
NSECTOR:;[x] fat32
|
NSECTOR:;[ ] fat32
|
||||||
LD DE,(FAT_Max_Cluster_H)
|
LD DE,(FAT_Max_Cluster_H) ; [ ] fat32 - § ¬¥¨âì ¤à㣮© ¯¥à¥¬¥®©
|
||||||
DEC HL
|
DEC HL
|
||||||
DEC HL
|
DEC HL
|
||||||
LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||||
XOR 1
|
XOR 1
|
||||||
JR Z,.skip
|
JR Z,.skip
|
||||||
;
|
;
|
||||||
@ -541,11 +541,16 @@ NSECTOR:;[x] fat32
|
|||||||
.skip: EX DE,HL
|
.skip: EX DE,HL
|
||||||
LD XL,E
|
LD XL,E
|
||||||
LD XH,D
|
LD XH,D
|
||||||
LD DE,(FatBuffer.DAT_FRL) ;first data sector
|
LD DE,(FatBuffer.FirstDataSector_L)
|
||||||
XOR A
|
; [x] fat32
|
||||||
|
;XOR A
|
||||||
|
;
|
||||||
ADD IX,DE
|
ADD IX,DE
|
||||||
LD D,A
|
; [x] fat32
|
||||||
LD E,A
|
LD DE,(FatBuffer.FirstDataSector_H)
|
||||||
|
;LD D,A
|
||||||
|
;LD E,A
|
||||||
|
;
|
||||||
ADC HL,DE
|
ADC HL,DE
|
||||||
;!TODO ¤® «¨ ¯à®¢¥àïâì ¯¥à¥¯®«¥¨¥ HL:IX?
|
;!TODO ¤® «¨ ¯à®¢¥àïâì ¯¥à¥¯®«¥¨¥ HL:IX?
|
||||||
RET
|
RET
|
||||||
@ -603,9 +608,8 @@ NSECTOR:;[x] fat32
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
BLOCK_READ.ECL2:
|
BLOCK_READ.ECL2:
|
||||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
;POP DE ; [ ] áâ à襥 á«®¢® ®¬¥à ª« áâ¥à (à ìè¥ ¨£®à¨à®¢ «®áì)
|
||||||
POP BC
|
POP BC ; [x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||||
;
|
|
||||||
POP BC
|
POP BC
|
||||||
POP DE
|
POP DE
|
||||||
AND A
|
AND A
|
||||||
@ -614,25 +618,30 @@ BLOCK_READ.ECL2:
|
|||||||
;READ SECTORS OF FILE
|
;READ SECTORS OF FILE
|
||||||
;HL:DE - FP (in sectors)
|
;HL:DE - FP (in sectors)
|
||||||
; B - Amount sectors
|
; B - Amount sectors
|
||||||
|
; IX - buffer in RAM
|
||||||
|
; 225ÿ937ÿ408 / 512 = 0x6BBC4 / 4 = 0x1AEF1
|
||||||
BLOCK_READ:
|
BLOCK_READ:
|
||||||
PUSH BC
|
PUSH BC
|
||||||
LD (READ.PointerOnBuffer),IX
|
LD (READ.PointerOnBuffer),IX
|
||||||
LD A,(CORE_BUFFERS.BootSector.S_P_C) ;SECTORS PER CLUSTER
|
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ;SECTORS PER CLUSTER
|
||||||
LD C,A
|
LD C,A
|
||||||
LD B,0
|
LD B,0
|
||||||
;HL:DE / BC => DE:IX HL-OSTATOK
|
;HL:DE / BC => DE:IX HL-OSTATOK
|
||||||
CALL DIV_for_SPC
|
CALL DIV_for_SPC
|
||||||
; [ ] fat32. ¤ «¥¥ § â®çª â®, çâ® ¢ DE ¢á¥£¤ 0 - ä ©« ¥ ¡®«ìè¥ 2Gb
|
; [ ] fat32. ¤ «¥¥ § â®çª â®, çâ® ¢ DE ¢á¥£¤ 0 - ä ©« ¥ ¡®«ìè¥ 2Gb. ˆá¯®«ì§®¢ âì DE
|
||||||
LD B,XH
|
LD B,XH
|
||||||
LD C,XL
|
LD C,XL
|
||||||
PUSH HL ;RESIDUE
|
PUSH HL ; ®áâ ⮪ DIV_for_SPC
|
||||||
|
|
||||||
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ;START CLUSTER
|
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ;START CLUSTER
|
||||||
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||||
LD A,H
|
LD A,L
|
||||||
OR L
|
OR H
|
||||||
|
;OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1)
|
||||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||||
;JR NZ,BLOKRD2
|
;JR NZ,BLOKRD2
|
||||||
PUSH BC
|
PUSH BC
|
||||||
|
;PUSH DE ; [ ] áâ à襥 á«®¢® ®¬¥à ª« áâ¥à (à ìè¥ ¨£®à¨à®¢ «®áì)
|
||||||
JR Z,.ECL2
|
JR Z,.ECL2
|
||||||
;JP ECL2 ;RY01 JR BLOKRD0
|
;JP ECL2 ;RY01 JR BLOKRD0
|
||||||
_GetSavedCluster .enter_loop1
|
_GetSavedCluster .enter_loop1
|
||||||
@ -650,12 +659,13 @@ BLOCK_READ:
|
|||||||
INC B
|
INC B
|
||||||
DEC BC
|
DEC BC
|
||||||
DJNZ .loop1
|
DJNZ .loop1
|
||||||
|
;POP DE ; [ ] áâ à襥 á«®¢® ®¬¥à ª« áâ¥à (à ìè¥ ¨£®à¨à®¢ «®áì)
|
||||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||||
_SaveGetedCluster
|
_SaveGetedCluster
|
||||||
;
|
;
|
||||||
POP DE
|
POP DE ; ®áâ ⮪ DIV_for_SPC
|
||||||
POP BC
|
POP BC ; HL:DE - FP (in sectors)
|
||||||
LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||||
SUB E
|
SUB E
|
||||||
LD C,A ;\
|
LD C,A ;\
|
||||||
CP B ; \
|
CP B ; \
|
||||||
@ -680,7 +690,7 @@ BLOCK_READ:
|
|||||||
JR C,.Error
|
JR C,.Error
|
||||||
POP BC
|
POP BC
|
||||||
LD HL,(READ.PointerOnBuffer)
|
LD HL,(READ.PointerOnBuffer)
|
||||||
LD DE,(CORE_BUFFERS.BootSector.B_P_S)
|
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||||
;!TEST
|
;!TEST
|
||||||
LD A,B
|
LD A,B
|
||||||
LD B,C
|
LD B,C
|
||||||
@ -695,7 +705,7 @@ BLOCK_READ:
|
|||||||
RET Z
|
RET Z
|
||||||
LD B,A
|
LD B,A
|
||||||
;
|
;
|
||||||
.loop4: LD HL,CORE_BUFFERS.BootSector.S_P_C
|
.loop4: LD HL,CORE_BUFFERS.BootSector.SectorsPerCluster
|
||||||
LD A,B
|
LD A,B
|
||||||
SUB (HL)
|
SUB (HL)
|
||||||
LD B,A
|
LD B,A
|
||||||
@ -724,7 +734,7 @@ BLOCK_READ:
|
|||||||
JR C,.Error
|
JR C,.Error
|
||||||
POP BC
|
POP BC
|
||||||
LD HL,(READ.PointerOnBuffer)
|
LD HL,(READ.PointerOnBuffer)
|
||||||
LD DE,(CORE_BUFFERS.BootSector.B_P_S)
|
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||||
.loop3: ADD HL,DE
|
.loop3: ADD HL,DE
|
||||||
DEC C
|
DEC C
|
||||||
JR NZ,.loop3
|
JR NZ,.loop3
|
||||||
@ -759,7 +769,7 @@ BLOCK_READ:
|
|||||||
BLOK_WR:
|
BLOK_WR:
|
||||||
PUSH BC
|
PUSH BC
|
||||||
LD (READ.PointerOnBuffer),IX
|
LD (READ.PointerOnBuffer),IX
|
||||||
LD A,(CORE_BUFFERS.BootSector.S_P_C) ;SECTORS PER CLUSTER
|
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ;SECTORS PER CLUSTER
|
||||||
LD C,A
|
LD C,A
|
||||||
LD B,0
|
LD B,0
|
||||||
;HL:DE / BC => DE:IX HL-OSTATOK
|
;HL:DE / BC => DE:IX HL-OSTATOK
|
||||||
@ -820,7 +830,7 @@ BLOK_WR:
|
|||||||
;
|
;
|
||||||
POP DE
|
POP DE
|
||||||
POP BC
|
POP BC
|
||||||
LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||||
SUB E
|
SUB E
|
||||||
LD C,A
|
LD C,A
|
||||||
CP B
|
CP B
|
||||||
@ -846,7 +856,7 @@ BLOK_WR:
|
|||||||
JR C,.ErrorWrite
|
JR C,.ErrorWrite
|
||||||
POP BC
|
POP BC
|
||||||
LD HL,(READ.PointerOnBuffer)
|
LD HL,(READ.PointerOnBuffer)
|
||||||
LD DE,(CORE_BUFFERS.BootSector.B_P_S)
|
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||||
;
|
;
|
||||||
.loop2: ADD HL,DE
|
.loop2: ADD HL,DE
|
||||||
DEC C
|
DEC C
|
||||||
@ -860,7 +870,7 @@ BLOK_WR:
|
|||||||
RET Z
|
RET Z
|
||||||
;
|
;
|
||||||
.big_loop:
|
.big_loop:
|
||||||
LD HL,CORE_BUFFERS.BootSector.S_P_C
|
LD HL,CORE_BUFFERS.BootSector.SectorsPerCluster
|
||||||
LD A,B
|
LD A,B
|
||||||
SUB (HL)
|
SUB (HL)
|
||||||
LD B,A
|
LD B,A
|
||||||
@ -894,7 +904,7 @@ BLOK_WR:
|
|||||||
JR C,.ErrorWrite
|
JR C,.ErrorWrite
|
||||||
POP BC
|
POP BC
|
||||||
LD HL,(READ.PointerOnBuffer)
|
LD HL,(READ.PointerOnBuffer)
|
||||||
LD DE,(CORE_BUFFERS.BootSector.B_P_S)
|
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||||
.loop3: ADD HL,DE
|
.loop3: ADD HL,DE
|
||||||
DEC C
|
DEC C
|
||||||
JR NZ,.loop3
|
JR NZ,.loop3
|
||||||
@ -1050,7 +1060,7 @@ FAT_Max_Cluster_H: WORD #0000 ;
|
|||||||
; NSECTOR: DEC HL
|
; NSECTOR: DEC HL
|
||||||
; DEC HL
|
; DEC HL
|
||||||
; EX DE,HL
|
; EX DE,HL
|
||||||
; LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
; LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||||
; LD B,A
|
; LD B,A
|
||||||
; LD HL,0
|
; LD HL,0
|
||||||
; LD IX,0
|
; LD IX,0
|
||||||
@ -1058,7 +1068,7 @@ FAT_Max_Cluster_H: WORD #0000 ;
|
|||||||
; JR NC,ADD_DE2
|
; JR NC,ADD_DE2
|
||||||
; INC HL
|
; INC HL
|
||||||
; ADD_DE2: DJNZ ADD_DE1
|
; ADD_DE2: DJNZ ADD_DE1
|
||||||
; LD DE,(FatBuffer.DAT_FRL) ;first data sector
|
; LD DE,(FatBuffer.FirstDataSector_L) ;first data sector
|
||||||
; ADD IX,DE
|
; ADD IX,DE
|
||||||
; LD DE,#0000
|
; LD DE,#0000
|
||||||
; ADC HL,DE
|
; ADC HL,DE
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
;=======================================================================
|
;=======================================================================
|
||||||
;BPB
|
;BPB
|
||||||
;LD (FatBuffer.FAT2_SEC_L),HL
|
;LD (FatBuffer.FAT2_SEC_L),HL
|
||||||
;LD (FatBuffer.DIR_FRL),HL ; first sector DIR
|
;LD (FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
|
||||||
;BPB32
|
;BPB32
|
||||||
;LD HL,(CORE_BUFFERS.BootSector+#2C) ;fat32 <20>¥à¢ë© ª« áâ¥à ª®à¥¢®£® ª â «®£ (®¡ëç® 2) 4 ¡ ©â
|
;LD HL,(CORE_BUFFERS.BootSector+#2C) ;fat32 <20>¥à¢ë© ª« áâ¥à ª®à¥¢®£® ª â «®£ (®¡ëç® 2) 4 ¡ ©â
|
||||||
;FAT Max Cluster
|
;FAT Max Cluster
|
||||||
@ -31,7 +31,7 @@ CHECK_INC_HIGH_CLUSTER:
|
|||||||
ENDMODULE
|
ENDMODULE
|
||||||
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
;¢å®¤: DE:HL - ®¬¥à ª« áâ¥à
|
;¢å®¤: DE:HL - ®¬¥à ª« áâ¥à
|
||||||
;¢ë室: HL - ¤à¥á 㦮© ï祩ª¨ ¢ áâà ¨æ¥ FATPAGE
|
;¢ë室: HL - ¤à¥á 㦮© ï祩ª¨ ¢ áâà ¨æ¥ FATPAGE
|
||||||
GET_FAT32_CELL:
|
GET_FAT32_CELL:
|
||||||
@ -54,8 +54,7 @@ GET_FAT32_CELL:
|
|||||||
0xEAB1022 - block 0x1D562
|
0xEAB1022 - block 0x1D562
|
||||||
D E H
|
D E H
|
||||||
0xEAB10 >>> 0x1D562
|
0xEAB10 >>> 0x1D562
|
||||||
*/
|
[ ] fat32 ¤®¤¥« âì âãâ
|
||||||
|
|
||||||
LD A,H
|
LD A,H
|
||||||
LD B,H
|
LD B,H
|
||||||
AND #0F
|
AND #0F
|
||||||
@ -79,6 +78,8 @@ GET_FAT32_CELL:
|
|||||||
LD DE,FATPAGE.cache ; ç «® ª¥è FAT-
|
LD DE,FATPAGE.cache ; ç «® ª¥è FAT-
|
||||||
ADD HL,DE ; ï祩ªã FAT
|
ADD HL,DE ; ï祩ªã FAT
|
||||||
RET
|
RET
|
||||||
|
*/
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
/*
|
/*
|
||||||
; <20>à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-
|
; <20>à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-
|
||||||
|
|||||||
@ -161,6 +161,11 @@ EMOUSE: RES 7,C
|
|||||||
;!TODO ¡¨®á.
|
;!TODO ¡¨®á.
|
||||||
MS_INIT:
|
MS_INIT:
|
||||||
DI
|
DI
|
||||||
|
; ᪮à®áâì ¯®àâ - ¢â®à®© ¬®¦¨â¥«ì
|
||||||
|
LD A,#55
|
||||||
|
OUT (Z84.CTC.Ch_0),A
|
||||||
|
LD A,MOUSE_BAUD.multiplier_2
|
||||||
|
OUT (Z84.CTC.Ch_0),A
|
||||||
; reg 0
|
; reg 0
|
||||||
XOR A
|
XOR A
|
||||||
OUT (PORT_MOUSE.Ctrl),A
|
OUT (PORT_MOUSE.Ctrl),A
|
||||||
@ -199,11 +204,6 @@ MS_INIT:
|
|||||||
XOR A
|
XOR A
|
||||||
OUT (PORT_MOUSE.Ctrl),A
|
OUT (PORT_MOUSE.Ctrl),A
|
||||||
ENDIF
|
ENDIF
|
||||||
; ᪮à®áâì ¯®àâ - ¢â®à®© ¬®¦¨â¥«ì
|
|
||||||
LD A,#55
|
|
||||||
OUT (Z84.CTC.Ch_0),A
|
|
||||||
LD A,MOUSE_BAUD.multiplier_2
|
|
||||||
OUT (Z84.CTC.Ch_0),A
|
|
||||||
;
|
;
|
||||||
EI
|
EI
|
||||||
XOR A
|
XOR A
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
958
|
946
|
||||||
Loading…
Reference in New Issue
Block a user