Parser for Ralf Brown's Interrupt List (Release 61) into structured YAML.
Pre-generated output is available at rbil-yaml.
uv run parse-rbil <input_dir> <output_dir>input_dir— path to the RBIL data directory (containinginter61a/throughinter61f/)output_dir— path to write YAML output files
interrupts/int_XX.yaml— one file per interrupt numberports.yaml— I/O port entriestables.yaml— reference tablesmetadata.yaml— release info, categories, and file map- Additional files for glossary, bibliography, CPU bugs, SMM, etc.
The following are not fully parsed and end up as raw text, fallback types, or dropped entirely:
- Return registers — lines in
Return:blocks that don't match register syntax or CF/---ifconditions are stored asraw_linesstrings rather than structured register objects. - Cross-references — MSR, CMOS, and I2C references in
SeeAlsolack dedicated reference types and fall back to a genericInterruptRefwith just anamefield. - Table rows — rows that don't match the value/bitfield/format regex are silently appended to the previous row's description, which can mangle data if a row has unusual formatting.
- Sub-values — in register sub-value lists, lines not matching the hex or bit-range patterns are silently dropped if there's no prior result to append to.
- Unparseable dividers — blocks whose divider line can't be parsed (malformed or wrapped) are either captured as uncaptured content or skipped entirely.
- Blocks without entry lines — if the first non-empty line after a divider doesn't match any known entry prefix (
INT,PORT,MEM, etc.), the entire block is skipped. - Unrecognized field labels — only the labels in the hardcoded
FIELD_LABELSset are detected; any other label-like lines are not identified as fields. - Entry flags — invalid flag characters in divider lines are silently discarded.
MIT