Mercurial > repos > simple16
comparison src/cpu.h @ 0:7e44f7d5810b
Initial commit. CPU working well enough for simple hello world program.
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 22 Mar 2016 22:44:02 -0700 |
parents | |
children | 6204c81e2933 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:7e44f7d5810b |
---|---|
1 #ifndef CPU_H_ | |
2 #define CPU_H_ | |
3 | |
4 | |
5 typedef struct cpu cpu; | |
6 | |
7 typedef void (*port_write_fun) (cpu *context, uint8_t port, uint16_t value); | |
8 typedef uint16_t (*port_read_fun) (cpu *context, uint8_t port); | |
9 | |
10 typedef struct { | |
11 port_write_fun write; | |
12 port_read_fun read; | |
13 } port_handler; | |
14 | |
15 | |
16 #define MEM_READ 1 | |
17 #define MEM_WRITE 2 | |
18 | |
19 typedef struct { | |
20 uint8_t *base; | |
21 uint16_t start; | |
22 uint16_t end; | |
23 uint8_t flags; | |
24 } memory_region; | |
25 | |
26 | |
27 struct cpu { | |
28 uint32_t cycles; | |
29 uint32_t clock_inc; | |
30 uint32_t num_mem_regions; | |
31 uint16_t regs[16]; | |
32 uint16_t exception; | |
33 uint16_t exception_pc; | |
34 uint16_t exception_sr; | |
35 uint16_t exception_ur; | |
36 uint16_t vector_base; | |
37 | |
38 uint16_t prefetch; | |
39 | |
40 uint8_t state; | |
41 | |
42 port_handler port_handlers[16]; | |
43 memory_region mem_regions[]; | |
44 }; | |
45 | |
46 cpu* alloc_cpu(uint32_t clock_divider, uint32_t num_regions, memory_region *regions); | |
47 void run_cpu(cpu *context, uint32_t target_cycle); | |
48 | |
49 enum { | |
50 LDIM, | |
51 LDIMH, | |
52 LD8, | |
53 LD16, | |
54 STR8, | |
55 STR16, | |
56 ADD, | |
57 ADC, | |
58 AND, | |
59 OR, | |
60 XOR, | |
61 LSL, | |
62 LSR, | |
63 ASR, | |
64 BCC, | |
65 SINGLE_SOURCE | |
66 }; | |
67 | |
68 enum { | |
69 MOVE, | |
70 NEG, | |
71 NOT, | |
72 CMP, | |
73 CALL, | |
74 SWAP, | |
75 IN, | |
76 OUT, | |
77 INI, | |
78 OUTI, | |
79 ADDI, | |
80 ANDI, | |
81 ORI, | |
82 LSI, | |
83 ASRI, | |
84 SINGLE_REG | |
85 }; | |
86 | |
87 enum { | |
88 RETI, | |
89 TRAP, | |
90 TRAPI, | |
91 GETEPC, | |
92 SETEPC, | |
93 GETESR, | |
94 SETESR, | |
95 GETEUR, | |
96 SETEUR, | |
97 GETENUM, | |
98 SETENUM | |
99 }; | |
100 | |
101 enum { | |
102 COND_ALWAYS, | |
103 COND_NEVER, | |
104 COND_ZERO, | |
105 COND_NZERO, | |
106 COND_NEG, | |
107 COND_POS, | |
108 COND_CARRY, | |
109 COND_NCARRY, | |
110 COND_GREATER, | |
111 COND_LEQ | |
112 }; | |
113 | |
114 #endif //CPU_H_ |