mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
Changed the Saturn disassembler to use 'std::ostream &' internally
This commit is contained in:
parent
fd8f739ec7
commit
93817a1751
@ -1267,7 +1267,7 @@ static const int field_adr_a[]=
|
||||
static const int field_adr_b[]=
|
||||
{ FieldP, FieldWP, FieldXS, FieldX, FieldS, FieldM, FieldB, FieldW };
|
||||
|
||||
CPU_DISASSEMBLE( saturn )
|
||||
static offs_t internal_disasm_saturn(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
|
||||
{
|
||||
int adr=0;
|
||||
|
||||
@ -1289,7 +1289,7 @@ CPU_DISASSEMBLE( saturn )
|
||||
cont=0;
|
||||
bin[binsize++]=number_2_hex[op];
|
||||
bin[binsize]=0;
|
||||
sprintf(buffer, "???%s",bin);
|
||||
util::stream_format(stream, "???%s",bin);
|
||||
break;
|
||||
default:
|
||||
bin[binsize++]=number_2_hex[op];
|
||||
@ -1308,7 +1308,7 @@ CPU_DISASSEMBLE( saturn )
|
||||
cont = 0;
|
||||
bin[binsize++]=number_2_hex[op];
|
||||
bin[binsize]=0;
|
||||
sprintf(buffer, "???%s",bin);
|
||||
util::stream_format(stream, "???%s",bin);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@ -1316,32 +1316,32 @@ CPU_DISASSEMBLE( saturn )
|
||||
cont=0;
|
||||
switch (level->adr==AdrNone?adr:level->adr) {
|
||||
case AdrNone:
|
||||
strcpy(buffer, mnemonics[level->mnemonic].name[set]);
|
||||
stream << mnemonics[level->mnemonic].name[set];
|
||||
break;
|
||||
case Imm:
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], oprom[pos++]);
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], oprom[pos++]);
|
||||
break;
|
||||
case ImmCount:
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], oprom[pos++]+1);
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], oprom[pos++]+1);
|
||||
break;
|
||||
case AdrImmCount:
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], field_2_string(adr), oprom[pos++]+1);
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], field_2_string(adr), oprom[pos++]+1);
|
||||
break;
|
||||
case AdrCount: // mnemonics have string %s for address field
|
||||
snprintf(number,sizeof(number),"%x",oprom[pos++]+1);
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], number);
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], number);
|
||||
break;
|
||||
case Imm2:
|
||||
v=oprom[pos++];
|
||||
v|=oprom[pos++]<<4;
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], v);
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], v);
|
||||
break;
|
||||
case Imm4:
|
||||
v=oprom[pos++];
|
||||
v|=oprom[pos++]<<4;
|
||||
v|=oprom[pos++]<<8;
|
||||
v|=oprom[pos++]<<12;
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], v);
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], v);
|
||||
break;
|
||||
case Imm5:
|
||||
v=oprom[pos++];
|
||||
@ -1349,116 +1349,116 @@ CPU_DISASSEMBLE( saturn )
|
||||
v|=oprom[pos++]<<8;
|
||||
v|=oprom[pos++]<<12;
|
||||
v|=oprom[pos++]<<16;
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], v);
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], v);
|
||||
break;
|
||||
case ImmCload:
|
||||
c=i=oprom[pos++] & 0xf;
|
||||
number[i+1]=0;
|
||||
for (;i>=0; i--) number[i]=number_2_hex[oprom[pos++] & 0xf];
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], c+1, number);
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], c+1, number);
|
||||
break;
|
||||
case Dis3:
|
||||
SATURN_PEEKOP_DIS12(v);
|
||||
c=(pc+pos-3+v)&0xfffff;
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], c );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], c );
|
||||
break;
|
||||
case Dis3Call:
|
||||
SATURN_PEEKOP_DIS12(v);
|
||||
c=(pc+pos+v)&0xfffff;
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], c );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], c );
|
||||
break;
|
||||
case Dis4:
|
||||
SATURN_PEEKOP_DIS16(v);
|
||||
c=(pc+pos-4+v)&0xfffff;
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], c );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], c );
|
||||
break;
|
||||
case Dis4Call:
|
||||
SATURN_PEEKOP_DIS16(v);
|
||||
c=(pc+pos+v)&0xfffff;
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], c );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], c );
|
||||
break;
|
||||
case Abs:
|
||||
SATURN_PEEKOP_ADR(v);
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], v );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], v );
|
||||
break;
|
||||
case BranchReturn:
|
||||
SATURN_PEEKOP_DIS8(v);
|
||||
if (v==0) {
|
||||
strcpy(buffer, mnemonics[level->mnemonic+1].name[set]);
|
||||
stream << mnemonics[level->mnemonic+1].name[set];
|
||||
} else {
|
||||
c=(pc+pos-2+v)&0xfffff;
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], c);
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], c);
|
||||
}
|
||||
break;
|
||||
case ABranchReturn:
|
||||
SATURN_PEEKOP_DIS8(v);
|
||||
if (v==0) {
|
||||
sprintf(buffer, mnemonics[level->mnemonic+1].name[set], A);
|
||||
util::stream_format(stream, mnemonics[level->mnemonic+1].name[set], A);
|
||||
} else {
|
||||
c=(pc+pos-2+v)&0xfffff;
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], A, c);
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], A, c);
|
||||
}
|
||||
break;
|
||||
case xBranchReturn:
|
||||
SATURN_PEEKOP_DIS8(v);
|
||||
if (v==0) {
|
||||
sprintf(buffer, mnemonics[level->mnemonic+1].name[set], field_2_string(adr));
|
||||
util::stream_format(stream, mnemonics[level->mnemonic+1].name[set], field_2_string(adr));
|
||||
} else {
|
||||
c=(pc+pos-2+v)&0xfffff;
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], field_2_string(adr), c);
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], field_2_string(adr), c);
|
||||
}
|
||||
break;
|
||||
case TestBranchRet:
|
||||
i=oprom[pos++];
|
||||
SATURN_PEEKOP_DIS8(v);
|
||||
if (v==0) {
|
||||
sprintf(buffer, mnemonics[level->mnemonic+1].name[set], i);
|
||||
util::stream_format(stream, mnemonics[level->mnemonic+1].name[set], i);
|
||||
} else {
|
||||
c=(pc+pos-2+v)&0xfffff;
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], i, c);
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], i, c);
|
||||
}
|
||||
break;
|
||||
case ImmBranch:
|
||||
i=oprom[pos++];
|
||||
SATURN_PEEKOP_DIS8(v);
|
||||
c=(pc+pos-2+v)&0xfffff;
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], i, c);
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], i, c);
|
||||
break;
|
||||
case FieldP:
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], P );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], P );
|
||||
break;
|
||||
case FieldWP:
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], WP );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], WP );
|
||||
break;
|
||||
case FieldXS:
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], XS );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], XS );
|
||||
break;
|
||||
case FieldX:
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], X );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], X );
|
||||
break;
|
||||
case FieldS:
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], S );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], S );
|
||||
break;
|
||||
case FieldM:
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], M );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], M );
|
||||
break;
|
||||
case FieldB:
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], B );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], B );
|
||||
break;
|
||||
case FieldA:
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], A );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], A );
|
||||
break;
|
||||
case FieldW:
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], W );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], W );
|
||||
break;
|
||||
case AdrA:
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], adr_a[oprom[pos++] & 0x7] );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], adr_a[oprom[pos++] & 0x7] );
|
||||
break;
|
||||
case AdrAF:
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], adr_af[oprom[pos++] & 0xf] );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], adr_af[oprom[pos++] & 0xf] );
|
||||
break;
|
||||
case AdrB:
|
||||
sprintf(buffer, mnemonics[level->mnemonic].name[set], adr_b[oprom[pos++] & 0x7] );
|
||||
util::stream_format(stream, mnemonics[level->mnemonic].name[set], adr_b[oprom[pos++] & 0x7] );
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@ -1468,3 +1468,13 @@ CPU_DISASSEMBLE( saturn )
|
||||
|
||||
return pos;
|
||||
}
|
||||
|
||||
|
||||
CPU_DISASSEMBLE(saturn)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
offs_t result = internal_disasm_saturn(device, stream, pc, oprom, opram, options);
|
||||
std::string stream_str = stream.str();
|
||||
strcpy(buffer, stream_str.c_str());
|
||||
return result;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user