summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/konmedal.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/konmedal.cpp')
-rw-r--r--src/mame/drivers/konmedal.cpp115
1 files changed, 98 insertions, 17 deletions
diff --git a/src/mame/drivers/konmedal.cpp b/src/mame/drivers/konmedal.cpp
index e8449a2f1da..72c558a1316 100644
--- a/src/mame/drivers/konmedal.cpp
+++ b/src/mame/drivers/konmedal.cpp
@@ -27,6 +27,7 @@ Konami Custom chips:
#include "cpu/z80/z80.h"
#include "machine/eepromser.h"
#include "machine/gen_latch.h"
+#include "machine/timer.h"
#include "sound/ymz280b.h"
#include "sound/okim6295.h"
#include "sound/k051649.h"
@@ -68,8 +69,15 @@ public:
K056832_CB_MEMBER(tile_callback);
K052109_CB_MEMBER(shuriboy_tile_callback);
- INTERRUPT_GEN_MEMBER(shuriboy_interrupt);
+ TIMER_DEVICE_CALLBACK_MEMBER(scanline);
DECLARE_WRITE8_MEMBER(shuri_bank_w);
+ DECLARE_READ8_MEMBER(shuri_video_r);
+ DECLARE_WRITE8_MEMBER(shuri_video_w);
+ DECLARE_WRITE8_MEMBER(shuri_control_w);
+ DECLARE_WRITE8_MEMBER(shuri_vrom_addr_w);
+ DECLARE_WRITE8_MEMBER(shuri_vrom_bank_w);
+ DECLARE_READ8_MEMBER(shuri_irq_r);
+ DECLARE_WRITE8_MEMBER(shuri_irq_w);
protected:
virtual void machine_start() override;
@@ -84,7 +92,8 @@ private:
optional_device<ymz280b_device> m_ymz;
optional_device<okim6295_device> m_oki;
- u8 m_control, m_control2;
+ u8 m_control, m_control2, m_shuri_irq;
+ u32 m_vrom_base;
};
WRITE8_MEMBER(konmedal_state::control2_w)
@@ -248,6 +257,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( shuriboy_main, AS_PROGRAM, 8, konmedal_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_REGION("maincpu", 0)
AM_RANGE(0x8000, 0x87ff) AM_RAM
+ AM_RANGE(0x8b00, 0x8b00) AM_WRITENOP // watchdog?
AM_RANGE(0x8c00, 0x8c00) AM_WRITE(shuri_bank_w)
AM_RANGE(0x9800, 0x987f) AM_DEVREADWRITE("k051649", k051649_device, k051649_waveform_r, k051649_waveform_w)
AM_RANGE(0x9880, 0x9889) AM_DEVWRITE("k051649", k051649_device, k051649_frequency_w)
@@ -255,7 +265,12 @@ static ADDRESS_MAP_START( shuriboy_main, AS_PROGRAM, 8, konmedal_state )
AM_RANGE(0x988f, 0x988f) AM_DEVWRITE("k051649", k051649_device, k051649_keyonoff_w)
AM_RANGE(0x98e0, 0x98ff) AM_DEVREADWRITE("k051649", k051649_device, k051649_test_r, k051649_test_w)
AM_RANGE(0xa000, 0xbfff) AM_ROMBANK("bank1")
- AM_RANGE(0xc000, 0xffff) AM_DEVREADWRITE("k052109", k052109_device, read, write)
+ AM_RANGE(0xc000, 0xdbff) AM_DEVREADWRITE("k052109", k052109_device, read, write)
+ AM_RANGE(0xdd00, 0xdd00) AM_READWRITE(shuri_irq_r, shuri_irq_w)
+ AM_RANGE(0xdd80, 0xdd80) AM_WRITE(shuri_control_w)
+ AM_RANGE(0xde00, 0xde00) AM_WRITE(shuri_vrom_addr_w)
+ AM_RANGE(0xdf00, 0xdf00) AM_WRITE(shuri_vrom_bank_w)
+ AM_RANGE(0xe000, 0xffff) AM_READWRITE(shuri_video_r, shuri_video_w)
ADDRESS_MAP_END
static INPUT_PORTS_START( konmedal )
@@ -349,6 +364,8 @@ MACHINE_START_MEMBER(konmedal_state, shuriboy)
void konmedal_state::machine_reset()
{
+ m_vrom_base = 0;
+ m_control = m_control2 = m_shuri_irq = 0;
}
static MACHINE_CONFIG_START( tsukande )
@@ -435,13 +452,7 @@ Dips: 2 x 8 dips bank
K052109_CB_MEMBER(konmedal_state::shuriboy_tile_callback)
{
*code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9) | (bank << 13);
-// *color = m_layer_colorbase[layer] + ((*color & 0xe0) >> 5);
-}
-
-INTERRUPT_GEN_MEMBER(konmedal_state::shuriboy_interrupt)
-{
- if (m_k052109->is_irq_enabled())
- device.execute().set_input_line(0, HOLD_LINE);
+// *color = m_layer_colorbase[layer] + ((*color & 0xe0) >> 5);
}
WRITE8_MEMBER(konmedal_state::shuri_bank_w)
@@ -450,16 +461,85 @@ WRITE8_MEMBER(konmedal_state::shuri_bank_w)
membank("bank1")->set_entry(data&0x3);
}
+READ8_MEMBER(konmedal_state::shuri_video_r)
+{
+ if (!(m_control & 0x10))
+ {
+ return m_k052109->read(space, offset+0x2000);
+ }
+
+ uint8_t *ROM = memregion("k052109")->base();
+ return ROM[offset + m_vrom_base];
+}
+
+WRITE8_MEMBER(konmedal_state::shuri_video_w)
+{
+ m_k052109->write(space, offset+0x2000, data);
+}
+
+READ8_MEMBER(konmedal_state::shuri_irq_r)
+{
+ return m_shuri_irq;
+}
+
+WRITE8_MEMBER(konmedal_state::shuri_irq_w)
+{
+ if ((m_shuri_irq & 0x4) && !(data & 0x4))
+ {
+ m_maincpu->set_input_line(0, CLEAR_LINE);
+ }
+ else if ((m_shuri_irq & 0x1) && !(data & 0x1))
+ {
+ m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+ }
+
+ m_shuri_irq = data;
+}
+
+TIMER_DEVICE_CALLBACK_MEMBER(konmedal_state::scanline)
+{
+ int scanline = param;
+
+ if ((scanline == 240) && (m_shuri_irq & 0x4))
+ {
+ m_maincpu->set_input_line(0, ASSERT_LINE);
+
+ }
+
+ if ((scanline == 255) && (m_shuri_irq & 0x1))
+ {
+ m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
+ }
+}
+
+WRITE8_MEMBER(konmedal_state::shuri_control_w)
+{
+ m_control = data;
+}
+
+WRITE8_MEMBER(konmedal_state::shuri_vrom_addr_w)
+{
+ m_vrom_base &= ~0xf000;
+ m_vrom_base |= (data << 12);
+}
+
+WRITE8_MEMBER(konmedal_state::shuri_vrom_bank_w)
+{
+ m_vrom_base &= ~0xf0000;
+ data &= 0xc0;
+ m_vrom_base |= (data << 10);
+}
+
static MACHINE_CONFIG_START( shuriboy )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_24MHz / 3) // divisor unknown
MCFG_CPU_PROGRAM_MAP(shuriboy_main)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", konmedal_state, shuriboy_interrupt)
+ MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", konmedal_state, scanline, "screen", 0, 1)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER) // everything not verified, just a placeholder
MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(30))
MCFG_SCREEN_SIZE(64*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(80, 400-1, 16, 240-1)
MCFG_SCREEN_UPDATE_DRIVER(konmedal_state, screen_update_shuriboy)
@@ -531,10 +611,10 @@ ROM_START( shuriboy )
ROM_LOAD( "gs-341-b01.13g", 0x000000, 0x010000, CRC(3c0f36b6) SHA1(1d3838f45969228a8b2054cd5baf8892db68b644) )
ROM_REGION( 0x40000, "k052109", 0 ) /* tilemaps */
- ROM_LOAD32_BYTE( "341-A03.2H", 0x000002, 0x010000, CRC(8e9e9835) SHA1(f8dc4579f238d91c0aef59167be7e5de87dc4ba7) )
- ROM_LOAD32_BYTE( "341-A04.4H", 0x000003, 0x010000, CRC(ac82d67b) SHA1(65869adfbb67cf10c92e50239fd747fc5ad4714d) )
- ROM_LOAD32_BYTE( "341-A05.5H", 0x000000, 0x010000, CRC(31403832) SHA1(d13c54d3768a0c2d60a3751db8980199f60db243) )
- ROM_LOAD32_BYTE( "341-A06.7H", 0x000001, 0x010000, CRC(361e26eb) SHA1(7b5ad6a6067afb3350d85a3f2026e4d685429e20) )
+ ROM_LOAD32_BYTE( "341-A03.2H", 0x000000, 0x010000, CRC(8e9e9835) SHA1(f8dc4579f238d91c0aef59167be7e5de87dc4ba7) )
+ ROM_LOAD32_BYTE( "341-A04.4H", 0x000001, 0x010000, CRC(ac82d67b) SHA1(65869adfbb67cf10c92e50239fd747fc5ad4714d) )
+ ROM_LOAD32_BYTE( "341-A05.5H", 0x000002, 0x010000, CRC(31403832) SHA1(d13c54d3768a0c2d60a3751db8980199f60db243) )
+ ROM_LOAD32_BYTE( "341-A06.7H", 0x000003, 0x010000, CRC(361e26eb) SHA1(7b5ad6a6067afb3350d85a3f2026e4d685429e20) )
ROM_REGION( 0x200000, "upd", 0 )
ROM_LOAD( "341-A02.13C", 0x000000, 0x020000, CRC(e1f5c8f1) SHA1(323a078720e09a7326e82cb623b6c90e2674e800) )
@@ -542,4 +622,5 @@ ROM_END
GAME( 1995, tsukande, 0, tsukande, konmedal, konmedal_state, 0, ROT0, "Konami", "Tsukande Toru Chicchi", MACHINE_NOT_WORKING)
GAME( 1995, ddboy, 0, ddboy, konmedal, konmedal_state, 0, ROT0, "Konami", "Dam Dam Boy", MACHINE_NOT_WORKING)
-GAME( 1993, shuriboy, 0, shuriboy, konmedal, konmedal_state, 0, ROT0, "Konami", "Shuriken Boy", MACHINE_IS_SKELETON)
+GAME( 1993, shuriboy, 0, shuriboy, konmedal, konmedal_state, 0, ROT0, "Konami", "Shuriken Boy", MACHINE_NOT_WORKING)
+