From 5c3c7f0af703574dce5429c2e2f51125a2928058 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 20 Mar 2022 21:35:03 -0300 Subject: [PATCH] Sweeping formatting changes --- _static/css/86box.css | 103 ++++++++++++++++++++-------------- dev/api/device.rst | 88 ++++++++++++++--------------- dev/api/dma.rst | 20 +++---- dev/api/io.rst | 34 +++++------ dev/api/pci.rst | 106 +++++++++++++++++++---------------- dev/api/thread.rst | 32 +++++------ dev/api/timer.rst | 30 +++++----- hardware/diskimages.rst | 2 +- hardware/isabugger.rst | 34 +++++------ hardware/machinespecific.rst | 2 +- settings/display.rst | 2 +- settings/floppycdrom.rst | 2 +- settings/hdd.rst | 2 +- settings/input.rst | 2 +- settings/machine.rst | 2 +- settings/network.rst | 2 +- settings/peripherals.rst | 34 ++++++++--- settings/ports.rst | 2 +- settings/removable.rst | 2 +- settings/sound.rst | 2 +- settings/storage.rst | 2 +- 21 files changed, 279 insertions(+), 226 deletions(-) diff --git a/_static/css/86box.css b/_static/css/86box.css index 3f01c5e..46ad8c2 100644 --- a/_static/css/86box.css +++ b/_static/css/86box.css @@ -1,13 +1,11 @@ /* Give some spacing to icons in headings. */ -h1 > img { - padding-right: 5px; -} +h1 > img, h2 > img { padding-right: 5px; } /* Remove bottom spacing from lists in tables and admonitions. */ -table.docutils > tbody > tr > td > ul, table.docutils > tbody > tr > td > ol { +table.docutils ul, table.docutils ol { margin-bottom: 0 !important; } div.admonition > p:nth-child(2) { @@ -19,78 +17,96 @@ div.admonition > p:nth-child(2) { white-space: normal; } -/* Make API documentation table titles normal-monospace, and give them less spacing. */ -.rst-content table.docutils caption { +/* Tweak API documentation table titles. */ +.rst-content table.docutils caption, +.rst-content table.docutils caption span { padding-top: 0; - font-family: monospace; font-style: normal; } - -/* Fix font size for lists in table cells. */ -table.docutils > tbody > tr > td > ul > li > p, table.docutils > tbody > tr > td > ol > li > p { +.rst-content table.docutils caption code { font-size: inherit; + font-style: normal; + border: none; + background: none; + padding: 0; } -/* Tweak top and bottom spacing for tables in table cells. */ -table.docutils > tbody > tr > td > div.wy-table-responsive { +/* Fix font size for some elements in table cells. */ +.rst-content table.docutils li > p, +.rst-content table.docutils li > p { + font-size: inherit; +} +.rst-content :not(.bit-table) > .wy-table-responsive > table.docutils td:not(:last-child) > p:only-child > code:only-child { + font-size: inherit; + + /* Additional tweaks for literal values alone in table cells. */ + border: none; + background: none; + padding: 0; +} + +/* Tweaks for nested tables. */ +.rst-content table.docutils td .wy-table-responsive { margin-top: 0.5em; margin-bottom: 0; } - -/* Fix odd row background on tables in table cells. */ -tr.row-odd > td { - background-color: #fcfcfc !important; +.rst-content tr.row-odd > td { + background-color: #fcfcfc !important; /* originally transparent */ } -/* Vertical text for tables. */ +/* Text transformation for tables. */ div.vertical-text { transform: rotate(270deg); } /* Bitfield table. */ -div.bit-table > div.wy-table-responsive > table > thead > tr > th:not(.stub), div.bit-table > div.wy-table-responsive > table > tbody > tr > td { +.rst-content .bit-table table th:not(.stub), +.rst-content .bit-table table td { text-align: center; vertical-align: middle; - min-width: 26px; - padding: 0; + min-width: 26px; /* two numeric digits */ + padding: 0; /* only eliminates side padding, but good enough */ +} +.rst-content .bit-table table th code:only-child { + font-size: inherit; + font-weight: normal; + border: none; + background: none; + padding: 0; } /* Toggle containers. toggle-always-show is a class that takes on the look of a toggle container, but is always shown. */ -.toggle, .toggle-always-show { +.rst-content .toggle, +.rst-content .toggle-always-show { background: #f3f6f6; border: 1px solid #e1e4e5; padding: 1em; margin: 0 0 24px; } -.toggle-closed > .toggle-header, .toggle-open > .toggle-header { +.rst-content .toggle-closed > .toggle-header, +.rst-content .toggle-open > .toggle-header { cursor: pointer; } -@media screen { /* show toggle arrows on screen only */ - .toggle-closed > .toggle-header > p:before { +@media screen { /* show toggle arrows and hide toggle contents on screen only */ + .rst-content .toggle-closed > .toggle-header > p:before { content: "\0025B6 "; } - .toggle-open > .toggle-header > p:before { + .rst-content .toggle-open > .toggle-header > p:before { content: "\0025BC "; } -} -.toggle-header > p { - font-weight: bold; - margin-bottom: 0; -} -.toggle > div:nth-child(2), .toggle-always-show > div:nth-child(2) { - margin-top: 12px; - margin-bottom: 0; -} -@media screen { - .toggle-closed > div:nth-child(2) { + .rst-content .toggle-closed > div:nth-child(2) { display: none; } } -@media print { - .toggle-closed > div:nth-child(2) { - display: block !important; - } +.rst-content .toggle-header > p { + font-weight: bold; + margin-bottom: 0; +} +.rst-content .toggle > div:nth-child(2), +.rst-content .toggle-always-show > div:nth-child(2) { + margin-top: 12px; + margin-bottom: 0; } /* Print stuff. */ @@ -104,7 +120,12 @@ div.bit-table > div.wy-table-responsive > table > thead > tr > th:not(.stub), di .rst-content div[class^=highlight] { white-space: nowrap; } - div[class*="highlight-"] { + .rst-content div[class*="highlight-"] { white-space: pre-wrap; } + + /* Always show toggle containers. */ + .rst-content .toggle-closed > div:nth-child(2) { + display: block !important; + } } diff --git a/dev/api/device.rst b/dev/api/device.rst index ff3e9e4..bca7b24 100644 --- a/dev/api/device.rst +++ b/dev/api/device.rst @@ -3,20 +3,20 @@ Devices The **device** is the main unit of emulated components in 86Box. Each device is represented by one or more constant ``device_t`` objects, which contain metadata about the device itself, several callbacks and an array of user-facing configuration options. Unless otherwise stated, all structures, functions and constants in this page are provided by ``86box/device.h``. -.. flat-table:: device_t +.. flat-table:: ``device_t`` :header-rows: 1 :widths: 1 1 999 * - :cspan:`1` Member - Description - * - :cspan:`1` name + * - :cspan:`1` ``name`` - The device's name, displayed in the user interface. ``"Foo-1234"`` for example. Suffixes like ``"(PCI)"`` are removed at run-time. - * - :cspan:`1` internal_name + * - :cspan:`1` ``internal_name`` - The device's internal name, used to identify it in the emulated machine's configuration file. ``"foo1234"`` for example. - * - :cspan:`1` flags + * - :cspan:`1` ``flags`` - One or more bit flags to indicate the expansion bus(es) supported by the device, for determining :ref:`device availability ` on the selected machine: * ``DEVICE_ISA``: 8-bit ISA; @@ -33,11 +33,11 @@ The **device** is the main unit of emulated components in 86Box. Each device is * ``DEVICE_COM``: serial port (reserved for future use); * ``DEVICE_LPT``: parallel port (reserved for future use). - * - :cspan:`1` local + * - :cspan:`1` ``local`` - 32-bit value which can be read from this structure by the ``init`` callback. Use this value to tell different subtypes of the same device, for example. - * - :cspan:`1` init + * - :cspan:`1` ``init`` - Function called whenever this device is initialized, either from starting 86Box or from a hard reset. Can be ``NULL``, in which case the opaque pointer passed to other callbacks will be invalid. Takes the form of: ``void *init(const struct device_t *info)`` @@ -45,14 +45,14 @@ The **device** is the main unit of emulated components in 86Box. Each device is * ``info``: pointer to this ``device_t`` structure; * Return value: opaque pointer passed to the other callbacks below, usually a pointer to the device's :ref:`state structure `. - * - :cspan:`1` close + * - :cspan:`1` ``close`` - Function called whenever this device is de-initialized, either from closing 86Box or from a hard reset. Can be ``NULL``. Takes the form of: ``void close(void *priv)`` * ``priv``: opaque pointer previously returned by ``init``. - * - :cspan:`1` reset + * - :cspan:`1` ``reset`` - Function called whenever this device undergoes a soft reset. Can be ``NULL``. Takes the form of: ``void reset(void *priv)`` @@ -64,14 +64,14 @@ The **device** is the main unit of emulated components in 86Box. Each device is .. raw:: html
union
- - available + - ``available`` - Function called whenever this device's availability is being checked. Can be ``NULL``, in which case the device will always be available. Takes the form of: ``int available()`` * Return value: ``1`` if the device is available for selection, or ``0`` if it is unavailable (due to missing ROMs, for example). - * - poll + * - ``poll`` - Function called whenever the mouse position is updated. Valid for mouse devices only. Takes the form of: ``int poll(int x, int y, int z, int b, void *priv)`` @@ -82,24 +82,24 @@ The **device** is the main unit of emulated components in 86Box. Each device is * ``priv``: opaque pointer previously returned by ``init``; * Return value: ``0`` if the change was processed, or any other value otherwise. - * - register_pci_slot + * - ``register_pci_slot`` - Reserved for future use. - * - :cspan:`1` speed_changed + * - :cspan:`1` ``speed_changed`` - Function called whenever the emulated CPU clock speed is changed. Can be ``NULL``. Timer intervals (when using the undocumented legacy timer API) and anything else sensitive to the CPU clock speed should be updated in this callback. Takes the form of: ``void speed_changed(void *priv)`` * ``priv``: opaque pointer previously returned by ``init``. - * - :cspan:`1` force_redraw + * - :cspan:`1` ``force_redraw`` - Function called whenever the emulated screen has to be fully redrawn. Can be ``NULL``. Only useful for video cards. Takes the form of: ``void force_redraw(void *priv)`` * ``priv``: opaque pointer previously returned by ``init``. - * - :cspan:`1` config + * - :cspan:`1` ``config`` - Array of :ref:`device configuration options `, or ``NULL`` if no options are available. State structure @@ -171,15 +171,15 @@ Registration New devices must be **registered** before they can be selected by the user. This is usually accomplished by adding one or more ``device_t`` pointers to the **device table** for the device's class: -* **Video cards:** ``video_cards`` in ``video/vid_table.c`` -* **Sound cards:** ``sound_cards`` in ``sound/sound.c`` -* **Network cards:** ``net_cards`` in ``network/network.c`` -* **Parallel port devices:** ``lpt_devices`` in ``lpt.c`` -* **Hard disk controllers:** ``controllers`` in ``disk/hdc.c`` -* **Floppy disk controllers:** ``fdc_cards`` in ``floppy/fdc.c`` -* **SCSI controllers:** ``scsi_cards`` in ``scsi/scsi.c`` -* **ISA RTC cards:** ``boards`` in ``device/isartc.c`` -* **ISA memory expansion cards:** ``boards`` in ``device/isamem.c`` +* **Video cards:** ``video_cards`` in ``src/video/vid_table.c`` +* **Sound cards:** ``sound_cards`` in ``src/sound/sound.c`` +* **Network cards:** ``net_cards`` in ``src/network/network.c`` +* **Parallel port devices:** ``lpt_devices`` in ``src/lpt.c`` +* **Hard disk controllers:** ``controllers`` in ``src/disk/hdc.c`` +* **Floppy disk controllers:** ``fdc_cards`` in ``src/floppy/fdc.c`` +* **SCSI controllers:** ``scsi_cards`` in ``src/scsi/scsi.c`` +* **ISA RTC cards:** ``boards`` in ``src/device/isartc.c`` +* **ISA memory expansion cards:** ``boards`` in ``src/device/isamem.c`` Devices not covered by any of the above classes may require further integration through modifications to the user interface and configuration loading/saving systems. @@ -294,20 +294,20 @@ Configuration options can be specified in the ``config`` member of ``device_t``, .config = foo_config }; -.. flat-table:: device_config_t +.. flat-table:: ``device_config_t`` :header-rows: 1 :widths: 1 999 * - Member - Description - * - name + * - ``name`` - Internal name for this option, used to identify it in the emulated machine's configuration file. - * - description + * - ``description`` - Description for this option, displayed in the user interface. - * - type + * - ``type`` - One of the following option types: * ``CONFIG_SELECTION``: combobox containing a list of values specified by the ``selection`` member; @@ -323,18 +323,18 @@ Configuration options can be specified in the ``config`` member of ``device_t``, * ``CONFIG_MIDI_IN``: combobox containing a list of system MIDI input devices; * ``-1``: **mandatory** terminator to indicate the end of the option list. - * - default_string + * - ``default_string`` - Default string value for a ``CONFIG_STRING`` option. Can be ``""`` if not applicable. - * - default_int + * - ``default_int`` - Default integer value for a ``CONFIG_HEX16``, ``CONFIG_HEX20``, ``CONFIG_BINARY``, ``CONFIG_INT`` or ``CONFIG_SPINNER`` option. Can be ``0`` if not applicable. - * - file_filter + * - ``file_filter`` - File type filter for a ``CONFIG_FNAME`` option. Can be ``""`` if not applicable. Must be specified in Windows ``description|mask|description|mask...`` format, for example: ``"Raw image (*.img)|*.img|Virtual Hard Disk (*.vhd)|*.vhd"`` - * - spinner + * - ``spinner`` - ``device_config_spinner_t`` sub-structure containing the minimum/maximum/step values for a ``CONFIG_SPINNER`` option. Can be ``{ 0 }`` if not applicable. .. flat-table:: @@ -344,16 +344,16 @@ Configuration options can be specified in the ``config`` member of ``device_t``, * - Member - Description - * - min + * - ``min`` - Minimum selectable value. - * - max + * - ``max`` - Maximum selectable value. - * - step + * - ``step`` - Units to be incremented/decremented with the arrow buttons. Note that the user can still type in arbitrary numbers that are within ``min`` and ``max`` but not aligned to ``step``. - * - selection + * - ``selection`` - Array of ``device_config_selection_t`` sub-structures containing the choices for a ``CONFIG_SELECTION``, ``CONFIG_HEX16`` or ``CONFIG_HEX20`` option. Can be ``{ 0 }`` if not applicable. Must be terminated with an object with a ``description`` of ``""``. .. flat-table:: @@ -363,37 +363,37 @@ Configuration options can be specified in the ``config`` member of ``device_t``, * - Member - Description - * - description + * - ``description`` - Description for this choice, displayed in the user interface. - * - value + * - ``value`` - Integer value corresponding to this choice, used to identify it in the emulated machine's configuration file. Configured option values can be read from within the device's ``init`` callback with the ``device_get_config_*`` functions. These functions automatically operate in the context of the device currently being initialized. .. note:: ``device_get_config_*`` functions should **never** be called outside of a device's ``init`` callback. You are responsible for reading the options' configured values in the ``init`` callback and storing them in the device's :ref:`state structure ` if necessary. -.. flat-table:: device_get_config_string +.. flat-table:: ``device_get_config_string`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - name + * - ``name`` - The option's ``name``. Accepted option types are ``CONFIG_STRING`` and ``CONFIG_FNAME``. * - **Return value** - The option's configured string value, or its ``default_string`` if no value is present. Note that a ``const char *`` is returned. -.. flat-table:: device_get_config_int / device_get_config_hex16 / device_get_config_hex20 +.. flat-table:: ``device_get_config_int`` / ``device_get_config_hex16`` / ``device_get_config_hex20`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - name + * - ``name`` - The option's ``name``. Accepted option types are: * ``device_get_config_int``: ``CONFIG_SELECTION``, ``CONFIG_BINARY``, ``CONFIG_INT``, ``CONFIG_SPINNER``, ``CONFIG_MIDI_OUT``, ``CONFIG_MIDI_IN`` @@ -403,20 +403,20 @@ Configured option values can be read from within the device's ``init`` callback * - **Return value** - The option's configured integer value (``CONFIG_BINARY`` returns 1 if checked or 0 otherwise), or its ``default_int`` if no value is present. -.. flat-table:: device_get_config_int_ex / device_get_config_mac +.. flat-table:: ``device_get_config_int_ex`` / ``device_get_config_mac`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - name + * - ``name`` - The option's ``name``. Accepted option types are: * ``device_get_config_int_ex``: ``CONFIG_SELECTION``, ``CONFIG_BINARY``, ``CONFIG_INT``, ``CONFIG_SPINNER``, ``CONFIG_MIDI_OUT``, ``CONFIG_MIDI_IN`` * ``device_get_config_mac``: ``CONFIG_MAC`` - * - dflt_int + * - ``dflt_int`` - The default value to return if no configured value is present. * - **Return value** diff --git a/dev/api/dma.rst b/dev/api/dma.rst index 0fe81bc..bc7f8ef 100644 --- a/dev/api/dma.rst +++ b/dev/api/dma.rst @@ -8,14 +8,14 @@ DMA ``86box/dma.h`` provides the ``dma_channel_read`` and ``dma_channel_write`` functions to read or write (respectively) a value from or to an **8237 DMA channel**. -.. flat-table:: dma_channel_read +.. flat-table:: ``dma_channel_read`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - channel + * - ``channel`` - DMA channel number: ``0``-``3`` for 8-bit channels or ``5``-``7`` for 16-bit channels. * - **Return value** @@ -23,17 +23,17 @@ DMA May include a ``DMA_OVER`` bit flag (located above the most significant data bit so as to not interfere with the data) indicating that this was the last byte or word transferred, after which the channel is auto-initialized or masked depending on its configuration. -.. flat-table:: dma_channel_write +.. flat-table:: ``dma_channel_write`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - channel + * - ``channel`` - DMA channel number: ``0``-``3`` for 8-bit channels or ``5``-``7`` for 16-bit channels. - * - val + * - ``val`` - 8- (channels ``0``-``3``) or 16-bit (channels ``5``-``7``) value to write to the given DMA channel. * - **Return value** @@ -46,29 +46,29 @@ Direct memory read/write ``86box/mem.h`` provides the ``mem_read*_phys`` and ``mem_write*_phys`` functions, which read or write physical memory directly. These are useful for **PCI devices**, which perform DMA on their own. -.. flat-table:: mem_readb_phys / mem_readw_phys / mem_readl_phys +.. flat-table:: ``mem_readb_phys`` / ``mem_readw_phys`` / ``mem_readl_phys`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - addr + * - ``addr`` - 32-bit memory address to read. * - **Return value** - 8- (``mem_readb_phys``), 16- (``mem_readw_phys``) or 32-bit (``mem_readl_phys``) value read from the given memory address. -.. flat-table:: mem_writeb_phys / mem_writew_phys / mem_writel_phys +.. flat-table:: ``mem_writeb_phys`` / ``mem_writew_phys`` / ``mem_writel_phys`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - addr + * - ``addr`` - 32-bit memory address to write. - * - val + * - ``val`` - 8- (``mem_readb_phys``), 16- (``mem_readw_phys``) or 32-bit (``mem_readl_phys``) value to write to the given memory address. diff --git a/dev/api/io.rst b/dev/api/io.rst index 1d6d656..3a1af17 100644 --- a/dev/api/io.rst +++ b/dev/api/io.rst @@ -10,13 +10,13 @@ Port I/O * - Parameter - Description - * - base + * - ``base`` - First I/O port (0x0000-0xffff) covered by this handler. - * - size + * - ``size`` - Amount of I/O ports (1-65536) covered by this handler, starting at ``base``. - * - inb + * - ``inb`` - :rspan:`2` I/O read operation callback functions. Can be ``NULL``. Each callback takes the form of: ``TYPE callback(uint16_t addr, void *priv)`` @@ -26,11 +26,11 @@ Port I/O * ``priv``: opaque pointer (see ``priv`` below); * Return value: 8- (``inb``), 16- (``inw``) or 32-bit (``inl``) value read from this port. - * - inw + * - ``inw`` - * - inl + * - ``inl`` - * - outb + * - ``outb`` - :rspan:`2` I/O write operation callback functions. Can be ``NULL``. Each callback takes the form of: ``void callback(uint16_t addr, TYPE val, void *priv)`` @@ -40,11 +40,11 @@ Port I/O * ``val``: 8- (``outb``), 16- (``outw``) or 32-bit (``outl``) value being written to this port; * ``priv``: opaque pointer (see ``priv`` below). - * - outw + * - ``outw`` - * - outl + * - ``outl`` - * - priv + * - ``priv`` - Opaque pointer passed to this handler's read/write operation callbacks. Usually a pointer to a device's :ref:`state structure `. @@ -136,14 +136,14 @@ Any given I/O port can have an **unlimited** amount of I/O handlers, such that: * when a **read** operation occurs, all read callbacks will be called, and their return values will be logically **AND**\ ed together; * when a **write** operation occurs, all write callbacks will be called with the same written value. -Read callbacks can effectively return "don't care" (without interfering with other handlers) by returning a value with all bits set: ``0xff`` with ``inb``, ``0xffff`` with ``inw`` or ``0xffffffff`` with ``inl``. +Read callbacks can effectively return "don't care" (without interfering with other handlers) by returning a value with all bits set: ``0xff`` for ``inb``, ``0xffff`` for ``inw`` or ``0xffffffff`` for ``inl``. .. note:: The same callback fallback rules specified above also apply with multiple handlers. Handlers without valid callbacks for the operation's type and width are automatically skipped. I/O traps --------- -A second type of I/O handler, **I/O traps** allow a device (usually System Management Mode on chipsets and legacy compatibility on PCI sound cards) to act upon a read/write operation to an I/O port operation without affecting its result. +A second type of I/O handler, **I/O traps** allow a device (usually System Management Mode on chipsets or legacy compatibility mechanisms on PCI sound cards) to act upon a read/write operation to an I/O port operation without affecting its result. .. container:: toggle @@ -210,7 +210,7 @@ A second type of I/O handler, **I/O traps** allow a device (usually System Manag * - Parameter - Description - * - func + * - ``func`` - Function called whenever an I/O operation of any type or size is performed to the trap's I/O address range. Takes the form of: ``void func(int size, uint16_t addr, uint8_t write, uint8_t val, void *priv)`` @@ -221,7 +221,7 @@ A second type of I/O handler, **I/O traps** allow a device (usually System Manag * ``val``: value being written if this operation is a write; * ``priv``: opaque pointer (see ``priv`` below). - * - priv + * - ``priv`` - Opaque pointer passed to the ``func`` callback above. Usually a pointer to a device's :ref:`state structure `. @@ -235,15 +235,15 @@ A second type of I/O handler, **I/O traps** allow a device (usually System Manag * - Parameter - Description - * - trap + * - ``trap`` - Opaque pointer representing the I/O trap to remap. - * - enable + * - ``enable`` - * ``1`` to enable this trap; * ``0`` to disable it. - * - addr + * - ``addr`` - First I/O port (0x0000-0xffff) covered by this trap. - * - size + * - ``size`` - Amount of I/O ports (1-65536) covered by this trap. diff --git a/dev/api/pci.rst b/dev/api/pci.rst index fe3bcc7..1b52e89 100644 --- a/dev/api/pci.rst +++ b/dev/api/pci.rst @@ -22,8 +22,8 @@ PCI devices can be added with the ``pci_add_card`` function in the device's ``in #define FOO_ONBOARD 0x80000000 /* most significant bit set = on-board */ typedef struct { - uint8_t pci_regs[256]; /* 256*8-bit configuration register array */ int slot; + uint8_t pci_regs[256]; /* 256*8-bit configuration register array */ } foo_t; static uint8_t @@ -75,17 +75,17 @@ PCI devices can be added with the ``pci_add_card`` function in the device's ``in /* ... */ }; -.. flat-table:: pci_add_card +.. flat-table:: ``pci_add_card`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - add_type + * - ``add_type`` - :ref:`PCI slot type ` to add this card to. - * - read + * - ``read`` - :ref:`Configuration space ` register read callback. Takes the form of: ``uint8_t read(int func, int addr, void *priv)`` @@ -95,7 +95,7 @@ PCI devices can be added with the ``pci_add_card`` function in the device's ``in * ``priv``: opaque pointer (see ``priv`` below); * Return value: 8-bit value read from this register index. - * - write + * - ``write`` - :ref:`Configuration space ` register write callback. Takes the form of: ``void write(int func, int addr, uint8_t val, void *priv)`` @@ -105,7 +105,7 @@ PCI devices can be added with the ``pci_add_card`` function in the device's ``in * ``val``: 8-bit value being written from this register index. * ``priv``: opaque pointer (see ``priv`` below); - * - priv + * - ``priv`` - Opaque pointer passed to this device's configuration space register read/write callbacks. Usually a pointer to a device's :ref:`state structure `. @@ -194,59 +194,49 @@ The most important registers in the standard set are: - Register - Description - * - 0x00 - 0x01 + * - ``0x00 - 0x01`` - Vendor ID - :rspan:`1` Unique IDs assigned to the device's vendor (2 bytes) and the device itself (2 more bytes). The `PCI ID Repository `_ is a comprehensive repository of many (but not all) known PCI IDs. - * - 0x02 - 0x03 + * - ``0x02 - 0x03`` - Device ID - * - 0x04 - 0x05 + * - ``0x04 - 0x05`` - Command - Control several core aspects of the PCI device: - * **I/O Space** (bit 0 or 0x0001) should enable all I/O base address registers if set, or disable them if cleared; - * **Memory Space** (bit 1 or 0x0002) should enable all memory base address registers if set, or disable them if cleared; - * **Interrupt Disable** (bit 10 or 0x0400) should prevent the device from triggering interrupts if set. + * **I/O Space** (bit 0 or ``0x0001``) should enable all I/O base address registers if set, or disable them if cleared; + * **Memory Space** (bit 1 or ``0x0002``) should enable all memory base address registers if set, or disable them if cleared; + * **Interrupt Disable** (bit 10 or ``0x0400``) should prevent the device from triggering interrupts if set. - * - 0x0e + * - ``0x0e`` - Header type - Usually ``0`` to indicate a normal PCI header. Bit 7 (``0x80``) must be set if this is the first function (function ``0``) of a :ref:`multi-function device `. - * - 0x10 - 0x13 - - :rspan:`5` :ref:`dev/api/pci:Base Address Registers` - - :rspan:`5` Sets the base address for each memory or :doc:`I/O ` range provided by this device. + * - ``0x10 - 0x27`` + - :ref:`dev/api/pci:Base Address Registers` + - Sets the base address for each memory or :doc:`I/O ` range provided by this device. - * - 0x14 - 0x17 - - * - 0x18 - 0x1b - - * - 0x1c - 0x1f - - * - 0x20 - 0x23 - - * - 0x24 - 0x27 - - * - 0x2c - 0x2d + * - ``0x2c - 0x2d`` - Subvendor ID - :rspan:`1` Unique vendor (2 bytes) and device (2 bytes) IDs sometimes assigned to different implementations of the same PCI device without having to change the main Vendor and Device IDs. Usually all ``0`` if the device doesn't call for such IDs. - * - 0x2e - 0x2f + * - ``0x2e - 0x2f`` - Subsystem ID - * - 0x30 - 0x33 + * - ``0x30 - 0x33`` - Expansion ROM - Base address and enable bit for the device's :ref:`option ROM `. Must be read-only if the device does not provide an option ROM. - * - 0x3c + * - ``0x3c`` - Interrupt Line - The PIC IRQ number assigned to this device's :ref:`interrupt pin ` (see ``Interrupt Pin`` below). This register's contents should be ignored by the device; however, the register itself **must be writable** if the device uses interrupts, since 86Box actively uses its value to route interrupts on machines with early PCI chipsets not capable of IRQ steering. - * - 0x3d + * - ``0x3d`` - Interrupt Pin - Read-only value indicating the PCI :ref:`interrupt pin ` (``INTx#``) used by this device: @@ -276,6 +266,7 @@ The ``func`` parameter passed to a device's configuration space read/write callb .. code-block:: typedef struct { + int slot; uint8_t pci_regs[2][256]; /* two 256*8-bit configuration register arrays, one for each function */ } foo_t; @@ -336,8 +327,24 @@ The ``func`` parameter passed to a device's configuration space read/write callb dev->pci_regs[0][0x0e] = 0x80; } + static void * + foo_init(const device_t *info) + { + /* Allocate the device state structure. */ + foo_t *dev = /* ... */ + + /* Add PCI device. No changes are required here for multi-function devices. */ + dev->slot = pci_add_card(PCI_ADD_NORMAL, foo_pci_read, foo_pci_write, dev); + + /* Initialize PCI configuration registers. */ + foo_reset(dev); + + return dev; + } + const device_t foo4321_device = { /* ... */ + .init = foo_init, .reset = foo_reset, /* ... */ }; @@ -360,15 +367,15 @@ The aforementioned base address alignment allows software (BIOSes and operating .. container:: bit-table - .. flat-table:: Memory BAR (example: 4 KB large, starting at 0x10) + .. flat-table:: Memory BAR (example: 4 KB large, starting at ``0x10``) :header-rows: 2 :stub-columns: 1 * - Byte - - :cspan:`7` 0x13 - - :cspan:`7` 0x12 - - :cspan:`7` 0x11 - - :cspan:`7` 0x10 + - :cspan:`7` ``0x13`` + - :cspan:`7` ``0x12`` + - :cspan:`7` ``0x11`` + - :cspan:`7` ``0x10`` * - Bit - 31 @@ -411,18 +418,18 @@ The aforementioned base address alignment allows software (BIOSes and operating .. raw:: html - Flags (RO) + Flags - ``0`` - .. flat-table:: I/O BAR (example: 64 ports large, starting at 0x14) + .. flat-table:: I/O BAR (example: 64 ports large, starting at ``0x14``) :header-rows: 2 :stub-columns: 1 * - Byte - - :cspan:`7` 0x17 - - :cspan:`7` 0x16 - - :cspan:`7` 0x15 - - :cspan:`7` 0x14 + - :cspan:`7` ``0x17`` + - :cspan:`7` ``0x16`` + - :cspan:`7` ``0x15`` + - :cspan:`7` ``0x14`` * - Bit - 31 @@ -612,6 +619,8 @@ The aforementioned base address alignment allows software (BIOSes and operating foo_remap_io(dev); } + /* Don't forget to add the PCI device on init first. */ + const device_t foo4321_device = { /* ... */ .reset = foo_reset, @@ -634,10 +643,10 @@ The main difference between this register and BARs is that the ROM can be enable :stub-columns: 1 * - Byte - - :cspan:`7` 0x33 - - :cspan:`7` 0x32 - - :cspan:`7` 0x31 - - :cspan:`7` 0x30 + - :cspan:`7` ``0x33`` + - :cspan:`7` ``0x32`` + - :cspan:`7` ``0x31`` + - :cspan:`7` ``0x30`` * - Bit - 31 @@ -786,7 +795,7 @@ The main difference between this register and BARs is that the ROM can be enable /* Allocate the device state structure. */ foo_t *dev = /* ... */ - /* Don't forget to add the PCI device. */ + /* Don't forget to add the PCI device first. */ /* Load 32 KB ROM... */ rom_init(&dev->rom, "roms/scsi/foo/foo4321.bin", 0, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); @@ -794,6 +803,9 @@ The main difference between this register and BARs is that the ROM can be enable /* ...but don't map it right now. */ mem_mapping_disable(&dev->rom.mapping); + /* Initialize PCI configuration registers. */ + foo_reset(dev); + return dev; } diff --git a/dev/api/thread.rst b/dev/api/thread.rst index 2e0bf53..b108fc8 100644 --- a/dev/api/thread.rst +++ b/dev/api/thread.rst @@ -12,21 +12,21 @@ Starting Threads can be started with the ``thread_create`` function. Additionally, the ``thread_wait`` function can be used to wait for a thread's function to return. -.. flat-table:: thread_create +.. flat-table:: ``thread_create`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - thread_func + * - ``thread_func`` - Function to run in the thread. Takes the form of: ``void thread_func(void *priv)`` * ``priv``: opaque pointer (see ``priv`` below). - * - priv + * - ``priv`` - Opaque pointer passed to the ``thread_func`` above. Usually a pointer to a device's :ref:`state structure `. @@ -34,14 +34,14 @@ Threads can be started with the ``thread_create`` function. Additionally, the `` - ``thread_t`` pointer representing the newly-created thread. That pointer will become **invalid** once the thread's function returns. -.. flat-table:: thread_wait +.. flat-table:: ``thread_wait`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - arg + * - ``arg`` - ``thread_t`` pointer representing the thread to wait for. * - **Return value** @@ -53,7 +53,7 @@ Events **Events** allow for synchronization between threads. An event, represented by an ``event_t`` pointer returned by the ``thread_create_event`` function, can be *set* (``thread_set_event`` function) or *reset* (``thread_reset_event`` function), and a thread can wait for an event to be *set* with the ``thread_wait_event`` function. Events that are no longer to be used should be deallocated with the ``thread_destroy_event`` function. -.. flat-table:: thread_create_event +.. flat-table:: ``thread_create_event`` :header-rows: 1 :widths: 1 999 @@ -63,27 +63,27 @@ Events * - **Return value** - ``event_t`` pointer representing the newly-created event. -.. flat-table:: thread_set_event / thread_reset_event / thread_destroy_event +.. flat-table:: ``thread_set_event`` / ``thread_reset_event`` / ``thread_destroy_event`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - arg + * - ``arg`` - ``event_t`` pointer representing the event to *set* (``thread_set_event``), *reset* (``thread_reset_event``) or deallocate (``thread_destroy_event``). -.. flat-table:: thread_wait_event +.. flat-table:: ``thread_wait_event`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - arg + * - ``arg`` - ``event_t`` pointer representing the event to wait for. - * - timeout + * - ``timeout`` - Maximum amount of time in **milliseconds** (not microseconds, unlike :doc:`timers `) to spend waiting for this event to be *set*. If set to ``-1``, this function will not return until the event is *set*. * - **Return value** @@ -97,7 +97,7 @@ Mutexes `Mutexes `_, also known as **locks**, can control access to a shared resource, ensuring no concurrent modifications or other issues arise from multiple threads attempting to use the same resource at the same time. A mutex, represented by a ``mutex_t`` pointer returned by the ``thread_create_mutex`` function, can be *locked* with the ``thread_wait_mutex`` function (which waits until the mutex is *released*) and *released* with the ``thread_release_mutex`` function. Additionally, the status of a mutex can be independently checked with the ``thread_test_mutex`` function. Mutexes that are no longer to be used should be deallocated with the ``thread_close_mutex`` function. -.. flat-table:: thread_create_mutex +.. flat-table:: ``thread_create_mutex`` :header-rows: 1 :widths: 1 999 @@ -107,25 +107,25 @@ Mutexes * - **Return value** - ``mutex_t`` pointer representing the newly-created mutex. -.. flat-table:: thread_wait_mutex / thread_release_mutex / thread_close_mutex +.. flat-table:: ``thread_wait_mutex`` / ``thread_release_mutex`` / ``thread_close_mutex`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - arg + * - ``arg`` - ``mutex_t`` pointer representing the mutex to *lock* (``thread_wait_mutex``), *release* (``thread_release_mutex``) or deallocate (``thread_close_mutex``). If this mutex is locked, ``thread_wait_mutex`` will not return until the mutex is *released* by another thread. -.. flat-table:: thread_test_mutex +.. flat-table:: ``thread_test_mutex`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - arg + * - ``arg`` - ``mutex_t`` pointer representing the mutex to check. * - **Return value** diff --git a/dev/api/timer.rst b/dev/api/timer.rst index 932643f..c8fe09c 100644 --- a/dev/api/timer.rst +++ b/dev/api/timer.rst @@ -51,28 +51,28 @@ Timers can be added with the ``timer_add`` function. The best place for adding a /* ... */ }; -.. flat-table:: timer_add +.. flat-table:: ``timer_add`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - timer + * - ``timer`` - Pointer to a ``pc_timer_t`` object stored somewhere, usually in a device's :ref:`state structure `. - * - callback + * - ``callback`` - Function called every time the timer's period is reached. Takes the form of: ``void callback(void *priv)`` * ``priv``: opaque pointer (see ``priv`` below). - * - priv + * - ``priv`` - Opaque pointer passed to the ``callback`` above. Usually a pointer to a device's :ref:`state structure `. - * - start_timer + * - ``start_timer`` - Part of the :ref:`legacy API `, should always be ``0``. Triggering @@ -92,7 +92,7 @@ The ``timer_on_auto`` function can be used to start (with the provided microseco typedef struct { uint8_t regs[256]; - pc_timer_t countdown_timer; /* remember to timer_add on init, per the example above */ + pc_timer_t countdown_timer; /* don't forget to timer_add on init, per the example above */ } foo_t; static void @@ -101,14 +101,16 @@ The ``timer_on_auto`` function can be used to start (with the provided microseco /* Get the device state structure. */ foo_t *dev = (foo_t *) priv; - /* Restart timer automatically if bit 1 (0x02) of register 0x80 is set. */ + /* Restart timer automatically if the relevant + bit (see register description below) is set. */ if (dev->regs[0x80] & 0x02) timer_on_auto(&dev->countdown_timer, 100.0); } - /* Example: writing to I/O port register 0x__80: + /* Our device handles I/O port register 0x__80 like this: - Bit 0 (0x01) set: start 100-microsecond countdown timer; - - Bit 0 (0x01) clear: stop countdown timer. */ + - Bit 0 (0x01) clear: stop countdown timer; + - Bit 1 (0x02) set: automatically restart timer. */ static void foo_outb(uint16_t addr, uint8_t val, void *priv) { @@ -118,24 +120,24 @@ The ``timer_on_auto`` function can be used to start (with the provided microseco /* Handle writes to register 0x80. */ if ((addr & 0xff) == 0x80) { dev->regs[0x80] = val; - if (val & 0x01) + if (val & 0x01) /* bit 0 set */ timer_on_auto(&dev->countdown_timer, 100.0); - else + else /* bit 0 clear */ timer_on_auto(&dev->countdown_timer, 0.0); } } -.. flat-table:: timer_on_auto +.. flat-table:: ``timer_on_auto`` :header-rows: 1 :widths: 1 999 * - Parameter - Description - * - timer + * - ``timer`` - Pointer to the timer's ``pc_timer_t`` object. - * - period + * - ``period`` - Period after which the timer callback is called, in microseconds (1/1,000,000th of a second or 1/1,000th of a millisecond) as a ``double``. A period of ``0.0`` stops the timer if it's active. diff --git a/hardware/diskimages.rst b/hardware/diskimages.rst index 9bedaa8..927d955 100644 --- a/hardware/diskimages.rst +++ b/hardware/diskimages.rst @@ -133,7 +133,7 @@ CD audio Compact Disc Digital Audio (CDDA) playback through the emulated CD-ROM drives is supported on **Cue sheet** images. Audio output is enabled on the first CD-ROM drive and muted on subsequent drives by default; individual drives can be muted or unmuted through the :ref:`status bar ` or :ref:`Media menu `. -.. note:: Only raw format (.bin) tracks are supported. Compressed or otherwise encapsulated audio tracks (.wav, .mp3, .ogg, .flac and other formats) are not supported. +.. note:: Only **raw format** (.bin) tracks are supported. Compressed or otherwise encapsulated audio tracks (.wav, .mp3, .ogg, .flac and other formats) are not supported. Cassette tape images -------------------- diff --git a/hardware/isabugger.rst b/hardware/isabugger.rst index 80ddea2..5c824de 100644 --- a/hardware/isabugger.rst +++ b/hardware/isabugger.rst @@ -3,7 +3,7 @@ ISABugger The ISABugger card provides a debugging interface for software developers, consisting of two 8-bit hexadecimal displays and two banks of 8 LEDs, all controlled by the emulated machine. It can be enabled through the :ref:`Peripherals settings page `. -These displays and LEDs are shown on the :ref:`status bar ` as described in the diagram below: +These displays and LEDs are displayed on the :ref:`status bar ` as described in the diagram below: .. image:: images/isabugger.png :align: center @@ -33,38 +33,38 @@ From ``src/device/bugger.c``: Registers --------- -The ISABugger's control registers can be accessed through the following operations on I/O ports 7Ah and 7Bh: +The ISABugger's control registers can be accessed through the following operations on I/O ports ``0x7a`` and ``0x7b``: -* **Writing:** write the register's index to port 7Ah, then write the value to port 7Bh. -* **Reading:** write the register's index to port 7Ah, then read the value from port 7Bh. -* **Index reading:** the last register index written to port 7Ah can be read back from the same port. The most significant bit is always set, as an indicator that the ISABugger is enabled. +* **Writing:** write the register's index to port ``0x7a``, then write the value to port ``0x7b``. +* **Reading:** write the register's index to port ``0x7a``, then read the value from port ``0x7b``. +* **Index reading:** the last register index written to port ``0x7a`` can be read back from the same port. The most significant bit is always set, as an indicator that the ISABugger is enabled. -.. note:: The ISABugger I/O ports only support byte (inb/outb) operations. Word (inw/outw) and dword (inl/outl) operations will result in undefined behavior; so will selecting or attempting to read back an unknown register index, or performing an illegal operation such as reading from a write-only register. +.. note:: The ISABugger I/O ports only support byte (``inb``/``outb``) operations. Word (``inw``/``outw``) and dword (``inl``/``outl``) operations will result in undefined behavior; so will selecting or attempting to read back an unknown register index, or performing an illegal operation such as reading from a write-only register. Register reference ^^^^^^^^^^^^^^^^^^ -.. rubric:: Index 0x00 - Red LEDs (write-only) -.. rubric:: Index 0x01 - Green LEDs (write-only) +.. rubric:: Index ``0x00`` - Red LEDs (write-only) +.. rubric:: Index ``0x01`` - Green LEDs (write-only) Each LED bank shows a binary representation of the 8-bit value written to its register, from the most significant bit on the left to the least significant bit on the right. Setting a bit will light up its corresponding LED (displayed as **G** or **R**), and clearing a bit will dim its LED (displayed as **g** or **r**). -.. rubric:: Index 0x02 - Right display (write-only) -.. rubric:: Index 0x04 - Left display (write-only) +.. rubric:: Index ``0x02`` - Right display (write-only) +.. rubric:: Index ``0x04`` - Left display (write-only) Each display shows a hexadecimal representation of the 8-bit value written to its register. -.. rubric:: Index 0x20 - Serial port data (not implemented) (read/write) -.. rubric:: Index 0x40 - Serial port configuration (not implemented) (read/write) +.. rubric:: Index ``0x20`` - Serial port data (not implemented) (read/write) +.. rubric:: Index ``0x40`` - Serial port configuration (not implemented) (read/write) While the aforementioned real ISABugger card is equipped with an independent RS-232 serial interface, that feature is currently not implemented on 86Box in an user-facing manner. -.. rubric:: Index 0x80 - Initialize (not implemented) (write-only) +.. rubric:: Index ``0x80`` - Initialize (not implemented) (write-only) -This register has no effect on 86Box, as the emulated ISABugger is always enabled and ready. +This register has **no effect** on 86Box, as the emulated ISABugger is always enabled and ready. -.. rubric:: Index 0xFF - Reset (special) +.. rubric:: Index ``0xff`` - Reset (special) -Writing register index 0xFF to port 7Ah will immediately reset all registers to their startup value, clearing all displays and LED banks. +Writing register index ``0xff`` to port ``0x7a`` will immediately reset all registers to their startup value, clearing all displays and LED banks. -This is a special register which cannot be read or written; writing to port 7Bh immediately after a reset will result in the value being sent to the default register index of 0x00, which corresponds to the red LEDs. +This is a **special register** which cannot be read or written; writing to port ``0x7b`` immediately after a reset will result in the value being sent to the default register index of ``0x00``, which corresponds to the red LEDs. diff --git a/hardware/machinespecific.rst b/hardware/machinespecific.rst index 8aef97e..21f9ef9 100644 --- a/hardware/machinespecific.rst +++ b/hardware/machinespecific.rst @@ -48,7 +48,7 @@ See: :ref:`p65up5` * Equipped with the obscure SMSC Victory66 southbridge instead of the regular Intel PIIX4E. * The Victory66 has faster IDE - up to Ultra ATA/66 as opposed to the PIIX4E's Ultra ATA/33 - and a different USB controller. - * Drivers for Windows 95, 98, Me and 2000 are available `here `_. Windows XP, Vista and 7 include drivers out of the box. + * Drivers for Windows 95, 98, Me and 2000 are available `here `_. Windows XP, Vista and 7 include drivers out of the box. Slot 2 ------ diff --git a/settings/display.rst b/settings/display.rst index 46d13b2..3ce898a 100644 --- a/settings/display.rst +++ b/settings/display.rst @@ -3,7 +3,7 @@ |display| Display ================= -The *Display* page contains settings related to the emulated machine's 2D and 3D video cards. +The **Display** page contains settings related to the emulated machine's 2D and 3D video cards. Video ----- diff --git a/settings/floppycdrom.rst b/settings/floppycdrom.rst index 3cb2189..06ef9b2 100644 --- a/settings/floppycdrom.rst +++ b/settings/floppycdrom.rst @@ -3,7 +3,7 @@ |floppy_and_cdrom_drives| Floppy & CD-ROM drives ================================================ -The *Floppy & CD-ROM drives* page contains settings related to the emulated machine's base removable storage drives. +The **Floppy & CD-ROM drives** page contains settings related to the emulated machine's base removable storage drives. Floppy drives ------------- diff --git a/settings/hdd.rst b/settings/hdd.rst index b15fbdb..c2a5872 100644 --- a/settings/hdd.rst +++ b/settings/hdd.rst @@ -3,7 +3,7 @@ |hard_disk| Hard disks ====================== -The *Hard disks* page contains settings related to the emulated machine's fixed disks. +The **Hard disks** page contains settings related to the emulated machine's fixed disks. Hard disk list -------------- diff --git a/settings/input.rst b/settings/input.rst index 4c3bec2..436d299 100644 --- a/settings/input.rst +++ b/settings/input.rst @@ -3,7 +3,7 @@ |input_devices| Input devices ============================= -The *Input devices* page contains settings related to the emulated machine's mouse, joysticks and other input devices. +The **Input devices** page contains settings related to the emulated machine's mouse, joysticks and other input devices. Mouse ----- diff --git a/settings/machine.rst b/settings/machine.rst index 62a88d9..c743bdf 100644 --- a/settings/machine.rst +++ b/settings/machine.rst @@ -3,7 +3,7 @@ |machine| Machine ================= -The *Machine* page contains settings related to the emulated machine as a whole, such as the machine type, CPU type and amount of memory. +The **Machine** page contains settings related to the emulated machine as a whole, such as the machine type, CPU type and amount of memory. Machine type / Machine ---------------------- diff --git a/settings/network.rst b/settings/network.rst index 6d65b65..44446a1 100644 --- a/settings/network.rst +++ b/settings/network.rst @@ -3,7 +3,7 @@ |network| Network ================= -The *Network* page contains settings related to the emulated machine's network connectivity. +The **Network** page contains settings related to the emulated machine's network connectivity. Network type ------------ diff --git a/settings/peripherals.rst b/settings/peripherals.rst index 74ec502..30bf95d 100644 --- a/settings/peripherals.rst +++ b/settings/peripherals.rst @@ -3,7 +3,7 @@ |other_peripherals| Other peripherals ===================================== -The *Other peripherals* page contains settings related to disk drive controllers, memory expansions and other expansion cards. +The **Other peripherals** page contains settings related to disk drive controllers, memory expansions and other expansion cards. ISA RTC @@ -32,11 +32,29 @@ Emulate a diagnostic POST card, which displays POST code values issued by the em The POST card will automatically use the correct diagnostic I/O port for the emulated machine: -* Port 10h on the IBM PCjr; -* Port 60h on the IBM XT; -* Port 80h on the IBM AT, clones and the XT-based Xi 8088; -* Port 84h on early Compaq machines; -* Port 0190h on IBM PS/1 and PS/2 machines not based on the Micro Channel Architecture; -* Port 0680h on Micro Channel Architecture machines. +.. flat-table:: + :header-rows: 1 + :widths: 1 999 -.. note:: Some operating systems and applications use port 80h (which is shared with the POST card on most machines) for other purposes. If you notice the POST code display is flickering and the emulation speed has decreased drastically, try disabling the POST card. + * - Port + - Machine types + + * - ``0x10`` + - IBM PCjr + + * - ``0x60`` + - IBM XT + + * - ``0x80`` + - IBM AT, clones and the XT-based Xi 8088 + + * - ``0x84`` + - Early Compaq + + * - ``0x190`` + - IBM PS/1 and PS/2 not based on the Micro Channel Architecture + + * - ``0x680`` + - Micro Channel Architecture + +.. note:: Some operating systems and applications use port ``0x80`` (which is shared with the POST card on most machines) for other purposes. If you notice the POST code display is flickering and the emulation speed has decreased drastically, try disabling the POST card. diff --git a/settings/ports.rst b/settings/ports.rst index 6fcd3b2..d36a978 100644 --- a/settings/ports.rst +++ b/settings/ports.rst @@ -3,7 +3,7 @@ |ports| Ports (COM & LPT) ========================= -The *Ports (COM & LPT)* page contains settings related to the emulated machine's I/O ports. +The **Ports (COM & LPT)** page contains settings related to the emulated machine's I/O ports. LPT1-4 Device ------------- diff --git a/settings/removable.rst b/settings/removable.rst index e58f025..4825f02 100644 --- a/settings/removable.rst +++ b/settings/removable.rst @@ -3,7 +3,7 @@ |other_removable_devices| Other removable devices ================================================= -The *Other removable devices* page contains settings related to the emulated machine's additional removable storage drives. +The **Other removable devices** page contains settings related to the emulated machine's additional removable storage drives. MO / ZIP drives --------------- diff --git a/settings/sound.rst b/settings/sound.rst index 066069c..4caabc3 100644 --- a/settings/sound.rst +++ b/settings/sound.rst @@ -3,7 +3,7 @@ |sound| Sound ============= -The *Sound* page contains settings related to the emulated machine's audio hardware. +The **Sound** page contains settings related to the emulated machine's audio hardware. Parallel port sound devices such as the **Disney Sound Source** and **Covox Speech Thing** are not present on this page; they can be configured through the :ref:`Ports page `. diff --git a/settings/storage.rst b/settings/storage.rst index d28250b..6bb1a25 100644 --- a/settings/storage.rst +++ b/settings/storage.rst @@ -3,7 +3,7 @@ |storage_controllers| Storage controllers ========================================= -The *Storage controllers* page contains settings related to the emulated machine's disk drive controllers. +The **Storage controllers** page contains settings related to the emulated machine's disk drive controllers. HD Controller -------------