marty/media/roms/romdef.toml
2025-01-22 19:17:40 +00:00

172 lines
7.7 KiB
TOML

# romdef.toml
# Main ROM definition file for MartyPC.
#
# You can create your own ROM definition files. MartyPC will attempt to load
# all toml files found in the rom directory.
#
# If you find ROM variants that should be here, please let me know!
#
# ----------------------------------------------------------------------------
# Defining a ROM set
# ----------------------------------------------------------------------------
# Each [[romset]] entry defines a single ROM set.
# MartyPC resolves ROMs required to run a specific machine configuration based
# on the concept of "feature requests" and "feature providers".
# For example, if you wish to run an IBM 5160 (XT) with a Xebec hard disk
# controller and an IBM EGA card, that machine configuration will require the
# following feature strings:
# "ibm_5160"
# "ibm_basic"
# "expansion"
# "ibm_ega"
# "ibm_xebec"
#
# ROM sets advertise what features they provide in their "provides" field.
# MartyPC will load ROM sets that provide the requested features. If more than
# one ROM set provides the same feature, the set with the highest 'priority'
# value will be used.
#
#
# The following fiels are required for each ROM set:
# alias - Defines a name for this ROM set that may be referenced specifically
# (ie, in the rom_override config setting)
# desc - A human-readable string describing this ROM set.
# priority - Breaks ties between matching, complete ROM sets (higher is better)
# provides - An array of strings describing what features this ROM set provides
# oem - If true, marks the ROM set as OEM for all its features. (see below)
# oem_for - A list of features for which the ROM set will be marked as OEM.
#
# OEM selection:
# The 'oem' and 'oem_for' fields may be used to influence ROM set priority.
# Setting oem = true will set the ROM as OEM for all its features.
#
# Using oem_for = ["feature1", "feature2"] will mark the ROM as OEM for only
# the specified features.
#
# If the 'use_oem' option in main config is set, ROMs that are marked OEM are
# strongly preferred before any other ROM set. Currently, this is implemented
# by a +100 offset to ROM priority per feature.
#
# ----------------------------------------------------------------------------
# Other fields
# ----------------------------------------------------------------------------
# checkpoints - These are a list of addresses, levels and strings. When the
# CPU executes an instruction at the given address, the string is
# logged to the console, or optionally, the notification system
# (depending on specified level)
# This can be useful to watch the POST process. Be careful that
# you don't create a checkpoint that is reached too often or you
# will flood the console and take a big performance hit.
# (you must have RUST_LOG=marty_core::cpu::debug set to see log
# messages)
# Checkpoints are implemented with memory flags so are fairly
# performant to set, although obviously hitting one has a
# performance hit if they are logged.
#
# There are five defined 'levels', roughly analagoys to Rust log
# levels:
# 0 - Error. Intended for checkpoints you should never reach.
# Will be logged as an Error.
# 1 - Warning Intended for checkpoints you with to alert on. Will
# be logged as a Warning.
# 2 - Debug Checkpoints you want to see normally but nothing
# special, just passing through. Will be logged as
# Debug.
# 3 - Info Checkpoints that are in normal control flow and
# would be noisy to display always. Logged as Info.
# 4 - Trace Checkpoints that are in normal control flow and
# would be very noisy. Logged as Trace.
#
# The default checkpoint level, if not provided, is Debug.
#
# patches - When the 'trigger' address is reached, the specified bytes will
# be written to the specified 'addr', even if it is ROM.
# 'addr' may be anywhere in memory.
#
# A 'reset' address can be specified, that when reached will
# restore the original bytes at 'addr'. This is useful for
# patching code that is verified by CRC or checksum later.
# (not yet implemented)
#
# ROM Patching must be enabled in the main configuration for
# this to have any effect.
#
# reload - Reload the ROM from disk and re-map into memory when
# the machine is restarted. Useful for ROM developers.
#
# ----------------------------------------------------------------------------
# Defining a ROM entry
# ----------------------------------------------------------------------------
# 'rom' array:
#
# A ROM can be identified by either its md5 hash, in which case, filename is
# ignored, or by filename, in which case hash is ignored. If you specify both,
# hash takes precedence. Filename may be case-sensitive depending on operating
# system. It is generally recommended to specify ROMs by hash, unless you are
# a ROM developer and are replacing the same ROM filename often.
#
# addr - (REQUIRED) Specifies where the ROM should be mapped in the machine's
# address space.
#
# size - (OPTIONAL) Size of the ROM. If it is present, the ROM image will
# be truncated to this size before being mapped.
#
# org - (OPTIONAL) Default is "Normal". Specifies the ROM organization.
# Valid values are:
# Normal - just your standard, linear array of bytes.
# Reversed - bytes in the ROM image are reversed. (IBM EGA ROM)
# InterleavedEven - represents the even bytes in an interleaved set
# InterleavedOdd - represents the odd bytes in an interleaved set
#
# chip - (OPTIONAL) String identifying the chip. Variants of a ROM (different
# dumps, sizes, orgs, etc) may be specified by including multiple
# rom entries with the same "chip" string. MartyPC will use the first
# matching ROM of any duplicate "chip" definitions.
# If you don't know the official chip name you can just make up any
# valid string.
# ----------------------------------------------------------------------------
# Diagnostic ROMS - IBM 5150 & 5160
# ----------------------------------------------------------------------------
[[romset]]
alias = "supersoft_diags"
desc = "SuperSoft Diagnostic ROM for PC/XT"
priority = 0
provides = ["bios", "ibm5150v64k", "ibm5150v256k", "ibm5160", "diag"]
rom = [
{ md5 = "3a0eacac07f1020b95ce06043982dfd1", addr = 0xFE000 }
]
# ----------------------------------------------------------------------------
# Generic XT System ROMs
# ----------------------------------------------------------------------------
[[romset]]
alias = "award_xt_4000"
priority = 1
provides = ["bios", "ibm5160", "expansion"]
oem = false
rom = [
{ md5 = "a8a1027cfa97e42a42d95a883e1c30c6", filename = "Award_Turbo_4000.BIN", addr = 0xFE000, size = 8192 },
]
[[romset]]
alias = "award_xt_2.05"
priority = 1
provides = ["bios", "ibm5160", "expansion"]
oem = false
rom = [
{ md5 = "688da86aec830ac09fcd436f28cf9bca", filename = "Award_XT_2.05_2764.bin", addr = 0xFE000, size = 8192 },
]
[[romset]]
alias = "skiselev_xt_1.00"
priority = 1
# 16k ROM is incompatible with BASIC ROM at FC000. We mark this set as providing basic so basic will not be loaded.
provides = ["bios", "ibm5160", "expansion", "ibm_basic"]
oem = false
rom = [
#{ filename = "bios-xi8088-noide.rom", addr = 0xF0000, size = 0x10000 },
{ filename = "bios-xt.bin", addr = 0xFC000, size = 0x4000 },
]