initial commit

This commit is contained in:
Greg Gauthier 2025-01-22 19:17:40 +00:00
commit 934dc6d4df
94 changed files with 4192 additions and 0 deletions

BIN
archive/ibm-basic-1.10.rom Normal file

Binary file not shown.

View File

@ -0,0 +1,284 @@
# keyboard_IT.toml
# Keyboard translation file for Italian keyboard layouts for the
# MartyPC emulator.
# Why a translation file?
# ----------------------------------------------------------------------------
# Certain scancodes have changed since the 1980's, as the meaning of certain
# keys was changed, keys were split out to new keys, or moved around on the
# keyboard. This translation file will attempt to remap the modern scancodes
# to compatible ones for the given emulated keyboard type. In some cases,
# equivalents to modern keys may not exist, but you can map them by scancode
# to a key of your choice.
# Keycodes are logical names for keys on the keyboard.
# Keycodes use the W3C naming convention.
#
# See https://w3c.github.io/uievents-code/#code-value-tables for descriptions
# of these keys.
# Backquote,
# Backslash,
# BracketLeft,
# BracketRight,
# Comma,
# Digit0,
# Digit1,
# Digit2,
# Digit3,
# Digit4,
# Digit5,
# Digit6,
# Digit7,
# Digit8,
# Digit9,
# Equal,
# IntlBackslash,
# IntlRo,
# IntlYen,
# KeyA,
# KeyB,
# KeyC,
# KeyD,
# KeyE,
# KeyF,
# KeyG,
# KeyH,
# KeyI,
# KeyJ,
# KeyK,
# KeyL,
# KeyM,
# KeyN,
# KeyO,
# KeyP,
# KeyQ,
# KeyR,
# KeyS,
# KeyT,
# KeyU,
# KeyV,
# KeyW,
# KeyX,
# KeyY,
# KeyZ,
# Minus,
# Period,
# Quote,
# Semicolon,
# Slash,
# AltLeft,
# AltRight,
# Backspace,
# CapsLock,
# ContextMenu,
# ControlLeft,
# ControlRight,
# Enter,
# MetaLeft,
# MetaRight,
# ShiftLeft,
# ShiftRight,
# Space,
# Tab,
# Convert,
# KanaMode,
# Lang1,
# Lang2,
# Lang3,
# Lang4,
# Lang5,
# NonConvert,
# Delete,
# End,
# Help,
# Home,
# Insert,
# PageDown,
# PageUp,
# ArrowDown,
# ArrowLeft,
# ArrowRight,
# ArrowUp,
# NumLock,
# Numpad0,
# Numpad1,
# Numpad2,
# Numpad3,
# Numpad4,
# Numpad5,
# Numpad6,
# Numpad7,
# Numpad8,
# Numpad9,
# NumpadAdd,
# NumpadBackspace,
# NumpadClear,
# NumpadClearEntry,
# NumpadComma,
# NumpadDecimal,
# NumpadDivide,
# NumpadEnter,
# NumpadEqual,
# NumpadHash,
# NumpadMemoryAdd,
# NumpadMemoryClear,
# NumpadMemoryRecall,
# NumpadMemoryStore,
# NumpadMemorySubtract,
# NumpadMultiply,
# NumpadParenLeft,
# NumpadParenRight,
# NumpadStar,
# NumpadSubtract,
# Escape,
# Fn,
# FnLock,
# PrintScreen,
# ScrollLock,
# Pause,
# BrowserBack,
# BrowserFavorites,
# BrowserForward,
# BrowserHome,
# BrowserRefresh,
# BrowserSearch,
# BrowserStop,
# Eject,
# LaunchApp1,
# LaunchApp2,
# LaunchMail,
# MediaPlayPause,
# MediaSelect,
# MediaStop,
# MediaTrackNext,
# MediaTrackPrevious,
# Power,
# Sleep,
# AudioVolumeDown,
# AudioVolumeMute,
# AudioVolumeUp,
# WakeUp,
# Meta,
# Hyper,
# Turbo,
# Abort,
# Resume,
# Suspend,
# Again,
# Copy,
# Cut,
# Find,
# Open,
# Paste,
# Props,
# Select,
# Undo,
# Hiragana,
# Katakana,
# F1,
# F2,
# F3,
# F4,
# F5,
# F6,
# F7,
# F8,
# F9,
# F10,
# F11,
# F12,
# F13,
# F14,
# F15,
# F16,
# F17,
# F18,
# F19,
# F20,
# F21,
# F22,
# F23,
# F24,
# F25,
# F26,
# F27,
# F28,
# F29,
# F30,
# F31,
# F32,
# F33,
# F34,
# F35
# You can override the mapping of KeyCodes to scancodes with 'keycode_mappings'
# The format of keyboard_mappings is an array of mapping entries.
#
# Each mapping entry is an a dictionary with the following properties:
#
# keycode = The keycode name from the list given above.
#
# modifiers = A list of modifier keys to match. Valid values for modifiers
# include "control", "alt", "shift" and "super"
# On Mac, the command key is equivalent to "control."
#
# If a key is to be always translated, this value should be
# "any".
#
# If a key is to be translated when no modifiers are pressed,
# this value should be "none"
#
# Alternately, provide a list of modifiers. All modifiers in
# the list must be present for translation.
#
# key_macro = Convert this keycode into a sequence of multiple keycodes.
# Each keycode will be delivered after a specific delay
# (typically one frame)
#
# scancodes = The resulting scancodes to translate the specified key +
# matching modifiers into. A single keycode can map to
# multiple scancodes, which will be sent in order.
#
# 'key_macro' and 'scancodes' are mutually exclusive. Use one and leave the
# other empty.
#
# Different keyboard models can produce multi-byte scancodes, therefore, each
# keycode should be mapped to an array.
# Model F - the Original 83-key keyboard shipped with the IBM PC and XT.
# -----------------------------------------------------------------------------
# The model F keyboard has single-byte scancodes, so scancodes defined here
# should only have one element.
[keyboard.modelf]
keycode_mappings = [
# Map the '<>' key to IntlBackslash.
{keycode="IntlBackslash", modifiers=["any"], key_macro=[], macro_translate=false, scancodes=[0x2B]},
# Map the ù key to Backquote
{keycode="Backslash", modifiers=["any"], key_macro=[], macro_translate=false, scancodes=[0x29]},
# Generate a backslash.
{keycode="Backquote", modifiers=["any"], key_macro=["+ControlLeft", "+AltLeft", "+IntlBackslash", "-ControlLeft", "-AltLeft", "-IntlBackslash"], macro_translate=false, scancodes=[]},
# Generate a pipe character. There is no equivalent on the italian model F.
{keycode="Backquote", modifiers=["shift"], key_macro=["+AltLeft", "+Numpad1", "+Numpad2", "+Numpad4", "-AltLeft", "-Numpad1", "-Numpad2", "-Numpad4"], macro_translate=false, scancodes=[]},
]
# -----------------------------------------------------------------------------
# Tandy 1000 - the Original 95-key keyboard shipped with the Tandy 1000r
# -----------------------------------------------------------------------------
# The Tandy 1000 keyboard has single-byte scancodes, so scancodes defined here
# should only have one element
[keyboard.tandy1000]
keycode_mappings = [
# Map the '<>' key to IntlBackslash.
{keycode="IntlBackslash", modifiers=["any"], key_macro=[], macro_translate=false, scancodes=[0x2B]},
# Map the ù key to Backquote
{keycode="Backslash", modifiers=["any"], key_macro=[], macro_translate=false, scancodes=[0x29]},
# Generate a backslash.
{keycode="Backquote", modifiers=["any"], key_macro=["+ControlLeft", "+AltLeft", "+IntlBackslash", "-ControlLeft", "-AltLeft", "-IntlBackslash"], macro_translate=false, scancodes=[]},
# Generate a pipe character. There is no equivalent on the italian model F.
{keycode="Backquote", modifiers=["shift"], key_macro=["+AltLeft", "+Numpad1", "+Numpad2", "+Numpad4", "-AltLeft", "-Numpad1", "-Numpad2", "-Numpad4"], macro_translate=false, scancodes=[]},
]

View File

@ -0,0 +1,285 @@
# keyboard_US.toml
# Keyboard translation file for UK keyboard layouts for the MartyPC emulator
# Why a translation file?
# ----------------------------------------------------------------------------
# Certain scancodes have changed since the 1980's, as the meaning of certain
# keys was changed, keys were split out to new keys, or moved around on the
# keyboard. This translation file will attempt to remap the modern scancodes
# to compatible ones for the given emulated keyboard type. In some cases,
# equivalents to modern keys may not exist, but you can map them by scancode
# to a key of your choice.
# Keycodes are logical names for keys on the keyboard.
# Keycodes use the W3C naming convention.
#
# See https://w3c.github.io/uievents-code/#code-value-tables for descriptions
# of these keys.
# Backquote,
# Backslash,
# BracketLeft,
# BracketRight,
# Comma,
# Digit0,
# Digit1,
# Digit2,
# Digit3,
# Digit4,
# Digit5,
# Digit6,
# Digit7,
# Digit8,
# Digit9,
# Equal,
# IntlBackslash,
# IntlRo,
# IntlYen,
# KeyA,
# KeyB,
# KeyC,
# KeyD,
# KeyE,
# KeyF,
# KeyG,
# KeyH,
# KeyI,
# KeyJ,
# KeyK,
# KeyL,
# KeyM,
# KeyN,
# KeyO,
# KeyP,
# KeyQ,
# KeyR,
# KeyS,
# KeyT,
# KeyU,
# KeyV,
# KeyW,
# KeyX,
# KeyY,
# KeyZ,
# Minus,
# Period,
# Quote,
# Semicolon,
# Slash,
# AltLeft,
# AltRight,
# Backspace,
# CapsLock,
# ContextMenu,
# ControlLeft,
# ControlRight,
# Enter,
# MetaLeft,
# MetaRight,
# ShiftLeft,
# ShiftRight,
# Space,
# Tab,
# Convert,
# KanaMode,
# Lang1,
# Lang2,
# Lang3,
# Lang4,
# Lang5,
# NonConvert,
# Delete,
# End,
# Help,
# Home,
# Insert,
# PageDown,
# PageUp,
# ArrowDown,
# ArrowLeft,
# ArrowRight,
# ArrowUp,
# NumLock,
# Numpad0,
# Numpad1,
# Numpad2,
# Numpad3,
# Numpad4,
# Numpad5,
# Numpad6,
# Numpad7,
# Numpad8,
# Numpad9,
# NumpadAdd,
# NumpadBackspace,
# NumpadClear,
# NumpadClearEntry,
# NumpadComma,
# NumpadDecimal,
# NumpadDivide,
# NumpadEnter,
# NumpadEqual,
# NumpadHash,
# NumpadMemoryAdd,
# NumpadMemoryClear,
# NumpadMemoryRecall,
# NumpadMemoryStore,
# NumpadMemorySubtract,
# NumpadMultiply,
# NumpadParenLeft,
# NumpadParenRight,
# NumpadStar,
# NumpadSubtract,
# Escape,
# Fn,
# FnLock,
# PrintScreen,
# ScrollLock,
# Pause,
# BrowserBack,
# BrowserFavorites,
# BrowserForward,
# BrowserHome,
# BrowserRefresh,
# BrowserSearch,
# BrowserStop,
# Eject,
# LaunchApp1,
# LaunchApp2,
# LaunchMail,
# MediaPlayPause,
# MediaSelect,
# MediaStop,
# MediaTrackNext,
# MediaTrackPrevious,
# Power,
# Sleep,
# AudioVolumeDown,
# AudioVolumeMute,
# AudioVolumeUp,
# WakeUp,
# Meta,
# Hyper,
# Turbo,
# Abort,
# Resume,
# Suspend,
# Again,
# Copy,
# Cut,
# Find,
# Open,
# Paste,
# Props,
# Select,
# Undo,
# Hiragana,
# Katakana,
# F1,
# F2,
# F3,
# F4,
# F5,
# F6,
# F7,
# F8,
# F9,
# F10,
# F11,
# F12,
# F13,
# F14,
# F15,
# F16,
# F17,
# F18,
# F19,
# F20,
# F21,
# F22,
# F23,
# F24,
# F25,
# F26,
# F27,
# F28,
# F29,
# F30,
# F31,
# F32,
# F33,
# F34,
# F35
# You can override the mapping of KeyCodes to scancodes with 'keycode_mappings'
# The format of keyboard_mappings is an array of mapping entries.
#
# Each mapping entry is an a dictionary with the following properties:
#
# keycode = The keycode name from the list given above.
#
# modifiers = A list of modifier keys to match. Valid values for modifiers
# include "control", "alt", "shift" and "super"
# On Mac, the command key is equivalent to "control."
#
# If a key is to be always translated, this value should be
# "any".
#
# If a key is to be translated when no modifiers are pressed,
# this value should be "none"
#
# Alternately, provide a list of modifiers. All modifiers in
# the list must be present for translation.
#
# key_macro = Convert this keycode into a sequence of multiple keycodes.
# Each keycode will be delivered after a specific delay
# (typically one frame)
#
# scancodes = The resulting scancodes to translate the specified key +
# matching modifiers into. A single keycode can map to
# multiple scancodes, which will be sent in order.
#
# 'key_macro' and 'scancodes' are mutually exclusive. Use one and leave the
# other empty.
#
# Different keyboard models can produce multi-byte scancodes, therefore, each
# keycode should be mapped to an array.
# -----------------------------------------------------------------------------
# Model F - the Original 83-key keyboard shipped with the IBM PC and XT.
# -----------------------------------------------------------------------------
# The Model F keyboard has single-byte scancodes, so scancodes defined here
# should only have one element.
[keyboard.modelf]
keycode_mappings = [
{ keycode = "IntlBackslash", modifiers = ["any"], key_macro = [], macro_translate = false, scancodes = [0x2B] },
{ keycode = "Quote", modifiers = ["any"], key_macro = [], macro_translate = false, scancodes = [0x28] },
{ keycode = "Backslash", modifiers = ["any"], key_macro = [], macro_translate = false, scancodes = [0x29] },
# Backquote ` didn't exist on the UK Model F keyboard, so we'll use an alt-code.
{ keycode = "Backquote", modifiers = ["none"], key_macro = ["+AltLeft", "+Numpad9", "+Numpad6", "-AltLeft", "-Numpad9", "-Numpad6"], macro_translate = false, scancodes = [] },
# Shift-backquote: ¬ (NOT symbol)
{ keycode = "Backquote", modifiers = ["shift"], key_macro = ["+AltLeft", "+Numpad1", "+Numpad7", "+Numpad0", "-AltLeft", "-Numpad1", "-Numpad7", "-Numpad0"], macro_translate = false, scancodes = [] },
# Alt-Gr keys did not exist on Model F. If we want them, we need to implement them with alt-codes.
# There appears to be a bug with AltGr-A. the KeyA keydown event does not fire :(
#{ keycode = "KeyA", modifiers = ["control", "alt"], key_macro = ["+AltLeft", "+Numpad1", "+Numpad6", "+Numpad0", "-AltLeft", "-Numpad1", "-Numpad6", "-Numpad0"], macro_translate = false, scancodes = [] },
]
# -----------------------------------------------------------------------------
# Tandy 1000 - the Original 95-key keyboard shipped with the Tandy 1000
# -----------------------------------------------------------------------------
# The Tandy 1000 keyboard has single-byte scancodes, so scancodes defined here
# should only have one element.
[keyboard.tandy1000]
keycode_mappings = [
{ keycode = "IntlBackslash", modifiers = ["any"], key_macro = [], macro_translate = false, scancodes = [0x2B] },
{ keycode = "Quote", modifiers = ["any"], key_macro = [], macro_translate = false, scancodes = [0x28] },
{ keycode = "Backslash", modifiers = ["any"], key_macro = [], macro_translate = false, scancodes = [0x29] },
# Backquote ` didn't exist on the UK Model F keyboard, so we'll use an alt-code.
{ keycode = "Backquote", modifiers = ["none"], key_macro = ["+AltLeft", "+Numpad9", "+Numpad6", "-AltLeft", "-Numpad9", "-Numpad6"], macro_translate = false, scancodes = [] },
# Shift-backquote: ¬ (NOT symbol)
{ keycode = "Backquote", modifiers = ["shift"], key_macro = ["+AltLeft", "+Numpad1", "+Numpad7", "+Numpad0", "-AltLeft", "-Numpad1", "-Numpad7", "-Numpad0"], macro_translate = false, scancodes = [] },
# Alt-Gr keys did not exist on Model F. If we want them, we need to implement them with alt-codes.
# There appears to be a bug with AltGr-A. the KeyA keydown event does not fire :(
#{ keycode = "KeyA", modifiers = ["control", "alt"], key_macro = ["+AltLeft", "+Numpad1", "+Numpad6", "+Numpad0", "-AltLeft", "-Numpad1", "-Numpad6", "-Numpad0"], macro_translate = false, scancodes = [] },
]

View File

@ -0,0 +1,266 @@
# keyboard_US.toml
# Keyboard translation file for US keyboard layouts for the MartyPC emulator
#
# US layouts do not require translation, so this file is empty by design.
# Why a translation file?
# ----------------------------------------------------------------------------
# Certain scancodes have changed since the 1980's, as the meaning of certain
# keys was changed, keys were split out to new keys, or moved around on the
# keyboard. This translation file will attempt to remap the modern scancodes
# to compatible ones for the given emulated keyboard type. In some cases,
# equivalents to modern keys may not exist, but you can map them by scancode
# to a key of your choice.
# Keycodes are logical names for keys on the keyboard.
# Keycodes use the W3C naming convention.
#
# See https://w3c.github.io/uievents-code/#code-value-tables for descriptions
# of these keys.
# Backquote,
# Backslash,
# BracketLeft,
# BracketRight,
# Comma,
# Digit0,
# Digit1,
# Digit2,
# Digit3,
# Digit4,
# Digit5,
# Digit6,
# Digit7,
# Digit8,
# Digit9,
# Equal,
# IntlBackslash,
# IntlRo,
# IntlYen,
# KeyA,
# KeyB,
# KeyC,
# KeyD,
# KeyE,
# KeyF,
# KeyG,
# KeyH,
# KeyI,
# KeyJ,
# KeyK,
# KeyL,
# KeyM,
# KeyN,
# KeyO,
# KeyP,
# KeyQ,
# KeyR,
# KeyS,
# KeyT,
# KeyU,
# KeyV,
# KeyW,
# KeyX,
# KeyY,
# KeyZ,
# Minus,
# Period,
# Quote,
# Semicolon,
# Slash,
# AltLeft,
# AltRight,
# Backspace,
# CapsLock,
# ContextMenu,
# ControlLeft,
# ControlRight,
# Enter,
# MetaLeft,
# MetaRight,
# ShiftLeft,
# ShiftRight,
# Space,
# Tab,
# Convert,
# KanaMode,
# Lang1,
# Lang2,
# Lang3,
# Lang4,
# Lang5,
# NonConvert,
# Delete,
# End,
# Help,
# Home,
# Insert,
# PageDown,
# PageUp,
# ArrowDown,
# ArrowLeft,
# ArrowRight,
# ArrowUp,
# NumLock,
# Numpad0,
# Numpad1,
# Numpad2,
# Numpad3,
# Numpad4,
# Numpad5,
# Numpad6,
# Numpad7,
# Numpad8,
# Numpad9,
# NumpadAdd,
# NumpadBackspace,
# NumpadClear,
# NumpadClearEntry,
# NumpadComma,
# NumpadDecimal,
# NumpadDivide,
# NumpadEnter,
# NumpadEqual,
# NumpadHash,
# NumpadMemoryAdd,
# NumpadMemoryClear,
# NumpadMemoryRecall,
# NumpadMemoryStore,
# NumpadMemorySubtract,
# NumpadMultiply,
# NumpadParenLeft,
# NumpadParenRight,
# NumpadStar,
# NumpadSubtract,
# Escape,
# Fn,
# FnLock,
# PrintScreen,
# ScrollLock,
# Pause,
# BrowserBack,
# BrowserFavorites,
# BrowserForward,
# BrowserHome,
# BrowserRefresh,
# BrowserSearch,
# BrowserStop,
# Eject,
# LaunchApp1,
# LaunchApp2,
# LaunchMail,
# MediaPlayPause,
# MediaSelect,
# MediaStop,
# MediaTrackNext,
# MediaTrackPrevious,
# Power,
# Sleep,
# AudioVolumeDown,
# AudioVolumeMute,
# AudioVolumeUp,
# WakeUp,
# Meta,
# Hyper,
# Turbo,
# Abort,
# Resume,
# Suspend,
# Again,
# Copy,
# Cut,
# Find,
# Open,
# Paste,
# Props,
# Select,
# Undo,
# Hiragana,
# Katakana,
# F1,
# F2,
# F3,
# F4,
# F5,
# F6,
# F7,
# F8,
# F9,
# F10,
# F11,
# F12,
# F13,
# F14,
# F15,
# F16,
# F17,
# F18,
# F19,
# F20,
# F21,
# F22,
# F23,
# F24,
# F25,
# F26,
# F27,
# F28,
# F29,
# F30,
# F31,
# F32,
# F33,
# F34,
# F35
# You can override the mapping of KeyCodes to scancodes with 'keycode_mappings'
# The format of keyboard_mappings is an array of mapping entries.
#
# Each mapping entry is an a dictionary with the following properties:
#
# keycode = The keycode name from the list given above.
#
# modifiers = A list of modifier keys to match. Valid values for modifiers
# include "control", "alt", "shift" and "super"
# On Mac, the command key is equivalent to "control."
#
# If a key is to be always translated, this value should be
# "any".
#
# If a key is to be translated when no modifiers are pressed,
# this value should be "none"
#
# Alternately, provide a list of modifiers. All modifiers in
# the list must be present for translation.
#
# key_macro = Convert this keycode into a sequence of multiple keycodes.
# Each keycode will be delivered after a specific delay
# (typically one frame)
#
# scancodes = The resulting scancodes to translate the specified key +
# matching modifiers into. A single keycode can map to
# multiple scancodes, which will be sent in order.
#
# 'key_macro' and 'scancodes' are mutually exclusive. Use one and leave the
# other empty.
#
# Different keyboard models can produce multi-byte scancodes, therefore, each
# keycode should be mapped to an array.
# Model F - the Original 83-key keyboard shipped with the IBM PC and XT.
# -----------------------------------------------------------------------------
# The model F keyboard has single-byte scancodes, so scancodes defined here
# should only have one element.
[keyboard.modelf]
keycode_mappings = []
# -----------------------------------------------------------------------------
# Tandy 1000 - the Original 95-key keyboard shipped with the Tandy 1000
# -----------------------------------------------------------------------------
# The Tandy 1000 keyboard has single-byte scancodes, so scancodes defined here
# should only have one element.
[keyboard.tandy1000]
keycode_mappings = []

View File

@ -0,0 +1,64 @@
# compaq_portable.toml
# Machine Configurations for the Compaq Portable
# MartyPC will search all *.toml files in 'machine' directories for machine
# configurations, so if you create a custom machine configuration, you can
# put it in a separate file.
#
# ----------------------------------------------------------------------------
# Defining a Machine Configuration
# Valid Machine types:
# "Ibm5150v64K"
# "Ibm5150v256K"
# "Ibm5160"
#
# Valid Floppy Disk Controller types:
# "IbmNec"
#
# Valid floppy Drive Types:
# "360k"
# "720k"
# "1.2m"
# "1.44m"
# Valid Hard Disk Controller Types:
# "IbmXebec"
#
# Valid Serial Controller Types:
# "IbmAsync"
#
# Conventional memory amount may be different from value specified due to MMIO
# optimizations. I recommend specifying a value in 0x10000 increments.
# ----------------------------------------------------------------------------
[[machine]]
name = "compaq_portable"
type = "Ibm5160"
rom_set = "compaq_portable_revf"
speaker = true
overlays = [
"us_modelf_keyboard",
"pcxt_2_720k_floppies",
]
[machine.memory]
conventional.size = 0xA0000
conventional.wait_states = 0
# Video cards
[[machine.video]]
bus_type = "ISA"
type = "CGA"
clock_mode = "Dynamic"
# Hard disk controller
[machine.hdc]
bus_type = "ISA"
type = "IbmXebec"
# Drives connected to controller. Maximum of 2.
# Drive #0 - (Typically C:)
[[machine.hdc.drive]]
format = "Mfm"
vhd = "xebec20MB.vhd"

View File

@ -0,0 +1,222 @@
# machine_config_overlays.toml
# Main Machine Configuration Overlay file for MartyPC.
# Upgrade the CPU of the system to an NECV20.
# Base machine type must have a compatible CPU (Intel 8088)
[[overlay]]
name = "cpu_v20"
[overlay.cpu]
upgrade_type = "NecV20"
[[overlay]]
name = "lotech_ems"
[overlay.ems]
ems_type = "LoTech2MB"
# EMS Window
# Valid values for LoTech card are:
# 0xC000
# 0xD000
# 0xE000
window = 0xE000
# Base IO address
# Valid values for LoTech card are:
# 0x260h
# 0x264h
# 0x268h
# 0x26Ch
io_base = 0x260
# Memory size = 2MB. Do not modify.
size = 0x200000
[[overlay]]
name = "pcxt_640k_conventional"
[overlay.memory]
# A0000 = 640K of conventional memory
conventional.size = 0xA0000
conventional.wait_states = 0
[[overlay]]
name = "us_modelf_keyboard"
[overlay.keyboard]
# Valid options for keyboard_type are:
# ModelF - This was the original 83-key keyboard shipped with the PC/XT
# (More keyboard types yet to be implemented)
type = "ModelF"
# Keyboard layout. Used to load the appropriate keyboard translation file.
# MartyPC will look for the file keyboard_XX.toml in the ./keyboard/ directory
# where XX is the string specified by keyboard_layout.
#
# Certain scancodes have changed their meaning since the 1980's. Your help
# would be appreciated in developing new translation files.
layout = "US"
# Enable typematic repeat for the emulated keyboard. Host repeat is ignored.
typematic = true
# Delay in milliseconds before typematic repeat begins.
typematic_delay = 500.0
# Delay in milliseconds between each scancode during typematic repeat.
typematic_rate= 50.0
[[overlay]]
name = "pcxt_2_serial_ports"
# Serial card
[[overlay.serial]]
bus_type = "ISA"
type = "IbmAsync"
[[overlay.serial.port]]
io_base = 0x3F8
irq = 4
[[overlay.serial.port]]
io_base = 0x2F8
irq = 3
[[overlay]]
name = "ibm_xebec"
# Hard disk controller
[overlay.hdc]
bus_type = "ISA"
type = "IbmXebec"
[[overlay.hdc.drive]]
format = "Mfm"
vhd = "xebec20MB.vhd"
[[overlay]]
name = "ibm_cga"
# Video card
[[overlay.video]]
bus_type = "ISA"
type = "CGA"
# Clocking mode for video card. Default values are:
# Default - Choose the best mode per card. (Recommended)
# Dynamic - Switch between supported clocking modes as required.
# Cycle - Clock by cycle. Accurate but slow. Only really useful for debugging.
# Only valid for CGA.
# Character - Clock by character. Faster but may not be able to emulate certain effects.
# Valid for MDA, CGA and EGA.
# Scanline - Clock by scanline. Fastest but unable to emulate certain effects.
# (Unimplemented)
clocking_mode = "Default"
# Request line doubling for 15Khz (200 scanline) modes during rendering.
# Recommended.
# This occurs before aspect correction, so reduces blur. Not applicable
# to VGA as VGA double-scans such modes in hardware.
line_double = true
snow = false
[[overlay]]
name = "ibm_mda"
# Video card
[[overlay.video]]
bus_type = "ISA"
type = "MDA"
clock_mode = "Default"
[[overlay]]
name = "hercules"
# Video card
[[overlay.video]]
bus_type = "ISA"
type = "MDA"
subtype = "Hercules"
clock_mode = "Default"
[[overlay]]
name = "ibm_ega"
# Video card
[[overlay.video]]
bus_type = "ISA"
type = "EGA"
clock_mode = "Default"
dip_switch = 0b1001
[[overlay]]
name = "ibm_ega_on_cga"
# Video card
[[overlay.video]]
bus_type = "ISA"
type = "EGA"
clock_mode = "Default"
# 0111 = EGA on CGA monitor.
dip_switch = 0b0111
[[overlay]]
name = "ibm_cga_and_mda"
# Video card
[[overlay.video]]
bus_type = "ISA"
type = "CGA"
clock_mode = "Default"
# Video card
[[overlay.video]]
bus_type = "ISA"
type = "MDA"
clock_mode = "Default"
#[[overlay]]
#name = "ram_expansion"
# [[overlay.ram_expansion]]
# type = "Conventional"
# size = 0x60000 # 394K
# speed_ns = 200
# wait_states = 0
[[overlay]]
name = "pcxt_2_720k_floppies"
# Floppy disk controller
[overlay.fdc]
bus_type = "ISA"
type = "IbmNec"
# Drives connected to controller. Maximum of 4.
[[overlay.fdc.drive]]
type = "720k"
[[overlay.fdc.drive]]
type = "720k"
[[overlay]]
name = "pcxt_2_360k_floppies"
# Floppy disk controller
[overlay.fdc]
bus_type = "ISA"
type = "IbmNec"
# Drives connected to controller. Maximum of 4.
[[overlay.fdc.drive]]
type = "360k"
[[overlay.fdc.drive]]
type = "360k"
[[overlay]]
name = "pcxt_4_360k_floppies"
# Floppy disk controller
[overlay.fdc]
bus_type = "ISA"
type = "IbmNec"
# Drives connected to controller. Maximum of 4.
[[overlay.fdc.drive]]
type = "360k"
[[overlay.fdc.drive]]
type = "360k"
[[overlay.fdc.drive]]
type = "360k"
[[overlay.fdc.drive]]
type = "360k"
[[overlay]]
name = "microsoft_serial_mouse"
[overlay.serial_mouse]
type = "Microsoft"
# Port 0 - COM1
# Port 1 - COM2
port = 1
[[overlay]]
name = "game_port"
[overlay.game_port]
# Don't change this unless you know what you are doing.
# Everything expects the game port to be at 0x201.
io_base = 0x201

View File

@ -0,0 +1,207 @@
# generic_xt.toml
# Machine Configurations for Generic XT systems
# MartyPC will search all *.toml files in 'machine' directories for machine
# configurations, so if you create a custom machine configuration, you can
# put it in a separate file.
#
# ----------------------------------------------------------------------------
# Defining a Machine Configuration
# Valid Machine types:
# "Ibm5150v64K"
# "Ibm5150v256K"
# "Ibm5160"
#
# Valid Floppy Disk Controller types:
# "IbmNec"
#
# Valid floppy Drive Types:
# "360k"
# "720k"
# "1.2m"
# "1.44m"
# Valid Hard Disk Controller Types:
# "IbmXebec"
#
# Valid Serial Controller Types:
# "IbmAsync"
#
# Conventional memory amount may be different from value specified due to MMIO
# optimizations. I recommend specifying a value in 0x10000 increments.
# ----------------------------------------------------------------------------
[[machine]]
name = "generic_xt_base"
type = "Ibm5160"
rom_set = "glabios_xt"
speaker = true
ppi_turbo = true
[machine.memory]
conventional.size = 0x10000
conventional.wait_states = 0
# Video cards
[[machine.video]]
type = "CGA"
clock_mode = "Default"
[machine.keyboard]
type = "ModelF"
layout = "US"
[[machine]]
name = "generic_xt"
type = "Ibm5160"
rom_set = "glabios_xt"
speaker = true
ppi_turbo = false
overlays = [
"pcxt_2_720k_floppies",
"pcxt_2_serial_ports",
"us_modelf_keyboard",
"microsoft_serial_mouse",
"game_port",
]
[machine.memory]
conventional.size = 0xA0000
conventional.wait_states = 0
[[machine]]
name = "generic_xt_hdd"
type = "Ibm5160"
rom_set = "glabios_xt_turbo"
speaker = true
ppi_turbo = false
overlays = [
"pcxt_2_720k_floppies",
"pcxt_2_serial_ports",
"us_modelf_keyboard",
"microsoft_serial_mouse",
"game_port",
]
[machine.memory]
conventional.size = 0xA0000
conventional.wait_states = 0
# Hard disk controller
[machine.hdc]
type = "IbmXebec"
# Drives connected to controller. Maximum of 2.
# Drive #0 - (Typically C:)
[[machine.hdc.drive]]
format = "Mfm"
vhd = "xebec20MB.vhd"
# Drive #1 - (Typically D:)
#[[machine.hdc.drive]]
#format = "Mfm"
#vhd = "games.vhd"
# Video cards
[[machine.video]]
type = "CGA"
clock_mode = "Default"
[[machine]]
name = "generic_xt_hdd_ega"
type = "Ibm5160"
rom_set = "glabios_xt"
speaker = true
ppi_turbo = false
overlays = [
"pcxt_2_720k_floppies",
"pcxt_2_serial_ports",
"us_modelf_keyboard",
"microsoft_serial_mouse",
"game_port",
]
[machine.memory]
conventional.size = 0xA0000
conventional.wait_states = 0
# Hard disk controller
[machine.hdc]
type = "IbmXebec"
# Drives connected to controller. Maximum of 2.
# Drive #0 - (Typically C:)
[[machine.hdc.drive]]
format = "Mfm"
vhd = "xebec20MB.vhd"
# Drive #1 - (Typically D:)
#[[machine.hdc.drive]]
#format = "Mfm"
#vhd = "games.vhd"
# Video cards
[[machine.video]]
type = "EGA"
clock_mode = "Default"
[[machine]]
name = "generic_award_xt_hdd"
type = "Ibm5160"
rom_set = "award_xt_4000"
speaker = true
ppi_turbo = true
overlays = [
"pcxt_2_720k_floppies",
"pcxt_2_serial_ports",
"us_modelf_keyboard",
"microsoft_serial_mouse",
"game_port",
]
[machine.memory]
conventional.size = 0xA0000
conventional.wait_states = 0
# Hard disk controller
[machine.hdc]
type = "IbmXebec"
# Drives connected to controller. Maximum of 2.
# Drive #0 - (Typically C:)
[[machine.hdc.drive]]
format = "Mfm"
vhd = "xebec20MB.vhd"
# Drive #1 - (Typically D:)
#[[machine.hdc.drive]]
#format = "Mfm"
#vhd = "games.vhd"
# Video cards
[[machine.video]]
type = "CGA"
clock_mode = "Default"
[[machine]]
name = "generic_skiselev_xt"
type = "Ibm5160"
rom_set = "skiselev_xt_1.00"
speaker = true
ppi_turbo = true
overlays = [
"pcxt_2_720k_floppies",
"pcxt_2_serial_ports",
"us_modelf_keyboard",
"microsoft_serial_mouse",
"game_port",
]
[machine.memory]
conventional.size = 0xA0000
conventional.wait_states = 0
# Video cards
[[machine.video]]
type = "CGA"
clock_mode = "Default"

View File

@ -0,0 +1,175 @@
# ibm5150.toml
# Machine Configurations for the IBM 5150
# MartyPC will search all *.toml files in 'machine' directories for machine
# configurations, so if you create a custom machine configuration, you can
# put it in a separate file.
#
# ----------------------------------------------------------------------------
# Defining a Machine Configuration
# Valid Machine types:
# "Ibm5150v64K"
# "Ibm5150v256K"
# "Ibm5160"
#
# Valid Floppy Disk Controller types:
# "IbmNec"
#
# Valid floppy Drive Types:
# "360k"
# "720k"
# "1.2m"
# "1.44m"
# Valid Hard Disk Controller Types:
# "IbmXebec"
#
# Valid Serial Controller Types:
# "IbmAsync"
#
# Conventional memory amount may be different from value specified due to MMIO
# optimizations. I recommend specifying a value in 0x10000 increments.
# ----------------------------------------------------------------------------
# The lowest possible memory configuration, just for fun
[[machine]]
name = "ibm5150_16k"
type = "Ibm5150v64K"
rom_set = "ibm5150_81_v1" # The '82 BIOS doesn't support <64KB of RAM.
speaker = true
overlays = [
"pcxt_2_360k_floppies",
"pcxt_2_serial_ports",
"us_modelf_keyboard",
"game_port",
]
[machine.memory]
conventional.size = 0x4000 # A whopping 16K of RAM
conventional.wait_states = 0
# Video cards
[[machine.video]]
bus_type = "ISA"
type = "MDA"
clock_mode = "Character"
[[machine]]
name = "ibm5150_64k"
type = "Ibm5150v64K"
rom_set = "auto"
speaker = true
overlays = [
"pcxt_2_360k_floppies",
"pcxt_2_serial_ports",
"us_modelf_keyboard",
"game_port",
]
[machine.memory]
conventional.size = 0xA0000
conventional.wait_states = 0
# Video cards
[[machine.video]]
bus_type = "ISA"
type = "MDA"
clock_mode = "Character"
[[machine]]
name = "ibm5150_64k_hdd"
type = "Ibm5150v64K"
rom_set = "auto"
speaker = true
overlays = [
"pcxt_2_360k_floppies",
"pcxt_2_serial_ports",
"us_modelf_keyboard",
"game_port",
]
[machine.memory]
conventional.size = 0xA0000
conventional.wait_states = 0
# Hard disk controller
[machine.hdc]
bus_type = "ISA"
type = "IbmXebec"
# Drives connected to controller. Maximum of 2.
# Drive #0 - (Typically C:)
[[machine.hdc.drive]]
format = "Mfm"
vhd = "xebec20MB.vhd"
# Drive #1 - (Typically D:)
#[[machine.hdc.drive]]
#vhd = "games.vhd"
# Video cards
[[machine.video]]
bus_type = "ISA"
type = "MDA"
clock_mode = "Character"
[[machine]]
name = "ibm5150_256k"
type = "Ibm5150v256K"
rom_set = "auto"
speaker = true
overlays = [
"pcxt_2_360k_floppies",
"pcxt_2_serial_ports",
"us_modelf_keyboard",
"game_port",
]
[machine.memory]
conventional.size = 0xA0000
conventional.wait_states = 0
# Video cards
[[machine.video]]
bus_type = "ISA"
type = "MDA"
clock_mode = "Character"
[[machine]]
name = "ibm5150_256k_hdd"
type = "Ibm5150v256K"
rom_set = "auto"
speaker = true
overlays = [
"pcxt_2_360k_floppies",
"pcxt_2_serial_ports",
"us_modelf_keyboard",
"game_port",
]
[machine.memory]
conventional.size = 0xA0000
conventional.wait_states = 0
# Hard disk controller
[machine.hdc]
bus_type = "ISA"
type = "IbmXebec"
# Drives connected to controller. Maximum of 2.
# Drive #0 - (Typically C:)
[[machine.hdc.drive]]
format = "Mfm"
vhd = "xebec20MB.vhd"
# Drive #1 - (Typically D:)
#[[machine.hdc.drive]]
#vhd = "games.vhd"
# Video cards
[[machine.video]]
bus_type = "ISA"
type = "MDA"
clock_mode = "Character"

View File

@ -0,0 +1,156 @@
# ibm5160.toml
# Machine Configurations for the IBM 5160
# MartyPC will search all *.toml files in 'machine' directories for machine
# configurations, so if you create a custom machine configuration, you can
# put it in a separate file.
#
# ----------------------------------------------------------------------------
# Defining a Machine Configuration
# Valid Machine types:
# "Ibm5150v64K"
# "Ibm5150v256K"
# "Ibm5160"
#
# Valid Floppy Disk Controller types:
# "IbmNec"
#
# Valid floppy Drive Types:
# "360k"
# "720k"
# "1.2m"
# "1.44m"
# Valid Hard Disk Controller Types:
# "IbmXebec"
#
# Valid Serial Controller Types:
# "IbmAsync"
#
# Conventional memory amount may be different from value specified due to MMIO
# optimizations. I recommend specifying a value in 0x10000 increments.
# ----------------------------------------------------------------------------
[[machine]]
name = "ibm5160"
type = "Ibm5160"
rom_set = "auto"
speaker = true
overlays = [
"pcxt_2_720k_floppies",
"pcxt_2_serial_ports",
"us_modelf_keyboard",
"microsoft_serial_mouse",
"game_port",
]
[machine.memory]
conventional.size = 0xA0000
conventional.wait_states = 0
# Video cards
[[machine.video]]
bus_type = "ISA"
type = "CGA"
clock_mode = "Dynamic"
[[machine]]
name = "ibm5160_diags"
type = "Ibm5160"
rom_set = "supersoft_diags"
speaker = true
overlays = [
"pcxt_2_720k_floppies",
"pcxt_2_serial_ports",
"us_modelf_keyboard",
"microsoft_serial_mouse",
"game_port",
]
[machine.memory]
conventional.size = 0xA0000
conventional.wait_states = 0
# Video cards
[[machine.video]]
bus_type = "ISA"
type = "CGA"
clock_mode = "Dynamic"
[[machine]]
name = "ibm5160_hdd"
type = "Ibm5160"
rom_set = "auto"
speaker = true
overlays = [
"pcxt_2_720k_floppies",
"pcxt_2_serial_ports",
"us_modelf_keyboard",
"microsoft_serial_mouse",
"game_port",
]
[machine.memory]
conventional.size = 0xA0000
conventional.wait_states = 0
# Hard disk controller
[machine.hdc]
bus_type = "ISA"
type = "IbmXebec"
# Drives connected to controller. Maximum of 2.
# Drive #0 - (Typically C:)
[[machine.hdc.drive]]
format = "Mfm"
vhd = "xebec20MB.vhd"
# Drive #1 - (Typically D:)
#[[machine.hdc.drive]]
#vhd = "games.vhd"
# Video cards
[[machine.video]]
type = "CGA"
clock_mode = "Dynamic"
[[machine]]
name = "ibm5160_hdd_ega"
type = "Ibm5160"
rom_set = "auto"
speaker = true
overlays = [
"pcxt_2_720k_floppies",
"pcxt_2_serial_ports",
"us_modelf_keyboard",
"microsoft_serial_mouse",
"game_port",
]
[machine.memory]
conventional.size = 0xA0000
conventional.wait_states = 0
# Hard disk controller
[machine.hdc]
bus_type = "ISA"
type = "IbmXebec"
# Drives connected to controller. Maximum of 2.
# Drive #0 - (Typically C:)
[[machine.hdc.drive]]
format = "Mfm"
vhd = "xebec20MB.vhd"
# Drive #1 - (Typically D:)
#[[machine.hdc.drive]]
#vhd = "games.vhd"
# Video cards
[[machine.video]]
bus_type = "ISA"
type = "EGA"
clock_mode = "Dynamic"

View File

@ -0,0 +1,88 @@
# ibmpcjr.toml
# Machine Configurations for the IBM PCJR
# MartyPC will search all *.toml files in 'machine' directories for machine
# configurations, so if you create a custom machine configuration, you can
# put it in a separate file.
#
# ----------------------------------------------------------------------------
# Defining a Machine Configuration
# Valid Machine types:
# "Ibm5150v64K"
# "Ibm5150v256K"
# "Ibm5160"
#
# Valid Floppy Disk Controller types:
# "IbmNec"
#
# Valid floppy Drive Types:
# "360k"
# "720k"
# "1.2m"
# "1.44m"
# Valid Hard Disk Controller Types:
# "IbmXebec"
#
# Valid Serial Controller Types:
# "IbmAsync"
#
# Conventional memory amount may be different from value specified due to MMIO
# optimizations. I recommend specifying a value in 0x10000 increments.
# ----------------------------------------------------------------------------
[[machine]]
name = "ibm_pcjr"
type = "IbmPCJr"
rom_set = "ibm_pcjr"
speaker = true
[machine.keyboard]
# Valid options for keyboard_type are:
# ModelF - This was the original 83-key keyboard shipped with the PC/XT
# (More keyboard types yet to be implemented)
#
# TODO: Replace this with a 'PCJr' keyboard type as there are scancode differences
type = "ModelF"
# Keyboard layout. Used to load the appropriate keyboard translation file.
# MartyPC will look for the file keyboard_XX.toml in the ./keyboard/ directory
# where XX is the string specified by keyboard_layout.
#
# Certain scancodes have changed their meaning since the 1980's. Your help
# would be appreciated in developing new translation files.
layout = "US"
# Enable typematic repeat for the emulated keyboard. Host repeat is ignored.
typematic = true
# Delay in milliseconds before typematic repeat begins.
typematic_delay = 500.0
# Delay in milliseconds between each scancode during typematic repeat.
typematic_rate= 50.0
[machine.memory]
conventional.size = 0x20000 # 128KB max. Install additional RAM via sidecars
conventional.wait_states = 3
# Video cards - Maximum of 1.
[[machine.video]]
bus_type = "Onboard"
type = "TGA"
subtype = "IbmPCJr"
clock_mode = "Default"
# Floppy disk controller
[machine.fdc]
bus_type = "Onboard"
type = "IbmPCJrNec"
# Drives connected to controller. Maximum of 1.
[[machine.fdc.drive]]
type = "360k"
[[machine.serial]]
bus_type = "Onboard"
type = "IbmAsync"
[[machine.serial.port]]
io_base = 0x2F8
irq = 3
# Required for PCjr to avoid boot errors.
out2_suppresses_int = false

113
configs/machines/readme.md Normal file
View File

@ -0,0 +1,113 @@
### MartyPC Machine Configuration
MartyPC uses "machine" configurations to describe the specific hardware to be emulated during a session.
Machine configurations can be split up among arbitrary TOML configuration files in this directory.
Each configuration consists of a base configuration definition and optional configuration overlay definitions.
A base configuration is capable of fully describing a machine. Overlays are supported in order to reduce the amount of
repeated configuration settings needed for common components, or to allow overriding certain settings within a
configuration.
An example configuration is commented below:
```toml
[[machine]]
name = "ibm5150_64k" # Each configuration is required to have a name, which can be referenced
# via the main configuration file or command line argument.
type = "Ibm5150v64K" # The Machine Type specifies the base hardware of this configuration. Think of this as
# describing the motherboard or fixed hardware configuration of a system. Here we
# are stating that this configuration builds on the base of an IBM 5150 with a 16-64K motherboard
rom_set = "auto" # A specfic ROM set can be referenced by 'alias', or it can be left 'auto' to let MartyPC pick
# the best (usually newest) ROM set detected to be compatible for this system.
speaker = true # Enable the PC speaker.
[machine.memory]
conventional.size = 0xA0000 # List the amount of conventional memory. This is masked to the nearest multiple of
# 4k. Certain machine types may have more specific requirements.
# For example, for the IBM 5150, this value should match a valid memory DIP setting.
# (See https://www.minuszerodegrees.net/5150/misc/5150_motherboard_switch_settings.htm)
conventional.wait_states = 0 # Wait states to apply to conventional memory (placeholder, not implemented)
# Floppy disk controller (optional)
[machine.fdc]
bus_type = "ISA" # Bus type. Only supported type is ISA.
type = "IbmNec" # Type of floppy disk controller. Currently only "IbmNec" supported.
# Drives connected to controller. Maximum of 4.
[[machine.fdc.drive]]
type = "360k" # Drive type. Valid values are:
# "360k"
# "720k"
# "1.2m"
# "1.44m"
image = "dos330.img" # Default image to load into this drive. (optional)
[[machine.fdc.drive]] # Additional floppy drive definitions follow
type = "360k"
# Serial card (optional, repeatable)
[[machine.serial]]
bus_type = "ISA" # Bus type. Only supported type is ISA.
type = "IbmAsync" # Type of serial card. Currently only "IbmAsync" supported. This will add two
# serial ports to the system at 0x3F8 and 0x2F8.
[[overlay.serial.port]] # Eventually you will be able to specify individual port addresses and IRQs.
io_base = 0x3F8 # For the moment these values are placeholders and are ignored.
irq = 4
[[overlay.serial.port]]
io_base = 0x2F8
irq = 3
# Video card (optional, repeatable)
[[machine.video]]
bus_type = "ISA" # Bus type. Only supported type is ISA.
type = "MDA" # Type of video card. Valid values are:
# MDA, CGA, EGA
clock_mode = "Default" # Clock mode for video card. Leave this "Default" in most cases.
# Keyboard (Optional)
[machine.keyboard]
type = "ModelF" # Type of keyboard installed. Currently only "ModelF" implemented.
layout = "US" # Keyboard layout. Used to find a keyboard mapping file in /configs/keyboards/
# Serial mouse (Optional)
[machine.serialmouse]
type = "Microsoft" # Type of serial mouse. Currently only "Microsoft" implemented.
port = 0 # Serial port mouse is connected to.
# Port 0 == first serial port defined (usually COM1)
# Port 1 == second serial port defined (usually COM2)
```
See the various TOML files provided for more examples.
### Machine Configuration Overlays
A machine configuration overlay can contain any part of a machine configuration that is (Optional). This includes
fdc, hdc, serial, video, mouse and keyboard sections.
If a base configuration and an overlay specify the same sections, the overlay will overwrite the base configuration's
values. If two overlays specify the same sections, they will be overwritten in the order the overlays were specified.
The following overlay definition can be used to add a CGA and MDA card to any base configuration:
```toml
[[overlay]]
name = "cga_and_mda"
[[overlay.video]]
bus_type = "ISA"
type = "CGA"
clock_mode = "Default"
[[overlay.video]]
bus_type = "ISA"
type = "MDA"
clock_mode = "Default"
```

View File

@ -0,0 +1,55 @@
# tandy1000.toml
# Machine Configurations for the Tandy 1000 series
[[machine]]
name = "tandy1000"
type = "Tandy1000"
rom_set = "auto"
speaker = true
overlays = [
"pcxt_2_360k_floppies",
]
[machine.memory]
#conventional.size = 0x20000 # 128KB max. Install additional RAM via expansion cards
conventional.size = 0xA0000
conventional.wait_states = 0
[machine.keyboard]
# Valid options for keyboard_type are:
# ModelF - This was the original 83-key keyboard shipped with the PC/XT
# (More keyboard types yet to be implemented)
#
type = "Tandy1000"
# Keyboard layout. Used to load the appropriate keyboard translation file.
# MartyPC will look for the file keyboard_XX.toml in the ./keyboard/ directory
# where XX is the string specified by keyboard_layout.
#
# Certain scancodes have changed their meaning since the 1980's. Your help
# would be appreciated in developing new translation files.
layout = "US"
# Enable typematic repeat for the emulated keyboard. Host repeat is ignored.
typematic = true
# Delay in milliseconds before typematic repeat begins.
typematic_delay = 500.0
# Delay in milliseconds between each scancode during typematic repeat.
typematic_rate= 50.0
# Video card
[[machine.video]]
bus_type = "Onboard"
type = "TGA"
subtype = "Tandy1000"
clock_mode = "Default"
# Hard disk controller
[machine.hdc]
bus_type = "ISA"
type = "IbmXebec"
# Drives connected to controller. Maximum of 2.
# Drive #0 - (Typically C:)
[[machine.hdc.drive]]
format = "Mfm"
vhd = "xebec20MB.vhd"

BIN
martypc Executable file

Binary file not shown.

619
martypc.toml Normal file
View File

@ -0,0 +1,619 @@
# martypc.toml
# Main configuration file for the MartyPC emulator
#
[meta]
file_type = "main_config"
config_version = "0.2"
# ----------------------------------------------------------------------------
# Machine Options
#
# Items specific to machine configuration are listed here first for
# convenience, as they are usually the first thing people want to change.
#
# General emulator options are given in [emulator] below.
# ----------------------------------------------------------------------------
[machine]
# Specify the name of a machine configuration to load. Valid config_names
# are defined via machine configuration profiles in the /configs/machines
# directory.
#config_name = "ibm5160"
config_name = "ibm5160_hdd"
# Specify configuration overlays to load on top of machine configuration.
# Config overlays are a convenient way to swap or add to a base config.
# The 'ega' overlay will add an EGA card to a system that defaults to
# MDA or CGA, for example.
#
# - See 'machine_config_overlays.toml' for more examples, or define your own.
#config_overlays = ["ega"]
# Prefer OEM ROMs over other compatible ROMs, if present. Default: true.
prefer_oem = true
# Reload ROMs from disk when system is hard-rebooted (not ctrl-alt-del)
reload_roms = true
# Apply ROM patches defined in ROM sets. Disable this for authenticity
# as some patches may speed up boot time.
patch_roms = true
# Don't load any ROMs if true. Default: false
#no_roms = true
# Enable disassembly recording. This is similar to CPU instruction history,
# but records the disassembly of each instruction executed, sorted by
# address. This builds a disassembly listing of the program as it runs.
disassembly_recording = false
# Filename to save diassembly recording to.
# This will be saved in the 'traces' directory
disassembly_file = "disassembly.lst"
# Enable a console debugging port. Writes to this port will be printed to the
# host terminal. ESC bytes (0x1B) will be filtered to avoid terminal abuse.
#terminal_port = 0xE9
# Turbo Button
# ----------------------------------------------------------------------------
# Change the clock divisor/multiplier for the CPU to run the CPU faster than
# normal. Other devices like the timer will continue to run at the same rate.
#
# On IBM PC/XT, turbo increases CPU clock from 4.77Mhz to 7.16Mhz.
turbo = false
# Emulate phase offset of PIT vs CPU. Don't change this if you don't know why
# you would want to do that.
pit_phase = 0
# ----------------------------------------------------------------------------
# Input options
# ----------------------------------------------------------------------------
[machine.input]
# Keyboard layouts are normally specified in machine configurations. You can
# override the keyboard layout here. Easier than editing all your machines.
# A keyboard mapping file compatible with the specified layout and keyboard
# type must be present.
keyboard_layout = "US"
# ----------------------------------------------------------------------------
# CPU Options
# ----------------------------------------------------------------------------
[machine.cpu]
# Enable CPU wait states. This includes wait states from DMA, memory access
# and device IO. Setting this to false may speed up the CPU, but reduce
# accuracy (Area 5150 will break)
wait_states = true
# Attempt to detect when the CPU is executing invalid instructions and halt.
# May need to disable for certain test programs like acid88
off_rails_detection = false
# What to do when the CPU has entered an unrecoverable halt condition.
# Valid options are:
# Continue - Do nothing; just keep running
# Warn - Keep running, but display a warning notification
# Stop - Stop the system and display a warning notification
on_halt = "Warn"
# Enable instruction history. This slows down the emulator a modest amount
# when enabled. Only enable if debugging.
instruction_history = false
# Enable MartyPC's internal emulator serivce interrupt at 0xFC. You may need
# to disable this if conflicts arise. 'mdebug.com' requires this to be set
# true.
service_interrupt = true
# CPU Tracing Options
# ----------------------------------------------------------------------------
# CPU tracing may be enabled by specifying trace_mode
# Tracing does not begin unless trace_on == true or set in GUI
#
# Valid values for trace_mode:
# Instruction - Output per-instruction traces (slow, big)
# CycleText - Output per-cycle traces, text format (very slow, huge)
# CycleCsv - Output per-cycle traces, text/csv format (recommended)
# CycleSigrok - Output per-cycle traces, sigrok csv format (very slow, huge)
# Designed for import into sigrok PulseView for debugging.
# Use an import string of t,x20,l,l,x2,x3,l,l,l,l,l,l
# >>> WARNING: Any of these options will quickly make multi-gigabyte files <<<
#
# Additionally, a valid value for trace_file must be supplied.
#
trace_on = false
#trace_mode = "Instruction"
trace_mode = "CycleSigrok"
trace_file = "cycle_trace.log"
# ----------------------------------------------------------------------------
# Emulator paths
#
# By default, emulator paths are defined as relative to the base_dir path.
# If $base_dir$ is omitted from a path specifier, then that patch becomes
# an absolute path.
# Each path entry must be defined on a single line due to TOML grammar.
#
# Multiple entries for the same resource string can be defined for the
# following resources:
#
# hdd - MartyPC will search all defined paths for valid VHD images.
# rom - MartyPC will search all defined paths for valid ROMs.
# floppy - MartyPC will search all defined paths for valid floppy images.
# ----------------------------------------------------------------------------
[emulator]
# basedir: Base emulator data directory.
# Other emulator paths can be set as absolute paths, or relative to
# basedir with $basedir$
# The default is ".", effecting a portable installation with all
# directories relative to the current working directory.
basedir = "/home/gmgauthier/Retro/marty"
paths = [
{ resource = "machine", path = "$basedir$/configs/machines", recurse = true },
{ resource = "keyboard_layout", path = "$basedir$/configs/keyboard_layouts", recurse = false },
{ resource = "rom", path = "$basedir$/media/roms", recurse = true },
{ resource = "hdd", path = "$basedir$/media/hdds", recurse = true },
{ resource = "floppy", path = "$basedir$/media/floppies", recurse = true, create = true },
{ resource = "cartridge", path = "$basedir$/media/cartridges", recurse = true, create = true },
{ resource = "cassette", path = "$basedir$/media/cassettes", recurse = true, create = true },
{ resource = "dump", path = "$basedir$/output/dumps", create = true },
{ resource = "trace", path = "$basedir$/output/traces", create = true },
{ resource = "screenshot", path = "$basedir$/output/screenshots", create = true },
]
# Exclude any matching directories from recursion. Useful for temporarily
# hiding files, or moving files in and out of a "library" subdir.
ignore_dirs = ["parking"]
# -------------------------------------------------------------------------------------
# General emulator options
# -------------------------------------------------------------------------------------
# Power on the emulated machine on startup (only applicable in gui mode)
auto_poweron = true
# cpu_autostart: Run the CPU on startup - if false CPU will start paused
# (only applicable in gui mode)
cpu_autostart = true
# benchmark_mode: Run MartyPC in benchmark mode (cmdline: --benchmark-mode)
benchmark_mode = false
# headless: Run MartyPC without any windows
headless = false
# fuzzer: Run the instruction fuzzer (requires validator feature)
fuzzer = false
# title_hacks: Enable compatibility tweaks for specific software titles
title_hacks = true
# Debug mode does a few miscellaneous things.
# - CPU Autostart is disabled
# - Several debug panels are opened automatically
# - CPU Instruction history is turned on (overrides setting)
debug_mode = false
# Warn if MartyPC was compiled in debug mode. Disable this if you intend to
# do so and don't want the nag.
debug_warn = true
# Run the specified program instead of booting BIOS. The CPU reset vector will
# be set to 'run_bin_seg:run_bin_ofs'
#run_bin = "./program/a_effect.bin"
run_bin_seg = 0x1000
run_bin_ofs = 0x0000
[emulator.backend]
# Enable vsync. For wgpu frontend, I would recommend leaving this off. FIFO
# presentation mode increase latency and causes window resizing issues.
vsync = false
# There appears to be a bug in the wgpu backend that causes vertical stripes when
# running fullscreen under Intel graphics. This is a workaround for that issue, setting
# the surface size to one pixel less than fullscreen.
macos_stripe_fix = false
[emulator.audio]
# Set this to false to disable sound system initialization.
enabled = true
[emulator.media]
# Provide a list of file extensions to interpret as raw floppy sector images.
raw_sector_image_extensions = ["img", "ima", "dsk", "mnx"]
# Default state of write protection for newly loaded floppy images.
write_protect_default = false
[[emulator.media.vhd]]
# VHD to mount into drive 0 (Typically C:)
drive = 0
filename = "DRIVE_C.vhd"
[[emulator.media.vhd]]
# VHD to mount into drive 1 (Typically D:)
drive = 1
filename = "DRIVE_D.vhd"
# ----------------------------------------------------------------------------
# Debugger Options
# ----------------------------------------------------------------------------
[emulator.debugger]
# Create toast notifications for ROM checkpoints at this level.
checkpoint_notify_level = 0
# Create a toast notification when breakpoint hit
breakpoint_notify = true
# ----------------------------------------------------------------------------
# Emulator Window Options
#
# MartyPC will always have a main window, unless run headless. The main
# window can be set to display a video adapter, or not. Additional windows
# can be defined in [[emulator.window]] sections. Multiple windows can
# reference the same video card - aperture and scaling options are set
# per-window, so you can visualize an adapter's output multiple ways.
# Of course, every window you create has a cost in memory throughput and
# rendering time.
#
# At least one [[emulator.window]] section must be present. The first
# [[emulator.window]] defines the main window.
#
# A note about sizes - the real minimum size of a window is the unscaled size
# of the card's selected video aperture, which may be larger than expected
# due to overscan. If this is larger than the requested min_size, min_size
# will be ignored, the scaler will not resample downwards.
# Therefore, if you specifically want a 640x480 window, you should
# select the "Cropped" aperture.
# ----------------------------------------------------------------------------
[[emulator.window]]
# Provide a name for this window. (Required)
name = "Main GUI"
# If this parameter is provided, the window will be created at *at least*
# this size, or the video aperture resolution, whichever is higher.
# It is useful to use this value for the main window, but for secondary
# display windows, you may wish to use card_scale instead.
size = { w = 1024, h = 768 }
# If this window has a GUI menu, add the vertical height of the menu to the
# window height, and adjust the scaler to display the emulated display
# beneath it. Otherwise, if you create a 640x480 Cropped main window,
# the menu bar will overlap the top of image unless the GUI is hidden.
menu_adjust = true
# If set to false, the window cannot be resized by the user. It may still
# resize if the associated video card changes resolutions or the display
# aperture is changed.
resizable = true
# If this field is present, the window will display the specified card in its
# client area. If you do not want the window to display a card, comment this
# out.
# card_id is the numeric index of cards defined in a Machine configuration.
card_id = 0
# Size the initial window dimensions to the specified card's aperture size
# times this number.
# Setting this value overrides 'size' and 'resizable'.
#card_scale = 1
# Specify the scaler preset to use for this window. See the
# [[emulator.scaler_preset]] definitions defined below for reference.
scaler_preset = "default"
# Request that this window remain on top. Not recommended for main window.
always_on_top = false
# Second window, optional. Set 'enabled' to true to activate.
[[emulator.window]]
enabled = false
name = "Secondary Window"
size = { w = 800, h = 600 }
resizable = false
card_id = 0
card_scale = 1
scaler_preset = "Green CRT"
always_on_top = false
# Third window, optional
[[emulator.window]]
enabled = false
name = "Tertiary Window"
size = { w = 640, h = 480 }
resizable = false
card_id = 0
card_scale = 1
scaler_preset = "default"
always_on_top = false
# ----------------------------------------------------------------------------
# Emulator Scaler Presets
#
# Rather than define scaler settings for each possible window/display target,
# targets can reference a scaler preset defined here. Any number of
# [[emulator.scaler_preset]] sections can be defined, as long as the 'name'
# field is unique.
#
# At least one preset named "default" must be present.
#
# MartyPC's display pipeline for a video card has two stages - rendering
# and shading. Renderer options are listed under
# [emulator.scaler_preset.renderer] blocks. These must appear at the end
# of a scaler_preset definition.
# ----------------------------------------------------------------------------
[[emulator.scaler_preset]]
# Provide a unique name for this preset. Reference this name in window
# definitions. A name is required.
name = "default" # Default preset must exist! Do not rename.
# Specify the scaler mode to use for this window when displaying a video card.
# The default value is "Integer". This has no effect if no card_id is provided.
#
# Valid options for Scaler mode are
# Fixed - Video and shader output will be displayed at native base resolution
# Integer - Video and shader output will be scaled to the largest integer
# multiple that will fit in the window. This generally produces the
# clearest results, but can leave large black borders.
# Fit - Video will be scaled proportionally to fit the window.
# Stretch - Video will be scaled to fit the window.
mode = "Fit"
# Valid options for filter are:
# Linear - Bilinear filtering. Best results but may introduce blur.
# Nearest - Nearest neighbor filtering. Crisp, but may introduce scanline
# artifacts at non-integer scale sizes. Looks terrible with crt
# effects.
filter = "Linear"
# RGBA color to use for the 'border' area around scaler output.
# This is also used for the background color of a window with no card
# attachment.
border_color = 0x323338 # Medium gray.
# Enable or disable CRT shader effects
crt_effect = false
# Degree to which the corners of the display should be rounded, from
# 0.0 (sharp corners) to 1.0 (maximum rounding)
crt_corner_radius = 0.0
# Amount of barrel distortion from 0 (no distortion) to 1.0
crt_barrel_distortion = 0.0
# Emulated phosphor type
# Valid values are:
# Color - (default) Normal color CRT
# White - White CRT phosphors
# Green - Green CRT phosphors
# Amber - Amber CRT phosphors
crt_phosphor_type = "Color"
# Emulate scanlines?
crt_scanlines = false
# Gamma correction value (only used when crt_phosphor_type != Color)
gamma = 1.0
# Renderer options. In MartyPC a renderer is responsible for presenting data
# to the scaler for display. These options are not technically part of the
# scaler, but included in scaler presets for convenience.
[emulator.scaler_preset.renderer]
#
# display_aperture: Valid options are:
# Cropped - Display the card in the "traditional" resolution for each graphics
# mode, with no overscan. Ie, 320x200 for low resolution CGA,
# 640x350 for high resolution EGA, 640x480 for high resolution VGA
# Accurate - Display the card with overscan extents as they would appear on a
# typical CRT monitor
# Full - Display the entire overscan area
# Debug - Display the entire video field, including horizontal and vertical
# blanking periods. Helpful for debugging video code.
display_aperture = "Accurate"
# Aspect-correct scaler output to 4:3. This will make the video output more
# visually accurate to what you would see on a real monitor, but will introduce
# vertical blur if using Integer or Fixed scaling modes. This can be toggled in
# the GUI.
aspect_correction = true
# Aspect ratio to use, representing a w:h ratio. Both fields should be
# integers.
aspect_ratio = { h = 4, v = 3 }
# Emulate a composite color signal (and produce artifact color)
# Has no effect unless card type is CGA.
composite = false
# Define additional scaler presets below...
[[emulator.scaler_preset]]
name = "IBM 5153"
filter = "Linear"
border_color = 0x323338 # Medium gray.
crt_effect = true
crt_barrel_distortion = 0.2
crt_corner_radius = 0.2
crt_phosphor_type = "Color"
crt_scanlines = true
gamma = 1.0
[emulator.scaler_preset.renderer]
display_aperture = "Accurate"
aspect_correction = true
aspect_ratio = { h = 4, v = 3 }
composite = false
[[emulator.scaler_preset]]
name = "Green CRT"
filter = "Linear"
border_color = 0x323338 # Medium gray.
crt_effect = true
crt_barrel_distortion = 0.2
crt_corner_radius = 0.2
crt_phosphor_type = "Green"
crt_scanlines = true
gamma = 1.0
[emulator.scaler_preset.renderer]
display_aperture = "Accurate"
aspect_correction = true
aspect_ratio = { h = 4, v = 3 }
composite = false
[[emulator.scaler_preset]]
name = "Amber CRT"
filter = "Linear"
border_color = 0x323338 # Medium gray.
crt_effect = true
crt_barrel_distortion = 0.2
crt_corner_radius = 0.2
crt_phosphor_type = "Amber"
crt_scanlines = true
gamma = 1.0
[emulator.scaler_preset.renderer]
display_aperture = "Accurate"
aspect_correction = true
composite = false
aspect_ratio = { h = 4, v = 3 }
# ----------------------------------------------------------------------------
# General Input Options
# ----------------------------------------------------------------------------
[emulator.input]
# Some platforms reverse the left and right mouse button id #'s.
# We try to detect this, but it can be overridden here.
reverse_mouse_buttons = false
# Define hotkeys.
# Each hotkey definition specifies an event enum and a list of keycodes. See
# one of the keyboard mapping files in /config/keyboards for a list of valid
# keycode names.
#
# scope: When is the hotkey recognized?
# "Any" - Hotkey triggers in any context
# "Gui" - Hotkey only triggers when GUI has focus
# "Machine" - Hotkey only triggers when emulated machine has focus
# "Captured" - Hotkey only triggers when emulated machine has captured input
#
# capture_disable: Disable this hotkey when input is captured. Setting this and
# the "Captured" scope will disable the hotkey
#
# Multiple events can be mapped to the same input sequence. They will all fire
# when that key sequence is pressed.
#
# Events are a bit limited at first. More hotkey events are coming in the future.
hotkeys = [
{ event = "CaptureMouse", keys = ["ControlLeft", "F10"], scope = "Any", capture_disable = false },
{ event = "CtrlAltDel", keys = ["ControlLeft", "F11"], scope = "Any", capture_disable = false },
{ event = "Reboot", keys = ["ControlLeft", "F12"], scope = "Any", capture_disable = false },
{ event = "Screenshot", keys = ["ControlLeft", "F5"], scope = "Any", capture_disable = false },
{ event = "ToggleGui", keys = ["ControlLeft", "F1"], scope = "Any", capture_disable = false },
{ event = "ToggleFullscreen", keys = ["ControlLeft", "Enter"], scope = "Any", capture_disable = false },
{ event = "DebugStepOver", keys = ["F10"], scope="Gui", capture_disable = false },
{ event = "DebugStep", keys = ["F11"], scope="Gui", capture_disable = false },
# Joystick hotkeys. Only enabled when joystick keyboard emulation is enabled.
{ event = "JoyToggle", keys = ["ControlLeft", "F9"], scope="Any", capture_disable = false },
]
# Enable keyboard -> joystick emulation. This can be toggled via the JoyToggle hotkey
# above, so it isn't necessary to set this to true unless you want it enabled by default.
keyboard_joystick = false
joystick_keys = [
{ input = "JoyButton1", key = "AltRight" },
{ input = "JoyButton2", key = "ControlRight" },
{ input = "JoyUp", key = "ArrowUp" },
{ input = "JoyLeft", key = "ArrowLeft"},
{ input = "JoyRight", key = "ArrowRight"},
{ input = "JoyDown", key = "ArrowDown" }
]
# Help the developer debug any keyboard issues you may be having. With this
# feature set to true, MartyPC will print information about every keystroke
# to the terminal.
debug_keyboard = false
# ----------------------------------------------------------------------------
# Benchmarking (not yet implemented - configs are placeholder)
# ----------------------------------------------------------------------------
[emulator.benchmark]
# Machine configuration to benchmark
config_name = "ibm5160"
config_overlays = []
prefer_oem = true
# Valid options for benchmark_end_condition are:
# "Timeout" - Benchmark for 'timeout' seconds and exit
# "Trigger" - Terminate benchmark on signal from internal service interrupt
# "Cycles" - Terminate benchmark after 'cycles' CPU cycles
end_condition = "Timeout"
timeout = 60
cycles = 572400000 # 2 minutes
# ----------------------------------------------------------------------------
# GUI options
# ----------------------------------------------------------------------------
[gui]
# Select the color theme for the GUI.
# Valid values are:
# - DefaultLight : default EGUI Light theme
# - Lilac : light theme variant
# - Hal : light theme variant
# - DefaultDark : default EGUI Dark theme (recommended)
# - Purple : dark theme variant
# - Cobalt : dark theme variant
theme = "Purple"
# Theme for the top menu can be defined independently
menu_theme = "DefaultLight"
# Global zoom level for GUI. Smaller numbers will make all the GUI elements
# smaller. Default: 1.0 Max: 1.0 Min: 0.1
zoom = 1.0
# ----------------------------------------------------------------------------
# Options for the CPU Validator module.
# ----------------------------------------------------------------------------
# You must have an Arduino8088 connected via USB to utilize
# the validator. For more information, see
# https://github.com/dbalsom/arduino_8088
[validator]
type = "Arduino8088"
trigger_address = 0xFFFF0
trace_file = "./traces/validator_trace.log"
# ----------------------------------------------------------------------------
# Options for JSON test facilities
# MartyPC can create JSON tests or validate them.
# ----------------------------------------------------------------------------
# Test generation requires a functioning CPU Validator module, see above
[tests]
# Valid values for test_mode are:
# None - Do not generate or validate tests (default - run emulator normally)
# Generate - generate tests based on supplied parameters
# Valdidate - validate tests
test_mode = "None"
# Random seed for testing. The same random seed should produce the same
# set of tests. If you want a different set of tests, change this to any
# other number.
test_seed = 1234
# Directory to look for / place tests
test_dir = "tests/v1"
# Opcode range to generate or validate. Provide start and end opcodes.
# If start == end, that single opcode will be generated or validated.
test_opcode_range = [0, 0]
# List of opcodes to exclude in generation or validation.
test_opcode_exclude_list = [0xF1]
# Number of tests to generate per opcode.
test_opcode_gen_count = 5000
# If true, append to existing test JSON if < test_opcode_gen_count.
# If false, generation will replace any existing JSON file.
test_opcode_gen_append = true

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,16 @@
======================= http://www.winworldpc.com =======================
This archive has origniated from WinWorld
WinWorld is a site devoted to saving and sharing abandonware -- providing
free, unrestricted access to a large collection of old operating systems
and applications. We believe old software which has fallen out of use
should be available for anyone to use for the purposes of learning and
experimentation.
Our downloads library can be accessed from our website
Stop by WinBoards, our small but long-standing community. Whether you're
looking for help or just dropping by to say hello, you can do so easily
with no registration required!
Do visit us at http://www.WinWorldPC.com

Binary file not shown.

View File

@ -0,0 +1,16 @@
======================= http://www.winworldpc.com =======================
This archive has origniated from WinWorld
WinWorld is a site devoted to saving and sharing abandonware -- providing
free, unrestricted access to a large collection of old operating systems
and applications. We believe old software which has fallen out of use
should be available for anyone to use for the purposes of learning and
experimentation.
Our downloads library can be accessed from our website
Stop by WinBoards, our small but long-standing community. Whether you're
looking for help or just dropping by to say hello, you can do so easily
with no registration required!
Do visit us at http://www.WinWorldPC.com

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

View File

@ -0,0 +1,8 @@
Microsoft MS-DOS 6.22 Plus Enhanced Tools
Released in 1994 by Microsoft
For IBM PCs and Compatibles.
3.5" 1.44mb floppy disk media
6.22 was the last standalone DOS product sold by Microsoft.
Verified from multiple sources.

Binary file not shown.

View File

@ -0,0 +1,15 @@
======================= http://www.winworldpc.com =======================
This archive has originated from WinWorld
WinWorld is a site devoted to saving and sharing historic software --
providing free, unrestricted access to a large collection of vintage
operating systems and applications. We believe old software that has
fallen out of use should be available for anyone to use for the purposes
of learning and experimentation.
Our downloads library can be accessed from our website
Stop by WinBoards, our small but long-standing community. Whether you're
looking for help or just dropping by to say hello!
Do visit us at http://www.WinWorldPC.com

Binary file not shown.

View File

@ -0,0 +1,15 @@
======================= http://www.winworldpc.com =======================
This archive has originated from WinWorld
WinWorld is a site devoted to saving and sharing historic software --
providing free, unrestricted access to a large collection of vintage
operating systems and applications. We believe old software that has
fallen out of use should be available for anyone to use for the purposes
of learning and experimentation.
Our downloads library can be accessed from our website
Stop by WinBoards, our small but long-standing community. Whether you're
looking for help or just dropping by to say hello!
Do visit us at http://www.WinWorldPC.com

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,16 @@
======================= http://www.winworldpc.com =======================
This archive has origniated from WinWorld
WinWorld is a site devoted to saving and sharing abandonware -- providing
free, unrestricted access to a large collection of old operating systems
and applications. We believe old software which has fallen out of use
should be available for anyone to use for the purposes of learning and
experimentation.
Our downloads library can be accessed from our website
Stop by WinBoards, our small but long-standing community. Whether you're
looking for help or just dropping by to say hello, you can do so easily
with no registration required!
Do visit us at http://www.WinWorldPC.com

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,16 @@
======================= http://www.winworldpc.com =======================
This archive has origniated from WinWorld
WinWorld is a site devoted to saving and sharing abandonware -- providing
free, unrestricted access to a large collection of old operating systems
and applications. We believe old software which has fallen out of use
should be available for anyone to use for the purposes of learning and
experimentation.
Our downloads library can be accessed from our website
Stop by WinBoards, our small but long-standing community. Whether you're
looking for help or just dropping by to say hello, you can do so easily
with no registration required!
Do visit us at http://www.WinWorldPC.com

View File

@ -0,0 +1,14 @@
IBM PC-DOS 7.0
Released in 1994 by IBM
For IBM PC compatibles
PC-DOS 7, AKA "IBM PC DOS 7.00, revision 0", adds the REXX
Programming language, XDF 1.86MB 3.5" floppy disk support, and
Stacker Disk compression.
This version was distributed on 3.5" media that used a special 1.8MB
"XDF" format. This format is not compatible with USB floppy drives or
most disk utilities.
To create working disks, you must run the Xdfcopy utility from DOS on
a 100% IBM PC compatible computer with a real 1.44mb floppy drive.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,14 @@
pause 'insert diskette driver a: and press <ENTER>'
loaddskf.exe 144us1.dsk a:
pause 'insert diskette driver a: and press <ENTER>'
xdfcopy.exe 144us2.xdf a: /y /nv
pause 'insert diskette driver a: and press <ENTER>'
xdfcopy.exe 144us3.xdf a: /y /nv
pause 'insert diskette driver a: and press <ENTER>'
xdfcopy.exe 144us4.xdf a: /y /nv
pause 'insert diskette driver a: and press <ENTER>'
xdfcopy.exe 144us5.xdf a: /y /nv

Binary file not shown.

View File

@ -0,0 +1,15 @@
======================= http://www.winworldpc.com =======================
This archive has originated from WinWorld
WinWorld is a site devoted to saving and sharing historic software --
providing free, unrestricted access to a large collection of vintage
operating systems and applications. We believe old software that has
fallen out of use should be available for anyone to use for the purposes
of learning and experimentation.
Our downloads library can be accessed from our website
Stop by WinBoards, our small but long-standing community. Whether you're
looking for help or just dropping by to say hello!
Do visit us at http://www.WinWorldPC.com

30
media/floppies/readme.md Normal file
View File

@ -0,0 +1,30 @@
### Floppy Directory
Put floppy images in this directory. Valid image formats are flat sector images
of the type created by WinImage, dd or other such utilities, typically with \*.img
or \*.ima extensions. Compressed \*.imz images are not supported.
MartyPC will adjust the floppy drive size within the capabilities of the currently
emulated machine, based on the size of the image loaded. Thus if you load a 720KB
floppy image, the drive becomes a 720KB floppy drive. There is no need to configure
this setting.
However, if emulating a IBM PC or XT, note that certain floppy sizes will not work
as the machine/BIOS does not know how to handle a disk of that size.
Floppy images must be one of these exact file sizes:
|bytes|type| |
|----|----|-------|
|163,840 | 160KB floppy, single-sided | Rare, only used by the earliest PCs.|
|184,320 | 180KB floppy, single-sided | Rare, only used by the earliest PCs.|
|327,680 | 320KB floppy, double-sided | Somewhat rare. |
|368,640 | 360KB floppy, double-sided | Extremely common. |
|737,280 | 720KB floppy, double-sided | Extremely common. |
|1,228,800 | 1.2MB floppy, double-sided | Extremely common. |
The exception is anything smaller than 163,840 bytes will be loaded as that size,
padded with 0s.
This is a convenience feature for development of boot sector software or loading
of boot sector demos and games.

BIN
media/hdds/DRIVE_C.vhd Normal file

Binary file not shown.

BIN
media/hdds/DRIVE_D.vhd Normal file

Binary file not shown.

9
media/hdds/readme.md Normal file
View File

@ -0,0 +1,9 @@
### HDD Directory
This directory will store the VHDs created by the emulator.
VHDs in this directory will be selectable via a menu from within MartyPC.
Currently, only one type of VHD is supported, limited by the largest geometry
the IBM/Xebec drive controller was able to support. In the future as IDE
support is added larger drives will be available.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
media/roms/IBM/ibm-vga.rom Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
media/roms/ide_at.bin Normal file

Binary file not shown.

BIN
media/roms/ide_xt.bin Normal file

Binary file not shown.

BIN
media/roms/ide_xt_1_1_5.bin Normal file

Binary file not shown.

Binary file not shown.

35
media/roms/readme.md Normal file
View File

@ -0,0 +1,35 @@
# MartyPC ROM and ROM Definition Guide
## ROM Directory
If you're reading this, you've found the main ROM directory! Place your ROMs in this directory. If this is the default
ROM directory (`/media/roms` in a portable install) then this entire directory will be searched recursively for ROM
definition files, and subsequently any defined ROM files.
Most common sources of ROM images for the IBM PC 5150 or IBM XT 5160 should work, including MAME, PCem, 86Box and minuszerodegrees.
If multiple valid sets of ROMs are detected for a specified machine, MartyPC will use the 'best' set as decided by OEM flag and
release date.
Please see the MartyPC Wiki for more information on using ROMs with MartyPC:
https://github.com/dbalsom/martypc/wiki/ROMs
### Tips
* If you're not sure what ROMs to use, you can copy all the ROMs from the PCem or 86Box ROM distributions into the ROMs folder, and
MartyPC should find what it needs and ignore the rest.
* You can run MartyPC with the `--romscan` argument to see what ROMs MartyPC finds and detects. If you're having issues with ROM detection, including
this argument in your issue report would be very helpful.
* If you wish to omit certain directories from search, such as 'parking', you can add those directory names to the main
configuration's 'ignore_dirs'. This can be handy to control which ROMs are *not* used if you're otherwise struggling with the ROM priority logic.
## ROM Definition Files
MartyPC uses **ROM Definition Files** to define and identify ROMs to use. This provides a flexible and extensible system.
If you find new ROMs that aren't defined yet, you can add them (although please let me know about them!)
If you are a ROM developer, you can create your own ROM definition files, and reference them in custom machine configurations.

172
media/roms/romdef.toml Normal file
View File

@ -0,0 +1,172 @@
# 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 },
]

View File

@ -0,0 +1,25 @@
# romdef_compaq.toml
# ROM definition file for MartyPC.
# ----------------------------------------------------------------------------
# ROM definitions for Compaq
# ----------------------------------------------------------------------------
[[romset]]
alias = "compaq_portable_revb"
desc = "Compaq Portable Rev B"
priority = 0
provides = ["bios", "ibm5160"]
oem_for = ["ibm5160"]
rom = [
{ md5 = "f92174c12a0ed95c1e29cd0a488a6080", addr = 0xFE000, size = 8192, chip = "100298" },
]
[[romset]]
alias = "compaq_portable_revf"
desc = "Compaq Portable Rev F"
priority = 0
provides = ["bios", "ibm5160", "expansion"]
oem_for = ["ibm5160"]
rom = [
{ md5 = "a830e37bb3df05687dd0884724110b99", addr = 0xFE000, size = 8192, chip = "100298" },
]

View File

@ -0,0 +1,85 @@
# romdef_glabios.toml
# ROM definition file for MartyPC.
# ----------------------------------------------------------------------------
# ROM definitions for GLaBIOS
# ----------------------------------------------------------------------------
[[romset]]
alias = "glabios_pc_0.2.5"
desc = "GLaBIOS for IBM 5150 (MartyPC)"
priority = 0
provides = ["bios", "ibm5150v64k", "ibm5150v256k", "expansion"]
oem_for = ["glabios_pc"]
rom = [
{ filename = "GLABIOS_0.2.5_8PC.ROM", addr = 0xFE000, size = 8192, chip = "glabios" }
]
[[romset]]
alias = "glabios_xt_0.2.5"
priority = 0
provides = ["bios", "ibm5160", "expansion"]
desc = "GLaBIOS for IBM 5160 (MartyPC)"
oem_for = ["glabios_xt"]
rom = [
{ filename = "GLABIOS_0.2.5_8XC.ROM", addr = 0xFE000, size = 8192, chip = "glabios" }
]
[[romset]]
alias = "glabios_xt_0.2.5_lp"
desc = "GLaBIOS for IBM 5160 (MartyPC + Lightpen)"
priority = 0
provides = ["bios", "glabios_xt", "ibm5160", "expansion"]
oem_for = ["glabios_xt"]
rom = [
{ filename = "GLABIOS_0.2.5_8TC_PEN.ROM", addr = 0xFE000, size = 8192, chip = "glabios" }
]
[[romset]]
alias = "glabios_pc_0.2.6"
desc = "GLaBIOS for IBM 5150"
priority = 1
provides = ["bios", "glabios_xt", "ibm5150v64k", "ibm5150v256k", "expansion"]
oem_for = ["glabios_pc"]
rom = [
{ filename = "GLABIOS_0.2.6_8P.ROM", addr = 0xFE000, size = 8192, chip = "glabios" }
]
[[romset]]
alias = "glabios_xt_0.2.6"
desc = "GLaBIOS for IBM 5160"
priority = 1
provides = ["bios", "glabios_xt", "ibm5160", "expansion"]
oem_for = ["glabios_xt"]
rom = [
{ filename = "GLABIOS_0.2.6_8X.ROM", addr = 0xFE000, size = 8192, chip = "glabios" }
]
[[romset]]
alias = "glabios_pc"
desc = "GLaBIOS 0.2.6 for IBM 5150 (MartyPC)"
priority = 4
provides = ["bios", "ibm5150v64k", "ibm5150v256k", "expansion"]
oem_for = ["glabios_pc"]
rom = [
{ filename = "GLABIOS_0.2.6_8PC.ROM", addr = 0xFE000, size = 8192, chip = "glabios" }
]
[[romset]]
alias = "glabios_xt"
desc = "GLaBIOS 0.2.6 for IBM 5160 (MartyPC)"
priority = 4
provides = ["bios", "ibm5160", "expansion"]
oem_for = ["glabios_xt"]
rom = [
{ filename = "GLABIOS_0.2.6_8XC.ROM", addr = 0xFE000, size = 8192, chip = "glabios" }
]
[[romset]]
alias = "glabios_xt_turbo"
desc = "GLaBIOS 0.2.6 for Generic Turbo XT (MartyPC)"
priority = 15
provides = ["bios", "ibm5160", "expansion"]
oem_for = ["glabios_xt"]
rom = [
{ filename = "GLABIOS_0.2.6_8TC.ROM", addr = 0xFE000, size = 8192, chip = "glabios" }
]

432
media/roms/romdef_ibm.toml Normal file
View File

@ -0,0 +1,432 @@
# romdef_ibm.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.
# ----------------------------------------------------------------------------
# System ROMS - IBM 5150 (PC)
# ----------------------------------------------------------------------------
[[romset]]
alias = "ibm5150_81_v1"
desc = "IBM 5150 BIOS v1 04/24/81"
priority = 1
provides = ["bios", "ibm5150v64k"]
oem = true
datestr = "04/24/81"
rom = [
{ md5 = "6338a9808445de12109a2389b71ee2eb", addr = 0xFE000, size = 8192, chip = "u33" }
]
checkpoint = [
{ addr = 0xfe01a, lvl = 2, desc = "RAM Check Routine" },
{ addr = 0xfe05b, lvl = 2, desc = "8088 Processor Test" },
{ addr = 0xfe0b0, lvl = 2, desc = "ROS Checksum" },
{ addr = 0xfe0da, lvl = 2, desc = "8237 DMA Initialization Test" },
{ addr = 0xfe117, lvl = 2, desc = "DMA Controller test"},
{ addr = 0xfe158, lvl = 2, desc = "Base 16K Read/Write Test"},
{ addr = 0xfe235, lvl = 2, desc = "8249 Interrupt Controller Test"},
{ addr = 0xfe285, lvl = 2, desc = "8253 Timer Checkout"},
{ addr = 0xfe33b, lvl = 2, desc = "ROS Checksum II"},
{ addr = 0xfe352, lvl = 2, desc = "Initialize CRTC Controller"},
{ addr = 0xfe3af, lvl = 2, desc = "Video Line Test"},
{ addr = 0xfe3c0, lvl = 2, desc = "CRT Interface Lines Test"},
{ addr = 0xfe3f8, lvl = 2, desc = "Additional R/W Storage Test"},
{ addr = 0xfe630, lvl = 0, desc = "Error Beep"},
{ addr = 0xfe666, lvl = 3, desc = "Beep"},
{ addr = 0xfe688, lvl = 2, desc = "Keyboard Reset"},
{ addr = 0xfe6b2, lvl = 3, desc = "Blink LED Interrupt"},
{ addr = 0xfe6ca, lvl = 3, desc = "Print Message"},
{ addr = 0xfe6f2, lvl = 2, desc = "Bootstrap Loader"},
{ addr = 0xFEF33, lvl = 3, desc = "FDC Wait for Interrupt"},
{ addr = 0xFEF47, lvl = 3, desc = "FDC Interrupt Timeout"},
{ addr = 0xf6000, lvl = 2, desc = "ROM BASIC"},
]
[[romset]]
alias = "ibm5150_81_v2"
priority = 2
provides = ["bios", "ibm5150v64k"]
oem = true
desc = "IBM 5150 BIOS v2 10/19/81"
datestr = "10/19/81"
rom = [
{ md5 = "6a1ed4e3f500d785a01ff4d3e000d79c", addr = 0xFE000, size = 8192, chip = "u33" }
]
[[romset]]
alias = "ibm5150_82_v3"
priority = 3
provides = ["bios", "ibm5150v64k", "ibm5150v256k", "expansion"]
oem = true
desc = "IBM 5150 BIOS v3 10/27/82"
datestr = "10/27/82"
rom = [
{ md5 = "f453eb2df6daf21ec644d33663d85434", addr = 0xFE000, size = 8192, chip = "u33" }
]
# ----------------------------------------------------------------------------
# System ROMS - IBM 5160 (XT)
# ----------------------------------------------------------------------------
[[romset]]
alias = "ibm5160_82_v1_wbasic"
datestr = "11/08/82"
priority = 1
provides = ["bios", "ibm5160", "ibm_basic", "expansion"]
oem = true
rom = [
{ md5 = "e816a89768a1bf4b8d52b454d5c9d1e1", addr = 0xF0000, size = 32768, chip = "basic+u19" },
{ md5 = "1a2ac1ae0fe0f7783197e78da8b3126c", addr = 0xF8000, size = 32768, chip = "u18" },
]
checkpoint = [
{ addr = 0xFE01A, lvl = 3, desc = "RAM Check Routine" },
{ addr = 0xFE05B, lvl = 3, desc = "8088 Processor Test" },
{ addr = 0xFE0AE, lvl = 3, desc = "ROS Checksum Test I" },
{ addr = 0xFE0D9, lvl = 3, desc = "8237 DMA Initialization Test" },
{ addr = 0xFE135, lvl = 3, desc = "Start DRAM Refresh" },
{ addr = 0xFE166, lvl = 3, desc = "Base 16K RAM Test" },
{ addr = 0xFE242, lvl = 3, desc = "Initialize CRTC Controller" },
{ addr = 0xFE329, lvl = 3, desc = "8259 Interrupt Controller Test" },
{ addr = 0xFE35D, lvl = 3, desc = "8253 Timer Checkout" },
{ addr = 0xFE3A2, lvl = 3, desc = "Keyboard Test" },
{ addr = 0xFE3DE, lvl = 3, desc = "Setup Interrupt Vector Table" },
{ addr = 0xFE418, lvl = 3, desc = "Expansion I/O Box Test" },
{ addr = 0xFE46A, lvl = 3, desc = "Additional R/W Storage Test" },
]
[[romset.patch]]
desc = "Patch ROS checksum routine"
trigger = 0xFE0AE
addr = 0xFE0D7
bytes = [ 0xEB, 0x00 ]
[[romset.patch]]
desc = "Patch RAM Check Routine for faster boot"
trigger = 0xFE46A
addr = 0xFE49D
bytes = [0x90, 0x90, 0x90, 0x90, 0x90]
# ----------------------------------------------------------------------------
[[romset]]
alias = "ibm5160_82_v1"
datestr = "11/08/82"
priority = 2
provides = ["bios", "ibm5160", "expansion"]
oem = true
rom = [
{ md5 = "69e2bd1d08c893cbf841607c8749d5bd", addr = 0xFE000, size = 8192, chip = "u19" },
{ md5 = "1a2ac1ae0fe0f7783197e78da8b3126c", addr = 0xF8000, size = 32768, chip = "u18" },
]
checkpoint = [
{ addr = 0xFE01A, lvl = 3, desc = "RAM Check Routine" },
{ addr = 0xFE05B, lvl = 3, desc = "8088 Processor Test" },
{ addr = 0xFE0AE, lvl = 3, desc = "ROS Checksum Test I" },
{ addr = 0xFE0D9, lvl = 3, desc = "8237 DMA Initialization Test" },
{ addr = 0xFE135, lvl = 3, desc = "Start DRAM Refresh" },
{ addr = 0xFE166, lvl = 3, desc = "Base 16K RAM Test" },
{ addr = 0xFE242, lvl = 3, desc = "Initialize CRTC Controller" },
{ addr = 0xFE329, lvl = 3, desc = "8259 Interrupt Controller Test" },
{ addr = 0xFE35D, lvl = 3, desc = "8253 Timer Checkout" },
{ addr = 0xFE3A2, lvl = 3, desc = "Keyboard Test" },
{ addr = 0xFE3DE, lvl = 3, desc = "Setup Interrupt Vector Table" },
{ addr = 0xFE418, lvl = 3, desc = "Expansion I/O Box Test" },
{ addr = 0xFE46A, lvl = 3, desc = "Additional R/W Storage Test" },
]
[[romset.patch]]
desc = "Patch ROS checksum routine"
trigger = 0xFE0AE
addr = 0xFE0D7
bytes = [ 0xEB, 0x00 ]
[[romset.patch]]
desc = "Patch RAM Check Routine for faster boot"
trigger = 0xFE46A
addr = 0xFE49D
bytes = [0x90, 0x90, 0x90, 0x90, 0x90]
# ----------------------------------------------------------------------------
[[romset]]
alias = "ibm5160_86_v1_wbasic"
datestr = "01/10/86"
priority = 3
provides = ["bios", "ibm5160", "expansion", "ibm_basic"]
rom = [
{ md5 = "f051b4bbc3b60c3a14df94a0e4ee720f", addr = 0xF0000, chip = "basic+u19" },
{ md5 = "fd9ff9cbe0a8f154746ccb0a33f6d3e7", addr = 0xF8000, chip = "u18" },
]
[[romset]]
alias = "ibm5160_86_v2_wbasic"
datestr = "05/09/86"
priority = 4
provides = ["bios", "ibm5160", "expansion", "ibm_basic"]
oem = true
rom = [
{ md5 = "df9f29de490d7f269a6405df1fed69b7", addr = 0xF0000, chip = "basic+u19" },
{ md5 = "9696472098999c02217bf922786c1f4a", addr = 0xF8000, chip = "u18" },
]
checkpoint = [
{ addr = 0xfe01a, lvl = 3, desc = "RAM Check Routine" },
{ addr = 0xfe05b, lvl = 3, desc = "8088 Processor Test" },
{ addr = 0xFE0AC, lvl = 3, desc = "ROS Checksum Test I" },
{ addr = 0xFE0D7, lvl = 3, desc = "8237 DMA Initialization Test" },
{ addr = 0xFE136, lvl = 3, desc = "Start DRAM Refresh" },
{ addr = 0xFE166, lvl = 3, desc = "Base 16K RAM Test" },
{ addr = 0xFE1DA, lvl = 3, desc = "Initialize 8259 PIC" },
{ addr = 0xFE20B, lvl = 3, desc = "Determine Configuration and Mfg Mode" },
{ addr = 0xFE261, lvl = 3, desc = "Initialize CRTC Controller" },
{ addr = 0xFE2EE, lvl = 3, desc = "Video Line Test" },
{ addr = 0xFE35C, lvl = 3, desc = "8259 Interrupt Controller Test" },
{ addr = 0xFE38F, lvl = 3, desc = "8253 Timer Checkout" },
{ addr = 0xFE3D4, lvl = 3, desc = "Keyboard Test" },
{ addr = 0xFE40F, lvl = 3, desc = "Setup Interrupt Vector Table" },
{ addr = 0xFE448, lvl = 3, desc = "Expansion I/O Box Test" },
{ addr = 0xFE499, lvl = 3, desc = "Additional R/W Storage Test" },
{ addr = 0xFE53C, lvl = 3, desc = "Optional ROM Scan" },
{ addr = 0xFE55B, lvl = 3, desc = "Diskette Attachment Test" },
]
[[romset.patch]]
desc = "Patch ROS checksum routine"
trigger = 0xFE0AC
addr = 0xFE0D5
bytes = [0xEB, 0x00]
[[romset.patch]]
desc = "Patch RAM Check Routine for faster boot"
trigger = 0xFE499
addr = 0xFE4EA
bytes = [ 0x90, 0x90, 0x90, 0x90, 0x90]
# ----------------------------------------------------------------------------
# Device ROMS
# ----------------------------------------------------------------------------
[[romset]]
alias = "ibm_xebec"
priority = 1
provides = ["ibm_xebec"]
oem = true
requires = ["expansion"]
rom = [
{ md5 = "66631d1a095d8d0d54cc917fbdece684", addr = 0xC8000, size = 4096 }
]
checkpoint = [
{ addr = 0xC8003, lvl = 3, desc = "HDC Expansion Init" },
{ addr = 0xC8117, lvl = 3, desc = "HDC Disk Reset" },
{ addr = 0xC8596, lvl = 3, desc = "HDC Status Timeout" },
{ addr = 0xC8192, lvl = 3, desc = "HDC Bootstrap Loader" },
{ addr = 0xC81FF, lvl = 3, desc = "HDC Boot From Fixed Disk" },
]
[[romset]]
alias = "ibm_ega"
priority = 1
provides = ["ibm_ega"]
oem = true
requires = ["expansion"]
rom = [
{ md5 = "528455ed0b701722c166c6536ba4ff46", addr = 0xC0000, size = 16384, chip = "1", org = "Normal" },
{ md5 = "0636f46316f3e15cb287ce3da6ba43a1", addr = 0xC0000, size = 16384, chip = "1", org = "Reversed" }
]
checkpoint = [
{ addr = 0xC0003, lvl = 3, desc = "EGA Expansion Init" },
{ addr = 0xC009B, lvl = 3, desc = "EGA DIP Switch Sense" },
{ addr = 0xC0205, lvl = 3, desc = "EGA CD Presence Test" },
{ addr = 0xC037C, lvl = 3, desc = "EGA VBlank Bit Test" },
{ addr = 0xC0D20, lvl = 3, desc = "EGA Error Beep" },
{ addr = 0xC03F6, lvl = 3, desc = "EGA Diagnostic Dot Test" },
{ addr = 0xC0480, lvl = 3, desc = "EGA Mem Test" },
{ addr = 0xC068F, lvl = 3, desc = "EGA How Big Test" },
]
[[romset]]
alias = "ibm_vga"
priority = 1
provides = ["ibm_vga"]
oem = true
requires = ["expansion"]
rom = [
{ md5 = "2057a38cb472300205132fb9c01d9d85", addr = 0xC0000, offset = 0x2000, size = 32768, chip = "1" },
{ md5 = "2c8a4e1db93d2cbe148b66122747e4f2", addr = 0xC0000, offset = 0, size = 24576, chip = "1" }
]
checkpoints = [
{ addr = 0xC203B, lvl = 3, desc = "VGA Expansion Init" },
{ addr = 0xC21F9, lvl = 3, desc = "VGA Vblank Test" },
]
# ----------------------------------------------------------------------------
# BASIC ROMS - IBM 5150 & 5160
# BASIC can be loaded seperately if you aren't using system ROMS that have it
# built in.
# ----------------------------------------------------------------------------
[[romset]]
alias = "ibmbasic_v1_32k"
desc = "IBM Cassette Basic C1.0"
priority = 2
provides = ["ibm_basic"]
oem = true
rom = [
{ md5 = "2ad31da203a49b504fad3a34af0c719f", addr = 0xF6000, size = 32768 },
]
[[romset]]
alias = "ibmbasic_v1_8k"
desc = "IBM Cassette Basic C1.0"
priority = 1
provides = ["ibm_basic"]
oem = true
rom = [
{ md5 = "2ac2e97eddb3f344641cdd9dc3747f8e", addr = 0xF6000, size = 8192 },
{ md5 = "8b2a0f2ea97d0adb9c1c834387aad5d9", addr = 0xF8000, size = 8192 },
{ md5 = "9a3253ad9f1d8213d33e04476e3ed482", addr = 0xFA000, size = 8192 },
{ md5 = "2686dbc7f261f10d54553c4c5f93a3d5", addr = 0xFC000, size = 8192 },
]
[[romset]]
alias = "ibmbasic_v11_32k"
desc = "IBM Cassette Basic C1.10"
priority = 2
provides = ["ibm_basic"]
oem = true
rom = [
{ md5 = "2ad31da203a49b504fad3a34af0c719f", addr = 0xF6000, size = 32768, chip = "c" },
{ md5 = "eb28f0e8d3f641f2b58a3677b3b998cc", addr = 0xF6000, size = 32768, chip = "c" },
]
[[romset]]
alias = "ibmbasic_v11_8k"
desc = "IBM Cassette Basic C1.10"
priority = 1
provides = ["ibm_basic"]
oem = true
rom = [
{ md5 = "69e2bd1d08c893cbf841607c8749d5bd", addr = 0xF6000, size = 8192 },
{ md5 = "5f85ff5ea352c1ec11b084043fbb549e", addr = 0xF8000, size = 8192 },
{ md5 = "04a285d5dc8d86c60679e8f3c779dcc4", addr = 0xFA000, size = 8192 },
{ md5 = "b086a6980fc5736098269e62b59726ef", addr = 0xFC000, size = 8192 },
]

View File

@ -0,0 +1,257 @@
# romdef_ibm.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.
# ----------------------------------------------------------------------------
# System BIOS for IBM PCJr
# There was only one revision of the BIOS for IBM PCJr, not counting 3rd party
# BIOS replacement cartridges.
# ----------------------------------------------------------------------------
[[romset]]
alias = "ibm_pcjr"
desc = "IBM 4860 PCJr"
priority = 0
provides = ["bios", "ibm_pcjr", "ibm_basic"]
oem_for = ["ibm_pcjr"]
rom = [
{ md5 = "e698e58445afa5add5ba92d7f9761c04", addr = 0xF0000, size = 0x8000, chip = "XX1" },
{ md5 = "1c7fa6e55d24487b5e4eb02d3c733ec8", addr = 0xF8000, size = 0x8000, chip = "ZM63" },
]
checkpoint = [
{ addr = 0xF09BC, lvl = 0, desc = "Error Message" },
{ addr = 0xF006D, lvl = 3, desc = "8088 Processor Test" },
{ addr = 0xF00CA, lvl = 3, desc = "8255 Initialization Test" },
{ addr = 0xF00E8, lvl = 1, desc = "8255 Register Failure" },
{ addr = 0xF0103, lvl = 3, desc = "Video Gate Array Setup" },
{ addr = 0xF0134, lvl = 3, desc = "ROS Checksum Test" },
{ addr = 0xF015F, lvl = 3, desc = "Base 2K R/W Storage Test" },
{ addr = 0xF01E8, lvl = 3, desc = "Interrupt Setup" },
{ addr = 0xF0260, lvl = 3, desc = "8259 PIC Checkout" },
{ addr = 0xF02A0, lvl = 3, desc = "8253 Timer Checkout" },
{ addr = 0xF0362, lvl = 0, desc = "Timer Error" },
{ addr = 0xF03B7, lvl = 3, desc = "CRT Attachment Test" },
{ addr = 0xF044C, lvl = 3, desc = "VSYNC Interrupt Test" },
{ addr = 0xF044C, lvl = 3, desc = "Video Mux Status Test" },
{ addr = 0xF0503, lvl = 3, desc = "Memory Size Test" },
{ addr = 0xF0603, lvl = 0, desc = "Memory Test Error" },
{ addr = 0xF0E40, lvl = 3, desc = "Keyboard Test" },
{ addr = 0xF0703, lvl = 3, desc = "Cassette Interface Test" },
{ addr = 0xF0785, lvl = 3, desc = "Serial Diagnostics" },
{ addr = 0xF07AD, lvl = 3, desc = "Hardware Interrupt Setup" },
{ addr = 0xF07E0, lvl = 3, desc = "Expansion ROM Scan" },
{ addr = 0xF0806, lvl = 3, desc = "Diskette Attachment Test" },
{ addr = 0xF08E0, lvl = 3, desc = "Printer and Serial Check" },
{ addr = 0xF1004, lvl = 1, desc = "Keyboard Read Error" },
{ addr = 0xF0854, lvl = 3, desc = "Disk Bootstrap" },
]
# ----------------------------------------------------------------------------
# Cartridge ROMs
# Cartridges in raw, headerless format can be loaded here, somewhere in the
# PCJr's cartridge ROM window from 0xD0000-0xEFFFF. Multiple carts can be
# loaded, but you'll need to adjust the ROM addresses.
#
# Typically, you will want to load cartridge rips (*.JRC files) using
# MartyPC's built in file browser. This allows dual loading of carts, as well
# as hot swapping. Carts loaded via ROM definition are static and cannot be
# removed.
#
# The functionality here is intended for testing.
# ----------------------------------------------------------------------------
[[romset]]
alias = "pcjr_basic"
desc = "Microsoft Cartridge Basic"
priority = 0
provides = ["pcjr_cartridge"]
rom = [
{ md5 = "f928ac5db13d1663c0b29d2e94697ca7", addr = 0xD0000, size = 0x8000, chip = "cart1" },
]
[[romset]]
alias = "pcjr_crossfire"
desc = "Crossfire"
priority = 0
provides = ["pcjr_cartridge"]
rom = [
{ md5 = "8cc51ba8346841148492c7d719322673", addr = 0xE0000, size = 0x4000, chip = "cart1" },
]
[[romset]]
alias = "pcjr_riverraid"
desc = "River Raid, Activision 1982"
priority = 0
provides = ["pcjr_cartridge"]
rom = [
{ md5 = "c605b7d220a6f3f8c99951fc5145e538", addr = 0xE0000, size = 0x4000, chip = "cart1" },
]
[[romset]]
alias = "pcjr_pitfall2"
desc = "Pitfall II"
priority = 0
provides = ["pcjr_cartridge"]
rom = [
{ md5 = "5cc9cb02bd3fe987a82cbd63b94dd1a7", addr = 0xE0000, size = 0x4000, chip = "cart1" },
]
[[romset]]
alias = "pcjr_mouser"
desc = "Mouser"
priority = 0
provides = ["pcjr_cartridge"]
rom = [
{ md5 = "54e1d6d8c3f24996a2620a2cfac3ff9e", addr = 0xD0000, size = 0x2000, chip = "cart1" },
]
[[romset]]
alias = "pcjr_mineshaft"
desc = "Mineshaft, Sierra On-Line, 1983"
priority = 0
provides = ["pcjr_cartridge"]
rom = [
{ md5 = "490e72bdb338feca64c42c5c17a31fdd", addr = 0xE6000, size = 0x2000, chip = "cart1" },
]
[[romset]]
alias = "pcjr_scubaventure"
desc = "ScubaVenture"
priority = 0
provides = ["pcjr_cartridge"]
rom = [
{ md5 = "dee669072031f7fc1c319c7357ec3dcf", addr = 0xE6000, size = 0x2000, chip = "cart1" },
]
[[romset]]
alias = "pcjr_demonsattack"
desc = "Demon Attack"
priority = 0
provides = ["pcjr_cartridge"]
rom = [
{ md5 = "6d4f8c3a149ba5d5b160dc81ef4a46c2", addr = 0xE0000, size = 0x10000, chip = "cart1" },
]

View File

@ -0,0 +1,15 @@
# romdef_megabios.toml
# ROM definition file for MartyPC.
# ----------------------------------------------------------------------------
# ROM definitions for MEGABIOS
# ----------------------------------------------------------------------------
[[romset]]
alias = "megabios_v1"
desc = "DTC MegaBIOS Reassembly"
priority = 5
provides = ["bios", "ibm5160", "expansion"]
oem_for = ["megabios_pc"]
rom = [
{ filename = "MEGABIOS.ROM", addr = 0xFE000, size = 8192, chip = "megabios" }
]

View File

@ -0,0 +1,39 @@
# romdef_tandy.toml
# ROM definition file for MartyPC.
# ----------------------------------------------------------------------------
# ROM definitions for Tandy 1000
# ----------------------------------------------------------------------------
[[romset]]
alias = "tandy1000_v1"
desc = "Tandy 1000 v1"
priority = 5
provides = ["bios", "tandy1000", "expansion"]
oem_for = ["tandy1000"]
rom = [
{ md5 = "ebf7922d471c3eae9d3d1b22c92445e5", addr = 0xF0000, size = 0x10000, chip = "1" },
]
checkpoint = [
{ addr = 0xFC476, lvl = 0, desc = "Setup TGA Parameters" },
{ addr = 0xFC4C7, lvl = 0, desc = "TGA Palette Setup" },
]
[[romset]]
alias = "tandy1000_v2"
desc = "Tandy 1000 v2"
priority = 1
provides = ["bios", "tandy1000", "expansion"]
oem_for = ["tandy1000"]
rom = [
{ md5 = "7844c637dc246ec5f0e760ea33475073", addr = 0xF0000, size = 0x10000, chip = "1" },
]
[[romset]]
alias = "tandy1000_v3"
desc = "Tandy 1000 v3"
priority = 2
provides = ["bios", "tandy1000", "expansion"]
oem_for = ["tandy1000"]
rom = [
{ md5 = "1c25e4d439be8e8488467d466a28091f", addr = 0xF0000, size = 0x10000, chip = "1" },
]

45
output.txt Normal file
View File

@ -0,0 +1,45 @@
Resolved resource path: "/opt/martypc/media/cassettes"
Resolved resource path: "/opt/martypc/media/cartridges"
Resolved resource path: "/opt/martypc/media/hdds"
Resolved resource path: "/opt/martypc/media/roms"
Resolved resource path: "/opt/martypc/media/floppies"
Resolved resource path: "/opt/martypc/configs/keyboard_layouts"
Resolved resource path: "/opt/martypc/output/dumps"
Resolved resource path: "/opt/martypc/output/traces"
Resolved resource path: "/opt/martypc/configs/machines"
Resolved resource path: "/opt/martypc/output/screenshots"
Reading machine configuration file: "/opt/martypc/configs/machines/ibm_pcjr.toml"
Reading machine configuration file: "/opt/martypc/configs/machines/compaq_portable.toml"
Reading machine configuration file: "/opt/martypc/configs/machines/ibm5150.toml"
Reading machine configuration file: "/opt/martypc/configs/machines/config_overlays.toml"
Reading machine configuration file: "/opt/martypc/configs/machines/ibm5160.toml"
Reading machine configuration file: "/opt/martypc/configs/machines/generic_xt.toml"
Reading machine configuration file: "/opt/martypc/configs/machines/tandy1000.toml"
Found 18 Machine Configurations:
compaq_portable
generic_award_xt_hdd
generic_skiselev_xt
generic_xt
generic_xt_base
generic_xt_hdd
generic_xt_hdd_ega
ibm5150_16k
ibm5150_256k
ibm5150_256k_hdd
ibm5150_64k
ibm5150_64k_hdd
ibm5160
ibm5160_diags
ibm5160_hdd
ibm5160_hdd_ega
ibm_pcjr
tandy1000
ROM scan found 25 unique ROMs.
Selected machine config ibm5160 requires the following ROM features:
ibm5160
Selected machine config ibm5160 optionally requests the following ROM features:
ibm_basic
Selected machine config ibm5160 has resolved the following ROM sets:
ibm5160_82_v1
ibmbasic_v11_32k
Error loading ROM set: ROM eb28f0e8d3f641f2b58a3677b3b998cc overlaps with existing ROM in manifest.

View File

@ -0,0 +1 @@
Time(s),addr,clk,ready,qs,s,clk0,intr,dr0,holda,vs,hs,den,brd

368
romscan.txt Normal file
View File

@ -0,0 +1,368 @@
Resolved resource path: "/opt/martypc/configs/keyboard_layouts"
Resolved resource path: "/opt/martypc/configs/machines"
Resolved resource path: "/opt/martypc/media/hdds"
Resolved resource path: "/opt/martypc/media/cassettes"
Resolved resource path: "/opt/martypc/media/roms"
Resolved resource path: "/opt/martypc/media/cartridges"
Resolved resource path: "/opt/martypc/output/dumps"
Resolved resource path: "/opt/martypc/output/screenshots"
Resolved resource path: "/opt/martypc/media/floppies"
Resolved resource path: "/opt/martypc/output/traces"
Reading machine configuration file: "/opt/martypc/configs/machines/ibm_pcjr.toml"
Reading machine configuration file: "/opt/martypc/configs/machines/compaq_portable.toml"
Reading machine configuration file: "/opt/martypc/configs/machines/ibm5150.toml"
Reading machine configuration file: "/opt/martypc/configs/machines/config_overlays.toml"
Reading machine configuration file: "/opt/martypc/configs/machines/ibm5160.toml"
Reading machine configuration file: "/opt/martypc/configs/machines/generic_xt.toml"
Reading machine configuration file: "/opt/martypc/configs/machines/tandy1000.toml"
Found 18 Machine Configurations:
compaq_portable
generic_award_xt_hdd
generic_skiselev_xt
generic_xt
generic_xt_base
generic_xt_hdd
generic_xt_hdd_ega
ibm5150_16k
ibm5150_256k
ibm5150_256k_hdd
ibm5150_64k
ibm5150_64k_hdd
ibm5160
ibm5160_diags
ibm5160_hdd
ibm5160_hdd_ega
ibm_pcjr
tandy1000
Machine: compaq_portable
Requires: Ok((["ibm5160", "expansion", "ibm_xebec"], ["ibm_basic"]))
Machine: generic_award_xt_hdd
Requires: Ok((["ibm5160", "expansion", "ibm_xebec"], ["ibm_basic"]))
Machine: generic_skiselev_xt
Requires: Ok((["ibm5160"], ["ibm_basic"]))
Machine: generic_xt
Requires: Ok((["ibm5160"], ["ibm_basic"]))
Machine: generic_xt_base
Requires: Ok((["ibm5160"], ["ibm_basic"]))
Machine: generic_xt_hdd
Requires: Ok((["ibm5160", "expansion", "ibm_xebec"], ["ibm_basic"]))
Machine: generic_xt_hdd_ega
Requires: Ok((["ibm5160", "expansion", "ibm_xebec", "ibm_ega"], ["ibm_basic"]))
Machine: ibm5150_16k
Requires: Ok((["ibm5150v64k"], ["ibm_basic"]))
Machine: ibm5150_256k
Requires: Ok((["ibm5150v256k"], ["ibm_basic"]))
Machine: ibm5150_256k_hdd
Requires: Ok((["ibm5150v256k", "expansion", "ibm_xebec"], ["ibm_basic"]))
Machine: ibm5150_64k
Requires: Ok((["ibm5150v64k"], ["ibm_basic"]))
Machine: ibm5150_64k_hdd
Requires: Ok((["ibm5150v64k", "expansion", "ibm_xebec"], ["ibm_basic"]))
Machine: ibm5160
Requires: Ok((["ibm5160"], ["ibm_basic"]))
Machine: ibm5160_diags
Requires: Ok((["ibm5160"], ["ibm_basic"]))
Machine: ibm5160_hdd
Requires: Ok((["ibm5160", "expansion", "ibm_xebec"], ["ibm_basic"]))
Machine: ibm5160_hdd_ega
Requires: Ok((["ibm5160", "expansion", "ibm_xebec", "ibm_ega"], ["ibm_basic"]))
Machine: ibm_pcjr
Requires: Ok((["ibm_pcjr"], ["pcjr_cartridge"]))
Machine: tandy1000
Requires: Ok((["tandy1000", "expansion", "ibm_xebec"], []))
ROM scan found 25 unique ROMs.
Have 25 ROM candidates:
Filename: GLABIOS_0.2.6_8T.ROM
Path: /opt/martypc/media/roms/GLaBIOS/GLABIOS_0.2.6_8T.ROM
MD5: cb1cc6e9b163d0a00c9a5c9d70d67eea
Size: 8192
Filename: GLABIOS_0.2.5_8TC_PEN.ROM
Path: /opt/martypc/media/roms/GLaBIOS/GLABIOS_0.2.5_8TC_PEN.ROM
MD5: aa1c5b75c37f17f7cfd4f0cc74131843
Size: 8192
Filename: romdef_tandy.toml
Path: /opt/martypc/media/roms/romdef_tandy.toml
MD5: 9d130b61840f1736898bea1c094dd5e2
Size: 1122
Filename: romdef_compaq.toml
Path: /opt/martypc/media/roms/romdef_compaq.toml
MD5: 412cbd0820d07c483211569e07d79e77
Size: 748
Filename: GLABIOS_0.2.6_8TC.ROM
Path: /opt/martypc/media/roms/GLaBIOS/GLABIOS_0.2.6_8TC.ROM
MD5: 94697def88326a30033a6c60809b9566
Size: 8192
Filename: ibm-xt-1986-05-09.rom
Path: /opt/martypc/media/roms/IBM/ibm-xt-1986-05-09.rom
MD5: 67c61798428dc44c0e1d33fd00351e5d
Size: 65536
Filename: readme.md
Path: /opt/martypc/media/roms/readme.md
MD5: 9cbdd6d274c0eae3f3c3c7bebff80224
Size: 1816
Filename: ibm-pc-1982-10-27.rom
Path: /opt/martypc/media/roms/IBM/ibm-pc-1982-10-27.rom
MD5: 0b2373ff8ce894ba638c05445262a503
Size: 8192
Filename: GLABIOS_0.2.6_8P.ROM
Path: /opt/martypc/media/roms/GLaBIOS/GLABIOS_0.2.6_8P.ROM
MD5: fea8f2d3a073d1ab4113d027ecbe57c3
Size: 8192
Filename: award-2.05.rom
Path: /opt/martypc/media/roms/AWARD/award-2.05.rom
MD5: 688da86aec830ac09fcd436f28cf9bca
Size: 8192
Filename: ibm-basic-1.10.rom
Path: /opt/martypc/media/roms/IBM/ibm-basic-1.10.rom
MD5: eb28f0e8d3f641f2b58a3677b3b998cc
Size: 32768
Filename: GLABIOS_0.2.6_8XC.ROM
Path: /opt/martypc/media/roms/GLaBIOS/GLABIOS_0.2.6_8XC.ROM
MD5: b92b0fbcc4d620018bb5247ab166618a
Size: 8192
Filename: GLABIOS_0.2.5_8PC.ROM
Path: /opt/martypc/media/roms/GLaBIOS/GLABIOS_0.2.5_8PC.ROM
MD5: d2fbadfecb1bd5509ddeaf40acf143ec
Size: 8192
Filename: romdef_glabios.toml
Path: /opt/martypc/media/roms/romdef_glabios.toml
MD5: 78fc06a4521998fe5c1d3c5b11e862a1
Size: 2446
Filename: ibm-vga.rom
Path: /opt/martypc/media/roms/IBM/ibm-vga.rom
MD5: 2c8a4e1db93d2cbe148b66122747e4f2
Size: 24576
Filename: romdef_ibm_pcjr.toml
Path: /opt/martypc/media/roms/romdef_ibm_pcjr.toml
MD5: 227f43c3c1fb85e088f2ba5b10674441
Size: 11047
Filename: GLABIOS_0.2.6_8PC.ROM
Path: /opt/martypc/media/roms/GLaBIOS/GLABIOS_0.2.6_8PC.ROM
MD5: 1d178837576b47014f3d0e827577f6b5
Size: 8192
Filename: GLABIOS_0.2.5_8XC.ROM
Path: /opt/martypc/media/roms/GLaBIOS/GLABIOS_0.2.5_8XC.ROM
MD5: f36c2dd29344eff6f55135f8b3014b81
Size: 8192
Filename: romdef_megabios.toml
Path: /opt/martypc/media/roms/romdef_megabios.toml
MD5: 312eb921a1f059bbb63c92dc1983cd6f
Size: 489
Filename: BIOS_5160_08NOV82_U18_1501512.BIN
Path: /opt/martypc/media/roms/PCEM/BIOS_5160_08NOV82_U18_1501512.BIN
MD5: 1a2ac1ae0fe0f7783197e78da8b3126c
Size: 32768
Filename: romdef.toml
Path: /opt/martypc/media/roms/romdef.toml
MD5: 3acdc0dafed81e78baa29e26fcebc64c
Size: 7911
Filename: romdef_ibm.toml
Path: /opt/martypc/media/roms/romdef_ibm.toml
MD5: 74a4e867fc1648985b9da9c87658890c
Size: 17970
Filename: BIOS_5160_08NOV82_U19_5000027.BIN
Path: /opt/martypc/media/roms/PCEM/BIOS_5160_08NOV82_U19_5000027.BIN
MD5: 69e2bd1d08c893cbf841607c8749d5bd
Size: 8192
Filename: GLABIOS_0.2.6_8X.ROM
Path: /opt/martypc/media/roms/GLaBIOS/GLABIOS_0.2.6_8X.ROM
MD5: 3c4118ef67355ee9f7b81ddbf6341eab
Size: 8192
Filename: ibm-pc-1981-10-19.rom
Path: /opt/martypc/media/roms/IBM/ibm-pc-1981-10-19.rom
MD5: 6a1ed4e3f500d785a01ff4d3e000d79c
Size: 8192
Have 41 ROM set definitions:
glabios_pc_0.2.5
rom 0: hash: d2fbadfecb1bd5509ddeaf40acf143ec file: GLABIOS_0.2.5_8PC.ROM
glabios_xt_0.2.5
rom 0: hash: f36c2dd29344eff6f55135f8b3014b81 file: GLABIOS_0.2.5_8XC.ROM
glabios_xt_0.2.5_lp
rom 0: hash: aa1c5b75c37f17f7cfd4f0cc74131843 file: GLABIOS_0.2.5_8TC_PEN.ROM
glabios_pc_0.2.6
rom 0: hash: fea8f2d3a073d1ab4113d027ecbe57c3 file: GLABIOS_0.2.6_8P.ROM
glabios_xt_0.2.6
rom 0: hash: 3c4118ef67355ee9f7b81ddbf6341eab file: GLABIOS_0.2.6_8X.ROM
glabios_pc
rom 0: hash: 1d178837576b47014f3d0e827577f6b5 file: GLABIOS_0.2.6_8PC.ROM
glabios_xt
rom 0: hash: b92b0fbcc4d620018bb5247ab166618a file: GLABIOS_0.2.6_8XC.ROM
glabios_xt_turbo
rom 0: hash: 94697def88326a30033a6c60809b9566 file: GLABIOS_0.2.6_8TC.ROM
tandy1000_v1
tandy1000_v2
tandy1000_v3
ibm_pcjr
pcjr_basic
pcjr_crossfire
pcjr_riverraid
pcjr_pitfall2
pcjr_mouser
pcjr_mineshaft
pcjr_scubaventure
pcjr_demonsattack
supersoft_diags
award_xt_4000
award_xt_2.05
rom 0: hash: 688da86aec830ac09fcd436f28cf9bca file: Award_XT_2.05_2764.bin
skiselev_xt_1.00
rom 0: hash: file: bios-xt.bin
compaq_portable_revb
compaq_portable_revf
ibm5150_81_v1
ibm5150_81_v2
rom 0: hash: 6a1ed4e3f500d785a01ff4d3e000d79c file:
ibm5150_82_v3
ibm5160_82_v1_wbasic
rom 0: hash: 1a2ac1ae0fe0f7783197e78da8b3126c file:
ibm5160_82_v1
rom 0: hash: 69e2bd1d08c893cbf841607c8749d5bd file:
rom 1: hash: 1a2ac1ae0fe0f7783197e78da8b3126c file:
ibm5160_86_v1_wbasic
ibm5160_86_v2_wbasic
ibm_xebec
ibm_ega
ibm_vga
rom 0: hash: 2c8a4e1db93d2cbe148b66122747e4f2 file:
ibmbasic_v1_32k
ibmbasic_v1_8k
ibmbasic_v11_32k
rom 0: hash: eb28f0e8d3f641f2b58a3677b3b998cc file:
ibmbasic_v11_8k
rom 0: hash: 69e2bd1d08c893cbf841607c8749d5bd file:
megabios_v1
rom 0: hash: file: MEGABIOS.ROM
Have 15 complete ROM sets:
glabios_xt_0.2.5
glabios_xt_0.2.5_lp
glabios_xt_turbo
glabios_xt
glabios_pc_0.2.6
ibm5150_81_v2
glabios_pc
ibm_vga
ibmbasic_v11_32k
glabios_pc_0.2.5
ibmbasic_v11_8k
ibm5160_82_v1
award_xt_2.05
glabios_xt_0.2.6
ibm5160_82_v1_wbasic
Complete sets support the following features:
pcjr_cartridge
pcjr_basic (12:0), priority: 0
pcjr_crossfire (13:1), priority: 0
pcjr_riverraid (14:2), priority: 0
pcjr_pitfall2 (15:3), priority: 0
pcjr_mouser (16:4), priority: 0
pcjr_mineshaft (17:5), priority: 0
pcjr_scubaventure (18:6), priority: 0
pcjr_demonsattack (19:7), priority: 0
bios
ibm5160_86_v2_wbasic (32:0), priority: 4
ibm5150_82_v3 (28:1), priority: 3
ibm5150_81_v2 (27:2), priority: 2
ibm5160_82_v1 (30:3), priority: 2
ibm5150_81_v1 (26:4), priority: 1
ibm5160_82_v1_wbasic (29:5), priority: 1
glabios_xt_turbo (7:6), priority: 15
tandy1000_v1 (8:7), priority: 5
megabios_v1 (40:8), priority: 5
glabios_pc (5:9), priority: 4
glabios_xt (6:10), priority: 4
ibm5160_86_v1_wbasic (31:11), priority: 3
tandy1000_v3 (10:12), priority: 2
glabios_pc_0.2.6 (3:13), priority: 1
glabios_xt_0.2.6 (4:14), priority: 1
tandy1000_v2 (9:15), priority: 1
award_xt_4000 (21:16), priority: 1
award_xt_2.05 (22:17), priority: 1
skiselev_xt_1.00 (23:18), priority: 1
glabios_pc_0.2.5 (0:19), priority: 0
glabios_xt_0.2.5 (1:20), priority: 0
glabios_xt_0.2.5_lp (2:21), priority: 0
ibm_pcjr (11:22), priority: 0
supersoft_diags (20:23), priority: 0
compaq_portable_revb (24:24), priority: 0
compaq_portable_revf (25:25), priority: 0
expansion
ibm5160_86_v2_wbasic (32:0), priority: 4
ibm5150_82_v3 (28:1), priority: 3
ibm5160_82_v1 (30:2), priority: 2
ibm5160_82_v1_wbasic (29:3), priority: 1
glabios_xt_turbo (7:4), priority: 15
tandy1000_v1 (8:5), priority: 5
megabios_v1 (40:6), priority: 5
glabios_pc (5:7), priority: 4
glabios_xt (6:8), priority: 4
ibm5160_86_v1_wbasic (31:9), priority: 3
tandy1000_v3 (10:10), priority: 2
glabios_pc_0.2.6 (3:11), priority: 1
glabios_xt_0.2.6 (4:12), priority: 1
tandy1000_v2 (9:13), priority: 1
award_xt_4000 (21:14), priority: 1
award_xt_2.05 (22:15), priority: 1
skiselev_xt_1.00 (23:16), priority: 1
glabios_pc_0.2.5 (0:17), priority: 0
glabios_xt_0.2.5 (1:18), priority: 0
glabios_xt_0.2.5_lp (2:19), priority: 0
compaq_portable_revf (25:20), priority: 0
ibm5160
ibm5160_86_v2_wbasic (32:0), priority: 4
ibm5160_82_v1 (30:1), priority: 2
ibm5160_82_v1_wbasic (29:2), priority: 1
compaq_portable_revb (24:3), priority: 0
compaq_portable_revf (25:4), priority: 0
glabios_xt_turbo (7:5), priority: 15
megabios_v1 (40:6), priority: 5
glabios_xt (6:7), priority: 4
ibm5160_86_v1_wbasic (31:8), priority: 3
glabios_xt_0.2.6 (4:9), priority: 1
award_xt_4000 (21:10), priority: 1
award_xt_2.05 (22:11), priority: 1
skiselev_xt_1.00 (23:12), priority: 1
glabios_xt_0.2.5 (1:13), priority: 0
glabios_xt_0.2.5_lp (2:14), priority: 0
supersoft_diags (20:15), priority: 0
glabios_xt
glabios_xt_0.2.6 (4:0), priority: 1
glabios_xt_0.2.5_lp (2:1), priority: 0
glabios_pc_0.2.6 (3:2), priority: 1
tandy1000
tandy1000_v1 (8:0), priority: 5
tandy1000_v3 (10:1), priority: 2
tandy1000_v2 (9:2), priority: 1
ibm_xebec
ibm_xebec (33:0), priority: 1
ibm_ega
ibm_ega (34:0), priority: 1
ibm_basic
ibm5160_86_v2_wbasic (32:0), priority: 4
ibmbasic_v1_32k (36:1), priority: 2
ibmbasic_v11_32k (38:2), priority: 2
ibm5160_82_v1_wbasic (29:3), priority: 1
ibmbasic_v1_8k (37:4), priority: 1
ibmbasic_v11_8k (39:5), priority: 1
ibm5160_86_v1_wbasic (31:6), priority: 3
skiselev_xt_1.00 (23:7), priority: 1
ibm_pcjr (11:8), priority: 0
ibm_pcjr
ibm_pcjr (11:0), priority: 0
ibm5150v256k
ibm5150_82_v3 (28:0), priority: 3
glabios_pc (5:1), priority: 4
glabios_pc_0.2.6 (3:2), priority: 1
glabios_pc_0.2.5 (0:3), priority: 0
supersoft_diags (20:4), priority: 0
ibm5150v64k
ibm5150_82_v3 (28:0), priority: 3
ibm5150_81_v2 (27:1), priority: 2
ibm5150_81_v1 (26:2), priority: 1
glabios_pc (5:3), priority: 4
glabios_pc_0.2.6 (3:4), priority: 1
glabios_pc_0.2.5 (0:5), priority: 0
supersoft_diags (20:6), priority: 0
diag
supersoft_diags (20:0), priority: 0
ibm_vga
ibm_vga (35:0), priority: 1