X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=sw%2Frescue%2Flab8e_goettingen%2Fdisk2_11%2Frkb%2Fparoff%2Fx.ra;fp=sw%2Frescue%2Flab8e_goettingen%2Fdisk2_11%2Frkb%2Fparoff%2Fx.ra;h=2f194ea7e8e641ac03fd72b1be62419e23e70296;hb=81e70d488b71bf995c459ca3a02c025993460ffa;hp=0000000000000000000000000000000000000000;hpb=07ec0278333ed187ac242dedcff13c56cf1b0b91;p=pdp8.git diff --git a/sw/rescue/lab8e_goettingen/disk2_11/rkb/paroff/x.ra b/sw/rescue/lab8e_goettingen/disk2_11/rkb/paroff/x.ra new file mode 100644 index 0000000..2f194ea --- /dev/null +++ b/sw/rescue/lab8e_goettingen/disk2_11/rkb/paroff/x.ra @@ -0,0 +1,935 @@ +/ XYPLOT.RA +/ +/ PART TWO OF DEC'S XYPLOT DEC-S8-LPLTA-A-LA JULY 1973 M.HURLEY +/ INCLUDED IS THE LATEST UPDATE F4 4.AAAA FROM LIBRARY FORLIB.RL NOV 77 +/ COPIED J.J. ANDRES 1.NOV. 1980 +/ PLOTS,XYPLOT,FACTOR,WHERE,SYMBOL,SYMB(FOR NUMBER ONLY) +/ +/ +/ PLOTTER ROUTINES FOR PDP 8 +/ +/ VER 1.0 1.NOV. 1980 H.A. +/ VER 2.0 12.NOV 1980 H.A. +/ VER 2.1 20.NOV 1980 H.A. CORRECTS BUG IN SYMBOL CONCERNING #XFCTX,#XFCTY +/ VER 3.0 27.NOV 1980 H.A. INSERTS SYMBOL (999.,999.,....) +/ VER 3.1 27.NOV.1980 H.A. CORRECTS PEN UP/DOWN TIMING ERROR +/ VER 3.2 18.JAN.1981 H.A. CORRECTS WHERE AND OVERLAY PROBLEMS +/ VER 3.3 4.AUG.1982 H.A. REDUCES NUMBER OF EXTERNAL REFERENCES +/ +/ UPDATES: +/ 1. PLEXIT LOCKED OUT THE PLOTTER. +/ 2. PLOTS DIDN'T DROVE PLOTTER TO THE ORIGIN +/ * #XONCE IS REMOVED, SO #XNTST IS CALLED FROM PLOTS ALL TIMES +/ 1-NOV-80 H.A. +/ 3. FACTOR DID NOT WORK CORRECT ALL THE TIMES. +/ FACTOR(1),XYPLOT(1,1),FACTOR(2),XYPLOT(1,1) DID NOT WORK +/ 4. TRUNCATION ERROR IN XYPLOT CAUSED ROUNDING PROBLEMS: +/ XSTEPS=INT(INT(X/#XINCR)*FACTOR) +/ * FACTOR NOW WORKS CORRECT IN ANY CASE +/ * FACTOR NOW HAS AN OPTIONAL SECOND PARAMETER. IF BOTH PRESENT +/ * THEY SPECIFY THE X-FACTOR AND THE Y-FACTOR. +/ * A NEGATIVE FACTOR IS NO MORE VALID YET. (ERROR WALKBACK) +/ * ZERO FACTOR DISABLES PLOTTING. +/ * XYPLOT NOW COMPUTES XSTEPS=INT(X/#XINCR*FACTOR) +/ * WHERE HAS GOT AN OPTIONAL FOURTH PARAMETER FOR THE Y-FACTOR. +/ * IF X AND Y FACTOR DO NOT MATCH AND THERE ARE ONLY THREE PARAMETERS +/ * AN ERROR WALKBACK IS TAKEN. +/ 7-NOV-80 H.A. +/ 5. SYMBOL CALLS #XMBTB TO LOAD THE SYMBOL TABLE +/ 12-NOV-80 H.A. +/ 6. CALLING SYMBOL/NUMBER WITH X/Y EQUAL TO 999. WILL REPLACE THE +/ 999. WITH THE ACTUAL POSITION OF THE PEN. VERY USEFULL IF YOU +/ ARE EDITING AN OUTPUT LINE USEING SOME CALLS TO SYMBOL & NUMBER. +/ IF YOU CALL FACTOR PRIOR TO SYMBOL(999.,....) THEN THE POSITION +/ OF THE PEN IS NEVER CHANGED PRIOR PLOTTING THE SYMBOL. BUT THE +/ FACTOR IS USED WHEN PLOTTING THE SYMBOL. +/ 27-NOV-80 H.A. +/ 7. EACH TIME XYPLOT WAS CALLED IT ISSUED A PEN UP/DOWN COMMAND. +/ THIS CAUSED A STEP BY STEP MOVING OF THE PEN ALTHOUGH THE +/ DIRECTION WAS NOT CHANGED. INTERFACE PROBLEM. +/ NOW WE ISSUE THE PEN MOVE COMMAND ONLY WHEN WE WANT TO CHANGE +/ THE DIRECTION OF THE PEN. THIS SPEEDS UP THE PLOTTER! +/ * NOT VALID PEN VALUES (NOT -3 TO 3) CAUSE #ARGERR WITH X0 =1 +/ 27-NOV-80 H.A. A HARD DAY'S NIGHT.... AND MIDNIGHT TOO! +/ 8. REMOVES BUG IN WHERE ROUTINE +/ 9. TOO LARGE DELTA X (DELETA Y) CAUSE #ARGER WITH X0=2 (3) +/ 18-JAN-81 H.A. +/ + / +/ FPP CODE PART CONTAINING PLOTS,PLOT,PLEXIT,WHERE,FACTOR +/ THIS PROGRAM MAY BE PLACED INTO AN OVERLAY. +/ IT REFERENCES THE PROGRAM PDPPLT LOCATED IN FIELD 1. +/ + SECT #XYPLT +/ +/ REFERENCES INTO FRTS (FIELD 0) +/ + EXTERN #ARGER / WRONG NUMBER OF PARAMETERS + EXTERN #REW + EXTERN #WRITO + EXTERN #RSVO + EXTERN #RENDO +/ +/ REFERENCES INTO FIELD 1 (PDPPLT) +/ + EXTERN #XETXR + EXTERN #XETUP + EXTERN #XDPXR + EXTERN #XATIO + EXTERN #XNPLT + EXTERN #XCHTP + EXTERN #XCHCK + EXTERN #XNTST + EXTERN #XDNCK + EXTERN #XORGX / LAST ABSOLUTE ORIGIN IN PLOTTER STEPS X (REAL) +#XORGY= #XORGX+3 +#XABSX= #XORGY+3 / ACTUAL ABSOLUTE X POSITION IN STEPS (REAL) +#XABSY= #XABSX+3 +#XOLDP= #XABSY+3 / OLD PEN STATUS +#XXOLD= #XOLDP+3 / OLD XPT WITH EFFECT OF FACTOR +#XYOLD= #XXOLD+3 / OLD YPT WITH EFFECT OF FACTOR +#XPENC= #XYOLD+3 / OLD PEN STATUS ( USED BY SYMBOL, NUMBER) +#XINCX= #XPENC+3 / INCREMENT SIZE FOR X STEP MOTOR OF PLOTTER +#XINCY= #XINCX+3 / INCREMENT SIZE FOR Y STEP MOTOR OF PLOTTER +#XFCTX= #XINCY+3 / X - FACTOR +#XFCTY= #XFCTX+3 / Y - FACTOR +/ +/ HERES THE INITIALIZATION ROUTINE +/ STANDARD CALLING SEQUENCE, SHARED BY ALL SUBROUTINES +/ +XRPLOT, 0 / MULTI PURPOSE XRS +X0= 0 / AT #ARGER X0 HOLDS THE XYPLOT ERROR NUMBER +X1= 1 +XR1, 0 +XR2, 0 +XR3, 0 +XR4, 0 +XR5, 0 +XR6, 0 / NOT USED +X7= 7 +XR7, 0 / NUMBER OF PARAMETERS AT SUBROUTINE CALL +WBW, TEXT #XYPLOT# / WALK BACK WORD +PLOTXR, SETX XRPLOT + SETB BPPLOT +BPPLOT, FNOP + 0 + 0 +TERM2, F 0. +YPT, F 0. / VALUE ACTUALLY PLOTTED WITH EFFECT OF FACTOR +XPT, F 0. / X VALUE ACTUALLY PLOTTED WITH EFFECT OF FACTOR +TERM1, F 0. +ARG1, F 0. +ARG2, +YDIFF, F 0. / PEN VALUE + ORG 10*3+BPPLOT + FNOP + JA PLOTXR + ORG .+1 / TO MAKE A 3 WORD BASE ENTRY FOR PLTRTN +PLTRTN, JA . +MAJOR, F 0. / HORIZONTAL AXIS MOVE +MINOR, F 0. / DIAGONAL AXIS MOVE +XACT, F 0. +YACT, F 0. / HOLDS X,Y VALUES TYPED IN +XDIFF, F 0 / DELTA X +P1, F 1. +PF2, F 2. +P3, F 3. +P4, F 4. +PF7, F 7. +PT5, F .5 +PORS, F 0. / =1 IF ENTERED FROM SYMBOL ROUTINE +XCHRPT, F 0. / X,Y VALUES FROM PDP TABLES +YCHRPT, F 0. +NUMENT, F 0. / INDICATES ENTRY FROM NUMBER SUBROUTINE +COSANG, F 0. +SINANG, F 0. +DEGRAD, F 0.017453293 / RADIANS TO DEGREES +F999, F 999. +F100, F 100. +XREAL, F 0. / FOR ORIGIN AND WHERE RTN +YREAL, F 0. +CENTSY, F 0. / CENTERED SYMBOL INDICATOR +NUMSYM, F 0. / NO. OF CHARACTERS TO PLOT +ANGADJ, F 0. +P22, F 18. / 22 OCTAL=18 DECIMAL +TWO, 0;2;0 / CONSTANT +F4095, F 4095. / LARGEST NUMBER FITTING INTO 12 BITS PDP 8 WORD +/ +/ - - - - - - - - - - - - - + 0 +SYMSTR, JA . / SYMBOL ENTRY + JA SYMST / NEEDED TO PICK UP 2 WORD ADDRESSES + 0 + BASE 0 +/ +/ SET UP THE BASE PAGE AND INDEX REGISTERS FOR THE PLOT ROUTINES +/ PLOTS,XYPLOT,WHERE,FACTOR AND SYMBOL +/ +/ +PLTSTR, JA . / SAVE TWO WORDS FOR RETURN + STARTD + FLDA 3*10 / SAVE CALLERS RETURN ARGUMENT LIST + FSTA PLTRTN + FLDA% 0 / COMPUTE THE NUMBER OF PARAMETERS + FSUB 0 + FSUB# TWO + SETX XRPLOT + LDX 1,1 / DIVIDE BY TWO + ALN 1 + FNEG / MAKE COUNTER + ATX X7 / AND BUMP INTO X7 + FLDA 0 / POINTER TO THE PARAMETER LIST --> FAC + SETB BPPLOT + BASE BPPLOT + FSTA ARG1 / POINTER TO PARAMETER LIST --> ARG1 + JA PLTSTR / 1 --> X1, INDEX TO PARAMETER LIST + / +/ XYPLOT SUBROUTINE +/ CALL XYPLOT (XPT,YPT,PENCMD) +/ +/ REAL XPT,YPT AND MUST BE POSSIBLE TO FIX INTO 24 BIT NUMBER +/ INTEGER PENCMD (-3,-2,2,3 AND NOTHING ELSE) +/ +/ ARGERR ERRORS: +/ 1 BAD PENCMD +/ 2 DELTA X EXCEEDS 4095 +/ 3 DELTA Y EXCEEDS 4095 +/ 4 XPT UNNORMALIZED OR TO LARGE ( FOR 24 BIT FRACTIONAL) +/ 5 YPT "" "" " +/ +/ + ENTRY XYPLOT +WB0, TEXT 'XYPLOT' / INSERT THE CORRECT WALK BACK WORD +XYPLOT, + FLDA# WB0 / INSERT THE CORRECT WALK BACK WORD + FSTA WBW / IN FRONT OF THE BASE PAGE + JSA PLTSTR / SET UP THE BASE PAGE AND X REGISTERS +SYMENT, FLDA% ARG1,1 + FSTA XPT + FLDA% ARG1,1+ + FSTA YPT + FLDA% ARG1,1+ + FSTA YDIFF / VALUE OF PEN + STARTF + FLDA% XPT / X POINT + FDIV #XINCX / ALL INTERNAL CALCULATIONS DONE IN TERMS OF + / PLOTTING INTERVALS, HENCE INTEGERS SO + FMUL #XFCTX +/ SAVE STEPS DONE + FSTA XACT / TEMP SAVE OF FAC + FADD #XORGX / REMEMBER THE X OFFSET + FSTA #XABSX / ABSOLUTE NUMBER OF STEPS IN REAL + FLDA XACT / RESTORE FAC +/ + JAL XPTERR / IF IT IS IMPOSSIBLE TO FIX XPT THEN ERROR OFF + JA XPTOK +XPTERR, LDX 4,X0 / WITH #ARGER 4 + TRAP4 #ARGER +XPTOK, + JSA MAKINT / INTERGERIZE IT + FSTA XACT / WITH FACTOR + FSTA XPT / WITH EFFECT OF FACTOR + FLDA% YPT + FDIV #XINCY + FMUL #XFCTY + FSTA YACT + FADD #XORGY / ADD THE ORIGIN Y + FSTA #XABSY / HERE WE STORE THE ABSOLUTE NUMBER OF STEPS DONE + FLDA YACT / RESTORE FAC +/ + JAL YPTERR / IF IT IS IMPOSSIBLE TO FIX YPT THEN WE ERROR OFF + JA YPTOK +YPTERR, LDX 5,X0 / WITH #ARGERR 5 + TRAP4 #ARGER +YPTOK, + JSA MAKINT / INTERGERIZE IT + FSTA YACT + FSTA YPT / WITH EFFECT OF FACTOR + FLDA% YDIFF / 2=DOWN, 3=UP, NEG=NEW ORG + FSTA #XPENC + JGE MORPEN + FNEG +MORPEN, JSA MAKINT + SETX #XETXR + ATX 0 / ABS VALUE PEN + XTA 0 / FOR THE FPP SIMULATOR + SETX XRPLOT + FSTA YDIFF / SAVE NEW STATUS OF PEN + FSUB P3 / PASS ONLY 0-3 + JLE ALEGAL / GOOD BOY + LDX 1,0 / BAD PEN CMD CAUSES XYPLOT ERROR 1 + TRAP4 #ARGERR / FUCK OFF +ALEGAL, + FLDA YDIFF / RESTORE THE NEW VALUE OF PEN + FSUB #XOLDP / COMPARE WITH THE OLD VALUE + JEQ NOCHNG / IF THEY MATCH THEN GOTO NOCHANGE + TRAP4 #XETUP / ELSE SET UP THE NEW PEN +NOCHNG, + FLDA YDIFF / SAVE THE NEW PEN STATUS FOR THE NEXT CALL + FSTA #XOLDP + JA REALPT +/ +/ +MAKINT, JA . / FOR ALL THOSE INTEGERIZATIONS REQUIRED + FADD PT5 / ROUND THE VALUE + ALN 0 / GET RID OF FRACTIONAL PART + FNORM / NORMALIZE IT FOR OTHER FPP OPE#XATIONS + JA MAKINT + / HERES THE CALCULATING PART OF THE PLOT ROUTINES +PRERL1, FCLA +PREREL, JA . / RTN USED AS SUBROUTINE +REALPT, FLDA XPT / AND JA'D TO + FSUB #XXOLD / COMPARE NEW X AND OLD + FSTA XDIFF + JGE ABSDX + FNEG +ABSDX, FSTA TERM1 / ABS DELTA X +/ + FSUB F4095 / IF THE DELTA X DOESN NOT FIT INTO + JLE DXOK / A 12 BIT PDP 8 WORD THEN TAKE ERROR 2 + LDX 2,0 / ELSE CONTINUE FI + TRAP4 #ARGER / HOME TO CCL +DXOK, / +/ + FLDA YPT + FSUB #XYOLD / SAME FOR Y PNTS + FSTA YDIFF + JLE DELXY + FNEG +DELXY, FADDM TERM1 / DX-DY +/ + FNEG / ABS DELTA Y --> FAC + FSUB F4095 / IF DELTA Y DOESN'T FIT INTO 12 BITS THEN + JLE DYOK / WE ERROR OFF ELSE CONTINUE FI + LDX 3,0 / THIS IS ERROR 3 + TRAP4 #ARGER +DYOK,/ + TRAP3 #WRITO + JA UNIX80 + JA FORM1 + FLDA #XOLDP / GET ACTUAL PEN STATUS + FSUB P3 + JLT DP0 + FLDA# SDP / PEN 2 ( PEN UP) + JA DP1 +SDP, TEXT 'P' +SDK, TEXT 'K' +DP0, + FLDA# SDK +DP1, TRAP3 #RSVO + JA DP4711 + FLDA #XPENC + TRAP3 #RSVO + FLDA #XORGX + TRAP3 #RSVO + FLDA #XFCTX + TRAP3 #RSVO + FLDA #XINCX + TRAP3 #RSVO + FLDA XACT + TRAP3 #RSVO + FLDA #XORGY + TRAP3 #RSVO + FLDA #XFCTY + TRAP3 #RSVO + FLDA #XINCY + TRAP3 #RSVO + FLDA YACT + TRAP3 #RSVO +DP4711,/ + FLDA #XABSY / ABSOLUTE NUMBER OF STEPS + TRAP3 #RSVO + FLDA #XABSX + FNEG + TRAP3 #RSVO + TRAP3 #RENDO + JA NX1 +/FORM1, TEXT #(1X,A1,A6,2(I7,2F9.3,I8),2I6)# +FORM1, TEXT #(1X,A1,2I6)# +NX1, +/ + FLDA TERM1 / DETERMINE OCTANT + MAJOR AXIS + JGT XMAJ + FLDA YDIFF / Y AXIS IS MAJOR + FSTA MAJOR + FLDA XDIFF + FSTA MINOR + JA KNOWOC +XMAJ, FLDA XDIFF / X AXIS MAJOR + FSTA MAJOR + FLDA YDIFF + FSTA MINOR +KNOWOC, LDX 2,1 / 2*OCTANT VALUE COLLECTED IN XR1 +/ USES A SPECIAL (NON SEQUENTIAL) ORDERING + FLDA XDIFF + JLE .+4 + ADDX 10,1 + FLDA YDIFF + JLE .+4 + ADDX 4,1 + FLDA TERM1 + JLE .+4 + ADDX 2,1 / KEEP IT IN XR1 + LDX 0,2 + FLDA MAJOR / GET MAJOR MOVE + JGT POSMAJ / NEED AS ABS. VALUE + JEQ NOTHIN / IF NO MAJOR MOVES, THEN NO MOVES + FNEG + FSTA MAJOR / NO ABS. VALUE +POSMAJ, JSA MAKINT + SETX #XDPXR + ATX 1 / PASS THIS TO PDP CODE + SETX XRPLOT +/ USE 2 WORD #XATIO IN PDP CODE TO DET SEQ OF MOVES + FLDA MINOR + JGT POSMIN / ABS VALUE + JEQ ZROCAS + FNEG +POSMIN, FDIV MAJOR / FORM #XATIO OF MINOR TO MAJOR MOVES + ALN 2 +ZROCAS, FSTA #XATIO / DOWN TO PDP CODE + XTA 1 + SETX #XDPXR / GET 2*OCTATNT + ATX 0 + SETX XRPLOT +/ TRAP4 #XNPLT/ CXCX + NOTHIN, FLDA PORS + JEQ REGPLT / 0 MEANS WAS FROM XYPLOT + JLT SYMSET / WAS A MOVE IN SYMBOL + FCLA / IS FIRST MOVE IN SYMBOL (0 ORG) + FSTA #XXOLD + FSTA #XYOLD + FSTA PORS + JA SYMSTR +REGPLT, FLDA #XPENC + JLT ZEROLD / NEQ MEANS ZERO THE ORG +/ SET X AND Y FOR NEXT MOVE TO START AT END OF THIS MOVE + FLDA XACT + FSTA #XXOLD + FLDA YACT + FSTA #XYOLD + JA PLTRTN +SYMSET, FLDA XPT / CONT FROM CURRENT POINT + FSTA #XXOLD + FLDA YPT + FSTA #XYOLD + JA PRERL1 +/ +/ NEGATIVE PEN STATUS, SO WE ZERO THE ORIGIN +/ +ZEROLD, + FLDA #XABSX / SAVE THE ACTUAL PEN POSITION (MOTOR STEPS) + FSTA #XORGX + FLDA #XABSY + FSTA #XORGY + FCLA + FSTA #XXOLD + FSTA #XYOLD + JA PLTRTN + ENTRY SYMSTR +SYMST, + FLDA P1 / ENTERED WITH 36 BIT MODE TURNED ON + FSTA PORS / SET THE FROM SYMBOL FLAG + STARTD / USED BY SYMBOL FOR ORIGIN PLOT + FLDA SYMSTR / GET START OF ARG CHAIN + FSTA ARG1 + LDX 1,1 + JA SYMENT + ENTRY WHERE / WITHOUT EFFECT OF FACTOR +WB1, TEXT 'WHERE ' / THE WALK BACK WORD +WHERE, + FLDA# WB1 + FSTA WBW + JSA PLTSTR + JXN WH0,7 / NO PARAMETERS AT ALL THEN + TRAP4 #ARGER / ABORT THE USER PROGRAM +/ WARNING: WHERE RETURNS A WRONG RESULT IF YOU CALL FACTOR PRIOR +/ TO THE WHERE ROUTINE WITHOUT PLOTTING WITH XYPLOT. +WH0, + FLDA% ARG1,1 + FSTA TERM1 / ADDRESS OF X (FIRST PARAMETER) + FLDA% ARG1,1+ + FSTA YDIFF / SAVE ADDRESS OF Y (SECOND PARAMETER) + STARTF + FLDA #XXOLD + FMUL #XINCX + FDIV #XFCTX / WHERE RETURNS X WITHOUT EFFECT OF FACTOR + FSTA% TERM1 + JXN WH1,7+ / IF ONLY ONE PARAMETER, THEN ABORT USER + TRAP4 #ARGER +WH1, + FLDA #XYOLD + FMUL #XINCY + FDIV #XFCTY / RETURNED WITHOUT EFFECT OF FACTOR + FSTA% YDIFF / SEND BACK THE VALUES + JXN WH2,7+ / IF ONLY TWO PARAMETERS, THEN ABORT USER + TRAP4 #ARGER +WH2, + STARTD + FLDA% ARG1,1+ + FSTA ARG2 / ADR. OF X -FACTOR (THIRD PARAMETER) + FLDA% ARG1,1+ + FSTA ARG1 / ADR. OF Y -FACTOR (FOURTH PARAMETER) --> ARG1 + STARTF + FLDA #XFCTX / IF THE X AND Y FACTOR MATCH THEN + FSUB #XFCTY + JNE WHXYF / WE NEED THREE PARAMETERS ONLY, ELSE WE GO WHXYF + FLDA #XFCTX + FSTA% ARG2 + JXN PLTRTN,X7+ / IF THERE ARE ONLY THREE PARAMETERS THEN RETURN + FSTA% ARG1 / ELSE INSERT FACTOR INTO FOURTH PARAMETER AND + JA PLTRTN / RETURN +WHXYF, / WE REQUIRE X AND Y FACTOR PARAMETERS + FLDA #XFCTX + FSTA% ARG2 / INSERT THE X FACTOR INTO THE OUTPUT + JXN WH3,X7+ + TRAP4 #ARGER / SORRY, BUT THERE ARE NOT ENOUGH ARGUMENTS +WH3, + FLDA #XFCTY + FSTA% ARG1 + JA PLTRTN + ENTRY FACTOR / RESET FACTOR VALUE +WB2, TEXT 'FACTOR' +FACTOR, + FLDA# WB2 + FSTA WBW + JSA PLTSTR + JXN FA0,7 / IF THERE ARE NO PARAMETERS AT ALL THEN + TRAP4 #ARGER / ABORT USER PROGRAM +FA0, + FLDA% ARG1,1 + FSTA ARG2 + STARTF + FLDA% ARG2 + JGE FA1 / IF NEGATIVE FACTOR THEN + TRAP4 #ARGER / ABORT USER PROGRAM ELSE +FA1, + FSTA #XFCTX / STORE X AND Y FACTOR + FSTA #XFCTY / ONE PARAMETER MEANS X&Y GET THE SAME FACTOR + JXN FA3,7+ + JA FACRTN +FA3, + STARTD / TWO PARAMETERS, GET THE Y FACTOR + FLDA% ARG1,1+ + FSTA ARG2 + STARTF + FLDA% ARG2 + JGE FA2 / IF NEGATIVE FACTOR THEN + TRAP4 #ARGER / ABORT USER PROGRAM +FA2, + FSTA #XFCTY +FACRTN, + STARTF + JA PLTRTN + / MUST DO A PLOTS AS FIRST ROUTINE IN ANY PLOTTING SEQUENCE +/ USER SPECIFIES INCREMENT AND MACHINE TYPE (0=8/E, 1=12,8/I,8/L) + ENTRY PLOTS +WB3, TEXT 'PLOTS ' +/ +/ CONSTANTS USED IN PLOTS +/ +INXYPL, F 0.0095 / INCREMENT SIZE XY PLOTTER +INX80Y, F 0.02648 / INCREMENT SIZE X80-SP X DIRECTION (96 CHAR. LINE) +INX80X, F 0.03968 / INCREMENT SIZE X80-SP Y DIRECTION (6 STEPS PER LINE) +FORM2, TEXT "(' [STP 6'/' MC1'/' P 0 0')" +FORM3, TEXT "(' STP 8]')" +UNIX80, F 2. +/ +/ +PLOTS, / CALL PLOTS (PLOTTER TYPE, MACHINE TYPE) +/ +/ INTEGER PLOTTER TYPE: 1 XY PLOTTER +/ 2 X80-SP PRINTER PLOTTER +/ 3 BOTH (DOESN'T WORK TODAY) +/ INTEGER MACHINE TYPE: 0 PDP 8/E +/ 1 OTHER PDP 8 OR 12 +/ + + FLDA# WB3 + FSTA WBW + JSA PLTSTR + FLDA% ARG1,1 + FSTA XPT + FLDA% ARG1,1+ + FSTA ARG1 + STARTF / THIS ROUTINE SETS UP A LOT OF CONSTANTS + FLDA% XPT / LOAD FIRST ARGUMENT (PLOTTER TYPE ) --> FAC +/ JLE PLTSER / WRONG INPUT PARAMETER, ERROR OFF + FSUB P1 + JGT PLS1 + FLDA INXYPL / XY PLOTTER INCREMENT + FSTA #XINCX + FSTA #XINCY + JA MACHIN +PLS1, FSUB P1 +/ JGT PLS2 / BOTH PLOTTER TYPES + FLDA INX80X + FSTA #XINCX / X80 SP PRINTER PLOTTER + FLDA INX80Y + FSTA #XINCY + TRAP3 #WRITO + JA UNIX80 + JA FORM2 / ' [STP6'/' MC1'/' P 0 0' + TRAP3 #RENDO +MACHIN, + FLDA% ARG1 + JEQ EIGHTE + FLDA P22 / SET MATCHTP TO 22 IF NON-8/E +EIGHTE, SETX #XCHTP + ATX 0 / 0=8/E, 022=12,8/I,8/L + XTA 0 + SETX #XCHCK / FOR INITIALISATION CHECK + ATX 0 + SETX XRPLOT + TRAP4 #XNTST + FLDA P1 + FSTA #XFCTX / FACTOR=1 INITIALLY + FSTA #XFCTY + FCLA + FSTA #XOLDP / AND REALLY MOVE IT! + FSTA #XPENC / SO WILL DO FIRST PEN MOVEMENT + FSTA #XXOLD + FSTA #XYOLD + FSTA #XORGX + FSTA #XORGY + FSTA PORS + JA PLTRTN + ENTRY PLEXIT / BE SHURE ALL DONE +WB4, TEXT 'PLEXIT' +PLEXIT, + FLDA# WB4 + FSTA WBW + JSA PLTSTR + STARTF + TRAP3 #WRITO + JA UNIX80 + JA FORM3 + TRAP3 #RENDO + TRAP3 #REW / OUTPUT REMAINDER OF BUFFER AND RESET OUTPUT (NOT GOOD FOR FILE STRUCTURED DEVICES!!!!!) +/ TRAP4 #XDNCK + JA PLTRTN + SECT #SYMBL + EXTERN SIN + EXTERN COS + EXTERN #XMBTB / HERE STARTS THE SYMBOL TABLE +/ +/ EXTERNAL REFERENCES INTO FIELD 1 (PDPPLT) +/ + EXTERN #XTXAD + EXTERN #XLTCD + EXTERN #XPNOP + EXTERN #XLEFT + EXTERN #XRGHT + EXTERN #XNDLF + EXTERN #XNDRT + EXTERN #XPSNM + EXTERN #XPSIN +/ +/ + ENTRY SYMBOL +WB5, TEXT 'SYMBOL' +SYMBOL, + FLDA# WB5 + FSTA WBW + JSA PLTSTR + JSR #XMBTB / LOAD THE SYMBOL TABLE ( SYMBTB ) +SYM1, FLDA% ARG1,1 + FSTA XPT / X POINT + FLDA% ARG1,1+ + FSTA YPT / Y VALUE + FLDA% ARG1,1+ + FSTA YDIFF / HEIGHT + FLDA% ARG1,1+ + FSTA TERM1 / TEXT + FLDA% ARG1,1+ + FSTA TERM2 / ANGLE + FLDA% ARG1,1+ + FSTA ARG1 / NUMBER CHARS. + STARTF + FLDA% TERM2 + FMUL DEGRAD / CONVERT TO RADIANS + FSTA XCHRPT / THEN DONT NEED SIND + FLDA% XPT + FSTA COSANG / VALUE OF X + FSUB F999 / IF X NEQ 999 THEN + JNE SY0 / WE USE THE X VALUE SPECIFIED ELSE + FLDA #XXOLD / WE START WITH THE OLD VALUE + FMUL #XINCX / THIS WILL CAUSE SOME TRUNCATION ERROR + FDIV #XFCTX / IN XYPLOT ROUTINE BUT THE ERROR IS SMALL + FSTA COSANG / AND WE HOPE FAC > 0 BUT THIS MUST NOT BE SO! +SY0, + FLDA% YPT + FSTA SINANG + FSUB F999 / IF Y NEQ 999 THEN + JNE SY1 / WE USE THE Y VALUE SPECIFIED ELSE + FLDA #XYOLD / WE START WITH THE OLD Y VALUE + FMUL #XINCY / THIS CAUSES SOME TRUNCATION ERRORS + FDIV #XFCTY + FSTA SINANG +SY1, + FCLA + FSTA #XTXAD + FSTA #XPENC / SO ALWAYS DOES INITIAL PEN U/D + FSTA CENTSY + FLDA TERM1 / GET TEXT ADDRESS + FSTA #XTXAD / PUT IT DOWN IN PDP PART + FLDA% YDIFF / ASSUME ITS A REGULAR + JGE NOTNEG / NEGATIVE SIZE IS NOT NICE + FNEG +NOTNEG, FDIV PF7 / ADJUST LATER IF A CENT + FSTA ANGADJ + FLDA% ARG1 / SHOWNS NUM. CHARS + PEN STATUS + FSTA NUMSYM + JGE REGSYM / GT OR =0 IS REG SYM + FLDA% TERM1 / CHECK FOR REG CHAR PASSED + FSUB F100 / AS AN INTEGER EQUIV. + JLT INTEQ / ITS A INTEGER EQUIV + FLDA% YDIFF / CENTERED SYMBOL + JGE NOTNG1 + FNEG +NOTNG1, FDIV P4 + FSTA ANGADJ + FLDA NUMSYM / -1=PEN UP, -2=PEN DOWN (CNTRD ONLY) + FADD P1 + JGE UPPEN / MOVE WITH PEN UP + FSTA CENTSY / NEG MEANS DOWN FROM THE START +PTITON, FLDA PF2 +CPEN, FSTA YCHRPT / =-2 FOR DOWN (CENT. + INTEQ ONLY) + / -3 FOR UP FOR ALL SYMBOLS + INTEQ + JSA SYMSTR / PLOT ORIGIN + JA .+10 + JA COSANG + JA SINANG + JA YCHRPT + FLDA XPT + FMUL #XFCTX + FSTA XREAL / KEEP TRACK OF PASSED VALUES + FLDA YPT + FMUL #XFCTY + FSTA YREAL + JSA PENUP + FLDA CENTSY + JLE PENOK + JSA PNDOWN / PUT PEN DOWN NOW (CENT ONLY) +PENOK, JSR SIN + JA .+4 + JA XCHRPT + FMUL ANGADJ + FSTA SINANG / SAVE SIN+HGT, USE FOR ALL VALUES + JSR COS + JA .+4 + JA XCHRPT + FMUL ANGADJ + FSTA COSANG / COS(ANGLE)+HGT (IN INCREMENTS NOW) + LDX 0,4 / ZERO STEP COUNT + FLDA NUMENT + JGT NUM2 / JUMP IF FROM NUMBER + JA FSTLFT +UPPEN, FLDA P3 / + FSTA CENTSY / PUT PEN DOWN AFTER INITIAL MOVE + JA CPEN / MOVE WITH PEN UP + PENSET, JSA PNDOWN +ONEXY, JA . + SETX #XLTCD + XTA 2 / SET Y + FSTA YCHRPT + XTA 1 / GET X + FSTA XCHRPT / GET FIRST MOVE + SETX XRPLOT + FSUB PF7 / 7,0=PEN UP, 7,7=END + JEQ PENUPM + FLDA CENTSY + JEQ CALALL / CENTEREDS REQUIRE MODIFIED ORIGIN + FLDA PF2 + FNEG + FADDM XCHRPT + FADDM YCHRPT +CALALL, JSA CALANG + JXN PENSET,5 / PUT PEN BACK DOWN IF NEG + JA ONEXY +INTEQ, FLDA NUMSYM / CHECK ON PEN + FADD P1 + JLT PTITON +REGSYM, FLDA P3 + JA CPEN +PENUPM, JSA PENUP + FLDA YCHRPT / CHECK FOR 7,7 END + FSUB PF7 + JEQ NXTCHR / JUMP IF END OF CHARACTER + JA ONEXY / ON TO NEXT PAIR +PENUP, JA . + LDX 1,5 / SET FOR PEN UP + SETX #XDPXR + LDX 0,0 / PASS A ZERO FOR UP + SETX XRPLOT +/ TRAP4 #XPNOP + FLDA# SDP / 'P' PEN UP + FSTA SYMPEN + JA PENUP +PNDOWN, JA . + SETX #XDPXR + LDX 1,0 / PASS A ONE FOR DOWN + SETX XRPLOT +/ TRAP4 #XPNOP + FLDA# SDK / 'K' PEN DOWN + FSTA SYMPEN + LDX 0,5 + JA PNDOWN + SYMPEN, F 0.0 +CALANG, JA . + FLDA YCHRPT + FDIV #XINCY + FSTA YCHRPT / Y MOVE AS STEPS (UNITERGERIZED) + FMUL SINANG + FNEG + FSTA TERM1 / =-SINA*Y + FLDA XCHRPT + FDIV #XINCX + FSTA XCHRPT + FMUL COSANG + FADD TERM1 + FMUL #XFCTX + JSA MAKINT + FSTA XACT / FOR AT END OF TEXT + FSTA XPT / X*COSA+OLDX-SINA*Y +/ REQUIRES AN OLDX+OLDY TERM, BUT I DO THIS ALL REL TO A +/ LOGICAL 0,0 FOR EACH CHAR, SO I #XLEFT THEM OUT. + FLDA YCHRPT + FMUL COSANG + FSTA TERM1 / COSA*Y + FLDA XCHRPT + FMUL SINANG + FADD TERM1 + FMUL #XFCTY + JSA MAKINT + FSTA YACT + FSTA YPT / NEWX*SINA*OLDY*COSA*Y + FLDA P1 + FSTA #XPENC / USE SAME ORIGIN THROUOUT THE LETTER + FNEG + FSTA PORS +/ JSA PREREL / PEN MUST BE IN NEC POS BY NOW + TRAP3 #WRITO + JA UNIX80 + JA FORM1 + FLDA SYMPEN + TRAP3 #RSVO + FLDA YREAL + FDIV #XFCTY + FADD YPT + FADD #XORGY + TRAP3 #RSVO + FLDA XREAL + FDIV #XFCTX + FADD XPT + FADD #XORGX + FNEG + TRAP3 #RSVO + TRAP3 #RENDO + JA CALANG + LEFTJS, XTA 4 / NUM OF MOVES + SETX #XLTCD + ATX 0 / PASS NUMBER OF STEPS INTO LETTER + SETX XRPLOT + TRAP4 #XLEFT / RETURN WITH A X,Y PAIR + JSA ONEXY + XTA 4 + SETX #XLTCD + ATX 0 / STEP COUNT + SETX XRPLOT + JNE NOTFST / CHANGE IF BEFORE FIRST MOVE OF CHARACTER + JSA PNDOWN / PUT PEN DOWN NOW +NOTFST, TRAP4 #XRGHT / SET NEXT XY PAIR + JSA ONEXY + ADDX 1,4 / UPDATE COUNT + JA LEFTJS / 77 AT END OF CHAR USED TO DET END + CENTEX, JSA PENUP + JA CENTOO +NXTCHR, FLDA CENTSY + JNE CENTEX / LEAVE PEN AT CENTER FOR CENTS ONLY + FSTA YCHRPT + FLDA PF7 + FSTA XCHRPT / MOVE PEN TO 7,0 FOR REG CHARS + JSA CALANG / PLOT IT + FLDA XACT / UPDATE COLLECTIVE ENDING X VALUE + FMUL #XFCTX / WITH EFFECT OF FACTOR + FADDM XREAL / ALSO WITH EFFECT OF FACTOR + FLDA YACT / UPDATE COLLECTIVE ENDING Y VALUE + FMUL #XFCTY / WITH EFFECT OF FACTOR + FADDM YREAL +CENTOO, LDX 0,4 / ZERO STEP NUM WITHIN CHAR + FCLA + FSTA #XXOLD + FSTA #XYOLD + FLDA P1 + FNEG + FADD NUMSYM / UPDATE COUNTER + JLE SYMDON / NO MORE + FSTA NUMSYM / MORE, SAVE COUNT + FLDA NUMENT + JGT NUM3 / EXIT FOR NUM SUBR + FCLA + JXN RTCHAR,3 / 1=CHAR IS #XRGHT SIX BITS +FSTLFT, LDX 1,3 / POINT TO #XRGHT 6 WHEN TIME FOR NEXT CHAR + FLDA NUMSYM + JLT NUM5 / JUMP IF CENTERED SYM OR INTEQ +/ CENTEREDS + INTEQ EQUIV PASSING 3 WORD VALUE IN NUM5 +/ REG SYM USES PDP ROUTINE TO GET ONE WORD OF LIST + FCLA + TRAP4 #XNDLF + JA LEFTJS / GO PLOT THE ACTUAL CHAR +RTCHAR, LDX 0,3 / POINT TO #XLEFT 6 BITS FOR NEXT TIME + TRAP4 #XNDRT + JA LEFTJS +SYMDON, FCLA + FSTA PORS + FSTA NUMENT + FLDA XREAL / UPDATES ORG X VALUE + FDIV #XFCTX + JSA MAKINT + FSTA #XXOLD + FLDA YREAL / UPDATES ORG Y VALUE + FDIV #XFCTY + JSA MAKINT + FSTA #XYOLD + JA PLTRTN / NOW CAN CONTINUE PLOT FROM HERE + / SPECIAL ENTRY FOR NUMBER SUBROUTINE + ENTRY SYMB +WB6, TEXT 'SYMB ' +SYMB, + FLDA# WB6 + FSTA WBW + JSA PLTSTR / SPECIAL ENTRY FOR NUMBER SUBROUTINE + JSR #XMBTB / LOAD THE SYMBOL TABLE (SYMBTB) + STARTF + FLDA P1 + FSTA NUMENT + STARTD + JA SYM1 +NUM2, SETX NUMENT / FOR NUMBER SUBROUTINE ONLY + / HERE ONLY FOR FIRST NUMBER OF STRING + LDX -1,2 +NUM3, JSA GETARG / FOR SECOND AND LATER NUMBERS + TRAP4 #XPSNM + JA LEFTJS +NUM5, SETX NUMENT / FOR INTEQ + CENETEREDS + LDX -1,2 + JSA GETARG + TRAP4 #XPSIN + JA LEFTJS +GETARG, JA . + SETX NUMENT / USED FOR MORE THAN ONE CHARACTER + STARTD + FLDA #XTXAD+1 / CENTEREDS SYMBOLS AND NUM SUBROUTINE +/ PASS VALUES AS THREE WORDS + FSTA ARG1 + STARTF + FLDA% ARG1,2+ / PASS A NUMBER + SETX #XTXAD + JSA MAKINT + ATX 0 + SETX XRPLOT + JA GETARG + END + + \ No newline at end of file