diff options
author | Olivier Galibert <galibert@pobox.com> | 2020-11-02 12:11:43 +0100 |
---|---|---|
committer | Olivier Galibert <galibert@pobox.com> | 2020-11-02 12:12:11 +0100 |
commit | b8c338858a101d14308c64c87b0f714db4f05326 (patch) | |
tree | a34dca21d603b98f5450d31868ce33a7e4c103b0 | |
parent | f4172ded3ec6f3b877ab813f6453d6d1907c1c00 (diff) |
emumem: Simplify memory management. [O. Galibert]
API impact:
- install_ram/rom/writeonly now requires a non-null pointer. If you want
automatically managed ram, add it to a memory map, not in machine_start
- install_*_bank now requires a memory_bank *, not a string
- one can create memory banks outside of memory maps with memory_bank_creator
- one can create memory shares outside of memory maps with memory_share_creator
Memory maps impact:
- ram ranges with overlapping addresses are not shared anymore. Use .share()
- ram ranges touching each other are not merged anymore. Stay in your range
Extra note:
- there is no need to create a bank just to dynamically map some memory/rom.
Just use install_rom/ram/writeonly
565 files changed, 3674 insertions, 3585 deletions
diff --git a/docs/source/techspecs/index.rst b/docs/source/techspecs/index.rst index baec3992140..0d7ddc8ce41 100644 --- a/docs/source/techspecs/index.rst +++ b/docs/source/techspecs/index.rst @@ -11,6 +11,7 @@ This section covers technical specifications useful to programmers working on MA device_memory_interface device_rom_interface device_disasm_interface + memory floppy nscsi luaengine diff --git a/docs/source/techspecs/memory.rst b/docs/source/techspecs/memory.rst new file mode 100644 index 00000000000..e760b004894 --- /dev/null +++ b/docs/source/techspecs/memory.rst @@ -0,0 +1,603 @@ +Emulated system memory and address spaces management +==================================================== + +1. Overview +----------- + +The memory subsystem (emumem and addrmap) combines multiple functions +useful for system emulation: + +* address bus decoding and dispatching with caching +* static descriptions of an address map +* ram allocation and registration for state saving +* interaction with memory regions to access rom + +Devices create address spaces, e.g. decodable buses, through the +device_memory_interface. The machine configuration sets up address +maps to put in the address spaces, then the device can do read and +writes through the bus. + +2. Basic concepts +----------------- + +2.1 Address spaces +~~~~~~~~~~~~~~~~~~ + +An address space, implemented in the class **address_space**, +represents an addressable bus with potentially multiple sub-devices +connected requiring a decode. It has a number of data lines (8, 16, +32 or 64) called data width, a number of address lines (1 to 32) +called address width and an endianness. In addition an address shift +allows for buses that have an atomic granularity different than a +byte. + +Address space objects provide a series of methods for read and write +access, and a second series of methods for dynamically changing the +decode. + + +2.2 Address maps +~~~~~~~~~~~~~~~~ + +An address map is a static description of the decode expected when +using a bus. It connects to memory, other devices and methods, and is +installed, usually at startup, in an address space. That description +is stored in an **address_map** structure which is filled +programatically. + + +2.3 Shares, banks and regions +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Memory shares are allocated memory zones that can be put in multiple +places in the same or different address spaces, and can also be +directly accessed from devices. + +Memory banks are zones that indirect memory access, giving the +possibility to dynamically and efficiently change where a zone +actually points to. + +Memory regions are read-only memory zones in which roms are loaded. + +All of these have names allowing to access them. + +3. Memory objects +----------------- + +3.1 Shares - memory_share +~~~~~~~~~~~~~~~~~~~~~~~~~~ +| class memory_share { +| const std::string &name() const; +| void \*ptr() const; +| size_t bytes() const; +| endianness_t endianness() const; +| u8 bitwidth() const; +| u8 bytewidth() const; +| }; + +A memory share is a named allocated memory zone that is automatically +saved in save states and can be mapped in address spaces. It is the +standard container for memory that is shared between spaces, but also +shared between an emulated cpu and a driver. As such one has easy +access to its contents from the driver class. + +| required_shared_ptr<uNN> m_share_ptr; +| optional_shared_ptr<uNN> m_share_ptr; +| required_shared_ptr_array<uNN, count> m_share_ptr_array; +| optional_shared_ptr_array<uNN, count> m_share_ptr_array; +| +| [device constructor] m_share_ptr(\*this, "name"), +| [device constructor] m_share_ptr_array(\*this, "name%u", 0U), + +At the device level, a pointer to the memory zone can easily be +retrieved by building one of these four finders. Note that like for +every finder calling target() on the finder gives you the memory_share +object. + +| memory_share_creator<uNN> m_share; +| +| [device constructor] m_share(\*this, "name", size, endianness), + +A memory share can be created if it doesn't exist in a memory map +through that creator class. If it already exists it is just +retrieved. That class behaves like a pointer but also has the share() +method to get th memory_share object and the bytes(), endianness(), +bitwidth() and bytewidth() methods for share information. + +| memory_share \*memshare(string tag) const; + +The memshare device method retrieves a memory share by name. Beware +that the lookup can be expensive, prefer finders instead. + +3.2 Banks - memory_bank +~~~~~~~~~~~~~~~~~~~~~~~~~~ +| class memory_bank { +| const std::string &tag() const; +| int entry() const; +| void set_entry(int entrynum); +| void configure_entry(int entrynum, void \*base); +| void configure_entries(int startentry, int numentry, void \*base, offs_t stride); +| void set_base(void \*base); +| void \*base() const; +| }; + +A memory bank is a named memory zone indirection that can be mapped in +address spaces. It points to nullptr when created. configure_entry +allows to set a relationship between an entry number and a base +pointer. configure_entries does the same for multiple consecutive +entries spanning a memory zone. Alternatively set_base sets the base +for entry 0 and selects it. + +set_entry allows to dynamically and efficiently select the current +active entry, entry() gets that selection back, and base() gets the +assotiated base pointer. + +| required_memory_bank m_bank; +| optional_memory_bank m_bank; +| required_memory_bank_array<count> m_bank_array; +| optional_memory_bank_array<count> m_bank_array; +| +| [device constructor] m_bank(\*this, "name"), +| [device constructor] m_bank_array(\*this, "name%u", 0U), + +At the device level, a pointer to the memory bank object can easily be +retrieved by building one of these four finders. + +| memory_bank_creator m_bank; +| +| [device constructor] m_bank(\*this, "name"), + +A memory share can be created if it doesn't exist in a memory map +through that creator class. If it already exists it is just +retrieved. + +| memory_bank \*membank(string tag) const; + +The memshare device method retrieves a memory share by name. Beware +that the lookup can be expensive, prefer finders instead. + + +3.3 Regions - memory_region +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +| class memory_bank { +| u8 \*base(); +| u8 \*end(); +| u32 bytes() const; +| const std::string &name() const; +| endianness_t endianness() const; +| u8 bitwidth() const; +| u8 bytewidth() const; +| u8 &as_u8(offs_t offset = 0); +| u16 &as_u16(offs_t offset = 0); +| u32 &as_u32(offs_t offset = 0); +| u64 &as_u64(offs_t offset = 0); +| } + +A region is used to store readonly data like roms or the result of +fixed decryptions. Their contents are not saved, which is why they +should not being written to from the emulated system. They don't +really have an intrinsic width (base() returns an u8 \* always), which +is historical and pretty much unfixable at this point. The as_* +methods allow for accessing them at a given width. + +| required_memory_region m_region; +| optional_memory_region m_region; +| required_memory_region_array<count> m_region_array; +| optional_memory_region_array<count> m_region_array; +| +| [device constructor] m_region(\*this, "name"), +| [device constructor] m_region_array(\*this, "name%u", 0U), + +At the device level, a pointer to the memory region object can easily be +retrieved by building one of these four finders. + +| memory_region \*memregion(string tag) const; + +The memshare device method retrieves a memory share by name. Beware +that the lookup can be expensive, prefer finders instead. + + +4. Address maps API +------------------- + +4.1 General API structure +~~~~~~~~~~~~~~~~~~~~~~~~~ + +An address map is a method of a device which fills an **address_map** +structure, usually called **map**, passed by reference. The method +then can set some global configuration through specific methods and +then provide address range-oriented entries which indicate what should +happen when a specific range is accessed. + +The general syntax for entries uses method chaining: + +| map(start, end).handler(...).handler_qualifier(...).range_qualifier(); + +The values start and end define the range, the handler() block defines +how the access is handled, the handler_qualifier() block specifies +some aspects of the handler (memory sharing for instance) and the +range_qualifier() block refines the range (mirroring, masking, byte +selection...). + +The map follows a "last one wins" principle, where the last one is +selected when multiple handlers match a given address. + + +4.2 Global configurations +~~~~~~~~~~~~~~~~~~~~~~~~~ + +4.2.1 Global masking +'''''''''''''''''''' + +| map.global_mask(offs_t mask); + +Allows to indicates a mask to be applied to all addresses when +accessing the space that map is installed in. + + +4.2.2 Returned value on unmapped/nop-ed read +'''''''''''''''''''''''''''''''''''''''''''' + +| map.unmap_value_low(); +| map.unmap_value_high(); +| map.unmap_value(u8 value); + +Sets the value to return on reads to an unmapped or nopped-out +address. Low means 0, high ~0. + + +4.3 Handler setting +~~~~~~~~~~~~~~~~~~~ + +4.3.1 Method on the current device +'''''''''''''''''''''''''''''''''' + +| (...).r(FUNC(my_device::read_method)) +| (...).w(FUNC(my_device::write_method)) +| (...).rw(FUNC(my_device::read_method), FUNC(my_device::write_method)) +| +| uNN my_device::read_method(address_space &space, offs_t offset, uNN mem_mask) +| uNN my_device::read_method(address_space &space, offs_t offset) +| uNN my_device::read_method(address_space &space) +| uNN my_device::read_method(offs_t offset, uNN mem_mask) +| uNN my_device::read_method(offs_t offset) +| uNN my_device::read_method() +| +| void my_device::write_method(address_space &space, offs_t offset, uNN data, uNN mem_mask) +| void my_device::write_method(address_space &space, offs_t offset, uNN data) +| void my_device::write_method(address_space &space, uNN data) +| void my_device::write_method(offs_t offset, uNN data, uNN mem_mask) +| void my_device::write_method(offs_t offset, uNN data) +| void my_device::write_method(uNN data) + +Sets a method of the current device or driver to read, write or both +for the current entry. The prototype of the method can take multiple +forms making some elements optional. uNN represents u8, u16, u32 or +u64 depending on the data width of the handler. The handler can be +less wide than the bus itself (for instance a 8-bits device on a +32-bits bus). + +The offset passed in is built from the access address. It starts at +zero at the start of the range, and increments for each uNN unit. An +u8 handler will get an offset in bytes, an u32 one in double words. +The mem_mask has its bits set where the accessors actually drives the +bit. It's usually built in byte units, but in some cases of i/o chips +ports with per-bit direction registers the resolution can be at the +bit level. + + +4.3.2 Method on a different device +'''''''''''''''''''''''''''''''''' + +| (...).r(m_other_device, FUNC(other_device::read_method)) +| (...).r("other-device-tag", FUNC(other_device::read_method)) +| (...).w(m_other_device, FUNC(other_device::write_method)) +| (...).w("other-device-tag", FUNC(other_device::write_method)) +| (...).rw(m_other_device, FUNC(other_device::read_method), FUNC(other_device::write_method)) +| (...).rw("other-device-tag", FUNC(other_device::read_method), FUNC(other_device::write_method)) + +Sets a method of another device, designated by a finder +(required_device or optional_device) or its tag, to read, write or +both for the current entry. + + +4.3.3 Lambda function +''''''''''''''''''''' + +| (...).lr{8,16,32,64}(FUNC([...](address_space &space, offs_t offset, uNN mem_mask) -> uNN { ... })) +| (...).lr{8,16,32,64}([...](address_space &space, offs_t offset, uNN mem_mask) -> uNN { ... }, "name") +| (...).lw{8,16,32,64}(FUNC([...](address_space &space, offs_t offset, uNN data, uNN mem_mask) -> void { ... })) +| (...).lw{8,16,32,64}([...](address_space &space, offs_t offset, uNN data, uNN mem_mask) -> void { ... }, "name") +| (...).lrw{8,16,32,64}(FUNC(read), FUNC(write)) +| (...).lrw{8,16,32,64}(read, "name_r", write, "name_w") + +Sets a lambda called on read, write or both. The lambda prototype can +be any of the 6 available for methods. One can either use FUNC() over +the whole lambda or provide a name after the lambda definition. The +number is the data width of the access, e.g. the NN. + + +4.3.4 Direct memory access +'''''''''''''''''''''''''' + +| (...).rom() +| (...).writeonly() +| (...).ram() + +Selects the range to access a memory zone as readonly, writeonly or +readwrite respectively. Specific handle qualifiers allow to tell +where this memory zone should be. There are two cases when no +qualifier is acceptable: + +* ram() gives an anonymous ram zone not accessibles outside of the + address space. + +* rom() when the memory map is used in an AS_PROGRAM + space of a (cpu) device which names is also the name of a region. + Then the memory zone points to that region at the offset + corresponding to the start of the zone. + +| (...).rom().region("name", offset) + +The region qualifier allows to make a readonly zone point to the +contents of a given region at a given offset. + +| (...).rom().share("name") +| (...).writeonly.share("name") +| (...).ram().share("name") + +The share qualifier allow to make the zone point to a shared memory +region defined by its name. If the region is present in multiple +spaces the size, the bus width and if the bus is more than byte-wide +the endianness must match. + + +4.3.5 Bank access +''''''''''''''''' + +| (...).bankr("name") +| (...).bankw("name") +| (...).bankrw("name") + +Sets the range to point at the contents of a bank is read, write or +readwrite mode. + + +4.3.6 Port access +''''''''''''''''' + +| (...).portr("name") +| (...).portw("name") +| (...).portrw("name") + +Sets the range to point at an i/o port. + + +4.3.7 Dropped access +'''''''''''''''''''' + +| (...).nopr() +| (...).nopw() +| (...).noprw() + +Sets the range to drop the access without logging. When reading, the +unmap value is returned. + + +4.3.8 Unmapped access +''''''''''''''''''''' + +| (...).unmapr() +| (...).unmapw() +| (...).unmaprw() + +Sets the range to drop the access with logging. When reading, the +unmap value is returned. + + +4.3.9 Subdevice mapping +''''''''''''''''''''''' + +| (...).m(m_other_device, FUNC(other_device::map_method)) +| (...).m("other-device-tag", FUNC(other_device::map_method)) + +Includes a device-defined submap. The start of the range indicates +where the address zero of the submap ends up, and the end of the range +clips the submap if needed. Note that range qualifiers (defined +later) apply. + +Currently, only handlers are allowed in submaps and not memory zones +or banks. + + +4.4 Range qualifiers +~~~~~~~~~~~~~~~~~~~~ + +4.4.1 Mirroring +''''''''''''''' + +| (...).mirror(mask) + +Duplicate the range on the addresses reachable by setting any of the 1 +bits present in mask. For instance, a range 0-0x1f with mask 0x300 +will be present on 0-0x1f, 0x100-0x11f, 0x200-0x21f and 0x300-0x31f. +The addresses passed in to the handler stay in the 0-0x1f range, the +mirror bits are not seen. + + +4.4.2 Masking +''''''''''''' + +| (...).mask(mask) + +Only valid with handlers, the address will be masked with the mask +before being passed to the handler. + + +4.4.3 Selection +''''''''''''''' + +| (...).select(mask) + +Only valid with handlers, the range will be mirrored as with mirror, +but the mirror address bits are kept in the offset passed to the +handler when it is called. This is useful for devices like sound +chips where the low bits of the address select a function and the high +bits a voice number. + + +4.4.4 Sub-unit selection +'''''''''''''''''''''''' + +| (...).umask16(16-bits mask) +| (...).umask32(32-bits mask) +| (...).umask64(64-bits mask) + +Only valid with handlers and submaps, selects which data lines of the +bus are actually connected to the handler or the device. The actual +device with should be a multiple of a byte, e.g. the mask is a series +of 00 and ff. The offset will be adjusted accordingly, so that a +difference of 1 means the next handled unit in the access. + +IF the mask is narrower than the bus width, the mask is replicated in +the upper lines. + + +4.4.5 Chip select handling on sub-unit +'''''''''''''''''''''''''''''''''''''' + +| (...).cselect(16/32/64) + +When a device is connected to part of the bus, like a byte on a +16-bits bus, the target handler is only activated when that part is +actually accessed. In some cases, very often byte access on a 68000 +16-bits bus, the actual hardware only checks the word address and not +if the correct byte is accessed. cswidth allows to tell the memory +system to trigger the handler if a wider part of the bus is accessed. +The parameter is that trigger width (would be 16 in the 68000 case). + + +5. Address space dynamic mapping API +------------------------------------ + +5.1 General API structure +~~~~~~~~~~~~~~~~~~~~~~~~~ + +A series of methods allow to change the bus decoding of an address +space on the fly. They're powerful but have some issues: +* changing the mappings repeateadly can be slow +* the address space state is not saved in the saved states, so it has to be rebuilt after state load +* they can be hidden anywhere rather that be grouped in an address map, which can be less readable + +The methods, rather than decomposing the information in handler, +handler qualifier and range qualifier puts them all together as method +parameters. To make things a little more readable lots of them are +optional though, the optional ones being written in italics. + + +5.2 Handler mapping +~~~~~~~~~~~~~~~~~~~ +| uNN my_device::read_method(address_space &space, offs_t offset, uNN mem_mask) +| uNN my_device::read_method_m(address_space &space, offs_t offset) +| uNN my_device::read_method_mo(address_space &space) +| uNN my_device::read_method_s(offs_t offset, uNN mem_mask) +| uNN my_device::read_method_sm(offs_t offset) +| uNN my_device::read_method_smo() +| +| void my_device::write_method(address_space &space, offs_t offset, uNN data, uNN mem_mask) +| void my_device::write_method_m(address_space &space, offs_t offset, uNN data) +| void my_device::write_method_mo(address_space &space, uNN data) +| void my_device::write_method_s(offs_t offset, uNN data, uNN mem_mask) +| void my_device::write_method_sm(offs_t offset, uNN data) +| void my_device::write_method_smo(uNN data) +| +| readNN_delegate (device, FUNC(read_method)) +| readNNm_delegate (device, FUNC(read_method_m)) +| readNNmo_delegate (device, FUNC(read_method_mo)) +| readNNs_delegate (device, FUNC(read_method_s)) +| readNNsm_delegate (device, FUNC(read_method_sm)) +| readNNsmo_delegate(device, FUNC(read_method_smo)) +| +| writeNN_delegate (device, FUNC(write_method)) +| writeNNm_delegate (device, FUNC(write_method_m)) +| writeNNmo_delegate (device, FUNC(write_method_mo)) +| writeNNs_delegate (device, FUNC(write_method_s)) +| writeNNsm_delegate (device, FUNC(write_method_sm)) +| writeNNsmo_delegate(device, FUNC(write_method_smo)) + +To be added to a map, a method call and the device it is called onto +have to be wrapped in the appropriate delegate type. There are 12 +types, for read and for write and for all six possible prototypes. +Note that as all delegates they can also wrap lambdas. + +| space.install_read_handler(addrstart, addrend, read_delegate, *unitmask*, *cswidth*) +| space.install_read_handler(addrstart, addrend, addrmask, addrmirror, addrselect, read_delegate, *unitmask*, *cswidth*) +| space.install_write_handler(addrstart, addrend, write_delegate, *unitmask*, *cswidth*) +| space.install_write_handler(addrstart, addrend, addrmask, addrmirror, addrselect, write_delegate, *unitmask*, *cswidth*) +| space.install_readwrite_handler(addrstart, addrend, read_delegate, write_delegate, *unitmask*, *cswidth*) +| space.install_readwrite_handler(addrstart, addrend, addrmask, addrmirror, addrselect, read_delegate, write_delegate, *unitmask*, *cswidth*) + +These six methods allow to install delegate-wrapped handlers in a live +address space. either plain of with mask, mirror and select. In the +readwrite case both delegates must be of the same flavor (smo stuff) +to avoid a combinatorial explosion of method types. + +5.3 Direct memory range mapping +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +| space.install_rom(addrstart, addrend, void \*pointer) +| space.install_rom(addrstart, addrend, addrmirror, void \*pointer) +| space.install_writeonly(addrstart, addrend, void \*pointer) +| space.install_writeonly(addrstart, addrend, addrmirror, void \*pointer) +| space.install_ram(addrstart, addrend, void \*pointer) +| space.install_ram(addrstart, addrend, addrmirror, void \*pointer) + +Installs a memory block in an address space, with or without mirror. +rom is readonly, ram is read/write, writeonly is write only. The +pointer must be non-null, this method will not allocate the memory. + +5.4 Bank mapping +~~~~~~~~~~~~~~~~ +| space.install_read_bank(addrstart, addrend, memory_bank \*bank) +| space.install_read_bank(addrstart, addrend, addrmirror, memory_bank \*bank) +| space.install_write_bank(addrstart, addrend, memory_bank \*bank) +| space.install_write_bank(addrstart, addrend, addrmirror, memory_bank \*bank) +| space.install_readwrite_bank(addrstart, addrend, memory_bank \*bank) +| space.install_readwrite_bank(addrstart, addrend, addrmirror, memory_bank \*bank) + +Install for reading, writing or both an existing memory bank in an +address space. + +5.5 Port mapping +~~~~~~~~~~~~~~~~ +| space.install_read_port(addrstart, addrend, const char \*rtag) +| space.install_read_port(addrstart, addrend, addrmirror, const char \*rtag) +| space.install_write_port(addrstart, addrend, const char \*wtag) +| space.install_write_port(addrstart, addrend, addrmirror, const char \*wtag) +| space.install_readwrite_port(addrstart, addrend, const char \*rtag, const char \*wtag) +| space.install_readwrite_port(addrstart, addrend, addrmirror, const char \*rtag, const char \*wtag) + +Install read, write or both ports by name. + +5.6 Dropped accesses +~~~~~~~~~~~~~~~~~~~~ +| space.nop_read(addrstart, addrend, *addrmirror*) +| space.nop_write(addrstart, addrend, *addrmirror*) +| space.nop_readwrite(addrstart, addrend, *addrmirror*) + +Drops the accesses for a given range with an optional mirror. + +5.7 Unmapped accesses +~~~~~~~~~~~~~~~~~~~~~ +| space.unmap_read(addrstart, addrend, *addrmirror*) +| space.unmap_write(addrstart, addrend, *addrmirror*) +| space.unmap_readwrite(addrstart, addrend, *addrmirror*) + +Unmaps the accesses (e.g. logs the access as unmapped) for a given +range with an optional mirror. + +5.8 Device map installation +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +| space.install_device(addrstart, addrend, device, map, *unitmask*, *cswidth*) + +Install a device address with an address map in a space. diff --git a/src/devices/bus/a1bus/a1bus.cpp b/src/devices/bus/a1bus/a1bus.cpp index cafc399b00f..43a05b892ab 100644 --- a/src/devices/bus/a1bus/a1bus.cpp +++ b/src/devices/bus/a1bus/a1bus.cpp @@ -129,11 +129,10 @@ void a1bus_device::install_device(offs_t start, offs_t end, read8sm_delegate rha m_space->install_readwrite_handler(start, end, rhandler, whandler); } -void a1bus_device::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data) +void a1bus_device::install_bank(offs_t start, offs_t end, uint8_t *data) { // printf("install_bank: %s @ %x->%x\n", tag, start, end); - m_space->install_readwrite_bank(start, end, tag); - machine().root_device().membank(siblingtag(tag).c_str())->set_base(data); + m_space->install_ram(start, end, data); } // interrupt request from a1bus card @@ -195,7 +194,7 @@ void device_a1bus_card_interface::install_device(offs_t start, offs_t end, read8 m_a1bus->install_device(start, end, rhandler, whandler); } -void device_a1bus_card_interface::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data) +void device_a1bus_card_interface::install_bank(offs_t start, offs_t end, uint8_t *data) { - m_a1bus->install_bank(start, end, tag, data); + m_a1bus->install_bank(start, end, data); } diff --git a/src/devices/bus/a1bus/a1bus.h b/src/devices/bus/a1bus/a1bus.h index 8c354b89f43..d1d4860113d 100644 --- a/src/devices/bus/a1bus/a1bus.h +++ b/src/devices/bus/a1bus/a1bus.h @@ -69,7 +69,7 @@ public: void set_nmi_line(int state); void install_device(offs_t start, offs_t end, read8sm_delegate rhandler, write8sm_delegate whandler); - void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data); + void install_bank(offs_t start, offs_t end, uint8_t *data); DECLARE_WRITE_LINE_MEMBER( irq_w ); DECLARE_WRITE_LINE_MEMBER( nmi_w ); @@ -118,7 +118,7 @@ protected: void lower_slot_nmi() { m_a1bus->set_nmi_line(CLEAR_LINE); } void install_device(offs_t start, offs_t end, read8sm_delegate rhandler, write8sm_delegate whandler); - void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data); + void install_bank(offs_t start, offs_t end, uint8_t *data); device_a1bus_card_interface(const machine_config &mconfig, device_t &device); diff --git a/src/devices/bus/a1bus/a1cassette.cpp b/src/devices/bus/a1bus/a1cassette.cpp index 9ab13fb755d..f486105c6e5 100644 --- a/src/devices/bus/a1bus/a1cassette.cpp +++ b/src/devices/bus/a1bus/a1cassette.cpp @@ -76,7 +76,7 @@ a1bus_cassette_device::a1bus_cassette_device(const machine_config &mconfig, devi void a1bus_cassette_device::device_start() { install_device(0xc000, 0xc0ff, read8sm_delegate(*this, FUNC(a1bus_cassette_device::cassette_r)), write8sm_delegate(*this, FUNC(a1bus_cassette_device::cassette_w))); - install_bank(0xc100, 0xc1ff, "bank_a1cas", &m_rom[0]); + install_bank(0xc100, 0xc1ff, &m_rom[0]); save_item(NAME(m_cassette_output_flipflop)); } diff --git a/src/devices/bus/a1bus/a1cffa.cpp b/src/devices/bus/a1bus/a1cffa.cpp index 4d7f020c030..5656509a62d 100644 --- a/src/devices/bus/a1bus/a1cffa.cpp +++ b/src/devices/bus/a1bus/a1cffa.cpp @@ -69,7 +69,7 @@ a1bus_cffa_device::a1bus_cffa_device(const machine_config &mconfig, device_type void a1bus_cffa_device::device_start() { install_device(0xafe0, 0xafff, read8sm_delegate(*this, FUNC(a1bus_cffa_device::cffa_r)), write8sm_delegate(*this, FUNC(a1bus_cffa_device::cffa_w))); - install_bank(0x9000, 0xafdf, "bank_cffa1", &m_rom[0]); + install_bank(0x9000, 0xafdf, &m_rom[0]); save_item(NAME(m_lastdata)); save_item(NAME(m_writeprotect)); diff --git a/src/devices/bus/abcbus/ram.cpp b/src/devices/bus/abcbus/ram.cpp index 4886f46defa..563964041c5 100644 --- a/src/devices/bus/abcbus/ram.cpp +++ b/src/devices/bus/abcbus/ram.cpp @@ -30,7 +30,7 @@ DEFINE_DEVICE_TYPE(ABC80_16KB_RAM_CARD, abc80_16kb_ram_card_device, "abc80_16kb" abc80_16kb_ram_card_device::abc80_16kb_ram_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, ABC80_16KB_RAM_CARD, tag, owner, clock), device_abcbus_card_interface(mconfig, *this), - m_ram(*this, "ram") + m_ram(*this, "ram", 0x4000, ENDIANNESS_LITTLE) { } @@ -41,7 +41,6 @@ abc80_16kb_ram_card_device::abc80_16kb_ram_card_device(const machine_config &mco void abc80_16kb_ram_card_device::device_start() { - m_ram.allocate(0x4000); } diff --git a/src/devices/bus/abcbus/ram.h b/src/devices/bus/abcbus/ram.h index cddb07182c7..ddb191cd5cf 100644 --- a/src/devices/bus/abcbus/ram.h +++ b/src/devices/bus/abcbus/ram.h @@ -37,7 +37,7 @@ protected: virtual void abcbus_xmemw(offs_t offset, uint8_t data) override; private: - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; }; diff --git a/src/devices/bus/abcbus/ssa.cpp b/src/devices/bus/abcbus/ssa.cpp index 3de6119a3d9..bc15c0852cb 100644 --- a/src/devices/bus/abcbus/ssa.cpp +++ b/src/devices/bus/abcbus/ssa.cpp @@ -121,7 +121,7 @@ abc_super_smartaid_device::abc_super_smartaid_device(const machine_config &mconf m_rom_1(*this, "ssa1"), m_rom_2(*this, "ssa2"), m_prom(*this, "ssa3"), - m_nvram(*this, "nvram"), + m_nvram(*this, "nvram", 0x800, ENDIANNESS_LITTLE), m_rom_bank(0), m_prom_bank(0) { @@ -144,9 +144,6 @@ void abc_super_smartaid_device::device_start() m_rom_2->base()[i] = bitswap<8>(m_rom_2->base()[i], 2, 6, 1, 4, 3, 5, 7, 0); } - // allocate memory - m_nvram.allocate(0x800); - // state saving save_item(NAME(m_rom_bank)); save_item(NAME(m_prom_bank)); diff --git a/src/devices/bus/abcbus/ssa.h b/src/devices/bus/abcbus/ssa.h index 7de5ade5950..2eceb3ad0dd 100644 --- a/src/devices/bus/abcbus/ssa.h +++ b/src/devices/bus/abcbus/ssa.h @@ -41,8 +41,8 @@ protected: // device_nvram_interface overrides virtual void nvram_default() override { } - virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.bytes()); } } - virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.bytes()); } } + virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.share()->bytes()); } } + virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.share()->bytes()); } } // device_abcbus_interface overrides virtual void abcbus_cs(uint8_t data) override { m_bus->write_cs(data); } @@ -61,7 +61,7 @@ private: required_memory_region m_rom_1; required_memory_region m_rom_2; required_memory_region m_prom; - optional_shared_ptr<uint8_t> m_nvram; + memory_share_creator<uint8_t> m_nvram; uint8_t m_rom_bank; uint8_t m_prom_bank; }; diff --git a/src/devices/bus/acorn/atom/discpack.cpp b/src/devices/bus/acorn/atom/discpack.cpp index dd8d3021301..c7010454e78 100644 --- a/src/devices/bus/acorn/atom/discpack.cpp +++ b/src/devices/bus/acorn/atom/discpack.cpp @@ -85,10 +85,11 @@ void atom_discpack_device::device_start() space.install_device(0x0a00, 0x0a03, *m_fdc, &i8271_device::map); space.install_readwrite_handler(0x0a04, 0x0a04, 0, 0x1f8, 0, read8smo_delegate(*m_fdc, FUNC(i8271_device::data_r)), write8smo_delegate(*m_fdc, FUNC(i8271_device::data_w))); - space.install_ram(0x2000, 0x23ff); - space.install_ram(0x2400, 0x27ff); - space.install_ram(0x3c00, 0x3fff); + space.install_ram(0x2000, 0x27ff, m_ram); + space.install_ram(0x3c00, 0x3fff, m_ram+0x800); space.install_rom(0xe000, 0xefff, m_dos_rom->base()); + + save_item(NAME(m_ram)); } diff --git a/src/devices/bus/acorn/atom/discpack.h b/src/devices/bus/acorn/atom/discpack.h index 3f06870f87c..a55abce3278 100644 --- a/src/devices/bus/acorn/atom/discpack.h +++ b/src/devices/bus/acorn/atom/discpack.h @@ -47,6 +47,8 @@ private: required_memory_region m_dos_rom; required_device<i8271_device> m_fdc; required_device_array<floppy_connector, 2> m_floppy; + + u8 m_ram[0x800 + 0x400]; }; diff --git a/src/devices/bus/acorn/system/32k.cpp b/src/devices/bus/acorn/system/32k.cpp index c74d60cc863..00eb80050e9 100644 --- a/src/devices/bus/acorn/system/32k.cpp +++ b/src/devices/bus/acorn/system/32k.cpp @@ -73,6 +73,7 @@ acorn_32k_device::acorn_32k_device(const machine_config &mconfig, const char *ta void acorn_32k_device::device_start() { + save_item(NAME(m_ram)); } //------------------------------------------------- @@ -85,11 +86,11 @@ void acorn_32k_device::device_reset() if (m_links->read()) { - space.install_ram(0x8000, 0xbfff); + space.install_ram(0x8000, 0xbfff, m_ram); } else { - space.install_ram(0x2000, 0x7fff); - space.install_ram(0xc000, 0xdfff); + space.install_ram(0x2000, 0x7fff, m_ram); + space.install_ram(0xc000, 0xdfff, m_ram + 0x6000); } } diff --git a/src/devices/bus/acorn/system/32k.h b/src/devices/bus/acorn/system/32k.h index 0ef4c10f3c3..f3d3b76be5c 100644 --- a/src/devices/bus/acorn/system/32k.h +++ b/src/devices/bus/acorn/system/32k.h @@ -38,6 +38,7 @@ protected: private: required_ioport m_links; + u8 m_ram[32768]; }; diff --git a/src/devices/bus/acorn/system/8k.cpp b/src/devices/bus/acorn/system/8k.cpp index 97939b7362f..ecbd69c930f 100644 --- a/src/devices/bus/acorn/system/8k.cpp +++ b/src/devices/bus/acorn/system/8k.cpp @@ -98,6 +98,7 @@ acorn_8k_device::acorn_8k_device(const machine_config &mconfig, const char *tag, void acorn_8k_device::device_start() { + save_item(NAME(m_ram)); } //------------------------------------------------- @@ -112,11 +113,11 @@ void acorn_8k_device::device_reset() if (ram_addr == 0x0000) // BLK0 { - space.install_ram(0x1000, 0x1fff); + space.install_ram(0x1000, 0x1fff, m_ram); } else { - space.install_ram(ram_addr, ram_addr + 0x1fff); + space.install_ram(ram_addr, ram_addr + 0x1fff, m_ram); } uint16_t rom_addr = (m_links->read() & 0xf0) << 9; diff --git a/src/devices/bus/acorn/system/8k.h b/src/devices/bus/acorn/system/8k.h index 125b636cd5b..09f089c1563 100644 --- a/src/devices/bus/acorn/system/8k.h +++ b/src/devices/bus/acorn/system/8k.h @@ -47,6 +47,7 @@ private: required_device_array<generic_slot_device, 2> m_rom; required_ioport m_links; + u8 m_ram[8192]; }; diff --git a/src/devices/bus/adam/exp.cpp b/src/devices/bus/adam/exp.cpp index a6c8b777402..59c677144f3 100644 --- a/src/devices/bus/adam/exp.cpp +++ b/src/devices/bus/adam/exp.cpp @@ -36,8 +36,7 @@ DEFINE_DEVICE_TYPE(ADAM_EXPANSION_SLOT, adam_expansion_slot_device, "adam_expans //------------------------------------------------- device_adam_expansion_slot_card_interface::device_adam_expansion_slot_card_interface(const machine_config &mconfig, device_t &device) : - device_interface(device, "adamexp"), - m_rom(*this, "rom") + device_interface(device, "adamexp") { m_slot = dynamic_cast<adam_expansion_slot_device *>(device.owner()); } diff --git a/src/devices/bus/adam/exp.h b/src/devices/bus/adam/exp.h index 69ed921d5d5..ee74bf0396a 100644 --- a/src/devices/bus/adam/exp.h +++ b/src/devices/bus/adam/exp.h @@ -100,7 +100,7 @@ protected: adam_expansion_slot_device *m_slot; - optional_shared_ptr<uint8_t> m_rom; + std::unique_ptr<uint8_t[]> m_rom; }; diff --git a/src/devices/bus/adam/ram.cpp b/src/devices/bus/adam/ram.cpp index a7e79719867..65dc13f2246 100644 --- a/src/devices/bus/adam/ram.cpp +++ b/src/devices/bus/adam/ram.cpp @@ -30,7 +30,7 @@ DEFINE_DEVICE_TYPE(ADAM_RAM, adam_ram_expansion_device, "adam_ram", "Adam 64KB R adam_ram_expansion_device::adam_ram_expansion_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, ADAM_RAM, tag, owner, clock), device_adam_expansion_slot_card_interface(mconfig, *this), - m_ram(*this, "ram") + m_ram(*this, "ram", 0x10000, ENDIANNESS_LITTLE) { } @@ -41,7 +41,6 @@ adam_ram_expansion_device::adam_ram_expansion_device(const machine_config &mconf void adam_ram_expansion_device::device_start() { - m_ram.allocate(0x10000); } diff --git a/src/devices/bus/adam/ram.h b/src/devices/bus/adam/ram.h index 780d51be726..c1997bf77c4 100644 --- a/src/devices/bus/adam/ram.h +++ b/src/devices/bus/adam/ram.h @@ -37,7 +37,7 @@ protected: virtual void adam_bd_w(offs_t offset, uint8_t data, int bmreq, int biorq, int aux_rom_cs, int cas1, int cas2) override; private: - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; }; diff --git a/src/devices/bus/bw2/ramcard.cpp b/src/devices/bus/bw2/ramcard.cpp index b1e0bfe5bcf..33d1fc147d9 100644 --- a/src/devices/bus/bw2/ramcard.cpp +++ b/src/devices/bus/bw2/ramcard.cpp @@ -51,7 +51,7 @@ bw2_ramcard_device::bw2_ramcard_device(const machine_config &mconfig, const char : device_t(mconfig, BW2_RAMCARD, tag, owner, clock), device_bw2_expansion_slot_interface(mconfig, *this), m_rom(*this, "ramcard"), - m_ram(*this, "ram"), + m_ram(*this, "ram", 512*1024, ENDIANNESS_LITTLE), m_en(0), m_bank(0) { @@ -64,9 +64,6 @@ bw2_ramcard_device::bw2_ramcard_device(const machine_config &mconfig, const char void bw2_ramcard_device::device_start() { - // allocate memory - m_ram.allocate(512 * 1024); - // state saving save_item(NAME(m_en)); save_item(NAME(m_bank)); diff --git a/src/devices/bus/bw2/ramcard.h b/src/devices/bus/bw2/ramcard.h index 029d9b91feb..f3cd95f38d4 100644 --- a/src/devices/bus/bw2/ramcard.h +++ b/src/devices/bus/bw2/ramcard.h @@ -43,7 +43,7 @@ protected: private: required_memory_region m_rom; - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; int m_en; uint8_t m_bank; diff --git a/src/devices/bus/c64/c128_partner.cpp b/src/devices/bus/c64/c128_partner.cpp index 91b7cf751ab..808926d8583 100644 --- a/src/devices/bus/c64/c128_partner.cpp +++ b/src/devices/bus/c64/c128_partner.cpp @@ -80,7 +80,8 @@ ioport_constructor c128_partner_cartridge_device::device_input_ports() const c128_partner_cartridge_device::c128_partner_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, C128_PARTNER, tag, owner, clock), device_c64_expansion_card_interface(mconfig, *this), - m_ram(*this, "ram"), t_joyb2(nullptr), + m_ram(*this, "ram", 0x2000, ENDIANNESS_LITTLE), + t_joyb2(nullptr), m_ram_a12_a7(0), m_ls74_cd(0), m_ls74_q1(0), @@ -96,9 +97,6 @@ c128_partner_cartridge_device::c128_partner_cartridge_device(const machine_confi void c128_partner_cartridge_device::device_start() { - // allocate memory - m_ram.allocate(0x2000); - // simulate the 16.7ms pulse from CIA1 PB2 that would arrive thru the joystick port dongle t_joyb2 = timer_alloc(); t_joyb2->adjust(attotime::from_msec(16), 0, attotime::from_msec(16)); diff --git a/src/devices/bus/c64/c128_partner.h b/src/devices/bus/c64/c128_partner.h index 1f4402d5b22..da906531122 100644 --- a/src/devices/bus/c64/c128_partner.h +++ b/src/devices/bus/c64/c128_partner.h @@ -49,7 +49,7 @@ protected: virtual void vcs_joy_w(uint8_t data); private: - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; emu_timer *t_joyb2; int m_ram_a12_a7; diff --git a/src/devices/bus/c64/dqbb.cpp b/src/devices/bus/c64/dqbb.cpp index 20adedd9057..6f7e2bf7dab 100644 --- a/src/devices/bus/c64/dqbb.cpp +++ b/src/devices/bus/c64/dqbb.cpp @@ -53,7 +53,8 @@ c64_dqbb_cartridge_device::c64_dqbb_cartridge_device(const machine_config &mconf void c64_dqbb_cartridge_device::device_start() { // allocate memory - m_nvram.allocate(0x4000); + m_nvram = std::make_unique<uint8_t[]>(0x4000); + save_pointer(NAME(m_nvram.get()), 0x4000); // state saving save_item(NAME(m_cs)); diff --git a/src/devices/bus/c64/dqbb.h b/src/devices/bus/c64/dqbb.h index aaa8c0e1bf4..af9460a5bbe 100644 --- a/src/devices/bus/c64/dqbb.h +++ b/src/devices/bus/c64/dqbb.h @@ -38,8 +38,8 @@ protected: // device_nvram_interface overrides virtual void nvram_default() override { } - virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.bytes()); } } - virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.bytes()); } } + virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram.get(), 0x4000); } } + virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram.get(), 0x4000); } } // device_c64_expansion_card_interface overrides virtual uint8_t c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override; diff --git a/src/devices/bus/c64/easyflash.cpp b/src/devices/bus/c64/easyflash.cpp index 38cdf9739c6..eab9ff7930a 100644 --- a/src/devices/bus/c64/easyflash.cpp +++ b/src/devices/bus/c64/easyflash.cpp @@ -77,7 +77,7 @@ c64_easyflash_cartridge_device::c64_easyflash_cartridge_device(const machine_con m_flash_roml(*this, AM29F040_0_TAG), m_flash_romh(*this, AM29F040_1_TAG), m_jp1(*this, "JP1"), - m_ram(*this, "ram"), + m_ram(*this, "ram", 0x100, ENDIANNESS_LITTLE), m_bank(0), m_mode(0) { @@ -90,9 +90,6 @@ c64_easyflash_cartridge_device::c64_easyflash_cartridge_device(const machine_con void c64_easyflash_cartridge_device::device_start() { - // allocate memory - m_ram.allocate(0x100); - // state saving save_item(NAME(m_bank)); save_item(NAME(m_mode)); diff --git a/src/devices/bus/c64/easyflash.h b/src/devices/bus/c64/easyflash.h index 377de25d50d..6c73a14838a 100644 --- a/src/devices/bus/c64/easyflash.h +++ b/src/devices/bus/c64/easyflash.h @@ -49,7 +49,7 @@ private: required_device<amd_29f040_device> m_flash_roml; required_device<amd_29f040_device> m_flash_romh; required_ioport m_jp1; - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; uint8_t m_bank; uint8_t m_mode; diff --git a/src/devices/bus/c64/exp.cpp b/src/devices/bus/c64/exp.cpp index 3c5663db036..8304a7be6b7 100644 --- a/src/devices/bus/c64/exp.cpp +++ b/src/devices/bus/c64/exp.cpp @@ -29,10 +29,6 @@ DEFINE_DEVICE_TYPE(C64_EXPANSION_SLOT, c64_expansion_slot_device, "c64_expansion device_c64_expansion_card_interface::device_c64_expansion_card_interface(const machine_config &mconfig, device_t &device) : device_interface(device, "c64exp"), - m_roml(*this, "roml"), - m_romh(*this, "romh"), - m_romx(*this, "romx"), - m_nvram(*this, "nvram"), m_game(1), m_exrom(1) { @@ -148,11 +144,11 @@ image_init_result c64_expansion_slot_device::call_load() uint8_t *roml = nullptr; uint8_t *romh = nullptr; - m_card->m_roml.allocate(roml_size); - m_card->m_romh.allocate(romh_size); + m_card->m_roml = std::make_unique<uint8_t[]>(roml_size); + m_card->m_romh = std::make_unique<uint8_t[]>(romh_size); - if (roml_size) roml = m_card->m_roml; - if (romh_size) romh = m_card->m_roml; + if (roml_size) roml = m_card->m_roml.get(); + if (romh_size) romh = m_card->m_romh.get(); cbm_crt_read_data(image_core_file(), roml, romh); } diff --git a/src/devices/bus/c64/exp.h b/src/devices/bus/c64/exp.h index 2507227d724..29e79fb1ff8 100644 --- a/src/devices/bus/c64/exp.h +++ b/src/devices/bus/c64/exp.h @@ -148,10 +148,10 @@ public: protected: device_c64_expansion_card_interface(const machine_config &mconfig, device_t &device); - optional_shared_ptr<uint8_t> m_roml; - optional_shared_ptr<uint8_t> m_romh; - optional_shared_ptr<uint8_t> m_romx; - optional_shared_ptr<uint8_t> m_nvram; + std::unique_ptr<uint8_t[]> m_roml; + std::unique_ptr<uint8_t[]> m_romh; + std::unique_ptr<uint8_t[]> m_romx; + std::unique_ptr<uint8_t[]> m_nvram; int m_game; int m_exrom; diff --git a/src/devices/bus/c64/fcc.cpp b/src/devices/bus/c64/fcc.cpp index 405c1761a2e..13b42122a03 100644 --- a/src/devices/bus/c64/fcc.cpp +++ b/src/devices/bus/c64/fcc.cpp @@ -97,6 +97,7 @@ c64_final_chesscard_device::c64_final_chesscard_device(const machine_config &mco void c64_final_chesscard_device::device_start() { + m_nvram = std::make_unique<uint8_t[]>(0x2000); // state saving save_item(NAME(m_bank)); save_item(NAME(m_hidden)); diff --git a/src/devices/bus/c64/fcc.h b/src/devices/bus/c64/fcc.h index 03eac948a73..15a096f5cf5 100644 --- a/src/devices/bus/c64/fcc.h +++ b/src/devices/bus/c64/fcc.h @@ -42,8 +42,8 @@ protected: // device_nvram_interface overrides virtual void nvram_default() override { } - virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.bytes()); } } - virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.bytes()); } } + virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram.get(), 0x2000); } } + virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram.get(), 0x2000); } } // device_c64_expansion_card_interface overrides virtual uint8_t c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override; @@ -59,8 +59,8 @@ private: DECLARE_WRITE_LINE_MEMBER(mainlatch_int) { m_slot->nmi_w(state); } uint8_t rom_r(offs_t offset) { return m_romx[offset]; } // cartridge cpu rom - uint8_t nvram_r(offs_t offset) { return m_nvram[offset & m_nvram.mask()]; } - void nvram_w(offs_t offset, uint8_t data) { m_nvram[offset & m_nvram.mask()] = data; } + uint8_t nvram_r(offs_t offset) { return m_nvram[offset & 0x1fff]; } + void nvram_w(offs_t offset, uint8_t data) { m_nvram[offset & 0x1fff] = data; } void c64_fcc_map(address_map &map); }; diff --git a/src/devices/bus/c64/georam.cpp b/src/devices/bus/c64/georam.cpp index 6bf8a16a1d8..377bc10a391 100644 --- a/src/devices/bus/c64/georam.cpp +++ b/src/devices/bus/c64/georam.cpp @@ -30,7 +30,7 @@ DEFINE_DEVICE_TYPE(C64_GEORAM, c64_georam_cartridge_device, "c64_georam", "C64 G c64_georam_cartridge_device::c64_georam_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, C64_GEORAM, tag, owner, clock), device_c64_expansion_card_interface(mconfig, *this), - m_ram(*this, "ram"), + m_ram(*this, "ram", 0x80000, ENDIANNESS_LITTLE), m_bank(0) { } @@ -42,9 +42,6 @@ c64_georam_cartridge_device::c64_georam_cartridge_device(const machine_config &m void c64_georam_cartridge_device::device_start() { - // allocate memory - m_ram.allocate(0x80000); - // state saving save_item(NAME(m_bank)); } diff --git a/src/devices/bus/c64/georam.h b/src/devices/bus/c64/georam.h index 03967625c23..41b7fd82379 100644 --- a/src/devices/bus/c64/georam.h +++ b/src/devices/bus/c64/georam.h @@ -39,7 +39,7 @@ protected: virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override; private: - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; uint16_t m_bank; }; diff --git a/src/devices/bus/c64/ide64.cpp b/src/devices/bus/c64/ide64.cpp index 73e14ea6b99..830f38c3993 100644 --- a/src/devices/bus/c64/ide64.cpp +++ b/src/devices/bus/c64/ide64.cpp @@ -93,7 +93,8 @@ c64_ide64_cartridge_device::c64_ide64_cartridge_device(const machine_config &mco m_rtc(*this, DS1302_TAG), m_ata(*this, ATA_TAG), m_jp1(*this, "JP1"), - m_ram(*this, "ram"), m_bank(0), m_ata_data(0), m_wp(0), m_enable(0) + m_ram(*this, "ram", 0x8000, ENDIANNESS_LITTLE), + m_bank(0), m_ata_data(0), m_wp(0), m_enable(0) { } @@ -104,9 +105,6 @@ c64_ide64_cartridge_device::c64_ide64_cartridge_device(const machine_config &mco void c64_ide64_cartridge_device::device_start() { - // allocate memory - m_ram.allocate(0x8000); - // state saving save_item(NAME(m_bank)); save_item(NAME(m_ata_data)); diff --git a/src/devices/bus/c64/ide64.h b/src/devices/bus/c64/ide64.h index 366357868b9..9438e3a1ed0 100644 --- a/src/devices/bus/c64/ide64.h +++ b/src/devices/bus/c64/ide64.h @@ -53,7 +53,7 @@ private: required_device<ds1302_device> m_rtc; required_device<ata_interface_device> m_ata; required_ioport m_jp1; - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; uint8_t m_bank; uint16_t m_ata_data; diff --git a/src/devices/bus/c64/magic_formel.cpp b/src/devices/bus/c64/magic_formel.cpp index 8d43fd05810..1e6c38d1685 100644 --- a/src/devices/bus/c64/magic_formel.cpp +++ b/src/devices/bus/c64/magic_formel.cpp @@ -157,7 +157,7 @@ c64_magic_formel_cartridge_device::c64_magic_formel_cartridge_device(const machi device_t(mconfig, C64_MAGIC_FORMEL, tag, owner, clock), device_c64_expansion_card_interface(mconfig, *this), m_pia(*this, MC6821_TAG), - m_ram(*this, "ram"), + m_ram(*this, "ram", 0x2000, ENDIANNESS_LITTLE), m_rom_bank(0), m_ram_bank(0), m_ram_oe(0), @@ -174,9 +174,6 @@ c64_magic_formel_cartridge_device::c64_magic_formel_cartridge_device(const machi void c64_magic_formel_cartridge_device::device_start() { - // allocate memory - m_ram.allocate(0x2000); - // state saving save_item(NAME(m_rom_bank)); save_item(NAME(m_ram_bank)); diff --git a/src/devices/bus/c64/magic_formel.h b/src/devices/bus/c64/magic_formel.h index 43fb7c69fe5..ab16d4a0e34 100644 --- a/src/devices/bus/c64/magic_formel.h +++ b/src/devices/bus/c64/magic_formel.h @@ -51,7 +51,7 @@ private: DECLARE_WRITE_LINE_MEMBER( pia_cb2_w ); required_device<pia6821_device> m_pia; - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; uint8_t m_rom_bank; uint8_t m_ram_bank; diff --git a/src/devices/bus/c64/neoram.cpp b/src/devices/bus/c64/neoram.cpp index 4cb34cbbb57..c0f292da161 100644 --- a/src/devices/bus/c64/neoram.cpp +++ b/src/devices/bus/c64/neoram.cpp @@ -43,7 +43,7 @@ c64_neoram_cartridge_device::c64_neoram_cartridge_device(const machine_config &m void c64_neoram_cartridge_device::device_start() { // allocate memory - m_nvram.allocate(0x200000); + m_nvram = std::make_unique<uint8_t[]>(0x200000); // state saving save_item(NAME(m_bank)); diff --git a/src/devices/bus/c64/neoram.h b/src/devices/bus/c64/neoram.h index d5058b878b7..b6729ec08d4 100644 --- a/src/devices/bus/c64/neoram.h +++ b/src/devices/bus/c64/neoram.h @@ -37,8 +37,8 @@ protected: // device_nvram_interface overrides virtual void nvram_default() override { } - virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.bytes()); } } - virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.bytes()); } } + virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram.get(), 0x200000); } } + virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram.get(), 0x200000); } } // device_c64_expansion_card_interface overrides virtual uint8_t c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override; diff --git a/src/devices/bus/c64/ocean.cpp b/src/devices/bus/c64/ocean.cpp index 92b18de6a51..d267a9912fa 100644 --- a/src/devices/bus/c64/ocean.cpp +++ b/src/devices/bus/c64/ocean.cpp @@ -84,15 +84,15 @@ void c64_ocean_cartridge_device::device_reset() uint8_t c64_ocean_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) { - if (!roml && m_roml.bytes()) + if (!roml && m_roml) { offs_t addr = (m_bank << 13) | (offset & 0x1fff); - data = m_roml[addr & m_roml.mask()]; + data = m_roml[addr]; } - else if (!romh && m_romh.bytes()) + else if (!romh && m_romh) { offs_t addr = (m_bank << 13) | (offset & 0x1fff); - data = m_romh[addr & m_romh.mask()]; + data = m_romh[addr]; } else if (!io1) { diff --git a/src/devices/bus/c64/pagefox.cpp b/src/devices/bus/c64/pagefox.cpp index 80264aab13b..e33bb4d3d7b 100644 --- a/src/devices/bus/c64/pagefox.cpp +++ b/src/devices/bus/c64/pagefox.cpp @@ -52,7 +52,8 @@ DEFINE_DEVICE_TYPE(C64_PAGEFOX, c64_pagefox_cartridge_device, "c64_pagefox", "C6 c64_pagefox_cartridge_device::c64_pagefox_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, C64_PAGEFOX, tag, owner, clock), device_c64_expansion_card_interface(mconfig, *this), - m_ram(*this, "ram"), m_bank(0) + m_ram(*this, "ram", 0x8000, ENDIANNESS_LITTLE), + m_bank(0) { } @@ -63,9 +64,6 @@ c64_pagefox_cartridge_device::c64_pagefox_cartridge_device(const machine_config void c64_pagefox_cartridge_device::device_start() { - // allocate memory - m_ram.allocate(0x8000); - // state saving save_item(NAME(m_bank)); } diff --git a/src/devices/bus/c64/pagefox.h b/src/devices/bus/c64/pagefox.h index 74ed5a4edf0..b0295eb9d0d 100644 --- a/src/devices/bus/c64/pagefox.h +++ b/src/devices/bus/c64/pagefox.h @@ -39,7 +39,7 @@ protected: virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override; private: - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; uint8_t m_bank; }; diff --git a/src/devices/bus/c64/partner.cpp b/src/devices/bus/c64/partner.cpp index 55e4d07f3e1..b77cf610d17 100644 --- a/src/devices/bus/c64/partner.cpp +++ b/src/devices/bus/c64/partner.cpp @@ -80,7 +80,7 @@ ioport_constructor c64_partner_cartridge_device::device_input_ports() const c64_partner_cartridge_device::c64_partner_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, C64_PARTNER, tag, owner, clock), device_c64_expansion_card_interface(mconfig, *this), - m_ram(*this, "ram"), + m_ram(*this, "ram", 0x2000, ENDIANNESS_LITTLE), m_a0(1), m_a6(1), m_nmi(0) @@ -94,8 +94,6 @@ c64_partner_cartridge_device::c64_partner_cartridge_device(const machine_config void c64_partner_cartridge_device::device_start() { - // allocate memory - m_ram.allocate(0x2000); } diff --git a/src/devices/bus/c64/partner.h b/src/devices/bus/c64/partner.h index 6ecf4503a91..4dd71542571 100644 --- a/src/devices/bus/c64/partner.h +++ b/src/devices/bus/c64/partner.h @@ -44,7 +44,7 @@ protected: virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw) override; private: - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; int m_a0; int m_a6; diff --git a/src/devices/bus/c64/reu.cpp b/src/devices/bus/c64/reu.cpp index cc51b99e096..0d24a1967fa 100644 --- a/src/devices/bus/c64/reu.cpp +++ b/src/devices/bus/c64/reu.cpp @@ -53,7 +53,7 @@ c64_reu_cartridge_device::c64_reu_cartridge_device(const machine_config &mconfig device_c64_expansion_card_interface(mconfig, *this), m_dmac(*this, MOS8726R1_TAG), m_eprom(*this, "rom"), - m_ram(*this, "ram"), + m_ram(*this, "ram", ram_size, ENDIANNESS_LITTLE), m_variant(variant), m_jp1(jp1), m_ram_size(ram_size) @@ -76,9 +76,6 @@ c64_reu1764_cartridge_device::c64_reu1764_cartridge_device(const machine_config void c64_reu_cartridge_device::device_start() { - // allocate memory - m_ram.allocate(m_ram_size); - // setup DMA controller m_dmac->set_unscaled_clock(m_slot->phi2()); m_dmac->bs_w(m_jp1); diff --git a/src/devices/bus/c64/reu.h b/src/devices/bus/c64/reu.h index 0cbb67d9576..eaa662f38a1 100644 --- a/src/devices/bus/c64/reu.h +++ b/src/devices/bus/c64/reu.h @@ -52,7 +52,7 @@ protected: required_device<mos8726_device> m_dmac; required_device<generic_slot_device> m_eprom; - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; int m_variant; int m_jp1; diff --git a/src/devices/bus/c64/ross.cpp b/src/devices/bus/c64/ross.cpp index 25c1a996df8..e8703a33bcc 100644 --- a/src/devices/bus/c64/ross.cpp +++ b/src/devices/bus/c64/ross.cpp @@ -68,7 +68,7 @@ uint8_t c64_ross_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sph { offs_t addr = (m_bank << 14) | (offset & 0x3fff); - data = m_roml[addr & m_roml.mask()]; + data = m_roml[addr]; } return data; diff --git a/src/devices/bus/c64/std.cpp b/src/devices/bus/c64/std.cpp index 08f4c1d65e0..95d472bfbfd 100644 --- a/src/devices/bus/c64/std.cpp +++ b/src/devices/bus/c64/std.cpp @@ -49,19 +49,19 @@ void c64_standard_cartridge_device::device_start() uint8_t c64_standard_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) { - if (!roml && m_roml.bytes()) + if (!roml && m_roml) { - data = m_roml[offset & m_roml.mask()]; + data = m_roml[offset]; } else if (!romh) { - if (m_romh.bytes()) + if (m_romh) { - data = m_romh[offset & m_romh.mask()]; + data = m_romh[offset]; } - else if (m_roml.mask() == 0x3fff) + else if (m_roml) { - data = m_roml[offset & m_roml.mask()]; + data = m_roml[offset]; } } diff --git a/src/devices/bus/c64/westermann.cpp b/src/devices/bus/c64/westermann.cpp index ac254733f01..33b22c06942 100644 --- a/src/devices/bus/c64/westermann.cpp +++ b/src/devices/bus/c64/westermann.cpp @@ -61,17 +61,17 @@ uint8_t c64_westermann_cartridge_device::c64_cd_r(offs_t offset, uint8_t data, i { if (!roml) { - data = m_roml[offset & m_roml.mask()]; + data = m_roml[offset]; } else if (!romh) { - if (m_romh.bytes()) + if (m_romh) { - data = m_romh[offset & m_romh.mask()]; + data = m_romh[offset]; } else { - data = m_roml[offset & m_roml.mask()]; + data = m_roml[offset]; } } else if (!io2) diff --git a/src/devices/bus/c64/xl80.cpp b/src/devices/bus/c64/xl80.cpp index 6bfa6e9d8cd..346fb7c0947 100644 --- a/src/devices/bus/c64/xl80.cpp +++ b/src/devices/bus/c64/xl80.cpp @@ -157,7 +157,7 @@ c64_xl80_device::c64_xl80_device(const machine_config &mconfig, const char *tag, m_crtc(*this, HD46505SP_TAG), m_palette(*this, "palette"), m_char_rom(*this, HD46505SP_TAG), - m_ram(*this, "ram") + m_ram(*this, "ram", RAM_SIZE, ENDIANNESS_LITTLE) { } @@ -168,8 +168,6 @@ c64_xl80_device::c64_xl80_device(const machine_config &mconfig, const char *tag, void c64_xl80_device::device_start() { - // allocate memory - m_ram.allocate(RAM_SIZE); } diff --git a/src/devices/bus/c64/xl80.h b/src/devices/bus/c64/xl80.h index 70a9b1cba9d..762b8ed39eb 100644 --- a/src/devices/bus/c64/xl80.h +++ b/src/devices/bus/c64/xl80.h @@ -52,7 +52,7 @@ private: required_device<hd6845s_device> m_crtc; required_device<palette_device> m_palette; required_memory_region m_char_rom; - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; }; diff --git a/src/devices/bus/cbm2/24k.cpp b/src/devices/bus/cbm2/24k.cpp index c212b2fef83..c56474c7be9 100644 --- a/src/devices/bus/cbm2/24k.cpp +++ b/src/devices/bus/cbm2/24k.cpp @@ -30,7 +30,7 @@ DEFINE_DEVICE_TYPE(CBM2_24K, cbm2_24k_cartridge_device, "cbm2_24k", "CBM-II 24K cbm2_24k_cartridge_device::cbm2_24k_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, CBM2_24K, tag, owner, clock), device_cbm2_expansion_card_interface(mconfig, *this), - m_ram(*this, "ram") + m_ram(*this, "ram", 0x6000, ENDIANNESS_LITTLE) { } @@ -41,7 +41,6 @@ cbm2_24k_cartridge_device::cbm2_24k_cartridge_device(const machine_config &mconf void cbm2_24k_cartridge_device::device_start() { - m_ram.allocate(0x6000); } diff --git a/src/devices/bus/cbm2/24k.h b/src/devices/bus/cbm2/24k.h index b1c029c5254..554ba721444 100644 --- a/src/devices/bus/cbm2/24k.h +++ b/src/devices/bus/cbm2/24k.h @@ -36,7 +36,7 @@ protected: virtual uint8_t cbm2_bd_r(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3) override; virtual void cbm2_bd_w(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3) override; - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; }; diff --git a/src/devices/bus/cbm2/exp.cpp b/src/devices/bus/cbm2/exp.cpp index 92c865006f7..7bc35f33120 100644 --- a/src/devices/bus/cbm2/exp.cpp +++ b/src/devices/bus/cbm2/exp.cpp @@ -36,10 +36,7 @@ DEFINE_DEVICE_TYPE(CBM2_EXPANSION_SLOT, cbm2_expansion_slot_device, "cbm2_expans //------------------------------------------------- device_cbm2_expansion_card_interface::device_cbm2_expansion_card_interface(const machine_config &mconfig, device_t &device) : - device_interface(device, "cbm2exp"), - m_bank1(*this, "bank1"), - m_bank2(*this, "bank2"), - m_bank3(*this, "bank3") + device_interface(device, "cbm2exp") { m_slot = dynamic_cast<cbm2_expansion_slot_device *>(device.owner()); } @@ -107,17 +104,17 @@ image_init_result cbm2_expansion_slot_device::call_load() if (is_filetype("20")) { - m_card->m_bank1.allocate(size); + m_card->m_bank1 = std::make_unique<uint8_t[]>(size); fread(m_card->m_bank1, size); } else if (is_filetype("40")) { - m_card->m_bank2.allocate(size); + m_card->m_bank2 = std::make_unique<uint8_t[]>(size); fread(m_card->m_bank2, size); } else if (is_filetype("60")) { - m_card->m_bank3.allocate(size); + m_card->m_bank3 = std::make_unique<uint8_t[]>(size); fread(m_card->m_bank3, size); } } diff --git a/src/devices/bus/cbm2/exp.h b/src/devices/bus/cbm2/exp.h index d07035614a8..9781e4ac05a 100644 --- a/src/devices/bus/cbm2/exp.h +++ b/src/devices/bus/cbm2/exp.h @@ -113,9 +113,9 @@ public: protected: device_cbm2_expansion_card_interface(const machine_config &mconfig, device_t &device); - optional_shared_ptr<uint8_t> m_bank1; - optional_shared_ptr<uint8_t> m_bank2; - optional_shared_ptr<uint8_t> m_bank3; + std::unique_ptr<uint8_t[]> m_bank1; + std::unique_ptr<uint8_t[]> m_bank2; + std::unique_ptr<uint8_t[]> m_bank3; cbm2_expansion_slot_device *m_slot; }; diff --git a/src/devices/bus/cbm2/std.cpp b/src/devices/bus/cbm2/std.cpp index f56226028ee..51653c72755 100644 --- a/src/devices/bus/cbm2/std.cpp +++ b/src/devices/bus/cbm2/std.cpp @@ -49,17 +49,17 @@ void cbm2_standard_cartridge_device::device_start() uint8_t cbm2_standard_cartridge_device::cbm2_bd_r(offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3) { - if (!csbank1 && m_bank1.bytes()) + if (!csbank1 && m_bank1) { - data = m_bank1[offset & m_bank1.mask()]; + data = m_bank1[offset]; } - else if (!csbank2 && m_bank2.bytes()) + else if (!csbank2 && m_bank2) { - data = m_bank2[offset & m_bank2.mask()]; + data = m_bank2[offset]; } - else if (!csbank3 && m_bank3.bytes()) + else if (!csbank3 && m_bank3) { - data = m_bank3[offset & m_bank3.mask()]; + data = m_bank3[offset]; } return data; diff --git a/src/devices/bus/comx35/clm.cpp b/src/devices/bus/comx35/clm.cpp index 192e5989a36..d32b4a694f8 100644 --- a/src/devices/bus/comx35/clm.cpp +++ b/src/devices/bus/comx35/clm.cpp @@ -173,7 +173,7 @@ comx_clm_device::comx_clm_device(const machine_config &mconfig, const char *tag, m_palette(*this, "palette"), m_rom(*this, "c000"), m_char_rom(*this, MC6845_TAG), - m_video_ram(*this, "video_ram") + m_video_ram(*this, "video_ram", VIDEORAM_SIZE, ENDIANNESS_LITTLE) { } @@ -184,9 +184,6 @@ comx_clm_device::comx_clm_device(const machine_config &mconfig, const char *tag, void comx_clm_device::device_start() { - // allocate memory - m_video_ram.allocate(VIDEORAM_SIZE); - // state saving save_item(NAME(m_ds)); } diff --git a/src/devices/bus/comx35/clm.h b/src/devices/bus/comx35/clm.h index 9c4845cbbe0..de86ff28b7f 100644 --- a/src/devices/bus/comx35/clm.h +++ b/src/devices/bus/comx35/clm.h @@ -52,7 +52,7 @@ private: required_device<palette_device> m_palette; required_memory_region m_rom; required_memory_region m_char_rom; - optional_shared_ptr<uint8_t> m_video_ram; + memory_share_creator<uint8_t> m_video_ram; }; diff --git a/src/devices/bus/comx35/ram.cpp b/src/devices/bus/comx35/ram.cpp index b468b6366ff..0f11dfdb194 100644 --- a/src/devices/bus/comx35/ram.cpp +++ b/src/devices/bus/comx35/ram.cpp @@ -37,7 +37,7 @@ DEFINE_DEVICE_TYPE(COMX_RAM, comx_ram_device, "comx_ram", "COMX-35 RAM Card") comx_ram_device::comx_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, COMX_RAM, tag, owner, clock), device_comx_expansion_card_interface(mconfig, *this), - m_ram(*this, "ram"), + m_ram(*this, "ram", RAM_SIZE, ENDIANNESS_LITTLE), m_bank(0) { } @@ -49,7 +49,6 @@ comx_ram_device::comx_ram_device(const machine_config &mconfig, const char *tag, void comx_ram_device::device_start() { - m_ram.allocate(RAM_SIZE); } diff --git a/src/devices/bus/comx35/ram.h b/src/devices/bus/comx35/ram.h index 3a75e208eb6..8ab8703d195 100644 --- a/src/devices/bus/comx35/ram.h +++ b/src/devices/bus/comx35/ram.h @@ -39,7 +39,7 @@ protected: virtual void comx_io_w(offs_t offset, uint8_t data) override; private: - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; int m_bank; }; diff --git a/src/devices/bus/cpc/cpc_rom.cpp b/src/devices/bus/cpc/cpc_rom.cpp index 69bd7f80035..ff60f024f39 100644 --- a/src/devices/bus/cpc/cpc_rom.cpp +++ b/src/devices/bus/cpc/cpc_rom.cpp @@ -109,12 +109,12 @@ image_init_result cpc_rom_image_device::call_load() m_base = std::make_unique<uint8_t[]>(16384); if(size <= 16384) { - image->fread(m_base.get(),size); + image->fread(m_base,size); } else { image->fseek(size-16384,SEEK_SET); - image->fread(m_base.get(),16384); + image->fread(m_base,16384); } return image_init_result::PASS; diff --git a/src/devices/bus/ecbbus/grip.cpp b/src/devices/bus/ecbbus/grip.cpp index 659bab524ad..b4a09f78523 100644 --- a/src/devices/bus/ecbbus/grip.cpp +++ b/src/devices/bus/ecbbus/grip.cpp @@ -567,7 +567,7 @@ ecb_grip21_device::ecb_grip21_device(const machine_config &mconfig, const char * m_centronics(*this, CENTRONICS_TAG), m_palette(*this, "palette"), m_speaker(*this, "speaker"), - m_video_ram(*this, "video_ram"), + m_video_ram(*this, "video_ram", VIDEORAM_SIZE, ENDIANNESS_LITTLE), m_j3a(*this, "J3A"), m_j3b(*this, "J3B"), m_j7(*this, "J7"), @@ -581,9 +581,6 @@ ecb_grip21_device::ecb_grip21_device(const machine_config &mconfig, const char * void ecb_grip21_device::device_start() { - // allocate video RAM - m_video_ram.allocate(VIDEORAM_SIZE); - // setup GRIP memory banking membank("videoram")->configure_entries(0, 2, m_video_ram, 0x8000); membank("videoram")->set_entry(0); diff --git a/src/devices/bus/ecbbus/grip.h b/src/devices/bus/ecbbus/grip.h index 076a61880d9..a0914f28137 100644 --- a/src/devices/bus/ecbbus/grip.h +++ b/src/devices/bus/ecbbus/grip.h @@ -72,7 +72,7 @@ private: required_device<centronics_device> m_centronics; required_device<palette_device> m_palette; required_device<speaker_sound_device> m_speaker; - optional_shared_ptr<uint8_t> m_video_ram; + memory_share_creator<uint8_t> m_video_ram; required_ioport m_j3a; required_ioport m_j3b; required_ioport m_j7; diff --git a/src/devices/bus/hp_dio/hp_dio.cpp b/src/devices/bus/hp_dio/hp_dio.cpp index aa777e3e5dd..50cad490dc0 100644 --- a/src/devices/bus/hp_dio/hp_dio.cpp +++ b/src/devices/bus/hp_dio/hp_dio.cpp @@ -273,10 +273,9 @@ template void dio16_device::install_memory<read16_delegate, write16_delegate template void dio16_device::install_memory<read16s_delegate, write16s_delegate >(offs_t start, offs_t end, read16s_delegate rhandler, write16s_delegate whandler); template void dio16_device::install_memory<read16sm_delegate, write16sm_delegate >(offs_t start, offs_t end, read16sm_delegate rhandler, write16sm_delegate whandler); -void dio16_device::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data) +void dio16_device::install_bank(offs_t start, offs_t end, uint8_t *data) { - m_prgspace->install_readwrite_bank(start, end, 0, tag); - machine().root_device().membank(m_prgspace->device().siblingtag(tag).c_str())->set_base(data); + m_prgspace->install_ram(start, end, data); } void dio16_device::unmap_bank(offs_t start, offs_t end) @@ -284,10 +283,9 @@ void dio16_device::unmap_bank(offs_t start, offs_t end) m_prgspace->unmap_readwrite(start, end); } -void dio16_device::install_rom(offs_t start, offs_t end, const char *tag, uint8_t *data) +void dio16_device::install_rom(offs_t start, offs_t end, uint8_t *data) { - m_prgspace->install_read_bank(start, end, 0, tag); - machine().root_device().membank(m_prgspace->device().siblingtag(tag).c_str())->set_base(data); + m_prgspace->install_rom(start, end, data); } void dio16_device::unmap_rom(offs_t start, offs_t end) diff --git a/src/devices/bus/hp_dio/hp_dio.h b/src/devices/bus/hp_dio/hp_dio.h index 11738a5fc26..71d71e67106 100644 --- a/src/devices/bus/hp_dio/hp_dio.h +++ b/src/devices/bus/hp_dio/hp_dio.h @@ -83,8 +83,8 @@ public: // due to the varying bus widths. Using all install_memory() shields you from this problem. // Either know what you're doing (m_prgwidth is available to cards for this purpose) or // only use these for 32-bit DIO-II cards. - void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data); - void install_rom(offs_t start, offs_t end, const char *tag, uint8_t *data); + void install_bank(offs_t start, offs_t end, uint8_t *data); + void install_rom(offs_t start, offs_t end, uint8_t *data); void unmap_bank(offs_t start, offs_t end); void unmap_rom(offs_t start, offs_t end); diff --git a/src/devices/bus/interpro/sr/sr.h b/src/devices/bus/interpro/sr/sr.h index ef9d01d2f29..0d30905943b 100644 --- a/src/devices/bus/interpro/sr/sr.h +++ b/src/devices/bus/interpro/sr/sr.h @@ -75,7 +75,7 @@ public: offs_t end = start + (CBUS_SIZE - 1); // install the idprom region - read32_delegate idprom_r(*this, [idprom] (address_space &space, offs_t offset, u32 mem_mask) { return idprom->as_u32(offset); }, idprom->name()); + read32sm_delegate idprom_r(*this, [idprom] (offs_t offset) { return idprom->as_u32(offset); }, idprom->name().c_str()); m_main_space->install_read_handler(start, start | 0x7f, idprom_r); m_io_space->install_read_handler(start, start | 0x7f, idprom_r); @@ -171,7 +171,7 @@ public: offs_t end = start + (SRX_SIZE - 1); // install the idprom region - read32_delegate idprom_r(*this, [idprom] (address_space &space, offs_t offset, u32 mem_mask) { return idprom->as_u32(offset); }, idprom->name()); + read32sm_delegate idprom_r(*this, [idprom] (offs_t offset) { return idprom->as_u32(offset); }, idprom->name().c_str()); m_main_space->install_read_handler(start | 0x7f80, start | 0x7fff, idprom_r); m_io_space->install_read_handler(start | 0x7f80, start | 0x7fff, idprom_r); diff --git a/src/devices/bus/isa/3c503.cpp b/src/devices/bus/isa/3c503.cpp index de7363ceb26..92da79a906e 100644 --- a/src/devices/bus/isa/3c503.cpp +++ b/src/devices/bus/isa/3c503.cpp @@ -55,7 +55,7 @@ void el2_3c503_device::device_reset() { m_regs.ctrl = 0x0a; m_irq_state = CLEAR_LINE; m_isa->unmap_bank(SADDR, SADDR + 0x1fff); - m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 rom", m_rom); + m_isa->install_bank(SADDR, SADDR + 0x1fff, m_rom); } void el2_3c503_device::set_irq(int state) { @@ -191,13 +191,13 @@ void el2_3c503_device::el2_3c503_hiport_w(offs_t offset, uint8_t data) { m_isa->unmap_bank(SADDR, SADDR + 0x1fff); switch(data & 0xf) { case 0: - m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 rom", m_rom); + m_isa->install_bank(SADDR, SADDR + 0x1fff, m_rom); break; case 9: - m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 ram", m_board_ram); + m_isa->install_bank(SADDR, SADDR + 0x1fff, m_board_ram); break; default: - m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 no map", m_rom); + m_isa->install_bank(SADDR, SADDR + 0x1fff, m_rom); break; } } diff --git a/src/devices/bus/isa/3c505.cpp b/src/devices/bus/isa/3c505.cpp index c45f3e9b78a..55f853acc42 100644 --- a/src/devices/bus/isa/3c505.cpp +++ b/src/devices/bus/isa/3c505.cpp @@ -280,7 +280,7 @@ void isa16_3c505_device::device_reset() offs_t const rom_base = (m_romopts->read() & 0xfe) << 12; if (m_isa->is_option_rom_space_available(rom_base, 0x2000)) - m_isa->install_rom(this, rom_base, rom_base | 0x01fff, "host", "host"); + m_isa->install_rom(this, rom_base, rom_base | 0x01fff, "host"); } m_isa->set_dma_channel(m_isa_drq, this, true); diff --git a/src/devices/bus/isa/aha1542c.cpp b/src/devices/bus/isa/aha1542c.cpp index de8e2f1fb65..34e716647ac 100644 --- a/src/devices/bus/isa/aha1542c.cpp +++ b/src/devices/bus/isa/aha1542c.cpp @@ -383,7 +383,7 @@ aha1542cp_device::aha1542cp_device(const machine_config &mconfig, const char *ta void aha1542c_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xdc000, 0xdffff, "aha1542", "aha1542"); + m_isa->install_rom(this, 0xdc000, 0xdffff, "aha1542"); m_isa->install_device(0x330, 0x333, read8sm_delegate(*this, FUNC(aha1542cf_device::aha1542_r)), write8sm_delegate(*this, FUNC(aha1542cf_device::aha1542_w))); diff --git a/src/devices/bus/isa/asc88.cpp b/src/devices/bus/isa/asc88.cpp index 8843aad29a1..be80911d399 100644 --- a/src/devices/bus/isa/asc88.cpp +++ b/src/devices/bus/isa/asc88.cpp @@ -50,8 +50,8 @@ void asc88_device::device_start() void asc88_device::device_reset() { const offs_t baseaddr = 0xc0000 | (u32(m_baseaddr->read()) << 14); - m_isa->install_rom(this, baseaddr, baseaddr | 0x37ff, "asc88", "bios"); - m_isa->install_bank(baseaddr | 0x3800, baseaddr | 0x3fef, "ascram", m_ram.get()); + m_isa->install_rom(this, baseaddr, baseaddr | 0x37ff, "bios"); + m_isa->install_bank(baseaddr | 0x3800, baseaddr | 0x3fef, m_ram.get()); m_isa->install_memory(baseaddr | 0x3ff0, baseaddr | 0x3ff7, read8sm_delegate(*m_scsic, FUNC(ncr5380n_device::read)), write8sm_delegate(*m_scsic, FUNC(ncr5380n_device::write))); diff --git a/src/devices/bus/isa/cga.cpp b/src/devices/bus/isa/cga.cpp index 52a0407f065..410231822a7 100644 --- a/src/devices/bus/isa/cga.cpp +++ b/src/devices/bus/isa/cga.cpp @@ -332,9 +332,9 @@ void isa8_cga_device::device_start() set_isa_device(); m_vram.resize(m_vram_size); m_isa->install_device(0x3d0, 0x3df, read8sm_delegate(*this, FUNC(isa8_cga_device::io_read)), write8sm_delegate(*this, FUNC(isa8_cga_device::io_write))); - m_isa->install_bank(0xb8000, 0xb8000 + (std::min<size_t>)(0x8000, m_vram_size) - 1, "bank_cga", &m_vram[0]); + m_isa->install_bank(0xb8000, 0xb8000 + (std::min<size_t>)(0x8000, m_vram_size) - 1, &m_vram[0]); if(m_vram_size == 0x4000) - m_isa->install_bank(0xbc000, 0xbffff, "bank_cga", &m_vram[0]); + m_isa->install_bank(0xbc000, 0xbffff, &m_vram[0]); /* Initialise the cga palette */ int i; @@ -1341,7 +1341,7 @@ void isa8_cga_pc1512_device::device_start() isa8_cga_device::device_start(); m_isa->install_device(0x3d0, 0x3df, read8sm_delegate(*this, FUNC(isa8_cga_pc1512_device::io_read)), write8sm_delegate(*this, FUNC(isa8_cga_pc1512_device::io_write))); - m_isa->install_bank(0xb8000, 0xbbfff, "bank1", &m_vram[0]); + m_isa->install_bank(0xb8000, 0xbbfff, &m_vram[0]); address_space &space = m_isa->memspace(); @@ -1480,8 +1480,8 @@ void isa8_wyse700_device::device_start() isa8_cga_device::device_start(); m_isa->install_device(0x3d0, 0x3df, read8sm_delegate(*this, FUNC(isa8_wyse700_device::io_read)), write8sm_delegate(*this, FUNC(isa8_wyse700_device::io_write))); - m_isa->install_bank(0xa0000, 0xaffff, "bank_wy1", &m_vram[0x00000]); - m_isa->install_bank(0xb0000, 0xbffff, "bank_cga", &m_vram[0x10000]); + m_isa->install_bank(0xa0000, 0xaffff, &m_vram[0x00000]); + m_isa->install_bank(0xb0000, 0xbffff, &m_vram[0x10000]); } void isa8_wyse700_device::device_reset() @@ -1588,9 +1588,9 @@ void isa8_ec1841_0002_device::io_write(offs_t offset, uint8_t data) read8sm_delegate( *this, FUNC(isa8_ec1841_0002_device::char_ram_read)), write8sm_delegate(*this, FUNC(isa8_ec1841_0002_device::char_ram_write))); } else { - m_isa->install_bank(0xb8000, 0xb8000 + (std::min<size_t>)(0x8000, m_vram_size) - 1, "bank_cga", &m_vram[0]); + m_isa->install_bank(0xb8000, 0xb8000 + (std::min<size_t>)(0x8000, m_vram_size) - 1, &m_vram[0]); if(m_vram_size == 0x4000) - m_isa->install_bank(0xbc000, 0xbffff, "bank_cga", &m_vram[0]); + m_isa->install_bank(0xbc000, 0xbffff, &m_vram[0]); } break; default: @@ -1985,6 +1985,6 @@ void isa8_cga_cportiii_device::port_23c6_w(uint8_t data) if(BIT(data, 3)) m_isa->install_memory(0xb8000, 0xb9fff, read8sm_delegate(*this, FUNC(isa8_cga_cportiii_device::char_ram_read)), write8sm_delegate(*this, FUNC(isa8_cga_cportiii_device::char_ram_write))); else - m_isa->install_bank(0xb8000, 0xb8000 + 0x8000 - 1, "bank_cga", &m_vram[0]); + m_isa->install_bank(0xb8000, 0xb8000 + 0x8000 - 1, &m_vram[0]); } diff --git a/src/devices/bus/isa/chessmsr.cpp b/src/devices/bus/isa/chessmsr.cpp index 7b2dab6e286..e182ad993d3 100644 --- a/src/devices/bus/isa/chessmsr.cpp +++ b/src/devices/bus/isa/chessmsr.cpp @@ -32,8 +32,7 @@ isa8_chessmsr_device::isa8_chessmsr_device(const machine_config &mconfig, const device_isa8_card_interface(mconfig, *this), m_maincpu(*this, "maincpu"), m_mainlatch(*this, "mainlatch"), - m_sublatch(*this, "sublatch"), - m_ram(*this, "ram") + m_sublatch(*this, "sublatch") { } @@ -70,8 +69,9 @@ void isa8_chessmsr_device::device_reset() // install RAM u32 ramsize = 1 << ioport("RAM")->read(); - m_ram.allocate(ramsize / 4); - m_maincpu->space(AS_PROGRAM).install_ram(0, ramsize - 1, m_ram); + m_ram = std::make_unique<u32[]>(ramsize / 4); + save_pointer(NAME(m_ram.get()), ramsize/4); + m_maincpu->space(AS_PROGRAM).install_ram(0, ramsize - 1, m_ram.get()); m_installed = true; } diff --git a/src/devices/bus/isa/chessmsr.h b/src/devices/bus/isa/chessmsr.h index 9144db455dd..6d4becc4b64 100644 --- a/src/devices/bus/isa/chessmsr.h +++ b/src/devices/bus/isa/chessmsr.h @@ -37,7 +37,7 @@ private: required_device<arm_cpu_device> m_maincpu; required_device<generic_latch_8_device> m_mainlatch; required_device<generic_latch_8_device> m_sublatch; - optional_shared_ptr<u32> m_ram; + std::unique_ptr<u32[]> m_ram; u8 m_ram_offset; bool m_suspended; diff --git a/src/devices/bus/isa/ega.cpp b/src/devices/bus/isa/ega.cpp index 45d169f3dff..71665cd62dd 100644 --- a/src/devices/bus/isa/ega.cpp +++ b/src/devices/bus/isa/ega.cpp @@ -636,7 +636,7 @@ void isa8_ega_device::device_start() m_plane[2] = m_videoram + 0x20000; m_plane[3] = m_videoram + 0x30000; - m_isa->install_rom(this, 0xc0000, 0xc3fff, "ega", "user2"); + m_isa->install_rom(this, 0xc0000, 0xc3fff, "user2"); m_isa->install_device(0x3b0, 0x3bf, read8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3b0_r)), write8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3b0_w))); m_isa->install_device(0x3c0, 0x3cf, read8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3c0_r)), write8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3c0_w))); m_isa->install_device(0x3d0, 0x3df, read8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3d0_r)), write8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3d0_w))); diff --git a/src/devices/bus/isa/eis_hgb107x.cpp b/src/devices/bus/isa/eis_hgb107x.cpp index 25b16a38fe3..ed3100c3e97 100644 --- a/src/devices/bus/isa/eis_hgb107x.cpp +++ b/src/devices/bus/isa/eis_hgb107x.cpp @@ -243,13 +243,13 @@ void isa8_epc_mda_device::device_reset() if (m_installed == false) { m_isa->install_device(0x3b0, 0x3bf, read8sm_delegate(*this, FUNC(isa8_epc_mda_device::io_read)), write8sm_delegate(*this, FUNC(isa8_epc_mda_device::io_write))); - m_isa->install_bank(0xb0000, 0xb7fff, "bank_epc", &m_videoram[0]); // Monochrome emulation mode VRAM address + m_isa->install_bank(0xb0000, 0xb7fff, &m_videoram[0]); // Monochrome emulation mode VRAM address // This check allows a color monitor adapter to be installed at this address range if color emulation is disabled if (m_color_mode & 1) { m_isa->install_device(0x3d0, 0x3df, read8sm_delegate(*this, FUNC(isa8_epc_mda_device::io_read)), write8sm_delegate(*this, FUNC(isa8_epc_mda_device::io_write))); - m_isa->install_bank(0xb8000, 0xbffff, "bank_epc", &m_videoram[0]); // Color emulation mode VRAM address, but same 32KB areas as there are only this amount on the board + m_isa->install_bank(0xb8000, 0xbffff, &m_videoram[0]); // Color emulation mode VRAM address, but same 32KB areas as there are only this amount on the board } m_installed = true; } diff --git a/src/devices/bus/isa/hdc.cpp b/src/devices/bus/isa/hdc.cpp index 06d18b3c600..3a890ebd93c 100644 --- a/src/devices/bus/isa/hdc.cpp +++ b/src/devices/bus/isa/hdc.cpp @@ -1000,7 +1000,7 @@ void isa8_hdc_device::device_reset() dip = ioport("HDD")->read(); if (ioport("ROM")->read() == 1 && m_hdc->install_rom()) - m_isa->install_rom(this, 0xc8000, 0xc9fff, "hdc", "hdc"); + m_isa->install_rom(this, 0xc8000, 0xc9fff, "hdc"); } /************************************************************************* diff --git a/src/devices/bus/isa/isa.cpp b/src/devices/bus/isa/isa.cpp index bc653258375..8a25218d2bd 100644 --- a/src/devices/bus/isa/isa.cpp +++ b/src/devices/bus/isa/isa.cpp @@ -356,10 +356,9 @@ template void isa8_device::install_space<read8smo_delegate, write8sm_delegate >( template void isa8_device::install_space<read8smo_delegate, write8mo_delegate >(int spacenum, offs_t start, offs_t end, read8smo_delegate rhandler, write8mo_delegate whandler); template void isa8_device::install_space<read8smo_delegate, write8smo_delegate>(int spacenum, offs_t start, offs_t end, read8smo_delegate rhandler, write8smo_delegate whandler); -void isa8_device::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data) +void isa8_device::install_bank(offs_t start, offs_t end, uint8_t *data) { - m_memspace->install_readwrite_bank(start, end, 0, tag ); - machine().root_device().membank(m_memspace->device().siblingtag(tag).c_str())->set_base(data); + m_memspace->install_ram(start, end, data); } void isa8_device::unmap_bank(offs_t start, offs_t end) @@ -367,16 +366,15 @@ void isa8_device::unmap_bank(offs_t start, offs_t end) m_memspace->unmap_readwrite(start, end); } -void isa8_device::install_rom(device_t *dev, offs_t start, offs_t end, const char *tag, const char *region) +void isa8_device::install_rom(device_t *dev, offs_t start, offs_t end, const char *region) { if (machine().root_device().memregion("isa")) { uint8_t *src = dev->memregion(region)->base(); uint8_t *dest = machine().root_device().memregion("isa")->base() + start - 0xc0000; memcpy(dest,src, end - start + 1); } else { - m_memspace->install_read_bank(start, end, 0, tag); + m_memspace->install_rom(start, end, machine().root_device().memregion(dev->subtag(region).c_str())->base()); m_memspace->unmap_write(start, end); - machine().root_device().membank(m_memspace->device().siblingtag(tag).c_str())->set_base(machine().root_device().memregion(dev->subtag(region).c_str())->base()); } } diff --git a/src/devices/bus/isa/isa.h b/src/devices/bus/isa/isa.h index 696d825a55e..1e9fdaeddfe 100644 --- a/src/devices/bus/isa/isa.h +++ b/src/devices/bus/isa/isa.h @@ -151,8 +151,8 @@ public: { m_iospace->install_device(addrstart, addrend, device, map, unitmask); } - void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data); - void install_rom(device_t *dev, offs_t start, offs_t end, const char *tag, const char *region); + void install_bank(offs_t start, offs_t end, uint8_t *data); + void install_rom(device_t *dev, offs_t start, offs_t end, const char *region); template<typename R, typename W> void install_memory(offs_t start, offs_t end, R rhandler, W whandler) { install_space(AS_ISA_MEM, start, end, rhandler, whandler); diff --git a/src/devices/bus/isa/lbaenhancer.cpp b/src/devices/bus/isa/lbaenhancer.cpp index f8ebedb130c..242f1f47afe 100644 --- a/src/devices/bus/isa/lbaenhancer.cpp +++ b/src/devices/bus/isa/lbaenhancer.cpp @@ -133,7 +133,7 @@ void lba_enhancer_device::device_reset() m_current_rom_start = 0xc8000 + (ioport("ROM_ADDRESS")->read()* 0x4000); uint32_t current_rom_end = m_current_rom_start + 0x04000 - 1; - m_isa->install_rom(this, m_current_rom_start, current_rom_end, "lbabios", "lbabios"); + m_isa->install_rom(this, m_current_rom_start, current_rom_end, "lbabios"); logerror("LBA enhancer (for 28 bit LBA) located at BIOS address %x - %x\n", m_current_rom_start, current_rom_end); } diff --git a/src/devices/bus/isa/mc1502_rom.cpp b/src/devices/bus/isa/mc1502_rom.cpp index 7e612c10832..f3a78cb93a6 100644 --- a/src/devices/bus/isa/mc1502_rom.cpp +++ b/src/devices/bus/isa/mc1502_rom.cpp @@ -59,7 +59,7 @@ mc1502_rom_device::mc1502_rom_device(const machine_config &mconfig, const char * void mc1502_rom_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xe8000, 0xeffff, "XXX", "mc1502_rom"); + m_isa->install_rom(this, 0xe8000, 0xeffff, "mc1502_rom"); } diff --git a/src/devices/bus/isa/mda.cpp b/src/devices/bus/isa/mda.cpp index ae61e78e116..e3ff8e90f99 100644 --- a/src/devices/bus/isa/mda.cpp +++ b/src/devices/bus/isa/mda.cpp @@ -183,14 +183,14 @@ void isa8_mda_device::device_start() set_isa_device(); m_videoram.resize(0x1000); m_isa->install_device(0x3b0, 0x3bf, read8sm_delegate(*this, FUNC(isa8_mda_device::io_read)), write8sm_delegate(*this, FUNC(isa8_mda_device::io_write))); - m_isa->install_bank(0xb0000, 0xb0fff, "bank_mda", &m_videoram[0]); - m_isa->install_bank(0xb1000, 0xb1fff, "bank_mda", &m_videoram[0]); - m_isa->install_bank(0xb2000, 0xb2fff, "bank_mda", &m_videoram[0]); - m_isa->install_bank(0xb3000, 0xb3fff, "bank_mda", &m_videoram[0]); - m_isa->install_bank(0xb4000, 0xb4fff, "bank_mda", &m_videoram[0]); - m_isa->install_bank(0xb5000, 0xb5fff, "bank_mda", &m_videoram[0]); - m_isa->install_bank(0xb6000, 0xb6fff, "bank_mda", &m_videoram[0]); - m_isa->install_bank(0xb7000, 0xb7fff, "bank_mda", &m_videoram[0]); + m_isa->install_bank(0xb0000, 0xb0fff, &m_videoram[0]); + m_isa->install_bank(0xb1000, 0xb1fff, &m_videoram[0]); + m_isa->install_bank(0xb2000, 0xb2fff, &m_videoram[0]); + m_isa->install_bank(0xb3000, 0xb3fff, &m_videoram[0]); + m_isa->install_bank(0xb4000, 0xb4fff, &m_videoram[0]); + m_isa->install_bank(0xb5000, 0xb5fff, &m_videoram[0]); + m_isa->install_bank(0xb6000, 0xb6fff, &m_videoram[0]); + m_isa->install_bank(0xb7000, 0xb7fff, &m_videoram[0]); /* Initialise the mda palette */ for (int i = 0; i < 4; i++) @@ -601,7 +601,7 @@ void isa8_hercules_device::device_start() m_videoram.resize(0x10000); set_isa_device(); m_isa->install_device(0x3b0, 0x3bf, read8sm_delegate(*this, FUNC(isa8_hercules_device::io_read)), write8sm_delegate(*this, FUNC(isa8_hercules_device::io_write))); - m_isa->install_bank(0xb0000, 0xbffff, "bank_hercules", &m_videoram[0]); + m_isa->install_bank(0xb0000, 0xbffff, &m_videoram[0]); /* Initialise the mda palette */ for(int i = 0; i < (sizeof(mda_palette) / 3); i++) @@ -797,8 +797,8 @@ void isa8_ec1840_0002_device::device_start() isa8_mda_device::device_start(); m_soft_chr_gen = std::make_unique<uint8_t[]>(0x2000); - m_isa->install_bank(0xdc000, 0xddfff, "bank_chargen", m_soft_chr_gen.get()); - m_isa->install_bank(0xde000, 0xdffff, "bank_chargen", m_soft_chr_gen.get()); + m_isa->install_bank(0xdc000, 0xddfff, m_soft_chr_gen.get()); + m_isa->install_bank(0xde000, 0xdffff, m_soft_chr_gen.get()); } void isa8_ec1840_0002_device::device_reset() diff --git a/src/devices/bus/isa/mufdc.cpp b/src/devices/bus/isa/mufdc.cpp index 58408d191e7..652090d7c1d 100644 --- a/src/devices/bus/isa/mufdc.cpp +++ b/src/devices/bus/isa/mufdc.cpp @@ -160,7 +160,7 @@ void mufdc_device::device_start() void mufdc_device::device_reset() { - m_isa->install_rom(this, 0xc8000, 0xc9fff, shortname(), "option"); + m_isa->install_rom(this, 0xc8000, 0xc9fff, "option"); m_isa->install_device(0x3f0, 0x3f7, *m_fdc, &mcs3201_device::map); m_isa->set_dma_channel(2, this, true); } diff --git a/src/devices/bus/isa/p1_fdc.cpp b/src/devices/bus/isa/p1_fdc.cpp index c1671279b08..92915dc3d9b 100644 --- a/src/devices/bus/isa/p1_fdc.cpp +++ b/src/devices/bus/isa/p1_fdc.cpp @@ -172,7 +172,7 @@ p1_fdc_device::p1_fdc_device(const machine_config &mconfig, const char *tag, dev void p1_fdc_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xe0000, 0xe07ff, "XXX", "p1_fdc"); + m_isa->install_rom(this, 0xe0000, 0xe07ff, "p1_fdc"); m_isa->install_device(0x00c0, 0x00c3, read8sm_delegate(*m_fdc, FUNC(fd1793_device::read)), write8sm_delegate(*m_fdc, FUNC(fd1793_device::write))); m_isa->install_device(0x00c4, 0x00c7, read8sm_delegate(*this, FUNC(p1_fdc_device::p1_fdc_r)), write8sm_delegate(*this, FUNC(p1_fdc_device::p1_fdc_w))); } diff --git a/src/devices/bus/isa/p1_hdc.cpp b/src/devices/bus/isa/p1_hdc.cpp index b9b3aad2981..9ee84ece875 100644 --- a/src/devices/bus/isa/p1_hdc.cpp +++ b/src/devices/bus/isa/p1_hdc.cpp @@ -126,7 +126,7 @@ p1_hdc_device::p1_hdc_device(const machine_config &mconfig, const char *tag, dev void p1_hdc_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xe2000, 0xe27ff, "XXX", "p1_hdc"); + m_isa->install_rom(this, 0xe2000, 0xe27ff, "p1_hdc"); m_isa->install_memory(0xd0000, 0xd0fff, read8sm_delegate(*this, FUNC(p1_hdc_device::p1_HDC_r)), write8sm_delegate(*this, FUNC(p1_hdc_device::p1_HDC_w))); } diff --git a/src/devices/bus/isa/p1_rom.cpp b/src/devices/bus/isa/p1_rom.cpp index 22faf40df01..76013aca719 100644 --- a/src/devices/bus/isa/p1_rom.cpp +++ b/src/devices/bus/isa/p1_rom.cpp @@ -64,7 +64,7 @@ p1_rom_device::p1_rom_device(const machine_config &mconfig, const char *tag, dev void p1_rom_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc0000, 0xc1fff, "XXX", "p1_rom"); + m_isa->install_rom(this, 0xc0000, 0xc1fff, "p1_rom"); } diff --git a/src/devices/bus/isa/pc1640_iga.cpp b/src/devices/bus/isa/pc1640_iga.cpp index 4c9b2719b7c..96ae2da109b 100644 --- a/src/devices/bus/isa/pc1640_iga.cpp +++ b/src/devices/bus/isa/pc1640_iga.cpp @@ -101,7 +101,7 @@ void isa8_pc1640_iga_device::device_start() m_plane[2] = m_videoram + 0x20000; m_plane[3] = m_videoram + 0x30000; - m_isa->install_rom(this, 0xc0000, 0xc7fff, "ega", "iga"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "iga"); m_isa->install_device(0x3b0, 0x3bf, read8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3b0_r)), write8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3b0_w))); m_isa->install_device(0x3c0, 0x3cf, read8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3c0_r)), write8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3c0_w))); m_isa->install_device(0x3d0, 0x3df, read8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3d0_r)), write8sm_delegate(*this, FUNC(isa8_ega_device::pc_ega8_3d0_w))); diff --git a/src/devices/bus/isa/pgc.cpp b/src/devices/bus/isa/pgc.cpp index f204333f9f2..4b51ebcd0de 100644 --- a/src/devices/bus/isa/pgc.cpp +++ b/src/devices/bus/isa/pgc.cpp @@ -71,8 +71,6 @@ ROM_START( pgc ) ROMX_LOAD("pgc_u44.bin", 0x00000, 0x8000, CRC(71280241) SHA1(7042ccd4ebd03f576a256a433b8aa38d1b4fefa8), ROM_BIOS(1)) ROMX_LOAD("pgc_u43.bin", 0x08000, 0x8000, CRC(923f5ea3) SHA1(2b2a55d64b20d3a613b00c51443105aa03eca5d6), ROM_BIOS(1)) - ROM_REGION(0x800, "commarea", ROMREGION_ERASE00) - ROM_REGION(0x1000, "chargen", 0) ROM_LOAD("pgc_u27.bin", 0x0000, 0x1000, CRC(6be256cc) SHA1(deb1195886268dcddce10459911e020f7a9f74f7)) ROM_END @@ -113,7 +111,7 @@ void isa8_pgc_device::pgc_map(address_map &map) map(0x08000, 0x0ffff).rom().region("maincpu", 0x8000); map(0x10000, 0x1001f).rw(FUNC(isa8_pgc_device::stateparam_r), FUNC(isa8_pgc_device::stateparam_w)); // map(0x18000, 0x18fff).ram(); // ?? - map(0x28000, 0x287ff).ram().region("commarea", 0).mirror(0x800); + map(0x28000, 0x287ff).ram().share("commarea").mirror(0x800); map(0x32001, 0x32001).nopw(); map(0x32020, 0x3203f).w(FUNC(isa8_pgc_device::accel_w)); map(0x3c000, 0x3c001).r(FUNC(isa8_pgc_device::init_r)); @@ -210,7 +208,8 @@ isa8_pgc_device::isa8_pgc_device(const machine_config &mconfig, device_type type m_cpu(*this, "maincpu"), m_screen(*this, PGC_SCREEN_NAME), m_palette(*this, "palette"), - m_commarea(nullptr), m_vram(nullptr), m_eram(nullptr) + m_commarea(*this, "commarea"), + m_vram(nullptr), m_eram(nullptr) { } @@ -246,11 +245,10 @@ void isa8_pgc_device::device_reset() memset(m_lut, 0, sizeof(m_lut)); m_accel = 0; - m_commarea = memregion("commarea")->base(); if (BIT(ioport("DSW")->read(), 1)) - m_isa->install_bank(0xc6400, 0xc67ff, "commarea", m_commarea); + m_isa->install_bank(0xc6400, 0xc67ff, m_commarea); else - m_isa->install_bank(0xc6000, 0xc63ff, "commarea", m_commarea); + m_isa->install_bank(0xc6000, 0xc63ff, m_commarea); } // @@ -389,8 +387,7 @@ uint8_t isa8_pgc_device::init_r() space.unmap_read(0xf8000, 0xfffff); LOG("INIT: mapping emulator RAM\n"); - space.install_readwrite_bank(0xf8000, 0xfffff, "eram"); - membank("eram")->set_base(m_eram.get()); + space.install_ram(0xf8000, 0xfffff, m_eram.get()); LOG("INIT: mapping LUT\n"); space.install_write_handler(0xf8400, 0xf85ff, write8sm_delegate(*this, FUNC(isa8_pgc_device::lut_w))); diff --git a/src/devices/bus/isa/pgc.h b/src/devices/bus/isa/pgc.h index b14ea6e5797..d560dbdda09 100644 --- a/src/devices/bus/isa/pgc.h +++ b/src/devices/bus/isa/pgc.h @@ -60,8 +60,8 @@ private: required_device<i8088_cpu_device> m_cpu; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_shared_ptr<uint8_t> m_commarea; - uint8_t *m_commarea; std::unique_ptr<uint8_t[]> m_vram; std::unique_ptr<uint8_t[]> m_eram; uint8_t m_stateparam[16]; diff --git a/src/devices/bus/isa/side116.cpp b/src/devices/bus/isa/side116.cpp index e45d66b26bd..bad6645bf5a 100644 --- a/src/devices/bus/isa/side116.cpp +++ b/src/devices/bus/isa/side116.cpp @@ -112,10 +112,10 @@ void side116_device::device_reset() { switch ((m_config->read() >> 1) & 0x03) { - case 0: m_isa->install_rom(this, 0xc8000, 0xc9fff, "side116", "option"); break; - case 1: m_isa->install_rom(this, 0xd8000, 0xd9fff, "side116", "option"); break; - case 2: m_isa->install_rom(this, 0xcc000, 0xcdfff, "side116", "option"); break; - case 3: m_isa->install_rom(this, 0xdc000, 0xddfff, "side116", "option"); break; + case 0: m_isa->install_rom(this, 0xc8000, 0xc9fff, "option"); break; + case 1: m_isa->install_rom(this, 0xd8000, 0xd9fff, "option"); break; + case 2: m_isa->install_rom(this, 0xcc000, 0xcdfff, "option"); break; + case 3: m_isa->install_rom(this, 0xdc000, 0xddfff, "option"); break; } } diff --git a/src/devices/bus/isa/svga_cirrus.cpp b/src/devices/bus/isa/svga_cirrus.cpp index e1cebaf9a32..943606e9be4 100644 --- a/src/devices/bus/isa/svga_cirrus.cpp +++ b/src/devices/bus/isa/svga_cirrus.cpp @@ -72,7 +72,7 @@ void isa16_svga_cirrus_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "dm_clgd5430"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "dm_clgd5430"); m_isa->install_device(0x03b0, 0x03bf, read8sm_delegate(*m_vga, FUNC(cirrus_gd5430_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(cirrus_gd5430_device::port_03b0_w))); m_isa->install_device(0x03c0, 0x03cf, read8sm_delegate(*m_vga, FUNC(cirrus_gd5430_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(cirrus_gd5430_device::port_03c0_w))); @@ -150,7 +150,7 @@ void isa16_svga_cirrus_gd542x_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "clgd542x"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "clgd542x"); m_isa->install_device(0x03b0, 0x03bf, read8sm_delegate(*m_vga, FUNC(cirrus_gd5428_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(cirrus_gd5428_device::port_03b0_w))); m_isa->install_device(0x03c0, 0x03cf, read8sm_delegate(*m_vga, FUNC(cirrus_gd5428_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(cirrus_gd5428_device::port_03c0_w))); diff --git a/src/devices/bus/isa/svga_s3.cpp b/src/devices/bus/isa/svga_s3.cpp index a50c3a8d0fb..b4334f269ef 100644 --- a/src/devices/bus/isa/svga_s3.cpp +++ b/src/devices/bus/isa/svga_s3.cpp @@ -82,7 +82,7 @@ void isa16_svga_s3_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "s3_764"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "s3_764"); m_isa->install_device(0x03b0, 0x03bf, read8sm_delegate(*m_vga, FUNC(s3_vga_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(s3_vga_device::port_03b0_w))); m_isa->install_device(0x03c0, 0x03cf, read8sm_delegate(*m_vga, FUNC(s3_vga_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(s3_vga_device::port_03c0_w))); @@ -196,7 +196,7 @@ void isa16_s3virge_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "s3virge"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "s3virge"); m_isa->install_device(0x03b0, 0x03bf, read8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03b0_w))); m_isa->install_device(0x03c0, 0x03cf, read8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03c0_w))); @@ -302,7 +302,7 @@ void isa16_s3virgedx_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "s3virgedx"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "s3virgedx"); m_isa->install_device(0x03b0, 0x03bf, read8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03b0_w))); m_isa->install_device(0x03c0, 0x03cf, read8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03c0_w))); @@ -400,7 +400,7 @@ void isa16_stealth3d2kpro_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "stealth3d"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "stealth3d"); m_isa->install_device(0x03b0, 0x03bf, read8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03b0_w))); m_isa->install_device(0x03c0, 0x03cf, read8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(s3virge_vga_device::port_03c0_w))); diff --git a/src/devices/bus/isa/svga_trident.cpp b/src/devices/bus/isa/svga_trident.cpp index 5c934e99bf0..7eda60d2446 100644 --- a/src/devices/bus/isa/svga_trident.cpp +++ b/src/devices/bus/isa/svga_trident.cpp @@ -72,7 +72,7 @@ void isa16_svga_tgui9680_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc0000, 0xc7fff, "tgui9680", "tgui9680"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "tgui9680"); m_isa->install_device(0x3b0, 0x3bf, read8sm_delegate(*m_vga, FUNC(trident_vga_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(trident_vga_device::port_03b0_w))); m_isa->install_device(0x3c0, 0x3cf, read8sm_delegate(*m_vga, FUNC(trident_vga_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(trident_vga_device::port_03c0_w))); diff --git a/src/devices/bus/isa/svga_tseng.cpp b/src/devices/bus/isa/svga_tseng.cpp index 48ee7324b2e..ab5bbb755f0 100644 --- a/src/devices/bus/isa/svga_tseng.cpp +++ b/src/devices/bus/isa/svga_tseng.cpp @@ -114,5 +114,5 @@ void isa8_svga_et4k_device::map_ram() void isa8_svga_et4k_device::map_rom() { - m_isa->install_rom(this, 0xc0000, 0xc7fff, "et4000", "et4000"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "et4000"); } diff --git a/src/devices/bus/isa/vga.cpp b/src/devices/bus/isa/vga.cpp index 9772690c46e..11d94d7fbdd 100644 --- a/src/devices/bus/isa/vga.cpp +++ b/src/devices/bus/isa/vga.cpp @@ -69,7 +69,7 @@ void isa8_vga_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc0000, 0xc7fff, "ibm_vga", "ibm_vga"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "ibm_vga"); m_isa->install_device(0x3b0, 0x3bf, read8sm_delegate(*m_vga, FUNC(vga_device::port_03b0_r)), write8sm_delegate(*m_vga, FUNC(vga_device::port_03b0_w))); m_isa->install_device(0x3c0, 0x3cf, read8sm_delegate(*m_vga, FUNC(vga_device::port_03c0_r)), write8sm_delegate(*m_vga, FUNC(vga_device::port_03c0_w))); diff --git a/src/devices/bus/isa/vga_ati.cpp b/src/devices/bus/isa/vga_ati.cpp index 177e30f14c7..d6ce586a9fd 100644 --- a/src/devices/bus/isa/vga_ati.cpp +++ b/src/devices/bus/isa/vga_ati.cpp @@ -163,7 +163,7 @@ void isa16_vga_gfxultra_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga", "gfxultra"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "gfxultra"); m_isa->install_device(0x1ce, 0x1cf, read8sm_delegate(*m_vga, FUNC(ati_vga_device::ati_port_ext_r)), write8sm_delegate(*m_vga, FUNC(ati_vga_device::ati_port_ext_w))); m_isa->install_device(0x2e8, 0x2ef, read8sm_delegate(*m_8514, FUNC(mach8_device::ibm8514_status_r)), write8sm_delegate(*m_8514, FUNC(mach8_device::ibm8514_htotal_w))); @@ -224,7 +224,7 @@ void isa16_vga_gfxultrapro_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga", "gfxultrapro"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "gfxultrapro"); m_isa->install_device(0x1ce, 0x1cf, read8sm_delegate(*m_vga, FUNC(mach32_device::ati_port_ext_r)), write8sm_delegate(*m_vga, FUNC(mach32_device::ati_port_ext_w))); m_isa->install_device(0x2e8, 0x2ef, read8sm_delegate(*m_vga, FUNC(mach32_device::mach32_status_r)), write8sm_delegate(*m_vga, FUNC(mach32_device::ibm8514_htotal_w))); @@ -293,7 +293,7 @@ void isa16_vga_mach64_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga", "mach64"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "mach64"); m_isa->install_device(0x1ce, 0x1cf, read8sm_delegate(*m_vga, FUNC(mach64_device::ati_port_ext_r)), write8sm_delegate(*m_vga, FUNC(mach64_device::ati_port_ext_w))); m_isa->install_device(0x2e8, 0x2ef, read8sm_delegate(*m_vga, FUNC(mach64_device::mach32_status_r)), write8sm_delegate(*m_vga, FUNC(mach64_device::ibm8514_htotal_w))); diff --git a/src/devices/bus/isa/wdxt_gen.cpp b/src/devices/bus/isa/wdxt_gen.cpp index b86188d3249..fb2a8fd1965 100644 --- a/src/devices/bus/isa/wdxt_gen.cpp +++ b/src/devices/bus/isa/wdxt_gen.cpp @@ -199,7 +199,7 @@ wdxt_gen_device::wdxt_gen_device(const machine_config &mconfig, const char *tag, void wdxt_gen_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc8000, 0xc9fff, "hdc", "hdc"); + m_isa->install_rom(this, 0xc8000, 0xc9fff, "hdc"); m_isa->install_device(0x0320, 0x0323, read8sm_delegate(*m_host, FUNC(wd11c00_17_device::io_r)), write8sm_delegate(*m_host, FUNC(wd11c00_17_device::io_w))); m_isa->set_dma_channel(3, this, false); } diff --git a/src/devices/bus/lpci/northbridge.cpp b/src/devices/bus/lpci/northbridge.cpp index 57c802a9e20..0384a9637e4 100644 --- a/src/devices/bus/lpci/northbridge.cpp +++ b/src/devices/bus/lpci/northbridge.cpp @@ -33,9 +33,7 @@ void northbridge_device::device_start() if (m_ram->size() > 0x100000) { offs_t ram_limit = 0x100000 + m_ram->size() - 0x100000; - space.install_read_bank (0x100000, ram_limit - 1, "bank1"); - space.install_write_bank(0x100000, ram_limit - 1, "bank1"); - machine().root_device().membank("bank1")->set_base(m_ram->pointer() + 0x100000); + space.install_ram(0x100000, ram_limit - 1, m_ram->pointer() + 0x100000); } } diff --git a/src/devices/bus/macpds/macpds.cpp b/src/devices/bus/macpds/macpds.cpp index 3a7a87f85d2..9f17df8cb6d 100644 --- a/src/devices/bus/macpds/macpds.cpp +++ b/src/devices/bus/macpds/macpds.cpp @@ -111,13 +111,12 @@ template void macpds_device::install_device<read16s_delegate, write16s_delegat template void macpds_device::install_device<read16sm_delegate, write16sm_delegate >(offs_t start, offs_t end, read16sm_delegate rhandler, write16sm_delegate whandler, uint32_t mask); template void macpds_device::install_device<read16smo_delegate, write16smo_delegate>(offs_t start, offs_t end, read16smo_delegate rhandler, write16smo_delegate whandler, uint32_t mask); -void macpds_device::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data) +void macpds_device::install_bank(offs_t start, offs_t end, uint8_t *data) { // printf("install_bank: %s @ %x->%x\n", tag, start, end); m_maincpu = machine().device<cpu_device>(m_cputag); address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_readwrite_bank(start, end, 0, tag ); - machine().root_device().membank(siblingtag(tag).c_str())->set_base(data); + space.install_ram(start, end, data); } void macpds_device::set_irq_line(int line, int state) @@ -160,22 +159,15 @@ void device_macpds_card_interface::set_macpds_device() m_macpds->add_macpds_card(this); } -void device_macpds_card_interface::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data) +void device_macpds_card_interface::install_bank(offs_t start, offs_t end, uint8_t *data) { - char bank[256]; - - // append an underscore and the slot name to the bank so it's guaranteed unique - snprintf(bank, sizeof(bank), "%s_%s", tag, m_macpds_slottag); - - m_macpds->install_bank(start, end, bank, data); + m_macpds->install_bank(start, end, data); } void device_macpds_card_interface::install_rom(device_t *dev, const char *romregion, uint32_t addr) { uint8_t *rom = device().machine().root_device().memregion(dev->subtag(romregion).c_str())->base(); uint32_t romlen = device().machine().root_device().memregion(dev->subtag(romregion).c_str())->bytes(); - char bankname[128]; - sprintf(bankname, "rom_%x", addr); - m_macpds->install_bank(addr, addr+romlen-1, bankname, rom); + m_macpds->install_bank(addr, addr+romlen-1, rom); } diff --git a/src/devices/bus/macpds/macpds.h b/src/devices/bus/macpds/macpds.h index 1977447a87b..cd3f84659d0 100644 --- a/src/devices/bus/macpds/macpds.h +++ b/src/devices/bus/macpds/macpds.h @@ -74,7 +74,7 @@ public: void add_macpds_card(device_macpds_card_interface *card); template<typename R, typename W> void install_device(offs_t start, offs_t end, R rhandler, W whandler, uint32_t mask=0xffffffff); - void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data); + void install_bank(offs_t start, offs_t end, uint8_t *data); void set_irq_line(int line, int state); protected: @@ -111,7 +111,7 @@ public: void set_macpds_device(); // helper functions for card devices - void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data); + void install_bank(offs_t start, offs_t end, uint8_t *data); void install_rom(device_t *dev, const char *romregion, uint32_t addr); // inline configuration diff --git a/src/devices/bus/macpds/pds_tpdfpd.cpp b/src/devices/bus/macpds/pds_tpdfpd.cpp index 6d9dd93b4ed..2b0ca60c281 100644 --- a/src/devices/bus/macpds/pds_tpdfpd.cpp +++ b/src/devices/bus/macpds/pds_tpdfpd.cpp @@ -109,8 +109,7 @@ void macpds_sedisplay_device::device_start() m_vram = std::make_unique<uint8_t[]>(VRAM_SIZE); - static const char bankname[] = { "radpds_ram" }; - m_macpds->install_bank(0xc40000, 0xc40000+VRAM_SIZE-1, bankname, m_vram.get()); + m_macpds->install_bank(0xc40000, 0xc40000+VRAM_SIZE-1, m_vram.get()); m_macpds->install_device(0x770000, 0x77000f, read16s_delegate(*this, FUNC(macpds_sedisplay_device::ramdac_r)), write16s_delegate(*this, FUNC(macpds_sedisplay_device::ramdac_w))); m_macpds->install_device(0xc10000, 0xc2ffff, read16sm_delegate(*this, FUNC(macpds_sedisplay_device::sedisplay_r)), write16sm_delegate(*this, FUNC(macpds_sedisplay_device::sedisplay_w))); diff --git a/src/devices/bus/msx_slot/bunsetsu.cpp b/src/devices/bus/msx_slot/bunsetsu.cpp index 79a07b2e53a..9c73a37dbd8 100644 --- a/src/devices/bus/msx_slot/bunsetsu.cpp +++ b/src/devices/bus/msx_slot/bunsetsu.cpp @@ -13,7 +13,7 @@ DEFINE_DEVICE_TYPE(MSX_SLOT_BUNSETSU, msx_slot_bunsetsu_device, "msx_slot_bunset msx_slot_bunsetsu_device::msx_slot_bunsetsu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : msx_slot_rom_device(mconfig, MSX_SLOT_BUNSETSU, tag, owner, clock) - , m_bunsetsu_region(*this, finder_base::DUMMY_TAG, 0x20000) + , m_bunsetsu_region(*this, finder_base::DUMMY_TAG) , m_bunsetsu_address(0) { } diff --git a/src/devices/bus/nubus/laserview.cpp b/src/devices/bus/nubus/laserview.cpp index 7e802b58988..bd9647c9e72 100644 --- a/src/devices/bus/nubus/laserview.cpp +++ b/src/devices/bus/nubus/laserview.cpp @@ -88,8 +88,8 @@ void nubus_laserview_device::device_start() // printf("[laserview %p] slotspace = %x\n", this, slotspace); m_vram.resize(VRAM_SIZE); - install_bank(slotspace, slotspace+VRAM_SIZE-1, "bank_laserview", &m_vram[0]); - install_bank(slotspace+0x900000, slotspace+0x900000+VRAM_SIZE-1, "bank_laserview2", &m_vram[0]); + install_bank(slotspace, slotspace+VRAM_SIZE-1, &m_vram[0]); + install_bank(slotspace+0x900000, slotspace+0x900000+VRAM_SIZE-1, &m_vram[0]); nubus().install_device(slotspace+0xB0000, slotspace+0xBFFFF, read32s_delegate(*this, FUNC(nubus_laserview_device::regs_r)), write32s_delegate(*this, FUNC(nubus_laserview_device::regs_w))); } diff --git a/src/devices/bus/nubus/nubus.cpp b/src/devices/bus/nubus/nubus.cpp index 64c48a9bb1d..bbc63a23ada 100644 --- a/src/devices/bus/nubus/nubus.cpp +++ b/src/devices/bus/nubus/nubus.cpp @@ -185,11 +185,10 @@ void nubus_device::install_writeonly_device(offs_t start, offs_t end, write32_de } } -void nubus_device::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data) +void nubus_device::install_bank(offs_t start, offs_t end, uint8_t *data) { // printf("install_bank: %s @ %x->%x\n", tag, start, end); - m_space->install_readwrite_bank(start, end, 0, tag); - machine().root_device().membank(siblingtag(tag).c_str())->set_base(data); + m_space->install_rom(start, end, data); } void nubus_device::set_irq_line(int slot, int state) @@ -278,14 +277,9 @@ void device_nubus_card_interface::interface_pre_start() } } -void device_nubus_card_interface::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data) +void device_nubus_card_interface::install_bank(offs_t start, offs_t end, uint8_t *data) { - char bank[256]; - - // append an underscore and the slot name to the bank so it's guaranteed unique - snprintf(bank, sizeof(bank), "%s_%s", tag, m_nubus_slottag); - - nubus().install_bank(start, end, bank, data); + nubus().install_bank(start, end, data); } void device_nubus_card_interface::install_declaration_rom(device_t *dev, const char *romregion, bool mirror_all_mb, bool reverse_rom) @@ -424,20 +418,18 @@ void device_nubus_card_interface::install_declaration_rom(device_t *dev, const c // now install the ROM uint32_t addr = get_slotspace() + 0x01000000; - char bankname[128]; - snprintf(bankname, sizeof(bankname), "rom_%s", m_nubus_slottag); addr -= romlen; // printf("Installing ROM at %x, length %x\n", addr, romlen); if (mirror_all_mb) // mirror the declaration ROM across all 16 megs of the slot space { uint32_t off = 0; while(off < 0x1000000) { - nubus().install_bank(addr + off, addr+off+romlen-1, bankname, &m_declaration_rom[0]); + nubus().install_bank(addr + off, addr+off+romlen-1, &m_declaration_rom[0]); off += romlen; } } else { - nubus().install_bank(addr, addr+romlen-1, bankname, &m_declaration_rom[0]); + nubus().install_bank(addr, addr+romlen-1, &m_declaration_rom[0]); } } diff --git a/src/devices/bus/nubus/nubus.h b/src/devices/bus/nubus/nubus.h index 2fc5f048e67..0b07b04b381 100644 --- a/src/devices/bus/nubus/nubus.h +++ b/src/devices/bus/nubus/nubus.h @@ -37,7 +37,7 @@ public: // helper functions for card devices void install_declaration_rom(device_t *dev, const char *romregion, bool mirror_all_mb = false, bool reverse_rom = false); - void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data); + void install_bank(offs_t start, offs_t end, uint8_t *data); uint32_t get_slotspace() { return 0xf0000000 | (m_slot<<24); } uint32_t get_super_slotspace() { return m_slot<<28; } @@ -125,7 +125,7 @@ public: template<typename R, typename W> void install_device(offs_t start, offs_t end, R rhandler, W whandler, uint32_t mask=0xffffffff); void install_readonly_device(offs_t start, offs_t end, read32_delegate rhandler, uint32_t mask=0xffffffff); void install_writeonly_device(offs_t start, offs_t end, write32_delegate whandler, uint32_t mask=0xffffffff); - void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data); + void install_bank(offs_t start, offs_t end, uint8_t *data); void set_irq_line(int slot, int state); DECLARE_WRITE_LINE_MEMBER( irq9_w ); diff --git a/src/devices/bus/nubus/nubus_48gc.cpp b/src/devices/bus/nubus/nubus_48gc.cpp index b9b831c6de2..58875e591b6 100644 --- a/src/devices/bus/nubus/nubus_48gc.cpp +++ b/src/devices/bus/nubus/nubus_48gc.cpp @@ -110,7 +110,7 @@ void jmfb_device::device_start() // printf("[JMFB %p] slotspace = %x\n", this, slotspace); m_vram.resize(VRAM_SIZE); - install_bank(slotspace, slotspace+VRAM_SIZE-1, "bank_48gc", &m_vram[0]); + install_bank(slotspace, slotspace+VRAM_SIZE-1, &m_vram[0]); nubus().install_device(slotspace+0x200000, slotspace+0x2003ff, read32s_delegate(*this, FUNC(jmfb_device::mac_48gc_r)), write32s_delegate(*this, FUNC(jmfb_device::mac_48gc_w))); diff --git a/src/devices/bus/nubus/nubus_cb264.cpp b/src/devices/bus/nubus/nubus_cb264.cpp index db1fd821a11..b3af9d82fba 100644 --- a/src/devices/bus/nubus/nubus_cb264.cpp +++ b/src/devices/bus/nubus/nubus_cb264.cpp @@ -96,7 +96,7 @@ void nubus_cb264_device::device_start() // printf("[cb264 %p] slotspace = %x\n", this, slotspace); m_vram.resize(VRAM_SIZE); - install_bank(slotspace, slotspace+VRAM_SIZE-1, "bank_cb264", &m_vram[0]); + install_bank(slotspace, slotspace+VRAM_SIZE-1, &m_vram[0]); nubus().install_device(slotspace+0xff6000, slotspace+0xff60ff, read32s_delegate(*this, FUNC(nubus_cb264_device::cb264_r)), write32s_delegate(*this, FUNC(nubus_cb264_device::cb264_w))); nubus().install_device(slotspace+0xff7000, slotspace+0xff70ff, read32sm_delegate(*this, FUNC(nubus_cb264_device::cb264_ramdac_r)), write32sm_delegate(*this, FUNC(nubus_cb264_device::cb264_ramdac_w))); diff --git a/src/devices/bus/nubus/nubus_image.cpp b/src/devices/bus/nubus/nubus_image.cpp index 32b1d33100a..aa54fe51c7a 100644 --- a/src/devices/bus/nubus/nubus_image.cpp +++ b/src/devices/bus/nubus/nubus_image.cpp @@ -89,9 +89,8 @@ image_init_result nubus_image_device::messimg_disk_image_device::call_load() return image_init_result::FAIL; } - m_data = make_unique_clear<uint8_t[]>(m_size); fseek(0, SEEK_SET); - fread(m_data.get(), m_size); + fread(m_data, m_size); m_ejected = false; return image_init_result::PASS; diff --git a/src/devices/bus/nubus/nubus_vikbw.cpp b/src/devices/bus/nubus/nubus_vikbw.cpp index 18c94f9ba5b..d05495afe54 100644 --- a/src/devices/bus/nubus/nubus_vikbw.cpp +++ b/src/devices/bus/nubus/nubus_vikbw.cpp @@ -89,8 +89,8 @@ void nubus_vikbw_device::device_start() // printf("[vikbw %p] slotspace = %x\n", this, slotspace); m_vram.resize(VRAM_SIZE); - install_bank(slotspace+0x40000, slotspace+0x40000+VRAM_SIZE-1, "bank_vikbw", &m_vram[0]); - install_bank(slotspace+0x940000, slotspace+0x940000+VRAM_SIZE-1, "bank_vikbw2", &m_vram[0]); + install_bank(slotspace+0x40000, slotspace+0x40000+VRAM_SIZE-1, &m_vram[0]); + install_bank(slotspace+0x940000, slotspace+0x940000+VRAM_SIZE-1, &m_vram[0]); nubus().install_device(slotspace, slotspace+3, read32smo_delegate(*this, FUNC(nubus_vikbw_device::viking_enable_r)), write32smo_delegate(*this, FUNC(nubus_vikbw_device::viking_disable_w))); nubus().install_device(slotspace+0x80000, slotspace+0x80000+3, read32smo_delegate(*this, FUNC(nubus_vikbw_device::viking_ack_r)), write32smo_delegate(*this, FUNC(nubus_vikbw_device::viking_ack_w))); diff --git a/src/devices/bus/odyssey2/4in1.cpp b/src/devices/bus/odyssey2/4in1.cpp index dfadbf2c1ab..ad9b685b54e 100644 --- a/src/devices/bus/odyssey2/4in1.cpp +++ b/src/devices/bus/odyssey2/4in1.cpp @@ -35,7 +35,7 @@ void o2_4in1_device::device_start() void o2_4in1_device::cart_init() { - if (m_rom.bytes() != 0x1000) + if (m_rom_size != 0x1000) fatalerror("o2_4in1_device: ROM size must be 4KB\n"); } diff --git a/src/devices/bus/odyssey2/chess.cpp b/src/devices/bus/odyssey2/chess.cpp index 6ff1ff76dd2..9f687c72cd6 100644 --- a/src/devices/bus/odyssey2/chess.cpp +++ b/src/devices/bus/odyssey2/chess.cpp @@ -35,7 +35,7 @@ void o2_chess_device::device_start() void o2_chess_device::cart_init() { - if (m_rom.bytes() != 0x800 || !m_exrom || m_exrom.bytes() != 0x2000) + if (m_rom_size != 0x800 || m_exrom_size != 0x2000) fatalerror("o2_chess_device: Wrong ROM region size\n"); } diff --git a/src/devices/bus/odyssey2/homecomp.cpp b/src/devices/bus/odyssey2/homecomp.cpp index 23c6f6c31f7..363a1ab024f 100644 --- a/src/devices/bus/odyssey2/homecomp.cpp +++ b/src/devices/bus/odyssey2/homecomp.cpp @@ -45,7 +45,7 @@ void o2_homecomp_device::device_start() void o2_homecomp_device::cart_init() { - if (m_rom.bytes() != 0x800 || !m_exrom || m_exrom.bytes() != 0x4000) + if (m_rom_size != 0x800 || m_exrom_size != 0x4000) fatalerror("o2_homecomp_device: Wrong ROM region size\n"); } diff --git a/src/devices/bus/odyssey2/ktaa.cpp b/src/devices/bus/odyssey2/ktaa.cpp index 4f1fba25153..1bb550685c4 100644 --- a/src/devices/bus/odyssey2/ktaa.cpp +++ b/src/devices/bus/odyssey2/ktaa.cpp @@ -30,7 +30,7 @@ void o2_ktaa_device::device_start() void o2_ktaa_device::cart_init() { - u32 size = m_rom.bytes(); + u32 size = m_rom_size; if (size != 0xc00 && size != 0xc00*2 && size != 0xc00*4) fatalerror("o2_ktaa_device: ROM size must be multiple of 3KB\n"); diff --git a/src/devices/bus/odyssey2/rally.cpp b/src/devices/bus/odyssey2/rally.cpp index 42dcdc0b26f..00205028fa6 100644 --- a/src/devices/bus/odyssey2/rally.cpp +++ b/src/devices/bus/odyssey2/rally.cpp @@ -39,7 +39,7 @@ void o2_rally_device::device_start() void o2_rally_device::cart_init() { - u32 size = m_rom.bytes(); + u32 size = m_rom_size; if (size & (size - 1) || size < 0x800) fatalerror("o2_rally_device: ROM size must be 2^x\n"); } @@ -53,7 +53,7 @@ u8 o2_rally_device::read_rom04(offs_t offset) { // P10 enables latch output u8 bank = (m_control & 1) ? ~0 : m_bank; - return m_rom[(offset + bank * 0x800) & (m_rom.bytes() - 1)]; + return m_rom[(offset + bank * 0x800) & (m_rom_size - 1)]; } void o2_rally_device::io_write(offs_t offset, u8 data) diff --git a/src/devices/bus/odyssey2/rom.cpp b/src/devices/bus/odyssey2/rom.cpp index 12f8fa9b128..cd8d15b15bc 100644 --- a/src/devices/bus/odyssey2/rom.cpp +++ b/src/devices/bus/odyssey2/rom.cpp @@ -28,7 +28,7 @@ void o2_rom_device::device_start() void o2_rom_device::cart_init() { - m_cart_mask = (1 << (31 - count_leading_zeros(m_rom.bytes()))) - 1; + m_cart_mask = (1 << (31 - count_leading_zeros(m_rom_size))) - 1; } @@ -39,5 +39,5 @@ void o2_rom_device::cart_init() u8 o2_rom_device::read_rom04(offs_t offset) { offset = (offset + m_bank * 0x800) & m_cart_mask; - return (offset < m_rom.bytes()) ? m_rom[offset] : 0xff; + return (offset < m_rom_size) ? m_rom[offset] : 0xff; } diff --git a/src/devices/bus/odyssey2/slot.cpp b/src/devices/bus/odyssey2/slot.cpp index 5f0f30e2f35..50bc7ce20c3 100644 --- a/src/devices/bus/odyssey2/slot.cpp +++ b/src/devices/bus/odyssey2/slot.cpp @@ -27,9 +27,9 @@ DEFINE_DEVICE_TYPE(O2_CART_SLOT, o2_cart_slot_device, "o2_cart_slot", "Odyssey 2 device_o2_cart_interface::device_o2_cart_interface(const machine_config &mconfig, device_t &device) : device_interface(device, "odyssey2cart") - , m_rom(*this, "rom") - , m_exrom(*this, "exrom") - , m_voice(*this, "voice") + , m_rom_size(0) + , m_exrom_size(0) + , m_voice_size(0) { } @@ -138,6 +138,9 @@ image_init_result o2_cart_slot_device::call_load() load_software_region("rom", m_cart->m_rom); load_software_region("exrom", m_cart->m_exrom); load_software_region("voice", m_cart->m_voice); + m_cart->m_rom_size = get_software_region_length("rom"); + m_cart->m_exrom_size = get_software_region_length("exrom"); + m_cart->m_voice_size = get_software_region_length("voice"); m_type = o2_get_pcb_id(get_feature("slot")); diff --git a/src/devices/bus/odyssey2/slot.h b/src/devices/bus/odyssey2/slot.h index 4c65fafe01e..d998d5f1999 100644 --- a/src/devices/bus/odyssey2/slot.h +++ b/src/devices/bus/odyssey2/slot.h @@ -49,18 +49,21 @@ public: virtual void cart_init() { } // called after loading ROM - u8* get_rom_base() { return m_rom ? &m_rom[0] : nullptr; } - u32 get_rom_size() { return m_rom ? m_rom.bytes() : 0; } + u8* get_rom_base() { return m_rom ? m_rom.get() : nullptr; } + u32 get_rom_size() { return m_rom_size; } - u8* get_voice_base() { return m_voice ? &m_voice[0] : nullptr; } - u32 get_voice_size() { return m_voice ? m_voice.bytes() : 0; } + u8* get_voice_base() { return m_voice ? m_voice.get() : nullptr; } + u32 get_voice_size() { return m_voice_size; } protected: device_o2_cart_interface(const machine_config &mconfig, device_t &device); - optional_shared_ptr<u8> m_rom; - optional_shared_ptr<u8> m_exrom; - optional_shared_ptr<u8> m_voice; + std::unique_ptr<uint8_t[]> m_rom; + std::unique_ptr<uint8_t[]> m_exrom; + std::unique_ptr<uint8_t[]> m_voice; + u32 m_rom_size; + u32 m_exrom_size; + u32 m_voice_size; }; diff --git a/src/devices/bus/pet/64k.cpp b/src/devices/bus/pet/64k.cpp index 85f91114386..7e335ba97ff 100644 --- a/src/devices/bus/pet/64k.cpp +++ b/src/devices/bus/pet/64k.cpp @@ -79,7 +79,7 @@ inline void pet_64k_expansion_device::write_ram(offs_t offset, uint8_t data) pet_64k_expansion_device::pet_64k_expansion_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, PET_64K, tag, owner, clock), device_pet_expansion_card_interface(mconfig, *this), - m_ram(*this, "ram"), + m_ram(*this, "ram", 0x10000, ENDIANNESS_LITTLE), m_ctrl(0) { } @@ -91,9 +91,6 @@ pet_64k_expansion_device::pet_64k_expansion_device(const machine_config &mconfig void pet_64k_expansion_device::device_start() { - // allocate memory - m_ram.allocate(0x10000); - // state saving save_item(NAME(m_ctrl)); } diff --git a/src/devices/bus/pet/64k.h b/src/devices/bus/pet/64k.h index 7cf03cd621b..6b55cc3098e 100644 --- a/src/devices/bus/pet/64k.h +++ b/src/devices/bus/pet/64k.h @@ -41,7 +41,7 @@ private: inline uint8_t read_ram(offs_t offset); inline void write_ram(offs_t offset, uint8_t data); - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; uint8_t m_ctrl; }; diff --git a/src/devices/bus/pet/superpet.cpp b/src/devices/bus/pet/superpet.cpp index 77ec57b5c46..df5c0071600 100644 --- a/src/devices/bus/pet/superpet.cpp +++ b/src/devices/bus/pet/superpet.cpp @@ -173,7 +173,7 @@ superpet_device::superpet_device(const machine_config &mconfig, const char *tag, m_acia(*this, MOS6551_TAG), m_dongle(*this, MOS6702_TAG), m_rom(*this, M6809_TAG), - m_ram(*this, "ram"), + m_ram(*this, "ram", 0x10000, ENDIANNESS_LITTLE), m_io_sw1(*this, "SW1"), m_io_sw2(*this, "SW2"), m_system(0), @@ -191,9 +191,6 @@ superpet_device::superpet_device(const machine_config &mconfig, const char *tag, void superpet_device::device_start() { - // allocate memory - m_ram.allocate(0x10000); - // state saving save_item(NAME(m_system)); save_item(NAME(m_bank)); diff --git a/src/devices/bus/pet/superpet.h b/src/devices/bus/pet/superpet.h index 097a4b45cd4..56c07df525f 100644 --- a/src/devices/bus/pet/superpet.h +++ b/src/devices/bus/pet/superpet.h @@ -59,7 +59,7 @@ private: required_device<mos6551_device> m_acia; required_device<mos6702_device> m_dongle; required_memory_region m_rom; - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; required_ioport m_io_sw1; required_ioport m_io_sw2; diff --git a/src/devices/bus/plus4/exp.cpp b/src/devices/bus/plus4/exp.cpp index 5ca28efd81d..c1184f16922 100644 --- a/src/devices/bus/plus4/exp.cpp +++ b/src/devices/bus/plus4/exp.cpp @@ -37,10 +37,6 @@ DEFINE_DEVICE_TYPE(PLUS4_EXPANSION_SLOT, plus4_expansion_slot_device, "plus4_exp device_plus4_expansion_card_interface::device_plus4_expansion_card_interface(const machine_config &mconfig, device_t &device) : device_interface(device, "plus4exp"), - m_c1l(*this, "c1l"), - m_c1h(*this, "c1h"), - m_c2l(*this, "c2l"), - m_c2h(*this, "c2h"), m_c1l_mask(0), m_c1h_mask(0), m_c2l_mask(0), diff --git a/src/devices/bus/plus4/exp.h b/src/devices/bus/plus4/exp.h index 369480281b3..37691a319d5 100644 --- a/src/devices/bus/plus4/exp.h +++ b/src/devices/bus/plus4/exp.h @@ -137,10 +137,10 @@ public: protected: device_plus4_expansion_card_interface(const machine_config &mconfig, device_t &device); - optional_shared_ptr<uint8_t> m_c1l; - optional_shared_ptr<uint8_t> m_c1h; - optional_shared_ptr<uint8_t> m_c2l; - optional_shared_ptr<uint8_t> m_c2h; + std::unique_ptr<uint8_t[]> m_c1l; + std::unique_ptr<uint8_t[]> m_c1h; + std::unique_ptr<uint8_t[]> m_c2l; + std::unique_ptr<uint8_t[]> m_c2h; size_t m_c1l_mask; size_t m_c1h_mask; diff --git a/src/devices/bus/plus4/std.cpp b/src/devices/bus/plus4/std.cpp index c8efe4b679f..2a050999680 100644 --- a/src/devices/bus/plus4/std.cpp +++ b/src/devices/bus/plus4/std.cpp @@ -49,21 +49,21 @@ void plus4_standard_cartridge_device::device_start() uint8_t plus4_standard_cartridge_device::plus4_cd_r(offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h) { - if (!c1l && m_c1l.bytes()) + if (!c1l && m_c1l) { - data = m_c1l[offset & m_c1l.mask()]; + data = m_c1l[offset]; } - else if (!c1h && m_c1h.bytes()) + else if (!c1h && m_c1h) { - data = m_c1h[offset & m_c1h.mask()]; + data = m_c1h[offset]; } - else if (!c2l && m_c2l.bytes()) + else if (!c2l && m_c2l) { - data = m_c2l[offset & m_c2l.mask()]; + data = m_c2l[offset]; } - else if (!c2h && m_c2h.bytes()) + else if (!c2h && m_c2h) { - data = m_c2h[offset & m_c2h.mask()]; + data = m_c2h[offset]; } return data; diff --git a/src/devices/bus/pofo/ccm.cpp b/src/devices/bus/pofo/ccm.cpp index 11e90cc852c..b5790a14a3b 100644 --- a/src/devices/bus/pofo/ccm.cpp +++ b/src/devices/bus/pofo/ccm.cpp @@ -28,9 +28,7 @@ DEFINE_DEVICE_TYPE(PORTFOLIO_MEMORY_CARD_SLOT, portfolio_memory_card_slot_device //------------------------------------------------- device_portfolio_memory_card_slot_interface::device_portfolio_memory_card_slot_interface(const machine_config &mconfig, device_t &device) : - device_interface(device, "pofoccm"), - m_rom(*this, "rom"), - m_nvram(*this, "nvram") + device_interface(device, "pofoccm") { m_slot = dynamic_cast<portfolio_memory_card_slot_device *>(device.owner()); } @@ -73,7 +71,9 @@ image_init_result portfolio_memory_card_slot_device::call_load() if (m_card) { if (!loaded_through_softlist()) + { fread(m_card->m_rom, length()); + } else load_software_region("rom", m_card->m_rom); } diff --git a/src/devices/bus/pofo/ccm.h b/src/devices/bus/pofo/ccm.h index 74175a7dc56..7dc0698453f 100644 --- a/src/devices/bus/pofo/ccm.h +++ b/src/devices/bus/pofo/ccm.h @@ -82,8 +82,7 @@ protected: // construction/destruction device_portfolio_memory_card_slot_interface(const machine_config &mconfig, device_t &device); - optional_shared_ptr<uint8_t> m_rom; - optional_shared_ptr<uint8_t> m_nvram; + std::unique_ptr<uint8_t[]> m_rom; portfolio_memory_card_slot_device *m_slot; }; diff --git a/src/devices/bus/pofo/hpc104.cpp b/src/devices/bus/pofo/hpc104.cpp index a6e66f13da8..11744206c7e 100644 --- a/src/devices/bus/pofo/hpc104.cpp +++ b/src/devices/bus/pofo/hpc104.cpp @@ -101,7 +101,7 @@ pofo_hpc104_device::pofo_hpc104_device(const machine_config &mconfig, device_typ device_nvram_interface(mconfig, *this), m_ccm(*this, PORTFOLIO_MEMORY_CARD_SLOT_B_TAG), m_exp(*this, PORTFOLIO_EXPANSION_SLOT_TAG), - m_nvram(*this, "nvram"), + m_nvram(*this, "nvram", 0x40000, ENDIANNESS_LITTLE), m_io_sw1(*this, "SW1") { } @@ -128,8 +128,6 @@ pofo_hpc104_2_device::pofo_hpc104_2_device(const machine_config &mconfig, const void pofo_hpc104_device::device_start() { - // allocate memory - m_nvram.allocate(0x40000); } diff --git a/src/devices/bus/pofo/hpc104.h b/src/devices/bus/pofo/hpc104.h index 042bece210e..6afae6dd5ec 100644 --- a/src/devices/bus/pofo/hpc104.h +++ b/src/devices/bus/pofo/hpc104.h @@ -44,8 +44,8 @@ protected: // device_nvram_interface overrides virtual void nvram_default() override { } - virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.bytes()); } } - virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.bytes()); } } + virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, 0x40000); } } + virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, 0x40000); } } // device_portfolio_expansion_slot_interface overrides virtual bool nmd1() override { return m_ccm->cdet_r(); } @@ -58,7 +58,7 @@ protected: private: required_device<portfolio_memory_card_slot_device> m_ccm; required_device<portfolio_expansion_slot_device> m_exp; - optional_shared_ptr<uint8_t> m_nvram; + memory_share_creator<uint8_t> m_nvram; required_ioport m_io_sw1; bool m_sw1; diff --git a/src/devices/bus/pofo/ram.cpp b/src/devices/bus/pofo/ram.cpp index 5498a9b8c32..7f1298b8b95 100644 --- a/src/devices/bus/pofo/ram.cpp +++ b/src/devices/bus/pofo/ram.cpp @@ -29,7 +29,8 @@ DEFINE_DEVICE_TYPE(PORTFOLIO_RAM_CARD, portfolio_ram_card_device, "portfolio_ram portfolio_ram_card_device::portfolio_ram_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, PORTFOLIO_RAM_CARD, tag, owner, clock), device_portfolio_memory_card_slot_interface(mconfig, *this), - device_nvram_interface(mconfig, *this) + device_nvram_interface(mconfig, *this), + m_nvram(*this, "nvram", 0x20000, ENDIANNESS_LITTLE) { } @@ -40,7 +41,6 @@ portfolio_ram_card_device::portfolio_ram_card_device(const machine_config &mconf void portfolio_ram_card_device::device_start() { - m_nvram.allocate(0x20000); } diff --git a/src/devices/bus/pofo/ram.h b/src/devices/bus/pofo/ram.h index 2c19f807816..c3eee30910d 100644 --- a/src/devices/bus/pofo/ram.h +++ b/src/devices/bus/pofo/ram.h @@ -36,14 +36,16 @@ protected: // device_nvram_interface overrides virtual void nvram_default() override { } - virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.bytes()); } } - virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.bytes()); } } + virtual void nvram_read(emu_file &file) override { if (m_nvram != nullptr) { file.read(m_nvram, m_nvram.share()->bytes()); } } + virtual void nvram_write(emu_file &file) override { if (m_nvram != nullptr) { file.write(m_nvram, m_nvram.share()->bytes()); } } // device_portfolio_memory_card_slot_interface overrides virtual bool cdet() override { return 0; } virtual uint8_t nrdi_r(offs_t offset) override; virtual void nwri_w(offs_t offset, uint8_t data) override; + + memory_share_creator<uint8_t> m_nvram; }; diff --git a/src/devices/bus/ql/rom.cpp b/src/devices/bus/ql/rom.cpp index 0c84eadd6b6..f6b54fdc907 100644 --- a/src/devices/bus/ql/rom.cpp +++ b/src/devices/bus/ql/rom.cpp @@ -29,7 +29,6 @@ DEFINE_DEVICE_TYPE(QL_ROM_CARTRIDGE_SLOT, ql_rom_cartridge_slot_device, "ql_rom_ device_ql_rom_cartridge_card_interface::device_ql_rom_cartridge_card_interface(const machine_config &mconfig, device_t &device) : device_interface(device, "qlrom"), - m_rom(*this, "rom"), m_slot(dynamic_cast<ql_rom_cartridge_slot_device *>(device.owner())), m_romoeh(0) { @@ -89,14 +88,9 @@ image_init_result ql_rom_cartridge_slot_device::call_load() { if (m_card) { - size_t size; - if (!loaded_through_softlist()) { - size = length(); - - m_card->m_rom.allocate(size); - fread(m_card->m_rom, size); + fread(m_card->m_rom, length()); } else { diff --git a/src/devices/bus/ql/rom.h b/src/devices/bus/ql/rom.h index 4b79406aca9..bfd06793d8c 100644 --- a/src/devices/bus/ql/rom.h +++ b/src/devices/bus/ql/rom.h @@ -58,7 +58,7 @@ protected: virtual void interface_post_start() override; - optional_shared_ptr<uint8_t> m_rom; + std::unique_ptr<uint8_t[]> m_rom; ql_rom_cartridge_slot_device *const m_slot; diff --git a/src/devices/bus/ql/sandy_superqboard.cpp b/src/devices/bus/ql/sandy_superqboard.cpp index 9fbd2f49c77..4d4a712b010 100644 --- a/src/devices/bus/ql/sandy_superqboard.cpp +++ b/src/devices/bus/ql/sandy_superqboard.cpp @@ -219,7 +219,7 @@ sandy_superqboard_device::sandy_superqboard_device(const machine_config &mconfig m_centronics(*this, CENTRONICS_TAG), m_latch(*this, TTL74273_TAG), m_rom(*this, "rom"), - m_ram(*this, "ram"), + m_ram(*this, "ram", ram_size, ENDIANNESS_BIG), m_buttons(*this, "mouse_buttons"), m_ram_size(ram_size), m_fd6(0), @@ -250,9 +250,6 @@ sandy_superqmouse_512k_device::sandy_superqmouse_512k_device(const machine_confi void sandy_superqboard_device::device_start() { - // allocate memory - m_ram.allocate(m_ram_size); - // state saving save_item(NAME(m_fd6)); save_item(NAME(m_fd7)); diff --git a/src/devices/bus/ql/sandy_superqboard.h b/src/devices/bus/ql/sandy_superqboard.h index 94bfe0c7dad..347703673de 100644 --- a/src/devices/bus/ql/sandy_superqboard.h +++ b/src/devices/bus/ql/sandy_superqboard.h @@ -74,7 +74,7 @@ private: required_device<centronics_device> m_centronics; required_device<output_latch_device> m_latch; required_memory_region m_rom; - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; optional_ioport m_buttons; int m_ram_size; diff --git a/src/devices/bus/ql/std.cpp b/src/devices/bus/ql/std.cpp index b1171c46336..7524cc1693d 100644 --- a/src/devices/bus/ql/std.cpp +++ b/src/devices/bus/ql/std.cpp @@ -49,9 +49,9 @@ void ql_standard_rom_cartridge_device::device_start() uint8_t ql_standard_rom_cartridge_device::read(offs_t offset, uint8_t data) { - if (m_romoeh && m_rom.bytes()) + if (m_romoeh && m_rom) { - data = m_rom[offset & m_rom.mask()]; + data = m_rom[offset]; } return data; diff --git a/src/devices/bus/ql/trumpcard.cpp b/src/devices/bus/ql/trumpcard.cpp index 473fc9bb78e..da5fece8726 100644 --- a/src/devices/bus/ql/trumpcard.cpp +++ b/src/devices/bus/ql/trumpcard.cpp @@ -114,7 +114,7 @@ ql_trump_card_device::ql_trump_card_device(const machine_config &mconfig, device m_floppy0(*this, WD1772_TAG":0"), m_floppy1(*this, WD1772_TAG":1"), m_rom(*this, "rom"), - m_ram(*this, "ram"), + m_ram(*this, "ram", ram_size, ENDIANNESS_BIG), m_ram_size(ram_size), m_rom_en(false) { @@ -142,9 +142,6 @@ ql_trump_card_768k_device::ql_trump_card_768k_device(const machine_config &mconf void ql_trump_card_device::device_start() { - // allocate memory - m_ram.allocate(m_ram_size); - // state saving save_item(NAME(m_rom_en)); } diff --git a/src/devices/bus/ql/trumpcard.h b/src/devices/bus/ql/trumpcard.h index d9926160928..ee27efc4792 100644 --- a/src/devices/bus/ql/trumpcard.h +++ b/src/devices/bus/ql/trumpcard.h @@ -53,7 +53,7 @@ private: required_device<floppy_connector> m_floppy0; required_device<floppy_connector> m_floppy1; required_memory_region m_rom; - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; int m_ram_size; bool m_rom_en; diff --git a/src/devices/bus/s100/dj2db.cpp b/src/devices/bus/s100/dj2db.cpp index 3bc8607077d..03acd63437c 100644 --- a/src/devices/bus/s100/dj2db.cpp +++ b/src/devices/bus/s100/dj2db.cpp @@ -254,7 +254,7 @@ s100_dj2db_device::s100_dj2db_device(const machine_config &mconfig, const char * m_floppy3(*this, MB8866_TAG":3"), m_floppy(nullptr), m_rom(*this, "dj2db"), - m_ram(*this, "ram"), + m_ram(*this, "ram", 0x400, ENDIANNESS_LITTLE), m_j1a(*this, "J1A"), m_j3a(*this, "J3A"), m_j4(*this, "J4"), @@ -275,9 +275,6 @@ s100_dj2db_device::s100_dj2db_device(const machine_config &mconfig, const char * void s100_dj2db_device::device_start() { - // allocate memory - m_ram.allocate(0x400); - // state saving save_item(NAME(m_drive)); save_item(NAME(m_head)); diff --git a/src/devices/bus/s100/dj2db.h b/src/devices/bus/s100/dj2db.h index dccb5bfbadb..e285ab43f42 100644 --- a/src/devices/bus/s100/dj2db.h +++ b/src/devices/bus/s100/dj2db.h @@ -63,7 +63,7 @@ private: required_device<floppy_connector> m_floppy3; floppy_image_device *m_floppy; required_memory_region m_rom; - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; required_ioport m_j1a; required_ioport m_j3a; required_ioport m_j4; diff --git a/src/devices/bus/s100/mm65k16s.cpp b/src/devices/bus/s100/mm65k16s.cpp index ae098a2e29c..5f64ce67aa4 100644 --- a/src/devices/bus/s100/mm65k16s.cpp +++ b/src/devices/bus/s100/mm65k16s.cpp @@ -205,7 +205,7 @@ ioport_constructor s100_mm65k16s_device::device_input_ports() const s100_mm65k16s_device::s100_mm65k16s_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, S100_MM65K16S, tag, owner, clock), device_s100_card_interface(mconfig, *this), - m_ram(*this, "ram") + m_ram(*this, "ram", 0x10000, ENDIANNESS_LITTLE) { } @@ -216,7 +216,6 @@ s100_mm65k16s_device::s100_mm65k16s_device(const machine_config &mconfig, const void s100_mm65k16s_device::device_start() { - m_ram.allocate(0x10000); } diff --git a/src/devices/bus/s100/mm65k16s.h b/src/devices/bus/s100/mm65k16s.h index 10fa1daff7a..706d7e697b6 100644 --- a/src/devices/bus/s100/mm65k16s.h +++ b/src/devices/bus/s100/mm65k16s.h @@ -43,7 +43,7 @@ protected: virtual void s100_phantom_w(int state) override; private: - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; }; diff --git a/src/devices/bus/snes/event.cpp b/src/devices/bus/snes/event.cpp index 3591a2a679a..d6e8000eab3 100644 --- a/src/devices/bus/snes/event.cpp +++ b/src/devices/bus/snes/event.cpp @@ -173,10 +173,8 @@ inline uint16_t get_data(uint8_t *CPU, uint32_t addr) void sns_pfest94_device::speedup_addon_bios_access() { - m_upd7725->space(AS_PROGRAM).install_read_bank(0x0000, 0x07ff, "dsp_prg"); - m_upd7725->space(AS_DATA).install_read_bank(0x0000, 0x03ff, "dsp_data"); - membank("dsp_prg")->set_base(&m_dsp_prg[0]); - membank("dsp_data")->set_base(&m_dsp_data[0]); + m_upd7725->space(AS_PROGRAM).install_rom(0x0000, 0x07ff, &m_dsp_prg[0]); + m_upd7725->space(AS_DATA).install_rom(0x0000, 0x03ff, &m_dsp_data[0]); // copy data in the correct format for (int x = 0; x < 0x800; x++) m_dsp_prg[x] = (m_bios[x * 4] << 24) | (m_bios[x * 4 + 1] << 16) | (m_bios[x * 4 + 2] << 8) | 0x00; diff --git a/src/devices/bus/snes/upd.cpp b/src/devices/bus/snes/upd.cpp index 70396938e89..476a1b42544 100644 --- a/src/devices/bus/snes/upd.cpp +++ b/src/devices/bus/snes/upd.cpp @@ -322,10 +322,8 @@ void sns_rom_seta11dsp_device::device_add_mconfig(machine_config &config) void sns_rom20_necdsp_device::speedup_addon_bios_access() { - m_upd7725->space(AS_PROGRAM).install_read_bank(0x0000, 0x07ff, "dsp_prg"); - m_upd7725->space(AS_DATA).install_read_bank(0x0000, 0x03ff, "dsp_data"); - membank("dsp_prg")->set_base(&m_dsp_prg[0]); - membank("dsp_data")->set_base(&m_dsp_data[0]); + m_upd7725->space(AS_PROGRAM).install_rom(0x0000, 0x07ff, &m_dsp_prg[0]); + m_upd7725->space(AS_DATA).install_rom(0x0000, 0x03ff, &m_dsp_data[0]); // copy data in the correct format for (int x = 0; x < 0x800; x++) m_dsp_prg[x] = (m_bios[x * 4] << 24) | (m_bios[x * 4 + 1] << 16) | (m_bios[x * 4 + 2] << 8) | 0x00; @@ -335,10 +333,8 @@ void sns_rom20_necdsp_device::speedup_addon_bios_access() void sns_rom21_necdsp_device::speedup_addon_bios_access() { - m_upd7725->space(AS_PROGRAM).install_read_bank(0x0000, 0x07ff, "dsp_prg"); - m_upd7725->space(AS_DATA).install_read_bank(0x0000, 0x03ff, "dsp_data"); - membank("dsp_prg")->set_base(&m_dsp_prg[0]); - membank("dsp_data")->set_base(&m_dsp_data[0]); + m_upd7725->space(AS_PROGRAM).install_rom(0x0000, 0x07ff, &m_dsp_prg[0]); + m_upd7725->space(AS_DATA).install_rom(0x0000, 0x03ff, &m_dsp_data[0]); // copy data in the correct format for (int x = 0; x < 0x800; x++) m_dsp_prg[x] = (m_bios[x * 4] << 24) | (m_bios[x * 4 + 1] << 16) | (m_bios[x * 4 + 2] << 8) | 0x00; @@ -348,10 +344,8 @@ void sns_rom21_necdsp_device::speedup_addon_bios_access() void sns_rom_setadsp_device::speedup_addon_bios_access() { - m_upd96050->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, "dsp_prg"); - m_upd96050->space(AS_DATA).install_read_bank(0x0000, 0x07ff, "dsp_data"); - membank("dsp_prg")->set_base(&m_dsp_prg[0]); - membank("dsp_data")->set_base(&m_dsp_data[0]); + m_upd96050->space(AS_PROGRAM).install_rom(0x0000, 0x3fff, &m_dsp_prg[0]); + m_upd96050->space(AS_DATA).install_rom(0x0000, 0x07ff, &m_dsp_data[0]); // copy data in the correct format for (int x = 0; x < 0x4000; x++) m_dsp_prg[x] = (m_bios[x * 4] << 24) | (m_bios[x * 4 + 1] << 16) | (m_bios[x * 4 + 2] << 8) | 0x00; diff --git a/src/devices/bus/vic10/exp.cpp b/src/devices/bus/vic10/exp.cpp index a4f677c4ff1..69c33da6a1d 100644 --- a/src/devices/bus/vic10/exp.cpp +++ b/src/devices/bus/vic10/exp.cpp @@ -29,10 +29,7 @@ DEFINE_DEVICE_TYPE(VIC10_EXPANSION_SLOT, vic10_expansion_slot_device, "vic10_exp //------------------------------------------------- device_vic10_expansion_card_interface::device_vic10_expansion_card_interface(const machine_config &mconfig, device_t &device) : - device_interface(device, "vic10exp"), - m_lorom(*this, "lorom"), - m_exram(*this, "exram"), - m_uprom(*this, "uprom") + device_interface(device, "vic10exp") { m_slot = dynamic_cast<vic10_expansion_slot_device *>(device.owner()); } @@ -133,11 +130,11 @@ image_init_result vic10_expansion_slot_device::call_load() uint8_t *roml = nullptr; uint8_t *romh = nullptr; - m_card->m_lorom.allocate(roml_size); - m_card->m_uprom.allocate(romh_size); + m_card->m_lorom = std::make_unique<uint8_t[]>(roml_size); + m_card->m_uprom = std::make_unique<uint8_t[]>(romh_size); - if (roml_size) roml = m_card->m_lorom; - if (romh_size) romh = m_card->m_lorom; + if (roml_size) roml = m_card->m_lorom.get(); + if (romh_size) romh = m_card->m_lorom.get(); cbm_crt_read_data(image_core_file(), roml, romh); } diff --git a/src/devices/bus/vic10/exp.h b/src/devices/bus/vic10/exp.h index 8dd977550ac..20d21f99e1c 100644 --- a/src/devices/bus/vic10/exp.h +++ b/src/devices/bus/vic10/exp.h @@ -141,9 +141,9 @@ public: protected: device_vic10_expansion_card_interface(const machine_config &mconfig, device_t &device); - optional_shared_ptr<uint8_t> m_lorom; - optional_shared_ptr<uint8_t> m_exram; - optional_shared_ptr<uint8_t> m_uprom; + std::unique_ptr<uint8_t[]> m_lorom; + std::unique_ptr<uint8_t[]> m_exram; + std::unique_ptr<uint8_t[]> m_uprom; vic10_expansion_slot_device *m_slot; }; diff --git a/src/devices/bus/vic10/std.cpp b/src/devices/bus/vic10/std.cpp index de4ba6ff8b6..3ffda30fcd9 100644 --- a/src/devices/bus/vic10/std.cpp +++ b/src/devices/bus/vic10/std.cpp @@ -48,17 +48,17 @@ void vic10_standard_cartridge_device::device_start() uint8_t vic10_standard_cartridge_device::vic10_cd_r(offs_t offset, uint8_t data, int lorom, int uprom, int exram) { - if (!lorom && m_lorom.bytes()) + if (!lorom && m_lorom) { - data = m_lorom[offset & m_lorom.mask()]; + data = m_lorom[offset]; } - else if (!exram && m_exram.bytes()) + else if (!exram && m_exram) { - data = m_exram[offset & m_exram.mask()]; + data = m_exram[offset]; } - else if (!uprom && m_uprom.bytes()) + else if (!uprom && m_uprom) { - data = m_uprom[offset & m_uprom.mask()]; + data = m_uprom[offset]; } return data; @@ -71,8 +71,8 @@ uint8_t vic10_standard_cartridge_device::vic10_cd_r(offs_t offset, uint8_t data, void vic10_standard_cartridge_device::vic10_cd_w(offs_t offset, uint8_t data, int lorom, int uprom, int exram) { - if (!exram && m_exram.bytes()) + if (!exram && m_exram) { - m_exram[offset & m_exram.mask()] = data; + m_exram[offset] = data; } } diff --git a/src/devices/bus/vic20/exp.cpp b/src/devices/bus/vic20/exp.cpp index 7751ff4bc81..c7f0120b25f 100644 --- a/src/devices/bus/vic20/exp.cpp +++ b/src/devices/bus/vic20/exp.cpp @@ -28,12 +28,7 @@ DEFINE_DEVICE_TYPE(VIC20_EXPANSION_SLOT, vic20_expansion_slot_device, "vic20_exp //------------------------------------------------- device_vic20_expansion_card_interface::device_vic20_expansion_card_interface(const machine_config &mconfig, device_t &device) - : device_interface(device, "vic20exp"), - m_blk1(*this, "blk1"), - m_blk2(*this, "blk2"), - m_blk3(*this, "blk3"), - m_blk5(*this, "blk5"), - m_nvram(*this, "nvram") + : device_interface(device, "vic20exp") { m_slot = dynamic_cast<vic20_expansion_slot_device *>(device.owner()); } diff --git a/src/devices/bus/vic20/exp.h b/src/devices/bus/vic20/exp.h index b643c9089b2..96583a29577 100644 --- a/src/devices/bus/vic20/exp.h +++ b/src/devices/bus/vic20/exp.h @@ -134,11 +134,10 @@ public: protected: device_vic20_expansion_card_interface(const machine_config &mconfig, device_t &device); - optional_shared_ptr<uint8_t> m_blk1; - optional_shared_ptr<uint8_t> m_blk2; - optional_shared_ptr<uint8_t> m_blk3; - optional_shared_ptr<uint8_t> m_blk5; - optional_shared_ptr<uint8_t> m_nvram; + std::unique_ptr<uint8_t[]> m_blk1; + std::unique_ptr<uint8_t[]> m_blk2; + std::unique_ptr<uint8_t[]> m_blk3; + std::unique_ptr<uint8_t[]> m_blk5; vic20_expansion_slot_device *m_slot; }; diff --git a/src/devices/bus/vic20/fe3.cpp b/src/devices/bus/vic20/fe3.cpp index f008bec3cb8..230dc076bb4 100644 --- a/src/devices/bus/vic20/fe3.cpp +++ b/src/devices/bus/vic20/fe3.cpp @@ -105,7 +105,7 @@ vic20_final_expansion_3_device::vic20_final_expansion_3_device(const machine_con device_t(mconfig, VIC20_FE3, tag, owner, clock), device_vic20_expansion_card_interface(mconfig, *this), m_flash_rom(*this, AM29F040_TAG), - m_ram(*this, "sram"), m_reg1(0), m_reg2(0), m_lockbit(0) + m_ram(*this, "sram", 0x80000, ENDIANNESS_LITTLE), m_reg1(0), m_reg2(0), m_lockbit(0) { } @@ -116,8 +116,6 @@ vic20_final_expansion_3_device::vic20_final_expansion_3_device(const machine_con void vic20_final_expansion_3_device::device_start() { - m_ram.allocate(0x80000); - // state saving save_item(NAME(m_reg1)); save_item(NAME(m_reg2)); diff --git a/src/devices/bus/vic20/fe3.h b/src/devices/bus/vic20/fe3.h index 018ef2617b6..c82fff2f7ee 100644 --- a/src/devices/bus/vic20/fe3.h +++ b/src/devices/bus/vic20/fe3.h @@ -77,7 +77,7 @@ private: void write_register(offs_t offset, uint8_t data); required_device<amd_29f040_device> m_flash_rom; - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; uint8_t m_reg1; uint8_t m_reg2; diff --git a/src/devices/bus/vic20/megacart.cpp b/src/devices/bus/vic20/megacart.cpp index 8094adfba2b..21171bf4343 100644 --- a/src/devices/bus/vic20/megacart.cpp +++ b/src/devices/bus/vic20/megacart.cpp @@ -39,6 +39,7 @@ vic20_megacart_device::vic20_megacart_device(const machine_config &mconfig, cons : device_t(mconfig, VIC20_MEGACART, tag, owner, clock) , device_vic20_expansion_card_interface(mconfig, *this) , device_nvram_interface(mconfig, *this) + , m_nvram(*this, "nvram", 0x2000, ENDIANNESS_LITTLE) , m_nvram_en(0) { } @@ -50,8 +51,6 @@ vic20_megacart_device::vic20_megacart_device(const machine_config &mconfig, cons void vic20_megacart_device::device_start() { - m_nvram.allocate(0x2000); - // state saving save_item(NAME(m_nvram_en)); } diff --git a/src/devices/bus/vic20/megacart.h b/src/devices/bus/vic20/megacart.h index 52f5182fc3c..08e3ef0a59b 100644 --- a/src/devices/bus/vic20/megacart.h +++ b/src/devices/bus/vic20/megacart.h @@ -39,14 +39,15 @@ protected: // device_nvram_interface overrides virtual void nvram_default() override { } - virtual void nvram_read(emu_file &file) override { file.read(m_nvram, m_nvram.bytes()); } - virtual void nvram_write(emu_file &file) override { file.write(m_nvram, m_nvram.bytes()); } + virtual void nvram_read(emu_file &file) override { file.read(m_nvram, 0x2000); } + virtual void nvram_write(emu_file &file) override { file.write(m_nvram, 0x2000); } // device_vic20_expansion_card_interface overrides virtual uint8_t vic20_cd_r(offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3) override; virtual void vic20_cd_w(offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3) override; private: + memory_share_creator<uint8_t> m_nvram; int m_nvram_en; }; diff --git a/src/devices/bus/vic20/vic1110.cpp b/src/devices/bus/vic20/vic1110.cpp index 9b2d0c192d9..f9ee69fd8b1 100644 --- a/src/devices/bus/vic20/vic1110.cpp +++ b/src/devices/bus/vic20/vic1110.cpp @@ -69,7 +69,7 @@ ioport_constructor vic1110_device::device_input_ports() const vic1110_device::vic1110_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, VIC1110, tag, owner, clock) , device_vic20_expansion_card_interface(mconfig, *this) - , m_ram(*this, "ram") + , m_ram(*this, "ram", 0x2000, ENDIANNESS_LITTLE) , m_sw(*this, "SW") { } @@ -81,8 +81,6 @@ vic1110_device::vic1110_device(const machine_config &mconfig, const char *tag, d void vic1110_device::device_start() { - // allocate memory - m_ram.allocate(0x2000); } diff --git a/src/devices/bus/vic20/vic1110.h b/src/devices/bus/vic20/vic1110.h index 9ec1ea2791a..831bc478bf4 100644 --- a/src/devices/bus/vic20/vic1110.h +++ b/src/devices/bus/vic20/vic1110.h @@ -40,7 +40,7 @@ protected: virtual void vic20_cd_w(offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3) override; private: - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; required_ioport m_sw; }; diff --git a/src/devices/bus/vic20/vic1111.cpp b/src/devices/bus/vic20/vic1111.cpp index 1f8fa215078..4bb3a492ef2 100644 --- a/src/devices/bus/vic20/vic1111.cpp +++ b/src/devices/bus/vic20/vic1111.cpp @@ -30,7 +30,7 @@ DEFINE_DEVICE_TYPE(VIC1111, vic1111_device, "vic1111", "VIC-1111 16K RAM Expansi vic1111_device::vic1111_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, VIC1111, tag, owner, clock) , device_vic20_expansion_card_interface(mconfig, *this) - , m_ram(*this, "ram") + , m_ram(*this, "ram", 0x4000, ENDIANNESS_LITTLE) { } @@ -41,8 +41,6 @@ vic1111_device::vic1111_device(const machine_config &mconfig, const char *tag, d void vic1111_device::device_start() { - // allocate memory - m_ram.allocate(0x4000); } diff --git a/src/devices/bus/vic20/vic1111.h b/src/devices/bus/vic20/vic1111.h index eb42db2f149..7d391875732 100644 --- a/src/devices/bus/vic20/vic1111.h +++ b/src/devices/bus/vic20/vic1111.h @@ -37,7 +37,7 @@ protected: virtual void vic20_cd_w(offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3) override; private: - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; }; diff --git a/src/devices/bus/vic20/vic1210.cpp b/src/devices/bus/vic20/vic1210.cpp index 6fa2a917254..88c94e8fbbd 100644 --- a/src/devices/bus/vic20/vic1210.cpp +++ b/src/devices/bus/vic20/vic1210.cpp @@ -31,7 +31,7 @@ DEFINE_DEVICE_TYPE(VIC1210, vic1210_device, "vic1210", "VIC-1210 3K RAM Expansio vic1210_device::vic1210_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, VIC1210, tag, owner, clock) , device_vic20_expansion_card_interface(mconfig, *this) - , m_ram(*this, "ram") + , m_ram(*this, "ram", 0xc00, ENDIANNESS_LITTLE) { } @@ -42,8 +42,6 @@ vic1210_device::vic1210_device(const machine_config &mconfig, const char *tag, d void vic1210_device::device_start() { - // allocate memory - m_ram.allocate(0xc00); } diff --git a/src/devices/bus/vic20/vic1210.h b/src/devices/bus/vic20/vic1210.h index f890d5ad61e..9f20f9164ad 100644 --- a/src/devices/bus/vic20/vic1210.h +++ b/src/devices/bus/vic20/vic1210.h @@ -38,7 +38,7 @@ protected: virtual void vic20_cd_w(offs_t offset, uint8_t data, int ram1, int ram2, int ram3, int blk1, int blk2, int blk3, int blk5, int io2, int io3) override; private: - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; }; diff --git a/src/devices/bus/vic20/videopak.cpp b/src/devices/bus/vic20/videopak.cpp index 1f2b3c35431..542c2fb8320 100644 --- a/src/devices/bus/vic20/videopak.cpp +++ b/src/devices/bus/vic20/videopak.cpp @@ -131,8 +131,8 @@ vic20_video_pak_device::vic20_video_pak_device(const machine_config &mconfig, co m_crtc(*this, MC6845_TAG), m_palette(*this, "palette"), m_char_rom(*this, MC6845_TAG), - m_videoram(*this, "videoram"), - m_ram(*this, "ram") + m_videoram(*this, "videoram", VIDEORAM_SIZE, ENDIANNESS_LITTLE), + m_ram(*this, "ram", RAM_SIZE, ENDIANNESS_LITTLE) { } @@ -143,9 +143,6 @@ vic20_video_pak_device::vic20_video_pak_device(const machine_config &mconfig, co void vic20_video_pak_device::device_start() { - // allocate memory - m_videoram.allocate(VIDEORAM_SIZE); - m_ram.allocate(RAM_SIZE); } diff --git a/src/devices/bus/vic20/videopak.h b/src/devices/bus/vic20/videopak.h index 9e3176e5365..d87b04d35c1 100644 --- a/src/devices/bus/vic20/videopak.h +++ b/src/devices/bus/vic20/videopak.h @@ -51,8 +51,8 @@ private: required_device<mc6845_device> m_crtc; required_device<palette_device> m_palette; required_memory_region m_char_rom; - optional_shared_ptr<uint8_t> m_videoram; - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_videoram; + memory_share_creator<uint8_t> m_ram; bool m_case; bool m_bank_size; diff --git a/src/devices/bus/vip/vp570.cpp b/src/devices/bus/vip/vp570.cpp index f9473bd2f87..f2e32dffd35 100644 --- a/src/devices/bus/vip/vp570.cpp +++ b/src/devices/bus/vip/vp570.cpp @@ -63,7 +63,7 @@ ioport_constructor vp570_device::device_input_ports() const vp570_device::vp570_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, VP570, tag, owner, clock), device_vip_expansion_card_interface(mconfig, *this), - m_ram(*this, "ram"), + m_ram(*this, "ram", 0x1000, ENDIANNESS_LITTLE), m_base(*this, "BASE"), m_sw1(*this, "SW1") { @@ -76,7 +76,6 @@ vp570_device::vp570_device(const machine_config &mconfig, const char *tag, devic void vp570_device::device_start() { - m_ram.allocate(0x1000); } diff --git a/src/devices/bus/vip/vp570.h b/src/devices/bus/vip/vp570.h index 04ad752d804..2f026bd1eac 100644 --- a/src/devices/bus/vip/vp570.h +++ b/src/devices/bus/vip/vp570.h @@ -40,7 +40,7 @@ protected: virtual void vip_program_w(offs_t offset, uint8_t data, int cdef, int *minh) override; private: - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; required_ioport m_base; required_ioport m_sw1; }; diff --git a/src/devices/bus/vip/vp590.cpp b/src/devices/bus/vip/vp590.cpp index 3fd9185c5d1..296ce70fb8b 100644 --- a/src/devices/bus/vip/vp590.cpp +++ b/src/devices/bus/vip/vp590.cpp @@ -131,7 +131,7 @@ vp590_device::vp590_device(const machine_config &mconfig, const char *tag, devic device_t(mconfig, VP590, tag, owner, clock), device_vip_expansion_card_interface(mconfig, *this), m_cgc(*this, CDP1862_TAG), - m_color_ram(*this, "color_ram"), + m_color_ram(*this, "color_ram", COLOR_RAM_SIZE, ENDIANNESS_LITTLE), m_j1(*this, "J1"), m_j2(*this, "J2"), m_a12(0), m_color(0), m_keylatch(0) @@ -145,9 +145,6 @@ vp590_device::vp590_device(const machine_config &mconfig, const char *tag, devic void vp590_device::device_start() { - // allocate memory - m_color_ram.allocate(COLOR_RAM_SIZE); - // state saving save_item(NAME(m_a12)); save_item(NAME(m_color)); diff --git a/src/devices/bus/vip/vp590.h b/src/devices/bus/vip/vp590.h index 230b7d8d02d..9c69762f7be 100644 --- a/src/devices/bus/vip/vp590.h +++ b/src/devices/bus/vip/vp590.h @@ -50,7 +50,7 @@ private: DECLARE_READ_LINE_MEMBER( gd_r ); required_device<cdp1862_device> m_cgc; - optional_shared_ptr<uint8_t> m_color_ram; + memory_share_creator<uint8_t> m_color_ram; required_ioport m_j1; required_ioport m_j2; diff --git a/src/devices/bus/vtech/memexp/memory.cpp b/src/devices/bus/vtech/memexp/memory.cpp index 22bcc69b959..1b9465d9da9 100644 --- a/src/devices/bus/vtech/memexp/memory.cpp +++ b/src/devices/bus/vtech/memexp/memory.cpp @@ -129,7 +129,8 @@ void vtech_laser310_16k_device::device_reset() vtech_laser_64k_device::vtech_laser_64k_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, VTECH_LASER_64K, tag, owner, clock), - device_vtech_memexp_interface(mconfig, *this) + device_vtech_memexp_interface(mconfig, *this), + m_bank(*this, "bank") { } @@ -152,10 +153,10 @@ void vtech_laser_64k_device::device_reset() program_space().install_ram(0x8000, 0xbfff, &m_ram[0]); // other banks - program_space().install_readwrite_bank(0xc000, 0xffff, tag()); + program_space().install_readwrite_bank(0xc000, 0xffff, m_bank); - membank(tag())->configure_entries(0, 4, &m_ram[0], 0x4000); - membank(tag())->set_entry(1); + m_bank->configure_entries(0, 4, &m_ram[0], 0x4000); + m_bank->set_entry(1); // bank switch io_space().install_write_handler(0x70, 0x7f, write8smo_delegate(*this, FUNC(vtech_laser_64k_device::bankswitch_w))); @@ -163,5 +164,5 @@ void vtech_laser_64k_device::device_reset() void vtech_laser_64k_device::bankswitch_w(uint8_t data) { - membank(tag())->set_entry(data & 0x03); + m_bank->set_entry(data & 0x03); } diff --git a/src/devices/bus/vtech/memexp/memory.h b/src/devices/bus/vtech/memexp/memory.h index 6f87f3b51b8..84c3952fb67 100644 --- a/src/devices/bus/vtech/memexp/memory.h +++ b/src/devices/bus/vtech/memexp/memory.h @@ -81,6 +81,7 @@ protected: virtual void device_reset() override; private: + memory_bank_creator m_bank; std::vector<uint8_t> m_ram; }; diff --git a/src/devices/bus/wangpc/emb.cpp b/src/devices/bus/wangpc/emb.cpp index 8a1817d1666..6a69c1a0fee 100644 --- a/src/devices/bus/wangpc/emb.cpp +++ b/src/devices/bus/wangpc/emb.cpp @@ -47,7 +47,7 @@ DEFINE_DEVICE_TYPE(WANGPC_EMB, wangpc_emb_device, "wangpc_emb", "Wang PC-PM031-B wangpc_emb_device::wangpc_emb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, WANGPC_EMB, tag, owner, clock), device_wangpcbus_card_interface(mconfig, *this), - m_ram(*this, "ram"), + m_ram(*this, "ram", RAM_SIZE, ENDIANNESS_LITTLE), m_option(0), m_parity_error(0), m_parity_odd(0) { } @@ -59,9 +59,6 @@ wangpc_emb_device::wangpc_emb_device(const machine_config &mconfig, const char * void wangpc_emb_device::device_start() { - // allocate memory - m_ram.allocate(RAM_SIZE); - // state saving save_item(NAME(m_option)); save_item(NAME(m_parity_error)); diff --git a/src/devices/bus/wangpc/emb.h b/src/devices/bus/wangpc/emb.h index 1e175ae6867..1f23fed9f09 100644 --- a/src/devices/bus/wangpc/emb.h +++ b/src/devices/bus/wangpc/emb.h @@ -40,7 +40,7 @@ protected: virtual void wangpcbus_aiowc_w(offs_t offset, uint16_t mem_mask, uint16_t data) override; private: - optional_shared_ptr<uint16_t> m_ram; + memory_share_creator<uint16_t> m_ram; uint16_t m_option; int m_parity_error; int m_parity_odd; diff --git a/src/devices/bus/wangpc/lvc.cpp b/src/devices/bus/wangpc/lvc.cpp index 1fd3c0610d4..2eb45e47db0 100644 --- a/src/devices/bus/wangpc/lvc.cpp +++ b/src/devices/bus/wangpc/lvc.cpp @@ -164,7 +164,7 @@ wangpc_lvc_device::wangpc_lvc_device(const machine_config &mconfig, const char * device_t(mconfig, WANGPC_LVC, tag, owner, clock), device_wangpcbus_card_interface(mconfig, *this), m_crtc(*this, MC6845_TAG), - m_video_ram(*this, "video_ram"), + m_video_ram(*this, "video_ram", RAM_SIZE, ENDIANNESS_LITTLE), m_option(0), m_scroll(0), m_irq(CLEAR_LINE) { @@ -177,9 +177,6 @@ wangpc_lvc_device::wangpc_lvc_device(const machine_config &mconfig, const char * void wangpc_lvc_device::device_start() { - // allocate memory - m_video_ram.allocate(RAM_SIZE); - // state saving save_item(NAME(m_option)); save_item(NAME(m_scroll)); diff --git a/src/devices/bus/wangpc/lvc.h b/src/devices/bus/wangpc/lvc.h index 3fa858adf1c..7f0cb5ac816 100644 --- a/src/devices/bus/wangpc/lvc.h +++ b/src/devices/bus/wangpc/lvc.h @@ -48,7 +48,7 @@ private: inline void set_irq(int state); required_device<mc6845_device> m_crtc; - optional_shared_ptr<uint16_t> m_video_ram; + memory_share_creator<uint16_t> m_video_ram; rgb_t m_palette[16]; uint8_t m_option; diff --git a/src/devices/bus/wangpc/mvc.cpp b/src/devices/bus/wangpc/mvc.cpp index cff515a05c1..9455ba23463 100644 --- a/src/devices/bus/wangpc/mvc.cpp +++ b/src/devices/bus/wangpc/mvc.cpp @@ -186,9 +186,9 @@ wangpc_mvc_device::wangpc_mvc_device(const machine_config &mconfig, const char * device_t(mconfig, WANGPC_MVC, tag, owner, clock), device_wangpcbus_card_interface(mconfig, *this), m_crtc(*this, MC6845_TAG), - m_video_ram(*this, "video_ram"), - m_char_ram(*this, "char_ram"), - m_bitmap_ram(*this, "bitmap_ram"), + m_video_ram(*this, "video_ram", VIDEO_RAM_SIZE, ENDIANNESS_LITTLE), + m_char_ram(*this, "char_ram", CHAR_RAM_SIZE, ENDIANNESS_LITTLE), + m_bitmap_ram(*this, "bitmap_ram", BITMAP_RAM_SIZE, ENDIANNESS_LITTLE), m_option(0), m_irq(CLEAR_LINE) { @@ -201,11 +201,6 @@ wangpc_mvc_device::wangpc_mvc_device(const machine_config &mconfig, const char * void wangpc_mvc_device::device_start() { - // allocate memory - m_video_ram.allocate(VIDEO_RAM_SIZE); - m_char_ram.allocate(CHAR_RAM_SIZE); - m_bitmap_ram.allocate(BITMAP_RAM_SIZE); - // state saving save_item(NAME(m_option)); save_item(NAME(m_irq)); diff --git a/src/devices/bus/wangpc/mvc.h b/src/devices/bus/wangpc/mvc.h index aee0cdf51b2..9911952f6ac 100644 --- a/src/devices/bus/wangpc/mvc.h +++ b/src/devices/bus/wangpc/mvc.h @@ -48,9 +48,9 @@ private: inline void set_irq(int state); required_device<mc6845_device> m_crtc; - optional_shared_ptr<uint16_t> m_video_ram; - optional_shared_ptr<uint16_t> m_char_ram; - optional_shared_ptr<uint16_t> m_bitmap_ram; + memory_share_creator<uint16_t> m_video_ram; + memory_share_creator<uint16_t> m_char_ram; + memory_share_creator<uint16_t> m_bitmap_ram; uint8_t m_option; int m_irq; diff --git a/src/devices/bus/wangpc/rtc.cpp b/src/devices/bus/wangpc/rtc.cpp index bb299017730..8cd5e055ac6 100644 --- a/src/devices/bus/wangpc/rtc.cpp +++ b/src/devices/bus/wangpc/rtc.cpp @@ -186,7 +186,7 @@ wangpc_rtc_device::wangpc_rtc_device(const machine_config &mconfig, const char * m_ctc0(*this, Z80CTC_0_TAG), m_ctc1(*this, Z80CTC_1_TAG), m_sio(*this, Z80SIO_TAG), - m_char_ram(*this, "char_ram") + m_char_ram(*this, "char_ram", 0x100, ENDIANNESS_LITTLE) { } @@ -197,7 +197,6 @@ wangpc_rtc_device::wangpc_rtc_device(const machine_config &mconfig, const char * void wangpc_rtc_device::device_start() { - m_char_ram.allocate(0x100); } diff --git a/src/devices/bus/wangpc/rtc.h b/src/devices/bus/wangpc/rtc.h index eb848b599ec..4366536ccdf 100644 --- a/src/devices/bus/wangpc/rtc.h +++ b/src/devices/bus/wangpc/rtc.h @@ -52,7 +52,7 @@ private: required_device<z80ctc_device> m_ctc0; required_device<z80ctc_device> m_ctc1; required_device<z80sio_device> m_sio; - optional_shared_ptr<uint8_t> m_char_ram; + memory_share_creator<uint8_t> m_char_ram; void wangpc_rtc_io(address_map &map); void wangpc_rtc_mem(address_map &map); diff --git a/src/devices/bus/x68k/x68k_scsiext.cpp b/src/devices/bus/x68k/x68k_scsiext.cpp index 54766c445ac..bec669ef1f5 100644 --- a/src/devices/bus/x68k/x68k_scsiext.cpp +++ b/src/devices/bus/x68k/x68k_scsiext.cpp @@ -65,13 +65,11 @@ x68k_scsiext_device::x68k_scsiext_device(const machine_config &mconfig, const ch void x68k_scsiext_device::device_start() { - m_slot = dynamic_cast<x68k_expansion_slot_device *>(owner()); - m_slot->space().install_read_bank(0xea0020,0xea1fff,"scsi_ext"); - m_slot->space().unmap_write(0xea0020,0xea1fff); - uint8_t *ROM = machine().root_device().memregion(subtag("scsiexrom").c_str())->base(); - machine().root_device().membank("scsi_ext")->set_base(ROM); + m_slot = dynamic_cast<x68k_expansion_slot_device *>(owner()); + m_slot->space().install_rom(0xea0020,0xea1fff,ROM); + m_slot->space().unmap_write(0xea0020,0xea1fff); m_slot->space().install_readwrite_handler(0xea0000,0xea001f, read8sm_delegate(*this, FUNC(x68k_scsiext_device::register_r)), write8sm_delegate(*this, FUNC(x68k_scsiext_device::register_w)), 0x00ff00ff); } diff --git a/src/devices/cpu/dsp16/dsp16.cpp b/src/devices/cpu/dsp16/dsp16.cpp index a4ff22587e9..d7da812acf2 100644 --- a/src/devices/cpu/dsp16/dsp16.cpp +++ b/src/devices/cpu/dsp16/dsp16.cpp @@ -2082,7 +2082,7 @@ dsp16_device::dsp16_device(machine_config const &mconfig, char const *tag, devic mconfig, DSP16, tag, owner, clock, 9, address_map_constructor(FUNC(dsp16_device::data_map), this)) - , m_rom(*this, DEVICE_SELF, 0x0800) + , m_rom(*this, DEVICE_SELF) { } @@ -2114,7 +2114,7 @@ dsp16a_device::dsp16a_device(machine_config const &mconfig, char const *tag, dev mconfig, DSP16A, tag, owner, clock, 16, address_map_constructor(FUNC(dsp16a_device::data_map), this)) - , m_rom(*this, DEVICE_SELF, 0x1000) + , m_rom(*this, DEVICE_SELF) { } diff --git a/src/devices/cpu/m6805/m68705.cpp b/src/devices/cpu/m6805/m68705.cpp index 067cd06b811..964286124ba 100644 --- a/src/devices/cpu/m6805/m68705.cpp +++ b/src/devices/cpu/m6805/m68705.cpp @@ -231,7 +231,7 @@ m6805_hmos_device::m6805_hmos_device(machine_config const &mconfig, char const * m68705_device::m68705_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock, device_type type, u32 addr_width, unsigned ram_size) : m6805_hmos_device(mconfig, tag, owner, clock, type, addr_width, ram_size) , device_nvram_interface(mconfig, *this) - , m_user_rom(*this, DEVICE_SELF, u32(1) << addr_width) + , m_user_rom(*this, DEVICE_SELF) , m_vihtp(CLEAR_LINE) , m_pcr(0xff) , m_pl_data(0xff) diff --git a/src/devices/cpu/m6805/m68hc05.cpp b/src/devices/cpu/m6805/m68hc05.cpp index d2869fe8b04..38cf06a2f03 100644 --- a/src/devices/cpu/m6805/m68hc05.cpp +++ b/src/devices/cpu/m6805/m68hc05.cpp @@ -952,7 +952,7 @@ m68hc705c4a_device::m68hc705c4a_device(machine_config const &mconfig, char const M68HC705C4A, 13, address_map_constructor(FUNC(m68hc705c4a_device::c4a_map), this)) - , m_rom(*this, DEVICE_SELF, 0x2000) + , m_rom(*this, DEVICE_SELF) { set_port_bits(std::array<u8, PORT_COUNT>{{ 0xff, 0xff, 0xff, 0xbf }}); } @@ -1048,7 +1048,7 @@ m68hc705c8a_device::m68hc705c8a_device(machine_config const &mconfig, char const M68HC705C8A, 13, address_map_constructor(FUNC(m68hc705c8a_device::c8a_map), this)) - , m_rom(*this, DEVICE_SELF, 0x2000) + , m_rom(*this, DEVICE_SELF) { set_port_bits(std::array<u8, PORT_COUNT>{{ 0xff, 0xff, 0xff, 0xbf }}); } diff --git a/src/devices/machine/at28c16.cpp b/src/devices/machine/at28c16.cpp index 622dfb3fc19..acbee4613eb 100644 --- a/src/devices/machine/at28c16.cpp +++ b/src/devices/machine/at28c16.cpp @@ -48,7 +48,7 @@ at28c16_device::at28c16_device(const machine_config &mconfig, const char *tag, d m_a9_12v(0), m_oe_12v(0), m_last_write(-1), - m_default_data(*this, DEVICE_SELF, AT28C16_DATA_BYTES) + m_default_data(*this, DEVICE_SELF) { } diff --git a/src/devices/machine/cs4031.cpp b/src/devices/machine/cs4031.cpp index 4af64f320a1..b8919cca609 100644 --- a/src/devices/machine/cs4031.cpp +++ b/src/devices/machine/cs4031.cpp @@ -565,28 +565,25 @@ void cs4031_device::config_data_w(uint8_t data) // MEMORY MAPPER //************************************************************************** -void cs4031_device::update_read_region(int index, const char *region, offs_t start, offs_t end) +void cs4031_device::update_read_region(int index, offs_t start, offs_t end) { if (!BIT(m_registers[SHADOW_READ], index) && BIT(m_registers[ROMCS], index)) { LOGMEMORY("ROM read from %x to %x\n", start, end); - m_space->install_read_bank(start, end, region); - machine().root_device().membank(region)->set_base(m_bios + start); + m_space->install_rom(start, end, m_bios + start); } else if (!BIT(m_registers[SHADOW_READ], index) && !BIT(m_registers[ROMCS], index)) { LOGMEMORY("ISA read from %x to %x\n", start, end); - m_space->install_read_bank(start, end, region); - machine().root_device().membank(region)->set_base(m_isa + start - 0xc0000); + m_space->install_rom(start, end, m_isa + start - 0xc0000); } else if (BIT(m_registers[SHADOW_READ], index)) { LOGMEMORY("RAM read from %x to %x\n", start, end); - m_space->install_read_bank(start, end, region); - machine().root_device().membank(region)->set_base(m_ram + start); + m_space->install_rom(start, end, m_ram + start); } else { @@ -596,28 +593,25 @@ void cs4031_device::update_read_region(int index, const char *region, offs_t sta } } -void cs4031_device::update_write_region(int index, const char *region, offs_t start, offs_t end) +void cs4031_device::update_write_region(int index, offs_t start, offs_t end) { if (!BIT(m_registers[SHADOW_WRITE], index) && BIT(m_registers[ROMCS], index) && BIT(m_registers[ROMCS], 7)) { LOGMEMORY("ROM write from %x to %x\n", start, end); - m_space->install_write_bank(start, end, region); - machine().root_device().membank(region)->set_base(m_bios + start); + m_space->install_writeonly(start, end, m_bios + start); } else if (!BIT(m_registers[SHADOW_WRITE], index) && !BIT(m_registers[ROMCS], index)) { LOGMEMORY("ISA write from %x to %x\n", start, end); - m_space->install_write_bank(start, end, region); - machine().root_device().membank(region)->set_base(m_isa + start - 0xc0000); + m_space->install_writeonly(start, end, m_isa + start - 0xc0000); } else if (BIT(m_registers[SHADOW_WRITE], index)) { LOGMEMORY("RAM write from %x to %x\n", start, end); - m_space->install_write_bank(start, end, region); - machine().root_device().membank(region)->set_base(m_ram + start); + m_space->install_writeonly(start, end, m_ram + start); } else { @@ -629,24 +623,24 @@ void cs4031_device::update_write_region(int index, const char *region, offs_t st void cs4031_device::update_read_regions() { - update_read_region(0, "read_c0000", 0xc0000, 0xc3fff); - update_read_region(1, "read_c4000", 0xc4000, 0xc7fff); - update_read_region(2, "read_c8000", 0xc8000, 0xcbfff); - update_read_region(3, "read_cc000", 0xcc000, 0xcffff); - update_read_region(4, "read_d0000", 0xd0000, 0xdffff); - update_read_region(5, "read_e0000", 0xe0000, 0xeffff); - update_read_region(6, "read_f0000", 0xf0000, 0xfffff); + update_read_region(0, 0xc0000, 0xc3fff); + update_read_region(1, 0xc4000, 0xc7fff); + update_read_region(2, 0xc8000, 0xcbfff); + update_read_region(3, 0xcc000, 0xcffff); + update_read_region(4, 0xd0000, 0xdffff); + update_read_region(5, 0xe0000, 0xeffff); + update_read_region(6, 0xf0000, 0xfffff); } void cs4031_device::update_write_regions() { - update_write_region(0, "write_c0000", 0xc0000, 0xc3fff); - update_write_region(1, "write_c4000", 0xc4000, 0xc7fff); - update_write_region(2, "write_c8000", 0xc8000, 0xcbfff); - update_write_region(3, "write_cc000", 0xcc000, 0xcffff); - update_write_region(4, "write_d0000", 0xd0000, 0xdffff); - update_write_region(5, "write_e0000", 0xe0000, 0xeffff); - update_write_region(6, "write_f0000", 0xf0000, 0xfffff); + update_write_region(0, 0xc0000, 0xc3fff); + update_write_region(1, 0xc4000, 0xc7fff); + update_write_region(2, 0xc8000, 0xcbfff); + update_write_region(3, 0xcc000, 0xcffff); + update_write_region(4, 0xd0000, 0xdffff); + update_write_region(5, 0xe0000, 0xeffff); + update_write_region(6, 0xf0000, 0xfffff); } diff --git a/src/devices/machine/cs4031.h b/src/devices/machine/cs4031.h index 21cb09f2eb0..b8540380679 100644 --- a/src/devices/machine/cs4031.h +++ b/src/devices/machine/cs4031.h @@ -142,8 +142,8 @@ private: void fast_gatea20(int state); void keyboard_gatea20(int state); - void update_read_region(int index, const char *region, offs_t start, offs_t end); - void update_write_region(int index, const char *region, offs_t start, offs_t end); + void update_read_region(int index, offs_t start, offs_t end); + void update_write_region(int index, offs_t start, offs_t end); void update_read_regions(); void update_write_regions(); diff --git a/src/devices/machine/ds1386.cpp b/src/devices/machine/ds1386.cpp index c5a9048f2fc..4333a6bcc5c 100644 --- a/src/devices/machine/ds1386.cpp +++ b/src/devices/machine/ds1386.cpp @@ -46,7 +46,7 @@ ds1386_device::ds1386_device(const machine_config &mconfig, device_type type, co , m_watchdog_timer(nullptr) , m_inta_timer(nullptr) , m_intb_timer(nullptr) - , m_default_data(*this, DEVICE_SELF, size) + , m_default_data(*this, DEVICE_SELF) , m_hundredths(0) , m_seconds(0) , m_minutes(0) diff --git a/src/devices/machine/er1400.cpp b/src/devices/machine/er1400.cpp index a4eed0dacae..f42a9f58f9c 100644 --- a/src/devices/machine/er1400.cpp +++ b/src/devices/machine/er1400.cpp @@ -42,7 +42,7 @@ DEFINE_DEVICE_TYPE(ER1400, er1400_device, "er1400", "ER1400 Serial EAROM (100x14 er1400_device::er1400_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : device_t(mconfig, ER1400, tag, owner, clock) , device_nvram_interface(mconfig, *this) - , m_default_data(*this, DEVICE_SELF, 100) + , m_default_data(*this, DEVICE_SELF) , m_clock_input(0) , m_code_input(0) , m_data_input(0) diff --git a/src/devices/machine/er2055.cpp b/src/devices/machine/er2055.cpp index ad61551bd8f..20fd3805e7d 100644 --- a/src/devices/machine/er2055.cpp +++ b/src/devices/machine/er2055.cpp @@ -37,7 +37,7 @@ DEFINE_DEVICE_TYPE(ER2055, er2055_device, "er2055", "ER2055 EAROM (64x8)") er2055_device::er2055_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, ER2055, tag, owner, clock), device_nvram_interface(mconfig, *this), - m_default_data(*this, DEVICE_SELF, SIZE_DATA), + m_default_data(*this, DEVICE_SELF), m_control_state(0), m_address(0), m_data(0) diff --git a/src/devices/machine/i82875p.cpp b/src/devices/machine/i82875p.cpp index a2b29782387..37d95112359 100644 --- a/src/devices/machine/i82875p.cpp +++ b/src/devices/machine/i82875p.cpp @@ -443,7 +443,7 @@ void i82875p_overflow_device::overflow_map(address_map &map) { map(0x000, 0x007).rw(FUNC(i82875p_overflow_device::dram_row_boundary_r), FUNC(i82875p_overflow_device::dram_row_boundary_w)); map(0x010, 0x013).rw(FUNC(i82875p_overflow_device::dram_row_attribute_r), FUNC(i82875p_overflow_device::dram_row_attribute_w)); - map(0x060, 0x064).rw(FUNC(i82875p_overflow_device::dram_timing_r), FUNC(i82875p_overflow_device::dram_timing_w)); + map(0x060, 0x063).rw(FUNC(i82875p_overflow_device::dram_timing_r), FUNC(i82875p_overflow_device::dram_timing_w)); map(0x068, 0x06b).rw(FUNC(i82875p_overflow_device::dram_controller_mode_r), FUNC(i82875p_overflow_device::dram_controller_mode_w)); } diff --git a/src/devices/machine/i8355.cpp b/src/devices/machine/i8355.cpp index f6a28f07297..caa31eb7e1a 100644 --- a/src/devices/machine/i8355.cpp +++ b/src/devices/machine/i8355.cpp @@ -93,7 +93,7 @@ i8355_device::i8355_device(const machine_config &mconfig, const char *tag, devic m_out_pa_cb(*this), m_in_pb_cb(*this), m_out_pb_cb(*this), - m_rom(*this, DEVICE_SELF, 0x800) + m_rom(*this, DEVICE_SELF) { } diff --git a/src/devices/machine/mos6530n.cpp b/src/devices/machine/mos6530n.cpp index 0c19a5aaed6..e6ad3c9dc86 100644 --- a/src/devices/machine/mos6530n.cpp +++ b/src/devices/machine/mos6530n.cpp @@ -118,9 +118,9 @@ void mos6532_new_device::io_w(offs_t offset, uint8_t data) // mos6530_device_base - constructor //------------------------------------------------- -mos6530_device_base::mos6530_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : +mos6530_device_base::mos6530_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, u32 rsize) : device_t(mconfig, type, tag, owner, clock), - m_ram(*this, finder_base::DUMMY_TAG), + m_ram(*this, finder_base::DUMMY_TAG, rsize, ENDIANNESS_LITTLE), m_rom(*this, DEVICE_SELF), m_irq_cb(*this), m_in8_pa_cb(*this), @@ -155,7 +155,7 @@ mos6530_device_base::mos6530_device_base(const machine_config &mconfig, device_t //------------------------------------------------- mos6530_new_device::mos6530_new_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : mos6530_device_base(mconfig, MOS6530_NEW, tag, owner, clock) { } + : mos6530_device_base(mconfig, MOS6530_NEW, tag, owner, clock, 0x40) { } //------------------------------------------------- @@ -163,7 +163,7 @@ mos6530_new_device::mos6530_new_device(const machine_config &mconfig, const char //------------------------------------------------- mos6532_new_device::mos6532_new_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : mos6530_device_base(mconfig, MOS6532_NEW, tag, owner, clock) { } + : mos6530_device_base(mconfig, MOS6532_NEW, tag, owner, clock, 0x80) { } //------------------------------------------------- @@ -203,22 +203,6 @@ void mos6530_device_base::device_start() save_item(NAME(m_timer)); } -void mos6530_new_device::device_start() -{ - mos6530_device_base::device_start(); - - // allocate RAM - m_ram.allocate(0x40); -} - -void mos6532_new_device::device_start() -{ - mos6530_device_base::device_start(); - - // allocate RAM - m_ram.allocate(0x80); -} - //------------------------------------------------- // device_reset - device-specific reset diff --git a/src/devices/machine/mos6530n.h b/src/devices/machine/mos6530n.h index 3a6a2289944..2822d18d6bf 100644 --- a/src/devices/machine/mos6530n.h +++ b/src/devices/machine/mos6530n.h @@ -96,7 +96,7 @@ public: protected: // construction/destruction - mos6530_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + mos6530_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, u32 rsize); // device-level overrides virtual void device_start() override; @@ -137,7 +137,7 @@ protected: void timer_on_w(offs_t offset, uint8_t data); void edge_w(uint8_t data); - optional_shared_ptr<uint8_t> m_ram; + memory_share_creator<uint8_t> m_ram; optional_region_ptr<uint8_t> m_rom; devcb_write_line m_irq_cb; @@ -207,8 +207,6 @@ public: protected: // device-level overrides - virtual void device_start() override; - void update_pb() override; void update_irq() override; uint8_t get_irq_flags() override; @@ -227,10 +225,6 @@ public: // is there a better way to access the memory map when not using m()? uint8_t io_r(offs_t offset); void io_w(offs_t offset, uint8_t data); - -protected: - // device-level overrides - virtual void device_start() override; }; diff --git a/src/devices/machine/rp5h01.cpp b/src/devices/machine/rp5h01.cpp index 21367354256..655ffd5f841 100644 --- a/src/devices/machine/rp5h01.cpp +++ b/src/devices/machine/rp5h01.cpp @@ -35,7 +35,7 @@ DEFINE_DEVICE_TYPE(RP5H01, rp5h01_device, "rp5h01", "RP5H01 6/7-bit Counter") rp5h01_device::rp5h01_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, RP5H01, tag, owner, clock) , m_data(nullptr) - , m_rom(*this, DEVICE_SELF, 0x10) + , m_rom(*this, DEVICE_SELF) { } diff --git a/src/devices/machine/timekpr.cpp b/src/devices/machine/timekpr.cpp index ce9d6d3f327..5128ef1ac62 100644 --- a/src/devices/machine/timekpr.cpp +++ b/src/devices/machine/timekpr.cpp @@ -93,7 +93,7 @@ timekeeper_device::timekeeper_device(const machine_config &mconfig, device_type , device_nvram_interface(mconfig, *this) , m_reset_cb(*this) , m_irq_cb(*this) - , m_default_data(*this, DEVICE_SELF, size) + , m_default_data(*this, DEVICE_SELF) , m_size(size) { } diff --git a/src/devices/machine/vt82c496.cpp b/src/devices/machine/vt82c496.cpp index 16d309adb91..ad58ac95b69 100644 --- a/src/devices/machine/vt82c496.cpp +++ b/src/devices/machine/vt82c496.cpp @@ -17,7 +17,28 @@ DEFINE_DEVICE_TYPE(VT82C496, vt82c496_device, "vt82c496", "VIA VT82C496 system c vt82c496_device::vt82c496_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, VT82C496, tag, owner, clock), m_cpu(*this, finder_base::DUMMY_TAG), m_space(nullptr), m_ram(*this, finder_base::DUMMY_TAG), m_rom(*this, finder_base::DUMMY_TAG), m_reg_select(0) + : device_t(mconfig, VT82C496, tag, owner, clock), m_cpu(*this, finder_base::DUMMY_TAG), m_space(nullptr), m_ram(*this, finder_base::DUMMY_TAG), m_rom(*this, finder_base::DUMMY_TAG), + m_bios_c0_r(*this, "bios_c0_r"), + m_bios_c4_r(*this, "bios_c4_r"), + m_bios_c8_r(*this, "bios_c8_r"), + m_bios_cc_r(*this, "bios_cc_r"), + m_bios_d0_r(*this, "bios_d0_r"), + m_bios_d4_r(*this, "bios_d4_r"), + m_bios_d8_r(*this, "bios_d8_r"), + m_bios_dc_r(*this, "bios_dc_r"), + m_bios_e0_r(*this, "bios_e0_r"), + m_bios_f0_r(*this, "bios_f0_r"), + m_bios_c0_w(*this, "bios_c0_w"), + m_bios_c4_w(*this, "bios_c4_w"), + m_bios_c8_w(*this, "bios_c8_w"), + m_bios_cc_w(*this, "bios_cc_w"), + m_bios_d0_w(*this, "bios_d0_w"), + m_bios_d4_w(*this, "bios_d4_w"), + m_bios_d8_w(*this, "bios_d8_w"), + m_bios_dc_w(*this, "bios_dc_w"), + m_bios_e0_w(*this, "bios_e0_w"), + m_bios_f0_w(*this, "bios_f0_w"), + m_reg_select(0) { } @@ -34,27 +55,27 @@ void vt82c496_device::device_reset() memset(m_reg,0,0x100); // set up default ROM banking - m_space->install_read_bank(0xc0000,0xc3fff,0,"bios_c0_r"); - m_space->install_read_bank(0xc4000,0xc7fff,0,"bios_c4_r"); - m_space->install_read_bank(0xc8000,0xcbfff,0,"bios_c8_r"); - m_space->install_read_bank(0xcc000,0xcffff,0,"bios_cc_r"); - m_space->install_read_bank(0xd0000,0xd3fff,0,"bios_d0_r"); - m_space->install_read_bank(0xd4000,0xd7fff,0,"bios_d4_r"); - m_space->install_read_bank(0xd8000,0xdbfff,0,"bios_d8_r"); - m_space->install_read_bank(0xdc000,0xdffff,0,"bios_dc_r"); - m_space->install_read_bank(0xe0000,0xeffff,0,"bios_e0_r"); - m_space->install_read_bank(0xf0000,0xfffff,0,"bios_f0_r"); + m_space->install_read_bank(0xc0000,0xc3fff,0,m_bios_c0_r); + m_space->install_read_bank(0xc4000,0xc7fff,0,m_bios_c4_r); + m_space->install_read_bank(0xc8000,0xcbfff,0,m_bios_c8_r); + m_space->install_read_bank(0xcc000,0xcffff,0,m_bios_cc_r); + m_space->install_read_bank(0xd0000,0xd3fff,0,m_bios_d0_r); + m_space->install_read_bank(0xd4000,0xd7fff,0,m_bios_d4_r); + m_space->install_read_bank(0xd8000,0xdbfff,0,m_bios_d8_r); + m_space->install_read_bank(0xdc000,0xdffff,0,m_bios_dc_r); + m_space->install_read_bank(0xe0000,0xeffff,0,m_bios_e0_r); + m_space->install_read_bank(0xf0000,0xfffff,0,m_bios_f0_r); m_space->nop_write(0xc0000,0xfffff); - machine().root_device().membank("bios_c0_r")->set_base(&m_rom[0]); - machine().root_device().membank("bios_c4_r")->set_base(&m_rom[0x4000/4]); - machine().root_device().membank("bios_c8_r")->set_base(&m_rom[0x8000/4]); - machine().root_device().membank("bios_cc_r")->set_base(&m_rom[0xc000/4]); - machine().root_device().membank("bios_d0_r")->set_base(&m_rom[0x10000/4]); - machine().root_device().membank("bios_d4_r")->set_base(&m_rom[0x14000/4]); - machine().root_device().membank("bios_d8_r")->set_base(&m_rom[0x18000/4]); - machine().root_device().membank("bios_dc_r")->set_base(&m_rom[0x1c000/4]); - machine().root_device().membank("bios_e0_r")->set_base(&m_rom[0x20000/4]); - machine().root_device().membank("bios_f0_r")->set_base(&m_rom[0x30000/4]); + m_bios_c0_r->set_base(m_rom); + m_bios_c4_r->set_base(m_rom+0x4000); + m_bios_c8_r->set_base(m_rom+0x8000); + m_bios_cc_r->set_base(m_rom+0xc000); + m_bios_d0_r->set_base(m_rom+0x10000); + m_bios_d4_r->set_base(m_rom+0x14000); + m_bios_d8_r->set_base(m_rom+0x18000); + m_bios_dc_r->set_base(m_rom+0x1c000); + m_bios_e0_r->set_base(m_rom+0x20000); + m_bios_f0_r->set_base(m_rom+0x30000); } uint8_t vt82c496_device::read(offs_t offset) @@ -89,49 +110,49 @@ void vt82c496_device::write(offs_t offset, uint8_t data) void vt82c496_device::update_mem_c0(uint8_t data) { if(data & 0x80) - machine().root_device().membank("bios_cc_r")->set_base(m_ram->pointer()+0xcc000); + m_bios_cc_r->set_base(m_ram->pointer()+0xcc000); else - machine().root_device().membank("bios_cc_r")->set_base(&m_rom[0xc000/4]); + m_bios_cc_r->set_base(m_rom+0xc000/4); if(data & 0x40) { - m_space->install_write_bank(0xcc000,0xcffff,0,"bios_cc_w"); - machine().root_device().membank("bios_cc_w")->set_base(m_ram->pointer()+0xcc000); + m_space->install_write_bank(0xcc000,0xcffff,0,m_bios_cc_w); + m_bios_cc_w->set_base(m_ram->pointer()+0xcc000); } else m_space->nop_write(0xcc000,0xcffff); if(data & 0x20) - machine().root_device().membank("bios_c8_r")->set_base(m_ram->pointer()+0xc8000); + m_bios_c8_r->set_base(m_ram->pointer()+0xc8000); else - machine().root_device().membank("bios_c8_r")->set_base(&m_rom[0x8000/4]); + m_bios_c8_r->set_base(m_rom+0x8000/4); if(data & 0x10) { - m_space->install_write_bank(0xc8000,0xcbfff,0,"bios_c8_w"); - machine().root_device().membank("bios_c8_w")->set_base(m_ram->pointer()+0xc8000); + m_space->install_write_bank(0xc8000,0xcbfff,0,m_bios_c8_w); + m_bios_c8_w->set_base(m_ram->pointer()+0xc8000); } else m_space->nop_write(0xc8000,0xcbfff); if(data & 0x08) - machine().root_device().membank("bios_c4_r")->set_base(m_ram->pointer()+0xc4000); + m_bios_c4_r->set_base(m_ram->pointer()+0xc4000); else - machine().root_device().membank("bios_c4_r")->set_base(&m_rom[0x4000/4]); + m_bios_c4_r->set_base(m_rom+0x4000/4); if(data & 0x04) { - m_space->install_write_bank(0xc4000,0xc7fff,0,"bios_c4_w"); - machine().root_device().membank("bios_c4_w")->set_base(m_ram->pointer()+0xc4000); + m_space->install_write_bank(0xc4000,0xc7fff,0,m_bios_c4_w); + m_bios_c4_w->set_base(m_ram->pointer()+0xc4000); } else m_space->nop_write(0xc4000,0xc7fff); if(data & 0x02) - machine().root_device().membank("bios_c0_r")->set_base(m_ram->pointer()+0xc0000); + m_bios_c0_r->set_base(m_ram->pointer()+0xc0000); else - machine().root_device().membank("bios_c0_r")->set_base(&m_rom[0]); + m_bios_c0_r->set_base(m_rom+0); if(data & 0x01) { - m_space->install_write_bank(0xc0000,0xc3fff,0,"bios_c0_w"); - machine().root_device().membank("bios_c0_w")->set_base(m_ram->pointer()+0xc0000); + m_space->install_write_bank(0xc0000,0xc3fff,0,m_bios_c0_w); + m_bios_c0_w->set_base(m_ram->pointer()+0xc0000); } else m_space->nop_write(0xc0000,0xc3fff); @@ -140,49 +161,49 @@ void vt82c496_device::update_mem_c0(uint8_t data) void vt82c496_device::update_mem_d0(uint8_t data) { if(data & 0x80) - machine().root_device().membank("bios_dc_r")->set_base(m_ram->pointer()+0xdc000); + m_bios_dc_r->set_base(m_ram->pointer()+0xdc000); else - machine().root_device().membank("bios_dc_r")->set_base(&m_rom[0x1c000/4]); + m_bios_dc_r->set_base(m_rom+0x1c000/4); if(data & 0x40) { - m_space->install_write_bank(0xdc000,0xdffff,0,"bios_dc_w"); - machine().root_device().membank("bios_dc_w")->set_base(m_ram->pointer()+0xdc000); + m_space->install_write_bank(0xdc000,0xdffff,0,m_bios_dc_w); + m_bios_dc_w->set_base(m_ram->pointer()+0xdc000); } else m_space->nop_write(0xdc000,0xdffff); if(data & 0x20) - machine().root_device().membank("bios_d8_r")->set_base(m_ram->pointer()+0xd8000); + m_bios_d8_r->set_base(m_ram->pointer()+0xd8000); else - machine().root_device().membank("bios_d8_r")->set_base(&m_rom[0x18000/4]); + m_bios_d8_r->set_base(m_rom+0x18000/4); if(data & 0x10) { - m_space->install_write_bank(0xd8000,0xdbfff,0,"bios_d8_w"); - machine().root_device().membank("bios_d8_w")->set_base(m_ram->pointer()+0xd8000); + m_space->install_write_bank(0xd8000,0xdbfff,0,m_bios_d8_w); + m_bios_d8_w->set_base(m_ram->pointer()+0xd8000); } else m_space->nop_write(0xd8000,0xdbfff); if(data & 0x08) - machine().root_device().membank("bios_d4_r")->set_base(m_ram->pointer()+0xd4000); + m_bios_d4_r->set_base(m_ram->pointer()+0xd4000); else - machine().root_device().membank("bios_d4_r")->set_base(&m_rom[0x14000/4]); + m_bios_d4_r->set_base(m_rom+0x14000/4); if(data & 0x04) { - m_space->install_write_bank(0xd4000,0xd7fff,0,"bios_d4_w"); - machine().root_device().membank("bios_d4_w")->set_base(m_ram->pointer()+0xd4000); + m_space->install_write_bank(0xd4000,0xd7fff,0,m_bios_d4_w); + m_bios_d4_w->set_base(m_ram->pointer()+0xd4000); } else m_space->nop_write(0xd4000,0xd7fff); if(data & 0x02) - machine().root_device().membank("bios_d0_r")->set_base(m_ram->pointer()+0xd0000); + m_bios_d0_r->set_base(m_ram->pointer()+0xd0000); else - machine().root_device().membank("bios_d0_r")->set_base(&m_rom[0x10000/4]); + m_bios_d0_r->set_base(m_rom+0x10000/4); if(data & 0x01) { - m_space->install_write_bank(0xd0000,0xd3fff,0,"bios_d0_w"); - machine().root_device().membank("bios_d0_w")->set_base(m_ram->pointer()+0xd0000); + m_space->install_write_bank(0xd0000,0xd3fff,0,m_bios_d0_w); + m_bios_d0_w->set_base(m_ram->pointer()+0xd0000); } else m_space->nop_write(0xd0000,0xd3fff); @@ -191,27 +212,27 @@ void vt82c496_device::update_mem_d0(uint8_t data) void vt82c496_device::update_mem_e0(uint8_t data) { if(data & 0x80) - machine().root_device().membank("bios_e0_r")->set_base(m_ram->pointer()+0xe0000); + m_bios_e0_r->set_base(m_ram->pointer()+0xe0000); else - machine().root_device().membank("bios_e0_r")->set_base(&m_rom[0x20000/4]); + m_bios_e0_r->set_base(m_rom+0x20000/4); if(data & 0x40) { - m_space->install_write_bank(0xe0000,0xeffff,0,"bios_e0_w"); - machine().root_device().membank("bios_e0_w")->set_base(m_ram->pointer()+0xe0000); + m_space->install_write_bank(0xe0000,0xeffff,0,m_bios_e0_w); + m_bios_e0_w->set_base(m_ram->pointer()+0xe0000); } else m_space->nop_write(0xe0000,0xeffff); if(data & 0x20) - machine().root_device().membank("bios_f0_r")->set_base(m_ram->pointer()+0xf0000); + m_bios_f0_r->set_base(m_ram->pointer()+0xf0000); else - machine().root_device().membank("bios_f0_r")->set_base(&m_rom[0x30000/4]); + m_bios_f0_r->set_base(m_rom+0x30000/4); if(data & 0x10) { - m_space->install_write_bank(0xf0000,0xfffff,0,"bios_f0_w"); - machine().root_device().membank("bios_f0_w")->set_base(m_ram->pointer()+0xf0000); + m_space->install_write_bank(0xf0000,0xfffff,0,m_bios_f0_w); + m_bios_f0_w->set_base(m_ram->pointer()+0xf0000); } else m_space->nop_write(0xf0000,0xfffff); diff --git a/src/devices/machine/vt82c496.h b/src/devices/machine/vt82c496.h index 48028579ed2..c73a0ace79a 100644 --- a/src/devices/machine/vt82c496.h +++ b/src/devices/machine/vt82c496.h @@ -37,6 +37,26 @@ private: address_space* m_space; required_device<ram_device> m_ram; required_region_ptr<uint32_t> m_rom; + memory_bank_creator m_bios_c0_r; + memory_bank_creator m_bios_c4_r; + memory_bank_creator m_bios_c8_r; + memory_bank_creator m_bios_cc_r; + memory_bank_creator m_bios_d0_r; + memory_bank_creator m_bios_d4_r; + memory_bank_creator m_bios_d8_r; + memory_bank_creator m_bios_dc_r; + memory_bank_creator m_bios_e0_r; + memory_bank_creator m_bios_f0_r; + memory_bank_creator m_bios_c0_w; + memory_bank_creator m_bios_c4_w; + memory_bank_creator m_bios_c8_w; + memory_bank_creator m_bios_cc_w; + memory_bank_creator m_bios_d0_w; + memory_bank_creator m_bios_d4_w; + memory_bank_creator m_bios_d8_w; + memory_bank_creator m_bios_dc_w; + memory_bank_creator m_bios_e0_w; + memory_bank_creator m_bios_f0_w; uint8_t m_reg[0x100]; uint8_t m_reg_select; diff --git a/src/devices/machine/x2201.cpp b/src/devices/machine/x2201.cpp index 90d731b7e3e..d93fca101ff 100644 --- a/src/devices/machine/x2201.cpp +++ b/src/devices/machine/x2201.cpp @@ -45,7 +45,7 @@ DEFINE_DEVICE_TYPE(X2201, x2201_device, "x2201", "Xicor X2201 1024x1 NOVRAM") x2201_device::x2201_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : device_t(mconfig, X2201, tag, owner, clock) , device_nvram_interface(mconfig, *this) - , m_default_data(*this, DEVICE_SELF, 1024 / 8) + , m_default_data(*this, DEVICE_SELF) , m_cs(false) , m_store(false) , m_array_recall(false) @@ -61,7 +61,7 @@ void x2201_device::device_start() { // create arrays m_ram = make_unique_clear<u8[]>(1024 / 8); - m_eeprom = std::make_unique<u8[]>(1028 / 8); + m_eeprom = std::make_unique<u8[]>(1024 / 8); // register state for saving save_pointer(NAME(m_ram), 1024 / 8); diff --git a/src/devices/machine/x2212.cpp b/src/devices/machine/x2212.cpp index 84a4e0b565b..cc5028e0cc7 100644 --- a/src/devices/machine/x2212.cpp +++ b/src/devices/machine/x2212.cpp @@ -37,7 +37,7 @@ x2212_device::x2212_device(const machine_config &mconfig, device_type type, cons , m_store(false) , m_array_recall(false) , m_size_data(size_data) - , m_default_data(*this, DEVICE_SELF, size_data) + , m_default_data(*this, DEVICE_SELF) { } diff --git a/src/devices/sound/tms5110.cpp b/src/devices/sound/tms5110.cpp index 5782aa905af..14bb5523322 100644 --- a/src/devices/sound/tms5110.cpp +++ b/src/devices/sound/tms5110.cpp @@ -1509,7 +1509,7 @@ DEFINE_DEVICE_TYPE(TMSPROM, tmsprom_device, "tmsprom", "TMSPROM") tmsprom_device::tmsprom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, TMSPROM, tag, owner, clock), m_rom(*this, DEVICE_SELF), - m_prom(*this, finder_base::DUMMY_TAG, 0x20), + m_prom(*this, finder_base::DUMMY_TAG), m_rom_size(0), m_pdc_bit(0), m_ctl1_bit(0), diff --git a/src/devices/video/ppu2c0x.cpp b/src/devices/video/ppu2c0x.cpp index ebc65b79f46..793edf6cb03 100644 --- a/src/devices/video/ppu2c0x.cpp +++ b/src/devices/video/ppu2c0x.cpp @@ -135,7 +135,7 @@ ppu2c0x_device::ppu2c0x_device(const machine_config& mconfig, device_type type, ppu2c0x_rgb_device::ppu2c0x_rgb_device(const machine_config& mconfig, device_type type, const char* tag, device_t* owner, uint32_t clock) : ppu2c0x_device(mconfig, type, tag, owner, clock), - m_palette_data(*this, "palette", 0xc0) + m_palette_data(*this, "palette") { } @@ -201,7 +201,7 @@ ppu2c05_04_device::ppu2c05_04_device(const machine_config& mconfig, const char* // Vs. Unisystem (Super Mario Bros. bootlegs) ppu2c04_clone_device::ppu2c04_clone_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock) : ppu2c0x_device(mconfig, PPU_2C04C, tag, owner, clock), - m_palette_data(*this, "palette", 0x100) + m_palette_data(*this, "palette") { m_scanlines_per_frame = VS_CLONE_SCANLINES_PER_FRAME; m_vblank_first_scanline = VBLANK_FIRST_SCANLINE_VS_CLONE; diff --git a/src/devices/video/t6963c.cpp b/src/devices/video/t6963c.cpp index 215911ed3ff..a853e6d7b00 100644 --- a/src/devices/video/t6963c.cpp +++ b/src/devices/video/t6963c.cpp @@ -36,7 +36,7 @@ t6963c_device::t6963c_device(const machine_config &mconfig, const char *tag, dev : device_t(mconfig, T6963C, tag, owner, clock) , device_memory_interface(mconfig, *this) , m_display_config("display", ENDIANNESS_LITTLE, 8, 16, 0) - , m_cgrom(*this, "cgrom", 0x400) + , m_cgrom(*this, "cgrom") , m_display_ram(nullptr) , m_data(0) , m_adp(0) diff --git a/src/emu/addrmap.cpp b/src/emu/addrmap.cpp index 604e05ab864..ebc0331a767 100644 --- a/src/emu/addrmap.cpp +++ b/src/emu/addrmap.cpp @@ -1148,18 +1148,33 @@ void address_map::map_validity_check(validity_checker &valid, int spacenum) cons osd_printf_error("In %s memory range %x-%x, mirror %x touches a select bit (%x)\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, entry.m_addrmirror & entry.m_addrselect); // if this is a program space, auto-assign implicit ROM entries - if (entry.m_read.m_type == AMH_ROM && entry.m_region == nullptr) + if (entry.m_read.m_type == AMH_ROM && entry.m_region == nullptr && spacenum == AS_PROGRAM && entry.m_share == nullptr) { entry.m_region = m_device->tag(); entry.m_rgnoffs = entry.m_addrstart; } + // detect conflicts between region and share + if (entry.m_region && entry.m_share) + osd_printf_error("%s space memory map entry %X-%X has both .region() and .share()\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend); + + + // Detect inaccesible memory. Region automapping is handled before + if (entry.m_read.m_type == AMH_ROM && entry.m_write.m_type != AMH_RAM && + !entry.m_share && !entry.m_region) + osd_printf_error("%s space memory map entry %X-%X has .rom() but no .region() or .share()\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend); + if (entry.m_read.m_type != AMH_RAM && entry.m_write.m_type == AMH_RAM && + !entry.m_share) + osd_printf_error("%s space memory map entry %X-%X has .writeonly() but no .share()\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend); + // if this entry references a memory region, validate it - if (entry.m_region != nullptr && entry.m_share == nullptr) + if (entry.m_region != nullptr) { // address map entries that reference regions but are NOPs are pointless - if (entry.m_read.m_type == AMH_NONE && entry.m_write.m_type == AMH_NONE) - osd_printf_error("%s space references memory region %s, but is noprw()\n", spaceconfig.m_name, entry.m_region); + if (entry.m_read.m_type != AMH_ROM && entry.m_read.m_type != AMH_RAM) + osd_printf_error("%s space memory map entry %X-%X references memory region %s, but can't read it\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_region); + if (entry.m_write.m_type == AMH_RAM) + osd_printf_error("%s space memory map entry %X-%X references memory region %s, but wants to write to it\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_region); // make sure we can resolve the full path to the region bool found = false; diff --git a/src/emu/devfind.cpp b/src/emu/devfind.cpp index b2506e2fce3..a2f9551051a 100644 --- a/src/emu/devfind.cpp +++ b/src/emu/devfind.cpp @@ -78,18 +78,8 @@ void *finder_base::find_memregion(u8 width, size_t &length, bool required) const return nullptr; } - // check the length and warn if other than specified - size_t const length_found = region->bytes() / width; - if (length != 0 && length != length_found) - { - if (required) - osd_printf_warning("Region '%s' found but has %d bytes, not %d as requested\n", m_tag, region->bytes(), length * width); - length = 0; - return nullptr; - } - // return results - length = length_found; + length = region->bytes()/width; return region->base(); } @@ -98,7 +88,7 @@ void *finder_base::find_memregion(u8 width, size_t &length, bool required) const // validate_memregion - find memory region //------------------------------------------------- -bool finder_base::validate_memregion(size_t bytes, bool required) const +bool finder_base::validate_memregion(bool required) const { // make sure we can resolve the full path to the region size_t bytes_found = 0; @@ -119,13 +109,6 @@ bool finder_base::validate_memregion(size_t bytes, bool required) const break; } - // check the length and warn if other than specified - if ((bytes_found != 0) && (bytes != 0) && (bytes != bytes_found)) - { - osd_printf_warning("Region '%s' found but has %d bytes, not %d as requested\n", m_tag, bytes_found, bytes); - bytes_found = 0; - } - return report_missing(bytes_found != 0, "memory region", required); } @@ -274,7 +257,7 @@ template <bool Required> bool memory_region_finder<Required>::findit(validity_checker *valid) { if (valid) - return this->validate_memregion(0, Required); + return this->validate_memregion(Required); assert(!this->m_resolved); this->m_resolved = true; @@ -333,7 +316,6 @@ bool ioport_finder<Required>::findit(validity_checker *valid) } - //************************************************************************** // ADDRESS SPACE FINDER //************************************************************************** @@ -360,6 +342,74 @@ bool address_space_finder<Required>::findit(validity_checker *valid) } +//************************************************************************** +// MEMORY BANK CREATOR +//************************************************************************** + +bool memory_bank_creator::findit(validity_checker *valid) +{ + if (valid) + return true; + + device_t &dev = m_base.get(); + memory_manager &manager = dev.machine().memory(); + std::string tag = dev.subtag(m_tag); + memory_bank *bank = manager.bank_find(tag); + if (bank) + m_target = bank; + else + m_target = manager.bank_alloc(dev, tag); + return true; +} + +void memory_bank_creator::end_configuration() +{ + m_target = nullptr; +} + + +//************************************************************************** +// MEMORY SHARE CREATOR +//************************************************************************** + +template<typename uX> memory_share_creator<uX>::memory_share_creator(device_t &base, char const *tag, size_t bytes, endianness_t endianness) + : finder_base(base, tag) + , m_width(sizeof(uX)*8) + , m_bytes(bytes) + , m_endianness(endianness) +{ +} + +template<typename uX> bool memory_share_creator<uX>::findit(validity_checker *valid) +{ + if (valid) + return true; + + device_t &dev = m_base.get(); + memory_manager &manager = dev.machine().memory(); + std::string tag = dev.subtag(m_tag); + memory_share *share = manager.share_find(tag); + if (share) + { + m_target = share; + std::string result = share->compare(m_width, m_bytes, m_endianness); + if (!result.empty()) + { + osd_printf_error("%s\n", result); + return false; + } + } + else + m_target = manager.share_alloc(dev, tag, m_width, m_bytes, m_endianness); + return true; +} + +template<typename uX> void memory_share_creator<uX>::end_configuration() +{ + m_target = nullptr; +} + + //************************************************************************** // EXPLICIT TEMPLATE INSTANTIATIONS @@ -439,3 +489,7 @@ template class shared_ptr_finder<s32, false>; template class shared_ptr_finder<s32, true>; template class shared_ptr_finder<s64, false>; template class shared_ptr_finder<s64, true>; +template class memory_share_creator<u8>; +template class memory_share_creator<u16>; +template class memory_share_creator<u32>; +template class memory_share_creator<u64>; diff --git a/src/emu/devfind.h b/src/emu/devfind.h index 958ae16c3bc..d9e2e95df21 100644 --- a/src/emu/devfind.h +++ b/src/emu/devfind.h @@ -356,7 +356,7 @@ protected: /// it is optional. /// \return True if the region is optional, or if the region is /// required and a matching region is found, or false otherwise. - bool validate_memregion(size_t bytes, bool required) const; + bool validate_memregion(bool required) const; /// \brief Find a memory share /// @@ -753,6 +753,94 @@ template <unsigned Count, bool Required> using memory_bank_array_finder = object template <unsigned Count> using optional_memory_bank_array = memory_bank_array_finder<Count, false>; template <unsigned Count> using required_memory_bank_array = memory_bank_array_finder<Count, true>; +/// \brief Memory bank creator +/// +/// Creates a memory bank or picks up an existing one. +class memory_bank_creator : finder_base +{ +public: + memory_bank_creator(device_t &base, char const *tag) : finder_base(base, tag) { } + virtual ~memory_bank_creator() = default; + + /// \brief Get pointer to target bank object + /// \return Pointer to target bank object if found, or nullptr otherwise. + memory_bank *target() const { return m_target; } + + /// \brief Cast-to-pointer operator + /// + /// Allows implicit casting to a pointer to the target bank object. + /// \return Pointer to target bank object + operator memory_bank *() const { return m_target; } + + /// \brief Pointer member access operator + /// + /// Allows pointer-member-style access to members of the target + /// bank object. + /// \return Pointer to target bank object + memory_bank *operator->() const { return m_target; } + +protected: + virtual bool findit(validity_checker *valid) override; + virtual void end_configuration() override; + + /// \brief Pointer to target object + /// + /// Pointer to target object, or nullptr if the creation has not been + /// attempted yet. + memory_bank *m_target = nullptr; +}; + +template <unsigned Count> using memory_bank_array_creator = object_array_finder<memory_bank_creator, Count>; + +/// \brief Memory share creator +/// +/// Creates a memory share or picks up an existing one. +template<typename uX> class memory_share_creator : finder_base +{ +public: + memory_share_creator(device_t &base, char const *tag, size_t bytes, endianness_t endianness); + virtual ~memory_share_creator() = default; + + /// \brief Get pointer to the share object + /// \return Pointer to share object. + memory_share *share() const { return m_target; } + + /// \brief Get pointer to the share object backing ram + /// \return Pointer to the ram. + uX *ptr() const { return reinterpret_cast<uX *>(m_target->ptr()); } + + /// \brief Cast-to-pointer operator + /// + /// Allows implicit casting to a pointer to the target bank object. + /// \return Pointer to target bank object + operator uX *() const { return reinterpret_cast<uX *>(m_target->ptr()); } + + /// \brief Pointer member access operator + /// + /// Allows pointer-member-style access to members of the target + /// bank object. + /// \return Pointer to target bank object + memory_share *operator->() const { return m_target; } + + size_t bytes() const { return m_target->bytes(); } + endianness_t endianness() const { return m_target->endianness(); } + u8 bitwidth() const { return m_target->bitwidth(); } + u8 bytewidth() const { return m_target->bytewidth(); } + +protected: + virtual bool findit(validity_checker *valid) override; + virtual void end_configuration() override; + + /// \brief Pointer to target object + /// + /// Pointer to target object, or nullptr if the creation has not been + /// attempted yet. + memory_share *m_target = nullptr; + + const u8 m_width; // width of the shared region in bits + const size_t m_bytes; // size of the shared region in bytes + const endianness_t m_endianness; // endianness of the memory +}; /// \brief I/O port finder template /// @@ -939,9 +1027,8 @@ public: /// pointer remains valid until resolution time. /// \param [in] length Desired memory region length in units of the /// size of the element type, or zero to match any region length. - region_ptr_finder(device_t &base, char const *tag, size_t length = 0) + region_ptr_finder(device_t &base, char const *tag) : object_finder_base<PointerType, Required>(base, tag) - , m_desired_length(length) , m_length(0) { } @@ -990,21 +1077,15 @@ private: virtual bool findit(validity_checker *valid) override { if (valid) - return this->validate_memregion(sizeof(PointerType) * m_desired_length, Required); + return this->validate_memregion(Required); assert(!this->m_resolved); this->m_resolved = true; - m_length = m_desired_length; this->m_target = reinterpret_cast<PointerType *>(this->find_memregion(sizeof(PointerType), m_length, Required)); return this->report_missing("memory region"); } - /// \brief Desired region length - /// - /// Desired region length in units of elements. - size_t const m_desired_length; - - /// \brief Matched region length + /// \brief Region length /// /// Actual length of the region that was found in units of /// elements, or zero if no matching region has been found. @@ -1043,11 +1124,9 @@ class shared_ptr_finder : public object_finder_base<PointerType, Required> { public: // construction/destruction - shared_ptr_finder(device_t &base, char const *tag, u8 width = sizeof(PointerType) * 8) + shared_ptr_finder(device_t &base, char const *tag) : object_finder_base<PointerType, Required>(base, tag) - , m_width(width) , m_bytes(0) - , m_allocated(0) { } @@ -1058,19 +1137,6 @@ public: u32 bytes() const { return m_bytes; } u32 mask() const { return m_bytes - 1; } // FIXME: wrong when sizeof(PointerType) != 1 - // setter for setting the object - void set_target(PointerType *target, size_t bytes) { this->m_target = target; m_bytes = bytes; } - - // dynamic allocation of a shared pointer - void allocate(u32 entries) - { - assert(!m_allocated); - m_allocated = std::make_unique<PointerType []>(entries); - this->m_target = m_allocated.get(); - m_bytes = entries * sizeof(PointerType); - this->m_base.get().save_pointer(m_allocated, this->m_tag, entries); - } - private: // finder virtual bool findit(validity_checker *valid) override @@ -1080,14 +1146,12 @@ private: assert(!this->m_resolved); this->m_resolved = true; - this->m_target = reinterpret_cast<PointerType *>(this->find_memshare(m_width, m_bytes, Required)); + this->m_target = reinterpret_cast<PointerType *>(this->find_memshare(sizeof(PointerType)*8, m_bytes, Required)); return this->report_missing("shared pointer"); } // internal state - u8 const m_width; size_t m_bytes; - std::unique_ptr<PointerType []> m_allocated; }; template <typename PointerType> using optional_shared_ptr = shared_ptr_finder<PointerType, false>; diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp index 548281062a3..db890ad3d8c 100644 --- a/src/emu/diimage.cpp +++ b/src/emu/diimage.cpp @@ -479,15 +479,14 @@ const char *device_image_interface::get_feature(const char *feature_name) const // load_software_region - //------------------------------------------------- -bool device_image_interface::load_software_region(const char *tag, optional_shared_ptr<u8> &ptr) +bool device_image_interface::load_software_region(const char *tag, std::unique_ptr<u8[]> &ptr) { size_t size = get_software_region_length(tag); if (size) { - ptr.allocate(size); - - memcpy(ptr, get_software_region(tag), size); + ptr = std::make_unique<u8[]>(size); + memcpy(ptr.get(), get_software_region(tag), size); } return size > 0; diff --git a/src/emu/diimage.h b/src/emu/diimage.h index 2f9421bcf4d..9f67530383f 100644 --- a/src/emu/diimage.h +++ b/src/emu/diimage.h @@ -164,8 +164,8 @@ public: u64 length() { check_for_file(); return m_file->size(); } bool is_readonly() const noexcept { return m_readonly; } u32 fread(void *buffer, u32 length) { check_for_file(); return m_file->read(buffer, length); } - u32 fread(optional_shared_ptr<u8> &ptr, u32 length) { ptr.allocate(length); return fread(ptr.target(), length); } - u32 fread(optional_shared_ptr<u8> &ptr, u32 length, offs_t offset) { ptr.allocate(length); return fread(ptr + offset, length - offset); } + u32 fread(std::unique_ptr<u8[]> &ptr, u32 length) { ptr = std::make_unique<u8[]>(length); return fread(ptr.get(), length); } + u32 fread(std::unique_ptr<u8[]> &ptr, u32 length, offs_t offset) { ptr = std::make_unique<u8[]>(length); return fread(ptr.get() + offset, length - offset); } u32 fwrite(const void *buffer, u32 length) { check_for_file(); return m_file->write(buffer, length); } int fseek(s64 offset, int whence) { check_for_file(); return m_file->seek(offset, whence); } u64 ftell() { check_for_file(); return m_file->tell(); } @@ -191,7 +191,7 @@ public: u8 *get_software_region(const char *tag); u32 get_software_region_length(const char *tag); const char *get_feature(const char *feature_name) const; - bool load_software_region(const char *tag, optional_shared_ptr<u8> &ptr); + bool load_software_region(const char *tag, std::unique_ptr<u8[]> &ptr); u32 crc(); util::hash_collection& hash() { return m_hash; } diff --git a/src/emu/dimemory.h b/src/emu/dimemory.h index 3d43c6a6a4d..ed177882d37 100644 --- a/src/emu/dimemory.h +++ b/src/emu/dimemory.h @@ -103,8 +103,6 @@ public: } void prepare_maps() { for (auto const &space : m_addrspace) { if (space) { space->prepare_map(); } } } void populate_from_maps() { for (auto const &space : m_addrspace) { if (space) { space->populate_from_map(); } } } - void allocate_memory() { for (auto const &space : m_addrspace) { if (space) { space->allocate_memory(); } } } - void locate_memory() { for (auto const &space : m_addrspace) { if (space) { space->locate_memory(); } } } void set_log_unmap(bool log) { for (auto const &space : m_addrspace) { if (space) { space->set_log_unmap(log); } } } protected: diff --git a/src/emu/dirom.h b/src/emu/dirom.h index 62566f433d3..c5dd94fedae 100644 --- a/src/emu/dirom.h +++ b/src/emu/dirom.h @@ -41,7 +41,7 @@ private: address_space_config m_rom_config; typename memory_access<AddrWidth, DataWidth, AddrShift, Endian>::cache m_rom_cache; - memory_bank *m_bank; + memory_bank_creator m_bank; int m_cur_bank, m_bank_count; virtual void interface_pre_start() override; diff --git a/src/emu/dirom.ipp b/src/emu/dirom.ipp index e552ff87e22..42904bf27fd 100644 --- a/src/emu/dirom.ipp +++ b/src/emu/dirom.ipp @@ -6,7 +6,7 @@ device_rom_interface<AddrWidth, DataWidth, AddrShift, Endian>::device_rom_interf device_memory_interface(mconfig, device), m_rom_tag(device.basetag()), m_rom_config("rom", Endian, 8 << DataWidth, AddrWidth, AddrShift), - m_bank(nullptr), + m_bank(device, "bank"), m_cur_bank(-1) { } @@ -64,9 +64,9 @@ void device_rom_interface<AddrWidth, DataWidth, AddrShift, Endian>::set_rom(cons m_bank_count = 1; if(rend >= mend) { - space().install_read_bank(0, mend, device().tag()); - m_bank = device().machine().memory().banks().find(device().tag())->second.get(); + space().install_read_bank(0, mend, m_bank); m_bank->configure_entries(0, m_bank_count, const_cast<void *>(base), mend+1); + m_bank->set_entry(0); m_cur_bank = 0; } else { diff --git a/src/emu/emufwd.h b/src/emu/emufwd.h index bd7d2235a15..b09eb098221 100644 --- a/src/emu/emufwd.h +++ b/src/emu/emufwd.h @@ -146,7 +146,6 @@ class driver_device; // declared in emumem.h class address_space; class memory_bank; -class memory_block; class memory_manager; class memory_region; class memory_share; diff --git a/src/emu/emumem.cpp b/src/emu/emumem.cpp index a245c39fd3f..8fb0f0bbe28 100644 --- a/src/emu/emumem.cpp +++ b/src/emu/emumem.cpp @@ -30,9 +30,16 @@ // DEBUGGING //************************************************************************** -#define VERBOSE (0) +#define VERBOSE 0 -#define VPRINTF(x) do { if (VERBOSE) printf x; } while (0) +#if VERBOSE +template <typename Format, typename... Params> static void VPRINTF(Format &&fmt, Params &&...args) +{ + util::stream_format(std::cerr, std::forward<Format>(fmt), std::forward<Params>(args)...); +} +#else +template <typename Format, typename... Params> static void VPRINTF(Format &&, Params &&...) {} +#endif #define VALIDATE_REFCOUNTS 0 @@ -269,10 +276,6 @@ template <> struct handler_width<write64s_delegate> { static constexpr int value template <> struct handler_width<write64sm_delegate> { static constexpr int value = 3; }; template <> struct handler_width<write64mo_delegate> { static constexpr int value = 3; }; template <> struct handler_width<write64smo_delegate> { static constexpr int value = 3; }; - -// other address map constants -const int MEMORY_BLOCK_CHUNK = 65536; // minimum chunk size of allocated memory blocks - } // anonymous namespace @@ -307,7 +310,6 @@ public: void unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, bool quiet) override; void install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, void *baseptr) override; - void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, std::string rtag, std::string wtag) override; void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank) override; void install_readwrite_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, std::string rtag, std::string wtag) override; void install_device_delegate(offs_t addrstart, offs_t addrend, device_t &device, address_map_constructor &map, u64 unitmask = 0, int cswidth = 0) override; @@ -713,11 +715,11 @@ private: template<int AccessWidth, typename READ> std::enable_if_t<(Width == AccessWidth)> install_read_handler_helper(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, u64 unitmask, int cswidth, const READ &handler_r) { - VPRINTF(("address_space::install_read_handler(%s-%s mask=%s mirror=%s, space width=%d, handler width=%d, %s, %s)\n", - core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), - 8 << Width, 8 << AccessWidth, - handler_r.name(), core_i64_hex_format(unitmask, data_width() / 4))); + VPRINTF("address_space::install_read_handler(%*x-%*x mask=%*x mirror=%*x, space width=%d, handler width=%d, %s, %*x)\n", + m_addrchars, addrstart, m_addrchars, addrend, + m_addrchars, addrmask, m_addrchars, addrmirror, + 8 << Width, 8 << AccessWidth, + handler_r.name(), data_width() / 4, unitmask); offs_t nstart, nend, nmask, nmirror; u64 nunitmask; @@ -734,11 +736,11 @@ private: install_read_handler_helper(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, u64 unitmask, int cswidth, const READ &handler_r) { - VPRINTF(("address_space::install_read_handler(%s-%s mask=%s mirror=%s, space width=%d, handler width=%d, %s, %s)\n", - core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), - 8 << Width, 8 << AccessWidth, - handler_r.name(), core_i64_hex_format(unitmask, data_width() / 4))); + VPRINTF("address_space::install_read_handler(%*x-%*x mask=%*x mirror=%*x, space width=%d, handler width=%d, %s, %*x)\n", + m_addrchars, addrstart, m_addrchars, addrend, + m_addrchars, addrmask, m_addrchars, addrmirror, + 8 << Width, 8 << AccessWidth, + handler_r.name(), data_width() / 4, unitmask); offs_t nstart, nend, nmask, nmirror; u64 nunitmask; @@ -765,11 +767,11 @@ private: install_write_handler_helper(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, u64 unitmask, int cswidth, const WRITE &handler_w) { - VPRINTF(("address_space::install_write_handler(%s-%s mask=%s mirror=%s, space width=%d, handler width=%d, %s, %s)\n", - core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), - 8 << Width, 8 << AccessWidth, - handler_w.name(), core_i64_hex_format(unitmask, data_width() / 4))); + VPRINTF("address_space::install_write_handler(%*x-%*x mask=%*x mirror=%*x, space width=%d, handler width=%d, %s, %*x)\n", + m_addrchars, addrstart, m_addrchars, addrend, + m_addrchars, addrmask, m_addrchars, addrmirror, + 8 << Width, 8 << AccessWidth, + handler_w.name(), data_width() / 4, unitmask); offs_t nstart, nend, nmask, nmirror; u64 nunitmask; @@ -786,11 +788,11 @@ private: install_write_handler_helper(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, u64 unitmask, int cswidth, const WRITE &handler_w) { - VPRINTF(("address_space::install_write_handler(%s-%s mask=%s mirror=%s, space width=%d, handler width=%d, %s, %s)\n", - core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), - 8 << Width, 8 << AccessWidth, - handler_w.name(), core_i64_hex_format(unitmask, data_width() / 4))); + VPRINTF("address_space::install_write_handler(%*x-%*x mask=%*x mirror=%*x, space width=%d, handler width=%d, %s, %*x)\n", + m_addrchars, addrstart, m_addrchars, addrend, + m_addrchars, addrmask, m_addrchars, addrmirror, + 8 << Width, 8 << AccessWidth, + handler_w.name(), data_width() / 4, unitmask); offs_t nstart, nend, nmask, nmirror; u64 nunitmask; @@ -820,11 +822,11 @@ private: const READ &handler_r, const WRITE &handler_w) { - VPRINTF(("address_space::install_readwrite_handler(%s-%s mask=%s mirror=%s, space width=%d, handler width=%d, %s, %s, %s)\n", - core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), - 8 << Width, 8 << AccessWidth, - handler_r.name(), handler_w.name(), core_i64_hex_format(unitmask, data_width() / 4))); + VPRINTF("address_space::install_readwrite_handler(%*x-%*x mask=%*x mirror=%*x, space width=%d, handler width=%d, %s, %s, %*x)\n", + m_addrchars, addrstart, m_addrchars, addrend, + m_addrchars, addrmask, m_addrchars, addrmirror, + 8 << Width, 8 << AccessWidth, + handler_r.name(), handler_w.name(), data_width() / 4, unitmask); offs_t nstart, nend, nmask, nmirror; u64 nunitmask; @@ -847,11 +849,11 @@ private: const READ &handler_r, const WRITE &handler_w) { - VPRINTF(("address_space::install_readwrite_handler(%s-%s mask=%s mirror=%s, space width=%d, handler width=%d, %s, %s, %s)\n", - core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), - 8 << Width, 8 << AccessWidth, - handler_r.name(), handler_w.name(), core_i64_hex_format(unitmask, data_width() / 4))); + VPRINTF("address_space::install_readwrite_handler(%*x-%*x mask=%*x mirror=%*x, space width=%d, handler width=%d, %s, %s, %*x)\n", + m_addrchars, addrstart, m_addrchars, addrend, + m_addrchars, addrmask, m_addrchars, addrmirror, + 8 << Width, 8 << AccessWidth, + handler_r.name(), handler_w.name(), data_width() / 4, unitmask); offs_t nstart, nend, nmask, nmirror; u64 nunitmask; @@ -894,9 +896,18 @@ private: //------------------------------------------------- memory_manager::memory_manager(running_machine &machine) - : m_machine(machine), - m_initialized(false) + : m_machine(machine) +{ +} + +//------------------------------------------------- +// ~memory_manager - free the allocated memory banks +//------------------------------------------------- + +memory_manager::~memory_manager() { + for(void *ptr : m_datablocks) + free(ptr); } //------------------------------------------------- @@ -1012,38 +1023,51 @@ void memory_manager::initialize() for (auto const memory : memories) memory->populate_from_maps(); - // allocate memory needed to back each address space - for (auto const memory : memories) - memory->allocate_memory(); - - // find all the allocated pointers - for (auto const memory : memories) - memory->locate_memory(); - // disable logging of unmapped access when no one receives it if (!machine().options().log() && !machine().options().oslog() && !(machine().debug_flags & DEBUG_FLAG_ENABLED)) for (auto const memory : memories) memory->set_log_unmap(false); +} - // we are now initialized - m_initialized = true; + +//------------------------------------------------- +// allocate_memory - allocate some ram and register it for saving +//------------------------------------------------- + +void *memory_manager::allocate_memory(device_t &dev, int spacenum, std::string name, u8 width, size_t bytes) +{ + void *ptr = malloc(bytes); + memset(ptr, 0, bytes); + m_datablocks.push_back(ptr); + machine().save().save_memory(&dev, "memory", dev.tag(), spacenum, name.c_str(), ptr, width/8, (u32)bytes / (width/8)); + return ptr; } + //------------------------------------------------- // region_alloc - allocates memory for a region //------------------------------------------------- -memory_region *memory_manager::region_alloc(const char *name, u32 length, u8 width, endianness_t endian) +memory_region *memory_manager::region_alloc(std::string name, u32 length, u8 width, endianness_t endian) { - osd_printf_verbose("Region '%s' created\n", name); // make sure we don't have a region of the same name; also find the end of the list if (m_regionlist.find(name) != m_regionlist.end()) fatalerror("region_alloc called with duplicate region name \"%s\"\n", name); // allocate the region - m_regionlist.emplace(name, std::make_unique<memory_region>(machine(), name, length, width, endian)); - return m_regionlist.find(name)->second.get(); + return m_regionlist.emplace(name, std::make_unique<memory_region>(machine(), name, length, width, endian)).first->second.get(); +} + + +//------------------------------------------------- +// region_find - find a region by name +//------------------------------------------------- + +memory_region *memory_manager::region_find(std::string name) +{ + auto i = m_regionlist.find(name); + return i != m_regionlist.end() ? i->second.get() : nullptr; } @@ -1051,61 +1075,82 @@ memory_region *memory_manager::region_alloc(const char *name, u32 length, u8 wid // region_free - releases memory for a region //------------------------------------------------- -void memory_manager::region_free(const char *name) +void memory_manager::region_free(std::string name) { m_regionlist.erase(name); } //------------------------------------------------- -// region_containing - helper to determine if -// a block of memory is part of a region +// anonymous_alloc - allocates a anonymousd memory zone //------------------------------------------------- -memory_region *memory_manager::region_containing(const void *memory, offs_t bytes) const +void *memory_manager::anonymous_alloc(address_space &space, size_t bytes, u8 width, offs_t start, offs_t end) { - const u8 *data = reinterpret_cast<const u8 *>(memory); + std::string name = util::string_format("%x-%x", start, end); + return allocate_memory(space.device(), space.spacenum(), name, width, bytes); +} - // look through the region list and return the first match - for (auto ®ion : m_regionlist) - if (data >= region.second->base() && (data + bytes) <= region.second->end()) - return region.second.get(); - // didn't find one - return nullptr; +//------------------------------------------------- +// share_alloc - allocates a shared memory zone +//------------------------------------------------- + +memory_share *memory_manager::share_alloc(device_t &dev, std::string name, u8 width, size_t bytes, endianness_t endianness) +{ + // make sure we don't have a share of the same name; also find the end of the list + if (m_sharelist.find(name) != m_sharelist.end()) + fatalerror("share_alloc called with duplicate share name \"%s\"\n", name); + + // allocate and register the memory + void *ptr = allocate_memory(dev, 0, name, width, bytes); + + // allocate the region + return m_sharelist.emplace(name, std::make_unique<memory_share>(name, width, bytes, endianness, ptr)).first->second.get(); } -memory_bank *memory_manager::find(const char *tag) const + +//------------------------------------------------- +// share_find - find a share by name +//------------------------------------------------- + +memory_share *memory_manager::share_find(std::string name) { - auto bank = m_banklist.find(tag); - if (bank != m_banklist.end()) - return bank->second.get(); - return nullptr; + auto i = m_sharelist.find(name); + return i != m_sharelist.end() ? i->second.get() : nullptr; } -memory_bank *memory_manager::find(address_space &space, offs_t addrstart, offs_t addrend) const + + +//------------------------------------------------- +// share_alloc - allocates a banking zone +//------------------------------------------------- + +memory_bank *memory_manager::bank_alloc(device_t &device, std::string name) { - // try to find an exact match - for (auto &bank : m_banklist) - if (bank.second->anonymous() && bank.second->references_space(space, read_or_write::READWRITE) && bank.second->matches_exactly(addrstart, addrend)) - return bank.second.get(); + // allocate the bank + auto const ins = m_banklist.emplace(name, std::make_unique<memory_bank>(device, name)); - // not found - return nullptr; + // make sure we don't have a bank of the same name + if (!ins.second) + fatalerror("bank_alloc called with duplicate bank name \"%s\"\n", name); + + return ins.first->second.get(); } -memory_bank *memory_manager::allocate(address_space &space, offs_t addrstart, offs_t addrend, const char *tag) + +//------------------------------------------------- +// bank_find - find a bank by name +//------------------------------------------------- + +memory_bank *memory_manager::bank_find(std::string name) { - auto bank = std::make_unique<memory_bank>(space, m_banklist.size(), addrstart, addrend, tag); - std::string temptag; - if (tag == nullptr) { - temptag = string_format("anon_%p", bank.get()); - tag = temptag.c_str(); - } - m_banklist.emplace(tag, std::move(bank)); - return m_banklist.find(tag)->second.get(); + auto i = m_banklist.find(name); + return i != m_banklist.end() ? i->second.get() : nullptr; } + + //************************************************************************** // ADDRESS SPACE CONFIG //************************************************************************** @@ -1412,15 +1457,23 @@ void address_space::prepare_map() { // if we can't find it, add it to our map std::string fulltag = entry.m_devbase.subtag(entry.m_share); - if (m_manager.m_sharelist.find(fulltag) == m_manager.m_sharelist.end()) + memory_share *share = m_manager.share_find(fulltag); + if (!share) { - VPRINTF(("Creating share '%s' of length 0x%X\n", fulltag.c_str(), entry.m_addrend + 1 - entry.m_addrstart)); - m_manager.m_sharelist.emplace(fulltag.c_str(), std::make_unique<memory_share>(m_config.data_width(), address_to_byte(entry.m_addrend + 1 - entry.m_addrstart), endianness())); + VPRINTF("Creating share '%s' of length 0x%X\n", fulltag.c_str(), entry.m_addrend + 1 - entry.m_addrstart); + share = m_manager.share_alloc(m_device, fulltag, m_config.data_width(), address_to_byte(entry.m_addrend + 1 - entry.m_addrstart), endianness()); } + else + { + std::string result = share->compare(m_config.data_width(), address_to_byte(entry.m_addrend + 1 - entry.m_addrstart), endianness()); + if (!result.empty()) + fatalerror("%s\n", result); + } + entry.m_memory = share->ptr(); } - // if this is a ROM handler without a specified region, attach it to the implicit region - if (m_spacenum == 0 && entry.m_read.m_type == AMH_ROM && entry.m_region == nullptr) + // if this is a ROM handler without a specified region and not shared, attach it to the implicit region + if (m_spacenum == AS_PROGRAM && entry.m_read.m_type == AMH_ROM && entry.m_region == nullptr && entry.m_share == nullptr) { // make sure it fits within the memory region before doing so, however if (entry.m_addrend < devregionsize) @@ -1431,7 +1484,7 @@ void address_space::prepare_map() } // validate adjusted addresses against implicit regions - if (entry.m_region != nullptr && entry.m_share == nullptr) + if (entry.m_region != nullptr) { // determine full tag std::string fulltag = entry.m_devbase.subtag(entry.m_region); @@ -1444,6 +1497,9 @@ void address_space::prepare_map() // validate the region if (entry.m_rgnoffs + m_config.addr2byte(entry.m_addrend - entry.m_addrstart + 1) > region->bytes()) fatalerror("device '%s' %s space memory map entry %X-%X extends beyond region \"%s\" size (%X)\n", m_device.tag(), m_name, entry.m_addrstart, entry.m_addrend, entry.m_region, region->bytes()); + + if (entry.m_share != nullptr) + fatalerror("device '%s' %s space memory map entry %X-%X has both .region() and .share()\n", m_device.tag(), m_name, entry.m_addrstart, entry.m_addrend); } // convert any region-relative entries to their memory pointers @@ -1455,6 +1511,10 @@ void address_space::prepare_map() // set the memory address entry.m_memory = m_manager.machine().root_device().memregion(fulltag)->base() + entry.m_rgnoffs; } + + // allocate anonymous ram when needed + if (!entry.m_memory && (entry.m_read.m_type == AMH_RAM || entry.m_write.m_type == AMH_RAM)) + entry.m_memory = m_manager.anonymous_alloc(*this, address_to_byte(entry.m_addrend + 1 - entry.m_addrstart), m_config.data_width(), entry.m_addrstart, entry.m_addrend); } } @@ -1509,7 +1569,7 @@ void address_space::populate_map_entry(const address_map_entry &entry, read_or_w // fall through to the RAM case otherwise case AMH_RAM: - install_ram_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, readorwrite, nullptr); + install_ram_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, readorwrite, entry.m_memory); break; case AMH_NOP: @@ -1641,167 +1701,22 @@ void address_space::populate_map_entry(const address_map_entry &entry, read_or_w break; case AMH_BANK: - install_bank_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, - (readorwrite == read_or_write::READ) ? entry.m_devbase.subtag(data.m_tag) : "", - (readorwrite == read_or_write::WRITE) ? entry.m_devbase.subtag(data.m_tag) : ""); + { + std::string tag = entry.m_devbase.subtag(data.m_tag); + memory_bank *bank = m_manager.bank_find(tag); + if (!bank) + bank = m_manager.bank_alloc(entry.m_devbase, tag); + install_bank_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, + (readorwrite == read_or_write::READ) ? bank : nullptr, + (readorwrite == read_or_write::WRITE) ? bank : nullptr); break; + } case AMH_DEVICE_SUBMAP: throw emu_fatalerror("Internal mapping error: leftover mapping of '%s'.\n", data.m_tag); } } -//------------------------------------------------- -// allocate_memory - determine all neighboring -// address ranges and allocate memory to back -// them -//------------------------------------------------- - -void address_space::allocate_memory() -{ - auto &blocklist = m_manager.m_blocklist; - - // make a first pass over the memory map and track blocks with hardcoded pointers - // we do this to make sure they are found by space_find_backing_memory first - // do it back-to-front so that overrides work correctly - int tail = blocklist.size(); - for (address_map_entry &entry : m_map->m_entrylist) - if (entry.m_memory != nullptr) - blocklist.insert(blocklist.begin() + tail, std::make_unique<memory_block>(*this, entry.m_addrstart, entry.m_addrend, entry.m_memory)); - - // loop over all blocks just allocated and assign pointers from them - address_map_entry *unassigned = nullptr; - - for (auto memblock = blocklist.begin() + tail; memblock != blocklist.end(); ++memblock) - unassigned = block_assign_intersecting(memblock->get()->addrstart(), memblock->get()->addrend(), memblock->get()->data()); - - // if we don't have an unassigned pointer yet, try to find one - if (unassigned == nullptr) - unassigned = block_assign_intersecting(~0, 0, nullptr); - - // loop until we've assigned all memory in this space - while (unassigned != nullptr) - { - // work in MEMORY_BLOCK_CHUNK-sized chunks - offs_t curblockstart = unassigned->m_addrstart / MEMORY_BLOCK_CHUNK; - offs_t curblockend = unassigned->m_addrend / MEMORY_BLOCK_CHUNK; - - // loop while we keep finding unassigned blocks in neighboring MEMORY_BLOCK_CHUNK chunks - bool changed; - do - { - changed = false; - - // scan for unmapped blocks in the adjusted map - for (address_map_entry &entry : m_map->m_entrylist) - if (entry.m_memory == nullptr && &entry != unassigned && needs_backing_store(entry)) - { - // get block start/end blocks for this block - offs_t blockstart = entry.m_addrstart / MEMORY_BLOCK_CHUNK; - offs_t blockend = entry.m_addrend / MEMORY_BLOCK_CHUNK; - - // if we intersect or are adjacent, adjust the start/end - if (blockstart <= curblockend + 1 && blockend >= curblockstart - 1) - { - if (blockstart < curblockstart) - curblockstart = blockstart, changed = true; - if (blockend > curblockend) - curblockend = blockend, changed = true; - } - } - } while (changed); - - // we now have a block to allocate; do it - offs_t curaddrstart = curblockstart * MEMORY_BLOCK_CHUNK; - offs_t curaddrend = curblockend * MEMORY_BLOCK_CHUNK + (MEMORY_BLOCK_CHUNK - 1); - auto block = std::make_unique<memory_block>(*this, curaddrstart, curaddrend); - - // assign memory that intersected the new block - unassigned = block_assign_intersecting(curaddrstart, curaddrend, block.get()->data()); - blocklist.push_back(std::move(block)); - } -} - - -//------------------------------------------------- -// locate_memory - find all the requested -// pointers into the final allocated memory -//------------------------------------------------- - -void address_space::locate_memory() -{ - // once this is done, find the starting bases for the banks - for (auto &bank : m_manager.banks()) - if (bank.second->base() == nullptr && bank.second->references_space(*this, read_or_write::READWRITE)) - { - // set the initial bank pointer - for (address_map_entry &entry : m_map->m_entrylist) - if (entry.m_addrstart == bank.second->addrstart() && entry.m_memory != nullptr) - { - bank.second->set_base(entry.m_memory); - VPRINTF(("assigned bank '%s' pointer to memory from range %08X-%08X [%p]\n", bank.second->tag(), entry.m_addrstart, entry.m_addrend, entry.m_memory)); - break; - } - } -} - - - - -//------------------------------------------------- -// block_assign_intersecting - find all -// intersecting blocks and assign their pointers -//------------------------------------------------- - -address_map_entry *address_space::block_assign_intersecting(offs_t addrstart, offs_t addrend, u8 *base) -{ - address_map_entry *unassigned = nullptr; - - // loop over the adjusted map and assign memory to any blocks we can - for (address_map_entry &entry : m_map->m_entrylist) - { - // if we haven't assigned this block yet, see if we have a mapped shared pointer for it - if (entry.m_memory == nullptr && entry.m_share != nullptr) - { - std::string fulltag = entry.m_devbase.subtag(entry.m_share); - auto share = m_manager.shares().find(fulltag); - if (share != m_manager.shares().end() && share->second->ptr() != nullptr) - { - entry.m_memory = share->second->ptr(); - VPRINTF(("memory range %08X-%08X -> shared_ptr '%s' [%p]\n", entry.m_addrstart, entry.m_addrend, entry.m_share, entry.m_memory)); - } - else - { - VPRINTF(("memory range %08X-%08X -> shared_ptr '%s' but not found\n", entry.m_addrstart, entry.m_addrend, entry.m_share)); - } - } - - // otherwise, look for a match in this block - if (entry.m_memory == nullptr && entry.m_addrstart >= addrstart && entry.m_addrend <= addrend) - { - entry.m_memory = base + m_config.addr2byte(entry.m_addrstart - addrstart); - VPRINTF(("memory range %08X-%08X -> found in block from %08X-%08X [%p]\n", entry.m_addrstart, entry.m_addrend, addrstart, addrend, entry.m_memory)); - } - - // if we're the first match on a shared pointer, assign it now - if (entry.m_memory != nullptr && entry.m_share != nullptr) - { - std::string fulltag = entry.m_devbase.subtag(entry.m_share); - auto share = m_manager.shares().find(fulltag); - if (share != m_manager.shares().end() && share->second->ptr() == nullptr) - { - share->second->set_ptr(entry.m_memory); - VPRINTF(("setting shared_ptr '%s' = %p\n", entry.m_share, entry.m_memory)); - } - } - - // keep track of the first unassigned entry - if (entry.m_memory == nullptr && unassigned == nullptr && needs_backing_store(entry)) - unassigned = &entry; - } - - return unassigned; -} memory_passthrough_handler *address_space::install_read_tap(offs_t addrstart, offs_t addrend, offs_t addrmirror, std::string name, std::function<void (offs_t offset, u8 &data, u8 mem_mask)> tap, memory_passthrough_handler *mph) @@ -1905,11 +1820,11 @@ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_space_specific<Level, Width, AddrShift, Endian>::unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, bool quiet) { - VPRINTF(("address_space::unmap(%s-%s mirror=%s, %s, %s)\n", - core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmirror, m_addrchars), - (readorwrite == read_or_write::READ) ? "read" : (readorwrite == read_or_write::WRITE) ? "write" : (readorwrite == read_or_write::READWRITE) ? "read/write" : "??", - quiet ? "quiet" : "normal")); + VPRINTF("address_space::unmap(%*x-%*x mirror=%*x, %s, %s)\n", + m_addrchars, addrstart, m_addrchars, addrend, + m_addrchars, addrmirror, + (readorwrite == read_or_write::READ) ? "read" : (readorwrite == read_or_write::WRITE) ? "write" : (readorwrite == read_or_write::READWRITE) ? "read/write" : "??", + quiet ? "quiet" : "normal"); offs_t nstart, nend, nmask, nmirror; check_optimize_mirror("unmap_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror); @@ -2026,10 +1941,10 @@ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_space_specific<Level, Width, AddrShift, Endian>::install_readwrite_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, std::string rtag, std::string wtag) { - VPRINTF(("address_space::install_readwrite_port(%s-%s mirror=%s, read=\"%s\" / write=\"%s\")\n", - core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmirror, m_addrchars), - rtag.empty() ? "(none)" : rtag.c_str(), wtag.empty() ? "(none)" : wtag.c_str())); + VPRINTF("address_space::install_readwrite_port(%*x-%*x mirror=%*x, read=\"%s\" / write=\"%s\")\n", + m_addrchars, addrstart, m_addrchars, addrend, + m_addrchars, addrmirror, + rtag.empty() ? "(none)" : rtag.c_str(), wtag.empty() ? "(none)" : wtag.c_str()); offs_t nstart, nend, nmask, nmirror; check_optimize_mirror("install_readwrite_port", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror); @@ -2068,48 +1983,12 @@ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_ // mapping to a particular bank //------------------------------------------------- -template<int Level, int Width, int AddrShift, endianness_t Endian> void address_space_specific<Level, Width, AddrShift, Endian>::install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, std::string rtag, std::string wtag) -{ - VPRINTF(("address_space::install_readwrite_bank(%s-%s mirror=%s, read=\"%s\" / write=\"%s\")\n", - core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmirror, m_addrchars), - rtag.empty() ? "(none)" : rtag.c_str(), wtag.empty() ? "(none)" : wtag.c_str())); - - offs_t nstart, nend, nmask, nmirror; - check_optimize_mirror("install_bank_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror); - - // map the read bank - if (rtag != "") - { - std::string fulltag = device().siblingtag(rtag); - memory_bank &bank = bank_find_or_allocate(fulltag.c_str(), addrstart, addrend, addrmirror, read_or_write::READ); - - auto hand_r = new handler_entry_read_memory_bank<Width, AddrShift, Endian>(this, bank); - hand_r->set_address_info(nstart, nmask); - m_root_read->populate(nstart, nend, nmirror, hand_r); - } - - // map the write bank - if (wtag != "") - { - std::string fulltag = device().siblingtag(wtag); - memory_bank &bank = bank_find_or_allocate(fulltag.c_str(), addrstart, addrend, addrmirror, read_or_write::WRITE); - - auto hand_w = new handler_entry_write_memory_bank<Width, AddrShift, Endian>(this, bank); - hand_w->set_address_info(nstart, nmask); - m_root_write->populate(nstart, nend, nmirror, hand_w); - } - - invalidate_caches(rtag != "" ? wtag != "" ? read_or_write::READWRITE : read_or_write::READ : read_or_write::WRITE); -} - - template<int Level, int Width, int AddrShift, endianness_t Endian> void address_space_specific<Level, Width, AddrShift, Endian>::install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank) { - VPRINTF(("address_space::install_readwrite_bank(%s-%s mirror=%s, read=\"%s\" / write=\"%s\")\n", - core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmirror, m_addrchars), - (rbank != nullptr) ? rbank->tag() : "(none)", (wbank != nullptr) ? wbank->tag() : "(none)")); + VPRINTF("address_space::install_readwrite_bank(%*x-%*x mirror=%*x, read=\"%s\" / write=\"%s\")\n", + m_addrchars, addrstart, m_addrchars, addrend, + m_addrchars, addrmirror, + (rbank != nullptr) ? rbank->tag() : "(none)", (wbank != nullptr) ? wbank->tag() : "(none)"); offs_t nstart, nend, nmask, nmirror; check_optimize_mirror("install_bank_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror); @@ -2141,11 +2020,11 @@ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_space_specific<Level, Width, AddrShift, Endian>::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, void *baseptr) { - VPRINTF(("address_space::install_ram_generic(%s-%s mirror=%s, %s, %p)\n", - core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmirror, m_addrchars), - (readorwrite == read_or_write::READ) ? "read" : (readorwrite == read_or_write::WRITE) ? "write" : (readorwrite == read_or_write::READWRITE) ? "read/write" : "??", - baseptr)); + VPRINTF("address_space::install_ram_generic(%s-%s mirror=%s, %s, %p)\n", + m_addrchars, addrstart, m_addrchars, addrend, + m_addrchars, addrmirror, + (readorwrite == read_or_write::READ) ? "read" : (readorwrite == read_or_write::WRITE) ? "write" : (readorwrite == read_or_write::READWRITE) ? "read/write" : "??", + baseptr); offs_t nstart, nend, nmask, nmirror; check_optimize_mirror("install_ram_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror); @@ -2153,39 +2032,7 @@ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_ // map for read if (readorwrite == read_or_write::READ || readorwrite == read_or_write::READWRITE) { - // find a bank and map it - memory_bank &bank = bank_find_or_allocate(nullptr, addrstart, addrend, addrmirror, read_or_write::READ); - - // if we are provided a pointer, set it - if (baseptr != nullptr) - bank.set_base(baseptr); - - // if we don't have a bank pointer yet, try to find one - if (bank.base() == nullptr) - { - void *backing = find_backing_memory(addrstart, addrend); - if (backing != nullptr) - bank.set_base(backing); - } - - // if we still don't have a pointer, and we're past the initialization phase, allocate a new block - if (bank.base() == nullptr && m_manager.m_initialized) - { - if (m_manager.machine().phase() >= machine_phase::RESET) - fatalerror("Attempted to call install_ram_generic() after initialization time without a baseptr!\n"); - auto block = std::make_unique<memory_block>(*this, addrstart, addrend); - bank.set_base(block.get()->data()); - m_manager.m_blocklist.push_back(std::move(block)); - } - - auto hand_r = new handler_entry_read_memory<Width, AddrShift, Endian>(this); - if (bank.base()) - hand_r->set_base(static_cast<uX *>(bank.base())); - else { - delayed_ref(hand_r); - bank.add_notifier([this, hand_r](void *base) { hand_r->set_base(static_cast<uX *>(base)); delayed_unref(hand_r); }); - } - + auto hand_r = new handler_entry_read_memory<Width, AddrShift, Endian>(this, baseptr); hand_r->set_address_info(nstart, nmask); m_root_read->populate(nstart, nend, nmirror, hand_r); } @@ -2193,39 +2040,7 @@ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_ // map for write if (readorwrite == read_or_write::WRITE || readorwrite == read_or_write::READWRITE) { - // find a bank and map it - memory_bank &bank = bank_find_or_allocate(nullptr, addrstart, addrend, addrmirror, read_or_write::WRITE); - - // if we are provided a pointer, set it - if (baseptr != nullptr) - bank.set_base(baseptr); - - // if we don't have a bank pointer yet, try to find one - if (bank.base() == nullptr) - { - void *backing = find_backing_memory(addrstart, addrend); - if (backing != nullptr) - bank.set_base(backing); - } - - // if we still don't have a pointer, and we're past the initialization phase, allocate a new block - if (bank.base() == nullptr && m_manager.m_initialized) - { - if (m_manager.machine().phase() >= machine_phase::RESET) - fatalerror("Attempted to call install_ram_generic() after initialization time without a baseptr!\n"); - auto block = std::make_unique<memory_block>(*this, address_to_byte(addrstart), address_to_byte_end(addrend)); - bank.set_base(block.get()->data()); - m_manager.m_blocklist.push_back(std::move(block)); - } - - auto hand_w = new handler_entry_write_memory<Width, AddrShift, Endian>(this); - if (bank.base()) - hand_w->set_base(static_cast<uX *>(bank.base())); - else { - delayed_ref(hand_w); - bank.add_notifier([this, hand_w](void *base) { hand_w->set_base(static_cast<uX *>(base)); delayed_unref(hand_w); }); - } - + auto hand_w = new handler_entry_write_memory<Width, AddrShift, Endian>(this, baseptr); hand_w->set_address_info(nstart, nmask); m_root_write->populate(nstart, nend, nmirror, hand_w); } @@ -2238,76 +2053,6 @@ template<int Level, int Width, int AddrShift, endianness_t Endian> void address_ // MEMORY MAPPING HELPERS //************************************************************************** -//------------------------------------------------- -// find_backing_memory - return a pointer to -// the base of RAM associated with the given -// device and offset -//------------------------------------------------- - -void *address_space::find_backing_memory(offs_t addrstart, offs_t addrend) -{ - VPRINTF(("address_space::find_backing_memory('%s',%s,%08X-%08X) -> ", m_device.tag(), m_name, addrstart, addrend)); - - if (m_map == nullptr) - return nullptr; - - // look in the address map first, last winning for overrides - void *result = nullptr; - for (address_map_entry &entry : m_map->m_entrylist) - { - if (entry.m_memory != nullptr && addrstart >= entry.m_addrstart && addrend <= entry.m_addrend) - { - VPRINTF(("found in entry %08X-%08X [%p]\n", entry.m_addrstart, entry.m_addrend, (u8 *)entry.m_memory + address_to_byte(addrstart - entry.m_addrstart))); - result = (u8 *)entry.m_memory + address_to_byte(addrstart - entry.m_addrstart); - } - } - if (result) - return result; - - // if not found there, look in the allocated blocks - for (auto &block : m_manager.m_blocklist) - if (block->contains(*this, addrstart, addrend)) - { - VPRINTF(("found in allocated memory block %08X-%08X [%p]\n", block->addrstart(), block->addrend(), block->data() + address_to_byte(addrstart - block->addrstart()))); - return block->data() + address_to_byte(addrstart - block->addrstart()); - } - - VPRINTF(("did not find\n")); - return nullptr; -} - - -//------------------------------------------------- -// space_needs_backing_store - return whether a -// given memory map entry implies the need of -// allocating and registering memory -//------------------------------------------------- - -bool address_space::needs_backing_store(const address_map_entry &entry) -{ - // if we are sharing, and we don't have a pointer yet, create one - if (entry.m_share != nullptr) - { - std::string fulltag = entry.m_devbase.subtag(entry.m_share); - auto share = m_manager.shares().find(fulltag); - if (share != m_manager.shares().end() && share->second->ptr() == nullptr) - return true; - } - - // if we're writing to any sort of bank or RAM, then yes, we do need backing - if (entry.m_write.m_type == AMH_BANK || entry.m_write.m_type == AMH_RAM) - return true; - - // if we're reading from RAM or from ROM outside of address space 0 or its region, then yes, we do need backing - memory_region *region = m_manager.machine().root_device().memregion(m_device.tag()); - if (entry.m_read.m_type == AMH_RAM || - (entry.m_read.m_type == AMH_ROM && (m_spacenum != 0 || region == nullptr || entry.m_addrstart >= region->bytes()))) - return true; - - // all other cases don't need backing - return false; -} - int address_space::add_change_notifier(std::function<void (read_or_write)> n) { int id = m_notifier_id++; @@ -2327,92 +2072,6 @@ void address_space::remove_change_notifier(int id) //************************************************************************** -// BANKING HELPERS -//************************************************************************** - -//------------------------------------------------- -// bank_find_or_allocate - allocate a new -// bank, or find an existing one, and return the -// read/write handler -//------------------------------------------------- - -memory_bank &address_space::bank_find_or_allocate(const char *tag, offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite) -{ - // adjust the addresses, handling mirrors and such - offs_t addrmask = ~addrmirror; - adjust_addresses(addrstart, addrend, addrmask, addrmirror); - - // look up the bank by name, or else by byte range - memory_bank *membank = tag ? m_manager.find(tag) : m_manager.find(*this, addrstart, addrend); - - // if we don't have a bank yet, create a new one - if (!membank) - membank = m_manager.allocate(*this, addrstart, addrend, tag); - - // add a reference for this space - membank->add_reference(*this, readorwrite); - return *membank; -} - - -//************************************************************************** -// MEMORY BLOCK -//************************************************************************** - -//------------------------------------------------- -// memory_block - constructor -//------------------------------------------------- - -memory_block::memory_block(address_space &space, offs_t addrstart, offs_t addrend, void *memory) - : m_machine(space.m_manager.machine()), - m_space(space), - m_addrstart(addrstart), - m_addrend(addrend), - m_data(reinterpret_cast<u8 *>(memory)) -{ - offs_t const length = space.address_to_byte(addrend + 1 - addrstart); - VPRINTF(("block_allocate('%s',%s,%08X,%08X,%p)\n", space.device().tag(), space.name(), addrstart, addrend, memory)); - - // allocate a block if needed - if (m_data == nullptr) - { - if (length < 4096) - { - m_allocated.resize(length); - memset(&m_allocated[0], 0, length); - m_data = &m_allocated[0]; - } - else - { - m_allocated.resize(length + 0xfff); - memset(&m_allocated[0], 0, length + 0xfff); - m_data = reinterpret_cast<u8 *>((reinterpret_cast<uintptr_t>(&m_allocated[0]) + 0xfff) & ~0xfff); - } - } - - // register for saving, but only if we're not part of a memory region - if (space.m_manager.region_containing(m_data, length) != nullptr) - VPRINTF(("skipping save of this memory block as it is covered by a memory region\n")); - else - { - int bytes_per_element = space.data_width() / 8; - std::string name = string_format("%08x-%08x", addrstart, addrend); - machine().save().save_memory(&space.device(), "memory", space.device().tag(), space.spacenum(), name.c_str(), m_data, bytes_per_element, (u32)length / bytes_per_element); - } -} - - -//------------------------------------------------- -// memory_block - destructor -//------------------------------------------------- - -memory_block::~memory_block() -{ -} - - - -//************************************************************************** // MEMORY BANK //************************************************************************** @@ -2420,27 +2079,13 @@ memory_block::~memory_block() // memory_bank - constructor //------------------------------------------------- -memory_bank::memory_bank(address_space &space, int index, offs_t addrstart, offs_t addrend, const char *tag) - : m_machine(space.m_manager.machine()), - m_anonymous(tag == nullptr), - m_addrstart(addrstart), - m_addrend(addrend), +memory_bank::memory_bank(device_t &device, std::string tag) + : m_machine(device.machine()), m_curentry(0) { - // generate an internal tag if we don't have one - if (tag == nullptr) - { - m_tag = string_format("~%d~", index); - m_name = string_format("Internal bank #%d", index); - } - else - { - m_tag = tag; - m_name = string_format("Bank '%s'", tag); - } - - if (!m_anonymous && machine().save().registration_allowed()) - machine().save().save_item(&space.device(), "memory", m_tag.c_str(), 0, NAME(m_curentry)); + m_tag = std::move(tag); + m_name = string_format("Bank '%s'", m_tag); + machine().save().save_item(&device, "memory", m_tag.c_str(), 0, NAME(m_curentry)); } @@ -2454,35 +2099,6 @@ memory_bank::~memory_bank() //------------------------------------------------- -// references_space - walk the list of references -// to find a match against the provided space -// and read/write -//------------------------------------------------- - -bool memory_bank::references_space(const address_space &space, read_or_write readorwrite) const -{ - for (auto &ref : m_reflist) - if (ref->matches(space, readorwrite)) - return true; - return false; -} - - -//------------------------------------------------- -// add_reference - add a new reference to the -// given space -//------------------------------------------------- - -void memory_bank::add_reference(address_space &space, read_or_write readorwrite) -{ - // if we already have a reference, skip it - if (references_space(space, readorwrite)) - return; - m_reflist.push_back(std::make_unique<bank_reference>(space, readorwrite)); -} - - -//------------------------------------------------- // set_base - set the bank base explicitly //------------------------------------------------- @@ -2498,21 +2114,10 @@ void memory_bank::set_base(void *base) m_curentry = 0; } m_entries[m_curentry] = reinterpret_cast<u8 *>(base); - for(const auto &cb : m_alloc_notifier) - cb(base); - m_alloc_notifier.clear(); } //------------------------------------------------- -// add_notifier - add a function used to notify when the allocation is done -//------------------------------------------------- -void memory_bank::add_notifier(std::function<void (void *)> cb) -{ - m_alloc_notifier.emplace_back(std::move(cb)); -} - -//------------------------------------------------- // set_entry - set the base to a pre-configured // entry //------------------------------------------------- @@ -2520,8 +2125,6 @@ void memory_bank::add_notifier(std::function<void (void *)> cb) void memory_bank::set_entry(int entrynum) { // validate - if (m_anonymous) - throw emu_fatalerror("memory_bank::set_entry called for anonymous bank"); if (entrynum < 0 || entrynum >= int(m_entries.size())) throw emu_fatalerror("memory_bank::set_entry called with out-of-range entry %d", entrynum); if (m_entries[entrynum] == nullptr) @@ -2573,9 +2176,9 @@ void memory_bank::configure_entries(int startentry, int numentries, void *base, // memory_region - constructor //------------------------------------------------- -memory_region::memory_region(running_machine &machine, const char *name, u32 length, u8 width, endianness_t endian) +memory_region::memory_region(running_machine &machine, std::string name, u32 length, u8 width, endianness_t endian) : m_machine(machine), - m_name(name), + m_name(std::move(name)), m_buffer(length), m_endianness(endian), m_bitwidth(width * 8), @@ -2583,3 +2186,17 @@ memory_region::memory_region(running_machine &machine, const char *name, u32 len { assert(width == 1 || width == 2 || width == 4 || width == 8); } + +std::string memory_share::compare(u8 width, size_t bytes, endianness_t endianness) const +{ + if (width != m_bitwidth) + return util::string_format("share %s found with unexpected width (expected %d, found %d)", m_name, width, m_bitwidth); + if (bytes != m_bytes) + return util::string_format("share %s found with unexpected size (expected %x, found %x)", m_name, bytes, m_bytes); + if (endianness != m_endianness && m_bitwidth != 8) + return util::string_format("share %s found with unexpected endianness (expected %s, found %s)", m_name, + endianness == ENDIANNESS_LITTLE ? "little" : "big", + m_endianness == ENDIANNESS_LITTLE ? "little" : "big"); + return ""; +} + diff --git a/src/emu/emumem.h b/src/emu/emumem.h index 1adfb0332eb..ed8897a2992 100644 --- a/src/emu/emumem.h +++ b/src/emu/emumem.h @@ -1372,29 +1372,23 @@ public: void install_read_port(offs_t addrstart, offs_t addrend, const char *rtag) { install_read_port(addrstart, addrend, 0, rtag); } void install_write_port(offs_t addrstart, offs_t addrend, const char *wtag) { install_write_port(addrstart, addrend, 0, wtag); } void install_readwrite_port(offs_t addrstart, offs_t addrend, const char *rtag, const char *wtag) { install_readwrite_port(addrstart, addrend, 0, rtag, wtag); } - void install_read_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_read_bank(addrstart, addrend, 0, tag); } - void install_write_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_write_bank(addrstart, addrend, 0, tag); } - void install_readwrite_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_readwrite_bank(addrstart, addrend, 0, tag); } void install_read_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_read_bank(addrstart, addrend, 0, bank); } void install_write_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_write_bank(addrstart, addrend, 0, bank); } void install_readwrite_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_readwrite_bank(addrstart, addrend, 0, bank); } - void install_rom(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_rom(addrstart, addrend, 0, baseptr); } - void install_writeonly(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_writeonly(addrstart, addrend, 0, baseptr); } - void install_ram(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_ram(addrstart, addrend, 0, baseptr); } + void install_rom(offs_t addrstart, offs_t addrend, void *baseptr) { install_rom(addrstart, addrend, 0, baseptr); } + void install_writeonly(offs_t addrstart, offs_t addrend, void *baseptr) { install_writeonly(addrstart, addrend, 0, baseptr); } + void install_ram(offs_t addrstart, offs_t addrend, void *baseptr) { install_ram(addrstart, addrend, 0, baseptr); } // install ports, banks, RAM (with mirror/mask) void install_read_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *rtag) { install_readwrite_port(addrstart, addrend, addrmirror, rtag, ""); } void install_write_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *wtag) { install_readwrite_port(addrstart, addrend, addrmirror, "", wtag); } virtual void install_readwrite_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, std::string rtag, std::string wtag) = 0; - void install_read_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmirror, tag, ""); } - void install_write_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmirror, "", tag); } - void install_readwrite_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmirror, tag, tag); } void install_read_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmirror, bank, nullptr); } void install_write_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmirror, nullptr, bank); } void install_readwrite_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmirror, bank, bank); } - void install_rom(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmirror, read_or_write::READ, baseptr); } - void install_writeonly(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmirror, read_or_write::WRITE, baseptr); } - void install_ram(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmirror, read_or_write::READWRITE, baseptr); } + void install_rom(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr) { install_ram_generic(addrstart, addrend, addrmirror, read_or_write::READ, baseptr); } + void install_writeonly(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr) { install_ram_generic(addrstart, addrend, addrmirror, read_or_write::WRITE, baseptr); } + void install_ram(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr) { install_ram_generic(addrstart, addrend, addrmirror, read_or_write::READWRITE, baseptr); } // install device memory maps template <typename T> void install_device(offs_t addrstart, offs_t addrend, T &device, void (T::*map)(address_map &map), u64 unitmask = 0, int cswidth = 0) { @@ -1594,8 +1588,6 @@ public: // setup void prepare_map(); void populate_from_map(address_map *map = nullptr); - void allocate_memory(); - void locate_memory(); template<int Width, int AddrShift, endianness_t Endian> handler_entry_read_unmapped <Width, AddrShift, Endian> *get_unmap_r() const { return static_cast<handler_entry_read_unmapped <Width, AddrShift, Endian> *>(m_unmap_r); } template<int Width, int AddrShift, endianness_t Endian> handler_entry_write_unmapped<Width, AddrShift, Endian> *get_unmap_w() const { return static_cast<handler_entry_write_unmapped<Width, AddrShift, Endian> *>(m_unmap_w); } @@ -1608,13 +1600,8 @@ protected: void populate_map_entry(const address_map_entry &entry, read_or_write readorwrite); virtual void unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, bool quiet) = 0; virtual void install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, void *baseptr) = 0; - virtual void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, std::string rtag, std::string wtag) = 0; virtual void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank) = 0; void adjust_addresses(offs_t &start, offs_t &end, offs_t &mask, offs_t &mirror); - void *find_backing_memory(offs_t addrstart, offs_t addrend); - bool needs_backing_store(const address_map_entry &entry); - memory_bank &bank_find_or_allocate(const char *tag, offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite); - address_map_entry *block_assign_intersecting(offs_t bytestart, offs_t byteend, u8 *base); void check_optimize_all(const char *function, int width, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, u64 unitmask, int cswidth, offs_t &nstart, offs_t &nend, offs_t &nmask, offs_t &nmirror, u64 &nunitmask, int &ncswidth); void check_optimize_mirror(const char *function, offs_t addrstart, offs_t addrend, offs_t addrmirror, offs_t &nstart, offs_t &nend, offs_t &nmask, offs_t &nmirror); void check_address(const char *function, offs_t addrstart, offs_t addrend); @@ -1647,93 +1634,22 @@ protected: }; -// ======================> memory_block - -// a memory block is a chunk of RAM associated with a range of memory in a device's address space -class memory_block -{ - DISABLE_COPYING(memory_block); - -public: - // construction/destruction - memory_block(address_space &space, offs_t start, offs_t end, void *memory = nullptr); - ~memory_block(); - - // getters - running_machine &machine() const { return m_machine; } - offs_t addrstart() const { return m_addrstart; } - offs_t addrend() const { return m_addrend; } - u8 *data() const { return m_data; } - - // is the given range contained by this memory block? - bool contains(address_space &space, offs_t addrstart, offs_t addrend) const - { - return (&space == &m_space && m_addrstart <= addrstart && m_addrend >= addrend); - } - -private: - // internal state - running_machine & m_machine; // need the machine to free our memory - address_space & m_space; // which address space are we associated with? - offs_t m_addrstart, m_addrend; // start/end for verifying a match - u8 * m_data; // pointer to the data for this block - std::vector<u8> m_allocated; // pointer to the actually allocated block -}; - - // ======================> memory_bank // a memory bank is a global pointer to memory that can be shared across devices and changed dynamically class memory_bank { - // a bank reference is an entry in a list of address spaces that reference a given bank - class bank_reference - { - public: - // construction/destruction - bank_reference(address_space &space, read_or_write readorwrite) - : m_space(space), - m_readorwrite(readorwrite) { } - - // getters - address_space &space() const { return m_space; } - - // does this reference match the space+read/write combination? - bool matches(const address_space &space, read_or_write readorwrite) const - { - return (&space == &m_space && (readorwrite == read_or_write::READWRITE || readorwrite == m_readorwrite)); - } - - private: - // internal state - address_space & m_space; // address space that references us - read_or_write m_readorwrite; // used for read or write? - - }; - public: // construction/destruction - memory_bank(address_space &space, int index, offs_t start, offs_t end, const char *tag = nullptr); + memory_bank(device_t &device, std::string tag); ~memory_bank(); // getters running_machine &machine() const { return m_machine; } int entry() const { return m_curentry; } - bool anonymous() const { return m_anonymous; } - offs_t addrstart() const { return m_addrstart; } void *base() const { return m_entries.empty() ? nullptr : m_entries[m_curentry]; } - const char *tag() const { return m_tag.c_str(); } - const char *name() const { return m_name.c_str(); } - - // compare a range against our range - bool matches_exactly(offs_t addrstart, offs_t addrend) const { return (m_addrstart == addrstart && m_addrend == addrend); } - bool fully_covers(offs_t addrstart, offs_t addrend) const { return (m_addrstart <= addrstart && m_addrend >= addrend); } - bool is_covered_by(offs_t addrstart, offs_t addrend) const { return (m_addrstart >= addrstart && m_addrend <= addrend); } - bool straddles(offs_t addrstart, offs_t addrend) const { return (m_addrstart < addrend && m_addrend > addrstart); } - - // track and verify address space references to this bank - bool references_space(const address_space &space, read_or_write readorwrite) const; - void add_reference(address_space &space, read_or_write readorwrite); + const std::string &tag() const { return m_tag; } + const std::string &name() const { return m_name; } // set the base explicitly void set_base(void *base); @@ -1742,20 +1658,14 @@ public: void configure_entry(int entrynum, void *base); void configure_entries(int startentry, int numentries, void *base, offs_t stride); void set_entry(int entrynum); - void add_notifier(std::function<void (void *)> cb); private: // internal state running_machine & m_machine; // need the machine to free our memory std::vector<u8 *> m_entries; // the entries - bool m_anonymous; // are we anonymous or explicit? - offs_t m_addrstart; // start offset - offs_t m_addrend; // end offset int m_curentry; // current entry std::string m_name; // friendly name for this bank std::string m_tag; // tag for this bank - std::vector<std::unique_ptr<bank_reference>> m_reflist; // list of address spaces referencing this bank - std::vector<std::function<void (void *)>> m_alloc_notifier; // list of notifier targets when allocating }; @@ -1766,26 +1676,28 @@ class memory_share { public: // construction/destruction - memory_share(u8 width, size_t bytes, endianness_t endianness, void *ptr = nullptr) - : m_ptr(ptr), - m_bytes(bytes), - m_endianness(endianness), - m_bitwidth(width), - m_bytewidth(width <= 8 ? 1 : width <= 16 ? 2 : width <= 32 ? 4 : 8) + memory_share(std::string name, u8 width, size_t bytes, endianness_t endianness, void *ptr) + : m_name(name), + m_ptr(ptr), + m_bytes(bytes), + m_endianness(endianness), + m_bitwidth(width), + m_bytewidth(width <= 8 ? 1 : width <= 16 ? 2 : width <= 32 ? 4 : 8) { } // getters + const std::string &name() const { return m_name; } void *ptr() const { return m_ptr; } size_t bytes() const { return m_bytes; } endianness_t endianness() const { return m_endianness; } u8 bitwidth() const { return m_bitwidth; } u8 bytewidth() const { return m_bytewidth; } - // setters - void set_ptr(void *ptr) { m_ptr = ptr; } + std::string compare(u8 width, size_t bytes, endianness_t endianness) const; private: // internal state + std::string m_name; // share name void * m_ptr; // pointer to the memory backing the region size_t m_bytes; // size of the shared region in bytes endianness_t m_endianness; // endianness of the memory @@ -1801,18 +1713,16 @@ private: class memory_region { DISABLE_COPYING(memory_region); - - friend class memory_manager; public: // construction/destruction - memory_region(running_machine &machine, const char *name, u32 length, u8 width, endianness_t endian); + memory_region(running_machine &machine, std::string name, u32 length, u8 width, endianness_t endian); // getters running_machine &machine() const { return m_machine; } u8 *base() { return (m_buffer.size() > 0) ? &m_buffer[0] : nullptr; } u8 *end() { return base() + m_buffer.size(); } u32 bytes() const { return m_buffer.size(); } - const char *name() const { return m_name.c_str(); } + const std::string &name() const { return m_name; } // flag expansion endianness_t endianness() const { return m_endianness; } @@ -1844,39 +1754,53 @@ class memory_manager { friend class address_space; template<int Level, int Width, int AddrShift, endianness_t Endian> friend class address_space_specific; - friend memory_region::memory_region(running_machine &machine, const char *name, u32 length, u8 width, endianness_t endian); public: // construction/destruction memory_manager(running_machine &machine); + ~memory_manager(); + + // initialize the memory spaces from the memory maps of the devices void initialize(); // getters running_machine &machine() const { return m_machine; } + + // used for the debugger interface memory views const std::unordered_map<std::string, std::unique_ptr<memory_bank>> &banks() const { return m_banklist; } const std::unordered_map<std::string, std::unique_ptr<memory_region>> ®ions() const { return m_regionlist; } const std::unordered_map<std::string, std::unique_ptr<memory_share>> &shares() const { return m_sharelist; } - // regions - memory_region *region_alloc(const char *name, u32 length, u8 width, endianness_t endian); - void region_free(const char *name); - memory_region *region_containing(const void *memory, offs_t bytes) const; + // anonymous memory zones + void *anonymous_alloc(address_space &space, size_t bytes, u8 width, offs_t start, offs_t end); - memory_bank *find(const char *tag) const; - memory_bank *find(address_space &space, offs_t addrstart, offs_t addrend) const; - memory_bank *allocate(address_space &space, offs_t addrstart, offs_t addrend, const char *tag = nullptr); + // shares + memory_share *share_alloc(device_t &dev, std::string name, u8 width, size_t bytes, endianness_t endianness); + memory_share *share_find(std::string name); -private: - void allocate(device_memory_interface &memory); + // banks + memory_bank *bank_alloc(device_t &device, std::string tag); + memory_bank *bank_find(std::string tag); + // regions + memory_region *region_alloc(std::string name, u32 length, u8 width, endianness_t endian); + memory_region *region_find(std::string name); + void region_free(std::string name); + +private: // internal state running_machine & m_machine; // reference to the machine - bool m_initialized; // have we completed initialization? - - std::vector<std::unique_ptr<memory_block>> m_blocklist; // head of the list of memory blocks + std::vector<void *> m_datablocks; // list of memory blocks to free on exit std::unordered_map<std::string, std::unique_ptr<memory_bank>> m_banklist; // data gathered for each bank std::unordered_map<std::string, std::unique_ptr<memory_share>> m_sharelist; // map for share lookups std::unordered_map<std::string, std::unique_ptr<memory_region>> m_regionlist; // list of memory regions + + + // Allocate the address spaces + void allocate(device_memory_interface &memory); + + // Allocate some ram and register it for saving + void *allocate_memory(device_t &dev, int spacenum, std::string name, u8 width, size_t bytes); }; diff --git a/src/emu/emumem_hem.h b/src/emu/emumem_hem.h index 1d076ebc51b..f3650328854 100644 --- a/src/emu/emumem_hem.h +++ b/src/emu/emumem_hem.h @@ -11,14 +11,12 @@ public: using uX = typename emu::detail::handler_entry_size<Width>::uX; using inh = handler_entry_read_address<Width, AddrShift, Endian>; - handler_entry_read_memory(address_space *space) : handler_entry_read_address<Width, AddrShift, Endian>(space, 0) {} + handler_entry_read_memory(address_space *space, void *base) : handler_entry_read_address<Width, AddrShift, Endian>(space, 0), m_base(reinterpret_cast<uX *>(base)) {} ~handler_entry_read_memory() = default; uX read(offs_t offset, uX mem_mask) const override; void *get_ptr(offs_t offset) const override; - inline void set_base(uX *base) { m_base = base; } - std::string name() const override; private: @@ -31,14 +29,12 @@ public: using uX = typename emu::detail::handler_entry_size<Width>::uX; using inh = handler_entry_write_address<Width, AddrShift, Endian>; - handler_entry_write_memory(address_space *space) : handler_entry_write_address<Width, AddrShift, Endian>(space, 0) {} + handler_entry_write_memory(address_space *space, void *base) : handler_entry_write_address<Width, AddrShift, Endian>(space, 0), m_base(reinterpret_cast<uX *>(base)) {} ~handler_entry_write_memory() = default; void write(offs_t offset, uX data, uX mem_mask) const override; void *get_ptr(offs_t offset) const override; - inline void set_base(uX *base) { m_base = base; } - std::string name() const override; private: diff --git a/src/emu/romload.cpp b/src/emu/romload.cpp index a728a6a7660..b3b90ebbcf7 100644 --- a/src/emu/romload.cpp +++ b/src/emu/romload.cpp @@ -1278,8 +1278,8 @@ void rom_load_manager::load_software_part_region(device_t &device, software_list machine().memory().region_free(memregion->name()); } - // remember the base and length - m_region = machine().memory().region_alloc(regiontag.c_str(), regionlength, width, endianness); + /* remember the base and length */ + m_region = machine().memory().region_alloc(regiontag, regionlength, width, endianness); LOG("Allocated %X bytes @ %p\n", m_region->bytes(), m_region->base()); if (ROMREGION_ISERASE(region)) // clear the region if it's requested diff --git a/src/mame/audio/bally.cpp b/src/mame/audio/bally.cpp index fbe8453f795..7b5cdf494b3 100644 --- a/src/mame/audio/bally.cpp +++ b/src/mame/audio/bally.cpp @@ -491,7 +491,6 @@ TIMER_CALLBACK_MEMBER(bally_cheap_squeak_device::sound_int_sync) void bally_cheap_squeak_device::cheap_squeak_map(address_map &map) { map.unmap_value_high(); - map(0x0080, 0x00ff).ram(); map(0x8000, 0x9fff).mirror(0x2000).rom(); map(0xc000, 0xdfff).mirror(0x2000).rom(); } diff --git a/src/mame/audio/dcs.cpp b/src/mame/audio/dcs.cpp index 3932d430f68..8ce7402b59e 100644 --- a/src/mame/audio/dcs.cpp +++ b/src/mame/audio/dcs.cpp @@ -706,8 +706,8 @@ dcs_audio_device::dcs_audio_device(const machine_config &mconfig, device_type ty m_sounddata_bank(0), m_ram_map(*this, "data_map_bank"), m_data_bank(*this, "databank"), - m_rom_page(nullptr), - m_dram_page(nullptr), + m_rom_page(*this, "rompage"), + m_dram_page(*this, "drampage"), m_auto_ack(0), m_latch_control(0), m_input_data(0), @@ -1051,16 +1051,14 @@ void dcs_audio_device::sdrc_remap_memory() { int baseaddr = (SDRC_ROM_ST == 0) ? 0x0000 : (SDRC_ROM_ST == 1) ? 0x3000 : 0x3400; int pagesize = (SDRC_ROM_SZ == 0 && SDRC_ROM_ST != 0) ? 4096 : 1024; - m_data->install_read_bank(baseaddr, baseaddr + pagesize - 1, "rompage"); - m_rom_page = membank("rompage"); + m_data->install_read_bank(baseaddr, baseaddr + pagesize - 1, m_rom_page); } /* map the DRAM page as bank 26 */ if (SDRC_DM_ST != 0) { int baseaddr = (SDRC_DM_ST == 1) ? 0x0000 : (SDRC_DM_ST == 2) ? 0x3000 : 0x3400; - m_data->install_readwrite_bank(baseaddr, baseaddr + 0x3ff, "drampage"); - m_dram_page = membank("drampage"); + m_data->install_readwrite_bank(baseaddr, baseaddr + 0x3ff, m_dram_page); } /* update the bank pointers */ diff --git a/src/mame/audio/dcs.h b/src/mame/audio/dcs.h index 719e9d87a8b..0cebee16dec 100644 --- a/src/mame/audio/dcs.h +++ b/src/mame/audio/dcs.h @@ -199,8 +199,8 @@ protected: optional_device<address_map_bank_device> m_ram_map; optional_memory_bank m_data_bank; - memory_bank * m_rom_page; - memory_bank * m_dram_page; + memory_bank_creator m_rom_page; + memory_bank_creator m_dram_page; /* I/O with the host */ uint8_t m_auto_ack; diff --git a/src/mame/audio/mario.cpp b/src/mame/audio/mario.cpp index 1bdf1822bcd..a97abfdcf79 100644 --- a/src/mame/audio/mario.cpp +++ b/src/mame/audio/mario.cpp @@ -428,7 +428,7 @@ void mario_state::sound_start() { m_eabank = "bank1"; - m_audiocpu->space(AS_PROGRAM).install_read_bank(0x000, 0x7ff, "bank1"); + m_audiocpu->space(AS_PROGRAM).install_read_bank(0x000, 0x7ff, membank("bank1")); membank("bank1")->configure_entry(0, &SND[0]); membank("bank1")->configure_entry(1, &SND[0x1000]); @@ -609,7 +609,7 @@ void mario_state::mario_sh3_w(offs_t offset, uint8_t data) void mario_state::mario_sound_map(address_map &map) { - map(0x0000, 0x07ff).bankr("bank1").region("audiocpu", 0); + map(0x0000, 0x07ff).bankr("bank1"); map(0x0800, 0x0fff).rom(); } diff --git a/src/mame/audio/pinsnd88.cpp b/src/mame/audio/pinsnd88.cpp index 5e26d397e56..796174a8548 100644 --- a/src/mame/audio/pinsnd88.cpp +++ b/src/mame/audio/pinsnd88.cpp @@ -155,7 +155,7 @@ void pinsnd88_device::pinsnd88_map(address_map &map) map(0x3400, 0x3400).mirror(0x03ff).r(m_inputlatch, FUNC(generic_latch_8_device::read)); map(0x3800, 0x3800).mirror(0x03ff).w(FUNC(pinsnd88_device::bgbank_w)); map(0x3c00, 0x3c00).mirror(0x03ff).w(FUNC(pinsnd88_device::sync_w)); - map(0x4000, 0xbfff).bankr("bank").region("cpu", 0); // banked rom + map(0x4000, 0xbfff).bankr("bank"); // banked rom map(0xc000, 0xffff).rom().region("cpu",0x3c000); // fixed bank } diff --git a/src/mame/drivers/3do.cpp b/src/mame/drivers/3do.cpp index 21c83a4d497..e621c2a9bde 100644 --- a/src/mame/drivers/3do.cpp +++ b/src/mame/drivers/3do.cpp @@ -108,7 +108,7 @@ Part list of Goldstar 3DO Interactive Multiplayer void _3do_state::main_mem(address_map &map) { - map(0x00000000, 0x001FFFFF).bankrw(m_bank1).share(m_dram); /* DRAM */ + map(0x00000000, 0x001FFFFF).bankrw(m_bank1); /* DRAM */ map(0x00200000, 0x003FFFFF).ram().share(m_vram); /* VRAM */ map(0x03000000, 0x030FFFFF).rom().region("bios", 0); /* BIOS */ map(0x03100000, 0x0313FFFF).ram(); /* Brooktree? */ diff --git a/src/mame/drivers/4enlinea.cpp b/src/mame/drivers/4enlinea.cpp index 4e9fc05ef40..9c5e6d32d37 100644 --- a/src/mame/drivers/4enlinea.cpp +++ b/src/mame/drivers/4enlinea.cpp @@ -333,7 +333,7 @@ void isa8_cga_4enlinea_device::device_start() //m_isa->install_device(0x3bf, 0x3bf, 0, 0, nullptr, write8_delegate(*this, FUNC(isa8_cga_4enlinea_device::_4enlinea_mode_control_w))); m_isa->install_device(0x3d0, 0x3df, read8sm_delegate(*this, FUNC(isa8_cga_4enlinea_device::_4enlinea_io_read)), write8sm_delegate(*this, FUNC(isa8_cga_device::io_write))); - m_isa->install_bank(0x8000, 0xbfff, "bank1", &m_vram[0]); + m_isa->install_bank(0x8000, 0xbfff, &m_vram[0]); // Initialise the CGA palette int i; diff --git a/src/mame/drivers/8080bw.cpp b/src/mame/drivers/8080bw.cpp index 28cd39bc228..21be1a32d1d 100644 --- a/src/mame/drivers/8080bw.cpp +++ b/src/mame/drivers/8080bw.cpp @@ -2226,7 +2226,7 @@ void _8080bw_state::yosakdon_map(address_map &map) { map(0x0000, 0x1fff).rom(); map(0x2000, 0x3fff).ram().share("main_ram"); - map(0x4000, 0x43ff).writeonly(); /* what's this? */ + map(0x4000, 0x43ff).nopw(); /* what's this? */ } void _8080bw_state::yosakdon_io_map(address_map &map) diff --git a/src/mame/drivers/a5105.cpp b/src/mame/drivers/a5105.cpp index 3525ce5b51d..1da08b80a1a 100644 --- a/src/mame/drivers/a5105.cpp +++ b/src/mame/drivers/a5105.cpp @@ -287,12 +287,12 @@ void a5105_state::a5105_memsel_w(uint8_t data) { case 0: membank("bank1")->set_base(m_rom_base); - prog.install_read_bank(0x0000, 0x3fff, "bank1"); + prog.install_read_bank(0x0000, 0x3fff, membank("bank1")); prog.unmap_write(0x0000, 0x3fff); break; case 2: membank("bank1")->set_base(m_ram_base); - prog.install_readwrite_bank(0x0000, 0x3fff, "bank1"); + prog.install_readwrite_bank(0x0000, 0x3fff, membank("bank1")); break; default: prog.unmap_readwrite(0x0000, 0x3fff); @@ -308,17 +308,17 @@ void a5105_state::a5105_memsel_w(uint8_t data) { case 0: membank("bank2")->set_base(m_rom_base + 0x4000); - prog.install_read_bank(0x4000, 0x7fff, "bank2"); + prog.install_read_bank(0x4000, 0x7fff, membank("bank2")); prog.unmap_write(0x4000, 0x4000); break; case 1: membank("bank2")->set_base(memregion("k5651")->base()); - prog.install_read_bank(0x4000, 0x7fff, "bank2"); + prog.install_read_bank(0x4000, 0x7fff, membank("bank2")); prog.unmap_write(0x4000, 0x4000); break; case 2: membank("bank2")->set_base(m_ram_base + 0x4000); - prog.install_readwrite_bank(0x4000, 0x7fff, "bank2"); + prog.install_readwrite_bank(0x4000, 0x7fff, membank("bank2")); break; default: prog.unmap_readwrite(0x4000, 0x7fff); @@ -334,12 +334,12 @@ void a5105_state::a5105_memsel_w(uint8_t data) { case 0: membank("bank3")->set_base(m_rom_base + 0x8000); - prog.install_read_bank(0x8000, 0xbfff, "bank3"); + prog.install_read_bank(0x8000, 0xbfff, membank("bank3")); prog.unmap_write(0x8000, 0xbfff); break; case 2: membank("bank3")->set_base(m_ram_base + 0x8000); - prog.install_readwrite_bank(0x8000, 0xbfff, "bank3"); + prog.install_readwrite_bank(0x8000, 0xbfff, membank("bank3")); break; default: prog.unmap_readwrite(0x8000, 0xbfff); @@ -355,7 +355,7 @@ void a5105_state::a5105_memsel_w(uint8_t data) { case 2: membank("bank4")->set_base(m_ram_base + 0xc000); - prog.install_readwrite_bank(0xc000, 0xffff, "bank4"); + prog.install_readwrite_bank(0xc000, 0xffff, membank("bank4")); break; default: prog.unmap_readwrite(0xc000, 0xffff); diff --git a/src/mame/drivers/a7150.cpp b/src/mame/drivers/a7150.cpp index 92a3327b452..70831508053 100644 --- a/src/mame/drivers/a7150.cpp +++ b/src/mame/drivers/a7150.cpp @@ -340,18 +340,18 @@ void a7150_state::k7070_cpu_banked(address_map &map) map.unmap_value_high(); // default map: IML=0, MSEL=0. ROM + local RAM. map(0x00000, 0x01fff).rom().region("user2", 0); - map(0x02000, 0x07fff).bankrw("kgs_ram1"); - map(0x08000, 0x0ffff).bankrw("kgs_ram2"); + map(0x02000, 0x07fff).ram().share("kgs_ram1"); + map(0x08000, 0x0ffff).ram().share("kgs_ram2"); // IML=1, MSEL=0. local RAM only. - map(0x10000, 0x11fff).bankrw("kgs_ram0"); - map(0x12000, 0x17fff).bankrw("kgs_ram1"); - map(0x18000, 0x1ffff).bankrw("kgs_ram2"); + map(0x10000, 0x11fff).ram().share("kgs_ram0"); + map(0x12000, 0x17fff).ram().share("kgs_ram1"); + map(0x18000, 0x1ffff).ram().share("kgs_ram2"); // IML=0, MSEL=1. ROM + local RAM. map(0x20000, 0x21fff).rom().region("user2", 0); - map(0x22000, 0x27fff).bankrw("kgs_ram1"); + map(0x22000, 0x27fff).ram().share("kgs_ram1"); // IML=1, MSEL=1. local RAM only. - map(0x30000, 0x31fff).bankrw("kgs_ram0"); - map(0x32000, 0x37fff).bankrw("kgs_ram1"); + map(0x30000, 0x31fff).ram().share("kgs_ram0"); + map(0x32000, 0x37fff).ram().share("kgs_ram1"); map(0x38000, 0x3ffff).ram().share("video_ram"); } diff --git a/src/mame/drivers/aeroboto.cpp b/src/mame/drivers/aeroboto.cpp index 7957ef66f23..1a06e99ff86 100644 --- a/src/mame/drivers/aeroboto.cpp +++ b/src/mame/drivers/aeroboto.cpp @@ -84,7 +84,7 @@ void aeroboto_state::main_map(address_map &map) map(0x0000, 0x07ff).ram().share("mainram"); // main RAM map(0x01a2, 0x01a2).w(FUNC(aeroboto_state::aeroboto_1a2_w)); // affects IRQ line (more protection?) map(0x0800, 0x08ff).ram(); // tile color buffer; copied to 0x2000 - map(0x0900, 0x09ff).writeonly(); // a backup of default tile colors + map(0x0900, 0x09ff).writeonly().share("colors2"); // a backup of default tile colors map(0x1000, 0x17ff).ram().w(FUNC(aeroboto_state::aeroboto_videoram_w)).share("videoram"); // tile RAM map(0x1800, 0x183f).ram().share("hscroll"); // horizontal scroll regs map(0x1840, 0x27ff).nopw(); // cleared during custom LSI test diff --git a/src/mame/drivers/alphasma.cpp b/src/mame/drivers/alphasma.cpp index ce5f8bcdf9e..3eb07232fa5 100644 --- a/src/mame/drivers/alphasma.cpp +++ b/src/mame/drivers/alphasma.cpp @@ -209,7 +209,7 @@ void asma2k_state::port_a_w(uint8_t data) address_space &space = m_maincpu->space(AS_PROGRAM); if (data & 0x40) - space.install_readwrite_bank(0x0000, 0x7fff, "rambank"); + space.install_readwrite_bank(0x0000, 0x7fff, m_rambank); else space.install_readwrite_handler(0x0000, 0x7fff, read8sm_delegate(*this, FUNC(asma2k_state::io_r)), write8sm_delegate(*this, FUNC(asma2k_state::io_w))); } diff --git a/src/mame/drivers/amiga.cpp b/src/mame/drivers/amiga.cpp index 16db6a5718b..4a28f17e2bb 100644 --- a/src/mame/drivers/amiga.cpp +++ b/src/mame/drivers/amiga.cpp @@ -793,7 +793,7 @@ void a1000_state::machine_reset() // bootrom visible, wom writable m_bootrom->set_bank(0); - m_maincpu->space(AS_PROGRAM).install_write_bank(0xfc0000, 0xffffff, "wom"); + m_maincpu->space(AS_PROGRAM).install_write_bank(0xfc0000, 0xffffff, m_wom); } // any write to this area will write protect the wom and disable the bootrom diff --git a/src/mame/drivers/apc.cpp b/src/mame/drivers/apc.cpp index cf3686b1730..09b740343e7 100644 --- a/src/mame/drivers/apc.cpp +++ b/src/mame/drivers/apc.cpp @@ -87,6 +87,7 @@ public: m_fdc_connector(*this, "upd765:%u", 0U), m_dmac(*this, "i8237"), m_pit(*this, "pit8253"), + m_aux_pcg(*this, "aux_pcg"), m_speaker(*this, "mono"), m_sound(*this, "upd1771c"), m_video_ram_1(*this, "video_ram_1"), @@ -115,8 +116,8 @@ private: required_device_array<floppy_connector, 2> m_fdc_connector; required_device<am9517a_device> m_dmac; required_device<pit8253_device> m_pit; + required_shared_ptr<uint8_t> m_aux_pcg; uint8_t *m_char_rom; - uint8_t *m_aux_pcg; required_device<speaker_device> m_speaker; required_device<upd1771c_device> m_sound; @@ -185,7 +186,6 @@ private: void apc_state::video_start() { m_char_rom = memregion("gfx")->base(); - m_aux_pcg = memregion("aux_pcg")->base(); } uint32_t apc_state::screen_update( screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect ) @@ -478,7 +478,7 @@ void apc_state::apc_map(address_map &map) map(0xa0000, 0xa0fff).ram().share("cmos"); // map(0xa1000, 0xbffff) mirror CMOS // map(0xc0000, 0xcffff) standard character ROM - map(0xd8000, 0xd9fff).ram().region("aux_pcg", 0); // AUX character RAM + map(0xd8000, 0xd9fff).ram().share("aux_pcg"); // AUX character RAM // map(0xe0000, 0xeffff) Special Character RAM map(0xfe000, 0xfffff).rom().region("ipl", 0); } @@ -791,7 +791,6 @@ static GFXDECODE_START( gfx_apc ) GFXDECODE_ENTRY( "gfx", 0x0800, charset_8x16, 0, 128 ) GFXDECODE_ENTRY( "gfx", 0x1000, charset_8x16, 0, 128 ) GFXDECODE_ENTRY( "gfx", 0x1800, charset_8x16, 0, 128 ) -// GFXDECODE_ENTRY( "aux_pcg", 0x0000, charset_pcg, 0, 128 ) GFXDECODE_END @@ -1000,8 +999,6 @@ ROM_START( apc ) ROM_REGION( 0x2000, "gfx", ROMREGION_ERASE00 ) ROM_LOAD("pfcu1r.bin", 0x000000, 0x002000, CRC(683efa94) SHA1(43157984a1746b2e448f3236f571011af9a3aa73) ) - - ROM_REGION16_LE( 0x2000, "aux_pcg", ROMREGION_ERASE00 ) ROM_END void apc_state::init_apc() diff --git a/src/mame/drivers/apple2gs.cpp b/src/mame/drivers/apple2gs.cpp index 6b12a1f9962..0dcb3c76e21 100644 --- a/src/mame/drivers/apple2gs.cpp +++ b/src/mame/drivers/apple2gs.cpp @@ -1276,8 +1276,7 @@ void apple2gs_state::machine_start() int ramsize = m_ram_size - 0x20000; // subtract 128K for banks 0 and 1, which are handled specially // RAM sizes for both classes of machine no longer include the Mega II RAM - space.install_readwrite_bank(0x020000, ramsize - 1 + 0x20000, "bank1"); - membank("bank1")->set_base(m_ram_ptr + 0x020000); + space.install_ram(0x020000, ramsize - 1 + 0x20000, m_ram_ptr + 0x020000); // setup save states save_item(NAME(m_speaker_state)); diff --git a/src/mame/drivers/apricotp.cpp b/src/mame/drivers/apricotp.cpp index 8e6b94d197d..30603452158 100644 --- a/src/mame/drivers/apricotp.cpp +++ b/src/mame/drivers/apricotp.cpp @@ -97,8 +97,7 @@ public: , m_floppy1(*this, WD2797_TAG":1") , m_floppy(nullptr) , m_centronics(*this, CENTRONICS_TAG) - , m_work_ram(*this, "work_ram") - , m_video_ram(*this, "video_ram") + , m_video_ram(*this, "video_ram", 0x20000, ENDIANNESS_LITTLE) { } void fp(machine_config &config); @@ -139,10 +138,10 @@ private: void lat_ls259_w(offs_t offset, int state); - optional_shared_ptr<uint16_t> m_work_ram; + uint16_t *m_work_ram; // video state - optional_shared_ptr<uint16_t> m_video_ram; + memory_share_creator<uint16_t> m_video_ram; uint8_t m_video; int m_centronics_busy; @@ -168,8 +167,6 @@ private: void fp_state::video_start() { - // allocate memory - m_video_ram.allocate(0x20000); } MC6845_UPDATE_ROW( fp_state::update_row ) @@ -535,7 +532,7 @@ WRITE_LINE_MEMBER( fp_state::write_centronics_perror ) void fp_state::machine_start() { // allocate memory - m_work_ram.allocate(m_ram->size() / 2); + m_work_ram = reinterpret_cast<uint16_t *>(m_ram->pointer()); } diff --git a/src/mame/drivers/aristmk4.cpp b/src/mame/drivers/aristmk4.cpp index 0220a60610e..156b8b83088 100644 --- a/src/mame/drivers/aristmk4.cpp +++ b/src/mame/drivers/aristmk4.cpp @@ -1034,7 +1034,7 @@ void aristmk4_state::slots_mem(address_map &map) map(0x1c00, 0x1cff).w(FUNC(aristmk4_state::mk4_printer_w)); map(0x1900, 0x19ff).r(FUNC(aristmk4_state::mk4_printer_r)); map(0x2000, 0x3fff).rom(); // graphics rom map - map(0x4000, 0x4fff).bankrw("bank1").share("nvram"); + map(0x4000, 0x4fff).ram().share("nvram"); map(0x5000, 0x5000).w(FUNC(aristmk4_state::u3_p0)); map(0x5002, 0x5002).r(FUNC(aristmk4_state::u3_p2)); @@ -1078,7 +1078,7 @@ void aristmk4_state::poker_mem(address_map &map) map(0x1801, 0x1801).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); map(0x1c00, 0x1cff).w(FUNC(aristmk4_state::mk4_printer_w)); map(0x1900, 0x19ff).r(FUNC(aristmk4_state::mk4_printer_r)); - map(0x4000, 0x4fff).bankrw("bank1").share("nvram"); + map(0x4000, 0x4fff).ram().share("nvram"); map(0x5000, 0x5000).w(FUNC(aristmk4_state::u3_p0)); map(0x5002, 0x5002).r(FUNC(aristmk4_state::u3_p2)); diff --git a/src/mame/drivers/arsystems.cpp b/src/mame/drivers/arsystems.cpp index ef96482e00d..1e60e43fa1a 100644 --- a/src/mame/drivers/arsystems.cpp +++ b/src/mame/drivers/arsystems.cpp @@ -66,6 +66,8 @@ public: arcadia_amiga_state(const machine_config &mconfig, device_type type, const char *tag) : amiga_state(mconfig, type, tag) , m_bios_region(*this, "user2") + , m_rom_board(*this, "user3") + { } @@ -103,7 +105,7 @@ private: virtual void machine_reset() override; - optional_memory_region m_bios_region; + optional_memory_region m_bios_region, m_rom_board; uint8_t m_coin_counter[2]; }; @@ -119,7 +121,7 @@ private: void arcadia_amiga_state::arcadia_multibios_change_game(uint16_t data) { if (data == 0) - m_maincpu->space(AS_PROGRAM).install_read_bank(0x800000, 0x97ffff, "bank2"); + m_maincpu->space(AS_PROGRAM).install_rom(0x800000, 0x97ffff, m_rom_board->base()); else m_maincpu->space(AS_PROGRAM).nop_read(0x800000, 0x97ffff); } @@ -221,7 +223,7 @@ void arcadia_amiga_state::a500_mem(address_map &map) void arcadia_amiga_state::arcadia_map(address_map &map) { a500_mem(map); - map(0x800000, 0x97ffff).bankr("bank2").region("user3", 0); + map(0x800000, 0x97ffff).rom().region("user3", 0); map(0x980000, 0x9fbfff).rom().region("user2", 0); map(0x9fc000, 0x9ffffd).ram().share("nvram"); map(0x9ffffe, 0x9fffff).w(FUNC(arcadia_amiga_state::arcadia_multibios_change_game)); @@ -231,7 +233,7 @@ void arcadia_amiga_state::arcadia_map(address_map &map) void arcadia_amiga_state::argh_map(address_map &map) { a500_mem(map); - map(0x800000, 0x97ffff).bankr("bank2").region("user3", 0); + map(0x800000, 0x97ffff).rom().region("user3", 0); // map(0x980000, 0x9fefff).rom().region("user3", 0); map(0x9ff000, 0x9fffff).ram().share("nvram"); map(0xf00000, 0xf7ffff).rom().region("user3", 0); @@ -468,7 +470,7 @@ ROM_END ROM_START( ar_dart2 ) ARCADIA_BIOS - ROM_REGION16_BE(0x200000, "user3", 0) + ROM_REGION16_BE(0x180000, "user3", 0) ROM_LOAD16_BYTE( "arcadia3.u10", 0x00000, 0x10000, CRC(7166c736) SHA1(9892725b4d0aac6486950f8153083ba3f6982ad8) ) ROM_LOAD16_BYTE( "arcadia3.u6", 0x00001, 0x10000, CRC(f226137e) SHA1(61540885ff83420f5adc1087547e0ece33383ffd) ) ROM_LOAD16_BYTE( "arcadia3.u11", 0x20000, 0x10000, CRC(5d9a7804) SHA1(acd8eb7fd28594e8008eb953f843a72f12782ea2) ) @@ -645,7 +647,7 @@ ROM_END ROM_START( ar_ninj ) ARCADIA_BIOS - ROM_REGION16_BE(0x200000, "user3", 0) + ROM_REGION16_BE(0x180000, "user3", 0) ROM_LOAD16_BYTE( "ninj_1h.bin", 0x00000, 0x10000, CRC(53b07b4d) SHA1(4852005adf60fe63f2da880dd32740d18fd31169) ) ROM_LOAD16_BYTE( "ninj_1l.bin", 0x00001, 0x10000, CRC(3337a6c1) SHA1(be9719f0cd5872b51f4c6d32fcac2638c0dedaf4) ) ROM_LOAD16_BYTE( "ninj_2h.bin", 0x20000, 0x10000, CRC(e28a5fa8) SHA1(150e26aea24706b72d2e6612280d5dddc527061b) ) @@ -663,7 +665,7 @@ ROM_END ROM_START( ar_ninj2 ) ARCADIA_BIOS - ROM_REGION16_BE(0x200000, "user3", 0) + ROM_REGION16_BE(0x180000, "user3", 0) ROM_LOAD16_BYTE( "arcadia5.u10", 0x00000, 0x10000, CRC(217cb8eb) SHA1(7cb1da4d5d5b5af5f42c10848c7535bdeebbcd94) ) ROM_LOAD16_BYTE( "arcadia5.u6", 0x00001, 0x10000, CRC(009bee8f) SHA1(ff61a0770643400ecddc70e603ca6589424b6831) ) ROM_LOAD16_BYTE( "arcadia5.u11", 0x20000, 0x10000, CRC(f5c84e48) SHA1(8149a225a406ffb7c9faaa48af4947c2f66f750d) ) @@ -687,7 +689,7 @@ ROM_END ROM_START( ar_rdwr ) ARCADIA_BIOS - ROM_REGION16_BE(0x200000, "user3", 0) + ROM_REGION16_BE(0x180000, "user3", 0) ROM_LOAD16_BYTE( "rdwr_1h.bin", 0x00000, 0x10000, CRC(f52cb704) SHA1(cce8c7484ae8c3a3d14b2e79a981780a277c9b1c) ) ROM_LOAD16_BYTE( "rdwr_1l.bin", 0x00001, 0x10000, CRC(fde0de6d) SHA1(7f62ce854a040775548c5ba3b05e6a4dcb0d7cfb) ) ROM_LOAD16_BYTE( "rdwr_2h.bin", 0x20000, 0x10000, CRC(8f3c1a2c) SHA1(e473e55457c04ebd597375e9936aeb0473507ed7) ) @@ -721,7 +723,7 @@ ROM_END ROM_START( ar_sdwr2 ) ARCADIA_BIOS - ROM_REGION16_BE(0x200000, "user3", 0) + ROM_REGION16_BE(0x180000, "user3", 0) ROM_LOAD16_BYTE( "arcadia1.u10", 0x00000, 0x10000, CRC(30949f1f) SHA1(270cd449f994eda76afd5532018bad636ac4cf68) ) ROM_LOAD16_BYTE( "arcadia1.u6", 0x00001, 0x10000, CRC(c760d1c4) SHA1(7d311e8b192e493da9501755e096599e1e8e8d3e) ) ROM_LOAD16_BYTE( "arcadia1.u11", 0x20000, 0x10000, CRC(d67ba564) SHA1(2afba72a77806e3925c9ca1e13c16c442a6cfc3a) ) diff --git a/src/mame/drivers/asteroid.cpp b/src/mame/drivers/asteroid.cpp index c02bdca7311..3762bca38ee 100644 --- a/src/mame/drivers/asteroid.cpp +++ b/src/mame/drivers/asteroid.cpp @@ -321,8 +321,8 @@ void asteroid_state::asteroid_map(address_map &map) { map.global_mask(0x7fff); map(0x0000, 0x01ff).ram(); - map(0x0200, 0x02ff).bankrw("ram1").share("ram1"); - map(0x0300, 0x03ff).bankrw("ram2").share("ram2"); + map(0x0200, 0x02ff).bankrw("ram1"); + map(0x0300, 0x03ff).bankrw("ram2"); map(0x2000, 0x2007).r(FUNC(asteroid_state::asteroid_IN0_r)).nopw(); // IN0 map(0x2400, 0x2407).r(FUNC(asteroid_state::asteroid_IN1_r)); // IN1 map(0x2800, 0x2803).r(FUNC(asteroid_state::asteroid_DSW1_r)).nopw(); // DSW1 @@ -333,7 +333,7 @@ void asteroid_state::asteroid_map(address_map &map) map(0x3a00, 0x3a00).w(FUNC(asteroid_state::asteroid_thump_w)); map(0x3c00, 0x3c07).w("audiolatch", FUNC(ls259_device::write_d7)); map(0x3e00, 0x3e00).w(FUNC(asteroid_state::asteroid_noise_reset_w)); - map(0x4000, 0x47ff).ram().share("dvg:vectorram").region("maincpu", 0x4000); + map(0x4000, 0x47ff).ram().share("dvg:vectorram"); map(0x5000, 0x57ff).rom(); // Vector ROM map(0x6800, 0x7fff).rom(); } @@ -343,8 +343,8 @@ void asteroid_state::astdelux_map(address_map &map) { map.global_mask(0x7fff); map(0x0000, 0x01ff).ram(); - map(0x0200, 0x02ff).bankrw("ram1").share("ram1"); - map(0x0300, 0x03ff).bankrw("ram2").share("ram2"); + map(0x0200, 0x02ff).bankrw("ram1"); + map(0x0300, 0x03ff).bankrw("ram2"); map(0x2000, 0x2007).r(FUNC(asteroid_state::asteroid_IN0_r)).nopw(); // IN0 map(0x2400, 0x2407).r(FUNC(asteroid_state::asteroid_IN1_r)).nopw(); // IN1 map(0x2800, 0x2803).r(FUNC(asteroid_state::asteroid_DSW1_r)); // DSW1 @@ -357,7 +357,7 @@ void asteroid_state::astdelux_map(address_map &map) map(0x3a00, 0x3a00).w(FUNC(asteroid_state::earom_control_w)); map(0x3c00, 0x3c07).w("audiolatch", FUNC(ls259_device::write_d7)); map(0x3e00, 0x3e00).w(FUNC(asteroid_state::asteroid_noise_reset_w)); - map(0x4000, 0x47ff).ram().share("dvg:vectorram").region("maincpu", 0x4000); + map(0x4000, 0x47ff).ram().share("dvg:vectorram"); map(0x4800, 0x57ff).rom(); // Vector ROM map(0x6000, 0x7fff).rom(); } @@ -376,7 +376,7 @@ void asteroid_state::llander_map(address_map &map) map(0x3400, 0x3400).w("watchdog", FUNC(watchdog_timer_device::reset_w)); map(0x3c00, 0x3c00).w(FUNC(asteroid_state::llander_sounds_w)); map(0x3e00, 0x3e00).w(FUNC(asteroid_state::llander_snd_reset_w)); - map(0x4000, 0x47ff).ram().share("dvg:vectorram").region("maincpu", 0x4000); + map(0x4000, 0x47ff).ram().share("dvg:vectorram"); map(0x4800, 0x5fff).rom(); // Vector ROM map(0x5800, 0x5800).nopw(); // INC access? map(0x6000, 0x7fff).rom(); diff --git a/src/mame/drivers/at.cpp b/src/mame/drivers/at.cpp index e1c1436c6aa..a9b79ec54e8 100644 --- a/src/mame/drivers/at.cpp +++ b/src/mame/drivers/at.cpp @@ -442,9 +442,7 @@ void at_state::init_at_common(int xmsbase) if (m_ram->size() > xmsbase) { offs_t ram_limit = 0x100000 + m_ram->size() - xmsbase; - space.install_read_bank(0x100000, ram_limit - 1, "bank1"); - space.install_write_bank(0x100000, ram_limit - 1, "bank1"); - membank("bank1")->set_base(m_ram->pointer() + xmsbase); + space.install_ram(0x100000, ram_limit - 1, m_ram->pointer() + xmsbase); } } @@ -463,8 +461,7 @@ void at_vrom_fix_state::machine_start() at_state::machine_start(); address_space& space = m_maincpu->space(AS_PROGRAM); - space.install_read_bank(0xc0000, 0xcffff, "vrom_bank"); - membank("vrom_bank")->set_base(machine().root_device().memregion("bios")->base()); + space.install_rom(0xc0000, 0xcffff, machine().root_device().memregion("bios")->base()); } void at_state::cfg_single_1200K(device_t *device) diff --git a/src/mame/drivers/atari400.cpp b/src/mame/drivers/atari400.cpp index ebb5c0739e2..29f28455d75 100644 --- a/src/mame/drivers/atari400.cpp +++ b/src/mame/drivers/atari400.cpp @@ -328,9 +328,6 @@ private: required_device<pia6821_device> m_pia; optional_device<dac_bit_interface> m_dac; required_memory_region m_region_maincpu; - memory_bank *m_0000 = nullptr; - memory_bank *m_8000 = nullptr; - memory_bank *m_a000 = nullptr; optional_device<a800_cart_slot_device> m_cart; optional_device<a800_cart_slot_device> m_cart2; @@ -1739,35 +1736,17 @@ void a400_state::setup_ram(int bank, uint32_t size) { case 0: // 0x0000-0x7fff ram_top = std::min(size, uint32_t(0x8000)) - 1; - m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, ram_top, "0000"); - m_0000 = membank("0000"); - m_0000->set_base(m_ram->pointer()); + m_maincpu->space(AS_PROGRAM).install_ram(0x0000, ram_top, m_ram->pointer()); break; case 1: // 0x8000-0x9fff ram_top = std::min(size, uint32_t(0xa000)) - 1; if (ram_top > 0x8000) - { - m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x8000, ram_top, "8000"); - m_8000 = membank("8000"); - m_8000->set_base(m_ram->pointer() + 0x8000); - } - else - { - m_8000 = nullptr; - } + m_maincpu->space(AS_PROGRAM).install_ram(0x8000, ram_top, m_ram->pointer() + 0x8000); break; case 2: // 0xa000-0xbfff ram_top = std::min(size, uint32_t(0xc000)) - 1; if (ram_top > 0xa000) - { - m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xa000, ram_top, "a000"); - m_a000 = membank("a000"); - m_a000->set_base(m_ram->pointer() + 0xa000); - } - else - { - m_a000 = nullptr; - } + m_maincpu->space(AS_PROGRAM).install_ram(0xa000, ram_top, m_ram->pointer() + 0xa000); break; } } diff --git a/src/mame/drivers/aussiebyte.cpp b/src/mame/drivers/aussiebyte.cpp index 2004e423783..f0b1502e1c9 100644 --- a/src/mame/drivers/aussiebyte.cpp +++ b/src/mame/drivers/aussiebyte.cpp @@ -48,7 +48,7 @@ void aussiebyte_state::mem_map(address_map &map) map(0x0000, 0x3fff).bankr("bankr0").bankw("bankw0"); map(0x4000, 0x7fff).bankrw("bank1"); map(0x8000, 0xbfff).bankrw("bank2"); - map(0xc000, 0xffff).bankrw("bank3"); + map(0xc000, 0xffff).ram(); } void aussiebyte_state::io_map(address_map &map) @@ -99,7 +99,7 @@ INPUT_PORTS_END ************************************************************/ void aussiebyte_state::port15_w(u8 data) { - membank("bankr0")->set_entry(m_port15); // point at ram + m_bankr0->set_entry(m_port15); // point at ram m_port15 = true; } @@ -175,34 +175,34 @@ void aussiebyte_state::port1a_w(u8 data) case 4: m_port1a = data*3+1; if (m_port15) - membank("bankr0")->set_entry(data*3+1); - membank("bankw0")->set_entry(data*3+1); - membank("bank1")->set_entry(data*3+2); - membank("bank2")->set_entry(data*3+3); + m_bankr0->set_entry(data*3+1); + m_bankw0->set_entry(data*3+1); + m_bank1->set_entry(data*3+2); + m_bank2->set_entry(data*3+3); break; case 5: m_port1a = 1; if (m_port15) - membank("bankr0")->set_entry(1); - membank("bankw0")->set_entry(1); - membank("bank1")->set_entry(2); - membank("bank2")->set_entry(13); + m_bankr0->set_entry(1); + m_bankw0->set_entry(1); + m_bank1->set_entry(2); + m_bank2->set_entry(13); break; case 6: m_port1a = 14; if (m_port15) - membank("bankr0")->set_entry(14); - membank("bankw0")->set_entry(14); - membank("bank1")->set_entry(15); - //membank("bank2")->set_entry(0); // open bus + m_bankr0->set_entry(14); + m_bankw0->set_entry(14); + m_bank1->set_entry(15); + //m_bank2->set_entry(0); // open bus break; case 7: m_port1a = 1; if (m_port15) - membank("bankr0")->set_entry(1); - membank("bankw0")->set_entry(1); - membank("bank1")->set_entry(4); - membank("bank2")->set_entry(13); + m_bankr0->set_entry(1); + m_bankw0->set_entry(1); + m_bank1->set_entry(4); + m_bank2->set_entry(13); break; } } @@ -412,8 +412,8 @@ QUICKLOAD_LOAD_MEMBER(aussiebyte_state::quickload_cb) /* RAM must be banked in */ m_port15 = true; // disable boot rom m_port1a = 4; - membank("bankr0")->set_entry(m_port1a); /* enable correct program bank */ - membank("bankw0")->set_entry(m_port1a); + m_bankr0->set_entry(m_port1a); /* enable correct program bank */ + m_bankw0->set_entry(m_port1a); /* Avoid loading a program if CP/M-80 is not in memory */ if ((prog_space.read_byte(0) != 0xc3) || (prog_space.read_byte(5) != 0xc3)) @@ -454,11 +454,10 @@ void aussiebyte_state::machine_reset() m_port1a = 1; m_alpha_address = 0; m_graph_address = 0; - membank("bankr0")->set_entry(16); // point at rom - membank("bankw0")->set_entry(1); // always write to ram - membank("bank1")->set_entry(2); - membank("bank2")->set_entry(3); - membank("bank3")->set_entry(0); + m_bankr0->set_entry(16); // point at rom + m_bankw0->set_entry(1); // always write to ram + m_bank1->set_entry(2); + m_bank2->set_entry(3); m_maincpu->reset(); } @@ -486,15 +485,12 @@ void aussiebyte_state::machine_start() // Main ram is divided into 16k blocks (0-15). The boot rom is block number 16. // For convenience, bank 0 is permanently assigned to C000-FFFF - u8 *main = memregion("roms")->base(); - u8 *ram = m_ram.get(); - - membank("bankr0")->configure_entries(0, 16, ram, 0x4000); - membank("bankw0")->configure_entries(0, 16, ram, 0x4000); - membank("bank1")->configure_entries(0, 16, ram, 0x4000); - membank("bank2")->configure_entries(0, 16, ram, 0x4000); - membank("bank3")->configure_entries(0, 1, ram, 0x4000); - membank("bankr0")->configure_entry(16, &main[0x0000]); + + m_bankr0->configure_entries(0, 16, m_p_mram, 0x4000); + m_bankw0->configure_entries(0, 16, m_p_mram, 0x4000); + m_bank1->configure_entries(0, 16, m_p_mram, 0x4000); + m_bank2->configure_entries(0, 16, m_p_mram, 0x4000); + m_bankr0->configure_entry(16, memregion("roms")->base()); } diff --git a/src/mame/drivers/b2m.cpp b/src/mame/drivers/b2m.cpp index 43af7e76820..23ade9eea09 100644 --- a/src/mame/drivers/b2m.cpp +++ b/src/mame/drivers/b2m.cpp @@ -41,11 +41,7 @@ Need a schematic so that the fdc could be repaired. /* Address maps */ void b2m_state::b2m_mem(address_map &map) { - map(0x0000, 0x27ff).bankrw("bank1"); - map(0x2800, 0x2fff).bankrw("bank2"); - map(0x3000, 0x6fff).bankrw("bank3"); - map(0x7000, 0xdfff).bankrw("bank4"); - map(0xe000, 0xffff).bankrw("bank5"); + // Dynamic, set with b2m_set_bank } void b2m_state::b2m_io(address_map &map) @@ -279,9 +275,9 @@ ROM_START( b2m ) ROM_END ROM_START( b2mrom ) - ROM_REGION( 0x12000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "bios2.rom", 0x00000, 0x2000, CRC(c22a98b7) SHA1(7de91e653bf4b191ded62cf21532578268e4a2c1) ) - ROM_LOAD( "ramdos.sys", 0x02000, 0x60c0, CRC(91ed6df0) SHA1(4fd040f2647a6b7930c330c75560a035027d0606) ) + ROM_REGION( 0x80c0, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "bios2.rom", 0x0000, 0x2000, CRC(c22a98b7) SHA1(7de91e653bf4b191ded62cf21532578268e4a2c1) ) + ROM_LOAD( "ramdos.sys", 0x2000, 0x60c0, CRC(91ed6df0) SHA1(4fd040f2647a6b7930c330c75560a035027d0606) ) ROM_END diff --git a/src/mame/drivers/beathead.cpp b/src/mame/drivers/beathead.cpp index 142766c28d8..f8b06b8c4bf 100644 --- a/src/mame/drivers/beathead.cpp +++ b/src/mame/drivers/beathead.cpp @@ -249,7 +249,7 @@ void beathead_state::coin_count_w(offs_t offset, uint32_t data) void beathead_state::main_map(address_map &map) { map(0x00000000, 0x0001ffff).ram().share("ram_base"); - map(0x01800000, 0x01bfffff).rom().region("user1", 0).share("rom_base"); + map(0x01800000, 0x01bfffff).rom().region("user1", 0); map(0x40000000, 0x400007ff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).umask32(0x000000ff); map(0x41000000, 0x41000000).rw(m_jsa, FUNC(atari_jsa_iii_device::main_response_r), FUNC(atari_jsa_iii_device::main_command_w)); map(0x41000100, 0x41000103).r(FUNC(beathead_state::interrupt_control_r)); diff --git a/src/mame/drivers/blitz68k.cpp b/src/mame/drivers/blitz68k.cpp index 2fdfb11ef41..e0b24ecdbd5 100644 --- a/src/mame/drivers/blitz68k.cpp +++ b/src/mame/drivers/blitz68k.cpp @@ -1012,7 +1012,7 @@ void blitz68k_state::cjffruit_map(address_map &map) map(0x8fc000, 0x8fc001).w(FUNC(blitz68k_state::cjffruit_leds3_w)).share("leds2"); map(0x8fe000, 0x8fe003).w(FUNC(blitz68k_state::blit_flags_w)); // flipx,y,solid,trans - map(0x8fe004, 0x8fe005).writeonly(); + map(0x8fe004, 0x8fe005).nopw(); map(0x8fe006, 0x8fe007).w(FUNC(blitz68k_state::crtc_lpen_w)); // 0x8fe006: 0->1, 0x8fe007: 1->0 map(0xc40000, 0xc40001).rw(FUNC(blitz68k_state::crtc_r), FUNC(blitz68k_state::crtc_w)); @@ -1112,7 +1112,7 @@ void blitz68k_state::deucesw2_map(address_map &map) map(0x89c000, 0x89c001).w(FUNC(blitz68k_state::deucesw2_leds3_w)).share("leds2"); map(0x89e000, 0x89e003).w(FUNC(blitz68k_state::blit_flags_w)); // flipx,y,solid,trans - map(0x89e004, 0x89e005).writeonly(); + map(0x89e004, 0x89e005).nopw(); map(0x89e006, 0x89e007).w(FUNC(blitz68k_state::crtc_lpen_w)); // 0x89e006: 0->1, 0x89e007: 1->0 map(0xc00000, 0xc00001).rw(FUNC(blitz68k_state::crtc_r), FUNC(blitz68k_state::crtc_w)); @@ -1288,7 +1288,7 @@ void blitz68k_state::hermit_map(address_map &map) map(0x9e8000, 0x9e8001).w(FUNC(blitz68k_state::hermit_leds2_w)).share("leds1"); map(0x9f0000, 0x9f0003).w(FUNC(blitz68k_state::blit_flags_w)); // flipx,y,solid,trans - map(0x9f0004, 0x9f0005).writeonly(); + map(0x9f0004, 0x9f0005).nopw(); map(0x9f0006, 0x9f0007).w(FUNC(blitz68k_state::crtc_lpen_w)); // 0x9f0006: 0->1, 0x9f0007: 1->0 map(0xb00000, 0xb00001).rw(FUNC(blitz68k_state::crtc_r), FUNC(blitz68k_state::crtc_w)); // triggered by MCU? diff --git a/src/mame/drivers/blmbycar.cpp b/src/mame/drivers/blmbycar.cpp index f713061b1e0..12e1ee5e1a4 100644 --- a/src/mame/drivers/blmbycar.cpp +++ b/src/mame/drivers/blmbycar.cpp @@ -114,10 +114,10 @@ void blmbycar_state::vram_w(offs_t offset, uint16_t data, uint16_t mem_mask) void blmbycar_state::common_map(address_map &map) { map(0x000000, 0x0fffff).rom(); - map(0x100000, 0x103fff).writeonly(); // ??? + map(0x100000, 0x103fff).writeonly().share("unk_100000"); // ??? map(0x104000, 0x105fff).ram().w(FUNC(blmbycar_state::vram_w<1>)).share("vram_1"); // Layer 1 map(0x106000, 0x107fff).ram().w(FUNC(blmbycar_state::vram_w<0>)).share("vram_0"); // Layer 0 - map(0x108000, 0x10bfff).writeonly(); // ??? + map(0x108000, 0x10bfff).writeonly().share("unk_108000"); // ??? map(0x10c000, 0x10c003).writeonly().share("scroll_1"); // Scroll 1 map(0x10c004, 0x10c007).writeonly().share("scroll_0"); // Scroll 0 map(0x200000, 0x203fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette").mirror(0x4000); // Palette @@ -156,7 +156,7 @@ void blmbycar_state::watrball_map(address_map &map) map(0x700006, 0x700007).nopr(); // read map(0x700008, 0x700009).r(FUNC(blmbycar_state::waterball_unk_r)); // 0x0008 must toggle - map(0x70000a, 0x70000b).writeonly(); // ?? busy + map(0x70000a, 0x70000b).nopw(); // ?? busy } void blmbycar_state::blmbycar_oki_map(address_map &map) diff --git a/src/mame/drivers/bmcbowl.cpp b/src/mame/drivers/bmcbowl.cpp index 79970bf864b..552dad12ad6 100644 --- a/src/mame/drivers/bmcbowl.cpp +++ b/src/mame/drivers/bmcbowl.cpp @@ -122,7 +122,7 @@ public: bmcbowl_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_stats_ram(*this, "nvram", 16), + m_stats_ram(*this, "nvram"), m_vid1(*this, "vid1"), m_vid2(*this, "vid2"), m_palette(*this, "palette"), diff --git a/src/mame/drivers/bnstars.cpp b/src/mame/drivers/bnstars.cpp index 1574a2b02c3..f1e7b8f3baf 100644 --- a/src/mame/drivers/bnstars.cpp +++ b/src/mame/drivers/bnstars.cpp @@ -106,14 +106,14 @@ class bnstars_state : public ms32_state public: bnstars_state(const machine_config &mconfig, device_type type, const char *tag) : ms32_state(mconfig, type, tag) - , m_ms32_tx0_ram(*this, "tx0_ram", 32) - , m_ms32_tx1_ram(*this, "tx1_ram", 32) - , m_ms32_bg0_ram(*this, "bg0_ram", 32) - , m_ms32_bg1_ram(*this, "bg1_ram", 32) - , m_ms32_roz0_ram(*this, "roz0_ram", 32) - , m_ms32_roz1_ram(*this, "roz1_ram", 32) + , m_ms32_tx0_ram(*this, "tx0_ram") + , m_ms32_tx1_ram(*this, "tx1_ram") + , m_ms32_bg0_ram(*this, "bg0_ram") + , m_ms32_bg1_ram(*this, "bg1_ram") + , m_ms32_roz0_ram(*this, "roz0_ram") + , m_ms32_roz1_ram(*this, "roz1_ram") , m_ms32_roz_ctrl(*this, "roz_ctrl.%u", 0) - , m_ms32_spram(*this, "spram", 32) + , m_ms32_spram(*this, "spram") , m_ms32_tx0_scroll(*this, "tx0_scroll") , m_ms32_bg0_scroll(*this, "bg0_scroll") , m_ms32_tx1_scroll(*this, "tx1_scroll") diff --git a/src/mame/drivers/btime.cpp b/src/mame/drivers/btime.cpp index 1a4498ab4ec..e892228c932 100644 --- a/src/mame/drivers/btime.cpp +++ b/src/mame/drivers/btime.cpp @@ -2165,8 +2165,7 @@ void btime_state::init_disco() void btime_state::init_cookrace() { - m_audiocpu->space(AS_PROGRAM).install_read_bank(0x0200, 0x0fff, "bank10"); - membank("bank10")->set_base(memregion("audiocpu")->base() + 0xe200); + m_audiocpu->space(AS_PROGRAM).install_rom(0x0200, 0x0fff, memregion("audiocpu")->base() + 0xe200); m_audio_nmi_enable_type = AUDIO_ENABLE_DIRECT; } @@ -2180,8 +2179,7 @@ void btime_state::init_wtennis() { m_maincpu->space(AS_PROGRAM).install_read_handler(0xc15f, 0xc15f, read8smo_delegate(*this, FUNC(btime_state::wtennis_reset_hack_r))); - m_audiocpu->space(AS_PROGRAM).install_read_bank(0x0200, 0x0fff, "bank10"); - membank("bank10")->set_base(memregion("audiocpu")->base() + 0xe200); + m_audiocpu->space(AS_PROGRAM).install_rom(0x0200, 0x0fff, memregion("audiocpu")->base() + 0xe200); m_audio_nmi_enable_type = AUDIO_ENABLE_AY8910; } diff --git a/src/mame/drivers/buggychl.cpp b/src/mame/drivers/buggychl.cpp index b474c67b9f7..4e625f56f3d 100644 --- a/src/mame/drivers/buggychl.cpp +++ b/src/mame/drivers/buggychl.cpp @@ -233,7 +233,7 @@ void buggychl_state::buggychl_map(address_map &map) map(0xd820, 0xd83f).ram(); // TODO map(0xd840, 0xd85f).writeonly().share("scrollv"); map(0xdb00, 0xdbff).writeonly().share("scrollh"); - map(0xdc04, 0xdc04).writeonly(); /* should be fg scroll */ + map(0xdc04, 0xdc04).nopw(); /* should be fg scroll */ map(0xdc06, 0xdc06).w(FUNC(buggychl_state::buggychl_bg_scrollx_w)); } diff --git a/src/mame/drivers/bw12.cpp b/src/mame/drivers/bw12.cpp index bc8caefa4f0..7a45b119eb2 100644 --- a/src/mame/drivers/bw12.cpp +++ b/src/mame/drivers/bw12.cpp @@ -45,22 +45,22 @@ void bw12_state::bankswitch() { address_space &program = m_maincpu->space(AS_PROGRAM); - switch (m_bank) + switch (m_curbank) { case 0: /* ROM */ - program.install_read_bank(0x0000, 0x7fff, "bank1"); + program.install_read_bank(0x0000, 0x7fff, m_bank); program.unmap_write(0x0000, 0x7fff); break; case 1: /* BK0 */ - program.install_readwrite_bank(0x0000, 0x7fff, "bank1"); + program.install_readwrite_bank(0x0000, 0x7fff, m_bank); break; case 2: /* BK1 */ case 3: /* BK2 */ if (m_ram->size() > 64*1024) { - program.install_readwrite_bank(0x0000, 0x7fff, "bank1"); + program.install_readwrite_bank(0x0000, 0x7fff, m_bank); } else { @@ -69,7 +69,7 @@ void bw12_state::bankswitch() break; } - membank("bank1")->set_entry(m_bank); + m_bank->set_entry(m_curbank); } void bw12_state::floppy_motor_on_off() @@ -97,13 +97,13 @@ TIMER_DEVICE_CALLBACK_MEMBER(bw12_state::floppy_motor_off_tick) WRITE_LINE_MEMBER(bw12_state::ls138_a0_w) { - m_bank = (m_bank & 0x02) | state; + m_curbank = (m_curbank & 0x02) | state; bankswitch(); } WRITE_LINE_MEMBER(bw12_state::ls138_a1_w) { - m_bank = (state << 1) | (m_bank & 0x01); + m_curbank = (state << 1) | (m_curbank & 0x01); bankswitch(); } @@ -135,7 +135,7 @@ uint8_t bw12_state::ls259_r(offs_t offset) void bw12_state::bw12_mem(address_map &map) { - map(0x0000, 0x7fff).bankrw("bank1"); + map(0x0000, 0x7fff).bankrw("bank"); map(0x8000, 0xf7ff).ram(); map(0xf800, 0xffff).ram().share("video_ram"); } @@ -438,12 +438,12 @@ WRITE_LINE_MEMBER( bw12_state::ay3600_data_ready_w ) void bw12_state::machine_start() { /* setup memory banking */ - membank("bank1")->configure_entry(0, m_rom->base()); - membank("bank1")->configure_entry(1, m_ram->pointer()); - membank("bank1")->configure_entries(2, 2, m_ram->pointer() + 0x10000, 0x8000); + m_bank->configure_entry(0, m_rom->base()); + m_bank->configure_entry(1, m_ram->pointer()); + m_bank->configure_entries(2, 2, m_ram->pointer() + 0x10000, 0x8000); /* register for state saving */ - save_item(NAME(m_bank)); + save_item(NAME(m_curbank)); save_item(NAME(m_pit_out2)); save_item(NAME(m_key_data)); save_item(NAME(m_key_sin)); diff --git a/src/mame/drivers/bwidow.cpp b/src/mame/drivers/bwidow.cpp index c7197bca545..6cd1b95cde3 100644 --- a/src/mame/drivers/bwidow.cpp +++ b/src/mame/drivers/bwidow.cpp @@ -407,7 +407,7 @@ void bwidow_state::irq_ack_w(uint8_t data) void bwidow_state::bwidow_map(address_map &map) { map(0x0000, 0x07ff).ram(); - map(0x2000, 0x27ff).ram().share("avg:vectorram").region("maincpu", 0x2000); + map(0x2000, 0x27ff).ram().share("avg:vectorram"); map(0x2800, 0x5fff).rom(); map(0x6000, 0x67ff).rw("pokey1", FUNC(pokey_device::read), FUNC(pokey_device::write)); map(0x6800, 0x6fff).rw("pokey2", FUNC(pokey_device::read), FUNC(pokey_device::write)); @@ -436,7 +436,7 @@ void bwidow_state::bwidowp_map(address_map &map) map(0x2800, 0x2800).w("avg", FUNC(avg_device::reset_w)); map(0x3000, 0x3000).w("watchdog", FUNC(watchdog_timer_device::reset_w)); map(0x3800, 0x3800).w(FUNC(bwidow_state::bwidow_misc_w)); /* coin counters, leds */ - map(0x4000, 0x47ff).ram().share("avg:vectorram").region("maincpu", 0x4000); + map(0x4000, 0x47ff).ram().share("avg:vectorram"); map(0x4800, 0x6fff).rom(); map(0x6000, 0x6000).w(FUNC(bwidow_state::irq_ack_w)); /* interrupt acknowledge */ map(0x8000, 0x803f).w(FUNC(bwidow_state::earom_write)); @@ -462,7 +462,7 @@ void bwidow_state::spacduel_map(address_map &map) map(0x0f00, 0x0f3f).w(FUNC(bwidow_state::earom_write)); map(0x1000, 0x10ff).rw("pokey1", FUNC(pokey_device::read), FUNC(pokey_device::write)); map(0x1400, 0x14ff).rw("pokey2", FUNC(pokey_device::read), FUNC(pokey_device::write)); - map(0x2000, 0x27ff).ram().share("avg:vectorram").region("maincpu", 0x2000); + map(0x2000, 0x27ff).ram().share("avg:vectorram"); map(0x2800, 0x3fff).rom(); map(0x4000, 0xffff).rom(); } diff --git a/src/mame/drivers/bzone.cpp b/src/mame/drivers/bzone.cpp index ccfefcb64e4..9f278f4fa91 100644 --- a/src/mame/drivers/bzone.cpp +++ b/src/mame/drivers/bzone.cpp @@ -348,10 +348,20 @@ void bzone_state::bzone_map(address_map &map) map(0x1820, 0x182f).rw("pokey", FUNC(pokey_device::read), FUNC(pokey_device::write)); map(0x1840, 0x1840).w(FUNC(bzone_state::bzone_sounds_w)); map(0x1860, 0x187f).w(m_mathbox, FUNC(mathbox_device::go_w)); - map(0x2000, 0x2fff).ram().share("avg:vectorram").region("maincpu", 0x2000); + map(0x2000, 0x2fff).ram().share("avg:vectorram"); map(0x3000, 0x7fff).rom(); } +void bzone_state::bradley_map(address_map &map) +{ + bzone_map(map); + map(0x0400, 0x07ff).ram(); + map(0x1808, 0x1808).portr("1808"); + map(0x1809, 0x1809).portr("1809"); + map(0x180a, 0x180a).r(FUNC(bzone_state::analog_data_r)); + map(0x1848, 0x1850).w(FUNC(bzone_state::analog_select_w)); +} + void redbaron_state::redbaron_map(address_map &map) { map.global_mask(0x7fff); @@ -373,7 +383,7 @@ void redbaron_state::redbaron_map(address_map &map) map(0x1810, 0x181f).rw("pokey", FUNC(pokey_device::read), FUNC(pokey_device::write)); map(0x1820, 0x185f).rw(FUNC(redbaron_state::earom_read), FUNC(redbaron_state::earom_write)); map(0x1860, 0x187f).nopr().w("mathbox", FUNC(mathbox_device::go_w)); - map(0x2000, 0x2fff).ram().share("avg:vectorram").region("maincpu", 0x2000); + map(0x2000, 0x2fff).ram().share("avg:vectorram"); map(0x3000, 0x7fff).rom(); } @@ -600,6 +610,12 @@ void bzone_state::bzone(machine_config &config) bzone_audio(config); } +void bzone_state::bradley(machine_config &config) +{ + bzone(config); + m_maincpu->set_addrmap(AS_PROGRAM, &bzone_state::bradley_map); +} + void redbaron_state::redbaron(machine_config &config) { bzone_base(config); @@ -890,18 +906,6 @@ void bzone_state::analog_select_w(offs_t offset, uint8_t data) } -void bzone_state::init_bradley() -{ - address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_ram(0x400, 0x7ff); - space.install_read_port(0x1808, 0x1808, "1808"); - space.install_read_port(0x1809, 0x1809, "1809"); - space.install_read_handler(0x180a, 0x180a, read8smo_delegate(*this, FUNC(bzone_state::analog_data_r))); - space.install_write_handler(0x1848, 0x1850, write8sm_delegate(*this, FUNC(bzone_state::analog_select_w))); -} - - - /************************************* * * Game drivers @@ -911,6 +915,6 @@ void bzone_state::init_bradley() GAMEL(1980, bzone, 0, bzone, bzone, bzone_state, empty_init, ROT0, "Atari", "Battle Zone (rev 2)", MACHINE_SUPPORTS_SAVE, layout_bzone ) GAMEL(1980, bzonea, bzone, bzone, bzone, bzone_state, empty_init, ROT0, "Atari", "Battle Zone (rev 1)", MACHINE_SUPPORTS_SAVE, layout_bzone ) GAMEL(1980, bzonec, bzone, bzone, bzone, bzone_state, empty_init, ROT0, "Atari", "Battle Zone (cocktail)", MACHINE_SUPPORTS_SAVE|MACHINE_NO_COCKTAIL, layout_bzone ) -GAME( 1980, bradley, 0, bzone, bradley, bzone_state, init_bradley, ROT0, "Atari", "Bradley Trainer", MACHINE_SUPPORTS_SAVE ) +GAME( 1980, bradley, 0, bradley, bradley, bzone_state, empty_init, ROT0, "Atari", "Bradley Trainer", MACHINE_SUPPORTS_SAVE ) GAMEL(1980, redbaron, 0, redbaron, redbaron, redbaron_state, empty_init, ROT0, "Atari", "Red Baron (Revised Hardware)", MACHINE_SUPPORTS_SAVE, layout_redbaron ) GAMEL(1980, redbarona, redbaron, redbaron, redbaron, redbaron_state, empty_init, ROT0, "Atari", "Red Baron", MACHINE_SUPPORTS_SAVE, layout_redbaron ) diff --git a/src/mame/drivers/c128.cpp b/src/mame/drivers/c128.cpp index 71d24a0ceb6..220740ba0d8 100644 --- a/src/mame/drivers/c128.cpp +++ b/src/mame/drivers/c128.cpp @@ -69,7 +69,7 @@ public: m_from(*this, "from"), m_rom(*this, M8502_TAG), m_charom(*this, "charom"), - m_color_ram(*this, "color_ram"), + m_color_ram(*this, "color_ram", 0x800, ENDIANNESS_LITTLE), m_row(*this, "ROW%u", 0), m_k(*this, "K%u", 0), m_lock(*this, "LOCK"), @@ -113,7 +113,7 @@ public: required_device<generic_slot_device> m_from; required_memory_region m_rom; required_memory_region m_charom; - optional_shared_ptr<uint8_t> m_color_ram; + memory_share_creator<uint8_t> m_color_ram; required_ioport_array<8> m_row; required_ioport_array<3> m_k; required_ioport m_lock; @@ -1565,9 +1565,6 @@ void c128d81_iec_devices(device_slot_interface &device) void c128_state::machine_start() { - // allocate memory - m_color_ram.allocate(0x800); - // initialize memory uint8_t data = 0xff; diff --git a/src/mame/drivers/c64.cpp b/src/mame/drivers/c64.cpp index cf09c234d03..9083442a636 100644 --- a/src/mame/drivers/c64.cpp +++ b/src/mame/drivers/c64.cpp @@ -64,7 +64,7 @@ public: m_user(*this, PET_USER_PORT_TAG), m_ram(*this, RAM_TAG), m_cassette(*this, PET_DATASSETTE_PORT_TAG), - m_color_ram(*this, "color_ram"), + m_color_ram(*this, "color_ram", 0x400, ENDIANNESS_LITTLE), m_row(*this, "ROW%u", 0), m_lock(*this, "LOCK"), m_loram(1), @@ -93,7 +93,7 @@ public: required_device<pet_user_port_device> m_user; required_device<ram_device> m_ram; optional_device<pet_datassette_port_device> m_cassette; - optional_shared_ptr<uint8_t> m_color_ram; + memory_share_creator<uint8_t> m_color_ram; optional_ioport_array<8> m_row; optional_ioport m_lock; @@ -1409,9 +1409,6 @@ void c64_state::machine_start() } m_charom = memregion("charom")->base(); - // allocate memory - m_color_ram.allocate(0x400); - // initialize memory uint8_t data = 0xff; diff --git a/src/mame/drivers/cabaret.cpp b/src/mame/drivers/cabaret.cpp index 3b3094d794d..d78aeb07817 100644 --- a/src/mame/drivers/cabaret.cpp +++ b/src/mame/drivers/cabaret.cpp @@ -201,7 +201,7 @@ void cabaret_state::ppi2_c_w(uint8_t data) void cabaret_state::cabaret_map(address_map &map) { map(0x00000, 0x0efff).rom(); - map(0x0f000, 0x0ffff).ram().region("maincpu", 0xf000); + map(0x0f000, 0x0ffff).ram(); } void cabaret_state::cabaret_portmap(address_map &map) diff --git a/src/mame/drivers/calchase.cpp b/src/mame/drivers/calchase.cpp index 3b71cc8ef9f..ded34063bcb 100644 --- a/src/mame/drivers/calchase.cpp +++ b/src/mame/drivers/calchase.cpp @@ -407,7 +407,7 @@ void calchase_state::calchase_map(address_map &map) { map(0x00000000, 0x0009ffff).ram(); map(0x000a0000, 0x000bffff).rw("vga", FUNC(trident_vga_device::mem_r), FUNC(trident_vga_device::mem_w)); // VGA VRAM - map(0x000c0000, 0x000c7fff).ram().region("video_bios", 0); + map(0x000c0000, 0x000c7fff).rom().region("video_bios", 0); map(0x000c8000, 0x000cffff).noprw(); //map(0x000d0000, 0x000d0003).ram(); // XYLINX - Sincronus serial communication map(0x000d0004, 0x000d0005).r(FUNC(calchase_state::calchase_iocard1_r)); diff --git a/src/mame/drivers/calorie.cpp b/src/mame/drivers/calorie.cpp index 78c2e54ebe2..439cf8d90a8 100644 --- a/src/mame/drivers/calorie.cpp +++ b/src/mame/drivers/calorie.cpp @@ -186,7 +186,6 @@ uint32_t calorie_state::screen_update_calorie(screen_device &screen, bitmap_ind1 m_fg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); } - for (x = 0x400; x >= 0; x -= 4) { int xpos, ypos, tileno, color, flipx, flipy; @@ -287,7 +286,7 @@ void calorie_state::calorie_map(address_map &map) void calorie_state::decrypted_opcodes_map(address_map &map) { map(0x0000, 0x7fff).rom().share("decrypted_opcodes"); - map(0x8000, 0xbfff).rom(); + map(0x8000, 0xbfff).rom().region("maincpu", 0x8000); map(0xc000, 0xcfff).ram().share("ram"); } diff --git a/src/mame/drivers/cbm2.cpp b/src/mame/drivers/cbm2.cpp index ae2bbae0d14..75d408303bf 100644 --- a/src/mame/drivers/cbm2.cpp +++ b/src/mame/drivers/cbm2.cpp @@ -93,9 +93,9 @@ public: m_basic(*this, "basic"), m_kernal(*this, "kernal"), m_charom(*this, "charom"), - m_buffer_ram(*this, "buffer_ram"), - m_extbuf_ram(*this, "extbuf_ram"), - m_video_ram(*this, "video_ram"), + m_buffer_ram(*this, "buffer_ram", 0x800, ENDIANNESS_LITTLE), + m_extbuf_ram(*this, "extbuf_ram", 0x800, ENDIANNESS_LITTLE), + m_video_ram(*this, "video_ram", 0x800, ENDIANNESS_LITTLE), m_pa(*this, "PA%u", 0), m_pb(*this, "PB%u", 0), m_lock(*this, "LOCK"), @@ -132,9 +132,9 @@ public: required_memory_region m_basic; required_memory_region m_kernal; required_memory_region m_charom; - optional_shared_ptr<uint8_t> m_buffer_ram; - optional_shared_ptr<uint8_t> m_extbuf_ram; - optional_shared_ptr<uint8_t> m_video_ram; + memory_share_creator<uint8_t> m_buffer_ram; + memory_share_creator<uint8_t> m_extbuf_ram; + memory_share_creator<uint8_t> m_video_ram; required_ioport_array<8> m_pa; required_ioport_array<8> m_pb; required_ioport m_lock; @@ -259,7 +259,7 @@ public: : cbm2_state(mconfig, type, tag), m_pla2(*this, PLA2_TAG), m_vic(*this, MOS6569_TAG), - m_color_ram(*this, "color_ram"), + m_color_ram(*this, "color_ram", 0x400, ENDIANNESS_LITTLE), m_statvid(1), m_vicdotsel(1), m_vicbnksel(0x03) @@ -267,7 +267,7 @@ public: required_device<pla_device> m_pla2; required_device<mos6566_device> m_vic; - optional_shared_ptr<uint8_t> m_color_ram; + memory_share_creator<uint8_t> m_color_ram; DECLARE_MACHINE_START( p500 ); DECLARE_MACHINE_START( p500_ntsc ); @@ -2062,10 +2062,6 @@ void cbm2_state::device_timer(emu_timer &timer, device_timer_id id, int param, v MACHINE_START_MEMBER( cbm2_state, cbm2 ) { - // allocate memory - m_video_ram.allocate(m_video_ram_size); - m_buffer_ram.allocate(0x800); - // allocate timer int todclk = (m_ntsc ? 60 : 50) * 2; @@ -2115,9 +2111,6 @@ MACHINE_START_MEMBER( cbm2_state, cbm2_pal ) MACHINE_START_MEMBER( cbm2_state, cbm2x_ntsc ) { - // allocate memory - m_extbuf_ram.allocate(0x800); - MACHINE_START_CALL_MEMBER(cbm2_ntsc); } @@ -2128,9 +2121,6 @@ MACHINE_START_MEMBER( cbm2_state, cbm2x_ntsc ) MACHINE_START_MEMBER( cbm2_state, cbm2x_pal ) { - // allocate memory - m_extbuf_ram.allocate(0x800); - MACHINE_START_CALL_MEMBER(cbm2_pal); } @@ -2145,9 +2135,6 @@ MACHINE_START_MEMBER( p500_state, p500 ) MACHINE_START_CALL_MEMBER(cbm2); - // allocate memory - m_color_ram.allocate(0x400); - // state saving save_item(NAME(m_statvid)); save_item(NAME(m_vicdotsel)); diff --git a/src/mame/drivers/cham24.cpp b/src/mame/drivers/cham24.cpp index e8dd7e34f75..dcb1247683a 100644 --- a/src/mame/drivers/cham24.cpp +++ b/src/mame/drivers/cham24.cpp @@ -94,6 +94,7 @@ public: void cham24_set_mirroring( int mirroring ); void cham24(machine_config &config); void cham24_map(address_map &map); + void cham24_ppu_map(address_map &map); }; @@ -229,6 +230,12 @@ void cham24_state::cham24_map(address_map &map) map(0x8000, 0xffff).rom().w(FUNC(cham24_state::cham24_mapper_w)); } +void cham24_state::cham24_ppu_map(address_map &map) +{ + map(0x0000, 0x1fff).bankr("bank1"); + map(0x2000, 0x3eff).rw(FUNC(cham24_state::nt_r), FUNC(cham24_state::nt_w)); +} + static INPUT_PORTS_START( cham24 ) PORT_START("P1") /* IN0 */ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) @@ -272,7 +279,6 @@ void cham24_state::machine_reset() memcpy(&dst[0xc000], &src[0x0f8000], 0x4000); /* uses 8K swapping, all ROM!*/ - m_ppu->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, "bank1"); membank("bank1")->set_base(memregion("gfx1")->base()); m_nt_page[0] = m_nt_ram.get(); @@ -302,6 +308,7 @@ void cham24_state::cham24(machine_config &config) screen.set_screen_update("ppu", FUNC(ppu2c0x_device::screen_update)); PPU_2C02(config, m_ppu); + m_ppu->set_addrmap(0, &cham24_state::cham24_ppu_map); m_ppu->set_cpu_tag(m_maincpu); m_ppu->int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); diff --git a/src/mame/drivers/chinagat.cpp b/src/mame/drivers/chinagat.cpp index 377d928252b..e5726b28b30 100644 --- a/src/mame/drivers/chinagat.cpp +++ b/src/mame/drivers/chinagat.cpp @@ -525,7 +525,7 @@ void chinagat_state::main_map(address_map &map) map(0x2800, 0x2fff).ram().w(FUNC(chinagat_state::ddragon_bgvideoram_w)).share("bgvideoram"); map(0x3000, 0x317f).w(m_palette, FUNC(palette_device::write8)).share("palette"); map(0x3400, 0x357f).w(m_palette, FUNC(palette_device::write8_ext)).share("palette_ext"); - map(0x3800, 0x397f).bankw("bank3").share("spriteram"); + map(0x3800, 0x397f).ram().share("spriteram"); map(0x3e00, 0x3e04).w(FUNC(chinagat_state::interrupt_w)); map(0x3e06, 0x3e06).writeonly().share("scrolly_lo"); map(0x3e07, 0x3e07).writeonly().share("scrollx_lo"); diff --git a/src/mame/drivers/chsuper.cpp b/src/mame/drivers/chsuper.cpp index 6593e92101f..b7711633c8a 100644 --- a/src/mame/drivers/chsuper.cpp +++ b/src/mame/drivers/chsuper.cpp @@ -215,7 +215,7 @@ void chsuper_state::chsuper_prg_map(address_map &map) { map(0x00000, 0x0efff).rom(); map(0x00000, 0x01fff).w(FUNC(chsuper_state::chsuper_vram_w)); - map(0x0f000, 0x0ffff).ram().region("maincpu", 0xf000); + map(0x0f000, 0x0ffff).ram(); map(0xfb000, 0xfbfff).ram().share("nvram"); } diff --git a/src/mame/drivers/cninja.cpp b/src/mame/drivers/cninja.cpp index b066e74301d..c203b6da185 100644 --- a/src/mame/drivers/cninja.cpp +++ b/src/mame/drivers/cninja.cpp @@ -145,6 +145,14 @@ void cninja_state::cninjabl_map(address_map &map) map(0x1b4000, 0x1b4001).w(m_spriteram[0], FUNC(buffered_spriteram16_device::write)); /* DMA flag */ } +void cninja_state::cninjabl2_map(address_map &map) +{ + cninja_map(map); + + map(0x180000, 0x18ffff).ram(); + map(0x1b4000, 0x1b4001).r(FUNC(cninja_state::cninjabl2_sprite_dma_r)); +} + uint16_t cninja_state::edrandy_protection_region_8_146_r(offs_t offset) { int real_address = 0x1a0000 + (offset *2); @@ -909,6 +917,7 @@ void cninja_state::stoneage(machine_config &config) void cninja_state::cninjabl2(machine_config &config) { stoneage(config); + m_maincpu->set_addrmap(AS_PROGRAM, &cninja_state::cninjabl2_map); m_audiocpu->set_addrmap(AS_PROGRAM, &cninja_state::cninjabl2_s_map); m_screen->set_screen_update(FUNC(cninja_state::screen_update_cninjabl2)); @@ -2169,9 +2178,6 @@ ROM_END void cninja_state::init_cninjabl2() { - m_maincpu->space(AS_PROGRAM).install_ram(0x180000, 0x18ffff); - m_maincpu->space(AS_PROGRAM).install_read_handler(0x1b4000, 0x1b4001, read16smo_delegate(*this, FUNC(cninja_state::cninjabl2_sprite_dma_r))); - m_okibank->configure_entries(0, 8, memregion("oki2")->base(), 0x10000); } diff --git a/src/mame/drivers/combatsc.cpp b/src/mame/drivers/combatsc.cpp index b0c537a6bc7..f937640435e 100644 --- a/src/mame/drivers/combatsc.cpp +++ b/src/mame/drivers/combatsc.cpp @@ -240,7 +240,7 @@ void combatsc_state::combatscb_bankselect_w(address_space &space, uint8_t data) } else { - space.install_read_bank(0x4000, 0x7fff, "bank1"); /* banked ROM */ + space.install_read_bank(0x4000, 0x7fff, membank("bank1")); /* banked ROM */ space.unmap_write(0x4000, 0x7fff); /* banked ROM */ } } diff --git a/src/mame/drivers/compis.cpp b/src/mame/drivers/compis.cpp index e1402cf5e43..2a72bbf4bf1 100644 --- a/src/mame/drivers/compis.cpp +++ b/src/mame/drivers/compis.cpp @@ -694,15 +694,15 @@ void compis_state::machine_start() switch (m_ram->size()) { case 256*1024: - m_maincpu->space(AS_PROGRAM).install_ram(0x20000, 0x3ffff, nullptr); + m_maincpu->space(AS_PROGRAM).install_ram(0x20000, 0x3ffff, m_ram->pointer()); break; case 512*1024: - m_maincpu->space(AS_PROGRAM).install_ram(0x20000, 0x7ffff, nullptr); + m_maincpu->space(AS_PROGRAM).install_ram(0x20000, 0x7ffff, m_ram->pointer()); break; case 768*1024: - m_maincpu->space(AS_PROGRAM).install_ram(0x20000, 0xbffff, nullptr); + m_maincpu->space(AS_PROGRAM).install_ram(0x20000, 0xbffff, m_ram->pointer()); break; } diff --git a/src/mame/drivers/coolridr.cpp b/src/mame/drivers/coolridr.cpp index cbb54e200b3..d54b9c5d15a 100644 --- a/src/mame/drivers/coolridr.cpp +++ b/src/mame/drivers/coolridr.cpp @@ -320,7 +320,7 @@ public: m_workram_h(*this, "workrah"), m_sound_dma(*this, "sound_dma"), m_soundram(*this, "soundram%u", 1U), - m_rom(*this, "share1"), + m_rom(*this, "maincpu"), m_compressedgfx(*this, "compressedgfx"), m_io_config(*this, "CONFIG"), m_gfxdecode(*this, "gfxdecode"), @@ -358,7 +358,7 @@ public: required_shared_ptr<uint32_t> m_workram_h; required_shared_ptr<uint32_t> m_sound_dma; required_shared_ptr_array<uint16_t, 2> m_soundram; - required_shared_ptr<uint32_t> m_rom; + required_region_ptr<uint32_t> m_rom; required_region_ptr<uint8_t> m_compressedgfx; required_ioport m_io_config; required_device<gfxdecode_device> m_gfxdecode; @@ -2779,7 +2779,7 @@ void coolridr_state::dma_w(address_space &space, offs_t offset, uint32_t data, u void coolridr_state::system_h1_map(address_map &map) { - map(0x00000000, 0x001fffff).rom().share("share1").nopw(); + map(0x00000000, 0x001fffff).rom().nopw(); map(0x01000000, 0x01ffffff).rom().region("gfx_data", 0x0000000); map(0x03f40000, 0x03f4ffff).ram().share("txt_vram");//text tilemap + "lineram" @@ -2790,7 +2790,7 @@ void coolridr_state::system_h1_map(address_map &map) map(0x0400001c, 0x0400001f).w(FUNC(coolridr_state::fb_data_w)); map(0x06000000, 0x060fffff).ram().share("workrah"); - map(0x20000000, 0x201fffff).rom().share("share1"); + map(0x20000000, 0x201fffff).rom().region("maincpu", 0); map(0x60000000, 0x600003ff).nopw(); } diff --git a/src/mame/drivers/crshrace.cpp b/src/mame/drivers/crshrace.cpp index 250efe14715..387ad13de5e 100644 --- a/src/mame/drivers/crshrace.cpp +++ b/src/mame/drivers/crshrace.cpp @@ -167,7 +167,7 @@ void crshrace_state::main_map(address_map &map) map(0xfff00a, 0xfff00b).portr("DSW1"); map(0xfff00e, 0xfff00f).portr("P3"); map(0xfff020, 0xfff03f).w(m_k053936, FUNC(k053936_device::ctrl_w)); - map(0xfff044, 0xfff047).writeonly(); // ??? moves during race + map(0xfff044, 0xfff047).nopw(); // ??? moves during race } void crshrace_state::sound_map(address_map &map) diff --git a/src/mame/drivers/cv1k.cpp b/src/mame/drivers/cv1k.cpp index 552016f3d9b..adbb12d4135 100644 --- a/src/mame/drivers/cv1k.cpp +++ b/src/mame/drivers/cv1k.cpp @@ -194,7 +194,7 @@ public: m_serflash(*this, "game"), m_eeprom(*this, "eeprom"), m_ram(*this, "mainram"), - m_rombase(*this, "rombase"), + m_rombase(*this, "maincpu"), m_blitrate(*this, "BLITRATE"), m_eepromout(*this, "EEPROMOUT"), m_idleramoffs(0), @@ -207,7 +207,7 @@ public: required_device<rtc9701_device> m_eeprom; required_shared_ptr<uint64_t> m_ram; - required_shared_ptr<uint64_t> m_rombase; + required_region_ptr<uint64_t> m_rombase; uint8_t flash_io_r(offs_t offset); void flash_io_w(offs_t offset, uint8_t data); @@ -342,7 +342,7 @@ void cv1k_state::serial_rtc_eeprom_w(offs_t offset, uint8_t data) void cv1k_state::cv1k_map(address_map &map) { - map(0x00000000, 0x003fffff).rom().region("maincpu", 0).nopw().share("rombase"); // mmmbanc writes here on startup for some reason.. + map(0x00000000, 0x003fffff).rom().region("maincpu", 0).nopw(); // mmmbanc writes here on startup for some reason.. map(0x0c000000, 0x0c7fffff).ram().share("mainram");// work RAM map(0x10000000, 0x10000007).rw(FUNC(cv1k_state::flash_io_r), FUNC(cv1k_state::flash_io_w)); map(0x10400000, 0x10400007).w("ymz770", FUNC(ymz770_device::write)); @@ -353,7 +353,7 @@ void cv1k_state::cv1k_map(address_map &map) void cv1k_state::cv1k_d_map(address_map &map) { - map(0x00000000, 0x003fffff).rom().region("maincpu", 0).nopw().share("rombase"); // mmmbanc writes here on startup for some reason.. + map(0x00000000, 0x003fffff).rom().region("maincpu", 0).nopw(); // mmmbanc writes here on startup for some reason.. map(0x0c000000, 0x0cffffff).ram().share("mainram"); // work RAM map(0x10000000, 0x10000007).rw(FUNC(cv1k_state::flash_io_r), FUNC(cv1k_state::flash_io_w)); map(0x10400000, 0x10400007).w("ymz770", FUNC(ymz770_device::write)); diff --git a/src/mame/drivers/dccons.cpp b/src/mame/drivers/dccons.cpp index d89964525ae..eef412c89a1 100644 --- a/src/mame/drivers/dccons.cpp +++ b/src/mame/drivers/dccons.cpp @@ -379,7 +379,7 @@ void dc_cons_state::dc_flash_w(offs_t offset, uint8_t data) void dc_cons_state::dc_map(address_map &map) { map(0x00000000, 0x001fffff).rom().nopw(); // BIOS - map(0x00200000, 0x0021ffff).rw(FUNC(dc_cons_state::dc_flash_r), FUNC(dc_cons_state::dc_flash_w)).region("dcflash", 0x20000); + map(0x00200000, 0x0021ffff).rw(FUNC(dc_cons_state::dc_flash_r), FUNC(dc_cons_state::dc_flash_w)); map(0x005f6800, 0x005f69ff).rw(FUNC(dc_cons_state::dc_sysctrl_r), FUNC(dc_cons_state::dc_sysctrl_w)); map(0x005f6c00, 0x005f6cff).m(m_maple, FUNC(maple_dc_device::amap)); map(0x005f7000, 0x005f701f).rw(m_ata, FUNC(ata_interface_device::cs1_r), FUNC(ata_interface_device::cs1_w)).umask64(0x0000ffff0000ffff); diff --git a/src/mame/drivers/ddenlovr.cpp b/src/mame/drivers/ddenlovr.cpp index 8e59a701fa2..7f3d3e7b2a7 100644 --- a/src/mame/drivers/ddenlovr.cpp +++ b/src/mame/drivers/ddenlovr.cpp @@ -2031,7 +2031,7 @@ void ddenlovr_state::quiz365_map(address_map &map) map(0x200c02, 0x200c03).r(FUNC(ddenlovr_state::quiz365_protection_r)); // Protection map(0x200e0a, 0x200e0d).w(FUNC(ddenlovr_state::quiz365_protection_w)); // Protection -// map(0x201000, 0x2017ff).writeonly(); // ? +// map(0x201000, 0x2017ff).nopw(); // ? map(0x300201, 0x300201).w(FUNC(ddenlovr_state::ddenlovr_select2_w)); map(0x300203, 0x300203).w(FUNC(ddenlovr_state::quiz365_coincounter_w)); // Coin Counters + more stuff written on startup @@ -2085,7 +2085,7 @@ void ddenlovr_state::ddenlovj_map(address_map &map) map(0x000000, 0x07ffff).rom(); // ROM map(0x200000, 0x2003ff).w(FUNC(ddenlovr_state::ddenlovr_palette_w)).umask16(0x00ff); -// map(0x201000, 0x2017ff).writeonly(); // ? B0 on startup, then 00 +// map(0x201000, 0x2017ff).nopq(); // ? B0 on startup, then 00 map(0x300040, 0x300047).w(FUNC(ddenlovr_state::ddenlovr_palette_base_w)).umask16(0x00ff); map(0x300048, 0x30004f).w(FUNC(ddenlovr_state::ddenlovr_palette_mask_w)).umask16(0x00ff); @@ -2255,7 +2255,7 @@ void ddenlovr_state::nettoqc_map(address_map &map) map(0x200000, 0x2003ff).w(FUNC(ddenlovr_state::ddenlovr_palette_w)).umask16(0x00ff); map(0x200c02, 0x200c03).r(FUNC(ddenlovr_state::nettoqc_protection1_r)); // Protection 1 map(0x200e0a, 0x200e0d).writeonly().share("protection1"); // "" - map(0x201000, 0x2017ff).writeonly(); // ? + map(0x201000, 0x2017ff).nopw(); // ? map(0x300040, 0x300047).w(FUNC(ddenlovr_state::ddenlovr_palette_base_w)).umask16(0x00ff); map(0x300048, 0x30004f).w(FUNC(ddenlovr_state::ddenlovr_palette_mask_w)).umask16(0x00ff); @@ -2310,7 +2310,7 @@ void ddenlovr_state::ultrchmp_map(address_map &map) map(0xd00c02, 0xd00c03).r(FUNC(ddenlovr_state::nettoqc_protection1_r)); // Protection 1 map(0xd00e0a, 0xd00e0d).writeonly().share("protection1"); // "" - map(0xd01000, 0xd017ff).writeonly(); // ? + map(0xd01000, 0xd017ff).nopw(); // ? map(0xe00040, 0xe00047).w(FUNC(ddenlovr_state::ddenlovr_palette_base_w)).umask16(0x00ff); map(0xe00048, 0xe0004f).w(FUNC(ddenlovr_state::ddenlovr_palette_mask_w)).umask16(0x00ff); @@ -2520,7 +2520,7 @@ void mmpanic_state::mmpanic_map(address_map &map) map(0x0000, 0x5fff).rom(); // ROM map(0x0051, 0x0051).r(FUNC(mmpanic_state::magic_r)); // ? map(0x6000, 0x6fff).ram(); // RAM - map(0x7000, 0x7fff).bankrw("bank2"); // RAM (Banked) + map(0x7000, 0x7fff).ram(); // RAM (Banked) map(0x8000, 0xffff).bankr("bank1"); // ROM (Banked) map(0x8000, 0x81ff).w(FUNC(mmpanic_state::ddenlovr_palette_w)); } diff --git a/src/mame/drivers/ddragon.cpp b/src/mame/drivers/ddragon.cpp index 3de10c7f244..155b040507d 100644 --- a/src/mame/drivers/ddragon.cpp +++ b/src/mame/drivers/ddragon.cpp @@ -471,7 +471,7 @@ void ddragon_state::ddragon_base_map(address_map &map) map(0x1000, 0x11ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); map(0x1200, 0x13ff).ram().w(m_palette, FUNC(palette_device::write8_ext)).share("palette_ext"); map(0x1800, 0x1fff).ram().w(FUNC(ddragon_state::ddragon_fgvideoram_w)).share("fgvideoram"); - map(0x2000, 0x21ff).rw(FUNC(ddragon_state::ddragon_comram_r), FUNC(ddragon_state::ddragon_comram_w)).share("comram").mirror(0x0600); + map(0x2000, 0x21ff).rw(FUNC(ddragon_state::ddragon_comram_r), FUNC(ddragon_state::ddragon_comram_w)).mirror(0x0600); map(0x2800, 0x2fff).ram().share("spriteram"); map(0x3000, 0x37ff).ram().w(FUNC(ddragon_state::ddragon_bgvideoram_w)).share("bgvideoram"); map(0x3800, 0x3800).portr("P1"); @@ -517,7 +517,7 @@ void ddragon_state::dd2_map(address_map &map) { map(0x0000, 0x17ff).ram(); map(0x1800, 0x1fff).ram().w(FUNC(ddragon_state::ddragon_fgvideoram_w)).share("fgvideoram"); - map(0x2000, 0x21ff).rw(FUNC(ddragon_state::ddragon_comram_r), FUNC(ddragon_state::ddragon_comram_w)).share("comram").mirror(0x0600); + map(0x2000, 0x21ff).rw(FUNC(ddragon_state::ddragon_comram_r), FUNC(ddragon_state::ddragon_comram_w)).mirror(0x0600); map(0x2800, 0x2fff).ram().share("spriteram"); map(0x3000, 0x37ff).ram().w(FUNC(ddragon_state::ddragon_bgvideoram_w)).share("bgvideoram"); map(0x3800, 0x3800).portr("P1"); diff --git a/src/mame/drivers/deadang.cpp b/src/mame/drivers/deadang.cpp index edef6c2e8a2..9b4d3d55eea 100644 --- a/src/mame/drivers/deadang.cpp +++ b/src/mame/drivers/deadang.cpp @@ -72,17 +72,17 @@ void deadang_state::main_map(address_map &map) map(0x00000, 0x037ff).ram(); map(0x03800, 0x03fff).ram().share("spriteram"); map(0x04000, 0x04fff).ram().share("share1"); - map(0x05000, 0x05fff).writeonly(); + map(0x05000, 0x05fff).nopw(); map(0x06000, 0x0600f).rw(m_seibu_sound, FUNC(seibu_sound_device::main_r), FUNC(seibu_sound_device::main_w)).umask16(0x00ff); - map(0x06010, 0x07fff).writeonly(); + map(0x06010, 0x07fff).nopw(); map(0x08000, 0x087ff).w(FUNC(deadang_state::text_w)).share("videoram"); - map(0x08800, 0x0bfff).writeonly(); + map(0x08800, 0x0bfff).nopw(); map(0x0a000, 0x0a001).portr("P1_P2"); map(0x0a002, 0x0a003).portr("DSW"); map(0x0c000, 0x0cfff).w(m_palette, FUNC(palette_device::write16)).share("palette"); - map(0x0d000, 0x0dfff).writeonly(); + map(0x0d000, 0x0dfff).nopw(); map(0x0e000, 0x0e0ff).ram().share("scroll_ram"); - map(0x0e100, 0x0ffff).writeonly(); + map(0x0e100, 0x0ffff).nopw(); map(0xc0000, 0xfffff).rom(); } @@ -92,16 +92,16 @@ void popnrun_state::popnrun_main_map(address_map &map) map(0x03c00, 0x03dff).ram().share("spriteram"); map(0x03e00, 0x03fff).ram(); map(0x04000, 0x04fff).ram().share("share1"); - map(0x05000, 0x05fff).writeonly(); + map(0x05000, 0x05fff).nopw(); map(0x06000, 0x0600f).rw(m_seibu_sound, FUNC(seibu_sound_device::main_r), FUNC(seibu_sound_device::main_w)).umask16(0x00ff); - map(0x06010, 0x07fff).writeonly(); + map(0x06010, 0x07fff).nopw(); map(0x08000, 0x08fff).ram().w(FUNC(popnrun_state::popnrun_text_w)).share("videoram"); map(0x0a000, 0x0a001).portr("P1_P2"); map(0x0a002, 0x0a003).portr("DSW"); map(0x0c000, 0x0cfff).w(m_palette, FUNC(palette_device::write16)).share("palette"); - map(0x0d000, 0x0dfff).writeonly(); + map(0x0d000, 0x0dfff).nopw(); map(0x0e000, 0x0e0ff).ram().share("scroll_ram"); - map(0x0e100, 0x0ffff).writeonly(); + map(0x0e100, 0x0ffff).nopw(); map(0xc0000, 0xfffff).rom(); } diff --git a/src/mame/drivers/dec0.cpp b/src/mame/drivers/dec0.cpp index b320fac8a5e..9750b38a139 100644 --- a/src/mame/drivers/dec0.cpp +++ b/src/mame/drivers/dec0.cpp @@ -456,6 +456,15 @@ void dec0_state::dec0_map(address_map &map) map(0xffc000, 0xffc7ff).ram().share("spriteram"); } +void dec0_state::ffantasybl_map(address_map &map) +{ + dec0_map(map); + + map(0x0024c880, 0x0024cbff).ram(); // what is this? layer 3-related?? + map(0x00242024, 0x00242025).r(FUNC(dec0_state::ffantasybl_242024_r)); + map(0x00ff87ee, 0x00ff87ef).portr("VBLANK"); +} + void dec0_state::dec0_tb_map(address_map &map) { dec0_map(map); @@ -2134,10 +2143,11 @@ void dec0_state::hippodrm(machine_config &config) } void dec0_state::ffantasybl(machine_config &config) - { dec0(config); + m_maincpu->set_addrmap(AS_PROGRAM, &dec0_state::ffantasybl_map); + // H6280(config, m_subcpu, XTAL(21'477'272) / 16); // m_subcpu->set_addrmap(AS_PROGRAM, &dec0_state::hippodrm_sub_map); // m_subcpu->add_route(ALL_OUTPUTS, "mono", 0); // internal sound unused @@ -4122,14 +4132,6 @@ uint16_t dec0_state::ffantasybl_242024_r() return 0xffff; } -void dec0_state::init_ffantasybl() -{ - m_maincpu->space(AS_PROGRAM).install_ram(0x24c880, 0x24cbff); // what is this? layer 3-related?? - - m_maincpu->space(AS_PROGRAM).install_read_handler(0x00242024, 0x00242025, read16smo_delegate(*this, FUNC(dec0_state::ffantasybl_242024_r))); - m_maincpu->space(AS_PROGRAM).install_read_port(0x00ff87ee, 0x00ff87ef, "VBLANK"); -} - /******************************************************************************/ // YEAR, NAME, PARENT, MACHINE, INPUT, STATE/DEVICE, INIT, MONITOR,COMPANY, FULLNAME, FLAGS @@ -4171,7 +4173,7 @@ GAME( 1988, drgninjab, baddudes, drgninjab, drgninja, dec0_state, init_drgni // this is a common bootleg board GAME( 1989, midresb, midres, midresb, midresb, dec0_state, init_midresb, ROT0, "bootleg", "Midnight Resistance (bootleg with 68705)", MACHINE_SUPPORTS_SAVE ) // need to hook up 68705? (probably unused) GAME( 1989, midresbj, midres, midresbj, midresb, dec0_state, init_midresb, ROT0, "bootleg", "Midnight Resistance (Joystick bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, ffantasybl, hippodrm, ffantasybl, ffantasybl, dec0_state, init_ffantasybl, ROT0, "bootleg", "Fighting Fantasy (bootleg with 68705)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // 68705 not dumped, might be the same as midresb +GAME( 1989, ffantasybl, hippodrm, ffantasybl, ffantasybl, dec0_state, empty_init, ROT0, "bootleg", "Fighting Fantasy (bootleg with 68705)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // 68705 not dumped, might be the same as midresb GAME( 1988, drgninjab2, baddudes, drgninjab, drgninja, dec0_state, init_drgninja, ROT0, "bootleg", "Dragonninja (bootleg with 68705)", MACHINE_SUPPORTS_SAVE ) // is this the same board as above? (region warning hacked to World, but still shows Japanese text), 68705 dumped but not hooked up // these are different to the above but quite similar to each other diff --git a/src/mame/drivers/dec8.cpp b/src/mame/drivers/dec8.cpp index e443f17e22a..902278757d0 100644 --- a/src/mame/drivers/dec8.cpp +++ b/src/mame/drivers/dec8.cpp @@ -573,7 +573,7 @@ void dec8_state::cobra_map(address_map &map) map(0x2000, 0x27ff).ram().w(FUNC(dec8_state::dec8_videoram_w)).share("videoram"); map(0x2800, 0x2fff).ram().share("spriteram"); map(0x3000, 0x31ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8)).share("palette"); - map(0x3200, 0x37ff).writeonly(); /* Unused */ + map(0x3200, 0x37ff).nopw(); /* Unused */ map(0x3800, 0x3800).portr("IN0"); /* Player 1 */ map(0x3801, 0x3801).portr("IN1"); /* Player 2 */ map(0x3802, 0x3802).portr("DSW0"); /* Dip 1 */ diff --git a/src/mame/drivers/decocass.cpp b/src/mame/drivers/decocass.cpp index 43327afaf76..cfce798e848 100644 --- a/src/mame/drivers/decocass.cpp +++ b/src/mame/drivers/decocass.cpp @@ -122,6 +122,13 @@ void decocass_state::decocass_map(address_map &map) map(0xf000, 0xffff).rom(); } +void decocass_state::decocrom_map(address_map &map) +{ + decocass_map(map); + map(0x6000, 0xafff).bankr("bank1").w(FUNC(decocass_state::decocass_de0091_w)); + map(0xe900, 0xe900).w(FUNC(decocass_state::decocass_e900_w)); +} + void decocass_state::decocass_sound_map(address_map &map) { map(0x0000, 0x0fff).ram(); @@ -2073,15 +2080,10 @@ void decocass_state::init_decocrom() init_decocass(); /* convert charram to a banked ROM */ - m_maincpu->space(AS_PROGRAM).install_read_bank(0x6000, 0xafff, "bank1"); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x6000, 0xafff, write8sm_delegate(*this, FUNC(decocass_state::decocass_de0091_w))); membank("bank1")->configure_entry(0, m_charram); membank("bank1")->configure_entry(1, memregion("user3")->base()); membank("bank1")->configure_entry(2, memregion("user3")->base()+0x5000); membank("bank1")->set_entry(0); - - /* install the bank selector */ - m_maincpu->space(AS_PROGRAM).install_write_handler(0xe900, 0xe900, write8smo_delegate(*this, FUNC(decocass_state::decocass_e900_w))); } uint8_t decocass_state::cdsteljn_input_r(offs_t offset) diff --git a/src/mame/drivers/dgn_beta.cpp b/src/mame/drivers/dgn_beta.cpp index 161ed880f78..ca131c75f3e 100644 --- a/src/mame/drivers/dgn_beta.cpp +++ b/src/mame/drivers/dgn_beta.cpp @@ -173,7 +173,6 @@ void dgn_beta_state::dgnbeta_map(address_map &map) map(0xFE00, 0xFE0F).rw(FUNC(dgn_beta_state::dgn_beta_page_r), FUNC(dgn_beta_state::dgn_beta_page_w)); map(0xfe10, 0xfEff).noprw(); map(0xFF00, 0xFFFF).bankrw("bank17"); - } diff --git a/src/mame/drivers/dgpix.cpp b/src/mame/drivers/dgpix.cpp index e06bdcb99b2..e571ec9a838 100644 --- a/src/mame/drivers/dgpix.cpp +++ b/src/mame/drivers/dgpix.cpp @@ -359,7 +359,7 @@ void dgpix_state::mem_map(address_map &map) map(0x40000000, 0x4003ffff).rw(FUNC(dgpix_state::vram_r), FUNC(dgpix_state::vram_w)); map(0xe0000000, 0xe1ffffff).rw(FUNC(dgpix_state::flash_r), FUNC(dgpix_state::flash_w)); map(0xe2000000, 0xe3ffffff).rw(FUNC(dgpix_state::flash_r), FUNC(dgpix_state::flash_w)); - map(0xffc00000, 0xffffffff).rom().region("flash", 0x1c00000).share("nvram"); + map(0xffc00000, 0xffffffff).rom().region("flash", 0x1c00000); } void dgpix_state::io_map(address_map &map) diff --git a/src/mame/drivers/diverboy.cpp b/src/mame/drivers/diverboy.cpp index 4f456743112..1cc743beea6 100644 --- a/src/mame/drivers/diverboy.cpp +++ b/src/mame/drivers/diverboy.cpp @@ -177,8 +177,8 @@ void diverboy_state::diverboy_map(address_map &map) map(0x180008, 0x180009).portr("COINS"); // map(0x18000a, 0x18000b).nopr(); // map(0x18000c, 0x18000d).nopw(); - map(0x320000, 0x3207ff).writeonly(); /* ?? */ - map(0x322000, 0x3227ff).writeonly(); /* ?? */ + map(0x320000, 0x3207ff).nopw(); /* ?? */ + map(0x322000, 0x3227ff).nopw(); /* ?? */ // map(0x340000, 0x340001).nopw(); // map(0x340002, 0x340003).nopw(); } diff --git a/src/mame/drivers/djboy.cpp b/src/mame/drivers/djboy.cpp index acdefe1c530..01eff54e7cb 100644 --- a/src/mame/drivers/djboy.cpp +++ b/src/mame/drivers/djboy.cpp @@ -206,9 +206,7 @@ void djboy_state::mastercpu_am(address_map &map) map(0x8000, 0xafff).bankr("master_bank_l"); map(0xb000, 0xbfff).rw(m_pandora, FUNC(kaneko_pandora_device::spriteram_r), FUNC(kaneko_pandora_device::spriteram_w)); map(0xc000, 0xdfff).bankr("master_bank"); - map(0xe000, 0xefff).ram().share("share1"); - map(0xf000, 0xf7ff).ram(); - map(0xf800, 0xffff).ram(); + map(0xe000, 0xffff).ram().share("share1"); } void djboy_state::mastercpu_port_am(address_map &map) diff --git a/src/mame/drivers/dkong.cpp b/src/mame/drivers/dkong.cpp index 3d8c7c68ec3..7d65ba631be 100644 --- a/src/mame/drivers/dkong.cpp +++ b/src/mame/drivers/dkong.cpp @@ -530,7 +530,7 @@ MACHINE_RESET_MEMBER(dkong_state,dkong) MACHINE_RESET_MEMBER(dkong_state,ddk) { - dk_braze_a15(!membank("bank1")->entry()); + dk_braze_a15(!m_bank1->entry()); } MACHINE_RESET_MEMBER(dkong_state,strtheat) @@ -540,9 +540,9 @@ MACHINE_RESET_MEMBER(dkong_state,strtheat) MACHINE_RESET_CALL_MEMBER(dkong); /* The initial state of the counter is 0x08 */ - membank("bank1")->configure_entries(0, 4, &ROM[0x10000], 0x4000); + m_bank1->configure_entries(0, 4, &ROM[0x10000], 0x4000); m_decrypt_counter = 0x08; - membank("bank1")->set_entry(0); + m_bank1->set_entry(0); } MACHINE_RESET_MEMBER(dkong_state,drakton) @@ -552,9 +552,9 @@ MACHINE_RESET_MEMBER(dkong_state,drakton) MACHINE_RESET_CALL_MEMBER(dkong); /* The initial state of the counter is 0x09 */ - membank("bank1")->configure_entries(0, 4, &ROM[0x10000], 0x4000); + m_bank1->configure_entries(0, 4, &ROM[0x10000], 0x4000); m_decrypt_counter = 0x09; - membank("bank1")->set_entry(1); + m_bank1->set_entry(1); } @@ -649,10 +649,10 @@ uint8_t dkong_state::epos_decrypt_rom(offs_t offset) switch(m_decrypt_counter) { - case 0x08: membank("bank1")->set_entry(0); break; - case 0x09: membank("bank1")->set_entry(1); break; - case 0x0A: membank("bank1")->set_entry(2); break; - case 0x0B: membank("bank1")->set_entry(3); break; + case 0x08: m_bank1->set_entry(0); break; + case 0x09: m_bank1->set_entry(1); break; + case 0x0A: m_bank1->set_entry(2); break; + case 0x0B: m_bank1->set_entry(3); break; default: logerror("Invalid counter = %02X\n",m_decrypt_counter); break; @@ -1619,8 +1619,8 @@ uint8_t dkong_state::braze_eeprom_r() WRITE_LINE_MEMBER(dkong_state::dk_braze_a15) { - membank("bank1")->set_entry(state & 0x01); - membank("bank2")->set_entry(state & 0x01); + m_bank1->set_entry(state & 0x01); + m_bank2->set_entry(state & 0x01); } void dkong_state::dk_braze_a15_w(uint8_t data) @@ -3576,7 +3576,7 @@ void dkong_state::init_drakton() {7,1,4,0,3,6,2,5}, }; - m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, "bank1" ); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, m_bank1 ); /* While the PAL supports up to 16 decryption methods, only four are actually used in the PAL. Therefore, we'll take a little @@ -3598,7 +3598,7 @@ void dkong_state::init_strtheat() {6,3,4,1,0,7,2,5}, }; - m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, "bank1" ); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, m_bank1 ); /* While the PAL supports up to 16 decryption methods, only four are actually used in the PAL. Therefore, we'll take a little @@ -3617,15 +3617,15 @@ void dkong_state::dk_braze_decrypt() { m_decrypted = std::make_unique<uint8_t[]>(0x10000); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x5fff, "bank1"); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0xffff, "bank2"); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x5fff, m_bank1); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0xffff, m_bank2); braze_decrypt_rom(m_decrypted.get()); - membank("bank1")->configure_entries(0, 2, m_decrypted.get(), 0x8000); - membank("bank1")->set_entry(0); - membank("bank2")->configure_entries(0, 2, m_decrypted.get(), 0x8000); - membank("bank2")->set_entry(0); + m_bank1->configure_entries(0, 2, m_decrypted.get(), 0x8000); + m_bank1->set_entry(0); + m_bank2->configure_entries(0, 2, m_decrypted.get(), 0x8000); + m_bank2->set_entry(0); } void dkong_state::init_dkonghs() diff --git a/src/mame/drivers/dreamwld.cpp b/src/mame/drivers/dreamwld.cpp index 896deba394c..0f386dfe0a2 100644 --- a/src/mame/drivers/dreamwld.cpp +++ b/src/mame/drivers/dreamwld.cpp @@ -120,10 +120,10 @@ public: dreamwld_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_spriteram(*this, "spriteram") - , m_vram(*this, "vram_%u", 0U, u8(32)) + , m_vram(*this, "vram_%u", 0U) , m_vregs(*this, "vregs") , m_workram(*this, "workram") - , m_lineram(*this, "lineram", 32) + , m_lineram(*this, "lineram") , m_spritelut(*this, "spritelut") , m_okibank(*this, "oki%ubank", 1) , m_dsw(*this, "DSW") diff --git a/src/mame/drivers/ec184x.cpp b/src/mame/drivers/ec184x.cpp index 03949a4a4d1..b79b2b61923 100644 --- a/src/mame/drivers/ec184x.cpp +++ b/src/mame/drivers/ec184x.cpp @@ -136,8 +136,7 @@ void ec184x_state::memboard_w(offs_t offset, uint8_t data) for (int i = 0; i < 4; i++) m_memory.enable[i] &= 0xfb; // enable read access - membank("bank10")->set_base(m_ram->pointer() + offset * EC1841_MEMBOARD_SIZE); - program.install_read_bank(0, EC1841_MEMBOARD_SIZE - 1, "bank10"); + program.install_rom(0, EC1841_MEMBOARD_SIZE - 1, m_ram->pointer() + offset * EC1841_MEMBOARD_SIZE); LOG("ec1841_memboard_w map_read(%d)\n", offset); } @@ -146,8 +145,7 @@ void ec184x_state::memboard_w(offs_t offset, uint8_t data) for (int i = 0; i < 4; i++) m_memory.enable[i] &= 0xf7; // enable write access - membank("bank20")->set_base(m_ram->pointer() + offset * EC1841_MEMBOARD_SIZE); - program.install_write_bank(0, EC1841_MEMBOARD_SIZE - 1, "bank20"); + program.install_writeonly(0, EC1841_MEMBOARD_SIZE - 1, m_ram->pointer() + offset * EC1841_MEMBOARD_SIZE); LOG("ec1841_memboard_w map_write(%d)\n", offset); } @@ -158,8 +156,7 @@ void ec184x_state::init_ec1840() { address_space &program = m_maincpu->space(AS_PROGRAM); - program.install_readwrite_bank(0, m_ram->size()-1, "bank10"); - membank("bank10")->set_base(m_ram->pointer()); + program.install_ram(0, m_ram->size()-1, m_ram->pointer()); } void ec184x_state::init_ec1841() @@ -169,20 +166,13 @@ void ec184x_state::init_ec1841() m_memory.boards = m_ram->size() / EC1841_MEMBOARD_SIZE; if (m_memory.boards > 4) m_memory.boards = 4; - program.install_read_bank(0, EC1841_MEMBOARD_SIZE-1, "bank10"); - program.install_write_bank(0, EC1841_MEMBOARD_SIZE-1, "bank20"); - - membank("bank10")->set_base(m_ram->pointer()); - membank("bank20")->set_base(m_ram->pointer()); + program.install_ram(0, EC1841_MEMBOARD_SIZE-1, m_ram->pointer()); // 640K configuration is special -- 512K board mapped at 0 + 128K board mapped at 512K // XXX verify this was actually the case if (m_ram->size() == 640 * 1024) { - program.install_read_bank(EC1841_MEMBOARD_SIZE, m_ram->size() - 1, "bank11"); - program.install_write_bank(EC1841_MEMBOARD_SIZE, m_ram->size() - 1, "bank21"); - membank("bank11")->set_base(m_ram->pointer() + EC1841_MEMBOARD_SIZE); - membank("bank21")->set_base(m_ram->pointer() + EC1841_MEMBOARD_SIZE); + program.install_ram(EC1841_MEMBOARD_SIZE, m_ram->size() - 1, m_ram->pointer() + EC1841_MEMBOARD_SIZE); } } diff --git a/src/mame/drivers/elf.cpp b/src/mame/drivers/elf.cpp index 217a754324c..8f1ac6d11fc 100644 --- a/src/mame/drivers/elf.cpp +++ b/src/mame/drivers/elf.cpp @@ -80,7 +80,7 @@ void elf2_state::elf2_mem(address_map &map) { map.unmap_value_high(); map.global_mask(0xff); - map(0x0000, 0x00ff).bankrw("bank1"); + // Ram is added dynamically } void elf2_state::elf2_io(address_map &map) @@ -212,10 +212,8 @@ void elf2_state::machine_start() m_led_h->rbi_w(1); /* setup memory banking */ - program.install_read_bank(0x0000, 0x00ff, "bank1"); + program.install_rom(0x0000, 0x00ff, m_ram->pointer()); program.install_write_handler(0x0000, 0x00ff, write8sm_delegate(*this, FUNC(elf2_state::memory_w))); - membank("bank1")->configure_entry(0, m_ram->pointer()); - membank("bank1")->set_entry(0); /* register for state saving */ save_item(NAME(m_data)); diff --git a/src/mame/drivers/emu68k.cpp b/src/mame/drivers/emu68k.cpp index f4deb4ebf30..8a4eb6367f0 100644 --- a/src/mame/drivers/emu68k.cpp +++ b/src/mame/drivers/emu68k.cpp @@ -63,7 +63,7 @@ void emu68k_state::proteus1_map(address_map &map) map(0x000000, 0x01ffff).rom().region("program", 0); map(0x600080, 0x600083).rw("lcdc", FUNC(hd44780_device::read), FUNC(hd44780_device::write)).umask16(0x00ff); map(0x600100, 0x60012f).rw(m_mfp, FUNC(mc68901_device::read), FUNC(mc68901_device::write)).umask16(0x00ff); - map(0x800000, 0x8003ff).writeonly(); // ??? + map(0x800000, 0x8003ff).nopw(); // ??? map(0xffc000, 0xffffff).ram(); } @@ -72,7 +72,7 @@ void emu68k_state::proteusxr_map(address_map &map) map(0x000000, 0x01ffff).rom().region("program", 0); map(0x400000, 0x400001).nopw(); // ??? map(0x700000, 0x700003).rw("lcdc", FUNC(hd44780_device::read), FUNC(hd44780_device::write)).umask16(0x00ff); - map(0x800000, 0x8003ff).writeonly(); // ??? + map(0x800000, 0x8003ff).nopw(); // ??? map(0x900000, 0x90002f).rw(m_mfp, FUNC(mc68901_device::read), FUNC(mc68901_device::write)).umask16(0x00ff); map(0xa00000, 0xa00001).nopr(); // watchdog? map(0xb00000, 0xb00001).nopw(); // ??? @@ -84,7 +84,7 @@ void emu68k_state::vintkeys_map(address_map &map) map(0x000000, 0x03ffff).rom().region("program", 0); map(0x600080, 0x600083).rw("lcdc", FUNC(hd44780_device::read), FUNC(hd44780_device::write)).umask16(0x00ff); map(0x600100, 0x60012f).rw(m_mfp, FUNC(mc68901_device::read), FUNC(mc68901_device::write)).umask16(0x00ff); - map(0x800000, 0x8003ff).writeonly(); // ??? + map(0x800000, 0x8003ff).nopw(); // ??? map(0xffc000, 0xffffff).ram(); } @@ -93,7 +93,7 @@ void emu68k_state::phatt_map(address_map &map) map(0x000000, 0x07ffff).rom().region("program", 0); map(0x600080, 0x600083).rw("lcdc", FUNC(hd44780_device::read), FUNC(hd44780_device::write)).umask16(0x00ff); map(0x600100, 0x60012f).rw(m_mfp, FUNC(mc68901_device::read), FUNC(mc68901_device::write)).umask16(0x00ff); - map(0x800000, 0x8003ff).writeonly(); // ??? + map(0x800000, 0x8003ff).nopw(); // ??? map(0xffc000, 0xffffff).ram(); } diff --git a/src/mame/drivers/eolith16.cpp b/src/mame/drivers/eolith16.cpp index d3ad8c11532..a857294be28 100644 --- a/src/mame/drivers/eolith16.cpp +++ b/src/mame/drivers/eolith16.cpp @@ -28,7 +28,7 @@ public: eolith16_state(const machine_config &mconfig, device_type type, const char *tag) : eolith_state(mconfig, type, tag) , m_special_io(*this, "SPECIAL") - , m_vram(*this, "vram", 16) + , m_vram(*this, "vram") , m_vrambank(*this, "vrambank") { } diff --git a/src/mame/drivers/exidy.cpp b/src/mame/drivers/exidy.cpp index 0ffecf4aa16..4f69a08d194 100644 --- a/src/mame/drivers/exidy.cpp +++ b/src/mame/drivers/exidy.cpp @@ -1730,8 +1730,7 @@ void exidy_state::init_phantoma() m_color_latch[0] = 0x09; /* the ROM is actually mapped high */ - m_maincpu->space(AS_PROGRAM).install_read_bank(0xf800, 0xffff, "bank1"); - membank("bank1")->set_base(memregion("maincpu")->base() + 0xf800); + m_maincpu->space(AS_PROGRAM).install_rom(0xf800, 0xffff, memregion("maincpu")->base() + 0xf800); } diff --git a/src/mame/drivers/exidy440.cpp b/src/mame/drivers/exidy440.cpp index d7ae59f1a2f..ca2185b56f1 100644 --- a/src/mame/drivers/exidy440.cpp +++ b/src/mame/drivers/exidy440.cpp @@ -306,7 +306,7 @@ void exidy440_state::exidy440_bank_select(uint8_t bank) if (bank == 0 && m_bank != 0) m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0x7fff, read8sm_delegate(*this, FUNC(exidy440_state::showdown_bank0_r))); else if (bank != 0 && m_bank == 0) - m_maincpu->space(AS_PROGRAM).install_read_bank(0x4000, 0x7fff, "bank1"); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x4000, 0x7fff, membank("bank1")); } /* select the bank and update the bank pointer */ diff --git a/src/mame/drivers/exp85.cpp b/src/mame/drivers/exp85.cpp index 465e6b6e022..a2dadcd4bb0 100644 --- a/src/mame/drivers/exp85.cpp +++ b/src/mame/drivers/exp85.cpp @@ -167,11 +167,7 @@ DEVICE_INPUT_DEFAULTS_END void exp85_state::machine_start() { - address_space &program = m_maincpu->space(AS_PROGRAM); - /* setup memory banking */ - program.install_read_bank(0x0000, 0x07ff, "bank1"); - program.unmap_write(0x0000, 0x07ff); membank("bank1")->configure_entry(0, m_rom->base() + 0xf000); membank("bank1")->configure_entry(1, m_rom->base()); membank("bank1")->set_entry(0); diff --git a/src/mame/drivers/famibox.cpp b/src/mame/drivers/famibox.cpp index 5dbb7e399ba..636fe3fe8d0 100644 --- a/src/mame/drivers/famibox.cpp +++ b/src/mame/drivers/famibox.cpp @@ -120,6 +120,7 @@ private: void famicombox_bankswitch(uint8_t bank); void famicombox_reset(); void famibox_map(address_map &map); + void famibox_ppu_map(address_map &map); }; /****************************************************** @@ -388,6 +389,12 @@ void famibox_state::famibox_map(address_map &map) map(0xc000, 0xffff).bankr("cpubank2"); } +void famibox_state::famibox_ppu_map(address_map &map) +{ + map(0x0000, 0x1fff).bankr("ppubank1"); + map(0x2000, 0x3eff).rw(FUNC(famibox_state::famibox_nt_r), FUNC(famibox_state::famibox_nt_w)); +} + /****************************************************** Inputs @@ -510,12 +517,8 @@ void famibox_state::machine_start() m_nt_page[2] = m_nt_ram.get() + 0x800; m_nt_page[3] = m_nt_ram.get() + 0xc00; - m_ppu->space(AS_PROGRAM).install_readwrite_handler(0x2000, 0x3eff, read8sm_delegate(*this, FUNC(famibox_state::famibox_nt_r)), write8sm_delegate(*this, FUNC(famibox_state::famibox_nt_w))); - m_ppu->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, "ppubank1"); - famicombox_bankswitch(0); - m_attract_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(famibox_state::famicombox_attract_timer_callback),this)); m_gameplay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(famibox_state::famicombox_gameplay_timer_callback),this)); m_exception_cause = 0xff; @@ -539,6 +542,7 @@ void famibox_state::famibox(machine_config &config) screen.set_screen_update("ppu", FUNC(ppu2c0x_device::screen_update)); PPU_2C02(config, m_ppu); + m_ppu->set_addrmap(0, &famibox_state::famibox_ppu_map); m_ppu->set_cpu_tag(m_maincpu); m_ppu->int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); diff --git a/src/mame/drivers/fastfred.cpp b/src/mame/drivers/fastfred.cpp index 37e89aa31c9..b4d1014d79c 100644 --- a/src/mame/drivers/fastfred.cpp +++ b/src/mame/drivers/fastfred.cpp @@ -251,7 +251,7 @@ void fastfred_state::sound_map(address_map &map) map(0x0000, 0x1fff).rom(); map(0x2000, 0x23ff).ram(); map(0x3000, 0x3000).r("soundlatch", FUNC(generic_latch_8_device::read)).w(FUNC(fastfred_state::sound_nmi_mask_w)); - map(0x4000, 0x4000).writeonly(); // Reset PSG's + map(0x4000, 0x4000).nopw(); // Reset PSG's map(0x5000, 0x5001).w("ay8910.1", FUNC(ay8910_device::address_data_w)); map(0x6000, 0x6001).w("ay8910.2", FUNC(ay8910_device::address_data_w)); map(0x7000, 0x7000).nopr(); // only for Imago, read but not used diff --git a/src/mame/drivers/fm7.cpp b/src/mame/drivers/fm7.cpp index 2a860c0c4bd..60aaa9e7b2a 100644 --- a/src/mame/drivers/fm7.cpp +++ b/src/mame/drivers/fm7.cpp @@ -981,8 +981,7 @@ void fm77_state::fm7_mmr_refresh(address_space &space) uint16_t window_addr = ((m_mmr.window_offset << 8) + 0x7c00) & 0xffff; // if(window_addr < 0xfc00) { - space.install_readwrite_bank(0x7c00,0x7fff,"bank24"); - membank("bank24")->set_base(&m_extended_ram[window_addr]); + space.install_ram(0x7c00,0x7fff, &m_extended_ram[window_addr]); } } else diff --git a/src/mame/drivers/fmtowns.cpp b/src/mame/drivers/fmtowns.cpp index 07044988df3..c14b2494112 100644 --- a/src/mame/drivers/fmtowns.cpp +++ b/src/mame/drivers/fmtowns.cpp @@ -2729,7 +2729,7 @@ void towns_state::driver_start() save_pointer(m_video.towns_video_reg,"Video registers",2); if (m_ram->size() > 0x100000) - m_maincpu->space(AS_PROGRAM).install_ram(0x100000,m_ram->size()-1,nullptr); + m_maincpu->space(AS_PROGRAM).install_ram(0x100000,m_ram->size()-1,m_ram->pointer() + 0x100000); } void marty_state::driver_start() diff --git a/src/mame/drivers/fruitpc.cpp b/src/mame/drivers/fruitpc.cpp index 1987638c7d8..4bf57308c0f 100644 --- a/src/mame/drivers/fruitpc.cpp +++ b/src/mame/drivers/fruitpc.cpp @@ -55,7 +55,7 @@ void fruitpc_state::fruitpc_map(address_map &map) map(0x00000000, 0x0009ffff).ram(); map(0x000a0000, 0x000bffff).rw("vga", FUNC(vga_device::mem_r), FUNC(vga_device::mem_w)); // VGA VRAM map(0x000c0000, 0x000dffff).rom().region("bios", 0); - map(0x000e0000, 0x000fffff).ram().region("bios", 0); + map(0x000e0000, 0x000fffff).rom().region("bios", 0); map(0x00100000, 0x008fffff).ram(); // 8MB RAM map(0x02000000, 0x28ffffff).noprw(); map(0xfffe0000, 0xffffffff).rom().region("bios", 0); /* System BIOS */ diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp index 761d7ee2d51..4b94c1d206e 100644 --- a/src/mame/drivers/galaxian.cpp +++ b/src/mame/drivers/galaxian.cpp @@ -1239,7 +1239,7 @@ INPUT_CHANGED_MEMBER(gmgalax_state::game_changed) m_selected_game = newval; /* select the bank and graphics bank based on it */ - membank("bank1")->set_entry(m_selected_game); + m_bank1->set_entry(m_selected_game); galaxian_gfxbank_w(0, m_selected_game); /* reset the stars */ @@ -1267,7 +1267,7 @@ CUSTOM_INPUT_MEMBER(gmgalax_state::port_r) void galaxian_state::zigzag_bankswap_w(uint8_t data) { /* Zig Zag can swap ROMs 2 and 3 as a form of copy protection */ - membank("bank1")->set_entry(data & 1); + m_bank1->set_entry(data & 1); membank("bank2")->set_entry(~data & 1); } @@ -7203,8 +7203,8 @@ void gmgalax_state::init_gmgalax() common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &gmgalax_state::gmgalax_extend_tile_info, &gmgalax_state::gmgalax_extend_sprite_info); /* ROM is banked */ - space.install_read_bank(0x0000, 0x3fff, "bank1"); - membank("bank1")->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000); + space.install_read_bank(0x0000, 0x3fff, m_bank1); + m_bank1->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000); /* callback when the game select is toggled */ game_changed(*machine().ioport().ports().begin()->second->fields().first(), 0, 0, 0); @@ -7252,8 +7252,8 @@ void galaxian_state::init_victoryc() void galaxian_state::init_fourplay() { - membank("bank1")->configure_entries(0, 4, memregion("maincpu")->base() + 0x10000, 0x4000); - membank("bank1")->set_entry(0); + m_bank1->configure_entries(0, 4, memregion("maincpu")->base() + 0x10000, 0x4000); + m_bank1->set_entry(0); /* video extensions */ common_init(NULL, NULL, &galaxian_state::pisces_extend_tile_info, &galaxian_state::pisces_extend_sprite_info); @@ -7261,8 +7261,8 @@ void galaxian_state::init_fourplay() void galaxian_state::init_videight() { - membank("bank1")->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x4000); - membank("bank1")->set_entry(0); + m_bank1->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x4000); + m_bank1->set_entry(0); /* video extensions */ common_init(NULL, NULL, &galaxian_state::videight_extend_tile_info, &galaxian_state::videight_extend_sprite_info); @@ -7425,7 +7425,7 @@ void galaxian_state::init_zigzag() m_numspritegens = 2; /* make ROMs 2 & 3 swappable */ - membank("bank1")->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x1000); + m_bank1->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x1000); membank("bank2")->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x1000); /* handler for doing the swaps */ @@ -7720,8 +7720,8 @@ void galaxian_state::init_sfx() m_sfx_tilemap = true; /* sound board has space for extra ROM */ - m_audiocpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, "bank1"); - membank("bank1")->set_base(memregion("audiocpu")->base()); + m_audiocpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, m_bank1); + m_bank1->set_base(memregion("audiocpu")->base()); } diff --git a/src/mame/drivers/galaxold.cpp b/src/mame/drivers/galaxold.cpp index e55999a632f..b590d5aadc1 100644 --- a/src/mame/drivers/galaxold.cpp +++ b/src/mame/drivers/galaxold.cpp @@ -3788,9 +3788,7 @@ ROM_END void galaxold_state::init_guttangt() { address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_read_bank( 0x2000, 0x27ff, "cpubank" ); - uint8_t *rom = memregion("maincpu")->base(); - membank("cpubank")->set_base(rom + 0x2000); + space.install_rom( 0x2000, 0x27ff, memregion("maincpu")->base() + 0x2000); } diff --git a/src/mame/drivers/galivan.cpp b/src/mame/drivers/galivan.cpp index e9134e3dc6f..b008eb54918 100644 --- a/src/mame/drivers/galivan.cpp +++ b/src/mame/drivers/galivan.cpp @@ -1117,9 +1117,9 @@ ROM_END void galivan_state::youmab_extra_bank_w(uint8_t data) { if (data == 0xff) - membank("bank2")->set_entry(1); + m_rombank->set_entry(1); else if (data == 0x00) - membank("bank2")->set_entry(0); + m_rombank->set_entry(0); else printf("data %03x\n", data); } @@ -1165,12 +1165,11 @@ void galivan_state::init_youmab() { // TODO: move all of this to an address map instead m_maincpu->space(AS_IO).install_write_handler(0x82, 0x82, write8smo_delegate(*this, FUNC(galivan_state::youmab_extra_bank_w))); // banks rom at 0x8000? writes 0xff and 0x00 before executing code there - m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x7fff, "bank3"); - membank("bank3")->set_base(memregion("maincpu")->base()); + m_maincpu->space(AS_PROGRAM).install_rom(0x0000, 0x7fff, memregion("maincpu")->base()); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0xbfff, "bank2"); - membank("bank2")->configure_entries(0, 2, memregion("user2")->base(), 0x4000); - membank("bank2")->set_entry(0); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0xbfff, m_rombank); + m_rombank->configure_entries(0, 2, memregion("user2")->base(), 0x4000); + m_rombank->set_entry(0); m_maincpu->space(AS_IO).install_write_handler(0x81, 0x81, write8smo_delegate(*this, FUNC(galivan_state::youmab_81_w))); // ?? often, alternating values m_maincpu->space(AS_IO).install_write_handler(0x84, 0x84, write8smo_delegate(*this, FUNC(galivan_state::youmab_84_w))); // ?? often, sequence.. diff --git a/src/mame/drivers/gamate.cpp b/src/mame/drivers/gamate.cpp index 99757a68833..607e3f6704b 100644 --- a/src/mame/drivers/gamate.cpp +++ b/src/mame/drivers/gamate.cpp @@ -29,7 +29,7 @@ public: , m_ay(*this, "ay8910") , m_cartslot(*this, "cartslot") , m_io_joy(*this, "JOY") - , m_bios(*this, "bios") + , m_bios(*this, "maincpu") , m_ram(*this, "ram") { } @@ -62,7 +62,7 @@ private: required_device<ay8910_device> m_ay; required_device<gamate_cart_slot_device> m_cartslot; required_ioport m_io_joy; - required_shared_ptr<uint8_t> m_bios; + required_region_ptr<uint8_t> m_bios; required_shared_ptr<uint8_t> m_ram; emu_timer *timer1; emu_timer *timer2; @@ -129,7 +129,7 @@ void gamate_state::gamate_mem(address_map &map) map(0x5a00, 0x5a00).r(FUNC(gamate_state::card_available_check)); map(0x6000, 0xdfff).rw(FUNC(gamate_state::read_cart), FUNC(gamate_state::write_cart)); - map(0xe000, 0xefff).mirror(0x1000).rom().share("bios").region("maincpu", 0); + map(0xe000, 0xefff).mirror(0x1000).rom().region("maincpu", 0); } diff --git a/src/mame/drivers/gamecom.cpp b/src/mame/drivers/gamecom.cpp index 5ea07b16cdd..789504fe16d 100644 --- a/src/mame/drivers/gamecom.cpp +++ b/src/mame/drivers/gamecom.cpp @@ -41,13 +41,11 @@ Game Status: void gamecom_state::gamecom_mem_map(address_map &map) { - map(0x0000, 0x0013).ram().region("maincpu", 0x00); + map(0x0000, 0x03ff).ram().share("maincpu"); map(0x0014, 0x0017).rw(FUNC(gamecom_state::gamecom_pio_r), FUNC(gamecom_state::gamecom_pio_w)); // buttons - map(0x0018, 0x001F).ram().region("maincpu", 0x18); map(0x0020, 0x007F).rw(FUNC(gamecom_state::gamecom_internal_r), FUNC(gamecom_state::gamecom_internal_w));/* CPU internal register file */ - map(0x0080, 0x03FF).ram().region("maincpu", 0x80); /* RAM */ - map(0x0400, 0x0FFF).noprw(); /* Nothing */ - map(0x1000, 0x1FFF).rom(); /* Internal ROM (initially), or External ROM/Flash. Controlled by MMU0 (never swapped out in game.com) */ + map(0x0400, 0x0FFF).noprw(); /* Nothing */ + map(0x1000, 0x1FFF).rom().region("maincpu", 0); /* Internal ROM (initially), or External ROM/Flash. Controlled by MMU0 (never swapped out in game.com) */ map(0x2000, 0x3FFF).bankr("bank1"); /* External ROM/Flash. Controlled by MMU1 */ map(0x4000, 0x5FFF).bankr("bank2"); /* External ROM/Flash. Controlled by MMU2 */ map(0x6000, 0x7FFF).bankr("bank3"); /* External ROM/Flash. Controlled by MMU3 */ @@ -293,8 +291,8 @@ void gamecom_state::gamecom(machine_config &config) } ROM_START( gamecom ) - ROM_REGION( 0x2000, "maincpu", 0 ) - ROM_LOAD( "internal.bin", 0x1000, 0x1000, CRC(a0cec361) SHA1(03368237e8fed4a8724f3b4a1596cf4b17c96d33) ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "internal.bin", 0x0000, 0x1000, CRC(a0cec361) SHA1(03368237e8fed4a8724f3b4a1596cf4b17c96d33) ) ROM_REGION( 0x40000, "kernel", 0 ) ROM_LOAD( "external.bin", 0x00000, 0x40000, CRC(e235a589) SHA1(97f782e72d738f4d7b861363266bf46b438d9b50) ) diff --git a/src/mame/drivers/gba.cpp b/src/mame/drivers/gba.cpp index 76e8e526333..98701148912 100644 --- a/src/mame/drivers/gba.cpp +++ b/src/mame/drivers/gba.cpp @@ -1331,17 +1331,14 @@ void gba_state::machine_start() // install the cart ROM & SRAM into the address map, if present if (m_cart->exists()) { - m_maincpu->space(AS_PROGRAM).install_read_bank(0x08000000, 0x09ffffff, "rom1"); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x0a000000, 0x0bffffff, "rom2"); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x0c000000, 0x0cffffff, "rom3"); std::string region_tag; memory_region *cart_rom = memregion(region_tag.assign(m_cart->tag()).append(GBASLOT_ROM_REGION_TAG)); // install ROM accesses - membank("rom1")->set_base(cart_rom->base()); - membank("rom2")->set_base(cart_rom->base()); - membank("rom3")->set_base(cart_rom->base()); + m_maincpu->space(AS_PROGRAM).install_rom(0x08000000, 0x09ffffff, cart_rom->base()); + m_maincpu->space(AS_PROGRAM).install_rom(0x0a000000, 0x0bffffff, cart_rom->base()); + m_maincpu->space(AS_PROGRAM).install_rom(0x0c000000, 0x0cffffff, cart_rom->base()); m_maincpu->space(AS_PROGRAM).install_read_handler(0x80000c4, 0x80000cb, read32s_delegate(*m_cart, FUNC(gba_cart_slot_device::read_gpio))); m_maincpu->space(AS_PROGRAM).install_write_handler(0x80000c4, 0x80000cb, write32s_delegate(*m_cart, FUNC(gba_cart_slot_device::write_gpio))); @@ -1387,7 +1384,7 @@ void gba_state::machine_start() { m_maincpu->space(AS_PROGRAM).install_write_handler(0x08800000, 0x088001ff, write32sm_delegate(*m_cart, FUNC(gba_cart_slot_device::write_mapper))); memory_region *cart_romhlp = memregion(region_tag.assign(m_cart->tag()).append(GBAHELP_ROM_REGION_TAG)); - membank("rom1")->set_base(cart_romhlp->base()); + m_maincpu->space(AS_PROGRAM).install_rom(0x08000000, 0x09ffffff, cart_romhlp->base()); } } diff --git a/src/mame/drivers/ghosteo.cpp b/src/mame/drivers/ghosteo.cpp index e637fed8b80..b0898723d96 100644 --- a/src/mame/drivers/ghosteo.cpp +++ b/src/mame/drivers/ghosteo.cpp @@ -97,6 +97,7 @@ public: , m_soundlatch(*this, "soundlatch") , m_system_memory(*this, "systememory") , m_flash(*this, "flash") + , m_qs1000_bank(*this, "qs1000_bank") { } @@ -115,6 +116,7 @@ private: required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<uint32_t> m_system_memory; required_region_ptr<uint8_t> m_flash; + memory_bank_creator m_qs1000_bank; int m_security_count; uint32_t m_bballoon_port[20]; @@ -182,7 +184,7 @@ void ghosteo_state::qs1000_p3_w(uint8_t data) // ...x .... - ? // ..x. .... - /IRQ clear - membank("qs1000:bank")->set_entry(data & 0x07); + m_qs1000_bank->set_entry(data & 0x07); if (!BIT(data, 5)) m_soundlatch->acknowledge_w(); @@ -594,8 +596,8 @@ uint32_t ghosteo_state::bballoon_speedup_r(offs_t offset, uint32_t mem_mask) void ghosteo_state::machine_start() { // Set up the QS1000 program ROM banking, taking care not to overlap the internal RAM - m_qs1000->cpu().space(AS_IO).install_read_bank(0x0100, 0xffff, "bank"); - membank("qs1000:bank")->configure_entries(0, 8, memregion("qs1000:cpu")->base()+0x100, 0x10000); + m_qs1000->cpu().space(AS_IO).install_read_bank(0x0100, 0xffff, m_qs1000_bank); + m_qs1000_bank->configure_entries(0, 8, memregion("qs1000:cpu")->base()+0x100, 0x10000); } void ghosteo_state::machine_reset() diff --git a/src/mame/drivers/gimix.cpp b/src/mame/drivers/gimix.cpp index 36aa5033d23..5b4f0f72267 100644 --- a/src/mame/drivers/gimix.cpp +++ b/src/mame/drivers/gimix.cpp @@ -520,7 +520,7 @@ void gimix_state::machine_start() { for (int bank = 0; bank < 16; bank++) { - m_bank[bank]->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank[bank]->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,membank("upper_ram")); } } m_floppy0->get_device()->set_rpm(300); diff --git a/src/mame/drivers/gottlieb.cpp b/src/mame/drivers/gottlieb.cpp index a55b738b653..2ca96ee42ac 100644 --- a/src/mame/drivers/gottlieb.cpp +++ b/src/mame/drivers/gottlieb.cpp @@ -776,9 +776,7 @@ void gottlieb_state::reactor_map(address_map &map) void gottlieb_state::gottlieb_map(address_map &map) { map.global_mask(0xffff); - map(0x0000, 0x0fff).ram().share("nvram"); - map(0x1000, 0x1fff).ram().region("maincpu", 0x1000); /* or ROM */ - map(0x2000, 0x2fff).ram().region("maincpu", 0x2000); /* or ROM */ + map(0x0000, 0x2fff).ram().share("nvram"); map(0x3000, 0x30ff).mirror(0x0700).writeonly().share("spriteram"); /* FRSEL */ map(0x3800, 0x3bff).mirror(0x0400).ram().w(FUNC(gottlieb_state::videoram_w)).share("videoram"); /* BRSEL */ map(0x4000, 0x4fff).ram().w(FUNC(gottlieb_state::charram_w)).share("charram"); /* BOJRSEL1 */ @@ -2161,9 +2159,11 @@ ROM_END ROM_START( krull ) - ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_REGION( 0x3000, "nvram", ROMREGION_ERASEFF) ROM_LOAD( "gv-105_ram_2.c7", 0x1000, 0x1000, CRC(302feadf) SHA1(9d70de35e4f0490dc4e601070993ad146f250dea) ) ROM_LOAD( "gv-105_ram_4.c9-10", 0x2000, 0x1000, CRC(79355a60) SHA1(57ad5c904b9ac4bf7c7d828bf755bbcbba6a4fd7) ) + + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "gv-105_rom_4.c16", 0x6000, 0x2000, CRC(2b696394) SHA1(b18270f4ad97743f6ff8c4cbc93e523c77a8e794) ) ROM_LOAD( "gv-105_rom_3.c14-15", 0x8000, 0x2000, CRC(14b0ee42) SHA1(276c4008a013806b3989c529f41cbc358ec49fd6) ) ROM_LOAD( "gv-105_rom_2.c13-14", 0xa000, 0x2000, CRC(b5fad94a) SHA1(1bae895fbdd658cfb56c53cc2139282cc1e778de) ) @@ -2471,8 +2471,10 @@ ROM_END ROM_START( 3stooges ) - ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_REGION( 0x3000, "nvram", ROMREGION_ERASEFF) ROM_LOAD( "gv113ram.4", 0x2000, 0x1000, CRC(533bff2a) SHA1(58d0be8add4b02dc3e27cf6b17a05baf4304f3ce) ) + + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "gv113rom.4", 0x6000, 0x2000, CRC(8b6e52b8) SHA1(6e17e11afce92a7fa1735a724f0c0faf9375ac89) ) ROM_LOAD( "gv113rom.3", 0x8000, 0x2000, CRC(b816d8c4) SHA1(86e16888492390034ac04e3f6a9f56422575c778) ) ROM_LOAD( "gv113rom.2", 0xa000, 0x2000, CRC(b45b2a79) SHA1(7d0b19bec462ab67f518361afdf4b6982829ed07) ) @@ -2498,8 +2500,10 @@ ROM_END ROM_START( 3stoogesa ) - ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_REGION( 0x3000, "nvram", ROMREGION_ERASEFF) ROM_LOAD( "gv113ram4.bin", 0x2000, 0x1000, CRC(a00365be) SHA1(a151e1dfd8a251e6558968ea1df5a8516286d2c1) ) /* Came from PCB with low serial # */ + + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "gv113rom4.bin", 0x6000, 0x2000, CRC(a8f9d51d) SHA1(c9b18e31fea6fd01171528dd583b4d4f9b9078ed) ) ROM_LOAD( "gv113rom3.bin", 0x8000, 0x2000, CRC(60bda7b6) SHA1(7dd7633397d3ccdbd7885a5436f422f575ecd0cc) ) ROM_LOAD( "gv113rom2.bin", 0xa000, 0x2000, CRC(9bb95798) SHA1(91cf203cf59c5a96ed5de8f4c5743bd91350c16f) ) @@ -2525,8 +2529,10 @@ ROM_END ROM_START( vidvince ) - ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_REGION( 0x3000, "nvram", ROMREGION_ERASEFF) ROM_LOAD( "gv132_ram4_2732.c9c10", 0x2000, 0x1000, CRC(67a4927b) SHA1(41dfd13ea24bb3b0f8f917f4af5f6b33af1bc2e7) ) + + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "gv132_rom4_2764.c16", 0x6000, 0x2000, CRC(3c5f39f5) SHA1(3722c30bcd60fc0c1c4ca4dd800a3654fba67599) ) ROM_LOAD( "gv132_rom3_2764.c14c15", 0x8000, 0x2000, CRC(3983cb79) SHA1(3c527ed2428b8cb86a6896a74c873317a9f7b411) ) ROM_LOAD( "gv132_rom2_2764.c13c14", 0xa000, 0x2000, CRC(0f5ebab9) SHA1(680874b9857565857375096d05203997669a7215) ) diff --git a/src/mame/drivers/gridcomp.cpp b/src/mame/drivers/gridcomp.cpp index 1deb3174053..b74fb04018c 100644 --- a/src/mame/drivers/gridcomp.cpp +++ b/src/mame/drivers/gridcomp.cpp @@ -285,8 +285,7 @@ MACHINE_START_MEMBER(gridcomp_state, gridcomp) { address_space &program = m_maincpu->space(AS_PROGRAM); - program.install_readwrite_bank(0, m_ram->size() - 1, "bank10"); - membank("bank10")->set_base(m_ram->pointer()); + program.install_ram(0, m_ram->size() - 1, m_ram->pointer()); m_videoram = (uint16_t *)m_maincpu->space(AS_PROGRAM).get_write_ptr(0x400); } diff --git a/src/mame/drivers/gticlub.cpp b/src/mame/drivers/gticlub.cpp index 74d251c5d58..8e2e45b4cb1 100644 --- a/src/mame/drivers/gticlub.cpp +++ b/src/mame/drivers/gticlub.cpp @@ -549,8 +549,8 @@ void gticlub_state::gticlub_map(address_map &map) map(0x7e00a000, 0x7e00bfff).rw(m_k056230, FUNC(k056230_device::lanc_ram_r), FUNC(k056230_device::lanc_ram_w)); map(0x7e00c000, 0x7e00c00f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w)); map(0x7f000000, 0x7f3fffff).rom().region("user2", 0); /* Data ROM */ - map(0x7f800000, 0x7f9fffff).rom().share("share2"); - map(0x7fe00000, 0x7fffffff).rom().region("user1", 0).share("share2"); /* Program ROM */ + map(0x7f800000, 0x7f9fffff).rom().region("user1", 0); + map(0x7fe00000, 0x7fffffff).rom().region("user1", 0); /* Program ROM */ } void gticlub_state::hangplt_map(address_map &map) @@ -567,8 +567,8 @@ void gticlub_state::hangplt_map(address_map &map) map(0x7e00a000, 0x7e00bfff).rw(m_k056230, FUNC(k056230_device::lanc_ram_r), FUNC(k056230_device::lanc_ram_w)); map(0x7e00c000, 0x7e00c00f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w)); map(0x7f000000, 0x7f3fffff).rom().region("user2", 0); /* Data ROM */ - map(0x7f800000, 0x7f9fffff).rom().share("share2"); - map(0x7fe00000, 0x7fffffff).rom().region("user1", 0).share("share2"); /* Program ROM */ + map(0x7f800000, 0x7f9fffff).rom().region("user1", 0); + map(0x7fe00000, 0x7fffffff).rom().region("user1", 0); /* Program ROM */ } /**********************************************************************/ @@ -1136,11 +1136,11 @@ void gticlub_state::hangplt(machine_config &config) /*************************************************************************/ ROM_START( gticlub ) /* Euro version EAA - Reports: GTI CLUB(TM) System ver 1.00(EUR) */ - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE("688eaa01.21u", 0x000003, 0x80000, CRC(824944ad) SHA1(a7bb86a2495e0579f5d82808aeed4895be2dbe3b) ) - ROM_LOAD32_BYTE("688eaa02.19u", 0x000002, 0x80000, CRC(88e7bfb9) SHA1(fc0e945291204ee0c82bbd2c81ff241e1565c6ae) ) - ROM_LOAD32_BYTE("688eaa03.21r", 0x000001, 0x80000, CRC(ea1c696b) SHA1(fd778afaa1de3a35b38a67b8e4c9a08fe9cf1b9e) ) - ROM_LOAD32_BYTE("688eaa04.19r", 0x000000, 0x80000, CRC(94fa2334) SHA1(04edf840f841b9713fa93e7ebb6aad2000b738c0) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE("688eaa01.21u", 0x000000, 0x80000, CRC(824944ad) SHA1(a7bb86a2495e0579f5d82808aeed4895be2dbe3b) ) + ROM_LOAD32_BYTE("688eaa02.19u", 0x000001, 0x80000, CRC(88e7bfb9) SHA1(fc0e945291204ee0c82bbd2c81ff241e1565c6ae) ) + ROM_LOAD32_BYTE("688eaa03.21r", 0x000002, 0x80000, CRC(ea1c696b) SHA1(fd778afaa1de3a35b38a67b8e4c9a08fe9cf1b9e) ) + ROM_LOAD32_BYTE("688eaa04.19r", 0x000003, 0x80000, CRC(94fa2334) SHA1(04edf840f841b9713fa93e7ebb6aad2000b738c0) ) ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ ROM_LOAD32_WORD_SWAP("688a05.14u", 0x000000, 0x200000, CRC(7caa3f80) SHA1(28409dc17c4e010173396fdc069a409fbea0d58d) ) @@ -1166,11 +1166,11 @@ ROM_START( gticlub ) /* Euro version EAA - Reports: GTI CLUB(TM) System ver 1.00 ROM_END ROM_START( gticlubu ) /* USA version UAA - Reports: GTI CLUB(TM) System ver 1.02(USA) */ - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE("688uaa01.21u", 0x000003, 0x80000, CRC(4e2ea7ad) SHA1(cc517df7c4df098896a2a88843fef97c9beb46f3) ) - ROM_LOAD32_BYTE("688uaa02.19u", 0x000002, 0x80000, CRC(c0212ce1) SHA1(7716acfa1b1391e9d7a321ed46785c144d27fdd8) ) - ROM_LOAD32_BYTE("688uaa03.21r", 0x000001, 0x80000, CRC(030246fe) SHA1(70d3591159b07aaeca60141db44f7c28d1b2dac9) ) - ROM_LOAD32_BYTE("688uaa04.19r", 0x000000, 0x80000, CRC(9394e0b2) SHA1(9ff4ff22a307352bf127fc2b5ef9c56ecacf0aab) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE("688uaa01.21u", 0x000000, 0x80000, CRC(4e2ea7ad) SHA1(cc517df7c4df098896a2a88843fef97c9beb46f3) ) + ROM_LOAD32_BYTE("688uaa02.19u", 0x000001, 0x80000, CRC(c0212ce1) SHA1(7716acfa1b1391e9d7a321ed46785c144d27fdd8) ) + ROM_LOAD32_BYTE("688uaa03.21r", 0x000002, 0x80000, CRC(030246fe) SHA1(70d3591159b07aaeca60141db44f7c28d1b2dac9) ) + ROM_LOAD32_BYTE("688uaa04.19r", 0x000003, 0x80000, CRC(9394e0b2) SHA1(9ff4ff22a307352bf127fc2b5ef9c56ecacf0aab) ) ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ ROM_LOAD32_WORD_SWAP("688a05.14u", 0x000000, 0x200000, CRC(7caa3f80) SHA1(28409dc17c4e010173396fdc069a409fbea0d58d) ) @@ -1196,11 +1196,11 @@ ROM_START( gticlubu ) /* USA version UAA - Reports: GTI CLUB(TM) System ver 1.02 ROM_END ROM_START( gticluba ) /* Asia version AAA - Reports: GTI CLUB(TM) System ver 1.00(ASI) */ - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE("688aaa01.21u", 0x000003, 0x80000, CRC(06a56474) SHA1(3a457b885a35e3ee030fd51d847bcf75fce46208) ) - ROM_LOAD32_BYTE("688aaa02.19u", 0x000002, 0x80000, CRC(3c1e714a) SHA1(557f8542b855b2b35f242c8db7396017aca6dbd8) ) - ROM_LOAD32_BYTE("688aaa03.21r", 0x000001, 0x80000, CRC(e060580b) SHA1(50242f3f3b949cc03082e4e75d9dcc89e17f0a75) ) - ROM_LOAD32_BYTE("688aaa04.19r", 0x000000, 0x80000, CRC(928c23cd) SHA1(cce54398e1e5b98bfb717839cc422f1f60502788) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE("688aaa01.21u", 0x000000, 0x80000, CRC(06a56474) SHA1(3a457b885a35e3ee030fd51d847bcf75fce46208) ) + ROM_LOAD32_BYTE("688aaa02.19u", 0x000001, 0x80000, CRC(3c1e714a) SHA1(557f8542b855b2b35f242c8db7396017aca6dbd8) ) + ROM_LOAD32_BYTE("688aaa03.21r", 0x000002, 0x80000, CRC(e060580b) SHA1(50242f3f3b949cc03082e4e75d9dcc89e17f0a75) ) + ROM_LOAD32_BYTE("688aaa04.19r", 0x000003, 0x80000, CRC(928c23cd) SHA1(cce54398e1e5b98bfb717839cc422f1f60502788) ) ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ ROM_LOAD32_WORD_SWAP("688a05.14u", 0x000000, 0x200000, CRC(7caa3f80) SHA1(28409dc17c4e010173396fdc069a409fbea0d58d) ) @@ -1226,11 +1226,11 @@ ROM_START( gticluba ) /* Asia version AAA - Reports: GTI CLUB(TM) System ver 1.0 ROM_END ROM_START( gticlubj ) /* Japan version JAA - Reports: GTI CLUB(TM) System ver 1.00(JPN) */ - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE("688jaa01.21u", 0x000003, 0x80000, CRC(1492059c) SHA1(176dbd87f23f4cd8e1397e67da501738e20e5a57) ) - ROM_LOAD32_BYTE("688jaa02.19u", 0x000002, 0x80000, CRC(7896dd69) SHA1(a3ab7b872132a5e66238e414f4b497cf7beb8b1c) ) - ROM_LOAD32_BYTE("688jaa03.21r", 0x000001, 0x80000, CRC(94e2be50) SHA1(f206ac201903f3aae29196ab6fccdef104859346) ) - ROM_LOAD32_BYTE("688jaa04.19r", 0x000000, 0x80000, CRC(ff539bb6) SHA1(1a225eca4377d82a2b6cb99c1d16580b9ccf2f08) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE("688jaa01.21u", 0x000000, 0x80000, CRC(1492059c) SHA1(176dbd87f23f4cd8e1397e67da501738e20e5a57) ) + ROM_LOAD32_BYTE("688jaa02.19u", 0x000001, 0x80000, CRC(7896dd69) SHA1(a3ab7b872132a5e66238e414f4b497cf7beb8b1c) ) + ROM_LOAD32_BYTE("688jaa03.21r", 0x000002, 0x80000, CRC(94e2be50) SHA1(f206ac201903f3aae29196ab6fccdef104859346) ) + ROM_LOAD32_BYTE("688jaa04.19r", 0x000003, 0x80000, CRC(ff539bb6) SHA1(1a225eca4377d82a2b6cb99c1d16580b9ccf2f08) ) ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ ROM_LOAD32_WORD_SWAP("688a05.14u", 0x000000, 0x200000, CRC(7caa3f80) SHA1(28409dc17c4e010173396fdc069a409fbea0d58d) ) @@ -1256,11 +1256,11 @@ ROM_START( gticlubj ) /* Japan version JAA - Reports: GTI CLUB(TM) System ver 1. ROM_END ROM_START( thunderh ) /* Euro version EAA */ - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "680eaa01.21u", 0x000003, 0x080000, CRC(796e2678) SHA1(8051a228aa6d1a3f1fef26de15f4fdb785c2c8ee) ) - ROM_LOAD32_BYTE( "680eaa02.19u", 0x000002, 0x080000, CRC(767e6db0) SHA1(0f29f56fe485f30100ce54e64bda5d5a124c1d09) ) - ROM_LOAD32_BYTE( "680eaa03.21r", 0x000001, 0x080000, CRC(5a5b59b5) SHA1(542c0722437f40829559b09120fde995246d52ae) ) - ROM_LOAD32_BYTE( "680eaa04.19r", 0x000000, 0x080000, CRC(4a973a5c) SHA1(1d84f6416c3b5a85d7ebfbc15fc08e0dd8dc2414) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "680eaa01.21u", 0x000000, 0x080000, CRC(796e2678) SHA1(8051a228aa6d1a3f1fef26de15f4fdb785c2c8ee) ) + ROM_LOAD32_BYTE( "680eaa02.19u", 0x000001, 0x080000, CRC(767e6db0) SHA1(0f29f56fe485f30100ce54e64bda5d5a124c1d09) ) + ROM_LOAD32_BYTE( "680eaa03.21r", 0x000002, 0x080000, CRC(5a5b59b5) SHA1(542c0722437f40829559b09120fde995246d52ae) ) + ROM_LOAD32_BYTE( "680eaa04.19r", 0x000003, 0x080000, CRC(4a973a5c) SHA1(1d84f6416c3b5a85d7ebfbc15fc08e0dd8dc2414) ) ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ ROM_LOAD32_WORD_SWAP( "680a05.14u", 0x000000, 0x200000, CRC(0c9f334d) SHA1(99ac622a04a7140244d81031df69a796b6fd2657) ) @@ -1286,11 +1286,11 @@ ROM_START( thunderh ) /* Euro version EAA */ ROM_END ROM_START( thunderhu ) /* USA version UAA */ - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "680uaa01.21u", 0x000003, 0x080000, CRC(f2bb2ba1) SHA1(311e88d63179486014376c4af4ff0ef28673ee5a) ) - ROM_LOAD32_BYTE( "680uaa02.19u", 0x000002, 0x080000, CRC(52f617b5) SHA1(fda3133d3a7e04eb4432c69becdcf1872b3660d9) ) - ROM_LOAD32_BYTE( "680uaa03.21r", 0x000001, 0x080000, CRC(086a0574) SHA1(32fb93dbb93d2fe6af743ea4310b50a6cd03647d) ) - ROM_LOAD32_BYTE( "680uaa04.19r", 0x000000, 0x080000, CRC(85e1f8e3) SHA1(9172c54b6663f1bf390795068271198083a6860d) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "680uaa01.21u", 0x000000, 0x080000, CRC(f2bb2ba1) SHA1(311e88d63179486014376c4af4ff0ef28673ee5a) ) + ROM_LOAD32_BYTE( "680uaa02.19u", 0x000001, 0x080000, CRC(52f617b5) SHA1(fda3133d3a7e04eb4432c69becdcf1872b3660d9) ) + ROM_LOAD32_BYTE( "680uaa03.21r", 0x000002, 0x080000, CRC(086a0574) SHA1(32fb93dbb93d2fe6af743ea4310b50a6cd03647d) ) + ROM_LOAD32_BYTE( "680uaa04.19r", 0x000003, 0x080000, CRC(85e1f8e3) SHA1(9172c54b6663f1bf390795068271198083a6860d) ) ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ ROM_LOAD32_WORD_SWAP( "680a05.14u", 0x000000, 0x200000, CRC(0c9f334d) SHA1(99ac622a04a7140244d81031df69a796b6fd2657) ) @@ -1316,11 +1316,11 @@ ROM_START( thunderhu ) /* USA version UAA */ ROM_END ROM_START( slrasslt ) /* USA version UAA */ - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "792uaa01.21u", 0x000003, 0x080000, CRC(c73bf7fb) SHA1(ffe0fea155473827929339a9261a158287ce30a8) ) // ROM check screen shows version as: SOLAR ASSAULT DR2 VER UA-A - ROM_LOAD32_BYTE( "792uaa02.19u", 0x000002, 0x080000, CRC(a940bb9b) SHA1(65a60157697a21cc2485c02c689c9addb3ac91f1) ) // Based on "Revised" code but title screen only shows Solar Assault - ROM_LOAD32_BYTE( "792uaa03.21r", 0x000001, 0x080000, CRC(363e8411) SHA1(b9c70033d8e3de4b339b61a66172bfecb7c2b3ab) ) - ROM_LOAD32_BYTE( "792uaa04.19r", 0x000000, 0x080000, CRC(7910d99c) SHA1(e2114d369060528998b58331d590c086d306f541) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "792uaa01.21u", 0x000000, 0x080000, CRC(c73bf7fb) SHA1(ffe0fea155473827929339a9261a158287ce30a8) ) // ROM check screen shows version as: SOLAR ASSAULT DR2 VER UA-A + ROM_LOAD32_BYTE( "792uaa02.19u", 0x000001, 0x080000, CRC(a940bb9b) SHA1(65a60157697a21cc2485c02c689c9addb3ac91f1) ) // Based on "Revised" code but title screen only shows Solar Assault + ROM_LOAD32_BYTE( "792uaa03.21r", 0x000002, 0x080000, CRC(363e8411) SHA1(b9c70033d8e3de4b339b61a66172bfecb7c2b3ab) ) + ROM_LOAD32_BYTE( "792uaa04.19r", 0x000003, 0x080000, CRC(7910d99c) SHA1(e2114d369060528998b58331d590c086d306f541) ) ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ ROM_LOAD32_WORD_SWAP( "792a05.14u", 0x000000, 0x200000, CRC(9a27edfc) SHA1(c028b6440eb1b0c814c4db45918e580662ac2d9a) ) @@ -1346,11 +1346,11 @@ ROM_START( slrasslt ) /* USA version UAA */ ROM_END ROM_START( slrassltj ) /* Japan version JAA */ - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "792jaa01.21u", 0x000003, 0x080000, CRC(112717c6) SHA1(be5066e1aefef20b6eab2340abc1bdc3d7a5a6e3) ) // ROM check screen shows version as: SOLAR ASSAULT DR2 VER JA-A - ROM_LOAD32_BYTE( "792jaa02.19u", 0x000002, 0x080000, CRC(c48582bd) SHA1(194dfd51704ed5eeecb2b56b6bbf651c7cf7701e) ) // Title screen shows Solar Assault Revised - ROM_LOAD32_BYTE( "792jaa03.21r", 0x000001, 0x080000, CRC(e691009d) SHA1(c8ae58fd280a18151b0e33511269c3685e30fe63) ) - ROM_LOAD32_BYTE( "792jaa04.19r", 0x000000, 0x080000, CRC(1e73a145) SHA1(e519d17d22b5a61570a9bf72ea840f6398928952) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "792jaa01.21u", 0x000000, 0x080000, CRC(112717c6) SHA1(be5066e1aefef20b6eab2340abc1bdc3d7a5a6e3) ) // ROM check screen shows version as: SOLAR ASSAULT DR2 VER JA-A + ROM_LOAD32_BYTE( "792jaa02.19u", 0x000001, 0x080000, CRC(c48582bd) SHA1(194dfd51704ed5eeecb2b56b6bbf651c7cf7701e) ) // Title screen shows Solar Assault Revised + ROM_LOAD32_BYTE( "792jaa03.21r", 0x000002, 0x080000, CRC(e691009d) SHA1(c8ae58fd280a18151b0e33511269c3685e30fe63) ) + ROM_LOAD32_BYTE( "792jaa04.19r", 0x000003, 0x080000, CRC(1e73a145) SHA1(e519d17d22b5a61570a9bf72ea840f6398928952) ) ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ ROM_LOAD32_WORD_SWAP( "792a05.14u", 0x000000, 0x200000, CRC(9a27edfc) SHA1(c028b6440eb1b0c814c4db45918e580662ac2d9a) ) @@ -1376,11 +1376,11 @@ ROM_START( slrassltj ) /* Japan version JAA */ ROM_END ROM_START( slrassltj1 ) /* Japan version JAA */ - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "672jaa_a01.21u", 0x000003, 0x080000, CRC(e2821f51) SHA1(20c6c2402ba2b564b8f77bcf452abe2d7e023417) ) // ROM check screen shows version as: SOLAR ASSAULT VER JA-A - ROM_LOAD32_BYTE( "672jaa_a02.19u", 0x000002, 0x080000, CRC(e3ac7031) SHA1(268588ac6e80463e51a399f53b2396b23faaddba) ) // Title screen shows subtitle "GRADIUS" - ROM_LOAD32_BYTE( "672jaa_a03.21r", 0x000001, 0x080000, CRC(52711d79) SHA1(8c89fbff9de21cc1e5f17c4ea08870faea648465) ) - ROM_LOAD32_BYTE( "672jaa_a04.19r", 0x000000, 0x080000, CRC(f7419454) SHA1(44cef7f1181cb9c11b013ab0b7e26aa1e95d3746) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "672jaa_a01.21u", 0x000000, 0x080000, CRC(e2821f51) SHA1(20c6c2402ba2b564b8f77bcf452abe2d7e023417) ) // ROM check screen shows version as: SOLAR ASSAULT VER JA-A + ROM_LOAD32_BYTE( "672jaa_a02.19u", 0x000001, 0x080000, CRC(e3ac7031) SHA1(268588ac6e80463e51a399f53b2396b23faaddba) ) // Title screen shows subtitle "GRADIUS" + ROM_LOAD32_BYTE( "672jaa_a03.21r", 0x000002, 0x080000, CRC(52711d79) SHA1(8c89fbff9de21cc1e5f17c4ea08870faea648465) ) + ROM_LOAD32_BYTE( "672jaa_a04.19r", 0x000003, 0x080000, CRC(f7419454) SHA1(44cef7f1181cb9c11b013ab0b7e26aa1e95d3746) ) ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ ROM_LOAD32_WORD_SWAP( "672a05.14u", 0x000000, 0x200000, CRC(f6f296e4) SHA1(2ba4ede36f3392aa53a730614272fa80df65281c) ) @@ -1406,11 +1406,11 @@ ROM_START( slrassltj1 ) /* Japan version JAA */ ROM_END ROM_START( hangplt ) /* Japan version JAB */ - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "685jab01.21u", 0x000003, 0x080000, CRC(f98a3e82) SHA1(94ebaa172b0e98c5cd08efaea5f56e707e5032b4) ) - ROM_LOAD32_BYTE( "685jab02.19u", 0x000002, 0x080000, CRC(20730cdc) SHA1(71b2cf7077ab7db875f9030e21afd05905f57ce5) ) - ROM_LOAD32_BYTE( "685jab03.21r", 0x000001, 0x080000, CRC(77fa2248) SHA1(a662b84945b3d268fed15952cc793d821233735e) ) - ROM_LOAD32_BYTE( "685jab04.19r", 0x000000, 0x080000, CRC(ab6773df) SHA1(91d3f849a1cc5fa4b2fbd876d53402a548198c41) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "685jab01.21u", 0x000000, 0x080000, CRC(f98a3e82) SHA1(94ebaa172b0e98c5cd08efaea5f56e707e5032b4) ) + ROM_LOAD32_BYTE( "685jab02.19u", 0x000001, 0x080000, CRC(20730cdc) SHA1(71b2cf7077ab7db875f9030e21afd05905f57ce5) ) + ROM_LOAD32_BYTE( "685jab03.21r", 0x000002, 0x080000, CRC(77fa2248) SHA1(a662b84945b3d268fed15952cc793d821233735e) ) + ROM_LOAD32_BYTE( "685jab04.19r", 0x000003, 0x080000, CRC(ab6773df) SHA1(91d3f849a1cc5fa4b2fbd876d53402a548198c41) ) ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ ROM_LOAD32_WORD_SWAP( "685a05.14u", 0x000000, 0x200000, CRC(ba1c8f40) SHA1(ce4ed641c1d6d44447eaaada16f305f1d7fb9ee2) ) @@ -1432,11 +1432,11 @@ ROM_START( hangplt ) /* Japan version JAB */ ROM_END ROM_START( hangpltu ) /* USA version UAA */ - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "685uaa01.21u", 0x000003, 0x080000, CRC(83a5b866) SHA1(6859590f212c7debb19924f0174e4cd1bfc011bc) ) - ROM_LOAD32_BYTE( "685uaa02.19u", 0x000002, 0x080000, CRC(765906d6) SHA1(9085a2346756b3b628fef91b7afc131aba434654) ) - ROM_LOAD32_BYTE( "685uaa03.21r", 0x000001, 0x080000, CRC(cb0147a3) SHA1(7bcab760c01ea7e24f4ca5793e081aafa97f68a3) ) - ROM_LOAD32_BYTE( "685uaa04.19r", 0x000000, 0x080000, CRC(a5fda56b) SHA1(4d86f488f411ec16fa3be830206a44214941d1fe) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "685uaa01.21u", 0x000000, 0x080000, CRC(83a5b866) SHA1(6859590f212c7debb19924f0174e4cd1bfc011bc) ) + ROM_LOAD32_BYTE( "685uaa02.19u", 0x000001, 0x080000, CRC(765906d6) SHA1(9085a2346756b3b628fef91b7afc131aba434654) ) + ROM_LOAD32_BYTE( "685uaa03.21r", 0x000002, 0x080000, CRC(cb0147a3) SHA1(7bcab760c01ea7e24f4ca5793e081aafa97f68a3) ) + ROM_LOAD32_BYTE( "685uaa04.19r", 0x000003, 0x080000, CRC(a5fda56b) SHA1(4d86f488f411ec16fa3be830206a44214941d1fe) ) ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ ROM_LOAD32_WORD_SWAP( "685a05.14u", 0x000000, 0x200000, CRC(ba1c8f40) SHA1(ce4ed641c1d6d44447eaaada16f305f1d7fb9ee2) ) diff --git a/src/mame/drivers/harddriv.cpp b/src/mame/drivers/harddriv.cpp index f037aa5e001..ae8b72d5597 100644 --- a/src/mame/drivers/harddriv.cpp +++ b/src/mame/drivers/harddriv.cpp @@ -385,7 +385,7 @@ harddriv_state::harddriv_state(const machine_config &mconfig, device_type type, m_ds3_speedup_pc(0), m_ds3_transfer_pc(0), m_gsp_multisync(0), - m_gsp_vram(*this, "gsp_vram", 16), + m_gsp_vram(*this, "gsp_vram"), m_gsp_control_lo(*this, "gsp_control_lo"), m_gsp_control_hi(*this, "gsp_control_hi"), m_gsp_paletteram_lo(*this, "gsp_palram_lo"), diff --git a/src/mame/drivers/hec2hrp.cpp b/src/mame/drivers/hec2hrp.cpp index 8dfb44e1682..8175a1c1001 100644 --- a/src/mame/drivers/hec2hrp.cpp +++ b/src/mame/drivers/hec2hrp.cpp @@ -320,7 +320,7 @@ MACHINE_START_MEMBER(hec2hrp_state,hec2hrx) // Memory install for bank switching m_bank[1]->configure_entry(HECTOR_BANK_PROG, r+0x10000); - m_bank[1]->configure_entry(HECTOR_BANK_VIDEO, m_hector_videoram_hrx); // Video RAM + m_bank[1]->configure_entry(HECTOR_BANK_VIDEO, m_hector_vram); // Video RAM // Set bank HECTOR_BANK_PROG as basic bank m_bank[1]->set_entry(HECTOR_BANK_PROG); @@ -336,9 +336,6 @@ MACHINE_START_MEMBER(hec2hrp_state,hec2hrx) m_bank[3]->configure_entry(DISCII_BANK_RAM, r); // RAM m_bank[3]->set_entry(DISCII_BANK_ROM); - // As video HR ram is in bank, use external memory - m_hector_vram.set_target(m_hector_videoram_hrx,m_hector_vram.bytes()); - hector_init(); } /*****************************************************************************/ @@ -350,7 +347,7 @@ MACHINE_START_MEMBER(hec2hrp_state,hec2mdhrx) // Memory install for bank switching m_bank[1]->configure_entry(HECTOR_BANK_PROG, r+0x10000); - m_bank[1]->configure_entry(HECTOR_BANK_VIDEO, m_hector_videoram_hrx); // Video RAM + m_bank[1]->configure_entry(HECTOR_BANK_VIDEO, m_hector_vram); // Video RAM // Set HECTOR_BANK_PROG as basic bank m_bank[1]->set_entry(HECTOR_BANK_PROG); @@ -361,9 +358,6 @@ MACHINE_START_MEMBER(hec2hrp_state,hec2mdhrx) m_bank[2]->configure_entry(HECTOR_BANK_DISC, memregion("page2")->base() ); // ROM mini disc page m_bank[2]->set_entry(HECTOR_BANK_BASE); - // As video HR ram is in bank, use external memory - m_hector_vram.set_target(m_hector_videoram_hrx,m_hector_vram.bytes()); - hector_init(); } @@ -596,7 +590,6 @@ ROM_START( hec2mdhrx ) ROM_LOAD( "mdic1.bin" , 0x0000,0x2000, CRC(ddda1065) SHA1(e7bba14a72605238d2f8299da029b8320a563254)) ROM_LOAD( "mdicmb.bin" , 0x2000,0x2000, CRC(d8090747) SHA1(f2925b68002307562e2ea5e36b740e5458f0f0eb)) - ROM_REGION( 0x4000, "page1", ROMREGION_ERASEFF ) // Page 1 = unused page ROM_REGION( 0x4000, "page2", ROMREGION_ERASEFF ) // Page 2 = minidisc page ROM_LOAD( "mdic3.bin" , 0x0000,0x2000, CRC(87801816) SHA1(ddf441f40df014b237cdf17430d1989f3a452d04)) ROM_LOAD( "mdicmb.bin" , 0x2000,0x2000, CRC(d8090747) SHA1(f2925b68002307562e2ea5e36b740e5458f0f0eb)) @@ -608,6 +601,7 @@ ROM_START( hec2mx80 ) // option roms ROM_REGION( 0x4000, "page1", ROMREGION_ERASEFF ) ROM_LOAD( "mx80c_page1.rom", 0x0000, 0x4000, CRC(4615f57c) SHA1(5de291bf3ae0320915133b99f1a088cb56c41658)) + ROM_REGION( 0x4000, "page2", ROMREGION_ERASEFF ) ROM_LOAD( "mx80c_page2.rom" , 0x0000,0x4000, CRC(2d5d975e) SHA1(48307132e0f3fad0262859bb8142d108f694a436)) // 2nd cpu @@ -621,6 +615,7 @@ ROM_START( hec2mx40 ) // option roms ROM_REGION( 0x4000, "page1", ROMREGION_ERASEFF ) ROM_LOAD( "mx40c_page1.rom", 0x0000, 0x4000, CRC(192a76fa) SHA1(062aa6df0b554b85774d4b5edeea8496a4baca35)) + ROM_REGION( 0x4000, "page2", ROMREGION_ERASEFF ) ROM_LOAD( "mx40c_page2.rom" , 0x0000,0x4000, CRC(ef1b2654) SHA1(66624ea040cb7ede4720ad2eca0738d0d3bad89a)) // 2nd cpu diff --git a/src/mame/drivers/hng64.cpp b/src/mame/drivers/hng64.cpp index 38cf63ed9b8..40145c4456e 100644 --- a/src/mame/drivers/hng64.cpp +++ b/src/mame/drivers/hng64.cpp @@ -831,7 +831,7 @@ void hng64_state::hng_map(address_map &map) { // main RAM / ROM map(0x00000000, 0x00ffffff).ram().share("mainram"); - map(0x04000000, 0x05ffffff).nopw().rom().region("gameprg", 0).share("cart"); + map(0x04000000, 0x05ffffff).nopw().rom().region("gameprg", 0); // Misc Peripherals map(0x1f700000, 0x1f7010ff).rw(FUNC(hng64_state::hng64_sysregs_r), FUNC(hng64_state::hng64_sysregs_w)).share("sysregs"); // various things @@ -849,7 +849,7 @@ void hng64_state::hng_map(address_map &map) map(0x1f808000, 0x1f8087ff).rw(FUNC(hng64_state::hng64_dualport_r), FUNC(hng64_state::hng64_dualport_w)).umask32(0xffffffff); // BIOS ROM - map(0x1fc00000, 0x1fc7ffff).nopw().rom().region("user1", 0).share("rombase"); + map(0x1fc00000, 0x1fc7ffff).nopw().rom().region("user1", 0); // Sprites map(0x20000000, 0x2000bfff).ram().share("spriteram"); @@ -2244,7 +2244,7 @@ ROM_START( hng64 ) HNG64_BIOS /* To placate MAME */ - ROM_REGION32_LE( 0x2000000, "gameprg", ROMREGION_ERASEFF ) + ROM_REGION32_BE( 0x2000000, "gameprg", ROMREGION_ERASEFF ) ROM_REGION( 0x4000, "scrtile", ROMREGION_ERASEFF ) ROM_REGION( 0x4000, "sprtile", ROMREGION_ERASEFF ) ROM_REGION( 0x1000000, "textures", ROMREGION_ERASEFF ) @@ -2256,9 +2256,9 @@ ROM_END ROM_START( roadedge ) HNG64_BIOS - ROM_REGION32_LE( 0x2000000, "gameprg", 0 ) - ROM_LOAD32_WORD( "001pr01b.81", 0x0000000, 0x400000, CRC(effbac30) SHA1(c1bddf3e511a8950f65ac7e452f81dbc4b7fd977) ) - ROM_LOAD32_WORD( "001pr02b.82", 0x0000002, 0x400000, CRC(b9aa4ad3) SHA1(9ab3c896dbdc45560b7127486e2db6ca3b15a057) ) + ROM_REGION32_BE( 0x2000000, "gameprg", 0 ) + ROM_LOAD32_WORD_SWAP( "001pr01b.81", 0x0000002, 0x400000, CRC(effbac30) SHA1(c1bddf3e511a8950f65ac7e452f81dbc4b7fd977) ) + ROM_LOAD32_WORD_SWAP( "001pr02b.82", 0x0000000, 0x400000, CRC(b9aa4ad3) SHA1(9ab3c896dbdc45560b7127486e2db6ca3b15a057) ) /* Scroll Characters 8x8x8 / 16x16x8 */ ROM_REGION( 0x1000000, "scrtile", 0 ) @@ -2309,11 +2309,11 @@ ROM_END ROM_START( sams64 ) HNG64_BIOS - ROM_REGION32_LE( 0x2000000, "gameprg", 0 ) - ROM_LOAD32_WORD( "002-pro1a.81", 0x0000000, 0x400000, CRC(e5b907c5) SHA1(83637ffaa9031d41a5bed3397a519d1dfa8052cb) ) - ROM_LOAD32_WORD( "002-pro2a.82", 0x0000002, 0x400000, CRC(803ed2eb) SHA1(666db47886a316e68b911311e5db3bc0f5b8a34d) ) - ROM_LOAD32_WORD( "002-pro3a.83", 0x0800000, 0x400000, CRC(582156a7) SHA1(a7bbbd472a53072cbfaed5d41d4265123c9e3f3d) ) - ROM_LOAD32_WORD( "002-pro4a.84", 0x0800002, 0x400000, CRC(5a8291e9) SHA1(ec1e5a5a0ba37393e8b93d78b4ac855109d45ec9) ) + ROM_REGION32_BE( 0x2000000, "gameprg", 0 ) + ROM_LOAD32_WORD_SWAP( "002-pro1a.81", 0x0000002, 0x400000, CRC(e5b907c5) SHA1(83637ffaa9031d41a5bed3397a519d1dfa8052cb) ) + ROM_LOAD32_WORD_SWAP( "002-pro2a.82", 0x0000000, 0x400000, CRC(803ed2eb) SHA1(666db47886a316e68b911311e5db3bc0f5b8a34d) ) + ROM_LOAD32_WORD_SWAP( "002-pro3a.83", 0x0800002, 0x400000, CRC(582156a7) SHA1(a7bbbd472a53072cbfaed5d41d4265123c9e3f3d) ) + ROM_LOAD32_WORD_SWAP( "002-pro4a.84", 0x0800000, 0x400000, CRC(5a8291e9) SHA1(ec1e5a5a0ba37393e8b93d78b4ac855109d45ec9) ) /* Scroll Characters 8x8x8 / 16x16x8 */ ROM_REGION( 0x2000000, "scrtile", 0 ) @@ -2364,9 +2364,9 @@ ROM_END ROM_START( xrally ) HNG64_BIOS - ROM_REGION32_LE( 0x2000000, "gameprg", 0 ) - ROM_LOAD32_WORD( "003-pr01a.81", 0x0000000, 0x400000, CRC(4e160388) SHA1(08fba66d0f0dab47f7db5bc7d411f4fc0e8219c8) ) - ROM_LOAD32_WORD( "003-pr02a.82", 0x0000002, 0x400000, CRC(c4dd4f18) SHA1(4db0e6d5cabd9e4f82d5905556174b9eff8ad4d9) ) + ROM_REGION32_BE( 0x2000000, "gameprg", 0 ) + ROM_LOAD32_WORD_SWAP( "003-pr01a.81", 0x0000002, 0x400000, CRC(4e160388) SHA1(08fba66d0f0dab47f7db5bc7d411f4fc0e8219c8) ) + ROM_LOAD32_WORD_SWAP( "003-pr02a.82", 0x0000000, 0x400000, CRC(c4dd4f18) SHA1(4db0e6d5cabd9e4f82d5905556174b9eff8ad4d9) ) /* Scroll Characters 8x8x8 / 16x16x8 */ ROM_REGION( 0x1000000, "scrtile", 0 ) @@ -2406,11 +2406,11 @@ ROM_END ROM_START( bbust2 ) HNG64_BIOS - ROM_REGION32_LE( 0x2000000, "gameprg", 0 ) - ROM_LOAD32_WORD( "004-pr01a.81", 0x0000000, 0x400000, CRC(7b836ece) SHA1(7a4a08251f1dd66c368ac203f5a006266e77f73d) ) - ROM_LOAD32_WORD( "004-pr02a.82", 0x0000002, 0x400000, CRC(8c55a988) SHA1(d9a61ac3d8550ce0ee6aab374c9f024912163180) ) - ROM_LOAD32_WORD( "004-pr03a.83", 0x0800000, 0x400000, CRC(f25a82dd) SHA1(74c0a03021ef424e0b9c3c818be297d2967b3012) ) - ROM_LOAD32_WORD( "004-pr04a.84", 0x0800002, 0x400000, CRC(9258312b) SHA1(fabac42c8a033e85d503be56f266f9386adff10b) ) + ROM_REGION32_BE( 0x2000000, "gameprg", 0 ) + ROM_LOAD32_WORD_SWAP( "004-pr01a.81", 0x0000002, 0x400000, CRC(7b836ece) SHA1(7a4a08251f1dd66c368ac203f5a006266e77f73d) ) + ROM_LOAD32_WORD_SWAP( "004-pr02a.82", 0x0000000, 0x400000, CRC(8c55a988) SHA1(d9a61ac3d8550ce0ee6aab374c9f024912163180) ) + ROM_LOAD32_WORD_SWAP( "004-pr03a.83", 0x0800002, 0x400000, CRC(f25a82dd) SHA1(74c0a03021ef424e0b9c3c818be297d2967b3012) ) + ROM_LOAD32_WORD_SWAP( "004-pr04a.84", 0x0800000, 0x400000, CRC(9258312b) SHA1(fabac42c8a033e85d503be56f266f9386adff10b) ) /* Scroll Characters 8x8x8 / 16x16x8 */ ROM_REGION( 0x1000000, "scrtile", 0 ) @@ -2454,15 +2454,15 @@ ROM_END ROM_START( sams64_2 ) HNG64_BIOS - ROM_REGION32_LE( 0x2000000, "gameprg", 0 ) - ROM_LOAD32_WORD( "005pr01a.81", 0x0000000, 0x400000, CRC(a69d7700) SHA1(a580783a109bc3e24248d70bcd67f62dd7d8a5dd) ) - ROM_LOAD32_WORD( "005pr02a.82", 0x0000002, 0x400000, CRC(38b9e6b3) SHA1(d1dad8247d920cc66854a0096e1c7845842d2e1c) ) - ROM_LOAD32_WORD( "005pr03a.83", 0x0800000, 0x400000, CRC(0bc738a8) SHA1(79893b0e1c4a31e02ab385c4382684245975ae8f) ) - ROM_LOAD32_WORD( "005pr04a.84", 0x0800002, 0x400000, CRC(6b504852) SHA1(fcdcab432162542d249818a6cd15b8f2e8230f97) ) - ROM_LOAD32_WORD( "005pr05a.85", 0x1000000, 0x400000, CRC(32a743d3) SHA1(4088b930a1a4d6224a0939ef3942af1bf605cdb5) ) - ROM_LOAD32_WORD( "005pr06a.86", 0x1000002, 0x400000, CRC(c09fa615) SHA1(697d6769c16b3c8f73a6df4a1e268ec40cb30d51) ) - ROM_LOAD32_WORD( "005pr07a.87", 0x1800000, 0x400000, CRC(44286ad3) SHA1(1f890c74c0da0d34940a880468e68f7fb1417813) ) - ROM_LOAD32_WORD( "005pr08a.88", 0x1800002, 0x400000, CRC(d094eb67) SHA1(3edc8d608c631a05223e1d05157cd3daf2d6597a) ) + ROM_REGION32_BE( 0x2000000, "gameprg", 0 ) + ROM_LOAD32_WORD_SWAP( "005pr01a.81", 0x0000002, 0x400000, CRC(a69d7700) SHA1(a580783a109bc3e24248d70bcd67f62dd7d8a5dd) ) + ROM_LOAD32_WORD_SWAP( "005pr02a.82", 0x0000000, 0x400000, CRC(38b9e6b3) SHA1(d1dad8247d920cc66854a0096e1c7845842d2e1c) ) + ROM_LOAD32_WORD_SWAP( "005pr03a.83", 0x0800002, 0x400000, CRC(0bc738a8) SHA1(79893b0e1c4a31e02ab385c4382684245975ae8f) ) + ROM_LOAD32_WORD_SWAP( "005pr04a.84", 0x0800000, 0x400000, CRC(6b504852) SHA1(fcdcab432162542d249818a6cd15b8f2e8230f97) ) + ROM_LOAD32_WORD_SWAP( "005pr05a.85", 0x1000002, 0x400000, CRC(32a743d3) SHA1(4088b930a1a4d6224a0939ef3942af1bf605cdb5) ) + ROM_LOAD32_WORD_SWAP( "005pr06a.86", 0x1000000, 0x400000, CRC(c09fa615) SHA1(697d6769c16b3c8f73a6df4a1e268ec40cb30d51) ) + ROM_LOAD32_WORD_SWAP( "005pr07a.87", 0x1800002, 0x400000, CRC(44286ad3) SHA1(1f890c74c0da0d34940a880468e68f7fb1417813) ) + ROM_LOAD32_WORD_SWAP( "005pr08a.88", 0x1800000, 0x400000, CRC(d094eb67) SHA1(3edc8d608c631a05223e1d05157cd3daf2d6597a) ) /* Scroll Characters 8x8x8 / 16x16x8 */ ROM_REGION( 0x4000000, "scrtile", 0 ) @@ -2526,11 +2526,11 @@ ROM_END ROM_START( fatfurwa ) HNG64_BIOS - ROM_REGION32_LE( 0x2000000, "gameprg", 0 ) - ROM_LOAD32_WORD( "006pr01a.81", 0x0000000, 0x400000, CRC(3830efa1) SHA1(9d8c941ccb6cbe8d138499cf9d335db4ac7a9ec0) ) - ROM_LOAD32_WORD( "006pr02a.82", 0x0000002, 0x400000, CRC(8d5de84e) SHA1(e3ae014263f370c2836f62ab323f1560cb3a9cf0) ) - ROM_LOAD32_WORD( "006pr03a.83", 0x0800000, 0x400000, CRC(c811b458) SHA1(7d94e0df501fb086b2e5cf08905d7a3adc2c6472) ) - ROM_LOAD32_WORD( "006pr04a.84", 0x0800002, 0x400000, CRC(de708d6c) SHA1(2c9848e7bbf61c574370f9ecab5f5a6ba63339fd) ) + ROM_REGION32_BE( 0x2000000, "gameprg", 0 ) + ROM_LOAD32_WORD_SWAP( "006pr01a.81", 0x0000002, 0x400000, CRC(3830efa1) SHA1(9d8c941ccb6cbe8d138499cf9d335db4ac7a9ec0) ) + ROM_LOAD32_WORD_SWAP( "006pr02a.82", 0x0000000, 0x400000, CRC(8d5de84e) SHA1(e3ae014263f370c2836f62ab323f1560cb3a9cf0) ) + ROM_LOAD32_WORD_SWAP( "006pr03a.83", 0x0800002, 0x400000, CRC(c811b458) SHA1(7d94e0df501fb086b2e5cf08905d7a3adc2c6472) ) + ROM_LOAD32_WORD_SWAP( "006pr04a.84", 0x0800000, 0x400000, CRC(de708d6c) SHA1(2c9848e7bbf61c574370f9ecab5f5a6ba63339fd) ) /* Scroll Characters 8x8x8 / 16x16x8 */ ROM_REGION( 0x4000000, "scrtile", 0 ) @@ -2591,13 +2591,13 @@ ROM_END ROM_START( buriki ) HNG64_BIOS - ROM_REGION32_LE( 0x2000000, "gameprg", 0 ) - ROM_LOAD32_WORD( "007pr01b.81", 0x0000000, 0x400000, CRC(a31202f5) SHA1(c657729b292d394ced021a0201a1c5608a7118ba) ) - ROM_LOAD32_WORD( "007pr02b.82", 0x0000002, 0x400000, CRC(a563fed6) SHA1(9af9a021beb814e35df968abe5a99225a124b5eb) ) - ROM_LOAD32_WORD( "007pr03a.83", 0x0800000, 0x400000, CRC(da5f6105) SHA1(5424cf5289cef66e301e968b4394e551918fe99b) ) - ROM_LOAD32_WORD( "007pr04a.84", 0x0800002, 0x400000, CRC(befc7bce) SHA1(83d9ecf944e03a40cf25ee288077c2265d6a588a) ) - ROM_LOAD32_WORD( "007pr05a.85", 0x1000000, 0x400000, CRC(013e28bc) SHA1(45e5ac45b42b26957c2877ac1042472c4b5ec914) ) - ROM_LOAD32_WORD( "007pr06a.86", 0x1000002, 0x400000, CRC(0620fccc) SHA1(e0bffc56b019c79276a4ef5ec7354edda15b0889) ) + ROM_REGION32_BE( 0x2000000, "gameprg", 0 ) + ROM_LOAD32_WORD_SWAP( "007pr01b.81", 0x0000002, 0x400000, CRC(a31202f5) SHA1(c657729b292d394ced021a0201a1c5608a7118ba) ) + ROM_LOAD32_WORD_SWAP( "007pr02b.82", 0x0000000, 0x400000, CRC(a563fed6) SHA1(9af9a021beb814e35df968abe5a99225a124b5eb) ) + ROM_LOAD32_WORD_SWAP( "007pr03a.83", 0x0800002, 0x400000, CRC(da5f6105) SHA1(5424cf5289cef66e301e968b4394e551918fe99b) ) + ROM_LOAD32_WORD_SWAP( "007pr04a.84", 0x0800000, 0x400000, CRC(befc7bce) SHA1(83d9ecf944e03a40cf25ee288077c2265d6a588a) ) + ROM_LOAD32_WORD_SWAP( "007pr05a.85", 0x1000002, 0x400000, CRC(013e28bc) SHA1(45e5ac45b42b26957c2877ac1042472c4b5ec914) ) + ROM_LOAD32_WORD_SWAP( "007pr06a.86", 0x1000000, 0x400000, CRC(0620fccc) SHA1(e0bffc56b019c79276a4ef5ec7354edda15b0889) ) /* Scroll Characters 8x8x8 / 16x16x8 */ ROM_REGION( 0x4000000, "scrtile", 0 ) @@ -2660,7 +2660,7 @@ GAME( 1997, hng64, 0, hng64_default, hng64, hng64_state, init_hng64, /* Games */ GAME( 1997, roadedge, hng64, hng64_drive, hng64_drive, hng64_state, init_roadedge, ROT0, "SNK", "Roads Edge / Round Trip (rev.B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_SOUND ) /* 001 */ GAME( 1998, sams64, hng64, hng64_fight, hng64_fight, hng64_state, init_ss64, ROT0, "SNK", "Samurai Shodown 64 / Samurai Spirits 64", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_SOUND ) /* 002 */ -GAME( 1998, xrally, hng64, hng64_drive, hng64_drive, hng64_state, init_hng64_drive, ROT0, "SNK", "Xtreme Rally / Off Beat Racer!", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_SOUND ) /* 003 */ +GAME( 1998, xrally, hng64, hng64_drive, hng64_drive, hng64_state, init_hng64_drive, ROT0, "SNK", "Xtreme Rally / Off Beat Racer!", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_SOUND ) /* 003 */ GAME( 1998, bbust2, hng64, hng64_shoot, hng64_shoot, hng64_state, init_hng64_shoot, ROT0, "SNK", "Beast Busters 2nd Nightmare", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_SOUND ) /* 004 */ GAME( 1998, sams64_2, hng64, hng64_fight, hng64_fight, hng64_state, init_ss64, ROT0, "SNK", "Samurai Shodown: Warrior's Rage / Samurai Spirits 2: Asura Zanmaden", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_SOUND ) /* 005 */ GAME( 1998, fatfurwa, hng64, hng64_fight, hng64_fight, hng64_state, init_hng64_fght, ROT0, "SNK", "Fatal Fury: Wild Ambition (rev.A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_SOUND ) /* 006 */ diff --git a/src/mame/drivers/hornet.cpp b/src/mame/drivers/hornet.cpp index 5ad07a0e6ca..7ebd29f7cca 100644 --- a/src/mame/drivers/hornet.cpp +++ b/src/mame/drivers/hornet.cpp @@ -784,8 +784,8 @@ void hornet_state::hornet_map(address_map &map) map(0x7d020000, 0x7d021fff).rw("m48t58", FUNC(timekeeper_device::read), FUNC(timekeeper_device::write)); /* M48T58Y RTC/NVRAM */ map(0x7d030000, 0x7d03000f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w)); map(0x7e000000, 0x7e7fffff).rom().region("user2", 0); /* Data ROM */ - map(0x7f000000, 0x7f3fffff).rom().share("share2"); - map(0x7fc00000, 0x7fffffff).rom().region("user1", 0).share("share2"); /* Program ROM */ + map(0x7f000000, 0x7f3fffff).rom().region("user1", 0); + map(0x7fc00000, 0x7fffffff).rom().region("user1", 0); /* Program ROM */ } void hornet_state::terabrst_map(address_map &map) diff --git a/src/mame/drivers/hp3478a.cpp b/src/mame/drivers/hp3478a.cpp index 36e48e5e7d0..c92411bdf94 100644 --- a/src/mame/drivers/hp3478a.cpp +++ b/src/mame/drivers/hp3478a.cpp @@ -594,7 +594,7 @@ void hp3478a_state::i8039_io(address_map &map) void hp3478a_state::io_bank(address_map &map) { map.unmap_value_high(); - map(0x000, 0x0ff).ram().region("nvram", 0).share("nvram").w(FUNC(hp3478a_state::nvwrite)); + map(0x000, 0x0ff).ram().share("nvram").w(FUNC(hp3478a_state::nvwrite)); map(0x100, 0x107).ram().share("gpibregs"); //XXX TODO : connect to i8291.cpp map(0x200, 0x2ff).portr("DIP"); } @@ -714,9 +714,6 @@ void hp3478a_state::hp3478a(machine_config &config) ROM_START( hp3478a ) ROM_REGION( 0x2000, "maincpu", 0 ) ROM_LOAD("rom_dc118.bin", 0, 0x2000, CRC(10097ced) SHA1(bd665cf7e07e63f825b2353c8322ed8a4376b3bd)) //main CPU ROM, can match other datecodes too - - ROM_REGION( 0x100, "nvram", 0 ) /* Calibration RAM, battery-backed */ - ROM_LOAD( "calram.bin", 0, 0x100, NO_DUMP) ROM_END /****************************************************************************** diff --git a/src/mame/drivers/ibm6580.cpp b/src/mame/drivers/ibm6580.cpp index b8912a37383..02582a7f7fe 100644 --- a/src/mame/drivers/ibm6580.cpp +++ b/src/mame/drivers/ibm6580.cpp @@ -827,10 +827,7 @@ uint32_t ibm6580_state::screen_update(screen_device &screen, bitmap_ind16 &bitma void ibm6580_state::machine_start() { - address_space &program = m_maincpu->space(AS_PROGRAM); - - program.install_readwrite_bank(0, m_ram->size() - 1, "bank10"); - membank("bank10")->set_base(m_ram->pointer()); + m_maincpu->space(AS_PROGRAM).install_ram(0, m_ram->size() - 1, m_ram->pointer()); m_fdc->set_rate(500000); // XXX workaround diff --git a/src/mame/drivers/igspoker.cpp b/src/mame/drivers/igspoker.cpp index b4b5cc36602..51ff5c64e3e 100644 --- a/src/mame/drivers/igspoker.cpp +++ b/src/mame/drivers/igspoker.cpp @@ -409,7 +409,7 @@ uint8_t igspoker_state::exp_rom_r(offs_t offset) void igspoker_state::igspoker_prg_map(address_map &map) { map(0x0000, 0xefff).rom(); - map(0xf000, 0xffff).ram().region("maincpu", 0xf000); + map(0xf000, 0xffff).ram(); } void igspoker_state::igspoker_io_map(address_map &map) diff --git a/src/mame/drivers/indigo.cpp b/src/mame/drivers/indigo.cpp index 102d06cae26..dae3a45f077 100644 --- a/src/mame/drivers/indigo.cpp +++ b/src/mame/drivers/indigo.cpp @@ -158,7 +158,7 @@ void indigo_state::indigo_map(address_map &map) void indigo3k_state::mem_map(address_map &map) { indigo_map(map); - map(0x1fc00000, 0x1fc3ffff).rom().share("share10").region("user1", 0); + map(0x1fc00000, 0x1fc3ffff).rom().region("user1", 0); } void indigo4k_state::write_ram(offs_t offset, uint64_t data, uint64_t mem_mask) @@ -185,7 +185,7 @@ void indigo4k_state::mem_map(address_map &map) map(0x00000000, 0x0007ffff).bankrw("bank1"); map(0x08000000, 0x17ffffff).ram().share("share1").w(FUNC(indigo4k_state::write_ram)); /* 128 MB of main RAM */ map(0x1fa00000, 0x1fa1ffff).rw(m_mem_ctrl, FUNC(sgi_mc_device::read), FUNC(sgi_mc_device::write)); - map(0x1fc00000, 0x1fc7ffff).rom().share("share5").region("user1", 0); + map(0x1fc00000, 0x1fc7ffff).rom().region("user1", 0); map(0x20000000, 0x27ffffff).ram().share("share1").w(FUNC(indigo4k_state::write_ram)); /* 128 MB of main RAM */ } diff --git a/src/mame/drivers/irobot.cpp b/src/mame/drivers/irobot.cpp index be7988dd7fc..b627d539d86 100644 --- a/src/mame/drivers/irobot.cpp +++ b/src/mame/drivers/irobot.cpp @@ -148,7 +148,7 @@ void irobot_state::irobot_map(address_map &map) map(0x1300, 0x1300).mirror(0xff).r("adc", FUNC(adc0809_device::data_r)); map(0x1400, 0x143f).rw(FUNC(irobot_state::quad_pokeyn_r), FUNC(irobot_state::quad_pokeyn_w)); map(0x1800, 0x18ff).w(FUNC(irobot_state::irobot_paletteram_w)); - map(0x1900, 0x19ff).writeonly(); /* Watchdog reset */ + map(0x1900, 0x19ff).nopw(); /* Watchdog reset */ map(0x1a00, 0x1a00).w(FUNC(irobot_state::irobot_clearfirq_w)); map(0x1b00, 0x1b03).mirror(0xfc).w("adc", FUNC(adc0809_device::address_offset_start_w)); map(0x1c00, 0x1fff).ram().share("videoram"); diff --git a/src/mame/drivers/itech32.cpp b/src/mame/drivers/itech32.cpp index 8882fcc0ac9..52d7f8a0236 100644 --- a/src/mame/drivers/itech32.cpp +++ b/src/mame/drivers/itech32.cpp @@ -632,13 +632,13 @@ u16 drivedge_state::gas_r() u16 itech32_state::wcbowl_prot_result_r() { - return m_main_ram[0x111d/2]; + return m_nvram[0x111d/2]; } u8 itech32_state::itech020_prot_result_r() { - u32 result = ((u32 *)m_main_ram.target())[m_itech020_prot_address >> 2]; + u32 result = ((u32 *)m_nvram.target())[m_itech020_prot_address >> 2]; result >>= (~m_itech020_prot_address & 3) * 8; return result & 0xff; } @@ -850,7 +850,7 @@ u32 drivedge_state::tms2_speedup_r(address_space &space) void itech32_state::nvram_init(nvram_device &nvram, void *base, size_t length) { // if nvram is the main RAM, don't overwrite exception vectors - int start = (base == m_main_ram) ? 0x80 : 0x00; + int start = (base == m_nvram) ? 0x80 : 0x00; for (int i = start; i < length; i++) ((u8 *)base)[i] = machine().rand(); } @@ -860,7 +860,7 @@ void drivedge_state::nvram_init(nvram_device &nvram, void *base, size_t length) itech32_state::nvram_init(nvram, base, length); // due to accessing uninitialized RAM, we need this hack - ((u32 *)m_main_ram.target())[0x2ce4/4] = 0x0000001e; + ((u32 *)m_nvram.target())[0x2ce4/4] = 0x0000001e; } /************************************* @@ -885,7 +885,7 @@ void itech32_state::timekill_map(address_map &map) map(0x080000, 0x08007f).rw(FUNC(itech32_state::video_r), FUNC(itech32_state::video_w)).share("video"); map(0x0a0000, 0x0a0001).w(FUNC(itech32_state::int1_ack_w)); map(0x0c0000, 0x0c7fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); - map(0x100000, 0x17ffff).rom().region("user1", 0).share("main_rom"); + map(0x100000, 0x17ffff).rom().region("user1", 0); } @@ -906,7 +906,7 @@ void itech32_state::bloodstm_map(address_map &map) map(0x580000, 0x59ffff).ram().w(FUNC(itech32_state::bloodstm_paletteram_w)).share("palette"); map(0x700001, 0x700001).w(FUNC(itech32_state::bloodstm_plane_w)); map(0x780000, 0x780001).portr("EXTRA"); - map(0x800000, 0x87ffff).mirror(0x780000).rom().region("user1", 0).share("main_rom"); + map(0x800000, 0x87ffff).mirror(0x780000).rom().region("user1", 0); } @@ -920,7 +920,7 @@ u32 itech32_state::test1_r(offs_t offset, u32 mem_mask) if (ACCESSING_BITS_16_23 && !m_written[0x100 + offset*4+1]) logerror("%06X:read from uninitialized memory %04X\n", m_maincpu->pc(), 0x100 + offset*4+1); if (ACCESSING_BITS_8_15 && !m_written[0x100 + offset*4+2]) logerror("%06X:read from uninitialized memory %04X\n", m_maincpu->pc(), 0x100 + offset*4+2); if (ACCESSING_BITS_0_7 && !m_written[0x100 + offset*4+3]) logerror("%06X:read from uninitialized memory %04X\n", m_maincpu->pc(), 0x100 + offset*4+3); - return ((u32 *)m_main_ram)[0x100/4 + offset]; + return ((u32 *)m_nvram)[0x100/4 + offset]; } void itech32_state::test1_w(offs_t offset, u32 data, u32 mem_mask) @@ -929,7 +929,7 @@ void itech32_state::test1_w(offs_t offset, u32 data, u32 mem_mask) if (ACCESSING_BITS_16_23) m_written[0x100 + offset*4+1] = 1; if (ACCESSING_BITS_8_15) m_written[0x100 + offset*4+2] = 1; if (ACCESSING_BITS_0_7) m_written[0x100 + offset*4+3] = 1; - COMBINE_DATA(&((u32 *)m_main_ram)[0x100/4 + offset]); + COMBINE_DATA(&((u32 *)m_nvram)[0x100/4 + offset]); } u32 itech32_state::test2_r(offs_t offset, u32 mem_mask) @@ -938,7 +938,7 @@ u32 itech32_state::test2_r(offs_t offset, u32 mem_mask) if (ACCESSING_BITS_16_23 && !m_written[0xc00 + offset*4+1]) logerror("%06X:read from uninitialized memory %04X\n", m_maincpu->pc(), 0xc00 + offset*4+1); if (ACCESSING_BITS_8_15 && !m_written[0xc00 + offset*4+2]) logerror("%06X:read from uninitialized memory %04X\n", m_maincpu->pc(), 0xc00 + offset*4+2); if (ACCESSING_BITS_0_7 && !m_written[0xc00 + offset*4+3]) logerror("%06X:read from uninitialized memory %04X\n", m_maincpu->pc(), 0xc00 + offset*4+3); - return ((u32 *)m_main_ram)[0xc00/4 + offset]; + return ((u32 *)m_nvram)[0xc00/4 + offset]; } void itech32_state::test2_w(offs_t offset, u32 data, u32 mem_mask) @@ -947,7 +947,7 @@ void itech32_state::test2_w(offs_t offset, u32 data, u32 mem_mask) if (ACCESSING_BITS_16_23) m_written[0xc00 + offset*4+1] = 1; if (ACCESSING_BITS_8_15) m_written[0xc00 + offset*4+2] = 1; if (ACCESSING_BITS_0_7) m_written[0xc00 + offset*4+3] = 1; - COMBINE_DATA(&((u32 *)m_main_ram)[0xc00/4 + offset]); + COMBINE_DATA(&((u32 *)m_nvram)[0xc00/4 + offset]); } #endif @@ -978,7 +978,7 @@ map(0x000c00, 0x007fff).mirror(0x40000).rw(FUNC(itech32_state::test2_r), FUNC(it map(0x280000, 0x280fff).ram().w(FUNC(drivedge_state::tms1_68k_ram_w)).share("tms1_ram"); map(0x300000, 0x300fff).ram().w(FUNC(drivedge_state::tms2_68k_ram_w)).share("tms2_ram"); map(0x380000, 0x380003).nopw(); // .w("watchdog", FUNC(watchdog_timer_device::reset16_w)); - map(0x600000, 0x607fff).rom().region("user1", 0).share("main_rom"); + map(0x600000, 0x607fff).rom().region("user1", 0); } void drivedge_state::tms1_map(address_map &map) @@ -1017,7 +1017,7 @@ void itech32_state::itech020_map(address_map &map) map(0x680000, 0x680003).nopw(); /* ! */ map(0x680800, 0x68083f).readonly().nopw(); /* Serial DUART Channel A/B & Top LED sign - To Do! */ map(0x700002, 0x700002).w(FUNC(itech32_state::itech020_plane_w)); - map(0x800000, 0xbfffff).rom().region("user1", 0).share("main_rom"); + map(0x800000, 0xbfffff).rom().region("user1", 0); } void shoottv_state::shoottv_map(address_map &map) @@ -4629,9 +4629,7 @@ ROM_END void itech32_state::init_program_rom() { - if (m_main_ram == nullptr) - m_main_ram.set_target(m_nvram, m_nvram.bytes()); - memcpy(m_main_ram, m_main_rom, 0x80); + memcpy(m_nvram, m_main_rom, 0x80); } diff --git a/src/mame/drivers/itech8.cpp b/src/mame/drivers/itech8.cpp index d443900b88d..51eb1960679 100644 --- a/src/mame/drivers/itech8.cpp +++ b/src/mame/drivers/itech8.cpp @@ -505,7 +505,6 @@ #include "cpu/z80/z80.h" #include "machine/6522via.h" #include "machine/6821pia.h" -#include "machine/nvram.h" #include "sound/2203intf.h" #include "sound/2608intf.h" #include "sound/3812intf.h" @@ -955,8 +954,8 @@ void itech8_state::gtg2_map(address_map &map) /*------ Ninja Clowns layout ------*/ void itech8_state::ninclown_map(address_map &map) { - map(0x000000, 0x00007f).ram().region("maincpu", 0); - map(0x000080, 0x003fff).ram().share("nvram"); + map(0x000000, 0x003fff).ram().share("nvram"); + map(0x000000, 0x000007).rom(); map(0x004000, 0x03ffff).rom(); map(0x040000, 0x07ffff).r(FUNC(itech8_state::rom_constant_r)); map(0x100080, 0x100080).w(m_soundlatch, FUNC(generic_latch_8_device::write)); @@ -1723,7 +1722,7 @@ WRITE_LINE_MEMBER(itech8_state::generate_tms34061_interrupt) void itech8_state::itech8_core_devices(machine_config &config) { - NVRAM(config, "nvram", nvram_device::DEFAULT_RANDOM); + NVRAM(config, m_nvram, nvram_device::DEFAULT_RANDOM); TICKET_DISPENSER(config, m_ticket, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW); @@ -1954,6 +1953,8 @@ void itech8_state::ninclown(machine_config &config) itech8_core_devices(config); itech8_sound_ym3812_external(config); + // m_nvram->set_custom_handler([this](nvram_device &, void *p, size_t s) { memcpy(p, memregion("maincpu")->base(), s); }, "vectors"); + M68000(config, m_maincpu, CLOCK_12MHz); m_maincpu->set_addrmap(AS_PROGRAM, &itech8_state::ninclown_map); diff --git a/src/mame/drivers/jackie.cpp b/src/mame/drivers/jackie.cpp index 7cf3d699def..7225da72082 100644 --- a/src/mame/drivers/jackie.cpp +++ b/src/mame/drivers/jackie.cpp @@ -342,7 +342,7 @@ uint8_t jackie_state::expram_r(offs_t offset) void jackie_state::prg_map(address_map &map) { map(0x0000, 0xefff).rom(); - map(0xf000, 0xffff).ram().region("maincpu", 0xf000); + map(0xf000, 0xffff).ram(); } void jackie_state::io_map(address_map &map) diff --git a/src/mame/drivers/jaguar.cpp b/src/mame/drivers/jaguar.cpp index 360d3553c0c..17062b14e08 100644 --- a/src/mame/drivers/jaguar.cpp +++ b/src/mame/drivers/jaguar.cpp @@ -1960,7 +1960,7 @@ image_init_result jaguar_state::quickload_cb(device_image_interface &image, cons { memset(m_shared_ram, 0, 0x200000); image.fseek(0, SEEK_SET); - image.fread( &memregion("maincpu")->base()[start-skip], quickload_size); + image.fread( &m_shared_ram[(start-skip)/4], quickload_size); quickload_begin = start; fix_endian(&memregion("maincpu")->base()[(start-skip)&0xfffffc], quickload_size); } diff --git a/src/mame/drivers/jalmah.cpp b/src/mame/drivers/jalmah.cpp index 8a9fb5a4f71..96e26a2abd4 100644 --- a/src/mame/drivers/jalmah.cpp +++ b/src/mame/drivers/jalmah.cpp @@ -129,6 +129,8 @@ public: m_maincpu(*this, "maincpu"), m_palette(*this, "palette"), m_tmap(*this, "scroll%u", 0), + m_jmcu_rom_region(*this, "jmcu_rom"), + m_jmcu_rom_share(*this, "jmcu_rom"), m_sharedram(*this, "sharedram"), m_prirom(*this, "prirom"), m_p1_key_io(*this, "P1_KEY%u", 0U), @@ -176,6 +178,8 @@ protected: required_device<cpu_device> m_maincpu; required_device<palette_device> m_palette; optional_device_array<megasys1_tilemap_device, 4> m_tmap; + optional_region_ptr<uint16_t> m_jmcu_rom_region; + optional_shared_ptr<uint16_t> m_jmcu_rom_share; uint16_t m_tile_bank; uint16_t m_pri; @@ -694,7 +698,7 @@ void jalmah_state::jalmah_map(address_map &map) void jalmah_state::jalmahv1_map(address_map &map) { jalmah_map(map); - map(0x100000, 0x10ffff).ram().region("jmcu_rom", 0); // extended ROM functions (not on real HW) + map(0x100000, 0x10ffff).ram().share("jmcu_rom"); // extended ROM functions (not on real HW) } void urashima_state::urashima_map(address_map &map) @@ -724,7 +728,7 @@ void urashima_state::urashima_map(address_map &map) map(0x0a0000, 0x0a1fff).noprw(); map(0x0f0000, 0x0f0fff).ram().share("sharedram");/*shared with MCU*/ map(0x0f1000, 0x0fffff).ram(); /*Work Ram*/ - map(0x100000, 0x10ffff).ram().region("jmcu_rom", 0);/*extra RAM for MCU code prg (NOT ON REAL HW!!!)*/ + map(0x100000, 0x10ffff).ram().share("jmcu_rom");/*extra RAM for MCU code prg (NOT ON REAL HW!!!)*/ } void jalmah_state::oki_map(address_map &map) @@ -1075,6 +1079,9 @@ void jalmah_state::machine_start() void jalmah_state::machine_reset() { + if(m_jmcu_rom_share) + memcpy(m_jmcu_rom_share, m_jmcu_rom_region, 0x10000); + m_pri = 0; refresh_priority_system(); @@ -1083,6 +1090,9 @@ void jalmah_state::machine_reset() void urashima_state::machine_reset() { + if(m_jmcu_rom_share) + memcpy(m_jmcu_rom_share, m_jmcu_rom_region, 0x10000); + // m_pri = 0; // initialize tilemap vram to sane defaults (test mode cares) diff --git a/src/mame/drivers/jr100.cpp b/src/mame/drivers/jr100.cpp index 748771028d0..f7758b8786f 100644 --- a/src/mame/drivers/jr100.cpp +++ b/src/mame/drivers/jr100.cpp @@ -73,7 +73,7 @@ public: , m_ram(*this, "ram") , m_pcg(*this, "pcg") , m_vram(*this, "vram") - , m_rom(*this, "rom") + , m_rom(*this, "maincpu") , m_via(*this, "via") , m_cassette(*this, "cassette") , m_speaker(*this, "speaker") @@ -104,7 +104,7 @@ private: required_shared_ptr<uint8_t> m_ram; required_shared_ptr<uint8_t> m_pcg; required_shared_ptr<uint8_t> m_vram; - required_shared_ptr<uint8_t> m_rom; + required_region_ptr<uint8_t> m_rom; required_device<via6522_device> m_via; required_device<cassette_image_device> m_cassette; required_device<speaker_sound_device> m_speaker; @@ -128,7 +128,7 @@ void jr100_state::mem_map(address_map &map) //map(0xcc00, 0xcfff).; expansion i/o //map(0xd000, 0xd7ff).rom(); expansion rom for printer control //map(0xd800, 0xdfff).rom(); expansion rom - map(0xe000, 0xffff).rom().share("rom").region("maincpu",0); + map(0xe000, 0xffff).rom().region("maincpu", 0); } // Input ports - names in [ ] are screen actions; otherwise the text is literally printed onscreen diff --git a/src/mame/drivers/jtc.cpp b/src/mame/drivers/jtc.cpp index 7c425e7eb46..9da8a967a49 100644 --- a/src/mame/drivers/jtc.cpp +++ b/src/mame/drivers/jtc.cpp @@ -93,6 +93,13 @@ class jtces40_state : public jtc_state { public: using jtc_state::jtc_state; + jtces40_state(const machine_config &mconfig, device_type type, const char *tag) + : jtc_state(mconfig, type, tag) + , m_video_ram_40(*this, "videoram40", JTC_ES40_VIDEORAM_SIZE, ENDIANNESS_BIG) + , m_color_ram_r(*this, "color_ram_r", JTC_ES40_VIDEORAM_SIZE, ENDIANNESS_BIG) + , m_color_ram_g(*this, "color_ram_g", JTC_ES40_VIDEORAM_SIZE, ENDIANNESS_BIG) + , m_color_ram_b(*this, "color_ram_b", JTC_ES40_VIDEORAM_SIZE, ENDIANNESS_BIG) + { } void jtces40(machine_config &config); private: virtual void video_start() override; @@ -101,9 +108,11 @@ private: void videoram_w(offs_t offset, u8 data); void banksel_w(u8 data); u8 m_video_bank; - std::unique_ptr<u8[]> m_color_ram_r; - std::unique_ptr<u8[]> m_color_ram_g; - std::unique_ptr<u8[]> m_color_ram_b; + + memory_share_creator<uint8_t> m_video_ram_40; + memory_share_creator<uint8_t> m_color_ram_r; + memory_share_creator<uint8_t> m_color_ram_g; + memory_share_creator<uint8_t> m_color_ram_b; void jtc_es40_mem(address_map &map); void es40_palette(palette_device &palette) const; }; @@ -195,7 +204,7 @@ void jtces40_state::videoram_w(offs_t offset, u8 data) if (BIT(m_video_bank, 7)) m_color_ram_r[offset] = data; if (BIT(m_video_bank, 6)) m_color_ram_g[offset] = data; if (BIT(m_video_bank, 5)) m_color_ram_b[offset] = data; - if (BIT(m_video_bank, 4)) m_video_ram[offset] = data; + if (BIT(m_video_bank, 4)) m_video_ram_40[offset] = data; } void jtces40_state::banksel_w(u8 data) @@ -707,18 +716,8 @@ void jtces40_state::es40_palette(palette_device &palette) const void jtces40_state::video_start() { - /* allocate memory */ - m_video_ram.allocate(JTC_ES40_VIDEORAM_SIZE); - m_color_ram_r = std::make_unique<u8[]>(JTC_ES40_VIDEORAM_SIZE); - m_color_ram_g = std::make_unique<u8[]>(JTC_ES40_VIDEORAM_SIZE); - m_color_ram_b = std::make_unique<u8[]>(JTC_ES40_VIDEORAM_SIZE); - /* register for state saving */ save_item(NAME(m_video_bank)); - save_pointer(NAME(m_video_ram.target()), JTC_ES40_VIDEORAM_SIZE); - save_pointer(NAME(m_color_ram_r), JTC_ES40_VIDEORAM_SIZE); - save_pointer(NAME(m_color_ram_g), JTC_ES40_VIDEORAM_SIZE); - save_pointer(NAME(m_color_ram_b), JTC_ES40_VIDEORAM_SIZE); save_item(NAME(m_centronics_busy)); } @@ -732,7 +731,7 @@ u32 jtces40_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, co { for (int x = 0; x < 40; x++) { - u8 const data = m_video_ram[ma + x]; + u8 const data = m_video_ram_40[ma + x]; u8 const r = ~m_color_ram_r[ma + x]; u8 const g = ~m_color_ram_g[ma + x]; u8 const b = ~m_color_ram_b[ma + x]; diff --git a/src/mame/drivers/jupace.cpp b/src/mame/drivers/jupace.cpp index 455eef6f8c2..5bb5768521f 100644 --- a/src/mame/drivers/jupace.cpp +++ b/src/mame/drivers/jupace.cpp @@ -419,7 +419,7 @@ void ace_state::ace_mem(address_map &map) { map(0x0000, 0x1fff).rom(); map(0x2000, 0x23ff).mirror(0x0400).ram().share("video_ram"); - map(0x2800, 0x2bff).mirror(0x0400).ram().share("char_ram").region(Z80_TAG, 0xfc00); + map(0x2800, 0x2bff).mirror(0x0400).ram().share("char_ram"); map(0x3000, 0x33ff).mirror(0x0c00).ram(); map(0x4000, 0xffff).ram(); } @@ -827,14 +827,14 @@ void ace_state::ace(machine_config &config) //------------------------------------------------- ROM_START( jupace ) - ROM_REGION( 0x10000, Z80_TAG, 0 ) + ROM_REGION( 0x2000, Z80_TAG, 0 ) ROM_LOAD( "rom-a.z1", 0x0000, 0x1000, CRC(dc8438a5) SHA1(8fa97eb71e5dd17c7d190c6587ee3840f839347c) ) ROM_LOAD( "rom-b.z2", 0x1000, 0x1000, CRC(4009f636) SHA1(98c5d4bcd74bcf014268cf4c00b2007ea5cc21f3) ) ROM_REGION( 0x1000, "fdc", 0 ) // Deep Thought disc interface ROM_LOAD( "dos 4.bin", 0x0000, 0x1000, CRC(04c70448) SHA1(53ddcced6ae2feafd687a3b55864726656b71412) ) - ROM_REGION( 0x10000, SP0256AL2_TAG, 0 ) + ROM_REGION( 0x800, SP0256AL2_TAG, 0 ) ROM_LOAD( "sp0256-al2.ic1", 0x000, 0x800, CRC(b504ac15) SHA1(e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc) ) ROM_END diff --git a/src/mame/drivers/kangaroo.cpp b/src/mame/drivers/kangaroo.cpp index 1e7d8e2870d..ecfc6c23099 100644 --- a/src/mame/drivers/kangaroo.cpp +++ b/src/mame/drivers/kangaroo.cpp @@ -274,7 +274,7 @@ void kangaroo_state::main_map(address_map &map) void kangaroo_state::sound_map(address_map &map) { - map(0x0000, 0x0fff).rom(); + map(0x0000, 0x0fff).rom().region("audiocpu", 0); map(0x4000, 0x43ff).mirror(0x0c00).ram(); map(0x6000, 0x6000).mirror(0x0fff).r("soundlatch", FUNC(generic_latch_8_device::read)); map(0x7000, 0x7000).mirror(0x0fff).w("aysnd", FUNC(ay8910_device::data_w)); diff --git a/src/mame/drivers/kinst.cpp b/src/mame/drivers/kinst.cpp index a27fafc0d88..233c2a0fa4c 100644 --- a/src/mame/drivers/kinst.cpp +++ b/src/mame/drivers/kinst.cpp @@ -196,7 +196,7 @@ public: m_rambase(*this, "rambase"), m_rambase2(*this, "rambase2"), m_control(*this, "control"), - m_rombase(*this, "rombase"), + m_rombase(*this, "user1"), m_maincpu(*this, "maincpu"), m_ata(*this, "ata"), m_dcs(*this, "dcs"), @@ -218,7 +218,7 @@ private: required_shared_ptr<uint32_t> m_rambase; required_shared_ptr<uint32_t> m_rambase2; required_shared_ptr<uint32_t> m_control; - required_shared_ptr<uint32_t> m_rombase; + required_region_ptr<uint32_t> m_rombase; required_device<mips3_device> m_maincpu; required_device<ata_interface_device> m_ata; required_device<dcs_audio_2k_device> m_dcs; @@ -484,7 +484,7 @@ void kinst_state::main_map(address_map &map) map(0x10000080, 0x100000ff).rw(FUNC(kinst_state::control_r), FUNC(kinst_state::control_w)).share("control"); map(0x10000100, 0x1000013f).rw(FUNC(kinst_state::ide_r), FUNC(kinst_state::ide_w)); map(0x10000170, 0x10000173).rw(FUNC(kinst_state::ide_extra_r), FUNC(kinst_state::ide_extra_w)); - map(0x1fc00000, 0x1fc7ffff).rom().region("user1", 0).share("rombase"); + map(0x1fc00000, 0x1fc7ffff).rom().region("user1", 0); } diff --git a/src/mame/drivers/konamigs.cpp b/src/mame/drivers/konamigs.cpp index a0afaef7075..f006d55d4e7 100644 --- a/src/mame/drivers/konamigs.cpp +++ b/src/mame/drivers/konamigs.cpp @@ -59,9 +59,9 @@ public: , m_rtc_r(*this, "RTCR") , m_rtc_w(*this, "RTCW") , m_dipsw_r(*this, "DSW") - , m_vram(*this, "vram", 0) - , m_gpuregs(*this, "gpu_regs", 0) - , m_ymzram(*this, "ymz_ram", 0) + , m_vram(*this, "vram") + , m_gpuregs(*this, "gpu_regs") + , m_ymzram(*this, "ymz_ram") , m_screen(*this, "screen") , m_hopper(*this, "hopper") { } diff --git a/src/mame/drivers/kyocera.cpp b/src/mame/drivers/kyocera.cpp index c6d35055670..d8597cf1f86 100644 --- a/src/mame/drivers/kyocera.cpp +++ b/src/mame/drivers/kyocera.cpp @@ -97,28 +97,28 @@ void pc8201_state::bankswitch(uint8_t data) if (rom_bank > 1) { /* RAM */ - program.install_readwrite_bank(0x0000, 0x7fff, "bank1"); + program.install_readwrite_bank(0x0000, 0x7fff, m_bank1); } else { /* ROM */ - program.install_read_bank(0x0000, 0x7fff, "bank1"); + program.install_read_bank(0x0000, 0x7fff, m_bank1); program.unmap_write(0x0000, 0x7fff); } - membank("bank1")->set_entry(rom_bank); + m_bank1->set_entry(rom_bank); switch (ram_bank) { case 0: if (m_ram->size() > 16 * 1024) { - program.install_readwrite_bank(0x8000, 0xffff, "bank2"); + program.install_readwrite_bank(0x8000, 0xffff, m_bank2); } else { program.unmap_readwrite(0x8000, 0xbfff); - program.install_readwrite_bank(0xc000, 0xffff, "bank2"); + program.install_readwrite_bank(0xc000, 0xffff, m_bank2); } break; @@ -128,20 +128,20 @@ void pc8201_state::bankswitch(uint8_t data) case 2: if (m_ram->size() > 32 * 1024) - program.install_readwrite_bank(0x8000, 0xffff, "bank2"); + program.install_readwrite_bank(0x8000, 0xffff, m_bank2); else program.unmap_readwrite(0x8000, 0xffff); break; case 3: if (m_ram->size() > 64 * 1024) - program.install_readwrite_bank(0x8000, 0xffff, "bank2"); + program.install_readwrite_bank(0x8000, 0xffff, m_bank2); else program.unmap_readwrite(0x8000, 0xffff); break; } - membank("bank2")->set_entry(ram_bank); + m_bank2->set_entry(ram_bank); } void pc8201_state::bank_w(uint8_t data) @@ -429,7 +429,7 @@ void kc85_state::ctrl_w(uint8_t data) */ /* ROM bank selection */ - membank("bank1")->set_entry(BIT(data, 0)); + m_bank1->set_entry(BIT(data, 0)); /* printer strobe */ m_centronics->write_strobe(BIT(data, 1)); @@ -467,9 +467,9 @@ void tandy200_state::bankswitch(uint8_t data) } else { - program.install_read_bank(0x0000, 0x7fff, "bank1"); + program.install_read_bank(0x0000, 0x7fff, m_bank1); program.unmap_write(0x0000, 0x7fff); - membank("bank1")->set_entry(rom_bank); + m_bank1->set_entry(rom_bank); } if (m_ram->size() < ((ram_bank + 1) * 24 * 1024)) @@ -479,8 +479,8 @@ void tandy200_state::bankswitch(uint8_t data) } else { - program.install_readwrite_bank(0xa000, 0xffff, "bank2"); - membank("bank2")->set_entry(ram_bank); + program.install_readwrite_bank(0xa000, 0xffff, m_bank2); + m_bank2->set_entry(ram_bank); } } @@ -1158,27 +1158,27 @@ void kc85_state::machine_start() m_rtc->oe_w(1); /* configure ROM banking */ - program.install_read_bank(0x0000, 0x7fff, "bank1"); + program.install_read_bank(0x0000, 0x7fff, m_bank1); program.unmap_write(0x0000, 0x7fff); - membank("bank1")->configure_entry(0, m_rom->base()); - membank("bank1")->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base()); - membank("bank1")->set_entry(0); + m_bank1->configure_entry(0, m_rom->base()); + m_bank1->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base()); + m_bank1->set_entry(0); /* configure RAM banking */ switch (m_ram->size()) { case 16 * 1024: program.unmap_readwrite(0x8000, 0xbfff); - program.install_readwrite_bank(0xc000, 0xffff, "bank2"); + program.install_readwrite_bank(0xc000, 0xffff, m_bank2); break; case 32 * 1024: - program.install_readwrite_bank(0x8000, 0xffff,"bank2"); + program.install_readwrite_bank(0x8000, 0xffff,m_bank2); break; } - membank("bank2")->configure_entry(0, m_ram->pointer()); - membank("bank2")->set_entry(0); + m_bank2->configure_entry(0, m_ram->pointer()); + m_bank2->set_entry(0); /* register for state saving */ save_item(NAME(m_bank)); @@ -1201,15 +1201,15 @@ void pc8201_state::machine_start() m_rtc->oe_w(1); /* configure ROM banking */ - membank("bank1")->configure_entry(0, m_rom->base()); - membank("bank1")->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base()); - membank("bank1")->configure_entries(2, 2, ram + 0x8000, 0x8000); - membank("bank1")->set_entry(0); + m_bank1->configure_entry(0, m_rom->base()); + m_bank1->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base()); + m_bank1->configure_entries(2, 2, ram + 0x8000, 0x8000); + m_bank1->set_entry(0); /* configure RAM banking */ - membank("bank2")->configure_entry(0, ram); - membank("bank2")->configure_entries(2, 2, ram + 0x8000, 0x8000); - membank("bank2")->set_entry(0); + m_bank2->configure_entry(0, ram); + m_bank2->configure_entries(2, 2, ram + 0x8000, 0x8000); + m_bank2->set_entry(0); bankswitch(0); @@ -1237,37 +1237,37 @@ void trsm100_state::machine_start() m_rtc->oe_w(1); /* configure ROM banking */ - program.install_read_bank(0x0000, 0x7fff, "bank1"); + program.install_read_bank(0x0000, 0x7fff, m_bank1); program.unmap_write(0x0000, 0x7fff); - membank("bank1")->configure_entry(0, m_rom->base()); - membank("bank1")->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base()); - membank("bank1")->set_entry(0); + m_bank1->configure_entry(0, m_rom->base()); + m_bank1->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base()); + m_bank1->set_entry(0); /* configure RAM banking */ switch (m_ram->size()) { case 8 * 1024: program.unmap_readwrite(0x8000, 0xcfff); - program.install_readwrite_bank(0xe000, 0xffff, "bank2"); + program.install_readwrite_bank(0xe000, 0xffff, m_bank2); break; case 16 * 1024: program.unmap_readwrite(0x8000, 0xbfff); - program.install_readwrite_bank(0xc000, 0xffff, "bank2"); + program.install_readwrite_bank(0xc000, 0xffff, m_bank2); break; case 24 * 1024: program.unmap_readwrite(0x8000, 0x9fff); - program.install_readwrite_bank(0xa000, 0xffff, "bank2"); + program.install_readwrite_bank(0xa000, 0xffff, m_bank2); break; case 32 * 1024: - program.install_readwrite_bank(0x8000, 0xffff, "bank2"); + program.install_readwrite_bank(0x8000, 0xffff, m_bank2); break; } - membank("bank2")->configure_entry(0, m_ram->pointer()); - membank("bank2")->set_entry(0); + m_bank2->configure_entry(0, m_ram->pointer()); + m_bank2->set_entry(0); /* register for state saving */ save_item(NAME(m_bank)); @@ -1286,14 +1286,14 @@ void tandy200_state::machine_start() m_tp = 0; /* configure ROM banking */ - membank("bank1")->configure_entry(0, m_rom->base()); - membank("bank1")->configure_entry(1, m_rom->base() + 0x10000); - membank("bank1")->configure_entry(2, m_opt_region ? m_opt_region->base() : m_rom->base()); - membank("bank1")->set_entry(0); + m_bank1->configure_entry(0, m_rom->base()); + m_bank1->configure_entry(1, m_rom->base() + 0x10000); + m_bank1->configure_entry(2, m_opt_region ? m_opt_region->base() : m_rom->base()); + m_bank1->set_entry(0); /* configure RAM banking */ - membank("bank2")->configure_entries(0, 3, m_ram->pointer(), 0x6000); - membank("bank2")->set_entry(0); + m_bank2->configure_entries(0, 3, m_ram->pointer(), 0x6000); + m_bank2->set_entry(0); /* register for state saving */ save_item(NAME(m_bank)); diff --git a/src/mame/drivers/kyugo.cpp b/src/mame/drivers/kyugo.cpp index 260ede1e56b..3cf137bcd6e 100644 --- a/src/mame/drivers/kyugo.cpp +++ b/src/mame/drivers/kyugo.cpp @@ -154,6 +154,13 @@ void kyugo_state::kyugo_main_map(address_map &map) map(0xf000, 0xf7ff).ram().share(m_shared_ram); } +void kyugo_state::srdmissn_main_map(address_map &map) +{ + kyugo_main_map(map); + map(0x8000, 0x8fff).ram(); + map(0xe000, 0xe7ff).ram().share(m_shared_ram); +} + void kyugo_state::gyrodine_main_map(address_map &map) { kyugo_main_map(map); @@ -684,6 +691,7 @@ void kyugo_state::srdmissn(machine_config &config) kyugo_base(config); // basic machine hardware + m_maincpu->set_addrmap(AS_PROGRAM, &kyugo_state::srdmissn_main_map); m_subcpu->set_addrmap(AS_PROGRAM, &kyugo_state::srdmissn_sub_map); m_subcpu->set_addrmap(AS_IO, &kyugo_state::srdmissn_sub_portmap); } @@ -1576,24 +1584,6 @@ ROM_END /************************************* * - * Game specific initialization - * - *************************************/ - - -void kyugo_state::init_srdmissn() -{ - // shared RAM is mapped at 0xe000 as well - m_maincpu->space(AS_PROGRAM).install_ram(0xe000, 0xe7ff, m_shared_ram); - - // extra RAM on sub CPU - m_subcpu->space(AS_PROGRAM).install_ram(0x8800, 0x8fff); -} - - - -/************************************* - * * Game drivers * *************************************/ @@ -1610,12 +1600,12 @@ GAME( 1985, sonofphx, repulse, repulse, repulse, kyugo_state, empty_init, GAME( 1985, flashgal, 0, repulse, flashgal, kyugo_state, empty_init, ROT0, "Kyugo / Sega", "Flashgal (set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1985, flashgalk, flashgal, repulse, flashgal, kyugo_state, empty_init, ROT0, "Kyugo / Sega", "Flashgal (set 1, Kyugo logo)", MACHINE_SUPPORTS_SAVE ) GAME( 1985, flashgala, flashgal, flashgala, flashgal, kyugo_state, empty_init, ROT0, "Kyugo / Sega", "Flashgal (set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, srdmissn, 0, srdmissn, srdmissn, kyugo_state, init_srdmissn, ROT90, "Kyugo / Taito Corporation", "S.R.D. Mission", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, fx, srdmissn, srdmissn, srdmissn, kyugo_state, init_srdmissn, ROT90, "bootleg", "F-X (bootleg of S.R.D. Mission)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, legend, 0, legend, legend, kyugo_state, init_srdmissn, ROT0, "Kyugo / Sega", "Legend", MACHINE_SUPPORTS_SAVE ) // no copyright (maybe also a bootleg?) -GAME( 1986, legendb, legend, legend, legend, kyugo_state, init_srdmissn, ROT0, "bootleg", "Legion (bootleg of Legend)", MACHINE_SUPPORTS_SAVE ) // no copyright -GAME( 1987, airwolf, 0, srdmissn, airwolf, kyugo_state, init_srdmissn, ROT0, "Kyugo", "Airwolf", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, airwolfa, airwolf, srdmissn, airwolf, kyugo_state, init_srdmissn, ROT0, "Kyugo (United Amusements license)", "Airwolf (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, skywolf, airwolf, srdmissn, skywolf, kyugo_state, init_srdmissn, ROT0, "bootleg", "Sky Wolf (set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, skywolf2, airwolf, srdmissn, airwolf, kyugo_state, init_srdmissn, ROT0, "bootleg", "Sky Wolf (set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, skywolf3, airwolf, srdmissn, airwolf, kyugo_state, init_srdmissn, ROT0, "bootleg", "Sky Wolf (set 3)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, srdmissn, 0, srdmissn, srdmissn, kyugo_state, empty_init, ROT90, "Kyugo / Taito Corporation", "S.R.D. Mission", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, fx, srdmissn, srdmissn, srdmissn, kyugo_state, empty_init, ROT90, "bootleg", "F-X (bootleg of S.R.D. Mission)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, legend, 0, legend, legend, kyugo_state, empty_init, ROT0, "Kyugo / Sega", "Legend", MACHINE_SUPPORTS_SAVE ) // no copyright (maybe also a bootleg?) +GAME( 1986, legendb, legend, legend, legend, kyugo_state, empty_init, ROT0, "bootleg", "Legion (bootleg of Legend)", MACHINE_SUPPORTS_SAVE ) // no copyright +GAME( 1987, airwolf, 0, srdmissn, airwolf, kyugo_state, empty_init, ROT0, "Kyugo", "Airwolf", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, airwolfa, airwolf, srdmissn, airwolf, kyugo_state, empty_init, ROT0, "Kyugo (United Amusements license)", "Airwolf (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, skywolf, airwolf, srdmissn, skywolf, kyugo_state, empty_init, ROT0, "bootleg", "Sky Wolf (set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, skywolf2, airwolf, srdmissn, airwolf, kyugo_state, empty_init, ROT0, "bootleg", "Sky Wolf (set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, skywolf3, airwolf, srdmissn, airwolf, kyugo_state, empty_init, ROT0, "bootleg", "Sky Wolf (set 3)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/lc80.cpp b/src/mame/drivers/lc80.cpp index c1f487b7c77..69011e12b5d 100644 --- a/src/mame/drivers/lc80.cpp +++ b/src/mame/drivers/lc80.cpp @@ -294,29 +294,29 @@ void lc80_state::machine_start() membank("bank4")->configure_entry(0, &ROM[0x2000]); membank("bank4")->set_entry(0); - program.install_readwrite_bank(0x0000, 0x07ff, "bank1"); - program.install_readwrite_bank(0x0800, 0x0fff, "bank2"); - program.install_readwrite_bank(0x1000, 0x17ff, "bank3"); + program.install_readwrite_bank(0x0000, 0x07ff, membank("bank1")); + program.install_readwrite_bank(0x0800, 0x0fff, membank("bank2")); + program.install_readwrite_bank(0x1000, 0x17ff, membank("bank3")); switch (m_ram->size()) { case 1*1024: - program.install_readwrite_bank(0x2000, 0x23ff, "bank4"); + program.install_readwrite_bank(0x2000, 0x23ff, membank("bank4")); program.unmap_readwrite(0x2400, 0x2fff); break; case 2*1024: - program.install_readwrite_bank(0x2000, 0x27ff, "bank4"); + program.install_readwrite_bank(0x2000, 0x27ff, membank("bank4")); program.unmap_readwrite(0x2800, 0x2fff); break; case 3*1024: - program.install_readwrite_bank(0x2000, 0x2bff, "bank4"); + program.install_readwrite_bank(0x2000, 0x2bff, membank("bank4")); program.unmap_readwrite(0x2c00, 0x2fff); break; case 4*1024: - program.install_readwrite_bank(0x2000, 0x2fff, "bank4"); + program.install_readwrite_bank(0x2000, 0x2fff, membank("bank4")); break; } diff --git a/src/mame/drivers/leapster.cpp b/src/mame/drivers/leapster.cpp index 4cf61ca3e01..1393ff342a9 100644 --- a/src/mame/drivers/leapster.cpp +++ b/src/mame/drivers/leapster.cpp @@ -283,10 +283,7 @@ void leapster_state::machine_start() if (m_cart_rom) { - address_space &space = m_maincpu->space(AS_PROGRAM); - - space.install_readwrite_bank(0x80000000, 0x807fffff, "cartrom"); - membank("cartrom")->set_base(m_cart_rom->base()); + m_maincpu->space(AS_PROGRAM).install_rom(0x80000000, 0x807fffff, m_cart_rom->base()); } } diff --git a/src/mame/drivers/leland.cpp b/src/mame/drivers/leland.cpp index 3e763debcd5..a3ee92f1223 100644 --- a/src/mame/drivers/leland.cpp +++ b/src/mame/drivers/leland.cpp @@ -83,7 +83,7 @@ void leland_state::master_map_program(address_map &map) { map(0x0000, 0x1fff).rom(); map(0x2000, 0x9fff).bankr(m_master_bankslot[0]); - map(0xa000, 0xdfff).bankr(m_master_bankslot[1]).w(FUNC(leland_state::leland_battery_ram_w)).share("battery"); + map(0xa000, 0xdfff).bankr(m_master_bankslot[1]).w(FUNC(leland_state::leland_battery_ram_w)); map(0xe000, 0xefff).ram().share(m_mainram); map(0xf000, 0xf3ff).rw(FUNC(leland_state::gated_paletteram_r), FUNC(leland_state::gated_paletteram_w)).share("palette"); map(0xf800, 0xf801).w(FUNC(leland_state::master_video_addr_w)); @@ -110,7 +110,7 @@ void ataxx_state::master_map_program_2(address_map &map) { map(0x0000, 0x1fff).rom(); map(0x2000, 0x9fff).bankr(m_master_bankslot[0]); - map(0xa000, 0xdfff).bankr(m_master_bankslot[1]).w(FUNC(ataxx_state::ataxx_battery_ram_w)).share("battery"); + map(0xa000, 0xdfff).bankr(m_master_bankslot[1]).w(FUNC(ataxx_state::ataxx_battery_ram_w)); map(0xe000, 0xf7ff).ram().share(m_mainram); map(0xf800, 0xffff).rw(FUNC(ataxx_state::paletteram_and_misc_r), FUNC(ataxx_state::paletteram_and_misc_w)).share("palette"); } @@ -177,6 +177,11 @@ void leland_state::slave_map_program(address_map &map) map(0xffff, 0xffff).w(FUNC(leland_state::ataxx_slave_banksw_w)); } +void leland_state::asylum_slave_map_program(address_map &map) +{ + slave_map_program(map); + map(0xf000, 0xfffb).ram(); +} void ataxx_state::slave_map_io_2(address_map &map) { @@ -1077,6 +1082,11 @@ void ataxx_state::wsf(machine_config &config) WSF_80186(config.replace(), m_sound, 0).set_master_cpu_tag(m_master); } +void ataxx_state::asylum(machine_config &config) +{ + wsf(config); + m_slave->set_addrmap(AS_PROGRAM, &ataxx_state::asylum_slave_map_program); +} /************************************* @@ -3351,9 +3361,6 @@ void ataxx_state::init_asylum() rotate_memory("master"); rotate_memory("slave"); - /* asylum appears to have some extra RAM for the slave CPU */ - m_slave->space(AS_PROGRAM).install_ram(0xf000, 0xfffb); - /* set up additional input ports */ m_master->space(AS_IO).install_read_port(0x0d, 0x0d, "P2"); m_master->space(AS_IO).install_read_port(0x0e, 0x0e, "P1"); @@ -3417,4 +3424,4 @@ GAME( 1990, wsf, 0, wsf, wsf, ataxx_state, init_wsf, GAME( 1990, wsf3, wsf, wsf, wsf, ataxx_state, init_wsf, ROT0, "Leland Corporation", "World Soccer Finals (rev 3)", 0 ) GAME( 1991, indyheat, 0, wsf, indyheat, ataxx_state, init_indyheat, ROT0, "Leland Corporation", "Danny Sullivan's Indy Heat (rev 1)", 0 ) GAME( 1991, brutforc, 0, wsf, brutforc, ataxx_state, init_brutforc, ROT0, "Leland Corporation", "Brute Force", 0 ) -GAME( 1991, asylum, 0, wsf, brutforc, ataxx_state, init_asylum, ROT270, "Leland Corporation", "Asylum (prototype)", 0 ) +GAME( 1991, asylum, 0, asylum, brutforc, ataxx_state, init_asylum, ROT270, "Leland Corporation", "Asylum (prototype)", 0 ) diff --git a/src/mame/drivers/liberate.cpp b/src/mame/drivers/liberate.cpp index 7cd62ad4243..ac189b4eac9 100644 --- a/src/mame/drivers/liberate.cpp +++ b/src/mame/drivers/liberate.cpp @@ -79,7 +79,7 @@ void liberate_state::deco16_bank_w(uint8_t data) if (m_bank) m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0x800f, read8sm_delegate(*this, FUNC(liberate_state::deco16_io_r))); else - m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0x800f, "bank1"); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0x800f, membank("bank1")); } uint8_t liberate_state::prosoccr_bank_r(offs_t offset) diff --git a/src/mame/drivers/limenko.cpp b/src/mame/drivers/limenko.cpp index 1455aaa25f3..8c554407f93 100644 --- a/src/mame/drivers/limenko.cpp +++ b/src/mame/drivers/limenko.cpp @@ -54,6 +54,7 @@ public: , m_spriteram(*this, "spriteram") , m_videoreg(*this, "videoreg") , m_gfx_region(*this, "gfx") + , m_qs1000_bank(*this, "qs1000_bank") { } @@ -87,6 +88,8 @@ private: required_shared_ptr<u32> m_videoreg; required_region_ptr<u8> m_gfx_region; + memory_bank_creator m_qs1000_bank; + tilemap_t *m_bg_tilemap; tilemap_t *m_md_tilemap; tilemap_t *m_fg_tilemap; @@ -200,7 +203,7 @@ void limenko_state::qs1000_p3_w(u8 data) // ...x .... - ? // ..x. .... - /IRQ clear - membank("qs1000:bank")->set_entry(data & 0x07); + m_qs1000_bank->set_entry(data & 0x07); if (!BIT(data, 5)) m_soundlatch->acknowledge_w(); @@ -1071,8 +1074,8 @@ u32 limenko_state::spotty_speedup_r() void limenko_state::init_common() { // Set up the QS1000 program ROM banking, taking care not to overlap the internal RAM - m_qs1000->cpu().space(AS_IO).install_read_bank(0x0100, 0xffff, "bank"); - membank("qs1000:bank")->configure_entries(0, 8, memregion("qs1000:cpu")->base()+0x100, 0x10000); + m_qs1000->cpu().space(AS_IO).install_read_bank(0x0100, 0xffff, m_qs1000_bank); + m_qs1000_bank->configure_entries(0, 8, memregion("qs1000:cpu")->base()+0x100, 0x10000); m_spriteram_bit = 1; } diff --git a/src/mame/drivers/lisa.cpp b/src/mame/drivers/lisa.cpp index ea3e118e38d..38ab487ab35 100644 --- a/src/mame/drivers/lisa.cpp +++ b/src/mame/drivers/lisa.cpp @@ -33,7 +33,7 @@ void lisa_state::lisa_fdc_map(address_map &map) map(0x0000, 0x03ff).ram().share("fdc_ram"); /* RAM (shared with 68000) */ map(0x0400, 0x07ff).rw(FUNC(lisa_state::lisa_fdc_io_r), FUNC(lisa_state::lisa_fdc_io_w)); /* disk controller (IWM and TTL logic) */ map(0x0800, 0x0fff).noprw(); - map(0x1000, 0x1fff).rom().region("fdccpu", 0x1000).share("fdc_rom"); /* ROM */ + map(0x1000, 0x1fff).rom().region("fdccpu", 0x1000); /* ROM */ } void lisa_state::lisa210_fdc_map(address_map &map) @@ -43,7 +43,7 @@ void lisa_state::lisa210_fdc_map(address_map &map) map(0x0400, 0x07ff).noprw(); /* nothing, or RAM wrap-around ??? */ map(0x0800, 0x0bff).rw(FUNC(lisa_state::lisa_fdc_io_r), FUNC(lisa_state::lisa_fdc_io_w)); /* disk controller (IWM and TTL logic) */ map(0x0c00, 0x0fff).noprw(); /* nothing, or IO port wrap-around ??? */ - map(0x1000, 0x1fff).rom().region("fdccpu", 0x1000).share("fdc_rom"); /* ROM */ + map(0x1000, 0x1fff).rom().region("fdccpu", 0x1000); /* ROM */ } diff --git a/src/mame/drivers/m20.cpp b/src/mame/drivers/m20.cpp index 557c4e684a1..e1e1f1b6bf5 100644 --- a/src/mame/drivers/m20.cpp +++ b/src/mame/drivers/m20.cpp @@ -347,84 +347,75 @@ void m20_state::install_memory() /* install mainboard memory (aka DRAM0) */ /* <0>0000 */ - pspace.install_readwrite_bank(0x0000, 0x3fff, 0, "dram0_4000"); - dspace.install_readwrite_bank(0x0000, 0x3fff, 0, "dram0_4000"); + pspace.install_ram(0x0000, 0x3fff, 0, memptr + 0x4000); + dspace.install_ram(0x0000, 0x3fff, 0, memptr + 0x4000); /* <0>4000 */ - pspace.install_readwrite_bank(0x4000, 0x7fff, 0, "dram0_8000"); + pspace.install_ram(0x4000, 0x7fff, 0, memptr + 0x8000); /* <0>8000 */ - pspace.install_readwrite_bank(0x8000, 0xbfff, 0, "dram0_c000"); + pspace.install_ram(0x8000, 0xbfff, 0, memptr + 0xc000); /* <0>C000 */ - pspace.install_readwrite_bank(0xc000, 0xcfff, 0, "dram0_10000"); + pspace.install_ram(0xc000, 0xcfff, 0, memptr + 0x10000); /* <1>0000 */ - pspace.install_readwrite_bank(0x10000, 0x13fff, 0, "dram0_8000"); - dspace.install_readwrite_bank(0x10000, 0x13fff, 0, "dram0_14000"); + pspace.install_ram(0x10000, 0x13fff, 0, memptr + 0x8000); + dspace.install_ram(0x10000, 0x13fff, 0, memptr + 0x14000); /* <1>4000 */ - pspace.install_readwrite_bank(0x14000, 0x17fff, 0, "dram0_c000"); - dspace.install_readwrite_bank(0x14000, 0x17fff, 0, "dram0_18000"); + pspace.install_ram(0x14000, 0x17fff, 0, memptr + 0xc000); + dspace.install_ram(0x14000, 0x17fff, 0, memptr + 0x18000); /* <1>8000 */ - pspace.install_readwrite_bank(0x18000, 0x1bfff, 0, "dram0_10000"); - dspace.install_readwrite_bank(0x18000, 0x1bfff, 0, "dram0_1c000"); + pspace.install_ram(0x18000, 0x1bfff, 0, memptr + 0x10000); + dspace.install_ram(0x18000, 0x1bfff, 0, memptr + 0x1c000); /* <1>c000 empty*/ /* <2>0000 */ - pspace.install_readwrite_bank(0x20000, 0x23fff, 0, "dram0_14000"); - dspace.install_readwrite_bank(0x20000, 0x23fff, 0, "dram0_14000"); + pspace.install_ram(0x20000, 0x23fff, 0, memptr + 0x14000); + dspace.install_ram(0x20000, 0x23fff, 0, memptr + 0x14000); /* <2>4000 */ - pspace.install_readwrite_bank(0x24000, 0x27fff, 0, "dram0_18000"); - dspace.install_readwrite_bank(0x24000, 0x27fff, 0, "dram0_18000"); + pspace.install_ram(0x24000, 0x27fff, 0, memptr + 0x18000); + dspace.install_ram(0x24000, 0x27fff, 0, memptr + 0x18000); /* <2>8000 */ - pspace.install_readwrite_bank(0x28000, 0x2bfff, 0, "dram0_1c000"); - dspace.install_readwrite_bank(0x28000, 0x2bfff, 0, "dram0_1c000"); + pspace.install_ram(0x28000, 0x2bfff, 0, memptr + 0x1c000); + dspace.install_ram(0x28000, 0x2bfff, 0, memptr + 0x1c000); /* <2>c000 empty*/ /* <3>0000 (video buffer) - pspace.install_readwrite_bank(0x30000, 0x33fff, 0, "dram0_0000"); - dspace.install_readwrite_bank(0x30000, 0x33fff, 0, "dram0_0000"); + pspace.install_ram(0x30000, 0x33fff, 0, memptr + 0x0000); + dspace.install_ram(0x30000, 0x33fff, 0, memptr + 0x0000); */ /* <5>0000 */ - dspace.install_readwrite_bank(0x50000, 0x53fff, 0, "dram0_8000"); + dspace.install_ram(0x50000, 0x53fff, 0, memptr + 0x8000); /* <5>4000 */ - dspace.install_readwrite_bank(0x54000, 0x57fff, 0, "dram0_c000"); + dspace.install_ram(0x54000, 0x57fff, 0, memptr + 0xc000); /* <5>8000 */ - dspace.install_readwrite_bank(0x58000, 0x5bfff, 0, "dram0_10000"); + dspace.install_ram(0x58000, 0x5bfff, 0, memptr + 0x10000); /* <5>c000 expansion bus */ /* <6>0000 */ - pspace.install_readwrite_bank(0x60000, 0x63fff, 0, "dram0_8000"); - dspace.install_readwrite_bank(0x60000, 0x63fff, 0, "dram0_8000"); + pspace.install_ram(0x60000, 0x63fff, 0, memptr + 0x8000); + dspace.install_ram(0x60000, 0x63fff, 0, memptr + 0x8000); /* <6>4000 */ - pspace.install_readwrite_bank(0x64000, 0x67fff, 0, "dram0_c000"); - dspace.install_readwrite_bank(0x64000, 0x67fff, 0, "dram0_c000"); + pspace.install_ram(0x64000, 0x67fff, 0, memptr + 0xc000); + dspace.install_ram(0x64000, 0x67fff, 0, memptr + 0xc000); /* <6>8000 */ - pspace.install_readwrite_bank(0x68000, 0x6bfff, 0, "dram0_10000"); - dspace.install_readwrite_bank(0x68000, 0x6bfff, 0, "dram0_10000"); + pspace.install_ram(0x68000, 0x6bfff, 0, memptr + 0x10000); + dspace.install_ram(0x68000, 0x6bfff, 0, memptr + 0x10000); /* <6>c000 empty*/ /* segment <7> expansion ROM? */ /* <8>0000 */ - pspace.install_readwrite_bank(0x80000, 0x83fff, 0, "dram0_8000"); - dspace.install_readwrite_bank(0x80000, 0x83fff, 0, "dram0_18000"); + pspace.install_ram(0x80000, 0x83fff, 0, memptr + 0x8000); + dspace.install_ram(0x80000, 0x83fff, 0, memptr + 0x18000); /* <8>4000 */ - pspace.install_readwrite_bank(0x84000, 0x87fff, 0, "dram0_c000"); - dspace.install_readwrite_bank(0x84000, 0x87fff, 0, "dram0_1c000"); + pspace.install_ram(0x84000, 0x87fff, 0, memptr + 0xc000); + dspace.install_ram(0x84000, 0x87fff, 0, memptr + 0x1c000); /* <9>0000 */ - pspace.install_readwrite_bank(0x90000, 0x93fff, 0, "dram0_18000"); - dspace.install_readwrite_bank(0x90000, 0x93fff, 0, "dram0_18000"); + pspace.install_ram(0x90000, 0x93fff, 0, memptr + 0x18000); + dspace.install_ram(0x90000, 0x93fff, 0, memptr + 0x18000); /* <9>4000 */ - pspace.install_readwrite_bank(0x94000, 0x97fff, 0, "dram0_1c000"); - dspace.install_readwrite_bank(0x94000, 0x97fff, 0, "dram0_1c000"); + pspace.install_ram(0x94000, 0x97fff, 0, memptr + 0x1c000); + dspace.install_ram(0x94000, 0x97fff, 0, memptr + 0x1c000); /* <A>0000 */ - pspace.install_readwrite_bank(0xa0000, 0xa3fff, 0, "dram0_8000"); - dspace.install_readwrite_bank(0xa0000, 0xa3fff, 0, "dram0_8000"); + pspace.install_ram(0xa0000, 0xa3fff, 0, memptr + 0x8000); + dspace.install_ram(0xa0000, 0xa3fff, 0, memptr + 0x8000); /* <A>4000 */ - pspace.install_readwrite_bank(0xa4000, 0xa7fff, 0, "dram0_c000"); - dspace.install_readwrite_bank(0xa4000, 0xa7fff, 0, "dram0_c000"); - - //membank("dram0_0000")->set_base(memptr); - membank("dram0_4000")->set_base(memptr + 0x4000); - membank("dram0_8000")->set_base(memptr + 0x8000); - membank("dram0_c000")->set_base(memptr + 0xc000); - membank("dram0_10000")->set_base(memptr + 0x10000); - membank("dram0_14000")->set_base(memptr + 0x14000); - membank("dram0_18000")->set_base(memptr + 0x18000); - membank("dram0_1c000")->set_base(memptr + 0x1c000); + pspace.install_ram(0xa4000, 0xa7fff, 0, memptr + 0xc000); + dspace.install_ram(0xa4000, 0xa7fff, 0, memptr + 0xc000); if (m_memsize > 128 * 1024) { /* install memory expansions (DRAM1..DRAM3) */ @@ -439,9 +430,9 @@ void m20_state::install_memory() map( 0x88000, 0x8bfff ).ram().share("dram1_4000"); map( 0xa8000, 0xabfff ).ram().share("dram1_4000"); */ - pspace.install_readwrite_bank(0x2c000, 0x2ffff, 0, "dram1_0000"); - pspace.install_readwrite_bank(0x88000, 0x8bfff, 0, "dram1_4000"); - pspace.install_readwrite_bank(0xa8000, 0xabfff, 0, "dram1_4000"); + pspace.install_ram(0x2c000, 0x2ffff, 0, memptr + 0x20000); + pspace.install_ram(0x88000, 0x8bfff, 0, memptr + 0x24000); + pspace.install_ram(0xa8000, 0xabfff, 0, memptr + 0x24000); /* data @@ -450,13 +441,10 @@ void m20_state::install_memory() map( 0x2c000, 0x2ffff ).ram().share("dram1_0000"); map( 0xa8000, 0xabfff ).ram().share("dram1_4000"); */ - dspace.install_readwrite_bank(0x4000, 0x7fff, 0, "dram1_4000"); - dspace.install_readwrite_bank(0x1c000, 0x1ffff, 0, "dram1_0000"); - dspace.install_readwrite_bank(0x2c000, 0x2ffff, 0, "dram1_0000"); - dspace.install_readwrite_bank(0xa8000, 0xabfff, 0, "dram1_4000"); - - membank("dram1_0000")->set_base(memptr + 0x20000); - membank("dram1_4000")->set_base(memptr + 0x24000); + dspace.install_ram(0x4000, 0x7fff, 0, memptr + 0x24000); + dspace.install_ram(0x1c000, 0x1ffff, 0, memptr + 0x20000); + dspace.install_ram(0x2c000, 0x2ffff, 0, memptr + 0x20000); + dspace.install_ram(0xa8000, 0xabfff, 0, memptr + 0x24000); if (m_memsize > 128 * 1024 + 32768) { /* DRAM2, 32K */ @@ -466,9 +454,9 @@ void m20_state::install_memory() map( 0x98000, 0x9bfff ).ram().share("dram2_4000"); map( 0xac000, 0xaffff ).ram().share("dram2_0000"); */ - pspace.install_readwrite_bank(0x8c000, 0x8ffff, 0, "dram2_0000"); - pspace.install_readwrite_bank(0x98000, 0x9bfff, 0, "dram2_4000"); - pspace.install_readwrite_bank(0xac000, 0xaffff, 0, "dram2_0000"); + pspace.install_ram(0x8c000, 0x8ffff, 0, memptr + 0x28000); + pspace.install_ram(0x98000, 0x9bfff, 0, memptr + 0x2c000); + pspace.install_ram(0xac000, 0xaffff, 0, memptr + 0x28000); /* data map( 0x08000, 0x0bfff ).ram().share("dram2_0000"); @@ -477,14 +465,11 @@ void m20_state::install_memory() map( 0x98000, 0x9bfff ).ram().share("dram2_4000"); map( 0xac000, 0xaffff ).ram().share("dram2_0000"); */ - dspace.install_readwrite_bank(0x8000, 0xbfff, 0, "dram2_0000"); - dspace.install_readwrite_bank(0xc000, 0xffff, 0, "dram2_4000"); - dspace.install_readwrite_bank(0x88000, 0x8bfff, 0, "dram2_4000"); - dspace.install_readwrite_bank(0x98000, 0x9bfff, 0, "dram2_4000"); - dspace.install_readwrite_bank(0xac000, 0xaffff, 0, "dram2_0000"); - - membank("dram2_0000")->set_base(memptr + 0x28000); - membank("dram2_4000")->set_base(memptr + 0x2c000); + dspace.install_ram(0x8000, 0xbfff, 0, memptr + 0x28000); + dspace.install_ram(0xc000, 0xffff, 0, memptr + 0x2c000); + dspace.install_ram(0x88000, 0x8bfff, 0, memptr + 0x2c000); + dspace.install_ram(0x98000, 0x9bfff, 0, memptr + 0x2c000); + dspace.install_ram(0xac000, 0xaffff, 0, memptr + 0x28000); } if (m_memsize > 128 * 1024 + 2 * 32768) { /* DRAM3, 32K */ @@ -493,8 +478,8 @@ void m20_state::install_memory() map( 0x9c000, 0x9ffff ).ram().share("dram3_0000"); map( 0xb0000, 0xb3fff ).ram().share("dram3_4000"); */ - pspace.install_readwrite_bank(0x9c000, 0x9ffff, 0, "dram3_0000"); - pspace.install_readwrite_bank(0xb0000, 0xb3fff, 0, "dram3_4000"); + pspace.install_ram(0x9c000, 0x9ffff, 0, memptr + 0x30000); + pspace.install_ram(0xb0000, 0xb3fff, 0, memptr + 0x34000); /* data map( 0x44000, 0x47fff ).ram().share("dram3_0000"); @@ -504,15 +489,12 @@ void m20_state::install_memory() map( 0xb0000, 0xb3fff ).ram().share("dram3_4000"); map( 0xc0000, 0xc3fff ).ram().share("dram3_4000"); */ - dspace.install_readwrite_bank(0x44000, 0x47fff, 0, "dram3_0000"); - dspace.install_readwrite_bank(0x48000, 0x4bfff, 0, "dram3_4000"); - dspace.install_readwrite_bank(0x8c000, 0x8ffff, 0, "dram3_0000"); - dspace.install_readwrite_bank(0x9c000, 0x9ffff, 0, "dram3_0000"); - dspace.install_readwrite_bank(0xb0000, 0xb3fff, 0, "dram3_4000"); - dspace.install_readwrite_bank(0xc0000, 0xc3fff, 0, "dram3_4000"); - - membank("dram3_0000")->set_base(memptr + 0x30000); - membank("dram3_4000")->set_base(memptr + 0x34000); + dspace.install_ram(0x44000, 0x47fff, 0, memptr + 0x30000); + dspace.install_ram(0x48000, 0x4bfff, 0, memptr + 0x34000); + dspace.install_ram(0x8c000, 0x8ffff, 0, memptr + 0x30000); + dspace.install_ram(0x9c000, 0x9ffff, 0, memptr + 0x30000); + dspace.install_ram(0xb0000, 0xb3fff, 0, memptr + 0x34000); + dspace.install_ram(0xc0000, 0xc3fff, 0, memptr + 0x34000); } } else { @@ -532,16 +514,16 @@ void m20_state::install_memory() map( 0xb4000, 0xb7fff ).ram().share("dram1_18000"); map( 0xb8000, 0xbbfff ).ram().share("dram1_1c000"); */ - pspace.install_readwrite_bank(0x2c000, 0x2ffff, 0, "dram1_0000"); - pspace.install_readwrite_bank(0x88000, 0x8bfff, 0, "dram1_4000"); - pspace.install_readwrite_bank(0x8c000, 0x8ffff, 0, "dram1_8000"); - pspace.install_readwrite_bank(0x98000, 0x9bfff, 0, "dram1_c000"); - pspace.install_readwrite_bank(0x9c000, 0x9ffff, 0, "dram1_10000"); - pspace.install_readwrite_bank(0xa8000, 0xabfff, 0, "dram1_4000"); - pspace.install_readwrite_bank(0xac000, 0xaffff, 0, "dram1_8000"); - pspace.install_readwrite_bank(0xb0000, 0xb3fff, 0, "dram1_14000"); - pspace.install_readwrite_bank(0xb4000, 0xb7fff, 0, "dram1_18000"); - pspace.install_readwrite_bank(0xb8000, 0xbbfff, 0, "dram1_1c000"); + pspace.install_ram(0x2c000, 0x2ffff, 0, memptr + 0x20000); + pspace.install_ram(0x88000, 0x8bfff, 0, memptr + 0x24000); + pspace.install_ram(0x8c000, 0x8ffff, 0, memptr + 0x28000); + pspace.install_ram(0x98000, 0x9bfff, 0, memptr + 0x2c000); + pspace.install_ram(0x9c000, 0x9ffff, 0, memptr + 0x30000); + pspace.install_ram(0xa8000, 0xabfff, 0, memptr + 0x24000); + pspace.install_ram(0xac000, 0xaffff, 0, memptr + 0x28000); + pspace.install_ram(0xb0000, 0xb3fff, 0, memptr + 0x34000); + pspace.install_ram(0xb4000, 0xb7fff, 0, memptr + 0x38000); + pspace.install_ram(0xb8000, 0xbbfff, 0, memptr + 0x3c000); /* data map( 0x04000, 0x07fff ).ram().share("dram1_4000"); @@ -557,27 +539,18 @@ void m20_state::install_memory() map( 0xb4000, 0xb7fff ).ram().share("dram1_18000"); map( 0xb8000, 0xbbfff ).ram().share("dram1_1c000"); */ - dspace.install_readwrite_bank(0x4000, 0x7fff, 0, "dram1_4000"); - dspace.install_readwrite_bank(0x1c000, 0x1ffff, 0, "dram1_0000"); - dspace.install_readwrite_bank(0x2c000, 0x2ffff, 0, "dram1_0000"); - dspace.install_readwrite_bank(0x88000, 0x8bfff, 0, "dram1_c000"); - dspace.install_readwrite_bank(0x8c000, 0x8ffff, 0, "dram1_10000"); - dspace.install_readwrite_bank(0x98000, 0x9bfff, 0, "dram1_c000"); - dspace.install_readwrite_bank(0x9c000, 0x9ffff, 0, "dram1_10000"); - dspace.install_readwrite_bank(0xa8000, 0xabfff, 0, "dram1_4000"); - dspace.install_readwrite_bank(0xac000, 0xaffff, 0, "dram1_8000"); - dspace.install_readwrite_bank(0xb0000, 0xb3fff, 0, "dram1_14000"); - dspace.install_readwrite_bank(0xb4000, 0xb7fff, 0, "dram1_18000"); - dspace.install_readwrite_bank(0xb8000, 0xbbfff, 0, "dram1_1c000"); - - membank("dram1_0000")->set_base(memptr + 0x20000); - membank("dram1_4000")->set_base(memptr + 0x24000); - membank("dram1_8000")->set_base(memptr + 0x28000); - membank("dram1_c000")->set_base(memptr + 0x2c000); - membank("dram1_10000")->set_base(memptr + 0x30000); - membank("dram1_14000")->set_base(memptr + 0x34000); - membank("dram1_18000")->set_base(memptr + 0x38000); - membank("dram1_1c000")->set_base(memptr + 0x3c000); + dspace.install_ram(0x4000, 0x7fff, 0, memptr + 0x24000); + dspace.install_ram(0x1c000, 0x1ffff, 0, memptr + 0x20000); + dspace.install_ram(0x2c000, 0x2ffff, 0, memptr + 0x20000); + dspace.install_ram(0x88000, 0x8bfff, 0, memptr + 0x2c000); + dspace.install_ram(0x8c000, 0x8ffff, 0, memptr + 0x30000); + dspace.install_ram(0x98000, 0x9bfff, 0, memptr + 0x2c000); + dspace.install_ram(0x9c000, 0x9ffff, 0, memptr + 0x30000); + dspace.install_ram(0xa8000, 0xabfff, 0, memptr + 0x24000); + dspace.install_ram(0xac000, 0xaffff, 0, memptr + 0x28000); + dspace.install_ram(0xb0000, 0xb3fff, 0, memptr + 0x34000); + dspace.install_ram(0xb4000, 0xb7fff, 0, memptr + 0x38000); + dspace.install_ram(0xb8000, 0xbbfff, 0, memptr + 0x3c000); if (m_memsize > 256 * 1024) { /* DRAM2, 128K */ @@ -594,14 +567,14 @@ void m20_state::install_memory() map( 0xd4000, 0xd7fff ).ram().share("dram2_18000"); map( 0xd8000, 0xdbfff ).ram().share("dram2_1c000"); */ - pspace.install_readwrite_bank(0xbc000, 0xbffff, 0, "dram2_0000"); - pspace.install_readwrite_bank(0xc0000, 0xc3fff, 0, "dram2_4000"); - pspace.install_readwrite_bank(0xc4000, 0xc7fff, 0, "dram2_8000"); - pspace.install_readwrite_bank(0xc8000, 0xcbfff, 0, "dram2_c000"); - pspace.install_readwrite_bank(0xcc000, 0xcffff, 0, "dram2_10000"); - pspace.install_readwrite_bank(0xd0000, 0xd3fff, 0, "dram2_14000"); - pspace.install_readwrite_bank(0xd4000, 0xd7fff, 0, "dram2_18000"); - pspace.install_readwrite_bank(0xd8000, 0xdbfff, 0, "dram2_1c000"); + pspace.install_ram(0xbc000, 0xbffff, 0, memptr + 0x40000); + pspace.install_ram(0xc0000, 0xc3fff, 0, memptr + 0x44000); + pspace.install_ram(0xc4000, 0xc7fff, 0, memptr + 0x48000); + pspace.install_ram(0xc8000, 0xcbfff, 0, memptr + 0x4c000); + pspace.install_ram(0xcc000, 0xcffff, 0, memptr + 0x50000); + pspace.install_ram(0xd0000, 0xd3fff, 0, memptr + 0x54000); + pspace.install_ram(0xd4000, 0xd7fff, 0, memptr + 0x58000); + pspace.install_ram(0xd8000, 0xdbfff, 0, memptr + 0x5c000); /* data map( 0x08000, 0x0bfff ).ram().share("dram2_0000"); @@ -618,25 +591,16 @@ void m20_state::install_memory() map( 0xd4000, 0xd7fff ).ram().share("dram2_18000"); map( 0xd8000, 0xdbfff ).ram().share("dram2_1c000"); */ - dspace.install_readwrite_bank(0x8000, 0xbfff, 0, "dram2_0000"); - dspace.install_readwrite_bank(0xc000, 0xffff, 0, "dram2_4000"); - dspace.install_readwrite_bank(0xbc000, 0xbffff, 0, "dram2_0000"); - dspace.install_readwrite_bank(0xc0000, 0xc3fff, 0, "dram2_4000"); - dspace.install_readwrite_bank(0xc4000, 0xc7fff, 0, "dram2_8000"); - dspace.install_readwrite_bank(0xc8000, 0xcbfff, 0, "dram2_c000"); - dspace.install_readwrite_bank(0xcc000, 0xcffff, 0, "dram2_10000"); - dspace.install_readwrite_bank(0xd0000, 0xd3fff, 0, "dram2_14000"); - dspace.install_readwrite_bank(0xd4000, 0xd7fff, 0, "dram2_18000"); - dspace.install_readwrite_bank(0xd8000, 0xdbfff, 0, "dram2_1c000"); - - membank("dram2_0000")->set_base(memptr + 0x40000); - membank("dram2_4000")->set_base(memptr + 0x44000); - membank("dram2_8000")->set_base(memptr + 0x48000); - membank("dram2_c000")->set_base(memptr + 0x4c000); - membank("dram2_10000")->set_base(memptr + 0x50000); - membank("dram2_14000")->set_base(memptr + 0x54000); - membank("dram2_18000")->set_base(memptr + 0x58000); - membank("dram2_1c000")->set_base(memptr + 0x5c000); + dspace.install_ram(0x8000, 0xbfff, 0, memptr + 0x40000); + dspace.install_ram(0xc000, 0xffff, 0, memptr + 0x44000); + dspace.install_ram(0xbc000, 0xbffff, 0, memptr + 0x40000); + dspace.install_ram(0xc0000, 0xc3fff, 0, memptr + 0x44000); + dspace.install_ram(0xc4000, 0xc7fff, 0, memptr + 0x48000); + dspace.install_ram(0xc8000, 0xcbfff, 0, memptr + 0x4c000); + dspace.install_ram(0xcc000, 0xcffff, 0, memptr + 0x50000); + dspace.install_ram(0xd0000, 0xd3fff, 0, memptr + 0x54000); + dspace.install_ram(0xd4000, 0xd7fff, 0, memptr + 0x58000); + dspace.install_ram(0xd8000, 0xdbfff, 0, memptr + 0x5c000); } if (m_memsize > 384 * 1024) { /* DRAM3, 128K */ @@ -654,15 +618,15 @@ void m20_state::install_memory() map( 0xf8000, 0xfbfff ).ram().share("dram3_1c000"); map( 0xfc000, 0xfffff ).ram().share("dram3_0000"); */ - pspace.install_readwrite_bank(0xdc000, 0xdffff, 0, "dram3_0000"); - pspace.install_readwrite_bank(0xe0000, 0xe3fff, 0, "dram3_4000"); - pspace.install_readwrite_bank(0xe4000, 0xe7fff, 0, "dram3_8000"); - pspace.install_readwrite_bank(0xe8000, 0xebfff, 0, "dram3_c000"); - pspace.install_readwrite_bank(0xec000, 0xeffff, 0, "dram3_10000"); - pspace.install_readwrite_bank(0xf0000, 0xf3fff, 0, "dram3_14000"); - pspace.install_readwrite_bank(0xf4000, 0xf7fff, 0, "dram3_18000"); - pspace.install_readwrite_bank(0xf8000, 0xfbfff, 0, "dram3_1c000"); - pspace.install_readwrite_bank(0xfc000, 0xfffff, 0, "dram3_0000"); + pspace.install_ram(0xdc000, 0xdffff, 0, memptr + 0x60000); + pspace.install_ram(0xe0000, 0xe3fff, 0, memptr + 0x64000); + pspace.install_ram(0xe4000, 0xe7fff, 0, memptr + 0x68000); + pspace.install_ram(0xe8000, 0xebfff, 0, memptr + 0x6c000); + pspace.install_ram(0xec000, 0xeffff, 0, memptr + 0x70000); + pspace.install_ram(0xf0000, 0xf3fff, 0, memptr + 0x74000); + pspace.install_ram(0xf4000, 0xf7fff, 0, memptr + 0x78000); + pspace.install_ram(0xf8000, 0xfbfff, 0, memptr + 0x7c000); + pspace.install_ram(0xfc000, 0xfffff, 0, memptr + 0x60000); /* data map( 0x44000, 0x47fff ).ram().share("dram3_0000"); @@ -679,26 +643,17 @@ void m20_state::install_memory() map( 0xf8000, 0xfbfff ).ram().share("dram3_1c000"); map( 0xfc000, 0xfffff ).ram().share("dram3_0000"); */ - dspace.install_readwrite_bank(0x44000, 0x47fff, 0, "dram3_0000"); - dspace.install_readwrite_bank(0x48000, 0x4bfff, 0, "dram3_4000"); - dspace.install_readwrite_bank(0xdc000, 0xdffff, 0, "dram3_0000"); - dspace.install_readwrite_bank(0xe0000, 0xe3fff, 0, "dram3_4000"); - dspace.install_readwrite_bank(0xe4000, 0xe7fff, 0, "dram3_8000"); - dspace.install_readwrite_bank(0xe8000, 0xebfff, 0, "dram3_c000"); - dspace.install_readwrite_bank(0xec000, 0xeffff, 0, "dram3_10000"); - dspace.install_readwrite_bank(0xf0000, 0xf3fff, 0, "dram3_14000"); - dspace.install_readwrite_bank(0xf4000, 0xf7fff, 0, "dram3_18000"); - dspace.install_readwrite_bank(0xf8000, 0xfbfff, 0, "dram3_1c000"); - dspace.install_readwrite_bank(0xfc000, 0xfffff, 0, "dram3_0000"); - - membank("dram3_0000")->set_base(memptr + 0x60000); - membank("dram3_4000")->set_base(memptr + 0x64000); - membank("dram3_8000")->set_base(memptr + 0x68000); - membank("dram3_c000")->set_base(memptr + 0x6c000); - membank("dram3_10000")->set_base(memptr + 0x70000); - membank("dram3_14000")->set_base(memptr + 0x74000); - membank("dram3_18000")->set_base(memptr + 0x78000); - membank("dram3_1c000")->set_base(memptr + 0x7c000); + dspace.install_ram(0x44000, 0x47fff, 0, memptr + 0x60000); + dspace.install_ram(0x48000, 0x4bfff, 0, memptr + 0x64000); + dspace.install_ram(0xdc000, 0xdffff, 0, memptr + 0x60000); + dspace.install_ram(0xe0000, 0xe3fff, 0, memptr + 0x64000); + dspace.install_ram(0xe4000, 0xe7fff, 0, memptr + 0x68000); + dspace.install_ram(0xe8000, 0xebfff, 0, memptr + 0x6c000); + dspace.install_ram(0xec000, 0xeffff, 0, memptr + 0x70000); + dspace.install_ram(0xf0000, 0xf3fff, 0, memptr + 0x74000); + dspace.install_ram(0xf4000, 0xf7fff, 0, memptr + 0x78000); + dspace.install_ram(0xf8000, 0xfbfff, 0, memptr + 0x7c000); + dspace.install_ram(0xfc000, 0xfffff, 0, memptr + 0x60000); } } } diff --git a/src/mame/drivers/m5.cpp b/src/mame/drivers/m5.cpp index 55f8679a087..d8511f08f7d 100644 --- a/src/mame/drivers/m5.cpp +++ b/src/mame/drivers/m5.cpp @@ -560,10 +560,10 @@ void m5_state::mem64KBF_w(uint8_t data) //out 0x30 membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000); break; case 1: - program.install_write_bank(0x0000,0x1fff,"bank1w"); - program.install_write_bank(0x2000,0x3fff,"bank2w"); - program.install_write_bank(0x4000,0x5fff,"bank3w"); - program.install_write_bank(0x6000,0x6fff,"bank4w"); + program.install_write_bank(0x0000,0x1fff,membank("bank1w")); + program.install_write_bank(0x2000,0x3fff,membank("bank2w")); + program.install_write_bank(0x4000,0x5fff,membank("bank3w")); + program.install_write_bank(0x6000,0x6fff,membank("bank4w")); membank("bank1r")->set_base(ram_region->base()+0x0000); membank("bank1w")->set_base(ram_region->base()+0x0000); membank("bank2r")->set_base(ram_region->base()+0x2000); membank("bank2w")->set_base(ram_region->base()+0x2000); membank("bank3r")->set_base(ram_region->base()+0x4000); membank("bank3w")->set_base(ram_region->base()+0x4000); @@ -572,10 +572,10 @@ void m5_state::mem64KBF_w(uint8_t data) //out 0x30 membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000); break; case 2: - program.install_write_bank(0x0000,0x1fff,"bank1w"); - program.install_write_bank(0x2000,0x3fff,"bank2w"); - program.install_write_bank(0x4000,0x5fff,"bank3w"); - program.install_write_bank(0x6000,0x6fff,"bank4w"); + program.install_write_bank(0x0000,0x1fff,membank("bank1w")); + program.install_write_bank(0x2000,0x3fff,membank("bank2w")); + program.install_write_bank(0x4000,0x5fff,membank("bank3w")); + program.install_write_bank(0x6000,0x6fff,membank("bank4w")); membank("bank1r")->set_base(memregion(Z80_TAG)->base()); membank("bank1w")->set_base(ram_region->base()+0x0000); membank("bank2r")->set_base(ram_region->base()+0x2000); membank("bank2w")->set_base(ram_region->base()+0x2000); membank("bank3r")->set_base(ram_region->base()+0x4000); membank("bank3w")->set_base(ram_region->base()+0x4000); @@ -594,8 +594,8 @@ void m5_state::mem64KBF_w(uint8_t data) //out 0x30 break; case 4: program.unmap_write(0x0000, 0x3fff); - program.install_write_bank(0x4000,0x5fff,"bank3w"); - program.install_write_bank(0x6000,0x6fff,"bank4w"); + program.install_write_bank(0x4000,0x5fff,membank("bank3w")); + program.install_write_bank(0x6000,0x6fff,membank("bank4w")); membank("bank1r")->set_base(ram_region->base()+0x0000); membank("bank2r")->set_base(ram_region->base()+0x2000); membank("bank3r")->set_base(ram_region->base()+0x4000); membank("bank3w")->set_base(ram_region->base()+0x4000); @@ -604,10 +604,10 @@ void m5_state::mem64KBF_w(uint8_t data) //out 0x30 membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000); break; case 5: - program.install_write_bank(0x0000,0x1fff,"bank1w"); - program.install_write_bank(0x2000,0x3fff,"bank2w"); - program.install_write_bank(0x4000,0x5fff,"bank3w"); - program.install_write_bank(0x6000,0x6fff,"bank4w"); + program.install_write_bank(0x0000,0x1fff,membank("bank1w")); + program.install_write_bank(0x2000,0x3fff,membank("bank2w")); + program.install_write_bank(0x4000,0x5fff,membank("bank3w")); + program.install_write_bank(0x6000,0x6fff,membank("bank4w")); membank("bank1r")->set_base(memregion(Z80_TAG)->base()); membank("bank1w")->set_base(ram_region->base()+0x0000); membank("bank2r")->set_base(m_cart_rom->base()); membank("bank2w")->set_base(ram_region->base()+0x2000); membank("bank3r")->set_base(m_cart_rom->base()+0x2000); membank("bank3w")->set_base(ram_region->base()+0x4000); @@ -616,10 +616,10 @@ void m5_state::mem64KBF_w(uint8_t data) //out 0x30 membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000); break; case 6: - program.install_write_bank(0x0000,0x1fff,"bank1w"); - program.install_write_bank(0x2000,0x3fff,"bank2w"); - program.install_write_bank(0x4000,0x5fff,"bank3w"); - program.install_write_bank(0x6000,0x6fff,"bank4w"); + program.install_write_bank(0x0000,0x1fff,membank("bank1w")); + program.install_write_bank(0x2000,0x3fff,membank("bank2w")); + program.install_write_bank(0x4000,0x5fff,membank("bank3w")); + program.install_write_bank(0x6000,0x6fff,membank("bank4w")); membank("bank1r")->set_base(memregion(Z80_TAG)->base()); membank("bank1w")->set_base(ram_region->base()+0x0000); membank("bank2r")->set_base(rom_region->base()+0x0000); membank("bank2w")->set_base(ram_region->base()+0x2000); membank("bank3r")->set_base(rom_region->base()+0x2000); membank("bank3w")->set_base(ram_region->base()+0x4000); @@ -628,11 +628,11 @@ void m5_state::mem64KBF_w(uint8_t data) //out 0x30 membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000); break; case 7: //probably this won't work - it should redirect rw to another ram module - program.install_write_bank(0x0000,0x1fff,"bank1w"); - program.install_write_bank(0x2000,0x3fff,"bank2w"); - program.install_write_bank(0x4000,0x5fff,"bank3w"); - program.install_write_bank(0x6000,0x6fff,"bank4w"); - program.install_readwrite_bank(0x7000,0x7fff,"sram"); + program.install_write_bank(0x0000,0x1fff,membank("bank1w")); + program.install_write_bank(0x2000,0x3fff,membank("bank2w")); + program.install_write_bank(0x4000,0x5fff,membank("bank3w")); + program.install_write_bank(0x6000,0x6fff,membank("bank4w")); + program.install_readwrite_bank(0x7000,0x7fff,membank("sram")); membank("bank1r")->set_base(rom_region->base()+0x0000); membank("bank1w")->set_base(rom_region->base()+0x0000); membank("bank2r")->set_base(rom_region->base()+0x2000); membank("bank2w")->set_base(rom_region->base()+0x2000); membank("bank3r")->set_base(rom_region->base()+0x4000); membank("bank3w")->set_base(rom_region->base()+0x4000); @@ -1135,13 +1135,13 @@ void brno_state::romsel_w(uint8_t data) //out 6c else { - program.install_readwrite_bank(0x0000, 0x0fff, "bank1"); - program.install_readwrite_bank(0x1000, 0x1fff, "bank2"); - program.install_readwrite_bank(0x2000, 0x2fff, "bank3"); - program.install_readwrite_bank(0x3000, 0x3fff, "bank4"); - program.install_readwrite_bank(0x4000, 0x4fff, "bank5"); - program.install_readwrite_bank(0x5000, 0x5fff, "bank6"); - program.install_readwrite_bank(0x6000, 0x6fff, "bank7"); + program.install_readwrite_bank(0x0000, 0x0fff, membank("bank1")); + program.install_readwrite_bank(0x1000, 0x1fff, membank("bank2")); + program.install_readwrite_bank(0x2000, 0x2fff, membank("bank3")); + program.install_readwrite_bank(0x3000, 0x3fff, membank("bank4")); + program.install_readwrite_bank(0x4000, 0x4fff, membank("bank5")); + program.install_readwrite_bank(0x5000, 0x5fff, membank("bank6")); + program.install_readwrite_bank(0x6000, 0x6fff, membank("bank7")); m_romen=false; } diff --git a/src/mame/drivers/m72.cpp b/src/mame/drivers/m72.cpp index cbadd1ba762..7e1098f0482 100644 --- a/src/mame/drivers/m72.cpp +++ b/src/mame/drivers/m72.cpp @@ -648,10 +648,9 @@ void m72_state::install_protection_handler(const u8 *code,const u8 *crc) m_protection_ram = std::make_unique<u16[]>(0x1000/2); m_protection_code = code; m_protection_crc = crc; - m_maincpu->space(AS_PROGRAM).install_read_bank(0xb0000, 0xb0fff, "bank1"); + m_maincpu->space(AS_PROGRAM).install_rom(0xb0000, 0xb0fff, m_protection_ram.get()); m_maincpu->space(AS_PROGRAM).install_read_handler(0xb0ffa, 0xb0ffb, read16s_delegate(*this, FUNC(m72_state::protection_r))); m_maincpu->space(AS_PROGRAM).install_write_handler(0xb0000, 0xb0fff, write16s_delegate(*this, FUNC(m72_state::protection_w))); - membank("bank1")->configure_entry(0, m_protection_ram.get()); save_pointer(NAME(m_protection_ram), 0x1000/2); } @@ -802,7 +801,7 @@ void m72_state::dbreedm72_map(address_map &map) void m72_state::m81_cpu1_common_map(address_map &map) { map(0x00000, 0x7ffff).rom(); - map(0xb0ffe, 0xb0fff).writeonly(); /* leftover from protection?? */ + map(0xb0ffe, 0xb0fff).nopw(); /* leftover from protection?? */ map(0xc0000, 0xc03ff).ram().share("spriteram"); map(0xc8000, 0xc8bff).rw(FUNC(m72_state::palette_r<0>), FUNC(m72_state::palette_w<0>)).share("paletteram1"); map(0xcc000, 0xccbff).rw(FUNC(m72_state::palette_r<1>), FUNC(m72_state::palette_w<1>)).share("paletteram2"); @@ -835,7 +834,7 @@ void m72_state::m84_cpu1_common_map(address_map &map) map(0xb0000, 0xb0001).w(FUNC(m72_state::irq_line_w)); map(0xb4000, 0xb4001).nopw(); /* ??? */ map(0xbc000, 0xbc000).w(FUNC(m72_state::dmaon_w)); - map(0xb0ffe, 0xb0fff).writeonly(); /* leftover from protection?? */ + map(0xb0ffe, 0xb0fff).nopw(); /* leftover from protection?? */ map(0xc0000, 0xc03ff).ram().share("spriteram"); map(0xe0000, 0xe3fff).ram(); /* work RAM */ map(0xffff0, 0xfffff).rom(); @@ -881,7 +880,7 @@ void m72_state::m82_map(address_map &map) map(0xcc000, 0xccbff).rw(FUNC(m72_state::palette_r<0>), FUNC(m72_state::palette_w<0>)).share("paletteram1"); map(0xd0000, 0xd3fff).ram(); /* work RAM */ map(0xe0000, 0xe0001).w(FUNC(m72_state::irq_line_w)); - map(0xe4000, 0xe4001).writeonly(); /* playfield enable? 1 during screen transitions, 0 otherwise */ + map(0xe4000, 0xe4001).nopw(); /* playfield enable? 1 during screen transitions, 0 otherwise */ map(0xec000, 0xec000).w(FUNC(m72_state::dmaon_w)); map(0xffff0, 0xfffff).rom(); } diff --git a/src/mame/drivers/macprtb.cpp b/src/mame/drivers/macprtb.cpp index 37b157418bc..db39bdc4c6c 100644 --- a/src/mame/drivers/macprtb.cpp +++ b/src/mame/drivers/macprtb.cpp @@ -364,8 +364,7 @@ uint16_t macportable_state::rom_switch_r(offs_t offset) void *memory_data = m_ram->pointer(); offs_t memory_mirror = memory_end & ~memory_end; - space.install_readwrite_bank(0x00000000, memory_end & ~memory_mirror, memory_mirror, "bank1"); - membank("bank1")->set_base(memory_data); + space.install_ram(0x00000000, memory_end & ~memory_mirror, memory_mirror, memory_data); m_overlay = false; } } diff --git a/src/mame/drivers/macpwrbk030.cpp b/src/mame/drivers/macpwrbk030.cpp index ab276e5e149..de727ba4c30 100644 --- a/src/mame/drivers/macpwrbk030.cpp +++ b/src/mame/drivers/macpwrbk030.cpp @@ -347,8 +347,7 @@ void macpb030_state::machine_reset() offs_t memory_mirror = memory_end & ~(memory_size - 1); space.unmap_write(0x00000000, memory_end); - space.install_read_bank(0x00000000, memory_end & ~memory_mirror, memory_mirror, "bank1"); - membank("bank1")->set_base(m_rom_ptr); + space.install_rom(0x00000000, memory_end & ~memory_mirror, memory_mirror, m_rom_ptr); // start 60.15 Hz timer m_6015_timer->adjust(attotime::from_hz(60.15), 0, attotime::from_hz(60.15)); @@ -505,8 +504,7 @@ u32 macpb030_state::rom_switch_r(offs_t offset) void *memory_data = m_ram->pointer(); offs_t memory_mirror = memory_end & ~memory_end; - space.install_readwrite_bank(0x00000000, memory_end & ~memory_mirror, memory_mirror, "bank1"); - membank("bank1")->set_base(memory_data); + space.install_ram(0x00000000, memory_end & ~memory_mirror, memory_mirror, memory_data); m_overlay = false; } diff --git a/src/mame/drivers/macquadra700.cpp b/src/mame/drivers/macquadra700.cpp index 716dbfebcc4..87ff29c9005 100644 --- a/src/mame/drivers/macquadra700.cpp +++ b/src/mame/drivers/macquadra700.cpp @@ -255,8 +255,7 @@ void macquadra_state::machine_reset() offs_t memory_mirror = memory_end & ~(memory_size - 1); space.unmap_write(0x00000000, memory_end); - space.install_read_bank(0x00000000, memory_end & ~memory_mirror, memory_mirror, "bank1"); - membank("bank1")->set_base(m_rom_ptr); + space.install_rom(0x00000000, memory_end & ~memory_mirror, memory_mirror, m_rom_ptr); // start 60.15 Hz timer m_6015_timer->adjust(attotime::from_hz(60.15), 0, attotime::from_hz(60.15)); @@ -704,8 +703,7 @@ uint32_t macquadra_state::rom_switch_r(offs_t offset) void *memory_data = m_ram->pointer(); offs_t memory_mirror = memory_end & ~memory_end; - space.install_readwrite_bank(0x00000000, memory_end & ~memory_mirror, memory_mirror, "bank1"); - membank("bank1")->set_base(memory_data); + space.install_ram(0x00000000, memory_end & ~memory_mirror, memory_mirror, memory_data); m_overlay = false; } diff --git a/src/mame/drivers/magtouch.cpp b/src/mame/drivers/magtouch.cpp index d207f6e01c7..169eff9b4ec 100644 --- a/src/mame/drivers/magtouch.cpp +++ b/src/mame/drivers/magtouch.cpp @@ -145,7 +145,7 @@ void magtouch_state::magtouch_map(address_map &map) map(0x000c0000, 0x000c7fff).rom().region("video_bios", 0); map(0x000d0000, 0x000d1fff).ram().share("nvram"); map(0x000d8000, 0x000dffff).bankr("rombank"); - map(0x000f0000, 0x000fffff).ram().region("bios", 0); + map(0x000f0000, 0x000fffff).rom().region("bios", 0); map(0xffff0000, 0xffffffff).rom().region("bios", 0); } diff --git a/src/mame/drivers/mbc200.cpp b/src/mame/drivers/mbc200.cpp index 64e89698e6b..bf5a117db4c 100644 --- a/src/mame/drivers/mbc200.cpp +++ b/src/mame/drivers/mbc200.cpp @@ -166,8 +166,8 @@ void mbc200_state::main_io(address_map &map) void mbc200_state::sub_mem(address_map &map) { map.unmap_value_high(); - map(0x0000, 0x2fff).rom(); - map(0x3000, 0x7fff).ram(); + map(0x0000, 0x1fff).rom(); + map(0x2000, 0x7fff).ram(); map(0x8000, 0xffff).ram().share("vram"); } diff --git a/src/mame/drivers/mbc55x.cpp b/src/mame/drivers/mbc55x.cpp index 8389e69c5a4..02015cfb30e 100644 --- a/src/mame/drivers/mbc55x.cpp +++ b/src/mame/drivers/mbc55x.cpp @@ -194,7 +194,7 @@ void mbc55x_state::set_ram_size() if(bankno<nobanks) { membank(bank)->set_base(map_base); - space.install_readwrite_bank(bank_base, bank_base+(RAM_BANK_SIZE-1), bank); + space.install_readwrite_bank(bank_base, bank_base+(RAM_BANK_SIZE-1), membank(bank)); logerror("Mapping bank %d at %05X to RAM\n",bankno,bank_base); } else @@ -206,9 +206,9 @@ void mbc55x_state::set_ram_size() // Graphics red and blue plane memory mapping, green is in main memory membank(RED_PLANE_TAG)->set_base(&m_video_mem[RED_PLANE_OFFSET]); - space.install_readwrite_bank(RED_PLANE_MEMBASE, RED_PLANE_MEMBASE+(COLOUR_PLANE_SIZE-1), RED_PLANE_TAG); + space.install_readwrite_bank(RED_PLANE_MEMBASE, RED_PLANE_MEMBASE+(COLOUR_PLANE_SIZE-1), membank(RED_PLANE_TAG)); membank(BLUE_PLANE_TAG)->set_base(&m_video_mem[BLUE_PLANE_OFFSET]); - space.install_readwrite_bank(BLUE_PLANE_MEMBASE, BLUE_PLANE_MEMBASE+(COLOUR_PLANE_SIZE-1), BLUE_PLANE_TAG); + space.install_readwrite_bank(BLUE_PLANE_MEMBASE, BLUE_PLANE_MEMBASE+(COLOUR_PLANE_SIZE-1), membank(BLUE_PLANE_TAG)); } void mbc55x_state::machine_reset() diff --git a/src/mame/drivers/mc1000.cpp b/src/mame/drivers/mc1000.cpp index 1e8f05d6f22..15d3208329f 100644 --- a/src/mame/drivers/mc1000.cpp +++ b/src/mame/drivers/mc1000.cpp @@ -68,7 +68,8 @@ public: m_y(*this, "Y%u", 0), m_joy(*this, "JOY%u", 0), m_modifiers(*this, "MODIFIERS"), - m_joykeymap(*this, "JOYKEYMAP%u", 0) + m_joykeymap(*this, "JOYKEYMAP%u", 0), + m_banks(*this, "bank%u", 1U) { } void mc1000(machine_config &config); @@ -87,6 +88,7 @@ private: required_ioport_array<2> m_joy; required_ioport m_modifiers; required_ioport_array<2> m_joykeymap; + required_memory_bank_array<5> m_banks; std::unique_ptr<uint8_t[]> m_banked_ram; @@ -139,12 +141,12 @@ void mc1000_state::bankswitch() address_space &program = m_maincpu->space(AS_PROGRAM); /* MC6845 video RAM */ - membank("bank2")->set_entry(m_mc6845_bank); + m_banks[1]->set_entry(m_mc6845_bank); /* extended RAM */ if (m_ram->size() > 16*1024) { - program.install_readwrite_bank(0x4000, 0x7fff, "bank3"); + program.install_readwrite_bank(0x4000, 0x7fff, m_banks[2]); } else { @@ -156,7 +158,7 @@ void mc1000_state::bankswitch() { if (m_ram->size() > 16*1024) { - program.install_readwrite_bank(0x8000, 0x97ff, "bank4"); + program.install_readwrite_bank(0x8000, 0x97ff, m_banks[3]); } else { @@ -165,15 +167,15 @@ void mc1000_state::bankswitch() } else { - program.install_readwrite_bank(0x8000, 0x97ff, "bank4"); + program.install_readwrite_bank(0x8000, 0x97ff, m_banks[3]); } - membank("bank4")->set_entry(m_mc6847_bank); + m_banks[3]->set_entry(m_mc6847_bank); /* extended RAM */ if (m_ram->size() > 16*1024) { - program.install_readwrite_bank(0x9800, 0xbfff, "bank5"); + program.install_readwrite_bank(0x9800, 0xbfff, m_banks[4]); } else { @@ -443,7 +445,7 @@ uint8_t mc1000_state::keydata_r() uint8_t mc1000_state::rom_banking_r(offs_t offset) { - membank("bank1")->set_entry(0); + m_banks[0]->set_entry(0); m_rom0000 = 0; return m_rom->base()[offset]; } @@ -455,27 +457,27 @@ void mc1000_state::machine_start() /* setup memory banking */ m_banked_ram = make_unique_clear<uint8_t[]>(0xc000); - membank("bank1")->configure_entry(0, m_banked_ram.get()); - membank("bank1")->configure_entry(1, m_rom->base()); - membank("bank1")->set_entry(1); + m_banks[0]->configure_entry(0, m_banked_ram.get()); + m_banks[0]->configure_entry(1, m_rom->base()); + m_banks[0]->set_entry(1); m_rom0000 = 1; m_mc6845_bank = 0; m_mc6847_bank = 0; - membank("bank2")->configure_entry(0, m_banked_ram.get() + 0x2000); - membank("bank2")->configure_entry(1, m_mc6845_video_ram); - membank("bank2")->set_entry(0); + m_banks[1]->configure_entry(0, m_banked_ram.get() + 0x2000); + m_banks[1]->configure_entry(1, m_mc6845_video_ram); + m_banks[1]->set_entry(0); - membank("bank3")->configure_entry(0, m_banked_ram.get() + 0x4000); - membank("bank3")->set_entry(0); + m_banks[2]->configure_entry(0, m_banked_ram.get() + 0x4000); + m_banks[2]->set_entry(0); - membank("bank4")->configure_entry(0, m_mc6847_video_ram); - membank("bank4")->configure_entry(1, m_banked_ram.get() + 0x8000); - membank("bank4")->set_entry(0); + m_banks[3]->configure_entry(0, m_mc6847_video_ram); + m_banks[3]->configure_entry(1, m_banked_ram.get() + 0x8000); + m_banks[3]->set_entry(0); - membank("bank5")->configure_entry(0, m_banked_ram.get() + 0x9800); - membank("bank5")->set_entry(0); + m_banks[4]->configure_entry(0, m_banked_ram.get() + 0x9800); + m_banks[4]->set_entry(0); bankswitch(); @@ -491,7 +493,7 @@ void mc1000_state::machine_start() void mc1000_state::machine_reset() { - membank("bank1")->set_entry(1); + m_banks[0]->set_entry(1); m_rom0000 = 1; } diff --git a/src/mame/drivers/mc1502.cpp b/src/mame/drivers/mc1502.cpp index 16fa9119e43..5d1864cc337 100644 --- a/src/mame/drivers/mc1502.cpp +++ b/src/mame/drivers/mc1502.cpp @@ -177,8 +177,7 @@ void mc1502_state::init_mc1502() { address_space &program = m_maincpu->space(AS_PROGRAM); - program.install_readwrite_bank(0, m_ram->size() - 1, "bank10"); - membank("bank10")->set_base(m_ram->pointer()); + program.install_ram(0, m_ram->size() - 1, m_ram->pointer()); } MACHINE_START_MEMBER(mc1502_state, mc1502) diff --git a/src/mame/drivers/mcr.cpp b/src/mame/drivers/mcr.cpp index 83343b2d718..05211988fb1 100644 --- a/src/mame/drivers/mcr.cpp +++ b/src/mame/drivers/mcr.cpp @@ -715,6 +715,24 @@ void mcr_state::cpu_90009_portmap(address_map &map) map(0xf0, 0xf3).rw(m_ctc, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write)); } +void mcr_state::cpu_90009_dp_map(address_map &map) +{ + cpu_90009_map(map); + map(0x8000, 0x81ff).ram(); // meter ram, is it battery backed? +} + +void mcr_state::cpu_90009_dp_portmap(address_map &map) +{ + cpu_90009_portmap(map); + map(0x24, 0x24).portr("P24"); + map(0x28, 0x28).portr("P28"); + map(0x2c, 0x2c).portr("P2C"); + + map(0x2c, 0x2c).w(FUNC(mcr_dpoker_state::lamps1_w)); + map(0x30, 0x30).w(FUNC(mcr_dpoker_state::lamps2_w)); + map(0x34, 0x34).w(FUNC(mcr_dpoker_state::output_w)); + map(0x3f, 0x3f).w(FUNC(mcr_dpoker_state::meters_w)); +} /************************************* @@ -1795,6 +1813,9 @@ void mcr_dpoker_state::mcr_90009_dp(machine_config &config) { mcr_90009(config); + m_maincpu->set_addrmap(AS_PROGRAM, &mcr_state::cpu_90009_dp_map); + m_maincpu->set_addrmap(AS_IO, &mcr_state::cpu_90009_dp_portmap); + /* basic machine hardware */ TIMER(config, "coinin").configure_generic(FUNC(mcr_dpoker_state::coin_in_callback)); TIMER(config, "hopper").configure_generic(FUNC(mcr_dpoker_state::hopper_callback)); @@ -2901,7 +2922,7 @@ void mcr_dpoker_state::init_dpoker() m_ssio->set_custom_input(0, 0x8e, *this, FUNC(mcr_dpoker_state::ip0_r)); // meter ram, is it battery backed? - m_maincpu->space(AS_PROGRAM).install_ram(0x8000, 0x81ff); + m_maincpu->space(AS_PROGRAM).install_ram(0x8000, 0x81ff, m_meter_ram); // extra I/O m_maincpu->space(AS_IO).install_read_port(0x24, 0x24, "P24"); diff --git a/src/mame/drivers/megadriv_acbl.cpp b/src/mame/drivers/megadriv_acbl.cpp index f4fb1909efb..f9e07c1f919 100644 --- a/src/mame/drivers/megadriv_acbl.cpp +++ b/src/mame/drivers/megadriv_acbl.cpp @@ -1042,11 +1042,8 @@ void md_boot_state::init_mk3mdb() void md_boot_state::init_ssf2mdb() { m_maincpu->space(AS_PROGRAM).nop_write(0xA130F0, 0xA130FF); // custom banking is disabled (!) - m_maincpu->space(AS_PROGRAM).install_read_bank(0x400000, 0x5fffff, "bank5"); + m_maincpu->space(AS_PROGRAM).install_rom(0x400000, 0x5fffff, memregion( "maincpu" )->base() + 0x400000); m_maincpu->space(AS_PROGRAM).unmap_write(0x400000, 0x5fffff); - - membank("bank5")->set_base(memregion( "maincpu" )->base() + 0x400000 ); - m_maincpu->space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16sm_delegate(*this, FUNC(md_boot_state::dsw_r))); init_megadrij(); diff --git a/src/mame/drivers/megatech.cpp b/src/mame/drivers/megatech.cpp index 8d7d2e0ebbd..cd07e17998a 100644 --- a/src/mame/drivers/megatech.cpp +++ b/src/mame/drivers/megatech.cpp @@ -410,9 +410,6 @@ void mtech_state::set_genz80_as_md() { address_space &prg = m_z80snd->space(AS_PROGRAM); - prg.install_readwrite_bank(0x0000, 0x1fff, "bank1"); - machine().root_device().membank("bank1")->set_base(m_genz80.z80_prgram.get()); - prg.install_ram(0x0000, 0x1fff, m_genz80.z80_prgram.get()); prg.install_readwrite_handler(0x4000, 0x4003, read8sm_delegate(*m_ymsnd, FUNC(ym2612_device::read)), write8sm_delegate(*m_ymsnd, FUNC(ym2612_device::write))); diff --git a/src/mame/drivers/megazone.cpp b/src/mame/drivers/megazone.cpp index 10a5ce1fd5e..374e9960afa 100644 --- a/src/mame/drivers/megazone.cpp +++ b/src/mame/drivers/megazone.cpp @@ -148,7 +148,7 @@ void megazone_state::megazone_map(address_map &map) map(0x2800, 0x2bff).ram().share("colorram"); map(0x2c00, 0x2fff).ram().share("colorram2"); map(0x3000, 0x33ff).ram().share("spriteram"); - map(0x3800, 0x3fff).ram().share("share1"); + map(0x3800, 0x3fff).lrw8([this](offs_t off) { return m_share1[off]; }, "share_r", [this](offs_t off, u8 data) { m_share1[off] = data; }, "share_w"); map(0x4000, 0xffff).rom(); /* 4000->5FFF is a debug rom */ } diff --git a/src/mame/drivers/mhavoc.cpp b/src/mame/drivers/mhavoc.cpp index 0ec954af267..7fca46c96f7 100644 --- a/src/mame/drivers/mhavoc.cpp +++ b/src/mame/drivers/mhavoc.cpp @@ -288,7 +288,7 @@ void mhavoc_state::alpha_map(address_map &map) map(0x17c0, 0x17c0).w(FUNC(mhavoc_state::mhavoc_gamma_w)); /* Gamma Communication Write Port */ map(0x1800, 0x1fff).ram(); /* Shared Beta Ram */ map(0x2000, 0x3fff).bankr("bank2"); /* Paged Program ROM (32K) */ - map(0x4000, 0x4fff).ram().share("avg:vectorram").region("alpha", 0x4000); /* Vector Generator RAM */ + map(0x4000, 0x4fff).ram().share("avg:vectorram"); /* Vector Generator RAM */ map(0x5000, 0x7fff).rom(); /* Vector ROM */ map(0x8000, 0xffff).rom(); /* Program ROM (32K) */ } @@ -367,7 +367,7 @@ void mhavoc_state::alphaone_map(address_map &map) map(0x10e0, 0x10ff).nopr().writeonly().share("avg:colorram"); /* ColorRAM */ map(0x1800, 0x18ff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)); /* EEROM */ map(0x2000, 0x3fff).bankr("bank2"); /* Paged Program ROM (32K) */ - map(0x4000, 0x4fff).ram().share("avg:vectorram").region("alpha", 0x4000); /* Vector Generator RAM */ + map(0x4000, 0x4fff).ram().share("avg:vectorram"); /* Vector Generator RAM */ map(0x5000, 0x7fff).rom(); /* Vector ROM */ map(0x8000, 0xffff).rom(); /* Program ROM (32K) */ } diff --git a/src/mame/drivers/micronic.cpp b/src/mame/drivers/micronic.cpp index a27725ee614..3d5ed1bdcb6 100644 --- a/src/mame/drivers/micronic.cpp +++ b/src/mame/drivers/micronic.cpp @@ -184,7 +184,7 @@ void micronic_state::bank_select_w(uint8_t data) else { m_bank1->set_entry((data <= m_banks_num) ? data : m_banks_num); - m_maincpu->space(AS_PROGRAM).install_write_bank(0x0000, 0x7fff, "bank1"); + m_maincpu->space(AS_PROGRAM).install_write_bank(0x0000, 0x7fff, membank("bank1")); } } diff --git a/src/mame/drivers/midzeus.cpp b/src/mame/drivers/midzeus.cpp index 4f70df073d2..55dc42b86d7 100644 --- a/src/mame/drivers/midzeus.cpp +++ b/src/mame/drivers/midzeus.cpp @@ -764,7 +764,7 @@ void midzeus2_state::zeus2_map(address_map &map) map(0x9f0000, 0x9f7fff).rw(FUNC(midzeus2_state::zeus2_timekeeper_r), FUNC(midzeus2_state::zeus2_timekeeper_w)); map(0x9f8000, 0x9f8000).w(FUNC(midzeus2_state::cmos_protect_w)); map(0xa00000, 0xbfffff).rom().region("user1", 0); - map(0xc00000, 0xffffff).bankr("bank1").region("user2", 0); + map(0xc00000, 0xffffff).bankr("bank1"); } /* diff --git a/src/mame/drivers/model3.cpp b/src/mame/drivers/model3.cpp index 6c641709690..72c9612769d 100644 --- a/src/mame/drivers/model3.cpp +++ b/src/mame/drivers/model3.cpp @@ -1691,7 +1691,7 @@ void model3_state::daytona2_rombank_w(offs_t offset, uint64_t data, uint64_t mem data >>= 56; data = (~data) & 0xf; membank("bank1")->set_base(memregion( "user1" )->base() + 0x800000 + (data * 0x800000)); /* banked CROM */ - membank("bank2")->set_base(memregion( "user1" )->base() + 0x800000 + (data * 0x800000)); /* banked CROM */ + m_bank2->set_base(memregion( "user1" )->base() + 0x800000 + (data * 0x800000)); /* banked CROM */ } } @@ -6156,7 +6156,7 @@ void model3_state::init_model3_10() m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc0000000, 0xc00000ff, read64s_delegate(*this, FUNC(model3_state::scsi_r)), write64s_delegate(*this, FUNC(model3_state::scsi_w))); - m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" ); + m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, membank("bank1") ); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf0800cf8, 0xf0800cff, read64s_delegate(*this, FUNC(model3_state::mpc105_addr_r)), write64s_delegate(*this, FUNC(model3_state::mpc105_addr_w))); m_maincpu->space(AS_PROGRAM).install_read_handler(0xf0c00cf8, 0xf0c00cff, read64smo_delegate(*this, FUNC(model3_state::mpc105_data_r))); @@ -6167,7 +6167,7 @@ void model3_state::init_model3_10() void model3_state::init_model3_15() { interleave_vroms(); - m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1"); + m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, membank("bank1")); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf0800cf8, 0xf0800cff, read64s_delegate(*this, FUNC(model3_state::mpc105_addr_r)), write64s_delegate(*this, FUNC(model3_state::mpc105_addr_w))); m_maincpu->space(AS_PROGRAM).install_read_handler(0xf0c00cf8, 0xf0c00cff, read64smo_delegate(*this, FUNC(model3_state::mpc105_data_r))); @@ -6178,7 +6178,7 @@ void model3_state::init_model3_15() void model3_state::init_model3_20() { interleave_vroms(); - m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" ); + m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, membank("bank1") ); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc2000000, 0xc20000ff, read64s_delegate(*this, FUNC(model3_state::real3d_dma_r)), write64s_delegate(*this, FUNC(model3_state::real3d_dma_w))); @@ -6247,7 +6247,7 @@ void model3_state::init_vs215() m_step15_with_mpc106 = true; interleave_vroms(); - m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" ); + m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, membank("bank1") ); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64s_delegate(*this, FUNC(model3_state::scsi_r)), write64s_delegate(*this, FUNC(model3_state::scsi_w))); @@ -6268,7 +6268,7 @@ void model3_state::init_vs29815() rom[(0x60290c^4)/4] = 0x60000000; interleave_vroms(); - m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" ); + m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, membank("bank1") ); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64s_delegate(*this, FUNC(model3_state::scsi_r)), write64s_delegate(*this, FUNC(model3_state::scsi_w))); @@ -6284,7 +6284,7 @@ void model3_state::init_bass() m_step15_with_mpc106 = true; interleave_vroms(); - m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" ); + m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, membank("bank1") ); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64s_delegate(*this, FUNC(model3_state::scsi_r)), write64s_delegate(*this, FUNC(model3_state::scsi_w))); @@ -6298,7 +6298,7 @@ void model3_state::init_bass() void model3_state::init_getbass() { interleave_vroms(); - m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" ); + m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, membank("bank1") ); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64s_delegate(*this, FUNC(model3_state::scsi_r)), write64s_delegate(*this, FUNC(model3_state::scsi_w))); @@ -6397,7 +6397,7 @@ void model3_state::init_daytona2() init_model3_20(); m_maincpu->space(AS_PROGRAM).install_write_handler(0xc3800000, 0xc3800007, write64s_delegate(*this, FUNC(model3_state::daytona2_rombank_w))); - m_maincpu->space(AS_PROGRAM).install_read_bank(0xc3000000, 0xc37fffff, "bank2"); + m_maincpu->space(AS_PROGRAM).install_read_bank(0xc3000000, 0xc37fffff, m_bank2); //rom[(0x68468c^4)/4] = 0x60000000; //rom[(0x6063c4^4)/4] = 0x60000000; @@ -6411,7 +6411,7 @@ void model3_state::init_dayto2pe() init_model3_20(); m_maincpu->space(AS_PROGRAM).install_write_handler(0xc3800000, 0xc3800007, write64s_delegate(*this, FUNC(model3_state::daytona2_rombank_w))); - m_maincpu->space(AS_PROGRAM).install_read_bank(0xc3000000, 0xc37fffff, "bank2"); + m_maincpu->space(AS_PROGRAM).install_read_bank(0xc3000000, 0xc37fffff, m_bank2); // rom[(0x606784^4)/4] = 0x60000000; // rom[(0x69a3fc^4)/4] = 0x60000000; // jump to encrypted code diff --git a/src/mame/drivers/monkey_king_3b.cpp b/src/mame/drivers/monkey_king_3b.cpp index e71f1545d46..3b959e84848 100644 --- a/src/mame/drivers/monkey_king_3b.cpp +++ b/src/mame/drivers/monkey_king_3b.cpp @@ -111,7 +111,7 @@ private: void mk3b_soc_state::map(address_map &map) { // 64MB external NOR flash - map(0x08000000, 0x0BFFFFFF).rom().share("norflash").region("norflash", 0x0);; + map(0x08000000, 0x0BFFFFFF).rom().share("norflash");; // unknown amount and configuration of internal RAM map(0x00000000, 0x0000FFFF).ram().share("iram0"); // This section of RAM seems to contain the stack diff --git a/src/mame/drivers/moo.cpp b/src/mame/drivers/moo.cpp index 1172ba131d3..b5e610326c2 100644 --- a/src/mame/drivers/moo.cpp +++ b/src/mame/drivers/moo.cpp @@ -343,7 +343,7 @@ void moo_state::moobl_map(address_map &map) map(0x0c4000, 0x0c4001).r(m_k053246, FUNC(k053247_device::k053246_r)); map(0x0ca000, 0x0ca01f).w(m_k054338, FUNC(k054338_device::word_w)); /* K054338 alpha blending engine */ map(0x0cc000, 0x0cc01f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff); - map(0x0d0000, 0x0d001f).writeonly(); /* CCU regs (ignored) */ + map(0x0d0000, 0x0d001f).nopw(); /* CCU regs (ignored) */ map(0x0d6ffc, 0x0d6ffd).w(FUNC(moo_state::moobl_oki_bank_w)); map(0x0d6fff, 0x0d6fff).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); map(0x0d8000, 0x0d8007).w(m_k056832, FUNC(k056832_device::b_word_w)); /* VSCCS regs */ diff --git a/src/mame/drivers/mpu4vid.cpp b/src/mame/drivers/mpu4vid.cpp index cea0f4ea8ad..0e3cfda6fcd 100644 --- a/src/mame/drivers/mpu4vid.cpp +++ b/src/mame/drivers/mpu4vid.cpp @@ -217,7 +217,7 @@ public: mpu4_state(mconfig, type, tag), m_videocpu(*this, "video"), m_scn2674(*this, "scn2674_vid"), - m_vid_vidram(*this, "vid_vidram"), + m_vid_vidram(*this, "vid_vidram", 0x20000, ENDIANNESS_BIG), m_vid_mainram(*this, "vid_mainram"), m_acia_0(*this, "acia6850_0"), m_acia_1(*this, "acia6850_1"), @@ -270,7 +270,7 @@ public: private: required_device<m68000_base_device> m_videocpu; optional_device<scn2674_device> m_scn2674; - optional_shared_ptr<uint16_t> m_vid_vidram; + memory_share_creator<uint16_t> m_vid_vidram; optional_shared_ptr<uint16_t> m_vid_mainram; required_device<acia6850_device> m_acia_0; required_device<acia6850_device> m_acia_1; @@ -500,8 +500,6 @@ void mpu4vid_state::mpu4_vid_vidram_w(offs_t offset, uint16_t data, uint16_t mem void mpu4vid_state::video_start() { - m_vid_vidram.allocate(0x20000/2); - memset(m_vid_vidram,0,0x20000); /* find first empty slot to decode gfx */ @@ -512,7 +510,7 @@ void mpu4vid_state::video_start() assert(m_gfx_index != MAX_GFX_ELEMENTS); /* create the char set (gfx will then be updated dynamically from RAM) */ - m_gfxdecode->set_gfx(m_gfx_index+0, std::make_unique<gfx_element>(m_palette, mpu4_vid_char_8x8_layout, reinterpret_cast<uint8_t *>(m_vid_vidram.target()), NATIVE_ENDIAN_VALUE_LE_BE(8,0), m_palette->entries() / 16, 0)); + m_gfxdecode->set_gfx(m_gfx_index+0, std::make_unique<gfx_element>(m_palette, mpu4_vid_char_8x8_layout, reinterpret_cast<uint8_t *>(m_vid_vidram.ptr()), NATIVE_ENDIAN_VALUE_LE_BE(8,0), m_palette->entries() / 16, 0)); } EF9369_COLOR_UPDATE( mpu4vid_state::ef9369_color_update ) diff --git a/src/mame/drivers/mpz80.cpp b/src/mame/drivers/mpz80.cpp index c871167bd62..cc90d3b3a71 100644 --- a/src/mame/drivers/mpz80.cpp +++ b/src/mame/drivers/mpz80.cpp @@ -687,7 +687,6 @@ static void mpz80_s100_cards(device_slot_interface &device) void mpz80_state::machine_start() { - m_map_ram.allocate(0x200); } diff --git a/src/mame/drivers/mtouchxl.cpp b/src/mame/drivers/mtouchxl.cpp index d30bb16aff5..dd1a2d205b4 100644 --- a/src/mame/drivers/mtouchxl.cpp +++ b/src/mame/drivers/mtouchxl.cpp @@ -182,9 +182,7 @@ void mtxl_state::machine_start() if (m_ram->size() > 0xa0000) { offs_t ram_limit = 0x100000 + m_ram->size() - 0xa0000; - space.install_read_bank(0x100000, ram_limit - 1, "bank1"); - space.install_write_bank(0x100000, ram_limit - 1, "bank1"); - membank("bank1")->set_base(m_ram->pointer() + 0xa0000); + space.install_ram(0x100000, ram_limit - 1, m_ram->pointer() + 0xa0000); } #endif } diff --git a/src/mame/drivers/multigam.cpp b/src/mame/drivers/multigam.cpp index 1c451b4033f..43ceeed8699 100644 --- a/src/mame/drivers/multigam.cpp +++ b/src/mame/drivers/multigam.cpp @@ -123,7 +123,10 @@ public: m_ppu(*this, "ppu"), m_p1(*this, "P1"), m_p2(*this, "P2"), - m_dsw(*this, "DSW") + m_dsw(*this, "DSW"), + m_bank_gfx(*this, "bank_gfx"), + m_bank_ppu(*this, "bank_ppu_%u", 1U), + m_bank_ram(*this, "bank_ram") { } void multigam(machine_config &config); @@ -148,6 +151,9 @@ private: required_ioport m_p1; required_ioport m_p2; optional_ioport m_dsw; + memory_bank_creator m_bank_gfx; + memory_bank_array_creator<8> m_bank_ppu; + optional_memory_bank m_bank_ram; std::unique_ptr<uint8_t[]> m_nt_ram; std::unique_ptr<uint8_t[]> m_vram; @@ -273,8 +279,6 @@ uint8_t multigam_state::multigam_nt_r(offs_t offset) return m_nt_page[page][offset & 0x3ff]; } -static const char * const banknames[] = { "bank2", "bank3", "bank4", "bank5", "bank6", "bank7", "bank8", "bank9" }; - void multigam_state::set_videorom_bank( int start, int count, int bank, int bank_size_in_kb) { int i; @@ -283,7 +287,7 @@ void multigam_state::set_videorom_bank( int start, int count, int bank, int bank /* count determines the size of the area mapped in KB */ for (i = 0; i < count; i++, offset += 0x400) { - membank(banknames[i + start])->set_base(memregion("gfx1")->base() + offset); + m_bank_ppu[i + start]->set_base(memregion("gfx1")->base() + offset); } } @@ -295,7 +299,7 @@ void multigam_state::set_videoram_bank( int start, int count, int bank, int bank /* count determines the size of the area mapped in KB */ for (i = 0; i < count; i++, offset += 0x400) { - membank(banknames[i + start])->set_base(m_vram.get() + offset); + m_bank_ppu[i + start]->set_base(m_vram.get() + offset); } } @@ -384,7 +388,7 @@ void multigam_state::multigam_switch_prg_rom(uint8_t data) void multigam_state::multigam_switch_gfx_rom(uint8_t data) { - membank("bank1")->set_base(memregion("gfx1")->base() + (0x2000 * (data & 0x3f))); + m_bank_gfx->set_base(memregion("gfx1")->base() + (0x2000 * (data & 0x3f))); set_mirroring(data & 0x40 ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT); m_game_gfx_bank = data; } @@ -394,7 +398,7 @@ void multigam_state::multigam_mapper2_w(offs_t offset, uint8_t data) { if (m_game_gfx_bank & 0x80) { - membank("bank1")->set_base(memregion("gfx1")->base() + (0x2000 * ((data & 0x3) + (m_game_gfx_bank & 0x3c)))); + m_bank_gfx->set_base(memregion("gfx1")->base() + (0x2000 * ((data & 0x3) + (m_game_gfx_bank & 0x3c)))); } else { @@ -577,11 +581,11 @@ void multigam_state::multigam3_mmc3_rom_switch_w(offs_t offset, uint8_t data) case 0x2001: /* enable ram at $6000 */ if (data & 0x80) { - membank("bank10")->set_base(m_multigmc_mmc3_6000_ram.get()); + m_bank_ram->set_base(m_multigmc_mmc3_6000_ram.get()); } else { - membank("bank10")->set_base(memregion("maincpu")->base() + 0x6000); + m_bank_ram->set_base(memregion("maincpu")->base() + 0x6000); } if (data & 0x40) { @@ -665,7 +669,7 @@ void multigam_state::multigm3_switch_prg_rom(address_space &space, uint8_t data) else { space.install_write_handler(0x8000, 0xffff, write8sm_delegate(*this, FUNC(multigam_state::multigm3_mapper2_w)) ); - membank("bank10")->set_base(memregion("maincpu")->base() + 0x6000); + m_bank_ram->set_base(memregion("maincpu")->base() + 0x6000); } if (data & 0x80) @@ -702,7 +706,7 @@ void multigam_state::multigm3_map(address_map &map) map(0x5003, 0x5003).w(FUNC(multigam_state::multigm3_switch_gfx_rom)); map(0x5000, 0x5ffe).rom(); map(0x5fff, 0x5fff).portr("IN0"); - map(0x6000, 0x7fff).bankrw("bank10"); + map(0x6000, 0x7fff).bankrw("bank_ram"); map(0x6fff, 0x6fff).nopw(); /* 0x00 in attract mode, 0xff during play */ map(0x8000, 0xffff).rom().w(FUNC(multigam_state::multigm3_mapper2_w)); } @@ -921,23 +925,16 @@ void multigam_state::supergm3_set_bank() m_supergm3_chr_bank == 0x40 ) { // VRAM - m_ppu->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, "bank1"); - m_ppu->space(AS_PROGRAM).install_write_bank(0x0000, 0x1fff, "bank1"); - membank("bank1")->set_base(m_vram.get()); + m_ppu->space(AS_PROGRAM).install_readwrite_bank(0x0000, 0x1fff, m_bank_gfx); + m_bank_gfx->set_base(m_vram.get()); if (m_supergm3_chr_bank == 0x40) set_mirroring(PPU_MIRROR_VERT); } else { - m_ppu->space(AS_PROGRAM).install_read_bank(0x0000, 0x03ff, "bank2"); - m_ppu->space(AS_PROGRAM).install_read_bank(0x0400, 0x07ff, "bank3"); - m_ppu->space(AS_PROGRAM).install_read_bank(0x0800, 0x0bff, "bank4"); - m_ppu->space(AS_PROGRAM).install_read_bank(0x0c00, 0x0fff, "bank5"); - m_ppu->space(AS_PROGRAM).install_read_bank(0x1000, 0x13ff, "bank6"); - m_ppu->space(AS_PROGRAM).install_read_bank(0x1400, 0x17ff, "bank7"); - m_ppu->space(AS_PROGRAM).install_read_bank(0x1800, 0x1bff, "bank8"); - m_ppu->space(AS_PROGRAM).install_read_bank(0x1c00, 0x1fff, "bank9"); + for(int i=0; i<8; i++) + m_ppu->space(AS_PROGRAM).install_read_bank(0x0000 + 0x400*i, 0x03ff + 0x400*i, m_bank_ppu[i]); m_ppu->space(AS_PROGRAM).unmap_write(0x0000, 0x1fff); set_videorom_bank(0, 8, 0, 8); @@ -948,7 +945,7 @@ void multigam_state::supergm3_set_bank() { // title screen memcpy(mem + 0x8000, mem + 0x18000, 0x8000); - membank("bank10")->set_base(mem + 0x6000); + m_bank_ram->set_base(mem + 0x6000); m_ppu->set_scanline_callback(nullptr); } else if ((m_supergm3_prg_bank & 0x40) == 0) @@ -1004,7 +1001,7 @@ void multigam_state::supergm3_map(address_map &map) map(0x5001, 0x5001).w(FUNC(multigam_state::supergm3_prg_bank_w)); map(0x5002, 0x5002).w(FUNC(multigam_state::supergm3_chr_bank_w)); map(0x5fff, 0x5fff).nopw(); - map(0x6000, 0x7fff).bankrw("bank10"); + map(0x6000, 0x7fff).bankrw("bank_ram"); map(0x8000, 0xffff).rom(); } @@ -1169,8 +1166,8 @@ void multigam_state::machine_start() m_nt_page[3] = m_nt_ram.get() + 0xc00; m_ppu->space(AS_PROGRAM).install_readwrite_handler(0x2000, 0x3eff, read8sm_delegate(*this, FUNC(multigam_state::multigam_nt_r)), write8sm_delegate(*this, FUNC(multigam_state::multigam_nt_w))); - m_ppu->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, "bank1"); - membank("bank1")->set_base(memregion("gfx1")->base()); + m_ppu->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, m_bank_gfx); + m_bank_gfx->set_base(memregion("gfx1")->base()); } MACHINE_START_MEMBER(multigam_state,multigm3) @@ -1182,15 +1179,8 @@ MACHINE_START_MEMBER(multigam_state,multigm3) m_nt_page[3] = m_nt_ram.get() + 0xc00; m_ppu->space(AS_PROGRAM).install_readwrite_handler(0x2000, 0x3eff, read8sm_delegate(*this, FUNC(multigam_state::multigam_nt_r)), write8sm_delegate(*this, FUNC(multigam_state::multigam_nt_w))); - - m_ppu->space(AS_PROGRAM).install_read_bank(0x0000, 0x03ff, "bank2"); - m_ppu->space(AS_PROGRAM).install_read_bank(0x0400, 0x07ff, "bank3"); - m_ppu->space(AS_PROGRAM).install_read_bank(0x0800, 0x0bff, "bank4"); - m_ppu->space(AS_PROGRAM).install_read_bank(0x0c00, 0x0fff, "bank5"); - m_ppu->space(AS_PROGRAM).install_read_bank(0x1000, 0x13ff, "bank6"); - m_ppu->space(AS_PROGRAM).install_read_bank(0x1400, 0x17ff, "bank7"); - m_ppu->space(AS_PROGRAM).install_read_bank(0x1800, 0x1bff, "bank8"); - m_ppu->space(AS_PROGRAM).install_read_bank(0x1c00, 0x1fff, "bank9"); + for(int i=0; i<8; i++) + m_ppu->space(AS_PROGRAM).install_read_bank(0x0000 + 0x400*i, 0x03ff + 0x400*i, m_bank_ppu[i]); set_videorom_bank(0, 8, 0, 8); } diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp index 1565d0f6983..89f92a09367 100644 --- a/src/mame/drivers/naomi.cpp +++ b/src/mame/drivers/naomi.cpp @@ -1746,7 +1746,7 @@ void naomi_state::eeprom_93c46a_w(uint64_t data) void naomi_state::naomi_map(address_map &map) { /* Area 0 */ - map(0x00000000, 0x001fffff).rom().region("maincpu", 0).share("rombase"); // BIOS + map(0x00000000, 0x001fffff).rom().region("maincpu", 0); // BIOS map(0x00200000, 0x00207fff).ram().share("sram"); map(0x005f6800, 0x005f69ff).mirror(0x02000000).rw(FUNC(naomi_state::dc_sysctrl_r), FUNC(naomi_state::dc_sysctrl_w)); @@ -1806,7 +1806,7 @@ void naomi2_state::both_pvr2_ta_w(address_space &space, offs_t offset, uint32_t void naomi2_state::naomi2_map(address_map &map) { /* Area 0 */ - map(0x00000000, 0x001fffff).rom().region("maincpu", 0).share("rombase"); // BIOS + map(0x00000000, 0x001fffff).rom().region("maincpu", 0); // BIOS map(0x00200000, 0x00207fff).ram().share("sram"); map(0x005f6800, 0x005f69ff).mirror(0x02000000).rw(FUNC(naomi2_state::dc_sysctrl_r), FUNC(naomi2_state::dc_sysctrl_w)); @@ -1982,8 +1982,8 @@ void atomiswave_state::aw_modem_w(offs_t offset, uint64_t data, uint64_t mem_mas void atomiswave_state::aw_map(address_map &map) { /* Area 0 */ - map(0x00000000, 0x0001ffff).rw(FUNC(atomiswave_state::aw_flash_r), FUNC(atomiswave_state::aw_flash_w)).region("awflash", 0); - map(0xa0000000, 0xa001ffff).rw(FUNC(atomiswave_state::aw_flash_r), FUNC(atomiswave_state::aw_flash_w)).region("awflash", 0); + map(0x00000000, 0x0001ffff).rw(FUNC(atomiswave_state::aw_flash_r), FUNC(atomiswave_state::aw_flash_w)); + map(0xa0000000, 0xa001ffff).rw(FUNC(atomiswave_state::aw_flash_r), FUNC(atomiswave_state::aw_flash_w)); map(0x00200000, 0x0021ffff).ram().share("sram"); // battery backed up RAM map(0x005f6800, 0x005f69ff).rw(FUNC(atomiswave_state::dc_sysctrl_r), FUNC(atomiswave_state::dc_sysctrl_w)); diff --git a/src/mame/drivers/nc.cpp b/src/mame/drivers/nc.cpp index f1e0e822cb6..fcfa62aae28 100644 --- a/src/mame/drivers/nc.cpp +++ b/src/mame/drivers/nc.cpp @@ -289,13 +289,6 @@ TIMER_CALLBACK_MEMBER(nc_state::nc_keyboard_timer_callback) m_keyboard_timer->reset(); } - -static const char *const nc_bankhandler_r[]={ -"bank1", "bank2", "bank3", "bank4"}; - -static const char *const nc_bankhandler_w[]={ -"bank5", "bank6", "bank7", "bank8"}; - void nc_state::nc_refresh_memory_bank_config(int bank) { address_space &space = m_maincpu->space(AS_PROGRAM); @@ -310,7 +303,7 @@ void nc_state::nc_refresh_memory_bank_config(int bank) mem_type = (m_memory_config[bank]>>6) & 0x03; mem_bank = m_memory_config[bank] & 0x03f; - space.install_read_bank((bank * 0x4000), (bank * 0x4000) + 0x3fff, nc_bankhandler_r[bank]); + space.install_read_bank((bank * 0x4000), (bank * 0x4000) + 0x3fff, m_bankhandler_r[bank]); switch (mem_type) { @@ -337,7 +330,7 @@ void nc_state::nc_refresh_memory_bank_config(int bank) membank(bank1)->set_base(ptr); membank(bank5)->set_base(ptr); - space.install_write_bank((bank * 0x4000), (bank * 0x4000) + 0x3fff, nc_bankhandler_w[bank]); + space.install_write_bank((bank * 0x4000), (bank * 0x4000) + 0x3fff, m_bankhandler_w[bank]); LOG("BANK %d: RAM\n",bank); } break; @@ -358,7 +351,7 @@ void nc_state::nc_refresh_memory_bank_config(int bank) { /* yes */ membank(bank5)->set_base(ptr); - space.install_write_bank((bank * 0x4000), (bank * 0x4000) + 0x3fff, nc_bankhandler_w[bank]); + space.install_write_bank((bank * 0x4000), (bank * 0x4000) + 0x3fff, m_bankhandler_w[bank]); } else { diff --git a/src/mame/drivers/neogeo.cpp b/src/mame/drivers/neogeo.cpp index 9828656c9e3..d31735ceebe 100644 --- a/src/mame/drivers/neogeo.cpp +++ b/src/mame/drivers/neogeo.cpp @@ -1405,9 +1405,8 @@ void neogeo_base_state::set_slot_idx(int slot) space.install_rom(0x000080, 0x0fffff, (uint16_t *)m_slots[m_curr_slot]->get_rom_base() + 0x80/2); - space.install_read_bank(0x200000, 0x2fffff, "cartridge"); + space.install_read_bank(0x200000, 0x2fffff, m_bank_cartridge); space.install_write_handler(0x2ffff0, 0x2fffff, write16smo_delegate(*this, FUNC(neogeo_base_state::write_banksel))); - m_bank_cartridge = membank("cartridge"); init_cpu(); @@ -1694,7 +1693,7 @@ uint16_t neogeo_base_state::banked_vectors_r(offs_t offset) } else { - uint16_t* rom = (m_slots[m_curr_slot] && m_slots[m_curr_slot]->get_rom_size() > 0) ? m_slots[m_curr_slot]->get_rom_base() : (uint16_t*)m_region_maincpu->base(); + uint16_t* rom = (m_slots[m_curr_slot] && m_slots[m_curr_slot]->get_rom_size() > 0) ? m_slots[m_curr_slot]->get_rom_base() : m_region_maincpu ? (uint16_t*)m_region_maincpu->base() : m_share_maincpu; return rom[offset]; } } diff --git a/src/mame/drivers/neogeocd.cpp b/src/mame/drivers/neogeocd.cpp index 9cc22fe75be..0421088043b 100644 --- a/src/mame/drivers/neogeocd.cpp +++ b/src/mame/drivers/neogeocd.cpp @@ -887,7 +887,7 @@ void ngcd_state::neocd_main_map(address_map &map) { aes_base_main_map(map); - map(0x000000, 0x1fffff).ram().region("maincpu", 0x00000); + map(0x000000, 0x1fffff).ram().share("maincpu"); map(0x000000, 0x00007f).r(FUNC(ngcd_state::banked_vectors_r)); // writes will fall through to area above map(0x800000, 0x803fff).rw(FUNC(ngcd_state::memcard_r), FUNC(ngcd_state::memcard_w)); @@ -1089,9 +1089,6 @@ ROM_START( neocd ) ROM_SYSTEM_BIOS( 3, "unibios33", "Universe Bios (Hack, Ver. 3.3)" ) ROMX_LOAD("uni-bioscd33.rom", 0x00000, 0x80000, CRC(ff3abc59) SHA1(5142f205912869b673a71480c5828b1eaed782a8), ROM_GROUPWORD | ROM_REVERSE | ROM_BIOS(3)) - ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 ) - /* 2MB of 68K RAM */ - ROM_REGION( 0x20000, "spritegen:zoomy", 0 ) ROM_LOAD( "000-lo.lo", 0x00000, 0x20000, CRC(5a86cff2) SHA1(5992277debadeb64d1c1c64b0a92d9293eaf7e4a) ) ROM_END @@ -1105,9 +1102,6 @@ ROM_START( neocdz ) ROM_SYSTEM_BIOS( 2, "unibios33", "Universe Bios (Hack, Ver. 3.3)" ) ROMX_LOAD("uni-bioscd33.rom", 0x00000, 0x80000, CRC(ff3abc59) SHA1(5142f205912869b673a71480c5828b1eaed782a8), ROM_GROUPWORD | ROM_REVERSE | ROM_BIOS(2)) - ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 ) - /* 2MB of 68K RAM */ - ROM_REGION( 0x20000, "spritegen:zoomy", 0 ) ROM_LOAD( "000-lo.lo", 0x00000, 0x20000, CRC(5a86cff2) SHA1(5992277debadeb64d1c1c64b0a92d9293eaf7e4a) ) ROM_END diff --git a/src/mame/drivers/neopcb.cpp b/src/mame/drivers/neopcb.cpp index 6ee9087b3a0..a58594d8b55 100644 --- a/src/mame/drivers/neopcb.cpp +++ b/src/mame/drivers/neopcb.cpp @@ -19,6 +19,8 @@ public: , m_cmc_prot(*this, "cmc50") , m_pcm2_prot(*this, "pcm2") , m_pvc_prot(*this, "pvc") + , m_cpu_bank(*this, "cpu_bank") + , m_bios_bank(*this, "bios_bank") { } @@ -52,6 +54,8 @@ private: required_device<cmc_prot_device> m_cmc_prot; required_device<pcm2_prot_device> m_pcm2_prot; required_device<pvc_prot_device> m_pvc_prot; + memory_bank_creator m_cpu_bank; + memory_bank_creator m_bios_bank; }; @@ -66,7 +70,7 @@ void neopcb_state::device_post_load() { ngarcade_base_state::device_post_load(); - membank("cpu_bank")->set_base(m_region_maincpu->base() + m_bank_base); + m_cpu_bank->set_base(m_region_maincpu->base() + m_bank_base); } void neopcb_state::neopcb(machine_config &config) @@ -86,7 +90,7 @@ void neopcb_state::neopcb(machine_config &config) INPUT_CHANGED_MEMBER(neopcb_state::select_bios) { - membank("bios_bank")->set_entry(newval ? 0 : 1); + m_bios_bank->set_entry(newval ? 0 : 1); } static INPUT_PORTS_START( dualbios ) @@ -457,7 +461,7 @@ void neopcb_state::write_bankpvc(offs_t offset, uint16_t data, uint16_t mem_mask if (offset >= 0xff8) { m_bank_base = m_pvc_prot->get_bank_base(); - membank("cpu_bank")->set_base(m_region_maincpu->base() + m_bank_base); + m_cpu_bank->set_base(m_region_maincpu->base() + m_bank_base); } } @@ -465,8 +469,8 @@ void neopcb_state::install_common() { // install memory bank m_maincpu->space(AS_PROGRAM).install_rom(0x000080, 0x0fffff, (uint16_t *)m_region_maincpu->base() + 0x80/2); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x200000, 0x2fffff, "cpu_bank"); - membank("cpu_bank")->set_base(m_region_maincpu->base() + 0x100000); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x200000, 0x2fffff, m_cpu_bank); + m_cpu_bank->set_base(m_region_maincpu->base() + 0x100000); // install protection handlers + bankswitch handler m_maincpu->space(AS_PROGRAM).install_read_handler(0x2fe000, 0x2fffff, read16sm_delegate(*m_pvc_prot, FUNC(pvc_prot_device::protection_r))); @@ -483,9 +487,9 @@ void neopcb_state::install_common() void neopcb_state::install_banked_bios() { - m_maincpu->space(AS_PROGRAM).install_read_bank(0xc00000, 0xc1ffff, 0x0e0000, "bios_bank"); - membank("bios_bank")->configure_entries(0, 2, memregion("mainbios")->base(), 0x20000); - membank("bios_bank")->set_entry(1); + m_maincpu->space(AS_PROGRAM).install_read_bank(0xc00000, 0xc1ffff, 0x0e0000, m_bios_bank); + m_bios_bank->configure_entries(0, 2, memregion("mainbios")->base(), 0x20000); + m_bios_bank->set_entry(1); } diff --git a/src/mame/drivers/nes.cpp b/src/mame/drivers/nes.cpp index 0976aac72ca..a652492622a 100644 --- a/src/mame/drivers/nes.cpp +++ b/src/mame/drivers/nes.cpp @@ -244,8 +244,7 @@ MACHINE_START_MEMBER( nes_state, famitwin ) setup_disk(m_disk); // replace the famicom disk ROM with the famicom twin one (until we modernize the floppy drive) - m_maincpu->space(AS_PROGRAM).install_read_bank(0xe000, 0xffff, "ftbios"); - membank("ftbios")->set_base(machine().root_device().memregion("maincpu")->base() + 0xe000); + m_maincpu->space(AS_PROGRAM).install_rom(0xe000, 0xffff, machine().root_device().memregion("maincpu")->base() + 0xe000); } } diff --git a/src/mame/drivers/ngen.cpp b/src/mame/drivers/ngen.cpp index e0a18155ead..13318a7717f 100644 --- a/src/mame/drivers/ngen.cpp +++ b/src/mame/drivers/ngen.cpp @@ -100,7 +100,7 @@ public: m_hdc_timer(*this,"hdc_timer"), m_disk_rom(*this,"disk"), m_fd0(*this,"fdc:0"), - m_hd_buffer(*this,"hd_buffer_ram") + m_hd_buffer(*this,"hd_buffer_ram", 1024*8, ENDIANNESS_LITTLE) { } @@ -186,7 +186,7 @@ private: memory_array m_vram; memory_array m_fontram; optional_device<floppy_connector> m_fd0; - optional_shared_ptr<uint8_t> m_hd_buffer; + memory_share_creator<uint8_t> m_hd_buffer; void set_dma_channel(int channel, int state); @@ -843,7 +843,6 @@ void ngen_state::machine_start() { memory_share* vidshare = memshare("vram"); memory_share* fontshare = memshare("fontram"); - m_hd_buffer.allocate(1024*8); // 8kB buffer RAM for HD controller if(vidshare == nullptr || fontshare == nullptr) fatalerror("VRAM not found\n"); m_vram.set(*vidshare,2); diff --git a/src/mame/drivers/ngp.cpp b/src/mame/drivers/ngp.cpp index 9b991fe644f..c0e8e51e98d 100644 --- a/src/mame/drivers/ngp.cpp +++ b/src/mame/drivers/ngp.cpp @@ -661,10 +661,8 @@ void ngp_state::machine_start() std::string region_tag; uint8_t *cart = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str())->base(); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x200000, 0x3fffff, "flash0"); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x800000, 0x9fffff, "flash1"); - membank("flash0")->set_base(cart); - membank("flash1")->set_base(cart + 0x200000); + m_maincpu->space(AS_PROGRAM).install_rom(0x200000, 0x3fffff, cart); + m_maincpu->space(AS_PROGRAM).install_rom(0x800000, 0x9fffff, cart + 0x200000); m_flash_chip[0].data = cart; m_flash_chip[0].org_data[0] = m_flash_chip[0].data[0]; diff --git a/src/mame/drivers/nightgal.cpp b/src/mame/drivers/nightgal.cpp index 8ba32648947..99ad00d2a4a 100644 --- a/src/mame/drivers/nightgal.cpp +++ b/src/mame/drivers/nightgal.cpp @@ -417,8 +417,8 @@ void nightgal_state::sexygal_audionmi_w(uint8_t data) void nightgal_state::sweetgal_map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0x8000, 0x807f).ram().share("sound_ram"); - map(0xe000, 0xefff).rw(FUNC(nightgal_state::royalqn_comm_r), FUNC(nightgal_state::royalqn_comm_w)).share("comms_ram"); + map(0x8000, 0x807f).lrw8([this](offs_t off) { return m_sound_ram[off]; }, "snd_r", [this](offs_t off, u8 data) { m_sound_ram[off] = data; }, "snd_w"); + map(0xe000, 0xefff).rw(FUNC(nightgal_state::royalqn_comm_r), FUNC(nightgal_state::royalqn_comm_w)); map(0xf000, 0xffff).ram(); } diff --git a/src/mame/drivers/nmk16.cpp b/src/mame/drivers/nmk16.cpp index 3f2249e7aa8..8f7d653efcd 100644 --- a/src/mame/drivers/nmk16.cpp +++ b/src/mame/drivers/nmk16.cpp @@ -1162,7 +1162,7 @@ void nmk16_state::gunnail_map(address_map &map) map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x08c000, 0x08c1ff).writeonly().share("scrollram"); map(0x08c200, 0x08c3ff).writeonly().share("scrollramy"); - map(0x08c400, 0x08c7ff).writeonly(); // unknown + map(0x08c400, 0x08c7ff).nopw(); // unknown map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0"); map(0x09c000, 0x09cfff).mirror(0x001000).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram"); map(0x0f0000, 0x0fffff).ram().share("mainram"); @@ -1183,7 +1183,7 @@ void nmk16_state::gunnailb_map(address_map &map) map(0x088000, 0x0887ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x08c000, 0x08c1ff).writeonly().share("scrollram"); map(0x08c200, 0x08c3ff).writeonly().share("scrollramy"); - map(0x08c400, 0x08c7ff).writeonly(); // unknown + map(0x08c400, 0x08c7ff).nopw(); // unknown map(0x090000, 0x093fff).ram().w(FUNC(nmk16_state::bgvideoram_w<0>)).share("bgvideoram0"); map(0x09c000, 0x09cfff).mirror(0x001000).ram().w(FUNC(nmk16_state::txvideoram_w)).share("txvideoram"); map(0x0f0000, 0x0fffff).ram().share("mainram"); diff --git a/src/mame/drivers/nwk-tr.cpp b/src/mame/drivers/nwk-tr.cpp index 345e395525f..d0d55947ef1 100644 --- a/src/mame/drivers/nwk-tr.cpp +++ b/src/mame/drivers/nwk-tr.cpp @@ -729,9 +729,9 @@ void nwktr_state::nwktr_map(address_map &map) map(0x7d030000, 0x7d03000f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w)); map(0x7d040000, 0x7d04ffff).rw(FUNC(nwktr_state::lanc1_r), FUNC(nwktr_state::lanc1_w)); map(0x7d050000, 0x7d05ffff).rw(FUNC(nwktr_state::lanc2_r), FUNC(nwktr_state::lanc2_w)); - map(0x7e000000, 0x7e7fffff).rom().region("user2", 0); // Data ROM - map(0x7f000000, 0x7f1fffff).rom().share("share2"); - map(0x7fe00000, 0x7fffffff).rom().region("user1", 0).share("share2"); // Program ROM + map(0x7e000000, 0x7e7fffff).rom().region("user2", 0); /* Data ROM */ + map(0x7f000000, 0x7f1fffff).rom().region("user1", 0); + map(0x7fe00000, 0x7fffffff).rom().region("user1", 0); /* Program ROM */ } /*****************************************************************************/ diff --git a/src/mame/drivers/octopus.cpp b/src/mame/drivers/octopus.cpp index b33a13202de..6b4e4ef02b9 100644 --- a/src/mame/drivers/octopus.cpp +++ b/src/mame/drivers/octopus.cpp @@ -145,7 +145,7 @@ public: m_maincpu(*this, "maincpu"), m_subcpu(*this, "subcpu"), m_crtc(*this, "crtc"), - m_vram(*this, "vram"), + m_vram(*this, "vram", 0x10000, ENDIANNESS_LITTLE), m_fontram(*this, "fram"), m_dma1(*this, "dma1"), m_dma2(*this, "dma2"), @@ -238,7 +238,7 @@ private: required_device<cpu_device> m_maincpu; required_device<cpu_device> m_subcpu; required_device<scn2674_device> m_crtc; - required_shared_ptr<uint8_t> m_vram; + memory_share_creator<uint8_t> m_vram; required_shared_ptr<uint8_t> m_fontram; required_device<am9517a_device> m_dma1; required_device<am9517a_device> m_dma2; @@ -760,7 +760,7 @@ void octopus_state::machine_start() m_vidctrl = 0xff; // install RAM - m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000,m_ram->size()-1,"main_ram_bank"); + m_maincpu->space(AS_PROGRAM).install_ram(0x0000,m_ram->size()-1,m_ram->pointer()); m_maincpu->space(AS_PROGRAM).nop_readwrite(m_ram->size(),0xcffff); } @@ -773,13 +773,11 @@ void octopus_state::machine_reset() m_current_drive = 0; m_rtc_address = true; m_rtc_data = false; - membank("main_ram_bank")->set_base(m_ram->pointer()); m_kb_uart->write_dsr(1); // DSR is used to determine if a keyboard is connected? If DSR is high, then the CHAR_OUT BIOS function will not output to the screen. } void octopus_state::video_start() { - m_vram.allocate(0x10000); } uint8_t octopus_state::video_latch_r(offs_t offset) diff --git a/src/mame/drivers/offtwall.cpp b/src/mame/drivers/offtwall.cpp index 094adb79fd5..53405aced24 100644 --- a/src/mame/drivers/offtwall.cpp +++ b/src/mame/drivers/offtwall.cpp @@ -115,7 +115,7 @@ uint16_t offtwall_state::bankrom_r(address_space &space, offs_t offset) return us >> 16; } - return m_bankrom_base[(m_bank_offset + offset) & 0x3fff]; + return m_bankrom_base[0x38000 | ((m_bank_offset + offset) & 0x3fff)]; } @@ -212,7 +212,7 @@ uint16_t offtwall_state::unknown_verify_r(offs_t offset) void offtwall_state::main_map(address_map &map) { map(0x000000, 0x037fff).rom(); - map(0x038000, 0x03ffff).r(FUNC(offtwall_state::bankrom_r)).region("maincpu", 0x38000).share("bankrom_base"); + map(0x038000, 0x03ffff).r(FUNC(offtwall_state::bankrom_r)); map(0x120000, 0x120fff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).umask16(0x00ff); map(0x260000, 0x260001).portr("260000"); map(0x260002, 0x260003).portr("260002"); diff --git a/src/mame/drivers/ojankohs.cpp b/src/mame/drivers/ojankohs.cpp index 938ed75e7ac..031a4ab301e 100644 --- a/src/mame/drivers/ojankohs.cpp +++ b/src/mame/drivers/ojankohs.cpp @@ -985,9 +985,9 @@ ROM_START( ojankoca ) ROM_END -GAME( 1986, ojankoc, 0, ojankoc, ojankoc, ojankohs_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.3)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, ojankoca, ojankoc, ojankoc, ojankoc, ojankohs_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, ojankoy, 0, ojankoy, ojankoy, ojankohs_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ojanko2, 0, ojankoy, ojankoy, ojankohs_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata 2bankan (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ccasino, 0, ccasino, ccasino, ojankohs_state, empty_init, ROT0, "V-System Co.", "Chinese Casino [BET] (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, ojankoc, 0, ojankoc, ojankoc, ojankoc_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.3)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, ojankoca, ojankoc, ojankoc, ojankoc, ojankoc_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, ojankoy, 0, ojankoy, ojankoy, ojankoy_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ojanko2, 0, ojankoy, ojankoy, ojankoy_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata 2bankan (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ccasino, 0, ccasino, ccasino, ccasino_state, empty_init, ROT0, "V-System Co.", "Chinese Casino [BET] (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, ojankohs, 0, ojankohs, ojankohs, ojankohs_state, empty_init, ROT0, "V-System Co.", "Ojanko High School (Japan)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/omegrace.cpp b/src/mame/drivers/omegrace.cpp index f321f74781e..c7e5beaef85 100644 --- a/src/mame/drivers/omegrace.cpp +++ b/src/mame/drivers/omegrace.cpp @@ -383,7 +383,7 @@ void omegrace_state::main_map(address_map &map) map(0x0000, 0x3fff).rom(); map(0x4000, 0x4bff).ram(); map(0x5c00, 0x5cff).ram().share("nvram"); /* NVRAM */ - map(0x8000, 0x8fff).ram().share("dvg:vectorram").region("maincpu", 0x8000); /* vector ram */ + map(0x8000, 0x8fff).ram().share("dvg:vectorram"); /* vector ram */ map(0x9000, 0x9fff).rom(); /* vector rom */ } diff --git a/src/mame/drivers/opwolf.cpp b/src/mame/drivers/opwolf.cpp index 100e876394e..36337783bbf 100644 --- a/src/mame/drivers/opwolf.cpp +++ b/src/mame/drivers/opwolf.cpp @@ -404,7 +404,7 @@ void opwolf_state::opwolf_map(address_map &map) map(0x3e0000, 0x3e0000).w("ciu", FUNC(pc060ha_device::master_port_w)); map(0x3e0002, 0x3e0002).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w)); map(0xc00000, 0xc0ffff).rw(m_pc080sn, FUNC(pc080sn_device::word_r), FUNC(pc080sn_device::word_w)); - map(0xc10000, 0xc1ffff).writeonly(); /* error in init code (?) */ + map(0xc10000, 0xc1ffff).nopw(); /* error in init code (?) */ map(0xc20000, 0xc20003).w(m_pc080sn, FUNC(pc080sn_device::yscroll_word_w)); map(0xc40000, 0xc40003).w(m_pc080sn, FUNC(pc080sn_device::xscroll_word_w)); map(0xc50000, 0xc50003).w(m_pc080sn, FUNC(pc080sn_device::ctrl_word_w)); @@ -427,7 +427,7 @@ void opwolf_state::opwolfb_map(address_map &map) map(0x3e0000, 0x3e0000).w("ciu", FUNC(pc060ha_device::master_port_w)); map(0x3e0002, 0x3e0002).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w)); map(0xc00000, 0xc0ffff).rw(m_pc080sn, FUNC(pc080sn_device::word_r), FUNC(pc080sn_device::word_w)); - map(0xc10000, 0xc1ffff).writeonly(); /* error in init code (?) */ + map(0xc10000, 0xc1ffff).nopw(); /* error in init code (?) */ map(0xc20000, 0xc20003).w(m_pc080sn, FUNC(pc080sn_device::yscroll_word_w)); map(0xc40000, 0xc40003).w(m_pc080sn, FUNC(pc080sn_device::xscroll_word_w)); map(0xc50000, 0xc50003).w(m_pc080sn, FUNC(pc080sn_device::ctrl_word_w)); @@ -449,7 +449,7 @@ void opwolf_state::opwolfp_map(address_map &map) map(0x3e0000, 0x3e0000).w("ciu", FUNC(pc060ha_device::master_port_w)); map(0x3e0002, 0x3e0002).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w)); map(0xc00000, 0xc0ffff).rw(m_pc080sn, FUNC(pc080sn_device::word_r), FUNC(pc080sn_device::word_w)); - map(0xc10000, 0xc1ffff).writeonly(); /* error in init code (?) */ + map(0xc10000, 0xc1ffff).nopw(); /* error in init code (?) */ map(0xc20000, 0xc20003).w(m_pc080sn, FUNC(pc080sn_device::yscroll_word_w)); map(0xc40000, 0xc40003).w(m_pc080sn, FUNC(pc080sn_device::xscroll_word_w)); map(0xc50000, 0xc50003).w(m_pc080sn, FUNC(pc080sn_device::ctrl_word_w)); diff --git a/src/mame/drivers/osi.cpp b/src/mame/drivers/osi.cpp index 9334a256333..cc6bb15eccc 100644 --- a/src/mame/drivers/osi.cpp +++ b/src/mame/drivers/osi.cpp @@ -654,12 +654,12 @@ void sb2m600_state::machine_start() switch (m_ram->size()) { case 4*1024: - program.install_readwrite_bank(0x0000, 0x0fff, "bank1"); + program.install_readwrite_bank(0x0000, 0x0fff, membank("bank1")); program.unmap_readwrite(0x1000, 0x1fff); break; case 8*1024: - program.install_readwrite_bank(0x0000, 0x1fff, "bank1"); + program.install_readwrite_bank(0x0000, 0x1fff, membank("bank1")); break; } @@ -685,12 +685,12 @@ void c1p_state::machine_start() switch (m_ram->size()) { case 8*1024: - program.install_readwrite_bank(0x0000, 0x1fff, "bank1"); + program.install_readwrite_bank(0x0000, 0x1fff, membank("bank1")); program.unmap_readwrite(0x2000, 0x4fff); break; case 20*1024: - program.install_readwrite_bank(0x0000, 0x4fff, "bank1"); + program.install_readwrite_bank(0x0000, 0x4fff, membank("bank1")); break; } diff --git a/src/mame/drivers/pacman.cpp b/src/mame/drivers/pacman.cpp index 48d93304595..c0454493cbb 100644 --- a/src/mame/drivers/pacman.cpp +++ b/src/mame/drivers/pacman.cpp @@ -1014,6 +1014,12 @@ void pacman_state::pacman_map(address_map &map) map(0x50c0, 0x50c0).mirror(0xaf3f).portr("DSW2"); } +void pacman_state::cannonbp_map(address_map &map) +{ + pacman_map(map); + map(0x4800, 0x4bff).ram(); + map(0x3000, 0x3fff).r(FUNC(pacman_state::cannonbp_protection_r)); +} void pacman_state::birdiy_map(address_map &map) { @@ -1220,14 +1226,14 @@ void pacman_state::s2650games_map(address_map &map) map(0x0000, 0x0fff).bankr("bank1"); map(0x1000, 0x13ff).mirror(0x6000).w(FUNC(pacman_state::s2650games_colorram_w)).share("colorram"); map(0x1400, 0x141f).mirror(0x6000).w(FUNC(pacman_state::s2650games_scroll_w)); - map(0x1420, 0x148f).mirror(0x6000).writeonly(); + map(0x1420, 0x148f).mirror(0x6000).writeonly().share("unk_1420"); map(0x1490, 0x149f).mirror(0x6000).writeonly().share("s2650_spriteram"); map(0x14a0, 0x14bf).mirror(0x6000).w(FUNC(pacman_state::s2650games_tilesbank_w)).share("s2650_tileram"); - map(0x14c0, 0x14ff).mirror(0x6000).writeonly(); + map(0x14c0, 0x14ff).mirror(0x6000).writeonly().share("unk_14c0"); map(0x1500, 0x1507).mirror(0x6000).w(m_mainlatch, FUNC(ls259_device::write_d0)); - map(0x1508, 0x155f).mirror(0x6000).writeonly(); + map(0x1508, 0x155f).mirror(0x6000).writeonly().share("unk_1508"); map(0x1560, 0x156f).mirror(0x6000).writeonly().share("spriteram2"); - map(0x1570, 0x157f).mirror(0x6000).writeonly(); + map(0x1570, 0x157f).mirror(0x6000).writeonly().share("unk_1570"); map(0x1586, 0x1587).mirror(0x6000).nopw(); map(0x15c0, 0x15c0).mirror(0x6000).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); map(0x15c7, 0x15c7).mirror(0x6000).w(FUNC(pacman_state::porky_banking_w)); @@ -4008,6 +4014,11 @@ void pacman_state::crushs(machine_config &config) AY8912(config, "ay8912", 1789750).add_route(ALL_OUTPUTS, "mono", 0.75); } +void pacman_state::cannonbp(machine_config &config) +{ + pacman(config); + m_maincpu->set_addrmap(AS_PROGRAM, &pacman_state::cannonbp_map); +} /************************************* @@ -7763,16 +7774,6 @@ uint8_t pacman_state::cannonbp_protection_r(offs_t offset) } } - -void pacman_state::init_cannonbp() -{ - /* extra memory */ - m_maincpu->space(AS_PROGRAM).install_ram(0x4800, 0x4bff); - - /* protection? */ - m_maincpu->space(AS_PROGRAM).install_read_handler(0x3000, 0x3fff, read8sm_delegate(*this, FUNC(pacman_state::cannonbp_protection_r))); -} - void pacman_state::init_pengomc1() { uint8_t *romdata = memregion("maincpu")->base(); @@ -7962,7 +7963,7 @@ GAME( 1986, bigbucks, 0, bigbucks, bigbucks, pacman_state, empty_init, GAME( 1983, numcrash, 0, numcrash, numcrash, pacman_state, empty_init, ROT90, "Hanshin Goraku / Peni", "Number Crash", MACHINE_SUPPORTS_SAVE ) // "Peni soft" related? -GAME( 1985, cannonbp, 0, pacman, cannonbp, pacman_state, init_cannonbp, ROT90, "Novomatic", "Cannon Ball (Pac-Man Hardware)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) +GAME( 1985, cannonbp, 0, cannonbp, cannonbp, pacman_state, empty_init, ROT90, "Novomatic", "Cannon Ball (Pac-Man Hardware)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) GAME( 1999, superabc, 0, superabc, superabc, pacman_state, init_superabc, ROT90, "hack (Two-Bit Score)", "Super ABC (Pac-Man multigame kit, Sep. 03 1999)", MACHINE_SUPPORTS_SAVE ) GAME( 1999, superabco,superabc, superabc, superabc, pacman_state, init_superabc, ROT90, "hack (Two-Bit Score)", "Super ABC (Pac-Man multigame kit, Mar. 08 1999)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/palm.cpp b/src/mame/drivers/palm.cpp index 760f9db54e8..b0101106966 100644 --- a/src/mame/drivers/palm.cpp +++ b/src/mame/drivers/palm.cpp @@ -136,9 +136,7 @@ WRITE_LINE_MEMBER(palm_state::palm_spim_exchange) void palm_state::machine_start() { address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_read_bank (0x000000, m_ram->size() - 1, "bank1"); - space.install_write_bank(0x000000, m_ram->size() - 1, "bank1"); - membank("bank1")->set_base(m_ram->pointer()); + space.install_rom(0x000000, m_ram->size() - 1, m_ram->pointer()); save_item(NAME(m_port_f_latch)); save_item(NAME(m_spim_data)); diff --git a/src/mame/drivers/pc1500.cpp b/src/mame/drivers/pc1500.cpp index b30ddd2b5ed..75fb6e01fdf 100644 --- a/src/mame/drivers/pc1500.cpp +++ b/src/mame/drivers/pc1500.cpp @@ -96,13 +96,13 @@ private: void pc1500_state::pc1500_mem(address_map &map) { map.unmap_value_high(); - map(0x0000, 0x3fff).rom(); //module ROM/RAM + // map(0x0000, 0x3fff).rom(); //module ROM/RAM map(0x4000, 0x47ff).ram(); //user RAM map(0x4800, 0x6fff).ram(); //expansion RAM map(0x7000, 0x71ff).ram().mirror(0x0600).share("lcd_data"); - map(0x7800, 0x7bff).ram().region("maincpu", 0x7800).mirror(0x0400); - map(0xa000, 0xbfff).rom(); //expansion ROM - map(0xc000, 0xffff).rom(); //system ROM + map(0x7800, 0x7bff).ram().mirror(0x0400); + // map(0xa000, 0xbfff).rom(); //expansion ROM + map(0xc000, 0xffff).rom().region("maincpu", 0); //system ROM } void pc1500_state::pc1500_mem_io(address_map &map) @@ -350,9 +350,9 @@ void pc1500_state::pc1500(machine_config &config) ROM_START( pc1500 ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "sys1500.rom", 0xc000, 0x4000, CRC(d480b50d) SHA1(4bf748ba4d7c2b7cd7da7f3fdefcdd2e4cd41c4e)) - ROM_REGION( 0x10000, "ce150", ROMREGION_ERASEFF ) + ROM_REGION( 0x4000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "sys1500.rom", 0x0000, 0x4000, CRC(d480b50d) SHA1(4bf748ba4d7c2b7cd7da7f3fdefcdd2e4cd41c4e)) + ROM_REGION( 0x2000, "ce150", ROMREGION_ERASEFF ) ROM_LOAD( "ce-150.rom", 0x0000, 0x2000, CRC(8fa1df6d) SHA1(a3aa02a641a46c27c0d4c0dc025b0dbe9b5b79c8)) ROM_END diff --git a/src/mame/drivers/pc8001.cpp b/src/mame/drivers/pc8001.cpp index a7478090cb7..f34f2cd00ad 100644 --- a/src/mame/drivers/pc8001.cpp +++ b/src/mame/drivers/pc8001.cpp @@ -439,7 +439,7 @@ void pc8001_state::machine_start() uint8_t *ram = m_ram->pointer(); membank("bank1")->configure_entry(1, m_rom->base()); - program.install_read_bank(0x0000, 0x5fff, "bank1"); + program.install_read_bank(0x0000, 0x5fff, membank("bank1")); program.unmap_write(0x0000, 0x5fff); switch (m_ram->size()) @@ -448,22 +448,22 @@ void pc8001_state::machine_start() membank("bank3")->configure_entry(0, ram); program.unmap_readwrite(0x6000, 0xbfff); program.unmap_readwrite(0x8000, 0xbfff); - program.install_readwrite_bank(0xc000, 0xffff, "bank3"); + program.install_readwrite_bank(0xc000, 0xffff, membank("bank3")); break; case 32*1024: membank("bank3")->configure_entry(0, ram); program.unmap_readwrite(0x6000, 0xbfff); - program.install_readwrite_bank(0x8000, 0xffff, "bank3"); + program.install_readwrite_bank(0x8000, 0xffff, membank("bank3")); break; case 64*1024: membank("bank1")->configure_entry(0, ram); membank("bank2")->configure_entry(0, ram + 0x6000); membank("bank3")->configure_entry(0, ram + 0x8000); - program.install_readwrite_bank(0x0000, 0x5fff, "bank1"); - program.install_readwrite_bank(0x6000, 0xbfff, "bank2"); - program.install_readwrite_bank(0x8000, 0xffff, "bank3"); + program.install_readwrite_bank(0x0000, 0x5fff, membank("bank1")); + program.install_readwrite_bank(0x6000, 0xbfff, membank("bank2")); + program.install_readwrite_bank(0x8000, 0xffff, membank("bank3")); membank("bank2")->set_entry(0); break; } diff --git a/src/mame/drivers/pc8401a.cpp b/src/mame/drivers/pc8401a.cpp index ad6e29ccbe4..435050124f8 100644 --- a/src/mame/drivers/pc8401a.cpp +++ b/src/mame/drivers/pc8401a.cpp @@ -85,14 +85,14 @@ void pc8401a_state::bankswitch(uint8_t data) if (rombank < 3) { /* internal ROM */ - program.install_read_bank(0x0000, 0x7fff, "bank1"); + program.install_read_bank(0x0000, 0x7fff, membank("bank1")); program.unmap_write(0x0000, 0x7fff); membank("bank1")->set_entry(rombank); } else if (m_cart_rom) { /* ROM cartridge */ - program.install_read_bank(0x0000, 0x7fff, "bank1"); + program.install_read_bank(0x0000, 0x7fff, membank("bank1")); program.unmap_write(0x0000, 0x7fff); membank("bank1")->set_entry(6); } @@ -102,13 +102,13 @@ void pc8401a_state::bankswitch(uint8_t data) break; case 1: /* RAM 0000H to 7FFFH */ - program.install_readwrite_bank(0x0000, 0x7fff, "bank1"); + program.install_readwrite_bank(0x0000, 0x7fff, membank("bank1")); membank("bank1")->set_entry(4); //logerror("0x0000-0x7fff = RAM 0-7fff\n"); break; case 2: /* RAM 8000H to FFFFH */ - program.install_readwrite_bank(0x0000, 0x7fff, "bank1"); + program.install_readwrite_bank(0x0000, 0x7fff, membank("bank1")); membank("bank1")->set_entry(5); //logerror("0x0000-0x7fff = RAM 8000-ffff\n"); break; @@ -121,19 +121,19 @@ void pc8401a_state::bankswitch(uint8_t data) switch (ram8000) { case 0: /* cell addresses 0000H to 3FFFH */ - program.install_readwrite_bank(0x8000, 0xbfff, "bank3"); + program.install_readwrite_bank(0x8000, 0xbfff, membank("bank3")); membank("bank3")->set_entry(0); //logerror("0x8000-0xbfff = RAM 0-3fff\n"); break; case 1: /* cell addresses 4000H to 7FFFH */ - program.install_readwrite_bank(0x8000, 0xbfff, "bank3"); + program.install_readwrite_bank(0x8000, 0xbfff, membank("bank3")); membank("bank3")->set_entry(1); //logerror("0x8000-0xbfff = RAM 4000-7fff\n"); break; case 2: /* cell addresses 8000H to BFFFH */ - program.install_readwrite_bank(0x8000, 0xbfff, "bank3"); + program.install_readwrite_bank(0x8000, 0xbfff, membank("bank3")); membank("bank3")->set_entry(2); //logerror("0x8000-0xbfff = RAM 8000-bfff\n"); break; @@ -141,7 +141,7 @@ void pc8401a_state::bankswitch(uint8_t data) case 3: /* RAM cartridge */ if (m_ram->size() > 64) { - program.install_readwrite_bank(0x8000, 0xbfff, "bank3"); + program.install_readwrite_bank(0x8000, 0xbfff, membank("bank3")); membank("bank3")->set_entry(3); // TODO or 4 } else @@ -155,7 +155,7 @@ void pc8401a_state::bankswitch(uint8_t data) if (BIT(data, 6)) { /* CRT video RAM */ - program.install_readwrite_bank(0xc000, 0xdfff, "bank4"); + program.install_readwrite_bank(0xc000, 0xdfff, membank("bank4")); program.unmap_readwrite(0xe000, 0xe7ff); membank("bank4")->set_entry(1); //logerror("0xc000-0xdfff = video RAM\n"); @@ -163,7 +163,7 @@ void pc8401a_state::bankswitch(uint8_t data) else { /* RAM */ - program.install_readwrite_bank(0xc000, 0xe7ff, "bank4"); + program.install_readwrite_bank(0xc000, 0xe7ff, membank("bank4")); membank("bank4")->set_entry(0); //logerror("0xc000-0e7fff = RAM c000-e7fff\n"); } @@ -497,9 +497,6 @@ void pc8401a_state::machine_start() /* initialize RTC */ m_rtc->cs_w(1); - /* allocate CRT video RAM */ - m_crt_ram.allocate(PC8401A_CRT_VIDEORAM_SIZE); - uint8_t *ram = m_ram->pointer(); /* set up A0/A1 memory banking */ diff --git a/src/mame/drivers/pcat_nit.cpp b/src/mame/drivers/pcat_nit.cpp index 22f0a6a6ddf..beece42b34e 100644 --- a/src/mame/drivers/pcat_nit.cpp +++ b/src/mame/drivers/pcat_nit.cpp @@ -97,7 +97,12 @@ public: pcat_nit_state(const machine_config &mconfig, device_type type, const char *tag) : pcat_base_state(mconfig, type, tag), m_uart(*this, "ns16450_0"), - m_microtouch(*this, "microtouch") { } + m_microtouch(*this, "microtouch"), + m_bios_region(*this, "bios"), + m_disk_bios_region(*this, "disk_bios"), + m_bios_share(*this, "bios"), + m_disk_bios_share(*this, "disk_bios") + { } void bonanza(machine_config &config); void pcat_nit(machine_config &config); @@ -108,6 +113,10 @@ private: std::unique_ptr<uint8_t[]> m_banked_nvram; required_device<ns16450_device> m_uart; required_device<microtouch_device> m_microtouch; + required_region_ptr<uint32_t> m_bios_region; + required_region_ptr<uint32_t> m_disk_bios_region; + required_shared_ptr<uint32_t> m_bios_share; + required_shared_ptr<uint32_t> m_disk_bios_share; void pcat_nit_rombank_w(uint8_t data); uint8_t pcat_nit_io_r(offs_t offset); @@ -131,7 +140,7 @@ void pcat_nit_state::pcat_nit_rombank_w(uint8_t data) if ( data & 0x40 ) { // rom bank - mspace.install_read_bank(0x000d8000, 0x000dffff, "rombank" ); + mspace.install_read_bank(0x000d8000, 0x000dffff, membank("rombank") ); mspace.unmap_write(0x000d8000, 0x000dffff); if ( data & 0x80 ) @@ -148,9 +157,7 @@ void pcat_nit_state::pcat_nit_rombank_w(uint8_t data) // nvram bank mspace.unmap_readwrite(0x000d8000, 0x000dffff); - mspace.install_readwrite_bank(0x000d8000, 0x000d9fff, "nvrambank" ); - - membank("nvrambank")->set_base(m_banked_nvram.get()); + mspace.install_ram(0x000d8000, 0x000d9fff, m_banked_nvram.get()); } } @@ -160,10 +167,10 @@ void pcat_nit_state::pcat_map(address_map &map) map(0x00000000, 0x0009ffff).ram(); map(0x000a0000, 0x000bffff).rw("vga", FUNC(vga_device::mem_r), FUNC(vga_device::mem_w)); map(0x000c0000, 0x000c7fff).rom().region("video_bios", 0).nopw(); - map(0x000d0000, 0x000d3fff).ram().region("disk_bios", 0); + map(0x000d0000, 0x000d3fff).ram().share("disk_bios"); map(0x000d7000, 0x000d7000).w(FUNC(pcat_nit_state::pcat_nit_rombank_w)); map(0x000d8000, 0x000dffff).bankr("rombank"); - map(0x000f0000, 0x000fffff).ram().region("bios", 0); + map(0x000f0000, 0x000fffff).ram().share("bios"); map(0xffff0000, 0xffffffff).rom().region("bios", 0); } @@ -172,10 +179,10 @@ void pcat_nit_state::bonanza_map(address_map &map) map(0x00000000, 0x0009ffff).ram(); map(0x000a0000, 0x000bffff).rw("vga", FUNC(cirrus_gd5428_device::mem_r), FUNC(cirrus_gd5428_device::mem_w)); map(0x000c0000, 0x000c7fff).rom().region("video_bios", 0).nopw(); - map(0x000d0000, 0x000d3fff).ram().region("disk_bios", 0); + map(0x000d0000, 0x000d3fff).ram().share("disk_bios"); map(0x000d7000, 0x000d7000).w(FUNC(pcat_nit_state::pcat_nit_rombank_w)); map(0x000d8000, 0x000dffff).bankr("rombank"); - map(0x000f0000, 0x000fffff).ram().region("bios", 0); + map(0x000f0000, 0x000fffff).ram().share("bios"); map(0xffff0000, 0xffffffff).rom().region("bios", 0); } @@ -229,6 +236,10 @@ void pcat_nit_state::machine_start() { membank("rombank")->configure_entries(0, 0x80, memregion("game_prg")->base(), 0x8000 ); membank("rombank")->set_entry(0); + + // There's some shadow ram control registers missing somehwere + memcpy(m_bios_share, m_bios_region, 0x10000); + memcpy(m_disk_bios_share, m_disk_bios_region, 0x4000); } void pcat_nit_state::pcat_nit(machine_config &config) diff --git a/src/mame/drivers/pce220.cpp b/src/mame/drivers/pce220.cpp index a8fb9f74c87..24e4ca7f644 100644 --- a/src/mame/drivers/pce220.cpp +++ b/src/mame/drivers/pce220.cpp @@ -380,8 +380,7 @@ void pce220_state::boot_bank_w(uint8_t data) if (data & 0x01) { address_space &space_prg = m_maincpu->space(AS_PROGRAM); - space_prg.install_read_bank(0x0000, 0x3fff, m_banks[0]); - space_prg.install_write_bank(0x0000, 0x3fff, m_banks[0]); + space_prg.install_readwrite_bank(0x0000, 0x3fff, m_banks[0]); m_banks[0]->set_entry(0); } } diff --git a/src/mame/drivers/pcm.cpp b/src/mame/drivers/pcm.cpp index a68ab28fcba..5fd5eca10b5 100644 --- a/src/mame/drivers/pcm.cpp +++ b/src/mame/drivers/pcm.cpp @@ -81,7 +81,6 @@ public: , m_ctc_u(*this, "ctc_u") , m_speaker(*this, "speaker") , m_cass(*this, "cassette") - , m_vram(*this, "videoram") , m_p_chargen(*this, "chargen") , m_bank(*this, {"bankr", "bankw", "bank2", "bank3"}) { } @@ -110,7 +109,6 @@ private: required_device<z80ctc_device> m_ctc_u; required_device<speaker_sound_device> m_speaker; required_device<cassette_image_device> m_cass; - optional_shared_ptr<u8> m_vram; required_region_ptr<u8> m_p_chargen; required_memory_bank_array<4> m_bank; }; @@ -222,8 +220,6 @@ void pcm_state::machine_start() u8* r = m_ram->pointer(); u8 *m = memregion("maincpu")->base(); - m_vram.set_target(r+0xf800, 0x800); // Fix position of vram - save_item(NAME(m_cone)); save_item(NAME(m_port85)); @@ -251,7 +247,7 @@ u32 pcm_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const for (u16 x = ma; x < ma + 64; x++) { - u8 const chr = m_vram[x]; + u8 const chr = m_ram->pointer()[x + 0xf800]; u8 const gfx = m_p_chargen[(chr<<3) | ra]; diff --git a/src/mame/drivers/pda600.cpp b/src/mame/drivers/pda600.cpp index 3435da028de..bd3c17f938f 100644 --- a/src/mame/drivers/pda600.cpp +++ b/src/mame/drivers/pda600.cpp @@ -69,6 +69,7 @@ public: pda600_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") + , m_video_ram(*this, "videoram") { } @@ -76,12 +77,12 @@ public: private: required_device<cpu_device> m_maincpu; + required_shared_ptr<uint8_t> m_video_ram; virtual void video_start() override; virtual void machine_reset() override; uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint8_t * m_video_ram; void pda600_io(address_map &map); void pda600_mem(address_map &map); }; @@ -92,8 +93,8 @@ void pda600_state::pda600_mem(address_map &map) map.unmap_value_high(); map(0x00000, 0x1ffff).rom(); //map(0x20000, 0x9ffff).ram(); // PCMCIA Card - map(0xa0000, 0xa7fff).ram().region("videoram", 0); - map(0xe0000, 0xfffff).ram().region("mainram", 0).share("nvram"); + map(0xa0000, 0xa7fff).ram().share("videoram"); + map(0xe0000, 0xfffff).ram().share("nvram"); } void pda600_state::pda600_io(address_map &map) @@ -120,7 +121,6 @@ void pda600_state::machine_reset() void pda600_state::video_start() { - m_video_ram = memregion("videoram")->base(); } uint32_t pda600_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) @@ -233,12 +233,6 @@ void pda600_state::pda600(machine_config &config) ROM_START( pda600 ) ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF ) ROM_LOAD( "pdarom.bin", 0x00000, 0x20000, CRC(f793a6c5) SHA1(ab14b0fdcedb927c66357368a2bfff605ba758fb)) - - // 128KB RAM - ROM_REGION( 0x20000, "mainram", ROMREGION_ERASE ) - - // 32KB Video RAM - ROM_REGION( 0x8000, "videoram", ROMREGION_ERASE ) ROM_END /* Driver */ diff --git a/src/mame/drivers/pet.cpp b/src/mame/drivers/pet.cpp index 77a2b3bc43e..02b868c0cbf 100644 --- a/src/mame/drivers/pet.cpp +++ b/src/mame/drivers/pet.cpp @@ -211,7 +211,7 @@ public: m_ram(*this, RAM_TAG), m_rom(*this, M6502_TAG), m_char_rom(*this, "charom"), - m_video_ram(*this, "video_ram"), + m_video_ram(*this, "video_ram", 0x800, ENDIANNESS_LITTLE), m_row(*this, "ROW%u", 0), m_lock(*this, "LOCK"), m_sync_timer(nullptr), @@ -294,7 +294,7 @@ protected: required_device<ram_device> m_ram; required_memory_region m_rom; required_memory_region m_char_rom; - optional_shared_ptr<uint8_t> m_video_ram; + memory_share_creator<uint8_t> m_video_ram; required_ioport_array<10> m_row; required_ioport m_lock; @@ -1518,9 +1518,6 @@ void cbm8296d_ieee488_devices(device_slot_interface &device) MACHINE_START_MEMBER( pet_state, pet ) { - // allocate memory - m_video_ram.allocate(m_video_ram_size); - // initialize memory uint8_t data = 0xff; diff --git a/src/mame/drivers/pingpong.cpp b/src/mame/drivers/pingpong.cpp index 9aab2be8226..79595d9cc74 100644 --- a/src/mame/drivers/pingpong.cpp +++ b/src/mame/drivers/pingpong.cpp @@ -39,11 +39,9 @@ void pingpong_state::cashquiz_question_bank_low_w(uint8_t data) { if(data >= 0x60 && data <= 0xdf) { - static const char * const bankname[] = { "bank1", "bank2", "bank3", "bank4", "bank5", "bank6", "bank7", "bank8" }; - const char *bank = bankname[data & 7]; int bankaddr = m_question_addr_high | ((data - 0x60) * 0x100); uint8_t *questions = memregion("user1")->base() + bankaddr; - membank(bank)->set_base(questions); + m_banks[data & 7]->set_base(questions); } } @@ -129,6 +127,23 @@ void pingpong_state::merlinmm_map(address_map &map) map(0xa600, 0xa600).w("watchdog", FUNC(watchdog_timer_device::reset_w)); } +void pingpong_state::cashquiz_map(address_map &map) +{ + merlinmm_map(map); + map(0x5000, 0x57ff).unmaprw(); + + map(0x4000, 0x4000).w(FUNC(pingpong_state::cashquiz_question_bank_high_w)); + map(0x4001, 0x4001).w(FUNC(pingpong_state::cashquiz_question_bank_low_w)); + + map(0x5000, 0x50ff).bankr("bank1"); + map(0x5100, 0x51ff).bankr("bank2"); + map(0x5200, 0x52ff).bankr("bank3"); + map(0x5300, 0x53ff).bankr("bank4"); + map(0x5400, 0x54ff).bankr("bank5"); + map(0x5500, 0x55ff).bankr("bank6"); + map(0x5600, 0x56ff).bankr("bank7"); + map(0x5700, 0x57ff).bankr("bank8"); +} static INPUT_PORTS_START( pingpong ) @@ -484,6 +499,12 @@ void pingpong_state::merlinmm(machine_config &config) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); } +void pingpong_state::cashquiz(machine_config &config) +{ + merlinmm(config); + m_maincpu->set_addrmap(AS_PROGRAM, &pingpong_state::cashquiz_map); +} + /*************************************************************************** @@ -581,32 +602,12 @@ void pingpong_state::init_cashquiz() for (int i = 0; i < 0x40000; i++) ROM[i] = bitswap<8>(ROM[i],0,1,2,3,4,5,6,7); - /* questions banking handlers */ - m_maincpu->space(AS_PROGRAM).install_write_handler(0x4000, 0x4000, write8smo_delegate(*this, FUNC(pingpong_state::cashquiz_question_bank_high_w))); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x4001, 0x4001, write8smo_delegate(*this, FUNC(pingpong_state::cashquiz_question_bank_low_w))); - - // 8 independents banks for questions - m_maincpu->space(AS_PROGRAM).install_read_bank(0x5000, 0x50ff, "bank1"); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x5100, 0x51ff, "bank2"); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x5200, 0x52ff, "bank3"); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x5300, 0x53ff, "bank4"); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x5400, 0x54ff, "bank5"); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x5500, 0x55ff, "bank6"); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x5600, 0x56ff, "bank7"); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x5700, 0x57ff, "bank8"); - // setup default banks - membank("bank1")->set_base(memregion("user1")->base() + 0x100*0 ); - membank("bank2")->set_base(memregion("user1")->base() + 0x100*1 ); - membank("bank3")->set_base(memregion("user1")->base() + 0x100*2 ); - membank("bank4")->set_base(memregion("user1")->base() + 0x100*3 ); - membank("bank5")->set_base(memregion("user1")->base() + 0x100*4 ); - membank("bank6")->set_base(memregion("user1")->base() + 0x100*5 ); - membank("bank7")->set_base(memregion("user1")->base() + 0x100*6 ); - membank("bank8")->set_base(memregion("user1")->base() + 0x100*7 ); + for(int i=0; i<8; i++) + m_banks[i]->set_base(memregion("user1")->base() + 0x100*i); } GAME( 1985, pingpong, 0, pingpong, pingpong, pingpong_state, empty_init, ROT0, "Konami", "Konami's Ping-Pong", 0 ) GAME( 1986, merlinmm, 0, merlinmm, merlinmm, pingpong_state, init_merlinmm, ROT90, "Zilec-Zenitone", "Merlins Money Maze", 0 ) -GAME( 1986, cashquiz, 0, merlinmm, cashquiz, pingpong_state, init_cashquiz, ROT0, "Zilec-Zenitone", "Cash Quiz (Type B, Version 5)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1986, cashquiz, 0, cashquiz, cashquiz, pingpong_state, init_cashquiz, ROT0, "Zilec-Zenitone", "Cash Quiz (Type B, Version 5)", MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/drivers/pipedrm.cpp b/src/mame/drivers/pipedrm.cpp index 03d4b8658ce..da4d940bda0 100644 --- a/src/mame/drivers/pipedrm.cpp +++ b/src/mame/drivers/pipedrm.cpp @@ -881,7 +881,8 @@ void pipedrm_state::init_pipedrm() { const memory_share *share = memshare("palette"); /* sprite RAM lives at the end of palette RAM */ - m_spriteram.set_target((uint8_t*)share->ptr() + 0xc00, 0x400); + m_spriteram = (uint8_t*)share->ptr() + 0xc00; + m_spriteram_size = 0x400; m_maincpu->space(AS_PROGRAM).install_ram(0xcc00, 0xcfff, m_spriteram); } diff --git a/src/mame/drivers/playch10.cpp b/src/mame/drivers/playch10.cpp index f11ea81963c..97dde797de2 100644 --- a/src/mame/drivers/playch10.cpp +++ b/src/mame/drivers/playch10.cpp @@ -381,6 +381,114 @@ void playch10_state::cart_map(address_map &map) map(0x8000, 0xffff).rom(); } +void playch10_state::cart_a_map(address_map &map) +{ + cart_map(map); + + /* switches vrom with writes to the $803e-$8041 area */ + map(0x8000, 0x8fff).w(FUNC(playch10_state::aboard_vrom_switch_w)); +} + +void playch10_state::cart_b_map(address_map &map) +{ + cart_map(map); + + /* Roms are banked at $8000 to $bfff */ + map(0x8000, 0xffff).w(FUNC(playch10_state::bboard_rom_switch_w)); +} + +void playch10_state::cart_c_map(address_map &map) +{ + cart_map(map); + + /* switches vrom with writes to $6000 */ + map(0x6000, 0x6000).w(FUNC(playch10_state::cboard_vrom_switch_w)); +} + +void playch10_state::cart_d_map(address_map &map) +{ + cart_map(map); + + /* MMC mapper at writes to $8000-$ffff */ + map(0x8000, 0xffff).w(FUNC(playch10_state::mmc1_rom_switch_w)); +} + +void playch10_state::cart_d2_map(address_map &map) +{ + cart_d_map(map); + + /* extra ram at $6000-$7fff */ + map(0x6000, 0x7fff).ram(); +} + +void playch10_state::cart_e_map(address_map &map) +{ + cart_map(map); + + /* nvram at $6000-$6fff */ + map(0x6000, 0x6fff).ram(); + + /* basically a mapper 9 on a nes */ + map(0x8000, 0xffff).w(FUNC(playch10_state::eboard_rom_switch_w)); +} + +void playch10_state::cart_f_map(address_map &map) +{ + cart_map(map); + + /* MMC mapper at writes to $8000-$ffff */ + map(0x8000, 0xffff).w(FUNC(playch10_state::mmc1_rom_switch_w)); +} + +void playch10_state::cart_f2_map(address_map &map) +{ + cart_f_map(map); + + /* extra ram at $6000-$6fff */ + map(0x6000, 0x6fff).ram(); +} + +void playch10_state::cart_g_map(address_map &map) +{ + cart_map(map); + + /* extra ram at $6000-$7fff */ + map(0x6000, 0x7fff).ram(); + + /* MMC mapper at writes to $8000-$ffff */ + map(0x8000, 0xffff).w(FUNC(playch10_state::gboard_rom_switch_w)); +} + +void playch10_state::cart_h_map(address_map &map) +{ + cart_map(map); + + /* extra ram at $6000-$7fff */ + map(0x6000, 0x7fff).ram(); + + /* Roms are banked at $8000 to $ffff */ + map(0x8000, 0xffff).w(FUNC(playch10_state::hboard_rom_switch_w)); +} + +void playch10_state::cart_i_map(address_map &map) +{ + cart_map(map); + + /* Roms are banked at $8000 to $ffff */ + map(0x8000, 0xffff).w(FUNC(playch10_state::iboard_rom_switch_w)); +} + +void playch10_state::cart_k_map(address_map &map) +{ + cart_map(map); + + /* extra ram at $6000-$7fff */ + map(0x6000, 0x7fff).ram(); + + /* Roms are banked at $8000 to $bfff */ + map(0x8000, 0xffff).w(FUNC(playch10_state::mmc1_rom_switch_w)); +} + /******************************************************************************/ static INPUT_PORTS_START( playch10 ) @@ -698,19 +806,81 @@ void playch10_state::playch10(machine_config &config) RP5H01(config, m_rp5h01, 0); } -void playch10_state::playchnv(machine_config &config) +void playch10_state::playch10_a(machine_config &config) +{ + playch10(config); + m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_a_map); +} + +void playch10_state::playch10_b(machine_config &config) +{ + playch10(config); + m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_b_map); +} + +void playch10_state::playch10_c(machine_config &config) +{ + playch10(config); + m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_c_map); +} + +void playch10_state::playch10_d(machine_config &config) +{ + playch10(config); + m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_d_map); +} + +void playch10_state::playch10_d2(machine_config &config) +{ + playch10(config); + m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_d2_map); +} + +void playch10_state::playch10_e(machine_config &config) { playch10(config); + m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_e_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); } -void playch10_state::playch10_hboard(machine_config &config) +void playch10_state::playch10_f(machine_config &config) +{ + playch10(config); + m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_f_map); +} + +void playch10_state::playch10_f2(machine_config &config) +{ + playch10(config); + m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_f2_map); +} + +void playch10_state::playch10_g(machine_config &config) { playch10(config); + m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_g_map); +} + +void playch10_state::playch10_h(machine_config &config) +{ + playch10(config); + m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_h_map); MCFG_VIDEO_START_OVERRIDE(playch10_state,playch10_hboard) MCFG_MACHINE_START_OVERRIDE(playch10_state,playch10_hboard) } +void playch10_state::playch10_i(machine_config &config) +{ + playch10(config); + m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_i_map); +} + +void playch10_state::playch10_k(machine_config &config) +{ + playch10(config); + m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_k_map); +} + /*************************************************************************** Game driver(s) @@ -1709,83 +1879,83 @@ void playch10_state::init_ttoon() /* YEAR NAME PARENT MACHINE INPUT STATE INIT MONITOR */ /* Standard Games */ -GAME( 1983, pc_tenis, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Tennis (PlayChoice-10)", 0 ) -GAME( 1983, pc_mario, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Mario Bros. (PlayChoice-10)", 0 ) -GAME( 1984, pc_bball, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo of America", "Baseball (PlayChoice-10)", 0 ) -GAME( 1984, pc_bfght, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Balloon Fight (PlayChoice-10)", 0 ) -GAME( 1984, pc_ebike, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Excite Bike (PlayChoice-10)", 0 ) -GAME( 1984, pc_golf, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Golf (PlayChoice-10)", 0 ) -GAME( 1985, pc_kngfu, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Irem (Nintendo license)", "Kung Fu (PlayChoice-10)", 0 ) -GAME( 1985, pc_smb, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Super Mario Bros. (PlayChoice-10)", 0 ) -GAME( 1986, pc_vball, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Volley Ball (PlayChoice-10)", 0 ) -GAME( 1987, pc_1942, playch10, playch10, playch10, playch10_state, init_pc_hrz, ROT0, "Capcom", "1942 (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1983, pc_tenis, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Tennis (PlayChoice-10)", 0 ) +GAME( 1983, pc_mario, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Mario Bros. (PlayChoice-10)", 0 ) +GAME( 1984, pc_bball, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo of America", "Baseball (PlayChoice-10)", 0 ) +GAME( 1984, pc_bfght, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Balloon Fight (PlayChoice-10)", 0 ) +GAME( 1984, pc_ebike, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Excite Bike (PlayChoice-10)", 0 ) +GAME( 1984, pc_golf, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Golf (PlayChoice-10)", 0 ) +GAME( 1985, pc_kngfu, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Irem (Nintendo license)", "Kung Fu (PlayChoice-10)", 0 ) +GAME( 1985, pc_smb, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Super Mario Bros. (PlayChoice-10)", 0 ) +GAME( 1986, pc_vball, playch10, playch10, playch10, playch10_state, init_playch10, ROT0, "Nintendo", "Volley Ball (PlayChoice-10)", 0 ) +GAME( 1987, pc_1942, playch10, playch10, playch10, playch10_state, init_pc_hrz, ROT0, "Capcom", "1942 (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS ) /* Gun Games */ -GAME( 1984, pc_duckh, playch10, playch10, playc10g, playch10_state, init_pc_gun, ROT0, "Nintendo", "Duck Hunt (PlayChoice-10)", 0 ) -GAME( 1984, pc_hgaly, playch10, playch10, playc10g, playch10_state, init_pc_gun, ROT0, "Nintendo", "Hogan's Alley (PlayChoice-10)", 0 ) -GAME( 1984, pc_wgnmn, playch10, playch10, playc10g, playch10_state, init_pc_gun, ROT0, "Nintendo", "Wild Gunman (PlayChoice-10)", 0 ) +GAME( 1984, pc_duckh, playch10, playch10, playc10g, playch10_state, init_pc_gun, ROT0, "Nintendo", "Duck Hunt (PlayChoice-10)", 0 ) +GAME( 1984, pc_hgaly, playch10, playch10, playc10g, playch10_state, init_pc_gun, ROT0, "Nintendo", "Hogan's Alley (PlayChoice-10)", 0 ) +GAME( 1984, pc_wgnmn, playch10, playch10, playc10g, playch10_state, init_pc_gun, ROT0, "Nintendo", "Wild Gunman (PlayChoice-10)", 0 ) /* A-Board Games */ -GAME( 1986, pc_grdus, playch10, playch10, playch10, playch10_state, init_pcaboard, ROT0, "Konami", "Gradius (PlayChoice-10)" , 0) // date: 860917 -GAME( 1986, pc_grdue, pc_grdus, playch10, playch10, playch10_state, init_pcaboard, ROT0, "Konami", "Gradius (PlayChoice-10, older)" , 0) // date: 860219 -GAME( 1987, pc_tkfld, playch10, playch10, playch10, playch10_state, init_pcaboard, ROT0, "Konami (Nintendo of America license)", "Track & Field (PlayChoice-10)", 0 ) +GAME( 1986, pc_grdus, playch10, playch10_a, playch10, playch10_state, init_pcaboard, ROT0, "Konami", "Gradius (PlayChoice-10)" , 0) // date: 860917 +GAME( 1986, pc_grdue, pc_grdus, playch10_a, playch10, playch10_state, init_pcaboard, ROT0, "Konami", "Gradius (PlayChoice-10, older)" , 0) // date: 860219 +GAME( 1987, pc_tkfld, playch10, playch10_a, playch10, playch10_state, init_pcaboard, ROT0, "Konami (Nintendo of America license)", "Track & Field (PlayChoice-10)", 0 ) /* B-Board Games */ -GAME( 1986, pc_pwrst, playch10, playch10, playch10, playch10_state, init_pcbboard, ROT0, "Nintendo", "Pro Wrestling (PlayChoice-10)", 0 ) -GAME( 1986, pc_trjan, playch10, playch10, playch10, playch10_state, init_pcbboard, ROT0, "Capcom USA (Nintendo of America license)", "Trojan (PlayChoice-10)", 0 ) -GAME( 1987, pc_cvnia, playch10, playch10, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Castlevania (PlayChoice-10)", 0 ) -GAME( 1987, pc_dbldr, playch10, playch10, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Double Dribble (PlayChoice-10)", 0 ) -GAME( 1987, pc_rnatk, playch10, playch10, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Rush'n Attack (PlayChoice-10)", 0 ) -GAME( 1987, pc_rygar, playch10, playch10, playch10, playch10_state, init_pcbboard, ROT0, "Tecmo (Nintendo of America license)", "Rygar (PlayChoice-10)", 0 ) -GAME( 1988, pc_cntra, playch10, playch10, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Contra (PlayChoice-10)", 0 ) +GAME( 1986, pc_pwrst, playch10, playch10_b, playch10, playch10_state, init_pcbboard, ROT0, "Nintendo", "Pro Wrestling (PlayChoice-10)", 0 ) +GAME( 1986, pc_trjan, playch10, playch10_b, playch10, playch10_state, init_pcbboard, ROT0, "Capcom USA (Nintendo of America license)", "Trojan (PlayChoice-10)", 0 ) +GAME( 1987, pc_cvnia, playch10, playch10_b, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Castlevania (PlayChoice-10)", 0 ) +GAME( 1987, pc_dbldr, playch10, playch10_b, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Double Dribble (PlayChoice-10)", 0 ) +GAME( 1987, pc_rnatk, playch10, playch10_b, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Rush'n Attack (PlayChoice-10)", 0 ) +GAME( 1987, pc_rygar, playch10, playch10_b, playch10, playch10_state, init_pcbboard, ROT0, "Tecmo (Nintendo of America license)", "Rygar (PlayChoice-10)", 0 ) +GAME( 1988, pc_cntra, playch10, playch10_b, playch10, playch10_state, init_pcbboard, ROT0, "Konami (Nintendo of America license)", "Contra (PlayChoice-10)", 0 ) /* C-Board Games */ -GAME( 1986, pc_goons, playch10, playch10, playch10, playch10_state, init_pccboard, ROT0, "Konami", "The Goonies (PlayChoice-10)", 0 ) +GAME( 1986, pc_goons, playch10, playch10_c, playch10, playch10_state, init_pccboard, ROT0, "Konami", "The Goonies (PlayChoice-10)", 0 ) /* D-Board Games */ -GAME( 1986, pc_mtoid, playch10, playch10, playch10, playch10_state, init_pcdboard_2, ROT0, "Nintendo", "Metroid (PlayChoice-10)", 0 ) -GAME( 1987, pc_radrc, playch10, playch10, playch10, playch10_state, init_pcdboard, ROT0, "Square", "Rad Racer (PlayChoice-10)", 0 ) +GAME( 1986, pc_mtoid, playch10, playch10_d2,playch10, playch10_state, init_pcdboard_2, ROT0, "Nintendo", "Metroid (PlayChoice-10)", 0 ) +GAME( 1987, pc_radrc, playch10, playch10_d, playch10, playch10_state, init_pcdboard, ROT0, "Square", "Rad Racer (PlayChoice-10)", 0 ) /* E-Board Games */ -GAME( 1987, pc_miket, playch10, playchnv, playch10, playch10_state, init_pceboard, ROT0, "Nintendo", "Mike Tyson's Punch-Out!! (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1987, pc_miket, playch10, playch10_e, playch10, playch10_state, init_pceboard, ROT0, "Nintendo", "Mike Tyson's Punch-Out!! (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS ) /* F-Board Games */ -GAME( 1987, pc_rcpam, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Rare", "R.C. Pro-Am (PlayChoice-10)", 0 ) -GAME( 1988, pc_ddrgn, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Technos Japan", "Double Dragon (PlayChoice-10)", 0 ) -GAME( 1989, pc_ngaid, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Tecmo (Nintendo of America license)", "Ninja Gaiden (PlayChoice-10)", 0 ) -GAME( 1989, pc_tmnt, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Konami (Nintendo of America license)", "Teenage Mutant Ninja Turtles (PlayChoice-10)", 0 ) -GAME( 1989, pc_ftqst, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Sunsoft (Nintendo of America license)", "Uncle Fester's Quest: The Addams Family (PlayChoice-10)", 0 ) -GAME( 1989, pc_bstar, playch10, playch10, playch10, playch10_state, init_pcfboard_2, ROT0, "SNK (Nintendo of America license)", "Baseball Stars: Be a Champ! (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1989, pc_tbowl, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Tecmo (Nintendo of America license)", "Tecmo Bowl (PlayChoice-10)", 0 ) -GAME( 1990, pc_virus, pc_drmro, playch10, playch10, playch10_state, init_virus, ROT0, "Nintendo", "Virus (Dr. Mario prototype, PlayChoice-10)", 0 ) -GAME( 1990, pc_rrngr, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Capcom USA (Nintendo of America license)", "Chip'n Dale: Rescue Rangers (PlayChoice-10)", 0 ) -GAME( 1990, pc_drmro, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Nintendo", "Dr. Mario (PlayChoice-10)", 0 ) -GAME( 1990, pc_bload, playch10, playch10, playch10, playch10_state, init_virus, ROT0, "Jaleco (Nintendo of America license)", "Bases Loaded (Prototype, PlayChoice-10)", 0 ) -GAME( 1990, pc_ynoid, playch10, playch10, playch10, playch10_state, init_pcfboard, ROT0, "Capcom USA (Nintendo of America license)", "Yo! Noid (PlayChoice-10)", 0 ) +GAME( 1987, pc_rcpam, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Rare", "R.C. Pro-Am (PlayChoice-10)", 0 ) +GAME( 1988, pc_ddrgn, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Technos Japan", "Double Dragon (PlayChoice-10)", 0 ) +GAME( 1989, pc_ngaid, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Tecmo (Nintendo of America license)", "Ninja Gaiden (PlayChoice-10)", 0 ) +GAME( 1989, pc_tmnt, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Konami (Nintendo of America license)", "Teenage Mutant Ninja Turtles (PlayChoice-10)", 0 ) +GAME( 1989, pc_ftqst, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Sunsoft (Nintendo of America license)", "Uncle Fester's Quest: The Addams Family (PlayChoice-10)", 0 ) +GAME( 1989, pc_bstar, playch10, playch10_f2,playch10, playch10_state, init_pcfboard_2, ROT0, "SNK (Nintendo of America license)", "Baseball Stars: Be a Champ! (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1989, pc_tbowl, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Tecmo (Nintendo of America license)", "Tecmo Bowl (PlayChoice-10)", 0 ) +GAME( 1990, pc_virus, pc_drmro, playch10_f, playch10, playch10_state, init_virus, ROT0, "Nintendo", "Virus (Dr. Mario prototype, PlayChoice-10)", 0 ) +GAME( 1990, pc_rrngr, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Capcom USA (Nintendo of America license)", "Chip'n Dale: Rescue Rangers (PlayChoice-10)", 0 ) +GAME( 1990, pc_drmro, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Nintendo", "Dr. Mario (PlayChoice-10)", 0 ) +GAME( 1990, pc_bload, playch10, playch10_f, playch10, playch10_state, init_virus, ROT0, "Jaleco (Nintendo of America license)", "Bases Loaded (Prototype, PlayChoice-10)", 0 ) +GAME( 1990, pc_ynoid, playch10, playch10_f, playch10, playch10_state, init_pcfboard, ROT0, "Capcom USA (Nintendo of America license)", "Yo! Noid (PlayChoice-10)", 0 ) /* G-Board Games */ -GAME( 1988, pc_smb2, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Nintendo", "Super Mario Bros. 2 (PlayChoice-10)", 0 ) -GAME( 1988, pc_smb3, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Nintendo", "Super Mario Bros. 3 (PlayChoice-10)", 0 ) -GAME( 1990, pc_mman3, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Capcom USA (Nintendo of America license)", "Mega Man III (PlayChoice-10)", 0 ) -GAME( 1990, pc_suprc, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Konami (Nintendo of America license)", "Super C (PlayChoice-10)", 0 ) -GAME( 1990, pc_tmnt2, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Konami (Nintendo of America license)", "Teenage Mutant Ninja Turtles II: The Arcade Game (PlayChoice-10)", 0 ) -GAME( 1990, pc_wcup, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Technos Japan (Nintendo license)", "Nintendo World Cup (PlayChoice-10)", 0 ) -GAME( 1990, pc_ngai2, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Tecmo (Nintendo of America license)", "Ninja Gaiden Episode II: The Dark Sword of Chaos (PlayChoice-10)", 0 ) -GAME( 1991, pc_ngai3, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Tecmo (Nintendo of America license)", "Ninja Gaiden Episode III: The Ancient Ship of Doom (PlayChoice-10)", 0 ) -GAME( 1991, pc_pwbld, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Taito (Nintendo of America license)", "Power Blade (PlayChoice-10)", 0 ) -GAME( 1991, pc_rkats, playch10, playch10, playch10, playch10_state, init_pcgboard, ROT0, "Atlus (Nintendo of America license)", "Rockin' Kats (PlayChoice-10)", 0 ) -GAME( 1991, pc_ttoon, playch10, playch10, playch10, playch10_state, init_ttoon, ROT0, "Konami (Nintendo of America license)", "Tiny Toon Adventures (prototype) (PlayChoice-10)", 0 ) // Code is final USA NES version of the game, (which is MMC3C according to nes.xml, but this cart has MMC3B) +GAME( 1988, pc_smb2, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Nintendo", "Super Mario Bros. 2 (PlayChoice-10)", 0 ) +GAME( 1988, pc_smb3, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Nintendo", "Super Mario Bros. 3 (PlayChoice-10)", 0 ) +GAME( 1990, pc_mman3, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Capcom USA (Nintendo of America license)", "Mega Man III (PlayChoice-10)", 0 ) +GAME( 1990, pc_suprc, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Konami (Nintendo of America license)", "Super C (PlayChoice-10)", 0 ) +GAME( 1990, pc_tmnt2, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Konami (Nintendo of America license)", "Teenage Mutant Ninja Turtles II: The Arcade Game (PlayChoice-10)", 0 ) +GAME( 1990, pc_wcup, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Technos Japan (Nintendo license)", "Nintendo World Cup (PlayChoice-10)", 0 ) +GAME( 1990, pc_ngai2, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Tecmo (Nintendo of America license)", "Ninja Gaiden Episode II: The Dark Sword of Chaos (PlayChoice-10)", 0 ) +GAME( 1991, pc_ngai3, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Tecmo (Nintendo of America license)", "Ninja Gaiden Episode III: The Ancient Ship of Doom (PlayChoice-10)", 0 ) +GAME( 1991, pc_pwbld, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Taito (Nintendo of America license)", "Power Blade (PlayChoice-10)", 0 ) +GAME( 1991, pc_rkats, playch10, playch10_g, playch10, playch10_state, init_pcgboard, ROT0, "Atlus (Nintendo of America license)", "Rockin' Kats (PlayChoice-10)", 0 ) +GAME( 1991, pc_ttoon, playch10, playch10_g, playch10, playch10_state, init_ttoon, ROT0, "Konami (Nintendo of America license)", "Tiny Toon Adventures (prototype) (PlayChoice-10)", 0 ) // Code is final USA NES version of the game, (which is MMC3C according to nes.xml, but this cart has MMC3B) /* variant with 4 screen mirror */ -GAME( 1990, pc_radr2, playch10, playch10, playch10, playch10_state, init_pcgboard_type2, ROT0, "Square (Nintendo of America license)", "Rad Racer II (PlayChoice-10)", 0 ) -GAME( 1985, pc_gntlt, playch10, playch10, playch10, playch10_state, init_pcgboard_type2, ROT0, "Atari / Tengen (Nintendo of America license)", "Gauntlet (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1990, pc_radr2, playch10, playch10_g, playch10, playch10_state, init_pcgboard_type2, ROT0, "Square (Nintendo of America license)", "Rad Racer II (PlayChoice-10)", 0 ) +GAME( 1985, pc_gntlt, playch10, playch10_g, playch10, playch10_state, init_pcgboard_type2, ROT0, "Atari / Tengen (Nintendo of America license)", "Gauntlet (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS ) /* H-Board Games */ -GAME( 1988, pc_pinbt, playch10, playch10_hboard, playch10, playch10_state, init_pchboard, ROT0, "Rare (Nintendo of America license)", "PinBot (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1988, pc_pinbt, playch10, playch10_h, playch10, playch10_state, init_pchboard, ROT0, "Rare (Nintendo of America license)", "PinBot (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS ) /* i-Board Games */ -GAME( 1989, pc_cshwk, playch10, playch10, playch10, playch10_state, init_pciboard, ROT0, "Rare (Nintendo of America license)", "Captain Sky Hawk (PlayChoice-10)", 0 ) -GAME( 1990, pc_sjetm, playch10, playch10, playch10, playch10_state, init_pciboard, ROT0, "Rare", "Solar Jetman (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1989, pc_cshwk, playch10, playch10_i, playch10, playch10_state, init_pciboard, ROT0, "Rare (Nintendo of America license)", "Captain Sky Hawk (PlayChoice-10)", 0 ) +GAME( 1990, pc_sjetm, playch10, playch10_i, playch10, playch10_state, init_pciboard, ROT0, "Rare", "Solar Jetman (PlayChoice-10)", MACHINE_IMPERFECT_GRAPHICS ) /* K-Board Games */ -GAME( 1991, pc_moglf, playch10, playch10, playch10, playch10_state, init_pckboard, ROT0, "Nintendo", "Mario's Open Golf (PlayChoice-10)", 0 ) +GAME( 1991, pc_moglf, playch10, playch10_k, playch10, playch10_state, init_pckboard, ROT0, "Nintendo", "Mario's Open Golf (PlayChoice-10)", 0 ) diff --git a/src/mame/drivers/poisk1.cpp b/src/mame/drivers/poisk1.cpp index 6e988f870e9..113486018d2 100644 --- a/src/mame/drivers/poisk1.cpp +++ b/src/mame/drivers/poisk1.cpp @@ -235,11 +235,11 @@ void p1_state::p1_ppi2_porta_w(uint8_t data) program.unmap_readwrite(0xb8000, 0xbbfff, 0); if (BIT(data, 3)) { - program.install_readwrite_bank(0xb8000, 0xbbfff, "bank11"); + program.install_ram(0xb8000, 0xbbfff, m_video.videoram); } else { - program.install_read_bank(0xb8000, 0xbbfff, "bank11"); + program.install_rom(0xb8000, 0xbbfff, m_video.videoram); program.install_write_handler(0xb8000, 0xbbfff, write8sm_delegate(*this, FUNC(p1_state::p1_vram_w))); } } @@ -417,10 +417,8 @@ void p1_state::video_start() m_video.videoram = m_video.videoram_base.get(); m_video.stride = 80; - space.install_readwrite_bank(0xb8000, 0xbbfff, "bank11"); - machine().root_device().membank("bank11")->set_base(m_video.videoram); - space.install_readwrite_bank(0xbc000, 0xbffff, "bank12"); - machine().root_device().membank("bank12")->set_base(m_video.videoram + 0x4000); + space.install_ram(0xb8000, 0xbbfff, m_video.videoram); + space.install_ram(0xbc000, 0xbffff, m_video.videoram + 0x4000); } uint32_t p1_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) @@ -593,8 +591,7 @@ void p1_state::init_poisk1() { address_space &program = m_maincpu->space(AS_PROGRAM); - program.install_readwrite_bank(0, m_ram->size() - 1, "bank10"); - membank("bank10")->set_base(m_ram->pointer()); + program.install_ram(0, m_ram->size() - 1, m_ram->pointer()); } void p1_state::machine_start() diff --git a/src/mame/drivers/popeye.cpp b/src/mame/drivers/popeye.cpp index 3d240a079c7..03e395de846 100644 --- a/src/mame/drivers/popeye.cpp +++ b/src/mame/drivers/popeye.cpp @@ -171,11 +171,9 @@ void tnx1_state::protection_w(offs_t offset, uint8_t data) } -void tnx1_state::maincpu_program_map(address_map &map) +void tnx1_state::maincpu_common_map(address_map &map) { map(0x0000, 0x7fff).rom().region("maincpu",0); - map(0x8000, 0x87ff).ram().share("ramlow"); - map(0x8800, 0x8bff).nopw(); // Attempts to initialize this area with 00 on boot map(0x8c00, 0x8e7f).ram().share("dmasource"); map(0x8e80, 0x8fff).ram().share("ramhigh"); map(0xa000, 0xa3ff).w(FUNC(tnx1_state::popeye_videoram_w)).share("videoram"); @@ -184,10 +182,17 @@ void tnx1_state::maincpu_program_map(address_map &map) map(0xe000, 0xe001).rw(FUNC(tnx1_state::protection_r), FUNC(tnx1_state::protection_w)); } +void tnx1_state::maincpu_program_map(address_map &map) +{ + maincpu_common_map(map); + map(0x8000, 0x87ff).ram().share("ramlow"); + map(0x8800, 0x8bff).nopw(); // Attempts to initialize this area with 00 on boot +} + void tpp2_state::maincpu_program_map(address_map &map) { - tpp1_state::maincpu_program_map(map); - map(0x8000, 0x87ff).unmaprw(); // 7f (unpopulated) + maincpu_common_map(map); + // 8000-87ff is unpopulated (7f) map(0x8800, 0x8bff).ram().share("ramlow"); // 7h map(0xc000, 0xdfff).w(FUNC(tpp2_state::background_w)); } diff --git a/src/mame/drivers/prestige.cpp b/src/mame/drivers/prestige.cpp index 4cd781a74fd..e18fcaec74a 100644 --- a/src/mame/drivers/prestige.cpp +++ b/src/mame/drivers/prestige.cpp @@ -238,12 +238,12 @@ void prestige_state::bankswitch_w(offs_t offset, uint8_t data) { //cartridge memory is writable if (data & 0x02) - program.install_readwrite_bank(0x4000, 0x7fff, "bank2"); + program.install_readwrite_bank(0x4000, 0x7fff, m_bank2); else program.unmap_write(0x4000, 0x7fff); if (data & 0x04) - program.install_readwrite_bank(0x8000, 0xbfff, "bank3"); + program.install_readwrite_bank(0x8000, 0xbfff, m_bank3); else program.unmap_write(0x8000, 0xbfff); } @@ -251,7 +251,7 @@ void prestige_state::bankswitch_w(offs_t offset, uint8_t data) { //cartridge memory is read-only program.unmap_write(0x4000, 0xbfff); - program.install_read_bank(0x8000, 0xbfff, "bank3"); + program.install_read_bank(0x8000, 0xbfff, m_bank3); } break; case 6: diff --git a/src/mame/drivers/ps2.cpp b/src/mame/drivers/ps2.cpp index 7f5139e4c2a..3d2768e0152 100644 --- a/src/mame/drivers/ps2.cpp +++ b/src/mame/drivers/ps2.cpp @@ -86,9 +86,7 @@ void ps2_state::machine_start() if (m_ram->size() > 0xa0000) { offs_t ram_limit = 0x100000 + m_ram->size() - 0xa0000; - space.install_read_bank(0x100000, ram_limit - 1, "bank1"); - space.install_write_bank(0x100000, ram_limit - 1, "bank1"); - membank("bank1")->set_base(m_ram->pointer() + 0xa0000); + space.install_ram(0x100000, ram_limit - 1, m_ram->pointer() + 0xa0000); } } diff --git a/src/mame/drivers/psychic5.cpp b/src/mame/drivers/psychic5.cpp index 60c0562ae52..64ef71a83f3 100644 --- a/src/mame/drivers/psychic5.cpp +++ b/src/mame/drivers/psychic5.cpp @@ -515,7 +515,7 @@ void psychic5_state::bombsa_sound_map(address_map &map) map(0x0000, 0xbfff).rom(); map(0xc000, 0xc7ff).ram(); map(0xe000, 0xe000).r("soundlatch", FUNC(generic_latch_8_device::read)); - map(0xf000, 0xf000).writeonly(); // Is this a confirm of some sort? + map(0xf000, 0xf000).nopw(); // Is this a confirm of some sort? } void psychic5_state::bombsa_soundport_map(address_map &map) diff --git a/src/mame/drivers/rohga.cpp b/src/mame/drivers/rohga.cpp index 90343e117a5..1af9b32eb22 100644 --- a/src/mame/drivers/rohga.cpp +++ b/src/mame/drivers/rohga.cpp @@ -202,7 +202,7 @@ void rohga_state::wizdfire_map(address_map &map) map(0x208000, 0x208fff).rw("tilegen2", FUNC(deco16ic_device::pf1_data_r), FUNC(deco16ic_device::pf1_data_w)); map(0x20a000, 0x20afff).rw("tilegen2", FUNC(deco16ic_device::pf2_data_r), FUNC(deco16ic_device::pf2_data_w)); - map(0x20b000, 0x20b3ff).writeonly(); /* ? Always 0 written */ + map(0x20b000, 0x20b3ff).nopw(); /* ? Always 0 written */ map(0x20c000, 0x20c7ff).ram().share("pf3_rowscroll"); map(0x20e000, 0x20e7ff).ram().share("pf4_rowscroll"); diff --git a/src/mame/drivers/rollext.cpp b/src/mame/drivers/rollext.cpp index d7ce3409478..5aff055ec05 100644 --- a/src/mame/drivers/rollext.cpp +++ b/src/mame/drivers/rollext.cpp @@ -521,7 +521,7 @@ void rollext_state::memmap(address_map &map) map(0xa0000000, 0xa00000ff).rw(FUNC(rollext_state::a0000000_r), FUNC(rollext_state::a0000000_w)); map(0xb0000000, 0xb0000007).r(FUNC(rollext_state::b0000000_r)); map(0xc0000000, 0xc03fffff).rom().region("rom1", 0); - map(0xff000000, 0xffffffff).ram().region("rom0", 0); + map(0xff000000, 0xffffffff).rom().region("rom0", 0); } diff --git a/src/mame/drivers/scorpion.cpp b/src/mame/drivers/scorpion.cpp index 0f2925a1d96..ea204948b1f 100644 --- a/src/mame/drivers/scorpion.cpp +++ b/src/mame/drivers/scorpion.cpp @@ -216,7 +216,7 @@ MACHINE_RESET_MEMBER(scorpion_state,scorpion) m_p_ram = memregion("maincpu")->base(); m_ram_0000 = nullptr; - m_program->install_read_bank(0x0000, 0x3fff, "bank1"); + m_program->install_read_bank(0x0000, 0x3fff, m_bank1); m_program->install_write_handler(0x0000, 0x3fff, write8sm_delegate(*this, FUNC(scorpion_state::scorpion_0000_w))); m_beta->disable(); diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp index 00a43d1abe3..7e47e8b3517 100644 --- a/src/mame/drivers/segas16b.cpp +++ b/src/mame/drivers/segas16b.cpp @@ -10293,7 +10293,7 @@ void isgsm_state::main_bank_change_w(uint16_t data) void isgsm_state::isgsm_map(address_map &map) { - map(0x000000, 0x0fffff).bankr(ISGSM_MAIN_BANK).region("bios", 0); // this area is ALWAYS read-only, even when the game is banked in + map(0x000000, 0x0fffff).bankr(ISGSM_MAIN_BANK); // this area is ALWAYS read-only, even when the game is banked in map(0x200000, 0x23ffff).ram(); // used during startup for decompression map(0x3f0000, 0x3fffff).w(FUNC(isgsm_state::rom_5704_bank_w)); map(0x400000, 0x40ffff).rw(m_segaic16vid, FUNC(segaic16_video_device::tileram_r), FUNC(segaic16_video_device::tileram_w)).share("tileram"); diff --git a/src/mame/drivers/segas32.cpp b/src/mame/drivers/segas32.cpp index d07f28549dc..76010b63c12 100644 --- a/src/mame/drivers/segas32.cpp +++ b/src/mame/drivers/segas32.cpp @@ -566,10 +566,10 @@ segas32_state::segas32_state(const machine_config &mconfig, device_type type, co : device_t(mconfig, type, tag, owner, clock) , m_z80_shared_ram(*this,"z80_shared_ram") , m_system32_workram(*this,"workram") - , m_videoram(*this,"videoram", 0) - , m_spriteram(*this,"spriteram", 0) + , m_videoram(*this,"videoram") + , m_spriteram(*this,"spriteram") , m_soundram(*this, "soundram") - , m_paletteram(*this,"paletteram.%u", 0, uint8_t(0)) + , m_paletteram(*this,"paletteram.%u", 0) , m_maincpu(*this, "maincpu") , m_soundcpu(*this, "soundcpu") , m_multipcm(*this, "sega") diff --git a/src/mame/drivers/seibuspi.cpp b/src/mame/drivers/seibuspi.cpp index c970d99cd1d..55955c765e3 100644 --- a/src/mame/drivers/seibuspi.cpp +++ b/src/mame/drivers/seibuspi.cpp @@ -1008,8 +1008,8 @@ void seibuspi_state::base_map(address_map &map) map(0x00000604, 0x00000607).portr("INPUTS"); map(0x00000608, 0x0000060b).portr("EXCH"); map(0x0000060c, 0x0000060f).portr("SYSTEM"); - map(0x00200000, 0x003fffff).rom().share("share1"); - map(0xffe00000, 0xffffffff).rom().region("maincpu", 0).share("share1"); // ROM location in real-mode + map(0x00200000, 0x003fffff).rom().region("maincpu", 0); + map(0xffe00000, 0xffffffff).rom().region("maincpu", 0); // ROM location in real-mode } void seibuspi_state::sei252_map(address_map &map) @@ -1119,8 +1119,8 @@ void seibuspi_state::sys386f_map(address_map &map) map(0x00000494, 0x00000497).w(FUNC(seibuspi_state::video_dma_address_w)); map(0x00000600, 0x00000607).r("ymz", FUNC(ymz280b_device::read)).umask32(0x000000ff); map(0x0000060c, 0x0000060f).r(FUNC(seibuspi_state::ejsakura_keyboard_r)); - map(0x00200000, 0x003fffff).rom().share("share1"); - map(0xffe00000, 0xffffffff).rom().region("maincpu", 0).share("share1"); // ROM location in real-mode + map(0x00200000, 0x003fffff).rom().region("maincpu", 0); + map(0xffe00000, 0xffffffff).rom().region("maincpu", 0); // ROM location in real-mode } diff --git a/src/mame/drivers/socrates.cpp b/src/mame/drivers/socrates.cpp index 4c2da8d187e..522f7439e8d 100644 --- a/src/mame/drivers/socrates.cpp +++ b/src/mame/drivers/socrates.cpp @@ -139,7 +139,7 @@ protected: optional_device<generic_slot_device> m_cart; memory_region *m_cart_reg; required_memory_region m_bios_reg; - required_memory_region m_vram_reg; + required_shared_ptr<u8> m_vram_reg; required_device<address_map_bank_device> m_rombank1; optional_device<address_map_bank_device> m_rombank2; // iqunlimz only required_device<address_map_bank_device> m_rambank1; @@ -406,33 +406,27 @@ void socrates_state::device_timer(emu_timer &timer, device_timer_id id, int para void socrates_state::init_socrates() { - uint8_t *gfx = memregion("vram")->base(); - /* fill vram with its init powerup bit pattern, so startup has the checkerboard screen */ for (int i = 0; i < 0x10000; i++) - gfx[i] = (((i&0x1)?0x00:0xFF)^((i&0x100)?0x00:0xff)); + m_vram_reg[i] = (((i&0x1)?0x00:0xFF)^((i&0x100)?0x00:0xff)); m_maincpu->set_clock_scale(0.45f); /// TODO: RAM access waitstates etc. aren't emulated - slow the CPU to compensate m_kbmcu_type = 0; } void socrates_state::init_iqunlimz() { - uint8_t *gfx = memregion("vram")->base(); - /* fill vram with its init powerup bit pattern, so startup has the checkerboard screen... is this even right for the iqunlimz? */ for (int i = 0; i < 0x20000; i++) - gfx[i] = (((i&0x1)?0x00:0xFF)^((i&0x100)?0x00:0xff)); + m_vram_reg[i] = (((i&0x1)?0x00:0xFF)^((i&0x100)?0x00:0xff)); //m_maincpu->set_clock_scale(0.45f); /// TODO: RAM access waitstates etc. aren't emulated - slow the CPU to compensate m_kbmcu_type = 1; } void socrates_state::init_vpainter() { - uint8_t *gfx = memregion("vram")->base(); - /* fill vram with its init powerup bit pattern, so startup has the checkerboard screen */ for (int i = 0; i < 0x10000; i++) - gfx[i] = (((i&0x1)?0x00:0xFF)^((i&0x100)?0x00:0xff)); + m_vram_reg[i] = (((i&0x1)?0x00:0xFF)^((i&0x100)?0x00:0xff)); m_maincpu->set_clock_scale(0.45f); /// TODO: RAM access waitstates etc. aren't emulated - slow the CPU to compensate m_kbmcu_type = 2; } @@ -811,7 +805,7 @@ uint32_t socrates_state::screen_update_socrates(screen_device &screen, bitmap_in { static const uint8_t fixedcolors[8] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0xF7 }; - uint8_t const *const videoram = m_vram_reg->base(); + uint8_t const *const videoram = m_vram_reg; int lineoffset = 0; // if display ever tries to display data at 0xfxxx, offset line displayed by 0x1000 for (int y = 0; y < 228; y++) { @@ -878,12 +872,12 @@ int iqunlimz_state::get_color(int index, int y) if (index < 8) return m_colors[index]; else - return m_vram_reg->as_u8(0xf000 + ((index & 0x0f) << 8) + ((m_scroll_offset + y + 1) & 0xff)); + return m_vram_reg[0xf000 + ((index & 0x0f) << 8) + ((m_scroll_offset + y + 1) & 0xff)]; } uint32_t iqunlimz_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - uint8_t *videoram = m_vram_reg->base(); + uint8_t *videoram = m_vram_reg; // bitmap layer for (int y=0; y<224; y++) @@ -1016,7 +1010,7 @@ void socrates_state::socrates_rombank_map(address_map &map) void socrates_state::socrates_rambank_map(address_map &map) { map.unmap_value_high(); - map(0x0000, 0xffff).ram().region("vram", 0).mirror(0x30000); + map(0x0000, 0xffff).ram().share("vram").mirror(0x30000); } void socrates_state::socrates_io(address_map &map) @@ -1065,7 +1059,7 @@ void iqunlimz_state::iqunlimz_rombank_map(address_map &map) void iqunlimz_state::iqunlimz_rambank_map(address_map &map) { map.unmap_value_high(); - map(0x0000, 0x3ffff).ram().region("vram", 0); + map(0x0000, 0x3ffff).ram().share("vram"); } void iqunlimz_state::iqunlimz_io(address_map &map) @@ -1613,8 +1607,6 @@ ROM_START(socrates) */ ROM_LOAD("27-00817-000-000.u1", 0x00000, 0x40000, CRC(80f5aa20) SHA1(4fd1ff7f78b5dd2582d5de6f30633e4e4f34ca8f)) // Label: "(Vtech) 27-00817-000-000 // (C)1987 VIDEO TECHNOLOGY // 8811 D" - ROM_REGION(0x10000, "vram", ROMREGION_ERASEFF) /* fill with ff, driver_init changes this to the 'correct' startup pattern */ - ROM_REGION(0x800, "kbmcu", ROMREGION_ERASEFF) ROM_LOAD("tmp42c40p1844.u6", 0x000, 0x200, NO_DUMP) /* keyboard IR decoder MCU */ @@ -1634,8 +1626,6 @@ ROM_START(socratfc) /* Socrates SAITOUT (French Canadian) NTSC */ ROM_LOAD("27-00884-001-000.u1", 0x00000, 0x40000, CRC(042d9d21) SHA1(9ffc67b2721683b2536727d0592798fbc4d061cb)) // Label: "(Vtech) 27-00884-001-000 // (C)1988 VIDEO TECHNOLOGY // 8911 D" - ROM_REGION(0x10000, "vram", ROMREGION_ERASEFF) /* fill with ff, driver_init changes this to the 'correct' startup pattern */ - ROM_REGION(0x800, "kbmcu", ROMREGION_ERASEFF) ROM_LOAD("tmp42c40p1844.u6", 0x000, 0x200, NO_DUMP) /* keyboard IR decoder MCU */ @@ -1657,8 +1647,6 @@ ROM_START(profweis) ROM_SYSTEM_BIOS(1, "88", "1988") ROMX_LOAD("27-00885-000-000.u1", 0x00000, 0x40000, CRC(fcaf8850) SHA1(a99011ee6a1ef63461c00d062278951252f117db), ROM_BIOS(1)) // Label: "(Vtech) 27-00885-000-000 // (C)1988 VIDEO TECHNOLOGY // 8844 D" - ROM_REGION(0x10000, "vram", ROMREGION_ERASEFF) /* fill with ff, driver_init changes this to the 'correct' startup pattern */ - ROM_REGION(0x800, "kbmcu", ROMREGION_ERASEFF) ROM_LOAD("tmp42c40p1844.u6", 0x000, 0x200, NO_DUMP) /* keyboard IR decoder MCU */ @@ -1676,8 +1664,6 @@ ROM_START( iqunlimz ) ROM_REGION(0x1000, "kbmcu", ROMREGION_ERASEFF) ROM_LOAD("kbmcu.bin", 0x0000, 0x1000, NO_DUMP) /* keyboard reader MCU */ - - ROM_REGION( 0x40000, "vram", ROMREGION_ERASE ) ROM_END ROM_START( vpainter ) @@ -1690,8 +1676,6 @@ ROM_START( vpainter ) ///TODO: get rid of these regions in the status_read function or make it socrates-specific ROM_REGION(0x2000, "speechint", ROMREGION_ERASE00) // doesn't exist? on vpainter, presumably reads as all zeroes ROM_REGION(0x10000, "speechext", ROMREGION_ERASE00) // doesn't exist? on vpainter, presumably reads as all zeroes - - ROM_REGION( 0x10000, "vram", ROMREGION_ERASE ) ROM_END /****************************************************************************** diff --git a/src/mame/drivers/srmp5.cpp b/src/mame/drivers/srmp5.cpp index 414d65e9829..f8ea8353e7b 100644 --- a/src/mame/drivers/srmp5.cpp +++ b/src/mame/drivers/srmp5.cpp @@ -369,7 +369,7 @@ void srmp5_state::srmp5_mem(address_map &map) { map(0x00000000, 0x000fffff).ram(); //maybe 0 - 2fffff ? map(0x002f0000, 0x002f7fff).ram(); - map(0x01000000, 0x01000003).writeonly(); // 0xaa .. watchdog ? + map(0x01000000, 0x01000003).nopw(); // 0xaa .. watchdog ? map(0x01800000, 0x01800003).ram(); //?1 map(0x01800004, 0x01800007).portr("DSW1"); map(0x01800008, 0x0180000b).portr("DSW2"); @@ -392,7 +392,7 @@ void srmp5_state::srmp5_mem(address_map &map) map(0x0a200000, 0x0a3fffff).rw(FUNC(srmp5_state::tileram_r), FUNC(srmp5_state::tileram_w)); map(0x0fc00000, 0x0fdfffff).mirror(0x10000000).rom().region("maincpu", 0); - map(0x1eff0000, 0x1eff001f).writeonly(); + map(0x1eff0000, 0x1eff001f).nopw(); map(0x1eff003c, 0x1eff003f).r(FUNC(srmp5_state::irq_ack_clear)); } diff --git a/src/mame/drivers/srmp6.cpp b/src/mame/drivers/srmp6.cpp index 351c3d67bb5..6fc96e6f31e 100644 --- a/src/mame/drivers/srmp6.cpp +++ b/src/mame/drivers/srmp6.cpp @@ -85,7 +85,7 @@ public: srmp6_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_chrram(*this, "chrram"), - m_dmaram(*this, "dmaram"), + m_dmaram(*this, "dmaram", 0x100, ENDIANNESS_BIG), m_video_regs(*this, "video_regs"), m_nile_region(*this, "nile"), m_nile_bank(*this, "nile_bank"), @@ -106,7 +106,7 @@ protected: private: std::unique_ptr<u16[]> m_tileram; required_shared_ptr<u16> m_chrram; - optional_shared_ptr<u16> m_dmaram; + memory_share_creator<u16> m_dmaram; required_shared_ptr<u16> m_video_regs; required_region_ptr<u8> m_nile_region; @@ -192,7 +192,6 @@ void srmp6_state::update_palette() void srmp6_state::video_start() { m_tileram = make_unique_clear<u16[]>(0x100000*16/2); - m_dmaram.allocate(0x100/2); // create the char set (gfx will then be updated dynamically from RAM) m_gfxdecode->set_gfx(0, std::make_unique<gfx_element>(m_palette, tiles8x8_layout, (u8*)m_tileram.get(), 0, m_palette->entries() / 256, 0)); diff --git a/src/mame/drivers/ssv.cpp b/src/mame/drivers/ssv.cpp index 9df235de85a..9c7180111f7 100644 --- a/src/mame/drivers/ssv.cpp +++ b/src/mame/drivers/ssv.cpp @@ -437,7 +437,7 @@ void ssv_state::drifto94_map(address_map &map) { ssv_map(map, 0xc00000); // map(0x210002, 0x210003).nopw(); // ? 1 at the start - map(0x400000, 0x47ffff).writeonly(); // ? + map(0x400000, 0x47ffff).nopw(); // ? map(0x480000, 0x480001).rw(FUNC(ssv_state::dsp_dr_r), FUNC(ssv_state::dsp_dr_w)); map(0x482000, 0x482fff).rw(FUNC(ssv_state::dsp_r), FUNC(ssv_state::dsp_w)); map(0x483000, 0x485fff).nopw(); // ? @@ -579,7 +579,7 @@ void ssv_state::keithlcy_map(address_map &map) // map(0x210002, 0x210003).nopw(); // ? 1 at the start map(0x210010, 0x210011).nopw(); // map(0x21000e, 0x21000f).nopr(); // - map(0x400000, 0x47ffff).writeonly(); // ? + map(0x400000, 0x47ffff).nopw(); // ? } @@ -618,7 +618,7 @@ void ssv_state::mslider_map(address_map &map) ssv_map(map, 0xf00000); map(0x010000, 0x01ffff).rw(FUNC(ssv_state::mainram_r), FUNC(ssv_state::mainram_w)); // RAM Mirror // map(0x210002, 0x210003).nopw(); // ? 1 at the start - map(0x400000, 0x47ffff).writeonly(); // ? + map(0x400000, 0x47ffff).nopw(); // ? // map(0x500000, 0x500001).nopw(); // ? ff at the start } diff --git a/src/mame/drivers/starwars.cpp b/src/mame/drivers/starwars.cpp index a74fed670c0..cefa10998ee 100644 --- a/src/mame/drivers/starwars.cpp +++ b/src/mame/drivers/starwars.cpp @@ -127,7 +127,7 @@ void starwars_state::esb_slapstic_w(address_space &space, offs_t offset, uint8_t void starwars_state::main_map(address_map &map) { - map(0x0000, 0x2fff).ram().share("avg:vectorram").region("maincpu", 0); + map(0x0000, 0x2fff).ram().share("avg:vectorram"); map(0x3000, 0x3fff).rom(); /* vector_rom */ map(0x4300, 0x431f).portr("IN0"); map(0x4320, 0x433f).portr("IN1"); diff --git a/src/mame/drivers/subsino.cpp b/src/mame/drivers/subsino.cpp index c8360b02604..ba1af3e54df 100644 --- a/src/mame/drivers/subsino.cpp +++ b/src/mame/drivers/subsino.cpp @@ -3813,8 +3813,6 @@ void subsino_state::init_stbsub() for (uint8_t reel = 0; reel < 3; reel++) { - m_reel_scroll[reel].allocate(0x40); - m_reel_attr[reel] = std::make_unique<uint8_t[]>(0x200); save_pointer(NAME(m_reel_attr[reel]), 0x200, reel); @@ -3829,8 +3827,6 @@ void subsino_state::init_stisub() for (uint8_t reel = 0; reel < 3; reel++) { - m_reel_scroll[reel].allocate(0x40); - m_reel_attr[reel] = std::make_unique<uint8_t[]>(0x200); save_pointer(NAME(m_reel_attr[reel]), 0x200, reel); @@ -3849,8 +3845,6 @@ void subsino_state::init_tesorone() for (uint8_t reel = 0; reel < 3; reel++) { - m_reel_scroll[reel].allocate(0x40); - m_reel_attr[reel] = std::make_unique<uint8_t[]>(0x200); save_pointer(NAME(m_reel_attr[reel]), 0x200, reel); @@ -3869,8 +3863,6 @@ void subsino_state::init_tesorone230() for (uint8_t reel = 0; reel < 3; reel++) { - m_reel_scroll[reel].allocate(0x40); - m_reel_attr[reel] = std::make_unique<uint8_t[]>(0x200); save_pointer(NAME(m_reel_attr[reel]), 0x200, reel); @@ -3882,8 +3874,6 @@ void subsino_state::init_mtrainnv() { for (uint8_t reel = 0; reel < 3; reel++) { - m_reel_scroll[reel].allocate(0x40); - m_reel_attr[reel] = std::make_unique<uint8_t[]>(0x200); save_pointer(NAME(m_reel_attr[reel]), 0x200, reel); diff --git a/src/mame/drivers/suna8.cpp b/src/mame/drivers/suna8.cpp index 8b07f07e697..c5399d734f2 100644 --- a/src/mame/drivers/suna8.cpp +++ b/src/mame/drivers/suna8.cpp @@ -748,7 +748,7 @@ void suna8_state::brickzn11_map(address_map &map) map(0xc140, 0xc140).r(FUNC(suna8_state::brickzn_cheats_r)); // Cheats / Debugging Inputs - map(0xc600, 0xc7ff).rw(FUNC(suna8_state::banked_paletteram_r), FUNC(suna8_state::brickzn_banked_paletteram_w)).share("paletteram"); // Palette (Banked) + map(0xc600, 0xc7ff).rw(FUNC(suna8_state::banked_paletteram_r), FUNC(suna8_state::brickzn_banked_paletteram_w)); // Palette (Banked) map(0xc800, 0xdfff).ram().share("wram"); // Work RAM map(0xe000, 0xffff).rw(FUNC(suna8_state::suna8_banked_spriteram_r), FUNC(suna8_state::suna8_banked_spriteram_w)); // Sprites (Banked) } @@ -881,7 +881,7 @@ void suna8_state::brickzn_map(address_map &map) // c144 reads? // c14a reads? - map(0xc600, 0xc7ff).rw(FUNC(suna8_state::banked_paletteram_r), FUNC(suna8_state::brickzn_banked_paletteram_w)).share("paletteram"); // Palette (Banked) + map(0xc600, 0xc7ff).rw(FUNC(suna8_state::banked_paletteram_r), FUNC(suna8_state::brickzn_banked_paletteram_w)); // Palette (Banked) map(0xc800, 0xdfff).ram().share("wram"); // Work RAM map(0xe000, 0xffff).rw(FUNC(suna8_state::suna8_banked_spriteram_r), FUNC(suna8_state::suna8_banked_spriteram_w)); // Sprites (Banked) } diff --git a/src/mame/drivers/supdrapo.cpp b/src/mame/drivers/supdrapo.cpp index 3bb1be1cef6..f1a1564c81e 100644 --- a/src/mame/drivers/supdrapo.cpp +++ b/src/mame/drivers/supdrapo.cpp @@ -280,7 +280,7 @@ void supdrapo_state::sdpoker_mem(address_map &map) { map(0x0000, 0x4fff).rom(); map(0x5000, 0x50ff).ram().share("col_line"); - map(0x57ff, 0x57ff).ram().share("col_line"); + map(0x5700, 0x57ff).ram().share("col_line"); map(0x5800, 0x58ff).ram().share("col_line"); map(0x6000, 0x67ff).ram(); //work ram map(0x6800, 0x6bff).ram().share("videoram"); diff --git a/src/mame/drivers/sym1.cpp b/src/mame/drivers/sym1.cpp index 00894483427..b64d6c20a94 100644 --- a/src/mame/drivers/sym1.cpp +++ b/src/mame/drivers/sym1.cpp @@ -261,22 +261,22 @@ void sym1_state::via3_a_w(uint8_t data) if ((m_wp->read() & 0x01) && !(data & 0x01)) { cpu0space.nop_write(0xa600, 0xa67f); } else { - cpu0space.install_write_bank(0xa600, 0xa67f, "bank5"); + cpu0space.install_write_bank(0xa600, 0xa67f, membank("bank5")); } if ((m_wp->read() & 0x02) && !(data & 0x02)) { cpu0space.nop_write(0x0400, 0x07ff); } else { - cpu0space.install_write_bank(0x0400, 0x07ff, "bank2"); + cpu0space.install_write_bank(0x0400, 0x07ff, membank("bank2")); } if ((m_wp->read() & 0x04) && !(data & 0x04)) { cpu0space.nop_write(0x0800, 0x0bff); } else { - cpu0space.install_write_bank(0x0800, 0x0bff, "bank3"); + cpu0space.install_write_bank(0x0800, 0x0bff, membank("bank3")); } if ((m_wp->read() & 0x08) && !(data & 0x08)) { cpu0space.nop_write(0x0c00, 0x0fff); } else { - cpu0space.install_write_bank(0x0c00, 0x0fff, "bank4"); + cpu0space.install_write_bank(0x0c00, 0x0fff, membank("bank4")); } } @@ -296,9 +296,8 @@ void sym1_state::machine_reset() { // make 0xf800 to 0xffff point to the last half of the monitor ROM // so that the CPU can find its reset vectors - m_maincpu->space(AS_PROGRAM).install_read_bank(0xf800, 0xffff, "bank1"); + m_maincpu->space(AS_PROGRAM).install_rom(0xf800, 0xffff, m_monitor + 0x800); m_maincpu->space(AS_PROGRAM).nop_write(0xf800, 0xffff); - membank("bank1")->set_base(m_monitor + 0x800); m_maincpu->reset(); } diff --git a/src/mame/drivers/symbolics.cpp b/src/mame/drivers/symbolics.cpp index d8a39c6df7c..42471abfb01 100644 --- a/src/mame/drivers/symbolics.cpp +++ b/src/mame/drivers/symbolics.cpp @@ -256,7 +256,7 @@ void symbolics_state::m68k_mem(address_map &map) // 0x00c000-0x00ffff is open bus but decoded/auto-DTACKed, does not cause bus error map(0x010000, 0x01bfff).rom(); // 0x01c000-0x01ffff is open bus but decoded/auto-DTACKed, does not cause bus error - map(0x020000, 0x03ffff).ram().region("fepdram", 0); /* Local FEP ram seems to be here? there are 18 mcm4164s on the pcb which probably map here, plus 2 parity bits? */ + map(0x020000, 0x03ffff).ram().share("fepdram"); /* Local FEP ram seems to be here? there are 18 mcm4164s on the pcb which probably map here, plus 2 parity bits? */ //map(0x020000, 0x03ffff).rw(FUNC(symbolics_state::ram_parity_hack_r), FUNC(symbolics_state::ram_parity_hack_w)); //map(0x020002, 0x03ffff).ram().region("fepdram", 0); /* Local FEP ram seems to be here? there are 18 mcm4164s on the pcb which probably map here, plus 2 parity bits? */ // 2x AM9128-10PC 2048x8 SRAMs @F7 and @G7 map somewhere @@ -392,7 +392,6 @@ ROM_START( s3670 ) LBARB.4 @I18 <- 4887235 page 625 has LBARB rev1, pal16l8 SERCTL.4 @K6 <- 4887235 page 620 has SERCTL rev4, pal16l8 */ - ROM_REGION16_BE( 0x20000, "fepdram", ROMREGION_ERASE00 ) ROM_END diff --git a/src/mame/drivers/tandy2k.cpp b/src/mame/drivers/tandy2k.cpp index 85a1e3f3d01..0c614cee7e0 100644 --- a/src/mame/drivers/tandy2k.cpp +++ b/src/mame/drivers/tandy2k.cpp @@ -919,7 +919,6 @@ void tandy2k_state::machine_start() program.install_ram(0x00000, ram_size - 1, ram); - m_char_ram.allocate(0x1000); m_mouse_timer = timer_alloc(MOUS_TIMER); m_mcu_delay = timer_alloc(MCU_DELAY); diff --git a/src/mame/drivers/tceptor.cpp b/src/mame/drivers/tceptor.cpp index dd8941b0263..17dc43f0ae6 100644 --- a/src/mame/drivers/tceptor.cpp +++ b/src/mame/drivers/tceptor.cpp @@ -147,7 +147,7 @@ void tceptor_state::m6502_a_map(address_map &map) map(0x0300, 0x030f).ram(); map(0x2000, 0x2001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); map(0x3000, 0x30ff).ram().share("share3"); - map(0x3c01, 0x3c01).writeonly(); + map(0x3c01, 0x3c01).nopw(); map(0x8000, 0xffff).rom(); } @@ -157,7 +157,7 @@ void tceptor_state::m6502_b_map(address_map &map) map(0x0000, 0x00ff).ram().share("share2"); map(0x0100, 0x01ff).ram(); map(0x4000, 0x4000).w("dac", FUNC(dac_byte_interface::data_w)); - map(0x5000, 0x5000).writeonly(); // voice ctrl?? + map(0x5000, 0x5000).nopw(); // voice ctrl?? map(0x8000, 0xffff).rom(); } @@ -167,7 +167,7 @@ void tceptor_state::m68k_map(address_map &map) map(0x000000, 0x00ffff).rom(); // M68K ERROR 1 map(0x100000, 0x10ffff).rom(); // not sure map(0x200000, 0x203fff).ram(); // M68K ERROR 0 - map(0x300000, 0x300001).writeonly(); + map(0x300000, 0x300001).nopw(); map(0x400000, 0x4001ff).writeonly().share("sprite_ram"); map(0x500000, 0x51ffff).w(m_c45_road, FUNC(namco_c45_road_device::write)); map(0x600000, 0x600001).w(FUNC(tceptor_state::m68k_irq_enable_w)); // not sure diff --git a/src/mame/drivers/tempest.cpp b/src/mame/drivers/tempest.cpp index 76b0615edf6..a0717778fe6 100644 --- a/src/mame/drivers/tempest.cpp +++ b/src/mame/drivers/tempest.cpp @@ -488,7 +488,7 @@ void tempest_state::main_map(address_map &map) map(0x0c00, 0x0c00).portr("IN0"); map(0x0d00, 0x0d00).portr("DSW1"); map(0x0e00, 0x0e00).portr("DSW2"); - map(0x2000, 0x2fff).ram().share("avg:vectorram").region("maincpu", 0x2000); + map(0x2000, 0x2fff).ram().share("avg:vectorram"); map(0x3000, 0x3fff).rom(); map(0x4000, 0x4000).w(FUNC(tempest_state::tempest_coin_w)); map(0x4800, 0x4800).w(m_avg, FUNC(avg_tempest_device::go_w)); diff --git a/src/mame/drivers/tigeroad.cpp b/src/mame/drivers/tigeroad.cpp index 1c8292e94fc..aeae6eacef4 100644 --- a/src/mame/drivers/tigeroad.cpp +++ b/src/mame/drivers/tigeroad.cpp @@ -110,9 +110,8 @@ void tigeroad_state::main_map(address_map &map) map(0xfe4002, 0xfe4002).w("soundlatch", FUNC(generic_latch_8_device::write)); map(0xfe4004, 0xfe4005).portr("DSW"); map(0xfe8000, 0xfe8003).w(FUNC(tigeroad_state::scroll_w)); - map(0xfe800e, 0xfe800f).writeonly(); // fe800e = watchdog or IRQ acknowledge + map(0xfe800e, 0xfe800f).nopw(); // fe800e = watchdog or IRQ acknowledge map(0xfec000, 0xfec7ff).ram().w(FUNC(tigeroad_state::videoram_w)).share("videoram"); - map(0xff8000, 0xff87ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0xffc000, 0xffffff).ram().share("ram16"); } diff --git a/src/mame/drivers/tiki100.cpp b/src/mame/drivers/tiki100.cpp index 3c1b19f2f1a..cdd6b00546e 100644 --- a/src/mame/drivers/tiki100.cpp +++ b/src/mame/drivers/tiki100.cpp @@ -681,9 +681,6 @@ void tiki100_state::machine_start() { m_leds.resolve(); - /* allocate video RAM */ - m_video_ram.allocate(TIKI100_VIDEORAM_SIZE); - /* register for state saving */ save_item(NAME(m_rome)); save_item(NAME(m_vire)); diff --git a/src/mame/drivers/timex.cpp b/src/mame/drivers/timex.cpp index 5c6c94d7344..cec0c0bc2b8 100644 --- a/src/mame/drivers/timex.cpp +++ b/src/mame/drivers/timex.cpp @@ -228,7 +228,7 @@ void timex_state::ts2068_update_memory() { if (m_port_ff_data & 0x80) { - space.install_read_bank(0x0000, 0x1fff, "bank1"); + space.install_read_bank(0x0000, 0x1fff, membank("bank1")); space.unmap_write(0x0000, 0x1fff); membank("bank1")->set_base(ExROM); logerror("0000-1fff EXROM\n"); @@ -238,9 +238,9 @@ void timex_state::ts2068_update_memory() if (m_dock_cart_type == TIMEX_CART_DOCK) { membank("bank1")->set_base(DOCK); - space.install_read_bank(0x0000, 0x1fff, "bank1"); + space.install_read_bank(0x0000, 0x1fff, membank("bank1")); if (m_ram_chunks & 0x01) - space.install_write_bank(0x0000, 0x1fff, "bank9"); + space.install_write_bank(0x0000, 0x1fff, membank("bank9")); else space.unmap_write(0x0000, 0x1fff); @@ -258,7 +258,7 @@ void timex_state::ts2068_update_memory() { ChosenROM = memregion("maincpu")->base() + 0x010000; membank("bank1")->set_base(ChosenROM); - space.install_read_bank(0x0000, 0x1fff, "bank1"); + space.install_read_bank(0x0000, 0x1fff, membank("bank1")); space.unmap_write(0x0000, 0x1fff); logerror("0000-1fff HOME\n"); } @@ -268,7 +268,7 @@ void timex_state::ts2068_update_memory() if (m_port_ff_data & 0x80) { membank("bank2")->set_base(ExROM); - space.install_read_bank(0x2000, 0x3fff, "bank2"); + space.install_read_bank(0x2000, 0x3fff, membank("bank2")); space.unmap_write(0x2000, 0x3fff); logerror("2000-3fff EXROM\n"); } @@ -277,9 +277,9 @@ void timex_state::ts2068_update_memory() if (m_dock_cart_type == TIMEX_CART_DOCK) { membank("bank2")->set_base(DOCK+0x2000); - space.install_read_bank(0x2000, 0x3fff, "bank2"); + space.install_read_bank(0x2000, 0x3fff, membank("bank2")); if (m_ram_chunks & 0x02) - space.install_write_bank(0x2000, 0x3fff, "bank10"); + space.install_write_bank(0x2000, 0x3fff, membank("bank10")); else space.unmap_write(0x2000, 0x3fff); @@ -296,7 +296,7 @@ void timex_state::ts2068_update_memory() { ChosenROM = memregion("maincpu")->base() + 0x012000; membank("bank2")->set_base(ChosenROM); - space.install_read_bank(0x2000, 0x3fff, "bank2"); + space.install_read_bank(0x2000, 0x3fff, membank("bank2")); space.unmap_write(0x2000, 0x3fff); logerror("2000-3fff HOME\n"); } @@ -306,7 +306,7 @@ void timex_state::ts2068_update_memory() if (m_port_ff_data & 0x80) { membank("bank3")->set_base(ExROM); - space.install_read_bank(0x4000, 0x5fff, "bank3"); + space.install_read_bank(0x4000, 0x5fff, membank("bank3")); space.unmap_write(0x4000, 0x5fff); logerror("4000-5fff EXROM\n"); } @@ -315,9 +315,9 @@ void timex_state::ts2068_update_memory() if (m_dock_cart_type == TIMEX_CART_DOCK) { membank("bank3")->set_base(DOCK+0x4000); - space.install_read_bank(0x4000, 0x5fff, "bank3"); + space.install_read_bank(0x4000, 0x5fff, membank("bank3")); if (m_ram_chunks & 0x04) - space.install_write_bank(0x4000, 0x5fff, "bank11"); + space.install_write_bank(0x4000, 0x5fff, membank("bank11")); else space.unmap_write(0x4000, 0x5fff); } @@ -333,8 +333,8 @@ void timex_state::ts2068_update_memory() { membank("bank3")->set_base(messram); membank("bank11")->set_base(messram); - space.install_read_bank(0x4000, 0x5fff, "bank3"); - space.install_write_bank(0x4000, 0x5fff, "bank11"); + space.install_read_bank(0x4000, 0x5fff, membank("bank3")); + space.install_write_bank(0x4000, 0x5fff, membank("bank11")); logerror("4000-5fff RAM\n"); } @@ -343,7 +343,7 @@ void timex_state::ts2068_update_memory() if (m_port_ff_data & 0x80) { membank("bank4")->set_base(ExROM); - space.install_read_bank(0x6000, 0x7fff, "bank4"); + space.install_read_bank(0x6000, 0x7fff, membank("bank4")); space.unmap_write(0x6000, 0x7fff); logerror("6000-7fff EXROM\n"); } @@ -352,9 +352,9 @@ void timex_state::ts2068_update_memory() if (m_dock_cart_type == TIMEX_CART_DOCK) { membank("bank4")->set_base(DOCK+0x6000); - space.install_read_bank(0x6000, 0x7fff, "bank4"); + space.install_read_bank(0x6000, 0x7fff, membank("bank4")); if (m_ram_chunks & 0x08) - space.install_write_bank(0x6000, 0x7fff, "bank12"); + space.install_write_bank(0x6000, 0x7fff, membank("bank12")); else space.unmap_write(0x6000, 0x7fff); } @@ -370,8 +370,8 @@ void timex_state::ts2068_update_memory() { membank("bank4")->set_base(messram + 0x2000); membank("bank12")->set_base(messram + 0x2000); - space.install_read_bank(0x6000, 0x7fff, "bank4"); - space.install_write_bank(0x6000, 0x7fff, "bank12"); + space.install_read_bank(0x6000, 0x7fff, membank("bank4")); + space.install_write_bank(0x6000, 0x7fff, membank("bank12")); logerror("6000-7fff RAM\n"); } @@ -380,7 +380,7 @@ void timex_state::ts2068_update_memory() if (m_port_ff_data & 0x80) { membank("bank5")->set_base(ExROM); - space.install_read_bank(0x8000, 0x9fff, "bank5"); + space.install_read_bank(0x8000, 0x9fff, membank("bank5")); space.unmap_write(0x8000, 0x9fff); logerror("8000-9fff EXROM\n"); } @@ -389,9 +389,9 @@ void timex_state::ts2068_update_memory() if (m_dock_cart_type == TIMEX_CART_DOCK) { membank("bank5")->set_base(DOCK+0x8000); - space.install_read_bank(0x8000, 0x9fff,"bank5"); + space.install_read_bank(0x8000, 0x9fff,membank("bank5")); if (m_ram_chunks & 0x10) - space.install_write_bank(0x8000, 0x9fff,"bank13"); + space.install_write_bank(0x8000, 0x9fff,membank("bank13")); else space.unmap_write(0x8000, 0x9fff); } @@ -407,8 +407,8 @@ void timex_state::ts2068_update_memory() { membank("bank5")->set_base(messram + 0x4000); membank("bank13")->set_base(messram + 0x4000); - space.install_read_bank(0x8000, 0x9fff,"bank5"); - space.install_write_bank(0x8000, 0x9fff,"bank13"); + space.install_read_bank(0x8000, 0x9fff,membank("bank5")); + space.install_write_bank(0x8000, 0x9fff,membank("bank13")); logerror("8000-9fff RAM\n"); } @@ -417,7 +417,7 @@ void timex_state::ts2068_update_memory() if (m_port_ff_data & 0x80) { membank("bank6")->set_base(ExROM); - space.install_read_bank(0xa000, 0xbfff, "bank6"); + space.install_read_bank(0xa000, 0xbfff, membank("bank6")); space.unmap_write(0xa000, 0xbfff); logerror("a000-bfff EXROM\n"); } @@ -426,9 +426,9 @@ void timex_state::ts2068_update_memory() if (m_dock_cart_type == TIMEX_CART_DOCK) { membank("bank6")->set_base(DOCK+0xa000); - space.install_read_bank(0xa000, 0xbfff, "bank6"); + space.install_read_bank(0xa000, 0xbfff, membank("bank6")); if (m_ram_chunks & 0x20) - space.install_write_bank(0xa000, 0xbfff, "bank14"); + space.install_write_bank(0xa000, 0xbfff, membank("bank14")); else space.unmap_write(0xa000, 0xbfff); @@ -445,8 +445,8 @@ void timex_state::ts2068_update_memory() { membank("bank6")->set_base(messram + 0x6000); membank("bank14")->set_base(messram + 0x6000); - space.install_read_bank(0xa000, 0xbfff, "bank6"); - space.install_write_bank(0xa000, 0xbfff, "bank14"); + space.install_read_bank(0xa000, 0xbfff, membank("bank6")); + space.install_write_bank(0xa000, 0xbfff, membank("bank14")); logerror("a000-bfff RAM\n"); } @@ -455,7 +455,7 @@ void timex_state::ts2068_update_memory() if (m_port_ff_data & 0x80) { membank("bank7")->set_base(ExROM); - space.install_read_bank(0xc000, 0xdfff, "bank7"); + space.install_read_bank(0xc000, 0xdfff, membank("bank7")); space.unmap_write(0xc000, 0xdfff); logerror("c000-dfff EXROM\n"); } @@ -464,9 +464,9 @@ void timex_state::ts2068_update_memory() if (m_dock_cart_type == TIMEX_CART_DOCK) { membank("bank7")->set_base(DOCK+0xc000); - space.install_read_bank(0xc000, 0xdfff, "bank7"); + space.install_read_bank(0xc000, 0xdfff, membank("bank7")); if (m_ram_chunks & 0x40) - space.install_write_bank(0xc000, 0xdfff, "bank15"); + space.install_write_bank(0xc000, 0xdfff, membank("bank15")); else space.unmap_write(0xc000, 0xdfff); } @@ -482,8 +482,8 @@ void timex_state::ts2068_update_memory() { membank("bank7")->set_base(messram + 0x8000); membank("bank15")->set_base(messram + 0x8000); - space.install_read_bank(0xc000, 0xdfff, "bank7"); - space.install_write_bank(0xc000, 0xdfff, "bank15"); + space.install_read_bank(0xc000, 0xdfff, membank("bank7")); + space.install_write_bank(0xc000, 0xdfff, membank("bank15")); logerror("c000-dfff RAM\n"); } @@ -492,7 +492,7 @@ void timex_state::ts2068_update_memory() if (m_port_ff_data & 0x80) { membank("bank8")->set_base(ExROM); - space.install_read_bank(0xe000, 0xffff, "bank8"); + space.install_read_bank(0xe000, 0xffff, membank("bank8")); space.unmap_write(0xe000, 0xffff); logerror("e000-ffff EXROM\n"); } @@ -501,9 +501,9 @@ void timex_state::ts2068_update_memory() if (m_dock_cart_type == TIMEX_CART_DOCK) { membank("bank8")->set_base(DOCK+0xe000); - space.install_read_bank(0xe000, 0xffff, "bank8"); + space.install_read_bank(0xe000, 0xffff, membank("bank8")); if (m_ram_chunks & 0x80) - space.install_write_bank(0xe000, 0xffff, "bank16"); + space.install_write_bank(0xe000, 0xffff, membank("bank16")); else space.unmap_write(0xe000, 0xffff); } @@ -519,8 +519,8 @@ void timex_state::ts2068_update_memory() { membank("bank8")->set_base(messram + 0xa000); membank("bank16")->set_base(messram + 0xa000); - space.install_read_bank(0xe000, 0xffff, "bank8"); - space.install_write_bank(0xe000, 0xffff, "bank16"); + space.install_read_bank(0xe000, 0xffff, membank("bank8")); + space.install_write_bank(0xe000, 0xffff, membank("bank16")); logerror("e000-ffff RAM\n"); } } diff --git a/src/mame/drivers/tmc1800.cpp b/src/mame/drivers/tmc1800.cpp index ed0209da6e6..bb4265cccb9 100644 --- a/src/mame/drivers/tmc1800.cpp +++ b/src/mame/drivers/tmc1800.cpp @@ -703,8 +703,6 @@ void tmc2000_state::machine_start() { m_led.resolve(); - m_colorram.allocate(TMC2000_COLORRAM_SIZE); - // randomize color RAM contents for (uint16_t addr = 0; addr < TMC2000_COLORRAM_SIZE; addr++) { diff --git a/src/mame/drivers/trackfld.cpp b/src/mame/drivers/trackfld.cpp index f2907d5e106..fd86ce3024f 100644 --- a/src/mame/drivers/trackfld.cpp +++ b/src/mame/drivers/trackfld.cpp @@ -1654,14 +1654,10 @@ void trackfld_state::init_atlantol() space.nop_write(0x1000, 0x1000); /* unmapped areas read as ROM */ - space.install_read_bank(0x0000, 0x11ff, "bank10"); - space.install_read_bank(0x1380, 0x17ff, "bank11"); - space.install_read_bank(0x2000, 0x27ff, "bank12"); - space.install_read_bank(0x4000, 0x5fff, "bank13"); - membank("bank10")->set_base(&rom[0x0000]); - membank("bank11")->set_base(&rom[0x1380]); - membank("bank12")->set_base(&rom[0x2000]); - membank("bank13")->set_base(&rom[0x4000]); + space.install_rom(0x0000, 0x11ff, &rom[0x0000]); + space.install_rom(0x1380, 0x17ff, &rom[0x1380]); + space.install_rom(0x2000, 0x27ff, &rom[0x2000]); + space.install_rom(0x4000, 0x5fff, &rom[0x4000]); } void trackfld_state::init_mastkin() diff --git a/src/mame/drivers/triforce.cpp b/src/mame/drivers/triforce.cpp index cfc1f76b91b..78619cab99b 100644 --- a/src/mame/drivers/triforce.cpp +++ b/src/mame/drivers/triforce.cpp @@ -507,7 +507,7 @@ void triforce_state::gc_map(address_map &map) map(0x00000000, 0x017fffff).ram(); map(0x0c003000, 0x0c003fff).rw(FUNC(triforce_state::gc_pi_r), FUNC(triforce_state::gc_pi_w)); map(0x0c006800, 0x0c0068ff).rw(FUNC(triforce_state::gc_exi_r), FUNC(triforce_state::gc_exi_w)); - map(0xfff00000, 0xffffffff).rom().region("maincpu", 0).share("share2"); /* Program ROM */ + map(0xfff00000, 0xffffffff).rom().region("maincpu", 0); /* Program ROM */ } diff --git a/src/mame/drivers/trs80m2.cpp b/src/mame/drivers/trs80m2.cpp index 6b971840d1f..c701e22317c 100644 --- a/src/mame/drivers/trs80m2.cpp +++ b/src/mame/drivers/trs80m2.cpp @@ -437,8 +437,6 @@ WRITE_LINE_MEMBER( trs80m2_state::vsync_w ) void trs80m2_state::video_start() { - // allocate memory - m_video_ram.allocate(0x800); } uint32_t trs80m2_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) diff --git a/src/mame/drivers/tsamurai.cpp b/src/mame/drivers/tsamurai.cpp index f8f4ca3c4fe..0d2e034f607 100644 --- a/src/mame/drivers/tsamurai.cpp +++ b/src/mame/drivers/tsamurai.cpp @@ -355,9 +355,9 @@ void tsamurai_state::vsgongf_map(address_map &map) map(0xe400, 0xe43f).ram().share("spriteram"); map(0xe440, 0xe47b).ram(); map(0xe800, 0xe800).w(FUNC(tsamurai_state::vsgongf_sound_command_w)); - map(0xec00, 0xec06).writeonly(); + map(0xec00, 0xec06).nopw(); map(0xf000, 0xf000).w(FUNC(tsamurai_state::vsgongf_color_w)); - map(0xf400, 0xf400).writeonly(); /* vreg? always 0 */ + map(0xf400, 0xf400).nopw(); /* vreg? always 0 */ map(0xf800, 0xf800).portr("P1"); map(0xf801, 0xf801).portr("P2"); map(0xf802, 0xf802).portr("SYSTEM"); diff --git a/src/mame/drivers/tubep.cpp b/src/mame/drivers/tubep.cpp index 70e3886bced..ff34c23d8ed 100644 --- a/src/mame/drivers/tubep.cpp +++ b/src/mame/drivers/tubep.cpp @@ -193,7 +193,7 @@ void tubep_state::tubep_second_map(address_map &map) map(0xc000, 0xc000).w(FUNC(tubep_state::tubep_background_c000_w)); map(0xe000, 0xe7ff).ram().share("share1"); /* 6116 #1 */ map(0xe800, 0xebff).writeonly().share("backgroundram"); /* row of 8 x 2147 RAMs on main PCB */ - map(0xf000, 0xf3ff).writeonly().share("sprite_color"); /* sprites color lookup table */ + map(0xf000, 0xf3ff).lw8([this](offs_t off, u8 data) { m_sprite_colorsharedram[off] = data; }, "sc_w"); /* sprites color lookup table */ map(0xf800, 0xffff).ram().share("share2"); /* program copies here part of shared ram ?? */ } diff --git a/src/mame/drivers/tumbleb.cpp b/src/mame/drivers/tumbleb.cpp index e1046c28b64..c66dcf9aa1f 100644 --- a/src/mame/drivers/tumbleb.cpp +++ b/src/mame/drivers/tumbleb.cpp @@ -638,7 +638,7 @@ void tumbleb_state::tumblepopb_main_map(address_map &map) map(0x120000, 0x123fff).ram().share("mainram"); map(0x140000, 0x1407ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x160000, 0x1607ff).ram().share("spriteram"); /* Bootleg sprite buffer */ - map(0x160800, 0x160807).writeonly(); /* writes past the end of spriteram */ + map(0x160800, 0x160807).nopw(); /* writes past the end of spriteram */ map(0x180000, 0x18000f).r(FUNC(tumbleb_state::tumblepopb_controls_r)); map(0x18000c, 0x18000d).nopw(); map(0x1a0000, 0x1a07ff).ram(); @@ -697,7 +697,7 @@ void tumbleb_state::unico_base_map(address_map &map) map(0x100005, 0x100005).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); map(0x140000, 0x140fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x160000, 0x1607ff).ram().share("spriteram"); /* sprites */ - map(0x160800, 0x16080f).writeonly(); /* goes slightly past the end of spriteram? */ + map(0x160800, 0x16080f).nopw(); /* goes slightly past the end of spriteram? */ map(0x180000, 0x18000f).r(FUNC(tumbleb_state::tumblepopb_controls_r)); map(0x18000c, 0x18000d).nopw(); map(0x1a0000, 0x1a07ff).ram(); @@ -783,7 +783,7 @@ void tumbleb_state::pangpang_main_map(address_map &map) map(0x120000, 0x123fff).ram().share("mainram"); map(0x140000, 0x1407ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x160000, 0x1607ff).ram().share("spriteram"); /* Bootleg sprite buffer */ - map(0x160800, 0x160807).writeonly(); // writes past the end of spriteram + map(0x160800, 0x160807).nopw(); // writes past the end of spriteram map(0x180000, 0x18000f).r(FUNC(tumbleb_state::tumblepopb_controls_r)); map(0x1a0000, 0x1a07ff).ram(); map(0x300000, 0x30000f).w(FUNC(tumbleb_state::tumblepb_control_0_w)); @@ -886,7 +886,7 @@ void tumbleb_state::jumpkids_main_map(address_map &map) map(0x120000, 0x123fff).ram().share("mainram"); map(0x140000, 0x1407ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x160000, 0x1607ff).ram().share("spriteram"); /* Bootleg sprite buffer */ - map(0x160800, 0x160807).writeonly(); /* writes past the end of spriteram */ + map(0x160800, 0x160807).nopw(); /* writes past the end of spriteram */ map(0x180000, 0x18000f).r(FUNC(tumbleb_state::tumblepopb_controls_r)); map(0x18000c, 0x18000d).nopw(); map(0x1a0000, 0x1a07ff).ram(); diff --git a/src/mame/drivers/tunhunt.cpp b/src/mame/drivers/tunhunt.cpp index 5ed459098b3..3e47d54545f 100644 --- a/src/mame/drivers/tunhunt.cpp +++ b/src/mame/drivers/tunhunt.cpp @@ -134,13 +134,13 @@ void tunhunt_state::main_map(address_map &map) { map.global_mask(0x7fff); map(0x0000, 0x03ff).ram().share("workram"); /* Work RAM */ - map(0x1080, 0x10ff).writeonly(); - map(0x1200, 0x12ff).writeonly(); - map(0x1400, 0x14ff).writeonly(); + map(0x1080, 0x10ff).nopw(); + map(0x1200, 0x12ff).nopw(); + map(0x1400, 0x14ff).nopw(); map(0x1600, 0x160f).writeonly().share("paletteram"); /* COLRAM (D7-D4 SHADE; D3-D0 COLOR) */ - map(0x1800, 0x1800).writeonly(); /* SHEL0H */ - map(0x1a00, 0x1a00).writeonly(); /* SHEL1H */ - map(0x1c00, 0x1c00).writeonly(); /* MOBJV */ + map(0x1800, 0x1800).nopw(); /* SHEL0H */ + map(0x1a00, 0x1a00).nopw(); /* SHEL1H */ + map(0x1c00, 0x1c00).nopw(); /* MOBJV */ map(0x1e00, 0x1eff).w(FUNC(tunhunt_state::videoram_w)).share("videoram"); /* ALPHA */ map(0x2000, 0x2000).nopw(); /* watchdog */ map(0x2000, 0x2007).r(FUNC(tunhunt_state::button_r)); diff --git a/src/mame/drivers/twin16.cpp b/src/mame/drivers/twin16.cpp index 5644a0883b9..1916b5d66c5 100644 --- a/src/mame/drivers/twin16.cpp +++ b/src/mame/drivers/twin16.cpp @@ -198,6 +198,13 @@ void twin16_state::main_map(address_map &map) map(0x140000, 0x143fff).ram().share("spriteram"); } +void cuebrickj_state::cuebrickj_main_map(address_map &map) +{ + main_map(map); + map(0x0b0000, 0x0b03ff).bankrw("nvrambank"); + map(0x0b0400, 0x0b0400).w(FUNC(cuebrickj_state::nvram_bank_w)); +} + void twin16_state::sub_map(address_map &map) { map(0x000000, 0x03ffff).rom(); @@ -763,6 +770,7 @@ void twin16_state::miaj(machine_config &config) void cuebrickj_state::cuebrickj(machine_config &config) { twin16(config); + m_maincpu->set_addrmap(AS_PROGRAM, &cuebrickj_state::cuebrickj_main_map); m_screen->set_raw(XTAL(18'432'000)/2, 576, 1*8, 39*8, 264, 2*8, 30*8); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); } @@ -1252,11 +1260,6 @@ void cuebrickj_state::init_cuebrickj() { init_twin16(); - address_space &space = m_maincpu->space(AS_PROGRAM); - - space.install_readwrite_bank(0x0b0000, 0x0b03ff, "nvrambank"); - space.install_write_handler( 0x0b0400, 0x0b0401, write8smo_delegate(*this, FUNC(cuebrickj_state::nvram_bank_w)), 0xff00); - membank("nvrambank")->configure_entries(0, 0x20, m_nvram, 0x400); subdevice<nvram_device>("nvram")->set_base(m_nvram, sizeof(m_nvram)); diff --git a/src/mame/drivers/unico.cpp b/src/mame/drivers/unico.cpp index 12625029b70..400203ca522 100644 --- a/src/mame/drivers/unico.cpp +++ b/src/mame/drivers/unico.cpp @@ -149,7 +149,7 @@ void zeropnt_state::zeropnt_map(address_map &map) map(0x80018a, 0x80018a).w("ymsnd", FUNC(ym3812_device::write_port_w)); map(0x80018c, 0x80018c).rw("ymsnd", FUNC(ym3812_device::status_port_r), FUNC(ym3812_device::control_port_w)); map(0x80018e, 0x80018e).w(FUNC(zeropnt_state::zeropnt_okibank_leds_w)); // - map(0x8001e0, 0x8001e1).writeonly(); // ? IRQ Ack + map(0x8001e0, 0x8001e1).nopw(); // ? IRQ Ack map(0x904000, 0x90ffff).rw(FUNC(zeropnt_state::vram_r), FUNC(zeropnt_state::vram_w)).share("vram"); // Layers 1, 2, 0 map(0x920000, 0x923fff).ram(); // ? 0 map(0x930000, 0x9307ff).rw(FUNC(zeropnt_state::spriteram_r), FUNC(zeropnt_state::spriteram_w)).share("spriteram"); // Sprites diff --git a/src/mame/drivers/v1050.cpp b/src/mame/drivers/v1050.cpp index 7467a589257..a9015497ac3 100644 --- a/src/mame/drivers/v1050.cpp +++ b/src/mame/drivers/v1050.cpp @@ -181,12 +181,12 @@ void v1050_state::bankswitch() if (BIT(m_bank, 0)) { - program.install_readwrite_bank(0x0000, 0x1fff, "bank1"); + program.install_readwrite_bank(0x0000, 0x1fff, membank("bank1")); membank("bank1")->set_entry(bank); } else { - program.install_read_bank(0x0000, 0x1fff, "bank1"); + program.install_read_bank(0x0000, 0x1fff, membank("bank1")); program.unmap_write(0x0000, 0x1fff); membank("bank1")->set_entry(3); } @@ -199,8 +199,8 @@ void v1050_state::bankswitch() } else { - program.install_readwrite_bank(0x4000, 0x7fff, "bank3"); - program.install_readwrite_bank(0x8000, 0xbfff, "bank4"); + program.install_readwrite_bank(0x4000, 0x7fff, membank("bank3")); + program.install_readwrite_bank(0x8000, 0xbfff, membank("bank4")); membank("bank3")->set_entry(bank); membank("bank4")->set_entry(bank); } @@ -980,17 +980,17 @@ void v1050_state::machine_start() membank("bank1")->configure_entry(2, ram + 0x1c000); membank("bank1")->configure_entry(3, m_rom->base()); - program.install_readwrite_bank(0x2000, 0x3fff, "bank2"); + program.install_readwrite_bank(0x2000, 0x3fff, membank("bank2")); membank("bank2")->configure_entries(0, 2, ram + 0x2000, 0x10000); membank("bank2")->configure_entry(2, ram + 0x1e000); - - program.install_readwrite_bank(0x4000, 0x7fff, "bank3"); + + program.install_readwrite_bank(0x4000, 0x7fff, membank("bank3")); membank("bank3")->configure_entries(0, 2, ram + 0x4000, 0x10000); - program.install_readwrite_bank(0x8000, 0xbfff, "bank4"); + program.install_readwrite_bank(0x8000, 0xbfff, membank("bank4")); membank("bank4")->configure_entries(0, 2, ram + 0x8000, 0x10000); - program.install_readwrite_bank(0xc000, 0xffff, "bank5"); + program.install_readwrite_bank(0xc000, 0xffff, membank("bank5")); membank("bank5")->configure_entries(0, 3, ram + 0xc000, 0); bankswitch(); diff --git a/src/mame/drivers/vamphalf.cpp b/src/mame/drivers/vamphalf.cpp index 4789484e789..b643aa8bbb2 100644 --- a/src/mame/drivers/vamphalf.cpp +++ b/src/mame/drivers/vamphalf.cpp @@ -78,14 +78,15 @@ public: vamphalf_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") - , m_wram(*this, "wram") - , m_wram32(*this, "wram32") - , m_okibank(*this, "okibank") + , m_wram(*this,"wram") + , m_wram32(*this,"wram32") + , m_qs1000_bank(*this, "qs1000_bank") + , m_okibank(*this,"okibank") , m_palette(*this, "palette") , m_soundlatch(*this, "soundlatch") , m_eeprom(*this, "eeprom") , m_gfxdecode(*this, "gfxdecode") - , m_tiles(*this, "tiles", 0U) + , m_tiles(*this,"tiles") , m_okiregion(*this, "oki%u", 1) , m_photosensors(*this, "PHOTO_SENSORS") , m_has_extra_gfx(false) @@ -157,6 +158,8 @@ protected: optional_shared_ptr<u16> m_wram; optional_shared_ptr<u32> m_wram32; + memory_bank_creator m_qs1000_bank; + u16 m_semicom_prot_data[2]; int m_semicom_prot_idx; int m_semicom_prot_which; @@ -500,7 +503,7 @@ void vamphalf_state::qs1000_p3_w(u8 data) if (!BIT(data, 5)) m_soundlatch->acknowledge_w(); - membank("qs1000:data")->set_entry(data & 7); + m_qs1000_bank->set_entry(data & 7); } @@ -3325,8 +3328,8 @@ void vamphalf_qdsp_state::init_misncrft() m_flip_bit = 1; // Configure the QS1000 ROM banking. Care must be taken not to overlap the 256b internal RAM - m_qdsp_cpu->space(AS_IO).install_read_bank(0x0100, 0xffff, "data"); - membank("qs1000:data")->configure_entries(0, 16, memregion("qs1000:cpu")->base() + 0x100, 0x8000-0x100); + m_qdsp_cpu->space(AS_IO).install_read_bank(0x0100, 0xffff, m_qs1000_bank); + m_qs1000_bank->configure_entries(0, 16, memregion("qs1000:cpu")->base() + 0x100, 0x8000-0x100); } void vamphalf_state::init_coolmini() @@ -3408,8 +3411,8 @@ void vamphalf_qdsp_state::init_wyvernwg() m_semicom_prot_data[1] = 1; // Configure the QS1000 ROM banking. Care must be taken not to overlap the 256b internal RAM - m_qdsp_cpu->space(AS_IO).install_read_bank(0x0100, 0xffff, "data"); - membank("qs1000:data")->configure_entries(0, 16, memregion("qs1000:cpu")->base() + 0x100, 0x8000-0x100); + m_qdsp_cpu->space(AS_IO).install_read_bank(0x0100, 0xffff, m_qs1000_bank); + m_qs1000_bank->configure_entries(0, 16, memregion("qs1000:cpu")->base() + 0x100, 0x8000-0x100); save_item(NAME(m_semicom_prot_idx)); save_item(NAME(m_semicom_prot_which)); @@ -3432,8 +3435,8 @@ void vamphalf_qdsp_state::init_yorijori() // romx[BYTE4_XOR_BE(0x8ff1)] = 0; // Configure the QS1000 ROM banking. Care must be taken not to overlap the 256b internal RAM - m_qdsp_cpu->space(AS_IO).install_read_bank(0x0100, 0xffff, "data"); - membank("qs1000:data")->configure_entries(0, 16, memregion("qs1000:cpu")->base() + 0x100, 0x8000-0x100); + m_qdsp_cpu->space(AS_IO).install_read_bank(0x0100, 0xffff, m_qs1000_bank); + m_qs1000_bank->configure_entries(0, 16, memregion("qs1000:cpu")->base() + 0x100, 0x8000-0x100); } void vamphalf_nvram_state::init_finalgdr() diff --git a/src/mame/drivers/vegaeo.cpp b/src/mame/drivers/vegaeo.cpp index 62fb7c9f077..e26c58ea0ef 100644 --- a/src/mame/drivers/vegaeo.cpp +++ b/src/mame/drivers/vegaeo.cpp @@ -30,6 +30,7 @@ public: : eolith_state(mconfig, type, tag) , m_soundlatch(*this, "soundlatch") , m_system_io(*this, "SYSTEM") + , m_qs1000_bank(*this, "qs1000_bank") { } @@ -43,6 +44,7 @@ protected: private: required_device<generic_latch_8_device> m_soundlatch; required_ioport m_system_io; + memory_bank_creator m_qs1000_bank; std::unique_ptr<uint8_t[]> m_vram; int m_vbuffer; @@ -73,7 +75,7 @@ void vegaeo_state::qs1000_p3_w(uint8_t data) // ...x .... - ? // ..x. .... - /IRQ clear - membank("qs1000:bank")->set_entry(data & 0x07); + m_qs1000_bank->set_entry(data & 0x07); if (!BIT(data, 5)) m_soundlatch->acknowledge_w(); @@ -290,8 +292,8 @@ ROM_END void vegaeo_state::init_vegaeo() { // Set up the QS1000 program ROM banking, taking care not to overlap the internal RAM - m_qs1000->cpu().space(AS_IO).install_read_bank(0x0100, 0xffff, "bank"); - membank("qs1000:bank")->configure_entries(0, 8, memregion("qs1000:cpu")->base()+0x100, 0x10000); + m_qs1000->cpu().space(AS_IO).install_read_bank(0x0100, 0xffff, m_qs1000_bank); + m_qs1000_bank->configure_entries(0, 8, memregion("qs1000:cpu")->base()+0x100, 0x10000); init_speedup(); } diff --git a/src/mame/drivers/vic10.cpp b/src/mame/drivers/vic10.cpp index ed897c0c009..b41700fbbcb 100644 --- a/src/mame/drivers/vic10.cpp +++ b/src/mame/drivers/vic10.cpp @@ -45,7 +45,7 @@ public: m_exp(*this, VIC10_EXPANSION_SLOT_TAG), m_ram(*this, RAM_TAG), m_cassette(*this, PET_DATASSETTE_PORT_TAG), - m_color_ram(*this, "color_ram"), + m_color_ram(*this, "color_ram", 0x400, ENDIANNESS_LITTLE), m_row(*this, "ROW%u", 0), m_restore(*this, "RESTORE"), m_lock(*this, "LOCK") @@ -63,7 +63,7 @@ private: required_device<vic10_expansion_slot_device> m_exp; required_device<ram_device> m_ram; optional_device<pet_datassette_port_device> m_cassette; - optional_shared_ptr<uint8_t> m_color_ram; + memory_share_creator<uint8_t> m_color_ram; required_ioport_array<8> m_row; required_ioport m_restore; required_ioport m_lock; @@ -604,9 +604,6 @@ WRITE_LINE_MEMBER( vic10_state::exp_reset_w ) void vic10_state::machine_start() { - // allocate memory - m_color_ram.allocate(0x400); - // initialize memory uint8_t data = 0xff; diff --git a/src/mame/drivers/videopkr.cpp b/src/mame/drivers/videopkr.cpp index 3d5a7af9568..79a6d83e7b7 100644 --- a/src/mame/drivers/videopkr.cpp +++ b/src/mame/drivers/videopkr.cpp @@ -956,10 +956,10 @@ void videopkr_state::i8751_io_port(address_map &map) { map(0x0000, 0x0fff).ram(); // NVRAM? map(0x8000, 0x8000).noprw(); // ??? - map(0x9000, 0x9000).writeonly(); // ??? + map(0x9000, 0x9000).nopw(); // ??? map(0xa000, 0xbfff).ram(); // video RAM? map(0xc000, 0xc003).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0xf000, 0xf000).writeonly(); // ??? + map(0xf000, 0xf000).nopw(); // ??? } void videopkr_state::i8039_sound_mem(address_map &map) diff --git a/src/mame/drivers/voyager.cpp b/src/mame/drivers/voyager.cpp index 811026b9d93..fd426832056 100644 --- a/src/mame/drivers/voyager.cpp +++ b/src/mame/drivers/voyager.cpp @@ -261,9 +261,9 @@ void voyager_state::voyager_map(address_map &map) { map(0x00000000, 0x0009ffff).ram(); map(0x000a0000, 0x000bffff).rw("vga", FUNC(trident_vga_device::mem_r), FUNC(trident_vga_device::mem_w)); // VGA VRAM - map(0x000c0000, 0x000c7fff).ram().region("video_bios", 0); + map(0x000c0000, 0x000c7fff).rom().region("video_bios", 0); map(0x000c8000, 0x000cffff).noprw(); - //map(0x000d0000, 0x000d0003).ram(); // XYLINX - Sincronus serial communication + //map(0x000d0000, 0x000d0003).ram(); // XYLINX - Synchronus serial communication map(0x000d0008, 0x000d000b).nopw(); // ??? map(0x000d0800, 0x000d0fff).rw(FUNC(voyager_state::nvram_r), FUNC(voyager_state::nvram_w)); // GAME_CMOS diff --git a/src/mame/drivers/vtech1.cpp b/src/mame/drivers/vtech1.cpp index 934c86000ce..61928a92c4d 100644 --- a/src/mame/drivers/vtech1.cpp +++ b/src/mame/drivers/vtech1.cpp @@ -65,7 +65,8 @@ class vtech1_state : public driver_device public: vtech1_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) - , m_vram(*this, "videoram") + , m_vram(*this, "videoram", 0x2000, ENDIANNESS_LITTLE) + , m_bank(*this, "bank") , m_maincpu(*this, "maincpu") , m_crtc(*this, "crtc") , m_speaker(*this, "speaker") @@ -102,7 +103,8 @@ private: static const uint8_t VZ_BASIC = 0xf0; static const uint8_t VZ_MCODE = 0xf1; - required_shared_ptr<uint8_t> m_vram; + memory_share_creator<uint8_t> m_vram; + memory_bank_creator m_bank; required_device<cpu_device> m_maincpu; required_device<mc6847_base_device> m_crtc; required_device<speaker_sound_device> m_speaker; @@ -248,7 +250,7 @@ void vtech1_state::latch_w(uint8_t data) void vtech1_state::video_bank_w(uint8_t data) { - membank("bank4")->set_entry(data & 0x03); + m_bank->set_entry(data & 0x03); } @@ -274,11 +276,10 @@ uint8_t vtech1_state::mc6847_videoram_r(offs_t offset) void vtech1_state::init_vtech1h() { // the SHRG mod replaces the standard videoram chip with an 8k chip - m_vram.allocate(0x2000); - m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x7000, 0x77ff, "bank4"); - membank("bank4")->configure_entries(0, 4, m_vram, 0x800); - membank("bank4")->set_entry(0); + m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x7000, 0x77ff, m_bank); + m_bank->configure_entries(0, 4, m_vram, 0x800); + m_bank->set_entry(0); } diff --git a/src/mame/drivers/williams.cpp b/src/mame/drivers/williams.cpp index 5bcfc57b892..e552623adea 100644 --- a/src/mame/drivers/williams.cpp +++ b/src/mame/drivers/williams.cpp @@ -625,7 +625,7 @@ void spdball_state::main_map(address_map &map) void blaster_state::main_map(address_map &map) { map(0x0000, 0x3fff).bankr("mainbank").writeonly().share("videoram"); - map(0x4000, 0x8fff).bankr("blaster_bankb").writeonly(); + map(0x4000, 0x8fff).bankr("blaster_bankb").writeonly().share("bankb"); map(0x9000, 0xbaff).ram(); map(0xbb00, 0xbbff).ram().share("blaster_pal0"); map(0xbc00, 0xbcff).ram().share("blaster_scan"); diff --git a/src/mame/drivers/x68k.cpp b/src/mame/drivers/x68k.cpp index 7a93ea3db98..972cf24fa5f 100644 --- a/src/mame/drivers/x68k.cpp +++ b/src/mame/drivers/x68k.cpp @@ -1520,8 +1520,7 @@ void x68k_state::machine_start() address_space &space = m_maincpu->space(AS_PROGRAM); // install RAM handlers m_spriteram = (uint16_t*)(memregion("user1")->base()); - space.install_readwrite_bank(0x000000,m_ram->size()-1,"bank1"); - membank("bank1")->set_base(m_ram->pointer()); + space.install_ram(0x000000,m_ram->size()-1,m_ram->pointer()); // start mouse timer m_mouse_timer->adjust(attotime::zero, 0, attotime::from_msec(1)); // a guess for now diff --git a/src/mame/drivers/xor100.cpp b/src/mame/drivers/xor100.cpp index 9ed7896224f..89d96907e03 100644 --- a/src/mame/drivers/xor100.cpp +++ b/src/mame/drivers/xor100.cpp @@ -65,27 +65,27 @@ void xor100_state::bankswitch() case EPROM_0000: if (m_bank < banks) { - program.install_write_bank(0x0000, 0xffff, "bank1"); - membank("bank1")->set_entry(1 + m_bank); + program.install_write_bank(0x0000, 0xffff, m_bank1); + m_bank1->set_entry(1 + m_bank); } else { program.unmap_write(0x0000, 0xffff); } - program.install_read_bank(0x0000, 0x07ff, 0xf000, "bank2"); - program.install_read_bank(0xf800, 0xffff, "bank3"); - membank("bank2")->set_entry(0); - membank("bank3")->set_entry(0); + program.install_read_bank(0x0000, 0x07ff, 0xf000, m_bank2); + program.install_read_bank(0xf800, 0xffff, m_bank3); + m_bank2->set_entry(0); + m_bank3->set_entry(0); break; case EPROM_F800: if (m_bank < banks) { - program.install_write_bank(0x0000, 0xffff, "bank1"); - program.install_read_bank(0x0000, 0xf7ff, "bank2"); - membank("bank1")->set_entry(1 + m_bank); - membank("bank2")->set_entry(1 + m_bank); + program.install_write_bank(0x0000, 0xffff, m_bank1); + program.install_read_bank(0x0000, 0xf7ff, m_bank2); + m_bank1->set_entry(1 + m_bank); + m_bank2->set_entry(1 + m_bank); } else { @@ -93,19 +93,19 @@ void xor100_state::bankswitch() program.unmap_read(0x0000, 0xf7ff); } - program.install_read_bank(0xf800, 0xffff, "bank3"); - membank("bank3")->set_entry(0); + program.install_read_bank(0xf800, 0xffff, m_bank3); + m_bank3->set_entry(0); break; case EPROM_OFF: if (m_bank < banks) { - program.install_write_bank(0x0000, 0xffff, "bank1"); - program.install_read_bank(0x0000, 0xf7ff, "bank2"); - program.install_read_bank(0xf800, 0xffff, "bank3"); - membank("bank1")->set_entry(1 + m_bank); - membank("bank2")->set_entry(1 + m_bank); - membank("bank3")->set_entry(1 + m_bank); + program.install_write_bank(0x0000, 0xffff, m_bank1); + program.install_read_bank(0x0000, 0xf7ff, m_bank2); + program.install_read_bank(0xf800, 0xffff, m_bank3); + m_bank1->set_entry(1 + m_bank); + m_bank2->set_entry(1 + m_bank); + m_bank3->set_entry(1 + m_bank); } else { diff --git a/src/mame/drivers/zaurus.cpp b/src/mame/drivers/zaurus.cpp index 451697a0b3b..80ea72420c6 100644 --- a/src/mame/drivers/zaurus.cpp +++ b/src/mame/drivers/zaurus.cpp @@ -1476,7 +1476,7 @@ private: void zaurus_sa_state::main_map(address_map &map) { - map(0x00000000, 0x00ffffff).ram().region("firmware", 0); + map(0x00000000, 0x00ffffff).rom().region("firmware", 0); map(0x90020000, 0x9002001f).rw(m_sa_periphs, FUNC(sa1110_periphs_device::power_r), FUNC(sa1110_periphs_device::power_w)); map(0x90050000, 0x90050023).rw(m_sa_periphs, FUNC(sa1110_periphs_device::intc_r), FUNC(sa1110_periphs_device::intc_w)); map(0xc0000000, 0xc07fffff).ram().share("ram"); @@ -1484,7 +1484,7 @@ void zaurus_sa_state::main_map(address_map &map) void zaurus_pxa_state::main_map(address_map &map) { - map(0x00000000, 0x001fffff).ram().region("firmware", 0); + map(0x00000000, 0x001fffff).rom().region("firmware", 0); map(0x40000000, 0x400002ff).rw(m_pxa_periphs, FUNC(pxa255_periphs_device::dma_r), FUNC(pxa255_periphs_device::dma_w)); map(0x40400000, 0x40400083).rw(m_pxa_periphs, FUNC(pxa255_periphs_device::i2s_r), FUNC(pxa255_periphs_device::i2s_w)); map(0x40900000, 0x4090000f).rw(m_pxa_periphs, FUNC(pxa255_periphs_device::rtc_r), FUNC(pxa255_periphs_device::rtc_w)); diff --git a/src/mame/drivers/zr107.cpp b/src/mame/drivers/zr107.cpp index 7295cb92ec5..f3b91f8b305 100644 --- a/src/mame/drivers/zr107.cpp +++ b/src/mame/drivers/zr107.cpp @@ -506,8 +506,8 @@ void midnrun_state::main_memmap(address_map &map) map(0x7e008000, 0x7e009fff).rw("k056230", FUNC(k056230_device::read), FUNC(k056230_device::write)); /* LANC registers */ map(0x7e00a000, 0x7e00bfff).rw("k056230", FUNC(k056230_device::lanc_ram_r), FUNC(k056230_device::lanc_ram_w)); /* LANC Buffer RAM (27E) */ map(0x7e00c000, 0x7e00c00f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w)); - map(0x7f800000, 0x7f9fffff).rom().share("share2"); - map(0x7fe00000, 0x7fffffff).rom().region("user1", 0).share("share2"); /* Program ROM */ + map(0x7f800000, 0x7f9fffff).rom().region("user1", 0); + map(0x7fe00000, 0x7fffffff).rom().region("user1", 0); /* Program ROM */ } @@ -535,8 +535,8 @@ void jetwave_state::main_memmap(address_map &map) map(0x7e00a000, 0x7e00bfff).rw("k056230", FUNC(k056230_device::lanc_ram_r), FUNC(k056230_device::lanc_ram_w)); /* LANC Buffer RAM (27E) */ map(0x7e00c000, 0x7e00c00f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w)); map(0x7f000000, 0x7f3fffff).rom().region("user2", 0); - map(0x7f800000, 0x7f9fffff).rom().share("share2"); - map(0x7fe00000, 0x7fffffff).rom().region("user1", 0).share("share2"); /* Program ROM */ + map(0x7f800000, 0x7f9fffff).rom().region("user1", 0); + map(0x7fe00000, 0x7fffffff).rom().region("user1", 0); /* Program ROM */ } @@ -857,11 +857,11 @@ void zr107_state::driver_init() /*****************************************************************************/ ROM_START( midnrun ) - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "476ea1a01.20u", 0x000003, 0x80000, CRC(ea70edf2) SHA1(51c882383a150ba118ccd39eb869525fcf5eee3c) ) /* Program version EAA, v1.11 (EUR) */ - ROM_LOAD32_BYTE( "476ea1a02.17u", 0x000002, 0x80000, CRC(1462994f) SHA1(c8614c6c416f81737cc77c46eea6d8d440bc8cf3) ) - ROM_LOAD32_BYTE( "476ea1a03.15u", 0x000001, 0x80000, CRC(b770ae46) SHA1(c61daa8353802957eb1c2e2c6204c3a98569627e) ) - ROM_LOAD32_BYTE( "476ea1a04.13u", 0x000000, 0x80000, CRC(9644b277) SHA1(b9cb812b6035dfd93032d277c8aa0037cf6b3dbe) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "476ea1a01.20u", 0x000000, 0x80000, CRC(ea70edf2) SHA1(51c882383a150ba118ccd39eb869525fcf5eee3c) ) /* Program version EAA, v1.11 (EUR) */ + ROM_LOAD32_BYTE( "476ea1a02.17u", 0x000001, 0x80000, CRC(1462994f) SHA1(c8614c6c416f81737cc77c46eea6d8d440bc8cf3) ) + ROM_LOAD32_BYTE( "476ea1a03.15u", 0x000002, 0x80000, CRC(b770ae46) SHA1(c61daa8353802957eb1c2e2c6204c3a98569627e) ) + ROM_LOAD32_BYTE( "476ea1a04.13u", 0x000003, 0x80000, CRC(9644b277) SHA1(b9cb812b6035dfd93032d277c8aa0037cf6b3dbe) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "477a07.19l", 0x000000, 0x20000, CRC(a82c0ba1) SHA1(dad69f2e5e75009d70cc2748477248ec47627c30) ) @@ -883,11 +883,11 @@ ROM_START( midnrun ) ROM_END ROM_START( midnrunj ) - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "476ja1d01.20u", 0x000003, 0x80000, CRC(68d05950) SHA1(d0ff9b9b628563e18a3eaa7b96b7e9e442c001a9) ) /* Program version JAD, v1.10 (JPN) */ - ROM_LOAD32_BYTE( "476ja1d02.17u", 0x000002, 0x80000, CRC(b12a14be) SHA1(d65281791874b90351442b94173d96582cfacd10) ) - ROM_LOAD32_BYTE( "476ja1d03.15u", 0x000001, 0x80000, CRC(f768c8f1) SHA1(b8242995bdb4f9ac078fd59ffc70c31014396c92) ) - ROM_LOAD32_BYTE( "476ja1d04.13u", 0x000000, 0x80000, CRC(6fd4fce7) SHA1(0ef25ec98a13f7beca1231db5a4db9004caadb0b) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "476ja1d01.20u", 0x000000, 0x80000, CRC(68d05950) SHA1(d0ff9b9b628563e18a3eaa7b96b7e9e442c001a9) ) /* Program version JAD, v1.10 (JPN) */ + ROM_LOAD32_BYTE( "476ja1d02.17u", 0x000001, 0x80000, CRC(b12a14be) SHA1(d65281791874b90351442b94173d96582cfacd10) ) + ROM_LOAD32_BYTE( "476ja1d03.15u", 0x000002, 0x80000, CRC(f768c8f1) SHA1(b8242995bdb4f9ac078fd59ffc70c31014396c92) ) + ROM_LOAD32_BYTE( "476ja1d04.13u", 0x000003, 0x80000, CRC(6fd4fce7) SHA1(0ef25ec98a13f7beca1231db5a4db9004caadb0b) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "477a07.19l", 0x000000, 0x20000, CRC(a82c0ba1) SHA1(dad69f2e5e75009d70cc2748477248ec47627c30) ) @@ -909,11 +909,11 @@ ROM_START( midnrunj ) ROM_END ROM_START( midnruna ) - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "477aaa01.20u", 0x000003, 0x80000, CRC(3aa31517) SHA1(315d9c3c930493e39bc497ceafa0c4ef6fa64e4d) ) /* Program version AAA, v1.10 (ASA) */ - ROM_LOAD32_BYTE( "477aaa02.17u", 0x000002, 0x80000, CRC(c506bd3d) SHA1(d44ed2cb39f0da44f681190132c7603dfca813d9) ) - ROM_LOAD32_BYTE( "477aaa03.15u", 0x000001, 0x80000, CRC(53f8e898) SHA1(ba83a60a411bb307cb0e424099716ccf888a4f39) ) - ROM_LOAD32_BYTE( "477aaa04.13u", 0x000000, 0x80000, CRC(0eb264b7) SHA1(179a3d58c0f554fd1b283ee3640ce09d5142b288) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "477aaa01.20u", 0x000000, 0x80000, CRC(3aa31517) SHA1(315d9c3c930493e39bc497ceafa0c4ef6fa64e4d) ) /* Program version AAA, v1.10 (ASA) */ + ROM_LOAD32_BYTE( "477aaa02.17u", 0x000001, 0x80000, CRC(c506bd3d) SHA1(d44ed2cb39f0da44f681190132c7603dfca813d9) ) + ROM_LOAD32_BYTE( "477aaa03.15u", 0x000002, 0x80000, CRC(53f8e898) SHA1(ba83a60a411bb307cb0e424099716ccf888a4f39) ) + ROM_LOAD32_BYTE( "477aaa04.13u", 0x000003, 0x80000, CRC(0eb264b7) SHA1(179a3d58c0f554fd1b283ee3640ce09d5142b288) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "477a07.19l", 0x000000, 0x20000, CRC(a82c0ba1) SHA1(dad69f2e5e75009d70cc2748477248ec47627c30) ) @@ -935,7 +935,7 @@ ROM_START( midnruna ) ROM_END ROM_START( midnruna2 ) - ROM_REGION(0x200000, "user1", 0) // PowerPC program roms + ROM_REGION32_BE(0x200000, "user1", 0) // PowerPC program roms ROM_LOAD32_BYTE( "477ab1d01.20u", 0x000003, 0x80000, CRC(3aa31517) SHA1(315d9c3c930493e39bc497ceafa0c4ef6fa64e4d) ) // labeled AB1, but still program version AAA, v1.10 (ASA) ROM_LOAD32_BYTE( "477ab1d02.17u", 0x000002, 0x80000, CRC(c506bd3d) SHA1(d44ed2cb39f0da44f681190132c7603dfca813d9) ) ROM_LOAD32_BYTE( "477ab1d03.15u", 0x000001, 0x80000, CRC(53f8e898) SHA1(ba83a60a411bb307cb0e424099716ccf888a4f39) ) @@ -961,11 +961,11 @@ ROM_START( midnruna2 ) ROM_END ROM_START( windheat ) - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "677eaa01.20u", 0x000003, 0x080000, CRC(500b61f4) SHA1(ec39165412978c0dbd3cbf1f7b6989b5d7ba20a0) ) /* Program version EAA, v2.11 (EUR) */ - ROM_LOAD32_BYTE( "677eaa02.17u", 0x000002, 0x080000, CRC(99f9fd3b) SHA1(aaec5d7f4e46648aab3738ab09e46b312caee58f) ) - ROM_LOAD32_BYTE( "677eaa03.15u", 0x000001, 0x080000, CRC(c46eba6b) SHA1(80fea082d09071875d30a6a838736cf3a3e4501d) ) - ROM_LOAD32_BYTE( "677eaa04.13u", 0x000000, 0x080000, CRC(20dfcf4e) SHA1(4de8e22507f4719441f14fe96e25f0e0712dfa95) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "677eaa01.20u", 0x000000, 0x080000, CRC(500b61f4) SHA1(ec39165412978c0dbd3cbf1f7b6989b5d7ba20a0) ) /* Program version EAA, v2.11 (EUR) */ + ROM_LOAD32_BYTE( "677eaa02.17u", 0x000001, 0x080000, CRC(99f9fd3b) SHA1(aaec5d7f4e46648aab3738ab09e46b312caee58f) ) + ROM_LOAD32_BYTE( "677eaa03.15u", 0x000002, 0x080000, CRC(c46eba6b) SHA1(80fea082d09071875d30a6a838736cf3a3e4501d) ) + ROM_LOAD32_BYTE( "677eaa04.13u", 0x000003, 0x080000, CRC(20dfcf4e) SHA1(4de8e22507f4719441f14fe96e25f0e0712dfa95) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "677a07.19l", 0x000000, 0x020000, CRC(05b14f2d) SHA1(3753f71173594ee741980e08eed0f7c3fc3588c9) ) @@ -987,11 +987,11 @@ ROM_START( windheat ) ROM_END ROM_START( windheatu ) - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "677ubc01.20u", 0x000003, 0x080000, CRC(63198721) SHA1(7f34131bf51d573d0c683b28df2567a0b911c98c) ) /* Program version UBC, v2.22 (USA) */ - ROM_LOAD32_BYTE( "677ubc02.17u", 0x000002, 0x080000, CRC(bdb00e2d) SHA1(c54b2250047576e12e9936300989e40494b4659d) ) - ROM_LOAD32_BYTE( "677ubc03.15u", 0x000001, 0x080000, CRC(0f7d8c1f) SHA1(63de03c7be794b6dae8d0af69e894ac573dbbc11) ) - ROM_LOAD32_BYTE( "677ubc04.13u", 0x000000, 0x080000, CRC(4e42791c) SHA1(a53c6374c6b46db578be4ced2ee7c2af7062d961) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "677ubc01.20u", 0x000000, 0x080000, CRC(63198721) SHA1(7f34131bf51d573d0c683b28df2567a0b911c98c) ) /* Program version UBC, v2.22 (USA) */ + ROM_LOAD32_BYTE( "677ubc02.17u", 0x000001, 0x080000, CRC(bdb00e2d) SHA1(c54b2250047576e12e9936300989e40494b4659d) ) + ROM_LOAD32_BYTE( "677ubc03.15u", 0x000002, 0x080000, CRC(0f7d8c1f) SHA1(63de03c7be794b6dae8d0af69e894ac573dbbc11) ) + ROM_LOAD32_BYTE( "677ubc04.13u", 0x000003, 0x080000, CRC(4e42791c) SHA1(a53c6374c6b46db578be4ced2ee7c2af7062d961) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "677a07.19l", 0x000000, 0x020000, CRC(05b14f2d) SHA1(3753f71173594ee741980e08eed0f7c3fc3588c9) ) @@ -1013,11 +1013,11 @@ ROM_START( windheatu ) ROM_END ROM_START( windheatj ) - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "677jaa01.20u", 0x000003, 0x080000, CRC(559b8def) SHA1(6f2e8f29b0d9a950e71015270560813adc20b689) ) /* Program version JAA, v2.11 (JPN) */ - ROM_LOAD32_BYTE( "677jaa02.17u", 0x000002, 0x080000, CRC(cc230575) SHA1(be2da67600ab5edad2e8b7711c4cf985befe28bf) ) - ROM_LOAD32_BYTE( "677jaa03.15u", 0x000001, 0x080000, CRC(20b04701) SHA1(463be36c7f65b4aa3c3f2b1f37d1e6c1f5106cbb) ) - ROM_LOAD32_BYTE( "677jaa04.13u", 0x000000, 0x080000, CRC(f563b2a5) SHA1(b55b486b6af926eff4729f402116d45b61c5d25a) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "677jaa01.20u", 0x000000, 0x080000, CRC(559b8def) SHA1(6f2e8f29b0d9a950e71015270560813adc20b689) ) /* Program version JAA, v2.11 (JPN) */ + ROM_LOAD32_BYTE( "677jaa02.17u", 0x000001, 0x080000, CRC(cc230575) SHA1(be2da67600ab5edad2e8b7711c4cf985befe28bf) ) + ROM_LOAD32_BYTE( "677jaa03.15u", 0x000002, 0x080000, CRC(20b04701) SHA1(463be36c7f65b4aa3c3f2b1f37d1e6c1f5106cbb) ) + ROM_LOAD32_BYTE( "677jaa04.13u", 0x000003, 0x080000, CRC(f563b2a5) SHA1(b55b486b6af926eff4729f402116d45b61c5d25a) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "677a07.19l", 0x000000, 0x020000, CRC(05b14f2d) SHA1(3753f71173594ee741980e08eed0f7c3fc3588c9) ) @@ -1039,11 +1039,11 @@ ROM_START( windheatj ) ROM_END ROM_START( windheata ) - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "677aaa01.20u", 0x000003, 0x080000, CRC(0d88d0e2) SHA1(93da258bfdb2baa1796916ea8350fff521d43373) ) /* Program version AAA, 2.11 (ASA) */ - ROM_LOAD32_BYTE( "677aaa02.17u", 0x000002, 0x080000, CRC(f71044a3) SHA1(a88990d4a65b610f695f4a6ff42868d04f6ba1b3) ) - ROM_LOAD32_BYTE( "677aaa03.15u", 0x000001, 0x080000, CRC(3c897588) SHA1(718b0eb57f23a3117d2ad3c58e53196f72fc61bf) ) - ROM_LOAD32_BYTE( "677aaa04.13u", 0x000000, 0x080000, CRC(aee84b7d) SHA1(b69a44e51e21f28bcd5cd87297066fc7ba7b5043) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "677aaa01.20u", 0x000000, 0x080000, CRC(0d88d0e2) SHA1(93da258bfdb2baa1796916ea8350fff521d43373) ) /* Program version AAA, 2.11 (ASA) */ + ROM_LOAD32_BYTE( "677aaa02.17u", 0x000001, 0x080000, CRC(f71044a3) SHA1(a88990d4a65b610f695f4a6ff42868d04f6ba1b3) ) + ROM_LOAD32_BYTE( "677aaa03.15u", 0x000002, 0x080000, CRC(3c897588) SHA1(718b0eb57f23a3117d2ad3c58e53196f72fc61bf) ) + ROM_LOAD32_BYTE( "677aaa04.13u", 0x000003, 0x080000, CRC(aee84b7d) SHA1(b69a44e51e21f28bcd5cd87297066fc7ba7b5043) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "677a07.19l", 0x000000, 0x020000, CRC(05b14f2d) SHA1(3753f71173594ee741980e08eed0f7c3fc3588c9) ) @@ -1065,11 +1065,11 @@ ROM_START( windheata ) ROM_END ROM_START( jetwave ) - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "678eab01.20u", 0x000003, 0x080000, CRC(bc657198) SHA1(e521bb2c1b1a3ae934c98ce1656d35821fc287c9) ) /* Program version EAB, EUR v1.04 */ - ROM_LOAD32_BYTE( "678eab02.17u", 0x000002, 0x080000, CRC(a9a57090) SHA1(ae0273b00c64687f8f835aba531580654edd1097) ) - ROM_LOAD32_BYTE( "678eab03.15u", 0x000001, 0x080000, CRC(483aaff0) SHA1(86e011337532f6ff0174393758784b276143ba10) ) - ROM_LOAD32_BYTE( "678eab04.13u", 0x000000, 0x080000, CRC(c7580d72) SHA1(6a5652365a85917ac48b0f1ced70b9c311e89a4f) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "678eab01.20u", 0x000000, 0x080000, CRC(bc657198) SHA1(e521bb2c1b1a3ae934c98ce1656d35821fc287c9) ) /* Program version EAB, EUR v1.04 */ + ROM_LOAD32_BYTE( "678eab02.17u", 0x000001, 0x080000, CRC(a9a57090) SHA1(ae0273b00c64687f8f835aba531580654edd1097) ) + ROM_LOAD32_BYTE( "678eab03.15u", 0x000002, 0x080000, CRC(483aaff0) SHA1(86e011337532f6ff0174393758784b276143ba10) ) + ROM_LOAD32_BYTE( "678eab04.13u", 0x000003, 0x080000, CRC(c7580d72) SHA1(6a5652365a85917ac48b0f1ced70b9c311e89a4f) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "678a07.19l", 0x000000, 0x020000, CRC(bb3f5875) SHA1(97f80d9b55d4177217b7cd1ba14e8ed2d64376bb) ) @@ -1091,11 +1091,11 @@ ROM_START( jetwave ) ROM_END ROM_START( waveshrk ) - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "678uab01.20u", 0x000003, 0x080000, CRC(a9b9ceed) SHA1(36f0d18481d7c3e7358e02473e54bc6b52d5c26b) ) /* Program version UAB, USA v1.04 */ - ROM_LOAD32_BYTE( "678uab02.17u", 0x000002, 0x080000, CRC(5ed24ac8) SHA1(d659c751558d4f8d89314466a37c04ac2df46879) ) - ROM_LOAD32_BYTE( "678uab03.15u", 0x000001, 0x080000, CRC(f4a595e7) SHA1(e05e7ea6613ecf70d8470af5fe0c6a7274c6e45b) ) - ROM_LOAD32_BYTE( "678uab04.13u", 0x000000, 0x080000, CRC(fd3320a7) SHA1(03a50a7bba9eb7cdb9f84953d6fb5c09f2d4b2db) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "678uab01.20u", 0x000000, 0x080000, CRC(a9b9ceed) SHA1(36f0d18481d7c3e7358e02473e54bc6b52d5c26b) ) /* Program version UAB, USA v1.04 */ + ROM_LOAD32_BYTE( "678uab02.17u", 0x000001, 0x080000, CRC(5ed24ac8) SHA1(d659c751558d4f8d89314466a37c04ac2df46879) ) + ROM_LOAD32_BYTE( "678uab03.15u", 0x000002, 0x080000, CRC(f4a595e7) SHA1(e05e7ea6613ecf70d8470af5fe0c6a7274c6e45b) ) + ROM_LOAD32_BYTE( "678uab04.13u", 0x000003, 0x080000, CRC(fd3320a7) SHA1(03a50a7bba9eb7cdb9f84953d6fb5c09f2d4b2db) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "678a07.19l", 0x000000, 0x020000, CRC(bb3f5875) SHA1(97f80d9b55d4177217b7cd1ba14e8ed2d64376bb) ) @@ -1117,11 +1117,11 @@ ROM_START( waveshrk ) ROM_END ROM_START( jetwavej ) - ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ - ROM_LOAD32_BYTE( "678jab01.20u", 0x000003, 0x080000, CRC(fa3da5cc) SHA1(33307e701e6eb28d44e0653ac3f1de47fc17779d) ) /* Program version JAB, JPN v1.04 */ - ROM_LOAD32_BYTE( "678jab02.17u", 0x000002, 0x080000, CRC(01c6713e) SHA1(68e27c018f974e820ba2e99d89a743e53faf1e65) ) - ROM_LOAD32_BYTE( "678jab03.15u", 0x000001, 0x080000, CRC(21c757cb) SHA1(1de6df8e4c52d40882cbf771ff7215ed7b53f251) ) - ROM_LOAD32_BYTE( "678jab04.13u", 0x000000, 0x080000, CRC(fdcc1ecc) SHA1(206cb98a6587cd8e5a9287037d85f392bd2f6e82) ) + ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "678jab01.20u", 0x000000, 0x080000, CRC(fa3da5cc) SHA1(33307e701e6eb28d44e0653ac3f1de47fc17779d) ) /* Program version JAB, JPN v1.04 */ + ROM_LOAD32_BYTE( "678jab02.17u", 0x000001, 0x080000, CRC(01c6713e) SHA1(68e27c018f974e820ba2e99d89a743e53faf1e65) ) + ROM_LOAD32_BYTE( "678jab03.15u", 0x000002, 0x080000, CRC(21c757cb) SHA1(1de6df8e4c52d40882cbf771ff7215ed7b53f251) ) + ROM_LOAD32_BYTE( "678jab04.13u", 0x000003, 0x080000, CRC(fdcc1ecc) SHA1(206cb98a6587cd8e5a9287037d85f392bd2f6e82) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "678a07.19l", 0x000000, 0x020000, CRC(bb3f5875) SHA1(97f80d9b55d4177217b7cd1ba14e8ed2d64376bb) ) diff --git a/src/mame/includes/3do.h b/src/mame/includes/3do.h index 70478ad4a3a..2b1ca6dc337 100644 --- a/src/mame/includes/3do.h +++ b/src/mame/includes/3do.h @@ -20,7 +20,7 @@ public: _3do_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_dram(*this, "dram"), + m_dram(*this, "dram", 0x200000, ENDIANNESS_BIG), m_vram(*this, "vram"), m_nvram(*this, "nvram"), m_screen(*this, "screen"), @@ -160,7 +160,7 @@ private: }; required_device<cpu_device> m_maincpu; - required_shared_ptr<uint32_t> m_dram; + memory_share_creator<uint32_t> m_dram; required_shared_ptr<uint32_t> m_vram; required_device<nvram_device> m_nvram; required_device<screen_device> m_screen; diff --git a/src/mame/includes/abc80.h b/src/mame/includes/abc80.h index cf57826b4df..6ec3a5cd7e2 100644 --- a/src/mame/includes/abc80.h +++ b/src/mame/includes/abc80.h @@ -84,7 +84,7 @@ public: m_vsync_prom(*this, "vsync"), m_line_prom(*this, "line"), m_attr_prom(*this, "attr"), - m_video_ram(*this, "video_ram"), + m_video_ram(*this, "video_ram", 0x400, ENDIANNESS_LITTLE), m_motor(false), m_tape_in(1), m_tape_in_latch(1) @@ -109,7 +109,7 @@ public: required_memory_region m_vsync_prom; required_memory_region m_line_prom; required_memory_region m_attr_prom; - optional_shared_ptr<u8> m_video_ram; + memory_share_creator<uint8_t> m_video_ram; enum { diff --git a/src/mame/includes/abc80x.h b/src/mame/includes/abc80x.h index c73ac3de8c6..afe62b30efd 100644 --- a/src/mame/includes/abc80x.h +++ b/src/mame/includes/abc80x.h @@ -86,8 +86,8 @@ public: m_cassette(*this, CASSETTE_TAG), m_ram(*this, RAM_TAG), m_rom(*this, Z80_TAG), - m_video_ram(*this, "video_ram"), - m_char_ram(*this, "char_ram"), + m_video_ram(*this, "video_ram", 0x4000, ENDIANNESS_LITTLE), + m_char_ram(*this, "char_ram", 0x800, ENDIANNESS_LITTLE), m_io_sb(*this, "SB"), m_ctc_z0(0), m_sio_txcb(0), @@ -106,8 +106,8 @@ public: optional_device<cassette_image_device> m_cassette; required_device<ram_device> m_ram; required_memory_region m_rom; - optional_shared_ptr<uint8_t> m_video_ram; - optional_shared_ptr<uint8_t> m_char_ram; + memory_share_creator<uint8_t> m_video_ram; + memory_share_creator<uint8_t> m_char_ram; required_ioport m_io_sb; virtual void machine_start() override; @@ -276,7 +276,7 @@ public: m_rad_prom(*this, "rad"), m_hru2_prom(*this, "hru"), m_char_rom(*this, MC6845_TAG), - m_attr_ram(*this, "attr_ram") + m_attr_ram(*this, "attr_ram", 0x800, ENDIANNESS_LITTLE) { } required_device<mc6845_device> m_crtc; @@ -285,7 +285,7 @@ public: required_memory_region m_rad_prom; required_memory_region m_hru2_prom; required_memory_region m_char_rom; - optional_shared_ptr<uint8_t> m_attr_ram; + memory_share_creator<uint8_t> m_attr_ram; virtual void machine_start() override; virtual void machine_reset() override; diff --git a/src/mame/includes/armedf.h b/src/mame/includes/armedf.h index f75ba45cbac..af41f5d4b82 100644 --- a/src/mame/includes/armedf.h +++ b/src/mame/includes/armedf.h @@ -25,7 +25,7 @@ public: , m_palette(*this, "palette") , m_spriteram(*this, "spriteram") , m_soundlatch(*this, "soundlatch") - , m_text_videoram(*this, "text_videoram", 0) + , m_text_videoram(*this, "text_videoram") , m_spr_pal_clut(*this, "spr_pal_clut") , m_fg_videoram(*this, "fg_videoram") , m_bg_videoram(*this, "bg_videoram") diff --git a/src/mame/includes/asteroid.h b/src/mame/includes/asteroid.h index 56540eaa55c..bfe0c1e4c22 100644 --- a/src/mame/includes/asteroid.h +++ b/src/mame/includes/asteroid.h @@ -24,7 +24,9 @@ public: m_dsw_sel(*this, "dsw_sel"), m_cocktail(*this, "COCKTAIL"), m_ram1(*this, "ram1"), - m_ram2(*this, "ram2") + m_ram2(*this, "ram2"), + m_sram1(*this, "ram1", 0x100, ENDIANNESS_LITTLE), + m_sram2(*this, "ram2", 0x100, ENDIANNESS_LITTLE) { } /* devices */ @@ -39,6 +41,8 @@ public: /* memory banks */ optional_memory_bank m_ram1; optional_memory_bank m_ram2; + memory_share_creator<u8> m_sram1; + memory_share_creator<u8> m_sram2; DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w); DECLARE_WRITE_LINE_MEMBER(coin_counter_center_w); diff --git a/src/mame/includes/atarigt.h b/src/mame/includes/atarigt.h index 3b37ca4a666..bf6bfb91a80 100644 --- a/src/mame/includes/atarigt.h +++ b/src/mame/includes/atarigt.h @@ -26,7 +26,7 @@ public: atarigt_state(const machine_config &mconfig, device_type type, const char *tag) : atarigen_state(mconfig, type, tag), m_palette(*this, "palette"), - m_colorram(*this, "colorram", 32), + m_colorram(*this, "colorram"), m_adc(*this, "adc"), m_playfield_tilemap(*this, "playfield"), m_alpha_tilemap(*this, "alpha"), diff --git a/src/mame/includes/aussiebyte.h b/src/mame/includes/aussiebyte.h index 856c6f44de1..1e02f5c0971 100644 --- a/src/mame/includes/aussiebyte.h +++ b/src/mame/includes/aussiebyte.h @@ -47,7 +47,14 @@ public: : driver_device(mconfig, type, tag) , m_palette(*this, "palette") , m_maincpu(*this, "maincpu") + , m_bankr0(*this, "bankr0") + , m_bankw0(*this, "bankw0") + , m_bank1(*this, "bank1") + , m_bank2(*this, "bank2") , m_p_chargen(*this, "chargen") + , m_p_mram(*this, "mram", 0x40000, ENDIANNESS_LITTLE) + , m_p_videoram(*this, "vram", 0x10000, ENDIANNESS_LITTLE) + , m_p_attribram(*this, "aram", 0x800, ENDIANNESS_LITTLE) , m_ctc(*this, "ctc") , m_dma(*this, "dma") , m_pio1(*this, "pio1") @@ -125,7 +132,11 @@ private: std::unique_ptr<u8[]> m_ram; // main ram, 256k dynamic required_device<palette_device> m_palette; required_device<z80_device> m_maincpu; + required_memory_bank m_bankr0, m_bankw0, m_bank1, m_bank2; required_region_ptr<u8> m_p_chargen; + memory_share_creator<u8> m_p_mram; + memory_share_creator<u8> m_p_videoram; + memory_share_creator<u8> m_p_attribram; required_device<z80ctc_device> m_ctc; required_device<z80dma_device> m_dma; required_device<z80pio_device> m_pio1; diff --git a/src/mame/includes/beathead.h b/src/mame/includes/beathead.h index 1eaf5d5f7d3..eec461e13b1 100644 --- a/src/mame/includes/beathead.h +++ b/src/mame/includes/beathead.h @@ -30,7 +30,7 @@ public: m_vram_bulk_latch(*this, "vram_bulk_latch"), m_palette_select(*this, "palette_select"), m_ram_base(*this, "ram_base"), - m_rom_base(*this, "rom_base") + m_rom_base(*this, "user1") { } void beathead(machine_config &config); @@ -80,7 +80,7 @@ private: uint8_t m_hsyncram[0x800]; required_shared_ptr<uint32_t> m_ram_base; - required_shared_ptr<uint32_t> m_rom_base; + required_region_ptr<uint32_t> m_rom_base; attotime m_hblank_offset; diff --git a/src/mame/includes/blockout.h b/src/mame/includes/blockout.h index 5e86bc1bd39..6592ac9adbf 100644 --- a/src/mame/includes/blockout.h +++ b/src/mame/includes/blockout.h @@ -17,7 +17,7 @@ class blockout_state : public driver_device public: blockout_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_videoram(*this, "videoram", 16), + m_videoram(*this, "videoram"), m_frontvideoram(*this, "frontvideoram"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), diff --git a/src/mame/includes/btoads.h b/src/mame/includes/btoads.h index f339950136e..d88fa90541c 100644 --- a/src/mame/includes/btoads.h +++ b/src/mame/includes/btoads.h @@ -21,13 +21,13 @@ class btoads_state : public driver_device public: btoads_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_vram_fg0(*this, "vram_fg0", 32), - m_vram_fg1(*this, "vram_fg1", 32), - m_vram_fg_data(*this, "vram_fg_data", 32), - m_vram_bg0(*this, "vram_bg0", 32), - m_vram_bg1(*this, "vram_bg1", 32), - m_sprite_scale(*this, "sprite_scale", 32), - m_sprite_control(*this, "sprite_control", 32), + m_vram_fg0(*this, "vram_fg0"), + m_vram_fg1(*this, "vram_fg1"), + m_vram_fg_data(*this, "vram_fg_data"), + m_vram_bg0(*this, "vram_bg0"), + m_vram_bg1(*this, "vram_bg1"), + m_sprite_scale(*this, "sprite_scale"), + m_sprite_control(*this, "sprite_control"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_bsmt(*this, "bsmt"), diff --git a/src/mame/includes/bw12.h b/src/mame/includes/bw12.h index d12c9253a53..b5c9f7d10eb 100644 --- a/src/mame/includes/bw12.h +++ b/src/mame/includes/bw12.h @@ -60,6 +60,7 @@ public: , m_char_rom(*this, "chargen") , m_video_ram(*this, "video_ram") , m_modifiers(*this, "MODIFIERS") + , m_bank(*this, "bank") { } void bw14(machine_config &config); @@ -118,9 +119,10 @@ protected: required_memory_region m_char_rom; required_shared_ptr<uint8_t> m_video_ram; required_ioport m_modifiers; + required_memory_bank m_bank; /* memory state */ - int m_bank; + int m_curbank; /* PIT state */ int m_pit_out2; diff --git a/src/mame/includes/bzone.h b/src/mame/includes/bzone.h index daba24c6ec1..e414bbbc05f 100644 --- a/src/mame/includes/bzone.h +++ b/src/mame/includes/bzone.h @@ -32,8 +32,8 @@ public: { } DECLARE_READ_LINE_MEMBER(clock_r); - void init_bradley(); void bzone(machine_config &config); + void bradley(machine_config &config); protected: void bzone_coin_counter_w(offs_t offset, uint8_t data); @@ -46,6 +46,7 @@ protected: void bzone_base(machine_config &config); void bzone_audio(machine_config &config); void bzone_map(address_map &map); + void bradley_map(address_map &map); required_device<cpu_device> m_maincpu; required_device<mathbox_device> m_mathbox; diff --git a/src/mame/includes/cninja.h b/src/mame/includes/cninja.h index 707fcf561d2..e2c303f281f 100644 --- a/src/mame/includes/cninja.h +++ b/src/mame/includes/cninja.h @@ -104,6 +104,7 @@ public: void cninjabl2(machine_config &config); void mutantf(machine_config &config); void cninja_map(address_map &map); + void cninjabl2_map(address_map &map); void cninjabl2_oki_map(address_map &map); void cninjabl2_s_map(address_map &map); void cninjabl_map(address_map &map); diff --git a/src/mame/includes/comx35.h b/src/mame/includes/comx35.h index e5dc36ed3ac..1cff50e38bb 100644 --- a/src/mame/includes/comx35.h +++ b/src/mame/includes/comx35.h @@ -38,7 +38,7 @@ public: m_ram(*this, RAM_TAG), m_exp(*this, EXPANSION_TAG), m_rom(*this, CDP1802_TAG), - m_char_ram(*this, "char_ram"), + m_char_ram(*this, "char_ram", COMX35_CHARRAM_SIZE, ENDIANNESS_LITTLE), m_d6(*this, "D6"), m_modifiers(*this, "MODIFIERS") { } @@ -50,7 +50,7 @@ public: required_device<ram_device> m_ram; required_device<comx_expansion_slot_device> m_exp; required_memory_region m_rom; - optional_shared_ptr<uint8_t> m_char_ram; + memory_share_creator<uint8_t> m_char_ram; required_ioport m_d6; required_ioport m_modifiers; diff --git a/src/mame/includes/cps3.h b/src/mame/includes/cps3.h index 3b1977a993a..6b789a56765 100644 --- a/src/mame/includes/cps3.h +++ b/src/mame/includes/cps3.h @@ -38,7 +38,7 @@ public: {*this, "simm7.%u", 0U}} , m_mainram(*this, "mainram") , m_spriteram(*this, "spriteram") - , m_colourram(*this, "colourram", 0) + , m_colourram(*this, "colourram") , m_ppu_gscroll(*this, "ppu_gscroll_regs") , m_tilemap_regs(*this, "ppu_tmap_regs") , m_ppu_crtc_zoom(*this, "ppu_crtc_zoom") diff --git a/src/mame/includes/dec0.h b/src/mame/includes/dec0.h index db134ddfd58..5c88125cfee 100644 --- a/src/mame/includes/dec0.h +++ b/src/mame/includes/dec0.h @@ -158,6 +158,7 @@ private: void dec0_i8751_reset(); void h6280_decrypt(const char *cputag); void dec0_map(address_map &map); + void ffantasybl_map(address_map &map); void dec0_tb_map(address_map &map); void dec0_s_map(address_map &map); void hippodrm_map(address_map &map); diff --git a/src/mame/includes/decocass.h b/src/mame/includes/decocass.h index 41c29721431..9717039d036 100644 --- a/src/mame/includes/decocass.h +++ b/src/mame/includes/decocass.h @@ -50,6 +50,7 @@ public: , m_tileram(*this, "tileram") , m_objectram(*this, "objectram") , m_paletteram(*this, "paletteram") + , m_bank1(*this, "bank1") { } @@ -94,6 +95,7 @@ private: required_shared_ptr<uint8_t> m_tileram; required_shared_ptr<uint8_t> m_objectram; required_shared_ptr<uint8_t> m_paletteram; + optional_memory_bank m_bank1; size_t m_bgvideoram_size; @@ -210,6 +212,7 @@ private: void cdsteljn_mux_w(uint8_t data); TIMER_DEVICE_CALLBACK_MEMBER(decocass_audio_nmi_gen); void decocass_map(address_map &map); + void decocrom_map(address_map &map); void decocass_sound_map(address_map &map); void draw_edge(bitmap_ind16 &bitmap, const rectangle &cliprect, int which, bool opaque); diff --git a/src/mame/includes/dgn_beta.h b/src/mame/includes/dgn_beta.h index 9b906c2f93d..54c74c4a27d 100644 --- a/src/mame/includes/dgn_beta.h +++ b/src/mame/includes/dgn_beta.h @@ -88,7 +88,6 @@ public: dgn_beta_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_mc6845(*this, "crtc"), - m_videoram(*this, "videoram"), m_maincpu(*this, "maincpu"), m_dmacpu(*this, DMACPU_TAG), m_ram(*this, RAM_TAG), @@ -127,7 +126,6 @@ private: DECLARE_FLOPPY_FORMATS(floppy_formats); required_device<mc6845_device> m_mc6845; - required_shared_ptr<uint8_t> m_videoram; required_device<cpu_device> m_maincpu; required_device<cpu_device> m_dmacpu; required_device<ram_device> m_ram; diff --git a/src/mame/includes/dkong.h b/src/mame/includes/dkong.h index d91a7ef830f..cd268aaa02e 100644 --- a/src/mame/includes/dkong.h +++ b/src/mame/includes/dkong.h @@ -134,6 +134,8 @@ public: , m_palette(*this, "palette") , m_z80dma(*this, "z80dma") , m_dma8257(*this, "dma8257") + , m_bank1(*this, "bank1") + , m_bank2(*this, "bank2") { } @@ -255,6 +257,8 @@ private: required_device<palette_device> m_palette; optional_device<z80dma_device> m_z80dma; optional_device<i8257_device> m_dma8257; + memory_bank_creator m_bank1; + memory_bank_creator m_bank2; /* radarscp_scanline */ int m_counter; diff --git a/src/mame/includes/dragon.h b/src/mame/includes/dragon.h index 5036957fa92..277b3198543 100644 --- a/src/mame/includes/dragon.h +++ b/src/mame/includes/dragon.h @@ -115,8 +115,8 @@ public: : dragon64_state(mconfig, type, tag) , m_crtc(*this, "crtc") , m_palette(*this, "palette") - , m_plus_ram(*this, "plus_ram") - , m_video_ram(*this, "video_ram") + , m_plus_ram(*this, "plus_ram", 0x10000, ENDIANNESS_BIG) + , m_video_ram(*this, "video_ram", 0x800, ENDIANNESS_BIG) , m_char_rom(*this, "chargen") { } @@ -133,8 +133,8 @@ protected: private: required_device<hd6845s_device> m_crtc; required_device<palette_device> m_palette; - optional_shared_ptr<uint8_t> m_plus_ram; - optional_shared_ptr<uint8_t> m_video_ram; + memory_share_creator<uint8_t> m_plus_ram; + memory_share_creator<uint8_t> m_video_ram; required_memory_region m_char_rom; }; diff --git a/src/mame/includes/efdt.h b/src/mame/includes/efdt.h index e6c87da496c..083650c11c7 100644 --- a/src/mame/includes/efdt.h +++ b/src/mame/includes/efdt.h @@ -20,7 +20,7 @@ public: m_palette(*this, "palette"), m_audiocpu(*this, "audiocpu"), m_vlatch(*this, "vlatch%u", 1U), - m_videoram(*this, "videoram", 8) + m_videoram(*this, "videoram") { } void efdt(machine_config &config); diff --git a/src/mame/includes/fantland.h b/src/mame/includes/fantland.h index 11f4c72700a..562c836a8d6 100644 --- a/src/mame/includes/fantland.h +++ b/src/mame/includes/fantland.h @@ -21,8 +21,8 @@ public: m_screen(*this, "screen"), m_palette(*this, "palette"), m_soundlatch(*this, "soundlatch"), - m_spriteram(*this, "spriteram", 0), - m_spriteram2(*this, "spriteram2", 0), + m_spriteram(*this, "spriteram"), + m_spriteram2(*this, "spriteram2"), m_wheel(*this, "WHEEL%u", 0U) { } diff --git a/src/mame/includes/fromance.h b/src/mame/includes/fromance.h index 9066d1f60a0..c8b2f4a651e 100644 --- a/src/mame/includes/fromance.h +++ b/src/mame/includes/fromance.h @@ -28,7 +28,8 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_subcpu(*this, "sub"), - m_spriteram(*this, "spriteram"), + m_spriteram(nullptr), + m_spriteram_size(0), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), @@ -50,7 +51,8 @@ public: protected: required_device<cpu_device> m_maincpu; required_device<cpu_device> m_subcpu; - optional_shared_ptr<uint8_t> m_spriteram; + uint8_t *m_spriteram; + u32 m_spriteram_size; required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; diff --git a/src/mame/includes/fuukifg3.h b/src/mame/includes/fuukifg3.h index 08c37caae04..09306837d2d 100644 --- a/src/mame/includes/fuukifg3.h +++ b/src/mame/includes/fuukifg3.h @@ -28,9 +28,9 @@ public: , m_screen(*this, "screen") , m_palette(*this, "palette") , m_fuukivid(*this, "fuukivid") - , m_spriteram(*this, "spriteram", 32U) + , m_spriteram(*this, "spriteram") , m_vram(*this, "vram.%u", 0) - , m_vregs(*this, "vregs", 32U) + , m_vregs(*this, "vregs") , m_priority(*this, "priority") , m_tilebank(*this, "tilebank") , m_shared_ram(*this, "shared_ram") diff --git a/src/mame/includes/gaelco3d.h b/src/mame/includes/gaelco3d.h index 99e76b96539..44e17f06c15 100644 --- a/src/mame/includes/gaelco3d.h +++ b/src/mame/includes/gaelco3d.h @@ -32,7 +32,7 @@ public: gaelco3d_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_adsp_ram_base(*this, "adsp_ram_base") - , m_m68k_ram_base(*this, "m68k_ram_base", 0) + , m_m68k_ram_base(*this, "m68k_ram_base") , m_adsp_control_regs(*this, "adsp_regs") , m_adsp_fastram_base(*this, "adsp_fastram") , m_maincpu(*this, "maincpu") diff --git a/src/mame/includes/galaxian.h b/src/mame/includes/galaxian.h index 931d1e135c3..999c436a774 100644 --- a/src/mame/includes/galaxian.h +++ b/src/mame/includes/galaxian.h @@ -82,6 +82,7 @@ public: , m_videoram(*this, "videoram") , m_decrypted_opcodes(*this, "decrypted_opcodes") , m_lamps(*this, "lamp%u", 0U) + , m_bank1(*this, "bank1") { } /* video extension callbacks */ @@ -438,6 +439,8 @@ protected: optional_shared_ptr<uint8_t> m_decrypted_opcodes; output_finder<2> m_lamps; + memory_bank_creator m_bank1; + int m_bullets_base; int m_sprites_base; int m_numspritegens; diff --git a/src/mame/includes/galivan.h b/src/mame/includes/galivan.h index 978730a879c..24f4ba4ced1 100644 --- a/src/mame/includes/galivan.h +++ b/src/mame/includes/galivan.h @@ -31,6 +31,7 @@ public: , m_gfxdecode(*this, "gfxdecode") , m_palette(*this, "palette") , m_soundlatch(*this, "soundlatch") + , m_rombank(*this, "rombank") { } void galivan(machine_config &config); @@ -97,6 +98,7 @@ private: required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; required_device<generic_latch_8_device> m_soundlatch; + memory_bank_creator m_rombank; void galivan_map(address_map &map); void ninjemak_io_map(address_map &map); diff --git a/src/mame/includes/gamecom.h b/src/mame/includes/gamecom.h index a821da216de..5df264a8fc5 100644 --- a/src/mame/includes/gamecom.h +++ b/src/mame/includes/gamecom.h @@ -224,7 +224,7 @@ public: , m_bank2(*this, "bank2") , m_bank3(*this, "bank3") , m_bank4(*this, "bank4") - , m_region_maincpu(*this, "maincpu") + , m_share_maincpu(*this, "maincpu") , m_region_kernel(*this, "kernel") , m_io_in0(*this, "IN0") , m_io_in1(*this, "IN1") @@ -295,7 +295,7 @@ private: required_memory_bank m_bank2; required_memory_bank m_bank3; required_memory_bank m_bank4; - required_memory_region m_region_maincpu; + required_shared_ptr<u8> m_share_maincpu; required_memory_region m_region_kernel; required_ioport m_io_in0; required_ioport m_io_in1; diff --git a/src/mame/includes/hec2hrp.h b/src/mame/includes/hec2hrp.h index 3d99dac37df..6e33c798a18 100644 --- a/src/mame/includes/hec2hrp.h +++ b/src/mame/includes/hec2hrp.h @@ -58,7 +58,7 @@ public: , m_bank(*this, "bank%u", 0U) , m_rom(*this, "maincpu") , m_ram(*this, RAM_TAG) - , m_hector_vram(*this,"hector_videoram") + , m_hector_vram(*this,"hector_videoram", 0x4000, ENDIANNESS_LITTLE) , m_disc2cpu(*this, "disc2cpu") , m_discrete(*this, "discrete") , m_sn(*this, "sn76477") @@ -157,7 +157,6 @@ private: int m_counter_write; bool m_irq_current_state; bool m_nmi_current_state; - uint8_t m_hector_videoram_hrx[0x4000]; DECLARE_MACHINE_RESET(interact); DECLARE_MACHINE_START(hec2hrp); @@ -198,7 +197,7 @@ private: optional_memory_bank_array<4> m_bank; required_region_ptr<u8> m_rom; optional_device<ram_device> m_ram; - optional_shared_ptr<uint8_t> m_hector_vram; + memory_share_creator<uint8_t> m_hector_vram; optional_device<cpu_device> m_disc2cpu; required_device<discrete_device> m_discrete; required_device<sn76477_device> m_sn; diff --git a/src/mame/includes/hng64.h b/src/mame/includes/hng64.h index d7965ecf30c..c427550a139 100644 --- a/src/mame/includes/hng64.h +++ b/src/mame/includes/hng64.h @@ -172,9 +172,9 @@ public: m_comm(*this, "network"), m_rtc(*this, "rtc"), m_mainram(*this, "mainram"), - m_cart(*this, "cart"), + m_cart(*this, "gameprg"), m_sysregs(*this, "sysregs"), - m_rombase(*this, "rombase"), + m_rombase(*this, "user1"), m_spriteram(*this, "spriteram"), m_spriteregs(*this, "spriteregs"), m_videoram(*this, "videoram"), @@ -232,9 +232,9 @@ private: required_device<msm6242_device> m_rtc; required_shared_ptr<uint32_t> m_mainram; - required_shared_ptr<uint32_t> m_cart; + required_region_ptr<uint32_t> m_cart; required_shared_ptr<uint32_t> m_sysregs; - required_shared_ptr<uint32_t> m_rombase; + required_region_ptr<uint32_t> m_rombase; required_shared_ptr<uint32_t> m_spriteram; required_shared_ptr<uint32_t> m_spriteregs; required_shared_ptr<uint32_t> m_videoram; diff --git a/src/mame/includes/itech32.h b/src/mame/includes/itech32.h index d782ede033e..07fabcfebaa 100644 --- a/src/mame/includes/itech32.h +++ b/src/mame/includes/itech32.h @@ -42,10 +42,9 @@ public: m_timekeeper(*this, "m48t02"), m_soundlatch(*this, "soundlatch"), m_soundlatch2(*this, "soundlatch2"), - m_main_ram(*this, "main_ram", 0), - m_nvram(*this, "nvram", 0), - m_video(*this, "video", 0), - m_main_rom(*this, "main_rom", 0), + m_nvram(*this, "nvram"), + m_video(*this, "video"), + m_main_rom(*this, "maincpu"), m_grom(*this, "gfx1"), m_soundbank(*this, "soundbank") { } @@ -89,10 +88,9 @@ protected: required_device<generic_latch_8_device> m_soundlatch; optional_device<generic_latch_8_device> m_soundlatch2; - optional_shared_ptr<u16> m_main_ram; optional_shared_ptr<u16> m_nvram; optional_shared_ptr<u16> m_video; - optional_shared_ptr<u16> m_main_rom; + optional_region_ptr<u16> m_main_rom; required_region_ptr<u8> m_grom; required_memory_bank m_soundbank; @@ -274,7 +272,7 @@ public: m_dips(*this, "DIPS"), m_gun_x(*this, "GUNX%u", 1U), m_gun_y(*this, "GUNY%u", 1U), - m_nvram_b(*this, "nvram_b", 0), + m_nvram_b(*this, "nvram_b"), m_gun_timer(nullptr) { } diff --git a/src/mame/includes/itech8.h b/src/mame/includes/itech8.h index 6f8cb019366..f156cd05e03 100644 --- a/src/mame/includes/itech8.h +++ b/src/mame/includes/itech8.h @@ -10,6 +10,7 @@ #include "machine/gen_latch.h" #include "machine/ticket.h" #include "machine/timer.h" +#include "machine/nvram.h" #include "video/tlc34076.h" #include "video/tms34061.h" #include "screen.h" @@ -23,6 +24,7 @@ public: m_maincpu(*this, "maincpu"), m_soundcpu(*this, "soundcpu"), m_subcpu(*this, "sub"), + m_nvram(*this, "nvram"), m_soundlatch(*this, "soundlatch"), m_tms34061(*this, "tms34061"), m_tlc34076(*this, "tlc34076"), @@ -80,6 +82,7 @@ protected: required_device<cpu_device> m_maincpu; required_device<cpu_device> m_soundcpu; optional_device<cpu_device> m_subcpu; + required_device<nvram_device> m_nvram; required_device<generic_latch_8_device> m_soundlatch; required_device<tms34061_device> m_tms34061; required_device<tlc34076_device> m_tlc34076; diff --git a/src/mame/includes/jaguar.h b/src/mame/includes/jaguar.h index bb9738dcb5c..f5eed8b8051 100644 --- a/src/mame/includes/jaguar.h +++ b/src/mame/includes/jaguar.h @@ -132,7 +132,7 @@ protected: required_shared_ptr<uint32_t> m_shared_ram; required_shared_ptr<uint32_t> m_gpu_ram; required_shared_ptr<uint32_t> m_gpu_clut; - optional_memory_region m_romboard_region; + optional_memory_region m_romboard_region; optional_shared_ptr<uint32_t> m_mainram; optional_shared_ptr<uint32_t> m_mainram2; diff --git a/src/mame/includes/konamigx.h b/src/mame/includes/konamigx.h index 57db6e9b4e5..9a7f6f7031d 100644 --- a/src/mame/includes/konamigx.h +++ b/src/mame/includes/konamigx.h @@ -45,10 +45,10 @@ public: , m_workram(*this, "workram") , m_psacram(*this, "psacram") , m_subpaletteram32(*this, "subpaletteram") - , m_k053936_0_ctrl(*this, "k053936_0_ctrl", 32) - , m_k053936_0_linectrl(*this, "k053936_0_line", 32) - , m_k053936_0_ctrl_16(*this, "k053936_0_ct16", 16) - , m_k053936_0_linectrl_16(*this, "k053936_0_li16", 16) + , m_k053936_0_ctrl(*this, "k053936_0_ctrl") + , m_k053936_0_linectrl(*this, "k053936_0_line") + , m_k053936_0_ctrl_16(*this, "k053936_0_ct16") + , m_k053936_0_linectrl_16(*this, "k053936_0_li16") , m_generic_paletteram_32(*this, "paletteram") , m_an0(*this, "AN0") , m_an1(*this, "AN1") diff --git a/src/mame/includes/kyocera.h b/src/mame/includes/kyocera.h index 95751af6735..5c03221cbf6 100644 --- a/src/mame/includes/kyocera.h +++ b/src/mame/includes/kyocera.h @@ -62,7 +62,9 @@ public: m_rs232(*this, RS232_TAG), m_rom(*this, I8085_TAG), m_y(*this, "Y%u", 0U), - m_battery(*this, "BATTERY") + m_battery(*this, "BATTERY"), + m_bank1(*this, "bank1"), + m_bank2(*this, "bank2") { } void kc85(machine_config &config); @@ -93,6 +95,8 @@ protected: required_memory_region m_rom; required_ioport_array<9> m_y; required_ioport m_battery; + memory_bank_creator m_bank1; + memory_bank_creator m_bank2; virtual void machine_start() override; memory_region *m_opt_region; @@ -193,7 +197,9 @@ public: m_ram(*this, RAM_TAG), m_rs232(*this, RS232_TAG), m_rom(*this, I8085_TAG), - m_y(*this, "Y%u", 0U) + m_y(*this, "Y%u", 0U), + m_bank1(*this, "bank1"), + m_bank2(*this, "bank2") { } void tandy200(machine_config &config); @@ -214,6 +220,8 @@ private: required_device<rs232_port_device> m_rs232; required_memory_region m_rom; required_ioport_array<9> m_y; + memory_bank_creator m_bank1; + memory_bank_creator m_bank2; memory_region *m_opt_region; diff --git a/src/mame/includes/kyugo.h b/src/mame/includes/kyugo.h index 11aa67a371d..99987c948b3 100644 --- a/src/mame/includes/kyugo.h +++ b/src/mame/includes/kyugo.h @@ -36,8 +36,6 @@ public: void legend(machine_config &config); void gyrodine(machine_config &config); - void init_srdmissn(); - protected: virtual void machine_start() override; virtual void machine_reset() override; @@ -65,6 +63,7 @@ private: void gyrodine_sub_portmap(address_map &map); void kyugo_main_map(address_map &map); void kyugo_main_portmap(address_map &map); + void srdmissn_main_map(address_map &map); void legend_sub_map(address_map &map); void repulse_sub_map(address_map &map); void repulse_sub_portmap(address_map &map); diff --git a/src/mame/includes/leland.h b/src/mame/includes/leland.h index 88fed5f9449..9503725c877 100644 --- a/src/mame/includes/leland.h +++ b/src/mame/includes/leland.h @@ -42,7 +42,7 @@ public: , m_slave_bankslot(*this, "slavebank") , m_slave_base(*this, "slave") , m_eeprom(*this, "eeprom") - , m_battery_ram(*this, "battery") + , m_battery_ram(*this, "battery", 0x3000, ENDIANNESS_LITTLE) , m_palette(*this, "palette") , m_screen(*this, "screen") , m_gfxdecode(*this, "gfxdecode") @@ -94,7 +94,7 @@ protected: required_memory_bank m_slave_bankslot; required_region_ptr<u8> m_slave_base; required_device<eeprom_serial_93cxx_device> m_eeprom; - required_shared_ptr<u8> m_battery_ram; + memory_share_creator<u8> m_battery_ram; required_device<palette_device> m_palette; required_device<screen_device> m_screen; required_device<gfxdecode_device> m_gfxdecode; @@ -138,6 +138,7 @@ protected: struct vram_state_data m_vram_state[2]; void slave_map_program(address_map &map); + void asylum_slave_map_program(address_map &map); TIMER_CALLBACK_MEMBER(leland_delayed_mvram_w); @@ -268,6 +269,7 @@ public: void ataxx(machine_config &config); void wsf(machine_config &config); + void asylum(machine_config &config); private: u8 ataxx_trackball_r(offs_t offset); diff --git a/src/mame/includes/lisa.h b/src/mame/includes/lisa.h index d91a9ee35a0..225f3b1d22c 100644 --- a/src/mame/includes/lisa.h +++ b/src/mame/includes/lisa.h @@ -112,7 +112,6 @@ public: m_nvram(*this, "nvram"), m_latch(*this, "latch"), m_fdc_cpu(*this,"fdccpu"), - m_fdc_rom(*this,"fdc_rom"), m_fdc_ram(*this,"fdc_ram"), m_io_line0(*this, "LINE0"), m_io_line1(*this, "LINE1"), @@ -147,7 +146,6 @@ private: required_device<ls259_device> m_latch; required_device<m6504_device> m_fdc_cpu; - required_shared_ptr<uint8_t> m_fdc_rom; required_shared_ptr<uint8_t> m_fdc_ram; required_ioport m_io_line0; diff --git a/src/mame/includes/m92.h b/src/mame/includes/m92.h index f6301ad4dbf..532b1ff7516 100644 --- a/src/mame/includes/m92.h +++ b/src/mame/includes/m92.h @@ -47,7 +47,7 @@ public: m_screen(*this, "screen"), m_palette(*this, "palette"), m_upd71059c(*this, "upd71059c"), - m_eeprom(*this, "eeprom", 16), + m_eeprom(*this, "eeprom"), m_mainbank(*this, "mainbank") { } diff --git a/src/mame/includes/mac.h b/src/mame/includes/mac.h index e3ae254f9d3..20d7ce44333 100644 --- a/src/mame/includes/mac.h +++ b/src/mame/includes/mac.h @@ -424,7 +424,7 @@ private: DECLARE_WRITE_LINE_MEMBER(mac_via2_irq); void set_scc_waitrequest(int waitrequest); void mac_driver_init(model_t model); - void mac_install_memory(offs_t memory_begin, offs_t memory_end, offs_t memory_size, void *memory_data, int is_rom, const char *bank); + void mac_install_memory(offs_t memory_begin, offs_t memory_end, offs_t memory_size, void *memory_data, int is_rom); offs_t mac_dasm_override(std::ostream &stream, offs_t pc, const util::disasm_interface::data_buffer &opcodes, const util::disasm_interface::data_buffer ¶ms); }; diff --git a/src/mame/includes/mcr.h b/src/mame/includes/mcr.h index 64b0397e968..37b28e3ff5a 100644 --- a/src/mame/includes/mcr.h +++ b/src/mame/includes/mcr.h @@ -93,6 +93,8 @@ public: void mcr_90010(machine_config &config); void cpu_90009_map(address_map &map); void cpu_90009_portmap(address_map &map); + void cpu_90009_dp_map(address_map &map); + void cpu_90009_dp_portmap(address_map &map); void cpu_90010_map(address_map &map); void cpu_90010_portmap(address_map &map); void cpu_91490_map(address_map &map); @@ -147,7 +149,8 @@ public: mcr_state(mconfig, type, tag), m_coin_in_timer(*this, "coinin"), m_hopper_timer(*this, "hopper"), - m_lamps(*this, "lamp%u", 0U) + m_lamps(*this, "lamp%u", 0U), + m_meter_ram(*this, "meter", 0x200, ENDIANNESS_LITTLE) { } uint8_t ip0_r(); @@ -175,6 +178,7 @@ private: required_device<timer_device> m_coin_in_timer; required_device<timer_device> m_hopper_timer; output_finder<14> m_lamps; + memory_share_creator<uint8_t> m_meter_ram; }; class mcr_nflfoot_state : public mcr_state diff --git a/src/mame/includes/megazone.h b/src/mame/includes/megazone.h index 6d9f36a8eb1..7a1059bb45b 100644 --- a/src/mame/includes/megazone.h +++ b/src/mame/includes/megazone.h @@ -26,6 +26,7 @@ public: m_colorram(*this, "colorram"), m_colorram2(*this, "colorram2"), m_spriteram(*this, "spriteram"), + m_share1(*this, "share1"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_daccpu(*this, "daccpu"), @@ -45,6 +46,7 @@ private: required_shared_ptr<uint8_t> m_colorram; required_shared_ptr<uint8_t> m_colorram2; required_shared_ptr<uint8_t> m_spriteram; + required_shared_ptr<uint8_t> m_share1; /* video-related */ std::unique_ptr<bitmap_ind16> m_tmpbitmap; diff --git a/src/mame/includes/midtunit.h b/src/mame/includes/midtunit.h index 167df8a83ff..2151886bcbf 100644 --- a/src/mame/includes/midtunit.h +++ b/src/mame/includes/midtunit.h @@ -92,6 +92,7 @@ private: /* protection */ uint8_t m_mk_prot_index; uint16_t m_mk2_prot_data; + std::unique_ptr<uint8_t[]> m_hidden_ram; const uint32_t *m_nbajam_prot_table; uint16_t m_nbajam_prot_queue[5]; diff --git a/src/mame/includes/midvunit.h b/src/mame/includes/midvunit.h index cd5a22023ab..c966f689c60 100644 --- a/src/mame/includes/midvunit.h +++ b/src/mame/includes/midvunit.h @@ -49,7 +49,7 @@ class midvunit_state : public driver_device public: midvunit_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_videoram(*this, "videoram", 32), + m_videoram(*this, "videoram"), m_textureram(*this, "textureram"), m_screen(*this, "screen"), m_nvram(*this, "nvram"), diff --git a/src/mame/includes/midyunit.h b/src/mame/includes/midyunit.h index 772dd14d777..274be779e9b 100644 --- a/src/mame/includes/midyunit.h +++ b/src/mame/includes/midyunit.h @@ -37,7 +37,7 @@ public: , m_term2_adc(*this, "adc") , m_nvram(*this, "nvram") , m_generic_paletteram_16(*this, "paletteram") - , m_gfx_rom(*this, "gfx_rom", 16) + , m_gfx_rom(*this, "gfx_rom") , m_mainram(*this, "mainram") , m_ports(*this, { { "IN0", "IN1", "IN2", "DSW", "UNK0", "UNK1" } }) { @@ -116,6 +116,7 @@ private: optional_ioport_array<6> m_ports; std::unique_ptr<uint16_t[]> m_cmos_ram; + std::unique_ptr<uint8_t[]> m_hidden_ram; uint32_t m_cmos_page; uint16_t m_prot_result; uint16_t m_prot_sequence[3]; diff --git a/src/mame/includes/model3.h b/src/mame/includes/model3.h index 4559d008227..716134bcbfc 100644 --- a/src/mame/includes/model3.h +++ b/src/mame/includes/model3.h @@ -83,7 +83,8 @@ public: m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_cryptdevice(*this, "315_5881"), - m_billboard(*this, "billboard") + m_billboard(*this, "billboard"), + m_bank2(*this, "bank2") { m_step15_with_mpc106 = false; m_step20_with_old_real3d = false; @@ -163,6 +164,7 @@ private: optional_device<sega_315_5881_crypt_device> m_cryptdevice; required_device<sega_billboard_device> m_billboard; + memory_bank_creator m_bank2; tilemap_t *m_layer4[4]; tilemap_t *m_layer8[4]; diff --git a/src/mame/includes/mpz80.h b/src/mame/includes/mpz80.h index 021077388df..13b116bb3fc 100644 --- a/src/mame/includes/mpz80.h +++ b/src/mame/includes/mpz80.h @@ -22,7 +22,7 @@ public: m_ram(*this, RAM_TAG), m_s100(*this, S100_TAG), m_rom(*this, Z80_TAG), - m_map_ram(*this, "map_ram"), + m_map_ram(*this, "map_ram", 0x200, ENDIANNESS_LITTLE), m_16c(*this, "16C"), m_nmi(1), m_pint(1), @@ -44,7 +44,7 @@ private: required_device<ram_device> m_ram; required_device<s100_bus_device> m_s100; required_memory_region m_rom; - optional_shared_ptr<uint8_t> m_map_ram; + memory_share_creator<uint8_t> m_map_ram; required_ioport m_16c; virtual void machine_start() override; diff --git a/src/mame/includes/ms32.h b/src/mame/includes/ms32.h index aa6a8f1c3d5..096346ec689 100644 --- a/src/mame/includes/ms32.h +++ b/src/mame/includes/ms32.h @@ -29,14 +29,14 @@ public: m_tx_scroll(*this, "tx_scroll"), m_bg_scroll(*this, "bg_scroll"), m_mahjong_input_select(*this, "mahjong_select"), - m_priram(*this, "priram", 32), - m_palram(*this, "palram", 32), - m_rozram(*this, "rozram", 32), - m_lineram(*this, "lineram", 32), - m_sprram(*this, "sprram", 32), - m_txram(*this, "txram", 32), - m_bgram(*this, "bgram", 32), - m_f1superb_extraram(*this, "f1sb_extraram", 32), + m_priram(*this, "priram"), + m_palram(*this, "palram"), + m_rozram(*this, "rozram"), + m_lineram(*this, "lineram"), + m_sprram(*this, "sprram"), + m_txram(*this, "txram"), + m_bgram(*this, "bgram"), + m_f1superb_extraram(*this, "f1sb_extraram"), m_z80bank(*this, "z80bank%u", 1) { } diff --git a/src/mame/includes/mtx.h b/src/mame/includes/mtx.h index ee2170d6270..1509caaaad5 100644 --- a/src/mame/includes/mtx.h +++ b/src/mame/includes/mtx.h @@ -40,6 +40,12 @@ public: , m_exp(*this, "exp") , m_extrom(*this, "extrom") , m_rompak(*this, "rompak") + , m_rammap_bank1(*this, "rammap_bank1") + , m_rammap_bank2(*this, "rammap_bank2") + , m_rammap_bank3(*this, "rammap_bank3") + , m_rommap_bank1(*this, "rommap_bank1") + , m_rommap_bank2(*this, "rommap_bank2") + , m_rommap_bank3(*this, "rommap_bank3") { } void rs128(machine_config &config); @@ -62,6 +68,12 @@ private: required_device<mtx_exp_slot_device> m_exp; required_device<generic_slot_device> m_extrom; required_device<generic_slot_device> m_rompak; + memory_bank_creator m_rammap_bank1; + memory_bank_creator m_rammap_bank2; + memory_bank_creator m_rammap_bank3; + memory_bank_creator m_rommap_bank1; + memory_bank_creator m_rommap_bank2; + memory_bank_creator m_rommap_bank3; /* keyboard state */ uint8_t m_key_sense; diff --git a/src/mame/includes/namcofl.h b/src/mame/includes/namcofl.h index f644e3e0559..a36e0c847e7 100644 --- a/src/mame/includes/namcofl.h +++ b/src/mame/includes/namcofl.h @@ -32,7 +32,7 @@ public: m_brake(*this, "BRAKE"), m_wheel(*this, "WHEEL"), m_workram(*this, "workram"), - m_shareram(*this, "shareram", 32) { } + m_shareram(*this, "shareram") { } void namcofl(machine_config &config); diff --git a/src/mame/includes/naomi.h b/src/mame/includes/naomi.h index 3cd82a5991f..72cb7c56d43 100644 --- a/src/mame/includes/naomi.h +++ b/src/mame/includes/naomi.h @@ -44,7 +44,7 @@ class naomi_state : public dc_state naomi_state(const machine_config &mconfig, device_type type, const char *tag) : dc_state(mconfig, type, tag), m_eeprom(*this, "main_eeprom"), - m_rombase(*this, "rombase"), + m_rombase(*this, "maincpu"), m_mp(*this, "KEY%u", 1U) { } @@ -77,7 +77,7 @@ class naomi_state : public dc_state protected: required_device<eeprom_serial_93cxx_device> m_eeprom; - optional_shared_ptr<uint64_t> m_rombase; + optional_region_ptr<uint64_t> m_rombase; optional_ioport_array<5> m_mp; DECLARE_MACHINE_RESET(naomi); diff --git a/src/mame/includes/nc.h b/src/mame/includes/nc.h index e26c40227ba..07da2424bea 100644 --- a/src/mame/includes/nc.h +++ b/src/mame/includes/nc.h @@ -54,6 +54,8 @@ public: m_uart_clock(*this, "uart_clock"), m_nvram(*this, "nvram"), m_fdc(*this, "upd765"), + m_bankhandler_r(*this, "bank%u", 1U), + m_bankhandler_w(*this, "bank%u", 5U), m_nc_type(variant) { } @@ -109,6 +111,7 @@ protected: // HACK FOR MC6845 required_device<clock_device> m_uart_clock; required_device<nvram_device> m_nvram; optional_device<upd765a_device> m_fdc; + required_memory_bank_array<4> m_bankhandler_r, m_bankhandler_w; char m_memory_config[4]; emu_timer *m_keyboard_timer; diff --git a/src/mame/includes/neogeo.h b/src/mame/includes/neogeo.h index 992087db771..2904259fca3 100644 --- a/src/mame/includes/neogeo.h +++ b/src/mame/includes/neogeo.h @@ -54,6 +54,7 @@ protected: , m_soundlatch(*this, "soundlatch") , m_soundlatch2(*this, "soundlatch2") , m_region_maincpu(*this, "maincpu") + , m_share_maincpu(*this, "maincpu") , m_region_sprites(*this, "sprites") , m_region_fixed(*this, "fixed") , m_region_fixedbios(*this, "fixedbios") @@ -61,6 +62,7 @@ protected: , m_region_audiobios(*this, "audiobios") , m_region_audiocpu(*this, "audiocpu") , m_bank_audio_main(*this, "audio_main") + , m_bank_cartridge(*this, "cartridge") , m_edge(*this, "edge") , m_ctrl1(*this, "ctrl1") , m_ctrl2(*this, "ctrl2") @@ -131,6 +133,7 @@ protected: // memory optional_memory_region m_region_maincpu; + optional_shared_ptr<uint16_t> m_share_maincpu; optional_memory_region m_region_sprites; optional_memory_region m_region_fixed; optional_memory_region m_region_fixedbios; @@ -139,7 +142,7 @@ protected: optional_memory_region m_region_audiocpu; optional_memory_bank m_bank_audio_main; // optional because of neocd memory_bank *m_bank_audio_cart[4]; - memory_bank *m_bank_cartridge; + memory_bank_creator m_bank_cartridge; optional_device<neogeo_ctrl_edge_port_device> m_edge; optional_device<neogeo_control_port_device> m_ctrl1; diff --git a/src/mame/includes/nes.h b/src/mame/includes/nes.h index f2528a231fc..c05a4e5126e 100644 --- a/src/mame/includes/nes.h +++ b/src/mame/includes/nes.h @@ -76,7 +76,8 @@ public: m_screen(*this, "screen"), m_exp(*this, "exp"), m_cartslot(*this, "nes_slot"), - m_disk(*this, "disk") + m_disk(*this, "disk"), + m_prg_bank(*this, "prg%u", 0U) { } @@ -130,6 +131,7 @@ private: optional_device<nes_control_port_device> m_exp; optional_device<nes_cart_slot_device> m_cartslot; optional_device<nes_disksys_device> m_disk; + memory_bank_array_creator<4> m_prg_bank; }; #endif // MAME_INCLUDES_NES_H diff --git a/src/mame/includes/offtwall.h b/src/mame/includes/offtwall.h index 6e317807fc9..488f26957cf 100644 --- a/src/mame/includes/offtwall.h +++ b/src/mame/includes/offtwall.h @@ -25,7 +25,7 @@ public: m_jsa(*this, "jsa"), m_vad(*this, "vad"), m_mainram(*this, "mainram"), - m_bankrom_base(*this, "bankrom_base") + m_bankrom_base(*this, "maincpu") { } void offtwall(machine_config &config); @@ -49,7 +49,7 @@ private: required_shared_ptr<uint16_t> m_mainram; uint16_t *m_bankswitch_base; - required_shared_ptr<uint16_t> m_bankrom_base; + required_region_ptr<uint16_t> m_bankrom_base; uint32_t m_bank_offset; uint16_t *m_spritecache_count; diff --git a/src/mame/includes/ojankohs.h b/src/mame/includes/ojankohs.h index 03d6f287268..086ba486e67 100644 --- a/src/mame/includes/ojankohs.h +++ b/src/mame/includes/ojankohs.h @@ -18,11 +18,11 @@ class ojankohs_state : public driver_device { public: - ojankohs_state(const machine_config &mconfig, device_type type, const char *tag) : + ojankohs_state(const machine_config &mconfig, device_type type, const char *tag, uint32_t vramsize, uint32_t pramsize) : driver_device(mconfig, type, tag), - m_videoram(*this, "videoram"), - m_colorram(*this, "colorram"), - m_paletteram(*this, "paletteram"), + m_videoram(*this, "videoram", vramsize, ENDIANNESS_LITTLE), + m_colorram(*this, "colorram", 0x1000, ENDIANNESS_LITTLE), + m_paletteram(*this, "paletteram", pramsize, ENDIANNESS_LITTLE), m_maincpu(*this, "maincpu"), m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), @@ -37,6 +37,10 @@ public: m_dsw3(*this, "dsw3"), m_dsw4(*this, "dsw4") { } + ojankohs_state(const machine_config &mconfig, device_type type, const char *tag) : + ojankohs_state(mconfig, type, tag, 0x1000, 0x800) + { } + void ojankohs(machine_config &config); void ccasino(machine_config &config); void ojankoc(machine_config &config); @@ -47,9 +51,9 @@ protected: private: /* memory pointers */ - optional_shared_ptr<uint8_t> m_videoram; - optional_shared_ptr<uint8_t> m_colorram; - optional_shared_ptr<uint8_t> m_paletteram; + memory_share_creator<uint8_t> m_videoram; + memory_share_creator<uint8_t> m_colorram; + memory_share_creator<uint8_t> m_paletteram; /* video-related */ tilemap_t *m_tilemap; @@ -132,4 +136,28 @@ private: void ojankoy_map(address_map &map); }; +class ojankoy_state : public ojankohs_state +{ +public: + ojankoy_state(const machine_config &mconfig, device_type type, const char *tag) : + ojankohs_state(mconfig, type, tag, 0x2000, 0x800) + { } +}; + +class ccasino_state : public ojankohs_state +{ +public: + ccasino_state(const machine_config &mconfig, device_type type, const char *tag) : + ojankohs_state(mconfig, type, tag, 0x2000, 0x800) + { } +}; + +class ojankoc_state : public ojankohs_state +{ +public: + ojankoc_state(const machine_config &mconfig, device_type type, const char *tag) : + ojankohs_state(mconfig, type, tag, 0x8000, 0x20) + { } +}; + #endif // MAME_INCLUDES_OJANKOHS_H diff --git a/src/mame/includes/pacman.h b/src/mame/includes/pacman.h index 93990e0f8dc..1bfadbe4c06 100644 --- a/src/mame/includes/pacman.h +++ b/src/mame/includes/pacman.h @@ -44,6 +44,7 @@ protected: void bigbucks_map(address_map &map); void bigbucks_portmap(address_map &map); void birdiy_map(address_map &map); + void cannonbp_map(address_map &map); void crushs_map(address_map &map); void crushs_portmap(address_map &map); void dremshpr_map(address_map &map); @@ -164,7 +165,6 @@ public: void init_ponpoko(); void init_eyes(); void init_woodpek(); - void init_cannonbp(); void init_jumpshot(); void init_mspacii(); void init_pacplus(); @@ -208,6 +208,7 @@ private: public: void birdiy(machine_config &config); + void cannonbp(machine_config &config); void rocktrv2(machine_config &config); void mspacman(machine_config &config); void dremshpr(machine_config &config); diff --git a/src/mame/includes/pc8401a.h b/src/mame/includes/pc8401a.h index 738ad4749c9..33f360154fa 100644 --- a/src/mame/includes/pc8401a.h +++ b/src/mame/includes/pc8401a.h @@ -49,7 +49,7 @@ public: , m_io_cart(*this, "io_cart") , m_ram(*this, RAM_TAG) , m_rom(*this, Z80_TAG) - , m_crt_ram(*this, "crt_ram") + , m_crt_ram(*this, "crt_ram", PC8401A_CRT_VIDEORAM_SIZE, ENDIANNESS_LITTLE) , m_io_y(*this, "Y.%u", 0) { } @@ -62,7 +62,7 @@ public: required_device<generic_slot_device> m_io_cart; required_device<ram_device> m_ram; required_memory_region m_rom; - optional_shared_ptr<uint8_t> m_crt_ram; + memory_share_creator<uint8_t> m_crt_ram; required_ioport_array<10> m_io_y; memory_region *m_cart_rom; diff --git a/src/mame/includes/pingpong.h b/src/mame/includes/pingpong.h index 9d281856b39..032c4f9d2aa 100644 --- a/src/mame/includes/pingpong.h +++ b/src/mame/includes/pingpong.h @@ -19,7 +19,8 @@ public: m_videoram(*this, "videoram"), m_spriteram(*this, "spriteram"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") + m_palette(*this, "palette"), + m_banks(*this, "bank%d", 1U) { } int m_intenable; @@ -30,6 +31,7 @@ public: required_shared_ptr<uint8_t> m_spriteram; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + optional_memory_bank_array<8> m_banks; tilemap_t *m_bg_tilemap; void cashquiz_question_bank_high_w(uint8_t data); @@ -48,8 +50,10 @@ public: void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect ); void merlinmm(machine_config &config); void pingpong(machine_config &config); + void cashquiz(machine_config &config); void merlinmm_map(address_map &map); void pingpong_map(address_map &map); + void cashquiz_map(address_map &map); }; #endif // MAME_INCLUDES_PINGPONG_H diff --git a/src/mame/includes/playch10.h b/src/mame/includes/playch10.h index b3f96abdad4..a68e530d962 100644 --- a/src/mame/includes/playch10.h +++ b/src/mame/includes/playch10.h @@ -30,8 +30,18 @@ public: } void playch10(machine_config &config); - void playchnv(machine_config &config); - void playch10_hboard(machine_config &config); + void playch10_a(machine_config &config); + void playch10_b(machine_config &config); + void playch10_c(machine_config &config); + void playch10_d(machine_config &config); + void playch10_d2(machine_config &config); + void playch10_e(machine_config &config); + void playch10_f(machine_config &config); + void playch10_f2(machine_config &config); + void playch10_g(machine_config &config); + void playch10_h(machine_config &config); + void playch10_i(machine_config &config); + void playch10_k(machine_config &config); void init_playch10(); void init_pc_gun(); @@ -93,6 +103,18 @@ private: void bios_io_map(address_map &map); void bios_map(address_map &map); void cart_map(address_map &map); + void cart_a_map(address_map &map); + void cart_b_map(address_map &map); + void cart_c_map(address_map &map); + void cart_d_map(address_map &map); + void cart_d2_map(address_map &map); + void cart_e_map(address_map &map); + void cart_f_map(address_map &map); + void cart_f2_map(address_map &map); + void cart_g_map(address_map &map); + void cart_h_map(address_map &map); + void cart_i_map(address_map &map); + void cart_k_map(address_map &map); virtual void machine_start() override; virtual void machine_reset() override; @@ -153,6 +175,7 @@ private: std::unique_ptr<uint8_t[]> m_vram; uint8_t* m_nametable[4]; std::unique_ptr<uint8_t[]> m_nt_ram; + std::unique_ptr<uint8_t[]> m_extra_ram; chr_bank m_chr_page[8]; int m_mmc1_shiftreg; int m_mmc1_shiftcount; diff --git a/src/mame/includes/popeye.h b/src/mame/includes/popeye.h index 8621a0ccf9c..9bafc301776 100644 --- a/src/mame/includes/popeye.h +++ b/src/mame/includes/popeye.h @@ -101,6 +101,7 @@ protected: void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_field(bitmap_ind16 &bitmap, const rectangle &cliprect); + void maincpu_common_map(address_map &map); virtual void maincpu_program_map(address_map &map); void maincpu_io_map(address_map &map); diff --git a/src/mame/includes/psikyo.h b/src/mame/includes/psikyo.h index 37c26454da2..45f72a6b9f3 100644 --- a/src/mame/includes/psikyo.h +++ b/src/mame/includes/psikyo.h @@ -24,7 +24,7 @@ class psikyo_state : public driver_device public: psikyo_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) - , m_vram(*this, "vram_%u", 0U, (u8)32) + , m_vram(*this, "vram_%u", 0U) , m_vregs(*this, "vregs") , m_bootleg_spritebuffer(*this, "boot_spritebuf") , m_spritelut(*this, "spritelut") diff --git a/src/mame/includes/qix.h b/src/mame/includes/qix.h index cc4e9bbba41..fcdf40f23b4 100644 --- a/src/mame/includes/qix.h +++ b/src/mame/includes/qix.h @@ -49,7 +49,7 @@ public: m_sn2(*this, "sn2"), m_discrete(*this, "discrete"), m_paletteram(*this, "paletteram"), - m_videoram(*this, "videoram"), + m_videoram(*this, "videoram", 0x10000, ENDIANNESS_BIG), m_videoram_address(*this, "videoram_addr"), m_videoram_mask(*this, "videoram_mask"), m_scanline_latch(*this, "scanline_latch"), @@ -90,7 +90,7 @@ protected: /* video state */ required_shared_ptr<uint8_t> m_paletteram; - optional_shared_ptr<uint8_t> m_videoram; + memory_share_creator<uint8_t> m_videoram; required_shared_ptr<uint8_t> m_videoram_address; optional_shared_ptr<uint8_t> m_videoram_mask; required_shared_ptr<uint8_t> m_scanline_latch; diff --git a/src/mame/includes/saturn.h b/src/mame/includes/saturn.h index 608c334ddb5..a1445658ebe 100644 --- a/src/mame/includes/saturn.h +++ b/src/mame/includes/saturn.h @@ -31,7 +31,7 @@ class saturn_state : public driver_device public: saturn_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_rom(*this, "bios", 0x20000), + m_rom(*this, "bios"), m_workram_l(*this, "workram_l"), m_workram_h(*this, "workram_h"), m_sound_ram(*this, "sound_ram"), diff --git a/src/mame/includes/scramble.h b/src/mame/includes/scramble.h index 76a8b89df98..e61956ff941 100644 --- a/src/mame/includes/scramble.h +++ b/src/mame/includes/scramble.h @@ -25,7 +25,8 @@ public: m_soundram(*this, "soundram"), m_digitalker(*this, "digitalker"), m_soundlatch(*this, "soundlatch"), - m_dial(*this, "DIAL") + m_dial(*this, "DIAL"), + m_cavelon_bank_object(*this, "cavelon_bank") { } @@ -39,6 +40,8 @@ public: optional_ioport m_dial; + memory_bank_creator m_cavelon_bank_object; + DECLARE_CUSTOM_INPUT_MEMBER(darkplnt_dial_r); template <int Mask> DECLARE_READ_LINE_MEMBER(ckongs_coinage_r); uint8_t hncholms_prot_r(); diff --git a/src/mame/includes/seta2.h b/src/mame/includes/seta2.h index b3276e93e25..d35accb8085 100644 --- a/src/mame/includes/seta2.h +++ b/src/mame/includes/seta2.h @@ -35,9 +35,9 @@ public: m_x1_bank(*this, "x1_bank_%u", 1U), m_nvram(*this, "nvram"), - m_spriteram(*this, "spriteram", 0), - m_tileram(*this, "tileram", 0), - m_vregs(*this, "vregs", 0), + m_spriteram(*this, "spriteram"), + m_tileram(*this, "tileram"), + m_vregs(*this, "vregs"), m_leds(*this, "led%u", 0U), m_lamps(*this, "lamp%u", 0U) { } @@ -217,7 +217,7 @@ public: staraudi_state(const machine_config &mconfig, device_type type, const char *tag) : seta2_state(mconfig, type, tag), m_rtc(*this, "rtc"), - m_rgbram(*this, "rgbram", 0) + m_rgbram(*this, "rgbram") { } static constexpr feature_type unemulated_features() { return feature::CAMERA | feature::PRINTER; } diff --git a/src/mame/includes/sorcerer.h b/src/mame/includes/sorcerer.h index fb5db5b59b0..e9aa3fb23f4 100644 --- a/src/mame/includes/sorcerer.h +++ b/src/mame/includes/sorcerer.h @@ -60,6 +60,8 @@ public: , m_centronics(*this, "centronics") , m_cart(*this, "cartslot") , m_ram(*this, RAM_TAG) + , m_vram(*this, "vram") + , m_cram(*this, "cram") , m_dma(*this, "dma") , m_fdc3(*this, "fdc3") , m_fdc4(*this, "fdc4") @@ -125,6 +127,8 @@ protected: required_device<centronics_device> m_centronics; optional_device<generic_slot_device> m_cart; required_device<ram_device> m_ram; + required_shared_ptr<u8> m_vram; + required_shared_ptr<u8> m_cram; optional_device<z80dma_device> m_dma; optional_device<fd1793_device> m_fdc3; optional_device<wd2793_device> m_fdc4; diff --git a/src/mame/includes/suna8.h b/src/mame/includes/suna8.h index 9d6a75a57e9..6371dc8c6f7 100644 --- a/src/mame/includes/suna8.h +++ b/src/mame/includes/suna8.h @@ -21,9 +21,10 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this,"maincpu"), m_hardhead_ip(*this, "hardhead_ip"), + m_banked_spriteram(*this, "banked_spriteram", 0x8000, ENDIANNESS_LITTLE), m_spriteram(*this, "spriteram"), m_wram(*this, "wram"), - m_banked_paletteram(*this, "paletteram"), + m_banked_paletteram(*this, "paletteram", 0x400, ENDIANNESS_LITTLE), m_audiocpu(*this, "audiocpu"), m_samples(*this, "samples"), m_gfxdecode(*this, "gfxdecode"), @@ -171,9 +172,10 @@ private: required_device<cpu_device> m_maincpu; optional_shared_ptr<uint8_t> m_hardhead_ip; + memory_share_creator<uint8_t> m_banked_spriteram; optional_shared_ptr<uint8_t> m_spriteram; optional_shared_ptr<uint8_t> m_wram; - optional_shared_ptr<uint8_t> m_banked_paletteram; + memory_share_creator<uint8_t> m_banked_paletteram; required_device<cpu_device> m_audiocpu; optional_device<samples_device> m_samples; required_device<gfxdecode_device> m_gfxdecode; diff --git a/src/mame/includes/taito_f3.h b/src/mame/includes/taito_f3.h index 5d9624fd2f8..9e127281b9c 100644 --- a/src/mame/includes/taito_f3.h +++ b/src/mame/includes/taito_f3.h @@ -68,12 +68,12 @@ public: m_screen(*this, "screen"), m_palette(*this, "palette"), m_eeprom(*this, "eeprom"), - m_textram(*this, "textram", 0), - m_spriteram(*this, "spriteram", 0), - m_charram(*this, "charram", 0), - m_line_ram(*this, "line_ram", 0), - m_pf_ram(*this, "pf_ram", 0), - m_pivot_ram(*this, "pivot_ram", 0), + m_textram(*this, "textram"), + m_spriteram(*this, "spriteram"), + m_charram(*this, "charram"), + m_line_ram(*this, "line_ram"), + m_pf_ram(*this, "pf_ram"), + m_pivot_ram(*this, "pivot_ram"), m_input(*this, "IN.%u", 0), m_dial(*this, "DIAL.%u", 0), m_eepromin(*this, "EEPROMIN"), diff --git a/src/mame/includes/tandy2k.h b/src/mame/includes/tandy2k.h index f1aca034a7d..c2dab934673 100644 --- a/src/mame/includes/tandy2k.h +++ b/src/mame/includes/tandy2k.h @@ -70,7 +70,7 @@ public: m_rs232(*this, RS232_TAG), m_kb(*this, TANDY2K_KEYBOARD_TAG), m_hires_ram(*this, "hires_ram"), - m_char_ram(*this, "char_ram"), + m_char_ram(*this, "char_ram", 0x1000, ENDIANNESS_LITTLE), m_pc_keyboard(*this, "pc_keyboard"), m_dma_mux(0), m_kbdclk(0), @@ -138,7 +138,7 @@ private: required_device<rs232_port_device> m_rs232; required_device<tandy2k_keyboard_device> m_kb; required_shared_ptr<uint16_t> m_hires_ram; - optional_shared_ptr<uint8_t> m_char_ram; + memory_share_creator<uint8_t> m_char_ram; required_device<pc_keyboard_device> m_pc_keyboard; // temporary until the tandy keyboard has a rom dump virtual void machine_start() override; diff --git a/src/mame/includes/taotaido.h b/src/mame/includes/taotaido.h index d72920236d8..0eb5d97923b 100644 --- a/src/mame/includes/taotaido.h +++ b/src/mame/includes/taotaido.h @@ -26,7 +26,7 @@ public: m_scrollram(*this, "scrollram"), m_bgram(*this, "bgram"), m_soundbank(*this, "soundbank"), - m_spritebank(*this, "spritebank", 0) + m_spritebank(*this, "spritebank") { } void taotaido(machine_config &config); diff --git a/src/mame/includes/tiki100.h b/src/mame/includes/tiki100.h index f9fe9555224..35d03cef763 100644 --- a/src/mame/includes/tiki100.h +++ b/src/mame/includes/tiki100.h @@ -61,7 +61,7 @@ public: m_exp(*this, "tiki100bus"), m_rom(*this, Z80_TAG), m_prom(*this, "u4"), - m_video_ram(*this, "video_ram"), + m_video_ram(*this, "video_ram", TIKI100_VIDEORAM_SIZE, ENDIANNESS_LITTLE), m_y(*this, "Y%u", 1), m_st_io(*this, "ST"), m_palette(*this, "palette"), @@ -125,7 +125,7 @@ private: required_device<tiki100_bus_device> m_exp; required_memory_region m_rom; required_memory_region m_prom; - optional_shared_ptr<uint8_t> m_video_ram; + memory_share_creator<uint8_t> m_video_ram; required_ioport_array<13> m_y; required_ioport m_st_io; required_device<palette_device> m_palette; diff --git a/src/mame/includes/tmc1800.h b/src/mame/includes/tmc1800.h index e8f6bb53e0a..ce026df557e 100644 --- a/src/mame/includes/tmc1800.h +++ b/src/mame/includes/tmc1800.h @@ -119,7 +119,7 @@ public: tmc2000_state(const machine_config &mconfig, device_type type, const char *tag) : tmc1800_base_state(mconfig, type, tag) , m_cti(*this, CDP1864_TAG) - , m_colorram(*this, "color_ram") + , m_colorram(*this, "color_ram", TMC2000_COLORRAM_SIZE, ENDIANNESS_LITTLE) , m_key_row(*this, {"Y0", "Y1", "Y2", "Y3", "Y4", "Y5", "Y6", "Y7"}) , m_led(*this, "led1") { } @@ -148,7 +148,7 @@ protected: virtual void machine_reset() override; required_device<cdp1864_device> m_cti; - optional_shared_ptr<uint8_t> m_colorram; + memory_share_creator<uint8_t> m_colorram; required_ioport_array<8> m_key_row; output_finder<> m_led; diff --git a/src/mame/includes/tmc600.h b/src/mame/includes/tmc600.h index 53641a92fc2..e1c6b79a68a 100644 --- a/src/mame/includes/tmc600.h +++ b/src/mame/includes/tmc600.h @@ -41,7 +41,7 @@ public: m_ram(*this, RAM_TAG), m_char_rom(*this, "chargen"), m_page_ram(*this, "page_ram"), - m_color_ram(*this, "color_ram"), + m_color_ram(*this, "color_ram", TMC600_PAGE_RAM_SIZE, ENDIANNESS_LITTLE), m_run(*this, "RUN"), m_key_row(*this, "Y%u", 0) { } @@ -59,7 +59,7 @@ private: required_device<ram_device> m_ram; required_region_ptr<uint8_t> m_char_rom; required_shared_ptr<uint8_t> m_page_ram; - optional_shared_ptr<uint8_t> m_color_ram; + memory_share_creator<uint8_t> m_color_ram; required_ioport m_run; required_ioport_array<8> m_key_row; diff --git a/src/mame/includes/toaplan1.h b/src/mame/includes/toaplan1.h index 1fd19c1e5ef..a406e6cd0a3 100644 --- a/src/mame/includes/toaplan1.h +++ b/src/mame/includes/toaplan1.h @@ -27,7 +27,7 @@ public: m_sharedram(*this, "sharedram"), m_dswb_io(*this, "DSWB"), m_tjump_io(*this, "TJUMP"), - m_spriteram(*this, "spriteram"), + m_spriteram(*this, "spriteram", 0x800, ENDIANNESS_BIG), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_ymsnd(*this, "ymsnd"), @@ -66,7 +66,7 @@ protected: std::unique_ptr<u16[]> m_tilevram[0]; // \/ */ - optional_shared_ptr<u16> m_spriteram; + memory_share_creator<u16> m_spriteram; std::unique_ptr<u16[]> m_buffered_spriteram; std::unique_ptr<u16[]> m_spritesizeram; std::unique_ptr<u16[]> m_buffered_spritesizeram; diff --git a/src/mame/includes/trs80m2.h b/src/mame/includes/trs80m2.h index f8ad4daf51a..e54443e1b89 100644 --- a/src/mame/includes/trs80m2.h +++ b/src/mame/includes/trs80m2.h @@ -58,7 +58,7 @@ public: m_kb(*this, TRS80M2_KEYBOARD_TAG), m_rom(*this, Z80_TAG), m_char_rom(*this, MC6845_TAG), - m_video_ram(*this, "video_ram") + m_video_ram(*this, "video_ram", 0x800, ENDIANNESS_LITTLE) { } @@ -120,7 +120,7 @@ protected: required_device<trs80m2_keyboard_device> m_kb; required_memory_region m_rom; required_memory_region m_char_rom; - optional_shared_ptr<uint8_t> m_video_ram; + memory_share_creator<uint8_t> m_video_ram; // memory state int m_boot_rom; diff --git a/src/mame/includes/twin16.h b/src/mame/includes/twin16.h index 349bceaf284..4078d1cf2cb 100644 --- a/src/mame/includes/twin16.h +++ b/src/mame/includes/twin16.h @@ -148,6 +148,7 @@ public: private: void nvram_bank_w(uint8_t data); + void cuebrickj_main_map(address_map &map); uint16_t m_nvram[0x400 * 0x20 / 2]; }; diff --git a/src/mame/includes/unico.h b/src/mame/includes/unico.h index bb78d4d7a31..edf108480a9 100644 --- a/src/mame/includes/unico.h +++ b/src/mame/includes/unico.h @@ -21,9 +21,9 @@ public: m_gfxdecode(*this, "gfxdecode"), m_oki(*this, "oki"), m_leds(*this, "led%u", 0U), - m_vram(*this, "vram", 0), - m_scroll(*this, "scroll", 0), - m_spriteram(*this, "spriteram", 0) + m_vram(*this, "vram"), + m_scroll(*this, "scroll"), + m_spriteram(*this, "spriteram") { } void burglarx(machine_config &config); diff --git a/src/mame/includes/v1050.h b/src/mame/includes/v1050.h index 62169002c05..19b16368c74 100644 --- a/src/mame/includes/v1050.h +++ b/src/mame/includes/v1050.h @@ -91,7 +91,7 @@ public: m_sasi_ctrl_in(*this, "scsi_ctrl_in"), m_rom(*this, Z80_TAG), m_video_ram(*this, "video_ram"), - m_attr_ram(*this, "attr_ram"), + m_attr_ram(*this, "attr_ram", V1050_VIDEORAM_SIZE, ENDIANNESS_LITTLE), m_int_mask(0), m_int_state(0), m_fdc_irq(0), @@ -199,7 +199,7 @@ private: required_device<input_buffer_device> m_sasi_ctrl_in; required_memory_region m_rom; required_shared_ptr<uint8_t> m_video_ram; - optional_shared_ptr<uint8_t> m_attr_ram; + memory_share_creator<uint8_t> m_attr_ram; // interrupt state uint8_t m_int_mask; // interrupt mask diff --git a/src/mame/includes/vsnes.h b/src/mame/includes/vsnes.h index 4aed6841d06..ad323775ade 100644 --- a/src/mame/includes/vsnes.h +++ b/src/mame/includes/vsnes.h @@ -18,6 +18,8 @@ public: , m_work_ram(*this, "work_ram") , m_work_ram_1(*this, "work_ram_1") , m_gfx1_rom(*this, "gfx1") + , m_chr_banks(*this, "chr%u", 0U) + , m_bank_vrom(*this, "vrom%u", 0U) { } @@ -58,6 +60,7 @@ private: optional_shared_ptr<uint8_t> m_work_ram_1; optional_memory_region m_gfx1_rom; + memory_bank_array_creator<8> m_chr_banks; void sprite_dma_0_w(address_space &space, uint8_t data); void sprite_dma_1_w(address_space &space, uint8_t data); @@ -123,9 +126,10 @@ private: int m_sound_fix; uint8_t m_last_bank; std::unique_ptr<uint8_t[]> m_vram; + std::unique_ptr<uint8_t[]> m_extraram; uint8_t* m_vrom[2]; std::unique_ptr<uint8_t[]> m_nt_ram[2]; - memory_bank* m_bank_vrom[8]; + memory_bank_array_creator<8> m_bank_vrom; uint8_t* m_nt_page[2][4]; uint32_t m_vrom_size[2]; int m_vrom_banks; diff --git a/src/mame/includes/xor100.h b/src/mame/includes/xor100.h index 25bb81e399e..efb60b45e8f 100644 --- a/src/mame/includes/xor100.h +++ b/src/mame/includes/xor100.h @@ -47,6 +47,9 @@ public: , m_floppy2(*this, WD1795_TAG":2") , m_floppy3(*this, WD1795_TAG":3") , m_rom(*this, Z80_TAG) + , m_bank1(*this, "bank1") + , m_bank2(*this, "bank2") + , m_bank3(*this, "bank3") { } void xor100(machine_config &config); @@ -90,6 +93,9 @@ private: required_device<floppy_connector> m_floppy2; required_device<floppy_connector> m_floppy3; required_memory_region m_rom; + required_memory_bank m_bank1; + required_memory_bank m_bank2; + required_memory_bank m_bank3; // memory state int m_mode; diff --git a/src/mame/includes/zaxxon.h b/src/mame/includes/zaxxon.h index 06289810ecc..4d4f9a267ae 100644 --- a/src/mame/includes/zaxxon.h +++ b/src/mame/includes/zaxxon.h @@ -29,7 +29,7 @@ public: m_palette(*this, "palette"), m_dials(*this, "DIAL.%u", 0), m_videoram(*this, "videoram"), - m_spriteram(*this, "spriteram"), + m_spriteram(*this, "spriteram", 0x100, ENDIANNESS_LITTLE), m_colorram(*this, "colorram"), m_decrypted_opcodes(*this, "decrypted_opcodes") { } @@ -64,7 +64,7 @@ private: optional_ioport_array<2> m_dials; required_shared_ptr<uint8_t> m_videoram; - optional_shared_ptr<uint8_t> m_spriteram; + memory_share_creator<uint8_t> m_spriteram; optional_shared_ptr<uint8_t> m_colorram; optional_shared_ptr<uint8_t> m_decrypted_opcodes; diff --git a/src/mame/machine/315_5195.cpp b/src/mame/machine/315_5195.cpp index 698909cbc7e..d7929f34826 100644 --- a/src/mame/machine/315_5195.cpp +++ b/src/mame/machine/315_5195.cpp @@ -235,19 +235,17 @@ void sega_315_5195_mapper_device::map_as_rom(u32 offset, u32 length, offs_t mirr if (rgnoffset + romend + 1 - info.start >= romsize) romend = romsize - 1 - rgnoffset + info.start; + // find the memory + void *memptr = m_cpuregion->base() + rgnoffset; + + // remember this bank, and decrypt if necessary + void *decrypt = m_banks[m_curregion].set(info.start, romend, rgnoffset, memptr); + // map now - m_space->install_read_bank(info.start, romend, info.mirror, bank_name); + m_space->install_rom(info.start, romend, info.mirror, memptr); if (m_decrypted_space) - m_decrypted_space->install_read_bank(info.start, romend, info.mirror, decrypted_bank_name); - - // configure the bank - memory_bank *bank = owner()->membank(bank_name); - memory_bank *decrypted_bank = owner()->membank(decrypted_bank_name); - u8 *memptr = m_cpuregion->base() + rgnoffset; - bank->set_base(memptr); + m_decrypted_space->install_rom(info.start, romend, info.mirror, decrypt ? decrypt : memptr); - // remember this bank, and decrypt if necessary - m_banks[m_curregion].set(bank, decrypted_bank, info.start, romend, rgnoffset, memptr); } // either install a write handler if provided or unmap the region @@ -276,17 +274,11 @@ void sega_315_5195_mapper_device::map_as_ram(u32 offset, u32 length, offs_t mirr whandler.isnull() ? "none" : whandler.name()); // map now - m_space->install_read_bank(info.start, info.end, info.mirror, bank_share_name); + m_space->install_ram(info.start, info.end, info.mirror, owner()->memshare(bank_share_name)->ptr()); // either install a write handler or a write bank, as appropriate if (!whandler.isnull()) m_space->install_write_handler(info.start, info.end, 0, info.mirror, 0, whandler); - else - m_space->install_write_bank(info.start, info.end, info.mirror, bank_share_name); - - // configure the bank - memory_bank *bank = owner()->membank(bank_share_name); - bank->set_base(owner()->memshare(bank_share_name)->ptr()); // clear this rom bank reference m_banks[m_curregion].clear(); @@ -505,9 +497,7 @@ void sega_315_5195_mapper_device::update_mapping() //------------------------------------------------- sega_315_5195_mapper_device::decrypt_bank::decrypt_bank() - : m_bank(nullptr) - , m_decrypted_bank(nullptr) - , m_start(0) + : m_start(0) , m_end(0) , m_rgnoffs(~0) , m_srcptr(nullptr) @@ -557,33 +547,31 @@ void sega_315_5195_mapper_device::decrypt_bank::set_decrypt(fd1094_device *fd109 // a change //------------------------------------------------- -void sega_315_5195_mapper_device::decrypt_bank::set(memory_bank *bank, memory_bank *decrypted_bank, offs_t start, offs_t end, offs_t rgnoffs, u8 *src) +void *sega_315_5195_mapper_device::decrypt_bank::set(offs_t start, offs_t end, offs_t rgnoffs, void *src) { // ignore if not encrypted if (m_fd1089 == nullptr && m_fd1094_cache == nullptr) - return; + return nullptr; // ignore if nothing is changing - if (bank == m_bank && start == m_start && end == m_end && rgnoffs == m_rgnoffs && src == m_srcptr) - return; + if (start == m_start && end == m_end && rgnoffs == m_rgnoffs && src == m_srcptr) + return nullptr; // if the start, end, or src change, throw away any cached data reset(); // update to the current state - m_bank = bank; - m_decrypted_bank = decrypted_bank; m_start = start; m_end = end; m_rgnoffs = rgnoffs; - m_srcptr = src; + m_srcptr = static_cast<u8 *>(src); // configure the fd1094 cache if (m_fd1094_cache != nullptr) m_fd1094_cache->configure(m_start, m_end + 1 - m_start, m_rgnoffs); // force an update of what we have - update(); + return update(); } @@ -592,21 +580,22 @@ void sega_315_5195_mapper_device::decrypt_bank::set(memory_bank *bank, memory_ba // if this rom bank has been assigned //------------------------------------------------- -void sega_315_5195_mapper_device::decrypt_bank::update() +void *sega_315_5195_mapper_device::decrypt_bank::update() { // if this isn't a valid state, don't try to do anything - if (m_bank == nullptr || m_srcptr == nullptr) - return; + if (m_srcptr == nullptr) + return nullptr; // fd1089 case if (m_fd1089 != nullptr) { m_fd1089_decrypted.resize((m_end + 1 - m_start) / 2); m_fd1089->decrypt(m_start, m_end + 1 - m_start, m_rgnoffs, &m_fd1089_decrypted[0], reinterpret_cast<u16 *>(m_srcptr)); - m_decrypted_bank->set_base(&m_fd1089_decrypted[0]); + return &m_fd1089_decrypted[0]; } // fd1094 case if (m_fd1094_cache != nullptr) - m_decrypted_bank->set_base(m_fd1094_cache->decrypted_opcodes(m_fd1094_cache->fd1094().state())); + return m_fd1094_cache->decrypted_opcodes(m_fd1094_cache->fd1094().state()); + return nullptr; } diff --git a/src/mame/machine/315_5195.h b/src/mame/machine/315_5195.h index bc95415a2cd..0386cbccb8b 100644 --- a/src/mame/machine/315_5195.h +++ b/src/mame/machine/315_5195.h @@ -92,17 +92,15 @@ private: // configuration void set_decrypt(fd1089_base_device *fd1089); void set_decrypt(fd1094_device *fd1094); - void clear() { set(nullptr, nullptr, 0, 0, ~0, nullptr); } - void set(memory_bank *bank, memory_bank *decrypted_bank, offs_t start, offs_t end, offs_t rgnoffs, u8 *src); + void clear() { set(0, 0, ~0, nullptr); } + void *set(offs_t start, offs_t end, offs_t rgnoffs, void *src); // updating - void update(); + void *update(); void reset() { m_fd1089_decrypted.clear(); if (m_fd1094_cache != nullptr) m_fd1094_cache->reset(); } private: // internal state - memory_bank * m_bank; - memory_bank * m_decrypted_bank; offs_t m_start; offs_t m_end; offs_t m_rgnoffs; diff --git a/src/mame/machine/abc1600mac.cpp b/src/mame/machine/abc1600mac.cpp index 156ca960213..3b6e70ab955 100644 --- a/src/mame/machine/abc1600mac.cpp +++ b/src/mame/machine/abc1600mac.cpp @@ -112,8 +112,8 @@ abc1600_mac_device::abc1600_mac_device(const machine_config &mconfig, const char device_memory_interface(mconfig, *this), m_space_config("program", ENDIANNESS_LITTLE, 8, 22, 0, address_map_constructor(FUNC(abc1600_mac_device::program_map), this)), m_rom(*this, "boot"), - m_segment_ram(*this, "segment_ram"), - m_page_ram(*this, "page_ram"), + m_segment_ram(*this, "segment_ram", 0x400, ENDIANNESS_LITTLE), + m_page_ram(*this, "page_ram", 0x800, ENDIANNESS_LITTLE), m_watchdog(*this, "watchdog"), m_cpu(*this, finder_base::DUMMY_TAG), m_task(0), @@ -128,10 +128,6 @@ abc1600_mac_device::abc1600_mac_device(const machine_config &mconfig, const char void abc1600_mac_device::device_start() { - // allocate memory - m_segment_ram.allocate(0x400); - m_page_ram.allocate(0x400); - // HACK fill segment RAM or abcenix won't boot memset(m_segment_ram, 0xcd, 0x400); //memset(m_page_ram, 0xcd, 0x400); diff --git a/src/mame/machine/abc1600mac.h b/src/mame/machine/abc1600mac.h index a0b1a4c0097..7e6bda2d01e 100644 --- a/src/mame/machine/abc1600mac.h +++ b/src/mame/machine/abc1600mac.h @@ -105,8 +105,8 @@ private: const address_space_config m_space_config; required_memory_region m_rom; - optional_shared_ptr<uint8_t> m_segment_ram; - optional_shared_ptr<uint16_t> m_page_ram; + memory_share_creator<uint8_t> m_segment_ram; + memory_share_creator<uint16_t> m_page_ram; required_device<watchdog_timer_device> m_watchdog; diff --git a/src/mame/machine/advision.cpp b/src/mame/machine/advision.cpp index be87f01ebbc..0a74cef6ccf 100644 --- a/src/mame/machine/advision.cpp +++ b/src/mame/machine/advision.cpp @@ -33,7 +33,7 @@ void advision_state::machine_start() m_bank1->configure_entry(0, memregion(I8048_TAG)->base()); if (m_cart_rom) m_bank1->configure_entry(1, m_cart_rom->base()); - m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, 0x03ff, "bank1"); + m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, 0x03ff, m_bank1); m_bank1->set_entry(0); m_sound_d = 0; diff --git a/src/mame/machine/asteroid.cpp b/src/mame/machine/asteroid.cpp index 1f629d4917c..72744e42110 100644 --- a/src/mame/machine/asteroid.cpp +++ b/src/mame/machine/asteroid.cpp @@ -117,15 +117,12 @@ void asteroid_state::machine_start() /* configure RAM banks if present (not on llander) */ if (m_ram1.target() != nullptr) { - uint8_t *ram1 = reinterpret_cast<uint8_t *>(memshare("ram1")->ptr()); - uint8_t *ram2 = reinterpret_cast<uint8_t *>(memshare("ram2")->ptr()); - /* swapped */ - m_ram1->configure_entry(1, ram2); - m_ram2->configure_entry(1, ram1); + m_ram1->configure_entry(1, m_sram2); + m_ram2->configure_entry(1, m_sram1); /* normal */ - m_ram1->configure_entry(0, ram1); - m_ram2->configure_entry(0, ram2); + m_ram1->configure_entry(0, m_sram1); + m_ram2->configure_entry(0, m_sram2); } } diff --git a/src/mame/machine/b2m.cpp b/src/mame/machine/b2m.cpp index fae7b699f9c..74334bdada6 100644 --- a/src/mame/machine/b2m.cpp +++ b/src/mame/machine/b2m.cpp @@ -40,98 +40,54 @@ void b2m_state::set_bank(int bank) address_space &space = m_maincpu->space(AS_PROGRAM); uint8_t *ram = m_ram->pointer(); - space.install_write_bank(0x0000, 0x27ff, "bank1"); - space.install_write_bank(0x2800, 0x2fff, "bank2"); - space.install_write_bank(0x3000, 0x6fff, "bank3"); - space.install_write_bank(0x7000, 0xdfff, "bank4"); - space.install_write_bank(0xe000, 0xffff, "bank5"); + space.install_ram(0x0000, 0xffff, ram); rom = memregion("maincpu")->base(); switch(bank) { - case 0 : - case 1 : - space.unmap_write(0xe000, 0xffff); - - membank("bank1")->set_base(ram); - membank("bank2")->set_base(ram + 0x2800); - membank("bank3")->set_base(ram + 0x3000); - membank("bank4")->set_base(ram + 0x7000); - membank("bank5")->set_base(rom); - break; -#if 0 - case 1 : - space.unmap_write(0x3000, 0x6fff); - space.unmap_write(0xe000, 0xffff); - - membank("bank1")->set_base(ram); - membank("bank2")->set_base(ram + 0x2800); - membank("bank3")->set_base(rom + 0x2000); - membank("bank4")->set_base(rom + 0x6000); - membank("bank5")->set_base(rom); - break; -#endif - case 2 : - space.unmap_write(0x2800, 0x2fff); - space.unmap_write(0xe000, 0xffff); - - membank("bank1")->set_base(ram); - space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r))); - membank("bank3")->set_base(ram + 0x10000); - membank("bank4")->set_base(ram + 0x7000); - membank("bank5")->set_base(rom); - break; - case 3 : - space.unmap_write(0x2800, 0x2fff); - space.unmap_write(0xe000, 0xffff); - - membank("bank1")->set_base(ram); - space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r))); - membank("bank3")->set_base(ram + 0x14000); - membank("bank4")->set_base(ram + 0x7000); - membank("bank5")->set_base(rom); - break; - case 4 : - space.unmap_write(0x2800, 0x2fff); - space.unmap_write(0xe000, 0xffff); - - membank("bank1")->set_base(ram); - space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r))); - membank("bank3")->set_base(ram + 0x18000); - membank("bank4")->set_base(ram + 0x7000); - membank("bank5")->set_base(rom); - - break; - case 5 : - space.unmap_write(0x2800, 0x2fff); - space.unmap_write(0xe000, 0xffff); - - membank("bank1")->set_base(ram); - space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r))); - membank("bank3")->set_base(ram + 0x1c000); - membank("bank4")->set_base(ram + 0x7000); - membank("bank5")->set_base(rom); - - break; - case 6 : - membank("bank1")->set_base(ram); - membank("bank2")->set_base(ram + 0x2800); - membank("bank3")->set_base(ram + 0x3000); - membank("bank4")->set_base(ram + 0x7000); - membank("bank5")->set_base(ram + 0xe000); - break; - case 7 : - space.unmap_write(0x0000, 0x27ff); - space.unmap_write(0x2800, 0x2fff); - space.unmap_write(0x3000, 0x6fff); - space.unmap_write(0x7000, 0xdfff); - space.unmap_write(0xe000, 0xffff); - - membank("bank1")->set_base(rom); - membank("bank2")->set_base(rom); - membank("bank3")->set_base(rom); - membank("bank4")->set_base(rom); - membank("bank5")->set_base(rom); - break; + case 0 : + case 1 : + space.unmap_write(0xe000, 0xffff); + space.install_rom(0xe000, 0xffff, rom); + break; + case 2 : + space.unmap_write(0x2800, 0x2fff); + space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r))); + space.install_ram(0x3000, 0x6fff, ram + 0x10000); + space.unmap_write(0xe000, 0xffff); + space.install_rom(0xe000, 0xffff, rom); + break; + case 3 : + space.unmap_write(0x2800, 0x2fff); + space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r))); + space.install_ram(0x3000, 0x6fff, ram + 0x14000); + space.unmap_write(0xe000, 0xffff); + space.install_rom(0xe000, 0xffff, rom); + break; + case 4 : + space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r))); + space.install_ram(0x3000, 0x6fff, ram + 0x18000); + space.unmap_write(0xe000, 0xffff); + space.install_rom(0xe000, 0xffff, rom); + break; + case 5 : + space.unmap_write(0x2800, 0x2fff); + space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r))); + space.install_ram(0x3000, 0x6fff, ram + 0x1c000); + space.unmap_write(0xe000, 0xffff); + space.install_rom(0xe000, 0xffff, rom); + break; + case 6 : + break; + case 7 : + space.unmap_write(0x0000, 0xffff); + space.unmap_read(0x0000, 0xffff); + + space.install_rom(0x0000, 0x1fff, rom); + space.install_rom(0x2800, 0x2fff, rom); + space.install_rom(0x3000, 0x4fff, rom); + space.install_rom(0x7000, 0x8fff, rom); + space.install_rom(0xe000, 0xffff, rom); + break; } } diff --git a/src/mame/machine/bebox.cpp b/src/mame/machine/bebox.cpp index ea64354a1f4..2b7b219ce28 100644 --- a/src/mame/machine/bebox.cpp +++ b/src/mame/machine/bebox.cpp @@ -769,9 +769,8 @@ void bebox_state::init_bebox() membank("bank2")->set_base(memregion("user2")->base()); /* install MESS managed RAM */ - space_0.install_readwrite_bank(0, m_ram->size() - 1, 0x02000000, "bank3"); - space_1.install_readwrite_bank(0, m_ram->size() - 1, 0x02000000, "bank3"); - membank("bank3")->set_base(m_ram->pointer()); + space_0.install_ram(0, m_ram->size() - 1, 0x02000000, m_ram->pointer()); + space_1.install_ram(0, m_ram->size() - 1, 0x02000000, m_ram->pointer()); /* The following is a verrrry ugly hack put in to support NetBSD for * NetBSD. When NetBSD/bebox it does most of its work on CPU #0 and then @@ -791,7 +790,6 @@ void bebox_state::init_bebox() /* bcctr 0x14, 0 */ 0x4E80042000000000U }; - space_1.install_read_bank(0x9421FFF0, 0x9421FFFF, "bank1"); - membank("bank1")->set_base(ops); + space_1.install_rom(0x9421FFF0, 0x9421FFFF, ops); } } diff --git a/src/mame/machine/dgn_beta.cpp b/src/mame/machine/dgn_beta.cpp index 7412954bb45..1a686a205c0 100644 --- a/src/mame/machine/dgn_beta.cpp +++ b/src/mame/machine/dgn_beta.cpp @@ -214,7 +214,6 @@ void dgn_beta_state::UpdateBanks(int first, int last) // void dgn_beta_state::SetDefaultTask() { -// uint8_t *videoram = m_videoram; int Idx; LOG_DEFAULT_TASK(("SetDefaultTask()\n")); @@ -918,8 +917,6 @@ void dgn_beta_state::machine_reset() m_DMA_NMI_LAST = 0x80; /* start with DMA NMI inactive, as pulled up */ // DMA_NMI = CLEAR_LINE; /* start with DMA NMI inactive */ - m_videoram.set_target(m_ram->pointer(),m_videoram.bytes()); /* Point video ram at the start of physical ram */ - m_wd2797_written=0; m_maincpu->reset(); diff --git a/src/mame/machine/dragon.cpp b/src/mame/machine/dragon.cpp index 3499c6553bd..d3a8abed97e 100644 --- a/src/mame/machine/dragon.cpp +++ b/src/mame/machine/dragon.cpp @@ -186,8 +186,8 @@ void d64plus_state::d64plus_bank_w(uint8_t data) switch (data & 0x06) { case 0: // Standard Dragon 32 Dynamic bank - space.install_write_bank(0x0000, 0x7fff, "bank0000_w"); - space.install_read_bank(0x0000, 0x7fff, "bank0000_r"); + space.install_write_bank(0x0000, 0x7fff, membank(":sam:bank0000_w")); + space.install_read_bank(0x0000, 0x7fff, membank(":sam:bank0000_r")); break; case 2: // First extra 32K bank (A) space.install_ram(0x0000, 0x7fff, m_plus_ram + 0x0000); @@ -241,10 +241,6 @@ void d64plus_state::device_start() space.install_readwrite_handler(0xffe0, 0xffe0, read8smo_delegate(*m_crtc, FUNC(mc6845_device::status_r)), write8smo_delegate(*m_crtc, FUNC(mc6845_device::address_w))); space.install_readwrite_handler(0xffe1, 0xffe1, read8smo_delegate(*m_crtc, FUNC(mc6845_device::register_r)), write8smo_delegate(*m_crtc, FUNC(mc6845_device::register_w))); space.install_readwrite_handler(0xffe2, 0xffe2, read8smo_delegate(*this, FUNC(d64plus_state::d64plus_6845_disp_r)), write8smo_delegate(*this, FUNC(d64plus_state::d64plus_bank_w))); - - // allocate memory - m_plus_ram.allocate(0x10000); - m_video_ram.allocate(0x800); } diff --git a/src/mame/machine/galaxy.cpp b/src/mame/machine/galaxy.cpp index e8badb08f6e..269cd14cbb3 100644 --- a/src/mame/machine/galaxy.cpp +++ b/src/mame/machine/galaxy.cpp @@ -144,8 +144,7 @@ SNAPSHOT_LOAD_MEMBER(galaxy_state::snapshot_cb) void galaxy_state::init_galaxy() { address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_readwrite_bank( 0x2800, 0x2800 + m_ram->size() - 1, "bank1"); - membank("bank1")->set_base(m_ram->pointer()); + space.install_ram( 0x2800, 0x2800 + m_ram->size() - 1, m_ram->pointer()); if (m_ram->size() < (6 + 48) * 1024) space.nop_readwrite( 0x2800 + m_ram->size(), 0xffff); diff --git a/src/mame/machine/gamecom.cpp b/src/mame/machine/gamecom.cpp index 2116ca64a29..94ce240f443 100644 --- a/src/mame/machine/gamecom.cpp +++ b/src/mame/machine/gamecom.cpp @@ -616,7 +616,7 @@ void gamecom_state::init_gamecom() m_sound1_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamecom_state::gamecom_sound1_timer_callback),this)); m_sound0_timer->adjust(attotime::from_seconds(1), 0, attotime::from_seconds(1)); m_sound1_timer->adjust(attotime::from_seconds(1), 0, attotime::from_seconds(1)); - m_p_ram = m_region_maincpu->base(); // required here because pio_w gets called before machine_reset + m_p_ram = m_share_maincpu; // required here because pio_w gets called before machine_reset } image_init_result gamecom_state::common_load(device_image_interface &image, generic_slot_device *slot) diff --git a/src/mame/machine/hec2hrp.cpp b/src/mame/machine/hec2hrp.cpp index 2a7264fe668..452e4efebc3 100644 --- a/src/mame/machine/hec2hrp.cpp +++ b/src/mame/machine/hec2hrp.cpp @@ -566,7 +566,6 @@ void hec2hrp_state::video_start() save_item(NAME(m_counter_write)); save_item(NAME(m_irq_current_state)); save_item(NAME(m_nmi_current_state)); - save_item(NAME(m_hector_videoram_hrx)); } diff --git a/src/mame/machine/hp48.cpp b/src/mame/machine/hp48.cpp index 562bad1adf5..954dc8c5208 100644 --- a/src/mame/machine/hp48.cpp +++ b/src/mame/machine/hp48.cpp @@ -638,12 +638,10 @@ void hp48_state::apply_modules() int bank_hi = (m_bank_switch >> 1) & 15; LOG(("hp48_state::apply_modules: low ROM bank is %i\n", bank_lo)); LOG(("hp48_state::apply_modules: high ROM bank is %i\n", bank_hi)); - space.install_read_bank(0x00000, 0x3ffff, 0x80000, "bank5"); - space.install_read_bank(0x40000, 0x7ffff, 0x80000, "bank6"); if (m_rom) { - membank("bank5")->set_base(m_rom + bank_lo * 0x40000); - membank("bank6")->set_base(m_rom + bank_hi * 0x40000); + space.install_rom(0x00000, 0x3ffff, 0x80000, m_rom + bank_lo * 0x40000); + space.install_rom(0x40000, 0x7ffff, 0x80000, m_rom + bank_hi * 0x40000); } } else if (HP48_G_SERIES) @@ -662,27 +660,22 @@ void hp48_state::apply_modules() /* A19 */ LOG(("hp48_state::apply_modules: A19 enabled, NCE3 disabled\n")); nce3_enable = 0; - space.install_read_bank(0, 0xfffff, "bank5"); + if (m_rom) + space.install_rom(0, 0xfffff, m_rom); } else { /* NCE3 */ nce3_enable = m_bank_switch >> 6; LOG(("hp48_apply_modules: A19 disabled, NCE3 %s\n", nce3_enable ? "enabled" : "disabled")); - space.install_read_bank(0, 0x7ffff, 0x80000, "bank5"); - } - if (m_rom) - { - membank("bank5")->set_base(m_rom); + if (m_rom) + space.install_rom(0, 0x7ffff, 0x80000, m_rom); } } else { - space.install_read_bank(0, 0x7ffff, 0x80000, "bank5"); if (m_rom) - { - membank("bank5")->set_base(m_rom); - } + space.install_rom(0, 0x7ffff, 0x80000, m_rom); } @@ -695,8 +688,6 @@ void hp48_state::apply_modules() uint32_t off_mask = m_modules[i].off_mask; uint32_t mirror = nselect_mask & ~off_mask; uint32_t end = base + (off_mask & nselect_mask); - char bank[10]; - sprintf(bank,"bank%d",i); if (m_modules[i].state != HP48_MODULE_CONFIGURED) continue; if ((i == 4) && !nce3_enable) continue; @@ -710,7 +701,7 @@ void hp48_state::apply_modules() if (m_modules[i].data) { - space.install_read_bank(base, end, mirror, bank); + space.install_rom(base, end, mirror, m_modules[i].data); } else { @@ -728,7 +719,7 @@ void hp48_state::apply_modules() { if (m_modules[i].data) { - space.install_write_bank(base, end, mirror, bank); + space.install_writeonly(base, end, mirror, m_modules[i].data); } else { @@ -741,11 +732,6 @@ void hp48_state::apply_modules() LOG(("hp48_apply_modules: module %s configured at %05x-%05x, mirror %05x\n", hp48_module_names[i], base, end, mirror)); - if (m_modules[i].data) - { - membank(bank)->set_base(m_modules[i].data); - } - if (i == 0) { m_io_addr = base; diff --git a/src/mame/machine/kc.cpp b/src/mame/machine/kc.cpp index 1a0487e224d..4d1ebef7004 100644 --- a/src/mame/machine/kc.cpp +++ b/src/mame/machine/kc.cpp @@ -285,8 +285,7 @@ void kc_state::update_0x00000() LOG(("ram0 enabled\n")); /* yes; set address of bank */ - space.install_read_bank(0x0000, 0x3fff, "bank1"); - membank("bank1")->set_base(m_ram_base); + space.install_rom(0x0000, 0x3fff, m_ram_base); /* write protect ram? */ if ((m_pio_data[0] & (1<<3)) == 0) @@ -302,7 +301,7 @@ void kc_state::update_0x00000() LOG(("ram0 write enabled\n")); /* ram is enabled and write enabled */ - space.install_write_bank(0x0000, 0x3fff, "bank1"); + space.install_writeonly(0x0000, 0x3fff, m_ram_base); } } else @@ -337,8 +336,7 @@ void kc_state::update_0x0c000() /* BASIC takes next priority */ LOG(("BASIC rom 0x0c000\n")); - membank("bank4")->set_base(memregion("basic")->base()); - space.install_read_bank(0xc000, 0xdfff, "bank4"); + space.install_rom(0xc000, 0xdfff, memregion("basic")->base()); space.unmap_write(0xc000, 0xdfff); } else @@ -360,8 +358,7 @@ void kc_state::update_0x0e000() /* enable CAOS rom in memory range 0x0e000-0x0ffff */ LOG(("CAOS rom 0x0e000\n")); /* read will access the rom */ - membank("bank5")->set_base(memregion("caos")->base() + 0x2000); - space.install_read_bank(0xe000, 0xffff, "bank5"); + space.install_rom(0xe000, 0xffff, memregion("caos")->base() + 0x2000); space.unmap_write(0xe000, 0xffff); } else @@ -384,8 +381,7 @@ void kc_state::update_0x08000() /* IRM enabled */ LOG(("IRM enabled\n")); - membank("bank3")->set_base(&m_video_ram[0]); - space.install_readwrite_bank(0x8000, 0xbfff, "bank3"); + space.install_ram(0x8000, 0xbfff, &m_video_ram[0]); } else { @@ -408,9 +404,7 @@ void kc85_4_state::update_0x04000() LOG(("RAM4 enabled\n")); /* yes */ - space.install_read_bank(0x4000, 0x7fff, "bank2"); - /* set address of bank */ - membank("bank2")->set_base(m_ram_base + 0x4000); + space.install_rom(0x4000, 0x7fff, m_ram_base + 0x4000); /* write protect ram? */ if ((m_port_86_data & (1<<1)) == 0) @@ -426,7 +420,7 @@ void kc85_4_state::update_0x04000() LOG(("ram4 write enabled\n")); /* ram is enabled and write enabled */ - space.install_write_bank(0x4000, 0x7fff, "bank2"); + space.install_writeonly(0x4000, 0x7fff, m_ram_base + 0x4000); } } else @@ -449,8 +443,7 @@ void kc85_4_state::update_0x0c000() /* CAOS rom takes priority */ LOG(("CAOS rom 0x0c000\n")); - membank("bank4")->set_base(memregion("caos")->base()); - space.install_read_bank(0xc000, 0xdfff, "bank4"); + space.install_rom(0xc000, 0xdfff, memregion("caos")->base()); space.unmap_write(0xc000, 0xdfff); } else @@ -462,8 +455,7 @@ void kc85_4_state::update_0x0c000() int bank = memregion("basic")->bytes() == 0x8000 ? (m_port_86_data>>5) & 0x03 : 0; - membank("bank4")->set_base(memregion("basic")->base() + (bank << 13)); - space.install_read_bank(0xc000, 0xdfff, "bank4"); + space.install_rom(0xc000, 0xdfff, memregion("basic")->base() + (bank << 13)); space.unmap_write(0xc000, 0xdfff); } else @@ -487,11 +479,8 @@ void kc85_4_state::update_0x08000() uint8_t* ram_page = &m_video_ram[(BIT(m_port_84_data, 2)<<15) | (BIT(m_port_84_data, 1)<<14)]; - membank("bank3")->set_base(ram_page); - space.install_readwrite_bank(0x8000, 0xa7ff, "bank3"); - - membank("bank6")->set_base(&m_video_ram[0x2800]); - space.install_readwrite_bank(0xa800, 0xbfff, "bank6"); + space.install_ram(0x8000, 0xa7ff, ram_page); + space.install_ram(0xa800, 0xbfff, &m_video_ram[0x2800]); } else if (m_pio_data[1] & (1<<5)) { @@ -515,10 +504,8 @@ void kc85_4_state::update_0x08000() mem_ptr = m_ram_base + (ram8_block<<14); } - membank("bank3")->set_base(mem_ptr); - membank("bank6")->set_base(mem_ptr + 0x2800); - space.install_read_bank(0x8000, 0xa7ff, "bank3"); - space.install_read_bank(0xa800, 0xbfff, "bank6"); + space.install_rom(0x8000, 0xa7ff, mem_ptr); + space.install_rom(0xa800, 0xbfff, mem_ptr + 0x2800); /* write protect RAM8 ? */ if ((m_pio_data[1] & (1<<6)) == 0) @@ -534,8 +521,8 @@ void kc85_4_state::update_0x08000() LOG(("RAM8 write enabled\n")); /* ram8 is enabled and write enabled */ - space.install_write_bank(0x8000, 0xa7ff, "bank3"); - space.install_write_bank(0xa800, 0xbfff, "bank6"); + space.install_writeonly(0x8000, 0xa7ff, mem_ptr); + space.install_writeonly(0xa800, 0xbfff, mem_ptr + 0x2800); } } else diff --git a/src/mame/machine/lviv.cpp b/src/mame/machine/lviv.cpp index 99598109f6d..94d7bccdbc9 100644 --- a/src/mame/machine/lviv.cpp +++ b/src/mame/machine/lviv.cpp @@ -156,9 +156,9 @@ void lviv_state::io_w(offs_t offset, uint8_t data) m_startup_mem_map = 0; - cpuspace.install_write_bank(0x0000, 0x3fff, "bank1"); - cpuspace.install_write_bank(0x4000, 0x7fff, "bank2"); - cpuspace.install_write_bank(0x8000, 0xbfff, "bank3"); + cpuspace.install_write_bank(0x0000, 0x3fff, m_bank[0]); + cpuspace.install_write_bank(0x4000, 0x7fff, m_bank[1]); + cpuspace.install_write_bank(0x8000, 0xbfff, m_bank[2]); cpuspace.unmap_write(0xC000, 0xffff); m_bank[0]->set_base(ram); diff --git a/src/mame/machine/m20_8086.cpp b/src/mame/machine/m20_8086.cpp index 1a907b4ecfc..f197b12e620 100644 --- a/src/mame/machine/m20_8086.cpp +++ b/src/mame/machine/m20_8086.cpp @@ -18,9 +18,8 @@ m20_8086_device::m20_8086_device(const machine_config &mconfig, const char *tag, void m20_8086_device::device_start() { uint8_t* ram = m_ram->pointer(); - m_8086->space(AS_PROGRAM).install_readwrite_bank(0x00000, m_ram->size() - 0x4001, "mainram"); + m_8086->space(AS_PROGRAM).install_ram(0x00000, m_ram->size() - 0x4001, &ram[0x4000]); membank("highram")->set_base(ram); - membank("mainram")->set_base(&ram[0x4000]); membank("vram")->set_base(memshare(":videoram")->ptr()); membank("vram2")->set_base(memshare(":videoram")->ptr()); } diff --git a/src/mame/machine/mac.cpp b/src/mame/machine/mac.cpp index a24359e7f91..bcc0697a8bb 100644 --- a/src/mame/machine/mac.cpp +++ b/src/mame/machine/mac.cpp @@ -125,7 +125,7 @@ void mac_fdc_set_enable_lines(device_t *device, int enable_mask) } void mac_state::mac_install_memory(offs_t memory_begin, offs_t memory_end, - offs_t memory_size, void *memory_data, int is_rom, const char *bank) + offs_t memory_size, void *memory_data, int is_rom) { address_space& space = m_maincpu->space(AS_PROGRAM); offs_t memory_mirror; @@ -135,20 +135,18 @@ void mac_state::mac_install_memory(offs_t memory_begin, offs_t memory_end, if (!is_rom) { - space.install_readwrite_bank(memory_begin, memory_end & ~memory_mirror, memory_mirror, bank); + space.install_ram(memory_begin, memory_end & ~memory_mirror, memory_mirror, memory_data); } else { space.unmap_write(memory_begin, memory_end); - space.install_read_bank(memory_begin, memory_end & ~memory_mirror, memory_mirror, bank); + space.install_rom(memory_begin, memory_end & ~memory_mirror, memory_mirror, memory_data); } - membank(bank)->set_base(memory_data); - if (LOG_MEMORY) { - printf("mac_install_memory(): bank=%s range=[0x%06x...0x%06x] mirror=0x%06x ptr=0x%p\n", - bank, memory_begin, memory_end, memory_mirror, memory_data); + printf("mac_install_memory(): range=[0x%06x...0x%06x] mirror=0x%06x ptr=0x%p\n", + memory_begin, memory_end, memory_mirror, memory_data); } } @@ -303,7 +301,7 @@ void mac_state::v8_resize() if (is_rom) { - mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom, "bank1"); + mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom); // install catcher in place of ROM that will detect the first access to ROM in its real location m_maincpu->space(AS_PROGRAM).install_read_handler(0xa00000, 0xafffff, read32sm_delegate(*this, FUNC(mac_state::rom_switch_r)), 0xffffffff); @@ -316,8 +314,7 @@ void mac_state::v8_resize() // re-install ROM in its normal place size_t rom_mirror = 0xfffff ^ (m_rom_size - 1); - m_maincpu->space(AS_PROGRAM).install_read_bank(0xa00000, 0xafffff, rom_mirror, "bankR"); - membank("bankR")->set_base((void *)m_rom_ptr); + m_maincpu->space(AS_PROGRAM).install_rom(0xa00000, 0xafffff, rom_mirror, m_rom_ptr); // force unmap of entire RAM region space.unmap_write(0, 0x9fffff); @@ -336,25 +333,25 @@ void mac_state::v8_resize() if ((simm_amt > 0) && (simm_size > 0)) { -// mac_install_memory(0x000000, simm_sizes[simm_amt]-1, simm_sizes[simm_amt], memory_data + onboard_amt, is_rom, "bank1"); - mac_install_memory(0x000000, simm_size-1, simm_size, memory_data + onboard_amt, is_rom, "bank1"); +// mac_install_memory(0x000000, simm_sizes[simm_amt]-1, simm_sizes[simm_amt], memory_data + onboard_amt, is_rom); + mac_install_memory(0x000000, simm_size-1, simm_size, memory_data + onboard_amt, is_rom); } // onboard RAM sits immediately above the SIMM, if any if (simm_sizes[simm_amt] + onboard_amt <= 0x800000) { - mac_install_memory(simm_sizes[simm_amt], simm_sizes[simm_amt] + onboard_amt - 1, onboard_amt, memory_data, is_rom, "bank2"); + mac_install_memory(simm_sizes[simm_amt], simm_sizes[simm_amt] + onboard_amt - 1, onboard_amt, memory_data, is_rom); } // a mirror of the first 2 MB of on board RAM always lives at 0x800000 - mac_install_memory(0x800000, 0x9fffff, 0x200000, memory_data, is_rom, "bank3"); + mac_install_memory(0x800000, 0x9fffff, 0x200000, memory_data, is_rom); } else { // printf("mac_v8_resize: SIMM off, mobo RAM at 0 and top\n"); - mac_install_memory(0x000000, onboard_amt-1, onboard_amt, memory_data, is_rom, "bank1"); - mac_install_memory(0x900000, 0x9fffff, 0x200000, memory_data+0x100000, is_rom, "bank3"); + mac_install_memory(0x000000, onboard_amt-1, onboard_amt, memory_data, is_rom); + mac_install_memory(0x900000, 0x9fffff, 0x200000, memory_data+0x100000, is_rom); } } } @@ -397,34 +394,34 @@ void mac_state::set_memory_overlay(int overlay) // ROM is OK to flood to 3fffffff if (is_rom) { - mac_install_memory(0x00000000, 0x3fffffff, memory_size, memory_data, is_rom, "bank1"); + mac_install_memory(0x00000000, 0x3fffffff, memory_size, memory_data, is_rom); } else // RAM: be careful not to populate ram B with a mirror or the ROM will get confused { - mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom, "bank1"); + mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom); // switch ROM region to direct access instead of through rom_switch_r - mac_install_memory(0x40000000, 0x4007ffff, memory_size, memory_data, is_rom, "bank2"); + mac_install_memory(0x40000000, 0x4007ffff, memory_size, memory_data, is_rom); } } else if (m_model == MODEL_MAC_IIFX) { address_space& space = m_maincpu->space(AS_PROGRAM); space.unmap_write(0x000000, 0x9fffff); - mac_install_memory(0x000000, memory_size-1, memory_size, memory_data, is_rom, "bank1"); + mac_install_memory(0x000000, memory_size-1, memory_size, memory_data, is_rom); } else if ((m_model == MODEL_MAC_PB140) || (m_model == MODEL_MAC_PB160) || ((m_model >= MODEL_MAC_PBDUO_210) && (m_model <= MODEL_MAC_PBDUO_270c))) { address_space& space = m_maincpu->space(AS_PROGRAM); space.unmap_write(0x000000, 0xffffff); - mac_install_memory(0x000000, memory_size-1, memory_size, memory_data, is_rom, "bank1"); + mac_install_memory(0x000000, memory_size-1, memory_size, memory_data, is_rom); } else if ((m_model >= MODEL_MAC_II) && (m_model <= MODEL_MAC_SE30) && (m_model != MODEL_MAC_IIVX) && (m_model != MODEL_MAC_IIVI)) { - mac_install_memory(0x00000000, 0x3fffffff, memory_size, memory_data, is_rom, "bank1"); + mac_install_memory(0x00000000, 0x3fffffff, memory_size, memory_data, is_rom); } else if ((m_model == MODEL_MAC_IIVX) || (m_model == MODEL_MAC_IIVI) || (m_model == MODEL_MAC_LC_III) || (m_model == MODEL_MAC_LC_III_PLUS) || (m_model >= MODEL_MAC_LC_475 && m_model <= MODEL_MAC_LC_580)) // up to 36 MB { - mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom, "bank1"); + mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom); if (is_rom) { @@ -433,21 +430,20 @@ void mac_state::set_memory_overlay(int overlay) else { size_t rom_mirror = 0xfffffff ^ (m_rom_size - 1); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x40000000, 0x4fffffff & ~rom_mirror, rom_mirror, "bankR"); - membank("bankR")->set_base((void *)m_rom_ptr); + m_maincpu->space(AS_PROGRAM).install_rom(0x40000000, 0x4fffffff & ~rom_mirror, rom_mirror, m_rom_ptr); } } else if (m_model == MODEL_MAC_QUADRA_700) { if (!is_rom) { - mac_install_memory(0x40000000, 0x400fffff, m_rom_size, m_rom_ptr, true, "bank2"); + mac_install_memory(0x40000000, 0x400fffff, m_rom_size, m_rom_ptr, true); } - mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom, "bank1"); + mac_install_memory(0x00000000, memory_size-1, memory_size, memory_data, is_rom); } else { - mac_install_memory(0x00000000, 0x003fffff, memory_size, memory_data, is_rom, "bank1"); + mac_install_memory(0x00000000, 0x003fffff, memory_size, memory_data, is_rom); } m_overlay = overlay; @@ -1304,11 +1300,11 @@ void mac_state::mac_driver_init(model_t model) if (model < MODEL_MAC_PORTABLE) { /* set up RAM mirror at 0x600000-0x6fffff (0x7fffff ???) */ - mac_install_memory(0x600000, 0x6fffff, m_ram->size(), m_ram->pointer(), false, "bank2"); + mac_install_memory(0x600000, 0x6fffff, m_ram->size(), m_ram->pointer(), false); /* set up ROM at 0x400000-0x4fffff (-0x5fffff for mac 128k/512k/512ke) */ mac_install_memory(0x400000, (model >= MODEL_MAC_PLUS) ? 0x4fffff : 0x5fffff, - m_rom_size, m_rom_ptr, true, "bank3"); + m_rom_size, m_rom_ptr, true); } m_overlay = -1; diff --git a/src/mame/machine/mc8123.cpp b/src/mame/machine/mc8123.cpp index 8580f7dea09..33acc77b096 100644 --- a/src/mame/machine/mc8123.cpp +++ b/src/mame/machine/mc8123.cpp @@ -92,7 +92,7 @@ DEFINE_DEVICE_TYPE(MC8123, mc8123_device, "mc8123", "MC-8123") mc8123_device::mc8123_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : z80_device(mconfig, MC8123, tag, owner, clock) - , m_key(*this, "key", 0x2000) + , m_key(*this, "key") { } diff --git a/src/mame/machine/mega32x.cpp b/src/mame/machine/mega32x.cpp index a9019c4ad3c..75cd4728eb5 100644 --- a/src/mame/machine/mega32x.cpp +++ b/src/mame/machine/mega32x.cpp @@ -225,6 +225,7 @@ sega_32x_device::sega_32x_device(const machine_config &mconfig, device_type type , m_ldac(*this, "ldac") , m_rdac(*this, "rdac") , m_scan_timer(*this, finder_base::DUMMY_TAG) + , m_rombank(*this, "rombank") , m_stream(nullptr) { } @@ -656,8 +657,8 @@ void sega_32x_device::m68k_a15100_w(address_space &space, offs_t offset, uint16_ m_32x_adapter_enabled = 1; space.install_rom(0x0880000, 0x08fffff, machine().root_device().memregion("gamecart")->base()); // 'fixed' 512kb rom bank - space.install_read_bank(0x0900000, 0x09fffff, "bank12"); // 'bankable' 1024kb rom bank - machine().root_device().membank("bank12")->set_base(machine().root_device().memregion("gamecart")->base()+((m_32x_68k_a15104_reg&0x3)*0x100000) ); + space.install_read_bank(0x0900000, 0x09fffff, m_rombank); // 'bankable' 1024kb rom bank + m_rombank->set_base(machine().root_device().memregion("gamecart")->base()+((m_32x_68k_a15104_reg&0x3)*0x100000) ); space.install_rom(0x0000000, 0x03fffff, machine().root_device().memregion("32x_68k_bios")->base()); @@ -747,7 +748,7 @@ void sega_32x_device::m68k_a15104_w(offs_t offset, uint16_t data, uint16_t mem_m m_32x_68k_a15104_reg = (m_32x_68k_a15104_reg & 0x00ff) | (data & 0xff00); } - machine().root_device().membank("bank12")->set_base(machine().root_device().memregion("gamecart")->base()+((m_32x_68k_a15104_reg&0x3)*0x100000) ); + m_rombank->set_base(machine().root_device().memregion("gamecart")->base()+((m_32x_68k_a15104_reg&0x3)*0x100000) ); } /**********************************************************************************************/ diff --git a/src/mame/machine/mega32x.h b/src/mame/machine/mega32x.h index 51cdf07ad47..82f22dcf1bc 100644 --- a/src/mame/machine/mega32x.h +++ b/src/mame/machine/mega32x.h @@ -121,6 +121,7 @@ protected: required_device<dac_word_interface> m_ldac; required_device<dac_word_interface> m_rdac; required_device<timer_device> m_scan_timer; + memory_bank_creator m_rombank; int m_32x_hcount_compare_val; int m_32x_vblank_flag; diff --git a/src/mame/machine/midtunit.cpp b/src/mame/machine/midtunit.cpp index 4530ae163ce..e5b8b436521 100644 --- a/src/mame/machine/midtunit.cpp +++ b/src/mame/machine/midtunit.cpp @@ -382,8 +382,11 @@ void midtunit_state::init_mktunit() m_maincpu->space(AS_PROGRAM).install_read_handler(0x1b00000, 0x1b6ffff, read16sm_delegate(*this, FUNC(midtunit_state::mk_prot_r))); m_maincpu->space(AS_PROGRAM).install_write_handler(0x1b00000, 0x1b6ffff, write16s_delegate(*this, FUNC(midtunit_state::mk_prot_w))); + m_hidden_ram = std::make_unique<uint8_t[]>(42); + save_pointer(NAME(m_hidden_ram), 42); + /* sound chip protection (hidden RAM) */ - m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(0xfb9c, 0xfbc6); + m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(0xfb9c, 0xfbc6, m_hidden_ram.get()); } void midtunit_state::init_mkturbo() @@ -415,11 +418,14 @@ void midtunit_state::init_nbajam_common(int te_protection) m_maincpu->space(AS_PROGRAM).install_write_handler(0x1b95f40, 0x1bb7f5f, write16sm_delegate(*this, FUNC(midtunit_state::nbajam_prot_w))); } + m_hidden_ram = std::make_unique<uint8_t[]>(42); + save_pointer(NAME(m_hidden_ram), 42); + /* sound chip protection (hidden RAM) */ if (!te_protection) - m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(0xfbaa, 0xfbd4); + m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(0xfbaa, 0xfbd4, m_hidden_ram.get()); else - m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(0xfbec, 0xfc16); + m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(0xfbec, 0xfc16, m_hidden_ram.get()); } void midtunit_state::init_nbajam() @@ -443,10 +449,11 @@ void midtunit_state::init_jdreddp() /* protection */ m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1b00000, 0x1bfffff, read16sm_delegate(*this, FUNC(midtunit_state::jdredd_prot_r)), write16sm_delegate(*this, FUNC(midtunit_state::jdredd_prot_w))); + m_hidden_ram = std::make_unique<uint8_t[]>(42); + save_pointer(NAME(m_hidden_ram), 42); + /* sound chip protection (hidden RAM) */ - m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_read_bank(0xfbcf, 0xfbf9, "bank7"); - m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_write_bank(0xfbcf, 0xfbf9, "bank9"); - membank("adpcm:bank9")->set_base(auto_alloc_array(machine(), uint8_t, 0x80)); + m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(0xfbcf, 0xfbf9, m_hidden_ram.get()); } diff --git a/src/mame/machine/midyunit.cpp b/src/mame/machine/midyunit.cpp index cbd4319dc42..36e5b986b74 100644 --- a/src/mame/machine/midyunit.cpp +++ b/src/mame/machine/midyunit.cpp @@ -292,15 +292,21 @@ void midyunit_state::init_generic(int bpp, int sound, int prot_start, int prot_e break; case SOUND_CVSD: - m_cvsd_sound->get_cpu()->space(AS_PROGRAM).install_ram(prot_start, prot_end); + m_hidden_ram = std::make_unique<uint8_t[]>(prot_end - prot_start); + save_pointer(NAME(m_hidden_ram), prot_end - prot_start); + m_cvsd_sound->get_cpu()->space(AS_PROGRAM).install_ram(prot_start, prot_end, m_hidden_ram.get()); break; case SOUND_ADPCM: - m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(prot_start, prot_end); + m_hidden_ram = std::make_unique<uint8_t[]>(prot_end - prot_start); + save_pointer(NAME(m_hidden_ram), prot_end - prot_start); + m_adpcm_sound->get_cpu()->space(AS_PROGRAM).install_ram(prot_start, prot_end, m_hidden_ram.get()); break; case SOUND_NARC: - m_narc_sound->get_cpu()->space(AS_PROGRAM).install_ram(prot_start, prot_end); + m_hidden_ram = std::make_unique<uint8_t[]>(prot_end - prot_start); + save_pointer(NAME(m_hidden_ram), prot_end - prot_start); + m_narc_sound->get_cpu()->space(AS_PROGRAM).install_ram(prot_start, prot_end, m_hidden_ram.get()); break; case SOUND_YAWDIM: diff --git a/src/mame/machine/mtx.cpp b/src/mame/machine/mtx.cpp index 6ad0ce4ea1f..55349bc4202 100644 --- a/src/mame/machine/mtx.cpp +++ b/src/mame/machine/mtx.cpp @@ -45,10 +45,10 @@ void mtx_state::mtx_subpage_w(uint8_t data) if (m_extrom->exists()) { if ((data * 0x2000) < m_extrom->get_rom_size()) - membank("rommap_bank1")->configure_entry(2, m_extrom->get_rom_base() + 0x2000 * data); + m_rommap_bank1->configure_entry(2, m_extrom->get_rom_base() + 0x2000 * data); else - membank("rommap_bank1")->configure_entry(2, memregion("user2")->base() + 0x4000); - membank("rommap_bank1")->set_entry(2); + m_rommap_bank1->configure_entry(2, memregion("user2")->base() + 0x4000); + m_rommap_bank1->set_entry(2); } } @@ -98,23 +98,23 @@ void mtx_state::bankswitch(uint8_t data) if (cbm_mode) { /* ram based memory map */ - program.install_readwrite_bank(0x0000, 0x3fff, "rammap_bank1"); - program.install_readwrite_bank(0x4000, 0x7fff, "rammap_bank2"); - program.install_readwrite_bank(0x8000, 0xbfff, "rammap_bank3"); + program.install_readwrite_bank(0x0000, 0x3fff, m_rammap_bank1); + program.install_readwrite_bank(0x4000, 0x7fff, m_rammap_bank2); + program.install_readwrite_bank(0x8000, 0xbfff, m_rammap_bank3); /* set ram bank, for invalid pages a nop-handler will be installed */ if ((ram_page == 0 && m_ram->size() > 0xc000) || (ram_page > 0 && m_ram->size() > 0x10000 + ram_page * 0xc000)) - membank("rammap_bank1")->set_entry(ram_page); + m_rammap_bank1->set_entry(ram_page); else program.nop_readwrite(0x0000, 0x3fff); if ((ram_page == 0 && m_ram->size() > 0x8000) || (ram_page > 0 && m_ram->size() > 0x14000 + ram_page * 0xc000)) - membank("rammap_bank2")->set_entry(ram_page); + m_rammap_bank2->set_entry(ram_page); else program.nop_readwrite(0x4000, 0x7fff); if ((ram_page == 0 && m_ram->size() > 0x4000) || (ram_page > 0 && m_ram->size() > 0x18000 + ram_page * 0xc000)) - membank("rammap_bank3")->set_entry(ram_page); + m_rammap_bank3->set_entry(ram_page); else program.nop_readwrite(0x8000, 0xbfff); } @@ -123,21 +123,21 @@ void mtx_state::bankswitch(uint8_t data) /* rom based memory map */ program.install_rom(0x0000, 0x1fff, memregion("user1")->base()); program.install_write_handler(0x0000, 0x1fff, write8smo_delegate(*this, FUNC(mtx_state::mtx_subpage_w))); - program.install_read_bank(0x2000, 0x3fff, "rommap_bank1"); + program.install_read_bank(0x2000, 0x3fff, m_rommap_bank1); program.unmap_write(0x2000, 0x3fff); - program.install_readwrite_bank(0x4000, 0x7fff, "rommap_bank2"); - program.install_readwrite_bank(0x8000, 0xbfff, "rommap_bank3"); + program.install_readwrite_bank(0x4000, 0x7fff, m_rommap_bank2); + program.install_readwrite_bank(0x8000, 0xbfff, m_rommap_bank3); /* set rom bank (switches between basic and assembler rom or cartridges) */ - membank("rommap_bank1")->set_entry(rom_page); + m_rommap_bank1->set_entry(rom_page); /* set ram bank, for invalid pages a nop-handler will be installed */ if ((ram_page == 0 && m_ram->size() > 0x8000) || (ram_page > 0 && m_ram->size() > 0x10000 + ram_page * 0x8000)) - membank("rommap_bank2")->set_entry(ram_page); + m_rommap_bank2->set_entry(ram_page); else program.nop_readwrite(0x4000, 0x7fff); if ((ram_page == 0 && m_ram->size() > 0x4000) || (ram_page == 1 && m_ram->size() > 0xc000) || (ram_page > 1 && m_ram->size() > 0x14000 + ram_page * 0x8000)) - membank("rommap_bank3")->set_entry(ram_page); + m_rommap_bank3->set_entry(ram_page); else program.nop_readwrite(0x8000, 0xbfff); } @@ -532,28 +532,28 @@ void mtx_state::machine_start() address_space &program = m_maincpu->space(AS_PROGRAM); /* setup banks for rom based memory map */ - program.install_read_bank(0x2000, 0x3fff, "rommap_bank1"); - program.install_readwrite_bank(0x4000, 0x7fff, "rommap_bank2"); - program.install_readwrite_bank(0x8000, 0xbfff, "rommap_bank3"); + program.install_read_bank(0x2000, 0x3fff, m_rommap_bank1); + program.install_readwrite_bank(0x4000, 0x7fff, m_rommap_bank2); + program.install_readwrite_bank(0x8000, 0xbfff, m_rommap_bank3); - membank("rommap_bank1")->configure_entries(0, 8, memregion("user2")->base(), 0x2000); - membank("rommap_bank2")->configure_entry(0, m_ram->pointer() + 0x8000); - membank("rommap_bank2")->configure_entries(1, 15, m_ram->pointer() + 0x10000, 0x8000); - membank("rommap_bank3")->configure_entry(0, m_ram->pointer() + 0x4000); - membank("rommap_bank3")->configure_entry(1, m_ram->pointer() + 0xc000); - membank("rommap_bank3")->configure_entries(2, 14, m_ram->pointer() + 0x14000, 0x8000); + m_rommap_bank1->configure_entries(0, 8, memregion("user2")->base(), 0x2000); + m_rommap_bank2->configure_entry(0, m_ram->pointer() + 0x8000); + m_rommap_bank2->configure_entries(1, 15, m_ram->pointer() + 0x10000, 0x8000); + m_rommap_bank3->configure_entry(0, m_ram->pointer() + 0x4000); + m_rommap_bank3->configure_entry(1, m_ram->pointer() + 0xc000); + m_rommap_bank3->configure_entries(2, 14, m_ram->pointer() + 0x14000, 0x8000); /* setup banks for ram based memory map */ - program.install_readwrite_bank(0x0000, 0x3fff, "rammap_bank1"); - program.install_readwrite_bank(0x4000, 0x7fff, "rammap_bank2"); - program.install_readwrite_bank(0x8000, 0xbfff, "rammap_bank3"); + program.install_readwrite_bank(0x0000, 0x3fff, m_rammap_bank1); + program.install_readwrite_bank(0x4000, 0x7fff, m_rammap_bank2); + program.install_readwrite_bank(0x8000, 0xbfff, m_rammap_bank3); - membank("rammap_bank1")->configure_entry(0, m_ram->pointer() + 0xc000); - membank("rammap_bank1")->configure_entries(1, 15, m_ram->pointer() + 0x10000, 0xc000); - membank("rammap_bank2")->configure_entry(0, m_ram->pointer() + 0x8000); - membank("rammap_bank2")->configure_entries(1, 15, m_ram->pointer() + 0x14000, 0xc000); - membank("rammap_bank3")->configure_entry(0, m_ram->pointer() + 0x4000); - membank("rammap_bank3")->configure_entries(1, 15, m_ram->pointer() + 0x18000, 0xc000); + m_rammap_bank1->configure_entry(0, m_ram->pointer() + 0xc000); + m_rammap_bank1->configure_entries(1, 15, m_ram->pointer() + 0x10000, 0xc000); + m_rammap_bank2->configure_entry(0, m_ram->pointer() + 0x8000); + m_rammap_bank2->configure_entries(1, 15, m_ram->pointer() + 0x14000, 0xc000); + m_rammap_bank3->configure_entry(0, m_ram->pointer() + 0x4000); + m_rammap_bank3->configure_entries(1, 15, m_ram->pointer() + 0x18000, 0xc000); /* install 4000h bytes common block */ program.install_ram(0xc000, 0xffff, m_ram->pointer()); @@ -563,13 +563,13 @@ void mtx_state::machine_reset() { /* extension board ROMs */ if (m_extrom->exists()) - membank("rommap_bank1")->configure_entry(2, m_extrom->get_rom_base()); + m_rommap_bank1->configure_entry(2, m_extrom->get_rom_base()); /* keyboard ROMs */ if (ioport("keyboard_rom")->read()) - membank("rommap_bank1")->configure_entry(7, memregion("keyboard_rom")->base() + (ioport("keyboard_rom")->read() - 1) * 0x2000); + m_rommap_bank1->configure_entry(7, memregion("keyboard_rom")->base() + (ioport("keyboard_rom")->read() - 1) * 0x2000); /* rompak ROMs */ if (m_rompak->exists()) - membank("rommap_bank1")->configure_entry(7, m_rompak->get_rom_base()); + m_rommap_bank1->configure_entry(7, m_rompak->get_rom_base()); /* bank switching */ bankswitch(0); diff --git a/src/mame/machine/nes.cpp b/src/mame/machine/nes.cpp index 83219fbce5d..9dd876039e6 100644 --- a/src/mame/machine/nes.cpp +++ b/src/mame/machine/nes.cpp @@ -59,10 +59,8 @@ void nes_state::machine_start() space.install_write_handler(0x4100, 0x5fff, write8sm_delegate(*m_cartslot, FUNC(nes_cart_slot_device::write_l))); space.install_read_handler(0x6000, 0x7fff, read8sm_delegate(*m_cartslot, FUNC(nes_cart_slot_device::read_m))); space.install_write_handler(0x6000, 0x7fff, write8sm_delegate(*m_cartslot, FUNC(nes_cart_slot_device::write_m))); - space.install_read_bank(0x8000, 0x9fff, "prg0"); - space.install_read_bank(0xa000, 0xbfff, "prg1"); - space.install_read_bank(0xc000, 0xdfff, "prg2"); - space.install_read_bank(0xe000, 0xffff, "prg3"); + for(int i=0; i<4; i++) + space.install_read_bank(0x8000 + 0x2000*i, 0x9fff + 0x2000*i, m_prg_bank[i]); space.install_write_handler(0x8000, 0xffff, write8sm_delegate(*m_cartslot, FUNC(nes_cart_slot_device::write_h))); m_ppu->space(AS_PROGRAM).install_readwrite_handler(0, 0x1fff, read8sm_delegate(*m_cartslot->m_cart, FUNC(device_nes_cart_interface::chr_r)), write8sm_delegate(*m_cartslot->m_cart, FUNC(device_nes_cart_interface::chr_w))); diff --git a/src/mame/machine/ondra.cpp b/src/mame/machine/ondra.cpp index 86af7833ba2..ffa97d84972 100644 --- a/src/mame/machine/ondra.cpp +++ b/src/mame/machine/ondra.cpp @@ -38,7 +38,7 @@ void ondra_state::update_banks() { if (BIT(m_bank_status, 0)) { - space.install_write_bank(0x0000, 0x3fff, "bank1"); + space.install_write_bank(0x0000, 0x3fff, m_bank1); m_bank1->set_base(r); } else @@ -57,7 +57,7 @@ void ondra_state::update_banks() } else { - space.install_readwrite_bank(0xe000, 0xffff, "bank3"); + space.install_readwrite_bank(0xe000, 0xffff, m_bank3); m_bank3->set_base(r + 0xe000); } } diff --git a/src/mame/machine/orion.cpp b/src/mame/machine/orion.cpp index d00112f6677..e1587447609 100644 --- a/src/mame/machine/orion.cpp +++ b/src/mame/machine/orion.cpp @@ -253,7 +253,7 @@ void orion_state::orionz80_switch_bank() bank_select = (m_orionz80_dispatcher & 0x0c) >> 2; segment_select = m_orionz80_dispatcher & 0x03; - space.install_write_bank(0x0000, 0x3fff, "bank1"); + space.install_write_bank(0x0000, 0x3fff, m_bank1); if ((m_orionz80_dispatcher & 0x80)==0) { // dispatcher on m_bank1->set_base(m_ram->pointer() + 0x10000 * bank_select + segment_select * 0x4000 ); @@ -311,8 +311,8 @@ void orion_z80_state::machine_reset() address_space &space = m_maincpu->space(AS_PROGRAM); space.unmap_write(0x0000, 0x3fff); - space.install_write_bank(0x4000, 0xefff, "bank2"); - space.install_write_bank(0xf000, 0xf3ff, "bank3"); + space.install_write_bank(0x4000, 0xefff, m_bank2); + space.install_write_bank(0xf000, 0xf3ff, m_bank3); space.install_write_handler(0xf400, 0xf4ff, write8sm_delegate(*this, FUNC(orion_z80_state::orion128_system_w))); space.install_write_handler(0xf500, 0xf5ff, write8sm_delegate(*this, FUNC(orion_z80_state::orion128_romdisk_w))); @@ -390,15 +390,14 @@ void orion_state::orionpro_bank_switch() if (is128==1) page = m_orionpro_128_page & 7; - space.install_write_bank(0x0000, 0x1fff, "bank1"); - space.install_write_bank(0x2000, 0x3fff, "bank2"); - space.install_write_bank(0x4000, 0x7fff, "bank3"); - space.install_write_bank(0x8000, 0xbfff, "bank4"); - space.install_write_bank(0xc000, 0xefff, "bank5"); - space.install_write_bank(0xf000, 0xf3ff, "bank6"); - space.install_write_bank(0xf400, 0xf7ff, "bank7"); - space.install_write_bank(0xf800, 0xffff, "bank8"); - + space.install_write_bank(0x0000, 0x1fff, m_bank1); + space.install_write_bank(0x2000, 0x3fff, m_bank2); + space.install_write_bank(0x4000, 0x7fff, m_bank3); + space.install_write_bank(0x8000, 0xbfff, m_bank4); + space.install_write_bank(0xc000, 0xefff, m_bank5); + space.install_write_bank(0xf000, 0xf3ff, m_bank6); + space.install_write_bank(0xf400, 0xf7ff, m_bank7); + space.install_write_bank(0xf800, 0xffff, m_bank8); if ((m_orionpro_dispatcher & 0x01)==0x00) { // RAM0 segment disabled diff --git a/src/mame/machine/partner.cpp b/src/mame/machine/partner.cpp index 0bcc83d5f0a..1d7873a91d8 100644 --- a/src/mame/machine/partner.cpp +++ b/src/mame/machine/partner.cpp @@ -123,18 +123,18 @@ void partner_state::bank_switch() uint8_t *rom = memregion("maincpu")->base(); uint8_t *ram = m_ram->pointer(); - space.install_write_bank(0x0000, 0x07ff, "bank1"); - space.install_write_bank(0x0800, 0x3fff, "bank2"); - space.install_write_bank(0x4000, 0x5fff, "bank3"); - space.install_write_bank(0x6000, 0x7fff, "bank4"); - space.install_write_bank(0x8000, 0x9fff, "bank5"); - space.install_write_bank(0xa000, 0xb7ff, "bank6"); - space.install_write_bank(0xb800, 0xbfff, "bank7"); - space.install_write_bank(0xc000, 0xc7ff, "bank8"); - space.install_write_bank(0xc800, 0xcfff, "bank9"); - space.install_write_bank(0xd000, 0xd7ff, "bank10"); + space.install_write_bank(0x0000, 0x07ff, m_bank[0]); + space.install_write_bank(0x0800, 0x3fff, m_bank[1]); + space.install_write_bank(0x4000, 0x5fff, m_bank[2]); + space.install_write_bank(0x6000, 0x7fff, m_bank[3]); + space.install_write_bank(0x8000, 0x9fff, m_bank[4]); + space.install_write_bank(0xa000, 0xb7ff, m_bank[5]); + space.install_write_bank(0xb800, 0xbfff, m_bank[6]); + space.install_write_bank(0xc000, 0xc7ff, m_bank[7]); + space.install_write_bank(0xc800, 0xcfff, m_bank[8]); + space.install_write_bank(0xd000, 0xd7ff, m_bank[9]); space.unmap_write(0xdc00, 0xddff); - space.install_read_bank (0xdc00, 0xddff, "bank11"); + space.install_read_bank (0xdc00, 0xddff, m_bank[10]); space.unmap_write(0xe000, 0xe7ff); space.unmap_write(0xe800, 0xffff); diff --git a/src/mame/machine/pc1350.cpp b/src/mame/machine/pc1350.cpp index edd02bf7ba7..07357f19062 100644 --- a/src/mame/machine/pc1350.cpp +++ b/src/mame/machine/pc1350.cpp @@ -61,13 +61,11 @@ void pc1350_state::machine_start() address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_readwrite_bank(0x6000, 0x6fff, "bank1"); - membank("bank1")->set_base(&m_ram->pointer()[0x0000]); + space.install_ram(0x6000, 0x6fff, &m_ram->pointer()[0x0000]); if (m_ram->size() >= 0x3000) { - space.install_readwrite_bank(0x4000, 0x5fff, "bank2"); - membank("bank2")->set_base(&m_ram->pointer()[0x1000]); + space.install_ram(0x4000, 0x5fff, &m_ram->pointer()[0x1000]); } else { @@ -76,8 +74,7 @@ void pc1350_state::machine_start() if (m_ram->size() >= 0x5000) { - space.install_readwrite_bank(0x2000, 0x3fff, "bank3"); - membank("bank3")->set_base(&m_ram->pointer()[0x3000]); + space.install_ram(0x2000, 0x3fff, &m_ram->pointer()[0x3000]); } else { diff --git a/src/mame/machine/pecom.cpp b/src/mame/machine/pecom.cpp index bfcb37cf977..ddf0b82e4c8 100644 --- a/src/mame/machine/pecom.cpp +++ b/src/mame/machine/pecom.cpp @@ -23,8 +23,8 @@ void pecom_state::machine_reset() m_bank1->set_entry(1); space.unmap_write(0xf000, 0xffff); - space.install_read_bank (0xf000, 0xf7ff, "bank3"); - space.install_read_bank (0xf800, 0xffff, "bank4"); + space.install_read_bank (0xf000, 0xf7ff, m_bank3); + space.install_read_bank (0xf800, 0xffff, m_bank4); m_bank3->set_base(m_rom + 0x7000); m_bank4->set_base(m_rom + 0x7800); @@ -68,8 +68,8 @@ void pecom_state::bank_w(uint8_t data) else { space.unmap_write(0xf000, 0xffff); - space.install_read_bank (0xf000, 0xf7ff, "bank3"); - space.install_read_bank (0xf800, 0xffff, "bank4"); + space.install_read_bank (0xf000, 0xf7ff, m_bank3); + space.install_read_bank (0xf800, 0xffff, m_bank4); m_bank3->set_base(m_rom + 0x7000); m_bank4->set_base(m_rom + 0x7800); } diff --git a/src/mame/machine/playch10.cpp b/src/mame/machine/playch10.cpp index 6c6f11574d4..f6e1acc44d8 100644 --- a/src/mame/machine/playch10.cpp +++ b/src/mame/machine/playch10.cpp @@ -651,7 +651,9 @@ void playch10_state::init_pcdboard() void playch10_state::init_pcdboard_2() { /* extra ram at $6000-$7fff */ - m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff); + m_extra_ram = std::make_unique<uint8_t[]>(0x2000); + save_pointer(NAME(m_extra_ram), 0x2000); + m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff, m_extra_ram.get()); /* common init */ init_pcdboard(); @@ -752,7 +754,9 @@ void playch10_state::init_pceboard() m_ppu->set_latch(*this, FUNC(playch10_state::mapper9_latch)); /* nvram at $6000-$6fff */ - m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x6fff); + m_extra_ram = std::make_unique<uint8_t[]>(0x1000); + save_pointer(NAME(m_extra_ram), 0x1000); + m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x6fff, m_extra_ram.get()); /* common init */ init_playch10(); @@ -787,7 +791,9 @@ void playch10_state::init_pcfboard() void playch10_state::init_pcfboard_2() { /* extra ram at $6000-$6fff */ - m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x6fff); + m_extra_ram = std::make_unique<uint8_t[]>(0x1000); + save_pointer(NAME(m_extra_ram), 0x1000); + m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x6fff, m_extra_ram.get()); m_vram = nullptr; @@ -963,7 +969,9 @@ void playch10_state::init_pcgboard() m_cartcpu->space(AS_PROGRAM).install_write_handler(0x8000, 0xffff, write8sm_delegate(*this, FUNC(playch10_state::gboard_rom_switch_w))); /* extra ram at $6000-$7fff */ - m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff); + m_extra_ram = std::make_unique<uint8_t[]>(0x2000); + save_pointer(NAME(m_extra_ram), 0x2000); + m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff, m_extra_ram.get()); m_gboard_banks[0] = 0x1e; m_gboard_banks[1] = 0x1f; @@ -1084,7 +1092,9 @@ void playch10_state::init_pchboard() m_cartcpu->space(AS_PROGRAM).install_write_handler(0x8000, 0xffff, write8sm_delegate(*this, FUNC(playch10_state::hboard_rom_switch_w))); /* extra ram at $6000-$7fff */ - m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff); + m_extra_ram = std::make_unique<uint8_t[]>(0x2000); + save_pointer(NAME(m_extra_ram), 0x2000); + m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff, m_extra_ram.get()); m_gboard_banks[0] = 0x1e; m_gboard_banks[1] = 0x1f; @@ -1113,7 +1123,9 @@ void playch10_state::init_pckboard() m_mmc1_rom_mask = 0x0f; /* extra ram at $6000-$7fff */ - m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff); + m_extra_ram = std::make_unique<uint8_t[]>(0x2000); + save_pointer(NAME(m_extra_ram), 0x2000); + m_cartcpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff, m_extra_ram.get()); /* Roms are banked at $8000 to $bfff */ m_cartcpu->space(AS_PROGRAM).install_write_handler(0x8000, 0xffff, write8sm_delegate(*this, FUNC(playch10_state::mmc1_rom_switch_w))); diff --git a/src/mame/machine/pmd85.cpp b/src/mame/machine/pmd85.cpp index b4c6086e019..93a9edacc8b 100644 --- a/src/mame/machine/pmd85.cpp +++ b/src/mame/machine/pmd85.cpp @@ -46,14 +46,14 @@ void pmd85_state::pmd851_update_memory() } else { - space.install_write_bank(0x0000, 0x0fff, "bank1"); - space.install_write_bank(0x1000, 0x1fff, "bank2"); - space.install_write_bank(0x2000, 0x2fff, "bank3"); - space.install_write_bank(0x3000, 0x3fff, "bank4"); - space.install_write_bank(0x4000, 0x7fff, "bank5"); + space.install_write_bank(0x0000, 0x0fff, m_bank[1]); + space.install_write_bank(0x1000, 0x1fff, m_bank[2]); + space.install_write_bank(0x2000, 0x2fff, m_bank[3]); + space.install_write_bank(0x3000, 0x3fff, m_bank[4]); + space.install_write_bank(0x4000, 0x7fff, m_bank[5]); - space.install_read_bank(0x1000, 0x1fff, "bank2"); - space.install_read_bank(0x3000, 0x3fff, "bank4"); + space.install_read_bank(0x1000, 0x1fff, m_bank[2]); + space.install_read_bank(0x3000, 0x3fff, m_bank[4]); m_bank[1]->set_base(ram); m_bank[2]->set_base(ram + 0x1000); @@ -87,8 +87,8 @@ void pmd85_state::pmd852a_update_memory() } else { - space.install_write_bank(0x0000, 0x0fff, "bank1"); - space.install_write_bank(0x2000, 0x2fff, "bank3"); + space.install_write_bank(0x0000, 0x0fff, m_bank[1]); + space.install_write_bank(0x2000, 0x2fff, m_bank[3]); m_bank[1]->set_base(ram); m_bank[2]->set_base(ram + 0x1000); @@ -154,9 +154,9 @@ void pmd85_state::alfa_update_memory() } else { - space.install_write_bank(0x0000, 0x0fff, "bank1"); - space.install_write_bank(0x1000, 0x33ff, "bank2"); - space.install_write_bank(0x3400, 0x3fff, "bank3"); + space.install_write_bank(0x0000, 0x0fff, m_bank[1]); + space.install_write_bank(0x1000, 0x33ff, m_bank[2]); + space.install_write_bank(0x3400, 0x3fff, m_bank[3]); m_bank[1]->set_base(ram); m_bank[2]->set_base(ram + 0x1000); @@ -181,7 +181,7 @@ void pmd85_state::mato_update_memory() } else { - space.install_write_bank(0x0000, 0x3fff, "bank1"); + space.install_write_bank(0x0000, 0x3fff, m_bank[1]); m_bank[1]->set_base(ram); m_bank[2]->set_base(ram + 0x4000); @@ -204,7 +204,7 @@ void pmd85_state::c2717_update_memory() } else { - space.install_write_bank(0x0000, 0x3fff, "bank1"); + space.install_write_bank(0x0000, 0x3fff, m_bank[1]); m_bank[1]->set_base(ram); m_bank[2]->set_base(ram + 0x4000); } diff --git a/src/mame/machine/primo.cpp b/src/mame/machine/primo.cpp index ad4989257f8..41047fd6196 100644 --- a/src/mame/machine/primo.cpp +++ b/src/mame/machine/primo.cpp @@ -53,7 +53,7 @@ void primo_state::update_memory() membank("bank1")->set_base(m_cart2_rom->base()); break; case 0x02: /* RAM */ - space.install_write_bank(0x0000, 0x3fff, "bank1"); + space.install_write_bank(0x0000, 0x3fff, membank("bank1")); membank("bank1")->set_base(memregion("maincpu")->base()); break; case 0x03: /* EPROM extension 2 */ diff --git a/src/mame/machine/rmnimbus.cpp b/src/mame/machine/rmnimbus.cpp index 92d67f4bdf0..26b01f195b6 100644 --- a/src/mame/machine/rmnimbus.cpp +++ b/src/mame/machine/rmnimbus.cpp @@ -945,7 +945,7 @@ void rmnimbus_state::nimbus_bank_memory() map_base=(ramsel==0x07) ? map_blocks[map_blockno] : &map_blocks[map_blockno][block_ofs*1024]; membank(bank)->set_base(map_base); - space.install_readwrite_bank(memmap[blockno].start, memmap[blockno].end, bank); + space.install_readwrite_bank(memmap[blockno].start, memmap[blockno].end, membank(bank)); //if(LOG_RAM) logerror(", base=%X\n",(int)map_base); } else diff --git a/src/mame/machine/scramble.cpp b/src/mame/machine/scramble.cpp index fd9645ee105..f6cb0d18c5f 100644 --- a/src/mame/machine/scramble.cpp +++ b/src/mame/machine/scramble.cpp @@ -85,7 +85,7 @@ void scramble_state::cavelon_banksw() to keep the CPU core happy at the boundaries */ m_cavelon_bank = !m_cavelon_bank; - membank("bank1")->set_entry(m_cavelon_bank); + m_cavelon_bank_object->set_entry(m_cavelon_bank); } uint8_t scramble_state::cavelon_banksw_r(offs_t offset) @@ -178,9 +178,8 @@ void scramble_state::init_tazmaniet() void scramble_state::init_mariner() { /* extra ROM */ - m_maincpu->space(AS_PROGRAM).install_read_bank(0x5800, 0x67ff, "bank1"); + m_maincpu->space(AS_PROGRAM).install_rom(0x5800, 0x67ff, memregion("maincpu")->base() + 0x5800); m_maincpu->space(AS_PROGRAM).unmap_write(0x5800, 0x67ff); - membank("bank1")->set_base(memregion("maincpu")->base() + 0x5800); m_maincpu->space(AS_PROGRAM).install_read_handler(0x9008, 0x9008, read8smo_delegate(*this, FUNC(scramble_state::mariner_protection_2_r))); m_maincpu->space(AS_PROGRAM).install_read_handler(0xb401, 0xb401, read8smo_delegate(*this, FUNC(scramble_state::mariner_protection_1_r))); @@ -254,8 +253,8 @@ void scramble_state::init_cavelon() uint8_t *ROM = memregion("maincpu")->base(); /* banked ROM */ - m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, "bank1"); - membank("bank1")->configure_entries(0, 2, &ROM[0x00000], 0x10000); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, m_cavelon_bank_object); + m_cavelon_bank_object->configure_entries(0, 2, &ROM[0x00000], 0x10000); cavelon_banksw(); /* A15 switches memory banks */ diff --git a/src/mame/machine/special.cpp b/src/mame/machine/special.cpp index 58f3fdcb5f1..df5d90e3c9a 100644 --- a/src/mame/machine/special.cpp +++ b/src/mame/machine/special.cpp @@ -145,13 +145,13 @@ void special_state::specimx_set_bank(offs_t i, uint8_t data) address_space &space = m_maincpu->space(AS_PROGRAM); uint8_t *ram = m_ram->pointer(); - space.install_write_bank(0xc000, 0xffbf, "bank3"); - space.install_write_bank(0xffc0, 0xffdf, "bank4"); + space.install_write_bank(0xc000, 0xffbf, m_bank3); + space.install_write_bank(0xffc0, 0xffdf, m_bank4); m_bank4->set_base(ram + 0xffc0); switch(i) { case 0 : - space.install_write_bank(0x0000, 0x8fff, "bank1"); + space.install_write_bank(0x0000, 0x8fff, m_bank1); space.install_write_handler(0x9000, 0xbfff, write8sm_delegate(*this, FUNC(special_state::video_memory_w))); m_bank1->set_base(ram); @@ -159,8 +159,8 @@ void special_state::specimx_set_bank(offs_t i, uint8_t data) m_bank3->set_base(ram + 0xc000); break; case 1 : - space.install_write_bank(0x0000, 0x8fff, "bank1"); - space.install_write_bank(0x9000, 0xbfff, "bank2"); + space.install_write_bank(0x0000, 0x8fff, m_bank1); + space.install_write_bank(0x9000, 0xbfff, m_bank2); m_bank1->set_base(ram + 0x10000); m_bank2->set_base(ram + 0x19000); @@ -233,12 +233,12 @@ void special_state::erik_set_bank() uint8_t *ram = m_ram->pointer(); address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_write_bank(0x0000, 0x3fff, "bank1"); - space.install_write_bank(0x4000, 0x8fff, "bank2"); - space.install_write_bank(0x9000, 0xbfff, "bank3"); - space.install_write_bank(0xc000, 0xefff, "bank4"); - space.install_write_bank(0xf000, 0xf7ff, "bank5"); - space.install_write_bank(0xf800, 0xffff, "bank6"); + space.install_write_bank(0x0000, 0x3fff, m_bank1); + space.install_write_bank(0x4000, 0x8fff, m_bank2); + space.install_write_bank(0x9000, 0xbfff, m_bank3); + space.install_write_bank(0xc000, 0xefff, m_bank4); + space.install_write_bank(0xf000, 0xf7ff, m_bank5); + space.install_write_bank(0xf800, 0xffff, m_bank6); switch(bank1) { diff --git a/src/mame/machine/ti85.cpp b/src/mame/machine/ti85.cpp index d6dac529553..60d52b15f5b 100644 --- a/src/mame/machine/ti85.cpp +++ b/src/mame/machine/ti85.cpp @@ -141,7 +141,7 @@ void ti85_state::ti8x_update_bank(address_space &space, uint8_t bank, uint8_t *b membank(tag[bank&3])->set_base(base + (0x4000 * page)); if (is_ram) - space.install_write_bank(bank * 0x4000, bank * 0x4000 + 0x3fff, tag[bank&3]); + space.install_write_bank(bank * 0x4000, bank * 0x4000 + 0x3fff, membank(tag[bank&3])); else space.nop_write(bank * 0x4000, bank * 0x4000 + 0x3fff); } diff --git a/src/mame/machine/vsnes.cpp b/src/mame/machine/vsnes.cpp index 4933f6941a8..889a0b74f3b 100644 --- a/src/mame/machine/vsnes.cpp +++ b/src/mame/machine/vsnes.cpp @@ -218,9 +218,8 @@ MACHINE_START_MEMBER(vsnes_state,vsnes) { for (i = 0; i < 8; i++) { - ppu1_space.install_read_bank(0x0400 * i, 0x0400 * i + 0x03ff, chr_banknames[i]); - m_bank_vrom[i] = membank(chr_banknames[i]); - m_bank_vrom[i]->configure_entries(0, m_vrom_banks, m_vrom[0], 0x400); + ppu1_space.install_read_bank(0x0400 * i, 0x0400 * i + 0x03ff, m_chr_banks[i]); + m_chr_banks[i]->configure_entries(0, m_vrom_banks, m_vrom[0], 0x400); } v_set_videorom_bank(0, 8, 0); } @@ -253,11 +252,9 @@ MACHINE_START_MEMBER(vsnes_state,vsdual) m_ppu1->space(AS_PROGRAM).install_readwrite_handler(0x2000, 0x3eff, read8sm_delegate(*this, FUNC(vsnes_state::vsnes_nt0_r)), write8sm_delegate(*this, FUNC(vsnes_state::vsnes_nt0_w))); m_ppu2->space(AS_PROGRAM).install_readwrite_handler(0x2000, 0x3eff, read8sm_delegate(*this, FUNC(vsnes_state::vsnes_nt1_r)), write8sm_delegate(*this, FUNC(vsnes_state::vsnes_nt1_w))); // read only! - m_ppu1->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, "bank2"); + m_ppu1->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, m_bank_vrom[0]); // read only! - m_ppu2->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, "bank3"); - m_bank_vrom[0] = membank("bank2"); - m_bank_vrom[1] = membank("bank3"); + m_ppu2->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, m_bank_vrom[1]); m_bank_vrom[0]->configure_entries(0, m_vrom_size[0] / 0x2000, m_vrom[0], 0x2000); m_bank_vrom[1]->configure_entries(0, m_vrom_size[1] / 0x2000, m_vrom[1], 0x2000); m_bank_vrom[0]->set_entry(0); @@ -280,8 +277,7 @@ MACHINE_START_MEMBER(vsnes_state, bootleg) m_vrom_banks = m_vrom_size[0] / 0x2000; /* establish chr banks */ - m_ppu1->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, "bank2"); - m_bank_vrom[0] = membank("bank2"); + m_ppu1->space(AS_PROGRAM).install_read_bank(0x0000, 0x1fff, m_bank_vrom[0]); m_bank_vrom[0]->configure_entries(0, m_vrom_banks, m_vrom[0], 0x2000); m_bank_vrom[0]->set_entry(0); } @@ -830,7 +826,9 @@ void vsnes_state::init_MMC3() m_maincpu->space(AS_PROGRAM).install_write_handler(0x8000, 0xffff, write8sm_delegate(*this, FUNC(vsnes_state::mapper4_w))); /* extra ram at $6000-$7fff */ - m_maincpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff); + m_extraram = std::make_unique<uint8_t[]>(0x2000); + save_pointer(NAME(m_extraram.get()), 0x2000); + m_maincpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff, m_extraram.get()); } /* Vs. RBI Baseball */ @@ -1028,7 +1026,9 @@ void vsnes_state::init_bnglngby() m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x0231, 0x0231, read8smo_delegate(*this, FUNC(vsnes_state::set_bnglngby_irq_r)), write8smo_delegate(*this, FUNC(vsnes_state::set_bnglngby_irq_w))); /* extra ram */ - m_maincpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff); + m_extraram = std::make_unique<uint8_t[]>(0x2000); + save_pointer(NAME(m_extraram.get()), 0x2000); + m_maincpu->space(AS_PROGRAM).install_ram(0x6000, 0x7fff, m_extraram.get()); m_ret = 0; diff --git a/src/mame/video/abc80.cpp b/src/mame/video/abc80.cpp index c5cf846b425..98f3675146f 100644 --- a/src/mame/video/abc80.cpp +++ b/src/mame/video/abc80.cpp @@ -170,9 +170,6 @@ void abc80_state::video_start() m_vsync_off_timer = timer_alloc(TIMER_ID_VSYNC_OFF); m_vsync_off_timer->adjust(m_screen->time_until_pos(16, 0), 0, m_screen->frame_period()); - - // allocate memory - m_video_ram.allocate(0x400); } diff --git a/src/mame/video/abc800.cpp b/src/mame/video/abc800.cpp index bc6f3636a9d..be8000e5e25 100644 --- a/src/mame/video/abc800.cpp +++ b/src/mame/video/abc800.cpp @@ -274,10 +274,6 @@ uint32_t abc800m_state::screen_update(screen_device &screen, bitmap_rgb32 &bitma void abc800_state::video_start() { - // allocate memory - m_char_ram.allocate(m_char_ram_size); - m_video_ram.allocate(ABC800_VIDEO_RAM_SIZE); - // register for state saving save_item(NAME(m_hrs)); save_item(NAME(m_fgctl)); diff --git a/src/mame/video/abc802.cpp b/src/mame/video/abc802.cpp index e42d84afc5f..ff5c01c0287 100644 --- a/src/mame/video/abc802.cpp +++ b/src/mame/video/abc802.cpp @@ -176,9 +176,6 @@ WRITE_LINE_MEMBER( abc802_state::vs_w ) void abc802_state::video_start() { - // allocate memory - m_char_ram.allocate(m_char_ram_size); - // register for state saving save_item(NAME(m_flshclk_ctr)); save_item(NAME(m_flshclk)); diff --git a/src/mame/video/abc806.cpp b/src/mame/video/abc806.cpp index 558b217832c..6917ade0d94 100644 --- a/src/mame/video/abc806.cpp +++ b/src/mame/video/abc806.cpp @@ -421,13 +421,6 @@ void abc806_state::hr_update(bitmap_rgb32 &bitmap, const rectangle &cliprect) void abc806_state::video_start() { - // allocate memory - m_char_ram.allocate(m_char_ram_size); - m_attr_ram.allocate(m_char_ram_size); - - uint32_t videoram_size = m_ram->size() - 0x8000; - m_video_ram.allocate(videoram_size); - // register for state saving save_item(NAME(m_txoff)); save_item(NAME(m_40)); diff --git a/src/mame/video/atarimo.cpp b/src/mame/video/atarimo.cpp index 7ceb6e23699..c17dc39e324 100644 --- a/src/mame/video/atarimo.cpp +++ b/src/mame/video/atarimo.cpp @@ -145,7 +145,8 @@ atari_motion_objects_device::atari_motion_objects_device(const machine_config &m , m_bank(0) , m_xscroll(0) , m_yscroll(0) - , m_slipram(*this, "slip") + , m_slipram(nullptr) + , m_slipramshare(*this, "slip") , m_activelast(nullptr) , m_last_xpos(0) , m_next_xpos(0) @@ -301,6 +302,10 @@ void atari_motion_objects_device::device_start() if (m_maxperline == 0) m_maxperline = MAX_PER_BANK; + // Get the slipram from the share if not already explicitly set + if (!m_slipram) + m_slipram = m_slipramshare; + // allocate and initialize the code lookup int codesize = round_to_powerof2(m_codemask.mask()); m_codelookup.resize(codesize); diff --git a/src/mame/video/atarimo.h b/src/mame/video/atarimo.h index 8fc8e2db95d..be98a3ad8a8 100644 --- a/src/mame/video/atarimo.h +++ b/src/mame/video/atarimo.h @@ -97,7 +97,7 @@ public: void set_xscroll(int xscroll) { m_xscroll = xscroll & m_bitmapxmask; } void set_yscroll(int yscroll) { m_yscroll = yscroll & m_bitmapymask; } void set_scroll(int xscroll, int yscroll) { set_xscroll(xscroll); set_yscroll(yscroll); } - void set_slipram(uint16_t *ram) { m_slipram.set_target(ram, 2); } + void set_slipram(uint16_t *ram) { m_slipram = ram; } // rendering virtual void draw(bitmap_ind16 &bitmap, const rectangle &cliprect) override; @@ -201,21 +201,22 @@ private: // live state emu_timer * m_force_update_timer; // timer for forced updating - uint32_t m_bank; // current bank number - uint32_t m_xscroll; // xscroll offset - uint32_t m_yscroll; // yscroll offset + uint32_t m_bank; // current bank number + uint32_t m_xscroll; // xscroll offset + uint32_t m_yscroll; // yscroll offset // arrays - optional_shared_ptr<uint16_t> m_slipram; // pointer to the SLIP RAM + uint16_t * m_slipram; // pointer to the SLIP RAM + optional_shared_ptr<u16> m_slipramshare; std::vector<uint32_t> m_codelookup; // lookup table for codes std::vector<uint8_t> m_colorlookup; // lookup table for colors std::vector<uint8_t> m_gfxlookup; // lookup table for graphics - uint16_t m_activelist[MAX_PER_BANK*4]; // active list - uint16_t * m_activelast; // last entry in the active list + uint16_t m_activelist[MAX_PER_BANK*4]; // active list + uint16_t * m_activelast; // last entry in the active list - uint32_t m_last_xpos; // (during processing) the previous X position - uint32_t m_next_xpos; // (during processing) the next X position + uint32_t m_last_xpos; // (during processing) the previous X position + uint32_t m_next_xpos; // (during processing) the next X position required_device<gfxdecode_device> m_gfxdecode; }; diff --git a/src/mame/video/avgdvg.cpp b/src/mame/video/avgdvg.cpp index 45badf975a5..c247bb33fbc 100644 --- a/src/mame/video/avgdvg.cpp +++ b/src/mame/video/avgdvg.cpp @@ -1426,8 +1426,8 @@ void dvg_device::device_start() avgdvg_device::avgdvg_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock) - , m_vectorram(*this, "vectorram", 0) - , m_colorram(*this, "colorram", 0) + , m_vectorram(*this, "vectorram") + , m_colorram(*this, "colorram") , m_prom(*this, "prom") , m_vector(*this, finder_base::DUMMY_TAG) { diff --git a/src/mame/video/comx35.cpp b/src/mame/video/comx35.cpp index 2930a025e5d..80183877f8a 100644 --- a/src/mame/video/comx35.cpp +++ b/src/mame/video/comx35.cpp @@ -83,8 +83,6 @@ WRITE_LINE_MEMBER( comx35_state::prd_w ) void comx35_state::video_start() { - // allocate memory - m_char_ram.allocate(COMX35_CHARRAM_SIZE); } /* Machine Drivers */ diff --git a/src/mame/video/dgn_beta.cpp b/src/mame/video/dgn_beta.cpp index 1850f89f815..d2f134e6baa 100644 --- a/src/mame/video/dgn_beta.cpp +++ b/src/mame/video/dgn_beta.cpp @@ -101,7 +101,7 @@ the access to the video memory is unclear to me at the moment. MC6845_UPDATE_ROW( dgn_beta_state::crtc_update_row ) { rgb_t const *const palette = m_palette->palette()->entry_list_raw(); - uint8_t const *const videoram = m_videoram; + uint8_t const *const videoram = m_ram->pointer(); uint32_t *p = &bitmap.pix(y); int i; if(IsTextMode) diff --git a/src/mame/video/fromance.cpp b/src/mame/video/fromance.cpp index d0f0e9f4d00..605469344a4 100644 --- a/src/mame/video/fromance.cpp +++ b/src/mame/video/fromance.cpp @@ -327,7 +327,7 @@ uint32_t fromance_state::screen_update_pipedrm(screen_device &screen, bitmap_ind m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - m_spr_old->turbofrc_draw_sprites((uint16_t*)sram, m_spriteram.bytes(), 0, bitmap, cliprect, screen.priority(), 0); - m_spr_old->turbofrc_draw_sprites((uint16_t*)sram, m_spriteram.bytes(), 0, bitmap, cliprect, screen.priority(), 1); + m_spr_old->turbofrc_draw_sprites((uint16_t*)sram, m_spriteram_size, 0, bitmap, cliprect, screen.priority(), 0); + m_spr_old->turbofrc_draw_sprites((uint16_t*)sram, m_spriteram_size, 0, bitmap, cliprect, screen.priority(), 1); return 0; } diff --git a/src/mame/video/igs017_igs031.cpp b/src/mame/video/igs017_igs031.cpp index a214d93d2e4..2e07c242f63 100644 --- a/src/mame/video/igs017_igs031.cpp +++ b/src/mame/video/igs017_igs031.cpp @@ -68,10 +68,10 @@ igs017_igs031_device::igs017_igs031_device(const machine_config &mconfig, const , device_memory_interface(mconfig, *this) , m_palette_scramble_cb(*this, FUNC(igs017_igs031_device::palette_callback_straight)) , m_space_config("igs017_igs031", ENDIANNESS_BIG, 8,15, 0, address_map_constructor(FUNC(igs017_igs031_device::map), this)) - , m_spriteram(*this, "spriteram", 0) - , m_fg_videoram(*this, "fg_videoram", 0) - , m_bg_videoram(*this, "bg_videoram", 0) - , m_palram(*this, "palram", 0) + , m_spriteram(*this, "spriteram") + , m_fg_videoram(*this, "fg_videoram") + , m_bg_videoram(*this, "bg_videoram") + , m_palram(*this, "palram") , m_i8255(*this, finder_base::DUMMY_TAG) , m_palette(*this, "palette") , m_revbits(false) diff --git a/src/mame/video/ojankohs.cpp b/src/mame/video/ojankohs.cpp index 57509869188..a7970d5b300 100644 --- a/src/mame/video/ojankohs.cpp +++ b/src/mame/video/ojankohs.cpp @@ -248,29 +248,21 @@ void ojankohs_state::ojankoc_videoram_w(offs_t offset, uint8_t data) VIDEO_START_MEMBER(ojankohs_state,ojankohs) { m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ojankohs_state::ojankohs_get_tile_info)), TILEMAP_SCAN_ROWS, 8, 4, 64, 64); -// m_videoram = std::make_unique<uint8_t[]>(0x1000); -// m_colorram = std::make_unique<uint8_t[]>(0x1000); -// m_paletteram = std::make_unique<uint8_t[]>(0x800); } VIDEO_START_MEMBER(ojankohs_state,ojankoy) { m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ojankohs_state::ojankoy_get_tile_info)), TILEMAP_SCAN_ROWS, 8, 4, 64, 64); -// m_videoram = std::make_unique<uint8_t[]>(0x2000); -// m_colorram = std::make_unique<uint8_t[]>(0x1000); } VIDEO_START_MEMBER(ojankohs_state,ccasino) { VIDEO_START_CALL_MEMBER(ojankoy); - m_paletteram.allocate(0x800); } VIDEO_START_MEMBER(ojankohs_state,ojankoc) { m_screen->register_screen_bitmap(m_tmpbitmap); - m_videoram.allocate(0x8000); - m_paletteram.allocate(0x20); save_item(NAME(m_tmpbitmap)); } diff --git a/src/mame/video/qix.cpp b/src/mame/video/qix.cpp index 5a10f61d378..61eb6017f0b 100644 --- a/src/mame/video/qix.cpp +++ b/src/mame/video/qix.cpp @@ -22,9 +22,6 @@ void qix_state::video_start() { - /* allocate memory for the full video RAM */ - m_videoram.allocate(256 * 256); - /* initialize the palette */ for (int x = 0; x < 0x400; x++) set_pen(x); diff --git a/src/mame/video/suna8.cpp b/src/mame/video/suna8.cpp index edb3b1e9f62..e5eead2cbdb 100644 --- a/src/mame/video/suna8.cpp +++ b/src/mame/video/suna8.cpp @@ -17,47 +17,12 @@ sent to the screen. Each sprite uses 4 bytes, held within the last page of tiles. - Set TILEMAPS to 1 to debug. - Press Z (you see the "tilemaps" in RAM) or - Press X (you see the "tilemaps" in ROM) then - - - use Q&W to cycle through the pages. - - Use E&R to cycle through the tiles banks. - - Use A&S to cycle through the ROM banks (only with X pressed, of course). - ***************************************************************************/ #include "emu.h" #include "includes/suna8.h" #include "drawgfxt.ipp" -/*************************************************************************** - For Debug: there's no tilemap, just sprites. -***************************************************************************/ -#if TILEMAPS -TILE_GET_INFO_MEMBER(suna8_state::get_tile_info) -{ - uint8_t code, attr; - - if (machine().input().code_pressed(KEYCODE_X)) - { - uint8_t *rom = memregion("maincpu")->base() + 0x10000 + 0x4000 * m_trombank; - code = rom[ 2 * tile_index + 0 ]; - attr = rom[ 2 * tile_index + 1 ]; - } - else - { - code = m_spriteram[ 2 * tile_index + 0 ]; - attr = m_spriteram[ 2 * tile_index + 1 ]; - } - tileinfo.set(m_page / 8, - ( (attr & 0x03) << 8 ) + code + m_tiles*0x400, - (attr >> 2) & 0xf, - TILE_FLIPYX( (attr >> 6) & 3 )); -} -#endif - - uint8_t suna8_state::banked_paletteram_r(offs_t offset) { offset += m_palettebank * 0x200; @@ -67,24 +32,18 @@ uint8_t suna8_state::banked_paletteram_r(offs_t offset) uint8_t suna8_state::suna8_banked_spriteram_r(offs_t offset) { offset += m_spritebank * 0x2000; - return m_spriteram[offset]; + return m_banked_spriteram[offset]; } void suna8_state::suna8_spriteram_w(offs_t offset, uint8_t data) { m_spriteram[offset] = data; -#if TILEMAPS - m_bg_tilemap->mark_tile_dirty(offset/2); -#endif } void suna8_state::suna8_banked_spriteram_w(offs_t offset, uint8_t data) { offset += m_spritebank * 0x2000; - m_spriteram[offset] = data; -#if TILEMAPS - m_bg_tilemap->mark_tile_dirty(offset/2); -#endif + m_banked_spriteram[offset] = data; } /* @@ -145,20 +104,6 @@ void suna8_state::suna8_vh_start_common(bool has_text, GFXBANK_TYPE_T gfxbank_ty m_gfxbank = 0; m_gfxbank_type = gfxbank_type; m_palettebank = 0; - - if (!m_has_text) - { - m_banked_paletteram.allocate(0x200 * 2); - - m_spriteram.allocate(0x2000 * 2 * 2); // 2 RAM banks, sparkman has 2 "chips" - memset(m_spriteram,0,0x2000 * 2 * 2); // helps debugging - } - -#if TILEMAPS - m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(suna8_state::get_tile_info)), TILEMAP_SCAN_COLS, - 8, 8, 0x20*(m_has_text ? 4 : 16), 0x20); - m_bg_tilemap->set_transparent_pen(15); -#endif } VIDEO_START_MEMBER(suna8_state,suna8_text) { suna8_vh_start_common( true, GFXBANK_TYPE_SPARKMAN); } @@ -231,7 +176,7 @@ while (0) void suna8_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int start, int end, int which) { - uint8_t *spriteram = m_spriteram + which * 0x2000 * 2; + uint8_t *spriteram = m_spriteram ? m_spriteram : m_banked_spriteram + which * 0x2000 * 2; int mx = 0; // multisprite x counter @@ -459,7 +404,7 @@ void suna8_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, cons void suna8_state::draw_text_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int start, int end, int ypos, bool write_mask) { - uint8_t *spriteram = m_spriteram; + uint8_t *spriteram = m_spriteram ? m_spriteram : m_banked_spriteram; int max_x = m_screen->width() - 8; int max_y = m_screen->height() - 8; @@ -542,37 +487,6 @@ uint32_t suna8_state::screen_update_suna8(screen_device &screen, bitmap_ind16 &b // see hardhead, hardhea2 test mode (press button 2 for both players) bitmap.fill(0xff, cliprect); -#ifdef MAME_DEBUG -#if TILEMAPS - if (machine().input().code_pressed(KEYCODE_Z) || machine().input().code_pressed(KEYCODE_X)) - { - int max_tiles = memregion("gfx1")->bytes() / (0x400 * 0x20); - - if (machine().input().code_pressed_once(KEYCODE_Q)) { m_page--; machine().tilemap().mark_all_dirty(); } - if (machine().input().code_pressed_once(KEYCODE_W)) { m_page++; machine().tilemap().mark_all_dirty(); } - if (machine().input().code_pressed_once(KEYCODE_E)) { m_tiles--; machine().tilemap().mark_all_dirty(); } - if (machine().input().code_pressed_once(KEYCODE_R)) { m_tiles++; machine().tilemap().mark_all_dirty(); } - if (machine().input().code_pressed_once(KEYCODE_A)) { m_trombank--; machine().tilemap().mark_all_dirty(); } - if (machine().input().code_pressed_once(KEYCODE_S)) { m_trombank++; machine().tilemap().mark_all_dirty(); } - - m_trombank &= 0xf; - m_page &= m_has_text ? 3 : (m_gfxdecode->gfx(1) ? 15 : 7); - m_tiles %= max_tiles; - if (m_tiles < 0) m_tiles += max_tiles; - - m_bg_tilemap->set_scrollx(0, 0x100 * m_page); - m_bg_tilemap->set_scrolly(0, 0); - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); -#if 1 - popmessage("%02X %02X %02X - p%2X g%02X r%02X", - m_rombank, m_palettebank, m_spritebank, - m_page, m_tiles, m_trombank); -#endif - return 0; - } -#endif -#endif - // Sprites draw_sprites(screen, bitmap, cliprect, 0x1d00, 0x2000, 0); diff --git a/src/mame/video/tc0150rod.cpp b/src/mame/video/tc0150rod.cpp index bb65c4ae8ec..3f81ae26ada 100644 --- a/src/mame/video/tc0150rod.cpp +++ b/src/mame/video/tc0150rod.cpp @@ -16,7 +16,7 @@ DEFINE_DEVICE_TYPE(TC0150ROD, tc0150rod_device, "tc0150rod", "Taito TC0150ROD") tc0150rod_device::tc0150rod_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : device_t(mconfig, TC0150ROD, tag, owner, clock) - , m_roadgfx(*this, DEVICE_SELF, 0x40000) + , m_roadgfx(*this, DEVICE_SELF) { } diff --git a/src/mame/video/tmc600.cpp b/src/mame/video/tmc600.cpp index c87fee27b5f..73bcd5c6412 100644 --- a/src/mame/video/tmc600.cpp +++ b/src/mame/video/tmc600.cpp @@ -89,9 +89,6 @@ WRITE_LINE_MEMBER( tmc600_state::prd_w ) void tmc600_state::video_start() { - // allocate memory - m_color_ram.allocate(TMC600_PAGE_RAM_SIZE); - // state saving save_item(NAME(m_vismac_reg_latch)); save_item(NAME(m_vismac_color_latch)); diff --git a/src/mame/video/toaplan1.cpp b/src/mame/video/toaplan1.cpp index 5fd0be9203e..e90089eca16 100644 --- a/src/mame/video/toaplan1.cpp +++ b/src/mame/video/toaplan1.cpp @@ -192,7 +192,6 @@ void toaplan1_state::vram_alloc() void toaplan1_state::spritevram_alloc() { - m_spriteram.allocate(TOAPLAN1_SPRITERAM_SIZE / 2); m_buffered_spriteram = make_unique_clear<u16[]>(TOAPLAN1_SPRITERAM_SIZE / 2); m_spritesizeram = make_unique_clear<u16[]>(TOAPLAN1_SPRITESIZERAM_SIZE / 2); m_buffered_spritesizeram = make_unique_clear<u16[]>(TOAPLAN1_SPRITESIZERAM_SIZE / 2); @@ -234,8 +233,8 @@ void toaplan1_rallybik_state::video_start() create_tilemaps(); vram_alloc(); - m_buffered_spriteram = make_unique_clear<u16[]>(m_spriteram.bytes() / 2); - save_pointer(NAME(m_buffered_spriteram), m_spriteram.bytes() / 2); + m_buffered_spriteram = make_unique_clear<u16[]>(m_spriteram.share()->bytes() / 2); + save_pointer(NAME(m_buffered_spriteram), m_spriteram.share()->bytes() / 2); m_tilemap[0]->set_scrolldx(-0x00d - 6, -0x80 + 6); m_tilemap[1]->set_scrolldx(-0x00d - 4, -0x80 + 4); @@ -772,7 +771,7 @@ void toaplan1_state::draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, c u16 *size = (u16 *)m_buffered_spritesizeram.get(); int fcu_flipscreen = m_fcu_flipscreen; - for (int offs = m_spriteram.bytes() / 2 - 4; offs >= 0; offs -= 4) + for (int offs = m_spriteram.share()->bytes() / 2 - 4; offs >= 0; offs -= 4) { if (!(source[offs] & 0x8000)) { @@ -840,7 +839,7 @@ u32 toaplan1_rallybik_state::screen_update(screen_device &screen, bitmap_rgb32 & { log_vram(); - m_spritegen->draw_sprites_to_tempbitmap(cliprect, m_buffered_spriteram.get(), m_spriteram.bytes()); + m_spritegen->draw_sprites_to_tempbitmap(cliprect, m_buffered_spriteram.get(), m_spriteram.share()->bytes()); // first draw everything, including "disabled" tiles and priority 0 m_tilemap[0]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE | TILEMAP_DRAW_ALL_CATEGORIES, 0); @@ -896,7 +895,7 @@ WRITE_LINE_MEMBER(toaplan1_rallybik_state::screen_vblank) // rising edge if (state) { - memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.bytes()); + memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.share()->bytes()); interrupt(); } } @@ -906,7 +905,7 @@ WRITE_LINE_MEMBER(toaplan1_state::screen_vblank) // rising edge if (state) { - memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.bytes()); + memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.share()->bytes()); memcpy(m_buffered_spritesizeram.get(), m_spritesizeram.get(), TOAPLAN1_SPRITESIZERAM_SIZE); interrupt(); } @@ -917,7 +916,7 @@ WRITE_LINE_MEMBER(toaplan1_samesame_state::screen_vblank) // rising edge if (state) { - memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.bytes()); + memcpy(m_buffered_spriteram.get(), m_spriteram, m_spriteram.share()->bytes()); memcpy(m_buffered_spritesizeram.get(), m_spritesizeram.get(), TOAPLAN1_SPRITESIZERAM_SIZE); interrupt(); m_maincpu->set_input_line(M68K_IRQ_2, HOLD_LINE); /* Frame done */ diff --git a/src/mame/video/v1050.cpp b/src/mame/video/v1050.cpp index b045e93f1c7..3b65ad29cef 100644 --- a/src/mame/video/v1050.cpp +++ b/src/mame/video/v1050.cpp @@ -98,9 +98,6 @@ WRITE_LINE_MEMBER( v1050_state::crtc_vs_w ) void v1050_state::video_start() { - /* allocate memory */ - m_attr_ram.allocate(V1050_VIDEORAM_SIZE); - /* register for state saving */ save_item(NAME(m_attr)); } diff --git a/src/mame/video/zaxxon.cpp b/src/mame/video/zaxxon.cpp index b9985fd4d41..c420c27d3f6 100644 --- a/src/mame/video/zaxxon.cpp +++ b/src/mame/video/zaxxon.cpp @@ -156,9 +156,6 @@ VIDEO_START_MEMBER(zaxxon_state,razmataz) VIDEO_START_MEMBER(zaxxon_state,congo) { - /* allocate our own spriteram since it is not accessible by the main CPU */ - m_spriteram.allocate(0x100); - /* register for save states */ save_item(NAME(m_congo_fg_bank)); save_item(NAME(m_congo_color_bank)); |