Go Back

Source code


Name: cpu6502_true_cycle
Created: Jan 23, 2008
Updated: Jul 24, 2013
SVN Updated: Mar 15, 2010

Other project properties

Category: Processor
Language: VHDL
Development status: Stable
Additional info: Design done , FPGA proven
WishBone Compliant: No
License: GPL


This is a VHDL/Verilog IP core with True Cycle Timing for Rockwell's 6502 8-Bit CPU. With full functional input signals like ready, interrupt, non maskable interrupt and set overflow flag. Also available is the output signal sync which signals an op fetch. The ready signal is usable for DMA operations or multiprocessing. Signal sync can be used for software/hardware debugging via single stepping (single cycles or complete op codes) the 6502.
This core was successfully tested in an APPLE ][+ SoC (completely designed into a FPGA with Z80 Softcard, DISK2 System, 80C Card, Language Card and 48kB of main memory).
Please feel free to contact me for any reasons like ideas or error messages.


- true cycle timing for all official opcodes
- unknown op's decoded as "NOP/0xEA"
- one clock source
- input signal "rdy_i" for generating waitstates (see original documentation of R6502)
- output signal "sync_o" to indicate an op fetch (see original documentation of R6502)
- input signal "so_n_i" sets the internal OV Flag (see original documentation of R6502)
- fully synthesizable VHDL and Verilog


CORE: Ready for use and downloadable via SVN
LICENSE: Puplished under GPL V3
DOCUMENTATION: "on working"
TESTBENCHES: "on working"
TESTSOFTWARE: "on working"
- all op codes: simulated and approved under real working conditions (APPLE ][plus SoC)
- irq_n_i: simulated and run in real environment
- nmi_n_i: simulated and run in real environment
- so_n_i: only simulated
- all other signals: simulated and approved under real working conditions (APPLE ][plus SoC)
History :
- Correct interrupt sequences for NMI and IRQ
- Correct "RTI" (wrong: use of stack pointer)
- Rename all states of "FSM Execution Unit" for better reading
- Update HTML documentation
- (90%) Finish working for Specification of cpu6502_tc
- Phaze 2: Remove unused nets, registers and modules
- Added Verilog source files on demand by customers (for trial use)
- Remove unused nets, registers and modules
- Update HTML documentation to visualize the Execution unit
- State of project
- CVS loaded with new core and HTML documentation
- correct the handling of the stack while BRK, IRQ and NMI
- correct the handling of "B" flag while BRK
- correct the alignment between addresses and data while BRK, IRQ and NMI when writing onto the stack