trunk/src/mame/drivers/bogeyman.c
| r243005 | r243006 | |
| 13 | 13 | |
| 14 | 14 | #include "emu.h" |
| 15 | 15 | #include "cpu/m6502/m6502.h" |
| 16 | | #include "sound/ay8910.h" |
| 17 | 16 | #include "includes/bogeyman.h" |
| 18 | 17 | |
| 19 | 18 | |
| r243005 | r243006 | |
| 21 | 20 | |
| 22 | 21 | // Sound section is copied from Mysterious Stones driver by Nicola, Mike, Brad |
| 23 | 22 | |
| 24 | | WRITE8_MEMBER(bogeyman_state::bogeyman_8910_latch_w) |
| 23 | WRITE8_MEMBER(bogeyman_state::ay8910_latch_w) |
| 25 | 24 | { |
| 26 | 25 | m_psg_latch = data; |
| 27 | 26 | } |
| 28 | 27 | |
| 29 | | WRITE8_MEMBER(bogeyman_state::bogeyman_8910_control_w) |
| 28 | WRITE8_MEMBER(bogeyman_state::ay8910_control_w) |
| 30 | 29 | { |
| 31 | 30 | // bit 0 is flipscreen |
| 32 | 31 | flip_screen_set(data & 0x01); |
| 33 | 32 | |
| 34 | 33 | // bit 5 goes to 8910 #0 BDIR pin |
| 35 | 34 | if ((m_last_write & 0x20) == 0x20 && (data & 0x20) == 0x00) |
| 36 | | machine().device<ay8910_device>("ay1")->data_address_w(space, m_last_write >> 4, m_psg_latch); |
| 35 | m_ay1->data_address_w(space, m_last_write >> 4, m_psg_latch); |
| 37 | 36 | |
| 38 | 37 | // bit 7 goes to 8910 #1 BDIR pin |
| 39 | 38 | if ((m_last_write & 0x80) == 0x80 && (data & 0x80) == 0x00) |
| 40 | | machine().device<ay8910_device>("ay2")->data_address_w(space, m_last_write >> 6, m_psg_latch); |
| 39 | m_ay2->data_address_w(space, m_last_write >> 6, m_psg_latch); |
| 41 | 40 | |
| 42 | 41 | m_last_write = data; |
| 43 | 42 | } |
| r243005 | r243006 | |
| 46 | 45 | |
| 47 | 46 | static ADDRESS_MAP_START( bogeyman_map, AS_PROGRAM, 8, bogeyman_state ) |
| 48 | 47 | AM_RANGE(0x0000, 0x17ff) AM_RAM |
| 49 | | AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE(bogeyman_videoram2_w) AM_SHARE("videoram2") |
| 50 | | AM_RANGE(0x1c00, 0x1fff) AM_RAM_WRITE(bogeyman_colorram2_w) AM_SHARE("colorram2") |
| 51 | | AM_RANGE(0x2000, 0x20ff) AM_RAM_WRITE(bogeyman_videoram_w) AM_SHARE("videoram") |
| 52 | | AM_RANGE(0x2100, 0x21ff) AM_RAM_WRITE(bogeyman_colorram_w) AM_SHARE("colorram") |
| 48 | AM_RANGE(0x1800, 0x1bff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2") |
| 49 | AM_RANGE(0x1c00, 0x1fff) AM_RAM_WRITE(colorram2_w) AM_SHARE("colorram2") |
| 50 | AM_RANGE(0x2000, 0x20ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") |
| 51 | AM_RANGE(0x2100, 0x21ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram") |
| 53 | 52 | AM_RANGE(0x2800, 0x2bff) AM_RAM AM_SHARE("spriteram") |
| 54 | | AM_RANGE(0x3000, 0x300f) AM_RAM_WRITE(bogeyman_paletteram_w) AM_SHARE("palette") |
| 55 | | AM_RANGE(0x3800, 0x3800) AM_READ_PORT("P1") AM_WRITE(bogeyman_8910_control_w) |
| 56 | | AM_RANGE(0x3801, 0x3801) AM_READ_PORT("P2") AM_WRITE(bogeyman_8910_latch_w) |
| 53 | AM_RANGE(0x3000, 0x300f) AM_RAM_WRITE(paletteram_w) AM_SHARE("palette") |
| 54 | AM_RANGE(0x3800, 0x3800) AM_READ_PORT("P1") AM_WRITE(ay8910_control_w) |
| 55 | AM_RANGE(0x3801, 0x3801) AM_READ_PORT("P2") AM_WRITE(ay8910_latch_w) |
| 57 | 56 | AM_RANGE(0x3802, 0x3802) AM_READ_PORT("DSW1") |
| 58 | 57 | AM_RANGE(0x3803, 0x3803) AM_READ_PORT("DSW2") AM_WRITENOP // ??? sound |
| 59 | 58 | AM_RANGE(0x4000, 0xffff) AM_ROM |
| r243005 | r243006 | |
| 205 | 204 | { |
| 206 | 205 | save_item(NAME(m_psg_latch)); |
| 207 | 206 | save_item(NAME(m_last_write)); |
| 207 | save_item(NAME(m_colbank)); |
| 208 | 208 | } |
| 209 | 209 | |
| 210 | 210 | void bogeyman_state::machine_reset() |
| 211 | 211 | { |
| 212 | 212 | m_psg_latch = 0; |
| 213 | 213 | m_last_write = 0; |
| 214 | m_colbank = 0; |
| 214 | 215 | } |
| 215 | 216 | |
| 216 | | WRITE8_MEMBER(bogeyman_state::bogeyman_colbank_w) |
| 217 | WRITE8_MEMBER(bogeyman_state::colbank_w) |
| 217 | 218 | { |
| 218 | 219 | if((data & 1) != (m_colbank & 1)) |
| 219 | 220 | { |
| r243005 | r243006 | |
| 237 | 238 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) |
| 238 | 239 | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 239 | 240 | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 240 | | MCFG_SCREEN_UPDATE_DRIVER(bogeyman_state, screen_update_bogeyman) |
| 241 | MCFG_SCREEN_UPDATE_DRIVER(bogeyman_state, screen_update) |
| 241 | 242 | MCFG_SCREEN_PALETTE("palette") |
| 242 | 243 | |
| 243 | 244 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", bogeyman) |
| r243005 | r243006 | |
| 249 | 250 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 250 | 251 | |
| 251 | 252 | MCFG_SOUND_ADD("ay1", AY8910, 1500000) /* Verified */ |
| 252 | | MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(bogeyman_state, bogeyman_colbank_w)) |
| 253 | MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(bogeyman_state, colbank_w)) |
| 253 | 254 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) |
| 254 | 255 | |
| 255 | 256 | MCFG_SOUND_ADD("ay2", AY8910, 1500000) /* Verified */ |
trunk/src/mame/includes/bogeyman.h
| r243005 | r243006 | |
| 4 | 4 | |
| 5 | 5 | *************************************************************************/ |
| 6 | 6 | |
| 7 | #include "sound/ay8910.h" |
| 8 | |
| 7 | 9 | class bogeyman_state : public driver_device |
| 8 | 10 | { |
| 9 | 11 | public: |
| 10 | 12 | bogeyman_state(const machine_config &mconfig, device_type type, const char *tag) |
| 11 | 13 | : driver_device(mconfig, type, tag), |
| 14 | m_maincpu(*this, "maincpu"), |
| 15 | m_gfxdecode(*this, "gfxdecode"), |
| 16 | m_palette(*this, "palette"), |
| 17 | m_ay1(*this, "ay1"), |
| 18 | m_ay2(*this, "ay2"), |
| 12 | 19 | m_videoram(*this, "videoram"), |
| 13 | 20 | m_videoram2(*this, "videoram2"), |
| 14 | 21 | m_colorram(*this, "colorram"), |
| 15 | 22 | m_colorram2(*this, "colorram2"), |
| 16 | | m_spriteram(*this, "spriteram"), |
| 17 | | m_maincpu(*this, "maincpu"), |
| 18 | | m_gfxdecode(*this, "gfxdecode"), |
| 19 | | m_palette(*this, "palette") { } |
| 20 | | |
| 23 | m_spriteram(*this, "spriteram") { } |
| 24 | |
| 25 | /* devices */ |
| 26 | required_device<cpu_device> m_maincpu; |
| 27 | required_device<gfxdecode_device> m_gfxdecode; |
| 28 | required_device<palette_device> m_palette; |
| 29 | required_device<ay8910_device> m_ay1; |
| 30 | required_device<ay8910_device> m_ay2; |
| 31 | |
| 21 | 32 | /* memory pointers */ |
| 22 | 33 | required_shared_ptr<UINT8> m_videoram; |
| 23 | 34 | required_shared_ptr<UINT8> m_videoram2; |
| r243005 | r243006 | |
| 34 | 45 | int m_psg_latch; |
| 35 | 46 | int m_last_write; |
| 36 | 47 | int m_colbank; |
| 37 | | DECLARE_WRITE8_MEMBER(bogeyman_8910_latch_w); |
| 38 | | DECLARE_WRITE8_MEMBER(bogeyman_8910_control_w); |
| 39 | | DECLARE_WRITE8_MEMBER(bogeyman_videoram_w); |
| 40 | | DECLARE_WRITE8_MEMBER(bogeyman_colorram_w); |
| 41 | | DECLARE_WRITE8_MEMBER(bogeyman_videoram2_w); |
| 42 | | DECLARE_WRITE8_MEMBER(bogeyman_colorram2_w); |
| 43 | | DECLARE_WRITE8_MEMBER(bogeyman_paletteram_w); |
| 44 | | DECLARE_WRITE8_MEMBER(bogeyman_colbank_w); |
| 48 | |
| 49 | DECLARE_WRITE8_MEMBER(ay8910_latch_w); |
| 50 | DECLARE_WRITE8_MEMBER(ay8910_control_w); |
| 51 | DECLARE_WRITE8_MEMBER(videoram_w); |
| 52 | DECLARE_WRITE8_MEMBER(colorram_w); |
| 53 | DECLARE_WRITE8_MEMBER(videoram2_w); |
| 54 | DECLARE_WRITE8_MEMBER(colorram2_w); |
| 55 | DECLARE_WRITE8_MEMBER(paletteram_w); |
| 56 | DECLARE_WRITE8_MEMBER(colbank_w); |
| 57 | |
| 45 | 58 | TILE_GET_INFO_MEMBER(get_bg_tile_info); |
| 46 | 59 | TILE_GET_INFO_MEMBER(get_fg_tile_info); |
| 60 | |
| 47 | 61 | virtual void machine_start(); |
| 48 | 62 | virtual void machine_reset(); |
| 49 | 63 | virtual void video_start(); |
| 64 | |
| 50 | 65 | DECLARE_PALETTE_INIT(bogeyman); |
| 51 | | UINT32 screen_update_bogeyman(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 52 | | void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); |
| 53 | | required_device<cpu_device> m_maincpu; |
| 54 | | required_device<gfxdecode_device> m_gfxdecode; |
| 55 | | required_device<palette_device> m_palette; |
| 66 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 67 | void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 56 | 68 | }; |
trunk/src/mame/video/bogeyman.c
| r243005 | r243006 | |
| 36 | 36 | } |
| 37 | 37 | } |
| 38 | 38 | |
| 39 | | WRITE8_MEMBER(bogeyman_state::bogeyman_videoram_w) |
| 39 | WRITE8_MEMBER(bogeyman_state::videoram_w) |
| 40 | 40 | { |
| 41 | 41 | m_videoram[offset] = data; |
| 42 | 42 | m_bg_tilemap->mark_tile_dirty(offset); |
| 43 | 43 | } |
| 44 | 44 | |
| 45 | | WRITE8_MEMBER(bogeyman_state::bogeyman_colorram_w) |
| 45 | WRITE8_MEMBER(bogeyman_state::colorram_w) |
| 46 | 46 | { |
| 47 | 47 | m_colorram[offset] = data; |
| 48 | 48 | m_bg_tilemap->mark_tile_dirty(offset); |
| 49 | 49 | } |
| 50 | 50 | |
| 51 | | WRITE8_MEMBER(bogeyman_state::bogeyman_videoram2_w) |
| 51 | WRITE8_MEMBER(bogeyman_state::videoram2_w) |
| 52 | 52 | { |
| 53 | 53 | m_videoram2[offset] = data; |
| 54 | 54 | m_fg_tilemap->mark_tile_dirty(offset); |
| 55 | 55 | } |
| 56 | 56 | |
| 57 | | WRITE8_MEMBER(bogeyman_state::bogeyman_colorram2_w) |
| 57 | WRITE8_MEMBER(bogeyman_state::colorram2_w) |
| 58 | 58 | { |
| 59 | 59 | m_colorram2[offset] = data; |
| 60 | 60 | m_fg_tilemap->mark_tile_dirty(offset); |
| 61 | 61 | } |
| 62 | 62 | |
| 63 | | WRITE8_MEMBER(bogeyman_state::bogeyman_paletteram_w) |
| 63 | WRITE8_MEMBER(bogeyman_state::paletteram_w) |
| 64 | 64 | { |
| 65 | 65 | /* RGB output is inverted */ |
| 66 | 66 | m_palette->write(space, offset, UINT8(~data)); |
| r243005 | r243006 | |
| 94 | 94 | m_fg_tilemap->set_transparent_pen(0); |
| 95 | 95 | } |
| 96 | 96 | |
| 97 | | void bogeyman_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) |
| 97 | void bogeyman_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 98 | 98 | { |
| 99 | | int offs; |
| 100 | | |
| 101 | | for (offs = 0; offs < m_spriteram.bytes(); offs += 4) |
| 99 | for (int offs = 0; offs < m_spriteram.bytes(); offs += 4) |
| 102 | 100 | { |
| 103 | 101 | int attr = m_spriteram[offs]; |
| 104 | 102 | |
| r243005 | r243006 | |
| 139 | 137 | } |
| 140 | 138 | } |
| 141 | 139 | |
| 142 | | UINT32 bogeyman_state::screen_update_bogeyman(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 140 | UINT32 bogeyman_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 143 | 141 | { |
| 144 | 142 | m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); |
| 145 | 143 | draw_sprites(bitmap, cliprect); |