Log inGet started
·
emulatorcore · drop-in viewer
asset⌬ emulatorcoreemulatorCoreprimary: init.luau·part ofpackage retro.package·originates fromworld f2b7e29b-6…▲1problem

nes_core.emulatorCore

NES console spec for the RetroConsole cabinet: 256×240 display, `.nes` (iNES) cartridges, controller 1 on arrows/WASD + Z/X + Enter + RShift, four MIDI voices from the APU model, and battery PRG-RAM persistence. The machine core is `retro.nes` (6502 + PPU + APU + mappers NROM/MMC…

by◐Deata·posted 3mo ago
What it does

nes (emulatorCore)

NES console spec for the RetroConsole cabinet: 256×240 display, .nes (iNES) cartridges, controller 1 on arrows/WASD + Z/X + Enter + RShift, four MIDI voices from the APU model, and battery PRG-RAM persistence. The machine core is retro.nes (6502 + PPU + APU + mappers NROM/MMC1/UNROM/CNROM).

Interface

What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.

conforms to

zero/source-extract/v2

NES core spec for the RetroConsole cabinet. Controls: arrows/WASD = d-pad, Z/J = A, X/K = B, Enter = Start, RShift/Backspace = Select.

validate(bytes: ?) → void

argtypedescription
bytes?

framebuffer(m: ?) → void

argtypedescription
m?

applyInput(m: ?) → void

argtypedescription
m?

neutralInput(m: ?) → void

argtypedescription
m?

voices(m: ?) → void

argtypedescription
m?

statusFor(m: ?) → void

argtypedescription
m?

isDirty(m: ?) → void

argtypedescription
m?

clearDirty(m: ?) → void

argtypedescription
m?

get(m: ?) → void

argtypedescription
m?

set(m: ?, bytes: ?) → void

argtypedescription
m?
bytes?

Sub-parts

Everything contained inside this part. Assets are composite children (clickable cards). Files are leaf payloads. Expand any row to view its source.

20items
·
assettype · born here
❒asset
# emulatorCore (asset type) A pluggable console emulator: the machine spec the `RetroConsole` cabinet discovers and boots. Publishing a new `<name>.emulatorCore` asset (in any package) makes that console appear in every cabinet in the world — the cabinet enumerates `asset.list("emulatorCore")` live, so cores install like any other content, with no cabinet changes. ## Instance shape `<name>.emulatorCore/init.luau` returns the core spec: ```luau return { id = "nes", -- stable key: save/store namespaces derive from it name = "NES", -- select-screen label cover = "cover_nes", -- optional: texture reference shown on the select screen extensions = { "nes" }, -- cartridge extensions, lowercase, first = default width = 256, -- native framebuffer size height = 240, fps = 60.0988, -- hardware frame rate romsDir = "/zero/source/nes_roms", storePrefix = "nes_roms/", -- runtime-data cartridge library namespace savesPrefix = "nes_saves/", -- battery-save namespace; omit if the console has none make = function(bytes) ... end, -- romBytes -> machine; raises on a bad ROM validate = function(bytes) ... end, -- ok, err — gate for uploads/URL fetches framebuffer = function(m) ... end, -- machine -> RGBA8 buffer (width*height*4) applyInput = function(m) ... end, -- read the keyboard, set machine input neutralInput = function(m) ... end, -- release every button (called on disengage) voices = function(m) ... end, -- optional: { {active, hz, vol, noise} } for MIDI statusFor = function(m) ... end,-- optional one-line status; defaults to m.title ram = { -- optional battery accessors isDirty = function(m) ... end, clearDirty = function(m) ... end, get = function(m) ... end, set = function(m, bytes) ... end, }, } ``` The machine contract behind `make` is the `retro.host` one: `m:runFrame()` advances one video frame; `m.title` keys battery saves and the status line. ## Reading a spec `asset.resolve("<name>", "emulatorCore"):spec()` loads and caches the spec (the type's `behavior.luau` provides `:spec()` on every reference).
▲ 0↑ born
▣
module · born here
❒asset
# nes A module script.
▲ 0↑ born
❒
package · born here
❒asset
# retro A pluggable multi-console emulation system: the `RetroConsole` arcade cabinet, the `emulatorCore` asset type consoles plug into, the shared host machinery, and two machine cores (CHIP-8, NES). Install this package, drop the cabinet on a panel, and every emulator core installed in the world shows up in one cartridge loader — one screen, one machine running at a time. ## What installs - **`RetroConsole.component`** — the cabinet. One screen, one loader spanning every installed console, engage/release controls (Esc), letterboxed display, per-console battery saves and cartridge libraries. See its README for the drop-on-a-panel quick start. - **`emulatorCore.assetType`** — the console plug. A core is an asset carrying its spec (extensions, resolution, fps, `make`, input map, battery accessors); publishing one in any package adds that console to every cabinet in the world. The contract is documented in the type's README. - **`chip8_core.emulatorCore` / `nes_core.emulatorCore`** — the shipped consoles (the Game Boy core registers from `gameboy.package` as `gameboy_core.emulatorCore`). - **`chip8.module`** — CHIP-8 machine: 35 opcodes, configurable quirks, 128×64 phosphor framebuffer, beeper voice. - **`nes.module`** — NES machine: cycle-exact 6502 (nestest golden log), scanline PPU with loopy scroll + sprite-0 hit, APU voice model, controllers, mappers NROM/MMC1/UNROM/CNROM, battery PRG-RAM. - **`host.module`** — the shared machinery (`require("retro.host")`): the cabinet engine (`Console`), the core registry, and the units both the cabinet and standalone console components compose — `Display`, `RomLibrary`, `Pacer`, `Saves`, `MidiVoices`, `LoaderUi`, `Host`. - **`console_screen.texture` / `console_screen_mat.material`** — the cabinet's screen surface. ## Machine contract A core's `make(romBytes)` returns a machine with `m:runFrame()` advancing one video frame and `m.title` naming it for saves/status; the spec's `framebuffer(m)` exposes the RGBA8 buffer the cabinet blits. The `emulatorCore.assetType` README documents the full spec table.
▲ 0↑ born
backing path · retro.package/nes_core.emulatorCore

Problems

Everything affecting this asset right now: its own problems, anything wrong inside it, and problems on its direct dependencies.

1problem

This asset

▲1problem
▲
dep.dangling.checksum_drift
dep `emulatorCore` -> 4a1886a5-3b49-42b9-bc1b-e864cb714bad no longer resolves (checksum_drift)
⌬ZeroMind agent review · awaiting first pass
Findings
Reviewer findings (handle · model · tag · quoted note) appear here once the per-pass review log lands. Today only the rolled-up agent_score is exposed.
usability—
did it work as advertised
quality—
authoring polish + cohesion
performance—
frame & memory budget held
agent review score
—
/ 100
awaiting first pass
usability × 0.40
+ quality × 0.35
+ performance × 0.25
± compat factor

Usability ratings

Did the part work as advertised when consumers tried to drop it in. Separate from upvotes: those are taste; this is "did it function".

—%no reports yet
Sign in to report whether this part worked for you.
Discussion

Scoped to this part · feeds back into the world's score.

0comments
Sign in to post.sign in
No comments yet. Be the first.