Previous 199869 Revisions Next

r36843 Tuesday 31st March, 2015 at 18:42:26 UTC by Osso
m107.c: added save state support (nw)
[src/emu/sound]iremga20.c
[src/mame/drivers]m107.c
[src/mame/includes]m107.h
[src/mame/video]m107.c

trunk/src/emu/sound/iremga20.c
r245354r245355
8080      save_item(NAME(m_channel[i].size), i);
8181      save_item(NAME(m_channel[i].start), i);
8282      save_item(NAME(m_channel[i].pos), i);
83      save_item(NAME(m_channel[i].frac), i);
8384      save_item(NAME(m_channel[i].end), i);
8485      save_item(NAME(m_channel[i].volume), i);
8586      save_item(NAME(m_channel[i].pan), i);
trunk/src/mame/drivers/m107.c
r245354r245355
4343
4444void m107_state::machine_start()
4545{
46   // TODO: state save registrations
46   save_item(NAME(m_sound_status));
4747}
4848
4949/*****************************************************************************/
5050
51TIMER_DEVICE_CALLBACK_MEMBER(m107_state::m107_scanline_interrupt)
51TIMER_DEVICE_CALLBACK_MEMBER(m107_state::scanline_interrupt)
5252{
5353   int scanline = param;
5454
r245354r245355
6969
7070/*****************************************************************************/
7171
72WRITE16_MEMBER(m107_state::m107_coincounter_w)
72WRITE16_MEMBER(m107_state::coincounter_w)
7373{
7474   if (ACCESSING_BITS_0_7)
7575   {
r245354r245355
7878   }
7979}
8080
81WRITE16_MEMBER(m107_state::m107_bankswitch_w)
81WRITE16_MEMBER(m107_state::bankswitch_w)
8282{
8383   if (ACCESSING_BITS_0_7)
8484   {
r245354r245355
8888   }
8989}
9090
91WRITE16_MEMBER(m107_state::m107_soundlatch_w)
91WRITE16_MEMBER(m107_state::soundlatch_w)
9292{
9393   m_soundcpu->set_input_line(NEC_INPUT_LINE_INTP1, ASSERT_LINE);
9494   soundlatch_byte_w(space, 0, data & 0xff);
9595//      logerror("soundlatch_byte_w %02x\n",data);
9696}
9797
98READ16_MEMBER(m107_state::m107_sound_status_r)
98READ16_MEMBER(m107_state::sound_status_r)
9999{
100100   return m_sound_status;
101101}
102102
103READ16_MEMBER(m107_state::m107_soundlatch_r)
103READ16_MEMBER(m107_state::soundlatch_r)
104104{
105105   m_soundcpu->set_input_line(NEC_INPUT_LINE_INTP1, CLEAR_LINE);
106106   return soundlatch_byte_r(space, offset) | 0xff00;
107107}
108108
109WRITE16_MEMBER(m107_state::m107_sound_irq_ack_w)
109WRITE16_MEMBER(m107_state::sound_irq_ack_w)
110110{
111111   m_soundcpu->set_input_line(NEC_INPUT_LINE_INTP1, CLEAR_LINE);
112112}
113113
114WRITE16_MEMBER(m107_state::m107_sound_status_w)
114WRITE16_MEMBER(m107_state::sound_status_w)
115115{
116116   COMBINE_DATA(&m_sound_status);
117117   m_maincpu->set_input_line_and_vector(0, HOLD_LINE, M107_IRQ_3);
118118}
119119
120WRITE16_MEMBER(m107_state::m107_sound_reset_w)
120WRITE16_MEMBER(m107_state::sound_reset_w)
121121{
122122   m_soundcpu->set_input_line(INPUT_LINE_RESET, (data) ? CLEAR_LINE : ASSERT_LINE);
123123}
r245354r245355
127127static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, m107_state )
128128   AM_RANGE(0x00000, 0x9ffff) AM_ROM
129129   AM_RANGE(0xa0000, 0xbffff) AM_ROMBANK("bank1")
130   AM_RANGE(0xd0000, 0xdffff) AM_RAM_WRITE(m107_vram_w) AM_SHARE("vram_data")
130   AM_RANGE(0xd0000, 0xdffff) AM_RAM_WRITE(vram_w) AM_SHARE("vram_data")
131131   AM_RANGE(0xe0000, 0xeffff) AM_RAM /* System ram */
132132   AM_RANGE(0xf8000, 0xf8fff) AM_RAM AM_SHARE("spriteram")
133133   AM_RANGE(0xf9000, 0xf9fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
r245354r245355
139139   AM_RANGE(0x02, 0x03) AM_READ_PORT("COINS_DSW3")
140140   AM_RANGE(0x04, 0x05) AM_READ_PORT("DSW")
141141   AM_RANGE(0x06, 0x07) AM_READ_PORT("P3_P4")
142   AM_RANGE(0x08, 0x09) AM_READ(m107_sound_status_r)   /* answer from sound CPU */
143   AM_RANGE(0x00, 0x01) AM_WRITE(m107_soundlatch_w)
144   AM_RANGE(0x02, 0x03) AM_WRITE(m107_coincounter_w)
142   AM_RANGE(0x08, 0x09) AM_READ(sound_status_r)   /* answer from sound CPU */
143   AM_RANGE(0x00, 0x01) AM_WRITE(soundlatch_w)
144   AM_RANGE(0x02, 0x03) AM_WRITE(coincounter_w)
145145   AM_RANGE(0x04, 0x05) AM_WRITENOP /* ??? 0008 */
146   AM_RANGE(0x80, 0x9f) AM_WRITE(m107_control_w)
146   AM_RANGE(0x80, 0x9f) AM_WRITE(control_w)
147147   AM_RANGE(0xa0, 0xaf) AM_WRITENOP /* Written with 0's in interrupt */
148   AM_RANGE(0xb0, 0xb1) AM_WRITE(m107_spritebuffer_w)
148   AM_RANGE(0xb0, 0xb1) AM_WRITE(spritebuffer_w)
149149   AM_RANGE(0xc0, 0xc3) AM_READNOP /* Only wpksoc: ticket related? */
150   AM_RANGE(0xc0, 0xc1) AM_WRITE(m107_sound_reset_w)
150   AM_RANGE(0xc0, 0xc1) AM_WRITE(sound_reset_w)
151151ADDRESS_MAP_END
152152
153153/* same as M107 but with an extra i/o board */
r245354r245355
182182   AM_RANGE(0xa0000, 0xa3fff) AM_RAM
183183   AM_RANGE(0xa8000, 0xa803f) AM_DEVREADWRITE8("irem", iremga20_device, irem_ga20_r, irem_ga20_w, 0x00ff)
184184   AM_RANGE(0xa8040, 0xa8043) AM_DEVREADWRITE8("ymsnd", ym2151_device, read, write, 0x00ff)
185   AM_RANGE(0xa8044, 0xa8045) AM_READWRITE(m107_soundlatch_r, m107_sound_irq_ack_w)
186   AM_RANGE(0xa8046, 0xa8047) AM_WRITE(m107_sound_status_w)
185   AM_RANGE(0xa8044, 0xa8045) AM_READWRITE(soundlatch_r, sound_irq_ack_w)
186   AM_RANGE(0xa8046, 0xa8047) AM_WRITE(sound_status_w)
187187   AM_RANGE(0xffff0, 0xfffff) AM_ROM AM_REGION("soundcpu", 0x1fff0)
188188ADDRESS_MAP_END
189189
r245354r245355
765765   MCFG_V25_CONFIG(rtypeleo_decryption_table)
766766
767767
768   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", m107_state, m107_scanline_interrupt, "screen", 0, 1)
768   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", m107_state, scanline_interrupt, "screen", 0, 1)
769769
770770   /* video hardware */
771771   MCFG_SCREEN_ADD("screen", RASTER)
r245354r245355
773773   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
774774   MCFG_SCREEN_SIZE(512, 256)
775775   MCFG_SCREEN_VISIBLE_AREA(80, 511-112, 8, 247) /* 320 x 240 */
776   MCFG_SCREEN_UPDATE_DRIVER(m107_state, screen_update_m107)
776   MCFG_SCREEN_UPDATE_DRIVER(m107_state, screen_update)
777777   MCFG_SCREEN_PALETTE("palette")
778778
779779   MCFG_GFXDECODE_ADD("gfxdecode", "palette", firebarr)
r245354r245355
996996   UINT8 *ROM = memregion("maincpu")->base();
997997
998998   membank("bank1")->configure_entries(0, 4, &ROM[0x80000], 0x20000);
999   m_maincpu->space(AS_IO).install_write_handler(0x06, 0x07, write16_delegate(FUNC(m107_state::m107_bankswitch_w),this));
999   m_maincpu->space(AS_IO).install_write_handler(0x06, 0x07, write16_delegate(FUNC(m107_state::bankswitch_w),this));
10001000
10011001   m_irq_vectorbase = 0x80;
10021002   m_spritesystem = 0;
r245354r245355
10101010
10111011/***************************************************************************/
10121012
1013GAME( 1993, airass,        0,             airass,   firebarr, m107_state, firebarr, ROT270, "Irem", "Air Assault (World)", GAME_NO_COCKTAIL ) // possible location test, but sound code is newer than Japan version
1014GAME( 1993, firebarr,      airass,        firebarr, firebarr, m107_state, firebarr, ROT270, "Irem", "Fire Barrel (Japan)", GAME_NO_COCKTAIL )
1013GAME( 1993, airass,        0,             airass,   firebarr, m107_state, firebarr, ROT270, "Irem", "Air Assault (World)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) // possible location test, but sound code is newer than Japan version
1014GAME( 1993, firebarr,      airass,        firebarr, firebarr, m107_state, firebarr, ROT270, "Irem", "Fire Barrel (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10151015
1016GAME( 1994, dsoccr94,      0,        dsoccr94, dsoccr94, m107_state, dsoccr94, ROT0,   "Irem (Data East Corporation license)", "Dream Soccer '94 (World, M107 hardware)", GAME_NO_COCKTAIL )
1016GAME( 1994, dsoccr94,      0,        dsoccr94, dsoccr94, m107_state, dsoccr94, ROT0,   "Irem (Data East Corporation license)", "Dream Soccer '94 (World, M107 hardware)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10171017
1018GAME( 1995, wpksoc,        0,        wpksoc,   wpksoc, m107_state,   wpksoc,   ROT0,   "Jaleco", "World PK Soccer", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_MECHANICAL )
1019GAME( 1994, kftgoal,       wpksoc,   wpksoc,   wpksoc, m107_state,   wpksoc,   ROT0,   "Jaleco", "Kick for the Goal", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_MECHANICAL )
1018GAME( 1995, wpksoc,        0,        wpksoc,   wpksoc, m107_state,   wpksoc,   ROT0,   "Jaleco", "World PK Soccer", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_MECHANICAL | GAME_SUPPORTS_SAVE )
1019GAME( 1994, kftgoal,       wpksoc,   wpksoc,   wpksoc, m107_state,   wpksoc,   ROT0,   "Jaleco", "Kick for the Goal", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_MECHANICAL | GAME_SUPPORTS_SAVE )
trunk/src/mame/includes/m107.h
r245354r245355
99{
1010   tilemap_t *     tmap;
1111   UINT16          vram_base;
12   UINT16          control[4];
1312};
1413
1514class m107_state : public driver_device
r245354r245355
1716public:
1817   m107_state(const machine_config &mconfig, device_type type, const char *tag)
1918      : driver_device(mconfig, type, tag),
20         m_spriteram(*this, "spriteram"),
21         m_vram_data(*this, "vram_data"),
2219         m_maincpu(*this, "maincpu"),
2320         m_soundcpu(*this, "soundcpu"),
2421         m_gfxdecode(*this, "gfxdecode"),
2522         m_screen(*this, "screen"),
26         m_palette(*this, "palette") { }
23         m_palette(*this, "palette"),
24         m_spriteram(*this, "spriteram"),
25         m_vram_data(*this, "vram_data") { }
2726
28   required_shared_ptr<UINT16> m_spriteram;
29   required_shared_ptr<UINT16> m_vram_data;
3027   required_device<cpu_device> m_maincpu;
3128   required_device<cpu_device> m_soundcpu;
3229   required_device<gfxdecode_device> m_gfxdecode;
3330   required_device<screen_device> m_screen;
3431   required_device<palette_device> m_palette;
3532
33   required_shared_ptr<UINT16> m_spriteram;
34   required_shared_ptr<UINT16> m_vram_data;
35
36   // driver init
3637   UINT8 m_irq_vectorbase;
38   UINT8 m_spritesystem;
39
3740   int m_sound_status;
38   UINT8 m_spritesystem;
3941   UINT8 m_sprite_display;
4042   UINT16 m_raster_irq_position;
4143   pf_layer_info m_pf_layer[4];
4244   UINT16 m_control[0x10];
4345   UINT16 *m_buffered_spriteram;
44   DECLARE_WRITE16_MEMBER(m107_coincounter_w);
45   DECLARE_WRITE16_MEMBER(m107_bankswitch_w);
46   DECLARE_WRITE16_MEMBER(m107_soundlatch_w);
47   DECLARE_READ16_MEMBER(m107_sound_status_r);
48   DECLARE_READ16_MEMBER(m107_soundlatch_r);
49   DECLARE_WRITE16_MEMBER(m107_sound_irq_ack_w);
50   DECLARE_WRITE16_MEMBER(m107_sound_status_w);
51   DECLARE_WRITE16_MEMBER(m107_sound_reset_w);
46
47   DECLARE_WRITE16_MEMBER(coincounter_w);
48   DECLARE_WRITE16_MEMBER(bankswitch_w);
49   DECLARE_WRITE16_MEMBER(soundlatch_w);
50   DECLARE_READ16_MEMBER(sound_status_r);
51   DECLARE_READ16_MEMBER(soundlatch_r);
52   DECLARE_WRITE16_MEMBER(sound_irq_ack_w);
53   DECLARE_WRITE16_MEMBER(sound_status_w);
54   DECLARE_WRITE16_MEMBER(sound_reset_w);
5255   DECLARE_WRITE16_MEMBER(wpksoc_output_w);
53   DECLARE_WRITE16_MEMBER(m107_vram_w);
54   DECLARE_WRITE16_MEMBER(m107_control_w);
55   DECLARE_WRITE16_MEMBER(m107_spritebuffer_w);
56   DECLARE_WRITE16_MEMBER(vram_w);
57   DECLARE_WRITE16_MEMBER(control_w);
58   DECLARE_WRITE16_MEMBER(spritebuffer_w);
59
60   TILE_GET_INFO_MEMBER(get_pf_tile_info);
61   
62   TIMER_DEVICE_CALLBACK_MEMBER(scanline_interrupt);
63
5664   DECLARE_DRIVER_INIT(firebarr);
5765   DECLARE_DRIVER_INIT(dsoccr94);
5866   DECLARE_DRIVER_INIT(wpksoc);
59   TILE_GET_INFO_MEMBER(get_pf_tile_info);
6067   virtual void machine_start();
6168   virtual void video_start();
62   UINT32 screen_update_m107(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
63   TIMER_DEVICE_CALLBACK_MEMBER(m107_scanline_interrupt);
69
70   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
6471   void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
65   void m107_update_scroll_positions();
66   void m107_tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int laynum, int category,int opaque);
67   void m107_screenrefresh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
72   void update_scroll_positions();
73   void tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int laynum, int category,int opaque);
74   void screenrefresh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
6875};
trunk/src/mame/video/m107.c
r245354r245355
6262
6363/*****************************************************************************/
6464
65WRITE16_MEMBER(m107_state::m107_vram_w)
65WRITE16_MEMBER(m107_state::vram_w)
6666{
6767   int laynum;
6868
r245354r245355
7474
7575/*****************************************************************************/
7676
77WRITE16_MEMBER(m107_state::m107_control_w)
77WRITE16_MEMBER(m107_state::control_w)
7878{
7979   UINT16 old = m_control[offset];
8080   pf_layer_info *layer;
r245354r245355
141141   }
142142
143143   m_buffered_spriteram = auto_alloc_array_clear(machine(), UINT16, 0x1000/2);
144   
145   save_item(NAME(m_sprite_display));
146   save_item(NAME(m_raster_irq_position));
147   save_item(NAME(m_control));
148   save_pointer(NAME(m_buffered_spriteram), 0x1000/2);
149   
150   for (int i = 0; i < 4; i++)
151   {
152      save_item(NAME(m_pf_layer[i].vram_base), i);
153   }
144154}
145155
146156/*****************************************************************************/
r245354r245355
267277
268278/*****************************************************************************/
269279
270void m107_state::m107_update_scroll_positions()
280void m107_state::update_scroll_positions()
271281{
272282   int laynum;
273283   int i;
r245354r245355
306316
307317/*****************************************************************************/
308318
309void m107_state::m107_tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int laynum, int category,int opaque)
319void m107_state::tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int laynum, int category,int opaque)
310320{
311321   int line;
312322   rectangle clip;
r245354r245355
331341}
332342
333343
334void m107_state::m107_screenrefresh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
344void m107_state::screenrefresh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
335345{
336346   screen.priority().fill(0, cliprect);
337347
338348   if ((~m_control[0x0b] >> 7) & 1)
339349   {
340      m107_tilemap_draw(screen, bitmap, cliprect, 3, 0,0);
341      m107_tilemap_draw(screen, bitmap, cliprect, 3, 1,0);
350      tilemap_draw(screen, bitmap, cliprect, 3, 0,0);
351      tilemap_draw(screen, bitmap, cliprect, 3, 1,0);
342352   }
343353   else
344354      bitmap.fill(0, cliprect);
345355
346356   /* note: the opaque flag is used if layer 3 is disabled, noticeable in World PK Soccer title and gameplay screens */
347   m107_tilemap_draw(screen, bitmap, cliprect, 2, 0,(((m_control[0x0b] >> 7) & 1) ? TILEMAP_DRAW_OPAQUE : 0));
348   m107_tilemap_draw(screen, bitmap, cliprect, 1, 0,0);
349   m107_tilemap_draw(screen, bitmap, cliprect, 0, 0,0);
350   m107_tilemap_draw(screen, bitmap, cliprect, 2, 1,0);
351   m107_tilemap_draw(screen, bitmap, cliprect, 1, 1,0);
352   m107_tilemap_draw(screen, bitmap, cliprect, 0, 1,0);
357   tilemap_draw(screen, bitmap, cliprect, 2, 0,(((m_control[0x0b] >> 7) & 1) ? TILEMAP_DRAW_OPAQUE : 0));
358   tilemap_draw(screen, bitmap, cliprect, 1, 0,0);
359   tilemap_draw(screen, bitmap, cliprect, 0, 0,0);
360   tilemap_draw(screen, bitmap, cliprect, 2, 1,0);
361   tilemap_draw(screen, bitmap, cliprect, 1, 1,0);
362   tilemap_draw(screen, bitmap, cliprect, 0, 1,0);
353363
354364   if(m_sprite_display)
355365      draw_sprites(screen, bitmap, cliprect);
r245354r245355
360370
361371/*****************************************************************************/
362372
363WRITE16_MEMBER(m107_state::m107_spritebuffer_w)
373WRITE16_MEMBER(m107_state::spritebuffer_w)
364374{
365375   if (ACCESSING_BITS_0_7) {
366376      /*
r245354r245355
375385
376386/*****************************************************************************/
377387
378UINT32 m107_state::screen_update_m107(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
388UINT32 m107_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
379389{
380   m107_update_scroll_positions();
381   m107_screenrefresh(screen, bitmap, cliprect);
390   update_scroll_positions();
391   screenrefresh(screen, bitmap, cliprect);
382392   return 0;
383393}


Previous 199869 Revisions Next


© 1997-2024 The MAME Team