trunk/src/mame/drivers/iqblock.c
| r243623 | r243624 | |
| 25 | 25 | Stephh's notes : |
| 26 | 26 | |
| 27 | 27 | - Coin 2 as well as buttons 2 to 4 for each player are only read in "test mode". |
| 28 | | Same issue for Dip Siwtches 0-7 and 1-2 to 1-6. |
| 28 | Same issue for Dip Switches 0-7 and 1-2 to 1-6. |
| 29 | 29 | Some other games on the same hardware might use them. |
| 30 | 30 | - Dip Switch 0 is stored at 0xf0ac and Dip Switch 1 is stored at 0xf0ad. |
| 31 | 31 | However they are both read back at the same time with "ld hl,($F0AC)" instructions. |
| r243623 | r243624 | |
| 73 | 73 | } |
| 74 | 74 | |
| 75 | 75 | |
| 76 | | TIMER_DEVICE_CALLBACK_MEMBER(iqblock_state::iqblock_irq) |
| 76 | TIMER_DEVICE_CALLBACK_MEMBER(iqblock_state::irq) |
| 77 | 77 | { |
| 78 | 78 | int scanline = param; |
| 79 | 79 | |
| r243623 | r243624 | |
| 87 | 87 | } |
| 88 | 88 | |
| 89 | 89 | |
| 90 | | WRITE8_MEMBER(iqblock_state::iqblock_irqack_w) |
| 90 | WRITE8_MEMBER(iqblock_state::irqack_w) |
| 91 | 91 | { |
| 92 | 92 | m_maincpu->set_input_line(0, CLEAR_LINE); |
| 93 | 93 | } |
| r243623 | r243624 | |
| 119 | 119 | AM_RANGE(0x5090, 0x5090) AM_READ_PORT("SW0") |
| 120 | 120 | AM_RANGE(0x50a0, 0x50a0) AM_READ_PORT("SW1") |
| 121 | 121 | AM_RANGE(0x50b0, 0x50b1) AM_DEVWRITE("ymsnd", ym2413_device, write) // UM3567_data_port_0_w |
| 122 | | AM_RANGE(0x50c0, 0x50c0) AM_WRITE(iqblock_irqack_w) |
| 123 | | AM_RANGE(0x6000, 0x603f) AM_WRITE(iqblock_fgscroll_w) |
| 124 | | AM_RANGE(0x6800, 0x69ff) AM_WRITE(iqblock_fgvideoram_w) AM_SHARE("fgvideoram") /* initialized up to 6fff... bug or larger tilemap? */ |
| 125 | | AM_RANGE(0x7000, 0x7fff) AM_RAM_WRITE(iqblock_bgvideoram_w) AM_SHARE("bgvideoram") |
| 122 | AM_RANGE(0x50c0, 0x50c0) AM_WRITE(irqack_w) |
| 123 | AM_RANGE(0x6000, 0x603f) AM_WRITE(fgscroll_w) |
| 124 | AM_RANGE(0x6800, 0x69ff) AM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram") /* initialized up to 6fff... bug or larger tilemap? */ |
| 125 | AM_RANGE(0x7000, 0x7fff) AM_RAM_WRITE(bgvideoram_w) AM_SHARE("bgvideoram") |
| 126 | 126 | AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION("user1", 0) |
| 127 | 127 | ADDRESS_MAP_END |
| 128 | 128 | |
| r243623 | r243624 | |
| 340 | 340 | MCFG_CPU_ADD("maincpu", Z80,12000000/2) /* 6 MHz */ |
| 341 | 341 | MCFG_CPU_PROGRAM_MAP(main_map) |
| 342 | 342 | MCFG_CPU_IO_MAP(main_portmap) |
| 343 | | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", iqblock_state, iqblock_irq, "screen", 0, 1) |
| 343 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", iqblock_state, irq, "screen", 0, 1) |
| 344 | 344 | |
| 345 | 345 | MCFG_DEVICE_ADD("ppi8255", I8255A, 0) |
| 346 | 346 | MCFG_I8255_IN_PORTA_CB(IOPORT("P1")) |
| r243623 | r243624 | |
| 354 | 354 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 355 | 355 | MCFG_SCREEN_SIZE(64*8, 32*8) |
| 356 | 356 | MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 30*8-1) |
| 357 | | MCFG_SCREEN_UPDATE_DRIVER(iqblock_state, screen_update_iqblock) |
| 357 | MCFG_SCREEN_UPDATE_DRIVER(iqblock_state, screen_update) |
| 358 | 358 | MCFG_SCREEN_PALETTE("palette") |
| 359 | 359 | |
| 360 | 360 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", iqblock) |
| r243623 | r243624 | |
| 531 | 531 | |
| 532 | 532 | |
| 533 | 533 | |
| 534 | | GAME( 1993, iqblock, 0, iqblock, iqblock, iqblock_state, iqblock, ROT0, "IGS", "IQ-Block", 0 ) |
| 535 | | GAME( 1993, grndtour, 0, iqblock, grndtour,iqblock_state, grndtour, ROT0, "IGS", "Grand Tour", 0 ) |
| 534 | GAME( 1993, iqblock, 0, iqblock, iqblock, iqblock_state, iqblock, ROT0, "IGS", "IQ-Block", GAME_SUPPORTS_SAVE ) |
| 535 | GAME( 1993, grndtour, 0, iqblock, grndtour,iqblock_state, grndtour, ROT0, "IGS", "Grand Tour", GAME_SUPPORTS_SAVE ) |
trunk/src/mame/includes/iqblock.h
| r243623 | r243624 | |
| 11 | 11 | |
| 12 | 12 | required_device<cpu_device> m_maincpu; |
| 13 | 13 | required_device<gfxdecode_device> m_gfxdecode; |
| 14 | |
| 14 | 15 | required_shared_ptr<UINT8> m_rambase; |
| 15 | 16 | required_shared_ptr<UINT8> m_bgvideoram; |
| 16 | 17 | required_shared_ptr<UINT8> m_fgvideoram; |
| r243623 | r243624 | |
| 22 | 23 | |
| 23 | 24 | DECLARE_WRITE8_MEMBER(iqblock_prot_w); |
| 24 | 25 | DECLARE_WRITE8_MEMBER(grndtour_prot_w); |
| 25 | | DECLARE_WRITE8_MEMBER(iqblock_irqack_w); |
| 26 | | DECLARE_WRITE8_MEMBER(iqblock_fgvideoram_w); |
| 27 | | DECLARE_WRITE8_MEMBER(iqblock_bgvideoram_w); |
| 28 | | DECLARE_WRITE8_MEMBER(iqblock_fgscroll_w); |
| 26 | DECLARE_WRITE8_MEMBER(irqack_w); |
| 27 | DECLARE_WRITE8_MEMBER(fgvideoram_w); |
| 28 | DECLARE_WRITE8_MEMBER(bgvideoram_w); |
| 29 | DECLARE_WRITE8_MEMBER(fgscroll_w); |
| 29 | 30 | DECLARE_WRITE8_MEMBER(port_C_w); |
| 31 | |
| 32 | TIMER_DEVICE_CALLBACK_MEMBER(irq); |
| 33 | |
| 30 | 34 | DECLARE_DRIVER_INIT(grndtour); |
| 31 | 35 | DECLARE_DRIVER_INIT(iqblock); |
| 36 | virtual void video_start(); |
| 37 | |
| 32 | 38 | TILE_GET_INFO_MEMBER(get_bg_tile_info); |
| 33 | 39 | TILE_GET_INFO_MEMBER(get_fg_tile_info); |
| 34 | | virtual void video_start(); |
| 35 | | UINT32 screen_update_iqblock(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 36 | | TIMER_DEVICE_CALLBACK_MEMBER(iqblock_irq); |
| 40 | |
| 41 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 37 | 42 | }; |
trunk/src/mame/video/iqblock.c
| r243623 | r243624 | |
| 41 | 41 | |
| 42 | 42 | m_bg_tilemap->set_transparent_pen(0); |
| 43 | 43 | m_fg_tilemap->set_scroll_cols(64); |
| 44 | |
| 45 | save_item(NAME(m_videoenable)); |
| 44 | 46 | } |
| 45 | 47 | |
| 46 | 48 | |
| r243623 | r243624 | |
| 51 | 53 | |
| 52 | 54 | ***************************************************************************/ |
| 53 | 55 | |
| 54 | | WRITE8_MEMBER(iqblock_state::iqblock_fgvideoram_w) |
| 56 | WRITE8_MEMBER(iqblock_state::fgvideoram_w) |
| 55 | 57 | { |
| 56 | 58 | m_fgvideoram[offset] = data; |
| 57 | 59 | m_fg_tilemap->mark_tile_dirty(offset); |
| 58 | 60 | } |
| 59 | 61 | |
| 60 | | WRITE8_MEMBER(iqblock_state::iqblock_bgvideoram_w) |
| 62 | WRITE8_MEMBER(iqblock_state::bgvideoram_w) |
| 61 | 63 | { |
| 62 | 64 | m_bgvideoram[offset] = data; |
| 63 | 65 | m_bg_tilemap->mark_tile_dirty(offset & 0x7ff); |
| 64 | 66 | } |
| 65 | 67 | |
| 66 | | WRITE8_MEMBER(iqblock_state::iqblock_fgscroll_w) |
| 68 | WRITE8_MEMBER(iqblock_state::fgscroll_w) |
| 67 | 69 | { |
| 68 | 70 | m_fg_tilemap->set_scrolly(offset,data); |
| 69 | 71 | } |
| r243623 | r243624 | |
| 76 | 78 | |
| 77 | 79 | ***************************************************************************/ |
| 78 | 80 | |
| 79 | | UINT32 iqblock_state::screen_update_iqblock(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 81 | UINT32 iqblock_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 80 | 82 | { |
| 81 | 83 | if (!m_videoenable) return 0; |
| 82 | 84 | m_fg_tilemap->draw(screen, bitmap, cliprect, 0,0); |