Previous 199869 Revisions Next

r36306 Saturday 7th March, 2015 at 17:28:05 UTC by Luca Elia
Promoted Brick Zone v1.1 to working [Luca Elia]
[src/mame/drivers]suna8.c
[src/mame/includes]suna8.h

trunk/src/mame/drivers/suna8.c
r244817r244818
2626- hardhea2: in test mode press P1&P2 button 2 to see a picture of each level
2727- Rough Ranger default dipswitch settings are based on the settings listed in
2828  the Sharp Image licensed Rough Ranger manaul / NOTICE sheet dated 8-5-88
29- starfigh video: http://youtu.be/SIwV7wjvnHM -> missing starfield effect!
30- brickzn  video: http://youtu.be/yfU1C7A3iZI (recorded from v6.0, Joystick version)
2931
3032***************************************************************************/
3133
r244817r244818
197199   m_decrypt[0x256c] = 0x00; // HALT -> NOP
198200}
199201
200
201202DRIVER_INIT_MEMBER(suna8_state,brickzn11)
202203{
203   UINT8   *RAM    =   memregion("maincpu")->base();
204   // No encryption
204205   UINT8   *decrypt =  memregion("maincpu")->base();
205   int i;
206206
207   for (i = 0; i < 0x8000; i++)
208   {
209      {
210         decrypt[i] = RAM[i];
211      }
212   }
213
214
215
216207   // Data banks: 00-0f normal data decryption, 10-1f alternate data decryption:
217208   membank("bank1")->configure_entries(0, 16*2, memregion("maincpu")->base() + 0x10000, 0x4000);
218209   // Opcode banks: 00-1f normal opcode decryption:
r244817r244818
674665}
675666
676667/*
677  C0A0:  7654 321-
678         ---- ---0   Palette RAM Bank
668 (C060 in newer sets)
669  C040:  7654 32--   Protection (e.g. select output of multi_w, newer sets only)
670         ---- --1-   Sprite RAM Bank
671         ---- ---0   Flip Screen
672*/
673WRITE8_MEMBER(suna8_state::brickzn_sprbank_w)
674{
675   m_protection_val = data;
679676
677   flip_screen_set(data & 0x01);
678   m_spritebank = (data >> 1) & 1;
680679
681  C0A0:  Sound Latch (optionally scrambled)
680   logerror("CPU #0 - PC %04X: protection_val = %02X\n",space.device().safe_pc(),data);
681//  if (data & ~0x03)   logerror("CPU #0 - PC %04X: unknown spritebank bits: %02X\n",space.device().safe_pc(),data);
682}
682683
684/*
685 (C040 in newer sets)
686  C060:  7654 ----
687         ---- 3210   ROM Bank
688*/
689WRITE8_MEMBER(suna8_state::brickzn_rombank_w)
690{
691   int bank = data & 0x0f;
683692
684  C0A0:  7654 3---
693   if (data & ~0x0f)   logerror("CPU #0 - PC %04X: unknown rom bank bits: %02X\n",space.device().safe_pc(),data);
694
695   membank("bank1")->set_entry(bank + (membank("bank1")->entry() & 0x10));
696
697   m_rombank = data;
698}
699
700/*
701 (C0A0 in newer sets)
702  C080:  7654 3---
685703         ---- -2--   Coin Counter
686704         ---- --1-   Start 2 Led
687705         ---- ---0   Start 1 Led
688706*/
707WRITE8_MEMBER(suna8_state::brickzn_leds_w)
708{
709   set_led_status(machine(), 0, data & 0x01);
710   set_led_status(machine(), 1, data & 0x02);
711   coin_counter_w(machine(), 0, data & 0x04);
712
713   logerror("CPU #0 - PC %04X: leds = %02X\n",space.device().safe_pc(),data);
714   if (data & ~0x07)   logerror("CPU #0 - PC %04X: unknown leds bits: %02X\n",space.device().safe_pc(),data);
715}
716
717/*
718  C0A0:  7654 321-
719         ---- ---0   Palette RAM Bank
720*/
721WRITE8_MEMBER(suna8_state::brickzn_palbank_w)
722{
723   m_palettebank = data & 0x01;
724
725   logerror("CPU #0 - PC %04X: palettebank = %02X\n",space.device().safe_pc(),data);
726   if (data & ~0x01)   logerror("CPU #0 - PC %04X: unknown palettebank bits: %02X\n",space.device().safe_pc(),data);
727}
728
729static ADDRESS_MAP_START( brickzn11_map, AS_PROGRAM, 8, suna8_state )
730   AM_RANGE(0x0000, 0x7fff) AM_ROM                             // ROM
731   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")                // Banked ROM
732
733   AM_RANGE(0xc000, 0xc000) AM_WRITE(soundlatch_byte_w     )   // To Sound CPU
734   AM_RANGE(0xc040, 0xc040) AM_WRITE(brickzn_sprbank_w     )   // Sprite RAM Bank + Flip Screen + Protection
735   AM_RANGE(0xc060, 0xc060) AM_WRITE(brickzn_rombank_w     )   // ROM Bank
736   AM_RANGE(0xc080, 0xc080) AM_WRITE(brickzn_leds_w        )   // Leds
737   AM_RANGE(0xc0a0, 0xc0a0) AM_WRITE(brickzn_palbank_w     )   // Palette RAM Bank
738//   AM_RANGE(0xc0c0, 0xc0c0) AM_WRITE(brickzn_prot2_w       )   // Protection 2
739
740   AM_RANGE(0xc100, 0xc100) AM_READ_PORT("P1")                 // P1 (Buttons)
741   AM_RANGE(0xc101, 0xc101) AM_READ_PORT("P2")                 // P2 (Buttons)
742   AM_RANGE(0xc102, 0xc102) AM_READ_PORT("DSW1")               // DSW 1
743   AM_RANGE(0xc103, 0xc103) AM_READ_PORT("DSW2")               // DSW 2
744   AM_RANGE(0xc108, 0xc108) AM_READ_PORT("SPIN1")              // P1 (Spinner)
745   AM_RANGE(0xc10c, 0xc10c) AM_READ_PORT("SPIN2")              // P2 (Spinner)
746
747   AM_RANGE(0xc140, 0xc140) AM_READ(brickzn_cheats_r)          // Cheats / Debugging Inputs
748
749   AM_RANGE(0xc600, 0xc7ff) AM_READWRITE(banked_paletteram_r, brickzn_banked_paletteram_w) AM_SHARE("paletteram")      // Palette (Banked)
750   AM_RANGE(0xc800, 0xdfff) AM_RAM AM_SHARE("wram")                                            // Work RAM
751   AM_RANGE(0xe000, 0xffff) AM_READWRITE(suna8_banked_spriteram_r, suna8_banked_spriteram_w)   // Sprites (Banked)
752ADDRESS_MAP_END
753
754/*
755  (newer sets only)
756
757  C0A0:  Palette RAM Bank
758
759  C0A0:  Sound Latch (optionally scrambled)
760
761  C0A0:  Leds
762*/
689763WRITE8_MEMBER(suna8_state::brickzn_multi_w)
690764{
691765   int protselect = m_protection_val & 0xfc;
692766
693767   if ((protselect == 0x88) || (protselect == 0x8c))
694768   {
695      m_palettebank = data & 0x01;
696
697      logerror("CPU #0 - PC %04X: palettebank = %02X\n",space.device().safe_pc(),data);
698      if (data & ~0x01)   logerror("CPU #0 - PC %04X: unknown palettebank bits: %02X\n",space.device().safe_pc(),data);
769      brickzn_palbank_w(space, offset, data, mem_mask);
699770   }
700   else if ((m_protection_val & 0xfc) == 0x90)
771   else if (protselect == 0x90)
701772   {
702773      /*
703774         0d   brick hit      NO!      25?
r244817r244818
716787   }
717788   else if (protselect == 0x04)
718789   {
719      set_led_status(machine(), 0, data & 0x01);
720      set_led_status(machine(), 1, data & 0x02);
721      coin_counter_w(machine(), 0, data & 0x04);
722
723      logerror("CPU #0 - PC %04X: leds = %02X\n",space.device().safe_pc(),data);
724      if (data & ~0x07)   logerror("CPU #0 - PC %04X: unknown leds bits: %02X\n",space.device().safe_pc(),data);
790      brickzn_leds_w(space, offset, data, mem_mask);
725791   }
726792   else if (protselect == 0x80)
727793   {
r244817r244818
752818         address_space &space = m_maincpu->space(AS_PROGRAM);
753819         space.set_decrypted_region(0x0000, 0x7fff, memregion("maincpu")->base());
754820      }
755
756
757821   }
758
759822}
760823
761824/*
762  C060:  7654 32--   Protection (e.g. select output of multi_w)
763         ---- --1-   Sprite RAM Bank
764         ---- ---0   Flip Screen
765*/
766WRITE8_MEMBER(suna8_state::brickzn_prot_w)
767{
768   m_protection_val = data;
769
770   flip_screen_set(data & 0x01);
771   m_spritebank = (data >> 1) & 1;
772
773   logerror("CPU #0 - PC %04X: protection_val = %02X\n",space.device().safe_pc(),data);
774//  if (data & ~0x03)   logerror("CPU #0 - PC %04X: unknown spritebank bits: %02X\n",space.device().safe_pc(),data);
775}
776
777/*
825  (newer sets only)
778826  C0C0: two protection values written in rapid succession
779827*/
780828WRITE8_MEMBER(suna8_state::brickzn_prot2_w)
r244817r244818
796844   logerror("CPU #0 - PC %04X: unknown = %02X\n",space.device().safe_pc(),data);
797845}
798846
799/*
800  C040:  7654 ----
801         ---- 3210   ROM Bank
802*/
803WRITE8_MEMBER(suna8_state::brickzn_rombank_w)
804{
805   int bank = data & 0x0f;
806
807   if (data & ~0x0f)   logerror("CPU #0 - PC %04X: unknown rom bank bits: %02X\n",space.device().safe_pc(),data);
808
809   membank("bank1")->set_entry(bank + (membank("bank1")->entry() & 0x10));
810
811   m_rombank = data;
812}
813
814// Disable palette RAM writes, see code at 4990:
847// (newer sets only) Disable palette RAM writes, see code at 4990:
815848WRITE8_MEMBER(suna8_state::brickzn_enab_palram_w)
816849{
817850   m_paletteram_enab = 1;
r244817r244818
828861   // c000 writes before reading buttons
829862   // c010 writes?
830863   AM_RANGE(0xc040, 0xc040) AM_WRITE(brickzn_rombank_w     )   // ROM Bank
831   AM_RANGE(0xc060, 0xc060) AM_WRITE(brickzn_prot_w        )   // Sprite RAM Bank + Flip Screen + Protection
864   AM_RANGE(0xc060, 0xc060) AM_WRITE(brickzn_sprbank_w     )   // Sprite RAM Bank + Flip Screen + Protection
832865   // c080 writes?
833866   // c090 writes?
834867   AM_RANGE(0xc0a0, 0xc0a0) AM_WRITE(brickzn_multi_w       )   // Palette RAM Bank / Sound Latch / ...
r244817r244818
14621495   PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_COIN2          )
14631496
14641497   PORT_START("DSW1") // DSW 1 - $c102
1465   PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) )      PORT_DIPLOCATION("SW1:1,2,3")
1498   PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) )      PORT_DIPLOCATION("SW-A:1,2,3")
14661499   PORT_DIPSETTING(    0x00, DEF_STR( 5C_1C ) )
14671500   PORT_DIPSETTING(    0x01, DEF_STR( 4C_1C ) )
14681501   PORT_DIPSETTING(    0x02, DEF_STR( 3C_1C ) )
r244817r244818
14711504   PORT_DIPSETTING(    0x06, DEF_STR( 1C_2C ) )
14721505   PORT_DIPSETTING(    0x05, DEF_STR( 1C_3C ) )
14731506   PORT_DIPSETTING(    0x04, DEF_STR( 1C_4C ) )
1474   PORT_DIPNAME( 0x38, 0x18, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:4,5,6")
1507   PORT_DIPNAME( 0x38, 0x18, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW-A:4,5,6")
14751508   PORT_DIPSETTING(    0x38, DEF_STR( Easiest ) )
14761509   PORT_DIPSETTING(    0x30, DEF_STR( Very_Easy) )
14771510   PORT_DIPSETTING(    0x28, DEF_STR( Easy ) )
r244817r244818
14801513   PORT_DIPSETTING(    0x10, DEF_STR( Harder ) )
14811514   PORT_DIPSETTING(    0x08, DEF_STR( Very_Hard ) )
14821515   PORT_DIPSETTING(    0x00, DEF_STR( Hardest ) )
1483   PORT_SERVICE_DIPLOC(  0x40, IP_ACTIVE_LOW, "SW1:7" ) PORT_NAME( "Service / Invulnerability" )
1484   PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:8")
1516   PORT_SERVICE_DIPLOC(  0x40, IP_ACTIVE_LOW, "SW-A:7" ) PORT_NAME( "Service / Invulnerability" )
1517   PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW-A:8")
14851518   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
14861519   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
14871520
14881521   PORT_START("DSW2") // DSW 2 - $c103
1489   PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) )  PORT_DIPLOCATION("SW2:1")
1522   PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) )  PORT_DIPLOCATION("SW-B:1")
14901523   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
14911524   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1492   PORT_DIPNAME( 0x02, 0x02, DEF_STR( Cabinet ) )      PORT_DIPLOCATION("SW2:2")
1525   PORT_DIPNAME( 0x02, 0x02, DEF_STR( Cabinet ) )      PORT_DIPLOCATION("SW-B:2")
14931526   PORT_DIPSETTING(    0x02, DEF_STR( Upright ) )
14941527   PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
1495   PORT_DIPNAME( 0x04, 0x04, "Play Together" )     PORT_DIPLOCATION("SW2:3")
1528   PORT_DIPNAME( 0x04, 0x04, "Play Together" )     PORT_DIPLOCATION("SW-B:3")
14961529   PORT_DIPSETTING(    0x00, DEF_STR( No ) )
14971530   PORT_DIPSETTING(    0x04, DEF_STR( Yes ) )
1498   PORT_DIPNAME( 0x38, 0x30, DEF_STR( Bonus_Life ) )   PORT_DIPLOCATION("SW2:4,5,6")
1531   PORT_DIPNAME( 0x38, 0x30, DEF_STR( Bonus_Life ) )   PORT_DIPLOCATION("SW-B:4,5,6")
14991532   PORT_DIPSETTING(    0x30, "10K" )
15001533   PORT_DIPSETTING(    0x28, "30K" )
15011534   PORT_DIPSETTING(    0x18, "50K, Every 50K" )
r244817r244818
15041537   PORT_DIPSETTING(    0x08, "100K, Every 100K" )
15051538   PORT_DIPSETTING(    0x00, "200K, Every 100K" )
15061539   PORT_DIPSETTING(    0x38, DEF_STR( None ) )
1507   PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) )        PORT_DIPLOCATION("SW2:7,8")
1540   PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) )        PORT_DIPLOCATION("SW-B:7,8")
15081541   PORT_DIPSETTING(    0x80, "2" )
15091542   PORT_DIPSETTING(    0xc0, "3" )
15101543   PORT_DIPSETTING(    0x40, "4" )
r244817r244818
15441577   PORT_INCLUDE(brickzn)
15451578
15461579   PORT_MODIFY("DSW2") // DSW 2 - $c103
1547   PORT_DIPNAME( 0x18, 0x10, DEF_STR( Bonus_Life ) )   PORT_DIPLOCATION("SW2:4,5")
1580   PORT_DIPNAME( 0x18, 0x10, DEF_STR( Bonus_Life ) )   PORT_DIPLOCATION("SW-B:4,5")
15481581   PORT_DIPSETTING(    0x18, "None" )
15491582   PORT_DIPSETTING(    0x10, "10K" )
15501583   PORT_DIPSETTING(    0x08, "30K" )
15511584   PORT_DIPSETTING(    0x00, "50K" )
1552   PORT_DIPNAME( 0x20, 0x20, "Display" )   PORT_DIPLOCATION("SW2:6")
1585   PORT_DIPNAME( 0x20, 0x20, "Display" )   PORT_DIPLOCATION("SW-B:6")
15531586   PORT_DIPSETTING(    0x00, DEF_STR( No ) )
15541587   PORT_DIPSETTING(    0x20, DEF_STR( Yes ) )
15551588INPUT_PORTS_END
r244817r244818
18771910MACHINE_CONFIG_END
18781911
18791912
1880
18811913/***************************************************************************
18821914                                Rough Ranger
18831915***************************************************************************/
r244817r244818
19431975MACHINE_RESET_MEMBER(suna8_state,brickzn)
19441976{
19451977   m_protection_val = m_prot2 = m_prot2_prev = 0xff;
1978   m_paletteram_enab = 1;   // for brickzn11
19461979   m_remap_sound = 0;
19471980   membank("bank1")->set_entry(0);
19481981}
19491982
1950static MACHINE_CONFIG_START( brickzn, suna8_state )
1983static MACHINE_CONFIG_START( brickzn11, suna8_state )
19511984
19521985   /* basic machine hardware */
19531986   MCFG_CPU_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4)        /* SUNA PROTECTION BLOCK */
1954   MCFG_CPU_PROGRAM_MAP(brickzn_map)
1955   MCFG_CPU_IO_MAP(brickzn_io_map)
1987   MCFG_CPU_PROGRAM_MAP(brickzn11_map)
19561988   MCFG_CPU_VBLANK_INT_DRIVER("screen", suna8_state,  irq0_line_hold)  // nmi breaks ramtest but is needed!
19571989
19581990   MCFG_CPU_ADD("audiocpu", Z80, SUNA8_MASTER_CLOCK / 4)   /* Z0840006PSC - 6MHz (measured) */
r244817r244818
20052037   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.17)
20062038MACHINE_CONFIG_END
20072039
2040static MACHINE_CONFIG_DERIVED( brickzn, brickzn11 )
2041   MCFG_CPU_MODIFY("maincpu")
2042   MCFG_CPU_PROGRAM_MAP(brickzn_map)
2043   MCFG_CPU_IO_MAP(brickzn_io_map)
2044MACHINE_CONFIG_END
20082045
2046
20092047/***************************************************************************
20102048                                Hard Head 2
20112049***************************************************************************/
r244817r244818
26352673   ROM_LOAD( "7.bin", 0x30000, 0x20000, CRC(7af5b25c) SHA1(9e98e99bdc5be1602144c83f40b2ccf6b90a729a) )
26362674
26372675   ROM_REGION( 0x10000, "audiocpu", 0 )        /* Music Z80 Code */
2638   ROM_LOAD( "10.bin", 0x00000, 0x10000, CRC(494adf0f) SHA1(eb28ccf0c5f38c2299f55e379ff73ba84bb793c6) )
2676   ROM_LOAD( "10.bin", 0x00000, 0x10000, CRC(494adf0f) SHA1(eb28ccf0c5f38c2299f55e379ff73ba84bb793c6) )  // NO PROGRAM MUSIC PROGRAM V 2.4 1990.12.14
26392677
26402678   ROM_REGION( 0x10000, "pcm", 0 )     /* PCM Z80 Code */
26412679   ROM_LOAD( "11.bin", 0x00000, 0x10000, CRC(6c54161a) SHA1(ea216d9f45b441acd56b9fed81a83e3bfe299fbd) )
r244817r244818
29042942GAME( 1989, sparkman,  0,        sparkman, sparkman, suna8_state, sparkman,  ROT0,  "SunA",                       "Spark Man (v2.0, set 1)",     0 )
29052943GAME( 1989, sparkmana, sparkman, sparkman, sparkman, suna8_state, sparkman,  ROT0,  "SunA",                       "Spark Man (v2.0, set 2)",     0 )
29062944
2907GAME( 1990, starfigh,  0,        starfigh, starfigh, suna8_state, starfigh,  ROT90, "SunA",                       "Star Fighter (v1)",           0 )
2945GAME( 1990, starfigh,  0,        starfigh, starfigh, suna8_state, starfigh,  ROT90, "SunA",                       "Star Fighter (v1)",           GAME_IMPERFECT_GRAPHICS )
29082946
29092947GAME( 1991, hardhea2,  0,        hardhea2, hardhea2, suna8_state, hardhea2,  ROT0,  "SunA",                       "Hard Head 2 (v2.0)",          0 )
29102948
2911// is meant to sound like this https://www.youtube.com/watch?v=yfU1C7A3iZI (recorded from v6.0, Joystick version)
29122949GAME( 1992, brickzn,   0,        brickzn,  brickznv6,suna8_state, brickzn,   ROT90, "SunA",                       "Brick Zone (v6.0, Joystick)", 0 )
29132950GAME( 1992, brickznv5, brickzn,  brickzn,  brickzn,  suna8_state, brickznv5, ROT90, "SunA",                       "Brick Zone (v5.0, Joystick)", 0 )
29142951GAME( 1992, brickznv4, brickzn,  brickzn,  brickzn,  suna8_state, brickznv4, ROT90, "SunA",                       "Brick Zone (v4.0, Spinner)",  0 )
2915GAME( 1992, brickzn11, brickzn,  brickzn,  brickzn,  suna8_state, brickzn11, ROT90, "SunA",                       "Brick Zone (v1.1)",           GAME_NOT_WORKING )
2952GAME( 1992, brickzn11, brickzn,  brickzn11,brickzn,  suna8_state, brickzn11, ROT90, "SunA",                       "Brick Zone (v1.1, Spinner)",  0 )
trunk/src/mame/includes/suna8.h
r244817r244818
8484
8585   // brickzn
8686   DECLARE_READ8_MEMBER(brickzn_cheats_r);
87   DECLARE_WRITE8_MEMBER(brickzn_leds_w);
88   DECLARE_WRITE8_MEMBER(brickzn_palbank_w);
89   DECLARE_WRITE8_MEMBER(brickzn_sprbank_w);
90   DECLARE_WRITE8_MEMBER(brickzn_rombank_w);
91   DECLARE_WRITE8_MEMBER(brickzn_pcm_w);
92   DECLARE_WRITE8_MEMBER(brickzn_banked_paletteram_w);
93   // brickzn (newer sets)
94   DECLARE_WRITE8_MEMBER(brickzn_prot2_w);
8795   DECLARE_WRITE8_MEMBER(brickzn_multi_w);
88   DECLARE_WRITE8_MEMBER(brickzn_prot_w);
89   DECLARE_WRITE8_MEMBER(brickzn_prot2_w);
90   DECLARE_WRITE8_MEMBER(brickzn_rombank_w);
9196   DECLARE_WRITE8_MEMBER(brickzn_enab_palram_w);
9297   DECLARE_WRITE8_MEMBER(brickzn_disab_palram_w);
93   DECLARE_WRITE8_MEMBER(brickzn_pcm_w);
94   DECLARE_WRITE8_MEMBER(brickzn_banked_paletteram_w);
9598
9699   // hardhea2
97100   DECLARE_WRITE8_MEMBER(hardhea2_nmi_w);


Previous 199869 Revisions Next


© 1997-2024 The MAME Team