af939176692672853a7ea950dfefec85976ff003
[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$ROT,ROT
78 SUBR PL$IDN,IDEN
79 *
80 *
81 *
82 REL THIS IS A RELOCATABLE OBJECT
83 ORG '0
84 *
85 ********************************************************************************
86 *
87 LINE DAC 0 DRAW A LINE FROM NEAR STARTING POINT
88 LDA* LINE X1
89 STA X1
90 LDA* X1
91 STA X1
92 IRS LINE
93 LDA* LINE Y1
94 STA Y1
95 LDA* Y1
96 STA Y1
97 IRS LINE
98 LDA* LINE X2
99 STA X2
100 LDA* X2
101 STA X2
102 IRS LINE
103 LDA* LINE Y2
104 STA Y2
105 LDA* Y2
106 STA Y2
107 IRS LINE TALLY RETURN ADDRESS
108 IRS LINE AGAIN FOR FORTRAN IV COMPATIBILITY
109 *
110 *
111 CALL M$APLI
112 DAC MTRX
113 DAC X1
114 DAC 0
115 *
116 CALL M$APLI
117 DAC MTRX
118 DAC X2
119 DAC 0
120 *
121 *
122 *
123 LDA X
124 SUB X1
125 SPL SKIP IF SIGN PLUS
126 TCA TWO'S COMPLEMENT IF NEEDED
127 STA D1
128 LDA Y
129 SUB Y1
130 SPL
131 TCA
132 ADD D1
133 STA D1
134 *
135 LDA X
136 SUB X2
137 SPL SKIP IF SIGN PLUS
138 TCA TWO'S COMPLEMENT IF NEEDED
139 STA D2
140 LDA Y
141 SUB Y2
142 SPL
143 TCA
144 ADD D2
145 CAS D1
146 JMP D2BG D2 IS BIGGER!
147 NOP
148 *
149 D1BG LDA X2 DIFFERENCE 1 IS BIGGER, SO START AT POINT X2,Y2
150 STA XA
151 LDA Y2
152 STA YA
153 LDA X1
154 STA XB
155 LDA Y1
156 STA YB
157 JMP WOKI WORK!
158 *
159 D2BG LDA X1 DIFFERENCE 2 IS BIGGER, SO START AT POINT X1,Y1
160 STA XA
161 LDA Y1
162 STA YA
163 LDA X2
164 STA XB
165 LDA Y2
166 STA YB
167 *
168 WOKI 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 *
180 MV1 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 *
187 NM1 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 *
195 *
196 *
197 ********************************************************************************
198 *
199 **** MOVE PEN ROUTINE
200 *
201 RST DAC ** SET POINT ZERO
202 CRA
203 STA Y
204 IMA X
205 JMP* RST
206 *
207 ABS
208 ORG '3000
209 *
210 MOVE 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 *
233 RMOV 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
254 DXP LDA MR
255 STA STPX
256 LDA MUR
257 STA DIYP
258 LDA MDR
259 STA DIYN
260 JMP DXNP
261 *
262 DXNP 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
273 DYP LDA MU
274 STA STPY
275 LDA DIYP
276 STA STPD
277 *
278 DYNP LDA DX
279 CAS DY
280 JMP XGTY DX GREATER DY
281 YGTX 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 *
292 XGTY LDA STPY
293 STA STPS
294 LDA STPX
295 STA STPL
296 LDA DX
297 STA DL
298 LDA DY
299 STA DS
300 *
301 GTE LDA DL LONG DISTANCE
302 LGR 1 DIVIDE BY TWO
303 STA ERR INITIALIZE ERROR COUNTER
304 *
305 *
306 *
307 LOOP 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
324 NDIA JST* STPL LONG DIR STEP ONLY
325 STEN JMP LOOP RELOOP
326 *
327 FNSH LDA XN
328 STA X
329 LDA YN
330 STA Y
331 JMP* RMOV END OF THE ROUTINE
332 *
333 *
334 ********************************************************************************
335 *
336 *
337 IDEN DAC ** RESET TRANSFORMATION MATRIX
338 CALL M$INIT
339 DAC MTRX
340 JMP* IDEN
341 *
342 *
343 ********************************************************************************
344 *
345 SCLE DAC **
346 LDA* SCLE
347 STA FCTR
348 IRS SCLE
349 CALL M$SCLE
350 DAC MTRX
351 FCTR DAC 0
352 DAC 0
353 JMP* SCLE
354 *
355 *
356 *
357 *
358 ROT DAC **
359 LDA* ROT
360 STA FCR2
361 IRS ROT
362 CALL M$ROT
363 DAC MTRX
364 FCR2 DAC 0
365 DAC 0
366 JMP* ROT
367 *
368 *
369 ********************************************************************************
370 *
371 *** MOVE COORDINATE SYSTEM RELATIVELY
372 *
373 RMR 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
388 PTR DAC **
389 *
390 *
391 **********************
392 *
393 * VARIABLES
394 *
395 X DEC 0 PEN POSITION, X VALUE
396 Y DEC 0 PEN POSITION, Y VALUE
397 XN DEC 0 NEW PEN POSITION, X VALUE
398 YN DEC 0 NEW PEN POSITION, Y VALUE
399 DX DEC 0 X DIFFERENCE TO GO
400 DY DEC 0 Y DIFFERENCE TO GO
401 *
402 DL DEC 0 LONG DISTANCE NEGATIVE
403 DS DEC 0 SHORT DISTANCE NEGATIVE
404 STPL DAC ** ROUTINE TO LONG DISTANCE STEP
405 STPS DAC ** ROUTINE TO SHORT DISTANCE STEP
406 STPD DAC ** ROUTINE TO DIAGONAL STEP
407 ERR DEC 0 ERROR COUNTER
408 *
409 STPX DAC ** X STEP ROUTINE
410 STPY DAC ** Y STEP ROUTINE
411 DIYP DAC ** DIAGONAL X-DIR+UP STEP ROUTINE
412 DIYN DAC ** DIAGONAL X-DIR+DOWN STEP ROUTINE
413 *
414 X1 DEC 0 LINE START POINT, X
415 Y1 DEC 0 LINE START POINT, Y
416 X2 DEC 0 LINE END POINT, X
417 Y2 DEC 0 LINE END POINT, Y
418 *
419 XA DEC 0 REAL FIRST POINT X COORDINATE
420 YA DEC 0 REAL FIRST POINT Y COORDINATE
421 XB DEC 0 REAL SECOND POINT X COORDINATE
422 YB DEC 0 REAL SECOND POINT Y COORDINATE
423 D1 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P1
424 D2 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P2
425 *
426 **** GLUE IN THE MOVEMENT ROUTINES
427 *
428 MU XAC PL$U
429 MD XAC PL$D
430 ML XAC PL$L
431 MR XAC PL$R
432 MUL XAC PL$UL
433 MUR XAC PL$UR
434 MDL XAC PL$DL
435 MDR 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)
441 MTRX 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