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