If √ 1 . 7424 = 1 . 32 , 1 . 7424 = 1 . 32 , find the value of √ 17424 − √ 174 . 24

PATENT SPECIFICATION ( 11) 1 568 094

as ( 21) Application No 42869/76 ( 22) Filed 15 Oct 1976 ( 31) Convention Application No638381 ( 19) ( 32) Filed 8 Dec 1975 in Ot' ( 33) United States of America (US) ( 44) Complete Specification published 21 May 1980 IE T I ( 51) INT CL 3 GO 6 F 15/02 ( 52) Index at acceptance G 4 A 10 P 12 D 12 N 13 E 13 M 15 A 2 16 D 16 J 17 B 17 P IC 2 AY 2 BY 2 C 2 E 2 F 3 2 F 5 2 F 9 3 B 5 A 5 B 8 C 9 C 9 F KS ( 54) PROGRAMMABLE CALCULATOR ( 71) We, HEWLETT-PACKARD COMPANY, of 1501 Page Mill Road, Palo Alto, California 94304, United States of America, a corporation organized and existing under the laws of the State of California, United States of America, do hereby declare the invention, for which we pray that a patent may be granted to us, and the method by which it is to be performed, to be particularly described in and 5

by the following statement:-

This invention relates generally to calculators and improvements therein and more particularly to programmable calculators that may be controlled both manually from the keyboard input unit and automatically by means of a stored program that has previously been loaded into the calculator memory from the 10 keyboard input unit or an external magnetic record member.

Computational problems may be solved manually, with the aid of a calculator (a dedicated computational keyboard-driven machine that may be either programmable or nonprogrammable) or a general purpose computer Manual solution IS of computational problems is often very slow, so slow in many cases as to be an 15 impractical, expensive, and ineffective use of the human resource, particularly when there are other alternatives for solution of the computational problems.

Nonprogrammable calculators may be employed to solve many relatively simple computational problems more efficiently than they could be solved by manual methods However, the keyboard operation or language employed by these 20 calculators is typically trivial in structure, thereby requiring many keyboard operations to solve more general arithmetic problems Programmable calculators may be employed to solve many additional computational problems at rates hundreds of times faster than manual methods However, the keyboard language employed by these calculators is also typically relatively simple in structure, 25 thereby again requiring many keyboard operations to solve more general arithmetic problems.

Conventional programmable calculators have also been restricted to operation in accordance with a single fixed program language It would be advantageous to provide a programmable calculator in which the user may select at will any one of a 30 number of different calculator or computer languages.

The principal object of this invention is to provide an improved programmable calculator that has more capability and flexibility than conventional programmable calculators, that is smaller, less expensive, and more efficient in evaluating mathematical functions than are conventional computer systems, and 35 that is much easier for the unskilled user to operate than either conventional programmable calculators or computer systems.

The present invention provides an electronic calculator comprising: memory means including a first area for storing a program of one or more lines of one or more alphanumeric statements per line and a second area for storing a single line of 40 one or more alphanumeric statements; keyboard input means for entering one or more lines of one or more alphanumeric statements per line into the memory means; processing means coupled to said memory means and keyboard input means for executing lines of one or more alphanumeric statements per line: and output display means coupled to said processing means for visually displaying 45 alphanumeric information, including the results of execution of lines of alphanumeric statements, to the user; said keyboard input means including a run control key for initiating execution by said processing means of a program of one or more lines of alphanumeric statements stored in said first area of said memory means, and an execute control key for initiating execution by said processing means of a single line of one or more alphanumeric statements entered from said keyboard input means and stored in said second area of said memory means: said processing means including logic means operative for enabling entry of a line of one or more alphanumeric statements from said keyboard input means during S execution of a program stored in said first area of said memory means, said logic means further including means responsive to subsequent actuation of said execute control key, during execution of said program, for temporarily halting execution of said program for initiating execution by said processing means of said entered line of one or more alphanumeric statements stored in said second area of said memory 10 means, and for causing the results to be visually displayed on said output display means, said logic means further including means responsive to an indication by said processing means that execution of said entered line has been completed for causing said processing means to resume execution of said program.

In an electronic calculator as set forth in the last preceding paragraph, it is pre 15 ferred that said keyboard input means includes one or more keys for entering a list statement; said calculator includes printer means coupled to said processing means for printing one or more lines of alphanumeric statements; and said logic means is operative for enabling entry of the list statement from said keyboard input means 20 into said second area of said memory means during execution of a program stored in said first area of said memory means, said logic means further including means responsive to subsequent actuation of said execute control key, during execution of said program, for temporarily halting execution of said program, for initiating execution by said processing means of the list statement to cause the lines of 25 alphanumeric statements comprising said program to be printed by said printer means and for then causing said processing means to resume execution of said program.

In an electronic calculator as set forth in the last preceding paragraph but one, it is preferred that said keyboard input means includes one or more keys for 30 entering a program variable interrogation statement and said logic means is operative for enabling entry of the program variable assfgnment statement during execution of a program stored in said first area of said memory means, said logic means further including means responsive to subsequent actuation of said execute control key, during execution of said program, for temporarily halting execution of 35 said program, for initiating execution by said processing means of the program variable assignment statement to cause a designated numeric value to be associated with a selected program variable and for then causing said processing means to resume execution of said program.

In an electronic calculator as set forth in the last preceding paragraph butl two, 40 it is preferred that said keyboard input means includes one one more keys for entering a program variable interrogation state-ment; and said logic means is operative for enabling entry of the program variable interrogation statement during execution of a program stored in said first area of said memory means, said logic means further including means responsive to subsequent actuation of said execute 45 control key, during execution of said program, for temporarily halting execution of said program for initiating execution by said processing means of the program variable interrogation statement to cause the current value of a selected program variable to be visually displayed on said output display means, and for then causing said processing means to resume execution of said program S O In an electronic calculator as set forth in the last preceding paragraph but three, it is preferred that said second area of said memory means comprises buffer storage means for temporarily storing the single line of one or more alphanumeric statements entered from said keyboard input means during execution of a program stored in said first area of said memory means, said keyboard input means includes 55 a plurality of alphanumeric keys, each associated with an alphanumeric character, for entering lines of one or more alphanumeric statements: said output display means is operative for visually displaying said single line of one or more alphanumeric statements as it is being entered from said keyboard input means during execution of a program stored in said first area of said memory means: and 60 said logic means is responsive to actuation of any one of said alphanumeric keys during execution by said processing means of a program stored in said first area of said memory means for momentarily interrupting execution of said program by said processing means to permit entry of the associated alphanumeric character into said buffer storage means 65 1,568,094 In an electronic calculator as set forth in the last preceding paragraph, it is preferred that said logic means is responsive to actuation of said execute control key, during execution by said processing means of the program stored in said first area of said memory means, for momentarily interrupting execution of said program by said processing means and for initiating execution by said processing 5 means of the single line of one or more alphanumeric statements then stored in said buffer storage means.

In an electronic calculator as set forth in the last preceding paragraph but five, it is preferred that said logic means is responsive to execution by said processing to means of a keyboard disable statement stored in said second area of said memory 10 means or stored as part of a program in said first area of said memory means for subsequently inhibiting the entry of alphanumeric statements from said keyboard input means during the time that a program stored in said first area of said memory means is being executed.

1 In an electronic calculator as set forth in the last preceding paragraph, it is 15 preferred that said logic means is responsive to execution by said processing means of a keyboard enable statement, stored as part of a program in said first area of said memory means, following execution of a keyboard disable statement for subsequently enabling the entry of alphanumeric statements from said keyboard input means during the time that a program stored in said first area of said memory 20 means is being executed.

The illustrated preferred embodiment of this invention employs a keyboard input unit, a magnetic tape cassette reading and recording unit a 32character light-emitting diode (LED) display, a 16-character thermal printer unit, a memory unit, and a central processing unit (CPU) to provide an adaptable programmable 25 calculator having manual operating, automatic operating, program entering, magnetic tape reading, and magnetic tape recording modes.

The keyboard input unit includes a group of numeric data keys for entering data into the calculator, a group of algebraic operator keys for use in entering algebraic statements into the calculator, a second set of numeric keys, a complete 30 set of alphabetic keys and a group of special character keys all arranged in a configuration slightly modified from that of a typewriter keyboard a group of program editing and display control keys useful in editing displayed lines of alphanumeric information, a group of system command keys for listing programs of alphanumeric statements stored in the calculator memory, for controlling the 35 operation of the magnetic tape cassette reading and recording unit, for controlling the calculator memory, and for otherwise controlling operation of the calculator, and a group of user-definable keys Many of these groups of keys are useful in both the manual and automatic operating modes of the calculator.

The magnetic tape cassette reading and recording unit includes a reading and 40 recording head, a drive mechanism for driving a magnetic tape past the reading and recording head, and reading and recording drive circuits coupled to the reading and recording head for bidirectionally transferring information between the magnetic tape and the calculator as determined by alphanumeric statements executed from the keyboard or as part of a program stored in the calculator 45 memory.

The memory unit includes a modular random-access read-write memory having a dedicated system area and a separate user area for storing alphanumeric program statements and/or data The user portion of the read-write memory may be expanded without increasing the overall dimensions of the calculator by the 50 addition of a plug-in read-write memory module Additional read-write memorv made available to the user is automatically accommodated by the calculator, and the user is automatically informed of the number of available program storage locations and when the storage capacity of the read-write memory has been exceeded 55 The memory unit also includes a modular read-only memory in which routines and subroutines of assembly language instructions for performing the various functions of the calculator are stored The read-only memory comprises a plug-in mainframe language read-only memory for defining the language of the calculator and a group of optional plug-in function read-only memories that may be 60 selectively added by the user to increase the functional capability of the calculator within the framework of the language defined by the mainframe language ROM.

Receptacles are provided in the front base of the calculator housing to accommodate up to four plug-in function read-only memories A receptacle is likewise provided on the right side panel of the calculator housing to accommodate the 65 I 1,568,094 4 1,568,094 4 single mainframe language ROM By plugging an appropriate different mainframe language ROM into the receptacle provided therefore, the operating language of the calculator can be changed from the standard algebraic language described hereinafter to either BASIC, FORTRAN, ALGOL or APL computer language, for example Different mainframe language plug-in read-only memories, as well as any 5 plug-in function read-only memories added by the user, are automatically accommodated bv the calculator.

Exemplary of the plug-in function read-only memories that the user may add to increase the functional capabilities of the calculator are a plotter ROM, a string variables ROM, a general input/output ROM, a matrix ROM, an advanced 10 programming ROM, an extended input/output ROM, and a disc memory ROM.

The LED display unit is hardware-refreshed and features 32-character 5 x 7 dot matrix alphanumeric capability Hardware refreshing of the display allows the user to use the display in connection with keyboard calculations at the same time the microprocessor is executing a program stored in the calculator memory 15 The central processing unit (CPU) may comprise, for example, an LSI MOS hybrid microprocessor that includes a binary processor chip, an input/output (I/O) chip, and an extended match chip together with necessary buffering circuitry This processor utilizes 16-bit parallel bus architecture which, at various points in time, handles address, instruction or data information Also included are two 16bit 20 general purpose accumulators, memory stack instruction capability, twolevel vectored interrupt capability, a single direct memory access channel, and math instructions for handling binary-coded-decimal floating point numbers.

In the run mode of operation, the calculator is controlled by an internal stored format generated by the calculator in response to actuation by the user of selected 25 keys of the keyboard input unit Each internal stored format is employed as a pointer to the address of the routine stored in the calculator read-only memory that is required for execution of the selected keyboard instruction.

In the program mode of operation, the internal stored format generated by the calculator during entry of a program is stored in the program storage area of the 30 user read-write memory This internal stored format, compiled from lines of alphanumeric statements entered into the calculator by the user, constitutes, a program that may be automatically executed by the calculator upon request by the user During program entry, the output printer may be commanded, by means of a keyboard switch, to provide a printed listing of the keyboard statements entered by 35 the user together with the corresponding program line at which the associated internal stored format is stored Since several key actuations may result in generation by the calculator of a single compiled instruction code and since the calculator executes only these internal instruction codes, a complex program can be stored and executed by the calculator very efficiently and in a short period of 40 time.

There now follows a detailed description which is to be read with reference to the accompanying drawings of an electronic calculator according to the present invention, it is to be clearly understood that this calculator has been selected for description to illustrate the invention by way of example and not by way of 45 limitation.

In the accompanying drawings:Figure 1 is a front perspective view of a programmable calculator according to the preferred embodiment of this invention.

Figure 2 is a rear perspective view of the programmable calculator of Figure 1 50 Figure 3 is a plan view of the keyboard input unit employed in the programmable calculator of Figure 1.

Figure 4 is a simplified block diagram of the hardware associated with the calculator of Figure 1.

Figure 5 is a simplified block diagram of the firmware associated with the 55 calculator of Figure 1.

Figure 6 is a memory map showing the format of the various read-write and read-only memories within the calculator memory section of Figure 4.

Figure 7 is a memory map showing the format of each of the twelve individual read-only memory chips within the mainframe language ROM of Figure 4 60 Figure 8 is a memory map of the basic and optional read-write memories of Figures 4 and 6.

Figure 9 is a detailed memory map of a portion of the read-write memory of Figure 8 that is reserved for the special function keys.

Figure 10 is a detailed memory map of the portion of the read-write memory of 65 Figure 8 that is employed as a user program area.

Figure 11 is a detailed memory map of the portion of the read-write memory of Figure 8 that is employed as a statement parameter stack.

Figure 12 is a detailed memory map of the portion of the read-write memory of Figure 8 that is employed as a subroutine stack 5 Figure 13 is a detailed memory map of the portion of the read-write memory of Figure 8 that is employed as a for/next stack.

Figures 14 A-B are a detailed memory map of the portion of the read-write memory of Figure 8 that is employed as a value table.

Figure 15 is a detailed memory map of the base page portions of the language 10 read-only memory of Figure 7 and the read-write memory of Figure 8.

Figure 16 is a detailed block diagram of the process of Figure 4.

Figure 17 is a detailed schematic diagram of the clock generator of Figure 16.

Figure 18 is a detailed schematic diagram of the preset circuit of Figure 16.

Figure 19 is a detailed block diagram of the microprocessor of Figure 16 15 Figure 20 is a detailed logic diagram of one of the Bl Bs of Figures 16 and 19.

Figure 21 is a diagram illustrating the memory addressing convention employed by the BPC of Figure 19.

Figure 22 is a diagram illustrating current page absolute addressing employed by the BPC of Figure 19 20 Figure 23 is a diagram illustrating relative addressing employed by the BPC of Figure 19.

Figures 24 A-G are a tabular illustration of the instruction set and corresponding bit patterns associated with the BPC of Figure 19.

Figures 25 A-C are a detailed block diagram of the BPC of Figure 19 25 Figure 26 is a detailed block diagram of the connection between the IDA bus of Figure 19 and the 1 DB bus of Figures 25 A-B.

Figure 27 is a detailed schematic diagram illustrating how the DMP ST microinstruction is placed on the m Wbus of Figures 25 A-B and illustrating the details of a pre-charger and a 01 enhancer associated with the IDB bus 30 Figure 28 is a detailed schematic diagram of the D register of Figures 25 A-B.

Figure 29 is a detailed block diagram of the I register of Figures 25 A-B.

Figure 30 is a detailed schematic diagram of the upper twelve bits of the I register of Figure 29.

Figure 31 is a detailed schematic diagram of the CTQ generator of Figure 29 35 Figure 32 is a detailed schematic diagram of the lower four bits of the I register of Figure 29.

Figure 33 is a detailed block diagram of the instruction decode block of Figures 25 A-B.

Figures 34 A-D are a table of the 29 instruction categories decoded by the 40 instruction category identifier of Figure 33.

Figures 35 A-E are a tabular illustration of the relationship between the 29 instruction categories of Figures 34 A-D and the instruction bit patterns of Figures 24 A-G.

Figure 36 is a tabular illustration of the details of generation of the instruction 45 group qualifiers appearing at the output of the instruction group decoder of Figure 33 from the outputs of the instruction category identifier of Figure 33.

Figure 37 is a detailed schematic diagram of the asnychronous instruction generator of Figure 33.

so Figure 38 is a detailed block diagram of the control ROM included within the 50 BPC of Figures 25 A-B.

Figure 39 is a detailed schematic diagram of the 4-bit state counter and drivers of Figure 38.

Figure 40 is a diagram illustrating the natural state sequence of the state counter of Figure 38 55 Figure 41 is a detailed schematic diagram of the microinstruction decoding circuitry of Figure 38.

Figure 42 is a detailed schematic diagram of the non-sequential statecount generator of figure 38.

Figure 43 is a diagram illustrating the logical properties of the nonsequential 60 state-count generator of Figure 38.

Figure 44 is a detailed schematic diagram of the next state-count encoder of Figure 42.

Figure 45 A is a detailed block diagram of the R register of Figure 25 AB.

Figure 45 B is a detailed schematic diagram showing the origin of various 65 I 1,568,094 6 1,568,094 6 signals employed by the R register of Figure 45 A.

Figure 45 C is a detailed schematic diagram of one of the bits of the R register of Figure 45 A.

Figure 46 A is a detailed block diagram of the A and B registers of Figures 25 A-B 5 Figure 46 B is a detailed block diagram of the ZAB bus control of Figures A-B 3.

Figure 47 A is a detailed schematic diagram of one of the bits of each of the A and B registers of Figure 46 A.

Figure 47 B is a schematic diagram illustrating the logic circuitry for setting, 10 dumping and refreshing the A and B registers.

Figure 48 is a detailed schematic diagram of the ZAB bus and the ZAB bus control block of Figures 25 A-B.

Figure 49 is a detailed block diagram of the S register and the S register shift control block of Figures 25 A-B 15 Figure 50 is a detailed schematic diagram of the S register of Figure 49.

Figure 51 is a detailed schematic diagram of the S register shift control block of Figure 49.

Figure 52 is a detailed schematic diagram of the ALU of Figures 25 A-B.

Figure 53 is a detailed block diagram of the adder and complementer of Figure 20 52.

Figure 54 is a detailed schematic diagram of the complementer of Figure 53 together with its associated circuitry.

Figure 55 is a diagram illustrating the rules for generating sum and carry bits during addition operations performed by the ALU of Figure 52 25 Figure 56 is a detailed schematic diagram of a portion of the circuitry within the adder of Figure 53.

Figure 57 is a detailed schematic diagram of the ALU control block of Figure 52.

Figure 58 is a detailed schematic diagram of the output selector and LSB/MSB 30 trap blocks of Figure 52.

Figure 59 is a detailed block diagram of the extend and overflow registers of Figures 25 A-B connected in a non-ERA mode.

Figure 60 is a detailed block diagram of the extend and overflow registers of Figures 25 A-B connected in an ERA mode 35 Figure 61 is a detailed schematic diagram of the EX/OV control block Figure 59.

Figure 62 is a detailed schematic diagram of the extend, overflow, set EX, set OV, and EX/OV selector #1 blocks of Figure 59.

Figure 63 is a detailed schematic diagram of the EX, OV, and EX/OV selector 40 #2 blocks of Figure 60.

Figure 64 is a detailed schematic diagram of the flag multiplexer of Figures A-B.

Figure 65 is a detailed schematic diagram of the skip matrix of Figures 25 A-B 45 Figure 66 is a detailed schematic diagram of the P register of Figures 25 A-B.

Figure 67 is a detailed schematic diagram of the T register of Figures 25 A-B.

Figure 68 is a detailed block diagram of a portion of the overall block diagram of Figures 25 A-B that comprises a program adder section.

Figure 69 is a diagram illustrating how the program adder section of Figure 68 50 generates a 15-bit base page address from the 10-bit field of a memory reference instruction.

Figure 70 is a diagram illustrating how the program adder section of Figure 68 generates a 15-bit relative current page address from the 10-bit field of a memory reference instruction 55 Figure 71 is a diagram illustrating how the program adder section of Figure 68 generates a 15-bit absolute current page address from the 10-bit field of a memory reference instruction.

Figure 72 is a diagram illustrating how the program adder section of Figure 68 generates a 15-bit memory address from the 6-bit field of a skip instruction 60

Figure 73 is a diagram illustrating the increment P mode of operation of the program adder section of Figure 68.

Figure 74 is a detailed schematic diagram of the P-adder input (PAI) of Figure 68.

Figure 75 is a detailed block diagram of the P-adder of Figure 68 65 7 1,568,094 7 Figure 76 is a detailed schematic diagram of the P-adder control and the Padder output selector blocks of Figure 68.

Figure 77 is a detailed schematic diagram of the addressing mode selector of Figure 68 and the service logic of Figure 75.

Figure 78 is a detailed schematic diagram of the P-adder of Figure 75 5 Figure 79 is a detailed block diagram of the BPC register detection and address latches block and the indirect circuit of Figures 25 A-B.

Figure 80 is a detailed schematic diagram of a portion of the circuitry of Figure 79.

to Figure 81 is a detailed schematic diagram of the B PC-register address detector 10 of Figure 79.

Figure 82 is a detailed schematic diagram of the Bl PC-register LSB address latches of Figure 79.

Figures 83 A-B are a detailed block diagram of the M-section of Figures 25 A-B 15 Figure 84 is a detailed schematic diagram of a portion of the circuitry of Figure 83 A.

Figure 85 is a detailed schematic diagram of a portion of the circuitry of Figure 83 A.

Figure 86 is a flow chart illustrating the logic flow of the circuitry of Figures 84 20 and 85.

Figure 87 is a detailed schematic diagram of a portion of the circuitry of Figure 83 B. Figure 88 is a detailed schematic diagram of a portion of the circuitry of Figure 25 83 B 2 Figure 89 is a detailed schematic diagram of a portion of the M-section of Figures 25 A-B.

Figure 90 is a detailed schematic diagram of a portion of the circuitry of Figure 83 A.

Figures 91 A-E are illustrations of the conventions used in the BPC ASM 30 chart of Figures 92-103.

Figure 92 is a diagram showing the overall relationship of the flow chart segments of Figures 93-103.

Figure 93 is a flow chart segment of the instruction fetch and fanout activity of the BPC of Figure 19 35Figure 94 is a flow chart segment of the load, add, and, or, and compare machine instructions executed by the BPC of Figure 19.

Figure 95 is a flow chart segment of the STA and STB machine instruction executed by the BPC of Figure 19.

Figure 96 is a flow chart segment of the ISZ and DSZ machine instructions 40 executed by the BPC of Figure 19.

Figure 97 is a flow chart segment of the JMP and JSM machine instructions executed by the BPC of Figure 19.

Figure 98 is a flow chart segment of the EXE machine instruction executed by the BPC of Figure 19 45 Figure 99 is a flow chart segment of the RET machine instruction executed by the BPC of Figure 19.

Figure 100 is a flow chart segment of the alter-skip group of machine instructions executed by the BPC of Figure 19.

Figure 101 is a flow chart segment of the shift-rotate group of machine 50 instructions executed by the BPC of Figure 19.

Figure 102 is a flow chart segment of the complement group of machine instructions executed by the BPC of Figure 19.

Figure 103 is a flow chart segment illustrating the response of the BPC of Figure 19 to a request for execution of a non-BPC machine instruction 55 Figure 104 is a flow chart of memory cycle operation initiated by the Msection of Figures 25 A-B.

Figure 105 is a tabular illustration of the addressing capability embodied in the flow chart of Figure 104.

Figure 106 is an illustration of the conventions used in the wave-form diagrams 60 of Figures 107 A-119 B. Figures 107 A-C are a waveform diagram illustrating a read memory cycle in which the source address is a BPC register.

Figures 108 A-B are a waveform diagram illustrating two consecutive read 8 1,568,094 8 memory cycles originating with the BPC in which the source addresses are in the external memory.

Figure 109 is a waveform diagram illustrating a generalized BPCoriginated read memory cycle.

Figures 1 IOA-D are a waveform diagram illustrating a write memory cycle in 5 which the destination address is a BPC register.

Figures 11 IA-C are a waveform diagram illustrating two consecutive write memory cycles originating with the BPC in which the destination addresses are in the external memory.

Figure 112 is a waveform diagram illustrating a generalized BPCoriginated 10 write memory cycle not involving handshake.

Figure 113 is a waveform diagram illustrating a generalized 5-state BPCoriginated write memory cycle with handshake.

Figure 114 is a waveform diagram illustrating a generalized 6-state BPCoriginated write memory cycle with handshake 15 Figures 115 A-C are a waveform diagram illustrating the initial start up and first instruction fetch of the BPC.

Figure 116 is a waveform diagram illustrating the capture of external flags during a BPC instruction fetch.

Figures 11 7 A-B are a waveform diagram illustrating an interrupt of the BPC 20 during an instruction fetch.

Figure 118 is a flow chart illustrating the logical relationship between a bus request and a bus grant Figures 119 A-B are a waveform diagram illustrating the timing relationship between a bus request and a bus grant 25 Figures 120 A-E are a tabular representation of the contents of the readonly memory portion of the BPC of Figures 19 and 25 A-B.

Figure 121 is a waveform diagram illustrating a write I/O bus cycle.

Figure 122 is a waveform diagram illustrating a read I/O bus cycle.

Figure 123 is a diagram illustrating the indirect addressing sequence 30 implemented by the BPC and IOC of Figure 19 during an interrupt.

Figure 124 is a pictorial representation of the use of the extended bus grant capability of the microprocessor of Figure 19.

Figure 125 A-C are a tabular illustration of the instruction set and corresponding bit patterns associated with the l OC of Figure 19 35 Figures 126 A-C are a detailed block diagram of the l OC of Figure 19.

Figure 127 is a diagram illustrating the format in which 12-digit floating point binary-coded-decimal numbers are encoded for use by the EMC of Figure 19.

Figures 128 A-C are a tabular illustration of the instruction set and corresponding bit patterns associated with the EMC of Figure 19 40 Figures 129 A-C are a detailed block diagram of the EMC of Figure 19.

Figure 130 is a detailed schematic diagram of the bus control block of Figure 16.

Figure 131 is a detailed schematic diagram of the memory timing control block of Figure 16 45 Figure 132 is a detailed block diagram of the mainframe language ROM, ROM interface, and plug-in ROM of Figure 4.

Figure 133 is a detailed schematic diagram of one of the individual ROM chips employed in the mainframe language ROM, ROM interface, and plug-in ROM of Figures 4 and 132 50 Figure 134 is a detailed schematic diagram of an address section of the basic and optional read-write memories of Figure 4.

Figure 135 is a detailed schematic diagram of a memory control section of the basic and optional read-write memories of Figure 4.

Figure 136 is a waveform diagram illustrating the timing relationship between 55 various signals involved in the read-write memory control section circuitry of Figure 135.

Figure 137 is a detailed schematic diagram of a read-write memory devices section of the basic and optional read-write memories of Figure 4.

Figure 138 is a detailed schematic diagram of an I/O interface section of the 60 KDP control block of Figure 4.

Figure 139 is a detailed schematic diagram of a keyboard scan circuit section of the KDP control block of Figure 4.

Figure 140 is a detailed schematic diagram of a timing generator section of the KDP control block of Figure 4 65 9 1,568,094 9 Figure 141 is a waveform diagram illustrating the timing relationship between various signals involved in the timing generator section of Figure 140.

Figure 142 is a detailed schematic diagram of a memory section of the KDP control block of Figure 4.

Figure 143 is a detailed schematic diagram of a display control section of the 5 KDP control block of Figure 4.

Figure 144 is a detailed block diagram of the display of Figure 4.

Figure 145 is a waveform diagram illustrating the timing relationship between various signals involved in the display control section of Figure 143.

Figures 146 A-B are a detailed schematic diagram of a printer control section 10 of the KDP control block of Figure 4.

Figure 147 is a detailed block diagram of the printer of Figure 4.

Figure 148 A-B are a waveform diagram illustrating the timing relationship between various signals involved in the printer control section of Figures 146 A-B.

Figure 149 A-C are a detailed schematic diagram of an I/O interface section 15 of the cassette control block of Figure 4.

Figure 150 is a detailed schematic diagram of a tape hole detection circuit section of the magnetic tape cassette unit of Figure 4.

Figures 151 A-C are a detailed schematic diagram of a servo section of the cassette control block of Figure 4 20 Figure 152 is a detailed schematic diagram of a write electronics section of the cassette control block of Figure 4.

Figures 153 A-B are a detailed schematic diagram of a read electronics section of the cassette control block of Figure 4.

Figures 154 A-C are a detailed schematic diagram of the power module and 25 power supply blocks of Figure 4.

Figure 155 is a flow chart of a reset subroutine stored in the mainframe language ROM of Figures 4 and 7.

Figures 156 A-B are a flow chart of a list subroutine stored in the mainframe language ROM of Figures 4 and 7 30 Figure 157 is a flow chart of a flashing cursor subroutine stored in the mainframe language ROM of Figures 4 and 7.

Figures 158 A-B are a flow chart illustrating a double buffering feature of the calculator of Figure 1.

Figures 159 A-L are a flow chart of line editing subroutines stored in the 35 mainframe language ROM of Figures 4 and 7.

Figures 160 A-D are a flow chart of array allocation subroutines stored in the mainframe language ROM of Figures 4 and 7.

Figure 161 is a flow chart of two rounding subroutines stored in the mainframe language ROM of Figures 4 and 7 40 Figure 162 is a flow chart of a quote recognition subroutine stored in the mainframe language ROM of Figures 4 and 7.

Figures 163 A-F are a flow chart of enter statement subroutines stored in the mainframe language ROM of Figures 4 and 7.

Figure 164 is a flow chart of a read binary subroutine stored in the calculator 45 read-only memory.

Figure 165 is a flow chart of a prescale subroutine stored in the mainframe language ROM of Figures 4 and 7.

Figure 166 is a flow chart of a GTO/GSB destination adjustment subroutine so stored in the mainframe language ROM of Figures 4 and 7 50 Figures 167 A-B are a flow chart of live keyboard key processing subroutines stored in the mainframe language ROM of Figures 4 and 7.

Figures 168 A-B are a flow chart of live keyboard execution routines stored in the mainframe language ROM of Figures 4 and 7.

Figures 169 A-B are a flow chart of live keyboard interpreter routines stored 55 in the mainframe language ROM of Figures 4 and 7.

Figures 170 A-D illustrate the information structure of a magnetic tape employed in the magnetic tape cassette reading and recording unit of the calculator.

Figures 171 A-B are a flow chart of a magnetic tape recording routine and 60 subroutines stored in the mainframe language ROM of Figures 4 and 7.

Figures 172 A-B are a flow chart of a magnetic tape reading routine and subroutines stored in the mainframe language ROM of Figures 4 and 7.

Figure 173 is a diagram illustrating line bridging performed by the routine of Figures 172 A-B 65 Figure 174 is a flow chart of a load memory subroutine stored in the mainframe language ROM of Figures 4 and 7.

Figure 175 is a flow chart of a record memory subroutine stored in the mainframe language ROM of Figures 4 and 7.

Figure 176 is a flow chart of an HPIB transparency routine and subroutine 5 stored in the calculator read-only memory.

Figures 177 A-B are a flow chart of a reverse compiler routine stored in the mainframe language ROM of Figures 4 and 7.

Figures 178 A-B are a flow chart of a number builder routine stored in the mainframe language ROM of Figures 4 and 7 10 Figures 179 A-B are a flow chart of a compiler-scanner routine stored in the mainframe language ROM of Figures 4 and 7.

Figures 180 A-C are a flow chart of GOTO/GOSUB processing subroutines stored in the mainframe language ROM of Figures 4 and 7.

Figures 181 A-D are a flow chart of end-of-line execution routines stored in 15 the mainframe language ROM of Figures 4 and 7.

Figures 182 A-B are a flow chart of a compiler-table search routine stored in the mainframe language ROM of Figures 4 and 7.

GENERAL DESCRIPTION

Referring to Figure 1, there is shown a programmable calculator including 20 both a keyboard 320 for entering information into the calculator and for controlling the operation of the calculator and a magnetic tape cassette reading and recording unit 360 for recording information stored within the calculator onto one or more external tape cartridges 12 and for loading information stored on such tape cartridges back into the calculator The calculator also includes a 32character 25 x 7 dot matrix light-emitting diode (LED) display 330 for displaying alphanumeric statements entered into the calculator, results of statement execution, error conditions encountered during operation of the calculator, and messages and data prompts generated during program execution The calculator further includes a 16column alphanumeric thermal printer 340 for printing computation results, 30 program listings, and messages generated by the calculator or the user One or more plug-in read-only memories 230 for increasing the functional capability of the calculator may be plugged into a group of four ROM receptacles 14 provided in the front base of the calculator A plug-in mainframe language ROM 210 that defines the operating language of the calculator resides in a slot provided on the right base 35 of the calculator By replacing the mainframe language ROM, the operating language of the calculator may be changed, for example, to either BASIC, FORTRAN, ALGOL or APL computer language.

As shown in Figure 2, the rear panel of the calculator includes three input/output (I/O) receptacles 30 for accepting I/O interface modules 32 These I/O 40 interface modules serve to couple the calculator to various selected peripheral I/O units such as X-Y plotters, printers, typewriters, photoreaders, paper tape punches, digitizers, BCD-compatible data gathering instruments such as digital voltmeters, frequency synthesizers, and network analyzers, and a universal interface bus for interfacing to most bus-compatible instrumentation 45 The overall operation of the calculator hardware may be understood with reference to the block diagram of Figure 4 A central processing unit (CPU) 100 handles all data processing performed by the calculator and is arranged to cooperate with a memory section 200 and an I/O section 300 Memory section 200 comprises the mainframe language ROM 210, a basic read-write memory 220, the 50 optional plug-in read-only memory modules 230, and an optional read-write memory 240 I/0 section 300 includes a keyboard/display/printer (KDP) control circuit 310, the keyboard input unit 320, the display 330, the thermal printer 340, the magnetic tape cassette reading and recording unit 360, a magnetic tape control circuit 350, and an I/O interface circuit 370 A power module 410 includes a line transformer, a 55 power switch 16 located on the right panel of the calculator, a group of line voltage selection switches, and a group of fuses The fuses and line voltage selection switches are located within a printer paper supply compartment that is accessible through a hinged cover 18 on the top panel of the calculator.

CENTRAL PROCESSING UNIT 60 Referring now to Figure 16, there is shown a more detailed block diagram of the central processing unit 100 of Figure 4 The heart of the CPU 100 is a microprocessor 101 Microprocessor 101 is a hybrid combination of three NMOS I 1,568,094 integrated circuits and four schottky TTL bidirectional data buffers.

Microprocessor 101 requires two-phase clocking that is generated by a clock generator circuit 102 A preset circuit 103 initializes the microprocessor 101 by means of a signal POP when the power is not valid, as indicated by a line PVL, or when a RESET key on keyboard input unit 320 is actuated, as indicated by a 5 RESET line A bus control circuit 104 determines the direction of data flow on the memory bus and further determines which memory section is allowed to place data on the memory bus A memory timing and control circuit 105 provides the proper timing signals for interfacing the microprocessor 101 to the various memory sections 10 CLOCK GENERATOR Operation of the clock generator circuit 102 of Figure 16 may be understood with reference to the detailed schematic diagram of-Figure 17 A dual voltage controlled multivibrator U 8 may comprise, for example, a Motorola MC 4024 package (MOTOROLA is a registered trade mark) Section U 8 A of this package 15 and its associated components are employed to generate a nominal frequency of 11.6 megahertz Section U 8 A is biased at a nominal voltage of 4 0 volts via resistor R 23 from a power supply and a divider network comprising diode CRI and resistors R 20 and R 21 Section U 8 B, similarly biased, generates a signal having a nominal frequency of 10 kilohertz that is integrated by resistor R 16 and capacitor 20 C 15 to produce a triangular waveform The triangular waveform is then used to modulate the nominal 10-kilohertz frequency, thus spreading the energy associated with the basic frequency over a frequency spectrum of 11 2 megahertz to 12 megahertz and reducing both the conducted and radiated energy to an acceptable limit at any given frequency The resulting frequency is divided by a flipflop U 7 to 25 produce the clock frequency used in the calculator Devices U 4, US, and U 6 provide the two non-overlapping clock signals required by the microprocessor 101.

Device U 4, which may comprise, for example, a Motorola MMHOO 26, converts the TTL signal levels to MOS levels, as required by microprocessor 101 A pair of inverters U 6 A and U 6 B feed back the clock signals to USB and USA to inhibit each 30 clock signal from proceeding to the high logic state until the other clock signal has reached the low logic state Schottky TTL devices are utilized for the gates of devices US and U 6 to minimize the amount of time each clock signal resides in the low logic state while insuring that the two clock signals will not overlap The feedback signals of both inverters U 6 A and U 6 B are also distributed to various 35 circuits within the calculator requiring synchronization with the microprocessor.

Exemplary of these circuits are the memory timing control circuit 105, the basic and optional read-write memories 220 and 240, a monitor interface circuit, and the preset circuit 103 An output of clock generator 102 is also provided for the KDP control circuit 310 of Figure 4 for display and printer timing purposes 40 PRESET CIRCUIT Operation of the preset circuit 103 of Figure 16 may be understood with reference to the detailed schematic diagram of Figure 18 The output of a flip-flop U 7 is a power-on pulse POP that is employed to initialize microprocessor 101 Flipflop U 7 synchronizes a power valid line PVL and a reset key line RESET for the 45 microprocessor 101 The PVL line indicates when the power supply voltages are valid Since the signal on the PVL line transitions slowly, a pair of resistors R 13 and R 14 are employed to provide sufficient hysteresis to protect against false transitions Preset circuit 103 also generates an initialization signal INIT that is Q coupled via the I/O bus of Figure 16 to the various I/O control circuits 310, 350, and 50 370 of Figure 4 to initialize l/O section 300 simultaneously with initialization of microprocessor 101.

MICROPROCESSOR Operation of the microprocessor 101 of Figure 16 may be understood with reference to the detailed block and schematic diagrams of Figures 19-129 C.

Microprocessor 101 is employed to fetch and execute programmed machine 55 language instructions stored in the memory and to provide a means of communication with various peripheral I/O units Microprocessor 101 is a hybrid assembly whose active components are four 8-bit bidirectional interface buffers (BIB), a binary processor chip (BPC), an input/output controller (IOC), and an extended match chip (EMC), as shown in the detailed block diagram of Figure 19 60 The BPC, IOC, and EMC are each NMOS LSI integrated circuits, while each BIB comprises bipolar devices exclusively.

1 1 1.568,094 1 1 12 1,568,094 12 Referring now to Figure 20, there is shown a detailed diagram of the internal logic of each 8-bit BIB Each bit is buffered in both directions by tristate buffers controlled by non-overlapping buffer enable signals A pair of 8-bit BI Bs forms a 16-bit buffer between the three NMOS chips of the microprocessor and the calculator memory Those BI Bs are hereinafter referred to as the memory Bl Bs 5 The remaining pair of 8-bit Bl Bs forms a 16-bit buffer used for communication with peripheral input/output units and are hereinafter referred to as the peripheral Bl Bs.

The elements of the microprocessor are interconnected by an MOS-level instruction-data bus (IDA) Within the microprocessor 101, the IDA bus comprises 10 sixteen lines labelled IDA 6-1 DA,5 that are common to the memory and peripheral Bl Bs as well as the BPC, IOC, and EMC Also included are a number of other MOS-level lines, some of which are common to all of the chips within microprocessor 101 and some of which form interconnections with only certain ones of the chips The IDA bus is employed to transmit encoded information 15 representing either machine language instructions, memory or register addresses, or memory or register data to and from various peripheral input/output units The remaining lines comprise control lines, clock lines, power supply lines, etc.

The peripheral and memory Bl Bs selectively connect the MOS-level IDA bus within microprocessor 101 to the TTL-level circuitry outside the microprocessor 20 In the case of operations involving the microprocessor and portions of the calculator memory outside the microprocessor such as transmission of address, data, and instruction information, the memory Bl Bs are enabled in the direction determined by a bus control circuit 104 The peripheral Bl Bs are enabled in the appropriate direction by the IOC whenever a word of information is to be 25 exchanged between a peripheral I/O unit and the microprocessor.

As referred to in the following detailed description of the microprocessor 101, the term "memory" means any addressable memory location of the calculator both within and without the microprocessor itself The term "external memory" refers to the calculator memory section 200 of Figure 4 The term "register" refers to the 30 various storage locations within the microprocessor itself These registers range in size from one bit to sixteen bits The term "addressable register" refers to a register within one of the microprocessor chips that responds as memory when addressed.

Most registers are not addressable In most discussions that follow the context clarifies whether or not a register has addressability so that it is not deemed 35 necessary to explicitly differentiate between addressable registers and registers.

Those registers that are addressable are included in the meaning of the term "memory" The term "memory cycle" refers to a read or write operation involving a memory location.

The first 32 memory addresses do not refer to external memory Instead, these 40 addresses ( 0-37) are reserved to designate addressable registers within the microprocessor Table 1 below lists the addressable registers within the microprocessor.

TABLE 1

Register Location Octal Address Description and # of Bits

A BPC 0 Arithmetic Accumulator ( 16) B BPC 1 Arithmetic Accumulator ( 16) P BPC 2 Program Location Counter (least 15) R BPC 3 Return Stack Pointer (least 15) R 4 l OC 4 Peripheral Activity Designator (-) R 5 l OC 5 Peripheral Activity Designator (-) R 6 IOC 6 Peripheral Activity Designator (-) 7 Peripheral Activity Designator (-) R 7 IOC 13 1,568,094 13 TABLE I (continued) Register Location Octal Address Description and # of Bits

SE EMC 24 Shift Extend Register (least 4) IV l OC 10 Interrupt Vector (upper 12) PA IOC 11 Peripheral Address Register (least 4) W IOC 12 Working Register ( 16) DMAPA l OC 13 DMA Peripheral Address Register (least 4) DMAC IOC 14 DMA Count Register ( 16) DMAMA IOC 15 DMA Memory Address & Direction Register ( 16) C IOC 16 Stack Pointer ( 16) D I IOC 17 Stack Pointer( 16) AR 2 EMC 20 BCD Arithmetic Accumulator ( 4 x 16) Among several service functions performed by the BOC for the IOC and EMC is the generation of a signal on a register access line RAL whenever an address on the IDA bus is within the range reserved for register designation The signal on line RAL functions to prevent the external memory from responding to any memory 5 cycle having such an address.

Functional Description of the BPC

The BPC has two main functions The first is to fetch machine instructions from memory for itself, the IOC, and for the EMC A fetched instruction may pertain to one or more of those elements An element that is not associated with a 10 fetched instruction simply ignores that instruction The second main function of the BPC is to execute the 56 instructions in its repertoire These instructions include general purpose register and memory reference instructions, branching instructions, bit manipulation instructions, and some binary arithmetic instructions Most of the BPC's instructions involve one of the two accumulator 15 registers: A and B. The four addressable registers within the BPC have the following functions:

The A and B registers are used as accumulator registers for the arithmetic operations, and also as source and destination locations for most BPC machineinstructions referencing memory The R register is an indirect pointer into an area 20 of RWM designated to store return addresses associated with nests of subroutines encountered during program execution The P register contains the program counter; its value is the address of the memory location from which the next machine-instruction will be fetched.

Upon the completion of each instruction the program counter (P register) has 25 been incremented by one, except for the instructions JMP, JSM, RET, and SKIP instructions whose SKIP condition has been met For those instructions the value of P will depend on the activity of the particular instruction.

Indirect Addressing Memory addresses appear on the IDA Bus as 15-bit patterns during the 30 address portion of a memory cycle The BPC machine-instructions that reference memory are capable of multi-level indirect addressing The initial indirect indicator is a particular bit in the machine-instruction itself (the mostsignificant, or leftmost, bit: bit 15) The internal operation of the BPC is so arranged that if the memory content of that address also has a one in bit 15, the other bits of the 35 contents are themselves taken as an indirect address The process of accessing via an indirect address continues until a location is accessed which does not have a one in bit 15 At that time the content of that location is taken as the final address: that is, it is taken to be the address of the desired location and the memory cycle is completed when that location is accessed 40 Page Addressing Machine-instructions fetched from memory are 16-bit instructions Some of those bits represent the particular type of instruction, and if it is an instruction that requires a memory cycle, other bits represent the address to be referenced Only ten bits of a memory reference instruction are devoted to indicating that address 5 Those ten bits represent one of 1024,0 locations on either the base page or the current page of memory An additional bit in the machine-instruction indicates which The base page is always a particular, non-changing, range of address, exactly 1024,, in number A memory reference machine-instruction fetched from any location in memory (i e, from any value of the program counter) may directly 10 reference (that is, need not use indirect addressing) any location on the base page.

There are two types of current pages Each type is also 1024,' consecutive words in length A memory reference machine-instruction can directly reference only locations that are on the same page as it; that is, locations that are within the page containing the current value of the program counter (P) Thus the value of P 15 determines the particular collection of addresses that are the current page at any given time This is done in one of two distinct ways, and the particular way is determined by whether the signal called RELA is grounded or not If RELA is ungrounded, the BPC is said to address memory in the "relative" mode If RELA is grounded it is said to operate in the "absolute" mode 20 During its execution each memory reference machine-instruction causes the BPC to form a full 15-bit address based on the ten bits contained within the instruction How the supplied ten bits are manipulated before becoming part of the address, and how the remaining five bits are supplied, depends upon whether the instruction calls for a base page reference or not, and upon whether the addressing 25 mode is relative or absolute The differences are determined primarily by the two different definitions of the current page; one for each mode of addressing Base page addressing is the same in either mode Figure 21 depicts the base page.

Absolute Addressing In the absolute mode of addressing the memory address space is divided into a 30 base page and 32 possible current pages The base page consists of addresses770008-777778 and 00000 -00777 The possible current pages are the consecutive 10241 o word groups beginning with 000008 The possible current pages can be numbered, 0 to 311,0 Thus the "zero page" is addressed 00000817778 Note that the base page is not the same as the zero page; the base page overlaps the zero 35 page and page 31.

Relative Addressing In relative addressing there are as many possible current pages as there are values of the program counter In the relative addressing mode a current page is 40 the 512, consecutive locations prior (that is, having lower valued addresses) to the current location (value of P), and the 51 1, consecutive locations following the current location.

Base Page Addressing All memory reference instructions include a 10-bit field that specifies the location referenced by the instruction What goes in this field is a displacement 45 from some reference location; an actual complete address has too many bits in it to fit in the instruction This 10-bit field is bit 0 to bit 9 Bit 10 tels whether the referenced location is on the base page, or someplace else Bit 10 is called the B/B bit, as it alone is used to indicate base page references Bit 10 will be a zero if it is on the base page, and a one if otherwise In addition, bit 15 indicates whether the 50 reference is indirect, or not (A one implies indirect).

If bit 10 is a zero for a memory reference instruction (base page reference) the 10-bit field is sufficient to indicate completely which of the 1024 locations is to be referenced There are two ways to describe the rule that is the correspondence between bit patterns in the 10-bit field, and the locations that are the base page: ( 1) 55 the least significant 10 bits of the "real address" (i e, 77,0008 to 7778) are put into the 10-bit field, bit for bit ( 2) Another way to describe this is as a displacement of + 777, or -1000, about 0, with bit 9 being the sign.

The 32 register addresses are considered to be a part of the base page Base page addressing is always done in the manner indicated above, regardless of 60 whether relative or non-relative addressing is employed by the BPC.

I 1,568,094 Current Page Addressing Current page addressing refers to memory reference instructions W hich reference a location which is not on the base page The same 10-bit field of the machine-instruction is involved, but the B/B bit is a one (B) Now, since there are more than 1024 locations that are not the base page, the 10-bit field by itself, is not 5 enough to completely specify the exact location involved An "assumption" has to be made about which page of the memory is involved.

The hardware inside the BPC handles 15 bits of address and thus can reference any address in a 32 K address space The "assumption" is that the most significant 5 bits correspond the page, and last 10 bits determine the location within that page 10 The assumption for absolute addressing requires that there will be no page changes except by certain ways This means that once the program counter is set to a particular location the top 5 bits need not be changed for any addressing on that (which ever it is) page When the assembler assembles a memory reference IS instruction, it computes the least 10 bits and puts them in the instruction When the 15 BPC executes the instruction it concatenates its own top 5 bits of P with the address represented by the least 10 bits of the instruction; that produces the complete address for the location referenced by the instruction.

However, the least 10 bits produced by the assembler and placed in the machine-instruction do not correspond exactly to the "real" memory address that 20 is referenced Bit 9 (the 10th bit) is complemented before it is placed in the address field of the instruction The other 9 bits are left unchanged This induces a one-half page offset whose effect is to make current page addressing relative to the middle of the page Figure 22 depicts current page absolute addressing This similarity between current page and base page addressing is deliberate, and results in 25 simplified hardware in the BPC.

Page changes can be accomplished in two ways: incrementing or decrementing the program counter in the BPC, and through indirect addressing An example of incrementing to a new page is a continuous block of code that spans two adjacent pages A page change through an increment or decrement can occur in the same 30 general way due to skip instructions.

Indirect addressing allows page changes because the object of an indirect reference is always taken as a full 15-bit address Indirect addressing is the method used for an instruction on a given page to either reference a memory location on another page (LDA, STA, etc), or, to jump (JMP or JSM) to a location on another 35 page.

Instructions on any page can make references to any location on the base page without using indirect addressing This is because the B/B bit designates whether the 10-bit field in the instruction refers to the base page or to the current page If

B/B is a zero (B), the BPC automatically assumes the upper 5 bits are all zeros, and 40 thus the 10-bit field refers to the base page If B/B is a one (B), the top 5 bits are taken for what they are, and the current page is referenced whichever it is).

It is the responsibility of the assembler to control the B/B bit at the time the machine-instruction is assembled It does this easily enough by determining if the address of the operand (or its "value") of an instruction is in the range of 77,000, to 45 77,777, or, 0 to 777, If it is, then it's a base page reference and B/B is made a zero for that instruction.

Relative addressing does not require the concept of a fixed page as in absolute addressing The word "page" can still be used, but requires a new definition:

so In relative addressing, page is 1024,o consecutive locations, having 512, 50 locations prior to the current location, and 51 1, locations following the current location.

As before, direct addressing is possible anywhere within the page But offpage references (other than to the base page) require indirect addressing, which once started, works as before it is not relative, but produces a full 15-bit absolute 55 address.

Figure 23 illustrates relative addressing Relative current page addressing is done in much the same was as base page addressing The 10-bit field in the memory reference instructions is encoded with a displacement relative to the current location 60 Bit 9 (the 10th, and most significant bit of the 10) is a sign bit If it is a zero.

then the displacement is positive, and bits 0-8 are taken at face value If bit 9 is a one, the displacement is negative Bits 0-8 have been complemented and then 1,568,094 is incremented (two's complement) before being placed in the field To get the absolute value of the displacement, simply complement them again, and increment, ignoring bit 9.

BPC Machine Instructions The Assembly language representation of the BPC machine instructions are 5 three-letter mnemonics Each machine instruction source statement corresponds to a machine operation in the object program produced by an assembler.

The symbolic notation used in representing the BPC machine instructions is explained in Table 2 below.

TABLE 2 m Memory location.

n Numerical quantity A numeric value that is not an address, but represents a shift or skip amount.

I Indirect addressing indicator.

S,C,P Instruction modifiers These indicators have various meanings, depending upon the instruction Each will be explained as it is encountered.

S/,C The slash indicates that either item (but not both) may be used at this place in the source statement.

l 1 Brackets indicate that the item contained within them is optional.

Memory Reference Group of Instructions The 14 memory reference instructions listed below refer to a pecified address in memory determined by the 10-bit address field (m), by the B/B bit, and by the

Direct/Indirect bit (I).

LDA m l,I 1 15 Load A from m The A register is loaded with the contents of the addressed memory location.

LDB m,LI 1 Load B from m The B register is loaded with the contents of the addressed memory location 20 CPA m l,I 1 Compare the contents of m with the contents of A; skip if unequal The two 16-bit words are compared bit by bit If they differ the next instruction is skipped, otherwise it is executed next.

CPB m l, Il 25 Compare the contents of m with the contents of B; skip if unequal The two 16-bit words are compared bit by bit If they differ the next instruction is skipped, otherwise it is executed next.

*ADA m l, Il Add the contents of m to A The contents of the addressed memory location are 30 added to that of A The binary sum remains in A, while the contents of m remain unchanged If a carry occurs from bit 15 the E register is loaded with one, otherwise, E is left unchanged If an overflow occurs the O register is loaded with one, otherwise the O register is left unchanged The overflow condition occurs if there is a carry from either bits 14 or 15, but not both together The E and O 35 registers are one-bit registers within the BPC They represent the extend (carry out from bit 15) and overflow conditions for binary arithmetic performed by the BPC.

ADB m l,I 1 An Add the contents of m to B Otherwise identical to ADA An 1,568,094 -v m V 17 1,568,094 17 STA m l, 11 Store the contents of A in m The contents of the A register are stored into the addressed memory location, whose previous contents are lost.

STB m l, Il Store the contents of B in m The contents of the B register are stored into the 5 addressed memory location, whose previous contents are lost.

JSM m l, Il Jump to routine JSM permits jumping to subroutines in either ROM or R/W memory The contents of the return stack register (R) are incremented by one and the contents of P stored in R,I Program execution resumes at m 10 JMP m l, Il Jump to m Program execution continues at location m.

TS ml,II 1 Increment m; skip if zero ISZ adds one to the contents of the referenced location, and writes the sum into that location If the sum is zero, the next instruction is 15 skipped.

DSZ m l, Il Decrement m; skip if zero DSZ subtracts one from the contents of the referenced location, and writes the difference into that location If the difference is zero, the next instruction is skipped 20 AND m l, Il Logical and of A and m The contents of A and m are anded, bit by bit, and the result is left in A.

IOR m l, Il Inclusive or of A and m The contents of A and m are inclusive or'ed, bit by bit, and 25 the result is left in A.

Shift-Rotate Group of Instructions Each shift-rotate instruction listed below includes a four-bit field in which the shift or rotate amount is encoded The number to be encoded in the field is represented by n, and may range from 1 to 16, inclusive The four-bit field (bits 0 30 through 3) will contain the binary code for n-l.

AAR n Arithmetic right shift of A The A register is shifted right N places with the sign bit (bit 15) filling all vacated bit positions; the n-i most significant bits become equal to the sign bit 35 SAR n Shift A right The A register is shifted right N places with all vacated bit positions cleared; the N most significant bits become zeros.

SBR n Shift B right The B register is shifted right N places with all vacated bit positions 40 cleared; the N most significant bits become zeros.

SAL n Shift A left The A register is shifted left N places; the N least significant bits become zeros, SBL N 45 Shift B left The B register is shifted left N places: the least significant bits become zeros.

RAR n Rotate A right The A register is rotated right N places, with bit 0 rotating into bit so 15 50 RBR n Rotate B right The B register is rotated right N places, with bit 0 rotating into bit 15.

Alter-Skip Group of Instructions The alter-skip instructions each contain a six bit field which allows a relative 5 branch to any of 64 locations The distance of the branch is represented by a displacement, n; N may be within the range of -32,0 to 31,0 inclusive.

Bits 0 to 5 are coded with the value of N as follows: if the value is positive or zero, bit 5 is zero, and bits 0 to 4 receive the straight binary code for the value of n; if the value is negative, bit 5 is a one, and bits 0 to 4 receive a complemented and 10 incremented binary code Table 3 below illustrates this convention.

TABLE 3

For N = bits 5-0 meaning: (denotes current value of P) -32 100000 if skip, next instruction is -32 7 111001 if skip, next instruction is -7 1 111111 if skip, next instruction is -1 0 000000 if skip, repeat this instruction I 000001 do next instruction, regardless 7 000111 if skip, next instruction is + 7 31 011111 if skip, next instruction is + 31 All instructions in the alter-skip group have the "skip" properties outlined above Some of the instructions also have an optional "alter" property This is where the general instruction form "skip if " is 15 supplemented with the ability to alter the state of the bit mentioned in the condition The alteration is either to set the bit, or clear it If specified, the alteration is done after the condition is tested, never before.

To indicate in a source statement that an instruction includes the alter option, and to specify whether to clear or to set the tested bit, a C or S follows n The C 20 indicates clearing the bit, while an S indicates setting the bit.

The "alter" information is encoded into the 16-bit instruction word with 2 bits.

Bit 7 is called the H/H (Hold/Don't Hold) bit, and bit 6 is the C/S (Clear/Set) bit, for such instructions If bit 7 is a zero (specifying H) the "alter" option is not active; neither S nor C followed N in the source statement of the instruction, and the tested 25 bit is left unchanged If bit 7 is a one (specifying H), then "alter" option is active, and bit 6 specifies whether it is S or C The alter-skip instructions are listed below.

SZA n Skip if A is zero If all 16 bits of the A register are zero, skip the amount indicated by n 30 SZB n Skip if B is zero If all 16 bits of the B register are zero, skip the amount indicated by n.

RZA n Skip if A is not zero If any of the 16 bits of the A register are set, skip the amount 35 indicated by n.

RZB n Skip if B is not zero If any of the 16 bits of the B register are set, skip the amount indicated by n.

1,568,094 SIA n Skip if A is zero, and then increment A The A register is tested, and then incremented by one If all 16 bits of A were zero before the increment, skip the amount indicated by n.

SIB N 5 Skip if B is zero, and then increment B The B register is texted, and then incremented by one If all 16 bits of B were zero before the increment, skip the amount indicated by n.

RIA n Skip if A is not zero, and then increment A The A register is tested, and then 10 incremented by one If any bits of A were one before the increment, skip the amount indicated by n.

In connection with the next four instructions, Flag and Status are controlled by the peripheral interface addressed by the current select code The select code is is the number that is stored in the register named PA, located in the IOC Both Status 15 and Flag originate as negative true signals, so that when a missing interface is addressed Status and flag will appear to be false, or not set.

SFS n Skip if Flag line is set If the Flag line is true, skip the amount indicated by n.

SFC N 20 Skip if Flag line is clear If the flag line is false, skip the amount indicated by n.

SSS n Skip if Status line set If the status line is true, skip the amount indicated by n.

SS Cn Skip if Status line is clear If the status line is false, skip the amount indicated by n 25 SDS n Skip if decimal carry set Decimal carry (DC) is a one bit register in the EMC It is controlled by the EMC, but connected to the decimal carry input of the BPC If DC is set, skip the amount indicated by n.

SDC N 30 Skip if decimal carry clear Decimal carry (DC) is a one bit register in the EMC It is controlled by the EMC, but connected to the decimal carry input of the BPC If DC is clear, skip the amount indicated by n.

SHS n Skip if halt line set If the halt line is true, skip the amount indicated by n 35 SHC n Skip if halt line clear If the halt line is false, skip the amount indicated by n.

SLA N l,S/,Cl Skip if the least significant bit of A is zero If the least significant bit (bit 0) of the A register is a zero, skip the amount indicated by n If either S or C is present, bit 0 of 40 A is altered accordingly after the test.

SLB N l,S/,Cl Skip if the least significant bit of B is zero If the least significant bit (bit 0) of the B register is a zero, skip the amount indicated by n If either S or C is present, bit 0 of B is altered accordingly after the test 45 RLA N l,S/,CI Skip if the least significant bit of A is non-zero If the least significant bit (bit 0) of the A register is a one, skip the amount indicated by n If either S or C is present, bit 0 of A is altered accordingly after the test.

1,568 094 RLB N l,S/,Cl Skip if the least significant bit of B is non-zero If the least significant bit (bit 0) of the A register is a one, skip the amount indicated by n If either S or C is present, bit 0 of B is altered accordingly after the test.

SAP N l,S/C 5 Skip if A is positive If the sign bit (bit 15) of the A register is a zero, skip the amount indicated by n If either S or C is present, bit 15 of A is altered accordingly after the test.

SBP N l,S/,Cl Skip if B is positive If the sign bit (bit 15) of the A register is a zero, skip the 10 amount indicated by n If either S or C is present, bit 15 of B is altered accordingly after the test.

SAM N l,S/,Cl Skip if A is minus If the sign bit (bit 15) of the A register is a one, skip the amount indicated by n If either S or C is present, bit 15 of A is altered accordingly after the 15 test.

SBM N l,S/,CI Skip if B is minus If the sign bit (bit 15) of the B register is a one, skip the amount indicated by n If either S or C is present, bit 15 of B is altered accordingly after the test 20 SOS N lLS/,CI Skip if Overflow is set If the one-bit Overflow register ( 0) is set, skip the amount indicated by n If either S or C is present, the O register is altered accordingly after the test.

SOC N l,S/,CI 25 Skip if Overflow is clear If the one-bit Overflow register is clear, skip the amount indicated by n If either S or C is present, the O register is altered accordingly after the test.

SES N l,S/,Cl Skip if Extend is set If the Extend register (E) is set, skip the amount indicated by 30 n If either S or C is present, E is altered accordingly after the test.

SEC N lSICl Skip if Extend is clear If the Extend register (E) is clear, skip the amount indicated by n If either S or C is present, E is altered accordingly after the test.

Return Group of Instructions 35 Listed below is the return instruction for the BPC.

RET N l,Pl Return The R register is a pointer into a stack of words containing the addresses of previous subroutine calls A read RI occurs That produces the address (value of P) for the latest JSM that occurred The BPC then jumps to address P+n The value 40 of N may range from -32 to 31, inclusive The value of N is encoded into bits 0 through 5 of the instructions as a 6 bit, two's complement, binary number The ordinary, non-interrupt-service routine return, is RET 1 If a P is present, it "pops" the interrupt system Two things in the IOC occur when this happens; first, the peripheral address stack in the IOC is popped, and second, the interrupt grant 45 network of the 10 is "decremented".

The peripheral address stack is a hardware stack in the 10 C, 4 bits wide, and three levels deep On the top of this stack is the current select code for I/O operations Select codes-are stacked as interrupts occur during I/O operations A RET n, P at the end of an interrupt service routine puts the select code of the 50 interrupted device back on the top of the stack.

The interrupt grant network in the IOC keeps track of which interrupt priority level is currently in use From this it determines whether or not to grant an interrupt request A RET n, P at the end of an interrupt service routine causes the interrupt grant network to change the current interrupt priority level to the next 55 lower level (unless it is already at the lowest level).

1,568,094 Complement Group of Instructions Listed below are the complement group machine-instructions of the BPC.

CMA Complement A The A register is replaced by its one's (bit by bit) complement.

CMB 5 Complement B The B register is replaced by its one's (bit by bit) complement.

TCA Two's complement A The A register is replaced by its one's (bit by bit) complement, and then incremented by one.

to TCB 10 Two's complement B The B register is replaced by its one's (bit by bit) complement, and then incremented by one.

Execute Group of Instructions Listed below is the execute machine-instruction for the BPC.

I 5 EXE O < m ' 378 l,Il 15 Execute register m The contents of any addressable register can be treated as the current instruction, and executed in the normal manner The register is left unchanged unless the fetched machine-instruction causes it to be altered The next instruction executed will be the one following the EXE m, unless the instruction in m causes a branch 20 Multi-level indirect addressing is allowed An EXE m,I causes the contents of m to be taken as the address of the place in memory whose contents are to be executed; this can be anywhere in memory, and need not be another register But regardless, only 15 bits are required to specify this location If the 16th bit of m is set, the lower 15 bits are taken as the address of the address, instead of the address 25 of the instruction This continues until an address is encountered whose 16th bit is zero Then that address is taken as the final address of the instruction Using that address one more fetch is done, and the bit pattern found executed as an instruction, even if it has a one in the 16th bit Figures 24 A-G depict the bit patterns of the BPC machine-instructions 30 Internal Description of the BPC

The details of the BPC may be understood with reference to the block diagram of Figures 25 A-C The majority of activity within the BPC is controlled by a ROM This is a programmed logic array whose input qualifiers are a 4-bit statecount, group, miscellaneous, and input-output qualifiers From the ROM are 35 decoded micro-instructions Each machine-instruction that the BPC executes and the BPC's response to memory cycles directed at its addressable registers, is a complex series of micro-instructions This activity is represented by the flow charts depicted in Figures 91 A through 105.

Changes in the state-count correspond to the step-by-step sequence of activity 40 shown in the flow charts The State-Counter has a natural sequence that was chosen by computer simulation to reduce the complexity of the necessary number of non-sequential transitions When a section of the flow chart requires a nonsequential transition it decodes a special micro-instruction whose purpose is to override the natural sequence and produce the desired alteration in the state 45 count.

The Group Qualifiers are generated by Instruction Decode The Group Qualifiers represent the instruction that has been fetched and that must now be executed.

so The Input-Output Qualifiers are controlled by the M-Section Those qualifiers 50 are used in decoding micro-instructions, and in flow chart branching, that are dependent upon or have to do with input and output to the BPC.

The 1 D Bus is the internal BPC representation of the IDA Bus To conserve power, this bus is used dynamically; it is prechanged on phase two, and is available for data transmission only during phase one Data on the IDB Bus is transmitted in 55 negative true form; a logical one is encoded on a given line of the bus by grounding that line.

1,568,094 The main means of inter-register communication within the BPC is via the IDB Bus and the various set and dump micro-instructions For instance, a SET I loads the I Register with the contents of the IDB Bus A DMP IDA places the contents of the IDA Bus onto the IDB Bus A simultaneous DMP IDA and SET I loads the I Register with the word encoded on the IDA Bus As a further instance, 5 that very activity is part of what is decoded from the ROM at the conclusion of a memory cycle that is an instruction fetch Figures 115 A-C and 116 illustrate the waveforms associated with the start-up sequence and an instruction fetch.

Once the instruction is in the I Register, the bit pattern of the instruction is felt by Instruction Decode Aside from the afore-mentioned Group Qualifiers, 10 Instruction Decode generates two other groups of signals One of these are control lines that go to the Flag Multiplexer to determine which, if any, of the external flag lines is involved in the execution of the current machine-instruction The remaining group of signals are called the Asynchronous Control Lines These are signals that, unlike micro-instructions, are steady-state signals present the entire time that the 15 machine-instruction is in the I Register The Asynchronous Control lines are used to determine the various modes in which much of the remaining hardware will operate during the execution of the machine-instruction For example, the S Register is capable of several types of shifting operations, and the micro-instruction that causes S to shift (SSE) means only that S should now shift one time The exact 20 nature of the particular type of shift to be done corresponds to the type of shift machine-instruction in the I Register This in turn affects Instruction Decode and the Asynchronous Control Lines, which in turn affect the circuitry called S Register Shift Control It is that circuitry that determines the particular type of shift operation that S will perform when an SSE is given 25 In a similar way the Asynchronous Control Lines affect the nature of the operation of the Arithmetic-Logic Unit (ALU), the Skip Matrix, and the A and B registers.

The least four bits of the I Register are a binary decrementer and CTQ Qualifier network This circuitry is used in conjunction with machineinstructions 30 that involve shift operations Such machine-instructions have the number of shifts to be performed encoded in their least four bits When such an instruction is in the I Register, the least four bits are decremented once for each shift that is performed.

The CTQ Qualifier indicates when the last shift has been performed.

The A and B Registers are primarily involved in machine-instructions that; 35 read to, or write from, memory; do binary arithmetic; shift; or, branch Machineinstructions that simply read from, or, write to, memory, are relatively easily executed, as the main activity consists of dumping or setting the A or B Register.

The arithmetic instructions involve the ALU.

The ALU has three inputs One is the ZAB Bus This bus can transmit either 40 zero, the A Register, or the B Register The choice is determined by the Asynchronous Control Lines The input from the ZAB Bus can be understood in its true, or in its complemented form The second input to the ALU is the S Register.

The remaining input is a carry-in signal.

The ALU can perform three basic operations: logical and, logical inclusive or, 45 and binary addition The choice is determined by the Asynchronous Control Lines.

Whatever operation is performed is done between the complemented or uncomplemented contents of the ZAB Bus, and the contents of the S Register The output of the ALU is available through the DMP ALU micro-instruction, as well as through lines representing the carry-out from the 14th and 15th bits of the result 50 These carry-outs are used to determine whether or not to set the one-bit Extend and Overflow Registers.

The R Register is the return stack pointer for the RET machineinstruction.

The P Register is the program counter Associated with it are several otherpieces of circuitry used for incrementing the program counter, as well as for 55 forming complete 15-bit addresses for memory cycles needed in the execution of memory reference or skip machine-instructions These other pieces of circuitry are the T Register, the P-Adder Input, P-Adder Control, and the P-Adder.

The P-Adder mechanism can operate in one of three modes These modes are established by micro-instructions, not by the Asynchronous Control Lines In the 60 memory reference machine-instruction mode (established for the duration of the ADM micro-instruction) the T register will contain a duplicate copy of the memory reference machine-instruction being executed Thus the 10-bit address field of the machine-instruction and the base page bit (bit 10) as well as top 5 bits of all the program counter, are available to the adder mechanism In accordance with the 65 I 1,568,094 rules for either relative or absolute addressing (as determined by RELA) the PAdder Input and P-Adder operate to produce the correct full 15-bit address needed for the associated memory cycle.

The ADS micro-instruction establishes a mode where only the least five bits of a skip machine-instruction are combined with the program counter to produce a 5 new value for the program counter.

In the absence of either an ADM or ADS micro-instruction the P-Adder mechanism defaults to an increment-P mode In this mode the value of P+l is continuously being formed This is the typical way in which the value of the program counter is changed at the end of non-branching mahineinstructions 10 The output of the P-Adder mechanism is available to the IDB Bus through the DMP PAD micro-instruction.

The D Register is used to drive the IDA Bus through the SET IDA microinstruction Because of limitations on transitor device sizes and the large capacitances possible on the IDA Bus, two consecutive SET IDA's are required to 15 ensure that the IDA Bus properly represents the desired data.

The BPC has special circuitry to detect a machine-instruction that requires an indirect memory cycle This circuitry generates a qualifier used in the ROM The flow-charting that corresponds to a machine-instruction that can do indirect addressing has special activity to handle the occurrence of an indirect reference 20 In the event of an interrupt request generated by the IOC, the BPC aborts the execution of the machine-instruction just fetched, and without incrementing the program counter, executes the following machine-instruction instead: JMP 108,J.

Register 108 is the Interrupt Vector Register (IV) in the IOC This is part of the means by which vectored interrupt is implemented Figures 117 A-B illustrate 25 interrupt operation.

In the event that an addressable register within the BPC is the object of a memory cycle, whether the memory cycle is originated by the BPC itself, or by an agency external to the BPC, a BPC Register Detection and Address Latch circuit detects that fact (by the value of the address) and latches the address, and also 30 latches whether the operation is a read or a write The result of this action is twofold: First, it supplies qualifier information to the ROM so that microinstructions necessary to the completion of the memory cycle may be issued Secondly, it initiates action within the M-Section that aids in the handling of the various memory cycle control signals 35 Figures 106-114 are waveforms that illustrate the various memory cycles that can occur.

The BPC can interrupt the execution of a machine-instruction to allow some Q 1 oher agency to use the IDA Bus The BPC will do this whenever Bus Request (BR) is active, and the BPC is not in the middle of a memory cycle When these 40 conditions are met, the BPC issues a signal called Bus Grant (BG) to inform the requesting agency that the IDA Bus is available, and the BPC also generates an internal signal called Stop (STP) that halts the operation of the decrementer in the I Register, and halts the change of the ROM state-counter In addition, STP inhibits decoding from the ROM of all but those micro-instructions needed to respond to 45 memory cycles under the control of the M-Section STP and BG are given until the requesting agency signals that its use of the IDA Bus is over by releasing IW This capability is the basis of Direct Memory Access, as implemented by the IOC.

Figures 118 and 1 19 A-B illustrate the operation of Bus Request and Bus Grant.

Communication Between the BPC and IOC 50 so Each major element in the microprocessor is connected to the IDA Bus and some related control lines The IDA Bus allows elements of the system to both "send" and "receive" 16-bit words.

The term "chip" refers to any of the BPC, l OC, or EMC.

Consider this question: "Since there are some separate instructions for the 55 IOC, and since the BPC is sort of the 'head processor' that does the fetching of instructions from memory, how is it that the IOC receives its instructions and that the BPC is not disturbed by fetching such an instruction?" The answer is: All chips in the microprocessor are exposed to instructions via the IDA Bus as they are fetched A chip will either execute an instruction, or idle 60 until the next instruction fetch An instruction can cause activity in more than one chip.

There is a signal called Sync, which is issued by common consent of all the chips in the microprocessor, and whose significance is that the next memory cycle I 1,568,094 is an instruction fetch During that fetch, the instruction word appears on the IDA Bus Each chip in the microprocessor looks at the words and puts it through an instruction decode process to determine if that chip needs to initiate some activity.

If a chip recognizes a machine-instruction, it pulls Sync to ground and begins the activity 5 More than one chip can recognize the same instruction, and this does happen (the RET n,P machine-instruction affects both the BPC and the IOC) While each chip is busy, it keeps Sync grounded, releasing it when its activity is completed.

When all activity is complete, (i e, Sync is allowed to go high by all chips), the BPC initiates the next instruction fetch The other chips in the microprocessor can 10 recognize this memory access as an instruction fetch because Sync has gone high.

If a chip is not affected by an instruction, it idles until either another Sync/instruction fetch, or, until some other mechanism causes the chip to respond.

For instance, the IOC can be the object of a memory cycle required by the BPC's execution of a memory reference instruction (which the IOC had decoded as "not 15 me").

Each element in the system decodes the addresses for which it contains addressable registers To initiate a register memory cycle, an element of the microprocessor puts the address of the desired location on the IDA Bus, sets the Read/Write line high or low, and gives Start Memory Then, elsewhere in the 20 microprocessor the address is decoded and recognized, and an element of the microprocessor begins to function as memory It is part of the system definition that whatever is on the IDA Bus when a Start Memory is given is an address of a memory (or register) location.

Here is a compiete description of the entire process: An originator originates a 25 memory cycle by putting the address on the IDA Bus, setting the Read/Write line, and giving a Start Memory The respondent identifies itself as containing the object location of the memory cycle, and handles the data If the orginator is a sender (write) it puts and holds the data on the IDA Bus until the respondent achnowledges receipt by sending Memory Complete If the originator is a receiver 30 (read) the respondent obtains and puts the data onto the IDA Bus and then sends Memory Complete The originator then has one clock time to capture the data; no additional acknowledgement is involved.

Description of the IOC

The IOC includes a register called the Peripheral Address Register (PA) which 35 is used in establishing the select code currently in use The bottom four bits of this register are brought out of the IOC as PAL through PA 3 Each Peripheral Interface decodes PAO-PA 3 and thus determines if it is the addressed interface.

The peripheral address is established by storing the desired select code into PA with an ordinary memory reference instruction 40 Flag, Status and Control The peripheral interface is the source of the Flag and Status bits for the BPC instructions SFS, SFC, SSS, and SSC Since there can be many interfaces, but only one each of Flag and Status, only the interface addressed by the select code is allowed to ground these lines Their logic is negative-true, and a result of this is that' 45 if the addressed peripheral is not present on the I/O Bus, Status and Flag are logically false.

TI and 1 C 2 are two control lines that are sent to each peripheral interface by the IOC The state of these two lines during the transfer of information can be decoded to mean something by the interface Just what 'something' will be is 50 subject to agreement between the firmware designer and the interface designer it can be anything they want, and might not be the same for different interfaces.

These two lines act as a four position mode switch on the interface, controlled by the IOC during an I/O operation.

1/0 Bus Cycles 55 An I/O Bus cycle is an exchange of a word between the IDA Bus and the IOD Bus The information transfer between the processor and an interface is not of the handshake variety.

Timing diagrams for read and write I/O Bus cycles are shown in Figures 121 and 122 These cycles are initiated by standard (programmed) I/O instructions, 60 interrupt, and by DMA.

1,568,094 For example, during a standard I/O instruction, an I/O Bus cycle is initiated by a reference to one of R 4 through R 7 in the IOC One way that can be done is with a BPC memory reference instruction; for instance, STA R 4 (for a write cycle), or LDA R 4 (for a read cycle).

Consider a write 1/0 Bus cycle as illustrated in Figure 121 This is initiated with 5 a reference to one of R 4-R 7 The IOC sees this as an address between 4 and 7 on the IDA Bus while STM is low The Read line is low to denote a write operation.

The IOC enables the peripheral Bl B's and specifies the direction It also sets the control lines TC and T, according to which register was referenced Meanwhile, the BPC has put the word that is to be written onto the IDA Bus That word is felt 10 at all peripheral interfaces The interface that is addressed ses DOUT to undrstand it's to read something, and uses IOSB as a strobe for doing it After IOSB is given, the IOC gives lSynchronizedl Memory Complete (SM and the process terminates The BPC has written a word to the interface whose select code 15 matched the number in the PA register.

A read I/O Bus cycle is similar, as shown in Figure 122 Here the BPC expects to receive a word from the addressed peripheral interface Read, DOUT and BE are different because the data is now moving in the other direction.

In either case, the critical control signals SH and O'Hare given by the IOC, and their timing is fixed There can be no delays due to something's not being 20 ready, nor is there any handshake between the interface and the IOC.

It is the responsibility of the firmware not to initiate an I/O Bus cycle involving a device that is not ready To do so will result in lost data, and there will be no warning that this has happened.

Place and Withdraw 25 The IOC includes some firmware-stack manipulation instructions Two registers are provided as stack pointers: C and D There are eight place and withdraw instructions for putting things into stacks and getting them out.

Furthermore, the place and withdraw instructions can handle full 16-bit words, or pack 8-bit bytes in words of a stack And last, there are provisions for automatic 30 incrementing and decrementing of the stack pointer registers, C and D.

The mnemonics for the place and withdraw instructions are easy to decipher.

All place instructions begin with P, and all withdraw instructions begin with W The next character is a W or B, for word or byte, respectively The next character is either a C or D, depending upon which stack pointer is to be used There are eight 35 combinations, and each is a legitimate instruction.

A PWD A, 1 reads as follows: place the entire word of A into the stack pointed at by D, and increment the pointer before the operation The instruction of WWC B,D is read; Withdraw an entire word from the stack pointed at by C, put the word into B, and decrement the stack pointer D after the operation 40 The place and withdraw instruction outwardly resembles the memory reference instructions of the BPC: a mnemonic followed by an operand that is understood as an address, followed by an optical 'behavior modifier' The range of values that the operand may have is restricted, however The value of the operand must be between 0 and 7, inclusive Thus, the place and withdraw instructions can 45 place from, or, withdraw into, the first eight registers There are A, B, P, R, and R 4 through R 7 Therefore, the place and withdraw instructions can initiate I/O Bus cycles; they can do I/O.

The place and withdraw instructions automatically change the value of the stack pointer each time the stack is accessed In the source text an increment or 50 decrement is specified by including a,I or,D respectively, after the operand.

Regardless of which of increment or decrement is specified, a place instruction will do the increment or decrement of the pointer prior to the actual place operation Contrariwise, the withdraw instructions do the increment or decrement after actual withdraw operation The reason for this is that it always 55 leaves the stack with the pointer pointing at the new 'top-of-the-stack'.

Place and Withdraw for Bytes The following explains how the place and withdraw instructions are used for placing and withdrawing bytes as opposed to complete words First, the stack is always a stack composed of words However, for byte operations bit 15 of the 60 pointer register assumes added significance; it selects the lelf-half or right-half of the word on top of the stack If bit 15 of the pointer register is a one, the left-half is selected Also, only the right-half of the registers A, B, P, R, and R 4-R 7 are taken as the operands; the left halves are ignored.

I 1,568,094 26 1,568,094 26 Thus, the instructions place from, or, withdraw into, the right-half of the referenced register The left-half of the destination register is cleared during a withdraw operation The instructions place into, or, withdraw from, the left or right half of the top of the stack, as determined by bit 15 of the pointer register A place operation does not disturb the unreferenced half of the destination word in the 5 stack, provided the memory entity properly utilizes the BYTE line After each place or withdraw, bit 15 is automatically toggled, to provide a leftright-left-rightsequence.

However, it is up to the firmware to see to it that bit 15 of the pointer register is properly set prior to beginning stack operations 10 When incrementing the stack pointer, bit 15 automatically changes state each time But, the address contained in the lower 15 bits increments only during the zero-to-one transition of bit 15 Similarly, when decrementing the transition of bit from a one to a zero is accompanied by a decrement of the lower 15 bits.

The incrementing and decrementing schemes just described are only for 15 increments and decrements brought about by a,I or,D following the operand of a Place or Withdraw instruction Increments or decrements to the pointer register with ISZ or DSZ do not automatically toggle bit 15.

The place-byte instruction cannot be used to place bytes into the registers within the BPC, EMC, and IOC The reason for this is that these chips do not 20 utilize the BYTE line of the IDA Bus during references to their internal registers.

The BYTE line is a signal supplied by the IOC for use by any interested memory entity The BYTE line indicates that whatever is being transferred to or from memory is a byte ( 8 bits) and that bit 15 of the address indicates right or left half It is up to the memory (if it is a 16-bit mechanism) to merge the byte in 25 question with its companion byte in the addressed word.

In the case of a withdraw-byte the memory can supply the full 16-bit word (that is, ignore the BYTE line) The IOC will extract the proper byte from the full word and store it as the right-half of the referenced register; the left half of the referenced register is cleared In the case of a place-byte, however, the IOC copies 30 the entire referenced register into W, and outputs its right half as either the upper or lower byte (according to bit 15 of the address) in a full 16-bit word The full word is transmitted to the memory, and the "other" byte is all zeros Thus, in this case the memory must utilize the BYTE line.

The consequence of the above is that any byte-oriented stacks to be managed 35 using the place instruction must not include registers in any of the BPC, EMC, or IOC; that is, C and D must not assume any value between 0 and 37, inclusive for a place-byte instruction.

Standard I/O Standard programmed I/O involves three activities: 40 I) Setting the peripheral address 2) Investigating the status of the peripheral 3) Initiating an I/O Bus Cycle Addressing the Peripheral A peripheral is selected as the addressed peripheral by storing its octal select 45 code into the register called PA (Peripheral Address address 118) Only the four least significant bits are used to represent the select code.

Checking Status The addressed peripheral is allowed to control the Flag and Status lines (That is, it is up to the interface to not ground Flag or Status unless it is the addressed 50 interface) These lines have an electrically negative-true logic so that when floating they appear false (clear, or not set) for SFS, SFC, SSS, and SSC.

The basic idea (and it can be done in a variety of ways) is to use sufficient checks of Flag and Status before and amongst the I/O Bus Cycles such that there is no possibility of initiating an I/O Bus Cycle to a device that is not ready to handle it 55 One way to do this with standard I/O is to precede every Bus Cycle with the appropriate checks.

Initiating I/O Bus Cycles An I/O Bus Cycle occurs once each time one of R 4-R 7 ( 48-78) is accessed as memory An instruction that "puts" something into R 4-R 7 results in an output 60 (write) I/O Bus Cycle Conversely, an instruction that -gets" something from R 4-R 7 results in an input (read) I/O Bus Cycle However, there are no R 4 through R 7 The use of address 4-7 is just a device to get an I/O Bus Cycle started: they do not correspond to actual physical registers in the 1 OC.

The Interrupt System The idea behind interrupt is that for certain kinds of peripheral activity, the 5 calculator can go about other business once the I/O activity is initiated, leaving the bulk of the I/O activity to an interrupt service routine When the peripheral is ready to handle another ration of data (it might be a single byte or a whole string of words) it requests an interrupt When the micro-processor grants the interrupt the firmware program currently being executed is automatically suspended, and there 10 is an automatic JSM to an interrupt service routine that corresponds to the device that interrupted The service routine uses standard programmed I/O to accomplish its task A RET O P terminates the activity of the service routine and causes resumption of the suspended program.

1 S Priority 15 The interruptsystem allows even an interrupt service routine to be interrupted and is therefore a multi-level interrupt system, and it has a priority scheme to determine whether to grant or ignore an interrupt request.

The IOC allows two levels of interrupt, and has an accompanying two levels of priority Priority is determined by select code; select codes 0-78 are the lower 20 level (priority level 1), and select codes 108-178 are the higher level (priority level 2) Level 2 devices have priority over level I devices: that is, a disc driver operating at level 2 could interrupt a plotter operating at level I, but not vice versa Within a priority level all devices are of "equal" priority, and operation is of a first comefirst served basis: a level I device cannot be interrupted by another level I device, 25 but only by a level 2 device Within a level priorities are not equal in the case of simultaneous requests by two or more devices within a level In such an instance the device with the higher numbered select code has priority With no interrupt service routine in progress, any interrupt will be granted.

Vectored Interrupts 30 Devices request an interrupt by pulling on one or two interrupt request lines (IRL and IRH one for each priority level) The IOC determines the requesting select code by means of an interrupt poll, to be described in the next paragraph If the IOC grants the interrupt it saves the existing select code located in PA, puts the interrupting select code in PA, and does a JSM-Indirect through an interrupt table 35 to get to the interrupt service routine.

An interrupt poll is a special I/O Bus Cycle to determine which interface(s) is (are) requesting an interrupt An interrupt poll is restricted to one level of priority at a time, and is done only when the IOC is prepared to grant an interrupt for that level 40 The interfaces distinguish an Interrupt Poll Bus Cycle from an ordinary I/O Bus Cycle through the TNT line being low Also, during this Bus Cycle PM specifies which priority level the poll is for An interface that is requesting an interrupt on the level being polled responds by grounding the nth I/O Data line of the I/O Bus, where N equals the device's select code modulo eight If more than one 45 device is requesting an interrupt, the one with the higher select code will have priority.

Automatic Peripheral Addressing The IOC has a three-deep first-in last-out hardware stack The top of the stack is the Peripheral Address register (PA-I la) The stack is deep enough to hold the 50 select code in use prior to any interrupts, plus the select codes for two levels of interrupt When an interrupt is granted, the IOC automatically pushes the select code of the interrupting device (as determined by the interrupt poll) onto the stack.

Thus the previous select code-in-use is saved, and the new select code-inuse becomes the one of the interrupting device 55 Interrupt Table It is the responsibility of the firmware to maintained an interrupt table of 16 consecutive words, starting at some RWM address whose four least significant bits are zeros The firmware is also to see to it that the starting address of the table is stored in the IV register (Interrupt Vector register 108), and that bit 15 of IV is 60 I 1.568,094 set (IV is the first of two levels in an indirect chain For an address in the interrupt table to be taken indirectly, the previous address (IV) must have had bit 15 set) The words in the interrupt table contain the addresses of the interrupt service routines for the 16 different select codes Figure 123 depicts the interrupt table.

After the interrupt poll is complete the select code of the interrupting device is 5 made to be the four least significant bits of the IV register Thus IV now points at the word in the Interrupt Table which has the address of the appropriate interrupt service routine.

All that is needed now is a JSM IV,I, and the interrupt service routine will be under way This is accomplished by the BPC as explained below 10 Interrupt Process Summary

The IOC inspects the interrupt requests WRL and IRH during the time sync is given Based on the priority of the interrupt requests, and the priority of any interrupt in progress, the IOC decides whether or not to grant an interrupt If it decides to allow an interrupt it immediately pulls INT to ground, and also begins an 15 interrupt poll.

The grounding of INT serves three purposes: It allows the interfaces to identify the forthcoming I/O Bus Cycle as an interrupt poll; it causes all the chips in the system, except the BPC, to abort their instruction decode process (which by this time is in progress) and return to their idle states; and it causes the BPC to abort its 20 instruction decode and execute a JSM 108,I instead.

The IOC uses the results of the interrupt poll to form the interrupt vector, which is then used by the JSM 108,I It also pushes the new select code onto the peripheral address stack, and puts itself into a configuration where all interrupt requests except those of a higher priority will be ignored 25 Interrupt Service Routines The majority of the interrupt activity described so far is accomplished automatically by the hardware All the firmware has been responsible for has been the IV register, the maintenance of the interrupt table, and (probably) the initiation of the particular peripheral operation involved (plotting a point, backspace, finding 30 a file, etc) Such operations (initiated through a command given by simple programmed I/O) may involve many subsequent I/O Bus Cycles, done at odd timeintervals, and requested by the peripheral through an interrupt It is the responsibility of the interrupt service routine to handle the I/O activity required by the peripheral without upsetting the routine that was interrupted 35 The last things done by an interrupt service routine are to: (if necessary) shut off the interrupt mode of the interface; restore any saved values; and to execute a RET O,P.

The RET O part acts to return to the routine that was interrupted so that its execution will continue The P acts to pop the peripheral address stack and adjust 40 the IOC's internal indicator of what priority level of interrupt is in progress By popping the peripheral address stack, PA is set back to whatever it was prior to the most recent interrupt.

Disabling the Interrupt System The interrupt system can be "turned off' by a DIR instruction After this 45 instruction is given the IOC will refuse to grant any interrupts whatsoever, until the interrupt system is turned back on with the instruction EIR While the IOC won't grant any interrupts, the RET OP works as usual so that interrupt service routines may be safely terminated, even while the interrupt system is turned off.

Pop On Turn-On There is a signal called POP generated by the power supply Its purpose is to 50 initialize all the chips in the calculator system during turn-on Pleaves the IOC with the DMA and Pulse Count Modes turned off, and with the interrupt system turned off The contents of the internal registers are random.

Direct Memory Access Direct Memory Access is a means to exchange entire blocks of data between memory and peripherals A block is a series of consecutive memory locations.

Once started, the process is mostly automatic; it is done under control of hardware in the IOC, and regulated by the interface.

The DMA process transfers a word at a time, on a cycle-steal basis This 60 1,568,094 means that to transfer a word the IOC requests control of the IDA Bus with BR, halting all other system activity for the duration of IOC control over the Bus, which is one memory cycle When granted the Bus the IOC uses it to accomplish the necessary memory activity.

A transfer of a word is initiated at the request of the interface To request a 5 DMA transfer a device grounds the DMA Request line (DMAR) Since there is only one channel of DMA hardware, and one DMA Request line, only one peripheral at a time may use DMA A situation where two or more devices compete for the DMA channel must be resolved by the firmware, and it is absolutely forbidden for two or more devices to ground MRYM Wat the same time 10 (A data request for DMA is not like an interrupt request; there is no priority scheme, and no means for the hardware to select, identify and notify an interface as the winner of a race for DMA service) Furthermore, a device must not begin requesting DMA transfers on its own; it must wait until instructed to do so by the firmware 15During a DMA transfer of a block of data the IOC knows the next memory location involved, whether input or output, which select code, (and possibly) whether or not the transfer of the entire block is complete This information is in registers in the IOC, which are set up by the firmware before the peripheral is told to begin DMA activity 20 The DMA process is altogether independent of the operation of standard I/O and of the interrupt system, and except for cycle-stealing, does not interfere with them in any way.

Enabling and Disabling the DMA Mode DMA transfers as described above are referred to as the DMA Mode The 25 DMA Mode can be disabled two ways: by a DDR (Disable Data Request), or by a PCM (Pulse Count Mode described later) A DDR causes the IOC to simply ignore DMAR; no more, no less The instruction DMA (DMA Mode) causes the IOC to resume DMA Mode operation; DMA cancels DDR, and vice versa DMA also cancels PCM, and vice versa Also, DDR cancels PCM, and vice versa 30 Also, the IOC turns on as if it has just been given a DDR DDR (along with DIR) is useful during system initialization (or possible error recovery) routines, where it is unsafe to allow any system activity to proceed until the system is properly initialized (or restarted).

Register Set-Up There are three registers that must be set up prior to the onset of DMA activity These are shown in Table 4 below.

TABLE 4

Name Address Meaning DMAPA (= 138) DMA Peripheral Address DMAMA (= 14 J) DMA Memory Address (and direction) DMAC (= 158) DMA Count The four least significant bits of DMAPA specify the select code that is the peripheral side of the DMA activity During an I/O Bus Cycle given in response to 40 a DMA data request, the four least significant bits of DMAPA will determine the states of the PA lines, not the PA register.

DMAC can, if desired, be set to n-I, where N is the number of words to be transferred During each transfer the count in DMAC is decremented During the last transfer the l OC automatically generates signals which the interface can use to 45 recognize the last transfer In the case of a transfer of unknown size, DMAC should be set to a very large count, to thwart the automatic termination mechanism In such cases it is up to the interface to identify the last transfer.

DMAMA is set to the address of the first word in the block to be transferred This is the lowest numbered address; after each transfer DMAMA is automatically so incremented by the 1 OC Bit 15 of DMAMA specifies input or output (relative to the processor); a zero specifies input and a one specifies output.

I 1,568,094 DMA Initiation Once the three registers are set up, a "start DMA" command is given to the interface through standard programmed I/O The "start DMA" command is an output I/O Bus Cycle with a particular combination of ICI, IC 2, (and perhaps) a particular bit pattern in the transmitted word The patterns themselves are subject 5 to agreement between the firmware designer and the interface designer.

Sophisticated peripherals using DMA in both directions will have two start commands, one for input and one for output It's also possible that other information could be encoded in the start command (block size, for instance).

Data Request and Transfer The interface exerts DMAR low whenever it is ready to exchange a word of data When DMAR goes low the IOC requests control of the IDA Bus When granted the Bus, the IOC initiates an I/O Bus Cycle with the PA lines controlled by DMA Peripheral Address, and does a memory cycle (The order of these two operations depends upon the direction of the transfer) 15 Next the IOC increments DMA Memory Address and decrements DMA Count.

DMA Termination.

I here are two automatic termination mechanisms, each usable only when the block size is known in advance, and each based on the count in DMAC going 20 negative Recall that at the start of the operation part of DMAC is set to n-l, where n is the size of the transfer in words.

During the transfer of the nth word, the IOC will signal the interface by temporarily exerting IC 2 high during the I/O Bus Cycle for that exchange The interface can detect this and cease DMA operations 25 The other means of automatic termination is detection by the interface of a signal called Count Minus (CTM) CTM is generated by the IOC; it means that the count in the least significant 5 bits of DMAC has gone negative CTM is a steadystate signal, given as soon as, and as long as, the count in DMAC is negative CTM is generated by the IOC but is not utilized in the configuration employed in the 30 hybrid microprocessor That is, CTM never leaves the IOC.

For DMA transfers of unknown block size, the interface determines when the transfer is complete, and flags or interrupts the processor.

The Pulse Count Mode The Pulse Count Mode is a means of using the DMA hardware to 35 acknowledge, but do nothing about, some number of leading DMA requests The Pulse Count Mode is initiated by a PCM, and resembles the DMA Mode, but without the memory cycle The activities of the three registers DMAPA, DMAC and DMAMA remain as described for DMA Mode operation The only difference is that no data is exchanged with memory; no memory cycle is given (The IOC 40 even requests the IDA Bus, but when granted it, releases it without doing the memory cycle).

A dummy I/O Bus Cycle is given, the DMAC decremented Also, the automatic termination mechanisms still function; in fact, they are the object of the entire operation The Pulse Count Mode is intended for applications like the 45 following: Suppose it were desired to move a tape cassette a known number of files.

The firmware puts the appropriate number into DMAC, gives PCM, and instructs the cassette to begin moving The cassette would give a DMA Request each time it encounters a file header In this way the DMA hardware and the automatic termination mechanism count the number of files for the cassette PCM cancels 50 DMA and DDR Both DMA and DDR cancel PCM.

Extended Bus Grant Two of the signals of the IDA Bus are Bus Request (BR) and Bus Grant (BG).

These two signals are used, for instance, during a DMA transfer The IOC requests the IDA Bus (in order to do the necessary memory cycle) by grounding BR When 55 BG is given the IOC then knows to proceed.

Other entities can also request the IDA Bus All chips in the system listen to Bus Request, and Bus Grant cannot go high until all chips consent to it; a 'wired and' does that If two chips request the IDA Bus at the same time, the winner of BG is specified, and the loser is kept waiting by a daisy-chain priority scheme for 60 the routing of Bus Grant This is depicted in Figure 124.

1,568,094 As Figure 124 shows, the IOC is the initial receiver of Bus Grant; if it's not who is requesting the Bus, then the tester gets Bus Grant next If the tester is not requesting the Bus, then the next device in the chain has the chance to use Bus Grant A device gives the next device its chance by passing along the signal EXBG (Extended Bus Grant) The requesting device understands EXBG as a Bus Grant, 5 and refuses to send EXBG any further.

IOC Machine Instructions Assembly language machine instructions are three-letter mnemonics Each machine instruction source statement corresponds to a machine operation in the object program produced by an assembler 10 Notation used in representing source statement is explained below:

reg 0-7 Register location.

reg 4-7 Register location.

I Increment indicator (for place and withdraw instructions); for BPC memory reference instructions it is an indirect addressing indicator 15 D Decrement indicator for place and withdraw instructions.

IID The slash indicates that either item (but not both) may be used at this place in the source statement.

lI Brackets indicate that the item contained within them is optional.

Stack Group 20 The stack group manages first-in, last-out firmware stacks The "place" instruction puts a word or a byte into a stack pointed at by C or D The item that is placed is reg 0-7 The "withdraw" instructions remove a word or a byte from a stack pointed at by C or D The removed item is written into reg 0-7.

After each place or withdraw instruction the stack pointer is either 25 incremented or decremented, as specified in the source text by the optional I or D, respectively In the absence of either an I or a D, the assembler defaults to I for place instructions, and D for withdraw instructions.

Place instructions increment or decrement the stack pointer prior to the placement, and withdraw instructions do it for the withdrawal In this way the 30 pointer is always left pointing at the top of the stack.

For byte operations bit 15 of the pointer register (C or D) indicates left or right half (one = left, zero = right) Stack instructions involving bytes toggle bit 15 at each increment or decrement; but the lower bits of the pointer increment or decrement only every other time 35 The values of C and D for place-byte and withdraw-byte instructions must not be the address of any internal register for the BPC, EMC, or IOC The place and withdraw instruction can also initiate I/O operations, so they are also listed under the I/O group The stack group instructions are listed below.

PWC reg 0-7 l,I/,l 40 Place the entire word of reg into the stack pointed at by C.

PWD reg 0-7 l,I/,DI Place the entire word of reg into the stack pointed at by D.

PBC reg 0-7 l,I/,Dl 45 Place the right half of reg into the stack pointed at by C.

PBD reg 0-7 l,I/,Dl Place the right half of reg into the stack pointed at by D.

WWC reg 0-7 QI/,DI Withdraw an entire word from the stack pointed at by C, and put it into reg.

WWD reg 0-7 l,I/,Dl 50 Withdraw an entire word from the stack pointed at by D, and put it into reg.

WBC reg 0-7 l,I/,Dl Withdraw a byte from the stack pointed at by C, and put it into the right half of reg.

WBD reg 0-7 l,I/,Dl Withdraw a byte from the stack pointed at by D, and put it into the right half of reg 55 I 1,568,094 I/O Group The states of MI' and m 2 during the I/O Bus Cycles initiated by the instructions listed hereinafter depend upon which register is the operand of the instructions as shown in Table 5 below.

TABLE 5

Ir' M 7 R 4 1 1 R 5 1 0 R 6 0 1 R 7 0 0 mem ref inst reg 4-7 l,I 1 Initiate an I/O Bus Cycle Memory reference instructions 'reading' from reg cause input I/O Bus Cycles; those 'writing' to reg cause output I/O Bus Cycles In either case the exchange is between A or B and the interface addressed by the PA register (Peripheral Address Register 1 1); reg 4-7 do not really exist as physical registers within any chip on the IDA Bus 10 Stack inst reg 4-7 l,/,DI Initiate an I/O Bus Cycle Place instructions 'read' from reg, therefore they cause input I/O Bus Cycles Withdraw instructions 'write' into reg, therefore they cause output I/O Bus Cycles In either case the exchange is between the addressed stack location and the interface addressed by PA 15 Interrupt Group The interrupt group instructions are listed below EIR Enable the interrupt system This instruction cancels DIR.

DIR 20 Disable the interrupt system This instruction cancels EIR.

DMA Group The DMA group instructions are listed below.

DMA Enable the DMA mode This instruction cancels PCM and DDR 25 PCM Enable the Pulse Count Mode This instruction cancels DMA and DDR.

DDR Disable Data Request This instruction cancels the DMA Mode and the Pulse Count Mode 30 IOC Machine-Instruction Bit Patterns Figures 125 A-C depict the bit patterns of the IOC machine-instructions.

Internal Description of the IOC

The IOC may be understood with reference to the detailed block diagram of Figures 126 A-C A DMP IDA micro-instruction provides communication from 35 the IDA Bus to the internal I-W Bus in the IOC A SET IDA microinstruction provides communication from the IOC to the IDA Bus; SET IDA drives the IDA Bus according to the contents of the O Register, which in turn is set with a SET O micro-instruction.

As in the BPC, an Address Decode section and associated latches detect the 40 appearance of an IOC-related register address Such an event results in the address being latched and sent to the Bus Control ROM as qualifier information.

1,568,094 11) There are two main RO Ms in the IOC These are the Bus Control ROM and the Instruction Control ROM The Bus Control ROM is responsible for generating and responding to activity between the IOC and IDA and busses This class of activity consists of memory cycles, I/O Bus cvcles, interrupt polls, interrupt requests, and requests for DMA The Instruction Control ROM is responsible for 5 recognizing fetched IOC machine-instructions, and for implementing the algorithms that accomplish those instructions Frequently, the Bus Control ROM will undertake activity on the behalf of the Instruction Control ROM These two RO Ms are physically merged, and share a common set of decodable microinstructions 10 However, each of the two RO Ms has its own state-counter For each ROM, the next state is explicitly decoded by each current state.

The I Register serves a function similar to that of the I Register of the BPC It serves as a repository to hold the fetched machine-instruction and to supply that instruction to Instruction Decode Instruction Decode generates Asynchronous 15 Control Lines that are similar in function to those of the BPC Instruction Decode also generates Instruction Qualifiers that represent the machineinstruction to the ROM mechanism.

The W Register is used primarily in conjunction with the execution of the place and withdraw machine-instructions Each such instruction requires two 20 memory cycles; one to get the data from the source, and one to transmit it to the destination W serves as a place to hold the data in between those memory cycles.

The DMP W function is complex, and is implemented by a DMP W and Crossover Network If the place or withdraw operation is for the entire word, the crossover function is not employed, and the pairs of signals OLB, DLB, and, OMB, 25 DMB, work together to implement a standard 16-bit DMP W However, a byte oriented place or withdraw instruction involves the dumping of only a single byte of W onto the MC Bus This is done in the following combinations: leastsignificant byte of W to most-significant half of the 11 W Bus; least-significant byte of W to least-significant half of the Il D Bus; and, most-significant byte of W to least 30 significant half of the WD Bus The exact mode of operation during a DMP W is determined by W Register Control on the basis of the Asynchronous Control Lines from Instruction Decode.

Another use of W occurs during an interrupt During an interrupt poll the response of the requesting peripheral(s) is loaded into the leastsignificant half of 35 W These eight bits represent the eight peripherals on the currently active (or enabled) level of interrupt Each peripheral requesting interrupt service during the poll will have a one in its corresponding bit This eight-bit pattern is fed to a Select Code Priority Resolver and 3 LSB Interrupt Vector Generator That circuitry identifies the highest numbered select code requesting service (should there be 40 more than one) and generates the three least-significant bits of binary code that correspond to that peripheral's select code The next most-significant bit corresponds to the level at which the interrupt is being granted, and it is available from the interrupt circuitry in the form of the signal PHR.

The interrupt vector is made up of the three least-significant bits from W, as 45 encoded by the priority resolver, the bit corresponding to -PJR, and the 12 bits contained in the Interrupt Vector Register (IV) Thus, when an interrupt is granted the complete interrupt vector is placed on the IDC Bus by simultaneously giving the following micro-instructions: EPR, DMP ISC, UIG, and DMP IV.

The C and D Registers are the pointer registers used for place and withdraw so operations Each of these registers is equipped with a 15-bit increment and decrement network for changing the value of the pointer Whether to increment or decrement is controlled by the C and D Register Control circuit according to the Asynchronous Control Lines.

The DMA Memory Address (DMAMA) and DMA Count (DMAC) Registers 55 are similar to the C and D Registers, except that DMAMA always increments, and that DMAC always decrements In addition, the decrement for DMAC is a 16bit decrement These two registers are used in conjunction to identify the destination or source address in memory of each DMA transfer, and to keep a count of the number of such transfers so far 60 Two separate mechanisms are provided for the storage of peripheral select codes The DMAPA Register is a four-bit register used to contain the select code of any peripheral that is engaged in DMA.

The other mechanism is a three-level stack, also four bits wide, whose uppermost level is the Peripheral Address Register (PA) It is in this stack that 65 I 1,568,094 34156,443 peripheral select codes for both standard I/O and interrupt I/O are kept The stack is managed by the interrupt circuitry.

The Peripheral Address Lines (PA Lines) reflect either the contents of DMAPA or PA, depending upon whether or not the associated I/O Bus cycles are for DMA or not, respectively This selection is controlled by the DMA circuitry, 5 and is implemented by the Peripheral Address Bus Controller.

Three latches control whether or not the Interrupt System is active or disabled, whether or not the DMA Mode is active or disabled, and, whether or not the Pulse Count Mode is active or disabled Those latches are respectively controlled by these machine-instructions; EIR and DIR for the Interrupt System, 10 and, DMA, PCM, and DDR for DMA-type operations.

The interrupt circuitry is controlled by a two-bit state-counter and ROM The state-count is used to represent the level of interrupt currently in use Requests for interrupt are made into qualifiers for the ROM of the interrupt controller If the interrupt request can be granted it is represented by a change in state of that ROM, 15 as well as by instructions decoded from that ROM and sent to the Interrupt Grant Network This circuitry generates the INT signal used to cause an interrupt of the BPC, and, generates an INTQ qualifier that represents the occurrence of an interrupt to the main ROM mechanism in the IOC so that an interrupt poll can be initiated 20 The DMA circuitry is similar in its method of control It has a ROM controlled by a three-bit state-counter.

Description of the EMC

The Extended Math Chip (EMC) executes 15 machine-instructions Eleven of these operate on BCD-Coded three-word mantissa data Two operate on blocks 25 of data of from 1 to 16 words One is a binary multiply and one clears the Decimal Carry (DC) register.

Unless specified otherwise, the contents of the registers A, B, SE and DC are not changed by the execution of any of the EMC's instructions The EMC communicates with other chips along the IDA Bus in a way similar to how the IOC 30 communicates via the Bus.

Notation A number of notational devices are employed in describing the operation of the EMC.

The symbols < > denote a reference to the actual contents of the named 35 location.

A,-3 and B,,3 denote the four least significant bit-positions of the A and B registers, respectively Similarly, A 4,5 denotes the 12 most-significant bit-positions of the A register And by the previous convention, represents the bit pattern contained in the four least-significant bit-positions of A 40 ARI is the label of a four-word location in R/W memory; 777708 to 77773, AR 2 is the label of a four-word arithmetic accumulator register located within the EMC, and occupying register addresses 20, to 238.

SE is the label of the four-bit shift-extend register, located within the EMC.

Although SE is addressable, and can be read from, and stored into, its primary use 45 is as internal intermediate storage during those EMC instructions that read something from, or put something into, A,3 The address of SE is 24,.

DC is the mnemonic for the one-bit decimal-carry register located within the EMC DC is set by the carry output of the decimal adders of the EMC Sometimes, in the illustrations of what the EMC instructions do, DC is shown as being part of 50 the actual computation, is well as being a repository for overflow In such cases the initial value of DC affects the result However, DC will usually be zero at the beginning of such an instruction The firmware sees to that by various means.

DC does not have a register address Instead, it is the object of the BPC instructions SDS and SDC (Skip if Decimal Carry Set and Skip if Decimal Carry 55 Clear), and the EMC instruction CDC (Clear Decimal Carry).

Data Format The EMC can perform operations on twelve-digit, BCD-encoded, floating point numbers Such numbers occupy four words of memory, and the various parts of a number are put into specific portions of the four words Figure 127 depicts this 60 format.

1,568,094 1,568,094 35 The twelve mantissa digits are denoted by D 1 to D 2 D, is the mostsignificant digit, and D 12 is the least-significant digit It is assumed that there is a decimal point between D 1 and D 2 Es and M each represent positive and negative (signs) by zero and one, respectively.

EMC Machine Instructions 5 Assembly language EMC machine-instructions are three-letter mnemonics.

Each machine instruction source statement corresponds to a machine operation in the object program produced by an assembler.

Notation used in representing source statements is explained below:

N Constant whose value is restricted to the range: 1 N 20 = 16,, 10 The Four-Word Group The four-word group instructions are listed below.

CLR N Clear N words This instruction clears N consecutive words, beginning with location < A > Recall that: 1 N 16, 15 0 location < A > 0 location < A > + 1 0 0 < location < A > + N-l XFR N Transfer N words This instruction transfers the N consecutive words beginning at location < A > to those beginning at < B > Recall that: 1 N > 16, 20 location < A > location < B > location < A > + 1 location < B > + 1 0 0 0 location < A > + N-I location < B > + N-i The Mantissa Shift Group The mantissa shift group instructions are listed below.

MRX 25 Mantissa right shift of ARI r times, r= < Bo 13 >, and 0 r S 178 = 1510.

1st shift: < A,3 > -D,; < D, > Di+; D 12 is lost jth shift: 0 D,; < D, > e D,+; D 12 is lost rth shift: O D 1; < D > D+ 1; < D 12 > A,3; O DC; O A 4 _ 15 Notice: 30 1) The first shift does not necessarily shift in a zero; the first shift shifts in < AO 3 >.

2) The last digit shifted out ends up as < A,-3 >.

3) If only one digit-shift is done, (I) and ( 2) happen together.

4) After ( 2), SE is the same as < A,,3 > 35 5) Any more than eleven shifts is wasteful.

MRY Mantissa right shift of AR 2 < B 133 > -times Otherwise identical to MRX.

MLY Mantissa left shift of AR 2 one time.

< Ao_ 3 > D 12; < D, > - D,_,; < D, > -A O _ 3; O DC; O A 4 _ 15 At the conclusion of the operation SE equals < Ao_ 3 >.

DRS 5 Mantissa right shift of ARI one time.

0 D 1; < D, > D,+; < D 12 > Ao_ 3; 0 DC; O A 4 _ 15 At the conclusion of the operation SE equals < Ao_, >.

NRM 10 Normalize AR 2 The mantissa digits of AR 2 are shifted level until d, 4 0 If the original D, is non-zero, no shifts occur If twelve shifts occur, then AR 2 equals zero, and no further shifts are done The number of shifts is stored as a binary number in Bo_ 3.

i O B 4 _,15;#of shiftsBo_ 3 15 ii For O < < B_ 3 > < 11; O -, DC iii If < Bo_ 3 > = 12; 1 DC The Arithmetic Group The arithmetic group instructions are listed below.

CMX 20 Ten's complements of ARI The mantissa of ARI is replaced with its ten's complement, and DC is set to zero.

CMY Ten's complement of AR 2 The mantissa of AR 2 is replaced with its ten's complement, and DC is set to zero 25 CDC Clear Decimal Carry Clears the DC register; O DC.

FXA Fixed-point addition The mantissas of ARI and AR 2 are added together, along with DC (as a D,2-digit), and the result is placed in AR 2 If an overflow occurs, DC is set 30 to one, otherwise, DC is set to zero at the completion of the addition.

During the addition the exponents are not considered, and are left strictly alone The signs are also left completely alone.

< initial value of DC (overflow)-< "D'o D 1 D 2 D 3 D 2 -+AR 2 DC (final value of DC) MWA Mantissa Word Add < B > is taken as four BCD digits, and added, as D 9 to D 12, to AR 2 DC is also added in as a D 12 The result is left in AR 2 If an overflow occurs, DC is set to one, otherwise, DC is set to zero at the completion of the addition 40 During the addition the exponents are not considered, and are left strictly alone, as are the signs MWA is intended primarily for use in rounding routines.

1,568,094 < B > = 09 D 10 D 1, D 12 = D 1 Do D 11 D 12 + < DC > initial value of DC (overflow)-< -D-D D, D D 10 D 11 D 12 AR 2 DC (final value of DC) FMP 5 Fast multiply The mantissas of ARI and AR 2 are added together (along with DC as D 12) < B,3 > -times; the result accumulates in AR 2.

The repeated additions are likely to cause some unknown number of overflows to occur The number of overflows that occurs is returned in A_, FMP is used repeatedly to accumulate partial products during BCD 10 multiplication FMP operates strictly upon mantissa portions; signs and exponents are left strictly alone.

< AR 2 >+(() ())+DC-AR 2 DC doesn't enter into these Represents the initial repeated additions except for value of DC 15 the first one as shown at right 0 DC immediately after each overflow 0 - DC, 0 A 4,1, # of overflows -+ A,3 MPY 20 Binary Multiply Using Booth's Algorithm The (binary) signed two's complement contents of the A and B registers are multiplied together The thirty-two bit product is also assigned two's complement number, and is stored back into A and B B receives the sign and most-significant bits, and A the leastsignificant bits.

< B > + < ARI > + < DC > AR 2 (repeatedly until overflow) 30 then 0-4 DC, 0 B 4 _ 15, n BO 3 FDV is used in floating-point division to find the quotient digits of a division.

In general, more than one application of FDV is needed to find each digit of the quotient 35 As with the other BCD instructions, the signs and exponents of ARI and AR 2 are left strictly alone Figures 128 A-C depict the bit patterns of the EMC machine-instructions.

Internal Description of the EMC

Figures 129 A-C depict the internal block diagram of the EMC The micro 40 instructions SET IDA and DMP IDA are the communication link between the external IDA bus and the internal I-DM bus An instruction is fetched by the BPC and placed on the IDA Bus All chips connected to the bus decode it and act accordingly.

If the fetched instruction is not an EMC instruction, or if an interrupt request 45 is made, the EMC ignores the instruction Upon completion of the instruction by another chip or upon completion of the interrupt, the EMC examines the next I 1,568,094 instruction If the instruction is an EMC instruction, it is executed and data effected by it are transferred via the IDA bus At the appropriate point during the execution of the instruction, SYNC is given to indicate to other chips that it has finished using the IDA Bus and consequently to treat the next data that appears on IDA as an instruction 5 The Word Pointer Shift Register points to the register to be effected by the DMPXISETX or DMPY/SETY micro-instructions and the registers to be bussed to the Adder It is also employed as a counter in some instructions.

* Once data is on the DM Bus, it can then be loaded into one of several registers by issuing the appropriate micro-instruction The data paths between 10IDM and the X and Y registers can be controlled in two ways One way is by issuing an explicit micro-instruction, e g, SET Y 2 would set the Y 2 Register with the data on SIR Another way of accomplishing the same thing would be to issue a SET Y for a word pointer equal two.

The X Registers are used for all shifting operations, the direction being 15 instruction dependent.

The Shift Extend Register is a four-bit addressable register used to hold a digit to be shifted into the X register or one that has been shifted out of X.

The Arithmetic Extend Register is a four-bit addressable (read-only) register used to accumulate a decimal digit for the FMP and FDV instructions and serves as 20 a number-of-shifts accumulator in the NRM instruction.

The N Counter is used to indicate the number of words involved in the CLR and XFR instructions, the number of shifts in MRX, MRY, MLY and DRS, the multiplier digit in FMP, and a loop counter in MPY.

The Adder is capable of either binary or BCD addition with the complementer 25 being capable of either one's or nine's complementation of the Y Register inputs A carry-in signal is available from three sources for generating two's or ten's complement arithmetic.

The Decimal Carry Register is a one-bit register that can hold the carryout of the Adder ADRI is the address of the ARI operand; its two least significant bits 30 are determined by the word pointer, e g, WPO => 00, W Pl => 01, etc.

The Address Decode ROM generates the control signals used for-reading from or writing into a register in either the Extended Register Access (ERA) mode or the normal addressing mode of operation Miscellaneous hardware has been added to enhance the execution of the two's complement binary multiply instruction (MPY) 35 BUS CONTROL The direction of data flow on the IDA bus is controlled by the bus control circuit of Figures 16 and 130 Gate U 19 provides the basic definition of the direction of data flow The direction of data flow is normally from the microprocessor to the memory since address is the first data on the IDA bus when 40 the memory cycle starts This condition is controlled by the STM signal into gate U 19 being logically false Once the memory cycle starts, the Processor Driving (PDR) signal indicates that data flow is from processor to memory In some instances, such as during direct memory access (DMA) operation, the PDR signal does not indicate the direction of data flow on the IDA bus For this case, the Write 45 (WRIT) signal is AN Ded into U 19 to decide bus direction Also, since the first thirty-two memory addresses are actually registers within the microprocessor, the Register Access Line (RAL) is used to prevent bus conflict when accessing register information Finally, the Monitor Buffer Control (MBC) signal is also AN Ded in to define bus direction during testing The resulting output of U 19 is called the Stay 50 Off Bus (SOB) signal since it indicates those times when the memory section is not allowed to be on the IDA bus The bus control circuit also controls the direction of the bidirectional data buffer located within the hybrid microprocessor (processor buffer out, PBO, signal) Since the microprocessor buffer and the memory buffers normally operate in tandem (i e, when the microprocessor buffer points out, the 55 memory buffer points into memory, and when the memory buffer points out, the microprocessor buffer points into the microprocessor) the SOB signal is inverted by U 17 A and used to control the microprocessor's buffer.

The bus control circuit also decodes the upper three bits of the IDA bus (IDA 12 to IDA 14) using a dual open-collector output 2-line to 4-line decoder 60 (Texas Instruments device SN 74 L 5156 or equivalent) as a one-of-eight decoder.

The memory space is thus broken into 4096-word divisions The memory map of Figure 6 shows allocation of read-only and read/write memory in the memory space The first three outputs of the decoder are wire-O Red together to indicate 1,568,094 that the mainframe language ROM memory section is being accessed The next three outputs of the decoder are also wired-O Red together with the twopole switch SI determining whether or not the upper two outputs are to be included in the wire-O Ring The resulting output determines which portion of the memory space is taken by the optional plug-in ROM memory section The balance of the 5 address space is assumed to be read/write memory The boundary between the plug-in ROM and the read/write memory is determined by switch SI which is set according to the amount of optional read/write memory that the calculator contains The STM (Start Memory) signal is used to latch the outputs of the decoder into the latches U 16 A and U 16 B for the balance of the memory cycle since 10 address information is only present on the IDA bus at the beginning of the memory cycle The output of the latches is gated with the Stay Off Bus (SOB) signal to prohibit the memory section from placing data onto the IDA bus until permitted to do so If the data to be read is located in the mainframe language ROM memory section, the bus control circuit releases the mainframe ROM buffer control 15 (MFRBC) signal to allow the ROM to place data on the IDA bus and point the bidirectional buffer associated with the ROM from the memory to the microprocessor Likewise, if the data to be read is located in the plug-in ROM memory section, the bus control circuit releases the plug-in ROM buffer control (PIRBC) signal If the data, instead, is to be read from the read/write memory 20 sections, the bus control simply removes the Stay Off Bus signal to allow the read/write memory to place the data on the IDA bus at its discretion.

MEMORY TIMING AND CONTROL The Memory Timing and Control block of Figure 16 may be understood with reference to the detailed schematic diagram of Figure 131 This block comprises a 25 small state counter, U 21, which counts the number of states in the memory cycle.

The counter initiates its sequence when the STM signal occurs if the memory cycle is referencing addresses located in the memory section (indicated by the RAL signal not being true) The counter is clocked on the rising edge of the phase two clock On the first clock after the STM occurs, flip-flop U 21 A changes state and 30 the STMROM signal is generated thus, the STM signal to the ROM is delayed by one-half of a state time to allow more address setup time as required by the ROM.

On the next state time, the second flip-flop U 21 B is set provided that the Memory Busy (MEB) signal is not true The Memory Busy signal is used to suspend the sequencing should the read/write memory be addressed and not be able to 35 participate in the memory cycle immediately (such as being in a refresh cycle when the memory cycle starts) When the second flip-flop is set, the Unsynchronized Memory Complete (UMC) signal is generated to indicate to the microprocessor that the memory cycle is complete Figure 109 illustrates the timing associated with the memory cycle 40 READ-ONLY MEMORY Both the plug-in ROM memory section and the mainframe language ROM memory section shown in the block diagram of Figure 4 are composed of a number of N-channel MOS sixteen-kilobit integrated circuits These devices are organized as 1024 words of 16 bits and contain their own dynamic address latches and mask 45 programmable address decode circuits The organization of the read-only memory section is shown in Figure 132 The mainframe language ROM memory section contains twelve such devices The plug-in ROM modules contain either two or four such devices depending on the features which the ROM module contains An example of the ROM circuitry used in all the read-only memory sections is shown 50 in Figure 133 The 16-bit IDA bus input/outputs are used for receiving the address information from the microprocessor and for outputting the data accessed When the STM input is not true, the ROM assumes that memory address information is on the IDA bus and continually inspects IDA bits 10 through 14 to determine if it has been addressed The device is designed such that power consumption when not 55 addressed is approximately one-tenth the consumption when addressed Therefore, the power consumption in the calculator is reduced by applying the power to the device only when it is addressed Consequently, each ROM device has an associated "power pulse" circuit 211 which is turned on by the ROM address decode circuit (powered separately from the + 12 volts input) only when the ROM 60 is addressed If the ROM detects its address, it exerts the power pulse (PWP) output which switches on the transistor and applies + 12 volts to the voltage switch (VSW) input that powers the balance of the ROM circuit The ROM latches the I 1,568,094 address information and starts its data access when the STM signal (STMROM) is exerted The accessed data is placed on the IDA bus as soon as it is accessed (approximately 300 ns) provided the output drivers are not disabled (Output Data Disable, ODD) by the bus control circuit.

READ/WRITE MEMORY 5 Both the basic read/write memory section and the optional read/write memory section shown in the block diagram of Figure 4 are identical in structure As shown in the detailed schematic diagram of Figure 134, each section contains an address decoder Ul which examines the upper three bits of the address (IDA 12 through IDA 14) and generates one of three outputs depending on whether the address is 10 K, 60 K, or 50 K octal A jumper is used to select which address the memory section responds to thereby defining the memory section as the basic read/write section or the optional read/write section The output of the address decoder is latched in U 5 along with the balance of the address (U 12, U 14, U 16) when the Start Memory (STM) signal occurs The output of U 5 is gated with the STM signal to 15 generate the Request for service (REQ) signal which is sent to the read/write memory control circuit The output of the address latches goes directly to the read/write memory devices with the exception of the lower six bits which first traverse a two-to-one data selector (U 17 and U 18) The other input of the data selector comes from the refresh address counter (U 20 and U 21) The lower six bits 20 of the address are selected by a read/write memory control circuit (DATA SELECT) as determined by the read/write cycle being either a refresh cycle or a normal memory cycle At the start of the refresh cycle, the read/write control circuit first increments the refresh address counter to advance it to the next memory address to be refreshed 25 The read/write memory control circuit is shown in the detailed schematic diagram of Figure 135 The state of the memory control is determined by the four flip-flops of devices U 6 and U 7 The flip-flops of U 7 indicate that a refresh cycle is in progress The waveforms associated with the control cir3.0 cuitry are shown in Figure 136 The flip-flops are clocked on the positive-going 30 edge of the phase two clock When the STM signal occurs, flip-flop U 6 A will be set via U 4 A and U 4 B on the next clock provided neither flip-flop of U 7 is set The read/write memory devices are enabled (CEN) via U 9 A whenever either U 6 A or U 6 B are set Whether the read/write memory devices perform a read or write operation is determined by gate U 2 A (RW) If the RW signal is a logical high, 35 the read/write devices are in the read mode To generate the write mode, three conditions are necessary: the Write (WRIT) signal from the microprocessor must be logically true; a refresh cycle must not be in progress (U 7 A and U 7 B are not set); and the latch composed of gates U 3 C and U 3 D must be set (U 3 C output high).

The latch is cleared by the Request (REQ) signal not being true The latch is set at 40 the beginning the next phase two clock following the setting of flip-flop U 6 B If the memory cycle is a read cycle, the Output Buffer Enable (OBC) signal, which allows the output of the read/write memory devices to be placed on the IDA bus, is generated via U 2 C when the memory timing and control circuit removes the Stay Off Bus (SOB) signal 45 The refresh cycle is initiated via gate U 4 B when the monostable U 21 delay period has expired provided that the microprocessor is not requesting use of the memory When the cycle is initiated, flip-flip U 7 A will be set which causes the read/write cycle by setting U 6 B via U 4 A and U 4 B on the next state time Secondly, flip-flop U 7 A also generates the Memory Busy (MEB) signal via U 2 B and U 3 B to 50 notify the memory timing and control circuit should the microprocessor start a memory cycle while the refresh cycle is in progress Thirdly, flip-flop U 7 A also drives the RW signal, via U 8 B, to the read logic level as required by the read/write memory devices during the refresh cycle The second flip-flop of the refresh cycle, U 7 B will be set the state time following the setting of flip-flop U 6 A to sustain the 55 conditions required for the refresh cycle When the read/write cycle has expired, indicated by flip-flop U 6 B resetting, the next state time flip-flop U 7 B resets thus terminating the refresh cycle.

The read/write memory devices, Texas Instruments devices TMS 4030 or equivalent, are shown in Figure 137 The devices are organized as 4096 addresses of 60 one bit The read/write (RW) control signal determines if the operation is a read (RW high) or a write operation If the cycle is a write cycle, the data written is accepted from the Data In (DIN) inputs If the cycle is a read cycle, the data is presented at the Data Out (DOUT) outputs and will be placed onto the IDA bus 1,568,094 41 1,568,094 41 when the Output Buffer Enable (OBE) signal is generated by the read/write memory control The read/write cycle is started when the Chip Enable (CEN) signal occurs provided that the devices have been selected by the Chip Select (CS) signal The memory section is capable of byte operation as determined by flip-flop U 5 and gates U 8 C and U 8 D The memory bus control signal Byte (BYTE) from the 5 microprocessor indicates if the memory operation is to be byte operation If the Byte signal does not occur, both bytes are enabled If the byte signal does occur, the address bit IDA 15, latched in U 5 B when STM occurs, will determine which byte is being referenced.

KDP CONTROL 10 Referring now to Figure 138, there is shown a detailed schematic diagram of an I/O interface included within the KDP control block of Figure 4 When the Initialize (INIT) signal on the I/O bus occurs, the power-up (PUP) signal is generated by the I/O interface and used throughout the KDP control circuitry to initialize the various flip-flops and counters The I/O interface section contains the 15 1/0 operation decoder composed of the two three-to-eight decoders U 21 and U 29.

The decoders are enabled whenever the KDP's peripheral address is detected by gate U 17 Decoder U 21 generates the read register 4 (R 4) and read register 5 (R 5) signals The R 4 signal is used to send the keycode information to the microprocessor The R 5 signal is used to send the KDP status information to the 20 microprocessor The status latch U 53 as well as gates to place the data on the I/O bus is located in the I/O interface section Bit O indicates that the LED display unit contains 32 alphanumeric positions Bit 1 indicates if the printer is out of paper Bit 2 indicates that the printer is busy printing Bit 3 indicates that the reset key on the keyboard has been depressed Bit 4 indicates that the keyboard section is exerting 25 the interrupt request signal (IRL).

The other decorder, U 29, generates four register strobe signals, R 4 SB, W 45 B, WSSB, and W 6 SB The R 4 SB signal indicates to the keyboard scan control circuitry that the pending keycode has been accepted by the microprocessor The W 4 SB signal loads the display character code from the microprocessor into the 30 data register in the KDP memory section, causes the timing generator circuitry to generate the signals to store the character code in the read/write memory in the memory section, and causes the display control section to terminate displaying until all the new data has been received The W 6 SB signal also loads the data register in the memory section with the printer character code, and causes the 35 timing generator section to transfer the code to the read/write memory in the memory section New printer data is not sent to the KDP control until the printer busy bit in the KDP status indicates to the microprocessor that the printer is no longer busy The W 5 SB signal updates the "command register" of the KDP control Bit O of the I/O command word generates the print (PRT) signal via gate 40 U 57 A which sets the print command flip-flop located in the print control section.

Bit I generates the display (DSP) signal via gate U 51 B which, similarly, sets the display command flip-flop located in the display control section Bit 2 is used to turn on an astable multivibrator (gates U 30 A and U 30 B) which produces the audio "beep" sound of the calculator Bits 3 and 4 control the command register "run 45 light" flip-flop U 31 A which turns on and off the "run light" located on the left side of the LED display unit Since the flip-flop is a JK type flip-flop, if both bits 3 and 4 are set, the run light will toggle to the opposite state If bit 3 only is set, the run light will be turned off If bit 4 only is set, the run light will be turned on Similarly, bits 5 and 6 control the command register cursor flip-flop U 31 B which determines which 50 type of cursor, insert or replace, symbol can be displayed in the LED display unit.

If bit 5 only is set, the cursor will be the replace cursor.

The switches used on the calculator keyboard are single-pole, singlethrow switches The circuitry included within the KDP control block of Figure 4 which scans for keyboard input and sends the information to the microprocessor via the 55 I/O bus is shown in the detailed schematic diagram of Figure 139 The keyboard scan counter U 65 A and U 65 B determines which key is being examined for closure.

The counter is clocked at approximately a 2 5 K Hz rate by an oscillator made of gates U 37 A and U 37 B and associated components The lower four bits of the counter is decoded by U 48 to select one of sixteen column select lines to the 60 keyboard The upper three bits of the counter are used by U 57 to select one of eight row scan lines from the keyboard Should the selected keyswitch be depressed, the column select input will be connected to the row select input and the output of the row selector (U 57) will go to the logic low state indicating that a keyswitch closure has been detected.

When a key closure has been detected, flip-flop U 27 A will be set via inverter U 36 B The complement output of flip-flop U 27 A inhibits the keyboard scan counter from counting further thereby saving the keycode for the key closure that 5 was detected The flip-flop also causes flip-flop U 27 B to become set via U 39 C The output of flip-flop U 27 B then sets the latch U 62 provided that an interrupt poll is not in progress (U 56 C) The output of the latch causes the low priority interrupt request (IRL) signal to the microprocessor to be set, thereby indicating that a key closure has been detected and that interrupt service is required At the 10 microprocessor's convenience the service routine is performed The first operation of the service routine is to perform an interrupt poll to determine which I/O device is requesting service The fact that the interrupt poll is taking place is indicated to the keyboard scan circuit by the Interrupt (INT) signal being exerted when peripheral address bit 3 (PA 3) is logically false (poll of low level interrupt I/O IS devices) The keyboard scan circuit, since it has generated an interrupt request, responds by exerting the I/O bus data bit 0 (IOD 0) which corresponds to its peripheral address via gate U 61 C Upon determining that the keyboard scan circuit is interrupting, the microprocessor executes the keyboard service routine During the service routine, an I/O cycle which reads R 4 occurs When the I/O cycle 20 occurs, the keycode from the keyboard scan counter is placed on the I/O bus via the eight gates of U 58 and U 59 The I/O cycle also causes the Read Register 4 Strobe (R 4 SB) which via U 37 C resets flip-flop U 27 B The output of U 27 B will, in turn, set U 27 A, provided that the debounce counter U 28 declares the key no longer closed, and thus allows the kevboard scanning to resume The debounce counter is 25 reset whenever a key closure occurs As the key is released, the debounce counter will be reset each time a key bounce occurs until finally no further key bounce occurs and the debounce counter counts to the point that it enables gate U 37 D.

The keyboard scan circuit also has the automatic key repeat feature The latch, composed of gates U 39 A and U 39 B is reset whenever no key closure is 30 detected Likewise, the repeat counter U 47 is held reset as long as no key closure is detected When a key closure is detected, the repeat counter is allowed to start counting (but starts counting over again each time that a key bounce occurs as the key is closing) When the repeat counter's output pin 1 goes high, the latch composed of gates U 39 A and U 39 B is set and the repeat feature is enabled by 35 enabling gate U 39 D Thereafter each time U 47 output pin 12 goes high, gate U 39 D will set flip-flop U 27 B thereby causing another interrupt request to occur The delay time from the time the key is depressed to the time automatic repeating starts is determined by the time it takes after key closure, with no further bouncing, for U 47 output pin I to go high followed by output pin 12 going high The frequency of 40 key repeat is determined by the frequency at which U 47 output pin 12 toggles.

The keyboard also contains the Reset key which is handled separately from the keyboard scanning When the Reset key is depressed, the KRST signal goes low and, after a time delay for key bounce caused by C 22, R 49, and R 50, the input to inverter U 40 B goes low The positive-going transition of inverter output U 40 B is 45 differentiated by C 21 and R 47 to produce a pulse which becomes the I/O bus Reset (RESET) signal that reinitializes the microprocessor and I/O section The output of the inverter, before the pulse formation, is sent to the KDP's status latch which the microprocessor can interrogate to determine if the initialization is a power-on initialization or a Reset key initialization 50 The Shift and Shift Lock keys on the keyboard are handled separately from the scanning circuit When either of the shift keys on the keyboard is depressed, the SHIFT signal resets the latch composed of gates U 46 A and U 45 C and sets flip-flop U 56 B which in turn will set I/O data bit 7 ( 10 D 7) thereby indicating to the microprocessor that the shift key is depressed If the shift lock key is depressed, the 55 latch composed of gates U 46 A and U 45 C will be set to indicate that all further keycodes are shifted keycodes The latch remains set until one of the shift keys is depressed.

A KDP control timing generator included within the KDP control block of Figure 4 is shown in the detailed schematic diagram of Figure 140 The 6 M Hz 60 clock from the I/O bus is divided by four by flip-flops U 66 A and U 62 A to produce the KDP clock and the gated T clock generated at the output of gates U 56 A and U 7 C The gated clock is disabled via-gate U 54 B whenever either flipflops U 63 B or U 64 B are set Flip-flop U 63 B is set on the next KDP clock after a printer data word (indicated by W 6 SB) is sent to the KDP control Similarly, flip-flop U 64 B is sent on 65 1,568,094 the next KDP clock after a display data word (indicated by W 4 SB) is sent to the KDP control The two flip-flops disable the T clock for only one state time since the output of each flip-flop clears flip-flops U 63 A and U 63 B, respectfully During the state time that the T clock is disabled, the R/W signal (gate U 5 SC) goes low during the second half of the state time and is used by the memory section to store 5 the data just received into the KDP read/write memory The three signals PLC (printer load clock), DLC (display load clock), and SPA (select printer address) is used by the printer control, display control, and memory sections to produce the correct address for storing the data just received into the KDP read/write memory.

When new display or printer data is not being received, the PR (printer) signal is 10 used to control the SPA signal so that either display or printer data can be read from the KDP memory.

The upper portion of Figure 140 shows the circuitry which generates the basic timing signals used by the printer control, display control, aid memory sections.

The waveforms generated by this circuitry is shown in the waveform timing 15 diagram of Figure 141 Device U 35 is a four-bit binary counter with a synchronous load control input (Texas Instruments device SN 74 LS 163) The PR (printer) signal is present for eight state times and absent for six state times The last state time before each transition of PR, the P 7 signal is generated by gate U 46 C for the full state time and the T 7 signal is generated by gate U 56 B during the last half of the 20 state time Each time that P 7 occurs, the binary counter will be loaded with the data on the A through D inputs on the next state time If the PR signal is not true, the counter will be set to zero the next state time If the PR signal is true, the counter will be set to a decimal ten on the next state The use of these timing signals will be discussed in the following sections 25 A read/write memory section of the KDP control block of Figure 4 is shown in the detailed schematic diagram of Figure 142 Central to the memory section is the KDP read/write memory which stores the display data By designing the display control section to automatically refresh the display, the capability to inform the calculator user of what the calculator program is doing via display messages while 30 the program is running is possible More importantly, the design provides the basic requirement of live keyboard, i e, displaying keyboard actions and results while a program is running The read/write memory device U 38 is Signetics (Registered Trade Mark) device 82509 which is capable of storing sixty-four 9-bit words The memory is divided into two halfs by the select printer address (SPA) signal on the 35 A 5 input of the device Thus the lower half of the memory stores the 32character codes for the LED display unit and the upper 16 locations of the upper half stores the 16-character codes for the thermal printer unit The data from the I/O data bus to be stored in the memory is first saved in the register composed of U 43 and U 52.

The timing section then generates the R/W and SPA signals as necessary to transfer 40 the data from the register into the proper location in the memory When the KDP control is not receiving information from the I/O bus, the display and printer data in the read/write memory are alternately assessed to refresh the display The printer data is only printed the one time after the print command is received by the I/O interface section The address for the read/write memory is selected by the two-to 45 one data selector composed of U 13 and U 14 The two inputs to the data selector are the display character address and character column select and the printer character address and character row select The character address information is used to address the read/write memory The column and row select is used to address the dot pattern read-only memory U 23 The read-only memory is 50comprised of devices that are organized as 2048 words of eight bits The dot patterns for both the display and the printer are stored in the ROM The most significant bit of the address (PR) is used to select whether the dot pattern is for the display or for the printer The next seven bits of address select one of 128 possible symbols The lowest three bits of address select the desired column or row of the 55 symbol Column data is needed for the display unit; row information is needed for the printer unit The timing section is designed such that when a printer character isbeing processed by the printer control section, the address to the read/write memory is the next display character to be processed and vice versa As shown in the timing diagram of Figure 141, during the state times that the P 7 signal occurs, 60 the ROM is enabled (input CE of U 23) and, as explained in the read-only memory section, the power pulse circuit composed of Q 3 and associated components applies + 12 ' volts to the main section of the ROM device During the second half of the state time the T clock occurs and the ROM accesses the dct data addressed and presents it at the D outputs for use At the end of the P 7 state time the dot data is 65 1,568,094 parallel loaded into the parallel-in/serial-out shift register composed of U 22 and U 18 During the following state times the dot data (DD) is shifted out of the shift register for use by the display or printer control sections If the dot data is printer row data only five dot data bits are defined (five by seven printer matrix) For the display dot data, all seven bits are defined since the data is column information 5 The most significant bit of the read/write memory is not used The next most significant bit is used to inform the display control section that the cursor (CURSOR) is to be flashed in that character position The outputs of the read/write memory are open-collector and require the external pull-up resistors to obtain the logic high state This fact is used to advantage to generate the symbol for the insert 10 cursor (character code zero) If the display symbol being accessed in the read/write memory is to have the cursor superimposed (read/write output bit 07 true), the display control section, if required, will cause the cursor enable (CE) signal to go high thereby switching off transistor Q 4 and causing the output of the read/write memory to become the character code zero for the insert cursor 15 A display control section of the KDP control block of Figure 4 is shown in the detailed schematic diagram of Figure 143 When the first data character of a new group of display data is sent to the KDP control, the W 4 SB associated with the transaction is used to trigger one-shot U 16 The output of U 16 via gate U 9 A clears binary counters U 3 and U 6 thereby initializing the counters to the first display 20 character address of the read/write memory in the memory section Also, via gate U 7 A, the output clears flip-flops U 15 B and U 15 A In turn, the output of flip-flop U 15 A disables the column scan decoder U 2 which blanks the display, disables gate U 4 A which enables gate Ul OD and allows the display load clock (DLC) from the timing section to increment the binary counter to the next display character 25 address each time that a new display data character is received, and disables the one-shot U 16 from being triggered again on the next data transfer The display control section remains in the mode of receiving display data with the display blanked until the DSP signal is received.

When the DSP signal, part of the command word, is received from the I/O 30 interface section, the binary counters U 3 and U 6 are again cleared to start the display scan at the first display character address Also, the DSP signal sets flip-flop U 15 B which clears flip-flops U 12 B and U 32 B thereby re-starting the flash cycle for the cursor and allows flip-flop UI 5 A to be set on the next T 7 clock Once flip-flop U 15 A is set, the display control switches from the mode of receiving new data to 35 the mode of displaying the data Assume for the moment that the cursor is not displayed, in which case gate U 5 A is enabled to pass the serial display dot data (DD) through to the display connector and hence to the display The LED display unit is composed of eight display devices that contain four display dot matrices per device A detailed block diagram of the display unit of Figure 4 is shown in Figure 40 144 The serial-in/parallel-out shift register ( 332) shifts in a new dot data bit each time that the clock signal occurs When one column of dots for each character position has been received ( 224 bits), the scan line corresponding to the column data is enabled to cause the dots selected on those columns to light or not light according to the data in the shift register The cycle is then repeated with each 45 column in sequence Counter Ul and decoder U 2 determine which column is selected The timing relationship between the waveforms that result from a display of all LED columns is shown in Figure 145 Since binary counter U 3 starts with a count of zero at the beginning of the display cycle, both gates U 5 B and U 9 C will enable gate U 4 B Gate U 9 B allows the T clock to become the series of display 50 clocks shown in the first three lines of Figure 145 The display size (SIZE) signal via gate U 5 B will disable the last sixteen series of display clocks (shown on line two) if the display is only a sixteen character display The upper three bits of the binary counter U 3 and decoding gate U 9 C further allow the display clocks only when the three bits are zeros The balance of the time the column scan decoder U 2 is allowed 55 to operate The divide-by-five column counter Ul determines which column is being scanned It is not initialized as it makes no difference which column is scanned first since all columns will eventually be scanned Each time that counter U 3 -rolls over", the column counter Ul will be incremented to the next column.

The display cursor logic is shown at the upper left portion of Figure 143 The 60 cursor flash frequency is determined by the astable multivibrator composed of gates U 8 A, U 8 B, and U 8 C which is divided by four by flip-flops U 12 B and U 32 B. When the Q-not output of flip-flop U 32 B is a logical high, the cursor symbol is enabled for displaying The command register in the I/O interface section enables either gate Ul IA or Ul l B depending on whether the insert (INS) or replace (RPL) 65 1,568,094 cursor is selected As discussed in the memory section above, the cursor (CURSOR) output from the read/write memory indicates when the particular character being accessed from the read/write memory is to also have the flashing cursor If the insert cursor is selected, the cursor enable (CE) signal is generated which forces the output of the read/write memory to assume the insert cursor code 5 If the replace cursor is selected, the flip-flop U 12 A is used to save the cursor signal so that it will be available when the character dot pattern is sent to the display unit.

The replace cursor lights all dots in each column of the character matrix which is achieved by gate U 11 B disabling U 5 A when the cursor is to be displayed thereby forcing the serial display data to the state that lights all dots on the column 10 A printer control section of the KDP control block of Figure 4 is shown in the detailed schematic diagram of Figure 146 A Assume as an initial condition that flipflops U 44 A and U 44 B and binary counter U 33 have just been cleared by gate U 54 C Since the output of flip-flop U 44 B is a low, decimal counters U 24, U 25, and U 26 and flip-flop U 32 A will be cleared, printer scan decoder U 41 will be disabled, 15 printer paper advance (ADV) solenoid will be de-energized via gate U 7 B, and gate U 17 B will be disabled thereby enabling gate UIOB to pass the printer load clock (PLC) Hence, no printing action will occur and the printer control is in the data receiving mode The binary counter U 33 provides the printer character address to the read/write memory in the memory section Each time that printer data is 20 received by the KDP control, the timing section produces the printer load clock (PLC) to advance the binary counter U 33 (via gate U 1 l OB) to the next printer character address so that the next address will be ready when the next printer character code is received The PLC clock also clocks the other binary counters U 26, U 25, and U 24 as well as flip-flop U 32 A but since the counters are connected 25 in cascade (ripple carry output to enable inputs of next stage) none of the counters will change state because flip-flop U 32 A is clear The printer control section will remain in the data receiving mode until the PRT command signal is received from the I/O interface section.

When the PRT signal is received, flip-flop U 44 A will be set and at the end of 30 the next T 7 clock flip-flop U 44 B will be set indicating that the printer control section is in the print mode To understand the timing that the printer control section generates, it is first necessary to understand the requirements of the thermal printer unit A block diagram of the thermal printer of Figure 4 is shown in Figure 147 The print head circuit comprises an off-the-shelf twenty-bit serial 35 in/parallel-out shift register whose inputs are DATA and CLOCK The output of each group of five bits goes to a 5-of-20 demultiplexer Each demultiplexer routes its five input bits to one of four print head positions Each print head position contains five dot resistors which "burn" the paper to produce the printing The four input scan signals (SI through 54) determine which of the head positions the 40 demultiplexer selects The sequence of operation is for the printer control to send the dot information for the first, fifth, ninth, and thirteenth character positions and generate the first scan signal which "burns" the paper for the proper length of time.

The procedure is then repeated for each of the other scan signals in sequence.

When the four scans are completed, the paper advance solenoid which has been 45 energized ("cocked") during the four scan operations is de-energized and a fifth time period is required to allow the paper to advance and settle.

Returning now to the printer control circuitry, figures 148 A-B show the timing relationship of various waveforms associated with the printer control circuitry of Figure 146 A Binary counter U 33 counts the sixteen character 50 positions Outputs QB and QC of decimal counter U 25 determines which scan is taking place via scan decoder U 41 Notice that the counter's output also goes to integrated circuit U 34 Device U 34 is a four-bit magnitude comparator which generates a positive-true output at output A=B whenever the four bits input at the A inputs is equal to the four bits input at the B inputs The output is used to enable 55 the T clocks to pass through gate U 5 C to become the printer clocks Notice that inputs A O and Al are tied to a logic one Consequently, inputs B O and B 1 can be used to shut off the clocks to the printer The four gates U 19 A, U 19 B, U 19 C, and U 7 D combine logically with inputs B O and B 1 to form a disable function such that if any input to U 19 A, U 19 B, or U 19 C is a logic high, the clocks to the printer are 60 disabled Therefore, let each input to gates U 19 A, U 19 B, and U 19 C be taken to form a counter whose decimal count is shown in Figure 148 B The state number associated with each count is shown immediately above the decimal count The outputs which define the decimal count are the output from flip-flop U 32 A, the four outputs of U 26, and the QA outputs of U 25 Notice that the feedback 65 I 1,568,094 generated by gates U 5 D and U 46 B causes the counting sequence to change from decimal count 11 to 16 during state numbers 12 and 13 and again from count 43 to 48 during state numbers 28 and 29 Note also that counter U 26 is a decimal counter which causes the count to change from count 19 to 32 during state numbers 16 and 17 and again from count 43 to 48 during state numbers 28 and 29 Thus, the total 5 number of states for one scan is 32.

Only during the first state (decimal count zero) are the T clocks allowed to pass through gate U 5 C to become the printer clocks Binary counter U 33 counts the sixteen character positions of the printer For the first scan, inputs B 2 and B 3 of comparator U 34 are both zero Therefore, as the character counter U 33 counts 10 through the sixteen character positions, only the first, fifth, ninth, and thirteenth characters are sent to the printer For the next scan, only the second, sixth, tenth, and fourteenth characters are sent to the printer A similar pattern occurs for scans three and four These waveforms for each scan are shown in Figure 148 A After the character counter has counted through sixteen counts, flip-flop U 32 A will be set 15 and via gate U 19 A further clocks to the printer will be disabled.

The scan signals are shown in Figure 148 B The scan decoder U 41 is enabled by flip-flop U 44 B, QD output of U 24, and the burn control output (BCO) A printer burn control circuit within the KDP control block of Figure 4 is shown in the detailed schematic diagram of Figure 146 B Devices USOD, U 50 C, and associated 20 components form an oscillator whose duty cycle depends on the unregulated + 20 volts The output of the oscillator turns switch Q 4 on and off which in turn charges capacitor C 27 through resistors R 66 and R 67 The higher the + 20 volts, the slower that capacitor C 27 will be charged Devices U 50 B, Q 15, Q 16, and associated components form another oscillator which operates at a frequency of 25 approximately one-tenth that of the USOD oscillator The purpose of this oscillator is to discharge capacitor C 27 The voltage across C 27 is input through R 67 to the non-inverting input of comparator U 50 A The other input of the comparator is a reference voltage The reference voltage can be modified by the print intensity adjustment, the print head thermister, and resistor R 63 which is switched in when 30 FET Q 12 is turned-on The output of the comparator U 50 A is the burn control output (BCO) signal which alternately switches the printer scan signals on and off.

The BCO signal is a negative-true signal whose duty cycle is inversely proportional to approximately the square of the unregulated + 20 volts, thereby providing an almost constant power dissipation for the print head resistors The print 35 temperature control (PTC) signal from gate U 7 D of the printer control section modifies the duty cycle of the burn control to allow a fast rise time for the temperature of the print head resistors during state numbers 1 through 12 of the scan time followed by an approximately constant temperature for the print head resistors during the second portion of the scan period 40 When the fourth scan is completed, the QD output of U 25 will become set.

The output disables the scan decoder U 41, disables the current drive to the advance solenoid, and disables the counter feedback gate U 46 B The paper then advances to the next line The time allowed for the advance ( 40 state times) is longer than the scan time due to the disabling of the feedback gate U 46 B 45 Decimal counter U 24 is used to determine which row of the character is selected For the first row, the dot information read out of the read/only memory section is all spaces The next seven rows are the seven rows of the fiveby-seven dot matrix The last two rows are again all spaces to provide the separation between the characters on successive lines For the last two rows, output QD of decimal 50 counter U 24 (counts eight and nine) will be a high thereby disabling the scan decoder during those two rows At the end of the tenth row, the QD output will return to a logic low which via capacitor C 16 clears flip-flops U 44 A and U 44 B ending the print mode.

CASSETTE CONTROL 55 The cassette control circuitry of Figure 4 provides the interface between the microprocessor and the cassette transport hardware The control circuitry can be divided into four sections One section is the V/O interface section which provides the interface between the l/O bus and the rest of the cassette control circuitry.

Another section is the tape section which provides the motor drive electronics that 60 causes the movement of the magnetic tape A third section is the read electronics section which detects flux transitions on the magnetic tape and decodes it into bit serial digital data which is sent to the microprocessor The delta distance code is used to represent digital information on the magnetic tape This code represents a 1,568,094 zero on the magnetic tape by a short distance between flux transitions and a one by a long distance between flux transitions The fourth section is the write electronics section which encodes bit serial digital data from the microprocessor into a series of flux transitions on the magnetic tape.

The cassette control 1/0 interface section is shown in the detailed schematic 5 diagram of Figures 149 A-C The I/O interface section contains an I/O operation decoder composed of a dual three-to-eight decoder U 3 and associated gates The decoder is enabled whenever the peripheral address lines indicate peripheral address one and an interrupt (INT) poll is not occurring One section of the decoder decodes the I/O read operations; the other section decodes the I/O write 10 operations A write to memory address seven (W 7) clears the servo-fail flip-flop U 7 B and the cartridge out flip-flop U 7 A as shown in Figure 149 C The servo-fail flip-flop is set by the servo section The cartridge out flip-flop is set when the cartridge-in microswitch opens due to the cartridge being removed from the 1 S transport assembly A write to memory address six (W 6), which occurs during the 15 last 1/0 DMA operation, sets the search complete flip-flop U 9 A and clears the DMA request enable flip-flop U 9 B A write to memory address five (W 5) latches the primary command information from the microprocessor into the eightbit command latch U 1 shown in Figure 149 B The command latch is also cleared to its initial state by the Initialize (INIT) signal when the calculator is turned on The 20 figure shows the information assigned to each bit A write to memory address four (W 4) causes the bit serial data to be written on the magnetic tape (sent on I/O bus line IODO 1) to be latched into flip-flop U 13 A and clears the flag flipflop U 13 B. A read of R 6 (R 6 SB) causes the beginning/end of tape flip-flop U 15 A to be cleared The flip-flop is set whenever a hole is detected in the magnetic tape as 25 shown in Figure 150 A hole is detected by allowing light to pass through the hole to reach a phototransistor The signal from the phototransistor is applied to an opamp U 4 which compares the signal to a level which is approximately 3004 of the peak level The transistor Q 4 changes the op-amp output to voltage levels compatible with the input requirements of the beginning/end of tape flipflop 30 A read of R 5 (R 5) causes the cassette status data, held stable by latch U 16 of Figure 149 B, to be sent to the microprocessor The data assigned to each bit is shown in the figure A read of R 4 (R 4 SB) causes the data decoded from the magnetic tape (RDT) to be sent to the microprocessor (gate U 12 F) and clears the flag flip-flop U 13 B shown in Figure 149 C The flag flip-flop is used to indicate the 35 presence of either servo tach information (output of flip-flop U 153 B) or the presence of read data (RWF) from the magnetic tape as selected by the command bit 3 (TAC) of the command latch Ul Similarly, the I/O status (STS) signal is used to indicate either the presence of a gap on the magnetic tape (when in the normal mode as indicated by search/normal bit of the command latch Ul) or the fact that 40 the search operation has ended when in the search mode The search operation is terminated (indicated by gate U 6 A) by either having a servo-fail signal (flip-flop U 7 B) or a cartridge out signal (flip-flop U 7 A) or a beginning/end of tape encounter (flip-flop U 15 A) or a normal completion caused by an T/O write operation to R 6 setting the search complete flip-flop U 9 A Conversely, if none of the four 45 conditions have occurred and the run command (command bit 7) is true, the GO signal is generated via gate U 5 B which informs the servo section that the motor is to run.

The cassette control servo section is shown in the detailed schematic diagram of Figures 151 A-C The servo system is designed to provide tape speeds of +/-22 50 ips and +/ 90 ips at +/ 5 % The transition between these speeds is at a constant acceleration of +/ 1200 in/sec/sec which corresponds to approximately 18 ms to accelerate from 0 to 22 ips In addition to speed control, the servo section provides the tape moving (MVG), tachometer pulses (TAC), and servo-fail detect (SFD) signals as status information for the microprocessor The input signals from 55 the I/O interface section are the GO signal which indicates that tape movement is to occur, the Fast (FST) signal which indicates the higher speed is desired, and the RE Verse signal which indicates the direction of tape movement.

Referring to Figure 151 A, the reference generator composed of the input circuitry associated with U 25 A converts the digital input signals GO, FST, and 60 REV to analog voltages for input to the controlled-slew-rate amplifier composed of U 25 A and U 25 B The slew rate is a function of the voltage of the zeners diodes CR 7 and CR 8, resistor R 49, and capacitor C 29 The slew rate is approximately 100 v/sec The steady-state voltage gain of the amplifier is either + 1 5 or 1 5 as determined by the digital input REV signal The steady state output voltage is 0, 65 1,568,094 +/-2, or +/-7 volts depending, respectively, on whether GO is logically false, GO is true and FST is false, or GO is true and FST is true The output voltage will be referred to as the "forcing function (Vff)" It is applied via R 79 to the summing junction of the servo loop which is at the inverting input of U 28 B The forcing function is also applied to the dead-band detector circuit 5 The dead-band detector circuit is composed of the two voltage comparators U 21 C and U 21 D and associated components Since these comparators operate from 0 to 5 volts, the forcing function is first level-shifted to provide compatibility with the comparators If the shifted level is above the reference of U 21 D, the moving reverse (MRV) signal is generated If the shifted level is below the 10 reference level of U 21 C, the moving forward (MFD) signal is generated If either the MRV or MFD signals are generated, the moving (MVG) signal is also generated This signal indicates that the forcing function is indicating a motor speed of greater than 2 ips The moving signal is used to light the run LED on the transport assembly which indicates to the user that the motor is operating and is 15 sent to the status latch in the I/O interface section for use by the microprocessor.

Also, the absence of the moving signal is used to turn off the drive to the motor to prevent the motor from creeping due to small offset voltages in the system.

The feedback voltage Vfb from the tachometer associated with the motor is also applied via R 78 to the servo loop summing junction, as shown in Figure 151 B 20 The feedback voltage is proportional to the angular velocity of the motor and is generated by an optical tachometer, as shown in Figure 151 C The optical tachometer consists of a light source, a 1000 line disk and a phototransistor A signal ( 23 K Hz @ 22 ips) is amplified by the op-amp U 3 and applied to the bidirectional one-shop (Signetics device 8 T 20 or equivalent shown in Figure 151 B) 25 which generates 2 us pulses These pulses occur on both polarities of the waveform such that the repetition rate of the output pulses is twice the input frequency ( 46 K Hz e 22 ips) The pulses are applied to a second-order low pass filter, composed of L 2 and C 42, which has a bandpass of 2 25 K Hz The output of the filter is a positive DC voltage which is proportional to the angular velocity of the motor 30 (The ripple of the DC voltage does not have an adverse effect upon the motor speed since its frequency components are much higher than the bandwidth of the system) The output of the filter is amplified by U 28 A with a gain of either + 3 or -3 in a circuit configuration similar to the configuration used to generate the forcing function The polarity of the gain in this case is determined by the MRV (moving 35 reverse) and MFD (moving forward) signals generated by the dead-band detector circuit.

The feedback from the summing junction op-amp U 28 B is also applied to the summing junction The feedback provides most of the open loop gain and introduces a zero at 5 Hz that matches the mechanical pole of the motor The 40 closed loop gain of Vfb/Vff is 0 6 with a bandwidth of approximately 200 Hz The motor driver amplifier, composed of transistors Q 3, Q 4, Q 9, and Q 10 and associated components (shown in Figure 151 C), provides a voltage gain of 2 46 as determined by the feedback resistors R 62 and R 61 As mentioned earlier, the moving (MVG) signal from the dead-band detect circuit is used to disable the 45 drivers if the moving signal is logically false to prevent the motor from creeping due to small offset voltages in the system as well as to insure stability during the zero speed crossover region Also, the INIT signal is used to disable the drivers to prevent spurious movement of the tape during calculator turn-on and turnoff The maximum average power dissipated from either darlington driver is 13 watts This 50 assumes a worse case duty cycle of 80 % and a maximum average supply voltage of 23 volts.

The servo-fail detect circuit, composed of U 21 and associated components, senses both the voltage to and current through the motor Both the voltage and current sense inputs are filtered such that an overload condition is not detected 55 during acceleration The output of the circuit sets the servo-fail flipflop in the I/O interface section which in turn causes the GO input signal to be removed thereby protecting the motor from overload.

The write electronics section of the cassette control block of Figure 4 is shown in the detailed schematic diagram of Figure 152 The inputs to the section come 60 from the I/O interface section and are the bit to be encoded (BSD), the write command (WRT), the track to written on (TRKB), and the mode command (MOD) Outputs from the section are the flux transitions on the magnetic tape, and the read/write flag (RWF) to I/O interface flag flip-flop which indicates that another bit of data may be sent 65 1,568,094 The encoder portion of the write electronics section is composed of flipflops U 30 A and U 30 B, astable multivibrator U 29, and one-shot U 31 B with associated gates The section is initialized whenever the WRT signal is false Both the data bit flip-flop U 30 A and the write data flip-flop U 30 B are preset by the WRT signal.

Also, via gate U 35 C and open-collector inverter U 34 D, the WRT signal discharges 5 the timing capacitor C 50 associated with the astable multivibrator U 29 The oneshot U 3 l B is shared between the encoder and the decoder Its other input (input A) is forced to the enable state during write operations by the WRT signal When the WRT signal becomes true and the MOD signal is false, the output of the astable multivibrator is allowed to oscillate The period of the first oscillation of the 10 multivibrator is determined by C 50, R 87, and R 88 When the first oscillation is complete, the one-shop U 3 I B will be triggered which signals the end of a data bit time The output of the one-shot causes a flux transition on the magnetic tape by toggling the write data flip-flop U 30 B, loads the next data bit on the BSD line into data bit flip-flop U 30 A, and sets the I/O interface section flag flipflop to indicate 15 that another bit may now be sent by the microprocessor The output of data bit flipflop U 30 A determines the time constant of the astable multivibrator by either switching in or switching our resistor R 88 The period of the astable is short if the flip-flop contains a zero and long if the flip-flop contains a one.

The output of the write data flip-flop U 30 B is sent to the magnetic tape 20 read/write circuitry The read/write head provides for two tracks on the tape; track A and track B A high-voltage open-collector output BCD-to-decimal decoder Ul (Texas Instruments device SN 7445 or equivalent) is used as a one-ofeight decoder to select the track, whether a read or write operation is to occur, and, if a write operation is selected, which direction current flow through the head is to occur 25 Hence, the decoder inputs are TRB (track B), WRT (write), and WDT (write data). The TRB signal determines the track by enabling outputs 4, 5, 6, and 7 or

outputs 0, 1, 2, and 3 The WRT signal selects the "write" outputs 2, 3, 6, and 7 rather than the read outputs 0, 1, 4, and 5 Since the "read" outputs are not enabled, the four FET switches Ql through Q 4 are turned off and the read circuitry is disconnected from 30 the tape head (The regulated turn off bias for the switches is generated by a voltage doubler circuit located in the servo section) When the WRT signal goes high, transistor Q 5 is turned on which, in turn, turns on the current source composed of Q 6 and associated resistors The direction of current flow through the head from the current source to the decoder output is determined by the write data (WDT) 35 signal input to the decoder Each time the WDT signal changes levels the direction of the flux on the magnetic tape is reversed due to the current flow through the head changing directions The Initialize (INIT) signal is logically O Red with the WRT signal (via CR 4) to turn off the current source and prevent spurious write currents through the head during calculator turn-on or turn-off 40 The read electronics section of the cassette control block of Figure 4 is shown in the detailed schematic diagram of Figures 153 A-B The inputs to the read electronics is the TRB (track B) signal which determines which track is to be read, the WRT (write) signal which disables the write section and enables the read section, the analog signal from the magnetic tape head, and the FST (fast) and MOD 45 (mode) signals which determine the threshold levels associated with the analog head signal The outputs are the bit serial read data (RDT) to the I/O interface and the read/write flag (RWT) to the I/O interface flag flip-flop.

When information on the tape is being read, the BCD-to-decimal decoder Ul of Figure 152 selects outputs 0 or I or outputs 4 or 5 thereby turning on FET 50 swtiches Q I and Q 2 or switches Q 3 and Q 4, respectively The appropriate tape read head is then connected to the pre-amplifier U 2 The preamp provides a nominal gain of -20 Since the output from the read head can vary as much as +/-25 %o, the gain is adjusted by selecting R 5 such that the output of the preamp is 300 m V PP.

The handwidth of the preamp is at least 110 K Hz The read waveform from the 55 magnetic head contains predominate frequencies of 10 6 K Hz and 17 6 K Hz when the tape speed is at 22 ips for one's and zero's, respectively A significant amount of information is contained in the 3rd harmonics of these waveforms The frequency is increased to 72 K Hz when the tape speed is at 90 ips However, at 90 ips, only gap information (the absence of flux transition) is being searched for and no data is 60 recovered at that speed The signal from the preamp is applied to the input of an active second-order Butterworth low pass filter composed of U 17 and associated components The filter has a bandwidth of 55 K Hz which limits the noise susceptibility but at the same time does not increase the peak shift excessively The filter has a gain of 6 7 which produces a nominal output of 2 Vpp The output of the 65 I 1,568,094 1,568,094 50 filter is applied to a differentiator (C 14 and R 5) and a threshold detector composed of U 22 and associated components The differentiator attenuates the signal ( 10 6 K Hz) by a factor of 9, while the following amplifier U 18 provides a gain of 9 and a low impedance output The output of U 18 is applied to a dual comparator U 19 which detects a zero crossing condition The two comparators are only enabled 5 during the appropriate +/ threshold to increase the noise immunity The output from the zero crossing detector is applied to the clock input of a D-type flip-flop U 27 while the clear and D inputs are connected to the threshold (THD) signal from the threshold detector This configuration prevents a glitch (multiple transition) from occurring on the output of the flip-flop since the only way possible for the 10 output to go high is for the clock input to go high while the THD signal is high The only way for the output to go low is for the clear and D inputs to go low The positive-going transition of the output of the flip-flop U 27 indicates that a flux transition (FTR) has occurred.

The input to the threshold detector is the amplified and filtered signal from 15 active Butterworth filter The threshold detector produces an output when the absolute value of the waveform exceeds either 10 , 45 % or 30 % of the nominal peak signal The 10 % level is used for reading at 22 ips, the 45 % level is used for write verification and gap detection, and the 30 % level is used for high speed gap search Which level is selected is determined by the FST and MOD inputs at 20 inverters U 20 E and U 20 F, respectively The two transitors Ql and Q 2 connected in cascade perform the function of filtering the output of the threshold detector and insuring that the THD signal remains high for at least 100 ns thereby preventing noise from causing false outputs on the flux transition (FTR) signal out of flip-flop U 27 25 The output of the threshold detector (THD) is also used to retrigger oneshots U 43 A and U 43 B shown in Figure 153 B The first one-shot, U 43 A, has a period of approximately 125 us If no flux transitions are detected for 125 us, the one-shot expires and sets the latch composed of gates U 39 A and U 39 B The output of the latch (GAP) indicates to the microprocessor, via the I/O status control signal, that a 30 gap condition exists The output of the latch also inhibits the Inter Record Gap (IRG) one-shot U 43 B from being retriggered The period of the interrecord gap one-shot is approximately 2 5 ins If the latch has not been reset or if a flux transition after the latch is reset has not occurred by 2 5 ms, the oneshot expires and an interrecord gap condition is declared The gap one-shot U 43 A also clears 35 the four-bit binary counter U 42 To prevent the possibility of noise in the system erroneously ending the gap condition, the latch is not allowed to reset until four flux transitions have been detected and counted by the binary counter U 42 The gap one-shot also clears flip-flop U 38 A whose output is used to initialize the read decode circuitry The first twelve flux transitions after a gap occurs always 40 correspond to a digital zero on the magnetic tape Hence the flip-flop U 38 A is not set again until twelve flux transitions have been counted by the binary counter U 42.

The decoder is required to reliably retrieve information stored in the form of delta distance code from a tape which exhits speed variations The input to the decoder is a stream of pulses corresponding to flux transitions detected on the 45 magnetic tape (FTR) The time between the pulses indicates whether the distance between flux transitions was a "long" or a "short" distance Decoding the time between pulses into ones and zeros could be accomplished on an absolute basis if one were willing to allow the ratio between zero and one to be large enough that a zero would always be less than a specified time and a one would always be greater 50 than a specified time when all possible variations in the system have been accounted for This approach would reduce the amount of information which could be stored on the tap and is not acceptable Instead, the decoder eliminates dependence upon the absolute time required for the tape to move a long or short distance by "tracking" the average tape speed The ratio of the "long" time to the 55 "short" time, not the actual time, is used in decoding the information The decoder uses the time between previous FTR pulses to develop a reference voltage which is used for decoding The reference voltage is developed across C 59.

To understand how the reference voltage is established, a description of the decoder circuit configuration is first necessary When the GAP signal occurs, flip 60 flop U 38 A is cleared and its output, the decoder initializing signal, clears the read data flip-flop U 38 B and turns on FET switch U 33 A to short out resistor RI 11 The reference capacitor C 59 is driven by U 36 which is part of the sample and hold circuit formed by FET switches U 33 B and U 33 D and sample and hold capacitor C 58 The input to the sample and hold circuit comes from the ramp generator 65 circuit formed by U 32 and associated components Notice that the output of the ramp generator can be applied directly to the sample and hold capacitor C 58 via FET switch U 33 D but is first attenuated by the resistor divider R 108 and R 107 before it can be applied to the sample and hold capacitor via FET switch U 33 B. Notice, further, that the read data output (RDT) of the read data flipflop U 38 B 5 enables the attenuated signal FET swtich U 33 B to update the sample and hold capacitor when RDT is a one or, similarly, enables the direct signal FET switch U 33 D when RDT is a zero The ramp generator (U 32) output which is the signal sampled, is reset to zero by switch U 33 C whenever one-shot U 31 B is triggered.

When the end of a gap occurs, the following initializing action is generated 10 The positive-going edge of the first flux transition pulse (FTR) triggers the one-shot U 31 A which has a pulse width of approximately one microsecond The oneshot pulse and the fact that the read data flip-flop U 38 B is being held clear by the decoder initializing signal U 38 A causes FET switch U 33 D to turn on and charge the sample and hold capacitor C 58 to the voltage of the ramp generator output In 15 turn, the reference capacitor C 59 will also be charged to the voltage of the sample and hold capacitor via U 36 since the FET switch U 33 A is turned on by the decoder initializing signal For the first flux transition, the ramp generator will be at its maximum value due to the long time of the gap signal On the trailing edge of the one-shot U 31 A pulse, the second one-shot U 31 B is triggered and generates a four 20 microsecond pulse which turns on FET switch U 33 C and resets the ramp generator After the pulse terminates, the output of the ramp generator proceeds to become a ramp The next flux transition occurs after a "short" time (twelve "short" times always follow a gap) and again the sample and hold capacitor is updated with the voltage of the ramp generator This time the voltage of the ramp 25 generator correctly corresponds to the "short" time or a digital zero on the magnetic tape After twelve flux transitions the reference capacitor C 59 has been initilized and the decoder initializing signal is terminated.

The time between the flux transitions now varies according to whether digital ones or zeros ("longs" or "shorts") are recorded on the magnetic tape When a flux 30 transition occurs, one-shot U 31 A is triggered and its output clocks the read data flip-flop U 38 B The read data flip-flop is updated with the results of the comparison of the reference voltage to the attenuated output of the ramp generator by comparator U 37 The output of the ramp generator is attenuated by R 105 and R 106 to produce a "short" voltage less than the reference voltage and a "long" 35 voltage greater than the reference voltage The read data output is used to select which FET switch, U 33 B for a "long" or U 33 D for a "short", updates the sample and hold capacitor C 58 The ramp generator output is attenuated for the "long" time to produce the same sample and hold voltage as for the "short" time The reference capacitor C 59 voltage is allowed to track only the low frequency changes 40 caused by tape speed variations since resistor RI 11 and capacitor C 59 now filter the short term changes in the voltage of the sample and hold capacitor The read data output is sent to the I/O interface section to become the bit serial data to the microprocessor Each time that one-shot U 31 B resets the ramp generator, it also generates the read/write flag which sets the I/O interface flag flip-flop to indicate to 45 the microprocessor that the bit serial data is ready.

POWER SUPPLIES The power supplies in the calculator consist of five regulated supplies, + 12, + 7, + 5, -5, and -12 volts, and two unregulated supplies, +/-20 volts These power supplies may be understood with reference to the block diagram of Figure 4 and 50 the detailed schematic diagrams of Figures 154 A-C.

For the + 12 volt supply of Figure 154 C, a reference voltage appears at pin 4 of U 3 when a voltage of 10 to 40 voits is applied between pins 8 and 5 The reference voltage is also applied to the non-inverting input of the amplifier in U 3 The output voltage from the supply is sensed by R 9, RIO, and Rl 1 and applied to the inverting 55 input of the amplifier in U 3 Capacitor Cl I is used to limit the frequency response of the U 3 amplifier The output of the U 3 amplifier is further amplified by Q 4 The output current of the supply is dropped across R 13 and sensed by pins 10 and 1 of U 3 to limit the output current to approximately 2 75 amps.

For the + 7 volt supply, device Ul (National device LM 309 or equivalent) is 60 used The device is designed to provide + 5 volts between pins 3 and 2 when a voltage of + 7 to + 35 is applied between pins 1 and 2 by using a resistor divider R 5 and R 6, the terminal normally connected to ground is connected to a point which is I 1,568,094 a 11 so 1 at 2 volts, thus giving an output of + 7 volts from the device Resistor R 8 is used to limit the power dissipation in Ul.

The five volt supply of Figure 154 B is a switching regulator The noninverting input (pin 1) of the amplifier in U 4 is connected via R 15 to a + 5 reference voltage developed from the + 12 volt supply by resistors R 14 and R 16 The inverting input 5 (pin 2) to the amplifier is connected to the supply output at L 2 If the supply output voltage, as sensed at the inverting input of U 4, falls below the reference voltage on the non-inverting input, the output of U 4, amplified by Q 6 and Q 3, applies + 20 volts to inductor L 2 The tap on inductor L 2 via R 22 allows both Q 3 and Q 6 to saturate thereby increasing efficiency When Q 3 turns on, the reference voltage to 10 the non-inverting input of U 3 is raised by approximately 50 millivolts by resistor divider R 17 and R 15 When the output voltage at the inverting input of the U 4 amplifier reaches the reference voltage at the non-inverting input, the amplifier turns off Q 6 and Q 3 Turning off Q 3 causes the reference voltage on the noninverting input of the amplifier to drop by about 20 millivolts This hysterisis 15 voltage introduces about 70 millivolts of ripple on the + 5 volt supply which is filtered out by LI, C 4, and C 15 The current used to turn on Q 6 and Q 3 is limited by sensing the voltage across R 19 If the + 5 volt supply is suddenly pulled more than a diode and an emitter-base voltage drop below the reference voltage, transistor Q 5 turns on and shuts off the drive transistor in U 4 As long as there is 20 any current flow out of the + 5 volt supply, Q 5 remains on and keeps the + 5 volt supply shut down.

The -12 volt supply is developed by device U 2 (National LM 320-12 or equivalent) in a manner similar to the + 7 volt supply The -5 volt supply is a zener regulated supply consisting of resistor R 7 and zener CR 8 25 CALCULATOR FIRMWARE Operation of the calculator firmware may be understood with reference to Figures 5-15, the calculator firmware listing of routines and subroutines stored within the calculator read-only memory, and the flow charts of these routines and subroutines illustrated in Figures 155-182 B 30 Referring to Figure 5, there is shown an overall block diagram of the portion of the calculator firmware residing in the mainframe language ROM 210 of Figure 4 The address structure of the mainframe language ROM is depicted in Figure 6 in relation to the remainder of the calculator memory The location of each of the firmware components of Figure 5 within the twelve individual ROM chips 35 comprising the mainframe language ROM is shown in Figure 7 The remaining portion of the calculator firmware resides in the various plug-in RO Ms 230 of Figure 4 that may be employed by the user for increasing the functional capability of the calculator.

A detailed listing of the routines and subroutines of instructions stored in the 40 mainframe language ROM together with a listing of the routines and subroutines that may be stored in a general I/O plug-in ROM are provided hereinafter In addition, as a preface to the listing of the routines and subroutines stored in readonly memory, a listing of the base page read-write memory is given This listing of the base page read-write memory may be understood with reference to the memory 45 map of Figure 15 It will be seen that the base page portion of the readwrite memory is employed for storing several words of information used by the calculator firmware Included are all the working registers of the calculator, scratch pad locations used by the floating point math routines, locations for storing information regarding the current status of the magnetic tape cassette unit, and 50 locations for storing information regarding the current position of the visual cursor associated with the output display unit.

DETAILED LISTING OF ROUTINES AND SUBROUTINES OF INSTRUCTIONS A complete assembly language listing of all of the routines and subroutines of 55 instructions employed by the calculator is given below The listing covers the readwrite memory base page, the entire mainframe language read-only memory, and a general I/O plug-in read-only memory Each page within the listing is numbered in sequence at the upper left-hand corner, and its page number within the specification as a whole is indicated at the top of the page Each line of each 60 page is separately numbered in the first column from the left-hand side of the page.

This line numbering and paginating arrangement facilitates reference to different portions of the listing Descriptive headings are variously provided throughout the 1,568,094 53 1,568,094 53 listing to identify routines, subroutines, groups of constants, and plugin ROM routines Each instruction of each routine or subroutine and each constant stored in the mainframe language ROM or the general I/O plug-in ROM is represented in octal form in the third column from the left-hand side of the page Each of these instructions may be understood in detail by referring to the detailed description of 5 the microprocessor hereinabove The octal address of the ROM location in which each such instruction or constant is stored is given in the second column from the left-hand side of the page.

Mnemonic labels serving as symbolic addresses or names are given in the fourth column from the left-hand side of the page An asterisk in the fourth column 10 indicates that particular line of the listing is merely a comment A mnemonic code corresponding to a particular instruction is given in the fifth column from the lefthand side of the page Operands that may be either labels or literals associated with each of the instructions are located in the sixth column from the lefthand side of IS the page Explanatory comments are given in the remaining right-hand portion of 15 each page.

54 Page 1 00003000 76550 00004000 00005000 00006000 00007000 00008000 00009000 76550 00010000 00011000 76557 00012000 76677 00013000 00014000 77017 00015000 77042 00016000 77062 00017000 77063 00018000 77064 00019000 77135 00020000 00021000 77206 00022000 77216 00023000 77237 00024000 00025000 77255 00026000 77256 00027000 77257 00028000 77260 00029000 00030000 77261 00031000 00032000 77275 00033000 77276 00034000 77277 00035000 77300 00036000 77301 00037000 00038000 77305 00039000 77306 00040000 77307 00041000 77310 00042000 77311 00043000 77312 00044000 77313 00045000 77314 00046000 77315 0004700)0 77316 00048000 77317 00049000 00050000 77320 00051000 77321 00052000 77322 00053000 77323 00054000 77324 00055000 77325 00056000 77326 00057000 77327 00058000 77333 1.568,094 BASE-PAGE READ-WRITE-MEMORY ORG 76550 B UNL SUP BINRY BSS CHUFF BSS CSTAK BSS RMTBL STEAL ROMWD NPROG IBUFF KBUFF BSS BSS BSS BSS BSS BSS IOTMP BSS CSTMP BSS CMTMP BSS XCOMM MODE CSTAT ERRBP BSS BSS BSS BSS EXTMP BSS IDXRW SAVEB ENDS AP 2 OFWAM FWAM FWUP RMAX VT 1 I VT 2 FWBA TE STYFG CERR SWHRE ESV STCHK STENT STEAS AKOUN STRES STEFL SEED BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS 7 BINARY PROGRAM LINKS COMPILE BUFFER COMPILE STACK 19 ROM ADDRESS TABLE 16 STOLEN RWM TABLE 1 ROM IN/OUT INFO 1 NEW-PROGRAM FLAG 41 INPUT/OUTPUT BUFFER 41 KEYBOARD BUFFER 8 I/O DRIVER TEMPORARIES i 17 CONTROL SUPERVISOR TEMPORARIES 14 COMPILER TEMPORARIES 1 INTERPRETER COMMUNICATIONS WORD 1 CONTROL-SUPERVISOR MODE FLAG CONTROL STATE 1 ERROR BYPASS LINK INTERPRETER TEMPORARIES INDEXED RWM RESERVED FOR INDEX TABLE 1 FIRST WORD ACTUAL RWM 1 FIRST WORD AVAILABLE RWM FIRST WORD OF USER PROGRAM I MAXIMUM R-REGISTER ADDRESS FIRST WORD OF VALUE TABLE INFO 1 FIRST WORD OF VALUE TABLE VALUES 1 FIRST WORD OF BINARY AREA 1 TRACE ON/OFF FLAG 1 SECURE-PROGRAM FLAG COMPILE ERROR FLAG 1 SAVED WHERE ERASE STRING VARIABLE TABLE I STRING COMPARISON LINK 1 STRING ENTER LINK STRING ENTER ASSIGNMENT LINK LINK TO PROCESS A STRING 1 STRING ASSIGNMENT FOR READ STAT, 1 STRING ENTER FLAG 4 SEED FOR RANDOM-NUMBER GENERATOR 8 RESERVED FOR POST-RELEASE 1.568,094 Page 2 00059000 77343 00060000 77344 00061000 77345 00062000 77346 00063000 77347 00064000 00065000 77350 00066000 77351 00067000 77352 00068000 77353 00069000 00070000 77345 00071000 77406 00072000 77440 00073000 77460 00074000 77467 00075000 00076000 77476 00077000 77502 00078000 77506 00079000 00080000 77507 00081000 77510 00082000 77511 00083000 77512 00084000 77513 00085000 77514 00086000 77515 00087000 77516 00088000 77517 00089000 00090000 77520 00091000 77521 00092000 77522 00093000 77523 00094000 77524 00095000 77525 00096000 77526 00097000 77527 00098000 77530 00099000 77531 00100000 77532 00101000 77533 00102000 00103000 77534 00104000 77605 00105000 77623 00106000 00107000 77624 00108000 77630 00109000 00110000 77631 00111000 00112000 77633 00113000 00114000 77674 BASE-PAGE READ-WRITE-MEMORY NOTRY AVFLG CSCF FTRGT INTSR AEBUF AEBFX AEBFM AEBFL DVTAB DATAB ITABL HPIT LPIT ENR URES FLAGS ELINK IOSR MLBPL DLEN DBP CSELC BUSFG IOINT RGFLG PARG AP 36 AP 37 AP 77 AP 78 AP 136 APP# APRET LOADL APRVC REFOR RLINK RBUFF LKTMP LKFLG ENSV SVXCM JSTAK JSTAK BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS, BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS MAXIMUM # OF TRIES AT READ OR SEARCH CASSETTE AUTOVERIFY FLAG 1 SELECT CODE OF CASSETTE 1 TARGET RECORD FOR PARALLEL SEARCH 1 INTERRUPT SERVICE FLAG BUFFER EDIT POINTERS DECLARED VARIABLE TABLE DECLARED ARRAY TABLE INTERRUPT JUMP TABLE HI-PRIORITY INTERRUPT SAVE AREA LO-PRIORITY INTERRUPT SAVE AREA 1 1 1 26 26 16 7 4 ENTER REGISTER 4 USER RESULT REGISTER I FLAG REGISTER, 0-15 L-TO-R I END-STMT EXECUTION LINK 1 I/O-ROM SERVICE ROUTINE LINK 1 "MAIN LOOP" BYPASS LINK 1 DISPLAY LENGTH I DISPLAY BEGIN POINTER 1 CASSETTE SELECT CODE I FOR JN I FOR JN I REGISTER ASSIGNMENT INFORMATION I P-ARGUMENT 1 PRODUCTION 36 (FOR JO) I PRODUCTION 37 I PRODUCTION 77 I PRODUCTION 78 1 PRODUCTION 136 I P# EXECUTION I A P ROM'S PART OF 'RET' EXECUTION I CASSETTE LDK OK LINK I A P ROM'S CHECK FOR O 1 RESET FOR/NEXT BEFORE EXECUTE 1 RUN-CMND EXECUTION LINK BSS 41 BSS 14 BSS I BSS BSS BSS BSS 4 RESERVE KEYBOARD BUFFER LIVE KEYBOARD ENABLE/DISABLE FLAG SAVE AREA FOR ENTER SAVED SCOMM FOR ENTER FOR POST-RELEASE CHANGES 33 JSM STACK BSS 1 FOR POST-RELEASE CHANGES 1,568,094 Page 3 00114100 77675 0011500 00116000 77676 00117000 00118000 77711 00119000 77712 00120000 77713 00121000 77714 00122000 77715 00123000 77716 00124000 77717 00125000 77720 00126000 77721 00127000 77722 00128000 77723 00129000 77724 00130000 77725 00131000 77726 00132000 77727 00133000 77730 00134000 77731 00135000 77732 00136000 77733 00137000 77734 00138000 77735 00139000 77736 00140000 77737 00141000 77740 00142000 77741 00143000 00144000 77742 00145000 77746 00146000 77752 00147000 77756 00148000 77770 00149000 77774 00151000 000040 00152000 00153000 00154000 00155000 00040 SYSS 00156000 00041 BASE-PAGE READ-WRITE-MEMORY T 26 BSS 1 CATMP BSS 11 s Tl T 2 T 3 T 4 T 5 T 6 T 7 T 8 T 9 TIO O TI I T 12 T 13 T 14 T 15 T 16 T 17 T 18 T 19 T 20 T 21 T 22 T 23 T 24 T 25 BSS I BSS I BSS I BSS I BSS 1 BSS I BSS I BSS 1 BSS 1 BSS 1 BSS 1 BSS I BSS I BSS I BSS 1 BSS 1 BSS 1 BSS I BSS I BSS 1 BSS 1 BSS I BSS 1 BSS I BSS I O Pl BSS 4 OP 2 BSS 4 RES BSS 4 MRW 1 BSS 10 BSS 4 MRW 2 BSS 4 ORG 40 B SYSTEM STARTUP JMP + 1 I BSS 1 CASSETTE TEMPORARIES SHARED TEMPORARIES FLOATING-POINT TEMPORARY FLOATING-POINT TEMPORARY RESULT FOR ALL FLOATING-POINT MATH READ-WRITE ARI MATH READ-WRITE 57 Page 4 00158000 00159000 00160000 00161000 00042 000777 00162000 000042 00163000 00043 000411 00164000 000043 00165000 00044 P 256 00166000 000044 00167000 00045 000377 00168000 000045 00169000 00046 000231 00170000 000046 00171000 00047 000230 00172000 000047 00173000 00050 000224 00174000 000050 00175000 00051 000202 00176000 000051 00177000 00052 000200 00178000 000052 00179000 00053 000177 OQI O OO O O 000053 00181000 00054 000176 00182000 000054 00183000 00055 000175 00184000 000055 00185000 00056 000174 00186000 000056 00187000 00057 000173 001880 000057 00189000 00060 000162 00190000 000060 00191000 00061 000160 00192000 000061 00193000 00062 000153 00194000 000062 00195000 00063 000145 00196000 000063 00197000 00064 000143 00198000 00065 000141 00199000 000065 00200000 00066 000140 00201000 000066 00202000 00067 000135 00203000 000067 00204000 00070 000133 00205000 000070 00206000 00071 000105 00207000 00072 000101 00208000 000072 00209000 00073 000100 00210000 000073 00211000 00074 000077 00212000 000074 00213000 00075 000075 1,568,094 BASE-PAGE READ-ONLY-MEMORY P 511 B 777 P 265 B 411 DEC B 400 P 255 B 377 P 153 B 231 P 152 B 230 P 148 B 224 P 130 B 202 P 128 B 200 P 127 B 177 P 126 B 176 P 125 B 175 P 124 B 174 P 123 B 173 P 114 B 162 P 112 B 160 P 107 B 153 P 101 B 145 P 99 P 97 B 141 P 96 B 140 P 93 B 135 P 91 B 133 P 69 P 65 B 101 P 64 B 100 P 63 B 77 P 61 CONSTANTS DEC 5111 EQU P 511 DEC 265 EQU P 265 256 JB J EQU P 256 DEC 255 J EQU P 255 DFC 153 EQU P 153 DEC 152 EQU P 152 DEC 148 EQU P 148 DEC 130 EQU P 130 DEC 128 J EQU P 128 DEC L 27 J EQU P 127 DEC 126 J EQU P 126 DEC 125 J EQU P 125 DEC 124 J EQU P 124 DEC 123 J EQU P 123 DEC 114 JI EQU Pl 14 DEC 112 EQU P 112 DEC 107 J EQU P 107 DEC 101 EQU P 101 DEC 99 DEC 97 EQU P 97 DEC 96 J 1 EQU P 96 DEC 93 EQU P 93 DEC 91 EQU P 91 DEC 69 Jl DEC 65 EQU P 65 DEC 64 J Il EQU P 64 DEC 63 JI EQU P 63 DEC 61 JN JO N B JN MT MT MT MT B B B B B B B B MT JO MT B B B JO MT B MT 58 Page 5 00214000 00215000 00076 00216000 00217000 00077 00218000 00219000 00100 00220000 00221000 00101 00222000 00223000 00102 00224000 00225000 00103 00226000 00227000 00104 00228000 00229000 00105 00230000 00231000 00106 00232000 00233000 00107 00234000 00235000 00110 00236000 00237000 00111 00238000 00239000 00112 00240000 00241000 00113 00242000 00243000 00114 00244000 00245000 00115 00246000 00247000 00116 00248000 00249000 00117 00250000 00251000 00120 00252000 00253000 00121 00254000 00255000 00122 00256000 00123 00257000 00124 00258000 00125 00259000 00126 00260000 00127 00261000 00262000 00130 00263000 00264000 00131 00265000 00132 00266000 00133 00267000 00134 00268000 00269000 00135 1,568,094 BASE-PAGE READ-ONLY-MEMORY 000073 000076 000072 000077 000064 000063 000101 000061 000102 000103 000057 000104 00056 000106 000054 000107 000053 000052 000111 000051 000112 000113 000044 000114 000043 000042 000116 000117 000037 000034 000121 000032 000024 000023 000022 000021 000127 000017 000016 000014 000013 000134 000012 B 75 P 59 B 73 P 58 B 72 P 52 B 64 P 51 B 63 P 49 B 61 P 48 B 60 P 47 B 57 P 46 B 56 P 45 B 55 P 44 B 54 P 43 B 53 P 42 B 52 P 41 B 51 P 40 B 50 P 36 B 44 P 35 B 43 P 34 B 42 P 32 B 40 P 31 B 37 P 28 B 34 P 26 P 20 P 19 P 18 P 17 P 16 B 20 P 15 B 17 P 14 P 13 P 12 P 11 B 13 P 10 O EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC DEC DEC DEC DEC DEC EQU DEC EQU DEC DEC DEC DEC EQU DEC P 61 59 P 59 58 P 58 52 P 52 51 P 51 49 P 49 48 P 48 47 P47 46 P 46 P 45 44 P 44 43 P 43 42 P 42 41 P 41 P 40 36 P 36P 35 34 P 34 32 P 32 31 P 31 28 P 28 26 19 18 17 16 P 16 P 15 14 13 12 11 Pll JB JB JB JB MT JB JB JB JB JB JB JB JB JB JN JB JN MT JB JN MT JB JO JN JB JN JB JN JB JB JB JB JB JB JN JN JN MT MT JO MT MT JO JO MT JO JN JO MT 1,568,094 BASE-PAGE READ-WRITE-MEMORY 00270000 00136 000011 P 9 00271000 00137 000010 P 8 00272000 000137 BIO 00273000 00140 000007 P 7 00274000 00141 000006 P 6 00275000 00142 000005 P 5 00276000 00143 000004 P 4 00277000 00144 000003 P 3 00278000 00145 000002 P 2 00279000 00146 177776 M 2 00280000 00147 177775 M 3 00281000 00150 177774 M 4 00282000 00151 177773 M 5 00283000 00152 177772 M 6 00284000 00153 177771 M 7 00285000 00154 177770 M 8 00286000 00155 177765 Mll 00287000 00156 177763 M 13 00288000 00157 177761 M 15 00289000 00160 177760 M 16 00290000 00161 177757 M 17 00291000 00162 177740 M 32 00292000 000162 BM 40 00293000 00163 177720 M 48 00294000 00164 177700 M 64 00295000 000164 BM 100 00296000 00165 177660 M 80 00297000 00166 177637 M 97 00298000 00167 177600 M 128 00299000 00170 177400 M 256 00300000 00171 160000 M 8192 00301000 00302000 00172 000174 AONE 00303000 00173 000177 APIE 00304000 00174 000000 00305000 00175 010000 BIOK 00306000 00176 000000 00307000 00177 000000 PO 00308000 00200 030501 00309000 00201 054446 00310000 00202 051540 00311000 00312000 00203 000204 PTCN 00313000 00204 154360 MIOK 00314000 00205 176030 M 1000 00315000 00206 177634 MI 100 00316000 00207 177766 M 10 00317000 00210 000210 ENDT( 00318000 00319000 00211 077740 BXC Ai 00320000 00212 077700 EMAX 00321000 000212 B 777 X 00322000 00213 077577 TMASI 00323000 00214 077440 EOLB 00324000 00215 077400 BXCM 00325000 00216 076574 ZK 2 M M DEC DEC EQU DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC EQU DEC DEC EQU DEC DEC DEC DEC DEC DEF DEF OCT OCT OCT OCT OCT OCT OCT DEF DEC DEC DEC DEC DEF OCT OCT EQU OCT OCT OCT OCT 9 8 P 8 7 6 4 3 2 -2 -3 -4 -5 -6 -7 -8 -11 -13 -15 -16 -17 -32 M 32 -48 -64 M 64 -80 -97 -128 -256 -8192 + 2 + 4 000000 010000 000000 000000 030501 054446 051541 + 1 -10000 -1000 -100 -10 JB JN JB JN JB JB JN JB JN JB JN JB JN JB JN JB JN JB JN JB JN JB JO MT JO JO JO JO JO JO JO JO JO MT MT MT MT MT MT MT MT JN MT JO JO MT JB JN JO MT JB JB JN MT JB JB JB.

JB JB JO MT JO MT JN JO FLOATING-POINT ONE JO FUDGED Pl JB JO JB JO 3141 5926 5360 JB JB JB 77740 JB 77700 EMAX JB 77577 77440 JB 77400 JB 76574 MT JO JO 59 Page 6 Page 7 00326000 00217 00327000 00220 00328000 00221 00329000 00222 00330000 00223 00331000 00224 00332000 00225 00333000 00226 00334000 00227 00335000 00230 00336000 00231 00337000 00232 00338000 00233 00339000 00234 00340000 00235 00341000 00236 00342000 00237 00343000 00344000 00240 00345000 00346000 00241 00347000 00242 00348000 00243 00349000 00244 00350000 00245 00351000 00246 00352000 00247 00353000 00250 00354000 00251 00355000 00356000 00252 00357000 00253 00358000 00254 00359000 00255 00360000 00256 00361000 00257 00362000 00260 00363000 00261 00364000 00365000 00262 00366000 00263 00367000 00264 00368000 00265 00369000 00370000 00371000 00266 00372000 00267 00373000 00270 00374000 00375000 00271 00376000 00272 00377000 00273 00378000 00379000 00380000 00381000 00274 1,568,094 BASE-PAGE READ-ONLY-MEMORY 076000 071050 070000 067000 063000 060000 052525 037440 020000 010133 010050 007403 004406 004000 003377 002000 001000 177701 000167 176000 170720 170000 137777 131400 126273 101175 100377 100200 B 76 K TRCC 2 B 70 K B 67 K B 63 K B 60 K ALBPT QMRKB B 20 K RK 2 RK 1 B 7403 ZK 3 B 4 K B 3377 B 2 K BIK ZAP BM 200 BM 2 K KF B 170 K XMASK 1 MCON AMSE ZKI BM 377 UMASK 000254 NB 1 077772 NB 2 000001 Pl 177764 M 12 000000 177777 MI 000000 000000 020040 100000 040001 100004 000171 000221 011401 TOBLN FLAG STTMP STWHR ARRAY EMPTY FPTMP 110000 FVRWM 110402 FVRRA 062562 LKERM 071157 071040 OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT EQU OCT OCT OCT OCT OCT OCT OCT OCT OCT DEF DEF DEC DEC DEC DEC DEC DEC OCT OCT OCT OCT EQU EQU OCT OCT OCT OCT OCT OCT 76000 71050 70000 67000 63000 60000 52525 37440 20000 10133 10050 7403 4406 4000 3377 2000 1000 177701 M 128 -2000 170720 170000 137777 131400 126273 101175 100377 100200 + 2 77772 B I -12 0 -1 0 020040 100000 040001 100004 M 8192 B 70 K 011401 110000 110402 62562 71157 71040 JB JO JB JB JB JB JB JB JB JB MT MT MT MT MT MT MT MT JO JO JB JB MT MT SPECIAL PATTERN FOR NUMBER BUILDER JB JN JO MT JB JO JB JO MT TWO ASCII BLANKS STRING CONSTANT IN STACK ENTIRE ARRAY EMPTY FULL-PRECISION CONSTANT IN STACK FULL-PRECISION VARIABLE IN RWM FULL-PRECISION VARIABLE IN R LOWER-CASE "ERROR" POINTERS 000053 AAEOL DEF B 177 ADDRESS OF EOL 000053 AAEOL DEF B 3177 ADDRESS OF EOL 1,568,094 BASE-PAGE READ-ONLY-MEMORY 003820000275 077440 AITAB DEF ITABL 00383000 00276 077354 ADVTB DEF DVTAB 00384000 00277 00385000 00300 00386000 00301 00387000 00302 00388000 00303 00389000 00304 00390000 00305 00391000 00306 00392000 00307 00393000 00310 00394000 00311 00395000 00312 00396000 00313 00397000 00314 06398000 00315 00399000 00316 00400000 00317 00401000 00320 00402000 00321 00403000 00322 00404000 00323 00405000 00324 00406000 00325 00407000 00408000 00326 00409000 00410000 00411000 00327 00412000 00330 00413000 00331 00414000 00332 00415000 00333 077406 077632 077633 176557 076557 076556 076676 077135 177135 077134 ADATB AJSTK AJSMS ACBFX ACBF ACBUF ACLMT AKBUF AKBFX AKBFM 077205 AKBFL 000306 AKBST 077064 AIBUF 177064 AIBFX 077063 AIBFM 077134 AIBFL 077066 AIBSL 077070 AIOLM 000313 AIBST 0077534 ARBUF 077533 076677 176677 000305 077016 000326 077017 076550 000332 00416000 00417000 00334 000177 00418000 00335 077711 00419000 00420000 00336 077742 00421000 00337 077746 00422000 00340 077752 00423000 00341 077476 00424000 00342 077502 00425000 00426000 00343 077414 00427000 000326 00428000 00429000 00344 077777 00430000 000330 00431000 00432000 00345 077770 00433000 000127 ARBFM ASTK 1 ACSTF ASTAK ASLMT ATROM AROMS ABNRY AMAIN ARTBL AMTBL ADPO ATMP AO Pl AOP 2 ARES AENR ALWRES SVRE STRK MAW LWAM ADRI ADR 2 DEF DATAB DEF JSTAK-1 DEF JSTAK DEF CBUFF,I DEF CBUFF DEF CBUFF-I DEF CBUFF+ 79 DEF KBUFF DEF KBUFF,I DEF KBUFF-I DEF KBUFF+ 40 DEF AKBUF DEF IBUFF DEF IBUFF,I DEF IBUFF-I DEF IBUFF+ 40 DEF IBUFF+ 2 DEF IBUFF+ 4 DEF AIBUF DEF RBUFF DEF RBUFF-1 DEF CSTAK DEF CSTAK,I EQU ACLMT DEF CSTAK+ 79 EQU ASLMT DEF RMTBL DEF BINRY DEF ARTBL BSS 1 BSS 1 DEFPO DEF Tl DEF DEF DEF DEF DEF ADDRESS OF INTERRUPT TABLE ADDRESS OF DECLARED VARIABLE TABLE

ADDRESS OF DECLARED ARRAY TABLE ADDRESS OF JSM STACK COMPILE BUFFER 1ST CHAR ADDRESS COMPILE BUFFER STARTING ADDRESS ADDRESS OF COMPILE BUFFER COMPILE BUFFER UPPER LIMIT KEYBOARD BUFFER KEYBOARD BUFFER 1STCHARADDRESS KEYBOARD BUFFER STARTING ADDRESS 1 KEYBOARD BUFFER ENDING ADDRESS KEYBOARD BUFFER POINTERS START I/O BUFFER I/O BUFFER 1ST CHAR ADDRESS I/O BUFFER STARTINF ADDRESS-I 1 I/O BUFFER ENDING ADDRESS I/O BUFFER STARTING ADDRESS + 2 I/O BUFFER STARTING ADDRESS EDIT POINTERS STARTING ADDRESS COMPILE STACK STARTING ADDRESS ADDRESS OF COMPILE STACK I COMPILE STACK UPPER LIMIT ADDRESS OF ROM ADDRESS TABLE ADDRESS OF BINARY HEADER ADDRESS OF MAINFRAME HEADER ADDRESS OF REVERSE COMPILE TABLE ADDRESS OF MAINFRAME MNEMONIC TABLE

STARTING ADDRESS OF SHARED TEMP O Pl OP 2 RES ENR URES ARS DVTAB-101 B+ 97 EQU ASLMT OCT 77777 MAXIMUM AVAILABLE WORD EQU ABNRY LAST WORD AVAILABLE RWM + 1 DEF ARI EQU P 16 USEFUL POINTERS AND EQUATES 61 Page 8 00435000 00436000 1,568,094 BASE-PAGE READ-ONLY-MEMORY CMTMP+ O CMTMP+ I CMTMP+ 2 CMTMP+ 3 TOKEN FOR PARSER ASCII FOR PARSER USED BY SCANNER IN CASE OF ERROR IMPLIED-MULTIPLY FLAG EQU CMTMP+ 13 STACK POINTER EQU CMTMP+ 0 PRIORITY/CLASS/CHARACTERS EQU CMTMP+ I CHARACTER ADDRESS EXTMP+ O EXTMP+ 2 EXTMP+ 3 077265 HERE EQU EXTMP+ 4 077266 WHERE EQU EXTMP+ 5 EQU EXTMP+ 6 EQU EXTMP+ 7 EQU EXTMP+ 8 EQU EXTMP+ 9 EQU EXTMP+ 10 EQU EXTMP+ 11 EQU CSTMP+ 4 EQU LKTMP+ 3 RETURN LINK INFORMATION TOP OF EXECUTION STACK ADDRESS OF NEXT LINE TO BE EXECUTED ADDRESS OF LINE BEING EXECUTED ADDRESS FOR CS TDO RESUME EXECUTION CURRENT LINE TRACE INFORMATION ADDRESS IN DVTAB OR DATAB 000141 STRID EQU P 6 ID OF STRING ROM 62 Page 9 EQU EQU EQU EQU 077237 077240 077241 077242 077254 077237 077240 077261 077263 077264 TKN BCU OLUC ISTAR STAKP GUIDE ASCII AP 3 A Pl LEND 00437000 00438000 00439000 00440000 00441000 00442000 00443000 00444000 00445000 00446000 00447000 00448000 00449000 00450000 00451000 00452000 00453000 00454000 00455000 00456000 00457000 00458000 00459000 00460000 00461000 00462000 00463000 EQU EQU EQU 077267 077270 077271 077272 077273 077274 077222 077610 TRACE SAVEC BASE FA Pl OPND 1 OPND 2 L KBFMT 1,568,094 BASE-PAGE READ-ONLY-MEMORY 00465000 00466000 00467000 00468000 00346 00469000 00347 00470000 00350 00471000 00351 00472000 00352 00473000 00353 00474000 00354 00475000 00355 00476000 00477000 00356 00478000 00357 00479000 00480000 00360 00481000 00361 00482000 00362 00483000 00363 00484000 00364 00485000 00365 00486000 00366 00487000 00367 00488000 00370 00489000 00371 00490000 00372 00491000 00373 00492000 00374 00493000 00375 00494000 00376 00495000 00377 00496000 00400 00497000 00401 00498000 00402 00499000 00500000 00501000 00502000 00403 00503000 00404 504000 00405 00505000 00406 00506000 00407 00507000 00410 00508000 00411 00509000 00412 00510000 00413 00511000 00414 00512000 00415 00513000 00416 00514000 00417 00515000 00420 00516000 00421 00517000 00422 00518000 00423 00519000 00424 00520000 00425 ROUTINE ADDRESSES ACPLR AREAD AAPL 1 ASETC ANUMB ALBLN ALBCM AOUTS ARCLR ADSRM ARSGT AINTI AFBAD AINTT AINTK AINTX ARAP ASTP ALLOC AOVTS AASTR ALNTR AFCI AFCC ASFG AGNAM ACLBL AADBA A.ADB BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS COMPILER COMPILER INPUT READER APPLY-PRODUCTION RETURN TO COMPILER I COMPILE ERROR NUMBER-BUILDER 1 QUOTE SCANNER 1 QUOTE BUILDER COMPILE BYTE WRITER REVERSE COMPILER 1 DISPLAY ROM I D NUMBER RESET HI-SPEED BRANCHES I INTERPRETER 'RUN' ENTRY FIND BYTE ADDRESS DIFFERENCE INTERPRETER 'CLL' ENTRY INTERPRETER 'CONTINUE' ENTRY INTERPRETER EXECUTION RETURN FOR MATH ROUTINES FOR END-STMT LINK ALLOCATOR EXECUTION STACK OVERFLOW TEST ASSIGNMENT TRACE I LINE NUMBER TRACE FIND-BYTE INITIALIZATION ENTRY FIND-BYTE CONTINUATION ENTRY SET A FLAG GET VARIABLE NAME FIND LABEL LINE ADDRESS ADJUST BYTE ADDRESS ENTRY #1 ADJUST BYTE ADDRESS ENTRY #2 K PAGE CONTROL SUPERVISOR AMCLX AERRI AERR 2 APEMI AEREX AREJR AXCMM APLIR ACNDT ACTFC ACONT AEXCK AEXCL AKYPR AERCS AECIM ASCND ASYER ACNIN BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS I MAIN LOOPADDR+I ERROR ROUTINE NO RETURN I ERROR ROUTINE RETURN P+ 2 1 PLACE ERROR MESSAGE IN I/O BUFFER 1 ERROR EXIT AFTER 'AERR 2 ' INTERRUPT REJECT ROUTINE I XCOMM MANAGEMENT 1 PLACE LINE NUMBER IN I/O BUFFER 1 COMMAND TABLE 1 CHECK TABLE FOR COMMAND I IMMEDIATE EXECUTE CONTINUE 1 COMMAND EXECUTION I PLACE LINE BRIDGES ON COMPILED LINE I PROCESS A KEY I CASSETTE RUN ENTRY 1 IMMEDIATE CONTINUE 1 COMMANDTABLEADDRESS 1 SYSTEM ERROR 1 CONTINUE INITIALIZATION 63 Page 10 1,568,094 BASE-PAGE READ-ONLY-MEMORY 00521000 00426 00522000 00427 00523000 00430 00524000 00431 00525000 00526000 00527000 00528000 00432 00529000 00433 00530000 00434 00531000 00435 00532000 00436 00533000 00437 00534000 00440 00535000 00441 00536000 00442 00537000 00443 00538000 00444 00539000 00445 00540000 00446 00541000 00447 00542000 00450 00543000 00451 00544000 00452 00545000 00453 00546000 00454 00547000 00455 00548000 00456 00549000 00457 00550000 00460 00551000 00461 00552000 00462 00553000 00554000 00555000 00556000 00463 0055700 00464 00558000 00465 00559000 00466 00560000 00467 00561000 00470 00562000 00471 00563000 00472 00564000 00473 00565000 00474 00566000 00475 00567000 00476 00568000 00477 00569000 00500 00570000 00501 00571000 00502 00572000 00503 00573000 00504 00574000 00575000 00576000 AERSA BSS 1 AISTR BSS 1 AISTX AEXST BSS 1 BSS I LINK FOR ERASE-ALL PLACE KEYBOARD CHARACTER IN I/O BUF PLACE CHARACTER IN I/O BUFFER STATEMENT EXECUTION

12 K PAGE I/O SUPERVISOR ADSPC ALDSP AKBSR ATRBF AEPON AEPNX ASVRG AKB R 2 ACPST APRNT A.PRN APNMR AFBP ASWIO ACLBI ACLEB AEOLB ACLCM ARPRL ALKEX ALXER ALXKY AKYTB APRKB APSTR BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS I (PSTRG) 1 1 (PSTRG) 22 K PAGE AMUPH BSS AMAMP BSS AMPUP AMPML AMTHM AMTLM AZRWM AERAV ALISK AKEYN AEDPT ATLNI ABTDA AEOLN AGNXT ATCHR ARNLO ARNLF BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS DISPLAY EDIT BUFFER WITH CURSOR DISPLAY I/O BUFFER KEYBOARD SERVICE ROUTINE TRANSFER I/O BUFFER TO KEYBOARD BUF PRINT-ALL ROUTINE LINK TO PRINT-ALL FOR ENP SAVE LOW PRIORITY A,B,E,O RESTORE LOW PRIORITY A,B,E,O CHECK PRINTER STATUS PRINT CHARACTERS ALREADY GIVEN PRINT 16 CHARS FROM I/O BUFFER PRINT A NUMERIC VALUE FIND DISPLAY BEGIN POINTER SWAP POINTERS TO EDIT I/O BUFFER CLEAR I/O BUFFER CLEAR EDIT BUFFER SET EOL IN EDIT BUFFER CLEAR COMPILE BUFFER ROM "POWER REDUCTION LOOP" LINK TO LIVE-KEYBOARD EXECUTION LINK TO LIVE-KEYBOARD EXECUTE ERROR LINK TO LIVE-KEYBOARD EXECUTE KEY PRINT-ALL FROM KEYBOARD BUFFER MOVE MAIN PROGRAM TO HIGHER MEMORY MOVE MAIN PROGRAM TO LOWER MEMORY MOVE PART OF MAIN PROGRAM HIGHER MOVE PART OF MAIN PROGRAM LOWER MOVE RWM HIGHER MOVE RWM LOWER ZERO RWM ERASE ALL VARIABLES LIST A SPECIAL KEY PUT SPECIAL KEY NUMBER IN I/O BUF RESET EDIT POINTERS PLACE LINE NUMBER IN I/O BUFFER BINARY TO DECIMAL ASCII FIND EOL IN I/O BUFFER GET NEXT CHARACTER TRANSFER CHARS LINK TO TURN ON RUN LIGHT LINK TO TURN OFF RUN LIGHT 26 K PAGE Page 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1,568,094 BASE-PAGE READ-ONLY-MEMORY 00577000 00505 00578000 00506 00579000 00507 00580000 00510 00581000 00511 00582000 00512 00583000 00513 00584000 00514 00585000 00515 00586000 00516 00587000 00517 00588000 00520 00589000 00521 00590000 00522 00591000 00523 00592000 00593000 00524 00594000 00525 00595000 00526 00596000 00527 00597000 00530 0059 800000531 00599000 00532 00600000 00533 00601000 00534 00602000 00535 0003000 00536 00604000 00537 00605 000 00540 066000 00541 00607000 00542 00608000 00543 00609000 00544 00610000 00545 00611000 00546 00612000 00547 00613000 00550 00614000 00551 00615000 00552 00616000 00553 00617000 00554 006-18000 00555 00619000 00556 00620 00557 00621000 00560 00622000 00561 00623000 00562 00624000 00563 00625000 00626000 00564 00627000 00565 00628000 00629000 00566 00630000 00567 00631000 00570 00632000 00571 APGET BSS APNUM AINTC AGLL AGEOL AFLAD AFLNA ASLLN ASTKI AREST ARENI AREND ASTKG ADIGX AGLNO AUNM AADD ASUB AMUL ADIV ASQR AGE AGT ALT ALE AEQ ANE AAND AOR AXOR ANOT APRND ADRND ARERR ARND ATSUB AFLTC AGETI AGET 2 AADDI ASUBI AMULI ADIVI ADIV 2 ASQRI ATSUI AFLTP ASTMA ASTMA ASTM I ALST APRT ADSP ASPC BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS I (PGET) GET NEXT PARAMETER FOR"PRINT" LIST I (PNUM) PROCESS A NUMERIC ITEM I (INTCK) MAKE INTEGER FROM ASCII STRING I (GLENL)GET LENGTH OF COMPILED LINE 1 FIND EOL IN COMPILE BUFFER 1 (FLADR) FIND LINE ADDRESS I FIND LINE ADDR (TMP 7) I (SLLN) SET 'LNO' TO LAST LINE NUMBER OR -1 1 LINK TO LIVE-KEYBOARD INIT 1 LINK TO LIVE-KEYBOARD RESTORE 1 INSERT LINE RENUMBER GTO/GSB I DELETE LINE RENUMBER GTO/GSB I STACK ROUTINE FOR GSB 1 GENERAL RANGE CHECK ROUTINE I GET LINE NUMBER OF CURRENT LINE l UNARY MINUS -FILLED IN FROM 14 I ADD 1 SUBTRACT 1 MULTIPLY I DIVIDE I SQRT 1 ≥ 1 > 1 < 1 ≤ I = 1 # I AND I OR I XOR I NOT 1 P-ROUND 1 D-ROUND I RECOVERABLE MATH ERROR I ROUND 1 USED BY RELATIONAL OPERATIONS I FULL-PRECISION EXPONENT RANGE 1 1 1 1 1 1 1 1 BSS I BSS I BSS BSS BSS BSS K CHECK GET ONE MATH OPRND FROM STACK GET TWO MATH OPNDS FROM STACK ADD+ 1 I SUB RACT+ I MULTIPLY+ 1 DIVIDE+ 1 DIVIDE ENTRY FOR TRUNCATED QUOTIENT SQRT+ TSUB+ 1 CONVERT TO FLOATING-POINT STMAX ENTRY FILLED IN FROM 24 K STMAX ENTRY 1.

1 1 LINK TO EXECUTE 'LIST' LINK TO EXECUTE 'PRT' LINK TO EXECUTE 'DSP' LINK TO EXECUTE 'SPC' Page 12 1,568 094 BASE-PAGE READ-ONLY-MEMORY 00633000 00572 00634000 00573 00635000 00574 00636000 00575 00637000 00576 00638000 00577 00639000 00640000 00600 00641000 00601 00642000 00602 00643000 00603 00644000 00604 00645000 00605 00646000 00606 00647000 00648000 00607 00649000 00610 00650000 00611 00651000 00612 00652000 00653000 00613 001053 001110 001133 001142 ALSTK AKUN AKUF AFXD AFLT AENT ACSTI ARFK DMALO ASTPA AWTRR ACHST ARDRC ABUMP ACOUN AGTAD AGTIN BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS DEF DEF DEF DEF LINK TO EXECUTE 'LISTK' LINK TO EXECUTE 'KON' LINK TO EXECUTE 'KOFF' LINK TO EXECUTE 'FXD' LINK TO EXECUTE'FLT' LINK TO EXECUTE 'ENT' 1 1 1 1 1 1 CASSETTE INITIALIZATION REWIND FROM KEYBOARD LINK TO DMA LOCKOUT ROUTINE LINK TO SET CASSETTE P A.

LINK TO WRITE RECORD LINK TO FIND RECORD LINK TO READ RECORD BUMP COUNT GETAD GETIN BUMP PARAMETER POINTER (FAPI) COUNT PARAMETERS ON STACK GETAD SUBROUTINE GETIN SUBROUTINE FOR MORE LINKS IF NEEDED 66 Page 13 1 1 1 1 1 BSS 2 1,568,094 BASE-PAGE SUBROUTINES UTILITIES UTILITIES 00659000 00660000 SUBR 00661000 00662000 ON E, 00663000 00664000 00665000 00666000 00615 005263 ABSAD 00667000 00616 035276 00668000 00669000 00617 100001 00670000 00620 050140 00671000 00621 020632 00672000 00622 024145 00673000 00623 104001 00674000 00624 124000 00675000 00676000 00625 001276 00677000 00626 020254 00678000 00627 100000 00679000 00630 021276 00680000 00631 170201 00681000 00682000 00632 077275 INDXP OUTINE TO GET OPERAND ABSOLUTE ADDRESS W F C.

XIT: A B SAVEB = UPDATED STACK POINTER = ABSOLUTE ADDRESS = OLD STACK POINTER LDB A Pl STB SAVEB LDA AND ADA ADB LDB ADB LDA ADA LDA ADA RET B,I P 7 INDXP P 2 B,I AI SAVEB Pl A,I SAVEB ENTER HERE TO USE A Pl GET INDEX NUMBER B=RELATIVE ADDRESS B=ABSOLUTE ADDRESS A=LENGTH A=UPDATED POINTER DEF IDXRW POINTER TO INDEXED RWM WAIT SUBROUTINE ON ENTRY: B-DELAY IN MILLISECONDS ON ENTRY: B= DELAY IN MILLISECONDS 000642 DELAY 072100 001206 010254 170201 076173 170201 LDA TIME RIA LDA IOTMP TEST FOR STOP KEY CPA Pl RET I RIB -5 RET I 00642 177130 TIME 67 Page 14 00655000 00656000 00657000 00684000 00685000 000 0068700 0068800 0689000 00690000 00691000 00692000 00693000 006400 00695000 00696000 00697000 00633 00634 00635 00636 00637 00640 00641 OCT 177130 1,568,094 BASE-PAGE SUBROUTINES 00699000 00700000 CON 00701000 00702000 ON l 00703000 00704000 A PC 00705000 00706000 ON 00707000 00708000 B Hi 00709000 O IN 00710000 00711000 AR 2 00712000 00713000 TEN, 00714000 00715000 00643 000001 00716000 00717000 00644 004127 FIXPT 00718000 00645 071403 00719000 00646 004177 00720000 00647 173201 00721000 00650 000020 00722000 00651 170405 00723000 00652 020254 00724000 00653 072417 00725000 00654 172426 00726000 00655 031711 00727000 00656 064664 00728000 00729000 00657 024001 FII 00730000 00660 035712 00731000 00661 024001 00732000 00662 024001 00733000 00663 025712 00734000 00664 000177 F 12 00735000 00665 075541 00736000 00666 170040 00737000 00667 024000 00738000 00670 055711 00739000 00671 064657 00740000 00741000 00672 000021 F 13 00742000 00673 170513 00743000 00674 020151 00744000 00675 172402 00745000 00676 024257 00746000 00747000 00677 000020 00748000 00700 073402 00749000 00701 174040 00750000 00702 170201 F 14 VERT FLOATING NUMBER TO INTEGER W F C.

ENTRY:

)INTS TO FLOATING NUMBER EXIT:

AS INTEGER VALUE IDICATES OVERFLOW STATUS HAS FRACTIONAL REMAINDER lPORARIES USED; TI, T 2 LDA B LDB XFR LDB SOC LDA AAR ADA SZA SAM STA JMP ADR 2 4 PO + l,C AR 2 6 Pl F 13 FI 4 Tl F 12 ADB B STB T 2 ADB B ADB B ADB T 2 LDA PO MLY TCA ADB A DSZ Tl JMP F Il LDA SAR ADA SAM ADB AR 2 + 1 12 M 5 + 2 M 1 LDA AR 2 RLA + 2 TCB RET I ALTERNATEENTRY ADDRESS OF AR 2 MOVE NUMBER TO AR 2 INITIALIZE RESULT LOOK AT EXPONENT 2 X 4 X 8 X IOX SHIFT AR 2 LEFT BUILD NEGATIVE NUMBER ADD IN NEXT DIGIT ROUND TEST MANTISSA SIGN COMPLEMENT IF NECESSARY 68 Page 15 69 Page 16 00752000 00753000 00754000 00755000 00703 00756000 00704 00757000 00705 00758000 00706 00759000 00707 00761000 00762000 00763000 00764000 00710 00765000 00711 00766000 00712 00767000 00713 00769000 0077000 00771000 00772000 00714 00773000 00774000 00715 00775000 00716 00776000 00717 00777000 00720 00778000 00721 00779000 00780000 00722 00781000 00723 00782000 00783000 00724 00784000 00725 00785000 00726 00786000 00727 00788000 00789000 0790000 O 00791000 00730 00792000 00731 00793000 00732 00794000 00795000 00733 00796000 00734 1,568,094 BASE-PAGE SUBROUTINES 000177 030011 000143 030005 170201 140450 000214 130313 170201 000721 000177 064720 000143 031256 170201 140404 031461 005315 076474 140404 030064 000731 140404 031071 140404 031462 DEEP SUBROUTINE BEEP LDA PO STA PA LDA P 4 STA R 5 RET 1 CLEAR I/O BUFFER AND PUT 'LAZY-T' AT LEFT END EOLIO JSM ACLBI,I LDA EOLB STA AIBUF,I RET 1 MISCELLANY FOR JB ARETI CLMOD STELM STMOD RETI ERLNF SECCK ERSEC SOME AREPN E 29 E 32 E 32 DEF LDA JMP LDA STA RET JSM ASC LDB SZB JSM ASC RETI PO STMOD P 4 MODE AERRI,I 1,31 STYFG RETI AERRI,I 1,04 SET MODE= 0 SET MODE= 4 LINE NOT FOUND COMMON ERRORS DEF + 1 JSM AERRI,I ERROR, ROM MISSING AT EXECUTION ASC 1,29 JSM AERRI,I ERROR, ILLEGAL DATA TYPE ASC 1,32 Page 17 00798000 00799000 00800000 00801000 00735 070430 00802000 00736 070000 00803000 00737 064747 00804000 00805000 00806000 00807000 00808000 00809000 00740 070430 00810000 00741 001255 00811000 00742 050001 00812000 00743 064746 00813000 00814000 00815000 00816000 00817000 00818000 00744 070430 00819000 00745 061255 00820000 00746 031255 00821000 00747 070420 00822000 00750 170201 00824000 00825000 00826000 00827000 00828000 00829000 00830000 00831000 00832000 00833000 00751 101272 00834000 00752 172201 00835000 00753 170513 00836000 00754 010254 00837000 00755 064757 00838000 00756 170201 00839000 00840000 00757 005272 00841000 00760 040616 00842000 00761 170202 1,568,094 BASE-PAGE SUBROUTINES SUBROUTINE TO DO AN EXE A EXEXA DIR PREVENT INTERRUPT INTERFERENCE EXE A JMP SXCMM+ 3 SUBROUTINE TO CLEAR BITS IN XCOMM ON ENTRY: B=MASK TO CLEAR BITS CLXCM DIR PREVENT INTERRUPT INTERFERENCE LDA XCOMM AND B JMP SXCMM+ 2 SUBROUTINE TO SET BITS IN XCOMM ON ENTRY: A=BITS TO BE INCLUDED SXCMM DIR PREVENT INTERRUPT INTERFERENCE IOR XCOMM STA XCOMM EIR RET 1 SUBROUTINE TO GET NUMERIC PARAMETER ON ENTRY: FA Pi 1 POINTS TO PARAMETER ON EXIT TO P+ 1: A=CLASS OF NON-NUMERIC ITEM ENCOUNT.

ON EXIT TO P+ 2: B POINTS TO VALUE NGET LDA FAPI,I GET 'WHAT' WORD SAP + 1,C SAR 12 GET CLASS CPA Pl NUMERIC? JMP + 2 YES RET I NO LDB FA Pl JSM ABSAD+ 1 I RET 2 1,568,094 BASE-PAGE SUBROUTINES INTEGER DIVIDE W.F C.

ON ENTRY:

BA HAS DIVIDEND JSM IDIV DEF DIVISOR ON EXIT:

A = QUOTIENT B = REMAINDER O = OVERFLOW STATUS TEMPORARIES USED: TI, T 2, T 3, T 4, T 5, T 6 TEMPORARIES USED: Tl, T 2, T 3, T 4, T 5, T 6 00762 004177 SDIV 00763 035711 IDIV 00764 004146 00765 035712 00766 035713 00767 004160 00770 035714 00771 144003 00772 104003 00773 104001 00774 104001 00775 176003 00776 045712 00777 174040 01000 035715 01001 174040 01002 035716 01003 005711 01004 176010 01005 045712 01006 066007 01007 170040 01010 174140 01011 072002 01012 024254 01013 045713 01014 025716 DIVO 01015 176034 LDB STB LDB STB STB LDB STB ISZ LDB LDB LDB SBP ISZ TCB STB TCB STB LDB SBP ISZ JMP TCA CMB RZA ADB ISZ ADB SBP PO TI M 2 T 2 T 3 M 16 T 4 R,I R,I B,I B,I + 3 T 2 T 5 T 6 TI DIVO T 2 + 1 + 2 Pl T 3 T 6 OVFL ALTERNATE ENTRY SAVE HI DIVIDEND INITIALIZE QUOTIENT SIGN INITIALIZE REMAINDER SIGN INITIALIZE LOOP COUNTER ADDRESS OF DIVISOR ADDRESS ADDRESS OF DIVISOR GET ABS OF DIVISOR SAVE+DIVISOR SAVE-DIVISOR TEST DIVIDEND SIGN COMPLEMENT DIVIDEND (ALLOW FOR SKIP) SET REMAINDER SIGN ADD DIVISOR SKIP IF OVERFLOW 71 Page 18 00844000 00845000 OO 46000 00847000 00848000 00849000 0085000 00851000 00852000 00853000 00854000 00855000 00856000 00857000 00858000 00859000 00860000 00861000 00862000 00863000 0064000 00865000 00866000 0 Q 067000 0066800 o O 00869 oo O 008670000 00871000 00872000 006873000 00874000 00875000 00876000 00877000 00878000 00879000 00860000 00681000 00682000 o 0063000 00984000 00865000 00886000 00887000 00688000 00889000 00890000 00891000 1,568,094 BASE-PAGE SUBROUTINES 00893000 00894000 00895000 00896000 01016 00897000 01017 00898000 01020 00899000 01021 00900000 01022 00901000 01023 00902000 01024 00903000 01025 00904000 01026 00905000 01027 00906000 01030 00907000 01031 00908000 00909000 01032 00910000 01033 00911000 01034 00912000 01035 00913000 00914000 01036 00915000 01037 00916000 00917000 01040 00918000 01041 00919000 01042 00920000 01043 00921000 00922000 01044 00923000 01045 00924000 01046 00925000 01047 00926000 00927000 01050 00928000 00929000 01051 00930000 01052 MAIN DIVIDE LOOP MAIN DIVIDE LOOP 174600 DIVI 172002 024254 170600 025715 066032 073072 DIV 2 174600 172002 024254 170600 025716 176402 DIV 3 060254 045714 066024 176002 025715 045712 066050 170040 173201 045713 170201 174040 170201 172073 173301 170201 DIV 4 DIV 5 OVFL OVFL SBL 1 SAP + 2 ADB Pl SAL 1 ADB T 5 JMP DIV 3 SLA DIVI SBL 1 SAP + 2 ADB Pl SAL 1 ADB T 6 SBM + 2 IOR Pl ISZ T 4 JMP DIV 2 SBP + 2 ADB T 5 ISZ T 2 JMP DIV 5 TCA SOC + 1,C ISZ T 3 RET 1 TCB RET 1 SAP DIV 4 SOC +I,S RET I SHIFT LEFT ADD+DIVISOR SHIFT LEFT ADD DIVISOR INCREMENT LOOP COUNTER AND TEST CORRECT NEGATIVE REMAINDER CORRECT QUOTIENT SIGN ALL OK RETURN POSITIVE REMAINDER RETURN NEGATIVE REMAINDER OVERFLOW, SET O-REGISTER 72 Page 19 73 Page 20 00932000 00933000 OO 934000 00935000 00936000 00937000 00938000 00939000 00940000 00941000 00942000 00943000 01053 072415 00944000 01054 031711 00945000 01055 172014 00946000 00947000 01056 005272 00948000 01057 100001 00949000 01060 170603 00950000 01061 172012 00951000 01062 000001 00952000 01063 020254 00953000 01064 124000 00954000 01065 045711 00955000 01066 066057 00956000 00957000 01067 035272 00958000 01070 170202 00959000 00960000 01071 005263 00961000 01072 015272 00962000 01073 170201 00963000 00964000 01074 035712 00965000 01075 000001 00966000 01076 020254 00967000 01077 124000 00968000 01100 015272 00969000 01101 066103 00970000 01102 066074 00971000 00972000 01103 005712 00973000 01104 035272 00974000 01105 055711 00975000 01106 066071 00976000 00977000 01107 170202 1,568,094 BASE-PAGE SUBROUTINES SUBROUTINE TO BUMP PARAMETER POINTER :

ON ENTRY: A = + COUNT ON EXIT TO P + 1: NO MORE PARAMETERS ON EXIT TO P + 2: FA Pl = NEXT PARAMETER ADDRESS TEMPORARIES USED: TI, T 2 BUMP SZA BU 2 SKIP IFNOTHING TO DO STA TI SAP BU 3 WHICH WAY? LDB FA Pl MOVE TO LEFT IFBUI LDA B,1 SAL 4 LOOK AT PARAMETER LINK BIT SAP BU 4 LDA B ADA Pl ADB A,1 ISZ TI JMP BUI KEEP ON STB FA Pl BU 2 RET 2 RETURN BU 3 LDB A Pl MOVE TO RIGHT IF+ CPB FA Pl BU 4 RET I RETURN BU 5 STB T 2 SAVE PREVIOUS LOCATION LDAB ADA Pl ADB A,1 CPB FA Pl JMP + 2 JMP BU 5 LDB T 2 STB FA Pl MOVE FA Pl ONE POSITION DSZ TI JMP BU 3 KEEP ON RET 2 RETURN 1,568,094 BASE-PAGE SUBROUTINES SUBROUTINE TO COUNT PARAMETERS ON STACK ON EXIT: A = # OFNUMERICPARAMETERS B = # OF PARAMETERS FA Pl = LOCATION OF LEFTMOST PARAMETER TEMPORARIES USED: T, T 2 TEMPORARIES USED: Ti, T 2 00987000 00988000 01110 000177 COUNT 00989000 01111 031711 00990000 01112 031712 00991000 01113 005263 00992000 01114 100001 C Ol 00993000 01115 170600 00994000 01116 172402 00995000 01117 045711 00996000 01120 045712 00997000 01121 170602 00998000 01122 172005 00999000 01123 000001 01000000 01124 020254 01001000 01125 124000 01002000 01126 066114 01003000 01004000 01127 035272 C 02 01005000 01130 001711 01006000 01131 005712 01007000 01132 170201 LDA STA STA LDB LDA SAL SAM ISZ ISZ SAL SAP LDA ADA ADB JMP STB LDA LDB RET PO Tl T 2 A Pl B,1 1 + 2 T 1 T 2 3 C 02 B Pl A,I COI FA Pl TI T 2 I INITIALIZE A COUNT INITIALIZE B COUNT GET "WHAT" WORD LOOK AT CLASS SKIP IF NON-NUMERIC LOOK AT PARAMETER LINK BIT MORE PARAMETERS FOLLOW INITIALIZE POINTER RETURN 74.

Page 21 00979000 00980000 00981000 00982000 00983000 00984000 00985000 00986000 1,568,094 BASE-PAGE SUBROUTINES 01009000 01010000 GET 01011000 01012000 ON E 01013000 01014000 01015000 01133 040615 GETAE 01016000 01134 031263 01017000 01018000 01135 101276 01019000 01136 050221 01020000 01137 010175 01021000 01140 170201 01022000 01023000 01141 064733 01025000 01026000 GET 01027000 01028000 ONE 01029000 01030000 01142 042133 GETIN 01031000 01143 040643 01032000 01144 173402 01033000 01145 170201 01034000 01035000 01146 140404 Ell 01036000 01147 030461 01038000 01039000 WAIT 01040000 01041000 01150 042142 XWAIT 01042000 01151 176003 01043000 01152 140404 E 17 A01044000 01153 030467 01045000 01046000 01154 174040 01047000 01155 040633 01048000 01156 164365 01050000 01157 01051000 09999000 END OF PASS 2 NO ERRORS NUMERIC OPERAND ADDRESS EXIT: B = OPERAND ADDRESS A Pl = UPDATED ) JSM ABSAD STA A Pl GET OPERAND ABSOLUTE ADDRESS UPDATE A Pl LDA SAVEB I THE 'WHAT'WORD AND B 70 K CPA BIOK RET I RETURN IF NUMERIC JMP E 32 INTEGER PARAMETER XIT: B = INTEGER VALUE JSM GETAD JSM FIXPT-I SOS + 2 RET 1 JSM AERRI,I ASC 1,11 GET OPERAND ADDRESS CONVERT TO INTEGER ERROR, INTEGER OUT OF RANGE EXECUTION JSM SBP JSM ASC GETIN + 3 AERRI,I 1,17 TCB JSM DELAY JMP AINTX,I BSS 1 LST END DETECTED GET INTEGER PARAMETER ERROR, ILLEGAL WAIT PARAMETER GO DELAY RESERVED FOR OK-PAGE CHECKSUM Page 23 00003000 76550 00004000 BASE-PAGE READ-WRITE-MEMORY ORG 765508 UNL Page 22 1,568,094 Page 24 02001000 01170 02002000 02003000 02004000 CLA 02005000 02006000 LEF 02007000 RIG 02008000 02009000 01170 000000 CTBL 02010000 01171 000000 02011000 01172 000000 02012000 01173 000000 02013000 01174 000000 02014000 01175 000000 02015000 01176 000000 02016000 01177 000000 02017000 01200 000000 02018000 01201 000000 02019000 01202 000000 02020000 01203 000000 02021000 01204 000000 02022000 01205 000000 02023000 01206 000000 02024000 01207 000000 02025000 01210 000000 02026000 01211 000000 02027000 01212 000000 02028000 01213 000000 02029000 01214 000000 02030000 01215 000000 02031000 01216 000000 02032000 01217 000000 02033000 01220 000000 02034000 01221 000000 02035000 01222 000000 02036000 01223 000000 02037000 01224 000000 02038000 01225 000000 02039000 01226 000000 02040000 01227 003020 02041000 01230 000000 02042000 01231 000000 02043000 01232 001465 02044000 01233 000400 02045000 01234 000000 02046000 01235 000400 02047000 01236 000400 02048000 01237 000400 02049000 01240 004002 02050000 01241 003407 02051000 01242 003006 02052000 01243 003003 02053000 01244 003014 02054000 01245 003012 02055000 01246 002462 02056000 01247 003013 TABLES

ORG 1170 B UNS ASS TABLE FOR COMPILER FT BYTE = CHARACTER CLASS FOR INPUTSCANNER 3 HT BYTE = TOKEN CLASS FOR PARSER NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP OCT NOP NOP OCT OCT NOP OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT 3020 1465 0400 0400 0400 0400 4002 3407 3006 3003 3014 3012 2462 3013 000 001 002 003 004 006 007 011 012 013 014 016 017 021 022 023 024 026 027 031 032 033 034 036 037 041 042 043 044 046 047 051 052 053 054 056 057 66 16 I 3 53 " $ 1 % 1 & 1 8 7 6 6 6 6 2 ( 7) 6 3 + 12, 11 / 77 Page 25 02057000 01250 002062 02058000 01251 002062 02059000 01252 002062 02060000 01253 002062 02061000 01254 002062 02062000 01255 002062 02063000 01256 002062 02064000 01257 002062 02065000 01260 002062 02066000 01261 002062 02067000 01262 003015 02068000 01263 003010 02069000 01264 000400 02070000 01265 000400 02071000 01266 000400 02072000 01267 000000 02073000 01270 000000 02074000 01271 001066 02075000 01272 001066 02076000 01273 001066 02077000 01274 001066 02078000 01275 001066 02079000 01276 001066 02080000 01277 001066 02081000 01300 001066 02082000 01301 001066 02083000 01302 001066 02084000 01303 001066 02085000 01304 001066 02086000 01305 001066 02087000 01306 001066 02088000 01307 001066 02089000 01310 001066 02090000 01311 001066 02091000 01312 001066 02092000 01313 001066 02093000 01314 001066 02094000 01315 001066 02095000 01316 001066 02096000 01317 001066 02097000 01320 001066 02098000 01321 001066 02099000 01322 001066 02100000 01323 003001 02101000 01324 004053 02102000 01325 003404 02103000 01326 000400 02104000 01327 000000 02105000 01330 000000 02106000 01331 000400 02107000 01332 000400 02108000 01333 000400 02109000 01334 000400 02110000 01335 000400 02111000 01336 000400 02112000 01337 000400 OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT NOP NOP OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT NOP NOP OCT OCT OCT OCT OCT OCT OCT 1,568,094 TABLES

2062 060 2062 061 2062 062 2062 063 2062 064 2062 065 2062 066 2062 067 2062 070 2062 071 3015 072 3010 073 0400 074 0400 075 0400 076 077 1066 101 1066 102 1066 103 1066 104 1066 105 1066 106 1066 107 1066 110 1066 111 1066 112 1066 113 1066 114 1066 115 1066 116 1066 117 1066 120 1066 121 1066 122 1066 123 1066 124 1066 125 1066 126 1066 127 1066 130 1066 131 1066 132 3001 133 4053 134 3404 135 0400 136 137 0400 141 0400 142 0400 143 0400 144 0400 145 0400 146 0400 147 4 50 0 4 50 1 4 50 2 4 50 3 4 50 4 4 50 5 4 50 6 4 50 7 4 50 8 4 50 9 6 13 6 8:

I < 1 > 2 54 A 2 54 B 2 54 C 2 54 D 2 54 E 2 54 F 2 54 G 2 54 H 2 54 I 2 54 J 2 54 K 2 54 L 2 54 M 2 54 N 2 54 O 2 54 P 2 54 Q 2 54 R 2 54 S 2 54 T 2 54 U 2 54 V 2 54 W 2 54 X 2 54 Y 2 54 Z 6 1 l 8 43 SQR 7 4 1 1 A 1 L C A 1 L C B 1 L C C I L C D I L C E I L C F I L C G 78 Page 26 02113000 01340 000400 02114000 01341 000400 02115000 01342 000400 02116000 01343 000400 02117000 01344 000400 02118000 01345 000400 02119000 01346 000400 02120000 01347 000400 02121000 01350 000400 02122000 01351 000400 02123000 01352 000400 02124000 01353 000400 02125000 01354 000400 02126000 01355 000400 02127000 01356 000400 02128000 01357 000400 02129000 01360 000400 02130000 01361 000400 02131000 01362 000400 02132000 01363 004422 02133000 01364 000000 02134000 01365 003016 02135000 01366 000400 02136000 01367 003031 OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT NOP OCT OCT OCT 1,568,094 TABLES

0400 0400 0400 0400 0400 0400 0400 0400 0400 0400 0400 0400 0400 0400 0400 0400 0400 0400 0400 4422 3016 0400 3031 151 152 153 154 156 157 161 162 163 164 166 167 171 172 173 174 176 177 1 L C H 1 L C I 1 L C J 1 L C K I L C L 1 L C M 1 L C N I L C O I L C P 1 L C Q I L C R I L C S 1 L C T 1 L C U I L C V 1 L C W I L C X 1 L C Y 1 L C Z 9 18 Pl 6 14 GAZINTA 1 SIGMA 6 25 EOL 79 Page 27 02138000 02139000 02140000 02141000 02142000 02143000 01370 004063 02144000 01371 003027 02145000 01372 003027 02146000 01373 004422 02147000 01374 003041 02148000 01375 004063 02149000 01376 003047 02150000 01377 003047 02151000 01400 003047 02152000 01401 003047 02153000 01402 003047 02154000 01403 003047 02155000 01404 003027 02156000 01405 003027 02157000 01406 003027 02158000 01407 003027 02159000 01410 003057 02160000 01411 003035 02161000 01412 003035 02162000 01413 003035 02163000 01414 003035 02164000 01415 003035 02165000 01416 003041 02166000 01417 003030 02167000 01420 003046 02168000 01421 003046 02169000 01422 003042 02170000 01423 003054 02171000 01424 003035 02172000 01425 003054 02173000 01426 003054 02174000 01427 003036 02175000 01430 003021 02176000 01431 003027 02177000 01432 003027 02178000 01433 003027 02179000 01434 003054 02180000 01435 003050 02181000 01436 003026 02182000 01437 003060 02183000 01440 003060 02184000 01441 003060 02185000 01442 003060 02186000 01443 003060 02187000 01444 003060 02188000 01445 003030 02189000 01446 004053 02190000 01447 003055 02191000 01450 003055 02192000 01451 003055 02193000 01452 004051 1,568,094 TABLES

MNEMONICTABLE

MNEMONIC TABLE L H =CLASS OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT R.H = TOKEN 4063 3027 3027 4422 3041 4063 3047 3047 3047 3047 3047 3047 3027 3027 3027 3027 3057 3035 3035 3035 3035 3035 3041 3030 3046 3046 3042 3054 3035 3054 3054 3036 3021 3027 3027 3027 3054 3050 3026 3060 3060 3060 3060 3060 3060 3030 4053 3055 3055 3055 4051 LC P ( 65) TLIST ( 64) LISTK ( 63) RES ( 62) LIST ( 61) L.C R ( 60) = ( 59) > ( 58) < ( 57) ≥ ( 56) ≤ ( 55) # ( 54) LKE ( 53) LKD ( 52) AVE ( 51) AVD ( 50) VFY ( 49) LDB ( 48) LDK ( 47) RCK ( 46) LDM ( 45) RCM ( 44) LDP ( 43) ENP ( 42) LDF ( 41) RCF ( 40) MRK ( 39) ERT ( 38) FDF ( 37) TRK ( 36) SSC ( 35) IDF ( 34) XOR ( 33) REW ( 32) END ( 31) BEEP ( 30) WAIT ( 29) RET ( 28) DIM ( 27) GSB ( 26) GTO ( 25) GSB+ ( 24) GSB ( 23) GTO+ ( 22) GTO ( 21) ENT ( 20) FLG ( 19) STP ( 18) NOR ( 17) TRC ( 16) DRND ( 15) 1,568,094 Page 28 02194000 01453 004051 02195000 01454 003052 02196000 01455 003052 02197000 01456 003052 02198000 01457 003040 02199000 01460 003035 02200000 01461 003035 02201000 01462 003035 02202000 01463 003043 02203000 01464 003024 02204000 01465 003021 02205000 01466 003045 02206000 01467 003045 02207000 01470 003054 02208000 001471 MNTBL 02209000 01471 064546 02210000 01472 020201 02211000 01473 070162 02212000 01474 072040 02213000 01475 101144 02214000 01476 071560 02215000 01477 020203 02216000 01500 020157 02217000 01501 071040 02218000 01502 102040 02219000 01503 060556 02220000 01504 062040 02221000 01505 102556 02222000 01506 067564 02223000 01507 020206 02224000 01510 020170 02225000 01511 067562 02226000 01512 020241 02227000 01513 063170 02228000 01514 062040 02229000 01515 103546 02230000 01516 066164 02231000 01517 020210 02232000 01520 071560 02233000 01521 061440 02234000 01522 104552 02235000 01523 066560 02236000 01524 020212 02237000 01525 071546 02238000 01526 063440 02239000 01527 105543 02240000 01530 063147 02241000 01531 020214 02242000 01532 061555 02243000 01533 063040 02244000 01534 106560 02245000 01535 071156 02246000 01536 062216 02247000 01537 062162 02248000 01540 067144 02249000 01541 107564 OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT EQU DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC OCT OCT OCT DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC TABLES

4051 PRND 3052 CMF 3052 CFG 3052 SFG 3040 JMP 3035 SPC 3035 FLT 3035 FXD 3043 NOT 3024 AND 3021 OR 3045 DSP 3045 PRT 3054 IF 26982 I 08321 28786 P 29728 T -32156 ( 02) 29552 S 08323 08303 29216 R -31712 ( 04) 24942 A 25632 D -31378 ( 05) 28532 O 08326 020170 067562 O 020241 26232 F 25632 D -30874 ( 07) 27764 L 08328 29552 S 25376 C -30358 ( 09) 28016 M 08330 29542 S 26400 G -29853 ( 11) 26215 F 08332 25453 C 26144 F -29328 ( 13) 29294 R 25742 D 25714 D 28260 N -28812 ( 15) ( 14) ( 13) ( 12) ( 11) ( 10) ( 09) ( 08) ( 07) ( 06) ( 05) ( 04) ( 03) ( 02) ( 01) F ( 01) R D P ( 03) N N T ( 06) X R ( 33) X F T ( 08) P J P ( 10) F C G ( 12) M P N ( 14) R D T 1,568,094 TABLES

01542 071143 01543 020220 01544 067157 01545 071040 01546 110563 01547 072160 01550 020222 01551 063154 01552 063623 01553 062556 01554 072040 01555 112147 01556 072157 01557 020055 01560 112547 01561 072157 01562 020053 01563 113147 01564 071542 01565 020055 01566 113547 01567 071542 01570 020053 01571 114147 01572 072157 01573 020231 01574 063563 01575 061040 01576 115144 01577 064555 01600 020233 01601 073541 01602 064564 01603 020235 01604 061145 01605 062560 01606 117145 01607 067144 01610 117562 01611 062567 01612 120151 01613 062146 01614 020242 01615 071563 01616 061440 01617 121564 01620 071153 01621 020244 01622 063144 01623 063040 01624 122545 01625 071164 01626 020246 01627 066562 01630 065440 01631 123562 DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC OCT DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC 29283 R 08336 28271 N 29216 R -28301 ( 17) 29808 T 08338 26220 F 26515 G 25966 E 29728 T -27545 ( 20) 29807 T 08237 -27289 ( 21) 29807 T 08235 -27033 ( 22) 29538 S 08237 -26777 ( 23) 29538 S 08235 -26521 ( 24) 29807 T 08345 26483 G 25120 B -26012 ( 26) 26989 I 08347 30561 W 26996 I 08349 25189 B 25968 E -24987 ( 30) 28260 N -24718 ( 31) 25975 E 120151 ( 32) 25702 D 08354 29555 S 25376 C -23692 ( 35) 29291 R 08356 26212 F 26144 F -23195 ( 37) 29300 R 08358 28018 M 27424 K -22670 ( 39) Page 29 02250000 02251000 02252000 02253000 02254000 02255000 02256000 02257000 02258000 02259000 02260000 02261000 02262000 02263000 02264000 02265000 02266000 02267000 02268000 02269000 02270000 02271000 02272000 02273000 02274000 02275000 02276000 02277000 02278000 02279000 02280000 02281000 02282000 02283000 02284000 02285000 02286000 02287000 02288000 0228900 02290000 02291000 02292000 02293000 02294000 02295000 02296000 02297000 02298000 02299000 02300000 02301000 02302000 02303000 02304000 02305000 C ( 16) S P ( 18) L ( 19) N G G 0 + G B G B + G 0 ( 25) S D M ( 27) A T ( 29) E P E D R W I F ( 34) S T K ( 36) D E T ( 38) R R 1,568,094 Page 30 02306000 01632 061546 02307000 01633 020250 02308000 01634 066144 02309000 01635 063040 02310000 01636 124562 02311000 01637 062564 02312000 01640 020234 02313000 01641 066144 02314000 01642 070040 02315000 01643 125562 02316000 01644 061555 02317000 01645 020254 02318000 01646 066144 02319000 01647 066440 02320000 01650 126562 02321000 01651 061553 02322000 01652 020256 02323000 01653 066144 02324000 01654 065440 02325000 01655 127554 02326000 01656 062142 02327000 01657 020260 02328000 01660 073146 02329000 01661 074440 02330000 01662 130541 02331000 01663 073144 02332000 01664 131141 02333000 01665 073145 02334000 01666 131554 02335000 01667 065544 02336000 01670 020264 02337000 01671 021666 02338000 01672 036076 02339000 01673 133076 02340000 01674 036266 02341000 01675 036075 02342000 01676 133475 02343000 01677 036267 02344000 01700 037075 02345000 01701 134075 02346000 01702 037270 02347000 01703 036271 02348000 01704 037272 02349000 01705 036673 02350000 01706 066153 02351000 01707 062440 02352000 01710 132562 02353000 01711 062563 02354000 01712 137162 02355000 01713 136154 02356000 01714 064563 02357000 01715 072040 02358000 01716 065677 02359000 01717 072154 02360000 01720 064563 02361000 01721 072300 DEC DEC DEC DEC DEC OCT OCT OCT OCT DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT TABLES

25446 C 08360 27748 L 26144 F -22158 ( 41) 062564 E 020234 066144 L 070040 P -21646 ( 43) 25453 C 08364 27748 L 27936 M -21134 ( 45) 25451 C 08366 27748 L 27424 K -20628 ( 47) 25698 D 08368 30310 V 31008 Y -20127 ( 49) 30308 V -19871 ( 50) 30309 V 131554 ( 51) 065544 K 020264 021666# 036076 < 133076 ( 54) 036266 < 036075 < 133475 ( 55) 036267 < 037075 > 134075 ( 56) 037270 > 036271 < 037272 > 036673 = 066153 L 062440 E 132562 ( 53) 062563 E 137162 ( 62) 136154 ( 60) 064563 I 072040 T 065677 K 072154 T 064563 I 072300 T F ( 40) D R T ( 28) D R M ( 44) D R K ( 46) D L B ( 48) F A D A E L D ( 52) ( 54) ( 54) ( 55) ( 56) ( 57) ( 58) ( 59) K R S R L S ( 63) L S ( 64) 83 Page 31 02362000 01722 02363000 01723 02364000 01724 02365000 01725 02366000 01726 02367000 01727 02368000 01730 02369000 01731 Page 32 02371000 02372000 02373000 02374000 02375000 02376000 02377000 1,568,094 TABLES

070301 066151 071564 020275 062556 070040 125200 000000 OCT OCT OCT OCT OCT OCT OCT NOP 070301 P 066151 L 0715645 020275 062556 E 070040 P 125200 ( 42) ( 65) I T ( 61) N TABLES FOR COMPILER PARSE TABLES EQUATES NEEDED BY PARSER EQUATES NEEDED BY PARSER 000210 000274 000302 MAXR MAXL MAXP EQU 136 EQU 188 EQU 194 SUP 02379000 01732 002010 READX 02380000 01742 031306 02381000 01752 042071 02382000 01762 053103 02383000 01772 063115 02384000 02002 012025 02385000 02012 061112 02386000 02022 006023 02387000 02032 056225 02388000 02042 003016 02389000 02052 056225 02390000 02062 022415 02391000 02072 066424 02392000 02102 056225 02393000 02112 004502 02394000 02122 063115 0239500002132 061112 02396000 02142 061112 02397000 02152 034064 02398000 02162 065436 02399000 02172 043072 02400000 02202 065436 02401000 02212 001004 02402000 02222 016047 02403000 02232 030061 02404000 02242 042071 02405000 02252 053103 02406000 02262 063115 02407000 02272 005020 02408000 02302 004447 02409000 02312 017052 02410000 02322 027321 02411000 02332 040067 02412000 02342 051101 02413000 02352 061112 02414000 02362 014037 02415000 02372 014034 02416000 02402 014034 02417000 02412 014033 DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC 1032,1550,5141,9485,10799,11312,11985,12337 12998,13362,13875,14388,14989,15502, 16439, 17039 17465,17978,18491,19088,19601,20626,21057,21651 22083,22596,23188,23701,24215,24649,25162,25868 26189,26776,27290,27924,28900,1032,1550,3090 5141,9485,13362,14388,17978,21057,22083,23701 25162,25868,26189,26776,27422,27924,1032,1550 3091,5141,9485,13362,14388,17978,21057,22083 23701,25162,25868,26189,26776,27422,27924,1032 1550,5141,9485,13362,14388,17978,21057,22083 23701,25162,25868,26189,26776,27422,27924,1032 9485,13362,21057,22083,23701,25162,25868,26189 27924,1032,1550,5141,9485,13362,21057,22083 23701,25162,25868,26189,27,924,14388,26776,27422 2370,2371,25162,26189,26776,27441,27924,25162 26189,26776,27924,26776,23702,25163,26703,27942 25162,26189,26776,27440,27924,1161,27982,1162 25162,26189,27924,1032,1550,5141,9485,13362 14388,21057,22083,23701,25162,25868,26189,26776 27422,27924,1032,1550,5141,9485,13362,14388 17978,21057,22083,23701,25164,25868,26189,26777 27422,27924,1035,1036,1037,25816,27351,514 516, 518, 515, 517, 519, 6853, 7206, 8748 7207,1032,1550,5141,9485,10799,11312,11985 12337,13362,13875,14388,14989,15502,16439,17039 17465,17978,18491,19088,19601,20626,21057,21651 22083,22596,23188,23701,24215,24649,25162,25868 26189, 26776, 27422, 27924, 28900, 2576, 7208, 20030 2576,20030,7209,1551,5142,20031,3089,5655 2343,6180,6283,6168,6169,6170,4301,12999 7722,9773,1032,1550,5141,9485,10799,11312 11985,12337,12998,13362,13875,14388,14989,15502 16439,17039,17465,17978,18491,19088, 19601, 20626 21057,21651,22083,22596,23188,23701,24215,26649 25162,25868,26189,26776,27422,27924,28900,6173 6175,13000,3854,6174,6177,6179,6693,3856 6172,3859,6172,2325,6172,2337,6172,3818 6172,2344,6172,3857,6284,3871,6284,8235 6171,10286,20301,4628 1,568,094 TABLES FOR COMPILER PARSE TABLES 02419000 02416 02420000 02426 02421000 02436 02422000 02446 02423000 02456 02424000 02466 02425000 02476 02426000 02506 02427000 02516 02428000 02526 02429000 02536 02430000 02546 02431000 02556 02432000 02566 02433000 02576 02434000 02606 02436000 02616 02437000 02626 02438000 02636 02439000 02646 02440000 02656 02441000 02666 02442000 02676 02443000 02706 02444000 02716 02445000 02726 02446000 02736 02447000 02746 02448000 02756 02449000 02766 02450000 02776 02451000 03006 02452000 03016 02453000 03026 02454000 03036 007275 LOOKX 031277 010341 010322 010302 031337 016123 016126 000427 000430 003141 000377 014150 014163 020200 024204 000000 APPLY 000311 075442 052512 042500 000236 000365 000250 000273 046361 037474 100240 040240 031463 044452 000257 000172 042476 073350 DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC 3773,6333,9,3774,6334,10,4287,6335 12991,32,3776,6336,34,4313,13017,53 4321,13025,54,13037,56,4317,13021,60 4306,13010,61,12993,64,4315,13019,66 4290,12994,69,1094,274,1095,233,4319 13023,72,590,288,592,288,6737,286 7251,8787,206,7252,8788,239,7253,207 7254,240,4325,13029,88,2650,7258,20058 279,2651,251,2652,253,7261,230,7262 280,1631,5215,20063,249,1632,5216,252 1633,5217,250,3170,5730,254,3171,5731 255,3172,5732,256,6246,211,6247,212 6248,213,7787,329,6254,308,6255,222 6259,327,6773,299,6263,238,6264,220 8320,260,8321,261,8322,262,6275,226 10372,243,10373,244,4743,263,4744,264 0,109,-9532,195,106,112,87,-20790 201,-20788,203,4209,27354,28395,29298,31035 31522,-32448,-30512,-30031,4928,5440 5748,2226 21834,23371,-23220,14648,15670,16187,16704,17224 17728,18038,18610,19244,311,669,-9571,-20835 158,667,-9573,-20837,156,22714,185,23798 245,29944,247,31910,32423,165,7849,11434 168,8962,12035,257,7350,10935,181,22204 187,-30961,-25834,10506,265,25394,27972,-28448 19697,20210,13106,13618,14149,15157,267,31036 16188,321,675,-9565,-20829,164,671,30880 -32608,-9569,4768,5280,31905,32418,-20833,16032 16544,17568,89,8476,283,25395,20761,21274 13107,13619,285,171,172,12581,292,101 18730,297,173,105,13102,13615,301,214 175,28851,-31564,6265,1659,6780,2685,3707 122,176,16186,313,5247,126,-32532,16675 17726,317,184,227,231,174,108,82 30440,134 Page 33 1,568,094 TABLES FOR COMPILER PARSE TABLES 02456000 03040 000245 INDEX 02457000 03050 046620 02458000 03060 030414 02459000 03070 034605 02460000 03100 022020 02461000 03110 037001 02462000 03120 040205 02463000 03130 022020 02464000 03140 052601 02465000 03150 053402 02466000 03160 055401 02467000 03170 070202 02468000 03200 071002 02469000 03210 073401 0247000 03220 106601 02471000 03230 110402 02472000 03240 114001 DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC 02473000 03250 000203 02474000 03260 006203 02475000 03270 013202 02476000 03300 020402 02477000 03310 025603 02478000 03320 032202 02479000 03330 036202 DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC 02480000 03340 117700 02481000 03350 001200 02482000 03360 002000 02483000 03370 002000 02484000 03400 002000 02485000 03410 002001 02486000 03420 011402 02487000 03430 014400 02488000 03440 015600 02489000 03450 020000 02490000 03460 020403 02491000 03470 024602 02492000 03500 031403 02493000 03510 034000 02494000 03520 035002 02495000 03530 040400 02496000 03540 041600 02497000 03550 043200 02499000 03556 165,9232,9232,9232,9232,4881,7057,9232 19856,19856,9232,9232,9232,11274,12556,14083 12556,14465,14593,11274,11274,12556,12556,16131 14725,15364,17539,9232,17539,9232,9232,19856 9232,19856,9232,9232,9232,17539,17539,15873 15873,9232,11274,9232,9232,9232,16001 16131 16517,17153,17281,17409,9232,17539,9232,9232 9232,17935,17281,9232,9232,17935,17935,19856 21889,9232,11274,9232,9232,22017,22145,17539 22274,22529,22657,22785,11274,22913,23041,23169 23297,9232,23426,23426,23681,23681,23844,28419 28802,28419,28417,28417,29057,29057,29187,29186 29186,29570,29570,29570,29826,30081,30209,30337 30465,30594,30849,30977,31141,-29695,-29567,-29439 -29311,-29183,-29055,-28927,-28799,-28671, -28543,-28543 -28414,-28158,-27902,-27646,-27390,-27134, -26878,-26623 -26623,-26623,-26495,-26367,-26367,-26239, -26111,-26111 131,515,900,1411,1795,2179,2562,2819 3203,3586,3843,4227,4610,4866,5123,5506 5762,6018,6275,6659 7042,7298,7555,7940 8450,8706,8962,9218,9476,9987,10371,10755 11139,11523,11906,12162,12418,12674,12930,13186 13442,13698,13954,14210,14466,14722,14978,15234 15490,15746,16002,16258,-24695,-24694,-24672, -24670 -24640,-23739,128,129,257,384,385,385 640,642,768,770,896,1024,1024,1025 1024,1024,1025,1025,1025,1025,1025,1025 1024,1025,1024,1025,1024,1025,1024,1025 1024,1025,1025,1024,1024,1024,1025,1025 1025,1028,1281,1281,1280,1281,1536,1536 4866,4866,5376,5378,5888,5890 6144,6145 6400,6402,6402,6402,6402,6656,6658,6658 7040,7042,7042,7424,7425,7425,7808,7810 8192,8194,8448,8448,8448,8450,8449,8453 8451,8448,8451,8960,8963,8961,10240,10240 10626,10626,11136,11138,12800,12800,12803,13056 13059,13824,13826,13952,13954,14080,14083,14083 14336,14338,14464,14466,14720,14722,14722,14848 14850,14976,14976,15360,15362,15490,15616,15618 16640,16642,16768,16768,17024,17026,17280,17280 17280,17283,17283,17792,17794,17920,17920,17922 18048,18050,18178, 18306,18432,18560 BSS I RESERVED FOR 2 K-PAGE CHECKSUM BSS 5 RESERVED FOR TABLE EXPANSION Page 34 02501000 03557 1,568,094 SYNTHESIZE JUMP TABLE 02503000 02504000 02505000 02506000 03564 004543 02507000 03565 004543 02508000 03566 004740 02509000 03567 004631 02510000 03570 004631 02511000 03571 004631 02512000 03572 004543 02513000 03573 004543 02514000 03574 004543 02515000 03575 004543 02516000 03576 004631 02517000 03577 004644 02518000 03600 004543 02519000 03601 004627 02520000 03602 004631 02521000 03603 994672 02522000 03604 004627 02523000 03605 004627 02524000 03606 004627 02525000 03607 004627 02526000 03610 005012 02527000 03611 005021 02528000 03612 004672 02529000 03613 004627 02530000 03614 004672 02531000 03615 004627 02532000 03616 004672 02533000 03617 004627 02534000 03620 004672 02535000 03621 004627 02536000 03622 004672 02537000 03623 004627 02438000 03624 004627 02539000 03625 005041 02540000 03626 004663 02541000 03627 004543 02542000 03630 004627 02543000 03631 004627 02544000 03632 177521 02545000 03633 177522 02546000 03634 004627 02547000 03635 004627 02548000 03636 004672 02549000 03637 004627 02550000 03640 004543 02551000 03641 004543 02552000 03642 004627 02553000 03643 004627 02554000 03644 004543 02555000 03645 004627 02556000 03646 004543 02557000 03647 004627 02558000 03650 004543 SYNTHESIZE JUMP TABLE SYNJP DEF APLI 1 DEF APLI 2 DEF OLABL 3 DEF OUTI 4 DEF OUTI 5 DEF OUTI 6 DEF APLI 7 DEF APLI 8 DEF APLI 9 DEF APLI 10 DEF OUTI 11 DEF IMSTZ 12 DEF APLI 13 DEF OUT 2 14 DEF OUTI 15 DEF OEMTY 16 DEF OUT 2 17 DEF OUT 2 18 DEF OUT 2 19 DEF OUT 2 20 DEF BRSTR 21 DEF BRNUM 22 DEF OEMTY 23 DEF OUT 2 24 DEF OEMTY 25 DEF OUT 2 26 DEF OEMTY 27 DEF OUT 2 28 DEF OEMTY 29 DEF OUT 2 30 DEF OEMTY 31 DEF OUT 2 32 DEF OUT 2 33 DEF LITRL 34 DEF IMDSP 35 DEF APLI 36 DEF OUT 2 37 DEF OUT 2 38 DEF AP 36,I 39 DEF AP 37,I 40 DEF OUT 2 41 DEF OUT 2 42 DEF OEMTY 43 DEF OUT 2 44 DEF APLI 45 DEF APLI 46 DEF OUT 2 47 DEF OUT 2 48 DEF APLI 49 DEF OUT 2 50 DEF APLI 51 DEF OUT 2 52 DEF APLI 53 Page 35 UDF CALL UDF CALL Page 36 SYNTHESIZE JUMP TABLE 02559000 03651 004627 DEF OUT 2 54 02560000 03652 004543 DEF APLI 55 02561000 03653 004627 DEF OUT 2 56 02562000 03654 004627 DEF OUT 2 57 02563000 03655 004627 DEF OUT 2 58 02564000 03656 004627 DEF OUT 2 59 02565000 03657 004543 DEF APLI 60 02566000 03660 004627 DEF OUT 2 61 02567000 03661 004627 DEF OUT 2 62 02568000 03662 004543 DEF APLI 63 02569000 03663 004627 DEF OUT 2 64 02570000 03664 004627 DEF OUT 2 65 02571000 03665 004543 DEF APLI 66 02572000 03666 004543 DEF APLI 67 02573000 03667 004670 DEF UNARY 68 02574000 03670 004543 DEF APLI 69 02575000 03671 004627 DEF OUT 2 70 02576000 03672 004543 DEF APLI 71 02577000 03673 004627 DEF OUT 2 72 02578000 03674 004543 DEF APLI 73 02579000 03675 004703 DEF ONUMB 74 02580000 03676 004631 DEF OUTI 75 02581000 03677 004543 DEF APLI 76 02582000 03700 004627 DEF OUT 2 77 02583000 03701 004675 DEF OROUN 78 02584000 03702 004623 DEF OUT 4 79 02585000 03703 177523 DEF AP 77,I 80 UDF FCN 02586000 03704 177524 DEF AP 78,I 81 UDF FCN 02587000 03705 004631 DEF OU Ti 82 02588000 03706 004623 DEF OUT 4 83 02589000 03707 004627 DEF OUT 2 84 02590000 03710 004543 DEF APLI 85 02591000 03711 004543 DEF APLI 86 02592000 03712 005037 DEF STRAS 87 02593000 03713 005037 DEF STRAS 88 02594000 03714 004543 DEF APLI 89 02595000 03715 004627 DEF OUT 2 90 02596000 03716 004543 DEF APLI 91 02597000 03717 004744 DEF OSTRG 92 02598000 03720 004623 DEF OUT 4 93 02599000 03721 004631 DEF OUTI 94 02600000 03722 004623 DEF OUT 4 95 02601000 03723 004543 DEF APLI 96 02602000 03724 004627 DEF OUT 2 97 02603000 03725 004543 DEF APLI 98 02604000 03726 004627 DEF OUT 2 99 02605000 03727 004774 DEF ODIME 100 02606000 03730 004777 DEF ODIML 101 02607000 03731 004777 DEF ODIML 102 02608000 03732 004543 DEF APLI 103 02609000 03733 005077 DEF OSCOM 104 02610000 03734 004543 DEF APLI 105 02611000 03735 004627 DEF OUT 2 106 02612000 03736 004543 DEF APLI 107 02613000 03737 004627 DEF OUT 2 108 02614000 03740 004627 DEF OUT 2 109 1,568,094 1,568,094 Page 37 SYNTHESIZE JUMP TABLE 02615000 03741 004744 DEF OSTRG 110 02616000 03742 004747 DEF ESTRG 111 02617000 03743 004543 DEF APLI 112 02618000 03744 004543 DEF APLI 113 02619000 03745 004543 DEF APLI 114 02620000 03746 004627 DEF OUT 2 115 02621000 03747 004627 DEF OUT 2 116 02622000 03750 004543 DEF APLI 117 02623000 03751 004627 DEF OUT 2 118 02624000 03752 004543 DEF APLI 119 02625000 03753 004627 DEF OUT 2 120 02626000 03754 004543 DEF APLI 121 02627000 03755 004543 DEF APLI 122 02628000 03756 004543 DEF APLI 123 02629000 03757 004627 DEF OUT 2 124 02630000 03760 004631 DEF OUTI 125 02631000 03761 004543 DEF APLI 126 02632000 03762 004543 DEF APLI 127 02633000 03763 004700 DEF ARREF 128 02634000 03764 004700 DEF ARREF 129 02635000 03765 004543 DEF APLI 13002636000 03766 004627 DEF OUT 2 131 02637000 03767 004631 DEF OUTI 132 02638000 03770 004543 DEF APLI 133 02639000 03771 004627 DEF OUT 2 134 02640000 03772 004543 DEF APLI 135 02641000 03773 004627 DEF OUT 2 136 02642000 03774 004627 DEF OUT 2 137 02643000 03775 004627 DEF OUT 2 138 02644000 03776 177525 DEF AP 136,I 139 FOR= 02645000 03777 004631 DEF OUTI 140 89 Page 38 02647000 02648000 02649000 02650000 02651000 02652000 02653000 02654000 02655000 02656000 02657000 02659000 02660000 02661000 02662000 02663000 02664000 02665000 02666000 02667000 02668000 02669000 02670000 0267100002672000 02673000 02674000 02675000 04000 074560 02676000 04001 050053 02677000 04002 010117 02678000 04003 067000 02679000 02680000 04004 007012 02681000 04005 024000 02682000 04006 104001 02683000 04007 035244 02684000 04010 174507 02685000 04011 170201 1,568,094 COMPILER COMPILER W F C.

ON ENTRY:

KEYBOARD BUFFER CONTAINS SOURCE LINE ON EXIT:

COMPILE BUFFER CONTAINS COMPILED LINE READER FOR SCANNER ON ENTRY:

C-REGISTRATION POINTS TO INPUT AREA ON EXIT:

A-REGISTER=CHARACTER B-REGISTER=CLASS FROM CTBL CTBL WORD SAVED IN CT 2 BLANKS ARE IGNORED READ 2 WBC AI GET NEXT CHARACTER AND B 177 CPA B 40 JMP -3 JUMP IF TO BE SKIPPED LDB ACTBL GET CTBL ORIGIN ADB A LDB B,I GET CTBL WORD STB CT 2 SBR 8 GET LEFT BYTE=CLASS RET 1 1,568,094 COMPILER POINTERS AND EQUATES as DEF DEF DEF DEF DEF DEF EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU CTBL INDEX-I READX-1 LOOKX-1 APPLY-I 1 SYNJP,I CMTMP+ 4 CMTMP+ 5 CMTMP+ 6 CMTMP+ 7 CMTMP+ 8 CMTMP+ 9 CMTMP+ 10 CMTMP+ 11 CMTMP+ 12 77772 B EX+I ES+ 2 EX+ 3 EX+ 4 ES+ 5 ADDRESS OF CLASS TABLE ADDRESS OF INDEX TABLE ADDRESS OF READ TABLE ADDRESS OF LOOK TABLE ADDRESS OF APPLY TABLE ADDRESS OF SYNTHESIZE JUMP TABLE TEMPORARY TEMPORARY TEMPORARY TEMPORARY TEMPORARY NO-LOOK-AHEAD-DONE PARSER-STATE INDEX 1 INDEX 2 EXPONENT SIGN DIGIT COUNTER SIGNIFICANT-DIGITS FLAG PART OF EXPONENT PART OF EXPONENT DECIMAL-POINT FLAG 02714000 02715000 SE 02716000 02717000 04020 005241 SET 02718000 04021 034016 02719000 02720000 04022 004016 SEI 02721000 04023 035316 02722000 04024 074560 02723000 04025 050053 02724000 04026 010117 02725000 04027 067022 02726000 04030 010053 02727000 04031 067033 02728000 04032 164404 02729000 02730000 04033 054016 SE 2 02731000 04034 035316 SE 3 02732000 04035 004016 02733000 04036 074760 02734000 04037 050053 02735000 04040 010117 02736000 04041 067034 02737000 04042 164404 ET C-REGISTER FOR COMPILATION ERROR CE LDB OLDC STB C LDB STB WBC AND CPA JMP CPA JMP JMP DSZ STB LDB WBC AND CPA JMP JMP C CERR A,I B 177 B 40 SEI B 177 SE 2 AERRI,I C CERR C A,D B 177 B 40 SE 3 AERRI,I RESTORE ANCIENT C TENTATIVE CURSOR POSITION TEST FOR BLANK OR EOL BLANK, KEEP LOOKING EOL, GO THE OTHER WAY BLANK, KEEP LOOKING 04012 04013 04014 04015 04016 04017 001170 003037 001731 002415 002615 103564 Page 39 02687000 02688000 02689000 02690000 02691000 02692000 02693000 02694000 02695000 02696000 02697000 02698000 02699000 02700000 02701000 02702000 02703000 02704000 02705000 02706000 02707000 02708000 02709000 02710000 02711000 02712000 ACTBL AINDX AREED ALOOK AAPLY ASYJP CTI CT 2 CT 3 CT 4 CT 5 NLOOK STATE IXI IX 2 ES DC SD M EX DP 077243 077244 077245 077246 077247 077250 077251 077252 077253 077772 077773 077774 077775 077776 077777 1,568,094 COMPILER SCANNER )2739000 )2740000 SCA 32741000 12742000 ON I 32743000 D 2744000 TKN )2745000 BCE 2746 Q 00 D 2747000 04043 004016 SCAN 02748000 04044 035241 02749000 04045 043000 D 2750000 04046 031240 D 2751000 04047 000016 D 2752000 04050 031243 02753000 02754000 04051 001244 SCI 02755000 04052 050045 02756000 04053 031237 02757000 02758000 04054 027056 02759000 04055 164001 02760000 02761000 04056 104057 AJI 02762000 02763000 04057 004522 02764000 04060 004125 0276000 04061 004100 02766000 04062 004251 02767000 04063 004071 02768000 04064 004071 02769000 04065 004122 02770000 04066 004110 02771000 04067 004112 02772000 04070 004106 NNER EXIT:

1 = TOKEN (FROM CTBL) ) = CHARACTER LDH STB JSM STA LDA STA LDA AND STA C OLDC READ 2 BCD C CTI 1 CT 2 B 377 TKN ADB AJ 1 JMP B,I DEF + 1,I DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF E 7 SL 2 TYPEL SQ 1 TYPEN TYPEN TYPEA TYPEB TYPEC TYPED READ FROM INPUT SAVE C+ 1 RECALL CTBL INFORMATION SAVE TOKEN BRANCH VIA JMP TABLE JMPTABLE#1

0 UNDEFINED CODE 1 SPECIAL MNEMONIC 2 LETTER 3 QUOTE 4 DIGIT DECIMAL POINT 6 SPECIAL CHARACTER 7 SPECIAL CHARACTER 8 SPECIAL CHARACTER 9 SPECIAL CHARACTER 91 Page 40 Page 41 02774000 02775000 02776000 02777000 04071 02778000 04072 02779000 04073 02780000 04074 02781000 04075 02782000 04076 02783000 04077 1,568,094 COMPILER SCANNER NUMERIC 001242 TYPEN 072022 045242 043274 043020 E 6 030066 170201 LDA RZA ISZ JSM JSM ASC RET ISTAR TY 1 ISTAR SNI SETCE 1,06 TEST I FLAG SET IT CALL NUMBER BUILDER ERROR, SYNTAX ERROR IN NUMBER 02785000 02786000 02787000 02788000 04100 02789000 04101 02790000 04102 02791000 04103 02792000 04104 02793000 04105 02794000 02795000 02796000 02797000 02798000 02799000 04106 02800000 04107 02801000 04110 02802000 04111 02803000 02804000 04112 02805000 04113 02806000 04114 02807000 04115 02808000 04116 02809000 04117 02810000 04120 02811000 04121 02812000 02813000 04122 02814000 04123 02815000 04124 LETTER 043000 TYPEL 010114 067225 074761 010070 067240 001242 072005 045242 170201 001242 072411 001241 030016 000127 031237 031240 JSM CPA JMP WBC CPA JMP READ 2 844 STL B,D B 133 SSL SPECIAL CHARACTER TYPED TYPEB TYPEC TY 1 000177 TYPEA 031242 170201 TY 2 LDA HZA ISZ RET LDA SZA LDA STA LDA STA LDA STA LDA STA RET ISTAR TYI ISTAR ISTAR TY 2 OLDC C P 16 TKN P 31 BCD PO ISTAR I LOOK AHEAD JUMP IF FOLLOWED BY $ JUMP IF FOLLOWED BY l FALL THRU (EITHER SIDE OF I) (LEFT SIDE OF I) (RIGHT SIDE OF I) RESTORE C TKN FOR I BCD FOR I (NEITHER SIDE OF I) 1,568,094 COMPILER SCANNER 04125 004017 04126 035244 04127 004327 04130 035245 04131 105245 04132 045245 04133 076476 04134 014257 04135 067223 04136 024254 04137 104001 04140 014257 04141 067131 04142 176202 04143 140001 04144 035712 04145 034017 04146 073770 04147 005243 04150 034016 04151 074761 04152 074570 04153 010117 04154 067152 04155 031711 04156 170607 04157 172612 04160 074561 04161 014117 04162 067160 04163 015711 04164 067152 04165 074570 04166 170607 04167 172076 04170 067147 04171 170507 04172 072002 04173 067131 TABLE SEARCH

SL 2 LDB D STB CT 2 LDB AROMS STB CT 3 TSI LDB CT 3,I ISZ CT 3 SZB TSI CPB Ml JMP E 3 ADB Pl LDB B,I CPB MI JMP TSI SBP + 2,C JSM B,I SIB T 2 STB D WAD A,D T 52 LDB CTI STB C WBC B,D T 53 WBD A,I CPA B 40 JMP -2 STA TI SAL 8 SAM T 54,C WBC B,I CPB B 40 JMP -2 CPB Tl JMP T 53 WRD A,I SAL 8 SAP -2 JMP T 52 T 54 SAR 8 RZA -2 JMP TSI SAVE D INITIALIZE'TABLES' POINTER GET ADDRESS OF NEXT ROM JUMP IF ROM NOT PRESENT JUMP IF END OF ALL TABLES PICK UP ROM TABLE ORIGIN ADDRESS OPTIONAL CALL ON ROM SET D = ROM TABLE ADDRESS SET C = START OF MNEMONIC IGNORE BLANKS IN MNEMONIC TABLE

SKIP IF ENTRY CODE OR END-OFTABLE

IGNORE BLANKS IN INPUT LINE JUMP IF CHARACTER MIATCH FIND END OF TABLE ENTRY JUMP IF END OF TABLE Page 42 02817000 02818000 02819000 02820000 02821000 02822000 02823000 02824000 02825000 02826000 02827000 02828000 02829000 02830000 02831000 02832000 02833000 02834000 02835000 02836000 02837000 02838000 02839000 02840000 02841000 02842000 02843000 02844000 02845000 02846000 02847000 02848000 02849000 02850000 02851000 02852000 02853000 02854000 02855000 02856000 02857000 02858000 02859000 02860000 02861000 02862000 02863000 94 Page 43 02865000 04174 004000 02866000 04175 174040 02867000 04176 025712 02868000 04177 104001 02869000 04200 035237 02870000 02871000 04201 004327 02872000 04202 174040 02873000 04203 025245 02874000 04204 014125 02875000 04205 067211 02876000 02877000 04206 170607 02878000 04207 060001 0287900 ( 004210 067212 02880000 02881000 04211 020053 SI 02882000 04212 031240 02883000 02884000 04213 005244 02885000 04214 034017 02886000 02887000 04215 005237 02888000 04216 176202 02889000 04217 140001 02890000 02891000 04220 035244 02892000 04221 174507 02893000 04222 067051 02894000 1,568,094 COMPILER SCANNER LDB A TCB ADB T 2 LDB B,I STB TKN L 5 02895000 04223 043020 E 3 02896000 04224 030063 LDB TCB ADB CPB JMP SAL IOR JMP ADA STA LDB STB LDB SBP JSM STB SBR JMP AROMS CT 3 P 18 SL 5 8 B + 2 B 177 BCD CT 2 D TKN + 2,C B,I CT 2 8 SCI JSM SETCE ASC 1,03 SUBTRACT OPCODE FROM TABLE ADDRESS TEMPORARILY SAVE CLASS/TOKEN VALUE CALCULATE ROM ID JMP IF MAINFRAME CORRECT BCD FOR OPTIONAL ROMS CORRECT MAINFRAME BCD RESTORE D RECALL CLASS/TOKEN INFO OPTIONAL CALL ON ROM ERROR, MYSTERIOUS MNEMONIC Page 44 02898000 02899000 ST 02900000 02901000 04225 000100 STL 02902000 04226 031237 02903000 02904000 04227 043000 02905000 04230 074761 02906000 04231 005240 02907000 04232 010070 02908000 04233 024117 02909000 04234 174607 02910000 04235 024141 02911000 04236 035240 02912000 02913000 04237 067122 1,568,094 COMPILER-SCANNER RING LETTER LDA P 52 STA TKN TKN FOR STRING JSM WBC LDB CPA ADB SBL ADB STB READ 2 LOOK AHEAD B,D BCD B 133 l? B 40 YES, OFFSET BCD 8 STRID ID OF STRING ROM BCD JMP TYPEA 02915000 02916000 02917000 02918000 04240 001242 02919000 04241 072402 02920000 04242 067114 02921000 02922000 04243 000102 02923000 04244 031237 02924000 02925000 04245 005240 02926000 04246 024117 02927000 04247 035240 02928000 02929000 04250 170201 SUBSCRIPTED LETTER SSL LDA SZA JMP ISTAR + 2 TYI LDA P 49 STA TKN LDB BCD ADB B 40 STB BCD RET I TKN FOR SUBSCRIPTED OFFSET BCD 1,568,094 COMPILER-SCANNER 02931000 02932000 PR 02933000 02934000 O 02935000 02936000 02937000 02938000 02939000 04251 000177 SQI 02940000 04252 031242 02941000 04253 031246 02942000 04254 004016 02943000 04255 035247 02944000 02945000 04256 074561 SQ 2 02946000 04257 014116 02947000 04260 067267 02948000 04261 014053 02949000 04262 067265 02950000 04263 045246 SQ 3 02951000 04264 67256 02952000 02953000 04265 043020 E 2 02954000 04266 030062 02955000 02956000 04267 074561 SQ 4 02957000 04270 014116 02958000 04271 067263 02959000 02960000 04272 074760 02961000 04273 170201 OCESS QUOTE FIELD

*J EXIT:

CT 4 =BYTE COUNT CT 5 =START OF STRING LDA PO STA ISTAR STA CT 4 LDB C STB CT 5 WBC B,I CPB B 42 JMP SQ 4 CPB B 177 JMP E 2 ISZ CT 4 JMP SQ 2 JSM SETCE ASC 1,02 WBC B,I CPB B 42 JMP SQ 3 INITIALIZE BYTE COUNT SAVE START OF STRING READ NEXT CHARACTER " 9 YES EOL? YES INCREMENT BYTE COUNT ERROR, UNTERMINATED STRING READ NEXT CHARACTER " 9 YES, CONTINUE MBC A,D BACK UP INPUT POINTER RET 1 96 Page 45 97 Page 46 02963000 02964000 02965000 02966000 04274 02967000 04275 02968000 04276 02969000 04277 02970000 04300 02971000 02972000 04301 02973000 04302 02974000 04303 02975000 02976000 04304 02977000 04305 0297800004306 0297900004307 02980000 04310 02981000 04311 02982000 02983000 04312 02984000 04313 02985000 04314 02986000 04315 02987000 04316 02988000 04317 029 $ 9000 04320 02990000 04321 02991000 04322 02992000 04323 02993000 04324 0299400 o 02995000 04325 02996000 04326 02997000 04327 02998000 04330 02999000 04331 03000000 04332 03001000 04333 03002000 04334 03003000 04335 03004000 04336 0305000 04337 03006000 04340 03007000 04341 03008000 04342 03009000 04343 03010000 04344 03011000 04345 03012000 04346 03013000 04347 03014000 04350 0301500 04351 03016000 04352 1,568,094 COMPILER-SCANNER NUMBER BUILDER NUMBER BUILDER 000252 004253 071405 000127 071603 SNI 001240 004103 035240 010105 067353 010103 SN 2 067312 004254 035774 005777 025774 025775 035775 005774 076406 005773 076504 035773 050130 075541 043000 SN 3 014143 067306 010105 067360 010063 067365 001776 SNW 055772 170040 021775 071500 072310 004000 176002 174040 024206 176016 170605 030020 074761 170203 LDA LDB XFR LDA CLR LDA LDB STB CPA JMP CPA JMP LDB STB LDB ADB ADB STB LDB SZB LDB STB STB AND MLY N Bl NB 2 6 ADR 2 INITIALIZE CLEAR AR 2 BCD B 60 BCD B 56 SN 4 B 60 + 3 Pl SD DP SD M M SD SN 3 DC SN 3 DC B 17 JSM RE Al CPB P 4 JMP SN 2 CPA B 56 JMP SN 5 CPA B 145 JMP SN 7 LDA EX DSZ ES TCA ADAM NRM SDS + 8 LDBA SBP + 2 TCB ADB M 100 SBP E 6 A SAL 6 STA AR 2 WBC B,D RET 3 9 YES 0 ? YES NO, SET SD UPDATE EXPONENT SKIP IF NO SIGNIFICANT DIGITS YET SKIP IF 12 SIGNIFICANT DIGITS NOW MERGE IN NEW DIGIT READ NEXT CHARACTER DIGIT? YES 9 ?.

YES EEX? YES WRAP IT UP FINAL EXPONENT SKIP IF FLOATING ZERO OVERFLOW TEST BACK UP C NORMAL RETURN )2 1,568,094 COMPILER-SCANNER 03018000 04353 03019000 04354 03020000 04355 03021000 04356 03022000 04357 03023000 03024000 04360 03025000 04361 03026000 04362 03027000 04363 03028000 03029000 04364 03030000 03031000 04365 03032000 04366 03033000 04367 03034000 04370 03035000 04371 03036000 04372 03037000 04373 03038000 04374 03039000 04375 03040000 04376 03041000 04377 03042000 04400 03043000 03044000 04401 03045000 04402 03046000 04403 03047000 04404 03048000 04405 03049000 04406 03050000 04407 03051000 04410 03052000 04411 03053000 04412 03054000 04413 03055000 04414 03056000 04415 03057000 04416 03058000 04417 03059000 04420 03060000 03061000 04421 03062000 04422 03063000 04423 03064000 04424 03065000 04425 03066000 04426 055777 SN 4 043000 014143 067306 067364 001777 072076 055777 067325 SN 5 170201 E 6 A 004016 SN 7 035711 043000 010106 067421 010110 067423 014143 067401 005711 034016 067334 045240 031711 001776 004135 075617 020163 021711 031776 020170 172052 043000 014143 067402 010105 067364 067334 SN 9 000257 SNM 031772 043000 SN 6 014143 067401 067364 DSZ JSM CPB JMP JMP LDA RZA DSZ JMP RET LDB STB JSM CPA JMP CPA JMP CPB JMP LDB STB JMP ISZ STA LDA LDB MPY ADA ADA STA ADA SAP JSM CPB JMP CPA JMP JMP LDA STA JSM CPB JMP JMP DP SET DP FOR LEADING READ 2 READ NEXT CHARACTER P 4 DIGIT? SN 2 YES E 6 A ERROR, ILLEGAL DECIMAL POINT DP -2 DP SN 3 SET DP ERROR RETURN C Tl SAVE C IN CASE OF MNEMONIC WITH E READ 2 READ NEXT CHARACTER B 55 -? SNM YES B 53 +? SN 6 YES P 4 DIGIT? SN 9 YES Tl NO C FALSE ALARM, RESTORE C SNW F 1 1 F BCD EX SET E-FORMAT SAVE ASCII DIGIT EX M 48 TI EX SAVE UPDATED EXPONEN M 256 OVERFLOW TEST E 6 A READ 2 READ NEXT CHARACTER P 4 DIGIT? SN 9 + 1 YES B 56 ? E 6 A YES, ERROR SNW M 1 EXPONENT DETECTED ES READ 2 READ NEXT CHARACTER P 4 DIGIT? SN 9 YES E 6 A NO T SPEC Page 47 99 Page 48 03068000 04427 177567 03069000 04430 177706 03070000 04431 000006 1,568,094 COMPILER-MAIN SECTION TCONI TCON 2 TCON 3 ABS -MAXR-1 ABS MAXR-MAXP ABS MAXP-MAXL 03072000 03073000 STAC 03074000 03075000 04432 005254 CPSTK 03076000 04433 014326 03077000 04434 067440 03078000 03079000 04435 045254 03080000 04436 131254 03081000 04437 170201 03082000 03083000 04440 043020 E 8 03084000 04441 030070 KER LDB CPB JMP ISZ STA RET STAKP ASLMT E 8 STAKP STAKP,I JSM SETCE ASC 1,08 ERROR, OVERFLOW 03086000 03087000 INITI 03088000 03089000 04442 000257 CPLR 03090000 04443 031610 03091000 04444 001532 03092000 04445 072402 03093000 04446 141532 03094000 04447 140453 03095000 03096000 04450 004307 03097000 04451 034016 03098000 04452 004304 03099000 04453 034017 03100000 04454 000177 03101000 04455 031242 03102000 04456 031316 03103000 04457 000254 03104000 04460 031251 03105000 04461 000305 03106000 04462 031254 03107000 03108000 04463 000257 LOOPI 1 03109000 04464 031250 03110000 04465 001251 03111000 04466 023013 LOOP 2 03112000 04467 100000 03113000 04470 004000 03114000 04471 174506 03115000 04472 035252 03116000 04473 050053 03117000 04474 031253 ALIZATION LDA M 1 STA KBFMT LDA SZA JSM JSM LDB STB LDB STB LDA STA STA LDA STA LDA STA LDA STA LDA ADA LDA LDB SBR STB AND STA REFOR + 2 REFOR,I ACLCM,I AKB FX C ACBUF D PO ISTAR CERR Pl STATE ASTAK STAKP Ml NLOOK STATE AINDX A,I A 7 IXI B 177 IX 2 INDICATE COMPILE BUFFER IS OVERWRIT, CLEAR COMPILE BUFFER POINT C TO KEYBOARD BUFFER POINT D TO COMPILE BUFFER ORIGIN IMPLIED MULTIPLY FLAG COMPILE ERROR FLAG PARSER START STATE STACK POINTER SET NO-LOOK-AHEAD-DONE TRUE INDEX TABLE ORIGIN INDEX WORD B=INDEX I lSTATEl A=INDEX 2 lSTATEl Page 49 03119000 04475 001251 03120000 04476 023427 03121000 04477 172033 03122000 03123000 03124000 03125000 04500 001251 03126000 04501 043432 03127000 03128000 04502 03129000 04503 03130000 04504 03131000 03132000 04505 03133000 04506 03134000 04507 03135000 04510 03136000 04511 03137000 04512 03138000 03139000 04513 03140000 04514 03141000 04515 03142000 04516 03143000 04517 03144000 04520 03145000 04521 03146000 03147000 04522 03148000 04523 03149000 03150000 04524 03151000 04525 03152000 04526 03153000 03154000 04527 03155000 04530 03156000 04531 045250 067505 043043 005252 027014 001253 020001 020257 031243 100001 REA 2 170510 011237 067524 015243 067522 076172 043020 030067 1,568,094 COMPILER-MAIN SECTION LDA ADA SAP STATE TCONI (-MAXR-1) APPLT READ STATE LDA STATE JSM CPSTK STACK PRESENT STATE ISZ JMP JSM LDB ADB LDA ADA ADA STA LDA SAR CPA JMP CPB JMP RIB NLOOK TEST O-LOOK-AHEAD-DONE + 2 SCAN READ IXI AREED IX 2 B Ml CT 1 B,I 9 TKN REA 3 CTI + 2 REA 2 E 7 JSM SETCE ASC 1,07 100001 REA 3 050042 031251 001240 043432 067463 LDA AND STA LDA JSM JMP B,I B 777 STATE BCD CPSTK LOO Pl RECALL INDEX I OFFSET BY READ TABLE ORIGIN RECALL INDEX 2 LIMIT ADDRESS FOR TOKEN SEARCH GET COMPARISON TOKEN A=READ 1 lJl FOUND IT NO MATCH END OF TABLE, MUST BE ERROR SYNTAX ERROR A=READ 2 lJl STACK BCD 101 COMPILER-MAIN SECTION 03158000 04532 03159000 04533 03160000 03161000 03162000 03163000 04534 03164000 04535 03165000 04536 03166000 04537 03167000 04540 03168000 04541 03169000 04542 03170000 03171000 04543 03172000 04544 03173000 04545 03174000 04546 03175000 04547 03176000 04550 03177000 04551 03178000 03179000 04552 03180000 04553 03181000 04554 03182000 04555 03183000 04566 03184000 04557 03185000 04186000 04560 03187000 04561 03188000 04562 03189000 04563 03190000 04564 03191000 03192000 04565 03193000 04566 023430 APPLT 172434 ADA TCON 2 (MAXR-MAXP) SAM PUSHT APPLY STATE APPLY STATE 005253 174600 174040 025254 035243 023017 164000 001243 APLI 031254 020257 100000 031243 005252 027016 100001 APL 2 170510 072404 011243 067560 076173 LDB IX 2 SBL I TCB ADB STA STB CTI ADA ASY JMP AJ LDA STA ADA LDA STA LDB ADB LDA SAR SZA CPA JMP RIB 100001 APL 3 LDA 050042 AND 072003 RZA 000254 LDA 170201 RET 031251 APL 4 STA 067466 JMP RECAL INDEX 2 XKP A=MP i JP BRAN( CH TO SYNTHESIZE CTI STAKP UPDATE STACK POINTER Ml A,I A=PREVSTATE=J CTI IXI RECALL INDEXI AAPLY APPLY TABLE ORIGIN B,I APPLY TABLE WORD 9 A=APPLY 1 lIl=TEMP APL 3 =-0 ? CTI =J? APL 3 YES APL 2 B,I B 777 A=APPLY 2 lIl APL 4 Pl DONE WITH PARS El STATE LOOP 2 Page 50 1,568 094 101 1,568,094 COMPILER MAIN SECTION 03195000 04567 023431 03196000 04570 172020 03197000 03198000 03199000 03200000 04571 045250 03201000 04572 067574 03202000 04573 043043 03203000 03204000 04574 005252 03205000 04575 027015 03206000 03207000 04576 100001 03208000 04577 170510 03209000 04600 072404 03210000 04601 011237 03211000 04602 067604 03212000 04603 076173 03213000 03214000 04604 100001 03215000 04605 050042 03216000 04606 031251 03217000 04607 067466 03219000 03220000 03221000 03222000 04610 001253 03223000 04611 043432 03224000 04612 000054 03225000 04613 043432 03226000 03227000 04614 001252 03228000 04615 031251 03229000 04616 067466 PUSHT ADA TCON 3 (MAXP-MAXL) SAP PUSH LOOK STATE LOOK STATE ISZ JMP JSM L 002 L 003 NLOOKTEST NO-LOOK-AHEAD-DONE + 2 SCAN READ LDB IXI RECALL INDEXI 1 ADB ALOOKLOOKTABLE ORIGIN LDA SAR SZA CPA JMP RIB LDA AND STA JMP B,I 9 L 003 TKN L 003 L 002 Bl B 777 STATE LOOP 2 LOOK TABLE WORD B=LOOKI lIl=TEMP = O ? =TOKEN? YES A=LOOK 2 lIl PUSH STATE PUSH STATE PUSH LDA JSM LDA JSM LDA STA JMP IX 2 CPSTK B 176 CPSTK IXI STATE LOOP 2 STACK INDEX 2 STACK 'EMPTY' RECALL INDEX 1 Page 51 102 102 1,568,094 COMPILER SYNTHESIZE PRELIMINARIES 03231000 03232000 TOS C 03233000 03234000 04617 055254 OUT 6 03235000 04620 055254 03236000 04621 055254 OUT 5 03237000 04622 055254 03238000 04623 055254 OUT 4 03239000 04624 055254 03240000 04625 055254 OUT 3 03241000 04626 055254 03242000 04627 055254 OUT 2 03243000 04630 055254 03244000 03245000 04631 101254 OUTI 0324600 03247000 04632 043637 OUT O 03248000 04633 170507 03249000 04634 072402 03250000 04635 043637 03251000 04636 067543 03253000 03254000 BYTE 03255000 03256000 ON E 03257000 03258000 A03259000 03260000 04637 004107 OUTST 03261000 04640 014305 03262000 04641 067440 03263000 03264000 04642 074550 03265000 04643 170201 )UTPUT DSZ DSZ DSZ DSZ DSZ DSZ DSZ DSZ DSZ DSZ STAKP TOS-5 STAKP STAKP TOS-4 STAKP STAKP TOS-3 STAKP STAKP TOS-2 STAKP STAKP TOS-1 I STAKP LDA STAKP,ITOS JSM SAR SZA JSM JMP OUTST NORMAL BCD OUTPUT 8 + 2 SKIP IF MAINFRAME OUTST APLI RETURN E WRITER SUBROUTINE NTR Yl -REGISTER=BYTE LDBD CPB ACLMT JMP E 8 PBD A,I RET I 103 Page 52 103 1,568,094 Page 53 03267000 03268000 IMPL 03269000 03270000 04644 001257 IMSTZ 03271000 04645 010177 03272000 04646 067661 03273000 04647 010142 03274000 04650 067655 03275000 03276000 04651 000074 IMI 03277000 04652 043637 03278000 04653 000247 03279000 04654 067632 03280000 03281000 04655 001517 IM 2 03282000 04656 072473 03283000 04657 000216 03284000 04660 067632 03285000 03286000 04661 043020 E 12 03287000 04662 030462 03289000 03290000 IM Pl 03291000 03292000 04663 001257 IMDSP 03293000 04664 010177 03294000 04665 067661 03295000 04666 000051 03296000 04667 067632 03298000 03299000 03300000 03301000 04670 03302000 04671 03304000 03305000 03306000 03307000 04672 03308000 04673 03309000 04674 COMPILER SYNTHESIZE LIED STORAGE LDA CSTAT CHECK CONTROLLER STATE CPA PO JMP E 12 CANNOT STORE IT CPA P 5 JMP IM 2 ENTER CONTINUATION LDA B 77 JSM OUTST OUTPUT'RES' LDA ZK 1 JMP OUT O OUTPUT'GAZINTA DSP' PAIR LDA RGFLG SZA IMI LDA ZK 2 JMP OUT O OUTPUT'ENR GAZINTA' PAIR JSM SETCE ERROR, LINE CANNOT BE STORED ASC 1,12 LIED DISPLAY FOR STRINGS LDA CPA JMP LDA JMP CSTAT PO E 12 B 202 OUT O CHECK CONTROLLER STATE CANNOT STORE IT OUTPUT 'DSP' UNARYUNARY LDA B 56 067632 JMP OUTO OUTPUT'U-' EMPTY PARAMETER 000054 OEMTY 043637 067631 LDA JSM JMP B 176 OUTST OUTPUT'EMPTY' OUTI 03311000 03312000 03313000 -03314000 04675 03315000 04676 03316000 04677 'ROUND' STATEMENTS

000107 OROUN 043637 067617 LDA JSM JMP B 54 OUTST OUTPUT ', 1 ' OUT 6 104 104 Page 54 03318000 03319000 ARRA 03320000 03321000 04700 000066 ARREF 03322000 04701 043637 03323000 04702 067623 1,568,094 COMPILER SYNTHESIZE Y REFERENCE LDA JSM JMP B 140 OUTST OUTPUT'ENTIRE ARRAY' OUT 4 03325000 03326000 03327000 03328000 04703 101254 03329000 04704 004020 03330000 04705 076405 03331000 04706 020145 03332000 04707 043637 03333000 04710 000020 03334000 04711 170405 03335000 04712 043637 03336000 03337000 04713 000127 03338000 04714 004345 03339000 04715 071403 03340000 04716 004155 03341000 04717 075441 03342000 04720 072002 03343000 04721 076176 03344000 04722 024257 03345000 04723 174400 03346000 04724 076412 03347000 04725 035711 03348000 03349000 04726 075541 03350000 04727 170603 03351000 04730 031712 03352000 04731 075541 03353000 04732 061712 00354000 04733 043637 03355000 04734 045711 03356000 04735 067726 03357000 03358000 04736 000121 03359000 04737 067632 REAL NUMBER s ONUMB LDA LDB SZB ADA JSM LDA AAR ONI JSM ON 2 ON 3 LDA LDB XFR LDB DRS RZA RIB ADB ABR SZB STB STAKP,I AR 2 ONI P 2 OUTST AR 2 6 OUTST ADR 2 ADRI 4 M Il + 2 -2 Ml 1 ON 3 Tl MLY SAL 4 STA T 2 MLY IOR T 2 JSM OUTST ISZ Tl JMP ON 2 TEST AR 2 EXPONENT CORRECT CODE FOR NON-ZERO EXPONENT COPY NUMBER TO ARI SHIFT ARI RIGHT ONCE B = # OF BYTES TO MOVE OUTPUT TWO PACKED DIGITS LDA B 34 JMP OUT O 1,568,094 COMPILER SYNTHESIZE 03361000 03362000 03363000 03364000 04740 03365000 04741 03366000 04742 03367000 04743 03368000 03369000 04744 03370000 04745 03371000 04746 STRING STRING OLABL 043752 067632 000116 OSTRG 043752 067543 LDA JSM LDA JMP LDA JSM JMP B 43 STRGF B 75 OUT O B 42 STRGF APLI ENTRY FOR LABEL ENTRY FOR LITERAL SPECIAL STRING FOR ENT SPECIAL STRING FOR ENT 04747 000116 ESTRG LDA 04750 043752 JSM 04751 067627 JMP 03380000 03381000 03382000 03383000 03384000 03385000 03386000 04752 043637 STRGF 04753 001246 04754 043637 04755 004016 04756 035711 04757 005247 04760 034016 03387000 03388000 04761 03389000 04762 03390000 04763 03391000 04764 03392000 04765 03393000 03394000 04766 03395000 04767 03396000 04770 03397000 03398000 04771 03399000 04772 03400000 04773 03402000 03403000 03404000 03405000 04774 03406000 04775 03407000 04776 03408000 03409000 04777 03410000 05000 03411000 05001 074560 SF 2 010116 067766 043637 SF 3 067761 074560 SF 4 010116 067764 005711 034016 170201 JSM LDA JSM LDB STB LDB STB WBC CPA JMP JSM JMP OUTST CT 4 OUTST C Tl CT 5 C A,I B 42 SF 4 OUTST SF 2 WBC A,I CPA B 42 JMP SF 3 LDB STB RET Tl C OUTPUT BYTE COUNT SAVE C SET C TO BEGINNING OF STRING GET BYTE " 9 YES STASH IT GET CHARACTER FOLLOWING" "? YES RESTORE C OUTPUT DIM OPERATORS OUTPUT DIM OPERATORS ODIME 043637 067631 ODIML 043637 067623 LDA JSM JMP LDA JSM JMP B 133 OUTST OUTI B 133 OUTST OUT 4 OUTPUT DIM OPERATOR OUTPUT LETTER OUTPUT DIM OPERA TOR OUTPUT LETTER 106 Page 55 106 03373000 03374000 03375000 03376000 03377000 03378000 B 42 STRGF OUT 2 1,568,094 COMPILER SYNTHESIZE 03413000 03414000 BRANI 03415000 03416000 05002 005254 BRNCH 03417000 05003 024146 03418000 05004 100001 03419000 05005 031711 03420000 05006 043637 03421000 05007 000177 03422000 05010 043637 03423000 05011 067637 03425000 03426000 STRIN 03427000 03428000 05012 042002 BRSTR 03429000 05013 001711 03430000 05014 010047 03431000 05015 067744 03432000 05016 010046 03433000 05017 067744 03434000 03435000 05020 067522 CH OUTPUT SUBROUTINE LDB ADB LDA STA JSM LDA JSM JMP STAKP M 2 B,I Tl OUTST PO OUTST OUTST OUTPUT THE BRANCH COMMAND LEAVE TWO BLANK BYTES lG BRANCH JSM BRNCH LDA TI CPA B 230 JMP OSTRG CPA B 231 JMP OSTRG JMP E 7 OUTPUT THE BRANCH COMMAND OUTPUT THE LABEL OUTPUT THE LABEL ERROR, ILLEGAL BRANCH COMMAND 03437000 03438000 03439000 03440000 05021 042002 03441000 05022 001777 03442000 05023 072403 03443000 05024 043020 03444000 05025 030460 03445000 03446000 05026 000114 03447000 05027 043637 03448000 03449000 05030 040646 03450000 05031 173473 03451000 05032 000001 03452000 05033 170707 03453000 05034 043637 03454000 05035 170707 03455000 05036 067635 NUMBER BRANCH BRNUM JSM LDA SZA E 10 JSM ASC BRNCH DP + 3 SETCE 1,10 LDA B 44 JSM OUTST JSM SOS LDA RAR JSM RAR JMP OUTPUT THE BRANCH COMMAND ERROR, ILLEGAL INTEGER OUTPUT 'INTEGER FOLLOWS' FIXPT+ 2 OUTPUT THE INTEGER E 10 B 8 OUTST 8 OUT O + 3 03457000 03458000 STRING ASSIGNMENT 03459000 03460000 05037 000233 STRAS LAD ZK 3 03461000 05040 067632 JMP OUT O OUTPUT'GAZINTA STRING' Page 56 107 107 1,568,094 COMPILER SYNTHESIZE 03463000 03464000 03465000 03466000 05041 03467000 05042 03468000 05043 03469000 05044 03470000 05045 03471000 05046 03472000 05047 03473000 05050 03474000 05051 03475000 05052 03476000 05053 03477000 05054 03478000 05055 03479000 05056 03480000 05057 03481000 05060 03482000 05061 03483000 03484000 05062 03485000 05063 03486000 05064 03487000 05065 03488000 03489000 05066 03490000 05067 03491000 05070 03492000 05071 03493000 05072 03494000 05073 03495000 05074 03496000 05075 03497000 05076 LITERAL TRANSFER 101254 LITRL 043637 170507 072402 043637 000121 043637 074560 LI O 010076 066062 010053 066062 010116 066066 010117 066050 066047 000121 043637 074760 067543 004016 035241 043637 074560 010116 066047 010053 067265 066070 LII LI 2 LDA STAKP,I JSM OUTST SAR 8 SZA + 2 JSM OUTST LDA B 34 JSM OUTST WBC A,I CPA B 73 JMP LII CPA B 177 JMP LII CPA B 42 JMP LI 2 CPA B 40 JMP LI O JMP L 10-1 LDA B 34 JSM OUTST WBC A,D JMP APLI LDB C STB OLDC JSM OUTST WBC A,I CPA B 42 JMP LI 0-I CPA B 177 JMP E 2 JMP LI 2 + 2 OUTPUT TOS OUTPUT 'COMMENT DELIMITER' JUMP IF; JUMP IF EOL JUMP IF" OUTPUT 'COMMENT DELIMITER' ERROR, UNTERMINATED STRING 03499000 03500000 03501000 03502000 05077 000100 03503000 05100 067632 OUTPUT SUBSCRIPT COMMA OSCOM LDA B 64 JMP OUT O OUTPUT',2 ' 108 Page 57 108 1,568,094 COMPILER FILL IN BASE-PAGE LINKS 03505000 03506000 03507000 03508000 00346 03509000 00346 004442 03510000 00347 004000 03511000 00350 004543 03512000 00351 004020 03513000 00352 004272 03514000 00353 004251 03515000 00354 004752 03516000 00355 004637 03517000 03518000 00333 03519000 00333 001471 03520000 03521000 FILL IN BASE-PAGE LINKS ORG DEF DEF DEF DEF DEF DEE DEF DEF ACPLR CPLR READ 2 APLI SETCE SNI SQI STRGF OUTST ORG AMTBL DEF MNTBL END END OF PASS 2 NO ERRORS DETECTED Page 59 BASE-PAGE READ-WRITE-MEMORY 00003000 76550 00004000 ORG 76550 B UNL Page 58 109 109 Page 60 02001000 15477 02002000 02003000 CLAS 02004000 02005000 FORT 02006000 02007000 p 02008000 C= 02009000 M 02010000 02011000 02012000 02013000 02014000 02015000 02016000 15477 000000 RTBL 02017000 15500 003400 02018000 15501 003400 02019000 15502 003400 02020000 15503 003400 02021000 15504 003400 02022000 15505003400 02023000 15506 003400 02024000 15507 003400 02025000 15510 003400 02026000 15511 003400 02027000 15512 003400 02028000 15513 003400 02029000 15514 003400 02030000 15515 003400 02031000 15516 003400 02032000 15517 003400 02033000 15520 003400 02034000 15521 003400 02035000 15522 000000 02036000 15523 000000 02037000 15524 000000 02038000 15525 000000 02039000 15526 000000 02040000 15527 000000 02041000 15530 000000 02042000 15531 000000 02043000 15532 000000 02044000 15533 002400 02045000 15534 000000 02046000 15535 000000 02047000 15536 131400 02048000 15537 000000 02049000 15540 000000 02050000 15541 00400002051000 15542 004000 02052000 15543 005000 02053000 15544 000000 02054000 15545 000000 02055000 15546 004000 02056000 15547 000000 1,568,094 REVERSE COMPILER TABLE ORG 15477 B S TABLE FOR REVERSE COMPILER MAT IS PPPP CCCC MMMMMMMM PRIORITY = CLASS = MNEMONIC INFORMATION:

NOP OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT NOP NOP NOP NOP NOP NOP NOP NOP NOP OCT NOP NOP OCT NOP NOP OCT OCT OCT NOP NOP OCT NOP 000 003400 001 0 003400 002 0 003400 003 0 003400 004 0 003400 005 0 003400 006 0 003400 007 0 003400 010 0 003400 011 0 003400 012 0 003400 013 0 003400 014 0 003400 015 0 003400 016 0 003400 017 0 003400 020 0 003400 021 0 003400 022 0 023 024 026 027 031 032 033 002400 034 0 036 131400 037 11 041 004000 042 0 004000 043 0 005000 044 0 046 004000 047 0 7 000 7 000 7 000 7 000 7 000 7 000 7 000 7 000 7 000 7 000 7 000 7 000 7 000 7 000 7 000 7 000 7 000 7 000 ROM ROM ROM ROM ROM ROM ROM ROM ROM ROM ROM ROM ROM ROM ROM ROM ROM ROM 000 LITERAL 3 000 I 8 000 STRING FOLLOWS 8 000 LABEL FOLLOWS 000 INTEGER FOLLOWS 8 000 & 1,568,094 REVERSE COMPILER TABLE 02057000 15550 000000 02058000 15551 111452 02059000 15552 101453 02060000 15553 021454 02061000 15554 101455 02062000 15555 121055 02063000 15556 111457 02064000 15557 004400 02065000 15560 004400 02066000 15561 004400 02067000 15562 004400 02068000 15563 021454 02069000 15564 000000 02070000 15565 000000 02071000 15566 000000 02072000 15567 000000 02073000 15570 000000 02074000 15571 031472 02075000 15572 002073 02076000 15573 000000 02077000 15574 002072 02078000 15575 000000 02079000 15576 000000 02080000 15577 000000 02081000 15600 000501 02082000 15601 000502 02083000 15602 000503 02084000 15603 000504 02085000 15604 000505 02086000 15605 000506 02087000 15606 000507 02088000 15607 000510 02089000 15610 000511 02090000 15611 000512 02091000 15612 000513 02092000 15613 000514 02093000 15614 000515 02094000 15615 000516 02095000 15616 000517 02096000 15617 000520 02097000 15620 000521 02098000 15621 000522 02099000 15622 000523 02100000 15623 000524 02101000 15624 000525 02102000 15625 000526 02103000 15626 000527 02104000 15627 000530 02105000 15630 000531 02106000 15631 000532 02107000 15632 025400 02108000 15633 151134 02109000 15634 000000 02110000 15635 000000 02111000 15636 000000 02112000 15637 000452 NOP OCT 111452 OCT 101453 OCT 021454 OCT 101455 OCT 121055 OCT 111457 OCT 004400 OCT 004400 OCT 004400 OCT 004400 OCT 021454 NOP NOP NOP NOP NOP OCT 031472 OCT 002073 NOP OCT 002072 NOP NOP NOP OCT 000501 OCT 000502 OCT 000503 OCT 000504 OCT 000505 OCT 000506 OCT 000507 OCT 000510 OCT 000511 OCT 000512 OCT 000513 OCT 000514 OCT 000515 OCT 000516 OCT 000517 OCT 000520 OCT 000521 OCT 000522 OCT 000523 OCT 000524 OCT 000525 OCT 000526 OCT 000527 OCT 000530 OCT 000531 OCT 000532 OCT 025400 OCT 151134 NOP NOP NOP OCT 000452 051 052 053 054 056 1 057 061 062 063 064 066 067 071 072 073 074 076 077 101 102 103 104 106 107 111 112 113 114 116 117 121 122 123 124 126 127 131 132 133 134 1 136 137 9 3 8 3 2 3 8 3 2 9 3 0 9 0 9 0 9 0 9 2 3 052 053 054 057 000 000 000 000 054 1 I U/ FNUMBER ENUMBER F NUMBER W/EXPONENT E NUMBER W/EXPONENT 3 3 072:

0 4 073; 0 4 072:

0 1 101 A 0 1 102 B 0 1 103 C 0 1 104 D 0 1 105 E 0 1 106 F 0 1 107 G 0 1 110 H 0 1 111 1 0 1 112 J 0 1 113 K 0 1 114 L 0 1 115 M 0 1 116 N 0 1 117 O 0 1 120 P 0 1 121 Q 0 1 122 R 0 1 123 S 0 1 124 T 0 1 125 U 0 1 126 V 0 1 127 W 0 1 130 X 0 1 131 Y 0 1 132 Z 2 11 DIM OPERATOR 3 2 134 SQR 0 0 000 END OF# 0 1 052 ENTIRE ARRAY 111 Page 61 111 1,568,094 REVERSE COMPILER TABLE 02113000 15640 171101 02114000 15641 171102 02115000 15642 171103 02116000 15643 171104 02117000 15644 171105 02118000 15645 171106 02119000 15646 171107 02120000 15647 171110 02121000 15650 171111 02122000 15651 171112 02123000 15652 171113 02124000 15653 171114 02125000 15654 171115 02126000 15655 171116 02127000 15656 171117 02128000 15657 171120 02129000 15660 171121 02130000 15661 171122 02131000 15662 171123 02132000 15663 171124 02133000 15664 171125 02134000 15665 171126 02135000 15666 171127 02136000 15667 171130 02137000 15670 171131 02138000 15671 171132 02139000 15672 000573 02140000 15673 031575 02141000 15674 031575 02142000 15675 000400 02143000 15676 002177 02144000 15677 011003 02145000 15700 011004 02146000 15701 011004 02147000 15702 041400 02148000 15703 051400 02149000 15704 061000 02150000 15705 011000 02151000 15706 011000 02152000 15707 011000 02153000 15710 011000 02154000 15711 011000 02155000 15712 011000 02156000 15713 011000 02157000 15714 161000 02158000 15715 161000 02159000 15716 011000 02160000 15717 011000 02161000 15720 011000 02162000 15721 151000 02163000 15722 011000 02164000 15723 003000 02165000 15724 003000 02166000 15725 003000 02167000 15726 003000 02168000 15727 003000 OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT 171101 171102 171103 171104 171105 171106 171107 171110 171111 171112 171113 171114 171115 171116 171117 171120 171121 171122 171123 171124 171125 171126 171127 171130 171131 171132 000573 031575 031575 000400 002177 011003 011004 011004 041400 051400 061000 011000 011000 011000 011000 011000 011000 011000 161000 161000 011000 011000 011000 151000 011000 003000 003000 003000 003000 003000 141 15 142 15 143 15 144 15 15 146 15 147 15 15 151 15 152 15 153 15 154 15 15 156 15 157 15 15 161 15 162 15 163 15 164 15 15 166 15 167 15 15 171 15 172 15 173 0 174 3 3 176 0 177 0 1 201 1 202 1 203 4 204 5 205 6 206 1 207 1 210 1 211 1 212 1 213 1 214 1 215 14 216 14 217 1 220 1 221 1 222 13 223 1 224 0 225 0 226 0 227 O 230 0 2 101 Al 2 102 Bl 2 103 Cl 2 104 Dl 2 105 El 2 106 Fl 2 107 Gl 2 110 Hl 2 111 1 l 2 112 Jl 2 113 Kl 2 114 Ll 2 115 Ml 2 116 Nl 2 117 Ol 2 120 Pl 2 121 Ql 2 122 RI 2 123 Sl 2 124 Tl 2 125 Ul 2 126 Vl 2 127 Wl 2 130 Xl 2 131 Yl 2 132 Zl 1 173 Pl 3 175 GAZINTA STRING 3 175 GAZINTA 1 000 EMPTY 4 177 EOL 2 3 IF 2 4 PRT 2 4 DSP 3 OR 3 AND 2 NOT 2 FXD 2 FLT 2 SPC 2 JMP 2 SFG 2 CFG 2 CMF 2 PRND 2 DRND 2 TRC 2 NOR 2 STP 2 FLG 2 ENT 6 GTO6 GTO+ 6 GSB6 GSB+ 6 GTO 112 Page 62 112 1,568,094 REVERSE COMPILER TABLE 15730 003000 15731 011000 15732 011000 15733 011000 15734 000400 15735 000400 15736 000400 15737 041400 15740 011000 15741 011000 15742 011000 15743 011000 15744 011000 15745 011000 15746 011000 15747 011000 15750 011000 15751 011000 15752 011000 15753 011000 15754 011000 15755 011000 15756 011000 15757 011000 15760 000400 15761 000400 15762 000400 15763 000400 15764 071400 15765 071400 15766 071400 15767 071400 15770 071400 15771 071400 15772 151000 15773 011000 15774 000400 15775 000400 15776 000400 15777 151000 OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT 003000 011000 011000 011000 000400 000400 000400 041400 011000 011000 011000 011000 011000 011000 011000 011000 011000 011000 011000 011000 011000 011000 011000 011000 000400 000400 000400 000400 071400 071400 071400 071400 071400 071400 151000 011000 000400 000400 000400 151000 231 232 233 234 235 236 237 240 241 242 243 244 245 246 247 250 251 252 253 254 255 256 257 260 261 262 263 264 265 266 267 270 271 272 273 274 275 276 277 300 0 6 GSB 1 2 DIM 1 2 RET 1 2 WAIT 0 I BEEP 0 1 END 0 1 REW 4 3 XOR 1 2 IDF 1 2 SSC 1 2 TRK 1 2 FDF 1 2 ERT 1 2 MRK 1 2 RCF 1 2 LDF 1 2 ENP 1 2 LDP 1 2 RCM 1 2 LDM 1 2 RCK 1 2 LDK 1 2 LDB 1 2 VFY 0 1 AVD 0 1 AVE 0 I LKD 0 I LKE 7 3 # 7 3 ≤ 7 3 ≥ 7 3 < 7 3 > 73 = 13 2 L C R I 2 LIST 0 1 RES 0 1 LIST K 0 I TLIST 13 2 L C P 113 Page 63 113 02169000 02170000 02171000 02172000 02173000 02174000 02175000 02176000 02177000 02178000 02179000 02180000 02181000 02182000 02183000 02184000 02185000 02186000 02187000 02188000 02189000 02190000 02191000 02192000 02193000 02194000 02195000 02196000 02197000 02198000 02199000 02200000 02201000 02202000 02203000 02204000 02205000 02206000 02207000 02208000 114 Page 64 02210000 05106 02211000 02212000 02213000 02215000 02216000 02217000 02218000 02219000 02220000 02221000 02222000 02223000 02224000 02225000 02226000 02227000 1,568,094 REVERSE COMPILER 114 OPG 5106 B REVERSE COMPILER REVERSE COMPILER POINTERS AND EQUATES POINTERS AND EQUATES 077241 077242 077243 077244 077245 077246 077247 077250 077251 077252 LEFTE PRI LAST ARRBF CODE RT 1 RT 2 RT 3 OFLAG IMMFG EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU 02229000 05106 CMTMP+ 2 CMTMP+ 3 CMTMP+ 4 CMTMP+ 5 CMTMP+ 6 CMTMP+ 7 CMTMP+ 8 CMTMP+ 9 CMTMP+ 10 CMTMP+ 11 INPUT PRIORITY LATEST OUTPUT PRIORITY LEFT END OF BUFFER OUTPUT BUFFER OVERFLOW FLAG 1 DUMP FLAG RESERVED FOR 4 K-PAGE CHECKSUM BSS 1 1,568,094 REVERSE COMPILER SUBROUTINES 02231000 02232000 OUT Pl 02233000 02234000 05107 000177 RCPAR 02235000 05110 042142 02236000 05111 000231 02237000 05112 042142 02238000 05113 000112 02239000 02240000 05114 072422 RCOUT 02241000 05115 004016 02242000 05116 035714 02243000 05117 004316 02244000 05120 034016 02245000 05121 024257 02246000 05122 034017 02247000 05123 074771 RCO 1 02248000 05124 074741 02249000 05125 004017 02250000 05126 015244 02251000 05127 066131 02252000 05130 066123 02253000 02254000 05131 005714 02255000 05132 034016 02256000 02257000 05133 074550 02258000 05134 104316 02259000 05135 014262 02260000 05136 170201 RCO 2 02261000 05137 004074 02262000 05140 035251 02263000 05141 170201 UT WRITER SUBROUTINE LDAPO JSM RCSTK LDA RKI JSM RCSTK LDA B 51 SZA RCO 2 LDB C STB T 4 LDB AIBFL STB C ADB MI STB D WBD B,D PBC B,D LDBD CPB ARRBF JMP + 2 JMP RCO 1 LDB T 4 STB C PBD LDB CPB RET LDB STB RET AI AIBFL,I TOBLN 1 B 77 OFLAG I SPECIAL ENTRY FOR PARENTHESES STACK '(' OUTPUT '(' SKIP FF NULL CHARACTER SAVE C INITIALIZE DESTINATION INITIALIZE SOURCE MOVE A BYTE RESTORE C INSERT NEW CHARACTER OVERFLOW? NO YES 02265000 02266000 STAC 02267000 02268000 05142 005254 RCSTK 02269000 05143 014326 02270000 05144 164424 02271000 02272000 05145 045254 02273000 05146 131254 02274000 05147 170201 KER SUBROUTINE LDB CPB JMP ISZ STA RET STAKP ASLMT ASYER,I STAKP STAKP,I STACK OVERFLOW STACK THE INFO Page 65 1,568,094 REVERSE COMPILER SUBROUTINES 02276000 02277000 02278000 02279000 02280000 02281000 02282000 02283000 02284000 02285000 02286000 02287000 02288000 02289000 02290000 02291000 05150 02292000 05151 02293000 05152 02294000 02295000 05153 02296000 05154 02297000 05155 02298000 05156 02299000 05157 02300000 05160 02301000 05161 02302000 02303000 05162 02304000 05163 02305000 05164 02306000 05165 02307000 02308000 05166 02309000 05167 02310000 05170 02311000 05171 02312000 02313000 02314000 02315000 02316000 02317000 05172 05173 05174 MNEMONIC TABLE SCAN SUBROUTINE FOR REVERSE COMPILER ON ENTRY:

A-REGISTER = OPCODE B-REGISTER = WORD ADDRESS OF TABLE ON EXIT:

GUIDE = CHARACTER COUNT INCLUDED ASCII = CHARACTER POINTER TO RIGHT END OF MNEMONIC A-REGISTER= GUIDE A-REGISTER = GUIDE 031711 TSCAN 034017 074770 000177 Y 1 031713 074570 Y 2 170607 172603 045713 066155 170507 011711 066166 066153 001237 050170 061713 031237 054017 004017 035240 STA Tl STB D WBD A,D LDA PO STA T 3 WBD A,I SAL 8 SAM + 3,C ISZ T 3 JMP Y 2 SAR CPA JMP JMP LDA AND IOR STA DSZ LDB STB 8 Tl + 2 Y 1 GUIDE M 256 T 3 GUIDE D D ASCII SAVE OPCODE INITIALIZE CHARACTER POINTER INITIALIZE CHARACTER COUNT SKIP IF OPCODE JUMP IF FOUND RECORD CHARACTER COUNT RECORD CHARACTER POINTER 05175 170201 Page 66 116 116 RET 1 1,568,094 REVERSE COMPILER SUBROUTINES 02319000 02320000 02321000 02322000 02323000 02324000 02325000 02326000 05176 004304 02327000 05177 014016 02328000 05200 170201 02329000 02330000 05201 034017 02331000 05202 074571 02332000 02333000 05203 004017 02334000 05204 014016 02335000 05205 066264 02336000 05206 000017 02337000 05207 074771 02338000 05210 004017 02339000 05211 014016 02340000 05212 066262 02341000 02342000 05213 031241 02343000 05214 030017 02344000 05215 074570 02345000 05216 031711 02346000 05217 020332 02347000 05220 100000 02348000 05221 170507 02349000 05222 050130 02350000 05223 010142 02351000 05224 066253 02352000 05225 010141 02353000 05226 066257 02354000 05227 010140 02355000 05230 066245 02356000 05231 010137 02357000 05232 066240 02358000 05233 010136 02359000 05234 066253 02360000 05235 010135 02361000 05236 066257 02362000 02363000 05237 066203 BACKWARD SCAN SUBROUTINE FOR REVERSE COMPILER ON RETURNTOP+ 11: ATLH LIMIT ONRETURNTOP+ -REGISTERHASBYTE ON RETURN TO P+ 2: B-REGISTER HAS BYTE RSCAN RSCL LDB CPB RET ACBUF C I STB D WBD B,I LDB CPB JMP LDA WBD LDB CPB JMP STA STA WBD STA ADA LDA SAR AND CPA JMP CPA JMP CPA JMP CPA JMP CPA JMP CPA JMP D C R 52 D 8.D D C RSI LEFTE D A,I TI ARTBL A,I 8 B 17 P 5 R 55 P 6 R 56 P 7 R 53 P 8 R 54 P 9 R 55 P 10 l R 56 AT LH LIMIT, DONE INITIALIZE FORWARD POINTER JUMP IFC IS OK BACK UP ONE SPACE JUMPIFCNOTOK SAVE OLD D CONTINUE FORWARD SCAN GET RTBL WORD GET CLASS = LITERAL 6 = GTO OR GSB 7 = OPTIONAL ROM 8 = CHARACTER STRING 9 = REAL NUMBER = INTEGER NUMBER JMP RSCL NONE => ONE-BYTE CODE 117 Page 67 117 1,568,094 REVERSE COMPILER SUBROUTINES 02365000 02366000 02367000 02368000 05240 02369000 05241 02370000 05242 02371000 05243 02372000 05244 02373000 02374000 02375000 02376000 05245 02377000 05246 02378000 05247 02379000 02380000 02381000 02382000 02383000 02384000 02385000 02386000 02387000 02388000 02389000 02390000 02391000 02392000 02393000 02394000 02396000 02397000 02398000 02399000 02400000 02401000 CHARACTER STRING CHARACTER STRING 074571 R 54 174040 076541 074570 066242 WBD B,I TCB SIB RSCL WBD A,I JMP -2 GET LENGTH OF STRING SKIP TO END OF STRING OPTIONAL-ROM CODE :,I 074570 R 53 170607 061711 05250 010043 05251 066240 05252 066203 05253 05254 05255 05256 WBD A,I SAL 8 IOR Tl CPA B 411 JMP R 54 JMP RSCL SKIP SECOND CODE OF PAIR IT IS A Pl 'XXX'? YES REAL NUMBER OR ENT LITERAL REAL NUMBER OR ENT LITERAL 074570 R 55 010121 066203 066253 WBD CPA JMP JMP AJI B 34 RSCL -3 LOOK FOR END OF IT GTOORGSB 05257 05260 05261 074570 R 56 074570 066203 WBD WBD JMP A,I A,I RSCL SKIP H S BRANCH ADDRESS NORMAL RETURNS NORMAL RETURNS 05262 05263 05264 02402000 05265 005241 R 51 034016 074761 R 52 170202 LDB LEFTE STB C WBC B,D RET 2 CORRECT C RETURN WITH BYTE Page 68 118 118 1,568,094 REVERSE COMPILER MAIN SECTION 02404000 02405000 INIT 02406000 02407000 ON E 02408000 02409000 B-RE 02410000 02411000 05266 035244 RCLR 02412000 05267 000001 02413000 05270 004450 02414000 05271 024254 02415000 05272 140001 02416000 05273 000262 02417000 05274 130316 02418000 05275 000117 02419000 05276 031251 02420000 02421000 05277 000257 02422000 05300 031610 02423000 05301 001532 02424000 05302 072402 02425000 05303 141532 02426000 02427000 05304 140511 02428000 05305 066323 02430000 02431000 EX 1 02432000 02433000 05306 005244 RXIT 02434000 05307 034017 02435000 05310 074570 02436000 05311 001251 02437000 05312 074750 02438000 05313 000214 02439000 05314 130316 02440000 02441000 05315 005531 02442000 05316 076402 02443000 05317 164001 02444000 05320 170201 IALIZATION :NTRY:

EGISTER HAS LOCATION FOR LEFT END STB ARRBF INITIALIZE LEFT-END POINTER LDA B LDB ACLBI ADB Pl SPECIAL ENTRY INTO ACLBI,I JSM B,I TO CLEAR MOST OF I/O BUFFER LDA TOBLN STA AIBFL,I LDA B 40 STA OFLAG INDICATE NO BUFFER OVERFLOW LDA Ml STA KBFMT INDICATE COMPILE BUFFER IS OVERWRIT LDA REFOR SZA + 2 JSM REFOR,I JSM AGEOL,I LOOK FOR EOL JMP RLI r T ROUTINE LDB STB WBD LDA PBD LDA STA LDB SZB JMP RET ARRBF D INITIALIZE POINTER FOR OVERFLOW FLAG A,I OFLAG A,D STORE OVERFLOW STATUS FLAG EOLB AIBFL,I FIX UP END OF I/O BUFFER APRVC + 2 B,I IS A Pl ROM IN? NO YES Page 69 119 119 1,568,094 REVERSE COMPILER MAIN SECTION 02446000 02447000 MAIN 02448000 02449000 05321 042176 RLOOP 02450000 05322 066306 02451000 02452000 05323 035245 RLI 02453000 05324 024332 02454000 05325 100001 02455000 05326 031237 02456000 05327 004177 02457000 05330 035240 02458000 02459000 05331 005245 02460000 05332 024167 02461000 05333 176405 02462000 05334 000001 02463000 05335 020254 02464000 05336 004333 02465000 05337 042150 02466000 02467000 05340 170507 RL 4 02468000 05341 050130 02469000 05342 022344 02470000 05343 164000 02471000 02472000 05344 105345 AJ 2 02473000 02474000 05345 100424 02475000 05346 005433 02476000 05347 005470 02477000 05350 005470 02478000 05351 005427 02479000 05352 005575 02480000 05353 005433 02481000 05354 005361 02482000 05355 005545 02483000 05356 005610 02484000 05357 005737 02485000 05360 005321 LOOP JSM RSCAN JMP RXIT STB ADB LDA STA LDB STB LDB ADB SBM LDA ADA LDB JSM SAR AND ADA JMP CODE ARTBL B,I GUIDE PO ASCII CODE M 128 RL 4 B Pl AMTBL TSCAN 8 817 AJ 2 A,I SCAN BACKWARDS DONE SAVE BYTE SAVE RTBL WORD INITIALIZE 'ASCII' TO "NO MNEMONIC" RECALL CODE SKIP UNLESS MAINFRAME MNEMONIC GO GET MNEMONIC INFORMATION GET CLASS BRANCH VIA JMP TABLE DEF + 11 JUMPTABLE#2 DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF ASYER,I O UNEXPECTED CODE RC 2 1 OPERAND RC 4 2 UNARY OPERATOR RC 4 3 BINARY OPERATOR RCI 4 EOL ELOUT 5 LITERAL RC 2 6 GTO ORGSB OPROM 7 OPTIONAL-ROM STOUT 8 CHARACTER STRING REOUT 9 REAL NUMBER INTOT 10 INTEGER NUMBER RLOOP 11 IGNORE Page 70 1,568,094 REVERSE COMPILER MAIN SECTION 02487000 02488000 02489000 02490000 02491000 02492000 02493000 02494000 02495000 05361 02496000 05362 02497000 05363 02498000 05364 02499000 05365 02500000 05366 02501000 05367 02502000 05370 02503000 05371 02504000 05372 02505000 05373 02506000 02507000 05374 02508000 05375 02509000 05376 02510000 05377 02511000 02512000 05400 02513000 05401 02514000 05402 02515000 05403 02516000 05404 02517000 05405 02518000 02519000 05406 02520000 05407 02521000 05410 02522000 05411 02523000 05412 02524000 05413 02525000 05414 02526000 05415 02527000 05416 02528000 05417 02529000 05420 02530000 02531000 05421 02532000 05422 02533000 05423 02534000 02535000 05424 02536000 05425 02537000 05426 CALL OPTIONAL-ROM FOR REVERSE COMPILER ON EXIT:

ON EXIT:

004326 025245 104001 076407 024254 035246 024254 035247 104001 014257 066772 044016 074760 031250 074761 105247 176205 140001 066406 001237 066340 001250 020257 170700 024000 176204 100001 170607 066420 100001 050170 031237 105246 176202 140001 'GUIDE'= 'GUIDE' INFORMATION 'ASCII' = CHARACTER POINTER TO RIGHT END OF MNEMONIC OPROM LDR ATROM OPROM LDR ATROM E 20 A ADB LDB SZB ADB STB ADB STB LDB CPB JMP ISZ WBC STA WBC LDB SBP JSM JMP LDA JMP LDA ADA RAR ADB SBP LDA SAL JMP LDA AND STA LDB SBP JSM 001250 042150 066340 LDA JSM JMP CODE B,I E 20 A Pl RTI Pl RT 2 B,I Ml E 20 C A,D RT 3 B,D RT 2,1 + 5,C B,I + 3 GUIDE RL 4 RT 3 Ml 1 A + 4,C B,I 8 + 3 B,I M 256 GUIDE RTI,I + 2,C B., RT 3 TSCAN RL 4 GET ROM PAGE ADDRESS SKIP IF ROM IS MISSING COMPILE REVERSE COMPILE ERROR, ROM MISSING GET ROM'S RELATIVE CODE OPTIONAL CALL ON ROM SPECIAL RETURN FOR STRING ROM SKIP IF LEFT HALF SAVE 'GUIDE' INFORMATION OPTIONAL CALL ON ROM GO GET MNEMONIC INFORMATION 121 Page 71 121 1221,568,094 1 L Page 72 REVERSE COMPILER02539000 02540000 EOL 02541000 02542000 05427 000305 RCI 02543000 05430 031254 02544000 05431 000177 02545000 05432 031243 02546000 02547000 OPEI 02548000 02549000 05433 001237 RC 2 02550000 05434 005240 02551000 05435 042754 02552000 05436 000177 RC 2 A 02553000 05437 031252 02554000 02555000 05440 004305 RC 3 02556000 05441 015254 02557000 05442 066321 02558000 02559000 05443 101254 02560000 05444 055254 02561000 05445 031237 02562000 05446 105254 02563000 05447 055254 02564000 05450 010245 02565000 05451 066455 02566000 05452 042754 02567000 05453 000177 02568000 05454 031252 02569000 02570000 05455 001237 RC 3 A 02571000 05456 004000 02572000 05457 170507 02573000 05460 050130 02574000 02575000 05461 174513 02576000 05462 014140 02577000 05463 004137 02578000 05464 035243 02579000 05465 010144 02580000 05466 066321 02581000 05467 066440 MAIN SECTION CODE LDA STA LDA STA RAND LDA LDB JSM LDA STA LDB CPB JMP LDA DSZ STA LDB DSZ CPA JMP JSM LDA STA LDA LDB SAR AND SBR CPB LDB STB CPA JMP JMP ASTAK STAKP PO LAST GUIDE ASCII NMOUT PO IMMFG ASTAK STAKP RLOOP RESET STACK POINTER RESET 'LAST' OUTPUT OPERAND STACK EMPTY? YES STAKP,I RECALL STACKED 'GUIDE' STAKP GUIDE STAKP,I RECALL STACKED 'ASCII' STAKP IMCON = 131400 B RC 3 A JUMP IF IMPLIED MULTIPLY NMOUT OUTPUT TOS PO IMMFG NOT IMPLIED MULTIPLY GUIDE A 8 B 17 12 P 7 P 8 LAST P 3 RLOOP RC 3 A=CLASS B=PRIORITY CHANGE 7 TO 8 SET 'LAST' BINARY OPERATOR? YES NO 122 1,568,094 I 1) 1,568,094 REVERSE COMPILER MAIN SECTION OPERATOR OPERATOR 05470 001237 RC 4 05471 170513 05472 031242 05473 000305 05474 011254 05475 066505 05476 101254 05477 170513 05500 010132 05501 000133 05502 170140 05503 021242 05504 172405 05505 001242 RC 5 05506 170140 05507 021243 05510 172406 05511 042107 RC 6 05512 000177 05513 031252 05514 000254 05515 031243 05516 05517 05520 05521 05522 05523 05524 05525 05526 05527 001240 RC 7 042142 001237 042142 001242 010131 066530 010130 066532 066321 05530 042107 05531 066540 05532 05533 05534 05535 05536 05537 05540 05541 05542 05543 05544 RC 8 000177 RC 9 042142 000230 042142 000067 042114 000171 RCOM 031252 000254 031243 066321 LDA SAR STA LDA CPA JMP LDA SAR CPA LDA CMA ADA SAM LDA CMA ADA SAM JSM LDA STA LDA STA LDA JSM LDA JSM LDA CPA JMP CPA JMP JMP GUIDE 12 PRI ASTAK STAKP RC 5 STAKP,I 12 P 13 P 12 PRI RC 6 PRI LAST RC 7 RCPAR PO IMMFG Pl LAST ASCII RCSTK GUIDE RCSTK PRI P 14 RC 8 P 15 RC 9 RLOOP JSM RCPAR JMP RCOM LDA JSM LDA JSM LDA JSM LDA STA LDA STA JMP PO RCSTK RK 2 RCSTK B 135 RCOUT PO IMMFG Pl LAST RLOOP A=INPUT PRIORITY STACK EMPTY? YES A=PR 2 CHANGE 13 TO 12 PRI-PR 2-1 LAST-PRI-1 STACK '(' AND OUTPUT ')' COVERS CASE ( 2 + 3)4 SET 'LAST' STACK INPUT INFORMATION RECALL INPUT PRIORITY STACK"'(' AND OUTPUT ')' STACK 'l' OUTPUT 'l' COVERS CASE Al 213 SET 'LAST' 123 123 Page 73 02583000 02584000 02585000 02586000 02587000 02588000 02589000 02590000 02591000 02592000 02593000 02594000 02595000 02596000 02597000 02598000 02599000 02600000 02601000 02602000 02603000 02604000 02605000 02606000 02607000 02608000 02609000 02610000 Q 2611000 02612000 02613000 02614000 02615000 02616000 02617000 02618000 02619000 02620000 02621000 02622000 02623000 02624000 02625000 02626000 02627000 02628000 02629000 02630000 02631000 02632000 02633000 1,568,094 REVERSE COMPILER MAIN SECTION 02635000 02636000 SECT 02637000 02638000 05545 000116 STOUT 02639000 05546 042114 02640000 05547 044016 02641000 05550 035270 02642000 05551 044016 02643000 05552 074560 02644000 05553 072415 02645000 05554 031712 02646000 05555 031713 02647000 02648000 05556 074560 02649000 05557 055712 02650000 05560 066556 02651000 05561 074760 02652000 02653000 05562 074760 02654000 05563 042114 02655000 05564 010116 02656000 05565 042114 02657000 05566 055713 02658000 05567 066562 02659000 02660000 05570 000116 STI 02661000 05571 042114 02662000 05572 005270 02663000 05573 034016 02664000 05574 066436 02666000 02667000 SE 02668000 02669000 05575 044016 ELO 02670000 02671000 05576 074560 ELI 02672000 05577 010121 02673000 05600 066602 02674000 05601 066576 02675000 05602 054016 EL 2 02676000 02677000 05603 074760 EL 3 02678000 05604 010121 02679000 05605 066321 02680000 05606 042114 02681000 05607 066603 ION TO OUPUT A STRING IN LIST FORMAT LDA JSM LDB STB ISZ WBC SZA STA STA WBC DSZ JMP WBC WPC JSM CPA JSM DSZ JMP LDA JSM LDB STB JMP B 42 RCOUT OUTPUT TRAILING QUOTE C SAVEC SAVEC C A,I GET LENGTH STI T 2 T 3 A,I T 2 -2 A,D FIND RIGHT-HAND END OF STRING POINT TO RIGHT-HAND END OF STRING A,D READ A CHARACTER RCOUT MOVE TO OUTPUT B 42 RCOUT DUPLICATE IF" T 3 -5 B 42 RCOUT OUTPUT LEADING QUOTE SAVEC C RESTORE C RC 2 A :CTION TO OUTPUT LITERAL UT ISZ C WBC CPA JMP JMP DSZ WBC CPA JMP JSM JMP AI B 34 EL 2 ELI C SKIP PAST LEADING B 34 FIND RIGHT-HAND END OF LITERAL A,D READ A CHARACTER B 34 RLOOP RCOUT MOVE TO OUTPUT EL 3 Page 74 124 124 1,568,094 REVERSE COMPILER MAIN SECTION 02683000 02684000 02685000 02686000 05610 001252 02687000 05611 170140 02688000 05612 031252 02689000 05613 072002 02690000 05614 042107 02691000 05615 004016 02692000 05616 035270 02693000 05617 000345 02694000 05620 030017 02695000 05621 071603 02696000 05622 173201 02697000 02698000 05623 074560 02699000 05624 074560 02700000 05625 010103 02701000 05626 173211 02702000 05627 010102 02703000 05630 173307 02704000 05631 010101 02705000 05632 173301 02706000 02707000 05633 074560 02708000 05634 170607 02709000 05635 170401 02710000 05636 031770 02711000 02712000 05637 074560 02713000 05640 010121 02714000 05641 066644 02715000 05642 074550 02716000 05643 066637 02717000 02718000 05644 005270 02719000 05645 034016 02720000 02721000 02722000 02723000 05646 001770 02734000 05647 170405 02725000 02726000 05650 173022 02727000 02728000 05651 172002 02729000 05652 170040 02730000 05653 040762 02731000 05654 000135 02732000 05655 024103 02733000 05656 031711 02734000 05657 000001 02735000 05660 042114 02736000 05661 001711 02737000 05662 072071 SECTION TO OUTPUT A REAL NUMBER IN LIST FORMAT REOUT RN 2 RN 3 A LDA IMMFG CMA STA IMMFG RZA + 2 JSM RCPAR LDB C STB SAVEC LDA ADRI STA D CLR 4 SOC +I,C WBC A,I WBC A,I CPA B 60 SOC RN 2,C CPA B 61 SOC RN 2,S CPA B 63 SOC + 1,S WBC A,I SAL 8 AAR 2 STA ARI WBC A,l CPA B 34 JMP RN 3 A PBD A,I JMP RN 2 LDB SAVEC STB C DUMPING NUMBER WITH 1 ACTIVE SAVE C CLEAR ARI GET FORMAT INDICATOR JUMP IF F/NX JUMP IF E/NX SET UP EXPONENT MOVE DIGITS TO ARI RESTORE C ENTER HERE IF NUMBER ALREADY IN ARI LDA ARI AAR 6 RN 4 SOC ROUTF SAP TCA JSM DEF ADB STA LDA JSM LDA RZA SDIV Plo O B 60 TI B RCOUT Tl RN 4 LOOK AT EXPONENT SKIP IF F-FORMAT GET ABS OF EXPONENT GET EXPONENT DIGIT CONVERT TO ASCII MOVE TO OUTPUT Page 75 1,568,094 Page 76 02739000 05663 02740000 05664 02741000 05665 02742000 05666 02743000 05667 02744000 05670 02745000 02746000 05671 02747000 02748000 05672 02749000 05673 02750000 05674 02751000 05675 02752000 05676 02753000 05677 02754000 05700 02755000 05701 02756000 05702 02757000 05703 02758000 05704 02759000 02760000 05705 02761000 05706 02762000 05707 02763000 05710 02764000 05711 02765000 05712 02766000 05713 02767000 05714 02768000 05715 02769000 05716 02770000 05717 02771000 05720 02772000 05721 02773000 05722 02774000 02775000 05723 02776000 05724 02777000 05725 02778000 05726 02779000 02780000 05727 02781000 05730 02782000 05731 02783000 05732 02784000 05733 02785000 05734 02786000 05735 02787000 02788000 05736 REVERSE COMPILER MAIN SECTION 001770 172003 000106 042114 000063 042114 000177 170140 031711 020133 172010 031712 000103 042114 045711 045712 066700 066727 ROUTF ROUTF 170040 RF 2 172021 004103 035712 031713 075441 RF 3 060103 011712 066721 042114 000177 031712 045713 066712 001712 072003 042114 001711 172006 075441 060103 042114 045711 066731 066440 LDA SAP LDA JSM LDA JSM ARI + 3 B 55 RCOUT B 145 RCOUT LDA PO CMA STA ADA SAP STA LDA JSM ISZ ISZ JMP JMP TCA SAP LDB STB STA DRS IOR CPA JMP JSM LDA STA ISZ JMP LDA RZA LDA JSM RF 4 LDA SAP RF 5 DRS IOR JSM ISZ JMP RF 6 JMP TEST EXPONENT SIGN OUTPUT '-' OUTPUT 'EEX' FALL THROUGH TO F-SECTION TI P 12 RF 2 T 2 B 60 RCOUT TI T 2 -3 RF 4 RF 4 B 60 T 2 T 3 B 60 T 2 + 4 RCOUT PO T 2 T 3 RF 3 T 2 + 3 B 56 RCOUT TI RF 6 B 60 RCOUT TI RF 5 RC 3 SAVE K = I'S COMPLEMENT OF EXP OUTPUT '0 ' TO LEFT OF DECIMAL SET INSIGNIFICANT-ZERO FLAG DIGIT COUNTER SHIFT ARI RIGHT CONVERT TO ASCII DON'T OUTPUT INSIGNIFICANT ZEROS RESET INSIGNIFICANT-ZERO FLAG OUTPUT ' ' RECALL K DONE SHIFTARI RIGHT CONVERT TO ASCII TEST FOR FINAL MSD 126 126 1,568,094 REVERSE COMPILER MAIN SECTION 02790000 02791000 02792000 02793000 05737 02794000 05740 02795000 05741 02796000 05742 02797000 05743 02798000 05744 02799000 05745 02800000 05746 02801000 05747 02802000 05750 02803000 05751 02804000 05752 02805000 05753 SECTION TO OUTPUT AN INTEGER 004016 INTOT 035270 044016 074560 170607 074561 024000 140563 000127 004345 071403 173201 066644 LDB STB ISZ WBC SAL WBC ADB JSM LDA LDB XFR SOC JMP C SAVEC C A,I 8 B,I A AFLTP,I ADR 2 ADRI 4 +l,C RN 3 A SAVE C GET THE INTEGER CONVERT TO FLOATING MOVE TO ARI 127 Page 77 127 1,568,094 REVERSE COMPILER MAIN SECTION 02807000 02808000 02809000 02810000 02811000 02812000 02813000 02814000 02815000 05754 050045 02816000 05755 076002 02817000 05756 066114 02818000 02819000 05757 031711 02820000 05760 000016 02821000 05761 031270 02822000 05762 034016 02823000 05763 074760 02824000 05764 042114 02825000 05765 055711 02826000 05766 066763 02827000 02828000 05767 005270 02829000 05770 034016 02830000 05771 170201 02832000 02833000 02834000 02835000 05772 140405 02836000 05773 031060 02837000 05774 001245 02838000 05775 004320 02839000 05776 140477 02840000 05777 164407 02842000 02843000 02844000 02845000 00356 02846000 00356 00526602847000 00357 005775 02848000 02849000 00332 02850000 00332 015477 02851000 02852000 SUBROUTINE TO OUTPUT NORMAL CODES ON ENTRY:

A-REGISTER ='GUIDE' INFORMATION B-REGISTER ='ASCII' INFORMATION NMOUT AND B 377 RZB NMI JMP RCOUT NM 1 NM 2 STA LDA STA STB WBC JSM DSZ JMP LDB STB RET Tl C SAVEC C A,D RCOUT Tl NM 2 SAVEC C SKIP IF MNEMONIC OUTPUT DIRECT CODE INITIALIZE CHARACTER COUNTER SAVE C MOVE A CHARACTER RESTORE C MISSING ROM E 20 DSRMI JSM ASC LDA LDB JSM JMP AERR 2,I 1,20 CODE AIOLM ABTDA,I AEREX,I ERROR, MISSING ROM INCLUDE ROM'S ID FILL IN BASE-PAGE LINKS ORG DEF DEF ARCLR RCLR DSRMI ORG ARTBL DEF RTBL END END OF PASS 2 NO ERRORS DETECTED BASE-PAGE READ-WRITE-MEMORY 00003000 76550 00004000 ORG 76550 B UNL Page 78 Page 79 128 128 129 Page 80 02001000 02002000 02003000 02004000 06012 02005000 02006000 06012 140404 02007000 06013 030071 02008000 06014 177737 02010000 02011000 02012000 02013000 02014000 02015000 02016000 02017000 02018000 02019000 02020000 06015 072413 02021000 06016 031712 02022000 06017 172012 02023000 02024000 06020 100001 02025000 06021 170507 02026000 06022 050053 02027000 06023 170040 02028000 06024 072414 02029000 06025 024000 02030000 06026 045712 02031000 06027 067020 02032000 02033000 06030 170201 02034000 02035000 06031 100001 02036000 06032 050053 02037000 06033 072405 02038000 06034 024000 02039000 06035 055712 02040000 06036 067031 02041000 02042000 06037 170201 02043000 02044000 06040 064722 02046000 02047000 02048000 02049000 06041 000001 02050000 06042 170140 02051000 06043 020330 02052000 06044 172002 02053000 06045 170201 02054000 06046 170202 INTE 129 1,568,094 INTERPRETER RPRETER ORG 6012 B E 9 JSM AERRI,I ERROR, WRONG CONTROL STATE ASC 1,09 M 33 DEC -33 SUBROUTINE TO SKIP N LINES ON ENTRY: A = + SKIP DISTANCE B = STARTING ADDRESS ON EXIT: B = ADDRESS OF TARGET LINE TEMPORARIES USED: T 2 RELGO SZA XIT SKIP IF NOTHING TO DO STA T 2 SAP FSKIP WHICH WAY? BSKIP LDA B,I BACKWARDIFSAR 8 BACKWARD LINK AND B 177 TCA SZA E 31 ERROR IF ZERO ADB A ISZ T 2 JMP BSKIP XIT RET I DONE FSKIP LDA B,I FORWARD IF + AND B 177 FORWARD LINK SZA E 31 ADB A DSZ T 2 JMP FSKIP RET I DONE E 31 JMP ERLNF ERROR, NONEXISTENT LINE SUBROUTINE TO DETERMINE WHETHER B IS IN COMPILE BUFFER FINDB FINDB LDA B CMA ADA ABNRY SAP + 2 RET 1 RET 2 ABNRY-B I YES NO 1,568,094 INTERPRETER 02056000 02057000 EXEC 1 02058000 02059000 ON EI 02060000 02061000 02062000 ON E X 02063000 02064000 02065000 TEMP 02066000 02067000 06047 000144 PHVAR 02068000 06050 004267 02069000 06051 067054 02070000 02071000 06052 000140 PHCON 02072000 06053 004266 02073000 02074000 06054 031711 OVTST 02075000 06055 035712 02076000 06056 170040 02077000 06057 005310 02078000 06060 174140 02079000 06061 021263 02080000 06062 024000 02081000 06063 176003 02082000 06064 140404 E 40 02083000 06065 032060 02084000 02085000 06066 031263 02086000 06067 020257 02087000 06070 030017 02088000 02089000 06071 005712 02090000 06072 070551 02091000 06073 005711 02092000 06074 070551 02093000 02094000 06075 004017 02095000 06076 170201 UTION STACK OVERFLOW TEST ITRY: A = # OF WORDS NEEDED B = 'WHAT' IT: A Pl = UPDATED B = D = POINTS TO 'LENGTH' ORARIES USED: T 1,T 2 LDA LDB JMP P 3 FVRWM + 3 LDA P 7 LDB FPTMP STA STB TCA LDB CMB ADA ADB SBP JSM ASC Tl T 2 RMAX A Pl A + 3 AFRRI,I 1,40 SPECIAL ENTRY TO STACK VARIABLE SPECIAL ENTRY TO STACK CONSTANT API-(RMAX+I) ERROR, STACK OVERFLOW STA A Pl ADA Ml STA D LDB T 2 PWD Bl LDB Ti PWD B,I LDB D RET 1 FILL IN 'WHAT' FILL IN 'LENGTH' Page 81 131 1,568,094 INTERPRETER 02097000 02098000 02099000 02100000 02101000 02102000 02103000 02104000 02105000 02106000 06077 02107000 06100 02108000 06101 02109000 06102 02110000 06103 02111000 06104 02112000 02113000 06105 02114000 06106 02115000 06107 02116000 06110 02117000 06111 02118000 06112 02119000 06113 02120000 06114 02121000 06115 02122000 06116 02123000 06117 02124000 06120 02125000 06121 02126000 06122 02127000 06123 02128000 06124 02129000 06125 02130000 06126 02131000 06127 02132000 06130 02133000 06131 02134000 06132 02135000 02136000 06133 ASSIGNMENT TRACE ON ENTRY: A-REGISTER = SOURCE ADDRESS B-REGISTER= DESTINATION ADDRESS TEMPORARIES USED: T Il,T 2,T 3 T 4,T 5,T 6,T 7 T 8,T 9,T 1 I,TI 2 PLUS THOSE USED BY ACLBI,ABTDA,ATCHR,APSTR, APNUMAPNMR 071403 ASTRC 140551 001267 172031 000016 031270 005762 140377 074550 000315 004017 140362 004000 000314 030017 000305 140502 000325 030017 000315 031727 140462 005723 140506 000000 140445 066444 170201 AS 170201 AS I XFR JSM LDA SAP LDA STA 4 AFLTC,I TRACE ASI C SAVEC LDB MRWI+ 4 JSM AGNAM,I LDA B 75 PBD A,l LDA AIBFM LDB D JSM AFBAD,I LDB A LDA AIBFX STA D LDA ASTAK JSM ATCHR,I LDA ACSTF STA D LDA AIBFM STA T 15 JSM APSTR,I LDB Tl I JSM APNUM,I NOP JSM APNMR,I JMP FTR 2 + 1 TRANSFER THE NUMBER CHECK IF IN USER RANGE TEST TRACE FLAG SKIP IF NO TRACING REQUIRED SAVE C (WAS SAVED BY AFLTCI) GET VARIABLE NAME OUTPUT = GET CHARACTER COUNT PRINT THE VALUE ASSIGNED RET I 131 Page 82 1,568,094 INTERPRETER IF EXECUTION JSM ADB LDA RZA AGTAD,I Pl B,I MLOOP GET OPERAND ADDRESS LOOK AT MANTISSA TRUE' 02146000 02147000 EO 02148000 02149000 06140 005264 XEOI 02150000 06141 176202 02151000 06142 067220 02152000 02153000 06143 001261 XEO 02154000 06144 031263 02155000 02156000 06145 034016 XEX 02157000 06146 074560 02158000 06147 050053 02159000 06150 072431 02160000 06151 100001 02161000 06152 051314 02162000 06153 050052 02163000 06154 072026 02164000 06155 002155 02165000 06156 061347 02166000 06157 072023 02167000 02168000 06160 034016 XE 2 02169000 06161 074560 02170000 06162 050053 02171000 06163 072416 02172000 02173000 06164 035265 02174000 06165 020001 02175000 06166 031264 02176000 02177000 06167 101265 LNTI 02178000 06170 051314 02179000 06171 031267 L EXECUTION LDB SBP JMP LEND + 2,C XCGSB GO COMPLETE GOSUB LDA AP 3 STA A Pl RC 02180000 06172 172004 02181000 06173 067207 STB WBC AND SZA LDA AND AND RZA LDA IOR RZA STB WBC AND SZA STB ADA STA LDA AND STA C A,I B 177 XE 3 B,I TE B 200 XE 4 XCOMM INTSR XE 4 C A,I B 177 XE 3 HERE B LEND HERE,I TE TRACE GET WLENGTH GET STOPBIT "CONTINUE" ENTERS HERE GET WLENGTH OF LINE SET CURRENT LINE SET NEXT LINE SAVE CURRENT LINE TRACE INFORMATION SAP MLOOP JMP XE 6 GO TRACE LINE# Page 83 02138000 02139000 02140000 02141000 02142000 02143000 02144000 06134 06135 06136 06137 140611 XIF 024254 100001 072037 132 132 LN 1,568,094 INTERPRETER 02183000 02184000 EXEC 02185000 02186000 06174 001261 XSEMI 02187000 06175 031263 02188000 02189000 MAIN L( 02190000 02191000 06176 074560 MLOOP 02192000 06177 022475 02193000 06200 164000 02195000 02196000 RE 02197000 02198000 06201 000117 XE 3 02199000 06202 040744 XE 4 02200000 06203 014334 02201000 06204 005317 02202000 06205 035266 02203000 06206 170201 02205000 02206000 LI 1 02207000 02208000 06207 000016 XE 6 02209000 06210 031270 02210000 02211000 06211 005265 02212000 06212 140523 02213000 06213 140476 02214000 06214 000077 02215000 06215 074550 02216000 06216 042443 02217000 06217 067176 CUTION LDA AP 3 STA A Pl OOP WBC ADA JMP CLEAR TOS Al ABTBL AJ GET BYTE ADD JUMP TABLE ORIGIN ETURN TO CALLER LDA JSM CPB LDB STB RET B 40 SXCMM ADPO SWHRE WHERE GO SET BITS IN XCOMM NE NUMBER TRACE LDA C STA SAVEC SAVE C LDB JSM JSM LDA PBD JSM JMP HERE AGLNO,I ATLNI,I B 72 A,I FTR 2 MLOOP GET LINE # OF CURRENT LINE PUT LINE # INTO I/O BUFFER FOLLOWED BY -:"

GO PRINT I/O BUFFER 133 Page 84 133 1,568,094 INTERPRETER 02219000 02220000 COMI 02221000 02222000 06220 035176 XCGSB 02223000 02224000 06221 001257 02225000 06222 010254 02226000 06223 043041 02227000 06224 067227 02228000 06225 140516 02229000 06226 140425 02230000 02231000 06227 005261 XCG O 02232000 06230 035263 02233000 02234000 06231 000150 02235000 06232 140521 02236000 06233 031470 E 38 02237000 02238000 06234 004257 02239000 06235 070551 02240000 06236 001257 02241000 06237 073014 02242000 06240 005716 02243000 06241 043041 02244000 06242 067251 02245000 06243 001257 02246000 06244 010254 02247000 06245 000145 02248000 06246 010144 02249000 06247 000141 02250000 06250 031257 02251000 06251 004334 02252000 06252 067257 02253000 02254000 06253 005265 XCGI 02255000 06254 100001 02256000 06255 050053 02257000 06256 024000 02258000 06257 070551 XCG 2 02259000 02260000 06260 005716 02261000 06261 067145 PLETE GOSUB STB T 6 LDA CPA JSM JMP JSM JSM SAVE JUMP ADDRESS CSTAT Pl FINDB XCG O AREST,I ACNIN,I IN COMPILE BUFFER? YES UNSTACK INITIALIZE FOR CONTINUE LDB AP 3 STB A Pl LDA JSM ASC LDB PWD LDA SLA LDB JSM JMP LDA CPA LDA CPA LDA STA LDB JMP LDB LDA AND ADB PWD M 4 ASTKG,I 1,38 Ml B,I CSTAT XCG 1 T 6 FINDB + 7 CSTAT Pl P 2 P 3 P 6 CSTAT ADPO XCG 2 HERE B,I B 177 A B,I NEED 4 WORDS GO STACK OLD AP 3,A Pl ERROR, GOSUBS NESTED TOO DEEP SAVE NULL PARM LIST ON TOS-2 SKIP IF EXECUTING FROM USER PROGRAM IN COMPILE BUFFER? YES UPDATE CSTAT IF NECESSARY FAKE RETURN ADDRESS SAVE RETURN ADDRESS ON TOS-3 LDB T 6 RECALL JUMP ADDRESS JMP XEX 134 Page 85 134 13 1,6,9 13 Page 86 02263000 02264000 RET E 02265000 02266000 06262 005263 XRETN 02267000 06263 024254 02268000 06264 035711 02269000 02270000 06265 005261 02271000 06266 034017 02272000 06267 070571 02273000 06270 014257 02274000 06271 067310 02275000 02276000 06272 025300 02277000 06273 036261 02278000 06274 070571 02279000 06275 101711 02280000 06276 170040 02281000 06277 031712 02282000 06300 024000 02283000 06301 025300 02284000 06302 035263 0228500 02286000 06303 070570 02287000 06304 172402 02288000 06305 165527 02289000 02290000 06306 070571 02291000 06307 067143 02292000 02293000 06310 140404 E 28 02294000 06311 031070 INTERPRETER XECUTION LDB A Pl ADB Pl STB T I LDB AP 3 STB D WWD B,1 CPB M I JMP E 28 ADB AP 2 STB AP 3 WWD B,1 LDA T Il TCA STA T 2 ADB A ADB AP 2 STB A Pl WWDA,I SAM + 2 JMP APRET I WWD B,I JMP XE O JSM AERRI,I ASC 1,28 SAVE POINTER RETRIEVE AP 3 LINK ERROR, NO MATCHING GSB RESTORE OLD AP 3 GET LENGTH OF RETURN PARAMETER UPDATED A Pl UDF CALL? NO YES LINK TO UDF ROM GET RETURN ADDRESS ERROR, RET WITH NO MATCHING GSB 1,568,094 136 Page 87 02296000 02297000 STACI 02298000 02299000 06312 074560 NWEXP 02300000 06313 170607 02301000 06314 170401 02302000 06315 067317 02303000 06316 000177 NNEXP 02304000 06317 031713 02305000 06320 043052 02306000 06321 004144 02307000 06322 070551 02308000 06323 020143 02309000 06324 071603 02310000 06325 001713 02311000 06326 070550 02312000 06327 074560 NNI 02313000 06330 010121 02314000 06331 067176 02315000 06332 074550 02316000 06333 067327 1,568,094 INTERPRETER K NUMBER WBC SAL AAR JMP LDA STA JSM LDB PWD ADA CLR LDA PWD WBC CPA JMP PBD JMP A,I 8 2 + 2 PO T 3 PHCON P 3 B,I P 4 4 T 3 A,I A,I B 34 MLOOP A,I NNI NUMBER WITH EXPONENT NUMBER WITHOUT EXPONENT WHERE = RELATIVE 3 SET EXPONENT GET DIGIT PAIR STORE IN VALUE 02318000 02319000 02320000 02321000 06334 02322000 06335 02323000 06336 02324000 06337 02325000 06340 02326000 06341 02327000 06342 02329000 02330000 02331000 02332000 06343 02333000 06344 02334000 06345 02335000 06346 STACK Pl 043052 XPIE 000144 070550 024145 000173 071403 067176 JSM LDA PWD ADB LDA XFR JMP PHCON P 3 A,I P 2 APIE 4 MLOOP WHERE = RELATIVE 3 TRANSFER 'PI' TO STACK STACK ENR 043047 XENR 004341 070551 067176 JSM LDB PWD JMP PHVAR AENR B,I MLOOP WHERE = IN ENTER REGISTER 136 137 pme 88 02337000 0338000 STACI 02339000 02340000 06347 043047 XARES 02341000 06350 004342 02342000 06351 070551 02343000 06352 067176 1,568094 INTERPRETER K USER RESULT ADDRESS JSM PHVAR LDB AURES PWD B,I JMP MLOOP 137 WHERE = IN USER RESULT REGISTER 02345000 02346000 STAC 02347000 02348000 06353 043052 XVRES 02349000 06354 000144 02350000 06355 070550 02351000 06356 024145 02352000 06357 000342 02353000 06360 071403 02354000 06361 067176 K USER RESULT VALUE JSM PHCON LDA P 3 PWD A,I ADB P 2 LDA AURES XFR 4 JMP MLOOP WHERE= RELATIVE 3 TRANSFER VALUE TO STACK 02356000 02357000 STAC 02358000 02359000 06362 074560 XSTRG 360000 06363 031713 02361000 06364 020254 0262000 06365 170500 02363000 06366 020143 02364000 06367 004264 02365000 06370 043054 02366000 06371 004265 02367000 06372 070551 02368000 06373 005713 023690100 06374 070551 02370000 06375 174040 02371000 06376 067401 02372000 02373000 06377 074560 XSTRI 02374000 06400 074550 02375000 06401 076176 XSTR 2 02376000 06402 067176 K STRING WBC STA ADA SAR ADA LDB JSM LDB PWD LDB PWD TCB JMP WBC PBD RIB JMP A,I T 3 Pl l Pl P 4 STTMP OVTST STWHR B,I T 3 B,I XSTR 2 A,l A,I XSTRI MLOOP GET CHARACTER COUNT LENGTH WHAT = STRING/CONSTANT WHERE = RELATIVE 4 (CHARACTER) BYTE COUNT MOVE BYTES 1,568,094 Page 89 02378000 02379000 02380000 02381000 06403 02382000 06404 02383000 06405 02384000 06406 02385000 06407 02386000 02387000 06410 02388000 06411 02389000 06412 02390000 02391000 06413 02392000 06414 02393000 06415 02394000 06416 INTERPRETER STACK SUBSCRIPTED VARIABLE 023465 XSSVR 100000 072003 140404 E 27 031067 015263 014171 067470 104000 035714 020254 031271 02395000 06417 140610 02396000 06420 010001 02397000 06421 067423 02398000 06422 064733 02399000 06423 011714 02400000 06424 067427 02401000 06425 140404 E 25 02402000 06426 031065 02403000 02404000 06427 000177 02405000 06430 031715 NEXTI 02406000 06431 140612 02407000 06432 125271 02408000 06433 045271 02409000 06434 176432 02410000 06435 035716 02411000 06436 101271 02412000 06437 045271 02413000 06440 174140 02414000 06441 024000 02415000 06442 176424 02416000 02417000 06443 005715 02418000 06444 075617 02419000 06445 021716 02420000 06446 173420 02421000 06447 055714 02422000 06450 067430 ADA LDA RZA JSM ASC LDB CPB JMP LDB STB ADA STA JSM CPA JMP JMP CPA JMP JSM ASC SSRK A,I + 3 AERR 1,I 1,27 API,I ARRAY X 51 A,I T 4 Pl BASE ACOUN,I B + 2 E 32 T 4 + 3 AERRI,I 1,25 LDA PO STA T 5 JSM AGTIN,I ADB BASE,I ISZ BASE SBM E 26 STB T 6 LDA BASE,I ISZ BASE CMB ADB A SBM E 26 LDB T 5 MPY ADA T 6 SOS E 26 DSZ T 4 JMP NEXTI CALCULATE INDEX INTO DATAB ERROR, UNDEFINED ARRAY LOOK AT FIRST OPERAND JUMP IF 'ENTIRE ARRAY' SAVE #DIMS SAVE INDEX INTO DOPE VECTOR # OF NUMERIC PARAMETERS ERROR, DIMENSIONS DISAGREE VARPART GET SUBSCRIPT ADD UlIl SKIP IF OUT OF BOUNDS SAVE Q GET DlI 1 Dll-Q-1 RECALL VARPART VARPARTD lIl+Q ANY MORE PLANES? YES 138 138 139 Page 90 02424000 06451 170601 02425000 06452 170040 02426000 06453 121271 02427000 06454 055263 02428000 06455 131263 02429000 06456 000144 02430000 06457 055263 02431000 06460 131263 02432000 06461 000267 02433000 06462 055263 02434000 06463 131263 02435000 06464 067176 02436000 02437000 06465 167547 SSRK 02438000 02439000 06466 140404 E 26 02440000 06467 031066 1.568,094 INTERPRETER SAL 2 TCA ADA BASE,I DSZ A Pl STA API,I LDA P 3 DSZ A Pl STA API,I LDA FVRWM DSZ A Pl STA API,I JMP MLOOP 4 WDS/REGISTER ADD CONSPART WHERE = IN VALUE TABLE LENGTH = 3 WHAT = FULL/VARIABLE ABS DATAB-1418 + 1000001 B IBTBL JSM AERRI,I ASC 1,26 ERROR, OUT OF BOUNDS 02442000 06470 104000 XSI 02443000 06471 174600 02444000 06472 020254 02445000 06473 020001 02446000 06474 005263 02447000 06475 024145 02448000 06476 104001 02449000 06477 076402 02450000 06500 064733 02451000 02452000 06501 005263 02453000 06502 024145 02454000 06503 071401 02455000 06504 100001 02456000 06505 020144 02457000 06506 130001 02458000 06507 067176 02460000 02461000 STAC 02462000 02463000 06510 023521 XSVAR 02464000 06511 031271 02465000 06512 105271 02466000 06513 014177 02467000 06514 042033 02468000 06515 043047 02469000 06516 105271 02470000 06517 070551 02471000 06520 067176 02472000 02473000 06521 167555 SVRK LDB SBL ADA ADA LDB ADB LDB SZB JMP LDB ADB XFR LDA ADA STA JMP A,I 1 Pl B A Pl P 2 B,l + 2 E 32 A Pl P 2 B,1 P 3 B,l MLOOP IT WAS 'ENTIRE ARRAY' A = LOCATION OF ORGANIZATION DATA TRANSFER 'ENTIRE ARRAY' INFORMATION POINT TO END OF AREA K SIMPLE VARIABLE ADA STA LDB CPB JSM JSM LDB PWD JMP SVRK BASE BASE,I PO ALLO 4 PHVAR BASE I B,I MLOOP CALCULATE INDEX INTO DVTAB RECALL DVTAB ENTRY CALL ALLOCATOR IF UNALLOCATED WHERE = IN VALUE TABLE ABS DVTAB-1018 + 100000 B-IBTBL 139 Page 91 02475000 02476000 02477000 02478000 06522 140524 02479000 06523 067565 02480000 02481000 06524 140531 02482000 06525 067565 02483000 02484000 06526 140543 02485000 06527 067565 02487000 02488000 02489000 02490000 06530 140544 02491000 06531 067565 02492000 02493000 06532 140545 02494000 06533 067565 02495000 02496000 06534 140540 02497000 06535 067565 02498000 02499000 06536 140541 0250000 06537 067565 02501000 02502000 06540 140542 02503000 06541 067565 02504000 02505000 06542 140533 02506000 06543 067565 02507000 02508000 06544 140536 02509000 06545 067565 02510000 0251100006546 140534 02512000 06547 067565 02513000 02514000 06550 140532 02515000 06551 067565 02516000 02517000 06552 140535 02518000 06553 067565 02519000 02520000 06554 140537 02521000 06555 067565 02522000 02523000 06556 140530 02524000 06557 067565 02525000 02526000 06560 140526 02527000 06561 067565 02528000 02529000 06562 140527 02530000 06563 067565 1,568,094 INTERPRETER UNARY OPERATORS XUNM JSM AUNM,I JMP RAPUP XSQR JSM ASQRJ.

JMP RAPUP XNOT JSM ANOT,I JMP RAPUP WRAPUP WRAPUP WRAPUP BINARY OPERATORS XPRND XDRND XAND XLOR XXOR XGTN XEQL XLTN XGEQ XLEQ XNEQ XDIV XSUB XMPY JSM JMP JSM JMP JSM JMP JSM JMP JSM i MP JSM JMP JSM i MP JSM JMP JSM JMP JSM JMP JSM JMP JSM JMP JSM i MP JSM JMP APRND,I RAPUP WRAPUP ADRND,I RAPUP WRAP UP AAND,I RAPUP WRAP UP AOR,I RAPUP WRAP UP AXOR,I RAPUP WRAP UP AVT,I RAPUP WRAPUP AEQ,I RAPUP WRAP UP ALT,I RAPUP WRAP UP AGE,I RAPUP WRAP UP ALE,I RAPUP WRAPUP ANE,I RAPUP WRAP UP ADIV,I RAPUP WRAP UP ASUB,I RAPUP WRAP UP AMUL,I RAPUP WRAP UP 1,568,094 Page 92 02531000 02532000 06564 140525 XADD 02533000 02534000 02535000 02536000 WRAI 02537000 02538000 06565 043052 RAPUP 02539000 06566 000144 02540000 06567 070550 0 Z 54100 02542000 06570 001752 02543000 06571 050164 02544000 06572 010263 02545000 06573 143601 02546000 06574 004017 02547000 06575 024254 02548000 06576 000340 02549000 06577 071403 02550000 06600 067176 02551000 02552000 06601 014000 E 77 02554000 02555000 02556000 02557000 02558000 02559000 02560000 02561000 02562000 02563000 02564000 02565000 02566000 02567000 02568000 02569000 02570000 02571000 02572000 02573000 02574000 02575000 02576000 02577000 INTERPRETER JSM AADD I FALL THRU TO WRAP UP P UP MATH OPERATIONS JSM LDA PWD PHCON P 3 A,I LDA RES AND M 64 CPA FLAG JSM E 77,1 LDB D ADB Pl LDA ARES XFR 4 JMP MLOOP WHERE = RELATIVE 3 TEST FOR EXPONENT = -512 DEF 14000 B NUMERIC ASSIGNMENT 06602 06603 06604 06605 06606 06607 06610 06611 06612 040615 XASN 031263 035712 101276 170513 010136 067613 140404 E 33 031463 06613 101263 06614 050221 06615 010175 06616 067620 06617 067611 06620 040615 06621 000001 06622 005712 06623 043077 06624 067176 JSM STA STB LDA SAR CPA i MP JSM ASC LDA AND CPA JMP JMP JSM LDA LDB JSM JMP ABSAD A Pl T 2 SAVEB,I 12 P 9 + 3 AERRI,I 1,33 API,1 B 70 K BIOK -v 2 E 33 ABSAD B T 2 ASTRC MLOOP UPDATE AP I "TO" ADDRESS ERROR STORE INTO ILLEGAL OPERAND LOOK AT "FROM" TYPE ERROR, ILLEGAL DATA TYPE GET "FROM" ADDRESS GO TRACE ASSIGNMENT 141 141 1,568,094 Page 93 02579000 02580000 EXEC 02581000 02582000 06625 074560 DIMOP 02583000 06626 010141 02584000 06627 067765 02585000 02586000 06630 020166 02587000 06631 172011 02588000 02589000 SECTI 02590000 02591000 06632 020343 02592000 06633 031271 02593000 06634 105271 02594000 06635 076403 02595000 06636 140404 E 23 02596000 06637 031063 02597000 02598000 06640 042033 02599000 06641 067760 02600000 02601000 SECTl 02602000 02603000 06642 020277 DII 02604000 06643 031271 02605000 06644 105271 02606000 06645 076403 02607000 06646 140404 E 24 02608000 06647 031064 02609000 02610000 06650 000254 02611000 06651 031715 02612000 06652 031716 02613000 06653 004305 02614000 06654 034017 02615000 02616000 06655 101263 D 12 02617000 06656 031717 02618000 06657 140612 02619000 06660 035720 02620000 06661 001717 02621000 06662 170604 02622000 06663 172403 02623000 06664 004257 02624000 06665 067670 02625000 06666 140612 02626000 06667 174040 02627000 06670 070551 02628000 06671 025720 02629000 06672 024254 02630000 06673 070551 02631000 06674 035720 INTERPRETER UTE DIM OPERATOR WBC A,I READ NEXT BYTE CPA STRID JMP DMSTR GO DIMSTRING ADA M 97 SAP DI 1 SKIP IF ARRAY VARIABLE ON FOR SIMPLE VARIABLE ADA STA LDB SZB JSM ASC SVRE CALCULATE INDEX INTO DVTAB BASE BASE,I RECALL DVTAB ENTRY + 3 AERRI,I ERROR, SIMPLE VARIABLE 1,23 JSM AL LO 4 CALL ALLOCATOR IF UNALLOCATED JMP CLNUP ION FOR ARRAY VARIABLE ADA STA LDB SZB JSM ADATB BASE BASE,I + 3 AERRI,I ASC 1,24 LDA Pl STA T 5 STA T 6 LDB ASTAK STB D LDA API,I STA T 7 JSM AGTIN,I STB T 8 LDA T 7 SAL 5 SAM + 3 LDB M 1 JMP + 3 JSM AGTIN,I TCB PWD B,I ADB T 8 ADB Pl PWD B,I STB T 8 CALCULATE INDEX INTO DATAB RECALL DATAB ENTRY ERROR, ARRAY ALREADY DIMENSIONED S #DIMS INDEX INTO CSTAK (WORK AREA) LINK BIT INFORMATION GET SUBSCRIPT U RECALL LINK BIT INFORMATION SKIP IF LOWER BOUND SUPPLIED ELSE USE DEFAULT GET SUBSCRIPT -L SAVE UlIl U L+ 1 SAVE DlIl D 142 142 1,568,094 INTERPRETER 02633000 06675 001720 02634000 06676 020257 02635000 06677 173402 02636000 06700 172002 02637000 06701 067773 E 22 A 02638000 02639000 06702 001715 02640000 06703 075617 02641000 06704 031715 02642000 06705 172421 02643000 06706 076020 02644000 02645000 06707 001717 02646000 06710 170603 02647000 06711 172003 02648000 06712 045716 02649000 06713 067655 02650000 02651000 06714 001716 02652000 06715 170600 02653000 06716 020144 02654000 06717 031717 02655000 02656000 06720 001715 02657000 06721 004143 02658000 06722 075617 02659000 06723 031715 02660000 06724 172402 02661000 06725 076403 02662000 06726 140404 E 39 B 02663000 06727 031471 02664000 02665000 06730 021717 02666000 06731 170040 02667000 06732 140370 02668000 06733 030017 02669000 06734 131271 02670000 06735 005716 02671000 06736 134000 02672000 06737 021717 02673000 06740 031717 02674000 06741 031312 02675000 06742 174600 02676000 06743 174040 02677000 06744 035714 02678000 06745 004324 02679000 06746 100001 D 13 02680000 06747 070550 02681000 06750 045714 02682000 06751 076175 02683000 02684000 06752 001717 02685000 06753 021715 02686000 06754 020150 02687000 06755 070550 02688000 06756 001715 LDA ADA SOS SAP JMP T 8 Ml + 2 + 2 E 22 LDA T 5 MPY STA T 5 SAM E 39 B RZB E 39 B LDA T 7 SAL 4 SAP + 3 ISZ T 6 JMP D 12 LDA T 6 SAL I ADA P 3 STA T 7 LDA LDB MPY STA SAM SZB JSM ASC T 5 P 4 T 5 + 2 + 3 AERRI,1 1,39 ADA T 7 TCA JSM ALLOC,I STA D STA BASE,I LDB T 6 STB A,I ADA T 7 STA T 7 STA VT 2 SBL I TCB STB T 4 LDB ASTKI LDA B,l PWD A,l ISZ T 4 RIB D 13 LDA T 7 ADA T 5 ADA M 4 PWD A,l LDA T 5 RECALL D U-L ERROR, ILLEGAL DIM SPEC RECALL S S=SD RECALL LINK BIT INFORMATION SKIP IF END OF SPECS INCREMENT #DIMS 2 #DIMS+ 3 SIZE OF DOPE VECTOR SIZE OF VALUE AREA ERROR, INSUFFICIENT MEMORY REQUEST THE SPACE SAVE START OF AREA SET DATAB ENTRY #DIMS START OF VALUE AREA UPDATE VT 2 COUNTER FOR TRANSFER RECALL ADDRESS OF WORK AREA MOVE A U-D PAIR CONSPA RT SIZE OF VALUE AREA 143 Page 94 143 1,568,094 INTERPRETER 02689000 06757 070550 02690000 02691000 06760 074560 02692000 06761 010107 02693000 06762 067764 02694000 06763 074760 02695000 06764 067174 CLNUP )CLNUP PWD A,I WBC CPA JMP WBC JMP A,I B 54 + 2 A,D XSEMI LOOK AT NEXT BYTE IGNORE,1 CLEAR TOS AND CONTINUE 02697000 02698000 02699000 02700000 06765 020326 02701000 06766 104000 02702000 06767 076404 02703000 06770 000056 02704000 06771 104001 02705000 06772 164001 02706000 02707000 06773 140404 02708000 06774 031062 LINK TO DIM STRING DMSTR ADA LDB SZB LDA LDB JMP STRK A,I E 22 B 174 B,I B,I JSM AERRI,I ASC 1,22 ERROR, ROM MISSING ERROR, NO STRING ROM 144 Page 95 144 1,568,094 INTERPRETER JMP 06775 007014 XJMP 06776 040740 06777 140612 07000 000001 07001 005265 07002 043015 07003 001264 07004 172402 07005 067143 07006 067220 LDB JSM JSM LDA LDB JSM LDA SAM JMP JMP M 33 CLXCM AGTIN,I B HERE RELGO LEND + 2 XE O XCGSB CLEAR XCOMM BIT 5 GET INTEGER PARAMETER EXECUTE SKIP TEST FOR IMMEDIATELY PREVIOUS GSB 02724000 02725000 FLAG 02726000 02727000 07007 140612 XFLG 02728000 07010 176413 02729000 07011 024160 02730000 07012 176011 02731000 07013 000340 02732000 07014 071603 02733000 07015 042405 02734000 07016 051506 02735000 07017 072403 02736000 07020 000175 02737000 07021 031753 02738000 07022 067565 02739000 02740000 07023 140404 E 35 02741000 07024 031465 JSM SBM ADB SBP LDA CLR JSM AND SZA LDA STA JMP AGTIN,I E 35 M 16 E 35 ARES 4 EXEB FLAGS + 3 B 10 K RES + 1 RAPUP JSM AERRI,I ASC 1,35 GET INTEGER PARAMETER SKIP IF #< 0 SKIP IF#> 15 CLEAR 'RES' TEST THE DESIGNATED FLAG RES = OR I ERROR, ILLEGAL FLAG REFERENCE 02743000 02744000 02745000 02746000 07025 02747000 07026 02748000 07027 02749000 02750000 07030 02751000 07031 02752000 07032 SKIP LABEL SKIP LABEL 074561 XLABL 174040 066031 074560 076177 XLI 067176 WBC B,I TCB JMP XLI WBC RIB JMP A,I -1 MLOOP GET LENGTH OF STRING SKIP BYTES OF STRING ALLOCATE SIMPLE VARIABLE, FULL PRECISION ALLO 4 140370 131271 170201 LDA M 4 JSM ALLOC,I MOVE MEMORY UP STA BASE,I UPDATE DVTAB RET I Page 96 02710000 02711000 02712000 02713000 02714000 02715000 02716000 02717000 02718000 02719000 02720000 02721000 02722000 02754000 02755000 02756000 02757000 02758000 02759000 02760000 07033 07034 07035 07036 1,568,094 INTERPRETER 02762000 02763000 GTO A 02764000 02765000 07037 000263 XAGSB 02766000 07040 066042 02767000 07041 000177 XAGTO 02768000 07042 031715 02769000 07043 000257 02770000 07044 031716 02771000 07045 005307 02772000 07046 066063 02773000 02774000 07047 000263 XPGSB 02775000 07050 066052 02776000 07051 000177 XPGTO 02777000 07052 031715 02778000 07053 000257 02779000 07054 066061 02780000 02781000 07055 000263 XMGSB 02782000 07056 066060 02783000 07057 000177 XMGTO 02784000 07060 031715 02785000 07061 031716 XMI 02786000 07062 005265 02787000 02788000 07063 035717 XFER 02789000 07064 074560 02790000 07065 170607 02791000 07066 074561 02792000 07067 024000 02793000 07070 076410 02794000 02795000 THIS S 02796000 02797000 07071 035264 02798000 07072 074560 02799000 07073 010116 02800000 07074 066025 02801000 07075 074560 02802000 07076 074560 02803000 07077 067176 02804000 02805000 THIS S 02806000 02807000 07100 007014 LOWSP 02808000 07101 040740 02809000 07102 000016 02810000 07103 031720 02811000 07104 074560 02812000 07105 010114 02813000 07106 066112 02814000 02815000 07107 074560 02816000 07110 042164 02817000 07111 066122 ND GSB EXECUTION LDA FLAG JMP + 2 LDA PO STA T 5 LDA M 1 STA T 6 LDB FWUP JMP XFER LDA FLAG JMP + 2 LDA PO STA T 5 LDA M l JMP XM 1 LDA FLAG JMP + 2 LDA PO STA T 5 STA T 6 LDB HERE STB T 7 WBC A, SAL 8 WBC B,I ADBA SZB LOWSP ABSOLUTE GSB ABSOLUTE GTO INDICATE FORWARD INDICATE ABSOLUTE + GSB + GTO INDICATE FORWARD GSB -GTO INDICATE RELATIVE GET HI-SPEED WORD SKIP IF SEARCH NEEDED ECTION DOES A HI-SPEED BRANCH STB LEND WBC A,I CPA B 42 JMP XLABL WBC A I WBC A,I JMP MLOOP SET GTO/GSB FLAG ALPHA? YES NO SKIP PAST INTEGER SECTION DOES A LOW-SPEED BRANCH LDB JSM LDA STA WBC CPA JMP WBC JSM JMP M 33 CLXCM C T 8 A,I B 44 FINDN A,I FINDL CNI CLEAR XCOMM BIT 5 SAVE C FOR LATER FILL-IN OF HI-SPEED BRANCH ADDRESS NUMERIC? YES GET BYTE COUNT FIND LABELLED LINE Page 97 146 146 147 Page 98 02819000 02820000 02821000 02822000 07112 02823000 07113 02824000 07114 02825000 07115 02826000 07116 02827000 07117 02828000 07120 02829000 07121 02830000 02831000 02832000 02833000 07122 02834000 07123 02835000 07124 02836000 02837000 07125 02838000 07126 02839000 07127 02840000 07130 02841000 07131 02842000 07132 02843000 07133 02844000 07134 02845000 07135 02846000 07136 02847000 07137 02848000 07140 02849000 07141 02850000 07142 02851000 07143 02852000 07144 02853000 07145 02854000 07146 02855000 07147 02856000 07150 02857000 07151 02858000 07152 02859000 07153 02860000 07154 02861000 07155 02862000 07156 02863000 07157 02864000 07160 02865000 07161 02866000 07162 02867000 07163 1,568,094 INTERPRETER SCAN FOR A LINE NUMBER s 074560 FINDN 170607 074561 060001 045716 170040 005717 043015 001257 010142 067012 WBC A, SAL 8 WBC B,l IOR B ISZ T 6 TCA LDB T 7 JSM RELGO FINAL PROCESSING CNI LDA CSTAT CPA P 5 JMP E 9 025715 035264 176425 010144 067012 010254 043041 066154 000117 040744 001232 170501 073405 140425 004303 035265 140515 005264 035317 001232 050207 031232 140523 001257 CN 2 073406 001720 030017 074751 174407 074751 067176 ADB STB SBM CPA JMP CPA JSM JMP LDA JSM LDA SAR RLA JSM LDB STB JSM LDB STB LDA AND STA JSM LDA RLA LDA STA PBD ABR PBD JMP T 5 LEND CN 2 P 3 E 9 Pl FINDB CN 2 B 40 SXCMM CSTMP+ 12 2 + 5 ACNIN,I ACBF HERE ASTKI,I LEND SWHRE CSTM P+ 12 MI O CSTMP+ 12 AGLNO I CSTAT + 6 T 8 D B,D 8 B,D MLOOP 147 GET INTEGER TEST DIRECTION OF SEARCH ERROR WRONG CONTROL STATE INCLUDE GTO/GSB FLAG SKIP IF GSB ERROR, WRONG CONTROL STATE IN COMPILE BUFFER? YES SET STOP BIT TEST RUN-DONE BIT CONTINUE INITIALIZATION DUMMY STACK FOR C S.CLEAR BITS O AND 3 OF JB'S CFLAG

(FETCH AND STEP BIT 51 DON'T FILL IN H S ADDRESS RECALL PROGRAM LOCATION FILL IN HI-SPEED ADDRESS 1,568,094 INTERPRETER 02869000 02870000 02871000 02872000 02873000 02874000 02875000 02876000 02877000 07164 02878000 07165 02879000 07166 02880000 07167 02881000 07170 02882000 07171 02883000 07172 02884000 07173 02885000 07174 02886000 07175 02887000 07176 02888000 07177 02889000 07200 02890000 07201 02891000 07202 02892000 07203 02893000 07204 02894000 07205 02895000 07206 02896000 07207 02897000 07210 02898000 07211 02899000 07212 02900000 07213 02901000 07214 02902000 07215 02903000 07216 02904000 07217 02905000 07220 02906000 02907000 07221 02908000 07222 02909000 02910000 07223 02911000 07224 02912000 07225 02913000 07226 02914000 07227 SUBROUTINE TO SCAN FOR AN ALPHAMERIC LABEL ON ENTRY: A = BYTE COUNT C = POINTER TO FIRST BYTE TEMPORARIES USED: TI,T 2,T 3,T 4,T 9 s 031711 FINDL 000016 031721 005307 035712 FN 2 034017 074570 050053 072002 067040 031713 074570 010115 066203 066223 074570 011711 066207 066223 010177 066221 031714 074560 FN 3 074571 010001 066217 066223 055714 066212 005712 170201 FN 4 005712 FN 5 025713 001721 030016 066170 STA TI LDA C STA T 9 LDB FWUP STB T 2 STB D WBD A,I AND B 177 RZA + 2 JMP E 31 STA T 3 WBD A,I CPA B 43 JMP + 2 JMP FN 5 WBD A, CPA Tl JMP + 2 JMP FN 5 CPA PO JMP FN 4 STA T 4 WBC A,I WBD B,I CPA B JMP + 2 JMP FN 5 DSZ T 4 JMP FN 3 LDB T 2 RET 1 LDB ADB LDA STA JMP T 2 T 3 T 9 C FN 2 SAVE BYTE COUNT SAVE START OF REAL CHARACTERS NOW SCAN PROGRAM ERROR, END OF PROGRAM SAVE LENGTH OF THIS LINE DOES LABEL FOLLOW? YES NO GET BYTE COUNT SAME LENGTH? YES NO BOTH LABELS NULL? YES NO, INITIALIZE COMPARE-COUNTER REAL BYTE TEST BYTE MATCH? YES NO DECREMENT COMPARISON COUNTER FOUND IT NOT FOUND YET RESTORE REAL BYTE POINTER 148 Page 99 148 149 Page 100 02916000 02917000 S B 02918000 02919000 07230 000257 02920000 07231 031716 XSD 02921000 07232 035717 02922000 07233 101263 02923000 07234 031714 02924000 07235 140612 02925000 07236 176434 02926000 07237 035715 02927000 07240 001714 02928000 07241 170603 02929000 07242 172004 02930000 07243 140612 02931000 07244 176426 02932000 07245 066247 02933000 07246 005715 GEl 02934000 07247 001715 02935000 07250 170140 02936000 07251 020001 02937000 07252 172020 02938000 07253 031715 02939000 07254 000001 02940000 07255 005307 02941000 07256 043015 02942000 02943000 07257 100001 XSP 02944000 07260 051716 02945000 07261 061717 02946000 07262 130001 02947000 07263 045715 02948000 07264 066266 02949000 07265 067176 02950000 02951000 07266 050053 02952000 07267 072476 02953000 07270 024000 02954000 07271 066257 02955000 02956000 07272 140404 E 19 02957000 07273 030471 1,568,094 INTERPRETER UBROUTINE TO CHANGE STOP AND/OR TRACE INDICATOR ITS NT NTI LDA STA STB LDA STA JSM SBM STB LDA SAL SAP JSM SBM JMP LDB LDA CMA ADA SAP STA LDA LDB JSM LDA AND IOR STA ISZ JMP JMP AND SZA ADB JMP Ml T 6 T 7 A Pl,I T 4 AGTIN,I E 19 T 5 T 4 4 G El AGTIN,I E 19 + 2 T 5 T 5 B E 19 T 5 B FWUP RELGO B,I T 6 T 7 B,I T 5 + 2 MLOOP B 177 -2 A XSNT I SAVE LINK INFORMATION GET INTEGER PARAMETER SAVE FIRST PARAMETER RECALL LINK INFORMATION SKIP IF DEFAULT SECOND PARAMETER GET INTEGER PARAMETER -# OF LINES GO FIND THE LINE ANY MORE LINES TO BE DONE? YES NO GET WLENGTH END OF PROGRAM ERROR, BAD LINE NUMBER JSM AERRI,I ASC 1,19 149 Page 101 02959000 02960000 02961000 02962000 07274 105263 02963000 07275 014221 02964000 07276 066302 02965000 02966000 07277 000213 02967000 07300 004177 02968000 07301 066231 02969000 02970000 07302 000177 02971000 07303 031267 02972000 07304 031314 02973000 07305 067176 02975000 02976000 02977000 02978000 07306 105263 02979000 07307 014221 02980000 07310 066316 02981000 02982000 07311 040724 02983000 07312 000251 02984000 07313 031314 02985000 07314 004052 02986000 07315 066230 02987000 02988000 07316 000073 02989000 07317 040744 02990000 07320 067176 02992000 02993000 02994000 02995000 07321 000251 02996000 07322 031314 02997000 07323 105263 02998000 07324 014221 02999000 07325 067176 03000000 03001000 07326 040724 03002000 07327 004263 030030)0 07330 066230 1,568,094 INTERPRETER NOR EXECUTION XNOR LDB API,I CPB EMPTY JMP XNO 2 LDA TMASK LDB PO JMP XSNT XNO 2 LDA PO STA TRACE STA TE JMP MLOOP STP EXECUTION XSTP LDB AP 1,I CPB EMPTY JMP XST 2 JSM SECCK LDA UMASK STA TE LDB B 200 JMP XSTN-1 XST 2 LDA B 100 JSM SXCMM JMP MLOOP TRC EXECUTION XTRC LDA UMASK STA TE LDB API,I CPB EMPTY JMP MLOOP JSM SECCK LDB FLAG JMP XSNT-1 LOOK AT TOS JUMP IF NO PARAMETERS GO CHANGE BITS DISABLE TRACING LOOK AT TOS JUMP IF NO PARAMETERS CHECK FOR SECURE PROGRAM ENABLE TRACING GO CHANGE BITS ENABLE TRACING LOOK AT TOS JUMP IF NO PARAMETERS CHECK FOR SECURE PROGRAM GO CHANGE BITS 1,568,094 INTERPRETER 07331 007460 FKI 07332 007467 FK 2 07333 007471 FK 3 DEF DEF DEF MFLAG SFLAG CLFLAG COMPLEMENT FLAG 07334 001506 XCMF 07335 105263 07336 014221 07337 066356 07340 006331 07341 066362 LDA LDB CPB JMP FLAGS API,I EMPTY ALLF 1 JUMP IF ALL FLAGS LDB FK 1 JMP ALTER SET FLAG 07342 000257 XSFG 07343 105263 07344 014221 07345 066357 07346 006332 07347 066362 03031000 03032000 03033000 03034000 07350 000177 03035000 07351 105263 03036000 07352 014221 03037000 07353 066357 03038000 03039000 07354 006333 03040000 07355 066362 03041000 03042000 07356 170140 03043000 07357 031506 03044000 07360 042415 03045000 07361 067176 LDA LDB CPB JMP Ml API,I EMPTY ALLF 2 JUMP IF ALL FLAGS LDB FK 2 JMP ALTER CLEAR FLAG CLEAR FLAG XCFG LDA LDB CPB JMP PO API,I EMPTY ALLF 2 JUMP IF ALL FLAGS ' LDB FK 3 JMP ALTER ALLF 1 ALLF 2 CMA STA JSM JMP FLAGS FCHEK MLOOP GO CHECK FOR FLAG TRACING 151 151 Page 102 03005000 03006000 03007000 03009000 03010000 03011000 03012000 03013000 03014000 03015000 03016000 03017000 03018000 03020000 03021000 03022000 03023000 03024000 03025000 03026000 03027000 03028000 03029000 1,568,094 INTERPRETER 03047000 07362 035714 ALTER 03048000 07363 000177 03049000 07364 031715 03050000 03051000 07365 101263 NEXTF 03052000 07366 031716 03053000 07367 140612 03054000 07370 176414 03055000 07371 024160 03056000 07372 176012 03057000 07373 042405 03058000 07374 061715 03059000 07375 031715 03060000 07376 005716 03061000 07377 174603 03062000 07400 176465 03063000 07401 141714 03064000 07402 042415 03065000 07403 067176 03066000 03067000 07404 066023 E 35 A 03069000 03070000 SUBR( 03071000 03072000 07405 024242 EXEB 03073000 07406 000254 03074000 07407 070430 03075000 07410 070001 03076000 07411 070420 03077000 07412 170201 STB T 4 LDA PO STA T 5 LDA STA JSM SBM ADB SBP JSM IOR STA LDB SRL SBM JSM JSM JMP SAVE SUBROUTINE ADDRESS INITIALIZE FLAG MASK API,I T 6 AGTIN,I E 35 A M 16 E 35 A EXEB T 5 T 5 T 6 4 NEXTF T 4,I FCHECK MLOOP JMP E 35 SAVE LINK INFORMATION GET INTEGER PARAMETER SKIP IF #< O SKIP IF #> 15 POSITION MASK BIT RECALL LINK INFORMATION SKIP IF MORE PARAMETERS GO CHANGE FLAGS GO CHECK FOR FLAG TRACING ERROR, ILLEGAL FLAG MODIFIER REF OUTINE TO FORM ROTATE INSTRUCTION AND EXECUTE IT ADB KF LDA Pl DIR EXE B EIR RET I PREVENT INTERRUPT INTERFERENCE 152 Page 103 152 153 Page 104 03079000 03080000 SUBR( 03081000 03082000 07413 042405 SYSFL 03083000 07414 042467 03084000 03085000 07415 001267 FCHEK 03086000 07416 172031 03087000 03088000 07417 000016 03089000 07420 031270 03090000 07421 140450 03091000 07422 002450 03092000 07423 004313 03093000 07424 071406 03094000 07425 140444 03095000 07426 140450 03096000 07427 000160 03097000 07430 031713 03098000 07431 004315 03099000 07432 034017 03100000 07433 001506 03101000 07434 004103 FTR 1 03102000 07435 172002 03103000 07436 004102 03104000 07437 074551 03105000 07440 170716 03106000 07441 045713 03107000 07442 066434 03108000 03109000 07443 140444 FTR 2 03110000 07444 040710 03111000 07445 001270 03112000 07446 030016 03113000 07447 170201 FTR 3 03114000 03115000 07450 007451 FMSG 03116000 07451 043114 153 1,568,094 INTERPRETER )UTINE TO CHECK FOR FLAG TRACING JSM EXEB JSM SFLAG LDA TRACE SAP FTR 3 LDA STA JSM LDA LDB XFR JSM JSM LDA STA LDB STB LDA LDB SAP LDB PBD RAR ISZ JMP JSM JSM LDA STA RET C SAVEC ACLBI,I FMSG AIBUF 7 A.PRN,I ACLBI,I M 16 T 3 AIBFM D FLAGS B 60 + 2 B 61 B,I T 3 FTRI 1 A.PRN,I EOLIO SAVEC C l SPECIAL ENTRY TO SET A SYSTEM FLAG TRACING ENABLED? NO CLEAR I/O BUFFER "FLAGS:" MESSAGE GO PRINT IT CLEAR I/O BUFFER INITIALIZE COUNTER INITIALIZE BUFFER POINTER ASSUME FLAG IS 'ZERO' NOPE, FLAG IS 'ONE' TEST LOOP COUNTER GO PRINT FLAG CONFIGURATION DON El DEF + 1 ASC 7,FLAGS: ( 0-15) 1,568,094 INTERPRETER 03118000 03119000 03120000 03121000 03122000 03123000 07460 061506 03124000 07461 004000 03125000 07462 001506 03126000 07463 051715 03127000 07464 170140 03128000 07465 050001 03129000 07466 066473 03131000 03132000 03133000 03134000 03135000 03136000 07467 061506 03137000 07470 066473 03139000 03140000 03141000 03142000 03143000 03144000 07471 170140 03145000 07472 051506 03146000 07473 031506 03147000 07474 170201 SUB ROUTINE TO COMPLEMENT DESIGNATED FLAG ON ENTRY: A-REGISTER HAS FLAG MASK MFLAG IOR FLAGS LDB A LDA FLAGS AND T 5 CMA AND B JMP Cl SUBROUTINE TO SET DESIGNATED FLAG ON ENTRY: A-REGISTER HAS FLAG MASK S FLAG IOR FLAGS JMP Cl SUBROUTINE TO CLEAR DESIGNATED FLAG ON ENTRY: A-REGISTER HAS FLAG MASK CFLAG CMA AND FLAGS Cl STA FLAGS RET 1 154 Page 105 154 Page 106 INTERPRETER 03149000 07475 107476 ABTBL DEF IBTBL,I ADDRESSOFJUMPTABLE 03150000 03151000 07476 100424 IBTBL DEF ASYER,I 000 03152000 07477 027755 DEF CALLM 001 ROM = 1 03153000 07500 027755 DEF CALLM 002 ROM#2 03154000 07501 027755 DEF CALLM 003 ROM #3 03155000 07502 027755 DEF CALL M 004 ROM #4 03156000 07503 027755 DEF CALLM 005 ROM #5 03157000 07504 027755 DEF CALLM 006 ROM #6 03158000 07505 027755 DEF CALLM 007 ROM #7 03159000 07506 027755 DEF CALLM 010 ROM #8 03160000 07507 027755 DEF CALLM 011 ROM #9 03161000 07510 027755 DEF CALLM 012 ROM#10 03162000 07511 027755 DEF CALLM 013 ROM#11 03163000 07512 027755 DEF CALLM 014 ROM#12 03164000 07513 027755 DEF CALLM 015 ROM#13 03165000 07514 027755 DEF CALLM 016 ROM#14 03166000 07515 027755 DEF CALLM 017 ROM#15 03167000 07516 027755 DEF CALLM 020 ROM#16 03168000 07517 027755 DEF CALLM 021 ROM #17 03169000 07520 027755 DEF CALLM 022 ROM#18 03170000 07521 100424 DEF ASYER,I 023 03171000 07522 100424 DEF ASYER,I 024 03172000 07523 100424 DEF ASYER,I 025 03173000 07524 100424 DEF ASYERI 026 03174000 07525 100424 DEF ASYER,I 027 03175000 07526 100424 DEF ASYER,I 030 03176000 07527 100424 DEF ASYER,I 031 03177000 07530 100424 DEF ASYER,I 032 03178000 07531 100424 DEF ASYERI 033 03179000 07532 100424 DEF ASYER,I 034 END OF 03180000 07533 100424 DEF ASYERJI 035 03181000 07534 100424 DEF ASYER,I 036 03182000 07535 006562 DEF XMPY 037 1 03183000 07536 100424 DEF ASYER,1 040 03184000 07537 100424 DEF ASYER,I 041 03185000 07540 006362 DEF XSTRG 042 STRING FOLLOWS 03186000 07541 007025 DEF XLABL 043 LABEL FOLLOWS 03187000 07542 100424 DEF ASYER,I 044 03188000 07543 100424 DEF ASYER,I 045 03189000 07544 100424 DEF ASYER,I 046 03190000 07545 100424 DEF ASYER I 047 03191000 07546 100424 DEF ASYERI 050 03192000 07547 100424 DEF ASYER,I 051 03193000 07550 006562 DEF XMPY 052 03194000 07551 006564 DEF XADD 053 + 03195000 07552 015446 DEF XCOMA 054,1 03196000 07553 006560 DEF XSUB 05503197000 07554 006522 DEF XUNM 056 U03198000 07555 006556 DEF XDIV 057/ 03199000 07556 006316 DEF NNEXP 060 F-NUMBER 03200000 07557 006316 DEF NNEXP 061 E-NUMBER 03201000 07560 006312 DEF NWEXP 062 F-NUMBER W/EXP 03202000 07561 006312 DEF NWEXP 063 E-NUMBER W/EXP 03203000 07562 015446 DEF XCOMA 064 2 03204000 07563 100424 DEF ASYER,I 065 1,568,094 1,568,094 Page 107 INTERPRETER 03205000 07564 100424 03206000 07565 100424 03207000 07566 100424 03208000 07567 100424 03209000 07570 015444 03210000 07571 006174 03211000 07572 100424 03212000 07573 006174 03213000 07574 100424 03214000 07575 006347 03215000 07576 100424 03216000 07577 006510 03217000 07600 006510 03218000 07601 006510 03219000 07602 006510 03220000 07603 006510 03221000 07604 006510 03222000 07605 006510 03223000 07606 006510 03224000 07607 006510 03225000 07610 006510 03226000 07611 006510 03227000 07612 006510 03228000 07613 006510 03229000 07614 006510 03230000 07615 006510 03231000 07616 006510 03232000 07617 006510 03233000 07620 006510 03234000 07621 006510 03235000 07622 006510 03236000 07623 006510 03237000 07624 006510 03238000 07625 006510 03239000 07626 006510 03240000 07627 006510 03241000 07630 006510 03242000 07631 006625 03243000 07632 006524 03244000 07633 100424 03245000 07643 100424 03246000 07635 100424 03247000 07636 027766 03248000 07637 006403 03249000 07640 006403 03250000 07641 006403 03251000 07642 006403 03252000 07643 006403 03253000 07644 006403 03254000 07645 006403 03255000 07646 006403 03256000 07647 006403 03257000 07650 006403 03258000 07651 006403 03259000 07652 006403 03260000 07653 006403 DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF ASYER,I ASYER,I ASYER,I ASYER,I XCOLN XSEMI ASYER,I XSEMI ASYER,I XARES ASYER,I XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR XSVAR DIMOP XSQR ASYER,I ASYER,I ASYER,I XARRY XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR 066 067 071 072:

073:

074 LABEL:

076 077 RES(ADDRESS) LITERAL 101 A 102 B 103 C 104 D E 106 F 107 G H 111 I 112 J 113 K 114 L M 116 N 1170 P 121 Q 122 R 123 S 124 T U 126 V 127 W X 131 Y 132 Z 133 DIM OPERATOR 134 SQR 136 137 ENTIRE ARRAY 141 Al 142 Bl 143 Cl 144 Dl El 146 Fl 147 Gl H 1 I 151 I 152 Jl 153 Kl 154 Ll M 156 156 157 Page 108 03261000 07654 006403 03262000 07655 006403 03263000 07656 006403 03264000 07657 006403 03265000 07660 006403 03266000 07661 006403 03267000 07662 006403 03268000 07663 006403 03269000 07664 006403 03270000 07665 006403 03271000 07666 006403 03272000 07667 006403 03273000 07670 006403 03274000 07671 006334 03275000 07672 006343 03276000 07673 006602 03277000 07674 027771 03278000 07675 006140 03279000 07676 006134 03280000 07677 100567 03281000 07700 100570 03282000 07701 006536 03283000 07702 006534 03284000 07703 006526 03285000 07704 100575 03286000 07705 100576 03287000 07706 027734 03288000 07707 006775 03289000 07710 007342 03290000 07711 007350 03291000 07712 007334 03292000 07713 006530 03293000 07714 006532 03294000 07715 007321 03295000 07716 007274 03296000 07717 007306 03297000 07720 007007 03298000 07721 023706 03299000 07722 007057 03300000 07723 007051 03301000 07724 007055 03302000 07725 007047 03303000 07726 007041 03304000 07727 007037 03305000 07730 006176 03306000 07731 006262 03307000 07732 001150 03308000 07733 015475 03309000 07734 015452 03310000 07735 03311000 07736 006540 03312000 07737 03313000 07740 03314000 07741 03315000 07742 03316000 07743 1.568,094 INTERPRETER DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF BSS DEF BSS BSS BSS BSS BSS XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR XSSVR XPIE XENR XASN XEMTY XEOLN XIF APRT,I ADSP,I XLOR XAND XNOT AFXD,I AFLT,I XSPAC XJMP XSFG XCFG XCMF XPRND XDRND XTRC XNOR XSTP XFLG XENT XMGTO XPGTO XMGSB XPGSB XAGTO XAGSB MLOOP XRETN XWAIT XBEEP XEND 1 XXOR 1 1 156 Nl 157 Of P 161 Ql 162 Rl 163 SI 164 Tl Ul 166 Vl 167 Wl X 171 YI 172 Z 173 Pl 174 ENR GAZINTA 176 EMPTY 177 EOL IF 201 PRT 202 DSP 203 OR 204 AND 205 NOT 206 FXD 207 FLT 210 SPC 211 JMP 212 SFG 213 CFG 214 CMF 215 PRND 216 DRND 217 TRC 220 NOR 221 STP 222 FLG 223 ENT 224 GTO225 GTO+ 226 GSB227 GSB+ 230 GTO 231 GSB 232 DIM 233 RET 234 WAIT 235 BEEP 236 END 237 REW 240 XOR 214 IDF 242 SSC 243 TRK 244 FDF 245 ERT 157 1,568,094 Page 109 03317000 07744 03318000 07745 03319000 07746 03320000 07747 023704 03321000 07750 03322000 07751 03323000 07752 03324000 07753 03325000 07754 03326000 07755 03327000 07756 03328000 07757 03329000 07760 03330000 07761 100574 03331000 07762 100573 03332000 07763 006554 03333000 07764 006552 03334000 07765 006550 03335000 07766 006546 03336000 07767 006542 03337000 07770 006544 03338000 07771 015401 03339000 07772 100566 03340000 07773 006353 03341000 07774 100572 03342000 07775 03343000 07776 177526 03345000 07777 03347000 03348000 03349000 03350000 00360 03351000 00360 03352000 00361 03353000 00362 03354000 00363 03355000 00364 03356000 00365 03357000 00366 03358000 00367 03359000 00370 03360000 00371 03361000 00372 03362000 00373 03363000 00374 03364000 00375 03365000 00376 03366000 00377 03367000 00400 03368000 00401 03369000 00402 INTERPRETER BSS BSS BSS DEF BSS BSS BSS BSS BSS BSS BSS BSS BSS DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF BSS DEF 1 1 1 XENP 1 1 1 1 1 1 1 1 1 AKOF,I AKON,I XNEQ XLEQ XGEQ XLTN XGTN XEQL XLCR ALST,I XVRES ALSTK,I APP#,I APP#,I BSS 1 246 247 250 251 252 253 254 255 256 257 260 261 262 263 264 265 266 267 270 271 272 273 274 275 276 277 300 MRK RCF LDF ENL LDP RCM LDM RCK LDK LDB VFY AVD AVE LKD LKE # ≤ ≥ > L.C R LIST RES (VALUE) LISTK TLIST L.C P RESERVED FOR 6 K-PAGE CHECKSUM FILL IN BASE-PAGE LINKS FILL IN BASE-PAGE LINKS 015261 015246 015370 006145 006160 006176 006565 007316 015272 006054 006077 006167 027614 027626 007413 027466 007164 015360 015362 ORG DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF ARSGT RESTB INTI FBAD XEX XE 2 MLOOP RAPUP XST 2 MOVEM OVTST ASTRC LNTRC FCI FCC SYSFL GNAME FINDL ADBA ADB 158 158 1,568 094 LEFTOVERS 03371000 15246 ORG 15246 B 15246 005311 15247 035300 15250 024146 15251 035263 15252 035261 15253 000257 15254 131261 15255 005307 15256 035265 15257 035266 15260 170201 INTERPRETER INITIALIZATION INTI LDB VTI STB AP 2 ADB M 2 ONI STB A Pl STB AP 3 SET LDA M 1 STA AP 3,I MA LDB FWUP STB HERE STB WHERE RET RET I E BLANK WORD BETWEEN AP 2 AND BOT.

r UP EXECUTION STACK POINTERS RK BOTTOM OF STACK 15261 000050 15262 004152 15263 140374 15264 140375 15265 170201 15266 000177 15267 074550 15270 074550 15271 066264 SECTION TO RESET HI-SPEED BRANCH ADDRESSES RESTB LDA B 224 LDB M 6 JSM AFCI,I INITIALIZE TEST BYTE REST 2 JSM AFCC I RET I EN Dr OF-PROGRAM LDA PO PBD AI PBD A,I JMP REST 2 159 Page 110 159 03373000 03374000 03375000 03376000 03377000 03378000 03379000 03380000 03381000 03382000 03383000 03384000 03385000 03386000 03387000 03388000 03389000 03391000 03392000 03393000 03394000 03395000 03396000 03397000 03398000 03399000 03400000 03401000 03402000 1,568,094 LEFTOVERS 15272 15273 15274 15275 15276 15277 15300 15301 15302 15303 15304 005263 035711 024000 035712 031713 000001 170040 021310 172403 140404 031471 MOVE MEMORY UP ON ENTRY: A = -# OF WORDS TO MOVE ON EXIT: A = NEW VT 2 = START OF NEW SPACE TEMPORARIES USED: TI,T 2 T 3 T 4 MOVEM LDB A Pl MOVEM LDB A Pl E 39 15305 035263 15306 005300 15307 025713 15310 035300 15311 005261 15312 025713 15313 035261 15314 005311 15315 025713 15316 035311 15317 005272 15320 025713 15321 035272 15322 005625 15323 025713 15324 035625 15325 000122 15326 031714 15327 004277 15330 100001 MOI 15331 072403 15332 021713 15333 13001 15334 055714 15335 076173 15336 005711 15337 015312 15340 066346 M 02 15341 100001 15342 024254 15343 131712 15344 045712 STB ADB STB STA LDA TCA ADA SAM JSM ASC STB LDB ADB STB LDB ADB STB LDB ADB STB LDB ADB STB LDB ADB STB LDA STA LDB LDA SZA ADA STA DSZ RIB LDB CPB JMP TI A T 2 T 3 B SAVE -# OF WORDS TO MOVE RMAX + 3 AERRI I 1,39 A Pl AP 2 T 3 AP 2 AP 3 T 3 AP 3 VT I T 3 VT 1 I FA Pl T 3 FA Pl ENSV+ 1 T 3 ENSV+ I P 26 T 4 ADATB B,I + 3 T 3 B,I T 4 M 01 O TI VT 2 M 03 LDA B,I ADB Pl STA T 2,I ISZ T 2 RMAX-A Pl ERROR, ALLOCATION OVERFLOW UPDATE A Pl UPDATE AP 2 UPDATE AP 3 UPDATE VT 1 UPDATE FA Pl UPDATE STORED FA Pl UPDATE DAT Al B IGNORE IF UNALLOCATED STORE UPDATED ENTRY RECALL OLD A Pl JUMP IF DONE MOVE ORGANIZATION DATA AND STACK Page 111 03405000 03406000 03407000 03408000 03409000 034 i 0000 03411000 03412000 03413000 03414000 03415000 03416000 03417000 03418000 03419000 03420000 03421000 03422000 03423000 03424000 03425000 03426000 03427000 03428000 03429000 03430000 03431000 03432000 03433000 03434000 03435000 03436000 03437000 03438000 03439000 03440000 03441000 03442000 03443000 03444000 03445000 03446000 03447000 03448000 03449000 03450000 03451000 03452000 03453000 03454000 03455000 03456000 03457000 03458000 03459000 03460000 161 1,568,094 161 LEFTOVERS 15345 066337 15346 15347 15350 15351 15352 15353 15354 15355 001712 M 03 035712 031312 004177 011712 M 04 066356 134000 072175 15356 001312 M 05 15357 170201 JMP M 02 LDA STB STA LDB CPA JMP STB RIA T 2 T 2 VT 2 UPDATE VT 2 PO T 2 M 05 A,I M 04 ZERO THE NEW AREA LDA VT 2 RET I ADJUST BYTE ADDRESS ON ENTRY: A-REGISTER = BYE ADDRESS B-REGISTER = COUNT ON EXIT: A-REGISTER = NEW BYE ADDRESS B-REGISTER = UNALTERED 15360 15361 15362 15363 15364 15365 15366 15367 172302 172201 170716 020001 170700 172302 172201 170201 ADBA SAP SAP ADB RAR ADA RAR SAP SAP RET + 2,S + I,C B 1 + 2,S +I,C COMPLEMENT SIGN BIT' ADJUST ADDRESS ADD CHANGE RESET ADDRESS COMPLEMENT SIGN BIT FIND BYTE ADDRESS DIFFERENCE ON ENTRY: A-REGISTER = LOWER BYTE ADDRESS B-REGISTER = UPPER BYTE ADDRESS FOR POSITIVE ON EXIT: A-REGISTER = CHARACTER COUNT 15370 172302 FBAD 15371 172201 15372 170716 t 5373 176302 15374 176201 15375 174716 15376 170040 15377 020001 15400 170201 SAP + 2,S SAP + 1 I,C RAR 15 SBP + 2,S SBP + 1,C RBR 15 TCA ADA B RET 1 COMPLEMENT THE SIGN BIT COMPLEMENT THE SIGN BIT MAKE NEG.

A = BYTE DIFF Page 112 03461000 03462000 03463000 03464000 03465000 03466000 03467000 03468000 03469000 03470000 03471000 03472000 03473000 03474000 03476000 03477000 03478000 03479000 03480000 03481000 03482000 03483000 03484000 03485000 0348600 O 03487000 03488000 03489000 03490000 03491000 03492000 03494000 03495000 03496000 03497000 03498000 03499000 03500000 03501000 03502000 03503000 03504000 03505000 0350600 03507000 03508000 03509000 03510000 161 1,568,094 161 1,568,094 LEFTOVERS L C R EXECUTION L C R EXECUTION 15401 140612 XLCR 15402 176003 15403 140404 E 26 A 15404 031066 15405 000001 15406 050224 15407 072034 174601 024254 001277 020001 170140 021263 020152 172424 055263 135263 055263 000144 131263 000270 055263 131263 024144 025277 000001 170040 021310 172005 001310 020254 035310 140471 164365 15443 066303 E 39 A JSM SRP JSM ASC LDA AND RZA SBL ADB LDA ADA CMA ADA ADA SAM DSZ STB DSZ LDA STA LDA DSZ STA ADB ADB LDA TCA ADA SAP LDA ADA STB JSM JMP AGTIN,I + 3 AERR 1,I 1,26 B B 60 K E 39 A 2 Pl END$ B A Pl M 6 E 39 A A Pl AP 1,I A Pl P 3 AP 1,I FVRRA A Pl API,I ' P 3 ENDS B RMAX + 5 RMAX Pl RMAX AZRWM,I AINTX,I JMP E 39 GET SUBSCRIPT ERROR, NEGATIVE R SUBSCRIPT A = ABSOLUTE ADDRESS A API-(L+ 7).

WHERE= RELATIVE R-REGISTER LENGTH = 3 WHAT = FULL/VARIABLE RMAX-(L+ 3) UPDATE RMAX IF NECESSARY ZERO THE NEW AREA ERROR, OUT-OF-BOUNDS SET LINK BITS IN STACK 15444 000236 XCOLN LDA B 2 K 15445 066447 JMP + 2 15446 000234 XCOMA 15447 161263 15450 131263 15451 164365 LDA B 4 K IOR API,I STA API,I JMP AINTX,I : => 2000 B => BIT 10 => 4000 B => BIT 11 162 162 Page 113 03512000 03513000 03514000 03515000 03516000 03517000 03518000 05319000 03520000 05321000 03522000 03523000 03524000 03525000 03526000 03527000 03528000 03529000 03530000 03531000 03532000 03533000 03534000 03535000 03536000 03537000 03538000 03539000 03540000 03541000 03542000 03543000 03544000 03545000 03546000 03547000 03548000 03549000 03550000 03551000 15410 15411 15412 15413 15414 15415 15416 15417 15420 15421 15422 15423 15424 15425 15426 15427 15430 15431 15432 15433 15434 15435 15436 15437 15440 15441 15442 03553000 03554000 03555000 03556000 03557000 03558000 03559000 03560000 03561000 03562000 1,568,094 LEFTOVERS 15452 15453 15454 15455 15456 15457 15460 END 001257 XEND 010254 066461 010145 066461 140404 E 9 A 030071 15461 042246 XENI 15462 035264 15463 035317 15464 001257 15465 010254 15466 140515 15467 15470 15471 15472 15473 000177 031226 001232 050207 031232 (EVENTUALLY ARRIVES AT XST 2) LDA CSTAT CPA Pl JMP XENI CPA P 2 JMP XENI JSM AERRI,I ASC 1,09 JSM INTI STB LEND STB SWHRE LDA CSTAT CPA Pl JSM ASTKII LDA STA LDA AND STA 15474 165507 PO CSTMP+ 8 CSTMP+ 12 MIO O CSTMP+ 12 JMP ELINK,I ERROR, WRONG CONTROL STATE DELETE EXECUTDION STACK IMPLIED GTO O DUMMY STACK FOR C S IF REQUIRED LNO= O CLEAR BITS 0 AND 3 OF JB'S CFLAG (FETCH AND STEP BITS) LINK TO WAIT FOR I/O COMPLETION BEEP EXECUTION BEEP EXECUTION 15475 040703 XBEEP 15476 164365 JSM BEEP JMP AINTX,I Page 114 03564000 03565000 03566000 03567000 03568000 03569000 03570000 03571000 03572000 03573000 03574000 03575000 03576000 03577000 03578000 03579000 03580000 03581000 03582000 03583000 03584000 03585000 03586000 03587000 03588000 03590000 03591000 03592000 03593000 03594000 163 163 1,568,094 LEFTOVERS Page 115 03596000 27466 ORG 274668 03598000 03599000 03600000 03601000 27466 03602000 27467 03603000 27470 03604000 27471 03605000 27472 03606000 27473 03607000 03608000 27474 03609000 27475 03610000 27476 03611000 27477 03612000 27500 03613000 27501 03614000 27502 03615000 27503 03616000 27504 03617000 27505 03618000 27506 03619000 03620000 27507 03621000 27510 03622000 27511 03623000 27512 03624000 27513 03625000 27514 03626000 27515 03627000 27516 03628000 03629000 27517 03630000 27520 03631000 27521 03632000 27522 03633000 27523 03634000 27524 03635000 27525 03636000 27526 03637000 27527 03638000 27530 03639000 27531 03640000 03641000 03642000 03643000 27532 03644000 27533 03645000 27534 03646000 27535 03647000 27536 03648000 27537 03649000 27540 03650000 27541 SUBROUTINE TO GET VARIABLE NAME INTO I/O BUFFER 035723 174040 035724 140450 004315 034017 001311 170040 021723 172020 001310 170040 021723 172404 000061 074550 170201 GNAME STB T I 11 TCB STB T 12 JSM ACLBI,I LDB AIBFM STB D LDA VT 1 TCA ADA T 11 SAP ASTI LDA RMAX TCA ADA Tll SAM GNA 1 LDA B 160 PBD A,I RET 1 GNA 1 074550 001277 170140 021723 170501 004017 164477 004276 ASTI 035712 000122 031713 000072 005723 115712 AST 2 066612 045712 055713 072174 000072 AST 4 031712 004277 035714 105714 AST 5 076417 035717 100001 LDA PBD LDA CMA ADA SAR LDB JMP LDB STB LDA STA LDA LDB CPB JMP ISZ DSZ RIA LDA STA LDB STB LDB SZB STB LDA B 162 A,I END$ Tll 2 D ABTDA,I ADVTB T 2 P 26 T 3 B I 101 Tll T 2 I AST 9 + 1 T 2 T 3 AST 2 CLEAN I/O BUFFER INITIALIZE BUFFER POINTER "TO"-VT I SKIP UNLESS R-REGISTER OR P-NUMBER "TO"-RMAX SKIP IF R-REGISTER L.C P L.C R R# = ("TO"-END$-1)/4 OUTPUT SUBSCRIPT VALUE INITIALIZE TABLE POINTER INITIALIZE COUNT RECALL ACTUAL ADDRESS JUMP IF SIMPLE VARIABLE FOUND FALL THRU IF ARRAY VARIABLE B 101 T 2 ADATB T 4 T 4,I AST 6 T 7 B,I INITIALIZE ASCII CHARACTER GET DATAB ENTRY IGNORE IF ZERO T 7 => #DIMS 164 164 Page 116 03651000 03652000 03653000 03654000 03655000 1,568 094 LEFTOVERS 27542 27543 27544 27545 27546 03656000 27547 03657000 27550 03658000 27551 03659000 27552 03660000 27553 03661000 27554 03662000 27555 03663000 03664000 27556 03665000 27557 03666000 27560 03667000 03668000 27561 03669000 27562 03670000 27563 03671000 27564 03672000 27565 03673000 27566 03674000 27567 03675000 27570 03676000 27571 03677000 27572 03678000 27573 03679000 27574 03680000 27575 03681000 27576 03682000 27577 03683000 27600 03684000 27601 03685000 27602 03686000 27603 03687000 27604 03688000 27605 03689000 27606 03690000 27607 03691000 27610 03692000 03693000 27611 03694000 27612 03695000 27613 170600 024254 024000 100001 021724 172407 024254 035721 104001 174040 024000 176404 045712 045714 066536 SAL ADB ADB LDA ADA AST 6 170501 AST 7 005712 074551 004070 074551 055721 055721 040762 AST 8 177721 055721 031720 101721 055721 170040 020001 004017 140477005717 015721 066611 000107 074550 001720 066570 000067 074550 170201 AST 9 Pl Pl A B,I T 12 SAM AST 6 ADB Pl STB T 9 LDB B,I TCB ADB A SBM AST 7 ISZ ISZ JMP SAR LDB PBD LDB PBD DSZ DSZ JSM DEF DSZ STA LDA DSZ TCA ADA LDB JSM LDB CPB JMP LDA PRD LDA JMP LDA PBD RET T 2 T 4 AST 5 2 T 2 B,I B 133 B,I T 9 T 9 SDIV T 9,1 T 9 T 8 T 9,I T 9 B D ABTDA,I T 7 T 9 AST 9 B 54 A,I T 8 AST 8 B 135 A,I 2 #DIMS B => LOCATION OF FIRST ELEMENT FIRST ELEMENT ADDRESS-ACTUAL ADD T 9 => #WORDS RELATIVE WORD -#WORDS SKIP IF IDENTIFIED IT ISN'T THE ONE RELATIVE ELEMENT OUTPUT THE LETTER OUTPUT( RELATIVE/D(J) REMAINDER+L(J) OUTPUT SUBSCRIPT VALUE DONE? OUTPUT, OUTPUT) 1,568,094 LEFTOVERS 03697000 03698000 03699000 03700000 03701000 03702000 03703000 03704000 03705000 03706000 03707000 03708000 03709000 03710000 03711000 27614 03712000 27615 03713000 27616 03714000 27617 03715000 2762003716000 27621 03717000 27622 03718000 27623 03719000 27624 03720000 27625 SUBROUTINE TO FIND A DESIGNATED BYTE IN THE PROGRAM INITIALIZATION: LDA (DESIRED BYTE) (EXCEPT EOL) LDB -# OF CONSECUTIVE BYTES JSM FCI CONTINUATION: JSM FCC ON RETURN TO P+l: END-OF-PROGRAM P+ 2: B-REGISTER= D-REGISTER TEMPORARIES USED: T 1,T 2,T 3,T 4,T 26 170040 FCI 031711 035675 005307 035712 034017 FC 13 074570 004017 035713 170201 TCA STA Tl STB T 26 LDB FWUP STB T 2 STB D WBD A,I LDBD STB T 3 RET 1 SAVE DESIRED BYTE INITIALIZE WORD ADDRESS SKIP OVER WLENGTH INITIAL D-REGISTER SETTING 27626 27627 27630 27631 27632 27633 27634 27635 101712 FCC 050053 072475 005713 034017 074570 RE O 010053 066667 27636 031714 27637 020332 27640 100000 27641 170507 27642 050130 27643 010142 27644 066712 27645 010141 27646 066702 27647 010140 27650 066724 27651 010137 27652 066716 27653 010136 27654 066712 27655 005713 27656 000017 27657 031713 REI 1 LDA T 2,I AND B 177 SZA -3 LDB T 3 STB D WBD A,I CPA B 177 JMP RE 2 STA T 4 ADA ARTBL LDA A,I SAR 8 AND B 17 CPA P 5 JMP RE 5 CPA P 6 JMP RE 6 CPA P 7 JMP RE 7 CPA P 8 JMP RE 8 CPA P 9 JMP RE 5 LDB T 3 LDAD STA T 3 END-OF-PROGRAM RECALL LOCATION OF NEXT BYTE GET NEXT BYTE EOL FOUND SAVE CURRENT BYTE GET RTBL WORD GET CLASS = LITERAL SYNTAX 6 = GTO/GSB 7 = OPTIONAL ROM 8 = CHARACTER STRING 9 = NUMBER CURRENT POSITION UPDATE POSITION 166 Page 117 166 03722000 03723000 03724000 03725000 03726000 03727000 03728000 03729000 03730000 03731000 03732000 03733000 03734000 03735000 03736000 03737000 03738000 03739000 03740000 03741000 03742000 03743000 03744000 03745000 03746000 03747000 03748000 03749000 03750000 03751000 1,568,094 LEFTOVERS 03752000 27660034017 03753000 03754000 27661 001711 03755000 27662 021714 03756000 27663 172450 03757000 27664 021675 03758000 27665 172046 03759000 27666 170202 03760000 03761000 27667 005712 03762000 27670 100001 03763000 27671 050053 03764000 27672 024000 03765000 27673 035712 03766000 27674 101712 03767000 27675 050053 03768000 27676 010177 03769000 27677 170201 03770000 03771000 27700 042621 03772000 27701 066633 03773000 03774000 27702 074570 03775000 27703 074570 03776000 27704 074570 03777000 27705 010116 03778000 27706 066716 03779000 27707 074570 03780000 27710 074570 03781000 27711 066655 03782000 03783000 27712 074570 03784000 27713 010121 03785000 27714 066655 03786000 27715 066712 03787000 03788000 27716 074571 03789000 27717 174040 03790000 27720 076503 03791000 27721 074570 03792000 27722 066720 03793000 27723 066655 03794000 03795000 27724 074571 03796000 27725 001714 03797000 27726 010136 03798000 27727 066731 03799000 27730 066655 03800000 03801000 27731 014254 03802000 27732 066716 03803000 27733 066655 RE 2 RE 2 STB D LDA ADA SAM ADA SAP RET LDB LDA AND ADB STB LDA AND CPA RET JSM JMP RE 6 WBD WBD WBD CPA JMP WBD WBD JMP RE 5 RE 8 RE 7 WBD CPA JMP JMP WBD TCB SIB WBD JMP JMP WBD LDA CPA JMP JMP CPB JMP JMP TI T 4 RE O T 26 RE O T 2 B,I B 177 A T 2 T 2,I B 177 PO FC 13 RE O A,I A,I A,I B 42 RE 8 A,I A,I REI A,I B 34 REI -3 B,I + 3 A,I -2 REI B,I T 4 P 9 + 2 REI Pl RE 8 REI DESIRED BYTE? NO NO YES RECALL WORD ADDRESS OF LINE GET WLENGTH OF LINE END-OF-PROGRAM GTO/GS B GET TYPE OF B RANCH NUMBER OF LITERAL SYNTAX CHARACTER STRING, GET LENGTH OPTIONAL-ROM GET SECOND CODE IS IT THE UDF ROM? YES NO IS IT A UDF NAME? YES NO 167 Page 118 167 1,568,094 LEFTOVERS 03805000 03806000 03807000 03808000 27734 03809000 27735 03810000 27736 03811000 03812000 27737 03813000 27740 03814000 27741 03815000 27742 03816000 27743 03817000 03818000 27744 03819000 27745 03820000 27746 03821000 27747 03822000 27750 03823000 27751 03824000 27752 03825000 27753 03826000 27754 SPACE EXECUTION 101263 XSPAC 010221 06674 140612 076413 176004 140404 030467 E 17 004254 XS Pl 035711 000254 140571 001206 055711 010254 164365 XSP 2 066746 LDA CPA JMP JSM SZB SBP JSM ASC LDB STB LDA JSM LDA DSZ CPA JMP JMP AP 1,I EMPTY XSP 1 AGTIN,I XSP 2 + 4 AERRII 1,17 Pl TI Pl ASPC,I IOTMP Ti Pl AINTX,I XSPI+ 2 LOOK AT DATA TYPE JUMP IF NO PARAMETER GET INTEGER PARAMETER ERROR, ILLEGAL SPACE COUNT DEFAULT GO SPACE ONCE GET KEYCODE COUNT EXHAU Sr ED? STOP KEY? DON El KEEP SPACING CALL OPTIONAL-ROM FOR EXECUTION CALL OPTIONAL-ROM FOR EXECUTION 27755 27756 27757 022765 CALLM 104000 076403 27760 104001 27761 014257 27762 064731 E 29 A 27763 074560 27764 164001 ADA LDB SZB LDB CPB JMP WBC JMP ROMK A,I E 29 A B,I Ml E 29 A,I B,I B = RMTBL ENTRY ERROR, ROM MISSING ERROR, ROM MISSING GET OPCODE CALL OPTIONAL-ROM 27765 167320 ROMK DEF RMTBL-IBTBL I,I Page 119 03828000 03829000 03830000 03831000 03832000 03833000 03834000 03835000 03836000 03837000 03838000 03839000 03840000 03841000 168 168 169 1,568,094 I 6 LEFTOVERS STACK'ENTIREARRAY' STACK 'ENTIRE ARRAY' 000143 XARRY 004171 066773 LDA LDB JMP P 4 ARRAY XEMTY+ 2 WHAT = ENTIRE ARRAY 03850000 03851000 03852000 03852000 27771 03854000 27772 03855000 27773 03856000 27774 03857000 27775 03858000 27776 STACK'EMPTY' 000144 XEMTY 004221 140371 004177 070551 164365 LDA P 3 LDB EMPTY JSM AOVTS,I LDBPO PWD B,I JMP AINTX,I WHAT = EMPTY WHERE = ABSOLUTE O 03860000 27777 03862000 23704 BSS I ORG 23704 B RESERVED FOR 26 K-PAGE CHECKSUM 03864000 03865000 0386600 03867000 23704 03868000 23705 03869000 23706 03870000 23707 03871000 23710 03872000 23711 03873000 23712 03874000 23713 03875000 23714 03876000 23715 03877000 23716 03878000 23717 03879000 03880000 23720 03881000 23721 03882000 23722 03883000 23723 03884000 03885000 PROLOGUE TO ENT EXECUTION 004127 XENP 066707 004177 XENT 001232 050161 060001 031232 LDB JMP LDB LDA AND IOR STA 001257 010145 066720 140404 E 13 030463 000016 031624 140610 164577 LDA CPA JMP JSM ASC LDA STA JSM JMP END B 20 + 2 PO CSTMP+ 12 M 17 B CSTMP+ 12 CSTAT P 2 + 3 AERRI,I 1,13 C ENSV ACOUN,I AENT,I SET PRINT FLAG CLEAR PRINT FLAG GET CONTROL SUPERVISOR FLAG (CFLAG) SET BIT ACCORDING TO ENTER ENTRY, UPDATE THE CONTROL SUPERVISOR FLAG MAKE SURE PROPER MODE ERROR, ILLEGAL MODE SAVE C SET UP FA Pl END OF PASS 2 NO ERRORS DETECTED Page 120 03843000 03844000 03845000 03846000 03847000 03848000 27766 27767 27770 169 1,568,094 169 ' 1,568,094 BASE-PAGE READ-WRITE-MEMORY 00003000 76550 00004000 02000000 02001000 02003000 02004000 02005000 02006000 00041 02007000 00041 010000 02008000 02009000 00403 02010000 00403 010063 02011000 00404 011000 02012000 00405 011067 02013000 00406 011072 02014000 00407 011002 02015000 00410 010776 02016000 00411 011406 02017000 00412 010722 02018000 00413 110657 02019000-00414 010605 02020000 00415 011177 02021000 00416 010437 02022000 00417 010551 02023000 00420 010242 02024000 00421 011400 02025000 00422 011312 02026000 00423 010654 02027000 00424 011065 02028000 00425 010372 02029000 00426 010013 02030000 00427 011452 02031000 00430 011453 02032000 00431 010477 02033000 02034000 00577 02035000 00577 011105 02036000 ORG 76550 B UNL LST BASE PAGE LINKS ORG SYSS+I DEF INT ORG DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF ORG DEF AMCLX MCLX ERRI ERR 2 PEMIO EREXT REJR ERUN 7 PLIRC CNDT,I CTFC 8 CONEN EXCK EXCSB KYPRC RUNSB ECIM SCNDT SYSER CNINT ERASA ISTOR ISTOX EXCST AENT XEN O INTERRUPT LINK MAIN LOOP ADDR+ I ERROR ROUTINE NO RETURN ERROR ROUTINE RETURN P+ 2 PLACE ERROR MESSAGE IN I/O BUFFER ERROR EXIT AFTER 'AERR 2 ' INTERRUPT REJECT ROUTINE XCOMM MANAGEMENT PLACE LINE NO IN I/O BUFF COMMAND TABLE (ADDR) CHECK TABLE FOR COMMAND IMMEDIATE EXECUTE CONTINUE COMMAND EXECUTION COMPILE A LINE PROCESS A KEY RUN INIT CALLED BY LDP IMMEDIATE CONTINUE COMMAND TABLE TABLE START ADDR SYSTEM ERROR CONTINUE INITIALIZATION ERASE ALL LINK PLACE KEYBOARD CHAR IN I/O BUFFER PLACE CHARACTER IN I/O BUFFER STMT EXECUTION LINK TO EXECUTE 'ENT' Page 121 1,568,094 CONTROL SUPERVISOR 02039000 02040000 02041000 02042000 0204300 02044000 02045000 02046000 02047000 02048000 02049000 02050000 02051000 02052000 02053000 02054000 02055000 02056000 02057000 02058000 10000 02059000 02060000 02061000 02062000 02063000 02064000 02065000 02066000 02067000 02068000 02069000 02070000 10000 02071000 10001 02072000 10002 02073000 10003 02074000 10004 02075000 10005 02076000 02077000 10006 02078000 02079000 10007 02080000 10010 02081000 10011 02082000 10012 02083000 02084000 02085000 02086000 02087000 02088000 02089000 10013 02090000 10014 02091000 10015 02092000 10016 02093000 10017 02094000 10020 CONTROL SUPERVISOR CNSP ORG 10000 B POWER ON ROUTINES; CHECK RESET BIT FINDS THE AMOUNT OF R/W MEM IN SYSTEM; ZEROES ALL MEMORY; WAITS 5 SEC FOR THE CASSETTE R/W MAX ADDR OF R/W MEM = MAW = 77777 B 000177 INT 030017 030011 170502 073402 067073 004154 000263 072100 076176 000225 004217 034016 024241 130001 110001 LDA STA STA LDA SAR RLA KPA D PA R 5 3 + 2 KEYB SELECT CODE SET FLAG FOR AUTO START ROUTINES SET PERIPHERAL ADDR READ SYSTEM STATUS POSITION POWER-ON BIT SKIP IF POWER ON JMP RESET RESET KEY WAS PRESSED LDB M 8 LDA FLAG RIA RIB -2 ERASE ALL ENTRY FIND AMOUNT ERASA LDA ALBPT LDB B 76 K INTL STB C ADB BM 2 K STA B,I CPA B,I WAIT 5 SECONDS OF MEMORY AVAILABLE ALTERNATE BIT PATTERN ASSUME AT LEAST 2 K OF MEMORY SAVE ADDRESS CHECK NEXT LOWER 2 K WRITE ALTERNATE I'S AND O 'S SEE IF WRITTEN 171 Page 122 171 1,568,094 CONTROL SUPERVISOR 10021 067015 10022 000177 10023 10024 10025 10026 10027 10030 10031 10032 004016 130001 014344 067030 076175 004016 035305 035306 8 ( 10033 000300 10034 03003 10035 004117 10036 000005 10037 073002 10040 004127 10041 035512 10042 10043 10044 10045 10046 10047 10050 10051 10052 10053 10054 10055 10056 10057 JMP INTL YES, SO KEEP LOOKING CLEAR R/W MEMORY LDA PO LDB STA CPB JMP RIB LDB STB STB C B,I MAW + 2 -3 C OFWAM FWAM GET ADDR TO START CLEARING ZERO MEMORY DONE? YES; GET OUT OF LOOP NO; LOOP GET C REG.

FIRST WORD OF ACTUAL R/W FIRST WORD OF AVAILABLE MEMORY (R/W) RESET "JSM STACK" POINTER SET DISPLAY LENGTH LDA AJSTK STA R 043137 140435 040715 140435 004330 SETMP 035311 035312 035313 005306 035307 035277 035310 042400 140514 10060 140433 SETMI 10061 070420 LDB LDA SLA LDB STB JSM JSM JSM JSM P 32 R 5 + 2 P 16 DLEN SRWLK ATRBF,I CLMOD ATRBF,I JSM STACK S/V-I SET RET STACK POINTER READ SYSTEM STATUS SKIP ON 32 CHAR DISP SET DISP LENGTH SET R/W LINKS, INIT OPTION ROMS TRANSFER I/O TO KBD BUFF SET MODE = O FOR ATRBF TRANS EOL TO RESERVE BUFF ALSO SET MEMORY POINTERS LDB STB STB STB LDB STB STB STB JSM JSM LWAM VTI VT 2 FWBA FWAM FWUP ENDS RMAX RUNSB ASLLN,I LAST WORD OF AVAILABLE MEM.

SET VALUE TABLE POINTR SET VALUE TABLE POINTR SET FIRST WORD OF BIN AREA FIRST WORD OF AVAILABLE R/W MEM.

SET FIRST WORD OF USER PROGRAM NULL PROGRAM NO R-REGISTERS ALLOCATED INITIALIZE SO THAT A CONT IS LEGAL SET LNO TO LAST LINE NO OR-I TURN-ON DISPLAY,ENABLE INTERRUPT JSM ALDSP,I DISPLAY INFO EIR ENABLE INTERRUPT 172 Page 123 172 02095000 02096000 02097000 02098000 02099000 02100000 02101000 02102000 02103000 02104000 02105000 02106000 02107000 02108000 02109000 02110000 02111000 02112000 02113000 02114000 02115000 02116000 02117000 02118000 02119000 02120000 02121000 02122000 02123000 02124000 02125000 02126000 02127000 02128000 02129000 02130000 02131000 02132000 02133000 02134000 02135000 02136000 02137000 02138000 02139000 02140000 02141000 02142000 02143000 02144000 02145000 02146000 02147000 02148000 02149000 02150000 1,568,094 CONTROL SUPERVISOR c a 165511 MCL 140504 MCLX 140454 MLCK 172277 031207 MLK 001206 043242 140432 MCLI 067062 MAIN CONTROL LOOP JMP JSM JSM SAP STA LDA JSM JSM JMP MLBPL,I ARNLFI ARPRL I M LCK,C WMOD WKC KYPRC ADSPC,I MCL GO THRU MAIN LOOP BYPASS LINK TURN OFF RUN LIGHT GET NEW KEY FLAG, DISTRIBUTE POWER KEEP LOOKING IF FLAG IS NOT SET RESET NEW KEY FLAG GET KEY CODE PROCESS THE KEY DISPLAY THE NEW KEY LOOP SYSTEM RESET AFTER SYSTEMRESET SYSTEM IS READY RESETS JSM STACK: RESETS STOLEN MEM PTR STRIPS EXECUTIONSTACK; CLEARS SYSTEM FLAGS CHECKS LINE BRIDGES OF PROGRAM:DISPLAYS LINE# BEING EXECUTED 000300 RESET 030003 001305 031306 001265 030017 140361 043137 001257 031234 042040 031232 031613 031255 031623 031314 040717 004344 10115 140523 10116 140514 LDA STA LDA STA LDA STA JSM JSM LDA STA JSM STA STA STA STA STA JSM LDB AJSTK R OFWAM FWAM HERE D AINTI,I SRWLK CSTAT TMP 4 CLRST CFLAG RENFG XCOMM LKFLG TE STELM MAW JSM AGLNO,I JSM ASLLNI 001234 072416 005626 010143 067133 010142 067133 LDA SZA LDB CPA JMP CPA JMP TMP 4 NOLNN ENSV+ 2 P 4 RLINN P 5 RLINN JSM STACK S/A-I SET RET STACK POINTR FIRST WORD OF ACTUAL R/W RESET AVAILABLE MEM PTR SET FLAG FOR AUTO START ROUTINES RESET EXECUTION STACK SET R/W LINKS INIT OPTION ROMS SAVE CONTROL STATE CLEAR CSTAT, LEAVE A PO IN "A' RESET CONTROL FLAG CLEAR RENUMBER,REWIND FLAG CLEAR ANY PENDING INTERRUPTS ENABLE LIVE KBD CLEAR MASTER TRACE FLAG SET EOL MODE SEE IF PROGRAM STRUCTURE STILL INTACT SEARCH THROUGH LINE BRIDGES RESET LINE NO.

PUT CORRECT LINE NUMBER IN DISPLAY SKIP IF STATE= O GET ENTER SAVED HERE WAITING FOR ENTER YES, PUT LINE IN h/O BUFFER EXECUTION IN ENTER? YES 173 Page 124 173 10062 10063 10064 10065 10066 10067 10070 10071 10072 02151000 02152000 02153000 02154000 02155000 02156000 0215700 02158000 02159000 02160000 02161000 02162000 02163000 02164000 02165000 02166000 02167000 02168000 02169000 02170000 02171000 02172000 02173000 02174000 02175000 02176000 02177000 02178000 02179000 02180000 02181000 02182000 02183000 02184000 02185000 02186000 02187000 02188000 02189000 02190000 02191000 02192000 02193000 02194000 02195000 02196000 02197000 02198000 02199000 02200000 02201000 02202000 02203000 02204000 02205000 02206000 10073 10074 10075 10076 10077 10100 10101 10102 10103 10104 10105 10106 10107 10110 10111 10112 10113 10114 10117 10120 10121 10122 10123 10124 10125 1,568,094 CONTROL SUPERVISOR 10126 10127 10130 10131 10132 10133 10134 10135 005607 010144 067133 073405 004017 043421 RLINN 000177 031232 10136 067060 LDB CPA JMP RLA LDB JSM LDA STA LKTMP+ 2 GET SAVED WHERE FOR LIVE KBD P 3 EXECUTION IN LIVE KB D? RLINN YES, PUT LINE # IN I/O BUFFER NOLNN SKIP IF STATE=I D STATE MUST BE 2 OR 6 SO USE HERE STEP 4 PLACE LINE# IN I/O BUFFER PO RESET CONTROL FLAG CFLAG NOLNN JMP SETMI COMPLETE RESET INIT SET R/W LINKS,SET INTERRUPT TABLE, INIT OPTION ROMS ROUTINES SHARED BY POWER-ON AND RESET 10137 10140 10141 10142 10143 10144 10145 10146 10147 10150 10151 10152 10153 10154 10155 10156 10157 10160 10161 10162 10163 000367 SRWLK 031507 000406 031260 000403 031511 000714 031533 000112 031217 000730 031526 000275 SETIT 172701 030010 000275 004434 134000 004410 072101 SETI 134000 02253000 10164 012567 02254000 10165 067167 02255000 10166 067162 02256000 02257000 02258000 02259000 10167 140447 STEDT 02260000 10170 140452 LDA STA LDA STA LDA STA LDA STA LDA STA LDA STA ASTP ELINK APEMI ERRBP AMCLX MLBPL ARETI 1 RLINK B 51 WPRT AREPN APP# GET ADDR OF STOP ROUT.

INIT END-STMT LINK ADDR OF COMMON ERROR SUBR.

SET LINK FOR NORMAL ERROR ROUT.

MAIN LOOP ADDR+ 1 SET MAIN LOOP BYPASS LINK TERMINATE RUN LINK WITH A RETURN SET RUN LINK FOR OPTION ROMS SET FOR FIXED 2, FLOAT 9 SET ERROR ADDR FOR P# EXECUTION SET INTERRUP TABLE ON TURN-ON:

KEYBOARD LINKAND REJECT LINKS LDA AITAB SAM + I,S STA IV LDA AITAB LDB AKBSR STB A,I LDB AREJR RIA + 1 STB A,I CPA LITAD JMP STEDT JMP SETI JSM ASWIO,I JSM AEOLB,I GET INTERRUPT TABLE ADDR SET BIT 15 FOR INDIRECT SET INTERRUPT VECTOR POINTER GET INTERRUPT TABLE ADDR KEYBOARD SERVICE ROUTINE ADDR IN INTRPT TABLE REJECT ROUTINE ADDR INCRM TABLE ADDR FILL REST OF TABLE WITH REJECT ADDRESS LAST INTERPT TABLE ADDR? YES, DONE NO: SET ADDITIONAL ADDRS SET POINTERS TO EDIT I/O BUFFER PUT EOL IN BUFFER, RESET EDIT POINTERS 174 Page 125 174 02207000 02208000 02209000 02210000 02211000 02212000 02213000 02214000 02215000 02216000 02217000 02218000 02219000 02220000 02221000 02222000 02223000 02224000 02225000 02226000 02227000 02228000 02229000 02230000 02231000 02232000 02233000 02234000 02235000 02236000 02237000 02238000 02239000 02240000 02241000 02242000 02243000 02244000 02245000 02246000 02247000 02248000 02249000 02250000 02251000 02252000 02261000 02262000 1,568,094 175 CONTROL SUPERVISOR SORFI SET OPTION ROM TABLE 10171 140600 SORFI 000327 020254 071617 020127 004331 134000 020254 004257 134000 006576 000001 RINT 020236 011305 067225 010224 067225 030001 020143 100000 010257 067204 000001 020142 100000 020326 134000 067204 JSM ACSTI,I CASSETTE INITIALIZATION RESETOPTION ROM TABLE LDA AROMS ADA Pl CLR 16 ADA P 16 LDB AMAIN STB A,I ADA Pl LDB M I STB A,I S/A OF TABLE

SKIP OVER BINARY PROG LINK CLEAR TABLE

SET MAIN SYSTEM ADDRESS SET END OF TABLE INITIALIZE OPTION ROM TABLE LDB LDA ADA CPA JMP CPA JMP STA ADA LDA CPA JMP LDA ADA LDA ADA STB JMP ASYSM B B 2 K OFWAM ROMIN B 60 K ROMIN B P 4 A,l Ml RINT B P 5 A,I ATROM A,I RINT START SEARCH AT SYSTEM ROM ADDR SET CURRENT ADDR LOOK AT NEXT HIGHER IK START OF R/W;END OF ROM ADDR SPACE? INITIALIZE ROMS IF SO END OF ROM ADDRESSES? TABLE FILLED IF SO SAVE POSSIBLE ROM S/A GET ROM INIT ADDR ROM PRESENT? NO, CHECK NEXT ROM GET ROM S/A AGAIN POINT TO ROM ID GET ROM ID CALCULATE ADDR TO PUT ROM S/A STORE ROM ADDR FOR THIS ID CHECK FOR ANOTHER ROM INITIALIZE THE OPTION ROMS INITIALIZE THE OPTION ROMS 10225 000327 ROMIN 10226 020127 10227 031227 10230 101227 RMINI 10231 072404 10232 020143 10233 100000 10234 140000 10235 001227 RMIN 2 10236 010327 10237 170201 10240 055227 10241 067230 LDA ADA STA LDA SZA ADA LDA JSM LDA CPA RET DSZ JMP AROMS P 16 TM Pl TMPI,I RMIN 2 P 4 A,I A,I TM Pl AROMS 1 TM Pl RMINI S/A OF OPTION ROM ADDR TABLE START WITH THE HIGHEST ID ROM SAVE ROM TABLE PTR GET ROM ADDR SKIP IF ROM NOT PRESENT ROM INIT ADDR GET ADDRESS INIT THE ROM DONE WITH ALL THE OPTION ROMS? YES NO, POINT TO NEXT ROM ADDR Page 126 10172 10173 10174 10175 10176 10177 10200 10201 10202 10203 10204 10205 10206 10207 10210 10211 10212 10213 10214 10215 10216 10217 10220 10221 10222 10223 10224 02263000 02264000 02265000 02266000 02267000 02268000 02269000 0227000 02271000 02272000 02273000 02274000 02275000 02276000 02277000 02278000 02279000 02280000 02281000 02282000 02283000 02284000 02285000 02286000 02287000 02288000 02289000 02290000 02291000 02292000 02293000 02294000 02295000 02296000 02297000 02298000 02299000 02300000 02301000 02302000 02303000 0230400 02305000 02306000 02307000 02308000 02309000 02310000 02311000 02312000 02313000 02314000 02315000 02316000 02317000 02318000 1,568,094 1,568,094 CONTROL SUPERVISOR THE CONTROL SUPERVISOR DIRECTS ALL KEYCODES LOADED BY THE KEYBOARD INTERRUPT ROUTINE TO THE PROPER HANDLING ROUTINE.

ENTRY: A = KEY CODE TABLE ADDR = BASE + MODE + 5 (CN) THE CONTENTS OF THE ADDR POINTS TO THE PROCESSING ROUTINE THIS TABLE OF ADDRESSES CAN BE CONSID AS A MATRIX OF SIZE ( 5,21) WHERE EACH ELEMENT IS FOUND BY (MODE,CN).

MODE IS THE CONTROL SUPERVISOR CONTROLLING FLAG.

CN IS THE CONTROL NUMBER FOUND IN MTABLE KEY PROCESSING TABLE ENTRY KYPRC: A CONTAINS KEY IF STATE = 2 OR 4 THEN ENTRY 3 IN THE TABLE IS USED IF THIS ADDR IS ZERO THEN THE MODE ENTRY IS USED THE MODE ENTRY IS ALLWAYS USED IF THE STATE IS ZERO MODE IS 0,1,2,0 R 4 10242 031235 KYPRC 10243 020167 10244 172002 10245 067250 10246 004126 10247 067251 10250 043300 KYCN 2 10251 014135 PRG 1 10252 067261 10253 001232 10254 170705 10255 172602 10256 073201 10257 170711 LASRC 10260 031232 10261 001257 KYREC 10262 072404 10263 000144 10264 067267 10265 005227 PRG 3 STA ADA SAP JMP LDB JMP JSM CPB JMP LDA RAR SAM SLA RAR STA LDA SZA LDA JMP LDB SKEY BM 200 + 2 KYCN 2 P 17 PRG 1 SKCD P O lo KYREC CFLAG 6 LASRC,C LASRC,C CFLAG CSTAT PRG 2 P 3 PRG 4 TM Pl SAVE NEW CODE SPECIAL KEY? NO SPECIAL KEY CN = B 2 i GET CONTROL # FROM MTABLE SEE IF RECALL KEY YES NO,CLEAR BIT 5 OF CFLAG, AND MODIFY IF BIT 5 IS SET LEAVE BIT 6 = I CLEAR BIT 5 IN ALL CASES BIT 5 =OSOCLEAR BIT 6 REPOSITION FLAG RESTORE FLAG IF STATE = 0 USE MODE ENTRY INTO TABLE

STATE MUST BE 2 OR 4 SO USE ENTRY 3 RESTORE B BEFORE RECALCULATE Page 127 02319000 02320000 02321000 02322000 02323000 02324000 02325000 02326000 02327000 02328000 02329000 02330000 02331000 02332000 02333000 02334000 02335000 02336000 02337000 02338000 02339000 02340000 02341000 02342000 02343000 02344000 02345000 02346000 02347000 02348000 02349000 02350000 02351000 02352000 02353000 02354000 02355000 02356000 02357000 02358000 02359000 02360000 02361000 02362000 02363000 02364000 02365000 02366000 02367000 02368000 02369000 02370000 02371000 02372000 02373000 02374000 176 176 1,568,094 CONTROL SUPERVISOR 001256 PRG 2 035227 PRG 4 174601 025227 024000 026613 000177 110001 067265 164001 LDA STB SBL ADB ADB ADB LDA CPA JMP JMP MODE TM Pl 2 TM Pl A ATBL PO B,l PRG 3 B,I 177 USE MODE ENTRY CALCULATE TABLE ADDR MPYBY 4 B= 5 (CN) B=ENTRY # + 5 (CN) B=ADDR,I OF PROCESSING ROUTINE IFADDR= O THEN USE MODE ENTRY #0 SO GO TO THE PROCESSING ROUTINE GETMTABLECODE

GET MTABLE CODE ENTRY: ASCII CODE IN "SKEY" e EXIT: CONTROL NUMBER IN B-REG 001235 004460 034016 074561 014045 067315 SKCD SMTBL SMTB l 010001 067312 074561 067303 074561 SMTB 2 174502 170201 10315 004134 SKCDI 10316 170201 10317 140404 ERILO 10320 030065 10321 140451 PEOL 10322 040715 LDA LDB STB WBC CPB JMP CPA JMP WBC JMP WBC SBR RET SKEY AKYTB C B,I B 377 SKCDI B SMTB 2 B,I SMTB 1 B,l 3 LDB B 13 RET I JSM AERRI,I ASC 1,05 GET KEY CODE GET TABLE ADDR SET C-REG GET UPPER HALF BYTE END-OF-TABLE?

YES CODE FOUND? YES NO, BYPASS RIGHT-HALF CONTINUE GET MCODE GET CONTROL NUMBER MUST BE PROGRAMMING KEY CN= 13 ILLEGAL OPERATION NEW KEY AFTER "EOL" MODE IS SET JSM ACLEB,I CLEAR EDIT BUFFER JSM CLMOD RESET TO KBD MODE ALPHANUMERIC KEYS 10266 10267 10270 10271 10272 10273 10274 10275 10276 10277 177 Page 128 02375000 02376000 02377000 02378000 02379000 02380000 02381000 02382000 02383000 02384000 02385000 02386000 02387000 02388000 02389000 02390000 02391000 02392000 02393000 02394000 02395000 02396000 02397000 02398000 02399000 02400000 02401000 02402000 02403000 02404000 02405000 02406000 02407000 024080 02409000 02410000 02411000 02412000 02413000 02414000 02415000 02416000 02417000 02418000 02419000 02420000 02421000 02422000 02423000 02424000 02425000 02426000 02427000 02428000 02429000 02430000 10300 10301 10302 10303 10304 10305 10306 10307 10310 10311 10312 10313 10314 178 1,568,094 178 CONTROL SUPERVISION 10323 140427 P 02 10324 067325 10325 164446 10326 140451 PALL 10327 001232 10330 172705 10331 031232 10332 003351 10333 131350 10334 067342 10335 10336 10337 10340 10341 10342 10343 10344 10345 10346 10347 10350 10351 10352 10353 10354 10355 10356 172601 PALLI 031232 003346 005350 071401 040715 STPLL 140432 140452 170202 010347 067546 063040 067556 043357 000063 043357 002571 AOFF ONMSG RESK 10357 031235 RESSB 10360 067323 10361 140451 REOL 10362 040715 10363 067352 JSM JMP JMP AISTR,I + 1 AFBP,I STORE CODE IN INPUT BUFF INPUT BUFF FULL; CHAR NOT STORED FIND DISP BEGIN POINTR AND PRINT-ALL KEY JSM LDA SAM STA LDA STA JMP SAM STA LDA LDB XFR JSM JSM JSM RET DEF OCT OCT OCT ACLEB,I CFLAG PALLI,S CFLAG ONMSG AEBUF,I STPLL +I,C CFLAG AOFF AEBUF 2 CLMOD ADSPC,I AEOLB,I + 1 67546 63040 67556 CLEAR EDIT BUFFER GET CONTROL FLAG PRINT ALL SET? NO; SET IT; UPDATE CONTROL FLAG GET "ON" MESSAGE PLACE LINE NO IN I/O BUFFER DISPLAY ON/OFF MESSAGE CLEAR PRINT ALL UPDATE CONTROL FLAG ADDR OF "OFF" MESSAGE DESTINATION ADDR TRANSFER "OFF" IN I/O BUFF SET MODE = O DISPLAY ON/OFF MESSAGE CLR EDIT BUFFER LEAVE MESSAGE IN DISPLAY OF F BLANK ON RESULT KEY LDA JSM LDA JSM LDA PI 14 RESSB B 145 RESSB B 163 STA SKEY JMP P 02 GET LOWER CAS "R" PLACE CODE IN I/O BUFF GET LOWER CASE "E" PLACE CODE IN I/O BUFF GET LOWER CASE "S" SAVE CODE STORE CODE IN I/O BUFF + RETURN P+ 1 RESULT KEY EOL MODE JSM ACLEB,I CLEAR EDIT BUFFER JSM CLMOD SET KBD MODE JMP RESK Page 129 02431000 02432000 02433000 02434000 02435000 02636000 02437000 02438000 02439000 02440000 02441000 02442000 02443000 02444000 02445000 02446000 02447000 02448000 02449000 02450000 02451000 02452000 02453000 02454000 02455000 02456000 02457000 02458000 02459000 02460000 02461000 02462000 02463000 02464000 02465000 02466000 02467000 02468000 02469000 02470000 02471000 02472000 02473000 02474000 02475000 02476000 02477000 02478000 02479000 02480000 02481000 02482000 02483000 02484000 02485000 02486000 1,568,094 A-.

178 178 1,568,094 CONTROL SUPERVISOR CNINT CONTINUE INITIALIZATION CNINS PRE CONTINUE INIT a as as 040717 CNINS 140452 140433 031257 140503 CNINN 001232 CNINT 170702 172406 140361 140360 000254 031063 141533 001232 CRUND 050160 060143 031232 170201 JSM JSM JSM LDA STA JSM LDA RAR SAM JSM JSM LDA STA JSM LDA AND IOR STA RET STELM AEOLB,I ALDSP,I P 2 CSTAT ARNLO,I CFLAG 3 CRUND AINTI,I ARSGT,I Pl NPROG RLINK, I CFLAG M 16 P 4 CFLAG I SET MODE = 4 CLR DISPLAY SET RUN STATE TURN ON RUN LIGHT SEE IF RUN ALREADY DONE POSITION RUN BIT 2 SKIP IF DONE NOT DONE, STRIP EXEC STACK RESET HI SPEED GTO/GSB'S AND RESET HERE,WHERE SET FLAG FOR RLINK-CONTINUE INIT ALLOWS ROMS TO INIT CLEAR BITS 0-3 OF CFLAG SET RUN DONE BIT 2 RESTORE FLAGS STEP KEY EXECUTION IF RUN DONE BIT IS CLEARED DOES A CONTINUE INIT AND DISPLAYS LINE # O IF RUN HAS BEEN DONE, CHECKS STEP DONE BIT OF CFLAG EXECUTES LINE INDICATED BY WHERE (SETS A BIT IN XCOMM SO IT WILL STOP AT THE END OF THE LINE); IF BIT NOT SET DISPLAYS LINE # INDICATED BY WHERE 001232 STEPK 170702 172022 073006 000052 LDA RAR SAP SLA LDA CFLAG 3 STE Pl STEP 3 B 200 GET CONTROL FLAG POSITION RUN FLAG (BIT 2) "RUN" DONE? YES; STEP DONE BEFORE? YES; SET A STOP CONDITION 10364 10365 10366 10367 10370 10371 10372 10373 10374 10375 10376 10377 10400 10401 10402 10403 10404 10405 10406 Page 130 02487000 02488000 02489000 02490000 02491000 02492000 02493000 02494000 02495000 02496000 02497000 02498000 02499000 0250000 02501000 02502000 02503000 02504000 02505000 02506000 02507000 02508000 02509000 02510000 02511000 02512000 02513000 02514000 02515000 02516000 02517000 02518000 02519000 02520000 02521000 02522000 02523000 02524000 02525000 02526000 02527000 02528000 02529000 02530000 02531000 02532000 02533000 02534000 02535000 02536000 02537000 02538000 02539000 02540000 02541000 02542000 10407 10410 10411 10412 10413 179 179 1,568,094 CONTROL SUPERVISOR.

10414 10415 10416 10417 031255 043364 005266 067516 10420 005266 10421 140523 10422 140476 10423 140475 10424 000077 10425 074550 10426 140436 10427 043402 10430 060133 10431 031232 10432 064717 10433 10434 10435 10436 STEP 3 STEP 3 STEP 4 STEP 2 s 043371 STE Pl 004177 035226 067422 10437 140435 EXCK 10440 000177 10441 031316 10442 031255 10443 140503 10444 140461 10445 000327 10446 031712 10447 101712 EXCK 3 10450 072417 10451 010331 10452 067471 10453 020144 10454 100000 10455 010257 10456 067467 10457 031714 10460 172701 10461 043604 10462 067467 10463 174040 10464 025714 10465 176701 STA JSM LDB JMP LDB JSM JSM JSM LDA PBD JSM JSM IOR STA JMP JSM LDB STB JMP XCOMM CNINS WHERE EXC 52 WHERE AGLNO,I ATLNI,I AEDPT,I COLLN A,I AEPON,I CRUND P 12 CFLAG STELM CNINN PO LNO STEP 2 IN XCOMM CONTINUE INIT S/A OF LINE TO START EXECUTION START RUNNING THE PROGRAM GET ADDR OF NEXT LINE AND FIND ITS LINE NO.

PLACE ITS NO IN I/O BUFFER RESET EDIT PTRS GET COLLON INCREM AND PLACE IN I/O BUFF GO THRU PRINT ALL SET CFLAG SET STEP AND RUN FLAGS UPDATE CONTROL FLAG SET EOL MODE AND RETURN P+ I CONTINUE INIT WITH RUN LIGHT ON SET FOR LINE 0 DISP NEXT LINE NO AND EXIT COMMAND EXECUTION JUMP TO THE PROPER COMMAND ROUTINE IF A COMMAND IS FOUND; OTHERWISE GO TO THE INTERPRETER JSM ATRBF,I LDA PO STA CERR STA XCOMM JSM ARNLO,I JSM APRKB,I LDA AROMS STA T 2 LDA T 2 +I SZA EXCK 2 CPA AMAIN JMP EXCK 4 ADA P 3 LDA A,I CPA M 1 JMP EXCK 2 STA T 4 SAM + I,S JSM CTFC JMP EXCK 2 TCB ADB T 4 SBM +I,S TRANSFER BUFFERS CLEAR COMPILE ERROR FLAG CLEAR XCOMM TURN ON RUN LIGHT GO THROUGH PRINT-ALL,KBD BUFFER ADDR OF OPTION ROM TABLE AND SAVE THE ADDR GET ROM ADDR SKIP IF THE ROM IS NOT PRESENT END OF TABLE?

EXIT LOOP IF SO POINT TO COMMAND ENTRY GET ROM WORD ENTRY PRESENT? NO; GO TO NEXT ROM SAVE S/A OF COMMAND TABLE POINT TO UPPER HALF CHECK TABLE FOR COMMAND NOT FOUND MAKE OPCODE NEGATIVE B = EXECUTION ROUTINE ADDR POINTR SET INDIRECT Page 131 02543000 02544000 02545000 02546000 02547000 02548000 02549000 02550000 02551000 02552000 02553000 02554000 02555000 02556000 02557000 02558000 02559000 02560000 02561000 02562000 02563000 02564000 02565000 02566000 02567000 02568000 02569000 02570000 02571000 02572000 02573000 02574000 02575000 02576000 02577000 02578000 02579000 02580000 02581000 02582000 02583000 02584000 02585000 02586000 02587000 02588000 02589000 02590000 02591000 02592000 02593000 02594000 02595000 02596000 02597000 02598000 1,568,094 CONTROL SUPERVISOR 10466 164001 10467 045712 10470 067447 10471 000413 10472 043604 10473 067504 10474 17404010475 026570 10476 164001 10477 001257 10500 010145 10501 164457 EXCK 2 EXCK 2 EXCK 4 EXCST 10502 140435 10503 140461 10504 10505 10506 10507 10510 10511 10512 10513 10514 10515 10516 10517 140515 EXC 51 001257 020254 031257 000177 031517 043542 140503 001266 031317 140364 EXC 52 001257 EXC 54 10520 010143 10521 170201 10522 10523 10524 10525 10526 10527 10530 10531 10532 10533 10534 10535 10536 140411 067526 005266 067516 001257 010145 067534 001317 031266 066032 ERSTP 077003 ERSS 043420 066032 JMP B,I ISZ JMP LDA 181 GO TO THE ROUTINE T 2 EXCK 3 ACNDT JSM CTFC JMP EXCSI TCB ADB ASCDI JMP B,I INC TABLE ADDR KEEP LOOKING ADDR OF MAIN FRAME COMMAND TABLE

CHECK TABLE FOR COMMAND NOT FOUND FOUND; MAKE OPCODE NEGATIVE B=EXECUTION ROUTINE ADDR POINTER GO TO THE ROUTINE STATEMENT EXECUTION

LDA CSTAT GET STATE VARIABLE CPA P 2 LIVE KBD EXECUTE? JMP ALXKY,I YES, USE LIVE KBD ROUTINES JSM ATRBF,I TRANSFER LINE TO KBD BUFFER JSM APRKB,I YES, SO GOT THROUGH PRINTALL, KBD BUF JSM LDA ADA STA LDA STA JSM JSM LDA STA JSM LDA ASTKI,I CSTAT Pl CSTAT PO RGFLG EXCSS ARNLO,I WHERE SWHRE AINTK,I CSTAT CPA P 4 RET I JSM JMP LDB JMP LDA CPA JMP LDA STA JMP SLB JSM JMP STACK SYSTEM INFO STATES 0,2,4 BECOME STATES 1,3,5 ALLOW IMPLIED STORAGE INTO RES REG COMPILE LINE, SET BRIDGES TURN ON RUN LIGHT SAVE WHERE GO TO INTERPRETER GET STATE VARIABLE DONE WITH PRE ENTER? YES, RETURN TO IDLE LOOP AXCMM,IGO AND WORK ON XCOMM ERSTP J'CB COMPLETE OR STOP WHERE XCOMM CLEAR: GET S/A OF NEXT OP EXC 52 RESUME INTERPRETER ACTION CSTAT P 2 ERSS SWHRE WHERE EREX 2 STPPR STEP 3 EREX 2 DON'T UNSTACK IF STATE = 2 STATE = 2 SO MUST BE A STOP CONDITION STATE #2 SO UNSTACK, RESTORE WHERE STATE #2 SO UNSTACK SKIP IF STP STMT OR END STMT PUT LINE # IN DISPLAY CHANGE STATE LDB WHERE GET ADDR OF NEXT LINE 181 Page 132 02599000 02600000 02601000 02602000 02603000 02604000 02605000 02606000 02607000 02608000 02609000 02610000 02611000 02612000 02613000 02614000 02615000 02616000 02617000 02618000 02619000 02620000 02621000 02622000 02623000 02624000 02625000 02626000 02627000 -02628000 02629000 02630000 02631000 02632000 02633000 02634000 02635000 02636000 02637000 02638000 02639000 02640000 02641000 02642000 02643000 02644000 02645000 02646000 02647000 02648000 02649000 02650000 02651000 02652000 02653000 02654000 10537 005266 STPPR 1,568,094 CONTROL SUPERVISOR 10540 140523 10541 066032 182 JSM AGLNO,I FIND LINE NO.

JMP EREX 2 CHANGE STATE COMPILE LINE AND CREATE LINE STRUCTURE REDISPLAYS EDITBUFFER IF CURSOR IS SET EXIT: B = COMPILE BUFF S/A 001214 EXCSS 072406 000177 031214 140432 004155 040633 140452 EXCSB 000214 130311 140346 140510 020254 020165 172404 072403 140404 030070 ERLLN 044016 EXCK 7 004016 176002 074760 001234 170607 070540 004016 024254 034017 004303 140467 001234 130303 004303 170201 LDA SZA LDA STA JSM LDB JSM JSM LDA STA JSM JSM ADA ADA SAM SZA JSM ASC ISZ LDB SBP WBC LDA SAL PWC LDB ADB STB LDB JSM LDA STA LDB RET CRSP EXCSB PO CRSP ADSPC,I M Il DELAY AEOLB,I EOLB AKBFL,I ACPLR,I AGLL,I Pl M 80 EXCK 7 EXCK 7 AERRI,I 1,08 C C + 2 A,D TMP 4 8 A,I C Pl D ACBF SEE IF CURSOR SET DON'T REDISPLAY IF NOT STRIP CURSOR FROM DISPLAY DISPLAY LINE WITHOUT CURSOR WAIT 11 MS FOR DISPLAY PUT EOL IN I/O BUFFER GET EOL AND BLANK STORE IN LAST WORD OF KEYBOARD BUFFER GO TO COMPILER GET LENGTH OF LINE INCLUDE END LINK COMPILE BUFF = 80 W LENGTH < 80 W? NO; LENGTH = 80 W? NO; LINE TOO LONG ADJUST POINTER GET C-REG POINTR = NEW WORD? YES; POINT TO PREVIOUS WORD GET LINE LENGT POSITION IN UPPER HALF INCRM AND STORE END LINK GET C-REG POINT TO NEXT WORD SET START DESTIN, ADDR END SOURCE ADDR AMTHM,I SHIFT INFO HIGHER ONE WORD TMP 4 GET LENGTH OF LINE ACBF,I CREATE FRONT LINK ACBF COMPILE BUFF S/A I CHECK TABLE FOR COMMAND ENTRY: A =TABLE POINTER ACTFCENTRY B = BUFF S/A EXIT: RET P + 1 NOT FOUND 182 Page 133 02655000 02656000 02657000 02658000 02659000 02660000 02661000 02662000 02663000 02664000 02665000 02666000 02667000 02668000 02669000 02670000 02671000 02672000 02673000 02674000 02675000 02676000 02677000 02678000 02679000 02680000 02681000 02682000 02683000 02684000 02685000 02686000 02687000 02688000 02689000 02690000 02691000 02692000 02693000 02694000 02695000 02696000 02697000 02698000 02699000 02700000 02701000 02702000 02703000 02704000 02705000 02706000 02707000 02708000 02709000 02710000 10542 10543 10544 10545 10546 10547 10550 10551 10552 10553 10554 10555 10556 10557 10560 10561 10562 10563 10564 10565 10566 10567 10570 10571 10572 10573 10574 10575 10576 10577 10600 10601 10602 10603 004307 030017 035227 005227 035222 140501 074571 174706 077015 001713 072411 174601 174512 001222 030016 074760 000016 031222 170202 10627 176060 10630 170201 CTFC CTFC 8 CTFC 7 CTFC 6 CTFCI 174710 CTFC 2 010001 067644 000177 031713 074571 CTFC 3 174706 077076 176402 067607 170201 CTFC 4 000254 CTFC 5 031713 067611 023775 011321 023776 010674 011337 183 1,568,094 CONTROL SUPERVISOR RET P + 2 FOUND B = OPCODE LDB STA STB LDB STB JSM WBD RBR SLB LDA SZA SBL SBR LDA STA WBC LDA STA RET AKBFX D TM Pl TM Pl L AGNXT,I B,I 7 CTFC 2 T 3 CTFC I 2 11 L C A,D C L SBP CTFC 7 RET 1 RBR CPA JMP LDA STA WBD RBR SLB SBM JMP RET LDA STA JMP 9 B CTFC 5 PO T 3 B,I 7 CTFC 3 CTFC 4 CTFC 7 Pl T 3 CTFC 6 ADDR OF KBD BUFFER SET TABLE PTR

SET BUFFER START ADDR GET BUFFER START ADDR FOR "GNEXT" GET CHAR FROM I/O BUFF GET CHAR FROM TABLE POSITION END OF ENTRY BIT END OF ENTRY? YES; GET COMPARE FLAG COMMAND FOUND YES; DROP TWO FLAG BITS DROP END OF ENTRY BIT GET "L", GNEXT, POINTR DUMMY WITHDRAW AND DECRM GET POINTR UPDATE "L" POINTR END OF TABLE?

YES REPOSITION CHAR IN LOWER HALF CHARS COMPARE? YES NO CLEAR COMPARE FLAG GET NEXT CHAR POSITION END OF ENTRY BIT IS THIS THE OPCODE? YES; END OF TABLE? NO; CONT SEARCH SET COMPARE FLAG CONT WITH SAME ENTRY MAIN FRAME COMMAND ADDRESSES DEF DEF DEF DEF DEF 23775 B ECONT 23776 B FETCH ERUX DEL LINE CONTINUE ERASE FETCH LINE RUN MAIN FRAME COMMAND TABLE 10604 10605 10606 10607 10610 10611 10612 10613 10614 10615 10616 10617 10620 10621 10622 10623 10624 10625 10626 183 Page 134 02711000 02712000 02713000 02714000 02715000 02716000 02717000 02718000 02719 0000 02720000 02721000 02722000 02723000 02724000 02725000 02726000 02727000 02728000 02729000 02730000 02731000 02732000 02733000 02734000 02735000 02736000 02737000 02738000 02739000 02740000 02741000 02742000 02743000 02744000 02745000 02746000 02747000 02748000 02749000 02750000 02751000 02752000 02753000 02754000 02755000 02756000 02757000 02758000 02759000 02760000 02761000 02762000 02763000 02764000 02765000 02766000 10631 10632 10633 10634 10635 10636 10637 10640 10641 10642 10643 10644 10645 10646 10647 10650 10651 10652 10653 10654 10655 10656 10657 10660 10661 10662 10663 10664 10665 10666 10667 10670 10671 10672 10673 10674 10675 10676 10677 10700 10701 10702 10703 10704 10705 10706 10707 10710 10711 10712 10713 10714 10715 10716 10717 1,568,094 CONTROL SUPERVISOR 000154 SCNDT 064563 072206 063145 CNDT 072143 064202 062562 060563 062603 062145 066205 071165 067201 061557 067164 142000 043761 FETCH 140501 010053 067720 140507 035226 FETC 5 001232 FETC 3 050150 031232 140512 067715 004254 FTCHX 035256 005232 077301 035232 067722 040717 FETC 2 140514 164452 10720 004177 FETC 4 10721 067701 OCT OCT OCT DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC OCT 154 64563 72206 26213 29795 26754 25970 24947 25987 25701 27781 29301 28289 25455 28276 142000 184 OL IS T OPCODE 6 LIST FE TC H OPCODE 2 FETCH ER AS E OPCODE 3 ERASE DE L OPCODE 5 -DEL RU N OPCODE 1 -RUN CO NT OPCODE 4 CONT (EOT) FETCH ONE LINE OF PROGRAM JSM JSM CPA JMP JSM STB LDA AND STA JSM JMP LDB STB LDB SLB STB JMP JSM JSM JMP FLIN AGNXT,I EOL FETC 4 AINTC,I LNO CFLAG M 4 CFLAG AFLAD,I FETC 2 Pl MODE CFLAG + 1,S CFLAG PLIRC STELM ASLLNI AEOLB,I LDB PO JMP FETC 5 FETCH LINE INITIALIZATION GET NEXT CHAR FROM I/O BUFF LINE NO GIVEN? NO GET INTEGER SET LINE NO.

CLR FETCH, SPECIAL KEY BITS FROM CFLAG BITS 0,1 FIND LINE ADDR LINE NOT FOUND SET FETCH MODE SET FETCH BIT OF CFLAG PLACE LINE NO IN I/O BUFF SET MODE = 4 RESET LNO PUT EOL IN BUFFER DEFAULT = LNO 0 PLACE LINE NO IN I/O BUFF AND REV COMPILE ENTRY: A = ADDR OF LINE EXIT: REV COMPILED LINE IN I/O BUFF 184 Page 135 02767000 02768000 02769000 02770000 02771000 02772000 02773000 02774000 02775000 02776000 02777000 02778000 02779000 02780000 02781000 02782000 02783000 02784000 02785000 02786000 02787000 02788000 02789000 02790000 02791000 02792000 02793000 02794000 02795000 02796000 02797000 02798000 02799000 02800000 02801000 02802000 02803000 02804000 02805000 02806000 02807000 02808000 02809000 02810000 02811000 02812000 02813000 02814000 02815000 02816000 02817000 02818000 02819000 02820000 02821000 02822000 1,568,094 CONTROL SUPERVISOR 104000 PLIRC 174610 174510 072101 030016 024000 024146 000303 030017 140470 140476 000077 074550 000117 074550 004017 LDB SBL SBR RIA STA ADB A,I 9 9 + 1 C A GET LINE BRIDGE GET LINE LENGTH POINT TO SECOND WORD OF LINE SET C-REG ADB M 2 B = ENDSOURCEADDR LDA ACBF COMPILE BUFFS/A STA D SET D-REG JSM AMTLM,I MOVE THE LINE INTO COMPILE BUFF JSM ATLNI,I TRANSFER LINE NO TO I/O BUFF LDA COLLN GET COLLON PBD A,I INCRM AND PLACE IN I/O BUFF LDA B 40 GET BLANK PBD A,I INCRM AND PLACE IN I/O BUFF LDB D GET CHAR POINTR AND PASS TO REV.

CONIMP JMP ARCLR,I REVERSE COMPILE AND RETURN P + I UP-ARROW UP-ARROW 043761 UPAR 005226 001232 073002 024257 176450 FRSAR 035226 140512 140514 067702 043761 DNAR 045226 067760 067702 043761 DNAR 045226 067760 067702 DECREMENT THE CURRENT "LNO" AND FETCH THE CORRESPONDING LINE JSM LDB LDA SLA ADB SBM STB JSM JSM JMP FLIN LNO CFLAG FRSAR Ml FETC 4 LNO AFLAD I ASLLN,I FETC 3 FETCH LINE INIT GET CURRENT LINE NO.

SEE IF FETCH BIT SET SKIP IF FIRST UP ARROW DECREMENT LNO SET LNO -= O IF=-I SET LINE COUNTER FIND S/A OF LINE LINE NOT FOUND SET LNO TO LAST FETCH LINE LINE DOWN-ARROW INCREMENT THE CURRENT "LNO' AND FETCH THE CORRESPONDING LINE JSM ISZ JMP JMP FLIN LNO + 1 FETC 3 FETCH LINE INIT INCREM LINE NO.

FETCH LINE FETCH LINE INITIALIZATION EXIT: A = FWUP POINTER Page 136 10722 10723 10724 10725 10726 10727 10730 10731 10732 10733 10734 10735 10736 10737 10740 10741 10742 164356 02823000 02824000 02825000 02826000 02827000 02828000 02829000 02830000 02831000 02832000 02833000 02834000 02835000 02836000 02837000 02838000 02839000 02840000 02841000 02842000 02843000 02844000 02845000 02846000 02847000 02848000 02849000 02850000 02851000 02852000 02853000 02854000 02855000 02856000 02857000 02858000 02859000 02860000 02861000 02862000 02863000 02864000 02865)00 02866000 02867000 02868000 02869000 02870000 02871000 02872000 02873000 02874000 02875000 02876000 02877000 02878000 10743 10744 10745 10746 10747 10750 10751 10752 10753 10754 10755 10756 10757 10760 1,568,094 CONTROL SUPERVISOR 10761 040724 FLIN 10762 140453 10763 164475 JSM JSM JMP SECCK ACLCM,I AEDPT,I SEE IF PROGRAM IS SECURE CLEAR COMPILE BUFFER RESET EDIT POINTERS STOP, REW IN ENTER OR LIVE KBD 10764 10765 10766 10767 10770 10771 10772 10773 10774 10775 001235 010145 164601 172701 040744 004132 140376 140452 140503 066262 PINEN c :

10776 140404 REJR 10777 030061 11000 11001 11002 11003 11004 11005 11006 11007 11010 11011 11012 11013 070420 ERRI 141260 040717 EREXT 040703 042043 000177 EREXX 031613 001067 012566 066013 140436 001257 EREXI LDA CPA JMP SAM JSM LDB JSM JSM JSM JMP SKEY P 2 ARFK,I +I,S SXCMM P 13 ASFG,I AEOLB,I ARNLO,I XEN 5 GET KEYCODE REWIND? YES, REWIND AND RETURN SET BIT 15 (INTERRUPTING KEY) IOR TO PRESENT XCOMM SET FLAG 13 CLR I/O BUFF, PUT EOL IN BUFF TURN ON RUN LIGHT ABORT ENTER STMT REJECTION ROUTINE FOR INTERRUPT THAT DOES NOT HAVE A CORRECT INTRP TABLE ENTRY JSM AERRI,I ILLEGAL INTERRUPT ASC 1,01 ERROR MESSAGEGENERATOR WITHOUT RETURN CALL SEQUENCE: JSM AERRI,I ASC 1,XX WHERE XX = ERROR CODE EXIT:

"ERROR XX" IN DISP BUFFER "JSM" STACK IS RESET EIR JSM JSM JSM JSM LDA STA LDA CPA JMP JSM LDA ERRBP,I STELM BEEP EREX 3 PO ENABLE ALL INTERRUPTS GO THRU ERROR BYPASS LINK SET EOL MODE GIVE ERROR BEEP PUT LINE NO IN DISPLAY MAYBE CLEAR RENUMBER FLAG, REWIND KEY FLAG RENFG IBUFF + 3 GET ERROR "XX" PRPRB NO PRINTER OR NO PAPER? EREXI YES; BYPASS PRINT-ALL AEPON,I GO THRU PRINT ALL CSTAT GET STATE VARIAB 3 LE Page 137 02879000 02880000 02881000 02882000 02883000 02884000 02885000 02886000 02887000 02888000 02889000 02890000 02891000 02892000 02893000 02894000 02895000 02896000 02897000 02898000 02899000 02900000 02901000 02902000 02903000 02904000 02905000 02906000 02907000 02908000 02909000 02910000 02911000 02912000 02913000 02914000 02915000 02916000 02917000 02918000 02919000 02920000 02921000 02922000 02923000 02924000 02925000 02926000 02927000 02928000 02929000 02930000 02931000 02932000 02933000 02934000 186 186 1,568,094 CONTROL SUPERVISOR 1014 1015 1016 1017 1020 1021 1022 1023 1024 1025 1026 1027 1030 1031 010144 164456 010141 164456 042032 001257 EREX 4 010143 066026 001261 031263 ERENT 000300 030003 140433 165511 CPA JMP CPA JMP JSM LDA CPA JMP LDA STA P 3 ALXER,I P 6 ALXER,I EREX 2 CSTAT P 4 ERNOS AP 3 A Pl GO TO LIVE KBD ERROR PROCESSING IF STATE= 3 OR 6 CHANGE STATE GET CONTROL STATE IF STATE = 4 THEN DON'T STRIP EXEC SET API 1 BACK TO AP 3 ERNOS LDA AJSTK JSM STACK S/A-1 STA R RESET JSM STACK PTR JSM ALDSP I DISP ERROR MESSAGE JMP MLBPL,I GO TO IDLE (THRU MAIN BYPASS LINK) 8 a 8 S EREX 2 UNSTACKS API,AP 3, AND CHANGES STATE 1,3,5 TO 0,2,4; 2 TO O DOES NOT UNSTACK IF STATE = 0,2,4 1032 001257 EREX 2 1033 073004 1034 020257 1035 031257 1036 164516 1037 010145 EREX 5 1040 000177 CLRST 1041 031257 1042 170201 ERNON LDA SLA ADA STA JMP CSTAT EREX 5 Ml CSTAT AREST,I CPA P 2 LDAPO STA CSTAT RET I GET STATE VARIABLE DO NOT UNSTACK IF = 0, 2, OR 4 MAKE 1,3,5 = 0,2,4 RESTORE NEW STATE UNSTACK STATE = 2 ? MAKE STATE = O EREX 3 PUTS "IN LINE#" IN I/O BUFFER IF STATE = 2 OR 6 OR IF THE RENUMBER GTO/GSB FLAG IS SET 1043 1044 1045 1046 1047 1050 1051 1052 1053 1054 1055 1056 1057 1060 001257 EREX 3 010145 066052 010141 066052 001613 073071 002574 ELNO 031070 002575 031071 005265 140523 001307 LDA CPA JMP CPA JMP LDA SLA LDA STA LDA STA LDB JSM LDA CSTAT P 2 ELNO P 6 ELNO RENFG ERNON GET STATE VARIABLE RUNNING PROGRAM? YES, DSP LINE # RUN PROG FROM LIVE KBD? YES, DSP LINE # RENUMBERING GTO'S AND GSB'S? SKIP IF NOT AELNI GET "IN" MEAASGE IBUFF + 4 AELN 2 PUT IN I/O BUFFER IBUFF + 5 HERE GET CURRENT LINE ADDR AGLNO,I FWUP SET S/A OF NEXT LINE TO BE THE FIRST LINE Page 138 02935000 1 02936000 1 02937000 1 02938000 1 02939000 1 02940000 02941000 1 02942000 1 02943000 1 02944000 1 02945000 1 02946000 02947000 1 02948000 1 02949000 1 02950000 1 02951000 02952000 02953000 02954000 02955000 02956000 02957000 02958000 02959000 1 02960000 1 02961000 1 02962000 1 02963000 1 02964000 02965000 1 02966000 1 02967000 1 02968000 1 02969000 02970000 02971000 02972000 02973000 02974000 02975000 02976000 1 02977000 1 02978000 1 02979000 1 02980000 1 02981000 1 02982000 1 02983000 02984000 1 02985000 1 02986000 1 02987000 1 02988000 1 02989000 1 02990000 1 187 187 1,568,094 CONTROL SUPERVISOR 031266 006572 001226 164477 STA WHERE LDB AINLM LDA LNO JMP ABTDA,I SET FOR CONTINUE ROUTINES PTR FOR LINE NUMBER SET FOR ABTDA PLACE LINE NO IN I/O BUFF SYSTEM ERROR 11065 042000 SYSER 11066 030060 JSM ERRI ASC I,OO ERROR MESSAGE GENERATOR WITH RETURN CALL SEQUENCE: JSM AERR 2,I CALL SEQUENCE: JSM AERR 2,I 11067 070420 ERR 2 11070 141260 11071 170201 ASC 1,XX WHERE XX=ERROR CODE EXIT:

"ERROR XX" IN DISP BUFFR RET P+ 2 EIR JSM ERRBP,I RET 1 ENABLE INTERRUPTS PUT ERROR # IN I/O BUFFER RET 2 PLACE ERROR MESSAGE IN I/O BUFF 140451 PEMIO 002573 004313 071403 000003 020257 144000 100000 100000 031067 170201 JSM LDA LDB XFR LDA ADA ISZ LDA LDA STA RET ACLEB,I AERMS AIBUF 4 R M 1 Ml A,I A,I A,I IBUFF+ 3 CLEAR I/BUFFER GET "ERROR" ADDR I/O BUFF S/A TRANSFER "ERROR" TO I/O BUFF GET R-STACK POINTR POINT TO "JSM AERRX" ENTRY IN STACK POINT TO MESSAGE "XX" ADDR GET MESSAGE ADDR GET MESSAGE "XX" AND STORE IN I/O BUFF ENTER STATEMENT EXECUTION

PRE-ENTER 11105 000143 XENO 11106 031257 11107 004244 LDA P 4 SET ENTER STATE STA CSTAT LDB XMASK CLEAR LIVE KBD BIT FROM XCOMM 11061 11062 11063 11064 Page 139 02991000 02992000 02993000 02994000 02995000 02996000 02997000 02998000 02999000 03000000 03001000 03002000 03003000 03004000 03005000 03006000 03007000 03008000 03009000 03010000 03011000 03012000 03013000 03014000 03015000 03016000 03017000 03018000 03019000 03020000 03021000 03022000 03023000 03024000 03025000 03026000 03027000 03028000 03029000 03030000 03031000 03032000 03033000 03034000 03035000 03036000 03037000 03038000 03039000 03040000 03041000 03042000 03043000 03044000 03045000 03046000 11072 11073 11074 11075 11076 11077 11100 11101 11102 11103 11104 188 188 1,568,094 CONTROL SUPERVISOR 11110 11111 11112 11113 040740 031630 000177 031255 11114 040717 XENN 11115 140475 11116 11117 11120 11121 11122 11123 11124 11125 11126 11127 11130 11131 11132 001272 104000 174514 014145 066133 014141 066173 005272 040616 140377 000074 XEN 8 074550 066156 11133 020144 XENI 11134 104000 11135 076412 11136 140451 11137 001272 11140 020144 11141 104000 11142 020254 11143 172301 11144 030017 11145 000315 11146 140502 11147 000254 XEN 6 11150 140607 11151 000000 11152 105272 11153 174514 11154 014141 11155 066174 11156 11157 11160 11161 11162 11163 11164 11165 11166 11167 11170 11171 11172 000177 XEN 2 031326 001272 XEN 3 031625 001265 031626 001267 031627 001232 XENPP 170704 172002 164437 164436 JSM STA LDA STA CLXCM SVXCM PO XCOMM START WITH A CLEAR XCOMM JSM STELM SET EOL MODE JSM AEDPT,I RESET EDIT POINTERS LDA LDB SBR CPB JMP CPB JMP LDB JSM JSM LDA PBD JMP ADA LDB SZB' JSM LDA ADA LDB ADA SAP STA LDA JSM LDA JSM NOP LDB SBR CPB JMP LDA STA LDA STA LDA STA LDA STA LDA RAR SAP JMP JMP FA Pl A,I 13 P 2 XEN I P 6 XEN 9 LOOK AT NEXT PARAMETER IS IT A STRING CONSTANT? YES IS IT A STRING VARIABLE? FA Pl IT MUST BE NUMERIC ABSAD+ 1 I AGNAM,I GET THE NAME B 77 A,I XEN 2 P 3 AI XEN 6 ACLEB,I FAPI 1 P 3 A,I Pl + I,S D AIBFM ATCHR,I Pl ABUMP,I FAPI,I 13 P 6 XENI 5 PO STEFL FAP I ENSV+ 1 HERE ENSV+ 2 TRACE ENSV+ 3 CFLAG + 2 AEPNX,I AEPON,I OUTPUT "?" GET LENGTH OF STRING CONSTANT SKIP IF NULL STRING CLEAR I/O BUFFER B = LENGTH A = SOURCE PTR GET DESTINATION POINTR TRANSFER TO I/O BUFFER SKIP PAST STRING CONSTANT SEE IF NEXT PARAM IS A STRING VAR YES, SO SET STRING ENTER FLAG CLEAR STRING ENTER FLAG SAVE FAPI, HERE SAVE TRACE FLAG GET CONTROL FLAG POSITION ENTER/PRINT FLAG BIT 4 ENTER/PRINT? YES, PRINT PROMPT, RETURN P+ 1 NO, GO THROUGH PRINT-ALL 189 Page 140 189 03047000 03048000 03049000 03050000 03051000 03052000 03053000 03054000 03055000 03056000 03057000 03058000 03059000 03060000 03061000 03062000 03063000 03064000 03065000 03068000 03069000 03070000 03071000 03072000 03073000 03074000 03075000 03076000 03077000 03078000 03079000 03080000 03081000 03082000 03083000 03084000 03087000 0 06000 03088000 03089000 03089000 03091000 03091000 03092000 03093000 03094000 OO 95 OO O 03096000 03097000 03098000 03099000 03100000 03101000 03102000 1,568,094 CONTROL SUPERVISOR 11173 141322 XEN 9 11174 000254 XENI 5 11175 031326 11176 066160 001257 010145 066552 001506 050151 031506 005256 035233 014143 140451 040715 140503 140435 042166 001326 010254 066274 CONEN 000257 031476 031517 140515 000142 031257 043542 140364 XENLP 140411 066234 005266 066227 140516 000143 031-257 042303 005476 014257 066255 11243 005272 11244 040616 11245 000341 11246 140372 11247 042303 XEN 11 11250 000254 11251 140607 11252 066260 JSM LDA STA JMP STENT I GO TO STRING BLOCK FOR PROMPT Pl SET STRING ENTER FLAG STEFL XEN 3 POST-ENTER LDA CPA JMP LDA AND STA LDB STB CPB JSM JSM JSM JSM JSM LDA CPA JMP LDA STA STA JSM LDA STA JSM JSM JSM JMP LDB JMP JSM LDA STA JSM LDB CPB JMP LDB JSM LDA JSM JSM LDA JSM JMP CSTAT P 2 BBEEP FLAGS M 5 FLAGS MODE TMP 7 P 4 ACLEB,I CLMOD ARNLO,I ATRBF,I XENPP STEFL Pl XEN 10 IGNORE KEY IF LIVE KBD LIVE KBD SO BEEP AND IGNORE CLEAR FLAG 13 SEE IF NOTHING ENTERED SAVE MODE NOTHING IF MODE = 4 CLEAR I/O BUFFER SET MODE = O SO I/O BUFFER IS COMP TURN ON RUN LIGHT TRANSFER LINE TO KBD BUFFER SEE IF ENTER-PRINT GET STRING ENTER FLAG STRING ENTER? YES M 1 FLAG THE ENTER REGISTER ENR RGFLG DISABLE IMPLIED STORAGE INTO RES ASTKI,I STACK SYSTEM INFO P 5 SET STATE = 5 CSTAT EXCSS COMPILE LINE, SET LINE BRIDGES AINTK,I GO TO INTERPRETER AXCMM,I SERVICE XCOMM + 3 RETI STOP CONDITION WHERE RET 2 XCOMM SERVICED, CONTINUE EXEC XENLP AREST,I P 4 CSTAT RESPN ENR Ml XEN 4 UNSTACK SYSTEM INFO SET STATE BACK TO 4 RESTORE FA Pl CHECK ENR REGISTER JUMP IF NOTHING ENTERED FA Pl "TO" ADDRESS ABSAD+I AENR "FROM" ADDRESS AASTR,I GO TRACE ASSIGNMENT RESPN RESTORE FAPI, HERE Pl ABUMP,I ADVANCE TO NEXT PARAMETER XEN 55 END OF LIST Page 141 03103000 03104000 03105000 03106000 03107000 03108000 03109000 03110000 03111000 03112000 03113000 03114000 03115000 03116000 03117000 03118000 03119000 03120000 03121000 03122000 03123000 03124000 03125000 03126000 03127000 03128000 03129000 03130000 03131000 03132000 03133000 03134000 03135000 03136000 03137000 03138000 03139000 03140000 03141000 03142000 03143000 03144000 03145000 03146000 03147000 03148000 03149000 03150000 03151000 03152000 03153000 03154000 03155000 03156000 03157000 03158000 11177 11200 11201 11202 11203 11204 11205 11206 11207 11210 11211 11212 11213 11214 11215 11216 11217 11220 11221 11222 11223 11224 11225 11226 11227 11230 11231 11232 11233 11234 11235 11236 11237 11240 11241 11242 1,568,094 CONTROL SUPERVISOR 03159000 11253 066114 03160000 03161000 11254 140452 XENI 9 03162000 11255 004132 XEN 4 03163000 11256 140376 03164000 11257 066247 03165000 03166000 11260 000177 XEN 55 03167000 11261 031206 03168000 11262 001630 XEN 5 03169000 11263 040744 03170000 11264 140433 03171000 11265 001624 03172000 11266 030016 03173000 11267 042303 03174000 11270 000145 03175000 11271 031257 03176000 11272 140365 03177000 11273 067517 03178000 03179000 11274 001233 XEN 10 03180000 11275 010143 03181000 11276 066254 03182000 11277 042303 03183000 11300 141323 02184000 11301 140452 85000 11302 066247 03186000 03187000 03188000 03189000 03190000 03191000 11303 001626 RESPN 03192000 11304 031265 03193000 11305 001625 03194000 11306 031272 03195000 11307 001627 03196000 113 t 0 031267 03197000 11311 170201 03198000 03199000 03200000 03201000 03202000 03203000 03204000 03205000 03206000 11312 043364 ECIM 03207000 11313 005266 03208000 11314 035227 03209000 03210000 11315 000177 ECON 3 03211000 11316 031255 03212000 11317 005227 03213000 11320 067516 03214000 JMP XENN JSM LDB JSM JMP LDA STA LDA JSM JSM LDA STA JSM LDA STA JSM JMP LDA CPA JMP JSM JSM JSM JMP AEOLB,I P 13 ASFG,I XEN 1 I PO WKC SVXCM SXCMM ALDSP,I ENSV C RESPN P 2 CSTAT AINTX,I EXC 54 TMP 7 P 4 XENI 9 RESPN STEAS,I AEOLB,I XEN 11 PUT EOL IN I/O BUFFER SET FLAG 13 CLEAR STOP KEY CODE RESTORE XCOMM IOR NEW XCOMM TO OLD XCOMM DISPLAY I/O BUFFER RESTORE C RESTORE HERE SET RUN STATE BACK TO INTERPRETER BACK TO NORMAL INTERPRETER CALLING LOOPGET OLD MODE NOTHING ENTERED? SET FLAG 13 IF SO RESTORE FA Pl GO TO STRING ROM FOR ASSIGNMENT PUT EOL IN I/O BUFFER ADVANCE TO NEXT PARAMETER RESTORE POINTERS LDA ENSV+ 2 STA HERE LDA ENSV+ 1 STA FA Pl LDA ENSV+ 3 STA TRACE RET I RESTORE HERE RESTORE FA Pl EXECUTION OF CONTINUE "ECIM" IS THE IMMEDIATE EXECUTE ENTRY JSM LDB STB LDA STA LDB JMP CNINS WHERE TM Pl PO XCOMM TM Pl EXC 52 CONTINUE INIT GET S/A OF NEXT LINE AND SAVE IT CLEAR XCOMM RECALL S/A OF LINE GO TO MAIN RUN LOOP Page 142 191 191 1,568094 CONTROL SUPERVISOR 192 CONTINUE COMMAND (FROM A SPECIFIED LINE) 042344 ECONT 066312 043364 066315 JSM ERN,X JMP ECIM JSM CNINS JMP ECON 3 CHECK FOR LINE NO GIVEN NO LINE # GIVEN CONTINUE INIT EXECUTION OF RUN COMMAND ERUN IS THE IMMEDIATE EXECUTE ENTRY "ERUN"^ IS THE IMMEDIATE EXECUTE ENTRY 11325 005307 ERUN 11326 035227 11327 140503 ERUNI 11330 040717 11331 140452 11332 140433 11333 000145 11334 031257 11335 042400 11336 066315 LDB STB JSM JSM JSM JSM LDA STA JSM JMP FWUP GET S/A O TM Pl AND SAVE ARNLO,I TURN ON STELM SET MODE AEOLB,I CLR DIS Pl ALDSP,I P 2 SET RUN S CSTAT RUNSB RUN INIT ECON 3 F USER PROG EIT RUN LIGHT E= 4 LAY STATE RUN COMMAND (FROM A SPECIFIED LINE) 11337 005307 ERUX 11340 035227 11341 042344 11342 066327 11343 066327 EXIT:

11344 140501 ERN X 11344 140501 ERN X 010053 170201 010116 066357 140507 ERUXI 035233 140513 064722 031227 ERADR 170202 11357 000214 ERLIBL 11360 130311 LDB STB JSM JMP JMP FWUP GET FIRST WORD OF USER PROGRAM TM Pl AND SAVE IT ERN X CHECK FOR LINE NO GIVEN ERUNI ERUNI RET 2 LINE # GIVEN GET LINE NO (IF GIVEN) AND S/A OF LINE RET 1 LINE # OR LABEL NOT GIVEN RET 2 S/A OF LINE IN TM Pl JSM AGNXT,l GET NEXT CHARACTER FROM I/O BUFFER CPA RET CPA JMP EOL 1 B 42 ERLBL JSM AINTC,I STB TMP 7 JSM AFLNA,I JMP ERLNF STA TM Pl RET 2 LDA EOLB STA AKB FL,I START LINE GIVEN? NO QUOTE? LABEL IF SO BUILD A BINARY NUMBER AND SAVE IT FIND S/A OF LINE GIVEN LINE NOT FOUND SAVE S/A OF LINE PUT EOL IN I/O BUFFER 192 Page 143 11321 11322 11323 11324 03215000.

03216000 03217000 03218000 03219000 03220000 03221000 03222000 03223000 03224000 03225000 03226000 03227000 03228000 03229000 03230000 03231000 03232000 03233000 03234000 03235000 03236000 03237000 03238000 03239000 03240000 03241000 03242000 03243000 03244000 03245000 03246000 03247000 03248000 03249000 03250000 03251000 03252000 03253000 03254000 03255000 03256000 03257000 03258000 03259000 03260000 03261000 03262000 03263000 03264000 03265000 03266000 03267000 03268000 03269000 03270000 11345 11346 11347 11350 11351 11352 11353 11354 11355 11356 1,568,094 193 CONTROL SUPERVISOR WBC A,D DUMMY WITHDRAW TO DEC C LDA C SET PTR IN CASE OF AN ERROR STA OLDC WBC A I SETC BACKTO FIRSTCHAR JSM ALBLN,I FIND LABEL LENGTH LDA ACBF COMPILE LABEL IN COMPILE BUFFER STA D SET PTR JSM ALBCM,I COMPILE LABEL LDA ACBF ADA Pl PT TO START OF COMPILED LABEL STA C SET PTR WBC A,l GET LENGTH OF LABEL JSM ACLBL,I GET S/A OF LINE IN B STB TM Pl SETSTARTADDRESS RET 2 RUN COMMAND SUBR.

RUNSB JSM AERAV,I ERASE VARIABLES, RESET EXECUTION STACK JSM ARSGT,I RESET HISPEED GTO/GSB'S JSM CRUND SET CFLAG LDA PO STA NPROG SET FOR RLINK RUN INIT JMP RLINK,I GOTHRU LINK FOR OPTION BLOCKS "XCOMM" MANAGEMENT PROCESS INTERRUPTING KEYS DIRECT OPTION BLOCKS INTERRUPTS AND LIVE KEYBOARD ACTIVITY EXIT: RET P + 1 STOP STATEMENT

*RET P + 2 XCOMM ALL CLEAR 001255 ERUN 7 172402 066432 170500 073010 140601 070430 001255 073404 004211 040740 066406 LDA SAM JMP SAR SLA JSM DIR LDA RLA LDB JSM JMP XCOMM + 2 ERUN 6 1 ERUN 2 ARFK,I XCOMM ERUN 2 BXCAA CLXCM ERUN 7 GET INTERPRETER FLAG INTERRUPTING KEY? NO POSITION REW BIT IF CLEAR THEN MUST BE STOP KEY REWIND THE TAPE DISABLE INTERRUPTS SEE IF STOP KEY ALSO SKIP IF BIT 0 SET, STOP KEY CODE SAVE BITS 5 TO 14 CHECK XCOMM AGAIN 11361 11362 11363 11364 11365 11366 11367 11370 11371 11372 11373 11374 11375 11376 11377 11400 11401 11402 11403 11404 11405 074760 000016 031241 074560 140353 000303 030017 140354 000303 020254 030016 074560 140400 035227 170202 140472 140360 043402 000177 031063 165533 193 Page 144 03271000 03272000 03273000 03274000 03275000 03276000 03277000 03278000 03279000 03280000 03281000 03282000 03283000 03284000 03285000 03286000 03287000 03288000 03289000 03290000 03291000 03292000 03293000 03294000 03295000 03296000 03297000 03298000 03299000 03300000 03301000 03302000 03303000 03304000 03305000 03306000 03307000 03308000 03309000 03310000 03311000 03312000 03313000 03314000 03315000 03316000 03317000 03318000 03319000 03320000 03321000 03322000 03323000 03324000 03325000 03326000 s as as as as as as as as as 11406 11407 11410 11411 11412 11413 11414 11415 11416 11417 11420 11421 1,568,094 CONTROL SUPERVISOR 11422 004254 ERUN 2 11423 070430 ERNX 1 11424 001255 11425 050227 11426 031255 11427 070420 11430 140475 11431 064717 11432 170600 ERUN 6 11433 172003 11434 140455 11435 066406 11436 170600 ERUN 8 11437 172003 11440 141510 11441 066406 11442 072002 ERUN 9 11443 170202 11444 001255 11445 170507 11446 072040 11447 005255 11450 174706 11451 066423 11452 001235 ISTOR 11453 031715 ISTOX 11454 005213 11455 014257 11456 045213 LDB Pl DIR LDA X( AND B 2 STA X( EIR JSM JMP SAL SAP JSM JMP SAL SAP JSM JMP SET STOP KEY INDICATOR COMM )OK COMM SAVE ONLY BIT 13 OF XCOMM AEDPT,I RESET EDIT PTRS STELM SET MODE = 4 AND RETURN 1 ERUN 8 ALKEX,I ERUN 7 1 ERUN 9 IOSR,I ERUN 7 RZA + 2 RET 2 LDA XCOMM SAR 8 RZA ERUN 7 LDB RBR JMP XCOMM 7 ERNXI POSITION BIT 14 SKIP IF NOT LIVE KEYBOARD LIVE KEYBOARD EXECUTION CHECK XCOMM AGAIN POSITION BIT 13 SKIP IF NOT INTERRUPT SERV ROUTINE GIVE CONTROL TO SYSTEM I/O ROM CHECK XCOMM AGAIN SKIP IF XCOMM NOT CLEARSEE IF NEW HIGHER ORDER BITS WERE SE GET BITS 8-15 BITS SET, SERVICE THEM POSITION BIT 7 FOR RETURN ROUTINE TO REPLACE -STORE KEYCODES IN THE EDIT BUFF AREA ENTRY: CODE IN "SKEY" EXIT:

B = I/O CURRENT POINTR RET P + I EDIT BUFF FULL: CHAR NOT STORED RET P + 2 CHAR STORED AND "IOCP" POINTER INCREMENTED LDA SKEY STA T 5 LDB OLCP CPB MI ISZ OLCP GET CODE SAVE CODE GET OLD CURRENT POINTR FORWARD CORSOR PASS MADE? YES: SET OLCP = 0 Page 145 03327000 03328000 03329000 03330000 03331000 03332000 03333000 03334000 03335000 03336000 03337000 03338000 03339000 03340000 03341000 03342000 03343000 03344000 03345000 03346000 03347000 03348000 03349000 03350000 03351000 03352000 03353000 03354000 03355000 03356000 03357000 03358000 03359000 03361000 03362000 03363000 03364000 03365000 03366000 03367000 03368000 03369000 03370000 03371000 03372000 03373000 03374000 03375000 03376000 03377000 03378000 03379000 03380000 03381000 03382000 194 194 1,568,094 CONTROL SUPERVISOR 066460 005215 042535 064703 005214 ISTO 2 176421 005215 ISTO 6 034016 074540 004016 035215 015213 066531 005214 001214 072403 050074 011512 170202 ISTO 3 076101 035214 170202 005213 ISTO 5 042535 064703 015215 066526 034016 034017 074571 004017 035213 074571 074761 ISTO 7 074751 004016 015215 066465 066520 042531 066530 066465 004177 035214 035213 170202 ISTO 8 ISTO 4 JMP LDB JSM JMP LDB SBM LDB STB PBC LDB STB CPB JMP LDB LDA SZA AND CPA RET RIB STB RET LDB JSM JMP CPB JMP STB STB WBD LDB STB WBD WBC PBD LDB CPB JMP JMP JSM JMP JMP LDB STB STB RET + 1 IOCP CKFUL BEEP CRSP ISTO 5 IOCP C A,I C IOCP OLCP ISTO 4 CRSP CRSP ISTO 3 B 77 DLEN + 1 CRSP OLCP CKFUL BEEP IOCP ISTO 8 C D B,1 D OLCP B,I B,D B,D C 1 OCP ISTO 6 ISTO 7 ISTO 4 + 1 ISTO 6 PO CRSP OLCP GET I/O BUFF CURRENT PTR SEE IF BUFFER IS FULL BEEP AND RETURN IF BUFF IS FULL GET CURSOR POINTR SKIP IF INSERT CURSOR SET NO: GET I/O BUFF CURRENT POINTR SET C-REG INCRM POINTR AND STORE CODE UPDATE POINTR "IOCP" = PREVIOUS CURRENT POINTR? YES GET CURSOR POINTR GET CURSOR POINTR SKIP IF CURSOR NOT SET SAVE CURSOR COUNT CURSOR AT LAST DISP POSITION? YES; DO NOT INCRM MOVE CURSOR TO NEXT CHAR UPDATE CURSOR POINTR GET OLD CURRENT POINTER SEE IF BUFFER IS FULL RETURN AND BEEP IF BUFFER IS FULL OLCP = IOCP? YES SET SOURCE POINTR SET DESTINATION POINTR GET OLCP + 1 UPDATE OLD CURRENT POINTR D = OLCP + 2 GET BYTE AND DECRM DECRM AND PLACE BYTE GET SOURCE POINTR ALL CHARS BETWEEN IOCP AND OLCP SHIFTED RIGHT ONCE'? NO: CONT TRANSFER RESET "CRSP" AND "OLCP" STORE CHAR IN I/O BUFF CLEAR CURSOR POINT CLEAR PREVIOUS CURRENT POINTR CKFUL SERVICE ROUTINE THAT CHECKS THE EDIT BUFFER TO SEE IF THIS CHAR IS THE BEEP CHAR OR IF THE BUFFER IS FULL RET I IF FULL 11457 11460 11461 11462 11463 11464 11465.

11466 11467 11470 11471 11472 11473 11474 11475 11476 11477 11500 11501 11502 11503 11504 11505 11506 11507 11510 11511 11512 11513 11514 11515 11516 11517 11520 11521 11522 11523 11524 11525 11526 11527 11530 11531 11532 11533 11534 Page 146 03383000 03384000 03385000 03386000 03387000 03388000 03389000 03390000 03391000 03392000 03393000 03394000 03395000 03396000 03397000 03398000 03399000 03400000 03401000 03402000 03403000 03404000 03405000 03406000 03407000 03408000 03409000 03410000 03411000 03412000 03413000 03414000 03415000 03416000 03417000 03418000 03419000 03420000 03421000 03422000 03423000 03424000 03425000 03426000 03427000 03428000 03429000 03430000 03431000 03432000 03433000 03434000 03435000 03436000 03437000 03438000 1,568,094 CONTROL SUPERVISOR , 11535 11536 11537 11540 11541 11542 11543 11544 11545 11546 11547 11550 11551 035236 CKFUL 001353 020257 140362 172010 001353 020154 005236 014000 040703 001715 170202 170201 ISRET STB LDA ADA JSM SAP LDA ADA LDB CPB JSM LDA RET RET BEEPS IF THIS IS THE BEEP CHAR IF BUFF IS NOT FULL RET 2 WITH T 5 IN A DOES NOT DESTROY B TMP 8 AEBFL Ml AFBAD,I ISRET AEBEL M 8 TMP 8 A BEEP T 5 2 SAVE ADDRESS LAST ALLOWED CHAR ADDRESS SEE IF BUFFER FULL FULL IF RESULT IS POSITIVE GET BEEP CHAR ADDR GET CHAR ADDR AGAIN YES NO TAKE BUFF NOT FULL RETURN 11552 040703 11553 170202 11554 000143 11555 011257 11556 066552 11557 011256 11560 170202 11561 140432 11562 140432 11563 006577 11564 040633 11565 170202 BBEEP BACEL JSM BEEP RET 2 IGNORE THIS KEY DON'T DISPLAY I/O BUFFER UP OR DOWN ARROWIN LIVE KBD WTLKB LDA P 4 CPA CSTAT BEEPIFEN JMP BBEEP ENTERSOl CPA MODE RET 2 JSM ADSPC,I DUMMYD JSM ADSPC,I DISPLAY B LDB M 800 WAIT 800 N JSM DELAY RET 2 TER BEEP AND RETURN ISPLAY UFFER i S CONSTANTS 11566 11567 11570 11571 11572 11573 11574 11575 11576 11577 030465 077457 110654 000163 077071 000271 020151 067040 022000 176340 PRPRB LITAD ASCDI P 115 PII 15 AINLM AERMS AELNI AELN 2 ASYSM M 800 OCT 30465 DEF ITABL+ 15 DEF SCNDT,I DEC 115 DEF IBUFF+ 5 DEF OCT OCT DEF DEC LKERM 20151 67040 22000 B -800 ASCII 15 LAST ENTRY IN INTERRUPT TABLE COMMAND TABLE ADDR START ADDR FOR LINE NUMBER OF ERROR PTR TO LOWER CASE "ERROR" BLANK I N BLANK STOP ADDR OF ROM SEARCH Page 147 03439000 03440000 03441000 03442000 03443000 03444000 03445000 03446000 03447000 03448000 03449000 03450000 03451000 03452000 03453000 03454000 03455000 03456000 03457000 03458000 03459000 03460000 03461000 03462000 03463000 03464000 03465000 03466000 03467000 03468000 03469000 03470000 03471000 03472000 03473000 03474000 03475000 03476000 03477000 03478000 03479000 03480000 03481000 03482000 03483000 03484000 03485000 03486000 03487000 03488000 03489000 03490000 03491000 03492000 03493000 03494000 196 196 1,568,094 CONTROL SUPERVISOR 03495000 03496000 03497000 03498000 03499000 03500000 03501000 03502000 03503000 03504000 03505000 03506000 03507000 03508000 03509000 03510000 03511000 03512000 03513000 03514000 03515000 11613 03516000 11613 03517000 03518000 03519000 03520000 11614 03521000 11615 03522000 11616 03523000 11617 03524000 11620 03525000 03526000 03527000 03528000 11621 03529000 11622 03530000 11623 03531000 11624 03532000 11625 03533000 03534000 03535000 03536000 11626 03537000 11631 03538000 11632 03539000 03540000 03541000 03542000 11633 03543000 03544000 03545000 03546000 11640 03547000 11643 03548000 11644 03549000 03550000 THIS TABLE CONTAINS THE ADDRESS 01 O THE FROCESSING ROUTINES MODE= 0 KEYBOARD ENTRY I FETCH 2 EDIT 3 NEVER 4 END OF LINE BSS 'S TO BE FILLED IN BY THE 12 K AND 22 K PAGES 111607 ATBL 010437 TB 3 010317 010437 010477 010437 010317 011552 000000 011553 000000 011553 ORG 11613 B DEF TB 3-5,I TABLEBASE-5 (FIRSTCN = 1) EXECUTE ( 1) DEF DEF DEF DEF DEF EXCK ERILO EXCK EXCST EXCK STORE ( 2) BSS DEF BSS DEF BSS 1 ERILO Bl BEEP BBEEP INSERT/REPLACE CHAR ( 3) BSS DEF DEF 3 0 BACEL CLEAR ( 4) BSS 5 DELETE CHAR ( 5) BSS 3 DEF O DEF BACEL STEP ( 6) Page 148 197 197 1,568,094 CONTROL SUPERVISOR 11645 11646 11647 11650 11651 010407 010407 010407 011552 010407 11652 11655 000000 11656 11657 11662 000000 11663 11664 11665 11666 11667 11670 010755 010755 010755 011554 010755 11671 11674 000000 11675 11676 11677 11700 11701 11702 11703 11704 11705 11706 11707 010323 010321 010323 000000 010321 010743 010743 010743 011554 010743 11710 11713 000000 11714 011553 DEF DEF DEF DEF DEF STEPK STEPK STEPK BBEEP STEPK RIGHT ARROW ( 7) BSS 3 DEF 0 BSS I 8:

:

BSS DEF BSS LEFT ARROW ( 10) 3 0 DOWN-ARROW( 11) :

DEF DEF DEF DEF DEF s DNAR DNAR DNAR WTLKB DNAR RECALL ( 12) BSS 3 DEF 0 BSS 1 :

8:

DEF DEF DEF DEF DEF SHOULD BEBSS lllllllllllllllllll PROGRAMMABLE ( 13) P 02 PEOL P 02 0 PEOL UP-ARROW ( 14) DEF DEF DEF DEF DEF :

UPAR UPAR UPAR WTLKB UPAR BACK ( 15) BSS DEF DEF 3 0 BACEL FORWARD ( 16) Page 149 03551000 03552000 03553000 03554000 03555000 03556000 03557000 03558000 03559000 03560000 03561000 03562000 03563000 03564000 03565000 03566000 03567000 03568000 03569000 03570000 03571000 03572000 03573000 03574000 03575000 03576000 03577000 03578000 03579000 03580000 03581000 03582000 03583000 03584000 03585000 03586000 03587000 03588000 03589000 03590000 03591000 03592000 03593000 03594000 03595000 03596000 03597000 03598000 03599000 03600000 03601000 03602000 03603000 03604000 03605000 03606000 198 198 1,568,094 Page 150 03607000 03608000 11715 03609000 11720 03610000 11721 03611000 03612000 03613000 03614000 11722 03615000 11725 03616000 11726 03617000 OM 618000 0319000 03620000 11727 03621000 03622000 03623000 03624000 11734 03625000 03626000 03627000 03628000 11741 03629000 11742 03630000 11743 03631000 11744 03632000 11745 03633000 03634000 03635000 03636000 11746 03637000 11747 03638000 11750 03639000 11751 03640000 11752 03641000 03642000 03643000 03644000 11753 03645000 11754 03646000 11755 03647000 11756 03648000 11757 03649000 0365000 03651000 03652000 11760 03653000 11761 03654000 11762 03655000 11763 03656000 11764 03657000 03658000 03659000 03660000 11765 03661000 11766 03662000 11767 CONTROL SUPERVISOR 000000 011553 010764 010326 010326 010326 000000 010326 BSS DEF DEF 3 0 BACEL PROG INTERRUPTING KEYS ( 17) BSS DEF BSS 3 PINEN I TYPING-AIDS ( 20) BSS 5 SPECIAL KEYS ( 21) BSS 5 PRINT ALL ( 22) DEF DEF DEF DEF DEF 010317 011552 011325 011325 011325 011552 011325 011312 011312 011312 011177 011312 011552 011552 PALL PALL PALL 0 PALL LINE INSERT ( 23) BSS DEF BSS DEF BSS 1 ERILO Bl BEEP BBEEP RUN ( 24) DEF DEF DEF DEF DEF is s ERUN ERUN ERUN BBEEP ERUN CONTINUE ( 25) DEF DEF DEF DEF DEF ECI M ECIM ECIM CONEN ECIM LINE DELETE ( 26) DEF BSS DEF BBEEP Bl EEP BBEEP 199 199 1,568,094 Page 151 03663000 11770 03664000 11771 03665000 03666000 03667000 03668000 11772 03669000 11773 03670000 11774 03671000 11775 03672000 11776 03673000 03674000 03675000 03676000 11777 03677000 03678000 03679000 03680000 03681000 03682000 03683000 03684000 03685000 03686000 03687000 03688000 03689000 03690000 03691000 03692000 03693000 03694000 03695000 03696000 03697000 03698000 03699000 03700000 03701000 03702000 03703000 03704000 03705000 03706000 03707000 03708000 03709000 03710000 03711000 03712000 03713000 03714000 03715000 03716000 03717000 03718000 CONTROL SUPERVISOR 011552 011552 010352 010361 010352 000000 010361 DEF BBEEP DEF BBEEP as as RESULT ( 27) DEF RESK DEF REOL DEF RESK DEF 0 DEF REOL :k BSS I 000263 011571 000122 000052 000263 000077 000053 000177 000116 077467 077470 077471 077473 077474 000236 077216 077216 077217 077220 077221 077223 077224 077225 077226 077227 077230 077231 077232 077233 077234 077235 077236 077206 077207 MAXLN B 163 BUIHM B 32 STPMS TRCMS COLLN EOL KPA QUOTE LPSVA LPSVB LPSVC LPSVE LPSVO DCMND CTCNT CST SIOCP WPRT M PLADD TMP 6 K TMP 2 LNO TM Pl TMP 5 TMP 3 CFLAG TMP 7 TMP 4 SKEY TMP 8 WKC WMOD DEFINITIONS EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU FLAG P 115 M 256 P 26 B 200 FLAG B 72 B 177 PO B 42 LPIT LPIT+ 1 LPIT+ 2 LPIT+ 4 LPIT+ 5 B 377 B 2 K CSTMP CST CST+ 1 CST+ 2 CST+ 3 CST+ 5 CST+ 6 CST+ 7 CST+ 8 CST+ 9 CST+ 10 CST+ 1 CST+ 12 CST+ 13 CST+ 14 CST+ 15 CST+ 16 IOTMP IOTMP+ 1 CHECK llll ll 1,568,094 CONTROL SUPERVISOR 077210 DTM Pl 077211 DTMP 2 077212 SPKN 077213 OLCP 077214 CRSP 077215 IOCP 077613 RENFG 000433 DISP EQU IOTMP+ 2 EQU IOTMP+ 3 EQU IOTMP+ 4 EQU IOTMP+ 5 EQU IOTMP+ 6 EQU IOTMP+ 7 EQU LKTMP+ 6 EQU ALDSP END END OF PASS 2 NO ERRORS DETECTED 201 Page 152 03719000 03720000 03721000 03722000 03723000 03724000 03725000 03726000 03727000 03728000 03729000 03730000 201 1,568,094 Page 153 00003000 76550 00004000 02000000 02001000 02003000 02004000 02005000 02006000 00432 02007000 00432 012140 02008000 00433 012235 ORG 76550 B UNL LST BASE PAGE LINKS ORG DEF DEF 02009000 00434 012000 02010000 00435 013430 02011000 00436 013123 02012000 00437 013126 02013000 00440 012044 02014000 00441 012012 02015000 00442 012503 02016000 00443 012524 02017000 00444 012514 02018000 00445 012606 02019000 00446 013010 02020000 00447 013716 02021000 00450 013506 02022000 00451 013465 02023000 00452 013511 02024000 00453 013515 02025000 00454 013165 02026000 00455 013575 02027000 00456 013622 02028000 00457 013570 02029000 00460 113722 02030000 00461 013117 02031000 00462 012672 02032000 02033000 00566 02034000 00566 012174 02035000 00567 012554 02036000 00570 012742 02037000 00571 012540 02038000 00572 012333 02039000 00573 013526 02040000 00574 013531 DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF ORG DEF DEF DEF DEF DEF DEF DEF ADSPC DISPC DISP KBSRV TRBUF EPON EPNX SVRG KBSR 2 CPST PRNT PRNT PNUMR FBP SWIOP CLBIO CLEBF EOLEB CLCMB RPRL LKBEX LEXER LEXKY K 1,I EPKBD PSTRG ALST LIST EPRT EDIS PLDX LISTK ELKE ELKD DISP INFO WITH CURSOR DISPLAY ROUTINE-NO RESET JSM STACI KEYBOARD SERVICE ROUTINE TRANSFER I/O TO KEYBOARD BUFFER PRINT-ALL ROUTINE PRINT-ALL LINK FOR ENTER PRINT SAVE LOW PRIORITY A,BE,O RESTORE LOW PRIORITY A,B,E,O CHECK PRINTER STATUS PRINT CHARS ALREADY GIVEN TO HARDW PRINT 16 CHARS FROM I/O BUFF PRINT A NUMERIC VALUE FIND DISP BEGIN POINTER SWAP PARAM TO EDIT I/O BUFFER CLEAR I/O BUFFER CLEAR EDIT BUFFER SET EOL IN EDIT BUFFER CLEAR COMPILE BUFFER ROM POWER REDUCTION LOOP LIVE KBD EXECUTION LIVE KBD EXEC ERROR ROUTINES LIVE KBD EXECUTE KEY PROCESSING ROUKEY CONTROL CODE TABLE PRINT-ALL FROM KBD BUFFER PRINT A STRING LINK TO EXECUTE 'LIST' LINK TO EXECUTE 'PRT' LINK TO EXECUTE 'DSP' LINK TO EXECUTE 'SPC' LINK TO EXECUTE "LISTK" LIVE KBD ENABLE LIVE KBD DISABLE 202 202 1,568,094 CONTROL SUPERVISOR LINKS 02044000 02045000 11614 02046000 02047000 11614 02048000 11621 02049000 11626 02050000 02051000 11633 02052000 11634 02053000 11635 02054000 11636 02055000 11637 02056000 02057000 11640 02058000 11641 02059000 11642 02060000 11643 02061000 02062000 11645 02063000 11652 02064000 11657 02065000 11664 02066000 02067000 11671 02068000 11672 02069000 11673 02070000 11674 02071000 11675 02072000 02073000 11676 02074000 11703 02075000 11710 02076000 11715 02077000 11722 02078000 02079000 11727 02080000 11730 02081000 11731 02082000 11732 02083000 11733 02084000 02085000 11734 02086000 11741 02087000 11746 02088000 11753 02089000 11760 02090000 11765 02091000 11772 02092000 013345 013345 013345 013353 013345 013363 013363 013363 013241 013241 013241 013241 013241 ORG 11614 B BSS 5 BSS 5 BSS 5 DEF DEF DEF DEF DEF DEF DEF DEF BSS BSS BSS BSS BSS DEF DEF DEF DEE DEF BSS BSS BSS BSS BSS 013043 013043 013043 013043 013043 DEF DEF DEF DEF DEF BSS BSS BSS BSS BSS BSS BSS CLEAR CLEAR CLEAR CLEEN CLEAR DLCH DLCH DLCH RECL RECL RECL RECL RECL LTID LTID LTID LTI D LTID EXECUTE STORE INSERT/REPLACE CLEAR KEY DELETE CHARACTER STEP RIGHT ARROW LEFT ARROW DOWN ARROW RECALL PROG KEYS ALPHA NUMERIC UP ARROW BACK FORWARD STOP, REW TYPING AIDS SPECIAL KEYS PRINT-ALL LINE INSERT RUN CONTINUE LINE DELETE RESULT KEY 203 Page 154 203 1,568,094 I/O SUPERVISOR 02095000 02096000 02097000 02098000 02099000 02100000 02101000 02102000 02103000 02104000 02105000 02106000 02107000 02108000 02109000 02110000 02111000 02112000 02113000 12000 02114000 02115000 02116000 02117000 02118000 02119000 02120000 02121000 02122000 02123000 02124000 02125000 02126000 02127000 12000 02128000 12001 02129000 12002 02130000 12003 02131000 12004 02132000 12005 02133000 12006 02134000 12007 02135000 12010 02136000 12011 02137000 12012 02138000 12013 02139000 12014 02140000 12015 02141000 12016 02142000 12017 02143000 12020 02144000 12021 02145000 12022 02146000 12023 02147000 12024 02148000 12025 02149000 12026 02150000 12027 I/O SUPERVISOR IOSP ORG 12000 B e s s 043044 KBSRV 000004 031207 043061 031206 005257 076022 001207 KBSR 6 172701 031207 001472 KBSR 2 030017 001471 030016 001473 177201 073002 177301 173201 172002 173301 005470 001467 170300 KBSR 3 JSM LDA STA JSM STA LDB RZB LDA SAM STA LDA STA LDA STA LDA SEC SLA SEC SOC SAP SOC LDB LDA RET SVRG R 4 WMOD KCASC WKC CSTAT KBSR 5 WMOD + I,S WMOD LPSVD D LPSVC C LPSVE +I,C + 2 + I,S +IC +C 1, + 2 +I,S LPSVB LPSVA 0,P SAVE REGISTERS GET KEY CODE SAVE KEYBOARD CODE KEYCODE CONVERSION TO ASCII SAVE CODE GET STATE SKIP IF NOT IDLE STATE SET NEW KEY FLAG RESTORE C,D GET E REG INFO CLEAR E REG.

SKIP IF LSB = O CLEAR O REG.

RESTORE B REGISTER RESTORE A REGISTER RETURN AND TURN-ON INTERRUPT Page 155 204 204 205 1568,094 205 Page 156 I/O SUPERVISOR 02151000 02152000 12030 014143 KBSR 5CPB P 4 ENTERSTATE' 02153000 12031 067007 JMP KBSR 6 YES 02154000 02155000 12032 020147 KBSRI ADA M 3 02156000 12033 172005 SAP KBSR 4 SKIPIFNOTANINTERRUPTINGKEY 02157000 12034 001206 LDA WKC IOR KEYCODE INTO XCOMM 02158000 12035 172701 SAM +IS SET BIT 15 ALSO 02159000 12036 040744 JSM SXCMM 02160000 02161000 12037 067012 JMP KBSR 2 RESTORE REGISTERS 02162000 02163000 12040 001623 KBSR 4LDA LKFLG GET LIVE KEYB FLAG 02164000 12041 073451 RLA KBSR 2 SKIP IF LIVE KBD NOT ENABLED 02165000 02166000 12042 042533 JSM LKPRC GOTOTHE LIVE KBD PROC ROUTINES 02167000 02168000 12043 067012 JMP KBSR 2 RESTORE REGISTERS 02169000 02170000 02171000 SAVE REGISTERS SUBR.

02172000 02173000 LOW PRIORITY: A,B,E,O 02174000 02175000 02176000 12044 031467 SVRG STA LPSVA LOW PRIORITY SAVE "A" TEMPORARY 02177000 12045 035470 STB LPSVB LOW PRIORITY SAVE "B" TEMPR.

02178000 12046 000177 LDA PO 02179000 12047 177002 SEC + 2 SKIP IFCLEAR 02180000 12050 000254 LDA Pl 02181000 12051 173002 SOC + 2 SKIP IFCLEAR 02182000 12052 172301 SAP +IS 02183000 12053 031473 STA LPSVE SAVEO,E REGISTERS 02184000 12054 000016 LDA C 02185000 12055 031471 STA LPSVC SAVE C-REG.

02186000 12056 000017 LDA D 02187000 12057 031472 STA LPSVD SAVE D-REG.

02188000 12060 170201 RET I 02189000 02190000 02191000 KEYCODE CONVERSION TO ASCII 02192000 02193000 ENTRY: A-REG = KEYCODE 02194000 02195000 EXIT: A-REG = ASCII CODE 02196000 02197000 SEE CONVERSION TABLES CONTAINED IN THE DOCUMENTATI Ob FOF 02198000 THE I/O SUPERVISOR 02199000 02200000 02201000 12061 170607 KCASCSAL 8 KEYCODE IN UPPER HALF 02202000 12062 172002 SAP + 2 SKIP IF UNSHIFTED 02203000 12063 067112 JMP KCA 53 SHIFTED 02204000 12064 170507 SAR 8 KEYCODEINLOWERHALF 02205000 02206000 UNSHIFTED KEY CONVERSION 1,568,094 I/O SUPERVISOR 004000 174040 024073 176015 026760 176413 006223 020164 177301 KCA 54 073002 177201 170500 024000 100001 177005 170507 010066 KCA 56 000063 170201 12110 050045 12111 170201 12112 12113 12114 12115 12116 12117 12120 12121 12122 12123 12124 12125 12126 12127 12130 12131 12132 KCASI 170507 KCA 53 050053 010055 170201 010057 067133 004000 174040 024110 176062 026761 176404 006167 022756 067075 020162 170201 KCA 57 12133 000056 KCA 52 12134 170201 LDB A TCB ADB B 100 SBP KCA 56 ADB B 31 SBM KCA 56 LDB KTBLI ADA BM 100 SEC +I,S SLA + 2 SEC +I,C SAR 1 ADBA LDA B,I SEC KCA 51 SAR 8 ' CPA B 140 LDA B 145 RET I AND B 377 RET 1 NO; SAVE KEYCODE MAKE NEG SKIP IF KEYCODE < 101; NO CONVERSION SKIP IF KEYCODE > 131 GET TABLE ADDR (UNSHIFTED) GET CODE 1-31 B SET E-REG.

CLEAR E-REG, IF L S BIT OF A = 1 BECAUSE OF TWO CODES PER WORD B = ADDR OF CODES GET CODES SKIP FOR LOWER HALF A= CODE IS THIS THE ENTER EXPONENT KEY? YES, MAKE IT A SMALL E NO, LEAVE ALONE A = CODE SHIFTED KEY CONVERSION SAR AND CPA RET 8 B 177 B 175 CPA B 173 JMP KCA 52 LDBA TCB ADB B 53 SBP KCA 56 ADB SBM LDB ADA JMP ADA RET 865 KCA 57 KTBL 2 BM 54 KCA 54 BM 40 LDA B 174 RET 1 KEYCODE IN LOWER HALF DROP BIT 7 GAZINTA? YES PI? YES GET KEYCODE MAKE NEG.

SKIP IF KEYCODE < 54 SKIP IF KEYCODE > 140 GET TABLE ADDR (SHIFTED) GET CODE 0-64 B GET UPPER CASE CODE GET UPPER CASE ALPHA GET VERTICAL BAR DISP DISPLAY INFO WITHOUT CURSOR DISPLAYS CONTENTS OF I/O BUFFER REGARDLESS OF POSITION OF EDIT BUFFER POINTERS Page 157 12065 12066 12067 12070 12071 12072 12073 12074 12075 12076 12077 12100 12101 12102 12103 12104 12105 12106 12107 02207000 02208000 02209000 02210000 02211000 02212000 02213000 02214000 02215000 02216000 02217000 02218000 02219000 02220000 02221000 02222000 02223000 02224000 02225000 02226000 02227000 02228000 02229000 02230000 02231000 02232000 02233000 02234000 02235000 02236000 02237000 02238000 02239000 02240000 02241000 02242000 02243000 02244000 02245000 02246000 02247000 02248000 02249000 02250000 02251000 02252000 02253000 02254000 02255000 02256000 02257000 02258000 02259000 02260000 02261000 02262000 206 206 1,568,094 I/O SUPERVISOR 207 12135 004150 DISP 12136 000314 12137 067144 LDB M 4 LDA AIBFX JMP NOCUR SET FOR ENTRY WITHOUT CURSOR DISPLAY I/O BUFFER DISPLAY WITH OUT CURSOR DISPC DISPLAY WITH CURSOR USES TI DISPLAYS STARTING AT CHARACTER INDICATED BY DBP SETS THE CURSOR IF CRSP#0 BIT 15 OF CRSP ISSET IF INSERT CURSOR, BITS 0-14 CONTAIN A CHARACTER OFFSET FROM DBP-I TO SET THE CURSOF 12140 001214 DISPC 12141 050074 12142 004000 12143 001513 12144 030016 NOCUR 12145 140401 12146 030001 12147 000177 12150 030011 12151 001512 12152 031711 12153 074560 LDH 12154 014016 12155 067157 12156 067166 12157 005214 12160 176403 12161 004073 12162 067164 12163 004117 INCUR 12164 034005 12165 060052 12166 030004 NOPOS 12167 055711 12170 067153 12171 000145 12172 030005 12173 170201 LDA CRSP AND B 77 LDB LDA STA JSM STA LDA STA LDA STA WBC CPB JMP JMP LDB SBM LDB JMP LDB STB IOR STA DSZ JMP LDA STA RET A DBP C AADBA,I B DPA PA DLEN Tl A,I C + 2 NOPOS CRSP INCUR B 100 + 2 B 40 R 5 B 200 R 4 Tl LDH P 2 R 5 GET CURSOR POINTER SAVE ONLY OFFSET COUNT SET CURSOR OFFSET GET START OF DISPLAY ADDR SAVE IT FOR THE TRANSFER ADJUST BYTE ADDRESS SET CURSOR ADDRESS GET DISPLAY SELECT CODE SET PERPHERAL ADDRESS GET LENGTH OF DISPLAY SAVE LOOP COUNTER B CONTAINS THE ADDR OF THE CHAR GET BYTE AND INC PYR CURSOR POSITION? YES NO GET CURSOR TO SEE WHICH TYPE OF CURSOR REPLACE CURSOR INSERT CURSOR SET CURSOR INDICATOR SET CURSOR BIT ON BYTE TO DISPLAY SEND CHAR TO DISPLAY DONE? NO, CONTINUE TRIGGER THE DISPLAY YES SO RETURN LIST MAIN PROGRAM PERIPHERAL LIST ENTRY IS LISTP PLADD MUST BE SET TO ADDRESS OF A RETURN FOR A MAINFRAME LIST OTHERWISE I' CONTAINS THE ADDRESS OF THE PERIPHERAL LIST ROUTINE.

ROUTINE MUST DO A RET 2 WHEN IT IS DONE OTHERWISE THE PROGRAM WILL ALSO LIST TO THE INTERNAL PRINTER 207 Page 158 02263000 02264000 02265000 02266000 02267000 02268000 02269000 02270000 02271000 02272000 02273000 02274000 02275000 02276000 02277000 02278000 02279000 02280000 02281000 02282000 02283000 02284000 02285000 02286000 02287000 02288000 02289000 02290000 02291000 02292000 02293000 02294000 02295000 02296000 02297000 02298000 02299000 02300000 02301000 02302000 02303000 02304000 02305000 02306000 02307000 02308000 02309000 02310000 02311000 02312000 02313000 02314000 02315000 02316000 02317000 02318000 1,568,094 I/O SUPERVISOR 140610 LIST 004714 035221 LISTP 005257 077005 004274 034016 004334 035264 043603 NOCOM 004177 035216 035233 004263 035223 072412 043327 173411 035233 000254 140607 067225 043327 173402 035223 140513 LIST 3 067302 I-SSSS 040724 043533 14045610 LIST 0047140513 067270 035221 LISTP 00523357 077005 004274 034016 004334 035264 043603 NOCOM 01404177 035216 035233 004263 035223 072412 043327 173411 035233 000254 140607270 067225 043327 173402 035223 140513 LIST 3 067302 LSSSS 040724 043533 140453 LISTL 140513 067270 005233 035226 140412 001206 010254 067270 12242 000314 JSM LDB STB LDB SLB LDB STB LDB STB JSM LDB STB STB LDB STB SZA JSM SOS STB LDA JSM JMP JSM SOS STB JSM JMP JSM JSM JSM JSM JMP LDB STB JSM LDA CPA JMP LDA 208 ACOUN,I COUNT PARAMETERS ON STACK ARETI SET FOR A RETURN PLADD SET FOR MAIN FRAME LIST CSTAT SEE IF STATE 1,3, OR 5 NOCOM IF SO THEN SET C TO POINT AAEOL EOL AND SET LEND TO POINT TO ZERO C ADPO LEND INTIO INIT FOR LIST OUTPUT PO SET LINE # LOWER LIMIT SIOCP CLEAR CHECKSUM WORD TMP 7 MAXLN MAX LINE NO.

TMP 6 SET DEFAULT UPPER LIMIT LIST 3 PARAMETERS GIVEN? LGTNM GET LINE NUMBER LSSSS LINE CANNOT EXIST IF OVERFLOW TMP 7 SET BEGIN OF LIST Pl ABUMP,I ADVANCE TO NEXT PARAMETER LIST 3 END OF PARAMETER LIST LGTNM LIST 3 LIST TO END OF PROG IF OVERFLOW TMP 6 SET UPPER LIMIT AFLNAI FIND LINE ADDR LIST 5 LINE NOT FOUND SECCK SEE IF PROG IS SECURE PLEAD GIVE PAPER LEADER ACLCM,I CLEAR COMPILE BUFF AFLNA,I FIND LINE ADDRESS LIST 2 NOT FOUND, MUST BE DONE TMP 7 SET LNO FOR ATLNO ROUTINE LNO APLIR,I PLACE LINE NO IN I/O BUFF WKC GET KEY CODE Pl IS IT HTE STOP KEY? LIST 2 YES, ABORT OPERATION AIBFX I/O BUFF S/A 208 Page 159 02319000 02320000 02321000 02322000 02323000 02324000 02325000 02326000 02327000 02328000 02329000 02330000 02331000 02332000 02333000 02334000 02335000 02336000 02337000 02338000 02339000 02340000 02341000 02342000 02343000 02344000 02345000 02346000 02347000 02348000 02349000 02350000 02351000 02352000 02353000 02354000 02355000 02356000 02357000 02358000 02359000 02360000 02361000 02362000 02363000 02364000 02365000 02366000 02367000 02368000 02369000 02370000 02371000 02372000 02373000 02374000 12174 12175 12176 12177 12200 12201 12202 12203 12204 12205 12206 12207 12210 12211 12212 12213 12214 12215 12216 12217 12220 12221 12222 12223 12224 12225 12226 12227 12230 12231 12232 12233 12234 12235 12236 12237 12240 12241 1,568,094 I/O SUPERVISOR 12243 030016 12244 000165 12245 031711 12246 074560 LLOOP 12247 005711 12250 075617 12251 005233 12252 024254 12253 075617 12254 021216 12255 031216 12256 045711 12257 067246 12260 000177 12260 000177 12261 12262 12263 12264 12265 12266 12267 12270 12271 12272 12273 12274 12275 12276 12277 12300 12301 12302 12303 12304 12305 12306 12307 12310 12311 12312 12313 12314 12315 12316 12317 12320 12321 12322 12323 12324 141221 043353 001233 011223 067270 045233 067231 140450 LIST 2 002763 130313 004314 001216 050344 140477 141221 043514 043533 140450 LIST 5 001307 170040 021277 072403 020254 170600 004315 LNULP 140477 001310 020254 170040 021263 170600 004320 140477 140436 043135 067600 STA C LDA M 80 STA TI WBC A, LDB TI MPY LDB TMP 7 ADB Pl MPY ADA SIOCP STA SIOCP ISZ TI JMP LLOOP LDA PO JSM JSM LDA CPA JMP ISZ JMP JSM LDA STA LDB LDA AND JSM JSM JSM JSM JSM LDA TCA ADA SZA ADA SAL LDB JSM LDA ADA TCA ADA SAL LDB JSM JSM JSM JMP PLADD,I PIOB TMP 7 TMP 6 LIST 2 TMP 7 LISTI ACLBI,I BLAST AIBUF,I AIBFX SIOCP MAW ABTDA,I PLADD,I PRNT PLEAD ACLBI,I FWUP ENDS LNULP Pl 1 AIBFM ABTDA,I RMAX Pl A Pl 1 AIOLM ABTDA,I AEPON,I DISP RESIO SET PTR SET 80 CHAR COUNTER GET CHARACTER GET CHAR COUNT MPY CHAR CHAR COUNT GET LINE # ACCOUNT FOR LINE ZERO MPY LINE # CHAR CHAR COUNT ADD SUM SO FAR SET NEW SUM INC COUNTER NOT DONE SO KEEP GOING SET INDICATOR FOR PERIPHERAL ROUTINE GIVE PERIPHERAL CONTROL PRINT ONE LINE GET LAST PRINTED LINE NO.

LISTING COMPLETE? YES INCRM LINE NO.

CONT CLEAR I/O BUFFER GET A BLANK, ASTERIK PUT IN I/O BUFFER PUT # IN I/O BUFFER GET CHECKSUM MAKE POSITIVE PUT IN I/O BUFFER GIVE PERIPHERAL CONTROL PRINT CHECKSUM GIVE PAPER LEADER CLEAR I/O BUFF CALCULATE MEMORY USED BY PROGR Af MEMORY BETWEEN ENDS AND FWUP SKIP IFA NULL PROGRAM ADD I WORD FOR BRIDGES MAKES BYTES S/A TO PUT NUMBER CONVERT TO ASCII CALCULATE AVAILABLE MEMORY ADJUST ADDR B=AVAILABLE WORDS MAKE BYTES S/A TO PUT NUMBER MAKE ASCII AND PLACE IN I/O BUFF GO THROUGH PRINTALL DISPLAY o OF REGISTERS LEFT RESTORE AFTER LIST 209 Page 160 209 02375000 02376000 02377000 02378000 02379000 02380000 02381000 02382000 02383000 02384000 02385000 02386000 02387000 02388000 02389000 02390000 02391000 02392000 02393000 02394000 02395000 02396000 (Y 397000 92398000 02399000 02400000 02401000 02402000 02403000 02404000 02405000 02406000 02407000 02408000 02409000 02410000 02411000 02412000 02413000 02414000 02415000 02416000 02417000 02418000 02419000 02420000 02421000 02422000 02423000 02424000 02325000 02326000 02427000 02428000 02429000 02430000 12325 140404 12326 030471 12327 040751 12330 067325 12331 000001 12332 064644 ERLNW LGTNM 1,568,094 I/O SUPERVISOR JSM AERRI,I LINE NO WRONG ASC 1,19 JSM NGET GET NEXT PARAMETER JMP ERLNW WRONG TYPE.

LDA B A=POINTER JMP FIXPT FLOAT TO FIXED 210 S LISTK: SYSTEM COMMAND TO LIST ALL DEFINED KEYS IN NUMERICAL ORDER LDA STA JSM LDA CPA JMP JSM ISZ LDB CPB JMP JMP LDA JSM JSM JMP 12333 000177 LISTK 12334 031212 12335 043603 12336 001206 LSTK 1 12337 010254 12340 067347 12341 140473 12342 045212 12343 004122 12344 015212 12345 067347 12346 067336 12347 000144 LSTK 2 12350 140571 12351 040710 12352 067600 PO SPKN INTIO WKC Pl LSTK 2 ALISK,I SPKN P 26 SPKN LSTK 2 LSTK 1 P 3 ASPC,I EOLIO RESIO START WITH F O INIT FOR LISTING CHECK FOR STOP KEY STOP KEY IF = 1 = 1 SO ABORT OPERATION LIST KEY (SPKN) IF IT IS DEFINED BUMP THE KEY NUMBER IF F 26 IS THE NEXT KEY THEN ALL KEYS HAVE BEEN LISTED, SO PUT EOL IN THE DISP AND RETURN OTHERWISE KEEP LISTING UNTIL ALL KEYS ARE DONE.

GIVE 3 PAPER LINE FEEDS CLEAR I/O BUFFER, PLACE EOL IN I ST CHAR.

RESTORE AFTER LISTING AND RETURN TO INTERPRETER PRINT CONTENTS OF I/O BUFFER H 12 CHARACTERS ARE SEND TO THE PRINTER HARDWARE, THEN THE NEXT 4 CHARACTERS ARE SEARCHED FROM RIGHT TO LEFT FOR A + -/; OR SPACE AND THE LINE IS BROKEN AT THIS SPOT IF ANY ARE FOUND OTHERWISE 16 CHARACTERS ARE PRINTED THIS CONTINUES UNTIL THE LAST NON BLANK CHARACTER IS PRINTED 12353 000314 PIOB 12354 030017 12355 000133 12356 031227 PIOB 9 12357 043463 12360 001210 12361 072404 12362 000143 12363 031227 12364 067456 12365 000017 P B 2 12365 000017 PIOB 2 LDA STA LDA STA JSM LDA SZA LDA STA JMP LDA AIBFX D P 12 TM Pl PCOUT DTM Pl PIOB 2 P 4 TM Pl SBLP D GET I/O BUFF ADDR SET SOURCE POINTER 12 CHARS SET COUNTER OUTPUT CHARS GET "EOL" FLAG END OF LINE FOUND ? YES SET COUNT FOR 4 BLANKS FILL BUFF, PRINT LINE AND RETURN P+ I GET I/O BUFF POINTR 210 Page 161 02431000 02432000 02433000 02434000 02435000 02436000 02437000 02438000 02439000 02440000 02441000 02442000 02443000 02444000 02445000 02446000 02447000 02448000 02449000 02450000 02451000 02452000 02453000 02454000 02455000 02456000 02457000 02458000 02459000 02460000 02461000 02462000 02463000 02464000 02465000 02466000 02467000 02468000 02469000 02470000 02471000 02472000 02473000 02474000 02475000 02476000 02477000 02478000 02479000 02480000 02481000 02482000 02483000 02484000 02485000 02486000 1,568,094 I/O SUPERVISOR 12366 031225 12367 000142 12370 031231 12371 074570 PIOBI 12372 010053 12373 067453 12374 055231 12375 067371 12376 12377 12400 12401 12402 12403 12404 12405 12406 12407 12410 12411 12412 12413 12414 12415 12416 12417 12420 12421 12422 12423 12424 12425 12426 12427 12430 12431 12432 12433 12434 12435 12436 12437 12440 12441 12442 12443 12444 12445 12446 12447 12450 12451 12452 074770 000017 030016 074760 000143 031231 074760 PIOB 3 010110 067441 010106 067441 010111 067441 010104 067441 010117 067441 010076 067441 010107 067441 055231 067404 000143 PIOB 6 043527 043524 PIOX 2 043503 PIOX 3 074570 010053 170201 074770 000117 030006 000134 067356 001231 043527 001231 010143 067427 170040 020143 031227 043456 067430 PIOB 4 PIOB 4 STA TMP 2 LDA P 5 STA TMP 3 WBD Aj CPA EOL JMP PIOB 8 DSZ TMP 3 JMP PIOBI WBD A,D LDAD STA C WBC A,D LDA P 4 STA TMP 3 WBC A,D CPA B 53 JMP PIOB 4 CPA B 55 JMP PIOB 4 CPA B 52 JMP PIOB 4 CPA B 57 JMP PIOB 4 CPA B 40 JMP PIOB 4 CPA B 73 JMP PIOB 4 CPA B 54 JMP PIOB 4 DSZ TMP 3 JMP PIOB 3 LDA P 4 JSM SPIB JSM PRNT JSM CPST WBD A,I CPA EOL RET I WBD A,D LDA B 40 STA R 6 LDA P 11 JMP PIOB 9 LDA TMP 3 JSM SPIB LDA TMP 3 CPA P 4 JMP PIOX 2 TCA ADA P 4 STA TM Pl JSM SBLP JMP PIOX 3 AND SAVE IT LOOK AT NEXT 5 CHARACTERS SET COUNTER GET CHAR AND INCRM END-OF-LINE? YES DONE? NO DUMMY WITHDRAW,DEC GET I/O BUFF POINTR SET C-REG DUMMY WITHDRAW AND DECREM MAX OF 4 CHARS SET COUNTER GET CHAR AND DECREM YES+ YES -? YES ? YES / ? YES B LANK? YES 9 YES 9 YES DONE? NO NO BREAK POINT FOUND SET COUNT AND OUTPUT CHARS PRINT LINE CHECK PRINTER STATUS GET NEXT CHAR END OF LINE MARK? YES: DONE WITH THIS LINE NO; READJUST SOURCE POINTR GET BLANK INDENT THE LINE GET READY FOR 11 MORE CHARS OUTPUT MORE LINES NO OF ADDITIONAL CHARS SET COUNT AND OUTPUT CHARS A = NO OF CHARS OUTPUT ABOVE 12 A = 4, LINE COMPLETE PRINT LINE MAKE NEGATIVE A = NO OF CHARS TO REACH 16 SET CHAR COUNTR FILL BUFF AND PRINT LINE OUTPUT MORE LINES 211 Page 162 211 02487000 02488000 02489000 02490000 02491000 02492000 02493000 02494000 02495000 02496000 02497000 02498000 02499000 02500000 02501000 02502000 02503000 02504000 02505000 02506000 02507000 02508000 02509000 02510000 02511000 02512000 02513000 02514000 02515000 02516000 02517000 02518000 02519000 02520000 02521000 02522000 02523000 02524000 02525000 02526000 02527000 02528000 02529000 02530000 02531000 02532000 02533000 02534000 02535000 02536000 02537000 02538000 02539000 02540000 02541000 02542000 1,568,094 I/O SUPERVISOR 12453 000143 PIOB 8 12454 043527 12455 067524 LDA P 4 JSM SPIB JMP PRNT GET ALL REMAINING CHARS SET COUNT,RESET SOURCE POINTR,OUTPUT CHARACTERS PRINT LINE + RETURN P+ I PRINT UTILITY ROUTINES SEND BLANKS AND PRINT 16 CHARS 12456 000117 SBLP 12457 030006 SBL Pl 12460 055227 12461 067457 12462 067524 ENTRY: "TMPI" = NO OF BLANKS LDA STA DSZ JMP JMP B 40 R 6 TM Pl SBL Pl PRNT GET BLANK TO PRINTER HARDWARE DONE? NO PRINT LINE + RETURN P+ I PRINTER CHARACTER OUTPUT ENTRY:TMP=NO OFCHARS ENTRY: TM Pl = NO OF CHARS 12463 12464 12465 12466 12467 12470 12471 12472 12473 12474 12475 12476 12477 12500 12501 12502 043503 000177 031210 074570 010053 067475 030006 055227 067466 170201 045210 000117 030006 055227 067477 170201 PCOUT PCOU 1 PCOU 2 PCOU 3 PCOU 3 PCOU 4 PCOUX 12503 12504 12505 12506 000177 CPST 030011 CPSTI 050141 JSM LDA STA WBD CPA JMP STA DSZ JMP RET ISZ LDA STA DSZ JMP RET CPST PO DTM Pl A,I EOL PCOU 3 R 6 TM Pl PCOU 2 DTM Pl B 40 R 6 TM Pl PCOU 4 CHECK PRINTER STATUS CLEAR "EOL" FLAG GET CHAR AND INCREM.

END OF LINE? YES; DO NOT COUNT THE EOL CHAR TO PRINTER HARDWARE DONE? NO YES SET "EOL" FLAG GET BLANK TO PRINTER HARDWARE DONE? NO; LOOP CHECK PRINTERSTATUS LDA STA LDA AND PPA PA R 5 P 6 GET PRINTER SEL CODE SET PERIPHERAL ADDR GET PRINTER STATUS SAVE PRINTER BUSY AND OUT OF PAPER BITS SZA PCOUX OK: PROCEED 212 Page 163 212 02543000 02544000 02545000 02546000 02547000 02548000 02549000 02550000 02551000 02552000 02553000 02554000 02555000 02556000 02557000 02558000 02559000 02560000 02561000 02562000 02563000 02564000 02565000 02566000 02567000 02568000 02569000 02570000 02571000 02572000 02573000 02574000 02575000 02576000 02577000 02578000 02579000 02580000 02581000 02582000 02583000 02584000 02585000 02586000 02587000 02588000 02589000 02590000 02591000 02592000 02593000 02594000 02595000 02596000 02597000 02598000 12507 072473 1,568,094 I/O SUPERVISOR 12510 12511 12512 12513 12514 12515 12516 12517 12520 12521 12522 12523 170501 073474 140404 ERPRT 030465 004314 PRINT 034016 043503 000127 031211 074566 PRN 1 I 055211 067521 12524 000254 PRNT 12525 030005 12526 170201 12527 12530 12531 12532 031227 SPIB 001225 030017 067464 12533 000147 PLEAD 12534 141221 SAR RLA JSM ASC 2 CPSTI AERR 1,1 1,15 POSITION BUSY BIT IF BUSY SKIP AND CHECK AGAIN NO PRINTER OR NO PAPER OUTPUT 16 CHARS FROM I/O BUFF TO PRINTER ENTRY: I/O BUFF SET LDB STB JSM LDA STA WBC DSZ JMP AIBFX C CPST P 16 DTMP 2 R 6,I DTMP 2 PRNI I/O BUFF Si A SET C-REG CHECK PRINTER STATUS CHAR COUNT SET COUNTER SEND BYTE TO HARDWARE, INC PTR ALL CHARS OUT? NO: LOOP PRINT ONE LINE ENTRY: HARDWARE LOADED WITH 16 CHARS LDA STA RET Pl R 5 PRINT COMMAND PRINT LINE SET CHAR COUNT AND OUTPUT CHARS ENTRY: A = CHAR COUNT STA LDA STA JMP TM Pl TMP 2 D PCOUI SET CHAR COUNT RECALL I/O BUFF POINTR RESET SOURCE POINTER OUTPUT CHARS + RETURN P + I GIVE PAPER LINE FEEDS ENTRY "PLDX" A = NO OF LINE FEEDS PLEAD ENTRY ASSUMES PLADD IS SET TO THE ADDRESS OF A RETURN OR THE ADDRESS OF THE PERIPHERAL LIST ROUTINE A WILL CONTAIN A -3 SO THAT THE PERIPHERAL LIST ROUTINE WILL KNOW HOW MANY LINE FEEDS TO ISSUE LDA M 3 SET INDICATOR FOR PERIPHERAL ROUTINES JSM PLADD,I ALLOW PERIP CHANCE TO SPACE RET 2 IF PRESENT Page 164 02599000 02600000 02601000 02602000 02603000 02604000 02605000 02606000 02607000 02608000 02609000 02610000 02611000 02612000 02613000 02614000 02615000 02616000 02617000 02618000 02619000 02620000 02621000 02622000 02623000 02624000 02625000 02626000 02627000 02628000 02629000 02630000 02631000 02632000 02633000 02634000 02635000 02636000 02637000 02638000 02639000 02640000 02641000 02642000 02643000 02644000 02645000 02646000 02647000 02648000 02649000 02650000 02651000 02652000 02653000 02654000 213 213 1,568,094 I/O SUPERVISOR 067537 170201 000144 031211 PLDX 004127 PLEA 2 035210 043503 000117 030006 PLEA 1 055210 067545 043524 055211 067541 170201 PLEA 3 JMP RET LDA STA LDB STB JSM LDA STA DSZ JMP JSM DSZ JMP RET + 2 P 3 DTMP 2 P 16 DTM Pl CPST B 40 R 6 DTMPI 1 PLEA 1 PRNT DTMP 2 PLEA 2 NOT THERE SO SPACE PRINTER PERIP SPACED, RETURN LINE FEED COUNT SET CHAR COUNTR CHECK PRINTER STATUS GET BLANK TO PRINTER HARDWARE DONE? NO: CONT PRINT ONE LINE DONE? NO; PRINT ANOTHER LINE 043603 EPRT 043634 000263 140505 067577 176002 EPRT 2 067754 072403 043672 067567 043606 EPRTI 000254 EPRT 3 140505 067573 067561 001727 010315 067577 043514 040710 EPRT 4 001234 RESIO 030016 164365 PRINT STATEMENT EXECUTION

JSM JSM LDA JSM JMP SBP JMP SZA JSM JMP JSM LDA JSM JMP JMP LDA CPA JMP JSM JSM LDA STA JMP INTIO PCLIO FLAG APGET,I EPRT 4 + 2 ERUND EPRTI PSTRG EPRT 3 PNUMR Pl APGET,I + 2 EPRT 2 T 15 AIBFM + 2 PRNT EOLIO TMP 4 C AINTX,I INIT FOR OUTPUT CLR I/O BUFFER, RESET STRING FLAG FOR "PGET" GET FIRST PARAMETER NO PARAMETERS SKIP IF OK UNDEFINED OR WRONG CLASS SKIP ON NUMERIC PRINT STRING PRINT NUMERIC FOR "PGET" GET NEXT PARAMETER LIST EXHAUSTED CONTINUE GET STRING FLAG STRING PENDING? NO PRINT STRING CLEAR I/O BUFF AND SET EOL IN I/O BUFF RESTORE C REGISTER BACK TO INTERPRETER IOINT INIT ROUTINE FOR ANY ROUTINE THAT USES THE I/O BUFFER FOR I/O LIST PROG, LIST KEYS, DISP STMT, PRT STMT PLIST 12535 12536 12537 12540 12541 12542 12543 12544 12545 12546 12547 12550 12551 12552 12553 Page 165 02655000 02656000 02657000 02658000 02659000 02660000 02661000 02662000 02663000 02664000 02665000 02666000 02667000 02668000 02669000 02670000 02671000 02672000 02673000 02674000 02675000 02676000 02677000 02678000 02679000 02680000 02681000 02682000 02683000 02684000 02685000 02686000 02687000 02688000 02689000 02690000 02691000 02692000 02693000 02694000 02695000 02696000 02697000 02698000 02699000 02700000 02701000 02702000 02703000 02704000 02705000 02706000 02707000 02708000 02709000 02710000 12554 12555 12556 12557 12560 12561 12562 12563 12564 12565 12566 12567 12570 12571 12572 12573 12574 12575 12576 12577 12600 12601 12602 214 214 1,568,094 I/O SUPERVISOR 12603 004016 INTIO 12604 035234 12605 170201 12606 12607 12610 12611 12612 12613 12614 12615 12616 12617 12620 12621 12622 12623 12624 12625 12626 12627 12630 12631 12632 12633 12634 12635 12636 12637 12640 12641 12642 12643 12644 12645 12646 LDB C STB TMP 4 RET I SAVE C PRINT NUMERIC ENTRY: B = CHAR COUNT D = BYTE ADDR OF FIRST CHAR USEST 15 AS A FLAG IF IT IS NOT SET TO AIBFM THEN IT ASSUMES THAT A STRING IS PENDING SO THE ROUTINE WILL TRY TO PUT THE NUMERIC ON THE SAME LINE ASSUMES THAT THE STRING LENGTH IS IN DTMPI.

USES WPRT TO DECIDE WHAT THE FIX/FLT SETTING OF THE NUMBER IS IF THE NUMBER HAS REVERTED TO FLOAT 10 OR 11 THEN IT WILL USE THE LENGTH OF THE NUMBER TO DETECT THIS LENGTH OF 17 = FLOAT 10, LENGTH OF 18 = FLOAT 11 035712 PNUMR STB 001727 LDA 010315 CPA 067613 JMP 067644 JMP 024161 ADB 176424 SBM 001217 PNUM 9 LDA 050130 AND 020144 ADA 031713 STA 004000 LDB 043736 JSM 005713 LDB 140502 JSM 043514 JSM 140450 JSM 000313 LDA 020142 ADA 004143 LDB 140502 PNUM 4 JSM 043514 PCLII JSM 140450 PCLIO JSM 000315 LDA 031727 STA 170201 RET 005712 043736 005712 067632 PNUM 3 PNUM 5 001210 PNUM 2 021712 020161 LDB JSM LDB JMP LDA ADA ADA T 2 T 15 AIBFM + 2 PNUM 2 M 17 PNUM 3 WPRT B 17 P 3 T 3 A RJNM T 3 ATCH R I PRNT ACLBI,I AIBUF PS P 4 ATCHR,I PRNT ACLBI,I AIBFM TI 5 T 2 RJNM T 2 PNUM 4 DTM Pl T 2 M 17 SAVE NO OF CHARS GET STRING FLAG STRING ON SAME LINE'? NO YES NO OF CHAR < = 16 ? NO; GET FXD/FLT SPEC.

GET FLT SPEG.

ACCOUNT FOR SIGN, DIGIT, DEC POINT SAVE CHAR COUNT OF FIRST NUM PART GET NO OF CHARS RIGHT JUSTIFY NUM.

GET CHAR COUNT TRANSFER CHARACTERS PRINT ONE LINE CLEAR I/O BUFF I/O BUFF S/A A = START POINTR FOR EXPONENT PART EXPONENT INFO OF 4 CHARS TRANSFER CHARACTERS PRINT ONE LINE CLEAR I/O BUFFER A/S OF I/O BUFF RESET STRING FLAG GET NO OF CHARS RIGHT JUSTIFY NUM.

GET NO OF NUM CHARS GET NO OF STRING CHARS ADD NO OF NUM CHARS Page 166 02711000 02712000 02713000 02714000 02715000 02716000 02717000 02718000 02719000 02720000 02721000 02722000 02723000 02724000 02725000 02726000 02727000 02728000 02729000 02730000 02731000 02732000 02733000 02734000 02735000 02736000 02737000 02738000 02739000 02740000 02741000 02742000 02743000 02744000 02745000 02746000 02747000 02748000 02749000 02750000 02751000 02752000 02753000 02754000 02755000 02756000 02757000 02758000 02759000 02760000 02761000 02762000 02763000 02764000 02765000 02766000 215 215 1,568,094 Page 167 02767000 02768000 02769000 02770000 02771000 02772000 02773000 02774000 027750 O 02776000 02777000 02778000 02779000 02780000 02781000 02782000 02783000 02784000 02785000 02786000 I/O SUPERVISOR 12647 172471 12650 12651 12652 12653 12654 12655 12656 12657 001712 010126 067660 010125 067660 043514 PNUM 6 140450 067640 12660 021210 02787000 12661 02788000 12662 02789000 12663 02790000 12664 02791000 12665 02792000 12666 02793000 12667 02794000 02795000 02796000 02797000 12670 02798000 02799000 02800000 02801000 02802000 02803000 02804000 02805000 02806000 02807000 02808000 02809000 02810000 02811000 02812000 02813000 02814000 02815000 02816000 028 i 17000 02818000 02819000 02820000 02821000 02822000 020144 020161 172002 067615 043514 140450 067615 SAM PNUM 3 SKIP IF SUM ≤ 16 CHARS LDA CPA JMP CPA JMP JSM JSM JMP T 2 P 17 PNUM 7 P 18 PNUM 7 PRNT ACLBI,I PNUM 3 GET LENGTH OF NUMBER IS IT FLOAT 10 ? YES IS IT FLOAT 11 ? YES PRINT STRING LINE CLEAR I/O BUFF TRANSFER AND PRINT NUM.

ORIGINALLY IT WAS INTENDED TO PUT THE MANTISSA ON THE SAME LINE AS THE STRING IF IT WOULD FIT AND THE CHARACTERISTIC ON THE NEXT LINE IF THE NUMBER WAS FLOAT 10 OR 11 TO MAKE THIS WORK PROPERLY CHANGE THE ADA P 3 AND ADA M 17 INSTRUCTIONS TO ADA M 10, ADA Mll PNUM 7 ADA DTM Pl ADD NO OF STRING CHAR TO FLOAT SPEC ADA P 3 ACCOUNT FOR SIGN, DIGIT, DEC POINT ADA SAP JMP JSM JSM JMP M 17 + 2 PNUM 9 PRNT ACLBI,I PNUM 9 BSS 2 SKIP IF SUM > 16 CHARS SUM < = 16 CHARS PRINT STRING LINE CLEAR I/O BUFF TRANSFER AND PRINT NUM.

POST RELEASE CORECTIONS PRINT STRING ENTRY: B = CHAR COUNT D = BYTE ADDR OF FIRST CHAR IFT 15 # AIBFM OLD STRING IS STILL PENDING EXIT: IF STRING LENGTH MOD 16 WAS NOT 0 THEN T 15 WILL NOT BE SET TO AIBFM, AND THE LAST PART OF THE STRING WILL NOT BE PRINTED DTM Pl WILL CONTAIN THE LENGTH OF THE REMAINING STRING THAT WAS LEFT IN THE I/O BUFFER IN ORDER TO PRINT A STRING BY ITSELF THE FOLLOWING SEQUENCE SHOULD BE USED LDA AIBFM STA T 15 JSM APSTR,I JSM A PRNI PRINT THE REST OF THE STRING 216 216 1,568,094 I/O SUPERVISOR 12672 12673 12674 12675 12676 12677 12700 12701 12702 12703 12704 12705 12706 12707 12710 035210 PSTRG 001727 010315 067677 043633 005210 PSTR 4 076406 024160 176007 000315 005210 140502 000016 PSTR 2 031727 170201 12711 140450 PSTR 6 12712 000177 12713 031714 12714 000315 12715 030016 12716 001210 PSTR 5 12717 072004 12720 001714 12721 031210 12722 067706 12723 074570 PSTR 3 12724 074540 12725 055210 12726 067727 12727 045714 12730 001714 12731 010127 12732 067734 12733 067716 12734 043514 12735 067711 12736 024160 RJNM 12737 174040 12740 000315 12741 164401 STB DTM Pl LDA T 15 CPA AIBFM JMP PSTR 4 JSM PCLII LDB DTM Pl SZB PSTR 2 ADB M 16 SBP PSTR 6 LDA AIBFM LDB DTM Pl JSM ATCHR,I LDA C STA TI 15 RET 1 JSM ACLBI,I LDAPO STA T 4 LDA AIBFM STA C LDA DTM Pl RZA PSTR 3 LDA T 4 STA DTM Pl JMP PSTR 2 WBD A, PBC A,I DSZ DTM Pl JMP + 1 ISZ T 4 LDA T 4 CPA P 16 JMP + 2 JMP PSTR 5 JSM PRNT JMP PSTR 6 SAVE NO OF CHARS GET STRING FLAG OLD STRING PENDING ? NO PRINT STRING,CLR I/O BUFFER,RESET STRING FLAG GET NO OF CHARS (NEW STRING) SKIP ON A NULL STRING SKIP IF NO OF CHARS ≥ 16 I/O BUFF S/A GET CHAR COUNT TRANSFER CHARS GET DESTINATION POINTR SET STRING INCOMPLETE FLAG NUM MAY FOLLOW CLEAR I/O BUFF INIT LINE CHAR COUNTER I/O BUFF S/A STRING CHAR COUNT DONE? YES; ALL STRING OUT SAVE REMAINDER COUNT SAVE STRING POINTR GET ONE CHAR AND INCRM INCRM AND STORE CHAR DECRM STRING COUNT INCRM LINE CHAR COUNT GET ITS VALUE 16 CHARS OUT? YES NO PRINT 16 CHARS RIGHT JUSTIFYNUMERIC ENTRY: B = NO OF CHARS IN NUM.

EXIT: A = DESTINATION POINTER ADB M 16 TCB LDA AIBFM JMP AADBA,I B = ADJUST COUNT MAKE NEGATIVE I/O BUFF S/A ADJUST ADDR Page 168 02823000 0282 00 02825000 02826000 02827000 02828000 02829000 02830000 02831000 02832000 02833000 02834000 02835000 02836000 02837000 02838000 02839000 02840000 02841000 02842000 02843000 02844000 02845000 02846000 02847000 02848000 02849000 0285 Q 000 02851000 02852000 02853000 02854000 02855000 02856000 02857000 02858000 02859000 02860000 02861000 02862000 02863000 02864000 02865000 02866000 02867000 02868000 02869000 02870000 02871000 02872000 02873000 02874000 02875000 02876000 02877000 02878000 217 217 1,568,094 I/O SUPERVISOR DISP STATEMENT EXECUTION

A BLANK IS PLACED BETWEEN EACH FIELD IN THE DISPLAY

STMT AN ERROR IS ISSUED IF THE DISPLAY FIELD WILL NOT FIT IN

CHAR vs 12742 043603 EDIS 12743 140450 12744 000315 12745 030016 12746 000165 12747 031227 12750 000263 12751 140505 EDI 52 12752 066005 12753 176003 12754 140404 ERUND 12755 030470 12756 076425 12757 035225 12760 005227 12761 000016 12762 010315 12763 067765 12764 024254 12765 025225 EDISI 12766 035227 12767 076404 12770 176403 12771 140404 ERBOV 12772 031467 12773 004016 EDI 53 12774 014315 12775 067777 12776 074560 12777 074570 EDI 54 13000 074540 13001 055225 13002 067777 13003 000254 EDI 56 13004 067751 13005 043135 EDI 55 13006 140436 13007 067600 13010 001215 FBP 13011 005512 13012 035711 13013 030016 13014 001214 JSM INTIO JSM ACLBI,I LDA AIBFM STA C LDA M 80 ' STA TM Pl LDA FLAG JSM APGET,I JMP EDI 55 SBP + 3 JSM AERRI,I ASC 1,18 SZB EDI 56 STB TMP 2 LDB TM Pl LDAC CPA AIBFM JMP EDISI ADB Pl ADB TMP 2 STB TM Pl SZB EDI 53 SBM + 3 JSM AERRI,I ASC 1,37 LDB C CPB AIBFM JMP EDI 54 WBC AI WBD A, PBC AI DSZ TMP 2 JMP EDI 54 LDA Pl JMP EDI 52 JSM DISP JSM AEPONI JMP RESIO INIT FOR I/O CLEAR I/O BUFFER SET DESTINATION REG.

SET 80 CHAR MAX COUNT FOR FIRST ACESS OF "PGET" GET ONE PARAMETER LIST EXHAUSTED SKIP IF OK UNDEFINED OR WRONG CLASS SKIP IF COUNT IS ZERO SAVE PARAMETER CHAR COUNT GET COUNT GET CURRENT BUFFER POINTR IS THIS THE FIRST PARAMETER? YES COUNT FOR ONE BLANK ADD PARAMETER CHAR COUNT UPDATE COUNT BUFF EXACT FIT? NO; BUFF OVERFILL? YES; ERROR GET CURRENT BUFF POINTR IS THIS THE FIRST PARAMETER? YES DUMMY INC GET CHAR AND INCRM INCRM AND PLACE IN I/O BUFF ALL CHARS TRANSFERRED? NO; CONT FOR NEXT ACCESS OF "PGET' LOOK FOR NEXT PARAMETER DISP INFO GO THRU PRINT ALL RESTORE AFTER I/O FIND DBP ( DISP BEGIN POINTR) EXIT: RET P+ 1 DISP BEGIN POINTR SET LDA LDB STB STA LDA IOCP DLEN TI C CRSP GET CURRENT I/O BUFF POINTR GET DISP LENGTH SET COUNTER SET C-REG GET CURSOR POINTR Page 169 02879000 02880000 02881000 02882000 02883000 02884000 02885000 02886000 02887000 02888000 02889000 02890000 02891000 02892000 02893000 02894000 02895000 02896000 02897000 02898000 02899000 02900000 02901000 02902000 02903000 02904000 02905000 02906000 02907000 02908000 02909000 02910000 02911000 02912000 02913000 02914000 02915000 02916000 02917000 02918000 02919000 02920000 02921000 02922000 02923000 02924000 02925000 02926000 02927000 02928000 02929000 02930000 02931000 02932000 02933000 02934000 218 218 219 1,568,094 I/O SUPERVISOR 13015 13016 13017 13020 13021 072406 050074 011512 066022 170201 13022 055711 13023 13024 13025 13026 13027 13030 13031 13032 13033 13034 13035 13036 13037 13040 13041 13042 004016 FB Pl 015352 066037 015513 170201 074760 055711 066023 074560 FBP 3 004016 035513 170201 005512 015711 066511 066033 FB P 2 13043 140451 LTID 13044 040715 13045 042057 13046 074570 LTIDI 13047 140430 13050 066051 13051 045227 13052 066046 13053 000117 13054 140430 13055 066056 13056 170201 SZA AND CPA JMP RET FB Pl B 77 DLEN + 2 DSZ TI LDB CPB JMP CPB RET WBC DSZ JMP WBC LDB STB RET LDB CPB JMP C AEBFM FBP 2 DBP 1 A,D Tl FB Pl A,I C DBP DLEN TI EOLEB JMP FBP 3 SKIP IF CURSOR NOT SET GET CURSOR POSITION CURSOR AT END OF DISP? YES; FIND DISP BEGIN POINTR NO: DO NOT CHANGE DBP IF CORSOR IS ON DLEN, REPLACE THAT CHAR AND SHIFT LEFT GET C-REG BEGIN OF EDIT BUFFER ADDR -1 YES PTR = DISPLAY BEGIN BUFFER? YES, DON'T MOVE DBP BACKWARD WITHDRAW ONE BYTE AND DECREM.

DECRM COUNTER: DONE? NO; CONTINUE YES; INCRM POINTER GET C-REG SET DISP BEGIN POINTR GET DISP LENGTH COUNTER CHANGED? NO; CLEAR EDIT BUFFER, GIVE EOL AND RETURN ADJUST POINTR LOAD TYPE-AIDIN DISPLAY ENTRY: CODE IN "SKEY" EXIT: ASCII CHARS OF TYPE-AID IN EDIT BUFFER EDIT BUFFER IS CLEARED AND MODE SET TO ZERO BEFORE TYPE AID IS PUT IN THE FIRST PART OF EDIT BUFFER "DBP" POINTS TO FIRST CHAR ISM JSM JSM WBD JSM JMP ISZ JMP LDA JSM JMP RET ACLEB,1 CLMOD STTM A,I AISTX,I + 1 TM Pl LTIDI B 40 AISTX,I + 1 CLEAR EDIT BUFFER SET KBD MODE SEARCH TABLE FOR MNEMONIC GET ONE CHAR STORE IN I/O BUFF "ISTO 2 " RETURNS ON P + 2 DONE? NO; CONT GET SPACE STORE IN I/O BUFF "ISTO 2 " RETURNS ON P + 2 YES SEARCH TABLE OF TYPE-AID MNEMONICS ENTRY: CODE IN "SKEY" EXIT: D = FIRST CHAR PTR 219 Page 170 02935000 02936000 02937000 02938000 02939000 02940000 02941000 02942000 02943000 02944000 02945000 02946000 02947000 02948000 02949000 02950000 02951000 02952000 02953000 0295400 02955000 02956000 02957000 02958000 02959000 02960000 02961000 02962000 02963000 02964000 02965000 02966000 02967000 02968000 02969000 02970000 02971000 02972000 02973000 02974000 02975000 02976000 02977000 02978000 02979000 02980000 02981000 02982000 02983000 02984000 02985000 02986000 02987000 02988000 02989000 02990000 1,568,094 I/O SUPERVISOR 002076 STTM 030017 005235 074570 STTM 2 060170 031227 074570 014000 170201 010045 140424 074570 STTM 1 045227 066072 066062 113077 TTM 176033 066151 071564 175435 062562 060563.

11306277 TTM 176033 0615146 071564 175435 062562144 060563373 016146 06277564 017162 06155046 176437777 066144 063373 016146 062564 061550 177777 220 TM Pl =NEG LENGTH LDA STA LDB WBD IOR STA WBD CPB RET CPA JSM WBD ISZ JMP JMP TTM D SKEY A,I M 256 TM Pl A,I A B 377 ASYER,I A,I TM Pl STTMI STTM 2 S/A OFTABLE

SET D REG GET ASCII CODE GET BYTE AND INC CONFIGURE COMPLETE NEG LENGTH AND SAVE IT GET ASCII CODE AND INC CODE FOUND? YES NO; END OF TABLE? YES, ERROR NO; BYPASS THIS ENTRY DONE? NO; CONT NEXT ENTRY TABLE OF TYPE-AID MNEMONICS EACH ENTRY IS COMPOSED OF:

-LENGTH (OF MNEMONIC) KEY ASCII CODE MNEMONIC ASCII CHARACTERS DEF OCT DEC DEC OCT DEC DEC OCT OCT OCT OCT OCT OCT OCT DEC DEC DEC +I,I 176033 27753 29556 175435 25970 24947 62775 17162 61546 176437 66144 63373 16146 25972 25448 -1 -4,33 LI ST -5,35 ER AS E,-3 36,R CF -3,37 LD F,-5 34, F ET CH END-OF-TABLE

PRINT ALL EXECUTION EPKBD ENTRY: PRINT KEYBOARD BUFFER (KBUFF) IF PRINTALL IS SET (BIT 15 OF CFLAG) 220 Page 171 02991000 02992000 02993000 02994000 02995000 02996000 02997000 02998000 02999000 03000000 03001000 03002000 03003000 03004000 03005000 03006000 03007000 03008000 03009000 03010000 03011000 03012000 03013000 03014000 03015000 03016000 03017000 03018000 03019000 03020000 03021000 03022000 03023000 03024000 03025000 03026000 03027000 03028000 03029000 03030000 03031000 03032000 03033000 03034000 03035000 03036000 03037000 03038000 03039000 03040000 03041000 03042000 03043000 03044000 03045000 13057 13060 13061 13062 13063 13064 13065 13066 13067 13070 13071 13072 13073 13074 13075 13076 13077 13100 13101 13102 13103 13104 13105 13106 13107 13110 13111 13112 13113 13114 13115 13116 03046000 1,568,094 I/O SUPERVISOR EPON ENTRY: PRINT I/O BUFFER (IBUFF) IF PRINT-ALL IS SET EPNX ENTRY: PRINT I/O BUFFER REGARDLESS OF PRINT-ALL BIT IN ALL CASES THE RESPECTIVE BUFFERS ARE PRINTED 16 CHAR AT A TIME UNTIL NO NON BLANK (OTHER THAN EOL) CHARACTERS REMAIN IN THE BUFFER 000307 EPKBD 005232 176406 170201 001232 EPON 172402 170201 000314 EPNX 031222 EPPP 030017 140442 EPONI 004127 035735 140501 EPON 3 010053 066150 074576 055735 066145 140443 000017 066127 004017 EPON 2 035222 066134 13150 000017 EPON 4 13151 010314 13152 066160 13153 010307 13154 066160 13155 000127 13156 011735 13157 170201 13160 000117 EPON 6 13161 030006 EPON 5 13162 055735 13163 066161 13164 164443 LDA LDB SBM RET LDA SAM RET LDA STA STA JSM LDB STB JSM CPA JMP WBD DSZ JMP JSM LDA JMP LDB STB JMP LDA CPA JMP CPA JMP LDA CPA RET LDA STA DSZ JMP JMP AKBFX CFLAG EPPP CFLAG EPNX AIBFX L D ACPST,I P 16 T 21 AGNXT,I EOL EPON 4 R 6,I T 21 EPON 2 APRNT,I D EPPP D L EPON 3 D AIBFX EPON 6 AKBFX EPON 6 P 16 T 21 1 B 40 R 6 T 21 EPONS APRNT,I SET KBD BUFF S/A SKIP IF PRINT-ALL SET GET CONTROL FLAG PRINT-ALL? NO I/O BUFFER S/A SET "GNEXT" POINTR SET D-REG CHECK PRINTER STATUS SET 16 CHAR COUNTR GET NEXT CHAR (BLANKS IGNORED) END OF INFO? YES; COMPLETE WITH BLANKS SEND CHAR TO HARDWARE 16 CHARS OUT? NO YES; PRINT ONE LINE RESTORE L POINTER PRINT MORE LINES GET CURRENT SOURCE POINTR UPDATE "GNEXT" POINTR LOOP SEE IF BUFFER WAS EMPTY I/O BUFFER WAS EMPTY KBD BUFFER WAS EMPTY SEE IF LINE TO PRINT IS NULL YES, DONE GET A BLANK SEND A BLANK TO PRINTER HARDWARE DONE? NO PRINT ONE LINE ROM POWER REDUCTION LOOP EXIT: RET P + I CURSOR SET Page 172 13117 13120 13121 13122 13123 13124 13125 13126 13127 13130 13131 13132 13133 13134 13135 13136 13137 13140 13141 13142 13143 13144 13145 13146 13147 03047000 03048000 03049000 03050000 03051000 03052000 03053000 03054000 03055000 03056000 03057000 03058000 03059000 03060000 03061000 03062000 03063000 03064000 03065000 03066000 03067000 03068000 03069000 03070000 03071000 03072000 03073000 03074000 03075000 03076000 03077000 03078000 03079000 0308000 03081000 03082000 03083000 03084000 03085000 03086000 03087000 03088000 03089000 03090000 03091000 03092000 03093000 03094000 03095000 03096000 03097000 03098000 03099000 03100000 03101000 03102000 221 221 1,568,094 Page 173 I/O SUPERVISOR 13165 001207 RPRL 13166 170201 LDA WMOD RET I GET NEW KEY FLAG KEYCODE CONVERSION TABLES KEYCODES 13167 013170 KTBL 2 13170 036055 13171 037057 13172 023441 13173 021043 13174 022045 13175 023100 13176 055535 13177 000073 13200 000075 13201 000072 13202 000214 13203 106616 13204 107620 13205 110622 13206 111624 13207 112626 13210 113400 13211 030061 13212 031063 13213 032065 13214 033067 13215 034071 13216 027054 13217 000000 13220 000000 13221 056000 13222 057400 DEF OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT EOL (LAZY T): 177 54-140 (SHIFTED) + 1 36055 37057 23441 21043 22045 23100 55535 73 72 214 106616 107620 110622 111624 112626 113400 30061 31063 32065 33067 34071 27054 0 0 56000 57400 KEYCODES 13223 13224 13225 13226 13227 13230 13231 13232 13233 013224 KTBL 1 100602 101604 102606 103610 104612 105400 030061 DEF OCT OCT OCT OCT OCT OCT OCT OCT + 1 100602 101604 102606 103610 104612 105400 30061 /:>/ 01:'l 23:" 1# 45:$ % 67:8 @ 6 7: & @ 89:ll NULL;: NULL; NULL =: NULL= NULL ?: NULL:

NULL SK 0: NULL SK 12 SKI SK 2: SK 13 SK 14 SK 3 SK 4: SKI 5 SK 16 SK 5 SK 6: SK 17 SK 18 SK 7 SK 8: SK 19 SK 20 SK 9 SK 10: SK 21 SK 22 SKI 1 NULL: SK 23 NULL PO Pl:PO Pl P 2 P 3: P 2 P 3 P 4 P 5: P 4 P 5 P 6 P 7: P 6 P 7 P 8 P 9: P 8 P 9 NULL NULL: NULL NULL NULL NULL: NULL NULL A NULL: SQR NULL ENTER EXP NULL: UNDERSCORE NULL 101-131 (UNSHIFTED) NULL SK O SKI SK 2 SK 3 SK 4 SK 5 SK 6 SK 7 SK 8 SK 9 SK 10 SKI 1 NULL PO Pl 03103000 03104000 03105000 03106000 03107000 03108000 03109000 03110000 03111000 03112000 03113000 03114000 03115000 03116000 03117000 03118000 03119000 03120000 03121000 03122000 03123000 03124000 03125000 03126000 03127000 03128000 03129000 03130000 03131000 03132000 03133000 03134000 03135000 03136000 03137000 03138000 03139000 03140000 03141000 03142000 03143000 03144000 03145000 03146000 03147000 03148000 03149000 03150000 03151000 03152000 03153000 03154000 03155000 03156000 03157000 03158000 222 222 223 1,568,094 223 I/O SUPERVISOR 13234 031063 13235 032065 13236 033067 13237 034071 13240 027054 OCT OCT OCT OCT OCT 8 8.

31063 P 2P 3 32065 P 4P 5 33067 P 6P 7 34071 P 8P 9 27054, RECALL KEY SETS MODE = 0, SETS DBP TO START OF EDIT BUFFER, CLEARS CURSOR IF LAST KEY WAS RECALL (BIT 5 OF CFLAG) THEN KBUFF AND RBUFF ARE SWAPPED SETS BITS 5, 6 OF CFLAG (RECALL BITS) THE KBD BUFFER IS TRANSFERRED TO THE I/O BUFFER UNLESS STATE = 2 (LIVE KBD) IOCP AND OLCP ARE SET TO THE CHAR AFTER THE LAST NONBLANK CHAR IN THE RECALLED LINE IF THE COMPILE ERROR FLAG (CERR) IS SET THEN IOCP, DBP, AND CRSP ARE SET SO THE CURSOR WILL BE DISPLAYED ON THE PROPER CHAR IN THE EDIT BUFFER CERR SHOULD ALWAYS POINT INTO THE KBD (KBUFF) BUFFER AN OFFSET IS CALCULATED FROM THE START OF THIS BUFFEI USING THE ABSOLUTE ADDR IN CERR, IOCP, BDP ARE THEN SE TO THEIR CORRECT ADDRESSES IN THE EDIT BUFFER USING THIS OFFSET NOTE IF IN LIVE KBD THEN THE EDIT BUFFER IS THE KBD BUFFER, OTHERWISE IT IS THE I/O BUFFER AN ADDITIONAL TEST IS MADE TO INSURE THE THE CURSOR IS NOT ON THE 81ST CHAR, IF SO IT IS PUT ON THE 80TH CHAR 13241 040714 RECL 13242 001351 13243 031513 13244 000177 13245 031214 13246 001232 13247 170704 13250 073017 13251 000306 13252 030016 13253 000322 13254 030017 13255 000112 13256 031711 13257 070760 RLOOP 13260 070771 13261 070541 13262 070550 13263 044016 13264 044017 JSM LDA STA LDA STA LDA RAR SLACLMOD SET KBD MODE AEBFX SET DISPLAY BEGIN PTR DBP PO CLEAR CURSOR POINTER CRSP CFLAG SEE IF PREVIOUS KEY = RECALL RNORE DON'T SWAP BUFFERS IF NOT LDA AKBUF S/A OF KBD BUFFER STA C SET POINTER LDA ARBUF S/A OF RESERVE BUFFER STA D LDA P 41 41 WORDS TO TRANSFER STA Tl SET COUNTER WWC A,D GET A WORD FROM KBD BUFFER WWD B,D GET A WORD FROM RESERVE BUFFER PWC B,I PUT WORD IN KBD BUFFER PWD A,I PUT WORD IN RESERVE BUFFER ISZ C BUMP BUFFER POINTERS ISZ D Page 174 03159000 03160000 03161000 03162000 03163000 03164000 03165000 03166000 03167000 03168000 03169000 03170000 03171000 03172000 03173000 03174000 03175000 03176000 03177000 03178000 03179000 03180000 03181000 03 182000 03183000 03184000 03185000 03186000 03187000 03188000 03189000 03190000 03191000 03192000 03193000 03194000 03195000 03196000 03197000 03198000 03199000 03200000 03201000 03202000 03203000 03204000 03205000 03206000 03207000 03208000 03209000 03210000 03211000 03212000 03213000 03214000 1,568,094 223 223 1,568,094 I/O SUPERVISOR 13265 055711 13266 066257 001232 RNORE 060066 031232 001257 010145 066300 000306 004315 042447 140500 031213 031215 005316 076432 000310 140362 031214 004177 035316 001352 005214 024257 140401 031215 005353 024257 015215 066342 005213 140362 020257 172004 001215 004254 042415 005214 174040 025512 176402 170201 RELKB RELLL REC 10 RELCR RECEX 13337 001512 RECL 3 13340 031214 13341 164446 13342 176301 RECII 13343 000001 13344 066316 224 DSZ T 1 SEE IF DONE JMP RLOOP CONTINUE IF NOT LDA IOR STA LDA CPA JMP LDA LDB JSM CFLAG B 140 CFLAG CSTAT P 2 RELKB AKBUF AIBFM TRBX GET CONTROL FLAG AGAIN SET BIT, 5,6 RESTORE CONTROL FLAG SEE IF LIVE KBD KEY YES, DO NOT TRANSFER KBD TO I/0 O BUFFER TRANSFER KBD TO I/O BUFFER JSM AEOLN,I GET ADDR OF LAST CHARACTER STA OLCP SET PTRS STA IOCP LDB CERR GET COMPILE ERROR FLAG SZB RECEX SKIP IF NOT SET LDA JSM STA LDB STB LDA LDB ADB JSM STA LDB ADB CPB JMP LDB JSM ADA SAP LDA LDB JSM LDB TCB ADB SBM RET LDA STA JMP SBP LDA JMP AKBFM KBD BUFF S/A AFBAD,I FIND BYTE OFFSET OF ERROR POSITION CRSP SET CURSOR OFFSET PO CLEAR COMPILE ERROR FLAG CERR AEBFM GET EDIT BUFF S/A CRSP ERROR BYTE OFFSET M 1 MAKE RELATIVE TO BUFF S/A AADBA, FIND ABSOLUTE ADDR OF ERROR IOCP SET PTR TO ERROR POSITION AEB FL SET IF CURSOR PAST LAST POSSIBLE CHAR Ml IOCP RECI 1 YES, SET TO LAST POSSIBLE CHAR OLCP SEE IF CURSOR ≥ OLCP AFBAD,I Ml RELCR OKIFNOT IOCP SET OLCP = 1 CHAR PAST IOCP Pl DLCH 4 SET OLCP CRSP SEE IF ERROR OFFSET > DLEN DLEN RECL 3 DLEN CRSP AFBP,I +I,S B REC 10 B = DLEN ERROR OFFSET SET CURSOR TO LAST DISPLAY POSITION FIND DISPLAY BEGIN PTR AND RETURN P+ 1 ADDR OF LAST POSSIBLE CHAR SET OLCP, IOCP 224 Page 175 03215000 03216000 03217000 03218000 03219000 03220000 03221000 03222000 03223000 03224000 03225000 03226000 03227000 03228000 03229000 03230000 03231000 03232000 03233000 03234000 03235000 03236000 03237000 03238000 03239000 03240000 03241000 03242000 03243000 03244000 03245000 03246000 03247000 03248000 03249000 03250000 03251000 03252000 03253000 03254000 03255000 03256000 03257000 03258000 03259000 03260000 03261000 03262000 03263000 03264000 03265000 03266000 03267000 03268000 03269000 03270000 13267 13270 13271 13272 13273 13274 13275 13276 13277 13300 13301 13302 13303 13304 13305 13306 13307 13310 13311 13312 13313 13314 13315 13316 13317 13320 13321 13322 13323 13324 13325 13326 13327 13330 13331 13332 13333 13334 13335 13336 225 Page 176 03271000 03272000 03273000 03274000 03275000 03276000 03277000 03278000 03279000 03280000 03281000 03282000 03283000 03284000 03285000 03286000 03287000 03288000 03289000 225 1,568,094 I/O SUPERVISOR CLEAR KEY MODE = 0, 1, 2 SETS MODE = 0: CLEARS EDIT BUFFER, RESETS EDIT PTRS IF FETCH BIT OF CFLAG (BIT 1) IS SET THE SPECIAL KEY NUMBER IS DISPLAYED 13345 140452 CLEAR 13346 040715 13347 001232 13350 170500 13351 073006 03290000 13352 164474 03291000 03292000 03293000 03294000 03295000 CLEA 03296000 IF EN 03297000 AND 03298000 03299000 03300000 13353 140452 CLEEN 03301000 13354 040715 03302000 13355 001257 03303000 13356 010145 03304000 13357 170201 CLMM 03305000 13360 000226 03306000 13361 130313 03307000 13362 064717 03308000 03309000 03310000 03311000 DELI 03312000 03313000 ENTI 03314000 03315000 03316000 13363 001214 DLCH 03317000 13364 072002 03318000 13365 170201 03319000 03320000 13366 001215 03321000 13367 011213 03322000 13370 066420 03323000 13371 004254 03 24000 13372 140401 03325000 13373 011213 03326000 13374 066420 JSM AEOLB,I PUT EOL IN DISPLAY JSM CLMOD SET MODE= O LDA CFLAG GET CONTROL FLAG SAR I POSITION SPECIAL KEY FLAG BIT I SLA CLMMD CLEAR MODE IF SPECIAL NOT BE DEFINED JMP AKEYN,I DISPLAY KEY #, PUT EOL IN I/O BUFFER, RET 2-NO DISP R KEY IN ENTER (STATE= 4), OR LIVE KBD (STATE= 2) lTER A QUESTION MARK IS PUT IN THE I/O BUFFER THE MODE IS SET TO 4 I JSM JSM LDA CPA D RET LDA STA JMP AEOLB,I CLMOD CSTAT P 2 1 QMRKB AIBUF,I STELM PUT EOL IN EDIT BUFFER SET MODE = O RETURN IF LIVE KBD STATE = 2 SO MUST BE LIVE KBD GET "?" AND BLANK AND PLACE IN I/O BUFFER SET MODE = 4, RETURN ETE CHARACTER EXECUTION RY: INFO IN I/O BUFF LDA RZA RET LDA CPA JMP LDB JSM CPA JMP CRSP + 2 IOCP OLCP DLCH 2 Pl AADBA,I OLCP DLCH 2 GET CURSOR POINTR SET? NO GET I/O BUFF CURRENT POINTR SEE IF AT LAST CHARACTER YES GET IOCP + 1 ADDR CURSOR ON LAST ENTERED CHAR? YES 22 1,6,9 I/O SUPERVISOR 13375 005353 13376 176301 13377 001215 13400 030017 13401 030016 13402 074560 13403 074560 13404 074560 DLCH 1 13405 074550 13406 014016 13407 066411 13410 066404 13411 000117 13412 074740 13413 001213 13414 004257 13415 140401 DLCH 4 13416 031213 DLCH 3 13417 170201 13420 13421 13422 13423 13424 13425 13426 13427 000117 DLCH 2 005215 034016 074540 000177 031214 000257 066416 LDB SBP LDA STA STA WBC WBC WBC PBD CPB JMP JMP LDA PBC LDA LDB JSM STA RET LDA LDB STB PBC LDA STA LDA JMP AEBFL GET END OF BUFFER ADDR + 1,S PT TO FIRST BYTE IOCP GET IOCP AGAIN D SET DESTIN POINTR C SET SOURCE POINTR A,I DUMMY WITHDRAW; ADJUST POINTR A,I POINT TO "DELETE CHAR" + 1 A,I GET FIRST CHAR AND INCRM A,I INCRM AND STORE CHAR C LAST CHAR TAKEN? + 2 YES DLCHI NO: TRANSFER NEXT CHAR LEFT B 40 SET LAST CHAR= BLANK A,D OLCP GET OLD CURRENT POINTER Ml AADBA,IUPDATE OLD CURRENT POINTER OLCP UPDATE OLD CURRENT POINTR B 40 IOCP C A,I PO CRSP Ml DLCH 3 GET BLANK GET I/O BUFF CURRENT POINTR SET C-REG INCRM AND DELETE CURSOR CHAR CLEAR CURSOR POINTR SET FORWARD PASS FLAG CLEAR DLCP POINTR ATRBF TRANSFER BUFFERS CLEARS COMPILE ERROR FLAG IF MODE = 4 LEAVES BUFFERS ALONE SETS MODE = 4, RETURNS IF LIVE KBD ALSO LEAVES BUFFERS ALONE IF LAST KEY WAS RECALL TRANSFER KBD BUFFER TO RBUFF (RESERVE BUFFER) AND THEN TRANSFERS I/O BUFFER TO KBD BUFFER 13430 13431 13432 13433 13434 13435 13436 13437 13440 13441 13442 13443 13444 000177 TRBUF 031316 001256 010143 170201 040717 001257 010145 170201 TREC 001232 170705 073475 042462 LDA STA LDA CPA RET JSM LDA CPA RET LDA RAR RLA JSM PO CERR MODE P 4 1 STELM CSTAT P 2 I CFLAG 6 TREC KBREB CLEAR COMPILE ERROR FLAG LEAVE BUFFERS ALONE IF MODE = 4 SET MODE = 4 DON'T TRANSFER TO LIVE KBD IF STATE = 2 DON'T TRANSFER IF LAST KEY = RECALL RETURN IF BIT IS SET TRANSFER KBD BUFF TO RESERVE BUFF Page 177 03327000 03328000 03329000 03330000 03331000 03332000 03333000 03334000 03335000 03336000 03337000 03338000 03339000 03340000 03341000 03342000 03343000 03344000 03345000 03346000 03347000 03348000 03349000 03350000 03351000 03352000 03353000 03554000 03355000 03356000 03357000 03358000 03359000 03360000 03361000 03362000 03363000 03364000 03365000 03366000 03367000 03368000 03369000 03370000 03371000 03372000 03373000 03374000 03375000 03376000 03377000 03378000 03379000 03380000 03381000 03382000 226 1,568,094 99) 1,568,094 I/O SUPERVISOR 13445 000313 TRB 2 13446 004310 13447 030016 TRBX 13450 034017 13451 000112 13452 031230 13453 070560 TRB 3 13454 070550 13455 055230 13456 066453 13457 170201 LDA AIBUF I/OBUFFS/A LDB AKBFM KBD BUFF S/A STA C SET SOURCE ADDR STB D SET DESTINATION ADDR LDA P 41 BUFF LENGTH STA TMP 5 SET COUNTR PWD A,I PLACE WORD AND INCRM DSZ TMP 5 DONE? JMP TRB 3 NO RET 1 KBREB TRANSFER KDB BUFFER (KBUFF=LIVE KBD BUFFER) TO RESERVE BUFFER 13460 000177 KBTRB 13461 031316 13462 13463 13464 000306 004323 066447 LDA PO STA CERR CLR ERROR CURSOR FLAG USED BY LIVE KBD KBREB LDA AKBUF KBD BUFFS/A LDB ARBFM RESERVE BUFF S/A JMP TRBX TRANSFERAND RETURN CLEBF-ACLEB CLEAR EDIT BUFFER TO BLANKS, RESET EDIT PTRS IOCP OLCP, DBP CRSP IF MODE = 4 AND IN LIVE KBD, KBD BUFFER IS TRANSFERRED TO RESERVE BUFFER TEST FOR LIVE KBD DONE BY COMPARING ERROR BYPASS LINK (ERRBP) TO LIVE KBD ERROR ROUTINE MIGHT BE BETTER TO CHECK FOR STATE = 2 CLBF 1 ENTRY A= START ADDR-1 B= LAST ADDR MEMORY BETWEEN A-1 AND B INCLUSIVELY IS CLEARED TO BLANKS as 13465 001256 CLEBF 13466 010143 13467 066471 13470 066474 13471 001260 13472 012520 13473 042460 13474 13475 13476 13477 13500 140475 CLBF 3 005353 030016 CLBF 1 000262 CLBF 2 070540 LDA CPA JMP JMP LDA CPA JSM JSM LDB STA LDA PWC MODE P 4 + 2 CLBF 3 ERRBP ALKER KBTRB IF MODE = 4 AND THIS IS A LIVE KBD KEY THEN TRANSFER LIVE KBD BUFFER TO RESERVE BUFFER BEFORE THE LIVE KBD BUFFER IS CLEARED LIVE KBD KEY IF BYPASS LINK IS SET CONDITIONS MET SO TRANSFER AEDPT,IRESET EDIT POINTERS AEBFL LAST EDIT BUFF ADDR C SET C REG TOBLN TWO BLANKS A,I CLEAR 1 WORD Page 178 03383000 03384000 03385000 03386000 03387000 03388000 03389000 03390000 03391000 03392000 03393000 03394000 03395000 03396000 03397000 03398000 03399000 03400000 03401000 03402000 03403000 03404000 03405000 03406000 03407000 03408000 03409000 03410000 03411000 03412000 03413000 03414000 03415000 03416000 03417000 03418000 03419000 03420000 03421000 03422000 03423000 03424000 03425000 03426000 03427000 03428000 03429000 03430000 03431000 03432000 03433000 03434000 03435000 03436000 03437000 03438000 227 227 1,568,094 I/O SUPERVISOR 13501 13502 13503 13504 000016 172601 010001 170201 13505 066477 LDAC SAM +,C CPA B RET 1 GET WORD POINTER CLEAR BIT 15 DONE? YES JMP CLBF 2 NO:CONT CLEAR I/O BUFFER LEAVE EDIT PTRS ALONE 13506 000315 CLB 10 13507 004316 13510 066476 LDA AIBFM STARTADDR LDB AIBFL STOPADDR JMP CLBF 1 CLEAR BUFF AND RETURN AEOLB-EOLEB SAME AS ACLEB-CLEBF EXCEPT THAT IT SETS AN EOL AS THE FIRST CHAR OF THE EDIT BUFFER 13511 042465 EOLEB 13512 000214 EOLBB 13513 131350 13514 170201 13515 000304 13516 004305 13517 066476 JSM CLEBF LDA EOLB CLEAR I/O BUFF, SET PTRS, PUT EOL IN EDIT BUFF STA AEBUF,I RET I CLCMB CLEAR COMPILE BUFFER CLCMB LDA ACBUF COMPILEBUFFS/A-1 LDB ACLMT STOP ADDR JMP CLBF 1 Page 179 03439000 03440000 03441000 03442000 03443000 03444000 03445000 03446000 03447000 03448000 03449000 03450000 03451000 03452000 03453000 03454000 03455000 03456000 03457000 03458000 03459000 03460000 03461000 03462000 03463000 03464000 03465000 03466000 03467000 03468000 03469000 03470000 03471000 03472000 03473000 03474000 03475000 03476000 03477000 228 228 1,568,094 LIVE KEYBOARD ROUTINES L Kt,$ LIVE KEYBOARD 077605 077606 077607 077611 077613 EQUATES LKR BPLNK LWHER LXCMM RENFL EQU LKTMP+ O EQU LKTMP+ 1 I EQU LKTMP+ 2 EQU LKTMP+ 4 EQU LKTMP+ 6 LKTMP+ 7 To + 13 ADDRESSES 13520 013646 13521 100271 13522 077614 13523 077227 13524 077350 13525 040000 ALKER DEF ALKEM DEF ASVLK DEF ACST 9 DEF AEBST DEF CONSTANTS LKERR LKERM,I LKTMP+ 7 CSTMP+ 9 AEBUF XBIT OCT 040000 229 DEDICATED WORD TO SAVE R DEDICATED WORD TO SAVE ERROR BYPASS LINK DEDICATED WORD TO SAVE WHERE DEDICATED WORD TO SAVE XCOMM RENUMBER OF GTO AND GSB FLAG SAVE TEMPORARIES USED BY LIVE KBD KEY PROC LIVE KEYBOARD ERROR TRAPPING ROUTINE ADDRESS ADDRESS OF THE FIRST CHARACTER OF THE ERROR MESSAGE.

START ADDR TO SAVE TEMPS START ADDR OF CONTROL SUP TEMPS TO SAVE START ADDR OF R/W EDIT PTRS SET ONLY BIT 14 OF XCOMM LKE: LIVE KEYBOARD ENABLE.

13526 00177 13527 031623 13530 164365 ELKE LDA PO ELK 1 STA LKFLG JMP AINTX,I CLEAR LIVE KBD DISABLE FLAG RETURN TO INTERPRETER LKD: LIVE KEYBOARD DISABLE 13521 000254 ELKD LDA Pl 13532 066527 JMP ELKI DISABLE LIVE KBD 229 Page 180 03480000 03481000 03482000 03483000 03484000 03485000 03486000 03487000 03488000 03489000 03490000 03491000 03492000 03493000 03494000 03495000 03496000 03497000 03498000 03499000 03500000 03501000 03502000 03503000 03504000 03505000 03506000 03507000 03508000 03509000 03510000 03511000 03512000 03513000 03514000 03515000 03516000 03517000 03518000 03519 OOO 03520000 03521000 03522000 03523000 03524000 03525000 03526000 03527000 03528000 03529000 03530000 03531000 03532000 03533000 03534000 03535000 2301 Liv LIVE KEYBOARD ROUTINES 03536000 03537000 LKPR 03538000 03539000 ALLO' 03540000 BEEPS 03541000 03542000 SAVES 03543000 DOESl 03544000 03545000 USES I 03546000 -AND S 03547000 03548000 03549000 03550000 13533 001257 LKPRC 03551000 13534 010145 03552000 13535 066537 03553000 13536 064703 03554000 03555000 13537 000335 03556000 13540 006522 03557000 13541 071404 03558000 13542 002523 03559000 13543 024142 03560000 13544 071401 03561000 03562000 13545 000003 03563000 13546 031605 03564000 13547 001260 C: PROCESS A KEY, EXTENSION OF KBD INT SERV ROUTINE ROUTINE IN "IOSP".

WS LIVE KBD ONLY IF STATE = 2 OTHERWISE TEMPS T 1-T 5, TEMPI, TMP 5; ALSO USES TMP 8 BUT N'T SAVE IT ERRBP TO TRAP KEY ERRORS, SAVES R IN CASE OF AN ERROR SETS EDIT POINTERS TO EDIT KBD (KBUFF) BUFFER LDA CPA JMP JMP LDA LDB XFR LDA ADB XFR CSTAT P 2 + 2 BEEP ATMP ASVLK ACST 9 P 5 LDA STA LDA 03565000 13550 031606 03566000 13551 002520 03567000 13552 031260 03568000 03569000 13553 000312 03570000 13554 006524 03571000 13555 071403 03572000 03573000 13556 001206 03574000 13557 140420 LKNRL 03575000 03576000 13560 042562 03577000 13561 066704 03578000 03579000 13562 004155 LKDSP 03580000 13563 040633 03581000 13564 140432 03582000 13565 140432 03583000 13566 004156 03584000 13567 064633 03585000 03586000 03587000 03588000 03589000 EXECI 03590000 03591000 R LKR ERRBP STA BPLNK LDA ALKER STA ERRBP LDA LDB XFR AKBST AEBST LDA WKC JSM AKYPR,I JSM JMP LDB JSM JSM JSM LDB JMP LKDSP KREST Mll DELAY ADSPC,I ADSPC,I M 13 DELAY IGNORE KEY IF STATE #2 = 2 ? YES IGNORE KEY, BEEP, AND RETURN SAVE T 1-T 5 IN LKTMP+ 7, 13 SAVE TEMP 1, TMP 5 TMP 8 ALSO USED BUT NOT SAVED/ RESTORED SAVE RETURN PTR IN CASE OF AN ERROR SAVE ERROR BYPASS LINK FOR DAISY CHAIN SET ERROR LINK FOR LIVE KBD PROCESSING SWAP LIVE KBD POINTERS INTO EDIT POINTERS PUT KEYCODE IN A PROCESS THE KEY RETI 1 DISPLAY BUFFER WITH DELAYS RET 2 DON'T DISPLAY ANYTHING WAIT 11 MILLISECONDS COMPLEDTE PREVIOUS DISPLAY DISPLAY EDIT BUFFER WAIT ANOTHER 13 MILLISECONDS JTE IN LIVE KBD SET BIT 14 IN XCOMM Page 181 230 1.56 R 09 ni 231 1,568,094 231 ?age 182 LIVE KEYBOARD ROUTINES 03592000 13570 000214 LEXKYLDA EOLB SET FOR EXECUTION OF THE LINE 03593000 13571 130311 STA AKBFL,I 03594000 13572 002525 LDA XBIT SETXCOMM FOR EXECUTION 03595000 13573 040744 JSM SXCMM 03596000 13574 170202 RET 2 DON'T DISPLAY ANYTHING 03597000 io R LKBEX EXECUTE THE LIVE KEYBOARD BUFFER CONTENTS (ACCESSED BY A JSM FROM THE XCOMM SERVICE ROUTINE) STACKS (PUTS A FAKE BOTTOM OF STACK ON THE EXECUTION STACK) CHANGES THE STATE TO 3, SAVES R AND WHERE (NEEDED FOR RESUMING FROM XCOMM SERVICE ROUTINE: CLEARS BIT 14 FROM XCOMM, SAVES THIS XCOMM, CLEARS DISPLAY, EXECUTES LIVE KBD LINE AN ERROR MESSAGE WILL BE LEFT IN THE DISPLAY FOR 5 SE( SO IT CAN BE VIEWED 13575 140515 LKBEX 13576 000144 13577 031257 13600 000003 13601 031605 13602 001266 13603 031607 13604 004244 13605 040740 13606 031611 13607 000177 13610 031255 13611 042117 13612 042465 13613 043135 13614 140417 13615 140364 LKBE 2 13616 140411 13617 066626 13620 005266 13621 066615 13622 042641 LEXER 13623 006762 13624 040633 13625 066627 13626 042641 LEXRR 13627 001607 LXERR 13630 031266 13631 001605 JSM LDA STA LDA STA LDA STA LDB JSM STA LDA STA JSM JSM JSM JSM JSM JSM JMP LDB JMP JSM LDB JSM JMP JSM LDA STA LDA ASTKI,I P 3 CSTAT R LKR WHERE LWHER XMASK CLXCM LXCMM PO XCOMM EPKBD CLEBF DISP AEXCL,I AINTK,I AXCMM,I LEXRR WHERE LKBE 2 LKRES M 512 DELAY LXERR LKRES LWHER WHERE LKR STACK SET LIVE KBD EXEC STATE SAVE RETURN PTR IN CASE OF AN ERROR SAVE WHERE WORD ALSO CLEAR LIVE KBD BIT IN XCOMM CLEAR XCOMM BEFORE STARTING GO THROUGH PRINTALL CLEAR I/O BUFFER, RESET PTRS CLEAR DISPLAY COMPILE LINE INTERPRET THE LINE WANTS TO BE SERVICED SO GO SERVICE XCOMM.

P+ 1: STOP CONDITION, ABORT EXECUTION P+ 2: XCOMM HAS BEEN SERVICED, CONTINUE DISPLAY ERROR MESSAGE, RES XCOMM, CLR WKC WAIT 512 MS FOR DISPLAY DISPLAY ERROR MESSAGE, RES XCOMM, CLR WKC REPLACE WHERE WORD RESTORE JSM STACK PTR 03599000 03600000 03601000 03602000 03603000 03604000 03605000 03606000 03607000 Q 3608000 03609000 03610000 03611000 03612000 03613000 03614000 03615000 03616000 03617000 03618000 03619000 03620000 03621000 03622000 03623000 03624000 03625000 03626000 03627000 03628000 03629000 03630000 03631000 03632000 03633000 03634000 03635000 03636000 03637000 03638000 03639000 03640000 03641000 03642000 03643000 03644000 03645000 03646000 03647000 P 232 l 568 f 194 S 232 Page 183 03648000 03649000 03650000 03651000 03652000 03653000 03654000 03655000 03656000 03657000 03658000 03659000 03660000 03661000 03662000 03663000 03664000 03665000 03666000 03667000 03668000 03669000 03670000 LIVE KEYBOARD ROUTINES 13632 030003 13633 140516 13634 004155 13635 040633 13636 000145 13637 031257 13640 170201 13641 001611 LKRES 13642 031255 13643 000177 13644 031206 13645 164433 STA JSM LDB JSM LDA STA RET LDA STA LDA STA JMP R AREST,I Mll DELAY P 2 CSTAT LXCMM XCOMM PO WKC ALDSP,I RESTORE AFTER EXECUTION WAIT FOR DISPLAY SET STATE BACK TO 2 RESTORE XCOMM CLEAR KEY CODE FOR WAIT ROUTINE DISPLAY ERROR MESSAGE OR RESULT LKERR:

ERROR HANDLING ROUTINE FOR LIVE KEYBOARD EXECUTION.

03671000 13646 040717 LKERR 03672000 13647 040703 LKER 1 03673000 13650 000177 03674000 13651 030011 03675000 13652 002521 03676000 13653 030016 03677000 13654 004141 03678000 13655 074560 LKER 2 03679000 13656 030004 03680000 13657 054001 03681000 13660 066655 03682000 13661 000003 03683000 13662 020257 03684000 13663 144000 03685000 13664 100000 03686000 13665 100000 03687000 13666 170707 03688000 13667 030004 03689000 13670 170707 03690000 13671 030004 03691000 13672 000117 03692000 13673 005512 03693000 13674 024154 03694000 13675 030004 LKER 3 03695000 13676 054001 03696000 13677 066675 03697000 13700 000145 03698000 13701 030005 03699000 13702 001605 03700000 13703 030003 03701000 03702000 13704 001606 KREST 03703000 13705 031260 JSM JSM LDA STA LDA STA LDB WBC STA DSZ JMP LDA ADA ISZ LDA LDA RAR STA STELM BEEP PO PA ALKEM C P 6 A,I R 4 B LKER 2 R Ml A,I A,I A,I 8 R 4 RAR 8 STA R 4 LDA B 40 LDB ADB STA DSZ JMP LDA STA LDA STA DLEN M 8 R 4 B LKER 3 P 2 R 5 LKR R LDA BPLNK STA ERRBP SET EOL MODE SET PERIP ADDR TO THE PRINTER/DSP POINT C TO THE FIRST CHARACTER OF THE ERROR MESSAGE.

SEND "ERROR" TO THE DISPLAY GET JSM STACK PTR PT TO JSM AERRI ENTRY ON STACK PT TO MESSAGE XX ON STACK GET MESSAGE XX SEND THE FIRST CHARACTER OF THE ERROR NUMBER SEND THE SECOND CHARACTER OF THE ERRORNUMBER.

FILL OUT THE REST OF THE DISPLAY WITH BLANKS.

TRIGGER THE DISPLAY RESTORE STACK POINTER RESTORE ERROR BYPASS LINK 232 1.568094 )3) 233 1,568,094 233 RESTORE EDIT PTRS SO PT TO I/O BUFFER LIVE KEYBOARD ROUTINES 13706 13707 13710 13711 13712 13713 13714 13715 042716 002522 004335 071404 020142 006523 071401 170201 JSM SWIOP LDA ASVLK LDB ATMP XFR 5 ADA P 5 LDB ACST 9 XFR 2 RET 1 SWIOP' RESTORE EDIT PTRS SO PT TO I/O BUFFER RESTORE TEMPS T 1-T 5 RESTORE TMPI,TMP 5 SWAPS THE ROM PTRS FOR THE I/O BUFFER INTO THE READ-WRITE EDIT POINTER LOCATIONS AND SETS THE ERROR BYPASS LINK FOR NORMAL PROCESSING 13716 000321 SWIOP 13717 006524 13720 071403 13721 170201 13722 000572 13723 001172 13724 003673 13725 004233 13726 004663 13727 005013 13730 005523 13731 006243 13732 006423 13733 007103 13734 007473 13735 010113 13736 010543 13737 011043 13740 011623 13741 012153 13742 012563 13743 013033 13744 013453 KI K 2 K 7 K 10 Kll K 12 K 13 K 14 K 15 K 16 K 17 K 20 K 21 K 22 K 23 K 24 K 25 K 26 K 27 LDA AIBST LDB AEBST XFR 4 RET I TRANSFER EDIT PTRS FOR I/O BUFFER MTABLE

CONSTRUCTED BY CODE CLASS AND CONTROL NUMBER CLASS: BITS 0-2 CONTROL NUMBER (CN) BITS 3-7 ASCII CODE: BITS 8-15 OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT 572 1172 3673 4233 4663 5013 5523 6243 6423 7103 7473 10113 10543 11043 11623 12153 12563 13033 13453 STOP: 1,17,2 REWIND: 2,17,2 RESULT: 7,27,3 LINE INSERT: 10,23,3 LINE DELETE: 11,26,3 EXECUTE: 12,1,3 RECALL: 13,12,3 RUN: 14,24,3 STORE: 15,2,3 L.ARROW: 16,10,3 R.ARROW: 17,7,3 D.ARROW: 20,11,3 U.ARROW: 21,14,3 CLEAR: 22,4,3 PRINT ALL: 23,22,3 BACK: 24,15,3 FORWARD: 25,16,3 INSERT: 26,3,3 DELETE: 27,5,3 Page 184 03704000 03705000 03706000 03707000 03708000 03709000 03710000 03711000 03712000 03713000 03714000 03715000 03716000 03717000 03718000 03719000 03720000 03721000 03722000 03723000 03724000 03725000 03726000 03727000 03728000 03729000 03730000 03731000 03732000 03733000 03734000 03735000 03736000 03737000 03738000 03739000 03740000 03741000 03742000 03743000 03744000 03745000 03746000 03747000 03748000 03749000 03750000 03751000 03752000 03753000 03754000 03755000 03756000 03757000 03758000 03759000 233 1,568,094 233 1,568,094 LIVE KEYBOARD ROUTINES OCT OCT OCT OCT OCT OCT OCT OCT 14063 14653 15604 16204 16604 17204 17604 -1 STEP: 30,6,3 CONTINUE: 31,25,3 LIST: 30,20,4 FETCH: 34,20,4 ERASE: 35,20,4 RECORD: 36,20,4 LOAD: 37,20,4 END-OF-TABLE

CONSTANTS DEC 89 DEC -44 OCT 54501 OCT 31 OCT 65 DEC -512 OCT 25040 ASCII ASTERISK, BLANK DEFINITIONS EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU P 89 M 44 FLAG 872 B 177 PO PO B 42 LPIT LPIT+ 1 LPIT+ 2 LPIT+ 3 LPIT+ 4 CSTMP CST CST+I CST+ 2 CST+ 3 CST+ 5 CST+ 6 CST+ 7 ' CST+ 8 CST+ 9 CST+ 10 CST+ 11 CST+ 12 TMP 1,TMP 5 MUST BE IN THIS ORDER 13745 13746 13747 13750 13751 13752 13753 13754 014063 014653 015604 016204 016604 017204 017604 177777 K 30 K 31 K 33 K 34 K 35 K 36 K 37 13755 13756 13757 13760 13761 13762 13763 000131 177724 054501 000031 177000 025040 Page 185 03760000 03761000 03762000 03763000 03764000 03765000 03766000 03767000 03768000 03769000 03770000 03771000 03772000 03773000 03774000 03775000 03776000 03777000 03778000 03779000 03780000 03781000 03782000 03783000 03784000 03785000 03786000 03787000 03788000 03789000 03790000 03791000 03792000 03793000 03794000 03795000 03796000 03797000 03798000 03799000 03800000 03801000 03802000 03803000 03804000 03805000 03806000 03807000 03808000 03809000 03810000 03811000 03812000 03813000 03814000 03815000 P 89 M 44 LMTI B 31 B 65 M 512 BLAST B 131 BM 54 MAXLN COLLN EOL DPA PPA QUOTE LPSVA LPSVB LPSVC LPSVD LPSVE CST SIOCP WPRT M PLADD TMP 6 K TMP 2 LNO TM Pl TMP 5 TMP 3 CFLAG 013755 013756 000263 000077 000053 000177 000177 000116 077467 077470 077471 077472 077473 077216 077216 077217 077220 077221 077223 077224 077225 077226 077227 077230 077231 077232 234 234 1,568,094 Page 186 03816000 03817000 03818000 03819000 03820000 03821000 03822000 03823000 03824000 03825000 03826000 03827000 03828000 03829000 03830000 03831000 13777 03832000 13777 03833000 03834000 03835000 03836000 LIVE KEYBOARD ROUTINE 077233 077234 077235 077206 077207 077210 077211 077212 077213 077214 077215 TMP 7 TMP 4 SKEY WKC WMOD DTM Pl DTMP 2 SPKN OLCP CRSP IOCP EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU CST+ 13 CST+ 14 CST+ 15 IOTMP IOTMP+ 1 IOTMP+ 2 IOTMP+ 3 IOTMP+ 4 IOTMP+ 5 IOTMP+ 6 IOTMP+ 7 ORG 13777 B BSS 1 END END END OF PASS 2 NO ERRORS DETECTED 235 235 1.568,094 INTERNAL FULL PRECISION MATH ROUTINES FULL PRECISION NUMBER: INTERNAL FORMAT EEEE EEEE EEXX D 1 D 5 D 9 D 9 D 2 D 3 XXXS 10 BIT 2 'S COMPL EXP, 5 DON'T CARE BITS, MANTISSA SIGN ( 0 =+ 1 =-) EXP RANGE =-511 TO + 511 D 4 BCD DIGITS 1-4 D 6 D 7 D 8 BCD DIGITS 5-8 D 10 Dll D 12 BCD DIGITS 9-12 EQUATES 077752 077753 077754 077755 077756 077757 077760 077761 077762 077763 077764 077765 077766 077767 000345 077770 077771 077772 077773 077774 077775 077776 077777 000127 000021 000022 000023 RESE RESM I RESM 2 RESM 3 ZE ZMI ZM 2 ZM 3 Mll MT 2 MT 3 MT 4 MT 5 MT 6 ARIA ARIE ARIMI ARIM 2 AR 1 M 3 RNDT 2 RNDT 1 NRMEL STBIT AR 2 A AR 2 E AR 2 M 1 AR 2 M 2 AR 2 M 3 BCD 1 EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU RES RES+ I RES+ 2 RES+ 3 MRW 1 MRWI+I MRW 1 + 2 MRWI+ 3 MRWI+ 4 MRWI+ 5 MRW 1 + 6 MRW 1 + 7 MRW 1 + 8 MRWI+ 9 ADRI ARI ARIE+I ARIE+ 2 ARIE+ 3 MRW 2 MRW 2 + 1 MRW 2 + 2 MRW 2 + 3 ADR 2 AR 2 AR 2 E+ 1 AR 2 E+ 2 AR 2 E+ 3 B 10 K FULL PRECISION RESULT REGISTER FULL PRECISION MATH TEMPORARY ADDRESS OF ARI EXPONENT WORD OF ARI 1ST MANTISSA WORD OF ARI 2ND MANTISSA WORD OF ARI 3RD MANTISSA WORD OF ARI NORMALIZE COUNT FOR COMPARISON IN ROUND SHIFT COUNTER FOR ROUND NORMALIZATION FLAG FOR ROUND "STICKY BIT" FOR ROUND ADDRESS OF AR 2 EXPONENT WORD OF AR 2 1ST MANTISSA WORD OF AR 2 2ND MANTISSA WORD OF AR 2 3RD MANTISSA WORD OF AR 2 BCD 1000 Page 187 02141000 02142000 02143000 02144000 02145000 02146000 02147000 02148000 01249000 02150000 02151000 02152000 02153000 02154000 02155000 02156000 02157000 02158000 02160000 02151000 02162000 02163000 02164000 02165000 02166000 02167000 02168000 02169000 02170000 02171000 02172000 02173000 02174000 02175000 02176000 02177000 02178000 02179000 02180000 02181000 02182000 02183000 02184000 02185000 02186000 02187000 02188000 02189000 02190000 236.

236 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES 02192000 14000 02193000 02194000 14000 066070 02195000 14001 014301 02196000 14002 100030 02197000 14003 002400 02198000 14004 077756 E 77 L E 99 M ADIFF BCD,5 ZA ORG 14000 B JMP E 77 OCT 014301 ABS AR 2 E-AR 1 E OCT 02400 DEF ZE 02199000 14005 077774 WPTR 2 DEF ARIE+ 4 02201000 14006 02203000 02204000 02205000 02206000 02207000 02208000 02209000 02210000 02211000 02211000 02212000 02213000 02214000 02215000 02216000 03327000 02218000 02219000 02221000 02222000 02223000 02224000 02225000 02226000 02227000 02228000 02229000 02230000 02231000 02232000 CHKSM BSS 1 ERROR 77 LINK: MUST BE AT 14000 B. E 99 (USED BY ERROR 73) SQUARE ROOT USES THIS BCD 0500 ADDRESS OF FULL PREC MATH TEMPORARY-Z ADDRESS OF THE WORD BELOW ARI (D 9-D 12)-RNDT 2 CHECKSUM WORD FOR ADDRESSES:

14000-15777.

INTERNAL MATH GENERAL ENTRY CONDITIONS:

DESCRIPTIONS OF THE OPERANDS ARE ON THE TQP OF

THE EXECUTION STACK EACH BINARY IMATH ROUTINE USES "GET 2 " TO POINT OPND 2 TO THE OPERAND ON THE TOP OF THE STACK AND OPND 1 TO THE SECOND OPERAND ON THE TOP OF THE STACK EACH UNARY IMATH ROUTINE USES "GETI" TO POINT OPND 1 TO THE OPERAND ON THE TOP OF THE STACK.

A Pl IS RESET BY GETI AND GET 2 TO ELIMINATE THE OPERANDS FROM THE EXECUTION STACK.

DON'T USEARI, AR 2, ORZ(MRWI+ O THRU MRWI+ 3) TO STORE OPERANDS IN WHEN CALLING THESE IMATH ROUTINES.

INTERMAL MATH GENERAL EXIT CONDITIONS:

THE RESULT OF EACH IMATH ROUTINE IS PLACED IN THE BASEPAGE RESULT LOCATION "RES" AS A FULL PRECISION NUMBER THERE IS NO GUARANTY THAT THE EXPONENT IS IN THE USER'S RANGE OF -99 to + 99 USE "FLICK" TO VERIFY THIS CONDITION BEFORE MAKING THE RESULT AVAILABLE TO THE USER.

237 237 Page 189 INTERNAL FULL PRECISION MATH ROUTINES GETI: ROUTINE TO UNSTACK ONE OPERAND FOR UNARY OPERATORS GET 2: ROUTINE TO UNSTACK TWO OPERANDS FOR BINARY OPERATORS ENTRY CONDITIONS:

THE "WHAT/WHERE" INFORMATION FOR THE OPERANDS MUST BE ON THE TOP OF THE EXECUTION STACK, POINTED TO BE API.

EXII CONDITIONS:

OPND 1 WILL CONTAIN THE VALUE ADDRESS OF THE FULL PRECISION OPERAND 1.

OPND 2 WILL CONTAIN THE VALUE ADDRESS OF THE FULL PRECISION OPERAND 2.

TEMPORARIES: SAVEB 14007 043011 14010 035274 14011 140611 14012 000001 14013 035273 14014 170201 GET 2 JSM GETI STB OPND 2 GETI JSM AGTAD, I LDA B STB OPND 1 GRETI RET 1 UNSTACK THE SECOND OPERAND FROM THE TOP OF STACK.

SAVE THE ADDRESS OF THE SECOND OPERAND IN OPND 2.

DEMAND A NUMERIC ON TOP OF STAI OR GIVE ERROR 32.

RETURN THE ADDRESS ON BOTH A & B. ZAR 2: TEST THE MANTISSA OF AR 2 FOR ZERO/NON-ZERO ENTRY CONDITIONS:

AR 2 CONTAINS THE NUMBER TO BE CHECKED EXIT CONDITIONS:

RET IFAR 2 = O RET 2 IFAR 2#0 14015 000021 ZAR 2 14016 060022 14017 060023 14020 072474 14021 170202 LDA AR 2 M 1 IOR AR 2 M 2 IOR AR 2 M 3 SZA GRETI RFT 2 02234000 02235000 02236000 02237000 02238000 02239000 02240000 00241000 02242000 00243000 02244000 02245000 02246000 02247000 02248000 02249000 02240000 02251000 02252000 02253000 02254000 02255000 02256000 02257000 02258000 02259000 02261000 02262000 02263000 02264000 02265000 02266000 02267000 02268000 02269000 02270000 02271000 02272000 02273000 02274000 02275000 02276000 0227700002278000 02279000 238 1 _ 5689 1 Q 2 1,568,094 239 INTERNAL FULL PRECISION MATH ROUTINES FUNM: FULL PRECISION UNARY MINUS RES=- SPECIAL EXIT CONDITIONS:

OPND 2 POINTS TO Z WHICH CONTAINS-(ARGUMENT) TEMPORARIES: Z as 14022 043011 14023 043026 14024 003004 14025 066050 FUNM FUNM JSM GETI JSM CHS LDA ZA JMP STANY COPY THE ARGUMENT INTO Z CHANGE THE SIGN OF Z LOAD A WITH THE ADDRESS OF Z JUMP TO THE ROUTINE THAT WILL CHECK FOR ZERO AND STORE THE RESULT.

CHS: FULL PRECISION CHANGE SIGN OPND 2 =- ENTRY CONDITIONS:

A CONTAINS THE ADDRESS OF THE ARGUMENT EXIT CONDITIONS:

OPND 2 CONTAINS THE ADDRESS OF Z WHICH CONTAINS -() TEMPORARIES: Z 14025 007004 CHS 14027 035274 14030 071403 14031 001756 14032 073302 14033 073201 14034 031756 14035 170201 LDB ZA B CONTAINS THE ADDRESS OF THE RESULT LOC.

STB OPND 2 POINT OPND 2 TO THE RESULT XFR 4 COPY THE ARGUMENT INTO Z LDA ZE GET THE MANTISSA SIGN OF Z AND SLA + 2,S MAKE IT NEGATIVE LEAVE IT IF IT WAS POSITIVE SLA +I,C OTHERWISE MAKE THE MANTISSA SIGN POSITIVE STA ZE THEN STORE IT RET I AND RETURN 239 Page 190 02281000 02282000 02283000 02284000 022850 () 02286000 02287000 02288000 02289000 02290000 02291000 02292000 02293000 02294000 02295000 02296000 02297000 02298000 02300000 02301000 02302000 02303000 02304000 02305000 02306000 02307000 02308000 02309000 02310000 02311000 02312000 02313000 02314000 02315000 02316000 02317000 02318000 02319000 02320000 02321000 02322000 02323000 02324000 Page 191 INTERNAL FULL PRECISION MATH ROUTINES FSUB: FULL PRECISION SUBTRACTION RES = + (-) SPECIAL EXIT CONDITIONS:

OPND 2 CONTAINS THE ADDRESS OF Z WHICH CONTAINS -(SUBTRAHEND) TEMPORARIES: Z, MT 1 043007 FSUB 001274 043026 067043 JSM GET 2 LDA OPND 2 JSM CHS CHANGE THE SIGN OF THE SUBTRAHEND.

JMP FADD+ I AND ENTER THE FULL PRECISION ADDITION ROUTINE.

FADD: FULL PRECISION ADDITION RES + TEMPORARIES: MTI OPND 1 &OPND 2 CANNOTPOINTTOARI &AR 2.

r 043007 FADD 101273 170405 105274 174405 174040 020001 031762 02365000 14052 004345 172405 001273 071403 JSM GET 2 LDA OPND 1, I AAR 6 LDB OPND 2, I ABR 6 TCB ADA 8 STA MTI LDB ARIA SAM LDA XFR 001274 067063 001274 LDA JMP LDA 14061 071403 14062 001273 14063 004127 14064 017403 14065 000021 14066 072411 14067 001771 14070 072424 XFR LDA LDB XFR LDA SZA LDA SZA + 5 OPND 1 OPND 2 + 4 OPND 2 4 OPND 1 AR 2 A 4 AR 2 M I STARI ARIMI STSMA GET 2 OPERANDS OFF OF THE STACK CALCULATE THE EXPONENT OFFSET, AND SAVE IT FOR LATER USE SAVE THE OFFSET IN A MATH TEMPORARY.

IFF THE EXPONENT OFFSET IS NEGATIVE THEN OPND 2 IS LARGER THAN OPND 1 TRANSFER THE LARGER OPERAND TO ARI AND THE SMALLER OPERAND TO AR 2 NOTE:

LARGE AND SMALL REFER ONLY TO EXPONENT SIZE AND DO NOT IMPLY ANYTHING ABOUT MANTISSA SIZE OR SIGN.

IF THE SMALLER OPERAND IS ZERO STORE THE LARGER (AR 1) AS THE RESULT IF THE LARGER OPERAND IS ZERO THEN STORE THE SMALLER (AR 2) AS THE RESULT.

14036 14037 14040 14041 02326000 02327000 02328000 02329000 02330000 02331000 02332000 02333000 02334000 02335000 02336000 02337000 02338000 02339000 02340000 02341000 02342000 02343000 02345000 02346000 02347000 02348000 02349000 02350000 02351000 02352000 02353000 02354000 02355000 02356000 02357000 02358000 02359000 02360000 02361000 02362000 02363000 02364000 14042 14043 14044 14045 14046 14047 14050 14051 14053 14054 14055 14056 14057 14060 02366000 02367000 02368000 02369000 02370000 02371000 02372000 02373000 02374000 02375000 02376000 02377000 02378000 02379000 240 1.568094 2,40 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES 14071 14072 14073 14074 14075 14076 14077 14100 14101 14102 14103 14104 14105 001762 172002 170040 004000 020156 172403 000345 STARI 066050 076403 000177 043137 071700 001770 14106 020020 14107 073413 02396000 14110 071200 ADD 02397000 14111 072304 02398000 14112 001770 02399000 14113 030020 02400000 14114 066047 STSMA 02401000 02402000 14115 000254 02403000 14116 004254 02404000 14117 043137 02405000 14120 004073 02406000 14121 066041 14122 043015 14123 067077 14124 071040 14125 071200 14126 072303 14127 071040 14130 045770 14131 071500 14132 014133 14133 004177 14134 14135 14136 14137 14140 14141 14142 14143 14144 14145 174040 174605 066041 SOB LDA MT 1 SAP + 2 TCA LDBA ADA M 13 SAM + 3 LDA ARIA JMP STANY SZB + 3 LDAPO JSM FRND CDC LDA ARIE ADA AR 2 E RLA SUB FXA SDS LDA STA JMP + 4 ARIE AR 2 E STAR 2 LDA Pl LDB Pl JSM FRND LDB P 64 JMP UAR 2 E JSM ZAR 2 JMP STARI CMY FXA SDS + 3 CMY ISZ ARIE NRM CPB P 12 LDB PO TCB SBL JMP 6 UAR 2 E RECALL THE EXPONENT OFFSET MAKE THE OFFSET POSITIVE SET B UP FOR A RIGHT SHIFT OF AR 2.

IF THE OFFSET IS 12 OR LESS THEN CONTINUE AND PREPARE AR 2.

OTHERWISE STORE THE LARGER IF B = 0 DON'T ROUND SHIFT IN A ZERO USE THE FAST, NON-STICKY BIT ROUND.

ADD THE SIGNS OF THE TWO MANTISSAS TOGETHER IF THEY ARE DIFFERENT, SUBTRACT OTHERWISE, ADD THE MANTISSAS.

ADD THE TWO MANTISSAS IF NO CARRY IS GENERATED THEN THE ARI EXPONENT IS THE RESULT EXPONENT STORE AR 2 AS THE RESULT IF A DECIMAL CARRY OCCURS SHIFT A ONE INTO AR 2 AND SET B TO INCREMENT THE ARI EXPONENT.

CALL THE FAST, NON-SHITTY BIT ROUNDING ROUTINE.

JUMP TO THE UPDATE AR 2 EXPONENT ROUTINE IF AR 2 IS ZERO AFTER ALIGNING THEN STORE AR I AS THE RESULT.

OTHERWISE, COMPLEMENT AR 2 AND ADD THE MANTISSAS IF THERE WAS A CARRY, AR 2 IS THE RESULT IF THERE WAS NO CARRY, AR 2 IS THE 10 'S COMP OF THE RESULT AND THE SIGN OF ARI IS OPPOSITE OF THE RESULT SIGN NORMALIZE AND MAKE THE NO.

OF SHIFTS BUG SHEET #1700: CHECK FOR ZERO (B= 12) BEFORE TRYING TO UPDATE THE EXPONENT IN UAR 2 E.

NEGATIVE THEN ALIGN IT WITH THE EXPONENT OFARI AND JMP TO UPDATE THE AR 2 EXPONENT FRND: FAST, NON-STICKY BIT ROUNDING ROUTINE FOR FADD.

A = DIGIT TO SHIFT IN.

B = NO OF DIGITS TO SHIFT OUT B CANNOT BE ZERO.

075500 FRND 020151 172404 004254 071700 071000 170201 MRY ADA M 5 SAM + 4 LDB Pl CDC MWA RET I SHIFT AR 2 RIGHT PLACES.

ROUND UP? YES.

241 Page 192 241 0238000 02381000 02382000 02383000 02384000 02385000 02386000 02387000 02388000 02389000 02390000 02391000 02392000 02393000 02394000 02395000 02407000 02408000 02409000 02410000 02411000 02412000 02413000 02414000 02415000 02416000 02417000 02418000 02419000 02420000 02422000 02423000 02424000 02425000 02426000 02427000 02428000 02429000 02430000 02431000 02432000 02433000 02434000 242 1 568 094 749 INTERNAL FULL PRECISION MATH ROUTINES FMPY: FULL PRECISION MULTIPLICATION RES= _ TEMPORARIES: MT 1, MT 2, MT 3, MT 4, MT 5, "ROUND" OPND 1 CANNOT POINT TO AR 1 OR AR 2 MPMPY: MULTIPLE PRECISION MULTIPLICATION RES = (N DIGITS) ( 12 DIGITS) NOTE: N MUST BE AN EVEN MULTIPLE OF 4.

NOTE: N MUST BE AN EVEN MULTIPLE OF 4.

ENTRY CONDITIONS: (MPMPY) 1 OPND I CONTAINS THE ADDRESS OF THE MULTIPLIER 2 OPND 2 CONTAINS THE ADDRESS OF THE MULTIPLICAND 3 A = r(N-2) 4 B = (N/4) + 1 NO SPECIAL EXIT CONDITIONS TEMPORARIES: SAME AS FOR FMPY.

14146 043007 FMPY 14147 000207 14150 004143 14151 025273 14152 031763 14153 035762 14154 001274 14155 004345 14156 071403 14157 000177 14160 031777 14161 031774 MPMPY 02479000 14162 005273 02480000 14163 024254 14164 110001 14165 066032 14166 011771 14167 066032 14170 000127 14171 071603 14172 055762 14173 105762 14174 076012 14175 000023 14176 061777 JSM GET 2 GET 2 OPERANDS OFFOFTHE STACK LDA M 10 A: LOOP DIGIT COUNTER FOR FULL PRECISION MULTIPLIER LDB P 4 B: LENGTH OF A FULL PRECISION MULTIPLIER ( 4 WORDS) ADB STA STB LDA LDB OPNDI MT 2 MTI OPND 2 ARIA INITIALIZE THE LOOP DIGIT COUNTER INITIALIZE THE WORD POINTER TRANSFER THE MULTIPLICAND TO ARI XFR 4 LDA PO STA STBIT CLEAR THE "STICKY BIT".

STA RNDT 2 CLEAR THE NO OF DIGITS TO SHIFT OUT FOR ROUND LATER LDB OPND 1 NOTE: THE MULTIPLIER MUST BE CHECKED FOR ZERO UNLESS ADB Pl CPB M 2 JMP FALSE, IS INSERTED AFTER STB MT 2 IN MNXTW CPA JMP CPA JMP LDA CLR MNXTW DSZ LDB RZB LDA IOR B,I IF THE MULTIPLIER IS ZERO FALSE THEN ZERO IS THE RESULT ARI MI IFTHE MULTIPLICAND IS ZERO FALSE THEN ZERO IS THE RESULT.

AR 2 A CLEAR THE ACCUMULATOR (AR 2) 4 MT 1 DECREMENT THE WORD POINTER MTI,I GET THE NEXT 4 MULTIPLIER DIGITS MNXT ARE THEY ALL ZERO? AR 2 M 3 YES, UPDATE THE "STICKY BIT" WITH THE STBIT LAST FOUR DIGITS IN AR 2.

Page 193 02436000 02437000 02438000 02439000 02440000 02441000 02442000 02443000 02444000 02445000 02446000 02447000 02448000 02449000 02450000 02451000 02452000 02453000 02454000 02455000 02456000 02457000 02458000 02459000 02460000 02461000 02462000 02463000 02464000 02465000 02466000 02467000 02468000 02469000 02470000 02471000 02472000 02473000 02474000 02475000 02476000 02477000 02478000 02481000 02482000 02483000 02484000 02485000 02486000 02487000 02488000 02489000 02490000 02491000 242 1,568,094 242 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES 02492000 14177 031777 024933000 14200 000177 02494000 14201 004143 02495000 14202 075500 02496000 14203 025763 02497000 14204 035763 02498000 14205 067172 02499000 14206 000143 MNXT.

02500000 14207 031764 02501000 14210 071700 MNTXD 02502000 14211 075000 02503000 14212 035765 02504000 14213 004254 02505000 14214 075500 02506000 14215 061777 02507000 14216 031777 02508000 14217 005765 02509000 14220 174503 02510000 14221 045763 02511000 14222 067224 02512000 14223 067227 02513000 14224 055764 02514000 14225 067210 02515000 14226 067172 02516000 14227 071700 LSTWO 02517000 14230 075000 02518000 14231 004254 02519000 14232 075500 02520000 14233 031766 02521000 14234 105762 02522000 14235 174513 02523000 14236 071700 02524000 14237 075000 02525000 14240 004254 02526000 14241 035776 02527000 14242 072005 02528000 14243 001766 DI= O 02529000 14244 043611 02530000 14245 004177 02531000 14246 067255 02532000 14247 075500 Dl#0 02533000 14250 001766 02534000 14251 061777 02535000 14252 031777 02536000 14253 043610 02537000 14254 004073 02538000 14255 173201 MEXIT 02539000 14256 024020 STA LDA LDB MRY ADB STB JMP LDA STA CDC FMP STB LDB MRY IOR STA LDB SBR ISZ JMP JMP DSZ JMP JMP CDC FMP LDB MRY STA LDB SBR CDC FMP LDB STB RZA LDA JSM LDB JMP MRY LDA IOR STA JSM LDB SOC ADB STBIT PO P 4 THEN SHIFT OUT THE LAST FOUR DIGITS.

MT 2 AND INCREMENT THE LOOP DIGIT COUNTER BY 4 MT 2 MNXTW NOW CHECK THE NEXT 4 DIGITS.

P 4 SET THE WORD DIGIT COUNT TO 4.

MT 3 ACCUMULATE: AR 2 = AR 2 + B< 0-3 > ARI + DC MT 4 SAVE MULTIPLIER DIGITS IN TEMPORARY WHILE Pl AR 2 IS SHIFTED RIGHT ONE DIGIT.

STBIT UPDATE THE "STICKY BIT" WITH THE STBIT DIGIT SHIFTED OUT OF AR 2 INTO A.

MT 4 THEN RESTORE THE MULTIPLIER DIGITS 4 AND SHIFT THE NEXT ONE INTO B < 0-3 >.

MT 2 INCREMENT THE LOOP DIGIT COUNTER.

+ 2 AFTER (N-2) DIGITS HAVE BEEN PROCESSED, EXIT LSTWO THE LOOP TO FINISH THE LAST TWO DIGITS.

MT 3 DECREMENT THE DIGIT COUNT AND LOOP IF NOT ZERO MNXTD MNXTW PROCESS THE (N-1)TH DIGIT (D 2).

Pl SHIFT AR 2 RIGHT ONE DIGIT.

MT 5 SAVE SHIFTED OUT DIGIT WHILE PROCESSING MULTIPLIER Dl MT 1,1 GET THE NTH DIGIT (D 1) READY AND 12 MULTIPLY BY IT (A = DECIMAL CARRY, IF ANY) Pl SET UP B FOR RIGHT SHIFT OR ROUNDING NRMFL SET THE "NRM" FLAG FOR ROUNDING DI#0 IF NO OVERFLOW, CONTINUE, OTHERWISE GO TO DI#C MT 5 LOAD A WITH THE JUST SHIFTED OUI DIG Il DECID+ 1 ENTER THE ROUNDING ROUTINE MID.

WAY PO SET UP B FOR AR 2 EXP UPDATE MEXIT AND JUMP TO THE ROUTINE THAT DOES IT RIGHT SHIFT AR 2 TO RECOVER THE HIGE ORDER DIGIT IN A MT 5 RECALL THE PREVIOUSLY SHIFTED OU 1 DIGIT ANE STBIT ADD IT TO THE "STICKY BIT" AND THEN STBIT PUT IT BACK IN THE STICKY BIT DECID ENTER THE ROUNDING ROUTINE MIDWAY P 64 INCREMENT THE MULTIPLIER EXPONENT.

+ 1,C CLEAR THE OVERFLOW INDICATOR.

AR 2 E DON'T FORGET THE POSSIBLE EXPONEN 1 I INCREMENT IN DECIl 243 Page 194 243 244 Page 194 Continued 02540000 14257 125273 02541000 14260 173003 02542000 14261 125274 02543000 14262 066065 02544000 14263 066041 1,568,094 ADB OPNDI,I SOC + 3 ADB OPND 2,I JMP E 76 JMP UAR 2 E 244 B=THE EXP MODIFIER FOR THE EXPONENT UPDATE IN UAR 2 E.

IF OVERFLOW OCCURRED PUT THE CORRECT MANTISSA SIGN IN B< O > AND GO TO THE INTERMEDIATE RESULT OVERFLOW ERROR.

NOW UPDATE THE AR 2 EXPONENT WITH ARIE& B. 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES FDVD: FULL PRECISION DIVISION RES = / DVDNR: ALTERNATE ENTRY POINT TO TRUNCATE THE QUOTIENT INSTEAD (A= 0) OF ROUNDING IT USE BASEPAGE LINK ADIV 2.

SPECIAL EXIT CONDITIONS:

RES = +/-9 99999999999 E 511 IF DIVISOR= O & FLAG 14 = 1.

TEMPORARIES: D, Z, MT 1, MT 2, MT 3, MT 4, MT 5 OPND 1 CANNOT POINT TO ARI.

OPND 2 CANNOT POINT TO AR 2.

DIVIDEND EXPONENT MAY NOT BE-512 OR THE RESULT EXPONENT WILL BE WRONG IF THE (LDB M 64) AT READY-1 IS EXECUTED.

:

14264 043007 FDVD 14265 003441 14266 030017 DVDNR 14267 001273 14270 004127 14271 071403 14272 001274 14273 004345 14274 071403 14275 003004 14276 031763 14277 071604 14300 000177 14301 004020 JSM GET 2 LDA JSM R PUT THE INSTRUCTION, JSM, ROUN, IN D IF THE STA D QUOTIENT IS TO BE ROUNDED D= 0 FOR TRUNCATION LDA OPND 1 COPY THE DIVIDEND INTO AR 2 LDB AR 2 A XFR 4 LDA OPND 2 COPY THE DIVISOR INTO AR 1 LDB ARIA XFR 4 LDA ZA STA MT 2 CLR LDA LDB 02581000 14302 011771 02582000 14303 067405 14304 010021 14305 066032 14306 071040 14307 000257 14310 004127 14311 035764 14312 045763 DNXTW 14313 004143 14314 035765 14315 174603 DNXTD 14316 135763 14317 031766 14320 071700 FDVLP 14321 075041 14322 125763 PO AR 2 E CPA ARIM 1 JMP E 66 CPA JMP CMY LDA LDB STB ISZ LDB STB SBL INITIALIZE THE QUOTIENT WORD POINTER AND CLEAR THE QUOTIENT TEMPORARY (WHICl INCLUDES MT 1) CLEAR A FOR COMPARISONS TO FOLLOW LOAD THE EXPONENT WORD OF AR 2 FOR ITS SIG IF THE DIVISOR IS ZERO CHECK FLAG 14 FOR ERROR 66 DIVISION BY ZER AR 2 M 1 IF THE DIVIDEND IS ZERO FALSE THEN STORE ZERO AS THE QUOTIENT COMPLEMENT THE DIVIDEND M 1 INITIALIZE THE FDV COUNT TO-1 P 16 INITIALIZE THE TOTAL DIGIT COUNT TO I MT 3 MT 2 P 4 MT 4 STB MT 2,I STA MT 5 CDC FDV ADB MT 2,I BUMP THE QUOTIENT WORD POINTER SET THE WORD DIGIT COUNTER TO 4 CLEAR LOCATION FOR NEXT CALCULATE DIC SAVE THE QUOTIENT DIGITS STORE THE FDV COUNT UPDATE THE NEW QUOTIENT DIGIT 245 Page 195 245 02546000 02547000 02548000 02549000 02550000 02551000 02552000 02553000 02554000 02555000 02556000 02557000 02558000 02559000 02560000 02561000 02562000 02563000 02564000 02565000 02566000 02567000 02568000 02569000 02570000 02571000 02572000 02573000 02574000 02575000 02576000 02577000 02578000 02579000 02580000 02583000 02584000 02585000 02586000 02587000 02588000 02589000 02590000 02591000 02592000 02593000 02594000 02595000 02596000 02597000 246 Page 245 Continued 02598000 14323 024254 02599000 14324 135763 02600000 14325 045766 02601000 14326 067320 1,568,094 246 ADB Pl INCREMENT THE NEW QUOTIENT DIGIT STB MT 2,1 SAVE THE QUOTIENT DIGITS ISZ MT 5 INCREMENT THE FDV COUNT AND LOOP IF NON-ZERO JMP FDVLP 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES 02602000 14327 02603000 14330 02604000 14331 02605000 14332 02606000 14333 02607000 14334 02608000 14335 02609000 14336 02610000 14337 02611000 14340 02612000 14341 02613000 14342 02614000 14343 02615000 14344 02616000 14345 02617000 14346 02618000 14347 02619000 02620000 14350 02621000 14351 02622000 14352 02623000 02624000 14353 02625000 14354 02626000 14355 02627000 14356 02628000 14357 02629000 14360 02630000 14361 02631000 14362 02632000 14363 02633000 14364 02634000 14365 02635000 14366 02636000 14367 02637000 02638000 14370 02639000 14371 02640000 14372 02641000 14373 02642000 14374 02643000 14375 02644000 14376 02645000 14377 02646000 14400 02647000 14401 02648000 14402 02649000 14403 02650000 14404 02651000 02652000 02653000 043015 067351 071040 071200 105763 024257 135763 071040 000177 075541 020207 055764 172402 067353 055765 067315 067312 174603 055765 PFQUO 067350 135763 DONE 003004 004127 071403 071500 001762 076407 170513 060023 030023 001762 170603 004164 125273 READY 034020 170713 030024 050160 004177 070017 004020 001770 170040 020145 031770 066041 JSM JMP CMY FXA LDB ADB STB CMY LDA MLY ADA DSZ SAM JMP DSZ JMP JMP SBL DSZ JMP STB LDA LDB XFR NRM LDA SZB SAR IOR STA LDA SAL LDB ADB STB RAR STA AND LDB EXE LDB LDA TCA ADA STA JMP ZAR 2 PFQUO MT 2,I Ml MT 2,I PO M 10 MT 3 + 2 DONE MT 4 DNXTD DNXTW 4 MT 4 -2 MT 2,I ZA AR 2 A MTI READY 12 AR 2 M 3 AR 2 M 3 MTI 4 M 64 OPNDI, AR 2 E 12 SE M 16 PO D AR 2 E ARIE P 2 ARIE UAR 2 E JUMP OUT OF THE MAIN LOOP IF AN EXACT QUOTIENT HAS BEEN FOUND (DIVIDEND= 0) OTHERWISE RESTORE THE DIVIDEND TO ITS LAST POSITIVE VALUE.

DECREMENT AND SAVE THE LAST CALCULATED DIGIT NOTE: THIS MUST BE DONE IN B (NOT DSZ) BECAUSE OF POSSIBLE JUMP TO "DONE".

COMPLEMENT THE DIVIDEND AGAIN SHIFT THE DIVIDEND LEFT ONE DIGIT COMPUTE THE NEXT FDV COUNT DECREMENT THE TOTAL DIGIT COUNT THIS SHOULD ALWAYS JUMP + 2 DECREMENT THE WORD DIGIT COUNTER JUMP BACK TO DIGIT LOOP IF NON-ZERO JUMP BACK TO THE WORD LOOP ALIGN THE DIGITS OF THE LAST WORD STORE THE LAST DIGITS NOW THAT THEY ARE ALIGNED.

PREPARE TO ROUND THE QUOTIENT BUT FIRST CHECK FOR A ZERO IN THE FIRST QUOTIENT DIGIT IF ONE EXISTS, LEFT SHIFT THE ENTIRE QUOTIENT (A = D 13 DI 4 D 15 DI 6) AND USE D 13 AS D 12 A = D 13 D 14 D 15 D 16 A = D 14 DI 5 D 1160 B = EXPONENT OF -1 I I AR 2 E = EXPONENT OF DIVIDEND (WITH NORMALIZATION OFFSET IF NECESSARY) SE= D 13 OF QUOTIENT A< 4-15 > = UNUSED DIGITS (STICKY BIT) A< 0-2 > = UNBIASED, UN-NORM, B = DIGITS TO SHIFT = O ROUND OR NOT BASED ON ENTRY POINT.

COMPLEMENT THE EXPONENT OF THE DIVISOR JUMP TO THE UPDATE AR 2 E ROUTINE.

ERROR 66 DIVISION BY ZERO 247 Page 196 247 248 Page 196 Continued 02654000 14405 140564 E 66 02655000 14406 042073 02656000 14407 033066 1,568,094 248 JSM ASTMA,I STORE +/-9 99999999999 E 511 AS THE RESULT JSM ERROR ASC 1,66 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES 249 FSQR: FULL PRECISION SQUARE ROOT RES=SQR SPECIAL EXIT CONDITIONS:

RES = SQR(ABS(RADICAND)) IF RADICAND< O & FLAG 14 = 1 TEMPORARIES: MTI, MT 2, MT 3, MT 4, MT 5, MT 6, "ROUND" FSQR JSM GET FSQR JSM GE Ti __ _ 14423 075000 14424 004254 14425 075500 14426 031777 14427 000177 14430 005770 14431 174610 14432 176405 14433 000177 14434 004254 14435 075500 14436 001777 14437 170602 FSQRI 14440 004177 14441 043564 JSM R 14442 000345 14443 020254 14444 031763 14445 031764 14446 071603 14447 001770 14450 031765 14451 170400 14452 050240 LDA LDB XFR LDA CLR LDA RZA JMP LDB CDC OPNDI ARIA 4 AR 2 A 4 ARIMI + 2 FALSE P 5 BIT l IE QRI BIT OUN R 1 A r T 2 T 3 Rl E T 4 AP FMP LDB Pl MRY STA ST LDA PO LDB AF SBL 9 SBM FS LDA PO LDB Pl MRY LDA ST SAL 3 LDB PO JSM R LDA AI ADA Pl STA M STA M' CLR 4 LDA Al STA M AAR 1 AND ZA COPY THE RADICAND INTO ARI CLEAR AR 2 IF THE RADICAND IS ZERO THEN STORE ZERO AS THE RESULT AR 2 = 5 AR 1 THIS IS NECESSARY SINCE DC COULD BE SET.

SHIFT AR 2 RIGHT ONCE TO PICK UP THE HIGH ORDER DIGIT FROM THE FMP DIVIDE BY 2 IS THE SAME AS (SAVE THE SHIFTED OUT DIGIT IN THE "STICKY BIT") MULTIPLY BY 5 AND DIVIDE BY 10.

IF THE EXPONENT IS EVEN THEN RIGHT SHIFT AR 2 ONE MORE DIGIT.

THEN SHIFT AR 2 RIGHT ONCE AND PUT THE NEW SHIFTED OUT DIGIT IN SE FOR ROUNDING A< 3-15 > = STICKY BIT, A< 0-2 > IS THE SPECIFICATION

ROUND AR 2 BASED ON SE AND THE "STICKY BIT" INITIALIZE THE RESULT WORD POINTERS I & 2 TO THE SECOND WORD OF THE RESULT WORD POINTER I RESULT WORD POINTER 2 CLEAR 4 WORDS STARTING AT ARI M 1 INCLUDING RNDT 2 DIVIDE THE ARI EXPONENT BY 2 & CLEAR THE SIGN (SAVE THE SIGN FOR ERROR 67 TEST LATER) & STORE IN THE ARI EXPONENT WORD.

14410 14411 14412 14413 14414 14415 14416 14417 14420 14421 14422 043011 001273 004345 071403 000127 071603 001771 072002 066032 004142 071700 249 Page 197 02658000 02659000 02660000 02661000 02662000 02663000 02664000 02665000 02666000 02667000 02668000 02669000 02670000 02671000 02672000 02673000 02674000 02675000 02676000 02677000 02678000 02679000 02680000 02681000 02682000 02683000 02684000 02685000 02686000 02687000 02688000 02689000 0269000 02691000 02692000 02693000 02694000 02695000 02696000 02697000 02698000 02699000 02700000 02701000 02702000 02703000 02704000 02705000 02706000 250 1.568 094 Page 197 Continued 02707000 14453 031770 02708000 14454 003003 02709000 14455 031766 02710000 14456 000175 02711000 14457 031767 02712000 14460 001767 02713000 14461 073002 STA LDA STA LDA STA BLOOP LDA SLA 250 ARIE BCD 5 INITIALIZE THE "FIVE" WORD TO BCD 0500 MT 5 BCD 1 INITIALIZE THE "N" WORD TO BCD 1000 MT 6 MT 6 IF THE LOW ORDER BCD DIGIT OF THE "N" + 2 WORD IS 1 251 1,568,094 251 age 198 INTERNAL FULL PRECISION MATH ROUTINES 12714000 14462 045764 ISZ MT 3 THENINCREMENTTHERESULTWORD POINTER # 2 )2715000 14463 170703 RAR 4 ROTATE THE "N" WORD RIGHT I BCD DIGIT.

)2716000 14464 031767 STA MT 6 AND STORE.

* )2717000 14465 001766 LDA MT 5 MASKOUTTHELAST 32718000 14466 170140 CMA FIVE FROM THE WORKING 12719000 14467 151763 AND MT 2,I REGISTER )2720000 14470 131763 STA MT 2,I AND STORE IT.

12721000 14471 001766 LDA MT 5 IF THE LOW ORDER BCD DIGIT OF THE D 2722000 14472 073002 SLA + 2 "FIVE" WORD IS A FIVE D 2723000 14473 045763 ISZ MT 2 THEN INCREMENT THE RESULT WORD POINTER # I 92724000 14474 170703 RAR 4 ROTATE THE"FIVE" WORD RIGHT I BCD DIGIT.

12725000 14475 031766 STA MT 5 ANDSTORE.

)2726000 14476 121763 ADA MT 2,I PLACE THE NEXT FIVE IN THE WORKING REGISTER )2727000 14477 131763 STA MT 2,I POINTED TO BY WORD POINTER# I 2728000 14500 105764 LDB MT 3,I LOAD THE WORD POINTED TO BY RESULT POINTER # 2 12729000 14501 071040 CMY COMPLEMENT AR 2 02730000 14502 000135 LDA P 10 INITIALIZE THE INCREMENT COUNTER TO 02731000 14503 031762 STA MT 1 Q 2732000 14504 135764 SLOOP STB MT 3,I UPDATE THE RESULT WORD POINTED TO BY#2 02733000 14505 071700 CDC 02734000 14506 071200 FXA AR 2 = AR 2 + ARI (RESULT REG) 02735000 14507 025767 ADB MT 6 INCREMENT THE PROPER DIGIT OF B Q 2736000 14510 055762 DSZ MT 1 DECREMENT THE COUNTER AND EXIT LOOP IF ZERO 02737000 14511 072773 SDC SLOOP LOOP IFNO OVERFLOW, OTHERWISE EXIT LOOP 02738000 14512 071040 CMY COMPLEMENT AR 2 (NOW IN ORIGINAL FORM).

12739000 14513 043015 JSM ZAR 2 EXIT THE BIG LOOP (BLOOP) IF A PERFECT SQUARE ROOT 12740000 14514 067524 JMP PFSQR HAS BEEN FOUND, OTHERWISE CONTINUE IN LOOP.

12741000 14515 071200 FXA RESTORE AR 2 AND 02742000 14516 000177 LDA PO 12743000 14517 075541 MLY LEFT SHIFT IT ONE BCD DIGIT 02744000 14520 001764 LDA MT 3 IF 12 DIGITS HAVE BEEN CALCULATED.

02745000 14521 013005 CPA WPTR 2 THEN EXIT 02746000 14522 067545 JMP LSTLP FROM THE BIG LOOP, 02747000 14523 067460 JMP BLOOP OTHERWISE, CONTINUE TO LOOP 02748000 14524 005763 PFSQR LDB MT 2 A PERFECT SQUARE ROOT HAS BEEN FOUND 02749000 14525 027002 ADB ADIFF SO INCREMENT THE LEAST SIGNIFICANT 02750000 14526 001766 LDA MT 5 DIGIT, A FIVE, OF AR 2 BY FIVE 12751000 14527 130001 STA B,I AND THEN LEFT 02752000 14530 071700 CDC 02753000 14531 071200 FXA SHIFT AR 2 ONCE.

02754000 14532 000177 LDA PO SHIFTIN A ZERO.

02755000 14533 075541 MLY 12756000 14534 072406 SZA FSQR 2 IF A DIGIT WAS SHIFTED OUT OF AR 2 INTO A, 02757000 14535 004254 LDB Pl 12758000 14536 075500 MRY THEN SHIFT IT BACK IN 02759000 14537 004073 LDB P 64 &ND 02760000 14540 042041 JSM UAR 2 E INCREMENT THE EXPONENT USING UAR 2 E p c c c c c c c C ( C C C oo ( ( ( ( 0 ( 0 ( ( ( O ( Continued 14541 067554 14542 173201 FSQR 2 14543 042043 14544 067554 14545 000345 LSTLP 14546 004127 14547 071403 14550 101764 14551 170513 1,568,094 JMP SOC JSM JMP LDA LDB XFR LDA SAR 252 E 67 AND THEN CHECK FOR ERROR 67 BEFORE RETURNING +I,C OTHERWISE, STORE THE RESULT (AR 2) AND UAR 2 E+ 2 E 67 CHECK FOR ERROR 67 BEFORE RETURNING.

ARIA TRANSFER ARI to AR 2 SO A LEFT SHIFT CAN BE DONE AR 2 A 4 MT 3,I POSITION THE LAST DIGIT IN A< 0-3 > 252 Page 198 02761000 02762000 02763000 02764000 02765000 02766000 02767000 02768000 02769000 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES 14552 075541 MLY 14553 042047 JSM STAR 2 ERROR 67-SQUARE 14554 001765 E 67 LDA MT 4 14555 073003 SLA + 3 14556 042073 JSM ERROR 14557 033067 ASC 1 67 14560 170201 RET I SHIFT AR 2 LEFT ONCE.

STORE AR 2 AS THE RESULT.

ROOT OF A NEGATIVE NUMBER RECALL THE ORIGINAL EXPONENT IF THE MANTISSA WAS POSITIVE THEN RETURN ELSE, CHECK FLAG 14 FOR ERROR 67 USED BY -3 ONLY NOT USED BY E 67.

253 Page 199 253 02770000 02771000 02772000 02773000 02774000 02775000 02776000 02777000 02778000 02779000 254 1,568,094 254 Page 200 INTERNAL FULL PRECISION MATH ROUTINES 02781000 02782000 02783000 02784000 ROUND: GENERALIZED ROUNDING ROUTINE 02785000 02786000 ENTRY CONDITIONS: (ALSO SEE TABLE BELOW) 02787000 THE NUMBER TO BE ROUNDED MUST BE IN AR 2 02788000 B CONTAINS EITHER:

02789000 I) THE NUMBER OF THE DIGIT TO BE ROUNDED ( 0-12) OR 02790000 2) THE NUMBER OF DIGITS TO BE SHIFTED OUT ( 12-0) 02791000 A< O > = I IF B CONTAINS THE NUMBER OF THE DIGIT TO BE ROUNDED 02792000 0 IF B CONTAINS THE NUMBER OF DIGITS TO BE SHIFTED OUT 02793000 A = 1 IF AR 2 IS TO BE NORMALIZED BEFORE RETURNING 02794000 0 IF AR 2 IS NOT TO BE NORMALIZED BEFORE RETURNING 02795000 A< 2 > = I IF A 4-5 ROUND IS DESIRED (BIASED) 02796000 0 IF AN UNBIASED ROUND IS DESIRED 02797000 A< 3-15 > = O 02798000 02799000 EXIT CONDITIONS:

02800000 AR 2 CONTAINS THE ROUNDED RESULT 02801000 02802000 TEMPORARIES: "ROUND"-(STBIT,NRMFL,RNDTI,RNDT 2) 02803000 02804000 02805000 02806000 0 UNBIASED UN-NORM B=DIGITS TO SHIFT 02807000 02808000 02809000 02810000 UNBIASED UN-NORM B=DIGIT TO ROUND 02811000 02812000 02813000 02814000 2 UNBIASED NORM B=DIGITS TO SHIFT 02815000 02816000 02817000 02818000 3 UNBIASED NORM B=DIGIT TO ROUND 02819000 02820000 02821000 02822000 4 4 -5 UN-NORM B=DIGITS TO SHIFT 02823000 02824000 02825000 02826000 5 4-5 UN-NORM B=DIGIT TO ROUND 02827000 02828000 02829000 02830000 6 4-5 NORM B=DIGITS TO SHIFT 02831000 02832000 02833000 02834000 7 4-5 NORM B=DIGIT TO ROUND 02835000 02836000 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES 02838000 14561 170603 ROUND 02839000 14562 030024 02840000 14563 170503 02841000 14564 073003 ROUN 02842000 14565 174040 02843000 14566 024133 02844000 14567 035775 02845000 14570 174040 02846000 14571 035774 02847000 14572 170500 02848000 14573 031776 02849000 14574 170500 02850000 14575 031777 02851000 14576 076512 02852000 14577 004254 02853000 14600 170603 SHIFT 02854000 14601 075500 02855000 14602 055775 02856000 14603 067605 02857000 14604 067610 02858000 14605 021777 02859000 14606 031777 02860000 14607 067600 02861000 14610 000024 DECID 02862000 14611 020151 02863000 14612 172424 02864000 14613 072007 02865000 14614 001777 02866000 14615 072005 02867000 14616 000023 02868000 14617 073301 02869000 14620 030023 02870000 14621 067636 02871000 14622 071700 RNDUP 02872000 14623 071000 02873000 14624 072712 02874000 14625 000001 02875000 14626 075500 02876000 14627 173201 INCEX SAL 4 STA SE SAR 4 SLA + 3 TCB ADB P 12 STB RNDTI TCB STB RNDT 2 SAR 1 STA NRMFL SAR 1 STA STBIT STB DECID LDB Pl SAL 4 MRY DSZ RNDTI JMP + 2 JMP DECID ADA STBIT STA STBIT JMP SHIFT LDA SE ADA M 5 SAM NORM? R 7 A RNDUP LDA STBIT RZA RNDUP LDA AR 2 M 3 SLA +IS STA AR 2 M 3 JMP NORM? CDC MWA SDC NORM? LDA B MRY SOC + 1,C ENTRY POINT TO CLEAR BEFORE STARTING TO ROUND.

CLEAR THE 4 BIT SHIFT EXTEND REGISTER ENTRY POINT FOR FSQR TO ROUND ON .

COMPUTE THE NUMBER OF DIGITS TO BE SHIFTED OUT SAVE IT MAKE THE NUMBER OF DIGITS TO BE SHIFTED OUT NEGATIVE AND SAVE FOR COMPARISON WITH NRM RESULTS SAVE THE NRM/DON'T NRM FLAG FOR LATER SETUP THE "STICKY BIT" ZERO IMPLIES UNBIASED ROUND NON-ZERO IMPLIES 4-5 ROUND.

IF NO DIGITS TO SHIFT = 0, BASE THE ROUND ON SE SET UP B FOR 1 DIGIT RIGHT SHIFT ON AR 2 SHIFT AR 2 RIGHT 1 DIGIT AND BRING IN A ZERO WHEN THE PROPER NO OF DIGITS HAVE BEEN SHIFTED GET OUT OF THE LOOP AND ROUND ON SE AND THE "STICKY BIT".

UPDATE THE "STICKY BIT" IF THE LAST DIGIT SHIFTED OUT IS 0,1,2,3,4 THEN DON'T ROUND UP IF THE LAST DIGIT IS 6,7,8,9 THEN ALWAYS ROUND UP.

IF THE LAST DIGIT IS 5 AND THE "STICKY BIT" IS NON-ZERO THEN ROUND UP IF THE "STICKY BIT" IS ZERO THEN MAKE THE CURRENT D 12 OF AR 2 ODD (SINCE ODD DOESN'T PROPAGATE A CARRY).

AND SEE IF AR 2 IS TO BE NORMALIZED GET READY TO ADD I TO AR 2 ON THE D 12 LEVEL AND WATCH FOR AN OVERFLOW CONDITION.

IF NO CARRY THEN CHECK FOR NORMALIZATION.

B HAS BEEN I SINCE (SHIFT-I) MAKE THE AR 2 MANTISSA A FULL PRECISION ONE.

NOW GET READY TO CHECK FOR EXPONENT OVERFLOW 255 Page 201 255 1,568,094 Page 201 Continued 02877000 14630 000020 02878000 14631 020073 02879000 14632 030020 02880000 14633 173003 02881000 14634 004020 02882000 14635 066065 02883000 14636 001776 NORM?02884000 14637 073207 02885000 14640 031776 02886000 14641 071500 02887000 14642 014133 02888000 14643 170201 02889000 14644 025774 02890000 14645 076062 02891000 14646 170201 RTN LDA ADA STA SOC LDB JMP LDA SLA STA NRM CPB RET ADB RZB RET AR 2 E P 64 AR 2 E NORM? AR 2 E E 76 NRMFL RTN,C NRMFL P 12 I RNDT 2 INCEX ADD 1 TO THE EXPONENT AND IF OVERFLOW DOES NOT OCCUR THEN CHECK FOR NORMALIZATION.

GET THE SIGN OF THE AR 2 MANTISSA AND CHECK FLAG 14 FOR ERROR 76INTERIM, RES OVERFLOW RECALL THE NORMALIZATION FLAG AND OBEY IT.

IN THE PROCESS, CLEAR IT TO PREVENT INFINITE LOOPING IF A NEW HIGH ORDER DIGIT WAS CREATED.

IF AR 2 = 0 THEN DON'T INCREMENT THE EXPONENT BUT RATHER, RETURN CHECK TO SEE IF A NEW HIGH ORDER DIGIT WAS CREATED, IF SO, INCREMENT THE EXPONENT.

256 256 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES 257 as s as as as as as s as 14647 101263 TSUB 14650 050221 14651 004000 14652 001263 14653 020254 14654 100000 14655 021263 14656 100000 14657 050221 14660 010175 14661 067663 14662 067665 14663 014175 14664 067674 14665 14666 14667 14670 14671 001321 TSUB$ 072404 105321 044001 165321 TSUB: COMPARISON ROUTINE FOR THE RELATIONAL OPEATORS.

SPECIAL EXIT CONDITIONS:

= O IF (OPND 1) = (OPND 2) = 1 IF (OPND 1) > (OPND 2) = 3 IF (OPND 1) < (OPND 2) TEMPORARIES: MT 1, MT 2 (TEMPORARIES FOR STCHK ARE NOT INCLUDED HERE) LDA AND LDB LDA ADA LDA ADA LDA AND CPA JMP JMP CPB JMP LDA SZA LDB ISZ JMP AP 1,I B 70 K A A Pl Pl A,I A Pl A,I B 70 K B 10 K + 2 TSUBS Bl OK TSUB# STCHK E 16 STCHK,I B STCHK,I B = CLASS OF OPERAND 2 READ DOWN THE STACK TO THE WHAT OPERAND 1.

A = CLASS OF OPERAND 1 IF OPERAND 1 IS NON-NUMERIC CALL THE STRINGS ROM.

OTHERWISE CHECK OPERAND 2.

IF OPERAND 2 IS NON-NUMERIC CALL THE STRINGS ROM.

OTHERWISE BOTH ARE NUMERIC SO GO TO TSUB#.

IF STCHK = OR STCHK,I =-1 THE STRINGS ROM IS NOT PRESENT SO GIVE ERROR 16.

OTHERWISE BRANCH TO THE STRINGS ROM FOR THE COMPARISON.

ERROR 16: STRINGS ROM MISSING FOR STRING RELATIONAL COMPARISON OR ILLEGAL ARGUMENT(S) FOR RELATIONAL COMPARISON.

14672 140404 E 16 14673 030466 14674 043007 TSUB# 14675 000016 14676 031763 14677 101273 14700 121274 14701 073007 JSM ASC JSM LDA STA LDA ADA SLA AERR 1,I NON-RECOVERABLE ERROR.

1,16 GET 2 FETCH THE TWO NUMERIC OPERANDS.

C MT 2 SAVE C IN MT 2.

OPND 1,I IF THE MANTISSA SIGNS ARE THE SAME MORE OPND 2,I TESTING IS NEEDED TO DETERMINE THE RELATION.

TSURI 257 Page 202 02893000 02894000 02895000 02896000 02897000 02898000 02899000 02900000 02901000 02902000 02903000 02904000 02905000 0290600 02907000 02908000 0290900 02910000 02911000 02912000 02913000 02914000 02915000 02916000 02917000 02918000 029 i 9000 02920000 02921000 02922000 02923000 02934000 02925000 02926000 02927000 02928000 02929000 02930000 02931000 02932000 02933000 02934000 02936000 02937000 02938000 02939000 02940000 02941000 258 1,568,094 Page 202 Continued 02942000 14702 101273 02943000 14703 073403 02944000 14704 004254 B= 1 02945000 14705 067762 02946000 14706 004144 B= 3 258 LDA OPNDI,I THE SIGNS ARE DIFFERENT SO THE NEGATIVE OPERAND RLA B= 3 LDB Pl JMP RESTC LDB P 3 IS SMALLER.

(OPND 1) > (OPND 2) (OPND 1) < (OPND 2) 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES 14707 067762 14710 001273 TSUBI 14711 030016 14712 020254 14713 100000 14714 005274 14715 034017 14716 024254 14717 104001 14720 072003 14721 076065 14722 067761 14723 076461 TSUB 2 14724 101273 14725 170405 14726 105274 14727 174405 14730 174040 14731 020001 14732 172007 14733 004144 B = 3 ? 14734 101273 TSUB 3 14735 073025 14736 024150 14737 174040 14740 067762 14741 072403 TSUB 4 14742 004254 B = 1 ? 14743 067734 14744 074560 TSUB 5 14745 074570 14746 000141 14747 031762 14750 074561 TSUB 6 14751 074570 14752 174040 14753 020001 14754 072403 14755 172056 14756 172464 14757 055762 TSUB 7 14760 067750 14761 004177 B= O 14762 001763 RESTC 14763 030016 14764 170201 JMP RESTC LDA OPND 1 STA C ADA Pl LDA A,I LDB OPND 2 STB D ADB Pl LDB B,I RZA TSUB 2 RZR B= 3 JMP B= O SZB B= 1 LDA OPND 1,I AAR 6 LDB OPND 2,I ABR 6 TCB ADA B SAP TSUB 4 LDB P 3 LDA OPN Dl,I SLA RESTC ADB M 4 TCB JMP RESTC SZA TSUB 5 LDB Pl JMP TSUB 3 WBC A,I WBD A,I LDA P 6 STA MT 1 WBC B,I WBD A,I TCB ADA B SZA TSUB 7 SAP B = 3 ? SAM B= 1 ? DSZ MTI JMP TSUB 6 LDB PO LDA MT 2 STA C RET I 259 MANTISSA SIGNS ARE ALIKE, CHECK FOR ZEROS A = 1ST MANTISSA WORD OF (OPNDI) B = 1ST MANTISSA WORD OF (OPND 2) A = 0, B # O (OPND 1) < (OPND 2) A & B ARE ZERO (OPND 1) = (OPND 2)= O A # 0, B = 0 (OPND 1) > (OPND 2) A & B ARE NOT ZERO NOW WE MUST CHECK THE EXPONENTS.

(THE ARITHMETIC SHIFTS ARE NEEDED TO PREVENT OVERFLOW IN THE FOLLOWING ADDITION) A = (OPND I E) (OPND 2 E) ABS (OPND 1) < ABS (OPND 2) NOW CHECK THE MANTISSA SIGN OF EITHER ONE (THEY'RE THE SAME) IF THEY ARE NEGATIVE THEN THE RELATION IS REVERSED.

THE EXPONENTS ARE EQUAL, CHECK THE MANTISSAS.

ABS(OPND 1) > ABS(OPND 2) DUMMY WITHDRAWS TO POINT TO (DI D 2) BYTES.

THERE ARE SIX PAIRS OF DIGITS TO CHECK.

A = (OPND 2 DIGIT PAIR)-(OPNDI DIGIT PAIR) IF THEY ARE EQUAL, KEEP CHECKING.

ABS(OPNDI) < ABS(OPND 2) ABS(OPNDI) > ABS(OPND 2) HAVE ALL 6 DIGIT PAIRS BEEN TESTED? NO, KEEP CHECKING.

YES, THE NUMBERS ARE EQUAL.

RESTORE C FROM MT 2 259 Page 203 02947000 02948000 02949000 02950000 02951000 02952000 02953000 02954000 02955000 02956000 02957000 02958000 02959000 02960000 02961000 02962000 02963000 02964000 02965000 02966000 02967000 02968000 02969000 02970000 02971000 02972000 02973000 02974000 02975000 02976000 02977000 02978000 02979000 02980000 02981000 02982000 02983000 02984000 02985000 02986000 02987000 02988000 02989000 02990000 02991000 02992000 260 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES FULL PRECISION LOGICAL OPERATORS: AND, OR, XOR, NOT SPECIAL EXIT CONDITIONS:

RES = 1 FOR TRUE RES = O FOR FALSE 14765 043007 XOR 14766 045273 14767 045274 14770 101273 14771 105274 14772 072410 14773 066031 14774 043007 AND 14775 045273 14776 105273 14777 076433 15000 045274 ANDI 15001 105274 15002 066036 AND 2 15003 043007 OR 15004 045273 15005 105273 15006 076031 15007 066000 15010 043011 NOT 15011 045273 15012 105273 15013 066031 JSM ISZ ISZ LDA LDB SZA JMP JSM ISZ LDB SZB ISZ LDB JMP JSM ISZ LDB RZB JMP JSM ISZ LDB JMP GET 2 OPND 1 OPND 2 OPND 1,I OPND 2,I AND 2 FEQ + 1 GET 2 OPND 1 OPND 1,I FALSE OPND 2 OPND 2,I FNEQ + 1 GET 2 OPND 1 OPNDI,I TRUE ANDI GETI OPNDI OPND 1,I FEQ + 1 A = FALSE A = TRUE IF OPERAND 1 IS TRUE AND OPERAND 2 IS TRUE THEN RESULT = TRUE B = FALSE B = TRUE IF OPERAND 1 IS TRUE THEN DON'T BOTHER WITH OPERAND 2 RESULT = TRUE BUT IF OPERAND 1 ISFALSE, OPERAND 2 MUST BE TRUE TO MAKE RESLT = TRUE.

B = FALSE IF OPERAND I IS TRUE, RES = FALSE IF OPERAND 1 IS FALSE, RES = TRUE 260 Page 204 02994000 02995000 02996000 02997000 02998000 02999000 03000000 03001000 03002000 03003000 03004000 03005000 03006000 03007000 03008000 03009000 03010000 03011000 03013000 03014000 03015000 03016000 03017000 03018000 03019000 03021000 03022000 03023000 03024000 03025000 03027000 03028000 03029000 03030000 261 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES FULL PRECISION RELATIONAL OPERATORS: =, #, <, ≤, >, ≥ SPECIAL EXIT CONDITIONS:

RES = I FOR TRUE RES = O FORFALSE TEMPORARIES: MT 1, MT 2 15014 043647 FLT 15015 024147 15016 066031 15017 043647 FLTE 15020 076417 15021 066015 15022 043647 FGT 15023 024257 15024 066031 043647 FGTE 076411 066023 043647 FEQ 076406 000340 FALSE 071603 170201 043647 FNEQ 076474 000172 TRUE 066050 JSM ADB JMP JSM SZB JMP JSM ADB JMP JSM SZB JMP JSM SZB LDA CLR RET JSM SZB LDA JMP TSUB M 3 FEQ + I TSUB TRUE FLT+ 1 TSUB Ml FEQ + I TSUB TRUE FGT + 1 TSUB TRUE ARES 4 TSUB FALSE AONE STANY PERFORM COMPARISON CHECK B < 0 FOR "LESS THAN" PERFORM COMPARISON CHECK B = 0 FOR "OR EQUAL" JUMP TO CHECK "LESS THAN" PERFORM COMPARISON CHECK B > 0 FOR "GREATER THAN" PERFORM COMPARISON CHECK B = 0 FOR "OR EQUAL" JUMP TO CHECK "GREATER THAN" PERFORM COMPARISON CHECK B = 0 FOR "EQUAL" CLEAR THE RESULT REGISTER.

PERFORM COMPARISION CHECK B # 0 FOR "NOT EQUAL" STORE I AS THE RESULT 261 Page 205 03032000 03033000 03034000 03035000 03036000 03037000 03038000 03039000 03040000 03041000 03042000 03043000 0344000 03045000 03046000 03047000 03049000 03050000 03051000 03053000 03054000 03055000 03057000 03058000 03059000 03061000 03062000 03064000 03065000 03066000 03068000 03069000 03071000 03072000 15025 15026 15027 15030 15031 15032 15033 15034 15035 15036 15037 15040 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES 262 FULL PRECISION RESULT VERIFICATION AND STORING ROUTINES ENTRY CONDITIONS: (TO "UAR 2 E") B CONTAINS IN THE EXPONENT POSITION THE CORRECTION TO BE MADE TO ARIE BEFORE STORING IN AR 2 E EXIT CONDITIONS:

IF + ARIE IS IN RANGE (-511 to 511)THENSTOREINAR 2 E AND TRANSFER AR 2 TO RES IF OVERFLOW OCCURS: STORE +/ 9 99999999999 E 511 AS THE RESULT IF UNDERFLOW OCCURS: STORE 0 AS THE RESULT TEMPORARIES: NONE 173201 UAR 2 E 000001 021770 050240 030020 173407 000127 STAR 2 004340 STANY 071403 005753 076457 170201 SOC LDA ADA AND STA SOS LDA LDB XFR LDB SZB RET + 1,C B ARIE ZAP AR 2 E OV/UN AR 2 A ARES 4 RESMI FALSE CLEAR THE OVERFLOW BIT, THEN ADD ARIETO AND CLEAR OUT BITS 1-5 AND STORE IN AR 2 E IF OVER/UNDERFLOW DID OCCUR THEN GIVE AN ERROR, THIS IS THE NORMAL RET TO THE INTERPRETER FROM IMATH EXPONENT OVERFLOW OR UNDERFLOW HAS OCCURRED.

OV/UN ABR 2 OFFSET AR 1 E AND B, THEN RECOMPUTE TO DETERMINE LDA ARIE WHETHER OVERFLOW OR UNDERFLOW TOOK PLACE.

AAR 2 ADBA SBM E 77 IF 8 < 0 THEN UNDERFLOW OCCURRED.

LDA AR 2 E SLA + 2 B > 0: OVERFLOW SET B < 0 > IF AR 2 MANTISSA IS SLB +IS NEGATIVE.

ERROR 76 INTERMEDIATE RESULT OVERFLOW E 76 JSM ASTMA,I STORE +/-9,99999999999 E 511 AS THE RESULT JSM ERROR ASC 1,76 262 Page 206 03074000 03075000 03076000 03077000 03078000 03079000 03080000 03081000 03082000 03083000 03084000 03085000 03086000 03087000 03088000 03089000 03090000 03091000 03092000 03093000 03094000 03095000 03096000 03097000 03098000 03099000 03100000 03101000 03102000 03103000 03104000 03105000 03106000 03107000 03108000 03109000 03110000 03111000 03112000 03113000 03114000 03115000 03116000 03117000 03118000 03119000 03120000 03121000 03122000 03123000 15041 15042 15043 15044 15045 15046 15047 15050 15051 15052 15053 15054 15055 15056 15057 15060 15061 15062 15063 15064 15065 15066 15067 174401 001770 170401 024000 176407 073002 077301 140564 042073 033466 263 Page 206 Continued 03124000 03125000 03126000 15070 042032 03127000 15071 042073 03128000 15072 033467 1,568,094 ERROR 77 INTERMEDIATE RESULT UNDERFLOW E 77 JSM FALSE STORE ZERO AS THE RESULT JSM ERROR ASC 1,77 263 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES 264 RECOVERABLE ERROR ROUTINE FOR INTERNAL MATH ENTRY CONDITIONS:

RES MUST CONTAIN THE DEFAULT VALUE.

CALLING SEQUENCE:

JSM ERROR ASC 1,?? EXIT CONDITIONS:

FLAG 15 IS SET, AND TRACED IF TRACING IS ENABLED.

IF FLG 14 = 1: BUMP JSM STACK AND RETURN TO PREVIOUS CALL IF FLG 14 = 0: JMP AERRI,I GIVE THE DESIGNATED ERROR MESSAGE.

TEMPORARIES: NONE 15073 004130 ERROR 15074 140376 15075 001506 15076 170500 15077 073402 15100 164404 CLR 15101 054003 SET 15102 170201 RETNI LDB JSM LDA SAR RLA JMP DSZ RET P 15 ASFG,I FLAGS 1 SET AERRI,I R CALL A SUB ROUTINE TO SET FLAG 15 AND TRACE THE SETTING IF TRACING IS ENABLED.

TEST FLAG 14.

FLG 14 = 0: GIVE DESIGNATED ERROR MESSAGE.

FLG 14 = 1: BUMP THE JSM STACK AND RETURN TO THE PREVIOUS JSM.

264 Page 207 03130000 03131000 03132000 03133000 03134000 03135000 03136000 03137000 03138000 03139000 03140000 03141000 03142000 03143000 03144000 03145000 03146000 03147000 03148000 03149000 03150000 03151000 03152000 03153000 03154000 03155000 03156000 03157000 03158000 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES 265 FLTCK: FULL PRECISION EXPONENT USER RANGE CHECK.

ENTRY CONDITIONS:

B CONTAINS THE ADDRESS OF THE FULL PRECISION NUMBER TO BE CHECKED.

EXIT CONDITIONS:

EXPONENT IN RANGE (-99,99): RET 1 EXPONENT > 99 and FLG 14 = 1: +/-9 99999999999 E 99 EXPONENT > 99 and FLG 14 = 0: ERROR 74-OVERFLOW EXPONENT <-99 and FLG 14 = 1:0 EXPONENT <-99 and FLG 14 = 0: ERROR 75 UNDERFLOW TEMPORARIES: MTI WARNIN Glll ASSIGNMENT TRACING DEPENDS ON HAVING SAVED IN MT 1 I BY THIS ROUTINE.

15114 140564 15115 001752 15116 053001 15117 031752 15120 000340 15121 005762 15122 071403 15123 042073 15124 033464 FLICK STB LDA LDB AAR SAM TCA ADA SAP SRM ERROR 74E 74 JSM LDA AND STA LDA LDB XFR JSM ASC ERROR 75E 75 LDA CLR JSM ASC MT 1 SAVE THE ADDRESS OF THE FULL PRECISION NUMBER B,I LOAD THE EXPONENT WORD OF THE NUMBER BEING CHECKED A CHECK THE EXPONENT TO INSURE THAT IT IS WITHIN 6 THE RANGE (-99,99) + 2 MAKE THE EXPONENT NEGATIVE P 99 RETNI IF THE EXP IS IN RANGE, B SHOULD BE ≥ O E 75 FULL PRECISION OVERFLOW ASTMA,I STORE +/-9 99999999999 E 99 AS THE RESULI RESE E 99 M RESE ARES MTI 4 ERROR 1,74 FULL PRECISION UNDERFLOW MTI CLEAR THE FULL PRECISION NUMBER TO ZERO 4 ERROR 1,75 265 Page 208 03160000 03161000 03162000 03163000 03164000 03165000 03166000 03167000 03168000 03169000 03170000 03171000 03172000 03173000 03174000 03175000 03176000 03177000 03178000 03179000 03180000 03181000 03182000 03183000 03184000 03185000 03186000 03187000 03188000 03189000 03190000 03191000 03192000 03193000 03194000 03195000 03196000 03197000 03198000 03199000 03200000 03201000 03202000 03203000 03204000 03205000 03206000 03207000 03208000 03209000 03210000 03211000 15103 15104 15105 15106 15107 15110 15111 15112 15113 035762 100001 004000 170405 172402 170040 020064 172070 176412 15125 15126 15127 15130 001762 071603 042073 033465 1,568,094 INTERNAL FULL PRECISION MATH ROUTINES 266 PRND: POWER-OF-TEN ROUNDING FUNCTION DRND: DIGIT POSITION ROUNDING FUNCTION 4/5 ROUNDING IS USED (LIKE IN THE DISPLAY) ENTRY CONDITIONS:

OPERAND 1 IS THE NUMBER TO BE ROUNDED OPERAND 2 IS THE ROUNDING SPECIFICATION

TEMPORARIES: MTI, "ROUND" 15131 043007 PRND 15132 001274 15133 040644 15134 101273 15135 170405 15136 020254 15137 174040 15140 024000 15141 044020 15142 000000 15143 066147 15144 043007 DRND 15145 001274 15146 040644 15147 035762 DRNDI 15150 001273 15151 004020 15152 173004 15153 077402 15154 066050 STARG 15155 066032 STZEK 15156 004127 DRND 2 15157 071403 15160 005762 15161 176474 15162 024255 15163 176071 15164 000140 15165 005762 15166 043561 15167 066047 JSM LDA JSM LDA AAR ADA TCB ADB ISZ NOP JMP JSM LDA JSM STB LDA LDB SOC RLB JMP JMP LDB XFR LDB SBM ADB SBP LDA LDB JSM JMP GET 2 OPND 2 FIXPT OPND 1,I 6 Pl A AR 2 E DRND 1 GET 2 OPND 2 FIXPT MTI 1 OPND 1 AR 2 E DRND 2 STZER STANY FALSE AR 2 A 4 MTI STZER M 12 STARG P 7 MT 1 ROUND STAR 2 B = POWER OF TEN ROUNDING SPEC.

CONVERT IT TO DIGIT-TO-ROUND SPEC.

B = DIGIT-TO-ROUND SPEC.

CHANGE THE SIGN OF THE ROUNDING SPEC.

NEEDED IN CASE OF (E-1 -) WITH 5 DON'T CARE BITS = 1 JUMP INTO THE DRND ROUTINE.

B = DIGIT-TO-ROUND.

SAVE THE DIGIT-TO-ROUND INFO.

A = ADDRESS OF NO TO BE ROUNDED.

B = SIGN OF ROUNDING SPEC.

INTEGER OVERFLOW? YES, CHOOSE THE PROPER DEFAULT VALUE BASED ON THE SIGN OF THE ROUNDING SPEC.

TRANSFER THE NO TO BE ROUNDED TO AR 2.

B = DIGIT-TO-ROUND SPEC.

IF B < 0, STORE ZERO AS THE RESULT.

IF B ≥ 0, STORE THE ARGUMENT AS THE RESULT.

ROUND THE ARGUMENT STORE THE ROUNDED ARGUMENT.

266 Page 209 03213000 03214000 03215000 03216000 03217000 03218000 03219000 03220000 03221000 03222000 03223000 03224000 03235000 03226000 03227000 03228000 03229000 03230000 03231000 03232000 03233000 03234000 03235000 03236000 03237000 03238000 03239000 03240000 03242000 03243000 03244000 03246000 03247000 03248000 03249000 03250000 03251000 03252000 03254000 03255000 03256000 03257000 03258000 03259000 03260000 03261000 03262000 03263000 1,568,094 UTILITY ROUTINES ACCESSED BY BASE PAGE LINKS FLTPT: CONVERT B TO FLOATING POINT FORMAT IN AR 2 ON ENTRY: B-REGISTER = INTEGER ON EXIT: AR 2 CONTAINS FLOATING NUMBER TEMPORARIES USED: TI g 15170 000127 FLTPT 15171 071603 15172 076432 15173 176003 15174 174040 15175 044020 15176 000203 15177 031711 15200 000257 FLT Pl 15201 020254 15202 125711 15203 176076 15204 075541 15205 101711 15206 170040 15207 024000 15210 010135 15211 066214 15212 045711 15213 066200 15214 000001 15215 075541 15216 071500 15217 174040 15220 024134 15221 174605 15222 024020 15223 034020 15224 170201 FLRET LDA AR 2 A CLR 4 SZB FLRET SBP + 3 TCB ISZ AR 2 E LDA PTCN STA TI LDA Ml ADA Pl ADB T l,I SBP -2 MLY LDA T 1,I TCA ADB A CPA P 10 JMP + 3 ISZ Ti JMP FLT Pl LDA B MLY NRM TCB ADB P 11 SBL 6 ADB AR 2 E STB AR 2 E RET I CLEAR AR 2 REGISTER IF B = 0, GET OUT IFB < 0, MAKE B > O AND RECORD MANTISSA SIGN TI = START OF POWERS OF TEN TABLE A = INITIAL COUNT,-1 INCREMENT COUNT B = B -10 N IF B STILL > 0, KEEP LOOPING B < 0, SO SAVE COUNT AS NEXT DIGIT GET LAST POWER OF TEN MAKE IT POSITIVE AND RESTORE B TO LAST POS VALUE IS A= 10 ? YES, DONE; B HAS UNITS COUNT NO, MOVE TO NEXT POWER OF TEN AND GO AGAIN PUT UNITS IN A AND INCLUDE IT EXPONENT = 11-B POSITION EXPONENT INCLUDE SIGN STORE FINAL EXPONENT WORD Page 210 03265000 03266000 03267000 03268000 03269000 03270000 03271000 03272000 03273000 03274000 03275000 03276000 03277000 03278000 03279000 03280000 03281000 03282000 03283000 03284000 03285000 03286000 03287000 03288000 03289000 03290000 03291000 03292000 03293000 03294000 03295000 03296000 03297000 03298000 03299000 03300000 03301000 03302000 03303000 03304000 03305000 03306000 267 267 1,568,094 FILL IN BASE PAGE BSS'S Page 211 03308000 00524 03309000 03310000 00524 014022 03311000 00525 014042 03312000 00526 014036 03313000 00527 014146 03314000 00530 014264 03315000 00531 014410 03316000 00532 015025 03317000 00533 015022 03318000 00534 015014 03319000 00535 015017 03320000 00536 015030 03321000 00537 015035 03322000 00540 014774 03323000 00541 015003 03324000 00542 014765 03325000 00543 015010 03326000 00544 015131 03327000 00545 015144 03328000 00546 015073 03329000 00547 014561 03330000 00550 014647 03331000 00551 015103 03332000 00552 014011 03333000 00553 014007 03334000 00554 014043 03335000 00555 014037 03336000 00556 014147 03337000 00557 014265 03338000 00560 014266 03339000 00561 014411 03340000 00562 014675 03341000 00563 015170 03343000 ORG AUNM DEF FUNM DEF FADD DEF FSUB DEF FMPY DEF FDVD DEF FSQR DEF FGTE DEF FGT DEF FLT DEF FLTE DEF FEQ DEF FNEQ DEF AND DEF OR DEF XOR DEF NOT DEF PRND DEF DRND DEF ERROR DEF ROUND DEF TSUB DEF FLTCK DEF GETI DEF GET 2 DEF FADD+ 1 I DEF FSUB+ 1 I DEF FMPY+ 1 I DEF FDVD+ 1 I DEF DVDNR DEF FSQR+ 1 I DEF TSUB#+ 1 I DEF FLTPT END END OF PASS 2 NO ERRORS DETECTED 268 268 1,568,094 CASSETTE OPERATING SYSTEM 02002000 02003000 02004000 02005000 02006000 07775 02007000 07775 016236 02008000 02009000 02010000 02011000 00601 02012000 00601 016336 02013000 07735 02014000 07735 016334 02015000 07737 02016000 07737 016037 02017000 07742 02018000 07742 016100 02019000 07743 016327 02020000 07744 016000 02021000 07745 016633 02022000 07746 017051 02023000 07750 02024000 07750 017042 02025000 07751 016432 02026000 07752 016470 02027000 07753 016117 02028000 07754 016132 02029000 07755 016543 02030000 07756 016206 2031000 00603 0203200 00603 017605 02033000 00604 017460 02034000 00606 02035000 00606 017635 02036000 02037000 02038000 02039000 21770 02040000 21770 016347 02041000 21771 017566 02042000 21772 017665 02043000 02044000 02045000 00600 02046000 00600 023750 ORG 7775 B DEF ETLIS ORG DEF ORG DEF ORG DEF ORG DEF DEF DEF DEF DEF ORG DEF DEE DEF DEF DEF DEF DEF ORG DEF DEF ORG DEF ORG DEF DEF DEF ARFK RWFKB 7735 B EREW 7737 B IDF 7742 B FDF ERSTP EMARK RCF LDF 7750 B LD Pl RCMEM LDMEM RCK LDK LDB VFY ASTPA CFD WTRR ARDRC RDREC 21770 B ERD 50 GTPR 2 STPRA ORG ACSTI DEF CSTIN LINK TO EXECUTE "TLIST" REWIND FROM KEYBOARD LINK TO EXECUTE 'REW' LINK TO EXECUTE 'IDF' LINK TO EXECUTE "FDF" LINK TO EXECUTE 'ERT' LINK TO EXECUTE 'MRK' LINK TO EXECUTE 'RCF' LINK TO EXECUTE 'LDF' LINK TO EXECUTE 'LDP' LINK TO EXECUTE 'RCM' LINK TO EXECUTE 'LDM' LINK TO EXECUTE 'RCK' LINK TO EXECUTE 'LDK' LINK TO EXECUTE 'LDB' LINK TO EXECUTE 'VFY' LINK TO GTPR 2 LINK TO CASSETTE INITIALIZATION ROUTINE Page 212 269 269 Page 213 CASSETTE OPERATING SYSTEM 02048000 02049000 02050000 02051000 02052000 02053000 02054000 CASSETTE 02055000 OPERATING 02056000 SYSTEM 02057000 02058000 02059000 02060000 02061000 02062000 02063000 02064000 02065000 02066000 INSTRUCTIONS FOR RECORDING OR LOADING CASSETTE FILES 02067000 02068000 02069000 TO WRITE A RECORD:

02070000 02071000 1) JSM ASTPA,I SET PERIPHERAL ADDRESS 02072000 AND COMPLETE ANY PENDING FINDS 02073000 2) T 13 (RECNO)=FILENUMBER 02074000 3) CAIMP+ 8 (MBPTR) = STARTING ADDRESS (LOWEST MEMORY ADDRES 02075000 TO BE RECORDED) 02076000 4) O Pl + I (LWMD) = ENDING ADDRESS (HIGHEST MEMORY ADDRESS 02077000 TO BE RECORDED) 02078000 5) MRWI + 1 (RELTH) = RECORD LENGTH (LWMD M 8 PTR + 1) 02079000 02080000 FILE TYPES:

02081000 NULL => O 02082000 BINARY => 1 02083000 NUMERIC DATE => 2 02084000 MIXED STRING AND NUMERIC => 3 02085000 MEMORY => 4 02086000 KEYS => 5 02087000 USER PROGRAMS => 6 02088000 02089000 02090000 6) MRW 1 + 3 (RECTP) = TYPE 02091000 7) JSM AWTRR,I -WRITE THE RECORD 02092000 8) ENABLE THE INTERRUPT 02093000 NOTE: THE C REGISTER IS SAVED IN T 21IF ALTERED, 02094000 THE C REGISTER SHOULD BE RESTORED FROM T 21 AT THIS 02095000 POINT.

02096000 02097000 TO READ A RECORD:

02098000 02099000 I) JSM ASTPA,I SET THE PERIPHERAL ADDRESS 02100000 2) RECNO = FILE NUMBER 02101000 3) JSM ACHST,I POSITION THE TAPE AT FILE 02102000 4) MBPTR = STARTING ADDRESS 02103000 5) JSM ARDRC,I READ THE RECORD 270 1.568,094 97 f 271 1,568,094 271 Page 214 CASSETTE OPERATING SYSTEM 02104000 6) ENABLE INTERRUPT 02105000 NOTE: THE C REGISTER IS SAVED IN T 21 IF ALTERED, 02106000 THE C REGISTER SHOULD BE RESTORED FROM T 21 AT THIS 02107000 POINT.

02108000 02109000 NOTE: NO CHECK IS MADE BY THE TAPE OPERATING SYSTEM FOR ADEQUATE 02110000 ROOM IN MEMORY OR FOR PROPER FILE TYPE THE FILE 02111000 HEAD INFORMATION 02112000 IS VALID AFTER THE CALL TO ACHST THREE ATTEMPTS 02113000 ARE MADE 02114000 AT READING A FILE IF ERRORS ARE ENCOUNTERED, 02115000 WITH A FOURTH READ FOR RECOVERY.

02116000 02117000 02118000 02119000 02120000 02121000 THE CASSETTE OPERATING SYSTEM IS BASICALLY SELF 02122000 CONTAINED IT CALLS THE FOLLOWING ROUTINES EXTERNAL TO ITS PAGES:

02123000 ( 16 K, 20 K) 02124000 ABUMP, FIXPT-1, ACOUN, NGET, AERR 1, AERR 2, AFLNA, AFLTP 02125000 AMPUP, AMAMP, ARSGT, ACLBI, A PRN, EOLIO, ABTDA, AASTR 02126000 DMALO, ADSRM, ALDSP, ALLOC, ACNIN, AERCS, ASSLN, AERAV 02127000 AMPUP, AMPML, AZRWM, ABSAD+I, ASPC 02128000 02129000 THE FOLLOWING TEMPORARIES ARE USED AT SOME POINT IN THE 02130000 CASSETTE SYSTEM:

02131000 Tl THROUGH T 23, MRW 1 THROUGH MRWI+ 9, O Pl THROUGH OP 1 + 2 02132000 02133000 NOTE: THE C REGISTER IS SAVED IN TEMPORARY T 21 ON ENTRY 02134000 TO ANY STATEMENT EXECUTION VIA THE INTERPRETURE

02135000 AND IS RESTORED ON EXIT 02136000 02137000 02138000 02139000 02140000 STANDARD PROCEEDURE #1 02141000 THIS PROCEEDURE IS USED BY MOST ROUTINES TO GET THE FIRST 02142000 ENTERED PARAMETER FROM THE STACK (THE FILE NUMBER).

02143000 02144000 THE FILE NUMBER IS GOTTEN FROM THE RUN TIME EXECUTION STACK 02145000 IT RESIDES AS EITHER A 7 WORD ENTRY IF NUMERIC OR A THREE WORD 02146000 ENTRY IF A SIMPLE VARIABLE OR ARRAY ELEMENT.

02147000 THIS PARAMETER CAN BE OBTAINED BY THE FOLLOWING CODE:

02148000 02149000 JSM ACOUN,I THIS SETS FA Pl (FLOATING POINTER IN 02150000 STACK) 02151000 JSM NGET THIS WILL ATTEMPT TO GET A NUMERIC PARAMETER 02152000 IT WILL RETURN P + I IF A NONNUMERIC IS EN02153000 COUNTERED AT FAPI IT WILL RETURN P + 2 IF 02154000 THE PARAMETER AT FA Pl IS NUMERIC 02155000 JMPERR 55 272 Page 214 Continued 02156000 02157000 02158000 02159000 1,568,094 272 JSM FIXPT-1 FIXPT WILL RETURN THE ENTERED FLOATING POINT NUMBER AS A BINARY NUMBER IN REGISTER B F c C C 0 0 C 0 273 1,568,094 273 age 215 CASSETTE OPERATING SYSTEM )2160000 THE FILE NUMBER NEED NOT BE SUPPLIED, THE DEFAULT IS ZERO } 2161000 HOWEVER IF ANYTHING OTHER THAN A NUMERIC PARAMETER IS ENTERED 12162000 ERROR 55 IS GIVEN.

D 2163000 1)2164000 SUCCESSIVE PARAMETERS AFTER THE FIRST ARE OBTAINED BY CALLING 32165000 BM Pl TO MOVE THE EXECUTION STACK POINTER (FAPI) BY ONE ENTRY 12166000 THEN CALLING NGET TO OBTAIN THE PARAMETER n)1-7 (",0 EMARK IS THE CASSETTE MARK COMMAND TEMPORARIES USED: NOREC (T 10), MSIZE (TI 1), FLAGA ROUTINES CALLED: GTPAR, LDXI, MRKA, EROSO, BMP 1, NGET, FIXPT ASYER, AERRI ON EXIT: MARK COMPLETE ON EXIT: MARK COMPLETE 16000 16000 042565 16001 035722 16002 042732 16003 140424 16004 040751 16005 067726 16006 040643 16007 173427 16010 176423 16011 024254 16012 173424 16013 174500 16014 076414 16015 001722 16016 072414 16017 035720 16020 142771 16021 043347 ORG EMARK JSM STB JSM JSM JSM JMP JSM SOS SBM ADB SOS SBR SZB MRKII MARK 7 LDA SZA STB JSM JSM 16000 B GTPAR NOREC BM Pl ASYER,I NGET ERR 55 FIXPT-1 MARK 8 MKER 1 Pl MARK 8 1 l MRK 12 NOREC MRK 13 MSIZE MRKA,I ERD 50 GET THE FIRST PARAMETER ON RETURN B HAS THE NUMBER OF FILES MOVE THE EXECUTION STACK POINTER BY ONE MISSING PARAMETER GET THE NUMERIC PARAMETER ON STACK NON-NUMERIC ENTRY ENCOUNTERED CONVERT PARAMETER TO FIXED POINT NUMBER IF OVERFLOW ERROR IF NEG ERROR ROUND THE BYTE COUNT UP SEE IF OVERFLOW MAKE BYTE COUNT A WORD COUNT IF SIZE IS ZERO CHECK FOR REQ TO REWRITE HEAD WE KNOW MSIZE#0 SO IF NOREC = 0, ERROR B CONTAINS MAX SIZE MARK THE TAPE CHECK FOR ERRORS IF MRK ERRORS, THE LOADING OF THE RETURN VARIABLE INFO IS DONE IN ERDSO, WHICH THEN DOES A RETURN 5 02168000 v v 02169000 021769000 0217000 02172000 02173000 02174000 02175000 02176000 02177000 02178000 02179000 021879000 0218000 02182000 02183000 021843000 02185000 02186000 02187000 02188000 02189000 0219000 0219000 02192000 02193000 02194000 02195000 02195000 02197000 02198000 02199000 02199000 02200000 02201000 02202000 02203000 02204000 02205000 02206000 02207000 02208000 1,568,094 274 Page 215 Continued 02209000 16022 001676 MARK 9 LDA CRECN SET THE RETURN VARIABLE FOR A SUCCESSFUL MARK 020257 031756 MRK 10 042655 067464 067464 001722 MRK 12 ADA STA JSM JMP JMP LDA Ml FLAGA LDXI INTN 1 INTN 1 NOREC LOAD THE (X) SEE IF BOTH PARAMETERS ARE ZERO 274 02210000 02211000 02212000 02213000 02214000 02215000 16023 16024 16025 16026 16027 16030 16031 072466 16032 067726 16033 066603 16034 140404 16035 032070 16036 066535 1,568,094 275 CASSETTE OPERATING SYSTEM SZA MRKI I IF BOTH ZERO REWRITE HEAD MRK 13 JMP ERR 55 IFNOTGIVEERROR MKER 1 JMP ERR 53 INVALID PARAMETER ON CASSETTE COMMAND ERR 48 JSM AERR 1,I MARK FAILED ASC 1,48 MARK 8 JMP ER Rl l ERROR 11-OVERFLOW ERROR IDENTIFY FILE STATEMENT RETURNS FILE NUMBER, FILE TYPE,

FILE CURRENT SIZE (IN BYTES), FILE CAPACITY (IN BYTES) AND TRACK ( O OR 1) THIS COMMAND NORMALLY RESULTS IN LITTLE OR NO TAPE MOTION ON EXECUTION THE TAPE IS ALWAYS POSITIONED IN THE INTER FILE GAP IMMEDIATELY PRECEEDING THE FILE WHOSE HEADER WAS JUST READ.

IF THE TAPE POSITION IS UNKNOWN TO THE SYSTEM, (AS AT TURN ON OR RESET, OR ON INSERTION OF A DIFFERENT CART) THE COMMAND MUST HAVE AT LEAST ONE PARAMETER THE TAPE WILL SEARCH IN REVERSE FOR A FILE HEADER TEMPORARIES USED: NONE ROUTINES CALLED:CFD, CNULL, IDRA, ERDSO, LDXI, LDX 2 LDX 3, AERRI, ASYER 16037 042605 IDF 16040 001705 16041 010127 16042 067075 16043 000005 16044 170501 16045 073002 16046 067075 16047 142777 IDF 7 16050 043347 16051 042611 IDF 5 16052 067464 16053 005676 16054 042660 16055 140424 16056 005701 16057 042654 16060 067464 16061 005700 16062 174600 16063 042654 JSM LDA CPA JMP LDA SAR SLA JMP JSM JSM JSM JMP LDB JSM JSM LDB JSM JMP LDB SBL JSM CFD TPOS P 16 IDF 2 R 5 2 + 2 IDF 2 IDRA,I ERDSO CNULL INTNI CRECN LDX 2 ASYER,I RTYPE LDX 3 INTNI CSIZE L LDX 3 COMPLETE ANY FINDS GET THE CURRENT TAPE POSITION ARE WE LOST YES LOST CHECK TO SEE IF THE CARTRIDGE IS PULLED AND CHECK IF TAPE IS LOST LOST, SEE IF AT LEAST ONE PARAMETER IS ENTERED IDENTIFY THIS RECORD CHECK FOR ERRORS CHECK FOR ANY PARAMETERS ENABLE GHE INTERRUPT AND EXIT GET THE VALUE FOR THE FIRST PARAMEYER AT LEAST ONE PARAMETER IF HERE SOMETHING WENT WRON Gll TRANSFER RTYPE TO (,X) ENABLE THE INTERRUPT AND EXIT MAKE WORD COUNT A BYTE COUNT TRANSFER CSIZE TO NEXT (,X) 275 Page 216 02216000 02217000 02218000 02219000 02220000 02221000 02222000 02223000 02224000 02225000 02226000 02227000 02228000 02229000 02230000 02231000 02232000 02233000 02234000 02235000 02236000 02237000 02238000 02239000 02240000 02241000 02242000 0224300002244000 02245000 02246000 02247000 02248000 02249000 02250000 02251000 02252000 02253000 02254000 02255000 02256000 02257000 02258000 02259000 02260000 02261000 02262000 02263000 02264000 02265000 02266000 1,568,094 Continued 16064 067464 16065 005677 16066 174600 16067 042654 16070 067464 JMP INTNI LDB ASIZE SRL 1 JSM LDX 3 JMP INTNI 276 ENABLE THE INTERRUPT AND EXIT MAKE WORD COUNT A BYTE COUNT TRANSFER ASIZE TO NEXT (,X) ENABLE THE INTERRUPT AND EXIT 276 Page 216 02267000 02268000 02269000 02270000 02271000 1,568,094 CASSETTE OPERATING SYSTEM 001707 170140 050254 067024 042611 IDF 2 067404 067047 042665 FDF 142766 042566 005514 FDFI 140602 067103 070430 034011 000177 030013 16112 031345 16113 000254 16114 031764 16115 140605 16116 067466 LDA FLG 1 CMA AND Pl JMP MRK 10 JSM CNULL JMP ERR 45 JMP IDF 7 GET THE COMPLEMENT OF THE TRACK COMPLEMENT CLEAR ALL BUT THE TRACK BIT LOAD THE RETURN VARIABLE CHECK FOR THE NULL PARAMETER NO PARAMETERS ENTERED SO ERROR AT LEAST ONE NUMERIC PEARAMETER CONTINUE FDF IS THE CASSETTE FIND FILE COMMAND TEMPORARIES USED: MRW 1 + 6 (FLG 2) ROUTINES CALLED: GTPR 2 ACHST STPRA, DMALO, STOPC JSM JSM JSM LDB JSM JMP DIR ST 8 LDA STA STA LDA STA JSM JMP STPRA STOPC,I GTPR 2 CSELC DMALO,I FDF 1 PA PO DMAPA CSCF Pl FLG 2 ACHST,I INTEN SET THE PERIPHERIAL ADDRESS STOP THE CASSETTE GET THE FILE NUMBER PREPARE TO CALL DMA LOCKOUT DMA REFUSED TRY AGAIN WE HAVE DMA, CONTINUE SET THE PA CLEAR DMAPA (THE DMA FLAG) IN CASE DRIVERS HAVE ERROR FORGET ANY PREVIOUS FINDS SET UP THE HARDWARE FIND DO THE FIND RCK IS THE CASSETTE RECORD KEYS COMMAND 1 ROUTINES CALLED: GTPAR, CALTH, WTRR 16117 042565 RCK 16120 000142 16121 031761 16122 001306 JSM GTPAR GETTHEFILENUMBER LDA P 5 KEYS ARE TYPE FIVE STA RECTP LDA FWAM THIS IS THE START OF THE RECORD 16071 16072 16073 16074 16075 16076 16077 16100 16101 16102 16103 16104 16105 16106 16107 16110 16111 Page 217 02272000 02273000 02274000 02275000 02276000 02277000 02278000 02279000 02280000 02281000 02282000 02283000 02284000 02285000 02286000 02287000 02288000 02289000 02290000 02291000 02292000 02293000 02294000 02295000 02296000 02297000 02298000 02299000 02300000 02301000 02302000 02303000 02304000 02305000 02306000 02307000 02308000 02309000 02310000 02311000 02312000 02313000 02314000 02315000 02316000 02317000 02318000 02319000 02319000 02320000 02321000 02322000 02323000 02324000 02325 ( 000 02326000 02327000 as as as as as as as as as 277 277 1,568,094 CASSETTE OPERATING SYSTEM STA LDB ADB STB JSM JSM JMP MBPTR FWUP Ml LWMD CALTH WTRR INTN 1 THIS IS THE END OF THE RECORD CALCULATE THE LENGTH WRITE THE RECORD ENABLE THE INTERRUPT AND EXIT LDK IS THE CASSETTE LOAD KEYS COMMAND LOADING BEGINS AT THE FWAM AND OVERLAYS ANY KEYS ALREADY DEFINED.

TEMPORARIES USED: OPII (LWMD), FLAGA (MRW 1) TVAR 1 (O Pl + 2) ROUTINES CALLED: PCALL, STVFY, NEWSZ, AMAMP, AMUPH, RDREC CKKBE, ARSGT, SSCHK JSM LDA JSM LDA STA LDA STA JSM STB TCB ADB SBP LDA TCA ADA ADA STA JSM JMP JSM JSM JMP JMP LDA STVFY P 5 PCALL FWUP FLAGA FWAM MBPTR NEWSZ D MUST SEE IF THE STATE IS LEGAL KEYS ARE TYPE FIVE PRELIMINARY CALL FOR LOADS REMEMBER STARTING POINT TO UPDATE REG C HERE, LEND, THIS IS THE START OF THE LOAD CALCULATE MBPTR + CSIZE TO B -1 TO A SET POINTERS TO MOVE MEMORY FWUP WHICH DIRECTION AND HOW FAR? LDK 1 SKIP IF MUST MOVE LOWER FWUP SET POINTERS TO MOVE PROGRAMMING RMAX D D AMUPH,I MOVE PROGRAM TO HIGHER MEMORY LDK 7 AMAMP,I MOVE MEMORY LOWER CKKBE SEE IF THERE IS A PROGRAM RUNNING LDK 3 YES A PROGRAM IS RUNNING LDK 2 NO PROGRAM RUNNING FLAGA INITIAL POSITION OF THE START OF THE PROGRAM TCA ADA FWUP STA TVAR 1 LDB SVC ADB STB LDB ADB STB A SVC HERE A HERE THIS IS THE OFFSET TO THE C REG BECAUSE OF THE MOVING OF THE MEMORY REMEMBER THE OFFSET MUST RESET REG C, 'HERE', AND 'LEND' (SVC = C' :

042427 LDK 000142 042710 001307 031756 001306 031706 042646 034017 174040 025307 176010 001307 170040 021310 020017 030017 140463 067156 140464 LDK 1 042736 LDK 7 067161 067204 001756 LDK 3 02374000 16162 170040 02375000 16163 021307 02376000 02377000 16164 031744 02378000 16165 005735 16123 16124 16125 16126 16127 16130 16131 Page 218 02328000 02329000 02330000 02331000 02332000 02333000 02334000 02335000 02336000 02337000 02338000 031706 005307 024257 035743 042626 042460 067464 02339000 02340000 02341000 02342000 02343000 02344000 02345000 02346000 02347000 02348000 02349000 02350000 02351000 02352000 02353000 02354000 02355000 02356000 02357000 02358000 02359000 02360000 02361000 02362000 02363000 02364000 02365000 02366000 02367000 02368000 02369000 02370000 02371000 02372000 02373000 16132 16133 16134 16135 16136 16137 16140 16141 16142 16143 16144 16145 16146 16147 16150 16151 16152 16153 16154 16155 16156 16157 16160 16161 02379000 02380000 02381000 02382000 02383000 16166 16167 16170 16171 16172 024000 035735 005265 024000 035265 278 278 1,568,094 CASSETTE OPERATING SYSTEM 16173 005264 16174 024000 16175 035264 16176 000177 LDB ADB STB LDA 02388000 16177 031063 02389000 16200 042376 16201 140360 16202 042635 16203 067464 16204 042635 LDK 2 16205 066257 LEND A LEND PO 279 SET THE FLAG FOR ADJUSTMENT OF GSB RETURNS STA NPROG JSM SSCHK THIE ROUTINE WILL ADJUST THE GSB RETURNS JSM ARSGT,I RESET THE HS GTO ADDRESSES JSM RDREC READ THE RECORD JMP INTNI ENABLE THE INTERRUPT AND EXIT JSM RDREC READ THE RECORD JMP LDFI 8 NO PROGRAM SO CLEAR RUN BIT, EXIT VFY IS THE CASSETTE VERIFY COMMAND IT MUST BE THE FIRST CASSETTE STATEMENT AFTER A RECORD OR LOAD

STATEMENT

OR ITS PARAMETERS MAY BE DESTROYED 16206 042605 VFY 16207 001676 16210 020257 16211 031725 16212 140610 16213 043227 16214 067223 16215 042611 VFY 2 16216 066511 16217 004254 16220 042660 VFY 3 16221 140424 16222 067464 16223 042611 VFY 1 16224 067464 16225 004177 16226 067220 ON ENTRY: THE INFORMATION FOR THE TAPE TO BE VERIFIED AGAINST IT'S COUNTERPART IN MEMORY ON EXIT: VERIFY COMPLETE UNLESS ERROR 44 OCCURES -VERIFY FAILED TEMPORARIES USED: RECNO ROUTINES CALLED: CED, ACOUN, VREC, CNULL, LDX 2, ASYER JSM LDA ADA STA JSM JSM JMP JSM JMP LDB JSM JSM JMP JSM JMP CFD CRECN Ml RECNO ACOUN,I VREC VFY 1 CNULL ERR 44 Pl LDX 2 ASYER,I INTNI CNULL INTNI LDB PO JMP VFY 3 COMPLETE ANY PENDING FINDS MUST DO THIS IN CASE RECNO IS CHANGED, TPOS = 2 ON ENTRY RESTORE THE TARGET RECORD NUMBER SET FA Pl VERIFY THE RECORD NO ERROR RETURN CHECK FOR THE NULL PARAMETER NO NUMERIC PARAMETER SO GIVE ERROR ERROR -VERIFY HAS FAILED LOAD NEXT XI BAD NEWS IF GET HERE ENABLE THE INTERRUPT AND EXIT SEE IF WE HAVE A RETURN VARIABLE NO NUMERIC RETURN VARIABLE SO DONE LOAD THE RETURN VARIABLE 279 Page 219 02384000 02385000 02386000 02387000 02390000 02391000 02392000 02393000 02394000 02395000 02396000 02397000 02398000 02399000 02400000 02401000 02402000 02403000 02404000 02405000 02406000 02407000 02408000 02409000 02410000 02411000 02412000 02413000 02414000 02415000 02416000 02417000 02418000 02419000 02420000 02421000 02422000 02423000 02424000 02425000 02426000 02427000 02428000 02429000 02430000 02431000 02432000 02433000 02434000 02435000 280 Page 219 Continued 02436000 02437000 02438000 02439000 1,568,094 VREC DOES A VERIFY ON THE CURRENT FILE NUMBER TEMPORARIES USED: INSTR (T 11) TEMPORARIES USED: INSTR (TI 1) 280 2 g I 1568,094 281 CASSETTE OPERATING SYSTEM ROUTINES CALLED: ACHST, RBDYA, ERD 50 140605 VREC 002744 031723 142775 043347 170201 170202 JSM ACHST,I LDA CPBCD STA INSTR JSM RBDYA,I JSM ERD 50 RET 1 RET 2 REPOSITION THE TAPE CPB PTR,I COMMAND FOR VERIFY DO THE VERIFY CHECK FOR ERRORS CONTINUE RETURN FROM ERD 50 TLIST: STATEMENT TO LIST FILE DESCRIPTIONS

ROUTINES CALLED: CFD, IDRA, ERD 50, ACLBI, A PRN, ACE ASPC, EOLIO, ABTDA 042605 ETLIS 142777 043347 140450 003320 004313 071401 001707 170140 050254 063323 130317 140444 TEMPORARIES USED: RECNO JSM JSM JSM JSM LDA LDB XFR LDA CMA AND IOR STA JSM CFD IDRA,I ERD 50 ACLBI,I HEADI AIBUF 2 FLGI Pl BZ TLPTR,I A.PRN,I START OF MAIN TLIST LOOP 001676 031725 070420 TLI 51 001206 16257 010254 16260 067312 16261 070430 16262 001514 02491000 16263 030011 02492000 16264 140605 16265 140450 TLI 56 02495000 16266 003326 LDA CRECN STA RECNO EIR LDA WKC CPA Pl JMP TLI 53 DIR COMPLETE ANY PENDING FINDS IDENTIFY CURRENT TAPE POSITION CHECK FOR ERRORS CLEAR THE I/O BUFFER TRANSFER THE TRACK NO HEADING TO THE BUFFER GET THE CURRENT TRACK NUMBER AND FILL IN THE TRACK NO.

THEN PRINT THE LINE.

SET UP THE TARGET RECORD NUMBER TURN ON INTERRUPT FOR STOP FLAG CHECK THE "STOP FLAG" BEFORE EACH NEW IDF.

AND GET OUT IF IT IS SET.

TURN OFF INTERRUPTS LDA CSELC SET THE PERIPHERAL ADDRESS OF THE CASSETTE.

STA PA JSM ACHST,I FIND THE NEXT FILE AND READ THE HEADER.

JSM ACLBI,I CLEAR THEI/O BUFFER FOR THE NEXT LINE.

LDA BNOBK GETTHE# SIGNFORFILENUMBER 16227 16230 16231 16232 16233 16234 16235 Page 220 02440000 02441000 02442000 02443000 02444000 02445000 02446000 02447000 02448000 02449000 02450000 02451000 02452000 02453000 02454000 02455000 02456000 02457000 02458000 02459000 02460000 02461000 02462000 02463000 02464000 02465000 02466000 02467000 02468000 02469000 02470000 02471000 02472000 Q 02473000 02474000 02475000 02476000 02477000 02478000 02479000 02480000 02481000 02482000 02483000 02484000 02485000 02486000 02487000 02488000 02489000 02490000 16236 16237 16240 16241 16242 16243 16244 16245 16246 16247 16250 16251 16252 16253 16254 16255 16256 02493000 02494000 1,568,094 281 281 1,568,094 CASSETTE OPERATING SYSTEM 16267 130313 16270 001676 16271 004314 16272 043317 16273 140444 16274 140450 16275 001701 16276 004314 16277 043317 16300 001700 16301 007324 16302 043316 16303 001677 16304 007325 16305 043316 16306 140444 STA LDA LDB JSM JSM JSM LDA LDB JSM LDA LDB JSM LDA LDB JSM 16307 045725 16310 001677 16311 072044 16312 16313 16314 16315 000144 TLI 53 140571 040710 067464 16316 170600 16317 164477 AIBUF,I CRECN AIBFX DMPNO A.PRN,I ACLBI,I RTYPE AIBEX DMPNO PUT AT START OF LINE PRINT THE FILE NUMBER LINE CLEAR THE I/O BUFFER GET THE RECORD TYPE CSIZE CS DMPNO-1 ASIZE AS DMPNO-1 JSM A PRN,I PRINT THE LINE INTHE I/O BUFFER ISZ RECNO LDA ASIZE RZA TLISI LDA JSM JSM JMP P 3 ASPC,I EOLIO INTN 1 GET READY TO FIND THE NEXT FILE IF THE NULL F NOT BEEN REACHED, KEEP TLISTING.

PRINT THREE BLANK LINES PRINT THE BLANK LINES.

ENABLE THE INTERRUPT AND EXIT SUBROUTINES FOR TLIST SAL 1 DMPNO JMP ABTDA,I BUILD THE NO IN IN THE I/O BUFFER STARTING AT CHARACTER ADDRESS + 1TLIST CONSTANTS AND EQUATES.

TLIST CONSTANTS AND EQUATES.

16320 016321 HEADI 16321 072162 16322 065440 16323 020060 BZ 000317 TLPTR 16324 177066 CS 16325 177071 AS 077206 WKC 16326 021440 BNOBK DEF DEC DEC OCT EQU DEF DEF EQU OCT + 1 29810 TR 27424 K BLANK 020060 ASCII: BLANK, ZERO AIBSL POINTER FOR TRACK DIGIT IBUFF+ 2,I IBUFF+ 5,I IOTMP 21440 ERST IS THE CASSETTE ERASE COMMAND TEMPORARIES USED: NONE TEMPORARIES USED: NONE Page 221 02496000 02497000 02498000 02499000 02500000 02501000 02502000 02503000 02504000 02505000 02506000 02507000 02508000 02509000 02510000 02511000 02512000 02513000 02514000 02515000 02516000 02517000 02518000 02519000 02520000 02521000 02522000 02523000 02524000 02525000 02526000 02527000 02528000 02529000 02530000 02531000 02532000 02533000 02534000 02535000 02536000 02537000 02538000 02539000 02540000 02541000 02542000 02543000 02544000 02545000 02546000 02547000 02548000 02549000 02550000 02551000 282 282 1,568,094 CASSETTE OPERATING SYSTEM 16327 042565 ERSTP 16330 140605 16331 142776 16332 043347 16333 067464 16334 16335 16336 16337 16340 16341 16342 16343 16344 16345 16346 283 ROUTINES CALLED: GTPAR, ERSA, ERDSO JSM GTPAR GETTHEFILENUMBER JSM ACHST,I POSITION THE TAPE JSM ERSA,I DO THE ERASE JSM ERDSO CHECK FOR ERRORS JMP INTNI ENABLE THE INTERRUPT AND EXIT THE REWIND COMMAND SETS THE HARDWARE IN REVERSE.

HS MODE AND SEARCHES FOR THE BEGINNING OF TAPE ONCE INITIATED, THE REWIND OPERATION TERMINATES BY ITSELF TEMPORARIES USED: NONE ROUTINES CALLED BY THIS ROUTINE: STPRA, REWA, ERDSO as JS 043340 EREW 067464 000263 RWFKB 031613 042665 EREW 1 142772 043347 070420 ERD 21 000177 031613 170201 JSM JMP LDA STA JSM JSM JSM EIR LDA STA RET EREWI INTNI EXECUTION HERE IF NOT AN IMMEDIATE EXECUTE KEY FLAG SET FLAG THAT THIS IS A HARDWARE SIM REWIND LKTMP+ 6 STPRA SET THE PA REWA,I REWIND TAPE ERDSO CHECK FOR HARDWARE ERRORS PO CLEAR THE HARDWARE SIM REWIND FLAG LKTMP+ 6 I ERDSO IS CALLED WHEN THE CASSETTE DRIVERS SOFTWARE ENCOUNTERS AN ERROR THIS ERROR IS LOGGED AS A ONE (SET BIT) AT THE PROPER BIT LOCATION IN ERRWD ERDSO DECODES THE WORD (BIT 15, BIT 14, ETC TO BIT 5) AND THE PROPER ERROR IS DISPLAYED OR SOME OTHER ACTION IS TAKEN.

283 Page 222 02552000 02553000 02554000 02555000 02556000 02557000 02558000 02559000 02560000 02561000 02562000 02563000 02564000 02565000 02566000 02567000 02568000 02569000 02570000 02571000 02572000 02573000 02574000 02575000 02576000 02577000 02578000 02579000 02580000 02581000 02582000 02583000 02584000 02585000 02586000 02587000 02588000 02589000 02590000 02591000 02592000 02593000 02594000 02595000 02596000 02597000 02598000 02599000 02600000 02601000 284 Page 222 Continued 02602000 02603000 02604000 02605000 02606000 02607000 1,568,094 NOTE: IF THIS ROUTINE IS CALLED WITH BITS 0-4 SET OR ERRWD = 0, THE SYSTEM WILL HANG UP OR FAIL 284 1.568 094 285 CASSETTE OPERATING SYSTEM 16347 004135 ERD 50 16350 001763 16351 172404 ERDI 16352 024257 16353 170600 16354 067351 16355 003360 ERD 2 16356 020001 16357 164000 16360 016361 ERADI 16361 067404 16362 067417 16363 067415 16364 067406 16365 067403 16366 067430 16367 067401 16370 067373 16371 067373 16372 067375 16373 140404 ERR 43 16374 032063 16375 001613 ERR 41 16376 172445 16377 10404 16400 032061 16401 140404 16402 032062 ON ENTRY: ERRWD HAS BIT(S) SET CORRESPONDING TO THE ERROR(S) WHICH OCCURED ON EXIT: RETURNS IF FURTHER ACTION MUST BE TAKEN, AS LOADING AN OPTIONAL PARAMETER OTHERWISE THE RETURN IS TO CONTROL SUPERVISOR VIA AERRI TEMPORARIES USED: ERRWD (MRWI+ 5), LDTRS (MRIW+ 4) FLAGA (MRWI) ROUTINES CALLED: AERRI, PTBRA, LDXI D LDB LDA SAM ADB SAL JMP LDA ADA JMP DEF JMP JMP JMP JMP JMP JMP JMP JMP JMP JMP JSM ASC LDA SAM JSM plo O ERRWD ERD 2 MI 1 ERDI ERADD B A,I +I ERR 45 ERDI 1 ERR 47 ERD 59 ERD 14 ERR 65 ERR 42 ERR 43 ERR 43 ERR 41 AERRI,1 1,43 LKTMP+ 6 ERD 21 AERRI,1 GET ERROR WORD SKIP IF BIT 15 SET COUNT IF NO ERROR BIT SET MOVE NEXT BIT TO MSB CONTINUE GET THE JMP TABLE ADDRESS CALCULATE THE OFFSET JUMP THROUGH THE JMP TABLE POWER DOWN, SERVO FAILED.

UNEXPECTED BOT OR EOT BITS 15,13,12 IF THIS IS SET WE GIVE NO ERROR RETURN I CARTRIDGE OUT BIT 14 ASC 1,41 ERR 42 JSM AERRI,I CARTRIDGE PROTECTED BIT II 16403 170202 ERDI 4 16404 140404 ERR 45 ASC RET JSM 1,42 2 AERRI,I BIT 9 IS VERIFY ERROR ERROR-VERIFY HAS FAILED LOAD (,X) EXECUTION OF IDF WITHOUT PARAMETERS OR MRK 285 Page 223 02608000 02609000 02610000 02611000 02612000 02613000 02614000 0 '2615000 02616000 02617000 02618000 02619000 02620000 02621000 02622000 02623000 02624000 02625000 02126000 02627000 02628000 02629000 02630000 02631000 02632000 02633000 02634000 02635000 02636000 02637000 02638000 02639000 02640000 02641000 02642000 02643000 02644000 02645000 02646000 02647000 02648000 02649000 02650000 02651000 02652000 02653000 02654000 02655000 02656000 02657000 02658000 02659000 02660000 02661000 02662000 02663000 286 1,568,094 CASSETTE OPERATING SYSTEM 02664000 02665000 02666000 16405 032065 02667000 16406 055762 ERD 59 02668000 16407 170202 02669000 16410 001701 ERD 20 02670000 02671000 02672000 02673000 02674000 02675000 02676000 02677000 02678000 02679000 02680000 02681000 02682000 02683000 02684000 02685000 02686000 02687000 02688000 02689000 02690000 02691000 02692000 02693000 02694000 02695000 02696000 02697000 02698000 02699000 02700000 02701000 02702000 02703000 02704000 02705000 02706000 02707000 02708000 02709000 02710000 02711000 02712000 02713000 02714000 02715000 02716000 02717000 02718000 02719000 16411 16412 16413 010141 166770 140404 ERR 46 16414 032066 16415 140404 ERR 47 16416 032067 16417 005676 ERDII ASC 1,45 DSZ LDTRS RET 2 LDA RTYPE CPA JMP JSM P 6 PTB RA,I AERRI,I ASC 1,46 WHILE THE TAPE IS LOST BIT 5 COUNT THIS TRY AT LOADING, SEE IF DONE TRY AGAIN IF TYPE IS PROGRAM MUST PATCH BRIDGS PATCH UP LINE BRIDGES AND DO RETURN PARTITION ERROR RECOVERY CYCLE IS COMPLETE PARTITION ERROR, BIT 8 OF ERRWD JSM AERRI,I HEAD READ ERROR BIT 7 ASC 1,47 LDB CRECN 16420 024257 16421 174040 16422 035756 16423 042655 16424 067034 16425 170205 16426 140404 16427 032071 ERR 49 16430 140404 ERR 65 16431 033065 ADB TCB STB JSM JMP RET JSM ASC Ml FLAGA LDXI ERR 48 AERRI,I 1,49 JSM AERR 1,I ASC 1,65 MARK WAS UNSUCCESSFUL, LOAD (,X) BIT e THE (,X) LOAD THE (,X) PARAMETER NO (,X) PRESENT SO GIVE ERROR ENABLE THE INTERRUPT AND EXIT FILE TOO SMALL FILE NOT FOUND, BIT 10 RCMEM RECORDS ON THE CASSETTE THE ENTIRE READ/ WRITE MEMORY INCLUDING SELECTED REGISTERS SYNTAX: L C RCM (FILE #) ON ENTRY: CONTROL IS HERE IF RCM IS ENCOUNTERED BY THE INTERPRETURE THE FILE NUMBER IS OPTIONAL BUT IF PRESENT IT IS ON THE RUNTIME EXECUTION STACK AND IS GOTTEN BY THE "STANDARD PROCEDURE I"' ON EXIT: DUMP COMPLETE UNLESS ERRORS ARE ENCOUNTEREE TEMPORARIES USED: RECTP (MRWI+ 3), SEFLG (MRW 1 I+ 2 ' TVAR 3, SVC, T 22, T 23 ROUTINES CALLED: GTPAR, STPRL, WTRR, BINUI Page 224 286 1,568,094 )RC, 1,568,094 CASSETTE OPERATING SYSTEM 000003 RCMEM 130324 042565 042622 000143 031761 001062 031742 000254 LDA 031736 100327 031737 043607 RCM 3 16447 004324 16450 034016 16451 001735 16452 070540 16453 000301 16454 030017 16455 004162 LDA STA JSM JSM LDA STA LDA STA Pl STA LDA STA JSM LDB 287 R SAVE THE RETURN STACK POINTER ASTK 1, I STORE ON COMPILE STACK GTPAR GET THE FILE NUMBER STPRL SET UP MEMORY RECORD ADDRESSES P 4 RECTP ROMWD GET THE 'ROMS PRESENT ON SYSTEM' TVAR 3 PREPARE TO PUT IT IN THE HEADER T 22 AROMS, T 23 BINUI SET FLAG FOR BINARY I SAVE THE BINARY "PRESENT" LINK UNITIALIZE THE BINARY PROGRAM ASTK 1 THESE GO INTO THE COMPILE STACK STB C SET THE POINTER LDA SVC SAVE REG C (SVC=C) PWC A, I SAVE THE OLD C REGISTER (STILL IN A) LDA AJSMS 33 WORDS, STARTING HERE MUST BE SAVED 070570 RCM 2 070540 076176 042460 001737 130327 as as 001735 030016 070420 164365 INTNI INTN 2 INTEN as STA D LDB M 32 WWD PWC RIB JSM LDA STA A,I A,I RCM 2 WTRR T 23 AROMS, I SET UP THE POINTER SET THIS COUNTER TO ONE LESS THAN THE ABS VALUE OF THE NUMBER OF WORDS TO BE TRANSFERRED WRITE THE RECORD RESTORE THE BINARY LINK THIS ROUTINE ENABLES THE INTERRUPT BEFORE THE CASOS RETURNS CONTROL THIS ROUTINE IS THE LAST ROUTINE EXECUTED BY ANY STATEMENT SERVICE ROUTINE

ON ENTRY: ENTRY AT INTNI IF MUST RESTORE THE C REGISTER AT COMPLETION ENTRY AT INTEN IF NEED ONLY ENABLE INTERRUPT AND RETURN TO INTERPRETURE LDA STA EIR JMP SVC C RESTORE THE C REGISTER AINTX, I LDMEM LOADS THE ENTIRE USER ACCESSABLE READ/ WRITE MEMOR 16432 16433 16434 16435 16436 16437 16440 16441 16442 16443 16444 16445 16446 287 Page 225 02720000 02721000 02722000 02723000 0 0224000 02725000 0228000 02729000 02730000 02731000 02732000 02733000 02734000 02735000 02736000 02737000 02738000 02739000 02740000 02741000 02742000 02743000 02744000 02745000 02746000 02747000 048000 02749000 02750000 02751000 02752000 02753000 02754000 02755000 02756000 02757000 02758000 02759000 02760000 02761000 02762000 02763000 02764000 02765000 02766000 02767000 02768000 02769000 02770000 02771000 02772000 02773000 02774000 02775000 16456 16457 16460 16461 16462 16463 16464 16465 16466 16467 1,568,094 CASSETTE OPERATING SYSTEM SPACE 288 SYNTAX: L C LDM () ON ENTRY: CONTROL HERE IF LDM IS RECOGNIZED BY THE INTERPRETURE THE FILE NUMBER IS GOTTEN FROM THE RUN-TIME EXECUTION STACK BY "STANDARD PROCEDURE #1 DETAILED AT THE START OF THE LISTING TEMPORARIES USED: TI, SVC ROUTINES CALLED: PCALL, STPRL, CHSIZ, RDREC AERR 2, ADSRM, ALDSP LDMEM LDA JSM JSM 000126 031711 001704 005062 073007 LDM 7 077014 170500 LDM 8 174500 055711 067477 02810000 16505 067517 077073 LDM 5 140405 ERR 51 032461 001711 LDM 9 070420 164357 140405 ERR 52 16515 032462 16516 067511 16517 042724 LDM 10 16520 001700 02822000 16521 170040 LDA STA LDA LDB SLA SLB SAR SBR DSZ JMP JMP SLB JSM ASC LDA EIR JMP JSM ASC JMP JSM LDA P 4 PCALL STPRL P 17 TI EX 2 ROMWD LDM 5 E Rt 52 1 1 Tl LDM 7 LDM 10 LDM 8 AERR 2, I 1,51 TI MEMORY IS TYPE 4 PRELIMINARY CALL FOR LOADS SET UP MEMORY LOAD (START AND END ADDRESS) SET COUNTER FOR ROM ID GET THE OLD ROM WORD GET THE NEW ROM WORD SKIP LSB A= O =ROM GONE SKIP IF B= O =ROM GONE LOOK AT THE NEXT BIT SEE IF DONE WITH ROMWD, THERE ARE ALWAYS 2 EXTRA PASSES TO ZERO THE COUNTER BUT THEY ARE ZERO SKIP LSB= O =ROM ABSENT ERROR ROM # T 1 IS PRESENT BUT WAS NOT PRESENT AT RCM ROM ID TO REGISTER A ADSRM, I DISPLAY ROM ID CODE AERR 2, I ERROR ROM #TI IS NOT PRESENT BUTSHOULD BE 1,52 LDM 9 CHSIZ CSIZE TCA ADA STA JSM JSM LDA STA WWD AJSMS MBPTR RDREC ALDSP, I ASTK 1 D B,I 02830000 16531 034003 02831000 16532 070570 SEE IF IT WILL FIT MUST CALC AJSMS-CSIZE AS START OF LOAD IN CASE MEMORY IS LARGER THAN FILE READ THE RECORD DISPLAY I/O BUFFER GET REGISTER R FROM THE COMPILE STACK 288 Page 226 02776000 02777000 02778000 02779000 02780000 02781000 02782000 02783000 02784000 02785000 02786000 02787000 02788000 02789000 02790000 02791000 02792000 02793000 02794000 02795000 02796000 02797000 02798000 02799000 02800000 02801000 02802000 02803000 02804000 02805000 02806000 02807000 02808000 02809000 000143 042710 042622 16470 16471 16472 16473 16474 16475 16476 16477 16500 16501 16502 16503 16504 16506 16507 16510 16511 16512 16513 16514 02811000 02812000 02813000 02814000 02815001 02816000 02817000 02818000 02819000 02820000 02821000 02823000 02824000 02825000 02826000 02827000 02828000 02829000 16522 16523 16524 16525 16526 16527 16530 020301 031706 042635 140433 000324 030017 070571 STB R WWD A, 1 1,568,094 C 3 16533 03173 02833000 16534 004300 16535 034016 16536 004162 16537 16540 16541 16542 070570 LDM 1 I 070540 076176 067464 16543 000254 16544 042710 LDB 02869000 02870000 16545 043602 02871000 16546 005313 16547 16550 16551 16552 16553 16554 16555 16556 16557 16560 174040 020001 172415 043602 LVBN 2 031706 000177 031736 043607 042635 000330 02882000 16561 130327 _SSETTE OPERATING SY Sl EM STA SVC GET THE C REGISTER AND SAVE IT (SVC=C) LDB AJSTK THE REST OF THE WORDS GO HERE AND HIGHER STB C LDB M 32 WWD PWC RIB JMP A, I A,I LDM 1 INTN 1 SET THIS COUNTER TO ONE LESS THAN THE ABS VALUE OF THE NUMBER OF WORDS TO BE TRANSFERED RESTORE THE JSM RETURN SYACK ENABLE THE INTERRUPT AND EXIT LDB IS THE CASSETTE LOAD BINARY PTOGRAMS COMMAND SYNTAX L C LDB () ON ENTRY: CONTROL HERE IF INTERPRETURE RECOGNIZES LDB STATEMENT THE FILE

NUMBER IS ON THE RUN-TIME EXECUTION STACK AND CAN BE GOTTEN BY "STANDARD PROCEEDURE #1 " TEMPORARIES USED: T 22 ROUTINES CALLED: PCALL, BINSZ, RDREC, AERRI, BINUI, ALLOC LDA Pl BINARY PROGRAMS ARE TYPE I JSM PCALL PRELIMINARY CALL FOR OADS PCALL WILL GET THE FILE NUMBER, POSITION THE TAPE, CHECK FOR TYPE = 1 (BINARY) JSM BINSZ LWAM CSIZE + 5 TO A LDB FWBA THIS IS THE FIRST WORD OF THE BINARY AREA TCB ADA SAM JSM STA LDA STA JSM JSM LDA STA B LDB 1 BINSZ MBPTR PO BINARY PROGRAM WILL NOT FIT IN MEMORY T 22 CLEAR THIS FLAG FOR BINARY BINUI UNINITILIZE THE BINARY PROGRAM RDREC READ THE RECORD LWAM GET THE ADDRESS OF THE BINARY PROGRAM LINKS AROMS, I ADD THE BINARY'S ADDRESS TO THE TABLE

Page 227 02832000 02834000 02835000 02836000 02837000 02838000 02839000 02840000 02841000 02842000 02843000 02844000 02845000 02846000 02847000 02848000 02849000 02850000 02851000 02852000 02853000 02854000 02855000 02856000 02857000 02858000 02859000 02860000 02861000 02862000 02863000 02864000 02865000 02866000 02867000 02868000 02872000 02873000 02874000 02875000 02876000 02877000 02878000 02879000 02880000 02881000 289 289 290 1,568,094 290 Page 227 Continued CASSETTE OPERATING SYSTEM 02883000 16562 020143 ADA P 4 POINT AT THE INITIALIZATION ENTRY 02884000 16563 100000 LDA A, I GET THE ADDRESS OF THE INITIALIZATION ROUTINE 02885000 16564 140000 JSM A, I RUN THE INITIALIZATION ROUTINE 02886000 16565 067464 JMP INTNI ENABLE THE INTERRUPT AND EXIT 02887000 16566 001313 LDBI LDA FWBA SEEIFTHEVALUETABLEIS EMPTY 291 Page 228 02888000 16567 01131 02889000 02890000 02891000 02892000 02893000 02894000 02895000 02896000 02897000 02898000 02899000 02900000 02901000 02902000 02903000 02904000 02905000 02906000 02907000 02908000 02909000 02910000 02911000 02912000 92913000 02914000 02915 o 000 oo 02916000 0291700 02918000 02919000 02920000 02921000 02922000 02923000 02924000 02925000 02926000 02927000 02928000 16570 16571 16572 16573 16574 16575 16576 16577 16600 1,568,094 C ASSETTE OPERATING SYSTEM 1 CPA VT 1 IF EMPTY, WE CAN TRY TO ALOCATE SPACE 067573 140404 ERR 54 032464 021700 LDB 2 170040 020140 020330 J 140370 031313 16601 067552 16602 001700 BINSZ 16603 170040 16604 020330 16605 020140 16606 170201 BNSZ 1 JMP JSM ASC ADA TCA ADA ADA JSM STA LDB 2 AERRI,I 1,54 CSIZE P 7 LWAM ALLOC, I FWBA JMP LVBN 2 291 IT IS EMPTY BINARY PROGRAM WILL NOT FIT CALCULATE THE AMOUNT OF MEMORY REQUIRED ALLOW FOR 7 WORD ID TABLE MOVE THE EXECUTION STACK A RETURNS WITH THE FIRST WORD AVAIL.

BINSZ CALCULATES LWAM-CSIZE TO REGISTER A TEMPORARIES USED: NONE ROUTINES CALLED: NONE LDA CSIZE TCA ADA LWAM ADA P 7 RET 1 BINUI IS A ROUTINE TO ALLOW THE BINARY PROGRAM TO "CLEAN UP" AFTER ITSELF WHEN IT IS REMOVED FROM THE SYSTEM AS ON AN RCM OR LDB STATEMENT

16607 16610 16611 16612 16613 02929000 02930000 02931000 02932000 02933000 02934000 02935000 02936000 02937000 02938000 02939000 02940000 02941000 02942000 02943000 100327 BINUI 072476 020141 100000 164000 LDA SZA ADA LDA JMP AROMS, I BNSZ 1 P 6 A,I A,I SEE IF BINARY PRESENT GET THE ADDRESS DO THE UNINITIALIZATION AND RETURN THIS IS THE RECORD PROG AND DATA STATEMENT.

TEMPORARIES USED: RELTH, FLAGA, LWMD RECTP, SEFLG, TVAR 3 ROUTINES CALLED: GTPAR, BMPI, GWTWH, CHNP 2, NGET CALTH, CHNTP CHSEC, ASYER, REGCK, RCFB, AERRI 1,568,094 CASSETTE OPERATING SYSTEM 16614 16615 16616 16617 16620 16621 16622 16623 16624 16625 043715 RCFZ 067631 067620 067625 001277 RCF 4 020254 031706 001756 020144 031743 RCFK 16626 000145 16627 031761 16630 067704 16631 043741 RC Pl I 16632 067704 16633 16634 16635 16636 16637 042565 RCF 000257 031757 000177 031742 16640 042732 16641 067672 16642 16643 16644 16645 16646 042703 035756 035706 172447 042517 16647 140424 16650 16651 16652 16653 16654 16655 16656 16657 16660 16661 16662 16663 16664 16665 16666 16667 16670 16671 067707 064722 031706 RCFJ 042515 067674 067711 067663 004000 100001 050053 020001 031743 RCP 6 042732 RCP 9 067676 040751 067713 140404 ERR 58 032470 JSM JMP JMP JMP LDA ADA STA LDA ADA STA LDA STA JMP JSM JMP REGCK RC Pl 1 RCF 4 RCFK ENDS Pl MBPTR FLAGA P 3 LWMD P 2 RECTP RCP 10 RCF 8 RCP 10 IS THIS AN R REGISTER? NOT AN R REGISTER DONE ONLY ONE R REGISTER LEGAL SET OF TWO R REGISTERS ONLY ONE R REG ENTERED DATA IS TYPE 2 SIMPLE VARIABLE, ARRAY OR STRING DONE THIS IS THE ENTRY TO THE CODE FOR THE RCF STATEMENT

JSM LDA STA LDA STA GTPAR Ml RELTH PO TVAR 3 JSM BM Pl JMP RC Pl JSM STB STB SAM JSM GWTWH FLAGA MBPTR RCFZ CHNP 2 JSM ASYER,I JMP JMP STA JSM JMP JMP JMP LDB LDA AND ADA STA JSM JMP JSM JMP JSM ASC RCP 2 ERLNF MBPTR CHNTP RCP 4 RCP 5 RCP 6 A B,I B 177 B LWMD BM Pl RCP 7 NGET RCP 8 AERR 1,I 1,58 GET THE FILE NUMBER SET FIRST FLAG CLEAR THIS VARIABLE FOR EX 2 (STRING COUNT) MOVE THE STACK POINTER BY ONE NO MORE PARAMETERS MUST BR PROGRAM RECORD GET THE WHAT AND WHERE WORD SAVE THE 'WHERE' WORD SKIP IF THE PARAMETER IS A VARIABLE CHECK OUT THIS PARAMETER IF HERE WE DO NOT HAVE A VARIABLE SO RECORD THE USER PROGRAM NO MORE PARAMETERS MAY NEVER HAPPEN NON-NUMERIC RETURN COULD NOT FIND LINE ADDRESS THIS IS THE START OF THE RECORD NO MORE PARAMETERS A NON-NUMERIC PARAMETER AS 'SE' LINE ADDRESS COULD NOT BE FOUND, ADDRESS SET TO END$ B IS THE ADDRESS OF LN 2 GET THE LINE BRIDGE CLEAR THE HIGH ORDER BITS MAKE ADDRESS OF NEXT LINE BRIDGE THIS IS THE LAST ADDRESS TO BE RECORDED MOVE FA Pl NO MORE PARAMETERS-DONE SEE IF IT IS A NUMBER, IT SHOULD NOT BE OK COULD BE "SE" OR "DB" INVALID OR MISSING 'SE' Page 229 02944000 02945000 02946000 02947000 02948000 02949000 02950000 02951000 02952000 02953000 02954000 02955000 02956000 02957000 02958000 02959000 02960000 02961000 02962000 02963000 02964000 02965000 02966000 02967000 02968000 02969000 02970000 02971000 02972000 02973000 02974000 02975000 02976000 02977000 02978000 02979000 02980000 02981000 02982000 02983000 02984000 02985000 02986000 02987000 02988000 02989000 02990000 02991000 02992000 02993000 02994000 02995000 02996000 02997000 02998000 02999000 292 292 1,568,094CASSETTE OPERATING SYSTEM 03000000 16672 001307 RC Pl 03001000 16673 031706 001277 031743 000141 031761 001760 072003 RCP 4 RCP 7 03008000 16702 001315 LDA FWUP STA MBPTR LDA STA LDA STA LDA RZA END$ LWMD P 6 RECTP SEFLG RCP 10 LDA STYFG 031760 042626 RCP 10 042460 067464 042541 RCP 2 067672 042541 RCP 5 067674 042541 RCP 8 067676 043735 REGCK 170201 042732 170202 042703 001756 170040 020001 172003 140404 ERR 55 032465 043735 RCF 5 067726 000001 020144 170203 STA JSM JSM JMP JSM JMP JSM JMP JSM JMP SEFLG CALTH WTRR INTN 1 CHSEC RC Pl CHSEC RCP 4 CHSEC RCP 7 THIS IS THE STARTING ADDRESS OF THE RECORD SET UP END ADDRESS USER'S PROGRAM IS TYPE 6 SEE IF CALCULATOR ALREADY SECURE IF NOT ZERO, DO NOT USE SYSTEM SECURE FLAG IF "SE" NOT REQUESTED USE THIS AS THE SECURITY CALCULATE RECORD LENGTH WRITE THE RECORD ENABLE THE INTERRUPT AND EXIT CHECK FOR SECURITY REQUEST CHECK TO SEE IF SECURE REQUEST CHECK SECURITY REQUEST THIS ROUTINE CHECKS TO SEE IF THE PARAMETER ENTERED WAS AN R REGISTER ON EXIT: RET I = PARAMETER WAS NOT AN R REGISTER RET 2 = NO MORE PARAMETERS RET 3 = ANOTHER R REGISTER A = ADDRESS OF THE LAST WORD OF THIS R REGISTER TEMPORARIES USED: FLAGA (MRW 1) ROUTINES CALLED: REG, BMPI, GWTWH JSM RET JSM RET JSM LDA TCA ADA SAP JSM ASC JSM JMP LDA ADA RET REG.

1 BM Pl 2 GWTWH FLAGA B RCF 5 AERRI,I 1,55 REG.

ERR 55 B P 3 IS THIS AN R REGISTER? NOT AN R REGISTER MOVE THE STACK POINTER BY ONE NO MORE PARAMETERS GET THE WHAT AND WHERE WORDS IS B < FLAGA ? SKIP IF B < FLAGA ILLEGAL PARAMETER IS THIS AN R REGISTER? NOT AN R REGISTER YES AN R REGISTER REG CHECKS FOR THIS ENTRY BEING AN R REGISTER Page 230 03002000 03003000 03004000 03005000 03006000 03007000 16674 16675 16676 16677 16700 16701 16703 16704 16705 16706 16707 16710 16711 16712 16713 16714 16715 16716 16717 16720 16721 16722 16723 16724 16725 16726 16727 16730 16731 16732 16733 16734 03009000 03010000 03011000 03012000 03013000 03014000 03015000 03016000 03017000 03018000 03019000 03020000 03021000 03022000 03023000 03024000 03025000 03026000 03027000 03028000 03029000 03030000 03031000 03032000 03033000 03034000 03035000 03036000 03037000 03038000 03039000 03040000 03041000 03042000 03043000 03044000 03045000 03046000 03047000 03048000 03049000 03050000 03051000 03052000 03053000 03054000 03055000 293 293 1,568,094 CASSETTE OPERATING SYSTEM 16735 042703 16736 16737 16740 010270 170202 170201 REG.

REG.

16741 000305 RCF 8 16742 031744 16743 000145 16744 031761 16745 101272 RCF 88 16746 172402 16747 067726 16750 052750 RCF 6 16751 010267 16752 066020 as as as as as as as 16741 00 305 RCF 16742 031744 16743 000145 16744 031761 16745 10127 RCF 8 16746 172402 s 16750 052750 RCF 6 16751 0310267 16752 066020 1675 05750 RCF 16751 01026 16752 06602 16753 16754 16755 16756 16757 16760 16761 16762 16763 042452 067775 045742 004144 035761 001272 020142 1000000 005744 03110000 16764 071402 294 JSM GWTWH GET THE WHAT WORD AND ABSOLUTE ADDRESS CPA FVRRA RET 2 RET I IS IT AN R-REGISTER? YES NO THIS ROUTINE CHECKS FOR S VAR, ARRAYS, OR STRINGS ENTERED IN A RCF OR LDF STATEMENT.

ON ENTRY: ONLY SIMPLE VARIABLES, ARRAY ELEMENTS, ENTIRE ARRAYS OR ENTIRE STRINGS ARE ALLOWED IF ANYTHING ELSE ERROR 55 IS GIVEN ON EXIT: THE NECESSARY CHECKS HAVE BEEN MADE AND THE DRIVER PARAMETERS ARE SET UP TO LOAD TEMPORARIES USED: RELTH (MRWI+I), FLAGA (MRW 1), LWMD((OPI+I) TVAR 1, TVAR 3, RECTP ROUTINES CALLED: BMP 1, GWTWH, AERRI, CTYPE LDA STA LDA STA LDA SAM JMP AND CPA JMP ASTAK TVAR 1 P 2 RECTP FAP,I RCF 6 ERR 55 SATMP FVRWM RCFD SET THE POINTER TO THE COMPILE STACK DATA IS TYPE 2 MUST CHECK FOR VARIABLE INVALID DATA LIST ON RCF OR LDF CLEAR OUT THE LINK BITS IS THIS A S VAR OR ARRAY ELEMENT? HERE IF SIMPLE VARIABLE OR ARRAY ELEMENT THIS CODE IS FOR ARRAYS AND STRINGS JSM JMP ISZ LDB STB CTYPE RCF 3 TVAR 3 P 3 RECTP LDA FA Pl ADA P 5 LDA A,I LDB TVAR 1 XFR 3 03111000 CHECK THE TYPE OF THIS ENTRY THIS ENTRY NOT A STRING THIS IS A STRING SO COUNT IT SET TYPE TO 'MIXED DATA' IF STRING ENCOUNTERED GET THE "WHAT" WORD POINT AT THE STRING ADDRESS WORD GET THE POINTER TO THE COMPILE STACK TRANSFER THE FIRST THREE WORDS OF THE STRING'S ORGANIZATION DATA 294 Page 231 03056000 03057000 03058000 03059000 03060000 03061000 03062000 03063000 03064000 03065000 03066000 03067000 03068000 03069000 03070000 03071000 03072000 03073000 03074000 03075000 03076000 03077000 03078000 03079000 03080000 03081000 03082000 03083000 03084000 03085000 03086000 03087000 03088000 03089000 03090000 03091000 03092000 03093000 03094000 03095000 03096000 03097000 03098000 03099000 03100000 03101000 03102000 03103000 03104000 03105000 03106000 03107000 03108000 03109000 295 1,568,094 CASSETTE OPERATING SYSTEM 16765 16766 16767 16770 16771 16772 16773 16774 16775 16776 16777 17000 024144 035744 104000 024000 045757 066013 024257 066010 010171 RCF 3 066000 067726 001272 RCF 8 03124000 17001 020144 03125000 17002 100000 17003 17004 17005 170040 020254 020001 17006 045757 17007 066012 17010 035743 RCF 11 17011 066016 17012 024254 RCFI 17013 015706 RCF 10 17014 066016 17015 066036 17016 031706 RCFH 17017 066025 17020 045757 RCFD 17021 066032 17022 001756 17023 020144 17024 031743 17025 042732 RCFA 17026 170201 17027 042703 17030 035756 17031 067745 17032 001756 RCF 2 17033 17034 17035 17036 17037 17040 17041 020143 011706 066040 140404 ERR 56 032466 020150 RCF 7 066016 ADB STB LDB ADB ISZ JMP ADB JMP CPA JMP JMP LDA P 3 TVARI A,I A RELTH RCF 10 Ml RCF 1 I 1 ARRAY RCF 8 ERR 55 FAPI 1 ADA P 3 LDA A,I TCA ADA Pl ADA B ISZ JMP STB JMP ADB CPB JMP JMP STA JMP ISZ JMP LDA ADA STA JSM RET JSM STB JMP LDA ADA CPA JMP JSM ASC ADA JMP RELTH RCF 1 LWMD RCFH Pl MBPTR RCFH ERR 56 MBPTR RCFA RELTH RCF 2 FLAGA P 3 LWMD BM Pl 1 GWTWH FLAGA RCFBB FLAGA P 4 MBPTR RCF 7 AERR 1,I 1,56 M 4 RCFH UPDATE THE POINTER GET THE STRING LENGTH CALCULATE THE LAST ADDRESS + 1 IS THIS THE FIRST ENTRY? NO, NOT THE FIRST ENTRY YES THE FIRST ENTRY CONTINUE IF HERE WE MUST HAVE AN ARRAY UNKNOWN JUNK ENTERED MUST CALCULATE THE LAST ADDRESS TO BE LOADED POINT A AT THE NO OF WORDS TO BE RECORDED GET THE NO OF WORDS TO BE RECORDED B HAS THE ENDING ADDRESS CALCULATE THE ADDRESS OF THE START OF THE RECO IS THIS THE FIRST DNTRY NO THIS IS THE LAST WORD TO BE RECORDEL SEE IF CONTIGUOUS NOT CONTIGUOUS ERROR IS THIS THE FIRST ENTRY? NOT THE FIRST ENTRY YES FIRST ENTRY MOVE THE STACK POINTER BY ONE NO MORE PARAMETERS GET THE WHAT AND WHERE WORDS SAVE THIS ADDRESS HERE IF NOT THE FIRST S VARIABLE ENTRY CHECK FOR CONTIGUITY NOT CONTIGUOUS ERROR UPDATE MBPTR LDP IS THE CASSETTE LOAD PROGRAMS STATEMENT, IT WILL

CAUSE THE LOADED PROGRAM TO RUN AFTER LOADING TEMPORARIES USED: SEE LDF STATEMENT

ROUTINES CALLED: SEE LDF STATEMENT

295 Page 232 03112000 03113000 03114000 03115000 03116000 03117000 03118000 03119000 03120000 03121000 03122000 03123000 03126000 03127000 03128000 03129000 03130000 03131000 03132000 03133000 03134000 03135000 03136000 03137000 03138000 03139000 03140000 03141000 03142000 03143000 03144000 03145000 03146000 03147000 03148000 03149000 03150000 03151000 03152000 03153000 0315400 03155000 03156000 03157000 03158000 03159000 03160000 03161000 03162000 03163000 03164000 03165000 03166000 03167000 1,568,094 CASSETTE OPERATING SYSTEM 03168000 03169000 03170000 03171000 03172000 03173000 03174000 03175000 03176000 03177000 03178000 03179000 03180000 03181000 03182000 03183000 03184000 03185000 03186000 03187000 03188000 03189000 03190000 03191000 03192000 03193000 03194000 17042 17043 17044 17045 17046 17047 17050 000254 LD Pl 031761 042565 140605 000141 042714 066206 LDA STA JSM JSM LDA JSM JMP Pl RECTP GTPAR ACHST,I P 6 CHT Pl LDP SET FLAG TO INDICATE THAT THE COMMAND IS A LOAD NOT A LINK FIND THE FILE FILE TYPE MUST BE A PROGRAM IT IS PROGRAM LDF IS THE CASSETTE LOAD FILE STATEMENT, FOR PROGRAMS

AND DATA.

TEMPORARIES USED: RELTH, FLAGA, LWMD ROUTINES CALLED: GTPAR, ACHST, CHTP 1, BMPI, GWTWH.

REGCK, RRMAX NEWSZ, CALTH, RDREC, PRGLD, CHSIZ, AERR CTYPE CKKBE, CHNT 3, ACOUN FIRST CHECK FILE TYPE MUST BE:6 = USER'S PROGRAM 2 = NUMERIC DATA 3 = MIXED STRING AND NUMI 03195000 17051 042565 LDF 03196000 17052 000257 03197000 17053 031757 03198000 17054 140605 03199000 17055 001701 03200000 17056 010141 03201000 17057 066202 03202000 17060 010145 03203000 17061 066064 03204000 17062 000144 03205000 17063 042714 03206000 03207000 LOAD 03208000 03209000 17064 042732 LDF 7 03210000 17065 066120 03211000 17066 042703 03212000 17067 035756 03213000 17070 035706 03214000 17071 043715 03215000 17072 066100 03216000 17073 066075 03217000 17074 066131 03218000 17075 042436 LDF 6 03219000 03220000 17076 042646 03221000 17077 066131 03222000 17100 043741 LDF 27 JSM LDA STA JSM LDA CPA JMP CPA JMP LDA JSM GTPAR Ml RELTH ACHST,I RTYPE P 6 LDPX P 2 LDF 7 P 3 CHTP 1 I GET THE FILE NUMBER THIS MARKS THE FACT THAT WE HAVE ENTERED THIS ROUTINE SEE WHICH TYPE RECORD THIS IS A PROGRAM FILE? YES A PROGRAM FILE IS THIS A NUMERIC DATA FILE? YES A NUMERIC DATA FILE IS THIS A MIXED DATA FILE? CHECK THE TYPE DATA BEGINS HERE JSM JMP JSM STB STB JSM JMP JMP BM Pl LDF 4 GWTWH FLAGA MBPTR REGCK LDF 27 LDF 6 MOVE THE STACK POINTER BY ONE NO VARIABLES ENTERED LOAD RO ON GET THE WHAT AND WHERE WORDS SAVE THE ADDRESS SEE IF THIS IS AN R REG NOT AN R-REGISTER NO MORE PARAMETERS ONLY ONE R-REG ENTERED JMP LDF 5 LOAD THIS JSM RRMAX RESET THE RMAX POINTER, ONLY ONE R-REG.

ENTERED, LOAD FROM HERE ON JSM JMP JSM NEWSZ LDF 5 RCFB 03223000 17101 042626 TAKE CARE OR S VARIABLES, ARRAYS AND STRINGS CALCULATE THE LENGTH OF THF RECORE Page 233 296 296 JSM CALTH 1,568,094 CASSETTE OPERATING SYSTEM JSM LDB CPB 17102 042724 17103 005701 17104 014144 03227000 17105 066114 03228000 17106 001700 03229000 17107 170040 03230000 17110 021743 03231000 17111 020254 17112 031706 17113 066134 07114 010177 LDF 8 17115 066146 17116 140404 ERRSA 17117 051460 17120 001701 LDF 4 17121 020146 17122 072074 17123 001277 17124 020254 17125 031706 17126 042436 17127 001263 17130 020257 17131 031743 17132 042626 17133 042724 LDF 5 03250000 17134 042646 LDF 2 17135 031743 CHSIZ RTYPE P 3 JMP LDF 8 LDA CSIZE TCA ADA LWMD ADA Pl STA JMP CPA JMP JSM ASC LDA ADA RZA LDA ADA STA JSM LDA ADA STA JSM JSM MBPTR LDF 2 PO LDF 9 AERRI,I 1,SO RTYPE M 2 ERRSA ENDS Pl MBPTR RRMAX A Pl Ml LWMD CALTH CHSIZ JSM NEWSZ STA LWMD 17136 005706 QUMRK LDB 17137 002751 QSTM 1LDA 17140 071403 XFR 17141 024052 ADB 17142 001743 LDA 17143 170040 TCA 17144 020001 ADA 17145 172472 SAM 17146 042635 LDF 9JSM 17147 000305 LDA 17150 031744 17151 140610 17152 042732 LDP 31 17153 066176 17154 042452 17155 066152 17156 055704 17157 006160 17160 001272 17161 020142 17162 100000 17163 004144 17164 035711 17165 104000 LDP 32 17166 020254 MBPTR QMRKS 4 P 128 LWMD B QSTMI RDREC ASTAK STA TVAR 1 JSM ACOUN,I JSM BM Pl JMP LDF 30 JSM CTYPE JMP LDP 31 DSZ EX 2 JMP + 1 LDA FA Pl ADA P 5 LDA A,I LDB P 3 STB TI LDB A,I ADA Pl 297 CHECK TO SEE IF THE RECORD WILL FIT IF THE FILE TYPE IS MIXED DATA, THE CSIZE MUST MUST EQUAL THE ROOM IN MEMORY THIS IS BEING DONE TO FORCE A SHORT DATA FILE TO BE LOADED INTO A LARGER ARRAY, WITH THE FIRST ELEMENTS ALIGNING PROPERLY IF A = O WE HAVE AN EXACT FIT OK, CONTINUE ILLEGAL SET OF STRINGS IN DATA LIST MUST BE SURE THE DATA TO BE LOADED INTO R-REGISTERS IS NUMERIC INTO NOT NUMERIC IF SKIP STRING ONLY ONE REG PARAMETER OR NO PARAMETERS ON LOAD COMMAND SO LOAD AT R O ON RESET THE RMAX POINTER GET THE TOP OF THE EXECUTION STACK CALCULATE THE EXPECTED LENGTH SEE IF THE MEMORY SPACR IS LARGE ENOUGH MUST SET LWMD SO THAT ONLY CSIZE SECTION OF ARRAY HAS "???????" INSERTED GET THE LOAD POINT GET THE ADDRESS OF THE QUESTION WRITE THEM IN 'MARKS ADJUST TO NEXT PARTITION SEE IF WE ARE DONE SKIP IF WE KEEP GOING READ THE RECORD GET THE ADDRESS OF THE TOP OF THE COMPILE STACK RESET FA Pl IN THE EXECUTION STACK POINT AT FILE NUMBER (IF ANY) GET THE NEXT ENTRY DONE-NO MORE ENTRIES WHAT TYPE IS THIS ENTRY? TYPE # STRING TYPE = STRING, COUNT IT ALLOW FOR SKIP GET THE "WHAT" WORD ADDRESS POINT AT ADDRESS OF STRING GET ADDRESS SET UP COUNTER GET ONE STRING ID WORD 297 Page 234 03224000 03225000 03226000 03232000 03233000 03234000 03235000 03236000 03237000 03238000 03239000 03240000 03241000 03242000 03243000 03244000 03245000 03246000 03247000 03248000 03249000 03251000 03252000 03253000 03254000 03255000 03256000 03257000 032580 oo 00 03259000 03260000 03261000 03262000 03263000 03264000 03265000 03266000 03267000 03268000 03269000 03270000 03271000 03272000 03273000 03274000 03275000 03276000 03277000 03278000 03279000 298 1,568,094 298 Page 235 03280000 17167 115744 03281000 17170 066172 03282000 17171 066116 17172 045744 17173 055711 17174 066165 17175 066152 17176 001704 LDF 30 17177 010177 17200 067464 17201 066116 17202 004177 LDPX 17203 042736 17204 004263 17205 035761 17206 042427 LDP 17207 042515 LDP 18 17210 066246 17211 067726 17212 066242 17213 031706 LDP 19 17214 031766 17215 042515 17216 066251 17217 067726 17220 066221 17221 042270 17222 140513 17223 066262 17224 031766 17225 001761 17226 072411 17227 073426 17230 140360 LDF 14 17231 000145 LDFI 5 17232 031257 17233 005766 17234 035264 17235 000274 CASSETTE OPERATING SYSTEM CPB TVARI,I DOES THIS NEW O D WORD COMP WITH THAT EXPECTED JMP + 2 JMP ERRSA ISZ TVAR 1 DSZ TI JMP LDP 32 JMP LDP 31 LDA EX 2 CPA PO JMP INTN 1 JMP ERRSA YES NO ERROR, THIS FILE CONTAINS AN IMPRIPER STRING NOT DONE YET DONE WITH THIS STRING ARE ALL STRINGS DONE ON THIS FILE? YES, DONE ERROR THIS FILE CONTAINS AN IMPROPER STRING LOAD DATA ENDS HERE LOAD PROGRAMMING BEGINS HERE ROUTINES CALLED ONLY BY PROG LOAD CODE:

AFLNA, ARSGT, CLRDB, CHNTP, ACNIN, AERCS, ASSLN TEMPORARIES USED: RECTP, TVAR 2 LDB JSM LDB STB JSM JSM JMP JMP JMP STA STA JSM JMP JMP JMP JSM JSM JMP STA LDA SZA RLA JSM LDA STA LDB STB LDA PO CKKBE FLAG RECTP STVFY CHNTP LDP 10 ERR 55 LDP 51 MBPTR TVAR 2 CHNTP LD Pl 1 ERR 55 + 1 PRGLD AFLNA,I ERR 61 TVAR 2 RECTP LDF 16 LDP 41 ARSGT,I P 2 CSTAT TVAR 2 LEND AAEOL SEE IF AN LDF FROM KEYBOARD YES A RUNNING PROGRAM, SET FLAG THIS FLAG DIST LDP/LDF (PROG)/LDF (KEYBRD) MUST CHECK IF THE STATE IS LEGAL CHECK THE NEXT PARAMETER NO MORE PARAMETERS NON-NUMERIC PARAMETER ENCOUNTERED LINE ADDRESS NOT FOUND START LOADING HERE EXECUTE FROM HERE POSSIBLY GET THE STARTING LINE NUMBER NO STARTING LINE NUMBER NON-NUMERIC PARAMETER COULD NOT FIND LINE'S ADDRESS LOAD THE PROGRAM FIND THE LINE'S ADDRESS OF LINE IN TMP 7 ERROR LINE NOT FOUND SAVE THIS ADDRESS FROR THE RUN SEE IF AN LDF FROM PROGRAM SKIP IF AN LDF FROM KEYBOARD LDP IF SKIP-DO A RUN OPERATION RESET THE HS GTO ADDRESSES SET THE STATE TO "RUNNING PROGRAM" THIS IS THE "RUN" POINT SET THE CONTINUE POINT FOR INTERP.

SET ADDRESS OF EOL FOR INTERPRETU RE JMP INTN 2 THIS WILL LOAD A INTO C 03283000 03284000 03285000 03286000 03287000 03288000 03289000 03290000 03291000 03292000 03293000 03294000 03295000 03296000 03297000 03298000 03299000 03300000 03301000 03302000 03303000 03304000 03305000 03306000 03307000 03308000 03309000 03310000 03311000 03312000 03313000 03314000 03315000 03316000 03317000 03318000 03319000 03320000 03321000 03322000 03323000 03324000 03325000 03326000 03327000 03328000 03329000 03330000 03331000 03332000 03333000 03334000 298 1,568,094 298 03335000 17236 067465 1,568,094 CASSETTE OPERATING SYSTEM 17237 042264 LDF 16 17240 140425 17241 066231 17242 024254 LDP 51 17243 015233 17244 066213 17245 064722 17246 001307 LDP 10 17247 031706 17250 031766 17251 042270 LDPII 17252 001761 17253 072404 17254 172454 LDFI 3 17255 140421 LDP 41 17256 066231 17257 042264 LDF 18 17260 140514 17261 067464 17262 140404 ERR 61 17263 033061 17264 17265 17266 17267 001232 CLRDB 050151 031232 170201 17270 001761 17271 172004 17272 000254 17273 031063 PRGLD JSM CLRDB JSM ACNIN,I JMP LDF 15 ADB Pl CPB TMP 7 JMP LDP 19 JMP ERLNF LDA FWUP STA MBPTR STA TVAR 2 JSM PRGLD LDA RECTP SZA LDFI 8 SAM LDF 14 JSM AERCS,I JMP LDF 15 JSM CLRDB JSM ASLLN,I JMP INTNI JSM AERRI,I ASC 1,61 CLEAR THE RUN BIT OF CFLAG DO CONTINUE INITIALIZATION DO A CONTINUE B HAS LAST LINE NUMBER OF PROGRAM IS B WITHIN ONE OF LINE NUMBER IN TMP 7 ? YES SO CONTINUE BAD LINE NUMBER THIS IS THE LOAD POINT THIS IS THE EXECUTION POINT LOAD THE PROGRAM DO WE HAVE AN LDF FROM KEYBOARD SKIP IF YES IF THIS IS AN LDP OR AN LDF FROM KEYBOARD, SKIP IFLDF FROM KEYBOARD INITIALIZE THE RUN CLEAR THE "RUN" BIT OF CFLAG RESET LNO DONE, RETURN LINE NOT FOUND IGNORE LINE NUMBER IN DISPLAY CLRDB CLEARS THE "RUN" BIT OF CFLAG LDA CFLAG AND M 5 STA CFLAG RET 1 THE BIT IN QUESTION IS BIT 2 PRGLD LOADS USER'S PROGRAMMING ON ENTRY: MBPTR SET UP; TAPE POSITIONED ON EXIT: USER'S PROGRAMMING IS LOADED IF NO ERRORS OCCURRED TEMPORARIES USED: FLAGA, RECTP, TVARI ROUTINES CALLED: RDREC, AZRWM, AMPML, SSCHK, AERRI, AERAV, NEWSZ, AMPUP, ASSLN LDA RECTP SAP PRGI 7 LDA Pl STA NPROG IS THIS AN LDF FROM PROGRAM SKIP IF NOT LDF FROM PROGRAM SET THIS FOR JUMP THROUGH LOADL TO ALERT ROMS 299 Page 236 299 03336000 03337000 03338000 03339000 03340000 03341000 03342000 03343000 03344000 03345000 03346000 03347000 03348000 03349000 03350000 03351000 03352000 03353000 03354000 03355000 03356000 03357000 03358000 03359000 03360000 03361000 03362000 03363000 03364000 03365000 03366000 03367000 03368000 03369000 03370000 03371000 03372000 03373000 03374000 03375000 03376000 03377000 03378000 03379000 03380000 03381000 03382000 03383000 03384000 03385000 03386000 03387000 03388000 03389000 03390000 03391000 1,568,094 CASSETTE OPERATING SYSTEM 042376 074560 PRGI 7 010053 066302 140404 ERR 50 032460 101706 PRGL 7 050215 031756 001761 073002 140472 042646 PRG 13 170040 021277 172012 042646 005277 174040 025310 020001 030017 005277 140465 066333 001277 PRG 11 020254 030016 042646 034017 140466 005277 PRG 15 001706 140471 000177 031744 001706 011307 066345 001315 072003 001703 PRGL 3 031315 042635 PRGL 4 101277 PRG 16 050167 JSM WBC CPA JMP JSM ASC LDA AND STA LDA SLA JSM JSM TCA ADA SAP JSM LDB TCB ADB ADA STA LDB JSM JMP LDA ADA STA JSM STB JSM LDB LDA JSM LDA STA LDA CPA JMP LDA RZA LDA STA JSM LDA AND SSCHK CHECK FOR GSB OVERLAYS AND JMP LOADL A,I MUST NOT ALLOW ANY STATEMENTS

AFTER LDF B 177 SINCE THEY WILL NOT BE EXECUTED PRGL 7 AERRI,I 1,50 MBPTR,I GET THE BRIDGE THAT NEEDS TO BE CHANGED LATER BXCMM CLEAR LOW ORDER BITS, TRACE BIT AND STOP BIT FLAGA SAVE THE BRIDGE HALF RECTP IF LDP DO ERASE VARIABLES PRG 13 AERAV,I ERASETHEVARIABLES NEWSZ CALCULATE MBPTR + CSIZE -1 SEE IF WENEEDTO MOVETHE R-REGISTERS ENDS BY CHECKING IF MBPTR + CSIZE-1-> ENDS PRG 11 I SKIP IF WE MOVE THE R-REGISTERS LOWER NEWSZ CALC MBPTR+CSIZE 1 -> A ENDS CALC (MBPTR+CSIZE-I)+(RMAX-END$) AS NEW RMAX RMAX B D ENDS AND ENDS AS THE LAST WORD TO BE MOVED AMPUP,I MOVE THE R-REGISTERS HIGHER, RESET ENDS, RMAX PRG 15 ENDS MUST MOVE R-REG LOWER Pl C NEWSZ D AMPML,I MOVE R-REG LOWER, RESET ENDS, RMAX ENDS THIS IS THE END OF THE LOAD MBPTR SET START AND END ADDRESSES AZRWM,I ZERO THIS AREA PO SET THIS TO DETECT PARTITION ERROR TVAR 1 MBPTR SEE IF THE SECURITY FLAG NEEDS UPDATING FWUP PRGL 3 UPDATE SECURITY FLAG STYFG IS SECURE? PRGL 4 SKIP IF CALCULATOR IS SECURE ALREADY EXISF UPDATE THE SECURITY FLAG STYFG RDREC READ THE RECORD END$,I MAKE SURE THE LAST LINE B RIDGE IS SET RIGHT M 128 CLEAR LOW ORDER BITS (NO PROG.

BELOW) AND SAVE THE STOP BIT 300 Page 237 300 17274 17275 17276 17277 17300 17301 17302 17303 17304 17305 17306 17307 17310 17311 17312 17313 17314 17315 17316 17317 17320 17321 17322 17323 17324 17325 17326 17327 17330 17331 17332 17333 17334 17335 17336 17337 17340 17341 17342 17343 17344 17345 17346 17347 17350 17351 03392000 03393000 03394000 03395000 03396000 03397000 03398000 03399000 03400000 03401000 03402000 03403000 03404000 03405000 03406000 03407000 03408000 03409000 03410000 03411000 03412000 03413000 03414000 03415000 03416000 03417000 03418000 03419000 03420000 03421000 03422000 03423000 03424000 03425000 03426000 03427000 03428000 03429000 03430000 03431000 03432000 03433000 03434000 03435000 03436000 03437000 03438000 03439000 301 Page 237 Continued 1,568,094 CASSETTE OPERATING SYSTEM 03440000 17352 131277 03441000 17353 101706 03442000 17354 050250 03443000 17355 061756 03444000 17356 131706 03445000 03446000 03447000 STA END$,I LDA MBPTR,I AND BM 377 1 OR FLAGA STA MBPTR,I RESTORE THE LINE BRIDGE GET NEW LINE BRIDGE CLEAR HIGH ORDER BITS COMBINE THE BRIDGE SECTIONS RESTORE THE CORRECTED LINE BRIDGE THIS CODE IS TO CLEAR OUT THE TRACE AND STOP BITS 1,568,094 CASSETTE OPERATING SYSTEM 03448000 17357 005704 03449000 17360 077412 03450000 17361 005706 03451000 03452000 03453000 03454000 03455000 03456000 03457000 03458000 03459000 03460000 03461000 03462000 03463000 03464000 03465000 03466000 03467000 03468000 03469000 03470000 03471000 03472000 03473000 03474000 03475000 03476000 03477000 03478000 03479000 03480000 03481000 03482000 03483000 03484000 03485000 03486000 03487000 03488000 03489000 02390000 03491000 03492000 03493000 03494000 03495000 03496000 03497000 03498000 03499000 03500000 03501000 03502000 02503000 17362 17363 17364 17365 17366 17367 17370 17371 17372 17373 17374 17375 LDB EX 2 RLB PRGL 5 LDB MBPTR 100001 PRGL 6 050213 130001 015277 066372 050053 024000 066362 055744 PRGL 5 170201 140514 067413 PRG 10 LDA AND STA CPB JMP AND ADB JMP DSZ RET JSM JMP B,I TMASK B,I ENDS PRGL 5 B 177 A PRGL 6 TVAR 1 1 ASLLN,I ERR 46 GET THE CLEAR-SAVE DEBUG BITS FLAG IF THE BIT IS SET KEEP THE DEBUG BITS START HERE TO CLEAR OUT THE DEBUG BITS GETTHE LINE BRIDGE MASK OFF THE TRACE AND STOP BITS RESTORETHE LINE BRIDGE ARE WE DONE WITH PROGRAM? YES DONE GET THE BRIDGE'S LINK DOWN TO CALC.

THE NEXT LINE'S ADDRESS CONTINUE IF TVAR 1 = I AT THIS POINT, A PARTITION ERROR HAS OCCURED RESET LNO PARTITION ERROR IN USER'S PROGRAM RECOVERY SSCHK CHECKS THROUGH THE GSB STACK FOR THE RETURNS IS NPROG = 1 IT IS TO CHECK FOR GSB RETURN OVERLAYS IF THE PRESENT FILE IS LOADED OVER THE CURRENT PROGRAM IF AN OVERLAY CONDITION IS ENCOUNTERED, ERROR 63 IS GIVEN IF NPROG = O IS TO ADJUST THE RETURNS ON THE GSB STACK BY THE OFFSETINTVAR 1 TEMPORARIES USED: TVAR 1 ROUTINES CALLED: LNKSB 17376 17377 17400 17401 17402 17403 17404 17405 17406 17407 17410 17411 17412 17413 17414 17415 17416 17417 17420 17421 17422 001261 SSCHK 104000 SSCH 3 014257 066764 020144 104000 014334 066423 055063 066417 045063 176601 174040 025706 176007 140404 ERR 63 033063 045063 SSCH 2 066421 025744 134000 LDA LDB CPB JMP ADA LDB CPB JMP DSZ JMP ISZ SBM TCB ADB SBP JSM ASC ISZ JMP ADB STB AP 3 A,I Ml LNKSB P 3 A,I ADPO SSCH 1 NPROG SSCH 2 NPROG + I,C MBPTR SSCH 1 AERRI,I 1,63 NPROG + 1 TVAR 1 A,I GET THE TOP OF THE STACK GET THE OLD AP 2 IF THIS ENTRY IS A M 1, WE ARE DONE IF DONE JUMP THROUGH LOAD-LINK LOOK AT THE RETURN ADDRESS SEE IF WE HAVE A GSB FROM KEYBOARD BYPASS TEST IF TRUE IF NPROG = 1 WE HAVE AN OVERLAY TEST CONDITION DO THE NECESSARY ADJUSTMENT RESET THE FLAG CLEAR THIS ADDRESS FOR THE A Pl ROM RESET THE FLAG 302 Page 238 302 1,568,094 CASSETTE OPERATING SYSTEM 03504000 17423 020147 SSCH 1ADA M 3 03505000 17424 100000 03506000 17425 021300 03507000 03508000 03509000 03510000 03511000 03512000 03513000 03514000 03515000 03516000 03517000 03518000 03519000 03520000 03521000 03522000 03523000 03524000 03525000 03526000 03527000 03528000 03529000 03530000 03531000 03532000 03533000 Q 3534000 03535000 03536000 03537000 03538000 03539000 03540000 03541000 03542000 03543000 Q 3544000 03545000 03546000 03547000 03548000 03549000 03550000 03551000 03552000 03553000 03554000 03555000 03556000 03557000 03558000 03559000 17426 066377 LDA A,I ADA AP 2 JMP SSCH 3 MUST RETURN TO OLD AP 3 AND CONTINUE ADD IN OFFSET TO ADJUST FOR RELATIVE ADDRESS STVFY CHECKS WHETHER THE STATE IS RIGHT FOR THE CASSETTE OPERATION IN QUESTION 17427 001257 STVFY 17430 010254 17431 170201 17432 010145 17433 170201 17434 140404 ERR 64 17435 033064 LDA CSTAT GET THE "STATE" INDICATOR CPA Pl STATE= 1 IS LEGAL RET 1 CPA P 2 STATE = 2 IS LEGAL RET 1 JSM AERRI,I ANY OTHER STATE IS ILLEGAL ASC 1,64 RRMAX RESETS THE RMAX POINTER AFTER R REGISTERS HAVE BEEN LOADE ON ENTRY: MBPTR SET, CSIZE SET, REGISTERS NOT LOADED YET ON EXIT: RMAX UPDATED IF MBPTR + CSIZE -1 > RMAX ELSE RMAX LEFT AS WAS TEMPORARIES USED: NONE ROUTINES CALLED: NEWSZ 17436 042646 RRP 17437 004000 17440 170040 ICA 17441 021310 17442 172006 17443 001263 17444 170040 17445 020001 17446 172003 17447 035310 17450 170201 RM 17451 066730 RM MAX JSM NEWSZ LDB A XI X 2 ADA SAP LDA TCA ADA SAP STB RET JMP RMAX RMXI A Pl B RMX 2 RMAX 1 ERR 62 GET TOP OF STACK POINTER SEE IF WE HAVE MEMORY OVERFLOW SKIP IF OVERFLOW MEMORY OVERFLOW ERROR CTYPE CHECKS THE TYPE OF THE ENTRY IN THE EXECUTION STACK AND SPECIFIES STRING OR NON-STRING ON EXIT 303 Page 239 303 1,568,094 CASSETTE OPERATING SYSTEM ON ENTRY: FA Pl POINTS TO THE ENTRY IN QUESTION ON EXIT: RET I = NON-STRING ENTRY AT FA Pl RET 2 = STRING ENTRY AT FA Pl TEMPORARIES USED: NONE ROUTINES CALLED: GWTWH 17452 042703 CTYPE 17453 012747 17454 170202 17455 012746 17456 170202 17457 170201 JSM GWTWH GET THE WHAT WORD CPA B 151 K CHECK FOR A STRING RET 2 CPA B 150 K CHECK FOR A STRING RET 2 RET I NON-STRING WTRR WRITE A RECORD ON THE CASSETTE.

ON ENTRY STARTING MEMORY ADDRESS IN 'MBPTR' FILE NUMBER IN "RECNO = T 13 " LENGTH OF RECORD IN WORDS IN 'RELTH' FINAL SECURITY STATUS IN 'SEFLG' FINAL RECORD TYPE IN 'RECTP' ON EXIT: RGCORD IS WRITTEN IF NO ERRORS AND TAPE POSITION IS IN BODY OF CURRENT RECORD THIS COMMAND IS ENTIRELY UNDER BPC CONTROL TEMPORARIES USED: RELTH (MRWI 1), RECTP (M RW 1 3) TVAR 3 (OP I) SEFLG (MRWI 2) ROUTINES CALLED: CPTP, ERDSO, ACHST, WTRA, VREC, AERRI, ERD 50 142773 WTRR 043347 001757 020146 JSM JSM LDA ADA CRTP,I ERD 50 RELTH M 2 SAM ERR 59 JSM ACHST,I LDA RELTH TCA ADA ASIZE 172002 067426 001757 WTRR 2 031700 001761 031701 001742 SAP JMP LDA STA LDA STA LDA WTRR 2 ERR 49 RELTH CSIZE RECTP RTYPE TVAR 3 IS THE CARTRIDGE PROTECTED? YES, GENERATE ERROR AND TERMINATl MUST CHECK FOR NOTHING TO LOAD FOR KEYS AND PROGRAM IF THE RESULT IS POSITIVE, FILE WILL FIT FILE WILL NOT FIT ERROR SET UP THE RECORD LENGTH SETUP THE RECORD TYPE MUST REMEMBER THIS FOR RCF, LDF AND ROMWD Page 240 03560000 03561000 03562000 03563000 03564000 03565000 03566000 03567000 03568000 03569000 03570000 03571000 03572000 03573000 03574000 03575000 03576000 03577000 03578000 03579000 03580000 03581000 03582000 03583000 03584000 03585000 03586000 03587000 03588000 03589000 03590000 03591000 03592000 03593000 03594000 03595000 03596000 03597000 03598000 03599000 03600000 03601000 03602000 03603000 03604000 03605000 03606000 03607000 03608000 03609000 03610000 03611000 03612000 03613000 03614000 03615000 172427 140605 001757 170040 021677 17460 17461 17462 17463 17464 17465 17466 17467 17470 17471 17472 17473 17474 17475 17476 17477 304 304 17500 031704 17501 001760 17502 031703 17503 142774 17504 043347 17505 001344 17506 172402 17507 043227 17510 170201 V 17511 140404 E 17512 032064 17513 140404 E 17514 032471 ITRR RR 44 RR 59 1,568,094 CASSETTE OPERATING SYSTEM STA EX 2 LDA SEFLG UPDATE SECU STA EX 15 F AUTO VERI JSM WTRA,I WRITE THE RI JSM ERD 50 CHECK FOR E LDA AVFLG IS AUTOVERIF SAM WTRRI JSM VREC VERIFY THE R 1 I RET I JSM AERRI,I VERIFY FAILE ASC 1,44 JSM AERRI,I NOTHING TO 1 ASC 1,59 305 JRITY FLAG IFY.

ECORD RRORS Y ON 1 =NO,ZERO = YES ECORD ED RECORD CHNTP BUMPS THE EXECUTION STACK POINTER, FAPI, CHECKS FOR ANOTHER PARAMETER ON THE STACK, IF A PARAMETER GET IT, IF THE PARAMETER IS NUMERIC, EVALUATE IT (MAKE IT FIXPT) IF NON-NUMERIC, RET 2 THEN FIND THE LINE ADDRESS CORRESPONDING TO THE NUMERIC PARAMETER.

ON ENTRY:

ON EXIT:

as as 17515 042732 CHNTP 17516 170201 17517 040751 CHNP 2 17520 170202 17521 040643 17522 173413 17523 176414 EXEC STACK POINTER POINTS AT THE PREVIOUS PARAMETER ENTRY RET 1 IF NO MORE PARAMETERS.

RET 2 IF THE PARAMETER ON THE STACK WAS NONNUMERIC RET 3: IF THE LINE ADDRESS COULD NOT BE FOUND.

A = ENDS RET 4: IF THE LINE ADDRESS COULD BE FOUND.

THEN REG A CONTAINS THE ADDRESS OF THE LINE'S BRIDGE TEMPORARIES USED: NONE ROUTINES CALLED: BMPI, NGET, FIXPT-I, AFLNA AERRI JSM BM Pl RET 1 JSM NGET RET 2 JSM FIXPT-I SOS ERRI 1 SBM ERRI 9 RETURN IF NO MORE PARAMETERS ON STACK GET THE PARAMETER NON-NUMERIC PARAMETER ON STACK CONVERT THE NUMBER TO A FIXED POINT NUMBER OVERFLOW ERROR IF LINE NUMBER IS NEGATIVE ERROR 305 Page 241 03616000 03617000 03618000 03619000 03620000 03621000 03622000 03623000 03624000 03625000 03626000 03627000 03628000 03629000 03630000 03631000 03632000 03633000 03634000 03635000 03636000 03637000 03638000 03639000 03640000 03641000 03642000 03643000 03644000 03645000 03646000 03647000 03648000-03649000 03650000 03651000 03652000 03653000 03654000 03655000 03656000 03657000 03658000 03659000 03660000 03661000 03662000 03663000 03664000 03665000 03666000 03667000 03668000 306 Page 241 Continued 03669000 17524 035233 03670000 17525 076404 03671000 17526 140513 306 1,568,094 CASSETTE OPERATING SYSTEM STB TMP 7 SZB CHNP 3 IF ZERO START AT FWUP ALWAYS JSM AFLNA,I FIND THE LINE ADDRESS 1,568,094 CASSETTE OPERATING SYSTEM 066533 170204 001307 170204 001277 170203 140404 030461 140404 CHNP 3 CHNP 4 ERRI 1 ERRI 9 ASC as as as as as as as as as 042703 CHSEC 170513 010143 066546 067670 SEDBE 034017 CHSE 1 074570 170607 074571 060001 020246 072004 000257 031760 170201 020232 CHSEE 072064 000254 031742 170201 JMP RET LDA RET LDA RET JSM ASC JSM 1,19 CHNP 4 4 FWUP 4 ENDS 3 AERRI,I 1,11 AERRI 1 LINE ADDRESS COULD NOT BE FOUND RESTORE A AND RETURN START HERE LINE ADDRESS NOT FOUND SO SET A TO ENDS FIXED POINT OVERFLOW ERROR BAD LINE NUMBER CHSEC GETS THE 'SE' OR 'DB' STRING FROM THE EXECUTION STACK, AND CHECKS FOR VALIDITY, IF VALID THEN SELFG ISSET TO -1 OR TVAR 3 = 1, OTHERWISE THEY ARE LEFT UNCHANGED THIS ROUTINE IS CALLED BY THE RCF ROUTINE ON ENTRY: FA Pl POINTS TO SUSPECTED ENTRY IN EXECUTION STACK ON EXIT: SELFG OR TVAR 3 IS SET IF NO ERRORS OCCURED.

THEY ARE NOT ALTERED IF ERRORS OCCURED TEMPORARIES USED:NONE ROUTINES CALLED:GWTWH JSM SAR CPA JMP JMP STB WBD SAL WBD IOR ADA RZA LDA STA RET ADA RZA LDA STA RET GWTWH 12 P 4 CHSEI ERR 58 D A,I 8 B,I B AMSE CHSEE Ml SEFLG 1 B 7403 SEDBE Pl TVAR 3 GET THE WHAT AND WHERE LOOK AT THE CLASS IF A= 4 WE ARE OK INVALID "SE" OR "DB" PARAMETER 8 POINYS TO STRING GET THE FIRST CHARACTER GET THE SECOND CHARACTER MAKE THE COMPOSITE WORD ADD IN -"SE" SKIP IF INVALID "SE" SET SECURE DO WE HAVE A "DB" REQUEST SKIP IF ERROR A "DB" REQUEST SO MARK IT GTPAR GETS THE FIRST PARAMETER ON THE EXECUTION STACK ON EXIT: B AND RECNO CONTAIN THE FIRST PARAMETER Page 242 17527 17530 17531 17532 17533 17534 17535 17536 17537 17540 03672000 03673000 03674000 03675000 03676000 03677000 03678000 03679000 03680000 03681000 03682000 03683000 03684000 03685000 03686000 03687000 03688000 03689000 03690000 03691000 03692000 03693000 0694000 03695000 03696000 03697000 03698000 03699000 03700000 03701000 03702000 03703000 03704000 03705000 3706000 03707000 03708000 03709000 03710000 03711000 03712000 03713000 03714000 03715000 03716000 03717000 03718000 03719000 03720000 03721000 03722000 03723000 03723000 03724000 03725000 17541 17542 17543 17544 17545 17546 17547 17550 17551 17552 17553 17554 17555 17556 17557 17560 17561 17562 17563 17564 307 307 308 Page 242 Continued 03726000 03727000 1,568,094 10 x CASSETTE OPERATING SYSTEM IF THERE IS NO PARAMETER ENTERED, ZERO IS ASSUMED 1,568,094 CASSETTE OPERATING SYSTEM :r :

17565 042605 GTPAR JSM 17566 042611 GTPR 2 JSM 03737000 17567 066601 17570 17571 17572 17573 17574 17575 17576 17577 17600 17601 17602 17603 17604 17605 17606 17607 17610 040751 GTPR 1 067726 GTPR 4 040643 GTPR 3 173442 176407 035725 GTPR 6 000177 031760 170201 BMP 2 004177 GTPR 5 066575.

140404 ERR 53 032463 042665 CFD 142767 043347 170201 17611 140610 CNULL 03779000 17612 010177 17613 17614 17615 17616 066615 170202 101272 CNLLI 170513 TEMPORARIES USED:RECNO, SEFLEG ROUTINES CALLED:NGET, FIXPT-1, CFD, CNULL, AERRI CFD CNULL JMP GTPR 5 JSM JMP JSM SOS SBM STB LDA STA RET LDB JMP JSM ASC NGET ERR 55 FIXPT-1 ERRI I ERR 53 RECNO PO SELFG t PO GTPR 6 AERRII 1 1,53 COMPLETE ANY PENDING FINDS CHECK FOR THE NULL PARAMETER AND CALL COUNT WE HAVE A NULL SO LOAD OR RECORD FILE 0 GET THE FIRST PARAMETER IF WE GET HERE BAD ERROR llll CONVERT FROM FLOAT TO FIXED OVERFLOW ERROR IF MINUS ERROR CLEAR THE SECURITY FLAG TEMPORARY WE HAVE A NULL SO SET FILE TO 0 CONTINUE CASSETTE PARAMETER IS NEGATIVE THIS ROUTINE WILL SET THE PA FOR THE CASSETTE COMPLETE ANY PENDING FINDS ON THE SELECT CODE= CSELC JSM STPRA JSM CFDA,I JSM ERDSO RET I CNULL CHECKS THE ENTERED PARAMETER FOR THE NUL IFNU THEN-RET I ELSE -RET 2 TEMPORARIES USED: NONE ROUTINES CALLED: ACOUN JSM ACOUN,I SET FA Pl AND COUNT THE PARAMETERS ENTERED CPA PO JMP CNLLI RET 2 LDA FAPI,I SAR 12 IF A= 0 WE HAVE NO NUMERIC PARAMETERS IF NO NUMERIC WE MUST SEE IF NULL GET "WHAT' LOOK AT CLASS 309 Page 243 03728000 03729000 03730000 03731000 03732000 03733000 03734000 03735000 03736000 309 03738000 03739000 03740000 03741000 03742000 03743000 03744000 03745000 03746000 03747000 03748000 03749000 03750000 03751000 03752000 03753000 03754000 03755000 03756000 03757000 03758000 03759000 03760000 03761000 03762000 03763000 03764000 03765000 03766000 03767000 03768000 03769000 03770000 03771000 03772000 03773000 03774000 03775000 03776000 03777000 03778000 03780000 03781000 03782000 03783000 1,568,094 CASSETTE OPERATING SYSTEM 03784000 03785000 03786000 03787000 03788000 03789000 03790000 03791000 03792000 03793000 03794000 03795000 03796000 03797000 03798000 03799000 03800000 03801000 03802000 03803000 17617 010140 17620 170201 RET 17621 067726 17622 00030 STPRL 03804000 17623 031743 03805000 17624 001305 03806000 17625 031706 03807000 03808000 03809000 03810000 03811000 03812000 03813000 03814000 03815000 03816000 03817000 03818000 03819000 03820000 03821000 03822000 03823000 03824000 17626 001743 03825000 17627 005706 03826000 17630 174040 03627000 17631 020001 03828000 17632 020254 03829000 17633 031757 03830000 17634 170201 03831000 03832000 03833000 03834000 03835000 03836000 03837000 03838000 03839000 CPA M JMP ERR 55 SEE IF NULL NULL PARAMETER OK NOT NUMERIC AND NOT NULL SO ERROR STPRL SETS UP POINTERS FOR RECORD AND LOAD MEMORY STATEMENTS

ON EXIT: STARTING ADDRESS IS SET UP ENDING ADDRESS IS SET UP TEMPORARIES USED:LWMD (OPI+I) ROUTINES CALLED:NONE LDA AJSTK THIS IS THE END OF MEMORY DUMP (JSM STACK+ I) STA LWMD LDA OFWAM THIS IS THE PERMANENT START OF USER'S MEMORY SF STA MBPTR CALTH CALCULATES THE LENGTH IN WORDS OF A SECTION OF MEMORY (LWMD-MBTR+ 1) ON ENTRY: MBPTR CONTAINS THE STARTING ADDRESS LWMD CONTAINS THE ENDING ADDRESS ON EXIT: LENGTH IN RELTH TEMPORARIES USED:LWMD (OP 1 + 1), RELTH (MRWI+I) ROUTINES CALLED:NONE CALTH LDA LWMD LDB MBPTRCALCULATE THE RECORD LENGTH AS:

TCB ADA B LWMD-MBPTR + 1 ADA Pl STA RELTH STORE RESULT IN RELTH RET I RDREC SETS THE NUMBER OF TRIES AT READING, WITH RECOVERY IF ERRORS ARE ENCOUNTERED.

310 Page 244 310 1,568,094 CASSETTE OPERATING SYSTEM 001343 RDREC 031762 002745 031723 14 b 605 RDRC 1 142775 043347 170201 066641 005706 001700 020001 004000 020257 170201 NWSZ ON ENTRY: ALL POINTERS ARE SET UP FOR READING A RECORD AND THE TAPE IS POSITIONED PROPERLY ON EXIT: THE RECORD IS READ IF ERRORS OCCURED, RECOVERY HAS BEEN ATTEMPTED TEMPORARIES USED:LDTRS (MRW 1 + 4), INSTR (T 1 1) ROUTINES CALLED:ACHST, RBDYA, ERD 50 LDA STA LDA STA JSM JSM JSM RET JMP NOTRY LDTRS STBCD INSTR ACHST,I RB DYA,I ERD 50 1 RDRC 1 SET THE NUMBER OF READ TRIES STB PTRI, COMMAND FOR LOADING REPOSITION THE TAPE READ THE RECORD CHECK FOR ERRORS SUCCESSFUL READ READ ERROR -DO AGAIN NEWSZ CALCULATES (MBPTR+CSIZEW TO B) -1 TO A ON ENTRY: MBPTR AND CSIZE ARE SET UP ON EXIT: CALCULATION IS DONE TEMPORARIES USED:NONE ROUTINES CALLED:NONE LDB MBPTR LDA CSIZE ADAB LDBA ADA M 1 RET 1 LDXI CHECKS FOR (,X) PARAMETER, CONVERTS FLAGA TO FLOAT, AND TRANSFERS THE FLOATING POINT NUMBER TO (,X) ON ENTRY:FA Pl POINTS AT PREVIOUS 'WHAT' WORD FLAGA CONTAINS THE FIXED POINT NUMBER TO BE CONVERTED.

*Page 245 03840000 03841000 03842000 03843000 03844000 03845000 03846000 03847000 03848000 03849000 03850000 03851000 03852000 03853000 03854000 03855000 03856000 03857000 03858000 03859000 03860000 03861000 03862000 03863000 03864000 03865000 03866000 03867000 03868000 03869000 03870000 03871000 03872000 03873000 03874000 03875000 03876000 03877000 03878000 03879000 03880000 03881000 03882000 03883000 03884000 03885000 03886000 03887000 03888000 03889000 03890000 03891000 03892000 03893000 03894000 03895000 17635 17636 17637 17640 17641 17642 17643 17644 17645 17646 17647 17650 17651 17652 17653 311 311 1,568,094 CASSETTE OPERATING SYSTEM03896000 03897000 03898000 03899000 03900000 03901000 03902000 03903000 03904000 03905000 03906000 03907000 17654 035756 LDX 3 03908000 17655 042732 LDXI 03909000 17656 170201 03910000 17657 005756 03911000 17660 140563 LDX 2 03912000 17661 042703 03913000 17662 000127 03914000 17663 140372 03915000 17664 170202 03916000 03917000 03918000 03919000 03920000 03921000 03922000 03923000 03924000 03925000 03926000 03927000 03928000 03929000 03930000 03931000 03932000 03933000 17665 070430 STPRA 03934000 17666 000013 03935000 17667 072405 03936000 17670 011345 03937000 17671 066674 03938000 17672 070420 03939000 17673 066665 03940000 17674 001514 STPA 1 03941000 17675 030011 03942000 17676 000016 03943000 17677 031735 03944000 17700 000177 03945000 17701 031764 03946000 17702 170201 03947000 03948000 03949000 03950000 03951000 ONEXIT: RET I-NOMOREPARAMETERS RET 2 TRANSFER COMPLETE TEMPORARIES USED: FLAGA (MRWI) ROUTINES CALLED: BMP 1, AFLTP, GWTWH AASTR STB JSM RET LDB JSM JSM LDA JSM RET FLAGA BM Pl MOVE THE STACK POINTER I RETURN IF NO MORE PARAMETERS FLAGA GET THE NUMBER AFLTP,I CONVERT TO FLOATING POINT NUMBER GWTWH GET THE WHAT AND WHERE WORD ADR 2 SOURCE ADDRESS AASTR,I TRACE THE ASSIGNMENT 2 DONE FULL PRECISION TRANSFER STPRA SETS THE PERIPHERAL ADDRESS FOR THE CASSET' AND DISABLES THE INTERRUPT SYSTEM ON ENTRY: CSELC CONTAINS THE CURRENT SELECT CODE FOR CASSETTES ON EXIT: PA = CSELC INTERRUPT IS DISABLED TEMPORARIES USED: SVC, FLG 2 ROUTINES CALLED: NONE DIR MUST CHECK TO SEE IF DMA IS NOT USED LDA DMAPA IF DMAPA IS ZERO WE CAN PROCEED SZA STPAI IF THE DMAPA IS ZERO THEN DMA IS AVAILABLE CPA CSCF IF DMA IS BUSY BUT A CASSETTE IS USING JMP STPA 1 IT, WE CAN PROCEED El R WE MUST WAIT FOR DMA TO COMPLETE JMP STPRA LDA CSELC STA PA LDA C STA SVC LDA PO STA FLG 2 RET I GET THE CASSETTE'S SELECT CODE SAVE THE C REGISTER CLEAR THE FIND SELECT FLAG GWTWH GETS THE "WHAT" AND THE "WHERE" WORDS FROM THE EXEC STACK ON ENTRY: FA Pl IS POINTING AT THE "WHAT" WORD DESIRED Page 246 312 312 1,568,094 CASSETTE OPERATING SYSTEM 17703 005272 17704 040616 ON EXIT: REGISTER A CONTAINS THE "WHAT WORD OEXTREGISTER B CONTAINS THE "WHERE" WORD TEMPORARIES USED: ABSAD ROUTINES CALLED: NONE GWTWH LDB FA Pl SET B TO POINT AT PROPER ENTRY JSM ABSAD+ 1 GET THE ABSOLUTE ADDRESS OF THE ENTRY 17705 101272 17706 052750 17707 170201 17710 031761 PCALL 17711 042565 17712 140605 17713 001761 17714 011701 17715 170201 17716 001701 17717 072403 17720 140404 17721 032467 17722 140404 17723 033060 CHTYP CHT Pl PCLL I ERR 57 ERR 60 LDA FAPI,I AND SATMP RET I GET THE WHAY WORD CLEAR OUT THE LINK BITS PCALL IS A ROUTINE OF COMMON CODE USED BY SEVERAL LOAD ROUTINES ON ENTRY: REGISTER A CONTAINS THE DESIRED RECORD TYPE ON EXIT: 1) PA IS SET TO CSELC 2) DESIRED RECORD NUMBER IS IN RECNO 3) RECORD DESIRED IS FOUND IF NO ERRORS 4) CHECKS FOR A PROGRAM ON THE TAPE AT RECNO 5) VERIFIES THAT TYPE MATCHES TEMPORARIES USED: RECTP (MRWI+ 3) ROUTINES CALLED: GTPAR, CHS Tj,AERRI I STA RECTP REG A HAS THE DESIRED RECORD TYPE ON ENTRY JSM JSM LDA CPA RET LDA SZA JSM ASC JSM ASC GTPAR ACHST,I RECTP RTYPE 1 RTYPE ERR 60 AERRI,I 1,57 AERRI,I 1.60 GET THE LFILE NUMBER DO A BPC FIND MUST CHECK TO SEE IF TYPE IS RIGHT TYPE OK SEE IF THERE IS ANYTHING TO LOAD IF TYPE IS ZERO THEN CSIZE= 0 TOO FILE TYPE MISMATH ERROR NOTHING TO LOAD ERROR CHSIZ WILL CHECK THE SIZE OF THE RECORD TO BE READ IN TO SEE IF THERE IS ROOM IN MEMORY IF THERE IS NO ROOM, ERROR 62 IS GIVEN 313 Page 247 313 03952000 03953000 03954000 03955000 03956000 03957000 03958000 03959000 03960000 03961000 03962000 03963000 03964000 03965000 03966000 03967000 03968000 03969000 03970000 03971000 03972000 03973000 03974000 03975000 03976000 03977000 03978000 03979000 03980000 03981000 03982000 03983000 03984000 03985000 03986000 03987000 03988000 03989000 0399000 03991000 03992000 03993000 03994000 03995000 03996000 03997000 03998000 03999000 04000000 04001000 04002000 04003000 04004 00 O 04005000 0400000 407000 314 1,568,094 314 CCASSETTE OPERATING SYSTEM17724 001700 17725 170040 17726 021757 17727 172066 H I 17730 140404 ERR 62 17731 033062 ON ENTRY: RECORD HAS BEEN FOUND SO HEAD VARIABLES ARE SET RELTH OF RECORD TO LOAD HAS BEEN CALCULATED ON EXIT: RETURN TO CALLING ROUTINE, IF CSIZE ≤RELTH GIVES ERROR 62 IF CSIZE > RELTH AND TERMINATES LOAD TEMPORARIES USED: RELTH (MRWI+ 1) ROUTINES CALLED AERRI LDA CSIZE GET FILE SIZE FROM HEAD TCA ADA RELTH SUBTRACT CSIZE FROM ROOM IN MEMORY SAP PCLLI JSM AERR 1,I ASC 1,62 IF THE RESULT IS POSITIVE FILE WILL NOT FIT MEMORY OVERFLOW NO ROOM IN MEMORY BM Pl MOVES THE EXECUTION STACK POINTER BY ONE ENTRY ON ENTRY: A CALL TO SUB ROUTINE 'COUNT' MUST PROCEED A CALLTO BM Pl ON EXIT: THE POINTER (FAPI) IS MOVED ONE PARAMETER TO THE RIGHT IF RET 2, IF RET 1, NO MORE PARAMETERS ON THE STACK TEMPORARIES USED: NONE ROUTINES CALLED: ABUMP LDA Pl JSM ABUMP,I RET 1 RET 2 NO MORE PARAMETERS FA Pl IS MOVED CKKBE CHECKS THE SYSTEM TO SEE IF THIS COMMAND Page 248 04008000 04009000 04010000 04011000 04012000 04013000 04014000 04015000 04016000 04017000 04018000 04019000 04020000 04021000 04022000 04023000 04024000 04025000 04026000 04027000 04028000 04029000 04030000 04031000 04032000 04033000 04034000 04035000 04036000 -04037000 04038000 04039000 04040000 04041000 04042000 04043000 04044000 04045000 04046000 04047000 04048000 04049000 04050000 04051000 04052000 04053000 04054000 04055000 04056000 04057000 04058000 04059000 04060000 314 1,568,094 314 315 Page 248 Continued 04061000 04062000 04063000 1,568,094 CASSETTE OPERATING SYSTEM WAS A KEYBOARD ENTRY OR A PROGRAM STATEMENT

CSTAT = I =>KEYBOARD EXECUTION 315 316 1 568 094 316 CASSETTE OPERATING SYSTEM 17736 001257 CKKBE 17737 010145 17740 170201 17741 000334 17742 031264 17743 170202 s as 077756 077757 077760 077761 077742 17744 17745 17746 17747 17750 17751 077765 077743 077744 077735 077766 077226 077762 077232 077233 115733 135733 150000 151000 171777 021774 FLAGA RELTH SEFLG RECTP TVAR 3 TVAR 4 LWMD TVAR 1 SVC TVAR 2 LNO LDTRS CFLAG TMP 7 CPBCD STBCD B 150 K B 151 K SAIMP QMRKS = 2 => RUNNING PROGRAM ON ENTRY: CSTAT CONTAINS SYSTEM STATE THIS ROUTINE IS ONLY CALLED BY LDK AND LDF/LDPOF PROGRAM FILES THESE CALLING ROUTINES CALL STVFY WHICH GUARANTEES THAT CSTAT = I OR 2 ON EXIT: RET I = PROGRAM LINE IS EXECUTING RET 2 = KEYBOARD EXECUTION TEMPORARIES USED: NONE ROUTINES CALLED: NONE LDA CPA RET LDA STA RET CSTAT P 2 1 ADPO LEND GET THE STATE IS IT A KEYBOARD EXECUTION THIS IS PROGRAM EXECUTION KEYBOARD EXECUTION MUST CANCEL ALL PENDING GTO/GSB'S DEFINITIONS EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU CPB STB OCT OCT OCT OCT MRWI TEMPORARY STORAGE MRWI+I MRWI + 2 MRW 1 + 3 O Pl CARRIES THE END OF THE MEMORY SECTION MRWI+ 7 OPI+I OP 1 + 2 TEMPORARY STORAGE T 21 DEDECATED TO SAVING THE C REGISTER MRWI+ 8 TEMPORARY STORAGE CSTMP+ 8 FOR CALLING AFLNA MRWI + 4 NUMBER OF TRIES AT NORMAL LOAD CSTMP+ 12 CFLAG IS FOR CONTROL SUPERVISOR CSTMP+ 13 T 19,I COMPARE INSTRUCTIONS FOR RBODY T 19,I STORE COMMAND FOR RBODY 150000 151000 171777 21774 Page 249 04064000 04065000 04066000 04067000 04068000 04069000 04070000 04071000 04072000 04073000 04074000 04075000 04076000 04077000 04078000 04079000 04080000 04081000 04082000 04083000 04084000 04085000 04086000 04087000 04088000 04089000 04090000 04091000 04092000 04093000 04094000 04095000 04096000 04097000 04098000 04099000 04100000 04101000 04102000 04103000 04104000 04105000 04106000 04107000 04108000 04109000 04110000 04111000 04112000 04113000 04114000 04115000 04116000 04117000 04118000 04119000 316 1,568094 316 317 1,56 & 094 317 CASSETTE OPERATING SYSTEM 17762 17763 17764 BSSI 165530 LNKSB 04127000 17765 170201 LKSBR 17766 17767 17770 17771 17772 17773 17774 17775 17776 17777 STOPC CFDA PTB RA MRKA REWA CRTP WTRA RBDYA ERSA IDRA ROUTINE LINKS OPG 177638 THIS IS THE CHECKSUM WORD JMP LOADL,I THIS IS A READ/WRITE LINK FORTHE CHAIN RET 1 RETURN USED BY ALL USERS OF THIS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS LINK TO STOP CASSETTE LINK TO COMPLETE FIND ROUTINE LINK TO EXECUTE 'MRK' LINK TO EXECUTE 'REW' LINK TO EXECUTE 'CARTP' LINK TO EXECUTE 'WTR' LINK TO EXECUTE 'RBODY' LINK TO EXECUTE 'ERS' LINK TO EXECUTE 'IDR' Page 250 04120000 04121000 04122000 04123000 04124000 04125000 04126000 04128000 04129000 04130000 04131000 04132000 04133000 04134000 04135000 04136000 04137000 04138000 04139000 04140000 317 1.568094 317 1 1 1 1 1 1 1 1 1 1,568,094 RAM WORDS CASSETTE DEDICATED RAM CASSETTE DEDICATED RAM EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU CATMP CATMP+ I CATMP+ 2 CATMP+ 3 CATMP+ 4 CATMP+ 5 CATMP+ 6 CATMP+ 7 CATMP+ 8 MRWI+ 5 MRW 1 + 6 RECORD NUMBER (PART OF HEAD) ABSOLUTE SIZE CURRENT SIZE RECORD TYPE RECORD REWRITE NUMBER SECURITY FLAG #0 =SECURE O =UNSECURE USED FOR FWUP IN RKM TAPE POSITION INDICATOR POINTS TO BODY SECTION LOGS ERRORS BITS I-15 ARE ALWAYS ZERO BIT ZERO SET= HARDWARE FIND BIT ZERO CLR = BPC FIND SHARED TEMPORARIES PARTITION HEAD EQU EQU EQU EQU EQU EQU MRWI+ 9 T 4 T 5 T 6 T 7 T 8 077721 CHSUM EQU T 9 EQU EQU EQU EQU EQU EQU CHSUM TIO Tll T 12 T 13 T 14 PARTITION COUNTER PARTITION NUMBER PARTITION LENGTH PARTITION REWRITE NUMBER USED IN WAIT AND NCODE HOLDS THE ABSOLUTE SIZE OF THE RECORDS TO MARK USED FOR ALL CHECKSUM CALCULATIONS TARGET-STARTING RECORD NUMBER NUMBER OF RECORDS TO MARK HOLDS AN INSTRUCTION (STR,COMPR) COUNTS NUMBER OF ATTEMPTS TO FIND TARGET RECORD NUMBER NUMBER OF WORDS NCODE WRITES ON MARK FLGI: BITS 1-14 ARE ALWAYS ZERO BIT 0 SET MEANS TRACK A CLEAR MEANS TRACK B EQU CATMP+ 5 MARK SETS THIS BEFORE ENTERING IDR AND THIS REMEMBERS THE TRACK COUNTERS EQU T 16 EQU T 16 EQU T 17 077732 RWCTR EQU T 18 nt USED IN REWRITE OF RECORD HEAD PARTITION HEAD COUNTER BODY COUNTS WORDS IN S RECORD NTERS 318 Page 251 318 077676 077677 077700 077701 077702 077703 077704 077705 077706 077763 077764 CRECN ASIZE CSIZE RTYPE RRWNO EXISF EX 2 TPOS MBPTR ERRWD FLG 2 077767 077714 077715 077716 077717 077720 PRCTR PARNO PARLN PRWNO TEM Pl MSIZE 04142000 04143000 04144000 04145000 04146000 04147000 04148000 04149000 04150000 04151000 04152000 04153000 04154000 04155000 04156000 04157000 04158000 04159000 04160000 04161000 04162000 04163000 04164000 04165000 04166000 04167000 04168000 04169000 04170000 04171000 04172000 04173000 04174000 04175000 04176000 04177000 04178000 04179000 04180000 04181000 04182000 04183000 04184000 04185000 04186000 04187000 04188000 04189000 04190000 04191000 04192000 04193000 04194000 04195000 04196000 04197000 077721 077722 077723 077724 077725 077726 TDIST NOREC INSTR FPASS RECNO MRKSZ 077730 077730 077731 RHCTR PHCTR WCTR Vul 1,568,094 RAM WORDS 077733 PTR 077734 BDPTR EQU T 19 EQU T 20 GENERA PURPOSE MOVING POINTER MOVING BODY POINTER 319 Page 252 04198000 04199000 04200000 04201000 04202000 319 1,568,094 CASSETTE INITIALIZATION 04204000 04205000 04206000 04207000 04208000 23750 04209000 23750 04210000 23751 04211000 23752 04212000 23753 04213000 23754 04214000 23755 04215000 23756 04216000 23757 04217000 23760 04218000 23761 04219000 23762 04220000 23763 04221000 23764 04222000 23765 04223000 23766 04224000 23767 04225000 23770 04226000 23771 000254 CSTIN 031514 030011 000127 031705 000006 030007 030005 000254 031707 000143 031343 000177 031345 031344 030013 002774 ORG LDA STA STA LDA STA LDA STA LDA STA LDA STA LDA STA LDA STA STA STA LDA 237508 Pl CSELC PA P 16 CATMP+ 7 R 6 R 7 P 255 R 5 Pl CATMP+ 9 P 4 NOTRY PO CSCF AVFLG DMAPA LKSRA 04227000 23772 031530 STA LOADL 04228000 23773 170201 RET I 04229000 23774 017765 LKSRA ABS LKSBR 04230000 END END OF PASS 2 NO ERRORS DETECTED SET CAST SELECT CODE SET CAST PERIPHERAL ADDR SET CAST TO "LOST" CLEAR "BEGIN/END" OF TAPE CLEAR "SERVO FAILED, CARTRIDGE OUT" OUTPUT STOP COMMAND SET TRACK 0 SET NO OF READ AND SEARCH TRIES ENABLE AUTO VERIFY DMA AVAILABLE SET UP THE LINK ADDRESS FOR THE OPTION ROMS ADDRESS OF THE LINK RETURN Page 253 32 Q 320 1,568,094 BASE-PAGE READ-WRITE-MEMORY 00003000 76550 00004000 02000000 00602 02001000 00602 02002000 00605 02003000 00605 02004000 02005000 02006000 02007000 02008000 07740 02009000 07740 02010000 07741 02013000 07757 02014000 07757 02015000 07760 02016000 02017000 02018000 02019000 02020000 02021000 02022000 17766 02023000 02024000 02025000 0202600 02027000 02028000 02029000 17766 02029100 17767 -02030000 17770 02031000 02032000 02033000 02034000 02035000 02036000 02037000 02038000 02039000 023724 021712 021653 021667 021717 021715 ORG 76550 B UNL ORG DMALO DEF DMAL.

ORG ACHST DEF CHST LINKS TO INTERPRETURE ORG DEF DEF ORG DEF DEF 021701 021352 021607 17771 020736 17772 021414 17773 020465 17774 021227 17775 020034 17776 021450 17777 021131 7740 B SSC TRKCH 7757 B AVD AVE LINK TO EXECUTE "SSC" LINK TO EXECUTE "TRK" LINK TO EXECUTE "AVD" LINK TO EXECUTE "AVE" ORG 17766 B ROUTINE LINKS TO CASOS DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF STOPC CED PTB RG MRK REW CARTP WTR RBODY ERS IDR LINK TO STOPC LINK TO CFD LINK TO EXECUTE THE BRIDGE PATCH ROUTINE LINK TO MRK LINK TO REW LINK TO CART PROTECT LINK TO WRITE LINK TO READ LINK TO ERASE LINKTO IDENTIFY Page 254 321 321 Page 255 TITLE PAGE 02041000 02042000 02043000 02044000 9825 TAPE CARTRIDGE DRIVERS 02045000 02046000 VERSION FDRVU 02047000 02048000 02049000 02050000 02051000 02052000 02055000 02056000 02057000 02058000 LIST OF ABBREVIATIONS 02059000 02060000 02061000 BET BEGINNING OR END OF TAPE (HRDW STATUS BIT 0).

02062000 BOT BEGINNING OF TAPE.

02063000 COT CARTRIDGE OUT (HRDW STATUS BIT 2).

02064000 DIR TAPE DIRECTION.

02065000 EOT END OF TAPE.

02066000 EVTM END OF VALID TAPE MARK ( 6 " OF GAP).

02067000 EWA ENABLE WRITE AMPLIFIER.

02068000 HS HIGH SPEED ( 90 INCHES/SEC).

02069000 IPG INTER-PARTITION GAP (APPROX 018 ").

02070000 IRG INTER-RECORD GAP ( 1 ") ALSO HRDW STATUS BIT 4.

02071000 LS LOW SPEED ( 22 INCHES/SEC) 02072000 MVG MOVING LINE (HRDW STATUS BIT 5).

02073000 PHEAD PARTITION HEAD ( 3 WORDS + CHSUM).

02074000 POF POWER OFF (HRDW STATUS BIT 3).

02075000 RBODY RECORD BODY.

02076000 RHEAD RECORD HEAD.

02077000 SCH SEARCH (HRDW CMD BIT 1).

02078000 SFL SERVO FAILURE (HRDW STATUS BIT 1).

02079000 THI HIGH READ THRESHOLD.

02080000 THOLD READ THRESHOLD.

02081000 TLO LOW READ THRESHOLD.

02082000 TOS TAPE OPERATING SYSTEM 02083000 WPR WRITE PROTECTED (HRDW STATUS BIT 7).

322 322 1,568,094 32 1,6,9 323 RDHED 02085000 2000 b 02086000 02087000 02088000 02089000 02090000 02091000 02093000 20000 02100000 20001 02105000 20002 02106000 20003 02107000 20004 02108000 20005 02109000 20006 02110000 20007 021 t 11000 20010 f:02112000 20011 02113000 20012 02114000 02115000 02116000 02117000 20013 02118000 20014 02119000 20015 02120000 20016 02121000 20017 02122000 20020 02123000 20021 02124000 20022 02125000 20023 02130000 20024 02132000 20025 02133000 20026 02134000 20027 02135000 20030 02136000 20031 02137000 20032 02138000 20033 ORG 20000 B -SUBROUTINE RDHED THIS ROUTINE READS A RECORD HEAD (LENGTH DEFHD BY "HDLN") AND STORES IT INTO MEMORY (RHPTR DEFINES WHERE IN MEMORY).

115733 CPINS 001343 RDHED 031731 000057 ERDHD 043715 002736 031733 043271 043261 043720 043234 CPB LDA STA LDA JSM LDA STA JSM JSM JSM JSM PTR, I NOTRY WCTR RLFDH CMDW RHPTR PTR INGAP INDTA RSTHD PAMBL SET NOTRY ATTEMPTS TO READ THE HEAD READ DATA CMD AT HI THRESHOLD START GOING; WAIT TIL UP TO SPEED SET PTR TO THE FIRST FIND REC GAP; COULD BE IN DATA FIND PREAMBLE SETS DATA MODE & PROPER THOLD GET SYNC'D WITH THE TAPE READ RECORD HEAD 000177 DC 10 031721 000137 031730 043242 DC 13 067204 055730 067024 067031 135733 STINS 025721 035721 045733 067017 015721 DCI 170202 067204 LDA STA LDA STA JSM JMP DSZ JMP JMP STB ADB STB ISZ JMP CPB RET JMP ZERO CHSUM HDLN RHCTR GETWD DC 6 RHCTR + 2 DC 1 PTR, I CHSUM CHSUM PTR DC 13 CHSUM 2 DC 6 INITIALIZE THE CHECKSUM FOR READING THE REC HEAD INITIALIZE THE RECORD HEAD COUNTER GET NEW WORD DONE WITH HEAD? NO YES UPDATE HEAD CHECKSUM MOVE HEAD PTR READ HEAD CORRECTLY? YES; EXIT WITH TAPE STILL MOVING HEAD CHSUM ERROR Page 256 1,568,094 323 323 324 Page 257 02140000 02141000 02142000 02143000 02144000 02145000 02146000 02147000 20034 02148000 20035 02149000 20036 02150000 02151000 20037 02152000 20040 02153000 20041 02154000 20042 02155000 02156000 02157000 02158000 02159000 02160000 02161000 02162000 02163000 02164000 02165000 02166000 02167000 02168000 02169000 02170000 02171000 02172000 02173000 02174000 02175000 02176000 02177000 02178000 02179000 02180000 02181000 02182000 02183000 02184000 02185000 02186000 02187000 02188000 02189000 02190000 02191000 02192000 02193000 02194000 02195000 20043 20044 20045 20046 20047 20050 1,568,094 324 SUBROUTINE RBODY 043001 RBODY 170201 001706 031734 021700 170040 031732 001725 011676 067047 067222 000177 031767 20051 031727 20052 20053 20054 20055 20056 20057 20060 20061 20062 20063 20064 20065 20066 -NO DC 4 031730 002737 031733 043724 THIS ROUTINE READS THE BODY OF A RECORD SET INSTR = STB PTR, I INSTR TO STORE BODY INTO MEMORY INSTR = CPB PTR, I INSTR TO COMPARE BODY WITH MEMORY JSM RET LDA STA ADA TCA STA LDA CPA JMP JMP LDA STA IFZ STA XIF RDHED 1 MBPTR BDPTR CSIZE RWCTR RECNO CRECN + 2 DC 99 ZERO PRCTR READ THE RECORD HEAD HEAD READ ERROR GET MASTER BODY PTR (POINTS TO 1ST WORD IN MEMORY FOR THE BODY) AND INIT THE REF POINTER.

FORM MAX ADDR ALLOWED AND STORE ITS NEG FOR USE IN DETERMINING WHEN TO STOP READING GET TARGET RECORD NUMBER.

IS IT THE SAME AS THIS RECORD? YES NO; WE HAVE THE WRONG RECOR Dl SET PARTION (CTR= O; 1ST PART IS O DLFLG CLEAR THE DUMMY LINE FLAG.

INIT ITEMS NEC TO READ EACH PARTITION LDA STA LDA STA JSM M 4 PHCTR PHPTR PTR SHTHD -4 =NO OF WORDS IN PHEAD COUNTING THE PHEAD CHSUM PHPTR POINTS TO STORAGE AREA FOR THE PHEAD PUT HRDW IN READ, DATA, THI MODE THI IS IMPT FOR IPG DETECTIO Nl MUST GET BY THE POSTAMBLE INTO THE PGAP 000177 031721 076600 076605 DC 18 170503 073075 067224 LDA STA SSC SSC LDA SAR SLA JMP ZERO CHSUM + 5 R 5 4 -3 DC 89 INIT CHECK SUM REGISTER STAY HERE UNTIL FIND IPG SKIP WHEN IN DATA GET STATUS GET THE IRG BIT SKIP IF STILL PARTITION GAP HIT AN IRG JUST LEFT AN IPG 20067 043720 20070 043234 20071 043242 DC 40 20072 067215 20073 045730 20074 067076 20075 067103 20076 135733 20077 025721 JSM JSM JSM JMP ISZ JMP JMP STB ADB RSTHD PAMBL GETWD DC 17 PHCTR + 2 DC 2 PTR, I CHSUM SETS DATA MODE & PROPER THOLD GET BY PREAMBLE GET REST OF PARTITION HIT IPG HAVE I READ LAST WD IN PHEAD? N Ol THEN STORE IT ALL DONE WITH P HEAD STORE 1 WORD OF PHEAD ADD IN CHSUM 1,568,094 RBODY 02196000 20100 02197000 20101 02198000 20102 02199000 02200000 02201000 02202000 20103 02203000 20104 02204000 20105 02205000 02206000 02207000 02208000 02209000 02210000 20106 02211000 20107 02212000 20110 02213000 20111 02214000 02215000 02216000 02217000 02218000 20112 02219000 20113 02220000 20114 02221000 20115 02222000 20116 02223000 20117 02224000 20120 02225000 02226000 02227000 02228000 02229000 02230000 02231000 02232000 02233000 02234000 02235000 02236000 02237000 02238000 02239000 02240000 02241000 02242000 02243000 02244000 02245000 02246000 02247000 02248000 02249000 02250000 02251000 20121 20122 20123 035721 045733 067071 STB ISZ JMP CHSUM PTR DC 40 SAVE CHSUM MOVE PTR FOR NEXT STORE GET NEXT WD OF PHEAD FINISHED READING PHEAD; CHECK FOR ERRORS -, 015721 DC 2 067106 067215 es 001702 011716 067112 067224 CPB JMP JMP CHSUM B REG HAS TAPE-READ CHSUM + 2 DC 17 PHEAD CHSUM ERROR CHECK PARTITION RE-WRITE NUMBER IT MUST AGREE WITH THE ONE IN THE RECORD HEAD IF IT DOESN'T THEN WE HAVE AN OLD PARTITION LDA CPA JMP JMP RRWNO PRWNO + 2 DC 89 HIT AN OLD PARTITION CHECK TO SEE IF WE SKIPPED ANY PARTITIONS 001714 DCI 1 011767 067121 001723 013000 067231 042463 001714 020254 031767 IFZ LDA CPA JMP LDA CPA JMP JSM DC 12 LDA ADA STA XIF PARNO PRCTR DC 12 INSTR CPINS VFYER ERLN PARNO ONE PRCTR GET CURRENT PARTITION NUMBER SAME AS EXPECTED PART NUMBER? YES NO ERROR CAN'T ALTER MEMORY IF THIS IS A VERIFY SKIP IF NOT VERIF Yl VERIFY EXIT NO Wl IF PRGM, THIS INSERTS A DUMMY LINE OF 'S, AND LOGS A READ BODY ERROR.

CURRENT PARTITION NUMBER PLUS 1 EQUALS NEW EXPECTED PARTITION NUMBER.

MUST COMPUTE THE STARTING ADDR FOR STORING THE COMING PARTITION BODY BDPTR IS THE REFERENCE PTR FOR PROGRAM STORAGE PTR IS THE MOVING PTR IF IT IS A DATA RECORD, A RELATIVE ADDR IS COMPUTED USING THE PARTITION NO (PARNO) AND THE PARTITION LENGTH ( 128 WDS FOR DATA).

20124 20125 20126 20127 20130 20131 20132 20133 20134 20135 20136 001734 031733 005715 035731 020001 021732 172002 067137 031732 072402 067224 LDA STA LDBSTB ADA ADA SAP JMP STA SZA JMP BDPTR PTR PARLN WCTR B RWCTR + 2 + 4 RWCTR + 2 DC 89 GET REF PTR VALUE INIT MOVING PTR INITIALIZE THE WORD COUNTER FOR READING THE PARTITION BODY.

FORM MAX ADDR USED FOR BODY STORE AND DET IF IT EXCEEDS LMT.

0 =LAST PARTITION; > O =ERROR OK TO READ SAVE FACT THAT THIS COULD BE THE LAST PARTITION SKIP IF S Ol ERROR-EXCEED ALLOWED MEM SPACE NOW CHECK TO SEE IF THIS IS A DATA RECORD Page 258 325 325 326 Page 259 02252000 02253000 02254000 02255000 02256000 02257000 02258000 02259000 02260000 02261000 02262000 02263000 02264000 02265000 02266000 02267000 1,568,094 RBODY 20137 20140 20141 20142 20143 20144 20145 20146 20147 20150 20151 20152 02268000 20153 02269000 20154 02270000 20155 02271000 02272000 02273000 20156 02274000 20157 02275000 02276000 02277000 20160 02278000 20161 02279000 20162 02280000 20163 02281000 20164 02282000 20165 02283000 02284000 02285000 02286000 02287000 02288000 02289000 20166 02290000 20167 02291000 20170 02292000 02293000 20171 02294000 20172 02295000 02296000 02297000 02298000 02299000 20173 02300000 02301000 02302000 20174 02303000 20175 02304000 20176 02305000 20177 02306000 02307000 001701 010141 067146 001714 170606 021706 031733 000177 031721 072600 000004 043234 LDA CPA JMP LDA SAL ADA STA RTYPE PRGM + 5 PARNO 7 MBPTR PTR 326 GET REC TYPE IS THIS A PROGRAM RECORD? IT IS PROGRAM: NO ADDR COMPUTE.

GET PARTITION NO.

MULT BY PAR SIZE ( 128) ADD IN BODY SECTION BASE ADDR READ THE PARTITION BODY READ THE PARTITION BODY 043242 DC 3 067215 001723 070000 067161 067231 025721 035721 045733 055731 067153 LDA STA SFC LDA JSM JSM JMP LDA ZERO CHSUM R 4 PAMBL GETWD DC 17 INSTR EXE A JMP + 2 JMP ADB STB ISZ DSZ JMP VFYER CHSUM CHSUM PTR WCTR DC 3 GET A O INIT THE CHSUM WORD GUAR THAT I IGNORE I FLAG WHICH COULD BE THE EXTRA BIT OF CHSUM GET IN SYNC AGAIN WE ARE GETTING BY THE PROCESSING PREAMBLE READ I WD OF THE PARTITION BODY HIT GAP GET THE INSTRUCTION (EITHER A STORE, I FOR LOAD CMDS; OR A COMPARE, I FOR VERIFYING CMDS) EXECUTE THE REG AS AN INSTRUCTION IF STORE WAS EXECUTED, ALWAYS HIT THIS INSTR BUT IF CPB, ONLY IF COMPARE WAS CORRECT.

COMPARE ERROR ADD IN CHSUM SAVE CHSUM MOVE PTR; READY FOR NEXT WORD COUNT WORD; ALL DONE WITH BODY? N Ol GET ANOTHER WORD DONE READING THE PARTITION BOD Yl NOW LET'S CHECK FOR A READ ERROR NOW LET'S CHECK FOR A READ ERROR 043242 DC 30 067215 015721 067173 067215 001733 031734 001732 072402 067052 JSM JMP CPB GETWD DC 17 CHSUM JMP + 2 JMP DC 17 GET PARTITION BODY CHECKSUM FOUND GAP COMPUTED CHECKSUM (CHSUM) = TAPE-READ CHECKSUM (IN B REG)? NO ERROR; KEEP GOING BODY CHSUM ERROR -TAPE IS IN POSTAMBLE NOW; NEXT WE MUST SEE IF THERE IS MORE TO READ.

LDA PTR STA BDPTR LDA RWCTR SZA DC 35 JMR DC 4 IT'S AT 1 POS BEYOND LAST WD STORED THUS NEXT PART BODY WORD GOES THERE.

UPDATE PROG REF PTR GET CTR TO SEE IF DONE WITH REC A 0 MEANS ALL DONE MORE TO READ DONE READING THIS RECORD 327 Page 260 02308000 02309000 02310000 02311000 02312000 02313000 02313000 02315000 1,56 g,094 RBODY 20200 20201 20202 045676 031705 20203 067705 DC 35 DC 35 DC 36 ISZ LDA STA CRECN TWO TPOS JMP STSAF 327 NEXT REC IS PRESENT + 1 SET TPOS TO "WE KNOW THE NO OF THE NEXT REC" STSAF WILL STOP THE TAPE THIS WILL COMBINE HRDW AND SF STATUS AND DO A RET I IF AN ERROR WAS FOUND: RET 2 IF OK.

1,568,094 READ ERROR SECTION 02317000 02318000 ER 02319000 02320000 02321000 Ib 02322000 02323000 1.

02324000 2.

02325000 02326000 -G 02327000 1 02328000 2.

02329000 02330000 20204 043450 DC 6 02331000 20205 043456 02332000 20206 055731 02333000 20207 067003 02334000 20210 000052 02335000 20211 031763 02336000 20212 000127 02337000 20213 031705 02338000 20214 067705 02339000 02340000 N N 02341000 N N 02342000 02343000 G 02344000 1.

02345000 2.

02346000 02347000 20215 001723 DC 17 02348000 20216 013000 02349000 20217 067231 02350000 El 02351000 20220 042463 02352000 20221 067052 02353000 02354000 - W 02355000 02356000 20222 000236 DC 99 02357000 20223 067232 02358000 02359000 G 02360000 02361000 02362000 02363000 02364000 02365000 20224 000044 DC 89 02366000 20225 031763 02367000 20226 001723 02368000 20227 013024 02369000 20230 067200 02370000 20231 000237 VFYER 02371000 20232 031763 LOGER 02372000 20233 067200 ROR RECOVERY SECTION AND ERROR LOGGING q STR: DEFINES OPERATION OF RBODY ) INSTR=STINS MEANS READ MODE ) INSTR=CPINS MEANS VERIFY MODE ET TO DC 6 FOR ) REC HEAD CHSUM ERROR ) GAP DETECTED DURING REC HEAD READ JSM JSM DSZ JMP LDA STA LDA STA JMP BCKUP STPED WCTR ERDHD RHERR ERRWD D 16 TPOS STSAF GET READY FOR ANOTHER TRY OR GET LEFT OR ERROR: STOP TAPE ANOTHER TRY? YES READ HEAD; DON'T RESET WCT Rl READ ERROR IN RECORD HEAD REMEMBER THE ERROR SET TAPE POSITION TO "LOST".

COMBINE ERRORS AND EXIT OTICE THAT REC HEAD ERRORS ARE FATAL O RECOVERY IS ATTEMPTED ETTO DC 17 FOR ) UNEXPECTED GAP (IN PHEAD OR PBODY) ) CHSUM ERROR (IN PHEAD OR PBODY) LDA INSTR CPA CPINS JMP VFYER RLN WILL LOG A JSM ERLN JMP DC 4 CHECK THE MODE OF RBODY VERIF Yl READ BOY ERROR IN ERRW Dl RECOVERY INSERT A DUMMY LINE GET THE NEXT PARTITION E HAVE THE WRONG RECORD LDA NRERR JMP LOGER WRONG RECORD LOG ERROR & POSITION TAPE.

ET TO DC 89 FOR 1.) HITTING AN OLD PARTITION (FATAL ERROR) 2.) DETECTION OF AN IRG (FATAL ERROR) 3.) EXCEED MEMORY LIMIT (FATAL ERROR) LDA STA LDA CPA JMP LDA STA JMP RBERR ERRWD INSTR STINS DC 35 VYERR ERRWD DC 35 LOG ERROR = READ BODY FIND OUT WHICH MODE RBODY IS IN REA Dl STOP TAPE AND EXIT VERIF Yl LOG A VERIFY ERROR STOP TAPE AND EXIT 328 Page 261 328 1,568,094 PREAMBLE 02374000 02375000 51 02376000 02377000 02378000 T 1 02379000 TAPE 02380000 HRD 02381000 IS A S 02382000 FOR X 02383000 WILL 02384000 02385000 20234 076602 PAMBL 02386000 20235 17020102387000 20236 072676 02388000 20237 000004 02389000 20240 073074 02390000 20241 170201 02392000 02393000 SL 02394000 02395000 02396000 T 02397000 SERL 02398000 MOV 02399000 ONE 02400000 02401000 b 92402000 E 02403000 02404000 20242 072600 GETWO 02405000 20243 000004 02406000 20244 004254 02407000 02408000 20245 072203 NBIT 02409000 20246 076677 02410000 20247 170201 02411000 20250 000004 02412000 20251 050254 02413000 20252 176404 02414000 20253 174600 02415000 20254 024000 02416000 20255 067245 02417000 20256 174600 END 1 02418000 20257 024000 02419000 20260 170202 B ROUTINE PAMBL IIS ROUTINE IS USED TO GET SYNC'D WITH THE E IT RECEIVES SERIAL DATA BITS FROM THE W DECODER IT ASSUMES THE PREAMBLE ON THE TAPE STRING OF ZEROS ENDING IN A ONE PAMBL WAITS A ONE TO MEAN END OF PREAMBLE THIS ROUTINE NOT GET STUCK IN GAP:

SSC RET SFC LDA SLA RET + 2 1 -2 R 4 PAMBL CHECK FOR THE GAP FIRST GAP DETECTED ERROR SKIP IF DECODER NOT READY GET DATA BIT AND CLR FLG SKIP IF DATA BIT IS A ZERO FOUND A I END OF PREAMBLE JBROUTINE GETWD (FORMS 16 BIT WORDS) HIS ROUTINE FORMS 16 BIT WORDS FROM THE BIT AL DECODER THE BITS ENTER AT 0 BIT AND ARE ED UP TO THE SIGN BIT THIS ROUTINE IGNORES BIT BEFORE FORMING WORDS NORMAL EXIT: WORD DONE ERROR EXIT: HIT IPG (P+ 1) SFC LDA R 4 LDB ONE SFS SSC RET LDA AND SRM SRL ADB JMP WD SBL ADB RET + 3 -1 1 R 4 ONE ENDWD 1 A NBIT 1 A (P+ 2) IGNORE 1 BIT CLR FLAG; DON'T WANT TO SEE IT TWICE WHEN THIS MOVES TO SIGN BIT, THE WORD IS DON El NEXT BIT READY? NO ARE WE IN GAP? YES ERROR GET THE BIT AND CLR THE FLG.

MASK ALL BITS EXCEPT B O END OF WORD? NO STORE BIT GET ANOTHER BIT STORE FINAL BIT NORMAL RETURN Page 262 329 329 1,568,094 INDTA 02421000 02422000 02423000 02424000 1 02425000 THE 02426000 THIS 02427000 STOI 02428000 THE 02429000 02430000 20261 000005 INDTA 02431000 20262 050130 02432000 20263 072402 02433000 20264 170201 02434000 20265 000005 02435000 20266 170503 02436000 20267 073472 02437000 20270 170201 02439000 02440000.

02441000 02442000 02443000 THE 02444000 IRG:

02445000 02446000 20271 000005 INGAP 02447000 20272 170503 02448000 20273 073076 02449000 20274 170201 SUBROUTINE INDTA (FIND A DATA REGION) THIS ROUTINE LOOKS FOR A DATA REGION, BIT 4 OF STATUS REG (R 5) IS THE IRG BIT: O =DATA: I=GAP ROUTINE MUST ALSO WATCH FOR ERRORS WHICH CAN P THE SYSTEM BECAUSE DATA DETECTION REQUIRES TAPE TO BE MOVING.

LDA AND SZA RET LDA SAR RLA RET R 5 ERMSK + 2 1 R 5 4 INDTA GET STATUS ALLOWS COT,SFL & BET TO BE TESTD IS POF=COT=SFL=BET= 0 ? (NO ERRORS) NO; WE HAVE A HRDW ERROR YES; HRDW OK; GET STATUS AGAIN GET BIT 4.

SKIP IF STILL IN AN IRG SUB ROUTINE INGAP (FINDS IRG) INGAP LOOKS FOR INTER-RECORD GAPS IT USES _ IRG BIT (BIT 4) OF THE STATUS WORD:

= 1 MEANS INTER-REC GAP; IRG= 0 MEANS DATA.

LDA R 5 SAR 4 SLA INGAP RET I GET STATUS GET BIT 4 SKIP IF STILL IN DATA NORMAL RETURN 330 Page 263 330 1,568,094 ENCODER 02451000 02452000 02453000 02454000 02455000 BOL 02456000 IT V 02457000 02458000 02459000 W 02460000 02461000 20275 000057 NCODI 02462000 02463000 20276 043715 02464000 20277 043271 02465000 20300 043261 02466000 02467000 02468000 02469000 20301 000177 NCE Pl 02470000 20302 031714 02471000 20303 030004 02472000 20304 031721 02473000 20305 000074 02474000 20306 043730 02475000 02476000 02477000 02478000 20307 001702 02479000 20310 031716 02480000 20311 005706 02481000 20312 035734 02482000 20313 002736 02483000 20314 031733 02484000 20315 000137 02485000 20316 020257 02486000 20317 031730 02487000 20320 004254 02488000 20321 035717 02489000 02490000 _ 02491000 02492000 20322 043421 02493000 20323 105733 NC 10 02494000 20324 043421 02495000 20325 025721 02496000 20326 035721 02497000 20327 045733 02498000 20330 055730 02499000 20331 067323 02500000 20332 002737 NC 3 02501000 20333 031733 02502000 20334 043421 02503000 20335 004254 02504000 20336 043421 02505000 20337 001701 02506000 20340 072002 SUBROUTINE NCODE THIS ROUTINE WILL WRITE A RECORD HEAD AND )Y FOR AN EXISTING RECORD (MRK CREATES RECORDS) lILL WRITE THE RECORD IN "PARTITION" FORM.

RITE RECORD HEAD E LDA RLFDH TELL HRDW TO READ,LS,FWD THOLD=HI FOR GAP DETECTION JSM CMDW START GOING;WAIT TIL UP TO SPEED JSM INGAP COULD START IN DATA BEFORE GA Pl JSM INDTA FINDTHE RECORD PREAMBLE.

DELAY TURN-ON OF WRITE AMP LDA STA STA STA LDA JSM ZERO PARNO R 4 CHSUM WLFDD OUTCM 1ST PARTITION IS NO O DEF DATA LINE BEFORE WRITE DATA INIT CHECKSUM GIVE THE HRDW A WRITE CMD ( 33 MICROS SFTW DELAY) INIT FOR WRITING THE RECORD LDA STA LDB STB LDA STA LDA ADA STA LDB STR RRWNO PRWNO MBPTR B DPTR RHPTR PTR HDLN Ml RHCTR ONE TEM Pl SET PART RE-WR #= REC RE-WR # SET BDPTR TO LOC TO BE WRITTEN SET PTR TO POINT AT THE FIRST WORD OF THE RECORD HEAD.

SET RECORD HEAD CTR TO HDLN-I BECAUSE LOOP AT NC 10 DOES NOT INCLUDE WRITING RHEAD CHSUM.

MAKE TEM Pl POSITIVE BEC THAT MEANS MORE REC TO WRITE.

NOW WRITE THE RECORD HEAD.

JSM LDB JSM ADB STB ISZ DSZ JMP LDA STA JSM LDB JSM LDA RZA PUTWD PTR,I PUTWD CHSUM CHSUM PTR RHCTR NC 10 PHPTR PTR PUTWD ONE PUTWD RTYPE + 2 B REG=I; WRITE PREAMBLE, GET HEAD WORD UPDATE THE CHSUM ADVANCE THE PTR TO NEXT RHEAD WD COUNT WORD JUST WRITTEN: DONE? NOT YET; GET NEXT WORD DONE WITH RHEAD; NOW INITIALIZE PTR FOR PHEAD B REG HAS CHSUM; PUT IT ON TAP El SET B= 1 WRITE POSTAMBLE 331 Page 264 331 332 1,568,094 332 Page 265 02507000 20341 02508000 20342 02509000 20343 02510000 20344 02511000 02512000 02513000 02514000 20345 02515000 20346 02516000 20347 02517000 20350 02518000 20351 02519000 20352 02520000 02521000 02522000 02523000 20353 02524000 20354 02525000 20355 02526000 20356 02527000 20357 02528000 20360 02529000 20361 02530000 02531000 02532000 02533000 20362 02534000 20363 02535000 20364 02536000 20365 02537000 20366 02538000 20367 02539000 20370 02540000 20371 02541000 02542000 02543000 02544000 20372 02545000 20373 02546000 20374 02547000 20375 02549000 20376 02554000 20377 02555000 20400 02556000 20401 02557000 20402 02558000 20403 02559000 20404 02560000 20405 02561000 20406 02562000 20407 02563000 20410 02564000 20411 02565000 20412 02566000 20413 02567000 ENCODER 067414 001717 172002 067407 JMP LDA SAP JMP MARKO TEM Pl + 2 NC 1 1 WRITE AN PG WRITE AN IPG 000101 NCI 043730 000177 031721 000147 031730 042523 000177 030004 000074 043730 004254 043421 LDA JSM LDA STA LDA STA WLFTG OUTCM ZERO CHSUM M 3 PHCTR RTYPE= O; DO MARK DONE YET? SKIP IF NOT DONE WRITING HAVE FINISED THIS RECORD WRITE GAP-FOR IPG COULD DESTROY EAST BIT OF POSTAM UPDATE PARTITION HEAD CTR ___ FOR NOW, DATA AND PROG PARLN ARE TREATED THE JSM LDA STA LDA JSM LDB JSM PTCLC WRITE AN IPG & COMPUTE PART LENGTH ZERO R 4 WANT DATA LINE TO BE 0 WHEN EWA WLFDD GET READY TO WRITE DATA AGAIN OUTCM ONE PUTWD WRITE PREAMBLE WRITE PARTITION HEAD WRITE PARTITION HEAD 105733 NC 13 043421 025721 035721 045733 045730 067362 043421 LDB JSM ADB STB ISZ ISZ JMP JSM PTR,I PUTWD WRITE PARTITION HEAD CHSUM UPDATE THE CHSUM CHSUM PTR PHCTR NC 13 STILL PART, HEAD TO ENCODE PUTWD WRITE HEAD CHECKSUM NOW HANDLE PARTITION BODY 004254 043421 000177 031721 105734 NC 14 043421 025721 035721 045734 055731 067376 045714 067332 043726 NCI I 031705 045676 170201 LDB JSM LDA STA LDB JSM ADB STB ISZ DSZ JMP ISZ JMP JSM LDA STA ISZ RET ONE PUTWD ZERO CHSUM BDPTR,I PUTWD CHSUM CHSUM B DPTR WCTR NC 14 PARNO NC 3 STPCA TWO TPOS CRECN WRITE PROG PREAMBLE RESET CHECKSUM GET BODY WORD WRITE PARTITION BODY UPDATE THE CHSUM MORE TO WRITE INC PARNO FOR NEXT PAR WRITE CHECK FOR ADDIT PARTITIONS OUTPUT A STOP CMD TO THE HRDW.

SET TAPE POS INDICATOR TO "WE KNOW THE # OF NEXT REC"; INCR TO NEXT REC.

NORMAL RETURN 332 1,568,094 332 1,568,094 Page 266 02568000 02569000 02570000 20414 004257 02571000 20415 043421 02572000 20416 055731 02573000 20417 067414 02574000 20420 170201 ENCODER __ IT IS A MARK COMMAND MARKO LDB MI JSM PUTWD DSZ WCTR JMP MARKO RET 1 GET ALL ONES WORD FOR TAPE NORMAL RETURN 02576000 02577000 02578000 02579000 02580000 02581000 02582000 02583000 02584000 02585000 20421 000157 02586000 20422 072600 02587000 20423 174716 02588000 20424 034004 02589000 20425 072175 02590000 02591000 20426 072600 02592000 20427 030004 02593000 20430 170201 02594000 02595000 02596000 -_ SUBROUTINE PUTWD (WRITES 16 BIT WORD) WRLTES THE B-REG ONTO TAPE SIGN BIT FIRST ASSUMES BIT 0 GOES TO BIT SERIAL ENCODER IT ALWAYS WRITES AN EXTRA 1 ON THE TAPE TO ALLOW EXTRA PROCESSING TIME AT THE END OF A WORD.

PUTWD LDA MI 5 SET BIT CTR NC 30 SFC WAIT TIL ENCODER IS READY RBR 15 GET B 15 INTO BO STB R 4 GIVE HRDW ENC BO RIA NC 30 SKIP IF NOT DONE WITH THE WORD _____ RIA INSTR WILL LEAVE A= 1 WHEN DON El SFC WAIT FOR ENCODER STA R 4 OUTPUT EXTA BIT= 1 RET 1 ___ ON EXIT,B REG HAS WORD WRITTEN ON THE TAPE -333 333 1,568,094 WGAP WGAP (WRITES GAP ASSUMES B HAS NO OF TACH PULSES ___ WGAP (WRITES GAP: ASSUMES B HAS NO OF TACH PULSES LDA JSM SFC LDA SIB JMP RET WLFTG OUTCM R 4 + 2 WG Pl PUT HRDW INTO WRITE,LS, FWD,TAC, GAP MODE LOW SPEED: TACH PULSE? CLRTAC YES; ARE WE DONE? NO; KEEP COUNTING NORMAL RETURN SUBROUTINE WGAPH (WRITE GAP AT HS) ___ SUB ROUTINE WGAPH (WRITE GAP AT HS) 000124 WGAPH 043730 050130 072476 010254 067545 067705 LDA JSM LDA AND SZA CPA JMP JMP WHFTG OUTCM R 5 ERMSK -2 ONE HOLE STSAF PUT HRDW INTO WRITE,HS, FWD,TAC,GAP MODE GET HRDW STATUS CHECK FOR HRDW ERRORS SKIP IF NONE IS HRDW ERROR=BET? YES-DETERMINE POSITION.

NO-ERROR WGAP WG Pl 20431 20432 20433 20434 20435 20436 20437 000101 043730 072600 000004 076502 067433 170201 Page 267 02598000 02599000 02600000 02601000 02602000 02603000 02604000 02605000 02606000 02607000 02610000 02611000 02612000 02613000 02614000 02615000 02616000 02617000 02618000 02619000 02620000 20440 20441 20442 20443 20444 20445 20446 20447 334 334 1,568,094 BCKUP SUBROUTINE BCKUP ___ SUBROUTINE BCKUP 20450 043475 BC Kt 20451 043261 BU Pl THIS ROUTINE WILL TURN THE TAPE AROUND AND POSITION THE TAPE IN THE FIRST GAP IT SEES.

IT IS DESIGNED PRIMARILY FOR GETTING BACK IN FRONT OF A RECORD AFTER READING ITS HEAD.

JSM TURN JSM INDTA JSM LDA JSM JMP INGAP SETLN WAIT STPCA THIS TURNS THE TAPE ALLOWS TURN TO HAVE I GAP + I DATA SECTION UNCERTAINTY.

FIND AN INTER-RECORD GAP THIS WILL WAIT A SETTLING DISTANCE.

STOP CASSETTE & EXIT JIP 043271 002734 043525 067726 335 _ SUBROUTINE STPED s C 20456 043726 STPED 20457 000005 STPW 20460 170504 20461 073476 20462 002727 20463 072100 20464 170201 THIS ROUTINE WILL WAIT UNTIL THE CASSETTE OMES TO A DEAD STOP.

JSM LDA SAR RLA LDA RIA RET STPCA R 5 -2 COAST OUTPUT A STOP CMD TO THE HRDW GET HRDW STATUS PUT MVG BIT INTO LSB SKIP IF STILL MOVING WAIT UNTIL IT'S DONE COASTING (ABOUT 1 5 MSEC) EXIT 335 Page 268 02622000 02623000 02624000 02625000 02626000 02627000 02628000 02629000 02630000 02631000 02632000 02633000 02634000 02635000 02636000 20452 20453 20454 20455 02638000 02639000 02640000 02641000 02642000 02643000 02644000 02645000 02646000 O 02647000 02648000 02649000 02650000 336 1.56 R 8094 Page 269 CARTP 02652000 02653000 02654000 02655000 02656000 P 02657000 Tl 02658000 E 02659000 02660000 20465 043635 CARTP 02661000 20466 170201 02662000 20467 000005 02663000 20470 170506 02664000 02665000 20471 073003 02666000 20472 004234 02667000 20473 035763 02668000 20474 067705 C -SUBROUTINE CARTP THIS CHECKS TO SEE IF A CARTRIDGE IS WRITE ROTECTED ONLY CALL THIS ROUTINE WHEN YOU WISH O WRITE ON THE TAPE BECAUSE IT GENERATES AN RROR IF THE CARTRIDGE IS WRITE PROTECTED.

JSM RET LDA SAR SLA LD 8 STB JMP STSBF l R 5 C WPERR ERRWD STSAF CHECK HRDW STATUS ERROR LOAD HRDW STATUS REG.

MOVE WPR BIT INTO LSB IF WPR= 0, START WITH NO ERRORS SKIP IF IT IS OK TO WRITE ERROR-WRITE NOT ALLOWED LOG ERROR=WRITE NOT ALLOWE Dl COMBINE ERRORS & EXIT cicl 337 1,568,094 337 t TURN ____ TURN (REVERSES TAPE DIR; POS= 1- 3 " FROM ENTRY) ENTRY POINTS: 1) TURN-IF FINAL SPEED=LS 2) T 7-IF FINAL SPEED=ENTRY SPEED=HS 000117 TURN 061710 050057 043730 002730 T 7 043525 001710 170703 TI 073302 073201 170713 043730 004177 20524 170201 LDA IOR AND JSM LDA JSM LDA RAR SLA SLA RAR JSM LDB D 32 CUCMD RLFDH OUTCM TACLS WAIT CUCMD 4 + 2,S +I,C 12 OUTCM ZERO SPEED BIT( 5)= (LS) NOW HAVE LS SET THOLD=HI (BIT 2 = 0 IN SFTW) THIS GIVES A BUFFER ZONE= 22 " BEFORE TURNING GET PRESENT HRDW CMD GET DIR BIT THESE 2 INSTRUCTIONS REVERSE BUT 0 OF A REG GET CORRECT ORIENT.

TURN THIS THING ROUND TAC CTR INIT.

NOW COUNT TAC PULSES (IN B) WHILE DECELERATING SFC SIB LDA LDA SAR RLA TCB + 3 + 1 R 4 R 5 T 2 TAC PULSE? YES; COUNT IT CLRFLG NO TAC PULSE; GET HRDW STATUS GET 10 % OF SPD BIT SKIP IF STILL MOVING NOW COUNT TAC PULSES WHILE ACCELERATING (COUNT SAME NUMBER NOW AS WHEN DECELERATING SFC LDA R 4 RIB T 5 RET I WAIT HERE FOR TAC PULSE CLR FLAG COUNT DOWN 1; SKIP IF MORE TAC PULSE TO COUNT.

ALL DONE Page 270 02670000 02671000 02672000 02673000 02674000 02675000 02676000 02677000 02678000 02679000 02680000 02681000 02682000 02683000 02684000 02685000 02686000 02687000 02688000 02689000 02689100 02689200 02689300 02690000 02691000 02692000 02693000 02694000 02695000 026900 02697000 02698000 02699000 02700000 02701000 02702000 02703000 02704000 20475 20476 20477 20500 20501 20502 20503 20504 20505 20506 20507 20510 20511 20512 20513 20514 20515 20516 20517 20520 20521 20522 20523 072603 T 2 076501 000004 170504 073473 174040 072600 T 5 0004 076176 1,568,094 337 337 1,568,094 Page 271 02706000 02707000 02708000 02709000 02710000 02711000 02712000 20525 031717 WAIT 02713000 20526 001710 02714000 20527 052742 02715000 20530 043730 02716000 20531 072600 02717000 20532 030004 02718000 20533 045717 02719000 20534 067531 02720000 20535 170201 02722000 02723000 02724000 02725000 ENTR 02726000 02727000 EXIT:

02728000 02729000 02730000 20536 000005 MSBET 02731000 20537 073405 02732000 20540 072600 02733000 20541 000004 02734000 20542 076174 02735000 20543 170202 02736000 20544 170201 BETM WAIT (NUMBER IN A REG-NEGATIVE-GIVES AMT OF TAC PULSES WAITED) 483 TAC PULSES (TO SFTW) = 1 INCH OF TAPE STA LDA AND JSM SFC STA ISZ JMP RET TEM Pl CUCMD TACMD OUTCM R 4 TEMP I -3 SAVE LENGTH OF THIS WAIT GET CURRENT HRDW CMD NOW PUT THE HRDW INTO TAC MODE; MUST COUNT TAC PULSES.

WAIT FOR TAC PULSE CLRFLG COUNT TAC PULSE; DONE? NOT YET; KEEP COUNTING ALL DONE -MSBET (MEASURE A DISTANCE OR DETECT BET) Y: DISTANCE IN B REG (NEGATIVE NO) RET 1-BET OCCURRED-B REG HAS PARTIAL CNT RET 2-THE DISTANCE WAS MEASURED LDA RLA SFC LDA RIB RET RET R 5 BETM R 4 MSBET 2 GET HRDW STATUS SKIP IF BET OCCURRED WAIT FOR TAC PULSE CLRFLG SKIP IF NOT DONE DIST HAS BEEN MEASURED BET OCCURRED 338 338 1,568,094 339 Page 272 02738000 02739000 02740000 02741000 20545 02742000 20546 02743000 20547 02744000 20550 02745000 20551 02746000 02747000 20552 02748000 20553 02749000 20554 02750000 20555 02751000 20556 02752000 20557 02753000 20560 02754000 20561 02755000 20562 02756000 20563 02757000 20564 02758000 20565 02759000 20566 02760000 20567 02761000 20570 02762000 20571 02763000 20572 02764000 20573 02765000 20574 02766000 20575 02767000 20576 02768000 20577 02769000 20600 02770000 20601 02771000 20602 02772000 20603 02773000 20604 02774000 20605 02775000 20606 02776000 02777000 02778000 02779000 20607 02780000 20610 02781000 20611 02782000 20612 02783000 20613 02784000 20614 02785000 20615 02786000 20616 02787000 20617 02788000 20620 02789000 20621 02790000 20622 02791000 20623 02792000 20624 02793000 20625 ___ HOLE (DETERMINES TAPE POSITION WHEN HIT HOLE) 170501 050127 062744 043730 004006 006723 043536 067557 067630 000006 006723 043536 067607 043501 006724 043536 067630 006725 043536 067573 067630 000006 043475 002733 043525 043726 004006 004137 170503 073402 004127 035705 170202 HOLE LDA R 5 SAR 2 AND D 16 IOR RHRTL JSM OUTCM THE DIR IS OPPOSITE LDB R 6 LDB M 301 JSM MSBET JMP MDL JMP EHOL MDL LDA R 6 LDB M 301 JSM MSBET JMP DDIS JSM T 7 LDB M 241 JSM MSBET JMP EHOL LDB M 121 JSM MSBET JMP + 2 JMP EHOL LDA R 6 JSM TURN LDA DLYA JSM WAIT JSM STPCA LDB R 6 LDB D 8 SAR 4 RLA + 2 LDB D 16 STB TPOS RET 2 GET HRDW STATUS: MOVE STATUS DIR TO SAME POSITION AS CMD DIR BIT.

ISOLATE DIRECTION BIT PUTS HRDW INTO TAC MODE,HS AND OPPOSITE DIRECTION.

BEC CMD & STATUS ARE OP SENSE CLR BET GO FOR 30 INCHES OF TAPE OR A BET, WHICH EVER COMES FIRST HIT BET-GET TO MAIN DECODE LOOP CAN'T FIND "ENTRY" HOLE CLR BET GO 30 INCHES OF TAPE OR UNTIL BET OCCURS.

HIT BET-DECODE THE DIST TRVLE Dl WENT 30 IN -IN VALID TAPE: TURN GO FOR 24 IN WATCH FOR HOLE Sl ERROR-HIT UNEXPECTED HOLE GO FOR 12 IN I EXPECT TO HIT A HOLE BEFORE THE Nl FOUND HOL El CONTINUE RECOVERY ERROR-MISSED A HOLE CLRBET TURN AROUND-EXIT AT LOW SPEED GUAR I GET BY THE HOLE I JUST SENSE Dl (IN VALID DATA NO Wl) OUTPUT A STOP CMD TO THE HRDW.

CLR BET SET B TO REWIND POSITION SET TPOS BASED ON DIR BIT SKIP IF DIR=FWD=REWIND AT EO Tl SAVE THE TAPE POSITION _ DECODE THE DISTANCE BETWEEN HOLES 026722 DDIS 000001 026726 176004 002745 BOT 043730 067557 022725 DD 1 172402 067557 004006 006726 043536 067613 002744 EOT ADB LDA ADB SBP LDA JSM JMP ADA SAM JMP LDB LDB JSM JMP LDA P 301 B MQTI DDI RHFTL OUTCM MDL MI 21 + 2 MDL R 6 MQTI MSBET BOT RHRTL FORM POS # = DIST TRAVELED PUT A COPY IN A DID WE GO 1/4 INCH? SKIP IF N Ol AT BOT THUS GO FWD TO GO TO MAIN DECODING LOOP.

DID WE GO 12 INCHES? SKIP IF YES NEED MORE DECODING CLR BET; WE WENT I FOOT GO AT LEAST 1/4 INCH OR UNTIL BET HIT BET-THUS 2 HOLES 1/4 ";ATBOT AT EOT; GO REVERSE TO FIND 339 340 1.568 094 Page 273 HOLE 02794000 20626 043730 02795000 20627 067557 02796000 02797000 02798000 02799000 20630 000175 02800000 20631 031763 02801000 20632 000127 02802000 20633 031705 02803000 20634 067705 02804000 JSM OUTCM VALID TAPE.

JMP MDL DO MORE DECODIN Gl ERRORS DETECTED BY HOLE ___ ERRORS DETECTED BY HOLE EHOL LDA STA LDA STA JMP HOERR ERRWD D 16 TPOS STSAF HIT EXTRA HOLE OR MISSED ON El LOG ERROR SET POSITION TO LOS Tl COMBINE ERRORS AND EXIT STSAF WILL STOP THE TAPE 340 Page 274 STSBF 02806000 02807000 02808000 02809000 20635 02810000 20636 02811000 20637 02812000 20640 02813000 20641 02814000 20642 02815000 20643 02816000 20644 02817000 02645 02818000 20646 02819000 20647 02820000 20650 02821000 20651 02822000 20652 02823000 20653 02824000 20654 02825000 20655 02826000 20656 02827000 20657 02828000 20660 02829000 20661 02830000 STSF (HRDW STATUS CHECK BEFORE EXEC) STSBF (HRDW STATUS CHECK BEFORE EXEC) 000177 STSBF 031763 STSNI 170504 073476 043456 STSNP STSBH 170701 073011 030007 000006 000127 031705 170701 073002 067705 170716 BF 1 073014 000127 031705 ______ 02831000 20662 000146 02832000 20663 004254 02833000 20664 076100 02834000 20665 072176 02835000 20666 030007 02836000 20667 000005 02837000 20670 170700 02838000 20671 073002 02839000 20672 067705 02840000 20673 170701 BF 2 02841000 20674 073004 02842000 20675 000127 02843000 20676 031705 02844000 20677 067705 02845000 20700 170714 BF 3 02846000 20701 073003 02847000 20702 043545 02848000 20703 067705 02849000 20704 170202 LDA STA LDA SAR RLA JSM LDA RAR SLA STA LDA LDA STA LDA RAR SLA JMP RAR SLA LDA STA LDA LDB RIB RIA STA LDA RAR SLA JMP RAR SLA Lp A STA JMP RAR SLA JSM JMP RET ZERO ERRWD R 5 -2 STPED R 5 2 BF 1 R 7 R 6 D 16 TPOS R 5 2 + 2 STSAF BF 2 D 16 TPOS M 2 ONE -2 R 7 R 5 1 + 2 STSAF 2 BF 3 D 16 TPOS STSAF 13 + 3 HOLE STSAF NEW INSTR START WITH NO ERRORS GET HRDW STATUS PUT MVG BIT INTO LSR SKIP IF SPEED > 2 INCHES/SEC GET CASSETTE DEAD STOPPED GET HRDW STATUS GET COT INTO LSB SKIP IF CART WASN'T PULLED CART WAS REMOVED; CLR COT CLR BET SET TAPE POSITION TO LOST GET HRDW STATUS PUT COT INTO LSB SKIP IF WE HAVE A NEW CART NO CART IN MACHINE GET SFL INTO LSB SERVO OK? (SFL= 0 FOR YES) SET TAPE POSITION INDICATOR TO LOST.

THE SERVO FAIL COULD BE LEFT FROM PREV USER CMD NOW WAIT FOR 4 SECONDS BEFORE CLEARING SFL BIT.

TRY CLEARING SFL GET HRDW STATUS GET SFL BIT INTO LSB SERVO STILL BAD? YES; COMBINE ERRORS GET POF BIT INTO LSB IS POWER ON? (SKIP IF YES) SET TAPE POSITION TO LOST COMBINE ERRORS AND EXIT GET BET INTO LSB.

BET? (SKIP IF NO) YES; HOLE WILL FIX THAT COMBINE ERRORS & EXIT HRDW OK: EXIT 1,568,094 341 341 1,568,094 342 ___ SUBROUTINE STSAF THIS ROUTINE COMBINES SOFTWARE ERRORS AND HARDWARE ERRORS INTO A SINGLE ERROR WORD CALLED ERRWD; THIS WORD CAN BE EXAMINED FROM MSB TO LSB AND THE MOST SEVERE ERROR WILL BE DETECTED FIRST.

043726 STSAF 170613 061763 031763 072402 170201 170202 JSM LDA SAL IOR STA SZA RET RET STPCA R 5 12 ERRWD ERRWD + 2 1 STOP THE TAPE.

GET THE HRDW STATUS MOVE 4 HRDW ERROR BITS TO MSB.

INCLUDE SOFTWARE ERRORS SAVE FOR POSSIBLE FUTURE USE AND ERRORS? ( O =NO ERRORS) YE Sl N Ol 342 Page 275 02851000 02852000 02853000 02854000 02855000 02856000 02857000 02858000 02859000 02860000 02861000 02862000 02863000 02864000 02865000 02866000 02867000 20705 20706 20707 20710 20711 20712 20713 20714 CMDW SUBROUTINE CMDW THIS ROUTINE OUTPUTS THE A REG TO THE HRDW AS A CMD THEN IT COUNTS ENOUGH TAC PULSES TO GUARANTEE THAT THE TAPE REACHES LOW SPEED' ONLY THE A REG IS USED.

20715 043730 CMDW 20716 002730 CMDWI 20717 067525 JSM OUTCM LDA TACLS JMP WAIT OUTPUT CMD COUNT ENUF TACS TO REACH LS COUNT DISTANCE & EXIT SUBROUTINE OUTCM (GIVES HRDW A CMD) ___ SUB ROUTINE OUTCM (GIVES HRDW A CMD) 20720 000053 RSTHD 20721 005723 20722 017024 20723 067730 20724 000057 SHTHD 20725 067730 20726 002746 STPCA 20727 061710 20730 073201 OUTCM 20731 061707 20732 050045 20733 031710 20734 030005 20735 170201 ENTRY POINTS:

1) RSTHD SET READ THOLD HI(VFY) OR LO(LOAD) 2) SHTHD -SET READ THOLD HI(ACCUR GAP DETECT).

3) STPCA OUTPUT A STOP CMD TO THE HRDW.

4) OUTCM OUTPUT THE A REG AS A HRDW CMD.

LDA LDB CPB JMP LDA JMP LDA IOR SLA IOR AND STA STA RET RLFDL INSTR STINS OUTCM RLFDH OUTCM STOP CUCMD +I,C FLG 1 KPMSK CUCMD R 5 GET CMD FOR A NORMAL READ CHECK TO SEE IF CMD ISA READ OR A VERIF Yl IT IS A READ IT IS VERIFY; SET THOLD TO HI AND OUTPUT THE CMD.

GET THE STOP CMD & INCLUDE THE DIRECTION OF PREV CMD.

CLR THE TRACK BIT INCLUDE CURRENT TRACK B 0-7 UNCHNG'D;B 8 = O SAVE THE CMD.

TELL H RDW ALL DONE Page 276 02869000 02870000 02871000 02872000 02873000 02874000 02875000 02876000 02877000 02878000 02879000 02881000 02882000 02883000 02884000 02885000 02886000 02897000 02888000 02889000 02890000 02891000 02892000 02893000 02894000 021 f 95000 02 lt 96000 02 t 97000 02 98000 02099000 0290000 02 OIO 02900000 02903000 02905000 343 343 1,568,094 344 Page 277 02907000 02908000 02909000 02910000 02911000 02912000 02913000 20736 02914000 20737 02915000 20740 02916000 20741 02917000 20742 02918000 20743 02919000 20744 02920000 02921000 02922000 02923000 02924000 02925000 02926000 20745 02927000 20746 02928000 20747 02929000 20750 02930000 02931000 02932000 02933000 20751 02934000 20752 02935000 20753 02936000 20754 02937000 20755 02938000 20756 02939000 20757 02940000 20760 02941000 20761 02942000 20762 02943000 20763 02944000 2076402945000 20765 02946000 20766 02947000 20767 02948000 20770 02949000 20771 02950000 02951000 20772 02952000 20773 02953000 20774 02954000 02955000 02956000 02957000 20775 02958000 20776 02959000 20777 02960000 21000 02961000 21001 02962000 21002 1,568,094 344 MARK SUBROUTINE 043465 MRK 170201 001705 170500 073003 042210 170201 000177 031701 031700 031702 001720 031677 170506 030001 001677 050053 072402 076501 000001 170602 174600 020001 021677 004000 174502 020001 020140 031726 031731 005722 INPUTS: NOREC=NUMBER OF RECORDS MSIZE=ABSOLUTE SIZE IF EACH RECORD JSM RET LDA SAR SLA JSM RET CARTP 1 TPOS 1 + 3 IDRI CHECK TO SEE IF CART IS PROT'ED.

ERROR-THIS CART IS PROTECTE Dl CHECK TO SEE IF WE MUST READ A RECORD HEAD TO DETERMINE POSITION (SKIP=NO) YES-TPOS= 2; GO FWD & FIND A REC ERROR WHEN I TRIED TO READ RHEAD _ AT THIS POINT, TPOS SHOULD BE 1, 8, OR 16 INITIALIZATION INITIALIZATION LDA STA STA STA ZERO RTYPE RECORD TYPE= 0 FOR EMPTY RECORD CSIZE CURRENT SIZE= 0 WHEN MARKED RRWNO RE-WRITE NUMBER STARTS AT 0 COMPUTE ACTUAL MARKING LENGTH LDA STA SAR STA LDA AND SZA SIB LDA SAL SBL ADA ADA LDB SBR ADA ADA 001705 MRK 6 010137 066023 010254 066034 000117 STA STA LDB MSIZE ASIZE 7 B ASIZE MSKL 7 + 2 + 1 B 3 1 B ASIZE A 3 B SLKRH MRKSZ WCTR NOREC GET BUFFERED ABS SIZE DEF PART OF REC HEAD DIVIDE BY 128 NO OF FULL PARTITIONS MASK OFF LOW 7 BITS ADD 1 FOR PARTIAL PARTITION GET NP=NUMBER OF PARTITIONS NP 8 NP 2 A REG=NP 10 =POH (PAR OVERHEAD) FORM TOTWD SAVE IN B FORM VARSL=TOTWD 1 i 2 5:.

A REG= 1 125 TOTWD MARKING SIZE=l 125 TOTWD + RECORD HEAD SLAC Kl SAVE THIS FOR NCODE SET UP THE WORD COUNTER GET # OF RECTO BE MARKED.

DETERMINE WHERE TO START MARKING THE TAPE LDA CPA JMP CPA JMP LDA TPOS D 8 MRK 8 ONE MRK 2 MPERR GET PRESENT TAPE POSITION ARE WE AT REWIND? YES DO WE KNOW WHERE WE ARE? YES-START MARKING FROM THAT REC NO-ERROR-CAN'T MARK WHEN 1,568,094 Page 278 02963000 21003 031763 02964000 21004 067705 02965000 02966000 02967000 02968000 02969000 RI 02970000 TI 02971000 1 02972000 A.

02973000 02974000 02975000 RI 02976000 02977000 A 02978000 02979000 R 02980000 02981000 21005 004257 MRKS 02982000 21006 000137 02983000 21007 031731 02984000 21010 011705 02985000 21011 035676 02986000 21012 045676 02987000 21013 066014 02988000 02989000 21014 000254 92990000 21015 031677 02991000 02992000 02993000 02994000 RE 02995000 02996000 21016 000057 02997000 21017 O f 43715 02998000 21020 043261 02999100 21021 043275 03000 O 21022 067200 03001000 03002000 03003000 03004000 03005000 03006000 03007000 21023 076462 MRK 8 03008000 21024 000074 03009000 21025 043715 03010000 21026 000177 03011000 21027 031676 03012000 21030 002735 03013000 21031 031731 03014000 03014100 NOTE 03014200 03014300 03014400 MARK STA ERRWD POSITION IS UNKNOWN JMP STSAF COMBINE ERRORS AND EXIT -SPECIAL CASE: RE-MARK A RECORD HEAD.

THIS OPTION SHOULD ONLY BE USED WHEN YOU CAN'T EAD A RECORD HEAD THE MRK MODULE RECOGNIZES -HIS CASE BY NOREC= O MSIZE MUST ALSO BE 0, BUT THE is put:S FHIS CHECK THE HEAD IS REWRITTEN WITH AN BSOLUTE SIZE OF I WORD.

SUPPOSE YOU WISH TO REMARK THE HEAD OF ECORD X:

1) IF X= 0, THEN DO A REWIND OTHERWISE DO FIND X.

2) NOW DO A MARK CMD WITH "NUMBER OF ECORDS" PARAMETER = 0 AND "RECORD SIZE" PARAMETER LDB M 1 LDA D 8 STA WCTR CPA TPOS STB CRECN ISZ CRECN JMP + 1 IFZ LDA ONE STA ASIZE XIF NEEDED IN CASE AT REWIND.

WRITE 8 WDS OF "BODY" AFTER REMARKING THE HEAD (MIN AT ORGNAL MARK IS 18 WDS) AT REWIND? YES; THIS -1 GOES TO 0-NXT INST RE-MARKING NEXT REC IN FWD DI Rl SLACK SINCE CRECN=-1 IS POSSIBLE FORCE NEW ABSOLUTE SIZE TO BE 1 WORD.

-WE ARE IN THE IRG OF THE RECORD PRECEDING THE CORD THAT MUST BE RE-MARKED.

LDA RLFDH JSM CMDW JSM INDTA JSM NCODE JMP DC 35 GO LS,,FWD WE MUST GET OUT OF THIS IRG SINCE INCODE KEYS OFF OF THE IRG.

RE-MARK THE REC HEAD(RTYPR= 01) STOP; SET TPOS; EXIT MARK FROM REWIND -WRITE 'DEAD ZONE' AT BOT 578 LDA JSM LDA STA LDA STA MRK 5 WLFDD CMDW ZERO CRECN DEADZ WCTR B=NOREC; NOREC= O IS SPECIA Ll WRITE,LS,FWD,DATA,DATA AND START GOING; WAIT TIL UP TO SPEED 1 ST REC IS O SET WCTR TO THE NUMBER OF ALL ONES WORDS IN THE "DEADZONE".

E HRDW IN WRT, TAC, DATA: SHOULD BE IN WRT, DATA, DATA RESULT IS A LONGER DEAD ZONE.

345 345 1,568,094 Page 279 03014500 21032 043414 03015000 21033 066042 03016000 03017000 03018000 03019000 21034 076451 MRK 2 03020000 21035 043275 03021000 21036 045676 MRK 7 03022000 21037 055722 03023000 21040 066042 03024000 21041 066052 03025000 21042 001726 MRK 3 03026000 21043 031731 03027000 21044 006733 03028000 21045 043431 03029000 21046 000005 03030000 21047 073431 03031000 21050 043301 03032000 21051 066036 03033000 03034000 03035000 03036000 21052 000177 MRK 1 03037000 21053 031677 03038000 21054 000123 03039000 21055 031731 03040000 21056 006733 03041000 21057 043431 03042000 21060 043301 03043000 21061 006731 03044000 21062 043431 03045000 03046000 03047000 03048000 21063 000057 03049000 21064 043730 03050000 21065 043475 03051000 21066 000005 03052000 21067 073411 03053000 21070 002733 MRK 9 03054000 21071 043525 03055000 21072 043451 03056000 03057000 21073 043705 03058000 21074 170201 03059000 21075 000145 03060000 21076 031705 03061000 21077 170202 03062000 03063000 03064000 03065000 03066000 21100 043545 MRK 4 03067000 21101 170201 03068000 21102 014137 03069000 21103 067630 MARK JSM MARKO WRITE THE DEAD ZONE JMP MRK 3 GET INTO MAIN MARK LOOP IN IRG OF INITIAL MARKING RECORD SZB JSM ISZ DSZ JMP JMP LDA STA LDB JSM LDA RLA JSM JMP MRK 5 NCODE CRECN NOREC + 2 MRK 1 MRKSZ WCTR IRGLN WGAP R 5 MRK 4 NCE Pl MRK 7 B=NOREC; NOREC= 0 IS SPECIA Ll RE-WRITE HEAD&BODY OF IST REC.

ANY MORE RECORDS TO MARK? YES NO-DONE SET WCTR TO NUMBER OF ALL ONES WORDS IN THE RECORD BODY.

WRITE AN IRG GET HRDW STATUS SKIP IF BET OCCURRED AN ENTRY POINT OF NCODEPREAMBLE MUST CHECK FOR MORE RECORDS NOW MARK THE EXTRA RECORD (ASIZE= 0) LDA STA LDA STA LDB JSM JSM LDB JSM ZERO ASIZE P 20 WCTR IRGLN WGAP NCEP 1 EVTLN WGAP SET ABSOLUTE SIZE= 0 WRITE 20 WDS OF BODY; THIS HELPS BACKING UP IF RUN INTO EO Tl WRITE IRG WRITE THE EXTRA RECORD WRITE END OF VALID TAPE GET BACK TO EXTRA RECORD LDA JSM JSM LDA RLA LDA JSM JSM JSM RET LDA STA RET RLFDH OUTCM TURN R 5 MRK 4 IRGLN WAIT BUPI 1 STSAF 1 TWO TPOS NOW PUT HRDW INTO READ MODE (THOLD=H 1 FOR GAP DETECT) TURN AROUND LOAD HRDW STATUS.

SKIP IF WE HIT A HOLE.

NOW WAIT I " TO MAKE SURE I'M IN THE EVT Ml THIS GETS ME INTO THE GAP OF THE 1ST REC BEFORE THE EVTM COMBINE HRDW & SFTW ERRORS AN ERROR WAS FOUND; EXIT INDICATE WE KNOW THE REC NUMBER OF OUR CURRENT POSITION.

YES -HIT BET BEFORE DONE; FIND LAST RECORD BUT -LEAVE AN EVTLN FROM EOT JSM RET CPR JMP HOLE 1 D 8 EHOL GET BACK INTO VALID DATA.

HOLE HAD ERROR TPOS IN B; AT BOT? YES-LOG A BET ERROR & EXIT.

346 346 1,568,094 AT EOT; LEAVE BUFFER AREA 21104 002743 21105 043730 21106 002731 21107 043525 21110 042177 21111 170201 21112 21113 21114 21115 21116 21117 21120 21121 21122 21123 21124 21125 21126 21127 21130 LDA JSM LDA JSM JSM RET RHRDL OUTCM EVTLN WAIT IDR 6 GO HS,REV READY FOR GAP DETECTION.

GET EVT DIST FROM EOT FIND THE LAST GOOD RECORD IDR HAD TROUBLE-ERROR EXIT MAKE SURE NEW EXTRA REC IS AN EMPTY RE Cl 001701 MRK 8 072407 001676 020254 031725 042244 170201 066112 LDA SZA LDA ADA STA JSM RET JMP RTYPE MRKA CRECN ONE RECNO DFI 1 MRKB GET REC TYPE SKIP IF EMPTY REC IT'S NOT EMPTY; MUST HAVE BACKED UP TOO FAR FIND THE NEXT RECORD IN THE FWD DIRECTION FIND ROUTINE HAD AN ERROR CHECK THIS RECORD ____ REWRITE THIS REC HEAD AS THE EXTRA (NULL) REC.

THEN WRITE GAP UNTIL EOT THEN GET BACK TO THE EXTRA RECORD, READ ITS HEAD, BACKUP TO ITS GAP AND EXIT 001676 MRKA 031725 042452 170201 000073 031763 067705 LDA STA JSM RET LDA STA JMP CRECN RECNO ERSI 1 MKERR ERRWD STSAF MUST SET RECNO = NULL RECORD SO THAT AFTER ERASING THE REST OF THE TRK, WE GET BACK TO I Tl HAD ERROR LOG ERROR= MARK DIDN'T FIT COMBINE ERRORS AND EXI Tl Page 280 03070000 03071000 03072000 03073000 03074000 03075000 03076000 03077000 03078000 03079000 03080000 03081000 03082000 03083000 03084000 03085000 03086000 03087000 03088000 03089000 03090000 03091000 03092000 03093000 03094000 03095000 03096000 03097000 03098000 03099000 03100000 03101000 03102000 347 347 348 1,6804 4 Page 281 03104000 03105000 03106000 03107000 21131 043635 IDR 03108000 21132 170201 03109000 21133 001705 03110000 21134 010254 03111000 21135 170202 03112000 21136 010145 03113000 21137 066210 03114000 21140 010137 03115000 21141 066143 03116000 21142 066175 03117000 03118000 03119000 03120000 21143 000057 IDR 10 03121000 21144 043730 03122000 21145 002732 03123000 21146 043525 03124000 21147 000005 03125000 21150 170503 03126000 21151 073002 03127000 21152 066220 03128000 21153 006725 03129000 21154 072600 IDR 20 03130000 21155 000004 03131000 21156 076102 03132000 21157 066220 03133000 21160 000005 03134000 21161 170503 03135000 21162 073072 03136000 21163 003024 IDR 8 03137000 21164 031723 03138000 21165 043001 03139000 21166 170201 03140000 21167 043450 IDR 7 03141000 21170 043705 03142000 21171 170201 03143000 21172 000254 03144000 21173 031705 03145000 21174 170202 03146000 03147000 03148000 03149000 21175 002743 IDR 4 03150000 21176 043715 03151000 21177 043261 IDR 6 03152000 21200 043271 03153000 21201 000005 03153100 21202 073411 03153200 21203 043475 03154000 21204 043271 03155000 21205 000005 03156000 21206 073405 03157000 21207 066163 IDR IDR (DETERMINE PRESENT TAPE POSITION) JSM RET LDA CPA RET CPA JMP CPA JMP JMP STSBF 1 TPOS ONE 2 TWO ID Rl D 8 IDR 10 IDR 4 CHECK HRDW SOMETHING IS WRONG WAS PREVIOUS INSTRUCT A FIND? YES; ALL DONE THEN DO WE KNOW REC NO ? YES-GO FWD AND READ THE RHEAD.

AT REWIND? YES NO-I'M LOST AT REWIND, IS THE TRACK BLANK? LDA JSM LDA JSM LDA SAR SLA JMP LDB SFC LDA RIB JMP LDA SAR SLA LDA STA JSM RET JSM JSM RET LDA STA RET RLFDH OUTCM INDED WAIT R 5 4 + 2 IDR 5 M 12 I R 4 + 2 IDR 5 R 5 4 IDR 20 STINS INSTR RDHED 1 BCKUP STSAF 1 ONE TPOS TELL HRDW TO READ,LS,FWD,DATA, THOLD=HI; WAIT 2 5 " FROM LP TO GUARANTEE I REACH THE "DEADZONE" (IF PRESENT) GET STATUS GET IRG BIT INTO LSB HIT GAP-MUST BE VIRGIN TAPE 12 " IS ENUF TO HIT REC 01 CLRTAC LOOKED FAR ENOUGH? YES; NO GAP YET; BLANK TAPE NO; HAVE WE HIT GAP? GET IRG BIT INTO LSB NO GAP; KEEP GOING SET UP ENTRY SO THAT "RDHED" READS THE RHEAD AT LOW THRESHOLD TROUBLE READING THE REC HEAD GET BACK TO GAP OF REC IDR'D COMBINES HRDW & SFTW ERRORS AN ERROR OCCURRED-EXIT SET TAPE POSITION INDICATOR MEAN "WE KNOW ALL ABOUT THIS RECORD" EXIT LOST-TAPE POSITION UNKNOWN LDA JSM JSM JSM LDA RLA JSM JSM LDA RLA JMP RHRDL CMDW INDTA INGAP R 5 IDR 9 TURN INGAP R 5 IDR 9 IDR 8 GO HS,REV LOOKING FOR A REC; GUAR I HIT 221 PS.

ND A DATA REGION.

FIND GAP (RECORD) CHECK FOR HOLE BEFORE "JSM TURN" CHANGES TAPE DIR (HOLE =JMP IDR 9) MUST TURN TO BE ABLE TO READ HED GIVES TURN 1 REC UNCERTAINTY.

GET HRDW STATUS SKIP IF WE HIT A HOLE DIDN'T HIT BET: THUS WE HAVE 348 1,568,094 348 1,568,094 Page 282 03158000 03159000 03160000 03161000 03162000 21210 001676 03163000 21211 031725 03164000 21212 066244 03165000 03166000 03167000 03168000 21213 043545 03169000 21214 170201 03170000 21215 014137 03171000 21216 066143 03172000 21217 066175 03173000 03174000 03175000 03176000 21220 000236 03177000 21221 031763 03178000 21222 000127 03179000 21223 031705 03180000 03181000 21224 067705 FOUND A RECOR Dl TPOS= 2; GO HS FWD TO GET THE REC HEAD IDRI IDR 9 IDR 5 IDR 5 LDA STA JMP CRECN RECNO DFI SET THE TARGET REC = CURRENT REC (SPECIAL FOR TPOS= 2): FIND THE REC AND EXI Tl HIT A HOLE JSM RET CPB JMP JMP HOLE 1 D 8 IDRIO IDR 4 HOLE HAD ERROR TPOS IN B; AT BOT? YES AT EOT; STILL LOOK FOR A REC BLANK TRACK LDA STA LDA STA NRERR ERRWD D 16 TPOS JMP STSAF ERROR-NO RECORD FOUND LOG "BLANK TRACK" ERROR SET TAPE POSITION TO "LOST" STSAF WILL STOP THE TAPE COMBINE ERRORS AND EXIT 349 349 1,568,094 Page 283 03183000 03184000 03185000 03186000 03187000 03188000 03189000 03190000 03191000 03192000 03193000 03194000 03195000 03196000 03197000 03198000 03199000 03200000 03201000 03202000 03203000 03204000 03205000 03206000 03207000 03208000 21225 000254 03209000 21226 031731 03210000 21227 045702 03211000 21230 043275 03212000 03213000 21231 067705 VTR (WRITE A RECORD) HOW TO USE WTR JSM JSM JSM JMP CARTP CASER DFND CASER IS CART PROTECTED? YES-WRITING IS AN ERRO Rl FINDS THE RECORD STORED IN RECNO CASSETTE ERROR BLOCK OF SYSTEM CODE WHICH:

1CHECKS SIZE, TYPE AND REC "SECUREDNESS" 2 MODIFY REC HEAD (NEW CSIZE,TYPE,ETC) JSM WTR WRITES THE RECORD JMP CASER CASSETTE ERROR JMP NXTCM GET NEXT COMMAND IN DATA REGION BEFORE THIS RECORD OR IN ITS GAP ENTRY POINT "WTRC" IS FOR CLEARING A FILE.

IT ASSUMES RTYPE IS SET TO ZERO THEN IT WILL REWRITE THE REC HEAD AND ONLY 1 WORD OF JUNK BOD Yl WTRC LDA ONE MUST DEFINE WCTR=NO OF WORDS STA WCTR OF BODY IF RTYPE = 0.

WTR ISZ RRWNO INCREMENT THE RECORD RE-WRITE# JSM NCODE WRITE THE RECORD STSAF WILL STOP THE TAPE JMP STSAF COMBINE ERRORS & EXIT 350 350 Page 284 RDR 03215000 03216000 RDR (READ A RECORD) 03217000 03218000 03219000 HOW TO READ A RECORD 03220000 03221000 -PUT THE RECORD NO INTO "RECNO".

03222000 03223000 JSM DFND FINDS THE RECORD 03224000 JMP CASER CASSETTE ERRO Rl 03225000 03226000 -BLOCK OF SYSTEM CODE WHICH:

03227000 03228000 1 CHECKS RECORD'S SIZE (FIT INTO MEMORY?) 03229000 2 CHECKS RECORD'S TYPE 03230000 3 IS THIS RECORD SECURED 03231000 4 DOES MEMORY NEED TO BE MOVED 03232000 5 SET MBPTR TO LOC FOR IST WORD OF BODY 03233000 6 SET INSTR = "STINS" (STORE INTO MEMORY INSTRUCTION).

03234000 03235000 JSM RBODY READ THE REC BODY INTO MEMORY.

03236000 JMP CASER CASSETTE ERRO Rl 03237000 03238000 RECORD LOADE Dl 03239000 03241000 03242000 VFY (VERIFY A RECORD AGAINST MEMORY) 03243000 03244000 03245000 HOW TO VERIFY A RECORD 03246000 03247000 -THE CALLING SEQUENCE IS THE SAME AS FOR READING 03248000 A RECORD EXCEPT REPLACE 03249000 03250000 6 SET INSTR = "STINS" (STORE INTO MEMORY INSTRUCTION).

03251000 03252000 WITH 03253000 03254000 6 SET INSTR = "CPINS" (COMPARE MEMORY INSTRUCTION).

351 1,568,094 351 352 Page 285 03256000 03257000 03258000 03259000 03260000 03261000 03262000 03263000 03264000 03265000 03266000 21232 043635 03267000 21233 170201 03268000 21234 001705 03269000 21235 010145 03270000 21236 066244 03271000 21237 042131 03272000 21240 170201 03273000 21241 001676 03274000 21242 011725 03275000 21243 170202 03277000 21244 001343 03282000 21245 031724 03283000 03284000 21246 005676 03285000 21247 174040 03286000 21250 025725 03287000 03288000 21251 176407 03289000 21252 002745 03290000 21253 043715 03291000 21254 043271 03292000 21255 043261 03293000 21256 076006 03294000 03295000 03296000 21257 066327 03297000 03298000 03299000 21260 174040 03300000 21261 002744 03301000 21262 043715 03302000 21263 043261 03303000 03304000 03305000 03306000 21264 001764 03307000 21265 073023 03308000 03309000 03310000 03311000 21266 001514 03312000 21267 031345 03313000 21270 030013 03314000 21271 000247 03315000 03316000 21272 030014 1,568,094 352 SUBROUTINE DFND (DUAL FIND; BPC CONTROL OR HRDW) INPUTS: 1) RECNO: TARGET RECORD NUMBER 2) FLG 3: SET= HRDW FIND CLR= BPC FIND RETURN: RET 1 ERROR RET 2 NORMAL DFND DF 1 FND 6 DF 2 JSM RET LDA CPA JMP JSM RET LDA CPA RET LDA STA LDB TCB ADB SBM LDA JSM JSM JSM RZB JMP TCB LDA JSM JSM STSBF CHECK HARDWARE 1 ERROR TPOS CHECK PRESENT TWO TAPE POSITION DFI OK-KNOW WHERE WE ARE IDR FIND OUR PRESENT POSITION 1 ERROR CRECN GET CURRENT REC NO.

RECNO IS IT SAME AS TARGET? 2 YES-ALL DONE NOTRY FPASS ALLOW NOTRY CHANCES TO FIND REC COMPUTE DIST TO TARGET CRECN COMPUTE TARGET REC NO (RECNO)CURRENT REC NO (CRECN) IN B B RECNO HAS # GAPS TO TARGET (NOT COUNTING GAP OF CRECN) SCHR B NEGATIVE = SEARCH REVERSE RHFTL SRCH FWD AT CMDW START GOING; WAIT TIL UP TO SPEED INGAP MUST OVERCOME UNCERTAINTY IN INDTA POSITION DUE TO TPOS = 2.

DF 2 SKIP IF NOT AT TARGET DIST TO TARGET CAN BE 0 RECORDS IF TPOS = 2, YET NOT REALLY AT TARGE Tl DF 3 AT TARGET-FINISH OFF THE ACCESS THE JSM INDTA (LOC=-2) IS NEC TO FINISH OFF THIS ACCES Sl MAKE TARGET DIST POSITIVE RHRTL SEARCH REVERSE CMDW START GOING; WAIT TIL UP TO SPEED INDTA COULD WAKE UP IN IRG; NO COUNT IT IS FND BPC OR HRDW CONTROLLED? LDA FLG 2 SLA FND 9 DETERMINE WHO CONTROLS THE SRC Hl SKIP IF BPC CONTROLLED SEARCH PARALLEL SEARCH LDA CSELC GET CASSETTE SELECT CODE STA CSCF SAVE SC OF CASSETTE DOING A FIND STA DMAPA ALSO SET DMA PER ADDR.

LDA M 30 K MUST SET DMA MEMORY ADDR REG IFZ STA DMAMA TO "OUTPUT" VALUE.

1,568,094 Page 286 03317000 03318000 21273 024257 03319000 21274 034015 03320000 21275 070440 03321000 21276 001710 03322000 21277 050147 03323000 21300 043730 03324000 21301 000127 03325000 21302 031705 03326000 21303 001707 03327000 21304 170616 03328000 21305 061725 03329000 21306 031346 03330000 21307 170202 03331000 03332000 03333000 03334000 03335000 03336000 03337000 21310 002732 FND 9 03338000 21311 031731 03339000 21312 043271 03340000 21313 000005 FND 7 03341000 21314 170503 03342000 21315 073010 03343000 21316 072600 03344000 21317 030004 03345000 21320 045731 03346000 21321 066313 03347000 21322 000127 03348000 21323 031705 03349000 21324 066347 03350000 21325 054001 FND 8 03351000 21326 066310 03352000 03353000 03354000 GAP 03355000 03356000 21327 043475 DF 3 03357000 21330 043261 03358000 21331 001710 03359000 21332 170612 03360000 21333 172404 03361000 21334 043271 03362000 21335 043716 03363000 21336 043475 03364000 03365000 03366000 03367000 21337 042163 FND 5 03368000 21340 170201 03369000 21341 043456 FND 2 03370000 21342 001676 03371000 21343 011725 03372000 21344 170202 XIF ADB M 1 STB DMAC DMA LDA CUCMD AND M 3 JSM OUTCM LDA D 16 STA TPOS LDA FLG 1 I SAL 15 IOR RECNO STA FTRGT RET 2 DMA HRDW NEED DISTANCE TO TARGET REC-1; STORE THAT IN DMA CTR.

ENABLE DMA HRDW TO COUNT IRGS GET THE CURRENT HRDW CMD ENABLE SCH BIT GIVE HRDW PAR SEARCH CMD (FIND) SET TAPE POSITION TO LOS Tl GET CURRENT TRK SO WE CAN SAVE TRK AND TARGET REC NUMBER FOR THIS FIND.

BPC CONTROL (MUST BE PART OF RDR OR WTR) B REG IS NUMBER OF RECS TO TARGET LDA STA JSM LDA SAR SLA SFC STA ISZ JMP LDA STA JMP DSZ JMP EVTDT WCTR INGAP R 5 4 FND 8 R 4 WCTR FND 7 D 16 TPOS FND O B FND 9 INIT WCTR TO # OF TAC PULES IT TAKES TO RECOG AN EVT Ml FIND A REGION OF GAP GET HRDW STATUS MOVE IRG BIT INTO LSB SKIP IF INTO DATA WAIT FOR TAC (IN TAC BEC FND 4 + 1) CLR FLG HAVE WE DETECTED AN EVTM? NOT YET SET TAPE POSITION INDICATOR TO LOS Tl COUNT GAP; SKIP IF AT TARGET NOW GET READY FOR NEXT GAP.

-GOING HS & IN A DATA REGION IT IS BEFORE THE IF SEARCH DIR = REV; AFTER IF SEARCH DIR = FW Dl JSM JSM LDA SAL SAM JSM JSM JSM TURN INDTA CUCMD 11 FND 5 INGAP CMDWI TURN TURNAROUND & GO LS GIVES TURN A GAP + DATA UNCERT.

WANT TO DETERMINE CUR DIR DON'T TURN IF DIR = FW Dl GET INTO TARGET RECORD'S IRG.

GO INTO THE GAP ABOUT 22 ", THEN VERIFY ACCESS NO Wl JSM RET JSM LDA CPA RET IDR 8 I STPED CRECN RECNO NOW READ THE HEAD IDR HAD A PROBLEM GET CASSETTE TO A DEAD STOP YES; FIND RIGHT RECORD? FOUND RIGHT RECORD 353 353 " 1,568,094 Page 287 03373000 21345 055724 03374000 21346 066246 03375000 21347 000236 FND O 03376000 21350 031763 03377000 21351 067705 03378000 03380000 03381000 03382000 THE 03383000 WILI 03384000 SC A 03385000 03386000 21352 001514 CFD 03387000 21353 011345 03388000 21354 066356 03389000 21355 170202 03390000 21356 000005 03391000 21357 170504 03392000 21360 073476 03393000 21361 000177 03394000 21362 031345 03395000 21363 030013 03396000 21364 001346 03397000 21365 005707 03398000 21366 077403 03399000 21367 172003 03400000 21370 170202 03401000 21371 172277 CTKA 03402000 21372 031725 CFD 03403000 21373 000005 03404000 21374 170501 03405000 21375 073002 03406000 21376 067635 03407000 21377 043635 03408000 03409000 21400 170201 03410000 21401 000005 03411000 21402 170505 03412000 21403 073406 03413000 21404 000064 03414000 21405 043730 03415000 21406 002740 03416000 21407 043525 03417000 21410 043475 03418000 03419000 21411 042163 CFD 1 03420000 21412 066413 03421000 03422000 21413 066232 03423000 FIND DSZ FPASS JMP FND 6 LDA NRERR STA ERRWD JMP STSAF NO; ALL FIND PASSES DONE? NO; TRY AGAIN LOG ERROR = RECORD CAN'T BE FOUND COMBINE ERRORS AND EXIT STSAF WILL STOP THE TAPE -THIS ROUTINE COMPLETES A FIND COMMAND SINCE HRDW ONLY GETS YOU WITHIN 4 " THIS ROUTINE L ONLY COMPLETE A FIND IF THE CURRENT TRK AND RE THE SAME AS WHEN THE FIND WAS STARTED.

LDA CPA JMP RET LDA SAR RLA LDA STA STA LDA LDB RLB SAP RET SAP STA LDA SAR SLA JMP JSM RET LDA SAR RLA LDA JSM LDA JSM JSM JSM JMP JMP CSELC CSCF + 2 2 R 5 -2 ZERO CSCF DMAPA FTRGT FLG 1 CTKA CFD 2 -I,C RECNO R 5 2 + 2 STSBF STSBF 1 R 5 6 CFD 1 I RLRTH OUTCM CFDF WAIT TURN IDR 8 + 1 DFND GET CURRENT SC SAME AS FIND SC? YES NO-DONHT COMPLETE THE FIND.

WAIT FOR THE TAPE TO STOP MOVING BEFORE CLEARING DMAP Al SET CSCF TO ZERO MEANING THE FIND WILL BE COMPLETE Dl MAKE THE DMA HRDW AVAIL.

GET TARGET ADDR: TRK & REC NUM.

GET CURRENT TRK SKIP IF CURRENTLY ON TRK "A" CURRENT TRK = "B =; SKIP = FIND ON "B" FIND TRK # CURRENT TRK; EXIT CURRENT TRK = "A"; SKIP = FIND IS NOT SAVE TARGET REC #; MSB = 01 NOW CHECK TO SEE IF CART WAS PULLED OUT.

SKIP IF SAME CART IN MACHINE NEW CART-CHECK STATUS & EXIT CLR ERRWD; CHECK STATUS ALSO WAIT FOR HRDW TO STOP.

HRDW STATUS ERROR CHECK THE DIRECTION WE SEARCHED ON THE FIND SKIP IF SRCH'D REV FW Dl WE'RE ON WRONG SIDE OF REC TELL HRDW TO BACK UP CFDF NUMBER OF TAC PULSES THIS PUTS ME IN FRONT OF THE DESIRED REC NOW TURNAROUND REC WE MUST GO FWD TO READ HEAD GO READ THE RECORD HEAD ERROR-GIVE DFND A CHANCE CLEAR O IT CAN RECOVE-R FROM HOLE Sl THEN FINISH THE FIND AND EXI Tl 354 354 355 1,568,094 REWIND 03425000 03426000 03427000 03428000 03429000 B 03430000 03431000 21414 042701 REW 03432000 21415 043635 03433000 21416 170201 03434000 21417 002744 REWI 03435000 21420 043730 03436000 21421 006723 03437000 21422 043536 03438000 21423 066427 03439000 21424 000137 REW 2 03440000 21425 031705 03441000 03442000 21426 170202 03443000 21427 043545 REWI 03444000 21430 170201 03445000 21431 014137 03446000 21432 067705 03447000 21433 066417 03449000 03450000 03451000 03452000 03453000 TP 03454000 OL 03455000 03456000 03457000 03458000 03459000 03460000 03461000 03462000 03463000 21434 005707 TRK 03464000 21435 073003 03465000 21436 077211 TRK 1 03466000 21437 066441 03467000 03468000 21440 077707 TRK O 03469000 21441 035707 03470000 21442 001705 03471000 21443 010137 03472000 21444 066447 03473000 21445 000127 03474000 21446 031705 03475000 21447 170201 TRKE SUBROUTINE REW THIS ROUTINE WILL REWIND THE TAPE TO EG OF TAPE IT IS AN UNATTENDED REWIND.

JSM JSM RET LDA JSM LDB JSM JMP LDA STA RET JSM RET CPB JMP JMP STOPC STSBF 1 RHRTL OUTCM M 30 I MSBET REWI D 8 TPOS 2 HOLE 1 D 8 STSAF REWI STOP THE CASSETTE CHECK THE HRDW STATUS ERROR-BAD HRDW STATUS GO HS, REV TO REACH BEG OF TAPE WAIT 30 IN (> MAX DIST BETW HOLES) OR WAIT FOR A HOLE HIT A HOLE-ANALYZE IT THIS VALUE OF TPOS ALLOWS IDF (KPF CMD) TO BE EXECUTED NEX Tl ALSO IMPT FOR TRK CM Dl REWIND HAS BEEN DONE FIND OUR POSITION HOLE FOUND TROUBLE TPOS IN B; AT BOT? YES-EXIT AT EOT GO HS, REV TO BOT.

SUBROUTINE TRK THIS ROUTINE WILL SWITCH TRACKS IT WILL SET OS TO LOST IF NEW TRK IS DIFFERENT FROM THE D TRACK IT ASSUMES THAT THE A REGISTER HAS:

0 FOR TRACK 0 = TRACK A (CMD BIT TRB = 1) 1 FOR TRACK 1 = TRACK B (CMB BIT TRB = 0) NOTE:

TRK DOES NOT CLEAR ERRWD SINCE NO ERRORS ARE POSSIBLE WHEN SWITCHING TRACKS THUS ERRWD IS NOT VALID.

LDB SLA SLB JMP RLB STB LDA CPA JMP LDA STA RET FLG 1 TRK O TRKE,C + 2 TRKE,S FLGI TPOS DB TRKE D 16 TPOS GET CURRENT TRACK.

SKIP IF NEWTRK= A NEW TRK = B; SKIP IF PRESENT TRK = B PRESENT TRK = A; LSB OF B WAS CLR'ED SO IT IS SET FOR TRK B NEW TRK = A; SKIP IF PRESENT TRK = A PRESENT TRK = B: LSB OF B IS SET GET CURRENT TAPE POSITION ARE WE AT REWIND? YE Sl DON'T CHANGE TPOS SET TAPE POSITION INDICATOR TO LOST SINCE WE SWITCHED TRACK Sl TRACK SWITCH COMPLETED.

Page 288 355 1,568,094 355 356 Page 289 03477000 03478000 03479000 03480000 03481000 03482000 03483000 03484000 03485000 03486000 03487000 03488000 21450 043465 03489000 21451 170201 03490000 21452 000177 03491000 21453 031700 03492000 21454 031701 03493000 21455 031677 03494000 21456 042225 03495000 21457 170201 03496000 21460 043440 03497000 21461 170201 03498000 21462 066232 03499000 1,568,094 ERASE 356 ______ SUB ROUTINE ERS (TOS POSITIONS THE TAPE) THIS ROUTINE WILL ERASE AN ENTIRE TRACK OF THE TAPE IT ASSUMES THE TOS HAS POSITIONED THE TAPE IN THE IRG OF THE STARTING RECORD THAT RECORD HEAD WILL BE REWRITTEN TURNING IT INTO THE "NULL" RECORD AND ALL HIGHER RECORD NUMBERS ON THAT TRACK WILL BE ERASED.

ERS ER 51 JSM RET LDA STA STA STA JSM RET JSM RET JMP CARTP I ZERO CSIZE RTYPE ASIZE WTRC I WGAPH N DFND IS THIS CARTRIDGE PROTECTED? YES-CAN'T ERASE THEN-ERROR SET THESE ITEMS TO ZER Ol CURRENT SIZE RECORD TYPE ABSOLUTE SIZE RE-WRITE THE RECORD HEAD ERROR WRITE GAP UNTIL EOT ERROR THIS GUAR THAT WE GET BACK TO THE NEWLY CREATED NULL FIL El 1,568,094 ERLN 000044 ERLN 031763 001701 010141 066477 010145 066473 170201 005734 002773 071403 170201 ERL-N 2 0017270044 ERLN 073776 03172763 00170141 010141 066477 010145734 066473 170201 005734 00251773 071403 170201 ERLN 242 001727 ERLN 35 073776 031727 13000141 131734 045734 17005734201 002515 071404 024142 000235 130001 035734 170201 021516 021007 025052 025052 025052 025177 QUSTA QUST STSTI STST 2 STST 3 STEOL 357 ERLN IS THE ROUTINE THAT PLACES A DUMMY LINE IN THE USER'S PROGRAM WHEN A PARTITION HAS BEEN DELETED BECAUSE OF ERROR ON ENTRY: BDPTR POINTS AT THE FIRST LINE BRIDGE OF THE BAD PARTITION TEMPORARIES USED: ERRWD, RTYPE, BDPTR, DLFLG ROUTINES CALLED: NONE LDA STA LDA CPA JMP CPA JMP RET LDB LDA XFR RET LDA RLA STA LDA STA ISZ LDB LDA XFR ADB LDA STA STB RET RBERR ERRWD RTYPE P 6 ERLN 1 P 2 + 2 1 BDPTR QMRKS 4 1 DLFLG ERLN 2,S DLFLG P 6 BDPTR,I B DPTR B DPTR QUSTA P 5 B 3377 B,I BDPTR READ BODY ERROR SEE IF USER'S PROGRAM ONLY CONCERNED WITH IT SEE IF IT IS A DATA (NUMERIC) FILE YES, NUMERIC DATA SO INSERT ??????? GET THE POINT TO INSERT THE QUESTION MARK GET ADDRESS OF THE QUESTION MARKS TRANSFER THEM TO THE DATEM MUST CHECK TO SEE IF THIS PARTITION HAS EVEN HAD STARS NO IT HASN'T SO PUT IN DUMMY LINE SET THE LOWER LINE BRIDGE OF THE DUMMY LINE SET THIS POINTER TO THE DUMMY LINE'S LOCATION GET ADDRESS OF THE DUMMY LINE TRANSFERTHE DUMMY LINE SET UP THE UPPER DUMMY LINE'S BRIDG RESET BDPTR THIS WILL BE THE LOCATION OF THE DUMMY LINE TEMPLATE DEF OCT OCT OCT OCT OCT QUST 21007 25052 25052 25052 25177 ADDRESS OF THE DUMMY LINE QUOTE -'COUNT' STAR -STAR STAR-STAR STAR -STAR STAR-EOL 357 Page 290 03501000 03502000 03503000 03504000 03505000 03506000 03507000 03508000 03509000 03510000 03511000 03512000 03513000 03514000 03515000 03516000 03517000 03518000 03519000 03520000 03521000 03522000 03523000 03524000 03525000 03526000 03527000 03528000 03529000 03530000 03531000 03532000 03533000 03534000 03535000 03536000 03537000 03538000 03539000 03540000 03541000 03542000 03543000 03544000 03545000 03546000 03547000 03548000 03549000 03550000 03551000 03552000 03553000 03554000 21463 21464 21465 21466 21467 21470 21471 21472 21473 21474 21475 21476 21477 21500 21501 21502 21503 21504 21505 21506 21507 21510 21511 21512 21513 21514 21515 21516 21517 21520 21521 21522 1,568,094 358 Page 291 03556000 03557000 03558000 03559000 03560000 03561000 03562000 03563000 03564000 03565000 03566000 03567000 03568000 03569000 03570000 03571000 03572000 03573000 03574000 03575000 03576000 03577000 03578000 03579000 03580000 03581000 21523 001743 PTCLC 03582000 21524 005734 03583000 21525 174040 03584000 21526 020001 03585000 21527 031712 03586000 21530 004052 03587000 21531 174040 03588000 21532 020001 03589000 21533 172402 03590000 21534 066542 03591000 21535 045712 03592000 21536 000257 03593000 21537 031717 03594000 21540 001712 03595000 21541 066571 03596000 21542 001701 PTCL 2 03597000 21543 010141 03598000 21544 066547 03599000 03600000 21545 000052 03601000 21546 066571 03602000 21547 000177 PTCL 3 03603000 21550 030016 03604000 21551 000157 03605000 358 PTCLC IS THE ROUTINE THAT CALCULATES THE PARTITIONS LENGTHS IF THE FILE BEING RECORDED IS ANYTHING OTHERTHAN A USER'S PROGRAM FILE THE PARTITIONS ARE ALWAYS 128 WORDS LONG IF THE FILE BEING RECORDED IS A USER'S PROGRAM FILE THE PARTITION IS AS CLOSE TO 128 WORDS IN LENGTH AS POSSIBLE WITH A WHOLE NUMBER OF LINES BEING INCLUDEL ON ENTRY: LWMD CONTAINS THE LAST ADDRESS TO BERECORDED OF THIS FILL BDPTR POINTS AT THE LOCATION IN MEMORY WHERE THE NEXT PARTITION WILL START RECORDING ON EXIT: PARLN IS SET WITH THE LENGTH OF THE NEXT PARTITION WCTR IS SET WITH THE LENGTH OF THE NEXT PARTITION TEM Pl IS SET TO-I IF THIS NEXT PARTITION IS THE LAST PARTITION IN THE CURRENT FILE TEMPORARIES USED BY THIS ROUTINE: TI, T 2, A, B, C, D, ROUTINES CALLED BY THIS ROUTINE: NONE LDA LWMD LDB BDPTR TCB ADA B STA T 2 LDB P 128 TCB ADA B SAM + 2 JMP PTCL 2 ISZ T 2 LDA Ml STA TEM Pl LDA T 2 JMP PTCL 9 LDA RTYPE CPA P 6 JMP PTCL 3 LDA P 128 JMP LDA STA LDA PTCL 9 PO C M15 GET THE ENDING ADDRESS GET THE CURRENT RECORDING POSITION THIS IS THE LENGTH OF THE NEXT PARTITION IF IT IS THE LAST SO SAVE IT SEE IF TI IS THE LAST PARTITION IF THE RESULT IS MINUS THIS IS THE LAST PARTITION NOTH THE LAST PARTITION SO CHECK FILE TYPE YES TH LAST PARTITION SO CORRECT THE LENGTH SET TH 'LAST' FLAG THIS IS THE LENGTH OF THE LAST PARTITION SEE IF IT ISA USER'S PROGRAM YES A USER'S TYPE PROGRAM SO DO LONG PARTITION LENGTH CALCULATION NOT USER'S TYPE PROGRAM SO PARTITION LENGTH IS 128 THIS IS THE NEXT PARTITIONS LENGTH AT 20 US PER LINE IT WILL TAKE ABOUT LINES TO ACCUMULATE 300 US FOR THE IPG LENGTH 359 1,568,094 Page 291 Continued PTCLC 21552 030017 21553 001734 21554 004000 21555 100000 PTCL 6 21556 050053 21557 020016 STA D LDA BDPTR LDB A LDA A,J AND B 177 ADAC THIS IS THE LINE COUNTER GET THE CURRENT RECORD POSITIN GET THAT LINE B RIDGE CLEAR HIGH ORDER BITS ADD THE RIGHT HALF OF THE LINE BRIDGE IN TO GET TO 03606000 03607000 03608000 03609000 03610000 03611000 359 1,568,094 Page 292 03612000 03613000 21560 030016 03614000 21561 020167 03615000 21562 172402 03616000 21563 066574 03617000 21564 000016 03618000 21565 020001 03619000 21566 044017 03620000 STA ADA SAM C M 128 + 2 JMP PTCL 7 LDA C ADA B ISZ D 03621000 21567 066555 03622000 21570 066555 03623000 21571 004257 PTCL 9 03624000 21572 034017 03625000 21573 066575 03626000 21574 000016 PTCL 7 03627000 21575 031731 PTCL 8 03628000 21576 031715 03629000 21577 000017 03630000 21600 172006 03631000 21601 000146 03632000 21602 004004 03633000 21603 072600 03634000 21604 072176 03635000 21605 000004 03636000 21606 170201 PTC 10 03637000 JMP JMP LDB STB JMP LDA STA STA LDA SAP LDA LDB SFC RIA LDA RFT PTCL 6 PTCL 6 Ml D PTCLB C WCTR PARLN D PTC 10 M 2 R 4 -2 R 4 NEXT LINE BRIDGE SEE IF DONE WITH THIS PARTITION IF MINUS THEN THE PARTITION IS NOT LONG ENOUGH YET DONE WITH PARTITION LENGTH CALCULATION GET THE PARTITION LENGTH ADD IT THO THE BDPTR COUNT THIS LINE IF IT GOES POSITIVE WE DON'T HAVE TO WAIT FOR ANY TAC PULSES AFTER THE CALCUL ALLOW FOR SKIP WE MUST WAIT FOR 300 US BEFORE EXITING SO SET THE ILNE COUNTER NEGATINE GET THE PARTITION LENGTH THE NEXT PARTITION'S LENGTH IS IN A GET THE LINE COUNT IF LINE COUNT OS POSITIVE WE NEED COUNT NO TAC PULSE MUST WAIT 300 US BETWEEN PARTITIONS CLEAR TAC LINE CLEAR TAC LINE 360 360 1,568,094 BRIDGE PATCH 21607 005307 PTBRG 21610 015734 PTBR 2 21611 066624 21612 024254 21613 015734 21614 066622 21615 024257 21616 100001 21617 050053 21620 024000 21621 066610 21622 024257 PTBR 5 21623 066627 21624 100001 PTBR 3 21625 072102 21626 042463 21627 001277 PTBR 4 21630 020254 21631 030016 21632 024254 21633 034017 21634 140466 21635 045744 21636 005307 21637 100001 21640 050053 PTBRI 21641 024000 21642 170607 21643 031756 21644 100001 21645 050053 21646 061756 21647 13000 i 21650 015277 THIS CODE IS EXECUTED AFTER LOADING A USER'S PROGRAM TO PATCH UP DANGLING LINE BRIDGES IN CASE OF AN ERROR THIS ROUTINE IS INVOKED AFTER A RECOVERY CYCLE IS COMPLETED FOR A USER'S PROGRAM THIS CALL ONLY OCCURES IF ERLN HAS BEEN EXECUTED BY THE DRIVERS AND AT LEAST ONE DUMMY LINE HAS BEEN INSERTED INTO THE USER'S PROGRAM (BECAUSE A PARTITION IS DELE THE SEARCH BEGINS AT FWUP AND PATCHES ALL BRIDGES IN THE PROGRAM FROM FWUP TO ENDS NOTE: THE FIRST WORD TO BE RECORDED ON A PARTITION IS THE LINE BRIDGE OF THE FOLLOWING LINE, IE THE LAST WORD OF A PARTITION IS NOT A LINE BRIDGE EXCEPT IN THE CASE OF THE LAST PARTITION IN THE PROGRAM LDB F' CPB B' JMP pl ADB Pl CPB B' JMP Pl ADB M LDA B. AND B ADB A JMP P' ADB M JMP P' LDA B RIA, JSM E' LDA El ADA P STA C ADB P STB D JSM A WUP DPTR FB R 3 DPTR B R 5 1 I 177 B R 2 1 IB R 4 ±2 RLN NDS GET THE START OF THE PROGRAM SEE IF THIS IS WHERE BDPTR POINTS YES IT POINTS HERE NOT HERE SO ADJUST GUESS DOES IT POINT HERE? YES IT POINTS HERE RESET 'GUESS' GET LINE BRIDGE CLEAR HIGH ORDER BITS RESET FOR ENDS IF ZERO DO NOT SKIP PUT IN ERROR LINE OF STARS MOVE THE R-REGISTERS LOWER MPML,I MOVE R-REGISTERS LOWER, RESET ENDS, RMAX ISZ TVAR 1 LDB FWUP LDA AND ADB SAL STA LDA AND IOR STA CPB Bl B 177 A 8 FLAGA B,I B 177 FLAGA Bl ENDS SET FLAG FOR ERROR 46 START AT THE TOP OF THE PROGRAM SINCE THE B RIDGES LINKING UP ARE NOT OUT OF ORDER GET THIS FIRST LINE BRIDGE GET ITS LINK DOWN CALCULATE THE NEXT BRIDGES ADDRESS MOVE TO LEFT HALF OF BRIDGE SAVE THIS BRIDGE LINK GET THE NEXT INE BRIDGE CLEAR THE HIGH ORDER BITS INCLUDE THE SAVED BRIDGE HALF RESTORE THIS LINE'S BRIDGE ARE WE DONE YET? Page 293 03639000 03640000 03641000 03642000 03643000 03644000 03645000 03646000 03647000 03648000 03649000 03650000 03651000 03652000 03653000 03654000 03655000 03656000 03657000 03658000 03659000 03660000 03661000 03662000 03663000 03664000 03665000 03666000 03667000 03668000 03669000 03670000 03671000 03672000 03673000 03674000 03675000 03676000 03677000 03678000 03678100 03678200 03678300 03678400 03679000 03680000 03681000 03682000 03683000 03684000 03685000 03686000 03687000 03688000 03689000 03690000 361 361 1,568,094 BRIDGE PATCH 21651 170201 21652 066640 077756 077744 21653 21654 21655 21656 21657 21660 21661 21662 21663 21664 21665 FLAGA TVAR 1 142771 SSC 000001 020257 172415 020157 172013 015514 066677 000127 031705 035514 RET 1 JMP PTBR 1 YES DONE NOT DONE CONTINUE EQU MRW 1 EQU O Pl+ 2 END OF BRIDGE PATCH ROUTINE SSC IS THE CASSETTE SET SELECT CODE COMMAND TEMPORARIES USED: TI (NTRK) ROUTINES CALLED: GTPAR, TRKA, ERDSO JSM LDA ADA SAM ADA SAP CPB JMP LDA STA STB 03721000 21666 066677 03725000 03726000 03727000 03728000 03729000 03730000 03731000 03732000 03733000 03734000 03735000 03736000 03737000 03738000 03739000 21667 142771 TRKCH 03740000 21670 076405 03741000 21671 014254 03742000 21672 066675 03743000 21673 140404 ERRI 7 03744000 21674 030467 03745000 21675 000001 TRCKI 03746000 21676 042434 03746100 21677 070420 SSC 3 03746200 21700 164365 GTPR 2,I B Ml ERR 17 MI 5 ERR 17 CSELC SSC 3 P 16 TPOS CSELC JMP SSC 3 GET THE DESIRED SELECT CODE IF X IS LESS THAN ONE ERROR SUBTRACT 16 FROM A IF THE RESULT IS ZERO OR POSITIVE ERROR SELECT CODE CHANGE SO SET 'LOST' CONDITION IF X WITHIN RANGE ALTER SELECT CODE TRKI IS THE CASSETTE TRACK CHANGE COMMAND TEMPORARIES USED: TI (NTRK) ROUTINES CALLED: GTPAR, ERRI, TRKA, ERDSO JSM GTPR 2,I SZB TRCK 1 CPB Pl JMP TRCKI JSM AERRI,I ASC 1,17 LDAB JSM TRK EIR JMP AINTX,I GET THE DESIRED TRACK IF THE TRACK IS ZERO CHANGE IS IT TAACK ONE? YES CHANGE BOUNDRY ERROR CHANGE THE TRACKS ENABLE THE INTERRUPT AND EXIT 362 Page 294 362 03691000 03692000 03693000 03694000 03695000 03696000 03697000 03698000 03700000 03701000 03702000 03703000 03704000 03705000 03706000 03707000 03708000 03709000 03710000 03711000 03712000 03713000 03714000 03715000 03716000 03717000 03718000 03719000 03720000 1,568,094 STOPC AND CHST 21701 001514 STOPC 21702 011345 21703 066705 21704 170201 21705 043726 21701 001514 STOPC 21702 011345 21703 066705 21704 170201 21705 043726 21706 000177 21707 030013 21710 031345 21711 170201 21712 042232 21713 142770 21714 170201 s :

CHST 363, THIS ROUTINE WILL STOP THE CASSETTE ON THE CURRENT SELECT CODE IT THEN CLEARS DMAPA AND CSCF SO THE FIND IS FORGOTTEN, IT THEN FALLS THROUGH TO SET THE PA LDA CPA JMP RET JSM LDA STA STA RET CSELC CSCF + 2 1 STPCA PO DMAPA CSCF SEE IF THE FIND IS ON THIS SC YES A FIND HERE SO STOP IT NO FIND ON THIS SC STOP THE CASSETTE AND REMOVE FROM SEARCH MODE THEN FORGET THE FIND CHST EXECUTES A BPC FIND OR INITIATES A HARDWARE FIND OPERATION ON ENTRY: ENTRY AT CHST: RECNO CONTAINS THE TARGET RECORD NUMBER A BPC FIND IS ECECUTED ENTRY AT CHST 1: RECNO CONTAINS THE TARGET RECORD NUMBER IF FLG 2 = 1, A HARDWARE FIND IS INITIA IF NO ERRORS OCCURED ON EXIT: IF A BPC FIND WAS INITIATED, THE TAPE IS POSITIONED IN THE RECORD GAP PRECEEDING THE HEAD OF THE FILE NUMBER IN RECNO, TPOS = 1 IF A HARDWARE FIND WAS INITIATED, THE TAPE IS MOVING IN THE PROPER DIRECTION AT HIGH SPEED UNDER DMA PULSE COUNT CONTROL, TPOS = 2 TEMPORARIES USED: FLG 2 (MRWI + 6) ROUTINES CALLED: STPRA, DUFND, ERD 50 JSM DFND DO THE FIND JSM ERD 50,I CHECK FOR ERRORS RET I 363 Page 295 03748000 03749000 03750000 03751000 03752000 03753000 03754000 03755000 03756000 03757000 03758000 03759000 03760000 03761000 03762000 03763000 03764000 03765000 03796000 03797000 03798000 03799000 03800000 03801000 03802000 03803000 03804000 03805000 03806000 03807000 03808000 03809000 03810000 03811000 03812000 03813000 03814000 03815000 03816000 03817000 03818000 03819000 03820000 03821000 03822000 03823000 03824000 03825000 03826000 364 1,568,094 364 AVE AND AVD 2171700027 A 2172 03344 AV 21721 16436 AVE IS THE CASSETTE AUTOVERIFY ENABLE COMMAND TEMPORARIES USED: NONE ROUTINES CALLED: NONE LDA PO JMP AVD 1 AVD IS THE CASSETTE AUTOVERIFY DISABLE COMMAND TEMPORARIES USED: NONE ROUTINES CALLED: NONE LDA STA JMP Ml AVFLG AINTX,I Page 296 03826110 03826120 03826130 03826140 03826150 03826160 03826170 03826180 03826190 03826200 03826210 03826220 03826230 02826240 03826250 03826260 03826270 03826280 03826290 03826300 03826310 03826320 03826330 03826340 03826350 03826360 03826370 03826380 03826390 03826400 03826410 364 1,568,094 364 365 1,568,094 ROM CON 1 ROM CONSTANTS 21722 21723 21724 21725 21726 21727 21730 21731 21732 21733 21734 21735 000177 000254 000144 000143 000137 000133 000127 000117 000052 000247 034232 143546 152152 161663 177416 176422 177626 171611 175507 177035 177620 000325 000141 021732 21736 077676 21737 077714 21740 174373 ZERO ONE TWO THREE D 4 D 8 D 12 D 16 D 32 D 128 M 30 K P 301 M 301 M 241 M 12 I MQTI COAST TACLS EVTLN EVTDT IRGLN SETLN DEADZ ERMSK PRGM INDED RHPTR PHPTR CFUF 21741 175412 CFDR 000053 RLFDL 000137 HDLN 021733 000053 21742 000167 021742 21743 000117 21744 000107 21745 000127 000074 000101 000124 000057 000057 000062 000064 21746 000303 DLYA SLKRH MSKL 7 KPMSK RLFTL TACMD RHRDL RHRTL RHFTL WLFDD WLFTG WHFTG RLFDH RLFTH RLRDH RLRTH STOP EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC EQU EQU EQU DEF DEF DEC PO Pl P 2 P 3 P 4 P 8 P 12 P 16 P 32 P 128 ZK 1 14490 -14490 -11158 -7245 -242 -750 -106 -3191 -1209 -483 -112 213 P 15 P 6 EVTDT CRECN PARNO -1797 DEC -1270 EQU EQU EQU EQU EQU EQU OCT EQU OCT OCT OCT EQU EQU EQU EQU EQU EQU EQU OCT B 177 P 8 IRGLN P 7 RLFDL B 377 167 RLFTL 117 107 127 B 77 B 63 P 19 B 173 RLFDH B 153 P 99 303 000117 MPERR EQU P 32 USED IN FIND; GIVES BUFFER DMAMA USED IN HOLE TO CALC DIST TRVLED " OF TAPE USED TO GET BACK TO LP & EW DIST THOLD IN HOLE DIST THOLD IN HOLE REACH 22 IPS WRITE AN EVTM DETECT AN EVTM WRITE IRG MSEC OF SETTLING 6 " BUFFER BETW LP & IRG 0 (WRDS) ERROR MASK TO DISTUISH DATA FROM PROGRAMS POINTS TO RECORD HEAD POINTS TO PARTITION HEAD RECOVERY DISTANCE FOR FIND IF SEARCH IN FWD RECOVERY DISTANCE IF FIND SEARCHES IN REVERSE READ,LS,FWD,DATA,TLO DEFINE HEAD LENGTH TO BE SEVEN USED IN HOLE TO GET VALID PE MRK SLACK FOR REC HEAD ALLOWS ME TO LOOK AT LOW 7 BITS GUAR B 8 OF HARDWARE COMMANDS IS ZERP READ,LS,FWD,TAC,TLO READ,HS,REV,DATA,TLO READ,HS,REV,TAC,TLO READ,HS,FORWARD,TAC,TLO WRT,LS,FWD,DATA,DATA WRT,LS,FND,TAC,GAP WRT,HS,FWD,TAC,GAP READ,LS,FWD,DATA,THI READ,LS,FWD,TAC,THI READ,LS,REV,DATA,THI READ,LS,REV,TAC,THI STOP, READ, FST, REV,TAC,NOT,,WRONGTLO,TRB TLO,TRB ERROR-MRK POSITION UNKNOWN 365 Page 297 03828000 03829000 03830000 03831000 03832000 03833000 03834000 03835000 03836000 03837000 03838000 03839000 03840000 03841000 03842000 03843000 03844000 03845000 03846000 03847000 03848000 03849000 03850000 03851000 03852000 03853000 03854000 03855000 03856000 03857000 03858000 03859000 03860000 03861000 03862000 03863000 03864000 03865000 03866000 03867000 03868000 03869000 03870000 03871000 03872000 03873000 03874000 03875000 03876000 03877000 03878000 03879000 03880000 03881000 03882000 03883000 Page 298 ROM CON 03884000 000073 MKERR EQU P 64 ERROR-MARK DOES NOT FIT 03885000 000052 RHERR EQU P 128 ERROR-RECORDING HEAD 03886000 000044 RBERR EQU B 400 ERROR-READING BODY 03887000 000236 NRERR EQU B 2 K ERROR-RECORD NOT FOUND OR NO RECORD 03888000 000234 WPERR EQU B 4 K ERROR-ILLEGAL WRT; CART PROT'D 03889000 000237 VYERR EQU Bl K ERROR-VERIFY FAILED 03890000 000175 HOERR EQU B 10 K ERROR-HOLE PATTERN UNKNOWN 03891000 21770 ORG 21770 B 03892000 21770 ERD 50 BSS 1 03892100 21771 GTPR 2 BSS I 03893000 21772 STPRA BSS 1 Page 299 QUESTION MARK Sll 03895000 03896000 03897000 THESE CONSTANTS REPRESENT A FLOATING POINT QUESTION MARK 03898000 03899000 03900000 21773 ORG 21773 B 03901000 21773 021774 QMRKS DEF + 1 03902000 21774 000000 DEC 0 03903000 21775 177777 DEC -1 03904000 21776 177777 DEC -1 03905000 21777 177777 DEC -1 366 1,568,094 366 367 1,568,094 367 Page 300 DMALO 03940000 03941000 03942000 ALL DEVICES USING DMA MUST CALL THIS ROUTINE.

UPON RELEASE OF 03943000 DMA, THE CALLING DEVICE MUST CLEAR (SET TO ZERO) THE DMA 03944000 LOCKOUT FLAG, (DMA LOCKOUT FLAG=DMAPA) 03945000 03946000 03947000 TYPICAL CODE SEQUENCE FOR THE INTERRUPT ROUTINE OF THE DEVICE 03948000 DESIRING DMA:

03949000 03950000 03951000 SERVICE ROUTINE 03952000 03953000 (SAVE REGISTERS, ETC) 03954000 LDB P 7 PERIPHERAL ADDRESS OF DEVICE= 7 03955000 JSM DMALO REQUEST DMA HARDWARE 03956000 JMP -2 REQUEST REFUSED-TRY AGAIN 03957000 (SET DMAMA) SET THE DMA REGISTERS 03958000 (SET DMAC) 03959000 DMA ENABLE DMA (OR PCM) 03960000 (RESTORE REGISTERS, ETC) 03961000 RET 0,P DONE 039620 W 00 03963000 03964000 A PART OF THIS ROUTINE MUST ALSO BE EXECUTED TO RELEASE THE 03965000 DMA HARDWARE WHEN THE DMA OPERATION IS FINISHED BY THE DEVICE 03966000 03967000 03968000 EXAMPLE:

03969000 03970000 (PRELIMINARY CODE) 03971000 LDA PO CLEAR DMA LOCKOUT FLAG 03972000 STA DMAPA 03974000 RET 0,P 03975000 03976000 03977000 ON ENTRY: REGISTER B CONTAINS THE PERIPHERAL ADDRESS OF THE 03978000 DEVICE REQUESTING DMA 03979000 03980000 03981000 ON EXIT: 1)RET 1 =DMA BUSY MUST WAIT 03982000 2)RET 2 =DMA GRANTED AND DMAPA= 03983000 CONTENTS OF REGISTER 03983000 03984000 03985000 TEMPORARIES USED: NONE 03986000 03987000 ROUTINES CALLED: NONE 03988000 03989000 03990000 03991000 23724 ORG 23724 B 03991100 23724 070430 DMAL, DIR 03992000 23725 000013 LDA DMAPA SEE IFTHE DMA IS FREE 03993000 23726 072416 SZA DMAL 2 SKIP IF DMA IS FREE 03994000 23727 011345 CPA CSCF IF DMA NOT=ZERO IS A CASSETTE DOING A FIND? 03995000 23730 066733 JMP + 3 YES A CASSETTE IS DOING A FIND 368 Page 301 03996000 23731 03997000 23732 03998000 23733 03999000 23734 04000000 23735 04001000 23736 04002000 23737 04003000 23740 04004000 23741 04005000 23742 04006000 23743 04007000 23744 04008000 23745 04009000 23746 04010000 23747 04011000 04012000 04013000 04014000 04015000 1,568,094 DMALO 070420 DMALI 170201 001345 030011 170504 073472 170602 170140 062747 030005 034013 DMAL 2 070420 170202 000357 STOP I EIR RET 1 LDA CSCF STA PA LDA R 5 SAR 5 RLA DMALI SAL 3 CMA IOR STOPI 1 STA R 5 STB DMAPA EIR RET 2 OCT 357 368 SEE IF THE CASSETTE IS DONE DO THIS BY CHECKING THE 'MOVING' BIT SKIP IF BUSY MUST CLEAR "SEARCH" BIT IN CASSETTE TO PREVENT ANY FURTHER DMA REQUESTS DMA IS FREE SO SET UP THE DMAPA STOP CASSETTE AND CLEAR SEARCH BIT 1,568,094 RAM WORDS 369 ' CASSETTE DEDICATED RAM ___ CASSETTE DEDICATED RAM 077676 077677 077700 077701 077702 077703 CRECN ASIZE CSIZE RTYPE RRWNO EXISF 077704 EX 2 077705 TPOS as as 077706 077710 077763 077764 MBPTR CUCMD ERRWD FLG 2 s as 077743 LWMD 077735 SVC EQU CATMP RECORD NUMBER (PART OF HEAD) EQU CATMP+I ABSOLUTE SIZE EQU CATMP+ 2 CURRENT SIZE EQU CATMP+ 3 RECORD TYPE EQU CATMP+ 4 RECORD REWRITE NUMBER EQU CATMP+ 5 SECURITY FLAG #0 =SECURE 0 =UNSECURE EQU CATMP+ 6 USED FOR FWUP IN RKM EQU CATMP+ 7 TAPE POSITION INDICATOR TPOS TAKES ON THE FOLLOWING VALUES:

TPOS=I -> IN GAP PROCEEDING RECORD CRECN TPOS= 2 -> IN RECORD BODY OF CRECN-1 TPOS= 8 -> AT REWIND TPOS= 16 -> LOST, HEAD INFO INVALID EQU CATMP+ 8 EQU CATMP+ 10 EQU MRWI+ 5 EQU MRWI+ 6 POINTS TO BODY SECTION CURRENT HARDWARE COMMAND LOGS ERRORS BITS I-15 ARE ALWAYS ZERO BIT ZERO SET=HARDWARE FIND BIT ZERO CLR=BPC FIND SHARED TEMPORARIES EQU OPI+I EQU T 21 ____ PARTITION HEAL 077767 077727 077714 077715 077716 077717 077720 PRCTR DLFLG PARNO PARLN PRWNO TEM Pl MSIZE EQU EQU EQU EQU EQU EQU EQU MRW 1 + 9 T 15 T 4 T 5 T 6 T 7 T 8 077721 CHSUM EQU T 9 077721 077722 077723 077724 TDIST NOREC INSTR FPASS EQU EQU EQU EQU CHSUM T 10 Tl I T 12 077725 RECNO EQU T 13 077726 MRKSZ EQU T 14 as as DEDECATED TO SAVING THE C REGISTER PARTITION NUMBER PARTITION LENGTH PARTITION REWRITE NUMBER USED IN WAIT AND NCODE HOLDS ABSOLUTE SIZE OF RECORDS TO MARK USED FOR ALL CHECKSUM CALCULATIONS TARGET-STARTING RECORD NUMBER NUMBER OF RECORDS TO MARK HOLDS AN INSTRUCTION (STR,COMPR) COUNTS NUMBER OF ATTEMPTS TO FIND TARGET RECORD NUMBER NUMBER OF WORDS NCODE WRITES ON MARK FLG 1 I: BITS 1-15 ARE ALWAYS ZERO BIT 0 SET MEANS TRACK A CLEAR MEANS TRACK 8 369 Page 302 04017000 04018000 04019000 04020000 04021000 04022000 04023000 04024000 04025000 04026000 04027000 04028000 04029000 04030000 04031000 04032000 04033000 04034000 04035000 04036000 04037000 04038000 04039000 04040000 04041000 04042000 04043000 04044000 04045000 04046000 04047000 04048000 04049000 04050000 04051000 04052000 04053000 04054000 04055000 04056000 04057000 04058000 04059000 04060000 04061000 04062000 04063000 04064000 04065000 04066000 04067000 04068000 04069000 04070000 04071000 04072000 1,568,094 RAM WORDS 077707 FLGI 077730 077730 077731 077732 RHCTR PHCTR WCTR RWCTR 370 EQU CATMP+ 9 MARK SETS THIS BEFORE ENTERING IDR, ANDTHIS REMEMBERS THE TRACK COUNTERS EQU EQU EQU EQU 077733 PTR EQU 077733 BDPTR EQU 077734 BDPTR EQU T 16 T 16 T 17 T 18 POINTERS T 19 T 20 PARTITION HEAD COUNTER BODY COUNTS WORDS IN S RECORD GENERAL PURPOSE MOVING POINTER MOVING BODY POINTER END PASS 2 NO ERRORS DETECTED 370 Page 303 04073000 04074000 04075000 04076000 04077000 04078000 04079000 04080000 04081000 04082000 04083000 04084000 04085000 04086000 04087000 04088000 04089000 04090000 04091000 04092000 04093000 04094000 END OF 1,568,094 BASE-PAGE READ-WRITE-MEMORY 371 ORG 76550 B UNL LST BASE PAGE LINKS ORG DEF DEF 02009000 00465 022646 02010000 00466 022665 02011000 00467 022627 02012000 00470 022700 02013000 00471 022716 02014000 00472 022761 02015000 00473 022460 02016000 00474 022431 DEF DEF DEF DEF DEF DEF DEF DEF 02017000 00475 023506 02018000 00476 023514 02019000 00477 023517 DEF DEF DEF 02020000 00500 023561 02021000 00501 023601 02022000 00502 023630 B 2023000 00503 023617 02024000 00504 023623 DEF DEF DEF DEF DEF AMUPH MUPHI MAMPL MPUPH MPMLM MTHIM MTLOM ZRWM ERA 54 LST 51 FET 53 EDPTR TLNIO TLNX EOLNN GNEXT TCHR RNLON RNLOF MOVE MAIN PROGRAM TO HIGHER MEM.

MOVE MAIN PROGRAM TO LOWER MEMORY MOVE PART OF MAIN PROG HIGHER MOVE PART OF MAIN PROG LOWER MOVE RWM HIGHER MOVE RWM LOWER ZERO RWM ERASE ALL VARIABLES LIST A SPECIALKEY PUT SPECIAL KEY NUMBER IN I/O BUFFER RESET EDIT POINTERS PUT LINE NUMBER IN I/O BUFFER CONVERT FROM BINARY TO DECIMAL ASCII FIND END OF LINE IN I/O BUFFER GET NEXT CHARACTER TRANSFER CHARACTERS TURN ON RUN LIGHT TURN OFF RUN LIGHT 371 Page 304 00003000 76550 00004000 02000000 02001000 02003000 02004000 02005000 02006000 00463 02007000 00464 022641 02008000 00464 022662 1,568,094 CONTROL SUPERVISOR LINKS 02028000 02029000 11614 02030000 02031000 11614 02032000 02033000 11621 022000 02034000 11622 02035000 11623 022051 02036000 11624 02037000 11625 022000 02038000 02039000 11626 023477 02040000 11627 023477 02041000 11630 023477 02042000 11631 02043000 02044000 11633 02045000 11640 02046000 11645 02047000 02048000 11652 023333 02049000 11653 023340 02050000 11654 023333 02051000 11655 02052000 11656 023332 02053000 02054000 11657 023364 02055000 11660 023427 02056000 11661 023364 02057000 11662 02058000 11663 023363 02059000 02060000 11664 02061000 11671 02062000 11676 02063000 11703 02064000 02065000 11710 023122 02066000 11711 023147 02067000 11712 023122 02068000 11713 02069000 02070000 11715 023174 02071000 11716 023234 02072000 11717 023174 02073000 11720 02074000 02075000 11722 023637 02076000 11723 023637 02077000 11724 023637 02078000 11725 02079000 11726 023637 02080000 02081000 11727 02082000 02083000 11734 022273 ORG 11614 B BSS 5 DEF BSS DEF BSS DEF DEF DEF DEF BSS BSS BSS BSS DEF DEF DEF BSS DEF DEF DEF DEF BSS DEF BSS BSS BSS BSS DEF DEF DEF BSS DEF DEF DEF BSS DEF DEF DEF BSS DEF BSS STOR 1 STEDT I STOR INRE INRE INRE RHAR RHAR RHAR RHAR 1 RHRM 4 LAKE LFAR LAKE 1 LFRM 4 S BACK BACK BACK BACK FORW FORW 2 FORW PINK PINK PINK 1 PINK EXECUTE STORE INSERT/REPLACE CHAR CLEAR KEY DELETE CHAR STEP RIGHT ARROW LEFT ARROW DOWN ARROW RECALL PROG KEYS UP ARROW BACK FORWARD STOP, REW TYPING AIDS DEF SPKMO SPECIAL KEYS 372 Page 305 372 11735 022315 11736 022315 11737 022315 11740 022315 11741 11746 022164 11747 11750 022164 11751 11752 022164 11753 11760 11765 11766 023113 11767 11772 1,568,094 CONTROL SUPERVISOR LINKS DEF EXESK DEF EXESK DEF EXESK DEF EXESK BSS 5 PRINT-ALL DEF INLK INSERT LINE BSS 1 DEF INLK BSS 1 DEF INLK BSS 5 RUN BSS 5 CONTINUE BSS I LINE DELETE DEF LDELF BSS 3 BSS 5 RESULT 373 373 Page 306 02084000 02085000 02086000 02087000 02088000 02089000 02090000 02091000 02092000 02093000 02094000 02095000 02096000 02097000 02098000 02099000 02100000 02101000 02102000 02103000 02104000 02105000 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 374 )043233 STOR 02131000 22001 170700 02132000 02133000 02134000 02135000 02136000 02137000 02138000 02139000 02140000 02141000 02142000 02143000 02144000 02145000 02146000 02147000 02148000 22002 22003 22004 22005 22006 073002 067526 172002 067052 043151 STOR 6 22007 067054 22010 043245 STOR 7 22011 22012 22013 22014 22015 22016 22017 22020 22021 02149000 22022 02150000 22023 02151000 22024 02152000 22025 02153000 22026 02154000 22027 02155000 22030 02156000 22031 02157000 22032 02158000 22033 02159000 22034 02160000 22035 02161000 22036 02162000 22037 02163000 22040 043255 101277 050215 061234 STOR 4 131277 STOR 2 005277 015310 024257 024254 001310 030016 021234 030017 031310 140467 001277 STOXI 072101 043265 001277 021234 031277 001234 170607 131277 CONTROL AND I/O SUPERVISOR ROUTINES EDMM ORG 22000 B STORE (KEYBOARD MODE) JSM EDIN RAR 1 SLA JMP SAP JMP JSM + 2 STKEY STOR 6 STDI ISSBR JMP STEDX JSM CRCL JSM LDA AND IOR STA LDB CPB ADB ADB LDA STA ADA STA STA JSM LDA RIA JSM LDA ADA STA LDA SAL STA COVF END$,I BXCMM TMP 4 END$,I ENDS RMAX Ml Pl RMAX C TMP 4 D RMAX MTHM,I END + 1 TLCM END$ TMP 4 ENDS TMP 4 8 ' END$,I EDIT INITIALIZATION (RET P+ 1:

*A=CFLAG) POSITION STORE-KEY AND FETCH-LINE BITS KEY TO BE DEFINED? YES REPLACE OLD LINE? YES NULL PROGRAM OR REFERENCE TO LAST LINE? NO COMPILE, REV COMPILE, GET LINE LENGTH CHECK FOR OVERFLOW GET LAST BRIDGE SAVE ONLY REVERSE LINK INCLUDE LENGTH OF PRESENT LINE LINE BRIDGE CREATED GET END OF USER PROGRAM POINTR R-REGS GIVEN? NO; B = END$-1 I B = OLD FIRST WORD OF R-REGS (B=END$ IF NO R-REGS GIV MAX R-REG USED SET START SOURCE ADDR A = NEW RMAX VALUE SET START DESTINATION ADDR UPDATE MAX R-REG POINTR MOVE R-REGS TO HIGHER MEMORY GET DESTINATION ADDR POINT TO SECOND WORD OF LINE TRANSFER LINE TO MEMORY GET E/A OF PROG ADD LENGTH OF NEW LINE UPDATE POINTR GET LENGTH OF LINE PLACE IN UPPER HALF LAST BRIDGE CREATED 374 Page 307 02108000 02109000 02110000 02111000 02112000 02113000 02114000 02115000 02116000 02117000 02118000 02119000 02120000 02121000 02122000 02123000 02124000 22000 02125000 02126000 02127000 02128000 02129000 02130000 22000 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 02164000 22041 045226 STOR 5 02165000 22042 067043 02166000 22043 140476 STOR 3 02167000 22044 140475 02168000 22045 000053 02169000 22046 074550 02170000 22047 000146 02171000 22050 067242 02172000 02173000 02174000 02175000 02176000 02177000 02178000 02179000 02180000 02181000 22051 943233 STEDT 02182000 22052 043056 STDI 02183000 22053 067043 02184000 02185000 22054 043060 STEDX 02186000 22055 067041 02187000 02188000 22056 140512 STED 02189000 22057 140424 02190000 22060 031225 STED 5 02191000 22061 100000 02192000 22062 050053 02193000 22063 031227 02194000 22064 101225 02195000 22065 050052 02196000 22066 031730 02197000 22067 043245 02198000 22070 001234 02199000 22071 170040 02200000 22072 021227 02201000 22073 072403 02202000 22074 172003 02203000 22075 067111 02204000 02205000 02206000 02207000 22076 067127 02208000 02209000 02210000 02211000 22077 043133 02212000 22100 043127 02213000 22101 005225 02214000 22102 025227 02215000 22103 045234 02216000 22104 043141 02217000 02218000 02219000 STED 2 STED I ISZ JMP JSM JSM LDA PBD LDA JMP LNO + 1 ATLNI,I AEDPT,I EOL A,I M 2 STCFG INCRM LINE NO.

NEEDED FOR FIRST LINE NO.

TRANSFER LINE NO TO I/O BUFFER RESET I/O PTRS END OF LINE MARKER INCRM AND PLACE IN I/O BUFF CLR FETCH BIT 0 SET CFLAG STORE (EDIT MODE) JSM JSM JMP EDIN STED STOR 3 JSM STED 5 JMP STOR 5 JSM AFLAD,I JSM ASYER,I STA TMP 2 LDA A,I AND B 177 STA TM Pl LDA TMP 2,I AND STPMS STA T 16 JSM CRCL LDA TMP 4 TCA ADA TM Pl SZA STED 2 SAP STEDI JMP STED 4 EDIT INITIALIZATION STORE NEW LINE GIVE LINE NO.

STORE NEW LINE INCRM LINE NO AND DISP IT FIND LINE ADDR LINE SHOULD EXIST SAVE S/A OF LINE GET LINE BRIDGE GET OLD LINE LENGTH AND SAVE IT GET LINE BRIDGE AGAIN PRESERVE STOP BIT AND SAVE IT COMPILE, REV COMPILE, GET LINE LENGTH GET LENGTH MAKE NEG.

A=OLD LENGTH-NEW LENGTH SKIP IF OLD = NEW NEW > OLD? YES REPLACE OLD LINE BY NEW; OLD = NEW JMP STED 6 REPLACE OLD LINE BY NEW; OLD > NEW JSM JSM LDB ADB ISZ JSM STDIN STED 6 TMP 2 TM Pl TMP 4 STREL SET STOP BIT IN LINE BRIDGE TRANSFER LINE TO MEMORY S/A OF OLD/NEW LINE B = S/A OF NEXT LINE INC TMP 4 DUE TO STED 6 SET REVERSE LINK IN BRIDGE CLOSE-UP GAP 375 Page 308 375 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 02220000 22105 070570 02221000 22106 005227 02222000 22107 034016 02223000 22110 164466 02224000 02225000 02226000 02227000 22111 170040 STED 4 02228000 22112 031715 02229000 22113 101225 02230000 22114 050053 02231000 22115 021225 02232000 22116 004000 02233000 22117 001310 02234000 22120 021715 02235000 22121 030017 02236000 22122 140465 02237000 22123 043133 02238000 22124 005225 02239000 22125 025234 02240000 22126 043141 02241000 22127 001225 STED 6 02242000 22130 072101 02243000 22131 055234 02244000 22132 067265 02245000 02246000 02247000 22133 101225 STDIN 02248000 22134 050170 02249000 22135 061234 02250000 22136 061730 02251000 22137 131225 02252000 22140 170201 02253000 02254000 02255000 STREL 02256000 02257000 02258000 02259000 02260000 02261000 22141 035227 STREL 02262000 22142 100001 02263000 22143 050250 02264000 22144 005234 02265000 22145 174607 02266000 22146 060001 02267000 22147 131227 02268000 22150 170201 02269000 02270000 02271000 02272000 02273000 02274000 02275000 NID A,I DUMMY; POINT TO START DESTIN ADDR LDB TM Pl GET ADDR OF NEXT LINE STB C SET START SOURCE ADDR JMP AMPML,I MOVE PART OF PROG TO LOWER MEM.

+ RET P+I REPLACE OLD LINE BY NEW; OLD < NEW TOA STA LEA AND AEA LDBA LDA ADA STA JST JSL LDB ADB JSM LDA RIA DSZ JMP LDA AND IOR IOR STA RET T 5 TMP 2,I B 177 TMP 2 RMAX T 5 D AMPUP,I STDIN TMP 2 TMP 4 STREL TMP 2 + 1 TMP 4 TLCM TMP 2,I BUHM TMP 4 T 16 TMP 2,I MAKE DIFF NEG.

SAVE DIFFERENVE GET LINE BRIDGE GET OLD LINE LENGTH FIND S/A OF NEXT LINE B=END SOURCE ADDR MAX R-REG POINTR POINT TO NEW ADDR SET START DESTINATION ADDR MOVE PART OF MAIN PROG TO HIGHER MEM.

SET STOP BIT IN LINE BRIDGE S/A OF LINE POINT TO S/A OF NEXT LINE SET REVERSE LINK IN BRIDGE S/A OF NEW LINE POINT TO SECOND WORD DISCOUNT NEW LINE BRIDGE TRANSFER LINE TO MEM AND RET P+ i GET LINE BRIDGE SAVE UPPER HALF INCLUDE LENGTH OF LINE INCLUDE STOP BIT NEW LINE BRIDGE SETS REVERSE LINK IN LINE BRIDGE BRIDGE ADDR IN B LINE LENGTH IN TMP 4 USES TM Pl STB TM Pl LDA Bl AND BM 377 LDB TMP 4 SBL 8 IOR B STA TMP 1,I RET I SAVE BRIDGE ADDR GET BRIDGE SAVE TRACE,STOP BITS, FORWARD LINK GET LENGTH OF LINE POSITION IN UPPER BYTE SET BITS IN A SET NEW BRIDGE CHECK FOR NULL PROGRAM OR REFERENCE TO LAST LIN EXIT: RETP+I NOT FOUND 376 Page 309 376 377 1,568 094 377 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 02276000 02277000 02278000 02279000 02280000 2215102281000 22152 02282000 22153 02283000 22154 02284000 22155 02285000 22156 02286000 22157 02287000 22160 02288000 02289000 22161 02290000 02291000 22162 02292000 22163 02293000 02294000 02295000 02296000 02297000 02298000 22164 02299000 22165 02300000 22166 02301000 22167 02302000 22170 02303000 22171 02304000 22172 02305000 22173 02306000 22174 02307000 22175 02308000 22176 02309000 22177 02310000 02311000 02312000 02313000 02314000 02315000 02316000 02317000 02318000 02319000 02320000 02321000 02322000 02323000 02324000 02325000 02326000 02327000 02328000 02329000 02330000 02331000 22200 22201 22202 22203 22204 22205 22206 22207 22210 22211 22212 22213 140512 ISSBR 067162 104000 174610 174510 020001 011277 170202 170201 140514 ISSB 1 170202 043233 INLK 073412 001307 011277 067010 001226 010257 067226 043151 067226 067010 043245 INLK 2 043255 140512 INLK 3 140424 031225 004000 101225 031715 043141 001310 021234 030017 005225 22214 140465 22215 001715 22216 050215 22217 061234 22220 131225 22221 043127 22222 001226 22223 031721 22224 140517 22225 067043 RETP+ 2 FOUND JSM JMP LDB SBL SBR ADA CPA RET AFLAD,I ISSB 1 A,I 9 9 B EN Dt FIND LINE ADDR LINE NOT FOUND GET LINE BRIDGE GET LINE LENGTH POINT TO S/A OF NEXT LINE LAST LINE? YES RET 1 JSM ASLLN,I SET LNO TO LAST LINE RET 2 RET 2 LAST LINE OR NULL PROGRAM INSERT LINE-KEYBOARD MODE JSM RLA LDA CPA JMP LDA CPA JMP JSM JMP JMP JSM JSM JSM JSM STA LDB LDA STA JSM LDA ADA STA LDB EDIN EDIT INITIALIZATION INKL 2 SKIP IF FETCH BIT IS SET FWUP NULL PROGRAM? END$ STOR 7 YES, TREAT AS A STORE LNO IS LNO=-1 ? Ml INLKI YES, NOT REFERENCE TO LAST LINE ISSBR NULL PROG OR REFERENCE TO LAST LINE INLK 1 I NO STOR 7 YES; TREAT IT AS A STORE CRCL COMPILE, REV COMPILE, GET LINE LENGTH COVF CHECK FOR OVERFLOW AFLAD,I FIND LINE ADDR ASYER,I LINE SHOULD EXIST TMP 2 SAVE S/A OF REFERENCE LINE A SET BRIGE ADDR FOR STREL TMP 2,I GET LINE BRIDGE T 5 SAVE OLD BRIDGE STREL SET REVERSE LINK IN LINE BRIDGE RMAX MAX R-REG POINTR TMP 4 A = START DESTINATION ADDR D SET D-REG TMP 2 END SOURCE ADDR JSM AMPUP,I MOVE PART OF USER PROG TO HIGHR MEM.

LDA AND IOR STA JSM LDA STA JSM JMP T 5 BXCMM TMP 4 TMP 2,I STED 6 LNO T 9 ARENI,I STOR 3 GET REF LINE BRIDGE AGAIN SAVE ONLY REVERSE LINK INCLUDE LENGTH OF NEW LINE BRIDGE OFNEW LINE TRANSFER LINE TO MEMORY GET LINE NUMBER SET FOR RENUMBER ROUTINES ADJUST GTO'S AND GSB'S GIVE LINE NO.

Page 310 1,568,094 377 377 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 02332000 02333000 22226 043245 INLK 1 02334000 22227 043255 02335000 22230 045226 02336000 22231 067232 02337000 22232 067201 02338000 02339000 02340000 02341000 02342000 02343000 02344000 02345000 22233 140435 EDIN 02346000 22234 140461 02347000 22235 000214 02348000 22236 130311 02349000 22237 000254 02350000 22240 031517 02351000 22241 000151 02352000 02353000 22242 051232 STCFG 02354000 22243 031232 02355000 22244 170201 COVI 02356000 02357000 02358000 02359000 02360000 02361000 22245 140346 CRCL 02362000 22246 004317 02363000 22247 140356 02364000 22250 001251 02365000 22251 010117 02366000 22252 164510 02367000 02368000 22253 140404 02369000 22254 031061 02370000 02371000 02372000 02373000 02374000 02375000 02376000 02377000 02378000 02379000 22255 001234 COVF 02380000 22256 021310 02381000 22257 170040 COVX 02382000 22260 021263 02383000 22261 072402 02384000 22262 172062 02385000 22263 140404 ERMOV 02386000 22264 032060 02387000 JSM CRCL JSM COVF ISZ LNO JMP +l JMP INLK 3 COMPILE REV COMPILE, GET LINE LENGTH CHECK FOR OVERFLOW ADJUST LINE NO.

INSERT LINE EDIT INITIALIZATION EXIT: RET P+I A = CFLAG JSM JSM LDA STA LDA STA LDA ATRBF,I APRKB,I EOLB AKB FL,I Pl RGFLG M 5 TRANSFER INFO FROM I/O TO KEYB BUFF GO THROUGH PRINTALL GET EOL AND BLANK STORE IN LAST WORD OF KBD BUFFER ASSIGNMENT TO RES REG NOT ALLOWE CLR RUN DONE BIT 2 AND CFLAG STA CFLAG RET 1 COMPILE, REV COMPILE, GET LINE LENGTH SUBR.

JSM ACPLR,I GO TO COMPILER, COMPILE KBD BUFFER LDB AIBSL I/O BUFF START OF LINE (ALLOW FOR LINE NO AND COLL JSM ARCLR,I REVERSE COMPILE TO CHECK LINE LENGTH LDA OFLAG GET REV COMPILE OVERFLOW FLAG CPA B 40 IS IT A BLANK? JMP AGLL,I YES, NO OVERFLOW, GET LINE LENGTH, RETURN JSM AERRI,I LINE TOOLONG ASC 1,21 CHECK FOR OVER-FLOW ENTRY: TMP 4 = LENGTH NEEDED "COVX" ENTRY: A = POSSIBLE ADDR OF RMAX LDA TMP 4 ADA RMAX TCA ADA A Pl SZA ERMOV SAP COVI JSM AERRI I ASC 1,40 GET LENGTH A=NEW MAX R-REG ADDR MAKE NEGATIVE TOP OF EXECUTION STACK GIVE AN ERROR IF NO MEM AVAILABLE NO OVERFLOW IF RESULT IS POSITIVE MEMORY OVERFLOW Page 311 378 378 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 02388000 02389000 02390000 02391000 02392000 02393000 02394000 02395000 02396000 22265 004303 TLCM 02397000 22266 034016 02398000 22267 030017 02399000 22270 025234 02400000 22271 024257 02401000 22272 164470 TRANSFER LINEFROM COMPILE BUFF TO MEMORY ENTRY: A=DESTINATION ADDR TMP 4 =LINE LENGTH LD 8 STB STA ADB ADB JMP ACBF ADDR OF COMPILE BUFF C SET C-REG D SET D-REG TMP 4 B = ACBF + LINE LENGTH M 1 B = LAST SOURCE ADDR AMTLM,I TRANSFER LINE INTO MEM AND RETURN P+ 1 379 Page 312 379 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES SPECIAL KEYS SOFTWARE as as 02414000 02415000 02416000 02417000 02418000 02419000 02420000 02421000 02422000 02423000 02424000 02425000 02426000 02427000 02428000 02429000 02430000 02431000 02432000 02433000 02434000 02435000 02436000 02437000 02438000 02439000 02440000 SPKMO:

22273 043307 SPKMO JSM SVKEY 22274 000423 LDA ASCND 22275 22276 22277 22300 22301 22302 22303 22304 22305 22306 22307 22310 22311 02441000 22312 02442000 22313 02443000 22314 02444000 02445000 02446000 02447000 02448000 02449000 02450000 02451000 02452000 02453000 22315 02454000 02455000 22316 02456000 22317 004314 140414 067316 014145 067407 014144 067436 014141 067457 067316 LDB JSM JMP CPB JMP CPB JMP CPB JMP JMP MODE 0 ENTRY POINT FOR SPECIAL KEYS SAVE KEY NUMBER SEARCH THE I/O BUFFER FOR MAINFRAME COMMANDS GET COMMAND FROM I/O BUFFER INCLUDING THE NON-COMMAND "LIST".

P+ 1:NO COMMAND FOUND, MUST BE KEY EXECUTION P+ 2: COMMAND FOUND, B = OP CODE OP CODE 2: FETCH OP CODE 3: ERASE OP CODE 6: LIST AIBFX ACTFC,I EXEKK P 2 FETSK P 3 ERSK P 6 LSTSK EXEKK COMMAND FOUND BUTNOT ONE THAT THE SPECIAL KEYS SOFTWARE HANDLES, SO DEFAULT TO KEYEXECUTION.

as 001212 SVKEY 031714 001235 020167 031212 170201 LDA STA LDA ADA STA RET SPKN T 4 SKEY BM 200 SPKN SAVE THE CURRENT KEY NUMBER REPLACE IT WITH THE NUMBER OF THE KEY TO BE EXECUTED as asa a: g EXESK: KEY EXECUTION 043307 EXESK JSM SVKEY SET KEY NUMBER 000166 EXEKK LDA M 97 CLR RECALL BITS 5,6 043242 JSM ST(FG Page 313 02403000 02404000 02405000 02406000 02407000 02408000 02409000 02410000 02411000 02412000 380 380 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 02457000 02458000 02459000 02460000 02461000 02462000 02463000 02464000 02465000 02466000 02467000 02468000 02469000 02470000 22320 22321 22322 22323 22324 22325 22326 22327 22330 22331 22332 22333 22334 22335 043571 067401 172701 031713 001256 010254 140451 010143 140451 001713 030017 043615 000000 031713 02471000 22336 010111 02472000 22337 067351 02473000 22340 010104 02474000 22341 067351 02475000 02476000 22342 02477000 22343 02478000 22344 004017 035712 140430 EXESI 1 02479000 22345 067377 " 02480000 22346 02481000 22347 02482000 22350 02483000 22351 P 2484000 22352 02485000 22353 02486000 02487000 22354 02488000 22355 02489000 02490000 22356 02491000 22357 02492000 22360 02493000 22361 02494000 22362 02495000 22363 02496000 22364 02497000 02498000 22365 02499000 02500000 22366 02501000 22367 02502000 22370 02503000 02504000 02505000 02506000 02507000 02508000 02509000 02510000 02511000 02512000 140446 005712 034017 043615 EXE 52 067354 067342 001714 EXE 53 031212 040715 005257 001713 010111 067366 010104 067371 170201 014177 164416 164431 22371 014177 22372 164422 22373 014145 22374 140415 22375 164415 22376 170201 22377 043403 22400 031464 JSM FINDK JMP E 30 SAM + 1,S STA T 3 LDA MODE CPA Pl JSM ACLEB,I CPA P 4 JSM ACLEB,I LDA T 3 STA D JSM PLUCK NOP STA T 3 CPA B 52 JMP EXE 52 CPA B 57 JMP EXE 52 LDB STB JSM D T 2 AISTX,I JMP E 34 JSM LDB STB JSM JMP JMP LDA STA JSM LDB LDA CPA JMP CPA JMP RET EXE 54 CPB JMP JMP EXE 55 E 34 ASBP,I T 2 D PLUCK EXE 53 EXES I T 4 SPKN CLMOD CSTAT T 3 B 52 EXE 54 B 57 EXE 55 PO AEXCK,I AEXST,I CPB PO JMP AECIM,I CPB P 2 JSM ACONT,I JMP ACONT,I RET 1 JSM SKERR ASC 1,34 HAS THE KEY BEEN DEFINED? P+ 1: KEY IS NOT DEFINED, GIVE ERROR 30 P+ 2: KEY FOUND, LET T 3 = CHAR ADDR OF KEY DEFINITION, SAVE ADDR IF "EOL" OR "FETCH" MODE, THEN CLEAR THE EDIT BUFFER BEFORE TRANSFERRING THE KEY DEFINITION GET KEY ADDR SET POINTER WITHDRAW THE FIRST CHARACTER (THERE IS ALWAYS A FIRST CHARACTER).

SAVE THE FIRST CHAR AS THE IEX/CONT FLAG FIRST CHARACTER IS "", DON'T TRANSFER IT FIRST CHARACTER IS "/", DON'T TRANSFER IT.

SAVE OLD PTR TRANSFER THE FIRST CHAR TO THE I/O BUFF P+ 1: I/O BUFFER FULL, CHAR NOT TRANSFERED UPDATE THE DISP POINTER RESTORE CHAR POINTER GET THE NEXT CHAR P+ 1: END OF KEY DEFINITION REACHED P+ 2: GOT ANOTHER CHARACTER, TRANSFER IT TO I/O BUFF RESTORE THE CURRENT KEY NUMBER SET KEY ENTRY MODE B = CONTROL STATE.

RECALL THE IEX/CONT FLAG IMMEDIATE EXECUTE KEY "/"? IMMEDIATE CONTINUE KEY.

EXIT FOR TYPING AIDS EXIT FOR IEX KEYS COMMAND EXECUTION STATEMENT EXECUTION FOR

STATE = 2,4 EXIT FOR ICONT KEYS.

CSTAT= 0: NORMAL CONTINUE IF LIVE AND KBD DISPLAY BUFFER BEEP, RETURN P+ 2 CSTAT#0: "ENTER" CONTINUE.

SPECIAL KEY ERROR ERROR 34, DISPLAY BUFFER OVERFLOW Page 314 381 381 382 Page 315 02513000 02514000 22401 02515000 22402 02516000 02517000 22403 02518000 22404 02519000 22405 02520000 22406 02521000 02522000 02523000 02524000 02525000 02526000 02527000 02528000 22407 02529000 22410 02530000 22411 02531000 02532000 22412 02533000 02534000 22413 02535000 22414 02536000 22415 02537000 22416 02538000 22417 02539000 22420 02540000 22421 02541000 22422 02542000 22423 02543000 02544000 02545000 02546000 02547000 02548000 02549000 02550000 02551000 02552000 02553000 02554000 02555000 02556000 02557000 02558000 02559000 02560000 02561000 02562000 02563000 02564000 02565000 22424 22425 22426 22427 22430 22431 22432 22433 22434 22435 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 043403 031460 140435 001714 031212 164404 382 E 30 JSM SKERR SPECIAL KEY NOT DEFINED, ERROR 30 ASC 1,30 SKERR JSM ATRBF,I TRANSFERI/O BUFFTOKBD BUFF LDA T 4 RESTORE CURRENT KEY NUMBER STA SPKN JMP AERRI,I, GO TO ERROR ROUTINE FETSK: FETCH A SPECIAL KEY 001232 FETSK 060145 031232 140451 140451 043571 067431 172701 030017 043615 FETSI 164436 140430 164436 067417 004223 134313 001212 004314 164477 043424 140436 140433 140452 170202 LDA IOR STA JSM JSM JMP SAM STA JSM JMP JSM JMP JMP CFLAG P 2 CFLAG ACLEB,I FINDK FET 53 +I,S D PLUCK AEPON,I AISTX,I AEPON,I FET 51 SET BIT ONE OF CFLAG TO INDICATE "KEY TO BE STORED" CLEAR I/O BUFF T BLANKS AND RESET PTRS HAS THE KEY BEEN DEFINED? P+ 1: NO, DISPLAY LOWER CASE "F#" P+ 2: YES, DISPLAY THE KEY DEFINITION D = ADDRESS OF FIRST DEFINITION CHARACTER GET A CHARACTER FROM THE KEY DEFINITION P+ 1: END OF DEFINITION REACHED P+ 2: TRANSFER THE CHARACTER TO THE I/O BUFFER P+I: I/O BUFFER FULL SHOULD NEVER OCCUR GET NEXT CHAR ROUTINE TO PUT LOWER CASE "F#" IN THE I/O BUFFER (I/O BUFFER MUST BE CLEARED TO BLANKS ON ENTRY) FET 52 LDB B 63 K STORE A LOWER CASE "F" AS THE FIRST CHARACTER STB AIBUF,I LDA SPKN GET KEY NUMBER FOR ABTDA LDB AIB FX THE ASCII KEY NUMBER TO THE MESSAGE JMP ABTDA,I FET 53 JSM FET 52 PUT F# IN DISPLAY JSM AEPON,I GO THROUGH PRINT-ALL JSM ALDSP,I DISPLAY F# JSM AEOLB,I PUT EOL IN EDIT BUFFER RET 2 SKIP OVER DISPLAY OF I/O BUFFER IN IDLE LOOP ERASK: ERASE A SPECIAL KEY CLR BITS 0-3 OF CFLAG, PUT EOL IN EDIT BUFF 22436 043750 ERSK JSM ER 510 383 1,568,094 383 Page 315 Continued CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 02566000 02567000 22437 043571 ERSI JSM FINDK PUT "EOL" IN THE 1ST CHAR IS THE KEY DEFINED? 02568000 22440 170201 RET 1 P+ 1: NO, CAN'T VERY WELL STORE I Tll 1,568,094 AND I/O SUPERVISOR SERVICE ROUTINES 02569000 22441 035741 02570000 22442 030017 02571000 02572000 22443 043615 02573000 22444 067446 02574000 22445 067443 02575000 02576000 22446 004017 02577000 22447 176601 02578000 22450 034016 02579000 22451 005741 02580000 22452 034017 02581000 22453 010045 02582000 22454 067656 02583000 22455 072477 02584000 22456 164464 02585000 02586000 02587000 02588000 02589000 02590000 02591000 02592000 22457 02593000 02594000 22460 02595000 22461 02596000 02597000 22462 02598000 22463 02599000 22464 02600000 22465 02601000 02602000 22466 02603000 22467 02604000 22470 02605000 02606000 22471 02607000 22472 02608000 22473 02609000 22474 02610000 22475 02611000 22476 02612000 02613000 22477 02614000 22500 02615000 22501 02616000 22502 02617000 22503 02618000 22504 02619000 STB T 25 STA D ER 52 ER 52 ER 53 ER 53 ER 54 LSTSK:

140475 LSTSK 000147 LSTS I 043242 043571 064710 172701 031737 140450 140444 043424 004017 034016 000134 176402 020254 031711 004077 074541 004117 074541 001737 030017 JSM JMP JMP PLUCK ER 53 ER 52 P+ 2: YES, NOW FIND WHERE IT ENDS.

D = ADDRESS OF SECOND CHARACTER IN DEFINITION GET ANOTHER CHAR P+ 1: FOUND THE END OF THE KEY DEFINITION P+ 2: KEEP GETTING CHARS UNTIL THE END IS FOUND LDB D SBM + 1,C STB C C IS THE WORD ADDRESS OF THE FIRST LDB T 25 WORD FOLLOWING THE KEY DEFINITION.

STB D ID IS THE WORD ADDRESS OF THE CPA B 377 BEGINNING OF THE KEY IF B 377 or B O WA JMP MPKML THE NEXT CHARACTER, MOVE PART 'OF SZA ER 54 THE KEYS AND ALL MAINLINE TO LOWER JMP AMAMP,I MEMORY AND RETURN P+l ELSE MOVE ONLY MAINLINE TO LOWER MEM & RET P+l LIST A SPECIAL KEY JSM LDA JSM JSM JMP SAM STA JSM JSM JSM LDB STB LDA SBM ADA STA LDB PBC LDB PBC LDA STA AEDPT,I M 3 STCFG FINDK EOLIO +I,S T 23 ACLBI,I A.PRN,I FET 52 D C Pll + 2 Pl Tl P 58 B,I B 40 B,I T 23 D RESET I/O PTRS CLR BIT I OF CFLAG TO GET OUT OF KEY MODE HAS THE KEY BEEN DEFINED? P+ 1: NO, DISPLAY EOL AND RETURN P+ 2: YES, SAVE STARTING CHARACTER ADDRESS CLR I/O BUFFER PRINT A BLANK LINE PUT "F#" IN THE I/O BUFFER GET CHAR ADDR OF LAST DIGIT OF KEY SET PTR COMPUTE THE NUMBER OF CHARACTERS LEFT IN THE FIRST LINE AFTER "F#":

PUSH":"

PUSH "" SET UP THE BYTE POINTR FOR THE KEY DEFIN.

384 Page 316 CONTROL 384 385 1,568,094 385 Page 316 Continued CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 02620000 22505 043615 LST 52 JSM PLUCK GETTHENEXT KEY DEFINITION CHARACTER 02621000 22506 067521 JMP LST 53 P+ 1: END OF DEFINITION REACHED 02622000 22507 074540 PBC A,I P+ 2: NOW PUT IT IN THE I/O BUFFER 02623000 22510 055711 DSZ Tl HAS THE PRINT LINE BEEN FILLED? 02624000 22511 067505 JMP LST 52 NO, GET ANOTHER CHARACTER.

386 Page 317 1,568,094 386 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 02625000 02626000 22512 140444 02627000 22513 140450 02628000 22514 000130 02629000 22515 031711 02630000 22516 000314 02631000 22517 030016 02632000 22520 067505 02633000 02634000 22521 001711 LST 53 02635000 22522 010130 02636000 22523 067525 02637000 22524 140444 02638000 22525 064710 CIOEL 02639000 02640000 02641000 02642000 STKE 02643000 02644000 02645000 02646000 22526 043437 STKEY 02647000 22527 001215 02648000 22530 005214 02649000 22531 076402 02650000 22532 001213 02651000 22533 010315 02652000 22553 067570 02653000 02654000 22535 031215 02655000 22536 172004 02656000 22537 000177 02657000 22540 140430 02658000 22541 000000 02659000 02660000 22542 000315 STKE 2 02661000 22543 170040 02662000 22544 021215 02663000 22545 020254 02664000 22546 031734 02665000 02666000 22547 021310 02667000 22550 030017 02668000 22551 140463 02669000 02670000 22552 005734 02671000 22553 174040 02672000 22554 025307 02673000 22555 000170 02674000 22556 061212 JSM JSM LDA STA LDA STA JMP LDA CPA JMP JSM JMP A,PRN,I ACLBI,I P 15 TI AIBFX C LST 52 TI P 15 + 2 A.PRN,I EOLIO YES, PRINT THE LINE CLR I/O BUFFER TO BLANKS PREPARE TO BUILD THE NEXT LINE, ONE BLANK FOLLOWED BY 15 CHARACTERS.

HAVE ANY CHARACTERS BEEN STORED IN THE NEXT LINE TO BE PRINTED? NO, DON'T PRINT THE I/O BUFFER FULL OF BLANKS YES, PRINT THE LAST LINE CLEAR I/O BUFF, SET EOL IN I/O BUFF AND RETURN P+ 1 Y: STORE A SPECIAL KEY JSM LDA LDB SZB LDA CPA JMP STA SAP LDA JSM NOP ER 51 IOCP CRSP + 2 OLCP AIBFM STKE 4 IOCP STKE 2 PO AISTX,I LDA AIBFM TCA ADA IOCP ADA Pl STA ADA STA JSM LDB TCB ADB LDA IOR ERASE OLD KEY FIRST GET CURRENT BUFFER PTR USE OLCP IF CURSOR IS SET SKIP IF NOT SET CURSOR IS SET, USE OLCP THE I/O BUFFER WITH THE FIRST CHARACTER ADDRESS.

THE BUFF IS EMPTY, NOTHING TO STORE:

RETURN I/O BUFFER IF AN ODD NUMBER OF CHARACTERS ARE PRESENT, PUSH A B O ONTO THE END OF THE DEFINITION.

(THERE WILL ALWAYS BE ROOM FOR THE B 0) (LENGTH OF KEY DEFINITION (WORDS) = (IOCP-AIBFM + 1) T 20 SAVE THE LENGTH FOR LATER USE.

RMAX SET-UP THE DESTINATION ADDRESS FOR MAINLINE D PROGRAM AREA.

AMUPH,I MOVE ALL OF USER MAIN PROGRAM TO HIGHER MEMORY.

T 20 CALCULATE THE STARTING ADDRESS OF THE NEWLY CREATED KEY AREA.

FWUP M 256 BUILD THE KEY HEADER (B 377, KEY NO) IN A SPKN AND STORE IT AS THE FIRST WORD OF THE KEY DEFINITION 387 1,568,094 Page 317 Continued CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 02675000 22557 130001 02676000 02677000 22560 000313 02678000 22561 030017 02679000 22562 055734 02680000 STA B,1 LDA AIBUF STA D DSZ T 20 USE D AS A WORD POINTER INTO THE I/O BUFFER AND TRANSFER THE REST OF THE KEY DEFINITION TO ITS NEW HOME.

387 Page 318 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 22563 044001 STKE 3 ISZ B BUMPTHEKEYAREAWORD POINTER 22564 070570 WWD A,I GET THEN NEXT WORD OUT OF THE I/O BUFFER 22565 130001 STA B,I AND TRANSFER IT TO THE KEY AREA.

22566 055734 DSZ T 20 ALL WORDS TRANSFERRED? 22567 067563 JMP STKE 3 NO KEEP GOING.

22570 067750 STKE 4 JMP ER 510 CLR BITS 0-3 OF CFLAG PUT EOL IN EDIT BUFFER FINDK:

P+I:

P+ 2:

DETERMINE WHETHER KEY F IS DEFINED.

KEY F IS NOT DEFINED KEY F IS DEFINED, AND A = WORD STARTING ADDRESS OF THE KEY DEFINITION B = WORD STARTING ADDRESS OF THE KEY HEADER (B 3377, KEY NO) LDA CPA RET STA LDB SBP WBD CPA JMP CPB RET WBD CPA JMP JMP LDA SAM LDB ADB RET Baa FWAM FWUP D FWUP +I,S A,I SPKN FIND 3 D A,I B 377 FINDI FIND 2 D +l,C A MI IF FWAM = FWUP THEN NO KEYS ARE DEFINED.

ASSUME THAT THE LEFT BYTE OF FWAM,I MUST BE B 377.

THE NEXT BYTE WITHDRAWN WILL BE THE KEY NO OF THE FIRST KEY B = CHAR ADDRESS OF FWUP'S LEFT BYTE CHECK TO SEE IF THE KEY JUST FOUND IS THE ONE BEING SEARCHED FOR.

YES, SET UP A & B AND RETURN P+ 2.

HAS THE BEGINNING OF MAINLINE PROGRAMMING HAS BEEN FOUND YES, THE KEY F IS NOT DEFINED.

KEEP LOOKING FOR THE START OF THE NEXT KEY.

FOUND THE START OF THE NEXT KEY, CHECK KEY NO.

CHECK FOR THE END OF THE KEY AREA.

A = ADDRESS OF DEFINITION B = ADDRESS OF HEADER 02696000 02697000 02698000 02699000 22571 001306 FINDK 02700000 22572 011307 02701000 22573 170201 02702000 02703000 22574 030017 02704000 22575 005307 02705000 22576 176301 02706000 02707000 22577 074570 FINDI 1 02708000 22600 011212 02709000 22601 067610 02710000 02711000 22602 014017 FIND 2 02712000 22603 170201 02713000 22604 074570 02714000 22605 010045 02715000 22606 067577 02716000 22607 067602 02717000 02718000 22610 000017 FIND 3 02719000 22611 172601 02720000 22612 004000 02721000 22613 024257 02722000 22614 170202 02723000 02724000 02725000 02681000 02682000 02683000 02684000 02685000 02686000 02687000 02688000 02689000 02690000 02691000 02692000 02693000 02694000 02695000 388 1.568094 9 RR 389 1,568,094 389 Page 318 Continued CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 02726000 PLUCK:

02727000 P+ 1:

02728000 02729000 P+ 2:

02730000 02731000 02732000 02733000 22615 074570 PLUCK WBD 02734000 22616 010045 CPA 02735000 22617 170201 PLUCI RET 02736000 22620 005307 LDB WITHDRAW (WBD A,I) THE NEXT CHARACTER FROM THE KEY DEFINITION END OF DEFINITION REACHED (A = B 377, B 0, OR THE FIRST BYTE OF THE MAINLINE PROGRAM AREA A = NEXT DEFINITION BYTE A,I WITHDRAW THE NEXT BYTE B 377 IF IT IS THE START OF A NEW KEY THEN WE'RE DONE.

1 FWUP IF WE JUST WITHDREW THE FIRST BYTE OF THE MAINLINE Page 319 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 02737000 22621 014017 CPB D PROGRAM AREA, WE'RE DONE.

02738000 22622 067625 JMP + 3 02739000 22623 072474 SZA PLUC 1 MUSTTEST O AFTER 1ST BYTE OF FWUP BECAUSE IT WILL 02740000 22624 170202 RET 2 02741000 22625 000257 LDA Ml ALWAYS BE ZERO AS THE LINK OF LINE ZERO.

02742000 22626 170201 RET I 1,568,094 Page 320 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES MOVE A BLOCK OF INFO TO HIGHER MEMORY 070570 MTHIM 024257 000016 MTHM 1 172601 030016 010001 067712 ENTRY: C=START SOURCE ADDR D=START DESTINATION ADDR B=END SOURCE ADDR VVD ADH LDA SAM STA CPA JMP A,I Ml C + 1,C C B MTLM 2 070760 070750 067631 22641 005307 22642 043646 22643 000017 22644 031307 22645 170201 MUPHI MSTFW 001310 MPUPH 030016 000017 031712 043257 043627 001712 067670 001310 MPUPH 030016 000017 031712 043257 043627 001712 067670 WWC A,D PWD A,D JMP MTHMI DUMMY: INCRM DESTIN POINTR ADJUST END ADDR GET WORD POINTR CLEAR BIT 15 AND UPDATE C-REG.

CURRENT = END ADDR? YES, CLEAR BIT 15 OF D-REG AND RETURN P+ 1 FETCH ONE WORD AND DECRM DECRM AND PLACE ONE WORD LOOP MOVE ALL OF USER MAIN PROGRAM TO HIGHER MEMORY ENTRY: D=START DESTINATION ADDR CHECK FOR MEMORY OVERFLOW LDB JSM LDA STA FWUP MPUPH D FWUP RET 1 FIRST WORD OF USER PROGRAM ADDR MOVE TO HIGHER MEMORY LAST DESTINATION ADDR UPDATE START OF USER PROGRAM POINTR MOVE PART OF USER MAIN PROGRAM TO HIGHER MEMORY ENTRY: D=START DESTINATION ADDR B=END SOURCE ADDR CHECK FOR MEMORY OVERFLOW LDA STA LDA STA JSM JSM LDA JMP RMAX C D T 2 COVX MTHIM T 2 MSTPT ADDR OF MAX R-REG USED SET START SOURCE ADDR START DESTINATION ADDR SAVE POINTR CHECK FOR MEMORY OVERFLOW MOVE TO HIGHER MEMORY SET END$, RMAX 22627 22630 22631 22632 22633 22634 22635 22636 22637 22640 02744000 02745000 02746000 02747000 02748000 02749000 02750000 02751000 02752000 02753000 02754000 02755000 02756000 02757000 02758000 02759000 02760000 02761000 02762000 02763000 02764000 02765000 02766000 02767000 02768000 02769000 02770000 02771000 02772000 02773000 02774000 02775000 02776000 02777000 02778000 02779000 02780000 02781000 02782000 02783000 02784000 02785000 02786000 02787000 02788000 02789000 02790000 02791000 02792000 02793000 02794000 02795000 02796000 02797000 02798000 02799000 22646 22647 22650 22651 22652 22653 22654 22655 390 390 391 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 02800000 02801000 02802000 02803000 02804000 02805000 02806000 02807000 22656 005307 N 02808000 22657 024257 02809000 22660 043700 02810000 02811000 02812000 02813000 22661 044017 02814000 02815000 02816000 02817000 02818000 02819000 02820000 02821000 22662 001307 02822000 22663 030016 02823000 22664 043643 02824000 02825000 02826000 02827000 02828000 02829000 02830000 02831000 02832000 MOVE PART OF KEYS AND MAIN PROGRAM LOWER ENTRY: C=START SOURCE ADDR D=START DESTINATION ADDR IPKML LDB FWUP ADB MI JSM MTLOM START OF MAIN PROGRAM POINT TO END OF KEYS MOVE PART OF KEYS LOWER D=NEW FWUP-1 ISZ D POINT TO NEW FWUP AND PROCEED TO "MAMPL" MOVE ALL MAIN PROGRAM TO LOWER MEMORY ENTRY: D=START DESTINATION ADDR MAMPL LDA FWUP STA C JSM MSTFW 02833000 22665 005310 MPMLN 02834000 22666 043700 02835000 22667 000017 02836000 22670 005310 MSTPT 02837000 22671 174040 02838000 22672 024000 02839000 22673 025277 02840000 22674 035277 02841000 22675 004000 02842000 22676 035310 02843000 22677 170201 02844000 02845000 02846000 02847000 02848000 02849000 02850000 02851000 02852000 02853000 02854000 02855000 GET START SOURCE ADDR GET C-REG UPDATE START OF PROG PTR MOVE PART OF USER MAIN PROGRAM TO LOWER MEMORY ENTRY: C=START SOURCE ADDR D=START DESTINATION ADDR M LDB JSM LDA LDB TCB ADB ADB STB LDB STB RET RMAX MTLOM D RMAX A END$ END$ A RMAX MAX R-REG USED MOVE TO LOWER MEMORY SET PTR OLD MAX R-REG MAKE NEG.

B PTR CHANGE FIND NEW END OF PROG ADDR UPDATE THE POINTR GET LAST DESTINATION ADDR UPDATE MAX R-REG USED MOVE A BLOCK OF INFO TO LOWER MEMORY ENTRY: C=START SOURCE ADDR D=START DESTINATION ADDR B=END SOURCE ADDR EXIT: D=LAST DESTINATION ADDR 391 Page 321 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 02856000 02857000 22700 070770 02858000 22701 024254 02859000 22702 000016 02860000 22703 172601 02861000 22704 030016 02862000 22705 010001 02863000 22706 067712 02864000 02865000 22707 070560 02866000 22710 070550 02867000 22711 067702 02868000 22712 000017 02869000 22713 172601 02870000 22714 030017 02871000 22715 170201 02872000 02873000 02874000 02875000 02876000 02877000 02878000 02879000 02880000 02881000 02882000 22716 035711 02883000 22717 004177 02884000 22720 134000 02885000 22721 011711 02886000 22722 170201 02887000 02888000 22723 072175 02889000 02890000 02891000 02892000 02893000 02894000 02895000 02896000 22724 140501 02897000 22725 030017 02898000 22726 010053 02899000 22727 067740 02900000 22730 010065 02901000 22731 164426 0290200 02903000 02904000 02905000 02906000 02907000 02908000 02909000 02910000 02911000 22732 22733 22734 22735 22736 22737 MTLOM MTLM 1 MTLM 2 ZRWM ZRWM ZRWM 1 ERAS 010062 067753 012652 067746 140404 ERCNR 030470 WWD A,D ADB Pl LDA C SAM +I,C STA C CPA B JMP MTLM 2 WWC A,I PWD A,I JMP MTLM 1 LDA D SAM +I,C STA D RET I DUMMY: DECRM DESTIN POINTR ADJUST END ADDR GET WORK POINTR CLEAR BIT 15 AND UPDATE C-REG.

CURRENT = END ADDR? YES FETCH ONE WORD AND INCRM INCRM AND PLACE ONE WORD LOOP GET D-REG.

CLEAR BIT 15 AND UPDATE D-REG.

ZERO R/W MEMORY SEGMENT ENTRY: A = START ADDR B =END ADDR EXIT: B=P 0, A = END ADR STB LDB STB CPA RET TI PO A,I Tl SAVE END ADDR CLEAR B-REG ZERO ONE WORD DONE? YES RIA ZRWM 1 NO; COUNT ERASE MAIN PROGRAM JSM STA CPA JMP CPA JMP CPA JMP CPA JMP JSM ASC AGNXT,I GET NEXT CHAR.

D SET FLAG FOR AUTO START ROUTINES EOL EOL MARK? ERA 52 YES; ERASE MAIN PROG.

B 141 A? AERSA,I YES, GO THROUGH PARTIAL SYSTEM STARTB 153 ERA 53 B 166 ERA 55 AERRI,I 1,18 K? YES; ERASE KEYS V? YES,ERASE VARIABLES COMMAN NOT RECOGNIZED ERASE LDA FWUP FIRST WORD OF USER PROG POINTER Page 322 392 392 22740 001307 ERA 52 393 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 02912000 22741 031277 02913000 22742 031310 02914000 22743 000177 02195000 22744 031315 02196000 22745 131277 02917000 02918000 02919000 02920000 22746 043761 ERA 55 02921000 02922000 22747 140514 ERA 59 02923000 22750 140452 ER 510 02924000 22751 000160 02925000 22752 067242 02926000 02927000 02928000 02929000 22753 001306 ERA 53 02930000 22754 011307 02931000 22755 067747 02932000 22756 030017 02933000 22757 043662 02934000 22760 067747 02935000 02936000 02397000 02938000 02939000 02940000 22761 001277 02941000 22762 031310 02942000 22763 005313 02943000 22764 035311 02944000 22765 035312 02945000 22766 000276 02946000 22767 004276 02947000 22770 024101 02948000 22771 043716 02949000 22772 035506 02950000 22773 140361 02951000 22774 001320 02952000 22775 072402 02953000 22776 141320 02954000 22777 170201 02955000 029560 Q O 02957000 02958000 02959000 02960000 02961000 02962000 02963000 02964000 02965000 02966000 02967000 STA STA LDA STA STA END$ RMAX PO STYFG END$,I SET FOR NULL PROGRAM AND NO R-REGISTERS CLEAR SECURE FLAG CLEAR FIRST LINE BRIDGE ERASE VARIABLES JSM ERA 54 JSM ASLLN,I JSM AEOLB,I LDA M 16 JMP STCFG ERASE VARIABLES SET LNO =-1 OR LAST LINE# PUT EOL IN I/O BUFFER, RESET EDIT PTRS CLR BITS 0-3 OF CFLAG SET CFLAG ERASE KEYS LDA FWAM CPA FWUP JMP ERA 59 STA D JSM MAMPL JMP ERA 59 ERASE V SUBROUTINE ERA 54 LDA END$ STA RMAX LDB FW 8 A STB VT 1 STB VT 2 LDA ADVTB LDB ADVTB ADB P 51 JSM ZRWM STB FLAGS JSM AINTI,I ERSX 1 I LDA ESV SZA + 2 JSM ESV,I RET I GET S/A OF KEYS NULL KEYS? YES, DONE SET D TO START OF KEYS MOVE ALL MAIN PROG LOWER, MOVE FWUP END OF USER PROG POINTR RESET R-REGS FIRST WORD OF BIN PROG AREA RESET VALUE TABLE AREA RESET VALUE TABLE AREA S/A OF VARIABLE TABLE S/A OF VARIABLE TABLE POINT TO E/A OF VARIABLE TABLE ZERO VARIABLE TABLE AREA CLEAR USER FLAGS RESET API, AP 2, AP 3 POINTERS GET LINK TO STRING BLOCK SKIP IF NOT DEFINED ERASE STRING VARIABLE TABLE DELETE COMMAND DEL #1, (#2),() DELETE LINES #1 THROUGH #2 INCLUSIVELY IF THE IS PRESENT, NO PRESCAN IS DONE BY THE RENUMBERING ROUTINES T 9 =NLI: T 7 =LN 2: T 20 = S/A OF LINI: T 2 = S/A of LN 2 T 19 = S/A OFLN 2 + 1 ENTRY: L MUST POINT TO FIRST CHAR AFTER "DEL" IN I/O OR 393 Page 323 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES a KBD BUFFER EXIT: LNO = #1 1 23000 000254 23001 031731 23002 140501 23003 140507 23004 035721 23005 035717 23006 010107 23007 066073 23010 010053 23011 06601423012 140404 23013 030471 23014 001721 23015 031233 23016 170040 23017 021717 23020 172472 23021 140513 DELL DELLI ERLNB DEL 10 23022 064722 23023 031734 23024 001717 23025 031233 23026 140513 23027 066065 23030 031712 DELL 4 23031 100000 23032 050053 23033 021712 23034 031733 DELL 5 23035 001721 23036 020257 23037 031226 001731 072404 000254 031613 140520 000177 DELL 6 031613 140520 101734 050215 031731 101733 050250 LDA Pl STA T 17 JSM AGNXT,I JSM AINTC,I STB T 9 STB T 7 CPA B 54 JMP DELL 2 CPA EOL JMP DE L 10 JSM AERRI,I ASC 1,19 LDA T 9 STA TMP 7 TCA ADA SAM JSM JMP STA LDA STA JSM JMP STA LDA AND ADA STA LDA ADA STA LDA SZA LDA STA JSM LDA STA JSM LDA AND STA LDA AND T 7 ERLNB AFLNA,I ERLNF T 20 T 7 TEMP 7 AFLNA,I DELL 3 T 2 A,I B 177 T 2 T 19 T 9 Ml LN O T 17 DELL 6 Pl RENFG AREND,I PO RENFG AREND,I T 20,I BXCMM T 17 T 19,I BM 377 03022000 23055 061731 03023000 23056 131733 SET FOR PRESCAN BY DEFAULT GET NEXT CHAR FROM BUFFER BUILD A BINARY NUMBER LOWER LINE NO.

HIGHER LINE NO.

IS NEXT CHAR A COMMA? YES, GET NEXT NUMBER END OF BUFFER? CONTINUE IF SO TOO MANY PARAMETERS -ERROR BAD LINE NUMBERS SEE IF LN 1 >LN 2 SET FOR AFLNA A = LN 2-LN 1 ERROR IF MINUS FIND ADDR OF FIRST LINE, LINE # IN TEMP 7 ERROR IF LINE NOT FOUND SET ADDR OF FIRST LINE GET LN 2 SET FOR AFLNA FIND ADDR OF LAST LINE NOT FOUND, DELETE REST OF PROGRAM SET S/A OF LN 2 GET BRIDGE LENGTH ADD ADDR OF BRIDGE SET S/A OF LN 2 + 1 SET LN O TO FIRST LINE #-1 WAS A PARAMETER? SKIP PRESCAN IF SO SET FOR PRESCAN PRESCAN FOR DELETED DESTINATIONS SET FOR ACTUAL RENUMBERING RENUMBER GTO/GSB'S GET BRIDGE OF LNI SAVE ONLY REVERSE BRIDGE LENGTH SAVE IT GET FIRST BRIDGE OF LN 2 + 1 SAVE ONLY TRACE, STOP BITS AND FORWARD BRIDGE LENGTE SET BACKWARD LENGTH OF LNI-1 I SET NEW BRIDGE Page 324 02968000 02969000 02970000 02710000 02972000 02973000 02974000 02975000 02976000 02977000 02978000 02979000 02980000 02981000 02982000 02983000 02984000 02985000 02986000 02987000 02988000 02989000 02990000 02991000 02992000 02993000 02994000 02995000 02996000 02997000 02998000 02999000 03000000 03001000 03002000 03003000 03004000 03005000 03006000 03007000 03008000 03009000 03010000 03011000 03012000 03013000 03014000 03015000 03016000 03017000 03018000 03019000 03020000 03021000 23040 23041 23042 23043 23044 23045 23046 23047 23050 23051 23052 23053 23054 394 394 IOR T 17 STA TI 9 J 1,568,094 CONTROL AND 1 00 SUPERVISOR SERVICE ROUTINES 03024000 03025000 23057 001734 03026000 23060 030017 03027000 23061 001733 03028000 23062 030016 03029000 23063 043665 03030000 03031000 23064 067750 03032000 03033000 23065 140514 03034000 23066 001226 03035000 23067 031717 03036000 23070 001277 03037000 23071 071600 03038000 23072 066034 03039000 03040000 23073 140501 03041000 23074 010111 03042000 23075 066107 03043000 23076 140507 03044000 23077 035717 03045000 23100 010107 03046000 23101 066103 03047000 23102 066010 03048000 03049000 23103 140501 305000 23104 010111 03051000 23105 066107 03052000 23106 066012 03053000 23107 000177 0304000 23110 031731 03055000 23111 140501 03056000 23112 066010 O 3057000 03058 o 00 03059000 03069000 03061000 03062000 03063000 03064000 23113 040717 03065000 23114 000254 03066000 23115 031731 03067000 23116 001226 03068000 23117 031721 03069000 23120 031717 03070000 23121 066014 03071000 03072000 03073000 03074000 0307500 03076000 03077000 03078000 03079000 LDA STA LDA STA JSM T 20 D T 19 C MPMLM SHIFT USER'S PROGRAM TO THIS LOCATION S/A TO SHIFT FROM MOVE MEMORY JMP ERS 10 CLR BITS 0-3 OF CFLAG, PUT EOL IN I/O BUFF,RET 1 DELL 3 DELL 2 DEL 91 DEL 90 JSM LDA STA LDA CLR JMP JSM CPA JMP JSM STB CPA JMP JMP JSM CPA JMP JMP LDA STA JSM JMP ASLLN,I SET LNO TO LAST LINE LNO SET FOR RENUMBER ROUTINES T 7 END$ SET ADDR OF LN 2 + 1 I CLR LAST LINE BRIDGE DELL 5 AGNXT,I GET NEXT PARAMETER B 52 ISIT A ? DEL 90 YES AINTC,I BUILD THE LINE NUMBER T 7 SET LINE # B 54 NEXT PARAMETER A COMMA? DEL 91 YES DELLI NO AGNXT,I GET NEXT PARAMETER B 52 ISIT A ? DEL 90 YES, NO PRESCAN ERLNB NO, ILLEGAL PARAMETER PO ASTERISK FOUND, NO PRESCAN T 17 AGNXT,I MAKE SURE NO MORE PARAMETERS DELLI LINE DELETE KEY 7 LDELF JSM LDA STA LDA STA STA JMP STELM Pl T 17 LNO T 9 T 7 DEL 10 SET MODE = 4 SET FOR PRESCAN SET LN I,LN 2 BACK KEY EXECUTION MOVE CURSOR TO THE LEFT ONCE 395 Page 325 395 1,568,094 CONTROL AND 1/O SUPERVISOR SERVICE ROUTINES 03080000 23122 03081000 23123 03082000 23124 03083000 23125 03084000 23126 03085000 23127 03086000 23130 03087000 03088000 23131 03089000 23132 03090000 23133 03091000 23134 03092000 23135 03093000 23136 03094000 23137 03095000 03096000 23140 03097000 23141 03098000 23142 03099000 03100000 23143 03101000 23144 03102000 23145 03103000 23146 03104000 03105000 23147 03106000 23150 03107000 23151 03108000 23152 03109000 03110000 23153 03111000 23154 03112000 23155 03113000 23156 03114000 23157 03115000 23160 03116000 03117000 23161 03118000 23162 03119000 23163 03120000 03121000 23164 03122000 23165 03123000 23166 03124000 03125000 23167 03126000 23170 03127000 23171 03128000 23172 03129000 23173 03130000 03131000 03132000 03133000 03134000 03135000 001214 BACK 072015 001215 031213 042254 066131 170201 042264 BACX 2 066134 066155 001711 072010 042241 066167 050074 BACKI 1 010254 066164 001214 020257 031214 BACX 5 066330 042273 BACK 2 042254 066153 066241 042264 BACK 3 066161 035214 BACX 4 024146 001513 066360 045711 BACK 4 001711 066503 001513 BACK 7 011351 170201 042330 BACX 9 004257 001513 BACK 9 140401 066466 LDA RZA LDA STA JSM JMP RET JSM JMP JMP LDA RZA JSM JMP AND CPA JMP LDA ADA STA JMP JSM JSM JMP JMP JSM JMP STB ADB LDA JMP ISZ LDA JMP LDA CPA RET JSM LDB LDA JSM JMP CRSP GET CURSOR POINTR BACKI IS CURSOR SET? IOCP NO; I/O BUFF CURRENT POINTR OLCP SET CURSOR DROP POSITION CCTR COUNT NO OF CHARS FROM DBP TO IOCP BACX 2 1 BUFF EMPTY BCSR POSITION OF LAST CHAR ≥ TO DISP LENGTH? + 2 NO BACX 4 YES T 1 CHAR COUNT FROM "CCTR" SUBR.

BACX 5 SET CRSP IF NOT O FORW 8 SET CRSP = 1 BACX 9 DEC IOCP,DEC DBP, RETURN B 77 SAVE CURSOR COUNT Pl CURSOR ON FIRST POSITION? BACK 7 YES CRSP GET CURSOR POINTR AGAIN Ml BACK-UP CURSOR ONCE CRSP UPDATE CURSOR POINTR DIOCP DECRM I/O BUFF CURRENT POINTR + RETURN P+ 1 FMSE FIND EOL AND SET EDIT MODE CCTR COUNT NO OF CHARS FROM DBP TO IOCP BACK 3 BUFF NOT EMPTY FORW 8 SET CRSP TO FIRST POSITION BCSR POSITION OF LAST CHAR ≥ DISP LENGTH ? BACK 4 NO CRSP YES; SET CURSOR POINTR ON LAST DISP CHAR M 2 B = DLEN-2 DBP DISP BEGIN POINTER DKCPX UPDATE IOCP POINTR AND RETURN P+ 1 Tl CURSOR ON LAST CHAR+ 1 Tl GET CURSOR POSITION INRE 2 SET CRSP DBP GET DISP BEGIN POINTR AEBFX EQUAL TO S/A OF EDIT BUFF? 1 YES DIOCP DEC IOCP POINTER Ml DBP GET DISPLAY BEGIN POINTER AADBA,I DECRM DBP POINTR RHAR 8 SET DBP POINTER FORWARD KEY EXECUTION MOVE CURSOR TO THE RIGHT ONCE 396 Page 326 396 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 23174 23175 23176 23177 23200 23201 23202 23203 23204 23205 23206 23207 23210 000262 131353 001213 010257 170201 001214 072417 050074 011512 066243 FORW 005214 176601 024257 23211 001513 23212 140401 23213 011213 23214 066226 LDA STA LDA CPA RET LDA SZA AND CPA IMP LDB SBM ADB LDA JSM CPA JMP 23215 001214 23216 020254 23217 031214 23220 066326 03161000 03162000 23221 03163000 23222 03164000 23223 03165000 03166000 23224 03167000 23225 03168000 03169000 23226 03170000 23227 03171000 23230 03172000 23231 03173000 23232 03174000 23233 03175000 03176000 23234 03177000 23235 03178000 23236 03179000 23237 03180000 23240 03181000 03182000 23241 03183000 23242 03184000 03185000 23243 03186000 23244 03187000 23245 03188000 23246 03189000 23247 03190000 23250 03191000 23251 LDA ADA STA JMP 001215 FORWI 011352 170201 031213 066235 042326 FORW 5 000177 FORW 9 031214 000257 031213 170201 042273 004257 001513 140401 031215 FORW 2 FOR 10 FORW 3 s 000254 FORW 8 066503 001513 FORW 4 005512 024257 140401 011213 042227 042326 LDA CPA RET TOBLN AEBFL,I OLCP Ml CRSP FORWI B 77 DLEN FORW 4 CRSP +I,C Ml DBP AABDA,I OLCP FORW 5 CRSP Pl CRSP INCP IOCP AEBFM STA OLCP JMP FORO 10 JSM LDA STA LDA STA RET JSM LDB LDA ISM STA INCP PO CRSP Ml OLCP FMSE Ml DBP AADBA,I IOCP LDA Pl JMP INRE 2 LDA LDB ADB JSM CPA JSM JSM DBP DLEN MI AADBA,I OLCP FORW 9 INCP 397 CLR EOL FROM END OF LINE GET FLAG FOR FORW CURSOR PASS SET? YES: DO NOT RESTART CURSOR GET CURSOR POINTR SKIP IF CURSOR NOT SET SAVE CURSOR COUNT CURSOR ON LAST POSITION? YES GET CURSOR POINTR CLEAR INSERT CURSOR BIT ADJUST CURSOR COUNT FOR ADDR CALCULATION GET DISP BEGIN POINTR FIND BYTE ADDR OF CURSOR POSITION IS IT ON THE LAST CHAR ENTERED? YES GET CURSOR POINTR AGAIN FORWAR CURSOR ONCE UPDATE CURSOR POINTR INCRM I/O BUFF CURRENT POINTR + RETURN P+ 1 GET I/O BUFF CURRENT POINTR BUFF EMPTY? YES SET OLD CURRENT POINTR SET IOCP INC I/O BUFF CURRENT POINTER DROP CURSOR (LAST ENTERED CHAR + 1) SET FLAG FOR FORW CURSOR PASS FIND EOL AND SET EDIT MODE GET DISP BEGIN POINTR FIND IOCP POINTR (DBP-I) SET I/O BUFF CURRENT POINTR SET CURSOR ON FIRST CHAR SET CRSP, CURSOR POINTER GET DISP BEGIN POINTR GET DISP LENGTH ADJUST "B" FOR ADDR CALCULATION FIVE BYTE ADDR OF CURSOR CHAR IS IT THE LAST CHAR ENTERED? RESET OLCP, CRSP INC CURRENT I/O BUFF PTR 397 Page 327 03136000 03137000 03138000 03139000 03140000 03141000 03142000 03143000 03144000 03145000 03146000 03147000 03148000 03149000 03150000 03151000 03152000 03153000 03154000 03155000 03156000 03157000 03158000 03159000 03160000 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 03192000 23252 004254 03193000 23253 066171 03194000 03195000 03196000 03197000 03198000 03199000 03200000 03201000 03202000 03203000 03204000 03205000 03206000 23254 005215 CCTR 03207000 23255 015352 03208000 23256 170202 03209000 03210000 23257 001513 03211000 23260 140362 03212000 23261 020254 03213000 23262 031711 03214000 23263 170201 CCTRX 03215000 03216000 03217000 03218000 03219000 03220000 03221000 03222000 03223000 03224000 03225000 03226000 23264 005711 BCSR 03227000 23265 174040 03228000 23266 025512 03229000 23267 176402 03230000 23270 076073 03231000 23271 005512 03232000 23272 170202 03233000 03234000 03235000 FI 1 03236000 03237000 03238000 03239000 03240000 03241000 03242000 03243000 03244000 03245000 03246000 23273 001351 03247000 23274 030016 I LBD Pl JMP BACK 9 INC DBP AND RETURN CHAR COUNTER FIND NO OF CHARS FROM DBP TO IOCP EXIT: RET P+ 1 TI=CHAR COUNT RET P+ 2 I/O BUFF EMPTY LDB CPB RET LDA JSM ADA STA RET IOCP AEBFM DBP AFBAD,I Pl TI 1/0 BUFF CURRENT POINTR EDIT BUFF EMPTY? YES DISP BEGIN POINTR FIND BYTE ADDR DIFF ADJUST CHAR COUNT AND SAVE IT FIND POSITION OF LAST CHAR IN I/O BUFF ENTRY: TI=CHAR COUNT EXIT: RET P+ 1 POSITION OF LAST CHAR < DLEN RET P+ 2 POSITION OF LAST CHAR ≥ DLEN; B-=DLEN LDB T TCB ADB E SBM RZB C LDB E RET 2 )LEN + 2 CTRX )LEN GET CHAR COUNT MAKE NEG.

ADD DISP LENGTH IOCP OFF DISP LENGTH ? NO; SKIP IF IOCP > DLEN IOCP = DLEN ND LINE NO AND COLLON AND REPLACE THEM WITH BLANKS FIND EOL MARK AND REPLACE IT WITH BLANK SET EDIT MODE SET "OLCP" POINTER ENTRY: LINE IN I/O BUFF (FETCH MODE) FMSE LDA AEBFX EDIT BUFFS/A STA C SET C-REG Page 328 398 398 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 23275 23276 23277 23300 23301 23302 23303 23304 23305 23306 23307 23310 23311 23312 23313 23314 23315 23316 23317 23320 23321 23322 23323 23324 23325 074560 FMSE 2 010077 066301 066275 074560 FMSE 9 000262 FMSE 3 074740 004016 015351 066310 066302 074561 FMSE 5 014053 066314 066310 074761 FMSE 6 074761 004016 035215 074540 130316 000016 031213 064720 23326 004254 INCP 23327 066357 23330 004257 23331 066357 23332 23333 23334 23335 23336 23337 23340 23341 23342 DIOCP a as 042453 RHRM 4 001214 RHAR 072004 001215 011352 170201 042474 RHAR 7 042447 000016 RHAR 2 WBC CPA JMP JMP WBC LDA PRC LDB CPB JMP JMP WBC CPB JMP JMP WBC WBC LDB STB PBC STA LDA STA LDA JMP A,I COLLN FMSE 9 FMSE 2 A,I TOBLN A,D C AEBFX FMSE 5 FMSE 3 B,I EOL FMSE 6 FMSE 5 B,D B,D C IOCP A,I AIBEL,I C OLCP P 2 STMOD GET CHAR AND INCRM COLLON? YES NO DUMMY WITHDRAW TO DELETE "?" GET BLANKS DECRM AND PLACE BLANK IN I/O BUFF EDIT BUFF FRONT END FILLED WITH BLANKS? YES NO; LOOP GET BYTE AND INCRM EOL MARKER FOUND? YES CONT DUMMY WITHDRAW AND DECRM.

GET BYTE ADDR OF LAST CHAR SET I/O BUFF CURRENT POINTR REPLACE EOL WITH BLANK REPLACE EOL AT END OF LINE WITH A BLANK SAVE CURSOR DROP POSITION SET MODE AND RETURN INCREMENT 1/O BUFFER CURRENT POINTER LDB Pl JMP RHAXX DECREMENT I/O BUFFER CURRENT POINTR LDB MI JMP RHAXX RIGHT ARROW EXECUTION ENTRY: LINE OF CODE IN EDIT BUFFER JSM LDA RZA LDA CPA RET JSM JSM LDA LFRHI CRSP RHAR 7 IOCP AEBFM GFDL LRASX C INIT FOR ARROWS WHEN MODE = 4 GET CURSOR POINTER CURSOR SET? NO; GET I/O BUFF CURRENT POINTR EDIT BUFFER EMPTY? YES GET 1/4 OF DISP LENGTH INITL SUBR FOR LEFT/RIGHT ARROW BEGINNING OF BUFFER? Page 329 03248000 03249000 03250000 03251000 03252000 03253000 03254000 03255000 03256000 03257000 03258000 03259000 03260000 03261000 03262000 03263000 03264000 03265000 03266000 03267000 03268000 03269000 03270000 03271000 03272000 03273000 03274000 03275000 03276000 03277000 03278000 03279000 03280000 03281000 03282000 03283000 03284000 03285000 03286000 03287000 03288000 03289000 03290000 03291000 03292000 03293000 03294000 03295000 03296000 03297000 03298000 03299000 03300000 03301000 03302000 03303000 399 399 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 03304000 23343 03305000 23344 03306000 23345 03307000 23346 03308000 23347 03309000 23350 03310000 23351 03311000 23352 03312000 23353 03313000 23354 03314000 23355 03315000 23356 03316000 23357 03317000 23360 03318000 23361 03319000 23362 03320000 03321000 03322000 03323000 03324000 03325000 03326000 03327000 23363 03328000 23364 03329000 23365 03330000 23366 03331000 23367 03332000 23370 03333000 03334000 23371 03335000 23372 03336000 23373 03337000 23374 03338000 23375 03339000 23376 03340000 23377 03341000 23400 03342000 23401 03343000 23402 03344000 23403 03345000 23404 03346000 23405 03347000 03348000 23406 03349000 23407 03350000 23410 03351000 23411 03352000 23412 03353000 03354000 23413 03355000 23414 03356000 23415 03357000 23416 03358000 23417 03359000 011351 066350 074760 055227 CPA JMP WBC DSZ 066342 000016 RHARI 031513 001214 RHAR 6 072407 042474 RHAR 4 174040 025227 001215 RHAXX 140401 DKCPX 031215 RHSET 170201 RHSXX 042453 LFRM 4 001214 LAKE 072004 001215 011352 170201 LAKXX 042445 LAKE 7 001214 072003 001215 066377 001213 LAKEI 031230 LAKE 9 055227 LAKE 2 066413 042470 001214 LAKE 5 072002 170201 001227 170040 042474 024000 066357 074560 LAKE 3 000016 005230 140362 172061 JMP LDA STA LDA SZA JSM TCB ADB LDA JSM STA RET AEBFX RHARI A,D TM Pl RHAR 2 C DBP CRSP RHSXX GFDL TM Pl IOCP AADBA,I IOCP YES, EXIT LOOP NO, KEEP MOVING TO THE LEFT HAVE WE SHIFTED LEFT DLEN/4 CHARACTERS? NO, KEEP GOING SET DISPLAY BEGIN POINTER IS THE CURSOR SET? NO, RETURN GET 1/4 OF DISP LENGTH MAKE NEG.

B = COUNTER VALUE DLEN/4 GET BYTE ADDR I/O CURRENT POINTR ADJUST BYTE ADDR UPDATE I/O CURRENT POINTER LEFT ARROW EXECUTION (KEYB /EDIT MODE) ENTRY: LINE OF CODE IN EDIT BUFFER JSM LDA RZA LDA CPA RET JSM LDA RZA LDA JMP LDA STA DSZ JMP JSM LDA RZA RET LDA TCA JSM ADB JMP WBC LDA LDB JSM SAP LFRHI CRSP LAKE 7 IOCP AEBFM LRASR CRSP LAKEI IOCP LAKE 9 OLCP TMP 5 TM Pl LAKE 3 AJDBP CRSP + 2 TMP 1 I GFDL A RHAXX A,I C TMP 5 AFBAD,I LAKE 2 INIT FOR ARROWS WHEN MODE = 4 GET CURSOR POINTER CURSOR SET? NO; GET I/O BUFF CURRENT POINTR EDIT BUFF EMPTY? YES INITL SUBR FOR LEFT/RIGHT ARROW CURSOR POINTR SET? NO; GET I/O BUFF CURRENT POINTR GET OLD I/O BUFF CURRENT POINTR SET PTR DONE? NO YES; ADJUST DISP BEGIN POINTR GET CURSOR POINTR SET? NO GET COUNTR VALUE MAKE NEG.

GET 1/4 OF DISP LENGTH B = DLEN/4 COUNTER VALUE UPDATE I/O CURRENT POINTR AND RETURN P+ 1 INC C STOP IF C> = IOCP OR OLCP+ 1 SKIP IF CONDITION NOT MET 400 Page 330 400 401 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 03360000 23420 042474 LAKE 4 03361000 23421 174040 03362000 23422 025227 03363000 23423 176027 03364000 23424 174040 03365000 23425 042471 03366000 23426 066403 03367000 03368000 03369000 03370000 03371000 03372000 03373000 03374000 23427 042445 03375000 23430 074560 03376000 23431 055227 03377000 23432 066434 03378000 23433 066470 LFA LFAR 2 03379000 03380000 23434 010053 LFAR 1 03381000 23435 066437 03382000 23436 066430 03383000 23437 042474 LFR 4 03384000 23440 174040 03385000 23441 025227 03386000 23442 176010 03387000 03388000 23443 174040 03389000 23444 066471 03390000 03391000 03392000 03393000 03394000 03395000 03396000 03397000 23445 042474 LRASR 03398000 23446 025512 03399000 23447 035227 LRASX 03400000 23450 001513 03401000 23451 030016 03402000 23452 170201 LRSXX 03403000 03404000 03405000 03406000 LFRH 03407000 03408000 03409000 03410000 23453 140447 LFRHI 03411000 23454 140500 03412000 23455 031213 03413000 23456 031215 03414000 03415000 23457 005512 JSM GFDL TCB ADB TM Pl SBP LRSXX TCB JSM AJDBX JMP LAKE 5 GET 1/4 OF DISPLAY LENGTH MAKE NEG B = COUNTER VALUE -DLEN/4 SKIP IF EOL WITHIN DLEN B = POSITION CHANGE OF DISP BEGIN POINTR ADJUST DISP BEGIN POINTR NO; ADJUST IOCP IF NEEDED LEFT ARROW EXECUTION (FETCH MODE) ENTRY: LINE OF CODE IN EDIT BUFFER JSM LRASR WBC A,I DSZ TM Pl JMP LFAR 1 JMP AJDBP CPA E OL JMP + 2 JMP LFAR 2 JSM GFDL TCB ADB TM Pl SBP LRSXX TCB JMP AJDBX INITL SUBR FOR LEFT/RIGHT ARROW GET BYTE AND INCRM DONE? NO YES; ADJUST DISP BEGIN POINTR AND RETURN P+ 1 END OF LINE MARKER? YES NO; CONT GET 1/4 OF DISP LENGTH MAKE NEG.

B = COUNTER VALUE DLEN/4 SKIP IF EOL WITHIN DLEN B = POSITION CHANGE OF DBP POINTR ADJUST DISP BEGIN POINTR AND RETURN P+ 1 LEFT/RIGHT ARROW SERVICE SUBR SET TM Pl = DLEN + DLEN/4; C = DBP JSM ADB STB LDA STA RET GFDL DLEN TMP 1 I DBP C GET 1/4 OF DISP LENGTH B = DLEN + DLEN/4 SET CHAR COUNTER GET DISP BEGIN POINTR SET C REG lI INIT FOR LEFT-RIGHT ARROWS t I INIT FOR LEFT-RIGHT ARROWS JSM JSM STA STA ASWIO,I SET EDIT POINTERS FOR I/O BUFFER AEOLN,I SET BUFFER POINTERS OLCP IOCP LDB DLEN SEE IF DBP>IOCP DLEN 401 Page 331 1,568,094 Page 332 03416000 03417000 03418000 03419000 03420000 03421000 03422000 03423000 03424000 03425000 03426000 03427000 03428000 03429000 03430000 03431000 03432000 03433000 03434000 03435000 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 23460 174500 23461 025513 23462 024257 23463 140362 23464 172466 23465 001351 23466 031513 23467 170201 23470 23471 23472 23473 03436000 03437000 03438000 03439000 03440000 03441000 03442000 03443000 23474 03444000 23475 03445000 23476 03446000 03447000 03448000 03449000 03450000 03451000 03452000 03453000 03454000 23477 03455000 23500 03456000 23501 03457000 03458000 23502 03459000 23503 03460000 23504 03461000 03462000 23505 03463000 03464000 03465000 03466000 03467000 03468000 03469000 03470000 03471000 RHAR 9 RHAR 8 042474 AJDBP 001513 AJDBX 140401 066466 005512 GFDL 174501 170201 SBR ADB ADB JSM SAM LDA STA RET 1 DBP Ml AFBAD,I LRSXX AEBFX DBP MAKE A WORD COUNT FIND BYTE DIFFERENCE IF < 0 THEN OK SET DISPLAY BEGIN POINTER ADJUST DISP BEGIN POINTR TO THE RIGHT BY DLEN/4 POSITIONS JSM GFDL GET 1/4 OF DISP LENGTH LDA DBP GET DISP BEGIN POINTR JSM AADBA,I ADJUST BYTE ADDR (DBP POINTR) JMP RHAR 8 UPDATE DISP BEGIN POINTR AND RETURN P+ 1 GET 1/4 OF DISP LENGTH EXIT: B = DLEN/4 LDB DLEN SBR 2 RET I GET DISP LENGTH B = DLEN/4 INRE INSERT/REPLACE CURSOR KEY INRE INSERT/REPLACE CURSOR KEY 001214 INRE 072002 170201 172203 031214 170201 INRE 2 LDA RZA RET SAP STA RET CRSP + 2 GET CURSOR PTR SET? NO INRE 1,C SKIP IF NOT SET, CLR INS CURSOR CRSP UPDATE CURSOR PTR 172376 INREI SAP INRE 2,S SETINSERTCURSOR EDPTR RESET EDIT POINTERS EDPTR RESET EDIT POINTERS 402 402 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 03472000 23506 000177 EDPTR 03473000 23507 031213 03474000 23510 031214 03475000 23511 042465 03476000 23512 001352 03477000 23513 066361 03478000 03479000 03480000 03481000 03482000 CON 03483000 03484000 TR.

03485000 03486000 03487000 03488000 03489000 03490000 03491000 03492000 03493000 03494000 03495000 23514 140450 TLNIO 03496000 23515 001226 03497000 23516 004315 03498000 23517 034017 TLNX 03499000 23520 172004 03500000 23521 004106 03501000 23522 074551 03502000 23523 170040 03503000 23524 031220 TLNT 2 03504000 23525 000203 03505000 23526 031713 03506000 23527 000177 03507000 23530 031222 03508000 23531 042545 03509000 23532 074550 TLNT 1 03510000 23533 001713 03511000 23534 010210 03512000 23535 170201 03513000 03514000 23536 042540 03515000 23537 066532 03516000 03517000 03518000 03519000 03520000 03521000 03522000 03523000 03524000 03525000 03526000 03527000 23540 000103 CBA LDA STA STA JSM LDA JMP PO OLCP CRSP RHAR 9 AEBFM RHSET RESET OLD CURRENT PTR, CURSOR PTR RESET DISPLAY BEGIN POINTER, DBP SET CURRENT PTR SET IOCP, I/O BUFF CURRENT POINTER ERT BINARY TO DECIMAL AND ANSFER LINE NO TO I/O BUFF TLNIO ENTRY: LINE NO IN LNO ABTDA OR "TLNX" ENTRY BIN NO IN A B = DESTINATION CHAR POINTR-1 I EXIT: D = LAST CHAR OF LINE NO IN I/O BUFF JSM LDA LDB STB SAP LDB PBD TCA STA LDA STA LDA STA JSM PBD LDA CPA RET ACLBI,I LNO AIBFM D TLNT 2 B 55 B,I M PTCN T 3 PO L CBA 2 A,I T 3 ENDTC JSM CBA JMP TLNTI CLR I/O BUFF, LEAVE PTRS ALONE GET LINE NO.

I/O BUFF ADDR-1 SET D-REG SKIP IF NO IS POSITIVE GET MINUS SIGN INCRM AND PLACE IN DISP BUFF MAKE NO POSITIVE SAVE BINARY INFO.

ADDR OF POWERS OF 10 CONSTANTS USED TO SUPRESS LEADING ZEROS COUNT OF LINE NO CHARS GET FIRST DEC ASCII DIGIT INCRM AND PLACE DIGIT IN DISP BUFF TABLE POINTR

CONVERSION FINISHED? YES NO; CONTINUE SERVICE SUBR.

CONVERT BINARY TO ASCII DECIMAL ENTRY: M = BINARY INFO T 3 = POWERS OF TEN TABLE ADDR EXIT: ONE ASCII DIGIT LDA B 60 Page 333 403 403 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 23541 045713 CBA 4 23542 005713 23543 014210 23544 066557 23545 005220 CBA 2 23546 125713 CBA 1 23547 176404 23550 035220 23551 020254 23552 066546 23553 072466 CBA 3 23554 060103 CBA 6 23555 045222 23556 170201 23557 001220 CBA 5 23560 066554 ISZ T 3 LDB T 3 CPB ENDTC JMP CBA 5 LDBM ADB T 3,I SBM CBA 3 STB M ADA Pl JMP CBAI SZA CBA 4 IOR B 60 ISZ L RET 1 LDAM JMP CBA 6 INCRM TABLE POINTR GET ADDR COMPUTING LAST DIGIT? YES GET BINARY NO.

SUBTRACT NUMBER OF CURRENT TENS POSITION DIGIT IF MINUS OVERFLOW; END DIVIDE NO OVERFLOW; SAVE DIGIT LOOP OVERFLOW; IF ZERO, NO NON-ZERO DIGIT FOUND MAKE ASCII INCRM CHAR COUNT LAST DIGIT; THUS M = BCD DIGIT EOLNN FIND ADDR OF LAST CHARACTER IN EDIT BUFFER ADDRESS RETURNED IN A 23561 001353 EOLNN 23562 020257 23563 030016 23564 005352 23565 074760 REND 23566 010117 23567 066571 23570 066574 23571 014016 23572 066577 23573 066565 23574 010053 RSTPP 23575 066577 23576 074561 RSTP 23577 000016 RSIT 23600 170201 LDA ADA STA LDB WBC CPA JMP JMP CPB JMP JMP CPA JMP WBC LDA RET AEBFL Ml C AEBFM A,D B 40 + 2 RSTPP C RSTT REND EOL + 2 B,I C END OF BUFFER START AT LAST CHARACTER SET PTR BEGIN OF BUFF PTR GET A CHARACTER IS IT A BLANK YES, SEE IF BEGINNING OF BUFF NO, SEE IF EOL CHAR IS THIS THE BEGINNING OF BUFFER? YES, SO EXIT NO, KEEP LOOKING SEE IF EOL YES SO DON'T MOVE PTR DUMMY WITHDRAW TO INC C GET NON BLANK CHAR ADDR GET NEXT CHARACTER FROM BUFFER SPACES ARE IGNORED ENTRY: L = POINTER TO NEXT CHAR EXIT: A = ASCII CHAR; IF FOUND A = EOL; IF END OF BUFF FOUND Page 334 03528000 03529000 03530000 03531000 03532000 03533000 03534000 03535000 03536000 03537000 03538000 03539000 03540000 03541000 03542000 03543000 03544000 03545000 03546000 03547000 03548000 03549000 03550000 03551000 03552000 03553000 03554000 03555000 03556000 03557000 03558000 03559000 03560000 03561000 03562000 03563000 03564000 03565000 03566000 03567000 03568000 03569000 03570000 03571000 03572000 03573000 03574000 03575000 03576000 03577000 03578000 03579000 03580000 03581000 03582000 03583000 404 404 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 23601 005222 GNEXT 23602 034016 23603 074560 GNEI 23604 004016 23605 014316 23606 066615 23607 014311 23610 066615 23611 010117 23612 066603 23613 035222 GNE 3 23614 170201 23615 000053 GNOPR 23616 066613 END OF BUFF = END OF I/O BUFF OR END OF KDB BUFFER L= L+I LDB STB WRC LDB CPB JMP CPB JMP L C A,I C AIBFL GNOPR AKBFL GNOPR CPA B 40 JMP GNE 1 STB L RET 1 LDA EOL JMP GNE 3 GET CHAR POINTER SET C-REG GET CHAR GET POINTER END OF I/O BUFFER? YES END OF KBD BUFFER YES SPACE? YES, KEEP LOOKING SET POINTER SET EOL IN SINCE END OF BUFFER RETURN WITH L SET RNLON TURN ON RUN LIGHT : 23617 23620 23621 23622 000177 RNLON 030011 000137 066626 LDAPO STA PA LDA B 10 O JMP RSETL SET PERIPHERAL ADDR TO ZERO TURN ON RUN LIGHT RNLOF TURN OFF RUN LIGHT 23623 23624 23625 23626 23627 000177 RNLOF 030011 000127 030005 RSETL 170201 LDA PO STA PA LDA B 20 STA R 5 RET I SET PERIPHERAL ADDR TURN OFF RUN LIGHT TCHR TRANSFER CHARACTERS ENTRY: D = SOURCE CHAR PTR A = DESTINATION CHAR PTR-I B = CHARACTER COUNT 405 Page 335 03584000 03585000 03586000 03587000 03588000 03589000 03590000 03591000 03592000 03593000 03594000 03595000 03596000 03597000 03598000 03599000 03600000 03601000 03602000 03603000 03604000 03605000 03606000 03607000 03608000 03609000 03610000 03611000 03612000 03613000 03614000 03615000 03616000 03617000 03618000 03619000 03620000 03621000 03622000 03623000 03624000 03625000 03626000 03627000 03628000 03629000 03630000 03631000 03632000 03633000 03634000 03635000 03636000 03637000 03638000 03639000 405 1,568,094 Page 336 03640000 03641000 23630 03642000 23631 03643000 23632 03644000 23633 03645000 23634 03646000 23635 03647000 23636 03648000 03649000 03650000 03651000 03652000 03653000 03654000 03655000 23637 03656000 23640 03657000 23641 03658000 03659000 23642 03660000 23643 03661000 23644 03662000 23645 03663000 03664000 23646 03665000 23647 03666000 23650 03667000 23651 03668000 03669000 03670000 03671000 03672000 03673000 03674000 23652 03675000 03676000 03677000 03678000 03679000 03680000 03681000 03682000 03683000 03684000 03685000 03686000 03687000 03688000 03689000 03690000 03691000 03692000 03693000 03694000 03695000 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 035711 TCHR 030016 074570 TCHRI 074540 055711 066632 170201 005235 PINK 014145 164601 001232 170701 172602 170201 170715 031232 040715 164452 STB STA WBD PBC DSZ JMP RET TI C A,I A,I Tl TCHRI SET CHAR COUNT SET DESTINATION ADDR GET CHAR AND INC INC AND STORE CHAR DONE? NO YES STOP, REW KEYS LDB CPB JMP LDA RAR SAM RET RAR STA JSM JMP SKEY P 2 ARFK,I CFLAG 2 + 2,C 14 CFLAG CLMOD AEOLB,I GET KEY CODE REW KEY? YES, REWIND AND RETURN NO, MUST BE STOP KEY POSITION SPECIAL KEY BIT KEY TO BE DEFINED? NO REPOSITION CLEARED SPECIAL KEY BIT REPLACE IT SET MODE = O PUT EOL IN I/O BUFFER, RETURN CONSTANTS 000166 023652 000263 000122 000052 000263 000077 000053 000177 000116 077467 077470 077471 077473 077474 P 118 B 166 MAXLN BUHM B 32 STPMS TRCMS COLLN EOL KPA QUOTE LPSVA LPSVB LPSVC LPSVE LPSVO DEC 118 DEFINITIONS EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU P 118 FLAG M 256 P 26 B 200 FLAG B 72 B 177 PO B 42 LPIT LPIT+ 1 LPIT+ 2 LPIT+ 4 LPIT+ 5 406 406 407 Page 337 03696000 03697000 03698000 03699000 03700000 03701000 03702000 03703000 03704000 03705000 03706000 03707000 03708000 03709000 03710000 03711000 03712000 03713000 03714000 03715000 03716000 03717000 03718000 03719000 03720000 03721000 03722000 03723000 03724000 03725000 03726000 03727000 03728000 03729000 23775 03730000 23775 03731000 23776 03732000 03733000 03734000 03735000 23777 03736000 03737000 03738000 03739000 407 1,568,094 CONTROL AND I/O SUPERVISOR SERVICE ROUTINES 000236 077216 077216 077217 077220 077221 077223 077224 077225 077226 077227 077230 077231 077232 077233 077234 077235 077206 077207 077210 077211 077212 077213 077214 077215 077613 000433 077251 066000 067724 CTCNT CST SIOCP WPRT M PLADD TMP 6 K TMP 2 LNO TM Pl TMP 5 TMP 3 CFLAG TMP 7 TMP 4 SKEY WKC WMOD DTM Pl DTMP 2 SPKN OLCP CRSP IOCP RENFG DISP OFLAG EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU B 2 K CSTMP CST CST+ I CST+ 2 CST+ 3 CST+ 5 CST+ 6 CST+ 7 CST+ 8 CST+ 9 CST+ 10 CST+ 11 CST+ 12 CST+ 13 CST+ 14 CST+ 15 IOTMP IOTMP+ 1 IOTMP+ 2 IOTMP+ 3 IOTMP+ 4 IOTMP+ 5 IOTMP+ 6 IOTMP+ 7 LKTMP+ 6 ALDSP CMTMP+ 10 ROUTINE LINKS ORG JMP JMP 23775 B DELL ERAS BSS 1 END END DELETE COMMAND ERASE COMMAND CHECKSUM END OF PASS 2 NO ERRORS DETECTED 1,568,094 BASE-PAGE READ-WRITE-MEMORY 00003000 76550 00004000 00005000 00006000 00007000 00008000 76550 00009000 00010000 76557 00011000 76677 00012000 00013000 77017 00014000 77042 00015000 77062 00016000 77063 00017000 77064 00018000 77135 00019000 00020000 77206 00021000 77216 00022000 77237 00023000 00024000 77255 00025000 77256 00026000 77257 00027000 77260 00028000 00029000 77261 00030000 00031000 77275 00032000 77276 00033000 77277 00034000 7730000035000 77301 00036000 00037000 77305 00038000 77306 00039000 77307 00040000 77310 00041000 77311 00042000 77312 00043000 77313 00044000 77314 00045000 77315 00046000 77316 00047000 77317 00048000 00049000 77320 00050000 77321 00051000 77322 00052000 77323 00053000 77324 00054000 77325 00055000 77326 00056000 77327 00057000 77333 00058000 77343 ORG 76550 B SUP BINARY BSS CBUFF BSS CSTAK BSS RMTBL BSS STEAL BSS ROMWD BSS NPROG BSS IBUFF BSS KBUFF BSS IOTMP BSS CSTMP BSS CMTMP BSS XCOMM BSS MODE BSS CSTAT BSS ERRBP BSS EXTMP BSS IDXRW BSS SAVEB BSS ENDS BSS AP 2 BSS BSS OFWAM BSS FWAM BSS FWAM BSS FWUP BSS RMAX BSS VT 1 BSS VT 2 BSS FWBA BSS TE BSS STYFG BSS CERR BSS SWHRE BSS FSV BSS STCHK BSS STENT BSS STEAS BSS AKOUN BSS STRES BSS STEFL BSS SEED BSS BSS BINARY PROGAM LINKS COMPILE BUFFER COMPILE STACK MUST BE AFTER CBUFF ROM ADDRESS TABLE MUST BE AFTER CSTAK STOLEN RWM TABLE ROM IN/OUT INFO NEW-PROGRAM FLAG INPUT/OUTPUT BUFFER KEYBOARD BUFFER I/O DRIVER TEMPORARIES CONTROL SUPERVISOR TEMPORARIES COMPILER TEMPORARIES INTERPRETER COMMUNICATIONS WORD CONTROL-SUPERVISOR MODE FLAG CONTROL STATE ERROR BYPASS LINK INTERPRETER TEMPORARIES INDEXED RWM 16 1 1 41 8 17 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 NOTRY BSS 1 RESERVED FOR INDEX TABLE FIRST WORD ACTUAL RWM FIRST WORD AVAILABLE RWM FIRST WORD OF USER PROGRAM MAXIMUM R-REGISTER ADDRESS FIRST WORD OF VALUE TABLE INFORMATION FIRST WORD OF VALUE TABLE VALUES FIRST WORD OF BINARY AREA TRACE ON/OFF FLAG SECURE-PROGRAM FLAG COMPILE ERROR FLAG SAVED WHERE ERASE STRING VARIABLE TABLE STRING COMPARISON LINK STRING ENTER LINK STRING ENTER ASSIGNMENT LINK LINK TO PROCESS A STRING STRING ASSIGNMENT FOR READ STATEMENT

STRING ENTER FLAG SEED FOR RANDOM-NUMBER GENERATOR RESERVED FOR POST-RELEASE INTERROM LINKS MAXIMUM # OF TRIES AT READ OR SEARCH 408 Page 338 408 1,568,094 409 e 339 BASE-PAGE READ-WRITE-MEMORY 59000 77344 AVFLG BSS I CASSETTE AUTOVERIFY FLAG 10000 77345 CSCF BSS 1 SELECT CODE OF CASSETTE IN PARALLEL SEARCH 51000 77346 FTRGT BSS 1 TARGET RECORD FOR PARALLEL SEARCH i 2000 77347 INTSR BSS 1 INTERRUPT SERVICE FLAG 63000 54000 77350 AEBUF BSS I BUFFER EDIT POINTERS 65000 77351 AEBFX BSS 1 16000 77352 AEBFM BSS 1 57000 77353 AEBFL BSS 1 58000 69000 77354 DVTAB BSS 26 DECLARED VARIABLETABLE 70000 77406 DATAB BSS 26 DECLARED ARRAY TABLE 7 r 1000 77440 ITABL BSS 16 INTERRUPTJUMPTABLE-ADDRESS MUST END IN 0000 72000 77460 HPIT BSS 7 HI-PRIORITY INTERRUPT SAVE AREA 73000 77467 LPIT BSS 7 LO-PRIORITY INTERRUPT SAVE AREA 74000 75000 77476 ENR BSS 4 ENTER REGISTER 76000 77502 URES BSS 4 USER RESULT REGISTER 77000 77506 FLAGS BSS I FLAG REGISTER, 0-15 L-TO-R 78000 79000 77507 ELINK BSS 1 END-STMT EXECUTION LINK 10000 77510 IOSR BSS 1 1/O-ROM SERVICE ROUTINE LINK 11000 77511 MLBPL BSS 1 "MAIN LOOP" BYPASS LINK 12000 77512 DLEN BSS I DISPLAY LENGTH B 3000 77513 DBP BSS 1 DISPLAY BEGIN POINTER 4000 77514 CSELC BSS I CASSETTE SELECT CODE 15000 77515 BUSFG BSS 1 FORJN 000 77516 IOINT BSS 1 FORJN 17000 77517 RGFLG BSS I REGISTER ASSIGNMENT INFORMATION 88000 19000 77520 PARG BSS 1 P-ARGUMENT P O 00 77521 AP 36 BSS I PRODUCTION 36 (FOR JO) P 1000 77522 AP 37 BSS 1 PRODUCTION 37 12000 77523 AP 77 BSS 1 PRODUCTION 77 93000 77524 AP 78 BSS I PRODUCTION 78 4000 77525 AP 136 BSS I PRODUCTION 136 15000 77526 APP# BSS I P# EXECUTION 6000 77527 APRET BSS 1 A P ROM'S PART OF 'RET' EXECUTION 17000 77530 LOADL BSS I CASSETTE LDK OK LINK 98000 77531 APRVC BSS I A PROM'S CHECKFOR O 09000 77532 REFOR BSS I RESETFOR/NEXT BEFORE EXECUTE 000 77533 RLINK BSS I RUN-CMND EXECUTION LINK } 1000 C 2000 77534 RBUFF BSS 41 RESERVE KEYBOARD BUFFER 3000 77605 LKTMP BSS 14 4000 77623 LKFLG BSS I LIVE KEYBOARD ENABLE/DISABLE FLAG b 5000 D 6000 77624 ENSV BSS 4 SAVE AREA FOR ENTER 17000 77630 SVXCM BSS 1 SAVEDXCOMM FOR ENTER B 000 P 9000 77631 BSS 2 FOR POST-RELEASE CHANGES 0000 1000 77633 2000 3000 77674 4000 77675 JSTAK T 26 T 26 BSS BSS BSS l (ARE SAVED WITH RCM) JSM STACK FOR POST-RELEASE CHANGES (NOT SAVED WITH RCM) 409 Pag 0001 000 006 00 oo 0006 000 O 05 000 ( 0007 0007 0007 000, 000 Q 0007 000, 0001 000 i 0 OO 8 008 008 00 M 0008 00 o 0008 OOO 8 OMO M 08 00 08 0 OO 9 ono 00 ( 9 O O 09 0009 OO 09 0 OO 9 0 09 OO 09 oo 00 10 oo 00 lc oo 00 l oolc 001 ( 0011 0 o 11 0011 0011 0011 0011 1,568,094 BASE-PAGE READ-WRITE-MEMORY 00115000 00116000 77676 CATI 00117000 00118000 77711 Tl 00119000 77712 T 2 00120000 77713 T 3 00121000 77714 T 4 00122000 77715 T 5 00123000 77716 T 6 00124000 77717 T 7 00125000 77720 T 8 00126000 77721 T 9 00127000 77722 T 10 00128000 77723 T 11 00129000 77724 T 12 00130000 77725 T 13 00131000 77726 T 14 00132000 77727 T 15 00133000 77730 T 16 00134000 77731 T 17 00135000 77732 T 18 00136000 77733 T 19 00137000 77734 T 20 00138000 77735 T 21 00139000 77736 T 22 00140000 77737 T 23 00141000 77740 T 24 00142000 77741 T 25 00143000 00144000 77742 O Pl 00145000 77746 OP 2 00146000 77752 RES 00147000 77756 MRW 00148000 77770 00149000 77774 MRW 00151000 00040 00152000 00153000 SY 5 00154000 00155000 00040 164041 SYSS 00156000 00041 4 P BSS 11 BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS 4 BSS 4 BSS 4 BSS 10 BSS 4 BSS 4 CASSETTE TEMPORARIES SHARED TEMPORARIES FLOATING-POINT TEMPORARY FLOATING-POINT TEMPORARY RESULT FOR ALL FLOATING-POINT OPERATIONS MATH READ-WRITE ARI MATH READ-WRITE ORG 40 B STEM STARTUP JMP +l,I BSS I Page 340 410 410 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Page 341 BASE-PAGE READ-ONLY-MEMORY 00158000 00159000 CONSTANTS 00160000 00161000 00042 000777 P 511 DEC 511 JN JO 00162000 000042 B 777 EQU P 511 00163000 00043 000411 P 265 DEC 265 00164000 000043 B 411 EQU P 265 00165000 00044 000400 P 256 DEC 256 JB JN 00166000 000044 B 400 EQU P 256 00167000 00045 000377 P 255 DEC 255 JB JN 00168000 000045 B 377 EQU P 255 MT 00169000 00046 000231 P 153 DEC 153 00170000 000046 B 231 EQU P 153 00171000 00047 000230 P 152 DEC 152 00172000 000047 B 230 EQU P 152 00173000 00050 000224 P 148 DEC 148 00174000 000050 B 224 EQU P 148 00175000 00051 000202 P 130 DEC 130 00176000 000051 B 202 EQU P 130 00177000 00052 000200 P 128 DEC 128 JB MT 00178000 000052 B 200 EQU P 128 00179000 00053 000177 P 127 DEC 127 JB MT 00180000 000053 B 177 EQU P 127 MT 00181000 00054 000176 P 126 DEC 126 JB 00182000 000054 B 176 EQU P 126 00183000 00055 000175 P 125 DEC 125 JB 00184000 000055 B 175 EQU P 125 00185000 00056 000174 P 124 DEC 124 JB 00186000 000056 B 174 EQU P 124 00187000 00057 000173 P 123 DEC 123 JB 00188000 000057 B 173 EQU P 123 MT 00189000 00060 000162 P 114 DEC 114 JB 00190000 000060 B 162 EQU P 114 00191000 00061 000160 P 112 DEC 112 00192000 000061 B 160 EQU P 112 00193000 00062 000153 P 107 DEC 107 JB 00194000 000062 B 153 EQU P 107 MT 00195000 00063 000145 P 101 DEC 101 00196000 000063 B 145 EQU P 101 00197000 00064 000143 P 99 DEC 99 JO MT 00198000 00065 000141 P 97 DEC 97 00199000 000065 B 141 EQU P 97 00200000 00066 000140 P 96 DEC 96 JB 00201000 000066 B 140 EQU P 96 00202000 00067 000135 P 93 DEC 93 00203000 000067 B 135 EQU P 93 00204000 00070 000133 P 91 DEC 91 00205000 000070 B 133 EQU P 91 00206000 00071 000105 P 69 DEC 69 JB 00207000 00072 000101 P 65 DEC 65 00208000 000072 B 101 EQU P 65 00209000 00073 000100 P 64 DEC 64 JB JO MT 00210000 000073 B 100 EQU P 64 00211000 00074 000077 P 63 DEC 63 JB 00212000 000074 B 77 EQU P 63 00213000 00075 000075 P 61 DEC 61 1,568,094 411 411 412 BASE-PAGE READ-ONLY-MEMORY 00214000 00215000 00076 00216000 00217000 00077 00218000 00219000 00100 00220000 00221000 00101 00222000 00223000 00102 00224000 00225000 00103 00226000 00227000 00104 00228000 00229000 00105 00230000 00231000 00106 00232000 00233000 00107 00234000 00235000 00110 00236000 00237000 00111 00238000 00239000 00112 00240000 00241000 00113 00242000 00243000 00114 00244000 00245000 00115 00246000 00247000 00116 00248000 00249000 00117 00250000 00251000 00120 00252000 00253000 00121 00254000 00255000 00122 00256000 00123 00257000 00124 00258000 00125 00259000 00126 00260000 00127 00261000 00262000 00130 00263000 00264000 00131 00265000 00132 00266000 00133 00267000 00134 00268000 00269000 00135 000073 000076 000072 000077 000064 000063 000101 000061 000102 000103 000057 000104 000056 000106 000054 000107 000053 000052 000111 000051 000112 000113 000044 000114 000043 000042 000116 000117 000037 000034 000121 000032 000024 000023 000022 000021 000127 000017 000016 000014 000013 000134 000012 B 75 P 59 B 73 P 58 B 72 P 52 B 64 P 51 B 63 P 49 B 61 P 48 B 60 P 47 B 57 P 46 B 56 P 45 B 55 P 44 B 54 P 43 B 53 P 42 B 52 P 41 B 51 P 40 B 50 P 36 B 44 P 35 B 43 P 34 B 42 P 32 B 40 P 31 B 37 P 28 B 34 P 26 P 20 P 19 P 18 P 17 P 16 B 20 P 15 B 17 P 14 P 13 P 12 P Il B 13 P 10 O EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC EQU DEC DEC DEC DEC DEC DEC EQU DEC EQU DEC DEC DEC DEC EQU DEC P 61 59 P 59 58 P 58 52 P 52 51 P 51 49 P 49 48 P 48 47 P 47 46 P 46 P 45 44 P 44 43 P 43 42 P 42 41 P 41 P 40 36 P 36 P 35 34 P 34 32 P 32 31 P 31 28 P 28 26 19 18 17 16 P 16 P 15 14 13 12 11 P 1 l JB JB JB JB MT JB JB JB JB JB JB JB JB JB JN JB JN MT JB JN MT JB JO JN JB JN JB JN JB JB JB JB JB JB JN JN JN JN MT MT JO MT MT JO JO MT JO JO MT Page 342 1,568,094 412 1,568,094 Page 343 00270000 00136 00271000 00137 00272000 00273000 00140 00274000 00141 00275000 00142 00276000 00143 00277000 00144 00278000 00145 00279000 00146 00280000 00147 00281000 00150 00282000 00151 00283000 00152 00284000 00153 00285000 00154 00286000 00155 00287000 00156 00288000 00157 00289000 00160 00290000 00161 00291000 00162 00292000 00293000 00163 00294000 00164 00295000 00296000 00165 00297000 00166 00298000 00167 00299000 00170 00300000 00171 00301000 00302000 00172 00303000 00173 00304000 00174 00305000 00175 00306000 00176 00307000 00177 00308000 00200 00309000 00201 00310000 00202 00311000 00312000 00203 00313000 00204 00314000 00205 00315000 00206 00316000 00207 00317000 00210 00318000 00319000 00211 00320000 00212 00321000 00322000 00213 00323000 00214 00324000 00215 00325000 00216 BASE-PAGE READ-ONLY-MEMORY 000011 000137 000007 000006 000004 000003 000002 177776 177775 177774 177773 177772 177771 177770 177765 177763 177761 177760 177757 177740 000162 177720 177700 000164 177660 177637 177600 177400 160000 P 9 P 8 B 10 o P 7 P 6 P 5 P 4 P 3 P 2 M 2 M 3 M 4 M 5 M 6 M 7 M 8 Mll M 13 M 15 M 16 M 17 M 32 BM 40 M 48 M 64 BM 100 M 80 M 97 M 128 M 256 M 8192 000174 AONE 000177 APIE 000000 010000 B 10 K 000000 000000 PO 030501 054446 051540 000204 154360 176030 177634 177766 000210 077740 077700 000212 077577 077440 077400 076574 PTCN MIOK M 100 M 1000 ENDTC BXCAA EMAX B 777 X TMASK EOLB BXCMM ZK 2 DEC DEC EQU DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC EQU DEC DEC EQU DEC DEC DEC DEC DEC DEF DEF OCT OCT OCT OCT OCT OCT OCT DEF DEC DEC DEC DEC DEF OCT OCT EQU OCT OCT OCT OCT 9 8 P 8 7 6 4 3 2 -2 -3 -4 -5 -6 -7 -8 -11 -13 -15 -16 -17 -32 M 32 -48 -64 M 64 -80 -97 -128 -256 -8192 + 2 + 4 000000 010000 000000 000000 030501 054446 051540 JB JN JO MT JB JN JO JB JO JB JN JO JB JN JO JB JN JO JB JN JO JB JN JB JN JO JB JN JO JB JN JO MT MT MT MT MT MT MT MT JB JN MT JO JO MT JB JN JO MT JB JB JN MT JB JB JO JB MT JO MT JB JB JN JO FLOATING-POINT ONE JO FUDGED Pl JB JB JO MT 3141 5360 + 1 -10000 JB -1000 -100 JB -10 JB 77740 JB 77700 EMAX JB 77577 77440 JB 77400 JB 76574 JO 5926 JO JO 413 413 1,568,094 BASE-PAGE READ-ONLY-MEMORY 00326000 00217 00327000 00220 00328000 00221 00329000 00222 00330000 00223 00331000 00224 00332000 00225 00333000 00226 00334000 00227 00335000 00230 00336000 00231 00337000 00232 00338000 00233 00339000 00234 00340000 00235 00341000 00236 00342000 00237 00343000 00344000 00240 00345000 00346000 00241 00347000 00242 00348000 00243 00349000 00244 00350000 00245 00351000 00246 00352000 00247 00353000 00250 00354000 00251 00355000 00356000 00252 00357000 00358000 00359000 00360000 00361000 00362000 00363000 00364000 00365000 00366000 00367000 00368000 00369000 00370000 00371000 00253 00254 00255 00256 00257 00260 00261 076000 071050 070000 067000 063000 060000 052525 037440 020000 010133 010050 007403 004406 004000 003377 002000 001000 177701 000167 176000 170720 170000 137777 131400 126273 101175 100377 100200 000254 B 76 K TRCC 2 B 70 K B 67 K B 63 K B 60 K ALBPT QMRKB B 20 K RK 2 RKI B 7403 ZK 3 B 4 K B 3377 B 2 K BIK ZAP BM 200 BM 2 K KF B 170 K XMASK IMCON AMSE ZKI BM 377 UMASK NB NBI 1 077772 NB 2 000001 Pl 177764 M 12 000000 177777 MI 000000 000000 00262 020040 00263 100000 00264 040001 00265 100004 000171 000221 00266 011401 TOBLN FLAG STTMP STWHR ARRAY EMPTY FPTMP OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT EQU OCT OCT OCT OCT OCT OCT OCT OCT OCT DEF DEF DEC DEC DEC DEC DEC DEC OCT OCT OCT OCT EQU EQU OCT 76000 71050 70000 67000 63000 60000 5252525 37440 20000 10133 10050 7403 4406 4000 3377 2000 1000 177701 M 128 -2000 170720 170000 137777 131400 126273 101175 100377 100200 + 2 77772 B 1 -12 0 -1 0 020040 100000 040001 100004 M 8192 B 70 K 011401 00372000 00267 110000 FVRWM OCT 110000 00373000 00270 110402 FVRRA OCT 110402 00374000 00375000 00376000 00377000 00378000 00379000 00380000 00381000 00271 00272 00273 062562 071157 071040 LKERM OCT OCT OCT 62562 71157 71040 POINTERS 00274 000053 AAEOLDEF B 17 00274 000053 AAEOL DEF B 177 JB JB JB JB JB JB JOMT MT MT MT MT MT JB MT MT JB JB JO JO JB JB MT MT SPECIAL PATTERN FOR NUMBER BUILDER JB JN JO MT JB JO JB JO MT TWO ASCII BLANKS STRING CONSTANT IN STACK ENTIRE ARRAY EMPTY FULL-PRECISION CONSTANT IN STACK FULL-PRECISION VARIABLE IN RWM FULL-PRECISION VARIABLE IN R-REGISTER AREA LOWER-CASE "ERROR" ADDRESS OF EOL Page 344 414 414 1,568,094 BASE-PAGE READ-ONLY-MEMORY 00382000 00275 077440 AITAB 00383000 00276 077345 ADVTB 00384000 00277 00385000 00300 00386000 00301 00387000 00302 00388000 00303 00389000 00304 00390000 00305 00391000 00306 00392000 00307 00393000 00310 077406 077632 077633 176557 076557 076556 076676 077135 177135 077134 ADATB AJSTK AJSMS ACBFX ACBF ACBUF ACLMT AKBUF AKBFX AKBFM 00394000 00311 077205 AKBFL 00395000 00312 000306 AKBST 00396000 00313 00397000 00314 00398000 00315 00399000 00316 00400000 00317 00401000 00320 00402000 00321 00403000 00322 00404000 00323 00405000 00324 00406000 00325 00407000 00408000 00326 00409000 00410000 00411000 00327 00412000 00330 00413000 00331 00414000 00332 00415000 00333 00416000 00417000 00334 00418000 00335 077064 177064 077063 077134 077066 077070 000313 077534 077533 076677 176677 000305 077016 000326 077017 076550 000332 AIBUF AIBFX AIBFM AIBFL AIBSL AIOLM AIBST ARBUF ARBFM ASTK 1 ACSTF ASTAK ASLMT ATROM AROMS ABNRY AMAIN ARTBL AMTBL 000177 ADPO 077711 ATMP 00419000 00420000 00336 077742 00421000 00337 077746 00422000 00340 077752 00423000 00341 077476 00424000 00342 077502 00425000 00426000 00343 077414 00427000 000326 00428000 00429000 00344 077777 00430000 000330 00431000 00432000 00345 077770 00433000 000127 00435000 00436000 AO Pl AOP 2 ARES AENR AURES SVRE STRK MAW LWAM ADRI ADR 2 DEF ITABL DEF DVTAB DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DATAB JSTAK-1 JSTAK CBUFF,I CBUFF CBUFF-1 CBUFF+ 79 KBUFF KBUFF,I KBUFF-1 DEF KBUFF+ 40 DEF AKBUF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF EQU DEF EQU DEF DEF DEF BSS BSS IBUFF IBUFF,I IBUFF-1 IBUFF+ 40 IBUFF+ 2 IBUFF+ 4 AIBUF RBUFF RBUFF-1 CSTAK CSTAK,I ACLMT CSTAK+ 79 ASLMT RMTBL BINRY ARTBL 1 DEF PO DEF TZI DEF DEF DEF DEF DEF ABS EQU OCT EQU DEF EQU ADDRESS OF INTERRUPT TABLE ADDRESS OF DECLARED VARIABLE TABLE

ADDRESS OF DECLARED ARRAY TABLE ADDRESS OF JSM STACK COMPILE BUFFER 1ST CHAR ADDRESS COMPILE BUFFER STARTING ADDRESS ADDRESS OF COMPILE BUFFER COMPILE BUFFER UPPER LIMIT KEYBOARD BUFFER KEYBOARD BUFFER IST CHAR ADDRESS KEYBOARD BUFFER STARTING ADDRESS 1 KEYBOARD BUFFER ENDING ADDRESS KEYBOARD BUFFER POINTERS STARTING ADDRESS I/O BUFFER I/O BUFFER 1ST CHAR ADDRESS I/O BUFFER STARTINF ADDRESS 1 I/O BUFFER ENDING ADDRESS I/O BUFFER STARTING ADDRESS + 2 I/O BUFFER STARTING ADDRESS FOR "LINE" MESSAGE EDIT POINTERS STARTING ADDRESS COMPILE STACK STARTING ADDRESS ADDRESS OF COMPILE STACK 1 COMPILE STACK UPPER LIMIT ADDRESS OF ROM ADDRESS TABLE ADDRESS OF BINARY HEADER ADDRESS OF MAINFRAME HEADER ADDRESS OF REVERSE COMPILE TABLE ADDRESS OF MAINFRAME MNEMONIC TABLE

STARTING ADDRESS OF SHARED TEMPORARIES O Pl OP 2 RES ENR URES DVTAB-1018 + 97 ASLMT 77777 ABNRY MAXIMUM AVAILABLE WORD LAST WORD AVAILABLE RWM + I ARI P 16 USEFUL POINTERS AND EQUATES Page 345 415 415 1,568,094 BASE-PAGE READ-ONLY-MEMORY CMTMP+ O CMTMP+ I CMTMP+ 2 CMTMP+ 3 CMTMP+ 13 CMTMP+ O CMTMP+ I EXTMP+ O EXTMP+ 2 EXTMP+ 3 EXTMP+ 4 EXTMP+ 5 EXTMP+ 6 EXTMP+ 7 EXTMP+ 8 EXTMP+ 9 EXTMP+ 10 EXTMP+ 11 CSTMP+ 4 LKTMP+ 3 P 6 416 TOKEN FOR PARSER ASCII FOR PARSER USED BY SCANNER IN CASE OF ERROR IMPLIED-MULTIPLY FLAG STACK POINTER PRIORITY/CLASS/CHARACTERS CHARACTER ADDRESS RETURN LINK INFORMATION TOP OF EXECUTION STACK ADDRESS OF NEXT LINE TO BE EXECUTED ADDRESS OF LINE BEING EXECUTED ADDRESS FOR CS TO RESUME EXECUTION CURRENT LINE TRACE INFORMATION ADDRESS IN DVTAB OR DATAB ID OF STRING ROM 416 Page 346 00437000 00438000 00439000 00440000 00441000 00442000 00443000 00444000 00445000 00446000 00447000 00448000 00449000 00450000 00451000 00452000 00453000 00454000 00455000 00456000 00457000 00458000 00459000 00460000 00461000 00462000 00463000 077237 077240 077241 077242 077254 077237 077240 077261 077263 077264 077265 077266 077267 077270 077271 077272 077273 077274 077222 077610 000141 TKN BCD OLDC ISTAR STAKP GUIDE ASCII AP 3 A Pl LEND HERE WHERE TRACE SAVEC BASE FA Pl OPND 1 OPND 2 L KB FMT STRID STRID EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU 417 Page 347 00465000 00466000 00467000 00468000 00346 00469000 00347 00470000 00350 00471000 00351 00472000 00352 00473000 00353 00474000 00354 00475000 00355 00476000 00477000 00356 00478000 00357 00479000 00480000 00360 00481000 00361 00482000 00362 00483000 00363 00484000 00364 00485000 00365 00486000 00366 00487000 00367 00488000 00370 00489000 00371 00490000 00372 00491000 00373 00492000 00374 00493000 00375 00494000 00376 00495000 00377 00496000 00400 00497000 00401 00498000 00402 00499000 00500000 00501000 00502000 00403 00503000 00404 00504000 00405 00505000 00406 00506000 00407 00507000 00410 00508000 00411 00509000 00412 00510000 00413 00511000 00414 00512000 00415 00513000 00416 00514000 00417 00515000 00420 00516000 00421 00517000 00422 00518000 00423 00519000 00424 00520000 00425 1,568,094 BASE-PAGE READ-ONLY-MEMORY ROUTINE ADDRESSES ACPLR BSS 1 AREAD BSS 1 AAPL 1 BSS 1 ASETC ANUMB ALBLN ALBCM AOUTS ARCLR ADSRM ARSGT AINTI AFBAD AINTT AINTK AINTX ARAP ASTP ALLOC AOVTS AASTR ALNTR AFCI AFCC ASFG AGNAM ACLBL AADBA A.ADB BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 417 COMPILER COMPILER INPUT READER APPLY-PRODUCTION RETURN TO COMPILER COMPILE ERROR NUMBER-BUILDER QUOTE SCANNER QUOTE BUILDER COMPILER BYTE WRITER REVERSE COMPILER DISPLAY ROM I D NUMBER RESET HI-SPEED BRANCHES INTERPRETER 'RUN' ENTRY FIND BYTE ADDRESS DIFFERENCE INTERPRETER 'CLL' ENTRY INTERPRETER 'CONTINUE' ENTRY INTERPRETER EXECUTION RETURN FOR MATH ROUTINES FOR END-STMT LINK ALLOCATOR EXECUTION STACK OVERFLOW TEST ASSIGNMENT TRACE LINE NUMBER TRACE FIND-BYTE INITIALIZATION ENTRY FIND-BYTE CONTINUATION ENTRY SET A FLAG GET VARIABLE NAME FIND LABEL LINE ADDRESS ADJUST BYTE ADDRESS ENTRY #1 ADJUST BYTE ADDRESS ENTRY #2 K PAGE-CONTROL SUPERVISOR AMCLX AERRI AERR 2 APEMI AEREX AREJR AXCMM APLIR ACNDT ACTFC ACONT AEXCK AEXCL AKYPR AERCS AECIM ASCND ASYER ACNIN BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS MAIN LOOP ADDR+ I ERROR ROUTINE-NO RETURN ERROR ROUTINE RETURN P+ 2 PLACE ERROR MESSAGE IN I/O BUFFER ERROR EXIT AFTER 'AERR 2 ' INTERRUPT REJECT ROUTINE XCOMM MANAGEMENT PLACE LINE NUMBER IN I/O BUFFER AND REVCOMP COMMAND TABLE

CHECK TABLE FOR COMMAND IMMEDIATE EXECUTE CONTINUE COMMAND EXECUTION PLACE LINE BRIDGES ON COMPILED LINE PROCESS A KEY CASSETTE RUN ENTRY IMMEDIATE CONTINUE COMMAND TABLE ADDRESS SYSTEM ERROR CONTINUE INITIALIZATION 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I 1,568,094 BASE-PAGE READ-ONLY-MEMORY 00521000 00426 00522000 00427 00523000 00430 00524000 00431 00525000 00526000 00527000 00528000 00432 00529000 00433 00530000 00434 00531000 00435 00532000 00436 00533000 00437 00534000 00440 00535000 00441 00536000 00442 00537000 00443 00538000 00444 00539000 00445 00540000 00446 00541000 00447 00542000 00450 00543000 00451 00544000 00452 00545000 00453 00546000 00454 00547000 00455 00548000 00456 00549000 00457 00550000 00460 00551000 00461 00552000 00462 00553000 00554000 00555000 00556000 00463 00557000 00464 00558000 00465 00559000 00466 00560000 00467 00561000 00470 00562000 00471 00563000 00472 00564000 00473 00565000 00474 00566000 00475 00567000 00476 00568000 00477 00569000 00500 00570000 00501 00571000 00502 00572000 00503 00573000 00504 00574000 00575000 00576000 AERSA BSS I AISTR BSS 1 AISTX AEXST BSS 1 BSS 1 LINK FOR ERASE-ALL PLACE KEYBOARD CHARACTER IN I/O BUFFER PLACE CHARACTER IN I/O BUFFER STATEMENT EXECUTION

12 K PAGE-I/O SUPERVISOR ADSPC ALDSP AKBSR ATRBF AEPON AEPNX ASVRG AKBR 2 ACPST APRNT A.PRN APNMR AFBP ASWIO ACLBI ACLEB AEOLB ACLCM ARPRL ALKEX ALXER BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS ALXKY BSS AKYTB APRKB APSTR 22 K BSS 1 BSS 1 BSS 1 (PSTRG) PAGE AMUPH BSS AMAMP BSS AMPUP AMPML AMTHM AMTLM AZRWM AERAV ALISK AKEYN AEDPT ATLNI ABTDA AEOLN AGNXT ATCHR ARNLO ARNLF 26 26 K BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS DISPLAY EDIT BUFFER WITH CURSOR DISPLAY I/O BUFFER KEYBOARD SERVICE ROUTINE TRANSFER I/O BUFFER TO KEYBOARD BUFFER PRINT-ALL ROUTINE LINK TO PRINT-ALL FOR ENP SAVE LOW PRIORITY A, B E, O RESTORE LOW PRIORITY A, B, E O CHECK PRINTER STATUS PRINT CHARACTERS ALREADY GIVEN TO HARDWARE PRINT 16 CHARS FROM I/O BUFFER PRINT A NUMERIC VALUE FIND DISPLAY BEGIN POINTER SWAP POINTERS TO EDIT I/O BUFFER CLEAR I/O BUFFER CLEAR EDIT BUFFER SET EOL IN EDIT BUFFER CLEAR COMPILE BUFFER ROM "POWER REDUCTION LOOP" LINK TO LIVE-KEYBOARD EXECUTION LINK TO LIVE-KEYBOARD EXECUTE ERROR ROUTINE LINK TO LIVE-KEYBOARD EXECUTE KEY PROCESSING PRINT-ALL FROM KEYBOARD BUFFER MOVE MAIN PROGRAM TO HIGHER MEMORY MOVE MAIN PROGRAM TO LOWER MEMORY MOVE PART OF MAIN PROGRAM HIGHER MOVE PART OF MAIN PROGRAM LOWEF MOVE RWM HIGHER MOVE RWM LOWER ZERO RWM ERASE ALL VARIABLES LIST A SPECIAL KEY PUT SPECIAL KEY NUMBER IN I/O BUFFEI RESET EDIT POINTERS PLACE LINE NUMBER IN I/O BUFFER BINARY TO DECIMAL ASCII FIND EOL IN I/O BUFFER GET NEXT CHARACTER TRANSFER CHARS LINK TO TURN ON RUN LIGHT LINK TO TURN OFF RUN LIGHT PAGE Page 348 418 418 i 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 419 Page 349 00577000 00505 00578000 00506 00579000 00507 00580000 00510 00581000 00511 00582000 00512 00583000 00513 00584000 00514 00585000 00515 00586000 00516 00587000 00517 00588000 00520 00589000 00521 00590000 00522 00591000 00523 00592000 00593000 00524 00594000 00525 00595000 00526 00596000 00527 00597000 00530 00598000 00531 00599000 00532 00600000 00533 00601000 00534 00602000 00535 00603000 00536 00604000 00537 00605000 00540 00606000 00541 00607000 00542 00608000 00543 00609000 00544 00610000 00545 00611000 00546 00612000 00547 00613000 00550 00614000 00551 00615000 00552 00616000 00553 00617000 00554 00618000 00555 00619000 00556 00620000 00557 00621000 00560 00622000 00561 00623000 00562 00624000 00563 00625000 00626000 00564 00627000 00565 00628000 00629000 00566 00630000 00567 00631000 00570 00632000 00571 1,568,094 419 BASE-PAGE READ-ONLY-MEMORY APGET APNUM AINTC AGLL AGEOL AFLAD AFLNA ASLLN ASTKI AREST ARENI AREND ASTKG ADIGX AGLNO AUNM AADD ASUB AMUL ADIV ASQR AGE AGT ALT ALE AEQ ANE AAND AOR AXOR ANOT APRND ADRND ARERR ARND ATSUB AFLTC AGETI AGET 2 AADD 1 ASUB 1 AMULI ADIV 1 ADIV 2 ASQR 1 ATSUI AFLTP BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS ASTMA BSS ASTM 1 ALST APRT ADSP ASPC BSS BSS BSS BSS BSS 1 (PGET) 1 (PNUM) I (INTCK) 1 (GLENL) 1 I (FLADR) 1 1 (SLLN) 1 1 1 1 1 GET NEXT PARAMETER FOR "PRINT" LIS PROCESS A NUMERIC ITEM MAKE INTEGER FROM ASCII STRING GET LENGTH OF COMPILED LINE FIND EOL IN COMPILE BUFFER FIND LINE ADDRESS FIND LINE ADDR (TMP 7) SET 'LNO' TO LAST LINE NUMBER OR -I LINK TO LIVE-KEYBOARD INITIALIZATION LINK TO LIVE-KEYBOARD RESTORE INSERT LINE RENUMBER GTO/GSB DELETE LINE RENUMBER GTO/GSB STACK ROUTINE FOR GSB GENERAL RANGE CHECK ROUTINE GET LINE NUMBER OF CURRENT LINE UNARY MINUS FILLED IN FROM 14 KPAGE (IMATH) ADD SUBTRACT MULTIPLY DIVIDE SQRT ≥ AND OR XOR NOT P-ROUND D-ROUND RECOVERABLE MATH ERROR ROUND USED BY RELATIONAL OPERATIONS FULL-PRECISION EXPONENT RANGE CHECK SET ONE MATH OPRND FROM STACK SET TWO MATH OPNDS FROM STACK ADD+I SUBTRACT+ 1 MULTIPLY+ I DIVIDE+ 1 DIVIDE ENTRY FOR TRUNCATED QUOTIENT SQRT+ 1 TSUB+I CONVERT TO FLOATING-POINT STMAX ENTRY FILLED IN FROM 24 KPAGE (MOBA) STMAX ENTRY LINK TO EXECUTE 'LIST' LINK TO EXECUTE 'PRT' LINK TO EXECUTE 'DSP' LINK TO EXECUTE 'SPC' 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I I 1,568,094 Page 350 00633000 00572 00634000 00573 00635000 00574 00636000 00575 00637000 00576 00638000 00577 00639000 00640000 00600 00641000 00601 00642000 00602 00643000 00603 00644000 00604 00645000 00605 00646000 00606 00647000 00648000 00607 00649000 00610 00650000 00611 00651000 00612 00652000 00653000 00613 BASE-PAGE READ-ONLY-MEMORY 001053 001110 001133 001142 ALSTK AKON AKOF AFXD AFLT AENT ACSTI ARFK DMALO ASTPA AWTRR ACHST ARDRC ABUMP ACOUN AGTAD AGTIN BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS BSS DEF DEF DEF DEF 1 1 1 1 1 LINK TO EXECUTE 'LISTK' LINK TO EXECUTE 'KON' LINK TO EXECUTE 'KOFF' LINK TO EXECUTE 'FXD' LINK TO EXECUTE 'FLT' LINK TO EXECUTE 'ENT' CASSETTE INITIALIZATION REWIND FROM KEYBOARD LINK TO DMA LOCKOUT ROUTINE LINK TO SET CASSETTE P A.

LINK TO WRITE RECORD LINK TO FIND RECORD LINK TO READ RECORD 1 1 1 1 1 1 BUMP COUNT GETAD GETIN BUMP PARAMETER POINTER (FAPI) COUNT PARAMETERS ON STACK GETAD SUBROUTINE GETIN SUBROUTINE FOR MORE LINKS IF NEEDED 420 420 BSS 2 1,568,094 BASE-PAGE SUBROUTINES UTILITIES UTILITIES 00659000 00660000 00661000 00662000 00663000 00664000 00665000 00666000 00615 00667000 00616 00668000 00669000 00617 00670000 00620 00671000 00621 00672000 00622 00673000 00623 00674000 00624 00675000 00676000 00625 00677000 00626 00678000 00627 00679000 00630 00680000 00631 00681000 00682000 00632 SUBROUTINE TO GET OPERAND ABSOLUTE ADDRESS W F C.

ON EXIT: A = UPDATED STACK POINTER B = ABSOLUTE ADDRESS SAVE B = OLD STACK POINTER 005263 ABSAD 035276 100001 050140 020632 024145 104001 124000 001276 020254 100000 021276 170201 LDB A Pl STB SAVEB LDA AND ADA ADB LDB ADB 077275 INDX 077275 INDXP B,I P 7 INDXP P 2 B,I A,I LDA SAVEB ADA Pl LDA A,I ADA SAVEB RET 1 DEF IDXRW ENTER HERE TO USE A Pl GET INDEX NUMBER B = RELATIVE ADDRESS B = ABSOLUTE ADDRESS A = LENGTH A = UPDATED POINTER POINTER TO INDEXED RWM WAIT SUBROUTINE ON ENTRY: B = -DELAY IN MILLISECONDS s 00633 000642 DELAY 00634 072100 00635 001206 00636 010254 00637 170201 00640 076173 00641 170201 00642 177130 TIME 00642 177130 TIME LDA RIA LDA CPA RET RIB RET TIME IOTMP TEST FOR STOP KEY Pl 1 -5 OCT 177130 Page 351 00655000 00656000 00657000 00684000 00685000 00686000 00687000 00688000 00689000 00690000 00691000 00692000 00693000 00694000 00695000 00696000 00697000 421 421 1,568,094 BASE-PAGE SUBROUTINES 00699000 00700000 00701000 00702000 00703000 00704000 00705000 00706000 00707000 00708000 00709000 00710000 00711000 00712000 00713000 00714000 00715000 00643 00716000 00717000 00644 00718000 00645 00719000 00646 00720000 00647 00721000 00650 00722000 00651 00723000 00652 00724000 00653 00725000 00654 00726000 00655 00727000 00656 00728000 00729000 00657 00730000 00660 00731000 00661 00732000 00662 00733000 00663 00734000 00664 00735000 00665 00736000 00666 00737000 00667 00738000 00670 00739000 00671 00740000 00741000 00672 00742000 00673 00743000 00674 00744000 00675 00745000 00676 00746000 00747000 00677 00748000 00700 00749000 00701 00750000 00702 CONVERT FLOATING NUMBER TO INTEGER W F C.

ON ENTRY:

A POINTS TO FLOATING NUMBER ON EXIT:

000001 004127 071403 004177 173201 170405 020254 072417 172426 031711 064664 B HAS INTEGER VALUE O INDICATES OVERFLOW STATUSAR 2 HAS FRACTIONAL REMAINDER TEMPORARIES USED: T, T 2 TEMPORARIES USED: TI, T 2 FIXPT 024001 F Il 035712 024001 024001 025712 000177 FI 2 075541 170040 024000 055711 064657 000021 170513 020151 172402 024257 FI 3 073402 174040 170201 FI 4 LDA B LDB XFR LDB SOC LDA AAR ADA SZA SAM STA JMP ALTERNATE ENTRY ADR 2 4 PO +I,C AR 2 6 Pl FI 3 FI 4 Tl FI 2 ADB B STB T 2 ADB B ADB B ADB T 2 LDA PO MLY TCA ADB A DSZ Tl JMP F Il LDA SAR ADA SAM ADB AR 2 + 1 12 M 5 + 2 M 1 LDA AR 2 RLA + 2 TCB RET I ADDRESS OF AR 2 MOVE NUMBER TO AR 2 INITIALIZE RESULT LOOK AT EXPONENT 2 X 4 X 8 X X SHIFT AR 2 LEFT BUILD NEGATIVE NUMBER ADD IN NEXT DIGIT ROUND TEST MANTISSA SIGN COMPLEMENT IF NECESSARY 422 Page 352 422 423 Page 353 00752000 00753000 00754000 00755000 00703 00756000 00704 00757000 00705 00758000 00706 00759000 00707 00761000 00762000 00763000 00764000 00710 00765000 00711 00766000 00712 00767000 00713 00769000 00770000 00771000 00772000 00714 00773000 00774000 00715 00775000 00716 00776000 00717 00777000 00720 00778000 00721 00779000 00780000 00722 00781000 00723 00782000 00783000 00724 00784000 00725 00785000 00726 00786000 00727 1,568,094 BASE-PAGE SUBROUTINES 000177 030011 000143 030005 170201 140450 000214 130313 170201 000721 000177 064720 000143 031256 170201 140404 031461 005315 076474 140404 030064 BEEP BEEP 423 SUB ROUTINE LDAPO STA PA LDA P 4 STA R 5 RET I CLEAR I/O BUFFER AND PUT 'LAZY-T' AT LEFT END EOLIO JSM ACLBI,I LDA EOLB STA AIBUF,I RET I MISCELLANY FOR JB ARET 1 DEF RETI CLMOD LDA PO JMP STMOD STELM LDA P 4 STMOD STA MODE RETI RET 1 ERLNF JSM AERRI,I ASC 1,31 SECCK LDB STYFG SZB RETI ERSEC JSM AERRI,I ASC 1,04 SET MODE = O SET MODE = 4 LINE NOT FOUND 00788000 00789000 00790000 00791000 00730 00792000 00731 00793000 00732 00794000 00795000 00733 00796000 00734 000731 140404 031071 140404 031462 SOME COMMON ERRORS AREPN DEF + 1 E 29 JSM AERRI,I ERROR, ROM MISSING AT EXECUTION TIME ASC 1,29 E 32 JSM AERRI,I ERROR, ILLEGAL DATA TYPE ASC 1,32 424 Page 354 00798000 00799000 00800000 00801000 00735 070430 00802000 00736 070000 00803000 00737 064747 00804000 00805000 00806000 00807000 00808000 00809000 00740 070430 00810000 00741 001255 00811000 00742 050001 00812000 00743 064746 00813000 00814000 00815000 00816000 00817000 00818000 00744 070430 00819000 00745 061255 00820000 00746 031255 00821000 00747 070420 00822000 00750 170201 424 1,568,094 BASE-PAGE SUBROUTINES SUBROUTINE TO DO AN EXE A EXEXA DIR PREVENT INTERRUPT INTERFERENCE EXE A JMP SXCMM+ 3 SUBROUTINE TO CLEAR BITS IN XCOMM ON ENTRY: B = MASK TO CLEAR BITS CLXCM DIR PREVENT INTERRUPT INTERFERENCE LDA XCOMM AND B JMP SXCMM+ 2 SUBROUTINE TO SET BITS IN XCOMM ON ENTRY: A = BITS TO BE INCLUDED SXCMM DIR PREVENT INTERRUPT INTERFERENCE IOR XCOMM STA XCOMM EIR RET I SUBROUTINI ON ENTRY: l ON EXIT TO ON EXIT TO NGET LDA SAP SAR CPA JMP RET LDB JSM RET E TO GET NUMERIC PARAMETER FA Pl POINTS TO PARAMETER P+l: A = CLASS OF NON-NUMERIC ITEM ENCOUNTERED P+ 2: B POINTS TO VALUE FAPI,I GET 'WHAT' WORD +I,C 12 GET CLASS Pl NUMERIC? + 2 YES I NO FAP I ABSAD+ 1 I 00824000 00825000 00826000 00827000 00828000 00829000 00830000 00831000 00832000 00833000 00834000 00835000 00836000 00837000 00838000 00839000 00840000 00841000 00842000 00751 00752 00753 00754 00755 00756 00757 00760 00761 101272 172201 170513 010254 064757 170201 005272 040616 170202 425 1,568,094 BASE-PAGE SUBROUTINES INTEGER DIVIDE W F C.

ON ENTRY:

BA HAS DIVIDEND JSM IDIV DEF DIVISOR ON EXIT:

A = QUOTIENT B = REMAINDER O = OVERFLOW STATUS TEMPORARIES USED: TI, T 2, T 3, T 4, T 5, T 6 00762 004177 SDIV 00763 035711 IDIV 00764 004146 00765 035712 00766 035713 00767 004160 00770 035714 00771 144003 00772 104003 00773 104001 00774 104001 00775 176003 00776 045712 00777 174040 01000 035715 01001 174040 01002 035716 01003 005711 01004 176010 01005 045712 01006 066007 01007 170040 01010 174140 01011 072002 01012 024254 01013 045713 01014 025716 DIV O 01015 176034 LDB STB LDB STB STB LDB STB ISZ LDB LDB LDB SBP ISZ TCB STB TCB STB LDB SBP ISZ JMP TCA CMB RZA ADB ISZ ADB SBP PO Tl M 2 T 2 T 3 M 16 T 4 R,I R,I B,I B,I + 3 T 2 T 5 T 6 TI DIV O T 2 + 1 + 2 Pl T 3 T 6 OVFL ALTERNATE ENTRY FOR POSITIVE SINGLE-PRECISION SAVE HI DIVIDEND INITIALIZE QUOTIENT SIGN INITIALIZE REMAINDER SIGN INITIALIZE LOOP COUNTER ADDRESS OF DIVISOR ADDRESS ADDRESS OF DIVISOR GET ABS OF DIVISOR SAVE + DIVISOR SAVE DIVISOR TEST DIVIDEND SIGN COMPLEMENT DIVIDEND (ALLOW FOR SKIP) SET REMAINDER SIGN ADD -DIVISOR SKIP IF OVERFLOW 425 Page 355 00844000 00845000 00846000 00847000 00848000 00849000 00850000 00851000 00852000 00853000 00854000 00855000 00856000 00857000 00858000 00859000 00860000 00861000 00862000 00863000 00864000 00865000 00866000 00867000 00868000 00869000 00870000 00871000 00872000 00873000 00874000 00875000 00876000 00877000 00878000 00879000 00880000 00881000 00882000 00883000 00884000 00885000 00886000 0088700 00888000 00889000 00890000 00891000 1,568,094 BASE-PAGE SUBROUTINES MAIN DIVIDE LOOP 01016 174600 DIVI 01017 172002 01020 024254 01021 170600 01022 025715 01023 066032 01024 073072 DIV 2 01025 174600 01026 172002 01027 024254 01030 170600 01031 025716 01032 176402 DIV 3 01033 060254 01034 045714 01035 066024 01036 176002 01037 025715 01040 045712 01041 066050 01042 170040 01043 173201 01044 045713 01045 170201 01046 174040 01047 170201 DIV 4 01050 172073 DIV 5 01051 173301 OVFL 01052 170201 SBL I SAP + 2 ADB Pl SAL I ADB T 5 JMP DIV 3 SLA DIV 1 SBL 1 SAP + 2 ADB Pl SAL 1 ADB T 6 SBM + 2 IOR Pl ISZ T 4 JMP DIV 2 SBP + 2 ADB T 5 ISZ T 2 JMP DIV 5 TCA SOC + 1 I,C ISZ T 3 RET 1 TCB RET 1 SAP DIV 4 SOC +I,C RET I SHIFT LEFT ADD + DIVISOR SHIFT LEFT ADD DIVISOR INCREMENT LOOP COUNTER AND TEST CORRECT NEGATIVE REMAINDER CORRECT QUOTIENT SIGN ALL OK RETURN POSITIVE REMAINDER RETURN NEGATIVE REMAINDER OVERFLOW, SET O-REGISTER Page 356 00893000 00894000 00895000 00896000 00897000 00898000 00899000 00900000 00901000 00902000 00903000 00904000 00905000 00906000 00907000 00908000 00909000 00910000 00911000 00912000 00913000 00914000 00915000 00916000 00917000 00918000 00919000 00920000 00921000 00922000 00923000 00924000 00925000 00926000 00927000 00928000 00929000 00930000 426 426 1,568,094 BASE-PAGE SUBROUTINES SUBROUTINE TO BUMP PARAMETER POINTER ON ENTRY: A = ±COUNT ON EXIT TO P+ 1: NO MORE PARAMETERS ON EXIT TO P+ 2: FA Pl = NEXT PARAMETER ADDRESS TEMPORARIES USED: TI, T 2 072415 BUMP 031711 172014 005272 100001 BUI 170603 172012 000001 020254 124000 045711 066057 01067 035272 01070 170202 SZA STA SAP LDB LDA SAL SAP LDA ADA ADB ISZ JMP STB BU 2 RET BU 3 LDB CPB BU 4 RET STB LDA ADA ADB CPB JMP JMP LDB STB DSZ JMP BU 2 Tl BU 3 FAPI 1 B,I 4 BU 4 B Pl A,I Tl BUI FAPI 1 A Pl FA Pl T 2 B Pl A,I FAPI 1 + 2 BU 5 T 2 FA Pl Tl BU 3 427 SKIP IF NOTHING TO DO WHICH WAY? MOVE TO LEFT IFLOOK AT PARAMETER LINK BIT KEEP ON RETURN MOVE TO RIGHT IF + RETURN SAVE PREVIOUS LOCATION MOVE FAPI 1 ONE POSITION KEEP ON RET 2 RETURN 01053 01054 01055 01056 01057 01060 01061 01062 01063 01064 01065 01066 427 Page 357 00932000 00933000 00934000 00935000 00936000 00937000 00938000 00939000 00940000 00941000 00942000 00943000 00944000 00945000 00946000 00947000 00948000 00949000 00950000 00951000 00952000 00953000 00954000 00955000 00956000 00957000 00958000 00959000 00960000 00961000 00962000 00963000 00964000 00965000 00966000 00967000 00968000 00969000 00970000 00971000 00972000 00973000 00974000 00975000 00976000 00977000 005263 015272 170201 01071 01072 01073 01074 01075 01076 01077 01100 01101 01102 01103 01104 01105 01106 035712 BU 000001 020254 124000 015272 066103 066074 005712 035272 055711 066071 01107 170202 1,568,094 BASE-PAGE SUBROUTINES 00979000 00980000 SUBR( 00981000 00982000 ON EX 00983000 00984000 FA 00985000 00986000 TEMP' 00987000 00988000 01110 000177 COUNT 00989000 01111 031711 00990000 01112 031712 00991000 01113 005263 00992000 01114 100001 C Ol 00993000 01115 170600 00994000 01116 172402 00995000 01117 045711 00996000 01120 045712 00997000 01121 170602 00998000 01122 172005 00999000 01123 000001 01000000 01124 020254 01001000 01125 124000 01002000 01126 066114 01003000 01004000 01127 035272 C 02 01005000 01130 001711 01006000 01131 005712 01007000 01132 170201 OUTINE TO COUNT PARAMETERS ON STACK IT: A = # OF NUMERIC PARAMETERS B = # OF PARAMETERS A Pl = LOCATION OF LEFTMOST PARAMETER DORARIES USED: TI, T 2 LDA STA STA LDB LDA SAL SAM ISZ ISZ SAL SAP LDA ADA ADB JMP STB LDA LDB RET PO Tl T 2 A Pl B,I 1 + 2 TI T 2 3 C 02 B Pl A,I C Ol FAP 1 Tl T 2 INITIALIZE A COUNT INITIALIZE B COUNT GET "WHAT" WORD LOOK AT CLASS SKIP IF NON-NUMERIC LOOK AT PARAMETER LINK BIT MORE PARAMETERS FOLLOW INITIALIZE POINTER RETURN Page 358 428 428 429 1,568,094 BASE-PAGE SUBROUTINES 01133 040615 01134 031263 01135 101276 01136 050221 01137 010175 01140 170201 01141 064733 01142 042133 01143 040643 01144 173402 01145 170201 01146 140404 01147 030461 01150 042142 01151 176003 01152 140404 01153 030467 01154 174040 01155 040633 01156 164365 01157 GET NUMERIC OPERAND ADDRESS ON EXIT: B = OPERAND ADDRESS A Pl = UPDATED GETAD JSM ABSAD GET OPERAND ABSOLUTE ADDRESS STA A Pl UPDATE A Pl LDA SAVEB,I THE'WHAT'WORD AND B 70 K CPA B 10 K RET I RETURN IF NUMERIC JMP E 32 GET INTEGER PARAMETER ON EXIT: B = INTEGER VALUE GETIN JSM GETAD GET OPERAND ADDRESS JSM FIXPT-1 CONVERT TO INTEGER SOS + 2 RET 1 EI 1 JSM AERRI,I ERROR, INTEGER OUT OF RANGE ASC 1,11 WAIT EXECUTION XWAIT JSM GETIN GET INTEGER PARAMETER SBP + 3 E 17 A JSM AERRI,I ERROR, ILLEGAL WAIT PARAMETER ASC 1,17 TCB JSM DELAY GO DELAY JMP AINTX,I BSS 1 RESERVED FOR OK-PAGE CHECKSUM LST 429 Page 359 01009000 01010000 01011000 01012000 01013000 01014000 01015000 01016000 01017000 01018000 01019000 01020000 01021000 01022000 01023000 01025000 01026000 01027000 01028000 01029000 01030000 01031000 01032000 01033000 01034000 01035000 01036000 91038000 01039000 01040000 01041000 01042000 01043000 01044000 01045000 01046000 01047000 01048000 01050000 01051000 430 1,568,094 MATH OPTION BLOCK A: OVERHEAD FULL PRECISION NUMBER: INTERNAL FORMAT EEEE EEEE EEXX XXXS 10 BIT 2 'S COMP EXP, 5 DON'T CARE BITS MANTISSA SIGN ( 0 =+ 1 =-) EXP RANGE =-511 TO + 511 Dl D 2 D 3 D 4 BCD DIGITS I 1-4 D 6 D 7 D 8 BCD DIGITS 5-8 D 12 BCD DIGITS 9-12 D 9 D 10 Dll EQUATES OPIE EQU O Pl OPIMI EQU OPI+I OP 2 M 1 EQU OP 2 + 1 RESE EQU RES FULL PRECISION RESULT REGISTER RESMI EQU RES+I RESM 3 EQU RES+ 3 ARIA EQU ADRI ADDRESS OFARI ARIE EQU ARI EXPONENT WORD OF ARI AR 2 A EQU ADR 2 ADDRESS OF AR 2 AR 2 E EQU AR 2 EXPONENT WORD OF AR 2 AR 2 M 1 EQU AR 2 E+ 1 1STMANTISSAWORDOFAR 2 AR 2 M 2 EQU AR 2 E+ 2 2ND MANTISSA WORD OF AR 2 AR 2 M 3 EQU AR 2 E+ 3 3RD MANTISSA WORD OF AR 2 BCD 1 EQU Bl OK BCD 1000 MT 1 EQU MRWI+ 4 DPMPY TI THRU T 13 ARE USED EXCLUSIVELY FOR THE CORDIC DIGIT STACK EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU ATMP T 14 TIS T 16 T 17 T 18 T 19 T 20 T 21 T 22 T 23 T 24 T 25 EQU STEAL ADDRESS OF THE TOP OF THE DIGIT STACK (T 1) Q(J)'S POINTER TO THE CORDIC DIGIT STACK TEMP USED ONLY TO PRESERVE C DURING STMT EXECUTION TEMP USED ONLY TO PRESERVE THE USER'S FLAG WORD SHIFT FACTOR FOR Y IN PH 2 AND PH 4 INCREMENT/DECREMENT FOR SHIFT POINTS TO ALFAS, BETAS, CONVERSION CONSTANTS, (CSV) USED TO HOLD THE EXPONENT VALUE OF THE ARGUMENT USED TO HOLD THE MANTISSA SIGN OF THE ARGUMENT USED TO SPECIFY THE OCTANT OF THE TANGENT ARGUMENTS.

GENERAL PURPOSE COUNTER COUNTER USED MAINLY FOR LOOPING GENERAL TEMPORARY FOR SECONDARY FUNCTIONS STOLEN RWM WORD DEDICATED TO MOB(A) AT 24 K 077042 UNITS D 5 430 Page 360 01238000 01239000 01240000 01241000 01242000 01243000 01244000 01245000 01246000 01247000 01248000 01249000 01250000 01251000 01252000 01253000 01254000 01255000 01256000 01257000 01258000 01259000 01260000 01261000 01262000 01263000 01264000 01265000 01266000 01267000 01268000 01269000 01270000 01271000 01272000 01273000 01274000 01275000 01276000 01277000 01278000 01279000 01280000 01281000 01282000 01283000 01284000 01285000 01286000 01287000 01288000 01289000 01290000 077742 077743 077747 077752 077753 077755 000345 077770 000127 000021 000022 000023 077762 000335 077726 077727 077730 077731 077732 077733 077734 077735 077736 077737 077740 077741 ADSTK DIGIT CTEMP UFLAG SHIFT DJ PTR EXP& 1 SIGN OCTNT CNTRI LOOP# FLAG$ 4 I 1,568,094 431 MATH OPTION BLOCK A: OVERHEAD 01292000 01293000 01294000 01295000 01296000 01297000 01298000 01299000 24000 01300000 01301000 24000 024237 01302000 24001 024176 01303000 24002 024247 01304000 24003 177777 01305000 24004 025304 01306000 24005 000017 01307000 01308000 24006 01310000 01311000 01312000 01313000 01314000 01315000 01316000 24007 024122 01317000 24010 024116 01318000 24011 024146 01319000 24012 024152 01320000 24013 042427 01321000 24014 024066 MAINFRAME OPTION BLOCK INTERFACE ORG 24000 B DEF EXECA DEF COMPA DEF RCOMA DEC -1 DEF INITA DEC 15 CHKSM BSS 1 CONSTANTS, LINKAGE as ABETA ALFAA BETAA ALN 10 JADD API/2 DEF DEF DEF DEF JSM DEF BETAS ALFA.

BETA.

LN 10 ADD CPI/2 ADDRESS OF THE EXECUTION ROUTINE ADDRESS OF THE COMPILE TABLE ADDRESS OF THE REVERSE COMPILE TABLE

NO COMMAND TABLE IN THIS BLOCK ADDRESS OF THE INITIALIZATION ROUTINE (EDEG) MATH OPTION BLOCK-A ROM ID = 15 CHECKSUM FOR ADDRESSES: 24000-25777 S JADD IS USED BY "PYTHA" Page 361 1,568,094 431 431 432 1,568 094 432 MATH OPTION BLOCK A: OVERHEAD 01323000 24015 024016 DEG 01324000 24016 062145 01325000 24017 063440 01326000 24020 000200 C 360 01327000 24021 033000 01328000 24022 000000 01329000 24023 000000 01330000 24024 000100 C 45 01331000 24025 042400 01332000 24026 000000 01333000 24027 000000 01334000 24030 177600 CR/D 01335000 24031 013505 01336000 24032 031222 01337000 24033 051000 01338000 01339000 CR/D 01340000 DON 01341000 01343000 24034 024035 GRAD 01344000 24035 063562 01345000 24036 060544 01346000 24037 000200 C 400 01347000 24040 040000 01348000 24041 000000 01349000 24042 000000 01350000 24043 000100 C 50 01351000 24044 050000 01352000 24045 000000 01353000 24046 000000 01354000 24047 177600 CR/G 01355000 24050 012560 01356000 24051 074543 01357000 24052 023200 01359000 24053 024054 RAD 01360000 24054 071141 01361000 24055 062040 01362000 24056 000000 C 2 Pl 01363000 24057 061203 01364000 24060 014123 01365000 24061 003440 01366000 24062 177700 CPI/4 01367000 24063 074123 01368000 24064 114026 01369000 24065 032000 01370000 24066 000000 CPI/2 01371000 24067 012560 01372000 24070 074543 01373000 24071 023200 DEF OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT + 1 062145 063440 033000 000000 000000 042400 000000 000000 177600 013505 031222 051000 DEGREE CONVERSION CONSTANTS LOWER CASE "DEG" E 2 + 3600 0000 0000 El+ 4500 0000 0000 E-2 + PI/180 9820 USED 180/Pl = 5 729 5779 5128 1745 FUDGED TO WORK WELL FOR ATN.

3292 5200 ) IS USED BY THE RANDOM NO GENERATOR AS A SEED.

OT MOVE IT WITHOUT CHANGING ITS ADDRESS ON THE 26 K PAGE.

DEF OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT DEF OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT + 1 063562 060544 040000 000000 000000 050000 000000 000000 177600 012560 074543 023200 + 1 071141 062040 000000 061203 014123 003440 177700 074123 114026 032000 000000 012560 074543 023200 GRADIAN CONVERSION CONSTANTS LOWER CASE "GRAD" E 2 + 4000 0000 0000 El+ 5000 0000 0000 E-2 + PI/200 9820 USED 200/Pl = 6 366 1977 2365 1570 FUDGED TO WORK WELL FOR ATN.

7963 2780 RADIAN CONVERSION CONSTANTS LOWER CASE "RAD" E O + 6283 1853 0720 CORRECT VALUE IS 0718 (OCT 003430) E-I+ 7853 9816 3400 CORRECT VALUE IS 3397 (OCT 031627) E O + THIS VALUE IS BASED ON THE FUDGED PI( 60) 1570 7963 2680 CORRECT VALUE IS 2679 (OCT 023171) Page 362 1,568,094 432 432 1,568,094 MATH OPTION BLOCK A: OVERHEAD ATN CONSTANTS 000000 ALFAS 003605 034601 061500 000000 004626 064145 022221 24102 000000 24103 004631 24104 113146 24105 064147 24106 000000 24107 004631 24110 114626 24111 063147 OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT 000000 004631 114631 113147 000000 ALFA.

004631 114631 114627 OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT 000000 003605 034601 061500 000000 004626 064145 022221 000000 004631 113146 064147 000000 004631 114626 063147 000000 004631 114631 113147 000000 004631 114631 114627 E O + 0785 3981 6340 E O + 0996 6865 2491 E O + 0999 9666 6867 E O + 0999 9996 6667 E O + 0999 9999 9667 ATN 1 ATN 1 ATN 01 ATN 001 ATN 0001 E O + ATN 00001 0999 9999 9997 Page 363 24072 24073 24074 24075 24076 24077 24100 24101 01375000 01376000 01377000 01378000 01379000 01380000 01381000 01382000 01383000 01384000 01385000 01386000 01387000 01388000 01389000 01390000 01391000 01392000 01393000 01394000 01395000 01396000 01397000 01398000 01399000 01400000 01401000 01402000 01403000 01404000 01405000 01406000 01407000 01408000 24112 24113 24114 24115 24116 24117 24120 24121 433 433 434 Page 364 01410000 01411000 01412000 01413000 01414000 01415000 24122 01416000 24123 01417000 24124 01418000 24125 01419000 01420000 24126 01421000 24127 01422000 24130 01423000 24131 01424000 01425000 24132 01426000 24133 01427000 24134 01428000 24135 01429000 01430000 24136 01431000 24137 01432000 24140 01433000 24141 01434000 01435000 24142 01436000 24143 01437000 24144 01438000 24145 01439000 01440000 24146 01441000 24147 01442000 24150 01443000 24151 01444000 01445000 24152 01446000 24153 01447000 24154 01448000 24155 MATH OPTION BLOCK A: OVERHEAD NATURAL LOG CONSTANTS 000000 BETAS OCT 003223 OCT 012161 OCT 100126 OCT 000000 OCT 004523 OCT 010027 OCT 114004 OCT 000000 OCT 004625 OCT 001460 OCT 102462 OCT 000000 OCT 004631 OCT 050003 OCT 031410 OCT 000000 OCT 004631 OCT 112400 OCT 001463 OCT 000000 BETA OCT 004631 OCT 114520 OCT 000003 OCT 000000 LN 10 OCT 021402 OCT 054120 OCT 111231 OCT 000000 003223 012161 100126 000000 004523 010027 114004 000000 004625 001460 102462 000000 004631 050003 031410 000000 004631 112400 001463 000000 004631 114520 000003 000000 021402 054120 111231 E O + LN 2 0693 1471 8056 E O + LN 1 1 0953 1017 9804 E O + LN 1 01 0995 0330 8532 E O + LN 1 001 0999 5003 3308 E O + LN 1 0001 0999 9500 0333 E O + LN 1 00001 0999 9950 0003 E O + LN 10 2302 5850 9299 9820 USED 9300 (OCT 111400) 1,568,094 434 1,568,094 Page 365 01450000 01451000 01452000 01453000 01454000 01455000 01456000 01457000 24156 01458000 24157 01459000 24160 01460000 24161 01461000 24162 01462000 24163 01463000 24164 01464000 24165 01465000 24166 01466000 24167 01467000 24170 01468000 24171 01469000 24172 01470000 24173 01471000 24174 01472000 24175 01473000 24176 01474000 24177 01475000 24200 01476000 24201 01477000 24202 01478000 24203 01479000 24204 01480000 24205 01481000 24206 01482000 24207 01483000 24210 01484000 24211 01485000 24212 01486000 24213 01487000 24214 01488000 24215 01489000 24216 01490000 24217 01491000 24220 01492000 24221 01493000 24222 01494000 24223 01495000 24224 01496000 24225 01497000 24226 01498000 24227 01499000 24230 01500000 24231 01501000 24232 01502000 24233 01503000 24234 01504000 24235 01505000 24236 MATH OPTION BLOCK A: OVERHEAD COMPILE TABLE

003027 003027 003027 003027 003027 003027 003011 004053 004053 004053 004053 004053 004053 004053 004053 004053 004053 072141 COMPA 067201 060564 067202 062570 070203 066156 102163 064556 102543 067563 103141 071556 103541 061563 104164 067136 104554 067547 105136 105543 071566 106165 067151 072163 106544 062547 107162 060544 107547 071141 062220 100000 OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC OCT DEC DEC OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT OCT 003027 003027 003027 003027 003027 003011 004053 004053 004053 004053 004053 004053 004053 004053 004053 004053 29793 28289 24948 28290 25976 28803 27758 -31629 26990 -31389 28531 -31135 29550 -30879 25459 -30604 67136 -30356 28519 105136 105543 071566 106165 067151 072163 106544 062547 107162 060544 107547 071141 062220 100000 I TKN 6 23 6 23 6 23 6 23 6 23 6 9 8 43 8 43 8 43 8 43 8 43 8 43 8 43 8 43 8 43 8 43 T A N ( 1) A T N ( 2) E X P ( 3) L N ( 4) S I N ( 5) C 0 S ( 6) A S N ( 7) A C S ( 8) T N A ( 9) L 0 G ( 10) A ( 1 I) C S V ( 12) U N I T S ( 13) D E G ( 14) R A D ( 15) G R A D ( 16) EOT MNEMONIC GRAD (END) RAD (END) DEG (END) UNITS (END) CSV (END) A (A) LOG (SQR) TNA (SQR) ACS (SQR) ASN (SQR) COS (SQR) SIN (SQR) LN (SQR) EXP (SQR) ATN (SQR) TAN (SQR) 435 435 MATH OPTION BLOCK A: OVERHEAD 01507000 01508000 01509000 01510000 MAIN 01511000 01512000 ON E? 01513000 01514000 01515000 01516000 24237 022757 EXECA 01517000 24240 100000 01518000 24241 004016 01519000 24242 035727 01520000 24243 140000 01521000 24244 001727 01522000 24245 030016 01523000 24246 164366 01525000 01526000 01527000 01528000 01529000 01530000 01531000 01532000 01533000 01534000 24247 01535000 24250 01536000 24251 01537000 24252 01538000 24253 01539000 24254 01540000 24255 01541000 24256 I EXECUTION ROUTINE NTRY: CONTAINS THE ROM'S INTERNAL CODE ADA LDA LDB STB JSM LDA STA JMP EXTBL ADD THE EXECUTION JUMP TABLE ADDRESS A,I A = ADDRESS OF THE STATEMENT'S EXECUTION ROUTINE.

C SAVE C IN A TEMPORARY DEDICATED TO ITS USE.

CTEMP A,I PERFORM THE STATEMENT EXECUTION

CTEMP RESTORE C C ARAP,I STACK RES ON THE EXEC STACK & RETURN TO INTERPRETER REVERSE COMPILE TABLE MNEMONIC (OPERATOR PRIORITY, CLASS) MNEMONIC (OPERATOR PRIORITY, CLASS) 161342 RCOMA 161342 161342 161342 151342 141401 000401 000401 OCT OCT OCT OCT OCT OCT OCT OCT 161342 161342 161342 161342 151342 141401 000401 000401 TAN EXP SIN ASN TNA A UNITS RAD ( 14,2) ( 14,2) ( 14,2) ( 14,2) ( 13,2) ( 12,3) ( 0,1) ( 0,1) ATN LN COS ACS LOG CSV DEG GRAD ( 14,2) ( 14,2) ( 14,2) ( 14,2) ( 14,2) ( 0,1) ( 0,1) ( 0,1) Page 366 4 N L^ ON W 1,568,094 MATH OPTION BLOCK A: EXECUTION 24257 24260 24261 24262 24263 24264 24265 24266 24267 24270 000177 031741 000177 031734 031735 042313 001742 073202 045735 031742 24271 000145 24272 031737 24273 005042 24274 024145 24275 035733 24276 000177 24277 031736 24300 035274 24301 000336 24302 031273 24303 042367 24304 140562 24305 014144 24306 067332 24307 000336 24310 005733 24311 031273 24312 035274 24313 000177 24314 140560 24315 001755 24316 050170 24317 031755 24320 042350 24321 001753 24322 170513 24323 031736 24324 001733 24325 042437 24326 042432 24327 042472 24330 005733 TAN EXECUTION ETAN LDA PO TANI 1 STA FLAGS SIN(FLAG$=AOP 1 I),COS(FLAG$=AONE), TAN(FLAG$= 0) LDA PO STA EXP&I STA SIGN JSM GETIA O Pl = ARG LDA OPIE SAVE THE ORIGINAL MANTISSA SIGN IN (SIGN) SLA + 2,C AND MAKE THE ARGUMENT POSITIVE ISZ SIGN STA OPIE PRE-SCALE THE ARGUMENT IN THE USER'S UNITS.

LDA P 2 SET UP CNTRI FOR TWO PASSES THROUGH THE LOOI STA CNTRI TO REDUCE THE ARGUMENT TO THE FIRST OCTAN 1 LDB UNITS ADB P 2 DETERMINE WHICH SET OF REDUCTION CONSTANTS TO USE TAN 2 STB PTR SAVE THE REDUCTION CONSTANT ADDRESS LDA PO STA OCTNT CLEAR OCTNT BEFORE REDUCING TO FIRST OCTANT TAN 2 A STB OPND 2 LDA AO Pl STA OPNDI JSM XFRRS FIX FOR BUG SHEET#349.

JSM ATSUI,I COMPARE O Pl (ARGUMENT) WITH THE REDUCTION CONSTAN CPB P 3 JMP TAN 2 B LDA AO Pl O Pl ≥ REDUCTION CONSTANT, KEEP REDUCINC LDB PTR STA OPNDI STB OPND 2 LDA PO JSM ADIV 2,I LDA RESM 3 FIRST PASS REDUCTION TO FULL CIRCLE AND M 256 ARG' = ARG UCV INT (ARG/UCV) STA RESM 3 JSM INRES SECOND PASS REDUCTION TO FIRST OCTAN 1 LDA RESM I ARG" = ARG' FOV INT (ARG/FOV) SAR 12 STA OCTNT LDA PTR JSM AXRES JSM OIMRS JSM RS O 1 OP = ARG' OR ARG" LDB PTR 437 Page 367 437 01543000 01544000 01545000 01546000 01547000 01548000 01549000 01550000 01551000 01552000 01553000 01554000 01555000 01556000 01557000 01558000 01559000 01560000 01561000 01562000 01563000 01564000 01565000 01566000 01567000 01568000 01569000 01570000 01571000 01572000 01573000 01574000 01575000 01576000 01577000 01578000 01579000 01580000 01581000 01582000 01583000 01584000 01585000 01586000 01587000 01588000 01589000 01590000 01591000 01592000 01593000 01594000 438 1,568,094 438 Page 367 Continued MATH OPTION BLOCK A: EXECUTION 01595000 24331 067300 01596000 24332 005733 TAN 2 B 01597000 24333 024143 01598000 24334 055737 JMP TAN 2 A LDB PTR ADB P 4 DSZ CNTRI GO BACK & COMPARE O Pl WITH REDUCTION CONSTANT AGAIN.

O Pl / REDUCTION CONSTANT, DON'T NEED TO REDUCE.

439 1,568,094 MATH OPTION BLOCK A: EXECUTION 24335 067275 JMP TAN 2 LOOP AGAIN IF THIS IS THE FIRST PASS.

CHECK FOR A PI/4 MULTIPLE INSIDE THE UNIT CIRCLE.

035733 001736 005743 076010 050144 TAN 2 C 010177 066355 010145 067471 043635 067457 STB LDA LDB RZB AND CPA JMP CPA JMP JSM JMP PTR OCTNT OPIMI IS THE PRE-SCALED ARGUMENT ZERO ? TAN 3 NO, CONTINUE P 3 YES, NOW DETERMINE THE CORRECT RESUL PO CLRES OCTANT = 0 OR 4: RESULT = O P 2 E 68 ? OCTANT = 2 OR 6: TRY TO GIVE ERROR 68 RES=I OCTANT = 1,3,5,7: RESULT = +/-1 +/-I TAN 14 FIND OUT AT TAN 14 WHETHER IT SHOULD BE + OR 1 0 FINALIZETHEARGUMENT FINALIZE THE ARGUMENT 24351 073006 TAN 3 24352 001733 24353 020150 24354 004336 24355 042434 24356 042472 SLA TAN 4 IFOCTANTIS EVENTHEN USE THE ARGUMENT LDA PTR WHICH IS IN THE FIRST OCTANT ADA M 4 LDB AO Pl JSM SUB OTHERWISE USE PI/4 -ARGUMENT JSM RS 01 CONVERT ARGUMENT TO RADIANS 24357 001733 TAN 4 24360 013014 01628000 24361 01629000 24362 01630000 24363 01631000 24364 01632000 24365 01633000 24366 01634000 24367 01635000 24370 01636000 24371 01637000 01638000 01639000 01640000 24372 01641000 24373 01642000 24374 01643000 24375 01644000 24376 01645000 24377 01646000 24400 01647000 24401 01648000 24402 067372 042457 001733 004336 042440 042455 001736 005753 076451 LDA PTR CPA API/2 IF CURRENT UNITS= RADIANS, NO CONVERSION NEEDED.

JMP TAN 5 SO SKIP THE CONVERSION.

JSM SFG 14 BUGSHEET#1788.

LDA PTR LDB AO Pl JSM MPY CONVERT TO RADIANS JSM RSTFL LDA OCTNT BUG SHEET #1528: THIS CHECKS FOR ZERO LDB RESM I AS A RESULT OF UNDERFLOW ON SZB TAN 2 C CONVERSION TO DEG & GRADS TO RADIANS START OF ACTUAL TANGENT COMPUTATION.

:, 042470 TAN 5 072004 000164 TAN 6 030020 067403 042404 TAN 7 072473 020073 TAN 8 004000 170405 020141 072402 172004 JSM LDA RZA LDA STA JMP JSM LDA SZA ADA LDB AAR ADA SZA SAP RS.A 2 AR 2 E TAN 7 M 64 AR 2 E TAN 8 RAR 21 AR 2 E TAN 6 P 64 A 6 P 6 TAN 9 TAN 10 AR 2 = RES IS THE EXPONENT = O ? YES, SET THE EXPONENT TO-I RIGHT SHIFT AR 2 ONE DIGIT IF THE SHIFT ROUNDED AR 2 TO ONE SET THE EXP TO SAVE (EXP + 1) 24336 24337 24340 24341 24342 24343 24344 24345 24346 24347 24350 439 Page 368 01599000 01600000 01601000 01602000 01603000 01604000 01605000 01606000 01607000 01608000 01609000 01610000 01611000 01612000 01613000 01614000 01615000 01616000 01617000 01618000 01619000 01620000 01621000 01622000 01623000 01624000 Q 1625000 01626000 01627000 01649000 01650000 01651000 01652000 01653000 01654000 24403 24404 24405 24406 24407 24410 1,568,094 MATH OPTION BLOCK A: EXECUTION 01655000 01656000 01657000 01658000 01659000 01660000 01661000 01662000 24411 24412 24413 24414 24415 24416 24417 24420 01663000 24421 01664000 24422 01665000 24423 01666000 24424 01667000 24425 01668000 24426 01669000 24427 01670000 24430 01671000 24431 01672000 24432 01673000 24433 01674000 24434 01675000 24435 01676000 24436 01677000 24437 01678000 24440 01679000 24441 01680000 24442 01681000 24443 01682000 24444 01683000 24445 01684000 24446 01685000 24447 01686000 24450 01687000 24451 01688000 24452 01689000 24453 01690000 24454 01691000 24455 01692000 24456 01693000 24457 01694000 24460 01695000 24461 01696000 24462 01697000 24463 01698000 24464 01699000 24465 01700000 24466 01701000 24467 01702000 24470 042474 TAN 9 042512 067442 035734 TAN 10 031737 031740 170601 170040 023007 031733 042514 002722 030016 002521 030017 004146 055726 042543 042466 042700 042507 042464 042700 042504 001736 TANI l 170500 021736 073007 001734 170040 031734 000336 004337 067456 000337 TANI 2 004336 042443 TAN 13 001736 TAN 14 170500 073002 045735 001735 TAN 15 050254 061734 021752 031752 TAN 16 170201 JSM JSM JMP STB STA STA SAL TCA ADA STA JSM LDA STA LDA STA LDA LDB DSZ JSM JSM JSM JSM JSM JSM JSM LDA SAR ADA SLA LDA TCA STA LDA LDB JMP LDA LDB JSM LDA SAR SLA ISZ LDA AND IOR ADA STA RET RS.02 OPI=I TANI 1 EXP& 1 CNTR 1 SAVE THE COUNT FOR "PHASE I" LOOP# SAVE THE COUNT FOR "PHASE II" 2 COMPUTE THE ADDRESS OF THE FIRST TRIG CONSTANT TO USE ABETA PTR PH 1 CALL "PHASE I" CDC C CMY D P 10 M 2 DIGIT PH 2 CALL "PHASE II" 02.A 2 AR 2 = OP 2 PH 3 E GET EXPONENT FOR Z A 2.02 OP 2 = AR 2 01.A 2 AR 2 =O Pl PH 3 E A 2.O 1 O Pl = AR 2 OCTNT OCTNT< O > = OCTNT< I> IMPLIES OCTANTS 0, 3,4, or 7.

1 OCTNT TAN 12 EXP& 1 TAN = X/Y EXP& 1 AO Pl AOP 2 TAN 13 AOP 2 TAN = Y/X AO Pl DVD OCTNT OCTNT = 1 IMPLIES QUADRANTS II OR IV.

1 TAN 15 SIGN SIGN Pl EXP& 1 RESE RESE I 440 Page 369 440 441 1,568,094 MATH OPTION BLOCK A: EXECUTIONSIN, COS, OR TAN ARGUMENT LIES ON THE Y-AXIS.

005741 E 68 ? 076412 054003 014172 066355 RES= 0 043635 001736 170501 021735 050254 067467 24504 005735 E 68 24505 042373 24506 140546 24507 033070 LDB 57 B DSZ CPB JMP JSM LDA SAR ADA AND JMP FLAG$ E 68 R TAN BEING CALCULATED ? NO SIN OR COS RETURN TO EXECA, NOT AONE COS BEING CALCULATED? CLRES YES, COS( 90) = COS( 270) = O RES=I NO, SIN.

OCTNT 2 SIGN CALCULATE THE CORRECT SIGN FOR SIN.

Pl TAN 16 ERROR 68: TAN (NPI/2), N ODD, DEG, RAD, OR GRAD.

LDB JSM JSM ASC SIGN STMAX RES = +/-9 99999999999 E 511 ARERR,I 1,68 441 Page 370 01704000 01705000 01706000 01707000 01708000 01709000 0171000 01711000 01712000 01713000 01714000 01715000 01716000 01717000 01718000 01719000 01720000 01721000 01722000 01723000 01724000 24471 24472 24473 24474 24475 24476 24477 24500 24501 24502 24503 442 1 568 S / 09 ad, MATH OPTION BLOCK A: EXECUTION 01726000 01727000 01728000 01729000 01730000 01731000 01732000 01733000 24510 ATN EXECUTION 043512 EATN 043512 EATN 01734000 24511 066315 01736000 24512 01737000 24513 01738000 24514 01739000 24515 01740000 24516 01741000 24517 01742000 24520 01743000 24521 01744000 24522 01745000 24523 01746000 24524 01747000 24525 01748000 24526 01749000 24527 01750000 24530 01751000 24531 01752000 24532 01753000 24533 01754000 24534 01755000 24535 01756000 24536 01757000 24537 01758000 24540 01759000 24541 01760000 24542 01761000 24543 01762000 24544 01763000 24545 01764000 24546 01765000 24547 01766000 24550 01767000 24551 01768000 24552 01769000 24553 01770000 01771000 01772000 01773000 01774000 01775000 01776000 01777000 24554 24555 24556 24557 24560 24561 24562 24563 140552 ATN O 024254 100001 072460 101273 ATNI 031735 172431 005273 042226 000340 031273 101273 ATN 2 172423 001042 020141 054003 043630 001735 073007 001727 030016 074760 074760 010137 067544 170201 ATNRT 004147 140563 042504 000340 066440 170405 ATN 2.

031734 020142 172007 001273 042505 001742 050146 031742 067616 000335 ATN 3 01778000 24564 071614 01779000 24565 020133 JSM ATN O JMP CTOCU JSM ADB LDA SZA LDA STA SAM LDB JSM LDA STA LDA SAM LDA ADA DSZ JSM LDA SLA LDA STA WBC WBC CPA JMP RET LDB JSM JSM LDA JMP AAR STA ADA SAP LDA JSM LDA AND STA JMP LDA AGETI,I Pl Bl RES= 0 OPNOI,I SIGN ATN 2.

OPNDI ONE/B ARES OPND 1 OPND I,I ATN 2.

UNITS P 6 R ATN 7 SIGN ATNRT CTEMP C A,D A,D P 8 + 2 1 I M 3 AFTLP,I A 2.O 1 ARES MPY 6 EXP& 1 P 5 ATN 3 OPND 1 XFROI OPIE M 2 OPIE ATN 4 ADSTK CLR 13 ADA P 12 CALCULATE ATN IN RADIANS, LEVE ANSWER IN RES CONVERT TO CURRENT UNITS GET THE ARGUMENT IN FULL PRECISION IS THE ARGUMENT O ? YES, ATN O = 0.

SAVE THE EXPONENT WORD IF THE EXPONENT IS POSITIVE LET ARG = 1 /ARG UPDATE THE OPND 1 ADDRESS SAVE THE EXPONENT ARGUMENTS = + 1 OR-I EXACTLY ( 1/1 = 1) CANCEL RETURN FROM CALL TO ATN 0.

ACS ? YES.

IF THE EXPONENT IS LESS THAN -5, GO TO ATN 4.

*FIX FOR BUG SHEET # 572 O Pl = ABS(ARGUMENT) CLEAR THE DIGIT STACK (Q O O-Q I 2) TO ZERO INITIALIZE THE DIGIT STACK POINTER Page 371 442 1.568094 442 1,568 094 MATH OPTION BLOCK A: EXECUTION 01780000 24566 031726 01781000 24567 004132 01782000 24570 035740 01783000 24571 001273 01784000 24572 042510 01785000 24573 002521 01786000 24574 030016 01787000 24575 002722 01788000 24576 030017 01789000 24577 001734 01790000 24600 170600 01791000 24601 170040 01792000 24602 004145 01793000 24603 042543 01794000 24604 001734 01795000 24605 170040 01796000 24606 020140 01797000 24607 007010 01798000 24610 042635 01799000 24611 001734 01800000 24612 170605 01801000 24613 020020 01802000 24614 030020 01803000 24615 042504 01804000 24616 001735 ATN 4 01805000 24617 172410 01806000 24620 003014 01807000 24621 042434 JSUB 01808000 24622 001735 ATN 5 01809000 24623 050254 01810000 24624 061752 01811000 24625 031752 01812000 24626 170201 01813000 24627 000336 ATN 6 01814000 24630 042367 ATN 7 01815000 24631 067622 STA LDB STB LDA JSM LDA STA LDA STA LDA SAL TCA LDB JSM LDA TCA ADA LDB JSM LDA SAL ADA STA JSM LDA SAM LDA JSM LDA AND IOR STA RET LDA JSM JMP DIGIT P 13 LOOP# OPNDI XFRO 2 SET Y O = ARGUMENT CMY C CDC D EXP&I A=-2 EXP&I P 2 B= 2 PH 2 CALL "PHASE II" EXP& 1 P 7 ALFAA PH 3 CALL "PHASE III" EXP&I 6 AR 2 E AR 2 E A 2.O 1 OPI=AR 2 SIGN ATN 6 API/2 SUB SIGN Pl RESE RESE 1 AO Pl RES = OP 1 XFRRS ATN 5 443 Page 372 443 1,568,094 MATH OPTION BLOCK A: EXECUTION 24632 24633 24634 24635 24636 042313 001743 072003 000172 066367 444 EXP EXECUTION EEXP EXPO EX Pl EX Pl 24637 001742 EXP 2 24640 031735 24641 073201 24642 031742 24643 004177 24644 035734 24645 170405 24646 172007 24647 170040 24650 004000 24651 024255 24652 176063 24653 042464 24654 067710 24655 020150 EXP 3 24656 172411 24657 001735 01849000 24660 073404 EXP 4 01850000 24661 042372 E 76 01851000 24662 140546 01852000 24663 033466 01853000 24664 042355 E 77 01854000 24665 140546 01855000 24666 033467 01856000 01857000 PRE 01858000 01859000 24667 000336 EXP 5 01860000 24670 042145 01861000 24671 042350 01862000 24672 000340 01863000 24673 040644 01864000 24674 043750 01865000 24675 067657 01866000 24676 035734 01867000 24677 003012 01868000 24700 042437 01869000 24701 000336 01870000 24702 042433 01871000 24703 042470 01872000 24704 042422 JSM GETIA LDA OPIMI RZA EXP 2 LDA AONE JMP XFRRS AND EX Pl + I ARE LDA OPIE STA SIGN SLA + I,C STA OPIE LDB PO STB EXP&I AAR 6 SAP EXP 3 TCA LDB A ADB M 12 SBP JSM JMP ADA SAM LDA RLA JSM JSM ASC JSM JSM ASC ESCALE Al LDA JSM JSM LDA JSM JSM JMP STB LDA JSM LDA JSM JSM JSM O Pl = ARG IS THE ARGUMENT ZERO? YES, EXP( 0) = 1 ALSO USED AS "RES=I", SAVE EXPONENT AND MANTISSA SIGN CLEAR THE MANTISSA SIGN AND RESTORE IT.

CLEAR THE EXPONENT STORAGE WORD MAKE THE EXPONENT AN INTEGER IS THE EXPONENT NEGATIVE? YES EX Pl IF ABS (ARG) < 1 E-1 1, RETURN I AS THE RESULT O 1,A 2 AR 2 = O Pl EXP 6 M 4 IS THE ARGUMENT ≥ 10,000 ? EXP 5 NO, CONTINUE.

SIGN YES, OVERFLOW OR UNDERFLOW HAS OCCURRED.

E 77 GIVE THE PROPER DEFAULT VALUE.

STMAX-1 OVERFLOW: RES= 9 99999999999 E 511 ARERR,I 1,76 CLRES UNDERFLOW: RES= O ARERR,I 1,77 RGUMENT AO Pl LOG 2 INRES ARES FIXPT EXSUB EXP 4-1 EXP& 1 ALN 10 AXRES AOP 1 I AMRES RS.A 2 ZAR 2 TO THE RANGE ( 1, LN 10) RES =ARG/LNI O RES = INT (ARG/LN 10) CONVERT TO AN INTEGER FOR THE EXPONENT OF THE RESULT.

MAKE SURE IT IS A VALID EXPONENT.

P+ 1: EXPONENT OUT OF RANGE.

P+ 2: IN RANGE, USE LATER AS EXPONENT OF RESULT.

RES = LN 10 INT (ARG/LN 10) RES = ARG LN 10 INT (ARG/LN 10) AR 2 = RES IF THE FRACTIONAL PART OF THE POWER IS ZERO 444 Page 373 01817000 01818000 01819000 01820000 01821000 01822000 01823000 01824000 01825000 01826000 01827000 01828000 01829000 01830000 01831000 01832000 01833000 01834000 01835000 01836000 01837000 01838000 01839000 01840000 01841000 01842000 01843000 01844000 01845000 01846000 01847000 01848000 1,568,094 MATH OPTION BLOCK A: EXECUTION 01873000 24705 067710 01874000 01875000 01876000 01877000 01878000 01879000 01880000 01881000 01882000 01883000 01884000 01885000 01886000 01887000 01888000 01889000 01890000 01891000 01892000 01893000 01894000 01895000 01896000 01897000 01898000 01899000 01900000 01901000 01902000 01903000 01904000 01905000 01906000 01907000 01908000 01909000 01910000 24706 043635 24707 067741 JMP EXP 6 JSM RES=I JMP EXP 9 COMPUTE EXP ( 1, LN 10) ag 24710 004020 EXP 6 24711 176004 24712 174405 24713 174040 24714 24715 24716 24717 24720 24721 24722 24723 24724 24725 24726 24727 24730 24731 24732 24733 24734 24735 24736 24737 24740 24741 24742 24743 24744 24745 24746 24747 042405 003007 EXP 7 031733 000141 031737 042514 031737 004254 075541 EXP 8 131726 045726 055737 067725 000172 042477 000133 004257 055726 042705 042366 001734 EXP 9 031752 001735 073003 004340 042226 170201 EXPO 10 LDB SBP ABR TCB JSM LDA STA LDA STA JSM LDA STA LDB MLY STA ISZ DSZ JMP LDA JSM LDA LDB DSZ JSM JSM LDA STA LDA SLA LDB JSM RET AR 2 E EXP 7 RAR 2 B ABETA PTR P 6 CNTRI PHI P 7 CNTR 1 Pl DIGIT,I DIGIT CNTRI EXP 8 AONE XFRA 2 P 12 Ml DIGIT PH 4 A 2.RS EXP& 1 RESE SIGN EXPI O ARES ONE/B THEN SET RES=I AND CONTINUE AT EXP 9.

IF EXPONENT = 0, DON'T SHIFT IF EXPONENT < 0, RIGHT SHIFTEXPONENT DIGITS AND ROUND CALL "PHASE I" TRANSFER D 1-D 7 OF AR 2 to Q 6-Q 12 SHIFT OUT A DIGIT STORE IT IN THE NEXT QJ BUMP THE QJ POINTER MORE TO TRANSFER? YES.

NO, CONTINUE TO PREPARE FOR "PHASE IV" AR 2 = 1 TWOJ INITIAL VALUE DJ INITIAL VALUE CALL "PHASE IV" RES = AR 2 PUT THE PROPER EXPONENT ON IT RES = 1/RES 01912000 01913000 01914000 01915000 01916000 01917000 01918000 01919000 24750 01920000 24751 01921000 24752 01922000 24753 01923000 24754 01924000 24755 EXSUB: SUBROUTINE USED BY EXP AND TNA 000001 EXSUB 172402 170040 020042 172473 174605 LDA B SAM + 2 TCA ADA P 511 SAM EXP 10 SRL 6 01925000 24756 170202 ABS(B)> 511 ? INVALID EXPONENT, RETURN P+ 1.

VALID EXPONENT RANGE, POSITION B AS AN EXPONENT.

Page 374 445 445 RET 2 1,568,094 MATH OPTION BLOCK A: EXECUTION 01927000 01928000 01929000 01930000 01931000 01932000 01933000 01934000 01935000 01936000 01937000 01938000 01939000 LN EXECUTION 24757 24760 24761 24762 24763 24764 01940000 24765 01941000 24766 01942000 24767 01943000 24770 01944000 01945000 01946000 01947000 24771 01948000 24772 01949000 24773 01950000 24774 01951000 24775 01952000 24776 01953000 24777 01954000 25000 01955000 25001 01956000 25002 01957000 25003 01958000 25004 01959000 25005 01960000 25006 01961000 25007 01962000 25010 01963000 25011 01964000 25012 01965000 25013 01966000 25014 01967000 25015 01968000 25016 01969000 25017 01970000 25020 01971000 25021 01972000 01973000 01974000 01975000 25022 140552 ELN 001273 LNO 042477 073203 042022 031734 LN 1 000021 072005 JSM LDA JSM LDA SLA JSM LDA STA LDA RZA AGET 1,I OPND 1 XFRA 2 AR 2 E LN 1,C E 69 AR 2 E EXP& 1 AR 2 M I LN 2 FETCH THE ARGUMENT AR 2 = ARGUMENT IF THE ARGUMENT < 0, GIVE ERROR 69 TRY TO GIVE ERROR 69, DEFAULT VALUE IS LN(ABS(ARG)) SAVE THE EXPONENT WORD IN EXP&I IF THE ARGUMENT = 0, GIVE ERROR 70 ERROR 70: LN( 0) OR LOG( 0) 004254 E 70 042373 140546 033460 000335 LN 2 071614 020133 031726 000177 004254 042705 007011 042635 042504 005734 174405 024254 140563 003012 004127 042440 000340 004336 066434 LDB JSM JSM ASC LDA CLR ADA STA LDA LDB JSM LDA LDB JSM JSM LDB ABR ADB JSM LDA LDB JSM LDA LDB JMP Pl STMAX AREER,I 1,70 ADSTK 13 P 12 DIGIT PO Pl PH 4 P 7 BETAA PH 3 A 2.O 1 EXP& 1 6 Pl AFLIP,I ALN 10 AR 2 A MPY ARES AOP 1 I SUB LN( 0) OR LOG( 0) = 9 99999999999 E 511 ERROR 70: LN( 0) OR LOG( 0) CLEAR THE DIGIT STACK AND INITIALIZE THE DIGIT STACK POINTER CALL "PHASE IV" CALL "PHASE III" O Pl = AR 2 = LN(ARGUMENT MANTISSA) AR 2 = FLOATING POINT EQUIVALENT OF (EXP& 1 + 1) RES = (EXP&I + I) LN 10 RES = ((EXP&I + 1)LN( 10)LN(ARGUMENT MANTISSA) ERROR 69: LN OR LOG OF A NEGATIVE NUMBER 030020 E 69 01976000 25023 140546 01977000 25024 033071 STA AR 2 E JSM ARERR,I ASC 1,69 SET UP THE DEFAULT RESULT AS LN(ABS(ARG)) Page 375 446 446 447 Page 376 M} 01979000 01980000 01981000 01982000 COS 01983000 01984000 01985000 01986000 25025 000172 ECUS 01987000 25026 066030 01989000 01990000 01991000 01992000 SIN 01993000 01994000:

01995000 01996000 25027 000336 ESIN 01997000 25030 043260 SINI 01998000 25031 042457 01999000 25032 001741 02000000 25033 007013 02001000 25034 042323 02002000 25035 001752 02003000 25036 170405 02004000 25037 010177 02005000 25040 031755 02006000 25041 042455 02007000 25042 001753 02008000 25043 072413 02009000 25044 001736 02010000 25045 170500 02011000 25046 010177 02012000 25047 170201 02013000 25050 010144 02014000 25051 170201 02015000 25052 001752 02016000 25053 073302 02017000 25054 073201 02018000 25055 031752 02019000 25056 170201 SIN 2 1,568,094 ATH OPTION BLOCK A: EXECUTION 447 EXECUTION LDA AONE JMP SINI SET UP A FOR CALCULATION OF COSINE.

ENTER THE SINE ROUTINE EXECUTION LDA JSM JSM LDA LDB JSM LDA AAR CPA STA JSM LDA SZA LDA SAR CPA RET CPA RET LDA SLA SLA STA RET AO Pl TANI SFG 14 FLAGS JADD PYTHA RESE 6 PO RESM 3 RSTFL RESMI SIN 2 OCTNT 1 PO P 3 RESE + 2,S +I,C RESE SET UP A FOR CALCULATION OF SINE.

SAVE A IN A TEMPORARY FLAG AND CALCULATE THE TANGENT SAVE THE USER'S FLAGS AND SET FLAG 14 SIN = TAN / SQR ( 1 + TANTAN) COS = 1 /SQR ( 1 I + TANTAN) FIXED IN MOBA #119:

EXPONENT= O ? (IMPLIES RES= 1 OR RES=O) YES, FORCE THE LAST 4 DIGITS TO BE ZERO.

RESTORE THE USER'S FLAGS.

GET THE QUADRANT FROM THE OCTANT INFORMATION.

IF THE ARGUMENT WAS IN QUADRANT, I RETURN IF THE ARGUMENT WAS IN QUADRANT, IV, RETURN OTHERWISE THE ARGUMENT WAS IN QUADRANTS II OR III AND THE SIGN OF THE RESULT NEEDS TO BE CHANGED.

1,568,094 MATH OPTION BLOCK -A: EXECUTION 02021000 02022000 02023000 02024000 ACS 02025000 02026000 02027000 02028000 25057 042065 EACS 02029000 25060 003014 02030000 25061 042433 02031000 25062 066315 02033000 02034000 02035000 02036000 ASN 02037000 02038000 02039000 02040000 25063 042065 EASN 02041000 25064 066315 02042000 02043000 02044000 02045000 25065 25066 25067 02046000 25070 02047000 25071 02048000 25072 02049000 25073 02050000 25074 02051000 25075 042313 ASNI 042367 042457 000336 007621 042323 042455 042472 035273 EXECUTION JSM ASNI LDA AP 1/2 JSM AMRES JMP CTOCU CALCULATE RES = ASN (ARG) ACS= PI/2 ASN (ARG) CONVERT THE RESULT TO CURRENT UNITS EXECUTION JSM ASNI JMP CTOCU JSM JSM JSM LDA LDB JSM JSM JSM STB GETIA XFRRS SFG 14 AO Pl JSUB PYTHA RSTFL RS.O 1 OPND 1 02052000 25076 067513 CALCULATE RES = ASN (ARG) = ATN (ARG/SQR (I-ARGARG)) CONVERT THE RESULT TO CURRENT UNITS FETCH THE ARGUMENT RES = ARG SET FLAG 14 FOR POSSIBILE I/O IN PYTHA RES = ARG/SQR ( 1-ARGARG) RESTORE THE USER'S FLAGS O Pl = RES SET OPND 1 TO NEW ARGUMENT ADDRESS ENTER ATN ROUTINE JUST AFTER THE ARG HAS BEEN FETCHED Page 377 448 448 JMP ANT O + 1 449 Page 378 MA 02054000 02055000 02056000 02057000 TNA 02058000 02059000 02060000 02061000 25077 043635 ETNA 02062000 25100 042313 02063000 25101 040644 02064000 25102 042422 02065000 25103 066113 02066000 02067000 02068000 02069000 25104 173003 02070000 25105 101273 02071000 25106 067660 02072000 25107 043750 02073000 25110 066105 02074000 25111 035752 02075000 25112 170201 02076000 02077000 02078000 02079000 25113 001273 02080000 25114 007012 02081000 25115 042440 02082000 25116 042472 02083000 25117 067633 1,568,094 TH OPTION BLOCK A: EXECUTION 449 EXECUTION EXECUTION JSM JSM JSM JSM JMP COMPUTE SOC TNA 1 LDA JMP TNA 2 JSM JMP STB TNA 3 RET COMPUTE E TNA 4 LDA LDB JSM TNA 5 JSM JMP RES= 1 ASSUME THAT THE POWER IS AN INTEGER (SAVES WORDS) GETIA O Pl = ARG CONVERT THE ARG TO INTEGER FORMAT IN B. FIXPT ON RETURN: AR 2 = FRACTIONAL PART OFARG.

ZAR 2 WAS THERE A FRACTIONAL PART? TNA 4 YES, COMPUTE TNA (ARG) = EXP(ARGLN 10) TNA(INTEGER) OR IE-511 < ABS(ARG) < IEI I TNA 2 CHECK FOR OVERFLOW ON CONVERSION TO INTEGER.

OPNDI,I A = MANTISSA SIGN OF POWER.

EXP 4 GIVE APPROPRIATE RESULT.

EXSUB CHECK 8 FOR BEING A VALID EXPONENT.

TNA 1 P+ 1: OUT OF RANGE, GIVE PROPER DEFAULT.

RESE P+ 2: EXPONENT IN RANGE PUT IN ON XP(ARGLN 10) OPND 1 ALN 10 MPY RES RS.O 1 USE EXPO LET A MANTISSA OF 1 1 E-511 < ABS(ARG) < I El 1 = ARG LN 10 O Pl AS THE ARGUMENT FOR EXP.

EXPO FINISH THE TASK.

450 Page 379 02085000 02086000 02087000 02088000 02089000 02090000 02091000 02092000 25120 02093000 25121 02094000 25122 02095000 25123 02096000 25124 02097000 25125 02098000 25126 02099000 25127 02100000 25130 02101000 25131 02102000 25132 02103000 25133 02104000 25134 02105000 25135 02106000 25136 02107000 25137 02108000 25140 02109000 25141 02110000 25142 02111000 25143 02112000 25144 02113000 25145 02114000 25146 1,568,094 MATH OPTION BLOCK A: EXECUTION.

450 LOG EXECUTION 140552 ELOG 024254 100001 010177 067771 170040 020175 024254 160001 024254 160001 072010 105273 174405 140563 042366 101273 073051 066022 043760 LOGI 000340 007012 LOG 2 066443 JSM ADB LDA CPA JMP TCA ADA ADB IOR ADB IOR RZA LDB ABR JSM JSM LDA SLA JMP JSM LDA LDB JMP AGET 1,I Pl B,I PO E 70 BCD 1 Pl B,I Pl B,I LOG 1 OPND 1,I 6 AFLTP,I A 2.RS OPNDI,I TNA 3 E 69 LN O ARES ALN 10 DVD FETCH THE ARGUMENT IF THE ARGUMENT IS ZERO, GIVE ERROR 70.

BUG SHEET #1787 (LOG( 0) =-4 34 E 511) IS THE MANTISSA EXACTLY 1 ? YES, RETURN THE ARGUMENT'S EXPONENT AS THE RESULT CONVERT THE EXP TO A FLOATING POINT NUMBER IN AR 2 RES = AR 2 WAS THE ARGUMENT < O ? YES, TRY TO GIVE AN ERROR 69 CALCULATE LN(ARG) LOG(ARG) = LN(ARG) / LN( 10) LET DVD FINISH THE TASK.

451 Page 380 02116000 02117000 02118000 02119000 02120000 02121000 02122000 02123000 02124000 02125000 0212600 02127000 02128000 02129000 25147 02130000 25150 02131000 25151 02132000 25152 02133000 25153 02134000 25154 02135000 25155 02136000 25156 02137000 25157 02138000 25160 02139000 25161 02140000 25162 02141000 25163 02142000 25164 02143000 25165 02144000 25166 02145000 25167 02146000 02147000 25170 02148000 25171 02149000 25172 02150000 25173 02151000 25174 02152000 25175 02153000 25176 02154000 25177 02155000 25200 02156000 25201 02157000 25202 02158000 25203 02159000 25204 02160000 25205 02161000 25206 02162000 25207 02163000 25210 02164000 25211 02165000 25212 02166000 25213 02167000 25214 02168000 25215 1,568,094 MATH OPTION BLOCK A: EXECUTION 451 A EXECUTION A EXECUTION s s 000177 EA 031741 140553 001274 031736 001273 042505 035273 001743 072010 105274 077002 067661 045274 Al 111274 066750 066355 000172 A 2 042510 001274 040644 173402 042422 066234 035741 176002 174040 035736 077005 A 3 000336 004337 042440 042474 001736 A 4 170500 031736 072407 000336 004336 THE BASIC STANDARD (DOC NO X 3 J 2/74) HAS RESOLVED: OAO = 1 THE 9820/21 RETURNS 0 THE 9830 GIVES ERROR 53 THIS ROUTINE RETURNS 1 AS ITS DEFAULT VALUE AFTER TRYING TO GIVE ERROR 73.

LDA STA JSM LDA STA LDA JSM STB LDA RZA LDB SLB JMP ISZ CPA JMP JMP LDA JSM LDA JSM SOS JSM JMP STB SBP TCB STB SLB LDA LDB JSM JSM LDA SAR STA SZA LDA LDB PO FLAG$ CLEAR THE RESULT MANTISSA SIGN TEMPORARY.

AGET 2,I FETCH THE BASE AND POWER OPND 2 OCTNT SAVE OPND 2 DURING LN O OPND 1 XFROI O Pl = BASE OPND 1 OPNDI = AO Pl OPIMI IS THE BASE ZERO ? A 2 NO, CONTINUE OPND 2,I YES, CHECK THE MANTISSA SIGN OF THE POWER.

< 1 E 76 POWER < 0, ERROR 76: DEFAULT = + 9.99999999999 E 511 OPND 2 OPND 2,I E 73 POWER= 0, OAO IS AN ERROR AS OF 7/28/75, CHECK FLG 14.

CLRES POWER > 0; RETURN 0 AONE OP 2 = 1, OPI=BASE (FROM ABOVE) XFRO 2 OPND 2 FIXPT B = POWER + 2 INTEGER OVERFLOW, USE EXP (POWERLN(BASE)) ZAR 2 IS THE POWER AN INTEGER NUMBER? A 6 NO, THERE IS A FRAC PART, USE EXP (POWERLN(BASE) FLAG$ YES, IT IS AN INTEGER SAVE IT IN FLAG$ UNTIL LATER + 2 (THIS PIECE HAS BEEN TESTED FOR POWER = -32768) l.999 A(-32768) = 1/(( 999 A 16384)A 2)1 OCTNT OCTNT = ABS(POWER) A 4 IF BIT N IS ONE MULTIPLY THE AO Pl ACCUMULATOR (OP 2) BY BASEA( 2 AN).

AOP 2 MPY RS.02 OCTNT SHIFT THE POWER RIGHT TO THE NEXT 1 BIT POSITION AND EXIT THE LOOP IF NO BITS REMAIN SET OCTNT A 5 OTHERWISE, AO Pl UPDATE THE BASE REGISTER.

AO Pl O Pl = O Pl O Pl 1,568,094 Page 380 Continued MATH OPTION BLOCK A: EXECUTION 02169000 25216 042440 02170000 25217 042472 02171000 25220 005736 JSM MPY JSM RS 01 LDB OCTNT RECALL THE POWER AND KEEP LOOPING.

Page 381 02172000 02173000 02174000 02175000 02176000 02177000 02178000 02179000 MATH OPTION BLOCK A: EXECUTION 25221 25222 25223 25224 25225 25226 25227 25230 02180000 25231 02181000 25232 02182000 25233 02183000 02184000 02185000 02186000 25234 02187000 25235 02188000 25236 02189000 25237 066203 000337 A 5 042367 001741 172033 100001 ONE/B 050164 010263 067661 000172 066443 JMP LDA JSM LDA SAP LDA AND CPA JMP LDA JMP A 3 AOP 2 XFRRS FLAGS ARET B,I M 64 FLAG E 76 AONE DVD RES = OP 2 IF THE ORIGINAL POWER WAS POSITIVE, RES CONTAINS THE CORRECT ANSWER.

OTHERWISE RETURN I/RES AS THE RESULT IF THE DIVISOR HAS AN EXPONENT OF -512 IT WOULD UNDERUNDERFLOW TO ZERO, SO 1/0 GENERATES ERROR 76 WITH A DEFAULT OF + 9 99999999999 E 511.

IF NOT, RES = I/ CALCULATE EXP(POWERLN(BASE)) 005742 A 6 077211 035742 001274 02190000 25240 040644 02191000 25241 000001 02192000 25242 050254 02193000 25243 031741 02194000 25244 042422 02195000 25245 042753 02196000 25246 043760 A 7 02197000 02198000 02199000 02200000 02201000 02202000 02203000 02204000 02205000 02206000 02207000 02208000 02209000 02210000 02211000 02212000 02214000 LDB SLB STB LDA OPIE A 7,C OPIE OPND 2 JSM FIXPT LDA B AND Pl STA FLAG$ -S JSM ZAR 2 JSM E 72 JSM LN O IS THE BASE POSITIVE? NO, MAKE THE BASE POSITIVE AND MAKE SURE THE POWER IS AN INTEGER B=INT(POWER), PARITY ONLY, AR 2 =FRAC (POWER) IF THE POWER WAS ODD, THE FINAL RESULT WILL BE NEGATIVE (IF ERROR 72 DOESN'T OCCUR) FLAGS CONTAINS THE PROPER MANTISSA SIGN FOR THE RESULT.

IS AR 2 = O ? NO, ISSUE AN ERROR MESSAGE IF FLAG 14 = 0 YES, (RET 2 FROM ZAR 2), BASE > 0, RES = LN (BASE) BUG SHEET #1758: (TNA(-200))A(TNA 51 O) GIVES ERROR 76, OVERFLOW, BECAUSE POWERLN 10 OVERFLOWS HERE COULD USE SFGI 4 & RSTFL AROUND THE TO IGNORE THE OVERFLOW BUT WE DECIDED NOT TO FIX IT SO CLOSE TO RELEASE.

25247 25250 25251 25252 25253 25254 25255 25256 25257 25260 001736 042437 042116 001753 010177 066355 001752 061741 031752 170201 ARET 25261 00000 02215000 25262 00000 LDA JSM JSM LDA CPA JMP LDA IOR STA RET REP OCT OCTNT AXRES TNA 5 RESM I PO CLRES RESE FLAGS RESE 1 2 OCT 2 RECALL OPND 2.

RES = POWER LN (BASE) IF THE MANTISSA IS ZERO DON'T MAKE IT NEGATIVE.

BUG SHEET #1775 RES = O PUT THE PROPER SIGN ON THE RESULT.

CORRECTIONS.

CORRECTIONS.

452 452 453 1,568,094 MATH OPTION BLOCK A: EXECUTION CSV EXECUTION CLEAR ALL ALLOCATED SIMPLE VARIABLES 02222000 02223000 02224000 25263 000276 ECSV 02225000 25264 031733 02226000 25265 000122 02227000 25266 031737 02228000 25267 101733 CSVI 02229000 25270 072402 02230000 25271 071603 02231000 25272 045733 CSV 2 02232000 25273 055737 02233000 25274 066267 02234000 25275 170201 02236000 02237000 02238000 02239000 UNITS 02240000 02241000 02242000 02243000 25276 140450 EUNIT 02244000 25277 001042 02245000 25300 004313 02246000 25301 071401 02247000 25302 140433 02248000 25303 164436 02250000 02251000 02252000 02253000 DEG, I 02254000 02255000 02256000 02257000 25304 003015 EDEG 02258000 25305 066311 02259000 25306 003053 ERAD 02260000 25307 066311 02261000 25310 003034 EGRAD 02262000 25311 031042 GRAD 1 02263000 25312 170201 LDA STA LDA STA LDA SZA CLR ISZ DSZ JMP RET ADVTB PTR P 26 CNTR 1 PTR,I CSV 2 4 PTR CNTR 1 CSV 1 PTR = ADDRESS OF THE SIMPLE VARIABLE TABLE CNTR 1 = 26 (LENGTH OF THE SIMPLE VARIABLE TABLE) A = ADDRESS OF THE NEXT SIMPLE VARIABLE IF A = 0; THE VARIABLE IS NOT ALLOCATED IT IS ALLOCATED SO CLEAR IT BUMP THE SIMPLE VARIABLE TABLE POINTER ANOTHER VARIABLE TO BE PROCESSED? YES NO, RETURN EXECUTIO EXECUTION A JSM LDA LDB XFR JSM JMP ACLBI,I UNITS AIBUF 2 ALDSP,I AEPON,I CLEAR THE I/O BUFFER TO BLANKS TRANSFER THE CURRENT UNITS MESSAGE TO THE I/O BUFFER DISPLAY THE I/O BUFFER.

CHECK FOR PRINT-ALL IMPLIED RETURN.

A RAD, GRAD EXECUTION A LDA DEG JMP GRAD 1 LDA RAD JMP GRADI LDA GRAD STA UNITS RET 1 SET DEGREES (ALSO USED FOR INITIALIZATION) SET RADIANS SET GRADS AS THE CURRENT UNITS AND RETURN WITHOUT DISPLAYING CURRENT UNITS.

453 Page 382 02217000 02218000 02219000 02220000 02221000 454 1,6 9 454 MATH OPTION BLOCK A: UTILITY ROUTINES GETIA: THIS SUBROUTINE SAVES 4-6 WORDS EXIT CONDITIONS:

1 O Pl =ARGUMENT A = OPND 1 B = AO Pl 25313 140552 GETIA 25314 066505 02280000 02281000 02282000 02283000 02284000 02285000 02286000 02287000 02288000 02289000 02290000 02291000 02292000 02293000 25315 02294000 25316 02295000 25317 02296000 25320 02297000 25321 02298000 25322 JSM AGETI,I FETCH THE ARGUMENT JMP XFRO 1 O Pl =ARGUMENT CTOCU CONVERT RES TO CURRENT UNITS ENTRY: RES IS IN RADIANS EXIT: RES IS IN CURRENT UNITS THIS IS A THIRD LEVEL SUBROUTINE EXTERNALS: DVD 005042 CTOCU 017053 170201 000340 024135 066443 LDB CPB RET LDA ADB JMP UNITS RAD ARES P O lo DVD IF CURRENT UNITS = RADIANS, NO CONVERSION NEEDED SO SKIP THE CONVERSION Page 383 02265000 02266000 02267000 02268000 02269000 02270000 02271000 02272000 02273000 02274000 02275000 02276000 02277000 02278000 454 1,568094 454 1,568,094 MATH OPTION BLOCK A: UTILITY ROUTINES PYTHA RES = ((RES) OR ( 1)) / SQR( 1 +/ RESRES) ENTRY: RES = ARGUMENT SIN:

COS:

ASN:

ACS:

rs A=AO Pl B=JADD A=AONE B=JADD A=AO Pl -B=JSUB A=AO Pl B=JSUB THIS IS A THIRD LEVEL SUBROUTINE TEMPORARIES: C, D EXTERNALS: MPY, ADD, SUB, SQR, DVD EXTERNALS FOR EM 4: RSTFL, STMAX, ARERR(I) 030016 PYTHA 034017 042472 042440 000172 004340 070017 001752 25333 073410 25334 000340 25335 042453 25336 000016 25337 004340 25340 042443 25341 004340 25342 170201 25343 042455 E 71 25344 005742 25345 042373 25346 140546 25347 033461 STA STB JSM JSM LDA LDB EXE LDA RLA LDA JSM LDA LDB JSM LDB RET C D RS.01 MPY AONE ARES D RESE E 71 ARES SQR C ARES DVD ARES I SAVE A AND B FOR LATER USE OP 1 = RES RES = RES RES RES = 1 +/ RES RES CHECK THE RESULT EXPONENT FOR ASN, ACS RES = SQR( 1 +/ RES RES) RES = ((RES) OR ( 1)) / SQR(I +/ RES RES) ERROR 71: ACS OR ASN OF ARGUMENT <-1 OR ERROR 71: ACS OR ASN OF ARGUMENT <-1 OR > 1 JSM RSTFL RESET THE USERS FLAGS AND THEN TEST LDB OPIE THE REAL FLG 14 IF FLAG 14 IS SET THE DEFAULT JSM STMAX RESULTISASNORACSOF(SGN(ARG) 1) JSM ARERR,I ERROR 71: ACS OR ASN ARG> I OR <-1.

ASC 1,71 Page 384 02300000 02301000 02302000 02303000 02304000 02305000 02306000 02307000 02308000 02309000 02310000 02311000 02312000 02313000 02314000 02315000 02316000 02317000 02318000 02319000 02320000 02321000 02322000 02323000 02324000 02325000 02326000 02327000 02328000 02329000 02330000 02331000 0233200 02333000 02334000 02335000 02336000 02337000 02338000 02339000 02340000 02341000 02342000 02343000 25323 25324 25325 25326 25327 25330 25331 25332 455 455 1,568,094 MATH OPTION BLOCK A: UTILITY ROUTINES INRES RES = INT(RES) THIS IS A SECOND LEVEL SUBROUTINE IT USES ONLY AR 2.

25350 042470 INRES 25351 001752 25352 25353 25354 25355 25356 25357 25360 170405 004000 176004 000340 CLRES 071603 170201 024155 02364000 25361 176076 02365000 25362 174040 02366000 25363 02367000 25364 02368000 25365 02369000 02370000 25366 02371000 25367 02372000 25370 02373000 25371 02375000 02376000 02377000 02378000 02379000 02380000 02381000 02382000 02383000 02384000 02385000 02386000 02387000 25372 02388000 25373 02389000 25374 02390000 25375 02391000 25376 02392000 25377 02393000 25400 02394000 25401 02395000 25402 02396000 25403 000177 075500 071500 000127 004340 071403 170201 A 2.RS XERRS XFRET JSM RS A 2 LDA RESE AAR 6 LDB A SBP + 4 LDA ARES CLR 4 RET I ADB M 11 SBP -2 TCB LDA PO MRY NRM LDA LDB XFR RET AR 2 = RES IF THE EXPONENT IS NEGATIVE, RETURN ZERO IF THE EXPONENT IS ≥ 11, RETURN THE ARGUMENT B = NO OF DIGITS TO RIGHT SHIFT OUT OF AR 2 PERFORM THE RIGHT SHIFT NORMALIZE THE RESULT AR 2 A ARES 4 s STMAX: RES = +/-9 99999999999 E 511 ENTRY POINT STMAX-1: STORE + 9 99999999999 E 511 IN RES.

ENTRY POINT STMAX: STORE + 9 99999999999 E 511 IN RES IF B< 0 ≥ 0 ENTRY POINT STMAX: STORE 9 99999999999 E 511 IN RES IF B< 0 ≥-1 004177 000127 STMAX 071603 044023 071040 000212 030020 077002 044020 066366 LDB LDA CLR ISZ CMY LDA STA SLB ISZ JMP PO AR 2 A 4 AR 2 M 3 EMAX AR 2 E + 2 AR 2 E A 2,RS Page 385 02345000 02346000 02347000 02348000 02349000 02350000 02351000 02352000 02353000 02354000 02355000 02356000 02357000 02358000 02359000 02360000 02361000 02362000 02363000 456 456 457 1568094 457 MATH OPTION BLOCK A: UTILITY ROUTINES RAR 2 -ROUND AR 2 THIS IS A SECOND LEVEL SUBROUTINE SEE THE MAINFRAME ROUNDING ROUTINE FOR TEMPORARIES 25404 004254 RAR 21 LDB Pl ENTRY POINT FOR I DIGIT SHIFT AND 02409000 25405 000177 RAR 2 B 25406 164547 ROUND.

LDA PO ENTRY POINT FOR DIGIT SHIFT AND ROUND.

JMP ARND,I USE THE RET I FROM ARND,I TO RETURN.

ROUND: FASTER SHIFT & ROUND THAN RAR 2 B B=NO OF DIGITS TO RIGHT SHIFT 000001 050160 072402 004132 000177 075500 020151 172403 004254 071000 170201 ROUND LDA B AND M 16 SZA + 2 LDB P 13 LDA PO FRND MRY ADA M 5 SAM + 3 LDB Pl MWA RETNI RET 1 ZAR 2-CHECK FORAR 2 = O RET 2 IFAR 2 = 0 RET I IFAR 2#0 THIS IS A FIRST LEVEL SUBROUTINE IT USES NO TEMPORARIES 000021 ZAR 2 060022 060023 072074 170202 LDA IOR IOR RZA RET AR 2 M 1 AR 2 M 2 AR 2 M 3 RETNI Page 386 02398000 02399000 02400 o 000 02401000 02402000 02403000 02404000 02405000 02406000 02407000 02408000 25407 25410 25411 25412 25413 25414 25415 25416 25417 25420 25421 02410000 02411000 02412000 02413000 02414000 02415000 02416000 02417000 02418000 02419000 02420000 02421000 02422000 02423000 02424000 02425000 02426000 02427000 02428000 02429000 02430000 02431000 02432000 02433000 02434000 02435000 02436000 02437000 0243800002439000 02440000 02441000 0244200002443000 02444000 02445000 02446000 02447000 25422 25423 25424 25425 25426 457 457 1.568 094 1,568,094 MATH OPTION BLOCK A: UTILITY ROUTINES Page 387 02449000 02450000 02451000 02452000 02453000 02454000 02455000 02456000 02457000 02458000 02459000 02460000 CALLS ENTRW CALI A=C B=C EXIT C RETI THE I Mi 02461000 02462000 THESE 02463000 SEETE 02464000 02465000 02466000 02467000 25427 031273 ADD 02468000 25430 035274 02469000 25431 164554 02470000 02471000 25432 000336 OIMRS 02472000 25433 004340 AMRES 02473000 25434 031273 SUB 02474000 25435 035274 02475000 25436 164555 02476000 02477000 25437 004340 AXRES 02478000 25440 031273 MPY 02479000 25441 035274 02480000 25442 164556 02481000 02482000 25443 031273 DVD 02483000 25444 035274 02484000 25445 024254 02485000 25446 100001 02486000 25447 072003 02487000 25450 105273 02488000 25451 066373 02489000 25452 164557 DVDI 02490000 02491000 25453 031273 SQR 02492000 25454 164561 02493000 02494000 25455 001730 RSTFL 02495000 25456 066462 02496000 02497000 SFG 14 02498000 02499000 25457 001506 SFG 14 02500000 25460 031730 02501000 25461 060145 02502000 25462 031506 CAF 1 02503000 25463 170201 02504000 ó TO ±/ ROUTINES Y CONDITIONS:

L WITH JSM XXX )PND 1 IPND 2 CONDITIONS:

URNS TO CALLING ROUTINE USING THE RETURN FROM ATH ROUTINE ARE SECOND LEVEL SUBROUTINES HE MAINFRAME MATH ROUTINES FOR TEMPORARIES USED.

STA STB JMP LDA LDB STA STB JMP LDB STA STB JMP STA STB ADB LDA RZA LDB JMP JMP OPND 1 OPND 2 AADDI,I AO Pl ARES OPND 1 OPND 2 ASUB 1,I ARES OPND 1 OPND 2 AMULI,I OPND 1 OPND 2 Pl B,I DVD 1 OPND 1,I STMAX ADIVI,I STA OPND 1 JMP ASQRI,I LDA UFLAG JMP CAFI USES UFLAG LDA STA IOR STA RET FLAGS UFLAG P'2 FLAGS ENTRY POINT FOR RES=OP 1-RES ENTRY POINT FOR RES=-RES ENTRY POINT FOR RES=-RES DIVISOR = 0: RES = +/-9 99999999999 E 511 (COULD BE MOVED INTO PYTHA) RESTORE THE USER'S FLAGS SAVE THE USER'S FLAGS AND SET FLAG 14 458 458 1,568,094 MATH OPTION BLOCK A: UTILITY ROUTINES 02505000 02506000 02507000 02508000 02509000 02510000 02511000 02512000 02513000 25464 02514000 25465 02515000 02516000 25466 02517000 25467 02518000 02519000 25470 02520000 25471 02521000 02522000 25472 02523000 25473 02524000 02525000 25474 02526000 25475 02527000 02528000 25476 02529000 25477 530000 25500 02531000 02532000 25501 02533000 25502 02534000 25503 02535000 02536000 25504 02537000 25505 02538000 25506 02539000 02540000 25507 02541000 25510 02542000 25511 02543000 02544000 25512 02545000 25513 TRANSFER SUBROUTINES FOR OPI, OP 2, RES, ARI, AR 2 GENERAL FORM OF LABEL: FF TT, WHERE FF=FROM AND TT=TO GENERAL FORM OF LABEL: FF TT, WHERE FF=FROM AND TT=r TO 000336 066477 000337 066477 000340 066477 000340 066505 000340 066510 000345 004127 066370 000127 004345 066370 000127 004336 066370 000127 004337 066370 000172 066505 O 1 A 2 02.A 2 RS.A 2 RS.OI RS.02 A 1.A 2 XFRA 2 A 2.A 1 XFRAI A 2.O 1 XFRO 1 A 2.02 XFRO 2 OPI= OPI=I LDA JMP LDA JMP LDA JMP LDA JMP LDA JMP LDA LDB JMP LDA LDB JMP LDA LDB JMP LDA LDB JMP LDA JMP AO Pl XFRA 2 AOP 2 XFRA 2 ARES XFRA 2 ARES XFRO 1 ARES XFRO 2 ARIA AR 2 A XFRET AR 2 A ARIA XFRET AR 2 A AO Pl XFRET AR 2 A AOP 2 XFRET AONE XFROI 459 Page 388 459 1,568,094 MATH OPTION BLOCK A: "CORDIC" SUBROUTINES 02547000 02548000 02549000 02550000 02551000 02552000 02553000 02554000 02555000 02556000 02557000 02558000 02559000 02560000 02561000 02562000 02563000 02564000 02565000 02566000 02567000 25514 02568000 25515 02569000 25516 02570000 02571000 25517 02572000 25520 02573000 02574000 25521 02575000 25522 02576000 25523 02577000 02578000 25524 02579000 25525 02580000 25526 02581000 25527 02582000 02583000 25530 02584000 25531 02585000 02586000 25532 02587000 25533 02588000 02589000 25534 02590000 25535 02591000 25536 02592000 25537 02593000 25540 02594000 25541 02595000 25542 PHI -"PHASE I": CORDIC SUBROUTINE USED BY TAN & EXP TAN: SUMMATION EQUATION EXP: SUMMATION EQUATION INITIAL VALUES PTR CNTRI 000335 PHI 031726 071605 001733 PH 1 A 042502 071040 CMY 075041 135726 071040 071200 000177 075541 042422 066534 145726 170201 045726 PHI B 001733 020143 031733 055737 066517 170201 TAN ABETA-4 CNTRI 1 1-6 LDA STA CLR ADSTK DIGIT LDA PTR JSM XFRA 1 CMY FDV STB DIGIT,I CMY FXA LDA PO MLY JSM ZAR 2 JMP PHI B ISZ DIGIT,I RET I ISZ LDA ADA STA DSZ JMP RET DIGIT PTR P 4 PTR CNTR 1 PH 1 A EXP ABETA SET UP THE DIGIT STACK CLEAR Q O Q 5 TO ZERO MOVE NEXT CONSTANT TO ARI DETERMINE THE NEXT QJ SAVE QJ RESTORE THE REMAINDER LEFT SHIFT THE REMAINDER 1 DIGIT ISAR 2 = O ? NO YES, INCREMENT THE LAST QJ BUMP THE QJ POINTER BUMP THE CONSTANT ADDRESS MORE CONSTANTS? NO Page 389 460 460 1,568,094 MATH OPTION BLOCK A: "CORDIC" SUBROUTINES 02597000 02598000 02599000 02600000 02601000 02602000 02603000 02604000 02605000 02606000 02607000 02608000 02609000 02610000 02611000 02612000 02613000 02614000 02615000 02616000 02617000 02618000 02619000 02620000 02621000 02622000 25543 031731 02623000 25544 035732 02624000 02625000 25545 042512 02626000 02627000 25546 001732 02628000 25547 010146 02629000 25550 066603 02630000 02631000 25551 042466 02632000 25552 070016 02633000 25553 000336 02634000 25554 042502 02635000 25555 071200 02636000 25556 001732 02637000 25557 010146 02638000 25560 066566 02639000 25561 072705 02640000 02541000 25562 042422 02642000 25563 066607 02643000 02644000 25564 155726 02645000 25565 170201 0646000 02647000 25566 070016 02648000 25567 042366 02649000 25570 042466 02650000 02651000 25571 005731 PH 2 "PHASE II": CORDIC SUBROUTINE USED BY TAN & ATN TAN: Y=Y+X X = X 10 A(-2 J) Y ATN: Y=Y-X X = X + 10 A(-2 J) Y INITIAL VALUES SHIFT DJ C D LOOP# TAN ATN -2 FXP&I USED FOR SHIFTING Y IN THE 2ND EQUATION -2 2 INCREMENT/DECREMENT FOR SHIFT CDC CMY 1-6 PH 2 PH 2 A :r PH 2 B CMY CDC STA SHIFT STB DJ JSM OPI=I LDA CPA JMP JSM EXE LDA JSM FXA LDA CPA JMP SDC DJ M 2 PH 2,D 02.A 2 C AOP 1 I XFRA 1 DJ M 2 PH 2 B PH 2 B JSM ZAR 2 JMP PH 2 E DSZ DIGIT,I RET I EXE JSM JSM C A 2.RS 02.A 2 LDB SHIFT 02652000 25572 042407 SHIFT = SHIFT FACTOR FOR Y DJ = INCREMENT/DECREMENT FOR TWOJ SET X O = 1 TAN? YES NO, AR 2 = OP 2 CDC FOR TAN, CMY FOR ATN ARI =O Pl Y=Y+/-X TAN? YES OVERFLOW? YES, IS AR 2 = O ? NO YES CDC FOR TAN; CMY FOR ATN NO OVERFLOW, RES = AR 2 AR 2 = OP 2 RIGHT SHIFT AR 2 "SHIFT" PLACES AND ROUNI LEAVE IN UNNORMALIZED FORM IN AR 2.

461 Page 390 461 JSM ROUND 1,568,094 MATH OPTION BLOCK A: "CORDIC" SUBROUTINES 02653000 02654000 25573 02655000 25574 02656000 25575 02657000 25576 02658000 02659000 25577 02260000 25600 02661000 25601 02662000 02663000 25602 02664000 02665000 25603 02666000 02667000 25604 02668000 02669000 25605 02670000 25606 02671000 02672000 25607 02673000 25610 02674000 25611 02675000 02676000 25612 02677000 25613 02678000 25614 02679000 02680000 25615 02681000 02682000 25616 02683000 25617 02684000 25620 02685000 02686000 25621 02687000 25622 02688000 25623 02689000 02690000 25624 02691000 25625 02692000 25626 02693000 25627 02694000 02695000 25630 02696000 25631 02697000 25632 02698000 25633 02699000 25634 070017 071200 042504 042474 155726 066551 066607 042466 P 042404 P 042507 H 2.C H 2.D 101726 072043 001731 PH 2 E 021732 031731 055740 066615 170201 055726 PH 2 F 001732 010146 066602 001747 170513 072405 042464 042404 042504 066551 042466 PH 2 G 000177 075541 042507 066551 EXE D FXA JSM A 2 01 JSM RS 02 DSZ DIGIT,I JMP PH 2 A JMP PH 2 E JSM 02 A 2 JSM RAR 21 JSM A 2 02 LDA DIGIT,I RZA PH 2 A LDA SHIFT ADA DJ STA SHIFT DSZ LOOP# JMP PH 2 F RET 1 DSZ DIGIT LDA DJ CPA M 2 JMP PH 2 C LDA OP 2 M 1 SAR 12 SZA PH 2 G JSM O 1 A 2 JSM RAR 21 JSM A 2 O 1 JMP PH 2 A JSM 02 A 2 LDA PO MLY JSM A 2 02 JMP PH 2 A CMY FOR TAN, CDC FOR ATN X = X-/+ 1 OA(-2 J) Y O Pl = AR 2 OP 2 = RES QJ = QJ-I; QJ = O ? NO YES; QJ IS NEVER ZERO FOR ATN.

AR 2 = OP 2 RIGHT SHIFT AR 2 ONE PLACE AND ROUND.

OP 2 = AR 2 QJ = O ? NO YES, QJ = O SHIFT = SHIFT + DJ LOOP# = LOOP# 1; LOOP# = O ? NO YES DIGIT= DIGIT 1 TAN? YES NO, D 1 OF OP 2 = O ? YES AR 2 = O Pl RIGHT SHIFT AR 2 ONE PLACE AND ROUND.

O Pl = AR 2 AR 2 = OP 2 LEFT SHIFT AR 2 ONE PLACE.

OP 2 = AR 2 462 Page 391 462 1,568,094 MATH OPTION BLOCK A: "CORDIC" SUBROUTINES 02701000 02702000 02703000 02704000 02705000 02706000 02707000 02708000 02709000 02710000 02711000 02712000 02713000 02714000 02715000 02716000 02717000 02718000 02719000 02720000 02721000 25635 031740 02722000 25636 170040 02-723000 25637 020132 02724000 25640 031737 02725000 25641 035733 02726000 02727000 25642 000127 02728000 25643 071603 02729000 02730000 25644 000335 02731000 25645 031726 02732000 25646 004254 02733000 02734000 25647 101726 02735000 25650 170040 02736000 25651 075500 02737000 25652 045726 02738000 25653 055740 02739000 25654 066647 02740000 02741000 25655 000177 02742000 25656 075500 02743000 02744000 25657 001733 02745000 02746000 25660 031733 02747000 25661 042502 02748000 02749000 25662 105726 02750000 25663 174040 02751000 25664 075000 02752000 25665 045726 02753000 02754000 25666 004254 02755000 25667 055737 02756000 25670 066672 PH 3 "PHASE III"; CORDIC SUBROUTINE USED BY ATN & LN ATN: SUMMATION EQUATION LN: SUMMATION EQUATION INITIAL VALUES ATN LN LOOP# 7-12 7 PTR ALFAA BETAA PH 3 PH 3 A PH 3 B STA TCA ADA STA STB LOOP# P 13 CNTRI PTR LDA AR 2 A CLR 4 LDA STA LDB ADSTK DIGIT Pl LDA DIGIT,I TCA MRY ISZ DIGIT DSZ LOOP# JMP PH 3 A LDA PO MRY LDA PTR STA PTR JSM XFRA 1 TRANSFER LOW ORDER DIGITS TO AR 2 LDB DIGIT,I TCB FMP ISZ DIGIT LDB DSZ JMP Pl CNTRI + 2 Page 392 463 463 1,568,094 MATH OPTION BLOCK A: "CORDIC" SUBROUTINES 02757000 25671 066676 02758000 02759000 25672 042414 02760000 25673 001733 02761000 25674 020150 02762000 25675 066660 02763000 02764000 25676 072402 02765000 25677 042414 02766000 25700 071500 02767000 25701 02768000 25702 02769000 25703 02770000 25704 PH 3 C PH 3 C PH 3 D PH 3 E 174040 174605 034020 170201 JMP PH 3 D JSM LDA ADA JMP SZA JSM NRM TCB SBL STB RET FRND PTR M 4 PH 3 B PH 3 E FRND NOTE: THIS SUBROUTINE IS CALLED FROM "TAN 10 " TWICE.

6 AR 2 E 464 Page 393 464 v 5 1 4 MATH OPTION BLOCK A: "CORDIC" SUBROUTINES PH 4 "PHASE IV": CORDIC SUBROUTINE USED BY EXP & LN RECURRENCE EQUATION: Y = Y + IOA(-J) Y EXP: Y O = 1 LN:Y O = ARGUMENT INITIAL VALUES DIGIT SHIFT DJ AR 2 02793000 02794000 25705 031731 PH 4 02795000 25706 035732 02796000 25707 02797000 25710 02798000 25711 02799000 25712 02800000 25713 02801000 25714 02802000 25715 02803000 25716 02804000 25717 02805000 25720 000132 031740 042501 001732 PH 4 A 010254 066717 101726 PH 4 B 072410 005731 PH 4 C 076402 02806000 25721 042407 02807000 25722 02808000 25723 02809000 25724 02810000 25725 EXP L 1 ADSTK + 12 12 0 -1 1 1 A.

q RG STA SHIFT SAVE THE SHIFT FACTOR (J, NOT 2 J) STB DJ SAVE THE SHIFT FACTOR INCREMENT/DECREMENT LDA STA JSM LDA CPA JMP LDA SZA LDB SZB P 13 LOOP# A 2.A 1 DJ Pl PH 4 C DIGIT,I PH 4 E SHIFT PH 4 D JSM ROUND 071700 PH 4 D 071200 072711 042476 02811000 25726 001731 PH 4 E 02812000 25727 02813000 25730 02814000 25731 02815000 25732 02816000 25733 02817000 25734 02818000 25735 02819000 25736 021732 031731 055726 055740 066712 170201 155726 PH 4 F 000000 02820000 25737 042501 02821000 25740 066715 CDC FXA SDC JSM PH 4 F Al.A 2 LDA SHIFT ADA STA DSZ DSZ JMP RET DSZ NOP DJ SHIFT DIGIT LOOP# PH 4 A 1 I DIGIT,I LOOP IN PH 4 13 TIMES ARI = AR 2 LN? YES NO, EXP; IS QJ = O ? NO, QJ # O IF TWOJ= 0, DON'T RIGHT SHIFT AND ROUNE RIGHT SHIFT AR 2 "SHIFT" PLACES AND ROUNE AR 2 = Y + 10 A(-J) Y OVERFLOW? YES, AR 2 = ARI (RESTORE TO PREVIOUS VALUE INCREMENT/DECREMENT THE SHIFT FACTOF DECREMENT THE LOOP COUNTER NO OVERFLOW, DECREMENT QJ DON'T TEST FOR QJ= 0 NOW (ITS DONE AT PH 4 B JSM A 2 A 1 ARI =AR 2 JMP PH 4 B Page 394 02772000 02773000 02774000 02775000 02776000 02777000 02778000 02779000 02780000 02781000 02782000 02783000 02784000 02785000 02786000 02787000 02788000 02789000 02790000 02791000 02792000 1,568,094 465 465 1,568,094 MATH OPTION BLOCK A: "CORDIC" SUBROUTINES 02823000 02824000 25741 000000 25742 000000 25743 000000 25744 000000 25745 000000 25746 000000 02825000 25747 000000 02827000 02828000 E 02829000 02830000 25750 043635 E 73 02831000 25751 140546 02832000 25752 033463 02834000 02835000 EF 02836000 02837000 25753 000177 E 72 02838000 25754 031741 02839000 25755 140546 02840000 25756 033462 UNS REP 7 OCT O OCT O OCT O OCT O OCT O OCT O OCT O CORRECTIONS.

CORRECTIONS.

CORRECTIONS.

CORRECTIONS.

CORRECTIONS.

CORRECTIONS.

CORRECTIONS.

RROR 73: OAO JSM RES=I DEFAULTVALUEIS I JSM ARRER,I ASC 1,73 RROR 72: NEGATIVE BASE TO A NON-INTEGER POWER LDA PO IF FLAG 14 = 1, RETURN TO EA 2 TO CALCULATE STA FLAGS_ (ABS(BASE))APOWER JSM ARERR,I ERROR 72: NEGATIVE BASE TO A NONINTEGER POWER ASC 1,72 466 Page 395 466 1,568,094 MATH OPTION BLOCK A: MISC.

02842000 02843000 02844000 02845000 02846000 02847000 25757 025757 02848000 25760 024257 02849000 25761 024510 02850000 25762 024632 02851000 25763 024757 02852000 25764 025027 02853000 25765 025025 02854000 25766 025063 02855000 25767 025057 02856000 25770 025077 02857000 25771 025120 02858000 25772 025147 02859000 25773 025263 02860000 25774 025276 02861000 25775 025304 02862000 25776 026306 02863000 25777 025310 02865000 024635 02866000 025722 02867000 025304 02869000 02871000 00564 02872000 00564 025373 02873000 00565 025372 02875000 END OF PASS 2 NO E Page 397 02058000 02060000 02061000 02062000 02063000 02065000 02067000 EXECUTION JUMP TABLE EXTBL DEF DEF ETAN DEF EATN DEF EEXP DEF ELN DEF ESIN DEF ECOS DEF EASN DEF EACS DEF ETNA DEF ELOG DEF EA DEF ECSV DEF EUNIT DEF EDEG DEF ERAD DEF EGRAD RES= 1 I EQU EX Pl CDC EQU PH 4,D CONSTANT USl INITA EQU EDEG FILL IN BASEPAGE LINKS TO STMAX.

ORG ASTMA DEF STMAX DEF STMAX-I END RRORS DETECTED ED BY PH 2.

MATH OPTION BLOCK B (MB 16) FULL PRECISION NUMBER: INTERNAL FORMAT EEEE EEEE EEXX XXXS 10 BIT 2 'S COMP EXP, UNUSED BITS.

MANTISSA SIGN ( 0 =+ 1 =-) EXP RANGE = -511 TO + 511 Dl D 2 D 3 D 4 BCD DIGITS 1-4 D 5 D 6 D 7 D 8 BCD DIGITS 5-8 D 9 D 10 Dll D 12 BCD DIGITS 9-12 Page 396 467 467 468 1,568,094 MATH OPTION LBOCK B (MB 16) READ/WRITE AREAS READ/WRITE AREAS 077042 UNITS 077043 SEEDL 077752 RESE 077753 RESMI 077754 RESM 2 077755 RESM 3 077756 ZE 077756 ZEM 1 07776057 ZM 2 077760 ZM 2 077761 ZM 3 077762 MTI 077763 MT 2 077764 MT 3 077765 MT 4 077766 MT 5 077767 MT 6 000345 ARIA 077770 ARIE 077771 ARIMI 077772 AR 1 M 2 077773 AR 1 M 3 077774 RNDT 2 077774 RNDT 2 077775 077776 077777 000127 000021 000022 000023 RNDTI NRMFL STBIT AR 2 A AR 2 E AR 2 M I AR 2 M 2 AR 2 M 3 BCDI EQU STEAL EQU STEAL+I EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU RES RES+ 1 RES+ 2 RES+ 3 MRW 1 MRWI+I MRW 1 + 2 MRWI+ 3 DEDICATED WORD FOR MOBA DEDICATED WORD FOR MOBB IS USED TO STORE RUN LINK FULL PRECISION RESULT REGISTER FULL PRECISION MATH TEMPORARY MRW+ 4 MRW 1 + 5 MRWI + 6 MRWI+ 7 MRWI+ 8 MRWI+ 9 ADRI ARI ARIE+I AR 1 E+ 2 ARIE+ 3 ADDRESS OFARI 1 EXPONENT WORD OF ARI 1 ST MANTISSA WORD OFARI 2ND MANTISSA WORD OF ARI 3RD MANTISSA WORD OF ARI EQU MRW 2 NORMALIZE COUNT FOR COMPARISON IN ROUND EQU EQU EQU EQU EQU EQU EQU EQU MRW 2 + I SHIFT COUNTER FOR ROUND MRW 2 + 2 NORMALIZATION FLAG FOR ROUND MRW 2 + 3 "STICKY BIT" FOR ROUND ADR 2 AR 2 AR 2 E+ 1 AR 2 E+ 2 AR 2 E+ 3 EQU B 10 K ADDRESS OF AR 2 EXPONENT WORD OF AR 2 1ST MANTISSA WORD OF AR 2 2ND MANTISSA WORD OF AR 2 3RD MANTISSA WORD OF AR 2 BCD 1000 EQU'S FOR SUBROUTINE TO FIN D LOCATION OF FIRST ELEMENT OF AN ARRAY, NUMBER OF ELEMENTS IN R THE ARRAY, AND IT'S PRECISSION 077734 VAL EQU T 20 LOCATION OF FIRST ELEMENT OF AN 077733 VALN EQU T 19 ARRAY NUMBER OF ELEMENTS OF THE ARRAY 468 Page 398 02069000 02070000 02071000 02072000 02074000 02075000 02076000 02077000 02078000 02079000 02080000 02081000 02082000 02083000 02084000 02085000 02086000 02087000 02088000 02089000 02090000 02091000 02092000 02093000 02094000 02095000 02096000 02097000 02098000 02099000 02100000 02101000 02102000 02103000 02104000 02105000 02106000 02107000 02108000 02109000 02110000 02111000 02112000 02113000 02114000 02115000 02116000 02117000 1,568,094 MATH OPTION BLOCK B (MB 16) EQUATES 02126000 02127000 02128000 02129000 02131000 02132000 02133000 26000 026053 26001 026032 26002 026016 02134000 26003 177777 02135000 26004 026007 02136000 26005 000016 MAINFRAME -OPTION BLOCK INTERFACE DEF EXECB ADDRESS OF THE EXECUTION ROUTINE DEF COMPB ADDRESS OF THE COMPILE TABLE DEF RCTBL ADDRESS OF THE REVERSE COMPILE TAB LE NO COMMAND TABLES ADDRESS OF THE INITIALIZATION ROUTINE MOBB ROM ID DEC -I DEF INITB DEC 14 MATH OPTION BLOCK B (MB 16) CONSTANTS, LINKAGES 26006 077327 ASEED DEF SEED ADDRESS OF SEED INITIALIZATION ACCESSED BY JSM ACCESSED BY JSM 02153000 02154000 STE 02155000 RES 02156000 NUT 02157000 THI 02158000 RES 02159000 02160000 26007 000133 INITI 02161000 26010 061062 02162000 26011 031062 02163000 02164000 02165000 26012 003075 INT O 02166000 26013 007006 INTN 02167000 26014 071403 02168000 20615 170201 IEND AL 5 R/W WORDS POINT AT FIRST ONE BY SEED SERVE 4 WORDS OF R/W MEMORY AS A SEED FOR RANDOM MBERS GENERATION E LAST STOLEN WORD WILL CONTAIN RLINK CONTENTS FOR SETTING SEED OF RANDOM GENERATOR ON RUN LDA IOR STA P 12 ROMWD ROMWD BITS FOR MOBA, MOBB ROMWD LDA ACR/D LDB ASEED XFR 4 RET I STORE P 1/2 AS A DEFAULT SEED INITIAL SEED) COMMAND TABLE

ACCESSED BY LOOK-UP 469 Page 399 02119000 02120000 02121000 02122000 02124000 469 Page 400 02138000 02139000 02140000 02141000 02143000 02144000 02146000 02147000 02148000 02149000 02150000 02151000 02171000 02172000 02173000 02174000 02175000 02176000 Page 401 MATH OPTION BLOCK B (MB 16) 02177000 02178000 COMMAND EXECUTION ROUTINES ACCESSED BY JSM 02180000 02181000 02182000 02183000 REVERSE COMPILE 02184000 02185000 ACCESSED BY JSM 02186000 A = ROM'S INTERNAL CODE 02187000 B = ROM'S ID CODE 02188000 02189000 MUST RETURN:

02190000 ASCII = CHARACTER POINTER TO RIGHT HAND END OF MNEMONIC.

02191000 GUIDE=AAAA BBBB AAAA BBBB 02192000 AAAA =OPERATOR PRIORITY 02193000 BBBB = CLASS:

02194000 1: OPERAND 02195000 2: UNARY OPERATOR 02196000 3: BINARY OPERATOR 02199000 02200000 02201000 02202000 REVERSE COMPILE TABLE 02204000 CC PP CC PP 02205000 02206000 26016 161342 RCTBLOCT 161342 ABS,SGN 142,142 02207000 26017 161342 OCT 161342 INT,FRC 142,142 02208000 26020 161223 OCT 161223 RND,MOD 142, 9 3 02209000 26021 161342 OCT 161342 MAX,MIN 142,142 470 1,568,094 470 1,568,094 Page 402 02211000 02212000 02213000 02214000 MATH OPTION BLOCK B (MB 16) COMPILE TABLE

02216000 02217000 26022 02218000 20623 02219000 26024 02220000 26025 02221000 26026 02222000 26027 02223000 26030 02224000 26031 02225000 02226000 02227000 02228000 26032 02229000 26033 02230000 26034 02231000 26035 02232000 26036 02233000 26037 02234000 26040 02235000 26041 02236000 26042 02237000 26043 02238000 26044 02239000 26045 02240000 26046 02241000 26047 02242000 26050 02243000 26051 02244000 26052 004032 004032 003013 004053 004053 004053 004053 004053 OCT OCT OCT OCT OCT OCT OCT OCT 004032 004032 003013 004053 004053 004053 004053 004053 8 26 8 26 6 11 8 43 8 43 8 43 8 43 8 43 CLASS TOKEN MIN MAX MOD RND FRC INT SGN ABS THE FOLLOWING IS A LOWER CASE MNEMONIC TABLE THE FOLLOWING IS A LOWER CASE MNEMONIC TABLE 060542 COMPB 071601 071547 067202 064556 072203 063162 061604 071156 062205 066557 062206 066541 074207 066551 067210 100000 DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC OCT 24930 29569 29543 28290 26990 29827 26226 25476 29294 25733 28015 25734 28001 30855 28009 28296 100000 AB S ( 1) S G N ( 2) I N T ( 3) FR C ( 4) R N D ( 5) M O D ( 6) M A X ( 7) M I N ( 8) END OF TABLE

471 471 472 1,6,9 47.

MATH OPTION BLOCK B (MB 16) MAIN EXECUTION ROUTINE ACCESSED BY JMP EXIT BY JMP AINTX,I FROM "EXIT" 023057 EXECB 100000 140000 164366 ADA ETBL LDA A,I JSM A,I JMP ARAP,I EXECUTE THE STATEMENT

GO TO RAP UP ROUTINE 02260000 02261000 02262000 02263000 26057 02264000 26060 02265000 26061 02266000 26062 02267000 26063 02268000 26064 02269000 26065 02270000 26066 02271000 26067 EXECUTION JUMP TABLE 026057 ETBL 026402 026367 026431 026315 026210 026244 026104 026102 DEF DEF DEF DEF DEF DEF DEF DEF DEF EABS ESGN EINT EFRAC ERND EMOD EMAX O EMIN 02273000 02274000 02275000 CC 02276000 02277000 02278000 26070 026071 A 29 02279000 26071 000100 )NSTANTS DEFINITION TABLE DEF + 1 OCT 000100 29 IS USED AS A MULTIPLIER FOR RANDOM NUMBER 02280000 26072 02281000 26073 02282000 26074 02283000 26075 024400 000000 000000 024030 ACR/D 02284000 26076 177767 M 9 02285000 02286000 02287000 26077 077711 FTIA 02288000 26100 077715 FT 5 A 02289000 26101 077721 FT 9 A OCT OCT OCT OCT 024400 000000 000000 24030 DEC -9 DEF DEF DEF TI T 5 T 9 ADDRESS OF PIE/180 ON JO PAGE AS OF 9/10/75 ADDRESS OF Tl ADDRESS OF T 5 MATH OPTION BLOCK B (MB 16) SHARED TEMPORARIES BLOCK ADDRESSES EQU'S AND CONSTANTS FOR FFM 077217 WPRT EQU CSTMP+ 1 Page 403 02246000 02247000 02248000 02249000 02250000 02251000 02252000 02253000 02255000 02256000 02257000 02258000 26053 26054 26055 26056 Page 404 02291000 02292000 02293000 02294000 02295000 02296000 02297000 02298000 02299000 02300000 02301000 02302000 02303000 02304000 472 1,568,094 472 1,568,094 MATH OPTION BLOCK B (MB 16) THIS ROUTINE IS THE MAIN 1 MAX/MIN EXECUTION FOR EACH ELEMENT IN THE LIST OF PARAMETERS: IT FINDS THE VALUE OF VAL AND VALN FOR THAT ELEMENT WHEN LIST EXHAUSTED IT RETURNS THE VALUE OF MAX/MIN IN EMIN EMAX O 02319000 26106 000254 02320000 26107 031717 02321000 02322000 26110 140610 02323000 26111 001272 02324000 26112 031722 02325000 02326000 26113 040751 EMAXI 02327000 26114 067125 LDA Ml JMP + 2 LDA Pl STA T 6 LDA Pl STA T 7 JSM ACOUN,I LDA FA Pl STA T 10 JSM NGET JMP EMAX 3 INDICATOR OF A MAX OR MIN IS T 6 BEING + 1 OR-I T 7 INDICATES THE NUMBER OF TIMES WE ENTER MAXX COUNT PARAMETERS; FA Pl POINTS TO FIRST SAVE FA Pl GET THE FIRST PARAMETER IF SIMPLE VARIABLE FIND THE ARRAYS LOCATION AND NUMBER OF VARIABLES WE HAVE A SINGLE ELEMENT ONLY IF NGET RETURNS TO NEXT LOCATION (P+ 2); B POINTS TO THE EQUIVALENT FULL PRECISSION VALUE WE SHOUL STORE THE FOLLOWING VALUES VAL= 8 VALN= 1 STB VAL LDA Pl STA VALN 043137 EMAX 2 000254 140607 26123 067127 26124 067113 JSM LDA JSM MAXX Pl ABUMP,I FIND THE MAX/MIN OF THE ARRAY TO BUMP ONE PARAMETER AT A TIME BUMP ONE PARAMETER: IF NO MORE RET P+ I JMP MEXIT IF ANY AT ALL RET P+ 2; GO BACK TO NGET JMP EMAXI 26125 043171 EMAX 3 26126 067120 26127 001274 MEXIT 26130 004340 26131 071403 26132 001722 26133 031263 JSM VMAX JMP EMAX 2 LDA OPND 2 LDB ARES XFR 4 FIND VAL: VALN: AND VALP TRANSFER WHICH CONTAINS ANSWER FOUND THROUGH USING MAXX ROUTINE TO LDA TIO STA A Pl A Pl POINTS TO FIRST ELEMENT ON STACK 473 Page 405 02306000 02307000 02308000 02309000 02310000 02311000 02312000 02313000 02314000 02315000 02316000 02317000 02318000 473 26102 26103 26104 26105 000257 067105 000254 031716 035734 000254 031733 26115 26116 26117 26120 26121 26122 02328000 02329000 02330000 02331000 02332000 02333000 02334000 02335000 02336000 02337000 02338000 02339000 02340000 02341000 02342000 02343000 02344000 02345000 02346000 02347000 02348000 02349000 02350000 02351000 02352000 02353000 02354000 02355000 02356000 02357000 474 1.568094 Page 405 Continued MATH OPTION BLOCK B (MB 16) 02358000 26134 040615 02359000 26135 031263 02360000 02361000 26136 170201 JSM ABSAD STA A Pl TO UPDATE A Pl (UNSTACK) A CONTAINS A Pl AFTER UNSTACKING ALLL; TRANSFER TO A RET 1 474 475 Page 406 02363000 02364000 02365000 02366000 02367000 02368000 02369000 02370000 02371000 02372000 02373000 02374000 02375000 02376000 02377000 02378000 02379000 02380000 02381000 02382000 02383000 02384000 02385000 02386000 26137 055717 02387000 26140 067151 02388000 02389000 26141 001734 02390000 26142 031274 02391000 02392000 02393000 02394000 02395000 02396000 02397000 26143 055733 02398000 26144 067146 02399000 26145 067170 02400000 02401000 26146 005734 02402000 26147 024150 02403000 26150 035734 02404000 26151 005734 02405000 26152 035273 02406000 02407000 26153 140562 02408000 02409000 02410000 02411000 02412000 02413000 02414000 26154 076467 02415000 26155 001716 02416000 26156 010257 02417000 26157 067165 02418000 1,568,094 MATH OPTION BLOCK B (MBI 6) 475 MAX/MIN SUBROUTINE ASSUME THAT VAL CONTAINS THE ADDR OF FIRST ELEMENT OF THE ARRAY VALN" THE NUMBER OF ELEMENTS OF THE ARRAY =TI T 4 > CONTAINS THE FIRST ELEMENT OF THE ARRAY ON ENTRING MAXX; LATER ON IT WILL CONTAIN THE MAX/MIN AFTER EACH STEP OF COMPARISON DURING LOOKING FOR MAX/MIN PROCEDURE: SIMPLE LINEAR SEARCH ALGORITHM IS USED AT START WE ASSUME THAT THE FIRST ELEMENT OF THE ARRAY IS THE MAX/MIN ELEMENT WE COMPARE THAT ELEMENT WITH EACH ELEMENT OF THE ARRAY; IF WE FIND A LARGER/SMALLER ELEMENT E; WE REPLACE THE MAX/MIN BY THAT ELEMENT; PROCEED TILL YOU EXHAUST ALL THE ELEMENTS IN THE ARRAY.

MAXX DSZ T 7 IF T 7 WAS I MEANS THAT THIS IS THE FIRST TIME WE ENTER JMP MAX 4 WE ASSUME A MAX/MIN ALREADY IN OPND 2 LDA VAL POINT TO FIRST ELEMENT TO BE CHECKED STA OPND 2 POINT TO ELEMENT AS MAX/MIN PRECISSION THIS IS ASSUMED TO BE MAX/MIN UNLESS THE MAXX SUBROUTINE CONTINUES MAXI IS WHERE WE SHOULD START IF WE ARE ENTRING THE SUBROUTINE AFTER THE FIRST TIME MAXI DSZ VALN IF VALN IS O; LIST IS ALREADY EXHAUSTED JMP + 2 JMP MOUT FOUND THE MAX/MIN; CONTINUE AT MOUT MAX 4 LDB ADB STB LDB STB JSM VAL M 4 VAL VAL OPNDI ATSUI,I IFNEW =OLD B= O IFNEW> =OLD B=I IFNEW

02423000 26161 067143 JMP M 02424000 02425000 02426000 26162 001273 MAX 2 LDA O O 02427000 26163 031274 STA OQ 02428000 02429000 26164 067143 JMP M 02430000 02431000 THE CASE OF H 02432000 02433000 26165 014254 MINI 1CPB P 02434000 26166 067143 JMP N 02435000 26167 067162 JMP N 02436000 02437000 26170 170201 MOUT RET I 02439000 02440000 02441000 VMAX IS A SUB 02442000 02443000 02444000 26171 001272 02445000 26172 104000 02446000 26173 174513 02447000 26174 014131 02448000 26175 067177 02449000 26176 064733 02450000 02451000 26177 020145 02452000 26200 104000 02453000 02454000 02455000 02456000 02457000 02458000 26201 26202 26203 26204 26205 26206 024147 035734 020254 104000 174501 035733 VMAX LDA LDB SBR CPB JMP JMP E ARE HANDLING A MAX NEXT 3 lAX 1 NEW < OLD KEEP OLD PND 1 PND 2 NEW > OLD SAVE AS NEW MAX lA Xi 1 CONSIDER NEXT ELEMENT ANDLING A MIN 1 1 AX 1 NEW > OLD; SAVE OLD IAX 2 ROUTINE TO FIND STARTING ADDRESS AND NUMBER OF ES THE NUMBER OF ELEMENTS OF AN ARRAY) FAP 1 A,I 12 P 14 + 2 E 32 ADA P 2 LDB A,I ADB STB ADA LDB SBR STB M 3 VAL Pl A,I 2 VALN 02459000 26207 170201 GET TYPE ENTIRE ARRAY? EXPECTING NUMERIC DATA B CONTAINS A POINTER TO STARTING ADDRESS DIVIDE BY 4 IS THE NUMBER OF ELEMENTS IN THE ARRAY Page 407 476 476 RET 1 477 1,568,094 MATH OPTION BLOCK B (MB 16) RANDOM VALUE FUNCTION RANDOM VALUE FUNCTION ERND IS THE NAME; RND IS KEY MNEMONIC ENTRY: RND X _ EXIT: A RANDOM NUMBER BETWEEN 0 AND 1 PROCEDURE: 1 IF RND THE FRACTIONAL PART OF 29 SEED IS MULTIPLIED BY 29; THEN IT'S FRACTIONAL PART IS TAKEN TO BE THE NEW SEED AND THE RANDOM NUMER.

2IF RND(X) THE ARG X IS TAKEN AS SEED AND CONTINUE AS IN 1.

REMARK:

:,I 26217 007006 HERO 26220 043234 J Sp LD SL/ DUE TO THE POSSIBILITY OF DI 1, D 12 OF THE RANDOM NUMBER BEING ZERO DUE TO FRACTIONAL SEPARATION D 5, D 6 ARE PACKED IN PLACE OF D 1 1, D 12 OF THE NUMBER 4 AGETI,I GET THEOPERAND A OPNDI,I EXPONENT WORD A HERO IS ARG ≥ 0 LDA LDB XFR DSZ OPND 1 ASEED 4 ASEED,I LDB ASEED JSM ERNDI LDB SBR STB 26224 004340 26225 043234 RESM 2 8 T 15 LDB ARES JSM ERND 1 TO REMOVE MANTISSA SIGN ADDRESS OF SEED ERNDI ROUTINE FINDS THE FRAC OF SEED 29 TO REPLACE THE LAST TWO DIGITS ORF RANDOM NUMBER TO REPLACE THE LAST TWO DIGITS 2 AR 2 RANDOM NUMBER NOW WE HAVE A RANDOM NUMBER AND A NEW SEED WITH THE POSSIBILITY OF 10 DIGIT MANTISSA INSTEAD OF 12 TO FIX THAT WE WILL REPLACE D 1 D 12 BY D 6 D 7 LDA AND ADA STA LDA JMP RESM 3 M 256 T 15 RESM 3 ARES INTN MAKE SURE THAT DI 1, D 12 ARE 0 STOR NEW SEED 477 Page 408 ERND 02461000 02462000 02463000 02464000 02465000 02466000 02467000 02468000 02469000 02470000 02471000 02472000 02473000 02474000 02475000 02476000 02477000 02478000 02479000 02480000 02481000 02482000 02483000 02484000 02485000 02486000 02487000 02488000 02489000 02490000 02491000 02492000 02493000 02494000 02495000 02496000 02497000 02498000 02499000 02500000 02501000 02502000 02503000 02504000 02505000 02506000 02507000 02508000 02509000 0251000002511000 02512000 02513000 02514000 02515000 02516000 26210 26211 26212 26213 26214 26215 26216 140552 101273 073005 001273 007006 071403 157006 26221 26222 26223 005754 174507 035727 26226 26227 26230 26231 26232 26233 001755 050170 021727 031755 000340 067013 1,568,094 MATH OPTION BLOCK B (MB 16) 02517000 SUBR, 02518000 TO MI 02519000 BY 29.

02520000 CONTAINS THE ANSWER STB LDA STA JSM LDA STA JSM JMP OPND 1 A 29 OPND 2 AMULI,I ARES OPND 1 IFREE EFRA I TO MULTIPLY BY 29.

FIND FRACTIONAL PART IN PUT FRACTION IN 478 Page 409 478 1.568 094 MATH OPTION BLOCK B (MB 16) 02531000 02532000 02533000 02534000 02535000 MO Dt 02536000 02537000 02538000 02539000 EMOE 02540000 02541000 ENTR' 02542000 02543000 02544000 EXIT:

02545000 02546000 02547000 02548000 GET X 02549000 02550000 26244 140553 EMOD 02551000 26245 001273 02552000 26246 007077 02553000 26247 071403 02554000 02555000 26250 001274 02556000 26251 007100 02557000 26252 071403 02558000 02559000 02560000 02561000 02562000 STAR 7 02563000 DIFFE 02564000 02565000 1.

02566000 2.

02567000 02568000 IN THI 02569000 02570000 INTH 02571000 SCALI 02572000 OF Dli 02573000 GOIN( 02574000 WILL 02575000 ZER Ol 02576000 Y BY 02577000 RESU 02578000 VALUl 02579000 VALU 02580000 02581000 26253 140557 MSTA 02582000 26254 005716 02583000 26255 076411 02584000 26256 001752 02585000 26257 170405 02586000 26260 005715 JLO VALUE FUNCTION t ) IS THE NAME; MOD IS THE KEYB MNEMONIC Y: X MOD Y; WHERE X, AND Y ARE INTEGERS; Y IS CALLED THE BASE THE RISIDUE OF DIVIDING X BY Y; DEFINED AS:

X MOD Y = X INT(X/Y)Y AND Y AS AND RESPECTIVLY JSM LDA LDB XFR AGET 2,I OPND 1 FTIA LDA OPND 2 LDB FT 5 A XFR 4 TRANFER X TO TRANSFER Y TO F THE MODULO SEARCH ROUTINE RENTIATE BETWEEN TWO TYPES OF VALUES FOR X X WITH EXP < 9 X WITH EXP > 9 E FIRST CASE X MOD Y = X INT(X/Y)Y E SECOND CASE THE DEFINITION IF APPLIED WITHOUT NG WILL CAUSE ERROR DUE TO THE LIMITED NUMBER GITS IN THE MANTISSA FOR THIS SITUATION WE ARE G TO FIND X/Y AND IF THE QUOTIENT HAS EXP > 8; WE REDUCE THE LAST THREE DIGITS OF THAT QUOTIENT TO S AND REDUCE THE EXPONENT TO 8 MULTIPLY THE BASE HAT AMOUNT (SCALED QUOTIENT) SUBTRACT THE LT FROM THE ORIGNAL X AND REPLACE X BY THAT E; CONTINUE THIS SCALING TILL YOU REACH A SAFE E FOR X TO APPLY THE DEFINITION OF MOD ON.

JSM ADIVI,I X/Y LDB T 6 SZB MZERO IF Y= O; RETURN ZERO LDA RESE AAR 6 LDB T 5 479 Page 410 479 1,568,094 MATH OPTION BLOCK B (MB 16) 26261 26262 26263 176003 010042 067266 26264 023076 MSTA.

26265 172410 26266 26267 26270 26271 26272 26273 26274 SBP MSTA.

CPA B 777 IS EXP(X)-EXP(Y)≥ 511 JMP MZERO RETURN ZERO; OTHERWISE MACHINE WILL TAKE FOREVER 10 ADA M 9 SAM MCONT EXP DIFF< 9; SAFE TO USE X-INT(X/Y)Y GIVE A ZERO FOR ANSEWER 000340 MZERO 071603 170201 001273 004340 071403 170201 LDA ARES CLR 4 RET 1 RETURN A ZERO MODT LDA OPND 1 LDB ARES XFR 4 RETURN X=XMODY RET I COUNT THE MODULO ACCORDING TO THE GOLDEN RULE X MOD Y = X INT(X/Y)Y 26275 000340 MCONT 26276 007101 26277 071403 26300 035273 26301 043432 26302 000340 26303 031273 26304 003100 26305 031274 26306 140556 MCONI 26307 000340 26310 031274 26311 003077 26312 031273 26313 140555 26314 170201 LDA LDB XFR STB JSM LDA STA LDA STA JSM LDA STA LDA STA JSM RET ARES FT 9 A 4 OPND 1 EINT.

FIND INTEGER PART ARES OPND 1 FT 5 A OPND 2 AMULI,I ARES OPND 2 FTIA OPNDI ASUB 1,I I Page 411 02587000 02588000 02589000 02590000 02591000 02592000 02593000 02594000 02595000 02596000 02597000 02598000 02599000 02600000 02601000 02602000 02603000 02604000 02605000 02606000 02607000 02608000 02609000 02610000 02611000 026 J 2000 02613000 02614000 02615000 02616000 02617000 02618000 02619000 02620000 02621000 02622000 02623000 02624000 02625000 480 480 1,568,094 MATH OPTION BLOCK B (MB 16) 481 FRACTION VALUE FUNCTION EFRAC IS THE NAME; KEYB MNEMONIC IS FRAC ENTRY IS A SINGLE ARG.

EXIT IS THE FRACTIONAL PART IN THE MATHEMATICAL, (NOT ARITHMETIC) SENSE THIS FUNCTION USES SUBROUTINE FREEK TO ACCOMPLISH FRACTION SEPARATION OF ABSOLUTE VALUE 043332 EFRAC EEFR 073007 JSM LDA SLA FREEK GO TO FRACTION SEPARATION ROUTINE AR 2 E EFRAI IF MANTISSA IS≥ 0; GO TO EFRAC ROUTINE ADD TO FRACTION 1.

000172 031273 000127 031274 140554 170201 000127 EFRAI 004340 071403 170201 LDA STA LDA STA JSM RET LDA LDB XFR RET AONE OPNDI AR 2 A OPND 2 AADDI,I 1 AR 2 A ARES 4 481 Page 412 02627000 02628000 02629000 02630000 02631000 02632000 02633000 02634000 02635000 02636000 02637000 02638000 02639000 02640000 02641000 02642000 02643000 02644000 02645000 02646000 02647000 02648000 02649000 02650000 02651000 02652000 02653000 02654000 02655000 02656000 26315 26316 26317 26320 26321 26322 26323 26324 26325 26326 26327 26330 26331 1,568,094 MATH OPTION BLOCK B (MB 16) SUBROUTINE FREEK FOR FRACTIONAL VALUE SEPARATION ENTRY: ARG ON TOP OF EXECUTION STACK EXIT: FRACTIONAL VALUE 26332 140552 FREEK 26333 001273 IFREE 26334 004127 26335 071403 26336 004020 26337 176424 26340 174505 000255 020001 172021 024254 000177 LEFT 075541 26347 024257 26350 076075 JSM LDA LDB XFR LDB SBM AGETI,I OPNDI AR 2 A 4 TRANSFER ARG TO AR 2 E NOACT ARG IS ALREADY A FRACTION; NO INTEGER PART TO REMOVE SBR 6 LDA ADA SAP ADB LDA MLY M 12 B NOFRC Pl PO ADB M 1 RZB LEFT 071500 014133 067364 174040 024257 174605 050254 060001 26362 030020 26363 170201 26364 000127 27365 071603 26366 170201 NRM CPB P 12 JMP NOFRC TCB ADB Ml SBL 6 LDA AR 2 E AND Pl IOR B NOACT NOFRC NOFRC STA AR 2 E RET I LDA CLR RET AR 2 A 4 EXP-12 IF EP-12 ≥ O THER IS NO FRACTION PART SHIFT MANTISSA LEFT TO REMOVE ONE DIGIT OF INTEGER PART CONTINUE IN THE LOOP OF SHIFTING LEFT A CASE OF ALL ZEROS MANTISSA RETURN A ZERO TO SAVE THE MANTISSA SIGN TO INCLUDE THE SIGN OF THE MANTISS WITH FRACTION NEW EXPONENT WORD ANSWER IS 0.

Page 413 02658000 02659000 02660000 02661000 02662000 02663000 02664000 02665000 02666000 02667000 02668000 02669000 02670000 02671000 02672000 02673000 02674000 02675000 02676000 02677000 02678000 02679000 02680000 02681000 02682000 02683000 02684000 02685000 02686000 02687000 02688000 02689000 02690000 02691000 02692000 02693000 02694000 02695000 02696000 02697000 02698000 02699000 02700000 02701000 26341 26342 26343 26344 26345 26346 26351 26352 26353 26354 26355 26356 26357 26360 26361 482 482 1,568,094 MATH OPTION BLOCK B (MB 16) RETURN SIGN FUNCTION ESGN IS THE NAME; SGN IS KEYB NEUMONIC ENTRY: ARGUMENT ON TOP OF EXECUTION STACK EXIT: + 1; IF ARG WAS FOUND POSITIVE 0 0 IF ARG WAS FOUND TO BE ZERO -1; IF ARG WAS FOUND TO BE NEGATIVE , 140552 ESGN 000172 004340 071403 26373 101273 26374 050254 26375 031752 26376 045273 26377 101273 26400 072007 JSM LDA LDB XFR LDA AND STA ISZ LDA RZA 26401 067266 AGET 1,I AONE ARES OPNDI,I Pl RESE OPND 1 OPND,I EABSE JMP MZERO GET ONE OPERAND STORE 1 IN LOAD EXPONENT WORD GET MANTISS SIGN IT IS THE SIGN OF TTOO THE FIRST WORD OF MANTISS A IN A IF IT WAS NOT A ZERO RETURN CLEAR 483 Page 414 02704000 02705000 02706000 02707000 02708000 02709000 02710000 02711000 02712000 02713000 02714000 02715000 02716000 02717000 02718000 02719000 02720000 02721000 02722000 02723000 02724000 02725000 02726000 02727000 02728000 02729000 26367 26370 26371 26372 483 484 1 568 094 4 R 4 MATH OPTION BLOCK B (MB 16) ABSOLUTE VALUE FUNCTION EABS IS THE NAME; ABS IS THE KEYB NEUMONIC ENTER: ARG ON TOP OF EXECUTION STACK EXIT: ABSOLUTE VALUE 26402 140552 EABS 26403 043271 001752 050146 031752 170201 EABSE JSM AGETI,I JSM MODT OPND 1 INTO RES LDA AND STA RET RESE M 2 RESE I GET THE EXPONENT REMOVE THE MANTISSA SIGN :

INTEGER EXECUTION VALUE FUNCTION EDINT IS THE NAME; DINT IS THE KEYB MNEMONIC ENTRY: IS THE SINGLE ARG.

EXIT: THE INTEGER PART OF THE EQUIVALENT ABSOLUTE VALUE 2 21 21 2 6410 6411 6412 6413 6414 105273 174405 176002 067266 024155 IDINT DINTI.

DINT 2 26415 176402 26416 067271 DINT 3 26417 174040 26420 035762 26421 001273 26422 004127 26423 071403 26424 005762 26425 000177 26426 075500 26427 071500 DINT 4 26430 067326 LDB OPNDI,I ABR 6 SBP + 2 JMP MZERO ADB M 1 1 SBM + 2 JMP MODT TCB STB MTI LDA OPNDI LDB AR 2 A XFR 4 LDB MTI LDA PO MRY NRM JMP EFRAI CLEAR IF THE EXPONENT IS ≥ 11, RETURN THE ARGUMENT OPNDI INTO B =NO OF DIGITS TO RIGHT SHIFT OUT OF AR 2.

TRANSFER THE ARGUMENT TO AR 2 PERFORM THE RIGHT SHIFT.

TO Page 415 02731000 02732000 02733000 02734000 02735000 02736000 02737000 02738000 02739000 02740000 02741000 02742000 02743000 02744000 02745000 02746000 02747000 02748000 02749000 02750000 02752000 02753000 02754000 02755000 02756000 02757000 02758000 02759000 02760000 02761000 02762000 02763000 26404 26405 26406 26407 02765000 02766000 02767000 02768000 02769000 02770000 02771000 02772000 02773000 02774000 02775000 02776000 02777000 02778000 02779000 02780000 02781000 02782000 02783000 484 1,568,094 484 485 Page 416 02785000 02786000 02787000 02788000 02789000 02790000 02791000 02792000 02793000 02794000 02795000 02796000 02797000 26431 02798000 26432 02799000 26433 02800000 26434 02801000 26435 02802000 26436 02803000 02804000 02805000 02806000 02807000 26437 02808000 26440 02809000 26441 02810000 26442 02811000 26443 02812000 26444 02813000 26445 02814000 26446 02816000 1,568,094 MATH OPTION BLOCK B (MBI 6) 485 INTEGER VALUE FUNCTION THIS IS THE INTEGER VALUE ACCORDING TO THE MATHEMATICAL DEFINITION AS (THE FLOOR ACCORDING TO APL NOTATION) ENTRY: A SINGLE ARG.

EXIT: THE LARGES INTEGER SMALLER OR EQUAL TO ARG.

140552 El 043410 El 001273 031274 000340 031273 140562 076406 014144 067446 000172 031274 140555 170201 NT JSM AGETI,I GETARG.

NT JSM IDINT GO TO DECIMAL SEPAR LDA OPND 1 STA OPND 2 POINT TO ARG AS OPND 2 LDA ARES STA OPND 1 POINT TO DINT AS OPND 1 IF THE ARG WAS POSITIVE DINT=INT; GO TO INT 1 ATION ROUTINE IF THE INTEGER IS ZRO WE SHOULD CHECK IF THE ARG WAS A ZERO OR IT WAS A FRACTION WITH ABS VALUE > 1 JSM ATSUI,I FIND DINT-ARG SZB INT 1 IF ARG WAS INTEGER INT=DINT CPB P 3 JMP INTI LDA AONE POINT TO FL 1.

STA OPND 2 JSM ASUB 1,I ADD-1 TO DINT TO GET INT INT 1 RET 1 END END OF PASS 2 NO ERRORS DETECTED Page 417 00003000 76550 00004000 02000000 02001000 02003000 00505 02004000 00505 026476 02005000 00506 026571 02006000 00507 027034 02007000 00510 026755 02008000 00511 026765 02009000 00512 026773 02010000 00513 026775 02011000 00514 027025 02012000 00515 027101 02013000 00516 027116 02014000 00517 027216 02015000 00520 027262 02016000 00521 027132 02017000 00522 027062 02018000 00523 027170 02019000 02020000 00575 02021000 00575 026714 02022000 00576 026717 BASE-PAGE READ-WRITE-MEMORY ORG 76550 B UNL LST ORG DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF ORG DEF DEF APGET PGET PNUM INTCK GLENL GLEOL FLADR FLINA SLLN STKEX UNSTK AJINS AJDEL STKPT DIGXX GLNUM DIGIT CHECK ROUTINE GET LINE NUMBER AFXD EFIX EFLT 1,568,094 Page 418 02025000 02026000 26476 02027000 02028000 02029000 02030000 02031000 02032000 02033000 02034000 02035000 02036000 02037000 02038000 02039000 02040000 02041000 02042000 02043000 02044000 02045000 02046000 26476 02047000 26477 02048000 26500 02049000 26501 02050000 26502 02051000 26503 02052000 26504 02053000 26505 02054000 26506 02055000 02056000 02057000 02058000 02059000 02060000 26507 02061000 26510 02062000 26511 02063000 26512 02064000 26513 02065000 26514 02066000 26515 02067000 26516 02068000 26517 02069000 26520 02070000 26521 02071000 26522 02072000 26523 02073000 26524 02074000 26525 02075000 26526 02076000 26527 02077000 26530 02078000 26531 02079000 26532 02080000 26533 CONTROL AND I/O SUPERVISOR ROUTINES ORG 26476 B GET NEXT PARAMETER FROM PRINT LIST ENTRY: LDA FLAG JSM PGET EXIT:

005217 PGET 035216 172003 140610 067505 140607 PGETN 170201 040751 PGET O 067645 TO GET FIRST PARAMETER LDA N N=# PLACES TO BUMP FA Pl (N=I FOR NEXT PARAMETER), N≥ 0 JSM PGET TO GET SUBSEQUENT PARAMETERS RETURN P + 1: PARAMETER LIST EXHAUSTED RETURN P + 2: NEXT PARAMETER FETCHED A= 0:NUMERIC, I:STRING B= CHARACTER COUNT D= BYTE ADDRESS OF FIRST CHARACTER IF B=-1, BUILDING OUTPUT STRING WAS NOT POSSIBLE A=PARAMETER CLASS LDB STB SAP JSM JMP JSM RET JSM JMP WPRT SET FIX/FLT INDICATOR SIOCP PGETN ACOUN,I PGET O ABUMP,I 1 RETURN 1 IF LIST EXHAUSTED NGET GET NEXT NUMBER PGETC IT WASN'T NUMERIC, SO CHECK IT FOR STRING THIS SECTION PROCESSES A NUMERIC ITEM 000001 PNNUM 004336 071403 035273 000254 031713 140551 000305 030017 105273 043671 001216 172002 067574 174405 035712 170503 050130 031711 020001 022464 LDA LDB XFR STB LDA STA JSM LDA STA LDB JSM LDA SAP JMP ABR STB SAR AND STA ADA ADA 8 AO Pl PUT THE VALUE IN O Pl 4 OPND 1 SAVE ADDRESS FOR ROUND ROUTINE Pl T 3 SET INITIAL COUNT TO I AFLTC,I CHECK FOR RANGE E+/-99 ASTAK GET ADDRESS-1 OF COMPILE STACK D AND INITIALIZE BUFFER POINTER OPND 1 +I GET EXPONENT WORD PSIGN AND DUMP THE +/ CHARACTER SIOCP GET THE FIXED/FLOAT FLAG + 2 IS IT FIXED? PFLT NO PROCESS FLT FORMAT 6 B=EXPONENT T 2 4 A=N(FIXED) P 15 TI 8 A=N+E M 14 CHECK FOR COUNT ≥ 15 486 486 1,568,094 Page 419 02081000 26534 02082000 26535 02083000 26536 02084000 26537 02085000 26540 02086000 02087000 02088000 02089000 26541 02090000 26542 02091000 26543 02092000 26544 02093000 26545 02094000 26546 02095000 26547 02096000 26550 02097000 26551 02098000 26552 02099000 26553 02100000 26554 02101000 26555 02102000 26556 02103000 26557 02104000 26560 02105000 26561 02106000 26562 02107000 26563 02108000 26564 02109000 26565 02110000 26566 02111000 26567 02112000 26570 02113000 02114000 02115000 02116000 02117000 26571 02118000 26572 02119000 26573 02120000 02121000 02122000 02123000 02124000 02125000 26574 02126000 26575 02127000 26576 02128000 26577 02129000 26600 02130000 26601 02131000 26602 02132000 26603 02133000 26604 02134000 26605 02135000 26606 02136000 26607 CONTROL AND I/O SUPERVISOR ROUTINES 172405 005216 174600 001216 176034 SAM PFIX LDB SIOCP SBL 1 LDA SIOCP SBP PFLT NO, DO A FIXPT OUTPUT YES, CHECK IF FLT REVERSION IS OK POSITION BIT 14 FOR CHECK GET FIX/FLT WORD JUST IN CASE IF OK, REVERT TO FLOAT THIS SECTION BUILDS A FIXED POINT NUMBER 005711 PFIX 174040 173201 000544 020144 140000 000340 004127 071403 014001 174405 176011 174040 000001 170503 072402 004133 000177 075500 004177 024254 PFIX 1 043676 005713 067641 LDB Tl TCB SOC + 1, LDA A Pl ADA P 3 JSM A,I LDA ARI LDB ADl XFR 4 LDB B,I ABR 6 SBP PFI' TCB LDA B SAR 4 SZA + 2 LDB P 12 LDAPO MRY LDB PO ADB Pl JSM PDI LDB T 3 JMP P Ot C RND ES R 2 Xl UMP JT B=N SET B=-N FOR PROUD ROUTINE CLEAR OVF FOR ROUND ROUTINE JUMP IN AT PRND+ 3 PUT ROUNDED RESULT IN AR 2 GET EXPONENT WORD B=EXPONENT IF B POS, ALL OK OTHERWISE, SHIFT E+ 1 ZEROS INTO AR 2 IFB> 15 USE 12 SET UP FOR MRY AND SHIFT IN B ZEROS SET B= 0 FOR NO CHARACTERS BEFORE DP SET ONE MORE LEADING DIGIT OUTPUT THE NUMBER TO BUFFER GET CHARACTER COUNT AND GET OUT ROUTINE TO PROCESS A NUMERIC ITEM 001217 PNUM 031216 067507 LDA STA JMP WPRT SET FIX/FLT INDICATOR SIOCP PNNUM THIS SECTION BUILDS A FLOATING POINT NUMBER 050130 PFLT 031711 001273 004127 071403 005711 024254 140547 100127 170405 020206 AND STA LDA LDB XFR LDA LDB ADB JSM LDA AAR ADA P 15 Tl OPNDI ADR 2 4 P 7 Tl Pl ARND,I ADR 2,I 6 M 100 SAVE N(FLOAT) PUT THE NUMBER IN AR 2 FOR ROUNDING SET FOR ROUND TYPE SET FOR ROUND ON DIGIT N+ I AND DO IT.

GET EXPONENT WORD A=EXPONENT CHECK FOR ROUND OVERFLOW 487 487 1,568,094 CONTROL AND I/O SUPERVISOR ROUTINES 26610 172404 26611 000336 26612 004127 26613 071403 26614 004254 26615 043676 26616 000063 02144000 26617 074550 26620 26621 26622 26623 26624 26625 26626 26627 26630 26631 26632 26633 26634 26635 26636 26637 26640 26641 26642 26643 26644 26645 26646 26647 26650 26651 26652 26653 104127 174716 043671 000257 174700 174405 176002 174040 024207 020254 176076 020103 074550 024077 074551 004143 025713 000325 POUT 030017 000177 170202 SAM LDA LDB XFR LDB JSM LDA PDB LDB RBR JSM LDA RBR ABR SBP TCB ADB ADA SBP ADA PBD ADB PBD LDB ADB LDA STA LDA RET + 4 AO Pl ADR 2 4 Pl PDUMP B 145 A,I ADR 2,I PSIGN Ml 1 6 + 2 M 10 Pl -2 P 48 A, P 58 B,I P 4 T 3 ACSTF D PO IF A< 0, THEN E< 100 AND ALL IS OK IF A= 0, USE ORIGINAL NUMBER SET FOR I CHAR, BEFORE DP OUTPUT MANTISSA TO BUFFER B 145 = ASCII LOWER CASE E FOR EXPONENOUTPUT THE "E" GET EXPON WORD POSITION EXP SIGN BIT FOR TEST OUTPUT A +/SET A FOR EXPONENT COUNT SUBTRACT 10 ADD INCREMENT COUNT UNTIL B GOES NEGATIVE MAKE COUNT IN A AN ASCII NUMBER AND SEND 10 'S DIGIT RESTORE LAST 10, AND MAKE ASCII AND SEND UNITS DIGIT SET COUNT TO 4 FOR "E+XX" ADD IN PREVIOUS COUNT SET D TO FIRST BYTE OF COMPILER STACK BUFFER SET FOR NUMERIC RESULT AND GET OU Tlll THIS SECTION CHECKS A NON-NUMERIC FOR A STRING THIS SECTION CHECKS A NON-NUMERIC FOR A STRING 101272 PGETC 010221 170201 004000 174601 176003 004257 26654 170202 LDA CPA RET LDB SBL SBP LDB RET 2 FAPI,I NWWD 1 A 2 PSTR MI THIS PROCESSES A STRING 26655 172005 PSTR 26656 141324 26657 030017 PSTRE 26660 000254 26661 170202 26662 001272 PSTRC 26663 020144 26664 104000 26665 020257 26666 100000 26667 021272 GET ORIGINAL WHAT WORD SEE IF NUMERIC EMPTY LIST IF SO AND COPY INTO B CHECK BIT 13 IF ZERO, THIS IS A STRING SET B=-I FOR "SOMETHING ROTTEN IN DENMARK" AND GIVE IT UP SAP PSTRC IF A POS,STRING CONSTANT JSM AKOUN,I IF A NEG,CALL ON STRING ROM FOR WHERE,COUNT ADDRESS OF KOUNT IN $ROM STA D SET BYTE ADDR OF START OF STRING LDA Pl SET A FOR STRING RESULT RET LDA ADA LDB ADA LDA ADA FA Pl P 3 AI M 1 A,I FA Pl POINT TO LENGTH B = COUNT OF CHARACTERS PT TO WHERE WORD GET WHERE WORD FIND ADDR OF FIRST CHAR Page 420 02137000 02138000 02139000 02140000 02141000 02142000 02143000 02145000 02146000 02147000 02148000 02149000 02150000 02151000 02152000 02153000 02154000 02155000 02156000 02157000 02158000 02159000 02160000 02161000 02162000 02163000 02164000 02165000 02166000 02167000 02168000 02169000 02170000 02171000 02172000 02173000 02174000 02175000 02176000 02177000 02178000 02179000 02180000 02181000 02182000 02183000 02184000 02185000 02186000 02187000 02188000 02189000 02190000 02191000 02192000 488 488 489 1,568,094 489 CONTROL AND I/O SUPERVISOR ROUTINES 02193000 26670 067657 02194000 02195000 02196000 02197000 26671 000117 02198000 26672 077002 02199000 26673 000106 02200000 26674 074550 02201000 26675 170201 02202000 02203000 26676 043704 02204000 26677 005711 02205000 26700 076413 02206000 02207000 02208000 02209000 02210000 02211000 02212000 02213000 02214000 02215000 02216000 02217000 02218000 02219000 02220000 02221000 02222000 02223000 02224000 02225000 02226000 02227000 02228000 02229000 26701 26702 26703 26704 26705 26706 26707 26710 26711 26712 26713 JMP PSTRE SUBROUTINES SUBROUTINES PSIGN DUMP PDUMP 074550 045713 000177 PDUMB 075541 020103 074550 045713 054001 067704 170201 PRET 1 LDA SLB LDA PBD RET JSM LDB SZB P 32 + 2 P 45 A,I PDUMB Tl PRET 1 LDA P 46 PBD A,I ISZ T 3 LDA PO MLY ADA P 48 PBD A,I ISZ T 3 DSZ B JMP PDUMB RET 1 A=ASCII BLANK IF MANTISSA POSITIVE, KEEP BLANK OTHERWISE, USE MINUS OUTPUT IT DUMP B LEADING DIGITS GETN IF N= 0, NO DECIMAL OR DIGITS FOLLOW IF N> 0, SEND DECIMAL POINT AND BUMP COUNT SET FOR MLY TO SHIFT IN ZEROS SHIFT OUT NEXT DIGIT MAKE IT ASCII SEND IT AND BUMP COUNT LOOP UNTIL B= 0 FIXED AND FLOAT EXECUTION 26714 26715 26716 26717 26720 26721 26722 26723 001217 EFIX 172201 067721 001217 EFLT 172301 031217 EFIX 1 140610 040751 02230000 26724 067751 02231000 02232000 02233000 02234000 02235000 02236000 02237000 02238000 02239000 02240000 02241000 02242000 02243000 02244000 02245000 02246000 02247000 02248000 26725 26726 26727 26730 26731 26732 26733 26734 26735 26736 26737 26740 26741 26742 26743 26744 26745 000001 040644 173405 176404 000001 020255 172403 140404 ERFFL 030467 001217 172004 050160 060001 067747 170703 EFL 3 050160 060001 LDA SAP JMP LDA SAP STA JSM JSM JMP LDA JSM SOS SBM LDA ADA SAM, JSM ASC LDA SAP AND IOR JMP RAR AND IOR WPRT +I,C EFIX 1 WPRT + 1,S WPRT ACOUN,I NGET NONUM B FIXPT ERFFL ERFFL B M 12 + 3 AERR 1,I 1,17 WPRT EFL 3 M 16 B EFL 2 4 M 16 B GET CURRENT WPRT SET FIXED GET CURRENT WPRT SET FOR FLOAT PUT IT BACK FOR NOW HOW MANY PARAMETERS ONE: FIND IT NOT NUMERIC, GIVE AN ERROR IF NOT NULL OK; MOVE IT TO A AND MAKE AN INTEGER OUT OF RANGE; GIVE ERROR OUT OF RANGE TEST FOR > 11 OK, CONT.

GIVE ERROR 17 FIX/FLT ? PUT B INTO FLOAT POSITION AND CLEAN UP PUT B INTO FIXED POSITION Page 421 489 1,568,094 489 1,568,094 CONTROL AND I/O SUPERVISOR ROUTINES 02249000 26746 02250000 26747 02251000 26750 02252000 02253000 26751 02254000 26752 02255000 26753 02256000 26754 02257000 02258000 02259000 02260000 02261000 02262000 02263000 02264000 02265000 02266000 26755 02267000 26756 02268000 26757 02269000 26760 02270000 26761 02271000 26762 02272000 26763 02273000 26764 02274000 02275000 02276000 02277000 02278000 02279000 02280000 02281000 02282000 26765 02283000 26766 02284000 26767 02285000 26770 02286000 26771 02287000 26772 02288000 02289000 02290000 02291000 02292000 02293000 02294000 02295000 170713 031217 164365 010140 164365 140404 030470 EFL 2 EFOUT RAR STA JMP NONUM CPA JMP ERUND JSM ASC 12 WPRT AINTX,I P 7 AINTX,I AERRI,I 1,18 PUT FINAL VALUE BACK BACK TO INTERPRETER IS IT THE NULL PARAMETER? YES, RETURN TO INTERPRETER NON-NUMERIC PARAMETER GET LENGTH OF LINE GET LENGTH OF LINE ENTRY: INFO IN COMPILE BUFF EXIT: TMP 4 = LINE LENGTH+I = A 043765 GLENL 004016 GLEN 2 000302 140362 020142 170500 031234 170201 JSM GLEOL LDB C LDA ACBFX JSM AFBAD,I ADA P 5 SAR 1 STA TMP 4 RET 1 FIND EOL ADDRESS GET HIGH CHAR POINTR FIND BYTE ADDR DIFF ROUND UP, ADD 2 WORDS MAKE WORDS SAVE LINE LENGTH GLEOL GET EOL ADDR IN COMPILE BUFF EXIT B CONTAINS 177 B, C POINTS TO BYTE BEFORE EOL 000305 GLEOL 030016 074761 GLENI 014053 170201 067767 02296000 02297000 02298000 02299000 02300000 02301000 02302000 02303000 02304000 26773 005226 LDA STA WBC CPB RET JMP ACLMT C B,D EOL 1 GLENI END ADDR OF COMPILER SET POINTER GET A BYTE END OF LINE? YES, RETURN NO, CONTINUE FLADR, FLINA FINDLINE ADDRESS FLADR ENTRY LINE NO IN LNO FLINA ENTRY LINE NO IN TMP 7 EXITLNO CHANGED TO -I 1 IF A NULL PROGRAM RET P+ 2 A = S/A OF LINE RET P + I LINE NOT FOUND OR NULL PROGRAM B CONTAINS LAST LINE NO OR -1 K ALSO CONTAINS LINE # IF NOT A NULL PROG FLADR LDB LNO GETLINENO.

FLADR LDB LNO GET LINE NO.

Page 422 490 490 1,568,094 CONTROL AND I/O SUPERVISOR ROUTINES 02305000 26774 035233 02306000 26775 001307 FLINA 02307000 26776 011277 02308000 26777 066023 02309000 27000 004177 02310000 27001 035224 02311000 27002 104000 FLADI 02312000 27003 174610 02313000 27004 174510 02314000 27005 035722 02315000 27006 024000 02316000 27007 015277 02317000 27010 066017 02318000 27011 005224 02319000 27012 015233 02320000 27013 170202 02321000 02322000 27014 045224 02323000 27015 021722 02324000 27016 066002 02325000 27017 005224 FLAD 2 02326000 27020 015233 02327000 27021 170202 02328000 27022 170201 02329000 02330000 27023 004257 SLLN 1 02331000 27024 066032 02332000 02333000 02334000 SET "I 02335000 02336000 IF NUl 02337000 02338000 02339000 27025 000263 SLLN 02340000 27026 031226 02341000 27027 043773 02342000 27030 066032 02343000 27031 140424 02344000 27032 035226 SLLN 2 02345000 27033 170201 02346000 02347000 02348000 BUILI 02349000 02350000 ENTR 02351000 02352000 02353000 EXIT:

02354000 02355000 02356000 02357000 02358000 27034 004177 INTCK 02359000 27035 035224 02360000 27036 042061 STB TMP 7 LDA FWUP CPA END$ JMP SLLN 1 LDB PO STB K LDB A,I SBL 9 SBR 9 STB T 10 ADBA CPB ENDS JMP FLAD 2 LDBK CPB TMP 7 RET 2 ISZ K ADA T 10 JMP FLADI LDBK CPB TMP 7 RET 2 RET I LDB M 1 JMP SLLN 2 SAVE IT FIRST WORD OF USER PROGRAM NULL PROGRAM? SET LNO =-1 IF A NULL PROG INITIALIZE LINE COUNT GET LINE BRIDGE GET LENGTH OF LINE AND SAVE IT B = S/A OF NEXT LINE END OF PROGRAM? YES GET LINE NO.

LINE FOUND? YES INCREM LINE COUNT A = S/A OF NEXT LINE CONT GET LINE NO.

LINE FOUND? YES SET LNO TO-I LNO" TO VALUE OF LAST LINE NO.

LL PROG; SET "LNO" = -1 LDA STA JSM JMP JSM STB RET MAXLN LNO FLADR SLLN 2 ASYER,I LNO MAX LINE NO.

SET LNO TO-I OR LAST LINE NO.

LINE SHOULD NOT BE FOUND ERROR IF FOUND SET LNO D AN INTEGER AND CHECK THE MAX VALUE Y: A = FIRST CHAR B = INTEGER "L" GNEXT POINTR HAS BEEN ADVANCED LDB STB JSM PO K DIGCK INITIALIZE PARTIAL RESULT FIRST CHAR A DIGIT? 491 Page 423 491 1,568,094 CONTROL AND I/O SUPERVISOR ROUTINES 02361000 27037 066047 02362000 27040 042061 INTCI 1 02363000 27041 066057 02364000 27042 001224 02365000 27043 035224 02366000 27044 004135 02367000 27045 075617 02368000 27046 076403 02369000 27047 140404 ERINT 02370000 27050 030461 02371000 02372000 27051 172476 02373000 27052 021224 02374000 27053 172474 02375000 27054 031224 02376000 27055 140501 02377000 27056 066040 02378000 27057 005224 INTC 2 02379000 27060 170201 02380000 02381000 02382000 CHEC 02383000 02384000 DIDCl 02385000 DIGX' 02386000 02387000 02388000 EXIT::

02389000 02390000 02391000 02392000 02393000 27061 006465 DIGCK 02394000 27062 035221 DIGXX 02395000 27063 174507 02396000 27064 174140 02397000 27065 024000 02398000 27066 176012 02399000 27067 005221 02400000 27070 174707 02401000 27071 174507 02402000 27072 174040 02403000 27073 024000 02404000 27074 176404 02405000 27075 004000 02406000 27076 024163 02407000 27077 170202 02408000 02409000 27100 170201 DIGI 02410000 02411000 02412000 02413000 02414000 STKE:

02415000 02416000 JMP JSM JMP LDA STB LDB MPY SZB JSM ASC SAM ADA SAM STA JSM JMP LDB RET ERINT DIGCK INTC 2 K K P O lo + 3 AERRI,I 1,11 ERINT K ERINT K AGNXT,I INTC 1 K NO IS IT A DIGIT? NO GET PARTIAL RESULT SAVE LATEST DIGIT MULTIPLY PARTIAL RESULT BY 10 INTEGER WITHIN "A" ? NO; ERROR SKIP ON "A" TOO LARGE ADD LATEST DIGIT SKIP ON OVERFLOW SAVE PARTIAL RESULT GET NEXT CHARACTER CONT GET INTEGER K FOR A DIGIT K ENTRY A = CHARACTER X ENTRY B = LOW LIMIT (LOWER HALF) AND HIGH LIMIT (UPPER HALF) WITH A = CHARACTER RET P+ 1 NOT FOUND RET P+ 2 FOUND; ASCII IN A; DIGIT IN B LDB STB SBR CMB ADB SBP LDB RBR SBR TCB ADB SBM LDB ADB RET DLIMT PLADD A DIGI PLADD 8 A DIG 1 A M 48 GET DIGIT LIMITS SAVE LIMITS GET UPPER LIMIT ONES COMPLEMENT ADD ASCII CODE SKIP IF CODE EXCEEDS UPPER LIMIT GET LIMITS GET LOWER LIMITS MAKE NEG.

ADD ASCII CODE SKIP IF CODE LESS THAN LOWER LIMIT CODE WITHIN LIMITS GET BINARY DIGIT RET I X STACK INFO BEFORE EXECUTION 492 Page 424 492 49 1,6,9 493 CONTROL AND I/O SUPERVISOR ROUTINES 02417000 02418000 27101 000147 STKEX 02419000 27102 042132 02420000 27103 032060 02421000 27104 001264 02422000 27105 070550 02423000 27106 000017 02424000 27107 050344 02425000 27110 020147 02426000 27111 004257 02427000 27112 134000 02428000 27113 031261 02429000 27114 031263 02430000 27115 170201 02431000 02432000 02433000 02434000 UNSTK 02435000 02436000 02437000 02438000 27116 101261 UNSTK 02439000 27117 010257 02440000 27120 066124 02441000 27121 021300 02442000 27122 031261 02443000 27123 066116 02444000 27124 0001261 UNSTI 02445000 27125 020254 02446000 27126 042160 02447000 27127 070770 02448000 27130 031264 02449000 27131 170201 02450000 02451000 02452000 02453000 STKPT 02454000 02455000 02456000 02457000 02458000 02459000 02460000 02461000 02462000 02463000 02464000 02465000 02466000 02467000 02468000 27132 021263 STKPT 02469000 27133 020257 02470000 02471000 02472000 27134 005310 27135 174140 27136 024000 LDA JSM ASC LDA PWD LDA AND ADA LDB STB STA STA RET M 3 STKPT 1,40 LEND A,I D MAW M 3 Ml A,I AP 3 A Pl PUT RELATIVE AP 3, A Pl ON THE EXECUTION STACK STACK OVERFLOW ERROR # PUT LEND ON THE STACK ALSO GET STACK PTR CLEAR BIT 15 PT TO LOCATION TO PUT -1 ON STACK PUT -1 ON STACK NEW BOTTOM OF STACK SET NEW STACK POINTERS UNSTACK INFO AFTER EXECUTION LDA AP 3,I CPA Ml JMP UNSTI ADA AP 2 STA AP 3 JMP UNSTK LDA AP 3 ADA Pl JSM UNSPT WWDA STA LEND RET I STRIP OFF GOSUBS BY LOOKING FOR-1 MAKE AN ABSOLUTE ADDRESS #-I SO KEEP LOOKING GET PTR BUMP PAST THE-I UNSTACK RELATIVE AP 3, A Pl GET LEND FROM THE STACK ROUTINE THAT PUTS AP 3, A Pl ON THE EXECUTION STACK CALLED BY LDA M# JSM ASTKG,I ASC 1, ERROR# WHERE M# IS THE NEG OFFSET FROM A Pl TO PUT THE RELATIVE AP 3 IF STACK OVERFLOW OCCURS JMP AERRI,I IS EXECUTED ON RETURN D POINTS TO WHERE A Pl IS LOCATED ON THE STACK AP 3.

A Pl POINTS TO THE AP 3 ON THE STACK (NEW TOP OF THE STACK) ADA A Pl ADA Ml LDB RMAX CMB ADB A A NOW POINTS TO LOCATION TO PUT AP 3 ALLOW AN EXTRA WORD AND SET FOR TRANSFER SEE IF MEM OVERFLOW -STACK LIMIT Page 425 493 1,568,094 493 1,568,094CONTROL AND I/O SUPERVISOR ROUTINES 02473000 27137 02474000 02475000 27140 02476000 02477000 27141 02478000 27142 02479000 27143 02480000 02481000 27144 02482000 27145 02483000 27146 02484000 02485000 27147 02486000 27150 02487000 27151 02488000 02489000 27152 02490000 27153 02491000 27154 02492000 27155 02493000 27156 02494000 27157 02495000 02496000 02497000 02498000 02499000 02500000 02501000 02502000 02503000 02504000 27160 02505000 02506000 27161 02507000 27162 02508000 27163 02509000 02510000 27164 02511000 27165 02512000 27166 02513000 02514000 27167 02515000 02616000 02517000 02518000 02519000 02520000 02521000 02522000 02523000 02524000 02525000 02526000 02527000 27170 02528000 27171 176002 164404 030017 STKI 001300 170040 005261 024000 070551 005263 024000 070551 000017 050344 020257 031261 031263 170202 SAP STKI NO OVERFLOW IF RESULT POSITIVE JMP AERR 1 I OVERFLOW ERROR STA LDA TCA LDB ADB PWD LDB ADB PWD LDA AND ADA STA STA RET D AP 2 AP 3 A B,I A Pl A B,I D MAW M 1 AP 3 A Pl SET TRANSFER POINTER POINTERS SHOULD BE RELATIVE TO AP 2 SO SUBTRACT AP 2 TRANSFER AP 3 TRANSFER A Pl A NOW POINTS TO A Pl ON STACK CLEAR BIT 15 OF A POINT TO AP 3 ON STACK SET PTRS TO NEW TOP OF STACK NO OVER FLOW SO RETURN P+ 2 as UNSPT ROUTINE TO RESTORE AP 3, A Pl FROM STACK WHEN CALLED A POINTS TO AP 3 ON STACK.

AFTERWARDS, D POINTS TO WORD AFTER A Pl ON STACK 030017 070570 021300 031261 070570 021300 031263 170201 UNSPT STA D WWDA,I ADA AP 2 STA AP 3 WWDA,I ADA AP 2 STA A Pl RET 1 SET STACK POINTER GET RELATIVE AP 3 FROM STACK MAKE AN ABSOLUTE ADDRESS GET A Pl D NOW POINTS TO WORD AFTER A Pl AGLNO GET LINE # c as ENTRY: B CONTAINS ADDR OF LINE EXIT: LINE NO IN LNO 035732 GLNUM STB T 18 000177 LDA PO SAVE ADDR SET LNO = O INITIALLY Page 426 494 494 495 1,568,094 CONTROL AND I/O SUPERVISOR ROUTINES 02529000 27172 031226 02530000 27173 005307 02531000 02532000 27174 001277 02533000 27175 170040 02534000 27176 020001 02535000 27177 172407 02536000 27200 027004 02537000 27201 100001 02538000 27202 050053 02539000 27203 072404 02540000 02541000 27204 140404 02542000 27205 030464 02543000 02544000 27206 015732 02545000 27207 170201 02546000 27210 045226 02547000 27211 100001 02548000 27212 050053 02549000 27213 024000 02550000 27214 072470 02551000 27215 066174 02552000 02553000 STA LN O LDB FWUP GLN 2 GLERR GLN 1 GLRT LDA TCA ADA SAM HZA LDA AND SZA JSM ASC CPB RET INZ LDA AND ADB SZA JMP ENDS B GLN 1 GLERR B,I B 177 GLRT AERR 1,I 1,14 T 18 1 LN O B,I B 177 A GLERR GLN 2 START SEARCH AT BEGGINNING OF PROGRAM SEE IF PAST END OF PROGRAM ADD CURRENT ADDR OK IF NEG RESULT ERROR IF > O = O SO END OF PROGRAM GET LAST LINE LINK ERROR IF NOT ZERO ERROR, LINE BRIDGES MESSED UP FOUND IT? YES NO KEEP SEARCHING GET LINE BRIDGE LOOK ONLY AT LINE LENGTH ADD TO CURRENT ADDRESS ERROR IF LENGTH = O 495 Page 427 496 1,568,094 496 Page 428 GTO AND GSB ADJUSTING ROUTINES 02556000 02557000 02558000 02559000 02560000 02561000 02562000 AJGTO ADJUSTS GTO AND GSB DESTINATIONS AFTER AN 02562000 INSERT OR DELETE LINE OPERATION 02564000 02565000 02566000 ON ENTRY: ENTRY AT AJINS IS FOR GTO MODIFICATION 02567000 AFTER AN INSERT ENTRY AT AJDEL IS FOR GTO MODIFICATION BEFORE A DELETE 02568000 T 9 = LN 1 IF THIS IS AN INSERT 02569000 T 7 = LN 2 IF THIS IS A DELETE 02570000 ERRORS:

02571000 ON DELETE THE DELETION OF A GTO'S 02572000 DESTINATION IS ERROR 36 02573000 02574000 02575000 ON EXIT: RET 1 IF THE GTOS AND GSBS ARE ADJUSTED 02576000 ELSE RETURN THROUGH AERR 1 02577000 02578000 02579000 TEMPORARIES USED: TI l, T 6, T 7, T 9, T 2, T 15, T 17, LN O 02580000 02581000 LKTMP+ 6 (DFLAG) 02582000 ROUTINES CALLED: AERRI, ARLNO, ARLNF, AFCI, AFCC, AGLN O 02583000 02584000 02585000 02586000 02587000 ADJUSTMENT CRITERIA:

02588000 02589000 FORMAT OF GTO/GSB:

02590000 02591000 02592000 OPCODE H S GTO 44 GTO # IF 02593000 OCTAL ADDRESS 42 < 44 02594000 224 ( 0 IF UNSET) '44 = NUMERIC 02595000 231 42 = STRING FOLLOWS 02596000 02597000 02598000 INSERT CASE:

02599000 02600000 INSERT OPERATES BY SCANNING THE PROGRAM 6 TIMES 02601000 FOR EACH OF THE 6 GTO/GSB CODESWHEN A GTO/GSB 02602000 CODE IS FOUND THE LINE NUMBER OF THE ASSOCIATED 02603000 LINE IS CALCULATED, VIA SUBROUTINEAS A 02604000 REFERENCE THE GTO/GSB DESTINATION IS ALSO 02605000 GENERATED BY TAKING THE TWO BYTES AFTER THE 44 02606000 IS FOUND AND MAKING THESE TWO BYTES A NUMBER.

02607000 THIS INFORMATION IS THE INPUT TO THE ADJUSTMENT 02608000 ROUTINES WHICH DECIDE, BASED ON THE TYPE OF GTO/ GSB ENCOUNTERED (;,-, ASB) THE VALUE OF THE GTO/ GSB, AND THE LINE NUMBER OF THE LINE CONTAINING THE GTO/GSB.

02609000 02610000 THE FOLLOWING RULES APPLY TO INSERTS:

02611000 1,568,094 Page 429 02612000 02613000 02614000 02615000 02616000 02617000 02618000 02619000 02620000 02621000 02622000 02623000 02624000 02625000 02626000 02627000 02628000 02629000 02630000 02631000 02632000 02633000 02634000 02635000 02636000 02637000 02638000 02639000 02640000 02641000 02642000 02643000 02644000 02645000 02646000 02647000 02648000 02649000 02650000 02651000 02652000 02653000 27216 02654000 27217 02655000 27220 02656000 27221 02657000 27222 02658000 27223 02659000 27224 02660000 27225 02661000 27226 02662000 27227 02663000 27230 02664000 27231 02665000 27232 02666000 27233 02667000 27234 GTO AND GSB ADJUSTING ROUTINES 042413 042427 066401 AJINS AJGT 2 042442 066235 066250 174040 025721 174040 176002 066217 005716 AJGT 5 024254 042421 066217 1) '+' RELATIVE: IF LNI> LN O AND LN O +K≥LNI OR 2).'-' RELATIVE: LNI ≤ LN O AND LN O O-K≤LNI OR 3) ABSOLUTE: K≤LN 1 THEN K+I >K, ELSE DO NO ADJUSTMENT DELETE CASE: A PRESCAN IS MADE OFTHE PROGRAM IF DFLAG= I.

DURING THE PRESCAN THE GTO/GSB DESTINATIONS ARE CHECKED TO BE SURE THAT WHEN THE DELETION TAKES PLACE (IT HASN'T YET), THE DESTINATION OF SOME GTO/GSB WILL NOT DISAPPEAR, UNLESS THE SOURCE IS DELETED IF ANY DESTINATIONS ARE DELETED, ERROR 36 IS GIVEN AND NO ADJUSTMENT OR DELETION IS DONE IF THE PRESCAN IS SUCCESSFUL (ERRORLESS), THE ADJUSTMENT IS MADE AND THE LINES ARE DELETED THE SAME 6 PASSES THROUGH THE PROGRAM ARE MADE FOR THE 6 GTO/GSB CODES AS FOR THE INSERT CASE.

RULES FOR DELETIONS:

IF NO '' IS ENTERED WITH THE DEL +' RELATIVE: LN O LN 0-O-K OR ABSOLUTE: LN 2 ≥K THEN ADJUST: K-(LN-LN+ 1)-> ERROR CONDITIONS OR NON-ADJUSTMENT CONDITIONS ARE THE REMAINING ALTERNATIVES.

IF DFLAG IS SET PRESCAN DO NO ADJUSTMENT, GIVE ERROR IF DFLAG IS CLEAR (NO '') AND AN ERROR CONDITION OCCURS THEN ADJUST ARTIFICIALLY AS FOLLOWS:

+' RELATIVE: LNI-LNO -> K -'RELATIVE: LN 0-LN 2 +I) -> K ABSOLUTE: LNI -> K THIS SECTION IS FOR INSERTS JSM JSM JMP JSM JMP JMP TCB ADB TCB SBP JMP LDB ADB JSM JMP SETUP TRLND AJG 30 FGTO AJGT 4 AJGT 6 T 9 + 2 AJGT 2 T 6 Pl ASLN AJGT 2 SAVE THE NECESSARY VARIA B LES GET THE LINE INTO THE 1/O BUFFER RESTORE TEMP, TURN OFF RUN LIGHRETURN FIND THE NEXT GTOO A'-' FOUND A '+' FOUND ABSOLUTE GTO/GSB IS K≥LNI? SKIP IF YES NO SO CONTINUE ADJUST GTO FOR INSERT RESTOE THE LINE OK TO CONTINUE 497 497 498 1,568,094 498 Page 430 02668000 27235 02669000 27236 02670000 27237 02671000 27240 02672000 27241 02673000 27242 02674000 27243 02675000 27244 02676000 27245 02677000 27246 02678000 27247 02679000 27250 02680000 27251 02681000 27252 02682000 27253 02683000 27254 02684000 27255 02685000 27256 02686000 27257 02687000 27260 02688000 27261 02689000 02690000 02691000 02692000 27262 02693000 27263 02694000 27264 02695000 27265 02696000 27266 02697000 27267 02698000 27270 02699000 27271 02700000 27272 02701000 27273 02702000 27274 02703000 27275 02704000 27276 02705000 27277 02706000 27300 02707000 27301 02708000 27302 02709000 27303 02710000 27304 02711000 27305 02712000 27306 02713000 27307 02714000 27310 02715000 02716000 27311 02717000 27312 02718000 27313 02719000 27314 02720000 27315 02721000 27316 02722000 27317 02723000 27320 GTO AND GSB ADJUSTING ROUTINES 005226 AJGT 4 174040 025721 176057 005716 174040 025226 174040 025721 176063 066217 AJGT 7 005721 AJGT 6 174040 025226 176074 001721 170040 021226 021716 172467 066231 042413 AJDEL 042427 AJG 32 066401 001721 170040 021226 172405 001226 170040 021717 172067 042442 AJG 31 066323 066343 174040 025717 176406 001721 170040 021716 172455 066376 001613 AJG 10 073452 001721 170040 021717 020254 170040 005716 024000 LDB LNO TCB ADB T 9 SBP AJGT 2 LDB T 6 TCB ADB LNO TCB ADB T 9 SRP AJGT 5 JMP AJGT 2 LDB T 9 TCB ADB LNO SBP AJGT 7 LDA T 9 TCA ADA LNO ADA T 6 SAM AJGT 7 JMP AJGT 5 GET LN 1 DO NOTHING HERE, LN 1 >LNO GET THE GTO NUMBER LNO -B≤LN 1 = LNI-(LNO -B)≥ 0 SKIP IFTRUE NEED NOT ADJUST THIS GTO IS LNI>LNO? IE IS LNO-LNI< O NO IF SKIP IS LNO +B≥LNI = LNO +B-LN 1 I≥ 0 NO, DO NO ADJUSTMENT YES, AJUST GTO THIS CODE IS FOR DELETIONS JSM JSM JMP SETUP TRLND AJG 30 LDA T 9 TCA ADA LNO SAM AJG 31 LDA LNO TCA ADA T 7 SAP AJG 32 JSM FGTO JMP AJG 1 ' JMP AJG 12 TCB ADB T 7 SBM AJG 10 LDA T 9 TCA ADA T 6 SAM AJG 32 JMP ERGTA LDA DFLAG RLA AJG 32 LDA T 9 TCA ADA T 7 ADA Pl TCA LDB T 6 ADB A SAVE THE NECESSARY VARIABLES GET NEXT GTO/GSB TYPE IN T 1 RESTORE TEMPS, TURN OFF RUN LIGHT AND RETURN IF GTO/GSB LINE IS INCLUDEDIN DELETED ECTION-NEED NOT PROCESS IT THAT IS IF LN 1 ≤LNO≤LN 2 IF TRUE GO ON TO NEXT LINE FIND THE NEXT GTO WE HAVE A '-' WE HAVE A '+' K>LN 2 =/WE HAVE ABSOLUTE GTO GSB LN 2-K< 0 SKIP IF TRUE, MUST ADJUST IS K≥LNI -K-LN 1 ≥ O ? SKIP IF FALSE ERROR-DESTINATION GONE IF THIS FLAG IS SET WE DO NO ADJUSTMEN 1 THIS IS A PRESCAN SKIP IF A PRESCAN VALID GTO/GSB FOR DELETE SO K=K-(LN 2-LN I + 1) 498 1,568,094 498 4 Qq 1 W W 8 499 Print-out Page 431 GTO AND GSB ADJUSTING ROUTINES 27321 042421 AJG 33 27322 066263 AJG 16 27323 005226 AJG 1 I 1 27324 174040 27325 025717 27326 176074 27327 005716 27330 174040 27331 025226 27332 174040 27333 025717 27334 176466 27335 005716 27336 025721 27337 174040 27340 025226 27341 176447 27342 066363 27343 005717 AJG 12 27344 174040 27345 025226 27346 176054 27347 005721 02747000 27350 02748000 27351 02749000 27352 02750000 27353 02751000 27354 02752000 27355 02753000 27356 02754000 27357 02755000 27360 02756000 27361 02757000 27362 02758000 27363 02759000 27364 02760000 27365 02761000 27366 02762000 27367 02763000 27370 02764000 27371 02765000 27372 02766000 27373 02767000 27374 02768000 27375 02769000 27376 02770000 27377 02771000 02772000 02773000 02774000 02775000 02776000 02777000 02778000 02779000 174040 025716 025226 176447 005716 025226 174040 025717 176402 066371 AJG 15 066310 042404 ERGTM 005717 024254 174040 025226 066321 042404 ERGTP 005226 174040 025721 066321 042404 ERGTA 005721 27400 066321 27401 001731 27402 031226 27403 164504 27404 001613 AJG 30 ERRR 2 JSM ASLN JMP AJG 32 LDB LNO TCB ADB T 7 SBP AJG 16 LDB T 6 TCB ADB LNO TCB ADB T 7 SBM AJG 16 LDB T 6 ADB T 9 TCB ADB LNO SBM AJG 10 JMP ERGTM LDB T 7 TCB ADB LNO SBP AJG 16 LDB T 9 TCB ADB T 6 ADB LNO SBM AJG 16 LDB T 6 ADB LNO TCB ADB T 7 SBM + 2 JMP ERGTP JMP AJG 10 JSM ERRR 2 LDB T 7 ADB Pl TCB ADB LNO JMP AJG 33 JSM ERRR 2 LDB LNO TCB ADB T 9 JMP AJG 33 JSM ERRR 2 LDB T 9 JMP AJG 33 LDA STA JMP LDA T 17 LNO ARNLF,l DFLAG REPLACE ADJUSTED NUMBER IN LINE OK SO CONTINUE IS LN 2 K SEE IF WE ADJUST OR GIVE ERROR ADJUST, SO K=LN K=LN 1-LNO SEEE IF WE ADJUST OR GIVE ERROR TURN OFF THE RUN LIGHT, RETURN IF LSB IS SET WE GIVE ERROR BECAUSE GTC GSB DESTINATION WILL BE GONE IF DELETE IS ALLOWED 02724000 02725000 02726000 02727000 02728000 02729000 02730000 02731000 02732000 02733000 02734000 02735000 02736000 02737000 02738000 02739000 02740000 02741000 02742000 02743000 02744000 02745000 02746000 499 409 1.568094 500 1 _ 5 80 4 _ __ J V GTO AND GSB ADJUSTING ROUTINES 02780000 27405 073021 02781000 27406 001232 ERR 36 02782000 27407 073201 02783000 27410 031232 02784000 27411 140404 02785000 27412 031466 02786000 02787000 02788000 02789000 02790000 02791000 02792000 02793000 02794000 27413 140503 02795000 27414 001226 02796000 27415 031731 02797000 27416 000050 02798000 27417 004152 02799000 27420 164374 02800000 02801000 02802000 02803000 02804000 02805000 02806000 02807000 02808000 02809000 02810000 02811000 02812000 02813000 02814000 02815000 02816000 02817000 02818000 02819000 02820000 02821000 02822000 02823000 02824000 02825000 02826000 02827000 02828000 02829000 02830000 02831000 02832000 02833000 02834000 02835000 27421 000001 27422 050045 27423 074750 27424 174507 27425 074751 27426 170201 EU SE U SLA ASLNI LDA CFLAG CLEAR FETCH BIT FOR UP ARROW ROUTINES SLA +I,C STA CFLAG JSM AERRII GTO DESTINATION GONE ASC 1,36 SETUP WILL TURN ON RUN LIGHT, SET VARIABLES TO CALL AFCI AND AFCC, AND SAVE LNO JSM ARNLO,I TURNONTHE RUN LIGHT LDA LNO STA T 17 LDA B 224 LDB M 6 THIS IS TO GET ALL 6 GTO/GSB CODES JMP AFCI,I INITILIZE THE BYTE SEARCH ROUTINE ASLN WILL REPLACE THE TWO BYTES THAT MAKE UP THE GTO/GSB DESTINATION WITH THE NUMBER THAT IS IN THE B REGISTER ON ENTRY: B HAS THE NUMBER TO REPLACE THE BYTES IN THE GTO/GSB D POINTS TO THE BYTE IMMEDIATELY AFTER THE SECOND BYTE OF THE GTO/GSB NUMBER IN THE COMPILED LINE ON EXIT: THE GTO/GSB DESTINATION IS MODIFIED TEMPORARIES USED: NONE ROUTINES CALLED: NONE LDA AND PBD SBR PBD RET B B 377 A,D 8 B,D CLEAR THE H O BYTE GET THE H O BYTE REPLACE THE H O BYTE TRLIN FINDS THE NEXT GTO/GSB OF TYPE " 44 " IN THE PROGRAM AND KEEP TRACK OF HERE AND LNO IN THE PROCESS ON ENTRY: D POINTS TO THE NEXT BYTE TO BE EXAMINED ON EXIT: RET I IF ENDS IS ENCOUNTERED RET 2 IF A TYPE " 44 " GTO/GSB IS ENCOUNTERED THEN D POINTS TO FIRST BYTE AFTER THE GTO/GSB OPCODE Page 432 500 1.568094 I;fnn 1,568,094 GTO AND GSB ADJUSTING ROUTINES 02836000 02837000 02838000 02839000 02840000 02841000 27427 140375 TRLND 02842000 27430 170201 02843000 27431 005712 02844000 02845000 02846000 02847000 02848000 02849000 02850000 02851000 02852000 02853000 02854000 02855000 02856000 02857000 02858000 02859000 02860000 02861000 02862000 02863000 02864000 02865000 02866000 02867000 02868000 02869000 02870000 02871000 02872000 02873000 02874000 02875000 02876000 02877000 02878000 02879000 02880000 02881000 02882000 02883000 02884000 02885000 02886000 02887000 02888000 02889000 02890000 02891000 27432 27433 27434 27435 27436 27437 27440 27441 035265 140523 044017 074570 074570 022463 072067 170202 GTOP 8 27442 074571 27443 174607 27444 074570 27445 060001 27446 004000 27447 035716 27450 001714 27451 022462 27452 072454 27453 020257 27454 072465 27455 020257 27456 072450 27457 020257 27460 072461 27461 170203 FGTO TEMPORARIES USED: Tl 1 HERE, A, B, D, LNO.

ROUTINES CALLED: NONE JSM RET LDB STB JSM ISZ WBD WBD ADA RZA RET AFCC,I FIND THE NEXT BYTE OF TYPE IN TI 1 1 RET I IMPLIES EOP FOUND T 2 FIND THE LINE NUMBER OF ADDRESS IN T 2 HERE REMEMBER THIS ADDRESS AGLNO,I GET THE LINE NUMBER OF THE LINE D LINE NUMBER RETURNED IN LNO A,I GET TO THE DESTINATION BYTES A,I BM 44 SEE IF WE HAVE A NUMERIC GTO/GSB TRLND NON-NUMERIC SO SKIP 2 FOUND GTO/GS B FTGO FORMS THE INTEGER NUMBER REPRESENTING THE GTO/GSB DESTINATION AND STORES IT IN T 6, FGTO ALSO DET THE TYPE OF GTO/GSB ON ENTRY: D POINTS TO FIRST BYTE OF THE GTO/GSB DESTINATION INTEGER ON EXIT: RET I = GTO/GSB "-" ENCOUNTERED RET 2 = GTO/GSB "+" ENCOUNTERED RET 3 = NONE OF THE ABOVE=>GTO/GSB ABSOLUTE ENCOUNTERED IN EACH CASE THE POINTER, D, POINTS AT THE FIRST BYTE AFTER THE SECOND BYTE OF THE DEST NUMBER TEMPORARIES USED: T 6, Tl 1 ROUTINES CALLED: NONE WBD B,I SBL B WBD A,I IOR B LDB A STB T 6 LDA T 4 ADA SZA ADA SZA ADA SZA ADA SZA RET BM 224 ASLN 1 M 1 GTOP MI ASLN 1 M 1 GTOP MAKE NUMBER FROM TWO BYTES AFTER " 44 " IN GTO/GSB FIELD

SAVE IN T 6 AND B FOR RETURN MUST DETERMINE WHICH TYPE OF GTO/GS-B WE HAVE A GTO/GSB REL WE HAVE A GTO RELATIVE "+" WE HAVE A GSB RELATIVEWE HAVE A GSB RELATIVE "+" HERE IF ABSOLUTE GTO OR GSB 501 Page 433 501 502 1,568,094 502 Page 434 02892000 02893000 02894000 02895000 02896000 02897000 02898000 27462 02899000 27463 02900000 27464 02901000 27465 02902000 02903000 02904000 02905000 02906000 02907000 02908000 02909000 02910000 02911000 02912000 02913000 02914000 02915000 02916000 02917000 02918000 02919000 02920000 02921000 02922000 02923000 02924000 02925000 02926000 02927000 02928000 02929000 02930000 02931000 02932000 02933000 02934000 02935000 02936000 02937000 02938000 02939000 02940000 02941000 02942000 02943000 02944000 02945000 02946000 02947000 GTO AND GSB ADJUSTING ROUTINES CONSTANTS CONSTANTS 177554 177734 177762 034460 000221 000263 000122 000052 000263 000077 000053 000177 000116 000236 077216 077217 077216 077220 077221 077223 077224 077225 077226 077227 077230 077231 077232 077233 077234 077235 077207 077210 077211 077212 077213 077214 077215 000433 077613 BM 224 BM 44 M 14 DLIMT NWWD MAXLN BUHM B 32 STPMS TRCMS COLLN EOL KPA QUOTE DCMND CTCNT CST WPRT SIOCP M PLADD TMP 6 K TMP 2 LNO TM Pl TMP 5 TMP 3 CFLAG TMP 7 TMP 4 SKEY WMOD DTM Pl DTMP 2 SPKN OLCP CRSP IOCP DISP DFLAG OCT -224 OCT -44 DEC -14 OCT 34460 BITS 9-0 DEFINITIONS EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU B 70 K FLAG M 256 P 26 B 200 FLAG B 72 B 177 PO B 42 B 377 B 2 K CSTMP CSTMP+ 1 CST CST+ 2 CST+ 3 CST+ 5 CST+ 6 CST+ 7 CST+ 8 CST+ 9 CST+ 10 CST+ 1 CST+ 12 CST+ 13 CST+ 14 CST+ 15 IOTMP+ 1 IOTMP+ 2 IOTMP+ 3 IOTMP+ 4 IOTMP+ 5 IOTMP+ 6 IOTMP+ 7 ALDSP LKTMP+ 6 502 1,568,094 502 1.568094 GTO AND GSB ADJUSTING ROUTINES 02948000 02949000 02950000 27777 02951000 27777 02952000 02953000 02954000 02955000 02956000 ORG 277778 BSS I END END OF PASS 2 NO ERRORS DETECTED Page 436 BASE-PAGE READ-WRITE-MEMORY 00003000 76550 00004000 02001000 02002000 02003000 02004000 02005000 02006000 02007000 02008000 02009000 32000 02010000 02011000 32000 032030 02012000 32001 032053 02013000 32002 032103 02014000 32003 177777 02015000 32004 032110 02016000 32005 000014 ORG 76550 B UNL I/O ROM (FINAL RELEASE VERSION) USING BPAGE:

UNS ORG 32000 B DEF DEF DEF DEC DEF DEC EXEC COMP RCOMP -1 INIT EXECUTION LINK WORD COMPILE LINK WORD REVERSE COMPILE LINK WORD NO COMMAND TABLE INITIALIZATION ROUTINE ROM ID= 12 THE RELATIVE OP CODES ARE AS FOLLOWS:

FMT 2 WRT 3 RED 4 WTC WTB 6 RDB 7 RDS 8 CONV 9 LIST# FORMAT WRITE READ WRITE CONTROL WRITE BYTE READ BYTE READ STATUS CONVERSION TABLE LIST TO PERIPHERAL gu rn 3 Page 435 503 02018000 02019000 02020000 02021000 02022000 02023000 02024000 02025000 02026000 02027000 02028000 02029000 1,568,094 FORMATTED I/O ROM 02031000 02032000 02033000 02034000 32006 033250 02035000 32007 02036000 32010 02037000 32011 02038000 32012 02039000 32013 02040000 32014 02041000 32015 LINKS 033341 033573 032273 033162 032136 RET 1 033450 033532 DEF GSCFN LINK TO GET SELECT CODE/FMT NUMBER ROUTINE DEF BUSET LINK TO SET UP THE HP-IB ROUTINE DEF REDST LINK TO READ STATUS ROUTINE DEF ANFMT LINK TO PROCESS NEXT FORMAT ROUTINE DEF ERDB I LINK TO STACK A RESULT ROUTINE DEF SLINK ADDRESS OF A RET I (HELP ROUTINE) DEF SEND ADDRESS OF NORMAL OUTPUT ROUTINE DEF READ ADDRESS OF NORMAL INPUT ROUTINE 02043000 02044000 02045000 02046000 32016 02047000 32017 02048000 32020 02049000 32021 02050000 32022 02051000 32023 02052000 32024 02053000 32025 02054000 32026 02055000 32027 TABLE OF EXECUTION ROUTINE ADDRESSES 132016 ETBL 032202 032532 032702 033376 032673 033157 033177 033211 033655 DEF DEF DEF DEF DEF DEF DEF DEF DEF DEF l EFMT EWRT ERED EWTC EWTB ERDB ERDS ECONV ELIST 02057000 02058000 GENI 02059000 02060000 ENTR 02061000 02062000 32030 031717 EXEC 02063000 32031 023016 02064000 32032 031724 02065000 32033 000016 02066000 32034 031734 02067000 32035 043137 02068000 32036 141724 02069000 32037 001734 02070000 32040 030016 02071000 32041 164365 ERAL EXECUTION ROUTER RY: A CONTAINS THE ROM'S RELATIVE CODE STA STMT SAVE ORIGINAL RELATIVE CODE ADA ETBL CONSTRUCT AND STA ASTMT SAVE EXECUTION ADDRESS LDA C STA CSAVE SAVE C POINTER JSM PTSET SET UP POINTERS TO STOLEN R/W JSM ASTMT,I GO TO THE EXECUTION ROUTINE LDA CSAVE RESTORE C VALUE STA C JMP AINTX,I WHEN DONE, RETURN TO MAIN SYSTEM 504 Page 437 504 1,568,094 FORMATTED I/O ROM MNEMONIC AND CODE TABLE FOR COMPILER CODEWORD FORMAT:

BITS 14-8 = CLASS (IMPLIED MULTIPLY) BITS 7-0 = TOKEN (PARSER DIRECTION) 32053 063155 COMP 32054 072040 32055 100567 32056 071164 32057 020202 32060 071145 32061 062040 32062 101567 32063 072143 32064 020204 32065 073564 32066 061040 32067 102562 32070 062142 32071 103162 32072 062163 32073 103543 32074 067556 32075 073040 32076 104154 32077 064563 32100 072040 32101 021611 32102 100000 OCT OCT OCT OCT OCT OCT OCT OCT OCT DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC OCT OCT 3041 3052 4032 4032 3045 3052 3045 3045 3070 26221 29728 -32393 29300 08322 29285 25632 -31881 29795 08324 30580 25120 -31374 25698 -31118 25715 -30877 28526 30240 -30612 26995 29728 21611 100000 6 33 LIST# 6 42 CONV 8 26 RDS 8 26 RDB 6 37 WTB 6 42 WTC 6 37 RED 6 37 WRT 6 56 FMT (LST) (SFG) (FCN) (FCN) (PRT) (SFG) (PRT) (PRT) (FREE FIELD)

F M T ( 1) W R T ( 2) R E D ( 3) W T C ( 4) W T B ( 5) R D B ( 6) R D S ( 7) C O N V ( 8) L I S T # ( 9) END OF TABLE MARKER 32042 32043 32044 32045 32046 32047 32050 32051 32052 003041 003052 004032 004032 003045 003052 003045 003045 003070 Page 438 02073000 02074000 02075000 02076000 02077000 02078000 02079000 02080000 02081000 02082000 02083000 02084000 02085000 02086000 02087000 02088000 02089000 02090000 02091000 02092000 02093000 02094000 02095000 02096000 02097000 02098000 02099000 02100000 02101000 02102000 02103000 02104000 02105000 02106000 02107000 02108000 02109000 02110000.

02111000 02112000 02113000 505 505 Page 439 FORMATTED I/O ROM 02115000 02116000 REVERSECOMPILETABLE 02117000 02118000 EACH BYTE OF THE REVERSE COMPILE TABLE SUPPLIES 02119000 THE FOLLOWING INFORMATION:

02120000 BITS 7-4 = PRIORITY 02121000 BITS 3-0 = CLASS 02122000 02123000 32103 000422 RCOMP OCT 000422FMT 0,1 WRT 1,2 02124000 32104 011022 OCT 011022 RED 1,2 WTC 1,2 02125000 32105 011342 OCT 011342 WTB 1,2 RDB 14,2 02126000 32106 161022 OCT 161022 RDS 14,2 CONV 1,2 02127000 32107 011000 OCT 011000 LIST# 1,2 02129000 THE FOLLOWING TABLE GIVES THE STRUCTURE OF THE 02130000 ROM'S STOLEN WORDS, RELATIVE TO "FSPTR":

02131000 02132000 0-9 BYTE POINTERS TO "FMT N" FOR N= 0,9 02133000 10 BYTE POINTER TO EXECUTED FMT STATEMENT

02134000 11 CVTBL POINTER TO END OF CONVERSION TABLE 02135000 12 SFEAT SPECIAL FEATURES (EXTIO) 02136000 13 HLINK LINK TO HELP ROUTINES IN OTHER ROMS 02137000 14 WRTIC LINK TO SEND ROUTINE (WRITE INTERCEPT) 02138000 15 REDIC LINK TO READ ROUTINE(READ INTERCEPT) 02139000 16 RUNLK NEXT LINK IN "RUN" DAISEY CHAIN 02140000 17 LODLK NEXT LINK IN "LOAD" DAISEY CHAIN 02141000 18-27 BYTE-PAIR CONVERSION TABLE (ASCII/CONVERTED) 02143000 NOT ON ERRORS 02144000 02145000 THIS ROM WAS ORIGINALLY CALLED "FORMATTED I/O", 02146000 THE NAME WAS CHANGED TO "GENERAL I/O" AND THUS, 02147000 THE ERRORS ARE NOW GIVEN AS GI-G 9 PROGRAM 02148000 LABLES AND COMMENTS, HOWEVER, ARE STILL IN TERMS 02149000 OF F 1-F 9, DUE TO THE OLD NAME.

02150000 02151000 506 1,568,094 506 1,568,094 FORMATTED I/O ROM 02153000 02154000 INI 02155000 02156000 RES 02157000 FOI 02158000 ROT 02159000 02160000 32110 001306 INIT 02161000 32111 031045 02162000 32112 071614 02163000 32113 020132 02164000 32114 004000 02165000 32115 002721 02166000 32116 071402 02167000 32117 024144 02168000 32120 001533 02169000 32121 130001 02170000 32122 003144 02171000 32123 031533 02172000 32124 024254 02173000 32125 001530 02174000 32126 130001 02175000 32127 003154 02176000 32130 031530 02177000 32131 024134 02178000 32132 035306 02179000 32133 001062 02180000 32134 060117 02181000 32135 031062 02182000 32136 170201 SLINK TIALIZATION SERVE 28 WORDS OF R/W MEMORY; SET NULL FORMAT R ALL FORMATS; SET UP RUN-LINK, LOAD-LINK, AND M'S INTERNAL LINKS.

LDA FWAM STA FSPTR CLR 13 ADA P 13 LDBA LDA IVALS XFR 3 ADB P 3 LDA RLINK STA B,I LDA FRLNK.

STA RLINK ADB Pl LDA LOADL STA B,I LDA FLLNK STA LOADL ADB P 11 STB FWAM LDA ROMWD IOR B 40 STA ROMWD RET I GET CURRENT STOLEN WORD BOUNDARY AND SAVE AS ADDRESS OF THIS ROM'S CLEAR FORMATS, CONVERSIONS, AND FEATURES POINT TO LINKS AREA TRANSFER INITIAL VALUES POINT TO END OF AREA SAVE CURRENT LINK IN RUN CHAIN GET FMT RUN ROUTINE ADDRESS AND PUT IT IN THE CHAIN POINT TO NEXT STOLEN LOCATION GET THE CURRENT LINK IN THE LOAD DAISEY CHAIN AND SAVE IT GET FMTIO LOAD LINK ADDRESS AND PUT IT IN THE CHAIN POINT BEYOND STOLEN AREA AND SET THIS AS NEW BOUNDARY LOG IN FMTIO ROM (BIT 5) INITIALIZATION COMPLETE 02184000 02185000 THIE 02186000 ANE 02187000 02188000 32137 001045 PTSET 02189000 32140 020134 02190000 32141 006726 02191000 32142 071404 02192000 32143 170201 S ROUTINE SETS UP POINTERS TO STOLEN WORDS ) LINK WORDS FOR USE LDA FSPTR ADA P 11 LDB TREG XFR 5 RET I GET STOLEN WORDS LOCATION POINT TO FEATURES/LINKS AND MOVE THEM INTO T-REGISTERS WHERE THEY'RE MORE ACCESSABLE Page 440 507 507 1,568,094 FORMATTED I/O ROM 02194000 02195000 02196000 02197000 02198000 02199000 32144 02200000 32145 02201000 32146 THIS ROUTINE SETS ALL FORMATS TO NULL WHENEVER A "RUN" IS EXECUTED, AND THEN CONTINUES ALONG THE DAISY CHAIN.

032145 000257 031610 FRLNK DEF LDA STA 02202000 32147 001045 02203000 02204000 02205000 02206000 32150 32151 32152 32153 + 1 Ml KBFMT LDA FSPTR 071612 020127 CHAIN 100000 164000 CLR ADA LDA JMP 11 P 16 A,I A,I RESET ANY PENDING KEYBOARD FORMATS GET ADDRESS OF START OF FORMAT TABLE

RESET FORMATS POINT TO NEXT RLINK IN CHAIN GET THE ADDRESS AND CONTINUE EXECUTION THERE.

*02208000 32154 032155 FLLNK 02209000 32155 001045 02210000 32156 020136 02211000 32157 005063 FLLN O 02212000 32160 076410 02213000 32161 104000 02214000 32162 176601 02215000 32163 174040 02216000 32164 025706 02217000 32165 176011 02218000 32166 004177 02219000 32167 067175 02220000 02221000 32170 104000 FLKEY 02222000 32171 016722 02223000 32172 067176 02224000 32173 076403 02225000 32174 025744 02226000 32175 134000 FLLN 1 02227000 32176 011045 FLLN 2 02228000 32177 072152 02229000 32200 020257 02230000 32201 067157 DEF + 1 LDA FSPTR ADA LDB SZB LDB SBM TCB ADB SBP LDB JMP LDB CPB JMP SZB ADB STB CPA RIA ADA JMP P 9 NPROG FLKEY A,I + I,C PROFS FLLN 2 PO FLLN 1 A,I SFMT FLLN 2 FLLN 2 KYOFS A,I FSPTR CHAIN Ml FLLN O GET ADDRESS OF FORMAT POINTERS TABLE

POINT TO FORMAT 9 GET LOAD KEYS/PROGRAM FLAG IF KEYS, GO TO KEY OFFSET ROUTINE GET NEXT FORMAT POINTER STRIP OF LEFT/RIGHT BIT ( 15) MAKE NEGATIVE ABSOLUTE ADDRESS ADD IN OFFSET TO NEW PROGRAM IF B> 0, FORMAT WAS NOT REPLACED ELSE, FORMAT IS GONE SO RESET AND GO TO FORMAT RESET GET NEXT FORMAT POINTER IF STANDARD FORMAT, NO ADDRESS CORRECTION REQUIRED IF ZERO, NO FORMAT WAS SET ELSE, ADD IN KEY PROGRAM OFFSET AND PUT BACK NEW ADDRESS DID WE JUST DO THE LAST ONE? YES; GET OUT NO; POINT TO NEXT FORMAT POINTER AND GO AROUND AGAIN -508 Page 441 508 509 1,568,094 FORMATTING ROUTINES FORMAT STATEMENT EXECUTION

THIS SECTION SETS A POINTER TO THE PROPER FORMAT STATEMENT IN THE FORMAT POINTER TABLE

32202 074560 EFMT 32203 042527 32204 043466 32205 035720 32206 005716 32207 010107 32210 004016 32211 010121 32212 006722 32213 000177 32214 015716 32215 031720 32216 001720 32217 020207 32220 172403 32221 140404 ER FI 32222 043461 32223 001257 32224 073005 32225 001720 32226 031610 32227 000135 32230 067232 32231 001720 EFMTP 32232 021045 32233 134000 32234 074760 32235 074560 32236 010121 32237 170203 32240 067235 WBC JSM JSM STB LDB CPA LDB CPA LDB LDA CPB STA LDA ADA SAM JSM ASC LDA SLA LDA STA LDA JMP LDA ADA STB A,I CSAV FNBLD FMT N T 6 C.COM C C.EFM SFMT PO T 6 FMT N FMT N MI O + 3 AERRI,I 1,GI CSTAT EFMTP FMT N KBFMT P O lo + 2 FMT N FSPTR A,I THIS SECTION MOVES WBC A,D GTEFM WBC A,I CPA C EFM RET 3 JMP GTEFM BYPASS THE BEGINNING OF FORMAT CHARACTER SAVE PTRTO FIRST FMT BYTE TRY TO BUILD A FORMAT NUMBER SAVE B AS POSSIBLE FORMAT NUMBER R = POINTER TO START OF FMT STATEMENT

DID COMMA TERMINATE FNBLD? YES; POINT TO SPECS FOLLOWING FMT N, EMPTY FORMAT? YES; USE STANDARD FORMAT IS B STILL EQUAL TO CSAVE? YES; THIS MUST BE FMT 0 IN ANY CASE, GET FMT NUMBERIF FMT N< 10, ALL IS WELL OTHERWISE, ERROR Fl BAD FORMAT REFERENCE CHECK CURRENT STATE IF LSB(A)= 0, FORMAT IS IN PROGRAM ELSE, FMT IS FROM KEYBOARD EXECUTION SO SAVE ITS NUMBER IN BASE PAGE AND SET THIS AS A SPECIAL FORMAT SKIP TO PROCESS AS DUMMY FMT 10 GET FORMAT NUMBER OFFSET TO FORM POINTER ADDRESS FOR SAVE AND PUT BYTE POINTER IN STOLEN TABLE

CTOENDOFFMT + I BACK UP POINTER IN CASE OF NULL FORMAT LOOK AT NEXT CHARACTER IF IT WAS END OF FORMAT ( 348) THEN EXIT (BYPASS C RESET) OTHERWISE, CONTINUE TO SCAN 509 Page 442 02232000 02233000 02234000 02235000 02236000 02237000 02238000 02239000 02240000 02241000 02242000 02243000 02244000 02245000 02246000 02247000 02248000 02249000 02250000 02251000 02252000 02253000 02254000 02255000 02256000 02257000 02258000 02259000 02260000 02261000 02262000 02263000 02264000 02265000 02266000 02267000 02268000 02269000 02270000 02271000 02272000 510 Page 443 02274000 02275000 THI:

02276000 SCA 02277000 02278000 REP 02279000 Z CS 02280000 BFA 02281000 02282000 32241 001045 FMSET 02283000 32242 005232 02284000 32243 174501 02285000 32244 077402 02286000 32245 071611 02287000 32246 004136 02288000 32247 141737 02289000 32250 005720 02290000 32251 000001 02291000 32252 015610 02292000 32253 004135 02293000 32254 025045 02294000 32255 104001 02295000 32256 076003 02296000 32257 072042 02297000 32260 006722 02298000 32261 035720 02299000 32262 000254 02300000 32263 031732 02301000 32264 000263 ZCSET 02302000 32265 031726 02303000 32266 034016 CSET 02304000 32267 170201 1,568,094 FORMATTING ROUTINES 510 S ROUTINE SETS UP INITIAL VALUES FOR NNING THE FORMAT STATEMENT:

C= I P = 100000 (NO SUPRESSION SET) VIT= C = START OF FORMAT LDA LDB SBR RLB CLR LDB JSM LDB LDA CPB LDB ADB LDB RZB RZA LDB STB LDA STA LDA STA STB RET FSPTR CFLAG + 2 P 9 HLINK,I FMT N B KBFMT P O lo FSPTR B,I + 3 ER.F 1 SFMT BFMT Pl REP C FLAG Z.CSP C GET LOCATION OF FORMAT POINTER TABLE

CHECK THE CONTINUE FLAG FOR THE RUN-DONE BIT ( 1 = FORMATS VALID) IF FORMATS VALID, GO ON ELSE, RESET ALL FMTS EXCEPT KEYBOARD FMT GIVE EXTIO A CHANCE TO DO ITS FMSET GET THE FORMAT NUMBER AND KEEP IN A FOR LATER TEST IS THIS FORMAT PENDING FROM KEYBOARD? YES; USE FMT 10 INSTEAD (KYBD FORMAT ADD IN OFFSET TO FORMAT TABLE GET TABLE ENTRY FOR FORMAT N IF NON-ZERO, FORMAT IS VALID IF NO FMT SET AND FMT N > 0, GIVE ERROR IF FMT N= 0, USE STANDARD FORMAT SAVE AS STARTING ADDRESS OF FORMAT INITIALIZE REP C TO 1 SET FOR NO SUPRESSION, # DATA SPECS = O SET BYTE POINTER FOR FETCH SETUP COMPLETE 1,568,094 FORMATTING ROUTINES THIS SECTION SCANS THE FORMAT FOR NEXT SPECIFICATION

IF TEXT SPEC, IT EXECUTES IT:

X = SPACE /=CRILF Z = SUPRESSCR/LF " =LITERAL IF DATA SPEC RETURNS TO CALLING ROUTINE F = FIXED POINT E = FLOATING POINT FZ = FIXED POINT WITH LEADING ZEROS B = BINARY C = CHARACTER STRING 32270 001725 NFMT 32271 055732 32272 170201 LDA RW SN DSZ REP C RET 1 GET LAST SPEC TYPE IF REPEAT COUNT WAS 1, GET NEXT SPEC OTHERWISE, RETURN LAST SPEC ENTRY TO BYPASS REP C CHECK; FORCE NEXT SPEC 32273 043466 ANFMT 32274 076004 32275 005715 32276 076027 32277 004254 32300 035732 NOW 02334000 TO Dl 02335000 02336000 32301 010121 02337000 32302 067433 02338000 32303 004254 02339000 32304 012731 02340000 32305 067327 02341000 32306 010063 02342000 32307 067335 02343000 32310 010064 02344000 32311 067361 02345000 32312 012730 02346000 32313 067367 02347000 32314 012732 02348000 32315 067373 02349000 32316 010104 02350000 32317 067421 02351000 32320 010116 02352000 32321 067402 02353000 32322 012733 02354000 32323 067425 02355000 02356000 NO V 02357000 02358000 32324 141737 FHELP 02359000 32325 140404 ER F 2 02360000 32326 043462 JSM RZB LDB RZB LDB STB FNBLD + 4 T 5 ER.F 2 Pl REP C GET REP C IF ANY IF REPETITION COUNT > 0, GO ON WAS THE COUNT AN EXPLICIT ZERO? IF SO, REP C = O IS DUM Bl OTHERWISE, USE DEFAULT REP C= 1 AND SAVE IT CHECK CHARACTER WHICH TERMINATED NUMBER BUILDER ETERMINE TYPE OF CPA JMP LDB CPA JMP CPA JMP CPA JMP CPA JMP CPA JMP CPA JMP CPA JMP CPA JMP C.EFM E.EFM Pl C.F S.F C.E S.E C.C S.C C.B S.B C.X E.X C.LF E.LF C.QT E.QT C.Z E.Z IF END OF FORMAT, GO TO END OF FORMAT ROUTINE SET B = 1 IN CASE = "E" IF SPEC BEGINS WITH F SET UP NUMERIC OUTPUT IF "E" SET UP FLOATING SPEC IF "C", SET UP FOR STRING IF "B" SET UP FOR BINARY IF "X" EXECUTE SPACE ROUTINE IF "/" ECECUTE LINE FEED ROUTINE IF LITERAL EXECUTE A LITERAL IF "Z" SET TO SUPRESS CR/LF ALID FORMAT RECOGNIZED JSM JSM ASC HLINK,I ASK FOR HELP AERRI,I NO LUCK; ERROR F 2 I 1,G 2 IMPROPER FORMAT SPECIFICATION

Page 444 02306000 02307000 02308000 02309000 02310000 02311000 02312000 02313000 02314000 02315000 02316000 02317000 02318000 02320000 02321000 02322000 02323000 02324000 02325000 02326000 02327000 02328000 02329000 02330000 02331000 02332000 02333000 511 511 1,568,094 FORMATTING ROUTINES THIS SECTION PROCESSES SPECIFICATIONS FORM FORMAT STARTS WITH "F" FZ.

STARTS WITH "F" = FFZ.

32327 004177 S F 32330 074560 32331 012733 32332 067335 32333 074760 02372000 32334 004145 02373000 02374000 02375000 02376000 32335 174700 02377000 32336 035727 02378000 32337 043514 02379000 02380000 02381000 02382000 32340 001217 32341 32342 32343 32344 32345 32346 32347 32350 32351 32352 32353 005730 176406 024255 176004 001730 170603 061730 050045 S 061727 060224 031216 32354 001725.

32355 073201 32356 031725 S 32357 045726 32360 170201 LDB WBC CPA JMP WBC PO A,I C.Z S.E A,D LDB P 2 B= 0 IF FZ LOOK AT NEXT CHARACTER IFZ STORE TYPE 0 OTHERWISE, BACK UP THE BYTE POINTER AND SET FOR FIXED-TYPE FORMAT AT THIS POINT, B = 0 (FZ), 1 (E), 2 (F) S.E RBR STB JSM 1 FFFLG DW.D B = FZ ( 000000), F ( 000001), E ( 100000) SAVE TYPE IN FIX/FLT FLAG DEMAND W D THIS SECTION SETS UP FWPT FOR PROPER FORMATTING THIS SECTION SETS UP FWPRT FOR PROPER FORMATTING S.FI S.NUM S.RET LDA WPRT GET CURRENT FIX/FLT SETTING JUST IN CASE LDB DP B = SPECIFIED DECIMAL POINT SETTING SBM S FI IF B< 0, USE CURRENT FIX/FLT SETTING ADB M 12 CHECK DP FOR RANGE l 0,11 l SBP S F 1 IF DP> 11, USE CURRENT FIX/FLT SETTING LDA DP IF IN RANGE, GET DP SAL 4 PUT THIS SETTING IN FIX AND FLT BITS IOR DP OF WORD FOR NEW WPRT AND B 377 KEEP ONLY FIX/FLT SETTING VALUES IOR FFFLG AND SET FIX/FLT BIT ( 15) TO PROPER STA IOR B 60 K SET BIT 1-4 TO PREVENT FLOAT REVERSION STA FWPRT USE THIS FOR FXD/FLT INDICATOR LDA SLA STA ISZ RET RW.SN +I,C RW.SN Z,CSP I SET FOR NUMBER REQUIRED AND SAVE FOR FUTURE USE LOG IN OCCURANCE OF DATA SPEC AND GET OUT Page 445 02362000 02363000 02364000 02365000 02366000 02367000 02368000 02369000 02370000 02371000 02383000 02384000 02385000 02386000 02387000 02388000 02389000 02390000 02391000 02392000 02393000 02394000 02395000 02396000 02397000 02398000 512 512 513 Page 446 02400000 02401000 Tl 02402000 02403000 32361 043466 S C 02404000 32362 035731 02405000 32363 043522 02406000 32364 001725 02407000 32365 073301 02408000 32366 067356 02409000 02410000 TI02411000 02412000 32367 074560 S B 02413000 32370 043522 02414000 32371 000257 02415000 32372 067353 1,568,094 513 FORMATTING ROUTINES HIS SECTION SETS UP FOR STRING JSM STB JSM LDA SLA JMP FNBLD FW TRMCK RW.SN +I,S S.RET GET REP C SET FIELD WIDTH

CHECK FOR PROPER TERMINATION GET TYPE WORD Il S SECTION SETS UP FOR FMT B ( 16-BIT BINARY NUMBER) WBC JSM LDA JMP A,I TRMCK Ml S.NUM GET THE NEXT BYTE AND CHECK FOR PROPER TERMINATION SET WPRT FOR BINARY FORMAT AND EXIT THROUGH NUMERIC SPEC SETUP 1,568,094 FORMATTING ROUTINES 02417000 02418000 02419000 02420000 32373 02421000 32374 02422000 32375 02423000 32376 02424000 32377 02425000 32400 02426000 32401 02427000 02428000 02429000 02430000 32402 02431000 32403 02432000 32404 02433000 32405 02434000 02435000 02436000 02437000 02438000 02439000 02440000 PROCESS = X 000117 E X 042417 055732 067373 074560 043522 E XTC 067273 000016 031727 001727 030016 LDA JSM DSZ JMP WBC JSM JMP P 32 IOIC REP C E.X A,I TRMCK ANFMT GET AN ASCII SPACE AND READ/WRITE IT IF REPEAT COUNT > 1, LOOP UNTIL DONE GET NEXT CHARACTER FROM FMT AND CHECK FOR PROPER TERMINATION IF OK, FORCE NEXT SPEC PROCESS = " E.QT E.QTL 32406 074560 E QTN 32407 010116 32410 067413 32411 042417 E QTQ 32412 067406 LDA STA LDA STA WBC CPA JMP JSM JMP C QTADD QTADD C A,I C.QT DQTCK I Ol C E.QTN 32413 074560 DQTCK WBC A,I 02441000 32414 02442000 32415 02443000 32416 02444000 32417 02445000 32420 02446000 02447000 02448000 02449000 32421 02450000 32422 02451000 32423 02452000 32424 010116 067411 055732 067404 067400 CPA JMP DSZ JMP JMP C.QT E.QTQ REP C E.QTL E.XTC PROCESS = 1 043446 E LF 055732 067421 067377 02453000 02454000 02455000 02456000 32425 001726 02457000 32426 172201 02458000 32427 031726 02459000 32430 067377 JSM DSZ JMP JMP ECRLF REP C E.LF E.XTC-1 GET CURRENT FORMAT LOCATION AND SAVE IN CASE OF REPEAT COUNT GET ADDRESS OF START OF QUOTE AND RESET BYTE POINTER FOR ANOTHER PASS GET NEXT CHARACTER FROM LITERAL IF QUOTE MARK CHECK FOR DOUBLE QUOTE READ/WRITE ONE CHARACTER LOOP FOR NEXT CHARACTER LOOK AT CHARACTER FOLLOWING QUTOTE IS IT ANOTHER QUOTE YES, TAKE IT NO, MUST BE END IF REP C > 1, THEN RESET TO START OF LITERAL DONE; EXIT THROUGH TERM CHECK READ/WRITE A CR/LF IF REPEAT COUNT > 1, CONTINUE TO LOOP WHEN DONE, EXIT THROUGH TERM CHECK PROCESS = Z LDA SAP STA JMP Z.CSP +I,C Z.CSP E.XTC-1 GET SUPRESSION FLAG CLEAR CR/LF BIT ( 15) PUT BACK SUPRESSION FLAG WHEN DONE, EXIT THROUGH TERM CHECK Page 447 514 514 FORMATTING ROUTINES THIS ROUTINE HANDLES AND END-OF-FORMAT IF A CONVERSION SPEC WAS ENCOUNTERED, RESET TO START OF FORMAT FOR RESCAN OTHERWISE, TERMINATE RED/WRT.

IN ANY CASE, RED/WRT A CR/LF UNLESS SUPRESSION SET.

32431 031726 NOSUP 32432 043446 32433 001726 E EFM 32434 172675 32435 072407 32436 001721 32437 010254 32440 067444 32441 005720 043264 067273 054003 EFMX 170201 STA Z CSP JSM ECRLF LDA SAM SZA LDA CPA JMP LDB JSM JMP DSZ RET Z.CSP NOSUP,C EFMX NPCNT Pl EFMX BFMT ZCSET ANFMT R REPLACE SUPRESSION FLAG READ/WRITE A CR/LF GET SUPRESSION FLAG IF BIT ( 15) SET, DO A CR/LF IF NO DATA SPECS, TERMINATE GET PARAMETER COUNT LAST PARAMETER PROCESSED? YES; DONE, SO GET OUT NO; GET POINTER TO BEGINNING OF FORMAT, AND RESET FOR ANOTHER SCAN GO FOR NEXT FORMAT CANCEL JSM TO THIS ROUTINE THIS ROUTINE READS/WRITES A CR/LF 004135 ECRLF 141737 001725 172405 000132 WCRLF 042421 066421 LDB JSM LDA SAM LDA JSM LDA JMP P O lo HLINK,I RW.SN RCRLF A,CR WRTAC A.LF WRTAC 32456 000042 RCRLF LDA P 511 32457 031714 STA T 4 042425 CKFLF 010135 170201 055714 067460 066004 JSM CPA RET DSZ JMP JMP REDAC A.LF 1 T 4 CKFLF ER.F 7 GIVE EXTIO A CHANCE TO EXPAND CR/LF GET THE READ/WRITE FLAG IF READ, GO TO READ CR/LF GET AN ASCII CR AND OUTPUT IT GET AN ASCII LF AND OUTPUT IT (IMPLIED RETURN) SET CUTOFF COUNT FOR OUTPUT-ONLY DEVICE READ NEXT CHARACTER LINE FEED? YES; GET OUT NO; COUNT EXHAUSTED? NO; TRY AGAIN READ 511 CHARS WITH NO LF; GIVE ERROR Page 448 02461000 02562000 02463000 02464000 02465000 02466000 02467000 02468000 02469000 02470000 02471000 02472000 02473000 02474000 02475000 02476000 02477000 02478000 02479000 02480000 02481000 02483000 02484000 02485000 02486000 02487000 02488000 02489000 02490000 02491000 02492000 02493000 02494000 02495000 02496000 02497000 02498000 02499000 02500000 02501000 02502000 32442 32443 32444 32445 32446 32447 32450 32451 32452 32453 32454 32455 32460 32461 32462 32463 32464 32465 1,568,094 515 515 1,568,094 FORMATTING ROUTINES SUBROUTINE TO BUILD A NUMBER FROM FORMAT STATEMENT

ENTRY: C POINTS TO NEXT FORMAT CHARACTER EXIT: B = INTEGER A = CHARACTER TERMINATING NUMBER T 5 =COUNT OF EXPLICIT DIGITS FOUND 02511000 02512000 32466 004177 FNBLD 02513000 32467 035712 02514000 32470 035715 02515000 32471 173201 02516000 32472 074560 FNBLN 02517000 32473 042051 02518000 32474 067502 02519000 32475 005715 02520000 32476 076002 02521000 32477 141737 02522000 32500 005712 02523000 32501 170201 02524000 02525000 32502 045715 FNBL 1 02526000 32503 001712 02527000 32504 020000 02528000 32505 020000 02529000 32506 021712 02530000 32507 020000 02531000 32510 021714 02532000 32511 031712 02533000 32512 173060 02534000 32513 067325 LDB STB STB SOC WBC JSM JMP LDB RZB JSM LDB RET PO T 2 T 5 + I,C A,I DIGCK FNBL 1 T 5 + 2 HLINK,I T 2 ISZ T 5 LDA T 2 ADA A ADA A ADA T 2 ADA A ADA T 4 STA T 2 SOC FNBLN JMP ER F 2 INITIALIZE TO ZERO NUMBER BUILDING REGISTER COUNT OF DIGITS FOUND CLEAR OVERFLOW INDICATOR GET THE NEXT CHARACTER FROM FORMAT IS IT A DIGIT? YES; PROCESS IT NO; WERE THERE ANY DIGITS IF YES, RETURN THE VALUE BUILT IF NO, TRY FOR VARIABLE VALUE B = NUMBER BUILT DONE.

LOG IN A DIGIT FOUND GET THE NUMBER BUILT SO FAR (N) T 4 = DIGIT JUST FOUND (D) IN RANGE l 0,91 N = 10 N+ D IF NO OVERFLOW, TRY FOR ANOTHER DIGIT OTHERWISE, GIVE BAD INTEGER ERROR BUILD A NUMBER IN THE FORM W D ENTRY: C POINTS TO W D IN FORMAT STATEMENT

EXIT: FW = W OR 0 (NO W GIVEN) DP= D OR-1 (NO D GIVEN) 043466 DW D 035731 004257 010105 043466 035730 JSM STB LDB CPA JSM STB FNBLD FW Ml C.DP FNBLD DP BUILD A NUMBER SAVE FIELD WIDTH

SET TO CURRENT FIX/FLT JUST IN CASE DECIMAL POINT FOLLOWS? YES; BUILD D VALUE NO, USE -1; SAVE RESULT IN DP Page 449 02504000 02505000 02506000 02507000 02508000 02509000 02510000 02536000 02537000 02538000 02539000 02540000 02541000 02542000 02543000 02544000 02545000 02546000 02547000 02548000 32514 32515 32516 32517 32520 32521 516 516 517 Page 450 02550000 02551000 02552000 02553000 02554000 32522 010107 02555000 32523 170201 02556000 32524 010121 02557000 32525 067530 02558000 32526 004145 02559000 32527 067324 02560000 02561000 32530 074760 02562000 32531 170201 1,568,094 FORMATTING ROUTINES 517 CHECK FORMAT FOR PROPER TERMINATION MUST BE FOLLOWED BY COMMA OR END-OF-FORMAT TRMCK CPA C COM WAS TERMINATION COMMA? RET 1 YES; ALL IS WELL; GO BACK CPA C EFM END OF FORMAT? JMP F END YES; LOG THIS FACT LDB P 2 LOOKS BA Dl SET UNRECOGNIZED TERMINATOR JMP FHELP AND ASK FOR HELP F.END WBC A,D BACK UP SO SCAN WILL FIND EFM CHARACTER RET I AND PROCESS THIS SPEC' 51 1 5 /68 v 094 WRITE EXECUTION WRT , 32532 000177 EWRT 32533 042250 32534 043241 32535 043270 WLOOP 32536 073002 32537 067645 LDA PO JSM GSCFN JSM JSM SLA JMP FMSET NFMT + 2 SWRT SET FOR WRITE OPERATION AND SET UP SC, FMT#; CHECK HARDWARE SET UP FORMAT FOR WRITE DEMAND NEXT FORMAT IF BIT ( 0) = 0, NUMBER REQUIRED OTHERWISE, DO A STRING WRITE OUTPUT A NUMERIC ITEM 32540 001216 NWRT 32541 010257 32542 067653 32543 043604 32544 010254 32545 067642 32546 001727 32547 072402 32550 000160 32551 020103 32552 031746 32553 074570 32554 073006 32555 074770 32556 024254 32557 001727 32560 072002 32561 067613 32562 000071 NWRTP 32563 043635 32564 001731 SWRT 1 32565 024257 32566 174040 32567 024000 32570 176007 004000 076405 000114 031746 000254 031750 LDA CPA JMP JSM CPA JMP LDA SZA LDA ADA STA FWPRT Ml BWRT NPGET Pl FREST FFFLG + 2 M 16 B 60 LCHR WBD A,I SLA NWRTP WBD A,D ADB Pl LDA FFFLG RZA NWRTP JMP ER F 3 LDA A E JSM ESETN LDA FW ADB MI TCB ADB A SBP NWRT 1 LDB SZB LDA STA LDA STA 32577 024254 NWRT 1 32600 035747 32601 043617 32602 043626 32603 067535 ADB STB JSM JSM JMP A NWRT 1 C.DOL LCHR Pl NCC Pl LCNT DLCHR DCSTR WLOOP LOOK AT FORMATTED WPRT AND IF IT IS-1, OUTPUT UNDER BINARY FORMAT TRY FOR NEXT PARAMETER GOT IT; WAS IT STRING? YES; DO A FREE STRING LOOK AT TYPE IF A = 0 (FZ SPEC) SET LEADING ZEROS IF A #0 SET LEADING BLANKS SAVE ASCII CODE IN LEADING CHARACTER LOOK AT FIRST CHARACTER (-/SPACE) IF BLANK (BIT O = 0), OK IF MINUS (BIT O = 1), RESET D RESET COUNT PARM IS NEGATIVE; CHECK FOR FMT FZ IF NOT FZ FORMAT, GO ON DON'T ALLOW FZ FORMAT WITH MINUS NUMBER SET FOR LC E TO UC E CONVERSION AND SET NCC = COUNT + I A = FIELD WIDTH

B = #CHARACTERS B = FW #CHARS IF B> = 0, OUTPUT B LEADING CHARACTERS OTHERWISE, SET B = FW ALLOW FOR FREE-FIELD WIDTH

GET ASCII $ SET $ AS LEADING CHARACTER A =#CHARACTERS, B = # LEADING CHARS SET FOR NOTHING AFTER LEADING CHARACTER B = NUMBER LEADING CHARACTERS + I SAVE IN LEAD COUNT DUMP LEADING CHARACTERS DUMP THE CHARACTER STRING GO BACK FOR NEXT SPEC.

Page 451 02565000 02566000 02567000 02568000 02569000 02570000 02571000 02572000 02573000 02574000 02575000 02576000 02577000 02578000 02579000 02580000 02581000 02582000 02583000 02584000 02585000 02586000 02587000 02588000 02589000 02590000 02591000 02592000 02593000 02594000 02595000 02596000 02597000 02598000 02599000 02600000 02601000 02602000 02603000 02604000 02605000 02606000 02607000 02608000 02609000 02610000 02611000 02612000 32571 32572 32573 32574 32575 32576 518 1.568 094 1 l 1,568,094 WRITE EXECUTION 02614000 32604 000254 NPGET 02615000 32605 004505 32606 32607 32610 32611 32612 32613 32614 024145 140001 067433 055721 176007 140404 ER F 3 043463 LDA Pl LDB APGET ADB JSM JMP DSZ SBP JSM ASC P 2 B,I E.EFM NPCNT DLRET AERRI,I 1,G 3 SET TO GET NEXT PARAMETER GET ADDRESS OF PARAMETER GET ROUTINE OFFSET FOR ALTERNATE ENTRY AND GO THERE; MORE PARAMETERS? NO; EXIT THROUGH CR/LF CHECK YES; BUMP PARAMETER COUNT IF B> 0, ALL OK SO RETURN ERROR F 3 BAD PARAMETER ROUTINE TO DUMP LEADING CHARACTERS LCHR = LEADING CHARACTER CODE (ASCII) LCNT = LEADING CHARACTER COUNT + 1 001746 042417 055747 DLCHR 067615 170201 DLRET LDA JSM DSZ JMP RET LCHR IOIC LCNT -3 GET ASCII CHARACTER AND SEND IT DO IT AGAIN? YES NO ROUTINE TO DUMP A CHARACTER STRING NCC = NUMBER OF CHARACTER COUNT + 1 ECHR = CHARACTER TO DUMP FOR L C E WBD A,I CPA C E LDA ECHR JSM WRTAC DSZ NCC JMP DCSTN RET 1 LDA Pl JMP ABUMP,I GET THE NEXT BYTE FROM THE STRING IS IT A L C E? USE EITHER AN U C E OR A L C E OUTPUT THE CHARACTER MORE CHARACTERS IN THE STRING? YES; DUMP THE NEXT ONE NO; DONE.

32622 074570 DCSTN 32623 010063 32624 001751 32625 042421 32626 055750 DCSTR 32627 067622 32630 170201 32631 000254 BUM Pl 32632 164607 THIS ROUTINE SETS THE CHARACTER TO BE DUMPED FOR AN "E", AND SAVES NCC = B + I LDA C E ADB Pl STA ECHR STB NCC RET I STRING ENTRY; LEAVE L C "E" ALONE ADD 1 TO B FOR NCC COUNT NUMERIC ENTRY; A = U C "E" B = COUNT OF CHARACTERS + I 000063 ESETS 024254 031751 ESETN 035750 170201 519 Page 452 02616000 02617000 02618000 02619000 02620000 02621000 02622000 519 32615 32616 32617 32620 32621 02624000 02625000 02626000 02627000 02628000 02629000 02630000 02631000 02632000 02633000 02634000 02635000 02636000 02637000 02638000 02639000 02640000 02641000 02642000 02643000 02644000 02645000 02646000 02647000 02649000 02650000 02652000 02653000 02654000 02655000 02656000 02657000 02658000 02659000 02660000 32633 32634 32635 32636 32637 520 Page 453 02662000 02663000 02664000 02665000 02666000 32640 02667000 32641 02668000 32642 02669000 32643 02670000 32644 02671000 02672000 02673000 02674000 32645 02675000 32646 02676000 32647 02677000 32650 02678000 32651 02679000 32652 1,568,094 520 WRITE EXECUTION THIS ROUTINE OUTPUTS A FREE STRING FROM THE PARAMETER LIST WHEN A NUMERIC ITEM WAS EXPECTED 000177 043605 043633 043626 067540 FRESA FREST LDA JSM JSM JSM JMP OUTPUT A STRING 043604 SWRT 072445 000117 031746 043633 067564 JSM SZA LDA STA JSM JMP PO NPGET+I RE-GET PARAMETER IN ASCII FORM ESETS SET ECHR AND NCC FOR STRING OUTPUT DCSTR AND DUMP THE CHARACTER STRING NWRT TRY AGAIN FOR A NUMERIC PARAMETER NPGET ER.F 3 B 40 LCHR ESETS SWRT 1 FETCH THE NEXT PARAMETER IF A = 0, NUMERIC ITEM BAD SHO Wl SET LEADING CHARACTER TO BLANK SET ECHR AND NCC FOR STRING OUTPUT AND LET NUMERIC OUTPUT FINISH UP 1,568,094 WRITE EXECUTION 02681000 02682000 02683000 02684000 32653 02685000 32654 02686000 32655 02687000 32656 02688000 32657 02689000 32660 02690000 32661 02691000 32662 02692000 02693000 02694000 02695000 02696000 32663 02697000 32664 02698000 32665 02699000 32666 02700000 02701000 02702000 02703000 02705000 02706000 02707000 02708000 02709000 02710000 02711000 02712000 02713000 02714000 02715000 02716000 32667 32670 32671 32672 32673 32674 32675 32676 32677 32700 32701 OUTPUT A BINARY FORMATTED NUMBER 043631 BWRT 043433 040751 067640 055721 043663 141740 067535 JSM JSM JSM JMP DSZ JSM JSM JMP BUMPI 1 E.EFM NGET FRESA NPCNT BOFIX WRTIC,I WLOOP POINT TO NEXT PARAMETER IF NONE, LET E EFM FINISH UP DEMAND NUMERIC VALUE NON-NUMERIC; TRY FOR FREE STRING DECREMENT PARAMETER COUNT MAKE AN INTEGER AND SEND IT GO BACK FOR MORE THIS ROUTINE MAKES A BINARY NUMBER FROM FLOATING POINT NUMBER (OCT/DEC) 000001 BOFIX 004141 141737 040644 173002 067613 JERF 3 000001 170201 LDA LDB JSM JSM SOC JMP LDA RET B P 6 HLINK,I FIXPT + 2 ER.F 3 B A POINTS TO NUMBER TO BE FIXED SET FOR POSSIBLE OCTAL CONVERSION AND GIVE OCTAL ROUTINE A CHANCE IF NO HELP, CALL ON DECIMAL FIX-POINT IF NO OVERFLOW, GO ON OTHERWISE, GIVE OVERFLOW ERROR A = B RESULT WTB , 000177 EWTB 031726 042250 000257 031732 031216 067535 FAKE A "FMT Z, 65535 B" AND LET EWRT PROCESS IT LDA STA JSM LDA STA STA JMP PO Z.CSP GSCFN MI REP C FWPRT WLOOP SET FOR OUTPUT OPERATION RESET FOR SUPRESS/NO DATA SPECS AND GET THE SELECT CODE SET FOR 65535 REPEATS OF "FMT B" SET FORMAT WPRT TO "BINARY" ENTER "EWRT" AT NEXT FORMAT CALL 521 Page 454 521 522 Page 455 02719000 02720000 02721000 02722000 32702 02723000 32703 02724000 32704 02725000 32705 02726000 02727000 02728000 02729000 02730000 02731000 32706 02732000 32707 02733000 32710 02734000 02735000 02736000 02737000 32711 02738000 32712 02739000 32713 02740000 32714 02741000 32715 02742000 32716 02743000 32717 02744000 32720 02745000 32721 02746000 32722 02747000 32723 02748000 32724 02750000 02751000 02752000 02753000 32725 02754000 32726 02755000 32727 02756000 32730 02757000 32731 02758000 32732 02759000 32733 02760000 32734 1,568,094 READ EXECUTION 000263 042250 043241 031722 002727 016722 071604 043270 043631 043433 055721 101272 172005 040751 066060 001725 073013 140404 043465 043733 001722 073062 001721 010254 170201 004132 164376 522 RED , ERED LDA FLAG SET READ INDICATOR JSM GSCFN AND SET UP SELECT CODE, FORMAT NUMBER JSM FMSET INITIALIZE FORMAT STA RTFLG CLEAR READ-TERMINATE FLAG FREE-FIELD READ = FMT Z, 32767 FZ O

SET Z = SUPRESS, DP = 0, FW = 0, REP C = 0 LDA T 14 SET POINTER TO TEMPS, JUST IN CASE CPB SFMT IS THIS A FREE-FIELD FORMAT?

CLR 5 YES; DO FREE-FIELD SETUP

READ THE NEXT PARAMTER RCONT JSM NFMT DEMAND NEXT FORMAT JSM BUM Pl POINT TO NEXT PARAMETER JSM E EFM LIST EXHAUSTED; FINISH UP DSZ NPCNT GOT IT BUMP PARAMETER COUNT LDA FAP 1,I GET TYPE (WHAT WORD) SAP ER F 5 IF PARAMETER IS A CONSTANT, CAN'T READ JSM NGET CHECK TYPE OF THIS PARAMETER JMP SRED NON-NUMERIC; TRY FOR A STRING LDA RW SN NUMERIC; SEE IF FMT IS FOR A NUMERIC SLA NRED YES IT IS; DO A NUMERIC READ ER.F 5 JSM AERRI,I ERROR F 5 ASC 1,G 5 WRONG READ PARAMETER TYPE ROUTINES TO ABORT SINGLE PARAMETER OR READ LIST REDX JSM REDXX SET FLAG 13 TO TELL PARAMETER ABORTED RLOOP LDA RTFLO CHECK THE READ-TERMINATE FLAG SLA RCONT IF CLEAR, GO ON TO READ NEXT PARAMETER LDA NPCNT ELSE, SEE IF ALL PARAMS DONE CPA Pl IF READ/WRITE LIST COMPLETED RET 1 DON'T SET FLAG 13 REDXX LDB P 13 SET B FOR FLAG 13 SETTING JMP ASFG,I SET THE FLAG (IMPLIED RETURN) 523 Page 456 02762000 02763000 INPUT 02764000 02765000 32735 001216 NRED 02766000 32736 010257 02767000 32737 066144 02768000 02769000 32740 000305 02770000 32741 030017 02771000 32742 001731 02772000 32743 031747 02773000 32744 042527 02774000 32745 042025 02775000 32746 010107 02776000 32747 067725 02777000 32750 010135 NRED O 02778000 32751 067725 02779000 32752 172477 02780000 32753 042045 02781000 32754 067757 02782000 32755 042021 02783000 32756 067750 02784000 02785000 32757 042015 NREDI 02786000 32760 172405 02787000 32761 005731 02788000 32762 076075 02789000 32763 042035 02790000 32764 067757 1,568,094 READ EXECUTION 523 A NUMERIC ITEM LDA FWPRT CPA M 1 JMP BRED LDA ASTAK STA D LDA FW STA TFW JSM CSAV JSM REDFC CPA C COM JMP REDX CPA A LF JMP REDX SAM -1 JSM NSTCK JMP NRED 1 JSM REDNC JMP NRED O JSM STK 1 C SAM NRBLS LDB FW RZB NRED 1 JSM NUMCK JMP NRED 1 IS FXD/FLT FLAG = -1 ? YES; THIS IS A BINARY READ SET TO USE CSTAK FOR INPUT BUFFER SET TEMP-FW FOR COUNT DOWN SAVE C SINCE ANUMB WILL KILL IT READ FIRST INPUT CHARACTER IS IT A ","? YES; ABORT THIS PARAMETER LINE FEED ( 12 B)? NO NUMERIC DATA FOUND; SKIP THIS VALUE FW RAN OUT BEFORE NUMERIC DATA GOT BYTE; NUMERIC TYPE? YES; START NUMBER BUFFER NO; TRY THE NEXT CHARACTER AND TEST IT STACK A NUMERIC TYPE CHARACTER AND READ IF FW EXHAUSTED, GO TO NUMBER SCANNER FREE FIELD READ?

NO; KEEP READING YES; STILL READING NUMERIC TYPES? YES; CONTINUE UNTIL NON-NUMERIC TYPE 1,568,094 READ EXECUTION 02792000 32765 074550 NRBLS PBD A,I 02793000 32766 02794000 32767 02795000 32770 02796000 32771 02797000 32772 02798000 32773 02799000 32774 02800000 32775 02801000 32776 02802000 32777 02803000 33000 02804000 33001 02805000 02806000 33002 004325 034016 000177 031751 074560 NRBL 1 042047 066002 010106 045751 042041 067772 066004 031240 NRBLD 031240 NRB LD 02807000 33003 140352 02808000 33004 140404 ER F 7 02809000 02810000 02811000 02812000 02813000 02814000 02815000 02816000 33005 33006 33007 33010 33011 33012 33013 33014 043467 000021 072404 001751 073002 044020 042523 NRBLP 066146 LDB STB LDA STA WBC JSM JMP CPA ISZ JSM JMP JMP ASTKF C PO MSGN A,I DDPCK NRBLD A.MIN MSGN NUMDK NRBL 1 ER.F 7 STACK A DELIMITER IN CASE FW ENDED READ SET C TO START OF BUFFER RESET THE MANTISSA-SIGN INDICATOR CHECK THE FIRST BYTE READ WAS IT A DIGIT OR DECIMAL POINT? YES; GO TO THE NUMBER BUILDER NO; A MINUS SIGN? YES; LOG IN A MINUS SIGN NO; WAS IT AN "E"? NO; GO ON CHECKING YES; THAT WILL NEVER DO; GIVE ERROR.

STA BCD "NUMB" EXPECTS FIRST CHARACTER HERE JSM ANUMB,I AND CALL ON THE NUMBER BUILDER JSM AERRI,I NUMBER BUILDER CAME UP CRAP Sl ERROR F 7 ASC LDA SZA LDA SLA ISZ JSM JMP 1,G 7 AR 2 + 1 NRBLP MSGN + 2 AR 2 CGET BRED 1 BAD INPUT DATA LOOK AT FIRST MANTISSA WORD IF ZERO, SKIP " " CHECK TO AVOID O " CHECK THE MANTISSA-SIGN INDICATOR IF POSITIVE, GO ON IF NEGATIVE, SET MANTISSA SIGN IT IS SAFE TO RESTORE C NOW AND EXIT THROUGH STORAGE ROUTINE Page 457 524 524 1,568,094 525 READ EXECUTION THIS ROUTINE SAVES A CHARACTER AND READS ANOTHER ONE ON EXIT, A IS THE CODE READ UNLESS TFW IS EXHAUSTED, IN WHICH CASEA = 1.

33015 004017 STKIC 33016 016742 33017 066004 33020 074550 33021 000257 REDNC 33022 055747 33023 066025 33024 170201 33025 042425 REDFC 33026 010132 33027 066025 33030 010136 33031 067446 33032 010135 33033 045722 33034 170201 02842000 02843000 02844000 02845000 02846000 02847000 02848000 33035 02849000 33036 02850000 33037 02851000 33040 02852000 33041 02853000 33042 02854000 33043 02855000 33044 02856000 33045 02857000 33046 02858000 33047 02859000 33050 02860000 33051 02861000 33052 02862000 33053 02863000 33054 02864000 33055 02865000 33056 02866000 33057 LDB CPB JMP D ASLMM ER.F 7 PBD A,I LDA DSZ JMP RET JSM CPA JMP CPA JMP CPA ISZ RET Ml TFW REDFC 1 REDAC A.CR REDFC A.SKP ECRLF A.LF RTFLG LOOK AT BUFFER POINTER END OF BUFFER? YES; ERROR ( 160 NUMERICS IS RIDICULOUS) NO; SAVE THIS CHARACTER SET TO END-OF-FIELD (EOF) JUST IN CASE

IF FIELD WIDTH NOT EXHAUSTED,

READ A CHARACTER OTHERWISE, RETURN WITH -1 INPUT THE NEXT CHARACTER ASCII CR? YES; IGNORE THIS CHARACTER ASCII SKIP CODE? READ TO NEXT RECORD AND RETURN WITH A LF LINE FEED WITHOUT PRECEEDING SKIP? YES; SET READ TERMINATE FLA Gl RETURN WITH A = CHARACTER THIS ROUTINE CHECKS FOR "NUMERIC" TYPE CHARACTERS 0-9, DECIMAL POINT, E +, AND ARE ALLOWED CHARACTERS ALL OTHERS ARE NON-NUMERIC AND ACT AS DELIMITERS 010071 NUMCK CPA 000063 LDA 010063 CPA 170201 RET 010117 NUMDK CPA 170201 RET 010110 CPA 170201 RET 010106 NSTCK CPA 170201 RET 010105 DDPCK CPA 170201 RET 004000 DIGCK LDB 024163 ADB 035714 STB 176403 S B M 024207 ADB 176472 S B M 170202 RET A.E C.E C.E 1 B 40 1 A.PLS 1 A.MIN 1 C.DP A ASCII E? ALLOW L C OR U C "E" FOR EXPONENT BLANK? ASCII +? ASCII -? ASCII ? M 48 B =A-48 T 4 T 4 = DIGIT IN RANGE l 0,9 l + 3 IF B< 0, A:l 0,47 l, NOT AN DIGIT M 10 B = A-58 DIGCK-1 IF B> 0, A> 58, NOT A DIGIT 2 NON-NUMERIC TYPE; RET P+ 2 525 Page 458 02818000 02819000 02820000 02821000 02822000 02823000 02824000 02825000 02826000 02827000 02828000 02829000 02830000 02831000 02832000 02833000 02834000 02835000 02836000 02837000 02838000 02839000 02840000 526 Page 459 02868000 02869000 IN Pl 02870000 02871000 33060 101272 SRED 02872000 33061 012743 02873000 33062 066070 02874000 33063 012744 02875000 33064 066070 02876000 33065 004132 02877000 33066 141737 02878000 33067 067723 02879000 02880000 33070 005272 SRED O 02881000 33071 024145 02882000 33072 100001 02883000 33073 030017 02884000 33074 074770 02885000 33075 024145 02886000 33076 100001 02887000 33077 031746 02888000 33100 071600 02889000 33101 024254 02890000 33102 10000102891000 33103 020145 02892000 33104 100000 02893000 33105 031750 1,568,094 READ EXECUTION 526 JUT A STRING ITEM LDA FAPI,I CPA STR S JMP SRED O CPA STR A JMP SRED O LDB P 13 JSM HLINK,I JMP ER F 5 LDB FA Pl ADB P 2 LDA B,I STA D WBD A,D ADBP 2 LDA B,I STA LEN CLR 1 ADB Pl LDA B,I ADA P 2 LDA A,I:

STA R LIM GET THE TYPE WORD FOR THIS PARAMETER IS IT A SIMPLE STRING? YES; PROCESS IT IS IT A SIMPLE STRING FROM AN ARRAY? YES; PROCESS IT NONE OF THE ABOVE; SET FOR SUBSCRIPTED STRING TYPE AND ASK FOR HELP NONE; GIVE BAD READ PARAMETER ERROR GET STACK POINTER POINT TO WHERE WORD GET BYTE POINTER TO FIRST CHARACTER AND SET UP D FOR CHARACTER STUFFING BACK UP POINTER SINCE PBD INCRMS, FIRST POINT TO POINTER TO CURRENT LENGTH GET THE POINTER AND SAVE THIS POINTER TO UPDATE LENGTH SET STRING LENGTH TO ZERO POINT TO POINTER TO ORGANIZATION DATA A = LEN (DIMENSIONED LENGTH) SET THIS AS INITIAL READ COUNT LIMIT 527 Page 460 02895000 02896000 02897000 02898000 02899000 02900000 02901000 02902000 02903000 33106 02904000 33107 02905000 33110 02906000 33111 02907000 33112 02908000 33113 02909000 33114 02910000 33115 02911000 33116 02912000 33117 02913000 33120 02914000 33121 02915000 33122 02916000 33123 02917000 33124 02918000 02919000 33125 02920000 33126 02921000 33127 02922000 33130 02923000 33131 02924000 33132 02925000 33133 02926000 02927000 33134 02928000 33135 02929000 33136 02930000 33137 02931000 33140 02932000 33141 02933000 33142 02934000 33143 1,568,094 READ EXECUTION 004177 035751 001725 073012 001731 072410 045751 005750 174040 024000 176003 031750 004177 024254 035747 042425 005751 077405 010132 066125 010135 THIS SECTION SETS Ul FREE STRING (RW SN FREE FIELD (FW= 0)

FORMATTED, FW>L FORMATTED, FW

IS THIS A FREE-STRING (NUMBER EXPECTED) YES; R LIM IS OK; SET R AFT=I NO; SET A=FW IF FW= 0, R LIM IS OK; SET R AFT=I NO; SET TO FORMATTED READ A=FW B=FW-LEN IF FW≥LEN, R LIM IS OK; SET R AFT OTHERWISE, SET R LIM=FW AND R AFT= 1 OFFSET COUNT BY 1 FOR DSZ COUNTDOWN SET NUMBER OF BYTES TO BYPASS AFTER REA READ THE NEXT BYTE FROM THE PERIPHERAL IS THIS A FREE-FIELD READ

NO; ONLY TERMINATE ON R LIM YES; WAS CHARACTER A CARRIAGERETURN? IF SO, FREE-FIELD IGNORES THEM

WAS THE CHARACTER A LINE-FEED? YES; TERMINATE AND TRY AGAIN FOR NUMERI PUT THE CHARACTER IN THE STRING INCREMENT THE CURRENT LENGTH COUNT HAVE WE READ TO THE LIMIT? NO; READ THE NEXT STRING CHARACTER YES; READ PAST ANY REMAINING FIELD-

WIDT CHECK WHETHER THIS WAS FREE-FIELD

IT WAS, SO TRY AGAIN FOR NUMERIC IT WAS FORMATTED, SO GO TO NEXT FORMAT 1,568,094 528 READ EXECUTION INPUT A BINARY FORMATTED NUMBER 141741 BRED 042153 005272 BREDI 040616 000127 071403 067726 JSM JSM LDB JSM LDA XFR JMP REDIC,I BOFLT FA Pl ABSAD+I ADR 2 4 RLOOP READ ONE BYTE MAKE A FULL-PRECISION NUMBER SET UP SOURCE AND DESTINATIONS AND SAVE RESULT GO BACK FOR MORE BUILD A DECIMAL OR OCTAL FLOATING NUMBER 004142 BOFLT 141737 004000 164563 LDB JSM LDB JMP P 5 HLINK,I A AFLTP,I SET FOR POSSIBLE OCTAL CONVERSION AND GIVE OCTAL ROUTINE A CRACK B IS VALUE TO FLOAT EXIT THROUGH FLOAT-POINT ROUTINE READ EXECUTION RDB () RDB () 000263 ERDB 042250 141741 042153 ERDB 1 000127 004340 071403 054003 001734 030016 055721 067613 005272 040616 031263 164366 LDA JSM JSM JSM LDA LDB XFR DSZ LDA STA DSZ JMP LDB JSM STA JMP RDS () RDS () 000257 ERDS 042250 005723 176003 004144 066302 172255 004143 141737 066162 LDA JSM LDB SBP LDB JMP SAP LDB JSM JMP FUNCTION FLAG GSCFN BUILD AND SET UP SELECT CODE RED 1 C,I READ A BYTE BOFLT BUILD A FLOATING NUMBER ADR 2 ARES 4 PUT THE RESULT IN RES R CANCEL MAIN EXECUTION RETURN CSAVE C AND RESTORE VALUE OF C NPCNT HOW MANY FUNCTION PARAMETERS? ER.F 3 MORE THAN ONE; GIVE ERRO Rl FA Pl GET THE STACK POINTER ABSAD+I FORM ADDRESS OF BOTTOM OF STACK A Pl AND RESET A Pl ARAP,I CAUSE I'M GOING OUT THE BACK DOOR.

FUNCTION MI GSCFN DN.SC + 3 P 3 SHELP ERDB I,C P 4 HLINK,I ERDB 1 SET TO BYPASS BUS SETUP BUILD AND SET UP SELECT CODE LOOK AT THE CARD TYPE SPECIFIED IF CARD STATUS REQUIRED, GO ON ELSE, SET FOR HP-IB SERIAL POLL AND GO TO EXTIO (OR ERROR F 4) IF GPIO CARD, RETURN STATUS BYTE GIVE EXTIO A CHANCE TO RETURN EXTENDED HP-IB STATUS BYTES AND RETURN VALUE OF MAIN STATUS BYTE 528 Page 461 02936000 02937000 02938000 02939000 02940000 02941000 02942000 02943000 02944000 02945000 02947000 02948000 02949000 02950000 02951000 02952000 02953000 33144 33145 33146 33147 33150 33151 33152 33153 33154 33155 33156 Page 462 33157 33160 33161 33162 33163 33164 33165 33166 33167 33170 33171 33172 33173 33174 33175 33176 02955000 02956000 02957000 02958000 02959000 02960000 02961000 02962000 02963000 02964000 02965000 02966000 02967000 02968000 02969000 02970000 02971000 02972000 02973000 02975000 02976000 02977000 02978000 02979000 02980000 02981000 02982000 02983000 02984000 02985000 02986000 02987000 33177 33200 33201 33202 33203 33204 33205 33206 33207 33210 1,568,094 CONVERSION-TYPE STATEMENTS

02990000 02991000 CONV 02992000 02993000 SET L 02994000 02995000 33211 000177 ECONV 02996000 33212 042236 02997000 33213 024141 02998000 02999000 03000000 03001000 03002000 03003000 03004000 03005000 33214 33215 33216 33217 33220 33221 33222 33223 034017 140610 072420 073003 140404 ER F 6 043466 022736 172075 03006000 03007000 33224 040751 ECONL 03008000 33225 066220 03009000 33226 043663 03010000 33227 074551 03011000 33230 174506 03012000 33231 076067 03013000 33232 043631 03014000 33233 066235 03015000 33234 066224 03016000 33235 000017 03017000 33236 004134 ECONX 03018000 33237 025045 03019000 33240 130001 03020000 33241 170201 , , JP CODE CONVERSION TABLE LDA JSM ADB STB JSM SZA SLA JSM ASC ADA SAP JSM JMP JSM PBD SBR RZB JSM JMP JMP LDA LDB ADB STA RET PO ECONX P 6 D ACOUN,I ECONX + 3 AERRII 1,G 6 M 21 ER.F 6 NGET ER.F 6 BOFIX B,I 7 ER.F 6 BUMP 1 + 2 ECONL D Pll FSPTR B,I CLEAR CONVERSION WORD TO NULL FORM ADDRESS OF START CONVERSION TABLE

AND SET D TO PLACE BYTES HOW MANY PARAMETERS? NONE; CLEAR CONV FLAG AND GET OUT AN EVEN NUMBER, SO GO ON ODD NUMBER; ERROR F 6 IMPROPER CONVERSION PARAMETER IF NUMBER OF PARAMETERS > 20, GIVE ERROR (TABLE ONLY HOLDS 10 PAIRS) DEMAND A NUMERIC VALUE NON-NUMERIC, GIVE ERROR G 6 MAKE INTEGER USING DEC/OCT FLAG PLACE THE BYTE IN CONV TABLE MORE THAN SEVEN BITS? YES; NOT ALLOWED TRY FOR ANOTHER PARAMETER NONE; TABLE COMPLETE MORE; LOOP TO BUILD TABLE GET ADDRESS OF LAST TABLE ENTRY SET TO SAVE ADDRESS IN CVTBL (STOLEN) SET CVTBL WITH CONTENTS OF A DONE; GET OUT 03022000 33242 031723 SCRDS 03023000 33243 030011 03024000 33244 050045 03025000 33245 020161 03026000 33246 172035 03027000 33247 066573 STA DN SC STA PA AND ADA SAP JMP B 377 M 17 ER.F 4 REDST SAVE A AS SELECT CODE/DEVICE NUMBER AND SET THE PERIPHERAL ADDRESS REGISTER KEEP ONLY THE SELECT CODE PART IS IT IN THE RANGE l 0,16 l? NO; GIVE BAD SC ERROR YES, EXIT THROUGH READ-STATUS ROUTINE 529 Page 463 529 530 1,568,094 530 SELECT CODE SET UP ROUTINES THIS ROUTINE DOES THE INITIAL SELECT-CODE SETUP ALLOWED SC FORMATS: S F, SS F, SDD F, SSDD F WHERE SS = SELECT CODE, DD = DEVICE NUMBER (HPIB) AND F = FORMAT REFERENCE NUMBER ENTRY: A = O (WRITE), 100000 (READ), 177777 (STATUS) ON EXIT: DN SC = GPIO/HPIB FLAG (BIT 15) DEVICE NUMBER (BITS 14-8) SELECT CODE (BITS 7-0) FMT N = FORMAT NUMBER HARDWARE CHECKED FOR VALID CONFIGURATION AND SET 03046000 33250 031725 GSCFN 02047000 33251 140610 03048000 33252 035721 03049000 33253 040751 03050000 33254 172325 03051000 33255 000001 GSCX 03052000 33256 004127 03053000 33257 071403 03054000 33260 000020 03055000 33261 073422 03056000 33262 170405 03057000 33263 020254 03058000 33264 004132 03059000 33265 172405 03060000 33266 170040 03061000 33267 020133 03062000 33270 004000 03063000 33271 176412 03064000 33272 000177 GSCFI 03065000 33273 031733 03066000 33274 075500 03067000 33275 031720 33276 000001 33277 174502 33300 076005 33301 004134 33302 141737 33303 140404 33304 043464 33305 000023 33306 030021 33307 042372 HLP 11 I SHELP ER.F 4 GSCF 2 03078000 33310 035723 03079000 33311 042372 03080000 33312 000001 03081000 33313 005723 03082000 33314 076013 STA JSM STB JSM SAP LDA LDB XFR LDA RLA AAR ADA LDB SAM TCA ADA LDB SBM LDA STA RW.SN ACOUN,I NPCNT NGET HL Pl I 1,S B ADR 2 4 AR 2 ER.F 4 6 Pl P 13 GSCF 1 P 12 A ER.F 4 PO EXTBA MRY STA FMT N LDA SBR RZB LDB JSM JSM ASC LDA STA JSM B 3 GSCF 2 Pll HLINK,I AERRI,I 1,G 4 AR 2 + 3 AR 2 + 1 BLD 2 D STB DN SC JSM BLD 2 D LDA LDB RZB B DN.SC GSC 2 SAVE READ/WRITE FLAG SET TO FIRST PARAMETER SAVE NUMBER OF PARAMETERS DEMAND A NUMERIC VALUE IF NON-NUMERIC, ASK FOR HELP A = ADDRESS OF SC PARAMETER TRANSFER PARAMETER TO AR 2-REGISTER LOOK AT THE EXPONENT WORD IF MANTISSA IS NEGATIVE, GIVE ERROR A = EXPONENT (E) A=(E+ 1) S El FOR 13 SHIFTS JUST IN CASE IF E-1, SC = 0 0 SO USE 13 SHIFTS ELSE, SET A = 11 -E INTO B AS NUMBER OF PLACES TO SHIFT IF B< 0, E> 1 1; TOO BIG, GIVE ERROR SET TO SHIFT IN ZEROS CLEAR EXTENDED BUS ADDRESSING (FOR EXTIC POSITION DP TO FOLLOW DIGIT 12 ANY DIGIT AFTER DP IS FORMAT NUMBER A = 11 E (PLACES SHIFTED) SEE IF # SHIFTS WAS LESS THAN 8 NO, WE HAD 4 DIGITS OR LESS AND CALL ON EXTIO FOR HELP THROUGH THE HELP LINK WORD NO HELP, GIVE ERROR F 4 BAD SELECT CODE PARAMETER GET 4-DIGITS OF SC PARAMETER SET THEM FOR THE NUMBER BUILDER BUILD AN INTEGER OUT OF FIRST 2 DIGITS AND SAVE THESE FOR NOW BUILD AN INTEGER OUT OF NEXT 2 DIGITS A = LOW DIGITS B = HIGH DIGITS IF B> 0, THIS IS 3 OR 4-DIGIT SC (HPIB) Page 464 03030000 03031000 03032000 03033000 03034000 03035000 03036000 03037000 03038000 03039000 03040000 03041000 03042000 03043000 03044000 03045000 03068000 03069000 03070000 03071000 03072000 03073000 03074000 03075000 03076000 03077000 530 1,568,094 530 1,568,094 SELECT CODE SET UP ROUTINES 03084000 03085000 2-DIG 03086000 03087000 33315 042242 03088000 33316 077422 03089000 33317 042650 03090000 33320 066517 03091000 33321 066303 JERF 4 03092000 33322 001745 03093000 33323 172403 03094000 33324 050103 03095000 33325 072013 03096000 33326 066364 JERF 9 03097000 03098000 4-DIG 03099000 03100000 33327 020162 GSC 2 03101000 33330 172071 310)2000 33331 020117 03103000 33332 170607 03104000 33333 060001 03105000 33334 062740 03106000 33335 042242 03107000 33336 172026 03108000 33337 014257 03109000 33340 170201 GSC 1 IT SC (GPIO) JSM RLB JSM JMP JMP LDA SAM AND RZA JMP SCRDS GSCI CKPA SENDI ER.F 4 STBYT JERF 9 B 60 GSCI ER.F 9 CHECK SELECT CODE AND READ STATUS IF READ STATUS ONLY, QUIT HERE WHAT IS THE PA SET TO? PA = 0; EXIT THROUGH BUFFER SETUP PA = 1; DON'T ALLOW RED/WRT TO CASSETTE PA > 1; GET THE STATUS BYTE IF HP-IB CARD, NOT RIGH Tl KEEP ONLY THE IDENTIFIER BITS ( 5-4) IF CARD IS THERE, DONE.

NO CARD, OR TYPE 00 (NON-STANDARD) CARD IT SC (HPIB) ADA SAP ADA SAL IOR IOR JSM SAP M 32 JERF 4 P 32 8 B BSMSK SCRDS ER.F 9 CPB M 1 RET I IS DN IN RANGE ( 0,31)? NO; GIVE ERROR YES; RESTORE A = DN POSITION DN BITS INCLUDE SC BITS AND SET HPIB FLAG BITS CHECK SC AND READ STATUS IF NOBODY OR GPIO, CONFIGURATION ERROR IF RW SN = -1, SKIP BUS SETUP AND GET OUT Page 465 531 531 1,568,094 SELECT CODE SET UP ROUTINES THIS SECTION SETS UP THE HPIB BY SEND UNIVERSAL UNLISTEN COMMAND