summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author David Haywood <28625134+DavidHaywood@users.noreply.github.com>2020-01-15 10:44:15 +0000
committer MooglyGuy <MooglyGuy@users.noreply.github.com>2020-01-15 11:44:15 +0100
commit48f4bb066b87bde5259b5915698685b578bdc95f (patch)
tree2de192c147384526b3b07e27e15ba1d3ad6f7ea6
parent11d8d738fe64de9eedae917a6532e26d7de9ed19 (diff)
Plug and Play work (#6174)
* new NOT WORKING ---- Jara-Ja Land (Japan, home version) [Sean Riddle, Peter Wilhelmsen, ShouTime] * (nw) * new NOT WORKING machines ----- Design Master Denshi Mangajuku [TeamEurope] note, these use a H8/328 (24kbytes internal ROM, 1kbyte internal ROM) but at least when booting from cart it looks like they're using external mode, with internal ROM disabled, as the 'game' cart ROMs contain boot vectors (the 'design' carts don't, but those are data roms for the game carts) likely needs a proper H8 type deriving tho. * (nw) * (nw) * (nw) * (nw) * (nw) * closer type (correctly has 1k internal RAM) * banks are 0x8000 in size (nw) * (notes) * (nw) * subclass (nw) * (nw) * (nw) * ooops (nw) * improve gcslottv mojuotv
-rw-r--r--hash/bdesignm_design_cart.xml40
-rw-r--r--hash/bdesignm_game_cart.xml39
-rw-r--r--scripts/target/mame/mess.lua1
-rw-r--r--src/mame/drivers/bandai_design_master.cpp162
-rw-r--r--src/mame/drivers/xavix.cpp73
-rw-r--r--src/mame/includes/xavix.h47
-rw-r--r--src/mame/mame.lst4
-rw-r--r--src/mame/video/xavix.cpp28
8 files changed, 362 insertions, 32 deletions
diff --git a/hash/bdesignm_design_cart.xml b/hash/bdesignm_design_cart.xml
new file mode 100644
index 00000000000..3b70b5c446b
--- /dev/null
+++ b/hash/bdesignm_design_cart.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+<!--
+ Game cartridges for Bandai Design Master
+
+ Design carts, these plug into the Game carts, they're data ROMs, they do not contain boot vectors
+
+ M.01 - Dragon Ball Z
+ M.02 - From TV Animation Slam Dunk
+ M.03 - Super Street Fighter 2
+ M.04 - Rockman X3 Buster Battle
+ Weekly Shonen Jump Special
+
+-->
+
+<softwarelist name="bdesignm_design_cart" description="Bandai Design Master 'Design / Media' cartridges">
+
+ <software name="dbzm" supported="no">
+ <description>Dragon Ball Z (design)</description>
+ <year>1995</year>
+ <publisher>Bandai</publisher>
+ <part name="cart" interface="bdesignm_cart">
+ <dataarea name="rom" size="0x20000">
+ <rom loadflag="load16_word_swap" name="m01_dragonballz.bin" size="0x20000" crc="5a514a14" sha1="e79f215255b230bec5835e229f415d277dd8d762" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sf2m" supported="no">
+ <description>Super Street Fighter 2 (design)</description>
+ <year>1995</year>
+ <publisher>Bandai</publisher>
+ <part name="cart" interface="bdesignm_cart">
+ <dataarea name="rom" size="0x20000">
+ <rom loadflag="load16_word_swap" name="m03_streetfighterii.bin" size="0x20000" crc="f4a59015" sha1="a607628a4fbae143e34294a4363c286feb21d770" />
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/hash/bdesignm_game_cart.xml b/hash/bdesignm_game_cart.xml
new file mode 100644
index 00000000000..d78f900c52d
--- /dev/null
+++ b/hash/bdesignm_game_cart.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+<!--
+ Game cartridges for Bandai Design Master
+
+ Game carts, these plug into the system
+
+ G.01 - Dragon Ball Z Taisen-gata Search Battle
+ G.02 - Dungeon Diver
+ G.03 - Bishoujo Senshi Sailor Moon SS Illustration Club
+ G.04 - Rockman X3 Buster Battle
+
+-->
+
+<softwarelist name="bdesignm_game_cart" description="Bandai Design Master 'Game' cartridges">
+
+ <software name="dbzg" supported="no">
+ <description>Dragon Ball Z Taisen-gata Search Battle (game)</description>
+ <year>1995</year>
+ <publisher>Bandai</publisher>
+ <part name="cart" interface="bdesignm_cart">
+ <dataarea name="rom" size="0x20000">
+ <rom loadflag="load16_word_swap" name="g01_dragonballz.bin" size="0x20000" crc="94107404" sha1="c86d48e9f0262da36ac9bbcffd9cea8e9bb672b7" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sailormng" supported="no">
+ <description>Bishoujo Senshi Sailor Moon SS Illustration Club (game)</description>
+ <year>1995</year>
+ <publisher>Bandai</publisher>
+ <part name="cart" interface="bdesignm_cart">
+ <dataarea name="rom" size="0x20000">
+ <rom loadflag="load16_word_swap" name="g03_sailormoon.bin" size="0x20000" crc="641f20e6" sha1="b9f3a37385eeaf2e66b28ad5bac24a8a9cd46bdd" />
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index e3d44505abc..2b30c67a73f 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -1796,6 +1796,7 @@ files {
MAME_DIR .. "src/mame/machine/wswan.cpp",
MAME_DIR .. "src/mame/video/wswan.cpp",
MAME_DIR .. "src/mame/video/wswan.h",
+ MAME_DIR .. "src/mame/drivers/bandai_design_master.cpp",
}
createMESSProjects(_target, _subtarget, "be")
diff --git a/src/mame/drivers/bandai_design_master.cpp b/src/mame/drivers/bandai_design_master.cpp
new file mode 100644
index 00000000000..fb50805f52d
--- /dev/null
+++ b/src/mame/drivers/bandai_design_master.cpp
@@ -0,0 +1,162 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+/******************************************************************************************************************************
+
+ __________________________________IR___
+ | ____ RX/TX |
+ | _____ ________ | | __ |
+ | | | | | | | | ||
+ | |IC3 | | IC2 | | |CN2->_||
+ | | | | | | | |
+ | |____| |_______| | | |
+ | ____ | | |
+ | | | CART SLOT->| | |
+ | |IC5| | | |
+ | |___| ________ | | |
+ | ____ | | | | |
+ | | | | IC1 | | | |
+ | |IC4| | | | | |
+ | |___| |_______| |___| |
+ |
+ | SW2
+ |______________________________________
+
+ IC1 = Hitachi H8/328 (24K-byte internal ROM + 1k-byte RAM)
+ IC2 = Hitachi HG62G010R21FBN Gate Array (low gatecount and low I/O-count packages)
+ IC3 = Hitachi HM62256LFP-10T 256kbit CMOS SRAM
+ IC4 = BA10324AF Ground Sense Operational Amplifier
+ IC5 = Hitachi 74HC00 (5B2T HC00)
+
+
+ TODO: cartridge pinouts / information
+
+
+ NOTE: cartridge dumps contain boot vectors so Internal ROM likely only used when no cartridge is present
+
+
+******************************************************************************************************************************/
+
+#include "emu.h"
+#include "cpu/h8/h83337.h"
+
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
+
+#include "screen.h"
+//#include "speaker.h"
+
+class bdsm_state : public driver_device
+{
+public:
+ bdsm_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_cartslot(*this, "cartslot"),
+ m_cartslot_region(nullptr),
+ m_bank(*this, "cartbank"),
+ m_screen(*this, "screen")
+ { }
+
+ void bdesignm(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
+
+ DECLARE_READ16_MEMBER(io_p7_r);
+ DECLARE_WRITE16_MEMBER(io_p7_w);
+
+ uint32_t screen_update(screen_device& screen, bitmap_rgb32& bitmap, const rectangle& cliprect);
+
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load_bdesignm);
+
+ required_device<cpu_device> m_maincpu;
+ required_device<generic_slot_device> m_cartslot;
+ memory_region *m_cartslot_region;
+ required_memory_bank m_bank;
+ required_device<screen_device> m_screen;
+};
+
+void bdsm_state::machine_start()
+{
+ if (m_cartslot && m_cartslot->exists())
+ {
+ std::string region_tag;
+ m_cartslot_region = memregion(region_tag.assign(m_cartslot->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_bank->configure_entries(0, (m_cartslot_region->bytes() / 0x8000), m_cartslot_region->base(), 0x8000);
+ m_bank->set_entry(0); // only the first bank seems to contain a valid reset vector '0x50' which points at the first code in the ROM. The other banks contain 0x5a00 as the reset vector. IRQ vector seems valid in all banks.
+ }
+}
+
+DEVICE_IMAGE_LOAD_MEMBER(bdsm_state::cart_load_bdesignm)
+{
+ uint32_t size = m_cartslot->common_get_size("rom");
+
+ m_cartslot->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_BIG);
+ m_cartslot->common_load_rom(m_cartslot->get_rom_base(), size, "rom");
+
+ return image_init_result::PASS;
+}
+
+void bdsm_state::mem_map(address_map &map)
+{
+ map(0x0000, 0x7fff).bankr("cartbank");
+ map(0x8000, 0x895f).ram().share("unkram");
+}
+
+READ16_MEMBER(bdsm_state::io_p7_r)
+{
+ return machine().rand();
+}
+
+WRITE16_MEMBER(bdsm_state::io_p7_w)
+{
+ logerror("%s: io_p7_w %04x %04x\n", machine().describe_context(), data, mem_mask);
+}
+
+
+void bdsm_state::io_map(address_map &map)
+{
+ map(h8_device::PORT_7, h8_device::PORT_7).rw(FUNC(bdsm_state::io_p7_r), FUNC(bdsm_state::io_p7_w));
+}
+
+static INPUT_PORTS_START( bdesignm )
+INPUT_PORTS_END
+
+uint32_t bdsm_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ return 0;
+}
+
+
+void bdsm_state::bdesignm(machine_config &config)
+{
+ /* basic machine hardware */
+ H83334(config, m_maincpu, XTAL(20'000'000)); /* H8/328 (24kbytes internal ROM, 1kbyte internal ROM) ?Mhz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &bdsm_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &bdsm_state::io_map);
+
+ SCREEN(config, m_screen, SCREEN_TYPE_LCD);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_size(160, 150); // resolution unknown
+ m_screen->set_visarea(0, 160-1, 0, 150-1);
+ m_screen->set_screen_update(FUNC(bdsm_state::screen_update));
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
+
+ GENERIC_CARTSLOT(config, m_cartslot, generic_linear_slot, "bdesignm_cart"); // TODO: this should be a custom bus type with capability to plug the 'design' carts into it
+ //m_cartslot->set_must_be_loaded(true);
+
+ SOFTWARE_LIST(config, "cart_list_game").set_original("bdesignm_game_cart"); // Game carts, these appear to disable the Internal ROM
+ SOFTWARE_LIST(config, "cart_list_design").set_original("bdesignm_design_cart"); // You can also plug a design cart directly into the unit for use by the Internal ROM program (they contain no program)
+}
+
+ROM_START( bdesignm )
+ ROM_REGION16_BE(0x88000, "roms", ROMREGION_ERASE00)
+ ROM_LOAD( "h8_328.bin", 0x00000, 0x6000, NO_DUMP ) // internal rom (When the console is booted up without a cart it enters the default (builtin) art / drawing program, otherwise probably not used as carts contain boot vectors etc.)
+ROM_END
+
+
+CONS( 1995, bdesignm, 0, 0, bdesignm, bdesignm, bdsm_state, empty_init, "Bandai", "Design Master Denshi Mangajuku", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/xavix.cpp b/src/mame/drivers/xavix.cpp
index 8de87d92bf2..f376b11a15b 100644
--- a/src/mame/drivers/xavix.cpp
+++ b/src/mame/drivers/xavix.cpp
@@ -1230,6 +1230,65 @@ static INPUT_PORTS_START( gcslottv ) // TODO: proper button names
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
INPUT_PORTS_END
+static INPUT_PORTS_START( jarajal )
+ PORT_INCLUDE(xavix)
+
+ PORT_MODIFY("IN0")
+ PORT_DIPNAME( 0x01, 0x00, "IN0" )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+
+
+ PORT_MODIFY("IN1")
+ PORT_DIPNAME( 0x01, 0x00, "IN1" )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+
+INPUT_PORTS_END
+
+
/* correct, 4bpp gfxs */
static const gfx_layout charlayout =
{
@@ -1322,7 +1381,6 @@ void xavix_state::xavix(machine_config &config)
m_screen->set_screen_update(FUNC(xavix_state::screen_update));
m_screen->set_size(32*8, 32*8);
m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
- m_screen->set_palette(m_palette);
//m_screen->set_video_attributes(VIDEO_UPDATE_SCANLINE);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_xavix);
@@ -1550,7 +1608,7 @@ void xavix_cart_state::xavix_cart_evio(machine_config &config)
SOFTWARE_LIST(config, "cart_list_evio").set_original("evio");
}
-void xavix_cart_state::xavix_cart_gcslottv(machine_config &config)
+void xavix_cart_gcslottv_state::xavix_cart_gcslottv(machine_config &config)
{
xavix_cart(config);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
@@ -1866,6 +1924,12 @@ ROM_START( tak_geig )
ROM_LOAD("geigeki.bin", 0x000000, 0x400000, CRC(bd0c3576) SHA1(06f614dbec0225ce4ed866b98450912986d72faf) )
ROM_END
+ROM_START( jarajal )
+ ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_LOAD("takaraslots.bin", 0x000000, 0x200000, CRC(afae0b72) SHA1(b1c5d80a8dc8466982efd79d54cd82a58f0ff997) )
+ROM_END
+
+
/*
The e-kara cartridges require the BIOS rom to map into 2nd external bus space as they fetch palette data from
it etc.
@@ -2054,6 +2118,9 @@ CONS( 2002, epo_dmon, 0, 0, xavix_i2c_24c02, xavix_i2c,xavix_i2c_sta
CONS( 200?, has_wamg, 0, 0, xavix, has_wamg, xavix_state, init_xavix, "Hasbro / Milton Bradley / SSD Company LTD", "TV Wild Adventure Mini Golf (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
CONS( 2002, tak_geig, 0, 0, xavix_nv, tak_geig, xavix_state, init_xavix, "Takara / SSD Company LTD", "Geigeki Go Go Shooting (Japan)", MACHINE_IMPERFECT_SOUND )
+
+// was also distributed by Atlus as an arcade cabinet in 2005, ROM almost certainly different (this one will auto-power off after inactivity, an arcade wouldn't do that)
+CONS( 2003, jarajal, 0, 0, xavix_nv, jarajal, xavix_state, init_xavix, "Takara / SSD Company LTD", "Jara-Ja Land (Japan, home version)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
/* Music titles: Emulation note:
SEEPROM write appears to work (save NVRAM file looks valid) but game fails to read it back properly, fails backup data checksum, and blanks it again.
@@ -2086,7 +2153,7 @@ CONS( 2004, jpopira, 0, 0, xavix_i2c_jpopira,jpopira, xavix_i2c_car
CONS( 2003, evio, 0, 0, xavix_cart_evio, evio, xavix_cart_state, init_xavix, "Tomy / SSD Company LTD", "Evio (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*|MACHINE_IS_BIOS_ROOT*/ ) // inputs? it's a violin controller
-CONS( 2002, gcslottv, 0, 0, xavix_cart_gcslottv, gcslottv, xavix_cart_state, init_xavix, "Takara / Sammy / DCT / SSD Company LTD", "Gachinko Contest! Slot machine TV (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*|MACHINE_IS_BIOS_ROOT*/ )
+CONS( 2002, gcslottv, 0, 0, xavix_cart_gcslottv, gcslottv, xavix_cart_gcslottv_state, init_xavix, "Takara / Sammy / DCT / SSD Company LTD", "Gachinko Contest! Slot machine TV (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*|MACHINE_IS_BIOS_ROOT*/ )
diff --git a/src/mame/includes/xavix.h b/src/mame/includes/xavix.h
index e56d50f1fbc..aaf553f6c36 100644
--- a/src/mame/includes/xavix.h
+++ b/src/mame/includes/xavix.h
@@ -199,7 +199,7 @@ protected:
private:
// screen updates
- uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void xavix_map(address_map &map);
@@ -534,11 +534,11 @@ private:
required_device<gfxdecode_device> m_gfxdecode;
void update_pen(int pen, uint8_t shval, uint8_t lval);
- void draw_tile_line(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int tile, int bpp, int xpos, int ypos, int drawheight, int drawwidth, int flipx, int flipy, int pal, int zval, int line);
- void draw_tilemap(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int which);
- void draw_tilemap_line(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int which, int line);
- void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void draw_sprites_line(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int line);
+ void draw_tile_line(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int tile, int bpp, int xpos, int ypos, int drawheight, int drawwidth, int flipx, int flipy, int pal, int zval, int line);
+ void draw_tilemap(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int which);
+ void draw_tilemap_line(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int which, int line);
+ void draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ void draw_sprites_line(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int line);
void decode_inline_header(int &flipx, int &flipy, int &test, int& pal, int debug_packets);
bitmap_ind16 m_zbuffer;
@@ -752,17 +752,18 @@ protected:
class xavix_cart_state : public xavix_state
{
public:
- xavix_cart_state(const machine_config &mconfig, device_type type, const char *tag)
- : xavix_state(mconfig, type, tag),
+ xavix_cart_state(const machine_config &mconfig, device_type type, const char *tag) :
+ xavix_state(mconfig, type, tag),
m_cartslot(*this, "cartslot")
- { }
+ {
+ m_cartlimit = 0x400000;
+ }
void xavix_cart(machine_config &config);
void xavix_cart_ekara(machine_config &config);
void xavix_cart_popira(machine_config &config);
void xavix_cart_ddrfammt(machine_config &config);
void xavix_cart_evio(machine_config &config);
- void xavix_cart_gcslottv(machine_config &config);
protected:
@@ -772,7 +773,7 @@ protected:
{
if (offset & 0x8000)
{
- if (offset & 0x400000)
+ if ((offset & 0x7fffff) >= m_cartlimit)
{
return m_rgn[(offset) & (m_rgnlen - 1)];
}
@@ -796,7 +797,7 @@ protected:
virtual uint8_t opcodes_800000_r(offs_t offset) override
{
- if (offset & 0x400000)
+ if ((offset & 0x7fffff) >= m_cartlimit)
{
return m_rgn[(offset) & (m_rgnlen - 1)];
}
@@ -839,7 +840,7 @@ protected:
}
else
{
- if (offset & 0x400000)
+ if ((offset & 0x7fffff) >= m_cartlimit)
{
return m_rgn[(offset) & (m_rgnlen - 1)];
}
@@ -882,7 +883,7 @@ protected:
if (databank >= 0x80)
{
- if (offset & 0x400000)
+ if ((offset & 0x7fffff) >= m_cartlimit)
{
return m_rgn[(offset) & (m_rgnlen - 1)];
}
@@ -902,7 +903,7 @@ protected:
{
if ((offset & 0xffff) >= 0x8000)
{
- if (offset & 0x400000)
+ if ((offset & 0x7fffff) >= m_cartlimit)
{
return m_rgn[(offset) & (m_rgnlen - 1)];
}
@@ -925,9 +926,25 @@ protected:
}
}
+ int m_cartlimit;
required_device<ekara_cart_slot_device> m_cartslot;
};
+
+class xavix_cart_gcslottv_state : public xavix_cart_state
+{
+public:
+ xavix_cart_gcslottv_state(const machine_config &mconfig, device_type type, const char *tag) :
+ xavix_cart_state(mconfig, type, tag)
+ {
+ m_cartlimit = 0x800000;
+ }
+
+ void xavix_cart_gcslottv(machine_config &config);
+
+protected:
+};
+
class xavix_i2c_cart_state : public xavix_cart_state
{
public:
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index e58693dde63..9e53b92ef7c 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -3143,6 +3143,9 @@ triviaes5 // (c) 19?? (Maibesa hardware)
@source:banctec.cpp
banctec // BancTec ESeries panel
+@source:bandai_design_master.cpp
+bdesignm
+
@source:bankp.cpp
bankp // (c) 1984 Sega, made by Sanritsu
combh // (c) 1987 Sega, made by Sanritsu
@@ -41020,6 +41023,7 @@ rad_bdp //
has_wamg //
ltv_tam //
tak_geig //
+jarajal //
ban_onep //
ekara //
ekaraa //
diff --git a/src/mame/video/xavix.cpp b/src/mame/video/xavix.cpp
index 58a12e516a3..c27cc40ba1e 100644
--- a/src/mame/video/xavix.cpp
+++ b/src/mame/video/xavix.cpp
@@ -202,11 +202,13 @@ void xavix_state::update_pen(int pen, uint8_t shval, uint8_t lval)
int b_real = b1 * 255.0f;
m_palette->set_pen_color(pen, r_real, g_real, b_real);
+
+ m_screen->update_partial(m_screen->vpos());
}
-void xavix_state::draw_tilemap(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int which)
+void xavix_state::draw_tilemap(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int which)
{
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
{
@@ -287,7 +289,7 @@ void xavix_state::decode_inline_header(int &flipx, int &flipy, int &test, int &p
//if (debug_packets) LOG("\n");
}
-void xavix_state::draw_tilemap_line(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int which, int line)
+void xavix_state::draw_tilemap_line(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int which, int line)
{
uint8_t* tileregs;
if (which == 0)
@@ -488,7 +490,7 @@ void xavix_state::draw_tilemap_line(screen_device &screen, bitmap_ind16 &bitmap,
}
}
-void xavix_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+void xavix_state::draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
{
@@ -496,7 +498,7 @@ void xavix_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, cons
}
}
-void xavix_state::draw_sprites_line(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int line)
+void xavix_state::draw_sprites_line(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int line)
{
int alt_addressing = 0;
@@ -703,9 +705,9 @@ void xavix_state::draw_sprites_line(screen_device &screen, bitmap_ind16 &bitmap,
}
}
-void xavix_state::draw_tile_line(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int tile, int bpp, int xpos, int ypos, int drawheight, int drawwidth, int flipx, int flipy, int pal, int zval, int line)
+void xavix_state::draw_tile_line(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int tile, int bpp, int xpos, int ypos, int drawheight, int drawwidth, int flipx, int flipy, int pal, int zval, int line)
{
- //const pen_t *paldata = m_palette->pens();
+ const pen_t *paldata = m_palette->pens();
if (ypos > cliprect.max_y || ypos < cliprect.min_y)
return;
@@ -760,11 +762,8 @@ void xavix_state::draw_tile_line(screen_device &screen, bitmap_ind16 &bitmap, co
if ((m_palram_sh[pen] & 0x1f) < 24) // hue values 24-31 are transparent
{
- uint16_t* yposptr = &bitmap.pix16(ypos);
- yposptr[col] = pen;
-
- //uint32_t* yposptr = &bitmap.pix32(ypos);
- //yposptr[col] = paldata[pen];
+ uint32_t* yposptr = &bitmap.pix32(ypos);
+ yposptr[col] = paldata[pen];
zyposptr[col] = zval;
}
@@ -774,8 +773,9 @@ void xavix_state::draw_tile_line(screen_device &screen, bitmap_ind16 &bitmap, co
}
}
-uint32_t xavix_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+uint32_t xavix_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
+ const pen_t *paldata = m_palette->pens();
// not sure what you end up with if you fall through all layers as transparent, so far no issues noticed
bitmap.fill(m_palette->black_pen(), cliprect);
m_zbuffer.fill(0, cliprect);
@@ -862,7 +862,7 @@ uint32_t xavix_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
{
for (int x = 0; x < width; x++)
{
- uint16_t* yposptr = &bitmap.pix16(y);
+ uint32_t* yposptr = &bitmap.pix32(y);
uint16_t* zyposptr = &m_zbuffer.pix16(y);
uint8_t dat = 0;
@@ -877,7 +877,7 @@ uint32_t xavix_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
{
if (zval >= zyposptr[x])
{
- yposptr[x] = dat + 0x100;
+ yposptr[x] = paldata[dat + 0x100];
zyposptr[x] = zval;
}
}