* PLOTTER TEXT OUTPUT * * * SUBR PL$TXT,FPTX SUBR PL$TNL,NEWL * * REL ORG '0 * * ******************************************************************************** * NEWL DAC ** LDA* FONT LOAD VERTICAL SPACING FROM FONT TCA STA GPTR LDA TWDH LAST TEXT WIDTH TCA STA PPTR CALL PL$MVR MOVE RELATIVELY DAC PPTR DAC GPTR DAC 0 JMP* NEWL RETURN * * ******************************************************************************** * * **** PL$TXT - TEXT OUTPUT ROUTINE * FPTX DAC ** FORTRAN TEXT OUTPUT ROUTINE * LDA* FPTX LOAD STACK DATA POINTER STA SDA1 SAVE STA SDA2 IRS FPTX * LDA* FPTX ARGUMENT TRANSFER STA BUFP IRS FPTX * LDA* FPTX PLEN IS INVERTED IMMEDIATELY STA BLEN LDA* BLEN TCA STA BLEN IRS FPTX IRS FPTX * CALL PL$PU DON'T KNOW WHAT HAS HAPPENED BEFORE: PEN UP! * CRA STA TWDH TEXT WIDTH * JST TXIN EXECUTE INTERNAL TEXT ROUTINE * LDA TWDH JMP* FPTX RETURN TO CALLER * * TXTP DAC TXTT * TXTT BCI 10,Philipp VOID * DAC 0 ******************************************************************************** * * BUFP DEC 0 POINTER TO TEXT BUFFER IN FORTRAN PROGRAM BLEN DEC 0 LENGTH OF TEXT TO OUTPUT * * ******************************************************************************** * * TXIN DAC ** INTERNAL TEXT WRITE ROUTINE * CALL PL$PUS PUSH GRAPHIC CONTEXT ONTO STACK SDA1 DAC ** CALL PL$RST RESET COORDINATE SYSTEM. NOW WE MENTALLY PLOT FROM 0,0! * TLOP LDA BLEN CHARACTER LOOP, FIRST TEST CHAR COUNTER SNZ JMP TFIN NO MORE CHARACTERS LEFT, GO HOME * LDA* BUFP NOW TEST TEXT FOR ZERO-TERMINATION SNZ JMP TFIN ZERO-TERMINATION, GO HOME * TEGO LGR 8 TAKE DOWN UPPER CHARACTER ANA ='177 MASK OUT PARITY BIT JST PLG DRAW GLYPH ADD TWDH STA TWDH * IRS BLEN INCREMENT CHARACTER COUNTER SKP JMP TFIN NO MORE CHARACTERS LEFT, GO HOME. * LDA* BUFP NOW DO THE SECOND CHARACTER OF THE WORD. ANA ='177 MASK OUT UPPER BITS AND PARITY. * JST PLG LIKE ABOVE ADD TWDH STA TWDH * * IRS BLEN NOP * IRS BUFP INCREMENT BUFFER POINTER TO NEXT LOCATION JMP TLOP JUMP BACK IN CHARACTER LOOP * * TFIN CALL PL$POP GET OLD GRAPHIC CONTEXT AND BE HAPPY SDA2 DAC ** CALL PL$MVR DAC TWDH DAC ZERO DAC * * JMP* TXIN THAT'S IT, WE GO HOME. * * * ********************************************************** * * PLG DAC ** GLYPH DRAWING ROUTINE STA ARG SAVE ARGUMENT LDX FONT POINTER TO BEGINNING OF FONT FILE LDA 4,1 LOAD POINT COUNT FROM (*FONT)+4 TCA NEGATE STA LEFT STORE AS NEGATIVE COUNTER LDA FONT ADD =5 CALCULATE FIRST GLYPH'S ADDRESS STA GPTR SAVE TO GLYPH POINTER * * FIND LDA LEFT SEARCH LOOP ENTRY SZE JMP FGOO WE STILL HAVE GLYPHS TO TEST, THERE IS HOPE! * CRA FAILED. WE HAVE NOT GENERATED AN OFFSET. JMP* PLG RETURN * FGOO LDA* GPTR LOAD GLYPH NUMBER SUB ARG SUBSTRACT WANTED GLYPH NUMBER SNZ JMP PGLP FOUND, TAKE GLYPH TO THE PLOTTING ROUTINE! * IRS LEFT INCREMENT LOOP COUNTER LDX GPTR UPDATE LDA GPTR GLYPH ADD =2 POINTER TO ADD 1,1 NEXT STA GPTR GLYPH JMP FIND SEARCH AGAIN * * PGLP LDX GPTR LOAD CURRENT GLYPH'S ADDRESS TO INDEX REGISTER * LDA 2,1 LOAD OUR GLYPH'S LEFT AND RIGHT MARGINS LGR 8 USE UPPER BITS FIRST SUB =82 SUBSTRACT LETTER R - ASK HERSHEY, WHY IT'S THAT WAY! TCA WE WANT THE LEFT MARGIN NEGATED FOR LATER USE. STA XMIN STORE LDA 2,1 LOAD THE MARGINS AGAIN CAL CLEAR UPPER BITS OF A SUB =81 THAT'S CORRECT, ONE LESS FOR NOT OVERLAPPING GLYPHS! STA XNEX SAVE RIGHT MARGIN * LDA 1,1 LOAD POINT COUNT * CALL OCT TCA COMPLEMENT AOA INCREMENT - FIRST "POINT" WERE THE MARGINS. STA LEFT SET UP THE WELL KNOWN COUNTER. * CALL PL$RMR MOVE ORIGIN DAC XMIN DAC ZERO Y STAYS UNCHANGED. DAC 0 * LDA GPTR ADD =3 ADD OFFSET IN GLYPH DATA STA PPTR SAVE POINTER TO FIRST POINT DATA WORD. * * MLOP LDA LEFT DRAWING LOOP ENTRY SNZ JMP MFIN FINISHED DRAWING THAT GLYPH. GO, CLEAN UP. * MOGO LDA* PPTR * SUB ='20122 TEST FOR OBSCURE PEN UP CONDITION - ASK HERSHEY.. SNZ JMP PUP THIS WORD CONTAINS ONLY A PEN UP COMMAND. * LDA* PPTR MAKE POINT'S X VALUE LGR 8 SHIFT DOWN SUB =82 SUBSTRACT LETTER R - ASK HERSHEY STA X STORE * LDX FONT WE WILL NEED THE BASELINE HEIGHT FROM THERE LDA* PPTR LOAD AGAIN, FOR Y POSITION CAL CLEAR UPPER BITS SUB =82 THE SUBSTRACTION.. TCA HERSHEY LIVED IN THE 4TH QUADRANT - WE IN THE 1ST. SUB 1,1 SUBTRACT BASELINE OFFSET STA Y SAVE * * CALL PL$MV MOVE TO POINT DAC X DAC Y DAC 0 CALL PL$PD AND THEN PEN DOWN. ASK HERSHEY.. * PEND IRS PPTR INCREMENT POINT POINTER IRS LEFT INCREMENT POINT COUNTER NOP JMP MLOP LOOP AGAIN. * * PUP CALL PL$PU PEN UP JMP PEND GET BACK TO THE LOOP END * * MFIN CALL PL$PU END OF GLYPH, PEN UP! * CALL PL$RMR FUZZ COORDINATES AGAIN. DAC XNEX THE 81 ABOVE SAVES AN ADDITION OF 1 HERE. DAC ZERO Y UNTOUCHED. ZERO IS ZERO. DAC 0 * * CALL PL$MV MOVE PEN TO BEGINNING OF NEXT GLYPH - JUST IN CASE... * DAC ZERO * DAC ZERO * DAC 0 LDA XMIN RETURN WITH CORRECT WIDTH VALUE ADD XNEX JMP* PLG RETURN TO CALLER. * * **************************************************************** * * * ******************************************************************** ARG DEC 0 LEFT DEC 0 GPTR DEC 0 PPTR DEC 0 X DEC 0 Y DEC 0 XMIN DEC 0 XNEX DEC 0 ZERO DEC 0 TWDH DAC ** GENERATED TEXT WIDTH * FONT XAC PL$FNT * * END