Mercurial > repos > blastem
comparison jagcpu.h @ 1118:c48d5191ddc9
Added Jaguar header missed in earlier commits
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 22 Dec 2016 19:54:11 -0800 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1117:928a65750345 | 1118:c48d5191ddc9 |
---|---|
1 #ifndef JAGCPU_H_ | |
2 #define JAGCPU_H_ | |
3 | |
4 enum { | |
5 JAG_ADD, | |
6 JAG_ADDC, | |
7 JAG_ADDQ, | |
8 JAG_ADDQT, | |
9 JAG_SUB, | |
10 JAG_SUBC, | |
11 JAG_SUBQ, | |
12 JAG_SUBQT, | |
13 JAG_NEG, | |
14 JAG_AND, | |
15 JAG_OR, | |
16 JAG_XOR, | |
17 JAG_NOT, | |
18 JAG_BTST, | |
19 JAG_BSET, | |
20 JAG_BCLR, | |
21 JAG_MULT, | |
22 JAG_IMULT, | |
23 JAG_IMULTN, | |
24 JAG_RESMAC, | |
25 JAG_IMACN, | |
26 JAG_DIV, | |
27 JAG_ABS, | |
28 JAG_SH, | |
29 JAG_SHLQ, | |
30 JAG_SHRQ, | |
31 JAG_SHA, | |
32 JAG_SHARQ, | |
33 JAG_ROR, | |
34 JAG_RORQ, | |
35 JAG_CMP, | |
36 JAG_CMPQ, | |
37 GPU_SAT8, | |
38 DSP_SUBQMOD = GPU_SAT8, | |
39 GPU_SAT16, | |
40 DSP_SAT16S = GPU_SAT16, | |
41 JAG_MOVE, | |
42 JAG_MOVEQ, | |
43 JAG_MOVETA, | |
44 JAG_MOVEFA, | |
45 JAG_MOVEI, | |
46 JAG_LOADB, | |
47 JAG_LOADW, | |
48 JAG_LOAD, | |
49 GPU_LOADP, | |
50 DSP_SAT32S = GPU_LOADP, | |
51 JAG_LOAD_R14_REL, | |
52 JAG_LOAD_R15_REL, | |
53 JAG_STOREB, | |
54 JAG_STOREW, | |
55 JAG_STORE, | |
56 GPU_STOREP, | |
57 DSP_MIRROR = GPU_STOREP, | |
58 JAG_STORE_R14_REL, | |
59 JAG_STORE_R15_REL, | |
60 JAG_MOVE_PC, | |
61 JAG_JUMP, | |
62 JAG_JR, | |
63 JAG_MMULT, | |
64 JAG_MTOI, | |
65 JAG_NORMI, | |
66 JAG_NOP, | |
67 JAG_LOAD_R14_INDEXED, | |
68 JAG_LOAD_R15_INDEXED, | |
69 JAG_STORE_R14_INDEXED, | |
70 JAG_STORE_R15_INDEXED, | |
71 GPU_SAT24, | |
72 GPU_PACK, | |
73 DSP_ADDQMOD = GPU_PACK, | |
74 GPU_UNPACK //virtual opcode, UNPACK is PACK with a reg1 field set to 1 | |
75 }; | |
76 | |
77 #define JAGCPU_NOREG -1 | |
78 | |
79 | |
80 typedef struct { | |
81 cpu_options gen; | |
82 int8_t regs[32]; | |
83 int8_t result; | |
84 int8_t resultreg; | |
85 int8_t bankptr; | |
86 uint8_t is_gpu; | |
87 } jag_cpu_options; | |
88 | |
89 typedef struct { | |
90 uint32_t read_high; | |
91 } jag_gpu; | |
92 | |
93 typedef struct { | |
94 uint8_t mac_high; | |
95 uint8_t modulo; | |
96 } jag_dsp; | |
97 | |
98 typedef struct { | |
99 uint32_t cycles; | |
100 uint32_t regs[64]; | |
101 uint32_t *main; | |
102 uint32_t *alt; | |
103 uint32_t pc; | |
104 uint32_t result; | |
105 uint32_t flags; | |
106 uint32_t flags_pending; | |
107 uint32_t remainder; | |
108 union { | |
109 jag_gpu gpu; | |
110 jag_dsp dsp; | |
111 }; | |
112 int8_t writeback; | |
113 int8_t resultreg; | |
114 uint8_t is_gpu; | |
115 } jag_cpu; | |
116 | |
117 uint16_t jag_opcode(uint16_t inst, uint8_t is_gpu); | |
118 char * jag_cc(uint16_t inst); | |
119 uint16_t jag_reg2(uint16_t inst); | |
120 uint32_t jag_jr_dest(uint16_t inst, uint32_t address); | |
121 int jag_cpu_disasm(uint16_t **stream, uint32_t address, char *dst, uint8_t is_gpu, uint8_t labels); | |
122 | |
123 #endif |