{"id":50968459,"url":"https://github.com/pulchart/amigaos-kickstart-builder","last_synced_at":"2026-06-18T23:02:43.540Z","repository":{"id":358014767,"uuid":"1239529746","full_name":"pulchart/amigaos-kickstart-builder","owner":"pulchart","description":"YAML-driven builder for custom 1 MB AmigaOS Kickstart ROMs with optional embedded modules","archived":false,"fork":false,"pushed_at":"2026-06-03T08:07:03.000Z","size":53,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-03T09:21:44.022Z","etag":null,"topics":["a1200","a500plus","a600","amiga","amigaos","capitoline","compactflash","kickstart","pcmcia","rom"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pulchart.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-15T07:18:24.000Z","updated_at":"2026-06-03T09:03:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pulchart/amigaos-kickstart-builder","commit_stats":null,"previous_names":["pulchart/amigaos-kickstart-builder"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pulchart/amigaos-kickstart-builder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulchart%2Famigaos-kickstart-builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulchart%2Famigaos-kickstart-builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulchart%2Famigaos-kickstart-builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulchart%2Famigaos-kickstart-builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pulchart","download_url":"https://codeload.github.com/pulchart/amigaos-kickstart-builder/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulchart%2Famigaos-kickstart-builder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34510287,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-18T02:00:06.871Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["a1200","a500plus","a600","amiga","amigaos","capitoline","compactflash","kickstart","pcmcia","rom"],"created_at":"2026-06-18T23:02:42.906Z","updated_at":"2026-06-18T23:02:43.523Z","avatar_url":"https://github.com/pulchart.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# amigaos-kickstart-builder\n\nYAML-driven builder for custom **1 MB AmigaOS Kickstart ROMs** with optional embedded modules. Drives Capitoline `capcli.Linux` from a single per-model config, supports AmigaOS 3.2.3, 3.1, 2.05, and 2.04 source ROMs, and lets you slot extra modules (filesystem handlers, drivers, libraries) into the E0 bank, or substitute / skip / relocate stock modules in F8.\n\nOriginally written to bake `compactflash.device` + `ptable.library` ([cfd project](https://github.com/pulchart/cfd)) into the Kickstart so RDB-partitioned CF cards autoboot before any disk-loaded driver. Generalises beyond `cfd`, with config profiles for different module sets.\n\n## Contents\n\n- [Quickstart](#quickstart)\n- [Prerequisites](#prerequisites)\n- [Usage](#usage)\n- [Config profiles](#config-profiles)\n- [Worked example: A1200 3.2.3 with cfd + pfs3aio + fat95](#worked-example-a1200-323-with-cfd--pfs3aio--fat95)\n- [Customising the build](#customising-the-build)\n- [Flashing](#flashing)\n- [Deeper docs](#deeper-docs)\n- [Licensing and IP boundary](#licensing-and-ip-boundary)\n\n## Quickstart\n\n```sh\nsudo dnf install python3-jinja2 python3-pyyaml python3-tabulate # or your distro's equivalent\n# install Capitoline + at least one AmigaOS source (see Prerequisites)\n./kickstart.py 3.2.3         # builds A600 + A1200 3.2.3 ROMs\nls out/*/A600-3.2.3/*.rom    # one ROM per config profile\n```\n\n## Prerequisites\n\nThe builder runs on Linux and shells out to [Capitoline](http://capitoline.twocatsblack.com/index.php/capcli/).\n\n| # | Prerequisite | Install at | Needed by |\n|---|---|---|---|\n| 1 | Python 3.10+ with `jinja2`, `pyyaml`, `tabulate` | system packages | all configs |\n| 2 | [Capitoline](http://capitoline.twocatsblack.com/) (`capcli.Linux`, `Components/`, `Capitoline Hashes/`) | `/opt/Capitoline/` | all configs |\n| 3 | Hyperion AmigaOS 3.2.3 Update (`ROMs/`, `ADFs/`) | `/opt/AmigaOS/Update3.2.3/` | any 3.2.3 target |\n| 4 | Workbench 3.2 ADF (`workbench3.2.adf`) | `/opt/AmigaOS/AmigaOS3.2/adf/` | `cfd.yaml`, `bare.yaml`, `iconlib.yaml` (rexxsyslib.library for 3.2.3) |\n| 5 | AmigaOS 3.1 (`ROMs/`, `ADFs/`) | `/opt/AmigaOS/AmigaOS3.1/` | any 3.1 target |\n| 6 | AmigaOS 2.05 ROM (v37.350, CRC `0x43b0df7b`) | `/opt/AmigaOS/AmigaOS2.05/ROMs/` | any 2.05 target |\n| 7 | AmigaOS 2.04 ROM (v37.175 A500+, CRC `0xc3bdb240`) | `/opt/AmigaOS/AmigaOS2.04/ROMs/` | any 2.04 target |\n| 8 | [pfs3aio](https://github.com/tonioni/pfs3aio) v20.0 test5 from [EAB  PFS3aio v3.2 test](https://eab.abime.net/showthread.php?t=115072) | `/opt/AmigaOS/pfs/v20,0/` | `cfd.yaml`, `iconlib.yaml` |\n| 9 | [fat95](https://github.com/pulchart/fat95/releases) (68000 + 68020) | `/opt/AmigaOS/fat95/3.23/{68000,68020}/` | `cfd.yaml` only |\n| 10 | [cfd](https://github.com/pulchart/cfd/releases) `compactflash.device` + `ptable.library` | `/opt/AmigaOS/cfd/1.43/full/{68000,68020}/{devs,libs}/` | `cfd.yaml` only (3.2.3 / 3.1 / 2.05; A500plus-2.04 omitted, no PCMCIA or IDE) |\n| 11 | sfs [1.279](https://aminet.net/package/disk/misc/SFS) or [1.279](http://strohmayer.org/sfs/files/SFS_1.279_68k.lha) + [SFS_Fix.lha (1.279-\u003e1.280 patch)](http://www.doobreynet.co.uk/files/amiga/SFS_Fix.lha) | `/opt/AmigaOS/sfs/v1.279/SmartFilesystem` | `cfd.yaml`, `iconlib.yaml` |\n| 12 | [IconLib 46.4](https://aminet.net/package/util/libs/IconLib_46.4) (`icon.library` 68000 + 68020) | `/opt/AmigaOS/IconLib/46.4.602/Libs/{,68000/}icon.library` | `cfd.yaml`, `iconlib.yaml` |\n\n\nIf a required prerequisite for a target you're building is missing, the script reports an error and stops. Targets you don't build don't need their source trees. Capitoline / ROMs / ADFs are user-supplied (none are bundled here).\n\nFor the technical details behind the scantable patches, see [docs/kickstart-scantable.md](docs/kickstart-scantable.md).\n\n## Usage\n\n```sh\n./kickstart.py                    # all non-underscore configs in config/, every variant\n./kickstart.py -c cfd             # same, explicit config selection\n./kickstart.py 3.2.3              # both 3.2.3 ROMs\n./kickstart.py 3.1                # both 3.1 ROMs\n./kickstart.py 2.0x               # both 2.0x ROMs (A600-2.05 + A500plus-2.04)\n./kickstart.py 2.05               # A600-2.05 ROM only\n./kickstart.py 2.04               # A500plus-2.04 ROM only\n./kickstart.py a1200-3.1          # one specific model\n\n# select a different config profile (see Config profiles below)\n./kickstart.py -c bare 3.2.3\n./kickstart.py -c iconlib a600\n\n# override the output basename\n./kickstart.py -c bare -n myrom a600\n```\n\n`-c` accepts a shortname (resolved against `config/\u003cname\u003e.yaml`) or a full path.\n\nOutput lands in `out/\u003cname\u003e/\u003cMODEL\u003e/` where `\u003cname\u003e` is the config stem (or `-n` override) and `\u003cMODEL\u003e` is one of `A600-3.2.3`, `A1200-3.2.3`, `A600-3.1`, `A1200-3.1`, `A600-2.05`, `A500plus-2.04`:\n\n| File | Description |\n|---|---|\n| `\u003cname\u003e.rom` | 1 MB merged image (F8 ROM concatenated with E0 ROM) |\n| `\u003cname\u003e.F8` | F8 half (512 KB at `0xF80000`): base AmigaOS modules |\n| `\u003cname\u003e.E0` | E0 half (512 KB at `0xE00000`): extra modules (rexxsyslib, pfs3aio, fat95, compactflash.device, ...) |\n| `\u003cname\u003e.hi.bin`, `\u003cname\u003e.lo.bin` | (A1200 only) byteswapped halves for the A1200's two physical Kickstart chips |\n| `capitoline.log` | full Capitoline build log |\n| `capitoline.script` | rendered script that was fed to `capcli.Linux` |\n\nA successful run ends with a resident-module table like this (truncated):\n\n```text\nResidents in cfd.rom: A1200-3.2.3 (53 found, 2 shadowed by higher version):\n  Bank    Addr    Type      Ver    Pri  Name                     IDString                                              Notes\n  ------  ------  ------  -----  -----  -----------------------  ----------------------------------------------------  ------------------\n  F8      F80000  lib        47      0  exec.library             exec 47.13 (1.1.2025)\n  ...\n  F8      FFCB78  lib        40   -120  workbench.library        workbench.library 47.42 (1.1.2025)                    shadowed -\u003e E0 v47\n  E0      E00014  lib        47   -120  workbench.library        workbench.library 47.42 (1.1.2025)\n  E0      E352F8  lib        47      0  rexxsyslib.library       rexxsyslib 47.2 (19.8.2019)\n  E0      E3DDBA  t0         20     78  pfs3aio                  Professional-File-System-III 20.0 PFS3AIO-VERSION...\n  E0      E4CB1A  t0          3      0  fat95                    fat95 3.23 (19.05.2026) [68020]\n  E0      E538A0  dev         1     21  compactflash.device      compactflash.device 1.43 (19.05.2026) [68020]\n```\n\nIf the table is missing or any row looks wrong, check `capitoline.log` in the same output directory.\n\n## Config profiles\n\nThree profiles are bundled under `config/`. All share the same hardware model definitions (`config/_models.yaml`); only the `modules:` list differs.\n\n| Profile | Command | What it adds to E0 (and F8) |\n|---|---|---|\n| `cfd.yaml` | `./kickstart.py -c cfd` | workbench.library, icon.library, rexxsyslib, pfs3aio, sfs, fat95, **compactflash.device + ptable.library** (cfd; 3.2.3 / 3.1 / 2.05 only) |\n| `bare.yaml` | `./kickstart.py -c bare` | AmigaOS's native rom extension: workbench.library, icon.library (stock), rexxsyslib |\n| `iconlib.yaml` | `./kickstart.py -c iconlib` | workbench.library, **icon.library 46.4.602** (replaces stock), rexxsyslib, pfs3aio, sfs |\n\nSmartFilesystem (sfs) is embedded only in the A1200 ROMs for 3.1 and 3.2.3: it requires a 68020 or better CPU and Kickstart 3.0+, so the 68000 models (A600, A500+) and the 2.0x ROMs omit it. pfs3aio and fat95 run on any model (fat95 ships separate 68000 and 68020 builds, picked per model).\n\nTo create your own profile, copy any existing config file, adjust the `modules:` list, and pass it with `-c`:\n\n```sh\ncp config/bare.yaml config/myprofile.yaml\n# edit config/myprofile.yaml\n./kickstart.py -c myprofile 3.2.3\n# output: out/myprofile/A600-3.2.3/myprofile.rom, out/myprofile/A1200-3.2.3/myprofile.rom\n```\n\nThe `models_from: _models.yaml` line at the top of every config pulls in the shared hardware model definitions automatically.\n\n## Worked example: A1200 3.2.3 with cfd + pfs3aio + fat95\n\nEnd-to-end from a clean machine to two flashable EPROM images.\n\n1. Install the prerequisites listed in the [Prerequisites](#prerequisites) table: Python deps, Capitoline, the Hyperion 3.2.3 update, Workbench 3.2 ADF, IconLib, pfs3aio, fat95, cfd, sfs.\n2. Build:\n   ```sh\n   ./kickstart.py -c cfd a1200-3.2.3\n   ```\n3. Flash:\n   - `out/cfd/A1200-3.2.3/cfd.hi.bin` to the upper Kickstart EPROM (27C400).\n   - `out/cfd/A1200-3.2.3/cfd.lo.bin` to the lower Kickstart EPROM (27C400).\n\n## Customising the build\n\nBundled profiles live under `config/`; when no `-c` is given, every non-underscore profile is built. Run `./kickstart.py --help` for usage and `./kickstart.py --help-config` for the full schema. Each entry in the `modules:` list uses one of these verbs:\n\n| Verb (full signature) | Effect | Notes |\n|---|---|---|\n| `file: \u003cpath\u003e` + `rom: \"E0\"\\|\"F8\"` | add a file from disk | `path` absolute or repo-relative; copied into workdir and added by basename. |\n| `adf: \u003cpath\u003e` + `adf_path: \u003cinner\u003e` + `rom: \"E0\"\\|\"F8\"` | add a lib from a specific ADF | Capitoline `loadadf \"\u003cadf\u003e\"; add ADF:/\u003cinner\u003e`. **`adf_path:` is case-sensitive** (capcli does exact-case lookup against ADF entries); typos fail the build via the `error:` log guard rather than silently dropping the component. |\n| `replace: \u003cstock\u003e` + (`with: \u003cpath\u003e` or `adf:` + `adf_path:`) + `rom: \"F8\"\\|\"E0\"` | swap a stock F8 module for a replacement binary | `rom: \"F8\"` substitutes at the stock slot; `rom: \"E0\"` suppresses the F8 line and lands the substitute in E0 (useful when it exceeds the F8 budget). |\n| `skip: \u003cstock\u003e` | drop a stock F8 module from the build | The module isn't added anywhere. No `rom:` (rejected). |\n| `relocate: \u003cstock\u003e` + `rom: \"E0\"` | move a stock F8 module to E0 | Keeps the original content; only the ROM bank changes. `rom: \"E0\"` is the only valid value. |\n\nAll verbs accept the optional filters:\n\n- `cpu: \"68000\" | \"68020\"`: include only for the matching CPU build.\n- `os:  \"2.04\" | \"2.05\" | \"3.1\" | \"3.2.3\"`: include only for the matching OS build.\n\nWhen several rows place the same module, the most specific match wins: a row pinning both `os:` and `cpu:` beats one pinning only `cpu:`, which beats an unscoped row. This lets a module land in a different ROM bank per OS/CPU from one set of rows (e.g. `icon.library` in E0 on 3.2.3, F8 otherwise). `skip` always applies; it never competes.\n\nOrder in the `modules:` list = order of `add` directives in the rendered Capitoline script.\n\n## Flashing\n\nOutput filenames use `\u003cname\u003e` (the config stem, or `-n` override).\n\nSee the [Usage](#usage) section for the full list of files written under `out/\u003cname\u003e/\u003cMODEL\u003e/`. The flashing-relevant subset:\n\n### A1200: dual-chip layout\n\nThe A1200 Kickstart socket takes two 512 KB (4 Mbit) EPROMs wired in parallel (odd/even byte lanes). The builder produces ready-to-flash split images with the byteswap already applied: flash `\u003cname\u003e.hi.bin` to the upper chip and `\u003cname\u003e.lo.bin` to the lower chip (both 27C400 / 4 Mbit / DIP42).\n\n### A600 / A500+: single-chip layout\n\nFlash the merged 1 MB `\u003cname\u003e.rom` to a single 27C800 (8 Mbit / DIP42).\n\n### FS-UAE\n\nFor emulator use, point FS-UAE at the `\u003cname\u003e.F8` and `\u003cname\u003e.E0` halves instead of flashing anything.\n\n### Programmer\n\nThe **T48 (MiniPro)** handles 27C400 and 27C800 directly; the **TL866II Plus** (MiniPro) works via a conversion adapter.\n\n## Deeper docs\n\n- [docs/kickstart-scantable.md](docs/kickstart-scantable.md): how the 1 MB scantable redirect works across 3.2.3 / 3.1 / 2.0x and why each family uses a different mechanism.\n- [docs/ROMS.md](docs/ROMS.md): resident-module inventory across source Kickstart ROM (2.0x / 3.0 / 3.1 / 3.2.y).\n\n\n## Licensing and IP boundary\n\nThe builder itself is MIT-licensed; ROMs, ADFs, and bundled third-party modules carry their own licences and are not redistributed.\n\n\u003cdetails\u003e\n\u003csummary\u003eFull IP scope (click to expand)\u003c/summary\u003e\n\nThe MIT licence (`LICENSE`) covers the **builder itself**: the Python driver, the YAML config under `config/`, the Jinja templates under `templates/`, and the docs in this repo. Everything else lives outside the repo and carries its own licence:\n\n- **Capitoline `capcli.Linux`** (from the [capitoline.twocatsblack.com](http://capitoline.twocatsblack.com/)). This builder doesn't ship `capcli.Linux` or the `Capitoline Hashes/` database, `kickstart.py` shells out to whatever you have downloaded at `/opt/Capitoline/`.\n- **AmigaOS Kickstart ROMs and Workbench ADFs** (Hyperion 3.2.3, Commodore 3.1 / 2.05 / 2.04, etc.) are copyrighted by their respective owners. You must supply your own legally-obtained copies; the builder doesn't redistribute any ROM or ADF.\n- **Output 1 MB ROM images** produced by this tool embed code from the source Kickstart ROM and ADFs and are therefore subject to *those* licences, typically not redistributable. Build your own; don't share the binaries.\n- **cfd modules** (`compactflash.device`, `ptable.library`) are LGPL v2.1 from the [cfd project](https://github.com/pulchart/cfd). The builder reads them as plain files from `/opt/AmigaOS/cfd/\u003cversion\u003e/full/...`.\n- **fat95** (AmigaOS FAT filesystem handler) is LGPL v2.1 from the [fat95 project](https://github.com/pulchart/fat95). The builder reads it as a plain file from `/opt/AmigaOS/fat95/\u003cversion\u003e/\u003ccpu\u003e/fat95`.\n- **pfs3aio** is a third-party AmigaOS PFS3 filesystem handler (Professional-File-System-III, originally by Michiel Pelt / Peltin BV; AIO variant maintained at [tonioni/pfs3aio](https://github.com/tonioni/pfs3aio)). The builder reads it as a plain file from `/opt/AmigaOS/pfs/\u003cversion\u003e/pfs3aio`. License: see the pfs3aio distribution; the builder doesn't bundle it.\n- **sfs** a third-party AmigaOS filesystem handler from John Hendrikx and Joerg Strohmayer patched by Doobrey.\n\nIf you fork or extend the builder, the MIT licence applies to your fork's source. The output ROMs your fork produces remain subject to the upstream Kickstart / ADF / filesystem-handler / cfd licences regardless.\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpulchart%2Famigaos-kickstart-builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpulchart%2Famigaos-kickstart-builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpulchart%2Famigaos-kickstart-builder/lists"}