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