mirror of
https://github.com/Tolik-Trek/Crazy-Blaster.git
synced 2026-06-16 01:51:10 +03:00
221 lines
4.1 KiB
NASM
221 lines
4.1 KiB
NASM
;----------------------------------------------------------------------;
|
||
; [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
|
||
///////////////////////////////////////////////////////////////////////
|
||
;----------------------------------------------------------------------; |