mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
556 lines
9.3 KiB
NASM
556 lines
9.3 KiB
NASM
;///////////////////////////////////////////////////
|
||
;
|
||
; DIR. ‚뢮¤ á¯¨áª ä ©«®¢ ¨ ¯ ¯®ª
|
||
;
|
||
;///////////////////////////////////////////////////
|
||
cmd_dir: push de
|
||
ld c,Dss.CurDisk ; ã§ âì ⥪. ¤¨áª
|
||
RST ToDSS
|
||
ld (disk+1),a ; ®¬¥à ¤¨áª
|
||
call read_disk_info ; ¯à®ç¨â âì ¬¥âªã ¨ á¥à¨©ë© ®¬¥à ¤¨áª
|
||
pop de
|
||
ld hl,0
|
||
ld (D88DC),hl
|
||
ld (D88DE),hl
|
||
ld (D88E0),hl
|
||
ex de,hl
|
||
ld a,(hl)
|
||
or a
|
||
jr nz,$+5 ; § ¤ ¬ ᪠¨¬¥
|
||
ld hl,mask_fname ; "*.*"
|
||
;ld de,T9186 ; ¡ãä¥à
|
||
ld de,work_buffer1 ; 80
|
||
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
|
||
RST ToDSS
|
||
;ld hl,T9186 ; ¨¬ï ä ©«
|
||
;ld de,T9186 ; ¡ãä¥à
|
||
ld hl,work_buffer1 ; ¨¬ï ä ©«
|
||
ld de,work_buffer1 ; 80 ¡ãä¥à
|
||
ld a,37h ; âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ )
|
||
ld bc,0*256 + Dss.F_First ; f_first (ä®à¬ â 11)
|
||
RST ToDSS
|
||
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥¨ï
|
||
; %1
|
||
;ld a,(system_path) ; ¡ãä¥à ¯®«®£® á¨áâ. ¯ãâ¨
|
||
;ld (T90F6),a
|
||
;ld a,":"
|
||
;ld (T90F7),a
|
||
;xor a
|
||
;ld (T90F8),a
|
||
ld a,(screen_path) ; ¤¨áª
|
||
ld hl,PRM1
|
||
ld (hl),a
|
||
inc hl
|
||
ld (hl),":"
|
||
inc hl
|
||
ld (hl),0
|
||
; %2
|
||
ld hl,serial_string ; áâப á¥à¨©®£® ®¬¥à ¤¨áª
|
||
ld de,PRM2 ; ªã¤
|
||
call ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬)
|
||
;call print_sys_path ; ¢ë¢®¤ á¨áâ. ¯ã⨠íªà
|
||
; %3
|
||
ld hl,screen_path ; íªà . ¯ãâì
|
||
ld de,PRM3 ; 16 ¡ãä¥à
|
||
;ld a,(hl)
|
||
;ldi ; ᪮¯¨à. áâபã
|
||
;or a
|
||
;jr nz,$-4
|
||
call copy_string ; ᪮¯¨à. áâபã (á ã«¥¬)
|
||
;
|
||
ld de,0 ; ¨¤¥ªá "Volume in drive %1 has no label..."
|
||
call MESSAGE ; ¢ë¢¥á⨠áâபã
|
||
; 横« ¢ë¢®¤ á¯¨áª ä ©«®¢/¯ ¯®ª
|
||
A882C: ;ld hl,T9186 ; à ¡. ¡ãä¥à
|
||
ld hl,work_buffer1 ; 80
|
||
ld de,33
|
||
add hl,de
|
||
call A88E2
|
||
;ld ix,T9186
|
||
ld ix,work_buffer1 ; 80
|
||
ld a,(ix+32) ; âਡãâ ⥪. § ¯¨á¨
|
||
and 10h ; ¯ ¯ª ?
|
||
jr nz,A8866 ; ¤
|
||
; ¯à¨¡ ¢¨âì à §¬¥à ⥪. ä ©«
|
||
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
|
||
A8866: ;ld de,T9186 ; à ¡. ¡ãä¥à
|
||
ld de,work_buffer1 ; 80 ¡ãä¥à
|
||
ld c,Dss.F_Next ; ¯®¨áª á«¥¤.
|
||
RST ToDSS
|
||
jr nc,A882C ; § ¤ ¢ 横«
|
||
jr A8872 ; ª®¥æ ᯨ᪠, ¤¥áïâ. ¢ë¢®¤
|
||
|
||
|
||
; „¥áïâ¨çë© ¢ë¢®¤
|
||
A8872: 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,A8892
|
||
ld a,"0"
|
||
ld (hl),a
|
||
A8892: ld de,T8B46 ; "0 000 000 000"
|
||
ld hl,T8B2E ; "0000000000"
|
||
ld a,(hl)
|
||
ldi
|
||
cp " "
|
||
jr z,$+4
|
||
ld a,"," ; à §¤. à §à冷¢
|
||
ld (de),a
|
||
inc de
|
||
ldi
|
||
ldi
|
||
ld a,(hl)
|
||
ldi
|
||
cp " "
|
||
jr z,$+4
|
||
ld a,"," ; à §¤. à §à冷¢
|
||
ld (de),a
|
||
inc de
|
||
ldi
|
||
ldi
|
||
ld a,(hl)
|
||
ldi
|
||
cp " "
|
||
jr z,$+4
|
||
ld a,"," ; à §¤. à §à冷¢
|
||
ld (de),a
|
||
inc de
|
||
ldi
|
||
ldi
|
||
ldi
|
||
ld hl,T8B46 ; "0 000 000 000"
|
||
ld de,PRM2 ; ªã¤
|
||
call ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬), ¬ ªá.15 ᨬ¢.
|
||
ld de,9 ; ¨¤¥ªá " %1 file(s) %2 bytes"
|
||
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,T9186
|
||
ld ix,work_buffer1
|
||
call A89A4 ; ¢ë¢¥á⨠¢ ¡ãä¥à ¨¬ï ä ©« ¨ ¥£® à §¬¥à (ã ¯ ¯ª¨ <DIR>)
|
||
call A89FA ; ¢ë¢¥á⨠¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
|
||
call A8A19 ; ¢ë¢¥á⨠¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
|
||
ld de,10 ; ¨¤¥ªá "%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
|
||
|
||
|
||
; „¥áïâ¨çë© 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
|
||
|
||
|
||
|
||
T8B2E: db "000000000"
|
||
T8B37: db "0"
|
||
T8B38: db "<DIR> ",0
|
||
T8B46: db "0 000 000 000",0
|
||
db 0
|
||
|
||
|
||
|
||
|
||
|
||
;!FIXIT ¯¥à¥¥á⨠¢ DSS - FN #04: GET_BPB
|
||
; ¯à®ç¨â âì BPB ¤¨áª
|
||
read_disk_info:
|
||
disk: ld a,0 ; á®åà. ®¬¥à ¤¨áª
|
||
ld c,1 ; open device
|
||
rst 18h
|
||
jr c,get_inf_data_err ;!FIXIT ¥â ®¡à ¡®â稪 ®è¨¡ª
|
||
ld a,(disk+1)
|
||
ld de,work_buffer ; ¡ãä¥à
|
||
ld c,4 ; get BPB
|
||
rst 18h
|
||
push af
|
||
ld a,(disk+1) ; ®¬¥à ¤¨áª
|
||
ld c,2 ; close device
|
||
rst 18h
|
||
pop af
|
||
jr c,get_inf_data_err ;!FIXIT ¥â ®¡à ¡®â稪 ®è¨¡ª¨
|
||
;
|
||
get_inf_data_err:
|
||
;
|
||
|
||
; ‘¥à¨©ë© ®¬¥à «®£. ¤¨áª
|
||
ld hl,(work_buffer+41) ; áâ.ç áâì
|
||
ld de,serial_string ; xxxx-xxxx
|
||
call hex16
|
||
ld a,"-"
|
||
ld (de),a
|
||
inc de
|
||
ld hl,(work_buffer+39) ; ¬«.ç áâì
|
||
call hex16
|
||
;
|
||
; Œ¥âª ¤¨áª
|
||
ld a,(disk+1) ; ®¬¥à ¤¨áª
|
||
cp 2 ; ¬¥ìè¥ "C:" ?
|
||
jr nc,get_inf_data1 ; ¬¥âª ¢ BPB
|
||
; floppy, ¬¥âª - ª ª § ¯¨áì ä ©«
|
||
ld c,Dss.ChDisk ; ãáâ. ¤¨áª
|
||
RST ToDSS
|
||
; ãáâ. ª®à¥ì ¤¨áª
|
||
ld hl,root_path ; "\",0
|
||
ld c,Dss.ChDir
|
||
RST ToDSS
|
||
; ¯®¨áª ¬¥âª¨
|
||
ld hl,mask_fname ; "*.*" ¨¬ï ¬¥âª¨
|
||
ld de,work_buffer1 ; ªã¤
|
||
ld a,8 ; âਡãâ ¬¥âª¨ ⮬
|
||
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 volume_label
|
||
;
|
||
get_inf_data1: ;!FIXIT â ª â ¬ ¯à®¡¥«ë áâ®ïâì ¬®£ãâ, ¥á«¨ ¬¥âª ª®à®ç¥ 11 ᨬ¢®«®¢
|
||
ld hl,work_buffer+53 ; ª®¥æ ¬¥âª¨ ¢ BPB
|
||
ld a,(hl)
|
||
cp " " ; ¥áâì ¬¥âª ?
|
||
ld hl,work_buffer+43 ; ç «® ¬¥âª¨ ¢ BPB
|
||
jr nz,volume_label ; ¤
|
||
;!FIXIT ᤥ« âì ç¥à¥§ à£ã¬¥âë %1-%9
|
||
; ¥â ¬¥âª¨
|
||
no_volume_label: ;!FIXIT ᤥ« âì ç¥à¥§ PRM %4
|
||
ld hl,volume_string1 ; "has no label "
|
||
ld de,MSG0.volume_string ; ªã¤
|
||
ld bc,14
|
||
ldir
|
||
ret
|
||
;!FIXIT ᤥ« âì ç¥à¥§ à£ã¬¥âë %1-%9
|
||
; ¥áâì ¬¥âª
|
||
volume_label:
|
||
ex de,hl
|
||
ld hl,MSG0.volume_string ; ªã¤
|
||
ld (hl),"i"
|
||
inc hl
|
||
ld (hl),"s"
|
||
inc hl
|
||
ld (hl)," "
|
||
inc hl
|
||
ex de,hl
|
||
; ᪮¯¨à. ¨¬ï ¬¥âª¨
|
||
ld bc,11 ; ¬ ªá. ¤«¨ ¬¥âª¨
|
||
ld a,(hl)
|
||
cp " "+1
|
||
jr nc,$+6
|
||
inc hl
|
||
dec c
|
||
jr $-7
|
||
ld a,11
|
||
sub c
|
||
ldir
|
||
ld b,a
|
||
or a ; ¤«¨ ¬¥âª¨ 11 ᨬ¢. ?
|
||
ret z ; ¤
|
||
; ¤®¯®«¨âì 墮áâ. ¯à®¡¥« ¬¨
|
||
ld (de),a
|
||
inc de
|
||
djnz $-2
|
||
ret
|
||
|
||
|
||
|
||
|
||
; ‚뢮¤ HL ¢ hex-ä®à¬ â¥
|
||
; de=¡ãä¥à
|
||
; hl=ç¨á«®
|
||
hex16: ld a,h
|
||
call hex8
|
||
ld a,l
|
||
; ¢ë¢®¤ "a"
|
||
hex8: push af
|
||
rrca
|
||
rrca
|
||
rrca
|
||
rrca
|
||
call $+4
|
||
pop af
|
||
and 0Fh
|
||
add a,90h
|
||
daa
|
||
adc a,40h
|
||
daa
|
||
ld (de),a
|
||
inc de
|
||
ret
|
||
|
||
|
||
|
||
|
||
; ¬ áª ä ©«®¢
|
||
mask_fname:
|
||
db "*.*",0
|
||
|
||
; ª®à¥ì ¤¨áª
|
||
root_path:
|
||
db '\',0
|
||
|
||
|
||
|
||
; ‘¥à¨©ë© ®¬¥à ¤¨áª
|
||
serial_string:
|
||
db "xxxx-xxxx",0
|
||
|
||
volume_string1: ;!FIXIT ᤥ« âì ç¥à¥§ PRM
|
||
db "has no label " ; 14
|