*** empty log message ***
[h316.git] / lib / hachti / src / pl$mv.asm
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
77 SUBR PL$IDN,IDEN
78 *
79 *
80 *
81 REL THIS IS A RELOCATABLE OBJECT
82 ORG '0
83 *
84 ********************************************************************************
85 *
86 LINE DAC 0 DRAW A LINE FROM NEAR STARTING POINT
87 LDA* LINE X1
88 STA X1P
89 IRS LINE
90 LDA* LINE Y1
91 STA Y1P
92 IRS LINE
93 LDA* LINE X2
94 STA X2P
95 IRS LINE
96 LDA* LINE Y2
97 STA Y2P
98 IRS LINE TALLY RETURN ADDRESS
99 NOP
100 IRS LINE AGAIN FOR FORTRAN IV COMPATIBILITY
101 NOP
102 *
103 NOP
104 NOP
105 NOP
106 *
107 CALL M$APII
108 DAC MTRX
109 * JMP Y2P+2
110 X2P DAC 0
111 Y2P DAC 0
112 DAC 0
113 *
114 NOP
115 NOP
116 NOP
117 *
118 CALL M$APII
119 DAC MTRX
120 X1P DAC 0
121 Y1P DAC 0
122 DAC 0
123 NOP
124 NOP
125 NOP
126 *
127 LDA X
128 SUB* X1P
129 SPL SKIP IF SIGN PLUS
130 TCA TWO'S COMPLEMENT IF NEEDED
131 STA D1
132 LDA Y
133 SUB* Y1P
134 SPL
135 TCA
136 ADD D1
137 STA D1
138 *
139 LDA X
140 SUB* X2P
141 SPL SKIP IF SIGN PLUS
142 TCA TWO'S COMPLEMENT IF NEEDED
143 STA D2
144 LDA Y
145 SUB* Y2P
146 SPL
147 TCA
148 ADD D2
149 CAS D1
150 JMP D2BG D2 IS BIGGER!
151 NOP
152 *
153 D1BG LDA* X2P DIFFERENCE 1 IS BIGGER, SO START AT POINT X2,Y2
154 STA XA
155 LDA* Y2P
156 STA YA
157 LDA* X1P
158 STA XB
159 LDA* Y1P
160 STA YB
161 JMP WOKI WORK!
162 *
163 D2BG LDA* X1P DIFFERENCE 2 IS BIGGER, SO START AT POINT X1,Y1
164 STA XA
165 LDA* Y1P
166 STA YA
167 LDA* X2P
168 STA XB
169 LDA* Y2P
170 STA YB
171 *
172 WOKI LDA X TEST IF STARTING POINT IST CURRENT POSITION
173 CAS XA
174 JMP MV1
175 JMP *+2
176 JMP MV1
177 LDA Y
178 CAS YA
179 JMP MV1
180 JMP *+2
181 JMP MV1
182 JMP NM1
183 *
184 MV1 CALL PL$PU MOVE TO THE STARTING POSITION
185 LDA XA
186 STA XN
187 LDA YA
188 STA YN
189 JST RMOV REAL MOVE
190 *
191 NM1 CALL PL$PD WE ARE AT BEGINNING OF LINE
192 LDA XB
193 STA XN
194 LDA YB
195 STA YN
196 JST RMOV REAL MOVE
197 JMP* LINE END OF THE LINE :-)
198 *
199 *
200 *X1P DAC 0 ARGUMENT POINER TO X1
201 *Y1P DAC 0 ARGUMENT POINER TO Y1
202 *X2P DAC 0 ARGUMENT POINER TO X2
203 *Y2P DAC 0 ARGUMENT POINER TO Y2
204 XA DEC 0 REAL FIRST POINT X COORDINATE
205 YA DEC 0 REAL FIRST POINT Y COORDINATE
206 XB DEC 0 REAL SECOND POINT X COORDINATE
207 YB DEC 0 REAL SECOND POINT Y COORDINATE
208 D1 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P1
209 D2 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P2
210 *
211 *
212 ********************************************************************************
213 *
214 RST DAC ** SET POINT ZERO
215 CRA
216 STA Y
217 IMA X
218 JMP* RST
219 *
220 ABS
221 ORG '3000
222 *
223 MOVE DAC ** MOVE YA!
224 *
225 * JMP* MOVE
226 *
227 LDX MOVE GET PARAMETERS
228 LDA* 0,1 X VALUE
229 STA XN
230 LDA* 1,1 Y VALUE
231 STA YN
232 LDA MOVE
233 ADD =3
234 STA MOVE CORRECT RETURN ADDRESS
235 *
236 CALL M$APLI APPLY TRANSFORMATION MATRIX TO POSITION
237 DAC MTRX
238 DAC XN
239 DAC 0
240 *
241 JST RMOV CALL INTO REAL MOVE SUBROUTINE
242 JMP* MOVE RETURN
243 *
244 ****************************************
245 *
246 RMOV DAC ** REAL MOVE SUBROUTINE
247 LDA XN
248 SUB X
249 STA DX
250 LDA YN
251 SUB Y
252 STA DY
253 *
254 LDA DX
255 SMI
256 JMP DXP DX POSITIVE
257 * DX NEGATIVE
258 TCA
259 STA DX NOW, DX IS POSITIVE!
260 LDA ML
261 STA STPX
262 LDA MUL
263 STA DIYP
264 LDA MDL
265 STA DIYN
266 JMP DXNP
267 DXP LDA MR
268 STA STPX
269 LDA MUR
270 STA DIYP
271 LDA MDR
272 STA DIYN
273 JMP DXNP
274 *
275 DXNP LDA DY
276 SMI
277 JMP DYP DY POSITIVE
278 * DY NEGATIVE
279 TCA
280 STA DY NOW, DY IS POSITIVE!
281 LDA MD
282 STA STPY
283 LDA DIYN
284 STA STPD
285 JMP DYNP
286 DYP LDA MU
287 STA STPY
288 LDA DIYP
289 STA STPD
290 *
291 DYNP LDA DX
292 CAS DY
293 JMP XGTY DX GREATER DY
294 YGTX NOP DY GREATER OR EQUAL DX
295 LDA STPY
296 STA STPL
297 LDA STPX
298 STA STPS
299 LDA DX
300 STA DS
301 LDA DY
302 STA DL
303 JMP GTE
304 *
305 XGTY LDA STPY
306 STA STPS
307 LDA STPX
308 STA STPL
309 LDA DX
310 STA DL
311 LDA DY
312 STA DS
313 *
314 GTE LDA DL LONG DISTANCE
315 LGR 1 DIVIDE BY TWO
316 STA ERR INITIALIZE ERROR COUNTER
317 *
318 *
319 *
320 LOOP LDA DL
321 SNZ
322 JMP FNSH END OF WORK - HOPE SO....
323 SUB =1 DECREMENT DL
324 STA DL
325 LDA ERR
326 SUB DS
327 STA ERR
328 SMI SKIP IF NOT OVERFLOWN (MINUS)
329 JMP NDIA NO DIAG STEP
330 ADD DL RELOAD
331 STA ERR
332 LDA DS
333 SUB =1
334 STA DS
335 JST* STPD
336 JMP STEN END OF STEP
337 NDIA JST* STPL LONG DIR STEP ONLY
338 STEN JMP LOOP RELOOP
339 *
340 FNSH LDA XN
341 STA X
342 LDA YN
343 STA Y
344 JMP* RMOV END OF THE ROUTINE
345 *
346 *
347 ********************************************************************************
348 *
349 *
350 IDEN DAC ** RESET TRANSFORMATION MATRIX
351 CALL M$INIT
352 DAC MTRX
353 JMP* IDEN
354 *
355 *
356 ********************************************************************************
357 *
358 SCLE DAC **
359 LDA* SCLE
360 STA FCTR
361 IRS SCLE
362 CALL M$SCLE
363 DAC MTRX
364 FCTR DAC 0
365 NOP
366 NOP
367 JMP* SCLE
368 *
369 *
370 ********************************************************************************
371 *
372 *** MOVE COORDINATE SYSTEM RELATIVELY
373 *
374 RMR DAC **
375 LDA* RMR
376 STA PTR
377 LDA X
378 SUB* PTR
379 STA X
380 IRS RMR
381 LDA* RMR
382 STA PTR
383 LDA Y
384 SUB* PTR
385 STA Y
386 IRS RMR
387 IRS RMR
388 JMP* RMR
389 PTR DAC **
390 *
391 *
392 **********************
393 *
394 * VARIABLES
395 *
396 X DEC 0 PEN POSITION, X VALUE
397 Y DEC 0 PEN POSITION, Y VALUE
398 XN DEC 0 NEW PEN POSITION, X VALUE
399 YN DEC 0 NEW PEN POSITION, Y VALUE
400 DX DEC 0 X DIFFERENCE TO GO
401 DY DEC 0 Y DIFFERENCE TO GO
402 *
403 DL DEC 0 LONG DISTANCE NEGATIVE
404 DS DEC 0 SHORT DISTANCE NEGATIVE
405 STPL DAC ** ROUTINE TO LONG DISTANCE STEP
406 STPS DAC ** ROUTINE TO SHORT DISTANCE STEP
407 STPD DAC ** ROUTINE TO DIAGONAL STEP
408 ERR DEC 0 ERROR COUNTER
409 *
410 STPX DAC ** X STEP ROUTINE
411 STPY DAC ** Y STEP ROUTINE
412 DIYP DAC ** DIAGONAL X-DIR+UP STEP ROUTINE
413 DIYN DAC ** DIAGONAL X-DIR+DOWN STEP ROUTINE
414 TMP DAC ** UNIVERSAL POINTER
415 *
416 * GLUE IN THE MOVEMENT
417 MU XAC PL$U
418 MD XAC PL$D
419 ML XAC PL$L
420 MR XAC PL$R
421 MUL XAC PL$UL
422 MUR XAC PL$UR
423 MDL XAC PL$DL
424 MDR XAC PL$DR
425 *
426 ********************************************************************************
427 *
428 *** HERE THE TRANSFORMATION MATRIX, INITIALLY NO TRANSFORMATION, OLD PROGRAMS
429 *** DON'T HAVE TO CARE ABOUT THAT (HOPE SO)
430 MTRX OCT '040300 A11
431 OCT '000000
432 OCT '000000 A12
433 OCT '000000
434 OCT '000000 A21
435 OCT '000000
436 OCT '040300 A22
437 OCT '000000
438 *
439 *
440 ********************************************************************************
441 *
442 *
443 END