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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 67 - (show annotations)
Sat Apr 25 18:10:46 2009 UTC (10 years, 7 months ago) by dbug
File size: 5589 byte(s)
Added Rembrandt and Forgotten Bits
1 debug=0
2 *
3 *
4 * Petite routine … la con destin‚e a convertir une image
5 * DEGAS en image TRUE COLOR
6 *
7 *
8 * bsr trace_ligne
9
10 point macro
11 move.l ‚cran(pc),a0
12 move \1,d0
13 add d0,d0
14 add d0,a0
15 move \2,d0
16 mulu #640,d0
17 add.l d0,a0
18 move #\3,(a0)
19 endm
20
21 ;
22 ;
23 ; Quelques constantes pour les modes vid‚os
24 ;
25 ;
26 col2=0
27 col4=1
28 col16=2
29 col256=3
30 coltc=4
31
32 l40=0
33 l80=8
34
35 tv=0
36 vga=16
37 pal=32
38 overscan=64
39 st=128
40 interlace=256
41
42 mode=coltc+l40+tv+pal
43
44 pea superviseur
45 move #$26,-(sp)
46 trap #14
47 addq #6,sp
48 ;
49 ; Et quitte
50 ;
51 clr -(sp)
52 trap #1
53
54
55
56
57 superviseur
58 ifeq debug
59 ;
60 ; R‚cupŠre la r‚solution courante et l'adresse de la m‚moire
61 ; vid‚o
62 ;
63 move #-1,-(sp)
64 move #88,-(sp)
65 trap #14
66 addq #4,sp
67 move d0,old_video
68
69 move #2,-(sp)
70 trap #14
71 addq #2,sp
72 move.l d0,old_adresse
73
74 ;
75 ; Valide ma propre r‚solution
76 ; et mon propre ecran
77 ;
78 move #mode,-(sp)
79 move #3,-(sp)
80 pea ecran
81 pea ecran
82 move #5,-(sp)
83 trap #14
84 add #14,sp
85 endc
86
87 nop
88
89 attend_touche
90 dc.w $a000
91 move -602(a0),x2
92 move -600(a0),y2
93 tst.w -596(a0)
94 bne fin_boucle
95
96 move #$7000,$ffff9800.w
97 move #0,x1
98 move #0,y1
99 move #319,x2
100 move #199,y2
101 move.l #ecran,‚cran
102 bsr trace_ligne
103 bsr trace_ligne
104 bsr trace_ligne
105 bsr trace_ligne
106 point x1,y1,%1111100000000000
107 point x2,y2,%11111
108 move #-1,$ffff9800.w
109 add #100,couleur
110
111 move #37,-(sp)
112 trap #14
113 addq #2,sp
114
115 bra attend_touche
116
117 fin_boucle
118
119 ;
120 ; Restaure tout
121 ;
122 ifeq debug
123 move old_video,-(sp)
124 move #3,-(sp)
125 move.l old_adresse,-(sp)
126 move.l old_adresse,-(sp)
127 move #5,-(sp)
128 trap #14
129 add #14,sp
130 endc
131 rts
132
133 deb
134 trace_ligne
135 initialise_datas
136 moveq #0,d0
137 moveq #0,d1
138 moveq #0,d2
139
140 * move #50,x1 Centre de l'‚cran
141 * move #50,y1
142
143 * move #100,x2 En bas au 3/4 … droite
144 * move #100,y2
145
146 teste_sens_en_y
147 move y2,d1
148 sub y1,d1 D1=hauteur
149 bpl.s sens_vertical_correct
150 neg d1
151 move.l xy1,d2 Si la hauteur est n‚gative, on inverse
152 move.l xy2,xy1 les coordonn‚es pour tracer de haut en
153 move.l d2,xy2 bas dans tous les cas.
154 sens_vertical_correct
155
156 move x2,d0
157 sub x1,d0 D0=largeur
158 spl flag_sens_tra‡age_x Indique dans quel sens on trace (0:Gauche/1:Droite)
159 bpl.s signe_horizontal_correct
160 neg d0
161 signe_horizontal_correct
162
163 cmp d0,d1 Si (D1 ò D0), alors on trace en Y.
164 bgt trace_verticalement
165 beq trace_diagonalement
166
167 trace_horizontalement
168 move d0,d7 Il faut tracer [largeur+1] points en DBra.
169
170 addq #1,d0 Il faut rajouter 1 … la largeur et … la
171 addq #1,d1 hauteur calcul‚s pr‚c‚dement.
172
173 move d1,d6
174 divu.l d0,d6:d2 Ix en 32 bits de pr‚cision.
175 moveq #0,d3 Ix'=0
176
177 move x1,d0 AprŠs le test initial, on est sur que X1/Y1
178 move y1,d1 est le couple le plus haut. (Point d‚part).
179
180 tst.b flag_sens_tra‡age_x
181 beq trace_horizontal_gauche
182
183 trace_horizontal_droite
184 bsr trace_point Affiche le point en (d0,d1)
185 addq #1,d0 Incr‚mente en X
186 add.l d2,d3 Fait un incr‚ment sur 32 bits.
187 addx.l d4,d1 Puis ,effectue le d‚placement en +Y
188 dbra d7,trace_horizontal_droite
189 rts
190
191 trace_horizontal_gauche
192 bsr trace_point Affiche le point en (d0,d1)
193 subq #1,d0 D‚cr‚mente en X
194 add.l d2,d3 Fait un incr‚ment sur 32 bits.
195 addx.l d4,d1 Puis ,effectue le d‚placement en +Y
196 dbra d7,trace_horizontal_gauche
197 rts
198
199
200
201
202
203 ; D0=x
204 ; D1=y
205 ; D2=ix
206 ; D3=ix'
207 ; D4=registre … z‚ro
208 ; D7=compteur
209
210 trace_verticalement
211 move d1,d7 Il faut tracer [largeur+1] points en DBra.
212
213 addq #1,d0 Il faut rajouter 1 … la largeur et … la
214 addq #1,d1 hauteur calcul‚s pr‚c‚dement.
215
216 move d0,d6
217 divu.l d1,d6:d2 Ix en 32 bits de pr‚cision.
218 moveq #0,d3 Ix'=0
219
220 move x1,d0 AprŠs le test initial, on est sur que X1/Y1
221 move y1,d1 est le couple le plus haut. (Point d‚part).
222
223 tst.b flag_sens_tra‡age_x
224 beq trace_vertical_gauche
225
226 trace_vertical_droite
227 bsr trace_point Affiche le point en (d0,d1)
228 add.l d2,d3 Fait un incr‚ment sur 32 bits.
229 addx.l d4,d0 Puis ,effectue le d‚placement en -X
230 addq #1,d1 Descend d'un cran dans l'image
231 dbra d7,trace_vertical_droite
232 rts
233
234 trace_vertical_gauche
235 bsr trace_point Affiche le point en (d0,d1)
236 add.l d2,d3 Fait un incr‚ment sur 32 bits.
237 subx.l d4,d0 Puis ,effectue le d‚placement en -X
238 addq #1,d1 Descend d'un cran dans l'image
239 dbra d7,trace_vertical_gauche
240 rts
241
242
243
244 trace_diagonalement
245 move d1,d7 Il faut tracer [largeur+1] points en DBra.
246
247 move x1,d0 AprŠs le test initial, on est sur que X1/Y1
248 move y1,d1 est le couple le plus haut. (Point d‚part).
249
250 tst.b flag_sens_tra‡age_x
251 beq trace_diagonal_gauche
252
253 trace_diagonal_droite
254 bsr trace_point Affiche le point en (d0,d1)
255 addq #1,d0 Incr‚ment en X
256 addq #1,d1 Descend d'un cran dans l'image
257 dbra d7,trace_diagonal_droite
258 rts
259
260 trace_diagonal_gauche
261 bsr trace_point Affiche le point en (d0,d1)
262 subq #1,d0 D‚cr‚mente en X
263 addq #1,d1 Descend d'un cran dans l'image
264 dbra d7,trace_diagonal_gauche
265 rts
266
267
268 trace_point
269 movem.l d0-d6,-(sp)
270 move.l ‚cran(pc),a0
271 add.l d0,a0
272 add.l d0,a0
273 mulu #640,d1
274 add.l d1,a0
275 move couleur,(a0)
276 movem.l (sp)+,d0-d6
277 rts
278 fin
279
280
281 flag_sens_tra‡age_x ds.w 1 Flag (byte)
282
283 x ds.l 1
284 y ds.l 1
285
286 xy1
287 x1 ds.w 1
288 y1 ds.w 1
289
290 xy2
291 x2 ds.w 1
292 y2 ds.w 1
293
294 couleur ds.w 1
295 ‚cran ds.l 1
296
297
298 section DATA
299
300 section BSS
301
302 old_video ds.w 1
303 old_adresse ds.w 1
304 x_souris ds.w 1
305 y_souris ds.w 1
306 ds.l 10000
307 ecran ds.l 128000/4
308 buffer ds.l 128000/4
309 ds.l 10000
310
311 end
312

  ViewVC Help
Powered by ViewVC 1.1.26