annotate jagcpu.c @ 1971:80920c21bb52

Add an event log soft flush and call it twice per frame in between hard flushes to netplay latency when there are insufficient hardware updates to flush packets in the middle of a frame
author Michael Pavone <pavone@retrodev.com>
date Fri, 08 May 2020 11:40:30 -0700
parents c1e78a101912
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1093
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #include <stdint.h>
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
2 #include <stdio.h>
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
3 #include "jagcpu.h"
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
5 char *gpu_mnemonics[] = {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
6 "add",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
7 "addc",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
8 "addq",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
9 "addqt",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
10 "sub",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
11 "subc",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
12 "subq",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
13 "subqt",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
14 "neg",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
15 "and",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
16 "or",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
17 "xor",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
18 "not",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
19 "btst",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
20 "bset",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
21 "bclr",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
22 "mult",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
23 "imult",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
24 "imultn",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
25 "resmac",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
26 "imacn",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
27 "div",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
28 "abs",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
29 "sh",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
30 "shlq",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
31 "shrq",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
32 "sha",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
33 "sharq",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
34 "ror",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
35 "rorq",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
36 "cmp",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
37 "cmpq",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
38 "sat8",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
39 "sat16",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
40 "move",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
41 "moveq",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
42 "moveta",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
43 "movefa",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
44 "movei",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
45 "loadb",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
46 "loadw",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
47 "load",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
48 "loadp",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
49 "load", //r14 relative
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
50 "load", //r15 relative
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
51 "storeb",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
52 "storew",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
53 "store",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
54 "storep",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
55 "store", //r14 relative
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
56 "store", //r15 relative
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
57 "move", //PC
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
58 "jump",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
59 "jr",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
60 "mmult",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
61 "mtoi",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
62 "normi",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
63 "nop",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
64 "load", //r14 indexed
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
65 "load", //r15 indexed
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
66 "store", //r14 indexed
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
67 "store", //r15 indexed
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
68 "sat24",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
69 "pack",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
70 "unpack"
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
71 };
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
72
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
73 char *dsp_mnemonics[DSP_ADDQMOD+1] = {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
74 [DSP_SUBQMOD] = "subqmod",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
75 [DSP_SAT16S] = "sat16s",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
76 [DSP_SAT32S] = "sat32s",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
77 [DSP_MIRROR] = "mirror",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
78 [DSP_ADDQMOD] = "addqmod"
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
79 };
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
80
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
81 void init_dsp_mnemonic_table()
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
82 {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
83 static uint8_t init_done;
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
84 if (init_done) {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
85 return;
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
86 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
87 for (int i = 0; i < DSP_ADDQMOD; i++)
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
88 {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
89 if (!dsp_mnemonics[i]) {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
90 dsp_mnemonics[i] = gpu_mnemonics[i];
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
91 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
92 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
93 init_done = 1;
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
94 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
95
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
96 uint16_t jag_opcode(uint16_t inst, uint8_t is_gpu)
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
97 {
1094
1dba006bad47 Get Jaguar disassembler more or less working. Dump gpu program to file when GPU GO bit is set
Michael Pavone <pavone@retrodev.com>
parents: 1093
diff changeset
98 uint16_t opcode = inst >> 10;
1093
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
99 if (is_gpu && opcode == GPU_PACK && (inst & 0x20)) {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
100 return GPU_UNPACK;
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
101 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
102 return opcode;
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
103 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
104
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
105 uint16_t jag_reg2(uint16_t inst)
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
106 {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
107 return inst & 0x1F;
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
108 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
109
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
110 uint16_t jag_reg1(uint16_t inst)
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
111 {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
112 return inst >> 5 & 0x1F;
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
113 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
114
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
115 //moveq and bit instructions should just use jag_reg1 instead
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
116 uint32_t jag_quick(uint16_t inst)
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
117 {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
118 uint32_t val = inst >> 5 & 0x1F;
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
119 return val ? val : 32;
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
120 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
121
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
122 uint8_t is_quick_1_32_opcode(uint16_t opcode, uint8_t is_gpu)
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
123 {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
124 return opcode == JAG_ADDQ
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
125 || opcode == JAG_ADDQT
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
126 || opcode == JAG_SUBQ
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
127 || opcode == JAG_SUBQT
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
128 || opcode == JAG_SHLQ
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
129 || opcode == JAG_SHRQ
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
130 || opcode == JAG_SHARQ
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
131 || opcode == JAG_RORQ
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
132 || (!is_gpu && (
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
133 opcode == DSP_SUBQMOD
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
134 || opcode == DSP_ADDQMOD
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
135 ));
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
136 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
137
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
138 uint8_t is_quick_0_31_opcode(uint16_t opcode)
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
139 {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
140 return opcode == JAG_MOVEQ
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
141 || opcode == JAG_BTST
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
142 || opcode == JAG_BSET
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
143 || opcode == JAG_BCLR;
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
144 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
145
1096
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
146 uint8_t is_load(uint16_t opcode, uint8_t is_gpu)
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
147 {
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
148 return opcode == JAG_LOAD
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
149 || opcode == JAG_LOADB
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
150 || opcode == JAG_LOADW
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
151 || (is_gpu && opcode == GPU_LOADP);
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
152 }
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
153
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
154 uint8_t is_store(uint16_t opcode, uint8_t is_gpu)
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
155 {
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
156 return opcode == JAG_STORE
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
157 || opcode == JAG_STOREB
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
158 || opcode == JAG_STOREW
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
159 || (is_gpu && opcode == GPU_STOREP);
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
160 }
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
161
1115
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
162 uint8_t is_single_source(uint16_t opcode, uint8_t is_gpu)
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
163 {
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
164 return opcode == JAG_NEG
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
165 || opcode == JAG_NOT
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
166 || opcode == JAG_ABS
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
167 || opcode == GPU_SAT16 //no is_gpu check needed as DSP_SAT16S is also single source
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
168 || (is_gpu && (
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
169 opcode == GPU_SAT8
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
170 || opcode == GPU_SAT24
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
171 || opcode == GPU_PACK
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
172 || opcode == GPU_UNPACK
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
173 ))
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
174 || (!is_gpu && (
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
175 opcode == DSP_SAT32S
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
176 || opcode == DSP_MIRROR
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
177 ));
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
178 }
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
179
1093
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
180 char * jag_cc_names[] = {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
181 "t",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
182 "ne",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
183 "eq",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
184 "f",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
185 "cc",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
186 "hi",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
187 "eq_cc",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
188 "f",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
189 "cs",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
190 "ne_cs",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
191 "eq_cs",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
192 "f",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
193 "f",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
194 "f",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
195 "f",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
196 "f"
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
197 "t_alt",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
198 "ne_alt",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
199 "eq_alt",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
200 "f",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
201 "pl",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
202 "ne_pl",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
203 "eq_pl",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
204 "f",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
205 "mi",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
206 "ne_mi",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
207 "eq_mi"
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
208 };
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
209
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
210 char * jag_cc(uint16_t inst)
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
211 {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
212 uint16_t ccnum = jag_reg2(inst);
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
213 if (ccnum >= sizeof(jag_cc_names)/sizeof(*jag_cc_names)) {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
214 return jag_cc_names[3];
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
215 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
216 return jag_cc_names[ccnum];
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
217 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
218
1115
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
219 uint8_t jag_is_alwyas_falsse(uint16_t cond)
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
220 {
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
221 return (cond & 3) == 3 || (cond && 0xC) == 0xC;
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
222 }
c1e78a101912 WIP Jaguar GPU/DSP emulation
Michael Pavone <pavone@retrodev.com>
parents: 1096
diff changeset
223
1093
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
224 uint32_t jag_jr_dest(uint16_t inst, uint32_t address)
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
225 {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
226 uint32_t rel = jag_reg1(inst);
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
227 if (rel & 0x10) {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
228 rel |= 0xFFFFFFE0;
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
229 }
1094
1dba006bad47 Get Jaguar disassembler more or less working. Dump gpu program to file when GPU GO bit is set
Michael Pavone <pavone@retrodev.com>
parents: 1093
diff changeset
230 return address + 2 + rel*2;
1093
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
231 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
232
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
233 int jag_cpu_disasm(uint16_t **stream, uint32_t address, char *dst, uint8_t is_gpu, uint8_t labels)
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
234 {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
235 uint16_t inst = **stream;
1094
1dba006bad47 Get Jaguar disassembler more or less working. Dump gpu program to file when GPU GO bit is set
Michael Pavone <pavone@retrodev.com>
parents: 1093
diff changeset
236 (*stream)++;
1093
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
237 uint16_t opcode = jag_opcode(inst, is_gpu);
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
238 char **mnemonics;
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
239 if (is_gpu) {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
240 mnemonics = gpu_mnemonics;
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
241 } else {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
242 init_dsp_mnemonic_table();
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
243 mnemonics = dsp_mnemonics;
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
244 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
245 switch (opcode)
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
246 {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
247 case JAG_MOVEI: {
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
248 uint32_t immed = **stream;
1094
1dba006bad47 Get Jaguar disassembler more or less working. Dump gpu program to file when GPU GO bit is set
Michael Pavone <pavone@retrodev.com>
parents: 1093
diff changeset
249 (*stream)++;
1093
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
250 immed |= **stream << 16;
1094
1dba006bad47 Get Jaguar disassembler more or less working. Dump gpu program to file when GPU GO bit is set
Michael Pavone <pavone@retrodev.com>
parents: 1093
diff changeset
251 (*stream)++;
1dba006bad47 Get Jaguar disassembler more or less working. Dump gpu program to file when GPU GO bit is set
Michael Pavone <pavone@retrodev.com>
parents: 1093
diff changeset
252 return sprintf(dst, "%s $%X, r%d", mnemonics[opcode], immed, jag_reg2(inst));
1093
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
253 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
254 case JAG_JR:
1094
1dba006bad47 Get Jaguar disassembler more or less working. Dump gpu program to file when GPU GO bit is set
Michael Pavone <pavone@retrodev.com>
parents: 1093
diff changeset
255 return sprintf(dst,
1093
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
256 labels ? "%s %s, ADR_%X" : "%s %s, $W%X",
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
257 mnemonics[opcode], jag_cc(inst), jag_jr_dest(inst, address)
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
258 );
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
259 case JAG_JUMP:
1094
1dba006bad47 Get Jaguar disassembler more or less working. Dump gpu program to file when GPU GO bit is set
Michael Pavone <pavone@retrodev.com>
parents: 1093
diff changeset
260 return sprintf(dst, "%s %s, (r%d)", mnemonics[opcode], jag_cc(inst), jag_reg1(inst));
1095
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
261 case JAG_LOAD_R14_REL:
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
262 case JAG_LOAD_R15_REL:
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
263 return sprintf(dst, "%s (r%d+%d), r%d",
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
264 mnemonics[opcode],
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
265 opcode == JAG_LOAD_R14_REL ? 14 : 15,
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
266 jag_quick(inst),
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
267 jag_reg2(inst)
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
268 );
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
269 break;
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
270 case JAG_STORE_R14_REL:
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
271 case JAG_STORE_R15_REL:
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
272 return sprintf(dst, "%s r%d, (r%d+%d)",
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
273 mnemonics[opcode],
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
274 jag_reg2(inst),
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
275 opcode == JAG_STORE_R14_REL ? 14 : 15,
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
276 jag_quick(inst)
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
277 );
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
278 break;
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
279 case JAG_LOAD_R14_INDEXED:
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
280 case JAG_LOAD_R15_INDEXED:
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
281 return sprintf(dst, "%s (r%d+r%d), r%d",
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
282 mnemonics[opcode],
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
283 opcode == JAG_LOAD_R14_INDEXED ? 14 : 15,
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
284 jag_reg1(inst),
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
285 jag_reg2(inst)
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
286 );
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
287 break;
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
288 case JAG_STORE_R14_INDEXED:
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
289 case JAG_STORE_R15_INDEXED:
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
290 return sprintf(dst, "%s r%d, (r%d+r%d)",
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
291 mnemonics[opcode],
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
292 jag_reg2(inst),
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
293 opcode == JAG_STORE_R14_INDEXED ? 14 : 15,
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
294 jag_reg1(inst)
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
295 );
920d796ea6a2 Correct disassembly of r14/r15 relative loads and stores
Michael Pavone <pavone@retrodev.com>
parents: 1094
diff changeset
296 break;
1093
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
297 default:
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
298 if (is_quick_1_32_opcode(opcode, is_gpu)) {
1094
1dba006bad47 Get Jaguar disassembler more or less working. Dump gpu program to file when GPU GO bit is set
Michael Pavone <pavone@retrodev.com>
parents: 1093
diff changeset
299 return sprintf(dst, "%s %d, r%d", mnemonics[opcode], jag_quick(inst), jag_reg2(inst));
1093
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
300 } else if (is_quick_0_31_opcode(opcode)) {
1094
1dba006bad47 Get Jaguar disassembler more or less working. Dump gpu program to file when GPU GO bit is set
Michael Pavone <pavone@retrodev.com>
parents: 1093
diff changeset
301 return sprintf(dst, "%s %d, r%d", mnemonics[opcode], jag_reg1(inst), jag_reg2(inst));
1096
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
302 } else if (is_load(opcode, is_gpu)) {
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
303 return sprintf(dst, "%s (r%d), r%d", mnemonics[opcode], jag_reg1(inst), jag_reg2(inst));
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
304 } else if (is_store(opcode, is_gpu)) {
1ab30d427db8 Better disassembly of GPU/DSP load store instructions
Michael Pavone <pavone@retrodev.com>
parents: 1095
diff changeset
305 return sprintf(dst, "%s r%d, (r%d)", mnemonics[opcode], jag_reg2(inst), jag_reg1(inst));
1093
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
306 } else {
1094
1dba006bad47 Get Jaguar disassembler more or less working. Dump gpu program to file when GPU GO bit is set
Michael Pavone <pavone@retrodev.com>
parents: 1093
diff changeset
307 return sprintf(dst, "%s r%d, r%d", mnemonics[opcode], jag_reg1(inst), jag_reg2(inst));
1093
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
308 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
309 }
4987fddd42a0 Initial stab at jaguar disassemler
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
310 }