|
| static void | lcgSeed (uint32_t seed) |
| |
| static uint8_t | lcgByte (void) |
| |
| static void | regWrite (uint8_t reg, uint8_t value) |
| |
| static void | vramSetWriteAddr (uint16_t addr) |
| |
| static void | vramSetReadAddr (uint16_t addr) |
| |
| static void | vramFillLcg (uint16_t addr, int count) |
| |
| static void | vramFillByte (uint16_t addr, uint8_t value, int count) |
| |
| static void | vramWriteBytes (uint16_t addr, const uint8_t *bytes, int count) |
| |
| static void | unlockF18a (void) |
| |
| static void | paletteWriteLcg (int count) |
| |
| static void | sceneBegin (void) |
| |
| static void | dumpPalette (uint8_t out[GOLDEN_PAL_BYTES]) |
| |
| static uint64_t | fnv1a (const void *data, size_t len) |
| |
| static uint16_t | refPixel (uint16_t pram) |
| |
| static void | refRegenerate (bool paired) |
| |
| static void | refExpand (uint16_t *dst, const uint8_t *src, int n) |
| |
| static void | expandLine (const uint8_t *indexed, uint64_t digests[GOLDEN_DIGESTS_PER_LINE]) |
| |
| static int | refDivergence (void) |
| |
| static void | sceneGraphicsI (void) |
| |
| static void | sceneGraphicsII (void) |
| |
| static void | sceneText (void) |
| |
| static void | sceneMulticolor (void) |
| |
| static void | sceneText80 (void) |
| |
| static void | sceneSpritesMax (void) |
| |
| static void | sceneF18aUnlocked (void) |
| |
| static void | sceneF18aEcm3Bml (void) |
| |
| static void | sceneF18aBmlWrap (void) |
| |
| static void | sceneF18aBmlStride (void) |
| |
| static void | sceneF18aText80Attrs (void) |
| |
| static void | sceneF18aVramSnapshot (void) |
| |
| static void | sceneF18aBmlPriority (void) |
| |
| static void | sceneF18aEcm0 (void) |
| |
| static void | sceneF18aGfx2 (void) |
| |
| static void | sceneRawReset (void) |
| |
| static void | renderScene (const Scene *scene, int *lines5s, int *linesCol) |
| |
| static void | putU32 (FILE *f, uint32_t v) |
| |
| static void | putU64 (FILE *f, uint64_t v) |
| |
| static bool | getU32 (FILE *f, uint32_t *v) |
| |
| static bool | getU64 (FILE *f, uint64_t *v) |
| |
| static void | scenePath (char *buf, size_t bufLen, const char *dataDir, const char *name) |
| |
| static bool | captureScene (const Scene *scene, const char *dataDir) |
| |
| static bool | compareScene (const Scene *scene, const char *dataDir) |
| |
| static void | overlayPrefill (void) |
| |
| static void | overlayRestorePrefill (PICO9918_PIXEL_T *dst, int from, int to) |
| |
| static int | refDarken (int x, PICO9918_PIXEL_T *pixels) |
| |
| static uint8_t | refGlyphRowBits (char ch, int fy) |
| |
| static int | refRenderText (uint16_t scanline, const char *text, uint16_t x, uint16_t y, PICO9918_PIXEL_T fg, PICO9918_PIXEL_T *pixels) |
| |
| static void | refSplashReset (void) |
| |
| static void | refSplashRender (uint16_t y, uint32_t frameCount, uint32_t vBorder, uint32_t vPixels, uint32_t vVirtualPixels, PICO9918_PIXEL_T *pixels) |
| |
| static void | overlayEmitRow (void) |
| |
| static void | overlayTextCase (const char *label, const char *text, uint16_t x, uint16_t y, PICO9918_PIXEL_T fg) |
| |
| static void | overlayTextGroup (void) |
| |
| static void | overlaySplashFrame (uint32_t frameCount, bool sample) |
| |
| static void | overlaySplashGroup (void) |
| |
| static PICO9918_PIXEL_T | refSwatch (uint16_t pram) |
| |
| static void | refPalettePanel (int y, uint32_t vVirtualPixels, PICO9918_PIXEL_T *pixels) |
| |
| static void | refRegisterPanel (int diagRow, int row, PICO9918_PIXEL_T *pixels) |
| |
| static void | overlaySetConfig (uint8_t index, uint8_t value) |
| |
| static void | overlayPrimeDiag (void) |
| |
| static void | overlayPanelCase (const char *label, bool registers, bool address, bool palette, bool unlocked, bool gfx2, bool performance) |
| |
| static void | overlayPanelGroup (void) |
| |
| static void | overlayRender (void) |
| |
| static bool | overlayCapture (const char *dataDir) |
| |
| static bool | overlayCompare (const char *dataDir) |
| |
| static uint16_t | frameMapLine (uint16_t yRaw, const FrameParams *params, uint8_t reg0, uint8_t interlacedFieldOrder) |
| |
| static FrameGeometry | frameGeometry (FrameParams *params, uint8_t reg0, uint8_t reg31) |
| |
| static uint16_t | refMapLine (uint16_t yRaw, const FrameParams *params, uint8_t reg0, uint8_t interlacedFieldOrder) |
| |
| static FrameGeometry | refGeometry (FrameParams *params, uint8_t reg0, uint8_t reg31) |
| |
| static int32_t | frameActiveLines (const FrameGeometry *g, int displayPixels) |
| |
| static int32_t | refActiveLines (const FrameGeometry *g, int displayPixels) |
| |
| static void | frameEmitRow (const FrameRow *cand, const FrameRow *ref) |
| |
| static void | frameMapCase (const char *label, uint16_t yRaw, bool interlaced, uint8_t reg0, uint8_t order) |
| |
| static void | frameMapQuad (const char *label, uint16_t lineInField, bool interlaced, uint8_t reg0) |
| |
| static void | frameMapGroup (void) |
| |
| static void | frameGeomCase (const char *label, int displayPixels, bool interlaced, uint8_t reg0, uint8_t reg31) |
| |
| static void | frameGeomGroup (void) |
| |
| static uint8_t | refMergeStatus (uint8_t currentStatus, uint8_t tempStatus) |
| |
| static bool | refIntPin (uint8_t mergedStatus, uint8_t reg1, uint8_t reg0, uint8_t sr1, bool unlocked) |
| |
| static void | frameIntSetup (bool want) |
| |
| static void | frameIntCase (const char *label, uint8_t currentStatus, uint8_t tempStatus, uint8_t reg1, bool intPinPre, uint8_t reg0, uint8_t sr1, bool unlocked) |
| |
| static void | frameIntQuad (const char *label, uint8_t currentStatus, uint8_t tempStatus) |
| |
| static void | frameHIntPair (const char *label, uint8_t currentStatus, uint8_t tempStatus, uint8_t reg1, uint8_t reg0, uint8_t sr1, bool unlocked) |
| |
| static void | frameHIntReadCase (const char *label, uint8_t currentStatus, uint8_t reg1) |
| |
| static void | frameIntGroup (void) |
| |
| static void | frameRender (void) |
| |
| static bool | frameCapture (const char *dataDir) |
| |
| static bool | frameCompare (const char *dataDir) |
| |
| static bool | resetCheck (void) |
| |
| static bool | unlockCheck (void) |
| |
| int | main (int argc, char *argv[]) |
| |
pico9918-core - byte-exact frame dumps, and the comparison against them
Copyright (c) 2026 Troy Schrapel
This code is licensed under the MIT license
https://github.com/visrealm/pico9918-core
Drives fixed register/VRAM scenes through the public bus API and captures the indexed output of pico9918_scan_line() plus its returned status byte, one golden file per scene, followed by a dump of the 64 live palette RAM entries (read back through the public bus - see dumpPalette). Compare mode recomputes every scene and diffs byte-for-byte against the committed goldens.
Each line also carries two post-palette digests, so the palette -> pixel conversion in pico9918_palette.c is observable: see "Post-palette surfaces".
Usage: golden_runner compare against goldens (nonzero exit on FAIL) golden_runner –capture rewrite the goldens golden_runner –data DIR override the golden data directory
All scene content is generated by a fixed-seed LCG - no rand(), no time.
Definition in file golden.c.