File MAC24.MA (MACREL macro assembler source file)

Directory of image this file is from
This file as a plain text file

/24D	MACREL MAIN MODULE	POST FT 3
/ 7-MAR-78	INCLUDED PATCHES B-E
/ 8-MAR-78	ADDED AUXILIARY SECT CHUNK SUPPORT
/ 15-AUG-78	IMPROVED ERROR CHECKING ON TAG REDEFINITION
/ 19-AUG-78	NON-RESIDENT OVERLAYS
/ 21-AUG-78	CDF ALWAYS PRODUCES TYPE 3 RELOATION NOW
/		SETIT ZERO PADS ON PASS 1 (ALLOWS MORE SBTTLS)
/	TAGS IN UNKNOWN ORIGIN AREAS ARE UNDEFINED
	.INCLUDE MGLOB.MA
	.ASECT MAINZ
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1977 BY DIGITAL EQUIPMENT CORPORATION
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/
/
/
/
/
/
/
/

.EXTERNAL CRLF,DPRINT,EXPR,LISTER,ORIG,OUT,PASS3,PUNBIT,PUTBIT,PUXBIN .EXTERNAL INIT,ONCE,PURGEL,BACKL,ERRTN .EXTERNAL LINBUF,MACTBL,CMPLXE,PREFIN,HLDRAD,GETNUM,DNUM,DOLCHK .EXTERNAL CREATE,TXTS,INITMS,PART2,ORIGI,MC,SPUSH,SPOP,CREFX .EXTERNAL EXPSTK,LOADY .EXTERNAL KRFSY,OPRINT .GLOBAL KRFTMP,KRFSIM,ER50,ER50SB .GLOBAL ER6,ER7,ER8,ER9,ER20,ER25,ER37,ER38,ER43,ER49 .GLOBAL ER51,ER57,ER59,ER71,ER300,ER80,ER301 .GLOBAL START,UVER,JSW,STARTR,STARTK,UVERK,JSWKEY,NEX .GLOBAL ERRRRS,LPATCH .GLOBAL NM,ENTERR,IDKNT,FILMSG,OUTDAT,STMES,NXTRET,MACEND .GLOBAL DOLFLG,FILESW,NAMPTR,PDSWT,HEADING,GLBFLG,SUBTL .GLOBAL PPASS,INILST,INIENAB,SBTKNT,TOCSIZ,LNKGEN .GLOBAL ERRPAG,ERRMAC,ERRSCT,ERRLIN,ERRLVL,CTRLO,MACLEV .GLOBAL GETLSD,IGNORE,CNVADR,KLU7 .GLOBAL PSEUDB,PSEUDP,PSEUDN,BYEB,BYEP,BYEX .GLOBAL HGHSCT,ENABWD,LISTWD,RADXWD,ZSECTN,MACSAV,ERRBLK .GLOBAL EXTPC,OLDSCT .GLOBAL LOAD,SETIT,PRZLIT,PRGLIT .GLOBAL $FIXMRI,$PAUSE .GLOBAL ASEMLV,BACKUP,BRANCH,CALLIT,CREF,ENTER,EOS,ERKNT,ERROR .GLOBAL FSCHEK,GETCHR,GETKAR,GETSYM,LETTER,LOOKUP .GLOBAL PARSYM,POP,PUSH,PUTSYM,READLN,ROTL6,SCAN .GLOBAL DAT,OVRBLK,BRAN,BUKETS,BUKFLG,DIGIT,LOOP,BEGIN,FINI,MRISAV .GLOBAL BSLXXX,DOLXXX,PART2R /COPYRIGHT (C) 1977 DIGITAL EQUIPMENT CORPORATION /OVERLAP OF LITERALS /ILLEGAL REFERENCES /DIFFERENT SIZE TABLES FOR PG 0 LITS /SET OUTPUT WIDTH /COLCNT SLIGHTLY OFF /LPT LOC 0: 1'S COMPL OF WIDTH /SETIT MODIFIED BY SBTTL, SO INIT LINE DOESN'T BECOME TITLE /IF FIRST LINE HAD SBTTL /NEED LARGER OUTPUT BUFFER /KREF PASS ASSIGNING LINE #S TO ;ED LINES /DEFS FIR KREF /NO PERMS, LOCALS, LITS FOR KREF /PAGE #, ETC. FOR KREF HEADING /TABS IN TITLE AFFECT LOC OF PAGE # /COUNT TABS IN TITLE /CHECK TAD ABS IN FSECT /EDIT 5 15-SEP-76 /1. ALLOWED A 0 RETURNED BY MACRO PROCESSOR TO SIGNAL END-OF-LINE /2. REDUCED SYMBOL TABLE AREA IN FIELD 2 TO BE FROM 5600-6600. /ALLOW TRANSPARENT QUOTE /ERROR ON BOTH FIELD AND PAGE RESTRICTION /62?1 /MOVE OUTLST TO FIELD 0? /ZTERN IN LITERAL DOESN'T CLEAR Z BIT /PUT LINES PER PAGE ON PAGE 0 /DUMP LSD IN DEBUG MODULE /.PSECT ARGS: OVR,CON ABS,REL GBL,LCL /CONSOLIDATE MODE /CREATE NEW S.T. BLOCK /USE MAT INSTEAD OF BAT MODE FOR MACROS /.IRP OR EQUIVALENT /INITIAL INCLUDE ON INCLUD.MA /ADD TO HEADING (AFTER BLOCK LETTERS) /FORM FEED AT BEGIN OF LISTING /JMP I A IN FSECT /ASECT NAME IN EXPR NOT ABSOLUTE /OPTION TO KREF XLISTED SYMBOLS /DOC: DON'T END COND W > ON MACRO CALL /CAN'T TEST FOR < AS NB /MOVE ENTER TO PASS 1 SPECIFIC OVERLAY /HAVE SECOND COPY OF ENTER IN AUXILIARY AREA FOR OTHER PASSES /CHANGE LOAD FORMAT /MACINI 2036/7710_7700 /SWITCH TO NOT USE 7600S? /.IF GLOB,ENTRY,EXTERN,ZTERN /IF REL SHOULD CHECK CODE /LIST UNDEF SYMS IN S.T. /CHECK FOR NO FILES? /GIVE ERROR IF OUTPUTTING TO FS DEV W NO NAME INHAND==6400 OUTHAND==7200
/ * * * * * * * * * * * / * * ) * * * / * ) * * / * ) * * / * O ) * * / * ) * * / * ) MACREL V1A * / * ) * * / * / ) * * / * ------ ) * * / * ) * * / * * ) * * * / * * * * * * * * * * *
IFDEF PLM < /CORE LAYOUT FOR MACREL / / FIELD 0 / /0000-6577 PROGRAM /6600-7177 INPUT HANDLER ONCE ONLY CODE /7200-7577 OUTPUT HANDLER ONCE ONLY CODE / / FIELD 1 / /2000-2377 HEADING, TITLE, ONCE-ONLY STUFF /2400-3377 INPUT BUFFER /3400-3777 OUTPUT BUFFER /4000-4177 INPUT LINE BUFFER /4200-4377 CURRENT PAGE LITERAL POOL /4400-4577 CURRENT FIELD PAGE 0 LITERAL POOL /4600-6177 INPUT/OUTPUT CODE /6200-7577 SYMBOL TABLE INITIAL SYMBOL TABLE >
IFDEF PLM < /PAL 8 FEATURES NOT YET IMPLEMENTED / /CHECK FOR IR, DT, MD ERRORS /GENERATED LINKS /RELOC /PASS 1 ERROR MESSAGES /ERROR MESSAGES ON TTY IF NO LIST FILE //$ / / /NEVER TO BE IMPLEMENTED: / /DTORG /REMEMBERING OF LITERALS /NO RE-ORIGIN TO 200 AFTER FIELD PSEUDO-OP. / / / / /SYMBOLS USED BY EXPRESSION ROUTINE: / /'EXPR' RETURNS ABSOLUTE PART OF RESULT IN AC (12-BITS) /AND RELATIVE PART OF EXPRESSION IN LOCATION 'EXPREL' (15-BIT PTR). / /INTERNAL TO EXPR, THE FOLLOWING (TRULY) LOCAL SYMBOLS ARE USED: / /VALUE - ABSOLUTE PART OF TERM TO BE COMBINED IN WITH REST OF EXPRESSION /RESULT - ABSOLUTE PART OF TOTAL EXPRESSION SO FAR COMPUTED / /SCTRES - RELATIVE PART OF RESULT OF TOTAL EXPRESSION SO FAR COMPUTED /SCTVAL - RELATIVE PART OF TERM TO BE COMBINED IN / /UNARYM - NUMBER OF MINUSES SEEN ON TERM TO BE COMBINED IN /PRVOPR - PREVIOUS OPERATOR (USED TO COBINE NEW VALUE WITH OLD RESULT) / NEW NAMES: / OLD NEW / VALUE TRMABS / RESULT EXPABS / SCTRES EXPREL / SCTVAL TRMREL > PGLINS=70 /NUMBER OF LINES PER PAGE
*0 VERSN, PTCHLEV KNT, 0 NUM, 0 TEMP, 0 SWATOL, 0 /SWITCHES A-L SWMTOX, 0 / M-X SWYTO9, 0 / Y,Z 0-9 *10 XR0, 0 XR1, 0 /TEMPORARY INDEX REGISTER XR2, 0 XR3, 0 /USED BY MACROS XR4, 0 /USED BY GETSYM, PUTSYM XR5, 0 /USED BY LITERAL PROCESSOR XR6, 0 /USED BY MOVE XR7, 0 PGLINS=70 /NUMBER OF LINES PER PAGE *20 FORM, 1 /NON-0 MEANS START A NEW PAGE /BEFORE NEXT LINE LINCNT, -1 /PHYSICAL LINE COUNT ON CURRENT /LISTING PAGE (NO. OF LINES LEFT) PAGENO, 0 /CURRENT PAGE NUMBER LINENO, 0 /CURRENT LINE NUMBER IN MODULE LINEN2, 0 /HIGH-ORDER LINE NUMBER LINEXT, 0 /EXTENSION LINE NUMBER CHAR, 0 /CURRENT CHARACTER NEWTIT, 0 /NON-0 MEANS SET NEW HEADING /FROM FIRST LINE. FLG, 0 NAME1, 0 /KEEP AT LOC XXX1 FOR DEBUGGING PURPOSES NAME2, 0 NAME3, 0 SYMVAL, NAME4, 0 FLAG, 0 SYMSCT, 0 /SECT OF SYMBOL QUAL, 0 LINPTR, 0 PASS, 0 /PASS NUMBER (1,2,3,4...) FREEPTR,INIT%10+1000 /15-BIT PTR TO FIRST CHUNK OF FREESPACE LPTR, 0 /USED BY SYMBOL TABLE STUFF PC, 200 /CURRENT LOCATION COUNTER CURSCT, 0 /CURRENT SECT (15-BIT PTR INTO S.T.) CSTYPE, 10 /CURRENT SECTION TYPE BINARY, 1234 /BINARY (OR SECOND COLUMN PRINTOUT) OF CURRENT LINE EXPABS, 0 /CURRENT VALUE OF EXPRESSION EXPREL, 0 /SECT OF RESULT EXPCOD, 0 TRMABS, 0 TRMREL, 0 TRMCOD, 0 SYMNUM, 0 /15-BIT PTR TO CURRENT SYMBOL UNDEF, 0 /NON-ZERO IF EXPRESSION CONTAINS AN /UNDEFINED SYMBOL. MUST BE 0ED BEFORE /EACH MAJOR CALL.
REMAIN, 0 /REMAINDER AFTER AN IDIV SAVPTR, 0 /HOLDS PTR TO BEGIN OF STATEMENT PART PCFLAG, 0 /NON-ZERO MEANS DON'T PRINT PC IN LEFT MARGIN BNFLAG, 0 /NON 0 MEANS DON'T PRINT BINARY CURFLD, 0 /CURRENT FIELD /SET TO "?-60 IF FIELD UNKNOWN PERM= 1000 MRI= 2000 PSEUM= 2 PSEUD= 3 ENTRYY= 4 GLOB= 5 EXTRN= 6 ZTRN= 7 LITPAG, 200 /PAGE OF CURRENT PAGE LITERALS LITSCT, 0 /SECT OF LITERALS CLTLOC, 0 /LOCATION OF LAST GENERATED CURRENT PAGE LITERAL /0 MEANS NO LITERALS YET GENERATED ZLTLOC, 0 /LOCATION OF LAST GENERATED PAGE 0 LITERAL /0 MEANS NO LITERALS YET GENERATED IFLAG, 0 /-1 IF SAW I IN AN EXPRESSION ZFLAG, 0 /-1 IF SAW Z IN AN EXPRESSION XTABS=3 /NO. OF TABS FOR EXTENSION LINE IFDEF PLM < /SWITCHES / /A ADD PDP-8/E SYMBOLS /C CHAIN TO CREF /E ENABLE ERROR IF LG /G GO /J DON'T LIST CONDITIONALIZED OUT CODE /K KREF LOCAL SYMBOLS /L LINK /M KREF PERMANENT SYMBOLS /N NO LISTING (SYMBOL TABLE ONLY) /O OMIT MACRO SYMBOLS /P RESET LINE NOS. TO 0 FOR EACH PAGE /Q ADD MQ (EAE) SYMBOLS /R GET RID OF REDUNDANT SYMBOLS /S OMIT SYMBOL TABLE /=N WIDTH > /RESTRICTION TYPES: / RTNONE=0^1000 /NO RESTRICTION RTABSF=1^1000 /ABSOLUTE FIELD RESTRICTION RTABSO=2^1000 /ABSOLUTE ORIGIN RESTRICTION RTSAMP=3^1000 /SAME PAGE AND FIELD AS REF RESTRICTION RTSAMF=4^1000 /SAME FIELD AS REF RESTRICTION
INPLEN=2 /NO. OF BLOCKS IN INPUT BUFFER PINLEN=INPLEN^2 FIXMRI INCR=ISZ /INCREMENT, BUT NO SKIP EXPECTED OUTLN=1 /NO. OF BLOCKS IN (LIST) OUTPUT BUFFER OUTPRS=OUTLN^200/NO. OF DOUBLE-WORDS IN OUTPUT BUFFER OUTCRS=OUTLN^600/NO. OF CHARS IN OUTPUT BUFFER USR=7700 HEADLN=40 /# OF CHARS IN TITLE HEADING / SUBLEN=61 /# OF CHARS IN SUBTITLE HEADING (AT LEAST 20) MQL=7421 PUNFLG, 0 /1 MEANS NO PUNCH /CHKSUM, 0 /TEMPORARY BINARY CHECKSUM /BEFLAG, 0 /1 MEANS DON'T PRINT BINARY EXTENSIONS PAD, 40 HGHLOC, 0 /HIGHEST LOCATION USED ON A PAGE TAGLOC, 0 /15-BIT PTR TO SYMBOL TABLE ENTRY /FOR LAST TAG SEEN DEFINED WITH A COMMA /(USED BY ERROR PRINTOUTS AND BY LSB'S) /0 MEANS NONE BITS, 0 EXTNDED= 0^400 REL12= 1^400 RELFLD= 2^400 LOADZB= 3^400 NEWSCT= 4^400 REL12Z= 5^400 TASKOD= 13^400 ORGCOD= 1 /SPECIAL LOADER CODE FOR ORIGINS /IF ZBLOCK LOADS 0, THEN NEXT WORD IS LENGTH OF ZBLOCK. (*** NEW) /ALLOW ZBLOCK, TO RESERVE SPACE IFDEF PLM < /AT THE END OF PASS 1, CALCULATE THE NUMBER OF LSD ENTRIES /SECT, GLOBAL, EXTERNAL, ENTRY. /ASSIGN NUMBERS TO THESE ENTRIES. /AT THE END OF EACH PASS, ZERO THE LENGTHS OF ALL SECTS. /TYPES OF LSD ENTRIES: /ENTRY /SECONDARY REFERENCE /SECT NAME /GLOBAL /EXTERNAL >
/EXPSCT, 0 HISEK, 0 /HIGHEST PC USED BY CURRENT SECT DATEWD=7666 /LOCATION OF OS/8 DATE IN FIELD 1 LINOUT, 0 /1 MEANS CURRENT LINE HAS NOT YET PRINTED INIFLG, 0 /INITIAL FLAG WORD FOR AN ENTER CONCNT, 0 TCKNT, -1 /LINE COUNT FOR TABLE OF CONTENTS WIDTH, 204 /WIDTH OF OUTPUT DEVICE RELOK, 0 /RELOCATION VALUE FOR 'RELOC' /ADD THIS TO ALL ORIGINS OUTPUT /MACRO PROCESSOR LOCATIONS: AT1, 0 /CURRENT LEVEL BASE POINTER AT2, 0 /ARG STORAGE POINTER AT4, 0 /ADDRESS OF NEXT LEVEL IN A.T. OV1, 0 /COUNT OF LEVELS OF NESTED MACRO CALLS OVER MAXIMUM MS1, 0 /CURRENT CELL POINTER MS2, 0 /CURRENT WORD ADDRESS IN CURRENT CELL SS3, 0 /OUTPUT PARAMETER FOR "MATCH" /0-INDEXED NUMBER OF TRIALS PERFORMED. /EXAMPLE: VALUE OF 3 MEANS THAT 4TH KEYWORD /IN LIST MATCHED THE CURRENT SYMBOL. /THE CURRENT SYMBOL IS IN NAME1-NAME3 SMCOUNT,0 /NEGATIVE COUNT OF CHARS IN SYMBOL KUST PARSED /STORED BY "RESCAN" SAVLIN, 0 /POINTER TO FIRST CHAR IN SYMBOL FLGLOC, 0 FLGFLG, 0 HDRWRD, 4000
IFDEF PLM < /LISTING CONTROL / /WHOLE LINE & STUFF /LOCATION COUNTER* /BINARY* /BINARY EXTENSIONS /COMMENTS /MACRO DEFINITIONS /MACRO CALLS /MACRO EXPANSIONS /MACRO EXPANSION BINARY PRODUCING LINES /CONDITIONAL CODE /LISTING DIRECTIVES /TABLE OF CONTENTS /LINE NUMBERS* /SOURCE LINE* / /* MAKES NO SENSE TO MIX / /FLAG WORD: BIT 0: DEFINED BIT / BIT 1: MRI BIT / BIT 2: PERMANENT SYMBOL / BIT 3: PASS 1 DEFINED / BIT 4: LOCAL OR QUAL'ED / BIT 5: DEFINED BEFORE USE BIT / FOR SECTIONS, 1 MEANS UNNAMED DEFAULT / BITS 6-8: 0 NOT A SECT / 1 A-SECT / 2 R-SECT / 3 F-SECT / 4 D-SECT / 5 Z-SECT / 6 X-SECT / 7 RESERVED / BITS 9-11: 0 REGULAR SYMBOL / 1 USER MACRO / 2 PSEUDO-MACRO / 3 PSEUDO-OP (DIRECTIVE) / 4 ENTRY / 5 GLOBAL REGULAR SYMBOL / 6 EXTERNAL / 7 EXTERNAL PAGE 0 (ZTERN) / / NOTE: BIT 9 ON MEANS BELONGS TO LSD / / IF UNDEFINED, ASSUME ALL OTHER BITS 0 / /PASSES: / /1 TABLE-OF-CONTENTS, DO DEFS /2 BINARY /3 LISTING /4 CREF > /CAN CHANGE ALGORITHM ABOVE TO USE FEWER BITS: /HAVE BIT 6 ON MEAN ITEM IS A SECT /USE BITS 7-11 FOR TYPE
/.LIMIT STUFF /SECONDARY REFERENCES /MUST LT BE ON SAME LINE AS IFDEF?
IFDEF PLM < /FIELD 1 CONTAINS THE SWITCH OPTIONS: / /7642 ALTMODE /7643 A-L /7644 M-X /7645 YZ0-9 /7646 = / /SYMBOL TABLE FORMAT / /LAYOUT REG USER PSEUDO EXTERN ASECT DSECT RSECT OTHER / SYMBOL MACRO MACRO SECT / /0 PTR PTR PTR PTR PTR PTR PTR PTR PTR /1 S Y /2 M B /3 O L /4 VALUE ABS 15-BIT 12-BIT UNUSED H.O. LENGTH LENGTH H.O. / VALUE PTR ADDR L.O. HIGHEST / RELATIVE / ORIGIN / /5 FLAG FLAG FLAG FLAG FLAG FLAG FLAG FLAG FLAG / /6 SECT SECT 15-BIT OVERLAY UNUSED ORIGIN RESTR RESTR RESTR / END PTR /7 QUAL QUAL UNUSED UNUSED LSDNUM FIELD/ RT/ RT/ RT/ / LSDNUM LSDNUM LSDNUM LSDNUM LSDNUM / /****NEW AUXILIARY SECT CHUNK SUPPORT: /HIGH 4 BITS OF QUAL WORD ARE NO LONGER USED /LSDNUM IS ALL ALONE /IN SECTS, WORD 6 OF SYMBOL TABLE ENTRY (SYMSCT) IS A 15-BIT POINTER /TO AN AUXILIARY CHUNK. THE FORMAT OF THIS AUXILIARY CHUNK IS AS FOLLOWS: / /0 0 (INDICATES NO SUBSEQUENT CHUNK) /1 RT (RESTRICTION TYPE) OR FIELD (IF ABSOLUTE) /2 RESTR (ORIGIN IF ASECT) /3 LVL/OVR /4 CONCAT (=1) /5 LENGTH OF SECT WITHOUT LITERALS (FSECTS ONLY) / /WE RECALCULATE THE HIGHEST SECT PC FOR CURRENT SECT /ON ANY OF THE FOLLOWING CONDITIONS: / / PAGE / FIELD (*) / END-OF-PROGRAM (*) / SECT (*) / ORIGIN / / (*) WRITE IT OUT / / /NOTE: RESTRICTION BITS: / /WORD 5: RESTRICTION ITSELF / /WORD 6: BITS 4-11: LSD NUMBER / BITS 0-2: TYPE OF RESTRICTION / 0 NO RESTRICTION / 1 ABSOLUTE FIELD RESTR GIVEN IN WORD 5 / 2 12-BIT ABS ORIGIN RESTR GIVEN IN WD 5 / 3 SAME PAGE & FIELD AS 15-BIT PTR IN WD 5 / 4 SAME FIELD AS 15-BIT PTR IN WORD 5 / /RT: RESTRICTION TYPE >
.ASECT MAIN *200 START, SKP /REGULAR ENTRY POINT UVER, JMP NIXT /CHAIN ENTRY POINT JSW, CIF 10 /9 STARTR, JMS I LUSR /CALL USER SERVICE ROUTINE TO STARTK, 5 /PERFORM A COMMAND DECODE UVERK, 1501 /DEFAULT INPUT EXTENSION IS .MA JSWKEY, NIXT, JMS I (ONCE NEX, JMS I (LOAD /LOAD PASS INITIALIZATION OVERLAY INHAND+10 JMP I .+1 /JUMP TO IT INHAND / DESCRIPTION OF SOME OF THE ABOVE LOCATIONS / NOTE THAT 'NEX' TO 'NEX+3' ARE NOT ONCE-ONLY / AND CAN NOT BE REUSED. / THE OTHER LOCATIONS GET CLOBBERED BY DATA. /LOCATION DESCRIPTION /START ABSOLUTE PART OF STARTING ADDRESS /UVER USER VERSION NUMBER FOR THIS MODULE /JSW JOB STATUS WORD /STARTR RELATIVE PART OF STARTING ADDRESS /STARTK 0 IF STARTING ADDRESS WAS SPECIFIED /UVERK UNUSED (0'ED IF VERSION # SPECIFIED) /JSWKEY 0 IF JSW SPECIFIED BY USER
/ ADDITIONAL LOCATIONS WHICH WOULD HAVE LIKED TO HAVE BEEN ON PAGE 0 PPASS, 0 /PHYSICAL PASS NUMBER /BUMPED BY ONE FOR EACH PASS ACTUALLY IN PROGRESS INILST, 600 /INITIAL LIST WORD /PERSEVERANCE PAYS OUT! INIENAB,0 /INITIAL ENABLE CONDITION SBTKNT, 0 /1 IF ANY .SBTTL DIRECTIVES ENCOUNTERED TOCSIZ, 0 /NUMBER OF BLOCKS ACTUALLY WRITTEN OF T-OF-C LNKGEN, 0 /7 IF LINK HAS BEEN GENERATED ON THIS LINE ERRPAG, 0 /PAGE NUMBER OF LAST ERROR LOGGED ERRMAC, 0 /CHUNK PTR TO MACRO NAME OF LAST ERROR LOGGED ERRSCT, 0 /SECT OF LAST ERROR LOGGED ERRLIN, 0 /LINE NUMBER (L.O.) OF LAST ERROR LOGGED ERRLVL, 0 /CURRENT ERROR LEVEL, F:-1 L:0 E:1 CTRLO, 0 /NON-0 MEANS ^O TYPED MACLEV, 0 /CURRENT LEVEL OF MACRO NESTING LUSR, GETLSD, USR JMS CNVADR TAD QQ7 /POINT TO QUAL WORD (CONTAINS LSD NUMBER) DCA TEMP TAD I TEMP /RETURN LSD AND QQ377 CDF 0 JMP I GETLSD
IGNORE, 0 JMS I QQEOS JMP BYEX /ABORT DIRECTIVE AT EOS JMS I QQGETCHR /USUALLY, IGNORE BAD CHAR JMS I QQSCAN JMP I IGNORE
/CNVADR CONVERTS A 15-BIT ADDRESS IN AC TO A 12-BIT ADDRESS /(LEFT IN AC) AND CHANGES TO THE CORRECT DATA FIELD. CNVADR, 0 DCA CNVAD1 /SAVE 15-BIT POINTER TAD CNVAD1 RTR RTR RTR AND QQ70 TAD (CDF /CONVERT TO CDF CHUNK FIELD DCA .+1 HLT /CHANGE TO PROPER DATA FIELD TAD CNVAD1 CLL RAL CLL RAL CLL RAL JMP I CNVADR /RETURN WITH 12-BIT PTR IN AC CNVAD1, 0 /TEMPORARY
$PAUSE, PSEUDB, INCR BNFLAG PSEUDP, INCR PCFLAG PSEUDO, JMS I QQOUT PSEUDN, JMS I QQSCAN JMS I QQEOS JMP I QQASEMLV JMS I PANG JMP PSEUDN PANG, ANG BYEB, INCR BNFLAG BYEP, INCR PCFLAG BYEX, JMS I QQOUT JMP I QQASEMLV
PHGHTMP, HGHTMP /HGHTMP, 0 /KEEPS TRACK OF HIGHEST PC USED IN SECT HGHSCT, 0 / SNA / JMP I HGHSCT /YOU OLD RASCAL TAD RELOK CDF 20 DCA I PHGHTMP /LEAVE NEW POSSIBLE HIGH IN AC TAD PC DCA I (PC2 CDF 0 / TAD PUNFLG / SZA CLA / JMP I HGHSCT TAD CURSCT JMS I QQGETSYM TAD CSTYPE TAD QM10 SZA CLA JMP MAXI TAD SYMSCT JMS CNVADR CIF 20 JMS I (KLU4 JMP PR2 EXTPC, 0 /1 IF PC IS EXTERNAL OLDSCT, 0 /PREVIOUS 15-BIT PTR TO SECT
/MUST BE AT MULT OF 10 LOCATION: *.-1&7770+10 ENNTRY, LINTRY%10 TEXT /\ENABW/ *.-1 ENABWD, 0 PERM+4000 0 0 LINTRY, 0 TEXT /\LISTW/ *.-1 LISTWD, 0 /0 MEANS LIST, NON-0 MEANS NO LIST PERM+4000 0 0 RADXWD, 0 /CURRENT RADIX ZSECTN, 0 /PTR TO SECT OF CURRENT PAGE LITERALS MACSAV, 0 ERRBLK, 0 /FIRST BLOCK OF MACERR.SV MAXI, CIF 20 JMP I (MAXY PR2, JMS I QQPUTSYM JMP I HGHSCT PAGE
OVRBLK, 0 /BLOCK NUMBER OF START OF MACOVR.SV /LOAD, 0 / DCA OVRNUM /SAVE OVERLAY NUMBER / TAD I LOAD /GET OVERLAY LOCATION / DCA OVRLOC / ISZ LOAD / TAD I OVRLOC /WHAT OVERLAY IS THERE? / CIA / TAD OVRNUM / SNA CLA /IS IT THIS OVERLAY? / JMP I LOAD /YES, ALREADY IN / TAD OVRNUM /NO / TAD OVRBLK / DCA OBLK / JMS I (7607 /CALL SYSTEM HANDLER / 200 /READ 2 PAGES /OVRLOC, 2000 /OBLK, 0 / JMP ER51 / TAD I OVRLOC / CIA / TAD OVRNUM / SNA CLA / JMP I LOAD /ER51, JMS I QQERROR /ERROR READING OVERLAY / /OR OVERLAY WAS BAD / JMP I QQASEMLV / /OVRNUM, 0 LOAD, 0 TAD I LOAD /AC MAY BE NON-ZERO ISZ LOAD CIF 20 JMS I (LOADY JMP I LOAD GODIR, TAD SYMVAL DCA DESTY TAD SYMSCT /LOOK AT OVERLAY NUMBER SNA /IS DIRECTIVE IN AN OVERLAY? JMP .+3 /NO JMS LOAD /YES, BRING IT IN 2000 JMP I DESTY /GO TO IT DESTY, 0
SETIT, 0 /SET A NEW TITLE FROM THIS LINE DCA NEWTIT /THIS ONCE ONLY TAD I SETIT /GET LENGTH OF TITLE (SUBTTL) DCA TITKNT /IT SHOULD CONTAIN EXACTLY 'HEADLN' CHARS INCR SETIT /POINT TO PTR TO NEW TTL TAD I SETIT INCR SETIT DCA XR2 STA /-1 MEANS PAD FROM GET, ELSE PAD WITH TITLG JMP 1$ /INITIALIZE 'TITFLG' TO 0 2$: STA TAD PASS SZA CLA TAD QQ40 1$: DCA TITFLG /SET TITFLG TO 40 TO PAD WITH BLANKS L$: TAD TITFLG /LOOK AT FLAG SPA /SHOULD WE PAD WITH SPACES? JMP G$ /NO, PAD WITH CHARS FROM INPUT LINE 3$: CDF 10 DCA I XR2 /STORE CHARACTER INTO HEADING CDF 0 ISZ TITKNT /DO WE WANT TO SET ANY MORE CHARACTERS? JMP L$ /YES JMP I SETIT /NO, RETURN G$: CLA JMS I (GET SNA /HAVE WE RUN OUT OF INPUT LINE? JMP 2$ /YES, FORCE PADDING WITH SPACES (OR NULLS) JMP 3$ /NO TITFLG, 0 /40 MEANS PAD HEADING TITLE WITH SPACES
PRZLIT, 0 CLA IAC JMS PURG JMP I PRZLIT PRGLIT, 0 JMS PURG JMP I PRGLIT PURG, 0 DCA TITKNT JMS LOAD AUXOVR+31 TAD TITKNT JMS I (PURGEL JMP I PURG TITKNT, 0 /-NO. OF CHARS LEFT TO MOVE TO HEADER
BACKSL, JMS LOAD AUXOVR+32 JMS I (BACKL SYMSTO JMP I (GETS2
ERROR, 0 ISZ ERKNT CLA RDF TAD KCIDF DCA ERRGO KCIDF, CIF CDF 0 /WRITE 5 BLOCKS FROM 10400 TO ERRBLK+16 TAD I (ERRBLK SNA HLT /MACERR.SV NOT FOUND TAD (16 DCA BL1 JMS I (7607 5210 /WRITE 12 PAGES (5 BLOCKS) 0400 /ADDRESS BL1, 7777 /BLOCK NUMBER HLT /*** /READ 4 BLOCKS FROM ERRBLK+1 TO 11000 TAD I (ERRBLK IAC DCA BL2 JMS I (7607 1010 /READ 10 PAGES (4 BLOCKS) 1000 /ADDRESS IN FIELD 1 BL2, 0 /BLOCK NUMBER HLT /*** / CALL ERROR MESSAGE GUY CIF 10 JMS I (ERRTN /READ 5 BLOCKS BACK FROM ERRBLK+16 INTO 10400 TAD BL1 DCA BL3 JMS I (7607 1210 /READ 12 PAGES (5 BLOCKS) 0400 /ADDRESS BL3, 0 /BLOCK NUMBER (SWAP AREA INSIDE MACERR.SV) HLT /*** ERRGO, HLT JMP I ERROR /RETURN ERKNT, 0 /NUMBER OF ERRORS PAGE
IFDEF PLM < / READLN / / THIS ROUTINE READS A LOGICAL LINE OF TEXT FROM THE / OS8 INPUT BUFFER. IT DOES THIS BY GETTING A CHARACTER / AT A TIME BY CALLING 'NEXTCHAR'. IT STORES THIS LOGICAL / LINE IN 'LINBUF'. THE END OF THE LOGICAL LINE IS SIGNALLED / BY A 0 IN THE LINE BUFFER. LOGICAL END OF LINE IS / INDICATED BY ANY OF THE FOLLOWING ASCII CHARACTERS / / (LF), (^Z), (0) / / WITH THE FOLLOWING EXCEPTIONS: / / A CTRL/Z ADDITIONALLY SIGNALS END OF FILE. /? IT IS ASSUMED THAT ALL ASCII INPUT FILES TO MACREL END WITH /? A CTRL/Z. A FILE IS NOT PERMITTED TO JUST RUN TO THE END. / / IF A FORM FEED IS FOUND WITHIN A LOGICAL LINE, THEN THE / 'FORM' FLAG IS SET, WHICH TELLS US THAT BEFORE PRINTING / THIS LINE, WE MUST PERFORM A FORM FEED. THIS FORM FEED / DOES REMAIN IN THE LINE. / / POSSIBLE BUGS: VERTICAL TAB IS NOT TREATED SPECIAL. / NO CHECK IS CURRENTLY MADE FOR LINE TOO LONG. / / NOTE: (CR) CHARACTERS ARE IGNORED. / / CALLING SEQUENCE: / / JMS READLN / <END-OF-FILE RETURN> / <NORMAL RETURN> >
NXTRET, JMP I NEXTCHAR NEXTCHAR,0 CIF CDF 10 JMP I (STRJMP
SYKNT, 0 / EXPLAIN *** GETSYM, 0 JMS GPCOMN TAD (DCA SYMVAL DCA STOR GET2, TAD I XR4 STOR, DCA SYMVAL INCR STOR ISZ SYKNT JMP GET2 CDF 0 JMP I GETSYM PUTSYM, 0 JMS GPCOMN TAD (TAD SYMVAL DCA FET FET, TAD SYMVAL INCR FET DCA I XR4 ISZ SYKNT JMP FET CDF 0 JMP I PUTSYM GPCOMN, 0 SNA /SYMNUM IN AC IS OK TOO TAD SYMNUM JMS I (CNVADR TAD (3 DCA XR4 TAD (-4 DCA SYKNT JMP I GPCOMN
READLN, 0 TAD (LINBUF-1 DCA XR6 /POINT TO BEGIN OF INPUT LINE BUFFER /POINT TO NEXT POSITION RDLUP, JMS NEXTCHAR /GET A CHARACTER DCA CHAR TAD CHAR TAD (MACTBL DCA TEMP CDF 10 TAD I TEMP SMA CLA JMP NOTEOL CDF 0 TAD CHAR TAD (-14 SMA SZA JMP CR SZA CLA JMP LF INCR FORM JMP RDLUP
CR, CLL RAR SNA CLA JMP RDLUP /CR TAD XR6 /CTRL/Z TAD MLIN SZA CLA /AT BEGIN OF BUFFER? JMP LF /NO, TREAT ^Z AS LF CDF 10 DCA I (LINBUF /MAKE SURE LINE IS EMPTY JMP RDRET /YES, TAKE END-OF-FILE RETURN NOTEOL, TAD CHAR DCA I XR6 /STORE IN BUFFER CDF 0 JMP RDLUP /GO LOOK FOR NEXT CHARACTER LF, CDF 10 DCA I XR6 /PUT 0 AT END OF BUFFER INCR READLN /SKIP END-OF-FILE RETURN RDRET, CDF 0 TAD (LINBUF-1 DCA LINPTR /SET UP FOR USE TAD I (LISTWD RAR CLA CML TAD I (LISTWD CMA SMA SNL CLA JMP 1$ TAD FORM SZA CLA INCR PAGENO TAD I (MACLEV SNA CLA INCR LINENO 1$: ISZ LINOUT /NOTE PRESENCE OF NEW LINE TAD LINENO DECIMAL TAD (-1000 SNA INCR LINEN2 SZA TAD (1000 OCTAL DCA LINENO JMP I READLN /RETURN FORMF, INCR FORM /NOTE FACT THAT WE WANT TO /START A NEW PAGE JMP RDLUP
ENTERR, 0 /DO AN ENTER JMS I QQENTER /BUT GIVE AN ERROR MESSAGE STA /IF NOT PASS 1 TAD PASS SZA CLA ER300, JMS I QQERROR JMP I ENTERR IFDEF PLM < /THERE ARE 3 STREAM INPUT ROUTINES: / /OGET GETS CHARACTER FROM OS/8 INPUT FILE /IGET GETS CHARACTER FROM INCLUDED INPUT FILE /MGET GETS CHARACTER FROM MACRO SPACE / / OGET / /OGET BUFFERS A PHYSICAL LINE. /IT ASSIGNS IT A LINE NUMBER, IN CASE WE WANT TO PRINT ORIGINAL /LINE BEFORE DONE WITH IT (AS IN THE CASE OF SEMICOLONS). /THE BUFFERED LINE IS IN 'ORIGLB' IN FIELD 1. /IT CONTAINS ASCII CHARACTERS, 1 PER WORD, TERMINATED BY A 0. /CR'S IN OS/8 BUFFER ARE IGNORED, LF'S SIGNAL END-OF-LINE /AND GET PUT IN AS 0 IN 'ORIGLB' . FORM FEEDS ARE NOT /PUT IN BUFFER, BUT SET 'FORM' TO 1. /CTRL/Z IS NOT PUT IN BUFFER BUT CAUSES NEXT FILE TO BE READ, /CHARACTERS THEN CONCATENATE ON. /IF NO ADDITIONAL FILE, LINE IS TERMINATED (CALL SWITCHBACK LATER). > MLIN, 1-LINBUF ER50SB, 0 ER50, JMS I QQERROR /UNTERMINATED RELOC JMP I ER50SB PAGE
/ .ASECT MAIN.2 / *2000 / / 0 /INITIALLY DIRECTIVES OVERLAY IS EMPTY / / *2400 / / 0 /AUXILIARY OVERLAY AREA IS CLEAR TOO
.ASECT MAIN.3 *4600 ER37, JMS I QQERROR /NO SYMBOL AFTER 'FIXMRI' JMS I (IGNORE $FIXMRI,JMS I QQSCAN JMS I QQLETTER /IS IT A LETTER? JMP ER37 /NO JMS I QQPARSYM /YES, GET AN IDENTIFIER TAD (MRI /*** INEFFICIENT EQL, DCA MRISAV /SAVE MRI STATUS TAD (100 DCA INIFLG /MAYBE SYMBOL IS DEFINED BEFORE USE JMS I QQLOOKUP JMS I QQENTER DCA INIFLG /BUT ON THE OTHER HAND - MAYBE NOT JMS I QQGETSYM TAD ("= /DEFINED VIA AN EQUATE JMS I (KRFSIM /NEED? CHECK FOR UNDEF EQL2, TAD CHAR TAD (-75 SZA CLA JMP ER38 /NO = JMS I (GET TAD (-75 /= DCA GLBFLG /0 IF SEE ANOTHER = INCR PCFLAG TAD SYMNUM DCA LFTSAV /SAVE LEFT SIDE TAD GLBFLG SZA CLA JMS I QQBACKUP /BACK OVER CHAR WHICH WASN'T AN = JMS I QQEXPR DCA BINARY TAD LFTSAV /GET BACK LEFT SIDE DCA SYMNUM JMS I QQGETSYM TAD FLAG /MAKE SURE LEFT SIDE IS NICE AND QQ77 SZA TAD (-5 /IT MUST BE REGULAR OR GLOBAL SZA CLA JMP ER71 TAD EXPCOD SZA CLA JMP CMPLX TAD EXPREL SZA CLA TAD K3 DCA FLG /PRINT * IF RELOCATABLE TAD BINARY DCA SYMVAL TAD EXPREL DCA SYMSCT TAD MRISAV /GET BACK MRI STATUS DCA TEMP TAD FLAG AND (-MRI-1 /*** INEF TAD TEMP /PUT IN NEW MRI BIT RAL STL RAR /MAKE SYMBOL DEFINED DCA FLAG TAD GLBFLG /WAS == SPECIFIED? SZA CLA JMP NOTG /NO / TAD FLAG /YES / AND QQ7 /WHAT TYPE OF SYMBOL DID WE HAVE? / SZA / TAD (-GLOB / SZA CLA /ER71, JMS I QQERROR /DEFINED BUT NOT GLOBAL REDEFINITION TAD FLAG AND QQ7770 TAD (GLOB /MAKE GLOBAL YESG, DCA FLAG NOTG, JMS I QQPUTSYM JMP I (BYEP K3, 3
GETCHR, 0 CDF 10 / TAD I LINPTR / SZA CLA /DON'T ADVANCE PAST 0 /*** BUG IF SECT WITH NO , HAS ; AT END INCR LINPTR /POINT TO NEXT CHARACTER TAD I LINPTR /GET IT AND QQ177 /MORE SAFETY DCA CHAR /SAVE A PERMANENT COPY TAD CHAR TAD (MACTBL DCA TEMP TAD I TEMP /GET BITS FROM CHARACTER BRANCH TABLE DCA BITS CDF 0 JMP I GETCHR SCAN, 0 SPTAB, TAD BITS RTL SMA CLA JMP I SCAN JMS I QQGETCHR JMP SPTAB
MRISAV, 0 GET, 0 JMS I QQGETCHR TAD CHAR JMP I GET ER38, JMS I QQERROR /NO = AFTER A FIXMRI PSEUDO-OP JMS I (IGNORE /IGNORE CHAR JMP EQL2 LFTSAV, 0 GLBFLG, 0 /0 MEANS ==
CMPLX, JMS I (LOAD AUXOVR+6 JMP I (CMPLXE /HANDLE EQUATE TO GLOBAL ER71, JMS I QQERROR /LEFT SIDE OF = HAS BAD TYPE JMP I (BYEP PAGE
CTRLC, 0 /CHECK FOR ^C FROM TTY TAD QQ200 KRS TAD M203 SNA CLA KSF JMP I CTRLC JMP I (7605
FINI, CDF 0 /LOAD PRE-FIN OVERLAY JMS I (LOAD 2000+22 JMP I (PREFIN M203, -203
BACKUP, 0 STA TAD LINPTR DCA LINPTR JMP I BACKUP BRAN, 0 TAD BRAN DCA BRAN TAD I BRAN DCA BRAN JMP I BRAN
NUMLCL, TAD I (RADXWD DCA I (HLDRAD TAD (12 /PARSE ANY DIGIT STRINGS IN DECIMAL DCA I (RADXWD JMS I (GETNUM DCA I (DNUM /SAVE PARSED NUMBER TAD I (HLDRAD DCA I (RADXWD TAD I (RADXWD SZA CLA /DON'T ALLOW 0$ JMS I (DOLCHK /LOOK FOR $ AT END JMP I (GETEX2 /NO $ JMP I (B2 /FOUND A $
PART2R, JMS I (LOAD 2000+27 JMS I (CREATE DCA I (TXTS JMS I (INITMS JMP I (PART2 MACEND, TAD I (MACSAV /GET BACK MACRO INFO JMS I QQGETSYM TAD MS1 DCA TXTEND TAD I (TXTS DCA TXTSTRT TAD I (MACSAV JMS I QQPUTSYM /STORE AWAY INFO ABOUT MACRO JMP I (BYEB
/CDFREL, JMS CMPCUR / IAC /NOT = USE CODE 3 / TAD L6002 /= USE CODE 2 / DCA FLG / TAD (RELFLD / JMP I (OUTCMN /L6002, 0002 /KEEP CDFREL, TAD (3 /USE CODE 3 DCA FLG TAD (RELFLD JMP I (OUTCMN CMPCUR, 0 /COMPARE EXPRESSION AGAINST CURRENT SECT TAD EXPREL SNA JMP I (SMPLR /ABSOLUTE EXPRESSION CIA TAD CURSCT /SAME SECTS? SNA CLA ISZ CMPCUR /RETURN 2 IF = JMP I CMPCUR /RETURN 1 IF NOT = L6002, 0002 /KEEP
ORPTCH, JMS I QQEXPR /MUST CALL EXPR FROM NON-AUX DCA OTE JMS I (LOAD AUXOVR+31 TAD OTE JMS I QQHGHSCT TAD OTE AND QQ7600 CIA DCA OTE2 JMS I QQPOP /***** AND QQ7600 TAD OTE2 SZA CLA JMS I (PRGLIT JMS I (LOAD AUXOVR+7 TAD OTE JMS I QQORIG /COULD BE IN OVERLAY JMP I (ORIGI OTE, 0 OTE2, 0 /COULD MULTIPLEX
ANG, 0 TAD CHAR /ALLOW CLOSE ANGLE BRACKET AFTER PSEUDO-OP TAD (-76 SNA CLA JMP I QQASEMLV ER25, JMS I QQERROR /EXTRA CHARS AFTER LOGICAL END OF PSEUDO-OP JMS I QQGETCHR JMP I ANG PAGE
/SBT, /VER, /ER79, JMS I QQERROR /DIRECTIVE NOT YET IMPLEMENTED / JMP I QQASEMLV BRTEM, 0 L4003, 4003 /COULD BE ALITERAL / NEGATIVE MEANS CHECK IF VAL / 0 MEANS END / POSITIVE MEANS CHECK INCLUSIVE RANGE; 2ND NUMBER IS NEGATIVE / OF RANGE LENGTH / AC=0 MEANS USE 'CHAR' BRANCH, 0 SNA TAD CHAR /AC=0 MEANS USE 'CHAR' DCA BRTEM /SAVE CHAR WHICH WE ARE BRANCHING ON BR1, TAD I BRANCH /GET NEXT POSSIBLE CHAR FROM LIST SNA /IS IT ZERO? JMP I BRANCH /YES. END OF LIST. CHAR NOT FOUND /RETURN TO NEXT LOCATION WITH 0 AC. INCR BRANCH /POINT TO ADDRESS ASSOCIATED WITH THIS CHAR SMA JMP RANGE TAD BRTEM /RETRIEVE TEST CHAR SZA CLA /ARE THEY THE SAME? JMP BR2 /NO BR3, TAD I BRANCH /YES, GET ADDRESS TO WHENCE WE WISH TO JUMP DCA TEMP /STORE IT HERE. JMP I TEMP /THEN JUMP THERE! RANGE, CIA TAD BRTEM CLL TAD I BRANCH INCR BRANCH SNL CLA JMP BR3 BR2, INCR BRANCH JMP BR1
/*** COMBINE PARTS WITH LITERAL GENERATION ASEMBL, 0 BEGIN, TAD LINPTR DCA SAVPTR DCA I (LNKGEN /FORGET ABOUT GENERATED LINKS BEGIN2, JMS I QQGETCHR JMS I QQSCAN /PASS UP SPACES JMS I QQEOS /IS THIS THE END OF THE STATEMENT? JMP I PGOO /YES JMS I QQLETTER JMP GETEX JMS I QQPARSYM /NO, LOOK FOR A SYMBOL JMS I QQLOOKUP JMP B2 /NOT FOUND JMS I QQGETSYM /GET VALUE TAD FLAG AND QQ7 TAD (-PSEUD /IS IT A PSEUDO-OP? SNA CLA JMP I (GODIR /YES, JUMP TO APPROPRIATE ROUTINE JMS I (TSTMAC /TEST FOR A MACRO CALL B2, JMS I QQBRANCH -75;EQL /= -54;TAGCOM /, -72;TAGCOL /: 0 JMP GETEX2
GETEX, JMS I QQBRANCH -52;ORIGIN /* -76;PGOO,BYEB /> 60;-12;NUMLCL /MAYBE NUMERIC LOCAL LABEL 0 GETEX2, TAD SAVPTR DCA LINPTR /POINT BACK TO BEGIN OF STMNT JMS I QQEXPR JMS OUTDATA /OUTPUT THIS TO BINARY FILE JMP I (PSEUDN ASEMLV, CLA TAD CHAR SNA AS3, JMP I ASEMBL /GO AWAY IF AT PHYSICAL END OF LINE JMS I QQBRANCH -73;BEGIN /; -74;OPB /OPEN BRACKET -76;CLB /CLOSE ANGLE BRACKET -57;AS3 /COMMENT AS GOOD AS EOL 0 AS2, JMS I QQGETCHR JMP ASEMLV
/ABSOLUTE PART IN AC /RELATIVE PART IN 'EXPREL' /TYPE OF RELOCATION IN 'EXPCOD' /-1 ON STACK /0 SIMPLE RELOCATION /1 FSECT RELOCATION /2 CDF RELOCATION OUTDATA,0 DCA EXPABS DCA FLG TAD EXPCOD SPA JMP ONSTCK /EXPRESSION IS ON LINKER STACK CLL RAR SZA CLA JMP I (CDFREL /CDF RELOCATABLE JMS I (CMPCUR /FSECT RELOCATABLE OR SIMPLY RELOC CLA STL RTL /2 NO TYPE 3 REL IAC /1 YES TYPE 1 REL TAD EXPCOD /CHANGE "1" TO "2" AS NECESSARY DCA FLG TAD (REL12 OUTCMN, DCA OUTCOD TAD FLG AND QQ7 TAD (-3 SZA CLA JMP SMPLR /TYPE 1 OR 2 RELOCATION JMS I (PTC JMP I OUTDATA SMPLR, TAD EXPABS OUT1, JMS I QQPUNBIT /TYPE 0 RELOCATION JMP I OUTDATA ONSTCK, CLA TAD L4003 DCA FLG TAD (POPCOD JMP OUT1 OUTCOD, 0 PAGE
TAGCOM, STA TAGCOL, DCA TAGFLG JMS I QQLOOKUP /SEE IF LABEL IS ALREADY DEFINED JMP NEWTAG /THIS ONE IS NEW JMS I QQGETSYM /IT'S OLD, GET OLD INFORMATION TAD FLAG SMA JMP NEWT2 AND QQ70 SZA CLA /IS IT A SECT? JMP TAGSCT /YES TAD FLAG /NO TYPE SHOULD BE 0,4, OR 5 AND QQ7 SZA TAD (-4 CLL RAR SZA CLA JMP ER59 /NOT 0,4, OR 5 TAD PC CIA TAD SYMVAL SZA CLA /MAKE SURE VALUE AGREES ER59, JMS I QQERROR /IT DOESN'T JMP TAG4 NEWTAG, TAD (100 DCA INIFLG /GUARANTEED SYMBOL IS DEFINED BEFORE USE JMS I QQENTER /CREATE NEW ENTRY JMS I QQGETSYM /*** IT WOULD BE A NEAT HACK HERE IF WE UNDEFINED SYMBOL IF EXTPC=1 TAD FLAG NEWT2, RAL STL RAR /TURN ON DEFINED BIT DCA FLAG /DEFINE SYMBOL TAD PC DCA SYMVAL /ASSIGN PC TO VALUE OF SYMBOL TAD CSTYPE TAD QM10 CIF 20 JMS I (KLU14 JMS I QQPUTSYM /REWRITE SYMBOL STUFF TAG4, TAD ("# /DEFINED VIA A TAG JMS KRFSIM ISZ TAGFLG JMP I (BEGIN TAD SYMNUM DCA TAGLOC JMP I (BEGIN
TAGFLG, 0 /0 MEANS ENDED WITH ":", 1 MEANS "," ORIGIN, TAD PC JMS I QQPUSH JMP I (ORPTCH
L440, 440 LETTER, 0 /SKIP IF LETTER TAD BITS AND L440 /CHECK FOR LETTER, . OR $ SZA CLA INCR LETTER JMP I LETTER
TSTMAC, 0 TAD FLAG /LOOK AT FLAG WORD AND QQ7 /ISOLATE TYPE TAD (-1 SZA CLA /IS IT A MACRO? JMP I TSTMAC /NO / ISZ PCFLAG /YES / ISZ BNFLAG /PRINT LINE *** TEMP *** / JMS I QQOUT OVERP, TAD NAME4 DCA 0 /***** VERY TEMPORARY. SEE ALSO 'MACRO' JMS I (LOAD 2000+30 JMS I (MC JMP I (AS3 /GO TO NEXT LINE
DIGIT, 0 /SKIP IF DIGIT TAD BITS AND QQ200 SZA CLA INCR DIGIT JMP I DIGIT CLB, STA TAD CONCNT SPA ER49, JMS I QQERROR /PHASE ERROR - EXTRA CLOSE ANGLE BRACKET DCA CONCNT JMP I (AS2 OPB, ISZ CONCNT JMP I (AS2 ER80, JMS I QQERROR /MORE THAN 4096 OPEN ANGLE BRACKETS JMP I (FINI TAGSCT, TAD CURSCT CIA TAD SYMSCT SNA TAD SYMVAL SZA CLA JMP ER59 /NOT 0 REL TO SECT (ITSELF) JMP TAG4 PTC, 0 TAD EXPREL JMS I (GETLSD TAD I (OUTCOD /SPECIAL INSTRUCTION 1 JMS I QQPUXBIN TAD EXPABS JMS I QQPUTBIT JMS I QQOUT /PUXBIN DIDN'T DO IT JMP I PTC
KRFSIM, 0 DCA KRFTMP /ALLOW PASSING PARAM IN AC TAD PASS TAD (-4 SNA CLA JMS I (KRFSY /CALL EXTENSION CODE JMP I KRFSIM KRFTMP, 0 PAGE
/ MACREL CHARACTER CODES / 0 PADDING / 1-32 A-Z / 33 . / 34 $ ? / 35 RESERVED / 36 EXTENSION NAME / 37 RESERVED / 40 RESERVED / 41-72 .A-.Z IF FIRST CHARACTER IN NAME / 60-72 0-9 /EXTENSION NAMES HAVE THE FOLLOWING FORM: / +-------+-------+ +-------+-------+ +-------+-------+ / ! 76 !PRECHAR! ! NUMBER ! !R! !PSTCHAR! / +-------+-------+ +-------+-------+ +-------+-------+ /AND PRINTS AS ANNNNB R=RADIX BIT (0=OCTAL, 1=DECIMAL) /PRECHAR USE POST-CHAR /<SPACE> NUMERIC LOCAL SYMBOLS DECIMAL/ $ / S UNNAMED SECTIONS NONE / V LITERAL REFERENCE BY VALUE OCTAL/ + (IF RELOCATABLE) / L LITERAL REFERENCE BY LOCATION OCTAL/ + (IF RELOCATABLE)
.ASECT MAIN.4 *6000 ROTL6, 0 CLL RTL RTL RTL JMP I ROTL6
IFDEF PLM < / / PARSYM / /PARSES OFF A SYMBOL (IDENTIFIER) BEGINNING /WITH CURRENT CHAR. RETURNS CHARS 1-6 IN NAME1-3. /SETS NAME4 TO 0 UNLESS SYMBOL ENDED IN $ /IN WHICH CASE MOVES TAGLOC TO NAME4 /IF AC IS NON-0, PARSES OFF A FILENAME, PUTS IN NAME1-4. > PARSYM, 0 /NON-0 AC MEANS WANT FILENAME CIF 10 /KLUDGE FOR ROOM JMS I (PARPTCH /NEEDED ROOM ON THIS PAGE TAD (-44 /$ SNA CLA /IS IT A DOLLAR? JMP PERD2 /YES SKP GETS, JMS I QQGETCHR /GET NEXT CHARACTER GETS2, TAD BITS AND (640 SNA CLA JMP NOTLD /NOT A LETTER OR DIGIT OR . OR $ TAD BITS AND (400 SZA CLA JMP LETCHR /LETTER A-Z OR L.C. A-Z TAD BITS AND QQ200 SZA CLA JMP SYMCHR /DIGIT TAD CHAR TAD (-44 SNA CLA JMP DOLR / MUST BE PERIOD IF NONE OF THE ABOVE PERD, TAD FILESW SNA CLA /WORKING ON FILENAME? JMP GETA /NO ISZ PDSWT /YES SKP ER7, JMS I QQERROR /STARTED WITH $ OR HAD TWO DOTS TAD NAME4 /YES SZA CLA /*** DON'T CATCH STARTING WITH . ER8, JMS I QQERROR /FILE NAME GT 6 CHARS CLL STA RAL /-2 DCA IDKNT /ALLOW 2 MORE CHARS DCA NAME4 TAD (NAME4+NAME4 /COULD BE A PAGE 0 LITERAL DCA NAMPTR JMP PERIOD GETA, TAD CHAR /INTERNAL REPRESENTATION OF . IS 34 /AND 56+56=34 MOD 37! LETCHR, TAD CHAR AND L37 /ALLOW LOWER CASE AS WELL AS UPPER CASE DCA CHAR /CONVERT TO UPPER CASE JMP SYMCHR IDKNT, 0
NOTLD, TAD CHAR TAD (-134 /\ BSLXXX, SNA CLA /SET TO SKP CLA DURING MACRO DEFINITION JMP I (BACKSL /IT'S A BACKSLASH! TAD FILESW /NOT LETTER OR DIGIT OR . OR $ (I.E. END OF SYMBOL) SNA CLA ISZ PDSWT /DID SYMBOL START WITH A $? JMP PAR2 STL CLA RAR /0 4000 TAD NAME1 SZL ER9, JMS I QQERROR /. FOLLOWED BY DIGIT DCA NAME1 /E.G. '.34' PAR2, TAD FILESW SZA CLA JMP I PARSYM /RETURN TAD ALLD DOLXXX, SNA CLA /SET TO SKP CLA DURING MACRO DEFINITION JMP I (FINI /ALL $'S IN NAME TAD DOLFLG SNA CLA /DID WE SEE $? JMP PAR8 /NO, SET 'QUAL' TO 0 / TAD NAME4 /YES / SNA CLA /WAS $ PAST CHAR 6? TAD TAGLOC SNA ER43, JMS I QQERROR /NO PREVIOUS REAL TAG PAR8, DCA QUAL /PASS TAG VIA 'QUAL' JMP I PARSYM DOLR, TAD FILESW SZA CLA ER6, JMS I QQERROR /$ IN FILENAME TAD (33 /INTERNAL CODE OF $ IS 33 DCA CHAR /SAVE IT CLA IAC /NOTE PRESENCE OF $ DCA DOLFLG JMP .+3 SYMCHR, ISZ ALLD /NOTE NON-$ DCA DOLFLG TAD CHAR JMS SYMSTO JMP GETS
SYMSTO, 0 DCA SYMC /CHAR IN AC TAD IDKNT SNA CLA /IS THIS A SIGNIFICANT CHARACTER? JMP I SYMSTO /NO, IGNORE IT TAD NAMPTR /YES, PREPARE TO STORE IT AWAY CLL RAR /LINK 0: LEFT HALF, 1 RIGHT HALF DCA TEMP /PTR TO NAME WORD TAD SYMC / AND QQ77 SNL /WHICH HALF? JMS ROTL6 /LEFT HALF TAD I TEMP /RIGHT HALF DCA I TEMP /STORE IT AWAY INCR NAMPTR /POINT TO NEXT BYTE ISZ IDKNT L37, 37 JMP I SYMSTO SYMC, 0 DOLFLG, 0 /1 MEANS LAST CHAR IN NAME WAS $ /NOTE THAT "$" IS A LOCAL SYMBOL
PERD2, TAD FILESW SZA CLA JMP ER7 /FILENAME BEGINS WITH $ PERIOD, STA DCA PDSWT /NOTE FACT THAT WE SAW A DOLLAR JMP GETS NAMPTR, 0 /PTR TO NAME (BIT 11=0 MEANS LEFT HALF /BIT 11=1 MEANS RIGHT HALF) PDSWT, 0 /-1 MEANS SYMBOL STARTED WITH A DOLLAR FILESW, 0 /NON-0 MEANS FILENAME ALLD, 0 /0 IF NAME CONSISTS ONLY OF $'S PAGE
/BUCKETS ARE DETERMINED BY THE FIRST CHARACTER OF THE /NAME OF A WORD, I.E. THERE ARE ROUGHLY 64 BUCKETS. BUKETS, ZBLOCK 34 ENNTRY%10 ZBLOCK 43 /AN ENTRY OF 0 MEANS THE BUCKET IS EMPTY. /OTHERWISE, ENTRIES ARE 15-BIT POINTERS.
EOS, 0 /SKIP IF NOT END OF STATEMENT / JMS I QQBRANCH / -57;LEOS // / -73;LEOS /; /*** PUT IN CLOSE ANGLE BRACKET? / 0 TAD BITS RTL SNL CLA INCR EOS JMP I EOS
/REIT, JMS I (AINIT /INITIALIZE STUFF BETWEEN PASSES / JMS I QQPUNY / JMP LOOP // JMS BINI / TAD QM7 /START BINARY WITH 7 ZEROES / DCA NUM / JMS I QQPUTBIT / ISZ NUM / JMP .-2 LOOP, CDF 10 DCA I (EXPSTK+1 CDF 0 JMS I QQREADLN /READ A LINE JMP I (FINI /NO MORE JMS I (ASEMBL /DO STUFF WITH INPUT LINE JMS I (CTRLC JMP LOOP /BINI, 0 / JMP I BINI
/1. MACRO DIRECTIVE /INTERFACE SUBROUTINE CALLIT, 0 DCA SAVAC TAD I CALLIT /GET ADDRESS OF ROUTINE TO BE CALLED DCA CALLOC /SAVE IT RDF TAD (CIF CDF DCA CALRET CDF 0 /GO TO OUR OWN DATA FIELD ISZ CALLIT /POINT PAST SPECIAL ARGUMENT TAD SAVAC JMS I CALLOC /CALL DESIRED ROUTINE JMP .+4 /RET 1 SKP /RET 2 ISZ CALLIT /RET 3 ISZ CALLIT CALRET, HLT /RETURN TO CALLER JMP I CALLIT CALLOC, 0 /ROUTINE TO BE CALLED SAVAC, 0
/RETURN 1 (WITH AC 0) IF EOL REACHED /RETURN 2 WITH CHAR IN AC OTHERWISE GETKAR, 0 JMS I (GET SZA INCR GETKAR JMP I GETKAR
IFDEF PLM < / STACK MINIPULATION / / TAD VALUE / JMS SPUSH / STACKPTR / / JMS SPOP / STACKPTR /VALUE LEFT IN AC / /STACKS ARE OF THE FORM: / /STACK, -STACKLEN /NEG OF # OF WDS IN STACK / SPTR /WORD # OF NEXT FREE WORD IN STACK / ZBLOCK STACKLEN /WORDS NUMBERED FROM 0 TO STACKLEN-1 > PUSH, 0 CIF 10 JMS I (SPUSH EXPSTK JMP I PUSH POP, 0 CIF 10 JMS I (SPOP EXPSTK JMP I POP
FSCHEK, 0 TAD EXPCOD SZA CLA ER57, JMS I QQERROR /ILLEGAL F-SECT RELOCATABILITY JMP I FSCHEK PAGE
.ASECT MAIN.5 *7000 /LOOKUP ROUTINE /CALLED WITH NAME1,NAME2, AND NAME3 ALREADY SET UP / JMS LOOKUP / RETURN IF NOT FOUND (READY FOR ENTER) (DF SET TO 0) / RETURN IF FOUND / AND XR0 SET TO PT TO 3RD WORD OF NAME DF=0 LOOKUP, 0 CLA IAC DCA BUKFLG TAD NAME1 /GET FIRST TWO CHARS OF NAME JMS I QQROTL6 RAL /GET FIRST CHAR IN LOW ORDER BITS AND QQ77 /ISOLATE IT (QUARANTINE!) TAD (BUKETS /ADD IN BASE OF BUCKETS DCA LPTR /TO GET ACTUAL BUCKET TAD I LPTR /GET FIRST 15-BIT ADDRESS OF BUCKET CHAIN LK1, SNA /IS THERE A POINTER? JMP NOTFND /NO. END OF CHAIN DCA CURPTR TAD CURPTR JMS I (CNVADR /YES, CONVERT TO 12-BIT POINTER DCA LPTR2 /SAVE IT TAD LPTR2 DCA XR0 TAD I XR0 /GET NEXT ENTRY OF NAME IN CHUNK CLL CIA /NEGATE TAD NAME1 /COMPARE AGAINST CORRESPONDING ENTRY IN GIVEN NAME SZA /ARE THEY EQUAL? JMP LKFAIL /NO TAD I XR0 CLL CIA TAD NAME2 SZA JMP LKFAIL TAD I XR0 CLL CIA TAD NAME3 SZA JMP LKFAIL STL CLA RTL /2 TAD XR0 DCA TEMP /POINT TO FLAG WORD TAD I TEMP /GET FLAG WORD AND QQ77 /ISOLATE TYPE OF SYMBOL SZA CLA JMP LOK2 /NO QUALS PERMITTED INCR TEMP INCR TEMP /POINT TO QUAL WORD TAD I TEMP CLL CIA TAD QUAL /IT MUST MATCH QUAL SZA JMP LKFAIL /*** ABOVE USED WITH QUALS, BUT ONLY FOR REG SYMBOLS LOK2, INCR LOOKUP /YES, SUCCESS. PT TO FOUND-RETURN TAD CURPTR DCA SYMNUM /RETURN 15-BIT PTR IN SYMNUM NOTFND, CDF 0 JMP I LOOKUP LKFAIL, SNL CLA /ARE WE ALPHABETICALLY PAST PROPER SPOT? JMP NOTFND /YES, ITEM NOT FOUND TAD CURPTR DCA SYMNUM DCA BUKFLG TAD I LPTR2 JMP LK1 CURPTR, 0 LPTR2, 0
ENTEM, CREF, 0 DCA TEMP /AC CONTAINS FLAG CHARACTERS TAD PASS TAD MMM4 SZA CLA JMP I CREF /NOT CREF PASS JMS I PCREFX /GO TO CREF CODE IN PASS 2/4 OVERLAY JMP I CREF MMM4, -4 PCREFX, CREFX OORERR, CDF 0 ER20, JMS I QQERROR /NO ROOM IN FREESPACE JMP I (FINI
/ENTER ASSUMES LOOKUP JUST FAILED /ASSUMES SYMNUM CONTAINS A 15-BIT PTR TO CHUNK /AFTER WHICH ENTRY IS TO BE INSERTED. /HOWEVER, IF BUKFLG IS NOT 0, THEN LPTR IS A 12-BIT PTR IN FIELD 0. ENTER, 0 TAD BUKFLG SZA CLA JMP BUKST TAD SYMNUM JMS I (CNVADR DCA LPTR BUKST, TAD I LPTR /LPTR POINTS TO LINK WORD OF PREVIOUS ENTRY DCA ENTEM /SAVE PTR TO NEXT CHUNK TAD FREEPTR /GET NEW CHUNK FROM FREESPACE SNA JMP OORERR DCA I LPTR /POINT PREVIOUS CHUNK TO THIS NEW CHUNK TAD FREEPTR DCA SYMNUM TAD FREEPTR JMS I (CNVADR DCA LPTR /GET 12-BIT PTR TO NEW CHUNK TAD I LPTR /GET PTR TO NEXT FREE CHUNK DCA FREEPTR /SAVE IT FOR FUTURE REFERENCE STA TAD LPTR DCA XR1 TAD ENTEM DCA I XR1 TAD NAME1 DCA I XR1 TAD NAME2 DCA I XR1 TAD NAME3 DCA I XR1 DCA I XR1 TAD QUAL SZA CLA TAD QQ200 /SET QUAL'ED BIT IN FLAG IF QUALED TAD INIFLG /SET INITIAL FLAG WORD /(PROBABLY DEFINED BEFORE USE BIT) DCA I XR1 DCA I XR1 TAD QUAL DCA I XR1 CDF 0 /? DCA INIFLG /BUT ONLY ONCE JMP I ENTER /RETURN BUKFLG, 0 PAGE
.ASECT MAIN.6 FIELD 1 *3000 SUBTL, "S;"U;"B;"T;"I;"T;"L;"E ZBLOCK SUBLEN-7 214 /USED TO PRINT FORM FEED BEFORE HEADING HEADING,ZBLOCK HEADLN 40;40;"M;"A;"C;"R;"E;"L "-;"V;VERNUM;PTCHLEV;40;40 DAT, ZBLOCK 15 40;40;"P;"A;"G;"E;40 0 FILMSG, "F;"I;"L;"E;" 0 STMES, "S;"Y;"M;"B;"O;"L;" ;"T;"A;"B;"L;"E ZBLOCK SUBLEN+STMES-. ERRRRS, " ;"E;"R;"R;"O;"R;"S;0
PERR, TAD I (CLTLOC SNA CLA JMP LPATR CDF 10 CIF 0 ER301, JMS I (ERROR CDF 0 LPATR, CIF 0 JMP I LPATCH
*3300 /NAME OF CURRENT MACRO BEING DEFINED IN KEYWORD LIST FORMAT NM, ZBLOCK 3 /NEGATED SYMBOL, SAVED EARLIER. 0 /LIST TERMINATOR. /KEYWORD LIST FOR COMPARISON WITH FIRST SYMBOL OF EACH LINE WITHIN /MACRO BODIES TO TEST FOR OCCURRENCE OF /MACRO DEFINITION DIRECTIVES. MKEYS, -3415; -0103; -2217 /0: ".MACRO" -3405; -1604; -1500 /1: ".ENDM" 0 /LIST TERMINATOR /FORMAL ARGUMENT TABLE (FT) /USED ONLY DURING PROCESSING OF MACRO DIRECTIVE. ENTRIES ARE IN /THE PROPER FORMAT FOR THE "MATCH" SUBROUTINE - EACH WORD IS THE /NEGATIVE OF TWO PACKED 6-BIT ASCII CHARACTERS, WITH THREE CONSECUTIVE /WORDS MAKING UP ONE TABLE ENTRY. FT=EXPSTK+1 /FT, ZBLOCK 3^MAXRGS / 0 /ENSURE END OF LIST IF FT BECOMES FULL. /KEYWORD LIST FOR COMPARISON WITH FIRST SYMBOL OF EACH LINE WITHIN /REPEAT RANGES TO TEST FOR OCCURRENCE OF REPEAT DIRECTIVES. RKEYS, -3422; -0520; -2400 /0: ".REPT" -3405; -1604; -2200 /1: ".ENDR" 0 /LIST TERMINATOR
/ PART OF PARSYM PARPTCH,0 DCA I (FILESW DCA I (NAME1 DCA I (NAME2 DCA I (NAME3 DCA I (NAME4 TAD (-10 DCA I (IDKNT TAD (NAME1+NAME1 DCA I (NAMPTR DCA I (PDSWT DCA I (ALLD TAD I (CHAR /FIRST CHAR HAS BEEN FOUND PREVIOUSLY CIF 0 JMP I PARPTCH
LPATCH, 0 /PART OF MAC2'S 'PUXBIN' TAD I (HGHLOC CLL CIA TAD I (PC SNL CLA JMP .+3 TAD I (PC DCA I (HGHLOC TAD I (CLTLOC STL CIA TAD I (PC SNL SZA CLA JMP PERR JMP LPATR PAGE
.RSECT KLUDG4 FIELD 2 KLU4, 0 TAD (2 DCA CTMP TAD I CTMP IAC SZA CLA JMP MINY TAD PC2 TAD (-200 SNA CLA JMP 1$ TAD (200 DCA I CTMP CDF 0 JMP HGHGO3 1$: TAD HGHTMP DCA I CTMP TAD HGHTMP CDF 0 JMP HGHGO2 MINY, TAD HGHTMP STL CIA TAD I CTMP SZL CLA JMP MAXY TAD HGHTMP DCA I CTMP MAXY, CDF 0 TAD PC2 TAD I (RELOK STL CIA TAD I (HISEK SNL CLA JMP HGHGO TAD I (RELOK HGHGO3, TAD PC2 HGHGO2, DCA I (HISEK HGHGO, TAD I (HISEK DCA I (SYMVAL TAD I (CURSCT CIF 0 JMP I KLU4 PC2, 0 /COPY OF PC HGHTMP, 0
KLU7, 0 TAD I (CURFLD CDF 20 SPA JMP 1$ /UNKNOWN FIELD RTR RAR AND (7 SNA TAD (" -"0 TAD ("0 CIF 0 JMS I (CALLIT LISTER CDF 0 TAD I (CURFLD CDF 20 AND (7 TAD ("0 JMP Q$ 1$: CLA TAD (40 CIF 0 JMS I (CALLIT LISTER TAD ("? Q$: CIF 0 JMS I (CALLIT LISTER CDF 0 TAD I (EXTPC SZA CLA JMP QS STA TAD I (PC STL CDF 20 CIF 0 JMS I (CALLIT OPRINT RET7, CIF CDF 0 JMP I KLU7 QS, TAD (-4 DCA T$ 1$: TAD ("? CIF 0 CDF 20 JMS I (CALLIT LISTER ISZ T$ JMP 1$ JMP RET7 T$: 0
CTMP, KLU14, 0 SNA CLA JMP 2$ /LABELS IN ASECTS ARE ABSOLUTE QUANTITIES TAD I (CURSCT DCA I (SYMSCT 2$: TAD I (EXTPC SZA CLA STL CLA RAR /4000 MAKES SYMBOL UNDEFINED IF PC IS UNKNOWN TAD I (FLAG DCA I (FLAG CIF 0 JMP I KLU14 PAGE



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search