mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
836 lines
14 KiB
NASM
836 lines
14 KiB
NASM
;///////////////////////////////////////////////////
|
||
;
|
||
; DIR. ‚뢮¤ á¯¨áª ä ©«®¢ ¨ ¯ ¯®ª
|
||
;
|
||
;///////////////////////////////////////////////////
|
||
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:
|
||
; ¢ë¢®¤¨¬ áâப㠮 à áçñ⥠᢮¡®¤®£® ¬¥áâ â ª, ç⮡ ® § âñà« áì
|
||
ld a,(read_disk_info.full)
|
||
and a
|
||
jr z,.skip
|
||
LD DE,MAIN_MSG.CALCULATING
|
||
CALL MESSAGE
|
||
.skip: ld c,Dss.CurDisk ; ã§ âì ⥪. ¤¨áª
|
||
RST ToDSS
|
||
ADD A,"A"
|
||
ld (root_path),a ; ®¬¥à ¤¨áª
|
||
SUB "A"
|
||
call read_disk_info ; ¯à®ç¨â âì ¬¥âªã ¨ á¥à¨©ë© ®¬¥à ¤¨áª
|
||
;
|
||
pop de
|
||
ld hl,0
|
||
ld (D88DC),hl
|
||
ld (D88DE),hl
|
||
ld (D88E0),hl
|
||
ld (dir_number),hl
|
||
|
||
ex de,hl
|
||
ld de,work_buffer1 ; 80
|
||
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
|
||
RST ToDSS
|
||
;
|
||
ld a,(work_buffer1)
|
||
or a
|
||
jr nz,1F ; § ¤ ¬ ᪠¨¬¥
|
||
;
|
||
ld hl,mask_fname ; "*.*"
|
||
ld de,work_buffer1
|
||
call copy_string
|
||
; [ ] 1/10/23
|
||
1: ld hl,work_buffer1 ; ¨¬ï ä ©«
|
||
ld de,work_buffer1 ; 80 ¡ãä¥à
|
||
ld a,#37 ; âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ )
|
||
ld bc,0*256 + Dss.F_First ; f_first (ä®à¬ â 11)
|
||
RST ToDSS
|
||
JR C,.dir_empty ;R14
|
||
CALL .Print_Header
|
||
;
|
||
LD A,32-5 ; ª®«¨ç¥á⢮ áâப ¤® ®¦¨¤ ¨ï ª« ¢¨è¨ (á ¢ëç¥â®¬ § £®«®¢ª ) ;!HARDCODE
|
||
PUSH AF
|
||
; 横« ¢ë¢®¤ á¯¨áª ä ©«®¢/¯ ¯®ª
|
||
.loop: POP AF
|
||
.key_p+1: and #ff
|
||
dec a
|
||
jr nz,.skip_wait
|
||
ld de,MAIN_MSG.PAUSE
|
||
call MESSAGE ; ¢ë¢¥á⨠áâபã
|
||
ld c,Dss.WaitKey
|
||
rst ToDSS
|
||
dec d
|
||
jr nz,.skip_esc
|
||
xor a
|
||
ld (.key_p),a ; ®â¬¥ï¥¬ ESC
|
||
.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
|
||
;
|
||
ld ix,work_buffer1 ; 80
|
||
ld a,(ix+32) ; âਡãâ ⥪. § ¯¨á¨
|
||
and FAT_ATTR.DIRECTORY ; ¯ ¯ª ?
|
||
jr z,.calc_size ; ¥â
|
||
; áç¨â ¥¬ ¯ ¯ª¨
|
||
; ¥ áç¨â ¥¬ ¯ ¯ª®© á«ã¦¥¡ë¥ "." ¨ ".."
|
||
ld d,(ix+33)
|
||
ld e,(ix+34)
|
||
ld hl,-('..')
|
||
add hl,de
|
||
ld a,h
|
||
or l
|
||
jr z,.next
|
||
ld hl,-('. ')
|
||
add hl,de
|
||
ld a,h
|
||
or l
|
||
jr z,.next
|
||
; 㢥«¨ç¨¢ ¥¬ áçñâ稪 ¯ ¯®ª
|
||
ld hl,(dir_number)
|
||
inc hl
|
||
ld (dir_number),hl
|
||
jr .next
|
||
|
||
;;R14
|
||
.dir_empty:
|
||
push af
|
||
CALL .Print_Header
|
||
pop af
|
||
CALL print_err_message
|
||
jr .print
|
||
;;R14
|
||
|
||
; ¯à¨¡ ¢¨âì à §¬¥à ⥪. ä ©«
|
||
.calc_size:
|
||
ld hl,(D88DC)
|
||
inc hl
|
||
ld (D88DC),hl
|
||
ld e,(ix+30)
|
||
ld d,(ix+31)
|
||
ld hl,(D88E0)
|
||
exx
|
||
ld e,(ix+28)
|
||
ld d,(ix+29)
|
||
ld hl,(D88DE)
|
||
add hl,de
|
||
exx
|
||
adc hl,de
|
||
exx
|
||
ld (D88DE),hl
|
||
exx
|
||
ld (D88E0),hl
|
||
.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 ; ¡ãä¥à
|
||
call A8964
|
||
;
|
||
ld hl,(D88DE) ; ¬«. à §àï¤
|
||
exx
|
||
ld hl,(D88E0) ; áâ. à §àï¤
|
||
exx
|
||
;
|
||
;;;;;;;;;;;;;
|
||
; call A8A8F ; ¤¥áïâ¨çë© 32-å à §àï¤ë© ¢ë¢®¤
|
||
; ld hl,T8B37 ; "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,T8B2E ; "0000000000"
|
||
; ld a,(hl)
|
||
; ldi
|
||
; cp " "
|
||
; jr z,1F
|
||
; ld a,"," ; à §¤. à §à冷¢
|
||
; 1: ld (de),a
|
||
; inc de
|
||
; ldi
|
||
; ldi
|
||
; ld a,(hl)
|
||
; ldi
|
||
; cp " "
|
||
; jr z,1F
|
||
; ld a,"," ; à §¤. à §à冷¢
|
||
; 1: ld (de),a
|
||
; inc de
|
||
; ldi
|
||
; ldi
|
||
; ld a,(hl)
|
||
; ldi
|
||
; cp " "
|
||
; jr z,1F
|
||
; ld a,"," ; à §¤. à §à冷¢
|
||
; 1: ld (de),a
|
||
; inc de
|
||
; ldi
|
||
; ldi
|
||
; ldi
|
||
; ret
|
||
CALL Size2Char
|
||
;;;;;;;;;;;;;
|
||
;
|
||
; [ ] ¢ë¢®¤ ª®«¨ç¥á⢠¯ ¯®ª
|
||
; [ ] ¢ë¢®¤ ®¡é¥£® ª®«¨ç¥á⢠᢮¡®¤®£® ¬¥áâ
|
||
ld hl,T8B46 ; "0 000 000 000"
|
||
ld de,PRM2 ; ªã¤
|
||
call ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬), ¬ ªá.15 ᨬ¢.
|
||
;
|
||
;!TEST
|
||
;ld hl,(dir_number)
|
||
;ld de,PRM3
|
||
;call hex2dec_ascii_16bit.n10000
|
||
; „¥áïâ¨çë© ¢ë¢®¤
|
||
ld hl,(dir_number)
|
||
ld ix,PRM3 ; ¡ãä¥à
|
||
call A8964
|
||
;xor a
|
||
;ld (de),a
|
||
;
|
||
;
|
||
;LD A,(read_disk_info.full)
|
||
;OR A
|
||
;ld hl,has_not_full_info
|
||
;JR Z,.skip_full_space
|
||
;
|
||
ld hl,(free_space) ; ¬«. à §àï¤
|
||
exx
|
||
ld hl,(free_space+2) ; áâ. à §àï¤
|
||
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 ; ¢ë¢¥á⨠áâபã
|
||
ld a,(read_disk_info.full)
|
||
and a
|
||
ld de,MAIN_MSG.DIR_4 ;
|
||
jp nz,MESSAGE
|
||
ld de,MAIN_MSG.CRLF ;
|
||
jp MESSAGE
|
||
|
||
|
||
.Print_Header:
|
||
; %1
|
||
ld hl,PRM1
|
||
ld a,'"'
|
||
ld (hl),a
|
||
inc hl
|
||
ld a,(screen_path) ; ¤¨áª
|
||
ld (hl),a
|
||
inc hl
|
||
ld a,'"'
|
||
ld (hl),a
|
||
inc hl
|
||
;ld (hl),":"
|
||
ld (hl),0
|
||
; %2
|
||
ld hl,serial_string ; áâப á¥à¨©®£® ®¬¥à ¤¨áª
|
||
ld de,PRM2 ; ªã¤
|
||
call ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬)
|
||
; %3
|
||
ld hl,screen_path
|
||
ld de,PRM3 ; 16 ¡ãä¥à
|
||
CALL copy_string ; ᪮¯¨à. áâபã (á ã«¥¬)
|
||
;
|
||
ld de,MAIN_MSG.DIR_1 ; ¨¤¥ªá "Volume in drive %1..."
|
||
JP MESSAGE ; ¢ë¢¥á⨠áâபã
|
||
;
|
||
;
|
||
|
||
; <20>®¤£®â®¢¨âì áâபã á¯¨áª ä ©«®¢/¯ ¯®ª
|
||
A88E2: ld bc,8
|
||
ld de,PRM1 ; ¡ãä¥à
|
||
ldir
|
||
xor a
|
||
ld (de),a
|
||
ld de,PRM2 ; ªã¤
|
||
ldi
|
||
ldi
|
||
ldi
|
||
ld (de),a
|
||
ld ix,work_buffer1
|
||
call A89A4 ; ¢ë¢¥á⨠¢ ¡ãä¥à ¨¬ï ä ©« ¨ ¥£® à §¬¥à (ã ¯ ¯ª¨ <DIR>)
|
||
call A89FA ; ¢ë¢¥á⨠¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
|
||
call A8A19 ; ¢ë¢¥á⨠¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
|
||
ld de,MAIN_MSG.DIR_3 ; ¨¤¥ªá "%1 %2 %3 %4 %5"
|
||
jp MESSAGE ; ¢ë¢®¤ áâப¨
|
||
|
||
|
||
|
||
; ‚뢥á⨠¢ ¡ãä¥à ¨¬ï ä ©« ¨ ¥£® à §¬¥à (ã ¯ ¯ª¨ <DIR>)
|
||
A89A4: ld a,(ix+32)
|
||
ld hl,T8B38 ; "<DIR> "
|
||
and 10h ; ¯ ¯ª ?
|
||
jr nz,A89F4 ; ¤
|
||
ld l,(ix+28) ; ¬«. à §àï¤
|
||
ld h,(ix+29)
|
||
exx
|
||
ld l,(ix+30) ; áâ. à §àï¤
|
||
ld h,(ix+31)
|
||
exx
|
||
push ix
|
||
call A8A8F ; ¤¥áïâ¨çë© 32-å à §àï¤ë© ¢ë¢®¤
|
||
ld hl,T8B37
|
||
ld a,(hl)
|
||
cp " "
|
||
jr nz,A89CD
|
||
ld a,"0"
|
||
ld (hl),a
|
||
A89CD: ld de,T8B46 ; "0 000 000 000"
|
||
ld hl,T8B2E ; "0000000000"
|
||
ldi
|
||
ld a," "
|
||
ld (de),a
|
||
inc de
|
||
ldi
|
||
ldi
|
||
ldi
|
||
ld (de),a
|
||
inc de
|
||
ldi
|
||
ldi
|
||
ldi
|
||
ld (de),a
|
||
inc de
|
||
ldi
|
||
ldi
|
||
ldi
|
||
ld hl,T8B46 ; "0 000 000 000"
|
||
pop ix
|
||
A89F4: 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 ; ¢ë¢®¤ ¢ ¡ãä¥à ¤ âë
|
||
ld (hl),0
|
||
ld hl,T8B46 ; "0 000 000 000"
|
||
ld de,PRM4 ; 16 ªã¤
|
||
ld a,(hl)
|
||
cp "0"
|
||
jr nz,$+4
|
||
ld (hl)," "
|
||
jp ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬), ¬ ªá.15 ᨬ¢.
|
||
|
||
|
||
|
||
; ‘ª®¯¨à®¢ âì ¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
|
||
A8A19: ld b,(ix+22)
|
||
ld c,(ix+23)
|
||
ld hl,T8B46 ; "0 000 000 000"
|
||
call A8A38 ; ᪮¯¨à. ¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
|
||
ld (hl),0
|
||
ld hl,T8B46 ; "0 000 000 000"
|
||
ld de,PRM5 ; 80 ¡ãä¥à áâப¨
|
||
ld a,(hl)
|
||
cp "0"
|
||
jr nz,$+4
|
||
ld (hl)," "
|
||
jp ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬), ¬ ªá.15 ᨬ¢.
|
||
|
||
|
||
; ¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
|
||
A8A38: srl c
|
||
rr b
|
||
srl c
|
||
rr b
|
||
srl c
|
||
rr b
|
||
srl b
|
||
srl b
|
||
ld a,c
|
||
call A8A7E
|
||
ld (hl),":" ; à §¤¥«. ¢à¥¬¥¨
|
||
inc hl
|
||
ld a,b
|
||
jr A8A7E
|
||
|
||
|
||
; ¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
|
||
A8A53: ld a,c
|
||
and 1Fh
|
||
push bc
|
||
call A8A7E
|
||
ld (hl),"." ; à §¤¥«. ¤ âë
|
||
inc hl
|
||
pop bc
|
||
ld a,c
|
||
srl b
|
||
rla
|
||
rla
|
||
rla
|
||
rla
|
||
and 0Fh
|
||
call A8A7E
|
||
ld (hl),"." ; à §¤¥«. ¤ âë
|
||
inc hl
|
||
ld a,b
|
||
add a,80
|
||
cp 100
|
||
jr c,A8A7E
|
||
A8A75: sub 100
|
||
cp 100
|
||
jr nc,A8A75
|
||
A8A7E: ld c,2Fh
|
||
inc c
|
||
sub 10
|
||
jr nc,$-3
|
||
add a,10
|
||
add a,"0"
|
||
ld (hl),c
|
||
inc hl
|
||
ld (hl),a
|
||
inc hl
|
||
ret
|
||
|
||
;!TODO ¯¥à¥â é¨âì ¢ procedures/math.asm
|
||
; „¥áïâ¨çë© 32-å à §àï¤ë© ¢ë¢®¤
|
||
A8A8F: ld ix,T8B2E ; "0000000000"
|
||
exx
|
||
ld de,3B9Ah
|
||
exx
|
||
ld de,0CA00h
|
||
call A8B15 ; 1,000,000,000
|
||
exx
|
||
ld de,05F5h
|
||
exx
|
||
ld de,0E100h
|
||
call A8B15 ; 100,000,000...999,999,999
|
||
exx
|
||
ld de,98h
|
||
exx
|
||
ld de,9680h
|
||
call A8B15 ; 10,000,000...99,999,999
|
||
exx
|
||
ld de,0Fh
|
||
exx
|
||
ld de,4240h
|
||
call A8B15 ; 1,000,000...9,999,999
|
||
exx
|
||
ld de,1
|
||
exx
|
||
ld de,86A0h
|
||
call A8B15 ; 100,000...999,999
|
||
exx
|
||
ld de,0
|
||
exx
|
||
ld de,10000
|
||
call A8B15 ; 10,000...99,999
|
||
exx
|
||
ld de,0
|
||
exx
|
||
ld de,1000
|
||
call A8B15 ; 1,000...9,999
|
||
exx
|
||
ld de,0
|
||
exx
|
||
ld de,100
|
||
call A8B15 ; 100..999
|
||
exx
|
||
ld de,0
|
||
exx
|
||
ld de,10
|
||
call A8B15 ; 10..99
|
||
ld a,l
|
||
add a,"0"
|
||
ld (ix+0),a
|
||
inc ix
|
||
ld hl,T8B2E ; "0000000000"
|
||
ld de,2030h ; " ","0"
|
||
A8B04: ld a,(hl)
|
||
cp e
|
||
jr nz,A8B0D
|
||
ld (hl),d
|
||
inc hl
|
||
jr A8B04
|
||
;
|
||
A8B0D: ld hl,T8B37 ; "0"
|
||
ld a,(hl)
|
||
cp d
|
||
ret nz
|
||
ld (hl),e
|
||
ret
|
||
|
||
|
||
A8B15: xor a
|
||
A8B16: inc a
|
||
sbc hl,de
|
||
exx
|
||
sbc hl,de
|
||
exx
|
||
jp nc,A8B16
|
||
add hl,de
|
||
exx
|
||
adc hl,de
|
||
exx
|
||
dec a
|
||
add a,"0"
|
||
ld (ix+0),a
|
||
inc ix
|
||
ret
|
||
;
|
||
|
||
D88DC: dw 0
|
||
D88DE: dw 0
|
||
D88E0: dw 0
|
||
dir_number: dw 0
|
||
free_space: dword 0
|
||
;
|
||
|
||
T8B2E: db "000000000"
|
||
T8B37: db "0"
|
||
T8B38: db "<DIR> ",0
|
||
T8B46: db "0 000 000 000",0
|
||
db 0
|
||
;
|
||
|
||
; [ ] ⥯¥àì ¥ «¥§¥â ¯àï¬ãî, ¤¥« ¥â ç¥à¥§ ®¢ë© ¯ à ¬¥âà äãªæ¨¨ DskInfo
|
||
; ¨ ï «®£¨ª ¯®«ãç¥¨ï ¬¥âª¨ ⮬ - á ç « ¨é¥âáï ¢ ª®à¥¢®© ¤¨à¥ªâ®à¨¨,
|
||
; ¥á«¨ â ¬ ¥â, â® ¡¥àñâáï ¨§ BPB
|
||
read_disk_info:
|
||
OR #80
|
||
LD HL,work_buffer
|
||
.full+1: LD B,0
|
||
LD C,Dss.DskInfo
|
||
RST ToDSS
|
||
; ” ©«®¢ ï á¨á⥬
|
||
; ‘¥à¨©ë© ®¬¥à ¤¨áª
|
||
; Œ¥âª ¤¨áª ¢ BPB
|
||
EX AF,AF'
|
||
LD A,(.full)
|
||
OR A
|
||
JR Z,.no_full_space_option
|
||
;
|
||
; (DE*A)*BC
|
||
;PUSH HL ; ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
|
||
;PUSH DE ; ᢮¡®¤ëå ª« áâ¥à®¢
|
||
PUSH BC ; à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
||
EX AF,AF'
|
||
LD C,A ; A - à §¬¥à ª« áâ¥à ¢ ᥪâ®à å
|
||
CALL Mult16X8
|
||
; A:HL = DE*A
|
||
;
|
||
EX DE,HL
|
||
LD H,0
|
||
LD L,A
|
||
POP BC
|
||
CALL Mult32
|
||
LD (free_space+2),HL
|
||
EX DE,HL
|
||
LD (free_space),HL
|
||
;
|
||
;
|
||
.no_full_space_option:
|
||
; parse
|
||
LD D,0
|
||
LD HL,work_buffer
|
||
; âãâ ¢ HL ¤«¨ ¯®«ï "” ©«®¢ ï á¨á⥬ "
|
||
LD E,(HL)
|
||
ADD HL,DE
|
||
INC HL
|
||
; ¤«¨ ¯®«ï "‘¥à¨©ë© ®¬¥à ¤¨áª "
|
||
LD A,(HL)
|
||
LD E,A
|
||
ADD HL,DE
|
||
INC HL
|
||
PUSH HL ; 㪠§ â¥«ì ¤«¨ã ¯®«ï "Œ¥âª ¤¨áª "
|
||
CP 4 ;!HARDCODE ¤«¨ ¯®«ï á¥à¨©®£® ®¬¥à
|
||
JR NZ,unknown_serial
|
||
DEC HL
|
||
; áâ à襥 á«®¢® á¥à¨©¨ª
|
||
LD D,(HL)
|
||
DEC HL
|
||
LD E,(HL)
|
||
DEC HL
|
||
PUSH HL
|
||
EX DE,HL
|
||
ld de,serial_string ; xxxx-xxxx
|
||
call hex16
|
||
POP HL
|
||
;
|
||
ld a,"-"
|
||
ld (de),a
|
||
INC DE
|
||
; ¬« ¤è¥¥ á«®¢® á¥à¨©¨ª
|
||
LD A,(HL)
|
||
DEC HL
|
||
LD L,(HL)
|
||
LD H,A
|
||
call hex16
|
||
;
|
||
|
||
; Œ¥âª ¤¨áª
|
||
; ld a,(disk) ; ®¬¥à ¤¨áª
|
||
; cp 2 ; ¬¥ìè¥ "C:" ?
|
||
; jr nc,get_inf_data1 ; ¬¥âª ¢ BPB
|
||
|
||
.get_label:
|
||
; ¨é¥¬ ¬¥âªã ¢ ª®à¥ ”‘ à §¤¥«
|
||
; ãáâ. ª®à¥ì ¤¨áª
|
||
ld hl,root_path ; "x:\",0
|
||
ld c,Dss.ChDir
|
||
RST ToDSS
|
||
; ¯®¨áª ¬¥âª¨
|
||
ld hl,mask_fname ; "*.*" ¨¬ï ¬¥âª¨
|
||
ld de,work_buffer1 ; ªã¤
|
||
ld a,FAT_ATTR.VOLUME_ID ; âਡãâ ¬¥âª¨ ⮬
|
||
ld bc,0*256 + Dss.F_First ; f_first, ä®à¬ â 11
|
||
RST ToDSS
|
||
push af
|
||
call restore_path ; ¢®ááâ. ⥪. ¯ãâì
|
||
pop af
|
||
;jr c,no_volume_label ; ¬¥âª¨ ¥â ¤¨à४â®à¨¨
|
||
ld hl,work_buffer1+33 ; ç «® ¬¥âª¨ ¢ ¡ãä¥à¥ f_first
|
||
jr nc,volume_label ; ¬¥âª ¢ ª®à¥¢®¬ ª â «®£¥
|
||
; ¡¥àñ¬ ¬¥âªã ¨§ BPB
|
||
; âãâ ¢ HL ¤«¨ ¯®«ï "Œ¥âª ¤¨áª "
|
||
POP hl
|
||
LD A,(HL)
|
||
INC HL
|
||
AND A
|
||
jr z,.no_volume_label ; ¤
|
||
PUSH HL
|
||
LD B,A
|
||
LD A,' '
|
||
;
|
||
.loop: CP (HL)
|
||
JR NZ,.good_label
|
||
INC HL
|
||
DJNZ .loop
|
||
POP HL ; ᨬ ¥¬ «¨è¥¥
|
||
; ¥â ¬¥âª¨
|
||
.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
|
||
PUSH HL ; «¨è¥¥
|
||
|
||
; ¥áâì ¬¥âª
|
||
volume_label:
|
||
pop DE ; «¨è¥¥
|
||
; %5
|
||
ld de,PRM5
|
||
ld bc,11 ;!HARDCODE ¤«¨ ¬¥âª¨
|
||
ldir
|
||
xor a
|
||
ld (de),a
|
||
; %4
|
||
ld hl,volume_string_yes ; áâப
|
||
ld de,PRM4 ; ªã¤
|
||
call ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬)
|
||
ret
|
||
;
|
||
|
||
; ¥á«¨ ¥ 㤠«®áì ¯à®ç¨â âì á¥à¨©ë© ®¬¥à ¤¨áª ¨«¨ ä®à¬ â ¥¨§¢¥áâ¥
|
||
unknown_serial:
|
||
; á¥à¨©ë© ®¬¥à ¤¨áª - ¥¨§¢¥á⥠;!HARDCODE ¨¦¥
|
||
LD HL,serial_string
|
||
LD A,'?'
|
||
LD B,serial_string.Size
|
||
.loop: LD (HL),A
|
||
INC HL
|
||
DJNZ .loop
|
||
LD HL,serial_string+4
|
||
LD (HL),'-'
|
||
;POP HL ; «¨è¥¥
|
||
JP read_disk_info.get_label
|
||
;
|
||
|
||
|
||
; ¬ áª ä ©«®¢
|
||
mask_fname:
|
||
db "*.*",0
|
||
|
||
; ª®à¥ì ¤¨áª
|
||
root_path:
|
||
db 'X:\',0
|
||
|
||
; ‘¥à¨©ë© ®¬¥à ¤¨áª
|
||
serial_string:
|
||
db "xxxx-xxxx"
|
||
.Size equ $-serial_string
|
||
db 0 ; § ªàë¢ èª
|
||
|
||
volume_string_no:
|
||
db "has no label",0
|
||
volume_string_yes:
|
||
db "has label",0
|
||
; has_not_full_info:
|
||
; db ' (?)',0
|
||
;
|
||
cmd_dir_options:
|
||
; [ ] ¯ à ¬¥âà /F - ¢ë¢®¤ ª®«¨ç¥á⢠᢮¡®¤®£® ¬¥áâ ¤¨áª¥ (â®à¬®§¨â, ¯®í⮬㠯 à ¬¥â஬)
|
||
DB 'f' : DW cmd_dir_freeSpace
|
||
DB 'p' : DW cmd_dir_pause
|
||
.Size EQU ($-cmd_dir_options)/3
|
||
.paramLength equ 3
|
||
;
|
||
|
||
;
|
||
cmd_dir_freeSpace:
|
||
;PUSH DE
|
||
;PUSH BC
|
||
; § â¨à ¥¬ ©¤¥ë© ª«îç
|
||
; ld A,'/'
|
||
; ex de,hl
|
||
; ld bc,4
|
||
; CPDR
|
||
; inc hl
|
||
; ld (hl),' '
|
||
; inc hl
|
||
; ld (hl),' '
|
||
|
||
; áâ ¢¨¬ ®¯æ¨î ¤«ï API DSS DskInfo
|
||
ld a,1
|
||
ld (read_disk_info.full),a
|
||
; ; ¢ë¢®¤¨¬ áâப㠮 à áçñ⥠᢮¡®¤®£® ¬¥áâ â ª, ç⮡ ® § âñà« áì
|
||
; LD DE,MAIN_MSG.CALCULATING
|
||
; CALL MESSAGE
|
||
; ¢®§¢à é ¥¬áï ¢ 横«
|
||
;POP BC
|
||
;POP DE
|
||
jp cmd_dir.parse
|
||
;
|
||
cmd_dir_pause:
|
||
ld a,#ff
|
||
ld (cmd_dir.key_p),a
|
||
jp cmd_dir.parse
|
||
///////////////////////////////////////////////////////////////////////////////////////
|
||
Size2Char:
|
||
call A8A8F ; ¤¥áïâ¨çë© 32-å à §àï¤ë© ¢ë¢®¤
|
||
ld hl,T8B37 ; "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,T8B2E ; "0000000000"
|
||
ld a,(hl)
|
||
ldi
|
||
cp " "
|
||
jr z,1F
|
||
ld a,"," ; à §¤. à §à冷¢
|
||
1: ld (de),a
|
||
inc de
|
||
ldi
|
||
ldi
|
||
ld a,(hl)
|
||
ldi
|
||
cp " "
|
||
jr z,1F
|
||
ld a,"," ; à §¤. à §à冷¢
|
||
1: ld (de),a
|
||
inc de
|
||
ldi
|
||
ldi
|
||
ld a,(hl)
|
||
ldi
|
||
cp " "
|
||
jr z,1F
|
||
ld a,"," ; à §¤. à §à冷¢
|
||
1: ld (de),a
|
||
inc de
|
||
ldi
|
||
ldi
|
||
ldi
|
||
ret
|
||
///////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////////////////////
|
||
;----------------------------------------------------------------------;
|
||
;<3B>à®æ¥¤ãà 㬮¦¥¨ï (16*8bit)
|
||
;<3B> ¢å®¤: DE*C
|
||
;<3B> ¢ë室:A+HL-१ã«ìâ â
|
||
Mult16X8:
|
||
SUB A
|
||
LD L,A
|
||
LD H,A
|
||
CP C
|
||
RET Z
|
||
OR D
|
||
OR E
|
||
RET Z
|
||
LD A,C
|
||
LD C,#00
|
||
LD B,#08
|
||
Mlt16x8:
|
||
ADD HL,HL
|
||
RLA
|
||
JR NC,1F
|
||
ADD HL,DE
|
||
ADC A,C
|
||
1: DJNZ Mlt16x8
|
||
RET
|
||
;----------------------------------------------------------------------;
|
||
;----------------------------------------------------------------------;
|
||
;<3B>à®æ¥¤ãà 㬮¦¥¨ï (32bit)
|
||
;<3B> ¢å®¤: HL+DE*BC
|
||
;<3B> ¢ë室:HL+DE-१ã«ìâ â
|
||
Mult32:
|
||
PUSH IX
|
||
LD IX,#0000
|
||
LD A,#20
|
||
EX DE,HL
|
||
mul32b:
|
||
ADD IX,IX
|
||
ADC HL,HL
|
||
RL E
|
||
RL D
|
||
JR NC,noadd1
|
||
ADD IX,BC
|
||
JR NC,noadd1
|
||
INC HL
|
||
noadd1:
|
||
DEC A
|
||
JR NZ,mul32b
|
||
LD E,LX
|
||
LD D,HX
|
||
POP IX
|
||
RET
|
||
;----------------------------------------------------------------------;
|
||
/////////////////////////////////////////////////////////////////////////////////////// |