trunk/src/mame/drivers/xxmissio.c
| r243574 | r243575 | |
| 14 | 14 | #include "includes/xxmissio.h" |
| 15 | 15 | |
| 16 | 16 | |
| 17 | | WRITE8_MEMBER(xxmissio_state::xxmissio_bank_sel_w) |
| 17 | WRITE8_MEMBER(xxmissio_state::bank_sel_w) |
| 18 | 18 | { |
| 19 | 19 | membank("bank1")->set_entry(data & 7); |
| 20 | 20 | } |
| 21 | 21 | |
| 22 | | CUSTOM_INPUT_MEMBER(xxmissio_state::xxmissio_status_r) |
| 22 | CUSTOM_INPUT_MEMBER(xxmissio_state::status_r) |
| 23 | 23 | { |
| 24 | 24 | int bit_mask = (FPTR)param; |
| 25 | 25 | return (m_status & bit_mask) ? 1 : 0; |
| 26 | 26 | } |
| 27 | 27 | |
| 28 | | WRITE8_MEMBER(xxmissio_state::xxmissio_status_m_w) |
| 28 | WRITE8_MEMBER(xxmissio_state::status_m_w) |
| 29 | 29 | { |
| 30 | 30 | switch (data) |
| 31 | 31 | { |
| r243574 | r243575 | |
| 44 | 44 | } |
| 45 | 45 | } |
| 46 | 46 | |
| 47 | | WRITE8_MEMBER(xxmissio_state::xxmissio_status_s_w) |
| 47 | WRITE8_MEMBER(xxmissio_state::status_s_w) |
| 48 | 48 | { |
| 49 | 49 | switch (data) |
| 50 | 50 | { |
| r243574 | r243575 | |
| 63 | 63 | } |
| 64 | 64 | } |
| 65 | 65 | |
| 66 | | INTERRUPT_GEN_MEMBER(xxmissio_state::xxmissio_interrupt_m) |
| 66 | INTERRUPT_GEN_MEMBER(xxmissio_state::interrupt_m) |
| 67 | 67 | { |
| 68 | 68 | m_status &= ~0x20; |
| 69 | | device.execute().set_input_line(0, HOLD_LINE); |
| 69 | m_maincpu->set_input_line(0, HOLD_LINE); |
| 70 | 70 | } |
| 71 | 71 | |
| 72 | | INTERRUPT_GEN_MEMBER(xxmissio_state::xxmissio_interrupt_s) |
| 72 | INTERRUPT_GEN_MEMBER(xxmissio_state::interrupt_s) |
| 73 | 73 | { |
| 74 | 74 | m_status &= ~0x10; |
| 75 | | device.execute().set_input_line(0, HOLD_LINE); |
| 75 | m_subcpu->set_input_line(0, HOLD_LINE); |
| 76 | 76 | } |
| 77 | 77 | |
| 78 | 78 | void xxmissio_state::machine_start() |
| 79 | 79 | { |
| 80 | 80 | membank("bank1")->configure_entries(0, 8, memregion("user1")->base(), 0x4000); |
| 81 | 81 | membank("bank1")->set_entry(0); |
| 82 | |
| 83 | save_item(NAME(m_status)); |
| 82 | 84 | } |
| 83 | 85 | |
| 84 | 86 | /****************************************************************************/ |
| r243574 | r243575 | |
| 92 | 94 | AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") |
| 93 | 95 | AM_RANGE(0xa001, 0xa001) AM_READ_PORT("P2") |
| 94 | 96 | 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) |
| 97 | 99 | |
| 98 | 100 | 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") |
| 100 | 102 | AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_SHARE("spriteram") |
| 101 | 103 | |
| 102 | 104 | AM_RANGE(0xd800, 0xdaff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") |
| r243574 | r243575 | |
| 112 | 114 | |
| 113 | 115 | AM_RANGE(0x8000, 0x8001) AM_DEVREADWRITE("ym1", ym2203_device, read, write) |
| 114 | 116 | 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) |
| 116 | 118 | |
| 117 | 119 | AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") |
| 118 | 120 | AM_RANGE(0xa001, 0xa001) AM_READ_PORT("P2") |
| 119 | 121 | 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) |
| 122 | 124 | |
| 123 | 125 | 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) |
| 125 | 127 | AM_RANGE(0xd000, 0xd7ff) AM_SHARE("spriteram") AM_RAM |
| 126 | 128 | |
| 127 | 129 | AM_RANGE(0xd800, 0xdaff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") |
| r243574 | r243575 | |
| 196 | 198 | PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Shown as "Unused" in the manual */ |
| 197 | 199 | |
| 198 | 200 | 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) |
| 200 | 202 | 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) |
| 207 | 209 | INPUT_PORTS_END |
| 208 | 210 | |
| 209 | 211 | /****************************************************************************/ |
| r243574 | r243575 | |
| 258 | 260 | /* basic machine hardware */ |
| 259 | 261 | MCFG_CPU_ADD("maincpu", Z80,12000000/4) /* 3.0MHz */ |
| 260 | 262 | 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) |
| 262 | 264 | |
| 263 | 265 | MCFG_CPU_ADD("sub", Z80,12000000/4) /* 3.0MHz */ |
| 264 | 266 | 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) |
| 266 | 268 | |
| 267 | 269 | MCFG_QUANTUM_TIME(attotime::from_hz(6000)) |
| 268 | 270 | |
| r243574 | r243575 | |
| 273 | 275 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) |
| 274 | 276 | MCFG_SCREEN_SIZE(64*8, 32*8) |
| 275 | 277 | 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) |
| 277 | 279 | MCFG_SCREEN_PALETTE("palette") |
| 278 | 280 | |
| 279 | 281 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", xxmissio) |
| r243574 | r243575 | |
| 293 | 295 | MCFG_SOUND_ROUTE(3, "mono", 0.40) |
| 294 | 296 | |
| 295 | 297 | 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)) |
| 298 | 300 | MCFG_SOUND_ROUTE(0, "mono", 0.15) |
| 299 | 301 | MCFG_SOUND_ROUTE(1, "mono", 0.15) |
| 300 | 302 | MCFG_SOUND_ROUTE(2, "mono", 0.15) |
| r243574 | r243575 | |
| 326 | 328 | ROM_LOAD16_BYTE( "xx11.4b", 0x0001, 0x8000, CRC(d9dd827c) SHA1(aea3a5abd871adf7f75ad4d6cc57eff0833135c7) ) |
| 327 | 329 | ROM_END |
| 328 | 330 | |
| 329 | | GAME( 1986, xxmissio, 0, xxmissio, xxmissio, driver_device, 0, ROT90, "UPL", "XX Mission", 0 ) |
| 331 | GAME( 1986, xxmissio, 0, xxmissio, xxmissio, driver_device, 0, ROT90, "UPL", "XX Mission", GAME_SUPPORTS_SAVE ) |
trunk/src/mame/includes/xxmissio.h
| r243574 | r243575 | |
| 3 | 3 | public: |
| 4 | 4 | xxmissio_state(const machine_config &mconfig, device_type type, const char *tag) |
| 5 | 5 | : driver_device(mconfig, type, tag), |
| 6 | | m_bgram(*this, "bgram"), |
| 7 | | m_fgram(*this, "fgram"), |
| 8 | | m_spriteram(*this, "spriteram"), |
| 9 | 6 | m_maincpu(*this, "maincpu"), |
| 10 | 7 | m_subcpu(*this, "sub"), |
| 11 | 8 | 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") { } |
| 13 | 13 | |
| 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 | |
| 15 | 19 | required_shared_ptr<UINT8> m_bgram; |
| 16 | 20 | required_shared_ptr<UINT8> m_fgram; |
| 17 | 21 | required_shared_ptr<UINT8> m_spriteram; |
| 22 | |
| 18 | 23 | tilemap_t *m_bg_tilemap; |
| 19 | 24 | tilemap_t *m_fg_tilemap; |
| 25 | UINT8 m_status; |
| 20 | 26 | UINT8 m_xscroll; |
| 21 | 27 | UINT8 m_yscroll; |
| 22 | 28 | 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 | |
| 30 | 44 | TILE_GET_INFO_MEMBER(get_bg_tile_info); |
| 31 | 45 | TILE_GET_INFO_MEMBER(get_fg_tile_info); |
| 46 | |
| 32 | 47 | virtual void machine_start(); |
| 33 | 48 | 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); |
| 39 | 51 | 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; |
| 44 | 52 | }; |