summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2022-09-18 01:15:19 +0200
committer hap <happppp@users.noreply.github.com>2022-09-18 01:15:31 +0200
commitec295d16b684dc32433ec1fc4676593e6984c252 (patch)
treea0241cdc4a9fcc19ddd79b5350a8a7e9fd955e47
parente5bc8a44bd19863bf180c29e2ef35a64203abd8b (diff)
upd7810: upd78c06 has internal rom
-rw-r--r--hash/gamepock.xml20
-rw-r--r--src/devices/cpu/upd7810/upd7810.cpp22
-rw-r--r--src/devices/cpu/upd7810/upd7810.h5
-rw-r--r--src/devices/cpu/upd7810/upd7811.cpp10
-rw-r--r--src/mame/epoch/gamepock.cpp22
-rw-r--r--src/mame/epoch/gamepock.h8
-rw-r--r--src/mame/epoch/gamepock_m.cpp10
-rw-r--r--src/mame/handheld/gmaster.cpp10
8 files changed, 50 insertions, 57 deletions
diff --git a/hash/gamepock.xml b/hash/gamepock.xml
index 0127607e0f8..57f87944036 100644
--- a/hash/gamepock.xml
+++ b/hash/gamepock.xml
@@ -11,8 +11,8 @@ license:CC0
<publisher>Epoch</publisher>
<info name="serial" value="1" />
<part name="cart" interface="gamepock_cart">
- <dataarea name="rom" size="8192">
- <rom name="astrobom.bin" size="8192" crc="b0fd260f" sha1="453a0f3c0952ebd8e691316c39960731f1996c09"/>
+ <dataarea name="rom" size="0x2000">
+ <rom name="astrobom.bin" size="0x2000" crc="b0fd260f" sha1="453a0f3c0952ebd8e691316c39960731f1996c09"/>
</dataarea>
</part>
</software>
@@ -23,8 +23,8 @@ license:CC0
<publisher>Epoch</publisher>
<info name="serial" value="2" />
<part name="cart" interface="gamepock_cart">
- <dataarea name="rom" size="8192">
- <rom name="blockmaz.bin" size="8192" crc="cfb3291b" sha1="50dc5736200986b326b372c17c233c4180474471"/>
+ <dataarea name="rom" size="0x2000">
+ <rom name="blockmaz.bin" size="0x2000" crc="cfb3291b" sha1="50dc5736200986b326b372c17c233c4180474471"/>
</dataarea>
</part>
</software>
@@ -35,8 +35,8 @@ license:CC0
<publisher>Epoch</publisher>
<info name="serial" value="3" />
<part name="cart" interface="gamepock_cart">
- <dataarea name="rom" size="16384">
- <rom name="pokemahj.bin" size="16384" crc="5c3eed48" sha1="918e1caa16cfae6b74da2026f3426d0a5818061c"/>
+ <dataarea name="rom" size="0x4000">
+ <rom name="pokemahj.bin" size="0x4000" crc="5c3eed48" sha1="918e1caa16cfae6b74da2026f3426d0a5818061c"/>
</dataarea>
</part>
</software>
@@ -47,8 +47,8 @@ license:CC0
<publisher>Epoch</publisher>
<info name="serial" value="4" />
<part name="cart" interface="gamepock_cart">
- <dataarea name="rom" size="8192">
- <rom name="pokereve.bin" size="8192" crc="1c461f91" sha1="ead4a4efe5439e2ec1f6befb50c350f73919da8d"/>
+ <dataarea name="rom" size="0x2000">
+ <rom name="pokereve.bin" size="0x2000" crc="1c461f91" sha1="ead4a4efe5439e2ec1f6befb50c350f73919da8d"/>
</dataarea>
</part>
</software>
@@ -59,8 +59,8 @@ license:CC0
<publisher>Epoch</publisher>
<info name="serial" value="5" />
<part name="cart" interface="gamepock_cart">
- <dataarea name="rom" size="8192">
- <rom name="soukoban.bin" size="8192" crc="5d6f7819" sha1="61ef6483e8f9935dd8b6351fd2bdfda3af3899bd"/>
+ <dataarea name="rom" size="0x2000">
+ <rom name="soukoban.bin" size="0x2000" crc="5d6f7819" sha1="61ef6483e8f9935dd8b6351fd2bdfda3af3899bd"/>
</dataarea>
</part>
</software>
diff --git a/src/devices/cpu/upd7810/upd7810.cpp b/src/devices/cpu/upd7810/upd7810.cpp
index 1fe74beca9e..ee60c0b0203 100644
--- a/src/devices/cpu/upd7810/upd7810.cpp
+++ b/src/devices/cpu/upd7810/upd7810.cpp
@@ -392,6 +392,18 @@ void upd7810_device::upd_internal_256_ram_map(address_map &map)
map(0xff00, 0xffff).ram();
}
+void upd7810_device::upd_internal_4096_rom_128_ram_map(address_map &map)
+{
+ map(0x0000, 0x0fff).rom();
+ map(0xff80, 0xffff).ram();
+}
+
+void upd7810_device::upd_internal_4096_rom_256_ram_map(address_map &map)
+{
+ map(0x0000, 0x0fff).rom();
+ map(0xff00, 0xffff).ram();
+}
+
upd7810_device::upd7810_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_map)
: cpu_device(mconfig, type, tag, owner, clock)
, m_to_func(*this)
@@ -494,13 +506,13 @@ void upd78c05_device::configure_ops()
m_opXX = s_opXX_78c05;
}
-upd78c05_device::upd78c05_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : upd78c05_device(mconfig, UPD78C05, tag, owner, clock)
+upd78c05_device::upd78c05_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_map)
+ : upd7810_device(mconfig, type, tag, owner, clock, internal_map)
{
}
-upd78c05_device::upd78c05_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
- : upd7810_device(mconfig, type, tag, owner, clock, address_map_constructor(FUNC(upd78c05_device::upd_internal_128_ram_map), this))
+upd78c05_device::upd78c05_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : upd78c05_device(mconfig, UPD78C05, tag, owner, clock, address_map_constructor(FUNC(upd78c05_device::upd_internal_128_ram_map), this))
{
}
@@ -517,7 +529,7 @@ void upd78c06_device::configure_ops()
}
upd78c06_device::upd78c06_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : upd78c05_device(mconfig, UPD78C06, tag, owner, clock)
+ : upd78c05_device(mconfig, UPD78C06, tag, owner, clock, address_map_constructor(FUNC(upd78c06_device::upd_internal_4096_rom_128_ram_map), this))
{
}
diff --git a/src/devices/cpu/upd7810/upd7810.h b/src/devices/cpu/upd7810/upd7810.h
index 646a6a1f9fc..40e4b89ff87 100644
--- a/src/devices/cpu/upd7810/upd7810.h
+++ b/src/devices/cpu/upd7810/upd7810.h
@@ -86,7 +86,8 @@ public:
protected:
void upd_internal_128_ram_map(address_map &map);
void upd_internal_256_ram_map(address_map &map);
- void upd_internal_4096_rom_map(address_map &map);
+ void upd_internal_4096_rom_128_ram_map(address_map &map);
+ void upd_internal_4096_rom_256_ram_map(address_map &map);
// flags
enum
@@ -1399,7 +1400,7 @@ public:
upd78c05_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
- upd78c05_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+ upd78c05_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_map);
virtual void device_start() override;
virtual void device_reset() override;
diff --git a/src/devices/cpu/upd7810/upd7811.cpp b/src/devices/cpu/upd7810/upd7811.cpp
index 7ea05837903..e5105e4f9b7 100644
--- a/src/devices/cpu/upd7810/upd7811.cpp
+++ b/src/devices/cpu/upd7810/upd7811.cpp
@@ -23,21 +23,15 @@
*/
-void upd7810_device::upd_internal_4096_rom_map(address_map &map)
-{
- map(0x0000, 0x0fff).rom();
- map(0xff00, 0xffff).ram();
-}
-
DEFINE_DEVICE_TYPE(UPD7811, upd7811_device, "upd7811", "NEC uPD7811")
DEFINE_DEVICE_TYPE(UPD78C11, upd78c11_device, "upd78c11", "NEC uPD78C11")
upd7811_device::upd7811_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : upd7810_device(mconfig, UPD7811, tag, owner, clock, address_map_constructor(FUNC(upd7811_device::upd_internal_4096_rom_map), this))
+ : upd7810_device(mconfig, UPD7811, tag, owner, clock, address_map_constructor(FUNC(upd7811_device::upd_internal_4096_rom_256_ram_map), this))
{
}
upd78c11_device::upd78c11_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : upd78c10_device(mconfig, UPD78C11, tag, owner, clock, address_map_constructor(FUNC(upd78c11_device::upd_internal_4096_rom_map), this))
+ : upd78c10_device(mconfig, UPD78C11, tag, owner, clock, address_map_constructor(FUNC(upd78c11_device::upd_internal_4096_rom_256_ram_map), this))
{
}
diff --git a/src/mame/epoch/gamepock.cpp b/src/mame/epoch/gamepock.cpp
index 15812fe565f..69484ae85ee 100644
--- a/src/mame/epoch/gamepock.cpp
+++ b/src/mame/epoch/gamepock.cpp
@@ -6,7 +6,6 @@
#include "gamepock.h"
#include "bus/generic/carts.h"
-#include "cpu/upd7810/upd7810.h"
#include "emupal.h"
#include "screen.h"
@@ -17,10 +16,11 @@
void gamepock_state::gamepock_mem(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0x0fff).rom();
+ // 0x0000-0x0fff is internal ROM
map(0x1000, 0x3fff).noprw();
- //map(0x4000,0xbfff).rom(); // mapped by the cartslot
+ map(0x4000, 0xbfff).r("cartslot", FUNC(generic_slot_device::read_rom));
map(0xc000, 0xc7ff).mirror(0x0800).ram();
+ // 0xff80-0xffff is internal RAM
}
@@ -43,13 +43,13 @@ INPUT_PORTS_END
void gamepock_state::gamepock(machine_config &config)
{
- upd78c06_device &upd(UPD78C06(config, m_maincpu, 6_MHz_XTAL)); // uPD78C06AG
- upd.set_addrmap(AS_PROGRAM, &gamepock_state::gamepock_mem);
- upd.pa_out_cb().set(FUNC(gamepock_state::port_a_w));
- upd.pb_in_cb().set(FUNC(gamepock_state::port_b_r));
- upd.pb_out_cb().set(FUNC(gamepock_state::port_b_w));
- upd.pc_in_cb().set(FUNC(gamepock_state::port_c_r));
- upd.to_func().set(FUNC(gamepock_state::gamepock_to_w));
+ UPD78C06(config, m_maincpu, 6_MHz_XTAL); // uPD78C06AG
+ m_maincpu->set_addrmap(AS_PROGRAM, &gamepock_state::gamepock_mem);
+ m_maincpu->pa_out_cb().set(FUNC(gamepock_state::port_a_w));
+ m_maincpu->pb_in_cb().set(FUNC(gamepock_state::port_b_r));
+ m_maincpu->pb_out_cb().set(FUNC(gamepock_state::port_b_w));
+ m_maincpu->pc_in_cb().set(FUNC(gamepock_state::port_c_r));
+ m_maincpu->to_func().set(m_speaker, FUNC(speaker_sound_device::level_w));
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
screen.set_refresh_hz(60);
@@ -65,7 +65,7 @@ void gamepock_state::gamepock(machine_config &config)
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50);
/* cartridge */
- GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "gamepock_cart");
+ GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "gamepock_cart");
/* Software lists */
SOFTWARE_LIST(config, "cart_list").set_original("gamepock");
diff --git a/src/mame/epoch/gamepock.h b/src/mame/epoch/gamepock.h
index c886f2898cc..5eefec5ae56 100644
--- a/src/mame/epoch/gamepock.h
+++ b/src/mame/epoch/gamepock.h
@@ -6,6 +6,7 @@
#pragma once
#include "bus/generic/slot.h"
+#include "cpu/upd7810/upd7810.h"
#include "sound/spkrdev.h"
class gamepock_state : public driver_device
@@ -14,8 +15,7 @@ public:
gamepock_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_speaker(*this, "speaker"),
- m_cart(*this, "cartslot")
+ m_speaker(*this, "speaker")
{ }
void gamepock(machine_config &config);
@@ -40,16 +40,14 @@ private:
void port_b_w(uint8_t data);
uint8_t port_c_r();
uint32_t screen_update_gamepock(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- DECLARE_WRITE_LINE_MEMBER(gamepock_to_w);
void gamepock_mem(address_map &map);
uint8_t m_port_a = 0U;
uint8_t m_port_b = 0U;
HD44102CH m_hd44102ch[3];
- required_device<cpu_device> m_maincpu;
+ required_device<upd78c06_device> m_maincpu;
required_device<speaker_sound_device> m_speaker;
- required_device<generic_slot_device> m_cart;
};
#endif // MAME_INCLUDES_GAMEPOCK_H
diff --git a/src/mame/epoch/gamepock_m.cpp b/src/mame/epoch/gamepock_m.cpp
index a201770be0c..201c1a58660 100644
--- a/src/mame/epoch/gamepock_m.cpp
+++ b/src/mame/epoch/gamepock_m.cpp
@@ -138,10 +138,6 @@ void gamepock_state::machine_reset()
hd44102ch_init( 0 );
hd44102ch_init( 1 );
hd44102ch_init( 2 );
-
- if (m_cart->exists())
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000,0xbfff, read8sm_delegate(*m_cart, FUNC(generic_slot_device::read_rom)));
-
}
uint32_t gamepock_state::screen_update_gamepock(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
@@ -215,9 +211,3 @@ uint32_t gamepock_state::screen_update_gamepock(screen_device &screen, bitmap_in
return 0;
}
-
-/* This is called whenever the T0 pin switches state */
-WRITE_LINE_MEMBER(gamepock_state::gamepock_to_w)
-{
- m_speaker->level_w(state & 1);
-}
diff --git a/src/mame/handheld/gmaster.cpp b/src/mame/handheld/gmaster.cpp
index 69bb98878e5..ae1d0d56f67 100644
--- a/src/mame/handheld/gmaster.cpp
+++ b/src/mame/handheld/gmaster.cpp
@@ -28,8 +28,8 @@ Watara SuperVision), so perhaps it's them.
TODO:
- does port B do anything?
-- hspace should have some kind of volume filter on the bgm? not sure what
- what controls it, or maybe it's a hardware quirk
+- according to one video on Youtube, hspace should have some kind of volume
+ filter on the bgm? not sure what controls it, or maybe it's a hardware quirk
BTANB:
- LCD flickers partially, especially bad in finitezn
@@ -60,8 +60,7 @@ public:
m_maincpu(*this, "maincpu"),
m_lcd(*this, "lcd%u", 0),
m_screen(*this, "screen"),
- m_speaker(*this, "speaker"),
- m_cart(*this, "cartslot")
+ m_speaker(*this, "speaker")
{ }
void gmaster(machine_config &config);
@@ -74,7 +73,6 @@ private:
required_device_array<sed1520_device, 2> m_lcd;
required_device<screen_device> m_screen;
required_device<speaker_sound_device> m_speaker;
- required_device<generic_slot_device> m_cart;
u8 io_r(offs_t offset);
void io_w(offs_t offset, u8 data);
@@ -250,7 +248,7 @@ void gmaster_state::gmaster(machine_config &config)
SPEAKER_SOUND(config, m_speaker).add_route(0, "mono", 0.50);
// cartridge
- GENERIC_CARTSLOT(config, m_cart, generic_linear_slot, "gmaster_cart").set_must_be_loaded(true);
+ GENERIC_CARTSLOT(config, "cartslot", generic_linear_slot, "gmaster_cart").set_must_be_loaded(true);
SOFTWARE_LIST(config, "cart_list").set_original("gmaster");
}