当前位置: 首页>>代码示例>>C++>>正文


C++ data_buffer::r8方法代码示例

本文整理汇总了C++中data_buffer::r8方法的典型用法代码示例。如果您正苦于以下问题:C++ data_buffer::r8方法的具体用法?C++ data_buffer::r8怎么用?C++ data_buffer::r8使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在data_buffer的用法示例。


在下文中一共展示了data_buffer::r8方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1:

offs_t cop420_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params)
{
	uint8_t opcode = opcodes.r8(pc);
	uint8_t next_opcode = opcodes.r8(pc+1);
	uint16_t address;
	uint32_t flags = 0;
	int bytes = 1;

	if ((opcode >= 0x80 && opcode <= 0xBE) || (opcode >= 0xC0 && opcode <= 0xFE))
	{
		int page = pc >> 6;

		if (page == 2 || page == 3) //JP pages 2,3
		{
			address = (uint16_t)((pc & 0x380) | (opcode & 0x7F));
			util::stream_format(stream, "JP %03X", address);
		}
		else
		{
			if ((opcode & 0xC0) == 0xC0) //JP other pages
			{
				address = (uint16_t)((pc & 0x3C0) | (opcode & 0x3F));
				util::stream_format(stream, "JP %03X", address);
			}
			else                    //JSRP
			{
				address = (uint16_t)(0x80 | (opcode & 0x3F));
				util::stream_format(stream, "JSRP %03X", address);
				flags = STEP_OVER;
			}
		}
	}
开发者ID:Dagarman,项目名称:mame,代码行数:32,代码来源:cop420ds.cpp

示例2: param_dr_lit

offs_t capricorn_disassembler::param_dr_lit(std::ostream &stream, offs_t pc, const data_buffer &opcodes)
{
	stream << "DR,=";
	// Here we assume that multi-byte instructions operate on 2 bytes because we
	// have no way of knowing how many they are (the actual number of bytes is
	// dynamically determined by the value of DRP register at run-time)
	unsigned bytes = BIT(opcodes.r8(pc), 0) ? 2 : 1;

	for (unsigned i = 1; i <= bytes; i++) {
		util::stream_format(stream, "$%02x ", opcodes.r8(pc+i));
	}

	return bytes;
}
开发者ID:Dagarman,项目名称:mame,代码行数:14,代码来源:capricorn_dasm.cpp

示例3: disassemble

offs_t capricorn_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params)
{
	const dis_entry_t *p;
	uint8_t opcode = opcodes.r8(pc);

	for (p = dis_table; p->m_op_mask; p++) {
		if ((opcode & p->m_op_mask) == p->m_opcode) {
			offs_t res = 1 | p->m_dasm_flags | SUPPORTED;
			stream << p->m_mnemonic;
			if (p->m_has_mb) {
				stream << (BIT(opcode, 0) ? 'M' : 'B');
			}
			if (p->m_addr_mode != '\0') {
				stream << p->m_addr_mode;
			}
			if (p->m_param_fn != nullptr) {
				stream << " ";
				res += (this->*(p->m_param_fn))(stream, pc, opcodes);
			}
			return res;
		}
	}

	// Unknown opcode
	stream << "???";
	return 1 | SUPPORTED;
}
开发者ID:Dagarman,项目名称:mame,代码行数:27,代码来源:capricorn_dasm.cpp

示例4: param_jmp_off

offs_t capricorn_disassembler::param_jmp_off(std::ostream &stream, offs_t pc, const data_buffer &opcodes)
{
	uint16_t off = opcodes.r8(pc+1);
	if (BIT(off, 7)) {
		off -= 0x100;
	}
	util::stream_format(stream, "$%04x", (pc + 2 + off) & 0xffff);
	return 1;
}
开发者ID:Dagarman,项目名称:mame,代码行数:9,代码来源:capricorn_dasm.cpp

示例5: param_dr_id_ar

offs_t capricorn_disassembler::param_dr_id_ar(std::ostream &stream, offs_t pc, const data_buffer &opcodes)
{
	stream << "DR," << (BIT(opcodes.r8(pc), 1) ? '-' : '+') << "AR";
	return 0;
}
开发者ID:Dagarman,项目名称:mame,代码行数:5,代码来源:capricorn_dasm.cpp

示例6: param_arp_drp

offs_t capricorn_disassembler::param_arp_drp(std::ostream &stream, offs_t pc, const data_buffer &opcodes)
{
	stream << "R";
	util::stream_format(stream, "%02o", opcodes.r8(pc) & 0x3f);
	return 0;
}
开发者ID:Dagarman,项目名称:mame,代码行数:6,代码来源:capricorn_dasm.cpp

示例7: disassemble

offs_t saturn_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params)
{
	int adr=0;

	int cont=1; // operation still not complete disassembled
	char bin[10]; int binsize=0; // protocollizing fetched nibbles
	char number[17];
	const OPCODE *level=opcs[0]; //pointer to current digit
	int op; // currently fetched nibble
	offs_t pos = pc;

	int i,c,v;

	int mnemonics_bank = m_config->get_nonstandard_mnemonics_mode() ? 1 : 0;

	while (cont)
	{
		op = opcodes.r8(pos++) & 0xf;
		level+=op;
		switch (level->sel) {
		case Illegal:
			cont=0;
			bin[binsize++]=number_2_hex[op];
			bin[binsize]=0;
			util::stream_format(stream, "???%s",bin);
			break;
		default:
			bin[binsize++]=number_2_hex[op];
			switch (level->adr) {
			case AdrNone: break;
			case AdrA:
				adr=field_adr_a[op];
				break;
			case AdrAF:
				adr=field_adr_af[op];
				break;
			case AdrB:
				adr=field_adr_b[op&7];
				break;
			default:
				cont = 0;
				bin[binsize++]=number_2_hex[op];
				bin[binsize]=0;
				util::stream_format(stream, "???%s",bin);
				break;
			}
			break;
		case Complete:
			cont=0;
			switch (level->adr==AdrNone?adr:level->adr) {
			case AdrNone:
				stream << mnemonics[level->mnemonic][mnemonics_bank];
				break;
			case Imm:
				util::stream_format(stream, mnemonics[level->mnemonic][mnemonics_bank], opcodes.r8(pos++));
				break;
			case ImmCount:
				util::stream_format(stream, mnemonics[level->mnemonic][mnemonics_bank], opcodes.r8(pos++)+1);
				break;
			case AdrImmCount:
				util::stream_format(stream, mnemonics[level->mnemonic][mnemonics_bank], field_2_string(adr), opcodes.r8(pos++)+1);
				break;
			case AdrCount: // mnemonics have string %s for address field
				snprintf(number,sizeof(number),"%x",opcodes.r8(pos++)+1);
				util::stream_format(stream, mnemonics[level->mnemonic][mnemonics_bank], number);
				break;
			case Imm2:
				v=opcodes.r8(pos++);
				v|=opcodes.r8(pos++)<<4;
				util::stream_format(stream, mnemonics[level->mnemonic][mnemonics_bank], v);
				break;
			case Imm4:
				v=opcodes.r8(pos++);
				v|=opcodes.r8(pos++)<<4;
				v|=opcodes.r8(pos++)<<8;
				v|=opcodes.r8(pos++)<<12;
				util::stream_format(stream, mnemonics[level->mnemonic][mnemonics_bank], v);
				break;
			case Imm5:
				v=opcodes.r8(pos++);
				v|=opcodes.r8(pos++)<<4;
				v|=opcodes.r8(pos++)<<8;
				v|=opcodes.r8(pos++)<<12;
				v|=opcodes.r8(pos++)<<16;
				util::stream_format(stream, mnemonics[level->mnemonic][mnemonics_bank], v);
				break;
			case ImmCload:
				c=i=opcodes.r8(pos++) & 0xf;
				number[i+1]=0;
				for (;i>=0; i--) number[i]=number_2_hex[opcodes.r8(pos++) & 0xf];
				util::stream_format(stream, mnemonics[level->mnemonic][mnemonics_bank], c+1, number);
				break;
			case Dis3:
				SATURN_PEEKOP_DIS12(v);
				c=(pc+pos-3+v)&0xfffff;
				util::stream_format(stream, mnemonics[level->mnemonic][mnemonics_bank], c );
				break;
			case Dis3Call:
				SATURN_PEEKOP_DIS12(v);
				c=(pc+pos+v)&0xfffff;
//.........这里部分代码省略.........
开发者ID:Dagarman,项目名称:mame,代码行数:101,代码来源:saturnds.cpp


注:本文中的data_buffer::r8方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。