File: EFOS8P.PA of Tape: Sources/Focal/s4
(Source file text)
XLIST /PSEUDO FLOATING POINT INSTRUCTIONS FIXMRI FGET=0000 FIXMRI FADD=1000 FIXMRI FSUB=2000 FIXMRI FDIV=3000 FIXMRI FMUL=4000 FIXMRI FPOW=5000 FIXMRI FPUT=6000 FNOR=7000 FINT=JMS I 7 FENT=JMS I 7 FEXT=0 FXIT=0 /PERMANENT SYMBOLS FOR PAL8-V9B /PDP8/E-SYMBOLS CAM=7621 SRQ=6003 CINT=6204 SINT=6254 CUF=6264 SUF=6274 /NEW INSTRUCTIONS RIE=6013 /S/CL ERR. INT. (READER) RCR=6015 /CLEAR READER/PUNCH ERROR RSE=6017 /SKIP ERROR READER PIE=6023 /S/CL ERR. INT. (PUNCH) PSK=6025 /SKIP ON READER OR PUNCH FLAG PSE=6027 /SKIP ERROR PUNCH /KE8-E (EAE)-SYMBOLS SWAB=7431 SWBA=7447 SKB=7671 SCA=7441 SCL=7403 MUY=7405 DVI=7407 NMI=7411 SHL=7413 ASR=7415 LSR=7417 ASC=7403 SAM=7457 DAD=7443 DLD=7663 DST=7445 DPIC=7573 DCM=7575 DPSZ=7451 FIXTAB XLIST EJECT FOS8 INTERPRETER-ETOS FIELD 1 /MISCELLANEOUS ITEMS *0 ECHO, 1 TABC, 0 /TABCOUNTER SPC, 240 /CONSTANT ATSW, 0 0 0 /FOR OD 0 T=20 /TEXT FIELD NO. P=10 /PROGRAM FIELD NO. L=00 /LIBRARY FIELD NO. V=10 /VARIABLE FIELD NO. FPNT /ADRESS OF FLOATING POINT(LOC*7) /AUTO INDEX REGISTERS AXIN, LINE4 /STORAGE INDEX(LOC*10) XRT, 0 /EXTRA XR XRT2, 0 /EXTRA XR PER, 256 /LET'S HOPE IT IS NOT INDIRECTLY ADRESSED! FLTXR, 0 /XR FOR FLOATING POINT FLTXR2, 0 /EXTRA FOR F.P. MPER, -256 /CONSTANT TEXTP=. /TEXT POINTERS(LOC*17) AXOUT, LINE4 /OUTPUT INDEX XCT, 7777 /UNPACK SWITCH;THESE 4 ARE PUSHED GTEM, 0 /UNPACK STORAGE PC, PC0 /PROGRAM COUNTER THISLN, 0 /LINE POINTER FROM 'FINDLN' THISOP, 0 /CURRENT 'EVAL' OPERATION LASTLN, 0 /BACK POINTER FROM 'FINDLN' DEBGSW, 1 /DEBUG SWITCH;NON ZERO FOR LITERAL PACKST, 0 /RUBOUT PROTECTION PT1, 0 /VARIABLE POINTER LASTV, STVAR /ADRESS OF LAST VARIABLE T1, 0 /TEMP. REGISTER - MAIN T2, 0 /TEMP FOR NEW INSTR. T3, 0 /TEMP. REGISTER FOR OUTPUT INSUB, 0 /0=GETC;#0=READC SUBS, 0 /VARIABLE SUBSCRIPT P177, 177 /STEP MASK;DON'T MOVE;AND P177=37!! *40 /FLOATING POINT EX1, 0 /OPERAND STORAGE AC1H, 0 AC1L, 0 OVER1, 0 FLAC=. /FLOATING ACCUMULATOR EXP, 0 HORD, 0 LORD, 0 OVER2, 0 SIGNF, 0 /FLOATING SIGN MINSKI, ACMINS /NEGATE FLAC SUBROUTINE FISW, 1 /OUTPUT FORMAT 1=FIXED,0=FLOAT INTEGE, FIX /FIX FLAC *54 /VARIABLES - INITIALIZED FOR THE DIALOGUE CELSO=. /ECALL PUSHES THESE FOUR POPFP, CIF CDF P /+ECALL=15 BIT POPJ EFOP, 0 /FUNCTION CODE LASTOP, 0 /LAST OPERATION FOR EVAL SORTCN, 0 /NUMBER IN TABLE FROM SORTC BUFR, LINE4 /NEXT LOC. IN BUFFER=LAST LOC. IN TEXT ADD, 4300 /CHAR. BUF. IN XCTIN, 0000 /PACK SWITCH OUTDEV, LOWOUT /POINTER TO OUT. SUB. INDEV, LOWIN /POINTER TO IN. SUB. CNTR, 0 /DELETE AND FP LIST6=. /INPUT LIST FOR "SFOUND" CVT, 213 /V.T. (^K) 207 /BELL LIST7=. 375 /ALT MODE 233 /ESCAPE 225 /^U P337, 337 /LEFT ARROW CLF, 212 /L.F. LIST3=. /EXCRETION LIST CCR, 215 /LIST BRANCHER DMPSW, HLT /(SEARCH CHAR)-VARIABLE /=0000 FOR TRACE ON P7600, 7600 /ENDS LISTS P77, 77 /DON'T MOVE;AND P77=100!!! /CONSTANTS P13, 13 /USEFUL CONSTANT C200, 200 M77, -77 /EXTEND CODE TEST P17, 17 /BCD MASK P277, 277 /"?" M2, -2 /CONSTANT ERROR2=JMS I . /FIELD 1 ERROR ADRESS ERROR /KEEP IT AT LOC. 107;SAME ADRESS IN USR;VOL!! C260, 260 /ASCII FOR ZERO M5, -5 /PAREN TEST M11, -11 /PAREN TEST P40, 40 FSIZE, 10 DECP, 4 DIGITS, 12 MFLT, -WORDS /=-4 FOR 4-WORD NAGSW, 0001 /4000=ONE;1=ALL;0=GROUP;ALSO PUSHED CHAR, 215 /THE MOST IMPORTANT REGISTER LINENO, 0000 /LINE NUMBER READ BY GETLN GINC, WORDS+2 /=6 FOR 4-WORD-CONSTANT /POINTERS ETC. PAXPNT, PDLXR /POINTER FOR RESET FLARGP, FLARG /DATA ADRESS CFRSX, FLTZER /POINTER TO ZERO DATA & DOUBLE, MULT2 /MULTIPLY FLAC BY 2 FOUTPU, FLOUTP /FLOATING OUTPUT FINPUT, FLINTP /FLOATING INPUT CFRS, LINE0 /ADRESS OF DUMMY LINE END, STVAR /FIRST LOCATION DECALL, ECALL /RECURSIVE EVAL DPART, PARTES /PAREN COMPARE ETC. ENDT, LINE1 WORDS=4 /PDL INSTRUCTIONS POPA=JMS I . /RESTORE AC XPOPA PUSHJ=JMS I . /RECURSIVE SUB. CALL XPUSHJ POPJ=JMP I . /SUB. RETURN XPOPJ PUSHA=JMS I . /SAVE AC XPUSHA PUSHF=JMS I . /SAVE GROUP OF DATA XPUSHF POPF=JMS I . /RESTORE GROUP XPOPF /NEW INSTRUCTIONS: STOCHR=JMS I . CHRSTO /STORE A CHARACTER TSTCHR=JMS I . CHRTST /SKIPS IF CHAR=ARG GETC=JMS I . /UNPACK A CHARACTER UTRA PACKC=JMS I . /PACK A CHARACTER PACBUF SORTJ=JMS I . /SORT AND BRANCH ON AC OR CHAR SORTB SORTC=JMS I . /SORT CHAR XSORTC PRINTC=JMS I . /PRINT AC OR CHAR OUT READC=JMS I . /READ DATA INTO CHAR AND PRINT IT IN PRNTLN=JMS I . /PRINT C(LINENO) XPRNT GETLN=JMS I . /UNPACK AND FORM A LINENUMBER CNUM, XGETLN FINDLN=JMS I . /SEARCH FOR A GIVEN LINE XFIND SPNOR=JMS I . /IGNORE SPACES AND LEADING ZEROS XSPNOR TESTN=JMS I . /PERIOD;OTHER;NUMBER XTESTN TSTLPR=JMS I . /SKIP IF 5.L.SORTCN.L.E.11(I.E. AN L-PAR) LPRTST TSTGRP=JMS I . /SKIP IF G(AC)=G(LINENO) GRPTST TESTC=JMS I . /TERM;NUMBER;FUNCTION;LETTER- AND IGNORE SPACES XTESTC DELETE=JMS I . /REMOVE OLD TEXT LINE XDELETE DRONEP=JMS I . XDRONE /VARIOUS NEW POINTERS ETC. DPC, PCD /PC DTHIS, THISD /THISLN DPT1, PT1D /PT1 DXRT, XRTD /(TAD I XRT) DAXIN, AXIND /(DCA I AXIN) SECRTV, STSECR /FOR SECRET VARIABLES EOL, 0 /END OF LINE SWITCH PDLSTR, MONAME-1 /START OF PDL /FOCAL'S COMMAND/INPUT DRIVER *177 START, .+1 /PROGRAM START FROM SELF (INDIRECT)(OR TO LEXIT) TAD C200 DCA PC /FOR COMMAND MODE IAC /USE ONE IN THE AC TO DCA DMPSW /INIT UNPACK AND TRACE SWITCH DCA DEBGSW /ENABLE TRACE FOR INPUT OF (?) TAD PDLSTR /SET HIGH LIMIT FOR PDL CDF T DCA I PAXPNT CDF P DCA ECHO /PRINT ONLY IF ECHO ISZ EOL /CHECK IF CR TERMINATED JMP IBAR /NO;($) TREAT LIKE ^U,_ IBAR1, TAD CNUM /ANNOUNCE PRESENCE WITH # PRINTC ISZ ECHO TAD BUFR /COMMAND INPUT BUFFER DCA AXIN /FOR UNPACKING DCA XCTIN TAD BUFR /RUBOUT PROTECTION DCA PACKST IGNOR, READC /READ COMMAND STRING SORTJ LIST7-1 INLIST-LIST7 PACKC /SAVE STRING CHARACTER JMP IGNOR INPUTX, PUSHJ /PROCESS IMMEDIATE COMMAND PROC JMS I DPC /TAD I PC SNA /END OF PROGRM? JMP I START /YES DCA PC /SAVE NEW LINE NO TAD PC /START NEW LINE IAC JMP GONE /PROCESS OTHER COMMANDS /TEXT LINE BUFFER FORMAT /#1 : POINTER OR ZERO IN LAST /#2 : LINENO /#3 - #N+1 : TEXT /#N : C.R. /LINE NUMBER FORMATION;RANGE OF ACCEPTIBLE LINE NUMBERS /=1.01 TO 31.99 XGETLN, 0 /COMPUTED LINE #'S SPNOR /IGNORE SPACES TSTCHR /'A' IS SPECIAL -"A SKP JMP TESTA PUSHJ /EVALUATE NUMBER OR EXPRESSION EVAL JMS I INTEGER /GET GROUP PART TAD P7740 /CHECK IF TOO BIG SMA CLA GZERR, ERROR2 /BAD GROUP # 206 /IG TAD LORD /GET GROUP AGAIN BSW CLL RAL DCA LINENO /SAVE IT JMS I MINSKI NOP /CDF V AFTER FENT FENT FADD I FLARGP /GET FRACTION FMUL FL100 FADD FLP5 /ROUND UP FEXT JMS I INTEGER TAD LINENO /ADD GROUP TESTA, DCA LINENO CLA CLL TAD LINENO /CHECK FOR ERROR AND P7600 SZA CLA CML TAD LINENO AND P177 SNL SZA JMP GZERR /ILLEGAL GROUP ZERO USAGE P7740, SMA SZA CLA /SMA FOR 7740 TAD P2000 /SET NAGSW;GROUP=0,LINE=4000,ALL=1 CML RAL DCA NAGSW JMP I XGETLN FL100, 0007 3100 0000 FLP5, 0000 P2000, 2000 0000 0000 IBAR, TAD CCR /ALTESC AND ^U,_ COME HERE PRINTC JMP IBAR1 /COMMAND/INPUT PROCESSOR ESRETN, TAD CCR STOCHR /ESCAPE CONVERTED TO CR CLA CMA IRETN, CMA DCA EOL /EOL REMEMBERS WHICH PACKC /START TO PACK C.R. PACKC /FINISH C.R. TAD BUFR /INITIALIZE FOR UNPACKING GONE, DCA AXOUT /SETUP CURRENT LINE DCA XCT GETC /READ FIRST CHARACTER TAD P7740 TAD PDLSTR /SET LOW LIMIT FOR PDL CDF T DCA I PAXPNT CDF P SPNOR /IGNOR LEADING BLANKC TESTN /DOES THE LINE BEGIN WITH 1-9? JMP GZERR /PERIOD =ILLEGAL GROUP ZERO USAGE JMP INPUTX /NO ISZ DEBGSW /YES, DISABLE TRACE FOR REPACKING GETLN /READ THIS LINE NUMBER CLA CLL CML RAR /TEST FOR SINGLE LINE TAD NAGSW SZA CLA ERROR2 /ILLEGAL LINE NUMBER ON INPUT 213 /IL TAD BUFR /SET POINTERS DCA AXIN DCA XCTIN TAD LINENO /SAVE LINE # JMS I DAXIN /DCA I AXIN SPNOR /IGNORE SPACES AFTER LINE NUMBER SKP GETC /READ 1ST AFTER LINENO TERMINATOR SRETN, PACKC /SAVE TEXT AND RESTORE DATA FIELD TSTCHR /TEST FOR END OF INPUT STRING -215 /-C.R. JMP .-4 DELETE /REMOVE OLD LINE, IF ANY CDF T /TERMINATE THE BUFFER LINE:OLD "ENDLN" TAD I LASTLN DCA I BUFR TAD BUFR /POINT TO NEW NEXT LINE DCA I LASTLN TAD ADD /CHECK FOR EXTRA INFO. SZA DCA I AXIN TAD AXIN /COMPUTE NEW END OF BUFFER IAC DCA BUFR GOKILL, CDF L DCA I LIBN /WE'VE CHANGED SOMETHING CDF P START1, JMP I START /POINTERS MUST BE REINITIALIZED LIBN, LIBFIL /PUSHDOWN LIST SATELLITES FLD1=CLA CLL IAC XPOPA, 0 MQL FLD1 CIF T JMS I .+1 ZPOPA XPUSHA, 0 MQL FLD1 CIF T JMS I .+1 ZPUSHA XPUSHF, 0 MQL FLD1 CIF T JMS I .+1 ZPUSHF XPOPF, 0 MQL FLD1 CIF T JMS I .+1 ZPOPF XPOPJ, CIF CDF T JMP I .+1 ZPOPJ /RECURSIVE OPERATE, EXECUTE, OR CALL DO, GETLN /EXECUTE ONE LUNE, A GROUP, OR ALL PUSHF /SAVE REST OF THIS LINE TEXTP /AXOUT,XCT,GTEM,PC DGRP, PUSHF /SAVE NAGSW; CHAR; AND LINENO NAGSW TAD NAGSW /CHECK DATA FROM GETLN SPA CLA /SKIP IF GROUP OR ALL JMP DOONE /DO ONE LINE FINDLN /INIT FOR GROUP AND SET THISLN INDOL, "$ TAD THISLN /TEST FOR GOOD GROUP NUMBER DCA XRT JMS I DXRT /TAD I XRT TSTGRP ERROR2 /NO SUCH GROUP NUMBER 66 /DG DGRP1, PUSHJ /EXECUTE OBJECT LINE AND SET PC PROCESS-2 POPF /RESTORE THE DATA NAGSW JMS I DPC /CHECK FOR END OF TEXT SNA JMP DCONT /ALL DONE IAC DCA PT1 /SAVE POINTER TO LINENO TAD NAGSW /CHECK FOR GROUP SMA SZA CLA JMP .+4 /DO ALL JMS I DPT1 /TEST GROUP TSTGRP /AGAINST LINENO JMP DCONT /NOT IN GROUP JMS I DPT1 /READ NEXT LINE NO DCA LINENO JMP DGRP /CONTINUE THE SUBROUTINE DOONE, FINDLN /FIND THE LINE ERROR2 /NO SUCH LINE NUMBER 73 /DL PUSHJ /EXECUTE IT PROCESS-2 /AND SET PC POPF /RESTORE CHAR NAGSW DCONT, POPF /RESTORE TEXT POINTERS TEXTP JMP I .+1 /CONTINUE PROCESSING THIS LINE PROC IN, 0 /READ IN A CHARACTER SUBROUTINE."READC" DCA INCOMP /IF AC # 0 THEN KEEP CHAR TO COMPARE CIF CDF L JMS I INDEV STOCHR TAD CHAR CIA /NOW COMPARE TAD INCOMP SNA CLA POPJ /FOUND IT;EXIT FROM 'FIND' DCA ECHO SORTJ ECHOLST-1 /LF. OR RUB.:IGNORE ECHOGO-ECHOLST /ALT.ESC.:CHANGE PRINTC INEX, ISZ ECHO JMP I IN FIND, JMS I INTEGE /GET VALUE OF SEARCH CHAR. READC /PASS IT ON TO 'IN' TAD INCOMP JMP .-2 /LOOP;'IN' WILL GIVE 'POPJ' INCOMP, 0 INALT, TAD INDOL JMP INEX-1 CHRTST, 0 /TEST CHAR SUB; "TSTCHR" TAD I CHRTST /GET ARG ISZ CHRTST /BUMP PAST ARG TAD CHAR SNA CLA ISZ CHRTST /SKIP IF EQUAL JMP I CHRTST TERMER, SPNOR /GOES TO TERMINATOR TAD CHAR /SAVE TEMP. DCA ATSW /FASTER THAN PUSHA SORTC GLIST-1 POPJ /FIRST CHAR IN MQ GETC TAD ATSW MQL /MQ NOT USED BY SORTC AND POPJ JMP TERMER+3 FLIST2, FLIMIT /,=STANDARD FINFIN /;=SHORT FLIMIT-2 /CR=DUMB FLIST1, FINCR /,=STANDARD FORMAT PROCESS /;=SET;PLUS,.. PC1 /C.R.=SET COMMAND /PRIMARY CONTROL AND TRANSFER GOTO, GETLN /READ THE LINE NUMBER REQUESTE FINDLN /LOCATE IT AND RESET TEXTP ERROR2 /NOT THERE 156 /GO TAD THISLN /SET PC;DON'T MOVE ;REF. "DO" DCA PC PROCESS,GETC /TEST FOR END OF LINE PROC, TSTCHR /FIRST CHARACTER READY = USE PROC -215 /C.R. SKP PC1, POPJ /EXIT "PROCESS" SORTC /IGNORE "SPACE",",", AND ";" GLIST-1 JMP PROCESS PUSHJ /GO TO TERMINATOR TERMER MQA SORTJ /GO DO COMMAND COMLST-1 COMGO-COMLST ERROR2 /ILLEGAL COMMAND 202 /IC COMMENTS=PC1 /ALSO IS CONTINUE /OUTPUT COMMAND TEXT WRITE, GETLN /SET LINENO ISZ DEBGSW /DISABLE TRACE FINDLN /SEARCG FOR LINE NUMBER JMP WTESTG /NOT THERE OR GROUP TAD LINENO SZA CLA PRNTLN /PRINT LINE NUMBER AND A SPACE GETC PRINTC /PRINT TEXT OF A LINE TSTCHR -215 /C.R. JMP .-4 JMS I DTHIS /TEST FOR END OF TEXT WTEST2, SNA JMP WX-2 /EXIT;DO NEXT INDIRECT LINE IAC DCA PT1 /SAVE POINTER TO LINENO OF NEXT TAD NAGSW SMA CLA JMS I DPT1 TSTGRP /TRY NEXT LINENO FOR GROUP JMP WX WALL, JMS I DPT1 /SET LINENO DCA LINENO JMP WRITE+2 WTESTG, TAD THISLN /INIT GROUP PRINTOUT JMP WTEST2 DCA DEBGSW POPJ WX, TAD NAGSW SPA SNA CLA /SKIP IF ALL JMP WX-2 PRINTC /PRINT C.R. AGAIN JMP WALL XTESTC, 0 /TEST THE NATURE OF THE NEXT ALPHANUMERIC - "TESTC" SPNOR /IGNORE SPACES SORTC /TEST THE VARIABLE TERMINATORS TERMS-1 JMP I XTESTC /YES - SORTCN IS SET ISZ XTESTC /NO TESTN JMP I XTESTC /. SKP /OTHER JMP I XTESTC /NUMBER TSTCHR -"F /SKIP IF 'F' ISZ XTESTC ISZ XTESTC /RETURNS:T;N;F;A JMP I XTESTC XSORTC, 0 /SORT CHAR OR AC AGAINST TABLE - "SORIC" SNA /AC? TAD CHAR /NO.TAKE CHAR DCA T2 /STORE IN TEMP TAD I XSORTC DCA XRT2 /1ST ARG IS LIST-1 TAD I XRT2 SPA /LIST IS ENDED BY A NEGATIVE NUMBER JMP SEXC /2AND EXIT = NOT IN LIST CIA TAD T2 SZA CLA /COMPARE JMP .-6 TAD I XSORTC /COMPUTE INCREMENT : 0 - N CMA TAD XRT2 DCA SORTCN SKP /1ST EXIT = YES SEXC, ISZ XSORTC ISZ XSORTC CLA JMP I XSORTC GRPTST, 0 /AC VS LINENO - "TSTGRP" AND P7600 CIA DCA T2 TAD LINENO AND P7600 TAD T2 SNA CLA ISZ GRPTST JMP I GRPTST /INPUT FROM TEXT OR KEYBOARD; /IF BACK-ARROW, RESTART INPUT INPUT, 0 /INPUT A CHARACTER TAD INSUB /NON/ZERO FOR KEYBOARD SZA CLA JMP .+3 GETC JMP I INPUT READC SORTJ SPECIAL-1 INFIX-SPECIAL JMP I INPUT COMLST=. /COMMAND DECODING LIST "S /SET "F /FOR "I /IF "B /BRANCH "D /DO "G /GOTO "C /COMMENT "A /ASK "T /TYPE "L /LIBRARY "E /ERASE "W /WRITE "M /MODIFY "Q /QUIT "R /RETURN "O /OPEN "X /EXTRA /THIS COMMAND LIST IS SPEED OPTIMIZED;"FOR" ENDS IT /LOOP CONTROL STATEMENT SET=. /SUBSET OF "FOR" FOR, PUSHJ /LOOPS, ETC. GETARG /LOOK FOR "=" NEXT SPNOR TSTCHR -"= ERROR2 /LEFT OF "=" IN ERROR:'FOR' OR 'SET' 324 /NE JMS SAVNAM /SAVE NAME OF VARIABLE PUSHJ EVAL-1 /GET INITIAL VALUE EXPRESSION JMS GETNAM /ALL THIS FOR ZEROED VARS NOP /EVENTUALLY FCDF V FINT /INITIALIZE NOW FGET I FLARGP /FLAC GETS KILLED BY GETNAM FPUT I PT1 FXIT SORTJ /TEST LAST CHAR FROM "EVAL" TLIST-1 FLIST1-TLIST ERROR2 /EXCESS R-PAR 117 /EP FINCR, JMS SAVNAM /SAVE VARIABLE NAME PUSHJ /EVALUATE THE INCREMENT,IF ANY EVAL-1 SORTJ /TEST TERMINATORS TLIST-1 FLIST2-TLIST ERROR2 /ILLEGAL TERMINATOR IN 'FOR' 122 /FC=FOR COMMAND FLIMIT, CDF V PUSHF /SAVE THE INCREMENT FLARG PUSHJ /GET THE LIMIT(NO ERROR DETECTION AFTER LIMIT) EVAL-1 FCONT, CDF V PUSHF /SAVE THE LIMIT FLARG PUSHF /SAVE TEXT OF OBJECT STATEMENTS TEXTP PUSHJ /DO THE OBJECT STATEMENTS PROCESS POPF /RESTORE REMAINING TEXT TEXTP CDF V POPF /GET LIMIT FLARG POPF /GET INCREMENT ITER1 JMS GETNAM /GET VARIABLE NAME NOP NOP /FCDF V;IN AFTER FGET FINT /INCREMENT AND TEST FGET I FINKP /LOAD INCREMENT FADD I PT1 /ADD VARIABLE FPUT I PT1 /CHANGE IT FSUB I FLARGP /TEST IT FMUL I FINKP /ABSOLUTE FOR TEST FXIT TAD HORD SMA SZA CLA POPJ /END OF LOOP JMS SAVNAM /SAVE NAME PUSHF /SAVE INCREMENT AGAIN FINKP, ITER1 JMP FCONT FINFIN, PUSHF /SET INCREMENT TO ONE FLTONE JMP FCONT SAVNAM, 0 /LOCAL SUB TO SAVE NAME AND SUBSCRIPT IN PDL TAD SUBS PUSHA TAD EFOP PUSHA JMP I SAVNAM GETNAM, 0 /IDEM FOR GETTING POPA DCA EFOP POPA PUSHJ /PASSES AC GS1 /SETS PT1 JMP I GETNAM SORTB, 0 /SORT AND BRANCH ROUTINE. - "SORTJ" SNA TAD CHAR /ASSUME CHAR IF AC=0 CIA DCA T2 /SAVE SORT ITEM TAD I SORTB /FIRST ARG IS LIST LESS ONE ISZ SORTB /2AND IS INTRA-LIST LENGTH DCA XRT2 TAD I XRT2 SPA /**LISTS ENDED BY NEGATIVE NUMBER** JMP SEX /READ EXIT TAD T2 /FIND ADRESS SZA CLA JMP .-5 TAD XRT2 /MATCH FOUND TAD I SORTB DCA T2 TAD I T2 DCA SORTB JMP SEX+1 SEX, ISZ SORTB /MATCH NOT FOUND CLA CLL RDF TAD .+4 DCA .+1 HLT JMP I SORTB /RETURN TO CALLING SEQUENCE CIF CDF 0 COMGO=. /COMMAND ROUTINE ADRESSES SET FOR IF BR DO GOTO COMMENT ASK TYPE LIB ERASE WRITE MODIFY START1 /RETURN TO COMMAND MODE VIA 'QUIT' RETRN FILER /OPEN ERCALL /INPUT OUTPUT STATEMENTS ASK, CLA CMA /REMEMBER WHICH CALL TYPE, DCA ATSW TASK, DCA DEBGSW /RE-ENABLE THE TRACE SORTJ /SPECIAL CHARACTER? ALIST-1 ATLIST-ALIST TAD ATSW /TEST QUOTE SWITCH SMA CLA JMP TYPE2 PUSHJ /DO ASK; SETUP PT1 GETARG TAD CHAR /SAVE IN LINE CHARACTER PUSHA DCA ECHO /ONLY IF ECHO TAD DIDO /RING-A-DING-DONG PRINTC ISZ ECHO ISZ INSUB /INDICATE 'READC' IAC /POINT PAST CHAR JMS I FINPUT /READ DATA AND SAVE JMP ENDASK TYPE2, PUSHJ /DO TYPE EVAL TAD CHAR PUSHA /SAVE FOR RETEST ENDESC, JMS I FOUTPUT /PRINT IAC DCA ECHO ENDASK, POPA /RETEST LAST TERMINATOR STOCHR JMP TASK /CONTINUE PROCESSING ESC, DCA ECHO /ONLY IF ECHO FINT FGET I PT1 FEXT JMP ENDESC /ECHO CURRENT VALUE OF LITERAL DIDO, 240 /SPACE;WILL BE SET BY CD TQUOT, ISZ DEBGSW /DISABLE TRACE GETC /TYPE LITERALS SORTJ TLIST2-1 TLIST3-TLIST2 PRINTC JMP TQUOT+1 TINTR, TAD SPC DCA I LEADCH /RESET CHARS. TAD SPCMZE DCA I DFILL GETC /PASS PERCENT SIGN TESTC JMP FILL /SHOULD BE '*' JMP FORMAT /NUMBER;NORMAL FORMAT STRMSP, "*-240 /FALLS THRU TAD CHAR /OTHER;SET LEADING CHAR DCA I LEADCH JMP TINTR+4 /LOOP FILL, TSTCHR -"* JMP FORMFL /TERM., SET FLOAT FORMAT TAD STRMSP /SET "*" JMP TINTR+2 /GET NEXT CHAR SPCMZE, 240-"0 LEADCH, LEDCHR DFILL, FILLER FORMAT, CLA IAC /FIXED POINT FORMFL, DCA FISW /FLOATING GETLN TAD LINENO AND P7600 BSW CLL RAR SNA TAD DIGITS /FLOATING DCA FSIZE TAD LINENO AND P17 DCA DECP TAD FSIZE CIA TAD DECP SMA CLA FORMER, ERROR2 /FORMAT ERROR 136 /FO JMP TASK TCRLF, IAC /"!":CR,LF TFOFED, IAC /"&":FOFED TRESET, IAC /"#": RESET PAGE COMMAND TLFEED, TAD CLF /"'":LINE-FEED PRINTC TASK4, GETC /MOVE TO NEXT CHAR JMP TASK XTAB, PUSHJ EVAL-1 JMS I INTEGE SPA SNA CLA IAC /OVER LEFT MARGIN DCA LORD /AND ALLOW FOR 'T :,' FORW, TAD TABC /'T :1,' IS FIRST POSITION CMA CLL TAD LORD SNA JMP TASK /NO MOVEMENT SMA /NEGATIVE IF BACKUP CLL CML CIA /FORWARDS; SET LINK DCA CNTR SZL /FOR TERMINAL WITH BS JMP P216+1 / JMP .+2 TAD P216 / TAD M30 PRINTC / TAD SPC JMP FORW / DCA T3 P216, 216 /M30, -30 TAD SPC / TAD T3 PRINTC ISZ CNTR JMP .-3 CMA TAD LORD DCA TABC JMP TASK ALIST=. /ASK/TYPE LIST OF CONTROLS "' "& "# ": "% "" "! "$ GLIST=. 240 /SPACE TLIST=. ", "; 215 /C.R. /FIND OR ENTER A VARIABLE IN THE LIST GETARG, TESTC /FIRST LETTER OF ARG TLIST2, 0242 /" 0215 /C.R. - FUNCTION OR NUMBER IS NOT AN ARG. ERROR2 /BAD ARGUMENT IN 'FOR','SET',OR 'ASK' 20 /BA GETVAR, DCA XCTIN /PACK INTO ADD. PACKC /PACK FIRST CHAR TAD ADD /SAVE NAME DCA EFOP /WHERE WE CAN PUSH IT GETLP, GETC /GET NEXT CHAR SORTC /END OF NAME? TERMS-1 JMP GSERCH /YES ISZ XCTIN /IS THIS THE SECOND CHAR? JMP GETLP /MORE THAN 2 CHARS;IGNORE TAD CHAR /PACK SECOND CHAR AND P77 /MASK IT JMP GETLP-2 /ADD TO NAME GSERCH, TSTLPR /CHECK FOR SUBSCRIPT JMP GS1 /NONE JMS I DECALL /PICK IT UP POPA /RESTORE NAME DCA EFOP JMS I DPART /CHECK PAREN MATCH,ETC. JMS I INTEGE /CONVERT TO 12 BIT GS1, DCA SUBS /SAVE SUBSCRIPT MQL /CLEAR LAST ZERO HOLD TAD SECRTV /START SEARCH WITH SECRET JMP GSTRT /GO IN LOOP GS2, ISZ XRT /NAME DID NOT MATCH GS3, ISZ XRT /SUBSCRIPT DID NOT MATCH TAD I XRT /GETS HORD OF VAR. SZA CLA /IS VAR. ZERO? JMP .+3 /NO.MUST BE REAL TAD PT1 /YES!LET'S STORE ADRESSES MQL /AS WE GO ALONG TAD PT1 TAD GINC /NEXT /VARIABLES GET ADDED IN THE FOLLOWING WAY: /IF ANY ZERO'S AVAILABLE:FROM LASTV DOWNWARDS;BUT NOT SECRET /IF NO ZERO'S FROM LASTV UPWARDS;THEN BLOW-UP GSTRT, DCA PT1 /FIRST OR NEXT POINTER TAD LASTV /CHECK FOR END OF CIA CLL /EXISTING VARS. TAD PT1 SZL CLA JMP MAKVAR /VAR. NOT IN LIST;CREATE NEW ONE TAD PT1 /REPLICATE SO PT1 STAYS DCA XRT /AT START OF VAR. CDF V /VARIABLE FIELD TAD I PT1 /NAME CIA TAD EFOP /ASKED NAME SZA CLA /CHECK? JMP GS2 /NO TAD I XRT /OK.WHAT ABOUT SUBS.? CIA TAD SUBS SZA CLA JMP GS3 /ALMOST! ISZ PT1 /FOUND IT!! ISZ PT1 /POINT TO DATA POPJ MAKVAR, MQA /GET OUT LAST ZERO ADRESS SNA /ANY ZERO'S? JMP TOPVAR /NO.PUT IT ON TOP CIA /CHECK FOR SECRET VARS. TAD END /STVAR SNL SZA CLA JMP TOPVAR /IT WAS SECRET;ON TOP MQA /OK.USE ZERO VAR. DCA PT1 /RESET PT1 JMP VAREX TOPVAR, TAD VARTOP /CHECK FOR TOP CIA CLL TAD LASTV SZL CLA ERROR2 /REALLY NO MORE SPACE! 265 /LF=LITERALS FULL TAD LASTV /OK;UPDATE LASTV TAD GINC DCA LASTV VAREX, TAD EFOP /NOW STORE IN RIGHT PLACE DCA I PT1 ISZ PT1 TAD SUBS DCA I PT1 ISZ PT1 /POINTING AT DATA CDF P /CAREFUL FPNT! NOP /FOR FCDF V FINT FGET I CFRSX /ZERO THE DATA FPUT I PT1 FXIT POPJ /EXIT VARTOP, STARTF-10 CHRSTO, 0 /STORE A CHAR IN FLD 0 AND 1 - "STOCHR" DCA CHAR TAD CHAR CDF L DCA I XCHAR CDF P JMP I CHRSTO XCHAR, CHARL INLIST=. /INPUT CONTROL CHARACTERS ESRETN /ALTM = TERMINATE,ECHO $ ESRETN /ESCAPE = "" "" IBAR /^U = RESTART IBAR /B.A. = RESTART IGNOR /L.F. = IGNORE IRETN /C.R. = TERMINATE STRING ATLIST=. TLFEED /' - LINE FEED TFOFED /& - FORM FEED TRESET /# - RESET PAGE XTAB /: - TABULATOR TINTR /% - FORMAT DELIMITER TQUOT /" - LITERAL DELIMITER TCRLF /! - CARRIAGE RETURN AND LINE FEED TDUMP /DOLLAR/- DUMP THE SYMBOL TABLE CONTENTS TASK4 /SP- TERMINATOR FOR NAMES TASK4 /, - TERMINATOR FOR EXPRESSIONS PROCESS /; - TERMINATOR FOR COMMANDS PC1 /C.R.TERMINATOR FOR STRINGS /DOLLAR/ - FOR TDUMP TERMINATES THE COMMAND PAGE /EVALUATE AN EXPRESSION WHICH /TERMINATES WITH AN R-PAR, ; OR C.R. AND /LEAVE THE RESULT IN FLAC AND IN FLARG ECALL, 0 /RECURSIVE CALL TO "EVAL" PUSHF /SAVE SORTCN,LASTOP,EFOP CELSO /INCLUDES 'CIF CDF P' FOR POPJ TAD ECALL /RETURN TO CALLING PUSHA /ADRESS AFTER NEXT POPJ GETC /MOVE PAST EXTRA CHAR EVAL, DCA LASTOP /EVALUATION CONTROLLER(CHECKPOINT?) DRONEP /FOR ETOS TESTC /TEST CHAR AND IGNORE SPACES JMP ETERM1 /TERMINATOR JMP ENUM /NUMBER JMP EFUN /FUNCTION PUSHJ /LETTER OF VARIABLE GETVAR /FIND OR CREATE VARIABLE;ALSO SET PT1 OPNEXT, TESTC /PT1 TO ARG JMP ETERMN /T NOP /N-ERROR IN FORMAT NOP /F JMP ETERM+1 /'EVAL'FOUND A TERMINATOR WHICH WAS NOT AN OP. ETERM1, TAD CFRSX /SET PT1 DCA PT1 /TO POINT TO ZERO TAD M2 /TEST FOR UNARY OPERATIONS TAD SORTCN SNA JMP ETERM /CREATE DUMMY FOR UNARY MINUS IAC SNA CLA JMP ARGNXT /IGNORE UNARY PLUS TAD SORTCN /TEST FOR NULL PARENS TAD M11 SPA CLA JMP ELPAR /MIGHT BE AN L-PAR ETERMN, TSTLPR SKP ERROR2 /OPERATOR MISSING BEFORE PAREN 336 /NO=NO OPERATOR ETERM, TAD SORTCN /SET FROM "TESTC"-"SORTC" DCA THISOP TAD THISOP TAD M11 SMA CLA /END? DCA THISOP ETERM2, TAD THISOP /COMPARE PRIORITIES CIA TAD LASTOP SPA CLA JMP EPAR /CONTINUE TAD LASTOP /FIND OPERATION CLL RTR RTR TAD OPTABL DCA FLOP TAD LASTOP SZA CLA /TEST FOR END OF DATA INTO FLOATING AC POPF /GET LAST DATA FLAC NOP /LATER FCDF V FINT FLOP, 00 /(FLOPR I PT1)+-*/ FPUT I FLARGP /SAVE RESULT FXIT TAD FLARGP DCA PT1 TAD THISOP TAD LASTOP /=0? SNA CLA JMP EVLEX /EXIT EVAL POPA /GET PRIOR OP DCA LASTOP JMP ETERM2 /COMPARE THIS OP EVLEX, TAD SORTCN DCA I ULTSOR /SAVE LAST "SORTCN" POPJ EPAR, TSTLPR /TEST FOR SUB-EXPRESSION SKP JMP EPAR2 /GO EVALUATE EXPRESSION TAD LASTOP /CONTINUE READING THE EXPRESSION PUSHA /SAVE "LASTOP" TAD PT1 DCA .+3 CDF V PUSHF /SAVE LAST ARGUMENT 00 TAD THISOP /MORE TO COME DCA LASTOP ARGNXT, GETC /READ FIRST CHAR OF AN ARG. TESTC /DO SPECIAL CHECK JMP ELPAR JMP ENUM /N JMP EFUN /F JMP OPNEXT-2 /L OPTABL, FGET I PT1 /BASE FOR OPERATION COMPUTATION ENUM, PUSHF /TO PROCESS ANUMBER,SAVE AC FLAC TAD FLARGP /SET POINTER AS FOR A VARIABLE DCA PT1 DCA INSUB /POINT TO 'GETC' AND USE CHAR JMS I FINPUT /READ TEXT NUMBER INTO FLARG POPF /RESTORE THE AC FLAC JMP OPNEXT /CONTINUE EFUN, DCA EFOP /SET CODE GETC /READ FUNCTION NAME(1,2,3 LETTERS) SORTC /LOOK FOR TERMINATION CHAR TERMS-1 JMP EFUN2 /YES TAD EFOP /NO CLL RAL /MISH-MASH HASH CODE TAD CHAR JMP EFUN EFUN2, TSTLPR ERROR2 /MUST BE FOLLOWED BY PARENS TO SET ARGUMENT 25 /BF=BAD FUNCTION JMS ECALL /CALL "EVAL" TO COMPUTE ARGUMENT POPA /GET OUT EFOP SORTC FNTABL-1 JMP I STFUNC /FOUND IT ELPAR, TSTLPR /LEFT PAREN OR FELL THROUGH FUNCTION TABLE ERROR2 /DOUBLE OPERATORS OR ILLEGAL FUNCTION NAME 124 /FE=FUNCTION ERROR EPAR2, JMS ECALL /EVALUATE NESTED EXPRESSION POPA /DUMP EXTRA ARG JMP I EFUN3I STFUNC, FUNCST EFUN3I, EFUN3 ULTSOR, SORTUL TERMS=. /TERMINATOR TABLE FOR 'EVAL' AND 'GETARG' 240 /0 SPACE "+ /1 "- /2 "/ /3 "* /4 "^ /5 "( /6 "[ /7 274 /10 (LEFT ANGLE BRACKET) ") /11 "] /12 276 /13(RIGHT ANGLE BRACKET) ", /14 "; /15 215 /16 C.R. "= /17 TO END GETARG FROM 'SET' FNTAPT, FNTABF-1 /POINTER TO 2-WORD FNTABF FUNCST, TAD SORTCN /SET BY SORTC CLL RAL /*2 TAD FNTAPT DCA XRT2 TAD I XRT2 /GET FIELD OF FUNCTION DCA .+3 TAD I XRT2 /GET ADRESS DCA .+3 HLT PUSHJ HLT /POPJ COMES BACK .+1 EFUN3, NOP /FOR FCDF FINT FNOR /NORMALIZE FUNCTION RETURN FPUT I FLARGP /SAVE FUNCTION VALUE FXIT TAD FLARGP /SET POINTER DCA PT1 JMS PARTEST JMP I .+1 OPNEXT SORTUL, 0 P3, 3 LPRTST, 0 /SKIP IF LEFT PAREN. - 'TSTLPR' TAD SORTCN TAD M11 SMA CLA JMP I LPRTST TAD SORTCN TAD M5 SMA SZA CLA ISZ LPRTST JMP I LPRTST PARTES, 0 /TEST THE PAREN MATCHINGS POPA /RESTORE THE LAST OPERATION DCA LASTOP POPA TAD P3 /+3 TO COMPARE CODES CIA /CHECK FOR PAREN MATCH TAD SORTUL /(STILL SET FROM THE LAST 'EVAL') SZA CLA /SKIP IF MATCH ERROR2 /PAREN ERROR 317 /MP=MISSING PARENTHESIS GETC /MOVE PAST R-PAR JMP I PARTEST /THE DELETE ALINE ROUTINE XDELET, 0 /UNCHAIN A LINE AND RECOVER THE SPACE NOP/IOF /PROTECT POINTER CHANGES FROM INTERRUPTIONS FINDLN /SETS "THISLN" AND "LASTLN" JMP I XDELETE /ALREADY GONE ISZ DEBGSW /DISABLE TRACE GETC /MEASURE LENGTH TSTCHR -215 /C.R. JMP .-3 TAD AXOUT /SAVE LAST ADRESS CMA TAD THISLN DCA CNTR /LENGTH .L. 0 TAD CFRS /IT IS ILLEGAL TO DELETE THE FIRST LINE CIA TAD THISLN SNA CLA JMP I START /JUST IGNORE SUCH COMMANDS CDF T /CHANGE DATA FIELD TO TEXT TAD I THISLN /DISCONNECT DCA I LASTLN TAD CFRS /START LIST AT TOP DOK, DCA T2 /EXAMINATION ADRESS TAD I T2 SNA /TEST FOR END JMP DONE /YES-WRAP UP ALL DCA T1 /SAVE NEXT ADRESS TAD THISLN /COMPARE LINE POSITIONS CIA CLL TAD T1 SZL CLA /SKIP IF THISLN .G. X TAD CNTR /CHANGE (X) TO ACCOUNT FOR TAD T1 /GARBAGE COLLECTION DCA I T2 TAD T1 /GET NEXT JMP DOK /GARBAGE COLLECTION DONE, CMA /BACKUP L FOR XR TAD THISLN DCA XRT TAD CNTR /CORRECT END OF BUFFER POINTER TAD BUFR DCA BUFR TAD AXIN /COMPUTE COUNT CMA TAD AXOUT DCA T1 TAD AXIN TAD CNTR DCA AXIN TAD I AXOUT DCA I XRT ISZ T1 JMP .-3 JMP XDELETE+1 /RESET 'LASTLN','THISLN', AND DATA FIELD RETRN, TAD C200 DCA PC POPJ SRNLST=. /'MODIFY' CONTROL CHARACTER TABLE SCHAR /V.T. = CONTINUE SCONT /BELL = CHANGE SEARCH CHAR ESRETN /ALTM = END LINE ESRETN /ESC = END LINE SBAR /^U = RESTART SBAR /B.A. = RESTART SCONT+2 /L.F. = FINISH THE LINE AS BEFORE LISTGO=. IRETN /C.R. = END THE LINE HERE AS IT IS SGOT /CHAR = SEARCH CHAR SPECIAL=. /INPUT CHARS 225 /CNTRL. U 337 /LEFT ARROW ECHOLS, 377 /RUBOUT 212 /LINE FEED 375 /ALT MODE 233 /ESCAPE MGETC, GETC POPJ /ERASE SINGLE LINES, GROUPS, OR VARIABLES ERASE, TESTC /TEST THE SECOND WORD IF ANY JMP ERVX /ERASE THE VARIABLES JMP ERL /LINES OR GROUPS JMP .+3 /ERROR TSTCHR /ALL TEXT -"A ERROR2 /BAD ARG FOR ERASE 24 /BE=BAD ERASE ERT, TAD ENDT /ERASE ALL TEXT DCA BUFR CDF T DCA I CFRS JMP I GOK /RESTART ERL, GETLN /ERASE LINES TAD BUFR /PROTECT REST OF TEXT DCA AXIN ERG, DELETE /EXTRACT ONE LINE ISZ THISLN TAD NAGSW SMA CLA JMS I DTHIS /(TAD I THISLN) TSTGRP /DONE ERASING GROUP?(SKIP) JMP I GOK /YES,ERASE 'CURRENT PROGRAM SAVED' FLAG JMS I DTHIS /(TAD I THISLN) DCA LINENO JMP ERG ERVX, TAD END /ZERO VARIABLES(BUT NOT SECRET VARIABLES) DCA LASTV /MAY BE INDIRECT COMMAND POPJ GOK, GOKILL /ROUTINE CALLED VIA "FINDLN": /SEARCH FOR A GIVEN LINE I.D. =[ "LINENO"] /1ST RETURN IF NOT FOUND, /2AND IF FOUND. /"THISLN" = FOUND LINE OR NEXT LARGER /"LASTLN" = LESSER AND/OR LAST /"TEXTP" IS SET XFIND, 0 TAD CFRS /INITIALIZE POINTERS TO FIRST LINE DCA LASTLN TAD CFRS FINDN, DCA THISLN /SAVE THIS ONE TAD THISLN DCA XRT TAD LINENO CLL CMA IAC /CLEAR LINK AND NEGATE LINENO JMS I DXRT /LINENO=0 WILL BE FOUND (X-MEM) SNA JMP FEND3-1 /FOUND IT SZL CLA JMP FEND3 /PASSED IT TAD THISLN /MOVE POINTERS DCA LASTLN JMS I DTHIS /END OF TEXT ? (X-MEM) SZA JMP FINDN /NOT YET SKP ISZ XFIND /2ND EXIT = FOUND FEND3, TAD THISLN /1ST RETURN = NOT FOUND IAC DCA AXOUT /SET "TEXTP" DCA XCT JMP I XFIND UTRA, 0 /UNPACK CHARACTER. - "GETC" JMS GET1 UTE, SPA CLA /NORM & EXTEND TAD GEND /300-337 & 340-376 TAD M137 /240-276 & 200-236 TAD CHAR SNA JMP UTX /"?" FOUND TAD P337 UTQ, STOCHR TAD DEBGSW TAD DMPSW SNA CLA /PRINT ONLY IF BOTH ARE ZERO PRINTC JMP I UTRA EXTR, JMS GET1 CMA JMP UTE UTX, TAD DEBGSW /TEST FOR TRACE-ENABLED M40, SMA SZA CLA /DEBGSW NEVER NEGATIVE JMP .+6 TAD DMPSW /FLIP THE TRACE FLOP SNA CLA IAC DCA DMPSW JMP UTRA+1 /GET NEXT CHARACTER INSTEAD TAD P277 /TRACE DISABLED = RETURN "?" JMP UTQ GET1, 0 /UNPACK 6 BITS ISZ XCT /STARTS=0 JMP GET3 TAD GTEM GEND, AND P77 SNA TAD P40 /CONVERT TO SPACE DCA CHAR /SAVE TAD CHAR TAD M77 SNA CLA JMP EXTR /EXTENDED TAD CHAR TAD M40 JMP I GET1 GET3, CDF T TAD I AXOUT CDF P DCA GTEM CMA DCA XCT TAD GTEM BSW JMP GEND M137, -137 /IF DEBGSW=0 : ENABLE FLIP-FLOP "DMPSW" / #0:DISABLE AND RETURN ALL"?" 'S /IF DMPSW = 0: TRACE ON, IF ENABLED / #0: TRACE OFF /IF BOTH = 0 : PRINT TRACE PGETLN, GETLN POPJ TLIST3=. TASK4 /" (LITERAL TERMINATORS) PC1 /C.R.=AUTOMATIC QUOTE MATCH INFIX=. /DATA CONTROL CHARACTERS FLINTP+2 /CNTRL. U = KILL FLINTP+2 /LEFT ARROW=KILL INPUT+1 /RUBOUT=IGNORE INPUT+1 /L.F.=IGNORE ESC /ALT MODE=EXIT ESC /ESC=ALT FLTONE, 0001 /(NO RELATIVE REFERENCES) 2000 0000 0000 M12, -12 XSPNOR, 0 /IGNORE LEADING SPACES - "SPNOR" TSTCHR -240 /SPACE JMP I XSPNOR GETC JMP XSPNOR+1 XTESTN, 0 /RETURNS: .; OTHER; NUMBER - "TESTN" TAD CHAR TAD MPER SZA ISZ XTESTN TAD M2 DCA SORTCN /SAVE VALUE OF NUMBER TAD SORTCN /TEST IF REALLY A DIGIT SPA CLA JMP I XTESTN TAD SORTCN TAD M11 SPA SNA CLA ISZ XTESTN /IF A NUMBER JMP I XTESTN XPRNT, 0 /PRINT A LINENUMBER -"PRNTLN" DCA COMBO+3 /IF AC='SKP' :PACK ALSO TAD LINENO AND P7600 BSW RAR JMS PRNT /TWO DIGIT PART NUMBER TAD PER JMS COMBO TAD LINENO JMS PRNT /TWO DIGIT STEP NUMBER TAD SPC JMS COMBO /PRINT AND SOMETIMES PACK DCA COMBO+3 /RESET TO PRINT ONLY JMP I XPRNT PRNT, 0 /PRINT TWO DECIMAL DIGITS AND P177 DCA T1 TAD C260 DCA T3 JMP .+3 ISZ T3 XYZ, DCA T1 TAD T1 TAD M12 SMA JMP XYZ-1 CLA TAD T3 JMS COMBO TAD T1 TAD C260 JMS COMBO JMP I PRNT COMBO, 0 /COMBINED PRINT PACK STOCHR PRINTC 0 JMP I COMBO PACKC JMP I COMBO /SYMBOL TABLE TYPEOUT ROUTINE TDUMP, TAD END /INIT POINTER FOR DUMP (DON'T DUMP SECRET VARIABLES) DCA PT1 TAD LASTV /TEST FOR END OF LIST CIA TAD PT1 SNA CLA POPJ CDF V TAD I PT1 /GET VARIABLE CDF T DCA I OP+1 CDF P TAD OP /SETUP UNPACK POINTERS DCA AXOUT DCA XCT GETC /READ AND PRINT "XX(" PRINTC GETC PRINTC GETC PRINTC ISZ PT1 CDF V TAD I PT1 /PRINT SUBSCRIPT TO 99 CDF P JMS PRNT GETC /PRINT ")" PRINTC ISZ PT1 NOP /FCDF V FINT /PICK UP VALUE FGET I PT1 FXIT JMS I FOUTPUT /PRINT VALUE TAD CCR PRINTC TAD GINC TAD M2 TAD PT1 JMP TDUMP+1 OP, PC0+3 PC0+4 LGOSUB, PUSHJ /EXECUTE THE SUBROUTINE DO+1 TAD LIST7+1 /'ESCAPE' THE GOSUB STOCHR LIB, CIF CDF L /I.E. TO "PROC" FOR REST OF LINE JMP I LIBLOW LIBRET, TAD JMPGOS /RETURN TO APPROPRIATE ROUTINE DCA .+1 HLT PROCLB, PROC START1 LGOSUB GOTO+1 WRITE+1 /ONLY USED BY CD FOR /W OPTION LIBLOW, LOWLIB JMPGOS, JMP I PROCLB ECHOGO, INEX INEX INALT INALT ILIST, IF1 /, PROCESS /; PC1 /CR /SEARCH ROUTINES MODIFY, TAD LINENO DCA ATSW /KEEP IF GETLN GIVES 0 GETLN /READ LINE NO. TAD LINENO SNA TAD ATSW /USE LAST IF 0 DCA LINENO FINDLN /LOOK IT UP NOW ERROR2 /NOT THERE = BAD COMMAND UNLESS ZERO 34 /BM=BAD MODIFY TAD BUFR /SET POINTERS DCA AXIN /FOR INPUT DCA XCTIN TAD BUFR DCA PACKST TAD MODSKP /SET PRNTLN FOR PACKING PRNTLN SCONT, CIF CDF L JMS I INDEV /READ THE TELETYPE SILENTLY DCA DMPSW /SAVE SEARCH CHAR. ISZ DEBGSW /NO BREAKS SCHAR, GETC /TYPE+TEST-F.F. PRINTC /PLAYBACK THE TEXT SORTJ /LOOK FOR MATCH LIST3-1 LISTGO-LIST3 PACKC /SAVE NEW LINE JMP SCHAR SBAR, CLL CML CLA IAC RAL /RESTART-B.A. TAD BUFR DCA AXIN /SET POINTERS DCA XCTIN SFOUND, READC /READ FROM KEYBOARD SORTJ /TEST LIST6-1 SRNLST-LIST6 SGOT, PACKC /PACK CHAR. JMP SFOUND /MORE BRSW, OUT, 0 /OUTPUT A CHARACTER-"PRINTC" SNA /USE AC OR CHAR TAD CHAR TAD M216 /CNTRL N MEANS RETURN ONLY SNA DCA TABC /XOUTL WILL HANDLE CR ONLY IAC /CHECK FOR CR SNA JMP NEWLIN /TYPE CR,LF TAD CRMSPC SMA ISZ TABC /IT PRINTS, INCREMENT COUNT IFNOP, NOP TAD SPC OUTCLF, CIF L JMS I OUTDEV JMP I OUT NEWLIN, DCA TABC TAD CCR /CR CIF L JMS I OUTDEV TAD CLF /LF JMP OUTCLF M216, -216 CRMSPC, 215-240 *2701 /SO 'IF3' IS JUST PAST PAGE BOUNDARY /CONDITIONAL TRANSFER PROCESS SPNA, SPA SNA CLA P76MSP, 7600-7750 /7750=SPA SNA CLA P2004, 2004 IFSPA, SPA BR, CLA CMA /THIS SETS BRANCH COMMAND IF, DCA BRSW TESTC /FIRST CHAR. MUST BE TERMINATOR JMP IFOK /OK! FRSTIF, 0 SCNDIF, 0 JMP IFER IFOK, TAD IFSPA DCA IF2 /RESET IF2 JMS I DECALL /EVALUATE FIRST EXPRESSION TSTCHR -", /TEST IF TERMINATED BY ',' JMP COMPIF /NO: COMPUTED IF GETC /GOBBLE COMMA SORTC IFLIST-1 /GET FIRST REL. OP. MODSKP, SKP IFER, ERROR2 /NO SUCH! 204 /IE=IF ERROR TAD SORTCN DCA FRSTIF /KEEP FIRST REL. OP. DCA SORTCN GETC /NEXT REL. OP. IF ANY SORTC IFLIST-1 GETC /FOUND ONE;MOVE TO NEXT CHAR TAD SORTCN DCA SCNDIF /KEEP;IF NONE = 0 CLA CLL IAC RAL /2=OP. '-' DCA THISOP PUSHJ EPAR /EVALUATE SECOND ARGUMENT TAD FRSTIF CIA TAD SCNDIF SNA CLA JMP IFER /SOME COMBINATION LIKE:'==' TAD IFNOP DCA IF2 /SET FOR TWO EXITS TAD FRSTIF /NOW COMPUTE INSTRUCTION TAD SCNDIF CLL RAR /.GT. IN LINK SZL CMA /COMPL. IF .GT. SZL TAD P2004 /SET REVERSE SENSE BSW CLL RAR TAD P76MSP COMPIF, TAD SPNA DCA IF3-1 POPA /DUMP EFOP JMS I DPART /CHECK PARENS. TAD M2 DCA T1 TAD HORD /TEST COMP.IF. -,0,+ IF2, SPA ISZ T1 SPA SNA CLA /OR SOME OTHER INSTR. IF3, ISZ T1 /COUNT COMMAS SKP JMP IFBRCO /TRANSFER TO GO AND BRANCH SORTJ /SEARCH TEXT UNTIL ,;C.R. TLIST-1 ILIST-TLIST GETC JMP .-4 IF1, GETC /MOVE PAST COMMA JMP IF3 IFBRCO, GETLN /GET LINE FIRST JMS I IFENCO /GO TO END OF COMMAND ISZ I IBRSW JMP I IFGO JMP I IFBR IFGO, GOTO+1 IFBR, DO+1 IFENCO, ENDCOM IBRSW, BRSW /CHARACTER REMOVAL ROUTINE *3024 RUB1, TAD AXIN /RUBOUT ONE LETTER CIA TAD PACKST /PROTECTION SPA CLA TAD AXIN /IF TOO LOW PUT 0 IN T2 DCA T2 CDF T ISZ XCTIN /TEST HALF JMP RUB2 TAD I T2 /ADD IS FULL AND P77 /IF PROTECTION TAD M77 /THIS NEVER GIVES ZERO M140, SZA CLA /BECAUSE LOC.0 FLD T IS ZERO JMP RUB4 RUB3, CMA /IT IS EXTEND CODE DCA XCTIN /SET SWITCH CMA TAD AXIN DCA AXIN TAD I T2 /RESET ADD AND P7700 RUB4, DCA ADD CDF P DCA ECHO /ONLY IF ECHO TAD SPLAT /FOR RUBOUT ACKNOWLEDGEMENT PRINTC ISZ ECHO JMP I PACBUF RUB2, TAD T2 SNA CLA JMP PACX /PROTECTED! TAD I T2 /CHECK FOR EXTEND AND P7700 TAD M140-2 SZA CLA JMP RUB3 DCA I T2 /SAVE CORRECTION JMP RUB3+1 SPLAT, 334 PACBUF, 0 /PACK A CHAR. -"PACKC" TAD P277 CIA TAD CHAR SNA /CHANGE 277 TO 377 TAD P40 TAD P7700 SNA /TEST FOR RUBOUT JMP RUB1 TAD P377 DCA T2 /SAVE INPUT ITEM TAD T2 /SO THAT QUESTION DOESN'T MAKE P377, AND C140 /CHAR LOOK LIKE A LEFT ARROW TAD M140 SZA /DATA WORD TAD C140 SNA CLA JMP ESCA /200-237 & 340-377 PA1, TAD T2 /240-337 AND P77 SZA /IGNORE 300 JMS PCK1 PACX, CDF P JMP I PACBUF ESCA, TAD P77 JMS PCK1 JMP PA1 ROT, BSW DCA ADD CMA DCA XCTIN JMP I PCK1 P7700, 7700 PCK1, 0 ISZ XCTIN /=0 TO START JMP ROT TAD ADD JMS I DAXIN DCA ADD /CLEAR PACKING WORD JMP I PCK1 AXIND, 0 /AXIN SUB. NOW CHECKS FOR OVERFLOW CDF T DCA I AXIN TAD I PAXPNT /PDLXR CLL CIA TAD AXIN TAD C200 /ONE PAGE DISTANCE FOR PDL CDF P /PROGRAMS MAX. 15 BLOCKS LONG SNL CLA JMP I AXIND ERROR2 /TEXT OVERFLOW 365 /PF=PROGRAM FULL FIN, READC /SINGLE CHAR. INPUT FUNCTION TAD CHAR /FLOAT CHAR. DCA HORD DCA LORD DCA OVER2 TAD P13 DCA EXP POPJ FOUT, JMS I INTEGE /SINGLE CHAR OUTPUT FUNCTION SNA TAD C200 /IN CASE IT'S ZERO PRINTC POPJ XINT, JMS I INTEGE CLA CLL POPJ C140, 140 /DON'T MOVE!! PAGE /INPUT-OUTPUT ROUTINES FOR THE /FOCAL FLOATING POINT PACKAGE /IN THE COMMENTS BELOW:- /F=NUMBER OF DIGITS TO BE OUTPUT =FISW ---F--- /D=NUMBER OF DECIMAL PLACES =DECP ABC.DEF E GHI /E=DECIMAL EXPONENT =BEXP -D- -E- /P=NUMBER OF PLACES REMAINING TO BE /PRINTED BEFORE DECIMAL POINT PLCE=SGNPRN TGO, 0 TAD DIGITS CMA DCA SCOUNT /SAVE MAX. NUMBER OF DIGITS AVAILABLE - SET COUNT TAD FSIZE CIA DCA FCOUNT /-F TAD FISW /(JMP FPRNT) - FOR NO ROUNDING SNA CLA /FLOATING OUTPUT ? JMP R6 /YES, F SIGNIFICANT PLACES TAD FCOUNT TAD DECP /D-F TAD T3 /COMPARE DEC. EXPONENT D-F+E SMA /F-D .G. E ? R6, CLA /NO, ROUND OF TO .F PLACES TAD FSIZE /YES SPA /D+E.L.0 ? JMP FPRNT-2 /YES, NO ROUNDING NEEDED, GO TO PRINT CMA /NO, ROUND TO D+E PLACES TAD DIGITS /-(D+E)-1+DIGITS SPA /TO A MAX OF D PLACES CLA CMA /*ROUND UP* CIA TAD DIGITS DCA T2 /SAVE NUMBER+1 OF PLACES TO ROUND TO TAD FLTXR TAD T2 /SET UP BUFFER ADDRESS AT WHICH DCA PLCE /ROUNDING OFF SHOULD START TAD T2 CIA /SETUP COUNT OF MAX NO DCA T2 /OF CARRIES ALLOWABLE TAD K6 /LITTLE EXTRA ON FIRST DIGIT RET, TAD I PLCE TAD OM12 SPA CLA /CARRY REQUIRED ? JMP FPRNT /NO, GO TO OUTPUT DCA I PLCE /YES, MAKE CURRENT DIGIT ZERO ISZ T2 /BEGIN OF BUF REACHED ? JMP DECR /NO, DECREMENT BUF ADDR. AND REPEAT ISZ I PLCE /YES, SET MANTISSA TO .1 ISZ T3 /COMPENSATE BY INCREMENTING EXP CLA CLL FPRNT, TAD T3 DCA OUTEXP /KEEP T3 FOR LATER TAD FISW /AUTO-INDEX REG ALREADY SET - *PRINT* SNA CLA /F=0 ? JMP FLOUT /YES, OUTPUT AS FLOAT NUMBER TAD FCOUNT TAD T3 SMA SZA /E .G. F ? JMP FLOUT /YES, CONVERT TO E FORMAT TAD DECP /-F-E+D SMA /E.L.F-D ? CLA /NO, P=E CIA /YES, TAKE P=F-D TAD T3 CIA DCA T1 /SETUP -P BACK1, TAD OUTEXP /PRINT DD.DDD TAD T1 SZA CLA /B=E ? JMP NODIG /NO CMA /YES, PRINT DIGIT TAD OUTEXP /REDUCE E BY ONE DCA OUTEXP ISZ SCOUNT K6, 6 TAD SCOUNT SPA CLA /ALL SIGNIFICANT FIGURES? TAD I FLTXR /NO, OUTPUT NUMBER RIN, DCA OUTEM /YES-OUTPUT ZERO IN TEMP. TAD OUTSGN SNA /SIGN OUT ALLREADY? JMP .+3 /YES - FORGET IT JMS I OPUT /NO - PRINT - OR FILL DCA OUTSGN /SIGNAL SIGN OUT TAD OUTEM /OUTPUT NUMBER FILOUT, JMS I OPUT /OR FILLER ISZ T1 /P CHARS. PRINTED? JMP .+3 TAD PER /YES, PRINT PERIOD PRINTC /EVEN IF FIELD IS FULL ISZ FCOUNT /F CHARS. PRINTED? JMP BACK1 /NO, BACK TO LOOP JMP I TGO /YES, CHECK IF FLOAT DECR, CMA /BACKUP TO TOP OF BUF TAD PLCE DCA PLCE ISZ I PLCE /ADD ONE TO DIGIT AT CURRENT POSITION JMP RET OM12, -12 OPUT, OUTDG FILLER, 240-"0 /SPACE OR * LEDCHR, 240 /SPACE OR $,F,M,ETC. OUTSGN, 240-"0 /GETS "- - "0 OR 'FILLER' OUTEXP, 0 OUTEM, 0 SCOUNT, 0 FCOUNT, 0 NODIG, TAD T1 IAC SMA CLA /P .G. 1? JMP RIN /NO, PRINT ZERO TAD FILLER /YES, TYPE FILLER JMP FILOUT FLOUT, ISZ TGO /TELL FLOUTP ABOUT FLOAT CLA IAC DCA OUTEXP /SET EXP=1 CLA CMA /FAKE F-D=1 JMP BACK1-1 SGNPRN, 0 /TYPES LEADER AND SETS SIGN TAD LEDCHR TAD MBSLSH SNA CLA /BACKSLASH IS NOT PRINTED JMP .+3 TAD LEDCHR PRINTC TAD HORD SPA CLA /CHECK SIGN CLL CMA RTL /="- - "0 SNA TAD FILLER /IF POSITIVE DCA OUTSGN /WILL GET OUT LATER JMP I SGNPRN MBSLSH, -"\ IFLIST, 300 276 /.GT. 275 /.EQ. 300 274 /.LT. ERCALL, ERROR2 /NO ITEM IN LIST 320 /NA=NOT AVAILABLE MMINSK, JMS I MINSKI POPJ FORLEX, CIF CDF L JMP I .+1 LEXIT XDRONE, 0 CIF L JMS I .+2 JMP I XDRONE INTRPT /"INTERRUPT" FOR ETOS NOP /SECRET VARIABLES SHIFTED BY ONE /SECRET VARIABLES STSECR=. 4400 0000 0013 DOLL, 0001 0000 0000 4300 NMBSGN=.+2 ZBLOCK 5 4100 EXCLA=.+2 ZBLOCK 5 /INTRPT VARIABLES 4200 QUOTS=.+2 ZBLOCK 5 2011 /SECRET PI 0000 0002 3110 3755 2421 2605 /VERSION NUMBER 0000 0001 2000 0000 0000 STVAR=. ZBLOCK OVRLAY-. EJECT FOS8 FCARIT AND FPP /HEADER FOR FCARIT.SV *5000 OVRLAY=. ARIT, HLT TAD STARIT DCA I DVAR /UP TO THE PROGRAMMER TO ORGANIZE CIF CDF L /HIS VARIABLES JMP I .+1 CHENTR /BACK TO FOS8 STARIT, ARIT-10 DVAR, VARTOP /EXPONENTIAL GETSGN=TAD HORD *5020 STARTF=. FEXP, GETSGN /TAKE ABSOLUTE VALUE SPA CLA JMS I NEGP DCA T3 /C(SIGN)=-1 IF I X2.L.0 FINT FMUL LG2E FPUT I X2 FEXT JMS I INTEGER DCA FLAG2 /SAVE LOX ORDER DATA FINT FNOR FPUT I XSQ2 FGET I X2 FSUB I XSQ2 FPUT I X2 FMUL I X2 FPUT I XSQ2 FADD DF FPUT TEMP FGET CF FDIV TEMP FSUB I X2 FADD AF FPUT TEMP FGET BF FMUL I XSQ2 FADD TEMP FPUT TEMP FGET I X2 FDIV TEMP FMUL TWO FADD ONE FEXT TAD FLAG2 TAD EXP DCA EXP ISZ T3 POPJ FINT FPUT I X2 FGET ONE FDIV I X2 FEXT POPJ /CONSTANTS FOR FEXP X2, X XSQ2, XSQR AF, 0004 2372 1402 BF, 7774 2157 5157 CF, 0012 5454 0343 DF, 0007 2566 5341 LG2E, 0001 2705 2435 ONE, 0001 2000 0000 TWO, 0002 2000 0000 NEGP, FNEG FLAG2, 0 TEMP, 0 0 0 0 /MAIN ALGORITHM FOR ARCTANGENT ARCALG, FINT FGET I X2 FMUL I X2 FPUT I XSQ2 FMUL BET2 FADD BET1 FMUL I XSQ2 FADD BETZ FPUT TEMP FGET ALF2 FMUL I XSQ2 FADD ALF1 FMUL I XSQ2 FADD ALFZ FMUL I X2 FDIV TEMP FEXT JMP I .+1 ARCRTN /CONSTANTS - FLOATING ARC TANGENT ALFZ, 0000 2437 1643 ALF1, 7777 3304 4434 ALF2, 7773 3306 5454 BETZ, 0000 2437 1646 BET1, 0000 2427 2323 BET2, 7775 3427 7052 PAGE /FLOATING POINT ARC TANGENT ARTN, GETSGN /TAKE ABSOLUTE VALUE SPA CLA JMS FNEG DCA T3 FINT FPUT X FSUB I CON1 FEXT GETSGN SPA CLA JMP GO /LESS THAN ONE FINT FGET I CON1 FDIV X FPUT X FEXT CLA CMA GO, DCA FLAG1 /SIGN FLAG OF RESULT JMP I .+1 ARCALG ARCRTN, ISZ FLAG1 /RETURN HERE JMP I EXIT1 FINT FPUT X FGET I PI2 FSUB X FEXT JMP I .+1 EXIT1, EXIT2 /CONSTANTS FOR ARCTANGENT PI2, PIOT CON1, ONE /FLOATING LOGARITHM FLOG, GETSGN SPA SNA ERROR2 /0 OR - ARGUMENT FOR LOG 274 /LM=LOG MINUS FINT FPUT I TEM FSUB I CON1 FEXT GETSGN SNA POPJ SMA CLA JMP STARTL FINT FGET I CON1 FDIV I TEM FPUT I TEM FEXT CLA CMA STARTL, DCA T3 TAD P13 DCA EXP CMA TAD I TEM DCA HORD DCA LORD DCA OVER2 IAC DCA I TEM FINT FMUL LOG2 FPUT X FGET I TEM FSUB I CON1 FPUT I TEM FMUL LOG8 FADD LOG7 FMUL I TEM FADD LOG6 FMUL I TEM FADD LOG5 FMUL I TEM FADD L4 FMUL I TEM FADD L3 FMUL I TEM FADD L2 FMUL I TEM FADD L1 FMUL I TEM FADD X FEXT JMP I EXIT1 L1, 0000 3777 7742 L2, 7777 4000 4100 L3, 7777 2517 0307 L4, 7776 4113 7211 /LOGARITHM CONSTANTS LOG5, 7776 2535 3301 LOG6, 7775 4746 0771 LOG7, 7774 2236 4304 LOG8, 7771 4544 1735 TEM, TEMP LOG2, 0 2613 4414 FLAG1, 0 FNEG, 0 JMS I MINSKI CLA CMA JMP I FNEG X, 0 0 0 0 XSQR, 0 0 0 0 PAGE /FLOATING POINT SINE AND COSINE FCOS, FINT /COS(X)=SIN(PI/2-X) FPUT I X1 FGET PIOT FSUB I X1 FEXT FSIN, GETSGN SMA SZA CLA JMP MOD GETSGN SMA CLA POPJ /YES SIN(0)=0 JMS I MINSKI CMA /NO:SIN(-X)=-SIN(X) MOD, DCA T3 FINT FDIV TWOPI /REDUCE X MODULO 2 PI FPUT I XSQR1 FEXT JMS I INTEGER FINT FNOR FPUT I X1 FGET I XSQR1 FSUB I X1 FMUL TWOPI FPUT I X1 FSUB PI /X .L. PI? FEXT GETSGN SPA CLA JMP PCHECK /YES FINT /NO, SIN(X-PI)=-SIN(X) FPUT I X1 FEXT TAD T3 CMA DCA T3 PCHECK, FINT /X.L.PI/2? FGET I X1 FSUB PIOT FEXT GETSGN SPA CLA JMP PALG /YES FINT /NO FGET PI /SIN(X)=SIN(PI-X) FSUB I X1 FPUT I X1 FEXT PALG, FINT FGET I X1 FDIV PIOT FPUT I X1 FMUL I X1 FPUT I XSQR1 FGET C9 FMUL I XSQR1 FADD C7 FMUL I XSQR1 FADD C5 FMUL I XSQR1 FADD C3 FMUL I XSQR1 FADD PIOT FMUL I X1 FEXT EXIT2, ISZ T3 POPJ JMS I MINSKI POPJ /CONSTANTS AND POINTERS TWOPI, 0003 3110 3755 /3756 3-WORD 2421 PI, 0002 3110 3755 /3756 3-W0RD 2421 PIOT, 0001 /USED BY SINE AND COSINE 3110 3755 /3756 3-W0RD 2421 X1, X XSQR1, XSQR /SINE CONSTANTS C9, 7764 2441 7015 1042 C7, 7771 5464 5514 6150 C5, 7775 2431 5361 4736 C3, 0000 5325 0414 3167 FRAN, FENT /PSEUDO RANDOM NUMBER FGET RNDM /X(1)=(2^17+3)*X(0) MOD.2^16 FPUT ADDR FEXT TAD M16 DCA T1S JMS I DOUBLE ISZ T1S JMP .-2 JMS I ADDO JMS I DOUBLE JMS I ADDO /2*(2^16*X+X)+X FINT FPUT RNDM FEXT DCA EXP CLA CLL CMA RAR /=3777 AND HORD DCA HORD /BE SURE IT'S POSITIVE POPJ M16, -16 ADDO, DUBLAD RNDM=. T1S, 0000 4421 3040 0001 PAGE /FLOATING SQUARE ROOT FUNCTION XSQRT, FINT FPUT I TITER /VALUE FEXT /NEWTON'S METHOD IS USED GETSGN SPA CLA ERROR2 /NUMBER IS NEGATIVE = IMAGINARY ROOTS 214 /IM=IMAGINARY TAD EXP /LINK =0 FROM FINT SPA /MATCH THE SIGN WITH LINK BIT CML RAR DCA SQAC /MAKE FIRST APPROXIMATION SZL /TEST LSB OF EXP ISZ SQAC NOP TAD SQCON1 DCA SQAC+1 DCA SQAC+2 DCA SQAC+3 TAD HORD SNA TAD LORD SNA CLA JMP SQEND /NUMBER = 0 CLCU, FINT FGET I TITER FDIV SQAC FADD SQAC FEXT CLA CMA TAD EXP DCA EXP TAD EXP CMA IAC TAD SQAC SZA CLA /ARE EXPONENTS EQUAL? JMP ROOTGO /NO TAD HORD /ARE HIGH ORDER MANTISSAS EQUAL? CMA IAC TAD SQAC+1 SZA CLA JMP ROOTGO /NO TAD LORD CMA IAC TAD SQAC+2 /DO LOW ORDER MANTISSAS AGREE? SMA CMA IAC /WITHIN ONE BIT? IAC SMA CLA POPJ ROOTGO, FINT FPUT SQAC FEXT JMP CLCU SQEND, DCA EXP POPJ SQCON1, 3015 TITER, ITER1 SQAC, 0 0 0 0 *XSQRT+100 FNTABL=. 2533 /ABS 2650 /SGN 2636 /ITR 2630 /RAN 2572 /ATN 2624 /EXP 2625 /LOG 2654 /SIN /LIST OF CODED FUNCTION NAMES 2575 /COS 2702 /SQT 1140 /IN 2672 /OUT 2604 /(F)IND 0324 /T 0325 /U 0326 /V 0327 /W 0330 /X 0331 /Y 0332 /Z -1 /ENDS TABLE *XSQRT+126 FNTABF=. CDF L XABS /ABS -ABSOLUTE VALUE CDF L XSGN /SGN -REAL SIGN FUNCTION CDF P XINT /ITR -INTEGER PART CDF P FRAN /RAN -RANDOM NUMBER CDF P ARTN /ATN - CDF P FEXP /EXP -EXPO FUNCTIONS CDF P FLOG /LOG - CDF P FSIN /SIN -TRIG FUNCTIONS CDF P FCOS /COS - CDF P XSQRT /SQT -SQUARE ROOT CDF P FIN /INP -CHAR INPUT CDF P FOUT /OUT -CHAR OUTPUT CDF P FIND /IND -FIND A CHAR CDF P ERCALL /T CDF P ERCALL /U CDF P ERCALL /V CDF P ERCALL /W CDF L XCOM /(F)X:ARRAY CDF P ERCALL /Y CDF P ERCALL /Z /END OF ARIT OVERLAY PAGE /FLOATING OUTPUT CONVERSION ROUTINE ERROL+3 /FLD. 0 ERROR ROUTINE ADRESS ERROR, 0 /MUST BE AT THIS ADRESS!!USR.VOLATILE!! CLA CMA CLL TAD I ERROR /PASS ON CODE-1 CIF CDF L JMP I ERROR-1 ENDERR, DCA EOL /FORCE CR ISZ PC /END OF ERROR ROUTINE;USES SUBS. IN THIS FIELD JMS I DPC SNA JMP I START DCA LINENO TAD SPC PRINTC PRNTLN JMP I START FLOUTP, 0 JMS I PRNSGN /GO PRINT LEADER,SET SIGN JMS I ABSOL2 FGO2, DCA T3 /INITIALIZE DEZ EXP TAD EXP /IS EXP 0-4 ? SPA JMP FGO3 /TOO SMALL: MULT BY 10 SZA TAD M4 SPA SNA CLA JMP FGO4 FINT FMUL I PPTEN / /10 FEXT IAC TAD T3 JMP FGO2 FGO3, FINT FMUL I TENPT /*10 FEXT CMA JMP .-6 FGO4, DCA I DPT /MULTIPLY BY TWO TO POSITION BIT0 DCA I REPT /CLEAR OVERFLOW WORD TAD SADR /INIT BUFFER POINTER DCA FLTXR TAD EXP /COMPUTE BITS IN 1ST DIGIT CMA CLL DCA OUTDG /TEMP COUNT TAD DIGITS /SETUP COUNT OF TOTAL OUTPUT CMA DCA EXP JMS I DOUBLE /ROTATE OUT THE 1ST 4 BITS ISZ OUTDG JMP .-2 TAD I REPT /TEST FOR 10-15,0,1-9 SNA JMP FGO5 /IGNORE 1ST ZERO TAD FM12 SPA CLA JMP .+7 /0-9 IAC DCA I FLTXR /OUTPUT A 1 ISZ EXP /COUNT THE DIGIT TAD FM12 /CORRECT REMAINDER ISZ T3 /BUMP DECIMAL EXP NOP TAD I REPT /COMPUTE RESULTANT OR SECOND DIGIT ISZ T3 NOP SKP FGO5, JMS I M10PT /IE. .672X10=6+.72.. ETC. DCA I FLTXR ISZ EXP /ALL DIGITS OUTPUT?? JMP .-3 /NO:CONTINUE TAD SADR DCA FLTXR /RESET BUFFER POINTER JMS I ROUND /OUTPUT MANTISSA JMP I FLOUTP /FIXED POINT DONE TAD CHRT /PRINT "E" PRINTC /OUTPUT THE EXPONENT TAD I (BUFFER SZA CLA /IF #=0 KEEP EXP=0 CLA CMA TAD T3 /TAKE ABSOLUTE VALUE OF EXPONENT CLL SPA CIA CML DCA HORD /SAVE + POWER CMA RTL /PRINT SIGN TAD PER /.-3=+ ; .-1=- PRINTC TAD HORD ISZ EXP TAD M144 SMA JMP .-3 TAD C144 DCA HORD /SAVE TENS AND UNITS CMA /OUTPUT HUNDREDS TAD EXP SZA JMS OUTDG TAD HORD /PRINT TWO DIGITS JMS I PRNTI JMP I FLOUTP PRNSGN, SGNPRN PRNTI, PRNT CHRT, 305 /E M144, -144 /-100 C144, 0144 /+100 M4, -4 FM12, -12 PPTEN, PTEN /IEI DPT, DIGIT REPT, REMAIN /OVERFLOW FROM INTEGER MULTIPLY M10PT, MULT10 SADR, BUFFER-1 ROUND, TGO /ACTUAL OUTPUT ROUTINE TENPT, TEN ABSOL2, ABSOLV OUTDG, 0 TAD C260 PRINTC JMP I OUTDG RESOLV, 0 TAD SIGNF SPA CLA JMS I MINSKI CLA CLL JMP I RESOLV PAGE /FLOATING POINT INPUT FLINTP, 0 /IF C(AC)=0, USE CHAR SZA CLA /IF C(AC)#0, GET NEXT JMS I DINPUT /GET FIRST CHAR TSTCHR 7540 /-SPACE SKP JMP .-4 JMS I DPCVPT /READ FIRST DIGIT GROUP TSTCHR /ENDED BY PERIOD? -". JMP FIGO1 JMS I DINPUT /YES, READ SECOND GROUP DCA I DPN JMS I DCONP TAD I DPN /SAVE NUMBER OF DIGITS IN T3 CMA IAC FIGO1, DCA T3 /NO TAD P43 DCA EXP JMS I RESOL5 JMS I INORM /NORMALIZE FIRST ,THEN FINT /SAVE NUMBER FPUT I PT1 FEXT TSTCHR /"E" READ IN? -"E JMP ENDFI+3 /NO JMS I DINPUT /YES, READ 3RD DIGIT GROUP JMS I DPCVPT /I.E. CONVERT DECIMAL EXPONENT JMS I RESOL5 TAD OVER2 TAD T3 /C(SEXP) PLACES TO RIGHT OF LAST DIGIT DCA T3 /COMPENSATE FOR DECIMAL EXPONENTS ENDFI, FINT /RESTORE MANTISSA FGET I PT1 FEXT TAD T3 /TEST DECIMAL EXPONENT SNA JMP I FLINTP /FINISHED SMA CLA JMP FIGO4 FINT /. IS TO THE LEFT: FMUL PTEN /TIMES .1000 FPUT I PT1 FEXT IAC JMP .+6 FIGO4, FINT /. IS TO THE RIGHT: FMUL TEN /TIMES TEN FPUT I PT1 FEXT CMA TAD T3 DCA T3 JMP ENDFI+3 TEN, 0004 2400 0000 0000 PTEN, 7775 3146 3146 /3147 3-WORD 3150 DPCVPT, DECONV DCONP, DECON RESOL5, RESOLV DPN, DNUMBR DINPUT, INPUT INORM, DNORM P43, 43 ABSOLV, 0 TAD HORD DCA SIGNF TAD HORD SPA CLA JMS I MINSKI JMP I ABSOLV MINUS2, 0 /NEGATE OPERAND CLA CLL /TRIPLE PRECISION TAD OVER1 CMA IAC DCA OVER1 TAD AC1L CMA SZL IAC CLL DCA AC1L TAD AC1H CMA SZL IAC CLL DCA AC1H JMP I MINUS2 XRTD, 0 CDF T TAD I XRT CDF P JMP I XRTD PCD, 0 CDF T TAD I PC CDF P JMP I PCD THISD, 0 CDF T TAD I THISLN CDF P JMP I THISD PT1D, 0 CDF T TAD I PT1 CDF P JMP I PT1D XPUSHJ, 0 MQL FLD1 CIF T JMS I .+1 ZPUSHJ FILER, CIF CDF L JMP I .+1 FILEST ENDCOM, 0 /GO TO END OF COMMAND SORTC TLIST /; CR. JMP I ENDCOM GETC JMP .-4 PAGE /DOUBLE PRECISION DEZIMAL BINARY /INPUT AND CONVERSION FOR + OR - XXX.... DECONV, 0 DCA LORD DCA EXP /ZERO THE EXP AND DCA HORD /INITIALIZE FLAC DCA OVER2 DCA DNUMBR DCA SIGNF TAD CHAR /ALLOW KEYBOARD SIGN CHECKS TAD MPLUS SNA JMP .+6 /PLUS SIGN; GET NEXT TAD M2 /CHECK MINUS SIGN SZA CLA JMP .+4 CMA /INIT SIGN CHECK TO POS. DCA SIGNF JMS I XINPUT /GET NEXT TAD CHAR /A SPACE PERHAPS ? TAD MSPACE SNA CLA JMP .-4 JMS DECON JMP I DECONV DECON, 0 TAD CHAR /TEST LEAD. CHAR FOR TERMINATOR TAD MINE SNA CLA JMP I DECON /E TESTN JMP I DECON /. JMP DTST /OTHER TAD SORTCN /N DSAVE, DCA DIGIT /YES JMS MULT10 /REMAIN MUST =0 SINCE OVERFL. IS CHECKED ISZ DNUMBR /COUNT DIGITS SZA CLA ERROR2 /INPUT OVERFL ERROR 316 /MO=MANTISSA OVERFLOW JMS I XINPUT JMP DECON+1 /CONTINUE DTST, TAD CHAR /ALLOW A-Z TAD MINUSA SPA CLA JMP I DECON TAD CHAR TAD MINUSZ SZA SMA CLA JMP I DECON /USE 6 BITS OF ASCII TAD CHAR AND P77 JMP DSAVE MINE, -305 MINUSZ, -332 MPLUS, -253 MSPACE, -240 MINUSA, -"A XINPUT, INPUT MULT10, 0 /ROUTINE TO MULTIPLY FLAC BY 10 TAD OVER2 DCA OVER1 TAD LORD /DOUBLE PRECISION WORD DCA AC1L /BY 10(DEZ) TAD HORD /REMAIN=REMAINDER DCA AC1H DCA REMAIN /CLEAR OVERFLOW WORD JMS MULT2 /CALL SR TO JMS MULT2 /MULT BY 2 JMS DUBLAD /CALL DOUBLE ADD JMS MULT2 TAD DIGIT /ADD LAST DIGIT RECEIVED DCA OVER1 DCA AC1L DCA AC1H JMS DUBLAD TAD REMAIN /EXIT WITH REMAINDER JMP I MULT10 /IN AC REMAIN, 0 DIGIT, 0 /STORAGE FOR DIGIT DNUMBR, 0 /= NUMBER OF DIGITS MULT2, 0 /MULTIPLY OVER2, LORD, HORD BY TWO TAD OVER2 CLL RAL /CARRY INSERT BIT IS IN LINK DCA OVER2 TAD LORD RAL DCA LORD TAD HORD RAL DCA HORD TAD REMAIN RAL DCA REMAIN JMP I MULT2 DUBLAD, 0 /TRIPLE PRECISION ADDITION CLA CLL TAD OVER2 TAD OVER1 DCA OVER2 RAL TAD LORD TAD AC1L DCA LORD RAL TAD HORD TAD AC1H DCA HORD RAL TAD REMAIN DCA REMAIN JMP I DUBLAD DIV1, 0 /SHIFT OPERAND RIGHT CLA CLL /TRIPLE PRECISION TAD AC1H SPA CLL CML RAR DCA AC1H TAD AC1L RAR DCA AC1L TAD OVER1 RAR DCA OVER1 ISZ EX1 JMP I DIV1 JMP I DIV1 PAGE /FLOATING POINT INTERPRETER FOR FOCAL FPNT, 0 7600 /CLA;REFERENCED CLL NOP /DCA OVER1 NOP /DCA OVER2 3-WORD TAD I FPNT /GET NEXT INSTRUCTION SNA JMP I FPNT /FAST EXIT DCA JUMP TAD JUMP AND C200 /GET PAGE BIT SNA CLA /PAGE ZERO? JMP .+3 /YES TAD FPNT+1 /NO AND FPNT /C(FPNT) 0-4 CONTAINS PAGE BITS DCA ADDR TAD P177 /GET 7 BIT ADRESS AND JUMP TAD ADDR DCA ADDR TAD INDRCT /INDIRECT BIT =1? AND JUMP SNA CLA JMP LOOP01 /NO- GO ON TAD I ADDR /YES, DEFER W/O AUTO-INDEX DCA ADDR LOOP01, ISZ FPNT CMA TAD ADDR DCA FLTXR2 TAD JUMP /GET COMMAND CLL RTL RTL AND P17 /GET BITS 0-2,I.E. OPCODE SNA JMP FLGT TAD TABLE /LOOK UP THE TABLE DCA JUMP TAD I JUMP SNA JMP FLPT DCA JUMP TAD CEX1 /SAVE FLOATING ARGUMENT,UNLESS 'GET' OR 'PUT' DCA FLTXR TAD MFLT DCA CNTR TAD I FLTXR2 DCA I FLTXR ISZ CNTR JMP .-3 JMP I JUMP /GO THERE JUMP, 0 ADDR=EX1 INDRCT, 0400 TABLE, ITABLE FLPT, TAD CEXP /EXP TO (ADDR) JMP .+5 FLGT, TAD CEXP /(ADDR) TO EXP DCA FLTXR2 CMA TAD ADDR DCA FLTXR /SAVE 'FROM' ADRESS TAD MFLT /3 OR 4 WORDS DCA CNTR TAD I FLTXR DCA I FLTXR2 ISZ CNTR JMP .-3 JMP FPNT+1 CEXP, EXP-1 CEX1, EX1-1 FLSU, JMS I OPMINS /FSUB = 2, NEGATE THE OPERAND FLAD, JMS I ALGN /FLAD = 1, FIRST ALIGN EXPONENTS JMP FPNT+1 /RETURN IF NO ALIGMENT IS POSSIBLE JMS I RAR2 /TRIPLE PRECISION ADDITION JMS I RAR1 /SINCE BITS ARE SHIFTED JMS I TRAD /RIGHT NORF, JMS I NORM /NORMALIZE THE RESULT JMP FPNT+1 /HINT: USE 700X FOR FUNCTIONS /INTERPRETIVE POWER FLEX, TAD HORD /ZERO? SZA CLA JMP .+6 ZERO, DCA EXP /YES DCA HORD DCA LORD DCA OVER2 JMP FPNT+1 PUSHF /AC TO A + POWER FLAC PUSHF /SETUP ARGUMENT (THE EXPONENT) EX1 POPF FLAC JMS I INTEGER /ONLY POSITIVE, INTEGER EXPONENTS SPA JMP .+5 /(COULD DIVIDE) CMA DCA JUMP /TEMP STORAGE NOP /DCA OVER1 3-WORD TAD HORD SZA CLA ERROR2 /TOO LARGE OR NEGATIVE EXPONENT 116 /EO=EXPONENT OVERFLOW PUSHF /INITIALIZE TO ONE FLTONE POPF FLAC POPF ITER1 JMP .+6 PUSHF ITER1 POPF EX1 JMS I MULT /"MULT" ISZ JUMP JMP .-6 JMP FPNT+1 FLMY, JMS I MULT /MULTIPLY JMP FPNT+1 OPMINS, MINUS2 MULT, DMULT NORM, DNORM ALGN, ALIGN RAR1, DIV1 RAR2, DIV2 TRAD, DUBLAD PAGE ACMINS, 0 /ROUTINE TO COMPLEMENT FLAC - VIA "MINSKI" CLL CLA TAD OVER2 /TRIPLE PRECISION NEGATION CMA IAC /OF FLOATING AC DCA OVER2 TAD LORD CMA SZL IAC CLL DCA LORD TAD HORD CMA SZL IAC CLL DCA HORD JMP I ACMINS ALIGN, 0 /SUBROUTINE TO ALIGN TAD HORD /BINARY POINTS SNA TAD LORD SNA CLA /IS MANTISSA ZERO? JMP NOX1 /YES, RESULT=OPERAND TAD AC1H /NO, IS OPERAND ZERO? SNA TAD AC1L SNA TAD OVER1 SNA CLA JMP I ALIGN /YES, EXIT TAD EX1 CMA IAC TAD EXP SNA /ARE EXPONENTS EQUAL? JMP ADONE DCA ACMINS TAD ACMINS SMA /NO CIA /NEGATE AND DCA AMOUNT /SAVE THE DIFFERENCE TAD AMOUNT TAD TEST2 SPA CLA /CAN THE EXPONENTS BE ALIGNED? JMP NOX /NO, USE LARGER OF THE TWO TAD ACMINS /YES, SHIFT THE SMALLER SMA CLA JMP ASHFT JMS DIV2 ISZ AMOUNT JMP .-2 JMP ADONE ASHFT, CMA TAD EX1 DCA EX1 JMS I TAG1 ISZ AMOUNT JMP .-2 ADONE, ISZ ALIGN JMP I ALIGN NOX, TAD EX1 /MISSION IMPOSSIBLE! SMA CLA /CHECK FOR SIGN DIFFERENCE JMP NOX2 TAD EXP SMA CLA JMP I ALIGN /-+ JMP .+3 /-- NOX2, TAD EXP SMA CLA TAD ACMINS /TEMP STORAGE OF DIFFERENCE, SMA SZA CLA /-BOTH POSITIVE EXP OR BOTH NEG JMP I ALIGN /OK (+-) NOX1, TAD EX1 /USE LARGER DCA EXP TAD AC1H DCA HORD TAD AC1L DCA LORD TAD OVER1 DCA OVER2 JMP I ALIGN AMOUNT, 0 TAG1, DIV1 P27, 27 ABSOL, ABSOLV RESOL, RESOLV /LEAVE 12 BIT ANSWER IN AC UPON RETURN /LEAVE FLAC AS AN INTEGER FIX, 0 /VIA (INTEGER) JMS I ABSOL TAD EXP /TEST FOR FRACTION SPA SNA CLA JMP FIXM /DOUBLE CHECK FOR MINUS ONE IAC DCA OVER1 TAD P27 /INIT ALIGNEMENT DCA EX1 JMS ALIGN /DO THE ALIGNEMENT TO AN INTEGER TEST2, 0043 /ALREADY DONE; (27) FOR 3-WORD DCA OVER2 /CLEAR THE FRACTION JMS I RESOL TAD LORD /EXIT WITH LOW ORDER RESULT IN AC JMP I FIX FIXM, DCA EXP /CLEAR EXPONENT DCA HORD DCA LORD JMP TEST2+1 DIV2, 0 /SHIFT FLAC RIGHT CLA CLL TAD HORD SPA CML RAR DCA HORD TAD LORD RAR DCA LORD TAD OVER2 RAR DCA OVER2 ISZ EXP JMP I DIV2 JMP I DIV2 FLTZER, ZBLOCK 4 FLARG, ZBLOCK 4 PAGE /(A+B+C)*(D+E+F)=C*F,C*E,B*F,C*D,A*F,B*E,A*E,B*D,A*D DMULT, 0 /N-PRECISION MULTIPLY WITH IAC /PRODUCT IN TRIPLE PRECISION TAD EX1 /ADD EXPONENTS + 1 JMS SIGN /AND DETERMINE SIGN OF RESULT SPA CLA JMS I MINI DCA DATUM-1 /INIT RESULT DCA DATUM-2 DCA DATUM-3 DCA DATUM-4 TAD A /A*D SAVE /STORE IN MP2 TAD D /SINGLE PREC MULT MULTY 2 /ACCUM START IN #2 DATA WORD TAD E /A*E MULTY 3 TAD B /B*D SAVE TAD D MULTY 3 TAD E /B*E MULTY 4 DCA DATUM-5 /JMP DMDONE 3-WORD DCA DATUM-6 TAD F /A*F SAVE TAD A MULTY 4 TAD B /B*F MULTY 5 TAD C /C*D SAVE TAD D MULTY 4 TAD E /C*E MULTY 5 TAD F /C*F MULTY 6 DMDONE, TAD DATUM-1 /COPY RESULT DCA HORD TAD DATUM-2 DCA LORD TAD DATUM-3 DCA OVER2 JMS MULDIV NOP /DCA OVER2 3-WORD JMP I DMULT DATUM=.+6 /INTERMEDIATE STORAGE /#6-LOW ORDER /#5 /#4 /#3 /#2 /#1-HIGH ORDER *DATUM-1 MULDIV, 0 /TERMINATE MULTIPLY AND DIVIDE ISZ SIGNF /CORRECT FOR SIGN JMS I MINSKI JMS I NORMF /SHIFT LEFT NOP /ISZ OVER2 3-WORD JMP I MULDIV FLDV, TAD AC1H /4:DIVIDE SNA CLA ERROR2 /DIVISION BY ZERO 70 /DI=DIV TAD EX1 /SUBTRACT EXPONENTS+1 CMA IAC IAC JMS SIGN /SET UP SIGNS SMA CLA JMS I MINI /NEGATE DIVISOR JMS I DIVIDE /DIVIDE JMS MULDIV JMP I .+1 FPNT+1 /THIS SUBROUTINE PREPARES MULTIPLY AND DIVIDE /FOR ANY COMBINATION OF SIGNED ARGUMENTS AND FOR ZERO /THE RESULT OF EITHER IS ZERO IF FLAC = 0 /RESULT OF MULTIPLY IS ZERO IF EITHER IS ZERO; /DIVISION BY ZERO IS CHECKED BERFORE THIS /ROUTINE IS CALLED /THE CALLING AC CONTAINS AN UPDATE VALUE FOR THE /EXPONENT, THE RETURNING AC CONTAINS THE SIGN OF /THE ARGUMENT FOR FURTHER TESTING BY EACH ROUTINE. SIGN, 0 /TEST AND SAVE SIGN OF RESULT TAD EXP /COMPUTE NEW EXP FOR MUL-DIV. DCA EXP CLL CML RAR /LOAD 4000 TO XOR THE SIGN BITS AND HORD TAD AC1H SMA CLA /RESULT MAY BE ZERO CMA DCA SIGNF /+=-1;-=0 TAD HORD SNA JMP I REVIT /ANSWER IS ZERO SPA CLA /TAKE ABSOLUTE VALUE OF FLAC JMS I MINSKI TAD AC1H SNA /RESULT OF EITHER MAY BE ZERO JMP I REVIT JMP I SIGN MINI, MINUS2 REVIT, ZERO NORMF, DNORM DIVIDE, DUBDIV SAVE=DCA I . MP2 MULTY=JMS I . MP4 A=HORD B=LORD C=OVER2 D=AC1H E=AC1L F=OVER1 ITABLE=.-1 FLAD FLSU FLDV FLMY FLEX 0000 NORF XINTEG, 0 JMS I INTEGE CIF CDF L JMP I XINTEG BUFFER=. ITER1, ZBLOCK 13 PAGE MP4, 0 /SINGLE PREC,UNSIGNED "MULTY" SNA JMP I MP4 /NO RESULT ADDED DCA MP1 DCA MP5 TAD THIR DCA MP3 CLL MP6, TAD MP1 RAR DCA MP1 TAD MP5 SNL JMP .+3 CLL TAD MP2 RAR DCA MP5 /SAVE HI ORDER ISZ MP3 JMP MP6 TAD MP1 /CORRECT LO ORDER RAR DCA MP3 TAD I MP4 /PICKUP SCALE FACT. CIA TAD DATUMA DCA MP1 TAD MP3 /LO ORDER CLL TAD I MP1 /ACCUMULATE DCA I MP1 ISZ MP1 RAL TAD MP5 TAD I MP1 DCA I MP1 SNL JMP I MP4 /NO CARRY ISZ MP1 ISZ I MP1 JMP I MP4 JMP .-3 /CARRY AGAIN DATUMA, DATUM MP5, 0 /PRODUCT MP1, 0 /MULTIPLIER MP3, 0 MP2, 0 /MULTIPLICAND THIR, -14 /12 BITS MIF, -43 /-27 3-WORD DUBDIV, 0 /2 OR 3 PRECISION DIVIDE DCA MP4 DCA MP1 TAD MIF /INIT BIT COUNTER DCA MP3 SKP DV3, JMS I DOUBLE /SHIFT FLAC LEFT CLL TAD OVER1 /----FROM HERE 4-WORD TAD OVER2 DCA MP5 RAL TAD AC1L /COMBINE ONE POSITION AND TAD LORD DCA MP2 /SAVE RESULT RAL TAD HORD /ADD OVERFLOW TAD AC1H SNL /SKIP IF OVERFLOW JMP .+6 DCA HORD /UPDATE FLAC TAD MP5 DCA OVER2 TAD MP2 DCA LORD CLA /CLEAR ACCUMULATOR TAD MP1 /SAVE OVERFLOW BITS CIRCULARLY RAL DCA MP1 TAD MP4 RAL DCA MP4 TAD DNORM RAL /EXTRA FOR 4-WORD DCA DNORM ISZ MP3 /TEST FOR END OF DIVIDE JMP DV3 TAD DNORM DCA HORD TAD MP4 DCA LORD TAD MP1 DCA OVER2 JMP I DUBDIV DNORM, 0 /SUB TO NORMALIZE JMS I ABSOL3 JMS TEST4 TAD HORD SNA /IS MANT.=0? TAD OVER2 SNA TAD LORD SNA CLA JMP EXIT3 TAD HORD RAL CLL SPA CLA /WILL SHIFT TOO FAR? JMP .+6 JMS I DOUBLE CMA CLL TAD EXP DCA EXP JMP .-10 JMS I RESOL3 JMS TEST4 /DON'T LEAVE 4000 JMP I DNORM EXIT3, DCA EXP JMP I DNORM TEST4, 0 /TEST FOR 4000 TAD HORD SPA CIA SPA CLA JMS I XRAR2 /SHIFT BACK JMP I TEST4 XRAR2, DIV2 ABSOL3, ABSOLV RESOL3, RESOLV PAGE PAUSE