mcpx: Fixup compiler warnings in DSP code

This commit is contained in:
Matt Borgerson 2020-12-29 13:43:32 -07:00 committed by mborgerson
parent 416e12c3b3
commit 66f2e9decd
5 changed files with 266 additions and 272 deletions

View File

@ -38,7 +38,6 @@
/* Defines */
#define BITMASK(x) ((1<<(x))-1)
#define ARRAYSIZE(x) (int)(sizeof(x)/sizeof(x[0]))
#define INTERRUPT_ABORT_FRAME (1 << 0)
#define INTERRUPT_START_FRAME (1 << 1)
@ -133,7 +132,6 @@ static void write_peripheral(dsp_core_t* core, uint32_t address, uint32_t value)
case 0xFFFFC4:
if (value & 1) {
core->is_idle = true;
break;
}
break;
case 0xFFFFC5:
@ -154,8 +152,6 @@ static void write_peripheral(dsp_core_t* core, uint32_t address, uint32_t value)
case 0xFFFFD7:
dsp_dma_write(&dsp->dma, DMA_CONFIGURATION, value);
break;
default:
break;
}
}
@ -249,6 +245,7 @@ uint32_t dsp_read_memory(DSPState* dsp, char space, uint32_t address)
break;
default:
assert(false);
return 0;
}
return dsp56k_read_memory(&dsp->core, space_id, address);
@ -270,6 +267,7 @@ void dsp_write_memory(DSPState* dsp, char space, uint32_t address, uint32_t valu
break;
default:
assert(false);
return;
}
dsp56k_write_memory(&dsp->core, space_id, address, value);
@ -301,22 +299,22 @@ void dsp_info(DSPState* dsp)
printf("DSP core information:\n");
for (i = 0; i < ARRAYSIZE(stackname); i++) {
for (i = 0; i < ARRAY_SIZE(stackname); i++) {
printf("- %s stack:", stackname[i]);
for (j = 0; j < ARRAYSIZE(dsp->core.stack[0]); j++) {
for (j = 0; j < ARRAY_SIZE(dsp->core.stack[0]); j++) {
printf(" %04x", dsp->core.stack[i][j]);
}
printf("\n");
}
printf("- Interrupt IPL:");
for (i = 0; i < ARRAYSIZE(dsp->core.interrupt_ipl); i++) {
for (i = 0; i < ARRAY_SIZE(dsp->core.interrupt_ipl); i++) {
printf(" %04x", dsp->core.interrupt_ipl[i]);
}
printf("\n");
printf("- Pending ints: ");
for (i = 0; i < ARRAYSIZE(dsp->core.interrupt_is_pending); i++) {
for (i = 0; i < ARRAY_SIZE(dsp->core.interrupt_is_pending); i++) {
printf(" %04hx", dsp->core.interrupt_is_pending[i]);
}
printf("\n");
@ -451,7 +449,7 @@ int dsp_get_register_address(DSPState* dsp, const char *regname, uint32_t **addr
/* bisect */
l = 0;
r = ARRAYSIZE(registers) - 1;
r = ARRAY_SIZE(registers) - 1;
do {
m = (l+r) >> 1;
for (i = 0; i < len; i++) {

View File

@ -22,14 +22,15 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "qemu/osdep.h"
#include <stdbool.h>
#include <string.h>
#include <assert.h>
#include "qemu/osdep.h"
#include "qemu/bswap.h"
#include "dsp_cpu.h"
#include "dsp_cpu.h"
#define TRACE_DSP_DISASM 0
#define TRACE_DSP_DISASM_REG 0
@ -38,7 +39,6 @@
#define DPRINTF(s, ...) printf(s, ## __VA_ARGS__)
#define BITMASK(x) ((1<<(x))-1)
#define ARRAYSIZE(x) (sizeof(x)/sizeof(x[0]))
// #define DSP_COUNT_IPS /* Count instruction per seconds */
@ -353,7 +353,7 @@ static const OpcodeEntry nonparallel_opcodes[] = {
};
static bool matches_initialised;
static uint32_t nonparallel_matches[ARRAYSIZE(nonparallel_opcodes)][2];
static uint32_t nonparallel_matches[ARRAY_SIZE(nonparallel_opcodes)][2];
/**********************************
* Emulator kernel
@ -364,7 +364,7 @@ void dsp56k_reset_cpu(dsp_core_t* dsp)
int i;
if (!matches_initialised) {
matches_initialised = true;
for (i=0; i<ARRAYSIZE(nonparallel_opcodes); i++) {
for (i=0; i<ARRAY_SIZE(nonparallel_opcodes); i++) {
const OpcodeEntry t = nonparallel_opcodes[i];
assert(strlen(t.template) == 24);
@ -424,7 +424,7 @@ void dsp56k_reset_cpu(dsp_core_t* dsp)
}
static const OpcodeEntry *lookup_opcode_slow(uint32_t op) {
for (int i = 0; i < ARRAYSIZE(nonparallel_opcodes); i++) {
for (int i = 0; i < ARRAY_SIZE(nonparallel_opcodes); i++) {
if ((op & nonparallel_matches[i][0]) == nonparallel_matches[i][1]) {
if (nonparallel_opcodes[i].match_func
&& !nonparallel_opcodes[i].match_func(op)) continue;
@ -594,20 +594,20 @@ static void disasm_reg_compare(dsp_core_t* dsp)
static const char* disasm_get_instruction_text(dsp_core_t* dsp)
{
const int len = sizeof(dsp->disasm_str_instr);
// const int len = sizeof(dsp->disasm_str_instr);
// uint64_t count, cycles;
// uint16_t cycle_diff;
// float percentage;
int offset;
// int offset;
if (dsp->disasm_is_looping) {
dsp->disasm_str_instr2[0] = 0;
}
if (dsp->disasm_cur_inst_len == 1) {
offset = sprintf(dsp->disasm_str_instr2, "p:%04x %06x (%02d cyc) %-*s\n", dsp->disasm_prev_inst_pc, dsp->disasm_cur_inst, dsp->instr_cycle, len, dsp->disasm_str_instr);
} else {
offset = sprintf(dsp->disasm_str_instr2, "p:%04x %06x %06x (%02d cyc) %-*s\n", dsp->disasm_prev_inst_pc, dsp->disasm_cur_inst, read_memory_p(dsp, dsp->disasm_prev_inst_pc + 1), dsp->instr_cycle, len, dsp->disasm_str_instr);
}
// if (dsp->disasm_cur_inst_len == 1) {
// offset = sprintf(dsp->disasm_str_instr2, "p:%04x %06x (%02d cyc) %-*s\n", dsp->disasm_prev_inst_pc, dsp->disasm_cur_inst, dsp->instr_cycle, len, dsp->disasm_str_instr);
// } else {
// offset = sprintf(dsp->disasm_str_instr2, "p:%04x %06x %06x (%02d cyc) %-*s\n", dsp->disasm_prev_inst_pc, dsp->disasm_cur_inst, read_memory_p(dsp, dsp->disasm_prev_inst_pc + 1), dsp->instr_cycle, len, dsp->disasm_str_instr);
// }
// if (offset > 2 && Profile_DspAddressData(dsp->disasm_prev_inst_pc, &percentage, &count, &cycles, &cycle_diff)) {
// offset -= 2;
// sprintf(str_instr2+offset, "%5.2f%% (%"PRId64", %"PRId64", %d)\n",
@ -1089,7 +1089,7 @@ static void write_memory_disasm(dsp_core_t* dsp, int space, uint32_t address, ui
}
curvalue = read_memory_disasm(dsp, space, address);
if (dsp->disasm_memory_ptr < ARRAYSIZE(dsp->str_disasm_memory)) {
if (dsp->disasm_memory_ptr < ARRAY_SIZE(dsp->str_disasm_memory)) {
sprintf(dsp->str_disasm_memory[dsp->disasm_memory_ptr], "Mem: %c:0x%04x 0x%06x -> 0x%06x", space_c, address, oldvalue, curvalue);
dsp->disasm_memory_ptr ++;
}

View File

@ -30,7 +30,7 @@ static const char *registers_name[64]={
"x0","x1","y0","y1",
"a0","b0","a2","b2",
"a1","b1","a","b",
"r0","r1","r2","r3",
"r4","r5","r6","r7",
"n0","n1","n2","n3",
@ -58,7 +58,7 @@ static const char* disasm_opcodes_alu[256] = {
"add x,b" , "adc x,b", "asr b" , "lsr b", "sub x,b" , "sbc x,b" , "abs b" , "ror b",
"add y,a" , "adc y,a", "asl a" , "lsl a", "sub y,a" , "sbc y,a" , "neg a" , "rol a",
"add y,b" , "adc y,b", "asl b" , "lsl b", "sub y,b" , "sbc y,b" , "neg b" , "rol b",
/* 0x40 - 0x7f */
"add x0,a", "tfr x0,a", "or x0,a", "eor x0,a", "sub x0,a", "cmp x0,a", "and x0,a", "cmpm x0,a",
"add x0,b", "tfr x0,b", "or x0,b", "eor x0,b", "sub x0,b", "cmp x0,b", "and x0,b", "cmpm x0,b",
@ -148,7 +148,7 @@ static const char *cc_name[16] = {
"ec",
"lc",
"gt",
"cs",
"lt",
"eq",
@ -341,7 +341,7 @@ static void dis_bcc_imm(dsp_core_t* dsp) {
uint32_t xxx = (dsp->disasm_cur_inst & BITMASK(5))
+ ((dsp->disasm_cur_inst & (BITMASK(4) << 6)) >> 1);
dis_calc_cc(dsp, cc_code, cond_name);
dis_calc_cc(dsp, cc_code, cond_name);
sprintf(dsp->disasm_str_instr,"b%s p:$%06x",
cond_name, (dsp->pc + dsp_signextend(9, xxx)) & BITMASK(24) );
@ -353,7 +353,7 @@ static void dis_bchg_aa(dsp_core_t* dsp)
/* bchg #n,y:aa */
char name[16];
uint32_t memspace, value, numbit;
memspace = (dsp->disasm_cur_inst>>6) & 1;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -371,9 +371,9 @@ static void dis_bchg_ea(dsp_core_t* dsp)
{
/* bchg #n,x:ea */
/* bchg #n,y:ea */
char name[16], addr_name[16];
char name[16], addr_name[12];
uint32_t memspace, value, numbit;
memspace = (dsp->disasm_cur_inst>>6) & 1;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -394,7 +394,7 @@ static void dis_bchg_pp(dsp_core_t* dsp)
/* bchg #n,y:pp */
char name[16];
uint32_t memspace, value, numbit;
memspace = (dsp->disasm_cur_inst>>6) & 1;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -412,7 +412,7 @@ static void dis_bchg_reg(dsp_core_t* dsp)
{
/* bchg #n,R */
uint32_t value, numbit;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -425,7 +425,7 @@ static void dis_bclr_aa(dsp_core_t* dsp)
/* bclr #n,y:aa */
char name[16];
uint32_t memspace, value, numbit;
memspace = (dsp->disasm_cur_inst>>6) & 1;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -443,9 +443,9 @@ static void dis_bclr_ea(dsp_core_t* dsp)
{
/* bclr #n,x:ea */
/* bclr #n,y:ea */
char name[16], addr_name[16];
char name[16], addr_name[12];
uint32_t memspace, value, numbit;
memspace = (dsp->disasm_cur_inst>>6) & 1;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -466,7 +466,7 @@ static void dis_bclr_pp(dsp_core_t* dsp)
/* bclr #n,y:pp */
char name[16];
uint32_t memspace, value, numbit;
memspace = (dsp->disasm_cur_inst>>6) & 1;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -484,7 +484,7 @@ static void dis_bclr_reg(dsp_core_t* dsp)
{
/* bclr #n,R */
uint32_t value, numbit;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -511,7 +511,7 @@ static void dis_brclr_pp(dsp_core_t* dsp)
{
uint32_t xxxx = read_memory_p(dsp, dsp->pc+1);
dsp->disasm_cur_inst_len++;
uint32_t memspace = (dsp->disasm_cur_inst>>6) & 1;
uint32_t value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
uint32_t numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -543,7 +543,7 @@ static void dis_brset_pp(dsp_core_t* dsp)
{
uint32_t xxxx = read_memory_p(dsp, dsp->pc+1);
dsp->disasm_cur_inst_len++;
uint32_t memspace = (dsp->disasm_cur_inst>>6) & 1;
uint32_t value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
uint32_t numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -577,7 +577,7 @@ static void dis_bset_aa(dsp_core_t* dsp)
/* bset #n,y:aa */
char name[16];
uint32_t memspace, value, numbit;
memspace = (dsp->disasm_cur_inst>>6) & 1;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -595,9 +595,9 @@ static void dis_bset_ea(dsp_core_t* dsp)
{
/* bset #n,x:ea */
/* bset #n,y:ea */
char name[16], addr_name[16];
char name[16], addr_name[12];
uint32_t memspace, value, numbit;
memspace = (dsp->disasm_cur_inst>>6) & 1;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -618,7 +618,7 @@ static void dis_bset_pp(dsp_core_t* dsp)
/* bset #n,y:pp */
char name[16];
uint32_t memspace, value, numbit;
memspace = (dsp->disasm_cur_inst>>6) & 1;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -636,7 +636,7 @@ static void dis_bset_reg(dsp_core_t* dsp)
{
/* bset #n,R */
uint32_t value, numbit;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -665,7 +665,7 @@ static void dis_btst_aa(dsp_core_t* dsp)
/* btst #n,y:aa */
char name[16];
uint32_t memspace, value, numbit;
memspace = (dsp->disasm_cur_inst>>6) & 1;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -683,9 +683,9 @@ static void dis_btst_ea(dsp_core_t* dsp)
{
/* btst #n,x:ea */
/* btst #n,y:ea */
char name[16], addr_name[16];
char name[16], addr_name[12];
uint32_t memspace, value, numbit;
memspace = (dsp->disasm_cur_inst>>6) & 1;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -706,7 +706,7 @@ static void dis_btst_pp(dsp_core_t* dsp)
/* btst #n,y:pp */
char name[16];
uint32_t memspace, value, numbit;
memspace = (dsp->disasm_cur_inst>>6) & 1;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -724,7 +724,7 @@ static void dis_btst_reg(dsp_core_t* dsp)
{
/* btst #n,R */
uint32_t value, numbit;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
numbit = dsp->disasm_cur_inst & BITMASK(5);
@ -768,7 +768,7 @@ static void dis_cmpu(dsp_core_t* dsp) {
static void dis_div(dsp_core_t* dsp)
{
uint32_t srcreg=DSP_REG_NULL, destreg;
switch((dsp->disasm_cur_inst>>4) & BITMASK(2)) {
case 0: srcreg = DSP_REG_X0; break;
case 1: srcreg = DSP_REG_Y0; break;
@ -810,9 +810,9 @@ static void dis_do_imm(dsp_core_t* dsp)
static void dis_do_ea(dsp_core_t* dsp)
{
char addr_name[16], name[16];
char addr_name[12], name[16];
uint32_t ea_mode;
dsp->disasm_cur_inst_len++;
ea_mode = (dsp->disasm_cur_inst>>8) & BITMASK(6);
@ -824,7 +824,7 @@ static void dis_do_ea(dsp_core_t* dsp)
sprintf(name, "x:%s", addr_name);
}
sprintf(dsp->disasm_str_instr,"do %s,p:$%04x",
sprintf(dsp->disasm_str_instr,"do %s,p:$%04x",
name,
read_memory_p(dsp, dsp->pc+1)
);
@ -864,24 +864,24 @@ static void dis_dor_reg(dsp_core_t* dsp)
static void dis_jcc_ea(dsp_core_t* dsp)
{
char cond_name[16], addr_name[16];
char cond_name[16], addr_name[12];
uint32_t cc_code=0;
dis_calc_ea(dsp, (dsp->disasm_cur_inst >>8) & BITMASK(6), addr_name);
cc_code=dsp->disasm_cur_inst & BITMASK(4);
dis_calc_cc(dsp, cc_code, cond_name);
dis_calc_cc(dsp, cc_code, cond_name);
sprintf(dsp->disasm_str_instr,"j%s p:%s", cond_name, addr_name);
}
static void dis_jcc_imm(dsp_core_t* dsp)
{
char cond_name[16], addr_name[16];
char cond_name[16], addr_name[12];
uint32_t cc_code=0;
sprintf(addr_name, "$%04x", dsp->disasm_cur_inst & BITMASK(12));
cc_code=(dsp->disasm_cur_inst>>12) & BITMASK(4);
dis_calc_cc(dsp, cc_code, cond_name);
dis_calc_cc(dsp, cc_code, cond_name);
sprintf(dsp->disasm_str_instr,"j%s p:%s", cond_name, addr_name);
}
@ -892,7 +892,7 @@ static void dis_jclr_aa(dsp_core_t* dsp)
/* jclr #n,y:aa,p:xx */
char srcname[16];
uint32_t memspace, value, numbit;
dsp->disasm_cur_inst_len++;
memspace = (dsp->disasm_cur_inst>>6) & 1;
@ -916,9 +916,9 @@ static void dis_jclr_ea(dsp_core_t* dsp)
{
/* jclr #n,x:ea,p:xx */
/* jclr #n,y:ea,p:xx */
char srcname[16], addr_name[16];
char srcname[16], addr_name[12];
uint32_t memspace, value, numbit;
dsp->disasm_cur_inst_len++;
memspace = (dsp->disasm_cur_inst>>6) & 1;
@ -945,7 +945,7 @@ static void dis_jclr_pp(dsp_core_t* dsp)
/* jclr #n,y:pp,p:xx */
char srcname[16];
uint32_t memspace, value, numbit;
dsp->disasm_cur_inst_len++;
memspace = (dsp->disasm_cur_inst>>6) & 1;
@ -970,7 +970,7 @@ static void dis_jclr_reg(dsp_core_t* dsp)
{
/* jclr #n,R,p:xx */
uint32_t value, numbit;
dsp->disasm_cur_inst_len++;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
@ -999,24 +999,24 @@ static void dis_jmp_ea(dsp_core_t* dsp)
static void dis_jscc_ea(dsp_core_t* dsp)
{
char cond_name[16], addr_name[16];
char cond_name[16], addr_name[12];
uint32_t cc_code=0;
dis_calc_ea(dsp, (dsp->disasm_cur_inst>>8) & BITMASK(6), addr_name);
cc_code=dsp->disasm_cur_inst & BITMASK(4);
dis_calc_cc(dsp, cc_code, cond_name);
dis_calc_cc(dsp, cc_code, cond_name);
sprintf(dsp->disasm_str_instr,"js%s p:%s", cond_name, addr_name);
}
static void dis_jscc_imm(dsp_core_t* dsp)
{
char cond_name[16], addr_name[16];
char cond_name[16], addr_name[12];
uint32_t cc_code=0;
sprintf(addr_name, "$%04x", dsp->disasm_cur_inst & BITMASK(12));
cc_code=(dsp->disasm_cur_inst>>12) & BITMASK(4);
dis_calc_cc(dsp, cc_code, cond_name);
dis_calc_cc(dsp, cc_code, cond_name);
sprintf(dsp->disasm_str_instr,"js%s p:%s", cond_name, addr_name);
}
@ -1027,7 +1027,7 @@ static void dis_jsclr_aa(dsp_core_t* dsp)
/* jsclr #n,y:aa,p:xx */
char srcname[16];
uint32_t memspace, value, numbit;
dsp->disasm_cur_inst_len++;
memspace = (dsp->disasm_cur_inst>>6) & 1;
@ -1051,9 +1051,9 @@ static void dis_jsclr_ea(dsp_core_t* dsp)
{
/* jsclr #n,x:ea,p:xx */
/* jsclr #n,y:ea,p:xx */
char srcname[16], addr_name[16];
char srcname[16], addr_name[12];
uint32_t memspace, value, numbit;
dsp->disasm_cur_inst_len++;
memspace = (dsp->disasm_cur_inst>>6) & 1;
@ -1080,7 +1080,7 @@ static void dis_jsclr_pp(dsp_core_t* dsp)
/* jsclr #n,y:pp,p:xx */
char srcname[16];
uint32_t memspace, value, numbit;
dsp->disasm_cur_inst_len++;
memspace = (dsp->disasm_cur_inst>>6) & 1;
@ -1105,7 +1105,7 @@ static void dis_jsclr_reg(dsp_core_t* dsp)
{
/* jsclr #n,R,p:xx */
uint32_t value, numbit;
dsp->disasm_cur_inst_len++;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
@ -1124,7 +1124,7 @@ static void dis_jset_aa(dsp_core_t* dsp)
/* jset #n,y:aa,p:xx */
char srcname[16];
uint32_t memspace, value, numbit;
dsp->disasm_cur_inst_len++;
memspace = (dsp->disasm_cur_inst>>6) & 1;
@ -1148,9 +1148,9 @@ static void dis_jset_ea(dsp_core_t* dsp)
{
/* jset #n,x:ea,p:xx */
/* jset #n,y:ea,p:xx */
char srcname[16], addr_name[16];
char srcname[16], addr_name[12];
uint32_t memspace, value, numbit;
dsp->disasm_cur_inst_len++;
memspace = (dsp->disasm_cur_inst>>6) & 1;
@ -1177,7 +1177,7 @@ static void dis_jset_pp(dsp_core_t* dsp)
/* jset #n,y:pp,p:xx */
char srcname[16];
uint32_t memspace, value, numbit;
dsp->disasm_cur_inst_len++;
memspace = (dsp->disasm_cur_inst>>6) & 1;
@ -1202,7 +1202,7 @@ static void dis_jset_reg(dsp_core_t* dsp)
{
/* jset #n,R,p:xx */
uint32_t value, numbit;
dsp->disasm_cur_inst_len++;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
@ -1235,7 +1235,7 @@ static void dis_jsset_aa(dsp_core_t* dsp)
/* jsset #n,y:aa,p:xx */
char srcname[16];
uint32_t memspace, value, numbit;
dsp->disasm_cur_inst_len++;
memspace = (dsp->disasm_cur_inst>>6) & 1;
@ -1259,9 +1259,9 @@ static void dis_jsset_ea(dsp_core_t* dsp)
{
/* jsset #n,x:ea,p:xx */
/* jsset #n,y:ea,p:xx */
char srcname[16], addr_name[16];
char srcname[16], addr_name[12];
uint32_t memspace, value, numbit;
dsp->disasm_cur_inst_len++;
memspace = (dsp->disasm_cur_inst>>6) & 1;
@ -1288,7 +1288,7 @@ static void dis_jsset_pp(dsp_core_t* dsp)
/* jsset #n,y:pp,p:xx */
char srcname[16];
uint32_t memspace, value, numbit;
dsp->disasm_cur_inst_len++;
memspace = (dsp->disasm_cur_inst>>6) & 1;
@ -1313,7 +1313,7 @@ static void dis_jsset_reg(dsp_core_t* dsp)
{
/* jsset #n,r,p:xx */
uint32_t value, numbit;
dsp->disasm_cur_inst_len++;
value = (dsp->disasm_cur_inst>>8) & BITMASK(6);
@ -1328,11 +1328,11 @@ static void dis_jsset_reg(dsp_core_t* dsp)
static void dis_lua(dsp_core_t* dsp)
{
char addr_name[16];
char addr_name[12];
dis_calc_ea(dsp, (dsp->disasm_cur_inst>>8) & BITMASK(5), addr_name);
uint32_t numreg = dsp->disasm_cur_inst & BITMASK(4);
sprintf(dsp->disasm_str_instr,"lua %s,%s", addr_name, registers_name[numreg]);
}
@ -1421,7 +1421,7 @@ static void dis_movec_imm(dsp_core_t* dsp)
static void dis_movec_ea(dsp_core_t* dsp)
{
const char *spacename;
char srcname[16], dstname[16], addr_name[16];
char srcname[16], dstname[16], addr_name[12];
uint32_t numreg, ea_mode;
int retour;
@ -1462,7 +1462,7 @@ static void dis_movem_aa(dsp_core_t* dsp)
{
/* S,p:aa */
/* p:aa,D */
char addr_name[16], srcname[16], dstname[16];
char addr_name[12], srcname[16], dstname[16];
uint32_t numreg;
sprintf(addr_name, "$%04x",(dsp->disasm_cur_inst>>8) & BITMASK(6));
@ -1484,7 +1484,7 @@ static void dis_movem_ea(dsp_core_t* dsp)
{
/* S,p:ea */
/* p:ea,D */
char addr_name[16], srcname[16], dstname[16];
char addr_name[12], srcname[16], dstname[16];
uint32_t ea_mode, numreg;
ea_mode = (dsp->disasm_cur_inst>>8) & BITMASK(6);
@ -1544,8 +1544,8 @@ static void dis_movep_0(dsp_core_t* dsp)
static void dis_movep_1(dsp_core_t* dsp)
{
char srcname[16]="",dstname[16]="",name[16]="";
uint32_t addr, memspace;
char srcname[16]="",dstname[16]="",addr_name[12]="";
uint32_t addr, memspace;
/* p:ea,x:pp */
/* x:pp,p:ea */
@ -1553,13 +1553,13 @@ static void dis_movep_1(dsp_core_t* dsp)
/* y:pp,p:ea */
addr = 0xffffc0 + (dsp->disasm_cur_inst & BITMASK(6));
dis_calc_ea(dsp, (dsp->disasm_cur_inst>>8) & BITMASK(6), name);
dis_calc_ea(dsp, (dsp->disasm_cur_inst>>8) & BITMASK(6), addr_name);
memspace = (dsp->disasm_cur_inst>>16) & 1;
if (dsp->disasm_cur_inst & (1<<15)) {
/* Write pp */
sprintf(srcname, "p:%s", name);
sprintf(srcname, "p:%s", addr_name);
if (memspace) {
sprintf(dstname, "y:$%06x", addr);
@ -1575,7 +1575,7 @@ static void dis_movep_1(dsp_core_t* dsp)
sprintf(srcname, "x:$%06x", addr);
}
sprintf(dstname, "p:%s", name);
sprintf(dstname, "p:%s", addr_name);
}
sprintf(dsp->disasm_str_instr,"movep %s,%s", srcname, dstname);
@ -1583,8 +1583,8 @@ static void dis_movep_1(dsp_core_t* dsp)
static void dis_movep_23(dsp_core_t* dsp)
{
char srcname[16]="",dstname[16]="",name[16]="";
uint32_t addr, memspace, easpace, retour;
char srcname[16]="",dstname[16]="",addr_name[12]="";
uint32_t addr, memspace, easpace, retour;
/* x:ea,x:pp */
/* y:ea,x:pp */
@ -1599,7 +1599,7 @@ static void dis_movep_23(dsp_core_t* dsp)
/* y:pp,x:ea */
addr = 0xffffc0 + (dsp->disasm_cur_inst & BITMASK(6));
retour = dis_calc_ea(dsp, (dsp->disasm_cur_inst>>8) & BITMASK(6), name);
retour = dis_calc_ea(dsp, (dsp->disasm_cur_inst>>8) & BITMASK(6), addr_name);
memspace = (dsp->disasm_cur_inst>>16) & 1;
easpace = (dsp->disasm_cur_inst>>6) & 1;
@ -1607,12 +1607,12 @@ static void dis_movep_23(dsp_core_t* dsp)
/* Write pp */
if (retour) {
sprintf(srcname, "#%s", name);
sprintf(srcname, "#%s", addr_name);
} else {
if (easpace) {
sprintf(srcname, "y:%s", name);
sprintf(srcname, "y:%s", addr_name);
} else {
sprintf(srcname, "x:%s", name);
sprintf(srcname, "x:%s", addr_name);
}
}
@ -1631,9 +1631,9 @@ static void dis_movep_23(dsp_core_t* dsp)
}
if (easpace) {
sprintf(dstname, "y:%s", name);
sprintf(dstname, "y:%s", addr_name);
} else {
sprintf(dstname, "x:%s", name);
sprintf(dstname, "x:%s", addr_name);
}
}
@ -1643,23 +1643,23 @@ static void dis_movep_23(dsp_core_t* dsp)
static void dis_movep_x_qq(dsp_core_t* dsp) {
// 00000111W1MMMRRR0Sqqqqqq
char srcname[16]="",dstname[16]="",name[16]="";
char srcname[16]="",dstname[16]="",addr_name[12]="";
uint32_t addr = 0xffff80 + (dsp->disasm_cur_inst & BITMASK(6));
uint32_t ea_mode = (dsp->disasm_cur_inst>>8) & BITMASK(6);
uint32_t easpace = (dsp->disasm_cur_inst>>6) & 1;
int retour = dis_calc_ea(dsp, ea_mode, name);
int retour = dis_calc_ea(dsp, ea_mode, addr_name);
if (dsp->disasm_cur_inst & (1<<15)) {
/* Write qq */
if (retour) {
sprintf(srcname, "#%s", name);
sprintf(srcname, "#%s", addr_name);
} else {
if (easpace) {
sprintf(srcname, "y:%s", name);
sprintf(srcname, "y:%s", addr_name);
} else {
sprintf(srcname, "x:%s", name);
sprintf(srcname, "x:%s", addr_name);
}
}
@ -1670,9 +1670,9 @@ static void dis_movep_x_qq(dsp_core_t* dsp) {
sprintf(srcname, "x:$%04x", addr);
if (easpace) {
sprintf(dstname, "y:%s", name);
sprintf(dstname, "y:%s", addr_name);
} else {
sprintf(dstname, "x:%s", name);
sprintf(dstname, "x:%s", addr_name);
}
}
@ -1707,7 +1707,7 @@ static void dis_move_xy_imm(dsp_core_t* dsp, int space)
+ ((dsp->disasm_cur_inst >> 6) & 1);
uint32_t offreg = DSP_REG_R0 + ((dsp->disasm_cur_inst >> 8) & BITMASK(3));
uint32_t numreg = dsp->disasm_cur_inst & BITMASK(4);
int32_t xxx_s = dsp_signextend(7, xxx);
if (W) {
sprintf(dsp->disasm_str_instr, "move %c:(%s + %d), %s",
@ -1812,7 +1812,7 @@ static void dis_rep_imm(dsp_core_t* dsp)
static void dis_rep_ea(dsp_core_t* dsp)
{
char name[16],addr_name[16];
char name[16],addr_name[12];
/* x:ea */
/* y:ea */
@ -1893,7 +1893,7 @@ static void dis_pm(dsp_core_t* dsp)
static void dis_pm_0(dsp_core_t* dsp)
{
char space_name[16], addr_name[16];
char space_name[16], addr_name[12];
uint32_t memspace, numreg1, numreg2;
/*
0000 100d 00mm mrrr S,x:ea x0,D
@ -1932,7 +1932,7 @@ static void dis_pm_1(dsp_core_t* dsp)
S1,D1 #xxxxxx,D2
*/
char addr_name[16];
char addr_name[12];
uint32_t memspace, write_flag, retour, s1reg, s2reg, d1reg, d2reg;
memspace = (dsp->disasm_cur_inst>>14) & 1;
@ -1977,7 +1977,7 @@ static void dis_pm_1(dsp_core_t* dsp)
registers_name[s2reg],
addr_name
);
}
}
} else {
s1reg = d1reg = DSP_REG_X0;
@ -2017,14 +2017,14 @@ static void dis_pm_1(dsp_core_t* dsp)
registers_name[s2reg],
registers_name[d2reg]
);
}
}
}
}
static void dis_pm_2(dsp_core_t* dsp)
{
char addr_name[16];
char addr_name[12];
uint32_t numreg1, numreg2;
/*
0010 0000 0000 0000 nop
@ -2045,7 +2045,7 @@ static void dis_pm_2(dsp_core_t* dsp)
if (((dsp->disasm_cur_inst >> 8) & 0xfc00) == 0x2000) {
numreg1 = (dsp->disasm_cur_inst>>13) & BITMASK(5);
numreg2 = (dsp->disasm_cur_inst>>8) & BITMASK(5);
sprintf(dsp->disasm_parallelmove_name, "%s,%s", registers_name[numreg1], registers_name[numreg2]);
sprintf(dsp->disasm_parallelmove_name, "%s,%s", registers_name[numreg1], registers_name[numreg2]);
return;
}
@ -2055,7 +2055,7 @@ static void dis_pm_2(dsp_core_t* dsp)
static void dis_pm_4(dsp_core_t* dsp)
{
char addr_name[16];
char addr_name[12];
uint32_t value, retour, ea_mode, memspace;
/*
0100 l0ll w0aa aaaa l:aa,D
@ -2081,7 +2081,7 @@ static void dis_pm_4(dsp_core_t* dsp)
if ((value>>2)==0) {
/* L: memory move */
if (dsp->disasm_cur_inst & (1<<14)) {
retour = dis_calc_ea(dsp, ea_mode, addr_name);
retour = dis_calc_ea(dsp, ea_mode, addr_name);
} else {
sprintf(addr_name,"$%04x", ea_mode);
retour = 0;
@ -2108,7 +2108,7 @@ static void dis_pm_4(dsp_core_t* dsp)
memspace = (dsp->disasm_cur_inst>>19) & 1;
if (dsp->disasm_cur_inst & (1<<14)) {
retour = dis_calc_ea(dsp, ea_mode, addr_name);
retour = dis_calc_ea(dsp, ea_mode, addr_name);
} else {
sprintf(addr_name,"$%04x", ea_mode);
retour = 0;
@ -2153,7 +2153,7 @@ static void dis_pm_8(dsp_core_t* dsp)
char addr1_name[16], addr2_name[16];
uint32_t ea_mode1, ea_mode2, numreg1, numreg2;
/*
1wmm eeff WrrM MRRR x:ea,D1 y:ea,D2
1wmm eeff WrrM MRRR x:ea,D1 y:ea,D2
x:ea,D1 S2,y:ea
S1,x:ea y:ea,D2
S1,x:ea S2,y:ea
@ -2189,7 +2189,7 @@ static void dis_pm_8(dsp_core_t* dsp)
dis_calc_ea(dsp, ea_mode1, addr1_name);
dis_calc_ea(dsp, ea_mode2, addr2_name);
if (dsp->disasm_cur_inst & (1<<15)) {
if (dsp->disasm_cur_inst & (1<<22)) {
sprintf(dsp->disasm_parallelmove_name, "x:%s,%s y:%s,%s",
@ -2222,5 +2222,5 @@ static void dis_pm_8(dsp_core_t* dsp)
addr2_name
);
}
}
}
}

View File

@ -146,11 +146,9 @@ static void dsp_dma_run(DSPDMAState *s)
while (!(s->next_block & NODE_POINTER_EOL)) {
uint32_t addr = s->next_block & NODE_POINTER_VAL;
uint32_t block_addr = 0;
int block_space = DSP_SPACE_X;
// FIXME: Are these block addresses BYTE addresses or WORD addresses?
// Need to understand this DMA engine better.
uint32_t block_addr;
int block_space;
if (addr < 0x1800) {
assert(addr+6 < 0x1800);
block_space = DSP_SPACE_X;
@ -199,19 +197,19 @@ static void dsp_dma_run(DSPDMAState *s)
uint32_t channel_count = (count & 0xF) + 1;
uint32_t block_count = count >> 4;
unsigned int item_size;
unsigned int item_size = 4;
uint32_t item_mask = 0xffffffff;
// bool lsb = (format == 6); // FIXME
switch(format) {
case 1:
item_size = 2;
item_mask = 0x0000FFFF;
item_mask = 0x0000ffff;
break;
case 2:
case 6:
item_size = 4;
item_mask = 0x00FFFFFF;
item_mask = 0x00ffffff;
break;
default:
fprintf(stderr, "Unknown dsp dma format: 0x%x\n", format);
@ -220,9 +218,9 @@ static void dsp_dma_run(DSPDMAState *s)
}
size_t scratch_addr = scratch_base + scratch_offset;
uint32_t mem_address = 0;
int mem_space = DSP_SPACE_X;
uint32_t mem_address;
int mem_space;
if (dsp_offset < 0x1800) {
assert(dsp_offset+count < 0x1800);
mem_space = DSP_SPACE_X;
@ -274,7 +272,6 @@ static void dsp_dma_run(DSPDMAState *s)
}
}
}
} else {
for (int i = 0; i < count; i++) {
uint32_t v = dsp56k_read_memory(s->core, mem_space, mem_address+i);
@ -334,6 +331,7 @@ static void dsp_dma_run(DSPDMAState *s)
v = (*(uint32_t*)(scratch_buf + i*4)) & item_mask;
break;
default:
v = 0;
assert(false);
break;
}

File diff suppressed because it is too large Load Diff