trunk/src/mame/drivers/nitedrvr.c
| r30903 | r30904 | |
| 44 | 44 | |
| 45 | 45 | static ADDRESS_MAP_START( nitedrvr_map, AS_PROGRAM, 8, nitedrvr_state ) |
| 46 | 46 | AM_RANGE(0x0000, 0x00ff) AM_RAM AM_MIRROR(0x100) // SCRAM |
| 47 | | AM_RANGE(0x0200, 0x027f) AM_RAM_WRITE(nitedrvr_videoram_w) AM_MIRROR(0x180) AM_SHARE("videoram") // PFW |
| 48 | | AM_RANGE(0x0400, 0x05ff) AM_WRITE(nitedrvr_hvc_w) AM_SHARE("hvc") // POSH, POSV, CHAR, Watchdog |
| 47 | AM_RANGE(0x0200, 0x027f) AM_WRITE(nitedrvr_videoram_w) AM_MIRROR(0x180) AM_SHARE("videoram") // PFW |
| 48 | AM_RANGE(0x0400, 0x042f) AM_WRITEONLY AM_MIRROR(0x1c0) AM_SHARE("hvc") // POSH, POSV, CHAR |
| 49 | AM_RANGE(0x0430, 0x043f) AM_WRITE(watchdog_reset_w) AM_MIRROR(0x1c0) |
| 49 | 50 | AM_RANGE(0x0600, 0x07ff) AM_READ(nitedrvr_in0_r) |
| 50 | 51 | AM_RANGE(0x0800, 0x09ff) AM_READ(nitedrvr_in1_r) |
| 51 | 52 | AM_RANGE(0x0a00, 0x0bff) AM_WRITE(nitedrvr_out0_w) |
| 52 | 53 | AM_RANGE(0x0c00, 0x0dff) AM_WRITE(nitedrvr_out1_w) |
| 53 | | AM_RANGE(0x8000, 0x807f) AM_RAM AM_MIRROR(0x380) AM_SHARE("videoram") // PFR |
| 54 | AM_RANGE(0x8000, 0x807f) AM_READONLY AM_MIRROR(0x380) AM_SHARE("videoram") // PFR |
| 54 | 55 | AM_RANGE(0x8400, 0x87ff) AM_READWRITE(nitedrvr_steering_reset_r, nitedrvr_steering_reset_w) |
| 55 | 56 | AM_RANGE(0x9000, 0x9fff) AM_ROM // ROM1-ROM2 |
| 56 | 57 | AM_RANGE(0xfff0, 0xffff) AM_ROM // ROM2 for 6502 vectors |
| r30903 | r30904 | |
| 130 | 131 | GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 1 ) |
| 131 | 132 | GFXDECODE_END |
| 132 | 133 | |
| 133 | | /* Machine Initialization */ |
| 134 | | |
| 135 | 134 | /* Machine Driver */ |
| 136 | 135 | |
| 137 | 136 | static MACHINE_CONFIG_START( nitedrvr, nitedrvr_state ) |
| r30903 | r30904 | |
| 139 | 138 | /* basic machine hardware */ |
| 140 | 139 | MCFG_CPU_ADD("maincpu", M6502, XTAL_12_096MHz/12) // 1 MHz |
| 141 | 140 | MCFG_CPU_PROGRAM_MAP(nitedrvr_map) |
| 142 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", nitedrvr_state, irq0_line_hold) |
| 141 | MCFG_CPU_VBLANK_INT_DRIVER("screen", nitedrvr_state, irq0_line_hold) |
| 143 | 142 | MCFG_WATCHDOG_VBLANK_INIT(3) |
| 144 | 143 | |
| 145 | | |
| 146 | 144 | MCFG_TIMER_DRIVER_ADD_PERIODIC("crash_timer", nitedrvr_state, nitedrvr_crash_toggle_callback, PERIOD_OF_555_ASTABLE(RES_K(180), 330, CAP_U(1))) |
| 147 | 145 | |
| 148 | 146 | /* video hardware */ |
trunk/src/mame/includes/nitedrvr.h
| r30903 | r30904 | |
| 58 | 58 | DECLARE_WRITE8_MEMBER(nitedrvr_out0_w); |
| 59 | 59 | DECLARE_WRITE8_MEMBER(nitedrvr_out1_w); |
| 60 | 60 | DECLARE_WRITE8_MEMBER(nitedrvr_videoram_w); |
| 61 | | DECLARE_WRITE8_MEMBER(nitedrvr_hvc_w); |
| 62 | 61 | TILE_GET_INFO_MEMBER(get_bg_tile_info); |
| 63 | 62 | virtual void machine_start(); |
| 64 | 63 | virtual void machine_reset(); |
| 65 | 64 | virtual void video_start(); |
| 66 | 65 | UINT32 screen_update_nitedrvr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 67 | 66 | TIMER_DEVICE_CALLBACK_MEMBER(nitedrvr_crash_toggle_callback); |
| 68 | | void draw_box( bitmap_ind16 &bitmap, int bx, int by, int ex, int ey ); |
| 69 | | void draw_roadway( bitmap_ind16 &bitmap ); |
| 70 | | int nitedrvr_steering( ); |
| 67 | void draw_box(bitmap_ind16 &bitmap, const rectangle &cliprect, int bx, int by, int ex, int ey); |
| 68 | void draw_roadway(bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 69 | int nitedrvr_steering(); |
| 71 | 70 | }; |
| 72 | 71 | |
| 73 | 72 | /*----------- defined in audio/nitedrvr.c -----------*/ |
trunk/src/mame/video/nitedrvr.c
| r30903 | r30904 | |
| 13 | 13 | m_bg_tilemap->mark_tile_dirty(offset); |
| 14 | 14 | } |
| 15 | 15 | |
| 16 | | WRITE8_MEMBER(nitedrvr_state::nitedrvr_hvc_w) |
| 17 | | { |
| 18 | | m_hvc[offset & 0x3f] = data; |
| 19 | 16 | |
| 20 | | if ((offset & 0x30) == 0x30) |
| 21 | | watchdog_reset_w(space, 0, 0); |
| 22 | | } |
| 23 | | |
| 24 | 17 | TILE_GET_INFO_MEMBER(nitedrvr_state::get_bg_tile_info) |
| 25 | 18 | { |
| 26 | 19 | int code = m_videoram[tile_index] & 0x3f; |
| r30903 | r30904 | |
| 28 | 21 | SET_TILE_INFO_MEMBER(0, code, 0, 0); |
| 29 | 22 | } |
| 30 | 23 | |
| 31 | | |
| 32 | | |
| 33 | 24 | void nitedrvr_state::video_start() |
| 34 | 25 | { |
| 35 | | m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(nitedrvr_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); |
| 26 | m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(nitedrvr_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 8); |
| 36 | 27 | } |
| 37 | 28 | |
| 38 | | void nitedrvr_state::draw_box( bitmap_ind16 &bitmap, int bx, int by, int ex, int ey ) |
| 29 | void nitedrvr_state::draw_box(bitmap_ind16 &bitmap, const rectangle &cliprect, int bx, int by, int ex, int ey) |
| 39 | 30 | { |
| 40 | | int x, y; |
| 41 | | |
| 42 | | for (y = by; y < ey; y++) |
| 31 | for (int y = by; y < ey; y++) |
| 43 | 32 | { |
| 44 | | for (x = bx; x < ex; x++) |
| 45 | | if ((y < 256) && (x < 256)) |
| 33 | for (int x = bx; x < ex; x++) |
| 34 | if (cliprect.contains(x, y)) |
| 46 | 35 | bitmap.pix16(y, x) = 1; |
| 47 | 36 | } |
| 48 | | |
| 49 | | return; |
| 50 | 37 | } |
| 51 | 38 | |
| 52 | | void nitedrvr_state::draw_roadway( bitmap_ind16 &bitmap ) |
| 39 | void nitedrvr_state::draw_roadway(bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 53 | 40 | { |
| 54 | | int roadway; |
| 55 | | |
| 56 | | for (roadway = 0; roadway < 16; roadway++) |
| 41 | for (int roadway = 0; roadway < 16; roadway++) |
| 57 | 42 | { |
| 58 | | int bx, by, ex, ey; |
| 43 | int bx = m_hvc[roadway]; |
| 44 | int by = m_hvc[roadway + 16]; |
| 45 | int ex = bx + ((m_hvc[roadway + 32] & 0xf0) >> 4); |
| 46 | int ey = by + (16 - (m_hvc[roadway + 32] & 0x0f)); |
| 59 | 47 | |
| 60 | | bx = m_hvc[roadway]; |
| 61 | | by = m_hvc[roadway + 16]; |
| 62 | | ex = bx + ((m_hvc[roadway + 32] & 0xf0) >> 4); |
| 63 | | ey = by + (16 - (m_hvc[roadway + 32] & 0x0f)); |
| 64 | | |
| 65 | | draw_box(bitmap, bx, by, ex, ey); |
| 48 | draw_box(bitmap, cliprect, bx, by, ex, ey); |
| 66 | 49 | } |
| 67 | 50 | } |
| 68 | 51 | |
| 69 | 52 | UINT32 nitedrvr_state::screen_update_nitedrvr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 70 | 53 | { |
| 71 | | m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); |
| 72 | | draw_roadway(bitmap); |
| 54 | bitmap.fill(0, cliprect); |
| 55 | |
| 56 | // don't wrap playfield |
| 57 | rectangle clip = cliprect; |
| 58 | if (clip.max_y > 63) clip.max_y = 63; |
| 59 | |
| 60 | m_bg_tilemap->draw(screen, bitmap, clip, 0, 0); |
| 61 | draw_roadway(bitmap, cliprect); |
| 62 | |
| 73 | 63 | return 0; |
| 74 | 64 | } |