Previous 199869 Revisions Next

r17744 Sunday 9th September, 2012 at 09:15:41 UTC by Luca Elia
Promoted brickzn to playable state [Luca Elia]
* Fixed gfx ROMs loading
* Fixed inputs in joystick version
* Alternate data decryption
* Fixed alternate opcode decryption ranges
* Palette encryption, banking and writes disable
* Work RAM disable
* Multiplexing of registers through protection
* Added cheat / debugging inputs

New games added or promoted from NOT_WORKING status
---------------------------------------------------
Brick Zone (2 sets) [Luca Elia]
[src/mame]mame.lst
[src/mame/drivers]subsino2.c suna8.c tetrisp2.c
[src/mame/includes]suna8.h
[src/mame/video]suna8.c

trunk/src/mame/mame.lst
r17743r17744
85348534starfigh      // (c) 1990 SunA
85358535hardhea2      // (c) 1991 SunA
85368536brickzn         // (c) 1992 SunA
8537brickzn3      // (c) 1992 SunA
8537brickznv4      // (c) 1992 SunA
85388538bestbest      // (c) 1994 SunA
85398539sunaq         // (c) 1994 SunA
85408540bssoccer      // (c) 1996 SunA
trunk/src/mame/includes/suna8.h
r17743r17744
1010      m_maincpu(*this,"maincpu"),
1111      m_hardhead_ip(*this, "hardhead_ip"),
1212      m_spriteram(*this, "spriteram"),
13      m_wram(*this, "wram"){ }
13      m_wram(*this, "wram")
14   { }
1415
1516   required_device<cpu_device> m_maincpu;
1617   optional_shared_ptr<UINT8> m_hardhead_ip;
r17743r17744
2021   UINT8 m_rombank;
2122   UINT8 m_spritebank;
2223   UINT8 m_palettebank;
23   UINT8 m_unknown;
24   UINT8 m_paletteram_enab;
25   UINT8 m_prot2;
26   UINT8 m_prot2_prev;
2427
2528   UINT8 m_protection_val;
2629   UINT8 m_nmi_enable;
r17743r17744
5053   DECLARE_WRITE8_MEMBER(rranger_bankswitch_w);
5154   DECLARE_READ8_MEMBER(rranger_soundstatus_r);
5255   DECLARE_WRITE8_MEMBER(sranger_prot_w);
53   DECLARE_READ8_MEMBER(brickzn_c140_r);
54   DECLARE_WRITE8_MEMBER(brickzn_palettebank_w);
55   DECLARE_WRITE8_MEMBER(brickzn_spritebank_w);
56   DECLARE_WRITE8_MEMBER(brickzn_unknown_w);
56
57   // brickzn
58   DECLARE_READ8_MEMBER(brickzn_cheats_r);
59   DECLARE_WRITE8_MEMBER(brickzn_multi_w);
60   DECLARE_WRITE8_MEMBER(brickzn_prot_w);
61   DECLARE_WRITE8_MEMBER(brickzn_prot2_w);
5762   DECLARE_WRITE8_MEMBER(brickzn_rombank_w);
63   DECLARE_WRITE8_MEMBER(brickzn_enab_palram_w);
64   DECLARE_WRITE8_MEMBER(brickzn_disab_palram_w);
65
5866   DECLARE_WRITE8_MEMBER(hardhea2_nmi_w);
5967   DECLARE_WRITE8_MEMBER(hardhea2_flipscreen_w);
6068   DECLARE_WRITE8_MEMBER(hardhea2_leds_w);
r17743r17744
8290   DECLARE_READ8_MEMBER(suna8_banked_spriteram_r);
8391   DECLARE_WRITE8_MEMBER(suna8_spriteram_w);
8492   DECLARE_WRITE8_MEMBER(suna8_banked_spriteram_w);
85   DECLARE_DRIVER_INIT(brickzn3);
93   DECLARE_DRIVER_INIT(brickznv4);
8694   DECLARE_DRIVER_INIT(starfigh);
8795   DECLARE_DRIVER_INIT(hardhea2);
8896   DECLARE_DRIVER_INIT(hardhedb);
trunk/src/mame/video/suna8.c
r17743r17744
2020
2121                            [ Sprites Format ]
2222
23
2423    Offset:         Bits:               Value:
2524
2625        0.b                             Y (Bottom up)
r17743r17744
137136*/
138137WRITE8_MEMBER( suna8_state::brickzn_banked_paletteram_w )
139138{
139   if (!m_paletteram_enab)
140      return;
141
140142   int r,g,b;
141143   UINT16 rgb;
142144
143145   offset += m_palettebank * 0x200;
144146   m_generic_paletteram_8[offset] = data;
145147   rgb = (m_generic_paletteram_8[offset&~1] << 8) + m_generic_paletteram_8[offset|1];
146   r   =   (((rgb & (1<<0xc))?1:0)<<0) |
147         (((rgb & (1<<0xb))?1:0)<<1) |
148         (((rgb & (1<<0xe))?1:0)<<2) |
149         (((rgb & (1<<0xf))?1:0)<<3);
150   g   =   (((rgb & (1<<0x8))?1:0)<<0) |
151         (((rgb & (1<<0x9))?1:0)<<1) |
152         (((rgb & (1<<0xa))?1:0)<<2) |
153         (((rgb & (1<<0xd))?1:0)<<3);
154   b   =   (((rgb & (1<<0x4))?1:0)<<0) |
155         (((rgb & (1<<0x3))?1:0)<<1) |
156         (((rgb & (1<<0x6))?1:0)<<2) |
157         (((rgb & (1<<0x7))?1:0)<<3);
158148
149   if (m_prot2_prev == 0x3c && m_prot2 == 0x80)
150   {
151      rgb ^= 0x4444;
152
153      r   =   (rgb >> 12) & 0x0f;
154      g   =   (rgb >>  8) & 0x0f;
155      b   =   (rgb >>  4) & 0x0f;
156   }
157   // see code at 697b
158   else if (m_prot2_prev == 0xa8 && m_prot2 == 0x00)
159   {
160      r   =   (((rgb & (1<<0xc))?1:0)<<0) |
161            (((rgb & (1<<0xb))?1:0)<<1) |
162            (((rgb & (1<<0xe))?1:0)<<2) |
163            (((rgb & (1<<0xf))?1:0)<<3);
164      g   =   (((rgb & (1<<0x8))?1:0)<<0) |
165            (((rgb & (1<<0x9))?1:0)<<1) |
166            (((rgb & (1<<0xa))?1:0)<<2) |
167            (((rgb & (1<<0xd))?1:0)<<3);
168      b   =   (((rgb & (1<<0x4))?1:0)<<0) |
169            (((rgb & (1<<0x3))?1:0)<<1) |
170            (((rgb & (1<<0x6))?1:0)<<2) |
171            (((rgb & (1<<0x7))?1:0)<<3);
172   }
173   else
174   {
175      r   =   (rgb >> 12) & 0x0f;
176      g   =   (rgb >>  8) & 0x0f;
177      b   =   (rgb >>  4) & 0x0f;
178   }
179
159180   palette_set_color_rgb(machine(),offset/2,pal4bit(r),pal4bit(g),pal4bit(b));
160181}
161182
r17743r17744
165186{
166187   suna8_state *state = machine.driver_data<suna8_state>();
167188
168   state->m_text_dim = dim;
169   if (!(state->m_text_dim > 0))
189   state->m_text_dim      =   dim;
190   state->m_spritebank      =   0;
191   state->m_palettebank   =   0;
192
193   if (!state->m_text_dim)
170194   {
171195      state->m_generic_paletteram_8.allocate(0x200 * 2);
172196      state->m_spriteram.allocate(0x2000 * 2);
173      state->m_spritebank  = 0;
174      state->m_palettebank = 0;
175197   }
176198
177199#if TILEMAPS
r17743r17744
320342
321343            drawgfx_transpen(   bitmap,cliprect,machine.gfx[0],
322344                     tile + (attr & 0x3)*0x100 + gfxbank,
323                     ((attr >> 2) & 0xf) | colorbank,   // hardhea2 player2
345                     (((attr >> 2) & 0xf) | colorbank) + 0x10 * state->m_palettebank,   // hardhea2 player2
324346                     tile_flipx, tile_flipy,
325347                     sx, sy,15);
326348         }
r17743r17744
433455      state->m_bg_tilemap->set_scrolly(0, 0);
434456      state->m_bg_tilemap->draw(bitmap, cliprect, 0, 0);
435457#if 1
436   popmessage("%02X %02X %02X %02X - p%2X g%02X r%02X",
437                  state->m_rombank, state->m_palettebank, state->m_spritebank, state->m_unknown,
458   popmessage("%02X %02X %02X - p%2X g%02X r%02X",
459                  state->m_rombank, state->m_palettebank, state->m_spritebank,
438460                  state->m_page, state->m_tiles, state->m_trombank);
439461#endif
440462   }
trunk/src/mame/drivers/suna8.c
r17743r17744
181889  Spark Man       KRB-16   60136-081   T568009      Not Working (Protection)
191990  Star Fighter    KRB-17   60484-0082  T568009      Not Working
202091  Hard Head 2     ?        ?           T568009      Encryption + Protection
2192  Brick Zone      ?        ?           Yes          Not Working
2192  Brick Zone      ?        ?           Yes          Encryption + Protection
2222---------------------------------------------------------------------------
2323
2424To Do:
r17743r17744
9090                                Brick Zone
9191***************************************************************************/
9292
93/* !! BRICKZN3 !! */
94
9593static UINT8 *brickzn_decrypt(running_machine &machine)
9694{
9795   address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM);
r17743r17744
107105   {
108106      static const UINT8 opcode_swaptable[8] =
109107      {
110         1,1,1,0,0,1,1,0,
108         1,1,1,0,0,1,1,0
111109      };
112110      static const UINT8 data_swaptable[16] =
113111      {
114         1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,
112         1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1
115113      };
116114      int opcode_swap = opcode_swaptable[((i & 0x00c) >> 2) | ((i & 0x040) >> 4)];
117115      int data_swap = (i >= 0x8000) ? 0 : data_swaptable[(i & 0x003) | ((i & 0x008) >> 1) | ((i & 0x400) >> 7)];
r17743r17744
130128         x = BITSWAP8(x, 7,2,3,4,5,6,1,0) ^ 0x10;
131129
132130      decrypt[i] = x;
131
132      // Alternate data decryption, activated at run-time. Store in higher banks.
133      if (i >= 0x10000)
134         RAM[i+0x40000] = RAM[i] ^ 0x44;
133135   }
134136
135137   return decrypt;
r17743r17744
141143   UINT8   *decrypt = brickzn_decrypt(machine());
142144   int i;
143145
144   // restore opcodes which for some reason shouldn't be decrypted... */
146   // Opcodes decrypted as data (to do: activated at run-time)
145147   for (i = 0; i < 0x8000; i++)
146148   {
147      if (   ((i >= 0x0730) && (i <= 0x076f)) ||
149      if (   ((i >= 0x072b) && (i <= 0x076f)) ||
148150            ((i >= 0x45c5) && (i <= 0x45e4)) ||
149151            ((i >= 0x7393) && (i <= 0x73ba)) ||
150152            ((i >= 0x7a79) && (i <= 0x7aa9)) )
r17743r17744
153155      }
154156   }
155157
158   // !!!!!! PATCHES !!!!!!
156159
157   /* !!!!!! PATCHES !!!!!! */
160   // To do: ROM banking should be disabled here
161   decrypt[0x11bb] = 0x00;   // LD ($C040),A -> NOP
162   decrypt[0x11bc] = 0x00;   // LD ($C040),A -> NOP
163   decrypt[0x11bd] = 0x00;   // LD ($C040),A -> NOP
158164
159165   decrypt[0x3349] = 0xc9;   // RET Z -> RET (to avoid: jp $C800)
160166
161   decrypt[0x1431] = 0x00;   // HALT -> NOP (NMI source??)
167   // NMI enable / source??
168   decrypt[0x1431] = 0xc9;   // HALT -> RET
162169   decrypt[0x24b5] = 0x00;   // HALT -> NOP
163   decrypt[0x2583] = 0x00;   // HALT -> NOP
170   decrypt[0x2593] = 0x00;   // HALT -> NOP
164171
165   machine().root_device().membank("bank1")->configure_entries(0, 16, machine().root_device().memregion("maincpu")->base() + 0x10000, 0x4000);
172   // Data banks: 00-0f normal data decryption, 10-1f alternate data decryption:
173   machine().root_device().membank("bank1")->configure_entries(0, 16*2, machine().root_device().memregion("maincpu")->base() + 0x10000, 0x4000);
174   // Opcode banks: 00-1f normal opcode decryption:
166175   machine().root_device().membank("bank1")->configure_decrypted_entries(0, 16, decrypt + 0x10000, 0x4000);
176   machine().root_device().membank("bank1")->configure_decrypted_entries(16, 16, decrypt + 0x10000, 0x4000);
167177}
168178
169DRIVER_INIT_MEMBER(suna8_state,brickzn3)
179DRIVER_INIT_MEMBER(suna8_state,brickznv4)
170180{
171181   UINT8   *RAM   =   machine().root_device().memregion("maincpu")->base();
172182   UINT8   *decrypt = brickzn_decrypt(machine());
173183   int i;
174184
175   // restore opcodes which for some reason shouldn't be decrypted... */
185   // Opcodes decrypted as data (to do: activated at run-time)
176186   for (i = 0; i < 0x8000; i++)
177187   {
178      if (   ((i >= 0x0730) && (i <= 0x076f)) ||
188      if (   ((i >= 0x072b) && (i <= 0x076f)) ||
179189            ((i >= 0x4541) && (i <= 0x4560)) ||
180            ((i >= 0x72f3) && (i <= 0x731a)) ||
190            ((i >= 0x72f3) && (i <= 0x7322)) ||
181191            ((i >= 0x79d9) && (i <= 0x7a09)) )
182192      {
183193         decrypt[i] = RAM[i];
184194      }
185195   }
186196
197   // !!!!!! PATCHES !!!!!!
187198
188   /* !!!!!! PATCHES !!!!!! */
199   // To do: ROM banking should be disabled here
200   decrypt[0x1190] = 0x00;   // LD ($C040),A -> NOP
201   decrypt[0x1191] = 0x00;   // LD ($C040),A -> NOP
202   decrypt[0x1192] = 0x00;   // LD ($C040),A -> NOP
189203
190204   decrypt[0x3337] = 0xc9;   // RET Z -> RET (to avoid: jp $C800)
191205
192   decrypt[0x1406] = 0x00;   // HALT -> NOP (NMI source??)
206   // NMI enable / source??
207   decrypt[0x1406] = 0xc9;   // HALT -> RET
193208   decrypt[0x2487] = 0x00;   // HALT -> NOP
194209   decrypt[0x256c] = 0x00;   // HALT -> NOP
195210
196   machine().root_device().membank("bank1")->configure_entries(0, 16, machine().root_device().memregion("maincpu")->base() + 0x10000, 0x4000);
211   // Data banks: 00-0f normal data decryption, 10-1f alternate data decryption:
212   machine().root_device().membank("bank1")->configure_entries(0, 16*2, machine().root_device().memregion("maincpu")->base() + 0x10000, 0x4000);
213   // Opcode banks: 00-1f normal opcode decryption:
197214   machine().root_device().membank("bank1")->configure_decrypted_entries(0, 16, decrypt + 0x10000, 0x4000);
215   machine().root_device().membank("bank1")->configure_decrypted_entries(16, 16, decrypt + 0x10000, 0x4000);
198216}
199217
200218
r17743r17744
447465
448466WRITE8_MEMBER(suna8_state::hardhead_protection_w)
449467{
450
451468   if (data & 0x80)   m_protection_val = data;
452469   else            m_protection_val = offset & 1;
453470}
r17743r17744
467484
468485READ8_MEMBER(suna8_state::hardhead_ip_r)
469486{
470
471487   switch (*m_hardhead_ip)
472488   {
473489      case 0:   return ioport("P1")->read();
r17743r17744
603619***************************************************************************/
604620
605621/*
606?
622  C140:  7--- ----   Finish Stage (Cheat)
623         -654 3---
624         ---- -2--   Must flip rapidly?
625         ---- --1-
626         ---- ---0   Use Cheat 1 and 2 (driver config)
607627*/
608READ8_MEMBER(suna8_state::brickzn_c140_r)
628READ8_MEMBER(suna8_state::brickzn_cheats_r)
609629{
610   return 0xff;
630   static UINT8 bit2 = 0;
631   bit2 = 1 - bit2;   // see code at 2b48
632   return
633      (ioport("CHEATS")->read() & (~(1 << 2))) |
634      (bit2 << 2);
611635}
612636
613637/*
638  C0A0:  7654 321-
639         ---- ---0   Palette RAM Bank
640
641
642  C0A0:  Sound Latch
643
644
645  C0A0:  7654 3---
646         ---- -2--   Coin Counter
647         ---- --1-   Start 2 Led
648         ---- ---0   Start 1 Led
614649*/
615WRITE8_MEMBER(suna8_state::brickzn_palettebank_w)
650WRITE8_MEMBER(suna8_state::brickzn_multi_w)
616651{
652   if ((m_protection_val & 0xfc) == 0x88 || (m_protection_val & 0xfc) == 0x8c)
653   {
654      m_palettebank = data & 0x01;
617655
618   m_palettebank = (data >> 1) & 1;
619   if (data & ~0x02)   logerror("CPU #0 - PC %04X: unknown palettebank bits: %02X\n",cpu_get_pc(&space.device()),data);
656      logerror("CPU #0 - PC %04X: palettebank = %02X\n",cpu_get_pc(&space.device()),data);
657      if (data & ~0x01)   logerror("CPU #0 - PC %04X: unknown palettebank bits: %02X\n",cpu_get_pc(&space.device()),data);
658   }
659   else if ((m_protection_val & 0xfc) == 0x90)
660   {
661      soundlatch_byte_w(space, 0, data);
620662
621   /* Also used as soundlatch - depending on c0c0? */
622   soundlatch_byte_w(space,0,data);
663      logerror("CPU #0 - PC %04X: soundlatch = %02X\n",cpu_get_pc(&space.device()),data);
664   }
665   else if ((m_protection_val & 0xfc) == 0x04)
666   {
667      set_led_status(machine(), 0, data & 0x01);
668      set_led_status(machine(), 1, data & 0x02);
669      coin_counter_w(machine(), 0, data & 0x04);
670
671      logerror("CPU #0 - PC %04X: leds = %02X\n",cpu_get_pc(&space.device()),data);
672      if (data & ~0x07)   logerror("CPU #0 - PC %04X: unknown leds bits: %02X\n",cpu_get_pc(&space.device()),data);
673   }
674   else if ((m_protection_val & 0xfc) == 0x9c)
675   {
676      // controls opcode decryption
677      // see code at 71b, 45b7, 7380, 7a6b
678
679      // To be done: run-time opcode decryption change. Done in driver_init for now.
680
681      logerror("CPU #0 - PC %04X: op-decrypt = %02X\n",cpu_get_pc(&space.device()),data);
682   }
683   else if ((m_protection_val & 0xfc) == 0x80)
684   {
685      // disables rom banking?
686      // see code at 11b1:
687
688      logerror("CPU #0 - PC %04X: rombank_disable = %02X\n",cpu_get_pc(&space.device()),data);
689   }
690   else
691   {
692      logerror("CPU #0 - PC %04X: ignore = %02X\n",cpu_get_pc(&space.device()),data);
693   }
623694}
624695
625696/*
626    7654 32--
627    ---- --1-   Ram Bank
628    ---- ---0   Flip Screen
697  C060:  7654 32--   Protection (e.g. select output of multi_w)
698         ---- --1-   Sprite RAM Bank
699         ---- ---0   Flip Screen
629700*/
630WRITE8_MEMBER(suna8_state::brickzn_spritebank_w)
701WRITE8_MEMBER(suna8_state::brickzn_prot_w)
631702{
703   m_protection_val = data;
632704
705   flip_screen_set(data & 0x01);
633706   m_spritebank = (data >> 1) & 1;
634   if (data & ~0x03)   logerror("CPU #0 - PC %04X: unknown spritebank bits: %02X\n",cpu_get_pc(&space.device()),data);
635   flip_screen_set(data & 0x01 );
707
708   logerror("CPU #0 - PC %04X: protection_val = %02X\n",cpu_get_pc(&space.device()),data);
709//   if (data & ~0x03)   logerror("CPU #0 - PC %04X: unknown spritebank bits: %02X\n",cpu_get_pc(&space.device()),data);
636710}
637711
638WRITE8_MEMBER(suna8_state::brickzn_unknown_w)
712/*
713  C0C0: two protection values written in rapid succession
714*/
715WRITE8_MEMBER(suna8_state::brickzn_prot2_w)
639716{
717   // Disable work RAM write, see code at 96a:
718   if ((m_prot2 ^ data) == 0x24)
719      space.unmap_write(0xc800, 0xdfff);
720   else
721      space.install_ram(0xc800, 0xdfff, m_wram);
640722
641   m_unknown = data;
723   // Select alternate data decryption, see code at 787e:
724   membank("bank1")->set_entry((membank("bank1")->entry() & 0x0f) + ((m_prot2 == (data | 0xdc)) ? 0x10 : 0));
725
726   m_prot2_prev = m_prot2;
727   m_prot2 = data;
728
729   logerror("CPU #0 - PC %04X: unknown = %02X\n",cpu_get_pc(&space.device()),data);
642730}
643731
644732/*
645    7654 ----
646    ---- 3210   ROM Bank
733  C040:  7654 ----
734         ---- 3210   ROM Bank
647735*/
648736WRITE8_MEMBER(suna8_state::brickzn_rombank_w)
649737{
r17743r17744
651739
652740   if (data & ~0x0f)   logerror("CPU #0 - PC %04X: unknown rom bank bits: %02X\n",cpu_get_pc(&space.device()),data);
653741
654   membank("bank1")->set_entry(bank);
742   membank("bank1")->set_entry(bank + (membank("bank1")->entry() & 0x10));
743
655744   m_rombank = data;
656745}
657746
747// Disable palette RAM writes, see code at 4990:
748WRITE8_MEMBER(suna8_state::brickzn_enab_palram_w)
749{
750   m_paletteram_enab = 1;
751}
752WRITE8_MEMBER(suna8_state::brickzn_disab_palram_w)
753{
754   m_paletteram_enab = 0;
755}
756
658757static ADDRESS_MAP_START( brickzn_map, AS_PROGRAM, 8, suna8_state )
659   AM_RANGE(0x0000, 0x7fff) AM_ROM                              // ROM
660   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")                        // Banked ROM
661   AM_RANGE(0xc040, 0xc040) AM_WRITE(brickzn_rombank_w            )   // ROM Bank
662   AM_RANGE(0xc060, 0xc060) AM_WRITE(brickzn_spritebank_w         )   // Sprite  RAM Bank + Flip Screen
663   AM_RANGE(0xc0a0, 0xc0a0) AM_WRITE(brickzn_palettebank_w         )   // Palette RAM Bank + ?
664   AM_RANGE(0xc0c0, 0xc0c0) AM_WRITE(brickzn_unknown_w            )   // ???
665   AM_RANGE(0xc100, 0xc100) AM_READ_PORT("P1")                  // P1 (Buttons)
666   AM_RANGE(0xc101, 0xc101) AM_READ_PORT("P2")                  // P2
667   AM_RANGE(0xc102, 0xc102) AM_READ_PORT("DSW1")               // DSW 1
668   AM_RANGE(0xc103, 0xc103) AM_READ_PORT("DSW2")               // DSW 2
669   AM_RANGE(0xc108, 0xc108) AM_READ_PORT("TRACK1")               // P1 (Analog)
670   AM_RANGE(0xc10c, 0xc10c) AM_READ_PORT("TRACK2")               // P2
671   AM_RANGE(0xc140, 0xc140) AM_READ(brickzn_c140_r)            // ???
758   AM_RANGE(0x0000, 0x7fff) AM_ROM                        // ROM
759   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")            // Banked ROM
760
761   // c000 writes before reading buttons
762   // c010 writes?
763   AM_RANGE(0xc040, 0xc040) AM_WRITE(brickzn_rombank_w      )   // ROM Bank
764   AM_RANGE(0xc060, 0xc060) AM_WRITE(brickzn_prot_w      )   // Sprite RAM Bank + Flip Screen + Protection
765   // c080 writes?
766   // c090 writes?
767   AM_RANGE(0xc0a0, 0xc0a0) AM_WRITE(brickzn_multi_w      )   // Palette RAM Bank / Sound Latch / ...
768   AM_RANGE(0xc0c0, 0xc0c0) AM_WRITE(brickzn_prot2_w      )   // Protection 2
769
770   AM_RANGE(0xc100, 0xc100) AM_READ_PORT("P1")               // P1 (Buttons)
771   AM_RANGE(0xc101, 0xc101) AM_READ_PORT("P2")               // P2 (Buttons)
772   AM_RANGE(0xc102, 0xc102) AM_READ_PORT("DSW1")            // DSW 1
773   AM_RANGE(0xc103, 0xc103) AM_READ_PORT("DSW2")            // DSW 2
774   AM_RANGE(0xc108, 0xc108) AM_READ_PORT("SPIN1")            // P1 (Spinner)
775   AM_RANGE(0xc10c, 0xc10c) AM_READ_PORT("SPIN2")            // P2 (Spinner)
776
777   AM_RANGE(0xc140, 0xc140) AM_READ(brickzn_cheats_r)         // Cheats / Debugging Inputs
778   // c144 reads?
779   // c14a reads?
780
672781   AM_RANGE(0xc600, 0xc7ff) AM_READWRITE(banked_paletteram_r, brickzn_banked_paletteram_w)   // Palette (Banked)
673   AM_RANGE(0xc800, 0xdfff) AM_RAM                           // RAM
782   AM_RANGE(0xc800, 0xdfff) AM_RAM   AM_SHARE("wram")                        // RAM
674783   AM_RANGE(0xe000, 0xffff) AM_READWRITE(suna8_banked_spriteram_r, suna8_banked_spriteram_w)   // Sprites (Banked)
675784ADDRESS_MAP_END
676785
786static ADDRESS_MAP_START( brickzn_io_map, AS_IO, 8, suna8_state )
787   AM_RANGE(0x0000, 0x0000) AM_WRITE(brickzn_disab_palram_w   )   // Disable Palette RAM
788   AM_RANGE(0x00a1, 0x00a1) AM_WRITE(brickzn_enab_palram_w      )   // Enable Palette RAM
789ADDRESS_MAP_END
677790
678791/***************************************************************************
679792                                Hard Head 2
r17743r17744
682795/* Probably wrong: */
683796WRITE8_MEMBER(suna8_state::hardhea2_nmi_w)
684797{
685
686798   m_nmi_enable = data & 0x01;
687799//  if (data & ~0x01)   logerror("CPU #0 - PC %04X: unknown nmi bits: %02X\n",cpu_get_pc(&space.device()),data);
688800}
r17743r17744
707819
708820/*
709821    7654 32--
710    ---- --1-   Ram Bank
711    ---- ---0   Ram Bank?
822    ---- --1-   Sprite RAM Bank
823    ---- ---0   Sprite RAM Bank?
712824*/
713825WRITE8_MEMBER(suna8_state::hardhea2_spritebank_w)
714826{
715
716827   m_spritebank = (data >> 1) & 1;
717828   if (data & ~0x02)   logerror("CPU #0 - PC %04X: unknown spritebank bits: %02X\n",cpu_get_pc(&space.device()),data);
718829}
r17743r17744
734845
735846WRITE8_MEMBER(suna8_state::hardhea2_spritebank_0_w)
736847{
737
738848   m_spritebank = 0;
739849}
740850WRITE8_MEMBER(suna8_state::hardhea2_spritebank_1_w)
741851{
742
743852   m_spritebank = 1;
744853}
745854
r17743r17744
801910
802911WRITE8_MEMBER(suna8_state::starfigh_spritebank_latch_w)
803912{
804
805913   m_spritebank_latch = (data >> 2) & 1;
806914   if (data & ~0x04)   logerror("CPU #0 - PC %04X: unknown spritebank bits: %02X\n",cpu_get_pc(&space.device()),data);
807915}
808916
809917WRITE8_MEMBER(suna8_state::starfigh_spritebank_w)
810918{
811
812919   m_spritebank = m_spritebank_latch;
813920}
814921
r17743r17744
857964/* This is a command-based protection. */
858965WRITE8_MEMBER(suna8_state::sparkman_cmd_prot_w)
859966{
860
861967   switch(data)
862968   {
863969      case 0xa6: m_nmi_enable = 1; break;
r17743r17744
873979
874980WRITE8_MEMBER(suna8_state::suna8_wram_w)
875981{
876
877982   if (!m_trash_prot)
878983      m_wram[offset] = data;
879984}
r17743r17744
9021007
9031008/*
9041009    7654 32--
905    ---- --1-   Ram Bank
906    ---- ---0   Ram Bank?
1010    ---- --1-   Sprite RAM Bank
1011    ---- ---0   Sprite RAM Bank?
9071012*/
9081013WRITE8_MEMBER(suna8_state::sparkman_spritebank_w)
9091014{
910
9111015   if(data == 0xf7) //???
9121016      m_spritebank = 0;
9131017   else
r17743r17744
9371041#if 0
9381042WRITE8_MEMBER(suna8_state::sparkman_en_trash_w)
9391043{
940
9411044   m_trash_prot = 1;
9421045}
9431046#endif
r17743r17744
10031106   AM_RANGE(0xa002, 0xa003) AM_DEVWRITE_LEGACY("ym2", ym2203_w         )   // Music + FX
10041107   AM_RANGE(0xc000, 0xc7ff) AM_RAM   // RAM
10051108   AM_RANGE(0xd000, 0xd000) AM_WRITE(soundlatch2_byte_w            )   // To Sound CPU
1006   AM_RANGE(0xd800, 0xd800) AM_READ(soundlatch_byte_r            )   // From Main CPU
1109   AM_RANGE(0xd800, 0xd800) AM_READ(soundlatch_byte_r               )   // From Main CPU
10071110ADDRESS_MAP_END
10081111
10091112
r17743r17744
10171120   AM_RANGE(0xc002, 0xc003) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w      )
10181121   AM_RANGE(0xe000, 0xe7ff) AM_RAM   // RAM
10191122   AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch2_byte_w            )   // To PCM CPU
1020   AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_byte_r            )   // From Main CPU
1123   AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_byte_r               )   // From Main CPU
10211124ADDRESS_MAP_END
10221125
10231126
1024/* PCM Z80 , 4 DACs (4 bits per sample), NO RAM !! */
1127/* PCM Z80, 4 DACs (4 bits per sample), NO RAM !! */
10251128
10261129static ADDRESS_MAP_START( brickzn_pcm_map, AS_PROGRAM, 8, suna8_state )
10271130   AM_RANGE(0x0000, 0xffff) AM_ROM   // ROM
r17743r17744
11941297
11951298static INPUT_PORTS_START( brickzn )
11961299
1197   PORT_START("P1") // Player 1 - $c100
1198   JOY(1)
1300   PORT_START("P1") // Player 1 Joystick - $c100
1301   PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  ) PORT_PLAYER(1)
1302   PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
1303   PORT_CONFNAME( 0x04, 0x04, "Select First Stage" )
1304   PORT_CONFSETTING(    0x04, DEF_STR( Off ) )
1305   PORT_CONFSETTING(    0x00, DEF_STR( On ) )
1306   PORT_CONFNAME( 0x08, 0x08, "Cheat 1" )   // ???
1307   PORT_CONFSETTING(    0x08, DEF_STR( Off ) )
1308   PORT_CONFSETTING(    0x00, DEF_STR( On ) )
1309   PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_BUTTON1        ) PORT_PLAYER(1)
1310   PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_BUTTON2        ) PORT_PLAYER(1)
1311   PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_START1         )
1312   PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_COIN1          )
11991313
1200   PORT_START("P2") // Player 2 - $c101
1201   JOY(2)
1314   PORT_START("P2") // Player 2 Joystick - $c101
1315   PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  ) PORT_PLAYER(2)
1316   PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
1317   PORT_CONFNAME( 0x04, 0x04, "Select Next Stage" )
1318   PORT_CONFSETTING(    0x04, DEF_STR( Off ) )
1319   PORT_CONFSETTING(    0x00, DEF_STR( On ) )
1320   PORT_CONFNAME( 0x08, 0x08, "Cheat 2" )   // ???
1321   PORT_CONFSETTING(    0x08, DEF_STR( Off ) )
1322   PORT_CONFSETTING(    0x00, DEF_STR( On ) )
1323   PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_BUTTON1        ) PORT_PLAYER(2)
1324   PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_BUTTON2        ) PORT_PLAYER(2)
1325   PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_START2         )
1326   PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_COIN2          )
12021327
12031328   PORT_START("DSW1") // DSW 1 - $c102
1204   PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) )   // rom 38:b840
1329   PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) )
12051330   PORT_DIPSETTING(    0x00, DEF_STR( 5C_1C ) )
12061331   PORT_DIPSETTING(    0x01, DEF_STR( 4C_1C ) )
12071332   PORT_DIPSETTING(    0x02, DEF_STR( 3C_1C ) )
r17743r17744
12191344   PORT_DIPSETTING(    0x10, DEF_STR( Harder ) )
12201345   PORT_DIPSETTING(    0x08, DEF_STR( Very_Hard ) )
12211346   PORT_DIPSETTING(    0x00, DEF_STR( Hardest ) )
1222//  PORT_DIPNAME( 0x40, 0x40, "Invulnerability (Cheat)")
1223//  PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
1224//  PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1225   PORT_SERVICE(       0x40, IP_ACTIVE_LOW )   // + Invulnerability
1347   PORT_SERVICE(       0x40, IP_ACTIVE_LOW ) PORT_NAME( "Service / Invulnerability" )
12261348   PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) )
12271349   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
12281350   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
r17743r17744
12521374   PORT_DIPSETTING(    0x40, "4" )
12531375   PORT_DIPSETTING(    0x00, "5" )
12541376
1255   PORT_START("TRACK1") // Player 1 - $c108
1256   PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(0) PORT_REVERSE
1377   PORT_START("SPIN1") // Player 1 Spinner - $c108
1378   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(15) PORT_REVERSE PORT_PLAYER(1)
12571379
1258   PORT_START("TRACK2") // Player 2 - $c10c
1259   PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(0) PORT_REVERSE
1380   PORT_START("SPIN2") // Player 2 Spinner - $c10c
1381   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(15) PORT_REVERSE PORT_PLAYER(2)
12601382
1383   PORT_START("CHEATS") // Cheats / Debugging Inputs - $c140
1384   PORT_CONFNAME( 0x01, 0x00, "0: Use Cheat 1&2 Setting" )
1385   PORT_CONFSETTING(    0x01, DEF_STR( Off ) )
1386   PORT_CONFSETTING(    0x00, DEF_STR( On ) )
1387   PORT_CONFNAME( 0x02, 0x02, "1: Unused?" )
1388   PORT_CONFSETTING(    0x02, DEF_STR( Off ) )
1389   PORT_CONFSETTING(    0x00, DEF_STR( On ) )
1390   PORT_BIT(  0x04, IP_ACTIVE_HIGH, IPT_SPECIAL )   // Must flip rapidly
1391   PORT_CONFNAME( 0x08, 0x08, "3: Unused?" )
1392   PORT_CONFSETTING(    0x08, DEF_STR( Off ) )
1393   PORT_CONFSETTING(    0x00, DEF_STR( On ) )
1394   PORT_CONFNAME( 0x10, 0x10, "4: Unused?" )
1395   PORT_CONFSETTING(    0x10, DEF_STR( Off ) )
1396   PORT_CONFSETTING(    0x00, DEF_STR( On ) )
1397   PORT_CONFNAME( 0x20, 0x20, "5: Unused?" )
1398   PORT_CONFSETTING(    0x20, DEF_STR( Off ) )
1399   PORT_CONFSETTING(    0x00, DEF_STR( On ) )
1400   PORT_CONFNAME( 0x40, 0x40, "6: Unused?" )
1401   PORT_CONFSETTING(    0x40, DEF_STR( Off ) )
1402   PORT_CONFSETTING(    0x00, DEF_STR( On ) )
1403   PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Finish Stage (Cheat)")
1404
12611405INPUT_PORTS_END
12621406
12631407
r17743r17744
14301574};
14311575
14321576static GFXDECODE_START( suna8 )
1433   GFXDECODE_ENTRY( "gfx1", 0, layout_8x8x4, 0, 16 ) // [0] Sprites
1577   GFXDECODE_ENTRY( "gfx1", 0, layout_8x8x4, 0, 16*2 ) // [0] Sprites (brickzn has 2 palette RAMs)
14341578GFXDECODE_END
14351579
14361580
r17743r17744
16071751}
16081752
16091753
1754static MACHINE_RESET( brickzn )
1755{
1756   suna8_state *state = machine.driver_data<suna8_state>();
1757   state->m_protection_val = state->m_prot2 = state->m_prot2_prev = 0xff;
1758   state->membank("bank1")->set_entry(0);
1759}
1760
16101761static MACHINE_CONFIG_START( brickzn, suna8_state )
16111762
16121763   /* basic machine hardware */
16131764   MCFG_CPU_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4)      /* SUNA PROTECTION BLOCK */
16141765   MCFG_CPU_PROGRAM_MAP(brickzn_map)
1766   MCFG_CPU_IO_MAP(brickzn_io_map)
16151767   MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)   // nmi breaks ramtest but is needed!
16161768
16171769   MCFG_CPU_ADD("audiocpu", Z80, SUNA8_MASTER_CLOCK / 4)   /* Z0840006PSC */
r17743r17744
16211773   MCFG_CPU_PROGRAM_MAP(brickzn_pcm_map)
16221774   MCFG_CPU_IO_MAP(brickzn_pcm_io_map)
16231775
1776   MCFG_MACHINE_RESET( brickzn )
1777
16241778   /* video hardware */
16251779   MCFG_SCREEN_ADD("screen", RASTER)
16261780   MCFG_SCREEN_REFRESH_RATE(60)
r17743r17744
16301784   MCFG_SCREEN_UPDATE_STATIC(suna8)
16311785
16321786   MCFG_GFXDECODE(suna8)
1633   MCFG_PALETTE_LENGTH(512)
1787   MCFG_PALETTE_LENGTH(256 * 2)   // 2 x Palette RAM
16341788
16351789   MCFG_VIDEO_START(suna8_textdim0)
16361790
r17743r17744
21282282***************************************************************************/
21292283
21302284ROM_START( brickzn )
2131   ROM_REGION( 0x50000, "maincpu", 0 )      /* Main Z80 Code */
2285   ROM_REGION( 0x50000 + 0x40000, "maincpu", 0 )      /* Main Z80 Code */
21322286   ROM_LOAD( "brickzon.009", 0x00000, 0x08000, CRC(1ea68dea) SHA1(427152a26b062c5e77089de49c1da69369d4d557) )   // V5.0 1992,3,3
21332287   ROM_LOAD( "brickzon.008", 0x10000, 0x20000, CRC(c61540ba) SHA1(08c0ede591b229427b910ca6bb904a6146110be8) )
21342288   ROM_LOAD( "brickzon.007", 0x30000, 0x20000, CRC(ceed12f1) SHA1(9006726b75a65455afb1194298bade8fa2207b4a) )
21352289
21362290   ROM_REGION( 0x10000, "audiocpu", 0 )      /* Music Z80 Code */
2137   ROM_LOAD( "brickzon.010", 0x00000, 0x10000, CRC(4eba8178) SHA1(9a214a1acacdc124529bc9dde73a8e884fc70293) )
2291   ROM_LOAD( "brickzon.010", 0x00000, 0x10000, CRC(4eba8178) SHA1(9a214a1acacdc124529bc9dde73a8e884fc70293) )   // BRICK MUSIC XILINX PROGRAM 3020 1991,11,14 MUSIC PROGRAM V 2,0 1990.12.14
21382292
21392293   ROM_REGION( 0x10000, "pcm", 0 )      /* PCM Z80 Code */
21402294   ROM_LOAD( "brickzon.011", 0x00000, 0x10000, CRC(6c54161a) SHA1(ea216d9f45b441acd56b9fed81a83e3bfe299fbd) )
r17743r17744
21422296   ROM_REGION( 0xc0000, "gfx1", ROMREGION_INVERT )   /* Sprites */
21432297   ROM_LOAD( "brickzon.005", 0x00000, 0x20000, CRC(118f8392) SHA1(598fa4df3ae348ec9796cd6d90c3045bec546da3) )
21442298   ROM_LOAD( "brickzon.004", 0x20000, 0x20000, CRC(2be5f335) SHA1(dc870a3c5303cb2ea1fea4a25f53db016ed5ecee) )
2145   ROM_LOAD( "brickzon.006", 0x40000, 0x20000, CRC(bbf31081) SHA1(1fdbd0e0853082345225e18df340184a7a604b78) )
2299   ROM_LOAD( "brickzon.003", 0x40000, 0x20000, CRC(2e4f194b) SHA1(86da1a582ea274f2af96d3e3e2ac72bcaf3638cb) )
21462300   ROM_LOAD( "brickzon.002", 0x60000, 0x20000, CRC(241f0659) SHA1(71b577bf7097b3b367d068df42f991d515f9003a) )
21472301   ROM_LOAD( "brickzon.001", 0x80000, 0x20000, CRC(6970ada9) SHA1(5cfe5dcf25af7aff67ee5d78eb963d598251025f) )
2148   ROM_LOAD( "brickzon.003", 0xa0000, 0x20000, CRC(2e4f194b) SHA1(86da1a582ea274f2af96d3e3e2ac72bcaf3638cb) )
2302   ROM_LOAD( "brickzon.006", 0xa0000, 0x20000, CRC(bbf31081) SHA1(1fdbd0e0853082345225e18df340184a7a604b78) )
21492303ROM_END
21502304
2151ROM_START( brickzn3 )
2152   ROM_REGION( 0x50000, "maincpu", 0 )      /* Main Z80 Code */
2305ROM_START( brickznv4 )
2306   ROM_REGION( 0x50000 + 0x40000, "maincpu", 0 )      /* Main Z80 Code */
21532307   ROM_LOAD( "39",           0x00000, 0x08000, CRC(043380bd) SHA1(7eea7cc7d754815df233879b4a9d3d88eac5b28d) )   // V3.0 1992,1,23
21542308   ROM_LOAD( "38",           0x10000, 0x20000, CRC(e16216e8) SHA1(e88ae97e8a632823d5f1fe500954b6f6542407d5) )
21552309   ROM_LOAD( "brickzon.007", 0x30000, 0x20000, CRC(ceed12f1) SHA1(9006726b75a65455afb1194298bade8fa2207b4a) )
21562310
21572311   ROM_REGION( 0x10000, "audiocpu", 0 )      /* Music Z80 Code */
2158   ROM_LOAD( "brickzon.010", 0x00000, 0x10000, CRC(4eba8178) SHA1(9a214a1acacdc124529bc9dde73a8e884fc70293) )
2312   ROM_LOAD( "brickzon.010", 0x00000, 0x10000, CRC(4eba8178) SHA1(9a214a1acacdc124529bc9dde73a8e884fc70293) )   // BRICK MUSIC XILINX PROGRAM 3020 1991,11,14 MUSIC PROGRAM V 2,0 1990.12.14
21592313
21602314   ROM_REGION( 0x10000, "pcm", 0 )      /* PCM Z80 Code */
21612315   ROM_LOAD( "brickzon.011", 0x00000, 0x10000, CRC(6c54161a) SHA1(ea216d9f45b441acd56b9fed81a83e3bfe299fbd) )
r17743r17744
21632317   ROM_REGION( 0xc0000, "gfx1", ROMREGION_INVERT )   /* Sprites */
21642318   ROM_LOAD( "35",           0x00000, 0x20000, CRC(b463dfcf) SHA1(35c8a4a0c5b62a087a2cb70bc5b7815f5bb2d973) )
21652319   ROM_LOAD( "brickzon.004", 0x20000, 0x20000, CRC(2be5f335) SHA1(dc870a3c5303cb2ea1fea4a25f53db016ed5ecee) )
2166   ROM_LOAD( "brickzon.006", 0x40000, 0x20000, CRC(bbf31081) SHA1(1fdbd0e0853082345225e18df340184a7a604b78) )
2320   ROM_LOAD( "brickzon.003", 0x40000, 0x20000, CRC(2e4f194b) SHA1(86da1a582ea274f2af96d3e3e2ac72bcaf3638cb) )
21672321   ROM_LOAD( "32",           0x60000, 0x20000, CRC(32dbf2dd) SHA1(b9ab8b93a062b871b7f824e4be2f214cc832d585) )
21682322   ROM_LOAD( "brickzon.001", 0x80000, 0x20000, CRC(6970ada9) SHA1(5cfe5dcf25af7aff67ee5d78eb963d598251025f) )
2169   ROM_LOAD( "brickzon.003", 0xa0000, 0x20000, CRC(2e4f194b) SHA1(86da1a582ea274f2af96d3e3e2ac72bcaf3638cb) )
2323   ROM_LOAD( "brickzon.006", 0xa0000, 0x20000, CRC(bbf31081) SHA1(1fdbd0e0853082345225e18df340184a7a604b78) )
21702324ROM_END
21712325
21722326
r17743r17744
23592513   machine().root_device().membank("bank1")->configure_entries(0, 16, machine().root_device().memregion("maincpu")->base() + 0x10000, 0x4000);
23602514}
23612515
2362/* Working Games */
2363GAME( 1988, sranger,  0,        rranger,  rranger, suna8_state,  suna8,    ROT0,  "SunA", "Super Ranger (v2.0)", 0 )
2364GAME( 1988, rranger,  sranger,  rranger,  rranger, suna8_state,  suna8,    ROT0,  "SunA (Sharp Image license)", "Rough Ranger (v2.0, unprotected, bootleg?)", 0) //protection is patched out in this.
2365GAME( 1988, srangerb, sranger,  rranger,  rranger, suna8_state,  suna8,    ROT0,  "bootleg", "Super Ranger (bootleg)", 0 )
2366GAME( 1988, srangerw, sranger,  rranger,  rranger, suna8_state,  suna8,    ROT0,  "SunA (WDK license)", "Super Ranger (WDK)", 0 )
2367GAME( 1988, hardhead, 0,        hardhead, hardhead, suna8_state, hardhead, ROT0,  "SunA", "Hard Head" , 0)
2368GAME( 1988, hardheadb,hardhead, hardhead, hardhead, suna8_state, hardhedb, ROT0,  "bootleg", "Hard Head (bootleg)" , 0)
2369GAME( 1988, pop_hh,   hardhead, hardhead, hardhead, suna8_state, hardhedb, ROT0,  "bootleg", "Popper (Hard Head bootleg)" , 0)
2370GAME( 1991, hardhea2, 0,        hardhea2, hardhea2, suna8_state, hardhea2, ROT0,  "SunA", "Hard Head 2 (v2.0)" , 0 )
2516// Working Games
2517GAME( 1988, sranger,   0,        rranger,  rranger,  suna8_state, suna8,     ROT0,  "SunA",               "Super Ranger (v2.0)",         0 )
2518GAME( 1988, rranger,   sranger,  rranger,  rranger,  suna8_state, suna8,     ROT0,  "SunA (Sharp Image license)", "Rough Ranger (v2.0, unprotected, bootleg?)", 0) // protection is patched out in this.
2519GAME( 1988, srangerb,  sranger,  rranger,  rranger,  suna8_state, suna8,     ROT0,  "bootleg",            "Super Ranger (bootleg)",      0 )
2520GAME( 1988, srangerw,  sranger,  rranger,  rranger,  suna8_state, suna8,     ROT0,  "SunA (WDK license)", "Super Ranger (WDK)",          0 )
2521GAME( 1988, hardhead,  0,        hardhead, hardhead, suna8_state, hardhead,  ROT0,  "SunA",               "Hard Head",                   0 )
2522GAME( 1988, hardheadb, hardhead, hardhead, hardhead, suna8_state, hardhedb,  ROT0,  "bootleg",            "Hard Head (bootleg)",         0 )
2523GAME( 1988, pop_hh,    hardhead, hardhead, hardhead, suna8_state, hardhedb,  ROT0,  "bootleg",            "Popper (Hard Head bootleg)",  0 )
2524GAME( 1991, hardhea2,  0,        hardhea2, hardhea2, suna8_state, hardhea2,  ROT0,  "SunA",               "Hard Head 2 (v2.0)",          0 )
2525GAME( 1992, brickzn,   0,        brickzn,  brickzn,  suna8_state, brickzn,   ROT90, "SunA",               "Brick Zone (v5.0, Joystick)", 0 )
2526GAME( 1992, brickznv4, brickzn,  brickzn,  brickzn,  suna8_state, brickznv4, ROT90, "SunA",               "Brick Zone (v4.0, Spinner)",  0 )
23712527
2372/* Non Working Games */
2373GAME( 1989, sparkman, 0,        sparkman, sparkman, suna8_state, sparkman, ROT0,  "SunA", "Spark Man (v 2.0, set 1)", GAME_NOT_WORKING )
2374GAME( 1989, sparkmana,sparkman, sparkman, sparkman, suna8_state, sparkman, ROT0,  "SunA", "Spark Man (v 2.0, set 2)", GAME_NOT_WORKING )
2375GAME( 1990, starfigh, 0,        starfigh, hardhea2, suna8_state, starfigh, ROT90, "SunA", "Star Fighter (v1)", GAME_NOT_WORKING )
2376GAME( 1992, brickzn,  0,        brickzn,  brickzn, suna8_state,  brickzn,  ROT90, "SunA", "Brick Zone (v5.0)", GAME_NOT_WORKING )
2377GAME( 1992, brickzn3, brickzn,  brickzn,  brickzn, suna8_state,  brickzn3, ROT90, "SunA", "Brick Zone (v4.0)", GAME_NOT_WORKING )
2528// Non Working Games
2529GAME( 1989, sparkman,  0,        sparkman, sparkman, suna8_state, sparkman,  ROT0,  "SunA",               "Spark Man (v2.0, set 1)",     GAME_NOT_WORKING )
2530GAME( 1989, sparkmana, sparkman, sparkman, sparkman, suna8_state, sparkman,  ROT0,  "SunA",               "Spark Man (v2.0, set 2)",     GAME_NOT_WORKING )
2531GAME( 1990, starfigh,  0,        starfigh, hardhea2, suna8_state, starfigh,  ROT90, "SunA",               "Star Fighter (v1)",           GAME_NOT_WORKING )
trunk/src/mame/drivers/subsino2.c
r17743r17744
898898
899899WRITE16_MEMBER(subsino2_state::bishjan_sel_w)
900900{
901   /*
902      sound writes in service mode:
903      01 88 04 00 (coin in)
904      02 89 04 0v (v = voice = 0..3)
905   */
901906   if (ACCESSING_BITS_8_15)
902907      m_bishjan_sel = data >> 8;
903908}
r17743r17744
14751480
14761481   PORT_START("SYSTEM") // IN A
14771482   PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN      )
1478   PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SERVICE      ) PORT_IMPULSE(1)   // service mode
1483   PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SERVICE      )   PORT_IMPULSE(1)   // service mode (press twice for inputs)
14791484   PORT_BIT( 0x0004, IP_ACTIVE_HIGH,IPT_SPECIAL      )   // hopper sensor
14801485   PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE1      )   // stats
14811486   PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE2      )   // pay out? "hopper empty"
trunk/src/mame/drivers/tetrisp2.c
r17743r17744
17711771ROMs:(all ROMs are on daughterboard)
177217721.1 - Programs (TMS 27C020)
177317733.3 /
1774(actual label is "Cawaii 1 Ver1.1" & "Cawaii 3 Ver1.1")
1774(actual label is "Cawaii 1 Ver 1.0" & "Cawaii 3 Ver 1.0")
17751775MR97006-01.2 (42pin mask ROM, read as 16M, byte mode)
17761776IC6 is not populated.
17771777IC2 and IC5 have a 0-ohm resistor wired to pin32 (A20 on a 32MBit ROM)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team