This component comes from the opencores t6507lp project and makes it socgen compatible. The original project checked in by Gabriel Oshiro Zardo and Samuel Nascimento Pagliarini was a atari 2600 on a chip. This project only takes the t6507 processor and uses it as a 6502. It had some documentation and a test suite that was somewhat working.
6
7
I chose it because a 6502 is a useful module and had clean partitioning. The following changes were made:
8
9
10
11
1) Converted to a full 16 bit address bus.
12
13
also hardcoded the 8 bit data bus. Hasn't changed in thirty five years.
14
15
2) Converted parameters to `defines
16
17
3) Converted reset to synchronous active high
18
19
4) Converted test suite to socgen format
20
21
Each test is in it's own subdirectory and any needed code is assembled and loaded into sram
22
23
5) Design had no reset/interrupt vectors. Added reset vector. May add interupt(s) later.
24
25
6) Added enable logic so that it could work with synchronous sram
26
27
7) Design doesn't appear to be fully functional.
28
CLC followed by BCC missed the offset by one clock cycle.
29
JSR doesn't push high address on stack. puts wrong data in page 00
30
Branch backwards doesn't work.
31
read/modify/write did not work
32
pha pushed onto page 0
33
pha data latched one clock to late
34
jmp indirect didn't work
35
36
8) Split T6502_fsm into smaller blocks for ease of documenting and verifying
37
38
9) Move branch decision logic into sequencer block
39
40
10) removed BCD logic
41
42
11) moved alu_opcode to instr_decode block
43
44
12) created datapath logic for alu_operand_a, alu_operand_b and alu_operand_c
45
46
13) split alu into alu_control and alu blocks
47
48
14) reworked the inst_decode signals to alu and pulled datapath out of sequencer
49
50
15) removed the latched alu_result. Outside of alu now uses raw
51
52
53
54
55
This appears to be a work in progress with numerous issues. I fixed enough of them so that I can
56
synthesize into an fpga and it runs the io_poll program on a Nexys2 Board. I will commit this as