/ /MICHAEL P STRYKER /PHILLIP J BEST /BRAIN RESEARCH LAB /UNIVERSITY OF MICHIGAN /ANN ARBOR, MICHIGAN / /INCREMENTAL PLOTTER PRINTOUT SUBROUTINES / /THESE ROUTINES, WHICH OCCUPY FIVE PAGES OF MEMORY, MUST /BE USED WITH DIGITAL 8-12-U PLOT SUBROUTINE. / /THE FIVE PAGES MAY BE ASSEMBLED STARTING AT THE FIRST /LOCATION OF ANY PAGE OF MEMORY. TO ASSEMBLE, FIRST MAKE /A TAPE AS FOLLOWS TO PRECEDE THE TAPE OF THE PRINTOUT SUB- /ROUTINES: "*XXXX; PLOTX=YYYY; PAUSE; ", WHERE XXXX IS /THE FIRST LOCATION OF THE PAGE WHERE THE PRINTOUT /ROUTINES ARE TO START, AND YYYY IS THE FIRST LOCATION /OF "PLOTX" (DIGITAL 8-12-U). / /ALL THE PRINTOUT ROUTINES EXIT WITH CURRENT PEN LOCATION /CORRECTLY HELD IN "PLOTNX,Y" OF "PLOTX" (8-12-U). / /DECPLT -- A SIGNED DECIMAL PRINTOUT ROUTINE FOR /INCREMENTAL PLOTTER. THIS ROUTINE USES PLTSTG; DIGITS /ARE PRINTED OUT IN THE SAME FORMAT AS THAT OF THE PREVIOUS /CALL OF TYPLOT. LEADING ZEROS AND THE "+" SIGN ARE /SUPPRESSED. /THIS ROUTINE IS A MODIFICATION OF DIGITAL 8-22-U-SYM. / /CALL WITH NUMBER TO BE PRINTED OUT IN C(AC) DECPLT, 0 SMA JMP PLUS CIA DCA VALUE TAD L55 /"-" SIGN JMP .+3 PLUS, DCA VALUE TAD L40 /SPACE JMS PLT1 DCA SKPF TAD M4 DCA CNT4 DCA DIGIT /CLEAR TAD CNTRZA DCA CNTRZB /SET COUNTER TO FOUR TAD ADDRZA DCA ARROW /SET TABLE POINTER SKP DCA VALUE /SAVE CLL TAD VALUE ARROW, TAD TENPWR /SUBTRACT POWER OF TEN SZL ISZ DIGIT /DEVELOP BCD DIGIT SZL JMP ARROW-3 /LOOP CLA /HAVE BCD DIGIT TAD DIGIT /GET DIGIT ISZ CNT4 /IS THIS THE LAST 0? SKP /NO JMP .+3 /YES, DON'T SUPPRESS IT. SNA JMP CK ISZ SKPF TAD K60 OUT, JMS PLT1 /PLOT OUT THE DIGIT DCA DIGIT /CLEAR ISZ ARROW /UPDATE POINTER ISZ CNTRZB /DONE ALL FOUR? JMP ARROW-1 /NO: CONTINUE JMP I DECPLT /YES: EXTI ADDRZA, TAD TENPWR CNTRZA, -4 TENPWR, -1750 /ONE THOUSAND -0144 /ONE HUNDRED -0012 /TEN -0001 /ONE VALUE, 0 DIGIT, 0 CNTRZB, 0 CK, TAD SKPF SNA CLA TAD M20 JMP OUT-1 SKPF, 0 CNT4, 0 M4=CNTRZA L55, 55 M20, -20 L40, 40 K60, 60 /PLT1 -- PRINTS OUT ONE CHARACTER HELD IN AC 6-11 / *DECPLT+100 PLT1, 0 /ENTER WITH 1 CHR IN AC RTL RTL RTL AND L7700 /MASK TO ASSURE EXIT DCA STG TAD STG+1 JMS I RPLTST /JMS PLTSTG CLA CLL JMP I PLT1 STG, 0 STG L7700, 7700 *DECPLT+144 /TYPLOT ROUTINE TO FETCH CONTROL CHARACTER AND PLOT A /STRING OF CHARACTERS. ENTER WITH ADDRESS OF STRING IN AC /AND CONTROL CHARACTER IN THE NEXT LOCATION FOLLOWING THE /CALL. SAMPLE: TAD STGADD / JMS TYPLOT / WXYZ (CONTROL CHARACTER--OCTAL) /CONTROL CHARACTER IS TO BE INTERPRETED AS FOLLOWS: /W: THE DIRECTION THE LINE IS TO RUN. W-0; NEXT CHARACTER / IS TO LEFT. W=1; NEXT CHARACTER IS ABOVE PREVIOUS CHR. /X: THE ORIENTATION OF THE CHRS. X=0; CHRS ARE RIGHT SIDE UP / X=1; CHRS ARE INVERTED. X=2; CHRS ARE ROTATED 90 / DEGREES TO THE RIGHT. X=3; ROTATED 90 DEG. LEFT. /YZ: TAKEN TOGETHER AS A TWO-DIGIT NUMBER INDICATE THE SIZE / OF THE CHRS = THE NUMBER OF MULTIPLES OF THE BASIC / 6 BY 4 PLOTTER-STEP SIZE. / / / TYPLOT, 0 DCA S /STORE ADDRESS OF STRING TAD I TYPLOT /GET CONTROL CHR AND L77 /MASK FOR YZ (ABOVE) CIA DCA I RSCLML /-YZ => SCLMLT TAD I TYPLOT RTR RTR RTR AND L7 /MASK FOR X DCA I RTRANS /X => TRANSQ TAD I TYPLOT RTL RTL AND L7 DCA I RLINRU /W => LINRUN ISZ TYPLOT /TO EXIT AFTER CONTROL CHR TAD S JMS I RPLTST /CALL PLTSTG JMP I TYPLOT /EXIT RSCLML, SCLMLT RTRANS, TRANSQ RLINRU, LINRUN RPLTST, PLTSTG L77, 77 L7, 7 S, 0 /MOVE & SPC MOVE MAKES 10 PEN MOVEMENTS FOR EACH /CHARACTER, ACCORDING TO CODE AT ADDRESS "L" THROUGH /"L+4". SPC MOVES PEN TO (5,0) OR (0,7) ACCORDING TO /LINRUN. / MOVE, 0 TAD MMM5 /SET WORD COUNTER DCA MMM5GO DCA OLDRX /ZERO PREVIOUS X-MVMT TIM1, TAD MMM2 /SET MVMT COUNTER 2/WORD DCA MMM2GO TAD I L DCA M /CONTAINS TWO MOVEMENTS TIM2, TAD M AND LLL7 /MASK 4TH BITE DCA RAWY TAD M RTR RAR /BITE3 => BITE4 AND LLL7 /MASK AGAIN TAD MMM5 /6,7 - 5 > 0 SMA /IS IT A PNUPDN COMMAND (EG., 6 OR7) JMS I RPNUPD /YES, CALL PNUPDN TAD LLL5 /RESTORE RAWX DCA RAWX /X-COORDINATE OF MVT TAD RAWX /FOR PNUPDN DCA OLDRX JMS SCLPLT /TO TRANSFORM, SCALE, & PLOT JMS PLOTIT /PLOT IT! CLA TAD M RTR RTR RTR /BITES 1&2 => BITES 3&4 DCA M ISZ MMM2GO /GONE THRU TWICE? JMP TIM2 /NO, DO IT AGAIN. ISZ MMM5GO /YES, HAVE WE DONE 5 L'S? SKP JMP SPC /YES, SPACE AND EXIT ISZ L /NO, INCR L & AWAY AGAIN. JMP TIM1 /ROUTINE TO RAISE PEN & MOVE TO (5,0) OR (0,7). SPC, JMS I RPNUPD /LIFT PEN CLA TAD LINRUN /=0? SNA CLA JMP .+5 TAD LLL7 /LINRUN = 1 DCA RAWY DCA RAWX JMP .+4 TAD LLL5 /LINRUN = 0 DCA RAWX DCA RAWY JMS SCLPLT JMS PLOTIT /SCALE & PLOT THE SPACE JMP I MOVE /EXIT RAWX,0 RAWY,0 SCLMLT,0 TRANSQ,0 LINRUN,0 OLDRX,0 L,0 M,0 LLL5, 5 LLL7, 7 MMM5, -5 MMM2, -2 MMM2GO,0 MMM5GO,0 CNTR,0 RPNUPD, PNUPDN /PLOTIT ROUTINE TO CALL PLOTX (DIGITAL 8-12-U) WITH /PROPER PARAMETERS. PLOTIT, 0 PNSTAT, CLA IAC /PEN UP OR DOWN? JMS I PLOT XMVT, 0 YMVT, 0 JMP I PLOTIT PLOT, PLOTX /SCLPLT ROUTINE TO TRANSFORM ACCORDING TO TRANSQ /AND SCALE ACCORDING TO SCLMLT EACH MOVEMENT. INPUT IS /RAWX, RAWY; OUTPUT INTO XMVT, YMVT OF PLOTIT. SCLPLT, 0 TAD TRANSQ /ORIENTATION OF CHRS SNA JMP STRAIT /TRANSQ=0; NO TRANSFORM TAD MMM2 SNA JMP ROTRIT /TRANSQ=2; ROTATE 90 DEG. RIGHT SPA JMP INVRT /TRANSQ=1; INVERT EACH CHR /TRANSQ=3; ROTATE LEFT ROTLFT, CLA /TO ROTATE EACH CHR LEFT 90 DEGREES TAD RAWX DCA TRY /RAWX => TRY TAD RAWY CIA TAD LLL7 DCA TRX /7 - RAWY => TRX JMP SCALE ROTRIT, TAD RAWX /TO ROTATE EACG CHR RIGHT 90 DEG. CIA TAD LLL5 DCA TRY /5-RAWX => TRY TAD RAWY DCA TRX /RAWY => TRX JMP SCALE INVRT, TAD RAWX /TO INVERT EACH CHR CIA TAD LLL5 DCA TRX /5-RAWX => TRX TAD RAWY CIA TAD LLL7 DCA TRY /7-RAWY => TRY JMP SCALE STRAIT, TAD RAWX /NO TRANSFORM DCA TRX TAD RAWY DCA TRY /RAWX,Y => TRX,Y SCALE, TAD SCLMLT DCA CNTR TAD TRX ISZ CNTR /TAD LOOP TO MULTIPLY JMP .-2 DCA XMVT TAD SCLMLT DCA CNTR TAD TRY ISZ CNTR JMP .-2 DCA YMVT JMP I SCLPLT /EXIT TRX=XMVT TRY=YMVT /PLTSTG ROUTINE TO PLOT A STRING OF CHARACTERS ACCORDING /TO CONTROL CHR SET BY TYPLOT. ENTER WITH ADDRESS OF STRING /IN AC. EXITS WITH THE CURRENT VALUES OF PLTNX,Y (DIGITAL /8-12-U) RELATIVE TO THOSE VALUES AT CALL OF PLTSTG. /STRING IS PACKED TWO 6-BIT TRIMMED ASCII CHARACTERS TO A /WORD, WITH '00' SERVING AS THE TERMINATOR. / *MOVE+200 / PLTSTG, 0 DCA STRADD TAD I OLDX /=TAD PLTNX - CURRENT X-COORDINATE DCA COLDX /SAVE IT TAD I OLDY DCA COLDY RDPACK, TAD MM2 DCA MM2GO /SET PASS COUNTER TAD I STRADD DCA SAV RDPK2, TAD SAV RTR; RTR; RTR RDPK3, AND LL77 /MASK SNA /00 TERMINATES THE STRING JMP TYPFIN /CHRTR ROUTINE TO DETERMINE CHARACTER SET CHRTR, TAD MM40 SNA /IS IT A SPACE (=40)? TAD MM5 /YES, SUBRATCT 5 SMA TAD MM10 /CHR > 44: SUBTRACT 10 TAD LL40 /RESTORE /BASAD ROUTINE TO MULTIPLY CODE BY 5 & ADD TO BASE /TO DEVELOP THE ADDRESS OF MOVEMENT CODE. BASAD, DCA CODE TAD MM5 DCA CNTR2 TAD CODE ISZ CNTR2 JMP .-2 TAD BASE DCA I RL /DCA L NEXT PAGE /UPDATE ROUTINE TO PUT SCALED (0,0) INTO PLTNX,Y; /CALL 'MOVE'; AND UPDATE COLDX,Y / UPDATE, JMS SCL00 /GET SCALED & TRANSFORMED (0,0) DCA I OLDX /PUT X0 INTO PLTNX TAD I RYMVT DCA I OLDY /SAME WITH Y0 JMS I RMOVE /CALL "MOVE" JMS SCL00 CIA /- X0 TAD I OLDX /+ PLTNX (CURRENT X) = DELTA X TAD COLDX /+ PREVIOUS X COORDINATE DCA COLDX /UPDATED TAD I RYMVT /Y0 CIA /- Y0 TAD I OLDY /+ PLTNY = DELTA Y TAD COLDY DCA COLDY /UPDATED /RDPK4 & TYPFIN RDPK4, TAD SAV ISZ MM2GO /2 TIMES THRU? JMP RDPK3 /NO, GET 2ND PACKED CHARACTER CLA ISZ STRADD /INCREMENT STRING ADDRESS JMP RDPACK /GET NEXT WORD IN STRING TYPFIN, CLA TAD COLDX /CURRENT X-COORDINATE REL TO CALL DCA I OLDX /PUT CURRENT X INTO PLTNX, REL. /TO PLTNX AT CALL OF PLTSTG. TAD COLDY DCA I OLDY /SAME WITH Y-COORD. JMP I PLTSTG /EXIT /PNUPDN ROUTINE TO LOWER PEN IF C(AC)=2; RAISE /PEN OTHERWISE. EXITS WITH PREVIOUS X-COORD (OLDRX) /IN AC. PNUPDN, 0 TAD MM2 SZA CLA JMP .+4 TAD DN DCA I RPNSTA /LOWER PEN JMP .+3 TAD UP DCA I RPNSTA TAD I ROLDRX TAD MM5 JMP I PNUPDN /EXIT DN, CLA UP, CLA IAC RPNSTA, PNSTAT ROLDRX, OLDRX /ROUTINE TO TRANSFORM & SCALE (0,0). EXITS WITH X0 /IN AC; Y0 IS IN YMVT OF PLOTIT SCL00, 0 CLA DCA I RRAWX /ZERO RAWX,Y DCA I RRAWY JMS I RSCLPL TAD I RXMVT JMP I SCL00 /EXIT RRAWX, RAWX RRAWY, RAWY RSCLPL, SCLPLT RXMVT, XMVT /VARIABLES FOR PLTSTG STRADD,0 MM2GO,0 SAV,0 CODE,0 CNTR2,0 MM2, -2 LL77, 77 MM5, -5 COLDX,0 COLDY,0 OLDX, PLOTX+162 OLDY, PLOTX+163 RL,L RYMVT, YMVT RMOVE, MOVE BASE, .-1 MM40,-40 MM10,-10 LL40,40 / /MOVEMENT CODES FOR EACH CHARACTER / 1370; 1333; 4026; 4040; 4040 /A 4676; 3343; 3303; 4042; 4000 4660; 1676; 0105; 4010; 4040 3676; 4145; 0030; 0000; 0000 4676; 0306; 0333; 4000; 4040 4676; 0306; 0333; 0000; 0000 4660; 1676; 0105; 4010; 2242 /G 0376; 4643; 4040; 4040; 4040 7010; 2030; 1626; 3636; 3636 0072; 3630; 4626; 4646; 4646 /J 0276; 4013; 4613; 4646; 4646 /K 0076; 4040; 4040; 4040; 4040 /L 2376; 4046; 4040; 4040; 4040 /M 4076; 4646; 4646; 4646; 4646 /N 7561; 3616; 4145; 1030; 0501 /O 4676; 0343; 4643; 0006; 0000 /P 1645; 4146; 0030; 2262; 4072 /Q 4676; 0343; 4013; 4040; 4040 /R 3070; 4241; 1333; 0504; 4616 /S 7620; 0646; 0606; 0606; 0606 /T 7601; 1001; 4130; 4646; 4646 /U 7606; 4620; 4646; 4646; 4646 /V 7606; 2310; 4630; 4646; 4646 /W 4670; 0666; 4076; 4040; 4040 /X 7320; 2306; 4646; 4646; 4646 /Y 7606; 0046; 4040; 4040; 4040 /Z 0000; 0000; 0000; 0000; 0000 /SPACE 7521; 3424; 1314; 3233; 1212 /$ 7525; 1514; 1135; 3231; 2121 /% 7521; 3424; 2314; 3212; 3232 /& 7323; 2615; 2335; 2323; 2323 /' 7636; 1325; 3021; 3030; 3030 /( 7010; 3321; 1625; 1616; 1616 /) 7521; 1423; 2332; 3412; 2323 /* 7521; 0323; 2343; 2121; 2121 /+ 7211; 2122; 2111; 1010; 1010 /, 7313; 6333; 3333; 3333; 3333 /- 7110; 2021; 1110; 0464; 0404 /. 4670; 4066; 4040; 4040; 4040 /SLASH(/) 7501; 3616; 4145; 1030; 4501 /0 7010; 2030; 1526; 2626; 2626 /1 7505; 3616; 4445; 0001; 4140 /2 7606; 1346; 4334; 3041; 0110 /3 7630; 4333; 0603; 0606; 0606 /4 7646; 0306; 3414; 4143; 0030 /5 1372; 4233; 3041; 0500; 3616 /6 7505; 4616; 3222; 2212; 1010 /7 4472; 0646; 4204; 0040; 0000 /8 7540; 1636; 0405; 3313; 4544 /9 7211; 2122; 6411; 2575; 1424 /: 7210; 2122; 6410; 2575; 1424 /; 7545; 4103; 4141; 4141; 4141 /< 7202; 6342; 0373; 0303; 0303 /= 7101; 0543; 0505; 0505; 0505 /> 7505; 3616; 4445; 2123; 7060 /? $