*** 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********************************************************************************
23208140 68*
8fac3a64 69 SUBR PL$MV,MOVE
c6301d07 70 SUBR PL$RST,RST
23208140 71 SUBR PL$X,XU
72 SUBR PL$Y,YU
eabafcca 73 SUBR PL$MVR,MVR
8fac3a64 74 SUBR PL$LN,LINE
cd1f85ce 75 SUBR LINE
8fac3a64 76 SUBR PL$RMR,RMR
eabafcca 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
23208140 138 CALL PL$PU
eabafcca 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
23208140 477 IRS ROT
eabafcca 478 CALL T$ROT
479 DAC ATRA
8eb88117 480FCR2 DAC 0
481 DAC 0
482 JMP* ROT
8fac3a64 483*
484*
485********************************************************************************
eabafcca 486*
487*
488**** RLUP - UPDATE LATENT POSITION TO REAL POSITION
489*
490RLUP DAC **
491 LDA RELA LOAD FLAG
492 SNZ
493 JMP* RLUP NOTHING TO DO
494 JST MOVE
495 DAC XU
496 DAC YU
497 DAC 0
498 CRA
499 STA RELA CLEAR FLAG
500 JMP* RLUP
501*
502*
503********************************************************************************
504*
505*
506**** ROTATE - INTEGER DEGREES
507*
508ROTI DAC **
509 LDA* ROTI
510 STA FCR3
511 IRS ROTI
512 CALL T$ROTI
513 DAC ATRA
514FCR3 DAC 0
515 DAC 0
516 JMP* ROTI
517*
518*
519********************************************************************************
520*
521*
522**** SCALE - INTEGER PERCENTS
523*
524SCLI DAC **
525 LDA* SCLI
526 STA FCR4
527 IRS SCLI
528*
529 CALL T$SCLI
530 DAC ATRA
531FCR4 DAC 0
532 DAC 0
533 JMP* SCLI
534*
535********************************************************************************
8fac3a64 536*
537*** MOVE COORDINATE SYSTEM RELATIVELY
538*
539RMR DAC **
540 LDA* RMR
eabafcca 541 STA XTR
8fac3a64 542 IRS RMR
543 LDA* RMR
eabafcca 544 STA YTR
8fac3a64 545 IRS RMR
546 IRS RMR
eabafcca 547*
548 CALL T$TRAN
549 DAC ATRA
550XTR DAC **
551YTR DAC **
552 DAC 0
553*
8fac3a64 554 JMP* RMR
8fac3a64 555*
eabafcca 556*
8fac3a64 557**********************
558*
559* VARIABLES
560*
eabafcca 561X DEC 0 HARDWARE VIEW PEN POSITION, X VALUE
562Y DEC 0 HARDWARE VIEW PEN POSITION, Y VALUE
8fac3a64 563XN DEC 0 NEW PEN POSITION, X VALUE
564YN DEC 0 NEW PEN POSITION, Y VALUE
565DX DEC 0 X DIFFERENCE TO GO
566DY DEC 0 Y DIFFERENCE TO GO
eabafcca 567TMPX DEC 0 TEMPORARY X VALUE
568TMPY DEC 0 TEMPORARY Y VALUE
8fac3a64 569*
eabafcca 570DL0 DEC 0 INITIAL LONG DISTANCE
571DS0 DEC 0 INITIAL SHORT DISTANCE
572DL DEC 0 LONG DISTANCE
573DS DEC 0 SHORT DISTANCE
8fac3a64 574STPL DAC ** ROUTINE TO LONG DISTANCE STEP
575STPS DAC ** ROUTINE TO SHORT DISTANCE STEP
576STPD DAC ** ROUTINE TO DIAGONAL STEP
577ERR DEC 0 ERROR COUNTER
578*
579STPX DAC ** X STEP ROUTINE
580STPY DAC ** Y STEP ROUTINE
581DIYP DAC ** DIAGONAL X-DIR+UP STEP ROUTINE
582DIYN DAC ** DIAGONAL X-DIR+DOWN STEP ROUTINE
8fac3a64 583*
8eb88117 584X1 DEC 0 LINE START POINT, X
585Y1 DEC 0 LINE START POINT, Y
586X2 DEC 0 LINE END POINT, X
587Y2 DEC 0 LINE END POINT, Y
588*
589XA DEC 0 REAL FIRST POINT X COORDINATE
590YA DEC 0 REAL FIRST POINT Y COORDINATE
591XB DEC 0 REAL SECOND POINT X COORDINATE
592YB DEC 0 REAL SECOND POINT Y COORDINATE
593D1 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P1
594D2 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P2
eabafcca 595RELA DEC 0 FLAG INDICATING THAT RELATIVE POSITIONING HAS OCCURED
8eb88117 596*
597**** GLUE IN THE MOVEMENT ROUTINES
598*
8fac3a64 599MU XAC PL$U
600MD XAC PL$D
601ML XAC PL$L
602MR XAC PL$R
603MUL XAC PL$UL
604MUR XAC PL$UR
605MDL XAC PL$DL
606MDR XAC PL$DR
607*
608********************************************************************************
eabafcca 609*
610*
611**** AFFINE TRASFORMATION DATA AND REST OF GRAPHIC CONTEXT
612*
613* OLD PROGRAMS DON'T HAVE TO WORRY ABOUT THAT. NEWER PROGRAMS SHOULD.
614*
8fac3a64 615*** HERE THE TRANSFORMATION MATRIX, INITIALLY NO TRANSFORMATION, OLD PROGRAMS
616*** DON'T HAVE TO CARE ABOUT THAT (HOPE SO)
eabafcca 617ATRA OCT '040300 A11 (CONSTANT 1.0)
8fac3a64 618 OCT '000000
619 OCT '000000 A12
620 OCT '000000
621 OCT '000000 A21
622 OCT '000000
eabafcca 623 OCT '040300 A22 (CONSTANT 1.0)
8fac3a64 624 OCT '000000
eabafcca 625*
626VECT DEC 0 X TRANSLATION
627 DEC 0 Y TRANSLATION
628XU DEC 0 USER VIEW PEN POSITION, X VALUE
629YU DEC 0 USER VIEW PEN POSITION, Y VALUE
630*
631VECX EQU VECT
632VECY EQU VECT+1
8fac3a64 633*
634********************************************************************************
635*
636*
637 END