trunk/src/mame/drivers/realbrk.c
| r245101 | r245102 | |
| 36 | 36 | |
| 37 | 37 | - Priorities (e.g during the intro, there are two black bands in the backround |
| 38 | 38 | that should obscure sprites). |
| 39 | | - Sometimes sprites are shrinked to end up overlapping the background image |
| 39 | - Sometimes sprites are shrunk to end up overlapping the background image |
| 40 | 40 | in the tilemaps, but they are a few pixels off |
| 41 | 41 | |
| 42 | 42 | ***************************************************************************/ |
| r245101 | r245102 | |
| 155 | 155 | AM_RANGE(0x000000, 0x0fffff) AM_ROM // ROM |
| 156 | 156 | AM_RANGE(0x200000, 0x203fff) AM_RAM AM_SHARE("spriteram") // Sprites |
| 157 | 157 | AM_RANGE(0x400000, 0x40ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // Palette |
| 158 | | AM_RANGE(0x600000, 0x601fff) AM_RAM_WRITE(realbrk_vram_0_w) AM_SHARE("vram_0") // Background (0) |
| 159 | | AM_RANGE(0x602000, 0x603fff) AM_RAM_WRITE(realbrk_vram_1_w) AM_SHARE("vram_1") // Background (1) |
| 160 | | AM_RANGE(0x604000, 0x604fff) AM_RAM_WRITE(realbrk_vram_2_w) AM_SHARE("vram_2") // Text (2) |
| 161 | | AM_RANGE(0x606000, 0x60600f) AM_RAM_WRITE(realbrk_vregs_w) AM_SHARE("vregs") // Scroll + Video Regs |
| 158 | AM_RANGE(0x600000, 0x601fff) AM_RAM_WRITE(vram_0_w) AM_SHARE("vram_0") // Background (0) |
| 159 | AM_RANGE(0x602000, 0x603fff) AM_RAM_WRITE(vram_1_w) AM_SHARE("vram_1") // Background (1) |
| 160 | AM_RANGE(0x604000, 0x604fff) AM_RAM_WRITE(vram_2_w) AM_SHARE("vram_2") // Text (2) |
| 161 | AM_RANGE(0x606000, 0x60600f) AM_RAM_WRITE(vregs_w) AM_SHARE("vregs") // Scroll + Video Regs |
| 162 | 162 | AM_RANGE(0x605000, 0x61ffff) AM_RAM // |
| 163 | 163 | AM_RANGE(0x800000, 0x800003) AM_DEVREADWRITE8("ymz", ymz280b_device, read, write, 0xff00) // YMZ280 |
| 164 | 164 | AM_RANGE(0xfe0000, 0xfeffff) AM_RAM // RAM |
| r245101 | r245102 | |
| 744 | 744 | Billiard Academy Real Break |
| 745 | 745 | ***************************************************************************/ |
| 746 | 746 | |
| 747 | | INTERRUPT_GEN_MEMBER(realbrk_state::realbrk_interrupt) |
| 747 | INTERRUPT_GEN_MEMBER(realbrk_state::interrupt) |
| 748 | 748 | { |
| 749 | 749 | /* VBlank is connected to INT1 (external interrupts pin 1) */ |
| 750 | 750 | m_tmp68301->external_interrupt_1(); |
| r245101 | r245102 | |
| 755 | 755 | /* basic machine hardware */ |
| 756 | 756 | MCFG_CPU_ADD("maincpu",M68000, XTAL_32MHz / 2) /* !! TMP68301 !! */ |
| 757 | 757 | MCFG_CPU_PROGRAM_MAP(realbrk_mem) |
| 758 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", realbrk_state, realbrk_interrupt) |
| 758 | MCFG_CPU_VBLANK_INT_DRIVER("screen", realbrk_state, interrupt) |
| 759 | 759 | MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("tmp68301",tmp68301_device,irq_callback) |
| 760 | 760 | |
| 761 | 761 | MCFG_DEVICE_ADD("tmp68301", TMP68301, 0) |
| r245101 | r245102 | |
| 767 | 767 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 768 | 768 | MCFG_SCREEN_SIZE(0x140, 0xe0) |
| 769 | 769 | MCFG_SCREEN_VISIBLE_AREA(0, 0x140-1, 0, 0xe0-1) |
| 770 | | MCFG_SCREEN_UPDATE_DRIVER(realbrk_state, screen_update_realbrk) |
| 770 | MCFG_SCREEN_UPDATE_DRIVER(realbrk_state, screen_update) |
| 771 | 771 | MCFG_SCREEN_PALETTE("palette") |
| 772 | 772 | |
| 773 | 773 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", realbrk) |
| r245101 | r245102 | |
| 1273 | 1273 | ROM_END |
| 1274 | 1274 | #endif |
| 1275 | 1275 | |
| 1276 | | GAME( 1998, pkgnsh, 0, pkgnsh, pkgnsh, driver_device, 0, ROT0, "Nakanihon / Dynax", "Pachinko Gindama Shoubu (Japan)", GAME_IMPERFECT_GRAPHICS ) |
| 1276 | GAME( 1998, pkgnsh, 0, pkgnsh, pkgnsh, driver_device, 0, ROT0, "Nakanihon / Dynax", "Pachinko Gindama Shoubu (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 1277 | 1277 | |
| 1278 | | GAME( 1998, pkgnshdx, 0, pkgnshdx, pkgnshdx, driver_device, 0, ROT0, "Nakanihon / Dynax", "Pachinko Gindama Shoubu DX (Japan)", GAME_IMPERFECT_GRAPHICS ) |
| 1278 | GAME( 1998, pkgnshdx, 0, pkgnshdx, pkgnshdx, driver_device, 0, ROT0, "Nakanihon / Dynax", "Pachinko Gindama Shoubu DX (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 1279 | 1279 | |
| 1280 | | GAME( 1998, realbrk, 0, realbrk, realbrk, driver_device, 0, ROT0, "Nakanihon", "Billiard Academy Real Break (Europe)", GAME_IMPERFECT_GRAPHICS ) |
| 1281 | | GAME( 1998, realbrko, realbrk, realbrk, realbrk, driver_device, 0, ROT0, "Nakanihon", "Billiard Academy Real Break (Europe, older)", GAME_IMPERFECT_GRAPHICS ) |
| 1282 | | GAME( 1998, realbrkj, realbrk, realbrk, realbrk, driver_device, 0, ROT0, "Nakanihon", "Billiard Academy Real Break (Japan)", GAME_IMPERFECT_GRAPHICS ) |
| 1283 | | GAME( 1998, realbrkk, realbrk, realbrk, realbrk, driver_device, 0, ROT0, "Nakanihon", "Billiard Academy Real Break (Korea)", GAME_IMPERFECT_GRAPHICS ) |
| 1280 | GAME( 1998, realbrk, 0, realbrk, realbrk, driver_device, 0, ROT0, "Nakanihon", "Billiard Academy Real Break (Europe)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 1281 | GAME( 1998, realbrko, realbrk, realbrk, realbrk, driver_device, 0, ROT0, "Nakanihon", "Billiard Academy Real Break (Europe, older)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 1282 | GAME( 1998, realbrkj, realbrk, realbrk, realbrk, driver_device, 0, ROT0, "Nakanihon", "Billiard Academy Real Break (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 1283 | GAME( 1998, realbrkk, realbrk, realbrk, realbrk, driver_device, 0, ROT0, "Nakanihon", "Billiard Academy Real Break (Korea)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 1284 | 1284 | |
| 1285 | | GAME( 2004, dai2kaku, 0, dai2kaku, dai2kaku, driver_device, 0, ROT0, "SystemBit", "Dai-Dai-Kakumei (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 1285 | GAME( 2004, dai2kaku, 0, dai2kaku, dai2kaku, driver_device, 0, ROT0, "SystemBit", "Dai-Dai-Kakumei (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) |
trunk/src/mame/includes/realbrk.h
| r245101 | r245102 | |
| 5 | 5 | public: |
| 6 | 6 | realbrk_state(const machine_config &mconfig, device_type type, const char *tag) |
| 7 | 7 | : driver_device(mconfig, type, tag), |
| 8 | m_maincpu(*this, "maincpu"), |
| 9 | m_tmp68301(*this, "tmp68301"), |
| 10 | m_gfxdecode(*this, "gfxdecode"), |
| 11 | m_screen(*this, "screen"), |
| 12 | m_palette(*this, "palette"), |
| 8 | 13 | m_spriteram(*this, "spriteram"), |
| 9 | 14 | m_vram_0(*this, "vram_0"), |
| 10 | 15 | m_vram_1(*this, "vram_1"), |
| r245101 | r245102 | |
| 13 | 18 | m_dsw_select(*this, "dsw_select"), |
| 14 | 19 | m_backup_ram(*this, "backup_ram"), |
| 15 | 20 | m_vram_0ras(*this, "vram_0ras"), |
| 16 | | m_vram_1ras(*this, "vram_1ras"), |
| 17 | | m_maincpu(*this, "maincpu"), |
| 18 | | m_tmp68301(*this, "tmp68301"), |
| 19 | | m_gfxdecode(*this, "gfxdecode"), |
| 20 | | m_screen(*this, "screen"), |
| 21 | | m_palette(*this, "palette") { } |
| 21 | m_vram_1ras(*this, "vram_1ras") { } |
| 22 | 22 | |
| 23 | required_device<cpu_device> m_maincpu; |
| 24 | required_device<tmp68301_device> m_tmp68301; |
| 25 | required_device<gfxdecode_device> m_gfxdecode; |
| 26 | required_device<screen_device> m_screen; |
| 27 | required_device<palette_device> m_palette; |
| 28 | |
| 23 | 29 | required_shared_ptr<UINT16> m_spriteram; |
| 24 | 30 | required_shared_ptr<UINT16> m_vram_0; |
| 25 | 31 | required_shared_ptr<UINT16> m_vram_1; |
| r245101 | r245102 | |
| 29 | 35 | optional_shared_ptr<UINT16> m_backup_ram; |
| 30 | 36 | optional_shared_ptr<UINT16> m_vram_0ras; |
| 31 | 37 | optional_shared_ptr<UINT16> m_vram_1ras; |
| 38 | |
| 32 | 39 | bitmap_ind16 *m_tmpbitmap0; |
| 33 | 40 | bitmap_ind16 *m_tmpbitmap1; |
| 34 | 41 | int m_disable_video; |
| 35 | 42 | tilemap_t *m_tilemap_0; |
| 36 | 43 | tilemap_t *m_tilemap_1; |
| 37 | 44 | tilemap_t *m_tilemap_2; |
| 45 | |
| 46 | // common |
| 47 | DECLARE_WRITE16_MEMBER(vram_0_w); |
| 48 | DECLARE_WRITE16_MEMBER(vram_1_w); |
| 49 | DECLARE_WRITE16_MEMBER(vram_2_w); |
| 50 | DECLARE_WRITE16_MEMBER(vregs_w); |
| 51 | |
| 52 | // realbrk and/or dai2kaku |
| 38 | 53 | DECLARE_READ16_MEMBER(realbrk_dsw_r); |
| 54 | DECLARE_WRITE16_MEMBER(realbrk_flipscreen_w); |
| 55 | DECLARE_WRITE16_MEMBER(dai2kaku_flipscreen_w); |
| 56 | |
| 57 | // pkgnsh and/or pkgnshdx |
| 39 | 58 | DECLARE_READ16_MEMBER(pkgnsh_input_r); |
| 40 | 59 | DECLARE_READ16_MEMBER(pkgnshdx_input_r); |
| 41 | 60 | DECLARE_READ16_MEMBER(backup_ram_r); |
| 42 | 61 | DECLARE_READ16_MEMBER(backup_ram_dx_r); |
| 43 | 62 | DECLARE_WRITE16_MEMBER(backup_ram_w); |
| 44 | | DECLARE_WRITE16_MEMBER(realbrk_flipscreen_w); |
| 45 | | DECLARE_WRITE16_MEMBER(dai2kaku_flipscreen_w); |
| 46 | | DECLARE_WRITE16_MEMBER(realbrk_vram_0_w); |
| 47 | | DECLARE_WRITE16_MEMBER(realbrk_vram_1_w); |
| 48 | | DECLARE_WRITE16_MEMBER(realbrk_vram_2_w); |
| 49 | | DECLARE_WRITE16_MEMBER(realbrk_vregs_w); |
| 63 | |
| 50 | 64 | TILE_GET_INFO_MEMBER(get_tile_info_0); |
| 51 | 65 | TILE_GET_INFO_MEMBER(get_tile_info_1); |
| 52 | 66 | TILE_GET_INFO_MEMBER(get_tile_info_2); |
| 67 | |
| 53 | 68 | virtual void video_start(); |
| 54 | | UINT32 screen_update_realbrk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 69 | |
| 70 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 55 | 71 | UINT32 screen_update_dai2kaku(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 56 | | INTERRUPT_GEN_MEMBER(realbrk_interrupt); |
| 57 | 72 | void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect); |
| 58 | 73 | void dai2kaku_draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect, int layer); |
| 59 | | required_device<cpu_device> m_maincpu; |
| 60 | | required_device<tmp68301_device> m_tmp68301; |
| 61 | | required_device<gfxdecode_device> m_gfxdecode; |
| 62 | | required_device<screen_device> m_screen; |
| 63 | | required_device<palette_device> m_palette; |
| 74 | |
| 75 | INTERRUPT_GEN_MEMBER(interrupt); |
| 64 | 76 | }; |
trunk/src/mame/video/realbrk.c
| r245101 | r245102 | |
| 88 | 88 | TILE_FLIPYX( attr >> 14 )); |
| 89 | 89 | } |
| 90 | 90 | |
| 91 | | WRITE16_MEMBER(realbrk_state::realbrk_vram_0_w) |
| 91 | WRITE16_MEMBER(realbrk_state::vram_0_w) |
| 92 | 92 | { |
| 93 | 93 | COMBINE_DATA(&m_vram_0[offset]); |
| 94 | 94 | m_tilemap_0->mark_tile_dirty(offset/2); |
| 95 | 95 | } |
| 96 | 96 | |
| 97 | | WRITE16_MEMBER(realbrk_state::realbrk_vram_1_w) |
| 97 | WRITE16_MEMBER(realbrk_state::vram_1_w) |
| 98 | 98 | { |
| 99 | 99 | COMBINE_DATA(&m_vram_1[offset]); |
| 100 | 100 | m_tilemap_1->mark_tile_dirty(offset/2); |
| r245101 | r245102 | |
| 123 | 123 | 0); |
| 124 | 124 | } |
| 125 | 125 | |
| 126 | | WRITE16_MEMBER(realbrk_state::realbrk_vram_2_w) |
| 126 | WRITE16_MEMBER(realbrk_state::vram_2_w) |
| 127 | 127 | { |
| 128 | 128 | COMBINE_DATA(&m_vram_2[offset]); |
| 129 | 129 | m_tilemap_2->mark_tile_dirty(offset); |
| r245101 | r245102 | |
| 154 | 154 | |
| 155 | 155 | m_tmpbitmap0 = auto_bitmap_ind16_alloc(machine(),32,32); |
| 156 | 156 | m_tmpbitmap1 = auto_bitmap_ind16_alloc(machine(),32,32); |
| 157 | |
| 158 | save_item(NAME(m_disable_video)); |
| 157 | 159 | } |
| 158 | 160 | |
| 159 | 161 | /*************************************************************************** |
| r245101 | r245102 | |
| 167 | 169 | of a sprite to be drawn. 0x300 items of the list seem to be used. |
| 168 | 170 | |
| 169 | 171 | Each sprite is made of several 16x16 tiles (from 1 to 32x32) and |
| 170 | | can be zoomed / shrinked in size. |
| 172 | can be zoomed / shrunk in size. |
| 171 | 173 | |
| 172 | 174 | There are two set of tiles: with 256 or 16 colors. |
| 173 | 175 | |
| r245101 | r245102 | |
| 203 | 205 | |
| 204 | 206 | void realbrk_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect) |
| 205 | 207 | { |
| 206 | | UINT16 *spriteram16 = m_spriteram; |
| 207 | 208 | int offs; |
| 208 | 209 | |
| 209 | 210 | int max_x = m_screen->width(); |
| r245101 | r245102 | |
| 220 | 221 | |
| 221 | 222 | UINT16 *s; |
| 222 | 223 | |
| 223 | | if (spriteram16[offs] & 0x8000) continue; |
| 224 | if (m_spriteram[offs] & 0x8000) continue; |
| 224 | 225 | |
| 225 | | s = &spriteram16[(spriteram16[offs] & 0x3ff) * 16/2]; |
| 226 | s = &m_spriteram[(m_spriteram[offs] & 0x3ff) * 16/2]; |
| 226 | 227 | |
| 227 | 228 | sy = s[ 0 ]; |
| 228 | 229 | sx = s[ 1 ]; |
| r245101 | r245102 | |
| 365 | 366 | /* layer : 0== bghigh<spr 1== bglow<spr<bghigh 2==spr<bglow 3==boarder */ |
| 366 | 367 | void realbrk_state::dai2kaku_draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect, int layer) |
| 367 | 368 | { |
| 368 | | UINT16 *spriteram16 = m_spriteram; |
| 369 | 369 | int offs; |
| 370 | 370 | |
| 371 | 371 | int max_x = m_screen->width(); |
| r245101 | r245102 | |
| 380 | 380 | |
| 381 | 381 | UINT16 *s; |
| 382 | 382 | |
| 383 | | if (spriteram16[offs] & 0x8000) continue; |
| 383 | if (m_spriteram[offs] & 0x8000) continue; |
| 384 | 384 | |
| 385 | | s = &spriteram16[(spriteram16[offs] & 0x3ff) * 16/2]; |
| 385 | s = &m_spriteram[(m_spriteram[offs] & 0x3ff) * 16/2]; |
| 386 | 386 | |
| 387 | 387 | sy = s[ 0 ]; |
| 388 | 388 | sx = s[ 1 ]; |
| r245101 | r245102 | |
| 467 | 467 | |
| 468 | 468 | ***************************************************************************/ |
| 469 | 469 | |
| 470 | | WRITE16_MEMBER(realbrk_state::realbrk_vregs_w) |
| 470 | WRITE16_MEMBER(realbrk_state::vregs_w) |
| 471 | 471 | { |
| 472 | 472 | UINT16 old_data = m_vregs[offset]; |
| 473 | 473 | UINT16 new_data = COMBINE_DATA(&m_vregs[offset]); |
| r245101 | r245102 | |
| 478 | 478 | } |
| 479 | 479 | } |
| 480 | 480 | |
| 481 | | UINT32 realbrk_state::screen_update_realbrk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 481 | UINT32 realbrk_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 482 | 482 | { |
| 483 | 483 | int layers_ctrl = -1; |
| 484 | 484 | |