mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-17 10:20:35 +03:00
82%
This commit is contained in:
parent
ada25b0fe1
commit
8448dbef48
@ -5,8 +5,9 @@
|
||||
;
|
||||
; ¢å®¤: A - ®¬¥à ¤¨áª (0=A,1=B .. 25=Z. #FF-⥪ã騩)
|
||||
; <09>ਠA bit7 = 1:
|
||||
; HL - ¡ãä¥à (256 ¡ ©â®¢) ¤«ï à áè¨à¥ëå ¤ ëå:
|
||||
; B != 0 - áç¨â âì ᢮¡®¤®¥ ¬¥áâ®
|
||||
; A and #7F - ®¬¥à ¤¨áª
|
||||
; HL - ¡ãä¥à (256 ¡ ©â®¢) ¤«ï à áè¨à¥ëå ¤ ëå:
|
||||
; B != 0 - áç¨â âì ᢮¡®¤®¥ ¬¥áâ®
|
||||
; ;
|
||||
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||||
; ” ©«®¢ ï á¨á⥬
|
||||
@ -23,134 +24,167 @@
|
||||
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||||
; § १¥à¢¨à®¢ ®
|
||||
; ;
|
||||
|
||||
; A and #7F - ®¬¥à ¤¨áª
|
||||
;
|
||||
; ¢ë室: A - à §¬¥à ª« áâ¥à ¢ ᥪâ®à å, ¥á«¨ CF=0
|
||||
; HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
|
||||
; DE - ᢮¡®¤ëå ª« áâ¥à®¢
|
||||
; BC - à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
||||
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||
; ¢ë室: CF=0:
|
||||
; A - à §¬¥à ª« áâ¥à ¢ ᥪâ®à å
|
||||
; HL':HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
|
||||
; DE':DE - ᢮¡®¤ëå ª« áâ¥à®¢
|
||||
; BC - à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
||||
; CF=1:
|
||||
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||
;/////////////////////////////////////////////////////////////////////
|
||||
DISKINF:; [ ] 22/11/23 ¯®¤äãªæ¨ï á ¤®¯.¨ä®©
|
||||
LD C,B
|
||||
LD B,1
|
||||
;
|
||||
CP #80
|
||||
JR C,.CustomDisk
|
||||
CP #FF
|
||||
JR Z,.CurrentDisk
|
||||
; more info
|
||||
LD B,C
|
||||
AND %0111'1111
|
||||
PUSH HL
|
||||
PUSH AF
|
||||
CALL .CustomDisk
|
||||
POP IX
|
||||
JR C,.error
|
||||
;
|
||||
EX (SP),HL
|
||||
PUSH DE
|
||||
PUSH AF
|
||||
PUSH BC
|
||||
;;;;
|
||||
;
|
||||
EX DE,HL
|
||||
LD HL,CORE_BUFFERS.BootSector.ID_FAT
|
||||
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_SECTOR_PARAMS.BPB_SERIAL_NUMBER
|
||||
CALL .mCOPY_LOOP
|
||||
;
|
||||
LD HL,CORE_BUFFERS.BootSector.BPB_LABEL
|
||||
LD A,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL
|
||||
CALL .mCOPY_LOOP
|
||||
;
|
||||
PUSH DE
|
||||
LD A,XH
|
||||
LD DE,Dss.DRV.GenIOCTL.Enter
|
||||
LD BC,Dss.DRV.GenIOCTL.GetParams
|
||||
RST ToDSS.DRV
|
||||
POP DE
|
||||
JR C,.error_drv
|
||||
LD A,2 ;!HARDCODE ¤«¨ ¯®«ï ü4 2 ¡ ©â : 䨧 ®¬¥à ¤¨áª , ®¬¥à à §¤¥« ¤¨áª
|
||||
LD (DE),A
|
||||
INC DE
|
||||
EX AF,AF'
|
||||
LD (DE),A ;䨧 ®¬¥à ¤¨áª
|
||||
INC DE
|
||||
LD A,C
|
||||
LD (DE),A ;®¬¥à à §¤¥« ¤¨áª
|
||||
INC DE
|
||||
;
|
||||
.error_drv:
|
||||
XOR A
|
||||
LD (DE),A
|
||||
;;;;
|
||||
POP BC
|
||||
POP AF
|
||||
POP DE
|
||||
.error: POP HL
|
||||
RET
|
||||
;
|
||||
|
||||
;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
|
||||
;
|
||||
DISKINF: LD C,B
|
||||
LD B,1
|
||||
;
|
||||
CP #80
|
||||
JR C,.CustomDisk
|
||||
CP #FF
|
||||
JR Z,.CurrentDisk
|
||||
; more info
|
||||
LD B,C
|
||||
AND %0111'1111
|
||||
PUSH HL
|
||||
PUSH AF
|
||||
CALL .CustomDisk
|
||||
POP IX
|
||||
JR C,.error
|
||||
;
|
||||
EX (SP),HL
|
||||
PUSH DE
|
||||
PUSH AF
|
||||
PUSH BC
|
||||
;;;;
|
||||
;
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x32
|
||||
;
|
||||
EX DE,HL
|
||||
LD HL,CORE_BUFFERS.BootSector.ID_FAT
|
||||
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
|
||||
;
|
||||
LD HL,CORE_BUFFERS.BootSector.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
|
||||
;
|
||||
LD HL,CORE_BUFFERS.BootSector.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
|
||||
; fat32
|
||||
EXX
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
EXX
|
||||
PUSH DE
|
||||
LD A,XH
|
||||
LD DE,Dss.DRV.GenIOCTL.Enter
|
||||
LD BC,Dss.DRV.GenIOCTL.GetParams
|
||||
RST ToDSS.DRV
|
||||
POP DE
|
||||
; fat32
|
||||
EXX
|
||||
POP HL
|
||||
POP DE
|
||||
EXX
|
||||
JR C,.error_drv
|
||||
LD A,2 ;!HARDCODE ¤«¨ ¯®«ï ü4 2 ¡ ©â : 䨧 ®¬¥à ¤¨áª , ®¬¥à à §¤¥« ¤¨áª
|
||||
LD (DE),A
|
||||
INC DE
|
||||
EX AF,AF'
|
||||
LD (DE),A ;䨧 ®¬¥à ¤¨áª
|
||||
INC DE
|
||||
LD A,C
|
||||
LD (DE),A ;®¬¥à à §¤¥« ¤¨áª
|
||||
INC DE
|
||||
;
|
||||
.error_drv: XOR A
|
||||
LD (DE),A
|
||||
;;;;
|
||||
POP BC
|
||||
POP AF
|
||||
POP DE
|
||||
.error: POP HL
|
||||
RET
|
||||
;
|
||||
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:
|
||||
XOR A
|
||||
OR B
|
||||
CALL NZ,.CURRDS
|
||||
;
|
||||
;.FRESP2:
|
||||
LD D,B
|
||||
LD E,C
|
||||
LD HL,(FatBuffer.MaxClusterLow)
|
||||
DEC HL
|
||||
LD BC,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
.CURRDS:
|
||||
LD HL,2
|
||||
LD BC,0
|
||||
.FRESP: PUSH BC
|
||||
; [ ] fat32
|
||||
CALL READ_FROM_FAT
|
||||
POP BC
|
||||
CP DSS_Error.sys.DISK_FULL
|
||||
RET Z
|
||||
|
||||
LD A,E
|
||||
OR D
|
||||
JR NZ,.skip
|
||||
INC BC
|
||||
.skip: INC HL
|
||||
JP .FRESP
|
||||
;
|
||||
; [ ] 22/11/23 ¯®¤äãªæ¨ï á ¤®¯.¨ä®©
|
||||
.mCOPY_LOOP:
|
||||
LD C,A
|
||||
LD B,0
|
||||
LD (DE),A
|
||||
INC DE
|
||||
LDIR
|
||||
RET
|
||||
;
|
||||
XOR A
|
||||
OR B
|
||||
CALL NZ,.GetFreeSpace
|
||||
;
|
||||
;.FRESP2:
|
||||
LD D,B
|
||||
LD E,C
|
||||
LD HL,(FatBuffer.MaxClusterLow)
|
||||
DEC HL
|
||||
; fat 32
|
||||
EXX
|
||||
LD HL,(FatBuffer.MaxClusterHigh)
|
||||
DEC HL
|
||||
EXX
|
||||
LD BC,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
.GetFreeSpace: XOR A
|
||||
LD HL,2 ; [ ] fat32 ? ®¬¥à ª« áâ¥à ®â ª®â®à®£® áç¨â âì
|
||||
; fat32
|
||||
EXX
|
||||
LD H,A
|
||||
LD L,A
|
||||
EXX
|
||||
LD B,A
|
||||
LD C,A
|
||||
.loop_free_space:
|
||||
PUSH BC
|
||||
CALL READ_FROM_FAT
|
||||
POP BC
|
||||
CP DSS_Error.sys.DISK_FULL
|
||||
RET Z
|
||||
; fat 32
|
||||
EXX
|
||||
LD A,E
|
||||
OR D
|
||||
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 B,0 ; BC - File handels in sectors
|
||||
;;;;
|
||||
LD (FatBuffer.FilesPerSector),A
|
||||
IF COMPILE_UNUSED_CODE
|
||||
LD (FatBuffer.FilesPerSector),A
|
||||
ENDIF
|
||||
;
|
||||
EX DE,HL
|
||||
LD HL,(CORE_BUFFERS.BootSector.FilesInRootDIR) ; 0 for fat32
|
||||
@ -723,15 +725,17 @@ RD_BPB: LD C,SLOT3
|
||||
.loop3.end:
|
||||
;
|
||||
LD (FatBuffer.BytesPerCluster),HL
|
||||
EX DE,HL
|
||||
LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize
|
||||
XOR A
|
||||
IF COMPILE_UNUSED_CODE
|
||||
EX DE,HL
|
||||
LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize
|
||||
XOR A
|
||||
;NEXTAD4 ;!FIXIT ®¯â¨¬¨§¨à®¢ âì ª®£¤ ¯® ¤®¡¨âáï
|
||||
.loop4: INC A
|
||||
JP Z,DOS_X_Error.UnknownBPB
|
||||
SBC HL,DE
|
||||
JR NC,.loop4
|
||||
LD (FatBuffer.ClustersPerBank),A ; A - Clusters per bank (16k)
|
||||
.loop4: INC A
|
||||
JP Z,DOS_X_Error.UnknownBPB
|
||||
SBC HL,DE
|
||||
JR NC,.loop4
|
||||
LD (FatBuffer.ClustersPerBank),A ; A - Clusters per bank (16k)
|
||||
ENDIF
|
||||
;
|
||||
;!TODO detect fat type by clusters!
|
||||
;[ ] fat32 reset fat32 variables
|
||||
@ -873,7 +877,6 @@ FatBuffer:
|
||||
.CacheBlock: DW #00
|
||||
.CacheUpdated: DB #00
|
||||
;.SectorsPerBank: DB #00
|
||||
.ClustersPerBank: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
||||
.RootDirStartCluster_L: DW #0000
|
||||
.RootDirStartCluster_H: DW #0000 ; [ ] fat32
|
||||
.FAT1_SEC_L: DW #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM)
|
||||
@ -884,15 +887,18 @@ FatBuffer:
|
||||
.SectorsPerFAT_H DB #00
|
||||
.RootDirFirstSector_H: DW #0000 ; MSD_CAT_SEC first sector DIR ; !TODO ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£ ;!FIXIT ¥ ¨á¯®«ì§ã¥âáï
|
||||
.RootDirFirstSector_L: DW #0000 ; MSD_CAT_SEC first sector DIR
|
||||
.FilesPerSector: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
||||
.DirSizeInSectors: DB #00 ; DIR_SEC_SIZE
|
||||
.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
|
||||
.ENDCLUS_LOW: DW #FFFF
|
||||
.ENDCLUS_HIGH: DW #0FFF ; [ ] fat3
|
||||
.MaxClusterLow: 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 ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
||||
;.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
||||
;
|
||||
|
||||
@ -1224,7 +1224,7 @@ SaveGotCluster: LD A,C
|
||||
; ‚室: HL - ¤à¥á ªã¤ ¯¨á âì
|
||||
; ‚ë室: HL - ¤à¥á á«¥¤ãî騩 ¯®á«¥ § ¯¨á ®£®
|
||||
WRITE_DATE_TIME_TO_DIRECTORY_RECORD:
|
||||
; [ ] fat32 & VFAT date
|
||||
; [ ] VFAT date
|
||||
PUSH HL
|
||||
CALL SYSTIME ; ã§ âì ⥪. ¤ âã ¨ ¢à¥¬ï
|
||||
CALL MK_TIME ; § ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||||
|
||||
Loading…
Reference in New Issue
Block a user