summaryrefslogtreecommitdiffstatshomepage
path: root/docs/source/techspecs/device_rom_interface.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/source/techspecs/device_rom_interface.rst')
-rw-r--r--docs/source/techspecs/device_rom_interface.rst72
1 files changed, 72 insertions, 0 deletions
diff --git a/docs/source/techspecs/device_rom_interface.rst b/docs/source/techspecs/device_rom_interface.rst
new file mode 100644
index 00000000000..5d5dbc26192
--- /dev/null
+++ b/docs/source/techspecs/device_rom_interface.rst
@@ -0,0 +1,72 @@
+The device_rom_interface
+========================
+
+1. Capabilities
+---------------
+
+This interface is designed for devices which expect to have a rom
+connected to them on a dedicated bus. It's mostly designed for sound
+chips. Other devices types may be interested but other considerations
+may make it impratical (graphics decode caching for instance). The
+interface provides the capability of either connecting a ROM_REGION,
+connecting an ADDRESS_MAP or dynamically setting up a block of memory
+as rom. In the region/block cases, banking is automatically handled.
+
+2. Setup
+--------
+
+| **device_rom_interface**\ (const machine_config &mconfig, device_t &device, UINT8 addrwidth, endianness_t endian = ENDIANNESS_LITTLE, UINT8 datawidth = 8)
+
+The constructor of the interface wants, in addition to the standard
+parameters, the address bus width of the dedicated bus. In addition
+the endianness (if not little endian or byte-sized bus) and data bus
+width (if not byte) can be provided.
+
+| **MCFG_DEVICE_ADDRESS_MAP**\ (AS_0, map)
+
+Use that method at machine config time to provide an address map for
+the bus to connect to. It has priority over a rom region if one is
+also present.
+
+| **ROM_REGION**\ (length, tag, flags)
+
+If a rom region with a tag identical to the device tag is provided in
+the rom description for the system, it will be automatically picked up
+as the connected rom. An address map has priority over the region if
+present in the machine config.
+
+| void **set_rom**\ (const void \*base, UINT32 size);
+
+At any time post- **interface_pre_start**, a memory block can be
+setup as the connected rom with that method. It overrides any
+previous setup that may have been provided. It can be done multiple
+times.
+
+3. Rom access
+-------------
+
+| UINT8 **read_byte**\ (offs_t byteaddress)
+| UINT16 **read_word**\ (offs_t byteaddress)
+| UINT32 **read_dword**\ (offs_t byteaddress)
+| UINT64 **read_qword**\ (offs_t byteaddress)
+
+These methods provide read access to the connected rom. Out-of-bounds
+access results in standard unmapped read logerror messages.
+
+4. Rom banking
+--------------
+
+If the rom region or the memory block in set_rom is larger than the
+address bus, banking is automatically setup.
+
+| void **set_rom_bank**\ (int bank)
+
+That method selects the current bank number.
+
+5. Caveats
+----------
+
+Using that interface makes the device derive from
+**device_memory_interface**. If the device wants to actually use the
+memory interface for itself, remember that AS_0/AS_PROGRAM is used by
+the rom interface, and don't forget to upcall **memory_space_config**.