diff options
Diffstat (limited to 'ops.yaml')
| -rw-r--r-- | ops.yaml | 70 | 
1 files changed, 30 insertions, 40 deletions
| @@ -8833,9 +8833,10 @@ templates:        const gb_t * const ctx,        const uint16_t addr      ) { -      if (gpu_is_active(ctx) && gpu_get_mode(ctx) == GPU_MODE_VRAM) { +      switch (gpu_get_mode(ctx)) { +      case GPU_MODE_VRAM:          return 0xFF; -      } else { +      default:          // return vram (8k)          return ctx->mmu.vram[addr & 0x1FFF];        } @@ -8846,18 +8847,14 @@ templates:        const gb_t * const ctx,        const uint16_t addr      ) { -      if (gpu_is_active(ctx)) { -        switch (gpu_get_mode(ctx)) { -        case GPU_MODE_HBLANK: -        case GPU_MODE_VBLANK: -          // oam memory (160 bytes): -          return ctx->mmu.oam[addr & 0xFF]; -        default: -          return 0; -        } -      } else { +      // NOTE: gpu_get_mode() returns VBLANK if gpu is inactive +      switch (gpu_get_mode(ctx)) { +      case GPU_MODE_HBLANK: +      case GPU_MODE_VBLANK:          // oam memory (160 bytes): -        return ctx->mmu.oam[addr & 0xFF]; +        return ctx->mmu.oam[addr - 0xFE00]; +      default: +        return 0;        }      } @@ -8971,21 +8968,15 @@ templates:        const uint16_t addr,        const uint8_t val      ) { -      if (gpu_is_active(ctx)) { -        switch (gpu_get_mode(ctx)) { -        case GPU_MODE_HBLANK: -        case GPU_MODE_VBLANK: -        case GPU_MODE_OAM: -          // vram (8k) -          ctx->mmu.vram[addr & 0x1FFF] = val; -          break; -        default: -          // do nothing -          break; -        } -      } else { -        // vram (8k) +      // NOTE: gpu_get_mode() returns VBLANK if lcd is inactive +      switch (gpu_get_mode(ctx)) { +      case GPU_MODE_VRAM: +        // do nothing +        break; +      default: +        // write to vram (8k)          ctx->mmu.vram[addr & 0x1FFF] = val; +        break;        }      } @@ -8995,21 +8986,20 @@ templates:        const uint16_t addr,        const uint8_t val      ) { -      if (gpu_is_active(ctx)) { -        switch (gpu_get_mode(ctx) & 0x3) { -        case GPU_MODE_HBLANK: -        case GPU_MODE_VBLANK: -          // oam memory (160 bytes): -          ctx->mmu.oam[addr & 0xFF] = val; +      // NOTE: gpu_get_mode() returns VBLANK if lcd is inactive +      switch (gpu_get_mode(ctx) & 0x3) { +      case GPU_MODE_HBLANK: +      case GPU_MODE_VBLANK: +        // oam memory (160 bytes): +        ctx->mmu.oam[addr - 0xFE00] = val; -          // invalidate oam cache -          ctx->gpu.oam_dirty = true; +        // invalidate oam cache +        ctx->gpu.oam_dirty = true; -          break; -        default: -          // do nothing -          break; -        } +        break; +      default: +        // do nothing +        break;        }      } | 
