大家好,我基本上正在创建一个chip8模拟器,但在实现绘制指令时遇到了一些麻烦。芯片8有一个64x32的屏幕我有一个大小为32的uint64_t数组。芯片 8 使用单色显示器,其中每一位表示该像素是打开还是关闭。所以现在我循环遍历该数组以获取该 64 位行。问题是我只想对 x 坐标及其后面对应的 8 位进行异或。不是整个 64 位行,只是 x 坐标和它后面的 7 位以及我拥有的精灵字节。
这是我到目前为止的代码。
for(int i = 0; i < num_bytes; i++)
{
byte byte_to_draw = memory[registers->I + i];
for(int j = 0; j < 8; j++)
{
// 64 bit number each bit representing on or off
uint64_t current_row = screen[register_value_y - i];
// I want to xor here
}
}
尝试以下更改:
for (int i = 0; i < num_bytes; i++) {
byte byte_to_draw = memory[registers->I + i];
for (int j = 0; j < 8; j++) {
// Calculate the x-coordinate for this pixel
int x_coordinate = (register_value_x + j) % 64; // Wrap around if x exceeds 63
// Get the current bit in the sprite
byte sprite_bit = (byte_to_draw >> (7 - j)) & 0x1;
// Get the current bit in the screen row
uint64_t current_row = screen[register_value_y - i];
// Perform XOR operation only for the specific bit
if (sprite_bit == 1) {
current_row ^= (uint64_t)1 << x_coordinate;
}
// Update the screen row with the modified value
screen[register_value_y - i] = current_row;
}
}
它基本上有效。 。 。该代码将精灵与指定 x 坐标的屏幕行及其后的 7 位进行异或,这是 Chip-8 绘制指令所需的行为。