diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/drivers/m72.c | 167 |
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) |