Digital PDFs
Documents
Guest
Register
Log In
DEC-08-LAS4A-A-D
December 2000
108 pages
Original
12MB
view
download
Document:
dec-08-las4a-a-d
Order Number:
DEC-08-LAS4A-A-D
Revision:
Pages:
108
Original Filename:
https://svn.so-much-stuff.com/svn/trunk/pdp8/src/dec/dec-08-las4a/dec-08-las4a-a-d.pdf
OCR Text
0 0 4K Mssemles a pal |l| macro-8 § O 0 * O O f O O f O O f O O f O O f O O f O 0 § 0 O f O O f O O of w 8 digital equipment corporation O G m. L DEC-O8éLAS4A-A-D For additional from Software Corporation, 4K ASSEMBLERS PAL III/MACRO-B copies, order Distribution Maynard, No. DEC-OB—LAS4A—A-D Center, Digital Equipment Mass. digital equipment corporation mdgnqrd. massachusetts - First Copyright Printing, July <:>1973 by Digital Equipment Corporation The following are trademarks Maynard, Massachusetts: of Digital Equipment Corporation, CDP DIGITAL INDAC PS/8 COMPUTER LAB DNC KA10 QUICKPOINT COMTEX EDGRIN LAB-8 RAD-8 COMSYST EDUSYSTEM LAB—8/e RSTS DDT FLIP LAB-K RSX DEC FOCAL OMNIBUS RTM DECCOMM GLC-8 OS/8 SABR DECTAPE IDAC PDP TYPESET DIBOL IDACS PHA UNIBUS CHIP 8 1973 PREFACE "HOW TO OBTAIN SOFTWARE INFORMATION" this various document, explains_ the software users. The The page, located at services the back of available to DIGITAL this postage prepaid "READER'S COMMENTS" form on the last page of user's critical comments All evaluation. requests. the document received documents ans are acknowledged prepared. and will be considered when subsequent software described in this document is furnished to the purchaser a license for use on a single computer system and can be copied in such use (with inclusion of DIGITAL's copyright notice) only for system, except as may otherwise be provided in writing by DIGITAL. The under is in this document is for information purposes only and DIGITAL assumes no responsibility change without notice. and for the use or reliability of software equipment which is not DIGITAL no assumes it. responsibility for any errors supplied by The material subject which may to appear in this document. fun-‘- Ens-I. H. con tents 1 Introduction to 4K Assemblers l ..... ............ ............ y 7 ' PAL III Programming ............................................ Character Set................; Legal Characters Illegal Characters Numbers A 1 .......... 2. . ...... ..................................... .......... a 2 .............. ................... 3 .......................................................... 3 ’ - .......................... Format Effectors Form Feed Tabulations ..... ...................................... ....... ................................................... . 3 .................................................................... ............................. . Statement Terminators 3 ....................................... 4 ...... ....... ................ 3 i Statements Labeis ....................... ......................................... ...................................... 5 a 5 ...................................... p ‘ Instructions Operands Comments ......................... ........................ 6 ................ ............................................... a * ...... 6 6 ..................... g Coding Practices Symbols ...... 6 ...................................... *7» ................................................................... Internal Symbol RepresentatiOn Symbolic Addresses Symbolic Instructions Symbolic Operands Symbol Table Direct Assignment Statements for PAL III ................................. . ..... 7 ........... g ‘ 8 ‘ ‘ ........... ..... ..... 10 . .................................................... . ....... 10 ..... ................................... y ....... Expressions Address ........ a ............. ................................ 14 17 - ........................... Current Address Indicator ................... ‘ .‘..: 11 11 ....... ................................... Assignments , ' ................... ..................... 17 ' Indirect Addressing Autoindexing ............................ 18 ‘ .................................... .................. ~. . . .p ..... 19‘ Instructions .................................... 20 .......................................................... 2O Memory Reference Instructions Microinstructions Pseudo--Operators Program .................................... 1 Preparation and Assembler Output . . . 'MACRO- 8 Programming 29 .................... 32 .......................... . . 23 ..................... ; .‘ .f I". Operating Procedures Summary of Diagnostic Messages for PAL III Characters 19 ........................................................................ ..... fl}. 34 ............ 37 ........ - .................................................... Expressions Origin Setting ...................................................................... y ........................ '...;...‘. ........... ............ Link Generation Literals .................. .............................................................................. Field Pseudo—Op Text Facility . ......................... Text Strings . , ................................. » .......... TextFacility .................. 1 ....... ..... a Macro ..................................... ...................................................... ......... ....... ....................................................... ............................................ ----------- ................ Programming Hints Dealing With a Limited Symbol Space ........................................... . = ....... Summary of MACRO—8 Error Diagnostics Pass 3 Output——Assembly Listing, MACRO-8 Operating Procedures AssemblerOutput vi I. ....... ................ .................. .............. .......... '47 a ....... , ............... 53 53 57 58 58 61 61 62 62 66 _ ............................. ..... 46 57 Symbol Table Symbol Table Modification Internal Symbol Representation for MACRO— 8 Memory ReferenceInstruction Recognition .7 Compatibility Between PAL III and MACRO-8 1 " 42 49 * MACRO—81Pseudo-Operators 39 41 48 .............................................. ................... 37 47 ........ .......................................... 'User Defined Macros 7 Defining .......... ........ 1 ........... Single Character Numbers , ................... 37 ....................... ..... ........... 68 69 59 Operating Instructions MACRO—8 Switch Options ..... Appendix A Appendix B Appendix C .......................... ........................ .................... '70 71 ‘ , ............................................................. ..... ............. ................................................................. vii A-l {Bi-1 C-l 4K assemblers INTRODUCTION TO 4K ASSEMBLERS This manual contains descriptiOns of two PDP—8 4K Assemblers, the first and most basic of which is PAL 111. It is assumed that already familiar with the material presented in the first five chapters of Introduction to Programming, as the PAL III programming language is discussed in detail in that section. In addition to PAL III, the MACRO-'8 Assembler is also dis— cussed. MACRO-8 is similar to PAL III with the following addithe reader is * defined macrOs, double precision integers, constants, arithmetic and Boolean operators, lit- tional features: floating—point erals, text user facilities, and automatic off-page. linkage generation. MACRO—8 is recommended when any of these features is desired and when a large symbol table is not required. Appendix C contains a list of the permanent symbols for each ' ’ of these assemblers. Several other System Library Programs are useful in assembly language programming. The Symbolic Tape Editor can be used to change, correct, or create a program at the Teletype, and after assembly, DDT or ODT are useful in debugging theprogram. More on these and other useful programs can be found in Intro- duction to Programming. PAL III PROGRAMMING PAL HI (an acronym for Program Assembly Language, version 111) is a two pass Assembler (with an optional third pass) designed for the 4K PDP-8 family of computers. A program, written in the l PAL III language, is translated by the Assembler into a source binary tape in two passes through the Assembler. The binary tape is loaded by the Binary Loader into the computer for execution. During the first pass of the assembly, all user symbols are defined and placed in the Assembler’s symbol table. During the second pass, the binary equivalents of the input source language are generated and punched. The Assembler’s third pass produces a printed assembly listing (a listing of the program’s instructions with the location, generated binary, «and source code side by side on each line). The Assembler requires a basic PDP-8 family computer with a 4K core memory, and a Teletype console. The Assembler can also use either the high-speed reader, the high-speed punch, or both. The user can change the Assembler’s permanent symbol table to reflect his specific machine configuration, as explained under the section on Altering the Permanent Symbol Table. Character Set ‘ LEGAL CHARACTERS 7 The following characters are acceptableto PAL III: 1. The alphabetic characters: 2. The numeric characters: ‘L Athrough Z 0 through 9* : 3. The following special characters: a. Printing characters + ‘ _ plus ; semicolon ‘55 dollar sign ’ ‘ ‘ ‘ . ’ -— , :: * b. minus comma equal sign ‘ 1 ‘ v . ” ' asterisk Nonprinting keyboard characters: ' SPACE ~ ‘ TAB RETURN 4. / Ignored characters: FORM FEED blank tape RUBOUT Leader Trailer (code 200) LINE FEED period slash ILLEGAL CHARACTERS All other characters are illegal (excepthien used in a com- ment) and cause the illegal character message: IC AT xxxx nnnn during pass 1, where xxxx is the Octal value of the offending character and nnnn is the value of the current location counter where it occurred. Illegal characters are ignored and assembly can proceed. The current location counterlcontains the address in which the next word‘of object code will be assembled. If the illegal characteroccurs in the middle of a symbol, the symbol is termi— nated at that point. ' Numbers Any sequence of digits delimited by punctuation forms a number. For example: characters , 1. ' 35 .. _ ,. 4372.~ : The pseudo—ops OCTAL and DECIMAL indicate to the Assem- bler Which radix, or base, is to be .used in number interpretation. initially set to octal (base 8) and remains octal unless it is changed. It can be changed to decimal (base 10) via the DECIMAL pseudo-op, which indicates that all numbers which follow are to be interpreted as decimal. This is then the case until the occurrence of the OCTAL pseudo-op which converts the base baCk to octal, and so on, (For an explanation of the internal repreThe radix is sentation of numbers in the PDP-S, see Introduction to Pro- M gramming.) Format Efiectors FORM FEED The form feed code, if present in a PAL 111 program, will cause the Assembler to output 12 blank lines during the pass 3 Assembly listing. This is useful «in creating a page—by-page listing. The form feed is generated by typing a‘SHIFT/‘L on the Teletype. TABULATIONS Tabulations are used in the body of a source program to provide listing. Tabs separate fields into columns (for details see Chapter 7 in Introduction to Programming). For example, a line written: a neat readable Go,TAD TOTAL/MAIN LOOP is much easier to read if tabs are inserted to form: 60: TAD TOTAL /MAIN LOOP STATEMENT TERMINATORS Either the semicolon (g) or the RETURN key may be used as .a terminator. The semicolon‘is considered identical to a carriage return/line feed except that it will not terminate a comstatement ment. For example: TAD /THIS A A 15 COMMENT; 'TAD B The entire expression between the slash ( / ) and the carriage return is considered a comment. TAD B. Therefore the Assembler ignores the - If, for example, the user wishes to write a sequence of instructions to rotate the contents of the accumulator and link six places A to the right, it might look like the following: RTR RTR RTR» However, the programmer can alternatively place all three instruc— tions on a single line by separating them with the special character semicolon (;) and terminating the line with a carriage return. The above sequence of instructions can then be written: RTR3RTR5RTR These multi-statement lines are LIST, G3 particularly useful when setting aside a section of data storage for use during processing. For example, .a 4-word cleared block could be reserved by specifying either of the following formats: OI @3 @3 G LIST; G 0 0 0 Either format may be used to input data words which may be in the form of numbers, symbols, or expressions. (Symbols and expressions will be explained later.) Each of the following lines gener— ate one storage word in the object program: DATA; 7777 A+C-B S 123+B2 Statements PAL HI usually prepared on a Teletype, with the aid of the Symbolic Tape Editor, as a sequence of statements. Each statement is written on a single line and is terminated by typing the RETURN key. PAL HI statements are Virtually format free; that is, elements of a statement are not placedin numbered columns with rigidly controlled spacing, as in punched— source programs are card oriented, assemblers. There are four types of elements in a PAL III statement which are identified by the order of their appearance in the statement, and by the separating (or delimiting) character which follows or preI cedes the element. Statements are written in the general form: label, instruction operand / comment A statement must contain at least one of these elements and may contain all four types. The Assembler interprets and processes the binary instructions statements, generating one words, assembly process. or performing an or more or data LABELS A label is the symbolic name created by the programmer to of a statement in the program. If present, the the location identify label is written first in a statement and is terminated by a comma. There must be no intervening spaces between any of the characters and the comma. INSTRUCTIONS An instruction may be one or more of the mnemonic machine instructions (see Appendix C), or a pseudo-operation (pseudo-op) which directs assembly processing. (The assembly pseudo-ops manual.) Instructions are terminated with one or more spaces (or tabs if an operand follows) or with a semicolon, slash, or carriage return. are described later in this OPERANDS Operands are usually the octal or symbolic addresses of the data to be accessed when an instruction is executed, but they can be any expression, or an argument of a pseudo-op. In each case, interpretation of operands in a statement depends on the statement instruc— tion. Operands are terminated by a semicolon, slash, or carriage return. COMMENTS Following a slash mark the programmer may add notes to a statement. Such comments do not affect assembly processing or program execution, but areuseful in the program listing for later analysis or debugging. The Assembler ignores everything from the slash to the next carriage return. (For an example see the section on Statement Terminators, preceding.) It is possible to have nothing but) a carriage return on a line, resulting in a space in the final listing. An error message is nOt glven. Coding Practices A neat printout (or program listing, as it is usually called) makes subsequent editing, debugging, and interpretation much easier than if the coding were laid out in a haphaZard fashion. The coding practices listed below are in use, and will resultin a readable, orderly listing. general 1. A title comment begins with a slash at the left hand margin. 2. Pseudo-ops may begin at the left margin; often, however, they are indented one tab stopto line up with the executable instructions. 3. Address labels begin at the left margin. from succeeding fields by a tabulation. 6 They separated are Instructions, whether or not they are by a label field are indented one tab stop. 5. A comment is separated from the preceding field by one or two tabs (as required) and a slash; if the comment Occupies the whole line, it usually begins with a slash at the left margin. Symbols A symbol is a string of letters and digits beginning with a letter and delimited by a non- alphanumeric character. Although a symbol may be any length, only the first Six characters are considered, and any additional characters are ignored. Consequently symbols which preceded 4. 1 are identical in their first six characters are considered identical. Pseudo-opshave‘ fixed meanings, and cannot be redefined by the programmer. _ The Assembler has in its permanent symbol table definitions of the symbols for all FDR-8 pseudo—op codes, memOry reference, operate and IOT (Input/ Output Transfer) instructions, which may be used without prior definition by the user. All other symbols must be defined1n the source program. For example: 1. Permanent symbols: is HLT symbolic instruction whose value of 7402 is a taken by the Assembler from the permanent sym‘ 2. bol table. User defined symbols. A is a user defined symbol. When used as a sym- bolic address label, its value is the address of the instruction it precedes. This value is the Assembler. The user assigned by may asSign values to symbols by using a direct assignment statement of the form A 1234, which will be explained later. = INTERNAL SYMBOL REPRESENTATION FOR PAL III Each permanent and user defined symbol occupies four words in the symbol table storage area, shown as follows: Word 1 Cl Word 2 C3 Word 3 C5 Word 4 _ ¥ ‘ ’ . C2 C4 C6 Octal code or address where C1, C2, C6 represent the first character, second sixth character respectively. For a permanent sym— . . . , character, bol, word 4 contains the octal code of the symbol, while for a user defined symbol, word 4 contains the address of the symbol. As an example, the permanent symbol TAD is represented as follows: . . . , V Word 1 "—2 248 X1008 + 01 =1 24018 01' TA Word 2 = 048 X 1008 + 00 = 04008 or D ‘ Word 3 = 0000 , Word 4 2:: 1000 (octal code for TAD) The {I Assembler distinguishes between pseudo—ops, memory reference instructions, other permanent symbols, and user defined symbols by their relative positiOn in the symbol table. PAL III SYMBOLIC ADDRESSES . symbol Used as a label to specify a symbolic address must appear as the first term in a statement and must be immediately followed. by a comma. When used in this way, a symbol is assigned a value equal to the current location counter and is said to be defined. Permanent symbols (instructions, special characters, and pseudo-ops) may not be used as symbolic addresses. A defined symbol can be used as an operand, or as a reference to an instruction. The user sets or resets the location counter by typing an asterisk followed by the octal absolute address value, in which the next program word is to be stored. If the origin is not set by the user, PAL III begins assigning addresses at location 200. A m /SET *300 JMP B; 0 A: DCA LOCATION COUNTER TO 300 A B (in the preceding example) is assigned a value symbol B a value of 0302, and the symbol A a The symbol TAG of 0300, the value of 0303. If a symbol is , . defined than more once in this manner, the Assembler will print the duplicate tag diagnostic: 8 l . , i DT‘ AT xxxx nnnn where xxxx is the symbol, and nnnn is the value of the location counter at the second occurrence of the symbol definition. The symbol is not redefined. For example: $300~ START, CONTIN: TAD A DCA COUNTER JMS LEAVE JMP START -74 A, COUNTER30 START, The CLA CLL symbol START would have Value of 0300, the symbol CON TIN would have a value of 0302, the symbol A would have a a value of 0304, the symbolCOUNTER (considered COUNTE by the Assembler) would have a value of 0305. When the Assembler processed the next line itwould print (during pass 1): DT START @306 AT Since the first pass of PAL III is usedto define all symbols in symbol table, the Assembler will print a diagnostic if, at the end of pass 1, there are any symbols remaining undefined. For example: the A *7170 » g A” CJ gig EMA (The dollar sign mustterminate HLT all PDP-8 4K (3MP A1 assembly pro- grams.) $ would produce the undefined address diagnostic: UA AT xxxx . nnnn where xxxx is the symbol and nnnn is the location at which it was first seen. The user’s entire symbol table is printed in alphabetical 9 order at the end of.pass 1. In the case of the preceding example, this would look as follows: A .717G/ * UA 7173 AT A1 7174 c The following are examples of legal symbolic addresses: ADDR, TOTAL, SUNL AL The following are examples of illegal symbolic addresses: ' . AD)M, 7ABC, 1 LA BEL,‘ D+TAG, ' ' ' " - . . (contains an illegal character) (first character must be alphabetic) (must not contain imbedded space) (contains a legal but non—alphanumeric character) (must be terminated by a comma with no intervening spaces) .- ‘ ' _ , . LABEL , SYMBOLIC INSTRUCTIONS Symbols used as instructions must be predefined by the Assembler or by the programmer. If a statement has no label the instruction may appear first in the statement and must be terminated by a spaCe, tab, Semicolon, slash or carriage return. The following are examples of legal operators: TAD PAGE ZIP . (a mnemonic machine instruction operator) .(an Assembler pseudo-op) (legal only if defined by the user) SYMBOLIC OPERANDS Symbols used as operands normally have a value defined by the user. The Assembler allows symbolic references to instructions or data defined elsewhere in the program. Operands may be num- bers or expressions. TOTAL, TAD AC1+TAG 10 . The values of the two symbols AC1 and TAG, already defined by the user, are combined by a two’s complement add. This value is used as the address of the operand. A SYMBOL TABLE The Assembler processes user defined symbols in source pro— gram statements by adding them to its symbol table. The symbol table cOntains all defined symbols along with the binary value assigned to each Symbol. Initially, the Assembler’s symbol table contains the mnemonic op—codes of the machine instructions and the ASsembler pseudo—op codes, as listed in Appendix C. As the source program is processed, user defined symb01s are 'added’to the symbol table. If, during pass 1, PAL III detects that the symbol table is full (in other words, there is no more memory space to store symbols and their associated values), the symbol table full diagnostic: ST is AT ‘ xxxx nnnn printed; xxxx, is the symbol that caused the overflow condition and nnnn is the current location whenithe overflow occurred. The Assembler halts and may not be restarted. More address arithmetic should be used to reduce the number of symbols. It is also possible to segment a program and assemble separately, taking care to generate proper links between the segments. (See the MACRO-8 section Dealing with a Limited Symbol Space.) PAL III’s symbol capacity when using the high-speed reader is 558 symbols. The permanent symbol table contains 80 symbols, leaving space for 478 possible user—defined symbols. When using the low—speed reader, PAL III’s symbol capacity is 656 symbols, leaving space for 576 user—defined symbols. the segments DIRECT ASSIGNMENT STATEMENTS The programmer inserts new symbols with their assigned values directly. into the symbol table by using a direct assignment statement of the form: SYMBOL: VALUE VALUE may be a number or expression. No space(s) or tab(s) may appear between the symbol to the left of the equal sign and the equal sign. The following are examples of direct assignment statements: ' ll A=6 EXIT=JMP 1,6 C=A+B . All symbols to the right of the equal sign must be already defined. The symbol to the left of the equal sign is subject to the same restrictions asa symbolic address, and its assOciated value is stored in the user’s symbol table. The use of the equal sign does not increment the'location counter. It is, rather, an instruction to the ’ Assembler itself. A direct assignment statement may also equate a new symbol to the value assigned to a previously defined symbol. In this Case the two symbols Share the same memory location. I BETA=17 GAMMA=BETA The new symbol, GAMMA, is entered into the user’s symbol table with the value 17. The value assigned to a symbol may be changed as follows: ALPHA=5 ALPHA=7 The second line of code shown changes the value assigned to ALPHA from 5 to 7. (This will generate an RD error, explained below.) SymbOls defined by use of the equal sign may be used in any valid expression. For example: *203 A=1®® /DOES NOT UPDATE CLC B=4®® /DOES NOT UPDATE CLC A+B /THE VALUE saw /THE VALUE 110% TAD A 15 IS ASSEMBLED ASSEMBLED AT AT LOC. LOC‘ 20% 2G1- symbol to the left of the equal sign has already been defined, the redefinition diagnostic: If the RD will be and xxxx AT nnnn printed as a warning, where xxxx is the symbol name is the value of the location counter at the point of nnnn 12 ‘ redefinition. The new value will be stored in the symbol table; for example: CLA=76®® will cause the diagnostic: CLA‘ RD AT sane Whenever CLA is uSed after this point, it will haVe the value 7600. Multiple assignments can be carried to two levels only. Where X is some previously defined symbol or combination of symbols: An error AZBZX will assemble, but A:B=C=X will not assemble. of this type will cause a “Pushdown Stack Overflow” diagnostic of the form: PO AT xxxx nnnn This is a non—recoverable error condition which causes the assembly to terminate. Continuation is not possible at must be corrected and the , this point. The error i assembly restarted. The expression to the right of the rightmost equal sign must composed completely of numbers and/0r previously defined symbols. The omission of the tag in a direct assignment statement will cause various errors, depending on the placement of the statement. If a statement such as: be . :3 before any symbol has been used in a program, PAL III will generate an RD error message during pass 1, with a meaningoccurs printout for the symbol being defined. If the statement :3 after a symbol has been used, the assembler assumes the last symbol referenced is being redefined. For instance: less occurs *BQG CLA =3 will cause the diagnostic: l3 . AT. (Nix RD @201 during pass 1. In either case, PAL 111 may be restarted after pass 1, but attempting to continue to pass 2 will leave the Assembler in a state from which it can neither be continued for pass 3 nor re- started for another pass 1. Expressions Symbols and numbers are combined by arithmetic and logical operators to form expressions. There are three operators: ' Signifies tWO’s cOmplement addition Signifies‘ two’s complement subtraction Space is interpreted in context plus + minus ‘-—- space When a space occurs in an expression that does not contain a , memory reference instruction, it‘means an inclusive OR is to be performed. For example: CLL CLA The symbol CLA has advalue of 7200 and the symbol CLL has a value of 7100; CLA CLL would produce 7300. User defined sym- bols are treated as operate instructions. For example: A:333 ‘4222 CLA B, Possible expressions andtheir Values using the symbols just defined are shown below. Notice that the Assembler reduces each expres— ' ‘ ' sion to one 4—digit (octal) word: 0333 A . B ~ — 0222 0555 ’ A+B “ ‘ A—B -——A ~ * 0111 7445 1—B 7557 B—l 0221 A B 0333 ——71 7707 ' (an inclusive OR is performed) ' etc. 14 ‘An expression is terminated by either a comma, carriage return, or semicolon. If theeinformation generated is to be loaded, the cur- rent location counter is incremented. For example: A+43 B-75 A+B words of information and the, current location counter is incremented after each expression. The statement: produces three , , ' CLA HALT=HLT produces no information to be loaded (it produces an association in the symbol table) does not increment the current locaand hence tion counter. *4721 ‘ TEMP, TEM2, .0. The location counter is not incremented after the line TEMP; the two symbols TEMP and TEMZ are assigned the same value, in this case 4721. _ * Since a PDP-8 instruction has an Operation code of three hits as well as an indirect bit, a page bit, and seven address bits, the Assembler must combine memory reference instructions in a manner somewhat from the differently Way in which it Combines operate or IOT instructions. The Assembler differentiates between the symbols in its permanent symbol table and user defined symbols. tions: - . The following symbols are used as memory reference instruc- AND TAD . 1, Logical AND 0000 182 2000 DCA 3000 JMS 4000 ,Two’ 3 complement addition Increment and skip if zero Deposit and clear accumulator Jump to subroutine J MP 5000 Jump FADD 1000 Floating addition Floating Subtraction Floating multiply Floating divide Floating GET Floating PUT 1000 FSUB 2000 FMPY 3000 FDIV 4000 FGET 5000 FPUT 6000 ’ 15 . When the Assembler has prOcessed one of these space folloWing' it acts as an symbols,fithe address field delimiter; ~ *4100 JMP A CLA A: A has the value 4101, JMP' has the Value 5000, and the space acts as a field delimiter. These symbols are represented as follows: A 100 001 000 001 JMP 101 000 000 000 The seven address bits of A are taken, ire: 000 001 000 001 The zeros remaining bits of the address are tested to see if they are (page zero reference); if they are not, the current page bit is set: 001.. 0000117 000 The operation code is then ORed into the J MP expression to formi l 101 011 000 0017 l or, written more conciselyin octal: .1 5301 In addition to the above tests,‘ the‘page bits of the address field compared With the page bits of'the current loCatiOn counter. If the page bits of the address field are nonzero and do not equal the page bits of the current location counter, an out-of-page reference is being attempted and the illegal reference diagnostic is printed on pass 2 or pass 3. For example: are ‘ a *aioo CLA A, CLL *7200 JMP The A symbol in the address field ofthe JMP instruction has a value of 4100 while the location coUnter 16 (the address where the .» instrhction is placed'in memory) has a valueoft7200. This instruction is illegal because PAL III does not generate off-page references, and will be flagged during pass 2 or pass 3 by the illegal reference diagnostic: 4100 IR AT Such 7200 NOTE diagnostic would not be - generated when using MACRO-8, which automatically generates off—page references. a , ' Address Assignments ' < i The PAL III Assembler sets the origin, or starting address, of the source program to absolute location (address) 0200 unless the origin is otherwise specified by the programmer. As source stateare processed, PAL III assigns consecutive memory addresses to the instructions and data words of the object program. This is done by automatically incrementing the current location counter each time a memory location is assigned. A statement which generates a single object program storage word increments the location counter by one. Another'statement might generate six storage words, incrementing the location counter by six. Direct assignment statements and some Assembler pseudo—ops ments do not generate storage words and therefore do not affect the location counter. CURRENT ADDRESS INDICATOR The special character period (.) always has a value equal to the value of the current location counter. It may be used as any integer or Symbol (except to the left of an equal sign), and must be preceded by a space when used as an operand, For example: *200 JMP .+2 is equivalent to J MP 0202. Also, *300 9+2400 l7 will produce in location 0300 the quantity 2700. Consider: *2200 CALLzLJMS I o 0027 The second line ( CALLZJ MS I .) does not increment the current location counter, therefore, 0027 is placed in location 2200 and CALL is placed in the user’s symbol table with an associated value of 4600 (the octal equivalent of JMS I .).. INDIRECT ADDRESSING When the character 1 appears in a statement-between .a memory reference instruction and an operand, the operand is interpreted as the address (or location) containing the address of the operand to be used in the current statement. Consider: , Tanpao which is a direct address statement, where 40 is interpreted as the address onpage zero containing the quantity to be added to the accumulator. References to addresses on the current page and to page zeromay be done directly. An- alternate way to note the page zero reference is with the letter Z, as follows: . TAD Z 40 This is an optional notation, not differing in effect from the pre— ViOUS example. Thus, if address 40 contains 0432, then 0432 is added to the accumulator. Now consider. TAD I 40 which is an indirect address statement, where 40 is interpreted as the address of the address containing the quantity to be added to the accumulator. Thus, if address 40 contains 0432, and address 432 contains 0456, then 456 is added to the accumulator. 18 ' NOTE “Because the letter I is used to indicate indirect addressing, it is never used as a vari- able. Likewise the letter Z, Which is some- times used to indicate a page zero reference, is never used as a variable. AUTOINDEXING Interpage references are often necessary for obtaining operands processing large amounts of data. The PDP-8 computers have facilities to ease the addressing of this data. When one of the absolute locations from 10 to 17 (octal) is indirectly addressed, when the contents of the location-is incremented before it is used as an address and the incremented number is left in the location. This allows the programmer to address consecutive memory locations using a minimum of statements. It must be remembered that initially these locations (10 to 17 on page 0) must be set to one less than the first desired address. Because of their characteristics, these locations are called autoin— dex registers. No"incrementation takes place when locations 10‘ to 17 are addressed directly. For example, if the instrirction to be executed next'is in locati0n 300 and the data to be referenced'is on the page starting at location 5000, autoindex register 10 can be to address the data as follows: used 7 @276 1377 TAD sala DCA,1®~V TAD I to 04777 /=Saca-1 g @277 aaac 141a .1 v/SET 1 ‘/BEFORE ~ . . @377 , 4777 up AUTO /INCREMENT . USE INDEX TO AS 5000 AN ADDRESS 04777,4777 When the instruction in location 300 is executed, the contents of location 10 will be incremented to 5000 and the contents of location 5000 will be added to the contents of the accumulator. When the instruction TAD I 10 is executed again, the contents of location 5001 will be added to the accumulator, and so on. Instructions , two basic groups of instructions: memory reference and microinstructions. Memory reference instructions require an There are operand; microinstructions do not require an operand. 19 MEMORY REFERENCE INSTRUCTIONS In PDP- 8‘ computers instructions require a reference to memory. They appropriately designatedmemory reference instructions, and take the following some are format: OPERATION CODES (D— 5 O 1 . MEMORY pAGE 3 2 4 5 INDIRECT ADDRESSING ‘ Bits 0 to 6 7 8 .9 17 1 1O ADDRESS Memory Reference Instruction Bit Assignments through 2 contain the operatiOn che of the be performed. Bit 3 ' instruction tells the computer if the instructiOn is in- direct, that is, if the address of the instruction specifies the loca— tion of the address of the operand. Bit 4 tells the computer if the instruction is referencing the current page or page zero. This leaves bits 5 thrOugh ll (7 bits) to specify an address. In these 7 bits, 200 octal or 128 decimal locations can be specified, the page bit increases acCessible locations to 400 oCtal or 256 decimal. For a list of the memory reference instructions and their Appendix C. codes, see be followed In PAL III a memory reference instruction must by a space(s) or tab(s), an optional I or Z designation, and any valid expression, and may be defined with the FIXMRI instruction, explained under the section on Altering the Permanent Symbol Table. Permanent symbols may be defined using the FIXTAB instruction, and may be used in address fieldsas shown below: A=1234 FIXTAB TAD A MICROINSTRUCTIONS . - . Microinstructions put/ Output Transfer are divided into two groups: operateand In- (IOT) microinstructions. 20 NOTE If a programmer mistakenly makes an illegal combination of microinstructions, the Assembler will perform an inclusive OR be— tween them; for example; . interpreted as SPA (7510) CLL SKP is (7100 7410) Operate M icroinstructions 7 Within the operate group, there are two groups of microinstruc— Group 1 microinstructions perform clear, complement, rotate and increment operations, and are des— ignated by the presence of a 0 in bit 3 of the machine instruction word. (See Permanent Symbol Table list in Appendix C.) tions which cannot be mixed. OPERATION O ‘I AC 2 CLA CMA A A 3 4 CONTAINS A 2) TO SPECIFY GROUPI 6 5 CLL‘ ROTATE AND L RIGHT ROTATE 1 POSITION IF A0 ZPOSITIONS IF A 8 7 CML A 1 A. IO 9 11 IAC ROTATE AC AND L LEFT Group 1 Operate Microinstruction Bit Assignments Group 2 microinstructions check the contents of the accumulator and link and, based on the check, continue to or skip the next instruction. Group 2 microinstructions are identified by the presence of a 1 in bit 3 and a 0‘ in bit 11 of the machine instruction word (See Appendix C). REVERSE SKIP OPERATION CODE 7 CLA SENSING OF BITS 5,6,7 SZA HLT AFN/AA 01234567891011 V CONTAINS A1 TO SPECIFY GROUP 2 SMA SNL 03R . CONTAINS A a TO SPECIFY GROUP 2 Group 2 Operate Microinstruction Bit Assignments 21 1 and Group Group 2 microinstructions cannot be combined because bit 3 determines either one or the other. Within Group 2, there are two groups of skip instructions. They can be referred to as the OR group and the AND group. I OR 7* Group ‘ . AND Group ' SMA . , SPA SZA SNA SNL SZL The OR group is designated by a 01n bit 8, and the AND group by a 1 in bit 8. OR and AND group instructions cannot be com- bined because bit 8 determines either one or the other If the programmer does Combine legal skip instructions it is important to note the conditions under which a skip may oCcur. 1. OR Group———If these skips are combined in a statement, the inclusive OR of the conditions determines the skip. For ‘ example: SZA'SNL The next statement is skipped if the accumulator contains 0000, or the link is a 1, or both conditions exist. 2. AND Group—-—lf the skips are combined in a statement, the logical AND example: SNA of the, conditions determines the skip. For SZL The next statement1s skipped only if the from 0000 and the link1s 0. accumulator differs * Input/ Output Transfer Microinstructions These microinstructions initiate operation of peripheral equip- ment and effect an information transfer between the central proces- sorand the Input/ Output device(s). The Permanent Symbol Table in Appendix. C contains the com, monly used in IOTs for the disk, TTY, and high speed devices. These and other IOTs are discussed in detail in the Small Com- puter Handbook. 22 PSEUDO-OPERATORS‘ ' f ’ ‘ The programmer usesp‘seudo-Dperators to direct the Assembler perform certain tasks or to interpret subsequent coding in a certain manner. Some pseudo-ops generate storage words in the “object program, otherpseudo—ops direct the Assembler [as to how to proceed with the assembly: Pseudo-ops are maintained in the permanent symbol table; pseudo-ops should" not be used as variable to names within a program. The function of each PAL III pseudo-op is described below. Indirect Addressing I‘M SymbOIic repreSentation for indirect addressing, must be separated on eaCh side by at least one space. For example: ' DCA I ADD The; value of the symbol ADDis’ used as the address of the address in which the contents of the accumulator will be stored. Optional method of denoting a Z page For example: DCA ADD DCA 2 zero reference. , ADD' The two statements abovehave the same meaning and generate the Same code where ADDis on page Zero. Both Z and I can be present in the same by at leastone space, as follows: DQA z 1 ' ‘ instruction, separated ADD which is the same as: Don't ADD Radix Control Numbers used in a source program are initiallyconsidered to be 23 octal numbers. However, if the programmer wishes to have certain numbers interpreted . as he decimal, use can the pseudo-op ‘ VDECIMAL. All following numbers are taken as. decimaluntil DECIMAL ‘ * OCTAL Extended , the occurrence of the pseudo-op OCTAL. Resets the radix to its original OCtal‘base. Memory When using more than one memory bank, the pseudo op FIELD instructs the Assembler to output a field setting. This field setting is punched during pass 2 and is reCOgnized by the Binary Loader, which in turn causes all subsequent information to be loaded into the field specified by the expression. FIELD 11 Where n. is an integer, apreviously defined symbol, or an expression within the range 0 < n < 7. The FIELD pseudo-op causes a field setting (binary word) of the form: ‘ 11 XXX 000 where. to be output on the binary tape 000<xxx<1112 during pass 2 followed by an origin setting of 200. This word18 read by the Loader, which then loading information into the new field The field setting is never remembered by the Assembler, and no initial field setting is punched. A binary tape produced without field settings may be loaded into any one field of core by appropriate manipulation of the Data Field switches when using the Binary Loader. Asymbol in one field may be used to reference the begins , location in any other field. The field to Which it refers is determined by the use of the CDF and CIF instructions. (The pro— same grammer who is unfamiliar with the IOTs but'Wishes to use them should experiment with several short test programs to satisfy him— self as to their effect.) An example of conservation might be. - 24 this method of symbol space *200 ~‘ 0200 @201 0005 0006 DATA: 0202 0007 0203 @004 @300 1200 ‘DATA @301 1203 DATA *300 AC /YIELDS 5 /YIELDS 10 DATA /YiELDs 6 IN AC DATA+4 /Y1ELDS 1200 IN +3 IN IN AC 1a» 1a FIELD @200 @006 0201 0007 0202 0003 0203 0002 1 @204 1200 TAD @205 7200 CLA 0206 1204 TAD NOTE GDP and CIF instructions must ‘be used prior to any instruction referencing a loca— tion outside of the current field, as ‘ in the following example: *200 TAD P301 VCDF 00 P301: CIF 10 JMS PRINT CIF 10 JMP NEXT 301' FIELD l *200 NEXT; TAD P302 CDF 10 JMS ‘PRINT HLT P302; 302 PRINT: 0 TLS TSF JMP --1 CLA RDF TAD P6203 DCA .+1 000 JMP P6203: 6203 IMPRINT‘. 25 shown AC When FIELD is used, the Assembler follows the new FIELD set- ting with an origin at location 200. For this ‘reason, if the programmer wants to assemble code at location 400 in field 1 he must write: FIELD *4GG 1 /CORRECT EXAMPLE ‘ The following is incorrect and will not generate the desired codei *Qflfl FIELD /INCORRECT 1 End of Tape .. f The pseudo—op PAUSE signals the Assembler to stop processing the paper tape being read. The Current passiis not terminated, and processing continues when the user depresses the CONTinue key. When processing a segmented program, the programmer uses the PAUSE pseudo-op as the last statement of each segment (tape) to halt Assembler processing, giving him time to insert the next segment of his program. The PAUSE pseudo-op should be used only at the physical end of a tape or file and with two or more tapes of one program. When a PAUSE statement is reached, 1. The Assembler stops. 2. This is the physical end of the tape; the Assembler resets A the input buffer pointer. 3. Operator intervention is required to put the next tape segment of the program in the reader and press the CONTinue key. If a PAUSE is encountered somewhere other than at the physical end of a tape, some of the user code immediately after the PAUSE will not be assembled. This occurs because PAL III has ‘an input buffer to allow maximum use of reader speed. A tape is read in until the buffer is filled or the physical end of the tape is reached. 26 The contents of the buffer are then processed. However, uponrec- ognizing a PAUSE, PAL lll resets the buffer to empty and waits for step 3 above. End of Program special symbol dollar sign ($) indicates the end of a prothe Assembler encounters the dollar sign, it termiWhen gram. nates the current pass. The Assembler must read a 58 after each The pass before it will correctly proceed with the assembly. Altering the Permanent Symbol Table PAL 111 contains a table of symbol definitions for the PDP 8 and its most common peripheral devices. These are symbols such as TAD, DCA, and CLA, which are used in most PDP- 8 programs. This table is considered to be the permanent symbol table 1:3” PAL Ill; all of the symbols it If the user purchases one or contains are listed in Appendix more optional devices whose in— struction set is not defined among the permanent symbols (for example EAE or an A/D Converter), he would Want to add the necessary. symbol definitions to the permanent symbol table in every program he assembles. Conversely, the User who needs more space for user defined symbols would probably want to delete all definitions except the ones used in his program. For such purposes, PAL III has three pseudo-ops that can be used to alter the perma- nent symbol table. These pseudo-ops are recognized by the As3 are pass they sembler only during pass 1. During either pass 2 or ignored and have EXPUNGE no efiect. the entire Deletes cept pseudo-ops. FIXTAB ~ symbol table, symbols presently defined permanent symbol table. All symbols Appends ‘ permanent all before the occurrence of FIXTAB of the are to ex— the defined made part permanent symbol table until the Assem- gbler is reloaded. For example, the PAL 111 EXtended Symbols To Tape ends with FIXTAB. append the following RF08 disk lOTs to the Symbol table, the programmer generates an ASCII tape of: 27 DCIM=6611 DIML=6615 DIMA=6616 DFSE=6621 DISK=6623 DCXA=6641 DXAL=6643 'Dxaczeeas DMMT=6646 FIXTAB PAUSE The ASCII tape is then read into core ahead of the symbolic program tape during pass 1. The PAUSE pseudo-op stops assem- bly, and the Loader waits for the programmer to put the symbolic program tape into the tape reader and press CONTinue. Each time the Assembler is loaded, PAL III’s permanent symbol table is restored to contain only the permanent symbols shownin Appendix C. After altering the symbol table to fit his needs, the user might want to keep PAL III in this state for future use. This can be done by punching a binary of the section of core Occupied by PAL III with its new symbol table. To do this: 1. Readin PAL III and modify 2. PAL III’s symbol table symbol table begins at as desired. location 2332 (octal). Count all the symbols in the altered symbol table. Since each symbol and its value require four words, multiplythis number by 4. Convert this number to octal and add it to 2332 (octal). This number is the upper limit ‘of PAL III. The lower limit13 0001. 3. Using the Binary Punch Routine (DEC- 08 -YXlA-PB), ' which does a binary core dump to the high-speed or Tele- type punch, and the limits as stated in 2 above, the PAL III Assembler. 4. punch out The output of the Binary Punch Routine is the Assembler with the modified symbol table and can be loaded with the Binary Loader. This revised version of the Assembler can thereafter be used instead ofthe original version. The third pseudo-op used to alter the permanent symbol table in PAL III (and not present in MACRO-8) is FIXMRI which may be used only after an EXPUNGE instruction: 28 . ‘ FIXMRI Fix memory reference instruction. Memory reference ' instructions are stored in the permanent symbol table ' immediately following the pseudo-ops. The letters FIXMRI must be followed by one space, the symbol for the instruction to be defined, an equal Sign, and the value of the symbol. The pseudo-op must be re— peated for each memory reference instruction to be ‘ defined. All memory reference instructions must be defined before the definition of. any other symbols. For example: EXPUNGE FIXMRI TAD=1QJ®® FIXMRI DCA=3$Q® CLA=72®® FIXTAB PAUSE When the preceding program segment is read into the Assembler during pass 1, all symbol definitions are deleted and the three symbols listed are added to the permanent symbol table. Notice that CLA is not a memory reference instruction. This process is often performed to alter the Assembler’s symbol table so that it contains only those symbols used at a given installation or by a [given program. This may increase the Assembler’s capacity for user defined symbols in the program. Program Preparation and Assembler Output In PAL 1H and MACRO—8, the source language or, symbolic tape is punched in ASCII code on 8—channel paper tape, using ‘ an off—line Model LT-33 Teletype or the on-line Symbolic Editor. prOgram should, begin with leader code, which may be blank tape, code 200, or RUBOUTs. Certain codes which the Assembler ignores may be used freely to produce a more readable symbolic program listing. These codes are TAB and LINE FEED. The. Assembler also ignores extraneous spaces, carriage return/line feed combinations, and blank tape. In general, a When the Assembler encounters a form feed character, it causes 12 blank lines to be output on the listing (in PAL III only). The two programs below are identical and produce the same binary code. The second, however, was generated using the TAB 29 ‘ the‘Symbolie Editor and is easier to read. The first program assembles faster only because there .is less paper tape to functionof be read into the computer. PrOgram #1: *GGG /EXAMPLE INPUT oF /GENERAToR G/START BEGIN, THE FORMAT To PRoGRAM PROGRAM OF KCC FOR KSF/wAIT FLAG .—I/FLAG JMP HRH/READ SET NOT YET CHARACTER IN DCA CHAR TAD CHAR TAD MSPACE/IS SNA CLA IT SPACE? A HLT/YES JMP BEGIN+2/NO:INPUT AGAIN STDRAGE' CHAR G/TEMPCRARY EQUIVALENT MSPACE,-RAG/- ASCII /END OF EXAMPLE s Program #2: *BOO /EXAMPLE OF /GENERATOR INPUT THE FORMAT TO PROGRAM ' /START ‘ BEGIN, G A PROGRAM OF ' ’ ‘ KCC > _: . KSF ,7 , SJMP’--1‘ CHAR TAD TAD MSPACE * YET SNA CLA I, /IS _ IT A.SPACE? ' * * « BEGIN+2 G MSPACE, -24O /END EXAMPLE OF SET CHARACTER IN ‘ CHAR HLT CHAR, FLAG FOR /READ DCA JMP /WAIT /FLAG NDT _ KRE . , , i/YES /No: INPUT AGAIN /TEMPoRARY STORAGE /¥ASCII EQUIVALENT ; . $ 30 r " The program consists of statements and pseudo—ops, is termi— nated by the dollar sign (33.), and followed by some trailer code. If the program is large, it can be segmented using the pseudo-op PAUSE, which oftenfacilitates the editing of the source program since each section‘will be physically smaller. The Assembler initially sets the current location counter to 0200. This counter is reset whenever the asterisk (*) is processed. During pass 1, all illegal characters cause a diagnostic to be printed. The tape should be corrected and reassembled. The Assembler reads the source tape and defines all symbols used. The user’s symbol table is printed (or punched) at the end of pass 1. The symbol table is printed in alphabetical order. If any symbols remain undefined, the undefined address diagnostic is printed. If the program listed on the previous page were assembled, the pass 1 symbol table output would be: ‘ BEGIN CHAR MSPACE cane @213 ,fl214 DUring pass 2, (the Assembler reads the source tape and generates the binary code“ using the symbol table equivalences defined during pass 1 The binary tape that is punched may be lOaded by the Binary Loader. This binary tape consists of code, an origin setting, and data words. At the end of pass 2, a checksum is punched on the binary tape, and trailer code is generated.- During pass 2, the Assembler may diagnose an illegal reference; When using the LT—33 punch, the diagnostic is both printed and punched, and is preceded and followed by RUBOUTS. The Binary Loader ignores everything that has been a RUBOUTS punched on tape between During pass 3, the Assembler reads the sOurce tape and gen— erates the code from the source statements. The assembly listing is printed (Or punched). It consists of the current location counter, the generated code in octal, and thesource statement. The symbol tableis printed at the end of the pass. If the sample program listed above were assembled, the pass 3‘ output would be: leader ' 31 *QOO /EXAMPLE OF /GENERATOR a2aa aaaa @221 6232 KCC @222 6931 KSF BEGIN, a @223 5222 JMP @224 6®36 KRB .-1 . DCA CHAR 1213 TAD CHAR @207 1214 TAD MSPACE @210 7652 SNA CLA 2211 7422 .HLT 52a2 (Rana @214 75ma MSPACE, amp PROGRAM OF . 3213 anon FORMAT . @265 C213 TO THE /START ®2®6 @212 INPUT PROGRAM /wAIT FOR /FLAG NOT /READ IN CHARACTER A SPACE?, FLAG SET YET , /IS IT . /YES BEGIN+2 /NO: a INPUT AGAIN /TEMPORARY STORAGE /ASCII EQUIVALENT -24a ‘ /END BEGIN 22am CHAR 2213' MSPACE OF EXAMPLE '0214 Operating Procedures The PAL III Assembler is provided to DEC customers as a binary tape, which is loaded into the PDP-8 memory by means of the Binary Loader, using either the LT~33 reader or the highspeed reader. The Assembler also uses either the LT-33 reader or the high—speed reader to read the source language tape, and it uses either the LT.33 punch or the high—speed punch for output. The selection of I/O devices is made when the Assembler is started. The source language tape must be in. the proper reader, with the reader and punch turned on. table is printed When using the high- speed punch, the if on the bit 11 of the switch register is a O. LT- 33 Teletype if bit 11 of The symbol table is punched on the high-speed the switch register is a 1.. All diagnostics are printed on the LT— 33 except for the undee fined address diagnostic when using the LT- 33 punch, or the high—speed punch if it is included in the machine configuration and turned on. The only diagnostic in pass ,2 will be illegal reference. (Since this diagnostic is printed on the LT-33, it will also be punched on the binary tape. It will, however, be ignored by the Binary Loader.) The bit 11 switch option can also be used. during . symbol * punch 32 pass 3. If the machine is not equipped with a high-speed punch, bit 11 must be set to 0. binary tape of the PAL III Assembler, the user is provided with an ASCII tape (PAL III Extended Symbols Tape) containing symbol definitionsfor the instruction sets of the available options to the PUP—8 (card readers, magnetic tapes, and A/ D converters). A limited amount of space is available in a‘4K' system; therefore, expanding the number of permanent symbols that the Assembler recognizes will decrease the maximum number of symbols the user has available In addition to the . ' The following is a description of Assembler: 1. steps Load the ASsembler using either the using the in III—33 PAL III reader or the high—speed reader (see Appendix A). , 3. Set 0200 into the Switch Register; press ADDRess LOAD Place the source language tape in the reader, turn on the appropriate reader and the punch. 4. Set bits 0 and 1 of the Switch Register for the 2. These settings are: proper mass " Pass 1 is Bit 0 Bit I 0 I l 0 pass 1 pass 2 l 1 pass 3 required so that the Assembler can initialize its symbol table and define all user symbols. After pass 1 has been made, either pass 2 or pass 3 can be made. ' 5.’ Bit ll switch options: pass 1 Bit 11:1 ~ Punch the'symbol table on the high— speed punch if it is in the machine configuration. Print (and punch) the symbol table on the LT- 33 (low- speed punch). Punch binary tape on high—speed, punch. Punch binary tape on low— speed punch. ' Bit 1120 paSs 2 Bit 11:1 ' Bit 11:0 1 33 ‘ paSs 3 Punch the assembly listing tape in ASCII on the high- speed punch. Print the on the .Bit 11:1 Bulls-:0 } ._ 4 . . — Bit 10 switch options: Bit 10:1 pass 3‘ ~ tab stops 1 Bit 10:0; .7 . TAB Output TAB as 7 (code , ¥ . Output TAB (code 211) -. » assembly listing LT-33 — 211 as 8 space RUBOUT and 377). Bit 2 switch options: - passes 1 and 3 6. ‘ ‘Bit‘ 2:: 1 Suppress output of symbol table. Bit 2:: 0 Output symbol table. Press CLEAR and CONTinue to begin pass 1 only Press CONTinue to begin passes 2 Or 3. The Assembler halts at the end of each pass. PrOceed from step 3. If the AsSembler has halted because of a PAUSE statement putthe next into the reader and press CONTinue. tape ' SUMMARY OF DIAGNOSTIC MESSAGES FOR PAL 111 Pass I Diagnostics all user symbols, The Assembler reads the source tape, and outputs the user symboltablein alphabetical order. Pass V defines " 1 diagnostics are: IC AT xxxx nnnn Illegal Character . Where XXXX is the value of the illegal character and nnnn is the value of the Current 10cation ‘ ' was RD procesSed XXXX AT counter when the character ' * Redefinition nnnn symbol being redefined and nnnn is the value of the current location 'counter at the point of redefinition. The symbol is redefined. Where DT . , XXXX is the AT nnnn Duplicate Tag An attempt is» being made to redefine a symbol using the .ICOIIIIIIELXXXX“ is the symbol and nnnnis the value of the current location counter at the point of redefinition. The previous value of the symbol is retained and the symbol is not re’ XXXX , r , defined. 34 ._ ST AT Symbol Table Full Where XXXX is the symbol causing the overflow and nnnn is the value of the current location counter at thepoint of oven XXXX nnnn flow. The Assemblerhalts and cannot be restarted. PO XXXX AT i\Pushdown List Overflow nnnn‘ ’ attempt is being made to carry a multiple assignment to more than two leVels; i.e., AszCE—tX.XXXX*is the Value of the pushdown stack pointer (an internal address in PAL III). An The value of the current location counter When o’Verflow is detected is The Assembler halts at this nnnn. point without reading more source tape. The CONTinue key has no effect time; however, the Assembler can be restarted at location 200, as indicated in step 2 under Operating Procedures. at this UA XXXX AT Undefined Address nnnn Where XXXX is the symbol that was used, but never defined, and nnnn is the value of the current location counter when symbol was first processed. This message is printed with the symbol table at the end of pass 1. The symbol is assigned a value equal to the highest address on the memory page the where it was first used. Pass 2 Diagnostics The Assembler reads the tape, and, using the symbol table defined during pass 1, generates and punches the binary code. This binary tape can then be loaded by the Binary source Loader. The pass 2 diagnostic is: IR Illegal Reference Where XXXX is the address being referenced and nnnn is the XXXX AT nnnn value of the current location counter. The illegal address is then treated as if it were on the proper memory page. For example: *73E6 JMP 3(2)? would produce: IR @3o7 AT 73o6 and would generate 5307 to be loaded into location 7306. ’ 35 Pass 3 Diagnostics ~ g and, using the symbol during pass 1, generates and prints the code The Assembler reads the source tape table defined represented by the source statements. The current location counter, the contents,- and the source statement are printed side by side on one line. If bit 11 of the Switch Register is a 1 and the machine configuration includes the high—speed punch, the assembly listing is punched in ASCII. The pass 3 diagnostic is Illegal Reference, as in pass 2. 36 MAQRD-S PROGRAMMING Macro-8 is a 4K two-pass paper tape assembler similar to PAL III, which contains several additional features which may be of use to more advanced PDP—S'programmers. These features include generation, literals, Boolean operations, double precision integer' input, floating point input, a text input facility, and user— defined macros. The assembler is compatible in most respects with link - PAL III; the areas of difference are noted later in this manual. Characters In addition to those characters discussed under PAL III, the following characters are used in MACRO—8. Function Symbol Name & Ampersand ! Exclamation Point , Combines symbols or numbers. (Boolean AND) Combines symbols or numbers ' (Boolean OR) , ” Double Quote () I Generates 8-bit ASCII code ' Parentheses , - Square Brackets Angle Brackets [1 <> "NOTE: On an Defines a literal on the current page Defines a page 0 literal Defines a macro tor—33': is, generated by SHIFT / K- [ ] is generated by SHIFT/ M < is generated by SHIFT/, > is generated by SHIFT/. (period) Line Feed (comma) ‘ (code 212) is ignored, as in PAL III, unless it immediately precedes a dollar sign. The sequence line feed/ dollar sign is taken as unconditional end— , of—pass. Expressions All symbols numbers (exclusive of pseudo-ops, macro names, and double precision or floating point constants), may be combined with certain arithmetic and logical operators to form exand pressions. These operators are: 37 * Name Operator 7 + Plus , _ Function 1 , Signifies two’s complement ad- , dition* . , ' Signifies two’s complement sub- Minus _traction* Point Signifies Boolean inclusive OR Exclamation — A « 1 ' ; , _ ! * . . 1 & (union) Signifies Boolean AND section) * Interpreted in context; can signify an inClusiVe OR, or act (inter- Ampersand Space ' as a field delimiter as in ‘ PAL 111 *As explained in Introduction to Programming. NOTE may not contain pseudo-ops other than I and Z, macro names, double Expressions precision integers, < stants. To do or, so is an code may result being giVen. floating point error, and without an con- erroneous error message ’ Symbols and integers may be combined with any of the preced— ingoperators. A symbolic expression is evaluated from left to right with one exception—space, which serves as a delimiter. Grouping of terms via the use of parentheses is not permitted in MACRO—8. Consider the following examples: A -B A+B 1 VALUE 0002 VALUE 0007 VALUE . 0700. A , 0003 1 0005 0005 0014 0007 0707 Since space is treated as a delimiter, expression, the two expressions: A!B+C A B+C 38 , A Ala-B A113 A&B 7777 0003 ‘0002 0002 0671 - .0007 0005 0707 0000 separating two terms of an are not equivalent. In the first case the assembler interprets the expression from left to right as follows: (A!B)+C In the second case, each term is considered separately and the re- sults combined with an inclusive OR: A (3+0) As in the following example, the values of the two expres‘Sions will differ: ' - 314+5 2 7+5: 141.. 3 4+5 = 3.1118 =13, NOTE ‘ Expressions of the form A +B and A+ B are incorrect and may cause erroneous code to be generated Symbols and integers must be combined with a ing them single operator separat- Origin Setting The origin is ordinarily set by use of the special character aster- isk (*) as described in PAL III. All symbols to the right of the asterisk must already have been defined. For example, if D has the . value 250 then: *D+1®i 'WIll set the location counter to 0260. programmer’s addressing problems, a convention has been defined that divides memory into sections called pages. Each page contains 2001: locations (128m) numbered 0 to 17711 To ease the page. There are 408 or 32“, pages numbered 0 to 378. Some examples of page numbers and the absolute and relative locations on that (addresses) are shown below. See Chapter 2 of. Introduction to Programming for a Complete list of page numbers and their addresses It must be remembered, however, that there18 no physical separation of pages in memory. 39 . Absolute Address Page 0 0——i77 0——177 1 zoo—~377 0——177 2 400——577 0——177 36 7400—57777 0-_177 37 7600——7777 0——177 To simplify page handling, the pseudo-op PAGE 11 Relative Address, PAGE can be used: . The PAGE pseudo-op resets the location counter to the first address of page 11, where n is an integer, a previously defined symbol, or a symbol expression, all of whose terms have been defined previously and ' whose value is from 0 to 37, inclusive. For example: PAGE PAGE ‘2 Sets the location counter to 0400 PAGE 6 Sets the location counter to 1400 When used without an argument, PAGE resets the location counter to the first locatiOH on the next suc- ceeding page. Thus, if a program is being assembled into page 1 and the programmer wishes to begin the page 2 he pseudo-op PAGE, as follows: next segment on need only insert the *206 JMP -7 PAGE CLA In this case, the CLA will be assembled into location 400. ' If, when the PAGE pseudo-op is used without current location counter is at the first 40 argUment, the loCation of a page, it will not an be moved. In the following example, the code TAD B is assembled into location 400: *377 PAGE If several consecutive PAGE pseudo-ops are given, the first will cause the current location counter to be reset as specified. The rest of the PAGE pseudo-ops in the sequence will be ignored. NOTE Since PAGE is a pseudo-op in. MACRO-8, it is illegal PAGE: as a tag. Therefore the coding: G TAD PAGE may not be used: Link Generation symbolic addressing on the current page of core memory, MACRO-8 automatically generates links for off-page references. MACRO—8 compares the page bits of the adIn addition to handling the dress field with the page bits of the location counter. If the page bits of the address field are nonzero (not a page 0 reference) and do not equal the page bits of the location counter an off-page referenceIS being attempted. the If reference is made to an address not on page Where the instruction is located, the assembler sets the indirect bit (bit 3), and an indirect address linkage will be generated on the current memory page If the off—page reference is already an indirect one, the error diagnostic II (Illegal Indirect) be generated during passes 2 and 3. When a link is will generated, the LG (Link Generated) message will be printed on passes 2 and 3. In the case of several off-page references to the same address, the link will be generated only once, but the LG message will be printed each time. 41 *2117 ,- p ‘ ‘CLA A, *2600 In the example above, the space preceding the user defined sym- bol A acts as; an address field, delimiter. The Assembler will recognize that the register labelled A is not on the current page (in this case 2600 to 2777) and will generate a link to it as follows: In location 2600 the Assembler will place the word 5777 1. which is equivalent to IMP I 2777. 2. In address 2777 (the last aVailable location on the current page) the Assembler will place the word 2117 (the actual address of A). Although the Assembler will recognize and generate an indirect address linkage when necessary, the programmer may indicate an explicit indirect address by the pseudo—op I. This must be between the instruction code and the address field, as it would be placed in PAL III. TheAssembler cannot generate a link for an instruction that is already specified as being an indirect reference and will print message II (Illegal Indirect). For example: *2117 A, CLA~ *2600 JMP The I A above coding will‘not work because A is not defined page where J MP I A is attempted and Literals on the the indirect bit is already set. . Symbolic expressions appearing in the operand part of an in— struction usually refer to locations containing the quantities being operated upon. Therefore, the programmer must explicitly reserve locations to hold his constants. The MACRO-8 language provides a means (known as literals) for using a constant directly. Suppose, 42 for example, that the programmer has an index which is to be incremented by two. One way of coding this operation would be as follows; *2aa CLA;. TAD‘INDEX C2, ., "TAD ca DCA INDEX. 2 Using a literal, the same coding would be reWritten as: CLA TAD INDEX TAD (2) DCA INDEX The left parenthesis is a signal to the Assembler that the expression following is to be evaluated and assigned a word in the constants table of the current page. This is the same table in which the indirect address linkages are stored. In the previous example, quantity 2 is stored in a word in the linkage and literals list beginning at the top of the current memory page. The instruction in which the literal appears is encoded with an address referring to the address of the literal. A literal is assigned to storage the first time it is encountered; subsequent reference to that literal from the current page is made to the same register. The use of literals in preference to the first method of handling constants frees symbol storage space for variables. If the programmer wishes to assign literals to page zero rather than to the current page, he may use square brackets, [ and ], in place of the parentheses. This enables him to reference a single literal from any page of core. For example: the ' 43 *200 TAD [2] TAD [2] , *500 For the first and succeeding times the literal 2 is referenced, iden- tical code is generated to a single location on page zero containing the literal. In this case, the following code would be generated: Location Contents 0177 0002 0200 f 0500 1 177 1 177 Whether on page zero or the current page, the right member is are (closing) ignored and may be omitted. The following examples acceptable: TAD (777 AND [JMP In the second example, the instructionAND [JMP has the same ' effect as: AND 7 . [5000 Literals can be nested.- For example: *200 TAD (TAD (30 will generate the following: Location Contents 0200 1376 ‘ 0376~ 1377 0377 0030 w 44 This type of nesting can be carried to two levelsas in the. preceding example. Further nesting will cause BE (overlapping of internal tables) and US (undefined symbol) error messages to be generated. Literals are stored on each page starting at page address 177 (relative) and extending toward page address 0' (relative).’If a literal is generated for a nonzero page and the origin is then set to another page, the current page literal buffer is output (punched on pass 2; printed on pass 3). This does not affect later execution. The uSer may find that the literal buffer hasbeen dumped before the end of a page to make room for more literals. The same‘literal Will be generated if used after that point. If the origin is then reset to the previously used page, the same literal will be generated if used again, but it will not destroy previously used literals on that page. Literals and links are stored only as far doWn as the highest in— struction on the page. Further attempts to define literals will result in a PE (Page Exceeded) or ZE (Page Zero Exceeded) error mes— sage. Links are not stored in empty locations preceding the highest location Used for instruction. To summarize, literals may take the following forms: EC cc [V (v E"A ("A [I (I [E (E where C is a constant, V is a variable, A is any Single ASCII charother than blank tape (code 000) or leader—trailer (code 200), I is an instruction, and E is an arithmetic expression, [ indiacter page 0 reference and ( indicates a current page reference. Arithmetic. expressions may consist of cOnstants, variables, and cates a operators but must not include literals. Single text characters may be combined with each other’in an arithmetic expression but not with other constants or variables. V For example: (VIA+I'B_UIC is equivalent to (son 45 An instruction may contain a literal; for example: TAD 1 [son (JMP is valid; . I“ bowieveri ran ca+<sa Will not assemble since (A+ (50IS not a valid expression. Literals may be used as the address part of a memory reference instruction. TAD (so or in place of an instruction: (MSG14' which causes ”the location addreSs of sembled at the .pointwhere the literal (MSG'4A to beEaS— it occurs in the program. NOTE If a large number of nested literals or par- ticularly large numbers of literals are used, the literal list may be output before the logical end of the page. This will not affect ' later execution. Field Pseudo- 0p In addilon to punching the field setting and new origin setting (*200) as in PAL III, the FIELD pseudo— op in MACRO- 8 first causes all current page literals and links then all page 0 literals and links to be output. For this programming reason the following 1 techniques should be considered: 1. Complete all coding 1n one field before moving to another. If you return to a previous field, the literals and links will not have been remembered. 2. Be ' exceedingly careful about referencing in one field a defined in another. The field of a variable is not stored (the assembler does not know what variable which was field a variable is in). For example: 46 A FIELD ~ 1030a! 0340 10301 134a 334a 34a A, FIELD anaao 1 *3Da TAD A (DOA A 2 In this example, the codingDCA A in field 2 caused octal . 3340 to be generated, but this may be taken as a refer- ence to location 340 in field 2. The argument to the FIELD pseUdo-op should be a value 0<N<7. If N is greater than 7, the bits to the left of the low order ~ ‘ . digit will be ignored. Thus field 8 Will be assembled as field 0 and flagged as an illegal character if the radix is octal. On pass 3, the octal address will be preceded by a single digit denoting the current field. The first digit is merely a convenience for the programmer and has no other effect on the assembly. Text Facility . SINGLE CHARACTER TEXT FACILITY If a single character is, preceded by a double quote (“), the 8—bit value of ASCII code for the character is inserted instead of inter— preting the letter as a symbol. For example; CLA TAD ("A will place the constant 0301 in the accumulator. The code“ . will be assembled as 0256. g y If a carriage return is desired as the text character, it must not be the carriage return intended to end the line of code. To generate 0215 with this facility, it is necessary to generate: a “[CARRIAGE RETURN /LINE FEED] [CARRIAGE RETURN /LINE4 FEED] , OI : “[CARRIAGE RETURN /LINE FEED] OI' “[CARRIAGE RETURN] [CARRIAGE RETURN/LINE FEED] . ~47 generated with the Symbolic Editor, which outputs a line feed after each carriage The latter cannot be return. The Editor also cannot generate the sequence: “[LINE FEED] [CARRIAGE RETURN / LINE FEED] which is necessary to generate the code 0212 with this facility. In this ca'seitis best to use the octal 212 instead of “‘[LINE FEED]. On pass 3, certain characters, while causing the Correct octal coding to be printed, will be interpreted as format-control characters in the source listing. A summary of special cases follows: Source Code Listing Appearance , , ' “ ' ‘ *200 “ 00200 0215 00201 0215 “ ' , , “ “ ’ ' __ ‘7 g l " ’ “ ° ‘ 00201 0212 ‘5 00203 0214 .. 00204 0211 ' “ “(FORM FEED) “(TAB) . 2 , . , y 7 TEXT STRINGS (FORM FEED) “(SPACES TO NEXT TAB STOP) ‘ . A string of text characters can be entered by giving the pseudoop TEXT followed by a single space (code 240), any delimiting character (except blank tape leader-trailer), a string of text, and or the same TEXT delimiting character. For example: ATEXTA The‘character codes are stored two per word in ASCII code that has been trimmed to the rightmost six bits. Following the last char— acter, a 6-bit zero is inserted as a stop code. The above statement would produce: 2405 3024 0000 The string in the following example: TEXT /.!./ 48 would produce: 5641 56@@ The TEXT pseudo-op could also be used as part of a calling sequence to a subroutine: . Example 1 : JMS MESS TEXT / / Example 2: JMS ADDMES, MESS NOWDS /NO ADDMES /ADDRESS WORDS IN OF MESSAGE MESSAGE TExr /MESSAGE/_ NOTE While the TEXT pseudo-op ters to be stored in a charac- causes trimmed code, the use of the single character control (“) causes characters to be stored as a full 8-bit ASCII code. . regard to delimiting characters, it should be noted that the Symbolic Editor always generates carriage return ascarriage re— turn/line feed and tab as tab/rubout or as multiple spaces. If car— riage return (code 215) or tab (code 211) were chosen as delimiter, line feed (code 212) or rubout (code 377) would become the first character of the text string. With NOTE If no delimiter is seen, line feed/ dollar Sign will terminate the pass. If no dollar sign is found, an effective PAUSE (on high- speed input) is executed, or 55 may be typed (on low-speed input). (See HALTS at the end of this manual.) . NUMBERS The types of numbers allowed in MACRO-8 assemblies are in- tegers, double precision integers, and double precision floating point 49 numbers. If the characters 8 and 9 are encountered in octal radix, they are flagged as illegal characters and ignored. Thus 1283 in octal radix becomes 123. Double Precision Integers Double precision integers may be positive or negative (stored as two’s complement) according to their sign but may not be combined with operators in expressions. They are always taken as decimal radix although the current radix of the program is not disturbed. Each double precision integer is allotted two consecutive words with the sign indicated by bit 0 of the first word, as shown below: ' Sign Bit I WORD 1 ‘ 0 11 WORD 2 12 23 , , Double precision Constants must be in the range: —83‘88608<N<8388607 The double precision integer mode is entered throUgh the use of pseudo-op DUBL. All numbers encountered after the occurrence of DUBL are- considered double precision integers (stored in 2 words) until an alphabetic character, *, or $ is encountered. Each numberis terminated by a carriage return, semicolon (;) or comment. For example: the *AQQ DUBL 679467 ‘ ' 44 -3. TAG, CLA Once the double precision mode has been entered, the programmer *, or $ before proceeding with the program. With the exception of unique floating point format characters (. and E), the same rules of character must terminate it with an alphabetic character, 50 recognition apply for double precision integers as for floating point constants. - , The preceding section of code would produce: Location Contents / 00400 0245 The numbers indicated under contents 00401 7053 are the octal equivalent of the decimal numbers in the preceding example. 7 00402 0000 The CLA instruction is given the value 00403 0054 7200 as found in the permanent sym- 00404 7777 bOI table. 00405 7775 have a value of 0406. 00406 7200 The 'symbol‘ TAG would Floating Point Constants The floating point input facility is designed. to assemble constants for use by the PDP—8 Floating Point Package. Double precision floating point constants may be positive or negative according to their sign but cannot be combined with operators. Decimal radix is assumed but the current radix of the program is not altered. Floating point iconstants are each assigned three words and are stored in normalized form, as shown below: 23120th P 116 0 Binary exponent: Two’s complement signed quantity 11 High order , 412 Sign of Mantissa 23 Mantissa , , Low order L 35 24 Mantissa The exponent is a signed two’s complement quantity in one 12— bit word. The signed two’s complement mantissa is stored in two 12-bit words, maintaining 23 bits of significance, making a total of three words for storage. 51 ’ The double precision floating point mode is entered throughuse of the pseudo-op FLTG. All numbers encountered after the use of FLTG will be interpreted double precision floating point con- as stants until the occurrence ofa an *, other than B. The ber15: general input $ or an alphabetic character format of a point numa floating DDD .DDDEDD where each D13 a decimal digit. While1n floating point mode, character13 handled1n one of the following ways: the format of floating point each ‘ 1. If it is a legal part of 2. ber, it is handled as suchand is used to generate code. If it is an asterisk, a dollar sign, or an alphabetic character other than B, it terminates the current number and termi- a num- nates floating point or double precision conversion. 3. If it is a format character 4. turn), it terminates the current number and is otherwise ignored. Comments are ignored. If it does not fall into any of the above categories, i.e‘., (%) an IC error message is generated. The number is terminated, and the: character is ignored. (i. e. ,,space slash, carriage re—_ = , In floating point format, the mantissa and the exponent may be preceded by signs (+ or -—). The decimal point and the exponent may be omitted. For example: *400 FLTG ' +509.32E®2 -62.97E-4 1.®®E-2 TAG, CLA would produce upon executiOn: Location. Contents ,. 00400 0003 00401 2427 00402 6675 00403 ‘ 7771 00404 4615 00405 2172 52 ‘ Location Contents 00406 7772 00407 2436 00410 5604 . 00411 7200 and the symbol TAG would be assigned a value‘of 0411. Accuracy of floating point conversion compares favorably with the PDP- 8 Floating Point Package. The most significant variation is in the handling of large negative exponents These are Calculated by multiplying by an inverse rather than by dividing, due to space limitations. No error checkingis donein the floating point routines; users, therefore, should stay within the range of 7 significant digit mantissas and exponents in the range —600 to 600. ' ilser DefinedMacros program, it often happens that certain coding sequences are used several times with diflerent arguments. If so, it When writing a is convenient to generate the entire sequence with a single state— ment. To do this, the coding sequence may be defined, as a “macro,” using dummy arguments. A single statement referring to the macro name, along with a list of real arguments, will generate the correct sequence in line with the rest of the coding. DEFINING A MACRO The macro name must be defined before it is used. The macro is defined pseudo-op DEFINE followed by the macro name and a list of dummy arguments separated by spaces. For example, a simple macro to move the contents of word A to by means of the word B and'leave the result in the accumulator could be coded as follows: DEFINE MOVE DUMMYl DUMMY2 <CLA TAD DUMMYI DCA DUMMY2 TAD DUMMY2> The choice of symbols used as dummy arguments is arbitrary; how— they may not be defined or referenced prior to the macro definition. The actual coding of the macro is enclosed in angle ever, brackets. 53 The preceding definition of the macro MOVE can also be written as follows: DEFINE MOVE ARGIVARGB <CLA3TAD ARGISDCA AR623TAD ARGB> The definition of the macro is enclosed in angle brackets, as mentioned before and the semicolon characters indicate the termination of a line of code, as in PAL 111.. When a macro name is processed by the Assembler, the real arguments replace the dummy arguments. For example, assuming that the macro MOVE has been defined as above: *40@ A: 0 ‘6 B: 7 the MOVE AaB, followmg codevis produced: ’ Location } Contents 0000 00400; 00401 7772 ‘ - p 00402 7200 00403 1200 e 00404 , ’ f3201 " 00405”, 1201 Notice that a macro definition has spaces separating the dummy arguments and the macro call has commasseparating the macro arguments. A macro need not have any arguments. For example, a sequence of coding to rotate the accumulator and link six places to the left might be coded as a macro by means of the following code: DEFINE ROTL <RTL3RTL3RTL> If; core space is tight and the sequence is to be used several times, it would be better to code this as a subroutine: 54 " Q ROTL: ‘R’I‘L, RTL RTL. JMP I ROTL The Subroutine occupies five locations and each call, I MS ROTL, , occupies 1. Each call to the macro ROTL occupies three locations. The main advantage of the macro is the use of dummy arguments. Its greatest disadvantage is the amount of symbol space required. The entire macro definition is placed in the macro table, two characters per word, with a dummy argument‘value replacing the symbolic names. For example: LOAD A DEFINE <CLA.~ TAD A> A is stored, in the macro table, roughly follows: as [CLIA [TAID l7700l>00 ,Where the vertical lines indicate successive 12-bit words. Comments andline feeds are not stored. The macro definition can consist of any valid coding, with the following restrictions: ‘1. Macros cannot be nested, iw.e., another macro name or definition cannot appear in a macro definition and cannot be brought in as an argument at the time a macro is refer- enced. TEXT (or definition. “ type) statements cannot appear in a macro Arguments cannot be another macro name, a TEXT pseudo-op or a character. The symbols used as dummy arguments must not have been defined or referenced or subsequently “ previously redefined ' ‘ A macro cannot be redefined (the macro name may not be used for any other purpose). . A macro definition must occur 1 v in a comment end with a >, which may not (comments are ignored). Dummy arguments may neither be pseudo-ops nor contain pseudo—ops, and the real arguments are subject to the same restriction. 55 The programmer who wishes to use pseudo-Ops in a macro definition (not as arguments) should experiment with short programs using the intended macro to be sure that its expansion and execution are legal and as. expected or desired. Consider the following macro definition: DEFINE LOOP DCA B A <TAD A B , TAD.COUNT ISZ B MP 0‘2) giving the macro name, a space and the list of real arguments, separated by commas. There must be at least as many arguments in the macro call as in the correspOnding macro definition. When a macro is referenced, its definition is found, expanded, and the real arguments replace the dummy arguments. The expanded macro is then prOcessed1n the normal fashion For example, the macro call: A macro is referenced by LOOP x, Y2 in the context of the program in which it appears, is'eq‘uivalent to: TAD X DCA Y2 TAD COUNT ISZ Y2 JMP .~2 The .macro table .sharesthe available spacefwith. the symbol (see Symbol Table). Thus the'prog'rammer must be aware table of the amount of room required by his macros and the fact that each symbol occupies four words Of memory Also, the arguments of a macro the macro call are temporarily stored in this ‘ is being expanded. MACRO- 8 Pseudo-Operators The list following summarizes MACRO- 8. 56 the buffer space while ‘ pseudo- ops available in Description Pseudo-op DECIMAL All following numbers interpreted as decimal DEFINE Used to define a macro DUBL Enter double precision integer mOde I EXPUNGE Deletes permanent symbol table withexception of pseudo—ops ' . , . dumped and a field Causes the literals to be FIELD FLTG setting to be output Appends all presently defined symbols to the permanent symbol table Enter double precision floating point mode I Indirect addressing OCTAL Resets radix to its original octal base PAGE Resets the location counter PAUSE Signals assembler to stop processing paper tape being read FIXTAB _ ‘ . . . TEXT Allows a character string to be entered Z Ignored (convenience to programmer only—— see PAL III) End-of-pass (MACRO-8 recognizes line feed followed by 33 as unconditional end-of—pass, whether in a text string, macro definition, or anywhere.) , $ Symbol Table Because of the extra features of MACRO-8, there is less room available for symbol storage than was found in PAL III. Programs that were originally coded to be assembled by PAL III may have many symbols to be assembled by MACRO—8v. If register switches 9 and 10 are set to 1 during assembly, MACRO—8’s user too symbol table will be extended. These switches cause the macro processor and double precision and floating point processor to be deleted (see the operating instructions). The high-speed reader buffer occupies 4008 locations which will be used for symbol storage if low—speed input is requested. With high-speed input, the symbol table capacity is 11510 symbols, each of which requires four core locations. Using the LT—33 as the input device, the capacity is 1791., symbols. 57 . SYMBOL TABLE MODIFICATION Because of the small amount of core remaining to be used for programmer symbols and the macro table, the following suggestions are offered allowing a particular individual to con— installation or serve symbol table space By use of the pseudo——ops EXPUNGE and FIXTAB, unnecessary ‘ instruction mnemonics can be removed from the symbol table, making more space available for programmer defined symbols and macros. This also decreases assembly time as the unused instruction symbols are not involved in the Symbol table searches. The mostoften used instruction mnemonics should be assembled first, so that they“ will be in core next to the special characters and pseudo——.ops This is desirable because the symbol search routine starts with the pseudo-Ops at the top of the table (7577) and works down. an installation which does At have Optional equipment (RFO8 disk, TCOI DECtape, high-speed reader/ punch, etc.) avail— able, the corresponding instruction sets can be removed. A sym— bolic tape beginning with EXPUNGE, containing all necessary instruction mnemonic definitions, and ending with FIXTAB and 35 could be assembled (only pass 1 is necessary) by MACRO- 8 prior to any other assemblies For not example: ' EXPUNGE AND=$®®® TAD=1®®® CLA=72®® FIXTAB _ $ The pseudo-op PAUSE could also be used in place of the dollar sign "with the above tape, as the first tape of'a multiple tape assembly. The definitions will remain in the table until a subsequent EXPUNGE or until the Assembler1s reloaded. See the list of per- manent symbols1n Appendix C INTERNAL SYMBOL > REPRESENTATION FOR MACRO—8 Each permanent user defined symbol occupies four words (loca- tions) in the symbol table storage area, as follows: 58 012 l I E WORD 1 WORD 2. WORD 3 C1 ><0'45(8)p 4432 45(8) +C—4 C5 X 45(8) +C6 C2 x 2 CHARACTERS SECOND 2 CHARACTERS FIRST THIRD 2 CHARACTERS OCTAL CODE OR ADDRESS WORD 4 C1, C2,” C6 represent the first character, second character“ sixth character, respectively. (Symbols may consist Of from one to six characters.) Bits 0 and 1 Of Word 1, and bit 0 of word 2 are a three digit code denoting the type Of Symbol. Word 4 contains the octal code Of the symbol; if a user defined symbol, where . , Word 4 contains the address of the symbol. For example, the per— manent symbol TAD is represented as follows: WORD l: 248 X 458 + 011213458 OR TA WORD 2: 048 X 458 + 00: 2249 + 40009: 42248 OR D WORD 3— 0000 ’r 4' WORD 4 r: 1000 (OCTAL CODE FOR TAD) Note that the octal code for each character is always scaled by the Assembler so that the Character is represented using six bits of a word. For example, ASCII code for T is 324, and was trimmed to 24; A is 301, trimmed to 01; etc. Digits 0 to the range 33 through 44. through 9 are scaled MACRO— 8 recognizes eight categories Of symbols: 1. Special Characters These include single non- alphanumeric characters which have special meaning to the Assembler, i.e., + =1. They are not affected by EXPUNGE or; FIXTAB and may . —- , redefined. The programmer may not define additional special characters. Special characters are recognized not be 2. by the Assembler by their three digit code of 011. Pseudo-ops These are instructions to the Assembler, which, with the exception Of FIELD, do not produce binary code. When they are recognized by the Assembler, they are executed immediately. They are not affected by EXPUNGE or ~ FIXTAB and may not be redefined. The programmer may 59 not define additional pseudo—ops. Pseudo—ops may not oc(cOmma) nor may pseudo— left of an sign or Z in their proper context appear to other I than and ops cur tothe 2 , the right of an 2 sign. Pseudo-ops are recognized by the Assembler by their three digit code of 100. Permanent Symbols These are _, , symbols which are part of the permanent as- sembler symbol table or which were used1n the program prior to the pseudo-op FIXTAB. They include such symbols as TAD, CLA, TLS, and any user-defined permanent ‘ symbols. They are designated as permanent symbols by their position in the table and are not necessarily defined. For example, the coding sequence TAD A FIXTAB will A to be entered as a permanent symbol with no definition. It must later be defined, at whichtime it will cause be the same any other permanent symbol. Permanent be redefined only if the new definition agrees symbols may as with the old. User-defined symbols These include all . non-permanent, non—pseudo—op, non— special character symbols. They are recognized by the Assembler by their place in the symbol table. Defined symbols These are permanent or user-defined symbols which either are part of the assembler symbol table or have been defined with or a comma. Permanent symbols and those defined with comma may only be redefined if the new defi— nition agrees with the old. Any user- defined symbol may be redefined with 2. They are recognized the Assemby bler by the three digit code 001. Undefined symbols These have never been defined with or a comma. They are stored in the symbol table1n the order of their occur— rence and are recognized by the Assembler by their three digit code of 010. ‘ z ~— Macro names These are the names defined with the 60 pseudo——op DEFINE the names of macros. They are stored with the user— defined and permanent symbols and are recognized by the Assembler by their three digit code of 000. Macro dummy arguments as ‘ 8. These are the arguments which follow the macro name in the macro definition. These are stored with the permanent and user-defined symbols and are recognized by the Assem— bler by their three digit code of 101. MEMORY REFERENCE INSTRUCTION RECOGNITION Memory reference instructions are recognized by their use in an expression, according to the following rule: Given an expression SYMl SYMZ, SYMl is a memory reference instruction if and only if SYMl is a permanent symbol and SYMZ is not a permanent symbol. In any other case SYMl and SYMZ will be combined with an inclusive OR. For example: Both permanent; will be combined with inclusive OR. CLA CLL A B . Both user—defined; will be combined with in- clusive OR. B CLA User-defined followed by permanent; will be combined with inclusive OR. AND A symbol followed by user—defined; permanent symbol will be treated as a memory reference instruction and user-defined symbol Permanent as referenced address. COMPATABILITY BETWEEN PAL 111 AND MACRO-8 MACRO-8 will assemble code produced for PAL HI with the following exceptions: 1. symbol table in MACRO-8 is considerably shorter than the symbol table in PAL 111 due to the added features of MACRO=8. See the section dealing with limited symbol space for suggestions on breaking large tapes into smaller The ' ones. pseudo-op. Refer to the section on internal symbol representation for a discussion MACRO—8 has no FlXMRl of MACRO-8 memory reference instruction recognition. Tags which are legal user-defined symbols in PAL III, 61 f such as PAGE, DUBL, or FLTG, maybe pseudo-ops in VMACRO— 8 While PAL III allows two levels of A: B: O, MACRO— 8 definition with— i. e., level, A: O; B: O. '— only allows one A special check wasinserted into PAL III for the conve— ,~ nience ofprogrammers who forgot the space in code in- volving «7., (suchas IMP .~——l); no such check exists in MACRO—8. Programming Hints 1. Arrange coding in order Of ascending address to avoid confusion. possible. 2. Comment profusely wherever ,3. All terms in any origin expression (* or PAGE) need to be defined prior to that expression so that all terms defined thereafter will be given the proper value on pass 1. All terms to the been right of an equal sign (2) must have previously defined sothat the term on the left is given the proper value on pass 1. Since line feed/ dollar sign is recognized as unconditional end-of—pass, it is wise to develop the habit of typing the terminating 55 at the left hand margin so that it will be caught if a TEXT or macro delimiter is missing. It is also wise to keep several short tapes with just carriage return/ line feed, dollar sign, carriage return/ line feed in the tape tray for assembling short subroutine tapes which end in PAUSE. Often these Subroutines may be debugged separ— ately prior to inclusionin a larger program. If the link generating facility is used it may be wise to suppress the LG error message on pass 2. In MACRO- 8 (version DEC-O8—CMAB-PB) location 1233 contains 4777 normally. To suppress the LG message reset loca- tion 1233 to contain 7200 (CLA) on reset to 4777 on pass 3 DEALING 1. pass 2. It should be WITH A LIMITED SYMBOL SPACE Breaking long programs into smaller ones Due to a“ shortage of symbol space it is often necessary to break a. large program into several smallerones and assemble each one separately. Then the binaries may all be 62 loaded into c0re together; Record separately the map of. where each program fits into core,- so that tWo segments are not assembled and loaded into ‘the'Same area. Make each segment as self-sufficient as possible. At the beginning of each tape, insert comments indicating where that segment expects other Segments to be and define tags for locations which must be referenced; For example, a subroutine which calculates the sine of a number starts at *400. It expects the double? precision multiplication sub’ routine to be at *2’00.‘ » The beginning of the multiply subroutinet“ /DCUELE PRECISION /CALLED WITH ADDRESS AND /IN AC /IN LOCATION / FCR MULTIPLY ADDRESS OF HIGH OF SUBROUTINE HIGH ORDER ORDER MULTIPLIER MULTIPLICAND JMS FOLLOWING EXAMPLE: / TAD MULTI / JMS MULT / MULT2 *2®@ MULT, E The beginning of the sine subroutine: /DOUBLE PRECISION SINE SUBROUTINE /EXPECTS DOUBLE PRECISION MULTIPLY /TO START LOCATION AT /CALLED WITH ADDRESS /STORES RESULT IN SUBROUTINE BOO OF ARGUMENT LOCATIONS BOO IN AC AND SOI MULTP=2®G *AGQ SINE, Z TAD ARG JMS I MULTI ARG2 MULTI: MULTP Each subroutine and assembled is self—sufiicient and may be debugged separately. It is only necessary to be sure 63 that each piece is. where it is expected to be. Comments in the source listing are a great advantage here. . Reducing the number. of symbols in the program Todecrease the number of symbols in a program, consider thefollowing: 7a. Use of instead of severaltags close together, i.e., . . _. . JMP .+3 instead of J MP TAG. There is a reasonable limit, around 108 instructions, beyond which a separate tag is more feasible. A JMP .+17 can be trouble if a line of code is removed later. , pointers and constants instead of scattering b. Lists of them through a page, for example: LIST: TAGI TAGB TAGB TAG4 rather than: START: TAGI END, TAGB Go.T TAGS These locations may then be referenced as. follows: JMS I LIST+2 instead of: JMS c. I GO Let the Link Generating Routine handle the reference: JMS TAGB *d. If. links are not wanted, make Processor to free symbol space: 64 use of the Literal JMS (TAG3 The effect of c and d is the same, with the exception of the diagnostic message LG (Link Generated). (Many programmers avoid generating links so that if is generated, it will be noted as an error.) Use of Switch Options (see MACRO—8 Switch Options) If a program does not use macros or floating point, delet— ing those processors will provide mere symbol space. If the program is very long and will only need to be assembled once, using the low speed reader instead of the high speed reader gains 64- symbols worth of space. Revising symbol table If a program does not require all of the Assembler’s permanent symbols, the extra ones may be deleted by using EXPUNGE, redefining the necessary ones, and using FIXTAB. This gains one symbol space for each mnemonic deleted. (See Appendix C for the permanent symbol one , _ table.) If the EXPUNGE definition and FIXTAB are put on a separate tape, this tape need only-be assembled on pass 1. Curtail the use of macros Wherever possible Use of a subroutine in place of a macro will decrease the ‘ of symbol space necessary since the macro is stored in its entirety in the symbol table. Punching a new assembler tape if MACRO-8 is to be used frequentlywith a revised sym— bol table, it may be wise to punch» a new tape of theAssembler with the revised table (and deleted processors, if any). amount To do so, it is necessary to obtain the source tapes for the Binary Punch Routine (DEC—OB—YXlA—PB), edit it to reset the origin to 6000, and punch a new binary tape. (The Binary Punch Routine currently resides in core in the same locations as MACRO-8’s permanent symbol table.) Load MACRQ-S, EXPUNGE, redefine, and modify as necessary. Then load the new Binary Punch Routine and cause it to dump all core from locations 0 to 7577. The resulting tape is the newAssembler. (Location 6000 is in the middle of the symbol table and. using it for the origin should allow plenty of room for the Binary Punch 65 ' Routine. If there is doubt, obtain the MACRO-8 source listing for reference.) SummaryofMACRO-S Error Diagnostics * The format of the error messages is: ERROR CODE , ADDRESS where ERROR CODE is a two character code which specifies the type of error, and ADDRESS is either the absolute Octal address where the error occurred Or the address of the error relative to the last symbolic label (if there was one) on that page. ‘ 'rAssembly can be continued after most errOrs. Onnonrecoverable errors, assembly halts, and the program must be edited to correct the error and assembly restarted. Table 1 ' " Error Code MACRO-8 Error Messages ‘ ' Meaning A ' ‘ 'BE ‘ ' TWO MACRO-8 internal tables have overlapped. This situation can usually be corrected by decreasing the number of current page literals used prior to this point on the page. It is sometimes the result of too many nested literals in an eXpression. Illegal Character IC. 1. A non-valid character was found other than in 2. a comment field or, a text field A valid character was found under the wrong conditions, i.e., 8 or 9 in octal radix The illegal character is flagged and ignored, subject .to conditions stated elsewhere in this chapter. (See floating point constants, double precision integers, etc.) ID* ‘ Illegal redefintion of a symbol An attempt was made to give a previously defined symbol anew value. The symbol was not redefined (this is similar to the duplicate tag diagnostic of PAL III). - IE - 7 ' Illegal Equals ‘ ‘An equal Sign Was used in the wrong context. For example: TAD=®33 A+B=C AZBT—Q 66 " manna—s Error Messages Table 1 (Can’t) Error Code Meaning , The be . exPression to the left of the equal sign must single symbol. a Only one level of definition is allowed in MACRO‘8 (unlike PAL 111 where two levels are allowed). symbols may be redefined only if the and old definitions match. (After EXPUNGE, Permanent new only pseudo-Ops remain.) User-defined symbols may be redefined with .—: at any time. 11 Illegal Indirect An out—of— page reference was made, and a link could not be generated because the indirect “bit was already set. For example: *2@@ TAD I A PAGE CMA A: IM CLL Illegal format in a Macro definition The eXpression after the DEFINE pseudo-instruction does not comply with the. macro definition position or structural rules. For example: a macro name LG is referenced before the macro definition. Link Generated , A warning message; a' link was generated for an out-of-page. reference at this address. For example: *BZQ . _ a LG @02Q0 @177 g @0377 _a4ee means ‘714@ a .,_ . , TAD A.» /COMMENT CLA CLL _ PAGE , A, . RAP- Missing Parameter in a macro call An argument, called for by the macro definition, is missing. For example: ‘ 67 Table 1 (Can’t) MACRO-8 Error Messages Error Code Meaning ' DEFINE ‘ MAC A B <TAD A CIA DCA B> .MAC SUM *2flfl SUM=3®® MP @GBQG 13®® ®®2®1 7$41 ®®2®2 3600 Current, non—zero Page Exceeded PE An attempt was made to override a literal with an instruction, or override an instrUction with a literal. This can be corrected by decreasing the number of the page, or decreasing the number of instructions on the page. literals on Symbol Table Exceeded symbol table and macro table overlap. Nonrecoverable error. The number of symbols or SE The macros US 7 XX must be reduced. Undefined Symbol Asymbol has been processed during pass 2 that was not defined by the end of pass 1. Reference was made to a deleted processor through of the following symbols: DUBL, FLTG, DEFINE, <, >. Non-recoverable error. The As- *one sembler must be reloaded to handle the source tape or the source tape must be edited to remove the ZE illegal reference. . Page zero exceeded. Same as PE only with reference to page 0. Pass 3 Output—Assembly Listing The output on pass 3 is a side—by—side listing of the source pro— gram and its generated octal code. Depending on the setting of bit 11, this output is to either the Teletype or the high—speed punch. The listing has the following characteristics: The first 3 characters of the line are reserved for a two char— acter error message, if necessary, and a single space. If there is no error message for that line, the spaces are left blank. If 68 there is more than one error message, the succeeding ones will be added to the first with no intervening spaces and the l remainder of the line will be shifted to thelright. ‘ through 8th characters contain the addressinto which coding on that line was assembled. If there was no. assembled coding, these characters are spaces. The address is a four digit octal address preceded by a one digit field number. The 4th The 9th and 10th characters are spaces. through 14th Characters contain the assembled code, if any. If there was none, these characters are also The 11th spaces. The 15th and 16th characters are spaces. The 17th through 72nd characters contain the source cod— in g, including comments. Any tab characters (ASCII code 211) appearing in the source code will be output as spaces to the Tab stops occur every eight spaces in the source code field. Since an LT—33 has, a 72 character line length, there is only room for a total of 56 characters in the source code and comment on one line. Any extra characters will be typed over the last of the 56 characters. For neat listings On next tab stop. the LT- 33 comments should be restricted so that the line does not exceed 56 characters. If the listing is to be generated high-speed punch for later printing on a wider device, this restriction can be modified without changing the on the Assembler. Since the LT- 33 does not handle a form feed (ASCII code 214) as a top--of form, MACRO— 8 will outputtthis character as six blank lines, a form feed, and six blank lines, so that listings may be conveniently divided into pages. A sample of this format is given under the LG error message in the previous section. Dollar sign is not printed when it is the terminating pseudo- op. (Itis printedin a text string or single character text.) MACRO-8 Operating Procedures ASSEMBLER OUTPUT MACRO-8 is two pass assembler with optional third pass which produces an octal/ symbolic assembly listing. During the first pass, MACRO—8 processes the sourcetape and places all symbol definitions and macro definitions in its symbol table and macro a 69 an table, respectively. During the second pass, MACRO-8 processes the source tape and punches the binary format tape and symbol table. This punchedtable can be read by DDT. The third pass provides a listing of the generated octal code and the original source table. language followed by a printed symbol Input Device MACRO 8 can be used with either the high-speed reader or with the low-speed (LT— 33 ) reader. The choice1s determined on first paSs by-the location of thesource tape and is remembered for the other two passes. - Output Device On pass 1 the only output is to the Teletype in the form of the ‘ error 8 messages which have been generated. On pass 2 the device on which the binary tape is to be punched is determined by bit 11 of the switch register. If bit 11 is set to 0, the LT—33 'will be used. If bit 11. is" set to 1, the high-speed punch will" be used. Thepunch should be turned'on before beginning the pass. The symbol table will be punched On the same device (also printed if the LT- 33 was specified.) Any error messages will ap— LT-33 pear on the On paSs 3, the same choices on will determine Whether bit 11 the listing Will be produced on the Teletype or the high speed punch. OPERATING INSTRUCTIONS l. Loader (see Appendix A). Leave the data field and in- struction field set to this field for the remainder of the assembly. '(On a-4K machine, load into field .0.) 2. 8 for pass I. Prepare to LINE Turn Teletype OP-9.0".” Place source in reader * Turn on reader Set switch register to 0200 Press ADDRess LOAD Set switch register for pass and desired options (see MACRO- 8 Switch Options) g. Press CLEAR and CONTinue If there are multiple tapes each ending1n PAUSE when the . computer halts, remove the tape from the reader, insert the 70 next tape, and press CONTinue. Repeat until all tapes have been read. _ Passes2and3 3. _ 7 _ . Place source tapes in reader (if not the same reader as the previous pass, instructions from under pass a. b follow 1). ‘ register for pass and desired option. MACRO—8 Switch Options) c... Turn on output device, if not already on. (:1. Press CONTinue. b. Set switch (see * ‘ ‘ If there are multiple tapes, followithe procedure for them as given ‘ under pass 1. MACRO— 8 SWITCH OPTIONS Switches should be set as noted to obtain the desired option. Switches not mentioned are ignored by the Assembler PASS SETTING Bit O Bit 1 _ 0 1‘ Pass .1 1 1 - Option . » Pass 1——to retain all - . ~ " , 0 1 Pass 2 1 0 Pass 3 previously de— fined symbols Processor DeletiOn Certain processors may be deleted to make room for more symbols: Bit Delete the floating point and double precision proces- 9 = 1 sors. This increases the size of the symbol table by 68“) symbols. Delete the macro processor and the floating point and Bit 10 = 1 double precision processors. space by 13110 symbols. This increases NOTE Switches 1 9 is and 10 are sensed whenever Once processors have MACRO-8 must be reloaded entered. pass been deleted, handle subsequent programs that use double macros, precision integers, or float— ing point numbers. Reference to a deleted to processor is a non-recoverable error. 71 symbol Output Device Bit 11 : O Teletype printer (and punch, if turned on) Bit 11 = 1 High-speed punch . Error messages Will be output to the Teletype, which must be turned on-line. ‘ Halts Locations mentioned in the following section refer to the version of MACRO-8 released in March 1971 (DEC~08-CMAB). The halt on $ is at location 4232. Next pass can be started from this halt. The halt on PAUSE is at location 1747. added to the current pass from this halt. Another tape may be The halt on end—of—-tape in high-speed reader ‘( an effective pause) is at location 340. This would occur if no 55 or PAUSE was seen. Insert separate tape of $ and press CONTinue to end pass. If the LT-33 runs out of tape Without encOuntering al$ or PAUSE, it stops reading and leaves the machine in an IOT loop. (KSF; JMP .—1;). Type 33 on keyboard to end pass. Other halts should be preceded by an error message. 72 ’ , appendx o Ioodng procedures Initializing the system Before using the computer system, it is good practice to initialize all units. To initialize the system, ensure that all switches and con' trols are as specified below. Main power cord is properly plugged in. l-—-\ pmflewewe Teletype is turned OFF. Low—speed punch is OFF. Low-speed reader is set to FREE. Computer POWER key is ON. PANEL LOCK is unlocked. Console switches are set to O. SING STEP is not set. High—speed punch is OFF. DECtape REMOTE lamps OFF. The system is now initialized and ready for your use. Loaders READ—IN MODE (RIM) LOADER When a computer in the PDP-8 series is first received, it is noth— ing more than a piece of hardware; its core memory is completely demagnetized. The computer “knows” absolutely nothing, not even how to receive input. However, the programmer can manually load data directly into core using the console switches. The RIM Loader is the very first program loaded into the com— puter, and it is loaded by the programmer using the console A—l switches. The RIM Loader instructs the computer to receive and store, in core, data pUnched on paper tape in RIM coded format (RIM Loader is used to load the BIN Loader described below) There are two RIM loader programs: one is used when the in— loWput is to be from paper tape reader and the other the -speed is used when input is to be from the high— speed paper tape reader. The locations and corresponding instructions for both loaders are listed in Table A—1. The procedure for loading (toggling) the RIM Loader into core is illustrated in Figure A—l. Table A-1. RIM Loader Programs InstrUction Location Low—Speed Reader High-Speed Reader 7756 6032 6014 7757 6031 6011 7760 5357 5357 7761 6036‘ 6016 7762 7106 7106 7763 7006 7006 7764 7510 7510 7765 5357 5374 7766 7006 7006 ‘ 7767 6031 6011 7770 5367 5367 7771 6034 6016 7772 7420‘ 7420 7773 3776 3776 7774 3376 7775 5356 3376 r 5357 _ 7776 _ 0000 0000 ' After RIM has been loaded, it is good programming practice to verify that all instructions were stored properly. This can be done by performing the steps illustrated in Figure A—2, which also shows how to correct an incorrectly stored instruction. When loaded, the RIM Loader occupies absolute locations 775 6 through 7776. A—Z ) EZI‘IVIJJNI L .LES AHVLOH 80.133138 HOUMSOJ. OW ‘ .LBS SBHOJJMS 8-9 0.1. 0381830 NOIiOflHiSNI «x-O'IBL-i 1.3 SEHOJJMS “-6 1 OJ. (BL-H830 ViVO 0131;! * EdVlOEG-X 88380 GWHOHS GVO‘T INIH OiNl 073:] (D SSBHd .LX3 GVO‘T 800V T .138 01 HS QQLL 1‘ SSBHd 800V 0V0? J38 as. = .LSHL-J NOLLOHHLSNI J 3838c] dBG 138 =88 ~ .LX3N NOIJQHHLSNI J [ Ssaad d30 71V SNOIiOflELLSNI N F wna SI emfitd 91-V - anvm 81119901 am NIH 199961 E‘V (:g quouZE A;) SET ROTARY INDICATOR SWITCH TO MD I SET SWITCHES 6*8 TO FIELD IN WHICH RIM HAS BEEN LOADED I , PRESS EXT ADDR LOAD ITSET SR=7756#;] , PRESS ADDR LOAD I [ PRESS I EXAM L J. ‘ MD= CORRECT INSTRU?CTION [ SET SR=MA—1 J ALL VINSTRUCHONS I CHEgKED PRESS ADDR LOAD GIM IS LOADED) SET SR= CORRECT INSTRUCTION [ PRESS DEP I—————————RJ Figure A-Z. Checking the RIM Loader BINARY (BIN) LOADER— The BIN Loader is a short utility program which, when in core, instructs the computer to read binary-coded data punched on paper tape and store it in core memOry. BIN is used primarily to load the programs furnished in the software package (excluding the loaders and certain subroutines) and the programmer’s binary tapes. BIN is furnished to the programmer on punched paper tape in RIM—coded format. Therefore, RIM must be in core before BIN can be loaded. Figure A—3e illustrates the steps necessary to prop- erly load BIN. And when loading, the input device (low- or highspeed reader) must be that which was selected when loading RIM. A—4 I LOAD Rm __ __ _.._. __ See Figums CZ-I.C2-2 SET ROTARY SELECTOR SWITCH TO MD SET SWITCHES 6-8 TO FIELD WHICH CONTAINS RIM I SET SWITCHES 9—11 TO FIELD IN WHICH BIN IS TO BE LOADED PRESS ADDR LOAD EXT I 'SET SR=7756 PRESS ADDR LOAD' WHICH HIGH-SPEED READER ? READER LOW-SPEED READER TURN HSR ON , PUT'enq IN TURN LOAOER PUT BIN LOADER IN LSR HSR g} PRESS CLEAR AND TTY TO LINE CONT PUT LSR TO STARTI TAPE READS IN ? PRESS HALT ——————-——1 SET SWITCHES 6-8 To FIELD BIN WAS LOADED INTO PRESS EXT ADDR LOAD SET SR=7777 PRESS ‘ ADDRLOAD PRESS EXAM ’YES ,' BIN LOAOER IS‘LQAQED Figure A-3 . Loading the BIN Loader A—S When stored in core, BIN resides on the last page of core, oc- cupying absolute locations 7625 through 7752 and 7777. BIN was purposely placed on the last page of core so that it would always be available for use—the programs in DEC’s soft— ware package do not use the last page of core (excluding the Disk Monitor). The programmer must be aware that if he writes a which uses the last page of core, BIN will be wip- program ed out when that happens, the computer. When this the programmer must load RIM and then BIN before program runs on he can load another binary tape. Binary tapes to be loaded should be started on the leader-trailer code (Code 200) otherwise zeros may be loaded into core, destroy— ing previous instructions. Figure A—4 lilustrates the procedure for loading binary tapes , into core. SET ROTARY SELECTOR SWITCH TO AC SET SWITCHES 6-8 TO FIELD IN WHICH BIN IS LOADED I SET SWITCHES 9'11 TO FIELD IN WHICH PROGRAM IS TO BE LOADED RRESS ,EXTTQDPRHEQAD SET SR To 7777‘ I ' "PRESS f .599R LOAD . O ; " HIGH-SPEED READER LOW-SPEED READER , mo w— ONE :— gfiiliiliilliflifii — WI CLEAR' PRESS AND CONT ‘ : NO_. ‘% TAPE READS IN ’? I YES TING, PRESS CONT TAPE STOPS AT BEGHMWNG OF ,EADER/TRNLER CODE ? ,1 ’ YES VOTES ‘EIOBJECT TAPE-m. ‘ Figure A4. SIS LQQQEQM M! Loading A Binary Tape mmg BEN A57 ASCII-11 Character Set Decimal Character Decimal Equivalent (A1 Format) Character 8-Bit Octal 6-Bit Octal Equivalent (A1 Format) 301 01 96 1 241 41 —1952 B 302 02 160 ” 242 ——1888 C 303 224 # 243 D 304 03 04 42 43 288 $ 244 44 —— E F 05 352 % 245 45 ——1696 & 246 247 250 47 -1568 50 -—1504 —1440 W X Y 305 306 307 310 311 312 313 314 315 316 317 320 321 322 323 324 325 326 327 330 331 Z 332 32 0 260 60 928 992 1056 1120 1184 1248 1312 1376 1440 1504 1568 1632 1696 .——992 1 261 262 263 61 62 _928 1—864 Leader/Trailer 2 63 64 ——800 Carriage RETURN -——736 —-672 SPACE RUBOUT I I K L M N O P Q R S T U V 3 4 5 264 265 06 416 07 480 10 544 11 608 12 672 13 736 14 15' 16 17 20 800 22 23 24 25 26 27 30 31 65 66 8 70 9 271 71 67 ’ ( ) at + ’ 864 21 266 267 270 6 7 1 An 6-Bit Octal A G H 2 8—Bit Octal V 1—608 -—544 ~-——480 -—416 . / g ; < Z > 17 ‘ @ [ \ ] ¢(A)’-’3 <— _ LINE FEED —-1376 253 53 —1312 254 54 55 ——1 184 256 257 272 273 274 275 276 277 300 333 334 335 336 337. 200 BELL TAB 211 FORM 214 51 B—l ~1248 56 57 72 —1056 73 —~288 74 75‘ 76 77 ——1120 —352 l ~224 —160 ~06 ~32 32 33 1760 34 1824 35 1888 36 37 2016 40 ~2016 abbreviation for American Standard Code for Information Interchange. The character in parentheses is printed on some Teletypes. —1632 ’ 52 212 215 240 377 000 207 Blank 46 1760 251 252 255 - —-1824 1952 PAL 1H, MACRO—8 following are the most commonly used elements of the PDP—8 instruction set. For that reason they are foundlin the permanent symbol table within most assemblers. These instructions are already defined within the computer. For additional information on these instructions and for a description of the symbols used when programming other, optional, I/O devices, see the Small Computer Handbook, available‘from the DEC Software DistribuThe 7 tion Center. INSTRUCTION CODES Mnemonic Code Time (lasecjl Operation Memory Reference Instructions AND 0000 TAD 1000 182 2000 DCA 3000 JMS 4000 JMP 5000 Logical AND Two’s complement add Increment and skip it zero Deposit and clear AC Jump to subroutine Jump Floating-Point Instructions FEXT 0000 Floating exit FADD 1000 Floating add FSUB 2000 Floating subtractiOn 3000 FMPY Floating multiply 4000 FDIV Floating divide FGET 50001 Floating get 6000 FPUT Floating put FNOR 7000 Floating normalize C—1 26 2.6 2.6 1.2 60 900 920 ‘ 1450 1480 ‘ - representative of the PDP-8/E. 2.6 I , 1 Times are 2.6» V r 115 125 800 Mnemonic Code Operation Sequence . Group 1 Operate Microinstructions (1 cycle-‘3) No operation NOP 7000 -——— IAC RAL 7001 Increment AC 7004 Rotate AC and link left one 4 RTL 7006 Rotate AC and link left two 4 RAR 7010 Rotate AC and link right one 4 RTR 7012 Rotate AC and link right two 4 CML 7020 CMA 7040 Complemented link Complement AC 2 CLL 7100 Clear link 1 CLA 7200 Clear AC BSW 7002 3 J _ 1 2 1 Swap Bytes in AC 4 Group 2 Operate Microinstructions (1 cycle) HLT 7402 OSR 7404 SKP 7410 SNL 7420 SZL 7430 SZA 7440 SNA SMA SPA . 3 Halts the computer Inclusive OR SR with AC 3 1 Skip unconditionally Skip on nonzero link Skip on zero link Skip on zero AC Skip on nonzero AC Skip on minus AC Skip on positive AC (zero is positive) 1 . 7450 7500 7510 1 1 1 1 1 Combined Operate Microinstructions CIA 7041 STL 7120 , Complement and increment AC Sent link to 1 GLK 7204 Get link (put link in AC, bit 11) STA 7240 Set AC to LAS 7604 Load AC with SR —— l MO Microinstructions Load MQ from AC, then clear AC 7421 MQL 7501 Inclusive OR the MO with AC MQA CAM 7621 Clear AC and MO SWP 7521 Swap AC and MO ACL 7701 Load MQ into AC Internal IOT Microinstructions ION 6001 IOF 6002 2 1 Turn interrupt processor on Disable interrupt processor cycle is equal to 1.2 microseconds. C-2 2, 3 1, 2 1, 4 2 2, 3 ‘ Mnemonic Code Operation Internal IOT Microinstructions (1 cycle) SKON 6000 SRQ 6003 GTF 6004 RTF 6005 SGT 6006 CAF 6007 Skip if interrupt ON, and turn OFF Skip on interrupt request Get interrupt flags Restore interrupt flags Skip on greater than flag Clear all flags Keyboard/ Reader (1 cycle) KSF 6031 Skip on keyboard/ reader flag KCC 6032 Clear keyboard/ reader flag and AC; KRS Read KRB 6034 6036 KCF 6030 KlE 6035 set reader run _ keyboard/ reader butter (static) Clear AC, read keyboard buffer (dynamic), clear keyboard flags Clear keyboard/ reader AC 1 l to keyboard/ reader interrupt enable FF. Teleprinter/ Punch (1 cycle) TSF 6041 Skip on teleprinter/ punch flag 6042 TCF Clear teleprinter/ punch flag 6044 Load teleprinter/ punch and print TPC 6046 Load teleprinter/ punch, print, and clear TLS teleprinter/ punch flag 6040 Set teleprinter/ punch flag TFL 6045 TSK Skip on printer or keyboard flag High Speed Reader——Type PR8/ E ( 1 cycle) 6011 6012 Skip on reader flag REC 6014 Clear flag and buffer and fetch RPE 6010 Set interrupt enable for reader and RCC 6016 Read reader buffer, clear flag and PCB 6020 Clear RSF RRB Read reader buffer and clear reader flag Character punch buffer, and fetch character interrupt enable for reader and punch C—3 Mnemonic Code Operation 1 Time (M860) High Speed Punch—~Type PP8/ E (1 cycle) PSF 6021 Skip on punch flag PCF 6022 Clear flag and buffer 6024 Load punch buffer and punch character PPC Clear flag and buffer, load buffer and PLS 6026 punch character ' C , RPE 6010 Set interrupt enable for reader and PCE 6020* Clear interrupt enable for reader and punch punch Mnemonic Code RDF 6214 Read data field RIF 6224 Read instruction field RIB 6234 Read interrupt butter RMF 6244 Restore memory field CD1 62n3 Change to data field and instruction. Operation Memory Extension Control, Type MC8/ E (1 cycle) 62N1 CDF Change to data field N 62N2 CIF Change to instruction field N field 11 C-4 ' PSEUDOEGPERATORS The following is a list of the PAL III and MACRO—8 assembler pseudo—ops. (""3 x, , l (2/ “N_-,L:.</ 1 Z I I I ”:M X ”I ' PAL III W MACRO—8 :0» V} DECIMAL DECIMAL M «ILL, OCTAL OCTAL *1» a” f» FIELD FIELD PAUSE PAUSE . M (SN 3%» KSQRERE’ I I 5*& {)3 Z Z FRI? I $ 55 EXPUNGE EXPUNGE FIXTAB F IXTAB PAGE H M’s/£53 9;T ff: M M C V m i" I: if 29, ‘v m ,z/ x I 4* W ("a ff 4-»? / , >l< 1* IXMRI DEFINE i DUBL F LTG TEXT C—S ‘ VINDEX Address arithmetic Address assignments Address field delimiter (PAL III), (PAL III), 42 MACRO—8, l6 PAL—ll, Ampersand (&) operator AND code ASCII—l character Double (MACRO-8), 38 Assembler (MACRO-8, (PAL III), 45 Editor, ‘B—l set, End End symbolic tape, 1 program Evaluation of symbolic expression 38. Exclamation point (I) operator 38 (MACRO-8), Expressions 19 III), of 27 (PAL III), of tape (PAL III), 26 12 Equal sign (PAL III), Error diagnostics (MACRO—8), '66 31 69 (PAL 61 14 29 Autoindexing 50 (MACRO-8), 57 pseudo—op (MACRO—8), 53, Dummy arguments (MACRO—8), 34 Duplicate tag (PAL III), 29 output MACRO-8, PAL—ll, 51 DUBL (PAL III), Assembly listing (MACRO-8), precision integers constants expressions operators (PAL III), precision floating point Double 22 III), Arithmetic Arithmetic ASCII precision constants 50 (MACRO’B), 17 skip instructions group (PAL Double 11 a (MACRO-8), Binary punch routine 65 MACRO—8, PAL III, 28 2, Binary tape (PAL III), BIN A-4 (binary) loader, A-5, A—7 loading, MACRO-8, PAL~III, 37 14 termination, pseudo-op MACRO-8, PAL B-l codes, set (PAL III), 2,3 Characters (MACRO—8), 37 Checksum (PAL III), 31 6 Coding practices (PAL III), tions Comments (PAL III), (PAL III), Compatibility Constants — PAL FIELD instruc~ PAL FIXMRI and table address FIXTAB (MACRO-8), 43 17. location counter 15, DECIMAL (MACRO-8), pseudo-op Delimiter for address (PAL III), (MACRO-8) Halts 53 assignment III, 27 72 (PAL III), 2 57 field (indirect address) pseudo—op MACRO-8, 42, 57 PAL III, 23 34 Illegal characters (PAL III), 35 Illegal reference (PAL III), 14 Inclusive OR (PAL III), I messages, 34 III, (PAL III), Dollar sign ($) pseudo-op, 57 MACRO—8, 53, (MACROZB), configuration Hardware 6O 16 Diagnostic PAL 58 27 51 constants, conversion accuracy, 57 III, 3, 24 Defined symbols (MACRO-8), PAL 29 52 format, FLTG pseudo—op (MACRO-8), 52, 57 Format effectors 3 (PAL III), Form feed 3 (PAL III), PAL Direct 57, 28, pseudo—op' MACRO-8, DEFINE 24 (PAL III), (PAL III), pseudo-op pseudo—op number 17 l DDT, 33 24 Floating point (PAL III), 8 3, incrementation, III, MACRO-8, PAL III, indicator (PAL III), Current 24 (PAL III), tape (PAL III), pseudo—op 46, 57 Field setting III 58 57, 27 MACRO-8, 15 6 61 MACRO-8, Current reference memory III, Extended memory Extended symbol Character Character Combining 15 EXPUNGE summary of statements 11 (end of program) Incrementing current location (PAL III), 15, 17 Indirect addressing (PAL III), 18,23 counter Indirect address linkage (MACRO—8), OR III), PAL Input device transfer micro~ 22 instructions (PAL III), C—l Instruction codes,' Instructions (PAL III), '6, l9 Input/output source “ pseudo—op (MACRO—8), 39 Pages (MACRO-8), 1 PAL III programming, Pass 1 (PAL III), 2, 31 PAGE 58 MACRO-8, PAL III, (PAL III), (MACRO—8), 70, 7 'diagnostics, Labels 5 (PAL III), Leader code (PAL III), 29, 31 62 Limited symbol space, Link generation (MACRO—8), 41 42 Literals (MACRO-8), RIM (Read—In-Mode), Loading procedures, PAL III, 32 Location counter Logical operators 3 Pass 57 40, 2, 31 2, 31 35 (PAL III), output 72 34 III),_ diagnostics, 36 — _ assembly listing, 68 (MACRO-8), 7 (binary), 3 Pass (end of tape) pseudo—op 57 MACRO-8, PAL III, 26 Period (.) character (PAL III),.17 Permanent symbols 60 (MACRO—8), Permanent symbol table (PAL III), 7 alterations, 27, 28 Permanent symbol tables, C-1 Plus (+) operator 38 MACRO-8, PAL III, 14 A—4‘ BIN (PAL diagnostics, ‘ Loaders 2 Pass 17 program Output device 49 (MACRO—8), symbol representation Integers Internal 22 39 Origin setting (MACRO—8), Origin (starting address) of 7O (MACRO—8), skip instructions group 41 PAUSE A—2 A—l, Ael 4O (MACRO-8),‘ (PAL III), 14 ' Macro (DEFINE) definition (MACRO-8), restrictions, 53 55 MACRO—8 programming, Macros, Memory, user 37 III, (PAL III), ' l PAL—III, 62 Programming hints, Program preparation (PAL III), C—5 Pseudo—operators, MACRO—8, PAL III, Punching .13 56, Pushdown 59 new assembler list tape 65 overflow (PAL III), 44 (MACRO—8), Nonprinting characters (PAL III), Normalized form (MACRO-8), 51 2 A ' Numbers MACRO-8, PAL III, V 49 3 pseudo—op MACRO-8, 57 PAL 3‘24 III, (PAL III), 3, 23 34 (PAL III), 56 Referencing a macro (MACRO-8), 19 Registers, autoindex (PAL III), RETURN key 4 (PAL III), RIM (Read—In—Mode) A—l loader, A—4 checking the loader, ‘ ROTL 1 MACRO-8, Radix control Redefinition programs, 6 Operands (PAL III), Operate microinstructions (PAL III),21 Operating instructions (MACRO—8), 70 Operating procedures 69 A—2 macro, advantages and dis— 55 advantages (MACRO-B), Semicolon (7) as statement terminator (PAL III), Single character text 4 facility ' PAL III, Operation Operators, MACRO-8, PAL 35 literals Nested CDT, 57, 29 23 (MACRO—8), OCTAL 46 techniques, 14 Multiple assignments 71 37 MACRO-8, Memory reference instructions 61 MACRO-8, PAL III, 15, 20 Microinstructions (PAL III), Minus (—) operator 38 MACRO-8, PAL (MACRO—8), Programming (MACRO—8),"53 24 (PAL III), extended deletion Processor defined III, 32 (MACRO-8), 20 (PAL III), arithmetic and logical code 47 Skip instructions (PAL III), Source program preparation ' 38 14 ' (PAL III), 5 22 Tabulation (PAL III), Tape editor, symbolic, Space operator 38 MACRO-8, PAL l4 III, Terminating 59 Special characters (MACROcS), Starting address (origin) of source Terminators program (PAL III), Statements (PAL III), Text Statement terminators 17 PAL 5 (PAL III), 4 65, 71 option (MACRO-8), 11 Symbol capacity (PAL III), 59 Symbol categories (MACRO—8), Symbol definitions, addition or Switch deletion 15 III), of l expression statements 4 III), 47 facility (MACRO—8), 48, pseudo—op (MACRO-8), 48 strings (MACRO—8), 57 Trailer code (PAL III), 31 Two-pass assembler (PAL III), 1 (PAL addresses capacity, TEXT Text 27 III), 8 (PAL III), 29 Editor (PAL III), 38 expression (MACRO—8), instructions (PAL III), IO 10 operands (PAL III), 29 tape (PAL III), 1 tape editor, 7 Symbols (PAL III), 62 Symbol space, limited, 57 Symbol table (MACRO—8), Symbolic Symbolic Symbolic Symbolic Symbolic Symbolic Symbolic (PAL an 3 57 58 modification, 65 revision, Symbol table (PAL III), Undefined address ll, 35 III), 35 60 MACRO-8, PAL III, Using Z PAL (page 7 assembler, III zero MACRO-8, PAL III, 7, (PAL Undefined symbols (MACRO-8), 6O User—defined macros (MACRO-8), 53 Userwdefined symbols reference) 57 23 33 pseudo—op HOW SOFTWARE NEWSLETTERS, OBTAIN MAILING SOFTWARE INFORMATION LIST Communications Group, Software The TO located at publishes software neWsletters for Newsletters are published monthly, and keep Maynard, in various DIGITAL products. the user informed.about cussoftware products, documenta- corporate headquarters the tomer software problems and solutions, new tion corrections, as well as programming notes There two are . . similar The Software The Digital techniques. service; of levels and Dispatch Software News Software Dispatch is part of service applies to the following The Software Maintenance software products: the Service. This PDPm9/15 RSX—llD DOS/BATCH RSTS~E DECsystem—lo Digital Software News for the PDP-ll and PDP—S/lz are available to any customer PDPe8/12 software. Software News for purchased PDP-ll or Digital A a the who has collection of existing problems and solutions for a given software A customer receives this publication system is published periodically. with his initial software kit with the delivery of his system. This A collection would be either a Summary depending formance on Software Dispatch Review the system ordered. or Software Per— mailing list of users who receive software newsletters is also mainUsers must sign—up for the news— tained by Software Communications. This can be done by either completing the form supletter they desire. plied with the Review or Summary or by writing to: A Software Communications P.O. F Box Maynard, PROBLEMS SOFTWARE Questions as 01754 Massachusetts or problems relating to DIGITAL's software should be reported follows: 'North Submitters: South American and Upon completion of Software Performance Report copy remainder send and (SPR) form remove last to: Software Communications P.O. F Box Maynard, Massachusetts 01754 acknowledgement copy will be returned along with a blank SPR form The acknowledgement will contain a DIGITAL assigned SPR upon receipt. The SPR number or the preprinted number should be referenced in number. Additional SPR forms may be obtained from any future correspondence. ‘The address. the above All International Submitters: last Upon completion of the SPR form, reserve the in the nearest DIGITAL mainder also to the available PROGRAMS AND SPR Center from our SPR copy and office. send the forms SPR re— are Centers. MANUALS Software and manuals should be ordered by title and order number. United States, send orders to the nearest distribution center. In the Digital Equipment Cerporation Digital Equipment Corporation Software Distribution Center 146 Main Street Maynard, Massachusetts 01754 Software Distribution Center 1400 Terra Bella Mountain View, California 94043 Outside of the United States, orders should be directed Digital Field Sales Office or representative. to the nearest SOCIETY USERS Society, maintains a user extechnical application information. The Library contains approximately 1,900 programs for all DIGITAL computer lines. Executive routines, editors, debuggers, special DECUS, Digital Equipment Computers change center functions, for user—written Users programs and maintenance and various games, other classes of programs are available. Program Library Catalogs DECUS of all abstracts and Forms FOCAL-8, 9, 15 . PUP-8, . PDP-7/9, are routinely updated and contain lists according to computer line: BASIC-8, PDPan RSTS-ll . PDP-ll, . PDPn6/10, and programs 10 information on acquiring and submitting programs be obtained from the DECUS office, the to DECUS Library may In addition to the DECUSCOPE ‘ ’ OF PROCEEDINGS THE DIGITAL EQUIPMENT USERS catalogs, DECUS also publishes the following: Society's technical newsletter, published bi—monthly, aimed at facilitating the interchange of technical in— formation among users of DIGITAL computers and at disCirculaseminating news items concerning the Societyo tion reached 19,000 in May, 1974. -The -Contains technical papers presented at DECUS held twice a year in the United States, once in Europe, Australia, and Canada. Symposia a year ' SOCIETY MINUTES~OF THE DECsystem-lO -A sessions report of the DECsystem—10 United States DECUS held at the two Symposia. SESSIONS COPY-N-Mail LUG/SIG “A monthly maiied communique —Mailing Group of Local User (SIG) Group among users of users. and Special providing closer Specific product or (LUG) communique, aimed communication among DECsystem-lo Interest at a application. information on the DECUS Library, publications, and other DECUS activities is available from the DECUS offices listed below: Further DECUS , Digital Equipment Corporation 146 Main Street Maynard, Massachusetts a 01754 DECUS EUROPE Digital Equipment Carp. (Europe) POO. Box 1211 Geneva 340 Switzerland 26 International 4K Assemblers 8 Pal III Macro DEC-08~LAS4A~A-D READER'S NOTE: This form is for document comments only. Problems with software should be reported on a Software Problem Report (SPR) form (see the HOW TO OBTAIN SOFTWARE Did find you COMMENTS errors INFORMATION in page). this manual? If so, Did you find this manual understandable, Please make suggestions for improvement. specify by usable, and page. well—organized? sufficient documentation on associated system programs If not, for use of the software described in this manual? what material is missing and where should it be placed? Is there required Please indicate the type of user/reader that you Assembly language DDD Name nearly represent. programmer Higher—level language programmer Occasional (experienced) User with most programmer little programming experience Student programmer Non-programmer interested in computer concepts and capabilities A . :" - Date Organization Street City State ; Zip Code or < Country If you do not require a written reply, please check here, [3 Fold Here Do Not Tear - Fold Here and Staple FIRST CLASS PERMIT NO. 33 MAYNARD, MASS. BUSINESS REPLY MAIL NO POSTAGE STAMP NECESSARY IF MAILED IN THE UNITED STATES Postage will be paid by: Software Communications P. O. Box Maynard, F Massachusetts 01754
Home
Privacy and Data
Site structure and layout ©2025 Majenko Technologies