eabafcca |
1 | * PLOTTER TEXT OUTPUT |
8fac3a64 |
2 | * |
3 | * |
4 | * |
5 | SUBR PL$TXT,FPTX |
eabafcca |
6 | SUBR PL$TNL,NEWL |
8fac3a64 |
7 | * |
8 | * |
9 | REL |
10 | ORG '0 |
11 | * |
12 | * |
13 | ******************************************************************************** |
14 | * |
eabafcca |
15 | NEWL DAC ** |
16 | LDA* FONT LOAD VERTICAL SPACING FROM FONT |
17 | TCA |
18 | STA GPTR |
19 | LDA TWDH LAST TEXT WIDTH |
20 | TCA |
21 | STA PPTR |
22 | CALL PL$MVR MOVE RELATIVELY |
23 | DAC PPTR |
24 | DAC GPTR |
25 | DAC 0 |
26 | JMP* NEWL RETURN |
27 | * |
28 | * |
29 | ******************************************************************************** |
30 | * |
31 | * |
32 | **** PL$TXT - TEXT OUTPUT ROUTINE |
33 | * |
8fac3a64 |
34 | FPTX DAC ** FORTRAN TEXT OUTPUT ROUTINE |
35 | * |
eabafcca |
36 | LDA* FPTX LOAD STACK DATA POINTER |
37 | STA SDA1 SAVE |
38 | STA SDA2 |
39 | IRS FPTX |
40 | * |
8fac3a64 |
41 | LDA* FPTX ARGUMENT TRANSFER |
42 | STA BUFP |
43 | IRS FPTX |
44 | * |
45 | LDA* FPTX PLEN IS INVERTED IMMEDIATELY |
46 | STA BLEN |
47 | LDA* BLEN |
48 | TCA |
49 | STA BLEN |
50 | IRS FPTX |
51 | IRS FPTX |
8fac3a64 |
52 | * |
53 | CALL PL$PU DON'T KNOW WHAT HAS HAPPENED BEFORE: PEN UP! |
54 | * |
eabafcca |
55 | CRA |
56 | STA TWDH TEXT WIDTH |
57 | * |
8fac3a64 |
58 | JST TXIN EXECUTE INTERNAL TEXT ROUTINE |
59 | * |
eabafcca |
60 | LDA TWDH |
8fac3a64 |
61 | JMP* FPTX RETURN TO CALLER |
62 | * |
eabafcca |
63 | * TXTP DAC TXTT |
64 | * TXTT BCI 10,Philipp VOID |
65 | * DAC 0 |
8fac3a64 |
66 | ******************************************************************************** |
67 | * |
68 | * |
69 | BUFP DEC 0 POINTER TO TEXT BUFFER IN FORTRAN PROGRAM |
70 | BLEN DEC 0 LENGTH OF TEXT TO OUTPUT |
71 | * |
72 | * |
73 | ******************************************************************************** |
74 | * |
75 | * |
76 | TXIN DAC ** INTERNAL TEXT WRITE ROUTINE |
77 | * |
eabafcca |
78 | CALL PL$PUS PUSH GRAPHIC CONTEXT ONTO STACK |
79 | SDA1 DAC ** |
8fac3a64 |
80 | CALL PL$RST RESET COORDINATE SYSTEM. NOW WE MENTALLY PLOT FROM 0,0! |
8fac3a64 |
81 | * |
82 | TLOP LDA BLEN CHARACTER LOOP, FIRST TEST CHAR COUNTER |
83 | SNZ |
84 | JMP TFIN NO MORE CHARACTERS LEFT, GO HOME |
85 | * |
86 | LDA* BUFP NOW TEST TEXT FOR ZERO-TERMINATION |
87 | SNZ |
88 | JMP TFIN ZERO-TERMINATION, GO HOME |
89 | * |
90 | TEGO LGR 8 TAKE DOWN UPPER CHARACTER |
91 | ANA ='177 MASK OUT PARITY BIT |
92 | JST PLG DRAW GLYPH |
eabafcca |
93 | ADD TWDH |
94 | STA TWDH |
8fac3a64 |
95 | * |
96 | IRS BLEN INCREMENT CHARACTER COUNTER |
97 | SKP |
98 | JMP TFIN NO MORE CHARACTERS LEFT, GO HOME. |
99 | * |
100 | LDA* BUFP NOW DO THE SECOND CHARACTER OF THE WORD. |
101 | ANA ='177 MASK OUT UPPER BITS AND PARITY. |
102 | * |
103 | JST PLG LIKE ABOVE |
eabafcca |
104 | ADD TWDH |
105 | STA TWDH |
106 | * |
8fac3a64 |
107 | * |
108 | IRS BLEN |
109 | NOP |
110 | * |
111 | IRS BUFP INCREMENT BUFFER POINTER TO NEXT LOCATION |
112 | JMP TLOP JUMP BACK IN CHARACTER LOOP |
113 | * |
114 | * |
eabafcca |
115 | TFIN CALL PL$POP GET OLD GRAPHIC CONTEXT AND BE HAPPY |
116 | SDA2 DAC ** |
117 | CALL PL$MVR |
118 | DAC TWDH |
119 | DAC ZERO |
120 | DAC * |
121 | * |
8fac3a64 |
122 | JMP* TXIN THAT'S IT, WE GO HOME. |
123 | * |
124 | * |
8fac3a64 |
125 | * |
126 | ********************************************************** |
127 | * |
128 | * |
129 | PLG DAC ** GLYPH DRAWING ROUTINE |
130 | STA ARG SAVE ARGUMENT |
131 | LDX FONT POINTER TO BEGINNING OF FONT FILE |
132 | LDA 4,1 LOAD POINT COUNT FROM (*FONT)+4 |
133 | TCA NEGATE |
134 | STA LEFT STORE AS NEGATIVE COUNTER |
135 | LDA FONT |
136 | ADD =5 CALCULATE FIRST GLYPH'S ADDRESS |
137 | STA GPTR SAVE TO GLYPH POINTER |
138 | * |
139 | * |
140 | FIND LDA LEFT SEARCH LOOP ENTRY |
141 | SZE |
142 | JMP FGOO WE STILL HAVE GLYPHS TO TEST, THERE IS HOPE! |
143 | * |
144 | CRA FAILED. WE HAVE NOT GENERATED AN OFFSET. |
145 | JMP* PLG RETURN |
146 | * |
147 | FGOO LDA* GPTR LOAD GLYPH NUMBER |
148 | SUB ARG SUBSTRACT WANTED GLYPH NUMBER |
149 | SNZ |
150 | JMP PGLP FOUND, TAKE GLYPH TO THE PLOTTING ROUTINE! |
eabafcca |
151 | * |
8fac3a64 |
152 | IRS LEFT INCREMENT LOOP COUNTER |
153 | LDX GPTR UPDATE |
154 | LDA GPTR GLYPH |
155 | ADD =2 POINTER TO |
156 | ADD 1,1 NEXT |
157 | STA GPTR GLYPH |
158 | JMP FIND SEARCH AGAIN |
159 | * |
160 | * |
161 | PGLP LDX GPTR LOAD CURRENT GLYPH'S ADDRESS TO INDEX REGISTER |
162 | * |
163 | LDA 2,1 LOAD OUR GLYPH'S LEFT AND RIGHT MARGINS |
164 | LGR 8 USE UPPER BITS FIRST |
165 | SUB =82 SUBSTRACT LETTER R - ASK HERSHEY, WHY IT'S THAT WAY! |
166 | TCA WE WANT THE LEFT MARGIN NEGATED FOR LATER USE. |
eabafcca |
167 | STA XMIN STORE |
8fac3a64 |
168 | LDA 2,1 LOAD THE MARGINS AGAIN |
169 | CAL CLEAR UPPER BITS OF A |
170 | SUB =81 THAT'S CORRECT, ONE LESS FOR NOT OVERLAPPING GLYPHS! |
eabafcca |
171 | STA XNEX SAVE RIGHT MARGIN |
8fac3a64 |
172 | * |
173 | LDA 1,1 LOAD POINT COUNT |
eabafcca |
174 | * CALL OCT |
8fac3a64 |
175 | TCA COMPLEMENT |
176 | AOA INCREMENT - FIRST "POINT" WERE THE MARGINS. |
177 | STA LEFT SET UP THE WELL KNOWN COUNTER. |
eabafcca |
178 | * |
179 | CALL PL$RMR MOVE ORIGIN |
180 | DAC XMIN |
181 | DAC ZERO Y STAYS UNCHANGED. |
182 | DAC 0 |
8fac3a64 |
183 | * |
184 | LDA GPTR |
185 | ADD =3 ADD OFFSET IN GLYPH DATA |
186 | STA PPTR SAVE POINTER TO FIRST POINT DATA WORD. |
187 | * |
188 | * |
189 | MLOP LDA LEFT DRAWING LOOP ENTRY |
190 | SNZ |
191 | JMP MFIN FINISHED DRAWING THAT GLYPH. GO, CLEAN UP. |
192 | * |
193 | MOGO LDA* PPTR |
194 | * |
195 | SUB ='20122 TEST FOR OBSCURE PEN UP CONDITION - ASK HERSHEY.. |
196 | SNZ |
197 | JMP PUP THIS WORD CONTAINS ONLY A PEN UP COMMAND. |
198 | * |
199 | LDA* PPTR MAKE POINT'S X VALUE |
200 | LGR 8 SHIFT DOWN |
201 | SUB =82 SUBSTRACT LETTER R - ASK HERSHEY |
202 | STA X STORE |
203 | * |
204 | LDX FONT WE WILL NEED THE BASELINE HEIGHT FROM THERE |
205 | LDA* PPTR LOAD AGAIN, FOR Y POSITION |
206 | CAL CLEAR UPPER BITS |
207 | SUB =82 THE SUBSTRACTION.. |
208 | TCA HERSHEY LIVED IN THE 4TH QUADRANT - WE IN THE 1ST. |
209 | SUB 1,1 SUBTRACT BASELINE OFFSET |
210 | STA Y SAVE |
211 | * |
212 | * |
213 | CALL PL$MV MOVE TO POINT |
214 | DAC X |
215 | DAC Y |
216 | DAC 0 |
217 | CALL PL$PD AND THEN PEN DOWN. ASK HERSHEY.. |
218 | * |
219 | PEND IRS PPTR INCREMENT POINT POINTER |
220 | IRS LEFT INCREMENT POINT COUNTER |
221 | NOP |
eabafcca |
222 | JMP MLOP LOOP AGAIN. |
8fac3a64 |
223 | * |
224 | * |
225 | PUP CALL PL$PU PEN UP |
226 | JMP PEND GET BACK TO THE LOOP END |
227 | * |
228 | * |
229 | MFIN CALL PL$PU END OF GLYPH, PEN UP! |
230 | * |
231 | CALL PL$RMR FUZZ COORDINATES AGAIN. |
eabafcca |
232 | DAC XNEX THE 81 ABOVE SAVES AN ADDITION OF 1 HERE. |
8fac3a64 |
233 | DAC ZERO Y UNTOUCHED. ZERO IS ZERO. |
234 | DAC 0 |
235 | * |
eabafcca |
236 | * CALL PL$MV MOVE PEN TO BEGINNING OF NEXT GLYPH - JUST IN CASE... |
237 | * DAC ZERO |
238 | * DAC ZERO |
239 | * DAC 0 |
240 | LDA XMIN RETURN WITH CORRECT WIDTH VALUE |
241 | ADD XNEX |
8fac3a64 |
242 | JMP* PLG RETURN TO CALLER. |
243 | * |
244 | * |
245 | **************************************************************** |
246 | * |
247 | * |
8fac3a64 |
248 | * |
249 | ******************************************************************** |
250 | ARG DEC 0 |
251 | LEFT DEC 0 |
252 | GPTR DEC 0 |
253 | PPTR DEC 0 |
254 | X DEC 0 |
255 | Y DEC 0 |
eabafcca |
256 | XMIN DEC 0 |
257 | XNEX DEC 0 |
8fac3a64 |
258 | ZERO DEC 0 |
eabafcca |
259 | TWDH DAC ** GENERATED TEXT WIDTH |
8fac3a64 |
260 | * |
261 | FONT XAC PL$FNT |
262 | * |
8fac3a64 |
263 | * |
264 | END |