*** 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*
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*
87LINE 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 149D1BG 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 159D2BG 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*
168WOKI 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*
180MV1 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*
187NM1 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 201RST DAC ** SET POINT ZERO
202 CRA
203 STA Y
204 IMA X
205 JMP* RST
206*
207 ABS
208 ORG '3000
209*
210MOVE 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*
233RMOV 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
254DXP LDA MR
255 STA STPX
256 LDA MUR
257 STA DIYP
258 LDA MDR
259 STA DIYN
260 JMP DXNP
261*
262DXNP 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
273DYP LDA MU
274 STA STPY
275 LDA DIYP
276 STA STPD
277*
278DYNP LDA DX
279 CAS DY
280 JMP XGTY DX GREATER DY
281YGTX 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*
292XGTY LDA STPY
293 STA STPS
294 LDA STPX
295 STA STPL
296 LDA DX
297 STA DL
298 LDA DY
299 STA DS
300*
301GTE LDA DL LONG DISTANCE
302 LGR 1 DIVIDE BY TWO
303 STA ERR INITIALIZE ERROR COUNTER
304*
305*
306*
307LOOP 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
324NDIA JST* STPL LONG DIR STEP ONLY
325STEN JMP LOOP RELOOP
326*
327FNSH LDA XN
328 STA X
329 LDA YN
330 STA Y
331 JMP* RMOV END OF THE ROUTINE
332*
333*
334********************************************************************************
335*
336*
337IDEN DAC ** RESET TRANSFORMATION MATRIX
338 CALL M$INIT
339 DAC MTRX
340 JMP* IDEN
341*
342*
343********************************************************************************
344*
345SCLE DAC **
346 LDA* SCLE
347 STA FCTR
348 IRS SCLE
349 CALL M$SCLE
350 DAC MTRX
351FCTR DAC 0
8eb88117 352 DAC 0
353 JMP* SCLE
354*
355*
356*
357*
358ROT DAC **
359 LDA* ROT
360 STA FCR2
361 IRS ROT
362 CALL M$ROT
363 DAC MTRX
364FCR2 DAC 0
365 DAC 0
366 JMP* ROT
8fac3a64 367*
368*
369********************************************************************************
370*
371*** MOVE COORDINATE SYSTEM RELATIVELY
372*
373RMR 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
388PTR DAC **
389*
390*
391**********************
392*
393* VARIABLES
394*
395X DEC 0 PEN POSITION, X VALUE
396Y DEC 0 PEN POSITION, Y VALUE
397XN DEC 0 NEW PEN POSITION, X VALUE
398YN DEC 0 NEW PEN POSITION, Y VALUE
399DX DEC 0 X DIFFERENCE TO GO
400DY DEC 0 Y DIFFERENCE TO GO
401*
402DL DEC 0 LONG DISTANCE NEGATIVE
403DS DEC 0 SHORT DISTANCE NEGATIVE
404STPL DAC ** ROUTINE TO LONG DISTANCE STEP
405STPS DAC ** ROUTINE TO SHORT DISTANCE STEP
406STPD DAC ** ROUTINE TO DIAGONAL STEP
407ERR DEC 0 ERROR COUNTER
408*
409STPX DAC ** X STEP ROUTINE
410STPY DAC ** Y STEP ROUTINE
411DIYP DAC ** DIAGONAL X-DIR+UP STEP ROUTINE
412DIYN DAC ** DIAGONAL X-DIR+DOWN STEP ROUTINE
8fac3a64 413*
8eb88117 414X1 DEC 0 LINE START POINT, X
415Y1 DEC 0 LINE START POINT, Y
416X2 DEC 0 LINE END POINT, X
417Y2 DEC 0 LINE END POINT, Y
418*
419XA DEC 0 REAL FIRST POINT X COORDINATE
420YA DEC 0 REAL FIRST POINT Y COORDINATE
421XB DEC 0 REAL SECOND POINT X COORDINATE
422YB DEC 0 REAL SECOND POINT Y COORDINATE
423D1 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P1
424D2 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P2
425*
426**** GLUE IN THE MOVEMENT ROUTINES
427*
8fac3a64 428MU XAC PL$U
429MD XAC PL$D
430ML XAC PL$L
431MR XAC PL$R
432MUL XAC PL$UL
433MUR XAC PL$UR
434MDL XAC PL$DL
435MDR 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)
441MTRX 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