2bd09c61fd5a604056852cc6bc56157853a70642
[h316.git] / lib / hachti / src / matrix.asm
1 *
2 *
3 *
4 * MATRIX FORMAT:
5 *
6 * a11 a12
7 *
8 * a21 a22
9 *
10 * a11-a22 are single precision float variables (2 word).
11 *
12 *
13 * IN MEMORY LAYOUT:
14 *
15 * a11
16 * a11
17 * a12
18 * a12
19 * a21
20 * a21
21 * a22
22 * a22
23 *
24 *
25 * JST M$INIT INITIALIZE MATRIX TO IDENTITY
26 * DAC MATRIX ADDRESS
27 *
28 *
29 ********************************************************************************
30 *
31 SUBR M$INIT,INIT INITIALIZE MATRIX
32 SUBR M$MUL,MUL MATRIX MULTIPLICATION
33 SUBR M$APLI,APLI APPLY MATRIX TO INTEGER VECTOR
34 SUBR M$APII,APII APPLY MATRIX TO PAIR OF INTEGERS
35 SUBR M$ROT,XXX ADD ROTATION TO MATRIX ARGUMENT
36 SUBR M$SCLE,SCLE SCALE MATRIX
37 *
38 REL
39 ORG '0
40 *
41 *
42 *
43 *
44 *
45 ********************************************************************************
46 *
47 *
48 INIT DAC **
49 LDX* INIT
50 *
51 LDA* INIT GET MATRIX BASE ADDRESS
52 STA IM11
53 ADD =6
54 STA IM22
55 IRS INIT
56 *
57 CRA
58 STA 2,1
59 STA 3,1
60 STA 4,1
61 STA 5,1
62 CALL FLOAT
63 DAC ONE
64 CALL H$22
65 IM11 DEC 0
66 CALL H$22
67 IM22 DEC 0
68 *
69 JMP* INIT
70 ONE DEC 1
71 *
72 *
73 ********************************************************************************
74 *
75 * C=A*B
76 *
77 * a11 a12 b11 b12 a11*b11 a21*b12
78 * a21 a22 b21 b22 a12*b21 a22*b22
79 *
80 * JST MUL
81 * DAC MC
82 * DAC MA
83 * DAC MB
84 *
85 MUL DAC **
86 LDX* MUL
87 *
88 LDA* MUL
89 STA PC11
90 ADD =2
91 STA PC12
92 ADD =2
93 STA PC21
94 ADD =2
95 STA PC22
96 IRS MUL
97 *
98 LDA* MUL
99 STA PA11
100 ADD =2
101 STA PA12
102 ADD =2
103 STA PA21
104 ADD =2
105 STA PA22
106 ADD =2
107 *
108 IRS MUL
109 *
110 LDA* MUL
111 STA PB11
112 ADD =2
113 STA PB12
114 ADD =2
115 STA PB21
116 ADD =2
117 STA PB22
118 ADD =2
119 *
120 IRS MUL
121 IRS MUL
122 *
123 *
124 * a11 a12 b11 b12 a11*b11 a21*b12
125 * a21 a22 b21 b22 a12*b21 a22*b22
126 *
127 CALL L$22 LOAD REAL
128 PA11 DAC 0
129 CALL M$22 MULTIPLY
130 PB11 DAC 0
131 CALL H$22 STORE
132 PC11 DEC 0
133 *
134 CALL L$22
135 PA21 DEC 0
136 CALL M$22
137 PB12 DEC 0
138 CALL H$22
139 PC12 DEC 0
140 *
141 CALL L$22
142 PA12 DEC 0
143 CALL M$22
144 PB21 DEC 0
145 CALL H$22
146 PC21 DEC 0
147 *
148 CALL L$22
149 PA22 DEC 0
150 CALL M$22
151 PB22 DEC 0
152 CALL H$22
153 PC22 DEC 0
154 *
155 *
156 JMP* MUL
157 *
158 ********************************************************************************
159 *
160 *
161 SCLE DAC ** SCALE MATRIX
162 LDX* SCLE
163 *
164 LDA* SCLE GET MATRIX BASE ADDRESS
165 STA SM11
166 STA TM11
167 ADD =6
168 STA SM22
169 STA TM22
170 IRS SCLE
171 LDA* SCLE
172 STA SX
173 STA SY
174 IRS SCLE TALLY RETURN ADDRESS
175 *
176 CALL L$22
177 SM11 DAC 0
178 CALL M$22
179 SX DAC 0
180 CALL H$22
181 TM11 DAC 0
182 *
183 CALL L$22
184 SM22 DAC 0
185 CALL M$22
186 SY DAC 0
187 CALL H$22
188 TM22 DAC 0
189 *
190 JMP* SCLE
191 *
192 *
193 *
194 *
195 ********************************************************************************
196 *
197 *
198 * Apply Pair of integers and round
199 *
200 * JST M$APII
201 * DAC MATRIX
202 * DAC X
203 * DAC Y
204 * DAC 0
205 *
206 APII DAC **
207 *
208 LDA* APII
209 STA MP11
210 ADD =2
211 STA MP12
212 ADD =2
213 STA MP21
214 ADD =2
215 STA MP22
216 IRS APII
217 *
218 LDA* APII
219 STA XP1
220 STA XP2
221 IRS APII
222 LDA* APII
223 STA YP1
224 STA YP2
225 IRS APII
226 IRS APII
227 JST APL CALL REAL ROUTINE
228 JMP* APII
229 *
230 ********************************************************************************
231 *
232 *
233 * Apply to integer vector and round
234 *
235 * JST M$APLI
236 * DAC MATRIX
237 * DAC X Y MUST FOLLOW IN NEXT LOCATION!
238 *
239 APLI DAC **
240 *
241 LDA* APLI
242 STA MP11
243 ADD =2
244 STA MP12
245 ADD =2
246 STA MP21
247 ADD =2
248 STA MP22
249 IRS APLI
250 *
251 LDA* APLI
252 STA XP1
253 STA XP2
254 AOA
255 STA YP1
256 STA YP2
257 IRS APLI
258 IRS APLI
259 JST APL
260 JMP* APLI
261 *
262 *
263 ****************************************
264 *
265 *
266 APL DAC ** REAL APPLY ROUTINE
267 *
268 CALL FLOAT LOAD SINGLE PRECISION FLOAT FROM 1-WORD INTEGER
269 XP1 DAC 0
270 CALL M$22 MULTIPLY FLOAT*FLOAT
271 MP11 DAC 0
272 CALL H$22 STORE FLOAT
273 DAC TMP
274 CALL FLOAT
275 YP1 DAC 0
276 CALL M$22
277 MP12 DAC 0
278 CALL A$22
279 DAC TMP
280 JST RND ROUND AND CONVERT TO INTEGER
281 STA PA21 STORE NEW X VALUE INTO TEMPORARY LOCATION
282 ****
283 CALL FLOAT
284 XP2 DAC 0
285 CALL M$22
286 MP21 DAC 0
287 CALL H$22
288 DAC TMP
289 *
290 CALL FLOAT
291 YP2 DAC 0
292 CALL M$22
293 MP22 DAC 0
294 CALL A$22
295 DAC TMP
296 JST RND NOW INTEGER IN AC
297 STA* YP1 STORE NEW Y VALUE
298 *
299 LDA PA21
300 STA* XP1
301 JMP* APL RETURN TO CALLER.
302 *
303 ****************************************
304 *
305 RND DAC ** ROUND A/B AND RETURN WITH INTEGER IN A
306 CALL A$22 ADD 0.5
307 DAC HLF
308 CALL C$21 CONVERT TO INTEGER
309 NOP
310 JMP* RND
311 HLF OCT '040100 CONSTANT 0.5
312 OCT '000000
313 *
314 ****************************************
315 *
316 TMP BSS 2
317 *
318 *
319 ********************************************************************************
320 *
321 *
322 *
323 *
324 *
325 *
326 *
327 *
328 *
329 *
330 *
331 *
332 *
333 *
334 *
335 *
336 *
337 *
338 *
339 *
340 *
341 *
342 *
343 *
344 *
345 *
346 *
347 *
348 *
349 *
350 *
351 *
352 *
353 *
354 *
355 *
356 *
357 *
358 *
359 *
360 *
361 *
362 *
363 *
364 *
365 *
366 *
367 *
368 *
369 *
370 *
371 *
372 *
373 *
374 *
375 *
376 *
377 *
378 *
379 *
380 *
381 *
382 *
383 *
384 *
385 *
386 *
387 *
388 *
389 *
390 *
391 *
392 *
393 *
394 *
395 *
396 *
397 *
398 *
399 *
400 *
401 *
402 *
403 *
404 *
405 *
406 *
407 *
408 *
409 *
410 ********************************************************************************
411 *
412 END
413 *
414 ********************************************************************************
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517