Previous 199869 Revisions Next

r34903 Saturday 7th February, 2015 at 08:32:43 UTC by Osso
darkmist.c, mustache.c, panicr.c: added save state support, small cleanups (nw)
t5182_device: moved internal ROM in the device, instead of having it in the games' romsets. General cleanups to bring the device closer to modern MAME (nw)
[src/mame/audio]t5182.c t5182.h
[src/mame/drivers]darkmist.c mustache.c panicr.c
[src/mame/includes]darkmist.h mustache.h
[src/mame/video]darkmist.c mustache.c

trunk/src/mame/audio/t5182.c
r243414r243415
152152const device_type T5182 = &device_creator<t5182_device>;
153153
154154t5182_device::t5182_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
155   : device_t(mconfig, T5182, "T5182 MCU", tag, owner, clock, "toshiba_t5182", __FILE__),
156   m_t5182_sharedram(NULL),
155   : device_t(mconfig, T5182, "T5182 MCU", tag, owner, clock, "t5182", __FILE__),
156   m_ourcpu(*this, "t5182_z80"),
157   m_sharedram(*this, "sharedram"),
157158   m_irqstate(0),
158159   m_semaphore_main(0),
159160   m_semaphore_snd(0)
160161{
161162}
162163
163//-------------------------------------------------
164//  device_config_complete - perform any
165//  operations now that the configuration is
166//  complete
167//-------------------------------------------------
168164
169void t5182_device::device_config_complete()
170{
171}
172
173165//-------------------------------------------------
174166//  device_start - device-specific startup
175167//-------------------------------------------------
176168
177169void t5182_device::device_start()
178170{
179   m_t5182_sharedram = reinterpret_cast<UINT8 *>(machine().root_device().memshare("t5182_sharedram")->ptr());
180
181   save_pointer(NAME(m_t5182_sharedram), sizeof(UINT8));
171   m_setirq_cb = timer_alloc(SETIRQ_CB);
172   
182173   save_item(NAME(m_irqstate));
183174   save_item(NAME(m_semaphore_main));
184175   save_item(NAME(m_semaphore_snd));
185
186   m_ourcpu = machine().device<cpu_device>("t5182_z80");
187176}
188177
189178READ8_MEMBER(t5182_device::sharedram_r)
190179{
191   return m_t5182_sharedram[offset];
180   return m_sharedram[offset];
192181}
193182
194183WRITE8_MEMBER(t5182_device::sharedram_w)
195184{
196   m_t5182_sharedram[offset] = data;
185   m_sharedram[offset] = data;
197186}
198187
199188TIMER_CALLBACK_MEMBER( t5182_device::setirq_callback )
r243414r243415
230219      m_ourcpu->set_input_line(0,ASSERT_LINE);
231220}
232221
222void t5182_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
223{
224   switch (id)
225   {
226      case SETIRQ_CB:
227         setirq_callback(ptr, param);
228         break;
229      default:
230         assert_always(FALSE, "Unknown id in t5182_device::device_timer");
231   }
232}
233233
234
235234WRITE8_MEMBER( t5182_device::sound_irq_w )
236235{
237   space.machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), CPU_ASSERT);
236   synchronize(SETIRQ_CB, CPU_ASSERT);
238237}
239238
240239WRITE8_MEMBER( t5182_device::ym2151_irq_ack_w )
241240{
242   space.machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), YM2151_ACK);
241   synchronize(SETIRQ_CB, YM2151_ACK);
243242}
244243
245244WRITE8_MEMBER( t5182_device::cpu_irq_ack_w )
246245{
247   space.machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), CPU_CLEAR);
246   synchronize(SETIRQ_CB, CPU_CLEAR);
248247}
249248
250249WRITE_LINE_MEMBER(t5182_device::ym2151_irq_handler)
251250{
252251   if (state)
253      machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), YM2151_ASSERT);
252      synchronize(SETIRQ_CB, YM2151_ASSERT);
254253   else
255      machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), YM2151_CLEAR);
254      synchronize(SETIRQ_CB, YM2151_CLEAR);
256255}
257256
258257READ8_MEMBER(t5182_device::sharedram_semaphore_snd_r)
r243414r243415
285284   return m_semaphore_main | (m_irqstate & 2);
286285}
287286
287// ROM definition for the QS1000 internal program ROM
288ROM_START( t5182 )
289   ROM_REGION( 0x2000, "cpu", 0 )
290   ROM_LOAD( "t5182.rom",   0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) )
291ROM_END
292
288293//-------------------------------------------------
289//  MACHINE_CONFIG_FRAGMENT( t5182 )
294//  rom_region - return a pointer to the device's
295//  internal ROM region
290296//-------------------------------------------------
297const rom_entry *t5182_device::device_rom_region() const
298{
299   return ROM_NAME( t5182 );
300}
291301
292MACHINE_CONFIG_FRAGMENT( t5182 )
293   MCFG_CPU_ADD("t5182_z80", Z80, T5182_CLOCK)
294   MCFG_CPU_PROGRAM_MAP(t5182_map)
295   MCFG_CPU_IO_MAP(t5182_io)
302INPUT_PORTS_START(t5182)
303   PORT_START("T5182_COIN")
304   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2)
305   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(2)
306INPUT_PORTS_END
296307
297MACHINE_CONFIG_END
308//-------------------------------------------------
309//  input_ports - return a pointer to the implicit
310//  input ports description for this device
311//-------------------------------------------------
298312
313ioport_constructor t5182_device::device_input_ports() const
314{
315   return INPUT_PORTS_NAME(t5182);
316}
317   
299318
300319   // 4000-407F    RAM shared with main CPU
301320   // 4000 output queue length
r243414r243415
315334   //  A0XX
316335   // rest unused
317336ADDRESS_MAP_START( t5182_map, AS_PROGRAM, 8, t5182_device )
318   AM_RANGE(0x0000, 0x1fff) AM_ROM // internal ROM
337   AM_RANGE(0x0000, 0x1fff) AM_ROM AM_REGION("cpu", 0) // internal ROM
319338   AM_RANGE(0x2000, 0x27ff) AM_RAM AM_MIRROR(0x1800) // internal RAM
320   AM_RANGE(0x4000, 0x40ff) AM_RAM AM_MIRROR(0x3F00) AM_SHARE("t5182_sharedram") // 2016 with four 74ls245s, one each for main and t5182 address and data. pins 23, 22, 20, 19, 18 are all tied low so only 256 bytes are usable
321   AM_RANGE(0x8000, 0xffff) AM_ROM // external ROM
339   AM_RANGE(0x4000, 0x40ff) AM_RAM AM_MIRROR(0x3F00) AM_SHARE("sharedram") // 2016 with four 74ls245s, one each for main and t5182 address and data. pins 23, 22, 20, 19, 18 are all tied low so only 256 bytes are usable
340   AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION(":t5182_z80", 0) // external ROM
322341ADDRESS_MAP_END
323342
324343
r243414r243415
334353   // 50  W test mode status flags (bit 0 = ROM test fail, bit 1 = RAM test fail, bit 2 = YM2151 IRQ not received)
335354ADDRESS_MAP_START( t5182_io, AS_IO, 8, t5182_device )
336355   ADDRESS_MAP_GLOBAL_MASK(0xff)
337   AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
338   AM_RANGE(0x10, 0x10) AM_DEVWRITE("t5182", t5182_device, sharedram_semaphore_snd_acquire_w)
339   AM_RANGE(0x11, 0x11) AM_DEVWRITE("t5182", t5182_device, sharedram_semaphore_snd_release_w)
340   AM_RANGE(0x12, 0x12) AM_DEVWRITE("t5182", t5182_device, ym2151_irq_ack_w)
341   AM_RANGE(0x13, 0x13) AM_DEVWRITE("t5182", t5182_device, cpu_irq_ack_w)
342   AM_RANGE(0x20, 0x20) AM_DEVREAD("t5182", t5182_device, sharedram_semaphore_main_r)
343   AM_RANGE(0x30, 0x30) AM_READ_PORT(T5182COINPORT)
356   AM_RANGE(0x00, 0x01) AM_DEVREADWRITE(":ymsnd", ym2151_device, read, write)
357   AM_RANGE(0x10, 0x10) AM_WRITE(sharedram_semaphore_snd_acquire_w)
358   AM_RANGE(0x11, 0x11) AM_WRITE(sharedram_semaphore_snd_release_w)
359   AM_RANGE(0x12, 0x12) AM_WRITE(ym2151_irq_ack_w)
360   AM_RANGE(0x13, 0x13) AM_WRITE(cpu_irq_ack_w)
361   AM_RANGE(0x20, 0x20) AM_READ(sharedram_semaphore_main_r)
362   AM_RANGE(0x30, 0x30) AM_READ_PORT("T5182_COIN")
344363ADDRESS_MAP_END
364
365
366//-------------------------------------------------
367//  MACHINE_CONFIG_FRAGMENT( t5182 )
368//-------------------------------------------------
369
370MACHINE_CONFIG_FRAGMENT( t5182 )
371   MCFG_CPU_ADD("t5182_z80", Z80, T5182_CLOCK)
372   MCFG_CPU_PROGRAM_MAP(t5182_map)
373   MCFG_CPU_IO_MAP(t5182_io)
374
375MACHINE_CONFIG_END
376
377//-------------------------------------------------
378//  machine_config_additions - device-specific
379//  machine configurations
380//-------------------------------------------------
381
382machine_config_constructor t5182_device::device_mconfig_additions() const
383{
384   return MACHINE_CONFIG_NAME( t5182 );
385}
trunk/src/mame/audio/t5182.h
r243414r243415
11#include "sound/2151intf.h"
22#include "cpu/z80/z80.h"
33
4#define T5182COINPORT "T5182_COIN"
5
64class t5182_device : public device_t
75
86{
r243414r243415
2018      CPU_CLEAR
2119   };
2220
21   enum
22   {
23      SETIRQ_CB
24   };
25   
2326   DECLARE_WRITE8_MEMBER(sound_irq_w );
2427   DECLARE_READ8_MEMBER(sharedram_semaphore_snd_r);
2528   DECLARE_WRITE8_MEMBER(sharedram_semaphore_main_acquire_w);
r243414r243415
3538
3639protected:
3740   // device-level overrides
38   virtual void device_config_complete();
3941   virtual void device_start();
42   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
43   virtual const rom_entry *device_rom_region() const;
44   virtual ioport_constructor device_input_ports() const;
45   virtual machine_config_constructor device_mconfig_additions() const;
4046
4147private:
4248   // internal state
43   cpu_device *m_ourcpu;
44   UINT8 *m_t5182_sharedram;
49   required_device<cpu_device> m_ourcpu;
50   required_shared_ptr<UINT8> m_sharedram;
4551   int m_irqstate;
4652   int m_semaphore_main;
4753   int m_semaphore_snd;
48
54   emu_timer *m_setirq_cb;
4955   TIMER_CALLBACK_MEMBER( setirq_callback );
5056};
5157
5258extern const device_type T5182;
53
54ADDRESS_MAP_EXTERN( t5182_map, 8 );
55ADDRESS_MAP_EXTERN( t5182_io, 8 );
56
57MACHINE_CONFIG_EXTERN( t5182 );
58
59#define MCFG_T5182_ADD(_tag) \
60   MCFG_DEVICE_ADD(_tag, T5182, 0)
trunk/src/mame/drivers/darkmist.c
r243414r243415
2828#include "includes/darkmist.h"
2929
3030
31WRITE8_MEMBER(darkmist_state::darkmist_hw_w)
31WRITE8_MEMBER(darkmist_state::hw_w)
3232{
3333   m_hw=data;
3434   membank("bank1")->set_base(&memregion("maincpu")->base()[0x010000+((data&0x80)?0x4000:0)]);
r243414r243415
4040   AM_RANGE(0xc801, 0xc801) AM_READ_PORT("P1")
4141   AM_RANGE(0xc802, 0xc802) AM_READ_PORT("P2")
4242   AM_RANGE(0xc803, 0xc803) AM_READ_PORT("START")
43   AM_RANGE(0xc804, 0xc804) AM_WRITE(darkmist_hw_w)
43   AM_RANGE(0xc804, 0xc804) AM_WRITE(hw_w)
4444   AM_RANGE(0xc805, 0xc805) AM_WRITEONLY AM_SHARE("spritebank")
4545   AM_RANGE(0xc806, 0xc806) AM_READ_PORT("DSW1")
4646   AM_RANGE(0xc807, 0xc807) AM_READ_PORT("DSW2")
r243414r243415
173173   PORT_DIPSETTING(    0x80, DEF_STR( No ) )
174174   PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
175175
176   PORT_START(T5182COINPORT)
177   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2)
178   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(2)
179
180176INPUT_PORTS_END
181177
182178static const gfx_layout charlayout =
r243414r243415
213209   GFXDECODE_ENTRY( "gfx3", 0, tilelayout,  0, 16*4 )
214210GFXDECODE_END
215211
216TIMER_DEVICE_CALLBACK_MEMBER(darkmist_state::darkmist_scanline)
212TIMER_DEVICE_CALLBACK_MEMBER(darkmist_state::scanline)
217213{
218214   int scanline = param;
219215
r243414r243415
230226   /* basic machine hardware */
231227   MCFG_CPU_ADD("maincpu", Z80,4000000)         /* ? MHz */
232228   MCFG_CPU_PROGRAM_MAP(memmap)
233   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", darkmist_state, darkmist_scanline, "screen", 0, 1)
229   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", darkmist_state, scanline, "screen", 0, 1)
234230
235   MCFG_T5182_ADD("t5182")
236   MCFG_FRAGMENT_ADD(t5182)
231   MCFG_DEVICE_ADD("t5182", T5182, 0)
232   
237233
238234   /* video hardware */
239235   MCFG_SCREEN_ADD("screen", RASTER)
r243414r243415
241237   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
242238   MCFG_SCREEN_SIZE(256, 256)
243239   MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1)
244   MCFG_SCREEN_UPDATE_DRIVER(darkmist_state, screen_update_darkmist)
240   MCFG_SCREEN_UPDATE_DRIVER(darkmist_state, screen_update)
245241   MCFG_SCREEN_PALETTE("palette")
246242
247243   MCFG_GFXDECODE_ADD("gfxdecode", "palette", darkmist)
r243414r243415
266262
267263   ROM_LOAD( "dm_16.rom", 0x10000, 0x08000, CRC(094579d9) SHA1(2449bc9ba38396912ee9b72dd870ea9fcff95776) )
268264
269   ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */
270   ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) )
271   ROM_LOAD( "dm_17.rom", 0x8000, 0x8000, CRC(7723dcae) SHA1(a0c69e7a7b6fd74f7ed6b9c6419aed94aabcd4b0) )
265   ROM_REGION( 0x8000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */
266   ROM_LOAD( "dm_17.rom", 0x0000, 0x8000, CRC(7723dcae) SHA1(a0c69e7a7b6fd74f7ed6b9c6419aed94aabcd4b0) )
272267
273268   ROM_REGION( 0x4000, "gfx1", 0 )
274269   ROM_LOAD( "dm_13.rom", 0x00000, 0x02000, CRC(38bb38d9) SHA1(d751990166dd3d503c5de7667679b96210061cd1) )
r243414r243415
395390   int i;
396391   UINT8 *ROM = memregion("t5182_z80")->base();
397392
398   for(i=0x8000;i<0x10000;i++)
393   for(i=0x0000;i<0x2000;i++)
399394      ROM[i] = BITSWAP8(ROM[i], 7,1,2,3,4,5,6,0);
400395}
401396
r243414r243415
473468   }
474469}
475470
476GAME( 1986, darkmist, 0, darkmist, darkmist, darkmist_state, darkmist, ROT270, "Taito Corporation", "The Lost Castle In Darkmist", GAME_IMPERFECT_GRAPHICS|GAME_NO_COCKTAIL )
471GAME( 1986, darkmist, 0, darkmist, darkmist, darkmist_state, darkmist, ROT270, "Taito Corporation", "The Lost Castle In Darkmist", GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
trunk/src/mame/drivers/mustache.c
r243414r243415
4343static ADDRESS_MAP_START( memmap, AS_PROGRAM, 8, mustache_state )
4444   AM_RANGE(0x0000, 0x7fff) AM_ROM
4545   AM_RANGE(0x8000, 0xbfff) AM_ROM
46   AM_RANGE(0xc000, 0xcfff) AM_RAM_WRITE(mustache_videoram_w) AM_SHARE("videoram")
46   AM_RANGE(0xc000, 0xcfff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
4747   AM_RANGE(0xd000, 0xd000) AM_DEVWRITE("t5182", t5182_device, sound_irq_w)
4848   AM_RANGE(0xd001, 0xd001) AM_DEVREAD("t5182", t5182_device, sharedram_semaphore_snd_r)
4949   AM_RANGE(0xd002, 0xd002) AM_DEVWRITE("t5182", t5182_device, sharedram_semaphore_main_acquire_w)
r243414r243415
5454   AM_RANGE(0xd802, 0xd802) AM_READ_PORT("START")
5555   AM_RANGE(0xd803, 0xd803) AM_READ_PORT("DSWA")
5656   AM_RANGE(0xd804, 0xd804) AM_READ_PORT("DSWB")
57   AM_RANGE(0xd806, 0xd806) AM_WRITE(mustache_scroll_w)
58   AM_RANGE(0xd807, 0xd807) AM_WRITE(mustache_video_control_w)
57   AM_RANGE(0xd806, 0xd806) AM_WRITE(scroll_w)
58   AM_RANGE(0xd807, 0xd807) AM_WRITE(video_control_w)
5959   AM_RANGE(0xe800, 0xefff) AM_WRITEONLY AM_SHARE("spriteram")
6060   AM_RANGE(0xf000, 0xffff) AM_RAM
6161ADDRESS_MAP_END
r243414r243415
123123   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
124124// There is an 8th dipswitch here, which controls screen flip, but the operator sheet implies it does it via hardware, i.e. not readable by cpu. May need further investigation.
125125
126   PORT_START(T5182COINPORT)
127   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2)
128   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(2)
129126INPUT_PORTS_END
130127
131128
r243414r243415
155152   GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0x80, 8 )
156153GFXDECODE_END
157154
158TIMER_DEVICE_CALLBACK_MEMBER(mustache_state::mustache_scanline)
155TIMER_DEVICE_CALLBACK_MEMBER(mustache_state::scanline)
159156{
160157   int scanline = param;
161158
r243414r243415
173170   /* basic machine hardware */
174171   MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK)
175172   MCFG_CPU_PROGRAM_MAP(memmap)
176   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", mustache_state, mustache_scanline, "screen", 0, 1)
173   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", mustache_state, scanline, "screen", 0, 1)
177174
178   MCFG_T5182_ADD("t5182")
179   MCFG_FRAGMENT_ADD(t5182)
175   MCFG_DEVICE_ADD("t5182", T5182, 0)
180176
177
181178   /* video hardware */
182179   MCFG_SCREEN_ADD("screen", RASTER)
183180   MCFG_SCREEN_REFRESH_RATE(56.747)
184181   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
185182   MCFG_SCREEN_SIZE(32*8, 32*8)
186183   MCFG_SCREEN_VISIBLE_AREA(1*8, 31*8-1, 0, 31*8-1)
187   MCFG_SCREEN_UPDATE_DRIVER(mustache_state, screen_update_mustache)
184   MCFG_SCREEN_UPDATE_DRIVER(mustache_state, screen_update)
188185   MCFG_SCREEN_PALETTE("palette")
189186
190187   MCFG_GFXDECODE_ADD("gfxdecode", "palette", mustache)
r243414r243415
207204   ROM_LOAD( "mustache.h18", 0x0000, 0x8000, CRC(123bd9b8) SHA1(33a7cba5c3a54b0b1a15dd1e24d298b6f7274321) )
208205   ROM_LOAD( "mustache.h16", 0x8000, 0x4000, CRC(62552beb) SHA1(ee10991d7de0596608fa1db48805781cbfbbdb9f) )
209206
210   ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */
211   ROM_LOAD( "t5182.rom",   0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) )
212   ROM_LOAD( "mustache.e5", 0x8000, 0x8000, CRC(efbb1943) SHA1(3320e9eaeb776d09ed63f7dedc79e720674e6718) )
207   ROM_REGION( 0x8000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */
208   ROM_LOAD( "mustache.e5", 0x0000, 0x8000, CRC(efbb1943) SHA1(3320e9eaeb776d09ed63f7dedc79e720674e6718) )
213209
214210   ROM_REGION( 0x0c000, "gfx1",0)  /* BG tiles  */
215211   ROM_LOAD( "mustache.a13", 0x0000,  0x4000, CRC(9baee4a7) SHA1(31bcec838789462e67e54ebe7256db9fc4e51b69) )
r243414r243415
278274}
279275
280276
281GAME( 1987, mustache, 0, mustache, mustache, mustache_state, mustache, ROT90, "Seibu Kaihatsu (March license)", "Mustache Boy", 0 )
277GAME( 1987, mustache, 0, mustache, mustache, mustache_state, mustache, ROT90, "Seibu Kaihatsu (March license)", "Mustache Boy", GAME_SUPPORTS_SAVE )
trunk/src/mame/drivers/panicr.c
r243414r243415
6969public:
7070   panicr_state(const machine_config &mconfig, device_type type, const char *tag)
7171      : driver_device(mconfig, type, tag),
72      m_mainram(*this, "mainram"),
73      m_spriteram(*this, "spriteram"),
74      m_textram(*this, "textram"),
75      m_spritebank(*this, "spritebank"),
7672      m_maincpu(*this, "maincpu"),
7773      m_t5182(*this, "t5182"),
7874      m_gfxdecode(*this, "gfxdecode"),
7975      m_screen(*this, "screen"),
80      m_palette(*this, "palette") { }
76      m_palette(*this, "palette"),
77      m_mainram(*this, "mainram"),
78      m_spriteram(*this, "spriteram"),
79      m_textram(*this, "textram"),
80      m_spritebank(*this, "spritebank") { }
8181
82   required_shared_ptr<UINT8> m_mainram;
83   required_shared_ptr<UINT8> m_spriteram;
84   required_shared_ptr<UINT8> m_textram;
85   required_shared_ptr<UINT8> m_spritebank;
86
8782   required_device<cpu_device> m_maincpu;
8883   required_device<t5182_device> m_t5182;
8984   required_device<gfxdecode_device> m_gfxdecode;
9085   required_device<screen_device> m_screen;
9186   required_device<palette_device> m_palette;
87   
88   required_shared_ptr<UINT8> m_mainram;
89   required_shared_ptr<UINT8> m_spriteram;
90   required_shared_ptr<UINT8> m_textram;
91   required_shared_ptr<UINT8> m_spritebank;
9292
9393   tilemap_t *m_bgtilemap;
9494   tilemap_t *m_infotilemap_2;
95
9695   tilemap_t *m_txttilemap;
96
9797   int m_scrollx;
98   bitmap_ind16 *m_temprender;
99   bitmap_ind16 *m_tempbitmap_1;
100   rectangle m_tempbitmap_clip;
98101
99   DECLARE_READ8_MEMBER(panicr_collision_r);
100   DECLARE_WRITE8_MEMBER(panicr_scrollx_lo_w);
101   DECLARE_WRITE8_MEMBER(panicr_scrollx_hi_w);
102   DECLARE_WRITE8_MEMBER(panicr_output_w);
102   DECLARE_READ8_MEMBER(collision_r);
103   DECLARE_WRITE8_MEMBER(scrollx_lo_w);
104   DECLARE_WRITE8_MEMBER(scrollx_hi_w);
105   DECLARE_WRITE8_MEMBER(output_w);
103106   DECLARE_READ8_MEMBER(t5182shared_r);
104107   DECLARE_WRITE8_MEMBER(t5182shared_w);
105108
106   DECLARE_DRIVER_INIT(panicr);
107109   TILE_GET_INFO_MEMBER(get_bgtile_info);
108110   TILE_GET_INFO_MEMBER(get_infotile_info);
109111   TILE_GET_INFO_MEMBER(get_infotile_info_2);
110112   TILE_GET_INFO_MEMBER(get_infotile_info_3);
111113   TILE_GET_INFO_MEMBER(get_infotile_info_4);
112
113114   TILE_GET_INFO_MEMBER(get_txttile_info);
115   
116   DECLARE_DRIVER_INIT(panicr);
114117   virtual void video_start();
115118   DECLARE_PALETTE_INIT(panicr);
116   UINT32 screen_update_panicr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
117   TIMER_DEVICE_CALLBACK_MEMBER(panicr_scanline);
119   
120   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
118121   void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect );
119
120   bitmap_ind16 *m_temprender;
121
122   bitmap_ind16 *m_tempbitmap_1;
123   rectangle m_tempbitmap_clip;
122   
123   TIMER_DEVICE_CALLBACK_MEMBER(scanline);
124124};
125125
126126
r243414r243415
243243
244244   m_txttilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(panicr_state::get_txttile_info),this),TILEMAP_SCAN_ROWS,8,8,32,32 );
245245   m_txttilemap->configure_groups(*m_gfxdecode->gfx(0), 0);
246   
247   save_item(NAME(m_scrollx));
246248}
247249
248250void panicr_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect )
249251{
250   UINT8 *spriteram = m_spriteram;
251252   int offs,flipx,flipy,x,y,color,sprite;
252253
253254
r243414r243415
256257   for (offs = m_spriteram.bytes() - 16; offs>=0; offs-=16)
257258   {
258259      flipx = 0;
259      flipy = spriteram[offs+1] & 0x80;
260      y = spriteram[offs+2];
261      x = spriteram[offs+3];
262      if (spriteram[offs+1] & 0x40) x -= 0x100;
260      flipy = m_spriteram[offs+1] & 0x80;
261      y = m_spriteram[offs+2];
262      x = m_spriteram[offs+3];
263      if (m_spriteram[offs+1] & 0x40) x -= 0x100;
263264
264      if (spriteram[offs+1] & 0x20)
265      if (m_spriteram[offs+1] & 0x20)
265266      {
266267         // often set
267268      }
268269
269      if (spriteram[offs+1] & 0x10)
270      if (m_spriteram[offs+1] & 0x10)
270271      {
271         popmessage("(spriteram[offs+1] & 0x10) %02x\n", (spriteram[offs+1] & 0x10));
272         popmessage("(spriteram[offs+1] & 0x10) %02x\n", (m_spriteram[offs+1] & 0x10));
272273      }
273274
274275
275      color = spriteram[offs+1] & 0x0f;
276      sprite = spriteram[offs+0] | (*m_spritebank << 8);
276      color = m_spriteram[offs+1] & 0x0f;
277      sprite = m_spriteram[offs+0] | (*m_spritebank << 8);
277278
278279      m_gfxdecode->gfx(2)->transmask(bitmap,cliprect,
279280            sprite,
r243414r243415
282283   }
283284}
284285
285UINT32 panicr_state::screen_update_panicr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
286UINT32 panicr_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
286287{
287288   m_bgtilemap->set_scrollx(0, m_scrollx);
288289   m_bgtilemap->draw(screen, *m_temprender, m_tempbitmap_clip, 0,0);
r243414r243415
341342
342343***************************************************************************/
343344
344READ8_MEMBER(panicr_state::panicr_collision_r)
345READ8_MEMBER(panicr_state::collision_r)
345346{
346347   // re-render the collision data here
347348   // collisions are based on 2 bits from the tile data, relative to a page of tiles
r243414r243415
384385}
385386
386387
387WRITE8_MEMBER(panicr_state::panicr_scrollx_lo_w)
388WRITE8_MEMBER(panicr_state::scrollx_lo_w)
388389{
389   logerror("panicr_scrollx_lo_w %02x\n", data);
390   logerror("scrollx_lo_w %02x\n", data);
390391   m_scrollx = (m_scrollx & 0xff00) | (data << 1 & 0xfe) | (data >> 7 & 0x01);
391392}
392393
393WRITE8_MEMBER(panicr_state::panicr_scrollx_hi_w)
394WRITE8_MEMBER(panicr_state::scrollx_hi_w)
394395{
395   logerror("panicr_scrollx_hi_w %02x\n", data);
396   logerror("scrollx_hi_w %02x\n", data);
396397   m_scrollx = (m_scrollx & 0xff) | ((data &0xf0) << 4) | ((data & 0x0f) << 12);
397398}
398399
399WRITE8_MEMBER(panicr_state::panicr_output_w)
400WRITE8_MEMBER(panicr_state::output_w)
400401{
401402   // d6, d7: play counter? (it only triggers on 1st coin)
402403   coin_counter_w(machine(), 0, (data & 0x40) ? 1 : 0);
403404   coin_counter_w(machine(), 1, (data & 0x80) ? 1 : 0);
404405
405   logerror("panicr_output_w %02x\n", data);
406   logerror("output_w %02x\n", data);
406407
407408   // other bits: ?
408409}
r243414r243415
426427   AM_RANGE(0x00000, 0x01fff) AM_RAM AM_SHARE("mainram")
427428   AM_RANGE(0x02000, 0x03cff) AM_RAM AM_SHARE("spriteram") // how big is sprite ram, some places definitely have sprites at 3000+
428429   AM_RANGE(0x03d00, 0x03fff) AM_RAM
429   AM_RANGE(0x08000, 0x0bfff) AM_READ(panicr_collision_r)
430   AM_RANGE(0x08000, 0x0bfff) AM_READ(collision_r)
430431   AM_RANGE(0x0c000, 0x0cfff) AM_RAM AM_SHARE("textram")
431432   AM_RANGE(0x0d000, 0x0d000) AM_DEVWRITE("t5182", t5182_device, sound_irq_w)
432433   AM_RANGE(0x0d002, 0x0d002) AM_DEVWRITE("t5182", t5182_device, sharedram_semaphore_main_acquire_w)
r243414r243415
438439   AM_RANGE(0x0d404, 0x0d404) AM_READ_PORT("START")
439440   AM_RANGE(0x0d406, 0x0d406) AM_READ_PORT("DSW1")
440441   AM_RANGE(0x0d407, 0x0d407) AM_READ_PORT("DSW2")
441   AM_RANGE(0x0d802, 0x0d802) AM_WRITE(panicr_scrollx_hi_w)
442   AM_RANGE(0x0d804, 0x0d804) AM_WRITE(panicr_scrollx_lo_w)
443   AM_RANGE(0x0d80a, 0x0d80a) AM_WRITE(panicr_output_w)
442   AM_RANGE(0x0d802, 0x0d802) AM_WRITE(scrollx_hi_w)
443   AM_RANGE(0x0d804, 0x0d804) AM_WRITE(scrollx_lo_w)
444   AM_RANGE(0x0d80a, 0x0d80a) AM_WRITE(output_w)
444445   AM_RANGE(0x0d80c, 0x0d80c) AM_WRITEONLY AM_SHARE("spritebank")
445446   AM_RANGE(0x0d818, 0x0d818) AM_WRITENOP // watchdog?
446447   AM_RANGE(0xf0000, 0xfffff) AM_ROM
r243414r243415
519520   PORT_DIPSETTING(    0x80, DEF_STR( Upright ) )
520521   PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
521522
522   PORT_START(T5182COINPORT)
523   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2)
524   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(2)
525523INPUT_PORTS_END
526524
527525
r243414r243415
594592GFXDECODE_END
595593
596594
597TIMER_DEVICE_CALLBACK_MEMBER(panicr_state::panicr_scanline)
595TIMER_DEVICE_CALLBACK_MEMBER(panicr_state::scanline)
598596{
599597   int scanline = param;
600598
r243414r243415
608606static MACHINE_CONFIG_START( panicr, panicr_state )
609607   MCFG_CPU_ADD("maincpu", V20,MASTER_CLOCK/2) /* Sony 8623h9 CXQ70116D-8 (V20 compatible) */
610608   MCFG_CPU_PROGRAM_MAP(panicr_map)
611   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", panicr_state, panicr_scanline, "screen", 0, 1)
609   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", panicr_state, scanline, "screen", 0, 1)
612610
613   MCFG_T5182_ADD("t5182")
614   MCFG_FRAGMENT_ADD(t5182)
611   MCFG_DEVICE_ADD("t5182", T5182, 0)
612   
615613
616614   MCFG_SCREEN_ADD("screen", RASTER)
617615   MCFG_SCREEN_REFRESH_RATE(60)
r243414r243415
619617   MCFG_SCREEN_SIZE(32*8, 32*8)
620618//  MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
621619   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
622   MCFG_SCREEN_UPDATE_DRIVER(panicr_state, screen_update_panicr)
620   MCFG_SCREEN_UPDATE_DRIVER(panicr_state, screen_update)
623621   MCFG_SCREEN_PALETTE("palette")
624622
625623   MCFG_GFXDECODE_ADD("gfxdecode", "palette", panicr)
r243414r243415
643641   ROM_LOAD16_BYTE("2.19m",   0x0f0000, 0x08000, CRC(3d48b0b5) SHA1(a6e8b38971a8964af463c16f32bb7dbd301dd314) )
644642   ROM_LOAD16_BYTE("1.19n",   0x0f0001, 0x08000, CRC(674131b9) SHA1(63499cd5ad39e79e70f3ba7060680f0aa133f095) )
645643
646   ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */
647   ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) )
648   ROM_LOAD( "22d.bin",   0x8000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) )
644   ROM_REGION( 0x8000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */
645   ROM_LOAD( "22d.bin",   0x0000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) )
649646
650647   ROM_REGION( 0x04000, "gfx1", 0 )
651648   ROM_LOAD( "13f.bin", 0x000000, 0x2000, CRC(4e6b3c04) SHA1(f388969d5d822df0eaa4d8300cbf9cee47468360) )
r243414r243415
682679   ROM_LOAD16_BYTE("2g.19m",   0x0f0000, 0x08000, CRC(cf759403) SHA1(1a0911c943ecc752e46873c9a5da981745f7562d) )
683680   ROM_LOAD16_BYTE("1g.19n",   0x0f0001, 0x08000, CRC(06877f9b) SHA1(8b92209d6422ff2b1f3cb66bd39a3ff84e399eec) )
684681
685   ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */
686   ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) )
687   ROM_LOAD( "22d.bin",   0x8000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) )
682   ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */
683   ROM_LOAD( "22d.bin",   0x0000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) )
688684
689685   ROM_REGION( 0x04000, "gfx1", 0 )
690686   ROM_LOAD( "13f.bin", 0x000000, 0x2000, CRC(4e6b3c04) SHA1(f388969d5d822df0eaa4d8300cbf9cee47468360) )
r243414r243415
832828}
833829
834830
835GAME( 1986, panicr,  0,      panicr,  panicr, panicr_state,  panicr, ROT270, "Seibu Kaihatsu (Taito license)", "Panic Road (Japan)", GAME_IMPERFECT_GRAPHICS )
836GAME( 1986, panicrg, panicr, panicr,  panicr, panicr_state,  panicr, ROT270, "Seibu Kaihatsu (Tuning license)", "Panic Road (Germany)", GAME_IMPERFECT_GRAPHICS )
831GAME( 1986, panicr,  0,      panicr,  panicr, panicr_state,  panicr, ROT270, "Seibu Kaihatsu (Taito license)", "Panic Road (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
832GAME( 1986, panicrg, panicr, panicr,  panicr, panicr_state,  panicr, ROT270, "Seibu Kaihatsu (Tuning license)", "Panic Road (Germany)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
trunk/src/mame/includes/darkmist.h
r243414r243415
55public:
66   darkmist_state(const machine_config &mconfig, device_type type, const char *tag)
77      : driver_device(mconfig, type, tag),
8      m_maincpu(*this, "maincpu"),
9      m_t5182(*this, "t5182"),
10      m_gfxdecode(*this, "gfxdecode"),
11      m_palette(*this, "palette"),
812      m_spritebank(*this, "spritebank"),
913      m_scroll(*this, "scroll"),
1014      m_videoram(*this, "videoram"),
1115      m_workram(*this, "workram"),
12      m_spriteram(*this, "spriteram"),
13      m_maincpu(*this, "maincpu"),
14      m_t5182(*this, "t5182"),
15      m_gfxdecode(*this, "gfxdecode"),
16      m_palette(*this, "palette") { }
16      m_spriteram(*this, "spriteram") { }
1717
18   required_device<cpu_device> m_maincpu;
19   required_device<t5182_device> m_t5182;
20   required_device<gfxdecode_device> m_gfxdecode;
21   required_device<palette_device> m_palette;
22
1823   required_shared_ptr<UINT8> m_spritebank;
1924   required_shared_ptr<UINT8> m_scroll;
2025   required_shared_ptr<UINT8> m_videoram;
2126   required_shared_ptr<UINT8> m_workram;
2227   required_shared_ptr<UINT8> m_spriteram;
2328
24   required_device<cpu_device> m_maincpu;
25   required_device<t5182_device> m_t5182;
26   required_device<gfxdecode_device> m_gfxdecode;
27   required_device<palette_device> m_palette;
28
2929   int m_hw;
3030   tilemap_t *m_bgtilemap;
3131   tilemap_t *m_fgtilemap;
3232   tilemap_t *m_txtilemap;
3333
34   DECLARE_WRITE8_MEMBER(darkmist_hw_w);
35   DECLARE_DRIVER_INIT(darkmist);
34   DECLARE_WRITE8_MEMBER(hw_w);
35
3636   TILE_GET_INFO_MEMBER(get_bgtile_info);
3737   TILE_GET_INFO_MEMBER(get_fgtile_info);
3838   TILE_GET_INFO_MEMBER(get_txttile_info);
39
40   DECLARE_DRIVER_INIT(darkmist);
3941   virtual void video_start();
4042   DECLARE_PALETTE_INIT(darkmist);
41   UINT32 screen_update_darkmist(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
42   TIMER_DEVICE_CALLBACK_MEMBER(darkmist_scanline);
43
44   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
4345   void decrypt_gfx();
4446   void decrypt_snd();
47   
48   TIMER_DEVICE_CALLBACK_MEMBER(scanline);
4549};
trunk/src/mame/includes/mustache.h
r243414r243415
55public:
66   mustache_state(const machine_config &mconfig, device_type type, const char *tag)
77      : driver_device(mconfig, type, tag),
8      m_videoram(*this, "videoram"),
9      m_spriteram(*this, "spriteram"),
108      m_maincpu(*this, "maincpu"),
119      m_cpu_decrypt(*this, "seibu_sound"),
1210      m_gfxdecode(*this, "gfxdecode"),
1311      m_screen(*this, "screen"),
14      m_palette(*this, "palette") { }
12      m_palette(*this, "palette"),
13      m_videoram(*this, "videoram"),
14      m_spriteram(*this, "spriteram") { }
1515
16   required_shared_ptr<UINT8> m_videoram;
17   required_shared_ptr<UINT8> m_spriteram;
18
1916   required_device<cpu_device> m_maincpu;
2017   required_device<seibu_sound_device> m_cpu_decrypt;
2118   required_device<gfxdecode_device> m_gfxdecode;
2219   required_device<screen_device> m_screen;
2320   required_device<palette_device> m_palette;
2421
22   required_shared_ptr<UINT8> m_videoram;
23   required_shared_ptr<UINT8> m_spriteram;
24
2525   tilemap_t *m_bg_tilemap;
2626   int m_control_byte;
27   DECLARE_WRITE8_MEMBER(mustache_videoram_w);
28   DECLARE_WRITE8_MEMBER(mustache_video_control_w);
29   DECLARE_WRITE8_MEMBER(mustache_scroll_w);
27   
28   DECLARE_WRITE8_MEMBER(videoram_w);
29   DECLARE_WRITE8_MEMBER(video_control_w);
30   DECLARE_WRITE8_MEMBER(scroll_w);
31   
32   TILE_GET_INFO_MEMBER(get_bg_tile_info);
33   
3034   DECLARE_DRIVER_INIT(mustache);
31   TILE_GET_INFO_MEMBER(get_bg_tile_info);
3235   virtual void video_start();
3336   DECLARE_PALETTE_INIT(mustache);
34   UINT32 screen_update_mustache(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
35   TIMER_DEVICE_CALLBACK_MEMBER(mustache_scanline);
37   
38   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
3639   void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect );
40   
41   TIMER_DEVICE_CALLBACK_MEMBER(scanline);
3742};
trunk/src/mame/video/darkmist.c
r243414r243415
4848
4949TILE_GET_INFO_MEMBER(darkmist_state::get_txttile_info)
5050{
51   UINT8 *videoram = m_videoram;
5251   int code,attr,pal;
5352
54   code=videoram[tile_index];
55   attr=videoram[tile_index+0x400];
53   code=m_videoram[tile_index];
54   attr=m_videoram[tile_index+0x400];
5655   pal=(attr>>1);
5756
5857   code+=(attr&1)<<8;
r243414r243415
102101   m_txtilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(darkmist_state::get_txttile_info),this),TILEMAP_SCAN_ROWS,8,8,32,32 );
103102   m_fgtilemap->set_transparent_pen(0);
104103   m_txtilemap->set_transparent_pen(0);
104   
105   save_item(NAME(m_hw));
105106}
106107
107UINT32 darkmist_state::screen_update_darkmist(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
108UINT32 darkmist_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
108109{
109   UINT8 *spriteram = m_spriteram;
110
110   
111111#define DM_GETSCROLL(n) (((m_scroll[(n)]<<1)&0xff) + ((m_scroll[(n)]&0x80)?1:0) +( ((m_scroll[(n)-1]<<4) | (m_scroll[(n)-1]<<12) )&0xff00))
112112
113113   m_bgtilemap->set_scrollx(0, DM_GETSCROLL(0x2));
r243414r243415
139139      int i,fx,fy,tile,palette;
140140      for(i=0;i<m_spriteram.bytes();i+=32)
141141      {
142         fy=spriteram[i+1]&0x40;
143         fx=spriteram[i+1]&0x80;
142         fy=m_spriteram[i+1]&0x40;
143         fx=m_spriteram[i+1]&0x80;
144144
145         tile=spriteram[i+0];
145         tile=m_spriteram[i+0];
146146
147         if(spriteram[i+1]&0x20)
147         if(m_spriteram[i+1]&0x20)
148148            tile += (*m_spritebank << 8);
149149
150         palette=((spriteram[i+1])>>1)&0xf;
150         palette=((m_spriteram[i+1])>>1)&0xf;
151151
152         if(spriteram[i+1]&0x1)
152         if(m_spriteram[i+1]&0x1)
153153            palette=machine().rand()&15;
154154
155155         palette+=32;
r243414r243415
160160            tile,
161161            palette,
162162            fx,fy,
163            spriteram[i+3],spriteram[i+2],0 );
163            m_spriteram[i+3],m_spriteram[i+2],0 );
164164      }
165165   }
166166
trunk/src/mame/video/mustache.c
r243414r243415
4444   }
4545}
4646
47WRITE8_MEMBER(mustache_state::mustache_videoram_w)
47WRITE8_MEMBER(mustache_state::videoram_w)
4848{
49   UINT8 *videoram = m_videoram;
50   videoram[offset] = data;
49   m_videoram[offset] = data;
5150   m_bg_tilemap->mark_tile_dirty(offset / 2);
5251}
5352
54WRITE8_MEMBER(mustache_state::mustache_video_control_w)
53WRITE8_MEMBER(mustache_state::video_control_w)
5554{
5655   if (flip_screen() != (data & 0x01))
5756   {
r243414r243415
6867   }
6968}
7069
71WRITE8_MEMBER(mustache_state::mustache_scroll_w)
70WRITE8_MEMBER(mustache_state::scroll_w)
7271{
7372   m_bg_tilemap->set_scrollx(0, 0x100 - data);
7473   m_bg_tilemap->set_scrollx(1, 0x100 - data);
r243414r243415
7877
7978TILE_GET_INFO_MEMBER(mustache_state::get_bg_tile_info)
8079{
81   UINT8 *videoram = m_videoram;
82   int attr = videoram[2 * tile_index + 1];
83   int code = videoram[2 * tile_index] + ((attr & 0x60) << 3) + ((m_control_byte & 0x08) << 7);
80   int attr = m_videoram[2 * tile_index + 1];
81   int code = m_videoram[2 * tile_index] + ((attr & 0x60) << 3) + ((m_control_byte & 0x08) << 7);
8482   int color = attr & 0x0f;
8583
8684   SET_TILE_INFO_MEMBER(0, code, color, ((attr & 0x10) ? TILE_FLIPX : 0) | ((attr & 0x80) ? TILE_FLIPY : 0)   );
r243414r243415
9492         8, 8, 64, 32);
9593
9694   m_bg_tilemap->set_scroll_rows(4);
95   
96   save_item(NAME(m_control_byte));
9797}
9898
9999void mustache_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect )
r243414r243415
101101   rectangle clip = cliprect;
102102   gfx_element *gfx = m_gfxdecode->gfx(1);
103103   const rectangle &visarea = m_screen->visible_area();
104   UINT8 *spriteram = m_spriteram;
105104   int offs;
106105
107106   for (offs = 0;offs < m_spriteram.bytes();offs += 4)
108107   {
109      int sy = 240-spriteram[offs];
110      int sx = 240-spriteram[offs+3];
111      int code = spriteram[offs+2];
112      int attr = spriteram[offs+1];
108      int sy = 240-m_spriteram[offs];
109      int sx = 240-m_spriteram[offs+3];
110      int code = m_spriteram[offs+2];
111      int attr = m_spriteram[offs+1];
113112      int color = (attr & 0xe0)>>5;
114113
115114      if (sy == 240) continue;
r243414r243415
138137   }
139138}
140139
141UINT32 mustache_state::screen_update_mustache(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
140UINT32 mustache_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
142141{
143142   m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
144143   draw_sprites(bitmap, cliprect);


Previous 199869 Revisions Next


© 1997-2024 The MAME Team