8fac3a64 |
1 | * PLOTTER TEXT TEST |
2 | * |
3 | * |
4 | * |
5 | SUBR PL$TXT,FPTX |
6 | * |
7 | * |
8 | REL |
9 | ORG '0 |
10 | * |
11 | * |
12 | ******************************************************************************** |
13 | * |
14 | FPTX DAC ** FORTRAN TEXT OUTPUT ROUTINE |
15 | * |
16 | LDA* FPTX ARGUMENT TRANSFER |
17 | STA BUFP |
18 | IRS FPTX |
19 | * |
20 | LDA* FPTX PLEN IS INVERTED IMMEDIATELY |
21 | STA BLEN |
22 | LDA* BLEN |
23 | TCA |
24 | STA BLEN |
25 | IRS FPTX |
26 | IRS FPTX |
27 | * WE HAVE TO CORRECT OUR BUFFER POINTER, WHY???? |
28 | LDA FPTX LOAD RETURN ADDRESS |
29 | * JST OCT |
30 | * LDA FPTX |
31 | * ANA ='77000 |
32 | * ADD BUFP |
33 | STA BUFP |
34 | * |
35 | * |
36 | CALL PL$PU DON'T KNOW WHAT HAS HAPPENED BEFORE: PEN UP! |
37 | * |
38 | JST TXIN EXECUTE INTERNAL TEXT ROUTINE |
39 | * |
40 | JMP* FPTX RETURN TO CALLER |
41 | * |
42 | TXTP DAC TXTT |
43 | TXTT BCI 10,Philipp VOID |
44 | DAC 0 |
45 | ******************************************************************************** |
46 | * |
47 | * |
48 | BUFP DEC 0 POINTER TO TEXT BUFFER IN FORTRAN PROGRAM |
49 | BLEN DEC 0 LENGTH OF TEXT TO OUTPUT |
50 | * |
51 | * |
52 | ******************************************************************************** |
53 | * |
54 | * |
55 | TXIN DAC ** INTERNAL TEXT WRITE ROUTINE |
56 | * |
57 | LDA* XP SAVE CURRENT |
58 | STA XPC PEN POSITION |
59 | LDA* YP FOR |
60 | STA YPC NEWLINE PROCESSING |
61 | * |
62 | LDA* XP SAVE CURRENT |
63 | STA XPB PEN POSITION |
64 | LDA* YP FOR |
65 | STA YPB RESTORE |
66 | * |
67 | CALL PL$RST RESET COORDINATE SYSTEM. NOW WE MENTALLY PLOT FROM 0,0! |
68 | * |
69 | CRA CLEAR X BORROW VARIABLE |
70 | STA BROW (WILL BE NEEDED TO RESTORE COORDINATE POSITION) |
71 | * |
72 | * |
73 | TLOP LDA BLEN CHARACTER LOOP, FIRST TEST CHAR COUNTER |
74 | SNZ |
75 | JMP TFIN NO MORE CHARACTERS LEFT, GO HOME |
76 | * |
77 | LDA* BUFP NOW TEST TEXT FOR ZERO-TERMINATION |
78 | SNZ |
79 | JMP TFIN ZERO-TERMINATION, GO HOME |
80 | * |
81 | TEGO LGR 8 TAKE DOWN UPPER CHARACTER |
82 | ANA ='177 MASK OUT PARITY BIT |
83 | JST PLG DRAW GLYPH |
84 | * |
85 | ADD BROW PLG CHANGES THE X COORDINATE BUT TELLS US ABOUT THAT. |
86 | STA BROW WE ADD THE "BORROWED" X PIXELS UP FOR LATER. |
87 | * |
88 | IRS BLEN INCREMENT CHARACTER COUNTER |
89 | SKP |
90 | JMP TFIN NO MORE CHARACTERS LEFT, GO HOME. |
91 | * |
92 | LDA* BUFP NOW DO THE SECOND CHARACTER OF THE WORD. |
93 | ANA ='177 MASK OUT UPPER BITS AND PARITY. |
94 | * |
95 | JST PLG LIKE ABOVE |
96 | ADD BROW |
97 | STA BROW |
98 | * |
99 | IRS BLEN |
100 | NOP |
101 | * |
102 | IRS BUFP INCREMENT BUFFER POINTER TO NEXT LOCATION |
103 | JMP TLOP JUMP BACK IN CHARACTER LOOP |
104 | * |
105 | * |
106 | TFIN LDA XPB RESTORE AND GO HOME |
107 | ADD BROW TAKE HIDDEN X OFFSET INTO ACCOUNT (SEE GLYPH ROUTINE!) |
108 | ADD* XP |
109 | STA* XP UPDATE REAL (RELATED TO ORIGINAL COORDINATES) POSITION |
110 | LDA YPB SAME |
111 | ADD* YP WITH |
112 | STA* YP Y VALUE |
113 | * |
114 | JMP* TXIN THAT'S IT, WE GO HOME. |
115 | * |
116 | * |
117 | XP XAC PL$X EXTERNAL POINTER TO PLOT X COORDINATE |
118 | YP XAC PL$Y EXTERNAL POINTER TO PLOT Y COORDINATE |
119 | * |
120 | XPB DEC 0 BACKUP OF X COORDINATE |
121 | YPB DEC 0 BACKUP OF Y COORDINATE |
122 | * |
123 | BROW DEC 0 BORROWED X PIXELS |
124 | * |
125 | ********************************************************** |
126 | * |
127 | * |
128 | PLG DAC ** GLYPH DRAWING ROUTINE |
129 | STA ARG SAVE ARGUMENT |
130 | LDX FONT POINTER TO BEGINNING OF FONT FILE |
131 | LDA 4,1 LOAD POINT COUNT FROM (*FONT)+4 |
132 | TCA NEGATE |
133 | STA LEFT STORE AS NEGATIVE COUNTER |
134 | LDA FONT |
135 | ADD =5 CALCULATE FIRST GLYPH'S ADDRESS |
136 | STA GPTR SAVE TO GLYPH POINTER |
137 | * |
138 | * |
139 | FIND LDA LEFT SEARCH LOOP ENTRY |
140 | SZE |
141 | JMP FGOO WE STILL HAVE GLYPHS TO TEST, THERE IS HOPE! |
142 | * |
143 | CRA FAILED. WE HAVE NOT GENERATED AN OFFSET. |
144 | JMP* PLG RETURN |
145 | * |
146 | FGOO LDA* GPTR LOAD GLYPH NUMBER |
147 | SUB ARG SUBSTRACT WANTED GLYPH NUMBER |
148 | SNZ |
149 | JMP PGLP FOUND, TAKE GLYPH TO THE PLOTTING ROUTINE! |
150 | * |
151 | IRS LEFT INCREMENT LOOP COUNTER |
152 | LDX GPTR UPDATE |
153 | LDA GPTR GLYPH |
154 | ADD =2 POINTER TO |
155 | ADD 1,1 NEXT |
156 | STA GPTR GLYPH |
157 | JMP FIND SEARCH AGAIN |
158 | * |
159 | * |
160 | PGLP LDX GPTR LOAD CURRENT GLYPH'S ADDRESS TO INDEX REGISTER |
161 | * |
162 | LDA 2,1 LOAD OUR GLYPH'S LEFT AND RIGHT MARGINS |
163 | LGR 8 USE UPPER BITS FIRST |
164 | SUB =82 SUBSTRACT LETTER R - ASK HERSHEY, WHY IT'S THAT WAY! |
165 | TCA WE WANT THE LEFT MARGIN NEGATED FOR LATER USE. |
166 | STA X1 STORE |
167 | LDA 2,1 LOAD THE MARGINS AGAIN |
168 | CAL CLEAR UPPER BITS OF A |
169 | SUB =81 THAT'S CORRECT, ONE LESS FOR NOT OVERLAPPING GLYPHS! |
170 | STA X2 SAVE RIGHT MARGIN |
171 | * |
172 | CALL PL$RMR MOVE PLOT ORIGIN - THE REASON FOR THE BORROW STUFF. |
173 | DAC X1 GLYPH SHOULD START AT ORIGINAL X=0..BUT - ASK HERSHEY |
174 | DAC ZERO Y STAYS UNCHANGED. |
175 | DAC 0 |
176 | * |
177 | LDA 1,1 LOAD POINT COUNT |
178 | TCA COMPLEMENT |
179 | AOA INCREMENT - FIRST "POINT" WERE THE MARGINS. |
180 | STA LEFT SET UP THE WELL KNOWN COUNTER. |
181 | * |
182 | LDA GPTR |
183 | ADD =3 ADD OFFSET IN GLYPH DATA |
184 | STA PPTR SAVE POINTER TO FIRST POINT DATA WORD. |
185 | * |
186 | * |
187 | MLOP LDA LEFT DRAWING LOOP ENTRY |
188 | SNZ |
189 | JMP MFIN FINISHED DRAWING THAT GLYPH. GO, CLEAN UP. |
190 | * |
191 | MOGO LDA* PPTR |
192 | * |
193 | SUB ='20122 TEST FOR OBSCURE PEN UP CONDITION - ASK HERSHEY.. |
194 | SNZ |
195 | JMP PUP THIS WORD CONTAINS ONLY A PEN UP COMMAND. |
196 | * |
197 | LDA* PPTR MAKE POINT'S X VALUE |
198 | LGR 8 SHIFT DOWN |
199 | SUB =82 SUBSTRACT LETTER R - ASK HERSHEY |
200 | STA X STORE |
201 | * |
202 | LDX FONT WE WILL NEED THE BASELINE HEIGHT FROM THERE |
203 | LDA* PPTR LOAD AGAIN, FOR Y POSITION |
204 | CAL CLEAR UPPER BITS |
205 | SUB =82 THE SUBSTRACTION.. |
206 | TCA HERSHEY LIVED IN THE 4TH QUADRANT - WE IN THE 1ST. |
207 | SUB 1,1 SUBTRACT BASELINE OFFSET |
208 | STA Y SAVE |
209 | * |
210 | * |
211 | CALL PL$MV MOVE TO POINT |
212 | DAC X |
213 | DAC Y |
214 | DAC 0 |
215 | CALL PL$PD AND THEN PEN DOWN. ASK HERSHEY.. |
216 | * |
217 | PEND IRS PPTR INCREMENT POINT POINTER |
218 | IRS LEFT INCREMENT POINT COUNTER |
219 | NOP |
220 | JMP MLOP LOOP AGAIN. |
221 | * |
222 | * |
223 | PUP CALL PL$PU PEN UP |
224 | JMP PEND GET BACK TO THE LOOP END |
225 | * |
226 | * |
227 | MFIN CALL PL$PU END OF GLYPH, PEN UP! |
228 | * |
229 | CALL PL$RMR FUZZ COORDINATES AGAIN. |
230 | DAC X2 THE 81 ABOVE SAVES AN ADDITION OF 1 HERE. |
231 | DAC ZERO Y UNTOUCHED. ZERO IS ZERO. |
232 | DAC 0 |
233 | * |
234 | CALL PL$MV MOVE PEN TO BEGINNING OF NEXT GLYPH - JUST IN CASE... |
235 | DAC ZERO |
236 | DAC ZERO |
237 | DAC 0 |
238 | * |
239 | LDA X2 ADD MARGINS |
240 | ADD X1 TO BORROWED GLYPH WIDTH |
241 | JMP* PLG RETURN TO CALLER. |
242 | * |
243 | * |
244 | **************************************************************** |
245 | * |
246 | * |
247 | PNL DAC ** NEW LINE ROUTINE |
248 | LDA YPC |
249 | SUB* FONT VERTIVAL SPACING |
250 | STA YPC |
251 | CALL PL$MV |
252 | DAC XPC |
253 | DAC YPC |
254 | DAC 0 |
255 | JMP* PNL |
256 | * |
257 | * |
258 | XPC DEC 0 |
259 | YPC DEC 0 |
260 | * |
261 | * |
262 | * |
263 | ******************************************************************** |
264 | ARG DEC 0 |
265 | LEFT DEC 0 |
266 | GPTR DEC 0 |
267 | PPTR DEC 0 |
268 | X DEC 0 |
269 | Y DEC 0 |
270 | X1 DEC 0 |
271 | X2 DEC 0 |
272 | ZERO DEC 0 |
273 | * |
274 | FONT XAC PL$FNT |
275 | * |
276 | MK1 DAC ** |
277 | OCP '104 |
278 | LDA M1 |
279 | OTA 4 |
280 | JMP *-1 |
281 | ICA |
282 | OTA 4 |
283 | JMP *-1 |
284 | * LDA =10 |
285 | * OTA '4 |
286 | * JMP *-1 |
287 | * LDA =13 |
288 | * OTA '4 |
289 | * JMP *-1 |
290 | * LDA =13 |
291 | * OTA '4 |
292 | * JMP *-1 |
293 | JMP* MK1 |
294 | * |
295 | * |
296 | MK2 DAC ** |
297 | OCP '104 |
298 | LDA M2 |
299 | OTA 4 |
300 | JMP *-1 |
301 | ICA |
302 | OTA 4 |
303 | JMP *-1 |
304 | * LDA =10 |
305 | * OTA '4 |
306 | * JMP *-1 |
307 | * LDA =13 |
308 | * OTA '4 |
309 | * JMP *-1 |
310 | * LDA =13 |
311 | * OTA '4 |
312 | * JMP *-1 |
313 | JMP* MK2 |
314 | * |
315 | * |
316 | M1 BCI 2,A: |
317 | M2 BCI 2,B: |
318 | * |
319 | OCT DAC ** |
320 | OCP '104 |
321 | IAB SAVE TO B |
322 | CRA |
323 | LLR 1 |
324 | ADD =48 |
325 | OTA '4 ASR OUTPUT |
326 | JMP *-1 |
327 | CRA |
328 | LLR 3 |
329 | ADD =48 |
330 | OTA 4 ASR OUTPUT |
331 | OTA 4 |
332 | JMP *-1 |
333 | CRA |
334 | LLR 3 |
335 | ADD =48 |
336 | OTA '4 ASR OUTPUT |
337 | OTA 4 |
338 | JMP *-1 |
339 | CRA |
340 | LLR 3 |
341 | ADD =48 |
342 | OTA '4 ASR OUTPUT |
343 | OTA 4 |
344 | JMP *-1 |
345 | CRA |
346 | LLR 3 |
347 | ADD =48 |
348 | OTA '4 ASR OUTPUT |
349 | OTA 4 |
350 | JMP *-1 |
351 | CRA |
352 | LLR 3 |
353 | ADD =48 |
354 | OTA '4 ASR OUTPUT |
355 | OTA 4 |
356 | JMP *-1 |
357 | * |
358 | LDA =10 |
359 | OTA '4 |
360 | JMP *-1 |
361 | LDA =13 |
362 | OTA '4 |
363 | JMP *-1 |
364 | LDA =13 |
365 | OTA '4 |
366 | JMP *-1 |
367 | SKS 4 |
368 | JMP *-1 |
369 | * |
370 | JMP* OCT |
371 | * |
372 | END |