DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦dd1dbcc20⟧ TextFile

    Length: 179584 (0x2bd80)
    Types: TextFile
    Names: »D60«

Derivation

└─⟦6966c2393⟧ Bits:30005867/disk08.imd Dokumenter (RCSL m.m.)
    └─⟦this⟧ »D60« 

TextFile

F_                 PREFACE 
           
           
          The RC 8000 Computer Family is a family of medium scale general
          purpose computers designed and manufactured by A/S Regnecentra-
          len. The models in the family share a common architecture with an
          asynchronous unified bus giving full compatibility with respect
          to peripheral devices and allowing multi CPU configuration. The
          common instruction set includes multiply/divide and floating
          point arithmetic and support for mutually protected multiprogram-
          ming. The models differ in CPU implementation and in physical
          specification resulting in different sets of instruction execu-
          tion times and different configuration possibilities. 
           
          This manual provides the common basic programming information for
          programmers and users of the RC 8000 Computers: 
           
          -  Chapter 1 lists the common specifications. 
          -  Chapter 2 contains a survey of design features and gives a
             preliminary introduction to concepts used in chapters 3-9 in
             an attempt to reduce the need for forward references during
             the first sequential reading of these. 
               -  Chapters 3-5 describe data formats, instruction format, memory
             addressing and arithmetic. 
               -  Chapter 6 describes the multiprogrammming facilities. 
          -  Chapter 7 describes the facilities for program error
             diagnostis and debugging. 
          -  Chapter 8 describes the input/output control. 
          -  Chapter 9 describes the power restart and autoload facilities.
          -  Chapter 10 completes the picture with a formal algorithmic
             description of the information in the preceeding chapters. 
                
          Although the manual contains hints and examples of efficient use
          of the instruction set, no attempt is made to teach programming
          techniques. 
           
          Instruction execution times and other model specific information
          are given in the General Information Manual for each model. 
           
          The function of peripheral devices is described in separate
          manuals. \f

\f

                   TABLE OF CONTENTS 
           
PREFACE                                                Page 11
           
          1  RC 8000 SPECIFICATIONS                                   12
 
          2  DESIGN FEATURES                                          14
             2.1 Operand Length                                       14
             2.2 Registers and Addressing                             14
                 2.2.1 Registers Structure                            14
                 2.2.2 Program Relocation                             17
                 2.2.3 Address Calculation                            17
             2.3 Escape and Exception                                 17
             2.4 Monitor Control                                      18
                 2.4.1 Memory Protection                              18
                 2.4.2 Privileged Instructions                        18
                 2.4.3 Program Interruption                           18
                 2.4.4 Monitor Calls                                  19
             2.5 Input/Output System                                  19
                 2.5.1 Bus Control                                    20
                 2.5.2 Bus Communication                              20
 
          3  DATA FORMATS AND INSTRUCTION                             21
             3.1 Data Formats                                         21
             3.2 Working Registers                                    21
             3.3 Instruction Format                                   22
                 3.3.1 Notation of Examples                           23
                 3.3.2 Address Modification in Next Instruction       25
             3.4 Use of the Effective Address as an Operand           26
                 3.4.1 Load of Immediate Values                       26
                 3.4.2 Skip instructions                              27
                 3.4.3 Shift instructions                             28
             3.5 Use of the Effective Address
                 to refer to Memory Locations                         28
                 3.5.1 Process Area                                   29
                 3.5.2 Common Protected Area                          30
                 3.5.3 Working Registers and Non-accessible Area      30
                 3.5.4 Memory Addressing. Example of user Program     31
             3.6 Jump Instructions                                    32
                 3.6.1 Jump, Example 1                                33
                 3.6.2 Jump, Example 2                                33
                 3.6.3 Jump, Example 3                                34
             3.7 Register Transfer Instructions                       34
             3.8 Logical Operations                                   36
   3.9 Skip if no protection                                37\f

                   4  INTEGER ARITHMETIC                                       38
             4.1 Number Representation                                38
             4.2 Halfword Arithmetic                                  38
             4.3 Word Arithmetic                                      39
             4.4 Doubleword Arithmetic                                39
             4.5 Multiplication and Division                          40
             4.6 Overflow and Carry Indication                        41
             4.7 Exception Register Instructions                      43
 
          5  FLOATING-POINT ARITHMETIC                                47
             5.1 Number Representation                                47
             5.2 Arithmetic Operations                                48
             5.3 Normalization and Rounding                           48
             5.4 Underflow, Overflow and Non-normalized Operands      49
             5.5 Floating Point Instruction                           50
             5.6 Number Conversion                                    50
             5.7 Examples                                             51
 
          6  MONITOR CONTROL                                          54
             6.1 System Table                                         54
             6.2 Entering the Monitor Program                         55
             6.3 Reactivation of User Program                         56
             6.4 Monitor Calls                                        57
             6.5 Interrupts                                           58
                 6.5.1 Internal Interrupt                             58
                 6.5.2 Power Failure and Timer                        58
                 6.5.3 External Interrupts                            59
             6.6 Disabling of Interrupts                              59
             6.7 Interrupt Response                                   60
             6.8 Control of Monitor Registers                         60
 
          7  EXCEPTIONS AND ESCAPE                                    61
             7.1 Exception                                            61
                 7.1.1 Register Dump at Exception                     61
                 7.1.2 Program Exception                              62
       7.1.3 Arithmetic Exceptions                          62
       7.1.4 Exception Routine                              62
   7.2 Escape                                               65
                 7.2.1 Escape in Indirect Address Calculation         65
                 7.2.2 Escape Mask and Escape Pattern                 66
                 7.2.3 Escape Active                                  66
                 7.2.4 Register Dump at Escape                        66
                 7.2.5 Escape Routine                                 68
                 7.2.6 Return from Escape                             68
                 7.2.7 Examples and Hints                             69
 \f

          8  INPUT/OUTPUT SYSTEM                                      74
             8.1 Main Characteristics                                 74
             8.2 Input and Output Operations                          74
                 8.2.1 Data In Instruction                            74
                 8.2.2 Data Out Instruction                           75
                 8.2.3 Exception Indication                           76
                 8.2.4 Memory Addressing                              76
             8.3 Standardized Block-oriented Device Controllers       76
                 8.3.1 Device Address                                 77
                          8.3.2 Device Descriptions                            78
                 8.3.3 Channel Program                                78
                          8.3.4 Standard Status Information                    80
 
          9  POWER RESTART AND AUTOLOAD                               82
             9.1 Power Restart                                        82
   9.2 Autoload                                             83
 
10 FORMAL DESCRIPTION                                       86
     10.1 Introduction                                        86
   10.2 Notation                                            87
        10.2.1  Registers                                   87
        10.2.2  Booleans                                    88
        10.2.3  Integer Arithmetics                         88
                  10.2.4  Memory Access                               88
        10.2.5  Bitpatterns                                 89
        10.2.6  Abbreviations                               89
   10.3 Common routines                                     90
        10.3.1  procedure getword;                          90
        10.3.2  procedure getdouble1;                       91
        10.3.3  procedure getdouble2;                       92
        10.3.4  procedure get nonprotected;                 92
        10.3.5  procedure get address;                      93
        10.3.6  procedure get instruction;                  93
        10.3.7  procedure store word;                       94
        10.3.8  procedure set bus exceptions;               95
        10.3.9  normalize and round;                        95
        10.3.10 exit to program;                            96
   10.4 Instruction Control                                 97
        10.4.1  next instruction:                           98
   10.5 Address Calculation                                100
   10.6 Instruction Execution                              101
        10.6.1  aa:                                        101
        10.6.2  ac:                                        102
        10.6.3  ad:                                        102
        10.6.4  al:                                        103\f

        10.6.5  am:                                        103
                  10.6.6  as:                                        103
     10.6.7  cf:                                        104
        10.6.8  ci:                                        105
        10.6.9  di:                                        105
        10.6.10 dl:                                        105
        10.6.11 do:                                        106
        10.6.12 ds:                                        106
        10.6.13 ea:                                        107
        10.6.14 el:                                        107
        10.6.15 es:                                        108
        10.6.16 fa:                                        108
        10.6.17 fd:                                        110
        10.6.18 fm:                                        111
        10.6.19 fs:                                        111
            10.6.20 gg:                                        113
        10.6.21 gp:                                        113
        10.6.22 hl:                                        114
        10.6.23 hs:                                        114
        10.6.24 jd:                                        114
        10.6.25 je:                                        115
        10.6.26 jl:                                        115
        10.6.27 la:                                        116
        10.6.28 ld:                                        116
        10.6.29 lo:                                        116
        10.6.30 ls:                                        117
        10.6.31 lx:                                        117
        10.6.32 nd:                                        117
        10.6.33 ns:                                        118
        10.6.34 re:                                        119
        10.6.35 ri:                                        119
        10.6.36 rl:                                        119
        10.6.37 rs:                                        119
        10.6.38 rx:                                        120
        10.6.39 se:                                        120
        10.6.40 sh:                                        120
        10.6.41 sl:                                        121
        10.6.42 sn:                                        121
        10.6.43 so:                                        121
        10.6.44 sp:                                        122
        10.6.45 ss:                                        122
        10.6.46 sx:                                        122
        10.6.47 sz:                                        123
        10.6.48 u0: u30: u31: u51: u58: u59: 
                u60: u61: u62: u63:                        123\f

        10.6.49 wa:                                        123
                  10.6.50 wd:                                        124
        10.6.51 wm:                                        124
        10.6.52 ws:                                        125
        10.6.53 xl:                                        125
        10.6.54 xs:                                        126
        10.6.55 zl:                                        126
                     10.7 Monitor calls and interrupt                        126
        10.7.1  external interrupt:                        127
                     10.7.2  fetch error:                               127
        10.7.3  operand error:                             127
        10.7.4  call:                                      128
        10.7.5  ri algorithm:                              130
                10.8 Exception and escape                               131
        10.8.1  program exception:                         131
                     10.8.2  integer exception:                         132
        10.8.3  floating point exception:                  132
        10.8.4  escape:                                    133
        10.8.5  re algorithm:                              135
 
A1 Appendix 1                                              137
   A1.1 Instructions in Alphabetic Order by Mnemonics      137
 
A2 Appendix 2                                              139
  A2.1 Instructions in Order of Numeric Code              139
 
A3 Appendix 3                                              141
   A3.1 Instructions in Order of Escape Pattern            141
 
A4 Appendix 4                                              143
 \f

F_   1         RC 8000 SPECIFICATIONS 
           
           
          I_m_p_l_e_m_e_n_t_a_t_i_o_n_ 
          Large-scale integrated circuits extensively used. 
          Compromise between hardwired logic and microprogramming, balan-
          cing flexibility and speed. 
           
          B_u_s_ _S_t_r_u_c_t_u_r_e_ 
          Asynchronous unified bus. 
          Parallel data lines (24 bits + 3 parity bits) and address lines
          (23 bits + 1 parity bit). 
           
          P_r_i_m_a_r_y_ _M_e_m_o_r_y_ 
          Direct addressing of up to 4 194 304 words. Each word contains 24
          data bits. Parity check or error recovery are supplied in all
          models. Memory type and configuration depends on model. 
           
          P_e_r_i_p_h_e_r_a_l_s_ 
          Complete range of input/output devices, interfaced through peri-
          pheral processors or programmable front end. Both processor types
          are connected to the unified bus. 
           
          W_o_r_k_i_n_g_ _R_e_g_i_s_t_e_r_s_ 
          Four 24-bit working registers, three of which also function as
          index registers. 
          The registers are addressable as the first four words of the
          primary memory. 
           
          D_a_t_a_ _F_o_r_m_a_t_s_ 
          12-bit halfwords and 24-bit words for integer arithmetic. 
          48-bit double words for integer and floating-point arithmetic. 
           
          I_n_s_t_r_u_c_t_i_o_n_ _F_o_r_m_a_t_ 
          24-bit single-address instruction. Address modification includes
          indexing, indirect addressing and relative addressing. 
          Dynamic relocation through use of modified base register tech-
          nique. 
           
          I_n_s_t_r_u_c_t_i_o_n_s_ 
          Comprise 64 function codes, each working on 4 registers, with 16
          address calculation modifications and a 12-bit displacement.
          Arithmetic includes add, subtract, multiply and divide. 
          Data manipulation aided by halfword operations and word compa-
          rision. \f

          Logical operations permit setting and testing af single bits. 
          Escape facility permits programmed actions on any or all instruc-
          tions. 
          Exception concept permits programmed diagnostics on programming
          errors. 
           
          P_r_o_t_e_c_t_i_o_n_ _S_y_s_t_e_m_  
          Privileged instructions and memory protection associated with a
          monitor mode ensure complete monitor control. 
          Monitor mode is entered through monitor calls and interrupts. 
          Violation of protection system leads to exceptions. 
           
          I_n_t_e_r_r_u_p_t_i_o_n_ _S_y_s_t_e_m_ 
          Program interruption system with priority levels. 
          Assignment of levels and disabling of interrupts under program
          control. 
          Power failure interrupt and power restart are standard. 
           
          I_n_p_u_t_/_o_u_t_p_u_t_ _S_y_s_t_e_m_ 
          All peripherals are connected to the unified bus. 
          Blockoriented controllers are standardized and perform all in-
          put/output functions under the control of channel programs in
          primary memory. 
          Data is transferred directly between the controllers and the
          primary memory. An asynchronous, fully interlocked request/
          acknowledge communication technique is employed. 
          CPU>s have no special status on the bus. 
          Interrupts are achieved by addressing a CPU. \f

F_ 2.        DESIGN FEATURES 
           
           
T_2.1       O_p_e_r_a_n_d_ _L_e_n_g_t_h_ 
           
          A_r_i_t_h_m_e_t_i_c_ _a_n_d_ _L_o_g_i_c_a_l_ _O_p_e_r_a_n_d_s_ 
&_          The basic arithmetic or logical operand is a 24-bit word. Double-
          length operands of 48 bits satisfy the requirements of engi-
          neering computation and administrative data processing. 
           
          H_a_l_f_w_o_r_d_ _H_a_n_d_l_i_n_g_ 
          Direct addressing of 12-bit halfwords aids efficient packing of
          data. 
           
 
T_2.2       R_e_g_i_s_t_e_r_s_ _a_n_d_ _A_d_d_r_e_s_s_i_n_g_ 
           
2.2.1     R_e_g_i_s_t_e_r_s_ _S_t_r_u_c_t_u_r_e_ 
          The 8 dynamic registers define the current state of a program.
&_                 They are dumped when control is transferred to the monitor
          program or to the exception or escape service routines of the
          program and are reloaded when the program is resumed. The dynamic
          registers comprise: 
           
          The four working registers, "w0", "w1", "w2" and "w3", see 3.2.
          Each instruction specifies one of these, see 3.3. The working
          registers except for "w0" can function as index registers. 
           
          The status register, "status", contains the following
          information. Bits are numbered 0-23 with 0 indicating the most
          significant bit. 
           
             Bit no.   Contents

0      monitor mode: privileged instructions allowed, see 6. 
 1      escape mode: escape facility active, see ch.7. 
              2      after address modify: address calculation in next
                    instruction starts from present contents of the
        address register, see 3.3.2. 
              3      after escape: address calculation in next instruction
                     is skipped. The contents of the address register is
        used as resulting address. If the "after address mo-
        dify" bit is set too, the contents of the word pointed
        out by the address register is used, see ch. 7. 
             4      integer exception active, see ch. 4. \f

              5      floating point exception active, see ch. 5 
              6-11   escape mask, see ch. 7. 
             12-15   dump error count: used in connection with memory
                    errors in registerdump at interrupt or monitor
                    calls, see 10.7.4. 
             16-19   not used. 
             20      disable: disable level of interrupt limit register
                      active, see 6.6. 
                      21-23   exception: contains status information after arithme-
                     tic and input/output operations. Accessible as the
                     exception register, ex, through special instructions,
                        see ch. 4, 5 and 8. 
              
The instruction counter, "ic", is a 24-bit register. Bit 23 is
always zero. Bit 0 is ignored in instruction fetch, but the full
register is used as a 24 two>s complement integer in relative
address calculation. 
                    
          The cause register, "cause", indicates the cause of deviations
from normal program flow, i.e. interruptnumber, monitor call
number, exception cause and escape cause, see ch. 6 and 7. 
           
          The address register, "addr", is used internally as a working
register for address calculations. Dumped values of addr are used
in return from interrupt and escape, and are very useful in
connection with the exception and escape facilities. 
           
          The process definition registers define the relocation, memory
          protection and interrupt disabling for the currently active pro-
          gram. The contents of the registers is changed under monitor
control by interrupts and monitor calls and at return from these,
see ch. 6. 
           
             The process definition registers comprise: 
           
                    register  explanation 
                               
                    cpa       the common protected area limit register de-
                    fines the upper limit of the nonrelocated, 
          read-only lower part of memory, see 3.5. 
                               
                    base      the base register defines the displacement of
                              physical addresses compared to logical ad-
                    dresses, see 3.5. 
                               \f

                    lowlim    the lower limit register defines the physical
                              lower limit of the write accessible part of
                              memory, see 3.5. 
                               
                    uplim     the upper limit register defines the physical
                              upper limit of the write accessible part of
                              memory, se 3.5. 
                               
                    intlim    the interrupt limit register defines two le-
                              vels of interrupt disabling. The program
                              shifts between the levels, which may be equal
                              and describe no disabling, by execution of
                              the special jump instructions: "jump disable"
          and "jump enable", that respectively sets and
                              clears the disable bit in "status", see 6.6. 
                    
The monitor registers (ch. 6) are used in connection with inter-
rupts and monitorcalls. 
                          
                    register  explanation. 
                               
                    inf       the system information register points to a
                              system table of 6 words. The table contains
                              register dump and entry addresses for inter-
                              rupt, monitor call, exception and escape. At
                              interrupt and monitor call inf is decreased
                              by 12. This allows specification of special
                              actions for the mentioned events during exe-
                              cution of the monitor program. At return from
                              interrupt, inf is increased by 12 again. 
                               
                    size      defines upper limit of memory. Size is used
                              for initialization of the upper limit regis-
                              ter when monitormode is entered at interrupt
                              or monitor calls. 
                               
                    montop    defines the number of monitor calls. Monitor
                              calls are provoked by execution of the "jump
disable" instruction with a resulting address
fullfilling 
                                        -2048 _ addr  - montop 
                              The monitor call cause is given as addr +
                              2048 and is used for switching to the speci-
                              fied monitor function. 
                               \f

                    rtc       The real time clock register is a 16 bit read
                              only register. Rtc is incremented by 1 every
                              0.1 milliseconds and counts modulo 65536. A
                              timer interrupt is generated every timer in-
                              terrupt period, 25.6 milliseconds in most mo-
                              dels. 
                               
T_2.2.2     P_r_o_g_r_a_m_ _R_e_l_o_c_a_t_i_o_n_ 
          Efficient relocation requires that programs can be written in
          such a way that their execution is independent of their location.
&_          This is achieved in the RC 8000 in two ways: 
             
First, the instruction format contains a bit that specifies rela-
tive addressing. It indicates that the address part of the in-
struction is to be interpreted relative to its current location
in the primary memory. This permits relocation of programs during
loading. 
           
          Second, the process definition registers define the current rela-
          tion between the logical address as seen by the program and the
                   actual physical address, thereby ensuring that programs can use
          saved address information after restarting in new memory areas. 
           
T_       2.2.3     A_d_d_r_e_s_s_ _C_a_l_c_u_l_a_t_i_o_n_ 
          Besides relative addressing RC 8000 supplies indexing and indi-
          rect addressing. The addressing modes can be used in any combina-
&_          tion. The possibilities are enhanced by the fact that the 3 index
          registers are also working registers and through the address mo-
          dify instruction. The address modify instruction makes indirect
          addressing in multiple levels, use of the contents of any memory-
          word as index, multiple indexing and conditional address calcula-
          tion possible. 
           
 
T_2.3       E_s_c_a_p_e_ _a_n_d_ _E_x_c_e_p_t_i_o_n_ 
           
          The RC 8000 is provided with an escape facility, implemented by
          means of an escape mode and an escape mask, which permits inde-
&_          pendent supervision of instruction execution as well as program-
          med emulation of virtual memory, instruction sets and the like. 
          The exception concept allows specification of a diagnostic rou-
          tine, which will be called when programming errors such as ille-
          gal instructions or addressing occurs. The concept may also be
          used for trapping of arithmetic overflow and underflow and for
          definition of breakpoints. \f

           
 
T_ 2.4       M_o_n_i_t_o_r_ _C_o_n_t_r_o_l_ 
           
          In a multiprogramming system, where many concurrent tasks are
          performed, it is vital that erroneous programs can be prevented
&_          from interfering destructively with other programs. The various
          tasks are therefore co-ordinated by a monitor program that has
          complete control of the system. Monitor control in the RC 8000 is
          guaranteed by memory protection, privileged instructions, program
          interruption and monitor calls. 
           
T_2.4.1     M_e_m_o_r_y_ _p_r_o_t_e_c_t_i_o_n_ 
          An erroneous program may attempt to destroy data or instructions
          within other programs. Mutual memory protection is accomplished
&_          in the RC 8000 through limit registers, so that a program can
          only alter the contents of memory locations in its own area. The
          remainder of the memory is divided into a read-accessible and a
          read-protected part. The read-accessible part is addressed inde-
                   pendently of dynamic program relocation. Any attempt to violate
          the protection system leads to a program exception. 
           
T_2.4.2     P_r_i_v_i_l_e_g_e_d_ _I_n_s_t_r_u_c_t_i_o_n_s_ 
          Further protection is achieved through privileged instructions
          that can only be executed within the monitor program. These in-
&_          structions include input/output functions as well as control of
          the interruption system, memory protection and dynamic program
          relocation. Attempts to execute privileged instructions in normal
          mode leads to program exception. 
           
T_2.4.3     P_r_o_g_r_a_m_ _I_n_t_e_r_r_u_p_t_i_o_n_ 
          Multiprogrammed computers must respond quickly to exceptional
          events. In the RC 8000 this is made possible by a program inter-
&_          ruption system that can register a number of signals simulta-
          neously. Any of these signals interrupts the current program im-
          mediately and starts the monitor program. Register dump and re-
          gister initialization for fast switch to service routine are exe-
          cuted by firmware. Return to program and restoring of registers
          are carried out by a privileged instruction, return from inter-
          rupt. Critical actions can be protected against interruption by
          partial or total disabling. 
           \f

T_2.4.4     M_o_n_i_t_o_r_ _C_a_l_l_s_ 
          To ensure the legal interaction between parallel programs and be-
          tween programs and the input/output system, the monitor program
&_          must supply a set of service functions. Activation of these take
          place by execution of a monitor call instruction. The calling
          program is interrupted and the monitor program is started as for
          interrupts, but at a different entry address and with "cause" de-
          fined by the monitor call instruction. 
           
 
T_2.5       I_n_p_u_t_/_O_u_t_p_u_t_ _S_y_s_t_e_m_ 
           
          The input/output system is based on a unified bus, i.e. a common
&_          bus for communication between all devices and CPU>s connected to
          it, none of which has a special status. Besides permitting the
          implementation of a wide range of systems, including multiproces-
          sing systems, the unified bus facilitates communication with
          other systems and provides a basis for implementation of other
          bus structures. 
            
          The connection of peripheral devices is standardized in such a
          way that the central processors are unaware of the types of de-
          vices attached to the bus. All peripheral devices except the pri-
          mary memory are connected to the bus via standardized device con-
          trollers (peripheral processors). Data transfers between the cen-
                   tral processor and the peripheral processors are handled by a
          single input and a single output operation. 
 
          In order not to suspend program execution while an input or out-
          put operation is in progress, the direct transfer of data between
          processors is minimized; thus the peripheral processor, as soon
          as it is started, will fetch its commands from the channel pro-
          gram in the primary memory and execute them without engaging the
          central processor, which continues with its program. 
           
          When the central processor attempts to initiate an input or out-
          put operation, the peripheral device may reject it. Information
          about this as well as other exceptional events is made available
          in the exception register, which can be tested by the program in
          order to take appropriate action. Device status will be trans-
          ferred to the memory and the central processor will be interrup-
          ted when the channel program is terminated. 
           
          Peripheral devices may also be connected to the bus in a more
          primitive manner, i.e. without the channel program concept. In\f

          this case, the device controller will be regarded as a set of
          registers, to which the central processor transfers control in-
          formation, and from which it obtains device information by means
          of the input and output instructions. 
           
T_2.5.1     B_u_s_ _C_o_n_t_r_o_l_ 
          Since the bus is shared by numerous devices, only one may have
          control of it at a time. This device is called the bus master and
&_          the device which it addresses, is called the slave. 
           
          When a device that is capable of being a bus master (viz. a cen-
          tral processor or peripheral processor) desires to obtain
          control, it sends a request to the bus control unit. 
           
          The control unit responds with a select signal, which is daisy-
          chained through all the devices on the bus. The first device ha-
          ving sent a request, breaks the chain and returns an acknowledge-
          ment, completing the selection procedure. If the control unit
          does not receive an acknowledge signal, it generates a bus time-
          out, after which the selection procedure may be repeated. 
           
          As soon as the current master completes its transfer and releases
          the bus, the selected device becomes the new master and sends a
          busy signal while using the bus. During this time the next bus
          master is selected. 
             
T_2.5.2     B_u_s_ _C_o_m_m_u_n_i_c_a_t_i_o_n_ 
          To facilitate interfacing with other systems, an asyncronous ful-
          ly interlocked technique is used for bus communication. This so-
&_          called handshake technique, in which each request that is sent by
          a master must be acknowledged by the slave to complete the trans-
          fer, permits operations between devices having different response
          times. 
           \f

F_3         DATA FORMATS AND INSTRUCTIONS 
           
           
T_3.1       Data Formats 
           
          The data structure of the RC 8000 is shown in the following
          figure: 
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
&_           
                   The basic arithmetic or logical operand is an integer of 24 bits.
          The 12-bit halfwords are directly addressable, and may be used as
          signed numbers. Double words are used to represent integers of 48
          bits and floating-point numbers with 36-bit fractions and 12-bit
          exponents. 
           
   
T_       3.2       Working Registers 
           
          The register structure includes four 24-bit working registers,
          one of which is specified in each instruction. Three of the
          working registers also function as index registers. The current
&_          index register is selected by the instruction format. 
           
          The working registers are addressable as the first eight half-
          word (or four words) of the primary memory, (see 3.5).
 
                   Two adjacent working registers can be used to hold a double-\f

          length operand of 48 bits. In double-length operations, the four
          registers are connected cyclically as follows: 
           
T_                    w3 concatenate with w0 
                   w0 concatenate with w1 
                    w1 concatenatewith w2 
&_                    w2 concatenate with w3 
           
          These connections are established by specifying the second regis-
          ter of the concatenation in the instruction format. 
           
     
T_3.3       Instruction Format 
           
          The instruction format is divided into an operation halfword and
&_          an address halfword, each containing 12 bits: 
           
           
T_                         F     W   M   X        D 
&_          0       5 6 7 8 9101112               23 
            
          Bits 0:5  F_ _f_i_e_l_d_._ Contains the function code, specifying one of
                    sixty-four basic operations. 
                     
          Bits 6:7  W_ _f_i_e_l_d_._ Specifies one of four working registers as
                     the result register. 
                     
          Bits 8:9  M_ _f_i_e_l_d_._ Specifies one of four address modes, used to
                    control generation of the effective address (see be-
                    low). 
                   
          Bits 10:11 X_ _f_i_e_l_d_._ Selects the current index register. Only
                     working registers w1, w2, and w3 act as index
                     registers (X field = 0 indicates no indexing). 
                     
          Bits 12:23 D_ _f_i_e_l_d_._ Contains a truncated address, specifying a
                    displacement from -2048 to +2047 halfwords within the
program. 
                     
          A full address of 24 bits is formed by means of the displacement,
          D, in conjunction with the contents of an index register, X, and
          the content of the instruction counter, "ic". The generation of
          the  effective address, "addr", is controlled by the address mode
          field, M, as follows: 
           \f

           
T_                    M = 00    addr = X + D 
                    M = 01    addr = word (X + D) 
                    M = 10    addr = X + IC + D 
&_                    M = 11    addr = word (X + IC + D) 
           
          In the address calculation, the displacement is treated as a
          12-bit signed integer that is extended towards the left to 24
          bits before being added to the index register and the instruction
          counter. In the final addition of X, IC, and D, overflow is
          ignored. 
             
          The address modes 01 and 11 permit indirect addressing on one
          level. The indirect address fetched from the memory is assumed to
          be a full address of 24 bits. 
             
          The address modes 10 and 11 modify the indexed displacement with
          the current load address of the instruction. This permits re-
          location of programs during loading. 
           
T_   3.3.1     N_o_t_a_t_i_o_n_ _o_f_ _E_x_a_m_p_l_e_s_ 
          The examples in the remaining part of this manual is given in a
            primitive pseudo assembly language. Basic instruction format is 
           
                    mn'   w'   d' ; comments' 
&_           
          mn'      is the instruction mnemonic. Instructions and their
                    mnemonics are introduced before they are used in
                     examples. Survey of instruction by mnemonic is given in
                    Appendix 1, which also gives the reference to the de-
                    tailed instruction descriptions in chapter 10. 
                     
           w'       specifying the working register as w0, w1, w2 or w3.
                    The w' may be left out, specifying W-field = 0, but
                    this is only done, when the instruction does not use a
                    working register.  
                     
            d'       specifies the displacement either as an integer or as
                    the name of a label in which case the displacement is
                    the address of the labelpoint. Labelpoints are given as
                    >names'> in front of an instruction, a constant or the
                    name of a label.  
                    
          comment' may be any text, comments are terminated by new line. 
                              \f

          The principles of the instruction mnemonics are: 
           
          - Each instruction has a full name describing the instruction as 
            well as possible. Word choice and structure is uniform for the
            different instructions. 
           
          - A short name is defined by the first word and one other signi-
            ficant word of the full name, indicated by underlining. 
            The short name is the normal reference to the instruction. 
           
          - The acronym derived from the short name defines the mnemonic. 
           
          To show the notation the "r_e_g_i_s_t_e_r_:l_o_a_d_" instruction is intro-
          duced preliminarily. The "r_e_g_i_s_t_e_r_:l_o_a_d_" instruction, "rl", loads
          the specified working register with the contents of the memory
          word pointed out by the effective address. 
           
T_              constant:  2
                 addr:     constant 
           . 
                    . 
                    rl  w1     constant; w1 = 2 
&_                    rl  w3     addr    ; w3 = address (constant) 
           
           Constant and addr must represent addresses that can be contained
          in the D-field, i.e. less than 2048. 
           
          Relative addressing is indicated by a point after the instruction
          mnemonic, while a point after the labelname in an instruction
          means that the D-field of the instruction is the displacement
          between the labelpoint and the instruction. Thus, with same da-
          ta definitions as above: 
           
T_                    rl. w1     constant. ; w1 = 2 
&_                    rl. w3     addr.     ; w3 = address (constant) 
           
          Now the displacement between the data and the instructions must
          be less than 2048 and greater than or equal to -2048. 
           
          Indexing is indicated by placing an index register specification
          in front of the displacement. Thus, still keeping the data defi-
          nitions: 
           \f

T_                    rl. w3     addr.     ; w3 = address (constant) 
                    rl  w1  x3+0         ; w1 = 2 
                    rl  w2  x3+2         ; w2 = address (constant) 
&_                    rl. w0  x1+constant. ; w0 = address (constant) 
           
          Indirect addressing is indicated by placing the address part of
          the instruction in parenteses. Thus, again with same data defini-
          tions: 
           
T_                    rl. w1    (addr.)    ; w1 = 2 
&_                    rl. w3 (x1+constant.); w3 = 2 
T_        
3.3.2     A_d_d_r_e_s_s_ _m_o_d_i_f_i_c_a_t_i_o_n_ _i_n_ _n_e_x_t_ _i_n_s_t_r_u_c_t_i_o_n_ 
          "A_d_d_r_e_s_s_ : m_o_d_i_f_y_ that of next instruction", "am", sets the "after
          "am" bit in the status register. This will modify the address cal-
          culation in the next instruction as follows depending on the M-
          field: 
                     
T_                    M = 00    addr = X + D + addr 
                    M = 01    addr = word (X + D + addr) 
                    M = 10    addr = X + ic + D + addr 
&_                    M = 11    addr = word (X + ic + D + addr) 
                    
          I.e. the effective address of the "am" instruction is added to the
          displacement before it is used in the address calculation. The
          "after am" bit is cleared, when it has had its effect. 
           
          The "am" instruction expands the addressing possibilities as
          indicated in the following examples, the corresponding
          datastructures are not shown. 
           
T_          Indirect addressing in two levels: 
           
                     am.       (addr.)    ; addr points to the address of a
                                          ; value 
&_                     rl  w1    (0)        ; w1 = value 
           
T_          Indexing by a memory word: 
           
                    am.       (addr.)    ; contents of addr points to first
                                          ; word in table 
&_                    rl  w1     4         ; w1 = third word in table 
           \f

T_          Double indexing: 
           
                     rl. w2     relrecord.; relrecord contains relative 
                                         ; position of record in block 
                     am.       (relfield.); relfield contains relative 
                                          ; position of field in record 
                     rl. w0     x2+block. ; block points at blockstart 
&_                                          ; w0 = fieldvalue 
           
          Conditional address calculation is possible through conditioning
          of the execution of the "am" instruction (see 3.4.2). 
           
          
T_       3.4       Use of the effective Address as an Operand 
           
          For some function codes, the effective address is used directly
&_                 as an operand. This is done in three different ways. 
                    
                   The effective address or its two>s complement can be assigned to
          the addressed register. 
           
          The contents of the working register can be compared with the effec-
          tive address (word comparison) in several ways, the result of the
          comparison determining whether the following instruction is to be
          executed or skipped. 
           
          The effective address can define a number of shifts to be per-
          formed on the addressed register. 
           
T_       3.4.1     L_o_a_d_ _o_f_ _i_m_m_e_d_i_a_t_e_ _V_a_l_u_e_s_ 
          The "a_d_d_r_e_s_s_:l_o_a_d_ into register" instruction, "al", assigns the
          effective address to the specified register. 
           
          c1:       4711 
                    : 
                    al  w0    10        ; w0 = 10 
                    al. w1    c1.       ; w1 = address (4711) 
                    al  w2 x1-2         ; w2 = w1 - 2 
&_                    al  w1 x1+10        ; w1 = w1 + 10 
           
          The "a_d_d_r_e_s_s_ c_o_m_p_l_e_m_e_n_t_e_d_:load into register" instruction, "ac",
          assigns the two>s complement of the effective address to the
          specified register. 
             \f

T_                    ac  w1   x1+1        ; w1 = -w1 -1, the ones complement
                    ac  w0      10       ; w0 = -10 
                    ac. w2     (c1.)     ; w2 = -4711 
&_                    ac  w3   x1-10       ; w3 = 10 - w1 
           
          Complementation of the maximum negative number will produce an
          overflow (see 4.4). 
           
T_       3.4.2     S_k_i_p_ I_n_s_t_r_u_c_t_i_o_n_s_ 
          "S_k_i_p_ if register h_i_g_h_", "sh", compares the value of the speci-
          fied working register and the effective address interpreted as
&_          integers in two>s complement representation. If the register
          value is greater than the effective address the following in-
          struction is skipped. 
           
T_                    sh  w1     -1        ; if w1 _ -1 then 
&_                    al  w1      0        ; w1 = 0 
           
                   This piece of code ensures that the following instructions are
          never entered with a negative value of w1. Note that the comment
          illustrates another way of looking at the skip instruction. The
skip instruction and the following instruction is considered one
conditional instruction conditioned by the negated condition.  
           
          "S_k_i_p_ if register l_o_w_", "sl", skips the following instruction if
          the register value is less than the effective address. 
           
T_                    sl  w1    0         ; if w1 '_ 0 
                    am       -2         ; then w0 = 43  (iso character
             ; value of "+") 
                   al  w0   45         ; else w0 = 45  (iso character
             ; value of "-") 
                   sh  w1   -1         ; if w1 _ -1  then 
&_                    ac  w1 x1           ; w1 = -w1 
           
          The character value of the sign of the number in w1 is assigned
          to w0 (an example of conditional address calculation). After that
w1 is assigned the absolute value of the number. 
           
          "S_k_i_p_ if register e_q_u_a_l_", "se", skips the following instruction
          if the register value and the effective address is equal. 
           
          "S_k_i_p_ if register n_o_n_e_q_u_a_l_", "sn", skips the following instruc-
          tion if the register value and the effective address is not
          equal. \f

          "S_k_i_p_ if selected register bits all  o_n_e_s_", "so", uses the effec-
          tive address as a masc to test selected bits in the working re-
          gister. If a_l_l_ bits in the working register that correspond to
          ones in the effective address are one, the following instruction
          is skipped. 
           
          "S_k_i_p_ if selected register bits all z_e_r_o_s_", "sz", is analog to
"so". If a_l_l_ bits in the working register that corresponds to
ones in the effective address are zero, the following instruction
is skipped.  
           
T_                     sz  w1     1         ; if w1 is odd then 
&_                     al  w1  x1-1         ; make it even. 
 
           
T_       3.4.3     S_h_i_f_t_ I_n_s_t_r_u_c_t_i_o_n_s_ 
          "L_o_g_i_c_a_l_ shift of s_i_n_g_l_e_ register", "ls", shifts the content of
          the specified working register the number of places given by the
&_          effective address. If the effective address is negative the shift
          is a right shift with zeroes shifted in at the most significant
          bits else it is a left shift with zeroes shifted in at the least
          significant bits. 
           
          "L_o_g_i_c_a_l_ shift of d_o_u_b_l_e_ register", "ld". As "ls" but the shift
          is performed on the 48 bit double register specified. 
           
          "A_r_i_t_h_m_e_t_i_c_ shift of s_i_n_g_l_e_ register", "as". As "ls", but with
          sign extension for right shifts. Left shifts may produce an over-
          flow (see further 4.4). 
           
          "A_r_i_t_m_e_t_i_c_ shift of d_o_u_b_l_e_ register", "ad". As "as", but the
          shift is performed on the 48 bit double register. 
                   
           
T_     3.5       Use of the effective Address to refer to Memory Locations 
           
          In instructions for register transfer, instructions for arithmetic
          and logical operations and some other instructions the effective
          address is used as a logical address pointing to a memory loca-
&_          tion. 
           
          Memory addresses are always expressed as halfword addresses. The
          halfword locations are numbered consecutively starting with zero.
          In word operations, the right-most bit in the effective address\f

          is ignored; thus it is irrelevant whether a word operation refers
          to the left or the right half of a word. In double-word opera-
                   tions, the right-most bit in the effective address is also ig-
          nored; the word thus specified is the second word of the ope-
          rand. 
           
          The working registers are addressable as the first four words of
          memory. The programmer can therefore perform operations directly
          between two registers by specifying a memory address between 0
          and 7. It is also possible to execute instructions stored in the
          working registers. 
           
T_          HALFWORD ADDRESS 
          0              24 BITS        WORKING REGISTER 0 (w0) 
                    2              24 BITS        WORKING REGISTER 1 (w1) 
                    4              24 BITS        WORKING REGISTER 2 (w2) 
&_                    6              24 BITS        WORKING REGISTER 3 (w3) 
           
          The relation between logical addresses and physical addresses,
          i.e. true locations in the memory, is defined by the contents of
          the process definition registers base, cpa, lowlim and uplim.
          These contents define the memory protection given by the division
          of the logical address space in process area, common protected
          area, working registers and nonaccessible area. 
           
          Control of the contents of the process definition registersis
          described in chapter 6. 
           
T_  3.5.1     P_r_o_c_e_s_s_ _A_r_e_a_ 
          The process area is defined by the value of the limit registers. 
           
&_          Inside the process area the effective address is increased by
          the contents of the base register before it is used as a physical
          address. The limit registers contain physical addresses, the pro-
          cess area is therefore defined by 
           
                    lowlim _ addr + base  uplim 
           
    The process area must be contained in true memory, this means
          that the condition 
           
                    8 _lowlim _ uplim  memory size 
           
          must be fulfilled at all times. 
           \f

          The logical process area should be kept constant throughouta
          program>s lifetime to ensure consistent program behaviour. This
          means that the values "lowlim - base" and "uplim - base" should
          be kept constant. 
           
          The process area allows read- and write access. Doubleword refe-
          rence with effective address equal to "lowlim - base" will lead
          to program exception. 
           
T_       3.5.2     C_o_m_m_o_n_ _P_r_o_t_e_c_t_e_d_ _A_r_e_a_ 
          Effective addresses outside the process area may refer to the
          common protected area defined by 
           
&_                    8 _   addr   cpa
           
          Inside the common protected area, the effective address is used
          directly as a physical address and only read access is allowed.
          The contents of the cpa limit register must fulfill the condition
           
                    8 _   cpa    memory size 
           
          The common protected area may overlap the process area. Con-
          sistent program behaviour is only fully ensured in this case if
          base is kept constant. The overlap belongs to the process area.
          Double word reference with effective address equal to 8 and write
          access in the common protected area will lead to program excep-
          tion. 
T_        
         3.5.3     W_o_r_k_i_n_g_ _R_e_g_i_s_t_e_r_s_ _a_n_d_ _N_o_n_a_c_c_e_s_s_i_b_l_e_ _A_r_e_a_ 
          As described before effective addresses 0 through 7 refers to the
          working registers. All other logical addresses outside the pro-
&_          cess area and the common protected area are considered nonacces-
          sible and reference to them leads to program exception. 
           \f

T_       3.5.4     M_e_m_o_r_y_ _A_d_d_r_e_s_s_i_n_g_._ _E_x_a_m_p_l_e_ _o_f_ _U_s_e_r_ _P_r_o_g_r_a_m_ 
          The following figure shows the physical address as a function of
            the logical address for a user program: 
           
                  
           
                             PHYSICAL ADDRESSES 
           
          upper                                              common
          limit                                              areas
                                                             inaccessible
                                                             addresses
           
           
          lower
limit 
           
           
           
           
          base 
                                                               LOGICAL 
                                                               ADDRESSES 
                   a    b      c       d           e 
           
                                                     upper limit less base 
                                                     lower limit less base 
&_                                                     CPA limit 
           
          The division of the logical address space in this example is as
          follows: 
           
          a.  0 _ logical address  8 
              
              The working registers. Full access. 
           
          b.  8 _ logical address  cpa 
           
              Common protected area used for references to system
              parameters. Read-access only. Physical address = logical
              address. 
           
T_          c.  cpa _ logical addres  lower limit - base 
&_              Non-accessible area. 
           \f

T_          d.  lower limit - base _ logical address  upper limit - base 
&_              Process area. 
           
              Relocatable (physical address = logical address + base). 
              Full access. 
           
T_          e.  upper limit - base _ logical address 
&_              Non-accessible area. 
 
 
T_       3.6       Jump Instructions 
           
          The jump instructions represent a special kind of memory referen-
          ce, as they transfer program control to the instruction pointed
          out by the effective address.  
&_           
          The effective address is treated as a logical address as des-
          cribed above, and program execution is regarded as read access. 
            Reference to the non-accessible area leads to program exception. 
           
          Subroutine jumps are supported as follows: If the W field is dif-
          ferent from zero, the logical address of the return point, i.e.
          the instruction following the subroutine jump, is placed in the
          specified working register. A jump is then made to the effective
          address. 
           
          At the end of the subroutine, a return jump is made as a simple
          jump, i.e. with W field equal to zero. 
           
          Conditional jumps are defined by use of the skip instructions. 
           
          The "j_u_m_p_ with l_i_n_k_ in register" instruction, "jl", is the basic
          jump instruction. 
           
          The "j_u_m_p_ and select d_i_s_a_b_l_e_ limit", "jd", and "j_u_m_p_ and select
          e_n_a_b_l_e_ limit", "je", instructions work like "jl", but have an
          effect on the interrupt system. A subset of negative effective
          addresses will, used in connection with the "jd" instruction,
          define moni- tor calls. These features are described in chapter
          6. 
           \f

T_     3.6.1     J_u_m_p_,_ _e_x_a_m_p_l_e_ _1_ 
           
          sub:       -                    ; subroutine code that does 
                     -                    ; not change the contents of w3 
                     -                    ; 
                     jl      x3+0         ; return jump 
           
                     -                    ; 
                     jl. w3     sub.      ; subroutine call 
                     -                    ; return point  
&_           
          The example sketches a simple subroutine structure. Parameters
          are given in the remaining registers. 
          
T_       3.6.2     J_u_m_p_,_ _e_x_a_m_p_l_e_ _2_ 
           
          sub:       -                    ; subroutine entry point 
                     -                    ; code 
                     rl  w1  x3+0         ; load of parameter 1 
                     -                    ; code 
                     -                    ; 
                     sh  w0    -1         ; if result  0 
                     am        -2         ; then error return 
                     jl      x3+6         ; else normal return 
           
                     -                    ; code 
                     -                    ; 
                     jl. w3     sub.      ; subroutine call with 
                     47                   ; parameter 1 : number 
                     text                 ; parameter 2 : address of text 
                     jl.        error.    ; error return point : goto error
                     -                    ; normal return point 
                     -                    ; code 
&_           
          This example sketches a little more sophisticated subroutine
          structure. Parameters are given following the call and an error
          return is supplied. 
           \f

T_   3.6.3     J_u_m_p_,_ _e_x_a_m_p_l_e_ _3_ 
           
          table:     -                    ; table of records : key, 
                     -                    ;                    value 
                     -                    ;  
                                          ; records 
                     -                    ; 
          last:      -                    ; last record : key, 
                     -                    ;               value 
                     -                    ; 
                     al. w1     table.    ; initialize pointer to first 
                     -                    ; record 
          loop:      sn  w0 (x1+0)        ; if w0 = key (record) then   
                     jl.        found.    ; goto found 
                     al  w1  x1+4         ; increase pointer to next
                                ; record 
                     sh. w1     last.     ; if table not exhausted then 
                     jl.        loop.     ; goto loop 
                     -                    ; not found code 
                              -                    ; 
           
          found:     rl  w2  x1+2         ; load value 
                     -                    ; found code 
&_                     -                    ; 
           
          The example shows a simple loop. The contents of w0 is searched
          in a table of double word records containing a key and a corres-
          ponding value. If w0 matches one of the keys, control is trans-
          ferred to the found code which loads the value and proceeds. If
          the table is exhausted without a match the not-found code after
          the loop is executed. The end of the loop shows a typical condi-
          tional jump. 
 
 
T_3.7       Register Transfer Instructions 
           
          The "r_e_g_i_s_t_e_r_:l_o_a_d_" instruction,"rl", loads the specified working
            register with the contents of the memory word pointed out by the
          effective address. If the effective address is 0 through 7, "rl
          is a register to register transfer. Reference to the non-access-
&_          ible area leads to program exception. 
           
          The "r_e_g_i_s_t_e_r_:s_t_o_r_e_" instruction, "rs", stores the contents of
          the specified working register in the memory word pointed out b
          the effective address. If the effective address is 0 through 7,\f

          "rs" is a register to register transfer. Other reference outsid
          the process area leads to program exception. 
                    
          The "r_e_g_i_s_t_e_r_ : e_x_c_h_a_n_g_e_ with word" instruction, "rx", exchanges
          the contents of the specified working register and the memory
          word pointed out by the effective address. If the effective ad-
          dress is 0 through 7, "rx" exchanges the contents of two regis-
          ters. Other reference outside the process area leads to program
          exception. 
           
          The "z_e_r_o_-_e_x_t_e_n_d_e_d_ halfword : l_o_a_d_ into register" instruction,
          "zl", loads the least significant 12 bits of the specified wor-
          king register with the content of the halfword pointed out by the
          effective address. The most significant 12 bits are cleared. If
          the effective address is 0 through 7 "zl" is a half register to
          register transfer. Reference to the nonaccessible area leads to
          program exception. 
           
          The "e_x_t_e_n_d_e_d_ halfword : l_o_a_d_ into register" instruction, "el".
          As "zl" but the most significant 12 bits will contain a sign
          extension of the loaded halfword. 
           
          The "h_a_l_f_ register : l_o_a_d_" instruction, "hl". As "zl" but the
          most significant 12 bits are left unchanged. 
           
          The "h_a_l_f_ register : s_t_o_r_e_" instruction, "hs", stores the least
          significant 12 bits of the specified working register in the
          halfword pointed out by the effective address. If the effective
          address is 0 through 7, "hs" is a register to half register
          transfer. Other references outside the process area leads to pro-
          gram exception. 
           
          The "d_o_u_b_l_e_ register : l_o_a_d_" instruction, "dl", loads the speci-
          fied double register with the contents of the doubleword pointed
          out by the effective adress. If the effective address is 0
          through 7, "dl" is a double register to double register transfer;
          in this case it is important to note that the least significant
          register is assigned before the most significant register is
          transfered. Reference to the nonaccessible area and to the lower
          limits of the process area (addr = lowlim - base) and the common
          protected area (addr = 8) will lead to program exception. 
           
          The "d_o_u_b_l_e_ register : s_t_o_r_e_" instruction, "ds", stores the con-
          tents of the specified double register in the doubleword pointed
          out by the effective address. If the effective address is 0\f

          through 7, "ds" is a double register to double register transfer
          (note as for "dl"). Other references outside the process area and
                   reference to the lower limit of the process area will lead to
          program exception. 
           
           
T_       3.8       Logical Operations 
           
          The instructions for logical operations combine the contents of
          the working register with the operand, i.e., the contents of the
&_          word pointed out by the effective address, by a logical bit by
          bit operation. If the effective address is 0 through 7, the re-
          sult is a combination of two registers. Reference to the non-ac-
          cessible area leads to program exception. 
           
T_          The "l_o_g_i_c_a_l_ a_n_d_ : combine word with register" instruction, "la",
          executes the logical and- operation defined by 
           
                    register bit        operand bit         result bit 
                       1                   1                   1 
                       1                   0                   0 
                       0                   1                   0 
                       0                   0                   0 
&_           
T_          The "l_o_g_i_c_a_l_ o_r_ : combine word with register" instruction, "lo",
          executes the logical or-operation defined by 
           
                    register bit        operand bit         result bit 
                       1                   1                   1 
                       1                   0                   1 
                       0                   1                   1 
&_                       0                   0                   0 
           
T_          The "l_o_g_i_c_a_l_ e_x_c_l_u_s_i_v_e_ or : combine word with register" instruc-
          tion, "lx", executes the logecal exclusive-or-operaton defined
          by 
           
                    register bit        operand bit         result bit 
                       1                   1                   0 
                       1                   0                   1 
                       0                   1                   1 
                       0                   0                   0 
&_           
           \f

         3.9       Skip if no protection 
                    
          The "s_k_i_p_ if word not p_r_o_t_e_c_t_e_d_" instruction, "sp", skips the
          following instruction if the effective address of the instruction
          points to the process area or to a register, i.e. if storing in
          the word addressed is allowed. \f

F_       4INTEGER ARITHMETIC 
           
           
T_       4.1       Number Representation 
           
          The standard arithmetic operands are signed integers of 12, 24
          and 48 bits: 
           
           
                                       S 
                                       0      11  HALFWORD INTEGER 
           
                              S 
                              0               23  WORD INTEGER 
           
          S 
&_          0                                   47  DOUBLE WORD INTEGER 
           
          Positive numbers are represented in true binary form with a zero
          in the sign bit. Negative numbers are represented in two>s com-
          plement notation with a one in the sign bit. The two>s complement
          of a number may be obtained by inverting each bit in the number
          and adding 1 to the right-most bit. 
           
           
T_       4.2       Halfword Arithmetic 
           
          A signed integer represented by a 12-bit halfword must be con-
          fined to the following range: 
           
&_                    -2**11 = -2048 _ integer halfword _ 2047 = 2**11-1 
           
          The instruction "e_x_t_e_n_d_e_d_ halfword : l_o_a_d_ into register", "el"
          (see 3.7) serves to extend a signed 12-bit halfword towards the
          left to 24-bits, as it is placed in a working register. 
           
          The arithmetic instructions "e_x_t_e_n_d_e_d_ _ halfword : a_d_d_ to regis-
          ter", "ea", and "e_x_t_e_n_d_e_d_ halfword : s_u_b_t_r_a_c_t_ from register",
          "es", adds or subtracts the contents of the halfword pointed out
          by the effective address to or from the specified working regis-
          ter after sign extension. If the effective address is 0 through 7
          the operation is a register- halfregister operation. Reference to
          non-accessible area leads to program exception. Overflow and car-
          ry is registered in the exception register and integer exception\f

          may occur as described in 4.6. 
             
                   The "h_a_l_f_ register : s_t_o_r_e_" instruction, "hs", (see 3.7) is used
          for storing halfword results in memory. 
           
          The sign extension of halfword operands makes it posible to per-
          form integer arithmetic with mixed 12-bit and 24-bit operands. 
           
           
T_      4.3       Word Arithmetic 
           
          A signed integer represented by a 24 bit word or register is con-
          fined to the following range  
           
                    -2**23 = -8388608 _ integer word _ 8388607 = 2**23-1 
&_           
          The "w_o_r_d_ : a_d_d_ to register" instruction, "wa", and the "w_o_r_d_ :
          s_u_b_t_r_a_c_t_ from register" instruction, "ws", adds or subtracts the
          contents of the word pointed out by the effective address to or
          from the specified working register. If the effective address is
          0 through 7 the operation is a register-register operation. Refe-
          rence to non-accessible area leads to program exception. Overflow
          and carry is registered in the exception register and integer ex-
          ception may occur as described in 4.6. 
           
           
T_     4.4       Doubleword Arithmetic 
           
          A signed integer represented by a 48 bit doubleword or double-
          register is confined to the following range 
           
&_                    -2**47 _ integer double word _ 2**47-1 
           
          Note that bit 24 of the integer i.e. bit 0 of the least signifi-
          cant word or register is not a sign bit, but contains a normal
          significant digit. 
           
          The "a_d_d_ d_o_u_b_l_e_ word to double register" instruction, "aa", and
          the "s_u_b_t_r_a_c_t_ d_o_u_b_l_e_ word from double register" instruction,
          "ss", adds or subtracts the contents of the doubleword pointed
          out by the effective address to or from the specified doublere-
          gister. If the effective address is 0 through 7, the operation is
          a doubleregister-doubleregister operation. In this case it is im-
          portant to remember that the operation on the least significant
          registers is completed before the operation on the most signifi-\f

          cant registers and carry is executed. Reference to non-accessible
          area and reference to the lower limits of process area (addr =
          lowlim - base) and common protected area (addr = 8) leads to pro-
                   gram exception. Overflow and carry is registered in the exception
                   register and integer exception may occur as described in 4.6. 
           
           
T_      4.5       Multiplication and Division 
           
          Integer multiplication of the contents of a working register with
          the contents of a memory word produces a double-length product
          that is placed in a double register of 48 bits with the sign bit
&_          at the extreme left. 
           
          A double-length product will normally consist of a sign bit plus
          at most 46 digits. In this case, bit 1 in the double register
          will be identical with the sign bit.  
           
T_          The only exception to this occurs in the multiplication of two
          maximum negative numbers: 
           
&_                    (-2**23)*(-2**23) = 2**46 
           
          This result will be represented as bit 1 = 1, all other bits = 0.
           
          The contents of a double register can be divided by the contents
          of a memory word. The dividend is then replaced by a 24-bit re-
          mainder in the left-hand register and a 24-bit quotient in the
          righthand register. A non-zero remainder satisfies the following
          requirements: 
           
T_             (1)    dividend = divisor * quotient + remainder 
             (2)    0 _ abs (remainder)  abs (divisor) 
&_             (3)    sign (remainder) = sign (dividend) 
           
T_             S  SIGNIFICANT BITS OF DIVIDEND 
             0                                                  47 
           
             S SIGNIF. BITS OF REMAIND. S SIGNIF. BITS OF QUOTIENT
&_             0                       23 0                       23 
           
          The "w_o_r_d_ : m_u_l_t_i_p_l_y_ by register giving double register" instruc-
          tion, "wm", multiplies the specified working register by the con-
          tents of the word pointed out by the effective address. The re-
          sult is placed in the corresponding double register. If the ef-\f

          fective address is 0 through 7, the operation is a register-re-
          gister operation. Reference to nonaccessible area leads to pro-
          gram exception. Exception register is unchanged and integer ex-
          ception can not occur. 
           
          The "w_o_r_d_ : d_i_v_i_d_e_ into double register" instruction, "wd", divides
          the specified double register by the contents of the word pointed
          out by the effective address. The quotient is placed in the least
          significant register while the remainder is placed in the most sig-
          nificant register. If the effective address is 0 through 7, the
          operation is a double register-register operation. Reference of
          nonaccesible area leads to program exception. Carry = 0 and over-
          flow is registered in the exception register and integer exception
          may occur as described in 4.6. At overflow the dividend is left
          unchanged. 
           
          If the dividend is represented by an integer word, the sign must be
          extended before division 
T_           
                     rl. w1     dividend. ; 
                     al  w0     0         ; sign extension of positive
                                          ; dividend  
                     wd. w1     divisor.  ; 
           
                     rl. w0     dividend. ;  
                     ad  w1    -24        ; sign extension of any dividend 
                     wd. w1     divisor.  ; 
           
                     rl. w1     dividend. ; 
                     sl  w1     0         ; sign extension of any dividend 
                     am         1         ; 
                     al  w0    -1         ; faster in most models 
&_                     wd. w1     divisor.  ;  

           
T_     4.6       Overflow and Carry Indication 
           
          Arithmetic operations except integer multiplication indicate a
          normal or an exceptional result by setting the right-most two
          bits of the 3-bit exception register. Physically, the exception
&_          register is the last three bits in the status register, but it is
          treated by special instructions as a logically independent regis-
          ter. See 4.7.  
           
          After a normal result, exception bit 22 is set to zero. An integer\f

          overflow will set exception bit 22 to one, and will provoke an in-
          teger exception if the "integer exception active" bit in the status
          register is set, see further chapter 7. 
           
                   An overflow condition is recognized in the following situations: 
           
T_          (l)       The result of an addition, subtraction or division
                      exceeds the range or a 24-bit signed integer, viz. 
           
&_                    -2**23 = -8 388 608 _ integer word _ 8 388 607 = 2**23-1 
           
T_                    Or the result of doubleword addition or subtraction
                    exceeds the range of a 48 bit signed integer, viz. 
           
&_                    -2**47 _ integer doubleword _ 2**47-1 
           
                    Note that multiplication can never produce overflow and
                    leaves the exception register unchanged. 
           
T_          (2)       The instruction "a_d_d_r_e_s_s_ c_o_m_p_l_e_m_e_n_t_e_d_ : load into re- 
                    gister", "ac", specifies complementation of the maxi- 
                    mum negative number: 
           
&_                    -(-2**23) = 2**23 
           
T_          (3)       One or more significant digits are lost during arithme-
                            tic shifts toward the left. (The shift instructions 
                    test overflow conditions after each single-bit shift). 
&_           
          If overflow occurs in division, the dividend remains unchanged in
          the working register. All other arithmetic operations deliver the
          result modulo 2**24 after an overflow. 
           
          Exception bit 23 is set, when addition or subtraction produces a
          carry from bit 0. For addition this means, that a carry is pro-
          duced when the sum of the operands interpreted as unsigned num-
          bers of 24 bits (or 48 bits) exceeds 2**24-1 (or 2**48-1). For
          subtraction the carry is to be interpreted as not borrow, i.e. a
          carry is produced when the register operand interpreted as an un-
          signed number is greater than or equal to the "memory" operand
          interpreted as an unsigned number. 
           
          The carry indication in the exception register can be used for
          multiple length arithmetic and in connection with comparison of
          unsigned numbers, see examples in 4.7. \f

           
          The exception register, then, has the following meaning after an
          integer arithmetic operation: 
           
T_                           B_i_t_       M_e_a_n_i_n_g_ 
                    21        (unchanged) 
                    22        integer overflow 
&_                    23        integer carry 
           
                 
T_       4.7       Exception Register Instructions 
           
          The "s_k_i_p_ if selected e_x_c_e_p_t_i_o_n_ bits all zero" instruction, "sx",
          uses the 3 least significant bits of the effective address to
&_          test selected bits in the exception register. If all selected
          bits, i.e. the bits corresponding to 1>s in the effective ad-
          dress, are zero the following instruction is skipped. 
           
          The "sx" instruction may be used to test for overflow and carry. 
           
                     -                    ; integer operation 
                     sx         2         ; if overflow then 
                     jl.        overflow. ; goto overflow 
                     - 
           
                     -                    ; integer operation 
                     sx         1         ; if carry then 
                     jl. w3     carry.    ; call carry action 
                     -                    ; 
           
          The "e_x_c_e_p_t_i_o_n_ register : s_t_o_r_e_ in halfword" instruction, "xs",
          stores the exception register in the 3 least significant bits of
          the halfword pointed out by the effective address. The most sig-
          nificant 9 bits are set to zero. If the effective address is 0
          through 7, "xs" is an exception register to halfregister trans-
          fer. Other references outside the process area lead to program
          exception. 
           
          The "e_x_c_e_p_t_i_o_n_ register : l_o_a_d_ from halfword" instruction, "xl",
          loads the exception register with the 3 least significant bits of
          the halfword pointed out by the effective address. If the effec-
          tive address is 0 through 7, "xl" is a halfregister to exception
          register transfer. Reference to non-accessible area leads to pro-
          gram exception.
           \f

T_          Example 1: 
 
          ;comparison of unsigned integers 
           
                     rl. w1     int1.     ; 
                     ws. w1     int2.     ; 
                     sx         2.01      ; if int1 '= int2 then 
                     jl.        greq.     ; goto greq; 
&_           
                     rl. w1     int1.     ; 
                     ws. w1     int2.     ; 
                     sx         2.01      ; if int1  int2 then 
                     jl.        4         ; 
                    jl.        less.     ;  goto less; 
           
          Since the dataformats of RC 8000 is sufficient for nearly all
          applications little attention has been paid to the ease of im-
          plementation of multilength arithmetic. Thus no facility for di-
          rect carry propagation is included. The causual reader may skip
          the following example of the use of exception bit 23 in multi-
          length addition. 
           
T_          Example 2: 
           
          ;Routine for multilength addition 
          ;The routine performs addition of multilength integers 
          ;represented in consequtive doublewords. 
          ;At call the registers must contain 
          ;  w0: length of integers in halfwords: 
          ;      integral multiplum of 4, at least 8. 
          ;  w1: address of last word of first integer 
          ;  w2: address of last word of second integer 
          ;  w3: link 
          ;At return the result will have overwritten the second integer. 
          ;Return is made to link + 2, i.e. the second instruction after
          ;the call, except in case of total overflow, where return is to
&_          ;link. 
           
                     0                    ; 
          dzero:     0                    ; double length zero 
          done:      1                    ; double length one 
          stop:      0                    ; saved stop criteria 
          return:    0                    ; saved return 
           \f

          multiadd:  ws  w2     0         ; entry point: 
                      al  w2  x2+4          ; stop criteria; 
                     ds. w3     return.   ; save stop criteria and return; 
                     al  w2  x2-4         ; 
                     wa  w2     0         ; restore second pointer; 
                    xl.        0         ; clear ex; 
           
          next:      dl  w0  x1           ; loop for addition of tail parts
                     sx         2.01      ; if ex(23) then 
                     aa. w0     done.     ; add carry;                 x 
                     xs.        oldcarry.+1; save ex in displ. below    x 
                     aa  w0  x2            ; add second tailpart        x 
                     ds  w0  x2            ; save partial result 
           
          oldcarry:  al  w0     0-0-0      ; load saved ex from carry
                                             ; addition 
                     sz  w0     2.01       ; if saved carry then 
                     xl.        1          ; ex(23):= 1; 
                     al  w1  x1-4          ; 
                     al  w2  x2-4          ; decrease pointers; 
                     sl. w2    (stop.)     ; if more tail parts then 
                     jl.        next.      ; loop; 
                     dl  w0  x1            ; load head of first 
                     sx         2.01       ; 
                     am         done-zero  ; if ex(23) then             y 
                     aa. w0     dzero.     ; add carry; note ex always 
                                           ; assigned                   y 
                     xs         3          ; w1:= oldex:= ex;           y 
                     aa  w0  x2            ; add head of second;        y 
                     ds  w0  x2            ; save result; 
                     sx         2.01       ; if overflow then 
                     al  w1  x1+2          ; oldex. overflow:= 
                                           ; -, oldex. overflow; 
                     rl. w3     return.    ; 
                     sz  w1     2.01       ; if oldex. overflow then 
                     jl      x3            ; return to link 
                     jl      x3+2          ; else return to link + 2; 
           
          The corresponding routine for multilength subtraction can be
          obtained by changing instructions marked "x" by: 
           
                     jl.        4          ; if -, carry then 
                     ss. w0     done.      ; subtract borrow;
                     xs.        oldcarry.+1; save ex in displ. below; 
                     ss  w0  x2            ; subtract tailpart; 
           \f

          and instructions marked "y" by: 
           
                     am         dzero-done ; if -, carry then 
                     ss. w0     done.      ; subtract borrow; 
                     xs         3          ; w1:= oldex:= ex; 
                     ss  w0  x2            ; subtract first doubleword; 
           \f

F_       5         FLOATING-POINT ARITHMETIC 
           
           
T_   5.1       Number Representation 
           
&_          A floating-point number F = fraction * 2 ** exponent is stored in
          a double word or a pair of working registers: 
T_           
           
                      FRACTION                      EXPONENT 
              S                                   S 
              0                   23 24        35 36    47 
           
                    FIRST WORD              SECOND WORD 
           
&_           
          The address of a floating-point number refers to the second word
          of the memory operand. The working register field within a floa-
          ting-point instruction refers to the second word of the register
          operand.  
           
          The left-most 36 bits of a floating-point number represent a signed,
          normalized fraction in two>s complement notation. The right-most
          12 bits are a signed exponent, also in the two>s complement form.
           
           
          The range of floating-point numbers is the following: 
T_           
                    -1*2**2047 = F  -0.5*2**(-2048)    F negative 
                                  F =    0*2**(-2048)    F zero 
                0.5*2**(-2048) = F 1*2**2047           F positive 
          or approximately: 
&_                10**(-616)  abs(F)  10**616 
           
T_          The relative precision of a floating-point number is 2**(-35) /
          abs(fraction), which lies between 2**(-35)=3*10**(-11) and
&_          2**(-34)=6*10**(-11). 
           
          The left-most two bits of a normalized fraction are 01 and 10,
          respectively, for positive and negative numbers. 
           
          The floating-point zero is represented by the fraction 0 and the
          exponent -2048. 
           
          Accordingly, the sign or zero value of a floating-point number\f

                   may be determined by examining its first word only. This can be
          done by means of skip instructions. 
           
          The following instructions will load a floating-point number in
          w0 and w1 and test whether it is negative: 
           
T_                    dl. w1    float.   ; w0-1 = number ; float points to
                                         second word 
                    sh  w0    -1       ; if number  0 then 
&_                    jl.       negative.; goto negative 
           
           
T_   5.2       Arithmetic Operations 
           
          Addition and subtraction require an alignment of radix points.
          This is done by shifting the fraction with the smaller exponent
&_          to the right a number of positions equal to the difference in ex-
          ponents. After alignment, the addition or subtraction of the frac-
          tions is performed, and the larger exponent is attached to the
          result. The resulting fraction is normalized and rounded as de-
          scribed below. 
           
          Multiplication is performed by addition of the exponents and mul-
          tiplication of the fractions. The fraction product is formed by
          repetition of an add-and-shift cycle. Normalization and rounding
          of the resulting fraction proceeds as for addition and subtrac-
          tion (see below).   
           
          Division is performed by subtraction of the exponents and divi-
          sion of the fractions. The fraction quotient is formed by the
          non-restoring division method. Rounding of the quotient is per-
          formed as described below. The remainder is thrown away. 
           
                
T_    5.3       Normalization and Rounding 
           
          If the resulting fraction is zero, a floating-point zero with
&_          exponent -2048 is delivered as the final result. 
           \f

                   A non-zero fraction is normalized either by left shifts to elimi-
          nate leading sign bits or by a single right shift to correct for
          overflow of the fraction. The exponent is decreased (increased)
          by the number of left (right) shifts performed. 
           
          A non-zero, normalized fraction is rounded by adding 1 in bit 36.
          After rounding, the fraction may require normalization once more
          before the high-order 36 bits and the exponent are delivered as
          the final result. 
           
          The maximum value of the rounding error is 0.5 in the least
          significant position of the 36-bit fraction of the result. 
           
           
T_       5.4       Underflow, Overflow and Non-normalized Operands 
           
          Underflow and overflow occur when the exponent of the final re-
&_          sult (after normalization, rounding and renormalization) is less
          than -2048 or greater than 2047, respectively. This will be re-
          gistered in the exception register as shown below and will lead
          to a floating point exception if the "floating point exception
          active" bit is set in the status register. 
           
          After underflow or overflow, the fraction is correct, while the
          exponent is taken modulo 4096. 
           
          Division by zero leaves the register operand unchanged and is
          defined as overflow even if zero is divided by zero. Considering
          the range of floating point numbers, both underflow and overflow
          will usually indicate a programming error. 
           
          No check is made of whether operands are correctly normalized
          floating point numbers. Results of operations on non-normalized
          numbers must be regarded as undefined, they may be non-normalized
          and they may be different on different versions of RC 8000. See
          however the descriptions in chapter 10. 
           
          The exception register has the following meaning after a floating
          point operation:  
           
T_                    Bit       Meaning     
                    21        (unchanged) 
                    22        floating point overflow 
&_                    23        floating point underflow 
           
           \f

T_       5.5       Floating Point Instructions 
           
          The "f_l_o_a_t_i_n_g_ point : a_d_d_ to double register" instruction, "fa",
          adds the contents of the doubleword pointed out by the effective
          address to the specified double register. If the effective ad-
          dress is 0 through 7, the operation is a doubleregister - double-
          register operation. Reference to non-accessible area and to the
          lower limits of the process area (addr = lowlim - base) and the
          common protected area (addr = 8) leads to program exception. Un-
          derflow and overflow conditions are indicated in the exception
          register. If the "floating point exception active" bit is set in
          the status register underflow and overflow will lead to a floa-
          ting point exception. After underflow and overflow the fraction
          of the result is correc while the exponent is taken modulo 4096. 
           
          The "f_l_o_a_t_i_n_g_ point : s_u_b_t_r_a_c_t_ from double register" instruction,
          "fs", subtracts the contents of the doubleword pointed out by the
          effective address from the specified double register. Otherwise
          as "fa". 
           
          The "f_l_o_a_t_i_n_g_ point : m_u_l_t_i_p_l_y_ by double register" instruction,
          "fm", multiplies the specified double register with the contents
          of the doubleword poin ted out by the effective address.
          Otherwise as "fa". 
           
          The "f_l_o_a_t_i_n_g_ point : d_i_v_i_d_e_ into double register" instruction,
          "fd", divides the specified double register with the contents of
          the doubleword pointed out by the effective address. The quotient
          is placed in the doubl register, the remainder is thrown away.
          Otherwise as "fa".  
           
           
T_   5.6       Number Conversion 
           
          Mixed arithmetic is supported by number conversion instructions
          and normalizing shift instruction. The normalize instructions may
&_          of cause be used for other purposes. 
           
          The "c_o_n_v_e_r_t_ i_n_t_e_g_e_r_ to floating point" instruction, "ci", con-
          verts the integer value of the specified register to a floating
          point number and places the result in the corresponding double
          register. The effective address is used for scaling, such that
          the value of the result is two to the power of effective address
          times the integer. Floating point overflow and underflow may oc-
          cur through scaling and is handled as for the floating point in-
          structions.  
           
          The "c_o_n_v_e_r_t_ f_l_o_a_t_i_n_g_ point to integer" instruction, "cf", con-\f

                   verts the floating point value of the specified double register
          to an integer and places the result in the least significant re-
          gister. The effective address is used for scaling, such that the
          value of the result is two to the power of effective address
          times the floating point number rounded to nearest integer. Carry
          = 0 and integer overflow is registered in the exception register.
          Integer overflow will lead to integer exception if the "integer
          exception active" bit is set in the status register. 
           
          The "n_o_r_m_a_l_i_z_e_ s_i_n_g_l_e_ register" instruction, "ns", normalizes the
          contents of the specified working register by shifting it to the
          left until bit 0 and bit 1 have opposite values. The negative
          number of shifts necessary is stored in the halfword pointed out by
          the effective address. Normalization of zero will give zero and
          store the value -2048. 
           
          Effective address 0 through 7 will cause the negative shift value
          to be assigned to the corresponding half register. Other referen-
          ces outside the process area will lead to program exception. 
           
          The "n_o_r_m_a_l_i_z_e_ d_o_u_b_l_e_ register" instruction, "nd", works as "ns"
          but on the specified double register.  
           
           
T_  5.7       Examples 
           
          ; variables and constants; addresses of doublewords point at second
          ; word 
          fhalf     : 0.5                         ; rounding of floating
                                                  ; point 
          roundconst: d.1024                      ; rounding double integer
                                                  ; = bit 37 
          integer1  : 24 bit integer value'      ; variable 
          integer2  : 24 bit integer value'      ; -  
          float1    : floating point value'      ; -  
          float2    : floating point value'      ; -  
&_          dinteger  : 48 bit integer value'      ; -   
           \f

T_                 ; mixed arithmetic  
                    
                     rl. w1     integer1. ; 
                    ci  w1     0         ; 
                     rl. w3     integer2. ; 
                     ci  w1     0         ; 
                     fd  w1     6         ; 
                     ds. w1     float1.   ; float1 = integer1/integer2 
           
                     rl. w1     integer1. ; 
                     ci  w1     0         ; 
                     fa. w1     float1.   ; 
                     cf  w1     0         ; 
                     rs. w1     integer2. ; integer2 = integer1 + float1 
&_           
T_          ; conversion of double register to floating point 
           
                     dl. w1     dinteger. ;  
                     nd. w1     3         ; negative shifts are
                                          ; stored as displacement 
                                          ; in next instruction 
                     al  w2     0-0-0     ; note notation for changed
                                          ; displacement 
                     sn  w2    -2048      ; if dinteger = 0 then 
                     jl.        assignexp.; goto assignexp; result
                                          ; = 0.0 
           al  w2  x2+48        ; exponent = - shifts +48 
           ad  w1    -1         ; prevent rounding overflow
                      
                     aa. w1    roundconst.; add bit 37 to round 
                     nd. w1     3         ; renormalize 
                     al  w2  x2+0-0-0     ; exponent = exponent 
                                          ; -(1 or 0) 
          assignexp: hs  w2     3         ; assign exponent 
&_                     ds. w1     float1.   ; float1 = dinteger 
 \f

T_                 ; if rounding of large double integers is not needed the code is
          ; reduced to 
           
                     dl. w1     dinteger. ;  
                     nd. w1     3         ;  
                     al  w2               ; 
                     se  w2    -2048      ; 
                     al  w2  x2+47        ;  
                     hs  w2     3         ;
&_                     ds. w1     float1.   ; float1 = dinteger         
                    
T_          ; conversion of floating point to double integer  
           
                     dl. w1     float1.   ;  
                     fa. w1     fhalf.    ; round 
                     el  w2     3         ; load exponent 
                     ad  w1    -12        ; remove exponent bits 
                     ad  w1  x2-35        ; shift according to exponent
           ; overflow may occur 
              ds. w1     dinteger. ; dinteger = float1 
           
          Without giving examples it may be noted that correct integer
   arithmetic with 35 significant bits can be simulated by the
                floating point instructions. \f

F_6         MONITOR CONTROL 
                    
           
          The RC 8000 is designed to operate a multiprogramming system
          under the control of a monitor program, defining the specific
          multiprogramming environment. Full monitor control is ensured by
          the protection system, which consists of the memory protection
          and the concept af privileged instructions. The memory protection
          is described in chapter 3. 
           
          Privileged instructions are the i-o instructions and the instruc-
          tions that may change the protection situation. These instruc-
          tions may only be executed in monitormode. 
           
          The monitor program is entered through interrupts and monitor
          calls. The current user program is suspended, registers and sta-
          tus are dumped and the monitor program is entered according to
          the cause with memory protection and program relocation disabled.
          Dump and entry addresses are defined by a system table pointed
          out by the system information register, "inf". This table and the
          register must be set up by the monitor program according to moni-
          torstructure and current system status. User programs are reac-
          tivated through the privileged "return interrupt" instruction,
          which restores the dumped registers and the protection situation.
           
           
T_       6.1       System Table 
           
          The system table consists of 6 consequtive words with the
          following contents. 
           
                    inf-5 : monitor call service address 
                    inf-3 : interrupt service address 
                    inf-1 : status/intlim initialization 
                    inf+1 : register dump address 
                    inf+3 : exception service address 
&_                    inf+5 : escape service address 
           
          The system information register, inf, points to the s_e_c_o_n_d_ half-
          word of the status/intlim initialization. 
           
          The exception and escape service addresses define register dumps
          and entry points for the current userprogram>s use of the excep-
          tion and escape facilities, see further 6.5.1 and chapter 7.\f

                   These addresses are logical addresses, the remaining addresses
          are physical addresses in true memory. 
           
           
T_      6.2       Entering the monitor program 
           
          Entry of the monitor program proceeds in the same way for moni-
&_          torcalls and interrupts except for the initial assignment of
          cause and the final selection of service address. 
           
          The 8 dynamic registers are dumped starting at the register dump
          address: 
           
T_                    register dump address + 0     :         w0 
                              -           + 2     :         w1 
                              -           + 4     :         w2 
                              -           + 6     :         w3 
                              -           + 8     :         status 
                              -           +10     :         ic 
                              -           +12     :         cause 
&_                              -           +14     :         addr 
           
          The 12 most significant bits of the status register is assigned
          the value of the most significant halfword of status/intlim ini-
          tialization. The 12 least significant bits are cleared. 
           
          The enable limit in the intlim register is assigned the value of
          the 12 least significant bits of status/intlim initialization,
          the disable limit is set to zero, see further 6.6. 
           
T_          Status/intlim initialization: 
           
          0 1 2 3 4 5 6           11 12               23 
          1   0 0      escapemasc       intlim initialization 
           
           
          aritmetic exceptions active 
                                       after address modify,after 
                                        escape, should be zero 
                                        escape mode 
&_                                        monitor mode, should be one 
           
          The remaining process definition registers are initialized as
          follows: 
           \f

T_                           base   = 0 
                    lowlim = 8 
                    uplim  = size, the size register must contain memory
&_                    size 
           
          This initialization disables program relocation and memory pro-
          tection. 
           
          The working registers are initialized thus: 
           
T_                    w0 =      unchanged user value 
                    w1 =      register dump address + 16 
                    w2 =      cause 
&_                    w3 =      unchanged user value 
           
          After this the relevant service address is fetched from the sys-
          tem table. The inf register is decreased by 12 defining a new sy-
          stem table and the monitor program is started at the service
          address. 
           
          The definition of a new system table and the way status is ini-
          tialized allows use of the exception and escape facilities in
 connection with the monitor program and allows special handling
of not disabled interrupts during execution of the monitor pro-
gram. Total disabling is obtained by specifying an intlim ini-
tialization zero. Interrupts that can not be disabled, i.e. the
internal interrupts see 6.5.1, will halt the cpu if intlim is
zero. 
  
 Errors during entering the monitor program will increase the dump
 error count in status, decrease inf by 12 and repeat the action
 with the new system table. For details see chapter 10. 
  
  
6.3 Reactivation of User Program 
  
 Reactivation of the user program is done by execution of the "r_e_-
 t_u_r_n_ from i_n_t_e_r_r_u_p_t_" instruction, "ri". 
  
 The "inf" register is increased by 12 reselecting the system
table valid at monitor entry. The monitor program selects the
user program by assigning values to this system table. 
  
 The 8 dynamic registers are restored from the register dump
 pointed out by the register dump address in the systemtable.\f

                    
          The process definition registers are restored from 5 consequtive
          words pointed out by the sum of the register dump address and the
          effective address of the ri instruction: 
           
T_                    register dump addr  + effective address + 0 : cpa 
                                         -                  + 2 : base 
                                         -                  + 4 : lowlim 
                                         -                  + 6 : uplim 
&_                                         -                  + 8 : intlim 
           
          The user program is entered at the dumped instruction counter. 
           
          "ri" is a privileged instruction. 
           
           
T_     6.4       Monitor Calls 
           
          Programmed activation of the monitor program from a user program
&_          is executed as a special case of the "j_u_m_p_ and select d_i_s_a_b_l_e_
          limit" instruction, "jd", see 6.6. If the effective address of
          the "jd" instruction fullfill the condition: 
           
T_                    -2048 _ addr  -2048 + function limit 
          where 
&_                    function limit = 2048 - montop 
          a monitor call is executed. The montop register must have been
          initialized by the monitor program. The address space used for
          definition of monitor calls would otherwise have lead to program
          exception, since it is contained in the non-accessible area. 
           
          After the common interrupt and monitor call action described in
          6.2, the monitor program is entered at the monitor call service
          address specified in the system table. The cause is defined as
          function number equal to effective address plus 2048. If the
          least significant bit of the function number is ignored a fast
          selection of the monitor function is obtained in the monitor
          program by 
           
              call entry   : jl. (x2 + functiontable.) ; switch to function
T_              functiontable: function 0  ; address of code for function 0 
                             function 2  ;             -                2 
                                -        ;             - 
                                -        ;             - 
&_           \f

                    
          Parameters and results may be exchanged between the user program
and monitor program via the register dump. Return is through the
"ri" instruction. 
           
           
T_       6.5       Interrupts 
           
          RC 8000 has a program interrupt system with priority levels. The
&_          interrupt levels are described by levelnumbers, lowest numbers
          having highest priority. 
           
T_     6.5.1I_n_t_e_r_n_a_l_ _I_n_t_e_r_r_u_p_t_ 
         The level numbers 0 through 5 are assigned to program events de-
fined as internal interrupts. These interrupts can not be dis-
abled. 
  
    Level no.       meaning 
              0               program interrupt 
              1               integer interrupt 
              2               floating point interrupt 
              3               system table error, see chapter 10 
              4               buserror in operand reference 
&_              5               buserror in instruction fetch 
           
          Program interrupt is defined when a program exception occurs and
          the exception service address in the system table is zero or when
          an escape takes place with escape service address zero. 
           
          Integer and floating point interrupt ire analogous to program
interrupt, but refer to arithmetic exceptions. 
           
          Buserror interrupts are usually triggered by memory faults. See
          further 8.2. 
           
T_       6.5.2     P_o_w_e_r_ _F_a_i_l_u_r_e_ _a_n_d_ _T_i_m_e_r_ 
          Level 6 is assigned to powerfailure interrupt. The power failure
&_          interrupt leaves at least 1 millisecond to prepare the power re-
          start and force a halt. Level 6 should only be disabled in excep-
          tional situations and only for very short periods. 
           
          Level 7 is assigned to timer interrupt. RC 8000 is supplied with
          a 16 bit real time clock register, rtc, which is increased by one
every 0.1 millisecond. A timer interrupt is generated every timer
interrupt period, 25.6 milliseconds in most of the RC 8000 mo-
dels. 
 \f

                    
T_       6.5.3     E_x_t_e_r_n_a_l_ _I_n_t_e_r_r_u_p_t_s_ 
          The remaining levels are used for exteral events. External inter-
&_          rupts are defined by the processors on the unified bus by addres-
          sing the cpu and transferring the levelnumber as data. The number
          of levels available depends on model. Assignment of external lev-
          els is under program control, see further chapter 8. 
           
           
T_     6.6       Disabling of Interrupts 
           
          Interrupt request are registered in the interrupt register "int-
          reg", one bit for each level. "Intreg" is continously scanned.
          When a bit equal one is found an interrupt flag is set and the
          corresponding level number is saved in the current level register
          "curlev", and the scan is stopped. Disabling is implemented by
          restricting the scan to level numbers lower than or equal to a
          limit defined by the interrupt limit register and the disable bit
          in the status register. 
           
T_          Interrupt limit register: 
           
                             disable level        enable level 
&_          0111223 
           
          When the "disable" bit in "status" is one, the scan limit is
          defined as the disable limit and when it is zero as the enable
          limit. 
           
          The "disable" bit is controlled by the special jump
          instructions: 
           
          The "j_u_m_p_ and select e_n_a_b_l_e_ limit" instruction, "je", sets the
          "disable" bit to zero and proceeds as a "jl" instruction. 
           
          The "j_u_m_p_ and select d_i_s_a_b_l_e_ limit" instruction, "jd", tests the
          effective address against the monitor call definition, 6.3, if it
          is not a monitor call the "disable" bit is set to one and the
          "jl" actions are executed. 
           
          A normal user program will have "disable level" equal to "enable
          level" equal to maximum level number, this means no disabling and
          "je" and "jd" reduced to normal jumps except for the monitor call
          function of "jd". 
           
          The monitor program is entered with disable bit zero, disable
          level zero and enable level initialized from the systemtable,
          usually to 6, disabling all levels but power failure. \f

                    
T_      6.7       Interrupt Response 
           
          The interrupt flag is examined at the completion of every in-
&_          struction. If the flag is set, the cause is defined as two times
          the saved levelnumber in "curlev" and the corresponding bit in
          "intreg" is cleared. After the common interrupt and monitor call
          action the monitor is entered at the interrupt service address
          defined in the system table, with the interruptflag cleared and
          the interruptscan restarted according to the new value of "int-
          lim". 
           
           
T_    6.8       Control of Monitor Registers 
           
&_          The "g_e_n_e_r_a_l_ p_u_t_ into processor register" instruction, "gp",
          transfers the contents of the specified working register to the
          register pointed out by the effective address. "gp" is a privi-
          leged instruction. 
           
T_             Effective addres    Effect 
                    26           inf = working register 
                    30           size = working register 
                    32           montop = working register 
                    94           the contents of the working register  
                                 is interpreted as an interrupt level 
                                 and the corresponding bit in "intreg" 
                                 is cleared. Only used at power restart 
                                 and in testprograms. 
                    other        depends on model, may be destructive, 
&_                                 used for technical testprograms. 
           
          The "g_e_n_e_r_a_l_ g_e_t_ from processor register" instruction, "gg",
          transfers the contents of the register pointed out by the
          effective address to the specfied working register. 
           
T_             Effective address   Effect 
                    26           working register = inf 
                    30           working register = size 
                    32           working register = montop 
                   100           working register = rtc 
                                 The contents of the 16 bit real time clock
                                 register is transferred to the 16 least
                                 significant bits of the working register. 
                                 Remaining bits are cleared. rtc is
                                 unchanged. 
                    other        depends on model. Used for technical 
&_                                 testprograms.\f

F_       7         EXCEPTIONS AND ESCAPE. 
               
           
          An exception occurs, when the protection system is violated, when
          execution of an unassigned instruction code is attempted and, if
          wanted, when results of arithmetic operations are outside the
          range of number representation. These events are caused by pro-
          gramming errors. As an aid in finding these errors the exception
          concept offers the possibility of register and statusdump com-
          bined with activation of a programmed exception routine. A large
          part of programming errors will result in exceptions, but in many
          cases the original cause is obscured. The escape facility pro-
          vides a tool for tracking down these and other errors and for
          gathering information on program flow and data usage to aid in
          program tuning. 
           
           
T_ 7.1       Exception 
           
          When an exception occurs the exception service address is fetched
&_          from the system table. If the address is zero, the monitor pro-
          gram is called through an internal interrupt. If the address is
          nonzero, the 8 dynamic registers are dumped and the program is
          restarted at the address following the dump. 
           
T_      7.1.1     R_e_g_i_s_t_e_r_ _D_u_m_p_ _a_t_ _E_x_c_e_p_t_i_o_n_ 
                    address                       contents after exception 
                    exc. service addr. + 0:       w0 
                              -        + 2:       w1 
                             -        + 4:       w2 
                              -        + 6:       w3 
                              -        + 8:       status 
                              -        +10:       ic 
                              -        +12:       cause 
                              -        +14:       addr 
                              -        +16:       entry point for
&_                            routine' 
           
          The register dump must be inside the process area defined by the
          limit registers. The registers are dumped with the values they
          had when the exception occurred. Exact interpretation may require
          knowledge of the details in instruction excecution given in chap-
          ter 10, but in most cases the following general principles are
          sufficient for the analysis. \f

                   The cause register gives the cause of the exception 
           
T_                    cause = 0 : program exception i.e. protection viola- 
                                tion or unassigned instruction code 
                    cause = 2 : integer exception i.e. overflow 
                    cause = 4 : floating point exception i.e. over- or 
&_                                underflow 
           
          The instructon counter points to the word after the instruction
          causing the exception.  
           
T_   7.1.2     P_r_o_g_r_a_m_ _E_x_c_e_p_t_i_o_n_ 
          Exception caused by attempts to execute privileged or unassigned
          instruction codes leaves working registers and status unchanged
&_          but the address calculation has been carried out before the ex-
          ception is recognized and the result is given in the dumped addr
          register. 
           
          At memory protection violation the addr register contains the lo-
          gical address causing the violation. In multiword instructions
          this address may point to any of the addressed words. Early steps
          in the instruction may have changed the contents of the specified
          working register(s). Violation in indirect address calculation
          will leave the intermediate address in the addr register and set
          the after am bit in the dumped status register, this bit is zero
          at all other exceptions. This indication of exception in indirect
          addressing is not implemented on RC 8000/45. 
           
T_       7.1.3     A_r_i_t_h_m_e_t_i_c_ _E_x_c_e_p_t_i_o_n_s_ 
          At arithmetic exceptions the exception part of the status regis-
          ter expand the cause. For memory referring arithmetic instruc-
          tions the addr register contains the logical address of the ope-
          rand, (for doubleword instructions the logical address of the
          preoperand). 
           
T_       7.1.4     E_x_c_e_p_t_i_o_n_ _R_o_u_t_i_n_e_ 
          Before entering the exception routine the registers are initia-
          lized thus: 
           
                    w0:  dumped instruction counter 
                    w1:  w-field of cause instruction 
                    w2:  dumped addr register 
                    w3:  cause 
&_                    ex:  dumped exception register 
           
          Protection, relocation, escapemode, escapemask, "integer exception\f

                   active" and "floating point exception active" are unchanged. 
           
          What the exception routine does is up to the programmer. 
           
          A primitive exception routine regards any exception as an error,
          the register dump is output for analysis by the program
          maintenance staff and the program is aborted after dumping of
          program and variables. 
           
          An advanced exception routine classifies the exceptions as non-
          repairable, repairable and intentional. 
           
          Non-repairable exceptions may be handled as above. Repairable
          exceptions trigger a corrective action after which return is made
          to the instruction pointed out by the dumped instruction
          counter. 
           \f

T_          Example: repairing of floating point exception: 
           
            ; replaced by dump of 
           exaddr:    0                    ; w0 
          w01:       0                    ; w1 
                     0                    ; w2 
          w23:       0                 ; w3 
                     0                 ; status 
          ic:        0                 ; ic 
                     0                 ; cause 
                     0                 ; addr 
                                       ;
          entry:     sn  w3     4         ;if cause = 4 then 
                     jl.        float.    ; goto float 
                     -                    ; 
                     -                    ; code for non-repairable error 
                     -                    ; 
           
             float:     ls  w1     1         ; w1=2*w1, w1=rel addr of reg in
                 ; dump 
           al  w2  x1-2         ; w2=w1-2 
                     sh  w2    -1         ; if w2  0 then 
                     al  w2     6         ; w2=6, w2= rel addr of reg pre
                                   ; in dump 
                     sx         2.1       ; if underflow then 
                     jl.        underflow.; goto underflow 
                     rl. w0  x2+exaddr.   ; w0= first part of result,
                                ; prepare last sign of result 
                     sl  w0     0         ; if result '_ 0 
                     am         pos-neg   ; then w3-0 = maxpos 
                     am         neg-fzero ; else w3-0 = macneg 
          underflow: dl. w0     fzero.    ;  underflow : w3-0=zero 
                     rs. w3  x2+exaddr.   ; overwrite dumped result 
                     rs. w0  x1+exaddr.   ; with corrected result in w3-0 
                     dl. w1  w01.     ; restore w0-1 contents 
                     dl. w3  w23.     ; restore w2-3 contents 
                     jl.    (ic.)    ; continue with instruction after
&_                           ; exception. 
T_                                      
          fzero:     0.0             ; floating point zero, double- 
                                     ; word, addr points to second 
                                     ; word. 
          neg:       -1.6x10**616   ; maximum negative floating  
                                    ; point number 
          pos:        1.6x10**616         ; maximum  positive floating 
&_                                          ; point number \f

           
          The coding of this example aims to illustrate practical use of
          the facilities in address calculation f.ex. the am-construction
          loading the corrected result. Floating point exceptions are re-
          paired by substituting the result with zero in case of underflow
          and a maximum number with correct sign in case of overflow. 
           
          Intentional exceptions may be produced by inserting illegal in-
          structions as breakpoint to trigger testoutput or similar action.
          A more sophisticated use is to program in such a way that rare
          conditions automatically will result in an exception f.ex.
          through a table lookup that in all normal cases gives a legal
          address, but in special cases gives an illegal address. This may
          give a speed-up of a program by eliminating the need for in-line
          testing for special cases. 
           
          Exception routines can as shown return to the program through a
          normal jump. It is however in some cases useful to consider to
          return by means of the "return from escape" instruction, see
          further 7.2.5 and 7.2.6. 
 
T_    
7.2       Escape 
           
&_          The escape facility is controlled by the escape mode bit and the
          escape mask in the status register. If the escape mode bit is ze-
          ro the escape facility is inactive. If it is one the escape faci-
          lity is active, which means that every instruction execution in-
          clude an escapetest which may lead to an escape depending on the
          result of a logical comparison between the escape masc and an
          escape pattern defining the properties of the instruction. 
           
           
T_7.2.1     E_s_c_a_p_e_ _i_n_ _I_n_d_i_r_e_c_t_ _A_d_d_r_e_s_s_ _C_a_l_c_u_l_a_t_i_o_n_ 
          The escape action is triggered after the completion of the add-
          ress calculation and before any instructon execution has taken
          place. Information is set up for fast analysis and for resuming
          the execution. There is one exception, if the escape mask speci-
          fies escape on memory load, statusbit 10, an escape is triggered
          by the memory load in indirect address calculation. In this case
          preparation is made for resuming the address calculation with the
          load of the effective address, after which a normal instruction
          escape may take place, see further below. 
           
 \f

T_7.2.2     E_s_c_a_p_e_ _M_a_s_k_ _a_n_d_ _E_s_c_a_p_e_ _P_a_t_t_e_r_n_ 
          As described in 2.2.1 the escape mask occupies bit 6-11 of the
          status register. The meaning of the bits are given below. If a
          bit in the escape mask is one and escapemode is active the es-
          capeaction will be triggered for all instructions having the
          corresponding property. The instruction properties are described
          by their escape patterns. 
           
T_          status- 
                    bit       property 
                                        
                    6         privileged,jd,je, unassigned 
                        7         may modify ic,jumps, skips, ri and re 
                    8         multiword operand, doubleword instructions, 
                                ri and re. 
                    9         stores in memory 
          10         loads from memory  
&_                   11         auxiliary bit 
           
          The auxiliary bit is used in the escape patterns to ensure that
          an all one escapemask trigger on all instructions. Escape pat-
          terns are given in the instruction tables Appendix 1 to 3. 
           
T_7.2.3     E_s_c_a_p_e_ _A_c_t_i_o_n_
          When the escape action is triggered the escape service address is
          fetched from the system table. If the address is zero, the moni-
          tor program is called through an internal interrupt. If the ad-
&_          dress is nonzero, the 8 dynamic registers are dumped and the
          program is restarted at the address following the dump. 
              
T_7.2.4     R_e_g_i_s_t_e_r_ _D_u_m_p_ _a_t_ _E_s_c_a_p_e_ 
                    address                       content after escape 
                    escape service addr + 0   :w0 
                           -            + 2   :   w1 
                           -            + 4   :   w2 
                           -            + 6   :   w3 
                           -            + 8   :   status 
                           -            +10   :   ic 
                           -            +12   :   cause 
                           -            +14   :   addr 
                           -            +16   :   entry point for routine'\f

                    
The working registers are dumped with the values they had at com-
pletion of the previous instruction. 
           
          The status register is dumped in the same way, except that the
          "after escape" bit is one, and that the "after address modify"
          bit is zero for a normal escape and one for an escape in indirect
          address calculation. 
           
T_          Status register 
           
          0 1 2 3 4 5 6        11        20 21    23 
           
                                                      
          exception register 
                                                     disable 
                                                     escapemask 
                                                     aritm. except active 
                                                     after escape = 1 
                                                     after address modify 
                                                     escape mode = 1 
                                                     monitor mode 
&_           
          The dumped instruction counter points to the instruction causing
          the escape. 
           
          The dumped cause register specifies the cause by the F-field and
the escape pattern of the instruction. 
           
T_          Cause register at normal escape: 
           
          0                          11 12         17         23 
                     0                  F-field       pattern 
&_            
T_          Cause register at escape in indirect address calculation: 
           
          0                       10 11 12       17 18        23
                     0  1 0 0 0 0 0 0 0 0 0 0 1 0
&_           
          The dumped addr register contains the effective address of the
          instruction except at escape in indirect address calculation
          where it contains the logical address pointing to the effective
          address. 
           \f

T_       7.2.5     E_s_c_a_p_e_ _R_o_u_t_i_n_e_ 
          Before entering the escape routine the working registers are
&_           intialized thus:
T_                           w0 :      dumped instruction counter 
           
                    w1 :      F-field and W-field of instruction 
           
                                              16          21 22 23 
                              0                   F-field       W 
&_           
T_                              or at escape in indirect address calculation 
           
                                            15 16       21 22 23 
          0              1 0 0 0 0 0 0 0W 
                     
                    w2 :      dumped address register 
                         
                    w3 :      escape pattern 
           
                                                      18         23 
                              0                          pattern 
&_           
T_                              or at escape in indirect address calculaton 
           
                                                      18         23  
                              0                        0 0 0 0 1 0 
&_           
          Monitormode, disable and exception register are left unchanged,
          escapemode, escapemask and arithmetic exceptions active are
          cleared in the status register. 
           
          What the exception routine does is up to the programmer. A few
          examples and hints are given later in this chapter. 
           
T_       7.2.6     R_e_t_u_r_n_ _f_r_o_m_ _E_s_c_a_p_e_ 
          The register dump is prepared for return to the instruction exe-
          cution through the "r_e_t_u_r_n_ from e_s_c_a_p_e_" instruction. If the dump
          is not modified the instruction is completed as if the escape had
          not taken place at all. 
           
          The "r_e_t_u_r_n_ from e_s_c_a_p_e_" instruction, "re", restores the working
          register, status, ic, cause and addr from 8 consecutive logical
          addresses starting at the effective address of the instruction.
          Each of the logical addresses must be either in the process area
          or in the common protected area or a program exception will take\f

          place. The address calculation in the instruction pointed out by
          the restored ic will be modified according to the value of the
          "after address modify" and "after escape" bits in the restored
          status register as follows: 
           
T_          after addressaftermeaning
             modify         escape 
                0             0              normal address calculation 
                0             1              no address calculation 
                                            addr is used directly 
               1             0              as after an "am" instruction 
&_               1             1              addr = word (addr) 
           
          In the last case another escape may be triggered by the same in-
          struction depending on escapemode, escapemask and escape pattern.
          After address calculation the execution of next instruction
          proceeds normally. 
                    
          Modification of the register dump or selection of a simulted
          register dump is possible. This means that the "re" instruction
          may be looked upon as a combined jump and register initializa-
          tion. Note however that attempts to switch to monitor mode is
          ignored, i.e. the monitor mode bit can not be changed from zero
          to one, but it may be changed from one to zero. 
           
T_      7.2.7     E_x_a_m_p_l_e_s_ _a_n_d_ _H_i_n_t_s_ 
          The first example shows a simple jump tracing with a window. The
          aim is to trace the program flow leading to an exception, the
&_          cause of which can not be found from the exception information.
          The exception triggers a program dump for further analysis, so
          the tracing need only generate memory information. Escape mode,
          escape serviceaddress and an escape mask only containing "may
          modify ic" ("status" bit 7) are supposed to have been set up by a
          monitor call. \f

T_                                        ; contents at entry of escape 
                                ; routine  
escaddr:   0                  ; w0 
                     0                  ; w1 
                     0                  ; w2 
                     0                  ; w3 
                     0                  ; status 
                     0                  ; ic 
                     0                  ; cause 
                     0                  ; addr 
           
          entry:     se  w3     2.010000  ; if not true jump then 
                     re.        escaddr.  ; return, skips etc are
                                          ; ignored 
                     rl. w1     pointer.  ; load pointer 
                      
                     al  w1  x1+4         ; increase pointer 
                     sl. w1     top.      ; 
                     al. w1     first.    ; cyclically 
                     rs. w1     pointer.  ; save increased pointer 
                     rs  w0  x1           ; save from addr 
                     rs  w2  x1+2         ; save to address 
&_                      re.        escaddr.  ; return 
T_                  
          pointer:   top                ; initial value ensures 
                                        ; correct start 
           
          first:     0                  ; first word in cyclical buffer 
                     0                  ; of double words for storing 
                     -                  ; of trace information 
                     -                  ; 
                     0                  ; last doubleword 
                     0                  ; 
          top:                          ; 
&_                                          
           
          Skips are ignored since the escape pattern for skips contain the
          auxiliary bit. For each true jump the position and the effective
          address is stored cyclically in the buffer. The programdump
          triggered by the exception will have the n latest jump leading to
          the exception displayed in the buffer. 
           
          Next example supposes following situation. A programming error is
          found to be caused by a wrong contents of a memory word with the
address, memaddr. Study of the programtext does not reveal the\f

                   illegal updating. The escaperoutine of the example identifies all
store references to the memory word, but does not include the
explicit action on a hit. The escape mask is "stores in memory". 
           
T_                                    ; content at entry of escape  
                                ; routine  
escaddr:   0                    ; w0       
           0                    ; w1 
                     0                    ; w2 
                     0                    ; w3 
                     0                    ; status 
                     0                    ; ic 
                     0                    ; cause 
                     0                    ; addr 

          entry:     sz  w2     1         ; make effective address even 
                     al  w2  x2-1         ;  
                     sn. w2    (critical.); if effective addr = critical  
                                ; addr  
           jl.        hit.      ; then goto hit  
                     so  w3     2.001000  ; if escape pattern does not 
                     re.        escaddr.  ; contain multiword bit then  
                                ; return 
                                ; next test is thus only executed
                                          ; for "ds" 
                     al  w2  x2-2         ; 
                     se. w2    (critical.); if effective adress of pre- 
                                ; operand ' 
           re.        escaddr.  ; critical address then return 
          hit:       -                    ; 
                     -                    ; code for a hit 
           
           
                     -                    ; 
                         re.        escaddr.  ; return
&_                 critical:  memaddr              ; address of critical word 
 
          These simple examples illustrates the use of the escape facility
          as a debugging tool. Another use of the facility is study of pro-
          gram behaviour with escape routines generating various kinds of
statistical information. 
           
          The escape facility should not be used as a direct programming
          tool mainly because of the overhead involved. This argument does
          not cover use for theoretical studies. \f

           
          It is tempting but not recommended to use the "re" instruction
          for initialization of registers and return from subroutines. The
          catch is the implicit assignment of the status register, which,
          unless one is very carefull, will eliminate independant use of
          the escape facility and independant control of the arithmetic
exceptions. 
           
          There is one important exception to this rule. The "re" instruc-
          tion is very well suited to return from exception routines. In
            this case the status register can be assigned based on the dumped
          status which takes care of above argument. The following example
          shows the structure of an exception routine handling pagefaults
          in a paging system programmed in such a way, that a pagefault
          shows up as a negative effective address in the instruction re-
          ferring the page. After adjustment of the pagesituation the in-
          struction is repeated with correct effective address.  
           \f

T_                                              ; contents at entry of exception 
                                          ; routine 
          excaddr:   0                    ; w0 
                     0                    ; w1 
                     0                    ; w2 
                     0                    ; w3 
          status:    0                    ; status 
          ic:        0                    ; ic 
                     0                    ; cause 
          addr:      0                    ; addr 
           
          entry:     sl  w2     0         ; if not pagefault then 
                     jl.        error.    ; goto error 
                                          ; 
                     jl. w3     getpage.  ; call getpage 
                                          ; returns with referred page 
                                          ; in memory, updated pagetable 
                                          ; and w2 pointing to referred 
                                          ; word on page 
                                          ; 
                     rs. w2     addr.     ; overwrite dumped addr with 
                                          ; corrected 
                     dl. w2     ic.       ;  
                     lo. w1     aftesc.   ; set after escape in dumped 
                                          ; status 
                     al  w2  x2-2         ; dumped ic = dumped ic-2 
                     ds. w2     ic.       ; 
                     re.        excaddr.  ; return 
                                           
           
&_          aftesc:   2.0001 0000 0000 0000 0000 0000 ; after escape bit.
                    
          In this simple example programming errors leading to negative
          effective addresses is handled as pagefaults. Further checks are
          supposed to take place in the getpage routine. 
           \f

F_8         INPUT/OUTPUT SYSTEM 
           
           
         8.1       Main Characteristics 
           
          The input/output system is based on a common bus for communica-
          tion between all central units, primary memories and peripheral
          device controllers, none of which has a special bus status. 
           
          UNIFIED BUS                        UNIFIED BUS 
           
           
           
          CENTRAL      PRIMARY     DISC           GENERAL 
               UNIT         MEMORY      PROCESSOR      DEVICE 
                                                      PROCESSOR
           
&_           
          Input/output devices on the bus are regarded as sets of regis-
          ters. The only way to communicate with a device is to transfer
          data to and from these registers. 
                    
          Device control functions are performed by addressing a device re-
          gister and transferring the appropriate bit pattern to it. Device
          status is checked by addressing the status register of the device
          and transferring the contents to the central processor. The cur-
          rent bus master (see 2.5.1) may interrupt a central processor on
          the bus by addressing and transferring the level number to a spe-
          cific register in that processor. 
           
           
T_8.2       I_n_p_u_t_ _a_n_d_ _O_u_t_p_u_t_ _O_p_e_r_a_t_i_o_n_s_ 
           
&_          All input and output operations are handled by two privileged in-
          structions, "d_a_t_a_ i_n_", "di" and "d_a_t_a_ o_u_t_", "do", which have the
          standard instruction format (see chapter 3). Here, the W field
          selects the working register to be connected to the bus, while
          the effective address of the instruction is used to address the
          device register (see below). The basic bus communication tech-
          nique used in these operations is described in chapter 2. 
           
T_8.2.1     D_a_t_a_ _I_n_ _I_n_s_t_r_u_c_t_i_o_n_ 
          This instruction is used for input operations, i.e. whenever data
&_          is to be received from a device address on the bus. The contents
          of the addressed device register is transferred to the specified
          working register. 
           \f

          The CPU clears bit 21-23 in the status register (i.e. the excep-
          tion register) and addresses the device register. If the address
          is correct, the device places the data on the bus and sends an
          acknowledge signal. The CPU receives the data and this signal,
          and checks the data for parity completing the transfer by placing
          the received data in the specified working register. 
           
          If the received data contains a parity error, the parity error
          status bit is set in the exception register. 
           
          If the device accepts the addressing, but is unable to handle the
          request, it sends a not-acknowledge signal, rejecting the opera-
          tion. If this signal is received, the communication error status
          bit is set in the exception register. 
           
          If no signal whatsoever is received by the CPU inside a maximum
          responsetime, the timeout status bit is set in the exception re-
          gister. Since parity check is carried out independantly on the
          undefined data, parity error is usually set too. Timeout is
          caused by no one recognizing the address, i.e. noneexisting de-
          vice, devicefailure or error in address. 
           
T_8.2.2     D_a_t_a_ _O_u_t_ _I_n_s_t_r_u_c_t_i_o_n_ 
          This instruction is used for output operations, i.e. whenever da-
          ta is to be sent to a device address on the bus. The contents of
          the specified working register is transferred to the addressed
          device register. 
           
          The CPU clears the exception register, addresses the device re-
          gister and places the data in the specified working register on
          the bus. If the address is correct, the device checks the recei-
          ved data for parity error and sends an acknowledge signal comple-
          ting the transfer. 
           
          If the data contains a parity error, the device sends a not-ac-
          knowledge signal rejecting the operation. 
           
          If the device is unable to handle the request, it also sends a
          not-acknowledge signal. In both cases the cause is indicated in
          the device status register according to device specifications.
          Communication error and timeout is indicated in the exception re-
          gister as for Data In. Parity error is not possible. 
           \f

T_8.2.3     E_x_c_e_p_t_i_o_n_ _I_n_d_i_c_a_t_i_o_n_ 
          The exception bits of the status register have the following
          meaning after an operation: 
                    
               B_i_t_   I_n_p_u_t_                   O_u_t_p_u_t_ 
                     21   bus parity error        0 
                     22   bus timeout             bus timeout 
                     23   bus communicationbus communication 
&_                          error (device dependent)error (device dependent) 
                      
T_8.2.4     M_e_m_o_r_y_ _A_d_d_r_e_s_s_i_n_g_ 
          It is inherent in the unified bus concept that addressing of de-
&_          vice registers in no way differs from the addressing of memory
          words. Therefore the data in and data out instructions may be
          used for memory reference in monitor mode. Bus communication er-
          ror during input will signal memory error in the addressed word.
          I/O reference of memory may be used for memory test and for test
          of memory size and relieves the programmer from handling busin-
          terrupts. 
           
          The memory references in instruction fetch and operand references
          follow the same pattern, but the assignment of the exception re-
          gister is only carried out in case of errors and is accompanied
          by generation of an internal interrupt as described in chapter 6.
          The Data In and Data Out instructions differ from this in always
               assigning the exception register and never generating interrupts.
      
           
T_8.3       S_t_a_n_d_a_r_d_i_z_e_d_ _B_l_o_c_k_-_o_r_i_e_n_t_e_d_ _D_e_v_i_c_e_ _C_o_n_t_r_o_l_l_e_r_s_ 
           
&_          Standardized block-oriented controllers, such as the disc proces-
          sor and the general device processor, are started by means of an
          output operation, which addresses the controller as described
          below. Here, the contents of the working register is irrelevant. 
           
          Once started, the controller fetches its commands from a channel
          program in the primary memory and executes them without engaging
          the central processor. 
           
          Data to be read from or written to a device is transferred di-
          rectly between the device controller and the primary memory. 
          The channel program is normally terminated by a STOP command,
          which transfers the standard status information to the primary
          memory and interrupts the controlling central processor. 
           \f

T_8.3.1     D_e_v_i_c_e_ _A_d_d_r_e_s_s_ 
          Device addresses have the following format: 
           
          1
          0 1                                  20212223
           
          Bit   0      Logical 1, indicating I/O address. 
&_           
          Bits  1:20   D_e_v_i_c_e_ _n_u_m_b_e_r_. Bits 1:20 are also used to calculate
                       the device description address (see below). In the
                       case of multi device controllers, the address is
                       divided into a main device number and a sub-device
number. In a disc storage system, for example, bits
1:18 may contain the binary number of the addressed
disc processsor, preceded by zeros, while bits 19:20
contains the logical number of one of the four disc
drives. 
                        
                       The function of direct controller commands is de-
                       fined by the effective address; the data transferred
                       by the instruction is irrelevant in case of stan-
dardized blockoriented devices. 
                        
T_          Bits 21:22   D_e_v_i_c_e_ _f_u_n_c_t_i_o_n_. Bits 21:22 have the following mea-
                       ning: 
                        
                              00   START CHANNEL PROGRAM 
                              01   RESET DEVICE 
                              10   (reserved) 
&_                              11   (reserved) 
                        
                       START CHANNEL PROGRAM causes the address controller
                       to start the channel program pointed out by the
                       first word of the device description (see below).
                       During program execution the controller will not
                       accept further START CHANNEL PROGRAM commands. 
                        
                       RESET DEVICE causes the addressed controller to
                       enter an idle and unassigned state, in which it
                       awaits addressing and can generate no interrupts. 
                        
          Bit 23       Irrelevant. 
                        \f

T_8.3.2     D_e_v_i_c_e_ _D_e_s_c_r_i_p_t_i_o_n_s_ 
          The address of the device description is calculated using the de-
          vice number (bits 1:20) as follows:  
&_                       device base + device number x 8 
           
          The device base, which is common to all devices, is the contents
          of word 8 in the primary memory. 
           
          The device description contains the following: 
           
          1st word:    S_t_a_r_t_ _o_f_ _c_h_a_n_n_e_l_ _p_r_o_g_r_a_m_. Address of the first
                       channel program command. 
                        
          2nd word:    S_t_a_t_u_s_ _a_d_d_r_e_s_s_. First address of the area in the
                       primary memory to which the standard status informa-
                       tion is to be transferred at the termination of the
                       channel program. 
                        
          3rd word:    I_n_t_e_r_r_u_p_t_ _d_e_s_t_i_n_a_t_i_o_n_. I/O address of the central
                       processor to be interrupted at the termination of
                       the channel program. The format is a device address.
                       In single CPU-systems the CPU will usually have
                       device number 0. In special cases interrupt destina-
                       tion may be a memory address. 
                        
          4th word:    I_n_t_e_r_r_u_p_t_ _l_e_v_e_l_. Interrupt level to be transferred
                       to the central processor when delivering the inter- 
                       rupt, see 6.5.3.. 
                        
T_8.3.3     C_h_a_n_n_e_l_ _P_r_o_g_r_a_m_ 
          Channel programs consist of sequences of three-word commands,
          each of which contains a channel command and two parameters. The
          command proper (the first word) has the following format: 
           
           
           
          0                    11 12      15 16 17 18            23 
           
           
          Bits  0:11          Irrelevant. 
          Bits 12:15          C_o_m_m_a_n_d_ _f_i_e_l_d_. Contains the function code. 
          Bit  16             D_ _f_i_e_l_d_. Indicates data chaining. 
          Bit  17             S_ _f_i_e_l_d_. Indicates skipping. 
          Bits 18:23          M_o_d_i_f_i_e_r_ _f_i_e_l_d_. Used to change the effect of
&_                               the basic command. 
           
          C_o_m_m_a_n_d_ _F_i_e_l_d_ 
          The basic commands can be divided into three groups according to
          parameter structure: some require two parameters, others only\f

          one, still others none whatsoever. I.e. while two parameter words
          are required, the contents may be irrellevant. 
           
          The parameter FIRST CHAR ADDRESS specifies the start address of
          the memory area to or from which characters (i.e. 8 bit units)
          are to be transferred or fetched. 
           
          The parameter CHAR COUNT specifies the maximum number of charac-
          ters to be transferred. 
           
          The parameters DATA 1 and DATA 2, will be interpreted in a device
          dependent way. 
           
          For some device controllers, only three bits of the command field
          are interpreted, in which case the bit pattern x111 indicates
          STOP. 
           
T_          Bits    Basic
          1_2_:_1_5_   C_o_m_m_a_n_d_P_a_r_a_m_e_t_e_r_ _1_ P_a_r_a_m_e_t_e_r_ _2_ 
           
          0000    SENSE             FIRST CHAR ADDRESS  CHAR COUNT 
          0001    READ                     "                " 
          0010    CONTROL                  "                " 
          0011    WRITE                    "                " 
          0100    WAIT              (irrelevant)        (irrelevant) 
          0101    (unassigned)           "                  " 
          0110    CONTROL NO PARAM       "                  " 
          0111    (unassigned)           "                  " 
          1000    (unassigned)      DATA 1              (irrelevant) 
          1001         "              "                     " 
          1010         "              "                     " 
          1011         "              "                     " 
          1100    (unassigned)      DATA 1              DATA 2 
          1101         "              "                   " 
          1110         "              "                   " 
&_          1111    STOP              (irrelevant)        (irrelevant) 
           
          SENSE transfers data from the internal registers or memory of the
          controller. 
           
          READ transfers data from the external data medium. 
           
          CONTROL transfers data to the internal registers or memory of the
          controller. 
           
          WRITE transfers data to the external data medium. \f

           
          WAIT permits the controller to generate an interrupt on certain
          events, such as power low or intervention. The controller enters
          a semi-idle state, in which it can accept a new START CHANNEL
          PROGRAM command (see section 8.3.1). 
           
          For devices used for autoloading, CONTROL NO PARAM with modifica-
          tion 0 performs either an initializing function or no function at
          all. 
           
          STOP terminates the channel program.
           
O_t_h_e_r_ _F_i_e_l_d_s_ 
                   Other fields in the command word are not necessarily inter-
          preted; if they are, they have the following meanings: 
           
           
          The D field indicates data chaining and is used to link the cur-
          rent command to the next command, so that a connected data trans-
          fer may take place to or from a non-connected memory area, indi-
          cated by a sequence of FIRST CHAR ADDRESS and CHAR COUNT parame-
          ters. 
           
          The S field means "skip data transfer" and is used for check
reading and in conjunction with data chaining to transfer
portions of connected data. 
           
          The meaning of the modifier field is device dependent, but modi-
          fication 0 always indicates normal use of the device. 
           
T_8.3.4     S_t_a_n_d_a_r_d_ _S_t_a_t_u_s_ _I_n_f_o_r_m_a_t_i_o_n_ 
          Standard status information is transferred as 4 words to the pri-
mary memory starting from the status address, contained in the
second word of the device description, either on normal termina-
tion of the channel program by the STOP command or on abnormal
termination by a device error. 
           
          The standard status information includes the following: 
           
            1st word: C_h_a_n_n_e_l_ _p_r_o_g_r_a_m_ _a_d_d_r_e_s_s_. Indicates the command follow-
                    ing the current command. 
                     \f

          2nd word: R_e_m_a_i_n_i_n_g_ _c_h_a_r_a_c_t_e_r_ _c_o_u_n_t_. Refers to the latest read or
                    write command or chain of such commands; in the latter
                    case, the count will be the total count for the chain. 
                    The count may be modified or left undefined by other
          commands. The stop command will leave it unchanged. 
           
          3rd word: C_u_r_r_e_n_t_ _s_t_a_t_u_s_. Reflects the status of the device at
                    the termination of the program. 
                     
          4th word: E_v_e_n_t_ _s_t_a_t_u_s_. Contains information about events that
                    have occurred since the last sensing of the event sta-
                      tus register.
        
The four standard status words are transferred as the first 12
characters by an unmodified sense command. \f

F_       9         POWER RESTART AND AUTOLOAD 
           
           
          Power restart and autoload are external signals that activate the
          corresponding actions immediately. Only features common to all
          models are described here. 
           
           
T_  9.1       Power Restart 
           
          RC 8000 is supplied with a power supervising logic that detects
&_          power failure and generates a restart signal on return of power.
          Built-in delays ensures against the effects of rapid oscillation
          of power. 
           
          A power failure will generate a power failure interrupt while the
          system still has at least one millisecond of operable time left.
          On systems with non-volatible primary memory this leaves time to
          prepare a power restart by saving the inf register or comparable
          action and force a halt, preventing undefined actions during the
          failure.  
           
          The power restart signal will activate the system at the power
          restart address, the contents of the word with address = 10. The
          following register initializations are performed:  
           
T_                    register  initialization 
                    status    monitormode, all other bits cleared 
                    base      0, no relocation 
                    lowlim    8 
                    uplim     2047 x 4096, no memory protection 
                    intlim    0, totally disabling 
&_                    inf       1, non disable events leads to halt 
           
          The power restart code must reinitialize the registers montop,
          size and inf and must clear all bits in the interrupt memory.
          Further power restart actions are system dependant, but should
          include triggering of power restart actions in all device
          handlers and in the system clock routine. 
           
          After the specified power restart actions, return to the
          interrupted action is obtained by the return interrupt
          instruction.  
           
           \f

T_       9.2       Autoload 
           
          Autoload triggers the load of one block of program and data from
&_          a standard block oriented device. After loading control is trans-
          ferred to the loaded program, which then continues loading and
          initialization. 
           
          RC 8000 has 2 autoload signals. The first is connected to an
          operators panel and triggers autoload from device number 4, which
          usually is a magnetic disc storage. The other triggers autoload
          from device 2. Device 2 is usually the input channel of a
          Frontend Processor interface. In this case the second autoload
          signal is connected to the interface and is activated from the
          Frontend after local selection of the load medium and preparation
          of the first block transfer. This connection is reciprocal, such
          that RC 8000 also can perform an autoload of the Frontend. 
           
          The autoload action starts by issuing a system reset signal on
          the unified bus. After that memory is initialized as described
          below, and the device corresponding to the autoload signal is
          activated. 
           
                  address      initialization      interpretation 

                     8        12-8 * device no.   device base 
                    10        -4096 + 1536        power restart address 
                    12        10                   
                    14        20                  device description, 12-18
                    16        256                 channel program, 10-20 
                    18        22                   
                    20        768                  
&_                   532        jl.         0       end-less loop 
           
          The device base value makes the device select the device descrip-
          tion starting in address 12 regardless of device number. 
           
          The device description selects the channel program starting in
          address 10. Standard status will be delivered in words 20-24, and
          the interrupt level 22 will be delivered in memory word address
          256, and not as an interrupt, see 8.3.2. 
           
          The channel program contains an init device command, command
          value 6 (parameters are irrelevant), and a read command with
          first address 22 and a character count of 768 defining load of
          256 words to addresses 22-532. The first words of the load will\f

          be interpreted as a continuation of the channel program, while
          the last word will overwrite the jl. 0 instruction and liberate
          the cpu from the end-less loop. Note that words 22-26 and 256 of
                   the load will be overwritten when a stop command is reached in
          the continuation of the channelprogram. 
           
          Before the device is started and control is transferred to the
          end-less loop the following register initializations are per-
          formed: 
           
T_                    register  initialization      meaning    
            
                    status         0              user mode 
                    base           0              no relocation 
                    lowlim         534            all memory 
                    uplim          534            writeprotected 
                    cpa            534            only load read accessible
                    intlim         0              total disable, interrupts
                                                  cause halt 
                    size           2047x4096      nearly maximum 
                    montop         2047           only monitor call 0
                                                  allowed 
                    inf            525            a system table must be
                                                  loaded just before the 
                                                  instruction overwriting
&_                                                  the end-less loop  
           
          The initial underprivileged state, which can only be left through
          a monitor call 0 gives a very high assurance against destructive
          effects from erroneous autoloads. All errors during the autoload
          sequence leads to a halt. 
 
If the autoload device is not activated (rejected or bus time
out), device number is decreased by 1, device base is adjusted
and the new device is activated. In this case the cpu will halt
to await a new autoload signal. 
 
                   Device number 1 is usually unassigned, such that unsuccesfull
autoload from device 2 leads to halt. 
 
Devicenumber 3 is usually the output channel of the Frontend
interface. In this case the init command value 6 will trigger a
Frontend autoload. This allows the operator to perform a system
load from a Frontend device by disconnecting device 4 and press\f

the autoload button on the RC 8000 operator>s panel, since the
Front End autoload will end by activating the second autoload
signal of RC 8000. 
 
The following example gives a rough idea of how an autoload block
may be structured (nummeric labels indicate resulting addresses
in memory): 
 
T_                 22:        15*256               ; stop command, will be overwritten
           0                    ; by the 3 last words of the stan- 
         0                    ; dard status 
check:     value'              ; checksum of load block adjusted
                                ; for correct value of overwrite 
          start:     rl  w0     check     ; entry after load 
                     al  w2     22        ; 
          next:      ws  w0  x2           ; code for check of load 
                     al  w2  x2+2         ; 
                     sh  w2     532       ; 
                     jl         next      ; 
                     se  w0     0         ; if checksum error then force 
                     jl        -1         ; halt 
                      jd        -2048      ; enter monitor mode at init 
           
          init:      -                    ; code for further initialization 
                     -                    ; and loading 
&_                     -                    ; 
           
T_          256:       22                   ; overwritten by interrupt 
                                          ; level = 22 
                     -                    ; 
                     -                    ; more code 
                      -                    ; 
           
                     0                    ; rudimentary system table: 
                     0                    ; exception and monitorcalls 
                     0                    ; lead to half after jd - 2048 
                     init                 ; system table: mon call address 
                     0                    ;               interrupt address 
                     2048*4096            ;               mon mode/0 
                     534                  ;               reg. dump address 
                     0                    ;               exc address 
                     0                    ;               esc address 
          532        jl         start     ; overwrites end-less loop 
&_                                           ; goto start 
           \f

                    
           \f

«eof»