Mercurial > repos > simple16
comparison src/cpu.h @ 25:fb14515266f4
Implemented timer and timer interrupts. Added get/setvbr instructions. Fixed assembler bug. Moved mnemonics into a separate source file
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 31 Mar 2016 23:25:52 -0700 |
parents | 5176efdda5ae |
children | 6e7bfe83d2b0 |
comparison
equal
deleted
inserted
replaced
24:4c9dbfa30a66 | 25:fb14515266f4 |
---|---|
26 | 26 |
27 struct cpu { | 27 struct cpu { |
28 void *system; | 28 void *system; |
29 uint32_t cycles; | 29 uint32_t cycles; |
30 uint32_t clock_inc; | 30 uint32_t clock_inc; |
31 uint32_t current_target; | |
31 uint32_t num_mem_regions; | 32 uint32_t num_mem_regions; |
32 uint16_t regs[16]; | 33 uint16_t regs[16]; |
33 uint16_t exception; | 34 uint16_t exception; |
34 uint16_t exception_pc; | 35 uint16_t exception_pc; |
35 uint16_t exception_sr; | 36 uint16_t exception_sr; |
37 uint16_t vector_base; | 38 uint16_t vector_base; |
38 | 39 |
39 uint16_t prefetch; | 40 uint16_t prefetch; |
40 | 41 |
41 uint8_t state; | 42 uint8_t state; |
43 uint8_t pending_interrupts; | |
42 | 44 |
43 port_handler port_handlers[16]; | 45 port_handler port_handlers[16]; |
44 memory_region mem_regions[]; | 46 memory_region mem_regions[]; |
45 }; | 47 }; |
46 | 48 |
47 cpu* alloc_cpu(uint32_t clock_divider, uint32_t num_regions, memory_region *regions); | 49 cpu* alloc_cpu(uint32_t clock_divider, uint32_t num_regions, memory_region *regions); |
48 void run_cpu(cpu *context, uint32_t target_cycle); | 50 void run_cpu(cpu *context, uint32_t target_cycle); |
51 //To be implemented by system | |
52 uint32_t next_interrupt_cycle(cpu *context, uint8_t mask); | |
53 uint8_t get_current_interrupts(cpu *context); | |
54 void ack_interrupt(cpu *context, int which); | |
55 | |
49 extern char * mnemonics[]; | 56 extern char * mnemonics[]; |
50 extern char * mnemonics_single_src[]; | 57 extern char * mnemonics_single_src[]; |
51 extern char * mnemonics_single_reg[]; | 58 extern char * mnemonics_single_reg[]; |
52 | 59 |
53 enum { | 60 enum { |
97 GETESR, | 104 GETESR, |
98 SETESR, | 105 SETESR, |
99 GETEUR, | 106 GETEUR, |
100 SETEUR, | 107 SETEUR, |
101 GETENUM, | 108 GETENUM, |
102 SETENUM | 109 SETENUM, |
110 GETVBR, | |
111 SETVBR | |
103 }; | 112 }; |
104 | 113 |
105 enum { | 114 enum { |
106 COND_ALWAYS, | 115 COND_ALWAYS, |
107 COND_NEVER, | 116 COND_NEVER, |