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