Previous 199869 Revisions Next

r35063 Monday 16th February, 2015 at 17:00:43 UTC by Osso
xxmissio.c: added save state support (nw)
[src/mame/drivers]xxmissio.c
[src/mame/includes]xxmissio.h
[src/mame/video]xxmissio.c

trunk/src/mame/drivers/xxmissio.c
r243574r243575
1414#include "includes/xxmissio.h"
1515
1616
17WRITE8_MEMBER(xxmissio_state::xxmissio_bank_sel_w)
17WRITE8_MEMBER(xxmissio_state::bank_sel_w)
1818{
1919   membank("bank1")->set_entry(data & 7);
2020}
2121
22CUSTOM_INPUT_MEMBER(xxmissio_state::xxmissio_status_r)
22CUSTOM_INPUT_MEMBER(xxmissio_state::status_r)
2323{
2424   int bit_mask = (FPTR)param;
2525   return (m_status & bit_mask) ? 1 : 0;
2626}
2727
28WRITE8_MEMBER(xxmissio_state::xxmissio_status_m_w)
28WRITE8_MEMBER(xxmissio_state::status_m_w)
2929{
3030   switch (data)
3131   {
r243574r243575
4444   }
4545}
4646
47WRITE8_MEMBER(xxmissio_state::xxmissio_status_s_w)
47WRITE8_MEMBER(xxmissio_state::status_s_w)
4848{
4949   switch (data)
5050   {
r243574r243575
6363   }
6464}
6565
66INTERRUPT_GEN_MEMBER(xxmissio_state::xxmissio_interrupt_m)
66INTERRUPT_GEN_MEMBER(xxmissio_state::interrupt_m)
6767{
6868   m_status &= ~0x20;
69   device.execute().set_input_line(0, HOLD_LINE);
69   m_maincpu->set_input_line(0, HOLD_LINE);
7070}
7171
72INTERRUPT_GEN_MEMBER(xxmissio_state::xxmissio_interrupt_s)
72INTERRUPT_GEN_MEMBER(xxmissio_state::interrupt_s)
7373{
7474   m_status &= ~0x10;
75   device.execute().set_input_line(0, HOLD_LINE);
75   m_subcpu->set_input_line(0, HOLD_LINE);
7676}
7777
7878void xxmissio_state::machine_start()
7979{
8080   membank("bank1")->configure_entries(0, 8, memregion("user1")->base(), 0x4000);
8181   membank("bank1")->set_entry(0);
82   
83   save_item(NAME(m_status));
8284}
8385
8486/****************************************************************************/
r243574r243575
9294   AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
9395   AM_RANGE(0xa001, 0xa001) AM_READ_PORT("P2")
9496   AM_RANGE(0xa002, 0xa002) AM_READ_PORT("STATUS")
95   AM_RANGE(0xa002, 0xa002) AM_WRITE(xxmissio_status_m_w)
96   AM_RANGE(0xa003, 0xa003) AM_WRITE(xxmissio_flipscreen_w)
97   AM_RANGE(0xa002, 0xa002) AM_WRITE(status_m_w)
98   AM_RANGE(0xa003, 0xa003) AM_WRITE(flipscreen_w)
9799
98100   AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_SHARE("fgram")
99   AM_RANGE(0xc800, 0xcfff) AM_READWRITE(xxmissio_bgram_r, xxmissio_bgram_w) AM_SHARE("bgram")
101   AM_RANGE(0xc800, 0xcfff) AM_READWRITE(bgram_r, bgram_w) AM_SHARE("bgram")
100102   AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_SHARE("spriteram")
101103
102104   AM_RANGE(0xd800, 0xdaff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
r243574r243575
112114
113115   AM_RANGE(0x8000, 0x8001) AM_DEVREADWRITE("ym1", ym2203_device, read, write)
114116   AM_RANGE(0x8002, 0x8003) AM_DEVREADWRITE("ym2", ym2203_device, read, write)
115   AM_RANGE(0x8006, 0x8006) AM_WRITE(xxmissio_bank_sel_w)
117   AM_RANGE(0x8006, 0x8006) AM_WRITE(bank_sel_w)
116118
117119   AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
118120   AM_RANGE(0xa001, 0xa001) AM_READ_PORT("P2")
119121   AM_RANGE(0xa002, 0xa002) AM_READ_PORT("STATUS")
120   AM_RANGE(0xa002, 0xa002) AM_WRITE(xxmissio_status_s_w)
121   AM_RANGE(0xa003, 0xa003) AM_WRITE(xxmissio_flipscreen_w)
122   AM_RANGE(0xa002, 0xa002) AM_WRITE(status_s_w)
123   AM_RANGE(0xa003, 0xa003) AM_WRITE(flipscreen_w)
122124
123125   AM_RANGE(0xc000, 0xc7ff) AM_SHARE("fgram") AM_RAM
124   AM_RANGE(0xc800, 0xcfff) AM_SHARE("bgram") AM_READWRITE(xxmissio_bgram_r, xxmissio_bgram_w)
126   AM_RANGE(0xc800, 0xcfff) AM_SHARE("bgram") AM_READWRITE(bgram_r, bgram_w)
125127   AM_RANGE(0xd000, 0xd7ff) AM_SHARE("spriteram") AM_RAM
126128
127129   AM_RANGE(0xd800, 0xdaff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
r243574r243575
196198   PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Shown as "Unused" in the manual */
197199
198200   PORT_START("STATUS")
199   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state,xxmissio_status_r, (void *)0x01)
201   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state, status_r, (void *)0x01)
200202   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
201   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state,xxmissio_status_r, (void *)0x04)
202   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state,xxmissio_status_r, (void *)0x08)
203   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state,xxmissio_status_r, (void *)0x10)
204   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state,xxmissio_status_r, (void *)0x20)
205   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state,xxmissio_status_r, (void *)0x40)
206   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state,xxmissio_status_r, (void *)0x80)
203   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state, status_r, (void *)0x04)
204   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state, status_r, (void *)0x08)
205   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state, status_r, (void *)0x10)
206   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state, status_r, (void *)0x20)
207   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state, status_r, (void *)0x40)
208   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state, status_r, (void *)0x80)
207209INPUT_PORTS_END
208210
209211/****************************************************************************/
r243574r243575
258260   /* basic machine hardware */
259261   MCFG_CPU_ADD("maincpu", Z80,12000000/4) /* 3.0MHz */
260262   MCFG_CPU_PROGRAM_MAP(map1)
261   MCFG_CPU_VBLANK_INT_DRIVER("screen", xxmissio_state,  xxmissio_interrupt_m)
263   MCFG_CPU_VBLANK_INT_DRIVER("screen", xxmissio_state,  interrupt_m)
262264
263265   MCFG_CPU_ADD("sub", Z80,12000000/4) /* 3.0MHz */
264266   MCFG_CPU_PROGRAM_MAP(map2)
265   MCFG_CPU_PERIODIC_INT_DRIVER(xxmissio_state, xxmissio_interrupt_s, 2*60)
267   MCFG_CPU_PERIODIC_INT_DRIVER(xxmissio_state, interrupt_s, 2*60)
266268
267269   MCFG_QUANTUM_TIME(attotime::from_hz(6000))
268270
r243574r243575
273275   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
274276   MCFG_SCREEN_SIZE(64*8, 32*8)
275277   MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 4*8, 28*8-1)
276   MCFG_SCREEN_UPDATE_DRIVER(xxmissio_state, screen_update_xxmissio)
278   MCFG_SCREEN_UPDATE_DRIVER(xxmissio_state, screen_update)
277279   MCFG_SCREEN_PALETTE("palette")
278280
279281   MCFG_GFXDECODE_ADD("gfxdecode", "palette", xxmissio)
r243574r243575
293295   MCFG_SOUND_ROUTE(3, "mono", 0.40)
294296
295297   MCFG_SOUND_ADD("ym2", YM2203, 12000000/8)
296   MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(xxmissio_state, xxmissio_scroll_x_w))
297   MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(xxmissio_state, xxmissio_scroll_y_w))
298   MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(xxmissio_state, scroll_x_w))
299   MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(xxmissio_state, scroll_y_w))
298300   MCFG_SOUND_ROUTE(0, "mono", 0.15)
299301   MCFG_SOUND_ROUTE(1, "mono", 0.15)
300302   MCFG_SOUND_ROUTE(2, "mono", 0.15)
r243574r243575
326328   ROM_LOAD16_BYTE( "xx11.4b", 0x0001,  0x8000, CRC(d9dd827c) SHA1(aea3a5abd871adf7f75ad4d6cc57eff0833135c7) )
327329ROM_END
328330
329GAME( 1986, xxmissio, 0, xxmissio, xxmissio, driver_device, 0, ROT90, "UPL", "XX Mission", 0 )
331GAME( 1986, xxmissio, 0, xxmissio, xxmissio, driver_device, 0, ROT90, "UPL", "XX Mission", GAME_SUPPORTS_SAVE )
trunk/src/mame/includes/xxmissio.h
r243574r243575
33public:
44   xxmissio_state(const machine_config &mconfig, device_type type, const char *tag)
55      : driver_device(mconfig, type, tag),
6      m_bgram(*this, "bgram"),
7      m_fgram(*this, "fgram"),
8      m_spriteram(*this, "spriteram"),
96      m_maincpu(*this, "maincpu"),
107      m_subcpu(*this, "sub"),
118      m_gfxdecode(*this, "gfxdecode"),
12      m_palette(*this, "palette")  { }
9      m_palette(*this, "palette"),
10      m_bgram(*this, "bgram"),
11      m_fgram(*this, "fgram"),
12      m_spriteram(*this, "spriteram")  { }
1313
14   UINT8 m_status;
14   required_device<cpu_device> m_maincpu;
15   required_device<cpu_device> m_subcpu;
16   required_device<gfxdecode_device> m_gfxdecode;
17   required_device<palette_device> m_palette;
18
1519   required_shared_ptr<UINT8> m_bgram;
1620   required_shared_ptr<UINT8> m_fgram;
1721   required_shared_ptr<UINT8> m_spriteram;
22
1823   tilemap_t *m_bg_tilemap;
1924   tilemap_t *m_fg_tilemap;
25   UINT8 m_status;
2026   UINT8 m_xscroll;
2127   UINT8 m_yscroll;
2228   UINT8 m_flipscreen;
23   DECLARE_WRITE8_MEMBER(xxmissio_bank_sel_w);
24   DECLARE_WRITE8_MEMBER(xxmissio_status_m_w);
25   DECLARE_WRITE8_MEMBER(xxmissio_status_s_w);
26   DECLARE_WRITE8_MEMBER(xxmissio_flipscreen_w);
27   DECLARE_WRITE8_MEMBER(xxmissio_bgram_w);
28   DECLARE_READ8_MEMBER(xxmissio_bgram_r);
29   DECLARE_CUSTOM_INPUT_MEMBER(xxmissio_status_r);
29   
30   DECLARE_WRITE8_MEMBER(bank_sel_w);
31   DECLARE_WRITE8_MEMBER(status_m_w);
32   DECLARE_WRITE8_MEMBER(status_s_w);
33   DECLARE_WRITE8_MEMBER(flipscreen_w);
34   DECLARE_WRITE8_MEMBER(bgram_w);
35   DECLARE_READ8_MEMBER(bgram_r);
36   DECLARE_WRITE8_MEMBER(scroll_x_w);
37   DECLARE_WRITE8_MEMBER(scroll_y_w);
38   
39   DECLARE_CUSTOM_INPUT_MEMBER(status_r);
40   
41   INTERRUPT_GEN_MEMBER(interrupt_m);
42   INTERRUPT_GEN_MEMBER(interrupt_s);
43   
3044   TILE_GET_INFO_MEMBER(get_bg_tile_info);
3145   TILE_GET_INFO_MEMBER(get_fg_tile_info);
46   
3247   virtual void machine_start();
3348   virtual void video_start();
34   UINT32 screen_update_xxmissio(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
35   INTERRUPT_GEN_MEMBER(xxmissio_interrupt_m);
36   INTERRUPT_GEN_MEMBER(xxmissio_interrupt_s);
37   DECLARE_WRITE8_MEMBER(xxmissio_scroll_x_w);
38   DECLARE_WRITE8_MEMBER(xxmissio_scroll_y_w);
49   
50   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
3951   void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, gfx_element *gfx);
40   required_device<cpu_device> m_maincpu;
41   required_device<cpu_device> m_subcpu;
42   required_device<gfxdecode_device> m_gfxdecode;
43   required_device<palette_device> m_palette;
4452};
trunk/src/mame/video/xxmissio.c
r243574r243575
1212#include "includes/xxmissio.h"
1313
1414
15WRITE8_MEMBER(xxmissio_state::xxmissio_scroll_x_w)
15WRITE8_MEMBER(xxmissio_state::scroll_x_w)
1616{
1717   m_xscroll = data;
1818}
19WRITE8_MEMBER(xxmissio_state::xxmissio_scroll_y_w)
19WRITE8_MEMBER(xxmissio_state::scroll_y_w)
2020{
2121   m_yscroll = data;
2222}
2323
24WRITE8_MEMBER(xxmissio_state::xxmissio_flipscreen_w)
24WRITE8_MEMBER(xxmissio_state::flipscreen_w)
2525{
2626   m_flipscreen = data & 0x01;
2727}
2828
29WRITE8_MEMBER(xxmissio_state::xxmissio_bgram_w)
29WRITE8_MEMBER(xxmissio_state::bgram_w)
3030{
3131   int x = (offset + (m_xscroll >> 3)) & 0x1f;
3232   offset = (offset & 0x7e0) | x;
3333
3434   m_bgram[offset] = data;
3535}
36READ8_MEMBER(xxmissio_state::xxmissio_bgram_r)
36READ8_MEMBER(xxmissio_state::bgram_r)
3737{
3838   int x = (offset + (m_xscroll >> 3)) & 0x1f;
3939   offset = (offset & 0x7e0) | x;
r243574r243575
6969   m_bg_tilemap->set_scrolldx(2, 12);
7070
7171   m_fg_tilemap->set_transparent_pen(0);
72   
73   save_item(NAME(m_xscroll));
74   save_item(NAME(m_yscroll));
75   save_item(NAME(m_flipscreen));
7276}
7377
7478
r243574r243575
122126}
123127
124128
125UINT32 xxmissio_state::screen_update_xxmissio(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
129UINT32 xxmissio_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
126130{
127131   machine().tilemap().mark_all_dirty();
128132   machine().tilemap().set_flip_all(m_flipscreen ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0);


Previous 199869 Revisions Next


© 1997-2024 The MAME Team