CORE: начал делать FSinfo free clusters count

SHELL: команда DIR правильно определяет размеры
This commit is contained in:
Anatoliy Belyanskiy 2024-04-29 06:14:56 +10:00
parent ebeb859eb1
commit a904026a45
11 changed files with 880 additions and 722 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1 +1 @@
982
978

View File

@ -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

View File

@ -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
///////////////////////////////////////////////////////////////////////////////////////

View File

@ -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
;
;

View File

@ -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

View File

@ -1 +1 @@
323
342