diff options
Diffstat (limited to 'src/mame/drivers/cps1bl_5205.cpp')
-rw-r--r-- | src/mame/drivers/cps1bl_5205.cpp | 264 |
1 files changed, 132 insertions, 132 deletions
diff --git a/src/mame/drivers/cps1bl_5205.cpp b/src/mame/drivers/cps1bl_5205.cpp index 95e840b2c81..0923dbb264c 100644 --- a/src/mame/drivers/cps1bl_5205.cpp +++ b/src/mame/drivers/cps1bl_5205.cpp @@ -2,24 +2,24 @@ // copyright-holders:David Haywood /* - CPS1 single board bootlegs (thought to be produced by "Playmark") - - sound hardware: Z80, YM2151, 2x oki MSM5205 (instead of oki M6295) - - Games known to use this h/w: - Captain Commando 911014 ETC - Knights of the Round 911127 ETC - Street Fighter II: The World Warrior 910204 ETC - Street Fighter II': Champion Edition 920313 ETC * this might be hacked WW (uses WW portraits on character select screen) - Street Fighter II': Magic Delta Turbo 920313 ETC - The King of Dragons ? (No dump) - - Generally the sound quality is quite poor compared to official Capcom hardware (consequence of M6295->2xM5205 conversion). - Most noticable is missing percussion backing of music tracks and no fade in/out effect. - Often the 2x M5205 are clocked with a 400KHz xtal (should really be 384KHz) so pitch of samples is slightly out as well. - The sf2 sets seem to have quite a few missing samples? - - *** see fcrash.cpp for game status *** + CPS1 single board bootlegs (thought to be produced by "Playmark") + + sound hardware: Z80, YM2151, 2x oki MSM5205 (instead of oki M6295) + + Games known to use this h/w: + Captain Commando 911014 ETC + Knights of the Round 911127 ETC + Street Fighter II: The World Warrior 910204 ETC + Street Fighter II': Champion Edition 920313 ETC * this might be hacked WW (uses WW portraits on character select screen) + Street Fighter II': Magic Delta Turbo 920313 ETC + The King of Dragons ? (No dump) + + Generally the sound quality is quite poor compared to official Capcom hardware (consequence of M6295->2xM5205 conversion). + Most noticable is missing percussion backing of music tracks and no fade in/out effect. + Often the 2x M5205 are clocked with a 400KHz xtal (should really be 384KHz) so pitch of samples is slightly out as well. + The sf2 sets seem to have quite a few missing samples? + + *** see fcrash.cpp for game status *** */ #include "emu.h" @@ -43,23 +43,23 @@ public: : fcrash_state(mconfig, type, tag) , m_msm_mux(*this, "msm_mux%u", 1) { } - + void captcommb2(machine_config &config); void sf2b(machine_config &config); void sf2mdt(machine_config &config); - + void init_captcommb2(); void init_knightsb(); void init_sf2b(); void init_sf2mdt(); void init_sf2mdta(); void init_sf2mdtb(); - + private: DECLARE_MACHINE_START(captcommb2); DECLARE_MACHINE_RESET(captcommb2); DECLARE_MACHINE_START(sf2mdt); - + DECLARE_WRITE16_MEMBER(captcommb2_layer_w); DECLARE_WRITE16_MEMBER(captcommb2_soundlatch_w); DECLARE_READ8_MEMBER(captcommb2_soundlatch_r); @@ -70,14 +70,14 @@ private: DECLARE_WRITE16_MEMBER(sf2mdt_layer_w); DECLARE_WRITE16_MEMBER(sf2mdt_soundlatch_w); DECLARE_WRITE16_MEMBER(sf2mdta_layer_w); - + void captcommb2_map(address_map &map); void sf2b_map(address_map &map); void sf2mdt_map(address_map &map); void captcommb2_z80map(address_map &map); - + bool m_captcommb2_mux_toggle; - + optional_device_array<ls157_device, 2> m_msm_mux; }; @@ -87,7 +87,7 @@ public: captcommb2_state(const machine_config &mconfig, device_type type, const char *tag) : cps1bl_5205_state(mconfig, type, tag) { } - + private: void bootleg_render_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override; }; @@ -346,13 +346,13 @@ void cps1bl_5205_state::captcommb2(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &cps1bl_5205_state::captcommb2_map); m_maincpu->set_vblank_int("screen", FUNC(cps1bl_5205_state::cps1_interrupt)); m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &cps1bl_5205_state::cpu_space_map); - + Z80(config, m_audiocpu, 30000000 / 8); // 3.75MHz measured on pcb m_audiocpu->set_addrmap(AS_PROGRAM, &cps1bl_5205_state::captcommb2_z80map); - + MCFG_MACHINE_START_OVERRIDE(cps1bl_5205_state, captcommb2) MCFG_MACHINE_RESET_OVERRIDE(cps1bl_5205_state, captcommb2) - + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_raw(CPS_PIXEL_CLOCK, CPS_HTOTAL, CPS_HBEND, CPS_HBSTART, CPS_VTOTAL, CPS_VBEND, CPS_VBSTART); m_screen->set_screen_update(FUNC(cps1bl_5205_state::screen_update_fcrash)); @@ -364,18 +364,18 @@ void cps1bl_5205_state::captcommb2(machine_config &config) SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); - + ym2151_device &ym2151(YM2151(config, "2151", 30000000 / 8)); // 3.75MHz measured on pcb // IRQ pin not used ym2151.add_route(0, "mono", 0.35); ym2151.add_route(1, "mono", 0.35); - + LS157(config, m_msm_mux[0], 0); m_msm_mux[0]->out_callback().set("msm1", FUNC(msm5205_device::data_w)); LS157(config, m_msm_mux[1], 0); m_msm_mux[1]->out_callback().set("msm2", FUNC(msm5205_device::data_w)); - + MSM5205(config, m_msm_1, 400000); // 400kHz measured on pcb m_msm_1->vck_callback().set(FUNC(cps1bl_5205_state::captcommb2_mux_select_w)); m_msm_1->vck_callback().append(m_msm_2, FUNC(msm5205_device::vclk_w)); @@ -428,7 +428,7 @@ void cps1bl_5205_state::sf2mdt(machine_config &config) LS157(config, m_msm_mux[1], 0); m_msm_mux[1]->out_callback().set("msm2", FUNC(msm5205_device::data_w)); - + MSM5205(config, m_msm_1, 400000); // 400kHz ? m_msm_1->vck_callback().set(FUNC(cps1bl_5205_state::captcommb2_mux_select_w)); m_msm_1->vck_callback().append(m_msm_2, FUNC(msm5205_device::vclk_w)); @@ -505,7 +505,7 @@ void cps1bl_5205_state::sf2mdt_map(address_map &map) * 138 pin 10 E000-E3FF W latch bank and 5202 reset lines * 138 pin 9 E400-E7FF W master 5205 * 138 pin 7 EC00-EFFF W ? pin not used - * + * * gal pin 15 0000-BFFF R rom */ void cps1bl_5205_state::captcommb2_z80map(address_map &map) @@ -536,7 +536,7 @@ MACHINE_START_MEMBER(cps1bl_5205_state, captcommb2) //m_sprite_base = 0x1000; m_sprite_list_end_marker = 0x8000; m_sprite_x_offset = 0; - + save_item(NAME(m_captcommb2_mux_toggle)); } @@ -574,9 +574,9 @@ void cps1bl_5205_state::init_captcommb2() uint8_t x = gfx[i]; gfx[i] = bitswap(x, 7, 6 ,5, 2, 3, 4, 1, 0); } - + init_mtwinsb(); - + // patch - fix invisible test screen at start uint8_t *rom = memregion("maincpu")->base(); rom[0x65c] = 0x68; @@ -606,11 +606,11 @@ void cps1bl_5205_state::init_sf2b() void cps1bl_5205_state::init_sf2mdt() { m_maincpu->space(AS_PROGRAM).install_write_handler(0x708100, 0x7081ff, write16_delegate(*this, FUNC(cps1bl_5205_state::sf2mdt_layer_w))); - + /* extra work ram */ m_bootleg_work_ram = std::make_unique<uint16_t[]>(0x8000); m_maincpu->space(AS_PROGRAM).install_ram(0xfc0000, 0xfcffff, m_bootleg_work_ram.get()); - + init_sf2mdtb(); } @@ -636,7 +636,7 @@ void cps1bl_5205_state::init_sf2mdtb() rom[i + 3] = rom[i + 6]; rom[i + 6] = tmp; } - + init_sf2b(); } @@ -674,7 +674,7 @@ void cps1bl_5205_state::init_sf2mdtb() static INPUT_PORTS_START( captcommb2 ) PORT_INCLUDE(captcomm) - + PORT_MODIFY("IN3") PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -812,7 +812,7 @@ static INPUT_PORTS_START( sf2mdtb ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) // debug mode? depending on other DSW setting get different "game" mode, autoplay, bonus round, etc... PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW(A):8" ) - + PORT_START("DSWB") CPS1_DIFFICULTY_1("SW(B)") PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW(B):4" ) @@ -853,7 +853,7 @@ void captcommb2_state::bootleg_render_sprites( screen_device &screen, bitmap_ind bool flipx, flipy; uint16_t *sprite_ram = m_bootleg_sprite_ram.get(); int base = (sprite_ram[0] ? 0x3000 : 0x1000) / 2; // writes sprite buffer flip here instead of obj_base register - + // end of sprite table marker is 0x8000 // 1st sprite always 0x100e/0x300e // sprites are: [ypos][tile#][color][xpos] @@ -881,11 +881,11 @@ void captcommb2_state::bootleg_render_sprites( screen_device &screen, bitmap_ind else m_gfxdecode->gfx(2)->prio_transpen(bitmap, cliprect, tileno, colour, flipx, flipy, xpos, ypos, screen.priority(), 2, 15); } - + /* tileno note: - sets the unused msb for certain tiles eg. middle parts of rocket launcher weapon, - this means the tile is out of range and therefore transparent, - most likely just a bug and the real h/w ignores the unused bit so the effect is not seen. + sets the unused msb for certain tiles eg. middle parts of rocket launcher weapon, + this means the tile is out of range and therefore transparent, + most likely just a bug and the real h/w ignores the unused bit so the effect is not seen. */ } @@ -893,22 +893,22 @@ void captcommb2_state::bootleg_render_sprites( screen_device &screen, bitmap_ind // ************************************************************************* CAPTCOMMB2 /* - Captain Commando: - - h/w issues compared to original game (captcomm) - ----------------------------------------------- - these are present on the real board so are not emulation issues: - - * End sequence row scroll effect doesn't work. - * Capcom copyright text missing on title screen, deliberately shifted down out of visible area by bootleggers. - * Capcom logo missing from end sequence, as above. - * Sprite flickering effects eg. when character has invincibility, look a little different to original. - * Certain static sprites wobble vertically just a pixel or two eg. manhole covers, breakable oil drums etc. - - these are present on the real board but are unintentionally "fixed" in emulation: - - * All '0' characters are missing in test menu eg. sound test, input test etc. - * Wrong tile displayed when character select count-down timer reaches zero (superscript '1' with white bar underneath) + Captain Commando: + + h/w issues compared to original game (captcomm) + ----------------------------------------------- + these are present on the real board so are not emulation issues: + + * End sequence row scroll effect doesn't work. + * Capcom copyright text missing on title screen, deliberately shifted down out of visible area by bootleggers. + * Capcom logo missing from end sequence, as above. + * Sprite flickering effects eg. when character has invincibility, look a little different to original. + * Certain static sprites wobble vertically just a pixel or two eg. manhole covers, breakable oil drums etc. + + these are present on the real board but are unintentionally "fixed" in emulation: + + * All '0' characters are missing in test menu eg. sound test, input test etc. + * Wrong tile displayed when character select count-down timer reaches zero (superscript '1' with white bar underneath) */ ROM_START( captcommb2 ) ROM_REGION( CODE_SIZE, "maincpu", 0 ) // = captcommr1 + additional code mapped on top @@ -922,7 +922,7 @@ ROM_START( captcommb2 ) ROM_CONTINUE( 0x000001, 0x04000) ROM_CONTINUE( 0x018001, 0x04000) ROM_IGNORE( 0x18000) - + ROM_REGION( 0x400000, "gfx", 0 ) // some data bits are swapped, see init() ROM_LOAD64_BYTE( "bnh-01.bin", 0x000000, 0x40000, CRC(ffbc3bdd) SHA1(fcee1befd8279d41a81689394a562e2344191e2a) ) ROM_CONTINUE( 0x000004, 0x40000) @@ -940,11 +940,11 @@ ROM_START( captcommb2 ) ROM_CONTINUE( 0x200006, 0x40000) ROM_LOAD64_BYTE( "bnh-08.bin", 0x200003, 0x40000, CRC(327b8da8) SHA1(4bcc6fd637d382ce35b9387568c53d89a55e8ed2) ) ROM_CONTINUE( 0x200007, 0x40000) - + ROM_REGION( 0x50000, "audiocpu", 0 ) ROM_LOAD( "1.bin", 0x00000, 0x40000, CRC(aed2f4bd) SHA1(3bd567dc350bf6ac3a349548790ad49eb5bd8307) ) ROM_RELOAD( 0x10000, 0x40000 ) - + /* pld devices: #1 IC169 gal20v8 secured #2 IC7 gal16v8 secured, bruteforce ok @@ -962,39 +962,39 @@ ROM_END // ************************************************************************* KNIGHTSB, KNIGHTSB3 /* - CPU - 1x MC68000P12 ic65 main - 1x Z0840006PSC ic1 sound - 1x YM2151 ic29 sound - 1x YM3012 ic30 sound - 2x LM324 ic15,ic31 sound - 2x M5205 ic184,ic185 sound - 1x TDA2003 ic14 sound - 1x oscillator 24.000000MHz (close to main) - 1x oscillator 29.821000MHz (close to sound) - - ROMs - 5x M27C2001 1,2,3,4,5 dumped - 4x mask ROM KA,KB,KC,KD not dumped - - RAMs - 4x KM62256ALP ic112,ic113,ic168,ic170 - 1x SYC6116L ic24 - 1x MCM2018AN ic7,ic8,ic51,ic56,ic70,ic71,ic77,ic78 - - PLDs - 1x TPC1020AFN ic116 read protected - 3x GAL20V8A ic120,ic121,ic169 read protected - 3x GAL16V8A ic7,ic72,ic80 read protected - - Note - 1x JAMMA edge connector - 2x 10 legs connector - 1x trimmer (volume) - 3x 8x2 switches DIP - - FIXME - graphics ROMs are wrong, copied from the other version - ROMs missing are KA.IC91 KB.IC92 KC.IC93 KD.IC94 + CPU + 1x MC68000P12 ic65 main + 1x Z0840006PSC ic1 sound + 1x YM2151 ic29 sound + 1x YM3012 ic30 sound + 2x LM324 ic15,ic31 sound + 2x M5205 ic184,ic185 sound + 1x TDA2003 ic14 sound + 1x oscillator 24.000000MHz (close to main) + 1x oscillator 29.821000MHz (close to sound) + + ROMs + 5x M27C2001 1,2,3,4,5 dumped + 4x mask ROM KA,KB,KC,KD not dumped + + RAMs + 4x KM62256ALP ic112,ic113,ic168,ic170 + 1x SYC6116L ic24 + 1x MCM2018AN ic7,ic8,ic51,ic56,ic70,ic71,ic77,ic78 + + PLDs + 1x TPC1020AFN ic116 read protected + 3x GAL20V8A ic120,ic121,ic169 read protected + 3x GAL16V8A ic7,ic72,ic80 read protected + + Note + 1x JAMMA edge connector + 2x 10 legs connector + 1x trimmer (volume) + 3x 8x2 switches DIP + + FIXME - graphics ROMs are wrong, copied from the other version + ROMs missing are KA.IC91 KB.IC92 KC.IC93 KD.IC94 */ ROM_START( knightsb ) ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ @@ -1019,17 +1019,17 @@ ROM_START( knightsb ) ROM_END /* - Knights of the Round - pcb marking: ORD 92032 - Very similar to knightsb set: - maincpu roms are just 1 byte different, vector 1 (stack pointer init) is ff80d6 instead of ff81d6 - knightsb gfx roms are 4x 1MB (but not dumped), these are 8x 512KB (suspect data is same) - Some sound samples are very quiet on real pcb - Confirmed clocks (measured) are same as captcommb2: - xtals: 30MHz, 24MHz, 400KHz - 68k = 12MHz (P10 model, overclocked) - z80/ym = 3.75MHz - 5202 = 400KHz + Knights of the Round + pcb marking: ORD 92032 + Very similar to knightsb set: + maincpu roms are just 1 byte different, vector 1 (stack pointer init) is ff80d6 instead of ff81d6 + knightsb gfx roms are 4x 1MB (but not dumped), these are 8x 512KB (suspect data is same) + Some sound samples are very quiet on real pcb + Confirmed clocks (measured) are same as captcommb2: + xtals: 30MHz, 24MHz, 400KHz + 68k = 12MHz (P10 model, overclocked) + z80/ym = 3.75MHz + 5202 = 400KHz */ ROM_START( knightsb3 ) ROM_REGION( CODE_SIZE, "maincpu", 0 ) @@ -1132,28 +1132,28 @@ ROM_END // ************************************************************************* SF2MDT, SF2MDTA, SF2MDTB /* - CPU - 1x MC68000P12 (main) - 1x TPC1020AFN-084C (main) - 1x Z0840006PSC-Z80CPU (sound) - 1x YM2151 (sound) - 1x YM3012 (sound) - 2x M5205 (sound) - 2x LM324N (sound) - 1x TDA2003 (sound) - 1x oscillator 24.000000MHz - 1x oscillator 30.000MHz - - ROMs - 14x AM27C040 (1,3,6,7,8,9,10,11,12,13,14,15,16,17) - 3x TMS27C010A (2,4,5) - 3x PAL 16S20 (ic7,ic72, ic80) (read protected, not dumped) - 3x GAL20V8A (ic120, ic121, ic169) (read protected, not dumped) - - Note - 1x JAMMA edge connector - 1x trimmer (volume) - 3x 8x2 switches dip + CPU + 1x MC68000P12 (main) + 1x TPC1020AFN-084C (main) + 1x Z0840006PSC-Z80CPU (sound) + 1x YM2151 (sound) + 1x YM3012 (sound) + 2x M5205 (sound) + 2x LM324N (sound) + 1x TDA2003 (sound) + 1x oscillator 24.000000MHz + 1x oscillator 30.000MHz + + ROMs + 14x AM27C040 (1,3,6,7,8,9,10,11,12,13,14,15,16,17) + 3x TMS27C010A (2,4,5) + 3x PAL 16S20 (ic7,ic72, ic80) (read protected, not dumped) + 3x GAL20V8A (ic120, ic121, ic169) (read protected, not dumped) + + Note + 1x JAMMA edge connector + 1x trimmer (volume) + 3x 8x2 switches dip */ ROM_START( sf2mdt ) ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ |