trunk/src/mame/drivers/mario.c
| r241807 | r241808 | |
| 448 | 448 | }; |
| 449 | 449 | |
| 450 | 450 | static GFXDECODE_START( mario ) |
| 451 | | GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 ) |
| 452 | | GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0, 32 ) |
| 451 | GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 32 ) |
| 452 | GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0, 32 ) |
| 453 | 453 | GFXDECODE_END |
| 454 | 454 | |
| 455 | 455 | static const gfx_layout spritelayout_bl = |
| r241807 | r241808 | |
| 466 | 466 | }; |
| 467 | 467 | |
| 468 | 468 | static GFXDECODE_START( mariobl ) |
| 469 | | GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 ) |
| 470 | | GFXDECODE_ENTRY( "gfx2", 0, spritelayout_bl, 0, 32 ) |
| 469 | GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 32 ) |
| 470 | GFXDECODE_ENTRY( "gfx2", 0, spritelayout_bl, 0, 32 ) |
| 471 | 471 | GFXDECODE_END |
| 472 | 472 | |
| 473 | 473 | static const gfx_layout spritelayout_bl2 = |
| r241807 | r241808 | |
| 521 | 521 | MCFG_SCREEN_UPDATE_DRIVER(mario_state, screen_update_mario) |
| 522 | 522 | MCFG_SCREEN_PALETTE("palette") |
| 523 | 523 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", mario) |
| 524 | | MCFG_PALETTE_ADD("palette", 512) |
| 524 | MCFG_PALETTE_ADD("palette", 256) |
| 525 | 525 | MCFG_PALETTE_INIT_OWNER(mario_state, mario) |
| 526 | 526 | |
| 527 | 527 | MACHINE_CONFIG_END |
| r241807 | r241808 | |
| 577 | 577 | MCFG_SCREEN_UPDATE_DRIVER(mario_state, screen_update_mariobl) |
| 578 | 578 | MCFG_SCREEN_PALETTE("palette") |
| 579 | 579 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", mariobl) |
| 580 | | MCFG_PALETTE_ADD("palette", 512) |
| 580 | MCFG_PALETTE_ADD("palette", 256) |
| 581 | 581 | MCFG_PALETTE_INIT_OWNER(mario_state, mario) |
| 582 | 582 | |
| 583 | 583 | /* sound hardware */ |
trunk/src/mame/includes/mario.h
| r241807 | r241808 | |
| 31 | 31 | #define I8035_MASTER_CLOCK XTAL_11MHz /* verified on pcb: 730Khz */ |
| 32 | 32 | #define I8035_CLOCK (I8035_MASTER_CLOCK) |
| 33 | 33 | |
| 34 | | #define MARIO_PALETTE_LENGTH (256) |
| 35 | | |
| 36 | 34 | class mario_state : public driver_device |
| 37 | 35 | { |
| 38 | 36 | public: |
| 39 | 37 | mario_state(const machine_config &mconfig, device_type type, const char *tag) |
| 40 | 38 | : driver_device(mconfig, type, tag), |
| 41 | | m_spriteram(*this, "spriteram"), |
| 42 | | m_videoram(*this, "videoram"), |
| 43 | | m_discrete(*this, "discrete"), |
| 39 | |
| 44 | 40 | m_maincpu(*this, "maincpu"), |
| 45 | 41 | m_audiocpu(*this, "audiocpu"), |
| 46 | 42 | m_gfxdecode(*this, "gfxdecode"), |
| 47 | 43 | m_palette(*this, "palette"), |
| 48 | | m_z80dma(*this, "z80dma") { } |
| 44 | m_z80dma(*this, "z80dma"), |
| 45 | m_discrete(*this, "discrete"), |
| 46 | m_spriteram(*this, "spriteram"), |
| 47 | m_videoram(*this, "videoram"), |
| 48 | m_monitor(0) { } |
| 49 | 49 | |
| 50 | /* devices */ |
| 51 | required_device<cpu_device> m_maincpu; |
| 52 | optional_device<cpu_device> m_audiocpu; |
| 53 | required_device<gfxdecode_device> m_gfxdecode; |
| 54 | required_device<palette_device> m_palette; |
| 55 | optional_device<z80dma_device> m_z80dma; |
| 56 | optional_device<discrete_device> m_discrete; |
| 57 | |
| 50 | 58 | /* memory pointers */ |
| 59 | required_shared_ptr<UINT8> m_spriteram; |
| 60 | required_shared_ptr<UINT8> m_videoram; |
| 51 | 61 | |
| 52 | | /* machine states */ |
| 53 | | |
| 54 | 62 | /* sound state */ |
| 55 | 63 | UINT8 m_last; |
| 56 | 64 | UINT8 m_portT; |
| r241807 | r241808 | |
| 61 | 69 | UINT8 m_palette_bank; |
| 62 | 70 | UINT16 m_gfx_scroll; |
| 63 | 71 | UINT8 m_flip; |
| 64 | | |
| 65 | | /* driver general */ |
| 66 | | |
| 67 | | required_shared_ptr<UINT8> m_spriteram; |
| 68 | | required_shared_ptr<UINT8> m_videoram; |
| 69 | | optional_device<discrete_device> m_discrete; |
| 70 | 72 | tilemap_t *m_bg_tilemap; |
| 71 | 73 | int m_monitor; |
| 72 | 74 | |
| r241807 | r241808 | |
| 104 | 106 | DECLARE_READ8_MEMBER(memory_read_byte); |
| 105 | 107 | DECLARE_WRITE8_MEMBER(memory_write_byte); |
| 106 | 108 | void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int is_bootleg); |
| 107 | | required_device<cpu_device> m_maincpu; |
| 108 | | optional_device<cpu_device> m_audiocpu; |
| 109 | | required_device<gfxdecode_device> m_gfxdecode; |
| 110 | | required_device<palette_device> m_palette; |
| 111 | | optional_device<z80dma_device> m_z80dma; |
| 112 | 109 | }; |
| 113 | 110 | |
| 114 | 111 | /*----------- defined in audio/mario.c -----------*/ |
trunk/src/mame/video/mario.c
| r241807 | r241808 | |
| 67 | 67 | const UINT8 *color_prom = memregion("proms")->base(); |
| 68 | 68 | dynamic_array<rgb_t> rgb; |
| 69 | 69 | |
| 70 | | compute_res_net_all(rgb, color_prom, mario_decode_info, mario_net_info); |
| 70 | if (m_monitor == 0) |
| 71 | compute_res_net_all(rgb, color_prom, mario_decode_info, mario_net_info); |
| 72 | else |
| 73 | compute_res_net_all(rgb, color_prom+256, mario_decode_info, mario_net_info_std); |
| 74 | |
| 71 | 75 | palette.set_pen_colors(0, rgb, 256); |
| 72 | | compute_res_net_all(rgb, color_prom+256, mario_decode_info, mario_net_info_std); |
| 73 | | palette.set_pen_colors(256, rgb, 256); |
| 74 | | |
| 75 | 76 | palette.palette()->normalize_range(0, 255); |
| 76 | | palette.palette()->normalize_range(256, 511); |
| 77 | 77 | } |
| 78 | 78 | |
| 79 | 79 | WRITE8_MEMBER(mario_state::mario_videoram_w) |
| r241807 | r241808 | |
| 126 | 126 | TILE_GET_INFO_MEMBER(mario_state::get_bg_tile_info) |
| 127 | 127 | { |
| 128 | 128 | int code = m_videoram[tile_index] + 256 * m_gfx_bank; |
| 129 | | int color; |
| 130 | | |
| 131 | | color = ((m_videoram[tile_index] >> 2) & 0x38) | 0x40 | (m_palette_bank<<7) | (m_monitor<<8); |
| 132 | | color = color >> 2; |
| 129 | int color = 8 + (m_videoram[tile_index] >> 5) + 16 * m_palette_bank; |
| 133 | 130 | SET_TILE_INFO_MEMBER(0, code, color, 0); |
| 134 | 131 | } |
| 135 | 132 | |
| r241807 | r241808 | |
| 138 | 135 | m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(mario_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, |
| 139 | 136 | 8, 8, 32, 32); |
| 140 | 137 | |
| 138 | m_gfxdecode->gfx(0)->set_granularity(8); |
| 139 | |
| 141 | 140 | m_gfx_bank = 0; |
| 142 | 141 | m_palette_bank = 0; |
| 143 | 142 | m_gfx_scroll = 0; |
| 143 | m_flip = 0; |
| 144 | 144 | save_item(NAME(m_gfx_bank)); |
| 145 | 145 | save_item(NAME(m_palette_bank)); |
| 146 | 146 | save_item(NAME(m_gfx_scroll)); |
| r241807 | r241808 | |
| 195 | 195 | x = x ^ (m_flip ? 0xFF : 0x00); /* physical screen location */ |
| 196 | 196 | |
| 197 | 197 | code = m_spriteram[offs + 2]; |
| 198 | | color = (m_spriteram[offs + 1] & 0x0f) + 16 * m_palette_bank + 32 * m_monitor; |
| 198 | color = (m_spriteram[offs + 1] & 0x0f) + 16 * m_palette_bank; |
| 199 | 199 | flipx = (m_spriteram[offs + 1] & 0x80); |
| 200 | 200 | flipy = (m_spriteram[offs + 1] & 0x40); |
| 201 | 201 | |
| r241807 | r241808 | |
| 220 | 220 | // x = x ^ (m_flip ? 0xFF : 0x00); /* physical screen location */ |
| 221 | 221 | |
| 222 | 222 | code = (m_spriteram[offs + 2] & 0x7f) | ((m_spriteram[offs + 1] & 0x40) << 1); // upper tile bit is where the flipy bit goes on mario |
| 223 | | color = (m_spriteram[offs + 1] & 0x0f) + 16 * m_palette_bank + 32 * m_monitor; |
| 223 | color = (m_spriteram[offs + 1] & 0x0f) + 16 * m_palette_bank; |
| 224 | 224 | flipx = (m_spriteram[offs + 1] & 0x80); |
| 225 | 225 | flipy = (m_spriteram[offs + 2] & 0x80); // and the flipy bit is where the upper tile bit is on mario |
| 226 | 226 | |
| r241807 | r241808 | |
| 257 | 257 | if (t != m_monitor) |
| 258 | 258 | { |
| 259 | 259 | m_monitor = t; |
| 260 | | machine().tilemap().mark_all_dirty(); |
| 260 | PALETTE_INIT_NAME(mario)(m_palette); |
| 261 | 261 | } |
| 262 | 262 | |
| 263 | 263 | m_bg_tilemap->set_scrolly(0, m_gfx_scroll); |