* PLOTTER TEXT TEST * * * SUBR PL$TXT,FPTX * * REL ORG '0 * * ******************************************************************************** * FPTX DAC ** FORTRAN TEXT OUTPUT ROUTINE * 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 * WE HAVE TO CORRECT OUR BUFFER POINTER, WHY???? LDA FPTX LOAD RETURN ADDRESS * JST OCT * LDA FPTX * ANA ='77000 * ADD BUFP STA BUFP * * CALL PL$PU DON'T KNOW WHAT HAS HAPPENED BEFORE: PEN UP! * JST TXIN EXECUTE INTERNAL TEXT ROUTINE * 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 * LDA* XP SAVE CURRENT STA XPC PEN POSITION LDA* YP FOR STA YPC NEWLINE PROCESSING * LDA* XP SAVE CURRENT STA XPB PEN POSITION LDA* YP FOR STA YPB RESTORE * CALL PL$RST RESET COORDINATE SYSTEM. NOW WE MENTALLY PLOT FROM 0,0! * CRA CLEAR X BORROW VARIABLE STA BROW (WILL BE NEEDED TO RESTORE COORDINATE POSITION) * * 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 BROW PLG CHANGES THE X COORDINATE BUT TELLS US ABOUT THAT. STA BROW WE ADD THE "BORROWED" X PIXELS UP FOR LATER. * 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 BROW STA BROW * IRS BLEN NOP * IRS BUFP INCREMENT BUFFER POINTER TO NEXT LOCATION JMP TLOP JUMP BACK IN CHARACTER LOOP * * TFIN LDA XPB RESTORE AND GO HOME ADD BROW TAKE HIDDEN X OFFSET INTO ACCOUNT (SEE GLYPH ROUTINE!) ADD* XP STA* XP UPDATE REAL (RELATED TO ORIGINAL COORDINATES) POSITION LDA YPB SAME ADD* YP WITH STA* YP Y VALUE * JMP* TXIN THAT'S IT, WE GO HOME. * * XP XAC PL$X EXTERNAL POINTER TO PLOT X COORDINATE YP XAC PL$Y EXTERNAL POINTER TO PLOT Y COORDINATE * XPB DEC 0 BACKUP OF X COORDINATE YPB DEC 0 BACKUP OF Y COORDINATE * BROW DEC 0 BORROWED X PIXELS * ********************************************************** * * 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 X1 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 X2 SAVE RIGHT MARGIN * CALL PL$RMR MOVE PLOT ORIGIN - THE REASON FOR THE BORROW STUFF. DAC X1 GLYPH SHOULD START AT ORIGINAL X=0..BUT - ASK HERSHEY DAC ZERO Y STAYS UNCHANGED. DAC 0 * LDA 1,1 LOAD POINT COUNT TCA COMPLEMENT AOA INCREMENT - FIRST "POINT" WERE THE MARGINS. STA LEFT SET UP THE WELL KNOWN COUNTER. * 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 X2 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 X2 ADD MARGINS ADD X1 TO BORROWED GLYPH WIDTH JMP* PLG RETURN TO CALLER. * * **************************************************************** * * PNL DAC ** NEW LINE ROUTINE LDA YPC SUB* FONT VERTIVAL SPACING STA YPC CALL PL$MV DAC XPC DAC YPC DAC 0 JMP* PNL * * XPC DEC 0 YPC DEC 0 * * * ******************************************************************** ARG DEC 0 LEFT DEC 0 GPTR DEC 0 PPTR DEC 0 X DEC 0 Y DEC 0 X1 DEC 0 X2 DEC 0 ZERO DEC 0 * FONT XAC PL$FNT * MK1 DAC ** OCP '104 LDA M1 OTA 4 JMP *-1 ICA OTA 4 JMP *-1 * LDA =10 * OTA '4 * JMP *-1 * LDA =13 * OTA '4 * JMP *-1 * LDA =13 * OTA '4 * JMP *-1 JMP* MK1 * * MK2 DAC ** OCP '104 LDA M2 OTA 4 JMP *-1 ICA OTA 4 JMP *-1 * LDA =10 * OTA '4 * JMP *-1 * LDA =13 * OTA '4 * JMP *-1 * LDA =13 * OTA '4 * JMP *-1 JMP* MK2 * * M1 BCI 2,A: M2 BCI 2,B: * OCT DAC ** OCP '104 IAB SAVE TO B CRA LLR 1 ADD =48 OTA '4 ASR OUTPUT JMP *-1 CRA LLR 3 ADD =48 OTA 4 ASR OUTPUT OTA 4 JMP *-1 CRA LLR 3 ADD =48 OTA '4 ASR OUTPUT OTA 4 JMP *-1 CRA LLR 3 ADD =48 OTA '4 ASR OUTPUT OTA 4 JMP *-1 CRA LLR 3 ADD =48 OTA '4 ASR OUTPUT OTA 4 JMP *-1 CRA LLR 3 ADD =48 OTA '4 ASR OUTPUT OTA 4 JMP *-1 * LDA =10 OTA '4 JMP *-1 LDA =13 OTA '4 JMP *-1 LDA =13 OTA '4 JMP *-1 SKS 4 JMP *-1 * JMP* OCT * END