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