Skip to content

v0.1.1

Latest

Choose a tag to compare

@github-actions github-actions released this 16 Jun 21:32
1911a4f

0.1.1 (2026-06-16)

Features

  • add Cloudflare Workers configuration (#1) (67ef2b9)
  • app: --player CLI flag to launch straight into the player (b760c84)
  • app: multi-window player, console tile art, 8 new systems (f260042)
  • app: on-screen FPS counter + rolling graph (4b5a56e)
  • app: seed the nxdk demo XBEs into the Xbox shelf (28299cf)
  • atari2600: add Atari 2600 (VCS) core from scratch (7c672f5)
  • audio: DirectSound A/B + Web Audio output (106ba20)
  • audio: implement PSG channels 1-4 + stereo output (91b9109)
  • bios: implement HuffUnComp (SWI 0x13) (7a85e8c)
  • bios: SWI HLE — math, memory, decompression, intr-wait (593093f)
  • cheats: GS / Action Replay / CodeBreaker cheat code support (f0b3682)
  • cheats: import / export cheat lists (1e7404c)
  • cheats: surface known cheats from the libretro database (1a30432)
  • controller-panel: raw signals dump for unknown D-pad indices (b472d03)
  • core-api: sketch shared FrameSource/EmulatorCore contract (b889335)
  • core: port the GBA core to Rust + WebAssembly (037e7fd)
  • cores: add fault-loop crash screens to GBA/NDS/NES/SMS/GBC (38000cd)
  • cpu: ARM7TDMI state + ARM/THUMB interpreters (05cba92)
  • desktop: cross-platform Rust front-end (eframe) — v1 (0f553cd)
  • desktop: fullscreen (F11), pause (P), and reset (5035794)
  • desktop: save states (F2/F4) + recents library (329bf20)
  • desktop: settings panel, persisted config, and per-game .sav saves (7987f4d)
  • docs: add per-core capability matrix, populated for GBA (02ceace)
  • docs: support matrices for all 16 cores (4a343a7)
  • emuapp: controller remapping + hide top bar in fullscreen (3e0589e)
  • emuapp: Metal renderer with curved-CRT shader + MetalFX upscaling (be2a8e0)
  • emuapp: pixel-art upscaling (Scale2x/Scale3x) (cddade0)
  • emuapp: redesign controller remapping UI + fix PS5 face defaults (ee6d301)
  • emuapp: settings, attachments, storage manager, key remapping, retro filters (a2621c4)
  • emuapp: unify video scaling into one Upscaling picker with pixel-perfect (a7441e7)
  • gba: emulate the Wireless Adapter (RFU) with a host↔client peer seam (5b7bc4f)
  • gba: expose wireless + multiboot via wasm and docs (f186fb0)
  • gba: Single-Pak multiboot — child-receive boot + SWI 0x25 HLE (ef7aabb)
  • gbc: complete the Game Boy Color core (CPU/PPU/APU/timer/DMA/serial + run_frame + wasm) (06fefd9)
  • gbc: scaffold core-gbc crate with LR35902 CPU + memory-map/MBC foundation (652733e)
  • gc: add Nintendo GameCube (PowerPC "Gekko") foundation core (fc8cca7)
  • genesis: add Sega Genesis / Mega Drive core from scratch (0fd523e)
  • input: turbo/autofire + usePersistedState hook (fa4727c)
  • io: IO bridge + DMA(4) + Timers(4) + IRQ + Keypad (05d9d1d)
  • io: link-cable serial controller (Phase A — loopback) (9ae2f85)
  • jit: add THUMB control flow + block transfer (formats 5/14/15/19) (5de2298)
  • jit: add THUMB formats 2/12/13 and remaining non-shift ALU ops (3b495c6)
  • jit: add THUMB immediate and register shifts (formats 1 and 4) (e6ee8cb)
  • jit: add THUMB load/store formats 6/7/8/10/11 (0790b22)
  • jit: block linking — chain compiled blocks per dispatch (1ba1afa)
  • jit: enable the recompiler by default (2c55b1e)
  • jit: recompile ARM + optimize register sync (f9b717c)
  • launcher: audio for NES/SMS/GBC/PS1/NDS players (cb0ac38)
  • launcher: console-first web homescreen redesign (d0d46a1)
  • launcher: Rust-rendered home screen with multi-system library (8605afa)
  • launcher: scrollable game grid (81e14d1)
  • launcher: settings menu rendered in the Rust launcher (8bd5e8e)
  • launcher: wire GBC + GB into the host (gbc & gb playable) (bdd3c22)
  • launcher: wire NDS core into the host (dual-screen player, nds playable) (b76c1fc)
  • launcher: wire NES core into the host (single-screen player, nes playable) (3a592a4)
  • launcher: wire PS1 into the host (BIOS-gated player, ps1 playable) (7b1c08c)
  • launcher: wire SMS + Game Gear into the host (sms & gg playable) (aea4b09)
  • library: "favorites only" filter (40ed613)
  • library: favorite games (a6fb145)
  • library: user-supplied cover art (1b250d7)
  • libretro: persist SRAM via retro_get_memory_data (battery saves) (1a6cd91)
  • libretro: RetroArch core wrapping the unified emu-native Emu (e781bb0)
  • libretro: save states via retro_serialize (GBA) (4686248)
  • link: lockstep Multi-play over the WS (Phase B-2) (753d3d5)
  • link: WS-relay link cable via Durable Object (Phase B-1) (5888a32)
  • macos: native SwiftUI app for all cores (EmuApp) (48581a1)
  • memory: EEPROM 8K save support (fixes Minish Cap save) (c71b994)
  • memory: GBA bus + region decoder, Flash 128K, S-3511A RTC (46e7df9)
  • n64: add Nintendo 64 core foundation from scratch (1e91200)
  • native: C ABI for saves, link attachments, and save-kind (2f3c489)
  • native: unified all-core native FFI (emu-native) (948047d)
  • native: wire the 8 new console cores into the unified FFI (5a2ad5a)
  • nds: implement run_frame + WasmNds wasm surface (core is runnable) (fe169e6)
  • nds: port 2D PPU (engines A/B, tiled/affine/bitmap bg, sprites, blending) (0b5043f)
  • nds: port cart loader + BIOS HLE (HLE boot + SWIs) (5239b07)
  • nds: port dual-CPU interpreter (ARM7 ARMv4T + ARM9 ARMv5TE) (3ec4558)
  • nds: port IO subsystem (irq, dma, ipc, timers, spi, rtc, touch, ds_math, sound) (d74af9d)
  • nds: port the 3D geometry engine (gx/lighting/fog) — NDS is now full 3D (5bcc0bc)
  • nds: scaffold core-nds crate with memory + CPU-state foundation (df682d0)
  • nes: from-scratch NES core (6502 + 2C02 PPU + APU + mappers 0-4) (9096065)
  • ngpc: add Neo Geo Pocket Color core from scratch (63fd041)
  • pce: add PC Engine / TurboGrafx-16 core from scratch (edc65e2)
  • player: video recording + copy-frame to clipboard (735c735)
  • ppu: implement WIN0/WIN1/OBJ-window masking in compositor (f8600a3)
  • ppu: proper affine BG renderer for modes 1 & 2 (ec5a4f0)
  • ppu: scanline PPU — modes 0/1/3/4/5, sprites, blend, window (5d2ff6f)
  • ps1: biosless HLE disc boot + crash screen (a07b1cd)
  • ps1: build the rest of the PS1 core (subsystems + GPU/GTE/SPU/CDROM + run_frame + wasm) (c588b73)
  • ps1: implement R3000A instruction set (cpu/exec.rs) (aefb34a)
  • ps1: scaffold core-ps1 crate with R3000A CPU + memory-map foundation (1aaf569)
  • pwa: installable offline app shell (367c2d7)
  • recomp: real THUMB block recompiler — foundation (61206cf)
  • recomp: WASM module emitter + hot-block translator scaffold (62a7ce7)
  • save: persistent in-game saves with localStorage + Export/Import (7b69499)
  • sio: slave-side multi-play propagation + per-baud transfer time (91f0250)
  • sms: from-scratch Master System + Game Gear core (one Z80 core, two systems) (c9bb438)
  • snes: add Super Nintendo (SNES) core from scratch (8c93a65)
  • sprite mosaic + zip ROM imports (283f3b5)
  • SRAM saves + save-type auto-detect + BG mosaic (9ecaaaa)
  • ui+wire: Emulator, canvas blit, keypad bindings, RTC GPIO (e40c8de)
  • ui: add Pokemon Ruby to the ROM picker (d3bbab3)
  • ui: backfill md5 + real cover art from LibRetro thumbnails (139cd28)
  • ui: bulk ROM delete + Debug panel + cleaner layout (358abc4)
  • ui: controller diagnostics panel + UI buttons highlight from any source (b3826d0)
  • ui: error boundaries around player, controls, and modals (5daca52)
  • ui: footer link to GitHub Issues + README bug-report section (2582904)
  • ui: fullscreen support for the player (cb07abf)
  • ui: Hasheous metadata lookup + box-art placeholder + confirm modal (1ca2a8d)
  • ui: mobile-friendly viewport sizing (3316084)
  • ui: overlay live boot diagnostics on the canvas (8086815)
  • ui: per-ROM details page (67347f5)
  • ui: React rewrite, on-screen gamepad, ROM picker (5 games) (85c1413)
  • ui: real controller panel — visual diagram + named buttons + remap (a584e6b)
  • ui: real IGDB box art via Cloudflare Worker + Twitch OAuth (049a316)
  • ui: run the app on the wasm core, drop the TypeScript core (2bfc3db)
  • ui: savestates — full emulator snapshot save/load (89b4e74)
  • ui: split App into routed Library + Player pages (2b978e2)
  • ui: Tailwind v4 + IndexedDB ROM library for user-uploaded ROMs (51f8879)
  • ui: TanStack Query for all async data + richer cover URL match (f4144fc)
  • ui: turn diagnostic overlay into a real boot splash (84c1688)
  • ui: UI overhaul, player features, and richer input (cbc6253)
  • ui: Web Gamepad API support + 60Hz pacing (ec42cfe)
  • video: GBA LCD color correction (f37be98)
  • virtualboy: add Virtual Boy core from scratch (d3f27e5)
  • web: load ROMs from disk via File System Access API (46cca6f)
  • web: wire the 8 new cores into the browser launcher (e984935)
  • winapp: native Windows app (WPF); drop cross-platform egui app (7dd83d7)
  • wonderswan: add WonderSwan / WonderSwan Color core from scratch (43bf8a0)
  • xbox: add original Xbox (Pentium III / NV2A) foundation core (abdf167)
  • xbox: boot clears init — 7M+ instructions, now waiting on hardware (9d684d8)
  • xbox: boot reaches Halo 2's first kernel call (b8568c2)
  • xbox: complete NV2A scanout path (display framebuffer + shared rasterizer) (38522af)
  • xbox: cooperative thread scheduler — multi-threaded boot (d89ff3f)
  • xbox: crack PFIFO bring-up + display init — Halo 2 past the GPU wait (1d5fe28)
  • xbox: CRT atomics, IRQL, TLS, RDMSR, whole-EEPROM read (a06cab1)
  • xbox: drive-letter mount + RtlEqualString — Halo 2 boots deeper (3ae707c)
  • xbox: expand x86 interpreter for real game code (a0cdbce)
  • xbox: file-info ordinals + HDD save files report absent (ec067f1)
  • xbox: Gouraud-shaded triangles (barycentric color interpolation) (468ac11)
  • xbox: GPU PLL + PFB config registers — pb_init passes, scanout goes live (1235eb1)
  • xbox: handle FWAIT (0x9B) — boot reaches x87 FPU code (380a9f3)
  • xbox: HDD IOCTLs + time kernel calls — Halo CE runs real game code (27544ff)
  • xbox: HLE interrupt + DPC delivery, GPU instance mem + PCI space (dae2499)
  • xbox: HLE kernel — Halo 2 boots through init (1400+ instrs) (c0c30e6)
  • xbox: implement x87 0xDA register form (FCMOVcc + FUCOMPP) (027ce3e)
  • xbox: indexed drawing (ARRAY_ELEMENT16) + viewport transform (03afed5)
  • xbox: kernel DATA exports + system clock — Halo 2 clears its timed wait (2b60a2b)
  • xbox: load default.xbe and execute the game's entry point (4e046ff)
  • xbox: mount XISO/XDVDFS discs + identify the title (51d8781)
  • xbox: NtCreateMutant + real SHA-1 (XcSHA*) — nxdk homebrew boots (689727c)
  • xbox: NtPulseEvent/NtSetEvent/NtClearEvent — past pbkit vblank sync (9a7f53e)
  • xbox: NV2A channel PUT/GET — breaks the first GPU pushbuffer wait (c82872b)
  • xbox: NV2A per-rect clip+clear — composed boot screen (91619d6)
  • xbox: NV2A primitive drawing — immediate-mode triangle rasterizer (0276aea)
  • xbox: NV2A pushbuffer execution + surface clear + scanout (a4997c5)
  • xbox: present an HDD so Halo 2 stops rebooting to dashboard (cc4b2c2)
  • xbox: quick-reboot relaunch (HalReturnToFirmware + XLaunchNewImage) (d8504e8)
  • xbox: real AvGet/SetSavedDataAddress + preserve across reboot (59c571b)
  • xbox: render a homebrew XBE boot screen end-to-end (f946320)
  • xbox: report AV pack + standard from AvSendTVEncoderOption(GET_SETTINGS) (1b9c9dc)
  • xbox: scaffold HLE kernel modules (stubs + interface) (ab609e6)
  • xbox: software 3D rasterizer + NV2A reference doc (2c7ab04)
  • xbox: SSE — XMM register file + vector instructions (dfc7192)
  • xbox: symlink objects, NtCreateEvent, advance time exports, KeRemoveQueueDpc (408257a)
  • xbox: vblank interrupts + port I/O + event stubs — game reaches main loop (1a55ed0)
  • xbox: vertex transform via constant-matrix chain (T&L pipeline) (d548ff0)
  • xbox: x87 FPU (and SSE/MMX decode seam) (a254b45)
  • xbox: XISO-backed virtual filesystem — Halo 2 reads from disc (e549727)

Bug Fixes

  • audio: compute live source rate from driving timer, was hard-coded (58eee10)
  • bios: no-op SWIs above 0x2A instead of crashing into the SVC vector (eb80dce)
  • bios: RegisterRamReset bits 5 (SIO), 6 (Sound), 7 (other IO) (90a6fa3)
  • bios: RegisterRamReset(bit 7) sets BG affine PA/PD to identity (cae7fb1)
  • build: commit prebuilt wasm so deploy doesn't need wasm-pack (d79e403)
  • build: exclude Node-only test files from tsc -b (33e99df)
  • build: noEmit goes in tsconfig.json, not the CLI (61eef2e)
  • bus: mirror ROM reads across the cart's actual size (753dc53)
  • cheats: repair mojibake + drop note pseudo-entries in libretro index (3f35f73)
  • ci: commit the open-source PS1 BIOS (was excluded by *.bin gitignore) (c1b8e4e)
  • controller-panel: Esc unbinds + new bind steals from previous owner (5bfe35f)
  • cpu: correct BIOS stub IRQ branch offset (was 0x108, should be 0x128) (8256273)
  • cpu: correct PC pipeline + minimal BIOS IRQ stub (17251fb)
  • cpu: make BIOS reset vector actually jump to ROM (46506f7)
  • cpu: THUMB POP {PC} must not interwork on ARMv4T (bcd5b13)
  • cpu: track branched flag instead of comparing r[15] to visible PC (8b45598)
  • emuapp: label face buttons A/B/X/Y instead of ambiguous "South (A/B)" (539d7b4)
  • emuapp: re-seed demos at packages/ path, prune dead recents, center player (e171b7b)
  • emulator: break BootInit chicken-and-egg in FireRed/Emerald (b44abee)
  • emulator: clear stale HBlank IF + force VBlank wait-flag bit (0398840)
  • emulator: pre-prime FireRed BootInit gates that BIOS would set (bf3986c)
  • emulator: remove redundant 0x310C wait-flag write (b3c79e7)
  • emulator: simulate BIOS post-reset DISPSTAT; ROM picker UI (dee5acd)
  • flash: erase command sequence was short-circuited by AwaitFirst (5b1d4d9)
  • gamepad: decode single-axis HID hat for D-pad (PS5/Safari fix) (dae7172)
  • gamepad: treat HID hat axes 6/7 as D-pad (6096758)
  • input: adjust sliders/selects via controller in panels (034c654)
  • io: DMA control register read returns live state, not raw mirror (9f392e9)
  • jit: defer dispatch on pending IRQ/halt and invalidate self-modified RAM blocks (a7364ff)
  • jit: rotate unaligned LDR and mask STR word addresses like the interpreter (1b3d278)
  • launcher: recognize PS1 disc images (.bin/.cue/.img/.iso/.pbp) (acda470)
  • macos: game launch crashed the app (audio format) + UI throttle (d42f478)
  • macos: player status bar no longer covers the screen (ee95c87)
  • nds: "data could not be saved" — clear WEL on deferred CS release (bd1ee10)
  • nds: glitchy audio (mix one-shot channels before step clears them) (10d9c6f)
  • ppu: 8bpp BG tile index addresses 32-byte slots, not 64-byte tiles (7feb0e7)
  • ppu: BG2 in bitmap modes (3/4/5) is always affine (70aedfc)
  • ppu: implement affine sprite rendering (Oak split-in-half fix) (9482b88)
  • ppu: sprite priority bits were colliding with the layer-id field (7241931)
  • pwa: don't run the service worker on *.localhost dev hosts (141ae37)
  • recomp: advance cycle counter by JIT block size, not 1 (a2ca82c)
  • rtc, lz77: RTC sampling edge + LZ77 self-reference in VRAM mode (b9e2bd2)
  • rtc: clear input buffer on new command + fix SIO mirror in reply (9a5ee40)
  • rtc: default status to 0x80 (POW set) so Ruby boots past battery check (664e7a8)
  • sio: also reset slave-side SIOMULTI to 0xFFFF on transfer start (2eb60ac)
  • sio: reset SIOMULTI registers to 0xFFFF on transfer start (7d5a304)
  • sio: SIOCNT.START is read-only on slaves in Multi-Play mode (2ee7c87)
  • sio: use real-hardware Multi-play transfer cycles per baud (4364cb1)
  • thumb: properly dispatch Format 7 (LDR/STR reg offset) and Format 8 (56eea50)
  • ui: bump persister cache key + sweep old rq:v1 (7aeef72)
  • ui: cover probe re-runs when thumbnails arrive after mount (69e838e)
  • ui: drop COEP require-corp + bump hasheous cache version (de2c461)
  • ui: fullscreen canvas actually fills the viewport (e76ad68)
  • ui: import .sav auto-resets so the new save takes effect (c214d6b)
  • ui: include candidates in useCoverUrl query key (4c44b17)
  • ui: save import silently lost the file picker (983f289)
  • ui: square covers + sweep stale cache entries (10ee549)
  • ui: visible 'fetching metadata' indicator while enriching (f942ca2)
  • xbox: break Halo's reboot loop — serve title metadata, isolate kernel data (cdc9389)
  • xbox: init HalDiskCachePartitionCount (ord 40) so Halo stops zeroing itself (3e3f107)
  • xbox: present only completed frames (no mid-clear black flash) (c28ac6e)
  • xbox: realistic per-frame step budget (~12M) + decoupled preempt quantum (a52c30a)
  • xbox: render real geometry — vertex arrays + DRAW_ARRAYS + clear rects (9197dd9)
  • xbox: resolve SET_SURFACE_COLOR_OFFSET against the framebuffer — triangle renders (3d4ba68)
  • xbox: revert step_cpu to safe mem::take (the split-borrow was UB) (402ff1a)

Performance Improvements

  • batch PPU/Timer advancement and cache IRQ pending flag (2dc64cf)
  • core: static bus dispatch, boxed RAM, zero-copy fb + RN FFI (e1e6e49)
  • gate recompiler dispatch + fix RTC status writes (Ruby battery) (a6254b6)
  • recomp: JIT register file in WASM linear memory + ADV toggle (3290c92)
  • xbox: cheap branch-trace gate (drop per-branch Once::call_once) (611dec9)
  • xbox: direct-RAM fast path for read/write/fetch (959df44)
  • xbox: drop per-instruction env lookup + mem::take in the step loop (98597a5)
  • xbox: present at ~30fps by trimming the per-frame spin budget (74149a6)
  • xbox: step the CPU via a disjoint split-borrow, not mem::take (d1c4f3d)