Previous 199869 Revisions Next

r18669 Tuesday 23rd October, 2012 at 01:05:03 UTC by hap
suna16.c: Emulate protection routines rather than patching them
for uballoon [IQ_132 & JackC]
[src/mame/drivers]suna16.c
[src/mame/includes]suna16.h

trunk/src/mame/drivers/suna16.c
r18668r18669
107107                                Ultra Balloon
108108***************************************************************************/
109109
110READ8_MEMBER(suna16_state::uballoon_prot_r)
111{
112   UINT8 ret = 0;
113
114   switch (offset)
115   {
116      case 0x0011/2:
117         ret  = ((m_prot & 0x03) == 0x03) ? 2 : 0;
118         ret |= ((m_prot & 0x30) == 0x30) ? 1 : 0;
119         break;
120
121      case 0x0311/2:
122         ret = 0x03;
123         break;
124     
125      default:
126         //logerror("uballoon_prot_r %04X\n", offset);
127         break;
128   }
129
130   return ret;
131}
132
133WRITE8_MEMBER(suna16_state::uballoon_prot_w)
134{
135   switch (offset)
136   {
137      case 0x0001/2:
138         m_prot = data;
139         break;
140     
141      default:
142         //logerror("uballoon_prot_w %04X=%02X\n", offset, data);
143         break;
144   }
145}
146
110147static ADDRESS_MAP_START( uballoon_map, AS_PROGRAM, 16, suna16_state )
111148   AM_RANGE(0x000000, 0x0fffff) AM_ROM   // ROM
112149   AM_RANGE(0x800000, 0x803fff) AM_RAM   // RAM
r18668r18669
120157   AM_RANGE(0x600008, 0x600009) AM_WRITE(uballoon_leds_w)   // Leds
121158   AM_RANGE(0x60000c, 0x60000d) AM_WRITENOP   // ? IRQ 1 Ack
122159   AM_RANGE(0x600010, 0x600011) AM_WRITENOP   // ? IRQ 1 Ack
123   AM_RANGE(0xa00000, 0xa0ffff) AM_NOP         // Protection
160   AM_RANGE(0xa00000, 0xa0ffff) AM_READWRITE8(uballoon_prot_r, uballoon_prot_w, 0x00ff)   // Protection
124161ADDRESS_MAP_END
125162
126163
r18668r18669
145182                            Best Of Best
146183***************************************************************************/
147184
148READ16_MEMBER(suna16_state::bestbest_prot_r)
185READ8_MEMBER(suna16_state::bestbest_prot_r)
149186{
150
151187   return m_prot;
152188}
153189
154WRITE16_MEMBER(suna16_state::bestbest_prot_w)
190WRITE8_MEMBER(suna16_state::bestbest_prot_w)
155191{
156   if (ACCESSING_BITS_0_7)
192   switch (data)
157193   {
158
159      switch (data & 0xff)
160      {
161         case 0x00:   m_prot = m_prot ^ 0x0009;   break;
162         case 0x08:   m_prot = m_prot ^ 0x0002;   break;
163         case 0x0c:   m_prot = m_prot ^ 0x0003;   break;
164         //default:    logerror("CPU#0 PC %06X - Unknown protection value: %04X\n", space.device().safe_pc(), data);
165      }
194      case 0x00:   m_prot = m_prot ^ 0x0009;   break;
195      case 0x08:   m_prot = m_prot ^ 0x0002;   break;
196      case 0x0c:   m_prot = m_prot ^ 0x0003;   break;
197      //default:    logerror("CPU#0 PC %06X - Unknown protection value: %04X\n", space.device().safe_pc(), data);
166198   }
167199}
168200
169
170201static ADDRESS_MAP_START( bestbest_map, AS_PROGRAM, 16, suna16_state )
171202   AM_RANGE( 0x000000, 0x03ffff ) AM_ROM AM_MIRROR(0xc0000)      // ROM
172203   AM_RANGE( 0x200000, 0x2fffff ) AM_ROM AM_REGION("user1", 0)      // ROM
173204   AM_RANGE( 0x500000, 0x500001 ) AM_READ_PORT("P1") AM_WRITE(suna16_soundlatch_w)      // To Sound CPU
174205   AM_RANGE( 0x500002, 0x500003 ) AM_READ_PORT("P2") AM_WRITE(bestbest_flipscreen_w)   // P2 + Coins, Flip Screen
175206   AM_RANGE( 0x500004, 0x500005 ) AM_READ_PORT("DSW") AM_WRITE(bestbest_coin_w)      // Coin Counter
176   AM_RANGE( 0x500008, 0x500009 ) AM_WRITE(bestbest_prot_w )      // Protection
177   AM_RANGE( 0x500018, 0x500019 ) AM_READ(bestbest_prot_r )      //
207   AM_RANGE( 0x500008, 0x500009 ) AM_WRITE8(bestbest_prot_w, 0x00ff)      // Protection
208   AM_RANGE( 0x500018, 0x500019 ) AM_READ8(bestbest_prot_r, 0x00ff)      // "
178209   AM_RANGE( 0x540000, 0x540fff ) AM_READWRITE(suna16_paletteram16_r, suna16_paletteram16_w )   // Banked(?) Palette
179210   AM_RANGE( 0x541000, 0x54ffff ) AM_RAM                                          //
180211   AM_RANGE( 0x580000, 0x58ffff ) AM_RAM                     // RAM
r18668r18669
10251056***************************************************************************/
10261057
10271058ROM_START( bssoccer )
1028
10291059   ROM_REGION( 0x200000, "maincpu", 0 )   /* 68000 Code */
10301060   ROM_LOAD16_BYTE( "02", 0x000000, 0x080000, CRC(32871005) SHA1(b094ee3f4fc24c0521915d565f6e203d51e51f6d) )
10311061   ROM_LOAD16_BYTE( "01", 0x000001, 0x080000, CRC(ace00db6) SHA1(6bd146f9b44c97be77578b4f0ffa28cbf66283c2) )
r18668r18669
10481078   ROM_LOAD( "06", 0x180000, 0x080000, CRC(d42ce84b) SHA1(3a3d07d571793ecf4c936d3af244c63b9e4b4bb9) )
10491079   ROM_LOAD( "08", 0x200000, 0x080000, CRC(96cd2136) SHA1(1241859d6c5e64de73898763f0358171ea4aeae3) )
10501080   ROM_LOAD( "10", 0x280000, 0x080000, CRC(1ca94d21) SHA1(23d892b840e37064a175584f955f25f990d9179d) )
1051
10521081ROM_END
10531082
10541083
r18668r18669
10731102***************************************************************************/
10741103
10751104ROM_START( uballoon )
1076
10771105   ROM_REGION( 0x100000, "maincpu", 0 )   /* 68000 Code */
10781106   ROM_LOAD16_BYTE( "prg2.rom", 0x000000, 0x080000, CRC(72ab80ea) SHA1(b755940877cf286559208106dd5e6933aeb72242) )
10791107   ROM_LOAD16_BYTE( "prg1.rom", 0x000001, 0x080000, CRC(27a04f55) SHA1(a530294b000654db8d84efe4835b72e0dca62819) )
r18668r18669
10911119   ROM_LOAD( "gfx2.rom", 0x080000, 0x080000, CRC(6307aa60) SHA1(00406eba98ec368e72ee53c08b9111dec4f2552f) )
10921120   ROM_LOAD( "gfx3.rom", 0x100000, 0x080000, CRC(718f3150) SHA1(5971f006203f86743ebc825e4ab1ed1f811e3165) )
10931121   ROM_LOAD( "gfx4.rom", 0x180000, 0x080000, CRC(af7e057e) SHA1(67a03b54ffa1483c8ed044f27287b7f3f1150455) )
1094
10951122ROM_END
10961123
1097
1098DRIVER_INIT_MEMBER(suna16_state,uballoon)
1099{
1100   UINT16 *RAM = (UINT16 *) machine().root_device().memregion("maincpu")->base();
1101
1102   // Patch out the protection checks
1103   RAM[0x0113c/2] = 0x4e71;   // bne $646
1104   RAM[0x0113e/2] = 0x4e71;   // ""
1105   RAM[0x01784/2] = 0x600c;   // beq $1792
1106   RAM[0x018e2/2] = 0x600c;   // beq $18f0
1107   RAM[0x03c54/2] = 0x600C;   // beq $3c62
1108   RAM[0x126a0/2] = 0x4e71;   // bne $1267a (ROM test)
1109}
1110
11111124/***************************************************************************
11121125                            Suna Quiz 6000 Academy
11131126
r18668r18669
12501263
12511264***************************************************************************/
12521265
1253GAME( 1994, bestbest, 0, bestbest, bestbest, driver_device, 0,        ROT0, "SunA", "Best Of Best", 0 )
1254GAME( 1994, sunaq,    0, sunaq,    sunaq, driver_device,    0,        ROT0, "SunA", "SunA Quiz 6000 Academy (940620-6)", 0 )   // Date/Version on-screen is 940620-6, but in the program rom it's 1994,6,30  K.H.T  V6.00
1255GAME( 1996, bssoccer, 0, bssoccer, bssoccer, driver_device, 0,        ROT0, "SunA (Unico license)", "Back Street Soccer", 0 )
1256GAME( 1996, uballoon, 0, uballoon, uballoon, suna16_state, uballoon, ROT0, "SunA (Unico license)", "Ultra Balloon", 0 )
1266GAME( 1994, bestbest, 0, bestbest, bestbest, driver_device, 0, ROT0, "SunA", "Best Of Best", 0 )
1267GAME( 1994, sunaq,    0, sunaq,    sunaq,    driver_device, 0, ROT0, "SunA", "SunA Quiz 6000 Academy (940620-6)", 0 )   // Date/Version on-screen is 940620-6, but in the program rom it's 1994,6,30  K.H.T  V6.00
1268GAME( 1996, bssoccer, 0, bssoccer, bssoccer, driver_device, 0, ROT0, "SunA (Unico license)", "Back Street Soccer", 0 )
1269GAME( 1996, uballoon, 0, uballoon, uballoon, driver_device, 0, ROT0, "SunA (Unico license)", "Ultra Balloon", 0 )
trunk/src/mame/includes/suna16.h
r18668r18669
55      : driver_device(mconfig, type, tag),
66      m_maincpu(*this,"maincpu"),
77      m_spriteram(*this, "spriteram"),
8      m_spriteram2(*this, "spriteram2"){ }
8      m_spriteram2(*this, "spriteram2")
9   { }
910
1011   required_device<cpu_device> m_maincpu;
1112   required_shared_ptr<UINT16> m_spriteram;
1213   optional_shared_ptr<UINT16> m_spriteram2;
1314
14   UINT16 m_prot;
15   UINT8 m_prot;
1516   UINT16 *m_paletteram;
1617   int m_color_bank;
1718
1819   DECLARE_WRITE16_MEMBER(suna16_soundlatch_w);
1920   DECLARE_WRITE16_MEMBER(bssoccer_leds_w);
2021   DECLARE_WRITE16_MEMBER(uballoon_leds_w);
22   DECLARE_READ8_MEMBER(uballoon_prot_r);
23   DECLARE_WRITE8_MEMBER(uballoon_prot_w);
2124   DECLARE_WRITE16_MEMBER(bestbest_coin_w);
22   DECLARE_READ16_MEMBER(bestbest_prot_r);
23   DECLARE_WRITE16_MEMBER(bestbest_prot_w);
25   DECLARE_READ8_MEMBER(bestbest_prot_r);
26   DECLARE_WRITE8_MEMBER(bestbest_prot_w);
2427   DECLARE_WRITE8_MEMBER(bssoccer_pcm_1_bankswitch_w);
2528   DECLARE_WRITE8_MEMBER(bssoccer_pcm_2_bankswitch_w);
2629   DECLARE_WRITE8_MEMBER(uballoon_pcm_1_bankswitch_w);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team