在chip8模拟器中实现绘制指令时遇到问题

问题描述 投票:0回答:1

大家好,我基本上正在创建一个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
      
    }
  }

c emulation chip-8
1个回答
0
投票

尝试以下更改:

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 绘制指令所需的行为。

© www.soinside.com 2019 - 2024. All rights reserved.