The 6502 datapath designed for this project contains six 8bit registers, with on 16bit program counter with separate read and writes for the upper and lower bytes. There is a main alu which supports all of the main mathematical operations and also can be a no op through gate for transferring values. There are separate incrementors and decrementors on the program counter and stack pointer because the main alu cannot do these operations since certain instructions like stack operations require a stack decrement while the alu is in use. There also is a memory interface that can either read or drive the memory bus lines for reading and writing. There is separate latches for outputting the different addresses from datapath registers for each of the different types of addressing which instructions require.