throbber
A mere six years of microprocessor evolution have yielded a
`three-orders-of-magnitude performance improvement.
`
`Intel Microprocessors -
`8008to8086
`
`Stephen P. Morse,* Bruce W. Rav~ncl,* Stanley Mazor, and W!lliam B. Pohlman
`lntel Corporation
`
`Intel introduced its first microprocessor in November
`1971 with the advertisement, "Announcing a New Era in
`Integrated Electronics." The fulfillment of this prophecy
`has already occurred with the delivery of the 8008 in 1972,
`the 8080 in 1974, the 8085 in 1976, and the 8086 in 1978.
`During this time, throughput has improved one-hundred(cid:173)
`fold, the price of a CPU chip has declined from $300 to
`$3, and microcomputers have revqlutionized design
`concepts in countless applications. They are now entering
`our homes and cars.
`Each successive product implementation depended on
`fabrication innovations, improved architecture, better
`circuit design, and more sophisticated softwan:, and
`throughout this development, upward compatibility not
`envisioned by the first designers was maintained. Here,
`we will try to provide an insight into the evolutionary
`process that transformed the 8008 into the 8086 and give
`descriptions of the various processors, emphasizing the
`8086.
`
`Historical setting. In the late 1960's it became clear that
`the practical use of LSI circuits depended on defining
`chips having

`• a high gate-to-pin ratio,
`• a regular cell structure, and
`• a large standard part market.
`In 1968, Intel Corporation was founded to exploit the
`semiconductor memory market, which uniquely fulfilled
`these criteria. Early semiconductor RAM&, ROMs, and
`shift registers were welcomed wherever small memories
`were needed, especially in calculators and CRT terminals.
`
`*Curre:m1y wit~ Language Resources~ S'!nnyvale, California.
`
`In 1969, Intel engineers began to study ways of integrating
`and partitioning the control logic functions of these
`systems into LSI chips.
`At this time, other companies (notably Texas lnstn.l(cid:173)
`ments) were exploring ways to reduce the time needed to
`develop custom integrated circuits. Computer-aided
`<:lesign of custom ICs was a hot issue then. Custom ICs are
`making a comeback today, this time, in the high-volume
`applications that typify the low end of the microprocessor
`market.
`An alternate approach was to think of a customer's
`application as a computer system requiring a control
`program, 110 monitoring, and arithmetic routines,
`rather than as a collection of special-purpose logic chips.
`Drawing on its strength jn memory, Intel partitioned
`systems into RAM, ROM, an<:! single controller chips,
`i.e., CPUs.
`Intel embarked on the design of two customer(cid:173)
`sponsored microprocessors-the 4004 for a calculator
`and the 8008 for a CRT terminal. The 4004 replaced what
`otherwise would have been six customized chips usable by
`only one customer. Because the first microcomputer ap(cid:173)
`plications were known' and easy to understand, instruc(cid:173)
`tion sets and architectures were defined in a matter of
`weeks. As programmable computers, their uses could be
`extended indefinitely.
`Both microprocessors were complete CPUs on a chip
`and had similar characteristics. But because the 4004 was
`designed for serial BCD arithmetic and the 8008 for 8-bit
`character handling, their instruction sets differed.
`The succeeding years saw the evolution that eventually
`led to the 8086. Table 1 summarizes the progression of
`features that took place during these years.
`
`42
`
`0018·9162/80/1000-0042$00.75 © i980 IEEE
`
`COMPUTER
`
`APPLE EX. 1025
`Page 1
`
`

`
`The 8008
`
`Late in 1969, Computer Terminal Corporation (today
`called Datapoint) contracted Intel to do a pushdown
`stack chip for a processor to be used in a CRT terminal.
`Datapoint had intended to build a bit-serial processor in
`TTL logic, using shift register memory. Intel counter(cid:173)
`proposed that the entire processor be implemented on one
`chi),'. This processor was to become the 8008 and, along
`with the 4004, was to be fabricated using PMOS, the then(cid:173)
`current memory fabrication technology; Due to the long
`lead time required by lntel, Datapoint proceeded to
`market the serial processor, and thus compatibility con(cid:173)
`straints were imposed on the 8008.
`Most of the instruction set and register organization
`were specified by Datapoint. Intel modified the instruc(cid:173)
`tion set so the processor would fit on one chip and added
`instructions to make it more general-purpose. For
`although Intel was developing the 8008 for a specific
`customer, they wanted to have the option of selling it to
`others. And since Intel was using only 16- and 18-pin
`packages in those days, they chqse to use 18 pins for the
`8008 rather tha.n design a new package for what was
`believed to be a low-volume chip.
`
`8008 instruction set processor. The 8008 processor ar(cid:173)
`chitecture is quite simple compared to that of today's
`microprocessors. The data hanqling facilities provide for
`byte data only. The memory space is limited to 16K bytes,
`and the stack is on the chip a11d limited to a depth of eight.
`The instruction set is small but symmetrical, with only a
`few operand addressing modes available. An interrupt
`mechanism is provided, but there is no way to disable in(cid:173)
`terrupts.
`
`Memory and 1/0 structure. The 8008 addressable
`memory space consists of 16K bytes. That seemed like a
`lot back in 1970 when memories were expensive and LSI
`deviCes were slow. It was inconceivable in those days that
`anybody would want to put more than 16K of this pre(cid:173)
`cious resource on anything as slow as a microprocessor.
`The memory size limitation was imposed by the lack of
`available pins. Addresses are sent out in two consecutive
`clock cycles over an · 8-bit address bus. Two control
`signals, which would have been on dedicated pins if such
`were available, are sent out with every address instead,
`thereby limiting addresses to 14 bits.

`The 8008 supports eight 8-bit input ports and 24 8-bit
`output ports. Each port is directly addressable by the in-
`
`Table 1.
`Feature comparisol'!-lntel microprocessors, 1972-1978.
`
`8008
`1972
`
`66
`
`4
`
`8080
`1974
`
`111
`
`5
`
`8085
`1976
`
`113
`
`8086
`1978
`
`133
`
`9
`
`16K BYTES
`
`64K BYTES
`
`64K BYTES
`
`1M BYTES
`
`8 INPUT
`24 OUTPUT
`
`2561NPUT
`256 OUTPUT
`
`256 INPUT
`256 OUTPUT
`
`64KINPUT
`64K OUTPUT
`
`16
`
`8*
`
`8*
`
`40
`
`16
`
`8
`
`40
`
`16
`
`8
`
`40
`
`20*
`
`16*
`
`INTRODUCTION
`DATE
`
`NUMBER OF
`INSTRUCTIONS
`
`NUMBER OF
`FLAGS
`
`MAXIMUM
`MEMORY SIZE
`
`1/0 PORTS
`
`NUMBER OF
`PINS
`
`ADDRESS BUS
`WIDTH
`
`DATA BUS
`WIDTH
`
`DATA TYPES
`
`8-BIT UNSIGNED
`
`ADDRESSING
`MODES
`
`REGISTER
`IMMEDIATE**
`
`8-BIT UNSIGN~D
`16-BIT UNSIGNED
`(LIMITED)
`
`PACKED BCD
`{LIMITED)
`
`MEMORY DIRECT
`(LIMITED)
`MEMORY INDIRECT
`(LIMITED)
`REGISTER
`IMMEDIATE**
`
`8-BIT UNSIGNED
`16-BIT UNSIGNED
`(LIMITED)
`
`PACKED BCD
`(LIMITED)
`
`8-BIT UNSIGNED
`8-BIT SIGNED
`16-BIT UNSIGNED
`16'BIT SIGNED
`PACKED BCD
`UNPACKED BCD
`
`MEMORY DIRECT
`(LIMITED)
`MEMORY INDIRECT
`(LIMITED)
`REGISTER
`I M M EIJIATE* *
`
`MEMORY DIRECT
`MEMORY INDIRECT
`REGISTER
`IMMEDIATE
`INDEXING
`
`•ADDRESS AND DATA BUS MULTIPLEXED.
`••MEMORY CAN BE ADDRESSED AS A SPECIAL CASE BY USING REGISTER M.
`
`October 1980
`
`43
`
`APPLE EX. 1025
`Page 2
`
`

`
`struction set. The chip's designers felt that output ports
`were more important than input ports because input ports
`can always be multiplexed by external hardware under
`control of additional output ports.
`One of the interesting things about that era was that,
`for the first time, users were given access to the memory
`bus and could define their own memory structure; they
`were not confined to what the vendors offered, as they
`had been with minicomputers. The user had the option,
`for example, of putting 1/0 ports inside the memory ad(cid:173)
`dress space instead of in a separate 1/0 space.
`
`Register structure. The 8008 processor contains two
`register files and four 1-bit flags. The register files are the
`scratchpad and the address stack.
`Scratchpad. The scratchpad file contains an 8-bit ac(cid:173)
`cumulator called A and six additional8-bit registers called
`B,C,D,E,H, and L. All arithmetic operations use the ac(cid:173)
`cumulator as one of the operands and store the result back
`in the accumulator. All seven registers can be used inter(cid:173)
`changeably for on-chip temporary storage.
`There is one pseudoregister, M, which can be used in(cid:173)
`terchangeably with the scratchpad registers. M is, in ef-
`
`net effect on parity). The new setting of the PARI(cid:173)
`TY flag will be the complement of this bit (flag
`denotes even parity) and therefore will take on the
`original value of the PARITY flag.
`• Whenever the ZERO flag is 1, the SIGN flag must
`be 0 (zero is a positive 2's-complement number)
`and the PARITY flag must be 1 (zero has even
`parity). Thus, an original ZERO flag value of 1 will
`C().use all bits of FLAGS, with the possible excep(cid:173)
`flon of bit 7, to be 0. After the execution of the
`ADD instruction, all bits of the result will be 0 and
`the new value of the ZERO flag will therefore be 1.
`• An original ZERO flag value of 0 will cause two
`bits in FLAGS to be 1 and will wind up in the result
`as well. The new value of the ZERO flag will
`therefore be 0.
`
`The above algorithm relies on consistent flag
`values; i.e., the SIGN flag cannot be a 1 when the ZERO ·
`flag is a 1. This is always true in the 8008, since the
`flags come up in a consistent state whenever the pro(cid:173)
`cessor is reset and since flags can be modified only by
`instructions which always leave the flags in a consis(cid:173)
`tent state. The 8080 and its derivatives allow the pro(cid:173)
`grammer to arbitrarily modify the flags by popping a
`value of his choice off the stack and into the flags.
`Thus, the above algorithm will not work on those pro(cid:173)
`cessors.
`
`Saving and restoring flags in the 8008
`
`Interrupt routines must leave all processor flags and registers
`unaltered so as not to contaminate the processing that was inter·
`rupted. This is most simply done by having the interrupt routine
`save all flags and registers on entry and restore them prior to ex·
`iting. The 8008, unlike its successors, has no instruction for directly
`saving or restoring flags. Thus, 8008 interrupt routines that alter
`flags (practically every routine does) must conditionally test each
`flag to obtain its value and must then save that value. Since there
`are no instructions for directly setting or clearing flags, the flag
`values must be restored by executing code that will put the flags in
`ttw saved state.
`The 8008 flags can be restored very efficiently if they are saved in
`a bytE! in memory in the following format:
`
`765432
`
`0
`
`c s s ololzlziF>
`
`most significant bit = bit 7 = original value of CARRY
`bit 6 = original value of SIGN
`bit 5 = original value of SIGN
`bit4 = 0
`bit 3 = 0
`bit 2 = complement of original value of ZERO
`bit 1 = complement of original value of ZERO
`bii 0 = complement of original value of PARITY
`
`With the formatted information saved in a byte called FLAGS, the
`following two instructions will restore all the saved flag values:
`
`LOA FLAGS
`ADDA
`
`; load saved flags into accumulator
`; add the accumulator to itself
`
`This instruction sequence loads the saved flags into the ac·
`. cumulator and then doubles the value, thereby moving each bit one
`position to the left. This causes each flag to be set to its original
`value for the following reasons:
`
`• The original value of the CARRY flag, in the leftmost bit, will be
`moved out of the accumulator and wind up in the CARRY flag.
`• The original value of the SIGN flag, in bit 6, will wind up in bit 7
`and will become the sign of the result. The new value of the
`SIGN flag will reflect this sign.
`• The complement of the original value of the PARITY flag will
`wind up in bit 1, and it alone will determine the parity of the
`result (all other bits in the result are paired up and have no
`
`A code sequence for saving the flags in the required
`format is as .follows:
`MVI A,O
`; move zero in accumulator
`JNC L1
`; jump if CARRY not set
`ORA SOH
`; OR accumulator with SOH hex
`(set bit?)
`; jump if ZERO set (and SIGN
`not set and PARITY set)
`; OR accumulator with 03 hex
`(set bits 1 and 2)
`; jump if negative (SIGN set)
`OR accumulator with 60 hex
`(set bits 5 and 6)
`jump if parity even (PARITY set)
`OR accumulator with 01 hex
`(set bit 0)
`store accumulator in FLAGS
`
`L 1: JZ
`
`L3
`
`ORA 06H
`
`L2
`JM
`ORA 60H
`
`L2: JPE L3
`ORA 01H
`
`L3: STA FLAGS
`
`44
`
`COMPUTER
`
`APPLE EX. 1025
`Page 3
`
`

`
`feet, that particular byte in memory whose address is cur(cid:173)
`rently contained in H and L (L contains the eight low(cid:173)
`order bits of the address and H contains the six high-order
`bits). Thus, M is a byte in memory and not a register;
`although instructions address Mas if it were a register, ac(cid:173)
`cesses to M actually involve memory references. The M
`register is the only mechanism by which data in memory
`can be accessed.
`Address stack. The address stack contains a 3-bit stack
`pointer and eight 14-bit address registers providing
`storage for eight addresses. The programmer cannot
`directly access these registers; instead, he manipulates
`them with control-transfer instructions.
`Any one of the eight address registers in the address
`stack can serve as the program counter; the current pro(cid:173)
`gram counter is specified by the stack pointer. The other
`seven address registers permit storage for nesting of
`subroutines up to seven levels deep. The execution of a
`call instruction causes the next address register to become
`the current program counter, and the return instruction
`causes the address register that last served as the program
`counter to again become the program counter. The stack
`will wrap around if subroutines are nested more than
`seven levels deep.
`Flags. The four flags in the 8008 are CARRY, ZERO,
`SIGN, and PARITY. They reflect the status of the latest
`arithmetic or logical operation. Any flag can be used to
`alter program flow through the use of the conditional
`jump, call, or return instructions. There is no direct
`mechanism for saving or restoring flags, which places a
`severe burden on interrupt processing (see box at left for
`details).
`The CARRY flag indicates if a carry-out or borrow-in
`was generated, thereby providing a multiple-precision
`binary arithmetic capability.
`The ZERO flag indicates whether or not the result is
`zero. This provides the ability to compare two values for
`equality.
`The SIGN flag reflects the setting of the leftmost bit of
`the result. The presence of this flag creates the illusion
`that the 8008 is able to handle signed numbers. However,
`there is no facility for detecting signed overflow on addi(cid:173)
`tions and subtractions. Furthermore, comparing signed
`numbers by subtracting them and then testing the SIGN
`flag will not give the correct result if the subtraction
`resulted iil signed overflow. This oversight was not cor(cid:173)
`rected until the 8086.
`The PARITY flag indicates whether the result is of even
`or odd parity. This permits testing for transmission er(cid:173)
`rors, an obviously useful function for a CRT terminal.
`
`Instruction set. The 8008 instructions are designed for
`moving or modifying 8-bit operands. Operands are con(cid:173)
`tained in the instruction itself (immediate operand), in a
`scratchpad register (register operand), or in theM register
`(memory operand). Since theM registers can be used in(cid:173)
`terchangeably with the scratchpad registers, there are on(cid:173)
`ly two distinct operand addressing modes-immediate
`and register. Typical instruction formats for these modes
`are shown in Figure 1.
`The instruction set consists of scratchpad-register in-
`structions, accumulator-specific instructions, transfer-
`
`of-control instructions, input/output instructions, and
`processor-control instructions.
`The scratchpad-register instructions modify the con(cid:173)
`tents of theM register or any scratch pad register. This can
`
`NO OPERANDS
`
`OPCODE
`
`ONE OPERAND
`
`OPCODE I REG I OPERAND IN REGISTER
`I OPC I REG I OPCOO I OPERAND IN REGISTER
`I OPC I RP I OPCODE I OPERAND IN REGISTER PAIR (80800NLY)
`I OPC I RP I OPCODE 'INDIRECT ADDRESSING(80800NLY)
`I IMMEDIATE OPERAND
`II
`II
`II
`
`OPCODE
`
`DATA
`
`OPCODE
`
`ADDR·LO
`
`ADDR·HI
`
`DIRECT
`
`I ADDRESSING
`
`(8080
`ONLY)
`
`TWO OPERANDS
`
`I oPel REG I REG I BOTH OPERANDS IN REGISTER
`I I I
`I I
`I ONE OPERAND IN REGISTER.
`IOPC I RP I ~PCODE I I
`I I DATA-HI
`I PAIR, OTHER
`
`OPC REG
`
`OPG
`
`L __ D_A_TA __ ..J OTHER IS IMMEDIATE OPERAND
`ONE OPERAND
`,---------, IN REGISTER
`
`.
`
`.
`
`.
`
`DATA·LO
`'-· - - - - - - '
`
`.
`
`IS IMMEDIATE
`OPERAND
`(8080 ONLY)
`
`INPUT /OUTPUT
`
`loPe I PORT I D I (80080NLY)
`II
`
`OPCODE
`
`PORT
`
`I (80800NLY)
`
`JUMPS AND CALLS
`
`OPCODE
`
`OPCODE
`
`8008
`OOO:A
`001 B
`010 G
`011 :D
`100:E
`101 :H
`110:L
`111:M
`
`REG
`
`ADDR·LO Ill ADDR·HI I (80080NLY!
`II
`I (80800NLY)
`I I AODR·HI
`I I ADDR·LO
`
`REG
`
`8080
`000:8
`001:C
`010:D
`011 :E
`100:H
`101 :L
`110:M
`111:A
`
`8080
`
`OO:BC
`01 :DE
`10:HL
`11 :SP
`
`RP
`
`Figure 1. Typical8008 and 8080 instruction formats.
`
`October 1980
`
`45
`
`APPLE EX. 1025
`Page 4
`
`

`
`involve moving data between any two registers, moving
`immediate data into a register, or incrementing or
`decrementing the contents of a register. The incrementing
`and decrementing instructions were not in Datapoint's
`specified instruction set; they were added by Intel to pro(cid:173)
`vide for loop control, thereby making the processor more
`general-purpose.
`Most of the accumulator-specific instructions perform
`operations involving the accumulator and a specified
`operand. The operand can be any one of the scratch pad
`registers, including M, or it can be immediate data. The
`operations are add, add-with-carry, subtract, subtract(cid:173)
`with-borrow, logical ANI:), logical OR, logical exclusive(cid:173)
`OR, and compare. Furthermore, there are four unit(cid:173)
`rotate instructions that operate on the accumulator.
`These instructions perform either ah 8- or 9-bit rotate (the
`CARRY flag acts as a ninth bit) in either the left or right
`direction.
`Transfer-of-control instructions consist of jumps,
`calls, and returns. Any transfer can be unconditional, or
`conditional based on the setting of any one of the four
`flags. Making calls and returns conditional was done only
`to preserve the symmetrY with jumps. A short one-byte
`
`Jl.n m:be )Seginning . ..
`
`Jln the beginning Intel created the 4004 and ttie 8008. Arid these
`processors were without enough memory and throughput. And In·
`tel said, "Let there be an 8080," and there was an 8080 and Intel saw
`that it was good. And Intel separated the 8008 market from the 8080
`market.
`~nd Intel said, "Let there be an 8085 with an oscillator on the
`sa:me chip as the proce:;;sor, and let an on,chip system controller
`separate. the data from the control. lines. And Intel made a firma·
`ment ahd divided the added instructions which were under the fir·
`rhament from the added instructions which were·above the firma·
`ment. And Intel called the first set of instructions RIM and SIM.
`And the other instructions Intel never announced.
`~ntl Intel said, "Let the market below the 8085 market be served
`with a processor and let on-chip ROM appear." And Intel called the
`new processor the 8048. And the market it served Intel called the
`low end. And Intel saw that it was good.
`~nd Intel said, "Let a hew-generation processor serve the mid·
`range market. .Arid let there be true 16·bit facilities in the mid-range.
`Alld let there be one megabyte of memory and efficient interrupt·
`ible byte-string instructions and full decimal arithmetic." And in tel
`saw the collection of all these things, that it was good, and Intel
`called it the 8086.
`~nd Intel said, "Now let.u:;; make a processor in our image, after
`our likeness, and let it have dominion over the high-end market."
`So Intel created the APX 432 in his own image, in the image of Intel
`created he it, data processor and 1/0 processor created he them.
`And Intel blessed them and said uhto them. be fruitfui and
`multiprocess and revolutionize the microprocessor market and
`have dominion over the Z8000 and the M68000 and over every com·
`petitor that enters the market.
`~nd Intel saw everything that he had made and, behold, it was
`good.
`
`-S.P. Morse
`
`form of call-which will be discussed with interrupts-is
`also provided.
`.
`Each jump and call instruction (with the exception of
`the one-byte call) specifies an absolute code address in the
`second and third byte of the instruction. The. second byte
`contains the six high•order bits of the address and the
`third byte the eight low-order bits. This inverted storage,
`which was to haunt all processors evolved from the 8008,
`was a result of a need for compatibility with the Datapoint
`bit-serial processor, which processes addresses from low
`bit to high biL This inverted storage did have a virtue in
`those early days when 256 x 8 memory chips were popular:
`It allowed all memory chips to select a byte and latch it for
`output while waiting for the six high-order bits which
`selected the chip. This speeded up memory access.
`There are eight input and 24 output instructions using
`up 32 opcodes. Each 1/0 instruction transfers a byte of
`data between the accumulator and a designated 110 port.
`The processor-control instructions are halt and no-op.
`Halt puts the processor into a waiting state. The processor
`remains in that state until an interrupt occurs. No-op is
`actually one of the move instructions; specifically, it
`moves the contents of the accumulator into the ac(cid:173)
`cumulator, thereby having no net effect (move instruc(cid:173)
`tions do not alter flag settings).
`
`Interrupts. Interrupt processing was not a requirement
`for the 8008. Hence, only the most primitive mechanism
`conceivable-not incrementing the program counter(cid:173)
`was provided. Such a mechanism permits an interrupting
`device to jam an instruction into the processor's instruc(cid:173)
`tion stream. This is accomplished by having the interrupt(cid:173)
`ing device, instead of memory, respond to the instruction
`fetch; since the program counter isn't incremented, the
`instruction in memory that didn't get fetched won't be
`skipped. The instruction typically supplied by the inter(cid:173)
`rupting device is a call, so that an interrupt service routine
`can be entered and then the main program can be resumed
`after interrupt processing is complete (a jump instruction
`would result in the loss of the main program return ad(cid:173)
`dress). To simplify the interrupting device's task of
`generating an instruction, the 8008 instruction set pro(cid:173)
`vides eight one-byte subroutine calls, each to a fixed loca(cid:173)
`tion in memory.
`There are no instructions for disabling the interrupt
`mechanism; thus, this function must be realized whh ex(cid:173)
`ternal hardware. More important, there are no instruc(cid:173)
`tions for conveniently saving the registers and flags when
`an interrupt occurs.
`
`The soso
`
`By 1973, memory fabrication technology had ad(cid:173)
`vanced from PMOS to NMOS. As an engineering exer(cid:173)
`cise, Intel decided to use the 8008 layout masks with the
`NMOS process to obtain a faster 8008. After a short
`study, the company determined that a new layout was re(cid:173)
`quired. It therefore decided to enhance the processor at
`the same time aild to utilize the new 40-pin package made
`practical by high-volume calculator chips. The resuit was
`the 8080 processor.
`
`46
`
`COMPUTER
`
`APPLE EX. 1025
`Page 5
`
`

`
`of inveited storage aiready noted in the: transfer instruc(cid:173)
`tions of the 8008.
`The 8080exterids the 32·port capacity of the 8008 to'256
`input ports and 256 output ports. Here, the 8080 is actual(cid:173)
`ly more s:Yminetrical than the. 8008. Like the 8008, the
`8080 instructioh set can directly address aU the ports.
`
`Register structilre. The 8080 processor contains a file of
`seven 8-bit general registers, a .16-bit program counter
`(PC) and stack pointer (SP), and five !-bit flags. A com(cid:173)
`parison between the 8008 and 8080 register sets is shown in
`Figure2.
`General registers.. The 8080 registers are the same seven
`8-bit registers that were in the 8008 scratchpad-namely,
`A,B,C,D,E,H, and L. In order to incorporate 16-bit data
`
`8008
`
`8080
`
`SCRATCH PAD
`
`GENERAL REGISTERS
`
`0 7
`
`~
`
`0
`
`H
`
`A
`c
`
`E
`
`L
`
`A
`
`B
`c
`
`D
`
`E
`
`H
`
`L
`
`ADDRESS STACK
`
`STACK POINTER AND PROGRAM COUNTER
`
`13
`
`2 0
`
`15
`
`The 8080 was the first processor designed specifically
`for the microprocessor market. It was constrained to in(cid:173)
`clude all the 8008 instructions, bui not necessar.iiy with the
`same encodings. This,meant that a-user's software would
`be portable, but that the actuai ROM chips containing the
`programs would have to be replaced. The main objective
`of the 8080 was to obtain ,a ten-to-one improvement in
`throughput, eliminate many of the 8008 shortcomings
`that had by then become apparent, and provide new pro(cid:173)
`cessing capabilities not found in the 8008. The latter in(cid:173)
`cluded handling of 16-bit data types (mainly for address
`computations), BCD arithmetic, enhanced operand ad(cid:173)
`dressing modes; and improved interrupt processing.
`Memory costs had come down and processing s))eed was
`approaching TTL, so larger memory spaces seemed more
`practical. Hence, another goal was direct addressing of
`more than 16K bytes. Symmetry was not a goal because
`the benefits to be gained from making the extensions sym(cid:173)
`metric would not have justified the resulting increase in
`chip size and opcode space.
`
`The 8080 instruction set processor. ;fhe 8080 architec(cid:173)
`ture is an unsymmetrical extension of the 8008. The byte
`handling facilities are augmented with a limited number
`of 16-bit facilities. The memory space is 64K bytes and the
`stack is virtually unlimited. .
`.
`Various alternatives for the. 8080 were considered. The
`simplest involved merely adding a memory stack and
`stack instrm:;tions to the 8008. An intermediate strategy
`was to augment the above with i&.bit arithmetic facilities
`that could be used for explicit address manipulation as
`well as for 16-bit data manipulation; The most difficult
`alternative involved a syrnmetric extension which re(cid:173)
`placed the one-byte M-register instructions with three(cid:173)
`byte generalized memory access instructions. The laSt two
`bytes of these instructions colitained two address mode
`bits specifying indirect addressing and indexing (using HL
`as an index register) and a 14-bit displacement. Although
`this would have been a more versa,tile addressing
`mechanism, it would have resulted in significant code ex(cid:173)
`pansion oil existing 8008 programs. Furthermore, the
`logic needed to implement this solution would have
`precluded 16-bit arithmetic; such arithmetic would not
`have been needed for address manipulations under this
`enhanced addressing facility, but would still have been
`desirable for data manipulations. For these reasons, the
`intermediate approach was finally taken.
`
`15
`
`SP
`
`PC
`
`FLAGS
`
`0
`
`Memory and 1/0 structure. The 8080 can address pp to
`64K bytes of memory, a four-fold increase over the 8008
`(the 14-bit address stack of the 8008 was eliminated). The
`address bus of the 8080 is 16 bits wide (iri contrast to eight
`bits for the 8008), so an entire address Qli1 be sent down
`the bus in one memory cycle. Although the data handling
`facilities of the 8080 are primarily byte-oriented (the 8008
`was exclusively byte-oriented), certain operations permit
`two consecutive bytes of memory to be treated as a single
`data item. The two bytes are called a word. The data bus
`of the 8080 is only eight bits wide, and hence, word ac-
`cesses require an extra memory cycle.

`The most significant eight bits of a word iue located at
`the higher memory address. This results in the same kind Figure 2. 8008 and 8080 registers.
`
`lzl
`lgl
`Ll Ll
`EJ 0
`
`FLAGS
`
`October 1980
`
`47
`
`APPLE EX. 1025
`Page 6
`
`

`
`facilities in the 8080, certain instructions operate on the
`register pairs BC, DE, and HL.
`The seven registers can be used interchangeably for on(cid:173)
`chip temporary storage. The three register pairs are used
`for address manipulations, but their roles are not inter(cid:173)
`changeable; there is an 8080instruction that allows opera(cid:173)
`tions on DE and not BC, and there are address modes that
`access memory indirectly through BC or DE but not
`through HL.
`As in the 8008, the A register has a unique role in
`arithmetic and logical operations: It serves as one of the
`operands and is the receptacle for the result. The HL
`register again has its special role of pointing to the
`pseudoregister M.
`
`Stack pointer and program counter. The 8080 has a
`single program counter instead of the floating program
`counter of the 8008. The program counter is 16 bits (two
`bits more than the 8008's program counter), thereby per(cid:173)
`mitting art address space of 64K.
`The stack is contained in memory instead of on the
`chip, a strategy which removes the restriction of only
`seven levels of nested subroutines. The entries on the
`stack are 16 bits wide. The 16-bit stack pointer is used to
`locate the stack in memory. The execution of a call in(cid:173)
`struction causes the contents of the program counter to be
`pushed onto the stack, and the return instruction causes
`the last stack entry to be popped into the program
`counter. The stack pointer was chosen to run ''downhill''
`
`Decimal arithmetic
`
`Packed BCD
`
`Addition. Numbers can be represented as a sequence of decimal
`digits by using a 4-bit binary encoding of the digits and packing
`these encodings two to a byte. Such a representation is called
`packed BCD (unpacked BCD would contain only one digit per byte).
`In order to preserve this decimal interpretation when performing
`binary addition on packed BCD numbers, the value 6 must be added
`to each digit of the sum whenever (1) the resulting digit is greater
`than 9, or (2) a carry occurs out of this digit as a result of the addi·
`tion. This must be done because the 4-bit encoding contains six
`more combinations than there are decimal digits. Consider the
`following examples (for convenience, numbers are written in hex(cid:173)
`adecimal instead of in binary):
`
`Example 1: 81 + 52
`d2 d1 dO
`8 1
`5 2
`D 3
`6
`
`+
`
`+
`
`names of digit positions
`packed BCD augend
`packed BCD addend
`
`adjustment because d1 greater than 9
`
`3 3
`
`packed BCD sum
`
`Example 2: 28 + 19
`d2 d1 dO
`2 8
`9
`4 1
`6
`4 7
`
`+
`
`+
`
`names of digit positions
`packed BCD augend
`packed BCD addend
`carry occurred out of dO
`adjustment for above carry
`packed BCD sum
`
`For such adjustments to be made, carries out of either digit posi(cid:173)
`tion must be recorded during the addition operation. The 4004,
`8080, 8085; and 8086 use the CARRY and AUXILIARY CARRY flags
`to record carries out of the leftmost and rightmost digits, respec(cid:173)
`tively. All these processors provide an instruction for performing
`the adjustments. Furthermore, they all contain an add-with-carry in(cid:173)
`struction to facilitate the addition of numbers containing more than
`two digits.
`
`Subtraction. Subtraction of packed BCD numbers is
`performed in a similar manner. However, none of the
`Intel processors prior to t.he 8086 provides an instruc(cid:173)
`tion for performing decimal adjustment following a
`subtraction (Zilog's Z-80, introduced two years before
`the 8086, has such an instruction). On processors
`without the subtr;:tct adjustment instruction, subtrac(cid:173)
`tion of packed BCD numbers is accomplished by
`generating the 10's complement of the subtrahend
`and adding.
`Multiplication. Multiplication of packed BCD
`numbers can also be adjusted to give the correct
`decimal result if the out-of-digit carries occurring dur(cid:173)
`ing the multiplication are recorded .. The result of
`multiplying two one-byte operands is two bytes long
`(four digits); out-of-digit carries can occur on any of the
`three low-order digits, all of which must be recorded.
`Furthermore, the carries out of any digit are no longer
`restricted to unity, so counters rather than flags are re(cid:173)
`quired to record th.e carries. This is illustrated in the
`following example (again, numbers are written in hex(cid:173)
`adecimal instead of in binary):
`
`Example 3: 94 • 63
`
`d3 d2 d1 dO
`9 4
`6 3
`1 B c
`3 7 8
`
`3 9 3 c
`6 6
`6 6
`6 6
`4 c 5 c
`
`6 6
`
`5 2 B c
`6
`5 8 B c
`6
`
`5 8 c 2
`
`+
`+
`+
`
`+
`
`+
`

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket