summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author etabeta78 <etabeta78@users.noreply.github.com>2014-12-24 09:19:16 +0100
committer etabeta78 <etabeta78@users.noreply.github.com>2014-12-24 09:19:16 +0100
commitff1850ea26cb68921a14fd887819b33b6e1a92eb (patch)
tree0ec0175247ef0f6fd54457b57dbc61ffcf52947d
parent6448cf6be46de9bcfc262fb71d39bbda0580549c (diff)
(MESS) tutor.c: added correct mapping for 32K carts, promoting
recent Baseball dump to working state. [Fabio Priuli]
-rw-r--r--hash/tutor.xml2
-rw-r--r--src/mess/drivers/tutor.c44
2 files changed, 36 insertions, 10 deletions
diff --git a/hash/tutor.xml b/hash/tutor.xml
index 9cd9ddd3532..d092af95fb3 100644
--- a/hash/tutor.xml
+++ b/hash/tutor.xml
@@ -80,7 +80,7 @@ Battlefighter (Original) (Unreleased - Prototype Stage)
<softwarelist name="tutor" description="Tomy Tutor &amp; Pyuuta cartridges">
- <software name="baseball" supported="no">
+ <software name="baseball">
<description>Baseball (Jpn)</description>
<year>198?</year>
<publisher>Tomy</publisher>
diff --git a/src/mess/drivers/tutor.c b/src/mess/drivers/tutor.c
index 67581c2834a..8e32ce7ea77 100644
--- a/src/mess/drivers/tutor.c
+++ b/src/mess/drivers/tutor.c
@@ -187,7 +187,9 @@ public:
m_cass(*this, "cassette"),
m_centronics(*this, "centronics"),
m_cent_data_out(*this, "cent_data_out"),
- m_bank1(*this, "bank1")
+ m_bank1(*this, "bank1"),
+ m_bank2(*this, "bank2"),
+ m_bank1_switching(0)
{
}
@@ -197,8 +199,10 @@ public:
optional_device<centronics_device> m_centronics;
optional_device<output_latch_device> m_cent_data_out;
required_memory_bank m_bank1;
+ required_memory_bank m_bank2;
memory_region *m_cart_rom;
+ int m_bank1_switching;
DECLARE_READ8_MEMBER(key_r);
DECLARE_READ8_MEMBER(tutor_mapper_r);
DECLARE_WRITE8_MEMBER(tutor_mapper_w);
@@ -226,13 +230,26 @@ void tutor_state::machine_start()
m_tape_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tutor_state::tape_interrupt_handler),this));
- m_bank1->configure_entry(0, memregion("maincpu")->base() + 0x8000);
+ m_bank1->configure_entry(0, memregion("maincpu")->base() + 0x4000);
m_bank1->set_entry(0);
+ m_bank2->configure_entry(0, memregion("maincpu")->base() + 0x8000);
+ m_bank2->set_entry(0);
if (m_cart_rom)
{
- m_bank1->configure_entry(1, m_cart_rom->base());
- m_bank1->set_entry(1);
+ if (m_cart_rom->bytes() > 0x4000)
+ {
+ m_bank1_switching = 1;
+ m_bank1->configure_entry(1, m_cart_rom->base());
+ m_bank1->set_entry(1);
+ m_bank2->configure_entry(1, m_cart_rom->base() + 0x4000);
+ m_bank2->set_entry(1);
+ }
+ else
+ {
+ m_bank2->configure_entry(1, m_cart_rom->base());
+ m_bank2->set_entry(1);
+ }
}
}
@@ -323,12 +340,17 @@ WRITE8_MEMBER( tutor_state::tutor_mapper_w )
case 0x08:
/* disable cartridge ROM, enable BASIC ROM at base >8000 */
m_bank1->set_entry(0);
+ m_bank2->set_entry(0);
break;
case 0x0c:
/* enable cartridge ROM, disable BASIC ROM at base >8000 */
if (m_cart_rom)
- m_bank1->set_entry(1);
+ {
+ if (m_bank1_switching)
+ m_bank1->set_entry(1);
+ m_bank2->set_entry(1);
+ }
break;
default:
@@ -516,8 +538,9 @@ WRITE8_MEMBER( tutor_state::test_w )
#endif
static ADDRESS_MAP_START(tutor_memmap, AS_PROGRAM, 8, tutor_state)
- AM_RANGE(0x0000, 0x7fff) AM_ROM /*system ROM*/
- AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") AM_WRITENOP /*BASIC ROM & cartridge ROM*/
+ AM_RANGE(0x0000, 0x3fff) AM_ROM
+ AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1") AM_WRITENOP
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2") AM_WRITENOP
AM_RANGE(0xc000, 0xdfff) AM_NOP /*free for expansion, or cartridge ROM?*/
AM_RANGE(0xe000, 0xe000) AM_DEVREADWRITE("tms9928a", tms9928a_device, vram_read, vram_write) /*VDP data*/
@@ -531,9 +554,11 @@ static ADDRESS_MAP_START(tutor_memmap, AS_PROGRAM, 8, tutor_state)
ADDRESS_MAP_END
static ADDRESS_MAP_START(pyuutajr_mem, AS_PROGRAM, 8, tutor_state)
- AM_RANGE(0x0000, 0x7fff) AM_ROM /*system ROM*/
- AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") AM_WRITENOP /*BASIC ROM & cartridge ROM*/
+ AM_RANGE(0x0000, 0x3fff) AM_ROM
+ AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1") AM_WRITENOP
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2") AM_WRITENOP
AM_RANGE(0xc000, 0xdfff) AM_NOP /*free for expansion, or cartridge ROM?*/
+
AM_RANGE(0xe000, 0xe000) AM_DEVREADWRITE("tms9928a", tms9928a_device, vram_read, vram_write) /*VDP data*/
AM_RANGE(0xe002, 0xe002) AM_DEVREADWRITE("tms9928a", tms9928a_device, register_read, register_write)/*VDP status*/
AM_RANGE(0xe100, 0xe1ff) AM_READWRITE(tutor_mapper_r, tutor_mapper_w) /*cartridge mapper*/
@@ -542,6 +567,7 @@ static ADDRESS_MAP_START(pyuutajr_mem, AS_PROGRAM, 8, tutor_state)
AM_RANGE(0xea00, 0xea00) AM_READ_PORT("LINE1")
AM_RANGE(0xec00, 0xec00) AM_READ_PORT("LINE2")
AM_RANGE(0xee00, 0xee00) AM_READ_PORT("LINE3")
+
AM_RANGE(0xf000, 0xffff) AM_READ(tutor_highmem_r) AM_WRITENOP /*free for expansion (and internal processor RAM)*/
ADDRESS_MAP_END