Z80000 CPU Preliminary Technical Manual Sep84
Z80000_CPU_Preliminary_Technical_Manual_Sep84 Z80000_CPU_Preliminary_Technical_Manual_Sep84
User Manual: manual pdf -FilePursuit
Open the PDF directly: View PDF .
Page Count: 360
Download | |
Open PDF In Browser | View PDF |
Z80,OOOTM CPU Preliminary Technical Manual . September 1984 Z80,OOOTM CPU Preliminary Technical Manual 7-i1APW Zilog Copyright 1984 by Zilog, Inc. All rights reserved. No part of this publication may be reproduced withoutthe written permission of Zilog, Inc. The information in this publication is subject to change without notice. Table of Contents 1 Chapter 1. Z80,OOO CPU Overview 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.S Introduction Architecture 1-1 1-1 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1-1 1-1 1-2 1-3 1-3 1-3 1-3 Registers Address Spaces Memory Management Addressing Modes Instruction Set Normal and System Modes of Operation Exceptions Extended Processing Architecture Cache External Interface CPU Internal Organization ZSOOO Compatibility Summary 1-4 1-4 1-4 1-5 1-6 1-6 Chapter 2. Data Fonaats and Registers 2.1 2.2 2.3 2.4 2.5 2.6 Introduction Data Formats General-Purpose Register File Program Status Registers Special-Purpose Control Registers 2-1 2-1 2-1 2-2 2-3 2.5.1 Program Status Area Pointer (PSAP) 2.5.2 Normal Stack Pointer (NSP) 2.5.3 Translation Table Descriptor Registers 2.5.4 Overflow Stack Pointer (OSP) • • • • • 2.5.5 Hardware Interface Control Register (HICR) 2.5.6 System Configuration Control Longword (SCCL) 2-3 2-3 2-4 2-4 2-4 2-4 Reserved Control Sits 2-4 Chapter ,. Address Representation and Modes of Operation 3.1 3.2 3.3 Introduction • • • • • • Address Representation. Normal and System Modes 3-1 3-1 3-2 Chapter 4. Address Spaces and tte.ory Management 4.1 4.2 3 4 Introduction Address Spaces 4-1 4-1 4.2.1 4.2.2 4.2.3 4-1 4-3 4-3 Logical Memory Address Spaces Logical I/O Address Space Physical Address Spaces 2 iii Table of Contents (Continued) 4.3 Memory Management • • • • • 4-3 4.3.1 4.3.2 Address Translation Loading the TLB 4-4 4-5 4.3.2.1 4.3.2.2 4.3.2.3 4.3.2.4 4-6 4-6 4-7 4-7 4.3.3 4.3.4 4.3.5 4.3.6 Translation Table Descriptor Registers Level-1 Table Entries Level-2 Table Entries Page Table Entries Access Protection • • • • • Address Translation Algorithm Address Translation Exceptions Memory Management Instructions 4-8 4-B 4-10 4-10 Chapter 5. Addressing Modes a:Id Address Calculations 5.1 5.2 Introduction • • • • Address Calculations 5-1 5-1 5.2.1 Compact Address Calculations 5.2.2 Segmented Address Calculations 5.2.3 Linear Address Calculations 5-1 5-1 5-3 5.3 Addressing Mode Descriptions 5.3.1 5.3.2 5-4 Compact Mode Descriptions and Examples 5-4 5.3.1.1 5.3.1.2 5.3.1.3 5.3.1.4 5.3.1.5 5.3.1.6 5.3.1.7 5.3.1.8 5.3.1.9 5-4 5-4 5-4 5-5 5-5 5-6 5-6 5-7 5-7 Register (R) Immediate (1M) Indirect Register (IR) Direct Address (DA) Index (X) • • • • Base Address (BA) • Base Index (BX) •• Relative Address (RA) Relative Index (RX) • Segmented and Linear Mode Descriptions and Examples 5-7 5.3.2.1 5.3.2.2 5.3.2.3 5.3.2.4 5.3.2.5 5.3.2.6 5.3.2.7 5.3.2.8 5.3.2.9 5-7 5-8 5-8 5-9 5-10 5-11 5-12 5-13 5-14 Register (R) Immediate (1M) Indirect Register (IR) Direct Address (DA) Index (X) Base Address (BA) Base Index (BX) Relative Address (RA) Relative Index (RX) 5.4 Extended Addressing Modes iv ••• 4 5-15 5 Chapter 6. Instruction Set 6.1 6.2 6-1 6-1 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.2.B 6.2.9 6.2.10 6.2.11 6-1 6-2 6-3 6-4 6-5 6-5 6-6 6-7 6-B 6-B 6-9 Load and Exchange Instructions Arithmetic Instructions Logical Instructions Program Control Instructions Bit Manipulation Instructions Bit Field Instructions Rotate and Shift Instructions Block Transfer and String Manipulation Instructions Input/Output Instructions CPU Control Instructions Extended Instructions 6.3 Flags and Condition Codes 6.4 Notation and Binary Encoding 6.4.1 6.4.2 6.4.3 6.4.4 6.5 6.6 6 Introduction ••• Functional Summary 6-9 6-10 Assembler Language Syntax Instruction Format Extended Addressing Modes 6-11 6-12 6-13 6.4.3.1 6.4.3.2 6-13 6-13 Compact Mode Segmented or Linear Mode Unimplemented Instruction Encodings ZBO,OOO Instruction Descriptions and Formats EPA Instruction Templates 6-15 6-16 6-209 Chapter 7. Instruction Execution and Exceptions 7.1 7.2 7.3 7.4 Introduction • • • • • Operating States ••• Instruction Execution 7-1 7-1 7-2 7.3.1 7.3.2 7-2 7-3 Instruction Ending ••••••• Effects of the Pipeline on Execution Exceptions. 7-3 7.4.1 Reset 7.4.2 Bus Error • 7.4.3 Interrupts 7.4.4 Traps • 7-3 7-4 7-4 7-4 7.4.4.1 7.4.4.2 7.4.4.3 Extended Instruction Trap Privileged Instruction Trap System Call Trap • • • • • • 7 7-4 7-4 7-4 v Table of Contents (Continued) 7.4.4.4 Address Translation Trap 7.4.4.5 Breakpoint Trap 7.4.4.6 Integer Arithmetic Error Trap 7.4.4.7 Conditional Trap • • • • 7.4.4.8 Unimplemented Instruction Trap 7.4.4.9 Odd PC Trap •••••••• 7.4.4.10 Trace Trap • • • • • • • • • • 7.4.5 Changing Program Status 7.4.6 Exception Handlers 7.4.7 Priority of Exceptions 7-4 7-4 7-4 7-4 7-5 7-5 7-5 7-5 7-7 7-8 Chapter 8. External Interface 8.1 8.2 8.3 8.4 8.5 B.6 8.7 B.8 8 Introduction Bus Operations Multiprocessor Configurations Cache ••••••••••• Pin Functions ••••••• Hardware Interface Control Register Bus Timing 8us Transactions B-1 8-1 8-2 8-3 8-3 8-5 8-6 8-7 B.8.1 8.8.2 Response CPU-Memory Transactions 8-8 8-8 8.8.2.1 Single Memory Read and Write Transactions 8.8.2.2 8urst Memory Read and Write Transactions 8.8.2.3 Interlocked Memory Transactions 8-8 8-10 8-11 B.8.3 Input/Output Transactions 8.8.4 EPU Transactions 8.8.4.1 CPU-EPU Instruction Transactions 8.8.4.2 CPU-EPU Data Transactions 8.8.4.3 EPU-Memory Transactions 8.8.5 Interrupt Request and Acknowledge 8.8.6 Internal Operation and Halt Transactions 8.8.7 Bus Retry 8.B.B Bus Error 8-12 8-13 8-16 8-17 8-18 8-20 8-21 8-21 8-21 B.9 Bus Request and Acknowledge 8.10 Reset •••••• 8-22 8-26 Appendix A. ZOOOO C..patibility A-1 Appendix 8. MeIIory-Mapped I/O B-1 Appendix C. Cache Control and .....ry TrlKlSactions C-1 Appendix D. Progr_er' s Quick Reference Guide 0-1 vi 7 Appendix E. naing foraulae for Perfornlance Evaluation E-1 Glossary G-1 Index 1-1 List of Illustrations figure 1-1. Figure 1-2. Memory Mapping Functional Block Diagram 1-2 1-6 Figure Figure Figure Figure Data Formats General-Purpose Registers Program Status Registers Special-Purpose Control Registers 2-1 2-2 2-3 2-3 Figure 3-1. Address Representation 3-2 Figure Figure Figure Figure Figure Figure Figure Figure Figure Figure Figure Address Spaces Logical Memory Addresses in Compact Mode Memory Address Space in Segmented Mode Bytes, Words, and Longwords in Memory Address Translation Using the TLB • Logical Address Partition for Address Translation Automatic Loading of the TLB Using Tables in Memory Translation Table Descriptor Translation Table Base Address Table Entry Formats Address Translation Trap Identifier Word 4-1 4-2 4-2 4-3 4-4 4-5 4-5 4-6 4-7 4-7 4-10 Figure 5-1. Figure 5-2. Addressing Modes Segmented Addresses 5-2 5-3 Figure 6-1. Bit Field 6-6 Figure Figure Figure Figure Figure 7-1. 7-2. 7-3. 7-4. 7-5. Operating States Program Status Saved on System Stack Program Status Area • Program Status Saved on Overflow Stack Exception Priority Flowchart 7-1 7-5 7-6 7-7 7-B Figure Figure Figure Figure Figure B-1. B-2. B-3. 8-4. B-5. B-1 B-2 8-4 B-5 Figure Figure Figure Figure 8-6. 8-7. 8-B. B-9. System Configuration Multiprocessor Configurations ZBO,OOO Pin Functions • • Hardware Interface Control Register Example of Memory Read Timing Showing Different Bus Scale Factors Single Memory Read Timing Single Memory Read Timing (One Wait State) Single Memory Write Timing Burst Transfer Protocol • 2-1. 2-2. 2-3. 2-4. 4-1. 4-2. 4-3. 4-4. 4-5. 4-6. 4-7. 4-B. 4-9. 4-10. 4-11. B-6 B-B B-9 8-10 B-11 vii ------~,- ---- Table of Contents (Continued) Figure Figure Figure Figure Figure Figure Figure Figure Figure Figure Figure Figure Figure Figure Figure 8-10. 8-11. 8-12. 8-13. 8-14. 8-15. 8-16. 8-17. B-18. 8-19. 8-20. 8-21. 8-22. 8-23. 8-24. Burst Memory Read Timing (One Wait State) Burst Memory Write Timing. I/O Read Timing • • EPA Instruction Processing CPU-EPU Instruction Transfer Timing CPU-EPU Data Read Timing CPU-EPU Data Write Timing • EPU-Memory Single Write Timing Interrupt Response/Acknowledge Timing Internal Operation and Halt Timing Bus Error Identifier Word • Local Bus Request Acknowledge Timing Global Bus Request Timing • • State Diagram for CPU Bus Request Protocol Reset Timing \ . 8-12 8-13 8-14 8-15 8-16 8-17 8-18 8-19 8-20 8-21 8-21 8-22 8-23 8-24 8-27 Figure C-1. Cache Organization C-1 Figure E-1. Figure E-2. Functional Block Diagram Instruction Pipeline E-1 E-2 viii Chapter 1. Z80,000 CPU Overview 1.1 INTRODUCTION 1 .2.1 Registers The zao,ooo CPU is an advanced 32-bit microprocessor that integratea the architecture of a mainframe computer into a single chip. A subset of the zao,ooo architecture was originally implemented in a 16-bit version, the zaooo~ microprocessor. The zao,ooo bua structure permits the use of zaooo family peripherals, such as the Za030 SCC and Za036 CIO. While maintaining compatibility with zaooo family software and hardware, the zao,ooo CPU offers greater power and flexibility in both its architecture and interface capability. Operating systems and compilers are easily developed in the zao,ooo CPU's sophisticated environment, and the hardware interface provides for connection in a wide variety of system configurations. The zao,ooo CPU includes sixteen 32-bit generalpurpose registers. The registers can be used as data accumulators, index values, or memory pointers. Two of the registers, the Frame Pointer and Stack Pointer, are used for procedure linkage with the Call, Enter, Exit, and Return instructions. Memory management is integrated in the CPU, providing access to more than 4 billion bytes of logical address space without external support components. The zao,ooo CPU also includes a cache memory, which complements the pipelined design to achieve high performance with moderate memory speeds. 1.2.2 Address Spaces This chapter presents an overview of the features of the zao,ooo CPU that offer extraordinary flexibility to microprocessor system designers in tailoring the power of the CPU to their specialized applications. The chapters that follow describe these features in detail. 1.2 ARCHITECTURE The CPU features a general-purpose register file with sixteen 32-bit registers. The instruction set offers a regular combination of nine general addressing modes with operations on numerous data types, including bits, bit fields, bytes (a bits), words (16 bits) , long words (32 bits) , and variable-length strings. The memory management, exception handling, and system and normal mode features support the development of reliable software systems. The zao,ooo registers also include the 32-bit Program Counter and 16-bit Flag and Control Word. These two registers, together called the Program Status, are automatically saved during trap and interrupt processing. Nine other special-purpose registers are used for memory management, system configuration, and other CPU control. The CPU uses 32-bit logical addresses, permitting direct access to 4G bytes of memory. The logical addresses are translated by the memory management mechanism to the physical addresses used to access memory and peripherals. The CPU supports three modes of address representation--compact, segmented, and linear--selected by two control bits in the Flag and Control Word register. Applications with an address space smaller than 64K bytes can take advantage of the dense code and efficient use of base registers with the 16-bit compact addresses. Although programs executing in compact mode can only manipulate 16-bit addresses, the logical address is extended to 32 bits by concatenating the 16 mostsignificant bits of the Program Counter register. Compact mode is equivalent to the laOOO non-segmented mode. Segmented mode supports two segment sizes--64K bytes and 16M bytes. Up to 32,76a of the small segments and 12a of the large segments are available. In segmented mode, address calculations do not affect the segment number, only the offset 1-1 Z80,000 CPU Overview wi thin the segment. Allocating individual objects such as program modules, stacks, or large data structures to separate segments allows applications to benefit from the logical structure of a segmented memory space. The 32-bit addresses in linear mode provide uniform and unstructured access to 4G bytes of memory. Some applications benefit from the flexibility of linear addressing by allocating objects to arbitrary positions in the address space. Memory management provides two valuable functions--address translation and access protection. Access protection ensures that proprietary portions of memory, or those portions concerned with operating system functions, are protected from tampering. Address translation, the process of mapping a program's logical addresses to the physical addresses used to access memory, streamlines system performance, since the operating system can relocate programs in memory, free from rigid constraints. By integrating memory management with the processor in a single chip, the l80, 000 CPU reduces parts-count and improves memory access time. Another memory management function, demand-paged virtual memory, a !lows programs to execute even when only a portion of their memory requirements is available in primary storage. The rest of the program can be stored in secondary storage, typically on disk. Thus, virtual memory improves a The CPU implements a paged translation mechanism similar to that of most mainframe and super-minicomputers. The operating system creates translation tables in memory, then loads pointers to the tables in control registers. The CPU automatically refers to the tables to perform address translation and access protection. To manage the large logical address space, the translation scheme divides it into fixed-size, 1Kbyte pages. Similarly, the physical address space is divided into fixed-size frames, also 1K-bytes each. The memory management mechanism maps a logical page to an arbitrary physical frame (Figure 1-1). Since both the pages and frames are of fixed and equal size, the operating system's memory allocation problem is simplified. The CPU implements a Translation Lookaside Buffer (TLB) to store the information needed to translate the sixteen most recent! y used pages. When the information needed to translate a page is missing from the TLB, the CPU automatically translates the address using the tables in memory, and then loads the information into the TLB. The memory management mechanism can be used to map logical memory addresses to physical I/O addresses. The use of memory-mapped I/O permits protected access by application programs to selected peripheral devices. LOGICAL ADDRESS SPACE PHYSICAL ADDRESS SPACE INVALID PAGE 3FFFFF" FRAME 3FFFFF'6 INVALID PAGE 3FFFFE16 FRAME 3FFFFE'6 PAGE 3FFFFD" FRAME 3FFFFD'6 INVALID PAGE 3FFFFC" FRAME 3FFFFC'6 INVALID PAGE 4" PAGE 316 FRAME 316 INVALID PAGE 216 FRAME 2,6 PAGE 116 FRAME 116 PAGE 016 FRAME 016 Figure 1-1. 1- 2 system's cost/performance by permitting programs to execute with varying amounts of memory. "'-try Happing 2324-002 Z80,OOO CPU Overview 1.2._ Addreaaing IbIea The CPU locetes operands (the data manipulated by inatructions) in regiaters, memory, peripheral ports, or in the inatruction. The location of an operand is specified by one of nine general addresaing modes: Register, Immediate, Indirect Register, Direct Address, Index, Baae Addresa, Base Index, Relative Address, and Relative Index. Instruction formats provide compact encodinga for the most frequently used addressing modes. 1.2.5 Inatruction Set The Z80,OOO CPU supports operations on nine data types: bit, bit field, aigned integer, unaigned integer, logical value, address, packed BCD integer, stack, and string. Integer and logical values can be byte, word, or longword in size. In addition, floating-point operations are implemented through the Extended Processing Architecture (EPA) facility by a coproceasor (ZB07D Arithmetic Processing Unit) or by software emulation. Several instructiona are provided for important control structures. Conditional branches and jumps support "if-then", "while", and "repeat" constructions. The Decrement and Branch if NonZero instruction can be used for loop control. Call, Enter, Exit, and Return instructions perform procedure linkage. The regular combination of addressing modes, operations, and data types offers a powerful instruction set that is well-suited for compilation of high-level languages such as C, Pascal, and Ada. 1.2.6 NoftIal IDI 51st. Modes of Operation The CPU has two modes of operation--normal and system--used to isolate application programs from senaitive portions of the operating system. The mode is aelected by a bit in the Flag and Control Word regiater. Dnly programs in system mode are privileged to execute I/O instructions and access control registers. The memory management mechanism allows system mode programs to accesa regions of memory protected from normal mode access. Further protection is provided with separate stacks for system and normal modes. Application programs use the System Call instruction and trap to request services from the operating system. 1.2.7 Exceptions Exceptions are conditions or events that disrupt the usual sequence of instructions. The Z80,OOO CPU supports four types of exceptions: reset, bus error, interrupts, and traps. A reset exception initializes the CPU state in response to an external request, typically part of a power-on sequence. A bus error exception occurs when external hardware indicates an irrecoverable error, such as an uncorrectable memory error, on a bus transaction. An interrupt is an asynchronous event signalled externally, typically when a peripheral device needs attention. A trap is a condition detected by the CPU synChronously with execution of an instruction. When an exception occurs, the CPU saves the Program Status registers of the executing process on the system stack. Then new values for the Program Status registers are read from a table in memory (Program Status Area), thus passing control to an exception handler. The CPU provides a flexible interrupt structure that includes three types of interrupts: nonmaskable, vectored, and nonvectored. The nonmaskable interrupt, which is of highest priority, is typically reserved for the most critical requirements, such as sudden power failure. Both vectored and nonvectored interrupts can be separately masked by bits in the flag and Control Word register. Vectored interrupts allow the CPU to branch to a specific exception handler selected by a code read from the peripheral. Nonvectored interrupts use a common exception handler. The CPU recognizes several trap conditions, all of which can be used to improve software reliability. The System Call trap provides controlled access for application programs to operating system functions. Traps for integer overflow, subrange out of bounds, and subscript out of bounds catch common run-time errors. The Address Translation trap allows the operating system to implement access protection and virtual memory. Traps for breakpoint and single instruction tracing are used during software development. The Conditional Trap instruction ia used for software definition of exception conditions not recognized by the CPU hardware. 1-3 180,000 CPU Overview 1.' EXTENDED PROCESSING ARCHITECTURE The Extended Processing Architecture (EPA) fscility allows the operations defined in the 180,000 CPU architecture to be extended by software or hsrdware. for example, floating-point operations are supported by the 18070 Aritlvnetic Processing Unit (APU) or by a software package that emulates the APU. When the CPU encounters an EPA instruction, it checks a control bit in the flag and Control Word regiater to determine whether the EPA facility is enabled. If disabled, the CPU traps for software emulation of the instruction. If enabled, the CPU sends the instruction across the axternal interface to an Extended Processing Unit (EPU). The CPU then transfers the operands for the instruction to the EPU. The data processing operations per formed by the EPU are transparent to the CPU. In general, ths EPU sxscutes complex opsrstions such as floatingpoint aritlvnetic, decimal sritlvnetic, or signal processing with special-purpose hardware. 1 •• CACHE The 180,000 CPU contains an on-chip cache buffer to store copies of memory locations that were recently referred to. Most memory references are either to a location that was referred to recently (temporal locality) or to a nearby location (spatial locality). Therefore, on most memory fetches the CPU is able to find the required data in the cache (a hit), thus avoiding a slower access to external memory. Whsn the required data is missing from the csche (a miss), the CPU fetches the dsta from sxternal memory snd losds a copy into the cache. The fetched data replaces the least recently used dats in the cache. The cache provides significant cost/performance advantages by allowing the CPU to execute instruc- 1-4 tions at a faster rste than permitted by external memory alone. The cache can be separately enabled to store both instructions and data. The effectiveness of the cache is enhanced by storing data along with instructions, but an spplication can cache instructions only. Cache replacement on a misa can also be inhibited. This option can be used to lock desired locations into the cache for fast, on-chip access. 1.5 EXTERNAL INTERFACE The 180,000 CPU offers a number of features for interfacing to systems that span a wide range of cost/performance requirements. The Hardware Interface Control Register (HICR) specifies certain characteristics of the hardware configuration surrounding tha CPU, including bua speed, memory data path width, and number of automatic wait states. The system designer can fine-tune performance by selecting not only the CPU clock rate and bus speed (1/2 or 114 the CPU clock), but also the acceaa time and date path width for the memory. for two independent regions of memory the CPU can be programmed for both the number of wait states automatically inserted, and whether the data path is 16 or 32 bits wide. With these options, a system can essily sccommodate s slow, 16-bit-wide bootstrap read-only memory (ROM) in one region and fast, 32-bit-wide rendom access memory (RAM) in the other. furthermore, the CPU supports an optional burst transfer of several memory words from consecutive locations. 8urst transfers can increase memory bandwidth for interleaved and "nibble-mode" memory systems. The CPU provides support for four types of multiprocessor configurational coprocessor, slave processor, tightly-coupled multiple CPUs, and loosely-coupled multiple CPUs. Coprocessors, such as the 18070 Arithmetic Processing Unit, work synChronously with the CPU to execute a single instruction stream using the Extended Processing Z80,000 CPU Overview Architecture facility. Slave processors, such as the Z8016 DMA Transfer Controller, perform dedicated functions asynchronously to the CPU. Tightly-coupled multiple CPUs execute independent instruction streams and generally communicate through shared memory on a common bus. Two separate bus request protocols support slave processing and tightly-coupled multiprocessors. Looselycoupled multiple CPUs generally communicate through a multi-ported peripheral, auch as the Z8038 fIfO I/O Interface Unit, using the interrupt and I/O facilities of the Z80,000 CPU. 1.6 CPU INTERNAL ORGANIZATIIIt registers and another path to the instruction bus for reading displacementa and direct addresses. The result of the address calculation is transmitted to the TLB. • The register file contains the sixtean generalpurposa longword registers, Program Status registers, special-purpose control registers, and several registers used to store values temporarily during instruction execution. The regiater file has one path to the address arithmetic unit and two paths to the execution arithmetic and logic unit. • The execution arithmetic and logical unit calculates the results of instruction execution, such as add, eXClusive-or, and simple load. This unit has two paths to the register file on which two operands csn be read simultaneously or ona can be written. One of the paths to the register file is multiplexed with a path from the memory bus. • The instruction decode and control unit decodes inatructions and controls the operation of the other functional units. This unit has a path from the instruction bus and two programmable logic arrays for separate microcoded control of the two arithmetic units. This unit also controls the exception handling and loading of the TLB. figure 1-2 shows a block diagram of the Z80,000 CPU internal organization, including the following major functional units and data paths: • • • • The external interface logic controls transactions on the bus. Addresses and data from the internal memory bus are transmitted through the interface to the Z-BUS. The Z-BUS is a time-multiplexed, address/data bus that connects the components of a microprocessor system. The cache stores copies of inetruction and data memory locstione. Instructions are read from the cache on the instruction bus. Data is read from or written to the cache on the memory bus. The Translation Lookaside Buffer (TLB) translates logical addresses calculated by the address arithmetic unit to physical addresses used to access the cache. The eddress arithmetic unit performs all address calculations. This unit has a path to the register file for reading base and index All of the functional units and data paths listed abova are 32 bits wide. The operation of the CPU is highly pipe lined ao that several instructions are simultaneously in different stages of execution. Thus, the functional units effectively operate in parallel with one instruction being fetched while an address is calculated for another instruction and results are stored for a third instruction. 1-5 Z80,000 CPU Overview Z·BUS -------, r------ I I I I I I I I I I I I I I I I I I I I I I IL ________________ I MEMORY BUS CACHE DATA CACHE ADDRESS TAGS INSTRUCTION REGISTER PHYSICAL PC TRANSLATION LOOKASIDE BUFFER INSTRUCTION DECODE AND CONTROL UNIT REGISTER FILE EXECUTION ARITHMETIC AND LOGIC UNIT ~ Figure 1-2. Functional Block Diagr_ 1.7 Z8000 COMPATIBILITY 1.B The 180,000 CPU's instruction set encoding allows it to directly execute Z8000 family software such as compilers and the 1RTS~ real-time operating system. Z8000 programs must not use the 18000 privileged instructions, address, and control field encodings i f they are to execute correctly on the Z80,000 CPU, since the Z80,000 CPU uses many of these reserved encodings to extend the register file, address range, and instruction functionali t y. The Z80,000 CPU meets and surpasses the requirements of medium and high-end microprocessor systems. Software program development is easily accomplished with the CPU's sophisticated architecture. The highly-pipelined design, on-chip cache, and external interface support systems ranging from dedicated controllers to mainframe computers. 1-6 SlMlARY 8225-001 Chapter 2. Data Formals and Registen 2.1 2.2 DATA FORMATS INTRODUCTION The zao,ooo CPU manipulates data located in registers, memory, and peripherals. The zao,ooo register repertoire consists of the general-purpose register file, the Program Counter, the Flag and Control Word, and nine special-purpose control registers. This chapter describes the format for data and the use of registers. Chapter 4 describes the use of memory and peripharals. The CPU manipulates bits, bytes (a bits), words (16 bits), longwords (32 bits), and quadwords (64 bits) of data. Within a byte, word, longword, or quadword, the bits are numbered from right to left, from least to most significant (Figure 2-1). This is consistent with the convention that bit n corresponds to position 2n in the representation of binary numbers. (However, the bit numbering for bit field data, described in Section 6.2.6, is in the opposite direction from Figure 2-1.) 7&543210 IIIIIIIIIBITSINABYTE 15 14 13 12 11 10 9 & 7 6 5 4 3 2 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 BITS IN A WORD 313029 11.. . .1.1. . 1_1. .I._ _ _ _ _--I~F_: 210 _____--'-1.....1.........1......1 BITS IN A LONGWORD 636261 210 IL....I.I....I-I...I.I---------I~'F_:--------...I.I....I-I. .1.1.....1 BITS IN AQUADWORD Figure 2-1. 2.3 GENERAL-ruRPOSE: REGISTER FILE The general-purpose register file contains 64 bytes of storage (Figure 2-2). The first 16 bytes (byte registers RLO, RHO, ••• , RL 7, RH7) can be used as accumulstors for byte data. The first 16 words (word registers RO,R1, ••• ,R15) csn be used as sccumulators for word data, as index registers (except RO), or for memory addresses in compact mode (except RO) • Any long word register (RRO,RR2, ••• ,RR30) can be used as an accumulator for longword data and, in segmented or linear mOde, as an inde)( register (e)(cept RRO) or for memory addresses (e)(cept RRO). Quadword registers (RQO,RQ4, ••• , RQ28) can be used as accumulators 8225-002 Data Fomata for Multiply, Divide, and ElCtend Sign instructions. Within quadword register RQn, RRn contains the more significant longword. A 4-bit field in instructions specifies which generalpurpose register to access. The register size is determined by the instruction opcode. The unique organization of the register file allows bytes and words of data to be manipUlated conveniently while leaving most of the registers free to hold addresses, counters, or other values. For example, four bytes in RHO, RLO, RH1, and RL 1 can be packed into the single longword register RRD and manipulated independently with the e)(tensive byte-oriented instructions. 2-1 Data Formats and Registers Two registers are dedicated for the Stack Pointer and Frame Pointer used by Call, Enter, Exit, and Return instructions. The Stack Pointer is also used in processing exceptions and by the Interrupt Return instruction. There are separate Stack Pointers for system and normal modes of operation. The registers used for the Stack Pointer and Frame Pointer depend on the address representation mode. In compact mode, R15 is the Stack Pointer and R14 is the Frame Pointer. In segmented or linear mode, RR14 is the Stack Pointer and RR12 is the Frame Pointer. See Section 3.3 for more details on modes of operation. I RRO 1 RHO RR2 1 RH2 RR4 R04\ RR6 I 1 RH4 ROO ROB R012 R01S R020 R024 R02B 1 RH6 o o o o 1 RL4 1 RL6 o o o o o o o o 1 RHl o o o 1 RL 1 0 RO, Rl 1 RL3 0 R2, R3 1 RL5 0 R4, R5 1 RH1 0 1 RL1 0 RB, R1 1 RH3 1 RH5 I I RRB 15 RB RR10 15 Rl0 RR12 15 R12 RR14 15 R14 I RR16 31 0 \ RR1B 31 0 I RR20 31 0 \ RR22 31 0 RR24 31 0 RR26 31 0 RR2B 31 0 RR30 31 0 I I Figure 2-2. 2._ 1 RLO 1 RL2 15 R9 0 15 Rll 0 15 R13 0 15 R15 0 Half Carry (H) is used in BCD ar i thmetic to convert the result of a previous binary addition or subtraction to a decimal result. The C, l, S, and PlY flags can be manipulated using the Complement Flag and Set Flag instructions. Section 6.3 provides more information about the flags. The Integer Overflow Enable (IV) bit is the mask for an Integer Over flow trap. While this bit is 1, the Integer Overflow trap is enabled; while 0, the integer overflow trap is disabled (see Section 7.4.4.6). The low-order byte of the FCW can be accessed in normal mode using the load Control Byte instruction. The high-order byte of the FCW contains eight control bits: Extended/Cllllp8Ct Mode (Etc) and linear/5egalented Mode {lIS} controls the mode of address representation. While E!C is 0, addresses are compact (16 bits). While E/e is 1, addresses are extended (32 bits) and are either segmented (LiS is 0) or linear (lis is 1). General-Purpose Registers PROGRAM STATUS REGISTERS The Program Status registers are the Program Counter (PC) and the Flag and Control Word (FCW) (Figure 2-3). The PC contains the 32-bit address of the instruction being executed. The 16-bit FCW indicates operating modes, masks for traps and interrupts, and flags set according to the result of instructions. The low-order byte of the FCW contains six flags, described below, and the integer overflow mask. Many instructions modify or use the flags. Carry (C) indicates a carry out of the high-order bit position during an operation. Zero (Z) indicates that the result of an operation is zero. Sign (S) indicates whether the operation is negative or positive. result of an Parity/Overflow (PlY) indicates that the result of a logical operation has even parity or that overflow has occurred for arithmetic operations. 2-2 Dec:iJllal-Adjust (D) is used in BCD arithmetic to indicate whether an addition or subtraction was last executed. Syste.tNonial Mode (SIN) controls the operating mode. While this bit is 1, the CPU is operating in system mode; while 0, the CPU is operating in normal mode. Extended Processor Architecture Mode (EPA) controls the Extended Processing Architecture facility. While this bit is 1, the CPU processes extended processing instructions as if the system contains Extended Processing Units, which serve as co-processors to assist the CPU in executing extended processor instructions. While this bit is 0, the CPU traps extended processor instructions. Vectored Interrupt Enable (VIE) and Nonvectored Interrupt Enable (NVIE) determine when the CPU recognizes vectored and nonvectored interrupts. Vectored interrupts are enabled when VIE is 1; nonvectored interrupts are enabled when NVIE is 1. These bits can be manipulated using the Enable Interrupt and Disable Interrupt instructions. Trace Pending (TP) and Trace Enable (T) are used for instruction tracing. While T is 1, instruction tracing is enabled; while 0, instruction 2071·001 Data Formata and Reqisters tracing is diaabled. TP is used with T to ensure that exactly one trace trap occurs after each instruction executed when tracing is enabled (see Section 7.4.4.10). can also be loaded using the Interrupt Return and Load Program Status instructions. The FCW can be accessed using the Load Control instruction. 2.5 During exception processing, the Program Status registers are saved on the system stack and new values for the registers are loaded from the Program Status Area. The Program Status registers 15 8 IElCIs/NIEPAIVIE~VI~ usl TPI Tic I z I SPECIIIL-PURPOSE CONTROl REGISTERS The CPU includes nine special-purpose longword registers (Figure 2-4). These are accessed using the Load Control Long instruction. 7 0 s IPNI D I H IIV 1 0 I I~ INTEGER OVERFLOW ENABLE (IV) HALF CARRY (H) DECIMAL-ADJUST (D) PARITY/OVERFLOW (PlY) SIGN(S) ZERO(Z) CARRY(C) - TRACE (T) '--- TRACE PENDING (TP) LlNEARISEGMENTED MODE (US) NONVECTORED INTERRUPT ENAB LE (NVIE) VECTORED INTERRUPT ENABLE (VIE) EXTENDED PROCESSOR ARCHITE CTURE (EPA) SYSTEM/NORMAL MODE (s/N) EXTENDED/COMPACT MODE (ElC) FLAG AND CONTROL WORD (FCW) 31 PROGRAM COUNTER (PC) Figure 2-3. Progr_ Status Registers HARDWARE INTERFACE CONTROL RIIGISTER (HICR) Figure 2-4. 2.5.1 Special-Purpoae Cootrol Registers Progr_ Status Area Pointer (PSAP) The Program Stet us Area Pointer contains the physical, base address of the Program Status Area. The Program Status Area contains the Program Status information (PC and FCW) fetched during exception processing. Refer to Chapter 7 for more information about the Program Status Area. The longword PSAP can be accessed using the Load Control Long instruction; both the low-order word and high-order word of the PSAP can be accessed using the Load Control instruction. 207Hl02,003 2.5.2 Nor.al Stack Pointer (NSP) The Normal Stack Pointer contains the· Stack Pointer used in normal mode. System mode programs csn access normal mode register RR14 using the Load Control Long instruction and normal mode registers R14 and R15 using the Load Control instruction. 2-~ Data Formats and 2.5.' R~qisters Tr.-Jalation Tabla Descriptor Registera The translation table descriptor ragistera--System Inatruction Translation Table Deacriptor (SITTD), System Data Translation Table Descriptor (SDTTD), Normal Inatruction Translation Table Descriptor (NITTD), and Normal Data Translation Table Descriptor (NDTTD)--contain the physical addresses of the translation tables used by the memory management mechanism. These registers also contain other fields that control the memory management mechanism (see Section 4.3.2.1). 2.5." Overflow Stack Pointer (OSP) The Overflow Stack Pointer (OSP) contains the physical address of the Stack Overflow Area. The Stack Overflow Area is used when an address translation error occurs during exception processing (see Section 7.4.5). 2.5.5 Hardware Interface Control Register (HICH) The Hardware Interface Control register contains fielda controlling the external interface of the CPU, including bus speed, data path width, and automatic wait states. (See Section 8.6). 2.5.6 translation mechanism is enabled for references in the corresponding apace; while either bit is 0, the translatIon mechanism is disabled for references in the corresponding spsce. Cache Replac_t (CH) controls the cache replacement algorithm. While this bit is 1, the cache replacement algorithm is enabled; while 0, the cache replacement algorithm is disabled. Most applications leave the replacement algorithm enabled. Some applications, however, selectively enable and disable the replacement algorithm to lock specific locations into the cache. Refer to Appendix C for more information. Cache Instruction (CI) .-Jd ClIChe Data (m) control the cachs mechanism for instruction and data references. While either of these bits is 1, the cache mechanism is enabled for the corresponding references; while either bit is 0, the cache mechanism is disabled for the corresponding references. Refer to Appendix C for more information. Exception linear/5egEnted whether linear or segmented sentation is used during While this bit is 1, linear segmented mode is used (see IIIOde (Xl/S) controls mode of address repreexception processing. mode is used; while 0, Section 7.4.5.) Syat.. Configuration Control longNDrd (SCCl) 2.6 RESE:RVm CllfJID. BITS Ths System Configuration Control Longword contains control bits for the addresa translation mechanism, cache mechanism, and exception processing. These bits are as follows: Some of the bits in the FeW and control register formats shown in Figures 2-3 and 2-4 are marked "0". These bits are reserved for future definition. When the control register is read, these bits return O. When ths control register is written, these bits must be O. Although the CPU does not check thst the reserved bits written to the control register are 0, functions may be defined for these bits in the future. Syeta. Addreaa Tr_lation (SX) .-Jd Nol'll8l. lIddreaa Tr_lation (NX) control the address trsnslstion mechanism for system space snd normsl space references. While either of these bits is 1, the 2-4 Chapter 3. Address Bepresentation and Modes of Operation 3.1 INTRODUCTION The CPU has three modes of address represent ation--compact, segmented and linear--and two modes of operation--normal and system. 3.2 IIOORESS REPRESENTATION As shown in Figure 3-1, the CPU has three modes of address representation: compact, segmented, and linear. The mode is selected by two control bits in the Flag and Control Word register (see Table 3-1). The Extended/Compact (E!C) bit selects whether compact addresses ( 16 bits) or extended addresses (32 bits) are used. For extended addresses, the Linear/Segmented (L/S) bit selects whether linear or segmented addresses are used. These modes affect only the representation for logical memory addresses, not logical I/O addresses. The Load Address instruction can be used to manipulate addresses in any mode of representation. The address calculation performed by this instruction is the same as the addressing used to access an operand. In compact mode, addresses are 16 bits. Address calculations using compact addresses involve all 16 bits. Compact mode is more efficient and consumes less program space for applications requiring less than 64K bytes of program and less than 64K bytes of data. This efficiency is due to shorter instructions in compact mode, and the fact that addresses in the register file use word rather than longword registers. Applications requiring more than 64K bytes of either program or data should use segmented or linear mode. Table 3-1. Addr8118 Rep~atioo Control Bits in FCW Elf lIS o o o 1 o Compact Reserved Segmented Linear Segmented mode supports two segment sizes--64K bytes and 16M bytes. The most-significant bit of the 32-bit address selects either a 15-bit segment number with a 16-bit segment offset (MSB = 0) or a 7-bit segment number with 24-bit segment offsat (MSB = 1). Thus, the address space includes 32,768 of the smaller segments and 128 of the larger segments. In segmented mode, address calculations involve only the segment offset; the segment number is unaffected. Many applications benefit from the logical structure of segmentation by allocating individual objects,'such as program modules, stacks, or large data structures, to separate segments. In linear mode, addresses are 32 bits. Address calculations using linear addresses involve all 32 bits. In linear mode, the address space of 4G bytes is uniform and unstructured. Some applications benefit from the flexibility of linear addressing by allocating objects to arbitrary positions in the address space. In compact mode, addresses stored in the register file use word registers; in segmented or linear mode, addresses use longword registers. When an address is specified in a register for Indirect, Base Address, and Base Index addressing modes, or for the destination of a Load Address instruction, the address register specified by the instruction is a word register in compact mode and a long word register in segmented or linear mode. Similarly, references to the Program Counter in compact mode use only the low-order word of the PC, while in segmented or linear mode, the entire long word PC is used. In compact mode, tha Stack Pointer is R15 and the Frame Pointer is R14. In segmented or linear mode the Stack Pointer is RR14 and the Frame Pointer is RR12. Some addressing modes generally available in segmented or linear mode are restricted in compact mode. Refer to Chapter 5 for more information about the effect of the address representation mode on addressing modes and address calculation. In compact mode, addresses encoded in instructions occupy one word; in segmented or linear mode, addresses in instructions occupy one or two 3-1 Address Representation and Modes of Operation 15 (A) COMPACT ADDRESSES 16 15 , SEGMENT OFFSET (I) 84K BYTE SEGMENT SIZE 31 24 23 30 , OFFSET SEGMENT (II) IBM BYTE SEGMENT SIZE (B) SEGMENTED ADDRESSES 31 (C) LINEAR ADDRESSES rigure 3-1. Address Representatioos words. Refer to Chapter 6 for more information about the effect of the segmentation mode on instruction representation and execution. 3.3 NORIW. AN) SYSTEM MmES The CPU has two modes of operation, normal and system, selected by the SIN bit in the Flag and Control Word register. System mode (S/N = 1) is more privileged than normal mode (S/N = 0). These modes affect CPU operation in three areas: privileged instructions, Stack Pointers, and memory management. All inatructions can be executed in system mode. Some inetructions, such as those performing I/O operations or accessing control registers, can only be executed in system mode, and are called privileged instructions. When a program operating in normal mode attempts to execute a privileged instruction, an exception occurs. The privileged instructions are identified in the instruction set description in Chapter 6. The Stack Pointer registers are distinct for normal and system modes. In normal mode, a reference to the Stack Pointer register accesses the Normal Stack Pointer. In system moda, a reference to the Stack Pointer register references the System Stack Pointer. In compact system mode, referencea to R14 use normal mode R14. Table 3-2 shows the registers sccessed in the different modes. Table 3-2. Registers Referenced by Access to R14 and R15 Register Referenced by Instructioo R14 R15 RR14 3-2 Systllll Mode Segmented or Linear System System System System R14 R15 R14 R15 NorllSl Mode Compact Normal System Normal System R14 R15 R14 R15 Segmented or Linear Normal Normal Normal Normal R14 R15 R14 R15 Compsct Normal Normal Normal Normal R14 R15 R14 R15 2071-004 Address Representation and In normal mode, the System Stack Pointer is not accessible. In system mode, the Normal Stack Pointer is accessed using the Load Control or Load Control Long instruction. Memory address spaces are distinct for normal and system modes. Different translation tables are used for translating normal and system mode addresses, although the tables can optionally be merged. The access protection performed by the memory management mechanism allows access by system programs to memory locations that are prohibited from access by normal mode programs. The CPU can change its operating mode whenever the feW is loaded by a Load Control instruction, Load ~Modes of Operation Program Status instruction, Interrupt Return instruction, or during exception processing. The distinction between normal and system modes allows the construction of a protected operating system. The operating system kernel runs in system mode to manage the computer system resources--CPU, memory, and peripherals. Application programs run in normal mode, where they are prohibited from interfering with other application programs or the operating system. When application programs require a service that only the operating system can perform, the System Call instruction is executed. System Call causes a trap to the operating system, passing an identifier for the particular service requested. 3-3 Chapter 4. Address Spaces and Memory Management 4.1 INTRODUCTION The CPU refers to memory and peripherals to fetch instructions, fetch and store operands, process exceptions, and perform memory management. The CPU uses addresses to specify the location for memory and peripheral references. Logical addresses, which are the addresses manipulated by programs, are distinguished from physical addresses, which are the addresses the CPU presents to memory and peripherals. This chapter describes the types of logical addresses and the procedure for mapping logical to physical addresses. Chapter B describes the way the CPU refers to memory and peripherals using physical addresses. 4.2 ADDR£SS SPACES The CPU supports several distinct spaces for logical and physical addresses (Figure 4-1). Logical addresses are in one of four memory address spaces or in I/O address space. Physical addresses are in memory or I/O address space. 4.2.1 logical Memory Address Spaces Logical memory addresses are in system instruction space, system data space, normal instruction space, or normal data space. When the CPU is in system mode, one of the two system address spaces is used for a memory reference. In normal mode, one of the two normal address spaces is used. Instruction address space is used for instruction fetches, immediate mode operand fetches, and fetches or stores of operands specified using Relative Address or Relative Index addressing modes. Data address space is used for references to fetch or store operands in memory, other than those specified using Immediate, Relative, or Relative Index addressing modes. Refer to Chapter 5 for a description of addressing modes. MEMORY SYSTEM INSTRUCTION SYSTEM DATA NORMAL INSTRUCTION NORMAL DATA 1/0 LOGICAL ADDRESS SPACE TRANSLATION. PHYSICAL ADDRESS SPACE r igure 4-1. Address Spaces 8225-003 4-1 Address Spaces and Memory Management Logical addresses in the memory spaces are 32 bits. Each address specifies the location of a byte in memory. In compact mode, only the loworder 16 bits of the logical address can be directly manipulated; the high-order 16 bits of the logical address are the high-order 16 bits of the PC (Figure 4-2). In segmented mode, the lower hal f of each address space contains 32,768 small segments of maximum size 64K bytes, and the upper half contains 128 large segments of maximum size 16M bytes (Figure 4-3). Each segment can be viewed as a contiguous string of bytes at consecutive offsets. In linear mode, the entire address space is a contiguous str ing of bytes at consecutive addresses. Words and long words in memory are addressed using the lowest address of any byte in the word or longword. This is the left-most, highest-order, most-significant byte of the word or longword (Figure 4-4). Word and long word operands located in memory can be at even or odd addresses. Performance is improved when word operands are located at even addresses and longword operands are located at addresses that are a multiple of four. Instruction words must be located at even addresses. When an attempt is made to execute an instruction at an odd address, an odd PC trap occurs. PROGRAM COUNTER 31 COMPACT ADDRESS 16 15 15 I I ~ I / 16 15 I LOGICAL ADDRESS figure 11-2. logical MeIIory Addresses in C. .pact Mode SMALL SEGMENT 0 31 30 10 I 64K BYTES 16 15 SEGMENT SMALL SEGMENT 1 64K BYTES SMALL SEGMENT 32767 64K BYTES OFFSET LARGE SEGMENT 0 31 30 111 I I 16M BYTES 2423 SEGMENT LARGE SEGMENT 1 16M BYTES LARGE SEGMENT 127 16M BYTES OFFSET figure 11-3. Me.»ry Address Space in 5eg11ented Mode 4-2 8225-004,005 Address Spaces and Memory Management a 7 .........I "!, L.I....I.....L..~~ . I • BYTE ADDR."n 15 I WORD I I I I I I I ADDRElln I I I I I ADDRElln+1 0 31 I I I I I I I ADDR."n I I I I I I I I I I I I ADDRU'n+1 ADDRU'n+1 I I I I I I ADDR."n+a I LONGWORD figure ___ • Bytes, Worde, .-xl LlJI1!IImrda in tte.ory _.2.2 Logical I/O Addrees Space space. The process of translating logical memory addresses is described in the following section. Al though logical I/O addresses are 32 bits, only the 16 low-order bits of a logical I/O address can be manipulated; the CPU always forces the 16 highorder bits to O. Unlike logical memory address spaces, logical I/O address space is not viewed as a string of bytes at consecutive addresses. Rather, the address is simply used to locate a byte, word, or longword peripheral port. The byte port located at address n does not have to be contiguous with the byte port located at address n+1, nor must it be the more significant byte of the word port located at address n. Logical I/O addresses can be either even or odd. Physical addresses are in physical memory space or physical I/O space. The two physical address spaces are distinguished by different status and timing on the external interface (see Chapter 8). Also, copies of physical memory locations can be stored in the cache, but copies of physical I/o locations cannot. Physical addresses in both (Note that the external spaces are 32 bits. interface provides information distinguishing between memory references for instructions and data, and between system and normal modes. This information should not be used, however, to separate physical memory addresses into different spaces when the cache mechanism is enabled, because the cache does not distinguish separate physical memory address spaces.) The CPU featurea a memory management mechanism that translates logical memory addresses to physical addresses and protecta for execute, read, and write accesses. The memory msnagement mechanism serves four functions: relocation, protection, sharing, and virtual memory. Relocation maps a logical address to a potentially different physicsl address. This allows multiple processes to use the sarne logical addresses for distinct physical memory locations. Paged address translation divides the logical address spaces into fixed-size units, called pages, and the physical address spaces into fixed-size units, called frames. A logical page can be mapped to an arbitrary phyaical frame. Because the pages and frames are of fixed and equal size, memory allocation is simplified. Protection limits the type of access a process can make to a logical address. A segment or individual page can be protected against instruction fetches, operand fetches, or operand stores in either normal or system mode. The protection featurea of the CPU provide security for aensitive data or programs, auch aa proprietary code modules, that should not be copied or modified. The CPU also allows protected access by application programs to selected peripherals (memorymapped I/O). Sharing of phyaical memory by multiple processes The CPU maps logic a 1 addresses to physical addresses. Addresses in logical I/O space map to identical addresses in physical I/O space. Addresses in logical memory spaces map to addresses in physical memory space or physical I/O 8225-006 is supported by relocation and protection. Logical addresses for several processes can map to the same physical address. The access protection attributes for each process may differ. 4-3 Address Spaces and Memory ManaQement Virtual _Dry means that the range of logical addresses used by a process can be larger than the allocated physical memory. When a reference is made to a logical address that is not mapped to a physical address, an exception occurs. 'After the missing page is transferred from secondary storage to main memory, the process can simply be restarted. The CPU provides information about pages that have been referred to or modified, thus helping the operating system allocate memory efficiently. The memory management mechanism is selectively controlled for references in system or normal spaces by two bits in the System Configuration Control Longword register (SX and NX). When the memory management mechanism is disabled, the physical address used for the reference, which is in physical memory space, is identical to the logical address and all accesses are permitted. The following sections describe address translation and access protection when the memory management mechanism is enabled. •• 3.1 (TLB) that stores the translation information for the 16 most recently used pages in a fully associative memory. For each memory reference, the logical page address is compared wi th the address tags in the TLB (Figure 4-5). If a matching address tag is found, the corresponding frame address is read from the TLB and used to complete the translation. When information needed to translate the page is missing from the TLB, the CPU automatically refers to tables in memory to perform the translation. The CPU then loads the missing translation information into the TLB, replacing the TLB entry of the least recently referenced page. Address Translation The page size used by the CPU .is 1K bytes. The translation process involves mapping a logical page, which is specified by the 22 most-significant bits of the logical address, to a physical frame, which is specified by the 22 most-significant bits of the physical address. The 10 leastsignificant address bits, which specify the byte within a page or frame, are identical for the logical and physical address. A logical page can generally map to an arbitrary physical frame, except for a restriction that applies only when physical memory modules with different data path widths are used and operands can be located across consecutive logical pages. Refer to section 8.6 for more information. Thus, the TLB acts as a buffer for the most recently used page descriptors. This buffer is automatically maintained by on-chip hardware.* The CPU contains a Translation Lookaside Buffer 31 LOGICAL ADDRESS 10 9 PAGE ADDRESS I \ PAGE OFFSET I \ """ >TRANSL ATION LOOKA SIDE BUFFER LOGICAL PAGE ADDRESS TAGS 31 PHYSICA LADDRESS figure "'5. I ~,l. FRAME ADDRESS 10 9 ... 7' 0 \FRAMEOFFSETI Address Translatim Using the TLB The address tags in the TLB are extended from 22 to 24 bits. The extra bits identify the memory address space for the page. Thus, references to pages with the same page number but in different address spaces are translated differently. The frame addresses in the TLBs are also augmented with the access protection code and the Non-Cacheable and Modification bits from the page table entry. 4-4 PHYSICAL FRAME ADDRESSES *The number of entries, degree of associativity, and replacement algorithm described for the TLB design in this section are speci fic to the first implementation of the Z8D,DDD CPU architecture and may differ in future products implementing the same architecture. Differences in the characteristics can impact systems performance, but have no effect on the function of software or the external interface. 2071-005 Address Spaces and Memory Management 4.'.2 Loading the 11.B level-1 field (l1), sn B-bit level-2 field (l2), a 6-bit page number field (P), and a 1O-bit page offset field (P-OFFSET). When loading the TlB, the l1, l2, and P fields are used as indexes into the different translation table levels. (Figure To load the TlB with the information needed to translate a page address, the CPU automatically fetches entries from up to three levels of tables in physical memory. Figure 4-6 shows the partition of a logical address into an B-bit 31 24 23 I, 10 8 16 15 ,I, Ll 4-7). ,I, I, L2 P·OFFSET , ! , Figure 4-6. Logical Address Partition for Address Tr_Iation -e-- -$TABLE DESCRIPTOR REGISTERS I 31 LOGICAL A DDRESS l I L1 PAGE TABLE LEVEL 2 TABLE LEVEL 1 TABLE 24 23 I 16 151109 LO pip-OFFSET 0 31 I I 109 FRAME ADDRESS I 0 ATTRIBUTES TABLE I PAGE ENTRY l TRANSLATION LOOKASIDE BUPPER LOGICAL PAGE ADDRESS TAGS PHYSICAL FRAME ADDRESSES Figure 4-7. Auta.atic Loading of the 11.B Using Tables in tte.ory When the address space is not fully used, the first-level and second-level translation tables can be selectively skipped to reduce the storage for tables and the number of memory references required to autoload the TlB. The level-1 tables can be akipped when an address space of 16M bytes is sufficient. The level-2 tables can be skipped for compatibility with ZBOOO segmented addresses. Both level-1 and level-2 tables can be skipped for compact addresses. When a level of tables is skipped, the corresponding field of the logical address is ignored. 8225-007, 2071-006 When the address spaces are not separated, it is also possible to reduce storage for tables by loading identical values into the translation table descriptor registers. The same tables would then be used to translate addresses in different spaces. The following sections describe the formats of the translation table descriptors and entries and explain the translation algorithm. 4-5 Address Spaces and Memory Management 4.J.2.1 Tr_lation Table Descriptor Registers. There is a translation table descriptor register for each of the four logical memory address spaces: System Instruction Translation Table Descriptor (SITTD), System Data Translation Table Descriptor (SDTTD), Normal Instruction Translation Table Descriptor (NITTD), and Normal Data Translation Table Descriptor (NDTTD). The translation table descriptor registers are accessed using the Load Control Long instruction. Figure 4-8 shows the format of a translation table descriptor. 31 30 II I I ! I I I I I I TABLE FORMAT (TF) TABLE SIZE (SIZ) PROTECTION (PROT) '---------------------- ~:~~ tJ~TE~ TABLE GROWTH DIRECTION (G) Table Format (TF) 00 01 10 11 THREE LEVELS SKIP LEVEL 2 TABLES SKIP LEVEL 1 TABLES SKIP LEVEL 1 AND LEVEL 2 TABLES VALID TABLE ENTRIES 0= 1 0=0 TABLE SIZE (SIZ) o TO 63 o TO 127 o TO 191 o TO 255 00 01 10 11 Figure 4-8. The Table For_t field (TF) specifies the ture of the translation tables. The table can be a full three levels, two levels with level-1 tables or level-2 tables skipped, level with both level-1 and level-2 skipped. o TO 255 64 TO 255 128 TO 255 192 TO 255 Translation Table Descriptor strucformat either or one tables Next level Table Base (NlTB) specifies 23 bita of the base address in physical memory of the next level table. The full 32-bit address is formed by extending NL TB with one high-order 0 and eight low-order Os (Figure 4-9). Growth Direction (G) specifies the growth direction of the next level table from low address to high address (G=O) or from high address to low address (G=1). The reverse growth direction (G=1) is used for downward-growing stacks. When the next level table is a page table, then the G and SIZ fields must be 0 because a page table always has 64 entries. Protection (PROT) specifies the access protection code (see Table 4-1). 4.3.2.2 level-l Table Entries. The L1 field of the logical address selects one of up to 256 entries in the level-1 table. Figure 4-10 shows the format of a level-1 table entry. Valid (V) determines the validity of the G, NLTB, and SIZ fields. If the V bit is 1, the fields are valid; otherwise, the fields are invalid. The PROT field is always valid. Growth The Table Size field (SIl), in conjunction with the Growth Direction fie ld, specifies the valid portion of the next level table in increments of 256 bytes. When only part of a table contains valid entries, storage for many invalid entries can be eliminated through use of the SIZ field. 4-6 direction (G), Next Level Table Base Table Size (SIl), and Protection (PROT) have the same meaning as in the translation table descriptor registers. (Nlm) , Bit 0 of the level-1 table entry is reserved and must be O. This bit is ignored by the translation mechanism. 2071.(J()7 Address Spaces and Memory Management 31 30 II 8 I NLTB ! ! T 31 30 8 ,I ! 7 I~ , , Figure __9. 7 0 0 0 0 0 , I TRANSLATION TABLE BASE ADDRESS • 0 87 ! 0 Translation Table Base Address 3130 II 0 !.!'!!" TRANSLATION TABLE DESCRIPTOR OR ENTRY I I ! I /01 I -r '-- VALID (V) L - TABLE SIZE (SIZ) I L-_ _ _ _ _ PROTECTION (PROT) '--------------------- ~m ~~~TE~ L ._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ TABLE GROWTH DIRECTION (G) LEVEL 1 TABLE ENTRY 31 30 8 ! 7 I) I ! ' - - VALID (V) 1-_ _ _ _ _ _ PROTECTION (PROT) ' - - - - - - - - - - - - - - - - - - - - - NEXT LEVEL TABLE BASE (NLTB) LEVEL 2 TABLE ENTRY 31 30 10 9 ! 8 7 , ! I II" I I I I L':: ::.~:~~ ,. ~ MODIFICATION (M) NONCACHEABLE (NC) PROTECTION (PROT) ' - - - - - - - - - - UNUSED ' - - - - - - - - - - - - - - - - - - - - - - FRAME ADDRESS (FA) L---------------------------------IIO PAGE TABLE ENTRY figure __10. Table £ntry forllllts 4.3.2.3 level-2 Table £ntries. The L2 field of the logical address selects one of up to 256 entries in the level-2 table. Figure 4-10 shows the format of a level-2 segment table entry. 4.3.2.4 Page Table Entries. The P field of the logical address selects one of 64 entries in the page table. Figure 4-10 shows the format of a page table entry. Valid (V) determines the validity of the NUB field. If the V bit is 1, the field is valid; otherwise the field is invalid. The PROT field is always valid. Valid (V) determines the validity of the I/O, FA, Ne, M, and R fields. If the V bit is 1, the fields are valid; otherwise, the fields are invalid. The PROT field is always valid. Next level Table Base (NlTB) and Protection (PROT) have the same meaning as in the translation table descriptor registers. I/O determines whether the address of the frame is in physical memory space or physica 1 I/O space. When I/O is 0, the frame is in memory space; when 1, the frame is in I/O space. Bits 0, 2, 3 and 31 of the level-2 table entry are reserved and must be O. 2071-008 4-7 Address Spaces and~Memory Management Fra.e Address (FA) specifies the physical address of the frame corresponding to the logical page. The address is formed by appending ten low-order as to the I/O bit and the FA field. Table 4-1. Protection Field Encoding Non-Cacheable (NC) is used to maintain the integrity of the cache. If the NC bit is 1, copies of memory locations in this frame cannot be stored in the cache; otherwise, copies of memory locations in this page can be stored in the cache. For example, the NC bit can be set for a page shared by multiple processes with write access in a system containing multip Ie CPUs. The NC bit has meaning only when the frame is in physical memory; I/O locations are never stored in the cache. See Appendix C for more information. Modification (M) and Reference (R) bits are used by software to implement virtual memory replacement algorithms. The CPU sets the R bit of the page table entry when the page is first referred to, either for fetching or storing information. The CPU sets the M bit of the page table entry when an operand is first stored to the page. The CPU refers to translation tables in memory to set the M bit on the first store to the page, even if the translation information for the page is present in the TLB because of a previous fetch from the page. The CPU uses inter locked memory references (see Section B.8.2.3) to set the Rand M bits in the page table entry, allowing page tables to be shared between tightly-coupled multiprocessors. NA R W E Next Encoding Systt. Noral 0000 0001 0010 0011 NA RE RE RE NA NA E RE 0100 0101 0110 0111 E E R R NA E NA R 1000 1001 1010 1011 Next RW RW RW Next NA R RW 1100 1101 1110 1111 RWE RWE RWE RWE NA E RE RWE no access is permitted read access is permitted write access is permitted execute access is permitted - Use the protection field of the next level translation table; for page table entries, a PROT field of 1000 indicates no access is permitted. Protection (PROT) specifies the access protection code described below. Bits 8 and 9 of the page table entry are available for use by software; the bits are ignored by the translation mechanism. Dur ing the translation process, a PROT field is encountered at each level. The first PROT field with value other than 1000 is selected; the other PROT fields are ignored. If all PROT fields up to and including the page table entry are 1000, no access is permitted. 4.'.' Access Protection The memory management mechanism enforces access protection for segments and pages using information encoded in the PROT field of translation table descriptors and table entries. The CPU checks three types of access operations: execute, read and write. Execute access is required for instruction fetches, including Immediate mode operand fetches. Read access is required for operand fetches other than Immediate mode. Write access is required for operand stores. The CPU allows different access rights for normal and Table 4-1 shows the system mode programs. interpretation for the PROT code. 4-8 4.3.4 Address Translation Algorithl The CPU executes the following ~lgorithm to translate a logical address using the tables in memory when loading a missing entry into the TL8 or setting the M bit on the first store to a page. Step 1. Translation Table Descriptor Processing. One of the four translation table descriptor registers is selected according to the logical address space. Address Spaces and Memory Manaqement If the PROT field of the segment table descriptor is 1000, the intended access operation is not checked. Otherwise, if the intended access operation is not permitted by the PROT field, an Address Translation trap (access protection violation) occurs. The G, NLTB, and SIZ fields are passed to the next step of the address translation algorithm. If the TF field is 00 or 01, then go to Step 2; if the TF field is 10, then go to Step 3; otherwise, go to Step 4. Step 2. level-1 Table Entry Processing. The L1 field of the logical address is checked with the G and SIZ fields from Step 1. If G is 0 and L1 is greater then 64 x (SIZ+1) -1 or i f G is 1 and L1 is less then 64 x SIZ, an Address Translation trap (invalid table entry) occurs. The address of the level-1 table is formed by extending the NUB fie Id from Step 1 with one high-order 0 and eight low-order Os. The physical address of the level-1 table entry is calculated by adding 4 x L1 to the address of the level-1 table. The addition is a 32-bit unsigned arithmetic operation, ignoring the carry from the mostsignificant bit position. The selected level-1 table entry is fetched from memory. I f the intended access operation was checked at Step 1 or the PROT field of the table entry is 1000, the intended access operation is not checked at this step. Otherwise, if the intended access operation is not permitted by the PROT field, an Address Translation trap (access protection violation) occurs. If the V bit of the table entry is 0, an Address The address of the level-2 table is formed by extending the NL TB fie ld from the previous step with one high-order 0 and eight low-order Os. The physical address of the level-2 table entry is calculated by adding 4 x L2 to the address of the level-2 table. The addition is a 32-bit unsigned arithmetic operation, ignoring the carry from the most-significant bit position. The selected level-2 table entry is fetched from memory. If the intended access operation was checked at a previous step or the PROT field of the table entry is 1000, the intended access operation is not checked. Otherwise, if the intended access operation is not permitted by the PROT field, an Address Translation trap (access protection violation) occurs. the V bit of the table entry is 0, an Address Translation trap (invalid table entry) occurs. If The NL TB field of the table entry is passed to Step 4. The Page Table Entry Processing. address of the page table is formed by extending the NUB field from the previous step with one high-order 0 and eight low-order Os. The physical address of the page table entry is calculated by adding 4 x P to the address of the page table. The addition is a 32-bit unsigned arithmetic operation, ignoring the carry from the most-significant bit position. Step II. The selected page table entry is fetched from memory. If the intended access operation was not checked at a previous step, and the intended access operation is not permitted by the PROT field, an Address Translation trap (access protection violation) occurs. Translation trap (invalid table entry) occurs. If the V bit of the table entry is 0, an Address The G, NUB and SIZ fields of the table entry are passed to the ne.xt step of the address translation process. If the TF field of the segment table descriptor is 00, then go to Step 3; otherwise go to Step 4. The L2 field level-2 Table Processing. of the logical address is checked with the G and SIZ field from the previous step. If G is 0 and L2 is greater than 64 x (SIZ+1}-1 or if G is 1 and L2 is less than 64 x SIZ, an Address Translation trap (invalid table entry) occurs. Step 3. Translation trap (invalid table entry) occurs. If the R bit of the table entry is 0, the CPU sets R to 1. If the M bit is 0 and the access operation is write, the CPU sets M to 1. If either the R or M bit changes, the CPU writes the low-order byte of the table entry back to memory; otherwise, the table entry is unchanged. Finally, the I/O, FA, NC, M, and selected PROT fields are loaded into the TLB, along with the associated logical page address. 4-9 Address Spaces and Memory Management address space that caused the trap. When both types of address translation exception are detected, an access protection violation is indicated. 4.'.5 Address Translation Exceptions The CPU detects two types of address translation exception conditions: access protection violation and invalid table entry. When either of the exception conditions is detected, the CPU suspends the instruction being executed and processes an Address Translation trap. During trap processing the CPU saves on the system stack the PC, the FCW, an identifier word, and the logical address that caused the trap. The saved PC value is the address of the first word of the instruction that caused the trap. The identifier word (Figure 4-11) indicates the type of exception and the 15 When an Address Translation trap occurs, the CPU saves the state of registers and memory so the instruction can simply be restarted. The instruction can be successfully completed by eliminating the exception condition, popping the violation address from the system stack, and executing the Interrupt Return instruction. Refer to Chapter 7 for more information about exception processing. 3 2 0 L 1 0 ,0,0,0,0,0,0,0,0,0,0,0,01 I I 00 01 10 11 NORMAL DATA SPACE NORMAL INSTRUCTION SPACE SYSTEM DATA SPACE SYSTEM INSTRUCTION SPACE o INVALID TABLE ENTRY ACCESS PROTECTION VIOLATION 1 Figure 4-11. Address Translation Trap Identifier Word 4.'.6 ~ry Manageaent Instructions The CPU provides several privileged instructions directly concerned with memory management. The Load Normal instructions permit system mode programs to refer to normal address spaces. These instructions check access rights using system mode privilege. The Load Physical address instructions translate a logical address in any of the memory address spaces and load the corresponding physical address into a register. The CPU sets the flag bits in the FCW to indicate the access rights and whether the translation is valid. Although the CPU does not refer to the location of the translated address, the R bit in the page table entry is set by this instruction. 4-10 Three types of instructions allow outdated information to be eliminated from the TLB when the memory map is changed by altering one of the translation table descriptor registers or translation table entries. When a page table entry is altered (other than setting the R, M, or V bits), then one of the Purge TLB Entry instructions can be used to remove the translation information for the page from the TlB. The Purge TLB Normal instruction removes all normal space entries from the TLB. This instruction is used when the normal space memory map is changed, but the system space memory map remains the same. For example, the operating system executes the Purge TLB Normal instruction when a process switch occurs as long as system and normal address spaces are separate. The Purge TLB instruction removes all entries from the TLB. 8225-009 Chapter 5. Addressing Modes and Address Calculations 5.1 INTRODUCTION The CPU locates operands (the data manipulated by instructions) in registers, memory, peripheral ports, or in the instruction. Figure 5-1 shows the nine addressing modes used to specify the location of operands. Although most operations can use any of the addressing modes, certain operations, such as Load Control, allow only a restricted set of addressing modes. This chapter describes the addressing modes and the way operand addresses are calculated. Examples are given for compact, segmented, and linear modes of address representation. Chapter 6 prov ides details about the encoding of addressing modes and the addressing modes allowed for each operation. 5.2 ADDR£SS CALCULATIONS When an operand is in a logica 1 memory address space, the "effective address" of the operand is calculated using a base address, an optional index value, and an optional displacement. The base address is located in a general-purpose register, the Program Counter (PC), or the instruction. The index value is located in a word or longword register. The displacement is located in the instruction. The following sections describe the calculations of effective addresses in compact, segmented and linear modes. When an operand is in logical I/O space, no address calculation is necessary. The 16-bit address of the I/O port is located in a word register or in the instruction. 5.2.1 CoIIpact Address Calculations In compact mode, addresses are 16 bits. The base address for the effective address calculation is located in either a word register other than RO, the low-order word of the PC, or a word of the instruction. When an index value is used, it is located in a word register other than RD. The displacement is encoded in 16 or fewer bits of the instruction. When the displacement is encoded in fewer than 16 bits, it is extended to 16 bits for effective address calculation. Displacements are generally extended by replicating the sign (mostsignificant) bit in the high-order bit positions, but for the Decrement and Jump if Not Zero (DJNl) instruction, the displacement is extended with Os. In compact mode, it is not possible to specify both an index value and a displacement for effective address calculation. The effective address is generally cslculated by adding the base address to the optional index value or displacement, but for the Call Relative (CALR) and DJNZ instructions, the displacement is subtracted from the base address. Addresses are calculated using 16-bit arithmetic. Carry and overflow from the most-significant bit position are ignored. Thus, addresses wraparound with address 0 appearing to follow address 65,535. The following example shows an effective address calculation with base address 123416 and index value or displacement FEDC16. The effective address is 111016 + base address 1234 index value or displacement effective address FEDC 1110 5.2.2 Seg.ented Address Calculations In segmented mode, addresses are 32 bits. The base address for the effective address calculation is located in either a longword register other than RRO, in the PC, or in one or two words of the instruction. (A concise representation of the 32-bit base address using a single instruction word is available for some addresses. Refer to Section 6.4.3.2 for more information.) When an index value is used, it is located in a word register other than RO or a longword register other than RRO. An index value located in a word register is extended to 32 bits for effective address calculation by replicating the sign (most-significant) bit in the high-order bit positions. The displacement in an instruction is encoded in 32 or fewer bits. When the displacement is encoded in fewer than 32 bits, it is extended to 32 bits for effective address calculation. Displacements are 5-1 Addressing Modes and Address Calculations Addressing Mode Operand Addressing In the Instruction R Register REGISTER NUMBER Operand Value In Memory In a Register r-.I The contents of the register OPERAND 1M Immediate In the instruction OPERAND *IR Indirect Register REGISTER NUMBER Direct Address ADDRESS r-.[I=A~D~D~R~ES~S=}----__' ·[I~O~P~E~RA~N~DJ DA .I OPERAND *X Index t~~j--=='NDE=X:::::...h~0---Ir-----' • OPERAND *BA Base Address I BASE ADDRESS h t~~~~=~~=====--:'0--1 OPERAND *BX REGISTER NUMBER Base Index REGISTER NUMBER OPERAND DISPLACEMENT RA Relative Address PC ADDRESS h [~D~IS~PL~A~C~EM~E~N~TJ~~=====-. .~~I OPERAND *RX The contents of the location whose address is in the register The contents of the location whose address is in the instruction The contents of the location whose address is the address in the instruction, plus the contents of the Index Register The contents of the location whose address is the contents of the Base register, plus the displacement in the instruction The contents of the location whose address is the contents of the Base register, plus the contents of the Index register, plus the displacement in the instruction The contents of the location whose address is the contents of the Program Counter, plus the displacement in the instruction The contents of the location whose address is the contents of the Program Counter, plus the contents of the Index register, plus the displacement in the instruction Relative Index *RO and RRO cannot be used for Indirect, Base, or Index registers Figure 5-1. 5-2 Addressing ItJdes 2071·009 Addressing Modes and Address Calculations generally extended by replicating the sign (mostsignificant) bit in the high-order bit positions, but for the Decrement and Jump if Not Zero (DJNZ) instruction, the displacement is extended with Os. 1615 SEGMENT ( ! t, ! I I ! , I, OFFSET , ! ! ! ! , ! , ! (I) 84K BYTE SEGMENT SIZE 3130 2423 I I Another example shows an effective address calculation for a large segment with base address «lsH3» 13579B16, index value FFFFFFEO, and displacement OOOOOOOZ. The effective address is «lsH3» 13577D16. segment number base address «lsI13» + index value + displacement effective address «lsH3» segment offset 13579B FF FFFFEO 00 OOOOOZ 13577D (II) IBM BYTE SEGMENT SIZE Figure 5-2. Seglleflted Addresses In segmented mode, the base address is composed of a segment number and segment offset. Bit 31 of an address distinguishes between two segment sizes (Figure 5-2). When bit 31 of. the address is 0, the segment number is 15 bits and the segment offset is 16 bits, providing a maximum segment size of 64K bytes. Addresses for these small segments are written using the notation «ssH segment number» segment_offset. For example, small segment number five at offset 231A16 would be written «ssH5» 231A16. When bit 31 of the address is 1, the segment number is 7 bits and the segment offset is 24 bits, providing a maximum segment size of 16M bytes. Addresses for these large segments are written using the notation «IsH segment number» segment_offset. The effective address is generally calculated by adding the base address to the optional index value and optional displacement, but for CALR and DJNZ instructions, the displacement is subtracted from the base address. Only the segment offset is involved in address arithmetic. The segment size and segment number of the effective address are the same as the base address. The offset calculation uses 16-bit arithmetic for the small segments and 24-bit arithmetic for the large segments. Carry and overflow from the mostsignificant bit position are ignored. Thus, addresses wraparound within a segment. This means that, for the small segments, offset 0 appears to follow offset 65,535. For the large segments, offset 0 appears to follow offset 16,777,215. The following example shows an effective address calculation for a small segment with base address «ssH2» 5678 16 , index value OOOOBA9B16, and displacement FFFFFFFF 16. The effective address is «ssHZ» 110F16. Segment Number «ssHZ» base address + index value + displacement effective address «ssHZ» 8225-010 Segment Offset 5678 0000 BA98 FFFF FFFF 110F 5.2.3 linear Address Calculations In linear mode, adc;lresses are 32 bits. The base address for the effective address calculation is located in either a longword register other than RRO, in the PC, or in one or two words of the instruction. (A concise representation of the 32-bit base address using a single instruction word is available for some addresses. Refer to Section 6.4.3. Z for more information.) When an index value is used, it is located in a word register other than RO or a longword register other than RRO. An index value located in a word register is extended to 3Z bits for effective address calculation by replicating the sign (most-significant) bit in the high-order bit positions. The displacement in an instruction is encoded in 32 or fewer bits. When the displacement is encoded in fewer than 32 bits, it is extended to 32 bits for effective address calculation. Displacements are generally extended by replicating the sign (most-significant) bit in the high-order bit positions, but for the Decrement and Jump if Not Zero (DJNZ) instruction, the displacement is extended with Os. The effective address is generally calculated by adding the base address to the optional index value and optional displacement, but for CALR and DJNZ instructions the displacement is subtracted from the base address. Addresses are calculated using 3Z-bit arithmetic. Carry and overflow from the most-significant bit position are ignored. Thus, addresses wraparound with address 0 appearing to follow address Z32-1. The following example shows an effective address calculation with base address 0100000016' index value 00000064 16 , and displacement FFFFFF9B16. The effective addresa is 00FFFFFF16. base address + index val ue + displacement effective address 0100 0000 FFFF OOFF 0000 0064 FF9B FFFF 5-3 Addressing Modes and Address Calculations 5.' ADDRESSING MODE DESCRIPTIONS The following sections describe the nine addressing modes. Each description explains how the operand is located, shows the assembler language syntax used, and works through an example. The descriptions are grouped into two sections--one for compact mode and the other for segmented and linear modes. In the examples, hexadecimal notation is used for memory addresses and the contents of register and memory locations. The % symbol 5.'.1.1 Register (R). For Register addressing mode, the operand is located in the specified general-purpose register. Storing data in a register allows shorter instructions and faster execution than storing data in memory. The register size (byte, word, long word , or quadword) is specified by the instruction opcode. I INSTRUCTION OPERATION I precedes hexadecimal numbers in assembler language text. When the examples refer to memory locations, logical addresses are used; the logical addresses are translated to physical addresses if memory management is enabled. 5.'.1 COIIpuct Mode Descriptions and Exa8ples This section describes the addressing modes used in the compact mode of operation. Assembler language syntax: RHn, RLn Rn RRn ROn Example of R mode: LOL RR20,RR22 I/Ioad the contents I/of RR22 into RR20 Before Execution After Execution REGISTER REGISTER ~I OPERAND' Byte register Word register Longword register Ouadword register THE OPERAND VALUE IS THE CONTENTS OF THE REGISTER. 5.'.1.2 I..adiate (1M). For Immediate addressing mode, the operand is located in the instruction. Because an immediate operand is part of an instruction, it is located in one of the instruction memory address spaces. Small immediate values are used frequently, so the instruction set provides several concise encodings for these cases. Assembler language syntax: #data Example of 1M mode: LOB RH2,#%55 //load 5516 into RH2 Before Execution After Execution RR21671s91121341 RR21ssls91121341 INSTRUCTION THE OPERAND VALUE IS IN THE INSTRUCTiON. Indirect Register (IR). For Indirect 5.'.1.' Register addressing mode, the operand is located at the address contained in the specified generalpurpose word register. Any word register other than RO can be used. Depending on the instruction opcode, the operand is located in one of the data memory address spaces or in I/O address space. Indirect Register mode has a short encoding and can be used to simulate more complex addressing modes by computing the address into a register. INSTRUCTION I OPERATION I REGISTER H REGISTER ADDRESS Example of IR mode: LO R2,@R5 ~I OPERAND I //load R2 with the I/data addressed I/by the contents Ilof R5 Before Execution Data Memory 1/0 oR DATA MEMORY THE OPERAND VALUE IS THE CoNTENTS of THE LOCATiON WHoSE ADDRESS IS IN THE REGISTER. 5-4 Assembler language syntax: @Rn After Execution Addressing Modes and Address Calculations 5.'.1._ Direct Address (DA). For Direct Addrees addressing mode, the opersnd is located at the address specified in the inetruction. Depending on the instruction opcode, the operand is located in one of the data memory address spaces or in I/O address spsce. OPERAND Ilload RR30 with the I/Iongword whose lIaddress is 5E2316 Before Execution Data Memory RR3016789A4381 1/0 OR DATA MEMORY I Example of DA mode: LDL RR30, %5E23 I THE OPERAND VALUE IS THE CONTENTS OF THE LOCATION WHOSE ADDRESS IS IN THE INSTRUCTION. After Execution RR30 1020304051 Assembler language syntax: address Either memory or I/O 5.'.1.5 Index (X). For Index addressing mode the operand is located at the address calculated by adding the address specified in the instruction to the index vslue contained in the specified general-purposa word register. Any word register other than RO can be used. The operand is located in one of the data memory address spaces. Index addressing mode can be used for random access to tables or other complex data structures where the address of the base of the table is known, but the particular element index must be computed by the program. Example of X mode: LDL RR8, %231A(R7) IIload RR8 with the IIlongword whose lIaddress is 231A + lithe value in R7 Before Execution Data Memory Address Calculation Assembler language syntax: 231A +OlFE 2518 address(Rn) After Execution INSTRUCTION H REGISTER I-----I It.==~A~D~D~RE~S~S~=j~-~====:~1 ~PERATION I REGISTER INDEX DATA MEMORY OPERAND THE OPERAND VALUE IS THE CONTENTS OF THE LOCATION WHOSE ADDRESS IS THE ADDRESS IN THE INSTRUCTION PLUS THE CONTENTS OF THE REGISTER. 5-5 Addressing Modes snd Address Cslculations 5.}.1.6 Base Addre8a (BA). For Bass Address sddressing mode, the operand is locsted at the address calculated by adding the displacement contained in the instruction to the address contsined in the specified general-purpose word register. Any word register other than RO can be used. The operand is located in one of the data memory In compact mode, Base Address eddr-ess spaces. addressing mode can only be used with Load and Load Address instructions. This restriction is not significant, however, becauee Index and Base Address addressing modes perform equivalent functions in compact mode. Example of BA mode: LDL R5(%18),RR2 //load RR2 into the //Iongword whose /laddress is the base /laddress in /lR5 + 1816 Before Execution Data Memory Address Calculation 20AA +0018 Assembler language syntax: 2OC2 Rn (disp) After Execution INSTRUCTION Data Memory REGISTER DATA MEMORY OPERAND THE OPERAND VALUE IS THE CONTENTS OF THE LOCATION WHOSE ADDRESS IS THE CONTENTS OF THE REGISTER PLUS THE DISPLACEMENT IN THE INSTRUCTION. 5.}.1.7 Base Index (BX). For Base Index sddressing mode, the operand is located at the address cslculated by adding the index value contained in the specified general-purpose word index register to the base address contained in the specified general-purpose word base register. Any word register other than RO can be used for the index register or base register. The operand is located in one of the data memory address spaces. Base Index addressing mode can be used to access tables or other complex data .structures when the base of the table and particular element index are not known until the program is executed. In compact mode, Base Index addressing mode can only be used with Load and Load Address instructions. Example of BX mode: LDL RR2,R5(R3) //load RR2 with the //Iongword. whose /laddress is the base /laddress in R5 + the /lvalue in R3 Before Execution Data Memory Address Calculation 1502 +FFFE 1"500 Assembler language syntax: After Execution Rn(Rm) THE OPERAND VALUE IS THE CONTENTS OF THE LOCATION WHOSE ADDRESS IS THE CONTENTS OF THE BASE REGISTER PLUS THE CONTENTS OF THE INDEX REGISTER. 5-6 Addressing Modes and Address Calculations 5.'.1.8 Relative Address (RA). for Relative Address addressing mode, the operand is located at the address calculated by adding the displacement contained in the instruction to the low-order word of the Program Counter. The value used for the PC is the address of the instruction word following the displacement. The operand is located in one of the instruction memory address spaces. In compact mode, Relative Address addressing mode can only be used with Load, Load Address, Call, Jump, and DJNI instructions. Because the Program Counter will be advanced to pOint to the next instruction when the address calculation is performed, the displacement in the instruction is actually + 2 (fou r less than the offset given by the assembler language syntax). Before Execution Instruction Memory -Instruction 0200 31 02 00 02 0204 E8 02 FF FE Assembler language syntax: 0208 AB CO B001 address Example of RA mode: (Note that the symbol "$" is used for the address of the first word of the current instruction.) LDRL RR24,$ + %6 0204 +0002 0206 IIload RR24 with the l!Iongword whose lIaddress is the lIaddress of the lIfi rst word of //the cu rrent lIinstruction + 6 INSTRUCTION . Address Calculation After Execution PC INSTRUCTION MEMORY OPERATION I DISPLACEMENT OPERAND I THE OPERAND VALUE IS THE CONTENTS OF THE LOCATION WHOSE ADDRESS IS THE CONTENTS OF PC PLUS THE DISPLACEMENT IN THE INSTRUCTION. Relative Index (RX). Relative Index 5.'.1.9 addressing mode cannot be used in compact mode of operation. 5.'.2 5egEnted and linear Mode Descriptions and EXllllples This section describes the addressing modes used in segmented and linear modes of operation. The description is identical for the two modes of address representation except that separate examples are given for address calculations. I INSTRUCTION OPERATION I REGISTER REGISTER ~I OPERAND I THE OPERAND VALUE IS THE CONTENTS OF THE REGISTER. Assembler language syntax: RHn, RLn Rn RRn RQn Byte register Word register Longword register Quadword register Example of R mode: LDL RR20, RR22 IIload the contents of IIRR22 into RR20 Before Execution 5.'.2.1 Register (R). for Register addressing mode, the operand is located in the specified general-purpose register. Storing data in a register allows shorter instructions and faster execution than storing data in memory. The register size (byte, word, longword, or quadword) is specified by the instruction opcode. A fter Execution 5-7 Addressing Modes and Address Calculations 5.}.2.2 I.-ediate (IN). For Immediate addressing mode, the operand is located in the instruction. Because an immediate operend is part of en inetruction, it is located in one of the instruction memory address spaces. Small immediate values are used frequently, so the instruction set provides several concise encodings for these cases. Assembler language syntax: itdata Example of 1M mode: LDB RH2 it%55 /lload 5516 into RH2 Before Execution RR21671s91121341 INSTRUCTION After Execution RR21551s91121341 THE OPERAND VALUE IS IN THE INSTRUCTION. 5.}.2.} Indirect Register (IR). For Indirect Register addressing mode, the operand is located at the address contained in the specified generalpurpose register. Depending on the instruction opcode, the operand is located in one of the data memory address spaces or in I/O address space. INSTRUCTION I OPERATION I REGISTER H REGISTER ADDRESS UOOR DATA MEMORY J--.I OPERAND I For memory addresses, any longword register other than RRO can be specified; for I/O addresses any word register other than RO can be specified. Indirect Register mode has a short encoding and can be used to simulate more complex addressing modes by computing the address into a register. Assembler language syntax: 1/0 address @Rn @RRn Memory address THE OPERAND VALUE IS THE CONTENTS OF THE LOCATION WHOSE ADDRESS IS IN THE REGISTER. Example of segmented IR mode: Example of linear IR mode: LD R2,@RR4 /lload R2 with the /lword whose address /lis in RR4 LD R2,@RR4 //load R2 with the /lword whose address /lis in RR4 Before Execution Data Memory Before Execution Data Memory ~sslP2~ 170A Aol2310BloE ~sslP2~ 170E 1olD3123145 After Execution 5-8 After Execution Addressing Modes and Address Calculations 5.'.2.. Direct Addre8B (DA). For Direct Address addressing mode, the operand is located at the address specified in the instruction. Depending INSTRUCTION I/O OR DATA MEMORY I OPERAND I on the instruction opcode, the operand is located in one of the dsta memory sddress spaces or in I/O address space. Assembler language syntax: address Either memory or 1/0 THE OPERAND VALUE IS THE CONTENTS OF THE LOCATION WHOSE ADDRESS IS IN THE INSTRUCTION. Example of segmented DA mode: LDL RR30,Example of segmented RA mode: LDL RR24.<$+6> I/Ioad RR24 with the I/Iongword whose I/address is the I/address of the lIfi rst word of the I/current instruction 1/+ 6 Because the Program Counter will be advanced to point to the next instruction when the address calculation is performed. the displacement in the instruction is actually + 2 (four less than the offset given by the assembler language syntax). Before Execution Instruction Memory . Example of linear RA mode: LDL RR24.<$+6> IIload RR24 with the IIlongword whose lIaddress is the I/address of the lIfi rst word of lithe current lIinstruction + 6 Because the Program Counter will be advanced to point to the next instruction when the address calculation is performed. the displacement in the instruction is actually + 2 (four less then the offset given by the assembler language syntax). Before Execution Instruction Memory . -- Instruction Instruction ..--'-.. ~ss#O~0202 31 02 0002 ~ss#O~0204 E8 02 FF FE ~ss#O~0208 AB CO Be 00000204 E802 FF FE 01 Address Calculation ~ssfO~0204 + 00000200 31 02 0002 0002 ~ss#O~0206 After Execution 00000208 Address Calculation AB CO SO 01 . 0000 0204 +0000 0002 0000 0206 After Execution «» Note: Brackets enclosing the address can be omitted for CALR, DJNZ, JR, and LDR inatructions. 5-13 Addressing Modes and Address Calculations 5.'.2.9 Relative Index (RX). for Relative Index addressing mode, the operand is located at the address calculated by adding the displacement contained in the instruction to both the index value contained in the specified general-purpose register and the Program Counter. Any word or long word register other than RO or RRO can be used for the index register. The value used for PC is the address of the instruction word following the disp lacement. The operand is located in one of the program memory address spaces. Relative Index addressing mode can be used to access tables of constants. PC ADDRESS INSTRUCTION MEMORY INDEX I OPERAND I THE OPERAND VALUE IS THE CONTENTS OF THE LOCATION WHOSE ADDRESS IS THE CONTENTS OF THE pc, PLUS THE CONTENTS OF THE INDEX REGISTER, PLUS THE DISPLACEMENT IN THE INSTRUCTION. Assembler language syntax: < address> (Rn) Word index register Longword index register Example of segmented RX mode: LDRL RR26, TABLE(RR28) !/load RR26 with the //Iongword whose //address is TABLE plus lithe index value in IIRR28. TABLE is a Iisymbol for the beginlining of a table of IIconstants at offset 1110016 in the same IIsegment as the lIinstruction < address> (RRn) Before Execution Example of linear RX mode: LDL RR26, TABLE(RR28) IIload RR26 with the //Iongword whose //address is TABLE plus lithe index value in IIRR4. TABLE is a //symbol for the beginlining of a table of //constants beginning //at address 00010100 Before Execution Instruction Memory After Execution After Execution Note: Brackets enclosing the address «» can be omitted for CALR, DJNZ, JR, and LDR instructions. 5-14 Instruction Memory Addressing Modes and Address Calculations 5.~ EXTENDED ADDRESSING MODES The instruction encodings for several of the addressing modes use one or more extension words Because the encoding of following the opcode. this group of addressing modes is similar, they are collectively given the name Extended Addressing Modes (EAM). The Extended Addressing Modes for compact and segmented or linear mode are shown in Table 5-1 below. Refer to Section 6.4.3 for more information about Extended Addressing Modes. Table 5-1. Extended Addressing Modes COIIpsct 5egaented or linear Direct Address Index Direct Address Index Base Address Base Index Relative Address Relative Index 5-15 Chapter 6. Instruction Set 6.1 INTRODUCTION EX EXB EXL dst,src Exchange LD LDB LDL dst,src Load LDA dst,src Load Address LDAR dst,src Load Address Relative LDK LDKL dst,src Load Constant 6.2 flN:TIONAl SlHfARY LDM dst,src,num Load Multiple This section presents a functional overview of the instruction set. The instructions are separated by function into eleven groups. Within each group, the salient features are described, such as available addressing modes, effect on flags, and possible exceptions. The eleven functional groups are: LDML mask,src dst ,mask Load Multiple Longwords LDR LDRB LDRL dst,src Load Relative POP POPL dst,src Pop PUSH PUSHL dst,src Push This chapter describes the instruction set of the l80,000 CPU. An overview of the instruction set, separated into functional groups, is presented first. Next, fl ags and condition codes are discussed. Finally, a description is provided for each instruction, including a summary of the operation, addressing modes, effect on flags, possible exceptions, assembler language syntax, instruction formats, and simple examples. The bit patterns used to encode various instruction fields are also described. • • • • • • • • • • • Load and Exchange Arithmetic Logical Program Control Bit Manipulation Bit Field Rotate and Shi ft Block Transfer and String Manipulation Input/Output CPU Control Extended Instructions 6.2.1 load and Exchange Instructions Instruction Operand(s) Na.e of Instruction CLR CLRB CLRL dst Clear CVT dst,src Convert CVTU dst,src Convert Unsigned The load and exchange instructions move data between registers and memory. Among these instructions, onl y Convert and Convert Unsigned affect the flags. The Load instructions transfer a byte, word, or long word of data from the source operand to the destination operand. A register can either be loaded with an operand using any of the addressing modes or a register or immediate value can be loaded to a memory location. The Load Relative instructions load a register to or from a memory location specified with the Relative addressing mode. Special compact encodings are provided for the following frequent operations: (1) loading any constant byte to a register; (2) loading a small constant (0 to 15) word or long word to a register (Load Constant); and (3) loading an immediate value zero to a register or memory location (Clear). 6-1 lBO,OOO Instruction Descriptions and Formats The Exchange instructions swap the byte, word, or longword contents of the source and destination operands. The contents of a register can be swapped with the contents of another register or memory location. ADD ADDB ADDL dst,src Add CHK CHKB CHKL dst,src Check CP CPB CPL dst,src Compare DAB dst Decimal Adjust DEC DECB dst,src Decrement DECI DECIB DECL dst,src Decrement Interlocked The Load Multiple and Load Multiple Longwords instructions provide efficient saving and restoring of registers. They are most useful for moving simple data types that are more than four bytes long and for changing the process context at interrupts. The Load Multiple instruction allows any contiguous group of 1 to 16 word registers to be loaded to or from consecutive memory locations. The Load Multiple Longwords instruction allows up to 16 longword registers se lected by a bit mask to be loaded to or from consecutive memory locations. DIV DIVL dst,src Divide DIVU DIVUL dst,src Divide Unsigned EXTS EXTSB EXTSL dst Extend Sign INC INCB INCL dst,src Increment Stack operations for words and long words are supported by the Push and Pop instructions. Any general-purpose register other than RO or RRO can be used as a stack pointer. The stack pointer is automatically decremented for Push and incremented for Pop. The source operand for Push and the destination operand for Pop can be specified using any of the addressing modes. INCI INCIL dst,src Increment Interlocked INDEX INDEXL dst,sub,src Index The Convert and Convert Unsigned instructions are used to move the byte, word, or longword source operand to a different-sized destination operand. The data can be moved in either direction between a register and another register or memory location. When the destination is longer than the source, Convert per forms sign extension and Convert Unsigned performs zero extension. If the destination is shorter than the source, the instructions set the V flag when the lost information is significant. The Integer Overflow trap occurs when the IV bit in FCW is 1 and the Convert instruction sets the V flag. The Load Address instructions calculate the effective address of the source operand and load the destination with that address. The destination is a register and the source is specified with any of the Extended Addressing Modes (EAM) (see Section 5.4). These instructions are useful for manipUlating segmented addresses and managing complex data structures. 6.2.2 Arithaetic Instructions Instruction Operand(s) N_ of Instruction ADC ADCB ADCL dst,src Add with Carry 6-2 MUll MULTL ' dst,src Multiply MULTU MULTUL dst,src Multiply Unsigned NEG NEGB NEGL dst Negate SBC SBCB SBCL dst,src Subtract with Carry SUB SUBB SUBL dst,src Subtract TESTA TESTAB TESTAL dst Test Arithmetic lBO,OOO Instruction Descriptions and Formats The arithmetic group consists of instructions for performing integer arithmetic. The basic instructions operate on unsigned binary integers or signed twos complement binary integers. Support is provided for Binary Coded Decimal (BCD) arithmetic and multiple precision arithmetic. The arithmetic instructions generally affect the C, Z, S, and V flags. The byte versions of these instructions generally affect the D and H flags as well. The V flag indicates arithmetic overflow. The Integer Overflow Trap occurs when the IV bit in the FCW is 1 and the V flag is set after execution of an Add, Decrement, Decrement Inter locked, Divide, Divide Unsigned, Increment, Increment Interlocked, Negate, or Subtract instruction. Add, Subtract, Multiply, Multiply Unsigned, Divide, and Divide Unsigned instructions operate on a destination operand in a register and a source operand specified by any addressing mode. The result of the operation is stored in the destination. Add and Subtract operate on bytes, words, or longwords. The Multiply instructions operate on words or long words and compute a double-precision product. The Divide instructions operate on words or longwords, using a double-precision dividend. The Increment and Decrement instructions add or subtract a small constant (1 to 16) to or from the destination operand. The result is stored in the destination. The operand may be a byte, word, or longword specified in a register or memory location. Increment Interlocked and Decrement Interlocked instructions are similar to Increment and Decrement, but interlock protection is used to fetch and store the destination operand in memory. Interlock protection is important for implementing critical counters referred to by multiple processors. BCD operations are supported with the Decimal Adjust instruction. The DAB instruction is used following the binary addition or subtraction of bytes to adjust the destination operand, specified in a register, for correct BCD representation. Multiple precision arithmetic is supported with the Add with Carry, Subtract with Carry, and Extend Sign instructions. These instructions operate on byte, word, or longword operands stored only in registers. The Extend Sign instructions compute a double-precision result. The Check instructions are used to compare the signed byte, word, or longword source operand against lower and upper bounds. The source operand is specified in a register, and the bounds are specified as immediate values or in consecutive memory locations. If the source is out of bounds, a Bounds Check trap occurs. The Index instruction is used either to compute an index into a one-dimensional array, or as one step in computing the index into a multiple-dimensional array. The signed subscript is compared against lower and upper bounds. If the subscript is out of bounds, an Index Error Trap occurs; otherwise, the lower bound is subtracted from the subscript, and the difference is added to the destination. The sum is then multiplied by the scale factor, and the product is stored back into the destination, which is the calculated array offset. The source and destination operands are specified in registers. The bounds and scale factor are specified as immediate values or in consecutive memory locations. All operands are the same size, either word or longword. 6.2.l logical Instructions Instruction Operand(s) N_ of Instruction The Negate instructions perform twos complement on the destination operand in a register or memory location. AND ANDB ANDL dst,src And The Compare instructions compare (subtract) the source and destination operands and set the flags to reflect the result. The contents of a register can be compared with an operand specified using any addressing mode, and the contents of a memory location can be compared with an immediate value. The Test Arithmetic instructions are special, compact encodings for comparing a register or memory location with zero. COM COMB COML dst Complement OR ORB ORL dst,src Or TEST TESTB TESTL dst Test 6-3 l80,000 Instruction Oescriptions and Formats XOR XORB XORl dst,src Exclusive Or The logical group consists of instructions for performing logical operations on all bits of byte, word, or longword operands; the instructions set the land S flags according to the result. The byte versions affect the P flag as well, setting the P flag if the parity of the result is even. The instructions And, Or, and Exclusive Or operate on a destination operand in a register and a source operand specified with any addressing mode. The appropriate logical operation is performed on bits of the operands, and the result is stored back into the destination. The Complement instruction complements the bits of the destination operand; the result is stored back into the destination. Tha operand is a byte, word or longword specified in a register or memory location. The Test instruction performs a logical Or of the destination operand and zero, and sets the flags according to the result. The operand is a byte, word, or longword specified in a register or memory location. 6.2.4 Progr_ Control Instructions Instructioo OperlDt(s) BRKPT CAll N_ of Inatructioo Breakpoint dst CAlR Call The Jump instruction loads the Program Counter (PC) with the effective address of the destination operand if the flags satisfy the specified condition. The destination is specified using any of the memory addressing modes. The Jump Relative instr uction is a special, compact encoding used when the destination is within -254 to 256 bytes of the instruction location. The Call instruction is used for calling procedures. The contents of the PC are pushed onto the processor stack, and the effective address of the destination operand is loaded into the PC. The destination operand is specified using any of the memory addressing modes. The Call Relative instruction is a special, compact encoding used when the destination operand is within -4092 to 4098 bytes of the instruction location. The Enter instruction is executed at the beginning of a procedure to establish the procedure's environment. Enter adjusts the Frame Pointer and Stack Pointer registers to allocate a new activation record, which contains saved general-purpose registers, the Frame Pointer, the exception handler address, and local data. The instruction contains a bit mask indicating which general-purpose registers to save. The mask and the value of the Integer Overflow Enable bit in FCW are also saved in the activation record. The Call and Enter instructions provide the essential functions for linking procedures in high-level languages such as C and Pascal. Call Relative DJNl DBJNl DLJNl r,dst Decrement and Jump if Not lero ENTER mask,siz Enter EXIT Exit JP cc,dst Jump JR cc,dst Jump Relative RET cc Return SC src System Call TRAP cc,src Conditional Trap 6-4 This group consists of instructions that control program flow for jumps, loops, procedure calls, and exceptions. The instructions generally do not affect the flags, except when new Program Status is loaded for traps. Corresponding to Call and Enter instructions are Return and Exit. Exit releases the activation record by adjusting the Stack Pointer and restoring the Frame Pointer. Exit also uses the mask saved by Enter to restore the saved general-purpose registers and Integer Overflow Enable bit. The Return instruction pops a value from the processor stack into the PC if the flags satisfy the specified condition. The Decrement and Jump I f Not lero instructions are used to control loops, such as those implementing multiple-precision or decimal-string arithmetic. The specified byte, word, or longword register is decremented by one, and the result is stored back into the register. If the result is not zero, the PC is loaded with the effective address of the destination. The destination may lBO,OOO Instruction Descriptions and Formats be specified using Relative Address addressing mode, at a location no more than 252 bytes (DJNl, OBJNZ) or 250 bytes (DlJNl) before the instruction. The Breakpoint, System Call, and Conditional Trap instructions are all used to generate traps. The Breakpoint instruction is generally placed by a debugger at the first word of an instruction where a breakpoint is desired. The System Call instruction is used by programs operating in normal mode to request service from the operating system; the low-order byte of the instruction can be used to indicate the particular service desired. The Conditional Trap instruction generates a trap if the flags satisfy the specified condition. This instruction can be used for software detection of run-time errors or other exceptions; a 4-bit field in the instruction word can be used to identi fy the cause of the trap. When one of these traps occurs, the CPU pushes the Program Status registers and instruction word onto the system stack, and loads new values into the Program Status registers from the Program Status Area. See Chapter 7 for more details about trap processing. instruction tests the bit of the destination specified by the source operand, and sets the l flag to indicate the result. For "static"* bit operations, the source operand is specified by an immediate value and the destination operand may be in a register or memory location. For "dynamic" bit operations, the source and destination operands are in registers. The Test Condition Code instruction sets the least-significant bit of the byte, word, or longword destination register if the flags satisfy the speci fied condition. This instruction is useful for evaluating Boolean expressions. The Test and Set instruction tests whether the destination is negative, then sets all bits in the destination to 1. Interlock protection is used to fetch and store the destination operand in memory. Test and Set is used to access semaphores protecting critical shared data structures in a tightly-coupled multiprocessor system. 6.2.6 Bit field Instructions N_of Instruction 6.2.5 Bit Manipulation Instructions Instruction Operand(s) Instruction Operand(s) N_ of Instruction EXTR EXTRU dst, src, pos, siz Extract field BIT BITB BITl dst,src Bit Test INSRT dst, src, pos, siz Insert field RES RESB RESl dst,src Reset Bit SET SETB SETl dst,src Set Bit TSET TSETB TSETl dst Test and Set TCC TCCB TCCl cc,dst The instructions in this group are used to insert and extract bit fields. A bit field is 1 to 32 contiguous bits that can cross byte boundaries. One version of Extract (EXTR) is used to extract and sign-extend a field into the destination longword register. Another version of Extract (EXTRU) extracts and zero-extends the field. Insert is used to insert a fie ld from the source long word register. A bit field is specified by three operands as follows: (Figure 6-1). Test Condition Code The instructions in this group are used to manipulate an individual bit in a byte, word, or longword destination operand. Set Bit is used to set a bit to 1; Reset Bit clears a bit to O. The bit of the destination operand specified by the source operand is set or cleared, and the result is stored back into the destination. The Bit Test • The origin of the bit string is the most-significant bit of a memory location or longword register. The origin is specified by the source operand for Extract and the destination operand for Insert. * The term "static" is used because the bit number is an immediate value that cannot change. "Dynamic" means the bit number is specified in a register and can change. 6-5 zao,ooo Instruction Descriptions and Formats ... I I I I 1'1' I ~I' I I~ I I IloRIGIN ... ----- INCREASING ADDRESS I /-POSITION-/_SIZE-! Figure 6-1. • The position of the field is the unsigned number of bits from the origin to the most-significant bit of the field. Position is messured in the direction of decreasing significance from the origin. The position of tha origin is zero. The position is specified by an immediate value (0 to 31) or in a word or longword register. In the latter case the position may be any positive value. • The size of the field is the number of bits in the field, between 0 and 31 inclusive, and represents fields of 1 to 32 bits. The size is specified by an immediate value or in a word or longword register. A bit field in memory must be contained entirely within four consecutive bytes (i.e., the position modulo a plus the size operand must be less than or equal to 31). A bit field in s long word register must be entirely contsined within the register (i.e., the position plus the size operand must be less than or equal to 31). Note that the direction of increasing bit number for field position is opposite to Figure 2-1. 6.2.7 Rotate ... Shift Instructions InstrllCtian Opersnd(s) N_ of InstrllCtion Rl RlB Rll dst,src Rotate left RlC RlCB RlCl dst,src Rotate left through Carry RlOB dst,src Rotate left Digit RR RRB RRl dst,src Rotate Right RRC RRCB RRCl dst,src 6-6 Rotate Right through Carry Bit Field RRDB dst,src Rotate Right Digit SDA SDAB SDAl dst,src Shift Dynamic Arithmetic SOL SDlB SDll dst,src Shift Dynamic logical SlA SLAB SlAl dst,src Shift left Arithmetic Sll Slla Slll dst,src Shift left logical SRA SRAB SRAl dst,src Shift Right Arithmetic SRl SRlB SRll dst,src Shift Right logical This group of instructions provides for rotating and shifting of bytes, words, and longwords of data located in general-purpose registers. The Rotate and Shift instructions sffect the C, Z, S, and P/V flags. The Rotate instructions rotate the contente of the destinstion register left or right by an amount specified by the source operand. The source is an immediate value of one or two. Rotation is performed on the destinstion slone or, for mul tiple precision arithmetic, on both the destination and Csrry bit. The digit rot st ion instructions RlDB snd RRDB are useful for msnipulsting BCD data. The Shift instructions shift the contents of the destinstion register left or right by an amount specified by the source operand. The value of the source operand can be any amount between zero and the number of bits in the destinstion. For "static" shift operations, the source is specified 8225-011 IBO,OOO Instruction Descriptions and Formats by an immediate value; for "dynamic" shift operations the source is specified in a register. Both logical and arithmetic shifts are supported. An Integer Overflow Trap occurs when the IV bit of FCW is 1 and the V flag is set after execution of an arithmetic shift instruction. 6.2.8 Block Transfer and String Manipulation Instrt.K:tions Instruction Operand(s) N_ of Instrt.K:tion CPD CPDB CPDL dst,src,r,cc Compare and Decrement CPDR CPDRB CPDRL dst,src,r,cc Compare, Decrement and Repeat CPI CPIB CPIL dst,src,r,cc Compare and Increment CPIR CPIRB CPIRL dst,src,r,cc Compare, Increment and Repeat CPSD CPSDB CPSDL dst,src,r,cc Compare String Decrement CPSDR CPSDRB CPSDRL dst,src,r,cc Compare String, Decrement and Repeat CPSI CPSIB CPSIL dst,src,r,cc Compare String and Increment CPSIR CPSIRB CPSIRL dst,src,r,cc Compare String, Increment and Repeat LDD LDDB LDDL dst,src,r Load and Decrement LDDR LDDRB LDDRL dst,src,r Load, Decrement Repeat LDI LDIB LDIL dst,src,r Load and Increment LDIR LDIRB LDIRL dst,src,r Load, Increment Repeat and and and TRDB dst,src,r TRDRB dst,src,r TRIB dst,src,r TRIRB dst,src,r TRTDB src1,src2,r TRTDRB src1,src2,r TRTIB src1,src2,r TRTIRB src1,src2,r Translate and Decrement Translate, Decrement and Repeat Translate and Increment Translate, Increment and Repeat Translate, Test and Decrement Translate, Test, Decrement, and Repeat Translate, Test and Increment Translate, Test, Increment and Repeat This group of instructions provides a full complement of string comparison, string translation, and block transfer operations. A block can be moved in memory, a string can be searched for a given value, and two strings can be compared. These instructions manipulate blocks or strings containing up to 65,536 bytes, words, or longwords. In addition, a string containing up to 65,536 bytes can be translated according to a table in memory, or searched for a set of values specified by a table in memory. The block and string operands are speci fied using Indirect Register addressing mode. When a string is searched for a value, the value is located in a register. The length of the block or string is also located in a register. All the block transfer and string manipulation operations can proceed through the data in either direction. Furthermore, the operations can be repeated automatically while decrementing the length register until it is zero, or they can operate on a single element with the length register decremented by one and the pointer registers properly adjusted. The second form can be used with other instructions in a loop to implement more complex string operations. These instructions set the P/V flag to indicate whether the length register was decremented to zero. The string Search and Compare instructions set the C, Z, and S flags to indicate the result of the comparison. The Translate and Test instructions set the Z flag when one of the specified set of values is found. Otherwise, the flags are unaffected. The repetitive forms of these instructions are interruptible after each iteration. Section 7.3.1 provides more information about interruptible instructions. 6-7 l80,000 Instruction Descriptions and formats 6.2.9 Input/Output Instructions IN IN8 INL dst,src Input IND INDB INDL dst,src,r Input and Decrement INDR INDRB INDRL dst,src,r Input,Decrement and Repeat The other instructions in the group are used to transfer a block (up to 65,536 b"ytes, words, or longwords of data) between a peripheral port and memory. The port address and memory address are speci fied using I ndirect Register addressing mode. The length of the block is located in a register. These instructions are similar to the block move instructions described in Section 6.2.7 except that the port address remains unchanged while the memory address is adjusted. The p/v flag is set when the length register is decremented to zero. The repetitive forms of these instructions are interruptible after each iteration. INI INIB INIL dst,src,r Input and Increment 6.2.10 CPU Control Instructions INIR INIRB INIRL dst,src,r OlDR OlDRB OlDRL dst,src,r OTIR OTIRB OTIRL dst,src,r OUT OUTB OUTL dst,src OUlD OUlDB OUlDL dst,src,r OUT! OUTIB OUTIL dst,src,r Instruction Operand(s) N_ of Instruction Input, Repeat Increment and Output, Decrement and Repeat Output, Increment and Repeat Operand(s) N_ of Instruction COMFLG flag Complement flag DI int Disable Interrupt EI int Enable Interrupt HALT Halt IRET Interrupt Return dst,src Load Control Register Output LDCTL LDCTLB LDCTLL dst,src Load Normal Data Output and Decrement LDND LDNDB LDNDL dst,src Load Normal Instruction Output and Increment LDNI LDNIB LDNIL LDPND LDPNI LDPSD LDPSI dst,src Load Physical Address LDPS src Load Program Status The instructions in this group transfer data between a peripheral port and a CPU register or memory. All of these instructions are privileged. A single byte, word, or longword of data can be transferred between a peripheral port and a CPU register with the Input and Output instructions. The port address is specified using the Direct Address or Indirect Register addressing modes. The single transfer instructions do not affect the flags. 6-8 Instruction NOP No Operation PC ACHE Purge Cache PTLB Purge TLB ZBO,OOO Instruction Descriptions and Formats PTLBEND PTLBENI PTLBESD PTLBESI Purge TLB Entry fLB. Individual TLB entries can be invalidated using the Purge TLB Entry instructions. All the normal mode TLB entries can be invalidated using the Purge TLB Normal instruction. Purge fLB Normal PfLBN 6.2.11 RESFLG flag Reset Flag SETFLG flag Set Flag The instructions in this group perform privileged operations necessary for the operating system to control the CPU; only the No Operation and flag manipulation (COMFLG, LDCTLB, RESFLG, SETFLG) instructions can be executed in normal mode. The only instructions that affect the flags are the flag manipulation instructions, the instructions that load the FCW (I RET , LDCTL, LDPS), and the Load Physical Address instructions. The Disable Interrupt and Enable Interrupt instructions control the Vectored Interrupt and Non-Vectored Interrupt enable bits in FCW. The enable bits can be separately cleared or set. The Halt instruction halts the CPU. The Interrupt Return instruction is used to return from an interrupt or trap handler. The Program Status registers are loaded with values popped from the system stack. The ZBO,OOO architecture includes a powerful mechanism for extending the basic instruction set through the use of coprocessors known as Extended Processing Units (EPUs). For example, floatingpoint arithmetic is supported by the ZB070 Arithmetic Processing Unit. When an extended instruction is executed and the EPA bit in the FCW is 1, the CPU transfers the instruction to the EPU. The CPU also controls the transfer of data between the EPU and either memory or the CPU. If the EPA bit is 0, an Extended Instruction trap occurs to allow software emulation in systems that lack an EPU. The CPU supports four types of extended instructions: EPU internal operations that do not require any data transfer; transfer of one to sixteen words of data between the EPU and consecutive word or longword general-purpose registers; transfer of one byte of data between the EPU and the flag byte of the FCW; and the transfer of one to sixteen bytes or words of data between the EPU and memory. The flags are affected only when the flag byte is loaded. 6.3 The Load Control instructions move data between a control register and a general-purpose register. The Load Program Status instruction loads the Program Status registers (PC, FCW) from memory. The memory location is specified using the IR or EAM addressing modes. Load Normal Data and Load Normal Instruction are used in system mode to move data between a register and a memory location in either of the normal mode memory address spaces. The memory location is specified using the IR or EAM addressing modes. The Load Physical Address instructions load the physical address of the source operand to the destination register. The source operand is specified using the IR or EAM addressing modes. These instructions set the flags to indicate the aCCesS protection of the logical address and whether the address translation was valid. Extended Instructions fLAGS AN) CIJN)ITION COOES The Program Status includes six processor flags as follows: Carry (C), Zero (Z), Sign (S), Parity/Overflow (P/V), Decimal Adjust (D), and These flags are affected or Half Carry (H). tested by most instructions. Arithmetic, logical, and other instructions previously described modify the flags to indicate the resu 1t of the operation. Among the instructions that test whether or not the flags indicate a specified condition are Jump, Return, and Test Condition Code. For example, a Test instruction may be followed by a Jump: TEST R1 JR Z, DONE ! sets Z flag if R1 = O! !go to DONE if Z flag is set! DONE: The Purge Cache instruction invalidates the cache contents. The Purge TLB instruction invalidates all address translation table entries in the The program branches to DONE if the TEST sets the Z flag, i.e., if R1 contains zero. 6-9 Z80,000 Instruction Descriptions and Formats The Carry (C) flag is set to 1 following certain operations when there ia a carry from or a borrow into the high-order bit position of the result. For example, adding the 8-bit numbers 225 and 64 causes a carry out of bit 7 and sets the Carry flag: Bit 7 + 225 64 1 0 289 0 6 5 , 2 o 0 0 0 0 0 0 0 0 Carry flag 0 0 o 0 o II 0 1 0 The Carry flag is important for implementing multiple-precision arithmetic (see the ADC, SBC instructions). It is also involved in the Rotate Left Through Carry (RLC) and Rotate Right Through Carry (RRC) instructions. These instructions are used to implement rotation or shifting of data. The Zero (Z) flag is set to 1 when the result of certain operations is zero. This flag is useful to determine when a counter reaches zero. In addition, the block compare instructions use the Z flag to indicate when the speci fied comparison condition is satisfied. The Sign (5) flag is set to 1 when the result of certain operations is negative (i.e., the most-significant bit is 1). The Overflow (V) flag is set to 1 when the result of certain operations cannot be represented as a twos camp lement number in the same precision as the destination. In the example below for 8-bit numbers, 120 is added to 105. The result, 225, cannot be represented in 8 bits; it appears to be -31. In such a case, the Overflow flag is set and only the low-order bits of the result are stored into the destination. , Bit 7 120 0 + 105 0 225 6-10 6 5 II 1 0 2 0 0 0 0 0 0 0 0 0 Overflow flag set 0 The Parity (P) flag is set to 1 when the result of logical operations on bytes has even parity (i.e., the number of 1 bits is even). The Overflow and Parity flags share the same bit in the FCW, hence the bit is named p/v. The Decimal Adjust (D) and Half-Carry (H) flags are used for BCD arithmetic. Following the binary addition of two bytes, the D flag is set and the H flag indicates the carry from bit 3. Following the binary subtraction of two bytes the 0 flag is cleared and the H flag indicates the borrow from bi t 3. Decimal ar i thmetic on BCD bytes is performed by first adding or subtracting the operands using binary arithmetic. Afterwards, the Decimal Adjust instruction adjusts the result for correct 8CD representation. The C, Z, 5, and p/V flags are also used to control the operation of conditional instructions such as Jump. The operation of these instructions depends on whether the four flags satisfy a specified condition. Conditional instructions contain a 4-bit field, called the condition code, that specifies one of sixteen flag conditions to test. Table 6-1 lists the flag condition tested and the binary encodings for the condition codes. 6.11 NOTATION AND BINARY ENCODING The rest of this chapter contains detailed descriptions for each instruction, listed in alphabetical order. This section describes the notational conventions used in the instruction descriptions and the binary encoding for some common instruction fields (e.g., register designation fields). The bit patterns for other instruction fieldS are shown explicitly in the instruction format. An instruction's descr iption begins with the instruction mnemonic and instruction name in the top part of the page. Privileged instructions are also identified as such at the top of the page. The assembler language syntax is then given in a general form that covers all the variants of the instruction and the order of source, destination and other operands, along with a list of applicable addressing modes. Example: AN) dst, src ANlB ANll dst: R src: R, 1M, IR, EAM ZBO,OOO Instruction Descriptions and Formata Table 6-1. Code F T l NZ C NC PL MI NE EQ OV NOV PE PO GE LT GT LE UGE ULT UGT ULE Condition Codes MaMing Always false Always true Zero Not zero Carry No carry Plua Minus Not equal Equal Overflow No overflow Parity even Parity odd Greater than or equal Less than Greater than Less than or equal Unsigned greater than or equal Unsigned leas than Unsignad greater than Unsigned leaa than or equal Flag Setting Binary Z Z =0 C 1 C 0 5 0 5 = Z =0 Z= V= V =0 P 1 P 0 (5 XOR V) = 0 (5 XOR V) = 1 (Z OR (5 XOR V» (Z OR (5 XOR V» C =0 C =1 «C = 0) AND (Z (C OR Z) = 1 0000 1000 0110 1110 0111 1111 1101 0101 1110 0110 0100 1100 0100 1100 1001 0001 1010 0010 1111 0111 1011 0011 =0 1 0» Some condition codea correspond to identical flag settings: Z-EQ, NZ-NE, C-ULT, NC-UGE, PE-OV, and PO-NOV. If no condition is specified, the default condition is T (always true). The operation of the instruction is presented next, followed by a detailed discussion of the instruction, including the effect of the instruction on the processor flags. Exceptions that can Some occur for the instruction are listed next. excaptions, such as the Address Translation trap, can occur for any instruction. Only exceptions specific to the instruction are listed. Finally, s table is presented showing the assembler language syntax and instruction format for each addressing mode and operand size. An aesembIer language example showing the use of the instruction is also given. 6.4.1 AsaeIIbler Language Syntax The syntax is shown for each operand size (byte, word or longword). The invariant part of the ayntax is given in upper case and muat appear as shown. Lower case characters represent the variable part of the syntax, for which suitable values are substituted. The syntax is shown for the most basic form of the instruction recognized by the assembler. For example, ADD Rd,ldata repreaents a statement of the form ADO R3,135. The assembler also accepts variations such as ADD TOTAL, INEW-DELTA where TOTAL, NEW and DELTA have been previously defined. When the assembler syntax can be encoded in more than one format (e.g., LOB RHO, 11), the assembler generally uses the shortest encoding. The following notation is used for regiaters: Rbd,Rbs a byte register (RHO,RH1, ••• ,RH7,RLO, RL1, ... ,RL7) Rd,Rs RRd,RRs RQd a word register (RO,R1, ••• ,R15) a longword register (RRO,RR2, ••• ,RR30) a quad word register (RQO,RQ4, ••• ,RQ2B) The ending "s" or "d" for the register notation indicates either a source or destination operand, respectively. Addrees registers must be word registers in compact mode and longword registers in segnented or linear mode, as exp lained in footnotes to applicable instructions. Several addressing modes are combined together in a group called Extended Addressing Modes (EAM). 6-11 ZBO,OOO Instruction Descriptions and Formats The instruction encoding for these addressing modes requires one or more extension words following the opcode. In compact mode, the EAMs are Direct Address and Index (Base Address and Index addressing modes are equivalent in compact mode.) In segmented or linear mode, the EAMs are Direct Address, Index, Base Address, Base Index, Relative Address, and Relative Index. Where the symbol "eam" is found in the assembler syntax, any EAM can be used. Refer to Section 5.3 for the assembler syntax for particular addressing modes. Conditional instructions specify a condition code, indicated by "cc" in the assembler syntax. Table 6-1 lists the assembler mnemonics for condition codes. The assembler recognizes comments beginning with and continuing to the end of the line. "II" 6.4.2 Register Field Encoding Code Byte Word long Quad 0000 0001 0010 0011 RHO RH1 RH2 RH3 RO R1 R2 R3 RRO RR16 RR2 RR1B RQO RQ16 Unimplemented Unimplemented 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 RH4 RH5 RH6 RH7 RLO R4 R5 R6 R7 RB RL1 R9 RL2 R10 R11 R12 RR4 RR20 RR6 RR22 RRB RR24 RR10 RR26 RR12 RR2B RR14 RR30 RQ4 RQ20 Unimplemented Unimplemented RQB RQ24 Unimplemented Unimplemented RQ12 RQ2B Unimplemented Unimplemented RL3 RL4 RL5 RL6 RL7 R13 R14 R15 Instruction Foraat The binary encoding of each instruction is given as part of the instruction description. Some fields in the instruction contain symbols whose values are described below. The symbol "W" is used for a single bit that distinguishes between the byte and word versions of the instruction. The bit takes the value 0 for byte versions and 1 for word versions. Fields specifying registers are identified with the same symbol (Rs, RRd, etc.) used in the assembler language syntax. When the field cannot take the value 0, a notation of the form "Rs;oiO" is used. Table 6-2 shows the binary encoding for register fields. 6-12 Table 6-2. For bit field instructions, the position and size operands are specified by a 6-bit field. The operands can be immediate values or located in a word or longword register. The format of the field is shown below. 0 n n n n n 0 r r r r r r r r 5-bit immediate value (0 to 31) word register long word register lBO,OOO Instruction Descriptions and Formats 6.4.' Extended Addressing tbdea (EAM) The format for instructions using an EAM includes an opcode word containing a 4-bit field indicated by "earn", followed by one, two, or three extension words. An example is shown below. The following sections describe the various encoding possibilities for EAM. An EAM format specifies the three components of an effective address calculation: base address, index value, and displacement. Refer to Section 5.2 for more information about effective address calculations. Assembler Language Syntax ADDL RRd,eam Instruction Format o 1 10 1 0 11 0 I earn I RRd 1, 2 or 3 extension words 6.4.'.1 COIIIpsct Mode. In compact mode, the [AM format is used for Direct Address or Index addressing modes. The opcode is followed by a single extension word containing the base address used in effective address calculation. The eam field specifies a word index register (eam;lO) or no index register (eam=O). Addressing Modes earn Mode DA X (word index) 6.4.'.2 ~ted or Linear Mode. In segmented or linear mode, there are six [AM formats used for Direct Address, Index, Base Address, Base Index, Relative, and Relative Index addressing modes. The six formats are distinguished by the encoding of the most-significant bit and the four leastsignificant bits of the first extension word. The most frequently used formats require only a single extension word, but formats with two and three extension words are provided to access the entire Addressing Modes earn o *0 Instruction Format 1°:' ! : : .' address space. The formats are described below. The first format uses a single extension word to specify Base Address or Relative Address addressing modes. The earn field specifies the base address for the effective address calculation in a longword register (eam;lO) or the Program Counter (eam=D). The extension word encodes a displacement in the range -B192 to B191 inclusive. Instruction Format Mode RA SA 6-U lBO,OOO Instruction Descriptions and Formats The second format uses a single extension word to specify Base Address, Base Index, Relative Address, or Relative Index addressing modes. The earn field specifies the base address for the effecti ve address calculation in a longword register (eam;llO) or the Program Counter (eam=O). The x field specifies an index register (x;llo) or no index register. When an index register is specified, the L field determines whether a longword (L=1) or word (L=O) register is used. The extension word encodes a displacement in the range -64 to 63 inclusive. Addressing Modes eam 0 x L 0 °° *0°° 011 *0 *0° ° °1 *0 *0 *0° *0 *0 ° Instruction Format Mode RA unimplemented RX (word index) RX (long index) SA unimplemented SX (word index) SX (long index) The third format uses three extension words to specify Base 'Address, Base Index, Relative Address, or Relative Index addressing modes. The encoding of the earn, x, and L fields is the same 01 1 11 displacement 0 0 x L °° *0° °0 *0 ° *0 °° *0 *0 *0° *0 *0 ° 1 1 1 Mode RA unimplemented RX (word index) RX (long index) SA unimplemented SX (word index) SX (long index) 01 1 10000000 Mode DA unimplemented X (word index) X (long index) eam x 111LI0 displacement (high) displacement (low) index register (x ;II 0) or no index register (x = 0). When an index register is specified, the L field determines whether a longword (L = 1) or word (L = 0) register is used. Note that the eam field must be alIOs in this format. Addressing Modes Instruction Format 0000 01\ 10000000 x address (high) address (low) 6-14 1 0ILIO Instruction Format The fourth format uses three extension words to specify Direct Address or Index addressing modes. The base address used in the effective address calculation is contained in the second and third extension words. This format can be used to speci fy any address. The x field specifies an x L x as the previous format, but a 32-bit displacement is contained in the second and third extension words. Addressing Modes eam eam o1\L\0 Z80,000 Instruction Descriptions and formats The fi fth format uses a single extension word to speci fy Direct Address or Index sddressing modes. The base sddress used in the effective address calculation is encoded in the extension word. In segmented mode, this format can be used to specify addresses in a 64K-byte segment with the eight lesst-significant bits of the segment number and eight most-significant bits of the offset equel to O. In linear mode, the CPU similarly decodes the address in the extension word, but this format is less useful. The eam field specifies a word index register (eam ~ 0) or no index register (eam = 0). Addressing Modes earn o *0 Instruction Format Mode DA 01 1 X (word index) 01 earn 1 segment offset Encoded Address offset I The sixth format uses two extension words to specify Direct Address or Index addressing modes. The bass addrsss used in the effective addrees calculation is encoded in the extension words. In segmented mode, this format can be used to specify addresses in a 64K byte segment with the eight o *0 ! least-significant bits of the segment number equal to O. In linear mode, the CPU similarly decodes the address in the extension words, but this format is less often used. The eam field specifies a word index register (eam ~ 0) or no index register (eam = 0). Addressing Modes earn I Instruction Format Mode DA 01 1 X (word index) 11 earn 1 segment 0000 0000 offset Encoded Address ! 6._._ Unillpl-':ed InBtructioo £ncodings Section 6.5 lists all of the instruction encodings Any for which the CPU's' operation is defined. instruction encodings not listed are unimplemented and must not be used. for most of the unimplemented instruction encodings, including all those with first byte 3616 or 8f 16 and certsin Z8000 opcodes descr ibed in Appendix A, an st tempt to execute the instruction causes an Unimplemented , , , , , offset I ! , , , I , Instruction trap to occur. If a program erroneously uses an unimplemented instruction thst does not trap, the CPU's operation is not specified; however, the CPU never performs an operation thst could not otherwise be performed by executing a sequence of defined instructions. for example, a progrsm executing in normal mode cannot gsin access to privileged control registers or memory locations by executing en instruction with an unimplemented encoding. 6-15 6.5 Z80,OOO Instruction Descriptions and For.ats ADC ADC Add With Carry Add With Carry ADC dst, src ADCB ADCL Operation: dst - dst + dst: R src: R src + c The source operand, along with the setting of the C flag, is added to the destination operand and the sum is stored in the destination. The contents of the source are not affected. Twos complement addition is performed. In multiple precision arithmetic, this instruction permits the carry from the addition of low-order operands to be carried into the addition of high-order operands. C: Set if there is a carry from the most-significant bit of the result; cleared Flags: otherwise Z: Set if the result is zero; cleared otherwise S: Set if the result is negative; cleared otherwise V: Set if arithmetic overflow occurs, that is, if both operands were of the same sign and the result is of the opposite sign; cleared otherwise D: ADC, ADCL-unaffected; ADCB-cleared H: ADC, ADCL-unaffected; ADCB-set if there is a carry from the most-significant bit of the low-order four bits of the result; cleared otherwise Exceptions: None Addressing Mode Assembler Language Syntax R: ADC Rd, Rs ADCB Rbd, Rbs ADCL RRd, RRs Instruction Format Rd 01111010 1 011 1 0 1 0 1 Example: 6-16 00000010 RRs 1 RRd Ouadword addition can be done with the following instruction sequence, assuming ROO contains one operand and R04 contains the other operand: /ladd low-order longwords ADDL RR2,RR6 ADCL RRO,RR4 /ladd carry and high-order longwords If RRO contains %00000000, RR2 contains % FFFFFFFF, RR4 contains %00004320 and RR6 contains %00000001, then executing the two instructions above leaves the value %00004321 in RRO and %00000000 in RR2. ADD Add ADD dst, src dst: R src: R, 1M, IR, EAM AD DB ADDL Operation: dst - dst + src The source operand is added to the destination operand and the sum is stored in the destination. The contents of the source are not affected. Twos complement addition is performed. c: Set if there is a carry from the most-significant bit of the result; Flags: cleared otherwise Z: Set if the result is zero; cleared otherwise 5: Set if the result is negative; cleared otherwise V: Set if arithmetic overflow occurs, that is, if both operands were of the same sign and the result is of the opposite sign; cleared otherwise D: ADD, ADDL-unaffected; ADDS-cleared H: ADD, ADDL-unaffected; ADDS-set if there is a carry from the most-significant bit of the low-order four bits of the result; cleared otherwise Exceptions: Integer Overflow trap Source Addressing Mode R: Assembler Language Syntax ADD Rd, Rs ADDS Rbd, Rbs ADDL RRd, RRs 1M: Instruction Format ADD Rd, Itdata Rd 11 0 I 010110 I RRs RRd o0 I 0 0 0 0 0 1 I0 0 0 0 I Rd data ADDS Rbd, Itdata o0 I 0 0 0 0 0 0 000 0 data ADDL RRd, Itdata I I Rbd data 00 0 1 0 1 1 0 I0 000 I RRd data (high) data (low) IR: ADD Rd, @RS1 ADDS Rbd, @RS1 loolooooolwi Rs""O I Rd ADDL RRd, @RS1 6-17 Source Addressing Mode Assembler Language Syntax EAM: Instruction Format ADD Rd, eam ADDS Rbd, eam o 1 I0 0 0 0 0 I w I earn I Rd 1, 2, or 3 extension words o1 I 0 1 0 1 1 0 ADDL RRd, eam I earn I RRd 1, 2, or 3 extension words Example: ADD R2, %1254 lIadd the word at % 1254 to R2 in compact mode Before instruction execution: Memory 1252 1254 1256 R2 Flags ~ CZS P/v D H czspdh After instruction execution: Memory 1252~ 1254 0 6 4 4 Flags R2 Ie 3 6 51 C Z S P/v D H 0010dh 1256 Note 1: Word register in compact mode, longword register in segmented or linear modes. 6·18 AND And AND dst, src ANDB ANDL Operation: dst - dst: R src: R, 1M, IR, EAM dst AND src A logical AND operation is performed between the corresponding bits of the source and destination operands, and the result is stored in the destination. A 1 bit is stored wherever the corresponding bits in the two operands are both 1s; otherwise a 0 bit is stored. The contents of the source are not affected. Flags: C: Unaffected Z: Set if the result is zero; cleared otherwise S: Set if the most-significant bit of the result is set; cleared otherwise P: AND, ANDL- unaffected; ANDB - set if parity of the result is even; cleared otherwise D: Unaffected H: Unaffected Exceptions: Source Addressing Mode R: None Assembler Language Syntax Instruction Format AND Rd, Rs ANDB Rbd, Rbs ANDL RRd, RRs Rd 01111010 00000010 I I RRd ooj 000111 I0000 I Rd RRs 10 000111 1M: AND Rd, #data data ANDB Rbd, #data o0 I 0 0 0 1 1 0 0 00 0 ANDL RRd, #data I Rbd data data 01111010 001000111 0000 0010 00001 RRd data (high) data (low) 6-19 Source Addressing Mode IR: Assembler Language Syntax Instruction Format AND Rd. @Rs' AN DB Rbd. @Rs' ANDL RRd. @Rs' EAM: AND Rd. earn ANDB Rbd. earn 01111010 00000010 001 000111 Rs*O I RRd o 1 10 0 0 1 11 W eam I Rd 1,2, or 3 extension words ANDL RRd. earn 0111101000000010 o 11 0 0 0 1 1 1 eam 1 RRd 1,2, or 3 extension words Example: ANDB RL3, II %CE Before instruction execution: RL3 Flags 11100111 CZSPNDH czspdh After instruction execution: RL3 Flags 11000110 CZSPNDH c011dh Note t: Word register in compact mode. longword register in segmented or linear modes. 6·20 BIT Bit Test BIT dst, src BITB BITL dst: R, IR, EAM src: 1M or dst: R src: R Operation: Z- NOT dst The specified bit within the destination operand is tested, and the Z flag is set to 1 if the specified bit is 0; otherwise the Z flag is cleared to O. The contents of the destination are not affected. The bit number (the source) can be specified either as an immediate value (static), or as a word register that contains the value (dynamic). In the dynamic case, the destination operand must be in a register, and the source operand must be in a word register. The bit number is a value from 0 to 7 for BITB, 0 to 15 for BIT, or 0 to 31 for BITL with 0 indicating the least-significant bit. Only the lower three bits of the source operand are used to specify the bit number for BITB, only the lower four bits are used for BIT, and only the lower five bits are used for BITL. c: Flags: Unaffected Z: Set if specified bit is zero; cleared otherwise S: Unaffected V: Unaffected 0: Unaffected H: Unaffected Exceptions: None Bit Test Static Destination Addressing Mode R: Assembler Language Syntax Instruction Format BIT Rd, #b BITB Rbd, #b BITL RRd, #b b 01111010 101100111b IR: RRd b BIT @Rdl, #b BITB @Rd', #b BITL @Rdl, #b 01111010 001 1001 EAM: 0000 0010 BIT eam, #b BITB eam, #b 1b 0000 0010 Rd*O 1 b 01 11 001 11 Wi eam 1 b 1, 2,or 3 extension words 6-21 Bit Test Static (Continued) Addressing Mode Assembler Language Syntax BITL earn, ffb Instruction Format 01111010 00000010 o 1110 0 1 1 1beam 1 b 1, 2, or 3 extension words Bit Test Dynamic Addressing Mode R: Assembler Language Syntax BIT Rd, Rs BITB Rbd, Rs Instruction Format 001100111 w 0000 00001 BITL RRd, Rs Rd 01111010 0000 0000 0000 0010 0011 001 1 1 0000 00001 RRd Example: Rs 0000 0000 If register RH2 contains % B2 (10110010), executing the instruction BITB RH2, #0 leaves the Z flag set to 1. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-22 Rs BRKPT Breakpoint BRKPT Operation: SP-SP - 6 @sp-ps SP- SP - 2 @ SP instruction PS - Breakpoint trap PS This is a one word instruction that causes a Breakpoint trap. This instruction can be used by a software debugger to replace the first word of the instruction where a breakpoint is set. Flags: Flags loaded from Program Status Area Exceptions: Breakpoint trap Addressing Mode Assembler Language Syntax BRKPT Instruction Format 1011110 10 10000 000 1 1 6-23 CALL Call Operation: CALL dst dst: IR, EAM Compact tmp - EFFECTIVEJDDRESS (dst) SP -SP - 2 @SP-PC Segmented or Linear tmp - EFFECTIVEJDDRESS (dst) SP-SP - 4 @SP-PC This instruction transfers control to a procedure or subroutine. The current contents of the Program Counter (PC) are pushed onto the top of the processor stack. The Stack Pointer (SP) pushed is R15 in compact mode, or RR14 in segmented or linear mode. (The PC value used is the address of the first instruction word following the CALL instruction.) The destination address, which pOints to the first instruction of the called procedure, is then loaded into the PC. At the end of the called procedure, a RET instruction can be used to return control to the instruction following CALL. RET pops the top of the processor stack back into the PC. Flags: No flags affected Exceptions: None Destination Addressing Mode Assembler Language Syntax IR: EAM: Instruction Format 1001011111 CALL eam o 11 011111 I Rd*O 10 000 1 1eam 10 0 0 0 1,2, or 3 extension words Example: In compact mode, if the contents of the PC are % 1000 and the contents of the Stack Pointer (R15) are % 3002, executing the instruction CALL %2520 causes the SP to be decremented to % 3000, the value % 1004 (the address following the CALL instruction with Direct Address mode specified) to be loaded into the word at location %3000, and the PC to be loaded with the value %2520. The PC now points to the address of the first instruction in the procedure to be executed. Note 1: Word register in compact mode. longword register in segmented or linear modes. 6-24 CALR Call Relative Operation: CALR dst dst: RA Compact SP- SP - 2 @SP-PC PC - PC - (2 X displacement) Segmented or Linear SP- SP - 4 @SP-PC PC - PC - (2 X displacement) The current contents of the Program Counter (PC) are pushed onto the top of the processor stack. The Stack Pointer (SP) used is R15 in compact mode, or RR14 in segmented or linear mode. (The PC value used is the address of the first instruction word following the CALR instruction.) The destination address, which points to the first instruction of the called procedure, is calculated and then loaded into the PC. At the end of the called procedure, a RET instruction can be used to return control of the instruction following CALR. RET pops the top of the processor stack back into the PC. The destination address is calculated by subtracting twice the displacement in the instruction from the current value of the PC. The displacement is a 12-bit signed value in the range -2048 to 2047. Thus, the destination address must be in the range -4092 to 4098 bytes from the start of the CALR instruction. The assembler automatically calculates the displacement by subtracting the address given by the programmer from the PC value of the following instruction and dividing the result by two. Flags: No flags affected Exceptions: None Destination Addressing Mode Assembler Language Syntax RA: CALR address Example: Instruction Format displacement In linear mode, if the contents of the PC are %00001000 and the contents of the SP (RR14) are % FFFF3002, executing the instruction CALR PROC causes the SP to be decremented to % FFFF3000, the value %00001002 (the address following the CALR instruction) to be loaded into the longword location % FFFF3000, and the PC to be loaded with the address of the first instruction in procedure PROC. 6-25 CHK Check CHK dst, src CHKB CHKL Operation: dst: R src: 1M, IR, EAM tmp - EFFECTIVE._ADDRESS (src) lower - @tmp if dst < lower then Bounds Check trap tmp - tmp + (1 if CHKB; 2 if CHK; 4 if CHKL) upper - @tmp if dst > upper then Bounds Check trap The destination is compared against the bounds specified by the source operand. If the destination is less than the lower bound or greater than the upper bound, a Bounds Check trap occurs. The destination and bounds are compared as signed integers. The contents of the source and destination are not affected. The source specifies the lower bound. The upper bound is located at the next consecutive byte, word, or longword. Flags: No flags affected. Exceptions: Bounds Check trap Source Addressing Mode 1M: Assembler Language Syntax CHK Rd. #Iower. #upper Instruction Format 001001101 0000 1 01 0 00001 0000 0000 Rd lower upper CHKB Rbd. #Iower. #upper 001 001 1 00 0000 1 01 0 00001 Rbd CHKL RRd. #Iower. #upper 0000 0000 lower upper 001001101 0000 1 01 1 00001 RRd 0000 0000 lower (high) lower (low) upper (high) upper (low) 6-26 Source Addressing Mode IR: Assembler Language Syntax Instruction Format CHK Rd, @RSI CHKB Rbd, @RSI 001 0 01 10lw Rs*O 1 01 0 o 0 0 0 1 Rd 0000 0000 CHKL RRd, @RSI EAM: CHK Rd, earn CHKB Rbd, earn 001 0011 01 Rs*O 1 01 1 o 0 0 01 RRd 0000 0000 I o 1 0 0 1 1 olw o 0 0 0 1 Rd eam 1010 0000 0000 1,2, or 3 extension words CHKL RRd, earn I o1 001101 o000 I RRd eam 1011 0000 0000 1, 2, or 3 extension words Example: If RR2 contains 11, executing the instruction CHKL RR2, #0, #10 causes a Bounds Check trap because the value in RR2 is greater than the upper bound of 10. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-27 CLR Clear CLR dst CLRB CLRL Operation: dst: R, IR, EAM dst-o The destination is cleared to O. Flags: No flags affected. Exceptions: None Destination Addressing Mode Assembler Language Syntax R: Instruction Format CLR Rd CLRB Rbd CLRL RRd IR: CLR @Rd 1 CLRB @Rd 1 CLRL @Rd 1 EAM: CLR eam CLRB eam 11 01 0 1 1 1 00 1 RRd 10 1 0 0 100 1001 1 0 1wi Rd '" 0 11 000 I 10 0 0 1 1 1 0 0 I Rd '" 0 I0 1 0 0 I I I 01100110lwl eam 11000 1, 2, or 3 extension words CLRL eam o1 10 1 1 1 0 0 1 eam 10 1 0 0 1, 2, or 3 extension words Example: In linear mode, if the longword at location %OOOOABBA contains 13, executing the instruction CLRL %ABBA leaves the value 0 in the longword at location %OOOOABBA. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-28 COM Complement COM dst COMB COML Operation: dst - dst: R, IR, EAM NOT dst The contents of the destination are complemented (ones complement); all 1 bits are changed to 0, and vice-versa. Flags: C: Unaffected Z: Set if the result is zero; cleared otherwise S: Set if the most-significant bit of the result is set; cleared otherwise P: COM, COML-unaffected; COMB-set if parity of the result is even; cleared otherwise D: Unaffected H: Unaffected Exceptions: Destination Addressing Mode R: None Assembler Language Syntax Instruction Format COM Rd COMB Rbd COML RRd 11 0 I0 1 1 1 0 0 I RRd 10010011 0IwIRd '" 0 100001 IR: I 10 0 0 1 1 1 00 EAM: I0 0 0 01 COM eam COMB eam I I o 110 0 1 1 0 wJ Rd '" 0 100 earn 001 I0 0 0 0 1, 2, or 3 extension words COML eam o1 I0 1 1 1 0 0 I earn I0 0 0 0 1,2, or 3 extension words Example: If register R1 contains % 2552 (0010010101010010), executing the instruction COM R1 leaves the value %DAAD (1101101010101101) in R1. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-29 COMFLG Complement Flag COMFLG flag FLAGS < 7:4 > - Flag: C, Z, S, P, V FLAGS < 7:4> XOR instruction<7:4> Operation: Any combination of the C, Z, S, P or V flags can be complemented (each 1 bit is changed to 0, and vice-versa). If the bit in the instruction corresponding to a flag is 1, the flag is complemented; if the bit is 0, the flag is unchanged. All other bits in the Flags register are unaffected. Note that the P and V flags are represented by the same bit. There can be one, two, three or four operands in the assembly language statement, in any order. Flags: C: Complemented if specified; unaffected otherwise Z: Complemented if specified; unaffected otherwise S: Complemented if specified; unaffected otherwise P/V: Complemented if specified; unaffected otherwise 0: Unaffected H: Unaffected Exceptions: None Assembler Language Syntax COMFLG flags Example: Instruction Format 10001101 If the C, Z, and S flags are all clear (= 0), and the P flag is set ( = 1), executing the instruction COMFLG P, S, Z, C leaves the C, Z, and S flags set, and the P flag clear. 6-30 Ie Z S PIVI 0 1 0 1 I CP Compare CP dst, src CPB CPL Operation: dst: src: or dst: src: R R, 1M, IR, EAM IR, EAM 1M dst - src The source operand is compared to (subtracted from) the destination operand, and the flags are set accordingly. The flags can then be used for arithmetic and logical conditional jumps. Both operands are unaffected; the only action is the setting of the flags. Subtraction is performed by adding the twos complement of the source operand to the destination operand. There are two variants of this instruction: Compare Register compares the contents of a register against an operand specified by any of the basic addressing modes; Compare Immediate performs a comparison between an operand in memory and an immediate value. Flags: C: Cleared if there is carry from the most-significant bit of the result; set otherwise, indicating a borrow Z: Set if the result is zero; cleared otherwise S: Set if the result is negative; cleared otherwise V: Set if arithmetic overflow occurs, that is, if both operands were of opposite signs and the sign of the result is the same as the sign of the source; cleared otherwise 0: Unaffected H: Unaffected Exceptions: None Compare Register Source Addressing Mode R: Assembler Language Syntax CP Rd, Rs CPB Rbd, Rbs CPL RRd, RRs 1M: Instruction Format CP Rd, #data Rd 11010100001 RRs RRd 001 001011100001 Rd data CPB Rbd, #data o0 I 0 0 1 0 1 0 0000 data data CPL RRd, #data I Rbd 001 010000 10000 I RRd data (high) data (low) 6-31 Source Addressing Mode IR: Assembler Language Syntax CP Rd, @RSl CPS Rbd, @RSl CPL RRd, @RSl EAM: CP Rd, eam CPS Rbd, eam Instruction Format I 0 0 10 0 1 0 11 w1 Rs *0 1 Rd 1001010000lRs"ooi RRd o 110 0 1 0 1wi J eam Rd 1,2, or 3 extension words CPL RRd, eam 011010000 I eam J RRd 1, 2, or 3 extension words Compare Immediate Destination Addressing Mode Assembler Language Syntax IR: CP @Rdl, #data Instruction Format 001001101 Rd * oj 0 001 data CPS @Rd1 , #data 001001100 Rd * oj 0001 data CPL @Rd1 , #data data 001001101 Rd"oO 10 0 11 data (high) data (low) EAM: CP eam, #data eam 011001101 J 0001 1,2, or 3 extension words data CPS eam, #data o 100 110 01 eam J 0 0 0 1 , 2, or 3 extension words data 6-32 J data 1 Destination Addressing Mode Assembler Language Syntax CPL eam, #data Instruction Format o 11 00 110 11 earn 10 0 1 1 1, 2, or 3 extension words data (high) data (low) Example: In linear mode, if register RR4 contains %00000400, the byte at location %00000400 contains 2, and the source operand is the immediate value 3, executing the instruction CPS @RR4,#3 leaves the C flag set, indicating a borrow, the S flag set, and the Z and V flags cleared, Note 1: Word register in compact mode, longword register in segmented or linear modes, 6-33 CPO Compare and Decrement CPO dst, src, r, cc CPOB CPOL Operation: dst: R src: IR dst - src AUTOOECREMENT src (by 1 if CPOB; by 2 if CPO; by 4 if CPOL) r- r - 1 This instruction is used to search a string of data for an element meeting the specified condition. The contents of the location addressed by the source register are compared to (subtracted from) the destination operand, and the Z flag is set to 1 if the condition code specified by "cc" is satisfied by the comparison; otherwise the Z flag is cleared to O. See Section 6.3 for a list of condition codes. Both operands are unaffected. The source register is then decremented by one if CPOB, by two if CPO, or by four if CPOL, thus moving the pOinter to the previous element in the string. The word register specified by "r" (used as a counter) is then decremented by one. The source, destination and count registers must be distinct and non-overlapping registers. Flags: C: Cleared if there is a carry from the most-significant bit of the result of the comparison; set otherwise, indicating a borrow Z: Set if the condition code specified by cc is satisfied by the comparison; cleared otherwise S: Set if the result of the comparison is negative; cleared otherwise V: Set if the result of decrementing r is zero; cleared otherwise 0: Unaffected H: Unaffected Exceptions: None Source Addressing Mode IR: Assembler Language Syntax Instruction Format CPD Rd, @Rs', r, cc CPDB Rbd, @Rs', r, cc 1011101JW Rs * 0 1000 ooooJ CPDL RRd, @Rsl, r, cc 10111001 00001 Example: r Rd cc Rs*O 1000 RRd cc In linear mode, if register RHO contains % FF, register RR4 contains %00004001, the byte at location %4001 contains %00, and register R3 contains 5, executing the instruction CPOB RHO, @RR4, R3, EQ leaves the Z flag cleared since the result of the comparison was not "equal." Register RR4 contains the value %00004000 and R3 contains 4. In compact mode, a word register must be used instead of RR4. Note': Word register in compact mode, longword register in segmented or linear modes. 6-34 CPDR Compare, Decrement and Repeat CPDR dst, CPDRB CPDRL Operation: src, r, cc dst: R src: IR repeat dst - src AUTODECREMENT src (by 1 if CPDRB; by 2 if CPDR; by 4 if CPDRL) r- r - 1 until cc is satisfied or r = 0 This instruction is used to search a string of data for an element meeting the specified condition. The contents of the location addressed by the source register are compared to (subtracted from) the destination operand, and the Z flag is set to 1 if the condition code specified by "cc" is satisfied by the comparison; otherwise the Z flag is cleared to O. See Section 6.3 for a list of condition codes. Both operands are unaffected. The source register is then decremented by one if CPDRB, by two if CPDR, or by four if CPDRL, thus moving the pointer to the previous element in the string. The word register specified by "r" (used as a counter) is then decremented by one. The entire operation is repeated until either the condition is satisfied or the result of decrementing r is zero. This instruction can search a string of length 1 to 65,536 data elements. The source, destination, and counter registers must be distinct and non-overlapping registers. This instruction can be interrupted after each execution of the basic operation. C: Cleared if there is a carry from the most-significant bit of the result of the last Flags: comparison; set otherwise, indicating a borrow Z: Set if the condition code specified by cc is satisfied by the last comparison; cleared otherwise S: Set if the result of the last comparison is negative; cleared otherwise V: Set if the result of decrementing r is zero; cleared otherwise 0: Unaffected H: Unaffected Exceptions: Source Addressing Mode IR: None Assembler Language Syntax CPDR Rd, @RS1, r, cc CPDRB Rbd, @Rsl, r, cc Instruction Format 10111011w Rs,;. 0 1100 r cc 00001 CPDRL RRd, @RS1, r, cc 10111001 00001 r Rd Rs,;.O 1100 RRd cc 6-35 Example: In compact mode, if the string of words starting at location %2000 contains the values 0, 2, 4, 6 and 8, register R2 contains % 2008, R3 contains 5, and R8 contains 5, executing the instruction CPDR R3, @R2, R8, GT leaves the Z flag set, indicating the condition was satisfied. Register R2 contains the value %2002, R3 still contains 5, and R8 contains 2. In segmented or linear mode, a longword register must be used instead of R2. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6·36 CPI Compare and Increment CPI dst, src, r, cc CPIB CPIL Operation: dst: R src: IR dst - src AUTOINCREMENT src (by 1 if CPIB; by 2 if CPI; by 4 if CPIL) r - r-1 This instruction is used to search a string of data for an element meeting the specified condition. The contents of the location addressed by the source register are compared to (subtracted from) the destination operand and the Z flag is set to 1 if the condition code specified by "cc" is satisfied by the comparison; otherwise the Z flag is cleared to O. See Section 6.3 for a list of condition codes. Both operands are unaffected. The source register is then incremented by one if CPIB, by two if CPI or by four if CPIL, thus moving the pOinter to the next element in the string. The word register specified by "r" (used as a counter) is then decremented by one. The source, destination, and counter registers must be distinct and non-overlapping registers. Flags: C: Cleared if there is a carry from the most-significant bit of the result of the comparison; set otherwise, indicating a borrow Z: Set if the condition code specified by cc is satisfied by the comparison; cleared otherwise S: Set if the result of the comparison is negative; cleared otherwise V: Set if the result of decrementing r is zero; cleared otherwise D: Unaffected H: Unaffected Exceptions: Source Addressing Mode IR: None Assembler Language Syntax Instruction Format CPI Rd, @Rsl, r, cc CPIB Rbd, @Rsl, r, cc 10111011w R8;100 0000 0000 CPIL RRd, @Rsl, r, cc I Rd cc 1 01 1 1 001 Rs;loO 0000 00001 RRd cc 6-37 Example: This instruction can be used in a "loop" of instructions that searches a string of data for an element meeting the specified condition, but an intermediate operation on each data element is required. In compact mode, executing the following sequence of instructions "scans while numeric," that is, a string is searched until either an ASCII character outside the range "0" to "9" is found, or the end of the string is reached. This involves a range check on each character (byte) in the string. In segmented or linear mode, a longword register must be used instead of R1. LD LDA LDB R3, HSTRLEN R1,STRSTART RLO,H'9' //initialize counter //load start address //largest numeric char CPB JR CPIB JR JR @R1,H'0' ULT,NONNUMERIC RLO, @R1, R3, ULE NZ, NONNUMERIC NOV, LOOP IItest char LOOP: < '0' //test char:5 '9' IIrepeat until counter =0 DONE: NONNUMERIC: IIhandle non-numeric char Note 1: Word register in compact mode. longword register in segmented or linear modes. 6-38 CPIR Compare, Increment and Repeat CPIR dst, src, r, cc CPIRB CPIRL Operation: dst: R src: IR repeat dst - src AUTOINCREMENT src (by 1 if CPIRB; by 2 if CPIR; by 4 if CPIRL) r-r - 1 0 until cc is satisfied or r = This instruction is used to search a string of data for an element meeting the specified condition. The contents of the location addressed by the source register are compared to (subtracted from) the destination operand, and the Z flag is set to 1 if the condition code specified by "cc" is satisfied by the comparison; otherwise the Z flag is cleared to O. See Section 6.3 for a list of condition codes. Both operands are unaffected. The source register is then incremented by one if CPIRB, by two if CPIR, or by four if CPIRL, thus moving the pointer to the next element in the string. The word register specified by "r" (used as a counter) is then decremented by one. The entire operation is repeated until either the condition is satisfied or the result of decrementing r is zero. This instruction can search a string of length 1 to 65,536 data elements. The source, destination, and counter registers must be distinct and non-overlapping registers. This instruction can be interrupted after each execution of the basic operation. C: Cleared if there is a carry from the most-significant bit of the result of the last Flags: comparison; set otherwise, indicating a borrow Z: Set if the condition code specified by cc is satisfied by the last comparison; cleared otherwise S: Set if the result of the last comparison is negative; cleared otherwise V: Set if the result of decrementing r is zero; cleared otherwise D: Unaffected H: Unaffected Exceptions: Source Addressing Mode IR: None Assembler Language Syntax Instruction Format CPIR Rd, @RSI. r. cc CPIRB Rbd,@Rsl, r, cc 10111011W R... O 0100 00001 CPIRL RRd, @Rsl, r, cc r 1 0111 001 00001 r Rd cc Rs .. O 01 00 RRd cc 6-39 Example: The following sequence of instructions (to be executed in compact mode) can be used to search a string for an ASCII return character. The pOinter to the start of the string is set, the string length is set, the character (byte) to be searched for is set, and then the search is accomplished. Testing the Z flag determines whether the character was found. In segmented or linear mode, a longword register must be used instead of R1. LOA LD LOB CPIRB JR R1, STRSTART R3,IISTRLEN RLD, I %0 RLD, @R1, R3, EQ Z, FOUND "hex code for return is 0 Note 1: Word register in compact mode. longword register in segmented or linear modes. 6·40 CPSD Compare String and Decrement CPSD dst, src, r, cc CPSDB CPSDL Operation: dst: IR src: IR dst - src AUTODECREMENT dst and src (by 1 if CPSDB; by 2 if CPSD; by 4 if CPSDL) r- r - 1 This instruction is used to compare two strings of data in order to test the specified condition. The contents of the location addressed by the source register are compared to (subtracted from) the contents of the location addressed by the destination register. The Z flag is set to 1 if the condition code specified by "cc" is satisfied by the comparison; otherwise the Z flag is cleared to O. See Section 6.3 for a list of condition codes. Both operands are unaffected. The source and destination registers are then decremented by one if CPSDB, by two if CPSD or by four if CPSDL, thus moving the pointers to the previous elements in the strings. The word register specified by "r" (used as a counter) is then decremented by one. The source, destination and count register must be distinct, non-overlapping registers. Flags: C: Cleared if there is a carry from the most-significant bit of the result of the comparison; set otherwise, indicating a borrow. Z: Set if the condition code specified by cc is satisfied by the comparison; cleared otherwise S: Set if the result of the comparison is negative; cleared otherwise. V: Set if the result of decrementing r is zero; cleared otherwise D: Unaffected H: Unaffected Exceptions: None Addressing Mode Assembler Language Syntax IR: CPSD @Rd 1, @Rsl, r, cc CPSDB @Rdl, @RS1, r, cc Instruction Format 10111011W Rs*O 1010 00001 CPSDL @Rdl, @RS1, r, cc r Rd*O cc 1 01 1 1 001 Rs*O 1 01 0 00001 Rd*O r cc 6-41 Example: In linear mode, if register RR24 contains %00002000, the byte at location %00002000 contains % FF, register RR26 contains %00003000, the byte at location %00003000 contains %00, and register R4 contains 1, executing the instruction CPSDB @RR24, @RR26, R4, UGE leaves the Z flag set to 1 since the result of the comparison was "unsigned greater than or equal", and the V flag set to 1 to indicate that the counter R4 now contains O. RR24 contains %00001 FFF, and RR26 contains %00002FFF. In compact mode, word registers must be used instead of RR24 and RR26. Note 1: Word register in compact mode. longword register in segmented or linear modes. 6-42 CPSDR Compare String, Decrement and Repeat CPSDR dst, src,r, cc CPSDRB CPSDRL Operation: dst: IR src: IR repeat dst - src AUTODECREMENT dst and src (by 1 if CPSDRB; by 2 if CPSDR; by 4 if CPSDRL) r- r - 1 until cc is satisfied or r = 0 This instruction is used to compare two strings of data until the specified condition is true. The contents of the location addressed by the source register are compared to (subtracted from) the contents of the location addressed by the destination register. The Z flag is set to 1 if the condition code specified by "cc" is satisfied by the comparison; otherwise the Z flag is cleared to O. See Section 6.3 for a list of condition codes. Both operands are unaffected. The source and destination registers are then decremented by one if CPSDRB, by two if CPSDR, or by four if CPSDRL, thus moving the pointers to the previous elements in the strings. The word register specified by "r" (used as a counter) is then decremented by one. The entire operation is repeated until either the condition is satisfied or the result of decrementing r is zero. This instruction can compare strings of length 1 to 65,536 data elements. The source, destination, and counter registers must be distinct and non-overlapping registers. This instruction can be interrupted after each execution of the basic operation. Flags: C: Cleared if there is a carry from the most-significant bit of the result of the last comparison; set otherwise, indicating a borrow. Z: Set if the condition code specified by cc is satisfied by the last comparison; cleared otherwise 5: Set if the result of the last comparison is negative; cleared otherwise V: Set if the result of decrementing r is zero; cleared otherwise D: Unaffected H: Unaffected Exceptions: None Addressing Mode Assembler Language Syntax IR: CPSDR @Rdl, @RS1, r,cc CPSDRB @Rd 1, @RS1, r, cc Instruction Format 10111011 w Rs*O CPSDRL @Rd1, @RS1, r, cc 111 0 cc 00001 Rd*O 10111001 Rs*O 1 1 1 0 0000 I r Rd*O cc 6-43 ___ ._.~_~~~.cc. -,~-~-------,-, Example: In compact mode, if the words from location % 1000 to % 1006 contain the values 0, 2,4, and 6, the words from location %2000 to %2006 contain the values 0, 1, 1, 0, register R13 contains % 1006, register R14 contains % 2006, and register RO contains 4, executing the instruction CPSDR @R13, @R14, RO, EQ leaves the Z flag set to 1 since the result of the comparison was "equal" (locations % 1000 and %2000 both contain the value 0). The V flag is set to 1 indicating RO was decremented to zero. R13 contains %OFFE, R14 contains % 1FFE, and RO contains O. In segmented or linear mode, longword registers must be used instead of R13 and R14. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-44 ------- CPSI Compare String and Increment CPSI dst, src, r, cc CPSIB CPSIL Operation: dst: IR src: IR dst - src AUTOINCREMENT dst and src (by 1 if CPSIB; by 2 if CPSI; by 4 if CPSIL) r- r - 1 This instruction is used to compare two strings of data, in order to test the specified condition. The contents of the location addressed by the source register are compared to (subtracted from) the contents of the location addressed by the destination register. The Z flag is set to 1 if the condition code specified by "cc" is satisfied by the comparison; otherwise the Z flag is cleared to o. See Section 6.3 for a list of condition codes. Both operands are unaffected. The source and destination registers are then incremented by one if CPSIB, by two if CPSI or by four if CPSIL, thus moving the pointers to the next elements in the strings. The word register specified by "r" (used as a counter) is then decremented by one. The source, destination and count register must be distinct, non-overlapping registers. Flags: C: Cleared if there is a carry from the most-significant bit of the result of the comparison; set otherwise, indicating a borrow Z: Set if the condition code specified by cc is satisfied by the comparison; cleared otherwise S: Set if the result of the comparison is negative; cleared otherwise V: Set if the result of decrementing r is zero; cleared otherwise D: Unaffected H: Unaffected Exceptions: None Addressing Mode Assembler Language Syntax Instruction Format IR: CPSI @Rdl,@Rsl,r,cc CPSIS @Rd1,@Rsl,r, cc 10111011wRa;e.0 0010 00001 CPSIL @Rd1, @Rsl, r, cc Rd;e.O cc 1 0 1 1 1 001 Ra;e.O 00 1 0 00001 Rd;e.O cc r 6-45 Example: This instruction can be used in a "loop" of instructions that compares two strings until the specified condition is true, but where an intermediate operation on each data element is required. The following sequence of instructions (executed in compact mode), attempts to match a given source string to the destination string which is known to contain all upper-case characters. The match should succeed even if the source string contains some lower-case characters. This involves a forced conversion of the source string to upper-case (only ASCII alphabetic letters are assumed) by resetting bit 5 of each character (byte) to 0 before comparison. LDA LDA LD R1,SRCSTART R2,DSTSTART R3,#STRLEN IIload start addresses RESS CPSIS JR JR @R1,#5 @R1,@R2, R3, NE Z, NOTEOUAL NOV, LOOP DONE: //force upper-case IIcompare until not equal lIexit loop if match fails IIrepeat until counter = 0 IImatch succeeds NOTEOUAL: IImatch fails lIinitialize counter LOOP: In segmented or linear mode, longword registers must be used instead of R1 and R2. Note 1: Word register in compact mode. longword register in segmented or linear modes. 6-46 CPSIR Compare String, Increment and Repeat CPSIR dst,src,r,cc CPSIRB CPSIRL Operation: dst: IR src: IR repeat dst - src AUTOINCREMENT dst and src (by 1 if CPSIRB, by 2 if CPSIR; by 4 if CPSIRL) r- r - 1 until cc is satisfied or r 0 = This instruction is used to compare two strings of data until the specified condition is true. The contents of the location addressed by the source register are compared to (subtracted from) the contents of the location addressed by the destination register. The Z flag is set to 1 if the condition code specified by "cc" is satisfied by the comparison; otherwise the Z flag is cleared to O. See Section 6.3 for a list of condition codes. Both operands are unaffected. The source and destination registers are then incremented by one if CPSIRB, by two if CPSIR, or by four if CPSIRL, thus moving the pointers to the next elements in the strings. The word register specified by "r" (used as a counter) is then decremented by one. The entire operation is repeated until either the condition is satisfied or the result of decrementing r is zero. This instruction can compare strings of length 1 to 65,536 data elements. The source, destination, and counter registers must be distinct and non-overlapping registers. This instruction can be interrupted after each execution of the basic operation. Flags: C: Cleared if there is a carry from the most-significant bit of the result of the last comparison; set otherwise, indicating a borrow. Z: Set if the condition code specified by cc is satisfied by the last comparison; cleared otherwise. . S: Set if the result of the last comparison is negative; cleared otherwise V: Set if the result of decrementing r is zero; cleared otherwise D: Unaffected H: Unaffected Exceptions: None Addressing Mode Assembler Language Syntax Instruction Format IR: CPSIR @Rd 1 ,@Rsl,r,cc CPSIRB @Rdl,@Rsl,r,cc 10111011W Rs*O 0110 00001 CPSIRL @Rd1 ,@Rsl,r,cc Rd*O cc 1 01 1 1 001 Rs*O 01 1 0 0000\ Rd*O r cc 6-47 Example: The CPSIR instruction can be used to compare text strings for lexicographic order. (For most common character encodings - for example, ASCII and EBCDIC - lexicographic order is the same as alphabetic order for alphabetic text strings that do not contain blanks.) Let S1 and S2 be text strings of lengths L1 and L2. According to lexicographic ordering, S1 is said to be "less than" or "before" S2 if either of the following is true: • At the first character position at which S1 and S2 contain different characters, the character code for the S1 character is less than the character code for the S2 character. • S1 is shorter than S2 and is equal, character for character, to an initial substring of S2. For example, using the ASCII character code, the following strings are ascending lexicographic order: A AA ABC ABCD ABD Assume that the address of S1 is in RR2, the address of S2 is in RR4, the lengths L1 and L2 of S1 and S2 are in RO and R1, and the shorter of L1 and L2 is in R6. The following sequence of instructions (executed in segmented or linear mode) will determine whether S1 is less than S2 in lexicographic order: CPSIRB @RR2, @RR4, R6, NE IIscan to first unequal character lithe following flags settings are possible: Z = 0, V = 1: Strings are equal through L1 character (Z = 0, V = 0 cannot occur). Z = 1, V = 0 or 1: A character position was found at which the strings are unequal. C = 1 (S = 0 or 1): The character in the RR2 string was less (viewed as numbers from 0 to 255, not as numbers from -128 to + 127). C = 0 (S = 0 or 1): The character in the RR2 string was not less JR Z,CHALCOMPARE /lif Z = 1, compare the characters lIotherwise, compare string lengths CP RO,R1 JR LT, S1_IS_LESS JR S1_NOT_LESS CHALCOMPARE: IIULT is another name for C= 1 JR ULT, S1_IS_LESS S1_NOT LESS: Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-48 CVT Convert CVTBW dst, src CVTBL CVTWB CVTWL CVTLB CVTLW Operation: dst - dst: src: or dst: src: R R, IR, EAM IR, EAM R CONVERSION (src) The contents of the source are converted to the size of the destination and then stored into the destination. The contents of the source are not affected. The source and destination are treated as signed integers. The size of the destination operand is indicated by the fourth letter of the opcode mnemonic (B, W, or L); the size of the source operand is indicated by the last letter. For CVTWB, CVTLB, and CVTLW the source is sign-extended to the size of the destination before storing. For CVTBW, CVTBL, and CVTWL the source is truncated to the size of the destination, keeping the less-significant bits, before storing. If the source cannot be exactly represented in the destination because of truncation, then the V flag is set to 1; otherwise the V flag is cleared to O. Flags: C: Z: S: V: Exceptions: Integer Overflow trap Cleared Set if the result is zero; cleared otherwise Set if the most-significant bit of the result is set; cleared otherwise. CVTBW, CVTBL-set if the source is not in the range -128 to 127; cleared otherwise; CVTWL-set if the source is not in the range - 32768 to 32767; cleared otherwise; CVTLB, CVTLW-cleared 0: Unaffected H: Unaffected Convert Register Source Addressing Mode R: Assembler Language Syntax CVTBW Rbd, Rs Instruction Format 0111100000000001 1 0 11 0 0 0 0 1 CVTBL Rbd. RRs I RRs 1 Rbd 0111100000100001 1 011 0 0 0 0 0 CVTWL Rd. RRs 1 Rbd 0111100000000001 10 010100 CVTWB Rd, Rbs Rs Rbs I Rd 0111100000100001 I 10 010100 RRs I Rd 6-49 Source Addressing Mode Assembler Language Syntax CVTLB RRd. Rbs CVTLW RRd. Rs Instruction Format 01111000 00110001 101100000 Rbs 1 RRd 01111000 00110001 101100001 IR: CVTBW Rbd. @RS1 CVTWL Rd. @RS1 CVTLB RRd. @RS1 CVTLW RRd. @RS1 EAM: CVTBW Rbd. eam Rs*O I Rbd 01111000 00000011 001010100 CVTWB Rd. @RS1 1 RRd 01111000 00000011 001100001 CVTBL Rbd. @RS1 Rs 01111000 RHO I Rbd 00100011 Rd 00J100000 RHO 1 01111000 00100011 0010101 00 RHO 1 Rd 01111000 00110011 001100000 Rs*O 1 RRd 01111000 00110011 001100001 RHO 1 RRd 01111000 00000011 011100001 earn 1 Rbd 1, 2, or 3 extension words CVTBL Rbd. eam 01111000 00000011 011010100 earn 1 Rbd 1, 2, or 3 extension words CVTWB Rd. eam 01111000 00100011 0111 00000 earn 1 Rd 1, 2, or 3 extension words 6-50 Source Addressing Mode Assembler Language Syntax CVTWL Rd, eam Instruction Format 01111000 01J010100 00100011 eam 1 Rd 1, 2, or 3 extension words CVTLB RRd, eam 01111000 011100000 00110011 eam 1 RRd 1,2, or 3 extension words CVTLW RRd, eam 01111000 01]100001 00110011 eam 1 RRd 1, 2, or 3 extension words Convert Memory Destination Addressing Mode IR: Assembler Language Syntax CVTBW @Rdl, Rs CVTBL @Rd1 , RRs Instruction Format 01111000 00100101 001101110 Rd*O 1 Rs 01111000 0011 01 1 1 0 CVTWB @Rd 1 , Rbs CVTWL @Rd 1, RRs CVTLW @Rdl, Rs Rd*O l RRs 01111000 0000 0101 001101111 Rd*O 1 Rbs 01111000 00110101 001101111 CVTLB @Rdl, Rbs 00110101 Rd*O 1 RRs 01111000 00000101 001011101 Rd*01 Rbs 01111000 0010 0101 001011101 Rd*Oj Rs 6-51 Destination Addressing Mode Assembler Language Syntax EAM: CVTBW earn, Rs Instruction Format 0111100000100101 o 1 11 0 1 1 1 il earn 1 Rs 1, 2, or 3 extension words CVTBL earn, RRs 0111100000110101 0111 01 1 1 0 earn 1 RRs 1, 2, or 3 extension words CVTWB earn, Rbs 01111000 00000101 o 1 11 0 1 1 1 1 earn 1 Rbs 1, 2, or 3 extension words CVTWL earn, RRs 01111000 00110101 o 1 11 0 1 1 1 1 earn 1 RRs 1,2, or 3 extension words CVTLB earn, Rbs 01111000 0000 0101 o 1 10 1 1 1 0 1 earn 1 Rbs 1, 2, or 3 extension words CVTLW earn, Rs 0111100000100101 o 1 10 1 1 1 0 1 earn 1 Rs 1, 2, or 3 extension words Example: If byte register RHO contains the value -100, executing the instruction CVTLB RR4, RHO loads - 100 into longword register RR4, The S flag is set and the C, Z, and V flags are cleared. Note 1: Word register In compact mode, longword register in segmented or linear modes. 6·52 CVTU Convert Unsigned CVTUBW dst, src CVTUBL CVTUWB CVTUWL CVTULB CVTULW Operation: dst - dst: src: or dst: src: R R, IR, EAM IR, EAM R UNSIGNED_CONVERSION (src) The contents of the source are converted to the size of the destination and then stored into the destination. The contents of the source are not affected. The source and destination are treated as unsigned integers. The size of the destination operand is indicated by the fifth letter of the opcode (B, W, or L); the size of the source operand is indicated by the last letter. For CVTUWB, CVTULB, and CVTULW the source is zero-extended to the size of the destination before storing. For CVTUBW, CVTUBL, and CVTUWL the source is truncated to the size of the destination, keeping the less significant bits, before storing. If the source cannot be exactly represented in the destination because of truncation then the V flag is set to 1; otherwise the V flag is cleared to O. Flags: C: Cleared Z: Set if the result is zero; cleared otherwise S: Set if the most-significant bit of the result is set; cleared otherwise. V: CVTUBW, CVTUBL-set if the source is greater than 255; cleared otherwise CVTUWL-set if the source is greater than 65,535; cleared otherwise CVTULB,CVTULW-cleared D: Unaffected H: Unaffected Exceptions: None Convert Register Unsigned Source Addressing Mode R: Assembler Language Syntax CVTUBW RbeI, Rs Instruction Format 01111000 0000 0000 1 0 11 0 0 0 0 1 CVTUBL RbeI, RRs CVTUWB Rd, Rbs 1 Rbd o1 1 1 1 0 0 0 0 0 0 00 0 0 0 1 01 0 1 01 00 RRs 1 Rbd 0111100000100000 1 0 11 0 0 0 0 0 CVTUWL Rd, RRs Rs Rbs J Rd 0111100000100000 1 01 0 1 0 1 00 RRs 1 Rd 6-53 Source Addressing Mode Assembler Language Syntax CVTU LB RRd, Rbs Instruction Format 01111000 1 011 0 0 0 0 0 CvrULW RRd, Rs IR: CvrUBW Rbd, @RSl 0011 0000 I Rbs T RRd 01111000 0011 1011000011 Rs 0000 1 RRd 011110000000 0010 o 0 11 0 0 0 0 1 1 Rs;!o 0 1 CVTUBL Rbd, @RSl 01111000 Rbd 0000 0010 0010101001 Rs;!o01 Rbd CVTUWB Rd, @RSl 01111000 r 0010 0010 Rd 00 1 000001 Rs;!oO 1 CvrUWL Rd, @RSl 01111000 0010 0010 Rd 0010101001 Rs;!oO 1 CvrULB RRd, @RSl 01111000 0011 0010 0011000001 Rs;!oO 1 RRd CvrULW RRd, @RSl EAM: CVTUBW Rbd, earn 01111000 0011 0011 00001 I Rs;!oO I 01111000 0010 RRd 0000 0010 O. 1 11 0 0 0 0 1 1 earn 1 Rbd 1,2, or 3 extension words CVTU BL Rbd, earn 01111000 0000 0010 o 1 I0 1 0 1 0 0 I earn 1 Rbd 1,2, or 3 extension words CVTUWB Rd, earn 01111000 0010 0010 o 1 11 0 0 0 0 0 1 eam 1 Rd 1, 2, or 3 extension words , 6·54 Source Addressing Mode Assembler Language Syntax CVTUWL Rd, earn Instruction Format 01111000 011010100 00100010 Rd earn j 1, 2, or 3 extension words CVTU LB RRd, earn 01111000 0111 00000 001 1 001 0 earn 1 RRd 1, 2, or 3 extension words CVTULW RRd, earn 01111000 01\100001 001 1 0010 earn I RRd 1,2, or 3 extension words . Convert Memory Unsigned Destination Addressing Mode Assembler Language Syntax IR: CVTU BW @Ad1, Rs Instruction Format 01111000 0010 0100 001101110 CVTU BL @Rd1, RRs 01111000 00110100 001101110 CVTUWB @Rd1 , Rbs CVTUWL @Rd1 , RRs CVTU LB @Rd1 , Rbs Rd*O 1 RRs 01111000 0000 0100 0011 01 1 1 1 Rd*Oj Rbs 01111000 00110100 0011 01 1 1 1 Rd*Oj RRs 01111000 ooj 0 1 1 1 0 1 CVTULW @Rdl, Rs Rd*O 1 Rs 01111000 001011101 00000100 Rd*O 1 Rbs 00101100 Rd*O 1 Rs 6-55 Destination Addressing Mode EAM: Assembler Language Syntax CVTU BW eam, Rs Instruction Format 0111100000100100 o 1 11 0 1 1 1 0 eam I Rs 1,2, or 3 !,xtension words CVTUBL eam, RRs 0111100000110100 o 111 01110 eam 1 RRs 1, 2, or 3 extension words CVTUWB eam, Rbs 01 1 1 1 000 0000 0 1 00 o 111 0 1 1 1 1 eam 1 Rbs 1, 2, or 3 extension words CVTUWL eam, RRs 0111100000110100 o 1 11 0 1 1 1 1 eam I RRs 1,2, or 3 extension words CVTU LB eam, Rbs 0111100000000100 o 1J 011101 eam 1 Rbs 1, 2, or 3 extension words CVTU LW eam, Rs 0111100000100100 o1 1 0 1 1 1 0 1 earn 1 Rs 1,2, or 3 extension words Example: If word register R1 contains the value %DF12, executing the instruction CVTUBW RLD, R1 loads % 12 into byte register RLD. The V flag is set and the C, Z, and S flags are cleared. Note 1: Word register in compact mode. longword register in segmented or linear modes. 6·56 DAB Decimal Adjust DAB dst Operation: dst - dst: R DECIMALADJUST (dst) The destination byte is adjusted to form two 4-bit BCD digits following a binary addition or subtraction operation on two BCD encoded bytes. Following addition (ADDB, ADCB) or subtraction (SUBB, SBCB), the table below indicates the operation performed: Instruction ADDB ADCB SUBB SBCB Carry Before DAB Bits 4-7 Value (Hex) H Flag Before DAB Bits 0-3 Value (Hex) Number Added To Byte Carry After DAB 0 0 0 0 0 0 1 1 1 0-9 0-8 0-9 A-F 9-F A-F 0-2 0-2 0-3 0 0 1 0 0 1 0 0 1 0-9 A-F 0-3 0-9 A-F 0-3 0-9 A-F 0-3 00 06 06 60 66 66 60 66 66 0 0 0 1 1 1 1 1 1 0 0 1 1 0-9 0-8 7-F 6-F 0 1 0 1 0-9 6-F 0-9 6-F 00 FA AO 9A 0 0 1 1 The operation is undefined if the destination byte was not the result of a binary addition or subtraction of BCD digits. Flags: C: Set or cleared according to the table above Z: Set if the result is zero; cleared otherwise S: Set if the most-significant bit of the result is set; cleared otherwise V: Unaffected D: Unaffected H: Unaffected Exceptions: None Addressing Mode Assembler Language Syntax R: DAB Rbd Instruction Format 11 011 1 0 0 0 0 1 Rbd 10 00 0I 6-57 Example: If addition is performed using the BCD values 15 and 27, the result should be 42. The sum is incorrect, however, when the binary representations are added in the destination location using standard binary arithmetic. As shown below, adding the two numbers using binary arithmetic gives a result of %3C, leaving the C and H flags clear. + 0001 0010 0011 0101 0111 1100 = % 3C Executing the DAB instruction adjusts this result so that the correct BCD representation is obtained. + 6-58 00111100 0000 0110 0100 0010 = 42 DEC Decrement DEC dst, src DECB DECL Operation: dst - dst - src (src dst: R, IR, EAM src: 1M = 1 to 16) The source operand (a value from 1 to 16) is subtracted from the destination operand and the result is stored in the destination. Subtraction is performed by adding the twos complement of the source operand to the destination operand. If the source operand is omitted from the assembler language statement, the default value is 1. The value of the source field in the instruction is one less than the actual value of the source operand. Thus, the coding in the instruction for the source ranges from 0 to 15, which corresponds to the source values 1 to 16. Flags: C: Unaffected Z: Set if the result is zero; cleared otherwise S: Set if the result is negative; cleared otherwise V: Set if arithmetic overflow occurs, that is, if the operands were of opposite sign and the sign of the result is the same as the sign of the source; cleared otherwise. D: Unaffected H: Unaffected Exceptions: Integer Overflow trap Destination Addressing Mode R: Assembler Language Syntax DEC Rd. In DECB Rbd, In DECL RRd, In IR: DEC @Rdl, In DECB @Rdl, In DECL @Rd 1 , In EAM: DEC eam, In DECB eam, In Instruction Format l 1101101011 w Rd 1 n - 11 01111010 0000 0010 101101011 RRd 1 n - 1 l 1001101011 w Rd*O 1 n -11 01111010 0000 0010 001101011 Rd*O 1 n - 1 01l10101JW eam 1 n - 1 1,2, or 3 extension words DECL eam, In 01111010 0000 0010 011101011 eam 1 n - 1 1,2, or 3 extension words 6·59 Example: If register RR10 contains %0000002A, executing the instruction DECL RR10 leaves the value %00000029 in RR1O. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-60 DECI Decrement Interlocked DECI dst, src DECIB Operation: dst - dst - src (src dst: IR, EAM src: 1M = 1 to 16) The source operand (a value from 1 to 16) is subtracted from the destination operand and the result is stored in the destination. Subtraction is performed by adding the twos complement of the source operand to the destination operand. If the source operand is omitted from the assembly language statement, the default value is 1. The value of the source field in the instruction is one less than the actual value of the source operand. Thus, the coding in the instruction for the source ranges from 0 to 15, which corresponds to the source values 1 to 16. This is an interlocked instruction. No other interlocked accesses are permitted to the destination memory location between fetching and storing the result. Flags: C: Unaffected Z: Set if the result is zero; cleared otherwise S: Set if the result is negative; cleared otherwise V: Set if arithmetic overflow occurs, that is, if the operands were of opposite sign and the sign of the result is the same as the sign of the source; cleared otherwise. D: Unaffected H: Unaffected Exceptions: Integer Overflow trap Destination Addressing Mode IR: EAM: Assembler Language Syntax DECI @Rdl, In DECIB @Rd 1 , In DECI eam, In DECIB eam, In Instruction Format 01111010 0000 0100 001101011w Rd'*0l n-1 01111010 00000100 a 111 0 1 0 11 W e8m 1 n- 1 1,2, or 3 extension 'words Example: This instruction can be used to allocate or release copies of a system resource in a multiprocessor environment. For example, several processes running on different processors can share use of a common page in memory. It is necessary to keep a reference counter for the number of active processes using the shared page. When one of these processes terminates, the reference counter is decremented. The DECI instruction should be used so that one processor completes the fetch and store of the counter in memory before any other processor accesses the counter. DECI REFERENCLCOUNTER, #1 IIdecrement reference counter for shared page Note 1: Word register in compact mode. longword register in segmented or linear modes. 6-61 01 Privileged Instruction Disable Interrupt Ollnt Operation: Int: VI, NVI If instruction = 0 then NVI- 0 If instruction < 1 > = 0 then VI - 0 Any combination of the Vectored Interrupt (VI) or Non-Vectored Interrupt (NVI) control bits in the Flag and Control Word (FCW) are cleared to 0 if the corresponding bit in the instruction is 0, thus disabling the appropriate type of interrupt. If the corresponding bit in the instruction is 1, the control bit is not affected. All other bits in the FCW are not affected. There may be zero, one or two operands in the assembly language statement, in either order, specifying no source operand is equivalent to specifying both VI and NVI. Flags: No flags affected. Exceptions: Privileged Instruction trap Assembler Language Syntax DI in! Example: Instruction Format I 01111100 10000001YI~1 If the NVI and VI control bits are set (1) in the FCW, executing the instruction DI VI leaves the NVI control bit in the FCW set to 1 and the VI control bit in the FCW cleared to O. 6-62 DIV Divide DIV dst, src DIVL Operation: dst: R src: R, 1M, IR, EAM Word: (dst is longword register, src is' word): dst < 31 :0> is divided by src < 15:0 > (dst<31:0> = quotient x src<15:0> + remainder) dst < 15:0> - quotient dst<31:16> - remainder Longword: (dst is quadword register, src is longword ): dst < 63:0 > is divided by src < 31 :0 > (dst<63:0> = quotient x src<31:0> + remainder) dst < 31 :0> - quotient dst < 63:32 > - remainder The destination operand (dividend) is divided by the source operand (divisor). The quotient is stored in the low-order half of the destination and the remainder is stored in the high-order half of the destination. The contents of the source are not affected. Both operands are treated as signed, twos complement integers. Division is performed so that the remainder is of the same sign as the dividend except when the remainder is 0 and the quotient sign is the exclusive OR of the signs of the dividend and divisor except when the quotient is O. For DIV, the destination is a longword register and the source is a word value; for DIVL, the destination is a quadword register and the source is a longword value. For proper instruction execution the "dst field" in the DIVL instruction encoding must specify a valid code for a quadword register. There are four possible outcomes of the signed divide instruction. CASE 1. If the divisor is 0, then the destination register is unmodified, the V and Z flags are set to 1, and the C and S flags are cleared to O. CASE 2. If the quotient is less than _(2 16 - 1) or greater than (2 16 - 1) for DIV or if the quotient is less than - (2 32 - 1) or greater than (2 32 - 1) for DIVL, then the destination register is unmodified. The V flag is set to 1, and the C, Z, and S flags are cleared to O. CASE 3. If the quotient is greater than _(2 15 + 1) and less than (2 15) for DIV or if the quotient is greater than -(2 31 + 1) and less than (2 31 ) for DIVL, then the quotient and remainder are left in the destination register as defined above. The V and C flags are cleared to 0 and the Sand Z flags are set according to the value of the quotient. CASE 4. If none of the above cases applies, then all of the remainder and all but the Sign bit of the quotient are left in the destination register. The V and C flags are set to 1, the Z flag is cleared to 0, and the S flag indicates the sign of the quotient. In this case, the S flag can be replicated into the high-order half of the destination to produce the twos complement representation of the quotient with the same precision as the original dividend. Flags: c: For CASE 4 set; cleared otherwise Z: Set if the quotient or divisor is zero; cleared otherwise S: For CASE 1 and CASE 2 cleared; for CASE 3 and CASE 4 set if the quotient is negative; cleared otherwise V: For CASE 3 cleared; set otherwise D: Unaffected H: Unaffected Exceptions: Integer Overflow trap 6-63 Source Addressing Mode Assembler Language Syntax R: DIV RRd, Rs DIVL RQd, RRs 1M: DIV RRd, #data Instruction Format 1101 011011 I RRd Rs 11010110101 RRs o0 I 0 1 1 0 1 1 RQd I 0 0 0 oT RRd data DIVL RQd, #data 001 011010 I00001 RQd data (high) data (low) IR: DIV RRd, @RS1 DIVL RQd, @RS1 EAM: DIV RRd, eam 10010110111Rs*01 RRd 10010110101 Rs*O o1T 0 1 1 0 1 1 I I RQd eam 1 RRd 1, 2, or 3 extension words DIVL RQd, eam 01 I 01 1 01 0 I eam TRQd 1, 2, or 3 extension words Example: If register AAO (composed of word registers AO and A1) contains %00000022 and register A3 contains 6, executing the instruction DIV AAO,A3 leaves the value %00040005 in AAO (A1 contains the quotient 5 and AO contains the remainder 4). Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-64 DIVU Divide Unsigned DIVU dst, src DIVUL Operation: dst: R src: R, 1M, IR, EAM Word: (dst is longword register, src is word): dst < 31 :0> is divided by src < 15:0 > (dst< 31:0> = quotient x src < 15:0> + remainder) dst < 15:0> - quotient dst<31:16> - remainder Longword: (dst is quadword register, src is longword ): dst<63:0> is divided by src<31:0> (dst< 63:0 > quotient X src < 31 :0> + remainder) dst < 31 :0 > - quotient dst<63:32> - remainder = The destination operand (dividend) is divided by the source operand (divisor). The quotient is stored in the low-order half of the destination and the remainder is stored in the high-order half of the destination. The contents of the source are not affected. Both operands are treated as unsigned integers. For DIVU, the destination is a longword register and the source isa word value; for DIVUL, the destination is a quadword register and the source is a longword value. For proper instruction execution the "dst field" in the DIVUL instruction encoding must specify a valid code for a quadword register. There are three possible outcomes of the unsigned divide instruction. CASE 1. If the divisor is 0, then the destination register is unmodified, the V and Z flags are set to 1, and the C and S flags are cleared to O. CASE 2. If the quotient is greater than (2 16 - 1) for DIVU or if the quotient is greater than (2 32 - 1) for DIVUL, then the destination register is unmodified. The V flag is set to 1, and the C, Z, and S flags are cleared to O. CASE 3. If the quotient is less than 216 for DIVU, or if the quotient is less than 232 for DIVUL, then the quotient and remainder are left in the destination register as . defined above. The V and C flags are cleared to 0 and the Sand Z flags are set according to the value of the quotient, as described below. Flags: c: Cleared Z: Set if the quotient or divisor is zero; cleared otherwise S: For CASE 1 and CASE 2 cleared; for CASE 3 set if the most-significant bit of the result is set; cleared otherwise V: For CASE 1 and CASE 2 set; cleared otherwise 0: Unaffected H: Unaffected Exceptions: Integer Overflow trap 6-65 Source Addressing Mode Assembler Language Syntax R: DIVU RRd, Rs Instruction Format 0111101000000011 1 01 0 1 1 0 1 1 DIVUL ROd, RRs DIVU RRd, #data 1 RRd 0111101000000011 1 1M: Rs oj 0 1 1 0 1 0 RRs J ROd 0111101000000011 o 01 0 1 1 0 1 1 0 0 0 0 1 RRd data DIVUL ROd, #data 0111101000000011 o 0 10 1 1 0 1 0 0 0 0 0 1 ROd data (high) data (low) IR: DIVU RRd, @RSl DIVUL ROd, @RSl EAM: DIVU RRd, eam 01111010 00000011 001011011 Rs*O 1 RRd 01111010 0000 0011 001011010 Rs*O 1 ROd 01111010 00000011 011011011 eam 1 RRd 1,2, or 3 extension words DIVUL ROd, eam 0111101000000011 o1 10 1 1 0 1 0 eam 1 ROd 1,2, or 3 extension words Example: If longword register RRO (composed of word registers RO and R1) contains the value %OOOOOFOO, executing the instruction DIVU RRO,#%81 leaves the quotient %001 D in R1 and the remainder %0063 in RO. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-66 DJNZ Decrement and Jump if Not Zero DJNZ cnt, dst DBJNZ DLJNZ Operation: cnt - cnt - 1 If cnt =1= 0 then PC - cnt: R dst: RA PC - (2 x displacement) The counter ("cnt") is decremented. If the contents of the counter are not zero after decrementing, the destination address is loaded into the Program Counter (PC). Otherwise, when the counter reaches zero, control falls through to the instruction following DJNZ, DBJNZ, or DLJNZ. This instruction provides a simple method of loop control. The destination address is calculated by subtracting twice the displacement in the instruction from the updated value of the PC. The updated PC value is the address of the instruction word following the DJNZ, DBJNZ, or DLJNZ instruction. The displacement is a 7-bit positive value in the range 0 to 127. Thus, the destination address must be in the range -252 to 2 bytes from the start of the DJNZ or DBJNZ instruction or - 250 to 4 bytes from the start of the DLJNZ instruction. The assembler automatically calculates the displacement by subtracting the PC value of the following instruction from the address given by the programmer and dividing the result by two. Flags: No flags affected Exceptions: None Destination Addressing Mode RA: Assembler Language Syntax DJNZ Rcnt. address DBJNZ Rbcnt. address DWNZ RRcnt. address Instruction Format 11 1 1 1 I Rent Iwi disp 0111101000000010 11111RR ent 111 disp 6-67 Example: DJNZ, DBJNZ and DLJNZ are typically used to control a "loop" of instructions. In this example for compact mode, 100 bytes are moved from one buffer area to another, and the Sign bit of each byte is cleared to o. Register RHO is used as the counter. llinitalize counter RHO,ft100 LDB IIload start address R1,ftSRCBUF LD R2,ftDSTBUF LD LOOP: RLO,@R1 IIload source byte LDB IImask off sign bit RLO,ft7 RESB @R2, RLO IIstore into destination LDB lIadvance pointers R1 INC R2 INC IIrepeat until counter 0 DBJNZ RHO, LOOP NEXT: = In segmented or linear mode, longword registers must be used instead of R1 and R2. 6·68 Privileged Instruction EI Enable Interrupts Int: VI, NVI EI int Operation: If instruction < 0> = 0 then NVI - 1 If instruction < 1 > = 0 then VI - 1 Any combination of the Vectored Interrupt (VI) or Non-Vectored Interrupt (NVI) control bits in the Flag and Control Word (FCW) are set to 1 if the corresponding bit in the instruction is 0, thus enabling the appropriate type of interrupt. If the corresponding bit in the instruction is 1, the control bit is not affected. No other bits in the FCW are affected. There may be zero, one or two operands in the assembly language statement, in either order, specifying no source operand is equivalent to specifying both VI and NVI. Flags: No flags affected Exceptions: Privileged Instruction trap Assembler Language Syntax EI in! Example: Instruction Format 10111110010000011ylxl If the NVI control bit is set to 1 in the FCW, and the VI control bit is cleared 0, executing the instruction EI VI leaves both the NVI and VI control bits in the FCW set to 1. 6-69 ENTER Enter ENTER mask, siz Operation: mask: 1M siz: 1M tmp1 - mask if FCW.EtC then n - 13 else n - 14 for i = n down to 8 do if tmp1 < i> = 1 then push RR [2 X i -16] for i = 7 down to a do if tmp1 =1 then push RR [2xi+16] tmp2 - tmp1 tmp2 <15> - FCW.IV if FCW.EtC then push RR12 push tmp2 push a else push R14 push tmp2 push a FP-SP SP-SP + siz FCW.IV- tmpl<15> "segmented or linear mode "compact mode "save registers "segmented or linear mode "save FP "save mask word //initialize exception handler address "(Iongword) "compact mode "save FP "save mask word "initialize exception handler address "(word) "allocate activation record "reserve local storage This instruction is executed upon entering a procedure to allocate and initialize an activation record on the processor stack. The operation involves saving the specified general-purpose registers, saving and adjusting the Frame Pointer (FP), initializing the pointer to the procedure's exception handler, saving the current setting of the Integer Overflow trap enable bit, initializing the Integer Overflow trap enable bit, and reserving the local storage area. The bits in the mask word operand (called the Enter Mask) correspond to generalpurpose longword registers, as shown in Figure 6-2. When a mask bit is set to 1, the corresponding register is saved on the stack. Bit 15 of the Enter Mask corresponds to the setting of FCW.IV, the Integer Overflow trap enable bit, after the Enter instruction is executed. The Enter Mask is used to construct the Exit Mask, which is saved on the stack. The bits in the Exit Mask correspond to the longword registers that have been saved and the setting of FCW.IV before the Enter instruction is executed. The activation record format in compact mode is shown in Figure 6-3a. After the saved PC, which has been pushed by the previous CALL or CALR instruction, the specified general-purpose longword registers are pushed on the stack. Next, the Frame Pointer (R14) is pushed on the stack, followed by the Exit Mask. Then a word containing a is pushed on the stack to initialize the pointer to the exception handler for the entered procedure. Finally, the size operand word is added to SP (R15), and FP is left pointing to the exception handler address. The activation record format in segmented or linear mode, shown in Figure 6-3b, is similar. After the specified general-purpose longword registers are pushed onto the stack, the Frame Pointer (RR12) is pushed, followed by the Exit Mask. Then a longword containing a is pushed on the stack to initialize the exception handler pOinter. Finally, the sign-extended size operand word is added to SP (RR14), and FP is left pointing to the exception handler address. 6-70 IS I I I I I I I I I I I I I I I ~ SAVE RRII SAVE RRla SAVE RRZO SAVE RR22 SAVE RFI24 SAVE RR2I SAVE RR2I SAVE RR30 SAVE RAO SAVE RRZ SAVE RR4 SAVE RRI SAVE RRe SAVE RRIO { SAVE RRIZ (COMPACT MODE) o (SEGMENTED OR LINEAR MODE) { NEW FCW.IV (ENTER MASK) SAVED FCW.IV (EXIT MASKI Figure 6·2. Enter Mask and Exit Mask Formats LOW ADD::::l~ll LOCAL STORAGE AREA FP_ 0 LOW ADD:::!~ll LOCAL STO RAGE AREA FP- EXIT_MASK SAVED FP SAVED RRle TO SAVED RR30 SAVED RRO NEW ACTIVATION EXIT_MASK J~ SAVED FP (HIGH) SAVED RRIZ SAVED PC FP'_~ HIGH ADDRESS SAVED RRla TO SAVEDRR30 SAVED RRO TO --, CALLER'S ACTIVATION RECORD SAVED RRIO SAVED PC (HIGH) ---J Iword FP I, the Frame Pointer lUI' ENTER, SP 10 Iho Stock Pointor ollar ENTER, FP' 10 tho From. Polnl.r bofo.. ENTER, SP' 10 tho Siock Polnt.r bolo.. ENTER and ollor CALL or CALR. NEW ACTIVATION SAVED FP (LOW) TO SP'-.p 0 0 SAVED PC (LOW) FP'_~ HIGH ADDRESS J"' I CALLER'S ACTIVATION RECORD ..J tword FP 10 th. From. Polntar all.r ENTER, SP 10 th. Stack PoIntar altar ENTER, FP' 10 Ih. From. Polntar bofor. ENTER, SP' 10 th. Stack Polntar bofo.. ENTER and ollor CALL or CALR. Figure 6·3a. Activation Record Format (Compact Mode) 8225·012,013,014 Figure 6·3b. Activation Record Format (Segmented or Linear Mode) 6·71 Flags: No flags affected Exceptions: None Addressing Mode 1M: Assembler Language Syntax ENTER* enteC.,mask,*siZ Instruction Format 011110101000010101 enter_mask siz Example: 6-72 Executing the instruction ENTER 1%05,1100 saves registers RR16 and RR20 on the stack, clears tivation record with 100 bytes of local storage. Few. IV, and allocates an ac- EX Exchange EX dst, EXB EXL Operation: src dst: R src: R, IR, EAM tmp - src src - dst dst - tmp The contents of the source operand are exchanged with the contents of the destination operand. Flags: No flags affected Exceptions: None Source Addressing Mode Assembler Language Syntax R: EX Rd, Rs EXB Rbd, Rbs EXL RRd, RRs Instruction Format Rd 0111101000000010 1 oj 1 01 1 01 IR: RRs 1 RRd EX Rd, @Rs' EXB Rbd, @Rs' EXL RRd, @Rs' 0111101000000010 001101101 EAM: EX Rd, eam EXB Rbd, eam Rs*ol RRd o 1 11 0 1 1 01 W Rs * 0 1 Rd address EXL RRd, eam 0111101000000010 o 111 0 1 1 0 1 Rs 1 RRd 1, 2, or 3 extension words Example: If register RO contains 8 and register R5 contains 9, executing the instruction EX RD,R5 leaves the values 9 in RO and 8 in R5. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-73 EXIT Exit EXIT Operation: if FCW.EtC then SP - FP+4 pop tmp1 pop RR12 IIsegmented or linear mode IIskip over exception handler IIExit Mask IIrestore FP n -13 else SP - FP+2 pop tmp1 pop R14 n-14 for i = 0 to 7 do if tmp1 < i> = 1 then pop RR for i = 8 to n do if tmp1 < I> = 1 then pop RR FCW.IV - tmp1 < 15> IIcompact mode IIskip over exception handler IIExit Mask IIrestore FP [2 x i + 16] [2 x i - 16] This instruction removes an activation record created with the ENTER instruction. (See the description of the ENTER instruction for more detailed Information about the activation record and Exit Mask formats.) In compact mode, first the value of the Frame Pointer (R14) is incremented by two and loaded Into SP (R15), removing the local storage area and exception handler pointer from the processor stack. Next, the Exit Mask and Frame Pointer are popped from the stack. Then, the longword registers specified by the Exit Mask are popped from the stack, and FCW.IV is loaded from bit 15 of the Exit Mask. In segmented or linear mode, first the value of the Frame Pointer (RR12) is incremented by four and loaded into SP(RR14), removing the local storage area and exception handler pointer from the processor stack. Next, the Exit Mask and Frame Pointer are popped from the stack. Then, the longword registers specified by the Exit Mask are popped from the stack, and FCW.IV is loaded from bit 15 of the Exit Mask. Flags: No flags affected Exceptions: None Assembler Language Syntax EXIT Example: Instruction Format 1011110101000001101 At the end of a procedure that has been called using CALL or CALR instructions and that has been entered using the ENTER instruction, executing the instruction sequence EXIT RET returns control to the caller at the instruction following the CALL and leaves the caller's activation record on top of the stack. 6-74 EXTR Extract Field EXTR dst, src, pos, siz EXTRU Operation: dst - dst: R src: R, IR, EAM pos: 1M, R siz: 1M, R src (pos,siz) This instruction is used to extract a bit field from memory or a longword register and load it into a longword register. For a description of bit fields see Section 6.2.6. The bits in the source field are loaded, right-justified, into the least-significant bits of the destination longword register. For EXTR the remaining bits in the destination are loaded with the most-significant bit of the field. For EXTRU the remaining bits in the destination are cleared to O. The position and size operands can be specified as immediate values in the range 0 to 31 or in a word or longword register. The assembler encodes each operand in a 6-bit field of the instruction with the following format: on n n n n 1 0 1 1 5-bit unsigned immediate value word register contains value longword register contains value c: Cleared Flags: Z: Set if the result is zero; cleared otherwise S: Set if the most-significant bit of the result is set; cleared otherwise V: Cleared D: Unaffected H: Unaffected Exceptions: Source Addressing Mode R: None Assembler Language Syntax EXTR RRd,RRs,pos,siz Instruction Format 1 01 0 1 1 1 0 0 1 RRs 11 0 1 0 RRd 1 EXTRU RRd,RRs,pos,siz EXTR RRd,@Rsl,pos,siz pos I siz I pos o 01 0 1 1 1 0 0 1 Rs .. 0 11 RRd EXTRU RRd, @Rsl,pos,siz 1 1 01 0 1 1 1 0 0 1 RRs 11 0 1 1 RRd IR: siz o 01 I siz I 010 pos 0 1 1 1 0 0 1 Rs .. 0 11 0 1 1 RRd I siz I pos 6-75 Source Addressing Mode Assembler Language Syntax EAIIII: EXTR RRd,eam,pos,siz Instruction Format o 1J 0 1 1 1 00 1 earn 11 0 1 0 RRd 1 siz 1 pos 1, 2, or 3 extension words EXTRU RRd,eam,pos,siz o 11 0 1 1 1 001 RRd 1 siz earn 11 0 1 1 1 pos 1, 2, or 3 extension words Example: If register RR4 contains %01200000 (00000001 001000000000000000000000), executing the instruction EXTR RR6,RR4,#7,#3 extracts the 4-bit field 1001 beginning at the 7th bit from the most-significant bit of RR4 and leaves the sign-extended value % FFFFFFF9 in RR6. Note that the size operand (#3) has a value one less than the number of bits in the field (4). Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-76 EXTS Extend Sign EXTSB dst EXTS EXTSL Operation: dst: R Byte if dst<7> =0 Word if dst< 15> Longword if dst< 31> =0 =0 then dst< 15:8> - 000 ... 000 else dst < 15:8> - 111 ... 111 then dst<31:16> else dst < 31 :16 > then dst< 63:32 > else dst < 63:32 > - 000 ... 000 111 ... 111 000 ... 000 111 ... 111 The Sign bit of the low-order half of the destination operand is copied into all bit positions of the high-order half of the destination. For EXTSB the destination is a word; for EXTS and EXTSL, the destination is a longword register. This instruction is useful in multiple precision arithmetic or for conversion of small signed operands to larger signed operands (for example, before a divide). Flags: No flags affected Exceptions: None Destination Addressing Mode Assembler Language Syntax R: EXTSB Rd EXTS RRd EXTSL ROd Example: Instruction Format 1101110001 1 Rd 10000 1 110 11 10 0 0 1 1 RRd 1 1010 1 1101110001 1 RQd 1 10111 If longword register RR2 (composed of word registers R2 and R3) contains % 12345678, executing the instruction EXTS RR2 leaves the value %00005678 in RR2 (because the sign bit of R3 was 0). 6-77 HALT Privileged Instruction Halt HALT Operation: The CPU enters halted state (see Section 7.2), in which instruction execution ceases. Only the occurrence of reset or an enabled interrupt causes the CPU to leave halted state. After HALT is executed, the address of the instruction following HALT is in the PC, which will be saved on the system stack during interrupt processing. Flags: No flags affected Exceptions: Privileged Instruction trap Assembler Language Syntax HALT 6-78 Instruction Format 101111010 00000000 IN Privileged Instruction Input IN dst, src INB INL Operation dst - dst: R src: IR, DA src The contents of the source operand, an input port, are loaded into the destination register. 1/0 port addresses are 16 bits. Flags: No flags affected Exceptions: Privileged Instruction trap Source Addressing Mode IR: Assembler Language Syntax IN Rd, @Rs INS Rbd, @Rs INL RRd, @Rs DA: Instruction Format IN Rd, port INS Rbd, port INL RRd, port 01111010 00000010 0011 1 1 1 01 Rs*O 1 RRd 001111011W Rd 10100 port 0111101000000010 0011 1 1 0 1 1 RRd 10 1 00 port Example: If register R6 contains the 1/0 port address % 0123 and the port %0123 contains % FF, executing the instruction INB RH2, @R6 leaves the value % FF in register RH2. 6-79 INC Increment INC dst, src INCB INCL Operation: dst - dst + src (src = dst: R, IR, EAM src: 1M 1 to 16) The source operand (a value from 1 to 16) is added to the destination operand and the sum is stored in the destination. Twos complement addition is performed. If the source operand is omitted from the assembler language statement, the default value is 1. The value of the source field in the instruction is one less than the actual value of the source operand. Thus, the coding in the instruction for the source ranges from o to 15, which corresponds to the source values 1 to 16. Flags: C: Z: S: V: Exceptions: Integer Overflow trap Unaffected Set if the result is zero; cleared otherwise Set if the result is negative; cleared otherwise Set if arithmetic overflow occurs, that is, if both operands were of the same sign and the result is of the opposite sign; cleared otherwise D: Unaffected H: Unaffected Destination Addressing Mode R: Assembler Language Syntax Instruction Format INC Rd, #n INCB Rbd, #n INCL RRd, #n 0111101000000010 1 0 11 0 1 0 0 1 IR: INC @Rd 1 , #n INCB @Rdl, #n INCL @Rdl, #n 0111101000000010 001101001 EAM: RRd 1 n - 1 INC earn, #n INCB earn, #n Rd*O 1 n - 1 01 11 01 001 w1 eam 1 n - 1 1, 2, or 3 extension words INCL earn, #n 0111101000000010 o 1 11 0 1 0 0 1 eam 1 n - 1 1,2, or 3 extension words 6-80 Example: If register RH2 contains %21, executing the instruction INCB RH2,#6 leaves the value % 27 in RH2. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-81 INCI Increment Interlocked dst: IR, EAM src: 1M INCI dst, src INCIB Operation: dst - dst + src (src = 1 to 16) The source operand (a value from 1 to 16) is added to the destination operand and the sum is stored in the destination. Twos complement addition is performed. If the source operand is missing from the assembler language statement, the default value is 1. The value of the source field in the instruction is one less than the actual value of the source operand. Thus, the coding in the instruction for the source ranges from a to 15, which corresponds to the source values 1 to 16. This is an interlocked instruction. No other interlocked accesses are permitted to the destination memory location between fetching and storing the result. Flags: C: Z: S: V: Exceptions: Integer Overflow trap Unaffected Set if the result is zero; cleared otherwise Set if the result is negative; cleared otherwise Set if arithmetic overflow occurs, that is, if both operands were of the same sign, and the result is of the opposite sign; cleared otherwise D: Unaffected H: Unaffected Destination Addressing Mode IR: Assembler Language Syntax INCI @Rd 1 , ifn INCIS @Rd 1 , ifn Instruction Format 01111010 00000100 00j10100\W Rd*O \ n-1 EAM: INCI eam, ifn INCIS eam, ifn 0111101000000100 0111 01 001 w earn 1 n -1 1, 2, or 3 extension words Example: This instruction can be used to allocate or release copies of a system resource in a multiprocessor environment. For example, several processes running on different processors can share use of a common page in memory. It is necessary to keep a reference counter for the number of active processes using the shared page. When a new process requires use of the page the reference counter is incremented. The INCI instruction should be used so that one processor completes the fetch and store of the counter in memory before any other processor accesses the counter. INCI REFERENCLCOUNTER, #1 //increment reference counter lIfor shared page Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-82 IND Privileged Instruction Input and Decrement INO dst, src, r INOB INOL Operation: dst: IR src: IR dst - src AUTOOECREMENT dst (by 1 if INOB; by 2 if INO; by 4 if INOL) r- r - 1 This instruction is used for block input of strings of data. The contents of the 1/0 port addressed by the source word register are loaded into the memory location addressed by the destination register. 1/0 port addresses are 16 bits. The destination register is then decremented by one if INOB, by two if INO, or by four if INOL, thus moving the pointer to the previous element of the string in memory. The word register specified by "r" (used as a counter) is then decremented by one. The address of the 1/0 port in the source register is unchanged. The source, destination, and counter registers must be distinct and non-overlapping registers. c: Flags: Unaffected Z: Unaffected S: Unaffected V: Set if the result of decrementing r is zero; cleared otherwise 0: Unaffected H: Unaffected Exceptions: Privileged Instruction trap Addressing Mode Assembler Language Syntax IR: INO @Rd 1 @Rs r INOB @Rdl, @RS, r INOL @Rdl, @Rs, r Instruction Format 00111011 w Rs,o 0 1000 00001 Rd,o 0 1000 01111010 0000 001 0 00111011 0000 Example: I r Rs,oO 1000 Rd,oO 1000 In linear mode, if register RR24 contains %00004000, register R6 contains the 1/0 port address %0228, the port %0228 contains %05B9, and register RO contains %0016, executing the instruction INO @RR24, @R6, RO leaves the value %05B9 in location %00004000, the value %00003FFE in RR24, and the value %0015 in RO. The V flag is cleared. Register R6 still contains the value %0228. In compact mode, a word register must be used instead of RR24. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-83 INDEX Index INDEX dst, sub, src INDEXL Operation: dst R sub: R src: IM,IR,EAM tmp - EFFECTIVE_~A.DDRESS (src) lower- @tmp if sub < lower then Index Error trap tmp - tmp + (2 if INDEX; 4 if INDEXL) upper - @tmp if sub> upper then Index Error trap tmp - tmp + (2 if INDEX; 4 if INDEXL) scale - @tmp dst - (dst + (sub -lower)) x scale This instruction is used to check an array subscript and calculate the corresponding index value. For arrays with multiple dimensions, the instruction performs one step of the index calculation, accumulating the index value in the destination. The subscript is compared against the bounds specified by the source operand. If the subscript is less than the lower bound or greater than the upper bound, then the destination and flags are unaffected and an Index trap occurs. If the subscript is in bounds, then the lower bound is subtracted from the subscript, the difference is added to the destination, the sum is multiplied by the scale factor, and the product is stored into the destination. The subscript, lower bound, upper bound, scale factor, and destination are all the same size, either word or longword. The operands are treated as signed integers. The contents of the subscript and source are not affected. The source operand specifies the lower bound. The upper bound and scale factor are located at the next two consecutive words or longwords. When the instruction is used appropriately, an Index trap occurs if the calculated index is outside the array. Hence, overflow is not detected during the index calculation. If overflow does occur during addition, only the less-significant word or longword of the sum is stored into the destination. If overflow does occur during multiplication, only the less-significant word or longword of the product is stored. Flags: c: Unaffected if Index Error trap; cleared otherwise Z: Unaffected if Index Error trap; else set if the result is zero; cleared otherwise S: Unaffected if Index Error trap; else set if the most-significant bit of the result is set; cleared otherwise V: Unaffected if Index Error trap; cleared otherwise D: Unaffected H: Unaffected Exceptions: 6·84 Index Error trap Source Addressing Mode 1M: Assembler Language Syntax INDEX Rd, Rsub, Iflower,lfupper, Ifscale Instruction Format 001001101 0000 1 1 1 0 00001 Rsub Rd;OO 0000 lower upper scale INDEXL RRd, RRsub, Iflower,lfupper, #Scale 00J001101 0000 1 1 1 1 00001 RRsub RRd;OO 0000 lower (high) lower (low) upper (high) upper (low) scale (high) scale (low) IR: INDEX Rd, Rsub, @Rs' INDEXL RRd, RRsub, @Rs' 001 001 1 01 Rs;OO 00001 Rsub Rd;OO 0000 1110 001001101 Rs;OO 1 1 1 1 00001 RRsub RRd;OO 0000 EAM: INDEX Rd, Rsub, eam OiI001101 eam 1110 00001 Rsub Rd;OO 0000 1, 2, or 3 extension words INDEXL RRd, RRsub, eam 0 11001101 eam 1111 00001 RRsub RRd;OO 0000 1, 2, or 3 extension words 6-85 Example: The subscript values for a two-dimensional array of records range from 10 to 20 and from 1 to 100. Each record in the array is 12 bytes. The base address of the array is contained in RR2. the first subscript value is contained in RR6. and the second subscript value is in RR8. Executing the instruction sequence (in segmented or linear mode) IIinitialize index register CLRL RR4 IIcheck and accumulate first INDEXL RR4.RR6.*10.fI20.*100 IIsubscript IIcalculate array index INDEXL RR4.RR8.*1.*100.*12 //load first byte of record LDB RHO.RR2(RR4) loads the first byte of the indexed record into RHO. Note 1: Word register In compact mode. longword register in segmented or linear modes. 6-86 Privileged Instruction IN DR Input, Decrement and Repeat INOR dst, src, r INORB INORL Operation: dst: IR src: IR repeat dst - src AUTOOECREMENT dst (by 1 if INORB; by 2 if INOR; by 4 if INORL) r- r - 1 until r = 0 This instruction is used for block input of strings of data. The contents of the 1/0 port addressed by the source word register are loaded into the memory location addressed by the destination register. 1/0 port addresses are 16 bits. The destination register is then decremented by one if INORB, by two if INOR, or by 4 if INORL, thus moving the pointer to the previous element of the string in memory. The word register specified by "r" (used as a counter) is then decremented by one. The address of the 1/0 port in the source register is unchanged. The entire operation is repeated until the result of decrementing r is zero. This instruction can input from 1 to 65,536 data elements. The source, destination, and counter registers must be distinct, non-overlapping registers. This instruction can be interrupted after each execution of the basic operation. Flags: C: Unaffected Z: Unaffected 5: Unaffected V: Set 0: Unaffected H: Unaffected Exceptions: Privileged Instruction trap Addressing Mode Assembler Language Syntax IR: IN DR @Rdl, @Rs, r INDRB @Rdl, @Rs, r Instruction Format 00001 INDRL @Rdl, @Rs, r *0 Rd * 0 00111011 w Rs r 1000 0000 01111010 0000 0010 00111011 Rs*O 1000 00001 Rd*O 0000 6-87 Example: In compact mode, if register R1 contains %202A, register R2 contains the 1/0 address %OAFC, and register R3 contains 8, executing the instruction INDRB @R1, @R2, R3 inputs 8 bytes from the 1/0 port %OAFC and leaves them in descending order from %202A to %2023. Register R1 contains %2022, and R3 contains O. R2 is not affected. The V flag is set. In segmented or linear mode, a longword register must be used instead of R1. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-88 INI Privileged Instruction Input and Increment INI dst, src, r INIB INIL Operation: dst: IR src: IR dst - src AUTOINCREMENT dst (by 1 if INIB; by 2 if INI; by 4 if INIL) r- r - 1 This instruction is used for block input of strings of data. The contents of the 1/0 port addressed by the source word register are loaded into the memory location addressed by the destination register. 1/0 port addresses are 16 bits. The destination register is then incremented by one if INIB, by two if INI, or by four if INIL, thus moving the pointer to the next element of the string in memory. The word register specified by "r" (used as a counter) is then decremented by one. The address of the 1/0 port in the source register is unchanged. The source, destination, and counter registers must be distinct, non-overlapping registers. c: Flags: Unaffected Z: Unaffected S: Unaffected V: Set if the result of decrementing r is zero; cleared otherwise 0: Unaffected H: Unaffected Exceptions: Privileged Instruction trap Addressing Mode IR: Assembler Language Syntax INI @Rd 1 @Rs r INIB @Rdl, @Rs, r INIL @Rdl, @Rs, r Example: .' Instruction Format '* 00111011 w Rs 0 0000 Rd,* 0 1000 00001 01111010 0000 0010 00111011 Rs,*O 0000 00001 Rd,*O 1000 In compact mode, if register R4 contains %4000, register R6 contains the 1/0 port address %0229, the port %0229 contains %B9, and register RO contains %0016, executing the instruction INIB @R4, @R6, RO leaves the value % B9 in location %4000, the value %4001 in R4, and the value %0015 in RO. Register R6 still contains the value %0229. The V flag is cleared. In segmented or linear mode, a longword register must be used instead of R4. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-89 I NI R Privileged Instruction Input, Increment and Repeat INIR dst, src, r INIRB INIRL Operation: dst: IR src: IR repeat dst - src AUTOINCREMENT dst (by 1 if INIRB; by 2 if INIR; by 4 if INIRL) r- r - 1 until r = 0 This instruction is used for block input of strings of data. The contents of the 110 port addressed by the source word register are loaded into the memory location addressed by the destination register. 110 port addresses are 16 bits. The destination register is then incremented by one if INIRB, by two if INIR, or by four if INIRL, thus moving the pointer to the next element in the string in memory. The word register specified by "r" (used as a counter) is then decremented by one. The address of the 110 port in the source register is unchanged. The entire operation is repeated until the result of decrementing r is zero. This instruction can input from 1 to 65,536 data elements. The source, destination, and counter registers must be distinct, nonoverlapping registers. This instruction can be interrupted after each execution of the basic operation. Flags: C: Unaffected Z: Unaffected S: Unaffected V: Set D: Unaffected H: Unaffected Exceptions: Addressing Mode IR: Privileged Instruction trap Assembler Language Syntax INIR @Rd1 ,@Rs. r INIRB @Rd 1 • @Rs. r Instruction Format 00111011 w Rs * 0 0000 I Rd * 0 0000 01111010 0000 0010 0000 00111011 00001 6-90 r Rs*O 0000 Rd*O 0000 Example: In compact mode, if register R1 contains %2023, register R2 contains the 1/0 port address %0551, and register R3 contains 8, executing the instruction INIRB @R1,@R2,R3 inputs 8 bytes from port %0551 and leave them in ascending order from %2023 to %202A. Register R1 contains %202B, and R3 contains O. R2 is not affected. The V flag is set. In segmented or linear mode, a longword register must be used instead of R1. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-91 INSRT Insert Field INSRT dst, src, pos, siz Operation: dst (pos, siz) - dst: R, IR, EAM src: R pos: R, 1M siz: R, 1M src This instruction is used to insert a bit field from a longword register into memory or a longword register. For a description of bit fields, see Section 6.2.6. The bits in the destination field are loaded from the least-significant bits of the source register. The position and size operands can be specified as immediate values in the range 0 to 31 or in a word or longword register. The assembler encodes each operand in a 6-bit field of the instruction with the following format: o n n n n n 1 0 r r r 1 1 r r r Flags: No flags affected Exceptions: None 5-bit unsigned immediate value word register contains value longword register contains value Destination Addressing Mode Assembler Language Syntax R: INSRT RRd,RRs,pos,siz Instruction Format 1 0 10 1 1 1 0 RRs 1 IR: INSRT @Rd 1 ,RRs,pos,siz INSRT eam,RRs,pos,siz siz RRd 10 1 1 0 1 pos o 0 I0 1 1 1 0 01 Rd"* 0 10 1 1 0 RRs 1 EAM: 01 o 11 siz 011100 RRs I siz 1 pos I earn I0 1 1 0 I pos 1, 2, or 3 extension words Example: If register RR2 contains %0101012A (0000 0001 0000000100000001 00101010) and register RR4 contains % FFFF FFFF, executing the instruction INSRT RR4,RR2,#4,#6 inserts the 7-bit field 0101010 from the least-significant bits of RR2 into RR4 beginning at the 4th from the most-significant bit, leaving % F55FFFFF (1111 0101 0101 1111 1111 1111 1111 1111 in RR4. Note that the size operand (#6) has a value one less than the number of bits in the field (7). Note 1: Word register in compact mode. longword register in segmented or linear modes. 6-92 IRET Privileged Instruction Interrupt Return IRET Operation: sp-sp + 2 pop tmp pop PC if FCW.T then tmp<9> FCW- tmp IIpop "identifier" IIpop FCW 1 This instruction is used at the end of an exception handler routine to return to the program at the point where the exception occurred. First, an "identifier" word associated with the exception is popped from the stack. Then, the FCW and PC are popped from the stack. After IRET is executed, the Trace Pending bit (FCW.TP) is set if bit 9 is set in the popped FCW or if the Trace Enable bit (FCW.T) was set before the instruction was executed. This allows tracing of exception handler routines for single-step debugging. This instruction may be executed in segmented or linear mode only; in compact mode, execution of this instruction is undefined. c: Flags: Loaded from system stack Z: Loaded from system stack S: Loaded from system stack PN: Loaded from system stack D: Loaded from system stack H: Loaded from system stack Exceptions: Privileged Instruction trap Assembler Language Syntax IRET Instruction Format 01111011 100000000 I 6-93 JP Jump JP cc, dst Operation: dst: IR, EAM If cc is satisfied, then PC - EFFECTIVE-ADDRESS (dst) A conditional jump transfers program control to the destination address if the condition specified by "cc" is satisfied by the flags in the FCW. See Section 6.3 for a list of condition codes. If the condition is satisfied, the Program Counter (PC) is loaded with the destination address; otherwise, the instruction following the JP instruction is executed. If no condition is specified, the jump is taken regardless of the flag settings. Flags: No flags affected Exceptions: None Destination Addressing Mode Assembler Language Syntax IR: JP CC, @Rd1 EAM: JP CC, eam Instruction Format o1 I 0 1 1 1 1 0 I earn I cc 1,2, or 3 extension words Example: If the C flag is set, executing the instruction (in compact mode) JP C, %1520 replaces the contents of the PC with % 1520, thus transferring control to that location. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-94 JR Jump Relative JR cc, dst Operation: dst: RA if cc is satisfied then PC - PC + (2 x displacement) A conditional jump transfers program control to the destination address if the condition specified by "cc" is satisfied by the flags in the FCW. See Section 6.3 for a list of condition codes. If the condition is satisfied, the Program Counter (PC) is loaded with the destination address; otherwise, the instruction following the JR instruction is executed. If no condition is specified, the jump is taken regardless of the flag settings. The destination address is calculated by adding twice the displacement in the instruction to the updated value of the PC. The updated PC value is the address of the instruction word following the JR instruction. The displacement is an 8-bit signed value in the range -128 to 127. Thus, the destination address must be in the range -254 to 256 bytes from the start of the JR instruction. The assembler automatically calculates the displacement by subtracting the PC value of the following instruction from the address given by the programmer and dividing the result by two. Flags: No flags affected Exceptions: None Destination Addressing Mode RA: Example: Assembler Language Syntax JR ee, address Instruction Format 11 1 1 0 I cc I displacement 1 If the result of the last arithmetic operation executed is negative, the next four instructions (which occupy a total of twelve bytes) are to be skipped. This can be accomplished with the instruction JR MI, $ +14 If the S flag is not set, execution continues with the instruction following the JR. A byte-saving form of a jump to the label LAB is JR LAB where LAB must be within the allowed range. The condition code is omitted in this case, indicating that the jump is always taken. 6-95 LD Load LO dst, src LOB LOL Operation: dst - dst: src: or dst: src: or dst: src: R R, IR, BA, BX, EAM IR, BA, BX, EAM R R, IR, EAM 1M src The contents of the source are loaded into the destination. The contents of the source are not affected. There are three versions of the Load instruction: load into a register, load into memory and load an immediate value . Flags: .No flags affected Exceptions: None Load Register Source Addressing Mode R: Assembler Language Syntax LD Rd, Rs LDB Rbd, Rbs LDL RRd, RRs IR: LD Rd, @RS1 LDB Rbd, @RS1 LDL RRd, @RS1 BA: LD Rd, RS1(disp) LDB Rbd, RS1(disp) Instruction Format 1101100001 w 1 Rs Rd 11010101001 RRs RRd 1001100001 w 1 Rso"O 1 Rd 10010101001 Rso"ol RRd 00111 Ooolwi Rso"O I Rd displacement LDL RRd, RS1(disp) 001 1101 01 I Rso"O I RRd displacement BX: LD Rd, RS1(Rx) LDB Rbd, RS1(Rx) LDL RRd, RS1(Rx) Rs 0000 0000 0000 I Rxo"O 01111 01 0 1 0000 6-96 *0 1 o 111 1 0 0 0 1w I Rxo"O Rso"O Rd I RRd 0000 0000 L0 ad Register (Continued) Source Addressing Mode EAM: Assembler Language Syntax LD Rd, earn LDB Rbd, earn Instruction Format o 1110 0 0 0 1w 1 eam 1 Rd 1, 2, or 3 extension words LDL RRd, earn o 11 0 1 0 1 0 0 J eam 1 RRd 1, 2, or 3 extension words Load Memory Destination Addressing Mode IR: Assembler Language Syntax LD @Rd1 , Rs LDB @Rdl, Rbs Instruction Format 1001101111w1Rd*01 Rs LDL @Rd 1 , RRs 10010111011 Rd*ol RRs BA: LD Rd 1(disp), Rs LDB Rd 1(disp), Rbs 001110011 W Rd*O 1 Rs displacement LDL Rd 1(disp), RRs o 011 1 0 1 1 1 Rd * 0 1 RRs displacement BX: LD Rd 1(Rx), Rs LDB Rd 1(Rx), Rbs LDL Rd 1(Rx), RRs EAM: LD earn, Rs LDB earn, Rbs 01110011W Rd*O 1 Rs 00001 Rx*O 00000000 01111 0111 Rd*O 1 RRs 00001 Rx*O 00000000 011101111W eam 1 Rs 1, 2, or 3 extension words LDL earn, RRs o 11 0 1 1 1 0 1 1eam 1 RRs 1, 2, or 3 extension words 6-97 Loa dl mmed"la te Value Destination Addressing Mode R: Assembler Language Syntax LD Rd, #data Instruction Format Rd 00 100001100001 data LDB Rbd, #data2 00 100000 0000 data 11100 I LDL RRd, #data I Rbd data Rd data I 00001 RRd 001010100 data (high) data (low) IR: LD @Rd 1, #data o0 I 0 0 1 1 0 1 I Rd * 0 I 0 1 0 1 data LDB @Rdl, #data LDL @Rdl, #data 001001100 Rd*O 10101 data data 001001101 Rd*O 101 1 1 data (high) data (low) EAM: LD eam, #data o1 I0 0 1 1 0 1 I earn !0 1 01 1, 2, or 3 extension words data LDB eam, #data o 11 0 0 1 1 0 0 I 1, 2, or 3 extension words I data LDL eam, #data I0 1 0 1 earn o 1T 001 1 01 data I earn 101 11 1, 2, or 3 extension words data (high) data (low) 6·98 1 Example: If register RHO contains %AB, executing the instruction LD RL7, RHO loads %AB into RL7. Note 1: Word register in compact mode, longword register in segmented or linear modes. Note 2: As shown, the instruction set includes two formats for loading an immediate value into a byte register. The assembler uses the format with one word. 6-99 LOA Load Address LOA dst, src Operation: dst .- EFFECTIV~OORESS dst: R src: BA, BX, EAM (src) The effective address of the source operand is calculated and loaded into the destination. The contents of the source are not affected. The address calculation follows the rules for address arithmetic in the current mode of address representation: compact, segmented or linear. The destination is a word register in compact mode, and a longword register in segmented or linear mode. Flags: No flags affected Exceptions: None Source Addressing Mode Assembler Language Syntax BA: LOA Rd', Rs' (disp) Instruction Format 0011 01 00 Rs ",,0 I Rd I Rd displacement BX: LOA Rd', Rs' (Rx) 011101 00 0000 EAM: LOA Rd', eam I Rx""O a 1 11 1 0 1 1 a Rs""O 0000 0000 earn 1 Rd 1,2, or 3 extension words Examples: LOA R4,STRUCT LOA RR2,RR4(8) !lin compact mode, register R4 is loaded IIwith the compact address of the location IInamed STRUCT !lin linear mode, if base register RR4 IIcontains %01000020, then register RR2 is loaded IIwith the address %01000028 Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-100 LDAR Load Address Relative LDAR dst, src Operation: dst - dst: R src: RA EFFECTIVEjDDRESS (src) The effective address of the source operand is calculated and loaded into the destination. The contents of the source are not affected. The destination is a word register in compact mode, and a longword register in segmented or linear mode. The destination address is calculated by adding the displacement in the instruction to the updated value of the Program Counter (PC). The updated PC value is the address of the instruction word following the LDAR instruction. The displacement is a 16-bit signed value in the range -32768 to 32767 in the second word of the instruction. The addition is performed following the rules of address arithmetic in the current mode of address representation: compact, segmented, or linear. The assembler automatically calculates the displacement by subtracting the PC value of the following instruction from the address given by the programmer. Flags: No flags affected Exceptions: None Source Addressing Mode Assembler Language Syntax RA: LDAR Rdl, address Instruction Format 00 1 1 0 1 00 I0 00 0 I Rd displacement Example: LDAR RR4, TABLE /lin segmented mode, register RR4 is //loaded with the segmented address of TABLE Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-101 LDCTL Privileged Instruction Load Control LOCTL dst, src Operation: dst - dst: src: or dst: src: CTLR R R CTLR src This instruction loads the contents of a general-purpose word register into a control register, or loads the contents of a control register into a general-purpose word register. The control register must be one of the following: FCW PSAPSEG PSAPOFF NSPSEG NSPOFF Flag and Control Word Program Status Area Pointer-high word Program Status Area Pointer-low word Normal Stack Pointer-high word Normal Stack Pointer-low word When the destination register is FCW, the Trace Pending bit (FCW.TP) is set if bit 9 of the source operand is set or if the Trace Enable bit (FCW.T) is set before the instruction is executed. This allows tracing of system programs that may load the FCW mistakenly. Flags: No flags affected, except when the destination is the Flag and Control Word (LDCTL FCW, Rs), in which case all the flags are loaded from the source register. Exceptions: Privileged Instruction trap Load Into Control Register Assembler Language Syntax LDCTL FCW, Rs LDCTL PSAPSEG, Rs LDCTL PSAPOFF, Rs LDCTL NSPSEG, Rs LDCTL NSPOFF, Rs 6-102 Instruction Format 01111101 Rs 01111101 Rs 1110 01 01111101 Rs 1 1101 1 01111101 Rs 1 1110 1 01111101 Rs 11 1 1 1 1 1 1010 1 Load From Control Register Assembler Language Syntax LDCTL Rd, FCW LDCTL Rd, PSAPSEG LDCTL Rd, PSAPOFF LDCTL Rd, NSPSEG LDCTL Rd, NSPOFF Instruction Format 101111101 I Rd I Rd I Rd 101111101 I 101111101 101111101 1011111011 Rd Rd 1 0010 1 1 0100 1 0101 1 1 I I 0110 1 0111 1 6-103 loellB Load Control Byte LOCTLB dst, src Operation: dst - dst: src: or dst: src: FLAGS R R FLAGS src This instruction loads the contents of a general-purpose byte register into the Flags register, or loads the contents of the Flags register into a general-purpose byte register. (The Flags register is the low-order byte of the Flag and Control Word register.) Note that this is not a privileged instruction. Flags: When the FLAGS register is the destination, all the flags are loaded from the source. When the FLAGS register is the source, none of the flags are affected. Exceptions: None Assembler Language Syntax LDCTLB FLAGS, Rbs LDCTLB Rbd, FLAGS 6-104 Instruction Format 10001100 Rbs \10011 10001100 Rbd \ 0 0 0 1 1 Privileged Instruction LDCTLL Load Control Longword LDCTLL dst, src Operation: dst - dst: CTLRL src: R or dst: R src: CTLRL src This instruction loads the contents of a general-purpose longword register into a control register, or loads the contents of a control register into a general-purpose longword register. The control register must be one of the following: SITID SDTID NITID NDTID SCCL OSP HICR PSAP NSP System Instruction Translation Table Descriptor System Data Translation Table Descriptor Normal Instruction Translation Table Descriptor Normal Data Translation Table Descriptor System Configuration Control Longword Overflow Stack Pointer Hardware Interface Control Register Program Status Area Pointer Normal Stack Pointer Flags: No flags affected Exceptions: Privileged Instruction trap Load Into Control Register Assembler Language Syntax LDCTLL SITIO, RRs LOCTLL SOTIO, RRs LOCTLL NITIO, RRs LOCTLL NOTIO, RRs LOCTLL SCCL, RRs LOCTLL asp, Instruction Format 1100111011 RRs 10000 1 1100111011 RRs 10001 1 1100111011 RRs 10010 1 1100111011 RRs 10011 1 1100111011 RRs 10100 1 RRs LOCTLL HICR, RRs 1100111011 RRs 1111 0 1 1100111011 RRs 101 1 1 1 6-105 " .. _... - .~..".--.~.-.~ '" ·"'"·~···-'··E'"=-'"~"=""""'C __ Load Into Control Register (Continued) Assembler Language Syntax LDCTLL PSAP. RRs LDCTLL NSP. RRs Instruction Format 11 0 0 1 1 1 0 1 1 RRs 11 1 0 0 1 11 0 0 1 1 1 0 1 1 RRs 10 1 1 0 1 Load From Control Register LDCTLL RRd. SITTD LDCTLL RRd. SDTTD LDCTLL RRd. NITTD LDCTLL RRd. NDTTD LDCTLL RRd. SCCL LDCTLL RRd. asp LDCTLL RRd. HICR LDCTLL RRd. PSAP LDCTLL RRd. NSP 6-106 1100111111 RRd 100001 1100111111 RRd 100011 1100111111 RRd 100101 1100111111 RRd 100111 1100111111 RRd 10100 1 1100111111 RRd 11 1 1 0 1 1100111111 RRd 101 1 11 1100111111 RRd 11 100 1100111111 RRd I 10110 1 LDD Load and Decrement LDD dst, src, r LDDB LDDL Operation: dst: IR src: IR dst - src AUTODECREMENT dst and src (by 1 if LDDB; by 2 if LDD; by 4 if LDDL) r- r - 1 This instruction is used for block transfers of strings of data. The contents of the location addressed by the source register are loaded into the location addressed by the destination register. The source and destination registers are then decremented by one if LDDB, by two if LDD or by four if LDDL, thus moving the pointers to the previous elements in the strings. The word register specified by "r" (used as a counter) is then decremented by one. The source destination, and counter registers must be distinct and non-overlapping registers. The effect of decrementing the pointers during the transfer is important if the source and destination strings overlap with the source string starting at a lower memory address. Placing the pOinters at the highest address of the strings and decrementing the pointers ensures that the source string will be correctly copied including the overlapping area. However, the destination address must not exceed the source address by one for LDD, and by one, two, or three for LDDL; otherwise, the CPU may not recover correctly from address translation exceptions. c: Flags: Unaffected Unaffected Unaffected Set if the result of decrementing r is zero; cleared otherwise Unaffected H: Unaffected Z: S: V: D: Exceptions: None Addressing Mode Assembler Language Syntax IR: LDD @Rs\ @Rd\ r LDDB @Rs\ @Rd 1 , r Instruction Format 10111011 w Rs;tO 1001 00001 Rd;tO 1000 10111001 Rs;tO 1001 0.0001 Rd;tO 1000 6·107 Example: In linear mode, if register RR20 contains %0000202A, register RR22 contains %0000404A, the word at location %0000404A contains % FFFF, and register R3 contains 5, executing the instruction LDD @RR20, @RR22, R3 leaves the value % FFFF at location %0000202A, the value %00002028 in RR20, the value %00004048 in RR22, and the value 4 in R3. The V flag is cleared. In compact mode, word registers must be used instead of RR20 and RR22. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-108 LDDR Load, Decrement and Repeat LDDR dst, src, r LDDRB LDDRL Operation: dst: IR src: IR repeat dst - src AUTODECREMENT dst and src (by 1 if LDDRB; by 2 if LDDR; by 4 if LDDRL) r- r - 1 until r = 0 This instruction is used for block transfers of strings of data. The contents of the location addressed by the source register are loaded into the location addressed by the destination register. The source and destination registers are then decremented by one if LDDRB, by two if LDD, or by four if LDDL, thus moving the pointers to the previous elements in the strings. The word register specified by "r" (used as a counter) is then decremented by one. The entire operation is repeated until the result of decrementing r is zero. This instruction can move from 1 to 65,536 data elements. The source, destination, and counter registers must be distinct and nonoverlapping registers. The effect of decrementing the pointers during the transfer is important if the source and destination strings overlap with the source string starting at a lower memory address. Placing the pointers at the highest address of the strings and decrementing the pOinters ensures that the source string will be correctly copied including the overlapping area. However, the destination address must not exceed the source address by one for LDDR, and by one, two, or three for LDDRL; otherwise, the CPU may not recover correctly from address translation exceptions. This instruction can be interrupted after each execution of the basic operation. c: Flags: Unaffected Z: Unaffected S: Unaffected V: Set D: Unaffected H: Unaffected Exceptions: None Addressing Mode Assembler Language Syntax IR: LDDR @Rdl, @Rs 1 , r LDDRB @Rd 1 , @Rsl, r Instruction Format 10111011w Rs*O 1001 Rd*O 0000 00001 10111001 Rs*O 1001 00001 Rd*O 0000 6-109 Example: In compact mode, if register R1 contains %202A, register R2 contains %404A, the words at locations %4040 through %404A all contain % FFFF, and register R3 contains 6, executing the instruction LDDR @R1, @R2, R3 leaves the value % FFFF in the words at locations % 2020 through % 202A, the value %201 E in R1, the value %403E in R2, and 0 in R3. The V flag is set. In segmented or linear mode, longword registers must be used instead of R1 and R2. Note 1: Word register in compact mode. longword register in segmented or linear modes. 6-110 LDI Load and Increment LOI dst, src, r LOIB LOlL Operation: dst: IR src: IR dst - src AUTOINCREMENT dst and src (by 1 if LOIS; by 2 if LOI; by 4 if LOlL) r- r - 1 This instruction is used for block transfers of strings of data. The contents of the location addressed by the source register are loaded into the location addressed by the destination register. The source and destination registers are then incremented by one if LOIS, by two if LOI, or by four if LOlL, thus moving the pointers to the next elements in the strings. The word register specified by "r" (used as a counter) is then decremented by one. The source, destination, and counter registers must be distinct, non-overlapping registers. The effect of incrementing the pointers during the transfer is important if the source and destination strings overlap with the source string starting at a higher memory address. Placing the pointers at the lowest address of the strings and incrementing the pointers ensures that the source string will be correctly copied including the overlapping area. However, the destination address must not exceed the source address by one for LOI; and by one, two, or three for LOlL; otherwise, the CPU may not recover correctly from address translation exceptions. Flags: C: Z: S: V: 0: H: Unaffected Unaffected Unaffected Set if the result of decrementing r is zero, cleared otherwise Unaffected Unaffected Exceptions: None Addressing Mode Assembler Language Syntax IR: LDI @Rdl, @RS1, r LDIB @Rdl, @RS1, r Instruction Format 10111011 w Rs*O 0001 00001 Rd*O 1000 10111001 Rs*O 0001 Rd*O 1000 000 oj 6-111 Example: This instruction can be used in a "loop" of instructions which transfers a string of data from one location to another, but where an intermediate operation on each data element is required. The following sequence transfers a string of 80 bytes, but tests for a special value (%OD, an ASCII return character) which terminates the loop if found. This example assumes compact mode. In segmented or linear mode, longword registers must be used instead of R1 and R2. LD LDA LDA R3, #80 R1, DSTSUF R2,SRCSUF lIinitialize counter //load start addresses @R2, #%OD IIcheck for return character lIexit loop if found /!transfer next byte IIrepeat until counter = 0 LOOP: CPS JR LDIS JR EO,DONE @R1, @R2, R3 NOV, LOOP DONE: Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-112 LDIR Load, Increment and Repeat LDIR dst, src, r LDIRB LDIRL Operation: dst: IR src: IR repeat dst - src AUTOINCREMENT dst and src (by 1 if LOIRB; by 2 if LOIR; by 4 if LOIRL) r- r - 1 until r = 0 This instruction is used for block transfers of strings of data. The contents of the location addressed by the source register are loaded into the location addressed by the destination register. The source and destination registers are then incremented by one if LOIRB, or by two if LOI, or by four if LOlL, thus moving the pOinters to the next elements in the strings. The word register specified by "r" (used as a counter) is then decremented by one. The entire operation is repeated until the result of decrementing r is zero. This instruction can move from 1 to 65,536 data elements. The source, destination, and counter registers must be distinct, non-overlapping registers. The effect of incrementing the pOinters during the transfer is important if the source and destination strings overlap with the source string starting at a higher memory address. Placing the pointers at the lowest address of the strings and incrementing the pOinters ensures that the source string will be correctly copied including the overlapping area. However, the destination address must not exceed the source address by one for LOIR, and by one, two, or three for LOIRL; otherwise, the CPU may not recover correctly from address translation exceptions. This instruction can be interrupted after each execution of the basic operation. c: Flags: Unaffected Z: Unaffected S: Unaffected V: Set 0: Unaffected H: Unaffected Exceptions: None Addressing Mode Assembler Language Syntax I.nstruction Format IR: LDIR @Rdl, @Rsl, r LDIRB @Rd1 , @Rsl, r 10111011W Rs,.O 0001 00001 r 1 01 11 001 00001 Rd,. 0 0000 Rs,.O 0001 r 6-113 Example: The following sequence of instructions can be used in compact mode to copy a buffer of 512 words (1024 bytes) from one area to another. The pointers to the start of the source and destination are set, the number of words to transfer is set, and then the transfer takes place. LOA LOA LO LOIR R1,OSTBUF R2,SRCBUF R3, #512 @R1, @R2, R3 In segmented or linear mode, longword registers must be used instead of R1 and R2. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6·114 LDK Load Constant LDK dst, src LDKL Operation: dst - src (src dst: R src: 1M = 0 to 15) The source operand, a value from 0 to 15, is loaded into the destination register. Flags: No flags affected Exceptions: None Destination Addressing Mode Assembler Language Syntax R: LDK Rd, #data LDKL RRd, #data Example: Instruction Format 10 111101 I 0 0111000 I Rd I dala RRd data To load register R3 with the constant 9, execute the instruction LDK R3,#9 6-115 LDM Load Multiple LDM dst, src, n LDM dst, src Operation: dst - dst: src: or dst: src: R IR, EAM IR, EAM R dst: R src: 1M src(n words) The contents of n (a value from 1 to 16) consecutive source words are loaded into the destination. The contents of the source are not affected. The instruction can be used to load multiple word registers either into or from memory. Registers are accessed in increasing order starting with the specified register; RO follows R15. The value in the instruction field for the number of words loaded ("n") is one less than the actual number of words. Thus, the coding in the instruction field ranges from 0 to 15, which corresponds to loading 1 to 16 words. The starting memory address is calculated once at the start of execution, and incremented by two for each register loaded. If the original address calculation involved a register, the register's value is not affected by incrementing the address during execution. Similarly, modifying that register during a load from memory does not affect the address used by this instruction. Flags: No flags affected Exceptions: None Load Multiple- Registers From Memory Source Addressing Mode 1M: Assembler Language Syntax LDM Rd, Idatao, Idata1 .. · ., Idatan_1 Instruction Format 001011100 00001 Rd 0000 0001 0000 n-1 n words data IR: LDM Rd, @Rsl, In 001011100 00001 EAM: LDM Rd, earn, In Rd 011011100 00001 Rd Rs*O 0001 0000 n-1 eam 0001 0000 n-1 1,2, or 3 extension words 6-116 Load Multiple-Memory From Registers Destination Addressing Mode Assembler Language Syntax IR: LDM @Rd 1 , Rs, Un EAM: LDM eam, Rs, Un Instruction Format o0 I 0 1 1 1 0 0 Rd o0 0 0 I 0 00 0 n- 1 earn 10 0 1 0 00 0 n- 1 Rs o1 I 0 1 1 1 0 0 o 0 0 0 I Rs *' 0 1001 1,2, or 3 extension words Example: In compact mode, if register R5 contains 5, R6 contains %0100, and R7 contains 7, executing the instruction LDM @R6, R5, #3 leaves the values 5, %0100, and 7 at word locations %0100, %0102, and %0104, respectively; none of the registers is affected. In segmented or linear mode, a longword register must be used instead of R6. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-117 LDML Load Multiple Longwords LDML mask, src LDML dst, mask Operation: src: 1M, IR, EAM mask: 1M or dst: IR, EAM mask: 1M Load Multiple Longwords-Registers from Memory tsrc - EFFECTIV~DDRESS (src) for i = 0 to 7 do if mask = 1 then RR [2 x i + 16]- @tsrc tsrc - tsrc + 4 for i = 8 to 15 do if mask = 1 then RR [2 x i -16]- @tsrc tsrc - tsrc + 4 Load Multiple Longwords-Memory from Registers tdst - EFFECTIV~DDRESS (dst) for i = 0 to 7 do if mask < i > = 1 then @tdst- RR [2 x i+ 16] tdst - ldst + 4 for i = 8 to 15 do if mask < i > = 1 then @tdst - RR [2 x i -16]; tdst - tdst + 4 This instruction can be used to load multiple longword registers either into or from memory. Each bit in the mask operand that is set to 1 corresponds to a longword register to be loaded. Bits 0 to 7 of the mask operand designate the longword registers RR16 to RR30 respectively. Bits 8 to 15 of the mask operand designate the longword registers RRO to RR14 respectively. The format of the mask operand is shown in Figure 6-4. 15 L J ~ LOAD RR16 LOAD RR18 LOAD RR20 LOAD RR22 LOAD RR24 LOAD RR26 LOAD RR28 LOAD RR30 LOAD RRO LOAD RR2 LOAD RR4 LOAD RR6 LOAD RR8 LOAD RR10 LOAD RR12 LOAD RR14 Figure 6·4. Mask Operand Format 6-118 8225-015 The starting memory address is calculated once at the start of execution and incremented by four for each register loaded. If the original address calculation involved a register, the register's value is not affected by incrementing the address during execution. Similarly, modifying that register during a load from memory does not affect the address used by this instruction. Flags: No flags affected Exceptions: None Load Multiple Longwords- Registers From Memory Source Addressing Mode 1M: Assembler Language Syntax LDML'mask, /ildalao, /ildala1 ,... ,/ildalan_1 Instruction Format 001 0111001000010101 mask n longwords data IR: LDML /ilmask, @RS1 o 01 0 1 1 1 0 0 * 1 Rs 0 10 1 0 1 mask EAM: LDML, /ilmask, eam o1 1 0 1 1 1 0 0 1 eam 10 1 0 1 mask 1, 2, or 3 extension words Load Multiple Longwords-Memory from Registers Destination Addressing Mode Assembler Language Syntax IR: LDML @Rdl, /ilmask Instruction Format o 0 10 1 1 1 0 0 1 Rd * 0 J1 1 0 1 mask EAM: LDML eam, /ilmask o 1 10 1 1 1 0 0 1 earn 11 1 0 1 mask 1, 2, or 3 extension words Example: In linear mode, if base register RR2 contains % 1000 and the longwords at location % 1000 and % 1002 contain 100 and 150 respectively, executing the instruction LDML. #5, @RR2 loads 100 into RR16 and 150 into RR20. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6·119 LON Privileged Instruction Load Normal LONO dst, src, n LONOB LONOL LON I LONIB LONIL Operation: dst - dst: src: or dst: src: R IR, EAM IR, EAM R src These instructions allow programs executing in system mode to reference information in normal mode data and instruction memory address spaces. This is useful for accessing system call parameters when system and normal mode address spaces are separated. The LDND instructions reference normal data space and the LDNI instructions reference normal instruction space. There are versions of the instructions to load from memory to a register and from a register to memory. When performing the memory reference, the address translation mechanism uses the translation tables for normal data or instruction space, and checks the access permission for system mode. Flags: No flags affected Exceptions: Privileged Instruction trap Load Register from Normal Space Source Addressing Mode IR: Assembler Language Syntax LDND Rd, @RS1 LDNDB Rbd, @RS1 LDNDL RRd, @RS1 LDNI Rd, @RS1 LDNIB Rbd, @RS1 Instruction Format 01111010 00110000lw Rs*O Rd 01111010 0011 01 1 1 001010100 Rs*O RRd 01111010 00110000lw LDNIL RRd, @RS1 01111010 001010100 6-120 001 1 01 1 1 0010 01 1 1 Rs*O Rd 0010 01 1 1 Rs*O RRd ~-- ~--~----~-----~ --- Load Register from Normal Space (Continued) Source Addressing Mode EAM: Assembler Language Syntax LDND Rd, eam LDNDB Rbd, eam Instruction Format 0111101000110111 01110000lw earn Rd 1, 2, or 3 extension words LDNDL RRd, eam 0111101000110111 o1 10 1 0 1 0 0 earn RRd 1, 2, or 3 extension words LDNI Rd, eam LDNIB Rbd, eam 0111101000100111 o 111 0 0 0 otw earn Rd 1,2, or 3 extension words LDNIL RRd, eam 0111101000100111 01101 01 00 earn RRd 1, 2, or 3 extension words Load Normal Space from Register Destination Addressing Mode IR: Assembler Language Syntax LDND @Rdl, Rs LDNDB @Rd, Rbs Instruction Format 01111010 001 1 001101111w Rd*O LDNDL @Rdl, RRs LDNI @Rdl, Rs LDNIB @Rdl, Rbs 01111010 Rs 001 1 011 1 Rs 001 01 1 1 01 Rd*O 01111010 0010 01 11 00110111jW Rd*O LDNIL @Rdl, RRs o 111 Rs 01111010 0010 011 1 001 01 1 1 01 Rd*O RRs 6-121 Load Normal Space from Register (Continued) Destination Addressing Mode EAM: Assembler Language Syntax LDND eam, Rs LDNDS eam, Rbs Instruction Format 01111010 011101111w 001 1 0111 earn Rs 1, 2, or 3 extension words LDNDL eam, RRs 01111010 011011101 001 1 0111 earn RRs 1, 2, or 3 extension words LDNI eam, Rs LDNIS eam, Rbs 01111010 011101111w 0010 0111 earn Rs 1,2, or 3 extension words LDNIL eam, RRs 1,2, or 3 extension words Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-122 LDP Privileged Instruction Load Physical Address LDPND dst, src LDPNI LDPSI LDPSD Operation: dst - dst: R src: IR, EAM PHYSICAL...ADDRESS (src) These instructions translate the logical address of the source operand to a physical address, and store the result into the destination. Four versions of the instruction are provided, one for each of the logical memory address spaces: normal mode instruction space (LDPNI), normal mode data space (LDPND), system mode instruction space (LDPSI), and system mode data space (LDPSD). The Z flag is set when the translation is valid, and cleared otherwise. The V and C flag settings indicate whether or not read and write accesses are permitted to the source byte address. This feature is useful for verifying access rights for addresses passed as system call parameters from normal to system mode. The S flag is set when the access information reported in the V and C flags is valid, and cleared otherwise. (During address translation, the PROT field specifying the access rights may be valid although one of the translation table entries is invalid.) When address translation is disabled, read and write accesses are permitted to all addresses. c: LDPND, Flags: LDPNI-set if write access is permitted for the source operand in normal mode; cleared otherwise; LDPSI, LDPSD-set if write access is permitted for the source operand in system mode; cleared otherwise Z: Set if the translation is valid; cleared otherwise S: Set if the protection information in flags C and V is valid; cleared otherwise V: LDPND, LDPNI-set if read access is permitted for the source operand in normal mode; cleared otherwise; LDPSI, LDPSD-set if read access is permitted for the source operand in system mode; cleared otherwise D: Unaffected H: Unaffected Exceptions: Privileged Instruction trap Source Addressing Mode Assembler Language Syntax IR: LDPND RRd, @Rs' LDPNI RRd, @Rs' LDPSD RRd, @Rs' LDPSI RRd, @Rs' Instruction Format 01111010 0011 11 01 001110110 Rs*O RRd 01111010 0010 11 01 001 11 0110 Rs*O RRd 01111010 0001 11 01 001110110 Rs*O RRd 01111010 001110110 0000 11 01 Rs*O RRd 6-123 Source Addressing Mode Assembler Language Syntax EAM:·", Instruction Format LDPND RRd, earn 01111010 011110110 001 1 1101 earn RRd 1, 2, or 3 extension words LDPNI RRd, earn 01111010 0111 1 01 1 0 0010 1101 earn RRd 1, 2, or 3 extension words LDPSD RRd, earn 01111010 0~110110 0001 1101 earn RRd 1, 2, or 3 extension words LDPSI RRd, earn 01111010 011110110 0000 1 1 01 earn RRd 1,2, or 3 extension words I Note 1: Word register' in compact mode, longword register 6-124 - I In segmented or linear modes. LOPS Privileged Instruction Load Program Status LOPS src Operation: src: IR, EAM tmp - EFFECTIVEJDDRESS (src) IIsegmented or linear mode if FCW.EtC then tmp 2 - @(tmp1 + 2) //fetch FCW PC - @(tmp1 + 4) //fetch PC (Iongword) else IIcompact mode //fetch FCW tmp 2 - @tmp1 PC - @(tmp1 + 2) //fetch PC (low-order word) if FCW.T then tmp2<9> - 1 FCW- tmp2 The contents of the source operand are loaded into the Program Status (PS) registers, both the Flag and Control Word (FCW) and the Program Counter (PC). In compact mode the source operand includes two words: the new FCW and the new low-order word of PC. The high-order word of PC is unaffected. In segmented or linear mode, the source operand includes four words: a reserved word (which must contain 0), the new FCW, and the new PC longword After LDPS is executed, the Trace Pending bit (FCW.TP) is set if bit 9 is set in the source operand FCW or if the Trace Enable (FCW.T) bit was set before the instruction was executed. This allows the LDPS instruction to be traced for single-step debugging. COMPACT ..OM.NT.D OR LlN.AR LOW ADDRESS FCW 0 PC FCW PCSEG. NO. PC OFFSET HIGH ADDRESS Flags: All flags are loaded from the source operand. Exceptions: Privileged Instruction trap Source Addressing Mode Assembler Language Syntax IR: LDPS @R S1 EAM: LDPS earn Instruction Format 10011110011 Rs*O 100001 o 1J 111001 J earn I0 0 0 0 1,2, or 3 extension words 6-125 Example: In compact mode, if register R3 contains %5000, location %5000 contains % 1800, and location %5002 contains % AOOO, executing the instruction LDPS @R3 leaves the value % AOOO in the PC, and the FCW value is % 1800. Note 1: Word register in compact mode. longword register in segmented or linear modes. 6-126 LOR Load Relative LOR dst, src LORB LORL Operation: dst - dst: R src: RA or dst: RA src: R src The contents of the source operand are loaded into the destination. The contents of the source are not affected. The effective address is calculated by adding the displacement in the instruction to the updated value of the program counter (PC). The updated PC value is the address of the instruction word following the LDR, LDRB, or LDRL instruction. The displacement is a 16-bit signed value in the range -32768 to 32767. The assembler automatically calculates the displacement by subtracting the PC value of the following instruction from the address given by the programmer. Flags: No flags affected Exceptions: None Load Relative Register Destination Addressing Mode RA: Assembler Language Syntax LOR Rd, address LORB Rbd, address Instruction Format 0011000lwl00001 Rd displacement LORL RRd, address 00110101100001 RRd displacement Load Relative Memory Destination Addressing Mode RA: Assembler Language Syntax LOR address, Rs LORB address, Rbs Instruction Format 00110011wlooooi Rs dlsplacament LORL address, RRs 00110111100001 RRs displacement Example: LDRR2, DATA IIregister R2 is loaded with the value in lithe location named DATA 6-127 MULT Multiply MULl dst, src MULTL Operation: dst: R src: R, 1M, IR, EAM Word (dst is longword register, src is word) dst<31:0> - dst<15:0> X src<15:0> Longword (dst is quadword register, src is longword) dst<63:0> - dst<31:0> X src<31:0> The low-order half of the destination operand (multiplicand) is multiplied by the source operand (multiplier) and the product is stored in the destination. The contents of the source are not affected. Both operands are treated as signed, twos complement integers. For MULT, the destination is a longword register and the source is a word value; for MULTL, the destination is a quadword register and the source is a longword value. For proper instruction execution, the "dst field" in the MULTL instruction format encoding must specify a valid code for a quadword register. Otherwise, the result is undefined. . The initial contents of the high-order half of the destination register do not affect the operation of this instruction and are overwritten by the result. The C flag is set to indicate that the upper half of the destination register is required to represent the result; if the C flag is clear, the product can be correctly represented in the same precision as the multiplicand, and the upper half of the destination merely holds a sign extension. c: Flags: Z: S: V: D: H: Exceptions: Source Addressing Mode R: MULT-set if product is less than _2 15 or greater than or equal to 215 ; cleared otherwise; MULTL-set if product is less than -2 31 or greater than or equal to -231 ; cleared otherwise Set if the result is zero; cleared otherwise Set if the result is negative; cleared otherwise Cleared Unaffected Unaffected None Assembler Language Syntax MULT RRd, Rs MULTL ROd, RRs 1M: MULT RRd, #data Instruction Format 11010110011 11 0 1 0 1 1 00 0 o0 I 0 1 1 0 0 1 I RRd Rs RRs I RQd 1 I0 0 0 0 I RRd data MULTL ROd, #data 001 011000100001 RQd data (high) data (low) 6-128 Source Addressing Mode Assembler Language Syntax IR: MULT RRd, @Rs' MULTL ROd, @Rs' EAM: MULT RRd, earn Instruction Format I 1001011000 I 1001 011001 o 1 I 0 1 1 00 1 Rs*O Rs*O I I RRd ROd I earn I RRd 1, 2, or 3 extension words MULTL ROd, earn o 11 0 1 1 000 I earn 1 ROd 1, 2, or 3 extension words Example: If register ROO (composed of longword registers RRO and RR2) contains %2222222200000031 (RR2 contains decimal 49), executing the instruction MULT ROO,II10 leaves the value %00000000000001EA (decimal 490) in ROO. The C, Z, S, and V flags are cleared. Note': Word register in compact mode, longword register in segmented or linear modes. 6-129 MULTU Multiply Unsigned MULTU dst,src MULTUL Operation: dst: R src: R, 1M, IR, EAM Word (dst is longword register, src is word) dst<31:0> - dst<15:0> x src<15:0> Longword (dst is quadword register, src is longword) dst<63:0> - dst<31:0> x src<31:0> The low-order half of the destination operand (multiplicand) is multiplied by the source operand (multiplier) and the product is stored in the destination. The contents of the source are not affected. Both operands are treated as unsigned integers. For MULTU, the destination is a longword register and the source is a word value; for MULTUL, the destination is a quadword register and the source is a longword value. For proper instruction execution the "dst field" in the MULTUL instruction encoding must specify a valid code for a quadword register. Otherwise, the result is undefined. The initial contents of the high-order half of the destination register do not affect the operation of this instruction and are overwritten by the result. The C flag is set to indicate that the upper half of the destination register is required to represent the result; if the C flag is clear, the product can be correctly represented in the same precision as the multiplicand, and the upper half of the destination merely holds o. c: Flags: Z: S: V: D: H: Exceptions: Source AddreSSing Mode R: MULTU-set if product is greater than or equal to 216 ; cleared otherwise; MULTUL-set if product is greater than or equal to 232 ; cleared otherwise Set if the result is zero; cleared otherwise Set if the most-significant bit of the result is set; cleared otherwise Cleared Unaffected Unaffected None Assembler Language Syntax MULTU RRd, Rs Instruction Format 0111101000000011 I 10 011001 MULTUL ROd, RRs I RRd 0111101000000011 1 6-130 Rs oj 0 1 1 0 0 0 RRs l RQd Source Addressing Mode Assembler Language Syntax 1M: MULTU RRd, Ifdata Instruction Format 0111101000000011 o0 \ 0 1 1 0 0 1 0 0 0 0 \ RRd data MULTUL ROd, Ifdata 0111101000000011 o0 \ 0 1 1 0 0 0 0 0 0 0 \ RQd data(high) data(low) IR: MULTU RRd, @Rs' 01111010 0000 0011 00101 1001 MULTUL ROd, @Rs' EAM: MULTU RRd, eam Rs*O I RRd 01111010 0000 0011 001011000 RS*O\ RQd 01111010 0000 0011 01\011001 earn \ RRd 1, 2, or 3 extension words MULTUL ROd, eam 0111101000000011 o 1\ 0 1 1 0 0 0 earn \ RQd 1, 2, or 3 extension words Example: If register RRO (composed of RO and R1) contains % ABCD FFFF (R1 contains decimal 65,535), executing the instruction MULTU RRO,#16 leaves the value % OOOFFFFO (decimal 1,048,560) in RRO. The C flag is set and the Z, S, and V flags are cleared. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-131 NEG Negate NEG dst NEGB NEGL Operation: dst - dst: R, IR, EAM -dst The contents of the destination are negated, that is, replaced by twos complement values. Note that %8000 for NEG, %80 for NEGB, and %80000000 for NEGL are replaced by themselves since in twos complement representation the negative number with greatest magnitude has no positive counterpart; for these three cases, the V flag is set. c: Flags: Cleared if the result is zero; set otherwise, which indicates a borrow Z: Set if the result is zero; cleared otherwise S: Set if the result is negative; cleared otherwise V: Set if the result is %8000 for NEG, %80 for NEGB, or %80000000 for NEGL cleared otherwise 0: Unaffected H: Unaffected Exceptions: Destination Addressing Mode R: Integer Overflow trap Assembler Language Syntax NEG Rd NEGB Rbd NEGL RRd IR: 11 0 I 011 1 00 I RRd 1001 01 NEG @Rd 1 NEGB @Rd1 NEGL @Rd' EAM: Instruction Format NEG eam NEGB eam I 10 0 0 1 1 1 0 0 01J00110Jw I Rd *- 0 I0 0 1 01 l eam 10010 1,2, or 3 extension words NEGL eam o 1 I0 1 1 1 0 0 I eam 10 0 1 0 1, 2, or 3 extension words Example: If register RR8 contains %0000051 F, executing the instruction NEGL RR8 leaves the value % FFFFFAE1 in RR8. Note 1: Word register in compact mode. longword register in segmented or linear modes. 6-132 NOP No Operation NOP Operation: No operation is performed. Flags: No flags affected Exceptions: None Destination Addressing Mode Assembler Language Syntax NOP Instruction Format 110001101 00000111 6-133 OR Or OR dst, src ORB ORL Operation: dst - dst: R src: R, 1M, IR, EAM dst OR src The source operand is logically ORed with the destination operand and the result is stored in the destination. A 1 bit is stored whenever either of the corresponding bits in the two operands is 1; otherwise a 0 bit is stored. The contents of the source are not affected. c: Flags: Unaffected Z: Set if the result is zero; cleared otherwise S: Set if the most-significant bit of the result is set; cleared otherwise P: OR, ORL-unaffected; ORB-set if parity of the result is even; cleared otherwise 0: Unaffected H: Unaffected Exceptions: None Source Addressing Mode R: 4 _ _ _ _ .... 1 __ I ___ ~~ __ _ .l"\l:>l:>IC'IIIUIIC'I L.ClII\:IUCI\:I" Syntax Instruction Format ORRd, Rs ORB Rbd, Rbs ORL RRd, RRs Rd 0111101000000010 I 1M: OR Rd, 'data I RRd 10 000101 RRs o0 1 0 0 0 1 0 1 10 0 0 0 -I Rd I Rd data ORB Rbd, 'data ORL RRd, 'data 001 000100 0000 data data 01111010 0000 0010 001000101 0000 RRd data (high) data (low) IR: OR Rd, @RS1 ORB Rbd, @RS1 ORL RRd, @Rs' I0 0 10 0 0 1 0 IwIRH 0 I .Rd 01111010 001000101 6-134 0000 0010 Rs*O RRd Source Addressing Mode EAM: Assembler Language Syntax OR Rd, earn ORB Rbd, earn Instruction Format o 1 10 0 0 1 01 w e8m 1 Rd 1, 2, or 3 extension words ORL RRd, earn 01111010 o 11 000101 00000010 e8m 1 RRd 1, 2, or 3 extension words Example: If register RL3 contains %C3 (11000011) and the source operand is the immediate value % 7B (01111011), executing the instruction ORB RL3,#%7B leaves the value % FB (11111011) in RL3. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6·135 OTOR Privileged Instruction Output, Decrement and Repeat OTOR dst, OTORB OTORL Operation: src, r dst: IR src: IR repeat dst - src AUTODECREMENT src (by 1 if OTDRB; by 2 if OTDR; by 4 if OTDRL) r - r-1 until r = 0 This instruction is used for block output of strings of data. The contents of the memory location addressed by the source register are loaded into the 1/0 port addressed by the destination word register. 1/0 port addresses are 16 bits. The source register is then decremented by one if OTDRB, by two if OTDR , or by four if OTDRL, thus moving the pointer to the previous element of the string in memory. The word register specified by "r" (used as a counter) is then decremented by one. The address of the 1/0 port in the destination register is unchanged. The entire operation is repeated until the result of decrementing r is zero. This instruction can output from 1 to 65,536 data elements. The source, destination, and counter registers must be distinct, non-overlapping registers. This instruction can be interrupted after each execution of the basic operation. c: Flags: Unaffected Z: Unaffected S: Unaffected V: Set 0: Unaffected H: Unaffected Exceptions: Addressing Mode IR: Privileged Instruction trap Assembler Language Syntax OTDR @Rd,@Rsl, r OTDRB @Rd,@Rs1, r Instruction Format 00111011 w Rs*O 1010 Rd * 0 0000 00001 01111010 0000 0010 00111011 00001 6-136 r Rs*O 1010 Rd*O 0000 Example: In linear mode, if register R11 contains %OFFF, register RR22 contains %00008006, and R13 contains 6, executing the instruction OTDR @R11, @RR22, R13 outputs the string of words from locations %00008006 to %OOOOAFFC (in descending order of address) to port %OFFF. RR22 contains %OOOOAFFA, and R13 contains O. R11 is not affected. The V flag is set. In compact mode, a word register must be used instead of RR22. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-137 OTI R Privileged Instruction Output, Increment and Repeat OTIR dst, src, r OTIRB OTIRL Operation: dst: IR src: IR repeat dst - src AUTOINCREMENT src (by 1 if OTIRB; by 2 if OTIR; by 4 if OTIRl) r- r - 1 =0 until r This instruction is used for block output of strings of data. The contents of the memory location addressed by'the source register are loaded into the 1/0 port addressed by the destination word register. 110 port addresses are 16 bits. The source register is then incremented by one if OTIRB, by two if OTIR, or by four if OTlRl, thus moving the pointer to the next element of the string in memory. The word register specified by "r" (used as a counter) is then decremented by one. The address of the 1/0 port in the destination register is unchanged. The entire operation is repeated until the result of decrementing r is zero. This instruction can output from 1 to 65,536 data elements. The source, destination, and counter registers must be distinct, non-overlapping registers. This instruction can be interrupted after each execution of the basic operation. c: Flags: Unaffected Z: Unaffected S: Unaffected V: Set D: Unaffected H: Unaffected Exceptions: Addressing Mode IR: Privileged Instruction trap Assembler Language Syntax OTIR @Rd, @Rsl, r OTIRB @Rd, @Rsl, r Instruction Format 00111011W Rs*O 0010 00001 OTiRL @Rd, @Rsl, r 6-138 r 01111010 Rd*O 0000 00000010 001 1 1 01 1 Rs*O 001 0 00001 Rd*O 0000 Example: In compact mode, the following sequence of instructions can be used to output a string of bytes to the specified 1/0 port. The pointers to the 1/0 port and the start of the source string are set, the number of bytes to output is set, and then the output is accomplished. LO LOA R1, #PORT R2, SRCBUF LO RS, #LENGTH OTIRB @R1, @R2, R3 In segmented or linear mode, a longword register must be used instead of R2. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-139 OUT Privileged Instruction Output OUT dst, src OUTB OUTl Operation: dst - dst IR, DA src: R src The contents of the source register are loaded into the destination, an output port. I/O port addresses are 16 bits. Flags: No flags affected. Exceptions: Destination Addressing Mode Privileged Instruction trap Assembler Language Syntax IR: OUT @Rd, Rs OUTS @Rd, Rbs OUTL @Rd,RRs DA: Instruction Format I0 0 1 1 1 1 1 Iw I Rd *" 0 I Rs 101111010 1000000101 •••••• tlA ... nl tltI~ I I nnl v v I . . . . . . I .. - ~ - I .... - OUT port, Rs OUTS port, Rbs o 0 1 1 1 0 1 IW Rs 0110 port OUTL port, RRs 0111101000000010 o 011 11011 port Example: If register R6 contains % 5252, executing the instruction OUT % 1120, R6 outputs the value % 5252 to the port % 1120. 6-140 RRs 0110 OUTD Privileged Instruction Output and Decrement OUTO dst, src, r OUTOB OUTOL Operation: dst: IR src: IR dst - src AUTODECREMENT src (by 1 if OUTDS; by 2 if OUTD; or by 4 if OUTDL) r- r - 1 This instruction is used for block output of strings of data. The contents of the memory location addressed by the source register are loaded into the 1/0 port addressed by the destination word register. 110 port addresses are 16 bits. The source register is then decremented by one if OUTDS, by two if OUTD, or by four if OUTDL, thus moving the pointer to the previous element of the string in memory. The word register specified by "r" (used as a counter) is then decremented by one. The address of the 1/0 port in the destination register is unchanged. The source, destination, and counter registers must be distinct, non-overlapping registers. Flags: C: Unaffected Z: Unaffected S: Unaffected V: Set if the result of decrementing r is zero; cleared otherwise 0: Unaffected H: Unaffected Exceptions: Privileged Instruction trap Addressing Mode Assembler Language Syntax IR: auTO @Rd, @Rsl, r aUTOB @Rd, @Rsl, r Instruction Format 00111011 w Rs*O 00001 aUTDL @Rd, @Rsl, r 1010 Rd*O 1000 01111010 0000 0010 00111011 Rs*O 1010 00001 Example: r r Rd*O 1000 In linear mode, if register R2 contains the 110 port address %0030, register RR6 contains % 12005552, the word at memory location % 12005552 contains % 1234, and register RB contains % 1001, executing the instruction OUTD @R2, @RR6, RB outputs the value %1234 to port %0030 and leaves the value %12005550 in RR6, and % 1000 in RB. Register R2 is not affected. The V flag is cleared. In compact mode, a word register must be used instead of RR6. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-141 OUTI Privileged Instruction Output and Increment OUTI dst, src, r OUTIB OUTll Operation: dst: IR src: IR dst - src AUTOINCREMENT src (by 1 if OUTIS; by 2 if OUTI; by 4 if OUTIL) r- r - 1 This instruction is used for block output of strings of data. The contents of the memory location addressed by the source register are loaded into the 1/0 port addressed by the destination word register. 1/0 port addresses are 16 bits. The source register is then incremented by one if OUTIS, by two if OUTI, or by four if OUTIL, thus moving the pOinter to the next element of the string in memory. The word register specified by "r" (used as a counter) is then decremented by one. The address of the 110 port in the destination register is unchanged. The source, destination, and counter registers must be distinct, non-overlapping registers. c: Flags: Z: S: V: 0: H: Exceptions: Addressing Mode IR: Unaffected Unaffected Unaffected Set if the result of decrementing r is zero; cleared otherwise Unaffected Unatlected Privileged Instruction trap Assembler language Syntax OUTI @Rd. @Rsl, r OUTIS @Rd. @Rsl, r Instruction Format 00111011 w Rs * 0 0010 0000] OUTIL @Rd. @Rsl, r 6-142 r 01111010 Rd * 0 1000 0000 0010 00111011 Rs*O 0010 0000] Rd*O 1000 Example: This instruction can be used in a "loop" of instructions that outputs a string of data, but an intermediate operation on each element is required. The following sequence outputs a string of 80 ASCII characters (bytes) with the most significant bit of each byte set or reset to provide even parity for the entire byte. Sit 7 of each character is initially O. This example assumes compact mode. In segmented or linear mode, a longword register must be used instead of R2. LD R1, #PORT //load I/O address //load start of string LDA R2,SRCSTART !!initialize counter LD R3, #80 LOOP: @R2 TESTS lItest byte parity JR PE, EVEN @R2, #7 //force even parity SETS EVEN: @R1, @R2, R3 lIoutput next byte OUTIS JR NOV, LOOP IIrepeat until counter 0 DONE: = Note 1: Word register in compact mode. longword register in segmented or linear modes. 6·143 PCACHE Privileged Instruction Purge Cache PCACHE Operation: Purge all cache entries All cache entries are invalidated. This instruction is executed when a memory location that may have been copied into the cache has been modified by another processor. For example, if a slave processor reads from a peripheral port to a memory location that may be copied in the cache, the cache must be purged. Flags: No flags affected Exceptions: Privileged Instruction trap Assembler Language Syntax PCACHE 6-144 Instruction Format 1011110101000010001 POP Pop POP dst, src POPL Operation: dst: R, IR, EAM src: IR dst - src AUTOINCREMENT src (by 2 if POP, by 4 if POPL) The contents of the location addressed by the source register (used as a stack pointer) are loaded into the destination. The source register is then incremented by two if POP or by four if POPL, thus removing the top element from the stack by changing the stack pOinter. Any register except RO in compact mode or RRO in segmented or linear mode can be used as a stack pointer. If the destination is a register, the source and destination registers must be distinct and non-overlapping. Similarly, if the destination is in memory, then the source and destination operands must not overlap. Otherwise, the result of executing the instruction is undefined. Flags: No flags affected Exceptions: None Destination Addressing Mode R: Assembler Language Syntax POP Rd, @Rs' POPL RRd, @Rs' IR: POP @Rdl, @Rs' POPL @Rdl, @Rs' EAM: POP earn, @Rs' Instruction Format 11 0 1 0 1 0 1 1 1 1Rs *' 11 01 0 1 0 1 0 1 1Rs '* 0 1 0 1 Rd RRd 1 0 0 1 0 1 0 1 1 1 1 Rs *' 0 1Rd 1001 01 0101 *' 01 I Rs*,O IRd *,01 011 01 01 11 1 Rs*,O I eam 1, 2, or 3 extension words POPL earn, @Rs' 1 01 01 0101 1 Rs*,O 1 eam 1, 2, or 3 extension words Example: In compact mode, if register R12 (used as a stack pointer) contains % 1000, the word at location % 1000 contains %0055, and register R3 contains %0022, executing the instruction POP R3, @R12 leaves the value %0055 in R3 and the value %1002 in R12. In segmented or linear mode, a longword register must be used instead of R12. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-145 PTLB Privileged Instruction PurgeTLB PTLB Operation: Purge all TLB entries All TLB entries are invalidated. This instruction is executed when system and normal mode address spaces are merged and the operating system changes from executing one user process to another. Flags: No flags affected Exceptions: Privileged Instruction trap Assembler Language Syntax PTLB 6-146 Instruction Format Privileged Instruction PTLBE Purge TLB Entry PTLBEND src PTLBENI PTLBESD PTLBESI Operation: src: IR, EAM Purge the TLB entry for the effective address of src If any TLB entry corresponds to the logical address of the source operand, that entry is invalidated. Four versions of the instruction are provided, one for each of the logical memory address spaces: normal data space (PTLBEND), normal instruction space (PTLBENI), system data space (PTLBESD), and system instruction space (PTLBESI). This instruction is executed when information is changed in the translation tables for a page in one of the current address spaces. If the page is shared by current address spaces (for example, instruction and data spaces are merged), the page must be purged in each of the address spaces. Flags: No flags affected Exceptions: Privileged Instruction trap Source Addressing Mode IR: Assembler Language Syntax PTLBEND PTLBENI PTLBESD PTLBESI @RSl @RSl @RSl @RSl Instruction Format 01111010 001 1 1001 001000000 Rs*O 0000 01111010 0010 1001 001000000 Rs*O 0000 01111010 0001 1 001 001000000 Rs*O 0000 01111010 0000 1001 001000000 Rs*O 0000 6-147 Source Addressing Mode Assembler Language Syntax EAM: PTLBEND eam Instruction Format 01111010 011000000 0011 1 001 eam 0000 1, 2, or 3 extension words PTLBENI eam 01111010 011000000 0010 1001 eam 0000 1, 2, or 3 extension words PTLBESD eam 01111010 011000000 0001 1001 eam 0000 1, 2, or 3 extension words PTLBESI eam 01111010 011000000 0000 1 001 eam 0000 1, 2, or 3 extension words Note 1: Wora register in compact mode, longword register 6-148 In segmented or linear modes. PTLB N Privileged Instruction Purge TLB Normal Space PTLBN Operation: Purge Normal Space TLB entries All TLB entries corresponding to pages in normal data or normal instruction address spaces are invalidated. This instruction is executed when system and normal mode address spaces are separated and the user operating system changes from one process executing in normal mode to another. Flags: No flags affected Exceptions: Privileged Instruction trap Assembler Language Syntax PTLBN Instruction Format 1011110101000010111 6-149 PUSH Push PUSH dst, src PUSHL Operation: dst: IR src: R, 1M, IR, EAM AUTODECREMENT dst (by 2 if PUSH, by 4 if PUSHL) dst - src The contents of the destination register (used as a stack pointer) are decremented by two if PUSH or by four if PUSHL. Then the source operand is loaded into the location addressed by the updated destination register, thus adding a new element to the top of the stack by changing the stack pOinter. Any register except RO in compact mode or RRO in segmented or linear mode can be used as a stack pOinter. If the source is a register, then the source and destination registers must be distinct and non-overlapping. Similarly, if the source is in memory, the source and destination operands must not overlap. Otherwise, the result of executing the instruction is undefined. Flags: No flags affected Exceptions: None Source Addressing Mode R: Assembler Language Syntax PUSH @Rd', Rs PUSHL @Rd 1 , RRs 1M: PUSH @Rd', Udala Instruction Format I 11 0 01 0011 I Rd",O I Rs 11010100011Rd",01 RRs o0 1 0 0 1 1 0 1 1 Rd '" 0 11 0 0 1 data PUSHL @Rd', Udala 001010001 I Rd",O 10000 data (high) data (low) IR: PUSH @Rd', @RSl PUSHL @Rdl, @Rs' 6-150 I I I 1001010001 I Rd",O I Rs",O I 00 0 10011 Rd '" 0 I Rs '" 0 I Source Addressing Mode Assembler Language Syntax EAM: PUSH @Rdl, eam Instruction Format 0110100111 Rd*O 1 earn 1, 2, or 3 extension words PUSHL @Rdl, eam 01 f 010001 1 Rd*O Team 1,2, or 3 extension words Example: In compact mode, if register R12 (a stack pointer) contains % 1002, the word at location % 1000 contains % 0055, and register R3 contains % 0022, executing the instruction PUSH @R12, R3 leaves the value %0022 in location % 1000 and the value % 1000 in R12. In segmented or linear mode, a longword register must be used instead of R12. Note 1: Word register in compact mode. longword register in segmented or linear modes. 6·151 --- ---------_._------ RES Reset Bit RES dst, src RESB RESL Operation: dst - dst: src: or dst: src: R, IR, EAM 1M R R 0 This instruction clears the specified bit within the destination operand to 0 without affecting any other bits in the destination. The bit number (the source) can be specified either as an immediate value (static), or as a word register that contains the value (dynamic). In the dynamic case, the destination operand must be in a register, and the source operand must be in a word register. The bit number is a value from 0 to 7 for RESB, 0 to 15 for RES, or 0 to 31 for RESL, with 0 indicating the least-significant bit. Only the lower three bits of the source operand are used to specify the bit number for RESB, only the lower four bits are used for RES, and only the lower five bits are used for RESL. Flags: No flags affected Exceptions: None Reset Bit Static Destination Addressing Mode R: Assembler Language Syntax Instruction Format RES Rd, #b RESB Rbd, #b RESL RRd, #b b 0111101000000010 1 011 0 0 0 1 1b IR: b RES @Rdl, #b RESB @Rd 1 , #b RESL @Rd 1 , #b EAM: RRd 1 RES eam, #b RESB eam, #b 0111101000000010 00110001jb Rd*ol b o 1 11 0 0 0 11 w1 b eam 1 1,2, or 3 extension words RESL eam, #b 01111010 01110001-jb 00000010 eam 1 b 1,2, or 3 extension words 6-152 Reset Bit Dynamic Assembler Language Syntax R: RES Rd, Rs RESB Rbd, Rs Instruction Format 001100011 w 0000 00001 RESL RRd, Rs Rd 01111010 001100011 0000 Example: i RRd Rs 0000 0000 0000 0010 0000 Rs 0000 0000 If register RL3 contains % B2 (10110010), executing the instruction RESB RL3, #1 leaves the value % BO (10110000) in RL3. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6·153 RESFLG Reset Flag RESFLG flag Operation: FLAGS < 7:4 > - flag: C, Z, S, P, V FLAGS<7:4> AND NOT instruction<7:4> Any combination of the C, Z, S, P or V flags can be cleared to O. If the bit in the instruction corresponding to a flag is 1, the flag is cleared; if the bit is 0, the flag is unchanged. All other bits in the FLAGS register are unaffected. Note that the P and V flags are represented by the same bit. There can be one, two, three, or four operands in the assembly language statement, in any order. Flags: c: Cleared if specified, unaffected otherwise Z: Cleared if specified, unaffected otherwise S: Cleared if specified, unaffected otherwise PN: Cleared if specified, unaffected otherwise 0: Unaffected H: Unaffected Exceptions: None Assembler Language Syntax RESFLG flags Example: Instruction Format I 11 0 0 0 1 1 0 1 Ie Z sPIVI 0 0 1 1 1 If the C, S, and V flags are set (1) and the Z flag is clear (0), executing the statement RESFLG C, V leaves the S flag set (1), and the C, Z, and V flags clear (0). 6-154 RET Return RET cc Operation: Compact if cc is satisfied then PC-@SP SP- SP + 2 Segmented or linear if cc is satisfied then PC- @SP SP- SP + 4 This instruction is used to return at the end of a procedure called by executing either a CALL or CALR instruction. If the condition specified by "cc" is satisfied by the flags in the FCW, then the contents of the top of the processor Stack Pointer are popped into the Program Counter (PC), thus returning control to the caller. See Section 6.3 for a list of condition codes. The Stack Pointer used is R15 in compact mode, or RR14 in segmented or linear mode. If the condition is not satisfied, then the instruction following the RET instruction is executed. If no condition is specified, the return is taken regardless of the flag settings. Flags: No flags affected Exceptions: None Assembler Language Syntax RETcc Example: Instruction Format 1101011110100001 cc In compact mode, if the Program Counter contains %2550, the Stack Pointer (R15) contains % 3000, location % 3000 contains % 1004, and the Z flag is clear, executing the instruction RET NZ leaves the value %3002 in the Stack Pointer, and the Program Counter contains % 1004 (the address of the next instruction to be executed). 6-155 RL Rotate Left RL dst, src RLB RLL Operation: dst: R src: 1M for i - 1 to src do C- dst for j - msb down to 1 do dst - dst dst -C _ Longword: Word: Byte: ~~31----r.F----..;,0~ 0-Y____~~'I-: ___. .!-l . ~1_5------,0IJ 0~.:.--7----;°IJ The contents of the destination operand are rotated left one or two bit positions as specified by the source operand. During rotation, the most-significant bit (msb) of the destination operand is moved to the bit 0 position and also replaces the C flag. If the source operand is omitted from the assembler language statement, the default value is one. c: Flags: Z: 5: V: D: H: Exceptions: Destination Addressing Mode R: Set if the last bit rotated from the most-significant bit position was 1; cleared otherwise Set if the result is zero; cleared otherwise Set if the most-significant bit of the result is set; cleared otherwise Set if arithmetic overflow occurs, that is, if the sign of the destination changed during rotation; cleared otherwise Unaffected Unaffected None Assembler Language Syntax Instruction Format 1 RL Rd, In RLB Rbd, In RLL RRd, In 101111010 100000010 l10 11100111 6-156 RRd 1001510 Example: If register RH5 contains % 88 (10001000), executing the instruction RLB RH5 leaves the value % 11 (00010001) in RH5 and sets the C flag to 1. Note 1: S = 0 for rotation by 1 bit; S = 1 for rotation by 2 bits. 6-157 RLC Rotate Left through Carry RLC dst, src RLCB RLCL Operation: dst: R src: 1M for i - 1 to src do temp- C C- dst for j - msb down to 1 do dst - dst dst< 0 > - temp ~c3~1________~~______,0~ Longword: LEJ--I_ _~:;'~_........I-l Word: L{iH15 Byte: LG-1r----.......;,°IJ °IJ 7 The contents of the destination operand concatenated with the C flag are rotated left one or two bit positions as specified by the source operand. During rotation, the most-significant bit (msb) of the destination operand replaces the C flag and the previous value of the C flag is moved to the bit 0 position of the destination. If the source operand is omitted from the assembler language statement, the default value is one. Flags: C: Set if the last bit rotated from the most-significant bit position was 1; cleared otherwise Z: Set if the result is zero; cleared otherwise 5: Set if the most-significant bit of the result is set; cleared otherwise V: Set if arithmetic overflow occurs, that is, if the sign of the destination changed during rotation; cleared otherwise D: Unaffected H: Unaffected Exceptions: None Destination Addressing Mode R: Assembler Language Syntax Instruction Format1 RLC Rd, Ifn RLCB Rbd, Ifn RLCL RRd, Ifn 011110101000000101 1011100111 6-158 RRd 110lsl01 Example: If the C flag is clear (0) and register RO contains %800F (1000000000001111), executing the instruction RLC RO,I2 leaves the value % 003D (0000000000111101) in RO and clears the C flag, Note 1: S = 0 for rotation by 1 bit; S = 1 for rotation by 2 bits 6-159 RLDB Rotate Left Digit RLDB link, dst Operation: link: R dst: R temp<3:0> -link<3:0> Iink<3:0> - dst<7:4> dst< 7:4 > - dst < 3:0 > dst<3:0> - temp<3:0> 4 3 link 4 t 3 : dst The low digit of the lihk byte register is concatenated to the destination byte register. The resulting three-digit quantity is rotated to the left by one BCD digit (four bits). The lower digit of the destination is moved to the upper digit of the destination; the upper digit of the destination is moved to the lower digit of the link, and the lower digit of the link is moved to the lower digit of the destination. The upper digit of the link is unaffected. In multiple-digit BCD arithmetic, this instruction can be used to shift a string of BCD digits to the left, thus multiplying it by a power of ten. The link serves to transfer digits between successive bytes of the string. This is analogous to the use of the C flag in multiple precision shifting using the RLC instruction. The destination and link registers must be distinct. c: Flags: Unaffected Set if the link is zero after the operation; cleared otherwise Unaffected Unaffected Unaffected H: Unaffected Z: S: V: D: Exceptions: Destination Addressing Mode R: 6-160 None Assembler Language Syntax RLDB Rbi, Rbd Instruction Format 1101111110 1 Rbd Rbi Example: If location 100 contains the BCD digits 0,1 (00000001), location 101 contains 2,3 (00100011), and location 102 contains 4,5 (01000101) 100 rn 101 m 102 rn executing the sequence of instructions in compact mode LD R3,'3 LDA CLRB R2,102 RH1 "set loop counter for 3 bytes "(6 digits) "set pointer to low-order digits "zero-fill low-order digit LOOP: LDB RL1,@R2 RLDB RH1 ,RL1 LDB @R2,RL1 DEC R2 DJNZ R3, LOOP leaves the digits 1,2 (00010010) in location 100, the 101, and the digits 5,0 (01010000) in location 102. 100 rn 101 ru 102 "get next two digits "shift digits left one position "replace shifted digits "advance pointer "repeat until counter is zero digits 3,4 (00110100) in location rn In segmented or linear mode, a longword register must be used instead of R2. 6-161 RR Rotate Right RR dst, src RRB RRL Operation: for i - dst: R src: 1M 1 to src do C- dst for j - 1 to msb do dst - dst dst - C L ;1 =~~-f':;r-----,r0 o~ Longword: =1 Word: Byte: Lil~5------.;.,0;1.0 Lr--(-------'1°;l0 The contents of the destination operand are rotated right one or two bit positions as specified by the source operand. During rotation, the least-significant bit of the destination operand is moved to the most-significant bit (msb) and also replaces the C flag. If the source operand is omitted from the assembly language statement, the default value is one. c: Flags: Z: 5: V: D: H: Exceptions: Destination Addressing Mode R: Set if the last bit rotated from the least-significant bit position was 1; cleared otherwise Set if the result is zero; cleared otherwise Set if the most-significant bit of the result is set; cleared otherwise Set if arithmetic overflow occurs, that is, if the sign of the destination changed during rotation; cleared otherwise Unaffected Unaffected None Assembler Language Syntax Instruction Format 1 RR Rd, In RRB Rbd, In RRL RRd, In 01111010 101110011 6-162 00000010 RRd 1011sl0 Example: If register RL6 contains %31 (00110001). executing the instruction RRB RL6 leaves the value % 98 (10011000) in RL6 and sets the C flag to 1. Note t: S = 0 for rotation by 1 bit; s= 1 for rotation by 2 bits. 6-163 RRC Rotate Right through Carry RRC dst, src RRCB RRCL Operation: dst: R src: 1M for i - 1 to src do temp- C C - dskO> for j - 1 to msb do dskj-1> - dst dst < msb > - temp __ Longword: L Word: ~1,;;;....-5-----=,o~0J 31 r--I F--------',o~.c ~ ----f.~'f_: [r--(-----,o~0J Byte: The contents of the destination operand concatenated with the C flag are rotated right one or two bit positions as specified by the source operand. During rotation, the least-significant bit of the destination operand replaces the C flag and the previous value of the C flag is moved to the most-significant bit (msb) position of the destination. If the source operand is omitted from the assembly language statement, the default value is one. Flags: C: Set if the last bit rotated from the least-significant bit position was 1; cleared otherwise Z: Set if the result is zero; cleared otherwise S: Set if the most-significant bit of the result is set; cleared otherwise V: Set if arithmetic overflow occurs, that is, if the sign of the destination changed during rotation; cleared otherwise 0: Unaffected H: Unaffected Exceptions: Destination Addressing Mode R: None Assembler Language Syntax Instruction Format1 RRC Rd, {In RRCB Rbd, {In RRCL RRd, {In 01111010 101110011 6-164 00000010 RRd 1111sl0 Example: If the C flag is clear (0) and the register RO contains %OODD (0000000011011101), executing the instruction RRC RO,#2 leaves the value % 8037 (1000000000110111) in RO and clears the C flag. Note 1: S ~ 0 for rotation by 1 bit; S ~ 1 for rotation by 2 bits 6-165 RRDB Rotate Right Digit RRDB link, dst Operation: temp <3:0> link<3:0> dst<3:0> dst<7:4> - link: R dst: R - link<3:0> dst<3:0> dst<7:4> temp<3:0> 4 3 link: 7 t 4 3 dst: The low digit of the link byte register is concatenated to the destination byte register. The resulting three-digit quantity is rotated to the right by one BCD digit (four bits). The lower digit of the destination is moved to the lower digit of the link, the upper digit of the destination is moved to the lower digit of the destination, and the lower digit of the link is moved to the upper digit of the destination. The upper digit of the link is unaffected. In multiple-digit BCD arithmetic, this instruction can be used to shift a string of BCD digits to the right, thus dividing it by a power of ten. The link serves to transfer digits between successive bytes of the string. This is analogous to the use of the C flag in multiple precision shifting using the RRC instruction. The destination and link registers must be distinct. c: Flags: Unaffected Set if the link is zero after the operation; cleared otherwise Unaffected Unaffected Unaffected H: Unaffected Z: S: V: D: Exceptions: None Destination Addressing Mode Assembler Language Syntax R: RRDB Rbi, Rbd 6-166 Instruction Format 11 0 11 1110 0 1 Rbd Rbi Example: If location 100 contains the BCD digits 1,2 (00010010), location 101 contains 3,4 (00110100), and location 102 contains 5,6 (01010110) 100 rn 101 ru 102 rn executing the sequence of instructions in compact mode LD R3,'3 IIset loop counter for 3 bytes (6 digits) LD R2,'100 IIset pointer to high-order digits CLRB RH1 IIzero-fill high-order digit LOOP: LDB RL 1,@R2 IIget next two digits RRDB RH1,RL1 IIshift digits right one position LDB @R2,RL1 IIreplace shifted digits INC R2 lIadvance pointer DJNZ R3,LOOP IIrepeat until counter is zero leaves the digits 0,1 (00000001) in location 100, the digits 2,3 (00100011) in location 101, and the digits 4,5 (01000101) in location 102. RH 1 contains 6, the remainder from dividing the string by 10. 100 rn 101 GEl 102 rn In segmented or linear mode, a longword register must be used instead of R2. 6-167 SBC Subtract with Carry SBC dst, src SBCB SBCL Operation: dst - dst: R src: R dst - src - C The source operand, along with the setting of the C flag, is subtracted from the destination operand and the result is stored in the destination. The contents of the source are not affected. Subtraction is performed by adding the twos complement of the source operand to the destination operand. In multiple precision arithmetic, this instruction permits the "borrow" from the subtraction of low-order operands to be borrowed from the subtraction of high-order operands. C: Cleared if there is a carry from the most-significant bit of the result; set Flags: otherwise, indicating a borrow Z: Set if the result is zero; cleared otherwise S: Set if the result is negative; cleared otherwise V: Set if arithmetic overflow occurs, that is, if the operands were of opposite signs and the sign of the result is the same as the sign of the source; cleared otherwise D: SBC, SBCL-unaffected; SBCB-set H: SBC, SBCL-unaffected; 8BCB-cleared if there is a carry from the mostsignificant bit of the low-order four bits of the result; set otherwise, indicating a borrow Exceptions: Source Addressing Mode R: None Assembler Language Syntax SBC Rd, Rs SBCB Rbd, Rbs SBCL RRd, RRs Example: Instruction Format 01111010 00000010 1 011 1 0 1 1 1 RRs 1 RRd Ouadword subtraction can be done with the following instruction sequence, assuming ROO contains one operand and R04 contains the other operand: SUBL RR2,RR6 IIsubtract low-order longwords 8BCL RRO,RR4 IIsubtract borrow and high-ord~r longwords If RRO contains %00000038, RR2 contains %00004000, RR4 contains %OOOOOOOA and RR6 contains % FFFFFOOO, executing the two instructions above leaves the value %00000020 in RRO and %00005000 in RR2. 6-168 SC System Call SC src Operation: src: 1M SP-SP - 6 @SP-PS SP- SP - 2 @SP - instruction PS - System Call PS This instruction causes a System Call trap for controlled access to operating system software. The instruction word and the contents of the Program Status registers are pushed onto the system stack. The source operand, which is contained in the second byte of the instruction, identifies the particular service requested from the operating system. The source operand must be in the range from 0 to 255. Flags: Flags loaded from Program Status Area Exceptions: System Call trap Source Addressing Mode Assembler Language Syntax 1M: SC fin Instruction Format 101111111 n 6-169 SDA Shift Dynamic Arithmetic SDA dst, src SDAB SDAL Operation: dst: R src: R if src <:!: 0 /I left shift for i - 1 to src do C-dst for j - msb down to 1 do dst - dst dst - 0 else for i - 1 to -src do . /I right shift C-dst for j - 1 to msb do dst - dst Right Left 7 Byte: 1_ EH 15 Word: EJ-I 1_ : 0 c!J1 0 0 r£] 15 0 EH 31 Longword: 7 0 0 1"-0 c!J1 c!J1 31 0 r£] : 0 H!l The destination operand is shifted left or right arithmetically the number of bit positions specified by the source operand, a word register. For right shifts, the mostsignificant bit is replicated, and the C flag is loaded from the least-significant bit of the destination. For left shifts, the least-significant bit is filled with 0 and the C flag is loaded from the most-significant bit of the destination. A shift of zero positions does not affect the destination; however, the flags are set according to the destination value. The source operand must be in the range from -8 to 8 for SDAB, from -16 to 16 for SOA or from -32 to 32 for SOAL. If its value is outside the specified range, the operation is undefined. The source operand is represented as a 16-bit twos complement value. Positive values specify a left shift, while negative values specify a right shift. Flags: c: Z: S: V: 0: H: Exceptions: 6-170 Set if the last bit shifted from the destination was 1; cleared if the last bit shifted from the destination was 0 or zero shift was specified Set if the result is zero; cleared otherwise Set if the result is negative; cleared otherwise Set if arithmetic overflow occurs, that is, if the sign of the destination changed during shifting; cleared otherwise Unaffected Unaffected Integer Overflow trap Destination Addressing Mode Assembler Language Syntax R: SDA Rd. Rs Instruction Format 101110011 00001 SDAB Rbd. Rs 101110010 00001 SDAL RRd. Rs Rs 101110011 00001 Example: Rs Rs Rd 11011 00000000 Rbd 11 011 00000000 RRd 11111 00000000 If register R5 contains%C705 (11000111 Q00001 01) and register R1 contains - 2 (% FFFE or 1111111111111110), executing the instruction SDA R5,R1 performs an arithmetic right shift of two bit pOSitions, leaves the value % F1 C1 (1111000111000001) in R5, and clears the C flag. 6·171 SOL Shift Dynamic Logical SOL dst, src SOLB SOLL Operation: dst: R src: R if src;:: 0 /I left shift for i - 1 to src do C-dst for j - msb down to 1 do dst - dst dst <0> - 0 /I right shift else for i - 1 to -src do C -dst for j - 1 to msb do dst - dst dst - 0 Left 7 Syte: E:H 0--1 I~o ;; 0 0-1 0 E:H 31 Longword: 7 1- 0 15 Word: Right 0 0 ~ 15 0 0_1 31 1--0 0-1 I-EJ : 0 ~El The destination operand is shifted left or right logically the number of bit pOSitions specified by the source operand, a word register. For right shifts, the mostsignificant bit is filled with 0 and the C flag is loaded from the least-significant bit of the destination. For left shifts, the least-significant bit is filled with 0 and the C flag is loaded from the most-significant bit of the destination. A shift of zero pOSitions does not affect the destination; however, the flags are set according to the destination value. The source operand must be in the range from -8 to 8 for SOLS, from -16 to 16 for SOL or from -32 to 32 for SOLL.lf its value is outside the specified range, the operation is undefined. The source operand is represented as a 16-bit twos complement value. Positive values specify a left shift, while negative values specify a right shift. Flags: c: Z: S: P: 0: H: Exceptions: 6-172 Set if the last bit shifted from the destination was 1; cleared if the last bit shifted from the destination was 0 or zero shift was specified Set if the result is zero; cleared otherwise Set if the most-significant bit of the result is set; cleared otherwise SOL, SOLL-unaffected; SOLS-set if parity of the result is even; cleared otherwise Unaffected Unaffected None Destination Addressing Mode R: Assembler Language Syntax SOL Rd, Rs Instruction Format 10111 0011 00001 Rs Rd 10011 00000000 SOLS Rbd, Rs 101110010 00001 Rs Rbd 10011 00000000 SOLL RRd, Rs Example: I011 1 1 011 1 001 1 RRd o 0 0 01 00 0 0 0 0 0 0 Rs If register AL5 contains % 83 (10110011) and register A1 contains 4 (0000000000000100), executing the instruction SDL8 AL5,A1 performs a logical left shift of four bit positions, leaves the value %30 (00110000) in AL5, and sets the C flag. 6·173 SET Set Bit SET dst, src SETB SETL Operation: dst - dst: src: or dst: src: R, IR, EAM 1M R R 1 This instruction sets the specified bit within the destination operand to 1 without affecting any other bits in the destination. The bit number (the source) can be specified either as an immediate value (static), or as a word register that contains the value (dynamic). In the dynamic case, the destination operand must be in a register, and the source operand must be in a word register. The bit number is a value from 0 to 7 for SETB, 0 to 15 for SET, or 0 to 31 for SETL with 0 indicating the least-significant bit. Only the lower three bits of the source operand are used to specify the bit number for SETB, only the lower four bits are used for SET, and only the lower five bits are used for SETL. Flags: No flags affected Exceptions: None Set Bit Static Destination Addressing Mode R: Assembler Language Syntax Instruction Format SET Rd, #b SETS Rbd, #b SETL RRd, #b 0111101000000010 10110010lb IR: 1 b SET @Rd1, #b SETS @Rd1 , #b SETL @Rd1, #b 0111101000000010 0011 001 Olb EAM: RRd SET earn, #b SETS eam, #b o 1 11 0 0 1 01 w1 Rd T earn 1 b b 1, 2, or 3 extension words SETL eam, #b 01111010 01110010lb 0000 0010 earn I b 1, 2, or 3 extension words 6-174 Set Bit Dynamic Addressing Mode Assembler Language Syntax R: SET Rd, Rs SETB Rbd, Rs Instruction Format 00110010Iw 0000 0000 I SETL RRd, Rs Example: Rd Rs 00000000 01111010 0000 0010 Rs 001100101 0000 00001 RRd 0000 0000 If register AL3 contains %B2 (10110010) and register A2 contains the value 6, executing the instruction SETB AL3, A2 leaves the value % F2 (11110010) in AL3. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-175 SETFLG Set Flag SETFLG flag Operation: FLAGS < 7:4 > - Flag: C, Z, S, P, V FLAGS<7:4> OR instruction<7:4> Any combination of the C, Z, S, P or V flags can be set to 1. If the bit in the instruction corresponding to a flag is 1, the flag is set; if the bit is 0, the flag is unchanged. All other bits in the Flags register are unaffected. Note that the P and V flags are represented by the same bit. There can be one, two, three, or four operands in the assembly language statement, in any order. Flags: c: Set if specified; unaffected otherwise Z: Set if specified; unaffected otherwise S: Set if specified; unaffected otherwise PN: Set if specified; unaffected otherwise 0: Unaffected H: Unaffected Exceptions: None Assembler Language Syntax SETFLG flags Example: 6-176 Instruction Format 110001101 IczsPlV1 0001 1 If the C, Z, and S flags are all clear (0), and the P flag is set (1), executing the instruction SETFLG C leaves the C and P flags set (1), and the Z and S flags clear (0). SLA Shift Left Arithmetic SLA dst, src SLAB SLAL Operation: for i - dst: R src: 1M 1 to src do C- dst for j - msb down to 1 do dst - dst dst <0> - 0 7 Byte: Word: Longword: 0 El-1....._____......l-o ~ 0 ~ 0 EJ-IL.________. . .I--o EJ--I...__---,:,.". ;__---'1-- 0 The destination operand is shifted left arithmetically the number of bit positions specified by the source operand. The least-significant bit of the destination is filled with 0 and the C flag is loaded from the most-significant bit of the destination. A shift of zero position does not affect the destination; however, the flags are set according to the destination value. This operation differs from Shift Left Logical in the setting of the P/v flag and the detection of an Integer Overflow trap. The source operand must be in the range from 0 to 8 for SLAB, from 0 to 16 for SLA, or from 0 to 32 for SLAL. If its value is outside the specified range, the operation is undefined. The source operand is encoded as an 8- or 16-bit twos complement number contained in the second word of the instruction. If the source operand is omitted from the assembly language statement, the default value is 1. Flags: c: Z: S: V: D: H: Exceptions: Set if the last bit shifted from the destination was 1; cleared if the last bit shifted from the destination was 0 or zero shift was specified Set if the result is zero; cleared otherwise Set if the result is negative; cleared otherwise Set if arithmetic overflow occurs, that is, if the sign of the destination changed during shifting; cleared otherwise Unaffected Unaffected Integer Overflow trap 6-177 Destination Addressing Mode R: Assembler Language Syntax Instruction Format SLA Rd, #b SLAB Rbd, #b Rbd o SLAL RRd, #b 11001 b 10[110011 RRd 111 01 b Example: If longword register RR2 contains % 1234ABCD, executing the instruction SLAL RR2,#8 leaves the value % 34ABCDOO in RR2 and clears the C flag, 6-178 SLL Shift Left Logical SLL dst, src SLLB SLLL Operation: for i - dst: R src: 1M 1 to src do C- dst for j - msb down to 1 do dst - dst dst <0> - 0 7 Byte: 0 1- EH 0 15 E:H Longword: EH 1_ Word: 31 0 : 0 0 1-- 0 The destination operand is shifted left logically the number of bit positions specified by the source operand. The least-significant bit of the destination is filled with 0 and the C flag is loaded from the most-significant bit of the destination. A shift of zero position does not affect the destination; however, the flags are set according to the destination value. This operation differs from Shift Left Arithmetic in the setting of the PIV flag and the detection of an Integer Overflow trap. The source operand must be in the range from 0 to 8 for SLLB, from 0 to 16 for SLL, or from 0 to 32 for SLLL. If its value is outside the specified range, operation is undefined. The source operand is encoded as an 8- or 16-bit twos complement number contained in the second word of the instruction. If the source operand is omitted from the assembly language statement, the default value is one. Flags: c: Z: S: P: 0: H: Exceptions: Set if the last bit shifted from the destination was 1; cleared if the last bit shifted from the destination was 0 or zero shift was specified Set if the result is zero; cleared otherwise Set if the most-significant bit of the result is set; cleared otherwise SLL, SLLL-unaffected; SLLB-set if parity of the result is even; cleared otherwise Unaffected Unaffected None 6-179 Destination Addressing Mode Assembler Language Syntax R: SLL Rd, #b Instruction Format Rd 10001 101110011 b SLLB Rbd, ffb 1011 1 0010 Rbdloo01 b 0 SLLL RRd, #b RRd 10101 101110011 b Example: If register R3 contains %4321 (0100001100100001), executing the instruction SLL R3,'1 leaves the value % 8642 (1000011001000010) in R3 and clears the C flag. 6·180 SRA Shift Right Arithmetic SRA dst, src SRAB SRAL Operation: dst: R src: 1M for i - 1 to src do C - dst for j - 1 to msb do dst - dst 7 0 Byte: 15 Word: 0 c!J,..I-1_ _ _---II~EJ ~ 0 Longword: The destination operand is shifted right arithmetically the number of bit positions specified by the source operand. The most-significant bit of the destination is replicated, and the C flag is loaded from the least-significant bit of the destination. The source operand must be in the range from 1 to 8 for SRAB, from 1 to 16 for SRA, or from 1 to 32 for SRAL. If its value is outside the specified range, the operation is undefined. The negative of the source operand is encoded as an 8- or 16-bit twos complement number contained in the second word of the instruction. If the source operand is omitted from the assembly language statement, the default value is one. Flags: c: Set if the last bit shifted from the destination was 1; cleared otherwise Set if the result is zero; cleared otherwise Set if the result is negative; cleared otherwise Cleared Unaffected H: Unaffected Z: S: V: D: Exceptions: None 6-181 Destination Addressing Mode R: Assembler Language Syntax Instruction Format SRA Rd, #b SRAB Rbd, #b 101110010 Rbd o SRAL RRd, #b 11001 -b 1 0 /1 1 0 0 1 1 RRd /1 1 0 1 -b Example: If register RH6 contains %38 (00111011), executing the instruction SRAB RH6,#2 leaves the value % OE (00001110) in RH6 and sets the C flag. 6·182 SRL Shift Right Logical dst R SRL dst, src SRLB SRLL Operation: src: 1M for i - 1 to src do C - dskO> for j - 1 to msb do dst - dst dst - 0 7 o __I~ Byte: ~ Word: o_l~ 0 ___________....0 ~ Longword: 0 ____________~~ 0 1 ----:f~.r------'.... 0 _.... 0 The destination operand is shifted right logically the number of bit positions specified by the source operand. The most-significant bit of the destination is filled with 0 and the C flag is loaded from the least-significant bit of the destination. The source operand must be in the range from 1 to 8 for SRLB, from 1 to 16 for SRL, or from 1 to 32 for SRL. If its value is outside the specified range, the operation is undefined. The negative of the source operand is encoded as an 8- or 16-bit twos complement number contained in the second word of the instruction. If the source operand is omitted from the assembly language statement, the default value is one. Flags: c: Set if the last bit shifted from the destination was 1; cleared otherwise Z: Set if the result is zero; cleared otherwise S: Set if the most-significant bit of the result is 1; cleared otherwise P: SRL, SRLL-unaffected; SRLB-set if parity of the result is even; cleared otherwise 0: Unaffected H: Unaffected Exceptions: None 6-183 Destination Addressing Mode Assembler Language Syntax R: SRL Rd, #b Instruction Format 10 11 10 0 1 1 Rd I0 0 0 1 -b SRLB Rbd, #b 10 11 1 0 0 1 0 Rbd o SRLL RRd, #b 10 0 0 1 -b 10 11 10 0 11 RRd 10 10 1 -b Example: If register RO contains % 1111 (0001000100010001), executing the instruction SRL RO,#6 leaves the value %0044 (0000000001000100) in RO and clears the C flag. 6-184 SUB Subtract SUB dst, src SUBB SUBL Operation: dst - dst: A src: A, 1M, lA, EAM dst - src The source operand is subtracted from the destination operand and the result is stored in the destination. The contents of the source are not affected. Subtraction is performed by adding the twos complement of the source operand to the destination operand. c: Flags: Z: S: V: 0: H: Exceptions: Source Addressing Mode R: Cleared if there is a carry from the most-significant bit; set otherwise, indicating a borrow Set if the result is zero; cleared otherwise Set if the result is negative; cleared otherwise Set if arithmetic overflow occurs, that is, if the operands were of opposite signs and the sign of the result is the same as the sign of the source; cleared otherwise SUB, SUBL-unaffected; SUBB-set SUB, SUBL-unaffected; SUBB-cleared if there is a carry from the mostsignificant bit of the low-order four bits of the result; set otherwise, indicating a borrow Integer Overflow trap Assembler Language Syntax SUB Rd, Rs SUBB Rbd, Rbs SUBL RRd, RRs 1M: Instruction Format SUB Rd, #data Rd I 11 0 0 1 00 1 0 I RRs RRd 001000011100001 Rd data SUBB Rbd, #data SUBL RRd, #data o 0 1 0 000 1 0 0 0 0 0 1 Rbd data data 001010010100001 RRd data (high) data (low) IR: SUB Rd, @RS1 SUBB Rbd, @RS1 SUBL RRd, @RS1 100100001lwi Rs;cO I 100 01 0010 I Rs;cO I I Rd RRd 6-185 Source Addressing Mode EAM: Assembler Language Syntax SUB Rd, earn SUBB Rbd, earn Instruction Format o1 10 0 0 0 11 w1 eam 1 Rd 1,2, or 3 extension words SUBL RRd, earn 01\ 010010 \ eam \ RRd 1, 2, or 3 extension words Example: If register RO contains %0344, executing the instruction SUB RO,ft%AA leaves the value %029A in RO. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-186 Tee Test Condition Code TCC cc, dst TCCB TCCL Operation: dst: R if cc is satisfied then dst -1 This instruction is used to create a Boolean data value based on the flags set by a previous operation. The flags in the FeW are tested to see if the specified condition is satisfied. If the condition is satisfied, then the least-significant bit of the destination is set. If the condition is not satisfied, bit 0 of the destination is unaffected. All other bits in the destination are unaffected by this instruction. Flags: No flags affected Exceptions: None Destination Addressing Mode R: Assembler Language Syntax Instruction Format TCC CC, Rd TCCB CC, Rbd TCCl, CC, RRd 01111010 1 011 0 1 1 1 1 Example: 00000010 RRd cc If register R1 contains 0, and the Z flag is set, executing the instruction Tee EQ,R1 leaves the value 1 in R1. 6-187 TEST Test TEST dst TESTB TESTL Operation: dst: R, IR, EAM dst OR 0 The destination operand is tested (logically ORed with zero), and the Z, Sand P flags are set according to the result. This operation differs from Test Arithmetic in the setting of the C and PN flags. The contents of the destination are not affected. Flags: C: Z: S: P: Exceptions: None Unaffected Set if the result is zero; cleared otherwise Set if the most-significant bit of the result is set; cleared otherwise TEST, TESTL-unaffected; TESTB-set if parity of the result is even; cleared otherwise D: Unaffected H: Unaffected Destination Addressing Mode R: IR: Assembler Language Syntax Instruction Format TEST Rd TESTB Rbd 1101001101wl Rd 101001 TESTL RRd 11 010 1 1 1 00 1 RRd 11 0 0 01 TEST@Rd1 TESTB @Rd1 TESTL@Rd1 EAM: TEST earn TESTB earn 1001001101wl Rd*ol01001 1001 0 1 1 1 0 0 1Rd * 0 11 00 0 1 0110011 olwl e8m 10100 1,2, or 3 extension words TESTL earn o 1 1 0 1 1 10 0 188m 11 0 00 1, 2, or 3 extension words Example: If register R5 contains % FFFF (1111111111111111), executing the instruction TEST R5 sets the S flag, clears the Z flag, and leaves the other flags unaffected. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-188 TESTA Test Arithmetic TI;STA dst TESTAB TESTAL Operation: dst: R, IR, EAM dst - 0 Zero is compared to (subtracted from) the destination operand and the flags are set according to the result. The contents of the destination are not affected. This operation differs from Test in the setting of the C and P/v flags. Test Arithmetic must be used when an arithmetic condition (such as "greater than") is required. c: Flags: Z: S: V: D: H: Exceptions: Destination Addressing Mode R: IR: Cleared Set if the result is zero; cleared otherwise Set if the result is negative; cleared otherwise Cleared Unaffected Unaffected None Assembler Language Syntax TESTA Rd TESTAB Rbd 11 0 10 0 1 1 01 w 1 Rd TESTAL RRd 11 01 0 1 1 1 0 0 1 RRd 11 1 0 0 1 TESTA @Rd1 TESTAB @Rd 1 10 01 0 0 1 1 01 w1 Rd '" 0 11 1 0 0 1 TESTAL @Rd1 EAM: Instruction Format TESTA eam TESTAB eam 11 1 0 0 1 10 01 0 1 1 1 0 0 1 Rd '" 0 11 1 0 0 1 o 1100 1 1 0lwl eam 11 1 00 1, 2, or 3 extension words TESTAL eam o 11 0 1 1 1 0 0 1 eam 11 1 0 0 1,2, or 3 extension words Example: If register RO contains -1 (%FFFF) executing the ~o instructions TESTARO ' JR LE, NEG_OR-2ERO transfers control to the instruction at label NEG_OR-2ERO. Note that using TEST instead of TESTA would require two JR instructions for equivalent effect because conditions involving the V flag cannot be used following TEST Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-189· TRAP Conditional Trap TRAP cc, src Operation: src: 1M if cc is satisfied then SP- SP-6 @ SP- PS SP- SP-2 @ SP instruction PS - Conditional Trap PS If the condition specified by "cc" is satisfied by the flags in the FCW, this instruction causes a Conditional trap. The instruction and the contents of the Program Status registers are pushed onto the system stack. The source operand, which is contained in bits 7 to 4 of the instruction, identifies the particular cause of the trap. The source operand must be in the range from 0 to 15. This instruction is used for the generation of exceptions detected by software, such as an overflow on decimal arithmetic. Flags: Flags loaded from Program Status Area Exceptions: Conditional trap Source Addressing Mode 1M: 6-190 Assembler Language Syntax TRAP ee, #n Instruction Format 101111110 n cc TROB Translate and Decrement TRDB dst, src, r Operation: dst: IR src: IR dst - src[dstJ AUTODECREMENT dst by 1 r- r - 1 This instruction is used to translate a string of bytes from one code to another. The contents of the location addressed by the destination register (the "target byte") are used as an unsigned index into a translation table whose base address is contained in the source register. An effective address is calculated by adding the zeroextended target byte to the translation table base address using the rules for address arithmetic in the current mode of address representation: compact, segmented, or linear. The effective address is the location of the translated value used to replace the original contents of the target byte. The destination register is then decremented by one, thus moving the pointer to the previous element in the string. The word register specified by "r" (used as a counter) is then decremented by one. The source register is unchanged. The source, destination, and counter registers must be distinct, non-overlapping registers. The translation table contains up to 256 bytes, one for each possible value of the target byte. The size of the translation table may be reduced when it is known that some target byte values will not occur. c: Flags: Unaffected Z: Unaffected S: Unaffected V: Set if the result of decrementing r is zero; cleared otherwise 0: Unaffected H: Unaffected Exceptions: None Addressing Mode IR: Example: Assembler Language Syntax Instruction Format 101111000 Rd,*O 1000 00001 Rs,*O 0000 In linear mode, if register RR6 contains %00004001, the byte at location %00004001 contains 3, register RR20 contains %00001000, the byte at location %00001003 contains %AA, and register R12 contains 2, executing the instruction TRDB @RR6, @RR20, R12 leaves the value %AA in location %00004001, the value %00004000 in RR6, and the value 1 in R12. RR20 is not affected. The V flag is cleared. In compact mode, word registers must be used instead of RR6 and RR20. Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-191 TRDRB Translate, Decrement and Repeat TRDRB dst, src, r Operation: dst: IR src: IR repeat dst - src [dst] AUTODECREMENT dst by 1 r- r - 1 until r = a This instruction is used to translate a string of bytes from one code to another. The contents of the location addressed by the destination register (the "target byte") are used as an unsigned index into a translation table whose base address is contained in the source register. An effective address is calculated by adding the zeroextended target byte to the translation table base address using the rules for address arithmetic in the current mode of address representation: compact, segmented, or linear. The effective address is the location of the translated value used to replace the original contents of the target byte. The destination register is the decremented by one, thus moving the pointer to the previous element in the string. The word register specified by "r" (used as a counter) is then decremented by one. The source register is unchanged. The entire operation is repeated until the result of decrementing r is zero. This instruction can translate from 1 to 65,536 bytes. The source, destination, and counter registers must be distinct and non-overlapping registers. The translation table contains up to 256 bytes, one for each possible value of the target byte. The size of the translation table may be reduced when it is known that some target byte values will not occur. This instruction can be interrupted after each execution of the basic operation. c: Flags: Unaffected Z: Unaffected S: Unaffected V: Set 0: Unaffected H: Unaffected Exceptions: Addressing Mode IR: None Assembler Language Syntax TRDRB @Rd 1, @Rsl, r Instruction Format 10 I111000 0000 6-192 I r *0 1100 Rs*O 0000 Rd Example: In compact mode, if register R6 contains %4002, the bytes at locations %4000 through %4002 contain the values %00, %40, %80, respectively, register R9 contains % 1000, the translation table from location % 1000 through % 10FF contains 0, 1, 2, ... , % 7F, 0, 1, 2, ... , % 7F (the second zero is located at % 1080), and register R12 contains 3, executing the instruction TRDRB @R6, @R9, R12 leaves the values %00, %40, %00 in byte locations %4000 through %4002, respectively. Register R6 contains %3FFF, and R12 contains O. R9 is not affected. The V flag is set. In segmented or linear mode, longword registers must be used instead of R6 and R9. BEFORE %1000 00000000 '%4000 %1001 00000001 %4001 %1002 00000010 %4002 AFTER ·· · %107F o1 %1080 00000000 1 1 1 1 1 1 %4000 %1081 00000001 %4001 %1082 00000010 %1QFF o1 %4002 ·· · 1 1 1 1 1 1 Note 1: Word register in compact mode. longword register in segmented or linear modes. 6-193 TRIB Translate and Increment TRIB dst, src, r Operation: dst: IR src: IR dst - src[dst] AUTOINCREMENT dst by 1 r- r - 1 This instruction is used to translate a string of bytes from one code to another. The contents of the location addressed by the destination register (the "target byte") are used as an unsigned index into a translation table whose base address is contained in the source register. An effective address is calculated by adding the zeroextended target byte to the translation table base address using the rules for address arithmetic in the current mode of address representation: compact, segmented, or linear. The effective address is the location of the translated value used to replace the original contents of the target byte. The destination register is then incremented by one, thus moving the pointer to the next element in the string. The word register specified by "r" (used as a counter) is then decremented by one. The source register is unchanged. The source, destination, and counter registers must be distinct and non-overlapping registers. The translation table contains up to 256 bytes, one for each possible value of the target byte. The size of the translation table may be reduced when it is known that some target byte values will not occur. c: Flags: Z: S: V: D: H: Exceptions: Unaffected Unaffected Unaffected Set if the result of decrementing r is zero; cleared otherwise Unaffected Unaffected None Addressing Mode Assembler Language Syntax IR: TRIB @Rd', @Rsl, r 6·194 Instruction Format 1 01111 000 Rd""O 0 0 0 0 0000\ Rs""O r 0000 Example: This instruction can be used in a "loop" of instructions that translate a string of data from one code to another code, but an intermediate operation on each data element is required. The following sequence translates a string of 1000 bytes to the same string of bytes, with all ASCII "control characters" (values less than 32) translated to the "blank" character (value = 32). A test, however, is made for the special character" return" (value = 13) which terminates the loop. The translation table contains 256 bytes. The first 33 (0-32) entries all contain the value 32, and all other entries contain their own index in the table, counting from zero. This example assumes compact mode. In segmented or linear mode, longword registers must be used instead of R4 and R5. LD LDA LDA R3, #1000 R4, STRING R5, TABLE lIinitialize counter IIload start addresses CPB JR TRIB JR @R4, #13 EQ,DONE @R4, @R5, R3 NOV, LOOP IIcheck for return character lIexit loop if found IItranslate next byte IIrepeat until counter = a LOOP: DONE: TABLE+O 00100000 TABLE + 1 00100000 TABLE + 2 00100000 TABLE+32 00100000 TABLE+33 00100001 TABLE + 34 00100010 TABLE + 255 11111111 ·· · ·· · Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-195 TRIRB Translate, Increment and Repeat TRIRB dst, src, r Operation: dst: IR src: IR repeat dst - src[dst] AUTOINCREMENT dst by 1 r- r - 1 until r =a This instruction is used to translate a string of bytes from one code to another. The contents of the location addressed by the destination register (the "target byte") are used as an unsigned index into a translation table whose base address is contained in the source register. An effective address is calculated by adding the zeroextended target byte to the translation table base address using the rules for address arithmetic in the current mode of address representation: compact, segmented, or linear. The effective address is the location of the translated value used to replace the original contents of the target byte. The destination register is then incremented by one, thus moving the pOinter to the next byte in the string. The word register specified by "r" (used as a counter) is then decremented by one. The source register is unchanged. The entire operation is repeated until the result of decrementing r is zero. This instruction can translate from 1 to 65,536 bytes. The source, destination, and counter registers must be distinct and non-overlapping registers. The translation table contains up to 256 bytes, one for each possible value of the target byte. The size of the translation table may be reduced when it is known that some target byte values will not occur. This instruction can be interrupted after each execution of the basic operation. c: Flags: Unaffected Z: Unaffected S: Unaffected V: Set D: Unaffected H: Unaffected Exceptions: Addressing Mode IR: None Assembler Language Syntax Instruction Format 1 0 11 1 1 0 0 0 00 0 0 6-196 I r '* 0 Rs '* 0 Rd 0100 0000 Example: The following sequence of instructions can be used to translate a string of 80 bytes from one code to another. The pointers to the string and the translation table are set, the number of bytes to translate is set, and then the translation is accomplished. After executing the last instruction, the V flag is set. The example assumes compact mode. In segmented or linear mode, longword registers must be used instead of R4 and R5. LOA R4, STRING LOA R5, TABLE LO R3, H80 TRIRB @R4, @R5, R3 Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-197 TRTDB Translate, Test and Decrement TRTOB src1, src2, r Operation: src1: IR src2: IR RH1 - src2[src1] AUTODECREMENT src1 by 1 r- r - 1 This instruction is used to scan a string of bytes, testing for bytes with special values. The contents of the location addressed by the first source register (the "target byte") are used as an unsigned index into a translation table whose base ad· dress is contained in the second source register. An effective address is calculated by adding the zero·extended target byte to the base address using the current mode of address representation: compact, segmented, or linear. The effective address is the location of the translated value that is loaded into register RH 1. The setting of the Z flag indicates whether or not the translated value is zero. The first source register is then decremented by one, thus moving the pointer to the previous byte in the string. The word register specified by "r" (used as a counter) is then decremented by one. The second source register is unchanged. The source and counter registers must be distinct, non·overlapping registers. The translation table contains up to 256 bytes, one for each possible value of the target byte. The size of the translation table may be reduced when it is known that some target byte values will not occur. c: Flags: Unaffected Z: Set if the translated value loaded into RH 1 is zero; cleared otherwise S: Unaffected V: Set if the result of decrementing r is zero; cleared otherwise 0: Unaffected H: Unaffected Exceptions: Addressing None Mode Assembler Language Syntax IR: TRTDB @Rs1 1 • @Rs21, r Example: Instruction Format 1 01111000 Rs1; dst --1 This instruction tests the most-significant bit of the destination operand, copying its value into the S flag, then sets the entire destination to all 1 bits. It provides a locking mechanism for synchronizing software processes that require exclusive access to certain data or instructions at one time. No other interlocked accesses are permitted to the destination memory location between fetching and storing the result. c: Unaffected Unaffected Set if the most-significant bit of the destination was 1; cleared otherwise Unaffected Unaffected H: Unaffected Flags: Z: S: V: D: Exceptions: Destination Addressing Mode R: None Assembler Language Syntax Instruction Format TSET Rd TSETB Rbd TSETL RRd 0111101000000010 1 01 0 0 1 1 0 1 IR: 0110 TSET @Rd1 TSETB @Rd1 TSETL @Rd1 EAM: RRd TSET eam TSETB eam 01111010 0000 0010 001001101 Rd*O 0110 01100110lw earn 0110 1, 2, or 3 extension words TSETL eam 0111101000000010 o 11 001101 earn 0110 1, 2, or 3 extension words 6-205 Example: A simple mutually·exclusive critical region can be implemented by the following sequence of statements: ENTER: TSET JR SEMAPHORE MI,ENTER IIloop until resource con· //trolled by SEMAPHORE /lis available IIcritical region-only one software process lIexecutes this code at a time CLR SEMAPHORE lire lease resource controlled IIby SEMAPHORE Note 1: Word register in compact mode, longword register in segmented or linear modes. 6·206 XOR Exclusive Or XOR dst, src XORB XORL Operation: dst - dst: R src: R, 1M, IR, EAM dst XOR src A logical XOR operation is performed between the corresponding bits of the source and destination operands, and the result is stored in the destination. A 1 bit is stored wherever the corresponding bits in the two operands differ; otherwise a 0 bit is stored. The contents of the source are not affected. c: Flags: Unaffected Z: Set if the result is zero; cleared otherwise S: Set if the most-significant bit of the result is set; cleared otherwise P: XOR, XORL-unaffected; XORB-set if parity of the result is even; cleared otherwise 0: Unaffected H: Unaffected Source Addressing Mode R: Assembler Language Syntax XOR Rd, Rs XORB Rbd, Rbs XORL RRd, RRs 1M: XOR Rd, #data Instruction Format Rs 110100100lwl Rd 01111010 0000 0010 1 01 001 001 RRs RRd 001001001 0000 Rd data XORB Rbd, #data 001001000 0000 XORL RRd, #data Rbd data data 0111101000000010 o 01 0 0 1 0 0 1 0 0 0 0 RRd data (high) data (low) 6-207 Source Addressing Mode IR: Assembler Language Syntax Instruction Format XOR Rd, @RS1 XORB Rbd, @RS1 XORL RRd, @RS1 0111101000000010 o 01 EAM: XOR Rd, eam XORB Rbd, eam 00100 1 01100100lW Rs *0 earn RRd Rd 1, 2, or 3 extension words XORL RRd, eam 0111101000000010 o 11 00 1 0 0 1 earn RRd 1,2, or 3 extension words Example: If register RL3 contains %C3 (11000011) and the source operand is the immediate value % 7B (01111011), executing the instruction XORB RL3,#% 7B leaves the value % B8 (10111000) in RL3. Note 1: Word register in compact mode. longword register in segmented or linear modes. 6-208 6.6 EPA Instruction Teaplates There are seven templates for EPA instructions. If the Extended Processing Architecture enable bit (EPA) in the Flag and Control Word is set when the CPU encounters one of the instruction templates, the CPU transfers the instruction and operands to the EPU. The CPU merely transfers the operands to the EPU, but does not process them in any way. that selects one of up to four possible EPUs in the system. When an EPU detects an exception, it signals the CPU through one of the interrupt request pins. For examples of EPU mnemonics, opcodes, and exceptions, see the l8070 Floating Point Processor Technical Manual (lilog document Each type of EPU has its own mnemonics, opcodes, and exceptions to represent its particular data processing operations. The shaded portions of the instruction template shown below are ignored by the CPU; they are used by an EPU to specify its particular operations. The two least-significant bits of the first word of the instruction templates are reserved to encode an identifier field The instruction templates shown below correspond to the data transfer operations performed by the CPU. Oat a can be transferred between an EPU and memory, EPU and CPU general-purpose registers, or between an EPU and the CPU flags byte register. The last template is for EPU internal operations that require no data transfers. 03-8226-01). Extended Instruction Load Memory from EPU Operation: Memory - EPU (n bytes or words) The CPU calculates the effective address and generates transactions on the external interface for an EPU to write n words or bytes of data to memory. The value in the instruction field for the number of words or bytes loaded ("n") is one less than the actual value of the source operand. Thus, the coding in the instruction field ranges from 0 to 15, which corresponds to loading 1 to 16 words or bytes. Flags: No flags affected. Exceptions: Extended Instruction trap Destination Addressing Mode Operation IR: @Rd' - EAM: EPU - Instruction Format EPU eam 1, 2, or 3 extension words Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-209 Extended Instruction Load EPU from Memory Operation: EPU - Memory (n bytes or words) The CPU calculates the effective address and generates transactions on the external interface to read n words or bytes of data from memory to an EPU. The value in the instruction field for the number of words or bytes loaded ("n") is one less than the actual value of the source operand. Thus, the coding in the instruction field ranges from 0 to 15, which corresponds to loading 1 to 16 words or bytes. When Immediate addressing mode is used for an odd number of bytes, an extra byte containing Os is included at the end of the instruction, making the instruction length an integral number of words. Flags: No flags affected. Exceptions: Extended Instruction trap Source Addressing Mode Operation Instruction Format *data 1M: EPU - IR: EPU -@Rs1 EAM: EPU -eam 1, 2, or 3 extension words Note 1: Word register in compact mode, longword register in segmented or linear modes. 6-210 Extended Instruction Load CPU from EPU Operation: CPU - EPU registers (n words) The contents of n words are transferred from an EPU to consecutive CPU registers starting with the specified destination register. The value in the instruction field for the number of words loaded ("n") is one less than the actual value of the source operand. Thus, the coding in the instruction field ranges from D to 15, which corresponds to loading 1 to 16 words. For the word operand version, the CPU word registers (RD - R15) are loaded. RD follows R15 in consecutive order. For the longword operand version, the CPU longword registers (RRD - RR3D) are loaded. RRD follows RR3D in consecutive order. If the number of loaded words is odd, then the low-order halt of the last longword register loaded is undefined after executing this instruction. Flags: No flags affected. Exceptions: Extended Instruction trap Destination Addressing Mode Operation R: Rd- EPU RRd - Instruction Format EPU 6-211 Extended Instruction Load EPU from CPU Operation: EPU -- CPU registers (n words) The contents of n words are transferred to an EPU from consecutive CPU registers starting with the specified source register. The value in the instruction field for the number of words loaded ("n") is one less than the actual value of the source operand. Thus, the coding in the instruction field ranges from 0 to 15, which corresponds to loading 1 to 16 words. For the word operand version, the EPU is loaded from CPU word registers (RO R15). RO follows R15 in consecutive order. For the longword operand version, the EPU is loaded from CPU longword registers (RRO - RR30). RRO follows RR30 in consecutive order. If the number of loaded words is odd, then the low-order word of the last longword register is not involved in the loading. Flags: No flags affected. Exceptions: Extended Instruction trap Source Addressing Mode R: Operation EPU -- Rs EPU -- RRd 6-212 Instruction Format Extended Instruction Load FeW from EPU Operation: Flags - EPU The flags in the CPU's Flag and Control Word are loaded with information from an EPU. Only the flag bits are loaded; bits a and 1 of the Flag and Control Word are unaffected. Flags: Exceptions: Flags loaded from EPU. Extended Instruction trap Operation Instruction Format FCW- EPU Extended Instruction Load EPU from FeW Operation: EPU - Extended Instruction Load EPU from FeW Flags The flag byte of the CPU's Flag and Control Word is transferred to an EPU. Flags: No flags affected. Exceptions: Extended Instruction trap Operation EPU - Instruction Format FCW 6-213 Extended Instruction Internal EPU Operation Operation: Internal EPU Operation This template is for an EPU internal operation, one which requires no data transfers. Flags: No flags affected. Exceptions: Extended Instruction trap Instruction Format 6-214 Chapter 7. IlIItractloD Exec:ulioD and Exceptio.. 7.1 INTROOUCTImI To execute an instruction, the CPU fetches the instruction whose address is in the Program Counter (PC), increments the PC by the length of the inatruction, and per forma the operationa specified in Chapter 6 for the particular instruction. Exceptions are conditions or events thst slter the sequence of inatruction execution. The CPU recognizea four types of exceptions: reset, bus error, interrupts, and traps. A reset exception occurs when the REm line is activated. Reset initislizea the CPU. A bua error exception occurs when externsl hardware indicatea en irrecoverable error during s dsts transfer on the external interfsce. An interrupt is sn asynchronoua event indiceted when the NMi, VI, or NVI line is sctivated. Interrupts are typically caused by periphersl devices that require attention. A trsp occurs synchronously when a particular condition, such as integer overflow, ia detected by the CPU during instruction execution. When en exception occurs, the CPU stores the Program Status on the system stack, fetches the new Program Ststus from the Program ststus Area, end resumes executing instructions. This chspter deacribes inetruction execution and exception proceasing. 7.2 OPERATING STATES The CPU is always in one of four possible operating states regarding instruction execution and exception processing: reset, exception processing, instruction exacuting, or hslted. figure 7-1 shows the four states and the trsnsitions between them. The CPU enters the reset state from any other state when s reset request is signslled on the RESET line. When RESET 1s relessed, the CPU enters exception proceasing state. The reset stste is described in more detail in Section 8.10. 8225-016 Figure 7-1. Operating states In the exception processing stste, the CPU is either storing values from the Program Status registers to memory or fetching values from memory for the Program Stetua regiaters. The storing end fetching of Program Status is described in Section 7.4.5. from the exception processing state the CPU normally enters the instruction executing state; however, s bus error excaption causes a transition to the halted state. In the instruction executing state, the CPU executes instructions. When the Halt instruction is executed, the CPU enters the helted state. If sn exception other than reset occurs, the CPU enters the exception processing state. In the halted state the CPU is halted; it is neither executing instructions nor processing When an interrupt occurs, the CPU exceptions. enters the exception processing state. 7-1 Instruction Execution and Exceptions 7.3 INSTRUCTIIW EXEaJTIIW Executing an instruction involves the following operations: • .• • • • fetch the instruction Increment PC fetch operands, if necessary Cslculate results store results and flags, if necessary In concept, the CPU axecutes instructions by performing all the operations listed above in strict sequence for one instruction, and then beginning execution of the next instruction. However, the CPU checks for exceptions at several points during instruction execution. An exception can alter the operations for an instruction currently being executed, as well as the sequence from one instruction to the next. Also, the CPU overlaps the operations for executing several instructions in a multiple-stage pipeline. That is, while the CPU is calculating the results for one instruction, it can be storing the results for the previous instruction and fetching the opersnds for the next instruction. The use of an instruction pipeline, rather than completely executing each instruction in strict sequence, enhances the performance of the CPU. This section describes the effects of exceptions and the pipeline on instruction execution. Section 7.3.1 explains how different exceptions affect instruction execution, and Section 7.3.2 explains how the pipeline affects instruction execution. 7.3.1 Instruction £nding Instruction execution can end in any of five ways: completion, suspension, suspension with PC modification, termination, or partial completion. Generally, an instruction ends in completion; however, exceptions can csuse a different conclusion. Section 7.4 explains each exception recognized by the CPU, and refers to the different types of inatruction endings described here. When an instruction ends in completion, the CPU has completely executed the instruction and all pravious instructions. Any result operands and flags modified by the instruction have been stored, and the PC holds tha addrass of tha next instruction to execute. If an axception occurs aftar sn instruction ends in complation, the Program Status saved on ~he systam stack can be restored using the Interrupt Return (IRET) instruction. Execution will then resume with the 7-2 next instruction in sequence following the completed instruction. When an instruction ends in suspension or suspension with PC modification, the CPU has not completely executed the instruction, but all previous instructions have been completed. Any flags and destination operands due to be stored by the instruction may be modified; however, only modifications that allow the instruction to be completed are possible. Also, an instruction that ends in suspension or suspension with PC modification will not have modified any control registers, memory locations, or peripheral ports that are protected from access in the current operating mode. Examples: 1. An Add (ADDB) instruction modifies the flags, but does not examine the flags. If an ADDB instruction ends in suspension because of an address translation exception, the flags may be modified. 2. A Load (LD) instruction can store into a register whoee contents are required for an effective address calculation, e.g., LDL RR2, taRR2. I f the LD instruction ends in suspension because of an address translation exception, the register contents are unmodified. When an instruction ends in suspension, the PC holds the address of the first word of the instruction. When an instruction ends in suspension with PC modification, the PC holds the address of the word following the first word of the instruction. An instruction ends in suspension, or suspension with PC modification, when the CPU detects a trap condition, such as an address translation exception or unimplemented instruction, before completely executing the instruction. An instruction ending in suspension can be completed by eliminating the trap condition and restoring the Program Status saved on the system stack using the IRET instruction. An instruction ending in suspension with PC modification can be completed by eliminating the trap condition, decrementing the PC value stored on the system stack by two using the mode of address representation in effect for the suspended instruction, and restoring the Program Status using the IRET instruction. When an instruction ends in termination, the CPU has not completely executed the instruction, but all previous instructions have been completed. Any flags and destination operands due to be stored by the instruction msy be modified; the Instruction Execution and Exceptions contents of PC are undefined. A terminated instruction will not have modified any control registers, memory locations, or peripheral ports that are protected from access in the current operating mode. It is not possible to complete an instruction that ends in termination. Only reset and bus error cause instruction termination. Only interruptible instructions can end in partial completion. Interruptible instructions are the "repeat" versions of block transfer, string manipulation, and input/output instructions (Sections 6.2.8 and 6.2.9). Interruptible instructions are repeatedly executed until a specified data value is found for one of the operands, or a counter held in a register is decremented to zero. While the CPU is executing an interruptible instruction, if an Address Translation trap or interrupt occurs; the instruction ends in partial completion. Any flags and destination operands due to be stored by the instruction may be modified; however, the values stored in the counter and address registers allow the instruction to be completed correctly when the instruction is re-executed. The PC holds the address of the first word of the instruction. An instruction ending in partial completion can be completed by eliminating the cause of the exception and restoring the Program Status saved on the system stack using the IRET instruction. 7.3.2 Effects of the Pipeline on Execution The CPU executes several instructions simultaneously in a multiple-stage pipeline. In most circumstances, the differences between pipelined instruction execution and the complete execution of each instruction in strict sequence cannot be detected by software or hardware. However, the few cases in which the effects of the pipeline can be detected are described below. The CPU can prefetch an instruction before completing all previous instructions. Consequently, if an instruction stores to a location from which a subsequent instruction is fetched (i.e., the program modifies itself), the CPU can prefetch the original contents of the memory location rather than the modified contents. Thus, self-modifying programs may not operate as intended. On the external interface, instruction prefetching can have the effect of fetching an instruction that is not executed (e.g., if the previous instruction causes a trap) or fetching an instruction before the operands for a previous instruction are fetched. Some privileged instructions (IRET, LDCTL, LDCTLL, LDPS, PCACHE, PTLB, PTLBE, and PTL6N) have the effect of serializing instruction execution. The ser ializing instruction and all previous instructions are completely executed, including storing of all results and flags, before fetching the next instruction. Thus, when a new value is loaded into the FCW by a LDCTL instruction, the address representation mode and operating mode used to fetch and execute the next instruction are determined by the new FCW value. The CPU can also pre fetch an operand for an instruction before completing all previous instructions. The effects of operand pre fetching cannot be detected by software because the CPU only fetches an operand from a location after completing all previous instructions that modify the location. On the external interface, operand prefetching can have the effect of fetching an operand for an instruction that is not executed, for example, if the previous instruction causes a trap. Operands in physical I/O space are not prefetched, ensuring that the CPU only fetches data from an input peripheral port for instructions that are executed. 7.~ EXCEPTIONS The CPU recognizes four types of exceptions: reset, bus error, interrupts, and traps. In processing exceptions other than reset, the CPU saves the Program Status and an identifier word on the system stack. For some exceptions, the CPU saves an additional longword parameter. Then the CPU fetches a new Program Status from the Program Status Area. The sections below describe the cause of each exception, CPU response to exceptions, and priority among exceptions. 7.~.1 Reset Reset occurs when the RESET line is Low. Reset causes any instruction in execution to end in termination. At reset the Translation and Cache Enable bits of the System Configuration Control Longword register (NX, SX, CI, and CD) are cleared to O. Some fields of the Hardware Interface Control register are initialized as described in Section 6.10. When the RESET line is driven High, the CPU fetches the FCW from physical memory address 2 and the PC from physical memory address 4. Reset also invalidates all entries in the cache and the Translation Lookaside Buffer. After reset, the contents of all CPU registers other than the FCW, the PC, and the specified fields of SCCL and HICR are undefined. Reset should be used to initialize the CPU at power-on. 7-3 Instruction Exscution snd Exceptions 7.4.2 BuB Error Bus error is indicstsd by s device ,responding to s dsts trsnsfer transsction on the externsl interface. A bus error ceuses any instruction in execution to end in tsrminstion. Tha idsntifier word ssved during bua error exception processing raporta the atate of the CPU pins. The physical addresa for the trsnsaction ia saved as s parametar on the system stsck. Refer to Section 8.8.8 for more detsils about the bus error exception. 7.4.3 Interrupts Ths CPU recognizes three kinds of interrupt signslled on separsts pinal non-masksble, vectored, snd non-vectored. Non-mssksble interrupts sre slwsys enabled. Vsctored and non-vectored interrupta can be selectively enabled by bita VIE snd NVIE in the FCW. Vectored interrupts are enebled when VIE is 1; non-vectored interrupts are enabled when NVIE ia 1. An interrupt occurs when an enabled interrupt request is signalled on a CPU pin. The CPU generates an interrupt acknowledge trsnsaction on tha external intarface to fetch the idantifier word, which is then savad on the system stack. For vectored interrupts, the low-order byte of the identifier word is used to select a pointer to a particular interrupt handler routine. Refer to Section 8.7.5 for more details about interrupt request and acknowledge., 7.4.4 Traps The CPU recognizes ten traps, described below. 7.4.4.1 Extandad Instruction Trap. This trap occurs when sn Extended Processing Architecturs instruction is executed and the EPA bit of the FCW is O. The instruction ends in auspension with PC modification. The identifier is the first word of the instruction. This trap sllows softwsre to simulste execution of the EPA instruction when no EPU is in the system. 7.4.4.2 Privileged Instruction Trap. This trap occurs when s program attempts to execute a privileged instruction in normal mode; the instruction ends in suspension with PC modificstion. The identifier is the first word of the instruction. 7.4.4.3 Syat.. Call Trap. This trsp occurs when a System Csll instruction is executed. The 7-4 instruction ends in completion; the identifier is the instruction word. This trsp is used by programs executing in normsl mode to request services from the opersting system. The low-order byts of the instruction word indicstes the psrticular service requested. 7.4.4.4 Addrees Tr-ration Trap. This trsp occurs when sn sddress translstion error is detected, either sn invalid table entry or sn sccess protection violstion. The instruction ends in suspension. The identifier word reports the sddress space for the logicsl sddress and the exception type (see Section 4.3.5 for more informstion). The logicsl sddress thst csused the translstion error is ssved ss s psrameter on the system stack. 7.4.4.5 Breakpoint Trap. This trsp occurs when the Brsskpoint instruction is executed. The instruction ends in completion; the identifier is the instruction word. 7.4.4.6 Integer Arit'-tic Error Trap. This trsp occurs when sny of three error conditions is detected during execution of integer sritllnetic instructions. The error conditions are integer overflow, bounds check, snd index error. Integer overflow error is enabled by the IV bit in the FCW. Integer overflow is detected when the IV bit is 1 snd the V flag is set by execution of ADD, DEC, DECI, DIV, DIVU, INC, INCI, NEG, SUB, SDA, SRA, SLA, CVT, or CVTU instructions. For DIV snd DIVU instructions, Integer Overflow error includss the csse of zero divisor. A bounds check error is detected when s Check instruction is executed snd the destinstion operend is out of bounds. An index error is detected when an Index instruction is executed snd the subscript is out of bounds. The instruction ends in completion. The identi fier word indicates the type of error, ss shown in the following table. Identifier Error o Integer Overflow Bounds Check Index Error 2 7.4.4.7 Conditional Trap. This trsp occurs when s Trap instruction is executed snd the tested condition is sstisfied. The instruction ends in completion; the identifier is the instruction word. This trsp can be used for softwsre detection of run-time errors. Instruction Execution and Exceptions Unillpl_ted Inatruction Trap. This trap occurs when a program attempts to execute an instruction with an unimplemented bit pattern. The detected bit patterns include certain zaooo opcodes described in Appendix A and instructions with first byte 3616, or Bf 16. The instruction ends 1n suspension with PC modificstion; the identifier is the first word of the instruction. 7 ••••• 8 The Trace trap handler should set the T bit to 1 and clear the TP bit to 0 in the fCW on the system stack before executing IRET and returning to the traced program. Note that the T bit in the fCW on the system stack can be cleared when an IRET, LOCTL, or LOPS instruction is traced. 7 ••• 5 This trap occurs befors execution of an instruction when the PC contains an odd address. The contents of the identifier word are undefined. 7 ••••• 9 Dwtging Progr_ status Odd PC Trap. 7 ••••• 10 Trace Trap. This trap occurs before an instruction ia executed when the TP bit in the fCW ia 1. The contents of the identifier word are undefined. Instruction tracing is enabled by the T bit in fCW. Before each instruction is executed, T is copied to TP. The use of two bits to control inatruction tracing enaures that, while tracing is enabled, exactly one Trace trap is processed after sach instruction's execution, and after the servicing of other traps and interrupts. Section 7.4.7 provides more information about the priority for handling Trace traps and other exceptions. To process all exceptions other than reset, the CPU pushes the Progran Status and an identifier word on the system stack. An Address Translstion trap and bus error push an additional longword parameter onto the system stack. The saved value of the PC depends on the type of instruction ending. As selected by the XL!S bit in the System Configuration Control Longword (SCCL) register, the CPU operates in either segmented system mode (XL/S = 0) or linear system mode (XL!S = 1) while saving the Program Status and other information; but the saved value of the fCW indicates the mode of operation when the exception occurred. figure 7-2 shows how the information is saved on the stack. LOW ADDRESS SYSTEM SP AFTER_ EXCEPTION PARAMETER (HIGH) PARAMETER (LOW) SYSTEM SP AFTER_ EXCEPTION IDENTIFIER IDENTIFIER FCW FCW PC (HIGH) PC (HIGH) PC (LOW) PC (LOW) SYSTEM SP BEFORE_ EXCEPTION SYSTEM SP BEFORE_ EXCEPTION _ 1 WORD_ _ 1 WORD _ HIGH ADDRESS WITHOUT PARAM.TER Figure 7-2. Progr_ status Saved on 51st- St.:k 8225-017 7-5 Instruction Execution snd Exceptions A new Program status must be fetched from memory to process any exception. For reset, the FeW is fetched from physicsl address 2 and the PC is fetched from physical address 4. Other exceptions fetch the new Program status from an entry in the Program status Area (PSA) (Figure 7-3). Bus error, non-masksble interrupt, non-vectored interrupt, snd all traps have unique entries in the PSA from which the new Program status is fetched. For vectored interrupts, ths new value of the FeW is loaded from displacement 122 in the PSA. The loworder byte of the identifier word is used to select the new value of the PC by indexing into a table of 256 values beginning at displacement 124 in the PSA. 0 L PROGRAM STATUS AREA POINTER } RESERVED 8 RESERVED EXTENDED } INSTRUCTION TRAP FCW PC (HIGHI PC (LOW) 18 RESERVED PRIVILEGED } INSTRUCTION TRAP FCW PC (HIGH) PC (LOW) 24-31 32-38 40-47 48-55 66-83 84-71 72·78 80-87 24 88 RESERVED SYSTEM CALL TRAP ADDRESS TRANSLATION TRAP BREAKPOINT TRAP INTEGER ARITHMETIC ERROR TRAP CONDITIONAL TRAP UNIMPLEMENTED INSTRUCTION TRAP ODD PC TRAP TRACE TRAP } FCW SYSTEM STACK OVERI'LOW PC (HIGH) PC (LOW) 96 RESERVED } FCW BUS ERROR PC (HIGH) PC (LOW) 104 RESERVED } FCW NON·MASKABLE INTERRUPT PC (HIGH) PC (LOW) 112 RESERVED } FCW NON. VECTORED INTERRUPT PC (HIGH) PC (LOW) 120 RESERVED FCW PCo(HIGH) PCo(LOW) VECTORED INTERRUPT PC, (HIGH) PC, (LOW) PC. (HIGH) 132 PC. (LOW) ·•• 1144 I pc... (HIGH) L PC.,,(LOW) Figure 7-3. 7-6 I I Progr_ status Area 8225-018 Instruction Execution and Exceptions The effective address of an entry in the Program Status Area is calculated by adding the displacement shown in Figure 7-3 to the physical base address held in the Program Status Area Pointer register. The effective address calculation is performed in segmented or linear mode, as selected by the XL/S bit in the SCCL register. The result is the physical address used to fetch the PSA entry. During exception processing, if an address translation error is detected while information is being saved on the system stack, the System Stack Pointer is restored to its value before the exception occurred and the overflow stack is used instead. The top of the overflow stack is addressed by the Overflow Stack Pointer register (OSP). The Program Status, identifier word, and exception parameter (or an undefined longword i f there is no exception parameter) are pushed on the overflow stack. A word containing the displacement of the exception entry in the PSA is also pushed onto the overflow stack. The new Program Status is fetched from displacement BB in the PSA. Since the OSP register contains a physical address, an Address Translation trap cannot occur when pushing information on the overflow stack. The effective address calculation for pushing onto the overflow stack is performed in segmented or linear mode, as selected by the XL/S bit in the SCCL register. Figure 7-4 shows how information is saved on the overflow stack. LOW ADDRESS OSP AFTER_ EXCEPTION PSA DISPLACEMENT OSP AFTER_ EXCEPTION PSA DISPLACEMENT UNDEFINED PARAMETER (HIGH) UNDEFINED PARAMETER (LOW) IDENTIFIER IDENTIFIER FCW FCW PC (HIGH) PC (HIGH) PC (LOW) OSP BEFORE_ EXCEPTION PC (LOW) OSP BEFORE~ EXCEPTION ~1 WORD----+- ~1WORD---" HIGH ADDRESS WITHOUT PARAMETER WITH PARAMETER Figure 7-4. Progr_ Status Saved on Overflow Stack 7.4.6 Exception Handlers After the new Program Status has been fetched, the CPU begins executing instructions of the exception handler routine whose address was loaded into the PC. The new value of the FCW determines the address representation mode (compact/segmented/ linear), operating mode (system/normal), and the enabled interrupts and traps for the exception handler. An interrupt handler can execute with interrupts disabled until critical information has been stored. The interrupt handler can then enable interrupts, permitting nested interrupt servicing. 8225'()19 The exception handler can examine the identifier word and parameter (only bus error and Address Translation trap have a parameter) for information about the cause of the exception. After completing their service, handlers for traps and interrupts execute the Interrupt Return instruction. The Address Translation trap handler must pop the long word violation address from the stack before executing IRET. IRET restores the Program Status from the system stack so instruction execution can resume at the point where the exception occurred. The handlers for Extended Instruction trap, Privileged Instruction trap, and Unimplemented Instruction trap must modify the PC value stored on the stack before executing IRET. 7-7 Instruction Execution and Exceptions 7.4.7 Priority of Exceptions It is possible for several exceptions to occur simultaneously. The CPU checks for particular exceptions at specific points during instruction execution. (Figure 7-5.) If multiple exceptions are detected, the CPU responds to the one with highest priority. YES CW.TPYES = 1 ? NO oDDYES PC ? NO >--..... YES FCW.TP .... O ~ ..... ~- YES PROCESS EXCEPTION Figure 7-5. 7-8 Exception Priority FIOMChart 8225-020 Instruction Execution and Exceptions Whenever a reset exception is detected, the CPU responds immediately; any instruction being executed is terminated. Pending bus errors, traps, and internally latched non-maskable interrupt requests are eliminated. If a bus error is detected and reset is not requested, the CPU responds to the bus error exception. Any instruction being executed is terminated, and pending traps are eliminated. Before executing an instruction, the CPU checks for enabled interrupt requests. The CPU responds to the highest priority enabled interrupt request, if any. The priority of interrupts is, in descending order, nonmaskable, vectored, and nonvectored. If several devices are requesting the same interrupt, priority among the devices must be resolved externally, typically with a daisy chain or interrupt pr ior it y controller. After responding to an interrupt, the new value of FCW is used to check again for enabled interrupt requests before executing the first instruction of the service routine. If there are no enabled interrupt requests, the CPU checks the TP bit in the FCW. If TP is set to 1, a Trace trap occurs. Otherwise, the CPU checks If the whether the PC contains an odd address. least-signi ficant bit of PC is 1, an Odd PC trap occurs. Otherwise, the CPU copies T to TP and begins executing the instruction. During instruction execution, one of the following trap conditions may be detected: Extended Instruction trap, Privileged Instruction trap, Unimplemented Instruction trap, or Address Translation trap. If one of the conditions is detected, instruction execution is suspended; TP is cleared to 0; and the trap is processed. Otherwise, instruction execution is completed. After completion of the instruction, one of four trap conditions may be detected: System Call trap, Breakpoint trap, Integer Arithmetic Error trap, or Conditional trap. If one of these trap conditions is detected, the corresponding trap is processed. For interruptible instructions, the CPU checks for address translation exceptions during each iteration. If an address translation exception is detected, instruction execution ends in partial completion, TP is cleared to 0, and the trap is processed. I f no address translation error has been detected, the CPU checks for enabled interrupt requests at the end of each iteration except the last. If an interrupt request is pending, the CPU clears TP to 0 and responds to the highest priority request. An interrupt can occur immediately after Enable Interrupt instruction is executed before the next instruction. the and 7-9 I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Chapter 8. External Interface 8.1 INTRODUCTION The CPU is only one component in a computer system containing memory, peripherals, Extended Processing Units (EPUs), DMA controllers, and other CPUs (Figure B-1). Zilog has established the Z-BUS as a convention for the signals and timing used to interconnect components of a microprocessor system. The ZBO,OOO CPU is compatible with the Z-BUS, allowing the CPU to be easily connected lnto a wide variety of system configurations. This chapter describes the operation of the CPU interface with other system components. PERIPHERALS U ~ ~ zao,ooo CPU 8 if OTHER CPU Figure 8-1. System Configuration 8.2 BUS OPERATIONS Two kinds of bus operations are defined: trsnsactions and requests. At anyone time, only one device, known as the msster, has control of the bus. The master can initiate transactiona on the bus to transfer data to another device, known as the responder. In some transactions, called flyby, the master controls the transaction, but another device transfers data with the responder. The master can also initiate transactions that do not transfer data. The CPU performs transactions that transfer data to and from memory, periph- 8225'()21 erals, or EPUs. The CPU controls flyby transactions that transfer data between an EPU and memory. The CPU also performs internal operation and halt transactions, which do not transfer data. Only the bus master can initiate transactions; however, other devices can initiate requests. The CPU responds to interrupt requests from peripherals by generating an interrupt acknowledge transaction. The CPU responds to bus requests from other potential bus masters, and can initiate bus requests of its own, ss described in Section 8.9. In addition, the CPU responds' to reset requests, which are used to initialize the CPU. B-1 External Interface a.3 MUlTIPROCESSQR CONfIGURATIONS master, using the ~ and described in Section a.9. The CPU provides support for interconnection in four types of multiprocessor configurations (FIgure a-2): coprocessor, slave processor, tightly-coupled multiple CPUs, and loosely-coupled multiple CPUs. Coprocessors, such as the Za070 Arithmetic Processing Unit, work synchronously with the CPU to execute a single instruction stream using the Extended Processing Architecture facility. The ~ and EPUABORT signals are dedicated for connection with coprocessors, as described in Section a.a.4. Slave processors, such as the Za016 DMA Transfer Controller, perform dedicated functions asynchronously to the CPU. The CPU and slave processor share a local bus, of which the CPU is the default ~ signals, as Tightly-coupled, multiple CPUs execute independent instruction streams and communicate through shared memory located on a cOnlnon (global) bus using the 1:'REtr and GArr signals, as described in Section a.9. Each CPU is default master of its local bus, but the global bus master is chosen by sn external arbiter. The CPU also provides special bus status information for interlocked memory references (Test and Set, Increment Interlocked, and Decrement Interlocked instructions), which can be used with multiple-ported memories. Loosely-coupled, multiple CPUs generally communicate through a multiple-ported peripheral, such as the Za03a FlO I/O Interface Unit. The zao,ooo CPU's I/O and interrupt facilities can support loosely-coupled multiprocessing. LOCAL BUS LOCAL BUS (AI COPROCESSOR (SI SLAVE PROCESSOR (CI TIGHTLY·COUPLED MULTIPLE CPU (DI LOOSELY.COUPLED MULTIPLE CPU Figure 8-2. Multiprocessor Configurations a-2 2071·012 External Interface 8.. CACI£ The CPU implements a cache mechanism that keeps a copy of recently used memory locations on-chip. These locations can contain both instructions and data. On memory fetches, the CPU examines the cache to determine if the addressed information is stored there. If the information is in the cache (a hit), then the CPU fetches the copy from the cache, and no transaction is necessary on the external interface. If the information is not in the cache (a miss), then the CPU performs a memory read transaction to fetch the missing information and stores a copy of the information into the cache, replacing the least recently used data in the cache. Thus, the cache serves to reduce the number of memory read transactions, providing a substantial boost to performance. Software can control the cache mechanism in several ways. The System Configuration Control Longword register contains separate control bits (CI and CD) that enable the cache for instruction and data references and another bit (CR) that enables the cache replacement algorithm. In page table entries, the NC bit can be set to disable the use of the cache for selected pages. The Purge Cache instruction can be executed to invalidate the contents of the cache when a memory location that may have been copied into the cache has been modified by another processor. For example, if a slave processor reads from a peripheral port to a memory location that may be copied in the cache, the cache must be purged. Similarly, if two or more tightly-coupled CPUs can alternately execute one process, the cache must be purged when the operating system changes from executing one user-process to another. Appendix C describes the cache mechanism in more detail, including its control and interaction with the external interface. 8.5 PIN FUNCTIONS The CPU interface includes 59 signal lines, and four power supply connections (Figure B-3). A summary of the signal pin functions is given below. ADo-AD,1. Address/l)ata (Bidirectional. active High. :J-state). These 32 lines are time-multi- plexed to transfer address and data. At the beginning of each transaction the lines are driven with the 32-bit address. After the address has been driven, the lines are used to transfer one or more bytes, words, or longwords of data. E". Address Strobe (Output. active low. :J-state). The rising edge of AS" indicates the beginning of a transaction and shows that the address, STO-ST3' R/W, BL/W, BWI[, N/S", and mrnT are valid. lIST. Burst (Output. active low, :J-state). A Low on this line indicates that the CPU is performing a burst transfer; that is, multiple Data Strobes following a single Address Strobe. ETA. Burst Acknowledge (Input. active low). A Low on this line indicates that the responding device can support burst transfers. 'IIIJSRrlf. Bus Request (Input, active low). A Low on this line indicates that a bus requester has obtained or is trying to obtain control of the local bus. 1IIlSD". Bus Acknowledge (Output, active low). A Low on this line indicates that the CPU has relinquished control of the local bus in response to a bus request. BlN, BW;r. (Output.:J-stste). These two lines specify the data transfer size. BlN BW;r Size High Low High Low High Byte High Word Low Longword Low Reserved eLK. Clock (Input). This line is the clock used to generate all CPU timing. M". ~ Data Strobe (Output. active low. :J-state). is used for timing data transfers. rPIIISV'. EPU Busy (Input. active low). A Low on this line indicates that an EPU is busy. This line is used to synchronize the operation of the CPU with an EPU during execution of an EPA instruction. EPUABOR1. EPU Abort (Output, active low). A Low on this line indicates that the CPU is aborting execution of an EPA instruction, typically because an Address Translation trap has occurred. ~. Global Acknowledge (Input, active low). A Low on this line indicates that the CPU has been granted control of a global bus. mIN. Global Request (Output. active low. A Low on this line indicates that the CPU has obtained or is trying to obtain control of a global bus. :J-state). B-3 External Interface Ir". ~. Input Enable (Output, active low, 3-state). (Input, active low). A Low on this line resets the CPU. A Low on this line can be used to enable buffers on the AD lines to drive toward the CPU. Response (Input). These lines encode the response to transactions initiated by the CPU. RSPO and RSP1 can be connected together for Z-BUS timing. RSPn-RSP1. mtr. Non-Maskable Interrupt (Input, edge acti- A High-to-Low transition on this line requests a non-maskable interrupt. vated). M. wm Non-Vectored Interrupt (Input, active low). A Low on this line requests a non-vectored interrupt. N~. No1'llal/Syst_ Mode (Output, low = Syst_ Mode, 3-state). This line indicates whether the CPU is operating in normal or system mode. llr". Output Enable (Output, active low, 3-state). STn-ST3· RSPO RSP1 Response High Low High Low High High Low Low Ready Bus Error Bus Retry Wait Status (Output, active High, 3-state). A Low on this line can be used to enable buffers on the AD lines to drive away from the CPU. These lines encode the kind of transaction occurring on the bus. (See Table B-1.) R/i. vr. Read/Write (Output, low = Write, 3-state) RESET INTERRUPT REQUESTS EXTENDED PROCESSOR CONTROL -- AD~ NMI RIW zao,ooo BUW CPU BWI[ EPUBSY NIS CONTROL BUSACK BUS STATUS AND TIMING STATUS EPUABORT RESPONSE -¥- OE IE GREQ BUFFER CONTROL GACK BRST BRSTA +5 V Figure 8-3. 8-4 ADDRESS/DATA BUS os iWi BUSREQ - A AS _Vi LOCAL BUS GLOBAL BUS CONTROL Vectored Interrupt (Input, active low). Low on this line requests a vectored interrupt. This line indicates the direction of data transfer. GND - BURST TRANSFER CONTROL CLOCK Z80,OOO Pin Functions 2071-011 External Interface 0.6 HARDWARE INTERfACE CONTROL REGISTER The Hardware Interface Control register (HICR) speci fies certain characteristics of the hardware configuration surrounding the CPU, including bus speed, memory data path width, and number of automatic wait states. The physical memory address space is divided into two sections, t'\) and M1' selected by bit 30 of the memory address. A typical system would locate slow, 16-bit wide bootstrap ROM in MO and faster, 32-bit wide dynamiC RAM in M1' The physical I/O address space is similarly divided into two sections, 1/00 and 1/01' selected by bit 30 of the port address. The fields of HICR (Figure 8-4) are described below. figure 0-4. Hardware Interface Control Register "0 Speed (S) specifies the frequency of the bus clock relative to the processor clock. If this bit is 1, the bus clock frequency is 1/2 the processor clock frequency; otherwise, the bus clock frequency is 1/4 the processor clock frequency. The value of this bit is determined by hardware at reset, and cannot be altered by software (see Section 8.10). H1 Wait Count (M1'W) specifies the number of wait states automatically inserted by the CPU for references to M1' If the value is 0, no wait states are inserted. If the value is n)O, then n wait states are automatically inserted for memory read and n-1 wait states are inserted for memory write. EPlI Overlap Hode (EPlIO) and another field in an EPU control register control the degree of overlap for CPU and EPU operations. While this bit is 1, overlap is enabled; otherwise, overlap is disabled. While overlap is disabled, the EPU can use the signal ~ to stop the CPU from processing instructions. There are several degrees of overlap that affect performance, system debugging and recovery from exceptions. Refer to Section 8.8.4 for more information. MO Wait Count (MO.W) specifies the number of wait states automatically inserted by the CPU for references to MO' If the value is 0, no wail states are inserted. If the value is n)O, n wait states are automatically inserted for memory read and n-1 wait states are inserted for memory write. Data Path Width ("O.OP) specifies the data path width for references to MO' While this bit is 1, the data path width for MO is 16 bits; otherwise, the data path width for MO is 32 bits. H1 Data Path Width (M1'OP) specifies the data path width for references to M1' While this bit is 1, the data path width for M1 is 16 bits; otherwise, the data path width for M1 is 32 bits. 1/00 Wait Count (I/OO'W) specifies the number (0-7) of wait states automatically inserted by the CPU for references to 1/00' 1/01 Wait Count (1/01'W) specifies the number (0-7) of wait states automatically inserted by the CPU for references to 1/01' Interrupt Acknowledge Wait Count 1 (IACK.W1) specifies the number (0-7) of wait states automatically inserted by the CPU before 1)5 falls during interrupt acknowledge transactions. Interrupt Acknowledge Wait Count Z (IACK.WZ) specifies the number (0-7) of wait states automatically inserted by the CPU before 1)5 rises during interrupt acknowledge transactions. 8225-022 Mini_un Address Strobe Rate (MASH) controls an option that ensures an Address Strobe is generated at least once every 16 bus clock cycles. While this bit is 1, the option is enabled; otherwise, the option is disabled. While the MASR option is enabled and the CPU has neither performed any transactions, granted the local bus, nor requested a global bus for 16 bus cycles, the CPU performs an internal operation or halt transaction. If the CPU is in halted state, a halt transaction is performed; otherwise, an internal operation transaction is performed. This function can be used for refreshing pseudostatic RAMs. Also, some Z-8US peripherals require Address Strobe to generate interrupt request timing. Global Enable (GE) and Local Address (LAD) control the use of the global bus request protocol. Wh.ile GE is 1, the protocol is enabled; otherwise, the protocol is dlsabled. The LAD field selects 1 of 16 sectIons of the physical address spaces used for references to the local bus; references to other sections use the global bus. See Section 8.9 for more informatIon. 8-5 External Interface In systems that combine memories with different widths, an individusl operand must be located entirely within physical memory modules of a single width. Thus if an operand is located acrosa consecutive logical pages, including operands for ENTER, EXIT, lDM, lDMl, and EPA instructions that may occupy several longwords, then the two physical frames containing the operand must both be in 16-bit memory modules or 3Z-bit memory modules. 8.7 8US T1MIfG The CPU psrforms trsnsactiona on the external intsrface to trsnsfsr data for fetching instructions, fetching and storing operands, processing exceptions, and performing memory management. In addition, the CPU performs internal operation and hslt transactions, which do not transfer dats. Each transaction occurs during a sequence of bus clock cycles, named T1' TZ, etc. The CPU has a single clock line, ClK, used to generate all timing. Internally, the CPU derives another clock for bus timing by dividing CLK by.Z or 4. The scale factor for bus timing (Z or 4) is selected at reset. In the AC timing characteristics for the CPU (available in a separate data sheet from Zilogl, input setup and hold times and output delays are specified with respect to a rising edge of ClK. When CPU output transitions occur on different rising clock edges, the time between the transitions is specified in terms of s constant delay and a variable number of ClK cycles. The number of ClK cycles dependa on the bus timing scale factor, type of transaction, and number of wait states. In the logical timing diagrams that follow, the signal transitions on the bus are shown in relation to the bus clock, BClK. The beginning of a transaction, signified by a fslling edge of g, CLK BCLK AD ===:x ADDRESS }- - - - - (A) ICLK = CLK - - < DATA IN } - - +2 CLK BLCK .-J ==:J
--------------<\,__ A_DD_R_E_SS ____ ...,>-- - - - - - D_A_T_A_IN_ _ J \ _________________________-JI (I) ICLK = CLK +4 Exa.ple of Mamry Re.t Tilling Showing Different Bus Scale ractors Figure 8-5. 8-6 2071'()13 External Inter face always occurs on a rising edge of BCLK. The BCLK signal is derived internally to the CPU as described above, and is not available on the pins. BCLK can also be derived externally by dividing CLK by the selected bus timing scale factor. Section 8.10 discusses synchronization of the internal and external bus clocks. The timing diagrams in Figure 8-5 show example memory read transactions with one wait state using the different scale factors. 8.8 All bus transactions begin with Address Strobe (m first asserted" and then negated. On the rising edge of ~, the lines for status (STO-ST3), Read/Write (R/W), data transfer size (BW/C, BL/W), and Normal/System (Nm are valid. The status lines indicate the type of transaction being initiated (Table 8-1). The R/W line indicates the direction of data transfer. The data transfer size indicates whether a byte, word, or longword of data is to be transferred. The N~ line indicates the CPU's operating mode. The following sections describe timing for the different transactions. Status Codes ST,-STO Definitioo o0 o0 o0 o0 o1 o1 o1 o1 Internal Operation CPU-EPU (data) I/O Halt CPU-EPU (Instruction) mIT" Acknowledge mY" Acknowledge vr Acknowledge Cacheable CPU-Memory (Oata) Non-Cacheable CPU-Memory (Data) Cacheable EPU-Memory Non-Cacheable EPU-Memory Cacheable CPU-Memory (Instruction) Non-Cacheable CPU-Memory (I nstruction) Reserved Interlocked CPU-Memory (Data) 0 0 0 1 1 0 0 1 1 0 1 0 1 0 1 1 1 000 001 o1 0 o1 1 1 0 0 o1 1 1 0 1 1 1 rnr.) rnr rnr BUS TRANSACTIONS Table 8-1. On the rising edge of ~, the address on the AD lines is also valid. Addresses are not required for internal operation, halt, interrupt acknowledge, and CPU-EPU data transactions; the AD lines are driven but the address is undefined for those transactions. The CPU uses Data Strobe (~ to time the data transfer. (Note that internal operation and halt transactions do not transfer data, and thus do not assert For write operations (R/W = Low), the CPU asserts when valid data is on the AD lines. For read operations (R/W = High), the CPU makes the AD lines 3-state before asserting so the addressed dev ice can put its data on the bus. The CPU samples the data in the middle of a bus cycle while negating "In the description of bus transactions, the term "asserted" means an active signal and "negated" means an inactive signal. A signal is either active when High or when Low, as specified in the pin function list. rnr. The AD lines can be used to transfer bytes, words, or longwords of data. When reading from memory, the CPU always reads a word or longword, depending on the memory data path width, regardless of the size of the information required. For read transactions the three cases are handled as follows: • • Byte transfers use ADO-AD7; AD8-AD31 ignored. Word transfers use ADO-AD15; AD16-AD31 ignored. • Longword transfers use ADo-AD31' are For write transactions, handled as follows: are • • • the three cases are Byte transfers replicate the data on ADO-AD7' AD8-AD15' AD16-AD23, and AD24-AD31' Word transfers replicate the data on ADO-AD15 and AD16-AD31' Longword transfers use ADO-AD31' The Input Enable (1!) and Output Enable (or) signals can be used to enable buffers on the bidirectional AD lines. Ir is asserted when the buffers are to drive toward the CPU; tit is asserted when the buffers are to drive away from the CPU. Whenever the direction for the AD lines changes, both Ir and tit are negated for at least one CLK cycle. To transfer more than one data item, the CPU can perform burst transactions. The data items are transferred in the same direction, and are equal in size. is used to time each transfer. The CPU asserts Burst (~ to indicate a burst transfer. The responding device asserts Burst Acknowledge (~ if it is capable of supporting burst tranfers. If ~ is not asserted, the CPU transfers only a single data item. rnr 8-7 External Interface 8.8.1 Response Any time data is transferred, the responding device returns a code on the Response lines (RSPO-RSP1) to indicate ready, wait, bus error, or bus retry. The response is sampled at a time specif1c for each type of transaction, generally before the AD lines are sampled for reads or OS is negated for writes, and after automatic wait states are inserted. Ready indicates the completion of a successful transfer. Wait indicates that the responding device needs more time to complete the transaction. The CPU watts one bus cycle before sampling the response again to accommodate slow memory or peripherals. A simple system using only Z-BUS WAIT can be implemented by connecting wAn to both RSPO and RSP1· Bus error indicates that a fatal error has occurred during the transaction, e.g., bus tImeout for a nonexistent dev ice. The CPU treats bus error as an exception. Bus retry indicates that the transaction should be tried again, e.g., a transient parity error was detected. The CPU negates OS and tries the transaction again. The CPU can insert wait states automatically under control of several fields in the Hardware Interface Control register. If an automatic wait state is programmed for a bus cycle, the CPU ignores the response and wait is assumed. Thus, wait states can be inserted automatically by the CPU or upon request of the responding device. It must be emphasized that the RSPO-RSPl lines are sampled synchronously. Thus, they must meet the specified setup and hold times for correct operation. 8.8.2 BCLK AD 8.8.2.1 Single HeIIory Read and Write Transactions. Figure B-6 shows timing for a single memory read transaction with no wait states. AS is =><__ r -®- -C A_D_D_R_E_SS_--J v I IE CPU-Memory Transactions The CPU performs transactions with status 1000, 1001, 1100, 1101, or 1111 to read from and wnte to memory. See Appendix C for more information about the dl fferent status codes. The transactions involve either a single data transfer or multiple, burst data transfers. B-B asserted during the first half of Tl. The rising edge of AS lndlcates that the address on ADO-AD31 and control signals STO-ST3' R/W, BW/L, BL/W, and N/S are valid. The control signals remain valid for the duratlon of the transaction. !iR5T is negated during the transaction because only a single data item is transferred. At the beginning of T2, the CPU stops driving the address, asserts 05, and prepares to receive data from memory. In the middle of T2, RSPO-RSPl are sampled ready, the input data is latched, and DS is negated. The signal OE is asserted during Tl; however, for twocycle read transactions, IT is not asserted. rr lS unasserted because there is no bus clock transition between the negation of DE at the end of Tl and the sampling of data in the middle of T2. The two-cycle read transactlon is a compatible extension of the Z-BUS three-cycle read transactlon. Two-cycle read transactions are intended for use with fast memories connected dlrectly to the CPU pins without buffers, such as an external cache. STo·STa NIS BW/L,BUW =x )( ._ _ _ _ _ _ _ _ _ _ _ _ _~. \ *RSPo-RSP1 and data sampled. Figure 8-6. Single Memory Read TDing 2071-014 External Interface The CPU can insert wait states in the middle of T2 If RSP O-RSP1 are sampled wait or if automatic wait states are programmed in the appropriate field of HICR. The duration of a wait state is one BCLK cycle. for a 32-bil: data path, or the aligned word addressed by AD1-AD31 (ignoring ADD) for a 16-bit data path. The CPU selects the required bytes from the transferred word or longword. A single memory write transaction (Figure B-B) begins with ~ to indicate that address and control signals are valid. At the beginning of T2 the CPU stops driving the address and starts drlv.1ng the data. In the middle of T2, OS is asserted. The CPU negates OS in the mIddle of T3. ij[ is asserted beginning at T1 and continues for the duration of the transaction. The CPU samples RSPO-RSP1 in the middle of T3. The timing for a single memory read transaction with one wait state is shown in Figure B-7. This is not a true wait state because the CPU asserts "IT" in the middle of T2 and continues untll the middle of T3. For memory read transactions longer than two bus cycles, either because of wait states or burst transfers, Ir is asserted from the middle of T2 until the end of data transfer. The signals ~ and Ircan be used to control buffers on the AD lines. For memory write transactions, the data transfer size is less than or equal to the data path width specified in HICR. Bytes and words can be written to a 16-bit memory; bytes, words, and longwords can be written to a 32-bit memory. The CPU writes bytes to any address, but words and longwords are For memory read transactions, the data transfer size is equal to the data path width specified in HICR. The memory should transfer the aligned longword addressed by AD2-AD31 (ignored ADO-AD1) BCLK AD =::J( ADDRESS \ _ _ _ _- 1 / \~_...J STO- ST3 MIS Bwii:, BL/V! J .~____________________________________ BRSTA *RSPo-RSP1 and data sampled. Figure 8-7. Single Memory Read Timing (One Wait State) 2071-015 B-9 External Interface always written to an aligned address; that is, words are always written to an even address and longwords are always written to an address that is a multiple of four. When a program writes a word or longword to an unaligned address, the CPU performs two or more wri te transactions to aligned addresses. For example, if the program writes s word to an odd address, the CPU first writes the more significsnt byte to the odd address, then it writes the less significant byte to the successive even address. Singla memory read and write timing are slightly different from Z-BUS specifications. The minimum read transaction is two bus cycles, and the rasponse is sampled at the end of the data transfer. For the Z-BUS, the minimum read transaction is three cycles, and the response is sampled one cycle before the end of the data transfer. For atrict Z-BUS compatibility it is possible to program one automatic wait state for memory read and to delay the response using an external flipflop. 8.8.2.2 Burst MeIIIory Read and Write TransacBurst memory transactions use multiple tions. Data Strobes following a single Address Strobe to transfer data at consecutive memory addresses. The IMrr and ~ signals control the burst transaction. The CPU uses burst transactions to pre fetch the cache block for a cache miss on an instruction fetch. The CPU slso uses burst transactions to fetch or store operands when more than one transfer ia necessary, as with unaligned operands, string instructions, load Multiple instructions, and loading of Program Status. I f the memor y does not support burst trans fers, the burst transfer protocol described below (Figure 8-9) allows ~ to be tied High. The CPU then separates the burst transaction into a sequence of single transfers, but only a single transfer is performed for a cache miss on an instruction fetch. BCLK AD ==:x: ADDRESS XI._____ D_A_T_A_O_U_T_ _ _ _ _ x= \,--_......,f STo-ST3 NIS BW/L, BLli! ==:x: >C •_________________________________. c RiW~ *RSPO-RSP1 sampled. Figure 8-8. 8-10 Single Me.ory Write Ti_ing 2071'()16 External Interface CPU or memory. If memory terminates the transfer by neg at ing tiIiSTA, the CPU responds by negating ~ when [is" is negated. (See the example for burst memory read.) I f the CPU terminates the transfer by negating mrsT before the falling edge of ~, memory responds by negating~. (See the example for burst memory write.) The CPU terminates the burst transaction when all the required data .items have been transferred or after reaching the end of an aligned, 16-byte block. figure B-10 shows timing for a burst memory read transaction with one wait state. In this example, three data items are transferred, after which memory terminates the burst. 'mrST is asserted at the beginning of T1; otherwise, the timing for the first transfer is identical to a single memory read. In the middle of n, the CPU samples RSPO-RSP1 ready, latches the data, and samples ~ active. During T4 the second data item is transferred, accompanied by~. The time for the second and subsequent transfers can be extended with wait states i f RSPO-RSP1 are sampled wait; the CPU inserts automatic wait states only for the first transfer. During T5 the third data item is transferred. At the same time RSP O-RSP1 are sampled ready, the data is latched and ~ is sampled inactive. Memory terminated the burst transfer, and the CPU responds by negating mrsT. At the beginning of a burst trsnssction, the CPU asserts ~ along with other control signals. If the CPU continues to assert mrsT when [is" falls, this indicates to memory that the CPU can support another data transfer following the one in process. If the CPU negates ~ before ~ falls, this indicates to memory that the current transfer is the last in the transaction. Figure B-11 shows timing for a burst memory write transaction with no wait states. In this example, two data items are transferred, and the CPU terminates the burst. mrsT is asserted at the beginning of T1; otherwise, the timing for the first transfer is identical to a single memory write. In the middle of n, the CPU samples RSPO-RSP1 ready and ~ active. At the beginning of T4, the CPU negates mrsT, indicating that one more data transfer will follow. During T4, the second data item is transferred, accompanied by~. The time for the second and subsequent transfers can be extended with wait states if RSPO-RSP1 are sampled wait; the CPU inserts automatic wait states only for the first transfer. Memory recognizes that the CPU has terminated the burst transfer, and responds by negating mTA before the end of T4. Note that a memory system can be designed to support burst transfers only for read transactions through selective enabling of ~. When ~ is asserted at the time the RSPO-RSP1 lines are sampled ready, this indicates to the CPU that memory can support another data transfer following the one in process. When ~ is negated at the time the RSPO-RSP1 lines are sampled ready, this indicates to the CPU that the current data transfer is the last in the transaction. The burst transaction can be term~nated by either the 8.8.2.' Interlocked tte.lry Tr_actioos. In tightly-coupled multlprocessor configurations, the CPU must at certain times inhibit other bus masters from referring to shared memory while the CPU performs two or more interlocked transactions. The CPU uses interlock protection for data references asaociated with Test and Set, Decrement Figure 8-9. 2071'()17 Burst Transfer Protocol B-11 External Interface 3 DATA TRANSFERS, MEMORY TERMINATES BURST BCLK AD ==x: ADDRESS DATA IN X DATA IN X,-_D_AT_A_IN_..J>- --C \.L-_....II DE _ _ _ \~--------------~ STO-SIJ.=:X BwiL", BLly! NIS BRST ,~------------------------------------------------------~~____________________________________________________-..J \~------------~~--------~----~ ·RSPo-RSP1, iFiSTA, and data sampled. Figure 8-10. 8urst Memory Read Ti.ing (One Wait State) Interlocked, and Increment Interlocked instructions. The CPU also uses interlock protection for references to address translation table entries when loading the Translation Lookaside Buffer. The CPU indicates interlocked protection for a sequence of memory references by using status 1111 for any of the memory transactions previously described. While the CPU indicates status 1111, the memory system must prevent interlocked references to shared memory by other processors. During a sequence of interlocked memory tranaactions, the CPU does not acknowledge local bus requests nor does the CPU generate any bus transactions with status other than 1111. B-12 8.8.' Input/Output Transactions The CPU uses status 0010 to read from and write to I/O ports. I/O transactions are generated for I/O instructions and, when address translation is enabled, by data references to pages with bit 31 of the page table entry set to 1. The timing for I/O and memory transactions 1S very similar. The major difference is that DS falls in the middle of T2 for I/O read timing, compared to the beginning of T2 for memory read timing. This allows peripheral dev ices more time for address decoding. Another d~ fference is that the data 2071-018 External Interface 2 DATA TRANSFERS, CPU TERMINATES BURST 2-I- I -T1 - I -T T3 - I - T " BCLK AD ~~__A_DD_R_E_S_S__-,)(~__________D_A_TA__O_UT__________J)(~___D_A_TA__O_UT____~ IE STo-ST. HIS BWIL,BUW x= =x ,_________________________________________________, \ ......_ _ _-.l.\----'/~_ __J7 *RSPo-RSP1. BRSTA sampled. rigure 8-11. Burst trsnsfer size (byte, word, or longword) for I/O transactions is specified by the instruction, not by HICR. The final difference is that the CPU does not support burst I/O transactions. Figure 8-12 shows timing for an I/O read transaction. I/O write timing is the same as a single memory write (Figure 8-8). 8.8.4 EPU Transactions The CPU and EPU cooperate in the execution of EPA instructions (Figure 8-13). When the CPU encounters an EPA instruction and the EPA bit in FCW is 1, the CPU broadcasts the first two words of the 2071-019 ~ry Write Ti.ing instruction to the EPUs in the system using the CPU-EPU instruction transfer transaction. All EPUs in the system recognize the transaction, but only one of four possible EPUs is selected by bits 16 and 17 of the EPU instruction. The CPU also transfers the PC value for the instruction, which the selected EPU saves for use in exception handling. If data transfers are required to complete the instruction, the CPU controls the data transfer transactions while the EPU drives or receives the data. The ~ signal, output from the EPU, is used to synchronize the CPU and EPU in executing EPA instructions. (When multiple EPUs are present in 8-U External Interface 8eLK AD ==x ADDRESS }- - - - - - -< DATA IN } - - -C I \_--- if STo-STa NI. 8Wlr,8UW Xr------------------ . ~. ________________________________ *RSPo-RSP1 and data •• mpled. Figure 8-12. a system, the EJSDm input to the CPU must be driven by an external AND gate whose inputs are the EJSDm signals from the EPUs). The CPU must sample EJSDm inactive before inItisting sn EPU instruction transfer. If data transfers are required, the CPU must ssmple EJSDm inactive bsfore initisting the first transfer. While the CPU samples EJSDm active, no transactions are initiated; however, the CPU may grant the locsl bus. 8-14 I/O Read Ti_ing EJSDm is also used to control the degree of overIsp between CPU and EPU instruction execution. Ordinsrily, the CPU can continue processing other instructiona after performing the data transfers associated with sn EPA instruction and before the EPU has completed executing the instruction. To simplify debugging snd recovery from exceptions, overlap can be disabled under control of the EPUD blt in HICR. When overlap is disabled (EPUO = D), the CPU samples EJSDm in the middle of the bus 2071-020 External Interface NO YES NO YES Fi!J.Ire 8-13. EPA Instruction Processing cycle during which the last data transfer for an EPA instruction occurs. If E'J5IJ'!lSV is asserted, the CPU ceases processing instructions or interrupts until ~ is sampled inactive in the middle of a bus cycle. When overlap is enabled (EPUO = 1), the CPU does not sample ~ after the last data transfer, but only samples ~ before initiating the next EPU instruction transfer. While processing an EPA instruction and after the instruction has been transferred to the selected EPU, the CPU may detect an address translation exception. In such an event, the CPU asserts EPOABORT, informing the selected EPU to abort execution of the instruction; at all other times, the CPU negates EPOABORT. The CPU then saves the address of the suspended EPA instruction on the system stack during exception processing. 2071-021 When CPU and EPU instruction processing over lap, the CPU may complete all data transfers for an EPA instruction (the queued instruction) before the EPU completes execution of a previous EPA instruction. If the EPU then detects an exception during execution of the previous instruction, the EPU does not execute the queued instruction. In such a case, the address of the queued instruction is in an EPU control register, and the CPU saves the address of a subsequent instruction on the system stack. To simplify system hardware, the CPU and EPU AD lines should be wired together with no buffers between them. I f the AD lines are separated by buffers, external circuitry must generate and timing for CPU-EPU data read and EPU-memory write transactions. nr rr 8-15 Externel Interface tEPUBSY IImpled. _ _ ·RSPo-RSP1 'Impled; EPUBSY 'Impled If EPU Intemll operation. Figure 8-1 •• CPII-EPU Instruction Tr_fer Tilling 8.8 ••• 1 CPU-EPU Instructioo Tr..actiona. Figure B-14 shows timing for a CPU-EPU instruction transfer transaction with status 0100. The rising edge of ~ indicates that the AD lines and status are valid. During T1, the AD lines sre used to transfer the opcode, i.e., the first two words of the EPA instruction. At the beginning of T2 the CPU stops driving the opcode, asserts ~, and starts driving PC on the AD lines. In the middle of T2, the CPU samples RSPO-RSP1 ready and negates ~. The data transfer size for the transaction is longword. B-16 The duration of a CPU-EPU instruction or data transfer can be extended with wait statea if RSPO-RSP1 are sampled wait. The ZB070 APU, however, does not require wait states, nor does it drive RSPO-RSP1' Systems using the ZB070 APU must enaure that RSPO-RSP1 are both High, indicating ready, during CPU-EPU instruction and dats transections. 2071-022 External Interface ...JX. .__ ....._ _ _D_A_T_A_IN ___ D_A_T_A_I_N_...I}- - - - - -C '---_______________________________K fEPUBSY sampled. -RSPo-RSP1 and data sampled. Figure 8-15. CPU-EPU Data Read Tilling CPU-EPU Data Transactions. Transactions to transfer data between the CPU and EPU use status 0001. The EPA instruction opcode indicates the number of words transferred. One or more longwords of data are transferred until all words If the last transfer have been transferred. contains a single word, the data is on AD16-AD31. The CPU does not assert !iR'ST and ignores ti1i'Sfi\. 8.8.4.2 Figure B-15 shows timing for a CPU-EPU data read transaction. This example has two data transfers; any number of data transfers between one and eight 2071·023 is possible. The rising edge of ~ indicates that status and control signals are valid. The CPU stops driving the AD lines at the end of T1; the EPU begins driving them in the middle of T2. At the beginning of n, the CPU asserts~. In the middle of T3 the CPU samples RSPO-RSP1 ready, latches the data, and negates~. The second longword of data is transferred during T4. After the last data transfer the CPU inserts an idle bus cycle (T5 in the example) during which neither the CPU nor EPU drive the AD lines. B-17 External Interface BCLK X AD _ _ _ _ _ _ _ _ _.J DS UNDEFINED X DATA OUT X DATA OUT X DATA OUT / ------' \ 7 r \ R/W S~o-S!1----------------~ BW/L,BUW NIB _ _ _ _ _ _ _ _ X )C ~ ~ 7 7 tEPUBSY .ampled. *RSPo-RSP1 'Impled. Figure 8-16. CPU-EPU Data Write Tiaing Figure 8-16 ahows timing for a CPU-EPU data write tranaaction. This example has three data transfers; any number of data transfers between one and eight is possible. Timing for the first transfer is identical to the CPU-EPU instruction transfer transaction. A second longword of data is transfer red dur ing T3, and the third longword is transfer red during T4. 8-18 8.8.4.' E~ry Tr_actions. The CPU uses status 1010 or 1011 for the EPU to read from and write to memory using flyby transactions. The timing is identical for EPU-memory read and CPU-memory read. The EPU monitors the CPU timing on the bus, and uses the two least significant address bits on the first transfer, the data transfer size, and the length of the operand from the instruction to select the bytes it needs from the AD lines. 2071-1)24 External Interface ~____________E_P_U_D_A_TA__O_UT____________-J)-- - --~ \... \'------JI [ [ ~ *EPUBSY sampled: ___________________________________________________________K __ + RSPo-RSP1 sampled; EPUBSY sampled If last transaction. Figure 8-17. EPU-Hemory Single Write Ti_ing The timing for an [PU-memory write transaction differs slightly from a CPU-memory write transaction. Two extra bus cycles sre included to pass the AD lines from CPU to [PU sfter the sddress transfer and from [PU back to CPU after the last data transfer. Figure 8-17 shows an example for a single [PU-memory write transaction with no wait states. The CPU stops driving the AD lines at the end of T1; the [PU begins driving them in the middle of T2. l5S is asserted in the middle of T3, one bus cycle later than for CPU-memory write 2071-025 timing. The CPU negates l5S in the middle of T4. The CPU can insert wait states in the middle of T4. The [PU continues to drive the AD 11nes until the end of T4. After the last data transfer the CPU inserts an idle bus cycle (T5 in the example) during which neither the CPU nor [PU drive the AD lines. [PU-memory burst write transactions are similarly extended by two bus cycles more than CPU-memory burst write timing. One cycle is inserted before the first data transfer, and another after the last data transfer. 8-19 External Interface VI, NYI \ INTERNAL NMI LATCH .._ _ _ _ _ _ _ _ __ \'----~"r AD Y r--(I-_____ .J UNDEFINED \ ....._-- I \ ...... _ _- J R/WJ STO-S'!J.==X NIS BW/L, BUV! .~ _____________________________-.J • RSPo-RSP1 sampled. + RSPo-RSP1 and data sampled. Figure 8-18. Interrupt RecplSt/Acknowledge Tilling 8.8.5 Interrupt Request and Acknowledge The CPU recognizes vectored, nonvectored, and nonrequests. The decreasing maskable interrupt order of priority for interrupts is nonmaskable, vectored, and nonvectored. ~ is edge sensitive; when RRr is asserted, an internal latch is loaded. vr and NVr are level sensitive. The CPU samples vr, NVr, and the internal ~ latch on the rising edge of ClK. The interrupt request signals can be asynchronous to ClK; the CPU synchronIzes them internally. 8-20 After a request for an enabled interrupt is asserted, the CPU begins an interrupt acknowledge transaction. figure 8-18 shows timing for an interrupt acknowledge transaction, indicated by status 0101, 0110, or 0111. The timing is similar to a single I/O read. Wait states (either programmed for automatic insertion or externally generated) can be inserted before [)S" falls in the middle of T2, and before [)S" rises in the middle of T3. Inserting wait states before [)S" falls allows for delay in the interrupt priority daisy chain. 2071-026 External Interface A word of data is transferred on ADo-AD15' All of the interrupts save the transferred word on the system stack for processing the interrupt. Vectored interrupt uses the low-order byte of the word to select a unique PC value from the Program Status Area. B.B.6 Internal Operatioo InI Halt Tr_-=tioos Figure 8-19 showa hming for internal operat ion (atatus = 0000) and halt (status = 0011) transactions. Unlike other bus transactions, data is not transferred during these operations. Nevertheless, the data transfer size for the transaction indicates longword. The duration of the transaction is two bus cycles. BeLl( AD ~__................U_N_D_EF_I_N_ED...................~ The CPU generatas an internal operation transaction after the end of a sequence of interlocked memory transactions. The CPU generates a halt trensaction upon entering halted state (Section 7.2). When the Minimum Address Strobe Rate option is enabled (the MASR bit in HICR is 1), the CPU maintains a steady rate for Address Strobes by generating halt traneactions in halted state or internal operation transactions otherwise. B.B.7 Bus Ratry During transactions in which data is transferred, the responding device can ind.icate bus retry on RSPO-RSP1 • When bus retry is sampled, the CPU terminates the transaction in progre.ss, negating g and BRS"f, then repeats the same tranaaction. If bua retry ia indicated during a burat tranafer, the retry transactIon begins with the address for the data transfer where bus retry was indicated. The CPU does not acknowledge interrupts or bus requests between the retry response and the retry transaction. 8.B.B Bus Error c 'C ITO-I!! BwiL", B'i!,l J<................................................_V" --- During transactions in which data is transferred, the responding device can indicate a bus error exception on RSPo-RSP1' When bus error is sampled, the CPU terminates the transaction in progreaa, negating g and ~. A bus error exception also causes termination of the instruction in execution. In processing a bus error exception, the CPU savea the Program Statua, physical address for the transaction, and a word identifying the status and control aignals used for the transaction on the system stack, in that order (Figure 8-20). In the identifier word, High aignals are 1, and Low signals are O. 16 'C Fi9lrB B-ZO. Bus Error Identifier Word Figure B-19. Internal Operatioo InI Halt Tilling 2071-027,8225-023 8-21 External Interface 8.9 BUS REQt£ST AN) ACKNOILEDGE The CPU can initiate transactions with devicea located on a global bus shared with other CPUs. At any time, only one of the CPUs can initiate transactions on the global bus. Control of the global bus is arbitrated by external circuitry. Before initiating tranaactions on the global bua, the CPU requeats control of the global bus from the arbiter using the protocol described below. The CPU supports two types of bus request/ acknowledge sequences, local and global. Other bus masters request the local bus from the CPU using a handshake of ~ snd~. The CPU requests a global bus from an external arbiter using a handshake of ~ and Gm". To generate transactions on the local bus, a potential bus master (such as a DMA controller> must gain control of the bus by making a bus request (Figure B-21>. A local bus request is initiated by asserting~. Several bus requestors may be wired to the ~ signal; priorities are resolved externally to the CPU, usually by a priority daisy chain. The CPU uses two fielda of HICR to distinguish between local and global bus transactions. The GE bit enables uae of the global bus. The 4-bit lAD field specifies one of sixteen sections of the physical address space uaed for local references. The CPU samples ~ on the rlslng edge of elK. can be asynchronous to ClK; the CPU synchronizes it internally. After ~ is asserted, the CPU completes any transaction or sequence of interlocked transactions in progress, including possible retries. Next, the CPU responds by asserting ~ and placing its other output signals except EPUABORT in 3-state. The EPUABORT signal remains valid while the CPU has granted the local bus, and may be asserted if an EPA inatruction is in progress. later, when ~ is negated, the CPU negates '!iirnAEI< and begins driving all other output signals. ~ Before every memory and I/O bus transsction (status codes 0010 and 1000 through 1111), the CPU compares the lAD field with bits 26 to 29 of the physical address. If the comparison is unequal and GE is 1, then the transaction is a global bus reference; otherwise the transaction is a local bus reference. In a tightly-coupled multiprocessor aystem (Figure B-2c), each of the local and global memory locations and peripheral ports can have a unique system address. Each CPU loads a distinct value into lAD, identifying its local addresses; the CPUs refer to global addresses and local addresses of other CPUs using the global bua request protocol. J)~'------~~~______________~ BUSACK AD AS, OS, BRST, GiiEQ ________ : DE, ii }-------:fr-----'~ ~.~~----J 7 ----" > -------------1/ i; STO-ST3 _____________~-: BW~W~~~ ~ hF------ilt-f \.------ ..,r--- - -,~ )-_____ -:fr _ -----f~ 5:1,..------...# Figure 8-21. local Bus Request Acknowledge Ti_ing B-22 2071.()28 External Interface figure B-22 shows timing for the global bus request/ acknowledge protocol. Before init iat ing a transaction on the global bus, the CPU drives the address, STO-ST3' mtrr, R/W, N~, BL/W, and BW!L valtd at the beginning of a bus cycle. Then, in the m.iddle of the bus cycle, the CPU asserts ~. When the global bus selected by the address is available to the CPU, the arbiter asserts IJ ITAEK. The CPU samples ~ on the rislng edge of eLK. ITAEK can be asynchronous to CLK; the CPU synchronizes it internally. The CPU performs one or more transactions on the global bus, then negates GTltQ. The arbiter responds by negating 'GACl(; the CPU can then in it iate more transacti.ons. ,- ;; " ;; DS OE\ STo-S!i. Bwii:. BL/I! NIS =x ; , ) 8.- ,- )f ~ ;; -, , ; II ) ); ,- ;J I, ~: :'J -IJ J , ,- f'i; ;; II ,..: ;; ); ,- :=x , IE BRST \ >J '= BRSTA Figure 8-22. 2071'()29 Global Bus Request Timing B-23 External Interface waiting for mJ( in state 2. If BliS'RE[ is asserted before mJ(, the CPU relinquishes the globs I bus without performing any transactions. Figure 8-23 shows a state diagram for the local and global bus request protocols. To prevent deadlock between CPUs referring to esch other I s local memories, s CPU can be preempted while it is STATE 0 = = ClREQ H BUSACK H BUS = 2ST (BUSREQ • L). (ClACK. H) A l:!.ClACK STATE 1 = L = = H). C ERROR STATE 2 = ClREQ 3ST BUSACK = L BUS - 3ST D BUSREQ = (BUSREQ H).(ClACK (NEED_GBUS H) = H E (GACK = ClREQ = L BUSACK = H BUS = 2ST L).(BUSREQ STATE 3 = H) (ClACK = L). (BUSREQ = L) F STATE 4 ClREQ = L BUSACK = H BUS 2ST = ~!OACK - GREQ = H BUSACK = H BUS 2ST H (GACK = L). [(BUSREQ = L) +(NEED_ClBUS = = L)] I H GACK =H ERROR NOTES: Inte"ace algnalo are High (H), Low (L), High or Low (2S1), or 3·otalod (3ST). NEED_GBUS Is an ocllve High olgnal Intomal to the CPU. Figure 8-23. State Diagr_ for CPU Bus Reqwst Protocol 8-24 2071-030 External Interface State legend State 0 The CPU controls the local bus and is neither requesting nor controlling the global bus. Transition legend A A local bus request occurs. B The global bus arbiter grants control of the global bus when no global bus request is pending. This is an error. The CPU remains in State O. C The CPU requests the global bus in response to the internally generated signal NEEO_GBUS. The CPU controls the local bus and is requesting the global bus. D The local bus master relinquishes the bus. The CPU cannot perform transactions. E The global bus arbiter grants the global bus to the CPU while no local bus request is pending. F The global bus arbiter grants the global bus to the CPU while a local bus request is pending. The CPU is preempted. G The global bus arbiter bal bus before the CPU global bus. This is CPU's response to undefined. H The CPU relinquishes control of the global bus when it no longer needs the global bus or in response to a local bus request. The CPU can perform transactions on the local bus. State 1 The CPU has granted the local bus. The CPU cannot perform transactions. State 2 State 3 The CPU controls the local and global buses. The CPU can perform transactions on the global bus. State 4 The CPU controls the local bus and is relinquishing control of the global bus. The CPU cannot perform transactions. reclaims the glorelinquishes the an error. The this error is The global bus arbiter reclaims the global bus. B-25 External Interface 8.10 RESET Figure 8-24 shows Reset timing. After ~ is asserted, the CPU responds as follows. • AD lines are turned to input direction • ~,~,~,~, • • • negated STO-ST3 are driven to 1111 BW!L and Bl/W are driven low N~ andR/W are undefined or- are EPOABOR1, rn!E'Q', 'It, and If ~ is ~, the asserted while the CPU is asserting CPU first negates~, then the other CPU output lines are removed from 3-state and driven aa described above. After I!£'SET is asserted, external circuitry can detect that the CPU has responded to the reset request by sensing BW!L and Bl/W low. At power on, I!£'SET should be asserted until after power has stabilized. During reset, bits SX, NX, CI, and CD of the SCCl control register are cleared, disabling the address translation and cache mechanisms. Bit GE of HICR is also cleared, disabling the global bus request protocol. 8-26 At the rising edge of I!£'SET, the relationship between bus timing, memory data path, and number of automatic wait atates is determined. If RSPO is High at the rising edge of I!£'SET, HICR is initialized with MD.DP = 1 t MO' W = 7, and S = 1. This corresponds to a default configuration of 16-bit memory path, seven automatic wait states, and bus clock scale factor 2. If RSPO is low at the rising edge of I!£'SET, ADO-AD3 and AD11 are latched into the corresponding bits of HICR, and AD15 must be High. I!£'SET need not be synchronous with elK; however, the CPU assumes that the last rising edge of ClK on which I!£'SET is asserted corresponds to a rising edge of BClK. Thus, if I!£'SET is synchronized with the rising edge of the external bus clock, the internal and external bus clocks will be in phase with respect to ClK. After REm- is negated, the CPU resds FCW from memory address 2 and PC from address 4 using status 1101. If ~ is asserted before I!£'SET is negated, the CPU acknowledges the bus request before fetching the Program Status. External Interface CLK~ BCLK~ RESET RSPo AD As J ~ , '------7,~----------------------------------7~-----------J ----------~hF'----------------------------------{~------~ J --------~h~'--------------------------~r------J ) : : - - --f'r{ ------{~--~r-------~~----_7~------~ " ) DS /; ADDRESS = 2 r '~ 7 ' \.....J ) DE : '",," ) ) IE '-- : ------~~---7~--------------~~------------~h~'----) 'c h R/W ;'1 Mis /f s'l :, :~~\~---------------~fl------------~" r== c= : ALL HIGH STo-ST3 BwiL, BLfW 11~101 , II BRST II > EPUABORT ::J ----------~o-----~---------------------------;,hF--------------------_i.f;F'-------J Figure 8-24. 2071-031 Reset Timing 8-27 A AppeDdixA. Z8OO0 Compatibility The zao,ooo CPU is an upward-compatible extension of zaooo architecture and bus interface. All zaooo normal mode software and most zaooo system mode aoftware executes on the zao,ooo CPU, prov1ded the software containa no timing dependenciea, does not modi fy itself, and does not use any of the zaooo reserved instruction, address, and control field encodings. A few of the zaooo privileged instructions ara not implemented by the zao,ooo CPU. The instructions are LDCTL (refresh control register), the Mult iMIcro set (MalT, MREQ, MRES, MSET), and the Special I/O inatruction set (SIN, SINB, SIND, SINDB, SINDR, SINDRB, SINI, SINIB, SINIR, SINIRB, SOTDR, SOTDRB, SOTIR, SOTIRB, SOUT, SOUTB, SOUTD, SOUTDB, SOUTI, and SOUTIB). An Unimplemented Instruction trap occurs when a program attempts to execute one of these instructions. The portions of a zaooo operating system concerning memory management and initialization of the Program Status Area (PSA) must be modified to execute on the zao,ooo CPU. The PSA for the zao,ooo CPU is an extension of the zaooo's PSA, with more entries for additional exceptions. Memory management is integrated in the zao,ooo CPU, while the zaooo CPU implements memory management in peripheral components (Za010 Memory Management Uni t and Za015 Paged Memory Management Unit). In addition, the zao,ooo CPU does not separate stack and data address spaces as does the zaooo CPU. Any inconveniences caused by these differences can be minimized by following the gUidelines in the application note "Memory Management and the zao,ooo 32-bit Microprocessor" (Zilog document number 00-2329-01). The zao,ooo CPU ia compatible with the signals and timing of the 16-bit Z-BUS, except for the MultiMicro resource request signals. The global bus request protocol of the zao,ooo CPU replaces the Multi-Micro protocol. The zao,ooo CPU also improves the Z-BUS sampling of WlITT" and permits memory read transact ions of two bus cycles duration, though strict Z-BUS compatibUity can be msintained by programming appropriste fields in the Hardware Interface Control register. (For strict Z-BUS compstibility, HICR fields MQ.DP, MO.W, M1.DP, M1.W, I/OO.W, and I!01.W are 1; IACK.W1 is 3; IACK.W2 is 2; and GE is 0.) For the zao,ooo CPU, EPU-to-memory write transaction timing includes one cycle more than the Z-BUS specification; the additional cyc le prevents a bus clash between the CPU and EPU. Aside from the Z-BUS signals and timing described above, there are only the following few differences between the zao,ooo CPU and zaooo CPU pin signals. The zao,ooo CPU doea not implement the zaooo CPU signals R'R'm", mJr, 1IM!Rr, (Za003 and Za004 only), ~ (Za001 only), and mIT" (Za003 only). Additionally, some of the status code definitions have been changed to accommodate the cache in the zao,ooo CPU. The zao,ooo CPU does not aupport refresh transactions. A-1 B Appendix •• Memory-Mapped 1/0 The CPU's memory management mechanism can map logical memory addresses to physical I/O addresses by setting bit 31 of a page table entry to 1. Memory-mapped I/O can be used only for references to the data memory logical address spaces with the following instructions. ADO AND BIT CLR COM CP (not Immediate) DEC EX INC LD NEG OR RES SET SUB TEST TESTA XOR Memory-mapped I/O must not be used for instruction address space references or for data references with instructions other than those listed above. I f memory-mapped I/O is used in this prohibited manner, the CPU may not be able to recover correctly from an address translation exception that is detected after the peripheral port has been accessed, because the state of the peripheral may have changed. In addition, instructions like Decrement Inter locked and those for the Extended Processing Architecture cannot use I/O status on bus transactions. B-1 I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I i I I I I I I c Appendix C. Cache Control and Memory Transactions The Z80,000 CPU implements e cache mechanism that keeps copies of frequently used memory locations on-chip for fast access. The cache mechanism is selectively enabled for instruction and data referencea by bita CI and CO in the SCCL register. The cache replacement algorithm is controlled by the CR bit in the SCCL register. When the replacement algorithm is enabled, (CR=1), the cache stores a copy of the moat recently used memory locations; otherwise, the cache stores a copy of fixed memory locationa. The cache contains 16 blocks of storage (Figure C-1). Each block includes an address tag, which stores the 28 most-significant bits of the physical memory address corresponding to the block, and a bit specifying whether the address tag is valid. Associated with the tsg, the block also stores eight data words and a bit for each word specifying whether or not the word contains a valid copy of the corresponding memory location. The cache is fully associative, so that any memory location can be assigned to any block. In all, the cache provides 256 bytes of data storage. ADDRESS TAG CACHE DATA VALIDITY ASSOCIATIVE M~--I"I MEMORY BITS MEMORY (lax 128) (18x B) (18d8) TAG HIT 32 2B 32 PHYSICAL ADDRESS Figure C-1. DATA WORD HIT ClEhe Org.u.zetion The Purge Cache (PCACHE) instruction invalidates all of the address tags and data words. 2071'()10 On memory references for which the cache is enabled, the cache is examined to determine whether a copy of the addressed location's contents is stored on-chip. If the cache is not enabled, the cache is bypsssed. For instruction fetches (including fetches of operands specified by Immediate, Relative Address, or Relative Index addressing mode), the cache is enabled when CI is set to 1; if memory msnsgement is enabled, the NC bit of the page table entry must also be O. For operand fetches, the cache ia enabled when CD is aet to 1 and the reference is not interlocked (i.e., not DECI, INCI, and TSET instructions); if memory management is enabled, the NC bit of the page table must also be O. For operand stores, the cache is always enabled. When the CPU fetches from the Progrsm Status Area during exception processing or from the translation tables during address translation, the cache is bypassed. When the cache is enabled for a reference, bits 4 to 31 of the physical memory address sre compared to the tags in each cache block. The reference is called either s "tag hit" if one of the vslid tags matches the address, or a "tag miss" if none of the tags matches. When a tag hit occurs, bits 1 to 3 of the address select s data word in the block. If the data word is valid, the reference is called a "word hit"; otherwise, it is cslled a "word miss." For an aligned longword reference, both the high-order and low-or dar words, along with their validity bits, sre sccesssd simultaneously. For instruction fetches, if the reference is s word hit, the instruction word is simply read from the csche. If the reference misses and the csche is enabled for instructions, the instruction word is fetched from memory using a burst trsnssction. The CPU continues the burst transaction, reading successive words as long aa memory acknowledges the burst or until the end of the block. If the cache is bypassed, the instruction is fetched using a single read operation. C-1 Cache Control and Memory Transactions For operand fetches, if the reference is a word hit, the data word is simply read from the cache. Otherwise, if the reference misses or the cache is bypassed, the data word is fetched from memory. Only data fetches that involve more than one transfer use burst transactions, such as those for the following instructions: CPI(R), CPSI(R) , CHECK, EXIT, INDEX, IRET, LDI(R), LDM, LDML, LDPS, OUTI (R), TRTI (R)B, and EPA instructions. Similarly, burst transactions are used for fetching unaligned operands and longword operands on a 16-bit memory data path. When an operand is specified using ReI aU ve Address addressing mode, the instruction transfer status (11DO or 1101) is used except for EPA instructions, which use data transfer status (1010 or 1011). For operand stores and saving Program Status during exception processing, i f the reference is a word hit, the data byte or word is written to the cache; however, the data word is invalidated for an EPA instruction. I f the reference is a tag miss or word miss, the cache is unaffected. The data is written to memory regardless of whether the cache hits or misses. This ensures that the current value for a location is always stored in memory. The CPU uses burst transactions only for stores with Load Multiple and Load Multiple longword registers, Enter, and EPA instructions. Table C-1 summarizes the activity in the cache and external interface described above. The status codes distinguish cacheable and non-cacheable references for use with an external cache. When the CPU fetches from the PSA during exception processing, a burst transaction wi th status 1101 is used. If the CPU stores to the overflow stack during exception processing, a transaction with status 1001 is used. When translation table entries are fetched or stored (to update the M and R bits) during address translation, the CPU uses status 1111. C-2 In addition to the address tags, data, and validity bits, the cache contains a stack that orders the blocks according to how recently they have been used with the most recently used block on the top of the stack. Whenever a reference is a tag hit, the corresponding block moves to the top of the stack, and the blocks that previous to the reference had been more recently used move down the stack. The bottom of the stack identifies the least recently used (LRU) block. If the cache replacement algor1thm is enabled, the contents of the cache change when a cache miss occurs. For a tag miss, the CPU first replaces the tag of the LRU block with the missing block's address, and marks all the data words in the block 1nvalid. For either a tag miss or word miss, the CPU loads the data fetched from memory into the selected cache block and marks the corresponding words valid. When the cache replacement algorithm is disabled, copies of fixed memory locat ions can be locked into the cache for fast, on-chip access. To do this, the cache .1S first enabled for block replacement of data references only (CR=1, CD=1, CI=O). Then the cache is purged and selected blocks are read into the cache. Afterwards, the replacement algorithm is disabled, and the cache is enabled for instruct ion and data references (CR=O, CD=1, CI=1). The number of data words per block, number of blocks, degree of associativity, and replacement algorithm described for the cache design in this appendix are specific to the first implementation of the ZBO,OOO CPU architecture and may differ in future products implementing the same architecture. Dl fferences in these characteristics can impact on system performance, but have no effect on the function of software or the external interface. Cache Control and Memory Transactions Table C-l. Reference Hit/Miss Cache and Bus Activity Cache Activity Data lRU Bus Transaction (status) Instruction fetch Cl°N'C miss no change update update update no yes (1100) don't care no change no change yes (1100) don't care no change no change yes (1101) hit miss no change update update update no yes (1000, 1010, or 1100) don't care no change no change yes (1000, 1010, or 1100) NCoIlOK don't care no change no change yes (1001, 1011, or 1101) IlOK don't care no change no change yes ( 1111) hit update no change update no change yes (1000, 1010, or 1100) yes (1000, 1010, or 1100) update no change update no change yes (1001, 1011, or 1101) yes (1001, 1011, or 1101) update no change update no change yes ( 1111) yes (1111) hit NC Operand fetch Operand Store miss NCoIlOK hit miss IlOK hit miss Key: CD CI IlOK NC CD in SCCl CI in SCCl Interlocked reference required NC in Page Table Entry C-3 D AppendixD. Programmer's Quick Reference Guide LOWER NIBBLE (HEX), LOWER INSTRUCTION BYTE EXTEND INST EXTEND ORB OR ANDB AND XORB XOR A -IR R -IA R -IA R -1M R -1M R -1M A -1M R -1M R -1M R -IR R -1M A -IR A -1M R _fR A -1M ADDL POP MULTL MUll DIVL DIV S•• LDL JP CALL A -IR IR -IR R -IR R -IR R -1M A -IR R -1M A -IA A _1M rlble IR-R PC-IR PC-IR PUSHL SUBL PUSH LDL R -IR IA -IR R -1M IR -1M R -IR R -1M IA -IR IR -1M R -1M R - IR POPL IR _IR R -1M BIT INCB INC DECB DEC EXB EX LDB LD IA _1M IR -1M IR -1M IR -1M R-IR R-lR IR_R IR-R LDA A - SA LoAR LDL A -SA LDRL UNIM LDL SA-A LDRL LDKL LDPS IA SH rlbl' 3 INB IN OUTB OUT rable 3 R-IR R-IR IR-R IR-R R -RA R- SH EXTEND INST EXTEND INST IA -1M LDB LDB LoRB LD SA _A LOR AA -R AA -A AoDB LD A -SA LDR A - AA ADD R -EAM R -EAM SUB EAM A -A ORB OR A _EAM A -EAM AN DB R- EAM CPL PUSHL SUBL A -EAM PUSH LDL POPL AoDL IR -EAM IR -EAM A -EAM IA -EAM R ..... EAM LD RESB RES SETB SET BITB LDB R -EAM R -1M RA ..... R RA R -EAM z 2 A-A IR -1M R- INST 1 IA -1M SET A _A SUBB rable BITB SETB IR -1M A-A R -EAM A -1M A -A RES IR -1M BA -R R-IR IR -1M RESB R -IR A -1M LoRB A -1M R -1M R -IR R -1M A-A LD R _IR R -1M R -RA ~ S•• SUB A -lA R -- BA () SH Table 1 SUBB A -IR LDB w ~ C CP ADD R -IR CPL . A CPB ADDB A -IA AND XORB A -EAM R _EAM POP IR - EAM BIT XOR R- EAM So. CPB CP R ..... EAM R -EAM MULTL MULT DIVL olV R ..... EAM R -EAM R -EAM R -EAM INCB INC DECB DEC R -EAM EAM -1M EAM -1M EAM -1M EAM -1M EAM -1M EAM -1M EAM -1M EAM -1M EAM -1M EAM -1M S•• rabl, Tabl, 1 1 S•• Table 2 LDL JP CALL EAM-A PC-EAM PC-EAM EXB EX LDB LD R-EAM R-EAM EAM-R EAM-R EI DI S•• Table 7 TRAP SC EXTEND INST. EXTEND INST. "a: Iii LDB ~ . " e .. .... ;i w ~ !! z -ex So. LDB -A LD LDA R -EAM ex -A LDL CVT CVTU OR A-A ANDB A-A AND A -A XORB A -A POPL ADDL A-A POP R -IR MULTL A -A LDPS So. S. Table 8 Table 7 XOR A-A CPB A-A CP A-A SH Tabl. 1 S•• Table 1 MULT A-A D'VL A-A DIV R-R S•• rabl. 2 LDCTLL RET LoCTLL CTLRL - A PC-(SP) R - CTLRL DECB DEC R -1M R-IM EXB A-A EX A-A TCCB A TCC A RRDB A LDK RLDB A UNIM R-IM ex ADDB A-A ADD A-A SUBB A-A SUB A-A ORB A-A CPL R-A PUSHL SUIL A-A PUSH IA -A IR -R LDL R-A R _IR LDB A -A LD A-A RESB RES SETB SET BITB BIT INCB INC R -1M R -1M R -1M R -1M R -1M R -1M R _1M R -1M DAB EXTS EXTSB EXTSL R S" rabla So. ADCB R-A ADC R-A SBCB A-A SBC A -A S•• rable SH So. rable Tabl. 6 Table 6 S•• Table 6 R R -ex LDA ax -R -ex LDL rable 7 R a: w PS - EAM a: w " A B A • • 5 LDB C R -1M D PC _RA CALR JR PC - RA DJNZ DBJNZ PC -RA Notes: 1) Opcodes marked UNIM are unimplemented and must not be used. Attempting to execute an unimplemented opcode causes an Ummplemented Instruction trap. 2) The execul!on of an extended Instruction results in an Extended Instruction trap if the EPA bit in the FCW is 0; otherwise, the CPU sends the instruction to an EPU for execution. Opcode Hap D-1 Programmer'a Quick Reference Guide DC OD 4C 4D 8C 8D lC 5C BC COMB IR COM IR COMB COM EAM COMB R COM R COML COML IR EAM COML R LDCTlB R-FlGS SETFLG lDM LDM UNIM R-IR R-EAM EAM CPB CP CPB CP IR-IM lA-1M EAM-IM EAM-IM R-IM NEGB IR UNIM NEG IR NEGB EAM CPL UNIM lA-1M TESTB IR w ~ ~ g 5 EAM NEGB R NEG R NEGl IR NEGl 'AM NEGL R CPl UNIM RESFlG UNIM UNIM UNIM EAM TESTB R TEST R ClRL IR ClRL 'AM CLRL R UNIM COMFlG LDML LDMl UNIM IM-lR 1M-1M IM-EAM EAM-IM TESTB EAM TEST lDB LD lDB lD IR-IM IR-IM EAM-IM EAM-IM 8 TSErB IR TSET IR TSETB TSEr EAM EAM TSETB R TSET R 0 t:> INSRT INSRT IR-R EAM-A INSRT R-R UNIM UNIM UNIM TESTL IR TEsn 'AM TESTL R LDM LDM UNIM IA-R EAM-R a: UNIM lDL UNIM 7 !.i 8 ~ lDl UNIM NOP EAM-IA IR-IM ~ CLR IR ClRB EAM ClR EAM CLRB R CLR R UNIM PUSH lA-1M UNIM UNIM lDCTLB FlGS-R UNIM z A CHKB CHK CHKB R-IM A-IR A-1M R-IA R-EAM UNIM CHKL UNIM R-IM B C CHK A-EAM UNIM CHKl UNIM UNIM TESTA IR TESTAB TESTA EAM EAM TESTAB R TESTA R UNIM UNIM UNIM UNIM UNIM UNIM D UNIM R-IM R-IA UNIM INDEXL A-1M R-IR Table 1. D-2 INDEX UNIM UNIM UNIM UNIM A-EAM UNIM INDEXl A-EAM Upper Instruction Byte 8 e .. ~ Z a: w A UNIM A-EAM TESfAB IR INDEX ~ sf w ~ A-IR UNIM ~ a: w ClRB IR !!! fli ~ w ~ .. Z ~ e TEST IR NEG EXTR EXTR A-IA A-EAM EXTR R-R EXTRU EXTRU B R-IR R-EAM TESTAL IR TESTAL C D UNIM UNIM UNIM UNIM UNIM UNIM EXTRU R-R EAM TESTAL R LDML lDML UNIM lA-1M EAM-IM Table 2. Upper lnal:ructi... Byte Programmar'a Quick Reference Guide INIB 31 INI IR-IA IR-IR SA INIRI INIR IR-IA IA-II~ UNIM UNIM OUTII OUTI IA-IA IR-IA OTIRI DTIR IA_IR IA-IA UNIM UNIM INI IN A-DA R-DA UNIM 12 13 RLB RL (1 bit) (I bill A-1M A-1M I. TRII IA CPII II CPI 18 CPlL IA-IA lA-IF! IA-fR IA-IA UNIM SLLI SLL A-1M A-1M SRLI SRL R-IM A-1M RLB UNIM (2bl\sJ R_IM SDLI SDL A-1M A-1M RRB RR (1 bit) tiM) A-1M A-1M UNIM LDI IA-IR IA-IA LDIR LDIRL LDIL IA-IR IR-IA IR-IR CPBII CPSI CPBIL IR_IR IA-IA IR-IA UNIM UNIM UNIM UNIM TRIRI CPIRI CPIR CPIRL IA-IA R-IA A-IA R-IR UNIM UNIM UNIM UNIM CPSIRI CPBIR CPSIRL tA-IR IR-IA IR-IA UNIM UNIM UNIM CPDI CPD CPDL R-IA A-IR A_IA TRTII IA-IA RL (2bl\sj R-IM LDII IA-IA LDIRI SLLL R-IM BRLL OUTI OUT DA-A DA-R UNIM UNIM A-1M E z RRI RR ~,. (2 bits) (2bIIS) A-1M A-1M t; ! UNIM IND IR-IA IA-IR INDRI INDR IA-IA IA-fR UNIM UNIM II: SDLL R-IM ~ 15e ~ Ii .. II: OUTDI A OUTD IR-IA IR-IR OTDRI OTDR IR-IA IA-IA UNIM UNIM ~ TRTIRI ~ IA-IA Ii,. II: iii INDI E A I RLCB RLC (1 bill (\ bit) A-1M R-IM SLAI SLA A-1M A-1M SRAI 8HA A-1M A-1M RLCI RLC (21)119) A-1M (2biIS) A-1M SDAI SDA R-R A-R i UNIM .. I II: t; ! .. II: II: ~ 15 C. TRDI IA-IR •~ UNIM Ii iii ~ E TRTDI A I' IR-IA ~ 15e ... Ii .. • LDDI .. Table J. Upper Inatructioo Byte RRCI RRC (1 bill (1 bill R-IM R-IM UNIM SLAL C D IA-IA IA-IA IA-IA ~ CPSD CPSDL IA-IA IR-fR IA-IR UNIM UNIM UNIM CPDRI CPDR CPDRL A-fR R-IR R-IF~ UNIM UNIM UNIM CPBDRI CPBDR CPSDRL IA-IA IR-IA IA-IR UNIM UNIM UNIM A C UNIM D R-IM D IR-IA LDDRL CPBDI UNIM IR-IA LDDL IA-IA LDDR 0: TRDRI C LDD IA-IA LDDRI BRAL R-IM RRCB RRC (2 bits) R-IM (2 bits) R-IM UNIM SDAL TRTDRI IR-IA E UNIM R-R Table 4. Upper Instruction Byte Table 5. Upper Inatructioo Byte Table 6. ~ Inatructioo Byte 0-3 Programmer's Quick Reference Guide 78 70 IRET UNIM UNIM HALT UNIM BREAK· POINT LDCTL LONG' Compact Direct Address Index ESC UNIM R-Few Segmented or Linear Direct Address Index Base Address Base Index Relative Address Relative Index ESC UNSIGN' UNIM Table 9. UNIM ESC INTERLOCK' LOCTL UNIM RPSAPSEG ..~ ENTER z LDen UNIM RPSAPQFF ..~ 0 EXIT t; ::> II: Iii LONI !!; LOCTL UNIM z 0 ;:: R-NSPSEG CJ ~ on Locn UNIM 0- R-NSPOFF !!; ~ g PCACHE w PTLBESI PTLBESO PTLBENI PTLSEND ;; ~ II: W LDND II: W ill ;0 g UNIM UNIM >i w ;; z II: W ;0 g ~ UNIM ill PTLS A PTLBN UNIM z II: W ;0 g UNIM LDCTL C FCW_R A LOPSI LDPSD LDPNI LDPND D UNIM UNIM LDCTL UNIM PSAPSEG C -R LDCTL UNIM PSAPOFF D -R UNIM LDCTL N8PSEG-R LOCTL UN 1M NSPQFF-R Table 7. Upper Instruction Byte D-4 Table 8. LOMer Instruction Byte Extended Addressing Modes E AppendixE. Timing Formulae for Performance Evaluation INTROOUCTION The ZBO,OOO CPU, unlike the ZBOOO and other 16-bit microprocessors, integrates a highly pipelined design, cache memory, and memory management into a single component. With the ear lier microprocessors it is relatively simple to calculate exact performance measurements for a benchmark program or program workload mixture, as follows. Each instruction (i) in the architecture is characterized by its execution cycle count (ni) and number of memory references (ri). From the program workload, the frequency of execution for each instruction (fi) can be determined. If W is the number of wait states for the memory system, then the average number of cycles to process an instruction (Tr) can be determined from the following formula. TI =~fi(ni + qW) i through the interface to the Z-BUS. The Z-BUS is a time-multiplexed, address/data bus that connects the components of a microprocessor system. • The cache stores copies of instruction and data memory locations. Instructions are read from the cache on the instruction bus. Data is read from or written to the cache on the memory bus. The cache also includes a copy of the physical Program Counter, so that the logical addresses of instructions are translated only for branches and when incrementing the Program Counter across a page boundary. • The Translation lookaside Buffer (TlB) translates logical addresses calculated by the address arithmetic unit to physical addresses used to access the cache. • The address arithmetic unit performs all address calculations. This unit has a path to the register file for reading base and index registers and another path to the instruction bus for reading displacements and direct addresses. The result of the address calculation is transmitted to the TlB. • The register file contains the sixteen generalpurpose longword registers, Program Status registers, special-purpose control registers, and several registers used to store values temporarily during instruction execution. The register file has one path to the address arithmetic unit and two paths to the execution arithmetic and logic unit. • The execution arithmetic and logic unit calculates the results of instruction execution, such as add, exclusive-or, and simple load. This unit has two paths to the register file on which two operands can be read simultaneously or one can be written. One of the paths to the register file is multiplexed with a path from the memory bus. • The instruction decoding and control unit decodes instructions and controls the operation of the other functional units. This unit has a path from the instruction bus and two And, if Tc is the cycle time of the processor, then the processor's performance (that is, the processor's rate of executing instructions) is given by the formula below. performance = (TrTc)-1 Calculating the performance of the ZBO,OOO processor involves a more complex formulation that accounts for dependencies between instructions in the pipeline and misses for the cache and Translation lookaside Buffer (TlB). This appendix contains the timing formulae used to analyze the performance of the ZBO,OOO CPU, and also a sufficiently detailed description of the processor's implementation to calculate timing parameters for a program workload. Theory of Operation Figure E-1 shows a block diagram of the ZBO,OOO CPU's internal organization, including the following major functional units and data paths: • The external interface logic controls transactions on the bus. Addresses and data from the internal memory bus are transmitted E-1 Timing Formulae for Performance Evaluation programmable logic arrays for separate microcoded control of the two arithmetic units. This unit also controls exception handling and TlB loading. All of the functional units and dats paths listed above are 32 bits wide. Z·BUS --------, r-----MEMORY BUS CACHE DATA CACHE ADDRESS TAGS INSTRUCTION REGISTER TRANSLATION LOOKASIDE BUFFER INSTRUCTION DECODING AND CONTROL UNIT REGISTER FILE EXECUTION ARITHMETIC AND LOGIC UNIT L ________________ Figure E-1. INSTRUCTION FETCH PROGRAM COUNTER INCREMENT CACHE TAG COMPARE INSTRUCTION DECODING - CACHE INSTRUCTION READ MICROWORD GENERATION Functional Block Diegra. ADDRESS CALCULATIONS - ADDRESS ARITHMETIC CALCULATION TLBTAG COMPARE TLB DATA READ Figure E-2. E-2 ~ - OPERAND FETCH CACHE TAG COMPARE CACHE DATA READ Instruction Pipeline - EXECUTION REGISTER READ ALU CALCULATION REGISTER WRllE OPERAND STORE - FLAG SETTING CACHE DATA WRITE MEMORY WRITE Timing Formulae for Performance Evaluation The operation of the CPU is highly pipe lined so that several instructions are simultaneously in different stages of execution. Thus, the functional units effectively operate in parallel with one instruction being fetched while an address is calculated for another instruction and results are stored for a third instruction. Figure E-2 shows the six-stage, synchronous pipeline. Instructions flow through each stage of the pipeline in sequence. The various pipeline stages can be working simultaneously on separate instructions or on separate portions of a single complex instruction. Each pipeline stage operates in one processor cycle, which is composed of two clock cycles, called \Il1 and \Il2. Thus, a processor cycle is 200 ns with a 10 MHz clock or 80 ns with a 25 MHz clock. The instruction-fetch stage increments the Program Counter and initiates instructions fetched from the cache. The instruction-decoding stage receives and decodes instructions to set up control of the address-calculation stage. The address-calculation stage can generally calculate a memory address in one processor cycle, except for Base Index, Relative, and Relative Index addressing modes, which require multiple cycles. After the logical effective address has the corresponding physical been calculated, address is provided by the TLB. The operand-fetch stage fetches the data from the cache and latches it into a holding register. The execution stage performs data manipulations. Byte, word, and longword results are generally calculated in one processor cycle, but certain instructions, such as multiply and block-move operations, require multiple cycles. During the execution stage, results are stored to registers. Results are stored to the cache and external memory during the operand-store stage. The flags are also set during the operand-store stage. The cache can handle two references during a processor cycle. Instruction fetches use the \Il2, clock cycle for tag comparison and 9'>1 for data access. Either an operand fetch or store can use \Il1 for tag comparison and \Il2 for data access. The pipeline allows single instructions, like register-to-register load and memory-to-register add, to execute at a rate of one per processor cycle. Thus, the peak performance of the CPU is 12.5 million instructions per second (MIPS) with a 25 MHz clock. In practice, the actual performance is reduced to approximately one-third of the peak because of delays due to the execution of multiple-cycle instructions, interference between instructions in the pipeline, and main memory accesses for cache and TLB misses. In order to calculate the processor's performance it is helpful to separate the average processing time for an instruction into four components: execution delays, pipeline delays, addressing delays, and memory delays. The following sections describe the various delay components. Execution Ti_ The first component of instruction processing time is the basic execution time: the time reqUired to execute an instruction assuming that there is no interference from other instructions in the pipeline and that all memory references hit in the cache and TLB. An instruction's execution time is determined by its operation, data type, and addressing mode. For most instructions, the execution delay can be calculated by adding the number of cycles from Table E-2 corresponding to the operation and data type to the number of cycles from Table E-1 corresponding to the addressing mode. Use either the source or destination addressing mode, as listed with the instruction's format in section 6.5. For the remaining instructions, Table E-2 gives the execution delays for specific combinations of operations, data types, and addressing modes. The following example shows how to use the tables. An instruction that loads a longword from a register to a register (e.g., LDL RR4, RR2), has an execution time of 1 processor cycle: 1 for the operation and 0 for the addressing mode. An instruction that adds a longword immediate value to a register (e.g., ADDL RRO, #100), has an execution delay of 2 processor cycles: 1 for the operation and 1 for the addressing mode. An instruction that tests a bit of a byte in memory specified by IR addressing mode (e.g., BITB ®RR2, #1), has an execution delay of 3 processor cycles: the delay is listed in Table E-2 for the specific operation and addressing mode. Pipeline Delays Pipeline delays result from interference between instructions at different stages of the pipeline. Pipeline delays occur when instructions contend for the use of a bus or functional unit, and one instruction must be delayed. There are two E-3 Timing Formulae for Performance Evaluation sources of pipeline delays: register inter locks and cache reference interlocks. the interlocked address calculation, then the pipeline delay is 2 processor cycles, otherwise the inter lock causes a pipeline delay of 1 processor cycle. Register inter locks are detected for the use of longword registers. Thus, with the CPU's register file organization (see Figure 2-2), if a byte or word within a longword register is modi fied, then a subsequent address calculation can be interlocked by using the longword register itsel f or either of the word registers it contains. A register inter lock occurs when an instruction modifies a register that is required for an address calculation by either of the two subsequent instructions. In addition, the following instructions, which may modify more than one register, cause an interlock for any registers used in subsequent address calculations: CPD(BL), CPI(BL) , CPSD(BL), CPSI(BL), DIVL, DIVUL, EXIT, EXTSL, LDD(BL), LDI(BL) , LDM registers from memory, LDML registers from memory, MULTL, MULTUL, and Load CPU from EPU. When the instruction that modifies the register is followed immediately by For example, the following instruction sequences cause register interlock delays when executed (in linear mode). I NCL RR2, 114 LDB RHO, ®RR2 //register interlock delay// //for RR2 is 2 processor cycles// MULT RR24, #1000 LDL RRO, RR4 ADDL RRO, RR12 (RR24)(16) //register interlock delay// //for RR24// //is 1 processor cycle// Table E-1. Execution TiNeS for General Addressing HOdes Addressing HOde R 1M Address Representation COIIIpact SegIIIBIlted or Linear 0 0 0 0 1 1 IR 0 0 DA 0 0 for X 0 0 for 1 extension word 1 for 2 or 3 extension words (byte or word) (longword) extension word for 2 or 3 extension words 0 0 for BX 2 for extension word 2 for 3 extension words RA RX E-4 extension word for 3 extension words BA Not Available for or 3 extension words 2 for or 3 extension words Timing Formulae for Performance Evaluation Table E-2. Execution U., for Instruction Operations Addressing Execution Data Type Modes n., B,W R 1 L R 2 ADD B,W,L See Table E-1 1 AND B,W See Table E-1 1 L See Table E-1 2 R,EAM--See Table E-1 2 IR 3 R,EAM--See Table E-1 3 IR 4 Operation ADC Bit (Static) Notes B,W L Bit (Dynamic) B,W R 4 L R 5 - BRKPT CALL See Table E-1 5 CALR RA 4 CHK B,W,L See Table E-1 B CLR B,W,L See Table E-1 1 R 1 IR,EAM--See Table E-1 2 COM See Table E-5. Assumes trap not taken; E-5 if trap taken. see table B,W,L COMFLG 1 CP (Register) B,W,L See Table E-1 1 CP (Immediate) B,W See Table E-1 2 L See Table E-1 3 CPD B,W,L IR 7 CPDR B,W,L IR 5+4n CPI B,W,L IR 7 CPIR B,W,L IR 5+4n n is number of iterations. n is number of iterations. E-5 Timing Formulae for Performance Evaluation Table E-2. Execution fi_ for Instruction Addressing Execution fi_ Data Type Modes CPSD B,W,L IR 8 CPSDR 8,W,L IR 4+5n CPSI B,W,L IR 8 CPSIR B,W,L IR 4+5n CVT (register) All See Table E-1 6 CVT (memory) All See Table E-1 6 CVTU (register) All See Table E-1 6 CVTU (memory) All See Table E-1 6 R 1 IR,EAM--See Table E-1 3 R 2 Operation DEC ~erations-Continued Notes n is number of iterations. n is number of iterations. B,W L DEcr B,W IR,EAM-See Table E-1 4 See Table E-1 4 3 DI 5 25 Case 1 Case 2 Case 3 or 4 See Table E-1 4 6 38 Case 1 Case 2 Case 3 or 4 See Table E-1 6 8 26 Case 1 Case 2 Case 3 or 4 DIV W L DIVU See Table E-1 W L 7 5 See Table E-1 E-6 Cache bypassed for operand fetch, treat like cache miss. 7 39 Case 1 Case 2 Case 3 Timing Formulae for Performance Evaluation Table E-2. Execution n_ for InstrtEtion Addressing Operation Data Type Modes B,W R DJNZ L Notes 2 Not taken 5 Taken 3 Not taken 6 Taken 15+4n B,W See Table E-1 3 L See Table E-1 4 10+n EXIT EXTR R I R, EAM--See Table E-1 R EXTRU IR,EAM--See Table E-1 n is the number of registers specified in enter mask. n is the number of the registers specified in exit mask. 6 11 6 11 B R 3 W,L R 2 1 HALT IN n_ 3 ENTER EXTS Execution R EI EX ~erations...{;ontinued B,W IR 2 DA 1 IR 3 DA 2 Add access time for input port. L INC B,W R 1 IR,EAM--See Table E-1 3 R 2 IR,EAM--See Table E-1 4 See Table E-1 4 L INCI B,W Cache bypassed for operand fetch, treat like cache miss. E-7 Timing Formulae for Performance Evaluation Tabla E-2. Operation IND INDEX INDR INI INIR Execution Ti_ for Instruction Operatlons-Contlnued Execution Data Type Addressing Modes B,W IR 11 L IR 12 W See Table E-1 19 L See Table E-1 27 B,W IR 3+8n L IR 4+8n B,W IR 11 L IR 12 B,W IR 3+8n L IR 4+Bn INSRT TiE R 17 IR,EAM--See Table E-1 1B Notes Assumes no I/O wait states--I/O wsit states must be added. Assumes trap not taken; see Table E-5 if trap is taken. n is number of iterations. Assumes no I/O wait states--I/O wait states must be added for each iteration. Assumes no I/O wait states--I/O wait states must be added. n is number of iterations. Assumes no I/O wait states--I/O wait states must be added for each iteration. 12 IRET JP 1 Not taken 4 Taken 1 Not taken 4 Taken See Table E-1 JR RA LD (register) B,W,L See Table E-1 1 LD (memory) B,W,L See Table E-1 1 LD (immediate) B,W,L See Table E-1 3 See Table E-1 1 LDA LDAR 1 LDCTL (into Control register) 7 LDCTL (from Control register) 1 E-B 3 6 FCW NSP PSAP Timing Formulae for Performance Evaluation Table E-2. Operation Data Type Execution Time for Instruction Operations-Continued Addressing Execution Modes Ti_ LOCTLB 1 LOCTLL (into Control register) 5 11 7 LOCTLL (from Control register) 1 LOO B,W,L lR 9 LOOR B,W,L IR 4+5n LOl B,W,L IR 9 LOIR B,W,L IR 4+5n LOK LOM (registers from memory) W LOM (memory from registers) W LOML (registers from memory) L LOML (memory from registers) L LON Notes asp, PSAP NSP SITTIO, SOTTO, NITTO, NOT TO, SCCL, NSP n is number of iterations. n is number of iterations. fl 1 See Table E-1 6+n/2 n is even number of registers. 6+(n+1)/2 n is odd number of registers. 2n n is even number of registers. See note 2. 2 + 2n n is odd number of registers. See Table E-1 1M 9+n lR,EAM--See Table E-1 7+n n is number of registers specified in mask operand. See Table E-1 3+4n n is number of registers specified in mask operand. See note 2. See Table E-1 2 LOP See Table E-1 2 LOPS See Table E-1 11 B,W,L LOR B,W,L 2 MUll W See Table E-1 15 L See Table E-1 24 E-9 Timing Formulae for Performance Evaluation Table E-2. Operation MULTU NEG Execution n_ for Instruction Addressing Modes Execution W See Table E-1 16 L See Table E-1 25 B,W,L R 1 IR,EAM--See Table E-1 2 Data Type NOP OR OTDR OTIR Ii- ~erations-Continued Notes 1 B,W See Table E-1 1 L See Table E-1 2 B,W IR 6 L IR 7 B,W, IR 6 L IR 7 IR 2 DA 1 IR 3 DA 2 B,W IR 2+4n L IR 3+4n B,W IR 2+4n L IR 3+4n OUT B,W L OUTD OUT! 6 PCACHE POP B,W,L R 2 IR,EAM--See Table E-1 3 PTLB 6 PTLBE 6 PTLBN 6 E-10 n is number of iterations. n is number of iterations. Timing Formulae for Performance Evaluation Table E-2. Execution Ti.e for Instruction Operations-Continued Addressing Operation Data Type PUSH Modes Execution Ti.e R 2 IR,EAM--See Table E-1 3 R 2 Notes B,W,L RES (Static) B,W L RES (Dynamic) IR 4 EAM--See Table E-1 3 R 3 IR 5 EAM--See Table E-1 4 B,W R 4 L R 5 RESFLG 1 RET 6 Not taken 7 Taken RL RLC B,W R 2+n L R 3+n B,W R 2+n L R 3+n R 6 B,W R 2+n L R 3+n B,W R 2+n L R 3+n R 6 B,W R 1 L R 2 RLDB RR RRC RRDB SBC SC - n = number of bits rotated. n = number of bits rotated. n = number of bits rotated. n = number of bits rotated. See Table E-5. E-11 Timing Formulae for Performance Evaluation Table E-2. Operation SDA SDL SET (Static) Addressing Execution Data Type Modes U_ Notes B,W,L R 8 Right shift 9 Left shift B,W,L R 4 B,W R 1 L SET (Dynamic) Execution Time for Instruction Operations-Continued IR 3 EAM--See Table E-1 2 R 2 IR 4 EAM--See Table E-1 3 B,W R 3 L R 3 SETFLG 2 SLA B,W,L R 9 SLL B,W,L R 4 SRA B,W,L R 8 SRL B,W,L R 4 SUB B,W,L See Table E-1 1 Tee B,W R 1 L R 2 TEST B,W,L See Table E-1 1 TESTA B,W,L See Table E-1 1 4 TRAP Assumes trap not taken; trap taken. see Table E-5 if TRDB B IR 11 TRDRB B IR 4+7n TRIB B IR 11 E-12 n is number of iterations. Timing Formulae for Performance Evaluation Table E-2. Execution Ti_ for Instruction ~rations-Continued Addressing Hodes Execution Data Type Ti_ Notes TRIRB B IR 4+7n n is number of iterations. TRTDB B IR 11 TRTDRB B IR 4+7n TRUB B IR 11 TRURB B IR 4+7n B,W See Table E-1 2 L See Table E-1 3 B,W See Table E-1 1 L See Table E-1 2 B,W See Table E-1 4 Bus-timing scale factor is 2. Cache bypassed for operand fetch, treat like cache miss. 7 Bus-timing scale factor is 4. Cache bypassed for operand fetch, treat like cache miss. 4 Bus-timing scale factor is 2. Add time to store operand, see memory delays section. 7 Bus-timing scale factor is 4. Add time to store operand, see memory delays section. 9+(n/2) Bus-timing scale factor is 2. n is even number of words transferred. 9+(n+1)/2 Bus-timing scale factor is 2. n is odd number of words transferred. 15+n Bus-timing scale factor is 4. n is even number of words transferred. 16+n Bus-timing scale factor is 4. n is odd number of words transferred. Operation TSET XOR Load EPU from Memory1 Load Memory from EPU1 Losd CPU from EPU1 B,W W,L See Table E-1 R n is number of iterations. n is number of iterations. Cache bypassed for operand fetch, treat like cache miss. E-13 Timing Formulae for Performance Evaluation Table £-2. Operation Load EPU from CPU1 Execution TDe for Instruction ~rations-Continued Addressing Execution Data Type Hodes TiE W,L R 8+(n/2) Bus-timing scale factor is 2. n is even number of words transferred. B+(n+1/2) Bus-timing scale factor is 2. n is odd number of words transferred. 12+n Bus-timing scale factor is 4. n is even number of words transferred. 13+n Bus-timing scale factor is 4. n is odd number of words transferred. Load FCW from EPU1 Load EPU from FCW1 Internal EPU operation 1 Notes 10 Bus-timing scale factor is 2. 17 Bus-timing scale factor is 4. 9 Bus-timing scale factor is 2. 14 Bus-timing scale factor is 4. 1 Bus-timing scale factor is 2. 2 Bus-timing scale factor is 4. Note 1: The execution times reported for EPA instructions assume that the EPU does not force the CPU to wait by asserting EPUBSY. Refer to the Z8070 APU Technical Manual (Zilog document number 03-B226-01) for more information about execution delays for particular EPA instructions and consideration of instruction overlap between the CPU and EPU. Note 2: Execution time for this instruction is less if burst transfers are supported for storing data into memory. See memory delays section. A cache reference inter lock occurs when an instruction modifies a memory location and either of the following two instructions fetches an operand from memory (including immediate mode operands other thsn those speci fied by special, compact encodings, like the source operands for BIT, DEC, and LDK instructions). This inter lock is caused by contention for both the cache and memory bus. When the instruction that modifies memory is followed immedistely by an instruction that fetches an operand, the pipeline delsy is 2 processor cycles; otherwise, the pipeline delay is 1 processor cycle. E-14 For example, the following instruction sequences cause cache reference interlocks when executed (in linear mode). LDL RR12(10), RRO ADDL RR2, OOR20 //cache reference interlock// //delay is 2 processor cycles// LDL RR12(10), RRO ADDL RR2, RR4 ADDL RR2, @RR20 //cache reference interlock// //delay is 1 processor cycle// Timing formulae for Performance Evaluation Addressing Delays Addressing delays can occur when instructions or operands are located across longword or page bounderies. Unlike memory delays due to cache and TLB misses, which are described in the next section, addressing delays can be calculated from knowledge of the CPU's operation alone, without considering the memory system's latency and bandwidth. An addressing delay of 1 processor cycle occurs when an operand that crosses a longword boundary is fetched. That is, when a longword is fetched from an address for which the two least significant bits differ from 00 or a word is fetched from an address for which the two least significant bits are 11. This delay arises because the CPU must make two memory references on its 32-bit memory bus. An addressing delay of 1 cycle also occurs when the CPU branches to a two-word instruction that is located at an odd-word address. Another addressing delay of 3 cycles occurs when the PC is incremented across a page boundary during sequential instruction processing. The former delay arises from a gap in filling the instruction buffer, while the latter delay is caused by the need to translate the new page address in the PC. Memory Delays Memory delays occur when the CPU must wait to access external memory to service a cache or TLB miss or to store an operand. The duration of such delays depends on the memory system's data path width (16 or 32 bits), its access time, and its support for burst transfers. Thus, a microprocessor system designer can trade cost for performance by specifying these memory parameters as well as the CPU's clock speed and the bus-timing scale factor. In the description that follows, the times for single memory-read and -write transactions are represented by TRand TW processor cycles, respectively; the bus-timing scale factor (2 or 4) is represented by S. Burst transfers are assumed to take the same times (T Rand TW) for the initial transfer and 1 bus clock cycle for each subsequent transfer. The memory delay for both instruction and operand cache fetch misses is TR• for instruction cache misses, burst transactions are used as follows: The CPU reads the missing word or longword (depending on the memory's data path width) and requests the words or longwords that follow in the 16-byte cache block by signaling a burst transfer. The burst transfer continues until either the end of the 16-byte block is reached or the memory system indicates that it cannot support further transfers. for operand fetch cache misses, burst transactions are used when more than one transfer is anticipated within a 16-byte block. Specifically, burst transfers are used to fetch operands for the following instructions: CPI(R), CPSI(R), CHECK, EXIT (registers only), INDEX, IRET, LDI(R), LDM, LDML, LDPS, OUTI(R), TRTI(R)B, and EPA instructions. Burst transfers are also used to fetch longword and unaligned word operands from a 16-bit wide memory, plus unaligned word and longword operands that cross an aligned longword boundary for a 32-bit wide memory. The CPU issues bus transactions until the entire operand has been fetched. I f more than one operand word (for 16-bit memory) or longword (for 32-bit memory) remains to be transferred, the CPU transfers the first word or longword and attempts to burst transfer the remaining words or longwords until either all transfers are complete, the end of a 16-byte block is reached, or the memory system indicates that it cannot support further burst transfers. for example, assume that the CPU requires seven longwords from memory location 8 to execute an LDML instruction, that all the longwords are missing from the cache, and that the memory system is 32 bits and supports burst transfers of 16-byte blocks. The CPU performs three bus transactions to fetch the seven longwords. The first transaction is a burst transfer of the longwords at locations 8 and 12, the second transaction is a burst transfer of the four longwords beginning at location 16, and the final transaction is a single transfer of the longword at location 32. for a burst transaction with a bus-timing scale factor of 2, no memory delay in addition to TR is incurred for burst transactions except when other transactions are pending, as described below. With a bus-timing scale factor of 4, an additional memory delay of 1 processor cycle is incurred for each burst transfer. The memory delay for a TLB miss depends on the time to fetch an aligned longword from memory and the number of translation table levels. The formulae in Table E-3 give the number of processor cycle delays for a TLB miss, where N represents the number of table levels. E-15 Timing Formulae for Performance Evaluation Table E-3. Me.ary Syst_ 16-bit, no burst 16-bit, burst 32-bit TLB Hiss Delay TlB Hiss Delay 11 + (5 + 2TR+ 5/2) X N 11 + (5 + TR + 5/2) X N 11 + (5 + TR) X N For example, assume that the time for a single memory read transaction is 2 processor cycles, the memory data path is 32 bits, and 2 levels of translation tables are used. Then the memory delay for a TLB miss is 25 processor cycles (25 = 11 + Two or three consecutive memory-write transactions are required for an instruction that stores an unaligned word or longword and also for an instruction that stores an aligned longword to a 16-bit memory. The memory delay in processor cycles is shown for these cases in Table E-4. (5 + 2) X 2). Besides cache and TLB misses, the CPU can also experience memory delays if one bus transaction is held pending while another is performed. In such cases of bus contention, the CPU completes the first transaction, then after 1 bus cycle delay, initiates the pending transaction. Thus, additional cycles of delay occur if the servicing of a cache miss must wait for the completion of a previous burst memory-read transaction or a (The servicing of a memory-write transaction. cache miss may also be delayed by an EPA instruction transfer for a previous EPU internal operation instruction.) Similar 1y, additional delay is incurred when the storing of an operand must wait for the completion of a previous burst-memory read transaction or a memory-write transaction. In general, the delays due to bus contention either between read transactions or between read and write transactions can be ignored in calculating the CPU's performance; these delays have in large part been counted by the cache misses and Delays cache interlocks previously described. caused by bus contention between write transactions, though, must be considered, as explained below. Because the CPU buffers the data for only one write transaction at a time, when an instruction that stores an operand to memory is followed shortly by another instruction that stores to memory, the second instruction is delayed. If the two store instructions are separated by 6. instructions, where the value of 6. for consecutive instructions is 1, then the CPU is de layed by Max(O, TW + 5/2 - 6.) processor cycles. For instance, assume that the time for a single memorywrite transaction is 3 processor cycles and the bus-timing scale factor is 2. Then the CPU is E-16 delayed by 3 processor cycles when the second store instruction immediately follows the first or by 2 processor cycles if there is one non-store instruction intervening between the two store instructions. If the store instructions are separated by more than three instructions that do not store, then there is no delay. Certain instructions, like LDIR and LDM, store more than one operand to memory. The memory delays for such instructions are included in their execution times listed in Table E-2 based on the following assumptions: the operands are aligned, the memory is 32 bits wide, and TW + 5/2 is four processor cycles. If TW + 5/2 exceeds four processor cycles, then the excess must be counted as a memory delay for every operand stored by the instruction. Similarly, if operands are unaligned or the memory is 16 bits wide, then an additional memory delay must be counted for every stored operand, as shown in Table E-4. For example, if an LDIR instruction stores 3 aligned longwords to a 16-bit memory, then the instrucion is delayed by TW + 5/2 processor cycles for each of three operands, or 3TW + 35/2 processor cycles. The CPU attempts to use burst-write transactions to store operands for ENTER (registers only), LDM, LDML, and EPA instructions. In storing an operand for these instructions, if the starting address is not aligned to the size of the memory's width (either 16 or 32 bits), the CPU issues one or two single-wr He transactions to store the operand's initial bytes until an aligned address is reached. Then, while one or more operand words (for 16-bit memory) or longwords (for 32-bit memory) remain to be transferred, the CPU transfers the first word or longword and attempts to burst transfer the remaining words or longwords until all transfers are complete, the number of rema1n1ng bytes is smaller than the memory's width, the end of a 16-byte block is reached, or the memory indicates that it cannot support further burst transfera. If any bytes remain to be stored, the CPU issues one or two single-write transactions to store the final bytes. Timing Formulae for Performance Evaluation Table E-'I. Me_ry Delays for Storing Word and lortgIIOrd Operanda Address Bits A,Ao Bus Width Data Type (bits) MeIIIory Delay (Processor Cycles) 16 0 32 0 16 Tw + 5/2 32 0 16 Tw + 5/2 32 Tw + 5/2 16 2Tw + 5 32 2Tw + 5 16 0 32 0 16 Tw + 5/2 32 Tw + 5/2 16 Tw + 5/2 32 Tw + 5/2 16 2Tw + 5 32 2Tw + 5 W 00 L W 01 L W 10 L W 11 L For example, assume the CPU is storing seven longwords to memory location 13 to execute an ENTER instruction and that the memory system is 32 bits and supports burst-write transfers of 16-byte blocks. Then the CPU performs five transactions to store the seven longwords: 1. 2. 3. 4. 5. Store a single byte at location 13. Store a word at location 14. Burst transfer four longwords to store at location 16. Burst transfer two longwords to store at location 32. 5tora a single byte at location 40. that support Thus, using memory systems burst-write transactions, the execution time for ENTER, LDM, LDML, and EPA instructions are less than the values shown in Table E-2. To calculate the appropriate instruction execution time for such systems, add the number of cycles to perform the memory references (for LDM, LDML, and EPA instructions if the last transaction is not a burst transfer, count only one cycle for it) to 15 for ENTER, 3 for LDM, 6 for LDML, and 4 for EPA instructions. E-17 Timing formulae for Performance Evaluation Perforaance Calculation In order to determine the CPU's performance for a program workload, the aversge number of processor cycles per instruction for execution (T E), pipeline (Tp), addressing (TA), and memory (1M) delays can be calculated by measuring the frequency of occurence for the various delay causes and using the formulae presented in previous sections. The average number of processor cycles per instruction (TI) can be estimated by adding the individual delay components as shown below. Since two clock cycles are in every processor cycle, the following formula gives the performance of a CPU whose clock cycle time is TC' Because certain details of the CPU's operation have been omitted to simplify the description and analysis presented in this appendix, the formula above gives only an approximate prediction of the processor's actual performance. In general, the analysis is conservative; performance will typically be better then predicted because the simultaneous occurence of two or more delay causes has been ignored. For example, the CPU can handle a cache miss for one instruction· while executing another multiple-cycle instruction, like DIV. But, the time during which the delay causes are overlapping is counted twice because execution and memory delays are separately calculated. Nevertheless, the analysis described above is extremely useful, though inexact, because it is much simpler and faster than a register-trans ferlevel simulation necessary for exact performance calculations. Performance = (2TITC)-1 Table E-5. Exception Processing Delay Bus Error Non-maskable interrupt Vectored interrupt Non-vectored interrupt Extended Instruction trap Privileged Instruction trap System Cell trap Address Translation trap Breakpoint Integer Overflow trap Bounds Check trap Index Error trap Conditional trap Unimplemented Instruction trap PC trap Trace trap E-18 Exception Processing Ti_ Notes 29 21 26 21 23 23 22 24 22 2D 26 28 26 28 23 23 23 20 Add 11 cycles if sccess protection violation detected for translation table descriptor register. Otherwise add number of cycles given in Table E-3 to access levels of translation table until exception detected. Source Source Source Source operand operand operand operand below above below above lower upper lower upper bound bound bound bound Note 1: For all exceptions, add the time to store Program Status registers onto the System Stack and to load Program Status registers from the Program Status Area in external memory. Note 2: For Bus Error and Address Translation exceptions, also add the time to store the violation longword address onto the System Stack. Note 3: For interrupts, add the time for the Interrupt Acknowledge transaction. Timing Formulae for Performance Evaluation Exceptioo Processing Delays In addition to processing instructions, the CPU must occasionally process exceptions. Table E-5 lists the delays incurred for processing various Calculating the delays types of exception. involves determining the time to store the Progrsm Status registers to memory and fetching new values for the Program Status register from the Program Status Area. For example, assume that the time for a single memory-read trensaction is 2 processor cycles and the time for a single memorywrite transaction is 3 processor cycles, the memory data path is 32 bits, and the bus-timing scale factor is 2. Then the time to store and fetch the Program Status is 13 processor cycles: The 4 memory references require 3 processor cycles each, and an idle bus cycle follows each of the first 3 references. Thus, the delay for processing a System Call trap is 35 processor cycles. In order to calculate the frequencies of the various delay components, the programs were interpreted by a software simulator for the CPU's instruction set. The performance was then determined for systems composed of a 12 MHz CPU and each of three different memories that varied in their data path eize and support for burst transfers. The execution delay for the workload was determined from the frequency distribution of instruction. Table E-7 shows the ten most cOlM1onl y executed instructions and their frequencies as a percentage of total instructions. The average execution delay is 1.8 processor cycles per instruction. Table E-7. Instructioo Addressing EXllllple Opcode This section describes an example of performance evaluation for a workload containing fifteen programs representative of 16-bit microprocessor applications. The programs are all written in C and run in normal compact mode under Zilog's ZEUS version of the UNIX* operating system. Table E-6 lists the programs in the workload, which includes five million executed instructions. Table E-6. Progr_ Workload Used for ZIIO,OOO CPU Perfonance Evalu&tioo Progr- C1 C2 C3 C4 CPP DIFF ED GREP LS NM OD PR SED SORT VI Moat ~ly Executed lnatructioos Use C compiler parser C compiler code generator C compilsr optimizer C compiler lister C compiler preprocessor File comparison Line editor Pettern searching File directory listing Load module name listing Octal dumping of core imagea Format for line printer Stream editor Sorting Screen editor *UNIX is a trademark of AT&T Bell Laboratories. Zilog is licensed by AT&T Technologies, Inc. JR LD(register) INC CP(register) LD(register) LDB(register) DEC EXTSB LD(memory) LD(memory) Mode RA R R 1M X IR R R X IR Frequency (percent) 19.0 10.7 7.9 4.7 4.4 4.1 3.3 3.2 2.1 2.0 The average pipeline delay per instruction is 0.3 processor cycle. A register interlock occurs for 11% of instructions, causing 0.19 processor cycle delay, and a cache reference inter lock occurs for 6% of instructions, causing 0.11 processor cycle delay. Addressing delays are 0.03 processor cycles per instruction. These delays result almost entirely from branches to unaligned two-word instructions, because the compiler positions operands at aligned addresses and page-crossings rarely occur during sequential instruction processing. In calculating memory delays, three memory systems were considered. The first memory has a 16-bit data path, a cycle time of 2 processor cycles for read and 3 processor cycles for write and no burst transfers. The second and third memories have 32-bit data paths and cycle times of 2 processor cycles for read and 3 processor cycles for write, but the third supports burst transfers whereas the E-19 Timing Formulae for Performance Evaluation second does not. All three systems use s bus clock scaled by s fsctor of 2 from the CPU's clock. To determine the svarage delsy caused by cache misses it is useful to compute the average number of misses per instruction,~. To calculste ~, it is necesssry to know the csche hit ratio (h), which is the fraction of fetched words that are located in the cache, and the average number of fetched words per instruction. For this worklosd, an aversge of 1.4 instruction words snd 0.3 operand .word are fetched per instruction. Therefore, the everage number of cache misses per instruction is given by ~ = 1.7 (1-h), snd the average delay per instruction due to cache misses is 2~. The values of cache hit ratiO, misses per instruction, and delays per instruction are shown in Table E-B. Table [-8. Cache ... TlB Miss Delays 16-8it Me.ory Syst_ 32-8it 32-8it No Burst No Burat Burst Cache Hit rstio Misses per instruction Delay per instruction Perfo~ 0.62 0.65 1.3 0.75 0.42 0.B4 O.BB 0.21 0.42 0.99 0.02 0.46 0.99 0.02 0.46 nB Perfor.a1Ce Hit Ratio Misses per instruction Delay per instruction 0.99 0.02 0.57 Table [-9. MaDry Syst_ 16-bit no-burst 32-bit no burst 32-bit burst 32-bit burst, no translation In addition, the delay caused by bus contention amounts to 0.2 procassor cycle per instruction for all of the memory systems. In general, a 32-bit memory would exhibit less bus contention then a 16-bit memory, but the memory systems show negligible difference in bus contention for this workload, which makes little use of longword operands. (Fewer than 2~ of memory operands are longwords. ) The performance of a 25 MHz CPU with each of the three memory systems is calculated by adding the various delay components. The reaults, summarized in Table E-9 show the performance ranges from 3.1 to 5.0 million instructions per second (MIPS). For short sequences of instructions executed repeatedly, it is posaible to approach the maximum performance of 12.5 MIPS. Proceas1ng Perfontmce Perfor8alC8 TI = T[ + Tp + TA + TN Processor cyclea Per Instructioo (MIPS)" 3.1 3.7 4.2 4.0 = 1.B + 0.3 + 0.0 + 1.9 3.4 1.B + 0.3 + 0.0 + 1.3 3.0 1.B + 0.3 + 0.0 + 0.90 5.0 2.5 = 1.8 + 0.3 + 0.0 + 0.4 * The analysis used in calculating the performance is conservative; the delays are independently calculated, but in practice the delays may often overlap. Consequently the actual performance may be better than the values shown in the table. [-20 Cslculating the average delay caused by TLB misses is similar to cache misses, as described above, but operand stores as well as fetches can cause TLB misses. This is because the physical frame address in the page table entry is needed to atore an operand. On an average, 0.15 operand word is stored per instruction. The delay to service a TLB miss for two-level translation tables can be derived from the formulae previously given in the section on memory delays: 31 processor cycles with the 16-bit memory and 25 processor cycles with the 32-bit memory. The values of nB hit ratio, misses per instruction, and delays per instruction are shown in Table E-B. G Glossary access protection: A function of memory management that controls read, write and execute access to memory locations, protecting proprietary or operating system memory areas from tampering by unauthorized users. The CPU uses the protection (PROT) field to determine access rights for a page or segment. access protection violation: An incorrect or forbidden attempt to access a memory location; for example, an attempt to write to a read-only page. An access violation causes the CPU to generate an Address Translation trap. activation record: A data structure containing the local storage, saved register contents, and exception handler address associated with the invocation of a procedure. Activation records are stored on the processor stack in a linked list. An activation record is allocated when the Enter instruction is executed at the beginning of a procedure. The record is released when the Exit instruction is executed at the end of a procedure. addressing mode: The way in which the location of an operand is specified. There are nine addressing modes: Register, Immediate, Indirect Register, Direct Address, Index, Base Address, Base Index, Relative Address, and Relative Index. addreas tag: The portion of certain associative memories that is compared against a referenced address to determine whether the matching value is found. The address tag for a Translation Lookaside Buffer entry is the logical page address; the address tag for a cache block is the physical memory address. The process of mapping logical addresses into physical addresses. address translation: An exception that Address Translation trap: occurs during address translation when either an access protection violation or an invalid table entry is detected. The instruction being executed is suspended, and the PC, FCW, identifier word, and the logical address that caused the trap are saved on the system stack. An address that is a multiple of an operand's size in bytes. Aligned word addresses are a multiple of two; aligned longword addresses are a multiple of four. aligned address: A memory in which data is accessed by specifying a value rather than a location. The Translation Lookaside Buffer and cache are associative memories. associative .e.ory: The operation of decrementing an address in a register by the operand's size in bytes. The decrement amount is one for byte operands, two for word operands, and four for longword operands. autodecr_ent: The operation of incrementing an address in a register by the operand's size in bytes. The increment amount is one for byte operands, two for word operands, and four for longword operands. autoincra.ent: The address used, along with an index and/or displacement value, to calculate the effective address of an operand. The base address is located in a general-purpose register, the Program Counter, or the instruction. base address: In this mode, the displacement in the instruction is added to the contents of the base register to obtain the effective address. Base Address (RA) addressing .ode: In this mode, the contents of the base register and index register are added to the displacement in the instruction to obtain the effective address. Oase Index (OX) addresaing.ode: bit field: One to thirty-two contiguous bits that can cross byte boundaries. A bit field is specified by its byte origin, its bit position from the origin, and its size in bits. The instruction set allows bit fields to be extracted from a long word and inserted into a longword. burst transaction: The transfer of several consecutive items of data (either words or longwords) in one memory transaction. G-1 Glossary An exception that occurs when external hardware identifies an irrecoverable error during a data transfer on the external interface. bus error: bus .aster: The device in control of the bus. bus retry: A response to a data transfer transaction that indicates the transaction must be tried again because of some transient error condition. A data item containing 8 contiguous bits. A byte is the basic data unit for addressing memory and peripherals. byte: An on-chip buffer that automatically stores copies of recently used memory locations (both instructions and data), allowing fast access on memory fetches. cache: A mode of address representation, usually used for applications with small memory requirements, in which 16-bit addresses are manipulated; address calculations involve all 16 bits. The logical address is extended to 32 bits by concatenating the 16 most-significant bits of the Program Counter. CCllpset !lOde: An instruction ending in which the current instruction has been completely executed. This is the normal instruction ending, but exceptions can cause a different ending. co.pletion: coprocessor: A processor, such as a Z8070 Arithmetic Processing Unit, that works synchronously with the CPU to execute a single instruction stream using the Extended Processing Architecture (EPA) • Address (DA) addressing lIIOde: In this mode, the effective address is contained in the instruction. A condition or event that alters the usual flow of instruction processing. The Z80,OOO CPU supports four types of exception: reset, bus error, interrupts, and traps. When an exception occurs, the CPU saves the Program Status on the system stack and fetches a new Program Status from the Program Status Area. exception: A CPU operating state that results when an exception occurs, during which the CPU stores values from the Program Status registers to memory, and fetches values from memory for the Program Status registers. exception processing state: The type of memory access used by the CPU for fetching instructions and immediate mode operands. execute access: Extended Addressing Mode (EAM): An addressing mode in which one or more extension words follow the opcode. In compact mode, EAMs are Direct Address and Index. In segmented or linear mode, EAMs are Direct Address, Index, Base Address, Base Index, Relative Address and Relative Index. Processing Architecture (EPA): A CPU facility controlled by the EPA bit in the Flag and Control Word that allows the operations defined in the architecture to be extended by hardware or software. If enabled, the CPU transfers EPA instructions to an Extended Processing Unit (EPU) for execution; if disabled, the CPU traps EPA instructions for software emulation. Extended Processing Unit (EPU): An external device, such as a Z8070 APU, that handles Extended Processing Architecture instructions (such as floating-point arithmetic). Extended Direct A constant value located in the instruction that is used for calculating the effective address of an operand. displaceEnt: A bit manipulation operation in which the source operand is located in a register and therefore its value is changeable. dyna.ic operation: The logical memory address of an operand, calculated by adding the base address, an optional index value, and an optional displacement. effective address: An EPU-handled operation that controls EPU operations but does not transfer data. EPU internal operation: G-2 One of the two Program Status registers, a 16-bit register that contains the flags and bits that control the operation of the CPU. Flag and Control Word (FOI) register: flyby transaction: A transaction controlled by the bus master, but in which another device transfers data to the responding device. fra.e: A 1K-byte physical memory unit used by the memory management mechanism to map 1K-byte logical memory pages. A frame is speCified by the 22 mostsignificant bits of the physical address. The register that points to the current activation record on the stack. In compact mode, the FP is a word register, R14; in segmented or linear mode, a longword register, RR12. Frame Pointer (FPh Glossary general-purpose registers: The 16 versatile registers that can be used as data accumulators, index values, or memory pointers. global bus: A bus shared by tightly-coupled, multiple CPUs; the bus master is chosen by an external arbiter device. halted state: A CPU operating state that results when a Halt instruction is executed or a bus error exception occurs during exception processing. Hardware Interface Control register (HICR): The 32-bit special-purpose register that specifies certain characteristics of the hardware configuration incorporating the CPU, such as bus speed, memory data path width, and number of wait states. hit: A hit occurs when an associative memory is searched for a value and a match is found. identifier word: A 16-bit code saved on the system stack during exception processing that provides information about the cause of the exception. lesat recently used (LRU): The CPU records the order of use for Translation Lookaside Buffer entries and cache blocks. When a TLB miss or cache tag miss occurs, the CPU replaces the least recently used entry or block. length counter: A register that contains the value that is the length of a block or string of data that is manipulated by instructions. linear !lOde: A mode of address representation in which 32-bit addresses are manipulated, prov iding uniform and unstructured access to the 4G bytes of memory. Address calculations involve all 32 bits. local bus: The bus controlled by the CPU and shared with slave processors. logical address: The address manipulated by the program. The memory management mechanism translates logical addresses to physical addresses. longword: bits. A data item containing 32 contiguous addresaing 1IOde: In this mode, the operand is contained in the instruction. loosely-coupled OPUs: CPUs that execute independent instruction streams and communicate through a multi-ported peripheral, such as a Z8038 flO I/O interface unit. index: A value located in a register used for calculating the effective address of an operand. The index value usually specifies the calculated offset of an operand from the origin of an array or other data structure. _ r y _anag_t: The process of translating logical addresses into physical addresses, plus certain protection functions. In the Z80,000 CPU, memory management is integrated into the chip. Index (X) addresaing lIOde: In this mode, the contents of an index register are added to a base address contained in the instruction to obtain the effective address. _ _ Y-llapped I/O: A memory management feature that allows logical memory addresses to be mapped to physical I/O addresses. Memory mapped I/O provides protected access by application programs to peripherals. I~iste (1M) Indirect Register (IR) addresaing!lOde: In this mode, the effective address is contained in a register. _iss: A miss occurs when an associative memory is searched for a value and no match is found. instruction executing atate: A CPU operating state in which the CPU executes instructions. The interrupt; cannot be disabled. interrupt: An asynchronous exception that occurs when the NMI, VI, or NVI line is activated, usually when a peripheral device needs attention. nonvectored interrupt: The lowest priority interrupt, which does not use an identifier word as a vector to an interrupt service routine; can be disabled. invalid table entry: A cause of an Address Translation trap that is detected during address translation if the CPU fetches a translation table entry with a Valid bit of O. large~: In the segmented mode, one of the 128 segments in the upper half of the memory address space. Segments are 16M bytes in size or smaller. highest priority nar.al !lOde: A CPU mode of operation, generally used for application programs, in which the SIN flag in the FCW is O. In this mode, the CPU cannot execute privileged instructions or access protected memory locations. G-3 Glosssry Nomal Stack Pointer (NSP): The Stack Pointer used while the CPU is in normal mode. System mode programs can access the NSP with the Load Control instruction. Progr_ status registers: gram Counter and Flag and tain the Program Status. automatically saved during overflow stack: The stack used for saving the Program Status, identifier word, and exception parameters when an address translation exception occurs during exception processing. Progr_ Status Area (PSA): The area in memory reserved for storing the Program Status of the interrupt and trap service routines. Overflow Stack Pointer (OSP): The 32-bit register that contains the physical address of the overflow stack. The two registers (ProControl Word) that conThe Program Status is exception processing. Progr_ Status Area Pointer (PSAP): The 32-bit register thst contains the physical, base address of the Program Status Area. protection: See access protection. A 1K-byte logicsl memory unit mapped by the memory management mechanism to a 1K-byte physical memory frame. A page is specified by the 22 most-significant bits of the logical address. page: page table: The third level of translation tables, containing the physical frame address used during address translation. protection (PROT) field: A 4-bit field contained in the translation table descriptor registers and translation table entries that specifies access protection information for s logical address during sddress translation. quachlOrd: A data item containing 64 contiguous bits. paged translation: A method of address translation in which the logical and physical address spsces are divided into fixed, equal-sized units called pages and frsmes, respectively. During address translation, a logical page is mapped to an arbitrary physical frame. partie! co.pletion: An instruction ending in which the execution of an interruptible instruction is disrupted before completion by a trap or interrupt. physice! address: The 32-bit address required for accessing memory and peripherals, obtained by the CPU's address translation hardware. plpaline: A computer design technique in which an instruction is executed in a sequence of stages by different functional units. The functional units can be operating on several different instructions simultaneously, similar to an automobile assembly line. prefetching: Ability of the CPU to fetch an instruction or opersnd before the previous instructions have been completed. privileged instruction: An instruction that performs I/O operations, accesses control registers, or performs some other operating system function. Privileged instructions execute in system mode only. Progr_ Coulter (PC): One of the two Program Status registers, a 32-bit register that contains the address of the current instruction. G-4 read access: The type of memory access used by the CPU for fetching data operands other than those specified by Immediate mode. Register (R) addressing.ode: In this mode, the operand is in a general-purpose register. Relative Address (RA) addressing.ode: In this mode, the displacement in the instruction is added to the contents of the Program Counter to obtain the effective address. Relative Index (RX) addressing IMIde: In this mode, the contents of the Program Counter and index register are added to the displacement in the instruction to obtain the effective address. relocation: The process of mapping a logical address to a different physical address, so that multiple processes can use the same logical address for distinct physical memory locations. reset: A CPU operating state or exception that results when a reset request is signaled on the RESET line. A reset initializes the Program Status registers. responder: The device to which bus transactions transfer data. result register: The register that holds the result of an operation. Glosssry ~ed .ade: A mode of address rsprssentation that supports either 64K- or 16M-byte segments with 32-bit addressss. The most-significant address bit aelects either a 15-bit segment number with 16-bit offset, or a 7-bit segment number with 24-bit offset. Calculations affect only the offset snd not the segment number. self....adUying progr_: A program that etorss to a location from which a subsequent instruction is fetched. slave proceeaor: A processor, such as a Direct Memory Accees tranefer controller, that performs dedicated functions asynchronously to the CPU. In the segmented mode, one of the 32,768 segments in the lower half of the memory address space. Segments are 64K bytes or smaller. A CPU mods of operation, used for operating system functions, in which the sIN flag in the FCW is 1. In this mode, the CPU can executed privileged (and all other) instructions. ayata..ada: Syat. StlMlk Pointer (SSP): The Stack Pointer ussd while the CPU is in system mode. Normal mode programs cannot access the SSP. tag hit: On a memory reference, a tag hit occurs when the cache address tags are searched for the refsrsnced address and a match is found. tag 8iaa: On a memory rsfsrsnce, s tag miss occurs when the cache address tags are searched for the referenced address and no match is found. a.all~: spatial locality: The characteristic of program behavior whereby consecutive memory references often apply to cloaely located addresses. speeial-purpoaa control regieters: Nine registers used for system configuration, memory management, Program Status, and CPU control. stlMlk Pointer (SP): A general-purpose register indicating the top (lowest address) of the processor stack used by Call, Enter, Exit, and Return instructions for linking procedures. The SP is a word register, R15, in compact mode, and a longword register, RR14, in linear or segmented mode. Normal and system modes of operation use separate stack pointers, the Normal Stack Pointer (NSP) and System Stack Pointer (SSP). static operation: A bit manipulation operation in which the source operand is an immadiate value and is therefore fixed (static). l1118p1111Bion: An instruction ending in which the the current instruction has not been completed because a trap is detected during instruction execution. The instruction can be completed by eliminating the cause of the trap and atarting the instruction again. auapension with PC .adification: An instruction ending similar to suspension, but the Program Counter saved on the system stack during exception processing must be decremented by two before starting the instruction again. te.poral locality: The chsracteristic of program behavior whereby memory references often apply to a location that has been referred to recently. tanlination: An instruction ending in which the current instruction has not bsen completed and it is not possible to complete the instruction by starting it again. tightly-coupled CPOs: CPUs that execute independent instruction streams and communicate through shared memory on a common (globsl) bus. Tr..J.ation LooIcaai.de Buffer (TLB): An on-chip memory that automstically stores translation information for the most rscently used memory pages. tr..J.ation table: One of three levels of tables selectsd by the page descriptor registers during address translation. Each lsvel corresponds to a field in the logical page address. tr..J.ation table descriptor reg1ater: One of four registers that contain the physical addresses of the translation tables used by the memory management mechaniam during address translation. tr..J.ation table entry: An entry in one of the three levels of translation tables. Entries in the first two levels point to another level table. Entries in the third level (page table) contain the physical frame addrsss used during translation. trap: An exception that occurs when certain conditions, such as an access protection violation, are detected during execution of an instruction. Syst. Configuration Control longIIord register (SCCl): The 32-bit special-purpose register that contains control bits for addrsss translation, cache, and exception processing. G-5 Glossary ~I An addrsas that is not a multipls of an opsrand's sizs in bytss. Odd addressss ars unaligned for words and longwords; even addreeses that are not multiples of four sre unaligned for longwords. unaligned An interrupt that uses the low-order byte of the identifier word as a vector to an interrupt ssrvice routine; can be diaabled. wrd: A data item containing sixteen contiguous bits. wrd hit: On a memory reference to the cache, a tag hit occurs and a valid copy of the word is atored in the cache. vacI:ored interrupt: virtual ...ary: A memory managemant tachniqua in' which the system's logical memory address spsee is not necesaarily the same as, and can be much larger than, the available physical memory. G-6 wrd .iaa: On a memory reference to the cache, a tag hit occurs but a valid copy of the word ia not atored in the cache. writs acceaa: The type of memory acceas used by the CPU for storing dsta operands. I Index -AAccess protection, 1:2, 4:8 Address cslculations, 5:1,3 Addressing delsys, E:15 Addressing modes, 4-14, 5:2 Bsse Address (BA), 5:6,10 Bsse Index (BX), 5:6,11 Direct Address (DA), 5:5,8 Extended, 5:14 Immediste (1M), 5:4,8 Index (X), 5:5,9 Indirect Register (IR), 5:4,8 Relstive Address (RA), 5:7,12 Relative Index (RX), 5:7,13 used in compact mode, 5:4-7 used in segmented and linear modes, 5:7-12 Address representation, 1:1, 3:1-2 Compact mode, 1:1, 3:1-2 Linear mode, 1:2, 3:1-2 Segmented mode, 1:1-2, 3:1-2 Address spaces, 1:1, 4:1-3 Address trsnslation, 1:2, 4:4 Address Translstion trap, 7:4 Architecture, 1:1 Arithmetic instructions, 6:2-3 Assembler language syntex, 6:10-11 -8- Base Address (BA) sddressing mode, 5:6,10 Bese Index (BX) addressing mode, 5:6,11 Bit field instructions, 6:5-6 Bit Manipulation instructions, 6:5 Block diagram of Z8D,OOO CPU, 1:6 Block Transfer and String Manipulstion instructions, 6:7 Breakpoint trap, 7:4 Burst Memory Resd snd Write transaction, 8:10-11 Burst Memory Read timing, B:12 Burst Memory Write timing, B:13 Burst transfer protocol, 8:11 Bus acknowledge, B:22-24 Bus error, 7:4, 8:21 Bus operations, 8:1 Bus request, B:22-24 Bus Request Acknowledge timing, 8:22 Bus request protocol, 8:24 Bus retry, 8:21 Bus timing, 8:6-7 Bus transaction response, 8:8 Bus transsctions, 8:7-21 Burst Memory Resd and Write trensaction, 8: 10-11 CPU-EPU Data trsnsactions, 8:17-18 CPU-EPU Instruction transactions, 8:16 CPU-Memory transactions, 8:8-12 EPU-Memory transactions, 8:18-19 EPU transactions, 8:13-15 Input/Output transactions, 8:12-13 Interlocked Memory transsctions, 8:11-12 Single Memory Read and Write trsnsactions, 8:8-10 -CCache, 1:4, 8:3, C:1-3 Compact mode, 1:1, 3:1-2, 6:13 Compatibility with Z8000 CPU, 1:6, A:1 Condition codes, 6:9-10 Conditional trap, 7:4 Coprocessor, 1:4, 8:2 CPU Bus Request Protocol, 8:24 CPU Control instructions, 6:8-9 CPU-EPU Data Read timing, 8:17 CPU-EPU Data transactions, 8:17-18 CPU-EPU Data Write timing, 8:1B CPU-EPU Instruction transactions, 8:16 CPU-EPU Instruction Transfer timing, 8:16 CPU internal organizatIon, 1: 5-6 CPU-Memory transactions, 8:8-12 -DData formats, 2:1 Demand-paged virtual memory, 1:2 Direct Address (DA) addressing mode, 5:5,8 -EEPA, see Extended Processing Architecture EPU-Memory Single Write timing, 8:19 EPU-Memory transactions, 8:18-19 1-1 Index -E- (Continued) EPU transactions, 8:13-15 Exception handlera, 7:7 Exception processing delays, E:19-20 Exceptions, 1:3, 7:3-9 8us error, 7:4 Interrupts, 7:4 Priority of, 7:8-9 Reset, 7:3 Traps, 7:4,5 Execution time, E:3 Extended addressing modes, 5:14, 6:13 Extended Instructions, 6:9 Extended Instruction trap, 7:4 Extended Processing Architecture (EPA), 1:3,4 External interface, 1:4, 8:1-27 Flag and Control Word register, 1:1, 2:2-3 Flags, 6:9-10 Floating-point operations, 1:3 Flyby transactions, 8:1 Frame pOinter, 1:1, 2:2 Descriptions and formats, 6:16-214 Extended Instructions, 6:9 Flags and condition codes, 6:9-10 Input/Output instructions, 6:8 load and Exchange inatructions, 6:1-2 logical instructions, 6:3-4 Notation and binary encoding used in, 6:10-12 Program Control instructions, 6:4-5 Integer Arithmetic Error trap, 7:4 Interlocked Memory transactions, 8:11-12 Internal Operation and Halt timing, 8:21 Internal Operation and Halt tranaactions, 8:21 Interrupt Request/Acknowledge timing, 8:20 Interrupt Request and Acknowledge, 8:20-21 Interrupts, 1:3, 7:4 Non-maskable, 1:3 Non-vectored, 1:3 Vectored, 1:3 I/O Read timing, 8:14 linear mode, 1:2, 3:1-2, 6:13-15 load and Exchange instructions, 6:1-2 local Bus Request Acknowledge timing, 8:22 logical instructions, 6:3-4 logical I/O address spacea, 4:3 logical memory address spaces, 4:1 loosely-coupled multiple CPU, 1:5 General-purpose register file, 2:1-2 Global Bus Request timing, 8:23 Hardware Interface Control register (HICR), 2:4, 8:5-6 Memory dslays, E:15-18 Memory management, 1:2, 4:3 Memory-mapped I/O, B:1 Multiprocessor Configurations, 1:4, 8:2 Coprocessor, 1:4 Slave processor, 1:5 Tightly-coupled multiple CPUs, 1:5 loosely-coupled multiple CPUs, 1:5 -1- Immediate (1M) addressing mode, 5:4,8 Index (X) addressing mode, 5:5,9 Indirect Register (IR) addressing mode, 5:4,8 Input/Output instructions, 6:8 Instruction execution, 7:2-3 Instruction format, 6:12 Instruction Set, 6:16-214 Arithmetic instructions, 6:2-3 Bit Field instructions, 6:5-6 Bit Manipulation instructions, 6:5 Block Transfer and String Manipulation instructions, 6:7 CPU Control instructions, 6:8-9 14 Non-maskable Non-vectored Normal mode, Normal Stack interrupts, 7:4 interrupts, 7:4 1:3, 3:2-3 Pointer, 2:3, 3:2 Odd PC trap, 7:5 Operating states, 7:1 Overflow Stack Pointer (OSP), 2:4 Index -1- Physical address space, 4:3 Pin Functions, 8:3-4 Pipeline delays, E:3-4 Pipelined instruction execution, 7:3 Privileged Instruction trap, 7:4 Program Control instructions, 6:4-5 Program Counter, 1:1, 2:3 Program Status, 7:5-7 Program Status Area Pointer (PSAP), 2:3 Program Status registers, 1:1, 2:2-3 Program Counter, 1:1, 2:3 Flag and Control Word register, 1:1, 2:2-3 -RRegister (R) addressing mode, 5:4,7 Relative Address (RA) addressing mode, 5:7,12 Relative Index (RX) addressing mode, 5:7.13 Reserved control bits, 2:4 Reset, 8:26-27 Table entry formats, 4:7 Tightly-coupled multiple CPU, 1:5 Timing formulae, Appendix E TLB, see Translation Lookaside Buffer Trace trap, 7:5 Translation Lookaside Buffer (TLB), 1:2, 4:4-5 Translation Table Descriptor registers, 2:4 Traps, 7:4-5 Address Translation trap, 7:4 Breakpoint trap, 7:4 Conditional trap, 7:4 Extended Instruction trap, 7:4 Integer Arithmetic Error trap, 7:4 Odd PC trap, 7:5 Privileged Instruction trap, 7:4 System Call trap, 7:4 Trace trap, 7:5 Unimplemented Instruction trap, 7:5 -tI- -5- Segmented mode, 1:1-2, 3:1-2, 6:13-15 Single Memory Read and Write transactions, 8:8-10 Single Memory Read timing, 8:8-9 Single Memory Write timing, 8:10 Slave processor, 1:5, 8:2 Special-purpose control registers, 2:3 Stack POinter, 1:1, 2:2 System Call trap, 7:4 System Configuration Control Longword, 2:4 System mode, 1:3, 3:2-3 System Stack Pointer, 3:2 Unimplemented Instruction trap, 7:5 -y- Vectored interrupts, 7:4 -zZ8000 CPU, compatibility with, 1:6, A:1 Z8070 Arithmetic Processing Unit, 1:3 Z80,OOO CPU block diagram, 1:6 1-3 Zilog READER COMMENTS Your comments concerning this publication are important to us. Please take the time to complete this questionnaire and return it to Zilog. Title of Publication: Document Number: Your Hardware Model and Memory Size: Describe your likes/dislikes concerning this document: Technical Information: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ Supporting Diagrams: EaseofUse: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ___ Your Name: Company and Address: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ Your Position/Department: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ 111111 BUSINESS REPLY MAIL FIRST CLASS PERMIT NO. 35, CAMPBELL, CA. POSTAGE WILL BE PAID BY: Zilog 1315 Dell Ave. Campbell, California 95008 ATTENTION: Corporate Publications No Postage Necessary If Mailed In The United States Zilog Sales Offices and Technical Centers West Midwest East United Kingdom Sales & Technical Center Zllog. Incorporated t 0340 Bubb Road Cupertino. CA 95014 Phone (408) 370-8120 (408) 370-8122 (GIS) TWX : 91.0-338-2296 FAX . (408) 370-8016 Sales & Technical Center Zilog. Incorporated 951 North Plum Grove Road SUite F Schaumburg , lL 60195 Phone: (312) 885-8080 TWX : 910-291 -1064 Sales & Technical Center Zllog , Incorporated Corporate Place 99 South Bedford SI. Burlington, MA 01803 Phone: (617) 273-4222 TWX : 710-332-1726 Zllog (U.K.) Limited Zilog House 43-53 Moorbridge Road Maidenhead Berkshire, SL6 8PL England Phone: 0628-39200 Telex : 848609 Tech nical Center Zilog. Incorporated 7101 York Ave. , South Edina, MN 55435 Phone: (612) 921 -3369 Sales & Technical Center ZlIog, Incorporated 240 Cedar Knolls Rd . Cedar Knolls, NJ 07927 Phone: (201) 540-1671 Sales & Technical Center Zilog , Incorporated 28349 Chagrin Blvd. SUite 109 Woodmere, OH 44122 Phone : (216) 831 -7040 FAX : 216-83 1-2957 Technical Center Plaza Office Center Suite412 Route 73 and Fellowship Rd. MI. Laurel , NJ 08054 Phone: (609) 778-8070 Sales & Technical Center Zllog. Incorporated 15643 Sherman Way SUite 430 Van Nuys. CA 91406 Phone: (213) 989-7485 TWX . 910-495-1765 Sales & Technical Center ZlIog , Incorporated 125 Baker Ave . SUite t80 Costa Mesa. CA 92626 Phone (714)261 -1281 Sales & Technical Center Zllog . Incorporated 1750 112th Ave. N.E. SUite 0161 Bellevue, WA 98004 Phone: (206) 454-5597 Technical Center Zllog, Incorporated 2885 Aurora Ave. SU ite 23 Boulder. CO 80303 Phone (303) 440-397 t South Sales & Technical Center Zllog , Incorporated 4851 Keller Springs Road . Suite211 Dallas. TX 75248 Phone: (214) 931-9090 TWX : 910-860-5850 Technical Center Zllog , Incorporated 7113 Burnet Rd . SUite 207 Austin , TX 78757 Phone: (512) 453-3216 Technical Center Zllog , Incorporated 3300 Buckeye Rd. SUite 401 Atlanta. GA 30341 Phone: (404) 451-8425 Sales & Tech nical Center ZlIog , Incorporated 1301 Semlrtole Bl vd. SUite 103 Largo . FL 33540 Phone: (813) 585-2533 TWX : 810-866-9740 France ZlIog , Incorporated Cedex 31 92098 Paris La Defense France Phone: (1) 334-60-09 TWX: 61 1445F West Germany ZllogGmbH Eschenstrasse 8 0-8028 TAUFKIRCHEN MUnich , West Germany Phone: 89-612-6046 Telex: 529110 Zilog d . Japan Zllog , Japan K.K. Konparu Bldg. 5F , 2-8 Akasaka 4-Chome M inato-Ku , Tokyo 107 Japan Phone: (8 1) (03) 587-0528 Telex: 2422024 Al B : Zilog J Hong Kong Zllog ASia Ltd . 22-26 Austin Ave. Room 1009 Austin Tower TSlmshatsUi Kowloon Hong Kong Phone: (852) (3) 723-8979 Telex : 52102 ZILOG HK ' Zllog, Inc. 03-8225-01 1315 Dell Ave., Campbell , California 95008 Telephone (408)370-8000 TWX 910-338-7621 Printed In USA
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.3 Linearized : No XMP Toolkit : Adobe XMP Core 4.2.1-c043 52.372728, 2009/01/18-15:56:37 Create Date : 2013:08:26 11:54:55-08:00 Modify Date : 2013:08:26 14:58:30-07:00 Metadata Date : 2013:08:26 14:58:30-07:00 Producer : Adobe Acrobat 9.55 Paper Capture Plug-in Format : application/pdf Document ID : uuid:bc12a65d-2cf6-1040-9c4c-268ed06a0bd7 Instance ID : uuid:d9ba04fa-fe71-5b44-8b61-a947bd20a383 Page Layout : SinglePage Page Mode : UseNone Page Count : 360EXIF Metadata provided by EXIF.tools