mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
CORE: начал делать FSinfo free clusters count
SHELL: команда DIR правильно определяет размеры
This commit is contained in:
parent
ebeb859eb1
commit
a904026a45
@ -130,28 +130,48 @@ DISKINF: LD C,B
|
|||||||
POP BC
|
POP BC
|
||||||
RET C
|
RET C
|
||||||
;
|
;
|
||||||
.CheckFreeSpace:
|
.CheckFreeSpace:; ¥á«¨ GetFreeSpace ¥ ¢ë§ë¢ ¥âáï
|
||||||
XOR A
|
XOR A
|
||||||
OR B
|
OR B
|
||||||
|
LD A,#FF
|
||||||
|
LD B,A
|
||||||
|
LD C,A
|
||||||
|
EXX
|
||||||
|
LD B,A
|
||||||
|
LD C,A
|
||||||
|
EXX
|
||||||
CALL NZ,.GetFreeSpace
|
CALL NZ,.GetFreeSpace
|
||||||
;
|
;
|
||||||
;.FRESP2:
|
;.FRESP2:
|
||||||
LD D,B
|
; A = 0 if B != 0 before .GetFreeSpace
|
||||||
LD E,C
|
;
|
||||||
|
LD H,B
|
||||||
|
LD L,C
|
||||||
|
; LD DE,2
|
||||||
|
; SBC HL,DE
|
||||||
|
EX DE,HL
|
||||||
|
EXX
|
||||||
|
LD H,B
|
||||||
|
LD L,C
|
||||||
|
; LD DE,2
|
||||||
|
; SBC HL,DE
|
||||||
|
EX DE,HL
|
||||||
|
EXX
|
||||||
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
|
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
|
||||||
DEC HL
|
DEC HL
|
||||||
; fat 32
|
; fat 32
|
||||||
EXX
|
EXX
|
||||||
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterHigh)
|
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterHigh)
|
||||||
|
JR NC,.skip_dec_hl
|
||||||
DEC HL
|
DEC HL
|
||||||
EXX
|
.skip_dec_hl: EXX
|
||||||
LD BC,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
LD BC,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.GetFreeSpace: XOR A
|
.GetFreeSpace: XOR A
|
||||||
LD HL,2 ; [ ] fat32 ? ®¬¥à ª« áâ¥à ®â ª®â®à®£® áç¨â âì
|
LD HL,2 ; fat32 ®¬¥à ª« áâ¥à ®â ª®â®à®£® áç¨â âì
|
||||||
; fat32
|
; fat32
|
||||||
EXX
|
EXX
|
||||||
LD H,A
|
LD H,A
|
||||||
@ -181,6 +201,7 @@ DISKINF: LD C,B
|
|||||||
OR E
|
OR E
|
||||||
OR D
|
OR D
|
||||||
JR NZ,.skip
|
JR NZ,.skip
|
||||||
|
;
|
||||||
INC BC
|
INC BC
|
||||||
LD A,B
|
LD A,B
|
||||||
OR C
|
OR C
|
||||||
@ -188,6 +209,7 @@ DISKINF: LD C,B
|
|||||||
EXX
|
EXX
|
||||||
INC BC
|
INC BC
|
||||||
EXX
|
EXX
|
||||||
|
;
|
||||||
.skip: INC HL
|
.skip: INC HL
|
||||||
LD A,L
|
LD A,L
|
||||||
OR H
|
OR H
|
||||||
@ -195,7 +217,7 @@ DISKINF: LD C,B
|
|||||||
EXX
|
EXX
|
||||||
INC HL
|
INC HL
|
||||||
EXX
|
EXX
|
||||||
JR .loop_free_space
|
JP .loop_free_space
|
||||||
;
|
;
|
||||||
; [ ] 22/11/23 ¯®¤äãªæ¨ï á ¤®¯.¨ä®©
|
; [ ] 22/11/23 ¯®¤äãªæ¨ï á ¤®¯.¨ä®©
|
||||||
.mCOPY_LOOP: LD B,0
|
.mCOPY_LOOP: LD B,0
|
||||||
|
|||||||
@ -12,16 +12,22 @@
|
|||||||
|
|
||||||
; á¡à áë¢ ¥â § 票¥ ᢮¡®¤ëå ª« áâ¥à®¢ "¥®¯à¥¤¥«¥®"
|
; á¡à áë¢ ¥â § 票¥ ᢮¡®¤ëå ª« áâ¥à®¢ "¥®¯à¥¤¥«¥®"
|
||||||
; ¬¥ï¥â § 票¥ ¯¥à¢®£® ᢮¡®¤®£® ª« áâ¥à
|
; ¬¥ï¥â § 票¥ ¯¥à¢®£® ᢮¡®¤®£® ª« áâ¥à
|
||||||
SET_FSInfo: LD A,(CORE_BUFFERS.FatBuffer.RESET_FSINFO)
|
SET_FSInfo: LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||||
|
CP FAT_TYPE.x32
|
||||||
|
RET NZ
|
||||||
|
;
|
||||||
|
LD A,(CORE_BUFFERS.FatBuffer.UPD_FSINFO)
|
||||||
OR A
|
OR A
|
||||||
RET Z
|
RET Z
|
||||||
;
|
;
|
||||||
|
;!TODO ä®à¬¨à®¢ âì á ¬®¬ã ¢ ¡ãä¥à
|
||||||
CALL READ_FSinfo
|
CALL READ_FSinfo
|
||||||
;
|
;
|
||||||
;!TODO FREE_CLUSTERS_COUNT
|
;!TODO FREE_CLUSTERS_COUNT
|
||||||
LD HL,#FFFF
|
LD HL,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L)
|
||||||
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER),HL
|
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT),HL
|
||||||
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER+2),HL
|
LD HL,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H)
|
||||||
|
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT+2),HL
|
||||||
; FIRST_FREE_CLUSTER
|
; FIRST_FREE_CLUSTER
|
||||||
LD HL,(G_CLUST.low)
|
LD HL,(G_CLUST.low)
|
||||||
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER),HL
|
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER),HL
|
||||||
@ -29,7 +35,7 @@ SET_FSInfo: LD A,(CORE_BUFFERS.FatBuffer.RESET_FSINFO)
|
|||||||
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER+2),HL
|
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER+2),HL
|
||||||
;
|
;
|
||||||
XOR A
|
XOR A
|
||||||
LD (CORE_BUFFERS.FatBuffer.RESET_FSINFO),A
|
LD (CORE_BUFFERS.FatBuffer.UPD_FSINFO),A
|
||||||
JR WRITE_FSinfo
|
JR WRITE_FSinfo
|
||||||
; ;
|
; ;
|
||||||
; <20>à®ç¨â âì BPB ¢ SECTOR_BUFFER
|
; <20>à®ç¨â âì BPB ¢ SECTOR_BUFFER
|
||||||
@ -831,7 +837,7 @@ RD_BPB: ; LD C,SLOT3
|
|||||||
PUSH HL ; Total Sectors low
|
PUSH HL ; Total Sectors low
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
;
|
;
|
||||||
.HDDBIG: CALL ClusterToSector
|
.HDDBIG: CALL SectorToCluster
|
||||||
; LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
; LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||||
; SCF
|
; SCF
|
||||||
; .loop7: RRA
|
; .loop7: RRA
|
||||||
@ -938,8 +944,8 @@ RD_BPB: ; LD C,SLOT3
|
|||||||
LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_L),HL
|
LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_L),HL
|
||||||
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.RootDirStartCluster+2)
|
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.RootDirStartCluster+2)
|
||||||
LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_H),BC
|
LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_H),BC
|
||||||
|
;
|
||||||
CALL ClusterToSector
|
CALL CLUSTER_TO_SECTOR
|
||||||
LD (CORE_BUFFERS.FatBuffer.RootDirFirstSector_L),HL
|
LD (CORE_BUFFERS.FatBuffer.RootDirFirstSector_L),HL
|
||||||
LD (CORE_BUFFERS.FatBuffer.RootDirFirstSector_H),BC
|
LD (CORE_BUFFERS.FatBuffer.RootDirFirstSector_H),BC
|
||||||
;
|
;
|
||||||
@ -1007,7 +1013,7 @@ RD_BPB: ; LD C,SLOT3
|
|||||||
DJNZ .fsinfo_loop
|
DJNZ .fsinfo_loop
|
||||||
;
|
;
|
||||||
.error_sig: XOR #FF
|
.error_sig: XOR #FF
|
||||||
LD (CORE_BUFFERS.FatBuffer.RESET_FSINFO),A
|
LD (CORE_BUFFERS.FatBuffer.UPD_FSINFO),A
|
||||||
;
|
;
|
||||||
XOR A
|
XOR A
|
||||||
LD H,A
|
LD H,A
|
||||||
@ -1030,27 +1036,32 @@ RD_BPB: ; LD C,SLOT3
|
|||||||
LD DE,#6141
|
LD DE,#6141
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JR NZ,.error
|
JR NZ,.error
|
||||||
; FIRST_FREE_CLUSTER
|
;!TODO FREE_CLUSTERS_COUNT
|
||||||
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER+2)
|
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT)
|
||||||
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER)
|
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT+2)
|
||||||
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
|
|
||||||
; CF = 0
|
; CF = 0
|
||||||
;!TODO MaxCluster - ¬ ªá¨¬ «ì® ¤®¯ãáâ¨¬ë© ¨«¨ 1 ¡®«ìè¥ ¬ ªá¨¬ «ì® ¤®¯ãá⨬®£®?
|
CALL .check_cluster
|
||||||
SBC HL,BC
|
JR NC,.skip_FFFF
|
||||||
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterHigh)
|
;
|
||||||
SBC HL,DE
|
LD B,#FF
|
||||||
|
LD C,B
|
||||||
|
LD D,B
|
||||||
|
LD E,B
|
||||||
|
;
|
||||||
|
.skip_FFFF: LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),BC
|
||||||
|
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),DE
|
||||||
|
;
|
||||||
|
; FIRST_FREE_CLUSTER
|
||||||
|
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER)
|
||||||
|
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER+2)
|
||||||
|
; CF = 0
|
||||||
|
CALL .check_cluster
|
||||||
JR C,.error
|
JR C,.error
|
||||||
;
|
;
|
||||||
LD (G_CLUST.high),DE
|
LD (G_CLUST.high),DE
|
||||||
LD (G_CLUST.low),BC
|
LD (G_CLUST.low),BC
|
||||||
;!TODO FREE_CLUSTERS_COUNT
|
|
||||||
;LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT)
|
|
||||||
;LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
|
|
||||||
;LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT+2)
|
|
||||||
;LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
|
|
||||||
;
|
|
||||||
XOR A
|
XOR A
|
||||||
.error: LD (CORE_BUFFERS.FatBuffer.RESET_FSINFO),A
|
.error: LD (CORE_BUFFERS.FatBuffer.UPD_FSINFO),A
|
||||||
RET Z
|
RET Z
|
||||||
;!TODO FREE_CLUSTERS_COUNT
|
;!TODO FREE_CLUSTERS_COUNT
|
||||||
;LD HL,#FFFF
|
;LD HL,#FFFF
|
||||||
@ -1064,12 +1075,19 @@ RD_BPB: ; LD C,SLOT3
|
|||||||
LD L,H
|
LD L,H
|
||||||
LD (G_CLUST.high),HL
|
LD (G_CLUST.high),HL
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
|
;!TODO MaxCluster - ¬ ªá¨¬ «ì® ¤®¯ãáâ¨¬ë© ¨«¨ 1 ¡®«ìè¥ ¬ ªá¨¬ «ì® ¤®¯ãá⨬®£®?
|
||||||
|
.check_cluster: LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
|
||||||
|
SBC HL,BC
|
||||||
|
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterHigh)
|
||||||
|
SBC HL,DE
|
||||||
|
RET
|
||||||
ENDIF
|
ENDIF
|
||||||
;;;;;;;;
|
;;;;;;;;
|
||||||
|
|
||||||
; --> BC:HL - Cluster
|
; --> BC:HL - Sector
|
||||||
; <-- BC:HL - Sector
|
; <-- BC:HL - Cluster
|
||||||
ClusterToSector:
|
SectorToCluster:
|
||||||
LD A,B
|
LD A,B
|
||||||
AND #0F
|
AND #0F
|
||||||
LD B,A
|
LD B,A
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
; “¤ «ï¥â § ¯¨áì ¢ ª â «®£¥ ¨ ®á¢®¡®¦¤ ¥â § ïâãî æ¥¯®çªã ª« áâ¥à®¢
|
; “¤ «ï¥â § ¯¨áì ¢ ª â «®£¥ ¨ ®á¢®¡®¦¤ ¥â § ïâãî æ¥¯®çªã ª« áâ¥à®¢
|
||||||
; ‚室: IX - 㪠§ ⥫ì 㤠«ï¥¬ãî § ¯¨áì ¢ DIRPAGE
|
; ‚室: IX - 㪠§ ⥫ì 㤠«ï¥¬ãî § ¯¨áì ¢ DIRPAGE
|
||||||
;!TODO record index. ¢®§¬®¦®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ¨æë
|
;!TODO record index. ¢®§¬®¦®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ¨æë
|
||||||
DELETE_REC_FAT: SET_PAGE_X DIRPAGE:
|
DELETE_REC_FAT: SET_PAGE_X DIRPAGE
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
CALL DELETE_LFN_RECORDS ; [x] 㤠«¥¨¥ § ¯¨á¨ LFN
|
CALL DELETE_LFN_RECORDS ; [x] 㤠«¥¨¥ § ¯¨á¨ LFN
|
||||||
LD (IX + FAT_DIRECTORY_RECORD.NAME),#E5 ; ¯à¨§ ª 㤠«¥¨ï ä ©«
|
LD (IX + FAT_DIRECTORY_RECORD.NAME),#E5 ; ¯à¨§ ª 㤠«¥¨ï ä ©«
|
||||||
@ -68,6 +68,7 @@ DELETE_REC_FAT: SET_PAGE_X DIRPAGE:
|
|||||||
; ‚室: HL':HL - cluster
|
; ‚室: HL':HL - cluster
|
||||||
; ¯®àâ¨â DE, BC' ¨ A
|
; ¯®àâ¨â DE, BC' ¨ A
|
||||||
; [x] à ìè¥ ¡ë« è á 㯥à¥âìáï ¢ "DISK FULL" ¥á«¨ G_CLUST 㪠§ë¢ « ª« áâ¥à ¤ «ìè¥, 祬 ¤à㣮© ᢮¡®¤ë©
|
; [x] à ìè¥ ¡ë« è á 㯥à¥âìáï ¢ "DISK FULL" ¥á«¨ G_CLUST 㪠§ë¢ « ª« áâ¥à ¤ «ìè¥, 祬 ¤à㣮© ᢮¡®¤ë©
|
||||||
|
; [ ] free clusters for FSInfo
|
||||||
SET_NEW_FREE_CLUSTER:
|
SET_NEW_FREE_CLUSTER:
|
||||||
XOR A
|
XOR A
|
||||||
;LD B,D
|
;LD B,D
|
||||||
@ -138,16 +139,62 @@ G_CLUST: ;
|
|||||||
LD (G_CLUST.high),HL
|
LD (G_CLUST.high),HL
|
||||||
EXX
|
EXX
|
||||||
INC A
|
INC A
|
||||||
LD (CORE_BUFFERS.FatBuffer.RESET_FSINFO),A
|
LD (CORE_BUFFERS.FatBuffer.UPD_FSINFO),A
|
||||||
|
; [ ] free clusters for FSInfo
|
||||||
|
; XOR A ; 㬥ìè¨âì
|
||||||
|
; CALL SET_NEW_FREE_CLUSTERS
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
; ‚室: A - 㬥ìè¨âì (0) ¨«¨ 㢥«¨ç¨âì (!0) ç¨á«® ᢮¡®¤ëå ª« áâ¥à®¢
|
||||||
|
SET_NEW_FREE_CLUSTERS:
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
|
PUSH HL
|
||||||
|
LD HL,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H)
|
||||||
|
EXX
|
||||||
|
LD HL,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L)
|
||||||
|
;
|
||||||
|
OR A
|
||||||
|
JR Z,.dec_clusters
|
||||||
|
; inc clusters
|
||||||
|
INC HL
|
||||||
|
LD A,H
|
||||||
|
OR L
|
||||||
|
JR NZ,.set_new
|
||||||
|
EXX
|
||||||
|
INC HL
|
||||||
|
EXX
|
||||||
|
;
|
||||||
|
.set_new: LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
|
||||||
|
EXX
|
||||||
|
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
|
||||||
|
POP HL
|
||||||
|
EXX
|
||||||
|
POP HL
|
||||||
|
LD A,1
|
||||||
|
LD (CORE_BUFFERS.FatBuffer.UPD_FSINFO),A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.dec_clusters: LD A,H
|
||||||
|
OR L
|
||||||
|
DEC HL
|
||||||
|
JR NZ,.set_new
|
||||||
|
EXX
|
||||||
|
DEC HL
|
||||||
|
EXX
|
||||||
|
JP .set_new
|
||||||
|
; ;
|
||||||
|
|
||||||
;
|
;
|
||||||
; [x] fat32 ;!TEST
|
; [x] fat32 ;!TEST
|
||||||
; <20>ਪ९¨âì ª ¯®á«¥¤¥¬ã ª« áâ¥àã æ¥¯®çª¨ ®¢ë© ¯ãá⮩ ª« áâ¥à
|
; <20>ਪ९¨âì ª ¯®á«¥¤¥¬ã ª« áâ¥àã æ¥¯®çª¨ ®¢ë© ¯ãá⮩ ª« áâ¥à
|
||||||
; ‚室: HL':HL - ®¬¥à ª« áâ¥à ª ª®â®à®¬ã ¯à¨ªà¥¯¨âì ¯ãá⮩
|
; ‚室: HL':HL - ®¬¥à ª« áâ¥à ª ª®â®à®¬ã ¯à¨ªà¥¯¨âì ¯ãá⮩
|
||||||
; ‚ë室: HL':HL - ®¬¥à ª« áâ¥à ª ª®â®à®¬ã ¯à¨ªà¥¯¨«áï ¯ãá⮩
|
; ‚ë室: HL':HL - ®¬¥à ª« áâ¥à ª ª®â®à®¬ã ¯à¨ªà¥¯¨«áï ¯ãá⮩
|
||||||
; DE':DE - ®¬¥à ¯ãá⮣® ª« áâ¥à
|
; DE':DE - ®¬¥à ¯ãá⮣® ª« áâ¥à
|
||||||
INC_FAT: PUSH HL ; ⥪ã騩 ª« áâ¥à
|
INC_FAT: ; [ ] free clusters for FSInfo
|
||||||
|
;
|
||||||
|
;
|
||||||
|
PUSH HL ; ⥪ã騩 ª« áâ¥à
|
||||||
EXX
|
EXX
|
||||||
PUSH HL ; ⥪ã騩 ª« áâ¥à
|
PUSH HL ; ⥪ã騩 ª« áâ¥à
|
||||||
EXX
|
EXX
|
||||||
@ -210,7 +257,7 @@ CHECK_CLUSTER_IS_SMALLER:
|
|||||||
LD A,DSS_Error.sys.DISK_FULL
|
LD A,DSS_Error.sys.DISK_FULL
|
||||||
RET C
|
RET C
|
||||||
RET NZ
|
RET NZ
|
||||||
; ¯à®¢¥à塞 ¬« ¤è¥ á«®¢® ®¬¥à ª« áâ¥à
|
; ¯à®¢¥à塞 ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||||
.low: EX DE,HL
|
.low: EX DE,HL
|
||||||
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
|
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
@ -585,9 +632,7 @@ WRITE_FAT_TABLE:
|
|||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
RET
|
RET
|
||||||
; ‡ ¯¨áì ª¥è FAT- ¤¨áª
|
; ‡ ¯¨áì ª¥è FAT- ¤¨áª
|
||||||
.Start: LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
.Start: CALL SET_FSInfo
|
||||||
CP FAT_TYPE.x32
|
|
||||||
CALL Z,SET_FSInfo
|
|
||||||
LD HL,(CORE_BUFFERS.FatBuffer.CacheBlock)
|
LD HL,(CORE_BUFFERS.FatBuffer.CacheBlock)
|
||||||
;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
|
;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
|
||||||
CALL GET_SECTOR_OF_FAT
|
CALL GET_SECTOR_OF_FAT
|
||||||
|
|||||||
@ -172,9 +172,14 @@ FDDRIVE:
|
|||||||
|
|
||||||
.STAT: XOR A
|
.STAT: XOR A
|
||||||
RET
|
RET
|
||||||
;!FIXIT ¯à®¢¥àïâì ‚ƒ93 ª®£¤ íâ® á⠥⠢®§¬®¦ë¬
|
|
||||||
.CHEK: LD A,#FF
|
.CHEK: ;!FIXIT ¯à®¢¥àïâì ‚ƒ93 ª®£¤ íâ® á⠥⠢®§¬®¦ë¬
|
||||||
AND A
|
IF NON_REMOVABLE_FDD
|
||||||
|
XOR A
|
||||||
|
ELSE
|
||||||
|
LD A,#FF
|
||||||
|
OR A
|
||||||
|
ENDIF
|
||||||
RET
|
RET
|
||||||
|
|
||||||
;DE - ADDRESS
|
;DE - ADDRESS
|
||||||
|
|||||||
@ -103,7 +103,7 @@
|
|||||||
.FSINFO_Sector WORD #01
|
.FSINFO_Sector WORD #01
|
||||||
.BPB_SERIAL_NUMBER DWORD #00000000
|
.BPB_SERIAL_NUMBER DWORD #00000000
|
||||||
.BPB_LABEL BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
|
.BPB_LABEL BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
|
||||||
.RESET_FSINFO BYTE 0
|
.UPD_FSINFO BYTE 0
|
||||||
; IF USE_FSINFO_FAT32
|
; IF USE_FSINFO_FAT32
|
||||||
;.FREE_CLUSTERS_COUNT_L WORD #FFFF
|
;.FREE_CLUSTERS_COUNT_L WORD #FFFF
|
||||||
;.FREE_CLUSTERS_COUNT_H WORD #FFFF
|
;.FREE_CLUSTERS_COUNT_H WORD #FFFF
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
982
|
978
|
||||||
@ -102,6 +102,7 @@ DSS_MAX_DRIVES_AMOUNT EQU 26
|
|||||||
DEFINE EnoughtOnly_LF 0
|
DEFINE EnoughtOnly_LF 0
|
||||||
DEFINE MINIMUM_BIOS_VERSION 2*256 + 55 ; version 2.55
|
DEFINE MINIMUM_BIOS_VERSION 2*256 + 55 ; version 2.55
|
||||||
DEFINE CHECK_DRIVE_CHANGE 1 ; 1 - â®à¬®§¥¥, ® ¡¥§®¯ ᥥ
|
DEFINE CHECK_DRIVE_CHANGE 1 ; 1 - â®à¬®§¥¥, ® ¡¥§®¯ ᥥ
|
||||||
|
DEFINE NON_REMOVABLE_FDD 0
|
||||||
;
|
;
|
||||||
;-------------------[MEMORY]-------------------------;
|
;-------------------[MEMORY]-------------------------;
|
||||||
DEFINE PORTAL.RSTx18_SWITCH_ADDRESS #82
|
DEFINE PORTAL.RSTx18_SWITCH_ADDRESS #82
|
||||||
|
|||||||
@ -3,22 +3,19 @@
|
|||||||
; DIR. ‚뢮¤ á¯¨áª ä ©«®¢ ¨ ¯ ¯®ª
|
; DIR. ‚뢮¤ á¯¨áª ä ©«®¢ ¨ ¯ ¯®ª
|
||||||
;
|
;
|
||||||
;///////////////////////////////////////////////////
|
;///////////////////////////////////////////////////
|
||||||
cmd_dir:
|
cmd_dir: push de
|
||||||
push de
|
|
||||||
;;;; [ ] ¯®¤¤¥à¦ª ¯ à ¬¥â஢
|
;;;; [ ] ¯®¤¤¥à¦ª ¯ à ¬¥â஢
|
||||||
; § ã«ï¥¬ ¢á¥ ¯ à ¬¥âàë áâ àâ¥
|
; § ã«ï¥¬ ¢á¥ ¯ à ¬¥âàë áâ àâ¥
|
||||||
xor a
|
xor a
|
||||||
ld (read_disk_info.full),a
|
ld (read_disk_info.full),a
|
||||||
ld (.key_p),a
|
ld (.key_p),a
|
||||||
|
|
||||||
; ¢ë¯®«ï¥¬/ áâà ¨¢ ¥¬ ¢á¥ ©¤¥ë¥ ¯ à ¬¥âàë ¢ áâப¥
|
; ¢ë¯®«ï¥¬/ áâà ¨¢ ¥¬ ¢á¥ ©¤¥ë¥ ¯ à ¬¥âàë ¢ áâப¥
|
||||||
LD C,256-3 ;!HARDCODE ¤«¨ áâப¨ á ª®¬ ¤®©
|
LD C,256-3 ;!HARDCODE ¤«¨ áâப¨ á ª®¬ ¤®©
|
||||||
.parse: ld hl,cmd_dir_options
|
.parse: ld hl,cmd_dir_options
|
||||||
call RUN_OPTION
|
call RUN_OPTION
|
||||||
jr nc,.end_opt
|
jr nc,.end_opt
|
||||||
jp (hl)
|
jp (hl)
|
||||||
.end_opt:
|
.end_opt: ; ¢ë¢®¤¨¬ áâப㠮 à áçñ⥠᢮¡®¤®£® ¬¥áâ â ª, ç⮡ ® § âñà« áì
|
||||||
; ¢ë¢®¤¨¬ áâப㠮 à áçñ⥠᢮¡®¤®£® ¬¥áâ â ª, ç⮡ ® § âñà« áì
|
|
||||||
ld a,(read_disk_info.full)
|
ld a,(read_disk_info.full)
|
||||||
and a
|
and a
|
||||||
jr z,.skip
|
jr z,.skip
|
||||||
@ -32,12 +29,15 @@ cmd_dir:
|
|||||||
call read_disk_info ; ¯à®ç¨â âì ¬¥âªã ¨ á¥à¨©ë© ®¬¥à ¤¨áª
|
call read_disk_info ; ¯à®ç¨â âì ¬¥âªã ¨ á¥à¨©ë© ®¬¥à ¤¨áª
|
||||||
;
|
;
|
||||||
pop de
|
pop de
|
||||||
ld hl,0
|
xor a
|
||||||
ld (D88DC),hl
|
ld h,a
|
||||||
ld (D88DE),hl
|
ld l,a
|
||||||
ld (D88E0),hl
|
ld (FILES),hl
|
||||||
ld (dir_number),hl
|
ld (dir_number),hl
|
||||||
|
ld (S_LOW),hl
|
||||||
|
ld (S_MED),hl
|
||||||
|
ld (S_HIGH),a
|
||||||
|
;
|
||||||
ex de,hl
|
ex de,hl
|
||||||
ld de,work_buffer1 ; 80
|
ld de,work_buffer1 ; 80
|
||||||
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
|
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
|
||||||
@ -45,19 +45,19 @@ cmd_dir:
|
|||||||
;
|
;
|
||||||
ld a,(work_buffer1)
|
ld a,(work_buffer1)
|
||||||
or a
|
or a
|
||||||
jr nz,1F ; § ¤ ¬ ᪠¨¬¥
|
jr nz,.skipMask ; § ¤ ¬ ᪠¨¬¥
|
||||||
;
|
;
|
||||||
ld hl,mask_fname ; "*.*"
|
ld hl,mask_fname ; "*.*"
|
||||||
ld de,work_buffer1
|
ld de,work_buffer1
|
||||||
call copy_string
|
call copy_string
|
||||||
; [ ] 1/10/23
|
; [ ] 1/10/23
|
||||||
1: ld hl,work_buffer1 ; ¨¬ï ä ©«
|
.skipMask: ld hl,work_buffer1 ; ¨¬ï ä ©«
|
||||||
ld de,work_buffer1 ; 80 ¡ãä¥à
|
ld de,work_buffer1 ; 80 ¡ãä¥à
|
||||||
ld a,FAT_ATTR.NoVolID ; âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ )
|
ld a,FAT_ATTR.NoVolID ; âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ )
|
||||||
ld bc,Dss.F_First.FATname ; f_first (ä®à¬ â 11)
|
ld bc,Dss.F_First.FATname ; f_first (ä®à¬ â 11)
|
||||||
RST ToDSS
|
RST ToDSS
|
||||||
JR C,.dir_empty ;R14
|
JR C,.Dir_Empty ;R14
|
||||||
CALL .Print_Header
|
CALL Print_Header
|
||||||
;
|
;
|
||||||
LD A,32-5 ; ª®«¨ç¥á⢮ áâப ¤® ®¦¨¤ ¨ï ª« ¢¨è¨ (á ¢ëç¥â®¬ § £®«®¢ª ) ;!HARDCODE
|
LD A,32-5 ; ª®«¨ç¥á⢮ áâப ¤® ®¦¨¤ ¨ï ª« ¢¨è¨ (á ¢ëç¥â®¬ § £®«®¢ª ) ;!HARDCODE
|
||||||
PUSH AF
|
PUSH AF
|
||||||
@ -76,21 +76,18 @@ cmd_dir:
|
|||||||
;jr nz,.skip_esc
|
;jr nz,.skip_esc
|
||||||
;xor a
|
;xor a
|
||||||
;ld (.key_p),a ; ®â¬¥ï¥¬ ESC
|
;ld (.key_p),a ; ®â¬¥ï¥¬ ESC
|
||||||
.skip_esc:
|
.skip_esc: ld a,32-1
|
||||||
ld a,32-1
|
.skip_wait: PUSH AF
|
||||||
.skip_wait:
|
|
||||||
PUSH AF
|
|
||||||
;
|
|
||||||
ld hl,work_buffer1+33 ; 80
|
ld hl,work_buffer1+33 ; 80
|
||||||
;push af
|
;push af
|
||||||
;ld de,33
|
;ld de,33
|
||||||
;add hl,de
|
;add hl,de
|
||||||
call A88E2
|
call PRNNAME
|
||||||
;
|
;
|
||||||
ld ix,work_buffer1 ; 80
|
ld ix,work_buffer1 ; 80
|
||||||
ld a,(ix+32) ; âਡãâ ⥪. § ¯¨á¨
|
ld a,(ix+32) ; âਡãâ ⥪. § ¯¨á¨
|
||||||
and FAT_ATTR.DIRECTORY ; ¯ ¯ª ?
|
and FAT_ATTR.DIRECTORY ; ¯ ¯ª ?
|
||||||
jr z,.calc_size ; ¥â
|
jr z,.Calc_Size ; ¥â
|
||||||
; áç¨â ¥¬ ¯ ¯ª¨
|
; áç¨â ¥¬ ¯ ¯ª¨
|
||||||
; ¥ áç¨â ¥¬ ¯ ¯ª®© á«ã¦¥¡ë¥ "." ¨ ".."
|
; ¥ áç¨â ¥¬ ¯ ¯ª®© á«ã¦¥¡ë¥ "." ¨ ".."
|
||||||
ld d,(ix+33)
|
ld d,(ix+33)
|
||||||
@ -110,59 +107,59 @@ cmd_dir:
|
|||||||
inc hl
|
inc hl
|
||||||
ld (dir_number),hl
|
ld (dir_number),hl
|
||||||
jr .next
|
jr .next
|
||||||
|
|
||||||
;;R14
|
;;R14
|
||||||
.dir_empty:
|
.Dir_Empty: push af
|
||||||
push af
|
CALL Print_Header
|
||||||
CALL .Print_Header
|
|
||||||
pop af
|
pop af
|
||||||
CALL print_err_message
|
CALL print_err_message
|
||||||
jr .print
|
jr .print
|
||||||
;;R14
|
;;R14
|
||||||
|
|
||||||
; ¯à¨¡ ¢¨âì à §¬¥à ⥪. ä ©«
|
; ¯à¨¡ ¢¨âì à §¬¥à ⥪. ä ©«
|
||||||
.calc_size:
|
.Calc_Size: ld hl,(FILES)
|
||||||
ld hl,(D88DC)
|
|
||||||
inc hl
|
inc hl
|
||||||
ld (D88DC),hl
|
ld (FILES),hl
|
||||||
ld e,(ix+30)
|
ld e,(ix+FAT_DIRECTORY_RECORD.F_SIZE+2)
|
||||||
ld d,(ix+31)
|
ld d,(ix+FAT_DIRECTORY_RECORD.F_SIZE+3)
|
||||||
ld hl,(D88E0)
|
ld hl,(S_MED)
|
||||||
|
ld a,(S_HIGH)
|
||||||
exx
|
exx
|
||||||
ld e,(ix+28)
|
ld e,(ix+FAT_DIRECTORY_RECORD.F_SIZE)
|
||||||
ld d,(ix+29)
|
ld d,(ix+FAT_DIRECTORY_RECORD.F_SIZE+1)
|
||||||
ld hl,(D88DE)
|
ld hl,(S_LOW)
|
||||||
add hl,de
|
add hl,de
|
||||||
|
ld (S_LOW),hl
|
||||||
exx
|
exx
|
||||||
adc hl,de
|
adc hl,de
|
||||||
exx
|
ld (S_MED),hl
|
||||||
ld (D88DE),hl
|
;exx
|
||||||
exx
|
adc a,0
|
||||||
ld (D88E0),hl
|
ld (S_HIGH),a
|
||||||
|
;exx
|
||||||
.next: ld de,work_buffer1 ; 80 ¡ãä¥à
|
.next: ld de,work_buffer1 ; 80 ¡ãä¥à
|
||||||
ld c,Dss.F_Next ; ¯®¨áª á«¥¤.
|
ld c,Dss.F_Next ; ¯®¨áª á«¥¤.
|
||||||
RST ToDSS
|
RST ToDSS
|
||||||
jp nc,.loop ; § ¤ ¢ 横«, ¥á«¨ ¥ ª®¥æ ᯨáª
|
jp nc,.loop ; § ¤ ¢ 横«, ¥á«¨ ¥ ª®¥æ ᯨáª
|
||||||
;
|
|
||||||
pop af ; ¡ « á á⥪
|
pop af ; ¡ « á á⥪
|
||||||
; „¥áïâ¨çë© ¢ë¢®¤
|
; „¥áïâ¨çë© ¢ë¢®¤
|
||||||
.print: ld hl,(D88DC)
|
.print: ld hl,(FILES)
|
||||||
ld ix,PRM1 ; ¡ãä¥à
|
ld ix,PRM3 ; ª®«¨ç¥á⢮ ä ©«®¢
|
||||||
call PDIGIT
|
call PDIGIT
|
||||||
;
|
;
|
||||||
ld hl,(D88DE) ; ¬«. à §àï¤
|
ld a,(S_HIGH)
|
||||||
exx
|
ld hl,(S_MED) ; áâ. à §àï¤
|
||||||
ld hl,(D88E0) ; áâ. à §àï¤
|
|
||||||
exx
|
exx
|
||||||
|
ld hl,(S_LOW) ; ¬«. à §àï¤
|
||||||
|
;exx
|
||||||
;
|
;
|
||||||
CALL Size2Char
|
;CALL PRINT_DWORD
|
||||||
;;;;;;;;;;;;;
|
CALL PRINT_5BYTES
|
||||||
;
|
;
|
||||||
; [ ] ¢ë¢®¤ ª®«¨ç¥á⢠¯ ¯®ª
|
; [ ] ¢ë¢®¤ ª®«¨ç¥á⢠¯ ¯®ª
|
||||||
; [ ] ¢ë¢®¤ ®¡é¥£® ª®«¨ç¥á⢠᢮¡®¤®£® ¬¥áâ
|
; [x] ¢ë¢®¤ ®¡é¥£® ª®«¨ç¥á⢠᢮¡®¤®£® ¬¥áâ
|
||||||
ld hl,T8B46 ; "0 000 000 000"
|
ld hl,SIZE_BUFFER.high ; "000 000 000 000"
|
||||||
ld de,PRM2 ; ªã¤
|
ld de,PRM1; + PRM2 ; à §¬¥à ä ©«®¢ ¢ ª â «®£¥
|
||||||
call ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬), ¬ ªá.15 ᨬ¢.
|
ld bc,SIZE_BUFFER.bytes
|
||||||
|
call ncopy_string.start ; ᪮¯¨à. áâபã (á ã«¥¬), ¬ ªá. SIZE_BUFFER.bytes ᨬ¢.
|
||||||
;
|
;
|
||||||
;!TEST
|
;!TEST
|
||||||
;ld hl,(dir_number)
|
;ld hl,(dir_number)
|
||||||
@ -170,7 +167,7 @@ cmd_dir:
|
|||||||
;call hex2dec_ascii_16bit.n10000
|
;call hex2dec_ascii_16bit.n10000
|
||||||
; „¥áïâ¨çë© ¢ë¢®¤
|
; „¥áïâ¨çë© ¢ë¢®¤
|
||||||
ld hl,(dir_number)
|
ld hl,(dir_number)
|
||||||
ld ix,PRM3 ; ¡ãä¥à
|
ld ix,PRM4 ; ª®«-¢® ª â «®£®¢ ¢ ª â «®£¥
|
||||||
call PDIGIT
|
call PDIGIT
|
||||||
;xor a
|
;xor a
|
||||||
;ld (de),a
|
;ld (de),a
|
||||||
@ -181,31 +178,28 @@ cmd_dir:
|
|||||||
;ld hl,has_not_full_info
|
;ld hl,has_not_full_info
|
||||||
;JR Z,.skip_full_space
|
;JR Z,.skip_full_space
|
||||||
;
|
;
|
||||||
ld hl,(free_space_low) ; ¬«. à §àï¤
|
ld de,MAIN_MSG.DIR_2 ; ¨¤¥ªá " %1 file(s), %2 bytes, %3 Dir(s)"
|
||||||
exx
|
|
||||||
ld hl,(free_space_medium) ; áâ. à §àï¤
|
|
||||||
;!FIXIT ¨á¯®«ì§®¢ âì áâ à訩 à §àï¤! free_space_high
|
|
||||||
exx
|
|
||||||
CALL Size2Char
|
|
||||||
ld hl,T8B46 ; "0 000 000 000"
|
|
||||||
;
|
|
||||||
;.skip_full_space:
|
|
||||||
ld de,PRM4 ; ªã¤
|
|
||||||
call ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬), ¬ ªá.15 ᨬ¢.
|
|
||||||
;
|
|
||||||
;
|
|
||||||
ld de,MAIN_MSG.DIR_2 ; ¨¤¥ªá " %1 file(s) %2 bytes"
|
|
||||||
CALL MESSAGE ; ¢ë¢¥á⨠áâபã
|
CALL MESSAGE ; ¢ë¢¥á⨠áâபã
|
||||||
|
;
|
||||||
ld a,(read_disk_info.full)
|
ld a,(read_disk_info.full)
|
||||||
and a
|
and a
|
||||||
ld de,MAIN_MSG.DIR_4 ;
|
ld de,MAIN_MSG.CRLF
|
||||||
jp nz,MESSAGE
|
jp z,MESSAGE
|
||||||
ld de,MAIN_MSG.CRLF ;
|
;
|
||||||
|
ld a,(free_space_high)
|
||||||
|
ld hl,(free_space_medium) ; áâ. à §àï¤
|
||||||
|
exx
|
||||||
|
ld hl,(free_space_low) ; ¬«. à §àï¤
|
||||||
|
;exx
|
||||||
|
call PRINT_5BYTES
|
||||||
|
ld hl,SIZE_BUFFER.high ; "000 000 000 000"
|
||||||
|
ld de,PRM1 ; and PRM2 ; ªã¤
|
||||||
|
ld bc,SIZE_BUFFER.bytes
|
||||||
|
call ncopy_string.start ; ᪮¯¨à. áâபã (á ã«¥¬), ¬ ªá. SIZE_BUFFER.bytes ᨬ¢.
|
||||||
|
ld de,MAIN_MSG.DIR_4 ; ¨¤¥ªá " %6 bytes free"
|
||||||
jp MESSAGE
|
jp MESSAGE
|
||||||
|
;
|
||||||
|
Print_Header: ; %1
|
||||||
.Print_Header:
|
|
||||||
; %1
|
|
||||||
ld hl,PRM1
|
ld hl,PRM1
|
||||||
ld a,'"'
|
ld a,'"'
|
||||||
ld (hl),a
|
ld (hl),a
|
||||||
@ -230,11 +224,9 @@ cmd_dir:
|
|||||||
ld de,MAIN_MSG.DIR_1 ; ¨¤¥ªá "Volume in drive %1..."
|
ld de,MAIN_MSG.DIR_1 ; ¨¤¥ªá "Volume in drive %1..."
|
||||||
JP MESSAGE ; ¢ë¢¥á⨠áâபã
|
JP MESSAGE ; ¢ë¢¥á⨠áâபã
|
||||||
;
|
;
|
||||||
;
|
|
||||||
|
|
||||||
; <20>®¤£®â®¢¨âì áâபã á¯¨áª ä ©«®¢/¯ ¯®ª
|
; <20>®¤£®â®¢¨âì áâபã á¯¨áª ä ©«®¢/¯ ¯®ª
|
||||||
A88E2:
|
PRNNAME: dec hl
|
||||||
dec hl
|
|
||||||
ld a,(hl)
|
ld a,(hl)
|
||||||
and FAT_ATTR.DIRECTORY
|
and FAT_ATTR.DIRECTORY
|
||||||
call z,.set_small
|
call z,.set_small
|
||||||
@ -251,9 +243,9 @@ A88E2:
|
|||||||
ldi
|
ldi
|
||||||
ld (de),a
|
ld (de),a
|
||||||
ld ix,work_buffer1
|
ld ix,work_buffer1
|
||||||
call A89A4 ; ¢ë¢¥á⨠¢ ¡ãä¥à ¨¬ï ä ©« ¨ ¥£® à §¬¥à (ã ¯ ¯ª¨ <DIR>)
|
call PRNSIZE ; ¢ë¢¥á⨠¢ ¡ãä¥à ¨¬ï ä ©« ¨ ¥£® à §¬¥à (ã ¯ ¯ª¨ <DIR>)
|
||||||
call A89FA ; ¢ë¢¥á⨠¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
|
call PRNDATE ; ¢ë¢¥á⨠¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
|
||||||
call A8A19 ; ¢ë¢¥á⨠¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
|
call PRNTIME ; ¢ë¢¥á⨠¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
|
||||||
ld de,MAIN_MSG.DIR_3 ; ¨¤¥ªá "%1 %2 %3 %4 %5"
|
ld de,MAIN_MSG.DIR_3 ; ¨¤¥ªá "%1 %2 %3 %4 %5"
|
||||||
jp MESSAGE ; ¢ë¢®¤ áâப¨
|
jp MESSAGE ; ¢ë¢®¤ áâப¨
|
||||||
;
|
;
|
||||||
@ -272,33 +264,33 @@ A88E2:
|
|||||||
jr c,.next
|
jr c,.next
|
||||||
cp 'Ÿ'+1 ;#9F + 1
|
cp 'Ÿ'+1 ;#9F + 1
|
||||||
jr nc,.next
|
jr nc,.next
|
||||||
.letter:
|
;
|
||||||
or %0010'0000
|
.letter: or %0010'0000
|
||||||
ld (hl),a
|
ld (hl),a
|
||||||
.next: djnz .loop
|
.next: djnz .loop
|
||||||
ex de,hl
|
ex de,hl
|
||||||
ret
|
ret
|
||||||
|
|
||||||
; ‚뢥á⨠¢ ¡ãä¥à ¨¬ï ä ©« ¨ ¥£® à §¬¥à (ã ¯ ¯ª¨ <DIR>)
|
; ‚뢥á⨠¢ ¡ãä¥à ¨¬ï ä ©« ¨ ¥£® à §¬¥à (ã ¯ ¯ª¨ <DIR>)
|
||||||
A89A4: ld a,(ix+32)
|
PRNSIZE: ld a,(ix+32)
|
||||||
ld hl,T8B38 ; "<DIR> "
|
ld hl,DIRIDD ; "<DIR> "
|
||||||
and FAT_ATTR.DIRECTORY ; ¯ ¯ª ?
|
and FAT_ATTR.DIRECTORY ; ¯ ¯ª ?
|
||||||
jr nz,A89F4 ; ¤
|
jr nz,.PRZ ; ¤
|
||||||
ld l,(ix+28) ; ¬«. à §àï¤
|
ld l,(ix+FAT_DIRECTORY_RECORD.F_SIZE) ; ¬«. à §àï¤
|
||||||
ld h,(ix+29)
|
ld h,(ix+FAT_DIRECTORY_RECORD.F_SIZE+1)
|
||||||
exx
|
exx
|
||||||
ld l,(ix+30) ; áâ. à §àï¤
|
ld l,(ix+FAT_DIRECTORY_RECORD.F_SIZE+2) ; áâ. à §àï¤
|
||||||
ld h,(ix+31)
|
ld h,(ix+FAT_DIRECTORY_RECORD.F_SIZE+3)
|
||||||
exx
|
exx
|
||||||
push ix
|
push ix
|
||||||
call MAKE_LN ; ¤¥áïâ¨çë© 32-å à §àï¤ë© ¢ë¢®¤
|
call MAKE_LN ; ¤¥áïâ¨çë© 32-å à §àï¤ë© ¢ë¢®¤
|
||||||
ld hl,T8B37
|
ld hl,L32BIT_.end
|
||||||
ld a,(hl)
|
ld a,(hl)
|
||||||
cp " "
|
cp " "
|
||||||
jr nz,A89CD
|
jr nz,.not_zero
|
||||||
ld a,"0"
|
ld a,"0"
|
||||||
ld (hl),a
|
ld (hl),a
|
||||||
A89CD: ld de,T8B46 ; "0 000 000 000"
|
.not_zero: ld de,SIZE_BUFFER.low ; "0 000 000 000"
|
||||||
ld hl,L32BIT_ ; "0000000000"
|
ld hl,L32BIT_ ; "0000000000"
|
||||||
ldi
|
ldi
|
||||||
ld a," "
|
ld a," "
|
||||||
@ -317,46 +309,43 @@ A89CD: ld de,T8B46 ; "0 000 000 000"
|
|||||||
ldi
|
ldi
|
||||||
ldi
|
ldi
|
||||||
ldi
|
ldi
|
||||||
ld hl,T8B46 ; "0 000 000 000"
|
ld hl,SIZE_BUFFER.low ; "0 000 000 000"
|
||||||
pop ix
|
pop ix
|
||||||
A89F4: ld de,PRM3 ; 16 ¡ãä¥à
|
.PRZ: ld de,PRM3 ; 16 ¡ãä¥à
|
||||||
jp ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬), ¬ ªá.15 ᨬ¢.
|
jp ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬), ¬ ªá.15 ᨬ¢.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ‘ª®¯¨à®¢ âì ¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
|
; ‘ª®¯¨à®¢ âì ¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
|
||||||
A89FA: ld b,(ix+25)
|
PRNDATE: ld c,(ix+FAT_DIRECTORY_RECORD.DATE)
|
||||||
ld c,(ix+24)
|
ld b,(ix+FAT_DIRECTORY_RECORD.DATE+1)
|
||||||
ld hl,T8B46 ; "0 000 000 000"
|
ld hl,SIZE_BUFFER.low ; "0 000 000 000"
|
||||||
call A8A53 ; ¢ë¢®¤ ¢ ¡ãä¥à ¤ âë
|
call MAKE_DATE ; ¢ë¢®¤ ¢ ¡ãä¥à ¤ âë
|
||||||
ld (hl),0
|
ld (hl),0
|
||||||
ld hl,T8B46 ; "0 000 000 000"
|
ld hl,SIZE_BUFFER.low ; "0 000 000 000"
|
||||||
ld de,PRM4 ; 16 ªã¤
|
ld de,PRM4 ; 16 ªã¤
|
||||||
ld a,(hl)
|
; ld a,(hl)
|
||||||
cp "0"
|
; cp "0"
|
||||||
jr nz,$+4
|
; jr nz,$+4
|
||||||
ld (hl)," "
|
; ld (hl)," "
|
||||||
jp ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬), ¬ ªá.15 ᨬ¢.
|
jp ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬), ¬ ªá.15 ᨬ¢.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ‘ª®¯¨à®¢ âì ¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
|
; ‘ª®¯¨à®¢ âì ¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
|
||||||
A8A19: ld b,(ix+22)
|
PRNTIME: ld b,(ix+22)
|
||||||
ld c,(ix+23)
|
ld c,(ix+23)
|
||||||
ld hl,T8B46 ; "0 000 000 000"
|
ld hl,SIZE_BUFFER.low ; "0 000 000 000"
|
||||||
call A8A38 ; ᪮¯¨à. ¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
|
call MAKE_TIME ; ᪮¯¨à. ¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
|
||||||
ld (hl),0
|
ld (hl),0
|
||||||
ld hl,T8B46 ; "0 000 000 000"
|
ld hl,SIZE_BUFFER.low ; "0 000 000 000"
|
||||||
ld de,PRM5 ; 80 ¡ãä¥à áâப¨
|
ld de,PRM5 ; 80 ¡ãä¥à áâப¨
|
||||||
ld a,(hl)
|
; ld a,(hl)
|
||||||
cp "0"
|
; cp "0"
|
||||||
jr nz,$+4
|
; jr nz,$+4
|
||||||
ld (hl)," "
|
; ld (hl)," "
|
||||||
jp ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬), ¬ ªá.15 ᨬ¢.
|
jp ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬), ¬ ªá.15 ᨬ¢.
|
||||||
|
|
||||||
|
|
||||||
; ¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
|
; ¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
|
||||||
A8A38: srl c
|
MAKE_TIME: srl c
|
||||||
rr b
|
rr b
|
||||||
srl c
|
srl c
|
||||||
rr b
|
rr b
|
||||||
@ -365,18 +354,17 @@ A8A38: srl c
|
|||||||
srl b
|
srl b
|
||||||
srl b
|
srl b
|
||||||
ld a,c
|
ld a,c
|
||||||
call A8A7E
|
call toNumber
|
||||||
ld (hl),":" ; à §¤¥«. ¢à¥¬¥¨
|
ld (hl),":" ; à §¤¥«. ¢à¥¬¥¨
|
||||||
inc hl
|
inc hl
|
||||||
ld a,b
|
ld a,b
|
||||||
jr A8A7E
|
jr toNumber
|
||||||
|
|
||||||
|
|
||||||
; ¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
|
; ¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
|
||||||
A8A53: ld a,c
|
MAKE_DATE: ld a,c
|
||||||
and 1Fh
|
and #1F
|
||||||
push bc
|
push bc
|
||||||
call A8A7E
|
call toNumber
|
||||||
ld (hl),"." ; à §¤¥«. ¤ âë
|
ld (hl),"." ; à §¤¥«. ¤ âë
|
||||||
inc hl
|
inc hl
|
||||||
pop bc
|
pop bc
|
||||||
@ -386,21 +374,22 @@ A8A53: ld a,c
|
|||||||
rla
|
rla
|
||||||
rla
|
rla
|
||||||
rla
|
rla
|
||||||
and 0Fh
|
and #0F
|
||||||
call A8A7E
|
call toNumber
|
||||||
ld (hl),"." ; à §¤¥«. ¤ âë
|
ld (hl),"." ; à §¤¥«. ¤ âë
|
||||||
inc hl
|
inc hl
|
||||||
ld a,b
|
ld a,b
|
||||||
add a,80
|
add a,80
|
||||||
cp 100
|
cp 100
|
||||||
jr c,A8A7E
|
jr c,toNumber
|
||||||
A8A75: sub 100
|
.loop: sub 100
|
||||||
cp 100
|
cp 100
|
||||||
jr nc,A8A75
|
jr nc,.loop
|
||||||
A8A7E: ld c,2Fh
|
;
|
||||||
inc c
|
toNumber: ld c,#2F
|
||||||
|
.loop: inc c
|
||||||
sub 10
|
sub 10
|
||||||
jr nc,$-3
|
jr nc,.loop
|
||||||
add a,10
|
add a,10
|
||||||
add a,"0"
|
add a,"0"
|
||||||
ld (hl),c
|
ld (hl),c
|
||||||
@ -412,6 +401,7 @@ A8A7E: ld c,2Fh
|
|||||||
;!TODO ¯¥à¥â é¨âì ¢ procedures/math.asm
|
;!TODO ¯¥à¥â é¨âì ¢ procedures/math.asm
|
||||||
; „¥áïâ¨çë© 32-å à §àï¤ë© ¢ë¢®¤
|
; „¥áïâ¨çë© 32-å à §àï¤ë© ¢ë¢®¤
|
||||||
; HL':HL - ç¨á«® ¤«ï ¯¥à¥¢®¤
|
; HL':HL - ç¨á«® ¤«ï ¯¥à¥¢®¤
|
||||||
|
; !FIXIT ¬®¦® ®¡ê¥¤¥¨âì á PDIGIT
|
||||||
MAKE_LN: ld ix,L32BIT_ ; "0000000000"
|
MAKE_LN: ld ix,L32BIT_ ; "0000000000"
|
||||||
exx
|
exx
|
||||||
ld de,#3B9A
|
ld de,#3B9A
|
||||||
@ -419,7 +409,7 @@ MAKE_LN: ld ix,L32BIT_ ; "0000000000"
|
|||||||
ld de,#CA00
|
ld de,#CA00
|
||||||
; DE':DE = 1,000,000,000
|
; DE':DE = 1,000,000,000
|
||||||
call GET_DIG
|
call GET_DIG
|
||||||
exx
|
.skip_1: exx
|
||||||
ld de,#05F5
|
ld de,#05F5
|
||||||
exx
|
exx
|
||||||
ld de,#E100
|
ld de,#E100
|
||||||
@ -456,7 +446,7 @@ MAKE_LN: ld ix,L32BIT_ ; "0000000000"
|
|||||||
; DE':DE = 1,000
|
; DE':DE = 1,000
|
||||||
call GET_DIG ; 1,000...9,999
|
call GET_DIG ; 1,000...9,999
|
||||||
exx
|
exx
|
||||||
ld de#00
|
ld de,#00
|
||||||
exx
|
exx
|
||||||
ld de,#64
|
ld de,#64
|
||||||
; DE':DE = 100
|
; DE':DE = 100
|
||||||
@ -480,14 +470,13 @@ MAKE_LN: ld ix,L32BIT_ ; "0000000000"
|
|||||||
inc hl
|
inc hl
|
||||||
jr .KILLZ
|
jr .KILLZ
|
||||||
;
|
;
|
||||||
.KILLZ2: ld hl,T8B37 ; "0"
|
.KILLZ2: ld hl,L32BIT_.end ; "0"
|
||||||
ld a,(hl)
|
ld a,(hl)
|
||||||
cp d
|
cp d
|
||||||
ret nz
|
ret nz
|
||||||
ld (hl),e
|
ld (hl),e
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
GET_DIG: xor a
|
GET_DIG: xor a
|
||||||
.loop: inc a
|
.loop: inc a
|
||||||
sbc hl,de
|
sbc hl,de
|
||||||
@ -507,20 +496,26 @@ GET_DIG: xor a
|
|||||||
ret
|
ret
|
||||||
;
|
;
|
||||||
|
|
||||||
D88DC: WORD 0
|
FILES: WORD 0
|
||||||
D88DE: WORD 0
|
S_LOW: WORD 0
|
||||||
D88E0: WORD 0
|
S_MED: WORD 0
|
||||||
|
S_HIGH: BYTE 0
|
||||||
dir_number: WORD 0
|
dir_number: WORD 0
|
||||||
free_space_low: WORD 0
|
free_space_low: WORD 0
|
||||||
free_space_medium: WORD 0
|
free_space_medium: WORD 0
|
||||||
free_space_high: BYTE 0
|
free_space_high: BYTE 0
|
||||||
;
|
;
|
||||||
|
|
||||||
|
L40BIT_ db "00"
|
||||||
L32BIT_: db "000000000"
|
L32BIT_: db "000000000"
|
||||||
T8B37: db "0"
|
.end: db "0"
|
||||||
T8B38: db "<DIR> ",0
|
;
|
||||||
T8B46: db "0 000 000 000",0
|
DIRIDD: db "<DIR> ",0
|
||||||
db 0
|
;
|
||||||
|
SIZE_BUFFER:
|
||||||
|
.high db "00"
|
||||||
|
.low: db "0 000 000 000",0,0
|
||||||
|
.bytes equ SIZE_BUFFER - $
|
||||||
;
|
;
|
||||||
|
|
||||||
; [x] ⥯¥àì ¥ «¥§¥â ¯àï¬ãî, ¤¥« ¥â ç¥à¥§ ®¢ë© ¯ à ¬¥âà äãªæ¨¨ DskInfo
|
; [x] ⥯¥àì ¥ «¥§¥â ¯àï¬ãî, ¤¥« ¥â ç¥à¥§ ®¢ë© ¯ à ¬¥âà äãªæ¨¨ DskInfo
|
||||||
@ -545,55 +540,61 @@ read_disk_info: OR #80
|
|||||||
LD A,(.full)
|
LD A,(.full)
|
||||||
OR A
|
OR A
|
||||||
JR Z,.no_full_space_option
|
JR Z,.no_full_space_option
|
||||||
;
|
|
||||||
PUSH BC ; à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
; A - à §¬¥à ª« áâ¥à ¢ ᥪâ®à å
|
|
||||||
;
|
;
|
||||||
; free_clu_L * clu_size_in_sect
|
; --> (HL':HL)*BC*A, (DE':DE)*BC*A = B':HL'HL, C':DE':DE
|
||||||
LD C,A
|
|
||||||
EX AF,AF'
|
|
||||||
CALL Mult16X8 ; DE*C = A:HL
|
|
||||||
; A:HL = DE*C
|
|
||||||
;
|
|
||||||
; free_clu_H * clu_size_in_sect
|
|
||||||
EX AF,AF'
|
|
||||||
EXX
|
EXX
|
||||||
LD C,A
|
LD BC,0
|
||||||
CALL Mult16X8 ; DE*C = A:HL
|
EXX
|
||||||
; A:HL = DE*C
|
SRL B
|
||||||
; max #0FFF'FFFF sectors for LBA28
|
RR C
|
||||||
EX AF,AF'
|
RRCA
|
||||||
LD D,0
|
JR C,.loop2
|
||||||
LD E,A
|
;
|
||||||
ADD HL,DE
|
.loop1: SLA L
|
||||||
|
RL H
|
||||||
|
EXX
|
||||||
|
RL L
|
||||||
|
RL H
|
||||||
|
RL B
|
||||||
EXX
|
EXX
|
||||||
;
|
;
|
||||||
EX DE,HL
|
SLA E
|
||||||
; HL':DE - ᢮¡®¤ëå ᥪâ®à®¢
|
RL D
|
||||||
|
EXX
|
||||||
|
RL E
|
||||||
|
RL D
|
||||||
|
RL C
|
||||||
|
EXX
|
||||||
;
|
;
|
||||||
POP BC ; à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
RRCA
|
||||||
PUSH BC
|
JP NC,.loop1
|
||||||
CALL Mult_16x16 ; DE*BC = HL:DE.
|
;
|
||||||
|
.loop2: SLA L
|
||||||
|
RL H
|
||||||
EXX
|
EXX
|
||||||
POP BC
|
RL L
|
||||||
EX DE,HL
|
RL H
|
||||||
CALL Mult_16x16 ; DE*BC = HL:DE.
|
RL B
|
||||||
LD XH,D
|
|
||||||
LD XL,E
|
|
||||||
EXX
|
EXX
|
||||||
EX DE,HL
|
;
|
||||||
ADD IX,DE
|
SLA E
|
||||||
EX DE,HL
|
RL D
|
||||||
EXX
|
EXX
|
||||||
JR NC,.no_inc_HL
|
RL E
|
||||||
INC L
|
RL D
|
||||||
; ¯®â®¬ã çâ® ¥ ¤®«¦® ¡ëâì ¡®«ìè¥ #001F'FFFF'FE00
|
RL C
|
||||||
; ¯à¨ ᥪâ®à¥ ¢ 512 ¡ ©â®¢
|
EXX
|
||||||
.no_inc_HL: ;
|
;
|
||||||
LD A,L
|
SRL B
|
||||||
|
RR C
|
||||||
|
JP NC,.loop2
|
||||||
|
; <-- B':HL'HL, C':DE':DE
|
||||||
|
;!TODO ¢ë¢®¤¨âì ¯®«ë© à §¬¥à ¤¨áª
|
||||||
|
EXX
|
||||||
|
LD A,C
|
||||||
LD (free_space_high),A
|
LD (free_space_high),A
|
||||||
LD (free_space_medium),IX
|
LD (free_space_medium),DE
|
||||||
EXX
|
EXX
|
||||||
LD (free_space_low),DE
|
LD (free_space_low),DE
|
||||||
;
|
;
|
||||||
@ -641,8 +642,7 @@ read_disk_info: OR #80
|
|||||||
; cp 2 ; ¬¥ìè¥ "C:" ?
|
; cp 2 ; ¬¥ìè¥ "C:" ?
|
||||||
; jr nc,get_inf_data1 ; ¬¥âª ¢ BPB
|
; jr nc,get_inf_data1 ; ¬¥âª ¢ BPB
|
||||||
|
|
||||||
.get_label:
|
.get_label: ; ¨é¥¬ ¬¥âªã ¢ ª®à¥ ”‘ à §¤¥«
|
||||||
; ¨é¥¬ ¬¥âªã ¢ ª®à¥ ”‘ à §¤¥«
|
|
||||||
; ãáâ. ª®à¥ì ¤¨áª
|
; ãáâ. ª®à¥ì ¤¨áª
|
||||||
ld hl,root_path ; "x:\",0
|
ld hl,root_path ; "x:\",0
|
||||||
ld c,Dss.ChDir
|
ld c,Dss.ChDir
|
||||||
@ -675,21 +675,18 @@ read_disk_info: OR #80
|
|||||||
INC HL
|
INC HL
|
||||||
DJNZ .loop
|
DJNZ .loop
|
||||||
POP HL ; ᨬ ¥¬ «¨è¥¥
|
POP HL ; ᨬ ¥¬ «¨è¥¥
|
||||||
; ¥â ¬¥âª¨
|
; ¥â ¬¥âª¨
|
||||||
.no_volume_label:
|
.no_volume_label:; %4
|
||||||
; %4
|
|
||||||
ld hl,volume_string_no ; áâப
|
ld hl,volume_string_no ; áâப
|
||||||
ld de,PRM4 ; ªã¤
|
ld de,PRM4 ; ªã¤
|
||||||
call ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬)
|
call ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬)
|
||||||
XOR A
|
XOR A
|
||||||
LD (PRM5),A
|
LD (PRM5),A
|
||||||
ret
|
ret
|
||||||
.good_label:
|
.good_label: POP HL
|
||||||
POP HL
|
|
||||||
PUSH HL ; «¨è¥¥
|
PUSH HL ; «¨è¥¥
|
||||||
; ¥áâì ¬¥âª
|
; ¥áâì ¬¥âª
|
||||||
volume_label:
|
volume_label: pop DE ; «¨è¥¥
|
||||||
pop DE ; «¨è¥¥
|
|
||||||
; %5
|
; %5
|
||||||
ld de,PRM5
|
ld de,PRM5
|
||||||
ld bc,11 ;!HARDCODE ¤«¨ ¬¥âª¨
|
ld bc,11 ;!HARDCODE ¤«¨ ¬¥âª¨
|
||||||
@ -703,8 +700,7 @@ volume_label:
|
|||||||
ret
|
ret
|
||||||
;
|
;
|
||||||
; ¥á«¨ ¥ 㤠«®áì ¯à®ç¨â âì á¥à¨©ë© ®¬¥à ¤¨áª ¨«¨ ä®à¬ â ¥¨§¢¥áâ¥
|
; ¥á«¨ ¥ 㤠«®áì ¯à®ç¨â âì á¥à¨©ë© ®¬¥à ¤¨áª ¨«¨ ä®à¬ â ¥¨§¢¥áâ¥
|
||||||
unknown_serial:
|
unknown_serial: ; á¥à¨©ë© ®¬¥à ¤¨áª - ¥¨§¢¥á⥠;!HARDCODE ¨¦¥
|
||||||
; á¥à¨©ë© ®¬¥à ¤¨áª - ¥¨§¢¥á⥠;!HARDCODE ¨¦¥
|
|
||||||
LD HL,serial_string
|
LD HL,serial_string
|
||||||
LD A,'?'
|
LD A,'?'
|
||||||
LD B,serial_string.Size
|
LD B,serial_string.Size
|
||||||
@ -719,16 +715,13 @@ unknown_serial:
|
|||||||
|
|
||||||
|
|
||||||
; ¬ áª ä ©«®¢
|
; ¬ áª ä ©«®¢
|
||||||
mask_fname:
|
mask_fname: db "*.*",0
|
||||||
db "*.*",0
|
|
||||||
|
|
||||||
; ª®à¥ì ¤¨áª
|
; ª®à¥ì ¤¨áª
|
||||||
root_path:
|
root_path: db 'X:\',0
|
||||||
db 'X:\',0
|
|
||||||
|
|
||||||
; ‘¥à¨©ë© ®¬¥à ¤¨áª
|
; ‘¥à¨©ë© ®¬¥à ¤¨áª
|
||||||
serial_string:
|
serial_string: db "xxxx-xxxx"
|
||||||
db "xxxx-xxxx"
|
|
||||||
.Size equ $-serial_string
|
.Size equ $-serial_string
|
||||||
db 0 ; § ªàë¢ èª
|
db 0 ; § ªàë¢ èª
|
||||||
|
|
||||||
@ -739,8 +732,7 @@ volume_string_yes:
|
|||||||
; has_not_full_info:
|
; has_not_full_info:
|
||||||
; db ' (?)',0
|
; db ' (?)',0
|
||||||
;
|
;
|
||||||
cmd_dir_options:
|
cmd_dir_options:; [ ] ¯ à ¬¥âà /F - ¢ë¢®¤ ª®«¨ç¥á⢠᢮¡®¤®£® ¬¥áâ ¤¨áª¥ (â®à¬®§¨â, ¯®í⮬㠯 à ¬¥â஬)
|
||||||
; [ ] ¯ à ¬¥âà /F - ¢ë¢®¤ ª®«¨ç¥á⢠᢮¡®¤®£® ¬¥áâ ¤¨áª¥ (â®à¬®§¨â, ¯®í⮬㠯 à ¬¥â஬)
|
|
||||||
DB 'f' : DW cmd_dir_freeSpace
|
DB 'f' : DW cmd_dir_freeSpace
|
||||||
DB 'p' : DW cmd_dir_pause
|
DB 'p' : DW cmd_dir_pause
|
||||||
.Size EQU ($-cmd_dir_options)/3
|
.Size EQU ($-cmd_dir_options)/3
|
||||||
@ -760,7 +752,7 @@ cmd_dir_freeSpace:
|
|||||||
; ld (hl),' '
|
; ld (hl),' '
|
||||||
; inc hl
|
; inc hl
|
||||||
; ld (hl),' '
|
; ld (hl),' '
|
||||||
|
;
|
||||||
; áâ ¢¨¬ ®¯æ¨î ¤«ï API DSS DskInfo
|
; áâ ¢¨¬ ®¯æ¨î ¤«ï API DSS DskInfo
|
||||||
ld a,1
|
ld a,1
|
||||||
ld (read_disk_info.full),a
|
ld (read_disk_info.full),a
|
||||||
@ -772,22 +764,90 @@ cmd_dir_freeSpace:
|
|||||||
;POP DE
|
;POP DE
|
||||||
jp cmd_dir.parse
|
jp cmd_dir.parse
|
||||||
;
|
;
|
||||||
cmd_dir_pause:
|
cmd_dir_pause: ld a,#ff
|
||||||
ld a,#ff
|
|
||||||
ld (cmd_dir.key_p),a
|
ld (cmd_dir.key_p),a
|
||||||
jp cmd_dir.parse
|
jp cmd_dir.parse
|
||||||
///////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
Size2Char:
|
GET_BIG_DIG: ld b,0
|
||||||
call MAKE_LN ; ¤¥áïâ¨çë© 32-å à §àï¤ë© ¢ë¢®¤
|
and a
|
||||||
ld hl,T8B37 ; "0"
|
.loop: inc b
|
||||||
|
sbc hl,de
|
||||||
|
exx
|
||||||
|
sbc hl,de
|
||||||
|
exx
|
||||||
|
sbc a,c
|
||||||
|
jp nc,.loop
|
||||||
|
;
|
||||||
|
exx
|
||||||
|
rr b
|
||||||
|
exx
|
||||||
|
adc hl,de
|
||||||
|
;
|
||||||
|
exx
|
||||||
|
adc hl,de
|
||||||
|
exx
|
||||||
|
adc a,c
|
||||||
|
;
|
||||||
|
ex af,af'
|
||||||
|
dec b
|
||||||
|
ld a,b
|
||||||
|
add a,"0"
|
||||||
|
ld (ix+0),a
|
||||||
|
ex af,af'
|
||||||
|
inc ix
|
||||||
|
ret
|
||||||
|
; stop
|
||||||
|
PRINT_5BYTES: ld ix,L40BIT_ ; "00"
|
||||||
|
ld c,#17
|
||||||
|
exx
|
||||||
|
ld de,#4876
|
||||||
|
exx
|
||||||
|
ld de,#E800
|
||||||
|
; C:DE':DE = 100,000,000,000
|
||||||
|
call GET_BIG_DIG
|
||||||
|
;
|
||||||
|
ld c,#02
|
||||||
|
exx
|
||||||
|
ld de,#540B
|
||||||
|
exx
|
||||||
|
ld de,#E400
|
||||||
|
; C:DE':DE = 10,000,000,000
|
||||||
|
CALL GET_BIG_DIG
|
||||||
|
;
|
||||||
|
ld c,#00
|
||||||
|
exx
|
||||||
|
ld de,#3B9A
|
||||||
|
exx
|
||||||
|
ld de,#CA00
|
||||||
|
; C:DE':DE = 1,000,000,000
|
||||||
|
CALL GET_BIG_DIG
|
||||||
|
;
|
||||||
|
; DE':DE = 100,000,000
|
||||||
|
; HL':HL ¥éñ ã¦ë
|
||||||
|
PUSH HL
|
||||||
|
LD HL,L40BIT_
|
||||||
|
LD B,2 ;!HARDCODE 2 § ª
|
||||||
|
.loop: LD A,(HL)
|
||||||
|
CP "0"
|
||||||
|
jr nz,.not_zero
|
||||||
|
LD (HL)," "
|
||||||
|
.not_zero: INC HL
|
||||||
|
DJNZ .loop
|
||||||
|
POP HL
|
||||||
|
CALL MAKE_LN.skip_1
|
||||||
|
JR PRINT_DWORD.skip_LN
|
||||||
|
;
|
||||||
|
PRINT_DWORD: call MAKE_LN ; ¤¥áïâ¨çë© 32-å à §àï¤ë© ¢ë¢®¤
|
||||||
|
.skip_LN: ld hl,L32BIT_.end ; "0"
|
||||||
ld a,(hl)
|
ld a,(hl)
|
||||||
cp " "
|
cp " "
|
||||||
jr nz,.not_zero
|
jr nz,.not_zero
|
||||||
ld a,"0"
|
ld a,"0"
|
||||||
ld (hl),a
|
ld (hl),a
|
||||||
.not_zero:
|
.not_zero: ld de,SIZE_BUFFER.high ; "0 000 000 000"
|
||||||
ld de,T8B46 ; "0 000 000 000"
|
ld hl,L40BIT_ ; "0000000000"
|
||||||
ld hl,L32BIT_ ; "0000000000"
|
ldi
|
||||||
|
ldi
|
||||||
ld a,(hl)
|
ld a,(hl)
|
||||||
ldi
|
ldi
|
||||||
cp " "
|
cp " "
|
||||||
@ -816,6 +876,7 @@ Size2Char:
|
|||||||
ldi
|
ldi
|
||||||
ldi
|
ldi
|
||||||
ldi
|
ldi
|
||||||
|
scf
|
||||||
ret
|
ret
|
||||||
///////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@ -825,6 +886,7 @@ Size2Char:
|
|||||||
;<3B>à®æ¥¤ãà 㬮¦¥¨ï (16*8bit)
|
;<3B>à®æ¥¤ãà 㬮¦¥¨ï (16*8bit)
|
||||||
;<3B> ¢å®¤: DE * C
|
;<3B> ¢å®¤: DE * C
|
||||||
;<3B> ¢ë室:A:HL = १ã«ìâ â
|
;<3B> ¢ë室:A:HL = १ã«ìâ â
|
||||||
|
IFUSED Mult32
|
||||||
Mult16X8: SUB A
|
Mult16X8: SUB A
|
||||||
LD L,A
|
LD L,A
|
||||||
LD H,A
|
LD H,A
|
||||||
@ -843,6 +905,7 @@ Mult16X8: SUB A
|
|||||||
ADC A,C
|
ADC A,C
|
||||||
.next: DJNZ .loop
|
.next: DJNZ .loop
|
||||||
RET
|
RET
|
||||||
|
ENDIF
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
;<3B>à®æ¥¤ãà 㬮¦¥¨ï (32bit)
|
;<3B>à®æ¥¤ãà 㬮¦¥¨ï (32bit)
|
||||||
@ -871,6 +934,7 @@ Mult32: PUSH IX
|
|||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
;INPUT : DE * BC
|
;INPUT : DE * BC
|
||||||
;OUTPUT: HL:DE
|
;OUTPUT: HL:DE
|
||||||
|
IFUSED Mult32
|
||||||
Mult_16x16: LD IX,0
|
Mult_16x16: LD IX,0
|
||||||
LD HL,0
|
LD HL,0
|
||||||
;
|
;
|
||||||
@ -898,4 +962,5 @@ Mult_16x16: LD IX,0
|
|||||||
.exit: LD D,XH
|
.exit: LD D,XH
|
||||||
LD E,XL
|
LD E,XL
|
||||||
RET
|
RET
|
||||||
|
ENDIF
|
||||||
///////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -29,30 +29,34 @@ MAIN_MSG:
|
|||||||
stN .CRLF_ : db CR,LF,0; |
|
stN .CRLF_ : db CR,LF,0; |
|
||||||
;________________/
|
;________________/
|
||||||
;
|
;
|
||||||
stN .DIR_1_ : db "Volume in drive %1 %4 %5",CR,LF
|
; 1 2 3 4 5 6 7
|
||||||
db "Volume Serial Number is %2",CR,LF
|
; 01234567890123456789012345678901234567890123456789012345678901234567890123456789;
|
||||||
db CR,LF,"Directory of %3",CR,LF,LF,0
|
stN .DIR_1_ : db "Volume in drive %1 %4 %5\r\n"
|
||||||
stN .VERS_ : db "Estex DSS version %1. Shell version %2.",CR,LF,0 ;R13
|
db "Volume Serial Number is %2\r\n"
|
||||||
stN .DATE_ : db "Current date: %1, %2",CR,LF,0 ; [x] ¢ë¢®¤ ¤ï ¥¤¥«¨ 26/01/2023
|
DZ "\r\nDirectory of %3\r\n\n"
|
||||||
stN .TIME_ : db "Current time: %1",CR,LF,0
|
stN .VERS_ : DZ "Estex DSS version %1. Shell version %2.\r\n" ;R13
|
||||||
stN .PAUSE_ : db "Press any key to continue . . .",CR,0
|
stN .DATE_ : DZ "Current date: %1, %2\r\n" ; [x] ¢ë¢®¤ ¤ï ¥¤¥«¨ 26/01/2023
|
||||||
stN .DIR_ESC_ : db 'Command "DIR" aborted by user ',CR,LF,CR,LF,0
|
stN .TIME_ : DZ "Current time: %1\r\n"
|
||||||
stN .INV_ : db "Invalid parametr",CR,LF,0
|
stN .PAUSE_ : DZ "Press any key to continue . . .\r"
|
||||||
stN .ECHO_ : db "Echo is %1",CR,LF,0
|
stN .DIR_ESC_ : DZ "Command 'DIR' aborted by user \r\n\n"
|
||||||
stN .ON_ : db "on",0
|
stN .INV_ : DZ "Invalid parametr\r\n"
|
||||||
stN .OFF_ : db "off",0
|
stN .ECHO_ : DZ "Echo is %1\r\n"
|
||||||
stN .DIR_2_ : db " %1 File(s) %2 bytes",CR,LF
|
stN .ON_ : DZ "on"
|
||||||
db " %3 Dir(s) ",0
|
stN .OFF_ : DZ "off"
|
||||||
stN .DIR_4_ : db "%4 bytes free",CR,LF,0
|
; stN .DIR_2_ : db " %3 File(s) %1 byte(s)\r\n"
|
||||||
; db " %3 Dir(s) %4 bytes free",CR,LF,LF,0
|
; DZ " %4 Dir(s) "
|
||||||
; : db " %3 Dir(s)",CR,LF,LF,0
|
; stN .DIR_4_ : DZ "%1 bytes free\r\n"
|
||||||
stN .DIR_3_ : db "%1 %2 %3 %4 - %5",CR,LF,0 ;FILENAME EXT SIZE DATE TIME
|
stN .DIR_2_ : db " %3 File(s)\r %1 byte(s)\r\n"
|
||||||
stN .HELP_ : db "COMMANDS:",CR,LF,CR,LF
|
DZ " %4 Dir(s)"
|
||||||
db "DIR REN | RENAME PATH HELP ",CR,LF
|
stN .DIR_4_ : DZ "\r %1 bytes free\r\n"
|
||||||
db "CD | CHDIR DEL | ERASE SET VER | VERSION ",CR,LF
|
; stN .DIR_3_ : DZ "%1 %2 %3 %4 - %5\r\n" ;FILENAME EXT SIZE DATE TIME
|
||||||
db "MD | MKDIR TIME ECHO EXIT ",CR,LF
|
stN .DIR_3_ : DZ "%4 %5 %3 %1 %2 \r\n" ;DATE TIME SIZE FILENAME EXT
|
||||||
db "RD | RMDIR DATE CLS REBOOT ",CR,LF,LF,0
|
stN .HELP_ : db "COMMANDS:\r\n"
|
||||||
stN .CALC_ : db "Calculating free space...",CR,0
|
db "DIR REN | RENAME PATH HELP \r\n"
|
||||||
|
db "CD | CHDIR DEL | ERASE SET VER | VERSION \r\n"
|
||||||
|
db "MD | MKDIR TIME ECHO EXIT \r\n"
|
||||||
|
DZ "RD | RMDIR DATE CLS REBOOT \r\n\n"
|
||||||
|
stN .CALC_ : DZ "Calculating free space...\r"
|
||||||
; ;R11
|
; ;R11
|
||||||
db 0
|
db 0
|
||||||
DZ "Unknown command"
|
DZ "Unknown command"
|
||||||
@ -61,3 +65,4 @@ MAIN_MSG:
|
|||||||
;
|
;
|
||||||
!txtCounter=0
|
!txtCounter=0
|
||||||
;
|
;
|
||||||
|
;
|
||||||
@ -42,7 +42,7 @@
|
|||||||
include 'shared_includes/constants/bios_equ.inc'
|
include 'shared_includes/constants/bios_equ.inc'
|
||||||
include 'shared_includes/constants/dss_equ.inc'
|
include 'shared_includes/constants/dss_equ.inc'
|
||||||
include 'SHELL/version.inc'
|
include 'SHELL/version.inc'
|
||||||
|
include 'shared_includes/structures/FileSystem.inc'
|
||||||
;
|
;
|
||||||
; Program EQU section
|
; Program EQU section
|
||||||
;---------------------------------------------------------------------[]
|
;---------------------------------------------------------------------[]
|
||||||
@ -379,7 +379,7 @@ COMPARE:
|
|||||||
; (hl) -> (de)
|
; (hl) -> (de)
|
||||||
ncopy_string:
|
ncopy_string:
|
||||||
ld bc,15 ; ¬ ªá. ¤«¨ áâப¨
|
ld bc,15 ; ¬ ªá. ¤«¨ áâப¨
|
||||||
ld a,(hl)
|
.start: ld a,(hl)
|
||||||
ldi
|
ldi
|
||||||
ret po
|
ret po
|
||||||
or a
|
or a
|
||||||
@ -457,7 +457,7 @@ STR2DEC:
|
|||||||
;!FIXIT ¥áâì ¤ã¡« hex2dec_ascii_16bit
|
;!FIXIT ¥áâì ¤ã¡« hex2dec_ascii_16bit
|
||||||
PDIGIT: ld de,10000
|
PDIGIT: ld de,10000
|
||||||
ld a,#C8 ; ret z
|
ld a,#C8 ; ret z
|
||||||
ld (.patch),a
|
ld (.RET_Z),a
|
||||||
call .DIG
|
call .DIG
|
||||||
ld de,1000
|
ld de,1000
|
||||||
call .DIG
|
call .DIG
|
||||||
@ -467,7 +467,7 @@ PDIGIT: ld de,10000
|
|||||||
call .DIG
|
call .DIG
|
||||||
ld a,l
|
ld a,l
|
||||||
add a,"0"
|
add a,"0"
|
||||||
;!TEST
|
;!TEST ¯®ª ¥ âॡã¥âáï ¯¥à¥¤ ¢ âì á«¥¤ãî騩 IX ¤ «ìè¥
|
||||||
;ld (ix+0),a
|
;ld (ix+0),a
|
||||||
;inc ix
|
;inc ix
|
||||||
;ld (ix+0),0
|
;ld (ix+0),0
|
||||||
@ -476,22 +476,19 @@ PDIGIT: ld de,10000
|
|||||||
;
|
;
|
||||||
ret
|
ret
|
||||||
.DIG: xor a
|
.DIG: xor a
|
||||||
inc a
|
.loop: inc a
|
||||||
sbc hl,de
|
sbc hl,de
|
||||||
jr nc,$-3
|
jr nc,.loop
|
||||||
add hl,de
|
add hl,de
|
||||||
dec a
|
dec a
|
||||||
.patch: ret z
|
.RET_Z: ret z
|
||||||
add a,"0"
|
add a,"0"
|
||||||
ld (ix+0),a
|
ld (ix+0),a
|
||||||
inc ix
|
inc ix
|
||||||
xor a ; nop
|
xor a ; nop
|
||||||
ld (.patch),a
|
ld (.RET_Z),a
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Restore_Screen:
|
Restore_Screen:
|
||||||
PUSH AF
|
PUSH AF
|
||||||
LD C,Dss.GetVMod
|
LD C,Dss.GetVMod
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
323
|
342
|
||||||
Loading…
Reference in New Issue
Block a user