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,8 +5,9 @@
; ;
; ¢å®¤: A - ­®¬¥à ¤¨áª  (0=A,1=B .. 25=Z. #FF-⥪ã騩) ; ¢å®¤: A - ­®¬¥à ¤¨áª  (0=A,1=B .. 25=Z. #FF-⥪ã騩)
; <09>ਠA bit7 = 1: ; <09>ਠA bit7 = 1:
; HL - ¡ãä¥à (256 ¡ ©â®¢) ¤«ï à áè¨à¥­­ëå ¤ ­­ëå: ; A and #7F - ­®¬¥à ¤¨áª 
; B != 0 - áç¨â âì ᢮¡®¤­®¥ ¬¥áâ® ; HL - ¡ãä¥à (256 ¡ ©â®¢) ¤«ï à áè¨à¥­­ëå ¤ ­­ëå:
; B != 0 - áç¨â âì ᢮¡®¤­®¥ ¬¥áâ®
; ; ; ;
; à §¬¥à ¯®«ï - 1 ¡ ©â ; à §¬¥à ¯®«ï - 1 ¡ ©â
; ” ©«®¢ ï á¨á⥬  ; ” ©«®¢ ï á¨á⥬ 
@ -23,134 +24,167 @@
; à §¬¥à ¯®«ï - 1 ¡ ©â ; à §¬¥à ¯®«ï - 1 ¡ ©â
; § à¥§¥à¢¨à®¢ ­® ; § à¥§¥à¢¨à®¢ ­®
; ; ; ;
; ¢ë室: CF=0:
; A and #7F - ­®¬¥à ¤¨áª  ; A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
; ; HL':HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
; ¢ë室: A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å, ¥á«¨ CF=0 ; DE':DE - ᢮¡®¤­ëå ª« áâ¥à®¢
; HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢ ; BC - à §¬¥à ᥪâ®à  ¢ ¡ ©â å
; DE - ᢮¡®¤­ëå ª« áâ¥à®¢ ; CF=1:
; BC - à §¬¥à ᥪâ®à  ¢ ¡ ©â å ; 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 JR C,.CustomDisk
JR C,.CustomDisk CP #FF
CP #FF JR Z,.CurrentDisk
JR Z,.CurrentDisk ; more info
; more info LD B,C
LD B,C AND %0111'1111
AND %0111'1111 PUSH HL
PUSH HL PUSH AF
PUSH AF CALL .CustomDisk
CALL .CustomDisk POP IX
POP IX JR C,.error
JR C,.error ;
; EX (SP),HL
EX (SP),HL PUSH DE
PUSH DE PUSH AF
PUSH AF PUSH BC
PUSH BC ;;;;
;;;; ;
; LD A,(FatBuffer.FAT_TYPE)
EX DE,HL CP FAT_TYPE.x32
LD HL,CORE_BUFFERS.BootSector.ID_FAT ;
LD A,8 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length EX DE,HL
CALL .mCOPY_LOOP LD HL,CORE_BUFFERS.BootSector.ID_FAT
; JR NZ,1F
LD HL,CORE_BUFFERS.BootSector.BPB_SERIAL_NUMBER LD HL,CORE_BUFFERS.BootSector + _sBOOT_SECTOR_PARAMS_FAT32.ID_FAT
LD A,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER 1: LD C,8 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length
CALL .mCOPY_LOOP CALL .mCOPY_LOOP
; ;
LD HL,CORE_BUFFERS.BootSector.BPB_LABEL LD HL,CORE_BUFFERS.BootSector.BPB_SERIAL_NUMBER
LD A,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL JR NZ,1F
CALL .mCOPY_LOOP LD HL,CORE_BUFFERS.BootSector + _sBOOT_SECTOR_PARAMS_FAT32.BPB_SERIAL_NUMBER
; 1: LD C,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER
PUSH DE CALL .mCOPY_LOOP
LD A,XH ;
LD DE,Dss.DRV.GenIOCTL.Enter LD HL,CORE_BUFFERS.BootSector.BPB_LABEL
LD BC,Dss.DRV.GenIOCTL.GetParams JR NZ,1F
RST ToDSS.DRV LD HL,CORE_BUFFERS.BootSector + _sBOOT_SECTOR_PARAMS_FAT32.BPB_LABEL
POP DE 1: LD C,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL
JR C,.error_drv CALL .mCOPY_LOOP
LD A,2 ;!HARDCODE ¤«¨­  ¯®«ï ü4 2 ¡ ©â : 䨧 ­®¬¥à ¤¨áª , ­®¬¥à à §¤¥«  ¤¨áª  ; fat32
LD (DE),A EXX
INC DE PUSH DE
EX AF,AF' PUSH HL
LD (DE),A ;䨧 ­®¬¥à ¤¨áª  EXX
INC DE PUSH DE
LD A,C LD A,XH
LD (DE),A ;­®¬¥à à §¤¥«  ¤¨áª  LD DE,Dss.DRV.GenIOCTL.Enter
INC DE LD BC,Dss.DRV.GenIOCTL.GetParams
; RST ToDSS.DRV
.error_drv: POP DE
XOR A ; fat32
LD (DE),A EXX
;;;; POP HL
POP BC POP DE
POP AF EXX
POP DE JR C,.error_drv
.error: POP HL LD A,2 ;!HARDCODE ¤«¨­  ¯®«ï ü4 2 ¡ ©â : 䨧 ­®¬¥à ¤¨áª , ­®¬¥à à §¤¥«  ¤¨áª 
RET LD (DE),A
; INC DE
EX AF,AF'
;CP #FF ; !FIXIT WorkDirectory LD (DE),A ;䨧 ­®¬¥à ¤¨áª 
;!TEST Current Dir INC DE
;JR Z,CURRDS ;R06 LD A,C
.CurrentDisk: LD (DE),A ;­®¬¥à à §¤¥«  ¤¨áª 
LD A,(CurrentPath) INC DE
SUB 'A' ;
LD HL,FatBuffer.DRIVE .error_drv: XOR A
CP (HL) LD (DE),A
JR Z,.CheckFreeSpace ;;;;
; POP BC
.CustomDisk: POP AF
PUSH BC POP DE
CALL CHNDISK ;R06 .error: POP HL
POP BC RET
RET C ;
; CP #FF ; !FIXIT WorkDirectory
;!TEST Current Dir
;JR Z,CURRDS ;R06
.CurrentDisk: LD A,(CurrentPath)
SUB 'A'
LD HL,FatBuffer.DRIVE
CP (HL)
JR Z,.CheckFreeSpace
;
.CustomDisk: PUSH BC
CALL CHNDISK ;R06
POP BC
RET C
;
.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
LD BC,(CORE_BUFFERS.BootSector.BytesPerSector) ; fat 32
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) EXX
AND A LD HL,(FatBuffer.MaxClusterHigh)
RET DEC HL
; EXX
.CURRDS: LD BC,(CORE_BUFFERS.BootSector.BytesPerSector)
LD HL,2 LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
LD BC,0 AND A
.FRESP: PUSH BC RET
; [ ] fat32 ;
CALL READ_FROM_FAT .GetFreeSpace: XOR A
POP BC LD HL,2 ; [ ] fat32 ? ­®¬¥à ª« áâ¥à  ®â ª®â®à®£® áç¨â âì
CP DSS_Error.sys.DISK_FULL ; fat32
RET Z EXX
LD H,A
LD A,E LD L,A
OR D EXX
JR NZ,.skip LD B,A
INC BC LD C,A
.skip: INC HL .loop_free_space:
JP .FRESP PUSH BC
; CALL READ_FROM_FAT
; [ ] 22/11/23 ¯®¤äã­ªæ¨ï á ¤®¯.¨­ä®© POP BC
.mCOPY_LOOP: CP DSS_Error.sys.DISK_FULL
LD C,A RET Z
LD B,0 ; fat 32
LD (DE),A EXX
INC DE LD A,E
LDIR OR D
RET EXX
; OR E
OR D
JR NZ,.skip
INC BC
LD A,B
OR C
JR NZ,.skip
EXX
INC BC
EXX
.skip: INC HL
JR .loop_free_space
;
; [ ] 22/11/23 ¯®¤äã­ªæ¨ï á ¤®¯.¨­ä®©
.mCOPY_LOOP: LD B,0
EX DE,HL
LD (HL),C
EX DE,HL
INC DE
LDIR
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
;;;; ;;;;
LD (FatBuffer.FilesPerSector),A IF COMPILE_UNUSED_CODE
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,15 +725,17 @@ RD_BPB: LD C,SLOT3
.loop3.end: .loop3.end:
; ;
LD (FatBuffer.BytesPerCluster),HL LD (FatBuffer.BytesPerCluster),HL
EX DE,HL IF COMPILE_UNUSED_CODE
LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize EX DE,HL
XOR A LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize
XOR A
;NEXTAD4 ;!FIXIT ®¯â¨¬¨§¨à®¢ âì ª®£¤  ¯®­ ¤®¡¨âáï ;NEXTAD4 ;!FIXIT ®¯â¨¬¨§¨à®¢ âì ª®£¤  ¯®­ ¤®¡¨âáï
.loop4: INC A .loop4: INC A
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.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 ; § ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã