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 | * |
62 | LINE 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 | * |
103 | D1BG 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 | * |
113 | D2BG 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 | * |
122 | WOKI 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 | * |
134 | MV1 CALL PL$PU MOVE TO THE STARTING POSITION |
135 | CALL PL$MV |
136 | DAC XA |
137 | DAC YA |
138 | DAC 0 |
139 | NM1 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 | * |
147 | X1P DAC 0 ARGUMENT POINER TO X1 |
148 | Y1P DAC 0 ARGUMENT POINER TO Y1 |
149 | X2P DAC 0 ARGUMENT POINER TO X2 |
150 | Y2P DAC 0 ARGUMENT POINER TO Y2 |
151 | XA DEC 0 REAL FIRST POINT X COORDINATE |
152 | YA DEC 0 REAL FIRST POINT Y COORDINATE |
153 | XB DEC 0 REAL SECOND POINT X COORDINATE |
154 | YB DEC 0 REAL SECOND POINT Y COORDINATE |
155 | D1 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P1 |
156 | D2 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P2 |
157 | * |
158 | * |
159 | ******************************************************************************** |
fcb7b340 |
160 | * |
161 | RST DAC ** SET POINT ZERO |
162 | STA X |
163 | CRA |
164 | STA Y |
165 | IMA X |
166 | JMP* RST |
167 | * |
168 | * |
169 | MOVE 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 |
207 | DXP LDA MR |
208 | STA STPX |
209 | LDA MUR |
210 | STA DIYP |
211 | LDA MDR |
212 | STA DIYN |
213 | JMP DXNP |
214 | * |
215 | DXNP 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 |
226 | DYP LDA MU |
227 | STA STPY |
228 | LDA DIYP |
229 | STA STPD |
230 | * |
231 | DYNP LDA DX |
232 | CAS DY |
233 | JMP XGTY DX GREATER DY |
234 | YGTX 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 | * |
245 | XGTY LDA STPY |
246 | STA STPS |
247 | LDA STPX |
248 | STA STPL |
249 | LDA DX |
250 | STA DL |
251 | LDA DY |
252 | STA DS |
253 | * |
254 | GTE LDA DL LONG DISTANCE |
255 | LGR 1 DIVIDE BY TWO |
256 | STA ERR INITIALIZE ERROR COUNTER |
257 | * |
258 | * |
259 | * |
260 | LOOP 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 |
277 | NDIA JST* STPL LONG DIR STEP ONLY |
278 | STEN JMP LOOP RELOOP |
279 | * |
280 | FNSH LDA XN |
281 | STA X |
282 | LDA YN |
283 | STA Y |
284 | JMP* MOVE END OF THE ROUTINE |
285 | ********************** |
286 | * |
287 | * VARIABLES |
288 | * |
289 | X DEC 0 PEN POSITION, X VALUE |
290 | Y DEC 0 PEN POSITION, Y VALUE |
291 | XN DEC 0 NEW PEN POSITION, X VALUE |
292 | YN DEC 0 NEW PEN POSITION, Y VALUE |
293 | DX DEC 0 X DIFFERENCE TO GO |
294 | DY DEC 0 Y DIFFERENCE TO GO |
295 | * |
296 | DL DEC 0 LONG DISTANCE NEGATIVE |
297 | DS DEC 0 SHORT DISTANCE NEGATIVE |
298 | STPL DAC ** ROUTINE TO LONG DISTANCE STEP |
299 | STPS DAC ** ROUTINE TO SHORT DISTANCE STEP |
300 | STPD DAC ** ROUTINE TO DIAGONAL STEP |
301 | ERR DEC 0 ERROR COUNTER |
302 | * |
303 | STPX DAC ** X STEP ROUTINE |
304 | STPY DAC ** Y STEP ROUTINE |
305 | DIYP DAC ** DIAGONAL X-DIR+UP STEP ROUTINE |
306 | DIYN DAC ** DIAGONAL X-DIR+DOWN STEP ROUTINE |
307 | TMP DAC ** UNIVERSAL POINTER |
308 | * |
309 | * GLUE IN THE MOVEMENT |
310 | MU XAC PL$U |
311 | MD XAC PL$D |
312 | ML XAC PL$L |
313 | MR XAC PL$R |
314 | MUL XAC PL$UL |
315 | MUR XAC PL$UR |
316 | MDL XAC PL$DL |
317 | MDR XAC PL$DR |
318 | * |
319 | * |
320 | END |