| 1 | * PLOTTER TEXT OUTPUT |
| 2 | * |
| 3 | * PHILIPP HACHTMANN |
| 4 | * 06.11.2008 |
| 5 | * |
| 6 | * |
| 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 | * |
| 17 | SUBR PL$TXT,FPTX |
| 18 | SUBR PL$TNL,NEWL |
| 19 | * |
| 20 | * |
| 21 | REL |
| 22 | ORG '0 |
| 23 | * |
| 24 | * |
| 25 | ******************************************************************************** |
| 26 | * |
| 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 | * |
| 46 | FPTX DAC ** FORTRAN TEXT OUTPUT ROUTINE |
| 47 | * |
| 48 | LDA* FPTX LOAD STACK DATA POINTER |
| 49 | STA SDA1 SAVE |
| 50 | STA SDA2 |
| 51 | IRS FPTX |
| 52 | * |
| 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 |
| 64 | * |
| 65 | CALL PL$PU DON'T KNOW WHAT HAS HAPPENED BEFORE: PEN UP! |
| 66 | * |
| 67 | CRA |
| 68 | STA TWDH TEXT WIDTH |
| 69 | * |
| 70 | JST TXIN EXECUTE INTERNAL TEXT ROUTINE |
| 71 | * |
| 72 | LDA TWDH |
| 73 | JMP* FPTX RETURN TO CALLER |
| 74 | * |
| 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 | * |
| 87 | CALL PL$PUS PUSH GRAPHIC CONTEXT ONTO STACK |
| 88 | SDA1 DAC ** |
| 89 | CALL PL$RST RESET COORDINATE SYSTEM. NOW WE MENTALLY PLOT FROM 0,0! |
| 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 |
| 102 | ADD TWDH |
| 103 | STA TWDH ACCOUNT FOR TEXT WIDTH |
| 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 |
| 113 | ADD TWDH |
| 114 | STA TWDH ACCOUNT FOR TEXT WIDTH |
| 115 | * |
| 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 | * |
| 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 | * |
| 131 | JMP* TXIN THAT'S IT, RETURN |
| 132 | * |
| 133 | * |
| 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! |
| 160 | * |
| 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. |
| 176 | STA XMIN STORE |
| 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! |
| 180 | STA XNEX SAVE RIGHT MARGIN |
| 181 | * |
| 182 | LDA 1,1 LOAD POINT COUNT |
| 183 | * CALL OCT |
| 184 | TCA COMPLEMENT |
| 185 | AOA INCREMENT - FIRST "POINT" WERE THE MARGINS. |
| 186 | STA LEFT SET UP THE WELL KNOWN COUNTER. |
| 187 | * |
| 188 | CALL PL$RMR MOVE ORIGIN |
| 189 | DAC XMIN |
| 190 | DAC ZERO Y STAYS UNCHANGED. |
| 191 | DAC 0 |
| 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 |
| 231 | JMP MLOP LOOP AGAIN. |
| 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. |
| 241 | DAC XNEX THE 81 ABOVE SAVES AN ADDITION OF 1 HERE. |
| 242 | DAC ZERO Y UNTOUCHED. ZERO IS ZERO. |
| 243 | DAC 0 |
| 244 | * |
| 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 |
| 251 | JMP* PLG RETURN TO CALLER. |
| 252 | * |
| 253 | * |
| 254 | **************************************************************** |
| 255 | * |
| 256 | * |
| 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 |
| 265 | XMIN DEC 0 |
| 266 | XNEX DEC 0 |
| 267 | ZERO DEC 0 |
| 268 | TWDH DAC ** GENERATED TEXT WIDTH |
| 269 | * |
| 270 | FONT XAC PL$FNT |
| 271 | * |
| 272 | * |
| 273 | END |