*** empty log message ***
[h316.git] / lib / hachti / src / pl$mv.asm
CommitLineData
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*
eabafcca 30* PROVIDE DRAWING AND COORDINATE TRANSFORMATION
31* ROUTINES FOR INCREMENTAL PLOTTERS
8fac3a64 32*
33*
34* STORAGE:
35*
36* ??? (OCTAL)
37* ??? (DECIMAL)
38*
39*
40* USAGE
41*
42* CALL PL$RST - SET VIRTUAL PLOT POSITION TO ZERO
43*
44* CALL PL$MV - MOVE TO POINT SPECIFIED
45* DAC XN BY XN
46* DAC YN AND YN VALUE
47* DAC 0
48*
49* CALL PL$LN - DRAW LINE AND LEAVE PEN DOWN
50* DAC X1
51* DAC Y1
52* DAC X2
53* DAC Y2
54* DAC 0
55*
56* CALL PL$RMR - MOVE ORIGIN RELATIVELY
57* DAC DX
58* DAC DY
59* DAC 0
60*
61* CALL PL$SCL - SCALE TRANSFORMATION
62* DAC SCALE SCALE FACTOR, FLOAT
63* DAC 0
64*
65* CALL PL$IDN - RESET TRANSFORMATION MATRIX
66*
67********************************************************************************
68*
69*
70 SUBR PL$MV,MOVE
eabafcca 71 SUBR PL$MVR,MVR
8fac3a64 72 SUBR PL$RST,RST
73 SUBR PL$LN,LINE
cd1f85ce 74 SUBR LINE
8fac3a64 75 SUBR PL$RMR,RMR
eabafcca 76 SUBR PL$X,UX
77 SUBR PL$Y,UY
78 SUBR PL$MAT,ATRA
8fac3a64 79 SUBR PL$SCL,SCLE
eabafcca 80 SUBR PL$SCI,SCLI
8eb88117 81 SUBR PL$ROT,ROT
eabafcca 82 SUBR PL$ROI,ROTI
83 SUBR PL$PUS,PUSH
84 SUBR PL$POP,POP
85 SUBR PL$INI,INIT
8fac3a64 86*
87*
88*
89 REL THIS IS A RELOCATABLE OBJECT
90 ORG '0
91*
eabafcca 92*
8fac3a64 93********************************************************************************
eabafcca 94*
95**** PL$MVR - MOVE PEN RELATIVELY
96*
97MVR DAC **
98*
99 LDA* MVR
100 STA TMPX
101 IRS MVR
102 LDA* MVR
103 STA TMPY
104 IRS MVR
105*
106 LDA* TMPX
107* CALL OCT
108 ADD XU
109 STA XU
110*
111 LDA* TMPY
112* CALL OCT
113 ADD YU
114 STA YU
115*
116 IRS RELA SET FLAG
117 NOP
118 IRS MVR
119 JMP* MVR RETURN
120*
121*
122*
123**** PL$INI - GRAPHICS INITIALISATION
124*
125* THIS ROUTINE SETS THE HARDWARE ORIGIN TO THE CURRENT PlOTTER POSITION.
126* IT ALSO INITIALISES THE TRANSFORMATION.
127*
128****************************************
129*
130INIT DAC **
131 CRA
132 STA XU
133 STA YU
134 STA X
135 STA Y
136 STA RELA
137 CALL T$INIT
138 DAC ATRA
139 JMP* INIT
140*
141*
142**** PL$PUS - PUSH GRAPHIC CONTEXT ONTO THE STACK
143*
144PUSH DAC ** ENTRY
145 LDA* PUSH
146 STA SD1
147 IRS PUSH
148 CALL S$PUSM PUSH MEMORY ROUTINE
149SD1 DAC **
150 DAC ATRA
151 DEC 12 12 WORDS OF DATA.
152 JMP* PUSH
153*
154*
155********************************************************************************
156*
157*
158**** PL$POP - POP GRAPHIC CONTEXT FROM THE STACK
159*
160POP DAC ** ENTRY
161 LDA* POP
162 STA SD2
163 IRS POP
164 CALL S$POPM POP MEMORY ROUTINE
165SD2 DAC **
166 DAC ATRA
167 DEC 12 12 WORDS OF DATA.
168 JMP* POP
169*
170*
171* *******************************************************************************
8fac3a64 172*
eabafcca 173*
174**** PL$LN - DRAW A LINE
175*
176LINE DAC 0 DRAW A LINE FROM NEAREST STARTING POINT
8fac3a64 177 LDA* LINE X1
eabafcca 178 STA X1P
8eb88117 179 IRS LINE
eabafcca 180 LDA* LINE Y1
181 STA Y1P
8fac3a64 182 IRS LINE
183 LDA* LINE X2
eabafcca 184 STA X2P
8fac3a64 185 IRS LINE
186 LDA* LINE Y2
eabafcca 187 STA Y2P
8fac3a64 188 IRS LINE TALLY RETURN ADDRESS
8fac3a64 189 IRS LINE AGAIN FOR FORTRAN IV COMPATIBILITY
eabafcca 190*
191 CALL T$APII APPLY MATRIX
192 DAC ATRA
8eb88117 193 DAC X1
eabafcca 194 DAC Y1
195X1P DAC **
196Y1P DAC **
8fac3a64 197 DAC 0
eabafcca 198*
199 CALL T$APII APPLY MATRIX
200 DAC ATRA
8eb88117 201 DAC X2
eabafcca 202 DAC Y2
203X2P DAC **
204Y2P DAC **
8fac3a64 205 DAC 0
8eb88117 206*
207*
8fac3a64 208 LDA X
8eb88117 209 SUB X1
8fac3a64 210 SPL SKIP IF SIGN PLUS
211 TCA TWO'S COMPLEMENT IF NEEDED
212 STA D1
213 LDA Y
8eb88117 214 SUB Y1
8fac3a64 215 SPL
216 TCA
217 ADD D1
218 STA D1
219*
220 LDA X
8eb88117 221 SUB X2
8fac3a64 222 SPL SKIP IF SIGN PLUS
223 TCA TWO'S COMPLEMENT IF NEEDED
224 STA D2
225 LDA Y
8eb88117 226 SUB Y2
8fac3a64 227 SPL
228 TCA
229 ADD D2
230 CAS D1
231 JMP D2BG D2 IS BIGGER!
232 NOP
233*
8eb88117 234D1BG LDA X2 DIFFERENCE 1 IS BIGGER, SO START AT POINT X2,Y2
8fac3a64 235 STA XA
8eb88117 236 LDA Y2
8fac3a64 237 STA YA
8eb88117 238 LDA X1
8fac3a64 239 STA XB
8eb88117 240 LDA Y1
8fac3a64 241 STA YB
242 JMP WOKI WORK!
243*
8eb88117 244D2BG LDA X1 DIFFERENCE 2 IS BIGGER, SO START AT POINT X1,Y1
8fac3a64 245 STA XA
8eb88117 246 LDA Y1
8fac3a64 247 STA YA
8eb88117 248 LDA X2
8fac3a64 249 STA XB
8eb88117 250 LDA Y2
8fac3a64 251 STA YB
252*
253WOKI LDA X TEST IF STARTING POINT IST CURRENT POSITION
254 CAS XA
255 JMP MV1
256 JMP *+2
257 JMP MV1
258 LDA Y
259 CAS YA
260 JMP MV1
261 JMP *+2
262 JMP MV1
263 JMP NM1
264*
265MV1 CALL PL$PU MOVE TO THE STARTING POSITION
266 LDA XA
267 STA XN
268 LDA YA
269 STA YN
270 JST RMOV REAL MOVE
271*
272NM1 CALL PL$PD WE ARE AT BEGINNING OF LINE
273 LDA XB
274 STA XN
275 LDA YB
276 STA YN
277 JST RMOV REAL MOVE
278 JMP* LINE END OF THE LINE :-)
279*
eabafcca 280*
8fac3a64 281********************************************************************************
282*
eabafcca 283**** MAKE CURRENT X AND Y THE ORIGIN
8eb88117 284*
eabafcca 285RST DAC **
286*
287**** FIRST TRANSLATE THE CURRENT USER POSITION:
288 CALL T$TRAN
289 DAC ATRA
290 DAC XU
291 DAC YU
292 DAC 0
8fac3a64 293 CRA
eabafcca 294 STA XU
295 STA YU
296*
8fac3a64 297 JMP* RST
298*
eabafcca 299*
300********************************************************************************
301*
302*
303**** PL$MV - BASIC MOVE ROUTINE
304*
8fac3a64 305MOVE DAC ** MOVE YA!
306*
8fac3a64 307 LDX MOVE GET PARAMETERS
308 LDA* 0,1 X VALUE
eabafcca 309 STA XU
8fac3a64 310 STA XN
311 LDA* 1,1 Y VALUE
eabafcca 312 STA YU
8fac3a64 313 STA YN
314 LDA MOVE
315 ADD =3
316 STA MOVE CORRECT RETURN ADDRESS
317*
eabafcca 318 CALL T$APII APPLY TRANSFORMATION MATRIX TO POSITION
319 DAC ATRA
8fac3a64 320 DAC XN
eabafcca 321 DAC YN
322 DAC XN
323 DAC YN
8fac3a64 324 DAC 0
325*
326 JST RMOV CALL INTO REAL MOVE SUBROUTINE
327 JMP* MOVE RETURN
328*
329****************************************
330*
331RMOV DAC ** REAL MOVE SUBROUTINE
332 LDA XN
333 SUB X
334 STA DX
335 LDA YN
336 SUB Y
337 STA DY
338*
339 LDA DX
340 SMI
341 JMP DXP DX POSITIVE
342* DX NEGATIVE
343 TCA
344 STA DX NOW, DX IS POSITIVE!
345 LDA ML
346 STA STPX
347 LDA MUL
348 STA DIYP
349 LDA MDL
350 STA DIYN
351 JMP DXNP
352DXP LDA MR
353 STA STPX
354 LDA MUR
355 STA DIYP
356 LDA MDR
357 STA DIYN
358 JMP DXNP
359*
360DXNP LDA DY
361 SMI
362 JMP DYP DY POSITIVE
363* DY NEGATIVE
364 TCA
365 STA DY NOW, DY IS POSITIVE!
366 LDA MD
367 STA STPY
368 LDA DIYN
369 STA STPD
370 JMP DYNP
371DYP LDA MU
372 STA STPY
373 LDA DIYP
374 STA STPD
375*
376DYNP LDA DX
377 CAS DY
378 JMP XGTY DX GREATER DY
379YGTX NOP DY GREATER OR EQUAL DX
380 LDA STPY
381 STA STPL
382 LDA STPX
383 STA STPS
384 LDA DX
385 STA DS
eabafcca 386 STA DS0
8fac3a64 387 LDA DY
388 STA DL
eabafcca 389 STA DL0
8fac3a64 390 JMP GTE
391*
392XGTY LDA STPY
393 STA STPS
394 LDA STPX
395 STA STPL
396 LDA DX
397 STA DL
eabafcca 398 STA DL0
8fac3a64 399 LDA DY
eabafcca 400 STA DS
401 STA DS0
402*
403****************************************
404*
405* NOW ALL STEP ROUTINES, DL0, DS0, DL0, DS0 ETC.
406* ARE READY TO USE.
407*
408GTE LDA DL0 LONG DISTANCE
8fac3a64 409 LGR 1 DIVIDE BY TWO
410 STA ERR INITIALIZE ERROR COUNTER
411*
412*
eabafcca 413*** MOVE LOOP
414*
415LOOP LDA DL LONG DISTANCE
8fac3a64 416 SNZ
417 JMP FNSH END OF WORK - HOPE SO....
eabafcca 418*
419 SUB =1 DECREMENT LONG DISTANCE
8fac3a64 420 STA DL
eabafcca 421*
422 LDA ERR ERROR COUNTER
423 SUB DS0
8fac3a64 424 STA ERR
425 SMI SKIP IF NOT OVERFLOWN (MINUS)
426 JMP NDIA NO DIAG STEP
eabafcca 427*
428*** DIAG STEP TO DO
429*
430 ADD DL0
8fac3a64 431 STA ERR
432 LDA DS
433 SUB =1
434 STA DS
eabafcca 435 JST* STPD DO DIAGONAL STEP
436 JMP LOOP RELOOP
437*
438*** NO DIAGONAL STEP TO DO
439*
440NDIA JST* STPL DO LONG DIRECTION STEP
8fac3a64 441STEN JMP LOOP RELOOP
442*
eabafcca 443*
444*** END OF LOOP
8fac3a64 445FNSH LDA XN
446 STA X
447 LDA YN
448 STA Y
449 JMP* RMOV END OF THE ROUTINE
450*
451*
452********************************************************************************
453*
454*
eabafcca 455**** SCALE OUTPUT
8fac3a64 456*
457SCLE DAC **
458 LDA* SCLE
459 STA FCTR
460 IRS SCLE
eabafcca 461 CALL T$SCLE
462 DAC ATRA
8fac3a64 463FCTR DAC 0
8eb88117 464 DAC 0
465 JMP* SCLE
466*
467*
eabafcca 468********************************************************************************
8eb88117 469*
470*
eabafcca 471**** ROTATE - RADIANT
472*
8eb88117 473ROT DAC **
474 LDA* ROT
475 STA FCR2
476 IRS ROT
eabafcca 477 CALL T$ROT
478 DAC ATRA
8eb88117 479FCR2 DAC 0
480 DAC 0
481 JMP* ROT
8fac3a64 482*
483*
484********************************************************************************
eabafcca 485*
486*
487**** RLUP - UPDATE LATENT POSITION TO REAL POSITION
488*
489RLUP DAC **
490 LDA RELA LOAD FLAG
491 SNZ
492 JMP* RLUP NOTHING TO DO
493 JST MOVE
494 DAC XU
495 DAC YU
496 DAC 0
497 CRA
498 STA RELA CLEAR FLAG
499 JMP* RLUP
500*
501*
502********************************************************************************
503*
504*
505**** ROTATE - INTEGER DEGREES
506*
507ROTI DAC **
508 LDA* ROTI
509 STA FCR3
510 IRS ROTI
511 CALL T$ROTI
512 DAC ATRA
513FCR3 DAC 0
514 DAC 0
515 JMP* ROTI
516*
517*
518********************************************************************************
519*
520*
521**** SCALE - INTEGER PERCENTS
522*
523SCLI DAC **
524 LDA* SCLI
525 STA FCR4
526 IRS SCLI
527*
528 CALL T$SCLI
529 DAC ATRA
530FCR4 DAC 0
531 DAC 0
532 JMP* SCLI
533*
534********************************************************************************
8fac3a64 535*
536*** MOVE COORDINATE SYSTEM RELATIVELY
537*
538RMR DAC **
539 LDA* RMR
eabafcca 540 STA XTR
8fac3a64 541 IRS RMR
542 LDA* RMR
eabafcca 543 STA YTR
8fac3a64 544 IRS RMR
545 IRS RMR
eabafcca 546*
547 CALL T$TRAN
548 DAC ATRA
549XTR DAC **
550YTR DAC **
551 DAC 0
552*
8fac3a64 553 JMP* RMR
8fac3a64 554*
eabafcca 555*
8fac3a64 556**********************
557*
558* VARIABLES
559*
eabafcca 560X DEC 0 HARDWARE VIEW PEN POSITION, X VALUE
561Y DEC 0 HARDWARE VIEW PEN POSITION, Y VALUE
8fac3a64 562XN DEC 0 NEW PEN POSITION, X VALUE
563YN DEC 0 NEW PEN POSITION, Y VALUE
564DX DEC 0 X DIFFERENCE TO GO
565DY DEC 0 Y DIFFERENCE TO GO
eabafcca 566TMPX DEC 0 TEMPORARY X VALUE
567TMPY DEC 0 TEMPORARY Y VALUE
8fac3a64 568*
eabafcca 569DL0 DEC 0 INITIAL LONG DISTANCE
570DS0 DEC 0 INITIAL SHORT DISTANCE
571DL DEC 0 LONG DISTANCE
572DS DEC 0 SHORT DISTANCE
8fac3a64 573STPL DAC ** ROUTINE TO LONG DISTANCE STEP
574STPS DAC ** ROUTINE TO SHORT DISTANCE STEP
575STPD DAC ** ROUTINE TO DIAGONAL STEP
576ERR DEC 0 ERROR COUNTER
577*
578STPX DAC ** X STEP ROUTINE
579STPY DAC ** Y STEP ROUTINE
580DIYP DAC ** DIAGONAL X-DIR+UP STEP ROUTINE
581DIYN DAC ** DIAGONAL X-DIR+DOWN STEP ROUTINE
8fac3a64 582*
8eb88117 583X1 DEC 0 LINE START POINT, X
584Y1 DEC 0 LINE START POINT, Y
585X2 DEC 0 LINE END POINT, X
586Y2 DEC 0 LINE END POINT, Y
587*
588XA DEC 0 REAL FIRST POINT X COORDINATE
589YA DEC 0 REAL FIRST POINT Y COORDINATE
590XB DEC 0 REAL SECOND POINT X COORDINATE
591YB DEC 0 REAL SECOND POINT Y COORDINATE
592D1 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P1
593D2 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P2
eabafcca 594RELA DEC 0 FLAG INDICATING THAT RELATIVE POSITIONING HAS OCCURED
8eb88117 595*
596**** GLUE IN THE MOVEMENT ROUTINES
597*
8fac3a64 598MU XAC PL$U
599MD XAC PL$D
600ML XAC PL$L
601MR XAC PL$R
602MUL XAC PL$UL
603MUR XAC PL$UR
604MDL XAC PL$DL
605MDR XAC PL$DR
606*
607********************************************************************************
eabafcca 608*
609*
610**** AFFINE TRASFORMATION DATA AND REST OF GRAPHIC CONTEXT
611*
612* OLD PROGRAMS DON'T HAVE TO WORRY ABOUT THAT. NEWER PROGRAMS SHOULD.
613*
8fac3a64 614*** HERE THE TRANSFORMATION MATRIX, INITIALLY NO TRANSFORMATION, OLD PROGRAMS
615*** DON'T HAVE TO CARE ABOUT THAT (HOPE SO)
eabafcca 616ATRA OCT '040300 A11 (CONSTANT 1.0)
8fac3a64 617 OCT '000000
618 OCT '000000 A12
619 OCT '000000
620 OCT '000000 A21
621 OCT '000000
eabafcca 622 OCT '040300 A22 (CONSTANT 1.0)
8fac3a64 623 OCT '000000
eabafcca 624*
625VECT DEC 0 X TRANSLATION
626 DEC 0 Y TRANSLATION
627XU DEC 0 USER VIEW PEN POSITION, X VALUE
628YU DEC 0 USER VIEW PEN POSITION, Y VALUE
629*
630VECX EQU VECT
631VECY EQU VECT+1
8fac3a64 632*
633********************************************************************************
634*
635*
636 END