Exemplo n.º 1
0
ostream& operator <<(ostream &out, Instruction &inst) {
    out << HEX2(inst.opcode);
    out << " ";
    if(inst.arglen > 0) {
        out << HEX2(inst.args[0]);
    } else {
        out << "  ";
    }
    out << " ";
    if(inst.arglen > 1) {
        out << HEX2(inst.args[1]);
    } else {
        out << "  ";
    }
    out << " ";
    if(inst.op.illegal) {
        out << "*";
    } else {
        out << " ";
    }
    out << opnames[inst.op.op];
    out << " ";
    switch (inst.op.addr_mode) {
    case IMM:
        out << "#$" << HEX2(inst.operand) << "                        ";
        break;
    case REL:
        out << "$" << HEX4(inst.addr) << "                       ";
        break;
    case ZP:
    case ZP_ST:
        out << "$" << HEX2(inst.addr) << "                         ";
        break;
    case ABS:
    case ABS_ST:
        out << "$" << HEX4(inst.addr) << "                       ";
        break;
    case A:
        out << "A" << "                           ";
        break;
    case ZPX:
        out << "($" << HEX2(inst.args[0]) << ",X) @ " << HEX2(inst.addr) << "                ";
        break;
    case ZPY:
        out << "($" << HEX2(inst.args[0]) << ",Y) @ " << HEX2(inst.addr) << "                ";
        break;
    case IDIX:
        out << "($" << HEX2(inst.args[0]) << "),Y     " << HEX2(inst.operand) << " @ " << HEX2(inst.i_addr) << "         ";
        break;
    case IXID:
        out << "($" << HEX2(inst.args[0]) << ",X) @ " << HEX2(inst.i_addr) << "                ";
        break;
    default:
        out << "                            ";
    }
    return out;
}
Exemplo n.º 2
0
void SpriteSheet::ExportSpriteFrameOffsetsTable(const PlatformConfig& config, std::stringstream& stream, const std::string& actorName, int sizeUniqueTiles) const
{
	stream << "actor_" << actorName << "_sheet_" << m_name << "_frametable:" << std::endl;

	// (w) Frame size (tiles)
	// (w) Frame size (subsprites)
	// (l) Tiles address
	// (l) Subsprite dimension bits table addr
	// (l) Subsprite position offsets table addr

	for(int i = 0; i < GetNumFrames(); i++)
	{
		std::stringstream label;
		label << "actor_" << actorName << "_sheet_" << m_name << "_frame_" << i;

		stream << label.str() << "_header:" << std::endl;

		const SpriteSheet::SpriteFrameDimensions& dimensionData = GetDimensionData(i);

		int sizeTiles = sizeUniqueTiles;

		if(sizeUniqueTiles == 0)
		{
			sizeTiles = GetWidthTiles(i, config.tileWidth) * GetHeightTiles(i, config.tileHeight);
		}

		stream << "\tdc.w 0x" << HEX4(sizeTiles) << "\t; Frame size (tiles)" << std::endl;
		stream << "\tdc.w " << label.str() << "_size_subsprites\t; Frame size (subsprites)" << std::endl;
		stream << "\tdc.l " << label.str() << std::endl;
		stream << "\tdc.l " << label.str() << "_subsprite_dimensions_bits" << std::endl;
		stream << "\tdc.l " << label.str() << "_subsprite_pos_offsets" << std::endl;
		stream << std::endl;
	}
}
Exemplo n.º 3
0
void SpriteSheet::ExportSpriteFrameDimensions(const PlatformConfig& config, std::stringstream& stream, const std::string& actorName, int sizeUniqueTiles) const
{
	for(int i = 0; i < GetNumFrames(); i++)
	{
		std::stringstream label;
		label << "actor_" << actorName << "_sheet_" << m_name << "_frame_" << i;

		u8 widthTotal;
		u8 widthWhole;
		u8 widthRemainder;
		u8 heightTotal;
		u8 heightWhole;
		u8 heightRemainder;

		std::vector<ion::Vector2i> subSprDimensionsTiles;
		std::vector<ion::Vector2i> subSprOffsetsUnflipped;
		std::vector<ion::Vector2i> subSprOffsetsFlippedX;

		GetWidthSubsprites(i, config.tileWidth, widthTotal, widthWhole, widthRemainder);
		GetHeightSubsprites(i, config.tileHeight, heightTotal, heightWhole, heightRemainder);
		GetSubspriteDimensions(i, subSprDimensionsTiles, config.tileWidth, config.tileHeight);
		GetSubspritePosOffsets(i, subSprOffsetsUnflipped, config.tileWidth, config.tileHeight);
		GetSubspritePosOffsetsFlippedX(i, subSprOffsetsFlippedX, config.tileWidth, config.tileHeight);

		int sizeTiles = sizeUniqueTiles;

		if(sizeUniqueTiles == 0)
		{
			sizeTiles = GetWidthTiles(i, config.tileWidth) * GetHeightTiles(i, config.tileHeight);
		}

		stream << label.str() << "_size_b\t\tequ 0x" << HEX4(sizeTiles * 32) << "\t; Size in bytes" << std::endl;
		stream << label.str() << "_size_t\t\tequ 0x" << HEX4(sizeTiles) << "\t; Size in tiles" << std::endl;
		stream << label.str() << "_size_subsprites\t\tequ 0x" << HEX4(widthTotal * heightTotal) << "\t; Size in subsprites" << std::endl;

		stream << std::endl;

		stream << "; Subsprite offsets from 0,0 (in pixels) - unflipped (ww) and flipped X (ww)" << std::endl;
		stream << label.str() << "_subsprite_pos_offsets:" << std::endl;

		for(int i = 0; i < subSprOffsetsUnflipped.size(); i++)
		{
			stream << "\tdc.l 0x"
				<< HEX4(subSprOffsetsUnflipped[i].x)
				<< HEX4(subSprOffsetsUnflipped[i].y)
				<< ", 0x"
				<< HEX4(subSprOffsetsFlippedX[i].x)
				<< HEX4(subSprOffsetsFlippedX[i].y)
				<< std::endl;
		}

		stream << "\tEven" << std::endl << std::endl;

		stream << "; Subsprite dimension bits (for sprite descs)" << std::endl;
		stream << label.str() << "_subsprite_dimensions_bits:" << std::endl;

		for(int i = 0; i < subSprDimensionsTiles.size(); i++)
		{
			u8 bits = ((subSprDimensionsTiles[i].x - 1) << 2) | (subSprDimensionsTiles[i].y - 1);
			stream << "\tdc.b 0x" << HEX1(bits) << std::endl;
		}

		stream << "\tEven" << std::endl << std::endl;
	}

	stream << std::dec;
	stream << std::endl;
}