diff options
author | Ivan Vangelista <mesgnet@yahoo.it> | 2021-08-06 18:10:12 +0200 |
---|---|---|
committer | Ivan Vangelista <mesgnet@yahoo.it> | 2021-08-06 18:10:12 +0200 |
commit | 4e6071df201893ff6c1612c2a5fd72a0cd7bc1e8 (patch) | |
tree | c4d30f7fc5417d5aae3d773682ce20a6530271cc | |
parent | 5839ae699d6000f5b2e8fdf74e5d4ecec0217abf (diff) |
zaccaria.cpp: added some notes about a new dump of the jackrabt set with bigger program ROMs [flocke]
-rw-r--r-- | src/mame/drivers/zaccaria.cpp | 90 | ||||
-rw-r--r-- | src/mame/includes/zaccaria.h | 14 | ||||
-rw-r--r-- | src/mame/video/zaccaria.cpp | 26 |
3 files changed, 71 insertions, 59 deletions
diff --git a/src/mame/drivers/zaccaria.cpp b/src/mame/drivers/zaccaria.cpp index 28c5aab5017..c7c55d1d606 100644 --- a/src/mame/drivers/zaccaria.cpp +++ b/src/mame/drivers/zaccaria.cpp @@ -13,7 +13,7 @@ TODO: for signal 5 (74LS156) - The 8910 outputs go through some analog circuitry to make them sound more like - real intruments. + real instruments. #0 Ch. A = "rullante"/"cassa" (drum roll/bass drum) (selected by bits 3&4 of port A) #0 Ch. B = "basso" (bass) #0 Ch. C = straight out through an optional filter @@ -23,6 +23,10 @@ TODO: - some minor color issues (see video) +- testing dips in service mode, they don't match what MAME's UI shows + (i.e. dip 5 in the UI causes dip 8 to change in service mode display). + A dip listing is available online. + Notes: - The protection device at 1A on the ROM board (1B11147) is unidentified on the @@ -96,15 +100,15 @@ uint8_t zaccaria_state::prot1_r(offs_t offset) switch (offset) { case 0: - return 0x50; /* Money Money */ + return 0x50; // Money Money case 4: - return 0x40; /* Jack Rabbit */ + return 0x40; // Jack Rabbit case 6: if (&machine().system() == &GAME_NAME(monymony)) - return 0x70; /* Money Money */ - return 0xa0; /* Jack Rabbit */ + return 0x70; // Money Money + return 0xa0; // Jack Rabbit default: return 0; @@ -116,16 +120,16 @@ uint8_t zaccaria_state::prot2_r(offs_t offset) switch (offset) { case 0: - return ioport("COINS")->read(); /* bits 4 and 5 must be 0 in Jack Rabbit */ + return m_coins->read(); // bits 4 and 5 must be 0 in Jack Rabbit case 2: - return 0x10; /* Jack Rabbit */ + return 0x10; // Jack Rabbit case 4: - return 0x80; /* Money Money */ + return 0x80; // Money Money case 6: - return 0x00; /* Money Money */ + return 0x00; // Money Money default: return 0; @@ -148,11 +152,11 @@ WRITE_LINE_MEMBER(zaccaria_state::nmi_mask_w) void zaccaria_state::main_map(address_map &map) { map(0x0000, 0x5fff).rom(); - map(0x6000, 0x67ff).ram().w(FUNC(zaccaria_state::videoram_w)).share("videoram"); /* 6400-67ff is 4 bits wide */ + map(0x6000, 0x67ff).ram().w(FUNC(zaccaria_state::videoram_w)).share(m_videoram); // 6400-67ff is 4 bits wide map(0x6400, 0x6407).r(FUNC(zaccaria_state::prot1_r)); - map(0x6800, 0x683f).w(FUNC(zaccaria_state::attributes_w)).share("attributesram"); - map(0x6840, 0x685f).ram().share("spriteram"); - map(0x6881, 0x68c0).ram().share("spriteram2"); + map(0x6800, 0x683f).w(FUNC(zaccaria_state::attributes_w)).share(m_attributesram); + map(0x6840, 0x685f).ram().share(m_spriteram[0]); + map(0x6881, 0x68c0).ram().share(m_spriteram[1]); map(0x6c00, 0x6c07).mirror(0x81f8).r(FUNC(zaccaria_state::prot2_r)).w("mainlatch", FUNC(ls259_device::write_d0)); map(0x6e00, 0x6e00).mirror(0x81f8).r(FUNC(zaccaria_state::dsw_r)).w(m_audiopcb, FUNC(zac1b11142_audio_device::hs_w)); map(0x7000, 0x77ff).ram(); @@ -184,7 +188,7 @@ static INPUT_PORTS_START( monymony ) PORT_DIPNAME( 0x40, 0x00, "Cross Hatch Pattern" ) PORT_DIPLOCATION("SW 5I:7") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x40, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW 5I:8") /* random high scores? */ + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW 5I:8") // random high scores? PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) @@ -261,14 +265,14 @@ static INPUT_PORTS_START( monymony ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - /* other bits are outputs */ + // other bits are outputs PORT_START("COINS") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("audiopcb", zac1b11142_audio_device, acs_r) - /* other bits come from a protection device */ + // other bits come from a protection device INPUT_PORTS_END static INPUT_PORTS_START( jackrabt ) @@ -332,8 +336,8 @@ WRITE_LINE_MEMBER(zaccaria_state::vblank_irq) void zaccaria_state::zaccaria(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, XTAL(18'432'000)/6); /* verified on pcb */ + // basic machine hardware + Z80(config, m_maincpu, XTAL(18'432'000)/6); // verified on PCB m_maincpu->set_addrmap(AS_PROGRAM, &zaccaria_state::main_map); // config.set_maximum_quantum(attotime::from_hz(1000000)); @@ -353,9 +357,9 @@ void zaccaria_state::zaccaria(machine_config &config) ppi.in_pc_callback().set_ioport("SYSTEM"); ppi.out_pc_callback().set(FUNC(zaccaria_state::dsw_sel_w)); - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_refresh_hz(60.57); /* verified on pcb */ + screen.set_refresh_hz(60.57); // verified on PCB screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(32*8, 32*8); screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); @@ -364,9 +368,9 @@ void zaccaria_state::zaccaria(machine_config &config) screen.screen_vblank().set(FUNC(zaccaria_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_zaccaria); - PALETTE(config, m_palette, FUNC(zaccaria_state::zaccaria_palette), 32*8 + 32*8, 512); + PALETTE(config, m_palette, FUNC(zaccaria_state::palette), 32*8 + 32*8, 512); - /* sound hardware */ + // sound hardware SPEAKER(config, "speaker").front_center(); ZACCARIA_1B11142(config, "audiopcb").add_route(ALL_OUTPUTS, "speaker", 1.0); } @@ -394,11 +398,11 @@ ROM_START( monymony ) ROM_LOAD( "cpu6.2c", 0x5000, 0x1000, CRC(31da62b1) SHA1(486f07087244f8537510afacb64ddd59eb512a4d) ) ROM_CONTINUE( 0xd000, 0x1000 ) - ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) /* 64k for first 6802 */ - ROM_LOAD( "snd13.2g", 0x8000, 0x2000, CRC(78b01b98) SHA1(2aabed56cdae9463deb513c0c5021f6c8dfd271e) ) + ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) // 64k for first 6802 + ROM_LOAD( "snd13.2g", 0x8000, 0x2000, CRC(78b01b98) SHA1(2aabed56cdae9463deb513c0c5021f6c8dfd271e) ) ROM_LOAD( "snd9.1i", 0xc000, 0x2000, CRC(94e3858b) SHA1(04961f67b95798b530bd83355dec612389f22255) ) - ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) /* 64k for second 6802 */ + ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) // 64k for second 6802 ROM_LOAD( "snd8.1h", 0x2000, 0x1000, CRC(aad76193) SHA1(e08fc184efced392ee902c4cc9daaaf3310cdfe2) ) ROM_CONTINUE( 0x6000, 0x1000 ) ROM_LOAD( "snd7.1g", 0x3000, 0x1000, CRC(1e8ffe3e) SHA1(858ee7abe88d5801237e519cae2b50ae4bf33a58) ) @@ -429,11 +433,11 @@ ROM_START( monymony2 ) ROM_LOAD( "cpu6.2c", 0x5000, 0x1000, CRC(31da62b1) SHA1(486f07087244f8537510afacb64ddd59eb512a4d) ) ROM_CONTINUE( 0xd000, 0x1000 ) - ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) /* 64k for first 6802 */ - ROM_LOAD( "snd13.2g", 0x8000, 0x2000, CRC(78b01b98) SHA1(2aabed56cdae9463deb513c0c5021f6c8dfd271e) ) + ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) // 64k for first 6802 + ROM_LOAD( "snd13.2g", 0x8000, 0x2000, CRC(78b01b98) SHA1(2aabed56cdae9463deb513c0c5021f6c8dfd271e) ) ROM_LOAD( "snd9.1i", 0xc000, 0x2000, CRC(94e3858b) SHA1(04961f67b95798b530bd83355dec612389f22255) ) - ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) /* 64k for second 6802 */ + ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) // 64k for second 6802 ROM_LOAD( "snd8.1h", 0x2000, 0x1000, CRC(aad76193) SHA1(e08fc184efced392ee902c4cc9daaaf3310cdfe2) ) ROM_CONTINUE( 0x6000, 0x1000 ) ROM_LOAD( "snd7.1g", 0x3000, 0x1000, CRC(1e8ffe3e) SHA1(858ee7abe88d5801237e519cae2b50ae4bf33a58) ) @@ -463,12 +467,24 @@ ROM_START( jackrabt ) ROM_LOAD( "cpu-01.4h", 0xb000, 0x1000, CRC(0b9db007) SHA1(836f8cacf2a097fd80d5c045bdc49b3a3174b89e) ) ROM_LOAD( "cpu-01.5h", 0xc000, 0x1000, CRC(785e1a01) SHA1(a748d300be9455cad4f912e01c2279bb8465edfe) ) ROM_LOAD( "cpu-01.6h", 0xd000, 0x1000, CRC(dd5979cf) SHA1(e9afe7002b2258a1c3132bdd951c6e20d473fb6a) ) - - ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) /* 64k for first 6802 */ +/* This set was also found with bigger program ROMs (but for the first which matches) + ROM_LOAD( "cpu-01-2.1b", 0x1000, 0x1000, CRC(1af79299) SHA1(8e68606a31aa7a7940ff90a7059f56ca7db0ac7c) ) + ROM_CONTINUE( 0x9000, 0x1000) + ROM_LOAD( "cpu-01-3.1c", 0x2000, 0x1000, CRC(a02d5bc7) SHA1(1cb0ad29e7895b80053212bdf9aab9efe334326a) ) + ROM_CONTINUE( 0xa000, 0x1000) + ROM_LOAD( "cpu-01-4.1d", 0x3000, 0x1000) CRC(8e7fbbb3) SHA1(3d57ddf6a47d5f28e4fd24002e948287803a2438) ) + ROM_CONTINUE( 0xb000, 0x1000) + ROM_LOAD( "cpu-01-5.2a", 0x4000, 0x1000, CRC(2f3aa2a4) SHA1(4256894f178980abf187bb5424f9d738fcae2623) ) + ROM_CONTINUE( 0xc000, 0x1000) + ROM_LOAD( "cpu-01-6.2c", 0x5000, 0x1000, CRC(c38228c0) SHA1(1ccc720b0d64b16c268a2bcfb8990f3c71b65913) ) + ROM_CONTINUE( 0xd000, 0x1000) +*/ + + ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) // 64k for first 6802 ROM_LOAD( "13snd.2g", 0x8000, 0x2000, CRC(fc05654e) SHA1(ed9c66672fe89c41e320e1d27b53f5efa92dce9c) ) ROM_LOAD( "9snd.1i", 0xc000, 0x2000, CRC(3dab977f) SHA1(3e79c06d2e70b050f01b7ac58be5127ba87904b0) ) - ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) /* 64k for second 6802 */ + ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) // 64k for second 6802 ROM_LOAD( "8snd.1h", 0x2000, 0x1000, CRC(f4507111) SHA1(0513f0831b94aeda84aa4f3b4a7c60dfc5113b2d) ) ROM_CONTINUE( 0x6000, 0x1000 ) ROM_LOAD( "7snd.1g", 0x3000, 0x1000, CRC(c722eff8) SHA1(d8d1c091ab80ea2d6616e4dc030adc9905c0a496) ) @@ -484,8 +500,8 @@ ROM_START( jackrabt ) ROM_LOAD( "jr-ic9f", 0x0200, 0x0200, CRC(085914d1) SHA1(3d6f9318f5a9f08ce89e4184e3efb9881f671fa7) ) ROM_REGION( 0x0400, "plds", 0 ) - ROM_LOAD( "jr-pal16l8.6j", 0x0000, 0x0104, NO_DUMP ) /* PAL is read protected */ - ROM_LOAD( "jr-pal16l8.6k", 0x0200, 0x0104, NO_DUMP ) /* PAL is read protected */ + ROM_LOAD( "jr-pal16l8.6j", 0x0000, 0x0104, NO_DUMP ) // PAL is read protected + ROM_LOAD( "jr-pal16l8.6k", 0x0200, 0x0104, NO_DUMP ) // PAL is read protected ROM_END ROM_START( jackrabt2 ) @@ -503,11 +519,11 @@ ROM_START( jackrabt2 ) ROM_LOAD( "6cpu2.2c", 0x5000, 0x1000, CRC(404496eb) SHA1(44381e27e540fe9d8cacab4c3b1fe9a4f20d26a8) ) ROM_CONTINUE( 0xd000, 0x1000 ) - ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) /* 64k for first 6802 */ + ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) // 64k for first 6802 ROM_LOAD( "13snd.2g", 0x8000, 0x2000, CRC(fc05654e) SHA1(ed9c66672fe89c41e320e1d27b53f5efa92dce9c) ) ROM_LOAD( "9snd.1i", 0xc000, 0x2000, CRC(3dab977f) SHA1(3e79c06d2e70b050f01b7ac58be5127ba87904b0) ) - ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) /* 64k for second 6802 */ + ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) // 64k for second 6802 ROM_LOAD( "8snd.1h", 0x2000, 0x1000, CRC(f4507111) SHA1(0513f0831b94aeda84aa4f3b4a7c60dfc5113b2d) ) ROM_CONTINUE( 0x6000, 0x1000 ) ROM_LOAD( "7snd.1g", 0x3000, 0x1000, CRC(c722eff8) SHA1(d8d1c091ab80ea2d6616e4dc030adc9905c0a496) ) @@ -544,11 +560,11 @@ ROM_START( jackrabts ) ROM_LOAD( "6cpu.2c", 0x5000, 0x1000, CRC(f53d6356) SHA1(9b167edca59cf81a2468368a372bab132f15e2ea) ) ROM_CONTINUE( 0xd000, 0x1000 ) - ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) /* 64k for first 6802 */ + ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 ) // 64k for first 6802 ROM_LOAD( "13snd.2g", 0x8000, 0x2000, CRC(fc05654e) SHA1(ed9c66672fe89c41e320e1d27b53f5efa92dce9c) ) ROM_LOAD( "9snd.1i", 0xc000, 0x2000, CRC(3dab977f) SHA1(3e79c06d2e70b050f01b7ac58be5127ba87904b0) ) - ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) /* 64k for second 6802 */ + ROM_REGION( 0x10000, "audiopcb:audiocpu", 0 ) // 64k for second 6802 ROM_LOAD( "8snd.1h", 0x2000, 0x1000, CRC(f4507111) SHA1(0513f0831b94aeda84aa4f3b4a7c60dfc5113b2d) ) ROM_CONTINUE( 0x6000, 0x1000 ) ROM_LOAD( "7snd.1g", 0x3000, 0x1000, CRC(c722eff8) SHA1(d8d1c091ab80ea2d6616e4dc030adc9905c0a496) ) diff --git a/src/mame/includes/zaccaria.h b/src/mame/includes/zaccaria.h index 471190d76dc..a82491ad767 100644 --- a/src/mame/includes/zaccaria.h +++ b/src/mame/includes/zaccaria.h @@ -20,9 +20,9 @@ public: , m_audiopcb(*this, "audiopcb") , m_videoram(*this, "videoram") , m_attributesram(*this, "attributesram") - , m_spriteram(*this, "spriteram") - , m_spriteram2(*this, "spriteram2") + , m_spriteram(*this, "spriteram%u", 1U) , m_dsw_port(*this, "DSW.%u", 0) + , m_coins(*this, "COINS") { } void zaccaria(machine_config &config); @@ -44,10 +44,10 @@ private: DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w); void dsw_sel_w(uint8_t data); TILE_GET_INFO_MEMBER(get_tile_info); - void zaccaria_palette(palette_device &palette) const; + void palette(palette_device &palette) const; uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(vblank_irq); - void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,uint8_t *spriteram,int color,int section); + void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t *spriteram, int color, int section); void main_map(address_map &map); @@ -58,12 +58,12 @@ private: required_shared_ptr<uint8_t> m_videoram; required_shared_ptr<uint8_t> m_attributesram; - required_shared_ptr<uint8_t> m_spriteram; - required_shared_ptr<uint8_t> m_spriteram2; + required_shared_ptr_array<uint8_t, 2> m_spriteram; required_ioport_array<3> m_dsw_port; + required_ioport m_coins; - int m_dsw_sel; + uint8_t m_dsw_sel; tilemap_t *m_bg_tilemap; uint8_t m_nmi_mask; }; diff --git a/src/mame/video/zaccaria.cpp b/src/mame/video/zaccaria.cpp index cb89b0d1699..1712b7dc895 100644 --- a/src/mame/video/zaccaria.cpp +++ b/src/mame/video/zaccaria.cpp @@ -2,7 +2,7 @@ // copyright-holders:Nicola Salmoria /*************************************************************************** - video.c + video\zaccaria.cpp Functions to emulate the video hardware of the machine. @@ -35,7 +35,7 @@ Here's the hookup from the proms (82s131) to the r-g-b-outputs ***************************************************************************/ -void zaccaria_state::zaccaria_palette(palette_device &palette) const +void zaccaria_state::palette(palette_device &palette) const { uint8_t const *const color_prom = memregion("proms")->base(); static constexpr int resistances_rg[] = { 1200, 1000, 820 }; @@ -152,12 +152,8 @@ void zaccaria_state::attributes_w(offs_t offset, uint8_t data) if (offset & 1) { if (m_attributesram[offset] != data) - { - int i; - - for (i = offset / 2;i < 0x400;i += 32) + for (int i = offset / 2; i < 0x400; i += 32) m_bg_tilemap->mark_tile_dirty(i); - } } else m_bg_tilemap->set_scrolly(offset / 2,data); @@ -198,9 +194,9 @@ WRITE_LINE_MEMBER(zaccaria_state::flip_screen_y_w) offsets 1 and 2 are swapped if accessed from spriteram2 */ -void zaccaria_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,uint8_t *spriteram,int color,int section) +void zaccaria_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t *spriteram, int color, int section) { - int offs,o1 = 1,o2 = 2; + int o1 = 1,o2 = 2; if (section) { @@ -208,7 +204,7 @@ void zaccaria_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect o2 = 1; } - for (offs = 0;offs < 0x20;offs += 4) + for (int offs = 0;offs < 0x20;offs += 4) { int sx = spriteram[offs + 3] + 1; int sy = 242 - spriteram[offs]; @@ -228,10 +224,10 @@ void zaccaria_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect flipy = !flipy; } - m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, + m_gfxdecode->gfx(1)->transpen(bitmap, cliprect, (spriteram[offs + o1] & 0x3f) + (spriteram[offs + o2] & 0xc0), ((spriteram[offs + o2] & 0x07) << 2) | color, - flipx,flipy,sx,sy,0); + flipx, flipy, sx, sy, 0); } } @@ -241,9 +237,9 @@ uint32_t zaccaria_state::screen_update(screen_device &screen, bitmap_ind16 &bitm // 3 layers of sprites, each with their own palette and priorities // Not perfect yet, does spriteram(1) layer have a priority bit somewhere? - draw_sprites(bitmap,cliprect,m_spriteram2,2,1); - draw_sprites(bitmap,cliprect,m_spriteram,1,0); - draw_sprites(bitmap,cliprect,m_spriteram2+0x20,0,1); + draw_sprites(bitmap, cliprect, m_spriteram[1], 2, 1); + draw_sprites(bitmap, cliprect, m_spriteram[0], 1, 0); + draw_sprites(bitmap, cliprect, m_spriteram[1] + 0x20, 0, 1); return 0; } |