Previous 199869 Revisions Next

r18384 Tuesday 9th October, 2012 at 17:46:25 UTC by Mariusz Wojcieszek
New games added
----------------------------
3X3 Puzzle [Mariusz Wojcieszek, David Haywood, Guru]
[src/mame]mame.lst mame.mak
[src/mame/drivers]3x3puzzl.c*

trunk/src/mame/drivers/3x3puzzl.c
r0r18384
1/***************************************************************************
2
33x3 Puzzle
4Ace
5
6Driver by Mariusz Wojcieszek and David Haywood
7
8Typical and simple Korean hardware.....
9
1068000 @ 10MHz
11OKI M6295 @ 1MHz (4/4)
12Lattice pLSI1032 for graphics generation
136264 SRAM x 2
146116 SRAM x 8
1562256 SRAM x2 (main program RAM)
16DIP SW 8-position X2 (SW1 SW2)
17OSC 27MHz, 22.1184MHz, 10MHz
18XTAL 4MHz
19
20Additional ROMs with 'a' in label are probably to convert
21the game back to normal version as current set on the PCB
22has adult graphics (sets provided are 'Normal' and 'Enterprise')
23
24***************************************************************************/
25
26
27#include "emu.h"
28#include "cpu/m68000/m68000.h"
29#include "sound/okim6295.h"
30
31#define MAIN_CLOCK XTAL_10MHz
32
33class _3x3puzzle_state : public driver_device
34{
35public:
36   _3x3puzzle_state(const machine_config &mconfig, device_type type, const char *tag)
37      : driver_device(mconfig, type, tag),
38        m_maincpu(*this, "maincpu"),
39        m_oki(*this, "oki"),
40        m_videoram1(*this, "videoram1"),
41        m_videoram2(*this, "videoram2"),
42        m_videoram3(*this, "videoram3")
43   { }
44
45   /* memory pointers */
46   required_shared_ptr<UINT16> m_videoram1;
47   required_shared_ptr<UINT16> m_videoram2;
48   required_shared_ptr<UINT16> m_videoram3;
49
50   // devices
51   required_device<cpu_device> m_maincpu;
52   required_device<okim6295_device> m_oki;
53
54   // screen updates
55   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
56
57   /* video-related */
58   tilemap_t   *m_tilemap1;
59   tilemap_t   *m_tilemap2;
60   tilemap_t   *m_tilemap3;
61
62   DECLARE_WRITE16_MEMBER(videoram1_w);
63   TILE_GET_INFO_MEMBER(get_tile1_info);
64   DECLARE_WRITE16_MEMBER(videoram2_w);
65   TILE_GET_INFO_MEMBER(get_tile2_info);
66   DECLARE_WRITE16_MEMBER(videoram3_w);
67   TILE_GET_INFO_MEMBER(get_tile3_info);
68
69   DECLARE_READ16_HANDLER(_600000_r);
70   DECLARE_READ16_HANDLER(_880000_r);
71   DECLARE_WRITE16_HANDLER(gfx_ctrl_w);
72
73protected:
74   // driver_device overrides
75   virtual void machine_start();
76   virtual void machine_reset();
77
78   virtual void video_start();
79   virtual void palette_init();
80};
81
82WRITE16_MEMBER(_3x3puzzle_state::videoram1_w)
83{
84   COMBINE_DATA(&m_videoram1[offset]);
85   m_tilemap1->mark_tile_dirty(offset);
86}
87
88TILE_GET_INFO_MEMBER(_3x3puzzle_state::get_tile1_info)
89{
90   UINT16 code = m_videoram1[tile_index];
91   SET_TILE_INFO_MEMBER(
92         0,
93         code,
94         0,
95         0);
96}
97
98WRITE16_MEMBER(_3x3puzzle_state::videoram2_w)
99{
100   COMBINE_DATA(&m_videoram2[offset]);
101   m_tilemap2->mark_tile_dirty(offset);
102}
103
104TILE_GET_INFO_MEMBER(_3x3puzzle_state::get_tile2_info)
105{
106   UINT16 code = m_videoram2[tile_index];
107   SET_TILE_INFO_MEMBER(
108         1,
109         code,
110         1,
111         0);
112}
113
114WRITE16_MEMBER(_3x3puzzle_state::videoram3_w)
115{
116   COMBINE_DATA(&m_videoram3[offset]);
117   m_tilemap3->mark_tile_dirty(offset);
118}
119
120TILE_GET_INFO_MEMBER(_3x3puzzle_state::get_tile3_info)
121{
122   UINT16 code = m_videoram3[tile_index];
123   SET_TILE_INFO_MEMBER(
124         2,
125         code,
126         2,
127         0);
128}
129
130WRITE16_MEMBER(_3x3puzzle_state::gfx_ctrl_w)
131{
132   // bit 5 (0x20) cleared when palette is written
133   // bit 4 (0x10) screen width - 1: 512 pixels, 0: 320 pixels
134   // bit 3 (0x08) is set when 0x400000/0x480000 is written
135
136   if ( BIT(data,4) )
137   {
138      machine().primary_screen->set_visible_area(0*8, 64*8-1, 0*8, 32*8-1);
139   }
140   else
141   {
142      machine().primary_screen->set_visible_area(0*8, 40*8-1, 0*8, 32*8-1);
143   }
144}
145
146void _3x3puzzle_state::video_start()
147{
148   m_tilemap1 = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(_3x3puzzle_state::get_tile1_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
149   m_tilemap2 = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(_3x3puzzle_state::get_tile2_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
150   m_tilemap3 = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(_3x3puzzle_state::get_tile3_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
151   m_tilemap2->set_transparent_pen(0);
152   m_tilemap3->set_transparent_pen(0);
153}
154
155UINT32 _3x3puzzle_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect )
156{
157   m_tilemap1->draw(bitmap, cliprect, 0, 1);
158   m_tilemap2->draw(bitmap, cliprect, 0, 2);
159   m_tilemap3->draw(bitmap, cliprect, 0, 3);
160   return 0;
161}
162
163READ16_MEMBER(_3x3puzzle_state::_600000_r)
164{
165   return 0xffff; // DSW?
166}
167
168READ16_MEMBER(_3x3puzzle_state::_880000_r)
169{
170   return 0xffff; // ???
171}
172
173static ADDRESS_MAP_START( _3x3puzzle_map, AS_PROGRAM, 16, _3x3puzzle_state )
174   AM_RANGE(0x000000, 0x03ffff) AM_ROM
175   AM_RANGE(0x100000, 0x10ffff) AM_RAM
176   AM_RANGE(0x200000, 0x2007ff) AM_WRITE(videoram1_w) AM_SHARE("videoram1")
177   AM_RANGE(0x201000, 0x201fff) AM_WRITE(videoram2_w) AM_SHARE("videoram2")
178   AM_RANGE(0x202000, 0x202fff) AM_WRITE(videoram3_w) AM_SHARE("videoram3")
179   AM_RANGE(0x280000, 0x280001) AM_READ_PORT("VBLANK")
180   AM_RANGE(0x300000, 0x3005ff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
181   AM_RANGE(0x400000, 0x400001) AM_WRITENOP // scroll?
182   AM_RANGE(0x480000, 0x480001) AM_WRITENOP
183   AM_RANGE(0x500000, 0x500001) AM_READ_PORT("P1")
184   AM_RANGE(0x580000, 0x580001) AM_READ_PORT("P2")
185   AM_RANGE(0x600000, 0x600001) AM_READ(_600000_r)
186   AM_RANGE(0x700000, 0x700001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
187   AM_RANGE(0x800000, 0x800001) AM_WRITE(gfx_ctrl_w)
188   AM_RANGE(0x880000, 0x880001) AM_READ(_880000_r)
189ADDRESS_MAP_END
190
191static INPUT_PORTS_START( _3x3puzzle )
192   PORT_START("P1")
193   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
194   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
195   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
196   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
197   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
198   PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNKNOWN )
199
200   PORT_START("P2")
201   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
202   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
203   PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN )
204
205   PORT_START("VBLANK")
206   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
207
208INPUT_PORTS_END
209
210static const gfx_layout tiles16x16x8_layout =
211{
212   16,16,
213   RGN_FRAC(1,1),
214   8,
215   { 0,1, 2,3, 4,5,6,7 },
216   { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
217   { 0*128, 1*128, 2*128, 3*128, 4*128, 5*128, 6*128, 7*128, 8*128, 9*128,10*128,11*128,12*128,13*128,14*128,15*128 },
218   128*16
219};
220
221static const gfx_layout tiles8x8_layout =
222{
223   8,8,
224   RGN_FRAC(1,1),
225   8 ,
226   { 0,1,2,3,4,5,6,7 },
227   { 3*8,2*8,1*8,0*8,7*8,6*8,5*8,4*8 },
228   { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64 },
229   8*64
230};
231
232
233static GFXDECODE_START( _3x3puzzle )
234   GFXDECODE_ENTRY( "gfx1", 0, tiles16x16x8_layout,     0, 3 )
235   GFXDECODE_ENTRY( "gfx2", 0, tiles8x8_layout,     0, 3 )
236   GFXDECODE_ENTRY( "gfx3", 0, tiles8x8_layout,     0, 3 )
237GFXDECODE_END
238
239
240void _3x3puzzle_state::machine_start()
241{
242}
243
244void _3x3puzzle_state::machine_reset()
245{
246}
247
248
249void _3x3puzzle_state::palette_init()
250{
251
252}
253
254static MACHINE_CONFIG_START( _3x3puzzle, _3x3puzzle_state )
255
256   /* basic machine hardware */
257   MCFG_CPU_ADD("maincpu",M68000,MAIN_CLOCK)
258   MCFG_CPU_PROGRAM_MAP(_3x3puzzle_map)
259   MCFG_CPU_VBLANK_INT_DRIVER("screen", _3x3puzzle_state,  irq4_line_hold)
260
261   /* video hardware */
262   MCFG_SCREEN_ADD("screen", RASTER)
263   MCFG_SCREEN_REFRESH_RATE(60)
264   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
265   MCFG_SCREEN_UPDATE_DRIVER(_3x3puzzle_state, screen_update)
266   MCFG_SCREEN_SIZE(64*8, 32*8)
267   MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 32*8-1)
268
269   MCFG_GFXDECODE(_3x3puzzle)
270
271   MCFG_PALETTE_LENGTH(0x600/2)
272
273   /* sound hardware */
274   MCFG_SPEAKER_STANDARD_MONO("mono")
275   MCFG_OKIM6295_ADD("oki", XTAL_4MHz/4, OKIM6295_PIN7_HIGH)
276   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
277MACHINE_CONFIG_END
278
279
280/***************************************************************************
281
282  Game driver(s)
283
284***************************************************************************/
285
286ROM_START( 3x3puzzl )
287   ROM_REGION( 0x400000, "maincpu", 0 )   /* 68000 code */
288   ROM_LOAD16_BYTE( "1.bin",    0x000000, 0x20000, CRC(e9c39ee7) SHA1(8557eeaff33ac8e11fd545482bd9e48f9a58eba3) )
289   ROM_LOAD16_BYTE( "2.bin",    0x000001, 0x20000, CRC(524963be) SHA1(05428ccc823c35b6c4d182a1dff1c9aa6b71e616) )
290
291   ROM_REGION( 0x200000, "gfx1", ROMREGION_ERASE00 )
292   ROM_LOAD32_BYTE("3.bin", 0x000000, 0x080000, CRC(53c2aa6a) SHA1(d2ebb10eb8311ff5226793e7b373e152b21c602c) )
293   ROM_LOAD32_BYTE("4.bin", 0x000001, 0x080000, CRC(fb0b76fd) SHA1(23c9a5979452c21381107641d5cd49b34ad00471) )
294   ROM_LOAD32_BYTE("5.bin", 0x000002, 0x080000, CRC(b6c1e108) SHA1(44c97e0582b9ee85465040d56eda9efd06c25533) )
295   ROM_LOAD32_BYTE("6.bin", 0x000003, 0x080000, CRC(47cb0e8e) SHA1(13d39b1eb4fcfeafc8d821871750f37377449b80) )
296
297   ROM_REGION( 0x080000, "gfx2", ROMREGION_ERASE00 )
298   ROM_LOAD32_BYTE("7.bin",  0x000000, 0x020000, CRC(45b1f58b) SHA1(7faee993b87ef14eef1c5ba3fcc7d0747494dbf5) )
299   ROM_LOAD32_BYTE("8.bin",  0x000001, 0x020000, CRC(c0d404a7) SHA1(7991e711f6933bc3809f3c562e21a775a9a2dcf3) )
300   ROM_LOAD32_BYTE("9.bin",  0x000002, 0x020000, CRC(6b303aa9) SHA1(1750da9148978f59904c2bf9e99f967e5bdd5a92) )
301   ROM_LOAD32_BYTE("10.bin", 0x000003, 0x020000, CRC(6d0107bc) SHA1(a6f30a482586136304af510eee0a93df450673bd) )
302
303   ROM_REGION( 0x080000, "gfx3", ROMREGION_ERASE00 )
304   ROM_LOAD32_BYTE("11.bin", 0x000000, 0x020000, CRC(e124c0b5) SHA1(9b819691b7ca7f0561f4fce05083c8507e138bfe) )
305   ROM_LOAD32_BYTE("12.bin", 0x000001, 0x020000, CRC(ae4a8707) SHA1(f54337e4b666dc2f38df0ea96e9c8f4d7c4ebe52) )
306   ROM_LOAD32_BYTE("13.bin", 0x000002, 0x020000, CRC(f06925d1) SHA1(a45b72da57c7d967dec2fcad12e6a7864f5442e8) )
307   ROM_LOAD32_BYTE("14.bin", 0x000003, 0x020000, CRC(07252636) SHA1(00730c203e20af9e18a792e26de7aeac5d090ebf) )
308
309   ROM_REGION(0x80000, "oki", 0 )
310   ROM_LOAD("15.bin", 0x000000, 0x080000, CRC(d3aff355) SHA1(117f7bbd6cab370f65e308d78291732dfc079365) )
311ROM_END
312
313ROM_START( 3x3puzzla )
314   ROM_REGION( 0x400000, "maincpu", 0 )   /* 68000 code */
315   ROM_LOAD16_BYTE( "1a.bin",    0x000000, 0x20000, CRC(425c5896) SHA1(78d709b729f160b1e20a61a795361113dbb4fb52) )
316   ROM_LOAD16_BYTE( "2a.bin",    0x000001, 0x20000, CRC(4db710b7) SHA1(df7a3496aac9cfdaee4fd504d88772b07a8fdb2b) )
317
318   ROM_REGION( 0x200000, "gfx1", ROMREGION_ERASE00 )
319   ROM_LOAD32_BYTE("3a.bin", 0x000000, 0x080000, CRC(33bff952) SHA1(11d06462041e7cf8aa2ae422ed74ba23f6934478) )
320   ROM_LOAD32_BYTE("4a.bin", 0x000001, 0x080000, CRC(222996d8) SHA1(fb8fd45a43e78dd9700ffb46fa886f62e7c32e61) )
321   ROM_LOAD32_BYTE("5a.bin", 0x000002, 0x080000, CRC(5b209844) SHA1(8a34958ecd9c26272708237028e279dd347c729f) )
322   ROM_LOAD32_BYTE("6a.bin", 0x000003, 0x080000, CRC(f1136bba) SHA1(486c41bd08c4039bfe46500540fc4ae0f1497232) )
323
324   ROM_REGION( 0x080000, "gfx2", ROMREGION_ERASE00 )
325   ROM_LOAD32_BYTE("7.bin",  0x000000, 0x020000, CRC(45b1f58b) SHA1(7faee993b87ef14eef1c5ba3fcc7d0747494dbf5) )
326   ROM_LOAD32_BYTE("8.bin",  0x000001, 0x020000, CRC(c0d404a7) SHA1(7991e711f6933bc3809f3c562e21a775a9a2dcf3) )
327   ROM_LOAD32_BYTE("9.bin",  0x000002, 0x020000, CRC(6b303aa9) SHA1(1750da9148978f59904c2bf9e99f967e5bdd5a92) )
328   ROM_LOAD32_BYTE("10.bin", 0x000003, 0x020000, CRC(6d0107bc) SHA1(a6f30a482586136304af510eee0a93df450673bd) )
329
330   ROM_REGION( 0x080000, "gfx3", ROMREGION_ERASE00 )
331   ROM_LOAD32_BYTE("11.bin", 0x000000, 0x020000, CRC(e124c0b5) SHA1(9b819691b7ca7f0561f4fce05083c8507e138bfe) )
332   ROM_LOAD32_BYTE("12.bin", 0x000001, 0x020000, CRC(ae4a8707) SHA1(f54337e4b666dc2f38df0ea96e9c8f4d7c4ebe52) )
333   ROM_LOAD32_BYTE("13.bin", 0x000002, 0x020000, CRC(f06925d1) SHA1(a45b72da57c7d967dec2fcad12e6a7864f5442e8) )
334   ROM_LOAD32_BYTE("14.bin", 0x000003, 0x020000, CRC(07252636) SHA1(00730c203e20af9e18a792e26de7aeac5d090ebf) )
335
336   ROM_REGION(0x80000, "oki", 0 )
337   ROM_LOAD("15.bin", 0x000000, 0x080000, CRC(d3aff355) SHA1(117f7bbd6cab370f65e308d78291732dfc079365) )
338ROM_END
339
340
341GAME( 199?, 3x3puzzl,  0,          _3x3puzzle,  _3x3puzzle,  driver_device, 0,       ROT0, "Ace",      "3X3 Puzzle (Enterprise)", 0 )
342GAME( 199?, 3x3puzzla, 3x3puzzl,   _3x3puzzle,  _3x3puzzle,  driver_device, 0,       ROT0, "Ace",      "3X3 Puzzle (Normal)", 0 )
trunk/src/mame/mame.lst
r18383r18384
1025810258bingor5         // (c) 2002 Unknown
1025910259galgame         // (c) 1971 Computer Recreations, Inc
1026010260ichiban         // (c) 199? Excel
102613x3puzzl      // (c) 199? Ace
102623x3puzzla      // (c) 199? Ace
1026110263
1026210264// InterFlip / Recreativos Franco
1026310265videopkr      // (c) 1984 InterFlip
trunk/src/mame/mame.mak
r18383r18384
17081708   $(DRIVERS)/1945kiii.o \
17091709   $(DRIVERS)/39in1.o \
17101710   $(DRIVERS)/3do.o $(MACHINE)/3do.o \
1711   $(DRIVERS)/3x3puzzl.o \
17111712   $(DRIVERS)/4enraya.o $(VIDEO)/4enraya.o \
17121713   $(DRIVERS)/5clown.o \
17131714   $(DRIVERS)/acefruit.o \

Previous 199869 Revisions Next


© 1997-2024 The MAME Team