8fac3a64 |
1 | * (PL$MV) REV 1.0 INCREMENTAL PLOTTER ROUTINES |
2 | * |
3 | * |
4 | * PROGRAM TITLE: |
5 | * PL$MV (PL$MV,PL$RST,PL$LN,PL$X,PL$Y,PL$RMR) |
6 | * |
7 | * PLOTTER MOVEMENT ROUTINES |
8 | * |
9 | * |
10 | * REVISIONS: |
11 | * 1.0 (2007-05-28) - INITIAL REVISION |
12 | * |
13 | * 1.1 (2007-11-08) - ADDED INTELLIGENT LINE DRAWING ROUTINE |
14 | * |
15 | * 1.2 (2007-12-15) - ADDED PL$X and PL$Y POSITION EXPORTS |
16 | * ADDED PL$RMR TRANSLATIION ROUTINE |
17 | * |
18 | * 1.3 (2007-12-19) - ADDED TRANSFORMATION MATRIX SUPPORT TO PL$MV. |
19 | * MATRIX PL$MAT IS NOW APPLIED BEFORE |
20 | * ANY MOVE INSTRUCTION. |
21 | * |
22 | * |
23 | * AUTHOR: |
24 | * |
25 | * PHILIPP HACHTMANN |
26 | * |
27 | * |
28 | * PURPOSE: |
29 | * |
30 | * PROVIDE SIMPLE LIBRARY FUNCTIONS FOR INCREMENTAL PLOTTERS |
31 | * |
32 | * |
33 | * STORAGE: |
34 | * |
35 | * ??? (OCTAL) |
36 | * ??? (DECIMAL) |
37 | * |
38 | * |
39 | * USAGE |
40 | * |
41 | * CALL PL$RST - SET VIRTUAL PLOT POSITION TO ZERO |
42 | * |
43 | * CALL PL$MV - MOVE TO POINT SPECIFIED |
44 | * DAC XN BY XN |
45 | * DAC YN AND YN VALUE |
46 | * DAC 0 |
47 | * |
48 | * CALL PL$LN - DRAW LINE AND LEAVE PEN DOWN |
49 | * DAC X1 |
50 | * DAC Y1 |
51 | * DAC X2 |
52 | * DAC Y2 |
53 | * DAC 0 |
54 | * |
55 | * CALL PL$RMR - MOVE ORIGIN RELATIVELY |
56 | * DAC DX |
57 | * DAC DY |
58 | * DAC 0 |
59 | * |
60 | * CALL PL$SCL - SCALE TRANSFORMATION |
61 | * DAC SCALE SCALE FACTOR, FLOAT |
62 | * DAC 0 |
63 | * |
64 | * CALL PL$IDN - RESET TRANSFORMATION MATRIX |
65 | * |
66 | ******************************************************************************** |
67 | * |
68 | * |
69 | SUBR PL$MV,MOVE |
70 | SUBR PL$RST,RST |
71 | SUBR PL$LN,LINE |
72 | SUBR PL$RMR,RMR |
73 | SUBR PL$X,X |
74 | SUBR PL$Y,Y |
75 | SUBR PL$MAT,MTRX |
76 | SUBR PL$SCL,SCLE |
8eb88117 |
77 | SUBR PL$ROT,ROT |
8fac3a64 |
78 | SUBR PL$IDN,IDEN |
79 | * |
80 | * |
81 | * |
82 | REL THIS IS A RELOCATABLE OBJECT |
83 | ORG '0 |
84 | * |
85 | ******************************************************************************** |
86 | * |
87 | LINE DAC 0 DRAW A LINE FROM NEAR STARTING POINT |
88 | LDA* LINE X1 |
8eb88117 |
89 | STA X1 |
90 | LDA* X1 |
91 | STA X1 |
92 | IRS LINE |
8fac3a64 |
93 | LDA* LINE Y1 |
8eb88117 |
94 | STA Y1 |
95 | LDA* Y1 |
96 | STA Y1 |
8fac3a64 |
97 | IRS LINE |
98 | LDA* LINE X2 |
8eb88117 |
99 | STA X2 |
100 | LDA* X2 |
101 | STA X2 |
8fac3a64 |
102 | IRS LINE |
103 | LDA* LINE Y2 |
8eb88117 |
104 | STA Y2 |
105 | LDA* Y2 |
106 | STA Y2 |
8fac3a64 |
107 | IRS LINE TALLY RETURN ADDRESS |
8fac3a64 |
108 | IRS LINE AGAIN FOR FORTRAN IV COMPATIBILITY |
8eb88117 |
109 | * |
110 | * |
111 | CALL M$APLI |
8fac3a64 |
112 | DAC MTRX |
8eb88117 |
113 | DAC X1 |
8fac3a64 |
114 | DAC 0 |
8eb88117 |
115 | * |
116 | CALL M$APLI |
8fac3a64 |
117 | DAC MTRX |
8eb88117 |
118 | DAC X2 |
8fac3a64 |
119 | DAC 0 |
8fac3a64 |
120 | * |
8eb88117 |
121 | * |
122 | * |
8fac3a64 |
123 | LDA X |
8eb88117 |
124 | SUB X1 |
8fac3a64 |
125 | SPL SKIP IF SIGN PLUS |
126 | TCA TWO'S COMPLEMENT IF NEEDED |
127 | STA D1 |
128 | LDA Y |
8eb88117 |
129 | SUB Y1 |
8fac3a64 |
130 | SPL |
131 | TCA |
132 | ADD D1 |
133 | STA D1 |
134 | * |
135 | LDA X |
8eb88117 |
136 | SUB X2 |
8fac3a64 |
137 | SPL SKIP IF SIGN PLUS |
138 | TCA TWO'S COMPLEMENT IF NEEDED |
139 | STA D2 |
140 | LDA Y |
8eb88117 |
141 | SUB Y2 |
8fac3a64 |
142 | SPL |
143 | TCA |
144 | ADD D2 |
145 | CAS D1 |
146 | JMP D2BG D2 IS BIGGER! |
147 | NOP |
148 | * |
8eb88117 |
149 | D1BG LDA X2 DIFFERENCE 1 IS BIGGER, SO START AT POINT X2,Y2 |
8fac3a64 |
150 | STA XA |
8eb88117 |
151 | LDA Y2 |
8fac3a64 |
152 | STA YA |
8eb88117 |
153 | LDA X1 |
8fac3a64 |
154 | STA XB |
8eb88117 |
155 | LDA Y1 |
8fac3a64 |
156 | STA YB |
157 | JMP WOKI WORK! |
158 | * |
8eb88117 |
159 | D2BG LDA X1 DIFFERENCE 2 IS BIGGER, SO START AT POINT X1,Y1 |
8fac3a64 |
160 | STA XA |
8eb88117 |
161 | LDA Y1 |
8fac3a64 |
162 | STA YA |
8eb88117 |
163 | LDA X2 |
8fac3a64 |
164 | STA XB |
8eb88117 |
165 | LDA Y2 |
8fac3a64 |
166 | STA YB |
167 | * |
168 | WOKI LDA X TEST IF STARTING POINT IST CURRENT POSITION |
169 | CAS XA |
170 | JMP MV1 |
171 | JMP *+2 |
172 | JMP MV1 |
173 | LDA Y |
174 | CAS YA |
175 | JMP MV1 |
176 | JMP *+2 |
177 | JMP MV1 |
178 | JMP NM1 |
179 | * |
180 | MV1 CALL PL$PU MOVE TO THE STARTING POSITION |
181 | LDA XA |
182 | STA XN |
183 | LDA YA |
184 | STA YN |
185 | JST RMOV REAL MOVE |
186 | * |
187 | NM1 CALL PL$PD WE ARE AT BEGINNING OF LINE |
188 | LDA XB |
189 | STA XN |
190 | LDA YB |
191 | STA YN |
192 | JST RMOV REAL MOVE |
193 | JMP* LINE END OF THE LINE :-) |
194 | * |
8fac3a64 |
195 | * |
196 | * |
197 | ******************************************************************************** |
198 | * |
8eb88117 |
199 | **** MOVE PEN ROUTINE |
200 | * |
8fac3a64 |
201 | RST DAC ** SET POINT ZERO |
202 | CRA |
203 | STA Y |
204 | IMA X |
205 | JMP* RST |
206 | * |
207 | ABS |
208 | ORG '3000 |
209 | * |
210 | MOVE DAC ** MOVE YA! |
211 | * |
212 | * JMP* MOVE |
213 | * |
214 | LDX MOVE GET PARAMETERS |
215 | LDA* 0,1 X VALUE |
216 | STA XN |
217 | LDA* 1,1 Y VALUE |
218 | STA YN |
219 | LDA MOVE |
220 | ADD =3 |
221 | STA MOVE CORRECT RETURN ADDRESS |
222 | * |
223 | CALL M$APLI APPLY TRANSFORMATION MATRIX TO POSITION |
224 | DAC MTRX |
225 | DAC XN |
226 | DAC 0 |
227 | * |
228 | JST RMOV CALL INTO REAL MOVE SUBROUTINE |
229 | JMP* MOVE RETURN |
230 | * |
231 | **************************************** |
232 | * |
233 | RMOV DAC ** REAL MOVE SUBROUTINE |
234 | LDA XN |
235 | SUB X |
236 | STA DX |
237 | LDA YN |
238 | SUB Y |
239 | STA DY |
240 | * |
241 | LDA DX |
242 | SMI |
243 | JMP DXP DX POSITIVE |
244 | * DX NEGATIVE |
245 | TCA |
246 | STA DX NOW, DX IS POSITIVE! |
247 | LDA ML |
248 | STA STPX |
249 | LDA MUL |
250 | STA DIYP |
251 | LDA MDL |
252 | STA DIYN |
253 | JMP DXNP |
254 | DXP LDA MR |
255 | STA STPX |
256 | LDA MUR |
257 | STA DIYP |
258 | LDA MDR |
259 | STA DIYN |
260 | JMP DXNP |
261 | * |
262 | DXNP LDA DY |
263 | SMI |
264 | JMP DYP DY POSITIVE |
265 | * DY NEGATIVE |
266 | TCA |
267 | STA DY NOW, DY IS POSITIVE! |
268 | LDA MD |
269 | STA STPY |
270 | LDA DIYN |
271 | STA STPD |
272 | JMP DYNP |
273 | DYP LDA MU |
274 | STA STPY |
275 | LDA DIYP |
276 | STA STPD |
277 | * |
278 | DYNP LDA DX |
279 | CAS DY |
280 | JMP XGTY DX GREATER DY |
281 | YGTX NOP DY GREATER OR EQUAL DX |
282 | LDA STPY |
283 | STA STPL |
284 | LDA STPX |
285 | STA STPS |
286 | LDA DX |
287 | STA DS |
288 | LDA DY |
289 | STA DL |
290 | JMP GTE |
291 | * |
292 | XGTY LDA STPY |
293 | STA STPS |
294 | LDA STPX |
295 | STA STPL |
296 | LDA DX |
297 | STA DL |
298 | LDA DY |
299 | STA DS |
300 | * |
301 | GTE LDA DL LONG DISTANCE |
302 | LGR 1 DIVIDE BY TWO |
303 | STA ERR INITIALIZE ERROR COUNTER |
304 | * |
305 | * |
306 | * |
307 | LOOP LDA DL |
308 | SNZ |
309 | JMP FNSH END OF WORK - HOPE SO.... |
310 | SUB =1 DECREMENT DL |
311 | STA DL |
312 | LDA ERR |
313 | SUB DS |
314 | STA ERR |
315 | SMI SKIP IF NOT OVERFLOWN (MINUS) |
316 | JMP NDIA NO DIAG STEP |
317 | ADD DL RELOAD |
318 | STA ERR |
319 | LDA DS |
320 | SUB =1 |
321 | STA DS |
322 | JST* STPD |
323 | JMP STEN END OF STEP |
324 | NDIA JST* STPL LONG DIR STEP ONLY |
325 | STEN JMP LOOP RELOOP |
326 | * |
327 | FNSH LDA XN |
328 | STA X |
329 | LDA YN |
330 | STA Y |
331 | JMP* RMOV END OF THE ROUTINE |
332 | * |
333 | * |
334 | ******************************************************************************** |
335 | * |
336 | * |
337 | IDEN DAC ** RESET TRANSFORMATION MATRIX |
338 | CALL M$INIT |
339 | DAC MTRX |
340 | JMP* IDEN |
341 | * |
342 | * |
343 | ******************************************************************************** |
344 | * |
345 | SCLE DAC ** |
346 | LDA* SCLE |
347 | STA FCTR |
348 | IRS SCLE |
349 | CALL M$SCLE |
350 | DAC MTRX |
351 | FCTR DAC 0 |
8eb88117 |
352 | DAC 0 |
353 | JMP* SCLE |
354 | * |
355 | * |
356 | * |
357 | * |
358 | ROT DAC ** |
359 | LDA* ROT |
360 | STA FCR2 |
361 | IRS ROT |
362 | CALL M$ROT |
363 | DAC MTRX |
364 | FCR2 DAC 0 |
365 | DAC 0 |
366 | JMP* ROT |
8fac3a64 |
367 | * |
368 | * |
369 | ******************************************************************************** |
370 | * |
371 | *** MOVE COORDINATE SYSTEM RELATIVELY |
372 | * |
373 | RMR DAC ** |
374 | LDA* RMR |
375 | STA PTR |
376 | LDA X |
377 | SUB* PTR |
378 | STA X |
379 | IRS RMR |
380 | LDA* RMR |
381 | STA PTR |
382 | LDA Y |
383 | SUB* PTR |
384 | STA Y |
385 | IRS RMR |
386 | IRS RMR |
387 | JMP* RMR |
388 | PTR DAC ** |
389 | * |
390 | * |
391 | ********************** |
392 | * |
393 | * VARIABLES |
394 | * |
395 | X DEC 0 PEN POSITION, X VALUE |
396 | Y DEC 0 PEN POSITION, Y VALUE |
397 | XN DEC 0 NEW PEN POSITION, X VALUE |
398 | YN DEC 0 NEW PEN POSITION, Y VALUE |
399 | DX DEC 0 X DIFFERENCE TO GO |
400 | DY DEC 0 Y DIFFERENCE TO GO |
401 | * |
402 | DL DEC 0 LONG DISTANCE NEGATIVE |
403 | DS DEC 0 SHORT DISTANCE NEGATIVE |
404 | STPL DAC ** ROUTINE TO LONG DISTANCE STEP |
405 | STPS DAC ** ROUTINE TO SHORT DISTANCE STEP |
406 | STPD DAC ** ROUTINE TO DIAGONAL STEP |
407 | ERR DEC 0 ERROR COUNTER |
408 | * |
409 | STPX DAC ** X STEP ROUTINE |
410 | STPY DAC ** Y STEP ROUTINE |
411 | DIYP DAC ** DIAGONAL X-DIR+UP STEP ROUTINE |
412 | DIYN DAC ** DIAGONAL X-DIR+DOWN STEP ROUTINE |
8fac3a64 |
413 | * |
8eb88117 |
414 | X1 DEC 0 LINE START POINT, X |
415 | Y1 DEC 0 LINE START POINT, Y |
416 | X2 DEC 0 LINE END POINT, X |
417 | Y2 DEC 0 LINE END POINT, Y |
418 | * |
419 | XA DEC 0 REAL FIRST POINT X COORDINATE |
420 | YA DEC 0 REAL FIRST POINT Y COORDINATE |
421 | XB DEC 0 REAL SECOND POINT X COORDINATE |
422 | YB DEC 0 REAL SECOND POINT Y COORDINATE |
423 | D1 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P1 |
424 | D2 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P2 |
425 | * |
426 | **** GLUE IN THE MOVEMENT ROUTINES |
427 | * |
8fac3a64 |
428 | MU XAC PL$U |
429 | MD XAC PL$D |
430 | ML XAC PL$L |
431 | MR XAC PL$R |
432 | MUL XAC PL$UL |
433 | MUR XAC PL$UR |
434 | MDL XAC PL$DL |
435 | MDR XAC PL$DR |
436 | * |
437 | ******************************************************************************** |
438 | * |
439 | *** HERE THE TRANSFORMATION MATRIX, INITIALLY NO TRANSFORMATION, OLD PROGRAMS |
440 | *** DON'T HAVE TO CARE ABOUT THAT (HOPE SO) |
441 | MTRX OCT '040300 A11 |
442 | OCT '000000 |
443 | OCT '000000 A12 |
444 | OCT '000000 |
445 | OCT '000000 A21 |
446 | OCT '000000 |
447 | OCT '040300 A22 |
448 | OCT '000000 |
449 | * |
450 | * |
451 | ******************************************************************************** |
452 | * |
453 | * |
454 | END |