| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
cartridges). (#11091)
This makes it simpler to install read-write handlers, as you don't need to think about the "smo" suffixes.
|
| |
|
|
|
|
| |
actually doing the access
|
|
|
|
|
|
| |
them, which can them be picked up on access with the
{read,write}_*_flags variants of the accessors. Example use with the
i960 and its burstable rom/ram.
|
| |
|
|
|
|
|
| |
handler_entry_write and closely related classes. (#8255)
This appears to substantially reduce compilation time and binary size without too much impact on critical paths. The only critical-path parts really touched by this are probably handler_entry_read_units<Width, AddrShift, Endian>::read and handler_entry_write_units<Width, AddrShift, Endian>::write, which no longer need a branch on descriptor endianness for the downcast. The other instances of where the endianness now needs to be fetched from the address space are practically all in constructors, which probably don't get called too often except in drivers where the memory map is regularly rewritten (e.g. segas16b.cpp); even then the performance impact probably isn't huge.
|
|
|
|
| |
argument-dependent base templates (may or may not work around GCC11 bug causing #7616)
|
|
|
|
| |
elements can be trivially constructed.
|
|
|
|
| |
memory map system. [O. Galibert]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
not pointers anymore [O. Galibert]
The last(?) two changes are:
- Add a template parameter to everything (theoretically the address
space width, in practice a level derived from it to keep as much
compatibility between widths as possible) so that the shift size
becomes a constant.
- Change the syntax of declaring and initializing the caches and
specifics so that they're embedded in the owner device. Solves
lifetime issues and also removes one indirection (looking up the base
dispatch pointer through the cache/specific pointer).
|
|
|
|
| |
needed because it's already done at the global mask level. [O. Galibert]
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A standard memory handler has as a prototype (where uX = u8, u16, u32 or u64):
uX device::read(address_space &space, offs_t offset, uX mem_mask);
void device::write(address_space &space, offs_t offset, uX data, uX mem_mask);
We now allow simplified versions which are:
uX device::read(offs_t offset, uX mem_mask);
void device::write(offs_t offset, uX data, uX mem_mask);
uX device::read(offs_t offset);
void device::write(offs_t offset, uX data);
uX device::read();
void device::write(uX data);
Use them at will. Also consider
(DECLARE_)(READ|WRITE)(8|16|32|64)_MEMBER on the way out, use the
explicit prototypes.
Same for lambdas in the memory map, the parameters are now optional
following the same combinations.
|
|
|