mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-18 02:40:38 +03:00
82%
This commit is contained in:
parent
ada25b0fe1
commit
8448dbef48
@ -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
|
||||||
|
;
|
||||||
;
|
;
|
||||||
|
|||||||
@ -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 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
||||||
;
|
;
|
||||||
|
|||||||
@ -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 ; § ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user