/[projet1]/public/atari/tools/rembrandt/DIVERS/CADRE_06.S
Defence Force logotype

Contents of /public/atari/tools/rembrandt/DIVERS/CADRE_06.S

Parent Directory Parent Directory | Revision Log Revision Log


Revision 67 - (show annotations)
Sat Apr 25 18:10:46 2009 UTC (10 years, 10 months ago) by dbug
File size: 8019 byte(s)
Added Rembrandt and Forgotten Bits
1 debug=0
2 *
3 *
4 * Affichage d'un rectangle plein en temps r‚el.
5 * (Bref, comme NeoChrome !)
6 *
7
8 ;
9 ;
10 ; Quelques constantes pour les modes vid‚os
11 ;
12 ;
13 col2=0
14 col4=1
15 col16=2
16 col256=3
17 coltc=4
18
19 l40=0
20 l80=8
21
22 tv=0
23 vga=16
24 pal=32
25 overscan=64
26 st=128
27 interlace=256
28
29 mode=coltc+l40+tv+pal
30
31 include E:\PROJETS\REMBRAND\FICHIERS.INC\MACROS.S
32
33 dc.w $a000
34 move.l a0,_linebase
35
36 pea superviseur
37 move #$26,-(sp)
38 trap #14
39 addq #6,sp
40 ;
41 ; Et quitte
42 ;
43 clr -(sp)
44 trap #1
45
46 attend_mouvement
47 move.l d0,-(sp)
48 move.l xy1,d0
49 .attend_mouvement
50 getmouse
51 tst mousek
52 bne.s .fin_attente
53 cmp.l mousexy,d0
54 beq.s .attend_mouvement
55 .fin_attente
56 move.l (sp)+,d0
57 rts
58
59
60
61
62 superviseur
63 move.l #ecran+4,d0
64 and #-1-3,d0
65 move.l d0,‚cran
66
67 ifeq debug
68 ;
69 ; R‚cupŠre la r‚solution courante et l'adresse de la m‚moire
70 ; vid‚o
71 ;
72 move #-1,-(sp)
73 move #88,-(sp)
74 trap #14
75 addq #4,sp
76 move d0,old_video
77
78 move #2,-(sp)
79 trap #14
80 addq #2,sp
81 move.l d0,old_adresse
82
83 ;
84 ; Valide ma propre r‚solution
85 ; et mon propre ecran
86 ;
87 move #37,-(sp)
88 trap #14
89 addq #2,sp
90
91 move #mode,-(sp)
92 move #3,-(sp)
93 move.l ‚cran,-(sp)
94 move.l ‚cran,-(sp)
95 move #5,-(sp)
96 trap #14
97 add #14,sp
98 endc
99
100 *
101 * Initialise le tableau minimax...
102 * En fait, on met -1 partout !
103 *
104 lea buffer_minimax,a0
105 lea fin_buffer_minimax,a1
106 .initialise_minimax
107 move.l #-1,(a0)+
108 move.l #-1,(a0)+
109 cmpa.l a1,a0
110 blt.s .initialise_minimax
111 move #1000,y_min_1 Le minimum au maximum...
112 move #000,y_max_1 ...et le maximum au minimum !
113
114 move #0,x1
115 move #0,y1
116 move #1,x2
117 move #1,y2
118 * bsr mise_…_jour_table
119 * bsr interprete_table
120
121 * move #7,-(sp)
122 * trap #1
123 * addq #2,sp
124
125 * move #75,x1
126 * move #75,y1
127 * move #125,x2
128 * move #125,y2
129 * bsr mise_…_jour_table
130 * bsr interprete_table
131
132 * move #7,-(sp)
133 * trap #1
134 * addq #2,sp
135
136 * move #50,x1
137 * move #80,y1
138 * move #100,x2
139 * move #130,y2
140 * bsr mise_…_jour_table
141 * bsr interprete_table
142
143 * move #7,-(sp)
144 * trap #1
145 * addq #2,sp
146
147 * bra fin_boucle
148
149 boucle
150 getmouse
151 move mousex,x1
152 move mousey,y1
153 tst.w mousek
154 beq .zap
155 cmp #2,mousek
156 beq fin_boucle
157 move.l xy1,xy2
158
159 .zap
160 bsr mise_…_jour_table
161 bsr interprete_table
162
163 bsr attend_mouvement
164
165 move #37,-(sp)
166 trap #14
167 addq #2,sp
168 bra boucle
169
170 fin_boucle
171 * move #7,-(sp)
172 * trap #1
173 * addq #2,sp
174
175 ifeq debug
176 ;
177 ; Restaure tout
178 ;
179 move old_video,-(sp)
180 move #3,-(sp)
181 move.l old_adresse,-(sp)
182 move.l old_adresse,-(sp)
183 move #5,-(sp)
184 trap #14
185 add #14,sp
186 endc
187 rts
188
189
190
191 mise_…_jour_table
192 move x1,d0
193 move x2,d1
194 cmp d1,d0
195 bmi .inverse_pas_x
196 exg d0,d1
197 .inverse_pas_x
198
199 move y1,d2
200 move y2,d3
201 cmp d3,d2
202 bmi .inverse_pas_y
203 exg d2,d3
204 .inverse_pas_y
205
206 *** Maintenant, on … D0=Xmin D1=Xmax
207 *** D2=Ymin D3=Ymax
208
209 move d2,y_min_2
210 move d3,y_max_2
211
212 lea buffer_minimax,a0 D‚but de la table
213 lea (a0,d2.w*8),a0 Pointe en y_min_2
214 sub d2,d3 Nombre de lignes … remplir
215 .remplie_tableau
216 move d0,min_2(a0) Minimum en X
217 move d1,max_2(a0) Maximum en X
218 addq #8,a0 Rang‚e suivante...
219 dbra d3,.remplie_tableau
220 rts
221
222
223
224 interprete_table
225 movem y_min_max,d0/d1/d2/d3 Y_min_1,Y_min_2,Y_max_1,Y_max_2
226
227 cmp d1,d0
228 bmi.s .pas_‚change_minimum
229 exg d0,d1
230 .pas_‚change_minimum
231 move d0,y_min
232
233 cmp d3,d2
234 bpl.s .pas_‚change_maximum
235 exg d2,d3
236 .pas_‚change_maximum
237 move d2,y_max
238
239 lea buffer_minimax,a0 D‚but de la table
240 lea (a0,d0.w*8),a0 Pointe en y_min
241 sub d0,d2 Nombre de lignes … remplir
242 move d0,y_deb
243 .analyse_tableau
244 cmp #-1,min_2(a0)
245 bne.s .pas_min_2_n‚gatif
246
247 .min_2_n‚gatif
248 move min_1(a0),x_deb
249 move max_1(a0),x_fin
250 bsr efface_segment
251 move #-1,min_1(a0) Efface toute la rang‚e dans le
252 move #-1,max_1(a0) tableau 1
253 move #-1,min_2(a0) Efface toute la rang‚e dans le
254 move #-1,max_2(a0) tableau 2
255 bra .fin_rang‚e
256
257 .pas_min_2_n‚gatif
258 cmp #-1,min_1(a0)
259 bne.s .pas_min_1_n‚gatif
260
261 .min_1_n‚gatif
262 move min_2(a0),x_deb
263 move max_2(a0),x_fin
264 bsr trace_segment
265 move min_2(a0),min_1(a0) Remplace l'ancienne d‚finition par celle
266 move max_2(a0),max_1(a0) du nouveau segment.
267 move #-1,min_2(a0) Puis d‚truit le second tableau.
268 move #-1,max_2(a0)
269 bra .fin_rang‚e
270
271 .pas_min_1_n‚gatif
272 move min_2(a0),d0
273 cmp min_1(a0),d0
274 ble.s .pas_efface_gauche
275
276 * min_1<min_2
277 .efface_segment_gauche
278 move min_1(a0),x_deb
279 move max_1(a0),d1
280 cmp d1,d0
281 bmi.s .minimum_ok
282 exg d1,d0
283 .minimum_ok
284 move d0,x_fin
285 bsr efface_segment
286 .pas_efface_gauche
287
288
289 move max_2(a0),d0
290 cmp max_1(a0),d0
291 bge.s .pas_efface_droite
292
293 .efface_segment_droite
294 move min_1(a0),d1
295 cmp d1,d0
296 bgt.s .maximum_ok
297 exg d1,d0
298 .maximum_ok
299 move d0,x_deb
300 move max_1(a0),x_fin
301 bsr efface_segment
302 .pas_efface_droite
303
304
305 .trace_segment_final
306
307 move min_2(a0),d0
308 cmp min_1(a0),d0
309 bgt .pas_trace_segment_gauche
310
311 .trace_segment_gauche
312 move min_2(a0),x_deb
313 move max_2(a0),d0
314 move min_1(a0),d1
315 cmp d1,d0
316 bmi.s .minimum_gauche_ok
317 exg d0,d1
318 .minimum_gauche_ok
319 move d0,x_fin
320 bsr trace_segment
321 .pas_trace_segment_gauche
322
323 move max_2(a0),d0
324 cmp max_1(a0),d0
325 blt .pas_trace_segment_droite
326
327 .trace_segment_droite
328 move min_2(a0),d0
329 move max_1(a0),d1
330 cmp d1,d0
331 bgt.s .maximum_droite_ok
332 exg d0,d1
333 .maximum_droite_ok
334 move d0,x_fin
335 move d0,x_deb
336 move max_2(a0),x_fin
337 bsr trace_segment
338 .pas_trace_segment_droite
339
340
341
342
343
344 move min_2(a0),min_1(a0) Remplace l'ancienne d‚finition par celle
345 move max_2(a0),max_1(a0) du nouveau segment.
346 move #-1,min_2(a0) Puis d‚truit le second tableau.
347 move #-1,max_2(a0)
348
349 .fin_rang‚e
350 addq #8,a0 Rang‚e suivante
351 addq #1,y_deb
352 dbra d2,.analyse_tableau
353
354 add #10,couleur
355
356 move y_min,y_min_1
357 move y_max,y_max_1
358 rts
359
360
361 efface_segment
362 movem.l d0-a6,-(sp)
363 move couleur,d7
364 not d7
365 moveq #-1,d7
366 move.l ‚cran,a0
367 move y_deb,d0
368 mulu #640,d0
369 add.l d0,a0
370 move x_deb,d0
371 move x_fin,d1
372 sub d0,d1 Nombre de points … tracer
373 add d0,d0
374 add d0,a0 Adresse de d‚part
375 .trace_points
376 move d7,(a0)+ Trace le segment...
377 dbra d1,.trace_points
378 movem.l (sp)+,d0-a6
379 rts
380
381 trace_segment
382 movem.l d0-a6,-(sp)
383 move.l ‚cran,a0
384 move y_deb,d0
385 mulu #640,d0
386 add.l d0,a0
387 move x_deb,d0
388 move x_fin,d1
389 sub d0,d1 Nombre de points … tracer
390 add d0,d0
391 add d0,a0 Adresse de d‚part
392 .trace_points
393 move couleur,(a0)+ Trace le segment...
394 dbra d1,.trace_points
395 movem.l (sp)+,d0-a6
396 rts
397
398
399
400
401 trace_cadre
402 move x1,d0
403 move x2,d1
404 cmp d1,d0
405 bmi .inverse_pas_x
406 exg d0,d1
407 .inverse_pas_x
408 add d0,d0 XGauche x2
409
410 move y1,d1
411 move y2,d2
412 cmp d2,d1
413 bmi .inverse_pas_y
414 exg d1,d2
415 .inverse_pas_y
416 mulu #640,d1 YHaut x640
417
418 move.l ‚cran,a0
419 add d0,a0 Position X
420 add.l d1,a0 Position Y
421
422 move x1,d0
423 sub x2,d0
424 bpl .ok
425 neg d0
426 .ok
427
428 move y1,d1
429 sub y2,d1
430 bpl .ok_y
431 neg d1
432 .ok_y
433 btst #0,d0
434 beq .cadre_paire
435
436 .cadre_impaire
437 lsr d0
438 moveq #-1,d7
439 .loop_y
440 move.l a0,a1
441 move d0,d2
442 .loop_x
443 eor.l d7,(a1)+
444 dbra d2,.loop_x
445 eor d7,(a1)+
446 lea 640(a0),a0
447 dbra d1,.loop_y
448 rts
449
450 .cadre_paire
451 lsr d0
452 moveq #-1,d7
453 .loop_y2
454 move.l a0,a1
455 move d0,d2
456 .loop_x2
457 eor.l d7,(a1)+
458 dbra d2,.loop_x2
459 lea 640(a0),a0
460 dbra d1,.loop_y2
461 rts
462
463
464 section DATA
465
466 xy1
467 x1 dc 50
468 y1 dc 50
469
470 xy2
471 x2 dc 160
472 y2 dc 100
473
474 section BSS
475
476 old_video ds.w 1
477 old_adresse ds.w 1
478 mousexy
479 mousex ds.w 1
480 mousey ds.w 1
481 mousek ds.w 1
482 x_scroll ds.w 1
483 y_scroll ds.w 1
484 _linebase ds.l 1
485
486 ‚cran ds.l 1
487
488 ds.l 10000
489 ecran ds.l 128000/4+1
490 buffer ds.l 128000/4
491 ds.l 10000
492
493 rsreset
494 min_1 rs.w 1
495 min_2 rs.w 1
496 max_1 rs.w 1
497 max_2 rs.w 1
498
499 buffer_minimax ds.l 2*4000 Pour m‚moriser les X_mini et X_maxi !
500 fin_buffer_minimax
501
502 y_min ds.w 1
503 y_max ds.w 1
504
505 y_min_max
506 y_min_1 ds.w 1
507 y_min_2 ds.w 1
508 y_max_1 ds.w 1
509 y_max_2 ds.w 1
510
511 couleur ds.w 1
512
513 x_deb ds.w 1
514 x_fin ds.w 1
515 y_deb ds.w 1
516 end
517

  ViewVC Help
Powered by ViewVC 1.1.26