# Contributing to RetroBIOS ## Add a BIOS file 1. Fork this repository 2. Place the file in `bios/Manufacturer/Console/filename` 3. Variants (alternate hashes for the same file): `bios/Manufacturer/Console/.variants/` 4. Open a Pull Request - hashes are verified automatically and reported as a comment The [dump provenance](https://abdess.github.io/retrobios/provenance/) page lists catalogued dumps still missing from the collection, with their hashes. A file matching one of those is the most useful contribution. ## Add a platform 1. Write a scraper in `scripts/scraper/` (inherit `BaseScraper`) 2. Read the platform's upstream source to determine how it checks BIOS files 3. Register it in `platforms/_registry.yml` 4. Generate the platform YAML and test: `python scripts/verify.py --platform ` Full walkthrough: [adding a platform](https://abdess.github.io/retrobios/wiki/adding-a-platform/). ## Add an emulator profile 1. Clone the emulator's source code, upstream and libretro port 2. Trace the file loading from the entry point, not from a keyword grep 3. Document every file the code loads, with a `source_ref` line reference 4. Write the YAML to `emulators/.yml` 5. Test: `python scripts/cross_reference.py --emulator ` Full walkthrough: [profiling guide](https://abdess.github.io/retrobios/wiki/profiling/). ## File conventions - `bios/Manufacturer/Console/filename` for canonical files - `bios/Manufacturer/Console/.variants/filename.sha1prefix` for alternate versions - Files >50 MB go in GitHub release assets (`large-files` release) - RPG Maker and ScummVM directories are excluded from deduplication - Two paths differing only by case break clones on Windows and macOS; `tests/test_no_case_collisions.py` enforces this ## Before opening a PR The checks CI runs on a pull request (Python 3.12 or newer): ```bash pip install pyyaml "jsonschema[format-nongpl]" python scripts/validate_pr.py --changed # the BIOS files the branch adds python scripts/validate_schemas.py --source-only # profiles and platform files python -m unittest discover -s tests -t . ``` The full pipeline is not needed for a contribution: it rebuilds every pack (about 35 GB in `dist/`) and needs the data directories fetched first (`python scripts/refresh_data_dirs.py`), which is why maintainers run it before a release. ## PR validation CI computes SHA1/MD5/CRC32 for every new file, checks them against the platform configs, validates the YAML against the schemas, runs the test suite, and posts a report on the PR. Contributors who add platform support are credited in the README, on the documentation site, and in the BIOS packs.