summaryrefslogtreecommitdiff
path: root/cpu.c
diff options
context:
space:
mode:
authorvin <git@vineetk.net>2024-05-20 19:39:19 +0530
committervin <git@vineetk.net>2024-05-20 19:39:23 +0530
commitdd757c4324f856c8f91d79a4f741d8bb6477064a (patch)
tree0dfcfc371fb9395a49843b1ba95bfdb0d12d3ebe /cpu.c
parent5fcf579ad42a4fce332bbc04bb4ea364e0034c70 (diff)
start working on 6502 cpu
Diffstat (limited to 'cpu.c')
-rw-r--r--cpu.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/cpu.c b/cpu.c
new file mode 100644
index 0000000..4a16835
--- /dev/null
+++ b/cpu.c
@@ -0,0 +1,56 @@
1#include <stdint.h>
2
3struct cpu_flags {
4 uint8_t carry : 1;
5 uint8_t zero : 1;
6 uint8_t interrupt_disable : 1;
7 uint8_t decimal_mode : 1;
8 uint8_t brk : 1;
9 uint8_t unused : 1;
10 uint8_t overflow : 1;
11 uint8_t negative : 1;
12};
13
14struct registers {
15 uint8_t acc, x, y, sp;
16 struct cpu_flags status;
17 uint16_t pc;
18};
19struct registers regs;
20
21enum addressing_mode {
22 AM_ACCUMULATOR,
23 AM_IMMEDIATE,
24 AM_ZERO_PAGE,
25 AM_ZERO_PAGE_X,
26 AM_ZERO_PAGE_Y,
27 AM_RELATIVE,
28 AM_ABSOLUTE,
29 AM_ABSOLUTE_X,
30 AM_ABSOLUTE_Y,
31 AM_INDIRECT,
32 AM_INDIRECT_X,
33 AM_INDIRECT_Y,
34 AM_INDEXED_INDIRECT,
35 AM_INDIRECT_INDEXED,
36};
37
38uint8_t addrbus[0x10000];
39
40/* example program taken from https://bugzmanov.github.io/nes_ebook/chapter_3_1.html */
41uint8_t program[] = { 0xa9, 0xc0, 0xaa, 0xe8, 0x00 };
42
43void interpret(void)
44{
45 uint8_t opcode;
46 regs.pc = 0;
47
48 for (;;) {
49 opcode = program[regs.pc++];
50
51 switch (opcode) {
52 default:
53 break;
54 }
55 }
56}