diff --git a/hash/super_tv_pc_cart.xml b/hash/super_tv_pc_cart.xml
index 8c5f55417adfb..0f4f59d3788a4 100644
--- a/hash/super_tv_pc_cart.xml
+++ b/hash/super_tv_pc_cart.xml
@@ -27,6 +27,8 @@ license:CC0-1.0
+
+
@@ -38,7 +40,8 @@ license:CC0-1.0
-
+
+
@@ -51,6 +54,8 @@ license:CC0-1.0
+
+
diff --git a/src/devices/bus/ekara/rom.cpp b/src/devices/bus/ekara/rom.cpp
index b08f5cc2fc409..a6e5523e84ca5 100644
--- a/src/devices/bus/ekara/rom.cpp
+++ b/src/devices/bus/ekara/rom.cpp
@@ -117,12 +117,32 @@ void ekara_rom_i2c_base_device::write_bus_control(offs_t offset, uint8_t data)
void ekara_rom_i2c_base_device::write_rom(offs_t offset, uint8_t data)
{
- logerror("ekara_rom_i2c_base_device::write_rom %08x %02x\n", offset, data);
+ if (is_write_access_not_rom())
+ {
+ if (offset == 0x3fffff)
+ write_extra(offset,data);
+ else
+ logerror("ekara_rom_i2c_base_device::write_rom %08x %02x\n", offset, data);
+ }
+ else
+ {
+ logerror("ekara_rom_i2c_base_device::write_rom %08x %02x\n", offset, data);
+ }
}
uint8_t ekara_rom_i2c_base_device::read_rom(offs_t offset)
{
- return m_rom[offset & (m_rom_size - 1)];
+ if (is_read_access_not_rom())
+ {
+ if (offset == 0x5fffff)
+ return read_extra(offset);
+ else
+ return m_rom[offset & (m_rom_size - 1)];
+ }
+ else
+ {
+ return m_rom[offset & (m_rom_size - 1)];
+ }
}
uint8_t ekara_rom_i2c_base_device::read_extra(offs_t offset)
diff --git a/src/devices/cpu/m6502/oxavix2000.lst b/src/devices/cpu/m6502/oxavix2000.lst
index f3f248026c380..ec61ee4067a1c 100644
--- a/src/devices/cpu/m6502/oxavix2000.lst
+++ b/src/devices/cpu/m6502/oxavix2000.lst
@@ -332,8 +332,10 @@ orapa_imp
prefetch();
andpa_imp
- fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state);
read_pc();
+ TMP = read_full_data(m_pa);
+ A &= TMP;
+ set_nz(A);
prefetch();
eorpa_imp
@@ -436,17 +438,19 @@ bit_xav_zpx
prefetch();
bit_abx
- fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state);
- read_pc();
+ TMP = read_pc();
+ PC++;
+ TMP = set_h(TMP, read_pc());
+ PC++;
+ TMP += X;
+ TMP2 = read(TMP);
+ do_bit(TMP2);
prefetch();
bit_imm
TMP = read_pc();
PC++;
- if(A & TMP)
- P &= ~F_Z;
- else
- P |= F_Z;
+ do_bit(TMP);
prefetch();
asr_xav_zpg
@@ -454,6 +458,7 @@ asr_xav_zpg
PC++;
TMP2 = read_zeropage(TMP);
do_asr(TMP2);
+ write_zeropage(TMP,TMP2);
prefetch();
asr_aba
@@ -468,8 +473,14 @@ asr_aba
prefetch();
asr_xav_zpx
- fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state);
+ TMP = read_pc();
read_pc();
+ PC++;
+ TMP = uint8_t(TMP+X);
+ TMP2 = read_zeropage(TMP);
+ read_zeropage((TMP+1) & 0xff);
+ TMP2 = do_asr(TMP2);
+ write_zeropage(TMP, TMP2);
prefetch();
asr_acc
@@ -477,13 +488,24 @@ asr_acc
prefetch();
asr_abx
- fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state);
- read_pc();
+ TMP = read_pc();
+ PC++;
+ TMP = set_h(TMP, read_pc());
+ PC++;
+ read(set_l(TMP, TMP+X));
+ TMP += X;
+ TMP2 = read(TMP);
+ read(TMP);
+ TMP2 = do_asr(TMP2);
+ write(TMP, TMP2);
prefetch();
cmc_imp
- logerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state);
read_pc();
+ TMP = P & F_C;
+ P &= ~F_C;
+ TMP = ~TMP;
+ P |= TMP & F_C;
prefetch();
sev_imp
diff --git a/src/devices/cpu/m6502/xavix.cpp b/src/devices/cpu/m6502/xavix.cpp
index 2a5392679ca56..b97bd9999a07b 100644
--- a/src/devices/cpu/m6502/xavix.cpp
+++ b/src/devices/cpu/m6502/xavix.cpp
@@ -152,12 +152,12 @@ inline uint8_t xavix_device::read_full_data(uint8_t databank, uint16_t adr)
}
else
{
- return m_extbus_space->read_byte((databank << 16) | adr);
+ return m_extbus_space->read_byte(((databank << 16) | adr) & 0x7fffff );
}
}
else
{
- return m_extbus_space->read_byte((databank << 16) | adr);
+ return m_extbus_space->read_byte(((databank << 16) | adr) & 0x7fffff );
}
}
@@ -257,12 +257,12 @@ inline void xavix_device::write_full_data(uint8_t databank, uint16_t adr, uint8_
}
else
{
- m_extbus_space->write_byte((databank << 16) | adr, val);
+ m_extbus_space->write_byte(((databank << 16) | adr) & 0x7fffff, val);
}
}
else
{
- m_extbus_space->write_byte((databank << 16) | adr, val);
+ m_extbus_space->write_byte(((databank << 16) | adr) & 0x7fffff, val);
}
}
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 03549e3a643d1..640575b64c730 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -46285,6 +46285,7 @@ tvpc_ham
tvpc_tom
@source:tvgames/xavix2.cpp
+ban_db2j
ltv_naru //
domfitad //
dombikec //
@@ -46311,13 +46312,20 @@ ttv_sw //
ttv_swj //
@source:tvgames/xavix_2002.cpp
+anpanmdx
+apmj2009
+ban_dn1j
ban_kksj
+epo_ntpj
ban_ordj
domdance //
domfitch //
domfitex //
domstepc //
+doradraw
+epo_doka
epo_tfit
+maxheart
mrangbat
suprtvpc
suprtvpcdo
diff --git a/src/mame/tvgames/xavix.cpp b/src/mame/tvgames/xavix.cpp
index 544fea8741771..6f5a5d19ad0b6 100644
--- a/src/mame/tvgames/xavix.cpp
+++ b/src/mame/tvgames/xavix.cpp
@@ -34,8 +34,6 @@
year name PCB ID ROM width TSOP pads ROM size SEEPROM die markings extra components / notes
- 2011 anpan-man kazoku de ikunou mat DX /JoyPalette/Japan - - - - - - -
- 2009 anpan-man pyon-pyon ikunou mat /JoyPalette/Japan - - - - - - -
2006 Hello Kitty カードでおままごと あいうおえ図鑑 / エポック社 / 日本 Hello Kitty Play House with Cards Aiuoe Illustrated Book / Epochsha / Japan
ドラえもん 体感タケコプター! 空とぶ大冒険 / エポック社 / 日本 Doraemon Experience Takecopter! Great Flying Adventure / Epoch Publishing / Japan
スーパーテレビパソコンLink / エポック社 / 日本 Super TV PC Link / Epoch / Japan
@@ -43,9 +41,6 @@
Let's!TVプレイ 体感キャストオフ 仮面ライダーカブト クロックアップ&ライダーキック / バンダイ / 日本 Let's!TV Play Experience Cast Off Kamen Rider Kabuto Clock Up & Rider Kick / Bandai / Japan
Let's!TVプレイ なりきり体感 ボウケンジャー 走れ!撃て!ミッションスタート!! / バンダイ / 日本 Let's! TV Play Narikiri Experience Boukenger Run! Shoot! Mission starts! ! / Bandai / Japan
Let's!TVプレイ なりきりファイト ウルトラマン 撃て!必殺光線!! / タカラトミー / 日本 Let's!TV Play Narikiri Fight Ultraman Shoot! Deadly ray! ! / Takara Tomy / Japan
- 2005 どこでもドラえもん 日本旅行ゲームDX体感!どこドラグランプリ! / エポック社 / 日本 Doraemon anywhere - Japan travel game DX experience! Where is the Dragon Grand Prix! / Epoch / Japan
- Let's!TVプレイ ふたりはプリキュアMaxHeart マットでダンス MaxHeartにおどっちゃおう / バンダイ / 日本 Let's!TV Play Futari wa PreCure MaxHeart Dance on the mat Let's go to MaxHeart / Bandai / Japan
- Let's!TVプレイ 魔法戦隊マジレンジャー マジマットでダンス&バトル / バンダイ / 日本 Let's!TV Play Mahou Sentai Magiranger Dance & Battle at Magimat / Bandai / Japan
Jala Jaland /atlus/Japan (arcade version) - - - - - - -
2004 Printer for TV computer /EPOCH/Japan - - - - - - -
Accessory memory mascot for TV mail Pc mail cot 2 characters (Putchi, Petchi) /EPOCH/Japan - - - - - - -
@@ -67,12 +62,16 @@
not dumped: xavix2.cpp
2008 究極! 筋肉スタジアム! サスケ完全制覇 kyuukyoku! kinniku grand slam! SASUKE kanzen seiha /EPOCH/Japan - - - - - - -
- 2006 Let's!TVプレイ ドラゴンボールZ バトル体感かめはめ波2~オッスおめぇ悟空 天下一武道会~ / バンダイ / 日本 Let's!TV Play Dragon Ball Z Battle Experience Kamehameha 2 ~Ossu Ome Goku Tenkaichi Budokai~ / Bandai / Japan
2006 SASUKE サスケ&筋肉バトル!!スポーツマンNO.1決定戦 / エポック社 / 日本 SASUKE Sasuke & Muscle Battle!! Sportsman No. 1 Decisive Battle / Epoch Publishing / Japan
2005 Let's!TVプレイ ドラゴンボ-ルZ バトル体感かめはめ波~ おめぇとフュージョン / バンダイ / 日本 Let's!TV Play Dragon Ball Z Battle Experience Kamehameha ~ Ometo Fusion / Bandai / Japan
dumped: either here, xavix_2000.cpp, or xavix_2002.cpp
- Excite Striker (UK)
+ Let's!TVプレイ 魔法戦隊マジレンジャー マジマットでダンス&バトル / バンダイ / 日本 Let's!TV Play Mahou Sentai Magiranger Dance & Battle at Magimat / Bandai / Japan
+ anpan-man pyon-pyon ikunou mat /JoyPalette/Japan - - - - - - -
+ どこでもドラえもん 日本旅行ゲームDX体感!どこドラグランプリ! / エポック社 / 日本 Doraemon anywhere - Japan travel game DX experience! Where is the Dragon Grand Prix! / Epoch / Japan
+ Let's!TVプレイ ふたりはプリキュアMaxHeart マットでダンス MaxHeartにおどっちゃおう / バンダイ / 日本 Let's!TV Play Futari wa PreCure MaxHeart Dance on the mat Let's go to MaxHeart / Bandai / Japan
+ anpan-man kazoku de ikunou mat DX /JoyPalette/Japan - - - - - - -
+ Excite Striker (UK)
connecTV OPUS /RADICA EU (different ROM to US?)
Let's!TVプレイ 音撃バトル!仮面ライダー響鬼 決めろ!一気火勢の型 / バンダイ / 日本 (Let's! TV Play Ongeki Battle! Kamen Rider Hibiki Decide! Ichikkasei no Kata / Bandai / Japan)
Let's construct the town! /TAKARA/Japan - - - - - - -
@@ -200,6 +199,7 @@
dumped: see xavix2.cpp
2006 Let's!TVプレイ NARUTO-ナルト- 忍者体感~だってばよ~ / バンダイ / 日本 Let's!TV Play NARUTO Ninja Experience ~Dattebayo~ / Bandai / Japan
2006 テレビであそぼう!まなぼう!超能力あいうえお図鑑 / エポック社 / 日本 Let's play on TV! Learn! Superpower Aiueo Illustrated Book / Epochsha / Japan
+ 2006 Let's!TVプレイ ドラゴンボールZ バトル体感かめはめ波2~オッスおめぇ悟空 天下一武道会~ / バンダイ / 日本 Let's!TV Play Dragon Ball Z Battle Experience Kamehameha 2 ~Ossu Ome Goku Tenkaichi Budokai~ / Bandai / Japan
@@ -283,12 +283,49 @@ void xavix_state::xavix_map(address_map &map)
// this is used by data reads / writes after some processing in the core to decide if data reads can see lowbus, zeropage, stack, bank registers etc. and only falls through to here on a true external bus access
void xavix_state::xavix_extbus_map(address_map &map)
{
- map(0x000000, 0xffffff).rw(FUNC(xavix_state::extbus_r), FUNC(xavix_state::extbus_w));
+ map(0x000000, 0x7fffff).rom().region("bios", 0x00000);
+}
+
+void xavix_cart_state::xavix_extbus_map(address_map &map)
+{
+ map(0x000000, 0x5fffff).rw(FUNC(xavix_cart_state::cart_r), FUNC(xavix_cart_state::cart_w));
+ map(0x600000, 0x7fffff).rom().region("bios", 0x600000);
+}
+
+void xavix_state::xavix_4mb_extbus_map(address_map &map)
+{
+ map(0x000000, 0x3fffff).mirror(0x400000).rom().region("bios", 0x00000);
+}
+
+void xavix_state::xavix_2mb_extbus_map(address_map &map)
+{
+ map(0x000000, 0x1fffff).mirror(0x600000).rom().region("bios", 0x00000);
+}
+
+void xavix_state::xavix_1mb_extbus_map(address_map &map)
+{
+ map(0x000000, 0x0fffff).mirror(0x700000).rom().region("bios", 0x00000);
+}
+
+void xavix_state::mainram_w(offs_t offset, uint8_t data)
+{
+ m_mainram[offset] = data;
+/*
+// trying to debug anpanmdx title screen issue
+ if ((offset == 0x3d) && (data == 0x77))
+ logerror("%s: writing 0x77 to 0x3d\n", machine().describe_context());
+ if ((offset == 0x98) && (data == 0x77))
+ logerror("%s: writing 0x77 to 0x98\n", machine().describe_context());
+ if ((offset == 0x3f2) && (data == 0x77))
+ logerror("%s: writing 0x77 to 0x3f2\n", machine().describe_context());
+// but the unwanted? value of 0x77 is explicitly set by the code at 1c61c
+*/
}
+
void xavix_state::xavix_lowbus_map(address_map &map)
{
- map(0x0000, 0x3fff).ram().share("mainram");
+ map(0x0000, 0x3fff).ram().w(FUNC(xavix_state::mainram_w)).share("mainram");
// Memory Emulator / Text Array
map(0x4000, 0x4fff).rw(FUNC(xavix_state::xavix_memoryemu_txarray_r), FUNC(xavix_state::xavix_memoryemu_txarray_w));
@@ -415,32 +452,41 @@ void xavix_state::xavix_lowbus_map(address_map &map)
map(0x7fff, 0x7fff).rw(FUNC(xavix_state::irq_vector_hi_r),FUNC(xavix_state::irq_vector_hi_w));
}
-void xavix_state::superxavix_lowbus_map(address_map &map)
+void superxavix_state::superxavix_lowbus_map(address_map &map)
{
xavix_lowbus_map(map);
// bitmap layer palette
- map(0x6c00, 0x6cff).ram().w(FUNC(xavix_state::bmp_palram_sh_w)).share("bmp_palram_sh");
- map(0x6d00, 0x6dff).ram().w(FUNC(xavix_state::bmp_palram_l_w)).share("bmp_palram_l");
+ map(0x6c00, 0x6cff).ram().w(FUNC(superxavix_state::bmp_palram_sh_w)).share("bmp_palram_sh");
+ map(0x6d00, 0x6dff).ram().w(FUNC(superxavix_state::bmp_palram_l_w)).share("bmp_palram_l");
// map(0x6a40, 0x6a7f).ram().share("ext_segment_regs"); // 16x32 extended segment regs
- map(0x6f78, 0x6f78).rw(FUNC(xavix_state::superxavix_chr_pal_index_r), FUNC(xavix_state::superxavix_chr_pal_index_w)); // SgdPalChrIdx
- map(0x6f79, 0x6f79).rw(FUNC(xavix_state::superxavix_chr_pal_hue_r), FUNC(xavix_state::superxavix_chr_pal_hue_w)); // SgdPalChrHue
- map(0x6f7a, 0x6f7a).rw(FUNC(xavix_state::superxavix_chr_pal_saturation_r), FUNC(xavix_state::superxavix_chr_pal_saturation_w)); // SgdPalChrSat
- map(0x6f7b, 0x6f7b).rw(FUNC(xavix_state::superxavix_chr_pal_lightness_r), FUNC(xavix_state::superxavix_chr_pal_lightness_w)); // SgdPalChrLgt
+ // bitmap plotter(!) (with auto-inc?) - used by super pc tv units
+ map(0x6f60, 0x6f60).w(FUNC(superxavix_state::superxavix_plt_flush_w)); // writes here to flush plotter FIFO
+ map(0x6f62, 0x6f62).w(FUNC(superxavix_state::superxavix_plt_dat_w)); // writes plotter data here
+ map(0x6f63, 0x6f63).r(FUNC(superxavix_state::superxavix_plt_dat_r));
+ map(0x6f64, 0x6f67).rw(FUNC(superxavix_state::superxavix_plt_loc_r), FUNC(superxavix_state::superxavix_plt_loc_w)).share("sx_plt_loc");
+
+ map(0x6f78, 0x6f78).rw(FUNC(superxavix_state::superxavix_chr_pal_index_r), FUNC(superxavix_state::superxavix_chr_pal_index_w)); // SgdPalChrIdx
+ map(0x6f79, 0x6f79).rw(FUNC(superxavix_state::superxavix_chr_pal_hue_r), FUNC(superxavix_state::superxavix_chr_pal_hue_w)); // SgdPalChrHue
+ map(0x6f7a, 0x6f7a).rw(FUNC(superxavix_state::superxavix_chr_pal_saturation_r), FUNC(superxavix_state::superxavix_chr_pal_saturation_w)); // SgdPalChrSat
+ map(0x6f7b, 0x6f7b).rw(FUNC(superxavix_state::superxavix_chr_pal_lightness_r), FUNC(superxavix_state::superxavix_chr_pal_lightness_w)); // SgdPalChrLgt
+
+ map(0x6f7c, 0x6f7c).rw(FUNC(superxavix_state::superxavix_bitmap_pal_index_r), FUNC(superxavix_state::superxavix_bitmap_pal_index_w)); // SgdPalBmpAdr
+ map(0x6f7d, 0x6f7d).rw(FUNC(superxavix_state::superxavix_bitmap_pal_hue_r), FUNC(superxavix_state::superxavix_bitmap_pal_hue_w)); // SgdPalBmpHue
+ map(0x6f7e, 0x6f7e).rw(FUNC(superxavix_state::superxavix_bitmap_pal_saturation_r), FUNC(superxavix_state::superxavix_bitmap_pal_saturation_w)); // SgdPalBmpSat
+ map(0x6f7f, 0x6f7f).rw(FUNC(superxavix_state::superxavix_bitmap_pal_lightness_r), FUNC(superxavix_state::superxavix_bitmap_pal_lightness_w)); // SgdPalBmpLgt
- map(0x6f7c, 0x6f7c).rw(FUNC(xavix_state::superxavix_bitmap_pal_index_r), FUNC(xavix_state::superxavix_bitmap_pal_index_w)); // SgdPalBmpAdr
- map(0x6f7d, 0x6f7d).rw(FUNC(xavix_state::superxavix_bitmap_pal_hue_r), FUNC(xavix_state::superxavix_bitmap_pal_hue_w)); // SgdPalBmpHue
- map(0x6f7e, 0x6f7e).rw(FUNC(xavix_state::superxavix_bitmap_pal_saturation_r), FUNC(xavix_state::superxavix_bitmap_pal_saturation_w)); // SgdPalBmpSat
- map(0x6f7f, 0x6f7f).rw(FUNC(xavix_state::superxavix_bitmap_pal_lightness_r), FUNC(xavix_state::superxavix_bitmap_pal_lightness_w)); // SgdPalBmpLgt
+ map(0x6f80, 0x6f99).rw(FUNC(superxavix_state::superxavix_crtc_1_r), FUNC(superxavix_state::superxavix_crtc_1_w)).share("sx_crtc_1"); // Super XaviX CRTC?
+ map(0x6fa0, 0x6fa7).rw(FUNC(superxavix_state::superxavix_crtc_2_r), FUNC(superxavix_state::superxavix_crtc_2_w)).share("sx_crtc_2"); // maybe more CRTC regs?
- map(0x6fb0, 0x6fc7).ram().share("bmp_base");
+ map(0x6fb0, 0x6fc7).rw(FUNC(superxavix_state::bitmap_params_r), FUNC(superxavix_state::bitmap_params_w)).share("bmp_base");
// extended external bus stuff (possible banking control?)
- map(0x7909, 0x7909).w(FUNC(xavix_state::extended_extbus_reg0_w));
- map(0x790b, 0x790b).w(FUNC(xavix_state::extended_extbus_reg1_w));
- map(0x790d, 0x790d).w(FUNC(xavix_state::extended_extbus_reg2_w));
+ map(0x7909, 0x7909).w(FUNC(superxavix_state::extended_extbus_reg0_w));
+ map(0x790b, 0x790b).w(FUNC(superxavix_state::extended_extbus_reg1_w));
+ map(0x790d, 0x790d).w(FUNC(superxavix_state::extended_extbus_reg2_w));
map(0x7a10, 0x7a12).rw("xavix2002io", FUNC(xavix2002_io_device::pio_dir_r), FUNC(xavix2002_io_device::pio_dir_w));
map(0x7a20, 0x7a22).rw("xavix2002io", FUNC(xavix2002_io_device::pio_out_r), FUNC(xavix2002_io_device::pio_out_w));
@@ -745,13 +791,13 @@ static INPUT_PORTS_START( tom_tvho )
PORT_INCLUDE(xavix)
PORT_MODIFY("MOUSE0X")
- PORT_BIT( 0xff, 0x00, IPT_AD_STICK_X ) PORT_SENSITIVITY(7) PORT_KEYDELTA(35) PORT_REVERSE PORT_PLAYER(1)
+ PORT_BIT( 0xff, 0x01, IPT_AD_STICK_X ) PORT_MINMAX(0x01, 0xfe) PORT_SENSITIVITY(7) PORT_KEYDELTA(35) PORT_REVERSE PORT_PLAYER(1)
PORT_MODIFY("MOUSE0Y")
- PORT_BIT( 0xff, 0x00, IPT_AD_STICK_Y ) PORT_SENSITIVITY(7) PORT_KEYDELTA(35) PORT_PLAYER(1)
+ PORT_BIT( 0xff, 0x01, IPT_AD_STICK_Y ) PORT_MINMAX(0x01, 0xfe) PORT_SENSITIVITY(7) PORT_KEYDELTA(35) PORT_PLAYER(1)
PORT_MODIFY("MOUSE1X")
- PORT_BIT( 0xff, 0x00, IPT_AD_STICK_X ) PORT_SENSITIVITY(7) PORT_KEYDELTA(35) PORT_REVERSE PORT_PLAYER(2)
+ PORT_BIT( 0xff, 0x01, IPT_AD_STICK_X ) PORT_MINMAX(0x01, 0xfe) PORT_SENSITIVITY(7) PORT_KEYDELTA(35) PORT_REVERSE PORT_PLAYER(2)
PORT_MODIFY("MOUSE1Y")
- PORT_BIT( 0xff, 0x00, IPT_AD_STICK_Y ) PORT_SENSITIVITY(7) PORT_KEYDELTA(35) PORT_PLAYER(2)
+ PORT_BIT( 0xff, 0x01, IPT_AD_STICK_Y ) PORT_MINMAX(0x01, 0xfe) PORT_SENSITIVITY(7) PORT_KEYDELTA(35) PORT_PLAYER(2)
PORT_MODIFY("IN0")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
@@ -1602,6 +1648,18 @@ static const gfx_layout char16layout =
16*16*4
};
+
+static const gfx_layout char_16x16x2_layout =
+{
+ 16,16,
+ RGN_FRAC(1,1),
+ 2,
+ { 0,1 },
+ { 6,4,2,0,14,12,10,8,22,20,18,16,30,28,26,24 },
+ { STEP16(0,16*2) },
+ 16*16*2
+};
+
static const gfx_layout charlayout8bpp =
{
8,8,
@@ -1625,6 +1683,7 @@ static const gfx_layout char16layout8bpp =
};
static GFXDECODE_START( gfx_xavix )
+ GFXDECODE_ENTRY( "bios", 0, char_16x16x2_layout, 0, 64 )
GFXDECODE_ENTRY( "bios", 0, gfx_8x8x4_packed_lsb, 0, 16 )
GFXDECODE_ENTRY( "bios", 0, char16layout, 0, 16 )
GFXDECODE_ENTRY( "bios", 0, charlayout8bpp, 0, 1 )
@@ -1695,9 +1754,28 @@ void xavix_state::xavix(machine_config &config)
m_sound->add_route(1, "rspeaker", 1.0);
}
+void xavix_state::xavix_4mb(machine_config &config)
+{
+ xavix(config);
+ m_maincpu->set_addrmap(6, &xavix_state::xavix_4mb_extbus_map);
+}
+
+void xavix_state::xavix_2mb(machine_config &config)
+{
+ xavix(config);
+ m_maincpu->set_addrmap(6, &xavix_state::xavix_2mb_extbus_map);
+}
+
+void xavix_state::xavix_1mb(machine_config &config)
+{
+ xavix(config);
+ m_maincpu->set_addrmap(6, &xavix_state::xavix_1mb_extbus_map);
+}
+
+
void xavix_guru_state::xavix_guru(machine_config &config)
{
- xavix_nv(config);
+ xavix_4mb_nv(config);
m_anport->read_2_callback().set(FUNC(xavix_guru_state::guru_anport2_r));
}
@@ -1710,9 +1788,21 @@ void xavix_i2c_state::xavix_i2c_24c02(machine_config &config)
I2C_24C02(config, "i2cmem", 0);
}
-void xavix_i2c_state::xavix_i2c_24c02_43mhz(machine_config &config)
+void xavix_i2c_state::xavix_i2c_24c02_4mb(machine_config &config)
{
xavix_i2c_24c02(config);
+ m_maincpu->set_addrmap(6, &xavix_i2c_state::xavix_4mb_extbus_map);
+}
+
+void xavix_i2c_state::xavix_i2c_24c02_2mb(machine_config &config)
+{
+ xavix_i2c_24c02(config);
+ m_maincpu->set_addrmap(6, &xavix_i2c_state::xavix_2mb_extbus_map);
+}
+
+void xavix_i2c_state::xavix_i2c_24c02_43mhz(machine_config &config)
+{
+ xavix_i2c_24c02_4mb(config);
// tomplc crashes when you start the game at regular clock speeds
// this could indicate that it's actually one of the newer chips
@@ -1722,7 +1812,7 @@ void xavix_i2c_state::xavix_i2c_24c02_43mhz(machine_config &config)
void xavix_state::xavix_43mhz(machine_config &config)
{
- xavix(config);
+ xavix_4mb(config);
// tomthr crashes when you start the game at regular clock speeds
// this could indicate that it's actually one of the newer chips
@@ -1739,9 +1829,28 @@ void xavix_i2c_state::xavix_i2c_24lc04(machine_config &config)
I2C_24C04(config, "i2cmem", 0); // 24LC04 on Nostalgia games, 24C04 on others
}
-void xavix_i2c_ltv_tam_state::xavix_i2c_24lc04_tam(machine_config &config)
+void xavix_i2c_state::xavix_i2c_24lc04_4mb(machine_config &config)
{
xavix_i2c_24lc04(config);
+ m_maincpu->set_addrmap(6, &xavix_i2c_state::xavix_4mb_extbus_map);
+}
+
+void xavix_i2c_state::xavix_i2c_24lc04_2mb(machine_config &config)
+{
+ xavix_i2c_24lc04(config);
+ m_maincpu->set_addrmap(6, &xavix_i2c_state::xavix_2mb_extbus_map);
+}
+
+void xavix_i2c_state::xavix_i2c_24lc04_1mb(machine_config &config)
+{
+ xavix_i2c_24lc04(config);
+ m_maincpu->set_addrmap(6, &xavix_i2c_state::xavix_1mb_extbus_map);
+}
+
+
+void xavix_i2c_ltv_tam_state::xavix_i2c_24lc04_tam(machine_config &config)
+{
+ xavix_i2c_24lc04_4mb(config);
m_anport->read_0_callback().set(FUNC(xavix_i2c_ltv_tam_state::tam_anport0_r));
m_anport->read_1_callback().set(FUNC(xavix_i2c_ltv_tam_state::tam_anport1_r));
@@ -1752,7 +1861,7 @@ void xavix_i2c_ltv_tam_state::xavix_i2c_24lc04_tam(machine_config &config)
void xavix_tom_tvho_state::xavix_tom_tvho(machine_config &config)
{
- xavix(config);
+ xavix_2mb(config);
m_anport->read_0_callback().set(FUNC(xavix_tom_tvho_state::tvho_anport0_r));
m_anport->read_1_callback().set(FUNC(xavix_tom_tvho_state::tvho_anport1_r));
@@ -1764,6 +1873,8 @@ void xavix_i2c_mj_state::xavix_i2c_24lc02_mj(machine_config &config)
{
xavix_i2c_24c02(config);
+ m_maincpu->set_addrmap(6, &xavix_i2c_mj_state::xavix_2mb_extbus_map);
+
m_anport->read_0_callback().set(FUNC(xavix_i2c_mj_state::mj_anport0_r));
}
@@ -1774,6 +1885,12 @@ void xavix_i2c_state::xavix_i2c_24c08(machine_config &config)
I2C_24C08(config, "i2cmem", 0);
}
+void xavix_i2c_state::xavix_i2c_24c08_4mb(machine_config &config)
+{
+ xavix_i2c_24c08(config);
+ m_maincpu->set_addrmap(6, &xavix_i2c_state::xavix_4mb_extbus_map);
+}
+
void xavix_i2c_state::xavix_i2c_24c16(machine_config& config)
{
xavix(config);
@@ -1781,32 +1898,79 @@ void xavix_i2c_state::xavix_i2c_24c16(machine_config& config)
I2C_24C16(config, "i2cmem", 0);
}
+void xavix_i2c_state::xavix_i2c_24c16_4mb(machine_config& config)
+{
+ xavix_i2c_24c16(config);
+ m_maincpu->set_addrmap(6, &xavix_i2c_state::xavix_4mb_extbus_map);
+}
+
void xavix_state::xavixp(machine_config &config)
{
// other clocks should change too!
-
xavix(config);
m_screen->set_refresh_hz(50);
}
+void xavix_state::xavixp_4mb(machine_config &config)
+{
+ xavixp(config);
+ m_maincpu->set_addrmap(6, &xavix_state::xavix_4mb_extbus_map);
+}
+
+void xavix_state::xavixp_2mb(machine_config &config)
+{
+ xavixp(config);
+ m_maincpu->set_addrmap(6, &xavix_state::xavix_2mb_extbus_map);
+}
+
+void xavix_state::xavixp_1mb(machine_config &config)
+{
+ xavixp(config);
+ m_maincpu->set_addrmap(6, &xavix_state::xavix_1mb_extbus_map);
+}
+
void xavix_state::xavix_nv(machine_config &config)
{
xavix(config);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
}
+void xavix_state::xavix_1mb_nv(machine_config &config)
+{
+ xavix_nv(config);
+ m_maincpu->set_addrmap(6, &xavix_state::xavix_1mb_extbus_map);
+}
+
+void xavix_state::xavix_2mb_nv(machine_config &config)
+{
+ xavix_nv(config);
+ m_maincpu->set_addrmap(6, &xavix_state::xavix_2mb_extbus_map);
+}
+
+void xavix_state::xavix_4mb_nv(machine_config &config)
+{
+ xavix_nv(config);
+ m_maincpu->set_addrmap(6, &xavix_state::xavix_4mb_extbus_map);
+}
+
void xavix_state::xavixp_nv(machine_config &config)
{
xavixp(config);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
}
+void xavix_state::xavixp_1mb_nv(machine_config &config)
+{
+ xavixp_nv(config);
+ m_maincpu->set_addrmap(6, &xavix_state::xavix_1mb_extbus_map);
+}
+
void xavix_mtrk_state::xavix_mtrk(machine_config &config)
{
- xavix(config);
+ xavix_4mb(config);
XAVIX_MTRK_WHEEL(config, m_wheel, 0);
m_wheel->event_out_cb().set(FUNC(xavix_state::ioevent_trg08));
@@ -1821,7 +1985,7 @@ void xavix_mtrk_state::xavix_mtrkp(machine_config &config)
void xavix_madfb_state::xavix_madfb(machine_config &config)
{
- xavix(config);
+ xavix_4mb(config);
XAVIX_MADFB_BALL(config, m_ball, 0);
m_ball->event_out_cb().set(FUNC(xavix_state::ioevent_trg01));
@@ -1871,6 +2035,11 @@ void xavix_cart_state::xavix_cart_daig(machine_config &config)
SOFTWARE_LIST(config, "cart_list_daig").set_original("takara_daigunder_dx_cart");
}
+void xavix_cart_gcslottv_state::xavix_extbus_map(address_map &map)
+{
+ map(0x000000, 0x7fffff).rw(FUNC(xavix_cart_gcslottv_state::cart_r), FUNC(xavix_cart_gcslottv_state::cart_w));
+}
+
void xavix_cart_gcslottv_state::xavix_cart_gcslottv(machine_config &config)
{
xavix_cart(config);
@@ -2034,58 +2203,58 @@ ROM_START( namcons2 )
ROM_END
ROM_START( rad_box )
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("boxing.bin", 0x000000, 0x200000, CRC(5cd40714) SHA1(165260228c029a9502ca0598c84c24fd9bdeaebe) )
ROM_END
ROM_START( rad_boxp )
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("boxing.bin", 0x000000, 0x200000, CRC(5cd40714) SHA1(165260228c029a9502ca0598c84c24fd9bdeaebe) )
ROM_END
ROM_START( rad_bass )
- ROM_REGION(0x100000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x100000, "bios", ROMREGION_ERASE00)
ROM_LOAD("bassfishin.bin", 0x000000, 0x100000, CRC(b54eb1c5) SHA1(084faa9349369f2b8846950765f9c8f758db3e9e) )
ROM_END
ROM_START( rad_bassp )
- ROM_REGION(0x100000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x100000, "bios", ROMREGION_ERASE00)
ROM_LOAD("bassfishin.bin", 0x000000, 0x100000, CRC(b54eb1c5) SHA1(084faa9349369f2b8846950765f9c8f758db3e9e) )
ROM_END
ROM_START( rad_opus )
- ROM_REGION(0x100000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x100000, "bios", ROMREGION_ERASE00)
ROM_LOAD("opus.bin", 0x000000, 0x100000, CRC(f84c11c5) SHA1(6e34129d0ca9c52b7c342fc94860629d81705523) )
ROM_END
ROM_START( rad_opusp )
- ROM_REGION(0x100000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x100000, "bios", ROMREGION_ERASE00)
ROM_LOAD("opus.bin", 0x000000, 0x100000, CRC(f84c11c5) SHA1(6e34129d0ca9c52b7c342fc94860629d81705523) )
ROM_END
ROM_START( rad_opusa )
- ROM_REGION(0x100000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x100000, "bios", ROMREGION_ERASE00)
ROM_LOAD("opus_alt.bin", 0x000000, 0x100000, CRC(509df402) SHA1(c5b863670eac8498ddda9dfde91387634cf7aa9f) )
ROM_END
ROM_START( rad_hnt )
- ROM_REGION(0x100000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x100000, "bios", ROMREGION_ERASE00)
ROM_LOAD("huntin1.bin", 0x000000, 0x100000, CRC(e51e250f) SHA1(d72199096d466cd344bb243ef1228e0df9501d00) )
ROM_END
ROM_START( rad_hnt2 )
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("huntin2.bin", 0x000000, 0x200000, CRC(fb6846df) SHA1(267632790ed42eba7ef1517b86b024799a78839d) )
ROM_END
ROM_START( rad_snow )
- ROM_REGION(0x100000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x100000, "bios", ROMREGION_ERASE00)
ROM_LOAD("snoblu.bin", 0x000000, 0x100000, CRC(593e40b3) SHA1(03483ac39eddd7746470fb60018e704382b0da59) )
ROM_END
ROM_START( rad_snowp )
- ROM_REGION(0x100000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x100000, "bios", ROMREGION_ERASE00)
ROM_LOAD("snoblu.bin", 0x000000, 0x100000, CRC(593e40b3) SHA1(03483ac39eddd7746470fb60018e704382b0da59) )
ROM_END
@@ -2131,87 +2300,87 @@ ROM_START( rad_mtrkp ) // rom was dumped from NTSC unit, assuming to be the same
ROM_END
ROM_START( rad_ssx )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("snowssx.bin", 0x000000, 0x400000, CRC(108e19a6) SHA1(3dfb18efb6331b96a53138a5ba29dae9cd966e90) )
ROM_END
ROM_START( rad_ssxp )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("snowssx.bin", 0x000000, 0x400000, CRC(108e19a6) SHA1(3dfb18efb6331b96a53138a5ba29dae9cd966e90) )
ROM_END
ROM_START( rad_sbw )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("snowbwhite.bin", 0x000000, 0x400000, CRC(640c1473) SHA1(d37d1484a5b14735b35afbca305dad7d178b08a2) )
ROM_END
ROM_START( rad_bdp )
- ROM_REGION(0x800000, "bios", ROMREGION_ERASE00)
+ ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("barbiepad.bin", 0x000000, 0x200000, CRC(48731512) SHA1(377d4e1c98cafcd9d5e1ee27943289d250a6e7a9) )
ROM_END
ROM_START( rad_madf )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("madden.bin", 0x000000, 0x400000, CRC(e972fdcf) SHA1(52001316254880755da959c3441d232fd2c72c7a) )
ROM_END
ROM_START( rad_fb )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("rfootball.bin", 0x000000, 0x400000, CRC(025e0cb4) SHA1(60ce363de236d5119d078e346ad5d2ae50dbc7e1) )
ROM_END
ROM_START( epo_fish )
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("fish.bin", 0x000000, 0x200000, CRC(72392caf) SHA1(16a65c79ff7e3b5f5f514a024bd652412ed38b74) )
ROM_END
ROM_START( epo_efdx )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("excitefishing.bin", 0x000000, 0x400000, CRC(9c85b261) SHA1(6a363faed2ec89c5176e46554a98ca1e20132579) )
ROM_END
ROM_START( epo_esdx )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("baseballdx.bin", 0x000000, 0x400000, CRC(fe2e832e) SHA1(e6343f5e5f52316538d918d0d67c15764aa40f65) )
ROM_END
ROM_START( epo_stad )
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("excitestadium.bin", 0x000000, 0x200000, CRC(b58035b9) SHA1(1382a9e42ff932e7ec2186b210917bcf5c571b86) )
ROM_END
ROM_START( epo_esht ) // ESTJ-MAIN REV:0 PCB
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("tigers.u3", 0x000000, 0x400000, CRC(51a17ef3) SHA1(864190e91775716218be3ac0699570844d67d3e7) )
ROM_END
ROM_START( epo_epp )
- ROM_REGION(0x100000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x100000, "bios", ROMREGION_ERASE00)
ROM_LOAD("excitepingpong.bin", 0x000000, 0x100000, CRC(1fdb9cbd) SHA1(8ed0c1f6d2708ab6e79f0b9553e587c6446e8338) )
ROM_END
ROM_START( epo_epps )
- ROM_REGION(0x100000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x100000, "bios", ROMREGION_ERASE00)
ROM_LOAD("excitepingpong_special.bin", 0x000000, 0x100000, CRC(d59c4b44) SHA1(5a48b9046a1d1beb10972fc1d41d6d63fe829465) )
ROM_END
ROM_START( epo_eppk )
- ROM_REGION(0x100000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x100000, "bios", ROMREGION_ERASE00)
ROM_LOAD("sonokongpingpong.bin", 0x000000, 0x100000, CRC(ea81ced6) SHA1(ef8961d3670148501a478c17cd09f5088e32ad41) )
ROM_END
ROM_START( epo_epp2 )
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("excitepingpong2.u3", 0x000000, 0x200000, CRC(4b70012a) SHA1(4dd80472067027be5a416ec953f4ed6e7df5fc25) )
ROM_END
ROM_START( epo_epp3 )
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("excitepingpong3.bin", 0x000000, 0x200000, CRC(a2ee8bff) SHA1(6e16dbaac9680e1f311c08e3f573d0cf8708b446))
ROM_END
ROM_START( epo_mj ) // MARJ MAIN-11A
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("marj.u4", 0x000000, 0x200000, CRC(4e496424) SHA1(9661130ad8315082bd211b3817e5830b576907a8) )
ROM_END
@@ -2246,17 +2415,17 @@ ROM_START( tak_town )
ROM_END
ROM_START( epo_guru )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("gururinworld.bin", 0x000000, 0x400000, CRC(e5ae4523) SHA1(0e39ef8f94203d34e49422081667805f50a339a1) )
ROM_END
ROM_START( epo_dmon ) // Doraemon has a phototransistor, microphone and 24LC02, PCB says XaviX 2002
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("doraemon.bin", 0x000000, 0x400000, CRC(d8f5412f) SHA1(11a4c017ed400f7aa585be744d9693efe734c192) )
ROM_END
ROM_START( rad_rh )
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("rescueheroes.bin", 0x000000, 0x200000, CRC(38c391a7) SHA1(120334d4ce89d98438c2a35bf7e53af5096cc878) )
ROM_END
@@ -2296,52 +2465,52 @@ ROM_START( ban_krrj ) // KRRJ MAIN PCB 01
ROM_END
ROM_START( tak_geig )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("geigeki.bin", 0x000000, 0x400000, CRC(bd0c3576) SHA1(06f614dbec0225ce4ed866b98450912986d72faf) )
ROM_END
ROM_START( tom_tvho ) // ET105 REV 0.0
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("tvhockey.u4", 0x000000, 0x200000, CRC(9cd72ae2) SHA1(0530851123b607ddb85f9513405ce97c493f5fd6) )
ROM_END
ROM_START( tak_comt )
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("comet.u3", 0x000000, 0x200000, CRC(407c5566) SHA1(41d73c34af8cc3d07a34fcac0bc1856442c94200) )
ROM_END
ROM_START( jarajal )
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("takaraslots.bin", 0x000000, 0x200000, CRC(afae0b72) SHA1(b1c5d80a8dc8466982efd79d54cd82a58f0ff997) )
ROM_END
ROM_START( tomshoot )
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("airgun.u4", 0x000000, 0x200000, CRC(3e4f7b65) SHA1(4e1660d4952c498e250526c2c3f027253e1fcbe1) )
ROM_END
ROM_START( tcarnavi )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("navi.bin", 0x000000, 0x400000, CRC(f4e693fb) SHA1(be37b35f1e1e661e10187253c2c3aa9858a90812) )
ROM_END
ROM_START( tomcpin )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("championpinball.bin", 0x000000, 0x400000, CRC(24f6d753) SHA1(3d3b39692bef8156da9e350b456c4e2f0af74484) )
ROM_END
ROM_START( tomplc )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("imaplayrailconductor.bin", 0x000000, 0x400000, CRC(b775d0ed) SHA1(33142509b11bbe45b0b9222232033dd64ef01ff2) )
ROM_END
ROM_START( tomthr ) // THRJ MAIN PCB REV 0.6
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("thrj.u4", 0x000000, 0x400000, CRC(a7e8dc74) SHA1(676b2a905b757356c6c1dfe3f10148484caa44c5) )
ROM_END
ROM_START( gungunad )
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00)
// some lines were swapped going into the die, but it is unclear if they're swapped back inside it
ROM_LOAD("gga.bin", 0x000000, 0x40000, CRC(5252b6bb) SHA1(8a9f920e4bccabbd337f37a838af574e2b16746f) )
ROM_CONTINUE(0x080000,0x040000)
@@ -2356,12 +2525,12 @@ ROM_END
ROM_START( gungunrv )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("gungunrevolution.u1", 0x000000, 0x400000, CRC(4e34f624) SHA1(7acdd0991df78ecffd156381817ed4f85f6aef09) )
ROM_END
ROM_START( bistro )
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("bistro.u2", 0x000000, 0x200000, CRC(40865e05) SHA1(597a615c61f29c6f6e7ce997a229175cb151242f) )
ROM_END
@@ -2476,7 +2645,7 @@ ROM_END
// ASKJ MAIN-09 PCB
ROM_START( epo_quiz )
- ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 )
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "quizmaster.u1", 0x000000, 0x400000, CRC(e91868b8) SHA1(0128603d755731dafe328b142292dc6e5fe00d78) )
ROM_END
@@ -2515,32 +2684,32 @@ ROM_START( epo_hamd )
ROM_END
ROM_START( tvpc_tom )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00 )
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "tvpc_thomas.u1", 0x000000, 0x400000, CRC(507f334e) SHA1(d66efd13f166fcd2a66133dc981c8a67b2a26d5f) )
ROM_END
ROM_START( tvpc_dor )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00 )
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "tvpc_doreamon.u3", 0x000000, 0x400000, CRC(6f2edbb2) SHA1(98fa86f85e00aa40e7a585ff0bc930cb5ca88362) )
ROM_END
ROM_START( tvpc_ham )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00 )
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "hpcj.u3", 0x000000, 0x400000, CRC(76e8c854) SHA1(5998c03292a16107d0d7ae00f77677582680f323) )
ROM_END
ROM_START( tak_gin )
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00 )
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "snowboard.bin", 0x000000, 0x200000, CRC(79fdeae3) SHA1(ab08790e95cdccf3541ecbddb87ebf0dedb3718b) )
ROM_END
ROM_START( tak_hamr ) // HAMJ MAIN on PCB
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00 )
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "hamj.u4", 0x000000, 0x400000, CRC(2f4f5270) SHA1(dfb75f0d20247cf1c886840149c7cf91780ae1b9) )
ROM_END
ROM_START( tak_beyb )
- ROM_REGION(0x200000, "bios", ROMREGION_ERASE00 )
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "beyblade.u2", 0x000000, 0x200000, CRC(bcf6b3a7) SHA1(1c80f1241138b9d7816f1e5285ff8f3c61739c95) )
ROM_END
@@ -2558,63 +2727,63 @@ ROM_END
*/
// Let's!TVプレイCLASSIC タイトーノスタルジア1
-CONS( 2006, taitons1, 0, 0, xavix_i2c_24lc04, nostalgia,xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD / Taito", "Let's! TV Play Classic - Taito Nostalgia 1 (Japan)", MACHINE_IMPERFECT_SOUND )
+CONS( 2006, taitons1, 0, 0, xavix_i2c_24lc04_2mb, nostalgia,xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD / Taito", "Let's! TV Play Classic - Taito Nostalgia 1 (Japan)", MACHINE_IMPERFECT_SOUND )
// Let's!TVプレイCLASSIC タイトーノスタルジア2
-CONS( 2006, taitons2, 0, 0, xavix_i2c_24lc04, nostalgia,xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD / Taito", "Let's! TV Play Classic - Taito Nostalgia 2 (Japan)", MACHINE_IMPERFECT_SOUND )
+CONS( 2006, taitons2, 0, 0, xavix_i2c_24lc04_2mb, nostalgia,xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD / Taito", "Let's! TV Play Classic - Taito Nostalgia 2 (Japan)", MACHINE_IMPERFECT_SOUND )
// Let's!TVプレイCLASSIC ナムコノスタルジア1
-CONS( 2006, namcons1, 0, 0, xavix_i2c_24lc04, nostalgia,xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD / Namco", "Let's! TV Play Classic - Namco Nostalgia 1 (Japan)", MACHINE_IMPERFECT_SOUND )
+CONS( 2006, namcons1, 0, 0, xavix_i2c_24lc04_1mb, nostalgia,xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD / Namco", "Let's! TV Play Classic - Namco Nostalgia 1 (Japan)", MACHINE_IMPERFECT_SOUND )
// Let's!TVプレイCLASSIC ナムコノスタルジア2
-CONS( 2006, namcons2, 0, 0, xavix_i2c_24lc04, nostalgia,xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD / Namco", "Let's! TV Play Classic - Namco Nostalgia 2 (Japan)", MACHINE_IMPERFECT_SOUND )
+CONS( 2006, namcons2, 0, 0, xavix_i2c_24lc04_1mb, nostalgia,xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD / Namco", "Let's! TV Play Classic - Namco Nostalgia 2 (Japan)", MACHINE_IMPERFECT_SOUND )
-CONS( 2000, rad_ping, 0, 0, xavix, rad_ping, xavix_state, init_xavix, "Radica / SSD Company LTD / Simmer Technology", "Play TV Ping Pong (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // "Simmer Technology" is also known as "Hummer Technology Co., Ltd"
-CONS( 2000, rad_pingp, rad_ping, 0, xavixp, rad_pingp,xavix_state, init_xavix, "Radica / SSD Company LTD / Simmer Technology", "ConnecTV Table Tennis (PAL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2000, rad_ping, 0, 0, xavix_1mb, rad_ping, xavix_state, init_xavix, "Radica / SSD Company LTD / Simmer Technology", "Play TV Ping Pong (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // "Simmer Technology" is also known as "Hummer Technology Co., Ltd"
+CONS( 2000, rad_pingp, rad_ping, 0, xavixp_1mb, rad_pingp,xavix_state, init_xavix, "Radica / SSD Company LTD / Simmer Technology", "ConnecTV Table Tennis (PAL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// this set reads the region byte and will show either 'RADICA: Play TV Opus' or 'RADICA: ConnecTV Opus' as the title
-CONS( 2000, rad_opus, 0, 0, xavix_nv, rad_opus, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Opus (NTSC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // there is a missing 'TV Static' noise effect when menus appear (box shows 'Play TV' ingame just shows 'Radica:Plug & Play')
-CONS( 2000, rad_opusp, rad_opus, 0, xavixp_nv, rad_opusp,xavix_state, init_xavix, "Radica / SSD Company LTD", "ConnecTV Opus (PAL)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2000, rad_opus, 0, 0, xavix_1mb_nv, rad_opus, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Opus (NTSC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // there is a missing 'TV Static' noise effect when menus appear (box shows 'Play TV' ingame just shows 'Radica:Plug & Play')
+CONS( 2000, rad_opusp, rad_opus, 0, xavixp_1mb_nv, rad_opusp,xavix_state, init_xavix, "Radica / SSD Company LTD", "ConnecTV Opus (PAL)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// the set below does NOT read the PAL/NTSC flag, and will only display 'RADICA: Plug & Play Opus' as the title
// older release, or region where the Play TV / ConnecTV trademarks weren't used?
-CONS( 2000, rad_opusa, rad_opus, 0, xavixp_nv, rad_opus, xavix_state, init_xavix, "Radica / SSD Company LTD", "Plug & Play Opus (NTSC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2000, rad_opusa, rad_opus, 0, xavixp_1mb_nv, rad_opus, xavix_state, init_xavix, "Radica / SSD Company LTD", "Plug & Play Opus (NTSC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-CONS( 2000, rad_hnt, 0, 0, xavix_nv, rad_hnt, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Buckmasters Huntin' (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // need to map gun (box shows 'Play TV' ingame just shows 'Plug & Play')
+CONS( 2000, rad_hnt, 0, 0, xavix_1mb_nv, rad_hnt, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Buckmasters Huntin' (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // need to map gun (box shows 'Play TV' ingame just shows 'Plug & Play')
-CONS( 2003, rad_hnt2, 0, 0, xavix_nv, rad_hnt, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Buckmasters Huntin' 2 (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // need to map gun, crashes on pause
+CONS( 2003, rad_hnt2, 0, 0, xavix_2mb_nv, rad_hnt, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Buckmasters Huntin' 2 (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // need to map gun, crashes on pause
CONS( 2003, rad_mtrk, 0, 0, xavix_mtrk, rad_mtrk, xavix_mtrk_state, init_xavix, "Radica / SSD Company LTD", "Play TV Monster Truck (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
CONS( 2003, rad_mtrkp, rad_mtrk, 0, xavix_mtrkp, rad_mtrkp,xavix_mtrk_state, init_xavix, "Radica / SSD Company LTD", "ConnecTV Monster Truck (PAL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
-CONS( 200?, rad_box, 0, 0, xavix, rad_box, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Boxin' (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
-CONS( 200?, rad_boxp, rad_box, 0, xavixp, rad_boxp, xavix_state, init_xavix, "Radica / SSD Company LTD", "ConnecTV Boxin' (PAL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 200?, rad_box, 0, 0, xavix_2mb, rad_box, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Boxin' (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 200?, rad_boxp, rad_box, 0, xavixp_2mb, rad_boxp, xavix_state, init_xavix, "Radica / SSD Company LTD", "ConnecTV Boxin' (PAL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
-CONS( 200?, rad_crdn, 0, 0, xavix, rad_crdn, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Card Night (NTSC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-CONS( 200?, rad_crdnp, rad_crdn, 0, xavixp, rad_crdnp,xavix_state, init_xavix, "Radica / SSD Company LTD", "ConnecTV Card Night (PAL)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 200?, rad_crdn, 0, 0, xavix_1mb, rad_crdn, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Card Night (NTSC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 200?, rad_crdnp, rad_crdn, 0, xavixp_1mb, rad_crdnp,xavix_state, init_xavix, "Radica / SSD Company LTD", "ConnecTV Card Night (PAL)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-CONS( 2000, rad_bb, 0, 0, xavix, rad_bb, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Baseball (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Play TV branding used on box, not ingame
+CONS( 2000, rad_bb, 0, 0, xavix_1mb, rad_bb, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Baseball (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Play TV branding used on box, not ingame
-CONS( 2001, rad_bass, 0, 0, xavix, rad_bass, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Bass Fishin' (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
-CONS( 2001, rad_bassp, rad_bass, 0, xavixp, rad_bassp,xavix_state, init_xavix, "Radica / SSD Company LTD", "ConnecTV Bass Fishin' (PAL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2001, rad_bass, 0, 0, xavix_1mb, rad_bass, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Bass Fishin' (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2001, rad_bassp, rad_bass, 0, xavixp_1mb, rad_bassp,xavix_state, init_xavix, "Radica / SSD Company LTD", "ConnecTV Bass Fishin' (PAL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// there is another 'Snowboarder' with a white coloured board, it appears to be a newer game closer to 'SSX Snowboarder' but without the SSX license.
-CONS( 2001, rad_snow, 0, 0, xavix_nv, rad_snow, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Snowboarder (Blue) (NTSC)", MACHINE_IMPERFECT_SOUND )
-CONS( 2001, rad_snowp, rad_snow, 0, xavixp_nv, rad_snowp,xavix_state, init_xavix, "Radica / SSD Company LTD", "ConnecTV Snowboarder (Blue) (PAL)", MACHINE_IMPERFECT_SOUND )
+CONS( 2001, rad_snow, 0, 0, xavix_1mb_nv, rad_snow, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Snowboarder (Blue) (NTSC)", MACHINE_IMPERFECT_SOUND )
+CONS( 2001, rad_snowp, rad_snow, 0, xavixp_1mb_nv, rad_snowp,xavix_state, init_xavix, "Radica / SSD Company LTD", "ConnecTV Snowboarder (Blue) (PAL)", MACHINE_IMPERFECT_SOUND )
CONS( 2003, rad_madf, 0, 0, xavix_madfb, rad_fb, xavix_madfb_state, init_xavix, "Radica / Electronic Arts / SSD Company LTD", "EA Sports Madden Football (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // no Play TV branding, USA only release?
CONS( 200?, rad_fb, 0, 0, xavix_madfb, rad_fb, xavix_madfb_state, init_xavix, "Radica / SSD Company LTD", "Play TV Football (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // USA only release? doesn't change logo for PAL.
-CONS( 200?, rad_rh, 0, 0, xavix, rad_rh, xavix_state, init_xavix, "Radica / Fisher-Price / SSD Company LTD", "Play TV Rescue Heroes (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 200?, rad_rh, 0, 0, xavix_2mb, rad_rh, xavix_state, init_xavix, "Radica / Fisher-Price / SSD Company LTD", "Play TV Rescue Heroes (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
-CONS( 2004, rad_ssx, 0, 0, xavix, rad_snow, xavix_state, init_xavix, "Radica / Electronic Arts / SSD Company LTD", "Play TV SSX Snowboarder (NTSC)", MACHINE_IMPERFECT_SOUND )
-CONS( 2004, rad_ssxp, rad_ssx, 0, xavixp, rad_snowp,xavix_state, init_xavix, "Radica / Electronic Arts / SSD Company LTD", "ConnecTV SSX Snowboarder (PAL)", MACHINE_IMPERFECT_SOUND )
+CONS( 2004, rad_ssx, 0, 0, xavix_4mb, rad_snow, xavix_state, init_xavix, "Radica / Electronic Arts / SSD Company LTD", "Play TV SSX Snowboarder (NTSC)", MACHINE_IMPERFECT_SOUND )
+CONS( 2004, rad_ssxp, rad_ssx, 0, xavixp_4mb, rad_snowp,xavix_state, init_xavix, "Radica / Electronic Arts / SSD Company LTD", "ConnecTV SSX Snowboarder (PAL)", MACHINE_IMPERFECT_SOUND )
// basically a reissue of SSX but without the license
-CONS( 2006, rad_sbw, 0, 0, xavix, rad_snow, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Snowboarder (White) (NTSC)", MACHINE_IMPERFECT_SOUND )
+CONS( 2006, rad_sbw, 0, 0, xavix_4mb, rad_snow, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Snowboarder (White) (NTSC)", MACHINE_IMPERFECT_SOUND )
// doesn't exist with ConnecTV branding?
-CONS( 2002, rad_bdp, 0, 0, xavix, rad_bdp, xavix_state, init_xavix, "Radica / Mattel / SSD Company LTD", "Barbie Dance Party", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2002, rad_bdp, 0, 0, xavix_2mb, rad_bdp, xavix_state, init_xavix, "Radica / Mattel / SSD Company LTD", "Barbie Dance Party", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// ゴール決めるぜ! エキサイトストライカー
CONS( 2001, epo_strk, 0, 0, xavix, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Goal Kimeruze! Excite Striker (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
@@ -2627,15 +2796,15 @@ CONS( 2001, tak_town, 0, 0, xavix, rad_jcon, xavix_state,
CONS( 2002, rad_jcon, tak_town, 0, xavix, rad_jcon, xavix_state, init_xavix, "Radica / Takara / SSD Company LTD", "Play TV Jr. Construction", MACHINE_IMPERFECT_SOUND )
// ホームラン打とうぜ! エキサイトスタジアム
-CONS( 2000, epo_stad, 0, 0, xavix, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Home Run Datouze! Excite Stadium (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2000, epo_stad, 0, 0, xavix_2mb, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Home Run Datouze! Excite Stadium (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// this seems to be based off the epo_stad code, but heavily modified
-CONS( 2002, rad_bb2, 0, 0, xavix, rad_bb2, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Baseball 2 (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // contains string "Radica RBB2 V1.0"
+CONS( 2002, rad_bb2, 0, 0, xavix_2mb, rad_bb2, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Baseball 2 (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // contains string "Radica RBB2 V1.0"
// 勝負しようぜ! エキサイトスタジアムDX
-CONS( 2002, epo_esdx, 0, 0, xavix, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Shoubu Shiyouze! Excite Stadium DX (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2002, epo_esdx, 0, 0, xavix_4mb, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Shoubu Shiyouze! Excite Stadium DX (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// 阪神タイガース エキサイトスタジアムDX
-CONS( 2003, epo_esht, 0, 0, xavix_nv, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Hanshin Tigers Excite Stadium DX (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2003, epo_esht, 0, 0, xavix_4mb_nv, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Hanshin Tigers Excite Stadium DX (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// interrupt issues after the title screen cause it to hang
// エースきめるぜ!エキサイトテニス
@@ -2645,85 +2814,86 @@ CONS( 2002, epo_tenn, 0, 0, xavix, epo_epp, xavix_state,
CONS( 2001, epo_hamd, 0, 0, xavix, xavix, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Ham-chans Dai Shuugou Dance Surunoda! Hashirunoda! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// 卓球やろうぜ! エキサイトピンポン
-CONS( 2000, epo_epp, 0, 0, xavix, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Takkyuu Yarouze! Excite Ping Pong (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
-CONS( 2000, epo_eppk, epo_epp, 0, xavix, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD / Sonokong", "Real Ping Pong (Korea)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2000, epo_epp, 0, 0, xavix_1mb, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Takkyuu Yarouze! Excite Ping Pong (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2000, epo_eppk, epo_epp, 0, xavix_1mb, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD / Sonokong", "Real Ping Pong (Korea)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// しゃもじdeピンポン
// This special version of Excite Ping Pong was a competition prize, not a retail product. The competition was sponsored by ミツカン (Mizkan)
-CONS( 2001, epo_epps, 0, 0, xavix, epo_epp, xavix_state, init_xavix, "Epoch / Mizkan / SSD Company LTD", "Shamoji de Ping Pong (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2001, epo_epps, 0, 0, xavix_1mb, epo_epp, xavix_state, init_xavix, "Epoch / Mizkan / SSD Company LTD", "Shamoji de Ping Pong (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// 卓球やろうぜ! エキサイトピンポン2
-CONS( 2003, epo_epp2, 0, 0, xavix, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Takkyuu Yarouze! Excite Ping Pong 2 (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2003, epo_epp2, 0, 0, xavix_2mb, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Takkyuu Yarouze! Excite Ping Pong 2 (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// 愛ちゃんに挑戦!エキサイトピンポン
-CONS( 2006, epo_epp3, 0, 0, xavix, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Ai-chan ni Chousen! Excite Ping Pong (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2006, epo_epp3, 0, 0, xavix_2mb, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Ai-chan ni Chousen! Excite Ping Pong (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// TV麻雀 昇段対局~4人打ち
CONS( 2003, epo_mj, 0, 0, xavix_i2c_24lc02_mj, epo_mj, xavix_i2c_mj_state, init_xavix, "Epoch / SSD Company LTD", "TV Mahjong Shoudan Taikyoku - 4-nin Uchi (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// ブラックバス釣ろうぜ! エキサイトフィッシング
-CONS( 2001, epo_fish, 0, 0, xavix, xavix, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Black Bass Tsurouze! Excite Fishing (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2001, epo_fish, 0, 0, xavix_2mb, xavix, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Black Bass Tsurouze! Excite Fishing (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// 大モノ釣ろうぜ! エキサイトフィッシングDX
-CONS( 2003, epo_efdx, 0, 0, xavix_i2c_24c08, epo_efdx, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Dai Mono Tsurouze! Excite Fishing DX (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2003, epo_efdx, 0, 0, xavix_i2c_24c08_4mb,epo_efdx, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Dai Mono Tsurouze! Excite Fishing DX (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// ぐるりんワールド
CONS( 2005, epo_guru, 0, 0, xavix_guru, epo_guru, xavix_guru_state, init_xavix, "Epoch / SSD Company LTD", "Gururin World (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// ドラえもん こえでドカン!わくわくくうきほう!!
-CONS( 2002, epo_dmon, 0, 0, xavix_i2c_24c02, xavix_i2c,xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Doraemon Wakuwaku Kuukihou (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // full / proper title?
+CONS( 2002, epo_dmon, 0, 0, xavix_i2c_24c02_4mb, xavix_i2c,xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Doraemon Wakuwaku Kuukihou (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // full / proper title?
// コロッケ!いただ禁貨!バンカーバトル!!
-CONS( 2003, epo_crok, 0, 0, xavix_i2c_24lc04, xavix_i2c,xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Croket! Itada Kinka! Banker Battle!! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2003, epo_crok, 0, 0, xavix_i2c_24lc04_4mb, xavix_i2c,xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Croket! Itada Kinka! Banker Battle!! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// ミニモニ。ステージ!ダンスだぴょん!
-CONS( 2002, epo_mms, 0, 0, xavix_i2c_24c02, epo_mms, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "mini-moni Stage! Dance Dapyon! (Japan)", MACHINE_IMPERFECT_SOUND )
+CONS( 2002, epo_mms, 0, 0, xavix_i2c_24c02_4mb, epo_mms, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "mini-moni Stage! Dance Dapyon! (Japan)", MACHINE_IMPERFECT_SOUND )
// ズバズバブレード
-CONS( 2002, tak_zuba, 0, 0, xavix_i2c_24c02, xavix_i2c,xavix_i2c_state, init_xavix, "Takara / SSD Company LTD", "Zuba Zuba Blade (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2002, tak_zuba, 0, 0, xavix_i2c_24c02_4mb, xavix_i2c,xavix_i2c_state, init_xavix, "Takara / SSD Company LTD", "Zuba Zuba Blade (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// ミニモニ。ステージ!ダンスだぴょん!ぷらすっ
-CONS( 2003, epo_mmsp, 0, 0, xavix_i2c_24c02, epo_mms, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "mini-moni Stage! Dance Dapyon! Plus (Japan)", MACHINE_IMPERFECT_SOUND )
+CONS( 2003, epo_mmsp, 0, 0, xavix_i2c_24c02_4mb, epo_mms, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "mini-moni Stage! Dance Dapyon! Plus (Japan)", MACHINE_IMPERFECT_SOUND )
// Let's!TVプレイ ケロロ軍曹 ケロロ小隊大パニック!ドタバタ大決戦であります
-CONS( 2006, ban_krrj, 0, 0, xavix, ban_krrj, xavix_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Keroro Shoutai Dai Panic! Dotabata Daikessen de Arimasu (Japan)", MACHINE_IMPERFECT_SOUND )
+CONS( 2006, ban_krrj, 0, 0, xavix_4mb, ban_krrj, xavix_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Keroro Shoutai Dai Panic! Dotabata Daikessen de Arimasu (Japan)", MACHINE_IMPERFECT_SOUND )
// オールスター感謝祭 超豪華!クイズ決定版~赤坂5丁目体感スタジオ~
-CONS( 2004, epo_quiz, 0, 0, xavix, epo_quiz, xavix_state, init_xavix, "Epoch / SSD Company LTD", "All-Star Kansha-sai Chou Gouka! Quiz Kettieban: Akasaka 5-choume Taikan Studio (Japan)", MACHINE_IMPERFECT_SOUND )
+CONS( 2004, epo_quiz, 0, 0, xavix_4mb, epo_quiz, xavix_state, init_xavix, "Epoch / SSD Company LTD", "All-Star Kansha-sai Chou Gouka! Quiz Kettieban: Akasaka 5-choume Taikan Studio (Japan)", MACHINE_IMPERFECT_SOUND )
-CONS( 2005, 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( 2005, has_wamg, 0, 0, xavix_4mb, has_wamg, xavix_state, init_xavix, "Hasbro / Milton Bradley / SSD Company LTD", "TV Wild Adventure Mini Golf (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// GEIGEKI ゴーゴーシューティング
-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 )
+CONS( 2002, tak_geig, 0, 0, xavix_4mb_nv, tak_geig, xavix_state, init_xavix, "Takara / SSD Company LTD", "Geigeki Go Go Shooting (Japan)", MACHINE_IMPERFECT_SOUND )
// TVホッケー
-// playable but could do with better deadzome handling on the controls at least, and for some reason auto-center heads to the bottom left corner in breakout mode?
+// playable but could do with better deadzome handling on the controls at least
+// the trackball functionality works well in the menus, but not the games
CONS( 2001, tom_tvho, 0, 0, xavix_tom_tvho, tom_tvho, xavix_tom_tvho_state, init_xavix, "Tomy / SSD Company LTD", "TV Hockey (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// コメットさん☆ラブリンバトン
-CONS( 2001, tak_comt, 0, 0, xavix_nv, tak_comt, xavix_state, init_xavix, "Takara / SSD Company LTD", "Comet-san Lovelin Baton (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2001, tak_comt, 0, 0, xavix_2mb_nv, tak_comt, xavix_state, init_xavix, "Takara / SSD Company LTD", "Comet-san Lovelin Baton (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// 爆進スノボ ギンギンボーダーズ
-CONS( 2001, tak_gin, 0, 0, xavix, tak_gin, xavix_state, init_xavix, "Takara / SSD Company LTD", "Bakushin Sno-Bo - Gingin Boarders (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS )
+CONS( 2001, tak_gin, 0, 0, xavix_2mb, tak_gin, xavix_state, init_xavix, "Takara / SSD Company LTD", "Bakushin Sno-Bo - Gingin Boarders (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS )
// ぽこぽこハンマーズ
-CONS( 2002, tak_hamr, 0, 0, xavix_i2c_24c02, tak_hamr, xavix_i2c_state, init_xavix, "Takara / SSD Company LTD", "Poko Poko Hammers (Japan)", MACHINE_IMPERFECT_SOUND )
+CONS( 2002, tak_hamr, 0, 0, xavix_i2c_24c02_4mb, tak_hamr, xavix_i2c_state, init_xavix, "Takara / SSD Company LTD", "Poko Poko Hammers (Japan)", MACHINE_IMPERFECT_SOUND )
//ベイブレード アルティメットシューター
-CONS( 2002, tak_beyb, 0, 0, xavix, xavix, xavix_state, init_xavix, "Takara / SSD Company LTD", "Beyblade Ultimate Shooter (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2002, tak_beyb, 0, 0, xavix_2mb, xavix, xavix_state, init_xavix, "Takara / SSD Company LTD", "Beyblade Ultimate Shooter (Japan)", MACHINE_NOT_WORKING | 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", "Jyarajyaland (Japan, PlugIt! version)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2003, jarajal, 0, 0, xavix_2mb_nv, jarajal, xavix_state, init_xavix, "Takara / SSD Company LTD", "Jyarajyaland (Japan, PlugIt! version)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// 近代撃ちまくりバラエティ 射的王(シャテキング)
-CONS( 2002, tomshoot, 0, 0, xavix_i2c_24c02, tomshoot,xavix_i2c_tomshoot_state, init_xavix, "Tomy / SSD Company LTD", "Kindai Uchimakuri Variety Shateking (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2002, tomshoot, 0, 0, xavix_i2c_24c02_2mb, tomshoot,xavix_i2c_tomshoot_state, init_xavix, "Tomy / SSD Company LTD", "Kindai Uchimakuri Variety Shateking (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// トミカ カーナビドライブ / トミー
-CONS( 2003, tcarnavi, 0, 0, xavix_nv, tcarnavi, xavix_state, init_xavix, "Tomy / SSD Company LTD", "Tomica Carnavi Drive (Japan)", MACHINE_IMPERFECT_SOUND )
+CONS( 2003, tcarnavi, 0, 0, xavix_4mb_nv, tcarnavi, xavix_state, init_xavix, "Tomy / SSD Company LTD", "Tomica Carnavi Drive (Japan)", MACHINE_IMPERFECT_SOUND )
// ちゃんぴよんピンボール
-CONS( 2003, tomcpin, 0, 0, xavix_i2c_24c08, tomcpin, xavix_i2c_state, init_xavix, "Tomy / SSD Company LTD", "Champiyon Pinball (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2003, tomcpin, 0, 0, xavix_i2c_24c08_4mb, tomcpin, xavix_i2c_state, init_xavix, "Tomy / SSD Company LTD", "Champiyon Pinball (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// 日本一周 僕はプラレール運転士
CONS( 2004, tomplc, 0, 0, xavix_i2c_24c02_43mhz,tomplc,xavix_i2c_state, init_xavix, "Tomy / SSD Company LTD", "Nihon Isshuu - Boku wa Plarail Untenshi (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
@@ -2733,13 +2903,13 @@ CONS( 2004, tomplc, 0, 0, xavix_i2c_24c02_43mhz,tomplc,xavix_i2c_st
CONS( 2006, tomthr, 0, 0, xavix_43mhz, tomthr, xavix_state, init_xavix, "Takara Tomy / SSD Company LTD", "Asobitai Hyper Rescue - Boku wa Kyuujotai! (Japan)", MACHINE_IMPERFECT_SOUND )
// ガンガンアドベンチャー
-CONS( 2001, gungunad, 0, 0, xavix_nv, xavix, xavix_state, init_xavix, "Takara / SSD Company LTD", "Gun Gun Adventure (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2001, gungunad, 0, 0, xavix_2mb_nv, xavix, xavix_state, init_xavix, "Takara / SSD Company LTD", "Gun Gun Adventure (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// ガンガンレボリューション
-CONS( 2004, gungunrv, 0, 0, xavix_i2c_24lc04, gungunrv, xavix_i2c_state, init_xavix, "Takara / SSD Company LTD", "Gun Gun Revolution (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2004, gungunrv, 0, 0, xavix_i2c_24lc04_4mb, gungunrv, xavix_i2c_state, init_xavix, "Takara / SSD Company LTD", "Gun Gun Revolution (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// ビストロキッズ ぼくもわたしもコックさん!
-CONS( 2001, bistro, 0, 0, xavix, xavix, xavix_state, init_xavix, "Sega Toys / SSD Company LTD", "Bistro Kids: Boku mo Watashi mo Kok-san! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2001, bistro, 0, 0, xavix_2mb, xavix, xavix_state, init_xavix, "Sega Toys / SSD Company LTD", "Bistro Kids: Boku mo Watashi mo Kok-san! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
/* Music titles: Emulation note:
@@ -2791,17 +2961,17 @@ CONS( 2006, ltv_tam, 0, 0, xavix_i2c_24lc04_tam, ltv_tam,xavix_i2c_
CONS( 2008, hikara, 0, 0, xavix_cart_hikara, hikara, xavix_hikara_state, init_xavix, "Takara Tomy / SSD Company LTD", "Hi-kara (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*| MACHINE_IS_BIOS_ROOT*/ )
// 東京フレンドパーク2
-CONS( 2003, epo_tfp2, 0, 0, xavix_i2c_24c08, epo_tfp2, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Tokyo Friend Park 2 (Japan)", MACHINE_IMPERFECT_SOUND) // uses in24lc08b
+CONS( 2003, epo_tfp2, 0, 0, xavix_i2c_24c08_4mb, epo_tfp2, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Tokyo Friend Park II (Japan)", MACHINE_IMPERFECT_SOUND) // uses in24lc08b
// 東京フレンドパーク2スペシャル
-CONS( 2005, epo_tp2s, 0, 0, xavix, epo_tp2p, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Tokyo Friend Park II Special! (Japan)", MACHINE_IMPERFECT_SOUND)
+CONS( 2005, epo_tp2s, 0, 0, xavix_4mb, epo_tp2p, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Tokyo Friend Park II Special! (Japan)", MACHINE_IMPERFECT_SOUND)
// 東京フレンドパークⅡ パーフェクト!めざせ!グランドスラム‼︎
CONS( 2007, epo_tp2p, 0, 0, xavix, epo_tp2p, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Tokyo Friend Park II Perfect! Mezase! Grand Slam!! (Japan)", MACHINE_IMPERFECT_SOUND)
// きかんしゃトーマス テレビパソコン
-CONS( 2005, tvpc_tom, 0, 0, xavix_i2c_24c16, tvpc_tom, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "TV-PC Thomas & Friends (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
+CONS( 2005, tvpc_tom, 0, 0, xavix_i2c_24c16_4mb, tvpc_tom, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "TV-PC Thomas & Friends (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
// ドラえもん テレビパソコン
-CONS( 2003, tvpc_dor, 0, 0, xavix_i2c_24c16, tvpc_tom, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "TV-PC Doraemon (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
+CONS( 2003, tvpc_dor, 0, 0, xavix_i2c_24c16_4mb, tvpc_tom, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "TV-PC Doraemon (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
// とっとこハム太郎 テレビパソコン
-CONS( 2003, tvpc_ham, 0, 0, xavix_i2c_24c16, tvpc_tom, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "TV-PC Tottoko Hamutaro (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
+CONS( 2003, tvpc_ham, 0, 0, xavix_i2c_24c16_4mb, tvpc_tom, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "TV-PC Tottoko Hamutaro (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
diff --git a/src/mame/tvgames/xavix.h b/src/mame/tvgames/xavix.h
index 7c79ccb826f2e..bb0a74bd40213 100644
--- a/src/mame/tvgames/xavix.h
+++ b/src/mame/tvgames/xavix.h
@@ -93,14 +93,11 @@ class xavix_state : public driver_device
m_sprite_xhigh_ignore_hack(true),
m_mainram(*this, "mainram"),
m_fragment_sprite(*this, "fragment_sprite"),
- m_rom_dma_src(*this,"rom_dma_src"),
- m_rom_dma_dst(*this,"rom_dma_dst"),
- m_rom_dma_len(*this,"rom_dma_len"),
+ m_rom_dma_src(*this, "rom_dma_src"),
+ m_rom_dma_dst(*this, "rom_dma_dst"),
+ m_rom_dma_len(*this, "rom_dma_len"),
m_palram_sh(*this, "palram_sh"),
m_palram_l(*this, "palram_l"),
- m_bmp_palram_sh(*this, "bmp_palram_sh"),
- m_bmp_palram_l(*this, "bmp_palram_l"),
- m_bmp_base(*this, "bmp_base"),
m_colmix_sh(*this, "colmix_sh"),
m_colmix_l(*this, "colmix_l"),
m_colmix_ctrl(*this, "colmix_ctrl"),
@@ -113,20 +110,31 @@ class xavix_state : public driver_device
m_sound(*this, "xavix_sound"),
m_adc(*this, "adc"),
m_anport(*this, "anport"),
- m_math(*this, "math"),
- m_xavix2002io(*this, "xavix2002io")
- { }
+ m_math(*this, "math")
+ {
+ m_video_hres_multiplier = 1;
+ }
void xavix(machine_config &config);
void xavix_nv(machine_config &config);
+ void xavix_1mb_nv(machine_config &config);
+ void xavix_2mb_nv(machine_config &config);
+ void xavix_4mb_nv(machine_config &config);
+ void xavix_4mb(machine_config &config);
+ void xavix_2mb(machine_config &config);
+ void xavix_1mb(machine_config &config);
void xavixp(machine_config &config);
void xavixp_nv(machine_config &config);
+ void xavixp_1mb_nv(machine_config &config);
+ void xavixp_4mb(machine_config &config);
+ void xavixp_2mb(machine_config &config);
+ void xavixp_1mb(machine_config &config);
void xavix2000(machine_config &config);
+ void xavix2000_4mb(machine_config &config);
void xavix2000_nv(machine_config &config);
-
- void xavix2002(machine_config &config);
+ void xavix2000_4mb_nv(machine_config &config);
void xavix_43mhz(machine_config &config);
@@ -216,16 +224,18 @@ class xavix_state : public driver_device
bool m_disable_timer_irq_hack = false; // hack for epo_mini which floods timer IRQs to the point it won't do anything else
-private:
+ virtual void xavix_extbus_map(address_map &map) ATTR_COLD;
+
+ void xavix_4mb_extbus_map(address_map &map) ATTR_COLD;
+ void xavix_2mb_extbus_map(address_map &map) ATTR_COLD;
+ void xavix_1mb_extbus_map(address_map &map) ATTR_COLD;
// screen updates
- uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ virtual uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void xavix_map(address_map &map) ATTR_COLD;
void xavix_lowbus_map(address_map &map) ATTR_COLD;
- void xavix_extbus_map(address_map &map) ATTR_COLD;
- void superxavix_lowbus_map(address_map &map) ATTR_COLD;
INTERRUPT_GEN_MEMBER(interrupt);
TIMER_DEVICE_CALLBACK_MEMBER(scanline_cb);
@@ -242,7 +252,14 @@ class xavix_state : public driver_device
{
if (offset & 0x8000)
{
- return m_rgn[(offset) & (m_rgnlen - 1)];
+ if (m_disable_memory_bypass)
+ {
+ return m_maincpu->space(6).read_byte(offset & 0x7fffff);
+ }
+ else
+ {
+ return m_rgn[(offset) & (m_rgnlen - 1)];
+ }
}
else
{
@@ -252,17 +269,17 @@ class xavix_state : public driver_device
virtual uint8_t opcodes_800000_r(offs_t offset)
{
- // rad_fb, rad_madf confirm that for >0x800000 the CPU only sees ROM when executing opcodes
- return m_rgn[(offset) & (m_rgnlen - 1)];
- }
-
- virtual uint8_t extbus_r(offs_t offset) { return m_rgn[(offset) & (m_rgnlen - 1)]; }
- virtual void extbus_w(offs_t offset, uint8_t data)
- {
- logerror("%s: write to external bus %06x %02x\n", machine().describe_context(), offset, data);
+ if (m_disable_memory_bypass)
+ {
+ return m_maincpu->space(6).read_byte(offset & 0x7fffff);
+ }
+ else
+ {
+ // rad_fb, rad_madf confirm that for >0x800000 the CPU only sees ROM when executing opcodes
+ return m_rgn[(offset) & (m_rgnlen - 1)];
+ }
}
-
uint8_t sample_read(offs_t offset)
{
return read_full_data_sp_bypass(offset);
@@ -413,9 +430,8 @@ class xavix_state : public driver_device
void palram_l_w(offs_t offset, uint8_t data);
void colmix_sh_w(offs_t offset, uint8_t data);
void colmix_l_w(offs_t offset, uint8_t data);
- void bmp_palram_sh_w(offs_t offset, uint8_t data);
- void bmp_palram_l_w(offs_t offset, uint8_t data);
void spriteram_w(offs_t offset, uint8_t data);
+ void mainram_w(offs_t offset, uint8_t data);
bool m_sprite_xhigh_ignore_hack;
void tmap1_regs_w(offs_t offset, uint8_t data, uint8_t mem_mask = ~0);
@@ -425,29 +441,6 @@ class xavix_state : public driver_device
void spriteregs_w(uint8_t data);
- void superxavix_bitmap_pal_index_w(uint8_t data);
- uint8_t superxavix_bitmap_pal_index_r();
- void superxavix_chr_pal_index_w(uint8_t data);
- uint8_t superxavix_chr_pal_index_r();
- uint8_t superxavix_bitmap_pal_hue_r();
- uint8_t superxavix_bitmap_pal_saturation_r();
- uint8_t superxavix_bitmap_pal_lightness_r();
- uint8_t superxavix_chr_pal_hue_r();
- uint8_t superxavix_chr_pal_saturation_r();
- uint8_t superxavix_chr_pal_lightness_r();
- uint8_t superxavix_pal_hue_r(bool bitmap);
- uint8_t superxavix_pal_saturation_r(bool bitmap);
- uint8_t superxavix_pal_lightness_r(bool bitmap);
- void superxavix_bitmap_pal_hue_w(uint8_t data);
- void superxavix_bitmap_pal_saturation_w(uint8_t data);
- void superxavix_bitmap_pal_lightness_w(uint8_t data);
- void superxavix_chr_pal_hue_w(uint8_t data);
- void superxavix_chr_pal_saturation_w(uint8_t data);
- void superxavix_chr_pal_lightness_w(uint8_t data);
- void superxavix_pal_hue_w(uint8_t data, bool bitmap);
- void superxavix_pal_saturation_w(uint8_t data, bool bitmap);
- void superxavix_pal_lightness_w(uint8_t data, bool bitmap);
-
uint8_t pal_ntsc_r();
virtual uint8_t lightgun_r(offs_t offset) { logerror("%s: unhandled lightgun_r %d\n", machine().describe_context(), offset); return 0xff; }
@@ -539,9 +532,6 @@ class xavix_state : public driver_device
uint8_t m_timer_baseval = 0;
- uint8_t m_superxavix_pal_index = 0;
- uint8_t m_superxavix_bitmap_pal_index = 0;
-
int16_t get_vectors(int which, int half);
// raster IRQ
@@ -559,10 +549,6 @@ class xavix_state : public driver_device
required_shared_ptr m_palram_sh;
required_shared_ptr m_palram_l;
- optional_shared_ptr m_bmp_palram_sh;
- optional_shared_ptr m_bmp_palram_l;
- optional_shared_ptr m_bmp_base;
-
required_shared_ptr m_colmix_sh;
required_shared_ptr m_colmix_l;
required_shared_ptr m_colmix_ctrl;
@@ -577,6 +563,10 @@ class xavix_state : public driver_device
required_ioport m_region;
required_device m_gfxdecode;
+ required_device m_sound;
+ required_device m_adc;
+ required_device m_anport;
+ required_device m_math;
uint8_t get_pen_lightness_from_dat(uint16_t dat);
uint8_t get_pen_saturation_from_dat(uint16_t dat);
@@ -585,11 +575,15 @@ class xavix_state : public driver_device
uint16_t apply_pen_saturation_to_dat(uint16_t dat, uint16_t saturation);
uint16_t apply_pen_hue_to_dat(uint16_t dat, uint16_t hue);
+ virtual void get_tile_pixel_dat(uint8_t& dat, int bpp);
+
+ rectangle do_arena(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void update_pen(int pen, uint8_t shval, uint8_t lval);
- 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_regular_layers(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &clip);
+ virtual 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);
+ virtual 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);
+ virtual 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);
@@ -608,28 +602,16 @@ class xavix_state : public driver_device
int get_current_address_byte();
- required_device m_sound;
-
-
uint8_t sound_regram_read_cb(offs_t offset);
-protected:
- required_device m_adc;
- required_device m_anport;
- required_device m_math;
- optional_device m_xavix2002io;
-
uint8_t m_extbusctrl[3]{};
virtual uint8_t extintrf_790x_r(offs_t offset);
virtual void extintrf_790x_w(offs_t offset, uint8_t data);
- // additional SuperXaviX / XaviX2002 stuff
- uint8_t m_sx_extended_extbus[3]{};
-
- void extended_extbus_reg0_w(uint8_t data);
- void extended_extbus_reg1_w(uint8_t data);
- void extended_extbus_reg2_w(uint8_t data);
+ bool m_disable_memory_bypass = false;
+ bool m_disable_sprite_yflip = false;
+ int m_video_hres_multiplier;
};
class xavix_guru_state : public xavix_state
@@ -647,6 +629,135 @@ class xavix_guru_state : public xavix_state
uint8_t guru_anport2_r() { uint8_t ret = m_mouse1x->read()-0x10; return ret; }
};
+class superxavix_state : public xavix_state
+{
+public:
+ superxavix_state(const machine_config &mconfig, device_type type, const char *tag)
+ : xavix_state(mconfig, type, tag)
+ , m_xavix2002io(*this, "xavix2002io")
+ , m_sx_crtc_1(*this, "sx_crtc_1")
+ , m_sx_crtc_2(*this, "sx_crtc_2")
+ , m_sx_plt_loc(*this, "sx_plt_loc")
+ , m_bmp_palram_sh(*this, "bmp_palram_sh")
+ , m_bmp_palram_l(*this, "bmp_palram_l")
+ , m_bmp_base(*this, "bmp_base")
+ , m_extra(*this, "extra")
+ {
+ m_video_hres_multiplier = 2;
+ }
+
+ void xavix2002(machine_config &config);
+ void xavix2002_4mb(machine_config &config);
+
+protected:
+ virtual void machine_start() override ATTR_COLD;
+ virtual void machine_reset() override ATTR_COLD;
+
+ virtual uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override;
+
+ void superxavix_lowbus_map(address_map &map) ATTR_COLD;
+
+ required_device m_xavix2002io;
+
+ virtual void get_tile_pixel_dat(uint8_t &dat, int bpp) override;
+
+private:
+ void superxavix_plt_flush_w(uint8_t data);
+ uint8_t superxavix_plt_dat_r();
+ void superxavix_plt_dat_w(uint8_t data);
+ void superxavix_plt_loc_w(offs_t offset, uint8_t data);
+ uint8_t superxavix_plt_loc_r(offs_t offset);
+
+ void superxavix_bitmap_pal_index_w(uint8_t data);
+ uint8_t superxavix_bitmap_pal_index_r();
+ void superxavix_chr_pal_index_w(uint8_t data);
+ uint8_t superxavix_chr_pal_index_r();
+ uint8_t superxavix_bitmap_pal_hue_r();
+ uint8_t superxavix_bitmap_pal_saturation_r();
+ uint8_t superxavix_bitmap_pal_lightness_r();
+ uint8_t superxavix_chr_pal_hue_r();
+ uint8_t superxavix_chr_pal_saturation_r();
+ uint8_t superxavix_chr_pal_lightness_r();
+ uint8_t superxavix_pal_hue_r(bool bitmap);
+ uint8_t superxavix_pal_saturation_r(bool bitmap);
+ uint8_t superxavix_pal_lightness_r(bool bitmap);
+ void superxavix_bitmap_pal_hue_w(uint8_t data);
+ void superxavix_bitmap_pal_saturation_w(uint8_t data);
+ void superxavix_bitmap_pal_lightness_w(uint8_t data);
+ void superxavix_chr_pal_hue_w(uint8_t data);
+ void superxavix_chr_pal_saturation_w(uint8_t data);
+ void superxavix_chr_pal_lightness_w(uint8_t data);
+ void superxavix_pal_hue_w(uint8_t data, bool bitmap);
+ void superxavix_pal_saturation_w(uint8_t data, bool bitmap);
+ void superxavix_pal_lightness_w(uint8_t data, bool bitmap);
+
+ uint8_t bitmap_params_r(offs_t offset);
+ void bitmap_params_w(offs_t offset, uint8_t data);
+
+ void superxavix_crtc_1_w(offs_t offset, uint8_t data);
+ uint8_t superxavix_crtc_1_r(offs_t offset);
+ void superxavix_crtc_2_w(offs_t offset, uint8_t data);
+ uint8_t superxavix_crtc_2_r(offs_t offset);
+
+ void bmp_palram_sh_w(offs_t offset, uint8_t data);
+ void bmp_palram_l_w(offs_t offset, uint8_t data);
+
+ void extended_extbus_reg0_w(uint8_t data);
+ void extended_extbus_reg1_w(uint8_t data);
+ void extended_extbus_reg2_w(uint8_t data);
+
+ void draw_bitmap_layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
+ uint8_t get_next_bit_sx();
+ virtual void draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override;
+ virtual void draw_tilemap(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int which) override;
+
+ uint8_t m_superxavix_pal_index = 0;
+ uint8_t m_superxavix_bitmap_pal_index = 0;
+ uint32_t m_sx_plt_address = 0;
+ uint8_t m_sx_plt_mode = 0;
+ uint8_t m_plotter_has_byte = 0;
+ uint8_t m_plotter_current_byte = 0x00;
+
+ uint8_t m_sx_extended_extbus[3]{};
+
+ required_shared_ptr m_sx_crtc_1;
+ required_shared_ptr m_sx_crtc_2;
+ required_shared_ptr m_sx_plt_loc;
+
+ required_shared_ptr m_bmp_palram_sh;
+ required_shared_ptr m_bmp_palram_l;
+ required_shared_ptr m_bmp_base;
+
+ optional_region_ptr m_extra;
+
+ bool m_use_superxavix_extra; // does not need saving
+};
+
+
+class superxavix_i2c_state : public superxavix_state
+{
+public:
+ superxavix_i2c_state(const machine_config &mconfig, device_type type, const char *tag)
+ : superxavix_state(mconfig, type, tag),
+ m_i2cmem(*this, "i2cmem")
+ { }
+
+ void superxavix_i2c_24c16(machine_config &config);
+ void superxavix_i2c_24c08(machine_config &config);
+ void superxavix_i2c_24c04(machine_config &config);
+ void superxavix_i2c_24c04_4mb(machine_config &config);
+ void superxavix_i2c_24c02(machine_config &config);
+ void superxavix_i2c_mrangbat(machine_config& config);
+
+protected:
+ virtual void write_io1(uint8_t data, uint8_t direction) override;
+
+ required_device m_i2cmem;
+};
+
+
+
class xavix_i2c_state : public xavix_state
{
public:
@@ -656,20 +767,25 @@ class xavix_i2c_state : public xavix_state
{ }
void xavix_i2c_24lc04(machine_config &config);
+ void xavix_i2c_24lc04_4mb(machine_config &config);
+ void xavix_i2c_24lc04_2mb(machine_config &config);
+ void xavix_i2c_24lc04_1mb(machine_config &config);
void xavix_i2c_24c02(machine_config &config);
+ void xavix_i2c_24c02_4mb(machine_config &config);
+ void xavix_i2c_24c02_2mb(machine_config &config);
void xavix_i2c_24c02_43mhz(machine_config &config);
void xavix_i2c_24c08(machine_config &config);
+ void xavix_i2c_24c08_4mb(machine_config &config);
void xavix_i2c_24c16(machine_config &config);
+ void xavix_i2c_24c16_4mb(machine_config &config);
void xavix2000_i2c_24c08(machine_config &config);
+ void xavix2000_i2c_24c08_4mb(machine_config &config);
void xavix2000_i2c_24c04(machine_config &config);
+ void xavix2000_i2c_24c04_2mb(machine_config &config);
+ void xavix2000_i2c_24c04_4mb(machine_config &config);
void xavix2000_i2c_24c02(machine_config &config);
- void xavix2002_i2c_24c08(machine_config &config);
- void xavix2002_i2c_24c04(machine_config &config);
- void xavix2002_i2c_24c02(machine_config &config);
- void xavix2002_i2c_mrangbat(machine_config& config);
-
protected:
virtual void write_io1(uint8_t data, uint8_t direction) override;
@@ -796,10 +912,10 @@ class xavix_tom_tvho_state : public xavix_state
private:
private:
- uint8_t tvho_anport0_r() { return m_mouse0x->read()^0x7f; }
- uint8_t tvho_anport1_r() { return m_mouse0y->read()^0x7f; }
- uint8_t tvho_anport2_r() { return m_mouse1x->read()^0x7f; }
- uint8_t tvho_anport3_r() { return m_mouse1y->read()^0x7f; }
+ uint8_t tvho_anport0_r() { return (m_mouse0x->read()^0x7f)+1; }
+ uint8_t tvho_anport1_r() { return (m_mouse0y->read()^0x7f)+1; }
+ uint8_t tvho_anport2_r() { return (m_mouse1x->read()^0x7f)+1; }
+ uint8_t tvho_anport3_r() { return (m_mouse1y->read()^0x7f)+1; }
};
@@ -842,7 +958,9 @@ class xavix_cart_state : public xavix_state
xavix_state(mconfig, type, tag),
m_cartslot(*this, "cartslot")
{
- m_cartlimit = 0x400000;
+ // all signals 0x000000 - 0x5fffff go to the cart
+ // even if the largest cart is 0x400000 in size
+ m_cartlimit = 0x600000;
}
void xavix_cart(machine_config &config);
@@ -854,25 +972,51 @@ class xavix_cart_state : public xavix_state
protected:
+ virtual void xavix_extbus_map(address_map &map) override ATTR_COLD;
+
+ u8 cart_r(offs_t offset)
+ {
+ if (m_cartslot->has_cart())
+ {
+ return m_cartslot->read_cart(offset);
+ }
+ else
+ {
+ return m_rgn[(offset) & (m_rgnlen - 1)];
+ }
+ }
+
+ void cart_w(offs_t offset, uint8_t data)
+ {
+ if (m_cartslot->has_cart())
+ {
+ m_cartslot->write_cart(offset, data);
+ }
+ else
+ {
+ logerror("%s: unhandled write access to cart area with no cart installed %08x %02x\n", machine().describe_context(), offset, data);
+ }
+ }
+
// for Cart cases this memory bypass becomes more complex
virtual uint8_t opcodes_000000_r(offs_t offset) override
{
if (offset & 0x8000)
{
- if ((offset & 0x7fffff) >= m_cartlimit)
+ if (m_disable_memory_bypass)
{
- return m_rgn[(offset) & (m_rgnlen - 1)];
+ return m_maincpu->space(6).read_byte(offset & 0x7fffff);
}
else
{
- if (m_cartslot->has_cart())
+ if ((offset & 0x7fffff) >= m_cartlimit)
{
- return m_cartslot->read_cart(offset);
+ return m_rgn[(offset) & (m_rgnlen - 1)];
}
else
{
- return m_rgn[(offset) & (m_rgnlen - 1)];
+ return cart_r(offset);
}
}
}
@@ -884,19 +1028,19 @@ class xavix_cart_state : public xavix_state
virtual uint8_t opcodes_800000_r(offs_t offset) override
{
- if ((offset & 0x7fffff) >= m_cartlimit)
+ if (m_disable_memory_bypass)
{
- return m_rgn[(offset) & (m_rgnlen - 1)];
+ return m_maincpu->space(6).read_byte(offset & 0x7fffff);
}
else
{
- if (m_cartslot->has_cart())
+ if ((offset & 0x7fffff) >= m_cartlimit)
{
- return m_cartslot->read_cart(offset);
+ return m_rgn[(offset) & (m_rgnlen - 1)];
}
else
{
- return m_rgn[(offset) & (m_rgnlen - 1)];
+ return cart_r(offset);
}
}
}
@@ -918,51 +1062,6 @@ class xavix_cart_state : public xavix_state
}
};
- virtual uint8_t extbus_r(offs_t offset) override
- {
- if (m_cartslot->has_cart() && m_cartslot->is_read_access_not_rom())
- {
- logerror("%s: read from external bus %06x (SEEPROM READ?)\n", machine().describe_context(), offset);
- return m_cartslot->read_extra(offset);
- }
- else
- {
- if ((offset & 0x7fffff) >= m_cartlimit)
- {
- return m_rgn[(offset) & (m_rgnlen - 1)];
- }
- else
- {
- if (m_cartslot->has_cart())
- {
- return m_cartslot->read_cart(offset);
- }
- else
- {
- return m_rgn[(offset) & (m_rgnlen - 1)];
- }
- }
- }
- }
- virtual void extbus_w(offs_t offset, uint8_t data) override
- {
- if (m_cartslot->has_cart() && m_cartslot->is_write_access_not_rom())
- {
- logerror("%s: write to external bus %06x %02x (SEEPROM WRITE?)\n", machine().describe_context(), offset, data);
- return m_cartslot->write_extra(offset, data);
- }
- else
- {
- if (m_cartslot->has_cart())
- {
- return m_cartslot->write_cart(offset, data);
- }
- else
- {
- logerror("%s: write to external bus %06x %02x\n", machine().describe_context(), offset, data);
- }
- }
- }
virtual inline uint8_t read_full_data_sp_bypass(uint32_t offset) override
{
@@ -976,14 +1075,7 @@ class xavix_cart_state : public xavix_state
}
else
{
- if (m_cartslot->has_cart())
- {
- return m_cartslot->read_cart(offset);
- }
- else
- {
- return m_rgn[(offset) & (m_rgnlen - 1)];
- }
+ return cart_r(offset);
}
}
else
@@ -996,14 +1088,7 @@ class xavix_cart_state : public xavix_state
}
else
{
- if (m_cartslot->has_cart())
- {
- return m_cartslot->read_cart(offset);
- }
- else
- {
- return m_rgn[(offset) & (m_rgnlen - 1)];
- }
+ return cart_r(offset);
}
}
else
@@ -1030,6 +1115,7 @@ class xavix_cart_gcslottv_state : public xavix_cart_state
void xavix_cart_gcslottv(machine_config &config);
protected:
+ virtual void xavix_extbus_map(address_map &map) override ATTR_COLD;
};
class xavix_i2c_cart_state : public xavix_cart_state
diff --git a/src/mame/tvgames/xavix2.cpp b/src/mame/tvgames/xavix2.cpp
index d27134397a11e..bf43fe20f525f 100644
--- a/src/mame/tvgames/xavix2.cpp
+++ b/src/mame/tvgames/xavix2.cpp
@@ -755,6 +755,13 @@ ROM_START( ltv_naru )
ROM_LOAD( "naruto.bin", 0x000000, 0x800000, CRC(e3465ad2) SHA1(13e3d2de5d5a084635cab158f3639a1ea73265dc) )
ROM_END
+ROM_START( ban_db2j )
+ ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD( "db2j.u3", 0x000000, 0x800000, CRC(7362ac0d) SHA1(f1880470f0db56135d9bc88d7193d037ac49b996) )
+
+ // also has a AT24C08
+ROM_END
+
ROM_START( epo_dabj )
ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "dabj.u3", 0x000000, 0x800000, CRC(9ebc1384) SHA1(38abaebd05bc9ab300ee5fbf37bd88ce9cbd20e1) )
@@ -775,6 +782,9 @@ ROM_END
// Let's!TVプレイ NARUTO-ナルト- 忍者体感~だってばよ~ / バンダイ / 日本
CONS( 2006, ltv_naru, 0, 0, config, naruto, naruto_state, empty_init, "Bandai / SSD Company LTD", "Let's TV Play Naruto (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+// Let's!TVプレイ ドラゴンボールZ バトル体感かめはめ波2~オッスおめぇ悟空 天下一武道会~
+CONS( 2006, ban_db2j, 0, 0, config, naruto, naruto_state, empty_init, "Bandai / SSD Company LTD", "Let's TV Play Dragon Ball Z Battle Experience Kamehameha 2 ~Ossu Ome Goku Tenkaichi Budokai~ (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+
// テレビであそぼう!まなぼう! 超脳力あいうえお図鑑
CONS( 2006, epo_dabj, 0, 0, config, dabj, xavix2_state, empty_init, "Epoch / SSD Company LTD", "TV de Asobou! Manabou! Chou Nouryoku AIUEO Zukan (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/tvgames/xavix2002_io.cpp b/src/mame/tvgames/xavix2002_io.cpp
index c3dd0f5b03881..fc93eba2854cd 100644
--- a/src/mame/tvgames/xavix2002_io.cpp
+++ b/src/mame/tvgames/xavix2002_io.cpp
@@ -44,8 +44,8 @@ void xavix2002_io_device::pio_dir_w(offs_t offset, uint8_t data)
if (offset < 3)
{
m_sx_pio_dir[offset] = data;
+ // update output port after direction change?
pio_out_w(offset, m_sx_pio_out[offset]);
- // update port?
}
}
@@ -70,15 +70,11 @@ void xavix2002_io_device::pio_out_w(offs_t offset, uint8_t data)
{
m_sx_pio_out[offset] = data;
- // TODO: look at direction register
-
- uint8_t outdata = m_sx_pio_out[offset] & m_sx_pio_dir[offset];
-
switch (offset)
{
- case 0: m_out0_cb(outdata); break;
- case 1: m_out1_cb(outdata); break;
- case 2: m_out2_cb(outdata); break;
+ case 0: m_out0_cb(0, m_sx_pio_out[offset], m_sx_pio_dir[offset]); break;
+ case 1: m_out1_cb(0, m_sx_pio_out[offset], m_sx_pio_dir[offset]); break;
+ case 2: m_out2_cb(0, m_sx_pio_out[offset], m_sx_pio_dir[offset]); break;
default: break;
}
}
@@ -107,13 +103,14 @@ uint8_t xavix2002_io_device::pio_in_r(offs_t offset)
switch (offset)
{
- case 0: ret = m_in0_cb(); break;
- case 1: ret = m_in1_cb(); break;
- case 2: ret = m_in2_cb(); break;
+ case 0: ret = m_in0_cb(0, m_sx_pio_dir[offset]); break;
+ case 1: ret = m_in1_cb(0, m_sx_pio_dir[offset]); break;
+ case 2: ret = m_in2_cb(0, m_sx_pio_dir[offset]); break;
default: ret = 0x00; break;
}
- // mask with direction register before returning
+ ret &= ~m_sx_pio_dir[offset];
+ ret |= m_sx_pio_out[offset] & m_sx_pio_dir[offset];
return ret;
}
diff --git a/src/mame/tvgames/xavix_2000.cpp b/src/mame/tvgames/xavix_2000.cpp
index 8ba06048f1923..40fc13506bfc4 100644
--- a/src/mame/tvgames/xavix_2000.cpp
+++ b/src/mame/tvgames/xavix_2000.cpp
@@ -162,13 +162,13 @@ static INPUT_PORTS_START( epo_sdb )
PORT_INCLUDE(xavix)
PORT_MODIFY("MOUSE0X")
- PORT_BIT( 0xff, 0x00, IPT_AD_STICK_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_REVERSE PORT_PLAYER(1)
+ PORT_BIT( 0xff, 0x01, IPT_AD_STICK_X ) PORT_MINMAX(0x01, 0xfe) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_REVERSE PORT_PLAYER(1)
PORT_MODIFY("MOUSE0Y")
- PORT_BIT( 0xff, 0x00, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_PLAYER(1)
+ PORT_BIT( 0xff, 0x01, IPT_AD_STICK_Y ) PORT_MINMAX(0x01, 0xfe) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_PLAYER(1)
PORT_MODIFY("MOUSE1X")
- PORT_BIT( 0xff, 0x00, IPT_AD_STICK_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_REVERSE PORT_PLAYER(2)
+ PORT_BIT( 0xff, 0x01, IPT_AD_STICK_X ) PORT_MINMAX(0x01, 0xfe) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_REVERSE PORT_PLAYER(2)
PORT_MODIFY("MOUSE1Y")
- PORT_BIT( 0xff, 0x00, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_PLAYER(2)
+ PORT_BIT( 0xff, 0x01, IPT_AD_STICK_Y ) PORT_MINMAX(0x01, 0xfe) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_PLAYER(2)
PORT_MODIFY("IN0")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
@@ -220,16 +220,28 @@ void xavix_state::xavix2000(machine_config &config)
m_palette->set_entries(512);
}
-void xavix_state::xavix2000_nv(machine_config &config)
+void xavix_state::xavix2000_4mb(machine_config &config)
{
xavix2000(config);
+ m_maincpu->set_addrmap(6, &xavix_state::xavix_4mb_extbus_map);
+}
+void xavix_state::xavix2000_nv(machine_config &config)
+{
+ xavix2000(config);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
}
-void xavix_2000_nv_sdb_state::xavix2000_nv_sdb(machine_config &config)
+void xavix_state::xavix2000_4mb_nv(machine_config &config)
{
xavix2000_nv(config);
+ m_maincpu->set_addrmap(6, &xavix_state::xavix_4mb_extbus_map);
+}
+
+
+void xavix_2000_nv_sdb_state::xavix2000_nv_sdb(machine_config &config)
+{
+ xavix2000_4mb_nv(config);
m_anport->read_0_callback().set(FUNC(xavix_2000_nv_sdb_state::sdb_anport0_r));
m_anport->read_1_callback().set(FUNC(xavix_2000_nv_sdb_state::sdb_anport1_r));
@@ -240,10 +252,16 @@ void xavix_2000_nv_sdb_state::xavix2000_nv_sdb(machine_config &config)
void xavix_i2c_state::xavix2000_i2c_24c08(machine_config &config)
{
xavix2000(config);
-
I2C_24C08(config, "i2cmem", 0);
}
+void xavix_i2c_state::xavix2000_i2c_24c08_4mb(machine_config &config)
+{
+ xavix2000_i2c_24c08(config);
+ m_maincpu->set_addrmap(6, &xavix_i2c_state::xavix_4mb_extbus_map);
+}
+
+
void xavix_i2c_state::xavix2000_i2c_24c04(machine_config &config)
{
xavix2000(config);
@@ -251,6 +269,19 @@ void xavix_i2c_state::xavix2000_i2c_24c04(machine_config &config)
I2C_24C04(config, "i2cmem", 0);
}
+void xavix_i2c_state::xavix2000_i2c_24c04_2mb(machine_config &config)
+{
+ xavix2000_i2c_24c04(config);
+ m_maincpu->set_addrmap(6, &xavix_i2c_state::xavix_2mb_extbus_map);
+}
+
+void xavix_i2c_state::xavix2000_i2c_24c04_4mb(machine_config &config)
+{
+ xavix2000_i2c_24c04(config);
+ m_maincpu->set_addrmap(6, &xavix_i2c_state::xavix_4mb_extbus_map);
+}
+
+
void xavix_i2c_state::xavix2000_i2c_24c02(machine_config &config)
{
xavix2000(config);
@@ -287,7 +318,7 @@ ROM_START( epo_hamc ) // ET158 MB REV.0
ROM_END
ROM_START( ban_omt ) // OMTJ MAIN-07
- ROM_REGION(0x800000, "bios", ROMREGION_ERASE00)
+ ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("otmj.bin", 0x000000, 0x400000, CRC(1c1dc6fb) SHA1(d0cf1345b765d66ca9a0870ee6d0e3ccd84a8c0b) )
ROM_END
@@ -362,32 +393,32 @@ void xavix_i2c_lotr_state::init_epo_mini()
// doesn't use extra opcodes?
// K.O.しようぜ!エキサイトボクシング
-CONS( 2002, epo_ebox, 0, 0, xavix2000_nv, epo_ebox, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Excite Boxing (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // doesn't use XaviX2000 extra opcodes, but had that type of CPU
+CONS( 2002, epo_ebox, 0, 0, xavix2000_4mb_nv, epo_ebox, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Excite Boxing (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // doesn't use XaviX2000 extra opcodes, but had that type of CPU
// die not confirmed, but uses extra opcodes. (hangs on title screen due to combination of freq_timer_done nested interrupts tripping, and waiting on bits in input ports to change
// ストライクきめるぜ! エキサイトボウリング
-CONS( 2002, epo_bowl, 0, 0, xavix2000_i2c_24c04, epo_bowl, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Excite Bowling (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2002, epo_bowl, 0, 0, xavix2000_i2c_24c04_2mb, epo_bowl, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Excite Bowling (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// スーパーショット! エキサイトゴルフ
// needs timer irq hack to boot, fails to draw main menu properly (buggy xavix2000 opcodes?) (2002 date on PCB, 2003 ingame)
-CONS( 2003, epo_golf, 0, 0, xavix2000_i2c_24c04, ttv_lotr, xavix_i2c_lotr_state, init_epo_mini, "Epoch / SSD Company LTD", "Super Shot! Excite Golf (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2003, epo_golf, 0, 0, xavix2000_i2c_24c04_4mb, ttv_lotr, xavix_i2c_lotr_state, init_epo_mini, "Epoch / SSD Company LTD", "Super Shot! Excite Golf (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// とっとこハム太郎 ハムハム大サーカス!
-CONS( 2002, epo_hamc, 0, 0, xavix2000, epo_hamc, xavix_epo_hamc_state, init_xavix, "Epoch / SSD Company LTD", "Tottoko Hamtaro - Ham Ham Dai Circus! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2002, epo_hamc, 0, 0, xavix2000_4mb, epo_hamc, xavix_epo_hamc_state, init_xavix, "Epoch / SSD Company LTD", "Tottoko Hamtaro - Ham Ham Dai Circus! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// ミニモニ。パーティ!リズムでぴょん!
// needs timer irq hack to boot
-CONS( 2003, epo_mini, 0, 0, xavix2000_i2c_24c08, ttv_lotr, xavix_i2c_lotr_state, init_epo_mini, "Epoch / SSD Company LTD", "mini-moni Party! Rhythm de Pyon! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2003, epo_mini, 0, 0, xavix2000_i2c_24c08_4mb, ttv_lotr, xavix_i2c_lotr_state, init_epo_mini, "Epoch / SSD Company LTD", "mini-moni Party! Rhythm de Pyon! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// カードスキャン! エキサイトステージ サッカー日本代表チーム
-CONS( 2006, epo_es2j, 0, 0, xavix2000, xavix, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Card Scan! Excite Stage Soccer Nippon Daihyou Team (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2006, epo_es2j, 0, 0, xavix2000_4mb, xavix, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Card Scan! Excite Stage Soccer Nippon Daihyou Team (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// takes a long time to boot to a card scanner error
// This is a product in the Duel Masters line called Duel Station; the boot up screen calls it Duel Station, title logo is Duel Masters
// It also has a cartridge slot in addition to the card scanner and at least 1 ROM cartridge was produced "デュエルマスターズ デュエルステーション専用カートリッジ Ver.1"
// デュエルステーション
-CONS( 2003, duelmast, 0, 0, xavix2000_i2c_24c04, duelmast, xavix_duelmast_state, init_xavix, "Takara / SSD Company LTD", "Duel Masters: Duel Station (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2003, duelmast, 0, 0, xavix2000_i2c_24c04_2mb, duelmast, xavix_duelmast_state, init_xavix, "Takara / SSD Company LTD", "Duel Masters: Duel Station (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// スーパーダッシュボール
CONS( 2004, epo_sdb, 0, 0, xavix2000_nv_sdb, epo_sdb, xavix_2000_nv_sdb_state, init_xavix, "Epoch / SSD Company LTD", "Super Dash Ball (Japan)", MACHINE_IMPERFECT_SOUND )
@@ -404,8 +435,8 @@ CONS( 2005, tom_jump, 0, 0, xavix2000_i2c_24c04, ttv_mx, xavix_i2c_sta
CONS( 2003, drgqst, 0, 0, xavix2000_i2c_24c08, ttv_lotr, xavix_i2c_lotr_state, init_xavix, "Square Enix / SSD Company LTD", "Kenshin Dragon Quest: Yomigaerishi Densetsu no Ken (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// チョロQビュンビュンレーサー
-// lots broken, including attempting bad sprite DMAs, probably buggy xavix2000 opcodes
-CONS( 2003, tak_chq, 0, 0, xavix2000_i2c_24c04, xavix_i2c, xavix_i2c_state, init_xavix, "Takara / SSD Company LTD", "Choro-Q Byun Byun Racer (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+// crashes whenever a CPU car reaches a corner - see map
+CONS( 2003, tak_chq, 0, 0, xavix2000_i2c_24c04_4mb, xavix_i2c, xavix_i2c_state, init_xavix, "Takara / SSD Company LTD", "Choro-Q Byun Byun Racer (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// hangs after starting a game, check why
// Let’s!TV プレイ 体感格闘ワンピースパンチバトル ~海賊王にキミがなる!~
@@ -413,7 +444,7 @@ CONS( 2004, ban_onep, 0, 0, xavix2000_i2c_24c04, ttv_lotr, xavix_i2c_lotr_sta
// Let’s!TV プレイ 闘印奥義 陰陽大戦記~目指せ最強闘神士~
// stalls unless timers are disabled like epo_mini / epo_golf, 2004 date on PCB, 2005 ingame
-CONS( 2005, ban_omt, 0, 0, xavix2000_i2c_24c04, ttv_lotr, xavix_i2c_lotr_state, init_epo_mini, "Bandai / SSD Company LTD", "Let's! TV Play Touin Ougi Onmyou Taisenki: Mezase Saikyou Toushinshi (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2005, ban_omt, 0, 0, xavix2000_i2c_24c04_4mb, ttv_lotr, xavix_i2c_lotr_state, init_epo_mini, "Bandai / SSD Company LTD", "Let's! TV Play Touin Ougi Onmyou Taisenki: Mezase Saikyou Toushinshi (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// ディズニープリンセス キラキラ魔法のレッスン
-CONS( 2004, tom_dpgm, 0, 0, xavix2000_i2c_24c08, ttv_lotr, xavix_i2c_lotr_state, init_xavix, "Tomy / SSD Company LTD", "Disney Princess Kirakira Mahou no Lesson (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2004, tom_dpgm, 0, 0, xavix2000_i2c_24c08_4mb, ttv_lotr, xavix_i2c_lotr_state, init_xavix, "Tomy / SSD Company LTD", "Disney Princess Kirakira Mahou no Lesson (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/tvgames/xavix_2000.h b/src/mame/tvgames/xavix_2000.h
index 27492005a587c..dbbda1803e24d 100644
--- a/src/mame/tvgames/xavix_2000.h
+++ b/src/mame/tvgames/xavix_2000.h
@@ -18,10 +18,10 @@ class xavix_2000_nv_sdb_state : public xavix_state
protected:
private:
- uint8_t sdb_anport0_r() { return m_mouse0x->read()^0x7f; }
- uint8_t sdb_anport1_r() { return m_mouse0y->read()^0x7f; }
- uint8_t sdb_anport2_r() { return m_mouse1x->read()^0x7f; }
- uint8_t sdb_anport3_r() { return m_mouse1y->read()^0x7f; }
+ uint8_t sdb_anport0_r() { return (m_mouse0x->read()^0x7f)+1; }
+ uint8_t sdb_anport1_r() { return (m_mouse0y->read()^0x7f)+1; }
+ uint8_t sdb_anport2_r() { return (m_mouse1x->read()^0x7f)+1; }
+ uint8_t sdb_anport3_r() { return (m_mouse1y->read()^0x7f)+1; }
};
#endif // MAME_TVGAMES_XAVIX_2000_H
diff --git a/src/mame/tvgames/xavix_2002.cpp b/src/mame/tvgames/xavix_2002.cpp
index 42e292ea4376d..3fb8642373df3 100644
--- a/src/mame/tvgames/xavix_2002.cpp
+++ b/src/mame/tvgames/xavix_2002.cpp
@@ -254,8 +254,8 @@ static INPUT_PORTS_START( xavix_bowl )
PORT_INCLUDE(xavix)
PORT_MODIFY("IN1")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(FUNC(xavix_i2c_bowl_state::camera_r))
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(FUNC(xavix_i2c_bowl_state::camera_r))
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(FUNC(superxavix_i2c_bowl_state::camera_r))
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(FUNC(superxavix_i2c_bowl_state::camera_r))
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("i2cmem", FUNC(i2cmem_device::read_sda))
INPUT_PORTS_END
@@ -275,44 +275,72 @@ static INPUT_PORTS_START( ban_ordj )
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
INPUT_PORTS_END
+static INPUT_PORTS_START( anpanmdx )
+ PORT_INCLUDE(xavix_i2c)
+
+ PORT_MODIFY("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // Back
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) // Start ('Paper')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) // Left in Menu ('Red Star')
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON5 ) // Right in Menu ('Blue Star')
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON6 )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( suprtvpc )
+ PORT_INCLUDE(xavix)
+
+ PORT_MODIFY("MOUSE0X")
+ PORT_BIT( 0xff, 0x00, IPT_MOUSE_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_REVERSE PORT_PLAYER(1)
+ PORT_MODIFY("MOUSE0Y")
+ PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_PLAYER(1)
+INPUT_PORTS_END
+
/* SuperXavix IO port handliner (per game) */
-uint8_t xavix_i2c_jmat_state::read_extended_io0()
+uint8_t superxavix_i2c_jmat_state::read_extended_io0(offs_t offset, uint8_t mem_mask)
{
LOG("%s: read_extended_io0\n", machine().describe_context());
return 0x00;
}
-uint8_t xavix_i2c_jmat_state::read_extended_io1()
+uint8_t superxavix_i2c_jmat_state::read_extended_io1(offs_t offset, uint8_t mem_mask)
{
LOG("%s: read_extended_io1\n", machine().describe_context());
+ uint8_t ret = 0x00;
+
// reads this by reading the byte, then shifting right 4 times to place value into carry flag
- return m_i2cmem->read_sda() << 3;
- //return 0x00;
+ if (!(mem_mask & 0x08))
+ ret |= m_i2cmem->read_sda() << 3;
+
+ return ret;
}
-uint8_t xavix_i2c_jmat_state::read_extended_io2()
+uint8_t superxavix_i2c_jmat_state::read_extended_io2(offs_t offset, uint8_t mem_mask)
{
LOG("%s: read_extended_io2\n", machine().describe_context());
return 0x00;
}
-void xavix_i2c_jmat_state::write_extended_io0(uint8_t data)
+void superxavix_i2c_jmat_state::write_extended_io0(offs_t offset, uint8_t data, uint8_t mem_mask)
{
LOG("%s: io0_data_w %02x\n", machine().describe_context(), data);
}
-void xavix_i2c_jmat_state::write_extended_io1(uint8_t data)
+void superxavix_i2c_jmat_state::write_extended_io1(offs_t offset, uint8_t data, uint8_t mem_mask)
{
LOG("%s: io1_data_w %02x\n", machine().describe_context(), data);
- m_i2cmem->write_sda((data & 0x08) >> 3);
- m_i2cmem->write_scl((data & 0x10) >> 4);
+ if (mem_mask & 0x08)
+ m_i2cmem->write_sda((data & 0x08) >> 3);
+
+ if (mem_mask & 0x10)
+ m_i2cmem->write_scl((data & 0x10) >> 4);
}
-void xavix_i2c_jmat_state::write_extended_io2(uint8_t data)
+void superxavix_i2c_jmat_state::write_extended_io2(offs_t offset, uint8_t data, uint8_t mem_mask)
{
LOG("%s: io2_data_w %02x\n", machine().describe_context(), data);
}
@@ -322,39 +350,52 @@ int xavix_i2c_lotr_state::camera_r() // seems to be some kind of camera status b
return machine().rand();
}
-int xavix_i2c_bowl_state::camera_r() // seems to be some kind of camera status bits
+int superxavix_i2c_bowl_state::camera_r() // seems to be some kind of camera status bits
{
return machine().rand();
}
-void xavix_state::xavix2002(machine_config &config)
+void superxavix_i2c_state::write_io1(uint8_t data, uint8_t direction)
+{
+ m_i2cmem->write_sda(BIT(data | ~direction, 3));
+ m_i2cmem->write_scl(BIT(data | ~direction, 4));
+}
+
+void superxavix_state::xavix2002(machine_config &config)
{
xavix(config);
- XAVIX2002(config.replace(), m_maincpu, MAIN_CLOCK);
+ XAVIX2002(config.replace(), m_maincpu, MAIN_CLOCK * 2);
set_xavix_cpumaps(config);
- m_maincpu->set_addrmap(5, &xavix_state::superxavix_lowbus_map); // has extra video, io etc.
+ m_maincpu->set_addrmap(5, &superxavix_state::superxavix_lowbus_map); // has extra video, io etc.
m_palette->set_entries(512);
+ m_screen->set_size(64*8, 32*8);
+ m_screen->set_visarea(0*8, 64*8-1, 2*8, 30*8-1);
+
XAVIX2002IO(config, m_xavix2002io, 0);
}
+void superxavix_state::xavix2002_4mb(machine_config &config)
+{
+ xavix2002(config);
+ m_maincpu->set_addrmap(6, &superxavix_state::xavix_4mb_extbus_map);
+}
-
-void xavix_i2c_jmat_state::xavix2002_i2c_jmat(machine_config &config)
+void superxavix_i2c_jmat_state::superxavix_i2c_jmat(machine_config &config)
{
- xavix2002_i2c_24c08(config);
-
- m_xavix2002io->read_0_callback().set(FUNC(xavix_i2c_jmat_state::read_extended_io0));
- m_xavix2002io->write_0_callback().set(FUNC(xavix_i2c_jmat_state::write_extended_io0));
- m_xavix2002io->read_1_callback().set(FUNC(xavix_i2c_jmat_state::read_extended_io1));
- m_xavix2002io->write_1_callback().set(FUNC(xavix_i2c_jmat_state::write_extended_io1));
- m_xavix2002io->read_2_callback().set(FUNC(xavix_i2c_jmat_state::read_extended_io2));
- m_xavix2002io->write_2_callback().set(FUNC(xavix_i2c_jmat_state::write_extended_io2));
+ superxavix_i2c_24c08(config);
+
+ m_xavix2002io->read_0_callback().set(FUNC(superxavix_i2c_jmat_state::read_extended_io0));
+ m_xavix2002io->write_0_callback().set(FUNC(superxavix_i2c_jmat_state::write_extended_io0));
+ m_xavix2002io->read_1_callback().set(FUNC(superxavix_i2c_jmat_state::read_extended_io1));
+ m_xavix2002io->write_1_callback().set(FUNC(superxavix_i2c_jmat_state::write_extended_io1));
+ m_xavix2002io->read_2_callback().set(FUNC(superxavix_i2c_jmat_state::read_extended_io2));
+ m_xavix2002io->write_2_callback().set(FUNC(superxavix_i2c_jmat_state::write_extended_io2));
}
-DEVICE_IMAGE_LOAD_MEMBER(xavix2002_super_tv_pc_state::cart_load)
+DEVICE_IMAGE_LOAD_MEMBER(superxavix_super_tv_pc_state::cart_load)
{
u64 length;
memory_region *cart_region = nullptr;
@@ -396,37 +437,98 @@ DEVICE_IMAGE_LOAD_MEMBER(xavix2002_super_tv_pc_state::cart_load)
return std::make_pair(std::error_condition(), std::string());
}
-void xavix2002_super_tv_pc_state::xavix2002_super_tv_pc(machine_config& config)
+void superxavix_super_tv_pc_state::xavix_extbus_map(address_map &map)
+{
+ map(0x000000, 0x7fffff).rom().region("bios", 0x000000);
+ map(0x500000, 0x5fffff).bankr("rombank"); // needed for suprtvpchk and suprtvpcdo to read bitmaps for loading screen and desktop
+ map(0x600000, 0x67ffff).ram().share("bitmap_buffer"); // reads/writes here
+}
+
+void superxavix_super_tv_pc_state::machine_reset()
+{
+ superxavix_state::machine_reset();
+
+ m_rombank->configure_entry(0, memregion("bios")->base() + 0x500000);
+ m_rombank->configure_entry(1, memregion("bios")->base() + 0x700000);
+ m_rombank->set_entry(0);
+}
+
+
+void superxavix_super_tv_pc_state::superxavix_super_tv_pc(machine_config& config)
{
xavix2002(config);
- m_xavix2002io->read_0_callback().set(FUNC(xavix2002_super_tv_pc_state::read_extended_io0));
- m_xavix2002io->read_1_callback().set(FUNC(xavix2002_super_tv_pc_state::read_extended_io1));
- m_xavix2002io->read_2_callback().set(FUNC(xavix2002_super_tv_pc_state::read_extended_io2));
+ m_xavix2002io->read_0_callback().set(FUNC(superxavix_super_tv_pc_state::read_extended_io0));
+ m_xavix2002io->write_0_callback().set(FUNC(superxavix_super_tv_pc_state::write_extended_io0));
+ m_xavix2002io->read_1_callback().set(FUNC(superxavix_super_tv_pc_state::read_extended_io1));
+ m_xavix2002io->write_1_callback().set(FUNC(superxavix_super_tv_pc_state::write_extended_io1));
+ m_xavix2002io->read_2_callback().set(FUNC(superxavix_super_tv_pc_state::read_extended_io2));
+ m_xavix2002io->write_2_callback().set(FUNC(superxavix_super_tv_pc_state::write_extended_io2));
+
+ m_anport->read_0_callback().set(FUNC(superxavix_super_tv_pc_state::stvpc_anport0_r));
+ m_anport->read_1_callback().set(FUNC(superxavix_super_tv_pc_state::stvpc_anport1_r));
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "super_tv_pc_cart");
m_cart->set_width(GENERIC_ROM8_WIDTH);
- m_cart->set_device_load(FUNC(xavix2002_super_tv_pc_state::cart_load));
+ m_cart->set_device_load(FUNC(superxavix_super_tv_pc_state::cart_load));
SOFTWARE_LIST(config, "cart_list").set_original("super_tv_pc_cart");
}
+void superxavix_piano_pc_state::superxavix_piano_pc(machine_config &config)
+{
+ xavix2002(config);
+
+ m_anport->read_0_callback().set(FUNC(superxavix_piano_pc_state::piano_pc_anport0_r));
+ m_anport->read_1_callback().set(FUNC(superxavix_piano_pc_state::piano_pc_anport1_r));
-void xavix_i2c_state::xavix2002_i2c_24c08(machine_config &config)
+ m_xavix2002io->read_0_callback().set(FUNC(superxavix_piano_pc_state::read_extended_io0));
+ m_xavix2002io->read_1_callback().set(FUNC(superxavix_piano_pc_state::read_extended_io1));
+ m_xavix2002io->read_2_callback().set(FUNC(superxavix_piano_pc_state::read_extended_io2));
+}
+
+
+void superxavix_doradraw_state::xavix_extbus_map(address_map &map)
+{
+ map(0x000000, 0x7fffff).rom().region("bios", 0x000000);
+ map(0x400000, 0x4fffff).ram().share("bitmap_buffer"); // reads/writes here
+ map(0x600000, 0x6fffff).ram().share("bitmap_buffer2"); // reads/writes here
+}
+
+
+void superxavix_doradraw_state::superxavix_doradraw(machine_config& config)
+{
+ xavix2002(config);
+}
+
+void superxavix_i2c_state::superxavix_i2c_24c16(machine_config &config)
+{
+ xavix2002(config);
+
+ I2C_24C16(config, "i2cmem", 0);
+}
+
+void superxavix_i2c_state::superxavix_i2c_24c08(machine_config &config)
{
xavix2002(config);
I2C_24C08(config, "i2cmem", 0);
}
-void xavix_i2c_state::xavix2002_i2c_24c04(machine_config &config)
+void superxavix_i2c_state::superxavix_i2c_24c04(machine_config &config)
{
xavix2002(config);
I2C_24C04(config, "i2cmem", 0);
}
-void xavix_i2c_state::xavix2002_i2c_24c02(machine_config &config)
+void superxavix_i2c_state::superxavix_i2c_24c04_4mb(machine_config &config)
+{
+ superxavix_i2c_24c04(config);
+ m_maincpu->set_addrmap(6, &superxavix_i2c_state::xavix_4mb_extbus_map);
+}
+
+void superxavix_i2c_state::superxavix_i2c_24c02(machine_config &config)
{
xavix2002(config);
@@ -434,10 +536,12 @@ void xavix_i2c_state::xavix2002_i2c_24c02(machine_config &config)
}
-void xavix_i2c_state::xavix2002_i2c_mrangbat(machine_config &config)
+void superxavix_i2c_state::superxavix_i2c_mrangbat(machine_config &config)
{
xavix2002(config);
+ m_maincpu->set_addrmap(6, &superxavix_i2c_state::xavix_4mb_extbus_map);
+
I2C_24C02(config, "i2cmem", 0); // 24C02?
m_xavix2002io->read_0_callback().set_ioport("EX0");
@@ -485,7 +589,7 @@ ROM_START( xavjmat )
ROM_REGION( 0x0800000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "u2", 0x0000000, 0x0800000, CRC(1420640d) SHA1(dd714cd57cff885293688f74f69b5c1726e20ec0) )
- ROM_REGION( 0x0800000, "biosu3", ROMREGION_ERASE00 )
+ ROM_REGION( 0x0800000, "extra_u3", ROMREGION_ERASE00 )
ROM_LOAD( "u3", 0x0000000, 0x0800000, CRC(52dc318c) SHA1(dc50e0747ba29cfb1048fd4a55d26870086c869b) )
ROM_END
@@ -493,7 +597,7 @@ ROM_START( xavaero )
ROM_REGION( 0x0800000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "aerostep.u2", 0x0000000, 0x0800000, CRC(7fce9cc1) SHA1(460bcef8a23d792941108e5da8c0d669a546b94c) )
- ROM_REGION( 0x0800000, "biosu3", ROMREGION_ERASE00 )
+ ROM_REGION( 0x0800000, "extra_u3", ROMREGION_ERASE00 )
ROM_LOAD( "aerostep.u3", 0x0000000, 0x0800000, CRC(ed9ca4ee) SHA1(4d90300880b02ac275e0cb502de16ae6f132aa2b) )
ROM_END
@@ -507,7 +611,7 @@ ROM_START( xavmusic )
ROM_REGION( 0x0800000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "u2", 0x0000000, 0x0800000, CRC(e7c8ad59) SHA1(d47fac8b480de4db88a1b306ff8830a65d1738a3) )
- ROM_REGION( 0x0800000, "biosu3", ROMREGION_ERASE00 )
+ ROM_REGION( 0x0800000, "extra_u3", ROMREGION_ERASE00 )
ROM_LOAD( "u3", 0x0000000, 0x0800000, CRC(977c956f) SHA1(debc086d0cf6c391002ad163e7bfaa2f010cc8f5) )
ROM_END
@@ -517,7 +621,7 @@ ROM_START( domfitex )
ROM_REGION( 0x0800000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "u2", 0x0000000, 0x0800000, CRC(841fe3cd) SHA1(8678b8a0c5198b24169a84dbe3ae979bb0838f23) )
- ROM_REGION( 0x0800000, "biosu3", ROMREGION_ERASE00 )
+ ROM_REGION( 0x0800000, "extra_u3", ROMREGION_ERASE00 )
ROM_LOAD( "u3", 0x0000000, 0x0800000, CRC(1dc844ea) SHA1(c23da9006227f7fe4982998c17759d403a47472a) )
ROM_END
@@ -525,7 +629,7 @@ ROM_START( domfitch )
ROM_REGION( 0x0800000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "u2", 0x0000000, 0x0800000, CRC(0ff2a7a6) SHA1(9b924cc4330e3f8d9204390854048fe2325bfdf7) )
- ROM_REGION( 0x0800000, "biosu3", ROMREGION_ERASE00 )
+ ROM_REGION( 0x0800000, "extra_u3", ROMREGION_ERASE00 )
ROM_LOAD( "u3", 0x0000000, 0x0800000, CRC(284583f6) SHA1(bd2d5304f1e01eed656b5de957ec0a0330a3d969) )
ROM_END
@@ -533,7 +637,7 @@ ROM_START( domdance )
ROM_REGION( 0x0800000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "u2", 0x0000000, 0x0800000, CRC(74f9499d) SHA1(a64235075e32567cd6d2ab7b1284efcb8e7538e2) )
- ROM_REGION( 0x0800000, "biosu3", ROMREGION_ERASE00 )
+ ROM_REGION( 0x0800000, "extra_u3", ROMREGION_ERASE00 )
ROM_LOAD( "u3", 0x0000000, 0x0800000, CRC(e437565c) SHA1(f6db219ea14404b698ca453f6e50c726b2e77abb) )
ROM_END
@@ -541,10 +645,23 @@ ROM_START( domstepc )
ROM_REGION( 0x0800000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "u2", 0x0000000, 0x0800000, CRC(cb37b5e9) SHA1(b742e3db98f36720adf5af9096c6bc235279de12) )
- ROM_REGION( 0x0800000, "biosu3", ROMREGION_ERASE00 )
+ ROM_REGION( 0x0800000, "extra_u3", ROMREGION_ERASE00 )
ROM_LOAD( "u3", 0x0000000, 0x0800000, CRC(dadaa744) SHA1(fd7ca77232a8fe228fc93b0a8a47ba3260349d90) )
ROM_END
+ROM_START( anpanmdx )
+ ROM_REGION( 0x0800000, "bios", ROMREGION_ERASE00 )
+ ROM_LOAD( "apmj.u3", 0x0000000, 0x0800000, CRC(41348086) SHA1(63bbf6128901c1518f537766a40e162b2616d00c) )
+
+ ROM_REGION( 0x0800000, "extra", ROMREGION_ERASE00 )
+ ROM_LOAD( "am2j.u7", 0x0000000, 0x0800000, CRC(ff653a6b) SHA1(ece11198a06f9cddfae7f8c7e038675010869723) )
+ROM_END
+
+ROM_START( apmj2009 )
+ ROM_REGION( 0x0800000, "bios", ROMREGION_ERASE00 )
+ ROM_LOAD( "apmj.u3", 0x0000000, 0x0800000, CRC(5fab9492) SHA1(aa588e5333bdf81daf3b5868e00783d76a42e80e) )
+ROM_END
+
ROM_START( mrangbat )
ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("powerrangerspad.bin", 0x000000, 0x400000, CRC(d3a98775) SHA1(485c66242dd0ee436a278d23005aece48d606431) )
@@ -570,11 +687,29 @@ ROM_START( ban_ordj )
ROM_LOAD( "ordj.u2", 0x000000, 0x800000, CRC(78fbb00f) SHA1(797b5495e292c36c003300ed18547e5643056149) )
ROM_END
+ROM_START( ban_dn1j )
+ ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 )
+ ROM_LOAD( "dn1j.u2", 0x000000, 0x800000, CRC(0a0cef0f) SHA1(c83a2635a969b3c686dbc599a37f8b7496b0c6a1) )
+ROM_END
+
+
ROM_START( epo_tfit )
- ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("tennisfitness.bin", 0x000000, 0x400000, CRC(cbf65bd2) SHA1(30b3da6f061b2dd91679db42a050f715901beb87) )
ROM_END
+ROM_START( maxheart )
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
+ ROM_LOAD("mgrj.u2", 0x000000, 0x400000, CRC(447c25e6) SHA1(9cc65088512218f43d66b332de7a862d95c1c353) )
+ROM_END
+
+ROM_START( epo_doka )
+ ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
+ ROM_LOAD("doka.u1", 0x000000, 0x400000, CRC(853266d2) SHA1(d4121b89ee464088951898282404e5a2b788dd69) )
+ROM_END
+
+
+
ROM_START( udance )
ROM_REGION(0x800000, "bios", ROMREGION_ERASE00)
ROM_LOAD("udancerom0.bin", 0x000000, 0x800000, CRC(3066580a) SHA1(545257c75a892894faf386f4ab9a31967cdbe8ae) )
@@ -597,11 +732,6 @@ ROM_START( suprtvpchk )
ROM_CONTINUE(0x000000, 0x200000)
ROM_CONTINUE(0x600000, 0x200000)
ROM_CONTINUE(0x400000, 0x200000)
-
- // The area at 0x400000 in the ROM is 0xff filled, probably the system maps RAM, not ROM here as there are also writes.
- // Replacing it with 0x00 as a hack allows the machine to get to the 'desktop' but in reality some of the memory bypass
- // speedups will need removing and RAM mapping
- ROM_FILL(0x600000, 0x80000,0x00)
ROM_END
ROM_START( suprtvpcdo )
@@ -610,23 +740,64 @@ ROM_START( suprtvpcdo )
ROM_CONTINUE(0x000000, 0x200000)
ROM_CONTINUE(0x600000, 0x200000)
ROM_CONTINUE(0x400000, 0x200000)
+ROM_END
+
+ROM_START( epo_ntpj )
+ ROM_REGION(0x800000, "bios", ROMREGION_ERASE00)
+ ROM_LOAD("ntpj.u6", 0x000000, 0x800000, CRC(6ce02166) SHA1(21c2ed48014e66123bb9968648984f82de361e2a) )
+
+ // uses IS24C64 EEPROM
- // see note in suprtvpchk set
- ROM_FILL(0x600000, 0x80000,0x00)
+ // there is extra hardware for the Piano side of things which may or may not have ROM data in it
ROM_END
+ROM_START( doradraw )
+ ROM_REGION(0x800000, "bios", ROMREGION_ERASE00)
+ ROM_LOAD("dmdj.u2", 0x000000, 0x800000, CRC(b3ca50ab) SHA1(9e6d28c1e170d3556e3c4ddcefb4cb51fd100df5) )
+
+ ROM_REGION(0x200000, "data", ROMREGION_ERASE00) // banked or extended video bus?
+ ROM_LOAD("dmdj.u7", 0x000000, 0x200000, CRC(0e6392f9) SHA1(30fa3d3451b37d663e124c7d1d52c7e30284d2fb) )
+ROM_END
+
+
+void superxavix_super_tv_pc_state::init_stvpc()
+{
+ init_xavix();
+ m_disable_memory_bypass = true;
+}
+
+void superxavix_i2c_jmat_state::init_xavmusic()
+{
+ init_xavix();
+ // is sprite yflip broken on (some?) revisions of SuperXaviX hardware, or is there a CPU bug causing this
+ m_disable_sprite_yflip = true;
+}
+
+void superxavix_piano_pc_state::init_piano_pc()
+{
+ init_xavix();
+ m_disable_memory_bypass = true;
+}
+
+
+void superxavix_doradraw_state::init_doradraw()
+{
+ init_xavix();
+ m_disable_memory_bypass = true;
+}
+
-CONS( 2004, xavtenni, 0, 0, xavix2002_i2c_24c04, xavix_i2c, xavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Tennis (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-CONS( 2004, xavbaseb, 0, 0, xavix2002_i2c_24c08, xavix_i2c, xavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Baseball (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-CONS( 2004, xavbowl, 0, 0, xavix2002_i2c_24c04, xavix_bowl, xavix_i2c_bowl_state, init_xavix, "SSD Company LTD", "XaviX Bowling (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // has IR 'Camera'
-CONS( 2004, xavbox, 0, 0, xavix2002_i2c_jmat, xavix, xavix_i2c_jmat_state, init_xavix, "SSD Company LTD", "XaviX Boxing (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // has IR 'Camera'
+CONS( 2004, xavtenni, 0, 0, superxavix_i2c_24c04, xavix_i2c, superxavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Tennis (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2004, xavbaseb, 0, 0, superxavix_i2c_24c08, xavix_i2c, superxavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Baseball (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2004, xavbowl, 0, 0, superxavix_i2c_24c04, xavix_bowl, superxavix_i2c_bowl_state, init_xavix, "SSD Company LTD", "XaviX Bowling (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // has IR 'Camera'
+CONS( 2004, xavbox, 0, 0, superxavix_i2c_jmat, xavix, superxavix_i2c_jmat_state, init_xavix, "SSD Company LTD", "XaviX Boxing (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // has IR 'Camera'
// Bass Fishing PCB is just like Tennis except with an RF daughterboard.
-CONS( 2004, xavbassf, 0, 0, xavix2002_i2c_24c08, xavix_i2c, xavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Bass Fishing (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2004, xavbassf, 0, 0, superxavix_i2c_24c08, xavix_i2c, superxavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Bass Fishing (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// TODO: check SEEPROM type and hookup, banking!
-CONS( 2005, xavjmat, 0, 0, xavix2002_i2c_jmat, xavix, xavix_i2c_jmat_state, init_xavix, "SSD Company LTD", "Jackie Chan J-Mat Fitness (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-CONS( 2005, xavaero, 0, 0, xavix2002_i2c_jmat, xavix, xavix_i2c_jmat_state, init_xavix, "SSD Company LTD", "XaviX Aerostep (XaviXPORT, Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-CONS( 2007, xavmusic, 0, 0, xavix2002_i2c_jmat, xavix, xavix_i2c_jmat_state, init_xavix, "SSD Company LTD", "XaviX Music & Circuit (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2005, xavjmat, 0, 0, superxavix_i2c_jmat, xavix, superxavix_i2c_jmat_state, init_xavix, "SSD Company LTD", "Jackie Chan J-Mat Fitness (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2005, xavaero, 0, 0, superxavix_i2c_jmat, xavix, superxavix_i2c_jmat_state, init_xavix, "SSD Company LTD", "XaviX Aerostep (XaviXPORT, Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2007, xavmusic, 0, 0, superxavix_i2c_jmat, xavix, superxavix_i2c_jmat_state, init_xavmusic, "SSD Company LTD", "XaviX Music & Circuit (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// https://arnaudmeyer.wordpress.com/domyos-interactive-system/
// Domyos Fitness Adventure
@@ -641,39 +812,54 @@ CONS( 2007, xavmusic, 0, 0, xavix2002_i2c_jmat, xavix, xavix_i2c_jmat_stat
// Domyos Bike Concept (not listed on site above)
// Has SEEPROM and an RTC. Exercise has some leftover PC buffer stuff. (TODO, check SEEPROM type, RTC type, banking) (both Exercises and Challenge are identical PCBs)
-CONS( 2008, domfitex, 0, 0, xavix2002_i2c_jmat, xavixp, xavix_i2c_jmat_state, init_xavix, "Decathlon / SSD Company LTD", "Domyos Fitness Exercises (Domyos Interactive System)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-CONS( 2008, domfitch, 0, 0, xavix2002_i2c_jmat, xavixp, xavix_i2c_jmat_state, init_xavix, "Decathlon / SSD Company LTD", "Domyos Fitness Challenge (Domyos Interactive System)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-CONS( 2007, domdance, 0, 0, xavix2002_i2c_jmat, xavixp, xavix_i2c_jmat_state, init_xavix, "Decathlon / SSD Company LTD", "Domyos Fitness Dance (Domyos Interactive System)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-CONS( 2007, domstepc, 0, 0, xavix2002_i2c_jmat, xavixp, xavix_i2c_jmat_state, init_xavix, "Decathlon / SSD Company LTD", "Domyos Step Concept (Domyos Interactive System)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2008, domfitex, 0, 0, superxavix_i2c_jmat, xavixp, superxavix_i2c_jmat_state, init_xavix, "Decathlon / SSD Company LTD", "Domyos Fitness Exercises (Domyos Interactive System)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2008, domfitch, 0, 0, superxavix_i2c_jmat, xavixp, superxavix_i2c_jmat_state, init_xavix, "Decathlon / SSD Company LTD", "Domyos Fitness Challenge (Domyos Interactive System)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2007, domdance, 0, 0, superxavix_i2c_jmat, xavixp, superxavix_i2c_jmat_state, init_xavix, "Decathlon / SSD Company LTD", "Domyos Fitness Dance (Domyos Interactive System)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2007, domstepc, 0, 0, superxavix_i2c_jmat, xavixp, superxavix_i2c_jmat_state, init_xavix, "Decathlon / SSD Company LTD", "Domyos Step Concept (Domyos Interactive System)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// some DIS games run on XaviX 2 instead, see xavix2.cpp for Domyos Fitness Adventure and Domyos Bike Concept
// Let's!TVプレイ 魔法戦隊マジレンジャー マジマットでダンス&バトル
-CONS( 2005, mrangbat, 0, 0, xavix2002_i2c_mrangbat, mrangbat, xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Mahou Taiketsu Magiranger - Magimat de Dance & Battle (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2005, mrangbat, 0, 0, superxavix_i2c_mrangbat, mrangbat, superxavix_i2c_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Mahou Taiketsu Magiranger - Magimat de Dance & Battle (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// エキサイトスポーツ テニス×フィットネス
-CONS( 2004, epo_tfit, 0, 0, xavix2002_i2c_24c04, epo_tfit, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Excite Sports Tennis x Fitness (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // Epoch Tennis and Fitness has 24LC04
+CONS( 2004, epo_tfit, 0, 0, superxavix_i2c_24c04_4mb, epo_tfit, superxavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Excite Sports Tennis x Fitness (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+
+// Let's!TVプレイ ふたりはプリキュアMaxHeart マットでダンス MaxHeartにおどっちゃおう
+CONS( 2004, maxheart, 0, 0, superxavix_i2c_24c04_4mb, xavix_i2c, superxavix_i2c_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Futari wa PreCure MaxHeart Dance on the mat Let's go to MaxHeart (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+
+// どこでもドラえもん 日本旅行ゲームDX体感!どこドラグランプリ!
+CONS( 2004, epo_doka, 0, 0, xavix2002_4mb, xavix, superxavix_state, init_xavix, "Epoch / SSD Company LTD", "Doraemon anywhere - Japan travel game DX experience! Where is the Dragon Grand Prix! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
-// TODO: does it have an SEEPROM? why does it hang? full title?
// それいけトーマス ソドー島のなかまたち
-CONS( 2005, tmy_thom, 0, 0, xavix2002_i2c_24c04, xavix_i2c, xavix_i2c_state, init_xavix, "Tomy / SSD Company LTD", "Thomas and Friends (Tomy)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2005, tmy_thom, 0, 0, superxavix_i2c_24c04, xavix_i2c, superxavix_i2c_state, init_xavix, "Tomy / SSD Company LTD", "Soreike Thomas - Sodor Tou no Nakamatachi / Thomas & Friends on the Island of Sodor (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// Let’s! TVプレイ 体感体得 結界師 方囲!定礎!結!滅!
-CONS( 2007, ban_kksj, 0, 0, xavix2002_i2c_24c02, xavix_i2c, xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Taikan Taitoku Kekkaishi: Houi! Jouso! Ketsu! Metsu! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2007, ban_kksj, 0, 0, superxavix_i2c_24c02, xavix_i2c, superxavix_i2c_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Taikan Taitoku Kekkaishi: Houi! Jouso! Ketsu! Metsu! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// 流星のロックマン 電波変換!オン・エア!
-CONS( 2007, tmy_rkmj, 0, 0, xavix2002_i2c_24c04, xavix_i2c, xavix_i2c_state, init_xavix, "Takara Tomy / Capcom / SSD Company LTD", "Ryuusei no Rockman: Denpa Henkan! On Air! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2007, tmy_rkmj, 0, 0, superxavix_i2c_24c04, xavix_i2c, superxavix_i2c_state, init_xavix, "Takara Tomy / Capcom / SSD Company LTD", "Ryuusei no Rockman: Denpa Henkan! On Air! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// Let's!TVプレイ 音撃バトル!仮面ライダー響鬼 決めろ!一気火勢の型
-CONS( 2005, ban_ordj, 0, 0, xavix2002_i2c_24c04, ban_ordj, xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Ongeki Battle! Kamen Rider Hibiki: Kimero! Ikki Kasei no Kata (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2005, ban_ordj, 0, 0, superxavix_i2c_24c04, ban_ordj, superxavix_i2c_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Ongeki Battle! Kamen Rider Hibiki: Kimero! Ikki Kasei no Kata (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+
+// ディズニーキャラクターズ オト!イロ!トン・トン!ミラクルパレード
+CONS( 2007, ban_dn1j, 0, 0, superxavix_i2c_24c04, ban_ordj, superxavix_i2c_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Disney Characters Oto! Iro! Ton-Ton! Miracle Parade (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+
+CONS( 2011, anpanmdx, 0, 0, superxavix_i2c_24c08, anpanmdx, superxavix_i2c_state, init_xavix, "JoyPalette / SSD Company LTD", "Anpanman Kazoku De Ikunou Mat DX (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+
+CONS( 2009, apmj2009, 0, 0, superxavix_i2c_24c16, xavix_i2c, superxavix_i2c_state, init_xavix, "JoyPalette / SSD Company LTD", "Anpanman Pyon-Pyon Ikunou Mat (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// has HT24LC16
-CONS( 2008, udance, 0, 0, xavix2002, xavix, xavix_state, init_xavix, "Tiger / SSD Company LTD", "U-Dance", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2008, udance, 0, 0, xavix2002, xavix, superxavix_state, init_xavix, "Tiger / SSD Company LTD", "U-Dance", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+
+// these have RAM in the usual ROM space & also have an Atmel 24LC64,
+CONS( 2004, suprtvpc, 0, 0, superxavix_super_tv_pc, suprtvpc, superxavix_super_tv_pc_state, init_stvpc, "Epoch / SSD Company LTD", "Super TV-PC (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2006, suprtvpchk, suprtvpc, 0, superxavix_super_tv_pc, suprtvpc, superxavix_super_tv_pc_state, init_stvpc, "Epoch / SSD Company LTD", "Super TV-PC - Hello Kitty (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2006, suprtvpcdo, suprtvpc, 0, superxavix_super_tv_pc, suprtvpc, superxavix_super_tv_pc_state, init_stvpc, "Epoch / SSD Company LTD", "Super TV-PC - Doraemon (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-// these have RAM in the usual ROM space (still needs handling) & also have an Atmel 24LC64,
-// this one (pet themed) boots to the desktop (as do the 'hamtaro' 'eccjr' cartridges)
-CONS( 2004, suprtvpc, 0, 0, xavix2002_super_tv_pc, xavix, xavix2002_super_tv_pc_state, init_xavix, "Epoch / SSD Company LTD", "Super TV-PC", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-// hangs after 'loading' sequence
-CONS( 2006, suprtvpchk, suprtvpc, 0, xavix2002_super_tv_pc, xavix, xavix2002_super_tv_pc_state, init_xavix, "Epoch / SSD Company LTD", "Super TV-PC - Hello Kitty", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-CONS( 2006, suprtvpcdo, suprtvpc, 0, xavix2002_super_tv_pc, xavix, xavix2002_super_tv_pc_state, init_xavix, "Epoch / SSD Company LTD", "Super TV-PC - Doraemon", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+// similar to Super TV-PC but with additional built in piano
+CONS( 2008, epo_ntpj, 0, 0, superxavix_piano_pc, suprtvpc, superxavix_piano_pc_state, init_piano_pc, "Epoch / SSD Company LTD", "Hello Kitty Piano PC (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+// ドラえもん うごく!おえかき エポック社
+CONS( 2007, doradraw, 0, 0, superxavix_doradraw, xavix, superxavix_doradraw_state, init_doradraw, "Epoch / SSD Company LTD", "Doraemon Moving! Oekaki (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/tvgames/xavix_2002.h b/src/mame/tvgames/xavix_2002.h
index df4cdace86e81..184553877daf1 100644
--- a/src/mame/tvgames/xavix_2002.h
+++ b/src/mame/tvgames/xavix_2002.h
@@ -10,52 +10,115 @@
#include "softlist_dev.h"
-class xavix_i2c_jmat_state : public xavix_i2c_state
+class superxavix_i2c_jmat_state : public superxavix_i2c_state
{
public:
- xavix_i2c_jmat_state(const machine_config &mconfig, device_type type, const char *tag)
- : xavix_i2c_state(mconfig, type, tag)
+ superxavix_i2c_jmat_state(const machine_config &mconfig, device_type type, const char *tag)
+ : superxavix_i2c_state(mconfig, type, tag)
{ }
- void xavix2002_i2c_jmat(machine_config &config);
+ void superxavix_i2c_jmat(machine_config &config);
+
+ void init_xavmusic();
private:
- uint8_t read_extended_io0();
- uint8_t read_extended_io1();
- uint8_t read_extended_io2();
- void write_extended_io0(uint8_t data);
- void write_extended_io1(uint8_t data);
- void write_extended_io2(uint8_t data);
+ uint8_t read_extended_io0(offs_t offset, uint8_t mem_mask);
+ uint8_t read_extended_io1(offs_t offset, uint8_t mem_mask);
+ uint8_t read_extended_io2(offs_t offset, uint8_t mem_mask);
+ void write_extended_io0(offs_t offset, uint8_t data, uint8_t mem_mask);
+ void write_extended_io1(offs_t offset, uint8_t data, uint8_t mem_mask);
+ void write_extended_io2(offs_t offset, uint8_t data, uint8_t mem_mask);
};
-class xavix2002_super_tv_pc_state : public xavix_state
+class superxavix_super_tv_pc_state : public superxavix_state
{
public:
- xavix2002_super_tv_pc_state(const machine_config &mconfig, device_type type, const char *tag)
- : xavix_state(mconfig, type, tag)
+ superxavix_super_tv_pc_state(const machine_config &mconfig, device_type type, const char *tag)
+ : superxavix_state(mconfig, type, tag)
, m_cart(*this, "cartslot")
+ , m_rombank(*this, "rombank")
{ }
- void xavix2002_super_tv_pc(machine_config &config);
+ void superxavix_super_tv_pc(machine_config &config);
+
+ void init_stvpc();
private:
- uint8_t read_extended_io0() { return 0x00; }
- uint8_t read_extended_io1() { return 0x00; }
- uint8_t read_extended_io2() { return 0x00; }
- //void write_extended_io0(uint8_t data);
- //void write_extended_io1(uint8_t data);
- //void write_extended_io2(uint8_t data);
+ virtual void machine_reset() override;
+
+ uint8_t stvpc_anport0_r() { return (m_mouse0x->read()^0x7f)+1; }
+ uint8_t stvpc_anport1_r() { return (m_mouse0y->read()^0x7f)+1; }
+
+ uint8_t read_extended_io0(offs_t offset, uint8_t mem_mask) { return 0x00; }
+ uint8_t read_extended_io1(offs_t offset, uint8_t mem_mask) { return 0x00; }
+ uint8_t read_extended_io2(offs_t offset, uint8_t mem_mask) { return 0x00; }
+ void write_extended_io0(offs_t offset, uint8_t data, uint8_t mem_mask) { logerror("%s: extio0_w %02x\n", machine().describe_context(), data); }
+ void write_extended_io1(offs_t offset, uint8_t data, uint8_t mem_mask) { logerror("%s: extio1_w %02x\n", machine().describe_context(), data); }
+ void write_extended_io2(offs_t offset, uint8_t data, uint8_t mem_mask)
+ {
+ logerror("%s: extio2_w %02x\n", machine().describe_context(), data);
+ {
+ if (mem_mask & 0x04)
+ {
+ if (data & 0x04)
+ m_rombank->set_entry(1);
+ else
+ m_rombank->set_entry(0);
+ }
+ }
+ }
+
+ virtual void xavix_extbus_map(address_map &map) override;
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
required_device m_cart;
+ required_memory_bank m_rombank;
+};
+
+
+class superxavix_piano_pc_state : public superxavix_state
+{
+public:
+ superxavix_piano_pc_state(const machine_config &mconfig, device_type type, const char *tag)
+ : superxavix_state(mconfig, type, tag)
+ { }
+
+ void superxavix_piano_pc(machine_config &config);
+
+ void init_piano_pc();
+
+private:
+ uint8_t piano_pc_anport0_r() { return (m_mouse0x->read()^0x7f)+1; }
+ uint8_t piano_pc_anport1_r() { return (m_mouse0y->read()^0x7f)+1; }
+
+ // needs 0x00 returning from one of these to boot past loading screen
+ uint8_t read_extended_io0(offs_t offset, uint8_t mem_mask) { return 0x00; }
+ uint8_t read_extended_io1(offs_t offset, uint8_t mem_mask) { return 0x00; }
+ uint8_t read_extended_io2(offs_t offset, uint8_t mem_mask) { return 0x00; }
+};
+
+class superxavix_doradraw_state : public superxavix_state
+{
+public:
+ superxavix_doradraw_state(const machine_config &mconfig, device_type type, const char *tag)
+ : superxavix_state(mconfig, type, tag)
+ { }
+
+ void superxavix_doradraw(machine_config &config);
+
+ void init_doradraw();
+
+private:
+
+ virtual void xavix_extbus_map(address_map &map) override;
};
-class xavix_i2c_bowl_state : public xavix_i2c_state
+class superxavix_i2c_bowl_state : public superxavix_i2c_state
{
public:
- xavix_i2c_bowl_state(const machine_config &mconfig, device_type type, const char *tag)
- : xavix_i2c_state(mconfig, type, tag)
+ superxavix_i2c_bowl_state(const machine_config &mconfig, device_type type, const char *tag)
+ : superxavix_i2c_state(mconfig, type, tag)
{ }
int camera_r();
diff --git a/src/mame/tvgames/xavix_m.cpp b/src/mame/tvgames/xavix_m.cpp
index bba9ee7a154df..c32a60f94ef18 100644
--- a/src/mame/tvgames/xavix_m.cpp
+++ b/src/mame/tvgames/xavix_m.cpp
@@ -284,6 +284,7 @@ void xavix_state::colmix_6ff2_w(uint8_t data)
{
LOG("%s: colmix_6ff2_w %02x\n", machine().describe_context(), data);
m_colmix_ctrl[0] = data;
+ // bits 0xe0 seem to enable a TV static effect somehow, used by rad_opus
}
@@ -898,13 +899,23 @@ void xavix_state::machine_start()
save_item(NAME(m_sndtimer));
save_item(NAME(m_timer_baseval));
save_item(NAME(m_spritereg));
+}
+
+void superxavix_state::machine_start()
+{
+ xavix_state::machine_start();
save_item(NAME(m_superxavix_pal_index));
save_item(NAME(m_superxavix_bitmap_pal_index));
+ save_item(NAME(m_sx_plt_address));
+ save_item(NAME(m_sx_plt_mode));
+ save_item(NAME(m_plotter_has_byte));
+ save_item(NAME(m_plotter_current_byte));
save_item(NAME(m_sx_extended_extbus));
}
+
void xavix_state::machine_reset()
{
m_rom_dma_src[0] = 0;
@@ -966,7 +977,6 @@ void xavix_state::machine_reset()
m_sound_regbase = 0x02; // rad_bb doesn't initialize this and expects it here. It is possible the default is 0x00, but since 0x00 and 0x01 are special (zero page and stack) those values would also use bank 0x02
-
m_sprite_xhigh_ignore_hack = true;
m_cpuspace = &m_maincpu->space(AS_PROGRAM);
@@ -974,16 +984,20 @@ void xavix_state::machine_reset()
m_extbusctrl[0] = 0x00;
m_extbusctrl[1] = 0x00;
m_extbusctrl[2] = 0x00;
+}
-
- // SuperXaviX
+void superxavix_state::machine_reset()
+{
+ xavix_state::machine_reset();
for (int i = 0; i < 3; i++)
{
m_sx_extended_extbus[i] = 0x00;
}
+
}
+
typedef device_delegate xavix_interrupt_vector_delegate;
int16_t xavix_state::get_vectors(int which, int half)
@@ -1011,19 +1025,19 @@ int16_t xavix_state::get_vectors(int which, int half)
// additional SuperXaviX / XaviX2002 stuff
-void xavix_state::extended_extbus_reg0_w(uint8_t data)
+void superxavix_state::extended_extbus_reg0_w(uint8_t data)
{
LOG("%s: extended_extbus_reg0_w %02x\n", machine().describe_context(), data);
m_sx_extended_extbus[0] = data;
}
-void xavix_state::extended_extbus_reg1_w(uint8_t data)
+void superxavix_state::extended_extbus_reg1_w(uint8_t data)
{
LOG("%s: extended_extbus_reg1_w %02x\n", machine().describe_context(), data);
m_sx_extended_extbus[1] = data;
}
-void xavix_state::extended_extbus_reg2_w(uint8_t data)
+void superxavix_state::extended_extbus_reg2_w(uint8_t data)
{
LOG("%s: extended_extbus_reg2_w %02x\n", machine().describe_context(), data);
m_sx_extended_extbus[2] = data;
diff --git a/src/mame/tvgames/xavix_math.cpp b/src/mame/tvgames/xavix_math.cpp
index b41883a98c1ec..af499b956dbaa 100644
--- a/src/mame/tvgames/xavix_math.cpp
+++ b/src/mame/tvgames/xavix_math.cpp
@@ -16,156 +16,165 @@ xavix_math_device::xavix_math_device(const machine_config &mconfig, const char *
void xavix_math_device::device_start()
{
- save_item(NAME(m_barrel_params));
- save_item(NAME(m_multparams));
+ save_item(NAME(m_mpr));
+ save_item(NAME(m_mpd));
+ save_item(NAME(m_mad));
+ save_item(NAME(m_sgn_mpd));
+ save_item(NAME(m_sgn_mpr));
save_item(NAME(m_multresults));
}
void xavix_math_device::device_reset()
{
- m_barrel_params[0] = 0x00;
- m_barrel_params[1] = 0x00;
-
- std::fill(std::begin(m_multparams), std::end(m_multparams), 0x00);
+ m_mpr = 0;
+ m_mpd = 0;
+ m_mad = 0;
+ m_sgn_mpd = 0;
+ m_sgn_mpr = 0;
std::fill(std::begin(m_multresults), std::end(m_multresults), 0x00);
}
-
// epo_guru uses this for ground movement in 3d stages (and other places)
uint8_t xavix_math_device::barrel_r(offs_t offset)
{
+ uint8_t ret = 0;
if (offset == 0)
{
- // or upper bits of result?
- LOG("%s: reading shift trigger?!\n", machine().describe_context());
- return 0x00;
+ ret = (m_sgn_mpd ? 0x80 : 0x00) | (m_mpr & 0x40) | (m_mpr & 0x07);
}
else
{
- uint8_t retdata = m_barrel_params[1];
- LOG("%s: reading shift results/data %02x\n", machine().describe_context(), retdata);
- return retdata;
+ ret = (m_mpr & 0x40) ?
+ m_multresults[1] ^ m_multresults[0] : (m_mpr & 0x08) ?
+ m_multresults[1] : m_multresults[0];
}
+
+ LOG("%s: reading shift results/data %d %02x\n", machine().describe_context(), offset, ret);
+ return ret;
}
// epo_guru 3d stages still flicker a lot with this, but it seems unrelated to the calculations here, possibly a raster timing issue
-// the pickup animations however don't seem to play, which indicates this could still be wrong.
void xavix_math_device::barrel_w(offs_t offset, uint8_t data)
{
- LOG("%s: barrel_w %02x\n", machine().describe_context(), data);
-
- m_barrel_params[offset] = data;
+ LOG("%s: barrel_w %d %02x\n", machine().describe_context(), offset, data);
- // offset 0 = trigger
if (offset == 0)
{
- int shift_data = m_barrel_params[1];
- int shift_amount = data & 0x0f;
- int shift_param = (data & 0xf0) >> 4;
-
- if (shift_param == 0x00) // just a shift? (definitely right for 'hammer throw'
- {
- // used in epo_guru for 'hammer throw', 'pre-title screen', 'mini game select', '3d chase game (floor scroll, pickups, misc)', 'toilet roll mini game (when you make an error)'
-
- if (shift_amount & 0x08)
- {
- m_barrel_params[1] = (shift_data >> (shift_amount & 0x7));
- }
- else
- {
- m_barrel_params[1] = (shift_data << (shift_amount & 0x7));
- }
- }
- else if (shift_param == 0x8) // rotate? (should it rotate through a carry bit of some kind?)
- {
- // used in epo_guru for '3d chase game' (unsure of actual purpose in it)
- switch (shift_amount)
- {
- case 0x0: m_barrel_params[1] = shift_data; break;
- case 0x1: m_barrel_params[1] = (shift_data << 1) | ((shift_data >> 7) & 0x01); break;
- case 0x2: m_barrel_params[1] = (shift_data << 2) | ((shift_data >> 6) & 0x03); break;
- case 0x3: m_barrel_params[1] = (shift_data << 3) | ((shift_data >> 5) & 0x07); break;
- case 0x4: m_barrel_params[1] = (shift_data << 4) | ((shift_data >> 4) & 0x0f); break;
- case 0x5: m_barrel_params[1] = (shift_data << 5) | ((shift_data >> 3) & 0x1f); break;
- case 0x6: m_barrel_params[1] = (shift_data << 6) | ((shift_data >> 2) & 0x2f); break;
- case 0x7: m_barrel_params[1] = (shift_data << 7) | ((shift_data >> 1) & 0x3f); break;
- case 0x8: m_barrel_params[1] = shift_data; break;
- case 0x9: m_barrel_params[1] = (shift_data >> 1) | ((shift_data & 0x01) << 7); break;
- case 0xa: m_barrel_params[1] = (shift_data >> 2) | ((shift_data & 0x03) << 6); break;
- case 0xb: m_barrel_params[1] = (shift_data >> 3) | ((shift_data & 0x07) << 5); break;
- case 0xc: m_barrel_params[1] = (shift_data >> 4) | ((shift_data & 0x0f) << 4); break;
- case 0xd: m_barrel_params[1] = (shift_data >> 5) | ((shift_data & 0x1f) << 3); break;
- case 0xe: m_barrel_params[1] = (shift_data >> 6) | ((shift_data & 0x2f) << 2); break;
- case 0xf: m_barrel_params[1] = (shift_data >> 7) | ((shift_data & 0x3f) << 1); break;
- }
- }
+ m_mad = 0;
+ m_sgn_mpd = data & 0x80;
+ m_sgn_mpr = 0;
+ m_mpr = data;
+ do_math(true);
+ }
+ else
+ {
+ m_mpd = data;
}
}
-
-
uint8_t xavix_math_device::mult_r(offs_t offset)
{
- return m_multresults[offset];
+ uint8_t ret = m_multresults[offset];
+ LOG("%s: mult_r %d %02x (read result)\n", machine().describe_context(), offset, ret);
+ return ret;
}
void xavix_math_device::mult_w(offs_t offset, uint8_t data)
{
+ LOG("%s: mult_w %d %02x (write result)\n", machine().describe_context(), offset, data);
// rad_madf writes here to set the base value which the multiplication result gets added to
m_multresults[offset] = data;
}
uint8_t xavix_math_device::mult_param_r(offs_t offset)
{
- return m_multparams[offset];
-}
+ uint8_t ret = 0;
-void xavix_math_device::mult_param_w(offs_t offset, uint8_t data, uint8_t mem_mask)
-{
- COMBINE_DATA(&m_multparams[offset]);
- // there are NOPs after one of the writes, so presumably the operation is write triggerd and not intstant
- // see test code at 0184a4 in monster truck
+ if (offset == 0)
+ {
+ ret = m_mad | (m_sgn_mpd ? 0x02 : 0x00) | m_sgn_mpr;
+ }
+ else if (offset == 1)
+ {
+ ret = m_mpd;
+ }
+ else
+ {
+ ret = m_mpr;
+ }
- // offset0 is control
+ LOG("%s: mult_param_r %d %02x (read parameters)\n", machine().describe_context(), offset, ret);
+ return ret;
+}
- // mm-- --Ss
- // mm = mode, S = sign for param1, s = sign for param2
- // modes 00 = multiply (regular?) 11 = add to previous 01 / 10 unknown (maybe subtract?)
+void xavix_math_device::do_math(bool mul_shf)
+{
+ uint16_t result = 0;
+ uint8_t mpd = m_mpd;
+ uint8_t mulinp;
- if (offset == 2)
+ if (!mul_shf)
{
- // assume 0 is upper bits, might be 'mode' instead, check
+ mulinp = m_mpr;
+ }
+ else
+ {
+ mulinp = 1 << (m_mpr & 0x7);
+ }
+ if (m_sgn_mpd && (mpd & 0x80) && m_sgn_mpr && (mulinp & 0x80))
+ {
+ result = mpd * mulinp - (mpd << 8) - (mulinp << 8);
+ }
+ else if (m_sgn_mpd && (mpd & 0x80))
+ {
+ result = mpd * mulinp - (mulinp << 8);
+ }
+ else if (m_sgn_mpr && (mulinp & 0x80))
+ {
+ result = mpd * mulinp - (mpd << 8);
+ }
+ else
+ {
+ result = mpd * mulinp;
+ }
- int signmode = (m_multparams[0] & 0x3f);
+ if (m_mad)
+ {
+ uint16_t oldresult = (m_multresults[1] << 8) | m_multresults[0];
+ result = oldresult + result;
+ }
- uint16_t result = 0;
+ m_multresults[1] = (result >> 8) & 0xff;
+ m_multresults[0] = result & 0xff;
+}
- // rad_madf uses this mode (add to previous result)
- if ((m_multparams[0] & 0xc0) == 0xc0)
- {
- const int param1 = signmode & 0x2 ? (int8_t)m_multparams[1] : (uint8_t)m_multparams[1];
- const int param2 = signmode & 0x1 ? (int8_t)m_multparams[2] : (uint8_t)m_multparams[2];
+void xavix_math_device::mult_param_w(offs_t offset, uint8_t data, uint8_t mem_mask)
+{
+ // there are NOPs after one of the writes, so presumably the operation is write triggerd and not intstant
+ // see test code at 0184a4 in monster truck
- result = param1 * param2;
+ // offset0 is control
- uint16_t oldresult = (m_multresults[1] << 8) | m_multresults[0];
- result = oldresult + result;
- }
- else if ((m_multparams[0] & 0xc0) == 0x00)
- {
- const int param1 = signmode & 0x2 ? (int8_t)m_multparams[1] : (uint8_t)m_multparams[1];
- const int param2 = signmode & 0x1 ? (int8_t)m_multparams[2] : (uint8_t)m_multparams[2];
+ // m?-- --Ss
+ // m = mode, S = sign for param1, s = sign for param2
+ LOG("%s: mult_param_w %d %02x (write param1 and trigger)\n", machine().describe_context(), offset, data);
- result = param1 * param2;
- }
- else
- {
- popmessage("unknown multiplier mode %02x", m_multparams[0] & 0xc0);
- }
+ if (offset == 0)
+ {
+ m_mad = data & 0x80;
+ // sometimes 0x40 is set along with 0x80, sometimes only 0x80, why? is it important?
- m_multresults[1] = (result >> 8) & 0xff;
- m_multresults[0] = result & 0xff;
+ m_sgn_mpd = data & 0x02;
+ m_sgn_mpr = data & 0x01;
+ }
+ else if (offset == 1)
+ {
+ m_mpd = data;
+ }
+ else if (offset == 2)
+ {
+ m_mpr = data;
+ do_math(false);
}
}
-
diff --git a/src/mame/tvgames/xavix_math.h b/src/mame/tvgames/xavix_math.h
index abf2335360e88..8d5a3df05ec18 100644
--- a/src/mame/tvgames/xavix_math.h
+++ b/src/mame/tvgames/xavix_math.h
@@ -23,10 +23,16 @@ class xavix_math_device : public device_t
virtual void device_reset() override ATTR_COLD;
private:
+ void do_math(bool mul_shf);
+
+ uint8_t m_mpr;
+ uint8_t m_mpd;
- uint8_t m_barrel_params[2];
- uint8_t m_multparams[3];
uint8_t m_multresults[2];
+
+ uint8_t m_mad;
+ uint8_t m_sgn_mpd;
+ uint8_t m_sgn_mpr;
};
DECLARE_DEVICE_TYPE(XAVIX_MATH, xavix_math_device)
diff --git a/src/mame/tvgames/xavix_v.cpp b/src/mame/tvgames/xavix_v.cpp
index cbd9fec88b829..a8f3e0bed4273 100644
--- a/src/mame/tvgames/xavix_v.cpp
+++ b/src/mame/tvgames/xavix_v.cpp
@@ -21,8 +21,10 @@ inline uint8_t xavix_state::get_next_bit()
// going through memory is slow, try not to do it too often!
if (m_tmp_databit == 0)
{
- //m_bit = m_maincpu->read_full_data_sp(m_tmp_dataaddress);
- m_bit = read_full_data_sp_bypass(m_tmp_dataaddress);
+ if (m_disable_memory_bypass)
+ m_bit = m_maincpu->space(AS_PROGRAM).read_byte(m_tmp_dataaddress);
+ else
+ m_bit = read_full_data_sp_bypass(m_tmp_dataaddress);
}
uint8_t ret = m_bit >> m_tmp_databit;
@@ -39,6 +41,28 @@ inline uint8_t xavix_state::get_next_bit()
return ret;
}
+inline uint8_t superxavix_state::get_next_bit_sx()
+{
+ if (m_tmp_databit == 0)
+ {
+ m_bit = m_extra[m_tmp_dataaddress&0x7fffff];
+ }
+
+ uint8_t ret = m_bit >> m_tmp_databit;
+ ret &= 1;
+
+ m_tmp_databit++;
+
+ if (m_tmp_databit == 8)
+ {
+ m_tmp_databit = 0;
+ m_tmp_dataaddress++;
+ }
+
+ return ret;
+}
+
+
inline uint8_t xavix_state::get_next_byte()
{
uint8_t dat = 0;
@@ -73,13 +97,13 @@ void xavix_state::palram_l_w(offs_t offset, uint8_t data)
update_pen(offset, m_palram_sh[offset], m_palram_l[offset]);
}
-void xavix_state::bmp_palram_sh_w(offs_t offset, uint8_t data)
+void superxavix_state::bmp_palram_sh_w(offs_t offset, uint8_t data)
{
m_bmp_palram_sh[offset] = data;
update_pen(offset+256, m_bmp_palram_sh[offset], m_bmp_palram_l[offset]);
}
-void xavix_state::bmp_palram_l_w(offs_t offset, uint8_t data)
+void superxavix_state::bmp_palram_l_w(offs_t offset, uint8_t data)
{
m_bmp_palram_l[offset] = data;
update_pen(offset+256, m_bmp_palram_sh[offset], m_bmp_palram_l[offset]);
@@ -109,38 +133,141 @@ void xavix_state::spriteram_w(offs_t offset, uint8_t data)
}
}
-void xavix_state::superxavix_bitmap_pal_index_w(uint8_t data)
+void superxavix_state::superxavix_crtc_1_w(offs_t offset, uint8_t data)
+{
+ logerror("%s superxavix_crtc_1_w %02x %02x\n", machine().describe_context(), offset, data);
+ m_sx_crtc_1[offset] = data;
+}
+
+uint8_t superxavix_state::superxavix_crtc_1_r(offs_t offset)
+{
+ return m_sx_crtc_1[offset];
+}
+
+void superxavix_state::bitmap_params_w(offs_t offset, uint8_t data)
+{
+ logerror("%s bitmap_params_w %02x %02x\n", machine().describe_context(), offset, data);
+ m_bmp_base[offset] = data;
+ // if anything changes these mid-screen we may need to trigger a partial update here
+}
+
+uint8_t superxavix_state::bitmap_params_r(offs_t offset)
+{
+ return m_bmp_base[offset];
+}
+
+void superxavix_state::superxavix_crtc_2_w(offs_t offset, uint8_t data)
+{
+ logerror("%s superxavix_crtc_2_w %02x %02x\n", machine().describe_context(), offset, data);
+ m_sx_crtc_2[offset] = data;
+}
+
+uint8_t superxavix_state::superxavix_crtc_2_r(offs_t offset)
+{
+ return m_sx_crtc_2[offset];
+}
+
+void superxavix_state::superxavix_plt_flush_w(uint8_t data)
+{
+ // flush current write buffer (as we might not have filled a byte when plotting)
+ // and set write mode?
+ // do we need to cache the previous write address for the flush? (probably not, this seems to be explicitly
+ // written both after every transfer, and before the next one.
+ if (m_plotter_has_byte)
+ {
+ m_maincpu->space(6).write_byte((m_sx_plt_address >> 3) & 0x7fffff, m_plotter_current_byte);
+ }
+
+ m_plotter_has_byte = 0;
+ m_plotter_current_byte = 0x00;
+ //printf("%s: superxavix_plt_flush_w %02x\n", machine().describe_context().c_str(), data);
+ m_sx_plt_mode = data;
+}
+
+uint8_t superxavix_state::superxavix_plt_dat_r()
+{
+ return machine().rand();
+}
+
+void superxavix_state::superxavix_plt_dat_w(uint8_t data)
+{
+ uint8_t pixels = m_sx_plt_mode + 1;
+
+ while (pixels)
+ {
+ if (!m_plotter_has_byte)
+ {
+ m_plotter_current_byte = m_maincpu->space(6).read_byte((m_sx_plt_address>>3) & 0x7fffff);
+ m_plotter_has_byte = 1;
+ }
+
+ uint8_t bit_to_write = data & 1;
+ data >>= 1;
+
+ uint8_t destbit = m_sx_plt_address & 0x7;
+ m_plotter_current_byte &= ~(1 << destbit);
+ m_plotter_current_byte |= (bit_to_write << destbit);
+
+ m_sx_plt_address++;
+ if (!(m_sx_plt_address & 0x7))
+ {
+ m_maincpu->space(6).write_byte(((m_sx_plt_address-1)>>3) & 0x7fffff, m_plotter_current_byte);
+ m_plotter_has_byte = 0;
+ }
+
+ pixels--;
+ }
+}
+
+void superxavix_state::superxavix_plt_loc_w(offs_t offset, uint8_t data)
+{
+ logerror("%s superxavix_plt_loc_w %02x %02x\n", machine().describe_context(), offset, data);
+
+ m_sx_plt_loc[offset] = data;
+ if (offset == 3)
+ {
+ m_sx_plt_address = (m_sx_plt_loc[3] << 24) | (m_sx_plt_loc[2] << 16) | (m_sx_plt_loc[1] << 8) | (m_sx_plt_loc[0] << 0);
+ logerror("%s SuperXavix Bitmap Plotter set to address %08x\n", machine().describe_context(), m_sx_plt_address);
+ }
+}
+
+uint8_t superxavix_state::superxavix_plt_loc_r(offs_t offset)
+{
+ return m_sx_plt_loc[offset];
+}
+
+void superxavix_state::superxavix_bitmap_pal_index_w(uint8_t data)
{
m_superxavix_bitmap_pal_index = data;
}
-uint8_t xavix_state::superxavix_bitmap_pal_index_r()
+uint8_t superxavix_state::superxavix_bitmap_pal_index_r()
{
return m_superxavix_bitmap_pal_index;
}
-void xavix_state::superxavix_chr_pal_index_w(uint8_t data)
+void superxavix_state::superxavix_chr_pal_index_w(uint8_t data)
{
m_superxavix_pal_index = data;
}
-uint8_t xavix_state::superxavix_chr_pal_index_r()
+uint8_t superxavix_state::superxavix_chr_pal_index_r()
{
return m_superxavix_pal_index;
}
-uint8_t xavix_state::superxavix_bitmap_pal_hue_r()
+uint8_t superxavix_state::superxavix_bitmap_pal_hue_r()
{
return superxavix_pal_hue_r(true);
}
-uint8_t xavix_state::superxavix_chr_pal_hue_r()
+uint8_t superxavix_state::superxavix_chr_pal_hue_r()
{
return superxavix_pal_hue_r(false);
}
-uint8_t xavix_state::superxavix_pal_hue_r(bool bitmap)
+uint8_t superxavix_state::superxavix_pal_hue_r(bool bitmap)
{
u8 *sh, *sl;
u8 ind;
@@ -163,17 +290,17 @@ uint8_t xavix_state::superxavix_pal_hue_r(bool bitmap)
return val << 2;
}
-uint8_t xavix_state::superxavix_bitmap_pal_saturation_r()
+uint8_t superxavix_state::superxavix_bitmap_pal_saturation_r()
{
return superxavix_pal_saturation_r(true);
}
-uint8_t xavix_state::superxavix_chr_pal_saturation_r()
+uint8_t superxavix_state::superxavix_chr_pal_saturation_r()
{
return superxavix_pal_saturation_r(false);
}
-uint8_t xavix_state::superxavix_pal_saturation_r(bool bitmap)
+uint8_t superxavix_state::superxavix_pal_saturation_r(bool bitmap)
{
u8 *sh, *sl;
u8 ind;
@@ -196,17 +323,17 @@ uint8_t xavix_state::superxavix_pal_saturation_r(bool bitmap)
return val << 4;
}
-uint8_t xavix_state::superxavix_bitmap_pal_lightness_r()
+uint8_t superxavix_state::superxavix_bitmap_pal_lightness_r()
{
return superxavix_pal_lightness_r(true);
}
-uint8_t xavix_state::superxavix_chr_pal_lightness_r()
+uint8_t superxavix_state::superxavix_chr_pal_lightness_r()
{
return superxavix_pal_lightness_r(false);
}
-uint8_t xavix_state::superxavix_pal_lightness_r(bool bitmap)
+uint8_t superxavix_state::superxavix_pal_lightness_r(bool bitmap)
{
u8 *sh, *sl;
u8 ind;
@@ -229,17 +356,17 @@ uint8_t xavix_state::superxavix_pal_lightness_r(bool bitmap)
return val << 2;
}
-void xavix_state::superxavix_bitmap_pal_hue_w(uint8_t data)
+void superxavix_state::superxavix_bitmap_pal_hue_w(uint8_t data)
{
superxavix_pal_hue_w(data, true);
}
-void xavix_state::superxavix_chr_pal_hue_w(uint8_t data)
+void superxavix_state::superxavix_chr_pal_hue_w(uint8_t data)
{
superxavix_pal_hue_w(data, false);
}
-void xavix_state::superxavix_pal_hue_w(uint8_t data, bool bitmap)
+void superxavix_state::superxavix_pal_hue_w(uint8_t data, bool bitmap)
{
u8 *sh, *sl;
u8 ind;
@@ -267,17 +394,17 @@ void xavix_state::superxavix_pal_hue_w(uint8_t data, bool bitmap)
update_pen(ind+offset, sh[ind], sl[ind]);
}
-void xavix_state::superxavix_bitmap_pal_saturation_w(uint8_t data)
+void superxavix_state::superxavix_bitmap_pal_saturation_w(uint8_t data)
{
superxavix_pal_saturation_w(data, true);
}
-void xavix_state::superxavix_chr_pal_saturation_w(uint8_t data)
+void superxavix_state::superxavix_chr_pal_saturation_w(uint8_t data)
{
superxavix_pal_saturation_w(data, false);
}
-void xavix_state::superxavix_pal_saturation_w(uint8_t data, bool bitmap)
+void superxavix_state::superxavix_pal_saturation_w(uint8_t data, bool bitmap)
{
u8 *sh, *sl;
u8 ind;
@@ -305,17 +432,17 @@ void xavix_state::superxavix_pal_saturation_w(uint8_t data, bool bitmap)
update_pen(ind+offset, sh[ind], sl[ind]);
}
-void xavix_state::superxavix_bitmap_pal_lightness_w(uint8_t data)
+void superxavix_state::superxavix_bitmap_pal_lightness_w(uint8_t data)
{
superxavix_pal_lightness_w(data, true);
}
-void xavix_state::superxavix_chr_pal_lightness_w(uint8_t data)
+void superxavix_state::superxavix_chr_pal_lightness_w(uint8_t data)
{
superxavix_pal_lightness_w(data, false);
}
-void xavix_state::superxavix_pal_lightness_w(uint8_t data, bool bitmap)
+void superxavix_state::superxavix_pal_lightness_w(uint8_t data, bool bitmap)
{
u8 *sh, *sl;
u8 ind;
@@ -509,6 +636,12 @@ void xavix_state::draw_tilemap(screen_device &screen, bitmap_rgb32 &bitmap, cons
}
}
+void superxavix_state::draw_tilemap(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int which)
+{
+ m_use_superxavix_extra = false;
+ xavix_state::draw_tilemap(screen, bitmap, cliprect, which);
+}
+
void xavix_state::decode_inline_header(int &flipx, int &flipy, int &test, int &pal, int debug_packets)
{
uint8_t byte1 = 0;
@@ -677,22 +810,31 @@ void xavix_state::draw_tilemap_line(screen_device &screen, bitmap_rgb32 &bitmap,
// the register being 0 probably isn't the condition here
if (tileregs[0x0] != 0x00)
{
- //tile |= m_maincpu->read_full_data_sp((tileregs[0x0] << 8) + count);
- tile |= read_full_data_sp_bypass((tileregs[0x0] << 8) + count);
+ const offs_t realaddress = (tileregs[0x0] << 8) + count;
+ if (m_disable_memory_bypass)
+ tile |= m_maincpu->space(AS_PROGRAM).read_byte(realaddress);
+ else
+ tile |= read_full_data_sp_bypass(realaddress);
}
// only read the next byte if we're not in an 8-bit mode
if (((tileregs[0x7] & 0x7f) != 0x00) && ((tileregs[0x7] & 0x7f) != 0x08))
{
- //tile |= m_maincpu->read_full_data_sp((tileregs[0x1] << 8) + count) << 8;
- tile |= read_full_data_sp_bypass((tileregs[0x1] << 8) + count) << 8;
+ const offs_t realaddress = (tileregs[0x1] << 8) + count;
+ if (m_disable_memory_bypass)
+ tile |= m_maincpu->space(AS_PROGRAM).read_byte(realaddress) << 8;
+ else
+ tile |= read_full_data_sp_bypass(realaddress) << 8;
}
// 24 bit modes can use reg 0x2, otherwise it gets used as extra attribute in other modes
if (alt_tileaddressing2 == 2)
{
- //tile |= m_maincpu->read_full_data_sp((tileregs[0x2] << 8) + count) << 16;
- tile |= read_full_data_sp_bypass((tileregs[0x2] << 8) + count) << 16;
+ const offs_t realaddress = (tileregs[0x2] << 8) + count;
+ if (m_disable_memory_bypass)
+ tile |= m_maincpu->space(AS_PROGRAM).read_byte(realaddress) << 16;
+ else
+ tile |= read_full_data_sp_bypass(realaddress) << 16;
}
@@ -736,19 +878,35 @@ void xavix_state::draw_tilemap_line(screen_device &screen, bitmap_rgb32 &bitmap,
}
else if (alt_tileaddressing2 == 1)
{
- // 8-byte alignment Addressing Mode uses a fixed offset? (like sprites)
- tile = tile * 8;
- basereg = (tile & 0x70000) >> 16;
- tile &= 0xffff;
- gfxbase = (m_segment_regs[(basereg * 2) + 1] << 16) | (m_segment_regs[(basereg * 2)] << 8);
- tile += gfxbase;
+ if (tileregs[0x7] & 0x01)
+ {
+ // only epo_stad has been seen using this mode (box behind dialog after you allow multiple strikes against you)
+ basereg = (tile & 0xf000) >> 12;
+ tile = tile & 0x0fff;
+ gfxbase = (m_segment_regs[(basereg * 2) + 1] << 16) | (m_segment_regs[(basereg * 2)] << 8);
+ tile += gfxbase;
+ }
+ else
+ {
+ // 8-byte alignment Addressing Mode uses a fixed offset? (like sprites)
+ basereg = (tile & 0xe000) >> 13;
+ tile &= 0x1fff;
+ tile = tile * 8;
+ gfxbase = (m_segment_regs[(basereg * 2) + 1] << 16) | (m_segment_regs[(basereg * 2)] << 8);
+ tile += gfxbase;
+ }
}
// Tilemap specific mode extension with an 8-bit per tile attribute, works in all modes except 24-bit (no room for attribute) and header (not needed?)
if (tileregs[0x7] & 0x08)
{
- //uint8_t extraattr = m_maincpu->read_full_data_sp((tileregs[0x2] << 8) + count);
- uint8_t extraattr = read_full_data_sp_bypass((tileregs[0x2] << 8) + count);
+ const offs_t realaddress = (tileregs[0x2] << 8) + count;
+ uint8_t extraattr;
+
+ if (m_disable_memory_bypass)
+ extraattr = m_maincpu->space(AS_PROGRAM).read_byte(realaddress);
+ else
+ extraattr = read_full_data_sp_bypass(realaddress);
// make use of the extraattr stuff?
pal = (extraattr & 0xf0) >> 4;
@@ -791,6 +949,16 @@ void xavix_state::draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, cons
}
}
+void superxavix_state::draw_sprites(screen_device& screen, bitmap_rgb32& bitmap, const rectangle& cliprect)
+{
+ if (m_extra)
+ m_use_superxavix_extra = true;
+
+ xavix_state::draw_sprites(screen, bitmap, cliprect);
+ m_use_superxavix_extra = false;
+}
+
+
void xavix_state::draw_sprites_line(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int line)
{
int alt_addressing = 0;
@@ -814,6 +982,11 @@ void xavix_state::draw_sprites_line(screen_device &screen, bitmap_rgb32 &bitmap,
// 24-bit addressing (Addressing Mode 2)
alt_addressing = 0;
}
+ else if (m_spritereg == 0x07)
+ {
+ // used by anpanmdx - is this a specific 24-bit mode to enable SuperXaviX extra ROM access?
+ alt_addressing = 3;
+ }
else
{
popmessage("unknown sprite reg %02x", m_spritereg);
@@ -847,8 +1020,8 @@ void xavix_state::draw_sprites_line(screen_device &screen, bitmap_rgb32 &bitmap,
int xpos = spr_xpos[i];
int tile = 0;
- // high 8-bits only used in 24-bit mode
- if (((m_spritereg & 0x7f) == 0x04) || ((m_spritereg & 0x7f) == 0x15))
+ // high 8-bits only used in 24-bit modes
+ if (((m_spritereg & 0x7f) == 0x04) || ((m_spritereg & 0x7f) == 0x07) || ((m_spritereg & 0x7f) == 0x15))
tile |= (spr_addr_hi[i] << 16);
// mid 8-bits used in everything except 8-bit mode
@@ -865,7 +1038,11 @@ void xavix_state::draw_sprites_line(screen_device &screen, bitmap_rgb32 &bitmap,
int zval = (attr1 & 0xf0) >> 4;
int flipx = (attr1 & 0x01);
- int flipy = (attr1 & 0x02);
+ int flipy = (attr1 & 0x02);
+
+ // many elements, including the XaviX logo on xavmusic have yflip set, but don't want it, why?
+ if (m_disable_sprite_yflip)
+ flipy = 0;
int drawheight = 16;
int drawwidth = 16;
@@ -937,6 +1114,7 @@ void xavix_state::draw_sprites_line(screen_device &screen, bitmap_rgb32 &bitmap,
xpos &= 0x7f;
xpos = -0x80 + xpos;
+ // this also breaks the epoch logo on suprtvpc, although some ingame elements need it
if (!m_sprite_xhigh_ignore_hack)
if (!xposh)
xpos -= 0x80;
@@ -973,20 +1151,32 @@ void xavix_state::draw_sprites_line(screen_device &screen, bitmap_rgb32 &bitmap,
if (alt_addressing == 1)
{
tile = (tile * drawheight * drawwidth * bpp) / 8;
- basereg = 0; // always uses segment register 0 in tile addressing mode?
+ int gfxbase = (m_segment_regs[1] << 16) | (m_segment_regs[0] << 8); // always use segment 0
+ tile += gfxbase;
+
}
- else
+ else if (alt_addressing == 2)
+ {
+ tile = tile * 8;
+ basereg = (tile & 0xf0000) >> 16;
+ tile &= 0xffff;
+ int gfxbase = (m_segment_regs[(basereg * 2) + 1] << 16) | (m_segment_regs[(basereg * 2)] << 8);
+ tile += gfxbase;
+ }
+ else if (alt_addressing == 3)
+ {
+ // 24-bit, with multiplier, no segment use?
+ // seen in anpanmdx, might be superxavix specific to be able to access more memory?
+ tile = tile * 8;
+ }
+ else // currently unused case
{
- // 8-byte alignment Addressing Mode uses a fixed offset?
- if (alt_addressing == 2)
- tile = tile * 8;
-
basereg = (tile & 0xf0000) >> 16;
tile &= 0xffff;
+ int gfxbase = (m_segment_regs[(basereg * 2) + 1] << 16) | (m_segment_regs[(basereg * 2)] << 8);
+ tile += gfxbase;
}
- int gfxbase = (m_segment_regs[(basereg * 2) + 1] << 16) | (m_segment_regs[(basereg * 2)] << 8);
- tile += gfxbase;
}
draw_tile_line(screen, bitmap, cliprect, tile, bpp, xpos , line, drawheight, drawwidth, flipx, flipy, pal, zval, drawline);
@@ -1001,13 +1191,39 @@ void xavix_state::draw_sprites_line(screen_device &screen, bitmap_rgb32 &bitmap,
}
}
+void xavix_state::get_tile_pixel_dat(uint8_t &dat, int bpp)
+{
+ for (int i = 0; i < bpp; i++)
+ {
+ dat |= (get_next_bit() << i);
+ }
+}
+
+void superxavix_state::get_tile_pixel_dat(uint8_t &dat, int bpp)
+{
+ if (m_use_superxavix_extra)
+ {
+ for (int i = 0; i < bpp; i++)
+ {
+ dat |= (get_next_bit_sx() << i);
+ }
+ }
+ else
+ {
+ for (int i = 0; i < bpp; i++)
+ {
+ dat |= (get_next_bit() << i);
+ }
+ }
+}
+
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();
if (ypos > cliprect.max_y || ypos < cliprect.min_y)
return;
- if ((xpos > cliprect.max_x) || ((xpos + drawwidth) < cliprect.min_x))
+ if (((xpos * m_video_hres_multiplier) > cliprect.max_x) || (((xpos * m_video_hres_multiplier) + drawwidth * m_video_hres_multiplier) < cliprect.min_x))
return;
if ((ypos >= cliprect.min_y && ypos <= cliprect.max_y))
@@ -1043,10 +1259,9 @@ void xavix_state::draw_tile_line(screen_device &screen, bitmap_rgb32 &bitmap, co
uint8_t dat = 0;
- for (int i = 0; i < bpp; i++)
- {
- dat |= (get_next_bit() << i);
- }
+ get_tile_pixel_dat(dat, bpp);
+
+ col = col * m_video_hres_multiplier;
if ((col >= cliprect.min_x && col <= cliprect.max_x))
{
@@ -1060,8 +1275,14 @@ void xavix_state::draw_tile_line(screen_device &screen, bitmap_rgb32 &bitmap, co
{
uint32_t *const yposptr = &bitmap.pix(ypos);
yposptr[col] = paldata[pen];
+ if (m_video_hres_multiplier == 2)
+ yposptr[col+1] = paldata[pen];
zyposptr[col] = zval;
+
+ if (m_video_hres_multiplier == 2)
+ zyposptr[col+1] = zval;
+
}
}
}
@@ -1069,12 +1290,10 @@ void xavix_state::draw_tile_line(screen_device &screen, bitmap_rgb32 &bitmap, co
}
}
-uint32_t xavix_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+rectangle xavix_state::do_arena(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);
rectangle clip = cliprect;
@@ -1096,8 +1315,8 @@ uint32_t xavix_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
*/
if (((m_arena_start != 0x00) && (m_arena_end != 0x00)) && ((m_arena_start != 0xff) && (m_arena_end != 0xff)))
{
- clip.max_x = m_arena_start - 3; // must be -3 to hide garbage on the right hand side of snowboarder
- clip.min_x = m_arena_end - 2; // must be -2 to render a single pixel line of the left border on Mappy remix (verified to render), although this creates a single pixel gap on the left of snowboarder status bar (need to verify)
+ clip.max_x = (m_arena_start - 3) * m_video_hres_multiplier; // must be -3 to hide garbage on the right hand side of snowboarder
+ clip.min_x = (m_arena_end - 2) * m_video_hres_multiplier; // must be -2 to render a single pixel line of the left border on Mappy remix (verified to render), although this creates a single pixel gap on the left of snowboarder status bar (need to verify)
if (clip.min_x < cliprect.min_x)
clip.min_x = cliprect.min_x;
@@ -1106,18 +1325,34 @@ uint32_t xavix_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
clip.max_x = cliprect.max_x;
}
}
+
bitmap.fill(paldata[0], clip);
+ m_zbuffer.fill(0, clip);
+
+ return clip;
+}
- draw_tilemap(screen, bitmap, clip, 1);
+void xavix_state::draw_regular_layers(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &clip)
+{
draw_tilemap(screen, bitmap, clip, 0);
+ draw_tilemap(screen, bitmap, clip, 1); // epo_golf requires this layer in front when priorities are equal or menu doesn't show?
draw_sprites(screen, bitmap, clip);
+}
- //popmessage("%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x", m_soundregs[0],m_soundregs[1],m_soundregs[2],m_soundregs[3],m_soundregs[4],m_soundregs[5],m_soundregs[6],m_soundregs[7],m_soundregs[8],m_soundregs[9],m_soundregs[10],m_soundregs[11],m_soundregs[12],m_soundregs[13],m_soundregs[14],m_soundregs[15]);
+uint32_t xavix_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ rectangle clip = do_arena(screen, bitmap, cliprect);
+ draw_regular_layers(screen, bitmap, clip);
+ return 0;
+}
- // temp, needs priority, transparency etc. also it's far bigger than the screen, I guess it must get scaled?!
+void superxavix_state::draw_bitmap_layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ const pen_t *paldata = m_palette->pens();
+ // incomplete!
if (m_bmp_base)
{
- // looks like it can zoom the bitmap using these?
+ // screen position for the bitmap?
uint16_t top = ((m_bmp_base[0x01] << 8) | m_bmp_base[0x00]);
uint16_t bot = ((m_bmp_base[0x03] << 8) | m_bmp_base[0x02]);
uint16_t lft = ((m_bmp_base[0x05] << 8) | m_bmp_base[0x04]);
@@ -1130,7 +1365,7 @@ uint32_t xavix_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
uint16_t rgtadr = ((m_bmp_base[0x0f] << 8) | m_bmp_base[0x0e]);
uint16_t start = ((m_bmp_base[0x11] << 8) | m_bmp_base[0x10]);
- uint8_t end = m_bmp_base[0x12]; // ?? related to width?
+ uint8_t step = m_bmp_base[0x12]; // step value to next line base
uint8_t size = m_bmp_base[0x13]; // some kind of additional scaling?
uint8_t mode = m_bmp_base[0x14]; // enable,bpp, zval etc.
@@ -1138,10 +1373,18 @@ uint32_t xavix_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
if (mode & 0x01)
{
- popmessage("bitmap t:%04x b:%04x l:%04x r:%04x -- -- ba:%04x la:%04x ra:%04x -- -- end:%02x - size:%02x unused:%08x",
- top, bot, lft, rgt,
- /*topadr*/ botadr, lftadr, rgtadr,
- /*start*/ end, size, unused);
+ if (0)
+ {
+ popmessage("bitmap t:%04x b:%04x l:%04x r:%04x -- -- ta: %04x ba:%04x la:%04x ra:%04x -- -- start %04x (%08x) step:%02x - size:%02x unused:%08x\n",
+ top, bot, lft, rgt,
+ topadr, botadr, lftadr, rgtadr,
+ start, start * 0x800, step, size, unused);
+ }
+
+ // anpanmdx title screen ends up with a seemingly incorrect value for start
+ // when it does the scroller. There is presumably an opcode or math bug causing this.
+ //if (start >= 0x7700)
+ /// start -= 0x3c00;
int base = start * 0x800;
int base2 = topadr * 0x8;
@@ -1149,51 +1392,108 @@ uint32_t xavix_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
int bpp = ((mode & 0x0e) >> 1) + 1;
int zval = ((mode & 0xf0) >> 4);
- int width = (rgtadr * 8) / bpp;
+ int hposadjust, vpostadjust;
+ bool is_highres = true;
+
+ // SuperXaviX seems to have CRTC registers (0x6f80 - 0x6faf area), so in reality this probably
+ // comes from there due to different overall screen positioning; might also depend on bitmap
+ // bpp mode (so this is probably not the correct way to detect this)
+ // there could also be XaviX2000+ opcode bugs causing wrong register values!
+ if ((size & 0x70) == 0x70)
+ is_highres = false;
+
+ if (is_highres)
+ hposadjust = 0x90; // good for xavtenni, xavbowl, tmy_thom, tmy_rkmj, but not xavbaseb
+ else
+ hposadjust = 0x46; // good for udance, ban_ordj, not quite correct for ban_kksj in demo
+
+ vpostadjust = 0x06; // probably can vary (see XaviX boot-up logos, logo vs text positions)
- //int count = 0;
+ top += vpostadjust;
+ bot += vpostadjust;
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
{
int line = y - top;
- if ((line > 0) && (y < bot))
+ if ((line > 0) && (y < bot)) // should also clip if out of range for botadr
{
- set_data_address(base + base2 + ((line * width * bpp) / 8), 0);
+ set_data_address(base + base2 + ((line * (step * 64)) / 8), 0);
- for (int x = 0; x < width; x++)
+ // also needs to take into account 'lftadr' address from the line base
+ // and clip against 'rgtadr' address if reads go beyond linebase + that for the line
+ for (int x = lft - hposadjust; x < rgt - hposadjust; x++)
{
- uint32_t *const yposptr = &bitmap.pix(y);
- uint16_t *const zyposptr = &m_zbuffer.pix(y);
+ uint32_t* const yposptr = &bitmap.pix(y);
+ uint16_t* const zyposptr = &m_zbuffer.pix(y);
uint8_t dat = 0;
- for (int i = 0; i < bpp; i++)
+
+ if (m_extra)
+ {
+ for (int i = 0; i < bpp; i++)
+ {
+ dat |= (get_next_bit_sx() << i);
+ }
+ }
+ else
+ {
+ for (int i = 0; i < bpp; i++)
+ {
+ dat |= (get_next_bit() << i);
+ }
+ }
+
+ int realx;
+ realx = x;
+
+ if (!is_highres)
+ realx *= 2;
+
+ if (((realx <= cliprect.max_x) && (realx >= cliprect.min_x)) && ((y <= cliprect.max_y) && (y >= cliprect.min_y)))
{
- dat |= (get_next_bit() << i);
+ if ((m_bmp_palram_sh[dat] & 0x1f) < 24) // same transparency logic as everything else? (baseball title)
+ {
+ if (zval >= zyposptr[realx])
+ {
+ yposptr[realx] = paldata[dat + 0x100];
+ zyposptr[realx] = zval;
+ }
+ }
}
- if (((x <= cliprect.max_x) && (x >= cliprect.min_x)) && ((y <= cliprect.max_y) && (y >= cliprect.min_y)))
+ // draw doubled pixel for low-res bitmap
+ if (!is_highres)
+ realx += 1;
+
+ if (((realx <= cliprect.max_x) && (realx >= cliprect.min_x)) && ((y <= cliprect.max_y) && (y >= cliprect.min_y)))
{
if ((m_bmp_palram_sh[dat] & 0x1f) < 24) // same transparency logic as everything else? (baseball title)
{
- if (zval >= zyposptr[x])
+ if (zval >= zyposptr[realx])
{
- yposptr[x] = paldata[dat + 0x100];
- zyposptr[x] = zval;
+ yposptr[realx] = paldata[dat + 0x100];
+ zyposptr[realx] = zval;
}
}
}
+
}
}
}
}
}
+}
+uint32_t superxavix_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ rectangle clip = do_arena(screen, bitmap, cliprect);
+ draw_bitmap_layer(screen, bitmap, clip); // maxheart suggests bitmap is drawn first or you get a black box over the display
+ draw_regular_layers(screen, bitmap, clip);
return 0;
}
-
void xavix_state::spritefragment_dma_params_1_w(offs_t offset, uint8_t data)
{
m_spritefragment_dmaparam1[offset] = data;
@@ -1210,15 +1510,11 @@ void xavix_state::spritefragment_dma_trg_w(uint8_t data)
uint16_t src = (m_spritefragment_dmaparam1[1] << 8) | m_spritefragment_dmaparam1[0];
uint16_t dst = (m_spritefragment_dmaparam2[0] << 8);
- uint8_t unk = m_spritefragment_dmaparam2[1];
+ uint8_t src_block_size = m_spritefragment_dmaparam2[1];
- LOG("%s: spritefragment_dma_trg_w with trg %02x size %04x src %04x dest %04x unk (%02x)\n", machine().describe_context(), data & 0xf8, len, src, dst, unk);
+ LOG("%s: spritefragment_dma_trg_w with trg %02x size %04x src %04x dest %04x unk (%02x)\n", machine().describe_context(), data & 0xf8, len, src, dst, src_block_size);
- if (unk)
- {
- // tak_chq triggers this, but probably due to bad xavix2000 opcodes, as many things look invalid
- logerror("m_spritefragment_dmaparam2[1] != 0x00 (is %02x)\n", m_spritefragment_dmaparam2[1]);
- }
+ src_block_size--; // 0x00 is maximum
if (len == 0x00)
{
@@ -1230,12 +1526,30 @@ void xavix_state::spritefragment_dma_trg_w(uint8_t data)
if (data & 0x40)
{
+ int readaddress = 0;
+
for (int i = 0; i < len; i++)
{
- //uint8_t dat = m_maincpu->read_full_data_sp(src + i);
- uint8_t dat = read_full_data_sp_bypass(src + i);
- //m_fragment_sprite[(dst + i) & 0x7ff] = dat;
- spriteram_w((dst + i) & 0x7ff, dat);
+ // tak_chq explicitly sets unk & 0x80
+ // and the source data is in 0x80 byte blocks, not 0x100
+ // epo_doka uses 0xb4, which seems to confirm this
+ if ((i & 0xff) > src_block_size)
+ {
+ // do nothing, maybe unk is the length of each section to copy?
+ }
+ else
+ {
+ //uint8_t dat = m_maincpu->read_full_data_sp(src + i);
+ const offs_t realaddress = src + readaddress;
+ uint8_t dat;
+ if (m_disable_memory_bypass)
+ dat = m_maincpu->space(AS_PROGRAM).read_byte(realaddress);
+ else
+ dat = read_full_data_sp_bypass(realaddress);
+ //m_fragment_sprite[(dst + i) & 0x7ff] = dat;
+ spriteram_w((dst + i) & 0x7ff, dat);
+ readaddress++;
+ }
}
}
}