*** empty log message ***
[h316.git] / lib / hachti / src / pl$txt.asm
CommitLineData
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 27NEWL 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 46FPTX 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*
81BUFP DEC 0 POINTER TO TEXT BUFFER IN FORTRAN PROGRAM
82BLEN DEC 0 LENGTH OF TEXT TO OUTPUT
83*
84*
85********************************************************************************
86*
87*
88TXIN DAC ** INTERNAL TEXT WRITE ROUTINE
89*
eabafcca 90 CALL PL$PUS PUSH GRAPHIC CONTEXT ONTO STACK
91SDA1 DAC **
8fac3a64 92 CALL PL$RST RESET COORDINATE SYSTEM. NOW WE MENTALLY PLOT FROM 0,0!
8fac3a64 93*
94TLOP 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*
102TEGO 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 127TFIN CALL PL$POP GET OLD GRAPHIC CONTEXT AND BE HAPPY
128SDA2 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*
141PLG 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*
152FIND 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*
159FGOO 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*
173PGLP 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*
201MLOP LDA LEFT DRAWING LOOP ENTRY
202 SNZ
203 JMP MFIN FINISHED DRAWING THAT GLYPH. GO, CLEAN UP.
204*
205MOGO 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*
231PEND IRS PPTR INCREMENT POINT POINTER
232 IRS LEFT INCREMENT POINT COUNTER
233 NOP
eabafcca 234 JMP MLOP LOOP AGAIN.
8fac3a64 235*
236*
237PUP CALL PL$PU PEN UP
238 JMP PEND GET BACK TO THE LOOP END
239*
240*
241MFIN 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********************************************************************
262ARG DEC 0
263LEFT DEC 0
264GPTR DEC 0
265PPTR DEC 0
266X DEC 0
267Y DEC 0
eabafcca 268XMIN DEC 0
269XNEX DEC 0
8fac3a64 270ZERO DEC 0
eabafcca 271TWDH DAC ** GENERATED TEXT WIDTH
8fac3a64 272*
273FONT XAC PL$FNT
274*
8fac3a64 275*
276 END