| 1 | * PLOTTER TEXT TEST |
| 2 | * |
| 3 | * |
| 4 | * |
| 5 | SUBR PL$TXT,FPTX |
| 6 | * |
| 7 | * |
| 8 | REL |
| 9 | ORG '0 |
| 10 | * |
| 11 | * |
| 12 | ******************************************************************************** |
| 13 | * |
| 14 | FPTX DAC ** FORTRAN TEXT OUTPUT ROUTINE |
| 15 | * |
| 16 | LDA* FPTX ARGUMENT TRANSFER |
| 17 | STA BUFP |
| 18 | IRS FPTX |
| 19 | * |
| 20 | LDA* FPTX PLEN IS INVERTED IMMEDIATELY |
| 21 | STA BLEN |
| 22 | LDA* BLEN |
| 23 | TCA |
| 24 | STA BLEN |
| 25 | IRS FPTX |
| 26 | IRS FPTX |
| 27 | * WE HAVE TO CORRECT OUR BUFFER POINTER, WHY???? |
| 28 | LDA FPTX LOAD RETURN ADDRESS |
| 29 | * JST OCT |
| 30 | * LDA FPTX |
| 31 | * ANA ='77000 |
| 32 | * ADD BUFP |
| 33 | STA BUFP |
| 34 | * |
| 35 | * |
| 36 | CALL PL$PU DON'T KNOW WHAT HAS HAPPENED BEFORE: PEN UP! |
| 37 | * |
| 38 | JST TXIN EXECUTE INTERNAL TEXT ROUTINE |
| 39 | * |
| 40 | JMP* FPTX RETURN TO CALLER |
| 41 | * |
| 42 | TXTP DAC TXTT |
| 43 | TXTT BCI 10,Philipp VOID |
| 44 | DAC 0 |
| 45 | ******************************************************************************** |
| 46 | * |
| 47 | * |
| 48 | BUFP DEC 0 POINTER TO TEXT BUFFER IN FORTRAN PROGRAM |
| 49 | BLEN DEC 0 LENGTH OF TEXT TO OUTPUT |
| 50 | * |
| 51 | * |
| 52 | ******************************************************************************** |
| 53 | * |
| 54 | * |
| 55 | TXIN DAC ** INTERNAL TEXT WRITE ROUTINE |
| 56 | * |
| 57 | LDA* XP SAVE CURRENT |
| 58 | STA XPC PEN POSITION |
| 59 | LDA* YP FOR |
| 60 | STA YPC NEWLINE PROCESSING |
| 61 | * |
| 62 | LDA* XP SAVE CURRENT |
| 63 | STA XPB PEN POSITION |
| 64 | LDA* YP FOR |
| 65 | STA YPB RESTORE |
| 66 | * |
| 67 | CALL PL$RST RESET COORDINATE SYSTEM. NOW WE MENTALLY PLOT FROM 0,0! |
| 68 | * |
| 69 | CRA CLEAR X BORROW VARIABLE |
| 70 | STA BROW (WILL BE NEEDED TO RESTORE COORDINATE POSITION) |
| 71 | * |
| 72 | * |
| 73 | TLOP LDA BLEN CHARACTER LOOP, FIRST TEST CHAR COUNTER |
| 74 | SNZ |
| 75 | JMP TFIN NO MORE CHARACTERS LEFT, GO HOME |
| 76 | * |
| 77 | LDA* BUFP NOW TEST TEXT FOR ZERO-TERMINATION |
| 78 | SNZ |
| 79 | JMP TFIN ZERO-TERMINATION, GO HOME |
| 80 | * |
| 81 | TEGO LGR 8 TAKE DOWN UPPER CHARACTER |
| 82 | ANA ='177 MASK OUT PARITY BIT |
| 83 | JST PLG DRAW GLYPH |
| 84 | * |
| 85 | ADD BROW PLG CHANGES THE X COORDINATE BUT TELLS US ABOUT THAT. |
| 86 | STA BROW WE ADD THE "BORROWED" X PIXELS UP FOR LATER. |
| 87 | * |
| 88 | IRS BLEN INCREMENT CHARACTER COUNTER |
| 89 | SKP |
| 90 | JMP TFIN NO MORE CHARACTERS LEFT, GO HOME. |
| 91 | * |
| 92 | LDA* BUFP NOW DO THE SECOND CHARACTER OF THE WORD. |
| 93 | ANA ='177 MASK OUT UPPER BITS AND PARITY. |
| 94 | * |
| 95 | JST PLG LIKE ABOVE |
| 96 | ADD BROW |
| 97 | STA BROW |
| 98 | * |
| 99 | IRS BLEN |
| 100 | NOP |
| 101 | * |
| 102 | IRS BUFP INCREMENT BUFFER POINTER TO NEXT LOCATION |
| 103 | JMP TLOP JUMP BACK IN CHARACTER LOOP |
| 104 | * |
| 105 | * |
| 106 | TFIN LDA XPB RESTORE AND GO HOME |
| 107 | ADD BROW TAKE HIDDEN X OFFSET INTO ACCOUNT (SEE GLYPH ROUTINE!) |
| 108 | ADD* XP |
| 109 | STA* XP UPDATE REAL (RELATED TO ORIGINAL COORDINATES) POSITION |
| 110 | LDA YPB SAME |
| 111 | ADD* YP WITH |
| 112 | STA* YP Y VALUE |
| 113 | * |
| 114 | JMP* TXIN THAT'S IT, WE GO HOME. |
| 115 | * |
| 116 | * |
| 117 | XP XAC PL$X EXTERNAL POINTER TO PLOT X COORDINATE |
| 118 | YP XAC PL$Y EXTERNAL POINTER TO PLOT Y COORDINATE |
| 119 | * |
| 120 | XPB DEC 0 BACKUP OF X COORDINATE |
| 121 | YPB DEC 0 BACKUP OF Y COORDINATE |
| 122 | * |
| 123 | BROW DEC 0 BORROWED X PIXELS |
| 124 | * |
| 125 | ********************************************************** |
| 126 | * |
| 127 | * |
| 128 | PLG DAC ** GLYPH DRAWING ROUTINE |
| 129 | STA ARG SAVE ARGUMENT |
| 130 | LDX FONT POINTER TO BEGINNING OF FONT FILE |
| 131 | LDA 4,1 LOAD POINT COUNT FROM (*FONT)+4 |
| 132 | TCA NEGATE |
| 133 | STA LEFT STORE AS NEGATIVE COUNTER |
| 134 | LDA FONT |
| 135 | ADD =5 CALCULATE FIRST GLYPH'S ADDRESS |
| 136 | STA GPTR SAVE TO GLYPH POINTER |
| 137 | * |
| 138 | * |
| 139 | FIND LDA LEFT SEARCH LOOP ENTRY |
| 140 | SZE |
| 141 | JMP FGOO WE STILL HAVE GLYPHS TO TEST, THERE IS HOPE! |
| 142 | * |
| 143 | CRA FAILED. WE HAVE NOT GENERATED AN OFFSET. |
| 144 | JMP* PLG RETURN |
| 145 | * |
| 146 | FGOO LDA* GPTR LOAD GLYPH NUMBER |
| 147 | SUB ARG SUBSTRACT WANTED GLYPH NUMBER |
| 148 | SNZ |
| 149 | JMP PGLP FOUND, TAKE GLYPH TO THE PLOTTING ROUTINE! |
| 150 | * |
| 151 | IRS LEFT INCREMENT LOOP COUNTER |
| 152 | LDX GPTR UPDATE |
| 153 | LDA GPTR GLYPH |
| 154 | ADD =2 POINTER TO |
| 155 | ADD 1,1 NEXT |
| 156 | STA GPTR GLYPH |
| 157 | JMP FIND SEARCH AGAIN |
| 158 | * |
| 159 | * |
| 160 | PGLP LDX GPTR LOAD CURRENT GLYPH'S ADDRESS TO INDEX REGISTER |
| 161 | * |
| 162 | LDA 2,1 LOAD OUR GLYPH'S LEFT AND RIGHT MARGINS |
| 163 | LGR 8 USE UPPER BITS FIRST |
| 164 | SUB =82 SUBSTRACT LETTER R - ASK HERSHEY, WHY IT'S THAT WAY! |
| 165 | TCA WE WANT THE LEFT MARGIN NEGATED FOR LATER USE. |
| 166 | STA X1 STORE |
| 167 | LDA 2,1 LOAD THE MARGINS AGAIN |
| 168 | CAL CLEAR UPPER BITS OF A |
| 169 | SUB =81 THAT'S CORRECT, ONE LESS FOR NOT OVERLAPPING GLYPHS! |
| 170 | STA X2 SAVE RIGHT MARGIN |
| 171 | * |
| 172 | CALL PL$RMR MOVE PLOT ORIGIN - THE REASON FOR THE BORROW STUFF. |
| 173 | DAC X1 GLYPH SHOULD START AT ORIGINAL X=0..BUT - ASK HERSHEY |
| 174 | DAC ZERO Y STAYS UNCHANGED. |
| 175 | DAC 0 |
| 176 | * |
| 177 | LDA 1,1 LOAD POINT COUNT |
| 178 | TCA COMPLEMENT |
| 179 | AOA INCREMENT - FIRST "POINT" WERE THE MARGINS. |
| 180 | STA LEFT SET UP THE WELL KNOWN COUNTER. |
| 181 | * |
| 182 | LDA GPTR |
| 183 | ADD =3 ADD OFFSET IN GLYPH DATA |
| 184 | STA PPTR SAVE POINTER TO FIRST POINT DATA WORD. |
| 185 | * |
| 186 | * |
| 187 | MLOP LDA LEFT DRAWING LOOP ENTRY |
| 188 | SNZ |
| 189 | JMP MFIN FINISHED DRAWING THAT GLYPH. GO, CLEAN UP. |
| 190 | * |
| 191 | MOGO LDA* PPTR |
| 192 | * |
| 193 | SUB ='20122 TEST FOR OBSCURE PEN UP CONDITION - ASK HERSHEY.. |
| 194 | SNZ |
| 195 | JMP PUP THIS WORD CONTAINS ONLY A PEN UP COMMAND. |
| 196 | * |
| 197 | LDA* PPTR MAKE POINT'S X VALUE |
| 198 | LGR 8 SHIFT DOWN |
| 199 | SUB =82 SUBSTRACT LETTER R - ASK HERSHEY |
| 200 | STA X STORE |
| 201 | * |
| 202 | LDX FONT WE WILL NEED THE BASELINE HEIGHT FROM THERE |
| 203 | LDA* PPTR LOAD AGAIN, FOR Y POSITION |
| 204 | CAL CLEAR UPPER BITS |
| 205 | SUB =82 THE SUBSTRACTION.. |
| 206 | TCA HERSHEY LIVED IN THE 4TH QUADRANT - WE IN THE 1ST. |
| 207 | SUB 1,1 SUBTRACT BASELINE OFFSET |
| 208 | STA Y SAVE |
| 209 | * |
| 210 | * |
| 211 | CALL PL$MV MOVE TO POINT |
| 212 | DAC X |
| 213 | DAC Y |
| 214 | DAC 0 |
| 215 | CALL PL$PD AND THEN PEN DOWN. ASK HERSHEY.. |
| 216 | * |
| 217 | PEND IRS PPTR INCREMENT POINT POINTER |
| 218 | IRS LEFT INCREMENT POINT COUNTER |
| 219 | NOP |
| 220 | JMP MLOP LOOP AGAIN. |
| 221 | * |
| 222 | * |
| 223 | PUP CALL PL$PU PEN UP |
| 224 | JMP PEND GET BACK TO THE LOOP END |
| 225 | * |
| 226 | * |
| 227 | MFIN CALL PL$PU END OF GLYPH, PEN UP! |
| 228 | * |
| 229 | CALL PL$RMR FUZZ COORDINATES AGAIN. |
| 230 | DAC X2 THE 81 ABOVE SAVES AN ADDITION OF 1 HERE. |
| 231 | DAC ZERO Y UNTOUCHED. ZERO IS ZERO. |
| 232 | DAC 0 |
| 233 | * |
| 234 | CALL PL$MV MOVE PEN TO BEGINNING OF NEXT GLYPH - JUST IN CASE... |
| 235 | DAC ZERO |
| 236 | DAC ZERO |
| 237 | DAC 0 |
| 238 | * |
| 239 | LDA X2 ADD MARGINS |
| 240 | ADD X1 TO BORROWED GLYPH WIDTH |
| 241 | JMP* PLG RETURN TO CALLER. |
| 242 | * |
| 243 | * |
| 244 | **************************************************************** |
| 245 | * |
| 246 | * |
| 247 | PNL DAC ** NEW LINE ROUTINE |
| 248 | LDA YPC |
| 249 | SUB* FONT VERTIVAL SPACING |
| 250 | STA YPC |
| 251 | CALL PL$MV |
| 252 | DAC XPC |
| 253 | DAC YPC |
| 254 | DAC 0 |
| 255 | JMP* PNL |
| 256 | * |
| 257 | * |
| 258 | XPC DEC 0 |
| 259 | YPC DEC 0 |
| 260 | * |
| 261 | * |
| 262 | * |
| 263 | ******************************************************************** |
| 264 | ARG DEC 0 |
| 265 | LEFT DEC 0 |
| 266 | GPTR DEC 0 |
| 267 | PPTR DEC 0 |
| 268 | X DEC 0 |
| 269 | Y DEC 0 |
| 270 | X1 DEC 0 |
| 271 | X2 DEC 0 |
| 272 | ZERO DEC 0 |
| 273 | * |
| 274 | FONT XAC PL$FNT |
| 275 | * |
| 276 | MK1 DAC ** |
| 277 | OCP '104 |
| 278 | LDA M1 |
| 279 | OTA 4 |
| 280 | JMP *-1 |
| 281 | ICA |
| 282 | OTA 4 |
| 283 | JMP *-1 |
| 284 | * LDA =10 |
| 285 | * OTA '4 |
| 286 | * JMP *-1 |
| 287 | * LDA =13 |
| 288 | * OTA '4 |
| 289 | * JMP *-1 |
| 290 | * LDA =13 |
| 291 | * OTA '4 |
| 292 | * JMP *-1 |
| 293 | JMP* MK1 |
| 294 | * |
| 295 | * |
| 296 | MK2 DAC ** |
| 297 | OCP '104 |
| 298 | LDA M2 |
| 299 | OTA 4 |
| 300 | JMP *-1 |
| 301 | ICA |
| 302 | OTA 4 |
| 303 | JMP *-1 |
| 304 | * LDA =10 |
| 305 | * OTA '4 |
| 306 | * JMP *-1 |
| 307 | * LDA =13 |
| 308 | * OTA '4 |
| 309 | * JMP *-1 |
| 310 | * LDA =13 |
| 311 | * OTA '4 |
| 312 | * JMP *-1 |
| 313 | JMP* MK2 |
| 314 | * |
| 315 | * |
| 316 | M1 BCI 2,A: |
| 317 | M2 BCI 2,B: |
| 318 | * |
| 319 | OCT DAC ** |
| 320 | OCP '104 |
| 321 | IAB SAVE TO B |
| 322 | CRA |
| 323 | LLR 1 |
| 324 | ADD =48 |
| 325 | OTA '4 ASR OUTPUT |
| 326 | JMP *-1 |
| 327 | CRA |
| 328 | LLR 3 |
| 329 | ADD =48 |
| 330 | OTA 4 ASR OUTPUT |
| 331 | OTA 4 |
| 332 | JMP *-1 |
| 333 | CRA |
| 334 | LLR 3 |
| 335 | ADD =48 |
| 336 | OTA '4 ASR OUTPUT |
| 337 | OTA 4 |
| 338 | JMP *-1 |
| 339 | CRA |
| 340 | LLR 3 |
| 341 | ADD =48 |
| 342 | OTA '4 ASR OUTPUT |
| 343 | OTA 4 |
| 344 | JMP *-1 |
| 345 | CRA |
| 346 | LLR 3 |
| 347 | ADD =48 |
| 348 | OTA '4 ASR OUTPUT |
| 349 | OTA 4 |
| 350 | JMP *-1 |
| 351 | CRA |
| 352 | LLR 3 |
| 353 | ADD =48 |
| 354 | OTA '4 ASR OUTPUT |
| 355 | OTA 4 |
| 356 | JMP *-1 |
| 357 | * |
| 358 | LDA =10 |
| 359 | OTA '4 |
| 360 | JMP *-1 |
| 361 | LDA =13 |
| 362 | OTA '4 |
| 363 | JMP *-1 |
| 364 | LDA =13 |
| 365 | OTA '4 |
| 366 | JMP *-1 |
| 367 | SKS 4 |
| 368 | JMP *-1 |
| 369 | * |
| 370 | JMP* OCT |
| 371 | * |
| 372 | END |