Estex-DSS/SHELL/Procedures/shared.asm
Anatoliy Belyanskiy 4cebd03a1a SHELL: new command "INFO"& Show FS in DIR.
CORE: Some fixes with F_First
2024-06-25 04:59:02 +10:00

221 lines
4.1 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;----------------------------------------------------------------------;
; [x] ⥯¥àì ­¥ «¥§¥â ­ ¯àï¬ãî, ¤¥« ¥â ç¥à¥§ ­®¢ë© ¯ à ¬¥âà ä㭪樨 DskInfo
; ¨­ ï «®£¨ª  ¯®«ã祭¨ï ¬¥âª¨ ⮬  - á­ ç «  ¨é¥âáï ¢ ª®à­¥¢®© ¤¨à¥ªâ®à¨¨,
; ¥á«¨ â ¬ ­¥â, â® ¡¥àñâáï ¨§ BPB
; ‚室: ¢ëáâ ¢¨âì ¯¥à¥¬¥­­ãî read_disk_info.full:
; 0 - ­¥ áç¨â âì ᢮¡®¤­®¥ ¬¥áâ®, !0 - áç¨â âì
; ‚ë室:
; %7 - Volume label
; serial_string - Volume serial number string
; full_space_high \
; full_space_medium - Partition size
; full_space_low /
; %6 - "has no label" or "has label"
;
read_disk_info: OR #80
LD HL,Buffers.work.buffer
.full+1: LD B,0
LD C,Dss.DskInfo
RST ToDSS
RET C
; ” ©«®¢ ï á¨á⥬ 
; ‘¥à¨©­ë© ­®¬¥à ¤¨áª 
; Œ¥âª  ¤¨áª  ¢ BPB
; ”¨§¨ç¥áª¨© ­®¬¥à ¤¨áª , ­®¬¥à à §¤¥« 
;
; HL':HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
; DE':DE - ᢮¡®¤­ëå ª« áâ¥à®¢
; A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
; BC - à §¬¥à ᥪâ®à  ¢ ¡ ©â å
; max sector (LBA28) #0FFF'FFFF
;
EX AF,AF'
LD A,D
AND E
EXX
AND D
AND E
EXX
INC A
LD (.full),A
;
AND H
EX AF,AF'
;
; --> (HL':HL)*BC*A, (DE':DE)*BC*A = B':HL'HL, C':DE':DE
EXX
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
;
SLA E
RL D
EXX
RL E
RL D
RL C
EXX
;
RRCA
JR NC,.loop1
;
.loop2: SLA L
RL H
EXX
RL L
RL H
RL B
EXX
;
SLA E
RL D
EXX
RL E
RL D
RL C
EXX
;
SRL B
RR C
JR NC,.loop2
; <-- B':HL'HL, C':DE':DE
EXX
LD A,C
LD (free_space_high),A
LD (free_space_medium),DE
;
LD A,B
LD (full_space_high),A
LD (full_space_medium),HL
EXX
LD (free_space_low),DE
LD (full_space_low),HL
;
.no_full_space_option:
; parse
; copy FS type
LD HL,Buffers.work.buffer
LD DE,Buffers.bat_params.PRM8; ªã¤ 
LD B,0
LD C,(HL) ; âãâ ¢ HL ¤«¨­  ¯®«ï "” ©«®¢ ï á¨á⥬ "
INC HL
LDIR
EX DE,HL
LD (HL),0
EX DE,HL
;
LD D,0
; ; âãâ ¢ 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_to_str
POP HL
;
LD A,"-"
LD (DE),A
INC DE
; ¬« ¤è¥¥ á«®¢® á¥à¨©­¨ª 
LD A,(HL)
DEC HL
LD L,(HL)
LD H,A
CALL hex16_to_str
;
.get_label: ; âãâ ¢ 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:; %6
LD HL,volume_string_no ; áâப 
LD DE,Buffers.bat_params.PRM6; ªã¤ 
CALL ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
XOR A
LD (Buffers.bat_params.PRM7),A
RET
;
.good_label: POP HL
PUSH HL ; ⮫ª ¥¬ «¨è­¥¥
; ¥áâì ¬¥âª 
.volume_label: POP DE ; á­¨¬ ¥¬ «¨è­¥¥
; %7
LD DE,Buffers.bat_params.PRM7
LD BC,11 ;!HARDCODE ¤«¨­  ¬¥âª¨
LDIR
XOR A
LD (DE),A
; %6
LD HL,volume_string_yes ; áâப 
LD DE,Buffers.bat_params.PRM6; ªã¤ 
XOR A
JP ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
;
; ¥á«¨ ­¥ 㤠«®áì ¯à®ç¨â âì á¥à¨©­ë© ­®¬¥à ¤¨áª  ¨«¨ ä®à¬ â ­¥¨§¢¥á⥭
.unknown_serial: ; á¥à¨©­ë© ­®¬¥à ¤¨áª  - ­¥¨§¢¥á⥭ ;!HARDCODE ­¨¦¥
LD HL,serial_string
LD A,'?'
LD B,serial_string.Size
.loop3: LD (HL),A
INC HL
DJNZ .loop3
LD HL,serial_string+4
LD (HL),'-'
JR read_disk_info.get_label
;
///////////////////////////////////////////////////////////////////////
free_space_low: WORD 0
free_space_medium: WORD 0
free_space_high: BYTE 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
///////////////////////////////////////////////////////////////////////
;----------------------------------------------------------------------;