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