/BASIC.L8E / L A B - 8 \ E B A S I C / / COPYRIGHT 1971, DIGITAL EQUIPMENT CORPORATION / MAYNARD, MASS. (01754) / / WRITTEN BY JACK BURNESS / THIS BASIC IS A COMBINATION OF LAB-8/E BASIC / AND 8K-BASIC FOR THE PDP-8. TO CREATE IT / FOR THE LAB-8/E SET "MACHINE=1", TO CREATE IT FOR / THE PDP-8 SET "MACHINE=0". MACHINE=0 / THIS CODE OVERLAYS THE BINARY LOADER IN FIELD / ONE TO MAKE LAB-8/E BASIC SELF STARTING. /BASIC4.52 FIELD 0 /TO HELP BINARY LOADER IN CASE HE BLOWS IT. /00000 +----------+ / ! SYSTEM ! /11000 +----------+ / ! ARRAY ! / ! SPACE ! / +----------+ / ! FREE ! / +----------+ / ! CODIFIED ! / ! BASIC ! / +----------+ / ! SYMBOL ! / ! TABLE ! / +----------+ / ! LINEBUF ! / +----------+ / ! STACK ! / +----------+ / ! FORLIST ! / +----------+ / ! GOLIST ! /17756 +----------+ / ! RIM ! / ! LOADER ! /17777 +----------+ /4200 + /4201 - /4302 * /4303 / /4404 ^ /4105 = /4106 < /4107 > /4110 <= /4110 =< /4111 >= /4111 => /4112 <> /4213 (UMINUS) /4014 (DONE) /4015 , /4016 ; /4017 ) /4021 TO /4022 STEP /4023 ( /4024 FN /4025 COS /4026 TAN /4027 ATN /4030 LOG /4031 EXP /4032 SQR /4033 ABS /4034 SGN /4035 INT /4036 RND /4037 SIN /6000 (CRLF) /6000 \ /6001 END /6002 FOR /6003 GOSUB /6004 GOTO /6004 THEN /6005 IF /6006 INPUT /6007 LET /6010 NEXT /6011 PRINT /6012 RETURN /6013 STOP /6014 DIM /6015 RESTORE /6017 DEF /6020 READ /6021 DATA /6022 (EXIT) /6023 (EOF) FEXIT=0000 FSNE=0040 FSEQ=0050 FSGE=0100 FSLT=0110 FSGT=0140 FSLE=0150 FJMP=1000 FJMPI=1400 FST=2000 FSTI=2400 FLD=3000 FLDI=3400 FAD=4000 FADI=4400 FSB=5000 FSBI=5400 FMP=6000 FMPI=6400 FDV=7000 FDVI=7400 FWD=200 BKWD=600 ADCL=6530 ADLM=6531 ADST=6532 ADRB=6533 ADSK=6534 ADSE=6535 ADLE=6536 ADRS=6537 DILC=6050 DICD=6051 DISD=6052 DILX=6053 DILY=6054 DIXY=6055 DILE=6056 DIRE=6057 CLEN=6134 CLAB=6133 CLOE=6132 CLZE=6130 CLSK=6131 CLCA=6137 CLSA=6135 CLBA=6136 *0 0 /INTERUPT ROUTINES. JMP I .+1 /UP, UP AND AWAY. INTER ARRLOC, 0 CODELOC,0 PSYMTAB,0 NSYMTAB,0 O215, 215 O212, 212 O260, 260 OV, 0 INDEX1, 0 INDEX2, 0 DISAUTO,0 AC3, 0 AC2, 0 AC1, 0 OP3, 0 OP2, 0 OP1, 0 ACS, 0 ACE, 0 OPS, 0 O177, 177 OPE, 0 TMP, 0 PGETCH, GETCH PPUTCH, PUTCH DIMFLAG,0 FENTER=JMS I .;FPT PDL, 0 PLINBUF,LINBUF MLINBUF,-LINBUF MENDLIN,-ENDLIN PRTEMP, 0 DECEXP, 0 PNUMBUF,NUMBUF LOCCTR, 0 READLOC,0 PARGERR,ARGERR WORD, 0 O240, 240 LINENO, 0 GOTEMP, 0 O7740, 7740 O7770, 7770 EPTR, 0 FPTR, 0 GPTR, 0 HPTR, 0 O2, 2 FORCT, 0 SNUMFLG,0 O12, 12 OLDOP, 0 ADDRESS,0 O77, 77 O377, 377 O7, 7 OPERAND,0;0;0 PTEXT, XXTEXT PERROR, ERROR PSXERR, SXERR PEVAL, EVAL PGETADD,GETADDR PEXECUT,EXECUTE PPUSH, PUSH PPOP, POP PFIX, FIX PGOTOPR,GOTOPR PPASSCR,PASSCR PGETOPR,GETOPR PSTOVAR,STOVAR PGETVAR,GETVAR PPRINTX,PRINTXT PGETBLK,GETBLK PSLOOP, SLOOP POUTNUM,OUTNUM PEDIT, EDIT PSTICKI,STICKIT PNONBLN,NONBLNK PPRINUM,PRINUM PGETLIN,GETLIN PPDLIST,PDLIST COLUMN, 0 INDEV, 0 OUTD2, 0 OUTDEV, 0 ODEV, 0 CNTLO, 0 NOINT, 0 /THIS PREVENTS INTERUPTS DURING CRITICAL TIMES. RBSWCH, 0 DISB, 0 PRESET, RESET1 SPECINT,CCINTK PCOWT, COWT DELOUT, OUTDEL CNCLR, CLRCNT SPLEFT, RMLEFT PTEN, TEN PANORM, ANORM PAR1, AR1 PAL1, AL1 ONE, 2014 ZERO, 0;0;0 O200, 200 FPFLAG, 0 POADD, OADD O4, 4 PLINFIX,LINFIX O7745, 7745 PCHKFIT,CHKFIT PGOLIST,GOLIST GSBPTR, 0 GET=1 ISIT=JMS I .;XISIT;XGISIT MUSTBE=JMS I .;XMUST;XGMUST PLBEGIN,LBEGIN MLBEGIN,-LBEGIN-1 MLEND, -ENDPDL PISITLI,ISITLIT PAGE *.-1 GETWD, 0 TAD I LOCCTR DCA WORD ISZ LOCCTR JMP I GETWD PLETDO, LETDO LETDO, MUSTBE /'=' 3673 JMS I PEVAL MUSTBE /(CR) OR '\' 2000 JMS STOVAR EXECUTE,JMS GETWD TAD PLETDO DCA GETVAR TAD I WORD SPA JMP KEYWD SZA CLA /IS IT A LINENO JMP NOTKWD /NO TAD WORD DCA LINENO JMS GETWD TAD I WORD SMA CLA JMP NOTKWD KEYWD, CLA CLL CML RTR TAD I WORD SNL /IS IT A STATEMENT WORD JMP I PSXERR /NO TAD SJUMP DCA .+1 HLT SJUMP, JMP I .+1 EXECUTE END FOR GOSUB GOTO IF INPUT LET NEXT PRINT RETURN STOP DIM RESTORE SKIPIT DEF READ SKIPIT EXIT STOP TTYIN TTYOUT LPTOUT PTPOUT PTRIN SXERR /THIS SLOT IS NOW FREE. (6031) RUBO NORUBO IFNZRO MACHINE< CLEAR DELAY USE PLOT REALTIME SETRATE SETCLOCK WAITC WAIT SXERR /"UCOM" --- USER COMMAND. ACCEPT REJECT> IFZERO MACHINE< SXERR SXERR SXERR SXERR SXERR SXERR SXERR SXERR SXERR SXERR SXERR SXERR > GETVAR, 0 LET, JMS GETWD NOTKWD, MUSTBE /A VARIABLE 7000 TAD WORD DCA VAR DCA SSONE DCA SSTWO GET+ISIT /'(' 3755 JMP I GETVAR /NO JMS I PEVAL JMS I PFIX DCA SSONE ISIT /',' 3763 JMP NOCOMMA /NO JMS I PEVAL JMS I PFIX DCA SSTWO NOCOMMA,MUSTBE /')' 3761 JMS GETWD JMP I GETVAR STOVAR, 0 JMS I PGETADDR VAR, 0 SSONE, 0 SSTWO, 0 FENTER FSTI ADDRESS FEXIT JMP I STOVAR FNERR, JMS I PERROR TEXT 'FUNCTION' CLRCNT, 0 /ROUTINE WHICH CHECKS STATUS OF CONTROL C FLAG. CLA IAC TAD NOINT /WAS IT SET TO -1? SNA CLA JMP I PBOMB /YEP. GIVE STOP MESSAGE. DCA NOINT /NOPE. RESET IT. JMP I CLRCNT /AND EXIT PBOMB, CNTLCR SPACERR,JMS I PERROR TEXT 'TOO-BIG' IF, JMS I PEVAL FENTER FST OPERAND FEXIT MUSTBE /'THEN' 1774 TAD OPERAND SPA SNA CLA JMP SKIPIT GET+ISIT /A LINENO 0000 JMP I XEXECU JMP GOTO+1 XEXECU, EXECUTE+1 FOR, GET+MUSTBE /A VARIABLE 7000 JMS FINDIT JMP NOTHERE CLA IAC TAD INDEX1 DCA INDEX2 CLA CMA TAD INDEX1 DCA INDEX1 JMP INLUPF LUPF, TAD I INDEX2 DCA I INDEX1 TAD I INDEX2 DCA I INDEX1 INLUPF, ISZ GOTEMP JMP LUPF ISZ FORCT NOTHERE,TAD FORCT TAD O11 SPA SNA CLA /CAN'T FIT 9 IN FORLIST JMP FORERR TAD WORD CIA DCA I INDEX1 TAD WORD DCA FORVAR GET+MUSTBE /'=' 3673 JMS I PEVAL JMS I PGETADDR FORVAR, 0 0 0 FENTER FSTI ADDRESS FEXIT MUSTBE /'TO' 3757 TAD LOCCTR DCA I INDEX1 CLA CMA TAD FORCT DCA FORCT SKIPIT, JMS I PIGNORE /LOOK FOR "\" OR C.R. JMP I PEXECUTE /AND EXECUTEPTHE NEXT STATEMENT. PIGNORE,IGNORE PASSCR, 0 /THIS LOOKS FOR A REAL C.R. JMS I PIGNORE /LOOK FOR "\" OR C.R. ISZ WORD ISIT 4100 /A REAL C.R. ? JMP .-4 /NOPE. A SLASH. JMP I PASSCR /AND RETURN TO CALLER. FORERR, JMS I PERROR TEXT 'FOR' O11, 11 GOSUB, JMS GETWD JMS GOBOTH TAD GSBPTR TAD MGSBEND SNA CLA JMP DEEPERR TAD LOCCTR DCA I GSBPTR ISZ GSBPTR JMP GOTO+2 GOTO, JMS GETWD JMS GOBOTH ISZ GOTEMP TAD I GOTEMP DCA LOCCTR JMP I PEXECUTE MGSBEND,-GSBEND DEEPERR,JMS I PERROR TEXT 'GOSUB' GOBOTH, 0 MUSTBE /A LINENO 0000 TAD WORD DCA GOTEMP ISZ WORD ISIT /DEFINED 0000 JMP ISITDF JMS I PERROR TEXT 'LINENO' ISITDF, GET+MUSTBE /(CR) OR '\' 2000 JMP I GOBOTH VARTEMP,0;0;0 PXFORLI,FORLIST-1 FINDIT, 0 TAD FORCT DCA GOTEMP TAD PXFORLIST DCA INDEX1 JMP INLOOP FINDLUP,TAD I INDEX1 TAD WORD SNA CLA JMP FOUND ISZ INDEX1 INLOOP, ISZ GOTEMP JMP FINDLUP JMP I FINDIT FOUND, ISZ FINDIT JMP I FINDIT PAGE NEXT, GET+MUSTBE /A VARIABLE 7000 JMS I PFINDIT JMP NEXTERR TAD WORD DCA NEXTVAR GET+MUSTBE /(CR) OR '\' 2000 TAD LOCCTR DCA LOCTEMP TAD I INDEX1 DCA LOCCTR JMS I PEVAL FENTER FST+FWD+FORLIM-. FEXIT ISIT /(CR) OR '\' 2000 JMP TRYSTEP /NO FENTER FLD ONE FJMP+FWD+GOTSTEP-. TRYSTEP,MUSTBE /'STEP' 3756 JMS I PEVAL MUSTBE /(CR) OR '\' 2000 FENTER GOTSTEP,FST+FWD+FORSTEP-. FEXIT JMS I PGETADDR NEXTVAR,0 0 0 FENTER FLDI ADDRESS FAD+FWD+FORSTEP-. FST+BKWD+.-VARTEMP FSB+FWD+FORLIM-. FEXIT TAD ACS TAD FORSTEP SMA CLA TAD AC1 SZA CLA JMP FORDONE FENTER FLD+BKWD+.-VARTEMP FSTI ADDRESS FEXIT JMP I PEXECUTE FORDONE,TAD LOCTEMP DCA LOCCTR ISZ FORCT ISZ GOTEMP JMP .-2 JMP I PEXECUTE LOCTEMP,0 PFINDIT,FINDIT NEXTERR,JMS I PERROR TEXT 'NEXT' RETURN, GET+MUSTBE /(CR) OR '\' 2000 TAD GSBPTR TAD MGOLIST SNA CLA JMP RETNERR CLA CMA TAD GSBPTR DCA GSBPTR TAD I GSBPTR DCA LOCCTR JMP I PEXECUTE RETNERR,JMS I PERROR TEXT 'RETURN' MGOLIST,-GOLIST FORLIM, 0;0;0 FORSTEP,0;0 SGN, 0 FENTER FSGE FLD+FWD+MNSONE-. FSLE FLD ONE FEXIT JMP I SGN MNSONE, 6014;0;0 PUTCH, 0 DCA SGN TAD SGN PCCUNT, AND O177 TAD O7763A SZA CLA /IS IT A C.R. JMP PNOCR /NOPE. TAD PCCUNT /ADD IN EXTRA PLACES FOR GOOD LUCK. TAD COLUMN /SAVE COLUMN POSITION DCA NEXTVAR DCA COLUMN TAD NEXTVAR /REGET WHERE WE WERE. AND PUTXRA /ARE WE INSERTING NULL CHARACTERS? CLL RAR /NOW DIVIDE BY 2. PNOCR, CLL CML CMA RAR /AND NOW INVERT AND DIVIDE BY 2 AGAIN. DCA NEXTVAR /SAVE FOR LATER USE. THIS IS NULL COUNTER. TAD SGN /RECALL THE CHARACTER. AND O140A SZA TAD O7640A O7640A, SZA CLA ISZ COLUMN TAD SGN JMS I JPUTCH ISZ NEXTVAR /INCREMENT THE COUNTER JMP .-2 /GIVE NULLS UNTIL IT'S SATISFIED. JMP I PUTCH O7763A, 7763 O140A, 140 PUTXRA, 0 /NULL AFTER C.R. WORD. JPUTCH, PUTER PAGE START, JMS I XRESTA /REST FLAGS AND DEVICES. JMP I .+1 SCRATCH XRESTA, ISET EVAL, 0 JMS GETWD TAD EVAL EVALGO, JMS I PPUSH TAD O4014 JMS I PPUSH JMP GETOPR+1 ISUMIN, TAD O4213 JMS I PPUSH GETOPR, JMS GETWD ISIT /'-' 3577 SKP JMP ISUMIN ISIT /'+' 3600 SKP JMP GETOPR ISIT /'(' 3755 JMP NOPAREN /NO JMS EVAL MUSTBE /')' 3761 JMP I PGOTOPR NOPAREN,ISIT /A VARIABLE 7000 JMP NOTVAR /NO DCA ONESS DCA TWOSS TAD WORD DCA WDTEMP GET+ISIT /'(' 3755 JMP GOTSS /NO TAD WDTEMP JMS I PPUSH JMS EVAL ISIT /',' 3763 JMP ONEDIM JMS I PFIX JMS I PPUSH JMS EVAL JMS I PFIX DCA TWOSS JMS I PPOP JMP .+3 ONEDIM, DCA TWOSS JMS I PFIX DCA ONESS MUSTBE /')' 3761 JMS I PPOP DCA WDTEMP JMS GETWD GOTSS, JMS I PGETADDR WDTEMP, 0 ONESS, 0 TWOSS, 0 FENTER FLDI ADDRESS FEXIT JMP I .+1 OPDONE NOTVAR, JMS I PISITLIT /ISIT A LITERAL JMP ISITFUN /NO JMP I PGOTOPR /IT IS IN THE AC NOW ISITFUN,TAD I WORD TAD O3754 /-4024, WHICH IS BEGINNING OF FUNCTIONS. SPA /IS IT A LEGAL FUNCTION? JMP I PSXERR /NO. EXIT WITH MESSAGE. SNA /WAS IT 'FN' JMS GETWD /YES,SKIP OVER LETTER JMS I PPUSH GET+MUSTBE /'(' 3755 JMS EVAL JMS I PPOP TAD FJUMP DCA .+1 HLT JMP I .+1 FNEXIT FJUMP, JMS I FUNTAB FUNTAB, FN COS TAN ATN LOG EXP SQR ABS SGN INT RND SIN PUTJ /POINTER TO PUT CHAR ROUTINE. SXERR /FOR THE MISC. FUNCTIONS. SXERR SXERR GETJ /GET A CHAR FROM THE TTY. IFZERO MACHINE< SXERR TST SXERR > TAB /TAB FUNCTION IS IMPLEMENTED. SXERR /UNIMPLEMENTED USER FUNCTION. IFZERO MACHINE< SXERR SXERR SXERR > O3754, 3754 O4014, 4014 O4213, 4213 OBLOW=. OBHIGH=FNEXIT-1 PAGE FNEXIT, MUSTBE /')' 3761 GOTOPR, JMS GETWD OPDONE, JMS I PPOP DCA OLDOP TAD I WORD AND O700 SNA CLA JMP ITSOP TAD I WORD AND O7077 TAD O3755 CLL TAD O23 SNL CLA JMP I PSXERR ITSOP, TAD OLDOP AND O700 DCA OTEMP TAD I WORD AND O700 CIA TAD OTEMP SMA CLA JMP DOITNOW TAD OLDOP JMS I PPUSH FENTER FST OPERAND FEXIT TAD OPERAND JMS I PPUSH TAD OPERAND+1 JMS I PPUSH TAD OPERAND+2 JMS I PPUSH TAD I WORD JMS I PPUSH JMP I PGETOPR DOITNOW,TAD OLDOP AND O77 TAD O7764A SNA JMP UDOPER IAC SNA CLA JMP UMOPER TAD OLDOP AND O77 TAD OJUMP DCA OTEMP JMS I PPOP DCA OPERAND+2 JMS I PPOP DCA OPERAND+1 JMS I PPOP DCA OPERAND OTEMP, HLT O700, 700 O3755, 3755 O7764A, 7764 O7077, 7077 OJUMP, JMP I .+1 PLUS MINUS STAR SLASH UPARRX /OR 'UPARROW' IF NO EXTENDED FNS RELATE RELATE RELATE RELATE RELATE RELATE PLUS, FENTER FAD OPERAND FADEXT, FEXIT JMP OPDONE MINUS, FENTER FSB OPERAND FEXIT UMOPER, TAD AC1 SZA CLA CLA CLL CML RAR TAD ACS DCA ACS /DIRECT REF TO FLOATING AC JMP OPDONE STAR, FENTER FMP OPERAND FJMP+BKWD+.-FADEXT SLASH, FENTER FST+FWD+SLSHTMP-. FLD OPERAND FDV+FWD+SLSHTMP-. FJMP+BKWD+.-FADEXT SLSHTMP,0;0;0 RELATE, TAD OLDOP TAD CONST DCA THESKIP CDF 0 /''''''''' 8 K INSERT. TAD I THESKIP CDF 10 /''''''''' 8 K INSERT. DCA THESKIP FENTER FSB OPERAND THESKIP,HLT FJMP+FWD+4 FLD ONE FEXIT JMP OPDONE FLD ZERO FEXIT JMP OPDONE UDOPER, JMS I PPOP DCA OLDOP JMP I OLDOP O23, 23 CONST, .-4104 FSEQ / = FSGT / < FSLT / > FSGE / <= FSLE / >= FSNE / <> PAGE GETADDR,0 CDF 0 /''''''''''' 8 K INSERT. TAD I GETADDR DCA INDEX2 ISZ GETADDR TAD I GETADDR DCA GSS1 ISZ GETADDR TAD I GETADDR DCA GSS2 ISZ GETADDR CDF 10 /''''''''''' 8 K INSERT. TAD I INDEX2 DCA ADDRESS ISZ ADDRESS TAD GSS1 SNA CLA JMP NOSS1 TAD I INDEX2 SNA JMP ALLOC CLL CMA TAD GSS1 SZL CLA JMP SSERR TAD I INDEX2 DCA GDIM2 TAD GSS2 SNA JMP NOSS2 CLL CIA TAD GDIM2 SNL CLA JMP SSERR TAD GSS1 CIA DCA GSS1 SKP TAD GDIM2 ISZ GSS1 JMP .-2 TAD GSS2 DCA GSS1 NOSS2, TAD GSS1 CLL RAL TAD GSS1 TAD ADDRESS DCA ADDRESS NOSS1, JMP I GETADDR ALLOC, ISZ DIMFLAG SKP JMP ISDIM DCA DIMFLAG TAD GSS2 SZA CLA TAD O13 DCA GSS2 TAD O13 DCA GSS1 ISDIM, TAD GSS2 SNA CLA IAC CIA DCA GDIM2 ISZ NOINT /FORBID INTERUPTS NOW. CLA CLL IAC TAD GSS1 SZL JMP I PSPACERR ISZ GDIM2 JMP .-4 DCA GDIM2 TAD GDIM2 CLL CML RAL SNL TAD GDIM2 DCA GDIM2 TAD GDIM2 SZL JMP I PSPACERR JMS I SPLEFT SKP JMP I PSPACERR CLA CLL CMA RAL TAD INDEX2 DCA INDEX2 TAD ARRLOC DCA I INDEX2 TAD GSS1 DCA I INDEX2 TAD GSS2 DCA I INDEX2 CLA CMA TAD ADDRESS DCA ADDRESS TAD O7774 DCA GSS2 TAD I ADDRESS ISZ ADDRESS JMS I PSTICKIT ISZ GSS2 JMP .-4 TAD GDIM2 CIA TAD O4 DCA GDIM2 JMS I PSTICKIT ISZ GDIM2 JMP .-2 CLA CLL CMA RTL TAD GETADDR DCA GETADDR JMS I CNCLR /CHECK FOR CONTROL C. JMP GETADDR+1 GSS1, 0 GSS2, 0 GDIM2, 0 PSPACER,SPACERR O7774, 7774 O13, 13 /(12) IF 1 ORG INDEXING SSERR, JMS I PERROR TEXT 'SUBSCRIPT' DEF, TAD LINENO DCA INDEX1 TAD I INDEX1 DCA USERFN GET+MUSTBE /'FN' 3754 GET+MUSTBE /A VARIABLE 7000 GET+MUSTBE /'(' 3755 GET+MUSTBE /A VARIABLE 7000 GET+MUSTBE /')' 3761 GET+MUSTBE /'=' 3673 JMP I PSKIPIT PSKIPIT,SKIPIT USERFN, 0 MORERD, MUSTBE /',' 3763 READ, JMS I PGETVAR CLA CMA TAD LOCCTR DCA LOCTMP TAD READLOC DCA LOCCTR GET+ISIT /(CR) OR '\' 2000 SKP JMP SEARCH ISIT /A LINENO 0000 SKP JMP SEARCH ISIT /',' 3763 JMP DATAERR ISSOME, JMS I PEVAL CLA CMA TAD LOCCTR DCA READLOC TAD LOCTMP DCA LOCCTR JMS I PSTOVAR GET+ISIT /(CR) OR '\' 2000 JMP MORERD JMP I PEXECUTE SCHMOR, JMS GETWD SEARCH, ISIT /'DATA' 1757 SKP JMP ISSOME ISIT /(EOF) 1755 JMP SCHMOR DATAERR,JMS I PERROR TEXT 'DATA' LOCTMP, 0 GETBLK, 0 JMS I PCHKFIT TAD CODELOC DCA LOCCTR TAD CODELOC TAD ABCDEF DCA CODELOC TAD CODELOC DCA BCDEFG TAD PSYMTAB /UPDATE SYMBOL TABLE NOW. TAD ABCDEF /BY ADDING IN CORRECTION FACTOR. DCA PSYMTAB GTBKLP, TAD I LOCCTR /MOVE TEXT NOW. ISZ LOCCTR DCA I BCDEFG ISZ BCDEFG TAD BCDEFG /NOW CHECK FOR END. CIA TAD PSYMTAB SZA CLA JMP GTBKLP CLA CMA TAD NSYMTAB DCA NSYMTAB TAD GSBPTR CMA TAD PGOLIST DCA BCDEFG TAD PGOLIST DCA WORD TAD ABCDEF TAD I WORD DCA I WORD ISZ WORD ISZ BCDEFG JMP .-5 TAD FORCT DCA BCDEFG TAD PPFORLIS DCA WORD JMP .+6 TAD ABCDEF TAD I WORD DCA I WORD ISZ WORD ISZ WORD ISZ BCDEFG JMP .-6 TAD PSYMTAB JMP I GETBLK ABCDEF, -4 BCDEFG, 0 PPFORLI,FORLIST+1 PUTJ, 0 JMS I PFIX CLA TAD AC3 JMS I PPUTCH JMS I PANORM JMP I PUTJ GETJ, 0 /GETS A CHARACTER FROM THE TTY. JMS I PBEGFIX /CLEAN UP THE FAC JMS I PGETCH /FECTH A CHAR. DCA AC3 /SAVE IT, BABY! JMS I PANORM /AND NORMALIZE AC. JMP I GETJ /AND RETURN NOW. PBEGFIX,BEGFIX PAGE NOTNOW, ISZ NOINT /RESET ^C SWITCH SO NO INTERUPT NOW. ISZ WORD TAD I WORD SNA JMP INSERT DCA LOWLOC DCA I WORD TAD LOWLOC DCA LOCCTR JMS I PPASSCR MOVE, TAD LOWLOC CIA TAD CODELOC SNA CLA JMP INSRT5 CLA CLL CMA TAD LOWLOC DCA LOWLOC CLA CLL CMA TAD LOCCTR DCA LOCCTR TAD I LOWLOC DCA I LOCCTR JMP MOVE INSRT5, TAD LOCCTR DCA CODELOC INSERT, TAD FPTR TAD MLINBUF CMA DCA FPTR CLA CLL CML RTL TAD FPTR SNA JMP FIXLIN CMA JMS I PCHKFIT TAD CODELOC DCA LOCCTR TAD I PLINBUF IAC DCA INDEX1 TAD I INDEX1 DCA OPERAND TAD I INDEX1 DCA OPERAND+1 JMS COMPARE JMP NOTFRST JMS SUBRA JMP TRANSF NOTFRST,JMS I PPASSCR JMS COMPAR JMP NOTFRST TAD LOCCTR DCA LSTLOC TAD CODELOC DCA LOCCTR JMS SUBRA JMS GETWD MOVLUP, TAD WORD DCA I PUTLOC ISZ PUTLOC JMS GETWD TAD LSTLOC CIA TAD LOCCTR SZA CLA JMP MOVLUP TRANSF, TAD PLINBUF DCA GPTR TRALUP, TAD I GPTR ISZ GPTR DCA I PUTLOC ISZ PUTLOC ISZ FPTR JMP TRALUP FIXLIN, JMS I PLINFIX JMP I PEDIT IGNORE, 0 /THIS ROUTINE LOOKS FOR A "\" OR A C.R. GET+ISIT 5000 /TEXT? JMP NOTBAD /NOPE. JMS GETWD TAD WORD AND O77 SZA CLA /END OF TEXT? JMP .-4 /NOPE. JMP IGNORE+1 /YEP. GET NEXT ITEM. NOTBAD, JMS I PISITLIT /IS IT A LITERAL? SKP JMP IGNORE+1 /YES. ISIT 2000 /"\" OR C.R. JMP IGNORE+1 / N O JMP I IGNORE /YES. RETURN TO CALLER. COMPARE,0 GET+ISIT /A LINENO 0000 JMP IAMLESS TAD WORD IAC DCA INDEX1 TAD I INDEX1 CLL CIA TAD OPERAND SZA CLA JMP FRSTNE TAD I INDEX1 CLL CIA TAD OPERAND+1 FRSTNE, SNL CLA /IS OPERAND TSF /IS IT THE TELEPRINTER. JMP .+3 /NO TCF JMP INODUN /YEP. CLEAN IT UP. LSF /PRINTER? JMP .+3 LCF /YEP. JMP INODUN PSF /PUNCH? JMP .+3 PCF JMP INODUN RSF /READER? JMP INOPPP /NOPE. CLA CLL CML RAR /4000 TO AC RRB /READ IN THE CHARACTER. DCA I PHRCHAR JMP INTEXT /EXIT FROM THE INTERUPT. INOPPP, 6663 /LINE PRINTER ERROR? JMP INOTTT /NOPE. 6667 /YEP. INGORE THE LINE PRINTER NOW. JMP INTEXT /AND EXIT. INOTTT, KSF /IS IT THE KEYBOARD. HLT /NOPE. A BADDY. WE'RE F--KED. KRB /READ IN THE CHARACTER. AND O177 /CHOP OFF THE CRAP. DCA INTEMP /SAVE IN THE INTERUPT TEMPORARY. TAD INTEMP /RECALL IT NOW, BUBBY. TAD O7775 /IS IT A ^C SNA /? JMP FCNTLC /YES! TAD O7764D /^O? SNA CLA JMP FCNTLO CLA CLL CML RAR TAD INTEMP /SET HIGH ORDER BIT ON FOR SAFETY. DCA I PINCHAR /PUT IT AWAY JMP INTEXT /AND EXIT FROM INTERUPT. FCNTLC, TAD NOINT /CHECK IF OK TO INTERUPT. SZA CLA JMP CNTLCF /NOT OK. CNTLCR, IOF /TURN OFF INTERUPTS TO BE SURE. JMS I DELOUT /DELETE OUTPUT BUFFERS. JMS I PRESET /RESET ALL I/O DEVICES. JMS I PPRINTXT /GIVE THE STOP MESSAGE BREAK /I DON'T LIKE "THOSE PEOPLE" LOOKING OVER MY SHOULDER WHILE I TYPE. TAD PPDLIST /RESET PUSH DOWN POINTER DCA PDL JMP I PEDIT /AND RESTART CISAB CNTLCF, CMA /RESET ^C FOUND SWITCH. DCA NOINT JMP INTEXT FCNTLO, JMS I DELOUT /DELETE THE OUTPUT NOW, BABY. TAD CNTLO /NEGATE CNTLO SWITCH. CMA DCA CNTLO JMP INTEXT INODUN, DCA I POFLAG /RESET OUTPUT FLAG. JMS I POUTIT /PREFORM THE NEXT OPERATION. JMP INTEXT BIDLE, 0 /THE IDLE ROUTINE IOF CLA IAC DCA BUSY /RESET THE IDLE TASK FLAG. RDF /SAVE THE DATA FIELD NOW. TAD O6201A DCA INTECDF /AND PLACE IN WHERE TO GO ON IDLE EXIT. TAD IDLELK /RESTORE THE IDLE ROUTINES PARAMETERS. CLL RAL TAD IDLEAC IDLECD, CDF 10 IDLECI, CIF 0 ION /AND DO THE IDLE STUFF JMP I IDLEPC IDLELK, 0 IDLEAC, 0 IDLEPC, NULJOB INTAC, 0 INTL, 0 INTEMP, 0 BUSY, 0 PHRCHAR,HRCHAR PINCHAR,INCHAR POFLAG, OFLAG POUTIT, OUTIT INTEXT, TAD BUSY /GET STATUS. SNA CLA JMP INTOU /WE WERE NOT IDLE. EXIT NOW. DCA BUSY /RESET BUSY FLAG. TAD 0 DCA IDLEPC TAD INTAC /SAVE SH-T. DCA IDLEAC TAD INTL DCA IDLELK TAD INTCIF DCA IDLECIF TAD INTCDF DCA IDLECDF INTECD, HLT /IDLE ROUTINES CALLING CDF. ION JMP I BIDLE /AND GO BACK NOW. INTOU, TAD INTL CLL RAL TAD INTAC INTCDF, HLT INTCIF, HLT ION JMP I 0 O70, 70 O6202, 6202 O7775, 7775 O7764D, 7764 PAGE PUTER, 0 /THE CHARACTER PUTTER. DCA OPUTC /SAVE THE CHARACTER NOW. RDF /READ THE DATA FIELD NOW. TAD O6201B /CREATE PROPER CDF INSTRUCTION. DCA PUTCDF /SAVE CDF INSTRUCTION. O6201B, CDF 0 /RESET CDF TO THIS DATA FIELD. SKP PUTLP, JMS I PBIDLE /CALL IN THE IDLE ROUTINE NOW. TAD OCOUNT /GET NUMBER OF CHARACTERS IN THE BUFFER. SNA JMP PUTCIN /PUT IT IN NOW, BABY. TAD OCMLIM /TEST FOR TOO MANY IN BUFFER. SNA CLA JMP PUTLP /YEP. WAIT AWHILE. TAD OUTDEV CIA TAD ODEV /CHECK FOR A MATCH. SZA CLA JMP PUTLP /NOPE. WAIT FOR BUFFER TO BECOME EMTPY. PUTCIN, IOF /TURN THEM OFF, BABY. TAD CNTLO /CHECK FOR CONTROL "O" ACTIVE. SNA CLA TAD OUTDEV /MOVE OVER OUTPUT DEVICE. DCA ODEV ISZ OCOUNT TAD OPUTC /STICK A CHARACTER IN THE BUFFER. DCA I IPOINT JMS OBOP /BOP UP THE POINTER NOW. IPOINT, OBLOW JMS OUTIT /SEND IT OUT ION /RESTORE INTERUPTS. PUTCDF, HLT /USER'S CORRECT CDF JMP I PUTER OPUTC, 0 OCOUNT, 0 OUTIT, 0 TAD OFLAG SZA CLA JMP I OUTIT /FLAG STILL UP. EXIT. TAD OCOUNT SNA JMP I OUTIT /NO CHARS TO GO. SO WE WILL. TAD O7777 /PLEASE IGNORE THE COMMENTS OF A DERANGED MIND. DCA OCOUNT TAD ODEV TAD OPOTAB /MAP DEVICE INTO TABEL TOO ET WHAT TO DO. DCA OFLAG /AND ALSO RESET FLAG AT THE SAME TIME. TAD I OFLAG /GET THE MAGIC INSTUCTION. DCA .+2 /AND PLACE IT HERE. TAD I OPOINT /GET THE CHARACTER. HLT /AND HALT. CLA /AFTER PRINTING THE CHARACTER, JMS OBOP /WE SHALL INCREMENT THE POINTER. OPOINT, OBLOW JMP I OUTIT /AND EXIT. OPNUL, CLA /RESET OFLAG DCA OFLAG /SO DEVICES INACTIVE. JMS I DELOUT /DELETE ANY STRAY CHARACTERS IN THE BUFFER. JMP I OUTIT /AND RETURN NOW. OPOTAB, .+1 JMP OPNUL /NUL DEVICE (NO ECHOING) TLS PLS LLS OFLAG, 0 OBOP, 0 TAD I OBOP TAD OTST1 SNA TAD OFLOW TAD OCOR DCA I OBOP ISZ OBOP JMP I OBOP OTST1, -OBHIGH OCOR, OBHIGH+1 O7777, 7777 OFLOW, -OBHIGH-1+OBLOW OCMLIM=OFLOW RESET1, 0 CLA IAC DCA OUTDEV CLA IAC DCA OUTD2 CLA IAC DCA INDEV DCA CNTLO DCA NOINT /CLEAR NO-INTERUPT FLAG. CDF 0 /RESET DATA FIELD TO HERE. DCA I QHRCHAR /CLEAR ALL INPUT FLAGS. DCA I SINCHAR DCA I PBUSY /AND ALSO THE BUSY FLAG. DCA I PPXRA /RESET NULL AFTER C.R. FLAG. IFZERO MACHINE< CDF 10 ION > 6665 /TELL LPT IT'S OK TO INTERUPT NOW. JMP I RESET1 LLLUUU, UUULLL /POINTER TO UPPER CORE RESETER. RESET2, 0 JMS I PRESET JMS I DELOUT DCA OFLAG JMP I RESET2 OUTDEL, 0 DCA OCOUNT TAD OPRST DCA OPOINT TAD OPRST DCA IPOINT JMP I OUTDEL OPRST, OBLOW QHRCHAR,HRCHAR PBUSY, BUSY PPXRA, PUTXRA PBIDLE, BIDLE SINCHAR,INCHAR LPTOUT, CLA IAC /LINE PRINTER OUTPUT PTPOUT, IAC /PUNCH OUT TTYOUT, IAC /TTY OUT DCA OUTDEV /AND SET IT UP TAD OUTDEV /ALSO MOVE OVER TO SECONDARY DEVICE. DCA OUTD2 JMP DEVCOM /AND CHECK FOR END. PTRIN, CLA IAC TTYIN, IAC DCA INDEV DEVCOM, JMS GETWD DEVCON, MUSTBE 2000 /C.R. OR \ JMP I PEXECUTE GETCH, 0 JMS GWHERE JMS I QBIDLE TAD INCHAR SNA JMP GETCH+2 AND O177 DCA GTEMP DCA INCHAR DCA HRCHAR TAD RBSWCH SNA CLA JMP GRB TAD GTEMP TAD O7601 SZA CLA JMP GRB GRDELA, TAD O137 JMP I GETCH GRB, TAD GTEMP TAD O7770 SNA JMP GRDELA TAD O7612 SNA JMP GALT TAD O143 SNA CLA JMP GALT TAD GTEMP TAD O7640C SPA JMP GOUT TAD O7746 SMA JMP GOUT TAD O132 JMP I GETCH GALT, TAD O175 JMP I GETCH GOUT, CLA TAD GTEMP JMP I GETCH GTEMP, 0 INCHAR, 0 HRCHAR, 0 QBIDLE, BIDLE O7601, 7601 O137, 137 O7612, 7612 O7640C, 7640 O7746, 7746 O132, 132 O143, 143 O175, 175 GWHERE, 0 CLA CMA TAD INDEV ISZ GWHERE SPA SNA CLA JMP I GWHERE /INPUT=TTY TAD O7746 DCA GTEMP DCA HRCHAR RFC /START THE READER NOW. HRLOP, TAD HRCHAR SZA JMP HFOUND /GOT IT. ISZ INCHAR JMP HRLOP ISZ GTEMP JMP HRLOP CLA IAC DCA OUTDEV /RESET OUTPUT DEVICE FOR A SECOND. DCA CNTLO /RESET THE CONTROL "O" SWITCH ALSO. JMS I PPRINTXT /GIVE THE MESSAGE. HRMES CLA IAC DCA INDEV JMP I GWHERE HFOUND, ISZ GWHERE JMP I GWHERE HRMES, TEXT '_TTY_' COWT, 0 /THIS ROUTINE WAITS FOR OUTPUT TO STOP. CDF 0 /SET D.F. TO THIS FIELD. DCA I CCXRA /SET OR RESET NULL AFTER C.R. FLAG. COWTLP, TAD I COWTFP /GET OUTPUT FLAG STATUS. CDF 10 /RESET D.F. SNA CLA /IS OUTPUT DONE? JMP COWTO /YEP. EXIT. JMS I COWTW /NOPE. IDLE LOOP TILL INTERUPT. CDF 0 /RESET D.F. TO ZERO. JMP COWTLP /AND LOOP. COWTO, DCA CNTLO /CLEAR CONTROL O STATE. JMP I COWT CCXRA, PUTXRA COWTFP, OFLAG COWTW, BIDLE XGMUST, 0 JMS GETWD TAD XGMUST DCA XMUST JMP XMUST+1 XMUST, 0 TAD I WORD CDF 0 /''''''''' 8 K INSERT. TAD I XMUST CDF 10 /''''''''' 8 K INSERT. ISZ XMUST SNA CLA JMP I XMUST JMP I PSXERR ARGERR, JMS I PERROR TEXT 'ARGUMENT' DOTZERO,TEXT '.0' RTERR, JMS I PERROR /GIVE RATE ERROR FOR CLOCK. TEXT 'RATE' PAGE IFZERO MACHINE< NOPUNCH> PLOT, TAD DISB /GET BUFFER ADDRESS. SZA CLA /IS THERE ONE? JMP DBGOT TAD PASSUME /GET ASSUMMED LENGTH. JMS I SPLEFT /ROOM LEFT TO FIT IT IN. SKP JMP I NPSPERR /NO. TAD ARRLOC /GET A USABLE ADDRESS. DCA DLAST /SAVE AWAY. TAD ARRLOC /NOW UPDATE OUR ARRAY. TAD PASSUME DCA ARRLOC CLA CMA TAD ARRLOC /GET LAST WORD OF OUR BUFFER NOW. DCA DDLAST /AND GO. JMS PLOTB /FIGURE OUT OUR CRAP NOW. DBGOT, DCA DBAD /TELL IT POINT IS ON SCREEN JMS GETWD /GET NEXT SYNTATICAL ELEMENT. JMS I PMEVAL /EVALUATE OUR EXPRESSION. FENTER FMP+FSHIFT+FWD-. /CORRECT NUMBER FOR SYMETRICAL SCREEN. FEXIT JMS DBLIT /PUT IT IN THE BUFFER. JMS I PMEVAL /GET Y COORDINATE. JMS DBLIT /PUT IT IN THE BUFFER. TAD DBAD /IS IT A BAD ONE? CIA TAD DINP DCA DINP CLA CLL CML RAR /4000=END OF BUFFER CHARACTER. DCA I DINP JMP I PDEVCON PASSUME,1750 PMEVAL, MEVAL PDEVCON,DEVCON FSHIFT, 2007;1600;0000 /MAGIC CONSTANT FOR SYMETRICAL SCREEN. USE, TAD DISB /IS DISPLAY BUFFER ASSIGNED. SZA CLA JMP I USKIPIT /YES. EXIT. JMS GETARY /GET THE ARRAY DATA TAD AC1 /GET FIRST FREE LOCATION DCA DLAST TAD AC2 /GET SECOND FREE LOCATION DCA DDLAST /SAVE AWAY. JMS PLOTB /SET UP STUFF. JMS GETWD /GET NEXT ELIMAENT AFTER VARIABLE. JMP I PDEVCON USKIPIT,SKIPIT GETARY, 0 /THIS ROUTINE GETS THE FIRST AND LAST LOCATIONS OF AN ARRAY. GET+MUSTBE /MUST BE A VARIABLE. 7000 TAD WORD /GET POINTER TO VARIABLE. DCA UVP ISZ WORD TAD I WORD /GET POINTER NOW. IAC DCA AC1 /SAVE AWAY. ISZ WORD TAD I WORD DCA U1P ISZ WORD TAD I WORD DCA U2P JMS I PGETADD UVP, 0 U1P, 0 U2P, 0 CLA CLL CML RTL /+2 TAD ADDRESS DCA AC2 JMP I GETARY DLAST, 0 DINP=DLAST DDLAST, 0 DBAD, 0 PLOTB, 0 CLA CMA TAD DLAST DCA DISB TAD O4001 DCA I DDLAST CLA CLL CML RAR DCA I DLAST JMP I PLOTB O4001, 4001 DBLIT, 0 TAD ACS SMA CLA JMP .+4 DBBAD, CLA CLL CML RTL DCA DBAD JMP DBISRT TAD ACE TAD O7577B SMA CLA JMP DBBAD TAD ACE TAD O12 DCA ACE JMS I PFIX CLA TAD AC3 DBISRT, JMS DBPUT CLA CLL CML RAR ISZ DINP JMS DBPUT JMP I DBLIT O7577B, 7577 NPSPERR,SPACERR DBPUT, 0 DCA AC2 CLA CLL CMA RAR /-4001=3777 TAD I DINP SNA CLA JMP I NPSPERR /NO ROOM IN BUFFER. BOMB HIM. TAD AC2 DCA I DINP JMP I DBPUT UUDATA, JMS I PERROR TEXT 'A-D FULL' ENPUNCH IFZERO MACHINE< *PLOT> SETUP, 0 TAD PSYMTAB DCA EPTR TAD NSYMTAB DCA FPTR DCA DISB JMP I SETUP IFZERO MACHINE< CDEVCOM=0 > ISET, 0 DILC DIXY JMS I IIXR JMP I ISET IIXR, RESET2 IFZERO MACHINE< NOPUNCH> MEVAL, 0 ISIT /IS IT A C.R. 2000 SKP JMP I PSXERR ISIT 3763 /, JMP .+3 JMS GETWD JMP MEVAL+1 TAD MEVAL JMP I MEVALGO MEVALGO,EVALGO CLEAR, TAD DISB SNA /IS IT THERE? JMP I CDEVCOM /NOPE. DCA INDEX1 CLA CLL CML RAR /4000 DCA I INDEX1 CDF 0 /RESET INPUT POINTER ALSO. TAD INDEX1 DCA I CDINP CDF 10 JMP I CDEVCOM CDINP, DINP LLLJMS, 0 TAD I LLLJMS ISZ LLLJMS DCA LLLJMP JMS I LLLJMP SKP /IN CASE OF SKIPPING RETURN. ISZ LLLJMS CIF CDF 10 JMP I LLLJMS LLLJMP, 0 TAD I LLLJMP DCA LLLJMP JMP I LLLJMP DELAY, CLA CLL CML RTL /+2 DCA NDELAY /SET UP DEALY TIME (ONE TIME THROUGH). IFZERO MACHINE< ENPUNCH *MEVAL NULJOB, IAC JMP NULJOB NOPUNCH> DCA DISAUTO /WITH POINTER TO OUR BUFFER. TAD NDELAY /UPDATE DELAY WORD. CLL RAR DCA NDELAY SZL /ARE WE FINISHED WITH DELAY COMMAND? JMP I CDEVCOM /YEP. EXIT NOW. TAD DISB /GET OUR WORD NOW. SNA CLA /ZERO? JMP NULJOB /YEP. WAIT AWHILE. NULLOP, TAD I DISAUTO SPA JMP NULCMD TAD O7000C /BRING DOWN INTO RANGE OF SCREEN. DISD JMP .-1 DILX CLA TAD I DISAUTO SPA JMP NULCMD TAD O7000C /CENTER AGAIN. DISD JMP .-1 DILY CLA DISD JMP .-1 DIXY JMP NULLOP NULCMD, CLA JMP NULJOB O7000C, 7000 NINTECDF,INTECDF UUNOAD, JMS I PERROR TEXT 'NO A-D' CCINTK, 0 6131 JMP I CCINTK CIF CDF 10 JMP I .+1 CLOCKI REALTI=. SETRAT=. SETCLO=. WAITC=. WAIT=. REJECT=. ACCEPT=. TAD I WORD CDF CIF 10 JMP I .+1 UPCOMDO TIM=. CLC=. CLS=. ADC=. ADB=. 0 TAD I PDL /RECALL CORRECT FUNCTION NUMBER (IT'S ON THE STACK) CIF CDF 10 JMS I .+2 JMP I ADB UPFUN ENPUNCH IFZERO MACHINE< *NULJOB+2> TSTFX, BEGFIX NDELAY, 0 TST, 0 JMS I TSTFX CDF 0 TAD I TSTP CDF 10 DCA AC3 JMS I PANORM JMP I TST TSTP, INCHAR FIELD 1 *0 TEN, 2045;0000;0000 /INSERTED IN UPPER CORE BECAUSE OF FEEBILITY. CLKSTS, 0 TIM1, 0 TIM2, 0 ABDGET, 0 ADACPT, 0 ADCUNT, 0 CLTEMP, 0 ADCX, 0 U100, 100 CT3, 0 CT2, 0 CT1, 0 U177, 177 U4707, 4707 U7775, 7775 ACOUNT, 0 APUT1, 0 APUT2, 0 ADA1, 0 ADA2, 0 ADA3, 0 UUSETF, USETF UMEVAL, UUMEVAL UPFIX, UUPFIX U7, 7 U5010, 5010 U7767, 7767 U10, 10 UAC1, UUAC1 UAC2, UUAC2 UAC3, UUAC3 PPAC1, AC1 PPAC2, AC2 PPAC3, AC3 PPACE, ACE PPACS, ACS U17, 17 U7777, 7777 UDOAD, DOAD U7760, 7760 UTEMP, 0 UJMP, UUJMP UJMS, UUJMS UDEVCON,UUDEVCON UGETWD, 6000 JMS I UJMS GETWD JMP I UGETWD AUTEMP, 0 ADCCOR, -11 /ABOUT 512 FOR FUDGE. PAGE *.-3 CLOCKI, 6135 /CLEAR CLOCK FLAG. DCA CLKSTS /AND SAVE STATUS. ISZ TIM2 /INCREMENT CLOCK. JMP .+3 ISZ TIM1 NOP TAD ABDGET /IS REAL TIME OPTION RUNNING? SPA SNA CLA JMP UIEXT /NOPE. TAD ADACPT /IT SO, ARE WE NOW ACCEPTING DATA? SNA CLA JMP UIEXT /NOPE. TAD ADCUNT /YEP. GET NUMBER OF CHANNELS TO DO. DCA CLTEMP /SET UP OUR COUNTER. TAD ADCX /GET STARTING CHANNEL NUMBER. 6531 /SEND TO TO CONTROLLER. TAD U100 /TELL IT TO INCREMENT MULTIPLEXOR WHEN DONE. 6536 UCLOOP, JMS I UDOAD /PREFORM A-D INSTRUCTION. JMS APUT /STORE IN USERS BUFFER. ISZ CLTEMP /ALL DONE? JMP UCLOOP /NOPE. WAIT. ISZ CT3 /DONE. INCREMENT TOTAL NUMBER OF SAMPLES. JMP UIEXT ISZ CT2 JMP UIEXT ISZ CT1 JMP UIEXT CLA CMA /ALL DONE. STOP SAMPLING. DCA ABDGET DCA ADACPT /AND GO INTO "REJECT" MODE. UIEXT, 6031 /HAS HE TYPED A CONTROL C? JMP UIEXT2 /NO. 6034 AND U177 TAD U7775 /^C? SNA CLA JMP UIEXT3 /YES! BOMB HIM. UIEXT2, 6131 JMP UIEXT4 /CLOCK HAS NOT COME UP AGAIN. ALL IS WELL. UIEXT3, TAD U4707 /STOP CLOCK IMMEADIATATELY. 6132 6135 6130 CLA CMA 6130 /CLEAR ALL AFTER PARTIAL ENABLE. 6032 /CLEAT TTY FLAG. DCA ABDGET /FREE BUFFER AND ACCEPT MODE. DCA ADACPT JMS I UJMP RTERR UIEXT4, CIF CDF 0 /INTERUPT EXIT. JMP I .+1 INTEXT /AND DO WHATEVER GOD INTENDED. APUT, 0 /THIS ROUTINE PUTS A SAMPLE IN THE BUFFER. DCA I APUT1 /PLACE IN BUFFER. ISZ ACOUNT /INCREMENT COUNTER. JMS ABOP /BOP UP POINTER. APUT1 TAD APUT1 /GET INPUT POINTER. CIA TAD APUT2 /DOES IT MATCH OUTPUT POINTER? SZA CLA JMP I APUT /NOPE. ALL IS WELL. DCA ABDGET /FREE BUFFER. DCA ADACPT /AND ACCEPT. JMS I UJMP /GIVE ERROR. UUDATA /A-D ERROR. AGET, 0 /THIS GETS A DATA ITEM FROM BUFFER. CLA CMA /DECREMENT COUNTER. TAD ACOUNT SMA /OR SHOULD WE? JMP .+5 /YEP. STILL ITEMS LEFT. CLA JMS I UJMS /PUT TO SLEEP BIDLE JMP AGET+1 /AND CHECK AGAIN WHEN AWAKE. DCA ACOUNT /SAVE COUNTER. TAD I APUT2 /GET THE SAMPLE. DCA ATEMP /SAVE WHILE UPDATE TAKES PLACE. IOF JMS ABOP APUT2 ION /ABOP WILL F--K YOU UP IF CALLED RE-ENTRENTLY. TAD ATEMP JMP I AGET ATEMP, 0 ATEMP2, 0 ABOP, 0 TAD I ABOP DCA ATEMP2 /SAVE POINTER NOW. TAD I ATEMP2 ISZ ABOP /GET VALUE AND SKIP PAST POINTER #1. TAD ADA1 /TEST AGAINST UPPER. SNA TAD ADA2 /CORRECT TO LOWER. TAD ADA3 /AND ADD IN UPPER. DCA I ATEMP2 /AND THEN SAVE AWAY. JMP I ABOP /AND THEN EXIT. UCLS, 0 /GETS STATUS AFTER LAST CLOCK INTERUPT. TAD CLKSTS JMS I UUSETF 0 JMP I UCLS /RETURN WHEN DONE. UCLC, 0 /READS IN AS A CLCA 6137 /GET COUNT REGISTER. JMS I UUSETF 0 /FIX IT UP. JMP I UCLC /AND RETURN NOW. UUULLL, 0 CLA DCA ACOUNT DCA ABDGET DCA ADACPT ION CIF 0 JMP I UUULLL DOAD, 0 TAD U7760 /PLENTY OF DELAY DCA DSCREW /SAVE IN A COUNTER WORD. 6532 /START CONVERSION. DOADLP, 6534 /WAIT UNTIL DONE. SKP /IF NOT DONE, WAIT SOME. JMP .+3 /IF DONE, READ IT IN. ISZ DSCREW JMP DOADLP /WAIT UNTIL DONE OR TOO LONG. 6533 /THEN READ IN THE CONVERTED NUMBER. JMP I DOAD /AND RETURN. DSCREW, 0 PAGE USETR, JMS UGETWD /BOP PAST CHAR. JMS I UMEVAL /THIS ROUTINE SETS UP CLOCK TO A GIVEN TIME. JMS I UPFIX /FIX UP AC. AND U7 /JUST GET SIGNIFICANT BITS (0-7). CLL RTL /NOW MOVE TO TIME PORTION (3-5) RTL RTL TAD U5010 /SET OTHER CORRECT BITS NOW. JMP USETM USETC, JMS UGETWD /BOP PAST BAD POINTER. JMS I UMEVAL /THIS ROUTINE LOADS CLOCK WITH USERS COMMAND REGISTER. JMS I UPFIX AND U7767 /MAKE SURE TO TURN INTERUPTS ON. TAD U10 USETM, DCA UTEMP /SAVE ENABLE REGISTER FOR A SECOND. CLA CMA /CLEAR CLOCK NOW. 6130 CLA /SO WE CAN LOAD IN CORRECT STUFF. JMS I UMEVAL /EVALUATE HIS TIME SETTING. JMS I UPFIX CIA IOF /MAKE SURE INTERUPTS ARE OFF. 6133 CLA DCA TIM1 /CLEAR OUT THE TIM NOW. DCA TIM2 TAD UTEMP /RECALL DESIRED ENABLE REGISTER. 6132 /SEND IT OUT. ION /TURN ON INTERUPTS NOW. CLA JMP I UDEVCON /AND EXIT NOW. UWAIT, CLA CMA /WAITS FOR AN INTERUPT. SET TO LOOK LIKE CLOCK DID IT. UWAITC, TAD TIM2 /GET LOW ORDER WORD. DCA UTEMP /SAVE FOR AWHILE. JMS I UJMS BIDLE /PUT TO SLEEP. TAD UTEMP /WAS IT CLOCK (OR OTHER IF CLOCK FUDGED?) CIA TAD TIM2 /COMPARE AGAINST PRESENT CLOCK. SNA CLA JMP UWAITC+2 /NOT CORRECT. WAIT SOME MORE. RANDAE, JMS I UJMP DEVCOM UACCPT, TAD ABDGET /IS BUFFER ASSIGNED? SZA SMA CLA CLA IAC /YEP. WE CAN ACCEPT NOW. UREJT, DCA ADACPT /OR REJECT. JMP RANDAE /AND THEN EXIT. /REAL TIME DECODING FUNCTION. UREAL, TAD ADACPT /ARE WE ACCEPTING NOW? SNA CLA JMP .+3 JMS I UJMP SKIPIT JMS I UJMS GETARY /PICK UP BUFFER ITEMS. JMS I UAC1 /GET WE FIRST WORD OF ARRAY. DCA APUT1 /SAVE AWAY NOW. TAD APUT1 /ALSO SET UP OUTPUT POINTER. DCA APUT2 JMS I UAC2 /GET LAST WORD OF ARRAY. CIA DCA ADA1 /SAVE IN UPPER LIMIT TESTER. JMS I UAC2 /GET AGAIN. IAC /ADD ONE. DCA ADA3 /AND SAVE AWAY IN BOPPER WORD. TAD ADA3 /FINALLY GET THE RESET WORD. CIA TAD APUT1 DCA ADA2 /AND SAVE AWAY FOR WRAP AROUND CONDITION. JMS UGETWD /BYPASS REAL TIME STATEMENT. JMS I UMEVAL /EVALUATE AN EXPRESSION JMS I UPFIX /FIX THE AC NOW. AND U17 /JUST GET CHANNEL NUMBER. DCA ADCX /SAVE AWAY. JMS I UMEVAL /EVALUATE ANOTHER ITEM. JMS I UPFIX /FIX IT UP. SZA /IF ZERO, DO NOT SUBTRACT ONE. TAD U7777 /SUBTRACT ONE TO BRING INTO 0-17 RANGE. AND U17 /MAKE INTO 0-17. CMA /NOW NEGATE AND SUBTRACT ONE. DCA ADCUNT /AND SAVE AWAY CORRECT ISZ COUNTER. JMS I UMEVAL /NOW GET NUMBER OF SAMPLES (CLOCK TICKS) JMS I UPFIX CLL CML CIA DCA CT3 /SET UP LOW ORDER WORD OF COUNTER. RAL /AND PRESERVE CARRY. JMS I UAC2 CLL CML CIA DCA CT2 RAL JMS I UAC1 CLL CML CIA DCA CT1 DCA ACOUNT /CLEAR PRESENT BUFFER COUNTER. CLA IAC DCA ABDGET /SET UP BUFFER. JMP I UDEVCON UTIM, 0 /RETURNS CLOCK TICK. TAD TIM1 DCA .+3 TAD TIM2 JMS I UUSETF 0 JMP I UTIM USETF, 0 DCA UTEMP /SAVE LOW ORDER WORD OF FAC. JMS I UJMS BEGFIX /PREPARE TO INTERGIZE IT. TAD I USETF /GET MIDDLE WORD. CDF 0 DCA I PPAC2 /PLACE IN FAC. TAD UTEMP /GET LOW WORD. DCA I PPAC3 /PLACE IN FAC. CDF 10 JMS I UJMS ANORM ISZ USETF /BYPASS VALUE JMP I USETF /RETURN NOW. PAGE UADCB, 0 /THIS RETURNS A VALUE FROM THE A-D. SPA CLA /BUFFERED OR DIRECT? JMP UADCN /DIRECT. TAD ABDGET /CHECK TO SEE WHETHER BUFFER ASSGINED. SNA JMP UABAD /NO BUFFER ASSIGNED. SPA CLA /IS BUFFER ACTIVE? JMP UADCMY /NO. GET COUNT. TAD ADACPT /ACTIVE. ARE WE ACCEPTING DATA? SNA CLA JMP UADCMY /NO. CHECK COUNT IN BUFFER. UADCIN, JMS I UPAGET /GET VALUE FROM A-D BUFFER. JMP UINAC /AND FIX IT UP. UADCMY, TAD ACOUNT /GET BUFFER COUNTER NOW. SZA CLA /=0? JMP UADCIN /NOPE. WE CAN RETURN SOME DATA. UABAD, JMS I UJMP UUNOAD /NO A-D DATA IN BUFFER. HE'S F--KED. UADCN, JMS I UPFIX /NON-REAL TIME. AND U17 /JUST GET CHANNEL NUMBER. IOF /WE CANNOT BE INTERUPTTED HERE. 6531 6536 JMS I UDOAD /PREFORM THE CONVERSION NOW. ION /RESTORE INTERUPTS. UINAC, DCA AUTEMP /SAVE FOR A SECOND. TAD AUTEMP /PLACE ABSOLUTE VALUE IN FAC. SPA CIA JMS I UUSETF 0 TAD AUTEMP /NOW SET SIGN OF FAC. CDF 0 /SET TO PICK UP FIELD 0. NO COOLNESS LEFT, DESPITE COMMENTS. SPA CLA /IF POSITVE LEAVE ALONE. CLA CLL CML RAR /SET LEFT MOST BIT ON TO INDICATE NEGATIVE. DCA I PPACS TAD I PPACE /GET EXPONENT NOW. TAD ADCCOR /BRING INTO CORRECT RANGE NOW. SMA /IF TOO FAR, DCA I PPACE /DON'T CORRECT. CLA CDF 10 /RESET CDF. JMP I UADCB /RETURN TO FIELD ONE (COOL ,UGH!) UPAGET, AGET UUAC1, 0 CDF 0 TAD I PPAC1 CDF 10 JMP I UUAC1 UUAC2, 0 CDF 0 TAD I PPAC2 CDF 10 JMP I UUAC2 UUAC3, 0 CDF 0 TAD I PPAC3 CDF 10 JMP I UUAC3 UUMEVAL,0 JMS I UJMS MEVAL JMP I UUMEVAL UUPFIX, 0 JMS I UJMS FIX CLA JMS I UAC3 JMP I UUPFIX UUDEVC, JMS I UJMP DEVCON UUJMS, 0 CIF 0 TAD I UUJMS DCA .+2 JMS I UUUJMS 0 SKP /IN CASE OF SKIPPING RETURN ISZ UUJMS ISZ UUJMS JMP I UUJMS UUUJMS, LLLJMS UUJMP, 0 CIF 0 TAD I UUJMP DCA .+2 JMS I UUUJMP 0 UUUJMP, LLLJMP UPCOMDO,TAD UUFUDGE TAD UPJMP DCA .+1 HLT UUFUDGE,-6040 UPJMP, JMP I .+1 UREAL USETR USETC UWAITC UWAIT 0000 /NOT USED NOW. UACCPT UREJT UPFUN, 0 TAD UFFUD TAD UFJMP DCA .+1 HLT CIF 0 JMP I UPFUN UFFUD, -21 UFJMP, JMS I .+1 ZZADC 0000 UTIM 0000 0000 UCLS UCLC ZZADB ZZADC, 0 CLA CMA JMS I .+2 JMP I ZZADC UADCB ZZADB, 0 JMS I ZZADB-1 JMP I ZZADB PAGE IFZERO MACHINE< LIMIT=TEN+3 > *7022 PERMSYM,0 XXPLUS, 4200;TEXT '+' XXMINUS,4201;TEXT '-' XXSTAR, 4302;TEXT '*' XXSLASH,4303;TEXT '/' XXUPARR,4404;TEXT '^' XXLE, 4110;TEXT '<=' XXGE, 4111;TEXT '>=' XXNE, 4112;TEXT '<>' XXEG, 4111;TEXT '=>' XXEL, 4110;TEXT '=<' XXEQ, 4105;TEXT '=' XXLT, 4106;TEXT '<' XXGT, 4107;TEXT '>' XXCOMMA,4015;TEXT ',' XXSEMI, 4016;TEXT ';' XXCLOSE,4017;TEXT ')' XXRBRAK,4017;TEXT ']' XXTO, 4021;TEXT ' TO ' XXSTEP, 4022;TEXT ' STEP ' XXOPEN, 4023;TEXT '(' XXLBRAK,4023;TEXT '[' XXFN, 4024;TEXT 'FN' XXCOS, 4025;TEXT 'COS' XXTAN, 4026;TEXT 'TAN' XXATN, 4027;TEXT 'ATN' XXLOG, 4030;TEXT 'LOG' XXEXP, 4031;TEXT 'EXP' XXSQR, 4032;TEXT 'SQR' XXABS, 4033;TEXT 'ABS' XXSGN, 4034;TEXT 'SGN' XXINT, 4035;TEXT 'INT' XXRND, 4036;TEXT 'RND' XXSIN, 4037;TEXT 'SIN' XXPUT, 4040;TEXT 'PUT' XXLIST, 4041;TEXT 'LIST' XXLIS, 4041;TEXT 'LIS' XXRUN, 4042;TEXT 'RUN' XXSCR, 4043;TEXT 'SCR' XXGET, 4044;TEXT 'GET' XXADC, 4045;TEXT 'ADC' XXTTY, 4046;TEXT 'TST' XXTIME, 4047;TEXT 'TIM' XXTAB, 4050;TEXT 'TAB' XXUUF, 4051;TEXT 'UUF' XXCLS, 4052;TEXT 'CLS' XXCLC, 4053;TEXT 'CLC' XXADB, 4054;TEXT 'ADB' XXCRLF, 6000;TEXT '_' XXBSLSH,6000;TEXT '\' XXEND, 6001;TEXT 'END' XXFOR, 6002;TEXT 'FOR ' XXGOSUB,6003;TEXT 'GOSUB ' XXGOTO, 6004;TEXT 'GO TO ' XXTHEN, 6004;TEXT ' THEN ' XXIF, 6005;TEXT 'IF ' XXINPUT,6006;TEXT 'INPUT ' XXLET, 6007;TEXT 'LET ' XXNEXT, 6010;TEXT 'NEXT ' XXPRINT,6011;TEXT 'PRINT ' XXRETRN,6012;TEXT 'RETURN' XXSTOP, 6013;TEXT 'STOP' XXDIM, 6014;TEXT 'DIM ' XXRSTOR,6015;TEXT 'RESTORE' XXREM, 6016;TEXT 'REM ' XXDEF, 6017;TEXT 'DEF ' XXREAD, 6020;TEXT 'READ ' XXDATA, 6021;TEXT 'DATA ' XXTTYI, 6024;TEXT 'TTY IN' XXTTYO, 6025;TEXT 'TTY OUT' XXLPT, 6026;TEXT 'LPT' XXPTP, 6027;TEXT 'PTP' XXPTR, 6030;TEXT 'PTR' /6031 HAS BEEN REMOVED. XXRUB, 6032;TEXT 'RUBOUTS' XXNRUB, 6033;TEXT 'NO RUBOUTS' XXCLEAR,6034;TEXT 'CLEAR' XXDELAY,6035;TEXT 'DELAY' XXUSE, 6036;TEXT 'USE ' XXPLOT, 6037;TEXT 'PLOT ' XXREAL, 6040;TEXT 'REAL TIME ' XXSETR, 6041;TEXT 'SET RATE ' XXSETC, 6042;TEXT 'SET CLOCK ' XXWAITC,6043;TEXT 'WAITC' YYWAIT, 6044;TEXT 'WAIT' XXUCOM, 6045;TEXT 'UCOM ' XXACPT, 6046;TEXT 'ACCEPT' XXREJT, 6047;TEXT 'REJECT' 0 XXTEXT, 3000 XXEOF, 6023 XXUNARY,4113 XXFINI, 4014 XXEXIT, 6022 XXLIT0, 2000;2001;2002;2003 NOPUNCH LINBUF, ZBLOCK 51 LBEGIN, ZBLOCK 60 ENDLIN, 0 PDLIST, ZBLOCK 40 ENDPDL, 0 FORLIST,ZBLOCK 20 GOLIST, ZBLOCK 30 GSBEND, 0 ENPUNCH $