*** empty log message ***
[h316.git] / lib / hachti / src / pl$txt.asm
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