Commit Graph
2833 Commits
Author SHA1 Message Date
Abdessamad Derraz 5d868ee19b chore: merge the installer backups 2026-10-22 14:00:25 +02:00
Abdessamad Derraz 468b5e1d3e feat: keep a replaced BIOS file beside its folder
A file in place whose contents differ (another revision, a personal
dump) was overwritten and lost. It is now moved to
retrobios-backup/<date-time>/ beside the folder written to, under the
same path, before the verified copy replaces it. Beside, not inside:
DuckStation, SwanStation and Rustation read every file of the BIOS
folder and BizHawk walks its firmware folder recursively.

Identical files are never kept. --dry-run counts what would be kept,
the summary and the summary event name the folder, files and bytes,
and --restore FOLDER puts the files back. Data trees and standalone
copies keep their replaced files the same way.
2026-10-22 14:00:00 +02:00
Abdessamad Derraz 90dd493f3d chore: declare the mkdocs pin with the theme 2026-10-22 13:53:34 +02:00
Abdessamad Derraz 274fc37673 chore: merge the site weight and speed work 2026-10-22 13:46:50 +02:00
Abdessamad Derraz 73a6cd0515 chore: pin mkdocs below 2 in site builds 2026-10-22 13:30:01 +02:00
Abdessamad Derraz be5be996db feat: hold the site to page and index budgets
validate_site.py fails a page over 1 MB of HTML, a search index over
8.5 MB (1.7 MB gzip), a skipped heading level, a table header without
text, a script from another host and a diagram drawn at runtime. The
limits sit above what the site now measures (0.88 MB, 7.2 MB, 1.43 MB),
each with its reason, and each has a test.
2026-10-22 13:13:55 +02:00
Abdessamad Derraz 36ac7b0cd6 feat: split the heavy site pages
A manufacturer page over 500 KB of Markdown becomes a summary: its
largest consoles move to pages of their own, cut into parts when one
console is still too large, and every console keeps its heading there.
MAME's 1,564 cards move to four pages, its page keeping a row per entry
with the card's old anchor. RetroDECK's arcade list gets its own page.
site.js follows a moved card by content or by its row.

The largest page drops from 10.5 MB to 0.88 MB. Emulator groups of the
navigation open by initial (65 KB to 41 KB before the content). File
cards are level 3 under a level 2, and the hook keeps the table of
contents of card pages to level 2: platform pages no longer list every
system id. Key/value cards name their columns. The sweep runs before
the decoration, which kept every page no generator wrote any more.
2026-10-22 13:13:52 +02:00
Abdessamad Derraz 2d2addd6d2 fix: align the suite with the site layout
The redesign moved the technical questions to technical-faq.md, made the Get your files rows generated from each platform key and reduced getting-started.md to links. Tests now read those places: the pack-row test reads the rendered page. The new site scripts go through run_cli and refuse abbreviated options. The three maintenance image tools are exempt by name from the build dependency rule: their output is committed and the build only reads it. siteguides.py now triggers the site deploy, and the recipe counts match the store.
2026-10-22 13:11:07 +02:00
Abdessamad Derraz 33041b6bd1 feat: find a file by any hash, out of the search
Hashes, link lists, install commands, member tables and long reference
tables leave the site search: the index drops from 21.0 MB (4.88 MB
gzip) to 6.8 MB (1.33 MB gzip). Names and prose stay searchable.

files/?hash= takes a SHA1, MD5, CRC32 or SHA256 and reads one shard of
api/v1/lookup/ (about 22 KB gzip, was 675 KB) listing the collection
card, the platforms that declare the value and the profiles that check
it. files/?sha1= still opens the card, and a sha1- anchor missing from
a page is looked up there, so a card can move between pages.

Excluded blocks are section elements: the search plugin compares
elements by tag, so a div ended at the first nested div.
2026-10-22 12:46:40 +02:00
Abdessamad Derraz 42a0498d20 chore: run site tools through run_cli
The image and diagram scripts accepted abbreviated options and bypassed
run_cli. The FAQ checks read faq.md only, while the questions on hashes
and checks moved to technical-faq.md.
2026-10-22 12:46:34 +02:00
Abdessamad Derraz 2870c72ccb chore: merge the site mark and spacing fixes 2026-10-22 12:35:14 +02:00
Abdessamad Derraz a1b62fd070 fix: space stacked buttons and align site tables
Wrapped buttons get a row gap, the copy button fits a one-line code block, tables line up with the text, four counters share one row, the sticky sidebar label gets a rule, and a phone table no longer squeezes its first column to one letter per line.
2026-10-22 12:34:47 +02:00
Abdessamad Derraz 427a8183e3 feat: draw the site mark and favicons as vectors
The header logo was a 256 px compressed raster whose navy chip vanished on the indigo bar. The chip is now an SVG, white with the glyph cut out, and the favicon set (SVG, 32 px and an opaque 180 px touch icon) comes from scripts/make_site_icons.py.
2026-10-22 12:34:44 +02:00
Abdessamad Derraz baf38ffbee refactor: compute coverage once, index proofs
EntryCategories asked every core in turn: 3.8 million proofs for 7,430
entries. ProofIndex looks each key up once, and verify --all --json is
byte-identical (24 s to 17 s). generate_site and generate_readme now share
one coverage, cached in tmp/coverage-cache keyed by its inputs, so the
README step drops from 25 s to 3 s.
2026-10-22 12:23:26 +02:00
Abdessamad Derraz f67f4ead1b chore: align the merged site with its checks
The two redesign branches and the archive repair met in the testing guide and the prose rules: list test_archive_recipes, drop three clause semicolons, write the forbidden glyphs as escapes in the image test. README and mkdocs.yml regenerated from the merged generator.
2026-10-22 12:04:42 +02:00
Abdessamad Derraz f39bcebb22 chore: merge the site visual system 2026-10-22 12:00:19 +02:00
Abdessamad Derraz db1d679e4e chore: merge the site funnel 2026-10-22 11:59:37 +02:00
Abdessamad Derraz 02ea24d887 chore: regenerate database, manifests and exports 2026-10-22 11:59:28 +02:00
Abdessamad Derraz cea5a3d0b2 fix: count the Marathon data trees as game data
bios/Bungie holds the Marathon scenarios Aleph One reads, entries its profile files as category game_data. Listed with the other publishers' trees, they leave the system files count and sit under Game engines and PC games on the site.
2026-10-22 11:54:03 +02:00
Abdessamad Derraz 6353ee53df feat: lay the site out as a reading funnel
Five tabs from Start here to Contribute, a level on every page, a device picker on Get your files that lists every registered platform, and platform pages that open on where the files go, the command, the pack and how to check. FAQ and troubleshooting keep the questions asked before installing, the technical ones move to their own page, and getting started points to the pages that took its content.
2026-10-22 11:50:53 +02:00
Abdessamad Derraz 533b85586f feat: group platforms by the device they run on
device_group in the registry places each platform on the device picker, in the navigation and on the home page. scripts/siteguides.py holds the guide text per platform: what it is, its BIOS folder, where the install command runs.
2026-10-22 11:50:48 +02:00
Abdessamad Derraz 1b9ea86e1b feat: draw site images from data, host them
scripts/sitediagrams.py writes the explainer, install flow, verification modes, MinUI card, pipeline and data layer diagrams as inline SVG from the registry, the platform files, the install manifests and the pipeline step list. A page asks for one with an image comment, which the decoration pass resolves. The two mermaid diagrams of the architecture page are replaced, so no page loads mermaid from unpkg.

Platform logos and system icons are copied once by fetch_site_images.py with their source and owner recorded, and the build rewrites the remote links to the copies. validate_site refuses an image from another host. Three registry logos named a personal avatar instead of the project's (RomM, ROCKNIX, MiSTer FPGA) and MyMinUI's was a GitHub identicon, now dropped.

One 1200x630 sharing card per section, a 404 page with search and the two entry pages, and a list of screenshots that need a real device.
2026-10-22 11:45:47 +02:00
Abdessamad Derraz f1c58820d1 feat: restyle the site for contrast and phones
Header keeps the brand indigo in dark mode, buttons and inline code in links take the link colour, badges get darker backgrounds: axe reports no contrast failure left on nine pages in both schemes (617 nodes before). Admonitions keep one meaning per colour. On a phone, tables with a download button stack one block per row, other tables hold their first column, and commands wrap. Card grid, numbered steps, level label, terminal panel and path chip classes for the generated pages.
2026-10-22 11:45:25 +02:00
Abdessamad Derraz 67a4eb9c64 chore: merge the device set repair 2026-10-22 11:19:47 +02:00
Abdessamad Derraz 96d6238edf chore: regenerate database and manifests 2026-10-22 11:19:47 +02:00
Abdessamad Derraz 57cbff781a chore: merge the remaining platform core profiles 2026-10-22 11:15:32 +02:00
Abdessamad Derraz 15b962185a chore: admit duckstation-legacy in two checks 2026-10-22 11:15:04 +02:00
Abdessamad Derraz be25108106 feat: identify the BIOS advanced_drastic ships 2026-10-22 11:15:04 +02:00
Abdessamad Derraz 19c823ac25 feat: identify the files mupen64plus ships 2026-10-22 11:15:04 +02:00
Abdessamad Derraz 1abb8f678f feat: check archives against their set recipes
A held archive whose name has a recipe fails when it carries three or more members outside every recipe of that name. Exempt: containers a platform pins by md5, members a platform pins by zipped_file, merged clones in their own folder, NAOMI device_ref ROMs, samples and artwork.
2026-10-22 11:11:02 +02:00
Abdessamad Derraz 6c00caeaca fix: keep pinned device sets as variants
RetroDECK pins the container md5 of 170 of the archives 6ee162f8 imported, which carry the ROMs of every slot option reachable from the set. Those copies move verbatim to .variants/, where the md5 still resolves them, and the primary is rebuilt as TorrentZip from the recipe the profiles declare, each member checked by crc32 and sha1. Where a same-named copy in bios/Arcade/Arcade held the same pollution, it is rebuilt too.

Two members only these copies held stay in the older recipe that names them: pio_a72.bin in imds2ioc and presap2rb_123.rom in electron_romboxp (MAME 0.195 to 0.220), both under .variants/.
2026-10-22 11:10:57 +02:00
Abdessamad Derraz 4e5d8ba61f fix: rebuild device sets from their recipes
6ee162f8 imported MAME device and machine archives that each carried the ROMs of every slot option reachable from the set (H19 terminal ROMs in sys68k_cpu30.zip, 371 ISA card ROMs in slvrball.zip). MAME reads a slot card from the card's own archive, so those members were never read there.

Each archive is rebuilt as TorrentZip from the recipe its profiles declare (their union when profiles of several MAME versions differ), every member checked by crc32 and sha1. A copy whose recipe build already exists under the same name is removed, keeping the one filed under its manufacturer. 341-0057.bin, held only in these copies, stays in the MAME 0.220 a2pic recipe under .variants/. Every member removed is still held elsewhere in the collection.
2026-10-22 11:10:36 +02:00
Abdessamad Derraz 6387402799 chore: import all mame versions for named sets
251 sets that profiles or platforms now name were imported from MAME 0.289 only. Replaying the 22 cached listxml releases adds their older recipes (a2pic 0.220 carries 341-0057.bin) and loses none of the 2148 existing ones.
2026-10-22 11:09:44 +02:00
Abdessamad Derraz 4366db574a chore: regenerate database and manifests 2026-10-22 11:08:12 +02:00
Abdessamad Derraz 87a4e8e1b6 fix: send unreleased platforms to the installer
A release recorded without a platform's pack linked its button to that release, which serves no pack for AmberELEC, EmuELEC, KNULLI, MinUI, NextUI or MyMinUI. The cell now names the release and points to the installer, which reads the file lists on main. Core folder links resolve each core name to the profile page that describes it (mednafen_vb is beetle_vb).
2026-10-22 11:04:25 +02:00
Abdessamad Derraz 4501601769 fix: show where each platform's pack goes
Platform pages labelled base_destination, the root the platform's own list writes from, as the BIOS path, so EmuDeck read bios/ where the pack goes into ~/Emulation/bios/. The row now gives the registry's extract_to, the folder the README and the pack guide name. A platform that names no file (MinUI and its forks) showed 0/0 coverage and an empty systems table; its page now lists each core folder with the files the pack puts in it.
2026-10-22 10:56:35 +02:00
Abdessamad Derraz 9d7db09130 feat: add duckstation-legacy emulator profile 2026-10-22 10:55:01 +02:00
Abdessamad Derraz 1d9d190052 feat: add advanced_drastic emulator profile 2026-10-22 10:52:03 +02:00
Abdessamad Derraz 62b4614a03 feat: add supertuxkart emulator profile 2026-10-22 10:50:19 +02:00
Abdessamad Derraz fa7769bea7 chore: merge the pro-1000 logo database 2026-10-22 10:49:47 +02:00
Abdessamad Derraz 480c400958 feat: collect the pro-1000 logo database
Both pairs from the Real3D SDK disc (_SETUP.1): Bayou 0x64130009 at
Assets/, Orlando 0x64130005 in .variants/. The .pmem size check against
the .cmem header keeps a pair from mixing models.
2026-10-22 10:49:19 +02:00
Abdessamad Derraz e7d470e0cc feat: add supertux emulator profile 2026-10-22 10:49:05 +02:00
Abdessamad Derraz e0b9f3d45b chore: regenerate database and manifests 2026-10-22 10:48:41 +02:00
Abdessamad Derraz 344eaaba14 feat: add supermariowar emulator profile 2026-10-22 10:48:33 +02:00
Abdessamad Derraz d528546715 feat: add bennugd-monolithic emulator profile 2026-10-22 10:47:19 +02:00
Abdessamad Derraz 3d59d75dac feat: add fheroes2 emulator profile 2026-10-22 10:46:50 +02:00
Abdessamad Derraz f097c52d27 feat: add hode emulator profile 2026-10-22 10:45:36 +02:00
Abdessamad Derraz b951240b83 feat: map fallout-ce to the fallout1-ce profile 2026-10-22 10:44:46 +02:00
Abdessamad Derraz 0a9f34a390 feat: add ccleste emulator profile 2026-10-22 10:44:08 +02:00
Abdessamad Derraz d8d46e48f5 feat: add bermuda emulator profile 2026-10-22 10:44:08 +02:00