mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
Merge pull request #1655 from npwoods/dasmstream_8x300
Changed the 8x300 disassembler to use 'std::ostream &' internally
This commit is contained in:
commit
21a225302c
@ -41,9 +41,8 @@ static inline bool is_src_rot(uint16_t opcode)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
CPU_DISASSEMBLE( n8x300 )
|
static offs_t internal_disasm_n8x300(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
|
||||||
{
|
{
|
||||||
char tmp[16];
|
|
||||||
unsigned startpc = pc;
|
unsigned startpc = pc;
|
||||||
uint16_t opcode = (oprom[pc - startpc] << 8) | oprom[pc+1 - startpc];
|
uint16_t opcode = (oprom[pc - startpc] << 8) | oprom[pc+1 - startpc];
|
||||||
uint8_t inst = opcode >> 13;
|
uint8_t inst = opcode >> 13;
|
||||||
@ -53,99 +52,90 @@ CPU_DISASSEMBLE( n8x300 )
|
|||||||
switch (inst)
|
switch (inst)
|
||||||
{
|
{
|
||||||
case 0x00:
|
case 0x00:
|
||||||
sprintf(buffer,"MOVE ");
|
stream << "MOVE " << reg_names[SRC];
|
||||||
strcat(buffer,reg_names[SRC]);
|
|
||||||
if(is_rot(opcode))
|
if(is_rot(opcode))
|
||||||
sprintf(tmp,"(%i),",ROTLEN);
|
util::stream_format(stream, "(%i),", ROTLEN);
|
||||||
else
|
else
|
||||||
sprintf(tmp,",%i,",ROTLEN);
|
util::stream_format(stream, ",%i,", ROTLEN);
|
||||||
strcat(buffer,tmp);
|
stream << reg_names[DST];
|
||||||
strcat(buffer,reg_names[DST]);
|
|
||||||
break;
|
break;
|
||||||
case 0x01:
|
case 0x01:
|
||||||
sprintf(buffer,"ADD ");
|
stream << "ADD " << reg_names[SRC];
|
||||||
strcat(buffer,reg_names[SRC]);
|
|
||||||
if(is_rot(opcode))
|
if(is_rot(opcode))
|
||||||
sprintf(tmp,"(%i),",ROTLEN);
|
util::stream_format(stream, "(%i),", ROTLEN);
|
||||||
else
|
else
|
||||||
sprintf(tmp,",%i,",ROTLEN);
|
util::stream_format(stream, ",%i,", ROTLEN);
|
||||||
strcat(buffer,tmp);
|
stream << reg_names[DST];
|
||||||
strcat(buffer,reg_names[DST]);
|
|
||||||
break;
|
break;
|
||||||
case 0x02:
|
case 0x02:
|
||||||
sprintf(buffer,"AND ");
|
stream << "AND " << reg_names[SRC];
|
||||||
strcat(buffer,reg_names[SRC]);
|
|
||||||
if(is_rot(opcode))
|
if(is_rot(opcode))
|
||||||
sprintf(tmp,"(%i),",ROTLEN);
|
util::stream_format(stream, "(%i),", ROTLEN);
|
||||||
else
|
else
|
||||||
sprintf(tmp,",%i,",ROTLEN);
|
util::stream_format(stream, ",%i,", ROTLEN);
|
||||||
strcat(buffer,tmp);
|
stream << reg_names[DST];
|
||||||
strcat(buffer,reg_names[DST]);
|
|
||||||
break;
|
break;
|
||||||
case 0x03:
|
case 0x03:
|
||||||
sprintf(buffer,"XOR ");
|
stream << "XOR " << reg_names[SRC];
|
||||||
strcat(buffer,reg_names[SRC]);
|
|
||||||
if(is_rot(opcode))
|
if(is_rot(opcode))
|
||||||
sprintf(tmp,"(%i),",ROTLEN);
|
util::stream_format(stream, "(%i),", ROTLEN);
|
||||||
else
|
else
|
||||||
sprintf(tmp,",%i,",ROTLEN);
|
util::stream_format(stream, ",%i,", ROTLEN);
|
||||||
strcat(buffer,tmp);
|
stream << reg_names[DST];
|
||||||
strcat(buffer,reg_names[DST]);
|
|
||||||
break;
|
break;
|
||||||
case 0x04:
|
case 0x04:
|
||||||
sprintf(buffer,"XEC ");
|
stream << "XEC " << reg_names[SRC];
|
||||||
strcat(buffer,reg_names[SRC]);
|
|
||||||
if(is_src_rot(opcode))
|
if(is_src_rot(opcode))
|
||||||
{
|
{
|
||||||
sprintf(tmp,",%02XH",IMM8);
|
util::stream_format(stream, ",%02XH", IMM8);
|
||||||
strcat(buffer,tmp);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sprintf(tmp,",%i",ROTLEN);
|
util::stream_format(stream, ",%i", ROTLEN);
|
||||||
strcat(buffer,tmp);
|
util::stream_format(stream, ",%02XH", IMM5);
|
||||||
sprintf(tmp,",%02XH",IMM5);
|
|
||||||
strcat(buffer,tmp);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x05:
|
case 0x05:
|
||||||
sprintf(buffer,"NZT ");
|
stream << "NZT " << reg_names[SRC];
|
||||||
strcat(buffer,reg_names[SRC]);
|
|
||||||
if(is_src_rot(opcode))
|
if(is_src_rot(opcode))
|
||||||
{
|
{
|
||||||
sprintf(tmp,",%02XH",IMM8);
|
util::stream_format(stream, ",%02XH", IMM8);
|
||||||
strcat(buffer,tmp);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sprintf(tmp,",%i",ROTLEN);
|
util::stream_format(stream, ",%i", ROTLEN);
|
||||||
strcat(buffer,tmp);
|
util::stream_format(stream, ",%02XH", IMM5);
|
||||||
sprintf(tmp,",%02XH",IMM5);
|
|
||||||
strcat(buffer,tmp);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x06:
|
case 0x06:
|
||||||
sprintf(buffer,"XMIT ");
|
stream << "XMIT ";
|
||||||
if(is_src_rot(opcode))
|
if(is_src_rot(opcode))
|
||||||
{
|
{
|
||||||
sprintf(tmp,"%02XH,",IMM8);
|
util::stream_format(stream, "%02XH,", IMM8);
|
||||||
strcat(buffer,tmp);
|
stream << reg_names[SRC];
|
||||||
strcat(buffer,reg_names[SRC]);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sprintf(tmp,"%02XH,",IMM5);
|
util::stream_format(stream, "%02XH,", IMM5);
|
||||||
strcat(buffer,tmp);
|
stream << reg_names[SRC];
|
||||||
strcat(buffer,reg_names[SRC]);
|
util::stream_format(stream, ",%i", ROTLEN);
|
||||||
sprintf(tmp,",%i",ROTLEN);
|
|
||||||
strcat(buffer,tmp);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x07:
|
case 0x07:
|
||||||
sprintf(buffer,"JMP %04XH",opcode & 0x1fff);
|
util::stream_format(stream, "JMP %04XH", opcode & 0x1fff);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return (pc - startpc);
|
return (pc - startpc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CPU_DISASSEMBLE(n8x300)
|
||||||
|
{
|
||||||
|
std::ostringstream stream;
|
||||||
|
offs_t result = internal_disasm_n8x300(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