commit 934dc6d4df0fa22a00922d0e6ace68e23d730804 Author: Greg Gauthier Date: Wed Jan 22 19:17:40 2025 +0000 initial commit diff --git a/archive/ibm-basic-1.10.rom b/archive/ibm-basic-1.10.rom new file mode 100644 index 0000000..897e689 Binary files /dev/null and b/archive/ibm-basic-1.10.rom differ diff --git a/configs/keyboard_layouts/keyboard_IT.toml b/configs/keyboard_layouts/keyboard_IT.toml new file mode 100644 index 0000000..a4f2380 --- /dev/null +++ b/configs/keyboard_layouts/keyboard_IT.toml @@ -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=[]}, +] \ No newline at end of file diff --git a/configs/keyboard_layouts/keyboard_UK.toml b/configs/keyboard_layouts/keyboard_UK.toml new file mode 100644 index 0000000..f971225 --- /dev/null +++ b/configs/keyboard_layouts/keyboard_UK.toml @@ -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 = [] }, +] \ No newline at end of file diff --git a/configs/keyboard_layouts/keyboard_US.toml b/configs/keyboard_layouts/keyboard_US.toml new file mode 100644 index 0000000..470f204 --- /dev/null +++ b/configs/keyboard_layouts/keyboard_US.toml @@ -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 = [] \ No newline at end of file diff --git a/configs/machines/compaq_portable.toml b/configs/machines/compaq_portable.toml new file mode 100644 index 0000000..f6f793b --- /dev/null +++ b/configs/machines/compaq_portable.toml @@ -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" + \ No newline at end of file diff --git a/configs/machines/config_overlays.toml b/configs/machines/config_overlays.toml new file mode 100644 index 0000000..aab7d00 --- /dev/null +++ b/configs/machines/config_overlays.toml @@ -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 + + diff --git a/configs/machines/generic_xt.toml b/configs/machines/generic_xt.toml new file mode 100644 index 0000000..6a4fc0a --- /dev/null +++ b/configs/machines/generic_xt.toml @@ -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" \ No newline at end of file diff --git a/configs/machines/ibm5150.toml b/configs/machines/ibm5150.toml new file mode 100644 index 0000000..28244dc --- /dev/null +++ b/configs/machines/ibm5150.toml @@ -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" + + diff --git a/configs/machines/ibm5160.toml b/configs/machines/ibm5160.toml new file mode 100644 index 0000000..2cea5af --- /dev/null +++ b/configs/machines/ibm5160.toml @@ -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" + + + diff --git a/configs/machines/ibm_pcjr.toml b/configs/machines/ibm_pcjr.toml new file mode 100644 index 0000000..4cea42f --- /dev/null +++ b/configs/machines/ibm_pcjr.toml @@ -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 + \ No newline at end of file diff --git a/configs/machines/readme.md b/configs/machines/readme.md new file mode 100644 index 0000000..248a65e --- /dev/null +++ b/configs/machines/readme.md @@ -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" +``` \ No newline at end of file diff --git a/configs/machines/tandy1000.toml b/configs/machines/tandy1000.toml new file mode 100644 index 0000000..2fff511 --- /dev/null +++ b/configs/machines/tandy1000.toml @@ -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" + \ No newline at end of file diff --git a/martypc b/martypc new file mode 100755 index 0000000..d1a0049 Binary files /dev/null and b/martypc differ diff --git a/martypc.toml b/martypc.toml new file mode 100644 index 0000000..4d4447d --- /dev/null +++ b/martypc.toml @@ -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 diff --git a/media/floppies/DATA/basic1.img b/media/floppies/DATA/basic1.img new file mode 100644 index 0000000..e7130be Binary files /dev/null and b/media/floppies/DATA/basic1.img differ diff --git a/media/floppies/DATA/pcdisk1.img b/media/floppies/DATA/pcdisk1.img new file mode 100644 index 0000000..5b63a63 Binary files /dev/null and b/media/floppies/DATA/pcdisk1.img differ diff --git a/media/floppies/MSDOS330/Disk1.img b/media/floppies/MSDOS330/Disk1.img new file mode 100644 index 0000000..47fcc27 Binary files /dev/null and b/media/floppies/MSDOS330/Disk1.img differ diff --git a/media/floppies/MSDOS330/Disk2.img b/media/floppies/MSDOS330/Disk2.img new file mode 100644 index 0000000..831a249 Binary files /dev/null and b/media/floppies/MSDOS330/Disk2.img differ diff --git a/media/floppies/MSDOS330/winworldpc.com.txt b/media/floppies/MSDOS330/winworldpc.com.txt new file mode 100644 index 0000000..ca8117b --- /dev/null +++ b/media/floppies/MSDOS330/winworldpc.com.txt @@ -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 diff --git a/media/floppies/MSDOS331/Disk1.img b/media/floppies/MSDOS331/Disk1.img new file mode 100644 index 0000000..6325b72 Binary files /dev/null and b/media/floppies/MSDOS331/Disk1.img differ diff --git a/media/floppies/MSDOS331/winworldpc.com.txt b/media/floppies/MSDOS331/winworldpc.com.txt new file mode 100644 index 0000000..ca8117b --- /dev/null +++ b/media/floppies/MSDOS331/winworldpc.com.txt @@ -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 diff --git a/media/floppies/MSDOS401/DOS Shell.img b/media/floppies/MSDOS401/DOS Shell.img new file mode 100644 index 0000000..b38eabb Binary files /dev/null and b/media/floppies/MSDOS401/DOS Shell.img differ diff --git a/media/floppies/MSDOS401/Operating.img b/media/floppies/MSDOS401/Operating.img new file mode 100644 index 0000000..f10e67a Binary files /dev/null and b/media/floppies/MSDOS401/Operating.img differ diff --git a/media/floppies/MSDOS401/Setup.img b/media/floppies/MSDOS401/Setup.img new file mode 100644 index 0000000..f414f55 Binary files /dev/null and b/media/floppies/MSDOS401/Setup.img differ diff --git a/media/floppies/MSDOS622+/Disk1.img b/media/floppies/MSDOS622+/Disk1.img new file mode 100644 index 0000000..c9274e6 Binary files /dev/null and b/media/floppies/MSDOS622+/Disk1.img differ diff --git a/media/floppies/MSDOS622+/Disk1.jpg b/media/floppies/MSDOS622+/Disk1.jpg new file mode 100644 index 0000000..e9882a5 Binary files /dev/null and b/media/floppies/MSDOS622+/Disk1.jpg differ diff --git a/media/floppies/MSDOS622+/Disk2.img b/media/floppies/MSDOS622+/Disk2.img new file mode 100644 index 0000000..da0b42d Binary files /dev/null and b/media/floppies/MSDOS622+/Disk2.img differ diff --git a/media/floppies/MSDOS622+/Disk2.jpg b/media/floppies/MSDOS622+/Disk2.jpg new file mode 100644 index 0000000..1118b59 Binary files /dev/null and b/media/floppies/MSDOS622+/Disk2.jpg differ diff --git a/media/floppies/MSDOS622+/Disk3.img b/media/floppies/MSDOS622+/Disk3.img new file mode 100644 index 0000000..c7906b7 Binary files /dev/null and b/media/floppies/MSDOS622+/Disk3.img differ diff --git a/media/floppies/MSDOS622+/Disk3.jpg b/media/floppies/MSDOS622+/Disk3.jpg new file mode 100644 index 0000000..3ad43a8 Binary files /dev/null and b/media/floppies/MSDOS622+/Disk3.jpg differ diff --git a/media/floppies/MSDOS622+/Microsoft MS-DOS 6.22 Plus Enhanced Tools (3.5).txt b/media/floppies/MSDOS622+/Microsoft MS-DOS 6.22 Plus Enhanced Tools (3.5).txt new file mode 100644 index 0000000..9d69575 --- /dev/null +++ b/media/floppies/MSDOS622+/Microsoft MS-DOS 6.22 Plus Enhanced Tools (3.5).txt @@ -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. \ No newline at end of file diff --git a/media/floppies/MSDOS622+/Suppdisk.img b/media/floppies/MSDOS622+/Suppdisk.img new file mode 100644 index 0000000..41bed39 Binary files /dev/null and b/media/floppies/MSDOS622+/Suppdisk.img differ diff --git a/media/floppies/MSDOS622+/winworldpc.com.txt b/media/floppies/MSDOS622+/winworldpc.com.txt new file mode 100644 index 0000000..7c55ff0 --- /dev/null +++ b/media/floppies/MSDOS622+/winworldpc.com.txt @@ -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 diff --git a/media/floppies/MSDOS622s/Suppdisk.img b/media/floppies/MSDOS622s/Suppdisk.img new file mode 100644 index 0000000..ea08ac5 Binary files /dev/null and b/media/floppies/MSDOS622s/Suppdisk.img differ diff --git a/media/floppies/MSDOS622s/winworldpc.com.txt b/media/floppies/MSDOS622s/winworldpc.com.txt new file mode 100644 index 0000000..7c55ff0 --- /dev/null +++ b/media/floppies/MSDOS622s/winworldpc.com.txt @@ -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 diff --git a/media/floppies/PCDOS401/Install.img b/media/floppies/PCDOS401/Install.img new file mode 100644 index 0000000..915c589 Binary files /dev/null and b/media/floppies/PCDOS401/Install.img differ diff --git a/media/floppies/PCDOS401/Operating.img b/media/floppies/PCDOS401/Operating.img new file mode 100644 index 0000000..32e2490 Binary files /dev/null and b/media/floppies/PCDOS401/Operating.img differ diff --git a/media/floppies/PCDOS502/Disk1.img b/media/floppies/PCDOS502/Disk1.img new file mode 100644 index 0000000..615482d Binary files /dev/null and b/media/floppies/PCDOS502/Disk1.img differ diff --git a/media/floppies/PCDOS502/Disk2.img b/media/floppies/PCDOS502/Disk2.img new file mode 100644 index 0000000..cfd50f4 Binary files /dev/null and b/media/floppies/PCDOS502/Disk2.img differ diff --git a/media/floppies/PCDOS502/Disk3.img b/media/floppies/PCDOS502/Disk3.img new file mode 100644 index 0000000..9f64f0c Binary files /dev/null and b/media/floppies/PCDOS502/Disk3.img differ diff --git a/media/floppies/PCDOS502/winworldpc.com.txt b/media/floppies/PCDOS502/winworldpc.com.txt new file mode 100644 index 0000000..ca8117b --- /dev/null +++ b/media/floppies/PCDOS502/winworldpc.com.txt @@ -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 diff --git a/media/floppies/PCDOS630/Disk1.img b/media/floppies/PCDOS630/Disk1.img new file mode 100644 index 0000000..e1c8b13 Binary files /dev/null and b/media/floppies/PCDOS630/Disk1.img differ diff --git a/media/floppies/PCDOS630/Disk2.img b/media/floppies/PCDOS630/Disk2.img new file mode 100644 index 0000000..10f052d Binary files /dev/null and b/media/floppies/PCDOS630/Disk2.img differ diff --git a/media/floppies/PCDOS630/Disk3.img b/media/floppies/PCDOS630/Disk3.img new file mode 100644 index 0000000..5a7f743 Binary files /dev/null and b/media/floppies/PCDOS630/Disk3.img differ diff --git a/media/floppies/PCDOS630/Disk4.img b/media/floppies/PCDOS630/Disk4.img new file mode 100644 index 0000000..ba8b8fa Binary files /dev/null and b/media/floppies/PCDOS630/Disk4.img differ diff --git a/media/floppies/PCDOS630/Disk5.img b/media/floppies/PCDOS630/Disk5.img new file mode 100644 index 0000000..a017b57 Binary files /dev/null and b/media/floppies/PCDOS630/Disk5.img differ diff --git a/media/floppies/PCDOS630/winworldpc.com.txt b/media/floppies/PCDOS630/winworldpc.com.txt new file mode 100644 index 0000000..ca8117b --- /dev/null +++ b/media/floppies/PCDOS630/winworldpc.com.txt @@ -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 diff --git a/media/floppies/PCDOS700_XDF/IBM PC-DOS 7.0.txt b/media/floppies/PCDOS700_XDF/IBM PC-DOS 7.0.txt new file mode 100644 index 0000000..3c401dc --- /dev/null +++ b/media/floppies/PCDOS700_XDF/IBM PC-DOS 7.0.txt @@ -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. diff --git a/media/floppies/PCDOS700_XDF/Images/144US1.DSK b/media/floppies/PCDOS700_XDF/Images/144US1.DSK new file mode 100644 index 0000000..75f2817 Binary files /dev/null and b/media/floppies/PCDOS700_XDF/Images/144US1.DSK differ diff --git a/media/floppies/PCDOS700_XDF/Images/144US2.XDF b/media/floppies/PCDOS700_XDF/Images/144US2.XDF new file mode 100644 index 0000000..984ab56 Binary files /dev/null and b/media/floppies/PCDOS700_XDF/Images/144US2.XDF differ diff --git a/media/floppies/PCDOS700_XDF/Images/144US3.XDF b/media/floppies/PCDOS700_XDF/Images/144US3.XDF new file mode 100644 index 0000000..15434d9 Binary files /dev/null and b/media/floppies/PCDOS700_XDF/Images/144US3.XDF differ diff --git a/media/floppies/PCDOS700_XDF/Images/144US4.XDF b/media/floppies/PCDOS700_XDF/Images/144US4.XDF new file mode 100644 index 0000000..2bf9319 Binary files /dev/null and b/media/floppies/PCDOS700_XDF/Images/144US4.XDF differ diff --git a/media/floppies/PCDOS700_XDF/Images/144US5.XDF b/media/floppies/PCDOS700_XDF/Images/144US5.XDF new file mode 100644 index 0000000..ac57c38 Binary files /dev/null and b/media/floppies/PCDOS700_XDF/Images/144US5.XDF differ diff --git a/media/floppies/PCDOS700_XDF/Images/LOADDSKF.EXE b/media/floppies/PCDOS700_XDF/Images/LOADDSKF.EXE new file mode 100644 index 0000000..d0e5b78 Binary files /dev/null and b/media/floppies/PCDOS700_XDF/Images/LOADDSKF.EXE differ diff --git a/media/floppies/PCDOS700_XDF/Images/MAKE.BAT b/media/floppies/PCDOS700_XDF/Images/MAKE.BAT new file mode 100644 index 0000000..9c584a7 --- /dev/null +++ b/media/floppies/PCDOS700_XDF/Images/MAKE.BAT @@ -0,0 +1,14 @@ +pause 'insert diskette driver a: and press ' +loaddskf.exe 144us1.dsk a: + +pause 'insert diskette driver a: and press ' +xdfcopy.exe 144us2.xdf a: /y /nv + +pause 'insert diskette driver a: and press ' +xdfcopy.exe 144us3.xdf a: /y /nv + +pause 'insert diskette driver a: and press ' +xdfcopy.exe 144us4.xdf a: /y /nv + +pause 'insert diskette driver a: and press ' +xdfcopy.exe 144us5.xdf a: /y /nv diff --git a/media/floppies/PCDOS700_XDF/Images/XDFCOPY.EXE b/media/floppies/PCDOS700_XDF/Images/XDFCOPY.EXE new file mode 100644 index 0000000..c1f059b Binary files /dev/null and b/media/floppies/PCDOS700_XDF/Images/XDFCOPY.EXE differ diff --git a/media/floppies/PCDOS700_XDF/winworldpc.com.txt b/media/floppies/PCDOS700_XDF/winworldpc.com.txt new file mode 100644 index 0000000..7c55ff0 --- /dev/null +++ b/media/floppies/PCDOS700_XDF/winworldpc.com.txt @@ -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 diff --git a/media/floppies/readme.md b/media/floppies/readme.md new file mode 100644 index 0000000..5768805 --- /dev/null +++ b/media/floppies/readme.md @@ -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. + diff --git a/media/hdds/DRIVE_C.vhd b/media/hdds/DRIVE_C.vhd new file mode 100644 index 0000000..2af9cbe Binary files /dev/null and b/media/hdds/DRIVE_C.vhd differ diff --git a/media/hdds/DRIVE_D.vhd b/media/hdds/DRIVE_D.vhd new file mode 100644 index 0000000..6d5e723 Binary files /dev/null and b/media/hdds/DRIVE_D.vhd differ diff --git a/media/hdds/readme.md b/media/hdds/readme.md new file mode 100644 index 0000000..80d9dd8 --- /dev/null +++ b/media/hdds/readme.md @@ -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. \ No newline at end of file diff --git a/media/roms/AWARD/award-2.05.rom b/media/roms/AWARD/award-2.05.rom new file mode 100644 index 0000000..90ade14 Binary files /dev/null and b/media/roms/AWARD/award-2.05.rom differ diff --git a/media/roms/GLaBIOS/GLABIOS_0.2.5_8PC.ROM b/media/roms/GLaBIOS/GLABIOS_0.2.5_8PC.ROM new file mode 100644 index 0000000..bc6fcd6 Binary files /dev/null and b/media/roms/GLaBIOS/GLABIOS_0.2.5_8PC.ROM differ diff --git a/media/roms/GLaBIOS/GLABIOS_0.2.5_8TC_PEN.ROM b/media/roms/GLaBIOS/GLABIOS_0.2.5_8TC_PEN.ROM new file mode 100644 index 0000000..dfb717d Binary files /dev/null and b/media/roms/GLaBIOS/GLABIOS_0.2.5_8TC_PEN.ROM differ diff --git a/media/roms/GLaBIOS/GLABIOS_0.2.5_8XC.ROM b/media/roms/GLaBIOS/GLABIOS_0.2.5_8XC.ROM new file mode 100644 index 0000000..a10dcab Binary files /dev/null and b/media/roms/GLaBIOS/GLABIOS_0.2.5_8XC.ROM differ diff --git a/media/roms/GLaBIOS/GLABIOS_0.2.6_8P.ROM b/media/roms/GLaBIOS/GLABIOS_0.2.6_8P.ROM new file mode 100644 index 0000000..b264ae5 Binary files /dev/null and b/media/roms/GLaBIOS/GLABIOS_0.2.6_8P.ROM differ diff --git a/media/roms/GLaBIOS/GLABIOS_0.2.6_8PC.ROM b/media/roms/GLaBIOS/GLABIOS_0.2.6_8PC.ROM new file mode 100644 index 0000000..1e57335 Binary files /dev/null and b/media/roms/GLaBIOS/GLABIOS_0.2.6_8PC.ROM differ diff --git a/media/roms/GLaBIOS/GLABIOS_0.2.6_8T.ROM b/media/roms/GLaBIOS/GLABIOS_0.2.6_8T.ROM new file mode 100644 index 0000000..7036e48 Binary files /dev/null and b/media/roms/GLaBIOS/GLABIOS_0.2.6_8T.ROM differ diff --git a/media/roms/GLaBIOS/GLABIOS_0.2.6_8TC.ROM b/media/roms/GLaBIOS/GLABIOS_0.2.6_8TC.ROM new file mode 100644 index 0000000..5e311d3 Binary files /dev/null and b/media/roms/GLaBIOS/GLABIOS_0.2.6_8TC.ROM differ diff --git a/media/roms/GLaBIOS/GLABIOS_0.2.6_8X.ROM b/media/roms/GLaBIOS/GLABIOS_0.2.6_8X.ROM new file mode 100644 index 0000000..9ed9488 Binary files /dev/null and b/media/roms/GLaBIOS/GLABIOS_0.2.6_8X.ROM differ diff --git a/media/roms/GLaBIOS/GLABIOS_0.2.6_8XC.ROM b/media/roms/GLaBIOS/GLABIOS_0.2.6_8XC.ROM new file mode 100644 index 0000000..95bfe09 Binary files /dev/null and b/media/roms/GLaBIOS/GLABIOS_0.2.6_8XC.ROM differ diff --git a/media/roms/IBM/ibm-pc-1981-10-19.rom b/media/roms/IBM/ibm-pc-1981-10-19.rom new file mode 100644 index 0000000..200ab24 Binary files /dev/null and b/media/roms/IBM/ibm-pc-1981-10-19.rom differ diff --git a/media/roms/IBM/ibm-pc-1982-10-27.rom b/media/roms/IBM/ibm-pc-1982-10-27.rom new file mode 100644 index 0000000..4179f3f Binary files /dev/null and b/media/roms/IBM/ibm-pc-1982-10-27.rom differ diff --git a/media/roms/IBM/ibm-vga.rom b/media/roms/IBM/ibm-vga.rom new file mode 100644 index 0000000..6cab24c Binary files /dev/null and b/media/roms/IBM/ibm-vga.rom differ diff --git a/media/roms/IBM/ibm-xt-1986-05-09.rom b/media/roms/IBM/ibm-xt-1986-05-09.rom new file mode 100644 index 0000000..25d8802 Binary files /dev/null and b/media/roms/IBM/ibm-xt-1986-05-09.rom differ diff --git a/media/roms/IBM/ibm_xebec_62x0822_1985.bin b/media/roms/IBM/ibm_xebec_62x0822_1985.bin new file mode 100644 index 0000000..4af5756 Binary files /dev/null and b/media/roms/IBM/ibm_xebec_62x0822_1985.bin differ diff --git a/media/roms/PCEM/BIOS_5160_08NOV82_U18_1501512.BIN b/media/roms/PCEM/BIOS_5160_08NOV82_U18_1501512.BIN new file mode 100644 index 0000000..8dea803 Binary files /dev/null and b/media/roms/PCEM/BIOS_5160_08NOV82_U18_1501512.BIN differ diff --git a/media/roms/PCEM/BIOS_5160_08NOV82_U19_5000027.BIN b/media/roms/PCEM/BIOS_5160_08NOV82_U19_5000027.BIN new file mode 100644 index 0000000..bd13379 Binary files /dev/null and b/media/roms/PCEM/BIOS_5160_08NOV82_U19_5000027.BIN differ diff --git a/media/roms/ibm-xt-1982-11-08.rom b/media/roms/ibm-xt-1982-11-08.rom new file mode 100644 index 0000000..f75320f Binary files /dev/null and b/media/roms/ibm-xt-1982-11-08.rom differ diff --git a/media/roms/ide_at.bin b/media/roms/ide_at.bin new file mode 100644 index 0000000..976503a Binary files /dev/null and b/media/roms/ide_at.bin differ diff --git a/media/roms/ide_xt.bin b/media/roms/ide_xt.bin new file mode 100644 index 0000000..bce7479 Binary files /dev/null and b/media/roms/ide_xt.bin differ diff --git a/media/roms/ide_xt_1_1_5.bin b/media/roms/ide_xt_1_1_5.bin new file mode 100644 index 0000000..fc9af5a Binary files /dev/null and b/media/roms/ide_xt_1_1_5.bin differ diff --git a/media/roms/pce-0.2.2-xt-pcdos-3.30.zip b/media/roms/pce-0.2.2-xt-pcdos-3.30.zip new file mode 100644 index 0000000..60d715e Binary files /dev/null and b/media/roms/pce-0.2.2-xt-pcdos-3.30.zip differ diff --git a/media/roms/readme.md b/media/roms/readme.md new file mode 100644 index 0000000..fda7936 --- /dev/null +++ b/media/roms/readme.md @@ -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. + + + + + diff --git a/media/roms/romdef.toml b/media/roms/romdef.toml new file mode 100644 index 0000000..d468775 --- /dev/null +++ b/media/roms/romdef.toml @@ -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 }, +] \ No newline at end of file diff --git a/media/roms/romdef_compaq.toml b/media/roms/romdef_compaq.toml new file mode 100644 index 0000000..b97ca20 --- /dev/null +++ b/media/roms/romdef_compaq.toml @@ -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" }, +] diff --git a/media/roms/romdef_glabios.toml b/media/roms/romdef_glabios.toml new file mode 100644 index 0000000..190cc5a --- /dev/null +++ b/media/roms/romdef_glabios.toml @@ -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" } +] diff --git a/media/roms/romdef_ibm.toml b/media/roms/romdef_ibm.toml new file mode 100644 index 0000000..e790ecf --- /dev/null +++ b/media/roms/romdef_ibm.toml @@ -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 }, +] \ No newline at end of file diff --git a/media/roms/romdef_ibm_pcjr.toml b/media/roms/romdef_ibm_pcjr.toml new file mode 100644 index 0000000..b69f444 --- /dev/null +++ b/media/roms/romdef_ibm_pcjr.toml @@ -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" }, +] \ No newline at end of file diff --git a/media/roms/romdef_megabios.toml b/media/roms/romdef_megabios.toml new file mode 100644 index 0000000..7089ad1 --- /dev/null +++ b/media/roms/romdef_megabios.toml @@ -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" } +] diff --git a/media/roms/romdef_tandy.toml b/media/roms/romdef_tandy.toml new file mode 100644 index 0000000..14e61ed --- /dev/null +++ b/media/roms/romdef_tandy.toml @@ -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" }, +] \ No newline at end of file diff --git a/output.txt b/output.txt new file mode 100644 index 0000000..050a732 --- /dev/null +++ b/output.txt @@ -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. diff --git a/output/traces/cycle_trace.log b/output/traces/cycle_trace.log new file mode 100644 index 0000000..fc1721a --- /dev/null +++ b/output/traces/cycle_trace.log @@ -0,0 +1 @@ +Time(s),addr,clk,ready,qs,s,clk0,intr,dr0,holda,vs,hs,den,brd diff --git a/romscan.txt b/romscan.txt new file mode 100644 index 0000000..d7363a4 --- /dev/null +++ b/romscan.txt @@ -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