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,