*** 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*
8fac3a64 75********************************************************************************
76*
77*
78BUFP DEC 0 POINTER TO TEXT BUFFER IN FORTRAN PROGRAM
79BLEN DEC 0 LENGTH OF TEXT TO OUTPUT
80*
81*
82********************************************************************************
83*
84*
85TXIN DAC ** INTERNAL TEXT WRITE ROUTINE
86*
eabafcca 87 CALL PL$PUS PUSH GRAPHIC CONTEXT ONTO STACK
88SDA1 DAC **
8fac3a64 89 CALL PL$RST RESET COORDINATE SYSTEM. NOW WE MENTALLY PLOT FROM 0,0!
8fac3a64 90*
91TLOP 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*
99TEGO 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 124TFIN CALL PL$POP GET OLD GRAPHIC CONTEXT AND BE HAPPY
125SDA2 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*
138PLG 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*
149FIND 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*
156FGOO 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*
170PGLP 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*
198MLOP LDA LEFT DRAWING LOOP ENTRY
199 SNZ
200 JMP MFIN FINISHED DRAWING THAT GLYPH. GO, CLEAN UP.
201*
202MOGO 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*
228PEND IRS PPTR INCREMENT POINT POINTER
229 IRS LEFT INCREMENT POINT COUNTER
230 NOP
eabafcca 231 JMP MLOP LOOP AGAIN.
8fac3a64 232*
233*
234PUP CALL PL$PU PEN UP
235 JMP PEND GET BACK TO THE LOOP END
236*
237*
238MFIN 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********************************************************************
259ARG DEC 0
260LEFT DEC 0
261GPTR DEC 0
262PPTR DEC 0
263X DEC 0
264Y DEC 0
eabafcca 265XMIN DEC 0
266XNEX DEC 0
8fac3a64 267ZERO DEC 0
eabafcca 268TWDH DAC ** GENERATED TEXT WIDTH
8fac3a64 269*
270FONT XAC PL$FNT
271*
8fac3a64 272*
273 END