summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/m72.c167
1 files changed, 71 insertions, 96 deletions
diff --git a/src/mame/drivers/m72.c b/src/mame/drivers/m72.c
index 4e973efc1e8..0d2650cbea1 100644
--- a/src/mame/drivers/m72.c
+++ b/src/mame/drivers/m72.c
@@ -60,13 +60,18 @@ M82 - board made for Major Title, Z80 has a rom, no MCU
M84 - 2 PCB stack
functionally same as M82 but without the extra sprite hw??
- M84-A-A (bottom board)
+ M84-A-A (bottom board) (most games)
supports
4 program roms
8 tile roms
1 snd prg, 1 voice rom
CPUs and some customs etc.
+ M84-D-B (bottom board) (found on lightning swords / kengo)
+ redesigned version of above but
+ for V35 CPU? (seems to lack the UPD71059C interrupt
+ controller which isn't needed when with the V35)
+
M84-C-A (top board) (listed as for Hammering Harry)
4 sprite roms (in a row)
6 larger chips with detail removed
@@ -91,6 +96,7 @@ M84 - 2 PCB stack
M85 - Pound for Pound uses this, possibly just M84 with
a modified sound section?
+ - not Jamma, trackball input only
Year Board Protected?
@@ -882,7 +888,7 @@ READ16_MEMBER(m72_state::poundfor_trackball_r)
}
-#define CPU1_MEMORY(NAME,ROMSIZE,WORKRAM) \
+#define M72_CPU1_MEMORY(NAME,ROMSIZE,WORKRAM) \
static ADDRESS_MAP_START( NAME##_map, AS_PROGRAM, 16 , m72_state ) \
AM_RANGE(0x00000, ROMSIZE-1) AM_ROM \
AM_RANGE(WORKRAM, WORKRAM+0x3fff) AM_RAM /* work RAM */ \
@@ -896,50 +902,55 @@ static ADDRESS_MAP_START( NAME##_map, AS_PROGRAM, 16 , m72_state ) \
ADDRESS_MAP_END
-/* ROMSIZE WORKRAM */
-CPU1_MEMORY( m72, 0x80000, 0xa0000 )
-CPU1_MEMORY( rtype, 0x40000, 0x40000 )
-CPU1_MEMORY( xmultiplm72, 0x80000, 0x80000 )
-CPU1_MEMORY( dbreedm72, 0x80000, 0x90000 )
+/* ROMSIZE WORKRAM */
+M72_CPU1_MEMORY( m72, 0x80000, 0xa0000 )
+M72_CPU1_MEMORY( rtype, 0x40000, 0x40000 )
+M72_CPU1_MEMORY( xmultiplm72, 0x80000, 0x80000 )
+M72_CPU1_MEMORY( dbreedm72, 0x80000, 0x90000 )
-static ADDRESS_MAP_START( xmultipl_map, AS_PROGRAM, 16, m72_state )
- AM_RANGE(0x00000, 0x7ffff) AM_ROM
- AM_RANGE(0x9c000, 0x9ffff) AM_RAM /* work RAM */
- AM_RANGE(0xb0ffe, 0xb0fff) AM_WRITEONLY /* leftover from protection?? */
- AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0xc8000, 0xc8bff) AM_READWRITE(palette1_r, palette1_w) AM_SHARE("paletteram")
- AM_RANGE(0xcc000, 0xccbff) AM_READWRITE(palette2_r, palette2_w) AM_SHARE("paletteram2")
- AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(videoram1_w) AM_SHARE("videoram1")
- AM_RANGE(0xd8000, 0xdbfff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
- AM_RANGE(0xffff0, 0xfffff) AM_ROM
-ADDRESS_MAP_END
-static ADDRESS_MAP_START( dbreed_map, AS_PROGRAM, 16, m72_state )
- AM_RANGE(0x00000, 0x7ffff) AM_ROM
- AM_RANGE(0x88000, 0x8bfff) AM_RAM /* work RAM */
- AM_RANGE(0xb0ffe, 0xb0fff) AM_WRITEONLY /* leftover from protection?? */
- AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0xc8000, 0xc8bff) AM_READWRITE(palette1_r, palette1_w) AM_SHARE("paletteram")
- AM_RANGE(0xcc000, 0xccbff) AM_READWRITE(palette2_r, palette2_w) AM_SHARE("paletteram2")
- AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(videoram1_w) AM_SHARE("videoram1")
- AM_RANGE(0xd8000, 0xdbfff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
- AM_RANGE(0xffff0, 0xfffff) AM_ROM
-ADDRESS_MAP_END
+#define M81_CPU1_MEMORY(NAME,WORKRAM) \
+ static ADDRESS_MAP_START( NAME##_map, AS_PROGRAM, 16 , m72_state ) \
+ AM_RANGE(0x00000, 0x7ffff) AM_ROM \
+ AM_RANGE(WORKRAM, WORKRAM+0x3fff) AM_RAM /* work RAM */ \
+ AM_RANGE(0xb0ffe, 0xb0fff) AM_WRITEONLY /* leftover from protection?? */ \
+ AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_SHARE("spriteram") \
+ AM_RANGE(0xc8000, 0xc8bff) AM_READWRITE(palette1_r, palette1_w) AM_SHARE("paletteram") \
+ AM_RANGE(0xcc000, 0xccbff) AM_READWRITE(palette2_r, palette2_w) AM_SHARE("paletteram2") \
+ AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(videoram1_w) AM_SHARE("videoram1") \
+ AM_RANGE(0xd8000, 0xdbfff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2") \
+ AM_RANGE(0xffff0, 0xfffff) AM_ROM \
+ADDRESS_MAP_END \
+
+/* WORKRAM */
+M81_CPU1_MEMORY( xmultipl, 0x9c000 )
+M81_CPU1_MEMORY( dbreed, 0x88000 )
+M81_CPU1_MEMORY( hharry, 0xa0000 )
+
+
+#define M84_CPU1_MEMORY(NAME,VIDEORAM,PALETTERAM1,PALETTERAM2) \
+ static ADDRESS_MAP_START( NAME##_map, AS_PROGRAM, 16 , m72_state ) \
+ AM_RANGE(0x00000, 0x7ffff) AM_ROM \
+ AM_RANGE(0xb0000, 0xb0001) AM_WRITE(irq_line_w) \
+ AM_RANGE(0xb4000, 0xb4001) AM_WRITENOP /* ??? */ \
+ AM_RANGE(0xbc000, 0xbc001) AM_WRITE(dmaon_w) \
+ AM_RANGE(0xb0ffe, 0xb0fff) AM_WRITEONLY /* leftover from protection?? */ \
+ AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_SHARE("spriteram") \
+ AM_RANGE(VIDEORAM+0x0000, VIDEORAM+0x3fff) AM_RAM_WRITE(videoram1_w) AM_SHARE("videoram1") \
+ AM_RANGE(VIDEORAM+0x4000, VIDEORAM+0x7fff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2") \
+ AM_RANGE(PALETTERAM1, PALETTERAM1+0xbff) AM_READWRITE(palette1_r, palette1_w) AM_SHARE("paletteram") \
+ AM_RANGE(PALETTERAM2, PALETTERAM2+0xbff) AM_READWRITE(palette2_r, palette2_w) AM_SHARE("paletteram2") \
+ AM_RANGE(0xe0000, 0xe3fff) AM_RAM /* work RAM */ \
+ AM_RANGE(0xffff0, 0xfffff) AM_ROM \
+ADDRESS_MAP_END \
+
+M84_CPU1_MEMORY( rtype2, 0xd0000, 0xc8000, 0xd8000 )
+M84_CPU1_MEMORY( hharryu, 0xd0000, 0xa0000, 0xa8000 )
+M84_CPU1_MEMORY( kengo, 0x80000, 0xa0000, 0xa8000 )
+
-static ADDRESS_MAP_START( rtype2_map, AS_PROGRAM, 16, m72_state )
- AM_RANGE(0x00000, 0x7ffff) AM_ROM
- AM_RANGE(0xb0000, 0xb0001) AM_WRITE(irq_line_w)
- AM_RANGE(0xbc000, 0xbc001) AM_WRITE(dmaon_w)
- AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0xc8000, 0xc8bff) AM_READWRITE(palette1_r, palette1_w) AM_SHARE("paletteram")
- AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(videoram1_w) AM_SHARE("videoram1")
- AM_RANGE(0xd4000, 0xd7fff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
- AM_RANGE(0xd8000, 0xd8bff) AM_READWRITE(palette2_r, palette2_w) AM_SHARE("paletteram2")
- AM_RANGE(0xe0000, 0xe3fff) AM_RAM /* work RAM */
- AM_RANGE(0xffff0, 0xfffff) AM_ROM
-ADDRESS_MAP_END
-static ADDRESS_MAP_START( majtitle_map, AS_PROGRAM, 16, m72_state )
+static ADDRESS_MAP_START( m82_map, AS_PROGRAM, 16, m72_state )
AM_RANGE(0x00000, 0x7ffff) AM_ROM
AM_RANGE(0xa0000, 0xa03ff) AM_RAM AM_SHARE("majtitle_rowscr")
AM_RANGE(0xa4000, 0xa4bff) AM_READWRITE(palette2_r, palette2_w) AM_SHARE("paletteram2")
@@ -955,47 +966,9 @@ static ADDRESS_MAP_START( majtitle_map, AS_PROGRAM, 16, m72_state )
AM_RANGE(0xffff0, 0xfffff) AM_ROM
ADDRESS_MAP_END
-static ADDRESS_MAP_START( hharry_map, AS_PROGRAM, 16, m72_state )
- AM_RANGE(0x00000, 0x7ffff) AM_ROM
- AM_RANGE(0xa0000, 0xa3fff) AM_RAM /* work RAM */
- AM_RANGE(0xb0ffe, 0xb0fff) AM_WRITEONLY /* leftover from protection?? */
- AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0xc8000, 0xc8bff) AM_READWRITE(palette1_r, palette1_w) AM_SHARE("paletteram")
- AM_RANGE(0xcc000, 0xccbff) AM_READWRITE(palette2_r, palette2_w) AM_SHARE("paletteram2")
- AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(videoram1_w) AM_SHARE("videoram1")
- AM_RANGE(0xd8000, 0xdbfff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
- AM_RANGE(0xffff0, 0xfffff) AM_ROM
-ADDRESS_MAP_END
-static ADDRESS_MAP_START( hharryu_map, AS_PROGRAM, 16, m72_state )
- AM_RANGE(0x00000, 0x7ffff) AM_ROM
- AM_RANGE(0xa0000, 0xa0bff) AM_READWRITE(palette1_r, palette1_w) AM_SHARE("paletteram")
- AM_RANGE(0xa8000, 0xa8bff) AM_READWRITE(palette2_r, palette2_w) AM_SHARE("paletteram2")
- AM_RANGE(0xb0000, 0xb0001) AM_WRITE(irq_line_w)
- AM_RANGE(0xbc000, 0xbc001) AM_WRITE(dmaon_w)
- AM_RANGE(0xb0ffe, 0xb0fff) AM_WRITEONLY /* leftover from protection?? */
- AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(videoram1_w) AM_SHARE("videoram1")
- AM_RANGE(0xd4000, 0xd7fff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
- AM_RANGE(0xe0000, 0xe3fff) AM_RAM /* work RAM */
- AM_RANGE(0xffff0, 0xfffff) AM_ROM
-ADDRESS_MAP_END
-static ADDRESS_MAP_START( kengo_map, AS_PROGRAM, 16, m72_state )
- AM_RANGE(0x00000, 0x7ffff) AM_ROM
- AM_RANGE(0xa0000, 0xa0bff) AM_READWRITE(palette1_r, palette1_w) AM_SHARE("paletteram")
- AM_RANGE(0xa8000, 0xa8bff) AM_READWRITE(palette2_r, palette2_w) AM_SHARE("paletteram2")
- AM_RANGE(0xb0000, 0xb0001) AM_WRITE(irq_line_w)
- AM_RANGE(0xb4000, 0xb4001) AM_WRITENOP /* ??? */
- AM_RANGE(0xbc000, 0xbc001) AM_WRITE(dmaon_w)
- AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x80000, 0x83fff) AM_RAM_WRITE(videoram1_w) AM_SHARE("videoram1")
- AM_RANGE(0x84000, 0x87fff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
- AM_RANGE(0xe0000, 0xe3fff) AM_RAM /* work RAM */
- AM_RANGE(0xffff0, 0xfffff) AM_ROM
-ADDRESS_MAP_END
-
static ADDRESS_MAP_START( m72_portmap, AS_IO, 16, m72_state )
AM_RANGE(0x00, 0x01) AM_READ_PORT("IN0")
AM_RANGE(0x02, 0x03) AM_READ_PORT("IN1")
@@ -1012,7 +985,7 @@ static ADDRESS_MAP_START( m72_portmap, AS_IO, 16, m72_state )
/* { 0xc0, 0xc0 trigger sample, filled by init_ function */
ADDRESS_MAP_END
-static ADDRESS_MAP_START( rtype2_portmap, AS_IO, 16, m72_state )
+static ADDRESS_MAP_START( m84_portmap, AS_IO, 16, m72_state )
AM_RANGE(0x00, 0x01) AM_READ_PORT("IN0")
AM_RANGE(0x02, 0x03) AM_READ_PORT("IN1")
AM_RANGE(0x04, 0x05) AM_READ_PORT("DSW")
@@ -1025,6 +998,20 @@ static ADDRESS_MAP_START( rtype2_portmap, AS_IO, 16, m72_state )
AM_RANGE(0x86, 0x87) AM_WRITE(scrollx2_w)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( m84_v33_portmap, AS_IO, 16, m72_state )
+ AM_RANGE(0x00, 0x01) AM_READ_PORT("IN0")
+ AM_RANGE(0x02, 0x03) AM_READ_PORT("IN1")
+ AM_RANGE(0x04, 0x05) AM_READ_PORT("DSW")
+ AM_RANGE(0x00, 0x01) AM_DEVWRITE("m72", m72_audio_device, sound_command_w)
+ AM_RANGE(0x02, 0x03) AM_WRITE(rtype2_port02_w)
+ AM_RANGE(0x80, 0x81) AM_WRITE(scrolly1_w)
+ AM_RANGE(0x82, 0x83) AM_WRITE(scrollx1_w)
+ AM_RANGE(0x84, 0x85) AM_WRITE(scrolly2_w)
+ AM_RANGE(0x86, 0x87) AM_WRITE(scrollx2_w)
+// AM_RANGE(0x8c, 0x8f) AM_WRITENOP /* ??? */
+ADDRESS_MAP_END
+
+
static ADDRESS_MAP_START( poundfor_portmap, AS_IO, 16, m72_state )
AM_RANGE(0x02, 0x03) AM_READ_PORT("IN1")
AM_RANGE(0x04, 0x05) AM_READ_PORT("DSW")
@@ -1070,18 +1057,6 @@ static ADDRESS_MAP_START( m81_portmap, AS_IO, 16, m72_state )
AM_RANGE(0x86, 0x87) AM_WRITE(scrollx2_w)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( kengo_portmap, AS_IO, 16, m72_state )
- AM_RANGE(0x00, 0x01) AM_READ_PORT("IN0")
- AM_RANGE(0x02, 0x03) AM_READ_PORT("IN1")
- AM_RANGE(0x04, 0x05) AM_READ_PORT("DSW")
- AM_RANGE(0x00, 0x01) AM_DEVWRITE("m72", m72_audio_device, sound_command_w)
- AM_RANGE(0x02, 0x03) AM_WRITE(rtype2_port02_w)
- AM_RANGE(0x80, 0x81) AM_WRITE(scrolly1_w)
- AM_RANGE(0x82, 0x83) AM_WRITE(scrollx1_w)
- AM_RANGE(0x84, 0x85) AM_WRITE(scrolly2_w)
- AM_RANGE(0x86, 0x87) AM_WRITE(scrollx2_w)
-// AM_RANGE(0x8c, 0x8f) AM_WRITENOP /* ??? */
-ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_ram_map, AS_PROGRAM, 8, m72_state )
@@ -1989,7 +1964,7 @@ static MACHINE_CONFIG_START( rtype2, m72_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */
MCFG_CPU_PROGRAM_MAP(rtype2_map)
- MCFG_CPU_IO_MAP(rtype2_portmap)
+ MCFG_CPU_IO_MAP(m84_portmap)
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("upd71059c", pic8259_device, inta_cb)
MCFG_CPU_ADD("soundcpu", Z80, SOUND_CLOCK)
@@ -2032,7 +2007,7 @@ static MACHINE_CONFIG_START( cosmccop, m72_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", V35,MASTER_CLOCK/2)
MCFG_CPU_PROGRAM_MAP(kengo_map)
- MCFG_CPU_IO_MAP(kengo_portmap)
+ MCFG_CPU_IO_MAP(m84_v33_portmap)
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("upd71059c", pic8259_device, inta_cb)
MCFG_CPU_ADD("soundcpu", Z80, SOUND_CLOCK)
@@ -2078,7 +2053,7 @@ static MACHINE_CONFIG_START( m82, m72_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */
- MCFG_CPU_PROGRAM_MAP(majtitle_map)
+ MCFG_CPU_PROGRAM_MAP(m82_map)
MCFG_CPU_IO_MAP(m82_portmap)
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("upd71059c", pic8259_device, inta_cb)