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 | * |
8fac3a64 |
75 | ******************************************************************************** |
76 | * |
77 | * |
78 | BUFP DEC 0 POINTER TO TEXT BUFFER IN FORTRAN PROGRAM |
79 | BLEN DEC 0 LENGTH OF TEXT TO OUTPUT |
80 | * |
81 | * |
82 | ******************************************************************************** |
83 | * |
84 | * |
85 | TXIN DAC ** INTERNAL TEXT WRITE ROUTINE |
86 | * |
eabafcca |
87 | CALL PL$PUS PUSH GRAPHIC CONTEXT ONTO STACK |
88 | SDA1 DAC ** |
8fac3a64 |
89 | CALL PL$RST RESET COORDINATE SYSTEM. NOW WE MENTALLY PLOT FROM 0,0! |
8fac3a64 |
90 | * |
91 | TLOP LDA BLEN CHARACTER LOOP, FIRST TEST CHAR COUNTER |
92 | SNZ |
93 | JMP TFIN NO MORE CHARACTERS LEFT, GO HOME |
94 | * |
95 | LDA* BUFP NOW TEST TEXT FOR ZERO-TERMINATION |
96 | SNZ |
97 | JMP TFIN ZERO-TERMINATION, GO HOME |
98 | * |
99 | TEGO LGR 8 TAKE DOWN UPPER CHARACTER |
100 | ANA ='177 MASK OUT PARITY BIT |
101 | JST PLG DRAW GLYPH |
eabafcca |
102 | ADD TWDH |
7128b573 |
103 | STA TWDH ACCOUNT FOR TEXT WIDTH |
8fac3a64 |
104 | * |
105 | IRS BLEN INCREMENT CHARACTER COUNTER |
106 | SKP |
107 | JMP TFIN NO MORE CHARACTERS LEFT, GO HOME. |
108 | * |
109 | LDA* BUFP NOW DO THE SECOND CHARACTER OF THE WORD. |
110 | ANA ='177 MASK OUT UPPER BITS AND PARITY. |
111 | * |
112 | JST PLG LIKE ABOVE |
eabafcca |
113 | ADD TWDH |
7128b573 |
114 | STA TWDH ACCOUNT FOR TEXT WIDTH |
eabafcca |
115 | * |
8fac3a64 |
116 | * |
117 | IRS BLEN |
118 | NOP |
119 | * |
120 | IRS BUFP INCREMENT BUFFER POINTER TO NEXT LOCATION |
121 | JMP TLOP JUMP BACK IN CHARACTER LOOP |
122 | * |
123 | * |
eabafcca |
124 | TFIN CALL PL$POP GET OLD GRAPHIC CONTEXT AND BE HAPPY |
125 | SDA2 DAC ** |
126 | CALL PL$MVR |
127 | DAC TWDH |
128 | DAC ZERO |
129 | DAC * |
130 | * |
7128b573 |
131 | JMP* TXIN THAT'S IT, RETURN |
8fac3a64 |
132 | * |
133 | * |
8fac3a64 |
134 | * |
135 | ********************************************************** |
136 | * |
137 | * |
138 | PLG DAC ** GLYPH DRAWING ROUTINE |
139 | STA ARG SAVE ARGUMENT |
140 | LDX FONT POINTER TO BEGINNING OF FONT FILE |
141 | LDA 4,1 LOAD POINT COUNT FROM (*FONT)+4 |
142 | TCA NEGATE |
143 | STA LEFT STORE AS NEGATIVE COUNTER |
144 | LDA FONT |
145 | ADD =5 CALCULATE FIRST GLYPH'S ADDRESS |
146 | STA GPTR SAVE TO GLYPH POINTER |
147 | * |
148 | * |
149 | FIND LDA LEFT SEARCH LOOP ENTRY |
150 | SZE |
151 | JMP FGOO WE STILL HAVE GLYPHS TO TEST, THERE IS HOPE! |
152 | * |
153 | CRA FAILED. WE HAVE NOT GENERATED AN OFFSET. |
154 | JMP* PLG RETURN |
155 | * |
156 | FGOO LDA* GPTR LOAD GLYPH NUMBER |
157 | SUB ARG SUBSTRACT WANTED GLYPH NUMBER |
158 | SNZ |
159 | JMP PGLP FOUND, TAKE GLYPH TO THE PLOTTING ROUTINE! |
eabafcca |
160 | * |
8fac3a64 |
161 | IRS LEFT INCREMENT LOOP COUNTER |
162 | LDX GPTR UPDATE |
163 | LDA GPTR GLYPH |
164 | ADD =2 POINTER TO |
165 | ADD 1,1 NEXT |
166 | STA GPTR GLYPH |
167 | JMP FIND SEARCH AGAIN |
168 | * |
169 | * |
170 | PGLP LDX GPTR LOAD CURRENT GLYPH'S ADDRESS TO INDEX REGISTER |
171 | * |
172 | LDA 2,1 LOAD OUR GLYPH'S LEFT AND RIGHT MARGINS |
173 | LGR 8 USE UPPER BITS FIRST |
174 | SUB =82 SUBSTRACT LETTER R - ASK HERSHEY, WHY IT'S THAT WAY! |
175 | TCA WE WANT THE LEFT MARGIN NEGATED FOR LATER USE. |
eabafcca |
176 | STA XMIN STORE |
8fac3a64 |
177 | LDA 2,1 LOAD THE MARGINS AGAIN |
178 | CAL CLEAR UPPER BITS OF A |
179 | SUB =81 THAT'S CORRECT, ONE LESS FOR NOT OVERLAPPING GLYPHS! |
eabafcca |
180 | STA XNEX SAVE RIGHT MARGIN |
8fac3a64 |
181 | * |
182 | LDA 1,1 LOAD POINT COUNT |
eabafcca |
183 | * CALL OCT |
8fac3a64 |
184 | TCA COMPLEMENT |
185 | AOA INCREMENT - FIRST "POINT" WERE THE MARGINS. |
186 | STA LEFT SET UP THE WELL KNOWN COUNTER. |
eabafcca |
187 | * |
188 | CALL PL$RMR MOVE ORIGIN |
189 | DAC XMIN |
190 | DAC ZERO Y STAYS UNCHANGED. |
191 | DAC 0 |
8fac3a64 |
192 | * |
193 | LDA GPTR |
194 | ADD =3 ADD OFFSET IN GLYPH DATA |
195 | STA PPTR SAVE POINTER TO FIRST POINT DATA WORD. |
196 | * |
197 | * |
198 | MLOP LDA LEFT DRAWING LOOP ENTRY |
199 | SNZ |
200 | JMP MFIN FINISHED DRAWING THAT GLYPH. GO, CLEAN UP. |
201 | * |
202 | MOGO LDA* PPTR |
203 | * |
204 | SUB ='20122 TEST FOR OBSCURE PEN UP CONDITION - ASK HERSHEY.. |
205 | SNZ |
206 | JMP PUP THIS WORD CONTAINS ONLY A PEN UP COMMAND. |
207 | * |
208 | LDA* PPTR MAKE POINT'S X VALUE |
209 | LGR 8 SHIFT DOWN |
210 | SUB =82 SUBSTRACT LETTER R - ASK HERSHEY |
211 | STA X STORE |
212 | * |
213 | LDX FONT WE WILL NEED THE BASELINE HEIGHT FROM THERE |
214 | LDA* PPTR LOAD AGAIN, FOR Y POSITION |
215 | CAL CLEAR UPPER BITS |
216 | SUB =82 THE SUBSTRACTION.. |
217 | TCA HERSHEY LIVED IN THE 4TH QUADRANT - WE IN THE 1ST. |
218 | SUB 1,1 SUBTRACT BASELINE OFFSET |
219 | STA Y SAVE |
220 | * |
221 | * |
222 | CALL PL$MV MOVE TO POINT |
223 | DAC X |
224 | DAC Y |
225 | DAC 0 |
226 | CALL PL$PD AND THEN PEN DOWN. ASK HERSHEY.. |
227 | * |
228 | PEND IRS PPTR INCREMENT POINT POINTER |
229 | IRS LEFT INCREMENT POINT COUNTER |
230 | NOP |
eabafcca |
231 | JMP MLOP LOOP AGAIN. |
8fac3a64 |
232 | * |
233 | * |
234 | PUP CALL PL$PU PEN UP |
235 | JMP PEND GET BACK TO THE LOOP END |
236 | * |
237 | * |
238 | MFIN CALL PL$PU END OF GLYPH, PEN UP! |
239 | * |
240 | CALL PL$RMR FUZZ COORDINATES AGAIN. |
eabafcca |
241 | DAC XNEX THE 81 ABOVE SAVES AN ADDITION OF 1 HERE. |
8fac3a64 |
242 | DAC ZERO Y UNTOUCHED. ZERO IS ZERO. |
243 | DAC 0 |
244 | * |
eabafcca |
245 | * CALL PL$MV MOVE PEN TO BEGINNING OF NEXT GLYPH - JUST IN CASE... |
246 | * DAC ZERO |
247 | * DAC ZERO |
248 | * DAC 0 |
249 | LDA XMIN RETURN WITH CORRECT WIDTH VALUE |
250 | ADD XNEX |
8fac3a64 |
251 | JMP* PLG RETURN TO CALLER. |
252 | * |
253 | * |
254 | **************************************************************** |
255 | * |
256 | * |
8fac3a64 |
257 | * |
258 | ******************************************************************** |
259 | ARG DEC 0 |
260 | LEFT DEC 0 |
261 | GPTR DEC 0 |
262 | PPTR DEC 0 |
263 | X DEC 0 |
264 | Y DEC 0 |
eabafcca |
265 | XMIN DEC 0 |
266 | XNEX DEC 0 |
8fac3a64 |
267 | ZERO DEC 0 |
eabafcca |
268 | TWDH DAC ** GENERATED TEXT WIDTH |
8fac3a64 |
269 | * |
270 | FONT XAC PL$FNT |
271 | * |
8fac3a64 |
272 | * |
273 | END |