WDC 65C02

From Wikipedia, the free encyclopedia
(Redirected from 65C02)

Script error: No such module "Distinguish". Template:Short description

Page Module:Infobox/styles.css has no content.

Lua error in package.lua at line 80: module 'Module:InfoboxImage/data' not found.
W65C02S microprocessor in a PDIP-40 package
General information
Launched1983; 43 years ago (1983)
Common manufacturerPage Template:Plainlist/styles.css has no content.
Performance
Max. CPU clock rate1 MHz to 14 MHz
History
PredecessorTemplate:Pluralize from textMOS Technology 6502

The Western Design Center (WDC) 65C02 microprocessor is an enhanced CMOS version of the popular nMOS-based 8-bit MOS Technology 6502. It uses less power than the original 6502, fixes several problems, and adds new instructions and addressing modes. The power usage is on the order of 10 to 20 times less than the original 6502 running at the same speed;Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found. its reduced power consumption has made it useful in portable computer roles and industrial microcontroller systems. The 65C02 has also been used in some home computers, as well as in embedded applications, including implanted medical devices.

Development of the WDC 65C02 began in 1981[a] with samples released in early 1983.[b] The 65C02 was officially released sometime shortly after.[1] WDC licensed the design to Synertek, NCR, GTE Microcircuits, and Rockwell Semiconductor. Rockwell's primary interest was in the embedded market and asked for several new commands to be added to aid in this role. These were later copied back into the baseline version, at which point WDC added two new commands of their own to create the W65C02. Sanyo later licensed the design as well, and Seiko Epson produced a further modified version as the HuC6280.

Early versions used 40-pin DIP packaging, and were available in 1, 2 and 4 MHz versions, matching the speeds of the original nMOS versions. Later versions were produced in PLCC and QFP packages, as well as PDIP, and with much higher clock speed ratings. The current version from WDC, the W65C02S-14 has a fully static core and officially runs at speeds up to 14 MHz when powered at 5 volts.

Introduction and features

The 65C02 is a low cost, general-purpose 8-bit microprocessor (8-bit registers and data bus) with a 16-bit program counter and address bus. The register set is small, with a single 8-bit accumulator (A), two 8-bit index registers (X and Y), an 8-bit status register (P), and a 16-bit program counter (PC). In addition to the single accumulator, the first 256 bytes of RAM, the "zero page" ($0000 to $00FF), allow faster access through addressing modes that use an 8-bit memory address instead of a 16-bit address. The stack lies in the next 256 bytes, page one ($0100 to $01FF), and cannot be moved or extended. The stack grows downward with the stack pointer (S or SP) starting at $01FF and decrementing with each byte that is pushed.[2] The 65C02 has a variable-length instruction set, varying between one and three bytes per instruction.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found.

The basic architecture of the 65C02 is identical to the original 6502, and may be considered a low-power implementation of that design. At 1 MHz, the most popular speed for the original 6502, the 65C02 requires only 20 mW, while the original uses 450 mW, a reduction of over twenty times.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found. The manually optimized core and low power use is intended to make the 65C02 well suited for low power system-on-chip (SoC) designs.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found.

A Verilog hardware description model is available for designing the W65C02S core into an application-specific integrated circuit (ASIC) or a field-programmable gate array (FPGA).[3] As is common in the semiconductor industry, WDC offers a development system, which includes a developer board, an in-circuit emulator (ICE) and a software development system.[4]

The W65C02S6T is the production version as of 2025, and is available in PDIP-40, PLCC-44 and QFP-44 packages. The maximum officially supported Ø2 (primary) clock speed is 14 MHz when operated at 5 volts, indicated by a –14 part number suffix (hobbyists have developed 65C02 homebrew systems that run significantly faster than the official rating). The "S" designation indicates that the part has a fully static core, a feature that supports stopping the Ø2 clock in either phase with no loss of state.[5]  Typical microprocessors not implemented in CMOS have dynamic cores and will lose state (and thus crash) if they are not continuously clocked at a rate between some minimum and maximum specified values.

The "6T" designation indicates the process geometry (0.6µ) and that Taiwan Semiconductor Manufacturing Company (TSMC) is the foundry that produces WDC's wafers.

65C02 registers
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (bit position)
Main registers
  A Accumulator
Index registers
  X X Index Register
  Y Y Index Register
0 0 0 0 0 0 0 1 S Stack Pointer
Program counter
PC Program Counter
Status register
  N V - B D I Z C Status Register

General logic features

File:Sitronix ST2064B silicon die.jpg
Die photograph of a Sitronix ST2064B microcontroller showing embedded W65C02S core in the upper right

Logic features

  • Vector pull (VPB) output indicates when interrupt vectors are being addressed.
  • Memory lock (MLB) output indicates to other bus masters when a read-modify-write instruction is being processed.
  • WAit-for-Interrupt (WAI) and SToP (STP, stop-the-clock) instructions reduce power consumption, decrease interrupt latency and enable synchronization with external events.

Electrical features

  • Supply voltage specified at 1.71 V to 5.25 V.
  • Current consumption (core) of 0.15 and 1.5 mA per MHz at 1.89 V and 5.25 V respectively.
  • Variable length instruction set, enabling code size optimization over fixed length instruction set processors, results in power savings.
  • Fully static core allows stopping the clock to conserve power.

Clocking features

The W65C02S may be operated at any convenient supply voltage (VDD) between 1.8 and 5 volts (±5%). The data sheet AC characteristics table lists operational characteristics at 5 V at 14 MHz, 3.3 V or 3 V at 8 MHz, 2.5 V at 4 MHz, and 1.8 V at 2 MHz.  This information may be an artifact of an earlier data sheet, as a graph indicates that typical devices are capable of operation at higher speeds than suggested by the AC characteristics table, and that reliable operation at 20 MHz should be readily attainable with VDD at 5 volts, assuming the supporting hardware will allow it.

The W65C02S support for arbitrary clock rates allows it to use a clock that runs at a rate ideal for some other part of the system, such as 13.5 MHz (digital SDTV luma sampling rate), 14.31818 MHz (NTSC colour carrier frequency × 4), 14.75 MHz (PAL square pixels), 14.7456 (serial bit rate crystal), etc., as long as VDD is sufficient to support the frequency. Designer Bill Mensch has pointed out that FMAX is affected by off-chip factors, such as the capacitive load on the microprocessor's pins. Minimizing load by using short signal tracks and fewest devices helps raise FMAX.  The PLCC and QFP packages have less pin-to-pin capacitance than the PDIP package, and are more economical in the use of printed circuit board space.

WDC has reported that FPGA realizations of the W65C02S have been successfully operated at 200 MHz.[citation needed]

Comparison with the NMOS 6502

Basic architecture

Although the 65C02 can mostly be thought of as a low-power 6502, it also fixes several bugs found in the original and adds new instructions, addressing modes and features that can assist the programmer in writing smaller and faster-executing programs. It is estimated that the average 6502 assembly language program can be made 10 to 15 percent smaller on the 65C02 and see a similar improvement in performance, largely through avoided memory accesses through the use of fewer instructions to accomplish a given task.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found.

Undocumented instructions removed

The original 6502 has 56 instructions, which, when combined with different addressing modes, produce a total of 151 opcodes of the possible 256 8-bit opcode patterns. The remaining 105 unused opcodes are undefined, with the set of codes with low-order 4-bits with 3, 7, B or F left entirely unused, the code with low-order 2 having only a single opcode.[6]

On the 6502, some of these leftover codes actually perform computation. Due to the way the 6502's instruction decoder works, simply setting certain bits in the opcode causes parts of the instruction processing to take place. Some of these opcodes immediately crash the processor, while others perform useful functions and were even given unofficial assembler mnemonics by some programmers.[7]

The 65C02 adds new opcodes that use some of these previously undocumented instruction slots. For example, $FF is used for the new BBS instruction. Those which remain truly unused are equivalent to NOPs. 6502 programs using those opcodes will not work on the 65C02.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found.

Bug fixes

A flaw that is present in all NMOS variants of the 6502 involves the jump instruction when using indirect addressing. In this addressing mode, the target address of the JMP instruction is fetched from memory, the jump vector, rather than being an operand to the JMP instruction. For example, JMP ($1234) would fetch the value in memory locations Page Template:Mono/styles.css has no content.$1234 (least significant byte) and Page Template:Mono/styles.css has no content.$1235 (most significant byte) and load those values into the program counter, which would then cause the processor to continue execution at the address stored in the vector.

The flaw, which some consider a bug, appears when the vector address ends in Page Template:Mono/styles.css has no content.$FF, which is the boundary of a memory page. In this case, JMP will fetch the most significant byte of the target address from Page Template:Mono/styles.css has no content.$00 of the original page rather than Page Template:Mono/styles.css has no content.$00 of the new page. Hence JMP ($12FF) would get the least significant byte of the target address at Page Template:Mono/styles.css has no content.$12FF and the most significant byte of the target address from Page Template:Mono/styles.css has no content.$1200 rather than Page Template:Mono/styles.css has no content.$1300. The original 6502 documentation does not state that the address will cross pages in this fashion, so one cannot consider it to be a bug per-se. But many 6502 users perceived this complication to be a weakness, so it was eliminated in the 65C02 at the cost of spending another cycle to update the pointer.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found.

Another by-design weakness that was revised by popular demand, the state of the (D)ecimal flag in the NMOS 6502's status register is undefined after a reset or interrupt. This means programmers have to set the flag to a known value in order to avoid random errors caused by arithmetic operations performed in the mode other than the one intended, constituting software bugs. As a result, one finds a CLD instruction (CLear Decimal) in almost all 6502 interrupt handlers, as well as early in the reset code. The 65C02 automatically clears this flag after pushing the status register onto the stack in response any interrupt or in response to a hardware reset, thus placing the processor back into binary arithmetic mode.[8] This usually saves a few bytes in the software and eliminates the possibility of a common programming mistake, at the cost of increasing the size of code that runs in decimal mode as programmers have to remember to SED in places they previously assumed it would still be set.

During decimal mode arithmetic, the NMOS 6502 will put the (N)egative, o(V)erflow and (Z)ero flags into officially undefined states. Programmers found that the CPU updates these three flags to reflect the result of underlying binary arithmetic, that is, the flags reflect a result computed prior to the processor performing decimal correction. In contrast, the 65C02 sets these flags according to the result of decimal arithmetic, at the cost of an extra clock cycle per arithmetic instruction.[8] Some writers assert that the V flag on the 65C02 is still incorrect in decimal mode, but the flag may also be considered to be meaningless because decimal arithmetic is always unsigned.

When executing a read-modify-write (R-M-W) instruction, such as INC addr, all NMOS variants will do a double write on addr, first rewriting the current value found at addr and then writing the modified value. This behavior can result in difficult-to-resolve bugs if addr is a hardware register. This may occur if the hardware is watching for changes to the value in the register and then performs an action, in this case, it will perform two actions, one with the original value and then again with the new value. The 65C02 instead performs a double read of addr, followed by a single write.

When performing indexed addressing, if indexing crosses a page boundary all NMOS variants will read from an invalid address before accessing the correct address. As with a R-M-W instruction, this behavior can cause problems when accessing hardware registers via indexing. The 65C02 fixed this problem by performing a dummy read of the instruction opcode when indexing crosses a page boundary. However, this fix introduced a new bug[citation needed] that occurs when the base address is on an even page boundary (which means indexing will never cross into the next page). With the new bug, a dummy read is performed on the base address prior to indexing, such that LDA $1200,X will do a dummy read on Page Template:Mono/styles.css has no content.$1200 prior to the value of X being added to Page Template:Mono/styles.css has no content.$1200. Again, if indexing on hardware register addresses, this bug can result in undefined behavior.

If an NMOS 6502 is fetching a BRK (software interrupt) opcode at the same time a hardware interrupt occurs, the BRK will be ignored as the processor reacts to the hardware interrupt. The 65C02 correctly handles this situation by servicing the interrupt and then executing BRK.

New addressing modes

The 6502 has two indirect addressing modes which dereference through 16-bit addresses stored in page zero:

  • Indexed indirect e.g. LDA ($10,X). Adds the X register to the given page zero address before reading the 16-bit vector. In this example, if X is 5 then the 16-bit address is read from locations $15/$16. This is useful when there is an array of pointers in page zero.
  • Indirect indexed e.g. LDA ($10),Y. Adds the Y register to the 16-bit vector read from the given page zero address. In this example, if Y is 5 and locations Page Template:Mono/styles.css has no content.$10/$11 contain the vector Page Template:Mono/styles.css has no content.$1000 then the read address will be Page Template:Mono/styles.css has no content.$1005. This performs pointer-offset addressing.

A downside of this model is that if indexing is not needed but the address is in the zero page, one of the index registers must still be set to zero and used in one of these instructions. Therefore the 65C02 adds a non-indexed indirect addressing mode, e.g. LDA ($10), to all instructions that can use indexed indirect and indirect indexed modes. This leaves the index registers free for other uses.[9]

The 6502's Page Template:Mono/styles.css has no content.JMP instruction has a unique (among 6502 instructions) addressing mode known as "absolute indirect" that reads a 16-bit value from a given memory address and then jumps to the address in that 16-bit value. For instance, if memory location Page Template:Mono/styles.css has no content.$A000 holds Page Template:Mono/styles.css has no content.$34 and Page Template:Mono/styles.css has no content.$A001 holds Page Template:Mono/styles.css has no content.$12, JMP ($A000) will read those two bytes, construct the value Page Template:Mono/styles.css has no content.$1234, and then jump to that location.

One common use for indirect addressing is to build branch tables, a list of entry points for subroutines that can be accessed using an index. For instance, a device driver might list the entry points for Page Template:Mono/styles.css has no content.OPEN, Page Template:Mono/styles.css has no content.CLOSE, Page Template:Mono/styles.css has no content.READ, etc in a table at Page Template:Mono/styles.css has no content.$A000. Page Template:Mono/styles.css has no content.READ is the third entry, zero indexed, and each address requires 16-bits, so to call Page Template:Mono/styles.css has no content.READ one would use something similar to JMP ($A004). If the driver is updated and the subroutine code moves in memory, any existing code will still work as long as the table of pointers remains at Page Template:Mono/styles.css has no content.$A000.

The 65C02 adds the new "indexed absolute indirect" mode which eases the use of branch tables. This mode adds the value of the X register to the absolute address and takes the 16-bit address from the resulting location. For instance, to access the Page Template:Mono/styles.css has no content.READ function from the table above, one stores 4 in X, then executes JMP ($A000,X). This style of access makes accessing branch tables simpler as a single base address is used in conjunction with an 8-bit offset.[9] The same can be achieved in the NMOS version using indexed indirect mode, but only if the table is in the zero page, a limited resource. Allowing these tables to be constructed outside zero page not only lessens the demand for this resource but also allows the tables to be placed in ROM.

New and modified instructions

In addition to the new addressing modes, the "base model" 65C02 also adds a set of new instructions.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found.

  • INC and DEC with no parameters now increment or decrement the accumulator. This was an odd oversight in the original instruction set, which only included INX/DEX, INY/DEY, and INC addr/DEC addr. Some assemblers use the alternate forms INA/DEA or INC A/DEC A.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found.
  • STZ addr, STore Zero in addr, replaces the need to LDA #0;STA addr and doesn't require changing the value of the accumulator. As this task is common in most programs, using STZ can reduce code size, both by eliminating the LDA as well as any code needed to save the value of the accumulator, typically a PHA PLA pair.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found.
  • PHX,PLX,PHY,PLY push and pull the X and Y registers to and from the stack. Previously, only the accumulator and status register (Page Template:Mono/styles.css has no content.P) had push and pull instructions. X and Y could be stacked only by moving them to the accumulator first with TXA or TYA, thereby changing the accumulator contents, then using PHA.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found.
  • BRA, branch always, operates like a JMP but uses a 1-byte relative address like other branches (which all are conditional), saving a byte. The speed is often the same as the 3 cycle absolute JMP unless a page is crossed which would make the BRA version 1 cycle longer (4 cycles).[10] As the address is relative, it is also useful when writing relocatable code.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found.

Bit manipulation instructions

Both WDC and Rockwell contributed improvements to the bit testing and manipulation functions in the 65C02. WDC added new addressing modes to the BIT instruction that was present in the 6502, as well two new instructions for convenient manipulation of bit fields, a common activity in device drivers.

Page Template:Mono/styles.css has no content.BIT in the 65C02 adds immediate mode, zero page indexed by X and absolute indexed by X addressing.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found. Immediate mode addressing is particularly convenient in that it is completely non-destructive. For example:

LDA $1234
BIT #%00010000

may be used in place of:

LDA $1234
AND #%00010000

The Page Template:Mono/styles.css has no content.AND operation changes the value in the accumulator, so the original value loaded from $1234 is lost. Using Page Template:Mono/styles.css has no content.BIT leaves the value in the accumulator unchanged, so subsequent code can make additional tests against the original value, avoiding having to re-load the value from memory.

In addition to the enhancements of the Page Template:Mono/styles.css has no content.BIT instruction, WDC added two instructions designed to conveniently manipulate bit fields:

  • TSB addr and TRB addr, Test and Set Bits and Test and Reset Bits.
A mask in the accumulator (.A) is logically ANDed with memory at Page Template:Mono/styles.css has no content.addr, which location may be zero page or absolute. The Z flag in the status register is conditioned according to the result of the logical AND—no other status register flags are affected. Furthermore, bits in Page Template:Mono/styles.css has no content.addr are set (TSB) or cleared (TRB) according to the mask in .A. After the logical Page Template:Mono/styles.css has no content.AND, TSB performs a logical Page Template:Mono/styles.css has no content.OR of .A with the memory byte and stores the result at Page Template:Mono/styles.css has no content.addr, whereas TRB instead performs a logical Page Template:Mono/styles.css has no content.AND of NOT .A with the memory byte and stores the result at Page Template:Mono/styles.css has no content.addr. In both cases, the Z flag in the status register indicates the result of .A AND addr before the content of Page Template:Mono/styles.css has no content.addr is changed. The other flags are not affected. TRB and TSB thus replace a sequence of instructions, essentially combining the Page Template:Mono/styles.css has no content.BIT instruction with additional steps to save the computational changes, but without the additional steps affecting the flags, and without affecting the V flag as Page Template:Mono/styles.css has no content.BIT does.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found.

Rockwell's changes added more bit manipulation instructions for any bit in zero page, to directly set or reset a bit with a 2-byte instruction, or to test and branch on a bit with a single 3-byte instruction. The new instructions were available from the start in Rockwell's R65C00 family,Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found. but were not part of the original 65C02 specification and not found in versions made by WDC or its other licensees. These were later copied back into the baseline design, and were available in later WDC versions.

Rockwell-specific instructions are:

  • SMBbit# zp and RMBbit# zp. Set or Reset (clear) bit number bit# in zero page byte zp.
RMB and SMB are used to clear (Page Template:Mono/styles.css has no content.RMB) or set (Page Template:Mono/styles.css has no content.SMB) individual bits in a bit field, each replacing a sequence of three instructions. As Page Template:Mono/styles.css has no content.RMB and Page Template:Mono/styles.css has no content.SMB allow zero page addressing only, these instructions have limited usefulness and are primarily of value in systems in which device registers are present in zero page.[citation needed] The Page Template:Mono/styles.css has no content.bit# component of the instruction is part of the opcode and is often written as part of the mnemonic, such as SMB1 $12 which sets bit 1 in zero-page address Page Template:Mono/styles.css has no content.$12 (a/k/a address Page Template:Mono/styles.css has no content.$0012). Some assemblers treat Page Template:Mono/styles.css has no content.bit# as part of the instruction's operand, e.g., SMB 1,$12, which has the advantage of allowing it to be replaced by a variable name or calculated number.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found.
  • BBSbit# zp,addr and BBRbit# zp,addr. Branch on Bit Set/Reset.
The same zero-page addressing and limitations as Page Template:Mono/styles.css has no content.RMB and Page Template:Mono/styles.css has no content.SMB apply, but these instructions test, rather than assign, the selected bit of the zero page byte zp and then branch to Page Template:Mono/styles.css has no content.addr if that bit is clear (Page Template:Mono/styles.css has no content.BBR) or set (Page Template:Mono/styles.css has no content.BBS). Also as with Page Template:Mono/styles.css has no content.RMB and Page Template:Mono/styles.css has no content.SMB above, the Page Template:Mono/styles.css has no content.bit# component of the instruction is often written as part of the mnemonic, such as BBS1 $12,addr which branches to the address label Page Template:Mono/styles.css has no content.addr if bit 1 of the byte at zero-page address Page Template:Mono/styles.css has no content.$12 is set. Again, some assemblers treat Page Template:Mono/styles.css has no content.bit# as part of the instruction's operand, e.g., BBS 1,$12,addr, with the advantage of allowing it to be replaced by a variable name or calculated number.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found.

Each of Page Template:Mono/styles.css has no content.RMB, Page Template:Mono/styles.css has no content.SMB, Page Template:Mono/styles.css has no content.BBR, and Page Template:Mono/styles.css has no content.BBS replaces a sequence of three instructions.Lua error in package.lua at line 80: module 'Module:Footnotes/anchor_id_list' not found.

Low-power modes

In addition to the new commands above, WDC also added the STP and WAI instructions for supporting low-power modes.

STP, STop the Processor, halts all processing until a hardware reset is issued. This can be used to put a system to "sleep" and then rapidly "wake" (reactivate) it with a reset.

WAIt has a similar effect, halting all processing, but this instruction resumes normal execution on the reception of an interrupt. Without this instruction, waiting for a hardware interrupt generally involves running a loop suspend the program until interrupt processing breaks out of the loop, sometimes known as "spinning". This means the processor runs during the entire process, using power while doing (almost) nothing, even when no interrupts are occurring. In the 65C02, interrupt code can be written by having a WAI followed immediately by a JSR or JMP to the handler. When the WAI is encountered, processing stops and the processor goes into low-power mode. When an interrupt is received, the processor immediately executes the JSR and handles the request.

This has the added advantage of slightly improving performance. In the spinning case, the interrupt might arrive in the middle of one of the loop's instructions, and to allow it to restart after returning from the handler, the processor spends three cycles to save its location. With WAI, the processor enters the low-power state in a known location where all instructions are guaranteed to be complete, so when the interrupt arrives it cannot possibly interrupt an instruction and the interrupt response can be immediate. Plus, since the program expects the interrupt, the processor can safely continue without spending time saving state; the program is responsible to perform any necessary state-saving before the WAI.

65SC02

The 65SC02 is a variant of the WDC 65C02 without WAI, STP and bit instructions.[11][12]

Uses

Home computers

Video game consoles

Other products

See also

Notes

Page Template:Reflist/styles.css has no content.

  1. ^ Some sources, including prior versions of this article, claim 1978. This was the date that Bill Mensch, the primary designer, formed WDC. In a 1984 article, Mensch specifically states 1981 as the start date.
  2. ^ Wagner's June 1983 article mentions it being available for "several months". Given typical publication delays at that point, this may date it to as early as late 1982. Another source points to 1980, see talk page.

References

Citations

Page Template:Reflist/styles.css has no content.

  1. ^ Page Module:Citation/CS1/styles.css has no content."Softalk". Softalk Publishing. Vol. 3, no. 10. June 1983. p. 199. Retrieved 24 May 2022.
  2. ^ Page Module:Citation/CS1/styles.css has no content.Koehn, Philipp (2 March 2018). "6502 Stack" (PDF).
  3. ^ Page Module:Citation/CS1/styles.css has no content."6502 CPU Projects in HDL (for FPGA)".
  4. ^ Page Module:Citation/CS1/styles.css has no content."W65C02DB Developer Board".
  5. ^ Page Module:Citation/CS1/styles.css has no content."W65C02S-14".
  6. ^ Page Module:Citation/CS1/styles.css has no content.Parker, Neil. "The 6502/65C02/65C816 Instruction Set Decoded". Neil Parker's Apple II page.
  7. ^ Page Module:Citation/CS1/styles.css has no content.Vardy, Adam (22 August 1995). "Extra Instructions Of The 65XX Series CPU".
  8. ^ a b Page Module:Citation/CS1/styles.css has no content."Differences between NMOS 6502 and CMOS 65c02". Retrieved 27 February 2018. N, V, and Z flags were incorrect after decimal operation (but C was ok).
  9. ^ a b Page Module:Citation/CS1/styles.css has no content.Clark, Bruce. "65C02 Opcodes".
  10. ^ Page Module:Citation/CS1/styles.css has no content."W65C02S Datasheet" (PDF).
  11. ^ Page Module:Citation/CS1/styles.css has no content.GTE Microcircuits Data Book. GTE Microcircuits. 1984. p. 1–3. Retrieved 2024-05-02.
  12. ^ Page Module:Citation/CS1/styles.css has no content.Zaks, Rodnay (1983). Programming the 6502. Sybex. p. 348. ISBN 0895881357.
  13. ^ Page Module:Citation/CS1/styles.css has no content."8-The Apple IIc". Apple II History. 2010-06-23. Retrieved 2023-10-31.
  14. ^ Page Module:Citation/CS1/styles.css has no content."BBC Master Acorn Computer". www.old-computers.com. Retrieved 2023-10-31.
  15. ^ Page Module:Citation/CS1/styles.css has no content."LASER 128 / 128EX / 128EX2 Video Technology". www.old-computers.com. Retrieved 2023-10-31.
  16. ^ Page Module:Citation/CS1/styles.css has no content."HuC6280 - Archaic Pixels".

Bibliography

Further reading

Script error: No such module "Labelled list hatnote".

Lua error in package.lua at line 80: module 'Module:Navbox/configuration' not found.