From cf37871f64c365ab756a64da9187a213e166974d Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Mon, 18 Apr 2022 17:43:55 +0200 Subject: [PATCH] NVMIDS - "Nova MIDAS" assembler. --- Makefile | 4 +- build/misc.tcl | 7 + build/timestamps.txt | 1 + doc/nova/-read-.-this- | 13 + doc/programs.md | 1 + src/nova/nvmids.22 | 6197 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 6221 insertions(+), 2 deletions(-) create mode 100644 doc/nova/-read-.-this- create mode 100755 src/nova/nvmids.22 diff --git a/Makefile b/Makefile index 38ad19d5..7b3ba5e1 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ SRC = syseng sysen1 sysen2 sysen3 sysnet kshack dragon channa \ mits_s rab stan_k bs cstacy kp dcp2 -pics- victor imlac rjl mb bh \ lars drnil radia gjd maint bolio cent shrdlu vis cbf digest prs jsf \ decus bsg muds54 hello rrs 2500 minsky danny survey librm3 librm4 \ - klotz atlogo clusys cprog r eb cpm mini + klotz atlogo clusys cprog r eb cpm mini nova DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc \ chprog sail draw wl pc tj6 share _glpr_ _xgpr_ inquir mudman system \ xfont maxout ucode moon acount alan channa fonts games graphs humor \ @@ -52,7 +52,7 @@ DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc \ aplogo _temp_ pdp11 chsncp cbf rug bawden llogo eak clib teach pcnet \ combat pdl minits mits_s chaos hal -pics- imlac maint cent ksc klh \ digest prs decus bsg madman hur lmdoc rrs danny netwrk klotz hello \ - clu r mini + clu r mini nova BIN = sys sys1 sys2 emacs _teco_ lisp liblsp alan inquir sail comlap \ c decsys graphs draw datdrw fonts fonts1 fonts2 games macsym \ maint _www_ gt40 llogo bawden sysbin -pics- lmman shrdlu imlac \ diff --git a/build/misc.tcl b/build/misc.tcl index 8112c85c..e72b3a83 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -1653,6 +1653,13 @@ respond "OLDMUSIC=" "0\r" respond "DFLAG=" "1\r" expect ":KILL" +# NVMIDS, Nova assembler +respond "*" ":cwd nova\r" +respond "*" ":midas;73\r" +expect "MIDAS" +respond "\n" "TS NVMIDS_NVMIDS >\r" +expect ":KILL" + # 11LOGO respond "*" ":cwd 11logo\r" respond "*" ":plx143 /H/M/CL BIN,N CREF_SYSTEM,TYI,READ,EVAL,TURTLE,ZEND\r" diff --git a/build/timestamps.txt b/build/timestamps.txt index 72a48813..828b4b5a 100644 --- a/build/timestamps.txt +++ b/build/timestamps.txt @@ -1599,6 +1599,7 @@ nilcom/subseq.39 198110271102.42 nilcom/thread.8 198109291240.03 nilcom/vsaid.57 198002230700.52 nilcom/yesnop.44 198109011735.21 +nova/-read-.-this- 197609090702.48 paulw/algfac.45 198106280247.18 paulw/csimp2.63 198107070349.35 paulw/csimp.299 198106301657.28 diff --git a/doc/nova/-read-.-this- b/doc/nova/-read-.-this- new file mode 100644 index 00000000..ede9a95f --- /dev/null +++ b/doc/nova/-read-.-this- @@ -0,0 +1,13 @@ +Presumably this is some stuff for stuffing up the +"Super" Nova + +novcon is a program that sits in the nova and acts as a pdp10 console and +loads the nova. +debug is an octal debugger for the nova. + +nvmids assembles nova code, more or less + +other relevant nova programs not on this directory are +sys1;ts nlod the program that sits in the pdp10 and feed binary cruft to +the nova +  \ No newline at end of file diff --git a/doc/programs.md b/doc/programs.md index 1e9b99e7..011b37aa 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -255,6 +255,7 @@ - NODIPS, SUDS wirelister (without DIP definitions). - NTSDDT, non timesharing DDT with 340 support. - NUDIR, create user directory. +- NVMIDS, Nova assembler. - NWATCH, small watch display. - OBS, observe system activities. - OCM/C, Richard Greenblatt's Mac Hack VI chess program. diff --git a/src/nova/nvmids.22 b/src/nova/nvmids.22 new file mode 100755 index 00000000..c3b589fe --- /dev/null +++ b/src/nova/nvmids.22 @@ -0,0 +1,6197 @@ + +TS==1 +MOBY==0 +MINI==1 +IFE TS,1PASS +FOO==. + +TITLE NOVA MIDAS +LOC 41 + JSR ERROR +IFN TS,JSR TSINT ;PDL OVERFLOW AND/OR OTHER TS PROBLEMS + +A1PSW==TS ;FOR 1PASS END-OF-PROGRAM AUTO-REASSEMBLY +TSSYMS==1 ;.UAI, .UAO, .BAI, .BAO, .UII, .UIO, .BII, .BIO - EVER USE THEM? +LISTSW==1&TS ;LISTING FEATURE FOR MAINT PROGS +IFN TS,MAXIND==20 ;MAXIMUM NUMBER IF INDIRECT DEVICE SPECIFICATIONS FOR .INSRT + +LOC FOO + + +;INDICATOR REGISTER + +;LEFT HALF +GLI==1 ;SET ON " CLEARED EACH SYL +VAR==2 ;SET ON ' " " " +FLO==4 ;SET ON . " " " +DECP==10 ;DECIMAL PREFER +UARI==20 ;UP AR INDICATOR +LSRET==40 ;RETURN FROM < +MNSFLG==100 ;SET IF LAST OP WAS MINUS +WRDF==400 ;SET IF CURRENT WORD IS NOT NULL RETURNED BY GETWORD +NPRC==1000 ;GTSYL +UNRCHF==2000 ;GETSYL +MWRD==4000 ;SET ON MULTIPLE WORD +NREP==10000 ;NOT 1 PASSABLE +MWRD1==20000 +ABFLG==40000 +SFORM==100000 + +;RIGHT HALF + +FLD==1 ;SET IF FLD NOT NULL +SYL==2 ;SET IF L-N SEEN IN CURRENT SYL +LET==4 ;SET IF LET SEEN IN CURRENT SYL +DEF==10 ;SET IF CURRENT EXPR DEFINED +LLET==20 ;SET IF LAST CHAR WAS LET + +COM==40 ;SET IF CURRENT QUAN IS COMMON +PERI==100 ;SET IF PERIOD SEEN +EQLF==200 +AIOWD==400 ;CURRENT WORD CONTAINS IO INST +CONT==1000 ;SET IF NOT OK TO END BLOCK +PSEUDF==4000 ;SET IF ERROR COMMENTS WILL COME FROM PSEUDO +GMINF==20000 ;SET IF UARI OR BAKARI HAS GOBBLED MINUS +OPFLD==200000 ;SET IF OP SEEN IN CURRENT FIELD + +;AC DEFS + +FF"=0 +P=1 +I=2 +AA=3 +A=4 +B=5 +C=6 +D=7 +T=10 +TT=11 +SYM=12 +LINK=13 +F=14 +CH1=15 +CH2=16 +TM=17 ;SUPER TEMPORARY + +;FF FLAGS NOT PUSHED +;LEFT HALF +INDEFF==200000 ;SET IF LOC IS INDEF +PPSS"=400000 ;ONE IF PUNCHING PASS MUST BE SIGN +SKILF==100000 ;ONE IF SYM TO BE SEMI KILLED IN DDT +VOT"=40000 ;ALL RCH S MUST GO THRU RCH + ; IE TYPCTL .NE. POPJ P, +PTPF==20000 ;SET IF (TIME SHARING) OUTPUT DEVICE IS PTP +OUTF==10000 ;ONE IF OUTPUT HAS OCCURED IN CURRENT MODE (USED BY TS NED LOGIC) + + +;RIGHT HALF FLAGS + +BITF==400 ;SET IF CURRENT SPEC IS 111 +INVTF==4000 +NLIKF==2000 ;TEMP SUPPRESS ADR LINKING +PSS"=20000 ;ONE ON PASS 2 +NPSS"=40000 ;ONE IF TWO PASS ASSEMBLY +GLOLOC==1000 +IPSYMS==200000 ;ONE IF SYM PUNCH DESIRED +FIRWD==400000 ;ONE FOR FIRST WORD OF BLOCK +LOCF==100000 ;ONE BETWEEN ABS LOC ASSIGN AND + ;FIRST BLOCK OUTPUT THEREAFTER +MRSW=200 ;MACRO PROC TO RETURN TO .GO HACKER + +MACRCH==10000 ;ONE IF CHARS FROM MAC PROCESSOR +TTYRCH==100 ;ONE IF CHARS FROM TTY (WINS OVER MACRCH) + +IFE TS,[.LIFS .NMAC" +MACL=.NMAC" +.ELDC +.LIFS -.NMAC" +MACL==2000*2 ;LENGTH OF MACTBL +.ELDC +]IFN TS,MACL=6000 +STRL==20 ;LENGTH OF STRING STORAGE +DMDEFL==20 ;MAX NO OF DMY ARGS IN DEFINE + +DMYAGL==400 ;MAX NO COMBINED DMYARGS ALL MACROS CURRENTLY +;EXPANDING OR PUSHED +MPDLL==300 ;MAC PDL LENGTH +DSSIZ==40 +MIDVRS"=.FNAM2 + + +;VARIABLE STORAGE + +CDISP: 0 ;CURRENT DISPATCH CODE +PPRIME: 0 ;PUSH DOWN LIST MARKER (GETFD) +GLSP1: 0 ;POINTER TO BOT OF LINKAGE TABLE IN USE HIGH ADR +GLSP2: 0 ;POINTER TO TOP OF LINKAGE TABLE IN USE LOW ADR +FORMAT: 0 ;ACCUMULATES FORMAT WORD +FORPNR: 0 ;POINTER INTO FORMAT WORD +WRD: 0 ;ACCUMULATES VALUE OF WORD +WRDRLC: 0 ;RELOC OF WRD +T1: 0 ;TEMP +T2: 0 ;TEMP +LSYL: 0 +LSYLR: 0 +FLDCNT: 0 ;NUMBER OF FIELDS PUSHED DOWN IN CURRENT WORD +PBITS1: 0 ;CURRENT CODE BITS +PBITS2: 0 ;NO OF SPECS LEFT IN CURRENT WORD +PBITS4: 0 ;POINTER TO WHERE CURRENT CODE BITS WILL GO +LIMBO: 0 ;TEMP STG FOR INVERT WORD +CLOC: 0 ;PUNCHING LOC +CRLOC: 0 ;PUNCHING RELOC +OFLOC: 0 ;OFSET VAL +OFRLOC: 0 ;OFSET RELOC +;VAL OF PT=CLOC+OFLOC,CRLOC+OFLOC +OPT1: 0 ;POINTER TO BKBUF TAB +OPTT1: 0 ;TEMP +OPTT2: 0 ;TEMP +ESL1: 0 ;LEVEL OF CURRENT SYM +ESL2: 0 ;3RD WORD CURRENT SYM +SADR: 0 ;SYM TAB ADR +CONTRL": 0 ;FLAG REG FOR IO CONTROL ETC +LEV: 0 ;CURRENT BEGIN END LEVEL +CDATBC: 0 ;CURRENT DATA BLOCK CODE TYPE +VARCNT: 0 ;NO OF VAR IN CURRENT VAR AREA SO FAR +SCKSUM: 0 ;CKSUM FOR SIMPLE BLOCK FORMAT +IFN A1PSW,[ +PRGC": -1 ;ONE LESS THAN # TIMES END HAS BEEN INCOUNTERED +OUTN1": -1 ;.GE. 0 => OUTPTT HAS OCCURED IN OTHER THAN 1PASS MODE (NOT INITIALIZED) +OUTC": -1 ;.GE. 0 => OUTPUT HAS OCCURED DURING CURRENT ASSEMBLY +] + +LIMBO1: 0 ;UNRCH TEMP +SCONT1: 0 ;SAVE CONT FLAG +PBCON: 0 ;POINTER TO CURRENT PLACE IN CONST AREA INFO TABLE +PLIM: 0 ;TOP OF CURRENT AREA +PBCONL: 0 ;POINTER TO ABS TOP OF CONST AREA INFO TABLE +CSQZ: 0 ;CONST SQUOZE COUNTER +LINKL: 0 ;SAVE LIMIT OF GLOTB GETWRD +CONCNT: 0 ;NUMBER OF TIMES CONSTANTS CAN APPEAR (DECREMENTED BY CONSTA) +CONGOL: 0 ;POINTER TO CONST GLO TAB +NREPC: 0 ;COUNT OF CONST UNREPS +SYLOC: 0 ;VAL OF LAST TAG +SYSYM: 0 ;LAST TAG +SYLOC1: 0 ;VALUE OF NEXT TO LAST TAG +SYSYM1: 0 ;NEXT TO LAST TAG +CONDEP: 0 ;DEPTH IN CONSTANTS (0 TOP LEVEL) +VARPNT: 0 ;POINTER TO CURRENT PLACE IN VARTAB +VARCNR: 0 ;NO OF TIMES VARIABLES MAY APPEAR +GETCNR: 105 ;PRIORITY OF UNARY OPS +ISYMF: -1 ;-1IF ISYMS HAVE NOT BEEN SPREAD +PRGNM: 0 ;PROG NAME +GLOBT: 0 ;GLSP1 PUSHED DOWN ONE LEVEL AT GETFLD +BITP: 0 ;BYTE PNTR TO CODE BITS IN CURRENT (RELOC) BLOCK +SCINST: 0 ;STRING COND INST +SCONDF: 0 ;STRING COND FLAG, -1 STRINGS IDENTICAL, 0 DIFFERENT +BLOCKF: 0 ;BLOCK OR LOC +AIRPT2: 0 +LDCCC: 0 ;DEPTH IN LOADTIME CONDS +PARBIT: 0 ;0 OR 4 FOR : OR = +STGSW: 0 ;NON ZERO GIVES ERROR PRINT ON STORAGE WORDS +VCLOC: 0 ;TEM FOR VARIAB +STARTA: 0 ;STARTING ADDRESS FOR SBLK, RIM +BYTM: 0 ;-1 FOR IN BYTE MODE +BYTMC: 0 ;COUNT CORRESP WITH BYTMP +BYTMP: 0 ;POINTER TO BYTE DESC TABLE +BYTMT: 0 ;TOTAL ACTIVE BYTES IN TABLE +CPGN: 0 ;CURRENT PAGE # IN INPUT FILE +CLNN: 0 ;CURRENT LINE # IN INPUT FILE + +;FORMAT OF BYTE DESC TABLE +;SEVEN BIT BYTES +;1.7=0 ASSEMBLE =1 BLANK +;1.1 - 1.6 NUMBER OF BITS +BYTWP: 440000,,BYTW ;POINTER TO BYTW IDPB TO DEPOSIT CURRENT BYTE +BYTW: 0 ;WORD BEING ASSEMBLED IN BYTE MODE +NBYTS: 0 ;NUMBER BYTES ASSEMBLED +ISAV: 0 ;I FROM FLD AT AGETFLD + +IFN LISTSW,[ +PNTBP: 0 ;POINTER TO LISTING LINE BUFFER +LISTF: 0 ;-1 IF LISTING ON +PNTSW: 0 ;-1 IF LAST CHR CR OR LF +LISTBF: BLOCK 50. +LISTAD: 0 ;ADDRESS OR -1 NONE 3.1 RELOC +LISTWD: 0 ;WORD +LSTRLC: 0 ;RELOCATION +LISTPF: 0 ;-1 OTHERS CONTAIN SOMETHING +LISTBC: 0 ;BREAK CHR CR LF OR FF OR -1 IF NONE SINCE LAST PNTR +LISTTM: 0 ;TEMP AT AEND +] + +;CONTROL FLAGS +;LEFT HALF +TRIV==400000 ;1 IF OUT FORM IS FOR TRIVIAL LOADER (RIM OR RIM1) +;RIGHT HALF +ARIM==2 ;IF ONE OUT FOR IS RIM +ARIM1==4 ;IF ONE OUT FORM IS RIM1 +SBLKS==10 ;IF ONE OUT FORM IS SIMPLE BLOCKS +ARIM10==20 ;PDP-10 RIM + +;LINK TABLE FLAGS + +ACF==40000 +HFWDF==100000 +SWAPF==200000 +MINF==20000 ;NEGATIVE OF GLOBAL + +BSIZE==37 ;PREFERRED SIZE BLOCK MAX SIZE-3 +LPDL"==500 ;LENGTH OF PDL +IFN MOBY,LCONTB==500*5 ;LENGTH OF CONSTANTS TABLE +IFE MOBY,LCONTB==500 +IFN MINI,LCONTB==200 +LCNGLO==2*3 ;LENGTH OF CONST GLO TAB +NCONS==10 +NVARS==10 + +LBRKT=="[ +RBRKT=="] + +IFE TS,[.LIFS .NSYMS" +SMK=.NSYMS" +.ELDC +.LIFS -.NSYMS" +SMK=3177*2 ;MAX NO ENTRIES IN SYM TAB +.ELDC +]IFN MOBY,IFN TS,SMK=6177*2 +IFE MOBY,IFN TS,SMK==2177*2 +IFN MINI,SMK==1777*2 + + + +TYPR=(77000) + +;CODE BIT DEFS + +CMMN==0 ;COMMON +PSUDO==40000 ;PSEUDO OR MACRO +SYMC==100000 ;SYM +LCUDF==140000 ;LOCAL UNDEF +DEFLVR==200000 ;DEF LOC VAR +UDEFLV==240000 ;UNDEF LOC VAR +DEFGVR==300000 ;DEF GLO VAR +UDEFGV==340000 ;UNDEF GLO VAR +GLOETY==400000 ;GLO ENTRY +GLOEXT==440000 ;GLO EXIT + +;LOADER BLOCK TYPES LINK + +LLDCM==1 ;LOADER COMMAND BLOCK +LABS==2 ;ABSOLUTE +LREL==3 ;RELOCATABLE +LPRGN==4 ;PROG NAME +LLIB==5 ;LIBRARY BLOCK +LCOMLOD==6 ;LOAD INTO COMMON +LGPA==7 ;GLOBAL PRARMETER ASSIGN +LDDSYM==10 ;LOCAL SYMS +LTCP==11 ;LOAD TIME COND ON PRESENCE +ELTCB==12 ;END LOAD TIME COND + +;LOADER COMMANDS +;IN ADR OF LDCMD BLK +LCJMP==1 ;JUMP +LCGLO==2 ;GLOBAL LOC ASSIGN +LCCMST==3 ;SET COMMON BENCHMARK +LCEGLO==4 ;END OF GLOBAL BLOCK +LDCV==5 ;LOAD TIME COND ON VALUE +LDOFS==6 ;LOADER SET GLOBAL OFFSET +LD.OP==7 ;LOADER .OP + +;LOADER CODEBITS SECOND SPEC AFTER 7 +CDEF==0 ;DEF +CCOMN==1 ;COMMON REL +CLGLO==2 ;LOC-GLO REC +CLIBQ==3 ;LIBREQ +CRDF==4 ;GLO REDEF +CRPT==5 ;REPEAT GLOBAL VALUE +CDEFPT==6 ;DEFINE SYM AS $. + +;3RDWRD SYM TAB BITS + +3REL==600000 ;RELOC BITS +3RLR==200000 ;R(RH) +3RLL==400000 ;R(LH) +3RLNK==100000 ;R(LINK) +3INI==40000 ;INITIAL SYM +3LLV==4000 ;LL MUST INSERT VAL +3VP==20000 ;VALUE PUNCHED +3VCNT==1000 ;USED IN CONSTANT +3SKILL==10000 ;SEMI KILL IN DDT +3VAS2==2000 ;VAR SEEN ON PSS TWO WITH ' +3MAS==400 ;MULTIPLE SYMS SAME NAME AT DIFFERENT LEVELS (I.E. KEEP LOOKING + ;AT SYMBOL LOOKUP + +;CONST TAB BITS +CGBAL==100000 ;CONST AREA GLOBAL +CTRL==200000 ;R(CONST AREA) +CTDEF==400000 ;CONST AREA DEF + +;MACRO PROC FLAGS + +SCEND==200 ;SCAN END +GENF==400 ;GENERATED ARGS +LNSCN==1000 ;ACTIVATE LINE SCAN ON LAST LINE +ALNSCN==2000 ;LINE SCAN ACTIVE +;400000 SAYS COMMAS DO NOT BREAK ARG +RDRPTF==4000 ;REPEAT +LCRIND=10000 ;CR SEEN AFTER ] +;MAC PDL STRUCTURE IRP,IRPC,IRPS +;FIRST ENTRY STANDARD RETURN==USED FOR .IRPCNT +;SECOND ENTRY 4.9==1 IF IRPC 4.8 = 1 IF AIRPS +;REST L H NO GROUPS +;RH POINTER TO BODY +;LH(WD1)=DMYAGT POINTER RH==RETURN AIRP4 + + ;MACRO PROCESSOR INFO,VARIABLES,AND PARAMETER ASSIGNS. + +TOPP: 0 ;TOP OF CURRENT DUMMY ARG TABLE PTS TO FREE REG +BBASE: 0 ;BOT " " " " " +PTAB: (341000+CH1)MACTAB ;BYTE TABLE + (241000+CH1)MACTAB + (141000+CH1)MACTAB + (41000+CH1)MACTAB + (341000+CH1)MACTAB+1 + +PTAB1: 341000,,MACTAB + 241000,,MACTAB + 141000,,MACTAB + 41000,,MACTAB + +MACP: 0 ;MAC PDL POINTER +FREEPT: 0 ;MACRO STG PNTR +GENSM: 0 ;GENERATED SYM COUNT +STRCNT: 0 ;NO OF CHARS IN S S +STRPNT: 0 ;POINTER TO S S +CPTRB: -1 ;CPTR IN BYTE PNTR FORM OR -1 IF NOT COMPUTED +RDWRDP: DSTG +MACNM: 0 ;NAME OF MACRO BEING DEFINED +DCNT: 0 ;USED BY WRQOTE CURRENT DEPTH IN DEFINE-IRP-TERMIN LEVEL +PRCALP: PRCAL +DMYTOP: 0 +PRSTG: +PRSCND: 0 ;CHARACTER ADDRESS OF CURRENT LOCATION IN FIRST STRING OF IFSE,IFSN WHILE COMPARING WITH SECOND +PRSCN1: 0 ;CHAR ADDR BEG OF FIRST STRING IFSE, IFSN +PRREPT: 0 ;CHAR ADR BEG OF BODY OF REPT +PRIRP: 0 ;CHAR ADR BEG OF IRP BODY +PRDEF: 0 ;CHAR ADR BEG OF MACRO BEING DEFINED +CPTR: 0 ;CURRENT POINTER FOR MACRO,IRP,REPEAT ETC CHAR ADR ONE BEFORE NEXT CHR TO BE READ +PRCAL: REPEAT 10,0 +EPRSTT: +SYMSTR: 0 ;PNTR TO CHAIN OF MACRO PNTRS IN SYM TABLE (DURING GC) +REDPT: 0 +COFST: 0 +SVF: 0 +FREPTS: 0 +GCENDF: 0 +REDPTB: 0 +FREPTB: 0 +FRPTBS: 0 +MDEPTH: 0 ;DEPTH IN MACRO (NOT IRP OR REPEAT) EXPANSIONS +PUTCNT: 0 +AIRPT: 0 ;TYPE OF IRP (400000) IRPC (200000) IRPS 0 IRP +IRPCR: 0 ;COUNT OF A,B,[LIST] GROUPS IN IRP IRPC IRPS +GCHI: 0 +A.QOT2: 0 +AIRPT1: 0 +CRPTCT: 0 ;COUNT THROUGH CURRENT REPEAT +CIRPCT: -1 ;COUNT THOUGH CURRENT IRP + +DEFINE BYB A,B,C +ZZZ=C +ZZ=43 +REPEAT 35.,[IFGE ZZZ,[ ZZZ=ZZZ_1 + ZZ=ZZ-1 +]] +A,[ZZ*10000+100,,B +TERMIN + + +DEFINE 3GET A,B + HRRZ TM,B + ROT TM,-2 + HLLZ A,3RDWRD(TM) + SKIPGE TM + HRLZ A,3RDWRD(TM) + TERMIN + +DEFINE 3GET1 A,B + MOVEI TM,-ST(B) + ROT TM,-2 + HLLZ A,3RDWRD(TM) + SKIPGE TM + HRLZ A,3RDWRD(TM) + TERMIN + +DEFINE 3PUT A,B + HRRZ TM,B + ROT TM,-2 + SKIPGE TM + HLRM A,3RDWRD(TM) + SKIPL TM + HLLM A,3RDWRD(TM) + TERMIN + +DEFINE 3PUT1 A,B + MOVEI TM,-ST(B) + ROT TM,-2 + SKIPGE TM + HLRM A,3RDWRD(TM) + SKIPL TM + HLLM A,3RDWRD(TM) + TERMIN + +LNKTZ: TDZA C,C +LNKTC1: MOVE T,GLSP2 +LINKTC: CAML T,GLSP1 + POPJ P, + SKIPL 1(T) + XORM B,1(T) + SKIPL 1(T) + IORM C,1(T) + AOJA T,LINKTC + +HFWDAD: HRRM A,.+1 ;ADD A TO B + HRRI A,(B) + MOVSS B + HLRM A,.+1 + HRLI A,(B) + POPJ P, + +SGTSY: PUSH P,I + PUSH P,AA + PUSH P,A + PUSH P,B + PUSHJ P,(LINK) +SGTSY1: + +PERIOD: TLO I,DECP + TROE I,PERI + TRO I,LET + ADD SYM,%.SQ(D) + TRO I,SYL + SOJGE D,RRL2 + AOJA D,RRL2 + +GETFLD: PUSH P,GLSP2 + PUSH P,GLSP2 + PUSH P,PPRIME + PUSH P,GLOBT + MOVE A,GLSP1 + MOVEM A,GLOBT + MOVEM P,PPRIME + TRZ I,FLD+OPFLD +GETFD1: TLNE I,MWRD + JRST .+3 + PUSHJ P,GETSYL + TRNE I,LET + PUSHJ P,GETVAL +GETFD6: MOVE C,CDISP + TLNE C,DFLD + JRST (C) +GETFD: MOVEI TT,0 ;NO DISP MEANS FD TERM + TRNE I,SYL + TRO I,FLD + JSP LINK,GETFD2 + SUB P,[(4)4 + POP P,GLOBT + POP P,PPRIME + SUB P,[(2)2 + POPJ P, +GETFDA: TRO I,FLD+OPFLD + TRNN I,SYL + AOS TT,GETCNR ;UNARY +GETFD2: CAMN P,PPRIME + JRST GETFD3 ;TOP OF LIST + HLRZ T,(P) ;GET LEVEL + CAMLE TT,T ;COMPARE TO CURRENT + JRST GETFD3 ;WAIT UNTIL LATER + HRRZ T,(P) + JRST (T) ;GO DO IT NOW +GETFD4: SUB P,[(4)4 + JRST GETFD2 +GETFD3: PUSH P,GLSP1 + PUSH P,B + PUSH P,A + HRL C,TT + PUSH P,C + JRST (LINK) + + +PLS: MOVEI C,PLS1 + MOVEI TT,10 + JSP LINK,GETFDA + JRST GETFD1 +MINUS1: MOVNS A + EQVI B,0 + ADD B,[1000000 + HRRI B,1(B) + MOVE T,-3(P) + PUSH P,B + HRLZI B,MINF + PUSH P,C + PUSHJ P,LNKTZ + POP P,C + POP P,B +PLS1: ADD A,-1(P) + PUSH P,A + MOVE A,-3(P) + PUSHJ P,HFWDAD + MOVE B,A + POP P,A + JRST GETFD4 + + +MINUS: MOVEI C,MINUS1 + JRST PLS+1 + +MULTP: MOVEI C,MULTP1 + MOVEI TT,20 +CBAK2: JSP LINK,GETFDA + JRST GETFD1 + +MULTP1: JUMPE B,MULTP3 + SKIPE -2(P) + JRST MULTP4 + MOVE T,-1(P) + JRST .+3 +MULTP3: MOVE T,A + MOVE B,-2(P) + MOVE D,-3(P) + CAME D,-7(P) + JRST GMUL1 + CAME D,GLSP1 + JRST GMUL2 +GMUL4: HRLZ D,B + IMUL D,T + HLRM D,B + HLLZ D,B + IMUL D,T + HLLM D,B + IMUL A,-1(P) + JRST GETFD4 +MULTP4: (1000+SIXBIT /IRL/) ;ILLEGAL RELOCATION * / + JRST GETFD4 + +DIVID: MOVEI C, DIVID1 + JRST MULTP+1 + +GMUL1: TLNE FF,PPSS + CAMN D,GLSP1 + SKIPA CH1,A + (1000+SIXBIT /IMY/) ;ILLEGAL MPY + SKIPA D,-7(P) +GMUL2: MOVE CH1,-1(P) +GMUL3: CAML D,GLSP1 + JRST GMUL4 + SKIPGE 1(D) + AOJA D,GMUL3 + JUMPE CH1,GMUL5 + LDB CH2,[(221200+D)1 + SKIPN CH2 + MOVEI CH2,1 + IMUL CH2,CH1 + DPB CH2,[(221200+D)1 + AOJA D,GMUL3 + + +GMUL5: CLEARM 1(D) + AOJA D,GMUL3 + +DIVID1: JUMPN B,MULTP4 + SKIPE -2(P) + JRST MULTP4 + EXCH A,-1(P) + IDIV A,-1(P) + MOVEI B,0 + JUMPGE FF,GETFD4 + MOVE D,-7(P) + CAME D,GLSP1 + (1000+SIXBIT /IDV/) + JRST GETFD4 + +IORF: MOVEI C, IORF1 +LOGIC3: MOVEI TT, 30 +LOGIC: JRST CBAK2 + + +XORF: MOVEI C,XORF1 + TRNN I,SYL ;IF OP ABOUT TO BE UNARY + MOVNI A,1 ;THEN TURN IT INTO LOGICAL NOT + JRST LOGIC3 +ANDF: MOVEI C,ANDF1 + MOVEI TT,40 + JRST LOGIC +XORF1: MOVEI D,(XOR A,(P)) + JRST LOGIC1 +IORF1: MOVEI D,(IOR A,(P)) + JRST LOGIC1 +ANDF1: MOVEI D,(AND A,(P)) +LOGIC1: HRLM D,LOGIC2 + JUMPN B,MULTP4 + SKIPE -2(P) + JRST MULTP4 +LOGIC2: ,-1 + JRST GETFD4 + + + +CBAKAR: MOVEI C,CBAK1 + MOVEI TT,100 + JRST CBAK2 + +CBAK1: JUMPN B,MULTP4 + MOVE T,A + MOVE A,-1(P) + LSH A,(T) + JRST GETFD4 + +SEMIC: PUSHJ P,RCH + CAIE A,15 + JRST .-2 +RRU3: PUSH P,[RRL2A] + JRST RRU1 + + +RBRAK: SKIPN CONDEP + JRST RRL2 + JRST RR10 + +;COMPUTE CPTR IN BYTE PNTR FORM +BCOMP: SKIPE CH1,CPTR ;GET CPTR, IF NOT ZERO + SOS CH1 ;THEN DECREMENT ONE (FOR ILDB) + IDIVI CH1,4 ;DIVIDE FOR QUOTIENT AND REMAINDER (WDS AND CHR POS IN WD) + MOVE CH2,PTAB1(CH2) ;GET BYTE PNTR FROM TABLE + ADD CH2,CH1 ;ADD TO ADDRESS PART + MOVEM CH2,CPTRB ;SAVE AWAY + POPJ P, + +RRU: SKIPA A,LIMBO1 +RRLM2: PUSHJ P,MRCH2C +RRU1: XCT RRR1 + JRST RRL1B + SKIPG CPTRB + PUSHJ P,BCOMP + JRST RRLM4 + +RR4A: AOS CPGN + CLEARM CLNN + AOS CLNN + JRST RR4 + +GETSYL: TDZA I,[(UARI+NPRC+DECP)PERI +GTSL1: TDZ I,[(DECP)PERI + CLEARB SYM,NUMTAB + MOVE AA,[(NUMTAB)NUMTAB+1 + AOSN NTCLF + BLT AA,NUMTAB+10 + MOVEI D,6 + TDZ I,[(FLO+VAR+GLI+LSRET)LET+SYL +RRL2: PUSHJ P,RR +RRL2A: MOVEM A,LIMBO1 + TRNE FF,MACRCH + JRST RR4 + CAIN A,12 + AOS CLNN + CAIN A,14 + JRST RR4A +RR4: HRRZ A,GDTAB(A) + MOVE C,DTB-40(A) + MOVEM C,CDISP +RR8: TLNE C,DSYL + JRST (C) +RR10: TRNN I,SYL + JRST CABPOP + TRNE I,LET + POPJ P, + CAMN SYM,[SQUOZE 0,. + JRST PT1 + + + +RR5: TLNN I,NPRC + PUSHJ P,NUMSL +RR6: TLNN I,FLO + JRST RR9 + MOVE A,B ;IF FLOATING HIGH IN AA,LOW IN A,EXP IN B + ADDI A,306 ;201+105 + ADDI AA,200 ;HIGHEST ORDER TO BE FLUSHED + JUMPGE AA,.+3 + LSH AA,-1 + AOS A + EXCH A,AA + ASHC AA,-10 + SKIPE AA + (2000+SIXBIT /EPO/);EXPONENT OVERFLOW +RR9: TLZ I,GLI+VAR + JRST CLBPOP + + + + +ATSGN: MOVEI A,100000 + TRNE I,AIOWD + MOVEI A,2000 + IORM A,WRD + TRO I,SYL + JRST RRL2 + +RRL1": PUSHJ P,RCH ;OR ILDB A,UREDP" +RRL1B: XCT GDTAB(A) + TROA I,LET+SYL+LLET ;LETTERS + TRO I,SYL+LLET ;NUMBERS RETURN +RRL1A: SOJGE D,RRL1 + AOJA D,RRL1 + +RR: TLZE I,UNRCHF + JRST RRU +RRR1": TRNN FF,MACRCH" ;OR JFCL IF IN DISPLAY OUTPUT + JRST RRL1 + +RRLM1A: SKIPG CPTRB + PUSHJ P,BCOMP +RRLM1: ILDB A,CPTRB + AOS CPTR + TRZE A,200 + JRST RRLM2 +RRLM4: XCT GDTAB(A) + TROA I,LET+SYL+LLET + TRO I,SYL+LLET +RRLM4A: SOJGE D,RRLM1 + AOJA D,RRLM1 + + +UT141: PUSHJ P,INCHR3" + JRST RRU1 + +MAKNUM: SETOM NTCLF + MOVEI AA,2 + SKIPGE HIGHPT(AA) + JRST MAKNM3 + MOVE T,LOWPT(AA) + MUL T,ARADIX(AA) + MOVEM TT,CH1 + MOVE TT,HIGHPT(AA) + ADD CH1,A + TLZE CH1,400000 + AOS T + JFCL 17,.+1 + IMUL TT,ARADIX(AA) + ADD TT,T + JFCL 10,MAKNM2 + TLNE I,FLO + SOS NUMTAB(AA) + MOVEM TT,HIGHPT(AA) + MOVEM CH1,LOWPT(AA) +MAKNM4: SOJGE AA,MAKNUM+2 + POPJ P, +MAKNM2: MOVSI B,400000 + IORM B,HIGHPT(AA) +MAKNM3: TLNN I,FLO + AOS NUMTAB(AA) + JRST MAKNM4 + +NUMTAB: 0 + 0 + 0 +HIGHPT: 0 + 0 + 0 +LOWPT: 0 + 0 + 0 +ARADIX: 10 ;CURRENT RADIX + 12 + 10 + +NTCLF: 0 + +NUMSL: CLEARB TT,D + PUSHJ P,RDXSEL + MOVE AA,HIGHPT(D) + MOVE B,LOWPT(D) + MOVE T,NUMTAB(D) + TLNN I,FLO + JRST FIX + TLZ AA,400000 +NUMC1: JUMPN AA,.+2 + JUMPE B,FIX-1 + JUMPL T,NUMSL1 + JUMPE T,NUMSL2 +NUMSL5: MUL B,ARADIX(D) + MUL AA,ARADIX(D) + ADD A,B + TLZE A,400000 + ADDI AA,1 + MOVE B,C +NUMSL3: JUMPE AA,NUMSL4 + ASHC A,-1 + ASH A,1 + ASHC AA,-1 + AOJA TT,NUMSL3 +NUMSL4: MOVE AA,A + SOJG T,NUMSL5 + +NUMSL2: SKIPA A,B +NUMSL7: ASHC AA,1 + TLNN AA,200000 + SOJA TT,NUMSL7 + SKIPA B,TT +PT1: TRO I,LET + POPJ P, + + TLZ I,FLO +FIX: LSHC A,45 + LSHC AA,-1 + JUMPE AA,.+2 + (2000+SIXBIT /XSG/) ;SIG CHECK + POPJ P, + +RDXS1: MOVEI D,0 +RDXSEL: TLNE I,DECP + MOVEI D,1 + TLNE I,VAR + MOVEI D,2 + TLNE I,GLI + MOVEI D,0 + POPJ P, + +NUMSL8: LSH B,1 + ASH AA,1 + TLZE B,400000 + TRO AA,1 +NUMSL1: TLNN AA,200000 + SOJA TT,NUMSL8 + IDIV AA,ARADIX(D) + ADD B,A + MOVEI A,0 + TLZE B,400000 + MOVEI A,1 + DIV A,ARADIX(D) + MOVE B,A + AOJL T,NUMSL1 + JRST NUMSL7+1 + +UPARR: TRON I,SYL + JRST UPCTRC + TRNE I,LET + (2000+SIXBIT /ILF/) ;ILF + PUSHJ P,NUMSL + TLO I,UARI + PUSHJ P,UA3 + TLZ I,UARI + MOVE TT,B + MOVE B,A + PUSHJ P,RDXS1 + PUSHJ P,NUMC1 ;T EXP HIGH IN AA LOW IN B TT BIN EXP + TLNE I,FLO + JRST RR7 + ASHC AA,(B) + JUMPE AA,.+2 + (2000+SIXBIT /XSG/) ;SIG CHECK + MOVEI B,0 +RR7: MOVE C,CDISP + TLO I,NPRC + JRST RR8 + + +UA3: JSP LINK,SGTSY ;PUSH I,AA,A,B + PUSHJ P,RCH + CAIN A,"- + TROA I,GMINF + TLO I,UNRCHF + PUSHJ P,RCH + CAIN A,"< + JRST UAR1 + TLO I,UNRCHF + PUSHJ P,GTSL1 + TRNN I,LET + TLNE I,FLO + (2000+SIXBIT /ILF/) ;ILF +UAR2: TRZN I,GMINF + SKIPA T,A + MOVN T,A + MOVEI TT,SGTSY1 + JSP LINK,POPLIS + POPJ P, + +UAR1: TLO I,LSRET + PUSHJ P,LSSTH + PUSH P,A + PUSHJ P,RCH + CAIN A,"! + JRST .-2 + HLRZ T,GDTAB(A) + CAIE A,". + CAIE T,(POPJ P,) + (2000+SIXBIT /ILF/) + HRRZ A,GDTAB(A) + MOVE A,DTB-40(A) + MOVEM A,CDISP + POP P,A + JUMPN B,RLCERR ;RELOC ERR + JRST UAR2 + +BAKAR: TLNE I,UARI + JRST RR5 + TRNE I,SYL + TRNE I,LET + JRST BAK1 + CAMN SYM,[SQUOZE 0,. + JRST BAK1 + TLZN I,NPRC + PUSHJ P,NUMSL + PUSHJ P,UA3 + ADD B,T + ASHC AA,(B) + LSH A,1 + LSHC AA,-1 + CLEARB B,AA + TLZ I,FLO + POPJ P, + + +BAK1: MOVE TT,[(DFLD)CBAKAR + MOVEM TT,CDISP + JRST RR10 + +DQUOTE: TRON I,SYL + JRST DQ1A + TLO I,ABFLG + JRST RRL2 +UPCTRC: PUSHJ P,RCH + TRZA A,100 +DQ1A: PUSHJ P,RCH +DQ1: PUSH P,A + PUSHJ P,GETSYL + TROE I,SYL + (2000+SIXBIT /ILF/) + JRST POPAJ + +SQUOTE: TRON I,SYL + JRST .+3 + TLO I,VAR + JRST RRL2 + PUSHJ P,RCH + SUBI A,40 + TRNN A,100 + JUMPGE A,DQ1 + (2000+SIXBIT /N6B/) + JRST DQ1 + + +RR2: SUBI A,60 + TRNE I,LET + JRST RR2A + TRZE I,PERI + TLO I,FLO + PUSHJ P,MAKNUM +RR2A: XCT NSQTB(A) + JRST 1(CH2) + +NSQTB: IRPC Q,,0123456789 + ADD SYM,%!Q!SQ(D) +TERMIN + + +SAVWD1: PUSH P,LSYL + PUSH P,LSYLR + +SAVWLD: PUSH P,FORMAT + PUSH P,FORPNR + PUSH P,FLDCNT + PUSH P,GLSP2 + PUSH P,I + PUSH P,WRD + PUSH P,WRDRLC + PUSH P,SYM + PUSHJ P,(LINK) +SAVL1: +POPLIS: POP P,F + CAIE TT,(F) + (SIXBIT /IAE/) ;IAE + +POPLS1: HLRZ F,-2(TT) + CAIE F,(PUSH P,) + JRST (LINK) + POP P,@-2(TT) + SOJA TT,POPLS1 + + + +USVWLD: POP P,SYM + HRRZS SYM + CAIE SYM,SAVL1 + (SIXBIT /IAE/) + POP P,SYM + POP P,WRDRLC + POP P,WRD + TDZ I,[-1-(WRDF) + IOR I,(P) + POP P,1(P) + POP P,GLSP2 + POP P,FLDCNT + POP P,FORPNR + POP P,FORMAT + JRST (LINK) + +PUSHEM: PUSH P,A ;BBASE CPTR + PUSH P,F ;FLAGS LIMBO1 RETN + MOVE F,MACP + HRR A,CPTR + HRL A,BBASE + PUSH F,A + HRL B,LIMBO1 + TLZE I,UNRCHF +IFE LISTSW, TLO B,400000 +IFN LISTSW,[ + JRST LSTUN1 +LSTUN2: +] TROE FF,MACRCH + TLO B,200000 + TRZE FF,TTYRCH ;IF CHARS COMING FROM TTY, + TLO B,100000 ;THEN DOCUMENT SAME + PUSH F,B + MOVE A,[JRST MRCH + MOVEM A,GETCHR + JRST PSHM1 + +POPEM: PUSH P,A + PUSH P,F + MOVE F,MACP + POP F,A + TLZ I,UNRCHF + TLZE A,400000 +IFE LISTSW, TLO I,UNRCHF +IFN LISTSW,[ + JRST LSTUN3 +LSTUN4: +] TRZ FF,MACRCH\TTYRCH + TLZE A,200000 + TRO FF,MACRCH +IFE TS, HLRZM A,LIMBO1 +IFN TS,[ + TLZE A,100000 + TRO FF,TTYRCH + HLRZM A,LIMBO1 + TRNN FF,TTYRCH + JRST POPEM2 + MOVE A,[PUSHJ P,RCHA] + MOVEM A,GETCHR + JRST POPEM1 +POPEM2:] + MOVE A,[PUSHJ P,RPA"] + TRNN FF,MACRCH + MOVEM A,GETCHR +POPEM1: POP F,B + HRRM B,CPTR +PSHM1: SETOM CPTRB + MOVEM F,MACP +POPFAJ: POP P,F +POPAJ: POP P,A + POPJ P, + +IFN LISTSW,[ +LSTUN1: AOSN PNTSW + JRST LSTUN5 ;LAST WAS BREAK CHR + REPEAT 4,IBP PNTBP + SOSA PNTBP +LSTUN5: SETOM LISTBC + TLO B,400000 + JRST LSTUN2 + +LSTUN3: TLO I,UNRCHF + MOVSS A + IDPB A,PNTBP + MOVSS A + JRST LSTUN4 +] + +ARCH": +RCH: TLZE I,UNRCHF + JRST RCH1 +GETCHR: PUSHJ P,RPA" ;OR JRST MRCH + CAIN A,12 + AOS CLNN + CAIN A,14 + JRST RCH3 +RCH4: +RCH2: MOVEM A,LIMBO1 +IFN LISTSW,[ + AOSN PNTSW + PUSHJ P,PNTR + CAIN A,14 + JRST RCHL1 + CAIE A,15 + CAIN A,12 + JRST RCHL1 + IDPB A,PNTBP +] +TYPCTL": POPJ P, ;MUNGED WHEN OUT OF TS + +IFN LISTSW,[ +RCHL1: MOVEM A,LISTBC + SETOM PNTSW + JRST TYPCTL +] + +RCH3: CLEARM CLNN + AOS CLNN + AOS CPGN + JRST RCH4 + +RCH1: MOVE A,LIMBO1 +IFN LISTSW,[ + CAIN A,14 + JRST RCHL1 + CAIE A,15 + CAIN A,12 + JRST RCHL1 +] POPJ P, + +MRCHR: POP P,B +MRCH: SKIPG CPTRB + PUSHJ P,BCOMP +MRCH2B: ILDB A,CPTRB + AOS CPTR + TRZN A,200 + JRST RCH2 +MRCH2C: PUSH P,B + CAIN A,176 + JRST MRCHR + CAIE A,177 + CAIN A,175 + JRST MRCH1 + MOVE B,A + ADD B,BBASE + MOVE A,(B) + MOVEI B,RCHSAV + PUSHJ P,PUSHEM + HRRM A,CPTR + MOVE A,TOPP + MOVEM A,BBASE + JRST MRCHR + +MRCH1: MOVE B,MACP + POPJ B, ;RETURN AT END OF STRING EXPANSION + +RCHSV1: SOS MDEPTH + PUSH P,A + MOVE B,TOPP +RCHSV3: CAMG B,BBASE + JRST RCHSV2 + HLRZ A,-1(B) + ADD A,-1(B) + MOVEI A,1(A) + CAME A,FREEPT + JRST RCHSV2 + HRRZ A,-1(B) + MOVEM A,FREEPT + SOJA B,RCHSV3 +RCHSV2: POP P,A + + +RCHSAV: MOVE B,BBASE + MOVEM B,TOPP + PUSHJ P,POPEM + HLRM B,BBASE +REPT6: TRZE FF,MRSW + POPJ P, ;RETURN TO .GO + POP P,B + JRST RCH + +REDINC: MOVE CH1,A ;GET IN B THE CHAR WHOSE ADDR IS IN A, INCREMENT A + IDIVI CH1,4 + LDB B,PTAB(CH2) + AOJA A,CPOPJ + +RDWRDA: PUSHJ P,ADDTR1 + PUSHJ P,RCH ;ENTRY FROM STRING COND, AREPEAT ETC + TLNE LINK,ALNSCN + JRST RDWR3 ;DONT QUIT UNTIL CR OR LF + CAIN A,LBRKT + JRST RDWR1 ;IF FIRST CHAR LBRACK, READ UNTIL MATCHING RBRACK + CAIN A,"\ ;IF FIRST CHAR \ + JUMPGE LINK,RDWR6 ;AND NORM ARG READ, THEN PROCESS FIELD +RDWR3: CAIE A,15 ;ON CR + CAIN A,12 ;OR LF + JRST RDWR2C ;EXIT + CAIN A,"; ;ON SEMI + JUMPGE LINK,RDWR2D ;ON NORMAL SCAN CAUSE SEMI TO BE REINPUT AND RET +REPT5: CAIN A,", ;IF COMMA + JUMPGE LINK,RDWR2 ;END THIS ARG +RDWR5: PUSHJ P,PUTREL ;NOTA, DEPOSIT THIS CHR + PUSHJ P,RCH ;GET NEXT CHR + JRST RDWR3 ;AND LOOP BACK,NOT CHECKING FOR [ OR \ + +RDWR2D: TLO I,UNRCHF + JRST RDWR2C + +RDWR7: MOVE A,LIMBO1 + CAIE A,15 + CAIN A,12 +RDWR2C: TLO LINK,SCEND ;SCAN ENDED +RDWR2: MOVE T,A ;RET LAST CHR IN T + TLNE LINK,RDRPTF ;ON REPEAT, + POPJ P, ;THATS ALL RETURN +RDWR2A: HRL A,PUTCNT ;SAVE COUNT OF LENGTH THIS ARG IN CHRS + HRR A,RDWRDP + HLLM A,-1(A) +STPWR: MOVEI A,375 ;WRITE STOP CODE + +PUTREL: MOVE CH1,FREEPT ;STORE CHR IN A IN MACRO TABLE + IDIVI CH1,4 + DPB A,PTAB(CH2) + AOS A,FREEPT + AOS PUTCNT + CAIGE A,+*4 + POPJ P, + MOVEM A,GCHI + + +GC: MOVEM 17,GCSV+15 + MOVE 17,[(2)GCSV + BLT 17,GCSV+14 + CLEARB T,GCENDF + MOVEI A,3 + MOVEM A,REDPT + MOVEM A,FREEPT + SETOM CPTRB + MOVE A,[(141000)MACTAB + MOVEM A,FREPTB + MOVEM A,REDPTB + +SYMMG: MOVSI A,-SMK + LDB B,[(400400)ST(A) + CAIN B,PSUDO_-14. + JRST SYMMG1 +SYMMG2: AOS A + AOBJN A,SYMMG+1 + MOVEM T,SYMSTR + +MSTG: MOVE C,REDPT + MOVE TT,FREEPT + MOVEM TT,FREPTS + MOVE TT,FREPTB + MOVEM TT,FRPTBS + PUSHJ P,RDTRNS + MOVE TT,B +MSTG1: CAML LINK,GCHI + JRST GCEND + CAIN B,375 + JRST MSTG2 +MSTG1B: PUSHJ P,RDTRNS + JRST MSTG1 + +ADDTR1: CLEARM PUTCNT +ADDTRN: MOVE A,FREEPT +ADDTR2: MOVEM A,@RDWRDP + AOS A,RDWRDP + CAIL A,DSTG+DSSIZ + (SIXBIT /TMA/) +CRDWR7: POPJ P,RDWR7 + +RDWR6: SOS RDWRDP + PUSH P,LINK + PUSHJ P,AGETFD + (1000+SIXBIT/USM/) + POP P,LINK + MOVE CH1,A + PUSHJ P,ADDTR1 + PUSH P,CRDWR7 +RDWR6A: LSHC CH1,-35. + LSH CH2,-1 + DIV CH1,ARADIX + HRLM CH2,(P) + JUMPE CH1,.+2 + PUSHJ P,RDWR6A + HLRZ A,(P) + ADDI A,60 + JRST PUTREL + + +RDWR1: TDZA C,C +RDWR1A: PUSHJ P,PUTREL + PUSHJ P,RCHCNT + JRST RDWR1A + + TLNE LINK,RDRPTF + JRST RDWR2 + +RDWR2B: PUSHJ P,RCH + TLO I,UNRCHF + CAIE A,15 + CAIN A,12 + TLO LINK,SCEND+LCRIND + JRST RDWR2 + + + +PUT1: IDIVI CH1,4 + DPB A,PTAB(CH2) + POPJ P, + + +RDTRNS: ILDB B,REDPTB + IDPB B,FREPTB + AOS LINK,REDPT + AOS A,FREEPT + CAILE A,*4-10 + (SIXBIT /MCE/) + POPJ P, + + + +SYMMG1: HRRZ B,ST+1(A) + CAIE B,MACCL + JRST SYMMG2 + HRRM T,ST+1(A) + MOVEI T,ST+1(A) + JRST SYMMG2 + +GCEND: SETOM GCENDF +MSTG2: CLEARM SVF + MOVE D,REDPT + SUB D,FREEPT + MOVEM D,COFST + MOVE B,REDPT + CAIE TT,374 + JRST MSTG3 ;NOT A MACRO + MOVE T,SYMSTR + JUMPE T,MSTG3 +MSTG5: HLRZ TT,(T) + CAML TT,C + CAML TT,B + JRST MSTG4 + SETOM SVF + SUB TT,COFST + HRLM TT,(T) +MSTG4: HRRZ T,(T) + JUMPN T,MSTG5 + +MSTG3: MOVE T,TOPP + MOVEI CH1,DMYAGT + PUSHJ P,MSCN + HRRZ T,MACP + HRROI CH1,MACPDL + PUSHJ P,MSCN + HRRZ T,PRCALP + AOS T + MOVEI CH1,PRSTG + PUSHJ P,MSCN + HRRZ T,RDWRDP + MOVEI CH1,DSTG + PUSHJ P,MSCN + + +MSTG13: SKIPGE GCENDF + JRST GCEND1 + MOVE TT,FREPTS + SKIPL SVF + MOVEM TT,FREEPT + MOVE TT,FRPTBS + SKIPL SVF + MOVEM TT,FREPTB + JRST MSTG +GCEND1: +USYMG: MOVE T,SYMSTR + MOVEI A,MACCL + JUMPE T,USYMG1 + HRRZ TT,(T) + HRRM A,(T) + MOVE T,TT + JRST USYMG+2 + +USYMG1: MOVS 17,[(2)GCSV + BLT 17,17 + POPJ P, + +MSCN: CAIG T,(CH1) + POPJ P, + HRRZ TT,-1(T) + CAML TT,C + CAML TT,B + JRST MSCN1 + SUB TT,COFST + HRRM TT,-1(T) + SETOM SVF +MSCN1: SKIPGE CH1 + SOS T + SOJA T,MSCN + +MACCL: MOVSI 17,-14 ;MACRO EXPANSION TIME + PUSH P,2(17) + AOBJN 17,.-1 + AOS PRCALP + AOS MDEPTH + PUSH P,RDWRDP + MOVEI LINK,0 + HLRZ A,B + PUSHJ P,REDINC + CAIE B,374 + (SIXBIT /IAE/) + PUSHJ P,REDINC + SKIPN B + TLO I,UNRCHF ;SAVE CHR FOLLOWING MACRO W/NO ARGUEMENTS + MOVEM A,@PRCALP + MOVE A,LIMBO1 + CAIE A,15 + CAIN A,12 + JRST MAC2A + JUMPE B,MAC4 + TRZE B,200 + TLO LINK,LNSCN +MAC3: PUSH P,B + TLNE LINK,LNSCN + SOJE B,MAC3A +MAC3B: PUSHJ P,RDWRDA + POP P,B + TLNE LINK,SCEND + SOJA B,MAC2 + SOJG B,MAC3 +MAC4: MOVE A,@PRCALP +MAC1: PUSHJ P,REDINC + MOVEM A,@PRCALP + JUMPE B,MAC1A +MAC5: PUSH P,B + TLNE LINK,SCEND + PUSHJ P,GENSYM + TLNN LINK,SCEND + PUSHJ P,RDWRDA î POP P,B + SOJG B,MAC5 + +MAC1A: MOVEI B,RCHSV1 + PUSHJ P,PUSHEM + MOVE A,@PRCALP + MOVEM A,CPTR + POP P,A + PUSHJ P,DMYTRN + SOS PRCALP +MACC2: MOVSI 17,-13(P) + HRRI 17,2 + BLT 17,15 +MACC1: SUB P,[(14)14 +MACCR: POP P,A + HRRZS A + CAIE A,GETFD6 + (SIXBIT /IAE/) + JRST GETFD1 + +MAC2A: TLO LINK,SCEND + TRZ B,200 +MAC2: SOJL B,MAC4 + MOVEI A,0 + PUSHJ P,ADDTR2 + JRST MAC2 + +MAC3A: TLO LINK,ALNSCN+400000 + JRST MAC3B + +GENSYM: PUSHJ P,ADDTR1 + MOVEI A,5 + MOVEM A,SCKSUM + î MOVEI A,"G + PUSHJ P,PUTREL + PUSH P,[RDWR2A + AOS A,GENSM + IDIVI A,10 + HRLM B,(P) + SOSLE SCKSUM + PUSHJ P,.-3 + HLRZ A,(P) + ADDI A,60 + JRST PUTREL + +DMYTRN: MOVE B,TOPP + MOVEM B,BBASE + PUSH P,A +DMYTR2: CAML A,RDWRDP + JRST DMYTR1 + MOVE B,(A) + MOVEM B,@TOPP + AOS B,TOPP + CAIL B,TOPPP + (SIXBIT /TMD/) + AOJA A,DMYTR2 +DMYTR1: POP P,RDWRDP + POPJ P, + +A.GSYL: MOVNI D,100000 + MOVEM D,STRCNT + TDZA SYM,SYM +GSYL: CLEARB SYM,STRCNT + MOVEI D,6 + MOVE T,[(440700)STRSTO + MOVEM T,STRPNT +GSYL3: AOSG A,STRCNT + JRST GSYL2 + PUSHJ P,RCH + IDPB A,STRPNT +GSYL2A: CAIN A,". + JRST GSYL1C + HLRZ CH1,GDTAB(A) + CAIN CH1,(JSP CH2,) + JRST GSYL1A ;NUMBER + PUSHJ P,GSYL1B ;RETURN ONLY ON SYL SEP + HRRZ A,GDTAB(A) + MOVE T,LIMBO1 +C%: POPJ P,"% + +GSYL2: ILDB A,A.GST3 + TRZN A,200 + JRST GSYL2A + CAIG A,100 + JRST GSYL2 + HRROI T,(A) + POPJ P, + + +GSYL1B: XCT GDTAB(A) ;POPJ FOR SYL SEPS + SUB P,[1,,1 +GSYL1D: SOJGE D,GSYL3 + AOJA D,GSYL3 + +GSYL1C: ADD SYM,%.SQ(D) + JRST GSYL1D + +GSYL1A: XCT NSQTB-60(A) + JRST GSYL1D + + +STRTYP: PUSHJ P,REDINC ;DEBUGGING AID ONLY + EXCH A,B + TRZE A,200 + JRST STRTP1 +STRTP2: PUSHJ P,TYO" + MOVE A,B + JRST STRTYP + +STRTP1: PUSH P,A + MOVEI A,"* + PUSHJ P,TYO + POP P,A + TRNE A,100 + JRST STRTP3 + ADDI A,260 + JRST STRTP2 + +STRTP3: CAIN A,175 + SKIPA A,C% + MOVEI A,"/ + JRST STRTP2 + + +WRTSS: MOVE T,[(440700)STRSTO + MOVE B,STRCNT + SOJL B,CPOPJ + ILDB A,T + PUSHJ P,PUTREL + JRST .-3 + +ADEFINE: MOVEI A,DMYDEF + MOVEM A,DMYTOP + PUSHJ P,GETSYL + JUMPE SYM,.-1 + MOVEM SYM,MACNM + MOVE A,FREEPT + MOVEM A,PRDEF + CLEARB LINK,B + MOVEI A,374 + PUSHJ P,PUTREL + MOVE T,LIMBO1 +DEFNC: CAIE T,12 + CAIN T,15 + JRST DEFNA + CAIN T,"\ + JRST DEFNB + CAIN T,"/ + JRST DEFNE +DEFND: PUSHJ P,PDEF + JUMPE SYM,DEFNC + AOJA B,DEFNC +DEFNE: TRO B,200 +DEFNB: MOVE A,B + PUSHJ P,PUTREL + MOVEI B,0 + TRO LINK,GENF + JRST DEFND + +DEFNA: MOVE A,B + PUSHJ P,PUTREL + MOVEI A,0 + TRNN LINK,GENF + PUSHJ P,PUTREL + PUSHJ P,RCH + CAIE A,12 + TLO I,UNRCHF + PUSHJ P,WRQOTE + PUSHJ P,STPWR + MOVE SYM,MACNM + PUSHJ P,ES + JFCL + MOVEI B,MACCL + HRL B,PRDEF + CLEARM PRDEF + MOVSI C,77 + MOVSI T,PSUDO + PUSHJ P,VSM2 + JRST ASSEM1 + +;ADD A NAME TO THE DUMMY DEFINITION TABLE +PDEF: PUSHJ P,GSYL ;READ IN SYL + CAIE T,", ;IF DELIMITING CHR NOT , + JUMPE SYM,CPOPJ ;AND SYM NULL, RETURN + MOVEM SYM,@DMYTOP ;STORE SYM + AOS A,DMYTOP ;INCR PNTR + CAIL A,DMYDEF+DMDEFL ;CHECK FOR TABLE SIZE EXCEEDED + (SIXBIT /TMD/) ;YES + POPJ P, + +WRQOTE: CLEARM DCNT + PUSHJ P,GSYL + PUSHJ P,ES + MOVEI A,0 + MOVE TT,A + CAIE A,PSUDO/40000 + JRST WRQOT4 + HRRZS B + CAIN B,A.QOTE + JRST A.QOT1 +WRQOT4: JUMPE SYM,WRQOT1 + MOVEI A,DMYDEF + CAML A,DMYTOP + JRST WRQOT2 + CAME SYM,(A) + AOJA A,.-3 + SUBI A,DMYDEF + PUSH P,A ;FLUSH ! S WHEN THEY DO WORK + MOVE A,FREEPT + SOS A + PUSHJ P,REDINC + CAIE B,"! + JRST WRQOT5 + SOS FREEPT + SOS PUTCNT +WRQOT5: POP P,A + TRO A,200 + PUSHJ P,PUTREL + MOVE A,T + CAIE A,"! + PUSHJ P,PUTREL + JRST WRQOTE+1 +WRQOT2: CAIE TT,PSUDO/40000 + JRST WRQOT1 + CAIE B,ADEFINE + CAIN B,AIRP + AOS DCNT + CAIN B,ATERMIN + SOSL DCNT + JRST WRQOT1 + POPJ P, + +WRQOT1: PUSHJ P,WRTSS + JRST WRQOTE+1 + +A.QOT1: MOVE A,LIMBO1 + CAIN A,40 + PUSHJ P,RCH + MOVEM A,A.QOT2 +A.QOT3: PUSHJ P,RCH + CAMN A,A.QOT2 + JRST WRQOTE+1 + PUSHJ P,PUTREL + JRST A.QOT3 + +AREPEAT: MOVE A,FREEPT + MOVEM A,PRREPT + PUSHJ P,AGETFD + (1000+SIXBIT /USR/) + JUMPLE A,COND4 ;NO REPEAT PLAY LIKE STRING COND FALSE + PUSH P,A + MOVEI A,373 ;CHECK CHAR FOR REPEAT + PUSHJ P,PUTREL ;STORE AS FIRST CHR OF BODY + MOVSI LINK,400000+RDRPTF + PUSHJ P,RDWRDA+1 + MOVEI A,15 + CAIE T,"] + PUSHJ P,PUTREL +SWRET1: PUSHJ P,STPWR ;ALSO RETURN FROM STRING WRITE (.F .I) + POP P,B + PUSHJ P,PUSHEM + MOVEI B,REPT1 + PUSHJ P,PUSHEM + MOVE A,PRREPT + CLEARM PRREPT + MOVE B,MACP + HRRM A,-1(B) + HRRZ A,CRPTCT + HRLM A,-1(B) + SETOM CRPTCT + CLEARM CPTR + JRST MACCR + +A.IRPCNT: SKIPA A,CIRPCT +A.RPCNT: MOVE A,CRPTCT + JRST CLBPOP + +IFE TS,[ +AFN1: SKIPA A,FNAM1" +AFN2: MOVE A,FNAM2" + JRST CLBPOP +] + +IFN TS,[ +AFN1: SKIPA A,RFNAM1 +AFN2: MOVE A,RFNAM2 + JRST CLBPOP +] + +REPT1: PUSH P,A + PUSH P,C + HRRZ A,(B) + MOVEM A,REPTTM + PUSHJ P,REDINC + CAIE B,373 + (SIXBIT /IAE/) + HRRZ C,MACP + HRRZ B,-2(C) + SOJL B,REPT2 + AOS CRPTCT + MOVEM A,CPTR + SETOM CPTRB + HRRM B,-2(C) +REPT3: POP P,C + POP P,A + JRST REPT6 + + +A.STOP: HRRZ A,MACP + JUMPL B,A.STP1 + HRRZ B,(A) + CAIN B,AIRP4 + HRRZS -1(A) +A.STP1: CLEARM CPTR + SETOM CPTRB + JRST ASSEM1 + +REPTTM: 0 +REPT2: MOVE B,REPTTM + MOVE A,CPTR + SKIPL CRPTCT + CAMN A,FREEPT + MOVEM B,FREEPT + MOVE A,[-3,,-2] + ADDB A,MACP + HLRZ A,1(A) + MOVEM A,CRPTCT + +REPT4: PUSHJ P,POPEM + JRST REPT3 + +BGETFD: SETOM FLDCNT +AGETFD: MOVE CH1,@(P) + MOVEM CH1,GTVER + PUSH P,I + TRO I,PSEUDF +AGTFD3: PUSHJ P,GETFLD + MOVE CH1,LIMBO1 + CAIE CH1,12 + CAIN CH1,15 + JRST .+3 + TRNN I,FLD + JRST AGTFD3 + TLNE I,MWRD + JRST AGTFD1 +AGTFD2: MOVEM I,ISAV ;SAVE FLAGS FOR FLD GOTTEN + POP P,I + AOS (P) + POPJ P, + +AGTFD1: PUSH P,A + PUSHJ P,GETFLD + TLNE I,MWRD + JRST .-2 + POP P,A + JRST AGTFD2 + +COND: HRRI B,COND2 + PUSH P,B + PUSHJ P,AGETFD + (1000+SIXBIT /UCD/) + POP P,T + XCT T ;JUMP IF COND T,ASSEMBLE STRING +COND4: PUSHJ P,RCH + CAIN A,"[ + JRST COND3 +ANULL: TLO I,UNRCHF + PUSHJ P,RCH + CAIE A,15 + JRST .-2 + JRST ANULL1 + +COND3: MOVEI C,0 + PUSHJ P,RCHCNT + JRST .-1 + JRST MACCR + +COND2: PUSHJ P,RCH + CAIE A,"[ +ANULL1: TLO I,UNRCHF + JRST MACCR + +COND1: HRRI B,PSS + XCT B + JRST COND4 ;NO + JRST COND2 + +SWINI: MOVE A,FREEPT + MOVEM A,PRREPT + MOVEI A,373 + JRST PUTREL + +SWRET: PUSH P,[1] ;REPEAT COUNT + JRST SWRET1 + +SWFLS: MOVE A,PRREPT ;FLUSH RETURN + MOVEM A,FREEPT + JRST MACCR + +SCOND: MOVE A,FREEPT + MOVEM A,PRSCND + MOVEM A,PRSCN1 + HRRI B,SCONDF + MOVEM B,SCINST + MOVEI LINK,0 + PUSHJ P,RDWRDA+1 + SETOB C,SCONDF + PUSHJ P,RCH + CAIN A,"[ + MOVEI C,0 + SKIPN C +SCND2A: PUSHJ P,RCH +SCOND2: JUMPGE C,SCOND1 + CAIN A,", + JRST SCOND3 +SCOND6: EXCH A,PRSCND + PUSHJ P,REDINC + EXCH A,PRSCND + CAMN B,A + JRST SCND2A +SCOND4: CLEARM SCONDF +SCOND5: PUSHJ P,RCH + JUMPGE C,SCOND7 + CAIE A,", + JRST SCOND5 +SCOND3: CLEARB A,C + EXCH C,PRSCN1 + MOVEM C,FREEPT + EXCH A,PRSCND + PUSHJ P,REDINC + CAIE B,375 + CLEARM SCONDF + XCT SCINST + JRST COND4 + JRST COND2 + +SCOND1: PUSHJ P,QSCNT + JRST SCOND6 + JRST SCOND3 + +SCOND7: PUSHJ P,QSCNT + JRST SCOND4+1 + JRST SCOND3 + +RCHCNT: PUSHJ P,RCH +QSCNT: CAIN A,"[ + AOJA C,CPOPJ + CAIN A,"] + SOJL C,POPJ1 + POPJ P, + +AIRP: MOVSI 17,-14 + PUSH P,2(17) + AOBJN 17,.-1 + PUSH P,RDWRDP + HLLZM B,AIRPT + CLEARB LINK,IRPCR + MOVEI A,DMYDEF + MOVEM A,DMYTOP + +AIRP1: PUSHJ P,PDEF + CAIE T,", + JUMPE SYM,AIRP2 + PUSHJ P,PDEF + MOVEI A,377 + MOVSI TT,200000 + TDNE TT,AIRPT + PUSHJ P,PUTREL +AIRPS6: PUSHJ P,ADDTRN + MOVEI A,377 + PUSHJ P,PUTREL + PUSHJ P,RDWRDA + MOVE A,RDWRDP + SOS -1(A) + MOVSI TT,200000 + TDNE TT,AIRPT + SOS -1(A) + AOS IRPCR + TLNN LINK,SCEND + JRST AIRP1 + + TLNE LINK,LCRIND + TLZ I,UNRCHF ;FLUSH CR + +AIRP2: MOVE A,FREEPT + MOVEM A,PRIRP + PUSHJ P,RCH + CAIE A,12 + TLO I,UNRCHF + PUSHJ P,WRQOTE + PUSHJ P,STPWR + PUSHJ P,PUSHEM + POP P,A + PUSH P,TOPP + PUSHJ P,DMYTRN + MOVE B,MACP + MOVE A,CIRPCT + HRRM A,(B) + SETOM CIRPCT + MOVS A,IRPCR + HRR A,PRIRP + IOR A,AIRPT + PUSH B,A + POP P,A + HRLS A + HRRI A,AIRP4 + PUSH B,A + MOVEM B,MACP + CLEARM CPTR + JRST MACC2 + + +AIRP4: PUSH P,A + PUSH P,C + PUSH P,T + PUSH P,TT + AOS CIRPCT + HRRZ A,(B) + MOVEM A,CPTR + SETOM CPTRB + SETOM AIRPT + TRNE FF,MRSW + JRST AIRP9 + HLRZ T,1(B) + LDB C,[(220600+B) + JUMPE C,AIRP9 + SKIPGE TT,(B) + JRST AAIRPC +AIRP6: SETOM AIRPT1 + HRRZ A,(T) +AIRP6A: PUSHJ P,REDINC + CAIN B,375 + JRST AIRP10 + CAIE B,377 + JRST AIRP6A + SETOM AIRPT2 +AIRP7E: MOVEM A,(T) +AIRP7: PUSHJ P,REDINC + CAIN B,375 + JRST AIRP5 + TLNE TT,200000 + JRST AIRPS2 + CLEARM AIRPT + CAIN B,"[ + AOSE AIRPT2 + JRST AIRP7A +AIRP7C: MOVEI B,376 + DPB B,PTAB(CH2) + JRST AIRP7 +AIRP7A: SKIPL AIRPT2 + CAIE B,"] + JRST AIRP7B + SOSGE AIRPT2 + JRST AIRP7C +AIRP7B: CAIN B,15 + JRST AIRP7D + CAIE B,12 + CAIN B,", + SKIPL AIRPT2 + JRST AIRP7 +AIRPS1: MOVEI CH1,-1(A) + IDIVI CH1,4 + MOVEI B,377 + DPB B,PTAB(CH2) + TLNN TT,200000 + MOVEM A,1(T) +AIRP8: ADDI T,2 + SOJG C,AIRP6 +AIRP9: POP P,TT + POP P,T + SKIPL AIRPT + JRST REPT3 + MOVE A,[-3,,-2 + ADDB A,MACP + HRRZ A,(A) + MOVEM A,CIRPCT + POP P,C + POP P,A + JRST RCHSAV + + +AIRPS2: CAIL B,101 + CAILE B,132 + JRST AIRPS3 +AIRPS4: CLEARM AIRPT + CLEARM AIRPT1 + JRST AIRP7 + + AIRPS3: CAIG B,71 + CAIGE B,60 + CAIN B,"$ + JRST AIRPS4 + CAIE B,"% + CAIN B,". + JRST AIRPS4 + CAIN B,"! + JRST AIRPS4 + SKIPGE AIRPT1 + JRST AIRP7E + HRRZ CH1,1(T) + IDIVI CH1,4 + DPB B,PTAB(CH2) + JRST AIRPS1 + +AIRP7D: SKIPL AIRPT2 + JRST AIRP7 + JRST AIRP7C + +AIRP10: CLEARM (T) +AIRP5: CLEARM 1(T) + JRST AIRP8 + +AAIRPC: MOVE A,(T) + PUSHJ P,REDINC + CAIN B,375 + JRST AIRPC3 + CAIE B,377 + JRST AAIRPC+1 + MOVEM A,1(T) + PUSHJ P,REDINC + CAIN B,375 + JRST AIRPC3 + CLEARM AIRPT + MOVEI CH1,-2(A) + MOVEM CH1,(T) + IDIVI CH1,4 + DPB B,PTAB(CH2) + MOVEI B,377 + DPB B,PTAB+1(CH2) + AOS 1(T) + ADDI T,2 +AIRPC2: SOJG C,AAIRPC + JRST AIRP9 + +AIRPC3: CLEARM (T) +AIRPC1: CLEARM 1(T) + JRST AIRPC2-1 + +COLON: TLNN I,WRDF + TRNN I,SYL + (5000+SIXBIT /ILF/) + TRNN I,OPFLD+PSEUDF + TRNN I,LET + (5000+SIXBIT /ILT/) + TLNE FF,INDEFF + (5000+SIXBIT /CLI/) + MOVE T,CLOC + SKIPGE BYTM + HLL T,BYTWP + ADD T,OFLOC + MOVEM T,WRD + EXCH T,SYLOC + MOVEM T,SYLOC1 + EXCH SYM,SYSYM + MOVEM SYM,SYSYM1 + MOVE SYM,SYSYM + MOVE A,CRLOC + ADD A,OFRLOC + HRRZM A,WRDRLC + CLEARM PARBIT + SKIPN LDCCC + TRNE FF,GLOLOC + JRST GCOL1 + PUSHJ P,ES + JRST EQL1A + PUSH P,C + TLZ C,777700 + JUMPE C,COLON5 + CAME C,[(77) + CAMN C,LEV + JRST COLON1 + JRST COLON2 +COLON1: POP P,C + JRST .+1(A) + (5000+SIXBIT /MDT/) ;COMMON + (5000+SIXBIT /RES/) ;MACRO OR PSEUDO + JRST COLON4 ;SYM + JRST EQL1C ;LOCAL UNDEF + (5000+SIXBIT /MDT/) + (5000+SIXBIT /MDT/) + (5000+SIXBIT /MDT/) + (5000+SIXBIT /MDT/) + JRST EQL1E ;GLOBAL ENTRY + JRST EQL1E ;GLO EXIT + + +COLON4: CAME B,WRD + JRST COL4E + PUSHJ P,RCHK + JUMPN C,.+2 + CAME B,WRDRLC +COL4E: (5000+SIXBIT /MDT/) ;MDGS +CASSM1: JRST ASSEM1 + + +COLON5: CAIE A,2 + JRST COLON1 + JRST COLON2 + + ;COLON WHEN LOCATION VIRTUAL + +GCOL1: PUSHJ P,ES + JRST GCOL2 ;NOT ALREADY DEFINED + PUSH P,A + CAIE A,GLOEXT_14. + TLNE I,GLI + TLO SYM,40000 + PUSHJ P,LKPNRO + TLZ SYM,40000 + POP P,A + CAIE A,GLOETY_-14. + CAIN A,GLOEXT_-14. + JRST GCOL3 + TLNN I,GLI + JRST GCOL4 + PUSHJ P,PLOGLO +GCOL3: MOVSI T,GLOETY + TLOA SYM,40000 +GCOL4: MOVSI T,LCUDF +GCOL5: PUSHJ P,VSM2LV + PUSH P,C1ASSEM1 + +PDEFPT: PUSHJ P,PBITS7 + MOVEI A,CDEFPT + PUSHJ P,PBITS + JRST OUTSM + +C1ASSEM1: +GCOL2: SETZI B,ASSEM1 + MOVE C,LEV + TLNN I,GLI + JRST GCOL4 ;SYM NOT FOLLOWED BY " + MOVSI C,77 + JRST GCOL3 + +CNSTNT: PUSH P,CASSM1 + SOSGE CONCNT + (SIXBIT /TCA/) ;TOO MANY CONSTANTS AREAS + MOVE B,CLOC + ADD B,OFLOC + HRRZ T,PBCON + TRNE FF,PSS + JRST CNST2 + HRRM B,1(T) + MOVEI D,0 + MOVE A,CRLOC + ADD A,OFRLOC + TRNE A,-1 + TLO D,CTRL + TRNE FF,GLOLOC + TLO D,CGBAL + IORM D,2(T) + +CNST1: MOVE SYM,(T) + TRNE FF,GLOLOC + PUSHJ P,PDEFPT +CNST1B: MOVEI A,CONTAB +CNSTH: CAML A,PLIM + JRST CNSTA ;THRU + MOVE TT,(A) + MOVEM TT,WRD + PUSHJ P,CPTMK + LDB F,C + TRZE F,2 + TLO F,1 + MOVEM F,WRDRLC + MOVEI D,GLOTB + MOVEM D,GLSP2 + MOVEI C,CONGLO +CNSTC: CAML C,CONGOL + JRST CNSTB + CAME A,1(C) + JRST .+4 + AOS D + MOVE B,(C) + MOVEM B,(D) + AOS C + AOJA C,CNSTC + +CNSTB: MOVEM D,GLSP1 + PUSH P,A + PUSHJ P,PWRD + AOS CLOC + POP P,A + AOJA A,CNSTH + + +CNST2: MOVSI A,CGBAL + TDZ A,2(T) + TRNE FF,GLOLOC + TLC A,CGBAL + SKIPN A + (SIXBIT /CVD/) + HRRZ B,1(T) + SUB B,OFLOC + HRRZS B + CAME B,CLOC + (SIXBIT /CLD/) + MOVE B,2(T) + ROT B,2 + XOR B,CRLOC + XOR B,OFRLOC + TRNE B,1 + (SIXBIT /CRD/) + JRST CNST1 + + +CNSTA: HRRZ T,PBCON + TRNE FF,GLOLOC + JRST CNSTD + TRNN FF,NPSS + SKIPGE 2(T) + JRST CNSTDA + TRO I,CONT + PUSHJ P,P70 + MOVE A,(T) + SKIPE CRLOC + TLO A,100000 + PUSHJ P,OUTPUT + HRRZ A,1(T) + PUSHJ P,OUTPUT + TRZ I,CONT +CNSTDA: MOVSI A,CTDEF + IORM A,2(T) +CNSTD: TRNE FF,PSS + JRST CNST3 + + MOVE A,CLOC + HRLM A,1(T) + +CNSTE: MOVEI A,CONTAB + MOVEM A,PLIM + MOVEI A,CONGLO + MOVEM A,CONGOL + MOVEI T,3 + ADDB T,PBCON + CAML T,PBCONL + MOVEM T,PBCONL + AOS A,CSQZ + MOVEM A,(T) + POPJ P, + +CNST3: PUSHJ P,EBLK + HLRZ A,1(T) + MOVEM A,CLOC + JRST CNSTE + +CONBUG: MOVEI A,CONGLO ;B VAL C FLAGS ST(D) SADR + PUSH P,T + PUSH P,C +CONBG2: MOVE C,(P) + CAML A,CONGOL + JRST CONBG1 + HRRZ F,(A) + CAIE F,ST(D) + AOJA A,CONBG6 + PUSH P,B + MOVE T,(A) + LDB CH2,[(221200)T + SKIPE CH2 + IMUL B,CH2 + TLNE T,MINF + MOVNS B + TLNE T,HFWDF + HRRZS B + TLNE T,ACF + ANDI B,17 + TLNE T,SWAPF + MOVSS B + TLNE T,ACF + LSH B,5 + ADD B,@1(A) + TLNN T,SWAPF + HRRM B,@1(A) + TLNE T,SWAPF + HLLM B,@1(A) + TLNN T,HFWDF + MOVEM B,@1(A) + LDB CH1,[420200+P,,-1 + TLNE T,HFWDF + TRZ CH1,2 + TLNE T,SWAPF + LSH CH1,1 + TRZE CH1,4 + TRO CH1,1 + PUSH P,A + HRRZ A,1(A) + PUSHJ P,CPTMK + LDB B,C + TLNE T,MINF + JRST CONBG8 + TRNE B,(CH1) + (5000+SIXBIT /CRI/) + IOR B,CH1 +CONB8A: DPB B,C + POP P,A + CLEARM (A) + CLEARM 1(A) + POP P,B + AOS A + +CONBG6: AOJA A,CONBG2 + +CONBG1: MOVEI A,CONGLO + PUSH P,B + MOVEI B,CONGLO +CONBG7: CAML A,CONGOL + JRST CONBG3 + SKIPN C,(A) +CONBG5: AOJA A,CONBG4 + MOVEM C,(B) + MOVE C,1(A) + MOVEM C,1(B) + AOS B + AOJA B,CONBG5 + +CONBG4: AOJA A,CONBG7 +CONBG3: MOVEM B,CONGOL + POP P,B + POP P,C + POP P,T + POPJ P, +CONBG8: XORI B,3 + TRNE B,(CH1) + (5000+SIXBIT /CRI/) + ANDCB B,CH1 + JRST CONB8A + +OPEN: MOVEM A,LSYL + MOVEM B,LSYLR + PUSH P,D + PUSHJ P,GETWRD + POP P,D + CAME D,LIMBO1 + TLNE I,MWRD + POPJ P, + MOVE D,LIMBO1 + CAIE D,15 + CAIN D,12 + POPJ P, + (2000+SIXBIT /ILC/) ;ILLEGAL CLOSE + POPJ P, + +LSSTH: MOVEI D,"> + JSP LINK,SAVWD1 + PUSHJ P,OPEN + TLNE I,MWRD + PUSHJ P,IGTXT +LSSTH3: JSP LINK,USVWLD + TLZE I,LSRET + JRST LSSTHR ;RETURN TO ^ OR _ + +LSSTH2: ADDM A,LSYL + MOVE A,LSYLR + PUSHJ P,HFWDAD + MOVEM A,LSYLR +LSSTH5: MOVE A,LIMBO1 + CAIE A,15 + CAIN A,12 + JRST LSSTH6 + PUSHJ P,RCH + CAIN A,"! + JRST .-2 + TLO I,UNRCHF + HLRZ CH1,GDTAB(A) + CAIE A,"_ + CAIN A,"] + JRST LSSTH7 + CAIE CH1,(POPJ P,) + JRST LSSTH4 + HRRZ CH1,GDTAB(A) + MOVE CH1,DTB-40(CH1) + CAIN A,"; + JRST LSSTH7 + TLNE CH1,DSYL + JRST LSSTH4 +LSSTH7: PUSHJ P,GETSYL +LSSTH6: TRO I,SYL + MOVE A,LSYL + MOVE B,LSYLR + POP P,LSYLR + POP P,LSYL + JRST GETFD6 + +LSSTH1: ADDM A,WRD + MOVE A,WRDRLC + PUSHJ P,HFWDAD + MOVEM A,WRDRLC + JRST LSSTH5 + +LSSTH4: SKIPN LSYL + SKIPE LSYLR + (2000+SIXBIT /NOS/) ;IMPROPER +( ... ) + POP P,LSYLR + POP P,LSYL + JRST GETFD1 + + +LSSTHR: POP P,LSYLR + POP P,LSYL + POPJ P, + +AVARIAB: PUSH P,CASSM1 + SOSG VARCNR + (SIXBIT /TVA/) + MOVSI D,-SMK + MOVE T,CLOC + MOVEM T,VCLOC + ADD T,OFLOC + MOVE C,CRLOC + ADD C,OFRLOC + TRNE FF,PSS + JRST AVAR1 + HRL T,VARCNT + TRNE C,-1 + TLO T,400000 + MOVEM T,@VARPNT + +AVAR2: 3GET C,D + MOVE B,ST+1(D) + MOVE SYM,ST(D) + TLZ SYM,740000 + LDB LINK,[(400400)ST(D) + CAIE LINK,UDEFLV_-14. + CAIN LINK,UDEFGV_-14. + JRST AVAR3 + CAIE LINK,DEFGVR_-14. + CAIN LINK,DEFLVR_-14. + JRST AVAR4 +AVAR2A: AOS D + AOBJN D,AVAR2 + HLRZ A,@VARPNT + TRZ A,400000 + ADD A,VCLOC + MOVEM A,CLOC + PUSHJ P,EBLK + CLEARM VARCNT + AOS VARPNT + POPJ P, + +AVAR3: CAIN LINK,UDEFGV_-14. + TLO SYM,40000 + PUSHJ P,LKPNRO + MOVSI T,DEFLVR + CAIN LINK,UDEFGV_-14. + MOVSI T,DEFGVR + TRNE FF,GLOLOC + JRST AVAR3A + MOVEI B,-1(B) + ADD B,VCLOC + ADD B,OFLOC + MOVE TT,CRLOC + ADD TT,OFRLOC + SKIPE TT + TLO C,3RLR + CAIE LINK,UDEFGV_-14. + TLZN C,3VCNT + SKIPA + PUSHJ P,CONBUG + PUSHJ P,VSM2 +AVAR4B: PUSHJ P,OUTDE2 + JRST AVAR2A + +AVAR1: HRRZ A,@VARPNT + CAIE A,(T) + (SIXBIT /VLD/) + HLRZ A,@VARPNT + TRZE A,400000 + XORI C,1 + TRNE C,-1 + (SIXBIT /VRD/) ;CAUSE ERROR ROUTINE TO PRINT OUT RIGHT LOCN + SKIPE VARCNT + (SIXBIT /VND/) + JRST AVAR2 + +AVAR4: TLNN C,3VAS2 + JRST AVAR2A + TLOE C,3VP + JRST AVAR2B + CAIN LINK,DEFGVR_-14. + TLO SYM,40000 + PUSHJ P,LKPNRO + TRNN FF,GLOLOC + JRST AVAR4A +AVAR3A: PUSHJ P,VSM2LV + PUSHJ P,PDEFPT + PUSHJ P,PBITSZ + PUSHJ P,OUTPUT +AVAR2B: TRNE FF,GLOLOC + AOS CLOC + JRST AVAR2A + +AVAR4A: CAIN LINK,DEFGVR_-14. + JRST AVAR4B + 3PUT C,D + JRST AVAR2A + +LEFTP: MOVEI D,") + JSP LINK,SAVWD1 + MOVEI C,0 + TRNE I,OPFLD + TRNE I,SYL + TLO C,400000 + PUSH P,C + PUSHJ P,OPEN + POP P,C + PUSHJ P,SWAP + MOVEM A,T1 + TLNE I,MWRD + PUSHJ P,IGTXT + JSP LINK,USVWLD + MOVE A,T1 + MOVEI B,0 + JUMPL C,LSSTH1 ;ADD TO WHOLE WORD + JRST LSSTH2 + + +LBRAK: TRO I,FLD + JSP LINK,SAVWD1 +LBRAK1: AOS CONDEP + MOVEI D,"] + PUSHJ P,OPEN +LBRAK3: SOS CONDEP +LBRAK2: MOVE F,GLSP1 + SUB F,GLSP2 + JUMPE F,SCON + MOVEI B,-1(F) + MOVN TT,B + JUMPE B,SCON +LSORT: HRL T,TT + HRR T,GLSP2 + MOVE A,1(T) + CAML A,2(T) + EXCH A,2(T) + MOVEM A,1(T) + AOBJN T,.-4 + SOJG B,LSORT + + +SCON: PUSHJ P,RCHKMV + ROT T,2 + TLNE I,MWRD+MWRD1 + JRST NOCON + MOVEI A,CONTAB +SCON1: CAML A,PLIM + JRST NOCON ;NO MATCH + MOVE B,WRD + CAME B,(A) +SCON2: AOJA A,SCON1 ;VAL DISAGREES + PUSHJ P,CPTMK + LDB F,C + CAME F,T + JRST SCON2 ;RLC DIFFRS + MOVEI B,CONGLO + SKIPA C,GLSP2 + AOS B + CAML B,CONGOL + JRST SCON3 + CAME A,1(B) +SCON7: AOJA B,.-4 + MOVE D,(B) + CAME D,1(C) + JRST SCON2 + AOJA C,SCON7 + +SCON3: CAME C,GLSP1 + JRST SCON2 +NOCON4: MOVE C,GLSP2 + MOVE B,PBCON ;BY GOD,THEY MATCH + SKIPL 2(B) + AOJA C,SCON4 ;CONST AREA UNDEF + MOVEM C,GLSP1 ;DEF + MOVE C,1(B) + ADDI A,(C) + LDB B,[(420100+B)2 + JRST SCON6 + +SCON4: TLNE I,MWRD + TLNN I,MWRD1 + JRST .+2 + JRST SCON6A + MOVEM C,GLSP1 + MOVEM B,(C) +SCON6A: MOVEI B,0 +SCON6: SUBI A,CONTAB + TLZE I,MWRD1 + JRST SCOM1 + TLNN I,MWRD + JRST LSSTH3 + PUSH P,A + PUSH P,B + PUSH P,GLSP1 + PUSH P,GLSP2 + PUSHJ P,.+1 +SCOM2: TLO I,MWRD1 + MOVEI D,"] + AOS CONDEP + PUSHJ P,OPEN+2 + JRST LBRAK3 +SCOM1: TLNE I,MWRD + JRST SCOM2 + MOVEI TT,SCOM2 + JSP LINK,POPLIS + JRST LSSTH3 + +NOCON: AOS A,PLIM + CAIL A,CONTAB+LCONTB+1 + (SIXBIT /TMC/) +NOCON2: MOVE AA,WRD + MOVEM AA,-1(A) + SOS A + PUSHJ P,CPTMK + DPB T,C + MOVE B,GLSP2 +NOCON3: CAML B,GLSP1 + JRST NOCON4 + MOVE C,1(B) + MOVEM C,@CONGOL + HRRZS C + PUSHJ P,NOCON5 + 3GET1 D,C + TLO D,3VCNT + MOVEM A,@CONGOL + PUSHJ P,NOCON5 + CAIL C,CONTAB + AOJA B,NOCON3 + 3PUT1 D,C + AOJA B,NOCON3 + +CONST3: PUSHJ P,EBLK + HLRZ A,1(T) + MOVEM A,CLOC + JRST CNSTE + + +NOCON5: AOS AA,CONGOL + CAIL AA,CONGLO+LCNGLO + (SIXBIT /TMC/) + POPJ P, + +CPTMK: PUSH P,A + SUBI A,CONTAB + PUSH P,B + IDIVI A,18. + MOVEI C,CONBIT(A) + DPB B,[(370500)C + TLO C,200 + POP P,B + JRST POPAJ + +INIT": HRRM A,RETURN + SKIPGE ISYMF + JRST INIT1 + MOVSI A,-SMK +INIT4: SKIPN B,ST(A) + JRST INIT2 + 3GET C,A + TLNN C,3INI ;INITIAL SYM + CLEARM ST(A) +INIT2: AOS A + AOBJN A,INIT4 + MOVSI A,-LCONTB-LCONTB/18.-NCONS*3 + CLEARM CONBIT(A) + AOBJN A,.-1 + +SP4: PUSH P,CRETN +P1INI: CLEARB I, LDCCC + CLEARM BKBUF + CLEARM STGSW + TDZ FF,[-1-VOT-PTPF,,-1] ;INITIALIZE MOST FF FLAGS + CLEARM ISYMF + CLEARM MDEPTH + MOVEI A,DMYAGT + MOVEM A,TOPP + MOVEM A,BBASE + MOVE A,[-MPDLL,,MACPDL] + MOVEM A,MACP + MOVEI A,3 + MOVEM A,FREEPT + MOVEI A,CONGLO + MOVEM A,CONGOL + MOVEI A,PCNTB + MOVEM A,PBCONL + MOVSI A,2 + MOVEM A,LEV + MOVE A,[SQUOZE 0,.MAIN + MOVEM A,PRGNM + MOVE A,[PUSHJ P,RPA" + MOVEM A,GETCHR + +P2INI: MOVEI A,1 + MOVEM A,CPGN + MOVEM A,CLNN + TLZ FF,INDEFF + CLEARM GENSM + MOVEI A,NCONS + MOVEM A,CONCNT + MOVEI A,VARTAB + MOVEM A,VARPNT + MOVEI A,NVARS + MOVEM A,VARCNR + CLEARM OFLOC + CLEARM OFRLOC + CLEARM VARCNT + CLEARM PBITS2 + MOVE A,[(440300)PBITS1 + MOVEM A,BITP + MOVEI A,PBITS4 + HRRZM A,PBITS4 + CLEARB I,PBITS1 + MOVEI A,CONTAB + MOVEM A,PLIM + MOVEI A,PCNTB + MOVEM A,PBCON + MOVE A,[34773600001 + MOVEM A,PCNTB + AOS A + MOVEM A,CSQZ + MOVEI A,10 + MOVEM A,ARADIX + MOVEI A,100 + MOVEM A,CLOC + CLEARM CRLOC + MOVEI A,BKBUF+1 + MOVEM A,OPT1 + TRO FF,IPSYMS+FIRWD + CLEARM CRPTCT + CLEARM SYLOC + CLEARM SYSYM + CLEARM BYTW ;CLEAR BYTE MODE WORD + MOVE A,[IFORTB,,FORTAB] ;INITIALIZE FORMAT TABLE ON EACH PASS + BLT A,FRTBE +IFN LISTSW,[ + MOVE A,[440700,,LISTBF] + MOVEM A,PNTBP + CLEARM LISTPF + SETOM LISTBC +] +CRETN: POPJ P,RETURN + +A.QOTE: +ASSEM1: TRZ I,FLD+SYL+LET+PSEUDF+COM+CONT+GMINF+OPFLD + TLZ I,GLI+VAR+FLO+DECP+UARI+MNSFLG+WRDF+NPRC+ABFLG+SFORM + TRO I,DEF + TLZ FF,SKILF + MOVE P,[(,-LPDL)PDL" + HRRZM P,GETCNR + MOVEI A,GLOTB + MOVEM A,GLSP1 + TLNE I,MWRD + JRST ASSEM2 + PUSHJ P,RCH + CAIG A,40 + JRST .-2 + CLEARM PARBIT + TLO I,UNRCHF + CLEARM CONDEP +ASSEM2: PUSHJ P,GETWRD + TLZN I,WRDF + JRST ASSEM1 + SKIPE STGSW + (1000+SIXBIT /SWD/) + SKIPGE BYTM + JRST PBYTE +ASSEM3: PUSHJ P,PWRD + AOS CLOC + HRRZS CLOC ;MAKE SURE LOCATION DOESN'T INCREMENT TO BITS IN LEFT HALF + JRST ASSEM1 + +PSYMS": HRRM A,RETURN + TLNN FF,PTPF + TRNN FF,IPSYMS + JRST APSYM1 + PUSHJ P,SYMDMP +RETURN: JRST . + +APSYM1: SKIPN CONTRL + PUSHJ P,SYMDA ;PUNCH PROG NAME + JRST RETURN + +EQUAL: CAMN SYM,[SQUOZE 0,.] ;.=FOO, SAME AS LOC FOO + JRST ALOC + TRNN I,OPFLD+PSEUDF + TRNN I,LET + (5000+SIXBIT /IPA/) ;ILLEG ARG EQ + PUSH P,SYM + PUSH P,I + MOVE A,[(1000+SIXBIT /USP/)] ;NOTE REFERENCE OF THIS QUANTITY AT A.INSRT + MOVEM A,GTVER + TRO I,PSEUDF+DEF+EQLF + PUSHJ P,RCH + CAIE A,"= + TLOA I,UNRCHF + TLO FF,SKILF + PUSHJ P,GETWRD + MOVEI CH1,CRDF + MOVEM CH1,PARBIT + TRNN I,DEF + JRST ASEM1A +IFN LISTSW,[ + SKIPGE LISTPF + PUSHJ P,PNTR + MOVE SYM,WRD + MOVEM SYM,LISTWD + MOVE SYM,WRDRLC + MOVEM SYM,LSTRLC + SETOM LISTAD + SETOM LISTPF +] + TDZ I,[-1-(MWRD) + IOR I,(P) + POP P,(P) + POP P,SYM + SKIPE LDCCC + JRST EQG1 + MOVE A,GLSP1 + CAMN A,GLSP2 + JRST EQL1 +EQG1: PUSHJ P,ES ;GLOBALS TO RIGHT + JRST EQL2 ;NOT FOUND + JRST .+1(A) + (5000+SIXBIT /IPA/) ;COMMON + (5000+SIXBIT /IPA/) ;PSEUDO OR MACRO + JRST EQL2 ;SYM + JRST EQL2 ;LOCAL UNDEF + (5000+SIXBIT /IPA/) ;DEF LOC VAR + (5000+SIXBIT /IPA/) ;UNDEF LOC VAR + (5000+SIXBIT /IPA/) ;DEF GLO VAR + (5000+SIXBIT /IPA/) ;UNDEF GLO VAR + JRST EQL7 ;GLO ENTRY + + + +EQL8: JUMPE B,EQL7 ;GLO EXIT REACHED BY DISP + PUSHJ P,GLKPNR +EQL7: PUSH P,CASM1A +GLOPRA: MOVSI T,GLOETY ;GLOBAL PARA ASSIGN + MOVSI C,3LLV+77 ;VAL MUST BE PUT IN BYLOADER FLAG + MOVEI B,0 + TLO SYM,40000 +LOPRA1: PUSHJ P,VSM2 + JUMPGE FF,CPOPJ + TLO C,3VP + 3PUT C,D + PUSHJ P,EBLK + MOVEI TT,LGPA + DPB TT,[(310700)BKBUF + PUSHJ P,OUTSM + PUSHJ P,PWRDA + JRST EBLK + +GLKPNR: TLO SYM,40000 ;GLO BIT +LKPNRO: TLNN C,3RLNK + TLNE B,-1 + TROA I,CONT + POPJ P, + MOVEI A,6 + PUSHJ P,PBITS + PUSHJ P,OUTSM + HLRZ A,B + TLZE C,3RLNK ;RELOC OF LINK PNR + TLO A,100000 + HRRZS B + TRZ I,CONT + JRST OUTPUT + + +EQL2: TLNE I,GLI + JRST EQL7 + PUSHJ P,LOPRA +CASM1A: JRST ASEM1A + +LOPRA: MOVSI T,LCUDF + TLZ C,77 + IOR C,LEV + TLO C,3LLV + JRST LOPRA1 + + +EQL1: PUSHJ P,ES + JRST EQL1A ;NOT FOUND + JRST .+1(A) + (5000+SIXBIT /IPA/) ;COMMON + JRST EQL1B2 ;PSEUDO OR MACRO + JRST EQL1B ;SYM + JRST EQL1C ;LOCAL UNDEF + (5000+SIXBIT /IPA/) ;DEF LOC VAR + (5000+SIXBIT /IPA/) ;UNDEF LOC VAR + (5000+SIXBIT /IPA/) ;DEF GLO VAR + (5000+SIXBIT /IPA/) ;UNDEF GLO VAR + JRST EQL1D ;GLO ENTRY +EQL1E: PUSHJ P,GLKPNR ;GLO EXIT REACHED BY DISP DUMP LINKING POINTER +EQL1D: PUSHJ P,RCHK ;GLO ENTRY +EQLB2: PUSHJ P,RMOVE + TLO C,77 + MOVE B,WRD + HRLZI T,GLOETY + SKIPE LDCCC + TLO C,3LLV + PUSHJ P,VSM2 + TLO SYM,40000 +EQL1CE: JUMPGE FF,ASEM1A + PUSHJ P,OUTDE1 +ASEM1A: TLNE I,MWRD + PUSHJ P,IGTXT +ATERMIN: JRST ASSEM1 + +OUTDE2: MOVEM B,WRD +OUTDE1: TLNE FF,PPSS +OUTD1: TLO C,3VP + 3PUT C,D +OUTDEF: TRO I,CONT + PUSHJ P,P70 + PUSHJ P,GTVL7B +EQL1CC: PUSHJ P,OUTSM + TRZ I,CONT + JRST OUTWD + +EQL1C: MOVE T,LEV + CAME T,ESL1 + JRST EQL1CD + TLNE I,GLI + JRST EQL1CA +EQL1CB: PUSH P,C + PUSHJ P,LKPNRO + PUSHJ P,RCHKMV + MOVSI T,SYMC + PUSHJ P,EQA2A + POP P,AA + TLNE AA,3VCNT ;USED IN CONSTANT + PUSHJ P,CONBUG + JRST EQL1CE + +P70: PUSHJ P,PBITS7 +PBITSZ: SKIPA A,PARBIT +PBITS7: MOVEI A,7 + JRST PBITS + +EQL1CD: TLNN I,GLI + JRST EQL1BA + JRST EQL1E + +EQL1CA: PUSHJ P,PLOGLO + JRST EQL1E +EQA2: PUSH P,CASM1A +EQA2A: IOR C,LEV + TLNE FF,SKILF + TLO C,3SKILL + JRST VSM2W + +EQL1B2: (2000+SIXBIT /QPA/) +EQL1B: PUSHJ P,RCHK + TLNE I,GLI + JRST EQLB2 + +EQL1B1: MOVE T,LEV + CAME T,ESL1 + JRST EQL1BA + PUSHJ P,RMOVE + MOVSI T,SYMC + JRST EQA2 + +COLON2: POP P,C +EQL1BA: MOVNI TT,SMK + PUSHJ P,HASH + MOVE B,ST(C) + TLZ B,740000 + JUMPE B,EQL1BB + CAMN B,SYM + JRST EQL1SM +EQL1SR: ADDI C,2 + CAIL C,2*SMK + MOVEI C,0 + AOJN TT,EQL1BA+2 + (SIXBIT /SCE/) ;SCE +EQL1BB: MOVE D,C +EQL1A1: PUSHJ P,RCHKMV + HRLZI T,SYMC + TLO C,3MAS + JRST EQA2 + +EQL1SM: 3GET D,C + TLO D,3MAS + 3PUT D,C + JRST EQL1SR + + +EQL1A: TLNN I,GLI + JRST EQL1A1 +EQ12: MOVEI C,0 + JRST EQL1D + +RCHKMV: PUSHJ P,RCHK + JRST RMOVE + +GETVAL: HLR AA,I + ANDI AA,3 ;MICRO DISP ON GLI+VAR + PUSHJ P,ES + JRST GTVL2 ;NOT FOUND + JRST .+1(A) + JRST GTVL1 ;COMMON + JRST GTVPM ;PSEUDO OR MACRO + JRST GTVL3 ;SYM + JRST GTVLE ;LOCAL UNDEF + JRST GTVL6A ;DEF LOC VAR + JRST GTVL6 ;UNDEF LOC VAR + JRST GTVLB ;DEF GLO VAR + JRST GTVLE4 ;UNDEF GLO VAR + JRST GTVL5 ;GLO ENTRY +GTVLD: TLNE I,VAR ;GLO EXIT REACHED BY DISP + JRST GTVLD1 ;MAKE UNDEF GLO VAR +GTVLD4: +GTVLD2: AOS GLSP1 + MOVEI T,ST(D) +GTVD2A: HRRZM T,@GLSP1 +GTVLZ: JRST CABPOP + +GTVLD1: MOVSI T,UDEFGV ;MAKE UNDEF GLO VAR +GTVL1A: AOS VARCNT + HRR B,VARCNT +GTV2C1: TLO C,77 +GTVLD3: JRST GTVL2D + +GTVL2: MOVE C,LEV + JRST .+1(AA) ;NOT FOUND + JRST GTVL2P ;NEITHER MAKE UNDEF LOCAL + JRST GTVL2C ;GLI MAKE GLO EXIT + SKIPA T,[(UDEFLV)] ;VAR MAKE UNDEF LOC VAR + MOVSI T,UDEFGV ;VAR+GLI MAKE UNDEF GLO VAR + AOS B,VARCNT +GTVL2D: PUSHJ P,VSM2 + JRST GTVLD2 + +GTVL2C: MOVSI T,GLOEXT ;GLO EXIT + JRST GTV2C1 +GTVL2P: PUSHJ P,GETVUN +MLCUDF: MOVSI T,LCUDF ;LOCAL UNDEF + MOVEI B,0 + JRST GTVL2D + + +GTVPM: TLZE I,VAR+GLI + (1000+SIXBIT /ILV/) + JRST (B) + +GTVL1: TRO I,COM + HRRZ A,B + JRST CLBPOP + +GTVL3: TLZE I,VAR + (1000+SIXBIT /MDV/) ;MDV + TLNE I,GLI + JRST GTVL7 ;MAKE GLO ENTRY +GTVL8: MOVE A,B ;USED IN LBRAK + BYB LDB B,C,\3RLR_18. + TLNE C,3RLL + TLO B,1 + POPJ P, + +GTVL7: HRLZI T,GLOETY ;GLO ENTRY + TLO C,77 + PUSHJ P,VSM2 +GTVL5A: JUMPGE FF,GTVL8G + TLNN C,3LLV + TRNE I,PSEUDF+EQLF + JRST GTVL8G + TLO SYM,40000 + PUSH P,WRD + PUSHJ P,OUTDE2 + POP P,WRD +GTVL8G: TRNN I,EQLF + TRNN I,PSEUDF + TLNN C,3REL +GTVL8L: TLNE C,3LLV +GTVD2: JRST GTVLD2 + JRST GTVL8 + + +GTVL6A: PUSHJ P,GTVB1 + TLZN I,GLI ;DEF LOC VAR + JRST GTVL8L +GTVL6B: PUSHJ P,PLOGLO + HRLZI T,DEFGVR ;DEF GLO VAR + PUSHJ P,VSM2 +GTVLB: PUSH P,GTVD2;DEF GLO VAR +GTVB1: TRNE FF,PSS + TLNN I,VAR + POPJ P, + TLO C,3VAS2 + JRST VSM3A + +GTVL6: TLNN I,GLI ;UNDEF LOC VAR + JRST GTVLE4 + PUSHJ P,PLOGLO + HRLZI T,UDEFGV ;UNDEF GLO VAR + JRST GTVL2D + +GTVL5: TLZE I,VAR + (1000+SIXBIT /MDV/) ;MDGV + TLNE I,GLI + TLNE C,3VP + JRST GTVL8G + JRST GTVL5A + +GTVL7A: TLO SYM,40000 +GTVL7B: TLNE C,3RLL + TLO SYM,200000 + TLNE C,3RLR + TLO SYM,100000 + POPJ P, + + + +GTVLP: TLNE FF,INDEFF + JRST GTVLP1 + TRNE FF,GLOLOC + (SIXBIT /IAE/) + MOVE B,OFRLOC + ADD B,CRLOC + MOVE A,CLOC + SKIPGE BYTM + HLL A,BYTWP + ADD A,OFLOC + TLZ I,FLO+DECP+PERI + POPJ P, +GTVLP1: TLNE FF,PPSS + (1000+SIXBIT /PNI/) + JRST GTVLZ + +GTVLE: TLNE C,3LLV + JRST GTVLD2 + JRST .+1(AA) + JRST GTVLE4 ;NEITHER CONT AS LOCAL UNDEF + JRST GTVLE1 ;GLI + JRST GTVLE2 ;MAKE LOCAL UNDEF VAR + PUSHJ P,PLOGLO + JRST GTVLD1 ;MAKE UNDEF GLO VAR + +GTVLE2: PUSHJ P,GETVUN + HRLZI T,UDEFLV + JRST GTVL1A +GTVLE1: PUSHJ P,PLOGLO + JRST GTVL2C + +GTVLE4: PUSHJ P,GETVUN + JRST GTVLD2 + +GETVUN: TRZ I,DEF + TRNE I,PSEUDF + JRST GTVER + TRNN FF,PSS + POPJ P, + SKIPN CONDEP + (1000+SIXBIT /USW/) + SKIPE CONDEP + (1000+SIXBIT /USC/) +GTVER1: POP P,1(P) + JRST GTVLZ + +GTVER: 0 + JRST GTVER1 +PLOGLO: PUSH P,A + PUSHJ P,PBITS7 + MOVEI A,CLGLO + PUSHJ P,PBITS + PUSHJ P,OUTSM + JRST POPAJ + +DSYL==400000 +DFLD==200000 +DWRD==100000 +DASSEM==40000 + +DTB: (DWRD)SPACE ;40 SP + (DSYL)RRL2 ;EXCLAIM + (DSYL)DQUOTE ;" + (DFLD)XORF ;NUM SIGN + 0 ;DOLLARS + 0 ;PERCNT + (DFLD)ANDF ;AMPERSAND + (DSYL)SQUOTE ;' + (DFLD)LEFTP ;( 50 + 0 ;) + (DFLD)MULTP ; STAR TIMES + (DFLD)PLS ;+ PLUS + (DWRD)COMMA ; , + (DFLD)MINUS ;- + (DSYL)PERIOD ; + (DFLD)DIVID ;/ + (DSYL)COLON ;COLON 60 + (DSYL)SEMIC ;SEMI + (DFLD)LSSTH ;< + (DSYL)EQUAL ;= + 0 ;> + 0 ;? + (DSYL)ATSGN ;AT SIGN + (DFLD)LBRAK ;[ + (DFLD)IORF ;BACKSLASH + (DSYL)RBRAK ;] + (DSYL)UPARR ;^ + (DSYL)BAKAR ;BACKARR + 0 ;CR + (DWRD)SPACE ;TAB + 0 ;ALL OTHER + + +ES: MOVNI TT,SMK + SETOB D,ESL1 + MOVE B,SYM + TLZ B,740000 + TSC B,B + MOVMS B + IDIVI B,SMK + ASH C,1 +ES4: SKIPN B,ST(C) + JRST ES2 ;TERM SEARCH + TLZ B,740000 + CAME B,SYM + JRST ES3 + 3GET A,C + MOVE TM,A + TLZ A,777700 + SKIPN FLDCNT + JUMPE A,ES3B1 + CAMG A,ESL1 + JRST ES3 +ES3B: MOVEM TM,ESL2 + MOVEM A,ESL1 + MOVEM C,SADR + TLNN TM,3MAS + JRST ES2A +ES3: JUMPN B,ES5 + SKIPGE D ;EXPUNGE + MOVE D,C +ES5: ADDI C,2 + CAIL C,2*SMK + MOVEI C,0 + AOJN TT,ES4 + SKIPL ESL1 + JRST ES2A + JUMPGE D,ES6A + (SIXBIT /SCE/) ;SCE + +ES2: SKIPGE ESL1 + JRST ES6 +ES2A: MOVE D,SADR + MOVE A,ST(D) + ROT A,4 + ANDI A,17 + MOVE B,ST+1(D) + MOVE C,ESL2 +POPJ1: AOS (P) + POPJ P, + + +ES3B1: MOVSI A,100 ;TAKE 0 LEVEL SYM IN LEFT MOST FIELD + JRST ES3B + +ES6: SKIPGE D + MOVE D,C +ES6A: MOVEM D,SADR + POPJ P, + +VSM2LV: TLOA C,3LLV +VSM2W: MOVE B,WRD +VSM2: MOVE CH1,SYM + TLZ CH1,740000 + IOR T,CH1 + MOVEM T,ST(D) +VSM3: MOVEM B,ST+1(D) +VSM3A: 3PUT C,D + POPJ P, + + +HASH: MOVE B,SYM + TLZ B,740000 + TSC B,B + MOVMS B + IDIVI B,SMK + ASH C,1 + POPJ P, + +;4.9-4.4 ETC SPECIFY SHIFT +;4.4-3.6 ETC SPECIFY NUMBER BITS + +IFORTB: 1000,, ;NCNCF P 13 + 1000000000 ;NCFSN + 0 + 0 + 0 + 4400000000 ;FSNSN 20 + 0 ;3 IMPOS + 0 + 0 + 130200440000 ;FSFSN 24 + 1000100044 ;FSFSF + 150200440000 ;FSFCN 26 + 130215020044 ;FSFCF + 4400000000 + 0 ;IMPOS + 10100000 + 1000001010 + 1000440000 ;FCFSN 34 + 0 + 0 + 0 +FORTAB: BLOCK 24 +FRTBE: BLOCK 1 + +A.FORMAT: PUSHJ P,AGETFD + (1000+SIXBIT /UF1/) + PUSH P,A + PUSHJ P,AGETFD + (1000+SIXBIT /UF2/) + POP P,B + MOVEM A,FORTAB-13(B) + JRST ASSEM1 + +;GETWORD +GETWRD: MOVE T,GLSP1 + MOVEM T,GLSP2 + CLEARM FORMAT + CLEARM WRD + CLEARM WRDRLC + TDZ I,[(WRDF+ABFLG+SFORM)AIOWD + CLEARM FLDCNT + MOVE T,[(50100)FORMAT + MOVEM T,FORPNR +GTWD1: PUSHJ P,GETFLD + MOVEI T,1 + MOVE C,CDISP + TLNE C,DWRD + JRST (C) ;NO DISPATCH MEANS WD TERM + MOVE C,GLSP1 + MOVEM C,LINKL + TRNN I,FLD + JRST GETWD2 ;LAST FIELD NULL + IDPB T,FORPNR +GTWD4A: TLO I,WRDF +GTWD4: MOVE TT,FORMAT + SKIPN TT,FORTAB-13(TT) ;FORMAT NOT DEFINED + (2000+SIXBIT /UFM/) + MOVEM TT,FORMAT + MOVE T,[(301400)FORMAT + MOVEM T,FORPNR +GTWD3: LDB T,FORPNR + MOVE D,FLDCNT + CAIG D,2 + IBP FORPNR + PUSHJ P,INTFLD + SOSGE FLDCNT + JRST GTWD5 + POP P,GLSP2 + POP P,GLSP1 + POP P,B + POP P,A + JRST GTWD3 + +GTWD5: MOVE A,WRD + MOVE B,WRDRLC + MOVE C,LINKL + MOVEM C,GLSP1 + TRZ I,AIOWD + POPJ P, + +SPACE2: POP P,A +COMMA: TRNN I,FLD + JRST COMMA1 + IDPB T,FORPNR +COMMA4: IDPB T,FORPNR +PUSHFD: PUSH P,A + PUSH P,B + PUSH P,GLSP1 + PUSH P,GLSP2 +POPFD1: AOS FLDCNT + MOVE TT,GLSP1 + MOVEM TT,GLSP2 + HRRZ T,FORPNR + CAIN T,FORMAT + JRST GTWD1 +GTWD6: HRLZI T,440000 ;STABILIZE FORPNR + HLLM T,FORPNR + JRST GTWD1 + +GETWD2: SKIPN FORMAT + POPJ P, + SOS FLDCNT + POP P,GLSP2 + POP P,GLSP1 + POP P,B + POP P,A + JRST GTWD4A + +COMMA1: IBP FORPNR + JRST COMMA4 + +SPACE: PUSH P,A + PUSHJ P,RCH + CAIE A,11 + CAIN A,40 + JRST .-3 + CAIN A,", + JRST SPACE2 + POP P,A + TLO I,UNRCHF + TRNN I,FLD + JRST GTWD1 + IDPB T,FORPNR + IBP FORPNR + JRST PUSHFD + + INTFLD: JUMPN B,.+3 + MOVE TT,GLSP2 + CAMA TT,GLSP1 ;BEWARE OF CONSTANTS + (SIXBIT /IAE/) + TRNE I,AIOWD + JRST INTFDS +INTFD1: MOVEI TT,C_12. + ROTC T,-12. + MOVEI C,0 + DPB A,TT + MOVE A,C + ADDM A,WRD + POPJ P, + INTFDS: CAIN T,1302 + JRST INTFS1 + CAIN T,1502 + MOVEI T,1302 + JRST INTFD1 +INTFS1: TLNE I,SFORM + JRST MEMREF + MOVEI T,6 + JRST INTFD1 +MEMREF: MOVE C,WRD + TLNE I,ABFLG + JRST ABREF + LSH C,-10 + TRZ C,4 ;FLUSH INDIRECT BIT + TRNE C,-4 + (SIXBIT /IAE/) + JRST @.+1(C) + NTIDX + [(SIXBIT /IAE/)] + IDXAC2 + IDXAC3 +NTIDX: PUSH P,A ;VAL OF SYM + PUSHJ P,GTVLP ;A<=. + POP P,TM ;TM<=VAL OF SYM + SUBM TM,A + CAIG A,177 ;SKIP IF OUT OF RANGE + CAMGE A,[-200] ;SKIP IF IN RANGE + SKIPA A,TM ;OUT OF RANGE, A<=VAL OF SYM + JRST PCREL ;IN RANGE +ABREF: TRZE A,777400 ;OUT OF RANGE OR ABSOLUTE REF + (2000+SIXBIT /TFR/) +INTR: MOVEI T,10 ;FITS ON PAGE ZERO + JRST INTFD1 +PCREL: MOVEI T,400 ;MAKE BITS = 01 (REL TO PC) + IORM T,WRD + JRST INTR +IDXAC2: SKIPA TM,AC2VAL +IDXAC3: MOVE TM,AC3VAL + SUB A,TM +IREF: CAIG A,177 + CAMGE A,[-200] + (2000+SIXBIT /ITB/) + JRST INTR + +A.BASE: PUSHJ P,AGETFD + (1000+SIXBIT /UBV/) + MOVE C,ISAV + TRNN C,FLD + (1000+SIXBIT /NBF/) + CAIG A,3 + CAIG A,1 + (1000+SIXBIT /ILB/) + PUSH P,A + PUSHJ P,AGETFD + MOVEI A,0 + MOVE C,ISAV + TRNN C,FLD + MOVEI A,0 + POP P,TM + MOVEM A,AC2VAL-2(TM) + JRST ASSEM1 +AC2VAL: 0 +AC3VAL: 0 + +PBITS3: PUSH P,A + MOVEI A,14 + MOVEM A,PBITS2 + MOVE A,[(440300)PBITS1 + MOVEM A,BITP + MOVE A,PBITS1 + MOVEM A,@PBITS4 + AOS A,OPT1 + TRNN FF,BITF + SOSA A + TRO FF,INVTF + HRRZM A,PBITS4 + POP P,A + CLEARM PBITS1 +PBITS: SKIPE CONTRL + POPJ P, + SOSGE PBITS2 + JRST PBITS3 + TRZ FF,BITF + CAIN A,7 + TRO FF,BITF + IDPB A,BITP + POPJ P, + +OUTSM: SKIPA A,SYM +OUTWD: MOVE A,WRD +OUTPUT: SKIPE CONTRL + POPJ P, ;DO NOTHING IF ABSOLUTE ASSEMBLY + PUSH P,AA + MOVE AA,OPT1 + TRZN FF,INVTF + AOS AA + MOVEM A,-1(AA) + MOVE A,CLOC + TRZE FF,FIRWD + HRRM A,BKBUF + POP P,AA + AOS A,OPT1 + CAIL A,BSIZE+BKBUF + TRNE I,CONT + POPJ P, + ;MAY DROP THROUGH + + ;END CURRENT OUTPUT BLOCK + +EBLK: PUSH P,T + PUSH P,TT + PUSH P,A + PUSH P,B + MOVE T,CONTRL + JUMPE T,EBLK3 ;JUMP IF RELOCATABLE ASSEMBLY + TRNN T,SBLKS + TRNE T,ARIM10 + JRST ESBLK + JRST EBLK5 + +EBLK3: MOVE T,PBITS1 + MOVEM T,@PBITS4 + MOVEI T,PBITS4 + MOVEM T,PBITS4 + MOVE T,[(440300)PBITS1 + MOVEM T,BITP + CLEARB TT,PBITS2 + CLEARM PBITS1 + MOVEI T,BKBUF + MOVE B,OPT1 ;GET POINTER TO END OF BLOCK + SUBI B,BKBUF+1 ;CONVERT TO # WORDS IN BLOCK (EXCLUDING HEADER) + DPB B,[(220700)BKBUF] ;SET COUNT FIELD IN HEADER + TRNE FF,FIRWD + JUMPLE B,EBLK4 + TRZ FF,LOCF + PUSHJ P,FEED +EBK1: CAML T,OPT1 ;DONE WITH BLOCK? + JRST EBK2 ;YES + MOVE A,(T) ;NO, GET DATA WORD + JFCL 4,.+1 ;UPDATE CHECKSUM + ADD TT,A + JFCL 4,[AOJA TT,.+1] + PUSHJ P,PPB ;OUTPUT WORD + AOJA T,EBK1 +EBK2: SETCM A,TT ;DONE OUTPUTTING BLOCK, NOW GET CHECKSUM + PUSHJ P,PPB ;OUTPUT CHECKSUM + MOVE T,CDATBC ;GET BLOCK TYPE + DPB T,[(310700)BKBUF] ;SET NE T BLOCK TYPE TO THIS BLOCK TYPE + MOVEI T,BKBUF+1 + MOVEM T,OPT1 +EBLK4: TLO FF,OUTF ;INDICATE THAT OUTPUT HAS OCCURED (FOR 1PASS MULTIPLE-ASSEMBLY HACKING) +EBLK5: TRO FF,FIRWD + POP P,B + POP P,A + POP P,TT + POP P,T + POPJ P, + +ALOC3A: SKIPN CONTRL + TRZN FF,LOCF + POPJ P, + TRZ FF,FIRWD + JRST EBLK + +PWRDA: TROA FF,NLIKF +PWRD: TRZ FF,NLIKF + JUMPGE FF,CPOPJ +IFN LISTSW,[ + SKIPGE LISTPF + PUSHJ P,PNTR + SETOM LISTPF + MOVE LINK,WRD + MOVEM LINK,LISTWD + MOVE LINK,WRDRLC + MOVEM LINK,LSTRLC + MOVE LINK,CLOC + MOVEM LINK,LISTAD + MOVE LINK,CRLOC + DPB LINK,[220100,,LISTAD] +] + SKIPE LINK,CONTRL + JRST PWRD1 + PUSHJ P,RCHK + MOVE A,GLSP2 + CAMN A,GLSP1 + JRST PWRD2 ;NO GLOBALS + HRLZ B,WRD + HRR B,WRDRLC + JUMPN B,PWRD3 + MOVEI T,0 + +PWRD4: CAML A,GLSP1 + JRST PWRD5 + HRRZ TT,1(A) + JUMPE TT,PWRD7A + LDB TT,[(400400+TT) + CAIE TT,DEFGVR_-14. + CAIN TT,GLOETY_-14. + JRST PWRD3 + HLRZ TT,1(A) + TRNN FF,GLOLOC+NLIKF + TRNE TT,1777 + JRST PWRD3 + SKIPN LDCCC + TRNE TT,MINF + JRST PWRD3 + TRNE TT,HFWDF + JRST PWRD7 + TRNE TT,ACF + TRNN TT,SWAPF + JRST PWRD3 +PWRD7A: AOJA A,PWRD4 +PWRD7: TRNE TT,SWAPF + AOJA A,PWRD4 + MOVEI D,1(A) + AOS T + AOJA A,PWRD4 + +PWRD5: SOJN T,PWRD3 + HRRZ T,(D) ;HOORAY WE CAN ADR LINK + CAIL T,2*SMK+ST + JRST PWRD3 + PUSH P,T +PWRD5E: CAMLE D,GLSP1 + JRST PWRD5B + MOVE A,1(D) + MOVEM A,(D) + AOJA D,PWRD5E +PWRD5B: SOS GLSP1 + PUSHJ P,PWRD31 + POP P,D + 3GET1 A,D + BYB LDB A,A,\3RLNK_18. + MOVE B,WRDRLC + TLNE B,1 + TRO A,2 + PUSHJ P,PBITS + HLR A,1(D) + HLL A,WRD + + PUSHJ P,OUTPUT + MOVE A,CLOC + HRLM A,1(D) + MOVE A,CRLOC + 3GET1 B,D + TLZ B,3RLNK ;RLC OF LINK PNR + JUMPE A,.+2 + TLO B,3RLNK + 3PUT1 B,D + POPJ P, + +PWRD31: MOVE T,GLSP2 ;DUMP ALL GLO S IN GENERAL FORMAT +PWRD3A: CAML T,GLSP1 + POPJ P, + MOVE B,1(T) + TRNN B,-1 + AOJA T,PWRD3A + TLNE B,1777 + JRST RPWRD ;REPEAT +RPWRD1: BYB LDB A,B,\MINF_18. + TRO A,4 + PUSHJ P,PBITS + MOVE A,(B) ;CODEBITS +SQUOZE FOR SYM + HLRZ C,A + TLZ A,740000 + CAIL C,DEFGVR + TLO A,40000 ;SYM IS GLO +PWRD3D: TLNE B,SWAPF + TLO A,400000 + TLNE B,ACF + JRST PWRD3E ;AC HIGH OR LOW + TLNN B,HFWDF + JRST PWRD3F ;ALL THROUGH + TLO A,100000 + TLNE B,SWAPF + TLC A,300000 +PWRD3F: PUSHJ P,OUTPUT + AOJA T,PWRD3A + + + +RPWRD: PUSHJ P,PBITS7 + MOVEI A,CRPT + PUSHJ P,PBITS + LDB A,[(221200)B + PUSHJ P,OUTPUT + JRST RPWRD1 + +PWRD3E: TLO A,300000 + JRST PWRD3F + +PWRD3: PUSHJ P,PWRD31 +PWRD2: PUSHJ P,RCHK + HRRZ A,B + DPB C,[(10100)A + PUSHJ P,PBITS + JRST OUTWD + + +RCHK: SETZB B,C + SKIPE WRDRLC +RLCERR: (1000+SIXBIT /IRC/) + POPJ P, + + +RMOVE: MOVEI T,0 + DPB C,[(430100)T + DPB B,[420100,,T + MOVE C,T + POPJ P, + + +PWRD1: MOVE A,GLSP1 + CAME A,GLSP2 + (2000+SIXBIT /ILA/) ;GLOBALS APPEARING ILLEGALLY + SKIPE WRDRLC + (2000+SIXBIT /IRA/) + TRNE LINK,ARIM + JRST PRIM + TRNE LINK,ARIM1 + JRST PRIM1 +SBLKS1: MOVE A,WRD + MOVEM A,@OPT1 + MOVE A,CLOC + TRZE FF,FIRWD + MOVEM A,BKBUF + AOS A,OPT1 + CAIGE A,BKBUF+BSIZE + TLNE FF,PTPF + CAIGE A,BKBUF+16. + POPJ P, + + +SBLKS2: SUBI A,BKBUF+1 + JUMPE A,CPOPJ + MOVNS A + HRLM A,BKBUF + PUSHJ P,FEED + TLNE FF,PTPF + JRST PTRBLK + MOVEI T,BKBUF + CLEARM SCKSUM +SBLK1: CAML T,OPT1 + JRST SBLK2 + MOVE A,SCKSUM + ROT A,1 + ADD A,(T) + MOVEM A,SCKSUM + MOVE A,(T) + PUSHJ P,PPB + AOJA T,SBLK1 + +SBLK2: TRO FF,FIRWD + MOVEI A,BKBUF+1 + MOVEM A,OPT1 + MOVE A,SCKSUM + JRST PPB + +ESBLK: MOVE A,OPT1 + PUSHJ P,SBLKS2 + JRST EBLK4 + +PTRBLK: HLRZ A,BKBUF + MOVEM A,SCKSUM + PUSHJ P,PPB + HRRZ A,BKBUF + ADDM A,SCKSUM + PUSHJ P,PPB + MOVEI T,BKBUF+1 +PTRBK1: CAML T,OPT1 + JRST PTRBK2 + MOVE A,(T) + ADDB A,SCKSUM + AOJA T,PTRBK1 +PTRBK2: MOVNS A + PUSHJ P,PPB + MOVEI T,BKBUF+1 +PTRBK3: CAML T,OPT1 + JRST PTRBK4 + MOVE A,(T) + PUSHJ P,PPB + AOJA T,PTRBK3 +PTRBK4: MOVEI A,BKBUF+1 + MOVEM A,OPT1 + TRO FF,FIRWD + POPJ P, + +PRIM: MOVE A,WRD + JRST PPB + +PRIM1: MOVSI A,(HRRI 17,) + HRR A,WRD + PUSHJ P,PPB + MOVSI A,(HRRM 17,) + HRR A,CLOC + PUSHJ P,PPB + MOVSI A,(HRRI 17,) + HLR A,WRD + PUSHJ P,PPB + MOVSI A,(HRLM 17,) + HRR A,CLOC + JRST PPB + + +A.LDCV: LSH B,-27. + PUSH P,B + PUSHJ P,EBLK + MOVE A,[(1000+SIXBIT/ULC/) + MOVEM A,GTVER + TRO I,PSEUDF + PUSHJ P,GETWRD + POP P,B + DPB B,[(400300)BKBUF + MOVEI A,LDCV + PUSHJ P,PLDCM + MOVEI A,0 + DPB A,[(400300)BKBUF +LIB5: AOS LDCCC +CCASM1: JRST ASSEM1 + +AEND: +IFN LISTSW,[ + MOVE A,[440700,,LISTBF] + EXCH A,PNTBP + MOVEM A,LISTTM +] + PUSHJ P,AVARIAB+1 + PUSHJ P,CNSTNT+1 + SKIPN A,CONTRL + PUSHJ P,AEND5 +AEND5D: TRNN FF,PSS ;IF PASS 2, + TRNN FF,NPSS ;OR IF 1PASS ASSEMBLY, + JRST AEND1 ;THEN MUCH HAIR, (IF RELOCATABLE THEN EVENTUALLY GOES TO AEND3) +AEND4: PUSHJ P,GETWRD ;OTHERWISE EAT UP WORD, + JRST RETURN ;AND RETURN + + +AEND3: HRRZ A,CLOC + HRRM A,BKBUF + TRZ FF,FIRWD + PUSHJ P,EBLK + MOVEI A,LCJMP ;PASS ONE OF ONE + PUSHJ P,PLDCM + JRST AEND2 + +PS2": HRRM A,RETURN + JUMPL FF,PA2A + TDO FF,[(PPSS)PSS + TRZ FF,GLOLOC + PUSHJ P,P2INI + JRST ASSEM1 + +PA2A: MOVSI A,-SMK ;PASS 2 OF 1 +PA2C: MOVE SYM,ST(A) + LDB B,[(400400)SYM + CAIE B,LCUDF_-14. + JRST PA2B + 3GET C,A + TLZ SYM,740000 + TLNN C,3LLV + (1000+SIXBIT /USW/) +PA2B: AOS A + AOBJN A,PA2C + JRST RETURN + + +PLDCM: TRZ FF,FIRWD + HRRM A,BKBUF + MOVEI A,LLDCM + DPB A,[(310700)BKBUF + PUSHJ P,PWRDA + JRST EBLK + +PLOD": HRRM A,RETURN + PUSHJ P,PLOD1 + JRST RETURN + +PLOD1: PUSHJ P,FEED1 + MOVE B,CONTRL + TRNE B,ARIM10 + JRST PLOD2 + TLNN FF,PTPF + TRNN B,SBLKS + POPJ P, +PLOD1A: MOVSI B,SLOAD-SLOADP + MOVSI C,(DATAI PTR,) +PLOAD1: MOVE A,C + PUSHJ P,PPBA + CAMN C,[DATAI PTR,13 + HRRI C,27 + MOVE A,SLOAD(B) + PUSHJ P,PPBA + AOS C + AOBJN B,PLOAD1 + MOVE A,[JRST 1 + PUSHJ P, PPBA + JRST FEED1 + +A.SLDR: PUSHJ P,FEED1 + PUSHJ P,PLOD1A + JRST SIMBLK + +PLOD2: MOVSI C,LDR10-ELDR10 +PLOD3: MOVE A,LDR10(C) + PUSHJ P,PPBA + AOBJN C,PLOD3 + JRST FEED1 + +AEND1: PUSHJ P,EBLK + TRO I,PSEUDF+DEF + MOVE A,[(1000+SIXBIT /USE/) + MOVEM A,GTVER +IFN LISTSW,[ + SKIPGE LISTPF + PUSHJ P,PNTR + MOVE A,LISTTM + MOVEM A,PNTBP +] + PUSHJ P,GETWRD +IFN LISTSW,[ + MOVEM A,LISTWD + MOVEM B,LSTRLC + SETOM LISTAD + SETOM LISTPF + PUSHJ P,PNTR + CLEARM LISTF +] + SKIPN TM,CONTRL + JRST AEND3 + TRNE TM,ARIM + JRST AEND99 + TLNE FF,PTPF + JRST PTREND + TLNN A,777000 ;CHECK INSTRUCTION PART + ADD A,[JRST] ;INSTRUCTION PART 0; HE WANTS JRST + PUSHJ P,PPB + JUMPG A,.+3 + 2000,,(SIXBIT /EWN/) ;END WORD NEGATIVE + HRLI A,(JRST) ;END SYMTAB WITH POSITIVE WORD + MOVEM A,STARTA ;SAVE FOR PUNCHOUT AT END OF SYMTAB +AEND99: PUSHJ P,FEED1 +AEND2: PUSHJ P,CNARTP + JRST RETURN + +A.LNKOT: PUSH P,CCASM1 + +AEND5: JUMPGE FF,CPOPJ + MOVSI D,-SMK +AEND5A: MOVE SYM,ST(D) + LDB T,[(400400)SYM + CAIE T,DEFLVR_-14. + CAIN T,DEFGVR_-14. + JRST AEND5E + CAIE T,LCUDF_-14. + CAIN T,GLOEXT_-14. + JRST AEND5B +AEND5C: AOS D + AOBJN D,AEND5A + POPJ P, + +AEND5E: 3GET C,D + TLNN C,3LLV + JRST AEND5C +AEND5B: HLLZ B,ST+1(D) + 3GET C,D + TLNN C,3RLNK + JUMPE B,AEND5C + TLZ SYM,740000 + CAIE T,LCUDF_-14. + CAIN T,DEFLVR_-14. + SKIPA + TLO SYM,40000 + PUSHJ P,LKPNRO + JRST AEND5C + +PTREND: PUSHJ P,FEED + MOVEI A,1 + PUSHJ P,PPB + MOVEI A,100000 + XORB A,WRD + PUSHJ P,PPB + SETCM A,WRD + PUSHJ P,PPB + JRST AEND99 + +ALOC: CLEARM BLOCKF + TLZ FF,INDEFF + TRO I,PSEUDF+DEF + PUSHJ P,EBLK + MOVE A,[(1000+SIXBIT /USL/) +ABLK1: MOVEM A,GTVER + PUSHJ P,GETWRD + ANDI A,777777 + SKIPE BLOCKF + JRST ABLK2 + CLEARM SYLOC + CLEARM SYSYM +ABLK3: TRNN I,DEF + JRST ALOC1 + MOVE T,GLSP2 + CAME T,GLSP1 + JRST ALOC3 + TRZE FF,GLOLOC + JRST ALOC5 +ALOC2: TRO FF,LOCF + HRRZM A,CLOC + HRRZM A,BKBUF + TDNE B,[-2 + (2000+SIXBIT /LAI/) + HRRZM B,CRLOC + MOVEI A,2(B) +ALOC4: DPB A,[(310700)BKBUF ;LABS OR LREL + MOVEM A,CDATBC + JRST ASSEM1 + +ALOC1: TLO FF,INDEFF + MOVE A,[SQUOZE 0,INDEFF + MOVEM A,SYSYM + MOVE A,CLOC + MOVEM A,SYLOC + TLNE FF,PPSS + (1000+SIXBIT /USL/) + JRST ASSEM1 + + +AXWORD: PUSHJ P,GETFLD + MOVE C,CDISP + CAIN C,COMMA + JRST .+3 + TRNN I,FLD + JRST AXWORD + HRLM A,WRD + HRLM B,WRDRLC + MOVSI C,HFWDF + MOVSI B,SWAPF + PUSHJ P,LNKTC1 + PUSH P,GLSP1 + PUSHJ P,GETFLD + TRNN I,FLD + JRST .-2 + HRRM A,WRD + HRRM B,WRDRLC + MOVSI C,HFWDF + MOVEI B,0 + POP P,T + PUSHJ P,LINKTC + JRST CABPOP + +ALOC3: PUSHJ P,ALOC3A + MOVEI A,LCGLO + PUSHJ P,PLDCM + CLEARM CLOC + MOVEI T,1 + MOVEM T,CRLOC + TRO FF,GLOLOC +AREL1: MOVEI A,LREL + JRST ALOC4 + +ALOC5: PUSH P,A + TRZ FF,FIRWD + MOVEI A,LCEGLO + PUSHJ P,PLDCM + POP P,A + JRST ALOC2 + +A.LENGTH: MOVE A,LIMBO1 + CAIN A,40 + PUSHJ P,RCH + MOVEM A,A.LN1 + MOVEI B,0 + PUSHJ P,RCH + CAME A,A.LN1 + AOJA B,.-2 + MOVE A,B + JRST VALRET +A.LN1: 0 + +ABLOCK: TRO I,PSEUDF+DEF + PUSHJ P,EBLK + MOVE A,[(1000+SIXBIT /USB/) + SETOM BLOCKF + JRST ABLK1 + +ABLK2: TRNE FF,GLOLOC + (SIXBIT /IAE/) +ABLK5B: MOVE A,CLOC + ADDB A,WRD + MOVE B,CRLOC + ADDB B,WRDRLC + JRST ABLK3 + + +ANOSYMS: TRZ FF,IPSYMS + JRST ASSEM1 + +AEXPUNG: PUSHJ P,GETSYL + PUSHJ P,ES + JRST .+3 + HRLZI A,400000 ;EXPUNGED ZERO SYM + MOVEM A,ST(D) + MOVE A,LIMBO1 + CAIE A,15 + CAIN A,12 + JRST ASSEM1 + JRST AEXPUNG + +ERROR: 0 + PUSH P,T + LDB T,[(331100)40 + ORCMI T,77 + AOJE T,TYPR1 + PUSH P,B + PUSH P,A + HRRZ T,40 + CAIE T,(SIXBIT /MDT/) + CAIN T,(SIXBIT /RES/) + SKIPA T,SYSYM1 + JRST .+4 + MOVEM T,SYSYM + MOVE T,SYLOC1 + MOVEM T,SYLOC + MOVE A,SYSYM + JUMPE A,ERR1 + PUSHJ P,SYMTYP + MOVE B,CLOC + SUB B,SYLOC + JUMPE B,.+4 + MOVEI A,"+ + PUSHJ P,TYO + PUSHJ P,OCTPNT + +ERR1: PUSHJ P,TAB" + PUSH P,ERROR + PUSH P,40 + TRNE FF,GLOLOC + TYPR [ASCII /GLOBAL+!/ + POP P,40 + POP P,ERROR + MOVE B,CLOC + PUSHJ P,OCTPNT + PUSHJ P,TAB + MOVE B,MDEPTH + PUSHJ P,OCTPNT + PUSHJ P,TAB + MOVE A,CPGN + PUSHJ P,DPNT + PUSHJ P,TAB + MOVE A,CLNN + PUSHJ P,DPNT + PUSHJ P,TAB + IFN TS,.SUSET [.SPICL,,[-1]] ;RE-ENABLE INTERRUPTS + LDB A,[(331100) 40 + CAIGE A,7 ;ERROR UUO MAX + JRST .+1(A) + JRST IAE ;NO RECV + JRST ERR2 ;SYM+MESS + JRST ERR3 ;MESS + JRST 4,. ;TECO ERR + JRST ERR4 ;IGNORE LINE RET TO ASSEM1 + JRST ERR5 ;RET TO ASSEM1 + JUMPL FF,ERR2 ;SYM ON PPSS + JRST ERRRET+1 + +SYMTYP: IDIVI A,50 + HRLM B,(P) + JUMPE A,.+2 + PUSHJ P,.-3 + HLRZ A,(P) + JUMPE A,CPOPJ + CAIL A,45 + JRST SYMTP1 + CAIL A,13 + ADDI A,7 + ADDI A,257 + JRST TYO + +SYMTP1: MOVE A,SYTB-45(A) + JRST TYO" + +SYTB: ". + "$ + "% + +DPNT: IDIVI A,10. + HRLM B,(P) + SKIPE A + PUSHJ P,DPNT + JRST DPNT1 + +OCTPNT: HRRZ A,B + IDIVI A,10 + HRLM B,(P) + JUMPE A,.+2 + PUSHJ P,.-3 +DPNT1: HLRZ A,(P) + ADDI A,260 + JRST TYO + + +ERR4: PUSHJ P,RCH + CAIE A,12 + JRST .-2 + +ERR5: MOVEI A,ASSEM1 + MOVEM A,ERROR +ERR2: MOVE A,SYM + PUSHJ P,SYMTYP + PUSHJ P,TAB +ERR3: HRLZ B,40 + PUSHJ P,SIXTYO +ERRRET: PUSHJ P,CRR + POP P,A + POP P,B +TYPR1A: POP P,T + JRST 2,@ERROR + +SIXTYO: JUMPE B, CPOPJ + MOVEI A,0 + ROTC A,6 + ADDI A,40 + PUSHJ P,TYO + JRST SIXTYO + +CRR: MOVEI A,15 + PUSHJ P,TYO + MOVEI A,12 + JRST TYO + +IAE: HRLZ B,40 + PUSHJ P,SIXTYO + PUSHJ P,TAB + SOS B,ERROR ;MAKE OUTPUT POINT TO ERROR INSTRUCTION + PUSHJ P,OCTPNT + JRST GO2" + +TYPR1: HRLZI B,440700 + HRR B,40 + ILDB A,B + CAIN A,"! + JRST TYPR1A + PUSHJ P,TYO + JRST .-4 + +PS1": HRRM A,RETURN +SIMBLK: SKIPA A,[SBLKS +SRIM1: MOVEI A,ARIM1 + TRO FF,NPSS + TLO A,400000 + MOVEM A,CONTRL + IFN A1PSW,PUSHJ P,OUTUPD + JRST ASSEM1 + +SRIM10: SKIPA A,[ARIM10] +SRIM: MOVEI A,ARIM + JRST SIMBLK+2 + +AEXP: TRZ I,SYL+LET +CABPOP: CLEARB A,B + POPJ P, + +ATITLE: MOVEI A,15 + TRNN FF,PSS + PUSHJ P,TYO + PUSHJ P,GSYL + SKIPE SYM + MOVEM SYM,PRGNM + MOVE T,[(440700)STRSTO +ATIT2: SOSGE STRCNT + JRST ATIT1 + ILDB A,T + PUSHJ P,TYO + JRST ATIT2 +ATIT1: CAIN A,12 + JRST ASSEM1 + PUSHJ P,RCH + PUSHJ P,TYO + JRST ATIT1 + +ASBEG: HRLZI A,1 + ADDM A,LEV + JRST ASSEM1 + +ASEND: MOVSI TT,400000 + HRLZI T,-SMK +ASEND2: SKIPE B,ST(T) + TDNN B,[( 37777)777777 + JRST ASEND1 + 3GET B,T + TLZ B,777700 + CAIN B,77 + JRST ASEND1 + CAMN B,LEV + MOVEM TT,ST(T) +ASEND1: AOS T + AOBJN T,ASEND2 + HRLZI A,-1 + ADDM A,LEV + JRST ASSEM1 + +MEMINS: SKIPN FLDCNT + TLO I,SFORM +IOINST: HLRZ A,B + SKIPN FLDCNT + TRO I,AIOWD +CLBPOP: MOVEI B,0 +CPOPJ: POPJ P, + +SWAP: MOVEI TM,0 + DPB A,[101000,,TM] + LSH A,-10 + DPB A,[1000,,TM] + LSH A,-10 + LSH A,20 + IOR A,TM + POPJ P, + +SYMDMP: TRZ I,CONT ;OK TO END BLOCK + CLEARM GLSP1 + CLEARM GLSP2 + CLEARM WRDRLC + MOVE T,CONTRL + MOVEI A,BKBUF+1 + MOVEM A,OPT1 + MOVSI AA,-SMK +SYMD5: CLEARM CLOC + CLEARM BKBUF + JUMPN T,.+4 ;JUMP IF NOT RELOCATABLE + MOVEI B,LDDSYM ;LOCAL SYMS BLOCK TYPE + DPB B,[(310700)BKBUF ;SET BLOCK TYPE + MOVEM B,CDATBC +SYMD4: SKIPE B,ST(AA) ;GET SYMTAB ENTRY + TDNN B,[37777,,-1] ;IF SQUOZE IS NULL, + JRST SYMD1 ;THEN INCREMENT POINTER (AA) AND TRY AGAIN + MOVEI C,0 + ROTC B,4 ;SHIGT FLAGS INTO C + MOVE D,ST+1(AA) ;GET WHAT MAT BE VALUE + 3GET CH1,AA + JRST .+1(C) ;DISPATCH ON FLAGS + JRST SYMD1 ;COM + JRST SYMD1 ;PSEUDO OR MACRO + JRST SYMD6 ;SYM + JRST SYMD1 ;LOCAL UNDEFINED + JRST SYMD3 ;DEFINED LOCAL VARIABLE + JRST SYMD1 ;UNDEFINED LOCAL VARIABLE + JRST SYMD3A ;DEF GLO VAR, IGNORE IF RELOCATABLE ASSEMBLY (ALREADY OUTPUT) + JRST SYMD1 ;UNDEFINED GLOBAL VARIABLE + JRST SYMD2A ;GLO ENTRY, IGNORE IF RELOCATABLE ASSEMBLY + JRST SYMD1 ;GLO EXIT + +SYMD3A: JUMPE T,SYMD1 ;DEFINED GLOBAL VARIABLE, IGNORE IF RELOCATABLE ASSEMBLY +SYMD3: HRRZS D ;DEFINED LOCAL VA5IABLE, TRUNCATE TO HALFWORD +SYMD2: TLNE CH1,3LLV ;IF LOADER MUST INSERT VALUE + JRST SYMD1 ;THEN IGNORE + ROT B,-4 ;SHIFT SQUOZE INTO ALIGNMENT, WITH FLAGS CLEARED + JUMPE T,SYMD2B ;JUMP IF RELOCATABLE ASSEMBLY + TLO B,40000 ;ABSOLUTE ASSEMBLY, DEFINE SYM AS GLOBAL + TLNE CH1,3SKILL ;IF SEMI-KILLING DESIRED + TLO B,400000 ;THEN SET DELETE OUTPUT BIT + MOVEM B,WRD + PUSHJ P,PWRD ;OUTPUT THE SYM + MOVEM D,WRD + PUSHJ P,PWRD ;OUTPUT THE VALUE +SYMD1: AOS AA ;GO GET NEXT SYM (MAIN LOOP POINT) + AOBJN AA,SYMD4 + PUSHJ P,EBLK ;DONE PUNCHING SYMS, END CURRENT BLOCK + JUMPE T,SYMDA ;IF RELOCATABLE ASSEMBLY THEN PUNCH PROGRAM NAME AND RETURN + MOVE A,STARTA ;RETRIEVE JRST BLOCK WORD + JRST PPB ;OUTPUT IT AND RETURN + +SYMD2A: JUMPN T,SYMD2 + JRST SYMD1 + + ;PUNCH OUT LOCAL SYM (RELOCATABLE ASSEMBLY) + +SYMD2B: TLNE CH1,3RLL + TLO B,200000 ;RELOCATE LEFT HALF + TLNE CH1,3RLR + TLO B,100000 ;RELOCATE RIGHT HALF + TLNE CH1,3SKILL + TLO B,400000 ;HALF-KILL + MOVE A,B + PUSHJ P,OUTPUT ;OUTPUT SYM + MOVE A,D + PUSHJ P,OUTPUT ;OUTPUT VALUE + JRST SYMD1 + +IFN A1PSW,[ + ;ROUTINE TO SET VARIABLES FOR BENEFIT OF NED LOGIC + ;CALLED BY OUTPUT SELECTING PSEUDOS OTHER THAN 1PASS AND .LIBRA + +OUTUPD: TRNN FF,PSS ;IF PASS 1, + TLZ FF,PPSS ;THEN INDICATE NOT PUNCHING PASS + TROE FF,NPSS + TLNN FF,OUTF + JRST OUTCHK + AOS OUTN1 ;INDICATE "OUTPUT" HAS OCCURED OTHER THAN IN 1PASS MODE +OUTCHK: TLZE FF,OUTF + AOS OUTC ;INDICATE "OUTPUT" HAS OCCURED DURING CURRENT ASSEMBLY + POPJ P, +] + +SYMD6: TLNN CH1,77 + JRST SYMD1 + JRST SYMD2 + +CNARTP: MOVNI D,1 +CNTP1: MOVEI TT,PCNTB + CAML TT,PBCONL + POPJ P, + HRRZ B,1(TT) + HLRZ A,1(TT) + CAMN A,B + JRST CNTP2 + AOSN D + TYPR [ASCII /CONSTANTS AREA INCLUSIVE +FROM TO +!/ + BYB LDB B,2(TT),\CGBAL_18. + SKIPE B + TYPR [ASCII /GLOBAL+!/ + HRRZ B,1(TT) + PUSHJ P,OCTPNT + PUSHJ P,TAB + HLRZ B,1(TT) + SOS B + PUSHJ P,OCTPNT + PUSHJ P,CRR +CNTP2: ADDI TT,3 + JRST CNTP1+1 + +SYMDA: MOVEI A,LPRGN + DPB A,[(310700)BKBUF + MOVE A,PRGNM + TLO A,40000 + PUSHJ P,OUTPUT + PUSHJ P,OUTPUT + JRST EBLK + + +A.OP: PUSHJ P,AGETFD + (1000+SIXBIT /U.0/) ;UNDEFINED SYMBOL IN FIELD 0 + PUSH P,A + PUSHJ P,AGETFD + (1000+SIXBIT /U.1/) ;UNDEFINED SYMBOL IN FIELD 1 + PUSH P,A ;PDL NOW HAS FIELD 0 AND FIELD 1 + PUSHJ P,AGETFD + (1000+SIXBIT /U.2/) ;UNDEFINED SYMBOL IN FIELD 2 + POP P,B ;B NOW HAS FIELD 1, A HAS FIELD 2, PDL HAS FIELD 0 + EXCH A,B + POP P,T ;T HAS FIELD 0, A HAS FIELD 1, B HAS FIELD 2 + TDNN T,[757,,-1] ;DO NOT SUPPLY AC AND ADR FIELDS IF ANY BITS ON IN ISTRUCTION'S AC,X,OR ADR FIELDS + IOR T,[0 A,B] + XCT T + JFCL ;DON'T CARE IF IT SKIPS + JRST VALRET + +AASCIZ: TDZA T,T +A.ASCII: MOVEI T,1 + MOVEM T,AASCF1 + MOVE D,[201000,,T + JRST AASC1 + +ASIXBIT: SKIPA D,[140600,,T] +AASCII: MOVE D,[201000,,T] + SETOM AASCF1 +AASC1: MOVEI T,0 + TLZE I,MWRD + JRST TEXT2 + MOVE A,LIMBO1 + CAIN A,40 + PUSHJ P,RCH + MOVEM A,TEXT4 +TEXT7: PUSHJ P,RCH +AASC8: CAMN A,TEXT4 + JRST AASC1A + TLNN D,760000 + JRST TEXT6 +TEXT9: TLNE D,1000 + JRST AASC2 + SUBI A,40 + CAIG A,77 + JUMPGE A,.+2 + (2000+SIXBIT /N6B/) +AASC3: IDPB A,D + TRO I,SYL + JRST TEXT7 + +AASC1A: TLNN D,760000 + SKIPGE AASCF1 + JRST TEXT5 + MOVEI CH1,1 + JRST AASC1B ;EXTRA 0 NEED FOR Z FLAVOR + +AASC2: CAIN A,"! + SKIPG AASCF1 + JRST AASC3 + PUSH P,T + PUSH P,D + PUSH P,SYM + MOVE D,[SETOM ASUDS1] + TRNN FF,PSS + TRNN FF,NPSS + MOVE D,[(2000+SIXBIT /USA/)] + MOVEM D,AASM1 + CLEARM ASUDS1 + PUSHJ P,AGETFD +AASM1: . ;PROGRAM MOD + POP P,SYM + POP P,D + POP P,T + SKIPGE ASUDS1 + MOVNI A,1 ;HAD UNDEFINED SYMS SO ASSUME MAX + MOVE CH1,[440700,,AASBF + MOVEM CH1,ASBP1 + MOVEM CH1,ASBP2 + PUSH P,[AASC5 + MOVE CH1,A +AASC6: LSHC CH1,-35. + LSH CH2,-1 + DIV CH1,ARADIX + HRLM CH2,(P) + JUMPE CH1,.+2 + PUSHJ P,AASC6 + HLRZ A,(P) + ADDI A,"0 + IDPB A,ASBP1 + POPJ P, + +AASC5: MOVEI A,0 + IDPB A,ASBP1 +AASC8A: TLNN D,760000 + JRST AASC7 + ILDB A,ASBP2 + JUMPE A,AASC9 + IDPB A,D + JRST AASC8A + +AASC9: MOVE A,LIMBO1 + JRST AASC8 + + +AASC7: TDZA CH1,CH1 + +TEXT6: MOVNI CH1,1 +AASC1B: MOVEM CH1,AASCF2 + CLEARM CDISP + MOVEM A,TEXT8 + TLO I,MWRD + MOVE A,T + JRST CLBPOP + +VALRET: MOVE T,A + MOVE B,LIMBO1 + CAIE B,15 + CAIN B,12 + JRST VALR1 +TEXT5: PUSH P,T + PUSHJ P,GETSYL + TRNE I,SYL + (2000+SIXBIT /NOS/) + POP P,A +VALR1: TRO I,SYL +TEXT10: JRST CLBPOP + +TEXT2: MOVE A,TEXT8 + TRO I,FLD + SKIPGE B,AASCF2 + JRST TEXT9 + JUMPE B,AASC8A + JRST TEXT5 + +AASCF1: 0 ;-1 REG 1 .ASCI 0 ASCIZ +AASCF2: 0 ;MULTIPLE WORD RETURN FLAG -1 REG 0 FINISH ! HACK 1 0 FOR Z +TEXT4: 0 +TEXT8: 0 +ASBP1: 0 +ASBP2: 0 +AASBF: BLOCK 3 +ASUDS1: 0 + +IGTXT: PUSH P,A + PUSHJ P,RCH + CAME A,TEXT4 + JRST .-2 + TLZ I,MWRD + JRST POPAJ + +ARDIX: PUSHJ P,GETWRD + MOVEM A,ARADIX + JRST ASSEM1 + +AEQUAL: PUSHJ P,GETSYL + PUSHJ P,ES + MOVEM SYM,ST(D) + PUSH P,SADR + PUSHJ P,GETSYL + PUSHJ P,ES + (5000+SIXBIT /IEQ/) + POP P,T + DPB A,[(400400) ST(T)] + MOVEM B,ST+1(T) + 3GET B,T + TLNE B,3MAS + TLO C,3MAS + 3PUT C,T + JRST ASSEM1 + +AWORD: PUSHJ P,EBLK + PUSHJ P,GETWRD + PUSHJ P,PPB + JRST ASSEM1 + + +AOFFSET: TRO I,DEF+PSEUDF + MOVE A,[(1000+SIXBIT /USO/) + MOVEM A,GTVER + PUSHJ P,GETWRD + TRNN I,DEF + JRST ALOC1 + MOVEM A,OFLOC + MOVEM B,OFRLOC + JRST ASSEM1 + +APRNTC: +APRNTX: MOVE A,LIMBO1 + CAIN A,40 + PUSHJ P,RCH +APRTX1: MOVE T,A + PUSHJ P,RCH + CAIN A,"! + JUMPGE B,.-2 + CAMN A,T + JRST ASSEM1 + PUSHJ P,TYO + JRST APRTX1+1 + +SLOAD: CONO PTR,60 + JSP 14,30 + DATAI PTR,16 + MOVE 15,16 + JUMPGE 16,16 + JSP 14,30 + DATAI PTR,(16) + ROT 15,1 + ADD 15,(16) + AOBJN 16,5 + MOVEI 14,33 + JRST 30 + CONSO PTR,10 + JRST 30 + JRST (14) + DATAI PTR,16 + CAMN 15,16 + JUMPA 1 + JRST 4, +SLOADP: + +;PDP10 SBLK LOADER +;FOLLOWING CODING ACTUAL WORDS TO BE OUTPUT + ;BY ASSEMBLER, COMPILER, OR WHATEVER +;SHOULD BE EXECUTED BY PDP10 HARDWARE READIN FEATURE +;USES ONLY THE AC'S (BUT ALL OF THEM) + +LDR10: + -17,,0 ;BLKI POINTER FOR READ SWITCH + +LDRC=0 ;CHECKSUM (OK, SO YOU'RE NOT ALLOWED TO LOAD + ;INTO IT DURING HARDWARE READIN, BUT WHO SAYS + ;YOUR PROGRAM CAN'T USE IT?) +OFFSET -.+1 ;BEGIN LOADING INTO 1 AS PER HEADER +LDRGO: CONO PTR,60 ;START UP PTR (RESTART POINT) +LDRRD: HRRI LDRB,.+2 ;INITIALIZE INDEX +LDRW: CONSO PTR,10 ;WAIT FOR WORD TO BE AVAILABLE + JRST .-1 + ROT LDRC,-LDRRD(LDRB) ;BEFORE READING IN HEADER, ROTATE 2 BITS (THEN IGNORE) + ;BEFORE READING IN EACH DATA WORD, ROTATE 1 BIT (FOR UPDATING CHECKSUM) + ;BEFORE READING IN CHECKSUM, ROTATE NOT AT ALL (DON'T ROTATE CALCULATED CHECKSUM) + DATAI PTR,@LDRT1-LDRRD(LDRB) ;READ WORD INTO RIGHT PLACE + ;HEADER => READ INTO C + ;STORAGE WORD => READ INDEXED BY AOBJN POINTER IN A + ;CHECKSUM => READ INTO A FOR COMPARISON WITH C(C) + XCT LDRT1-LDRRD(LDRB) ;EXECUTE RELEVANT T1 ENTRY (MAYBE SKIPS) + XCT LDRT2-LDRRD(LDRB) ;EXECUTE RELEVANT T2 ENTRY (MAYBE JUMPS) +LDRB: SOJA ., ;-RD(B) IS 2, 1, AND 0 FOR SUCCESSIVE ENCOUNTERS OF THIS INSTRUCTION + ;USED AS INDEX INTO TABLES, ETC. + + ;TABLE 1 + ;INDIRECTED THROUGH FOR DATAI + ;THEN EXECUTED TO SEE WHAT TO DO WITH READ IN WORD + ;ENTRIES EXECUTED IN REVERSE ORDER + +LDRT1: CAME LDRC,LDRA ;COMPARE CHECKSUM WITH CALCULATED, SKIP TO B IF THEY AGREE + ADD LDRC,(LDRA) ;UPDATE CHECKSUM + SKIPL LDRA,LDRC ;INITIALIZE HEADER AND SKIP UNLESS JUMP BLOCK + + ;TABLE 2 + ;EXECUTED IF CORRESPONDING ENTRY IN TABLE 1 DIDN'T SKIP WHEN EXECUTED + +LDRT2: JRST 4,LDRGO ;CHECKSUM ERROR + AOBJN LDRA,LDRW ;UPDATE AOBJN POINTER AND GO BACK FOR NEXT STORAGE WORD IF NOT EXHAUSTED +LDRA: JRST LDRRD ;WHEN INITIALLY LOADED IS JUMP BLOCK TO THIS LOADER + ;DURING LOADING USED TO HOLD HEADER (AOBJN POINTER), WHICH MAY BE LOADED JUMP BLOCK + +OFFSET 0 +ELDR10: + +A.LOP: SKIPE CONTRL + (5000+SIXBIT /ILO/) + PUSHJ P,EBLK + PUSHJ P,GETFLD + MOVEM A,WRD + MOVEM B,WRDRLC + PUSHJ P,PWRDA + MOVEI A,GLOTB + MOVEM A,GLSP1 + MOVEM A,GLSP2 + PUSHJ P,GETFLD + MOVEM A,WRD + MOVEM B,WRDRLC + PUSHJ P,PWRDA + MOVEI A,GLOTB + MOVEM A,GLSP1 + MOVEM A,GLSP2 + PUSHJ P,GETFLD + MOVEM A,WRD + MOVEM B,WRDRLC + MOVEI A,LD.OP + PUSHJ P,PLDCM + JRST ASSEM1 + +STGWS: HLLZM B,STGSW + JRST ASSEM1 + + +A.GSSET: PUSHJ P,AGETFD + (1000+SIXBIT /USG/) + MOVEM A,GENSM + JRST ASSEM1 + + +A.TYPE: PUSHJ P,GETSYL + PUSHJ P,ES + MOVEI A,17 + JRST VALRET + + + +A.GST: ;POPJ IF END OF STRING + PUSHJ P,BCOMPA ;CONVERT A TO BYTE POINTER + MOVEM CH2,A.GST3 + +A.GST1: ILDB B,A.GST3 + CAIL B,300 + POPJ P, + CAIE B,". + JRST A.GST1 + PUSHJ P,A.GSYL + JUMPL T,CPOPJ + CAME SYM,[SQUOZE 0,TAG + JRST A.GST1 + PUSHJ P,A.GSYL + JUMPL T,CPOPJ + CAME SYM,A.GST4 + JRST A.GST1 + MOVE CH2,A.GST3 + PUSHJ P,CCOMP ;CONVERT BACK + JRST POPJ1 + +AG.SP: LSHC A,-2 ;LOOK BACKWARD FOR STRING BEG PNTR IN A + LDB CH1,[420200,,B + MOVE B,MACTAB(A) + IMULI CH1,-2 + XOR B,[300_28.+300_20.+300_12.+300_4 + JRST AG.SP2(CH1) + +AG.SP3: MOVE B,MACTAB(A) + XOR B,[300_28.+300_20.+300_12.+300_4 + + TRNN B,300_4 + JSP CH1,AG.SF + TLNN B,3 + JSP CH1,AG.SF + TLNN B,300_2 + JSP CH1,AG.SF +AG.SP2: TLNN B,300_10. + JSP CH1,AG.SF +AG.SP1: SOJA A,AG.SP3 + +AG.SF: MOVNI CH1,(CH1) + ADDI CH1,AG.SP1 + LSH CH1,-1 + LSH A,2 + ADDI A,(CH1) + HRRZS A + POPJ P, + +A.GST4: 0 +A.GST3: 0 + +CCOMP: TDZA A,A +CCOMP1: IBP CH2 + TLNE CH2,700000 + SOJA A,CCOMP1 + SUBI CH2,MACTAB + LSH CH2,2 + ADDI A,4(CH2) + POPJ P, + +BCOMPA: SKIPE CH1,A + SOS CH1 + IDIVI CH1,4 + MOVE CH2,PTAB(CH2) + ADD CH2,CH1 + TLZ CH2,17 + POPJ P, + +A.TAG: PUSHJ P,GSYL + JRST ASSEM1 + +A.GO: PUSHJ P,GSYL + MOVEM SYM,A.GST4 + +A.GO1: TRNN FF,MACRCH + JRST ASSEM1 + MOVE A,CPTR + PUSHJ P,AG.SP + PUSHJ P,REDINC + CAIN B,374 ;MACRO + ADDI A,2 + PUSHJ P,A.GST + JRST A.GO2 + MOVEM A,CPTR + SETOM CPTRB + JRST ASSEM1 + +A.GO2: PUSHJ P,PMACP + JRST A.GO1 + +PMACP: MOVE B,MACP ;POP MACRO PDL + HRRZ A,(B) + SUB B,[1,,1 + CAIN A,AIRP4 + JRST A.GO6 + CAIN A,REPT1 + JRST A.GO4 + CAIE A,RCHSV1 ;MACRO + CAIN A,RCHSAV ;ARG + JRST A.GO6 + (SIXBIT /UCP/) + +A.GO4: HRRZS -2(B) +A.GO6: TRO FF,MRSW + JRST (A) + +A.BYTE: CLEARM NBYTS ;# BYTES ASSEMBLED + CLEARM BYTMT ;TOTAL ACTIVE BYTES IN TABLE + MOVE A,[440700,,BYBYT] ;POINTER TO NEW TABLE + MOVEM A,BYTMP +A.BY1: PUSHJ P,AGETFD ;GET FIELD, .GE. 0 => BYTE, .LT. 0 => HOLE + (1000+SIXBIT /UBS/) + MOVE C,ISAV + TRNN C,FLD + JRST A.BY2 ;NO FIELD + MOVM B,A + SKIPGE A + TRO B,100 + IDPB B,BYTMP + AOS BYTMT +A.BY2: CAIE CH1,15 ;LIMBO1 + CAIN CH1,12 + JRST .+2 + JRST A.BY1 ;NOT CR OR LF, LOOK FOR MORE FIELDS + SKIPN BYTMT ;CR OR LF, ANY FIELDS? + JRST A.BY3 ;NO, DO .WALGN AND RESET TO WORD MODE + SETOM BYTM ;ENTERING BYTE MODE + PUSHJ P,BYSET + JRST ASSEM1 + + ;RESET THE BYTE DESCRIPTOR TABLE POINTERS TO POINT TO NEW WORD + +BYSET: CLEARM BYTMC ;COUNT OF BYTES PROCESSED THIS TABLE SCAN + MOVE A,[440700,,BYBYT] ;POINTER TO DESCRIPTOR TABLE + MOVEM A,BYTMP + ILDB A,BYTMP ;FIRST DESCRIPTOR BYTE + AOS BYTMC + DPB A,[300600,,BYTWP] ;DEPOSIT AS FIRST BYTE SIZE + POPJ P, + +A.BY3: CLEARM BYTM ;NO LONGER IN BYTE MODE + +A.WALGN: LDB A,[360600,,BYTWP] + CAIN A,44 + JRST ASSEM1 ;ALREADY AT BEGINNING OF WORD + MOVEI A,44 + DPB A,[360600,,BYTWP] ;MAKE IT POINT TO BEGINNING OF WORD + PUSHJ P,BYSET + CLEARM T1 + JRST PBY1 + +BYTIN1: CLEARM BYTMC + MOVE A,[440700,,BYBYT + MOVEM A,BYTMP +BYTINC: AOS A,BYTMC + CAMLE A,BYTMT + JRST BYTIN1 + ILDB A,BYTMP + DPB A,[300600,,BYTWP + MOVEM A,T1 + HLLZ A,BYTWP + IBP A + TRNN A,-1 + JRST BYTINR +PBY1: MOVE A,BYTW + MOVEM A,WRD + CLEARM BYTW + MOVEI A,44 + DPB A,[360600,,BYTWP + PUSHJ P,PWRD + AOS CLOC +BYTINR: MOVE A,T1 ;CURRENT BYTE SIZE + TRNN A,100 + JRST ASSEM1 + MOVEI A,0 ;ASSEMBLE HOLE (BLANK BYTE) IMMEDIATELY AFTER PREVIOUS BYTE + JRST PBY2 + +PBYTE: AOS NBYTS + MOVE A,WRD +PBY2: IDPB A,BYTWP + JUMPGE FF,BYTINC + SKIPE WRDRLC + (1000+SIXBIT /RIB/) + MOVE A,GLSP1 + CAME A,GLSP2 + (1000+SIXBIT /GIB/) + JRST BYTINC + +LBYBYT==5 +BYBYT: BLOCK LBYBYT + +A.BYTC: MOVE A,NBYTS + JRST CLBPOP + +TIPIS: MOVE A,TEMP + MOVEM A,BYTPNT +MORTP: ILDB A,BYTPNT + CAIN A,1 ;EXCLAMATION + POPJ P, + ADDI A," ;SPACE + PUSHJ P,TYO + JRST MORTP + +TEMP: 440607,,0 ;INDIRECT VIA D + +BYTPNT: 0 + +IFN TS,[ + ;CAPACITY OF INDIRECT FILE TABLE CAN BE SET ON PAGE 1 + ;VARIABLES ON PAGE .+3 + +A.INSRT: SETOM FFFLG + MOVE A,[DNAM,,TDNM] ;DEFAULT NAMES + BLT A,TSNM + SETZM INDDF + SETZM INFNFG +A.IN1: PUSHJ P,GETSBS + CAIN B,": + JRST INCOL + CAIN B,"; + JRST INSEMC + CAIE B,15 + JUMPE SYM,A.IN1 + CAIN B,15 + JUMPE SYM,A.IN2 + SKIPGE FFFLG + MOVEM SYM,TF2 + AOSG FFFLG + JRST A.IN5 + EXCH SYM,TF2 + MOVEM SYM,TF1 +A.IN5: CAIE B,15 + JRST A.IN1 +A.IN2: SKIPE INDDF ;GETTING CRUD FROM TTY? + JRST A.IN4 ;YES; FINISH TABLE ENTRY + HRRZ A,TDNM ;NO, BUT MAYBE TDNM=@ + CAIN A,(SIXBIT /@/) + JRST INDDV ;IF TDNM=@ THEN SEARCH TABLE + MOVEI B,0 + ;DROPS THROUGH + + ;DROPS THROUGH FROM PREVIOUS PAGE +A.IN3: MOVE A,TSNM(B) + .SUSET [.SSNAM,,A] + .IOPUSH UTYIC, + .OPEN UTYIC,TDNM(B) + JRST INFNF ;NON-STANDARD ERROR: CORRECTABLE FROM TTY + PUSH P,TDNM+2(B) ;SAVE SECOND FILE NAME ON PDL FOR POSSIBLE LATER REFERENCE + MOVE B,INPDLP + IRP A,,[UTIBED,UREDP,IBUFOF,EOFCH] + PUSH B,A + TERMIN + MOVEM B,INPDLP + MOVEI A,UTIBE-UTIBUF + ADDM A,IBUFOF + ADDB A,UTIBED + SOS A + HRLI A,700 + MOVEM A,UREDP + MOVE A,IBUFOF + MOVE B,EOFCH + LSH B,29. + MOVEM B,UTIBE(A) + AOS A,ILEVEL + CAIL A,5 + (SIXBIT /IOV/) +;EVENTUALLY THE FOLLOWING TO MAKE .INSRT WORK UNDER MACROS: +; MOVE A,[PUSHJ P,INCHR] +; PUSHJ P,PUSHTT + MOVE A,GTVER + CAME A,[1000,,(SIXBIT /USP/)] + JRST ASSEM1 ;NOT IN PARAMETER ASSIGNMENT (ASSEM1 CLOBBERS PDL) + ;IN PARAMETER ASSIGNMENT => RETURN SECOND FILE NAME AS + ;VALUE AND INPUT CR AS NEXT CHARACTER TO + ;TERMINATE STATEMENT + TLO I,UNRCHF ;CAUSE CR TO BE RE-INPUT + MOVE A,[UTYIC,,A] + .RCHST A, ;GET INFO ABOUT NEW FILE + SKIPN A,A+1 ;SKIP UNLESS SYSTEM DOESN'T REALLY KNOW + MOVE A,(P) ;SYSTEM DOESN'T KNOW, GET THE ONE USED FOR .OPEN + POP P,B ;UNSCREW PDL + JRST CLBPOP ;RETURN VALUE + +INCOL: JUMPE SYM,A.IN1 + HLRM SYM,TDNM + JRST A.IN1 + +INSEMC: JUMPE SYM,A.IN1 + MOVEM SYM,TSNM + JRST A.IN1 + +GETSBS: MOVEI SYM,0 + PUSHJ P,RCH + SKIPA B,[440600,,SYM] +GTSBS: PUSHJ P,RCH + CAIG A,40 + JRST GTSBS1 + CAIE A,"; + CAIN A,": + JRST GTSBS1 + SUBI A,40 + TLNE B,770000 + IDPB A,B + JRST GTSBS +GTSBS1: MOVE B,A + POPJ P, + +A.IN4: MOVE B,INDDP ;FINISH TABLE ENTRY + SUBI B,4 + MOVE A,[TDNM,,TDNM] + ADD A,B + BLT A,TSNM(B) + PUSHJ P,POPTT + JRST A.IN3 +INDDV: SETOM INDDF ;INDIRECT DEVICE SPECIFIED: SEARCH TABLE + MOVE B,INDDP +INDVL2: MOVE A,TF1 +INDVL1: CAIG B,4 + JRST INDV1 ;FILE NOT ALREADY IN TABLE + SUBI B,10 + CAME A,TF1(B) + JRST INDVL1 ;FILENAME 1 DOESN'T CHECK + MOVE A,TF2 + CAME A,TF2(B) + JRST INDVL2 ;FILENAME 2 DOESN'T CHECK + MOVE A,TSNM + CAME A,TSNM(B) + JRST INDVL2 ;SYSTEM NAME DOESN'T CHECK + MOVE A,TDNM + CAME A,TDNM(B) + JRST INDVL2 ;DEVICE NAME DOESN'T CHECK + ADDI B,4 ;FILE IS IN TABLE! + JRST A.IN3 ;OPEN SPECIFIED FILE + + +INDV1: MOVE B,INDDP ;PREPARE TO GET CRUD FROM TTY + CAILE B,4+10*MAXIND ;TABLE CAPACITY ABOUT TO BE EXCEEDED? + (SIXBIT /TM@/) + ADDI B,10 + EXCH B,INDDP + SETOM FFFLG ;RESET + MOVE A,[TDNM,,TDNM] + ADD A,B + BLT A,TSNM(B) + PUSHJ P,GTYIP ;PUSH RCH STATUS, REPLACE WITH TTY + AOSN INFNFG + POPJ P, + MOVE A,DNAM ;DEFAULT DEVICE NAME + MOVEM A,TDNM + JRST A.IN1 + +INFNF: SETOM FFFLG + .IOPOP UTYIC, + SKIPN INDDF + JRST INFNF2 ;IF CRUD DIDN'T COME FROM TTY THEN TYPE REAL ERROR MESSAGE + PUSHJ P,TYPFIL + TYPR [ASCII / NOT FOUND. TRY AGAIN. +!/] + MOVS B,INDDP ;RESET TABLE + SUB B,[7,,0] + PUSHJ P,GTYIP + JRST A.IN1 + +GTYIP: MOVE A,[PUSHJ P,RCHA] + PUSHJ P,PUSHTT + TRO FF,TTYRCH + POPJ P, + +INFNF2: SETOM INFNFG ;SO INDDV WILL RETURN + PUSHJ P,INDDV + 2000,,(SIXBIT /FNF/) + PUSHJ P,TYPFIL + TYPR [ASCII / CORRECTION PLEASE. +!/] + JRST A.IN1 + +TYPFIL: SKIPA SYM,[-4,,0] +TYPF2: SKIPA B,TDNM(SYM) + HRLZ B,TDNM(SYM) + PUSHJ P,SIXTYO + MOVE A,FILSPC(SYM) + PUSHJ P,TYO + AOBJN SYM,TYPF2 + POPJ P, +FILSPC: ": + 40 + 40 + "; + +PUSHTT: PUSH P,F + MOVE F,ITTYP + PUSH F,GETCHR + MOVEM A,GETCHR + MOVE A,LIMBO1 + TLZE I,UNRCHF + TLO A,1 + TRZE FF,MACRCH + TLO A,2 + TRZE FF,TTYRCH + TLO A,4 + PUSH F,A +POPTT1: MOVEM F,ITTYP + POP P,F + POPJ P, + +POPTT: PUSH P,F + MOVE F,ITTYP + POP F,A + POP F,GETCHR + HRRZM A,LIMBO1 + TRZ FF,MACRCH\TTYRCH + TLNE A,4 + TRO FF,TTYRCH + TLNE A,2 + TRO FF,MACRCH + TLZ I,UNRCHF + TLNE A,1 + TLO I,UNRCHF + JRST POPTT1 + + + LTYPDL==5*2 + +ITTYP: -LTYPDL,,TTYPDL-1 +TTYPDL: BLOCK LTYPDL +TDNM: 0 ;DATA FOR .INSRT +TF1: 0 +TF2: 0 +TSNM: 0 + BLOCK 10*MAXIND +INPDLP: INPDL-1 +INPDL: BLOCK 4*6 +ILEVEL: 0 +FFFLG: 0 +INDDF: 0 ;-1 IF .INSRT GETTING CRUD FROM TTY +INDDP: 0 ;SET TO 4 BY INITIALIZATION; POINTER TO INDIRECT FILE TABLE +INFNFG: 0 ;GETS SET FOR TTY INPUT WHEN FNF (OTHER THAN @:) +] + +IFN LISTSW,[ +PNTR: MOVEM 17,PNTSA+17 + MOVEI 17,PNTSA + BLT 17,PNTSA+16 + JUMPGE FF,PNTR5 + SKIPL LISTF + JRST PNTR5 + AOSE LISTPF + JRST PNTR1 + SKIPGE T,LISTAD + JRST PNTR2 + PUSHJ P,P6OD + HLRZS T + PUSHJ P,PSOS ;PRINT SPACE OR ' + PUSHJ P,PILPTS +PNTR3: HLRZ T,LSTRLC + PUSHJ P,PSOS + HRRZ T,LISTWD + PUSHJ P,P6OD + HRRZ T,LSTRLC + PUSHJ P,PSOS + PUSHJ P,PILPTS + PUSHJ P,PILPTS +PNTR4: MOVE TT,[440700,,LISTBF] +PNTR6: CAMN TT,PNTBP + JRST PNTR5A + ILDB A,TT + PUSHJ P,PILPT + JRST PNTR6 + +PNTR5A: MOVEI A,15 + PUSHJ P,PILPT + MOVE A,LISTBC + CAIE A,14 + MOVEI A,12 +PNTR5C: PUSHJ P,PILPT +PNTR5D: SETOM LISTBC + +PNTR5: MOVE TT,[440700,,LISTBF] + MOVEM TT,PNTBP + MOVSI 17,PNTSA + BLT 17,17 + POPJ P, + +PNTR5B: MOVE A,LISTBC + CAIN A,14 + JRST PNTR5C + JRST PNTR5D + +PNTSA: BLOCK 20 + +PNTR2: MOVEI T,8 + MOVEI A,40 + PUSHJ P,PILPT + SOJG T,.-1 + JRST PNTR3 + +PNTR1: MOVE TT,[440700,,LISTBF] + CAMN TT,PNTBP + JRST PNTR5B + MOVEI T,25. + MOVEI A,40 + PUSHJ P,PILPT + SOJG T,.-1 + JRST PNTR4 + +PSOS: MOVEI A,"' + TRNN T,1 +PILPTS: MOVEI A,40 +PILPT: .IOT LPTC,A + POPJ P, + +P6OD: MOVE TT,[220300,,T] +P6OD1: ILDB A,TT + ADDI A,"0 + PUSHJ P,PILPT + TLNE TT,770000 + JRST P6OD1 + POPJ P, +] +IFN TS,[ +HINIT: MOVEI A,(SIXBIT \DSK\) + MOVEM A,DNAM + MOVEM A,ONAM + MOVE A,[50,,FNAM1] + BLT A,FNAM2 + MOVE A,50 + MOVEM A,ONAM+1 + MOVEI A,(SIXBIT \BIN\) + MOVSM A,ONAM+2 + JRST GO21 + +.IOT=40000,, ;LEAVE HERE SO THAT IT WILL ASSEMBLE OUT OF TS +.OPEN=41000,, +.OPER=42000,, +.CALL=43000,, +.VALUE=.CALL 4, +.CORE=.CALL 6, +.SUSET=.CALL 13, +.CLOSE=.OPER 7 +.IOPUSH=.OPER 13 +.IOPOP=.OPER 14 +.IOPDL=.OPER 57 +.FEED=.OPER 72 +.SMASK==400006 +.RSNAM==16 +.SSNAM==400016 +.SPICL==400017 + +TYIC==1 +TYOC==2 +UTYIC==3 +UTYOC==4 +LPTC==5 + + +TSINT: 0 ;ALL INTERRUPTS (AT PRESENT) ARE CONSIDERED FATAL ERRORS + 0 ;ERROR PROCESSOR RE-ENABLES INTERRUPTS + + MOVEM P,INTSVP ;SAVE P FOR POSSIBLE DEBUGGING + MOVE A,TSINT ;GET INTERRUPT REQUEST WORD + MOVEI B,(SIXBIT /INT/) ;DEFAULT + SOS TSINT+1 ;MAKE IT POINT TO PLACE INTERRUPT CAME FROM + TRNN A,200000 ;PDL OVERFLOW? + JRST TSINT7 ;NO + LDB A,[270400,,@TSINT+1] ;GET AC FIELD OF GUILTY INSTRUCTION + CAIN A,P ;IF P, + MOVE P,[-LPDL,,PDL] ;RESET PDL POINTER + MOVEI B,(SIXBIT /PDL/) +TSINT7: TRNE A,20000 ;MEMORY PROTECTION VIOLATION? + MOVEI B,(SIXBIT /ILM/) ;YES + MOVEM B,40 + AOS A,TSINT+1 ;SO ERROR ROUTINE WILL PRINT OUT PROPERLY + JSA A,ERROR + +INTSVP: 0 ;SAVES P ON INTERRUPT FOR POSSIBLE DEBUGGING + +BEG: .SUSET [.RSNAM,,RSYSNM] ;GET SYSTEM NAME + .SUSET [.SMASK,,[220000]] ;PDL OVERFLOW,MEMORY PROTECTION VIOLATION + .SUSET [.SPICL,,[-1]] ;PERMIT INTERRUPTS (IN CASE RESTARTED DURING INTERRUPT) + SKIPN 51 + JRST .+3 + MOVEM A,ISYSNM + MOVEM A,OSYSNM + MOVE P,[-LPDL,,PDL] ;INITIALIZE P + .CORE 1+LSTLOC_-10. + JRST .-1 + .OPEN TYIC,[30,,SIXBIT / TTYMIDAS INPUT /] ;DDT MODE, CONVERT LOWER CASE TO UPPER CASE + .VALUE + .OPEN TYOC,[SIXBIT / !TTYMIDAS OUTPUT/] + .VALUE + MOVE A,RPA + MOVEM A,RRL1 + SKIPE 51 + JRST HINIT + MOVE B,[SIXBIT /NVMDS./] + PUSHJ P,SIXTYO + MOVE B,[.FNAM2] + PUSHJ P,SIXTYO + + ;RETURN POINT FROM FATAL ERRORS + +GO2: IFN A1PSW,[ + SETOM PRGC + SETOM OUTC +] +IFN LISTSW,[ + SETZM LISTF + MOVE A,[TRNN FF,MACRCH] + MOVEM A,RRR1 +] + PUSHJ P,CMD ;GET TYPED IN COMMAND +GO21: PUSHJ P,WINIT ;OPEN OUTPUT FILE + PUSHJ P,OPNRD ;OPEN INPUT FILE + MOVE A,[UTYIC,,A] + .RCHST A, + JUMPN A+1,GO22 ;NOT DSK ETC + MOVE A+1,FNAM1 ;USE ORG FILE NAME + MOVE A+2,FNAM2 +GO22: MOVEM A+1,RFNAM1 ;GIVE THESE + MOVEM A+2,RFNAM2 ;FOR .FNAM1,,2 +GO3: JSP A,INIT + JSP A,PS1 +IFN A1PSW,[ + AOS PRGC ;INDICATE END STATEMENT ENCOUNTERED + SETOM OUTC ;" " " +] + TRNE FF,NPSS ;IF 2 PASS ASSEMBLY, + PUSHJ P,OPNRD ;THEN RE-OPEN INPUT FILE + JSP A,PLOD + JSP A,PS2 + JSP A,PSYMS + TRNN FF,NPSS ;IF 1 PASS ASSEMBLY, + JRST GO3 ;THEN TRY TO ASSEMBLE ANOTHER PROGRAM +RETN2: PUSHJ P,.FILE + .VALUE [ASCIZ /:KILL /] + JRST BEG + +TYI: .IOT TYIC,A + CAIN A,^R + JRST TYO + CAIE A,15 + CAIN A,12 + JRST TYO + POPJ P, + +TAB: MOVEI A,11 +TYO: .IOT TYOC,A + POPJ P, + + +INCHR: +RPA: ILDB A,UREDP +RPAE: CAME A,EOFCH + POPJ P, +INCHR3: HRRZ A,UREDP + CAMN A,UTIBED + JRST UTRLD + SOSL ILEVEL + JRST IFPOP +IFN A1PSW,[ PUSHJ P,OUTCHK + MOVSI A,-LNEDT + XCT NEDT(A) ;SKIPS IF NED CONDITION TO BE COMPLAINED ABOUT + AOBJN A,.-1 + JUMPGE A,RETN2 +] + MOVE A,[70700,,EOFCH] + MOVEM A,UREDP + (SIXBIT /NED/) +UTRLD: MOVE A,[UTIBUF-UTIBE,,UTIBUF] + ADD A,IBUFOF + .IOT UTYIC,A + JUMPGE A,UTRLD1 + HRRZM A,RPAT1 + HRLZ A,EOFCH + LSH A,11. + HLLM A,@RPAT1 +UTRLD1: MOVE A,[700,,UTIBUF-1] + ADD A,IBUFOF + MOVEM A,UREDP + JRST RPA + +IFPOP: PUSH P,B + MOVE B,INPDLP + POP B,EOFCH + POP B,IBUFOF + POP B,UREDP + POP B,UTIBED + MOVEM B,INPDLP +; EVENTUALLY THE FOLLOWING TO MAKE .INSRT WORK UNDER MACRO EXPANSIONS +; PUSHJ P,POPTT + MOVE A,IBUFOF + MOVE B,EOFCH + LSH B,29. + MOVEM B,UTIBE(A) + POP P,B + .IOPOP UTYIC, + JRST RPA + + +IFN A1PSW,[ ;HOLLAR "NED" IF ANY OF THE FOLLOWING: +NEDT: SKIPL PRGC ;NO END STATEMENTS HAVE BEEN ENCOUNTERED + SKIPGE OUTC ;OUTPUT HAS OCCURED NOT MATCHED BY AN END STATEMENT + SKIPGE OUTN1 ;OUTPUT HAS OCCURED OTHER THAN IN 1PASS MODE + TRNN FF,PSS ;CURRENTLY IN PASS 2 +LNEDT==.-NEDT ;LENGTH OF TABLE +] + +TPPB: IDPB A,UTYOP + AOSGE UTYOCT + POPJ P, +TPPBF: MOVEM A,UTYOP ;ENTRY TO OUTPUT CURRENT CONTENTS OF BUFFER + MOVE A,[UTOBUF,,-] + SUB A,UTYOCT + MOVSS TM,A + TLNE FF,PTPF + JRST TPTPBF + .IOT UTYOC,A +TPPBF1: MOVNI A,UTOBE-UTOBUF + MOVEM A,UTYOCT + MOVE A,[4400,,UTOBUF-1] + EXCH A,UTYOP + POPJ P, + +.FILE: TLNE FF,PTPF + JRST .+3 + MOVNI A,1 + PUSHJ P,TPPB ;OUTPUT A -1 SO STINK WILL SEE EOF + PUSHJ P,TPPBF ;OUTPUT THE BUFFER + .CLOSE UTYIC, + .CLOSE UTYOC, + POPJ P, + +WINIT: MOVEI A,7 + HRLM A,ONAM + .SUSET [.SSNAM,,OSYSNM] ;SET SYSTEM NAME + .OPEN UTYOC,ONAM + (SIXBIT /TSL/) + TLZ FF,PTPF ;INITIALLY ASSUME DEVICE NOT PAPER TAPE PUNCH + .STATUS UTYOC,A ;GET STATUS OF OUTPUT CHANNEL + ANDI A,77 ;MASK TO DEVICE CODE + CAIN A,7 ;IF PAPER TAPE PUNCH, + JRST PTPO +WINIT1: MOVE A,[4400,,UTOBUF-1] + MOVEM A,UTYOP + MOVNI A,UTOBE-UTOBUF + MOVEM A,UTYOCT + MOVEI A,4 ;INITIALIZE INDIRECT DEVICE TABLE + MOVEM A,INDDP + POPJ P, + +TFEED: TLNN FF,PTPF ;IF OUTPUT DEVICE NOT PTP, + POPJ P, ;THEN DO NOTHING + PUSHJ P,TPPBF ;OTHERWISE OUTPUT THE BUFFER, +TFEED1: .FEED UTYOC, ;FEED A LINE, + TLZA FF,PTPF ;IF THIS IS EXECUTED, UTYOC DOESN'T HAVE PTP AFTER ALL + SOJG B,TFEED1 ;FEED THE SPECIFIED NUMBER OF LINES, + POPJ P, ;AND RETURN + +TPTPBF: JUMPGE TM,TPPBF1 + MOVE A,(TM) + .IOT UTYOC,A + LSH A,-10 + .IOT UTYOC,A + AOBJN TM,TPTPBF+1 + JRST TPPBF1 + +PTPO: TLO FF,PTPF + MOVEI A,11 + HRLM A,ONAM + .OPEN UTYOC,ONAM + (SIXBIT /TSL/) + JRST WINIT1 + +OPNRD: .IOPDL + MOVEI A,2 + HRLM A,DNAM + .SUSET [.SSNAM,,ISYSNM] + .OPEN UTYIC,DNAM + (SIXBIT /FNF/) + MOVEI A,UTYIC + MOVEI A,3 + MOVEM A,EOFCH + LSH A,29. + MOVEM A,UTIBE + MOVE A,[700,,UTIBE-1] + MOVEM A,UREDP + MOVEI A,UTIBE + MOVEM A,UTIBED + CLEARM ILEVEL + CLEARM IBUFOF + MOVEI A,INPDL-1 + MOVEM A,INPDLP + MOVE A,[-LTYPDL,,TTYPDL-1] + MOVEM A,ITTYP + POPJ P, + +EOFCH: 0 +RPAT1: 0 +IBUFOF: 0 +UTIBED: UTIBE + +;GET COMMAND +SIF==400000 +COLF==200000 +NAMF==100000 +NAM2F==40000 +DEVF==20000 +SCOLF==10000 +SYSNF==4000 + +RCHA: ILDB A,CMPTR + JUMPN A,CPOPJ +RCHA1: MOVE B,[10700,,CMBUF-1] + MOVEM B,CMPTR +RCHA2: PUSHJ P,TYI + CAIN A,177 + JRST RCHA3 + IDPB A,B + CAIE A,15 + JRST RCHA2 + MOVEI A,0 + IDPB A,B + JRST RCHA +RCHA3: CAMN B,[10700,,CMBUF-1] + JRST RCHA4 + LDB A,B + ADD B,[70000,,] + SKIPGE B + SUB B,[XOR 1] + PUSHJ P,TYO ;ECHO CHARACTER JUST RUBBED OUT + JRST RCHA2 + +RCHA4: PUSHJ P,CRR ;RUBBED OUT TO BEGINNING OF STRING, TYPE CRLF + JRST RCHA1 ;RESET POINTERS AND TRY AGAIN + +CMD: PUSHJ P,CRR + MOVSI A,(SIXBIT/>/) ;MAKE DEFAULT FNAM2 OF INPUT > + MOVEM A,FNAM2 + SETZB FF,CMPTR +CMDB: CLEARM SUBNM + MOVE TT,[10600,,SUBNM-1] +CMDL: PUSHJ P,RCHA + CAIN A,^Q + JRST CMDQ + CAIGE A,40 + JRST CMDE + CAIN A,": + JRST CMDCOL + CAIN A,"; + JRST CMDSC + CAIN A,"_ + JRST CMDLA + CAIN A,40 + JRST CMDS +IFN LISTSW,[ + CAIN A,"( + JRST CMDSW +] +CMDL1: SUBI A,40 + PUSHJ P,SYLEND + TLNE TT,770000 + IDPB A,TT + JRST CMDL +CMDQ: PUSHJ P,RCHA + JRST CMDL1 +CMDSC: TLOA FF,SCOLF +CMDCOL: TLO FF,COLF +CMDS: CAMN TT,[10600,,SUBNM-1] + JRST CMDL + TLO FF,SIF + MOVE C,SUBNM + JRST CMDB +SYLEND: TLZN FF,SIF + POPJ P, +;DROPS THRU + + +SYLE2: TLZE FF,COLF + JRST SYLDV + TLZE FF,SCOLF + JRST SYLSN + TLOE FF,NAMF + JRST NAM2 + MOVEM C,FNAM1 + POPJ P, +NAM2: TLON FF,NAM2F + MOVEM C,FNAM2 + POPJ P, + +SYLSN: TLO FF,SYSNF + MOVEM C,ISYSNM + POPJ P, +SYLDV: TLO FF,DEVF + LDB T,[360600,,C] + CAIG T,'9 + CAIGE T,'0 + JRST SYLDV1 + TLNN C,7777 + MOVSI C,(SIXBIT /UT/+T) +SYLDV1: HLRZM C,DNAM + POPJ P, + +CMDLA: PUSHJ P,SYLE1 + HLRZS FF + MOVE T,[DNAM,,ONAM] + BLT T,ONAM+3 + JRST CMDB + +CMDE: PUSHJ P,SYLE1 + TLNN FF,NAMF + JRST CMDB +CMDE1: MOVEI T,(SIXBIT /DSK/) + TLNN FF,DEVF + MOVEM T,DNAM + MOVE T,RSYSNM + TLNN FF,SYSNF + MOVEM T,ISYSNM + TRNN FF,SYSNF + MOVEM T,OSYSNM + MOVE T,DNAM + TRNN FF,DEVF + MOVEM T,ONAM + TRNE FF,NAM2F + POPJ P, + MOVE T,FNAM1 + EXCH T,ONAM+1 + TRNN FF,NAMF + MOVE T,[SIXBIT /NBIN/] + MOVEM T,ONAM+2 + POPJ P, + +SYLE1: CAMN TT,[10600,,SUBNM-1] + JRST SYLEND + MOVE C,SUBNM + JRST SYLE2 + +RSYSNM: -1 +CMBUF: BLOCK 50 +DNAM: 0 +FNAM1: 0 +FNAM2: 0 +ISYSNM: -1 +ONAM: BLOCK 3 +OSYSNM: -1 +SUBNM: 0 +CMPTR: 0 +UTIBUF: BLOCK 40 +UTIBE: 0 + BLOCK 5* +UTOBUF: BLOCK 200 +UTOBE: +UREDP: 0 +UTYOP: 0 +UTYOCT: 0 + +RFNAM1: 0 ;REAL FILE NAME 1 +RFNAM2: 0 ;REAL FILE NAME 2 + +IFN LISTSW,[ +CMDSW: PUSHJ P,RCHA + CAIN A,") + JRST CMDL +IFN LISTSW, CAIE A,"L + JRST CMDSW +IFN LISTSW,[ SETOM LISTF ;IF SWITCHES NEEDED FOR OTHER THAN LISTING, DELETE OUTER CONDITIONAL + MOVSI A,(JFCL) + MOVEM A,RRR1 + MOVE A,[PUSHJ P,RCH] + MOVEM A,RRL1 +CMDSW1: .OPEN LPTC,[SIXBIT / !TPLWALL PAPER /] + SKIPA A,[30.] + JRST CMDSW + .OPEN LPTC,[SIXBIT / !LPTWALL PAPER/] + SKIPA + JRST CMDSW + .SLEEP A, + JRST CMDSW1 +] +] +] + +FEED1: SKIPA B,[40] +FEED: MOVEI B,5 + JRST TFEED" +PPB: JUMPGE FF,CPOPJ +PPBA: JRST TPPB" + +CONSTANTS +PAT: +PATCH: BLOCK 40 + +GDTAB: REPEAT 3,POPJ P,76 + JRST UT141 + REPEAT 5,POPJ P,76 + POPJ P,75 ;TAB + POPJ P,74 ;LF + REPEAT 2,POPJ P,76 + POPJ P,74 ;CR + REPEAT "!-16-1,POPJ P,76 + POPJ P,40 ;SPACE + POPJ P,41 ;! + POPJ P,42 ;" + POPJ P,43 ;# + ADD SYM,%$SQ(D) ;$ + ADD SYM,%%SQ(D) ;% + POPJ P,46 ;& + POPJ P,47 ;' + POPJ P,50 ;( + POPJ P,51 ;) + POPJ P,52 ;* + POPJ P,53 ;+ + POPJ P,54 ;, + POPJ P,55 ;- + POPJ P,56 ;. + POPJ P,57 ;/ + REPEAT 10.,JSP CH2,RR2 ;DIGITS + POPJ P,60 ;: + POPJ P,61 ;; + POPJ P,62 ;< + POPJ P,63 ;= + POPJ P,64 ;> + POPJ P,65 ;? + POPJ P,66 ;@ + IRPC Q,,ABCDEFGHIJKLMNOPQRSTUVWXYZ + ADD SYM,%!Q!SQ(D) +TERMIN + POPJ P,67 ;[ + POPJ P,70 ;\ + POPJ P,71 ;] + POPJ P,72 ;^ + POPJ P,73 ;_ + + + REPEAT 141-"_-1,POPJ P,76 + JRST UT141 + REPEAT 177-141,POPJ P,76 + IFN .-GDTAB-200,[PRINTX /GDTAB LOSES +/] + +IRPC Q,,ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890$%. +%!Q!SQ: 0 + SQUOZE 0,Q/50/50/50/50/50 + SQUOZE 0,Q/50/50/50/50 + SQUOZE 0,Q/50/50/50 + SQUOZE 0,Q/50/50 + SQUOZE 0,Q/50 + SQUOZE 0,Q + +TERMIN + +IFN TS,[DEFINE .LOP A +.LVAL1=.OP A +TERMIN] +.LOP IDIV SMK 2 + +;MAC PROC TABLES +MACTAB: 773767750000 ;MAC CHAR STG +INIT1: HRLZI A, 2*-SMK-LCONTB-LCONTB/18.-.LVAL1-NCONS*3-LCNGLO + CLEARM ST(A) + AOBJN A,.-1 +SPREAD: MOVEI AA,ISYMTB +SP1: CAIL AA,EISYMT ;MUNGED IN TS MODE + JRST SP4 + MOVE SYM,(AA) + LDB T,[( 400400)SYM + ROT T,-4 + PUSHJ P,ES + MOVE B,1(AA) + MOVSI C,3INI + PUSHJ P,VSM2 + AOS AA + AOJA AA,SP1 + +CONSTANTS + DEFINE SD S,V + SQUOZE 10,S + V +TERMIN +DEFINE PD S,V,T + SQUOZE 4,S + V,,IOINST+.LENGT /T/* +TERMIN + +ISYMTB: +ZZ==100000 +IRP A1,,[COM,NEG,MOV,INC,ADC,SUB,ADD,AND] +IRP B1,,[,Z,O,C]B2,,[0,1,2,3] +IRP C1,,[,L,R,S]C2,,[0,1,2,3] +IRP D1,,[,%]D2,,[0,10] +SD A1!!B1!!C1!!D1,ZZ+B2_4+C2_6+D2 +TERMIN +TERMIN +TERMIN +ZZ==ZZ+400 +TERMIN +PD JMP,0,M +PD JSR,4000,M +PD ISZ,10000,M +PD DSZ,14000,M +PD LDA,20000,M +PD STA,40000,M +ZZ==60000 +IRP A1,,[NIO,DIA,DOA,DIB,DOB,DIC,DOC] +IRP B1,,[,S,C,P]B2,,[0,1,2,3] +PD A1!!B1,ZZ+B2_6 +TERMIN +ZZ==ZZ+400 +TERMIN +PD SKPBN,63400 +PD SKPBZ,63500 +PD SKPDN,63600 +PD SKPDZ,63700 +IRP A1,,[SKP,SZC,SNC,SZR,SNR,SEZ,SBN]A2,,[1,2,3,4,5,6,7] +SD A1,A2_10 +TERMIN +SD TTI,10 +SD TTO,11 +SD RTC,14 +SD CPU,77 +PD MUL,73301 +PD DIV,73101 +PD INTEN,60177 +PD INTDS,60277 +PD READS,60477 +PD INTA,61477 +PD MSKO,62077 +PD IORST,62677 +PD HALT,63077 + +SQUOZE 4,END +AEND +SQUOZE 4,LOC +ALOC +SQUOZE 4,XWORD +AXWORD +SQUOZE 4,TITLE +ATITLE +SQUOZE 4,EXP +AEXP +SQUOZE 4,XWD +AXWORD +SQUOZE 4,.BEGIN +ASBEG +SQUOZE 4,REPEAT +AREPEAT +SQUOZE 4,.END +ASEND +SQUOZE 4,OCT +AEXP +SQUOZE 4,CONSTA +CNSTNT +SQUOZE 4,SIXBIT +ASIXBIT +SQUOZE 4,ASCII +AASCII +SQUOZE 4,RADIX +ARDIX +SQUOZE 4,BLOCK +ABLOCK +SQUOZE 4,NOSYMS +ANOSYMS +SQUOZE 4,EXPUNGE +AEXPUNG +SQUOZE 4,NULL +ANULL +SQUOZE 4,EQUALS +AEQUAL +SQUOZE 4,SBLK +SIMBLK +SQUOZE 4,RIM +SRIM + +SQUOZE 4,DEFINE +ADEFINE +SQUOZE 4,IRP +AIRP +SQUOZE 4,IRPC +AIRP(400000) +SQUOZE 4,IRPS +(200000)AIRP +SQUOZE 4,TERMIN +ATERMIN +SQUOZE 4,.QUOTE +A.QOTE +SQUOZE 4,WORD +AWORD +SQUOZE 4,OFFSET +AOFFSET +SQUOZE 4,.BASE +A.BASE +SQUOZE 4,IFG +JUMPG A,COND +SQUOZE 4,IFGE +JUMPGE A,COND +SQUOZE 4,IFE +JUMPE A,COND +SQUOZE 4,IFLE +JUMPLE A,COND +SQUOZE 4,IFN +JUMPN A,COND + +SQUOZE 4,IFSE +SKIPN SCOND +SQUOZE 4,IFSN +SKIPE SCOND +SQUOZE 4,IF1 +TRNE FF,COND1 +SQUOZE 4,IF2 +TRNN FF,COND1 +SQUOZE 4,IFL +JUMPL A,COND +SQUOZE 4,PRINTX +APRNTX +SQUOZE 4,PRINTC +(400000)APRNTC +SQUOZE 4,VARIAB +AVARIAB + +SQUOZE 4,.LENGTH +A.LENGTH +SQUOZE 4,.FORMAT +A.FORMAT +SQUOZE 4,.STOP +(400000)A.STOP +SQUOZE 4,.ISTOP +A.STOP +SQUOZE 4,.RPCNT +A.RPCNT +SQUOZE 4,. +GTVLP +SQUOZE 4,.NSTGW +(1)STGWS +SQUOZE 4,.YSTGW +STGWS +SQUOZE 4,.GSSET +A.GSSET +SQUOZE 4,.TYPE +A.TYPE + +SQUOZE 4,.GO +A.GO +SQUOZE 4,.TAG +A.TAG +SQUOZE 4,.ASCII +A.ASCII +SQUOZE 4,ASCIZ +AASCIZ +SQUOZE 4,.BYTC +A.BYTC +SQUOZE 4,.BYTE +A.BYTE +SQUOZE 4,.WALGN +A.WALGN +SQUOZE 4,.IRPCNT +A.IRPCNT + +SQUOZE 4,.FNAM1 +AFN1 +SQUOZE 4,.FNAM2 +AFN2 +IFN TS,[ +SQUOZE 4,.INSRT +A.INSRT +] +EISYMT: + +LOC MACTAB+MACL +BKBUF: ;HEADER WORD FOR THIS RELOCATABLE BLOCK +LOC BKBUF+BSIZE+5 ;RELOCATABLE BLOCK ASSEMBLED HERE +GLOTB: +LOC .+20 +PDL": + BLOCK LPDL+1 + + +ST: ;SYMBOL TABLE 2 WORDS/SYM FIRST SQUOZE, SECOND "VALUE" (THIRD EXISTS, SEE 3RDWRD) +LOC ST+2*SMK ;SMK = # SYMS +3RDWRD: ;THIRD WORD OF SYM LIVES HERE, REALLY A HALFWORD, CONTAINS RANDOM FLAGS +.LOP IDIV SMK 2 +LOC .+.LVAL1+1 +CONBIT: +LOC .+LCONTB/18.+1 +CONTAB: +LOC CONTAB+LCONTB +PCNTB: +LOC PCNTB+NCONS*3 +CONGLO: +LOC .+LCNGLO +VARTAB: BLOCK NVARS + +STRSTO: BLOCK STRL ;STRING STORAGE +DMYDEF: BLOCK DMDEFL ;DMMY ARGS FOR MAC BEING DEFINED +DSTG: BLOCK DSSIZ +DMYAGT: BLOCK DMYAGL ;DMY ARG POINTER FOR MACROS BEING EXPANDED +TOPPP: +MACPDL: BLOCK MPDLL +GCSV: BLOCK 16 ;SAVES ACCUMULATORS DURING MACRO GARBAGE COLLECTION +LSTLOC: -1 + + +IFN TS,END BEG ;MUST BE BEFORE RELOCATABLE END STATEMENT, + ;SINCE TS MIDAS NOW TRIES TO DO MULTIPLE 1PASS ASSEMBLIES FROM SAME FILE. + ;PUTTING RELOCABLE END STATEMENT FIRST CAUSES IT TO ENCOUNTER OTHER + ;END STATEMENT IN NEW ASSEMBLY CAUSING CONFUSION + +END 100 +   A,B + PUSHJ P,OUTPUT ;OUTPUT SYM + MOVE A,D + PUSHJ P,OUTPUT ;OUTPUT VALUE + JRST SYMD1 + +IFN A1PSW,[ + ;ROUTINE TO SET VARIABLES FOR BENEFIT OF NED LOGIC + ;CALLED BY OUTPUT SELECTING PSEUDOS OTHER THAN 1PASS AND .LIBRA + +OUTUPD: TRNN FF,PSS ;IF PASS 1, + TLZ FF,PPSS ;THEN INDICATE NOT PUNCHING PASS + TROE FF,NPSS + TLNN FF,OUTF + JRST OUTCHK + AOS OUTN1 ;INDICATE "OUTPUT" HAS OCCURED OTHER THAN IN 1PASS MODE +OUTCHK: TLZE FF,OUTF + AOS OUTC ;INDICATE "OUTPUT" HAS OCCURED DURING CURRENT ASSEMBLY + POPJ P, +] + +SYMD6: TLNN CH1,77 + JRST SYMD1 + JRST SYMD2 + +CNARTP: MOVNI D,1 +CNTP1: MOVEI TT,PCNTB + CAML TT,PBCONL + POPJ P, + HRRZ B,1(TT) + HLRZ A,1(TT) + CAMN A,B + JRST CNTP2 + AOSN D + TYPR [ASCII /CONSTANTS AREA INCLUSIVE +FROM TO +!/ + BYB LDB B,2(TT),\CGBAL_18. + SKIPE B + TYPR [ASCII /GLOBAL+!/ + HRRZ B,1(TT) + PUSHJ P,OCTPNT + PUSHJ P,TAB + HLRZ B,1(TT) + SOS B + PUSHJ P,OCTPNT + PUSHJ P,CRR +CNTP2: ADDI TT,3 + JRST CNTP1+1 + +SYMDA: MOVEI A,LPRGN + DPB A,[(310700)BKBUF + MOVE A,PRGNM + TLO A,40000 + PUSHJ P,OUTPUT + PUSHJ P,OUTPUT + JRST EBLK + + +A.OP: PUSHJ P,AGETFD + (1000+SIXBIT \ No newline at end of file