mirror of
https://github.com/AlexSutila/IroGB.git
synced 2026-10-19 14:04:46 +00:00
80 lines
1.8 KiB
Python
80 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
|
|
from . import gbc_py as core
|
|
|
|
|
|
class RenderedFrame:
|
|
def __init__(self, pixel_data: np.ndarray):
|
|
pixels_u32 = np.asarray(pixel_data, dtype=np.uint32)
|
|
pixels_u8 = pixels_u32.view(np.uint8).reshape((144, 160, 4))
|
|
self._pixel_data = pixels_u8[..., [2, 1, 0]] # ARGB8888 → RGB
|
|
|
|
def as_numpy(self) -> np.ndarray:
|
|
return self._pixel_data
|
|
|
|
def show(self):
|
|
plt.figure()
|
|
plt.imshow(self._pixel_data)
|
|
plt.show()
|
|
|
|
|
|
class PPUState:
|
|
def __init__(self, ppu_state: core.PPUState):
|
|
if not isinstance(ppu_state, core.PPUState):
|
|
raise ValueError("Expected core.PPUState")
|
|
self._ppu_state = ppu_state
|
|
|
|
@property
|
|
def state(self):
|
|
return self._ppu_state.state
|
|
|
|
@property
|
|
def lcdc(self):
|
|
return self._ppu_state.lcdc
|
|
|
|
@property
|
|
def stat(self):
|
|
return self._ppu_state.stat
|
|
|
|
@property
|
|
def scx(self):
|
|
return self._ppu_state.scx
|
|
|
|
@property
|
|
def scy(self):
|
|
return self._ppu_state.scy
|
|
|
|
@property
|
|
def wx(self):
|
|
return self._ppu_state.wx
|
|
|
|
@property
|
|
def wy(self):
|
|
return self._ppu_state.wy
|
|
|
|
@property
|
|
def lyc(self):
|
|
return self._ppu_state.lyc
|
|
|
|
@property
|
|
def ly(self):
|
|
return self._ppu_state.ly
|
|
|
|
def __repr__(self):
|
|
return (
|
|
f"PixelProcessorState("
|
|
f"state={self.state}, "
|
|
f"lcdc=0x{self.lcdc:02X}, "
|
|
f"stat=0x{self.stat:02X}, "
|
|
f"scx={self.scx}, "
|
|
f"scy={self.scy}, "
|
|
f"wx={self.wx}, "
|
|
f"wy={self.wy}, "
|
|
f"lyc={self.lyc}, "
|
|
f"ly={self.ly}"
|
|
f")"
|
|
)
|