*** empty log message ***
[h316.git] / lib / iolib / src / pl$mv.asm
CommitLineData
fcb7b340 1* (PL$MV) REV 1.0 INCREMENTAL PLOTTER ROUTINES
2*
3*
4* PROGRAM TITLE:
bf9d30c5 5* PL$MV (PL$MV,PL$RST,PL$LN)
fcb7b340 6*
7* PLOTTER MOVEMENT ROUTINES
8*
9*
10* REVISIONS:
11* 1.0 (2007-05-28)
bf9d30c5 12* 1.1 (2007-11-08) - ADDED INTELLIGENT LINE DRAWING ROUTINE
13*
14*
fcb7b340 15*
16* AUTHOR:
17*
18* PHILIPP HACHTMANN
19*
20*
21* PURPOSE:
22*
23* PROVIDE SIMPLE LIBRARY FUNCTIONS FOR INCREMENTAL PLOTTERS
24*
25*
26* STORAGE:
27*
28* ??? (OCTAL)
29* ??? (DECIMAL)
30*
31*
32* USAGE
33*
34* CALL PL$RST - SET VIRTUAL PLOT POSITION TO ZERO
35*
36* CALL PL$MV - MOVE TO POINT SPECIFIED
37* DAC XN BY XN
38* DAC YN AND YN VALUE
bf9d30c5 39*
40* CALL PL$LN - DRAW LINE AND LEAVE PEN DOWN
41* DAC X1
42* DAC Y1
43* DAC X2
44* DAC Y2
45* DAC 0
fcb7b340 46*
47*
48********************************************************************************
49*
50*
51 SUBR PL$MV,MOVE
52 SUBR PL$RST,RST
bf9d30c5 53 SUBR PL$LN,LINE
54*
fcb7b340 55*
56*
57 REL THIS IS A RELOCATABLE OBJECT
58 ORG '0
59*
bf9d30c5 60********************************************************************************
61*
62LINE DAC 0 DRAW A LINE FROM NEAR STARTING POINT
63 LDA* LINE X1
64 STA X1P
65 IRS LINE
66 LDA* LINE Y1
67 STA Y1P
68 IRS LINE
69 LDA* LINE X2
70 STA X2P
71 IRS LINE
72 LDA* LINE Y2
73 STA Y2P
74 IRS LINE TALLY RETURN ADDRESS
75 IRS LINE AGAIN FOR FORTRAN IV COMPATIBILITY
76*
77 LDA X
78 SUB* X1P
79 SPL SKIP IF SIGN PLUS
80 TCA TWO'S COMPLEMENT IF NEEDED
81 STA D1
82 LDA Y
83 SUB* Y1P
84 SPL
85 TCA
86 ADD D1
87 STA D1
88*
89 LDA X
90 SUB* X2P
91 SPL SKIP IF SIGN PLUS
92 TCA TWO'S COMPLEMENT IF NEEDED
93 STA D2
94 LDA Y
95 SUB* Y2P
96 SPL
97 TCA
98 ADD D2
99 CAS D1
100 JMP D2BG D2 IS BIGGER!
101 NOP
102*
103D1BG LDA* X2P DIFFERENCE 1 IS BIGGER, SO START AT POINT X2,Y2
104 STA XA
105 LDA* Y2P
106 STA YA
107 LDA* X1P
108 STA XB
109 LDA* Y1P
110 STA YB
111 JMP WOKI WORK!
112*
113D2BG LDA* X1P DIFFERENCE 2 IS BIGGER, SO START AT POINT X1,Y1
114 STA XA
115 LDA* Y1P
116 STA YA
117 LDA* X2P
118 STA XB
119 LDA* Y2P
120 STA YB
121*
122WOKI LDA X TEST IF STARTING POINT IST CURRENT POSITION
123 CAS XA
124 JMP MV1
125 JMP *+2
126 JMP MV1
127 LDA Y
128 CAS YA
129 JMP MV1
130 JMP *+2
131 JMP MV1
132 JMP NM1
133*
134MV1 CALL PL$PU MOVE TO THE STARTING POSITION
135 CALL PL$MV
136 DAC XA
137 DAC YA
138 DAC 0
139NM1 CALL PL$PD WE ARE AT BEGINNING OF LINE
140 CALL PL$MV
141 DAC XB
142 DAC YB
143 DAC 0
144 JMP* LINE END OF THE LINE :-)
145*
146*
147X1P DAC 0 ARGUMENT POINER TO X1
148Y1P DAC 0 ARGUMENT POINER TO Y1
149X2P DAC 0 ARGUMENT POINER TO X2
150Y2P DAC 0 ARGUMENT POINER TO Y2
151XA DEC 0 REAL FIRST POINT X COORDINATE
152YA DEC 0 REAL FIRST POINT Y COORDINATE
153XB DEC 0 REAL SECOND POINT X COORDINATE
154YB DEC 0 REAL SECOND POINT Y COORDINATE
155D1 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P1
156D2 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P2
157*
158*
159********************************************************************************
fcb7b340 160*
161RST DAC ** SET POINT ZERO
162 STA X
163 CRA
164 STA Y
165 IMA X
166 JMP* RST
167*
168*
169MOVE DAC ** MOVE YA!
170*
171 LDA* MOVE GET PARAMETERS
172 STA TMP
173 LDA* TMP
174 STA XN
175 SUB X
176 STA DX
177 IRS MOVE
178 LDA* MOVE
179 STA TMP
180 LDA* TMP
181 STA YN
182 SUB Y
183 STA DY
184 IRS MOVE
185 IRS MOVE CORRECT RETURN ADDRESS
186*
187* HLT
188* LDA YN
189* IAB
190* LDA XN
191* HLT
192* JMP 1
193*
194 LDA DX
195 SMI
196 JMP DXP DX POSITIVE
197* DX NEGATIVE
198 TCA
199 STA DX NOW, DX IS POSITIVE!
200 LDA ML
201 STA STPX
202 LDA MUL
203 STA DIYP
204 LDA MDL
205 STA DIYN
206 JMP DXNP
207DXP LDA MR
208 STA STPX
209 LDA MUR
210 STA DIYP
211 LDA MDR
212 STA DIYN
213 JMP DXNP
214*
215DXNP LDA DY
216 SMI
217 JMP DYP DY POSITIVE
218* DY NEGATIVE
219 TCA
220 STA DY NOW, DY IS POSITIVE!
221 LDA MD
222 STA STPY
223 LDA DIYN
224 STA STPD
225 JMP DYNP
226DYP LDA MU
227 STA STPY
228 LDA DIYP
229 STA STPD
230*
231DYNP LDA DX
232 CAS DY
233 JMP XGTY DX GREATER DY
234YGTX NOP DY GREATER OR EQUAL DX
235 LDA STPY
236 STA STPL
237 LDA STPX
238 STA STPS
239 LDA DX
240 STA DS
241 LDA DY
242 STA DL
243 JMP GTE
244*
245XGTY LDA STPY
246 STA STPS
247 LDA STPX
248 STA STPL
249 LDA DX
250 STA DL
251 LDA DY
252 STA DS
253*
254GTE LDA DL LONG DISTANCE
255 LGR 1 DIVIDE BY TWO
256 STA ERR INITIALIZE ERROR COUNTER
257*
258*
259*
260LOOP LDA DL
261 SNZ
262 JMP FNSH END OF WORK - HOPE SO....
263 SUB =1 DECREMENT DL
264 STA DL
265 LDA ERR
266 SUB DS
267 STA ERR
268 SMI SKIP IF NOT OVERFLOWN (MINUS)
269 JMP NDIA NO DIAG STEP
270 ADD DL RELOAD
271 STA ERR
272 LDA DS
273 SUB =1
274 STA DS
275 JST* STPD
276 JMP STEN END OF STEP
277NDIA JST* STPL LONG DIR STEP ONLY
278STEN JMP LOOP RELOOP
279*
280FNSH LDA XN
281 STA X
282 LDA YN
283 STA Y
284 JMP* MOVE END OF THE ROUTINE
285**********************
286*
287* VARIABLES
288*
289X DEC 0 PEN POSITION, X VALUE
290Y DEC 0 PEN POSITION, Y VALUE
291XN DEC 0 NEW PEN POSITION, X VALUE
292YN DEC 0 NEW PEN POSITION, Y VALUE
293DX DEC 0 X DIFFERENCE TO GO
294DY DEC 0 Y DIFFERENCE TO GO
295*
296DL DEC 0 LONG DISTANCE NEGATIVE
297DS DEC 0 SHORT DISTANCE NEGATIVE
298STPL DAC ** ROUTINE TO LONG DISTANCE STEP
299STPS DAC ** ROUTINE TO SHORT DISTANCE STEP
300STPD DAC ** ROUTINE TO DIAGONAL STEP
301ERR DEC 0 ERROR COUNTER
302*
303STPX DAC ** X STEP ROUTINE
304STPY DAC ** Y STEP ROUTINE
305DIYP DAC ** DIAGONAL X-DIR+UP STEP ROUTINE
306DIYN DAC ** DIAGONAL X-DIR+DOWN STEP ROUTINE
307TMP DAC ** UNIVERSAL POINTER
308*
309* GLUE IN THE MOVEMENT
310MU XAC PL$U
311MD XAC PL$D
312ML XAC PL$L
313MR XAC PL$R
314MUL XAC PL$UL
315MUR XAC PL$UR
316MDL XAC PL$DL
317MDR XAC PL$DR
318*
319*
320 END