This commit is contained in:
Anatoliy Belyanskiy 2024-04-07 05:28:29 +10:00
parent ada25b0fe1
commit 8448dbef48
3 changed files with 183 additions and 143 deletions

View File

@ -5,6 +5,7 @@
; ;
; ¢å®¤: A - ­®¬¥à ¤¨áª  (0=A,1=B .. 25=Z. #FF-⥪ã騩) ; ¢å®¤: A - ­®¬¥à ¤¨áª  (0=A,1=B .. 25=Z. #FF-⥪ã騩)
; <09>ਠA bit7 = 1: ; <09>ਠA bit7 = 1:
; A and #7F - ­®¬¥à ¤¨áª 
; HL - ¡ãä¥à (256 ¡ ©â®¢) ¤«ï à áè¨à¥­­ëå ¤ ­­ëå: ; HL - ¡ãä¥à (256 ¡ ©â®¢) ¤«ï à áè¨à¥­­ëå ¤ ­­ëå:
; B != 0 - áç¨â âì ᢮¡®¤­®¥ ¬¥áâ® ; B != 0 - áç¨â âì ᢮¡®¤­®¥ ¬¥áâ®
; ; ; ;
@ -23,17 +24,15 @@
; à §¬¥à ¯®«ï - 1 ¡ ©â ; à §¬¥à ¯®«ï - 1 ¡ ©â
; § à¥§¥à¢¨à®¢ ­® ; § à¥§¥à¢¨à®¢ ­®
; ; ; ;
; ¢ë室: CF=0:
; A and #7F - ­®¬¥à ¤¨áª  ; A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
; ; HL':HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
; ¢ë室: A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å, ¥á«¨ CF=0 ; DE':DE - ᢮¡®¤­ëå ª« áâ¥à®¢
; HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
; DE - ᢮¡®¤­ëå ª« áâ¥à®¢
; BC - à §¬¥à ᥪâ®à  ¢ ¡ ©â å ; BC - à §¬¥à ᥪâ®à  ¢ ¡ ©â å
; CF=1:
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1 ; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
;///////////////////////////////////////////////////////////////////// ;/////////////////////////////////////////////////////////////////////
DISKINF:; [ ] 22/11/23 ¯®¤äã­ªæ¨ï á ¤®¯.¨­ä®© DISKINF: LD C,B
LD C,B
LD B,1 LD B,1
; ;
CP #80 CP #80
@ -55,25 +54,43 @@ DISKINF:; [ ] 22/11/23
PUSH BC PUSH BC
;;;; ;;;;
; ;
LD A,(FatBuffer.FAT_TYPE)
CP FAT_TYPE.x32
;
EX DE,HL EX DE,HL
LD HL,CORE_BUFFERS.BootSector.ID_FAT LD HL,CORE_BUFFERS.BootSector.ID_FAT
LD A,8 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length JR NZ,1F
LD HL,CORE_BUFFERS.BootSector + _sBOOT_SECTOR_PARAMS_FAT32.ID_FAT
1: LD C,8 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length
CALL .mCOPY_LOOP CALL .mCOPY_LOOP
; ;
LD HL,CORE_BUFFERS.BootSector.BPB_SERIAL_NUMBER LD HL,CORE_BUFFERS.BootSector.BPB_SERIAL_NUMBER
LD A,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER JR NZ,1F
LD HL,CORE_BUFFERS.BootSector + _sBOOT_SECTOR_PARAMS_FAT32.BPB_SERIAL_NUMBER
1: LD C,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER
CALL .mCOPY_LOOP CALL .mCOPY_LOOP
; ;
LD HL,CORE_BUFFERS.BootSector.BPB_LABEL LD HL,CORE_BUFFERS.BootSector.BPB_LABEL
LD A,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL JR NZ,1F
LD HL,CORE_BUFFERS.BootSector + _sBOOT_SECTOR_PARAMS_FAT32.BPB_LABEL
1: LD C,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL
CALL .mCOPY_LOOP CALL .mCOPY_LOOP
; ; fat32
EXX
PUSH DE
PUSH HL
EXX
PUSH DE PUSH DE
LD A,XH LD A,XH
LD DE,Dss.DRV.GenIOCTL.Enter LD DE,Dss.DRV.GenIOCTL.Enter
LD BC,Dss.DRV.GenIOCTL.GetParams LD BC,Dss.DRV.GenIOCTL.GetParams
RST ToDSS.DRV RST ToDSS.DRV
POP DE POP DE
; fat32
EXX
POP HL
POP DE
EXX
JR C,.error_drv JR C,.error_drv
LD A,2 ;!HARDCODE ¤«¨­  ¯®«ï ü4 2 ¡ ©â : 䨧 ­®¬¥à ¤¨áª , ­®¬¥à à §¤¥«  ¤¨áª  LD A,2 ;!HARDCODE ¤«¨­  ¯®«ï ü4 2 ¡ ©â : 䨧 ­®¬¥à ¤¨áª , ­®¬¥à à §¤¥«  ¤¨áª 
LD (DE),A LD (DE),A
@ -85,8 +102,7 @@ DISKINF:; [ ] 22/11/23
LD (DE),A ;­®¬¥à à §¤¥«  ¤¨áª  LD (DE),A ;­®¬¥à à §¤¥«  ¤¨áª 
INC DE INC DE
; ;
.error_drv: .error_drv: XOR A
XOR A
LD (DE),A LD (DE),A
;;;; ;;;;
POP BC POP BC
@ -95,19 +111,16 @@ DISKINF:; [ ] 22/11/23
.error: POP HL .error: POP HL
RET RET
; ;
CP #FF ; !FIXIT WorkDirectory
;CP #FF ; !FIXIT WorkDirectory
;!TEST Current Dir ;!TEST Current Dir
;JR Z,CURRDS ;R06 ;JR Z,CURRDS ;R06
.CurrentDisk: .CurrentDisk: LD A,(CurrentPath)
LD A,(CurrentPath)
SUB 'A' SUB 'A'
LD HL,FatBuffer.DRIVE LD HL,FatBuffer.DRIVE
CP (HL) CP (HL)
JR Z,.CheckFreeSpace JR Z,.CheckFreeSpace
; ;
.CustomDisk: .CustomDisk: PUSH BC
PUSH BC
CALL CHNDISK ;R06 CALL CHNDISK ;R06
POP BC POP BC
RET C RET C
@ -115,40 +128,61 @@ DISKINF:; [ ] 22/11/23
.CheckFreeSpace: .CheckFreeSpace:
XOR A XOR A
OR B OR B
CALL NZ,.CURRDS CALL NZ,.GetFreeSpace
; ;
;.FRESP2: ;.FRESP2:
LD D,B LD D,B
LD E,C LD E,C
LD HL,(FatBuffer.MaxClusterLow) LD HL,(FatBuffer.MaxClusterLow)
DEC HL DEC HL
; fat 32
EXX
LD HL,(FatBuffer.MaxClusterHigh)
DEC HL
EXX
LD BC,(CORE_BUFFERS.BootSector.BytesPerSector) LD BC,(CORE_BUFFERS.BootSector.BytesPerSector)
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
AND A AND A
RET RET
; ;
.CURRDS: .GetFreeSpace: XOR A
LD HL,2 LD HL,2 ; [ ] fat32 ? ­®¬¥à ª« áâ¥à  ®â ª®â®à®£® áç¨â âì
LD BC,0 ; fat32
.FRESP: PUSH BC EXX
; [ ] fat32 LD H,A
LD L,A
EXX
LD B,A
LD C,A
.loop_free_space:
PUSH BC
CALL READ_FROM_FAT CALL READ_FROM_FAT
POP BC POP BC
CP DSS_Error.sys.DISK_FULL CP DSS_Error.sys.DISK_FULL
RET Z RET Z
; fat 32
EXX
LD A,E LD A,E
OR D OR D
EXX
OR E
OR D
JR NZ,.skip JR NZ,.skip
INC BC INC BC
LD A,B
OR C
JR NZ,.skip
EXX
INC BC
EXX
.skip: INC HL .skip: INC HL
JP .FRESP JR .loop_free_space
; ;
; [ ] 22/11/23 ¯®¤äã­ªæ¨ï á ¤®¯.¨­ä®© ; [ ] 22/11/23 ¯®¤äã­ªæ¨ï á ¤®¯.¨­ä®©
.mCOPY_LOOP: .mCOPY_LOOP: LD B,0
LD C,A EX DE,HL
LD B,0 LD (HL),C
LD (DE),A EX DE,HL
INC DE INC DE
LDIR LDIR
RET RET

View File

@ -690,7 +690,9 @@ RD_BPB: LD C,SLOT3
LD C,A LD C,A
LD B,0 ; BC - File handels in sectors LD B,0 ; BC - File handels in sectors
;;;; ;;;;
IF COMPILE_UNUSED_CODE
LD (FatBuffer.FilesPerSector),A LD (FatBuffer.FilesPerSector),A
ENDIF
; ;
EX DE,HL EX DE,HL
LD HL,(CORE_BUFFERS.BootSector.FilesInRootDIR) ; 0 for fat32 LD HL,(CORE_BUFFERS.BootSector.FilesInRootDIR) ; 0 for fat32
@ -723,6 +725,7 @@ RD_BPB: LD C,SLOT3
.loop3.end: .loop3.end:
; ;
LD (FatBuffer.BytesPerCluster),HL LD (FatBuffer.BytesPerCluster),HL
IF COMPILE_UNUSED_CODE
EX DE,HL EX DE,HL
LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize
XOR A XOR A
@ -732,6 +735,7 @@ RD_BPB: LD C,SLOT3
SBC HL,DE SBC HL,DE
JR NC,.loop4 JR NC,.loop4
LD (FatBuffer.ClustersPerBank),A ; A - Clusters per bank (16k) LD (FatBuffer.ClustersPerBank),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
@ -873,7 +877,6 @@ FatBuffer:
.CacheBlock: DW #00 .CacheBlock: DW #00
.CacheUpdated: DB #00 .CacheUpdated: DB #00
;.SectorsPerBank: DB #00 ;.SectorsPerBank: DB #00
.ClustersPerBank: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï?
.RootDirStartCluster_L: DW #0000 .RootDirStartCluster_L: DW #0000
.RootDirStartCluster_H: DW #0000 ; [ ] fat32 .RootDirStartCluster_H: DW #0000 ; [ ] fat32
.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)
@ -884,15 +887,18 @@ FatBuffer:
.SectorsPerFAT_H DB #00 .SectorsPerFAT_H DB #00
.RootDirFirstSector_H: DW #0000 ; MSD_CAT_SEC first sector DIR ; !TODO ®£à ­¨ç¥­¨¥ ¢ 32 ƒ¨£  ;!FIXIT ­¥ ¨á¯®«ì§ã¥âáï .RootDirFirstSector_H: DW #0000 ; MSD_CAT_SEC first sector DIR ; !TODO ®£à ­¨ç¥­¨¥ ¢ 32 ƒ¨£  ;!FIXIT ­¥ ¨á¯®«ì§ã¥âáï
.RootDirFirstSector_L: DW #0000 ; MSD_CAT_SEC first sector DIR .RootDirFirstSector_L: DW #0000 ; MSD_CAT_SEC first sector DIR
.FilesPerSector: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
.DirSizeInSectors: DB #00 ; DIR_SEC_SIZE .DirSizeInSectors: DB #00 ; DIR_SEC_SIZE
.FirstDataSector_L: DW #0000 ; MSD_DAT_SEC low .FirstDataSector_L: DW #0000 ; MSD_DAT_SEC low
.FirstDataSector_H: DW #0000 ; MSD_DAT_SEC high ; !TODO ®£à ­¨ç¥­¨¥ ¢ 32 ƒ¨£  ; [ ] fat32 .FirstDataSector_H: DW #0000 ; MSD_DAT_SEC high ; [ ] fat32 ¡ë«® ®£à ­¨ç¥­¨¥ ¢ 32 ƒ¨£ 
.BytesPerCluster: DW #0000 ; CLUSTER_LEN .BytesPerCluster: DW #0000 ; CLUSTER_LEN
.ENDCLUS_LOW: DW #FFFF .ENDCLUS_LOW: DW #FFFF
.ENDCLUS_HIGH: DW #0FFF ; [ ] fat3 .ENDCLUS_HIGH: DW #0FFF ; [ ] fat3
.MaxClusterLow: DW #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.) .MaxClusterLow: DW #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
.MaxClusterHigh: DW #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.) .MaxClusterHigh: DW #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
IF COMPILE_UNUSED_CODE
.FilesPerSector: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
.ClustersPerBank: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï?
ENDIF
;.READ_PG: DB #00 ;!TODO ­¥ ¨á¯®«ì§ãîâáï ­¥ª®â®àë¥ §­ ç¥­¨ï, ­® § ¤ã¬ª  ­¥¯«®å ï))) ;.READ_PG: DB #00 ;!TODO ­¥ ¨á¯®«ì§ãîâáï ­¥ª®â®àë¥ §­ ç¥­¨ï, ­® § ¤ã¬ª  ­¥¯«®å ï)))
;.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  樫¨­¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï? ;.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  樫¨­¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
; ;

View File

@ -1224,7 +1224,7 @@ SaveGotCluster: LD A,C
; ‚室: HL -  ¤à¥á ªã¤  ¯¨á âì ; ‚室: HL -  ¤à¥á ªã¤  ¯¨á âì
; ‚ë室: HL -  ¤à¥á á«¥¤ãî騩 ¯®á«¥ § ¯¨á ­®£® ; ‚ë室: HL -  ¤à¥á á«¥¤ãî騩 ¯®á«¥ § ¯¨á ­®£®
WRITE_DATE_TIME_TO_DIRECTORY_RECORD: WRITE_DATE_TIME_TO_DIRECTORY_RECORD:
; [ ] fat32 & VFAT date ; [ ] VFAT date
PUSH HL PUSH HL
CALL SYSTIME ; ã§­ âì ⥪. ¤ âã ¨ ¢à¥¬ï CALL SYSTIME ; ã§­ âì ⥪. ¤ âã ¨ ¢à¥¬ï
CALL MK_TIME ; § ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã CALL MK_TIME ; § ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã