| Previous | 199869 Revisions | Next |
| r20648 Friday 1st February, 2013 at 11:37:47 UTC by Miodrag Milanović |
|---|
| modernized reset of pre/postload calls, just few legacy left (no whatsnew) |
| [src/mame/audio] | 8080bw.c |
| [src/mame/drivers] | astrocde.c atetris.c cave.c crystal.c darius.c djmain.c dynax.c fcrash.c mjsister.c mw8080bw.c mystwarr.c ninjaw.c othunder.c pengadvb.c psikyo4.c renegade.c slapshot.c taito_f2.c taito_h.c taito_x.c taito_z.c taitoair.c topspeed.c vegas.c warriorb.c wgp.c xexex.c xmen.c |
| [src/mame/includes] | 40love.h 8080bw.h astrocde.h atetris.h cave.h chaknpop.h cps1.h darius.h djmain.h dynax.h gradius3.h gridlee.h hyprduel.h mw8080bw.h mystwarr.h nemesis.h ninjaw.h othunder.h psikyo4.h renegade.h simpsons.h slapshot.h tail2nos.h taito_f2.h taito_h.h taito_z.h taitoair.h tnzs.h toaplan1.h toaplan2.h topspeed.h tumbleb.h twincobr.h warriorb.h wgp.h williams.h xexex.h xmen.h |
| [src/mame/machine] | simpsons.c tnzs.c toaplan1.c twincobr.c williams.c |
| [src/mame/video] | 40love.c cave.c chaknpop.c cps1.c gradius3.c gridlee.c hyprduel.c nemesis.c tail2nos.c taitoic.c taitoic.h toaplan1.c toaplan2.c tumbleb.c twincobr.c |
| r20647 | r20648 | |
|---|---|---|
| 263 | 263 | } |
| 264 | 264 | |
| 265 | 265 | |
| 266 | ||
| 266 | void nemesis_state::nemesis_postload() | |
| 267 | 267 | { |
| 268 | nemesis_state *state = machine.driver_data<nemesis_state>(); | |
| 269 | 268 | int i, offs; |
| 270 | 269 | |
| 271 | for (offs = 0; offs < | |
| 270 | for (offs = 0; offs < m_charram.bytes(); offs++) | |
| 272 | 271 | { |
| 273 | 272 | for (i = 0; i < 8; i++) |
| 274 | 273 | { |
| 275 | 274 | int w = sprite_data[i].width; |
| 276 | 275 | int h = sprite_data[i].height; |
| 277 | machine.gfx[sprite_data[i].char_type]->mark_dirty(offs * 4 / (w * h)); | |
| 276 | machine().gfx[sprite_data[i].char_type]->mark_dirty(offs * 4 / (w * h)); | |
| 278 | 277 | } |
| 279 | 278 | } |
| 280 | state->m_background->mark_all_dirty(); | |
| 281 | state->m_foreground->mark_all_dirty(); | |
| 279 | m_background->mark_all_dirty(); | |
| 280 | m_foreground->mark_all_dirty(); | |
| 282 | 281 | } |
| 283 | 282 | |
| 284 | 283 | |
| r20647 | r20648 | |
| 308 | 307 | machine().gfx[7]->set_source((UINT8 *)m_charram.target()); |
| 309 | 308 | |
| 310 | 309 | /* Set up save state */ |
| 311 | machine().save().register_postload(save_prepost_delegate(FUNC(nemesis_postload), | |
| 310 | machine().save().register_postload(save_prepost_delegate(FUNC(nemesis_state::nemesis_postload), this)); | |
| 312 | 311 | } |
| 313 | 312 | |
| 314 | 313 |
| r20647 | r20648 | |
|---|---|---|
| 38 | 38 | * |
| 39 | 39 | *************************************/ |
| 40 | 40 | |
| 41 | ||
| 41 | void gridlee_state::expand_pixels() | |
| 42 | 42 | { |
| 43 | gridlee_state *state = machine.driver_data<gridlee_state>(); | |
| 44 | UINT8 *videoram = state->m_videoram; | |
| 43 | UINT8 *videoram = m_videoram; | |
| 45 | 44 | int offset = 0; |
| 46 | 45 | |
| 47 | 46 | for(offset = 0; offset < 0x77ff; offset++) |
| 48 | 47 | { |
| 49 | state->m_local_videoram[offset * 2 + 0] = videoram[offset] >> 4; | |
| 50 | state->m_local_videoram[offset * 2 + 1] = videoram[offset] & 15; | |
| 48 | m_local_videoram[offset * 2 + 0] = videoram[offset] >> 4; | |
| 49 | m_local_videoram[offset * 2 + 1] = videoram[offset] & 15; | |
| 51 | 50 | } |
| 52 | 51 | } |
| 53 | 52 | |
| r20647 | r20648 | |
| 69 | 68 | |
| 70 | 69 | state_save_register_global(machine(), m_cocktail_flip); |
| 71 | 70 | state_save_register_global(machine(), m_palettebank_vis); |
| 72 | machine().save().register_postload(save_prepost_delegate(FUNC(expand_pixels), | |
| 71 | machine().save().register_postload(save_prepost_delegate(FUNC(gridlee_state::expand_pixels), this)); | |
| 73 | 72 | } |
| 74 | 73 | |
| 75 | 74 |
| r20647 | r20648 | |
|---|---|---|
| 17 | 17 | #include "includes/twincobr.h" |
| 18 | 18 | |
| 19 | 19 | |
| 20 | static void twincobr_restore_screen(running_machine &machine); | |
| 21 | ||
| 22 | 20 | /* 6845 used for video sync signals only */ |
| 23 | 21 | MC6845_INTERFACE( twincobr_mc6845_intf ) |
| 24 | 22 | { |
| r20647 | r20648 | |
| 134 | 132 | state_save_register_global(machine(), m_bg_ram_bank); |
| 135 | 133 | state_save_register_global(machine(), m_flip_screen); |
| 136 | 134 | state_save_register_global(machine(), m_wardner_sprite_hack); |
| 137 | machine().save().register_postload(save_prepost_delegate(FUNC(twincobr_restore_screen), | |
| 135 | machine().save().register_postload(save_prepost_delegate(FUNC(twincobr_state::twincobr_restore_screen), this)); | |
| 138 | 136 | } |
| 139 | 137 | |
| 140 | ||
| 138 | void twincobr_state::twincobr_restore_screen() | |
| 141 | 139 | { |
| 142 | twincobr_state *state = machine.driver_data<twincobr_state>(); | |
| 143 | ||
| 144 | twincobr_display(machine, state->m_display_on); | |
| 145 | twincobr_flipscreen(machine, state->m_flip_screen); | |
| 140 | twincobr_display(machine(), m_display_on); | |
| 141 | twincobr_flipscreen(machine(), m_flip_screen); | |
| 146 | 142 | } |
| 147 | 143 | |
| 148 | 144 |
| r20647 | r20648 | |
|---|---|---|
| 60 | 60 | Memory handlers |
| 61 | 61 | ***************************************************************************/ |
| 62 | 62 | |
| 63 | ||
| 63 | void chaknpop_state::tx_tilemap_mark_all_dirty() | |
| 64 | 64 | { |
| 65 | chaknpop_state *state = machine.driver_data<chaknpop_state>(); | |
| 66 | ||
| 67 | state->m_tx_tilemap->mark_all_dirty(); | |
| 68 | state->m_tx_tilemap->set_flip(state->m_flip_x | state->m_flip_y); | |
| 65 | m_tx_tilemap->mark_all_dirty(); | |
| 66 | m_tx_tilemap->set_flip(m_flip_x | m_flip_y); | |
| 69 | 67 | } |
| 70 | 68 | |
| 71 | 69 | READ8_MEMBER(chaknpop_state::chaknpop_gfxmode_r) |
| r20647 | r20648 | |
| 95 | 93 | } |
| 96 | 94 | |
| 97 | 95 | if (all_dirty) |
| 98 | tx_tilemap_mark_all_dirty( | |
| 96 | tx_tilemap_mark_all_dirty(); | |
| 99 | 97 | } |
| 100 | 98 | } |
| 101 | 99 | |
| r20647 | r20648 | |
| 112 | 110 | m_attr_ram[offset] = data; |
| 113 | 111 | |
| 114 | 112 | if (offset == TX_COLOR1 || offset == TX_COLOR2) |
| 115 | tx_tilemap_mark_all_dirty( | |
| 113 | tx_tilemap_mark_all_dirty(); | |
| 116 | 114 | } |
| 117 | 115 | } |
| 118 | 116 | |
| r20647 | r20648 | |
| 165 | 163 | save_pointer(NAME(m_vram4), 0x2000); |
| 166 | 164 | |
| 167 | 165 | membank("bank1")->set_entry(0); |
| 168 | tx_tilemap_mark_all_dirty( | |
| 166 | tx_tilemap_mark_all_dirty(); | |
| 169 | 167 | |
| 170 | machine().save().register_postload(save_prepost_delegate(FUNC(tx_tilemap_mark_all_dirty), | |
| 168 | machine().save().register_postload(save_prepost_delegate(FUNC(chaknpop_state::tx_tilemap_mark_all_dirty), this)); | |
| 171 | 169 | } |
| 172 | 170 | |
| 173 | 171 |
| r20647 | r20648 | |
|---|---|---|
| 1805 | 1805 | } |
| 1806 | 1806 | |
| 1807 | 1807 | |
| 1808 | void cps1_get_video_base( | |
| 1808 | void cps_state::cps1_get_video_base() | |
| 1809 | 1809 | { |
| 1810 | cps_state *state = machine.driver_data<cps_state>(); | |
| 1811 | 1810 | int layercontrol, videocontrol, scroll1xoff, scroll2xoff, scroll3xoff; |
| 1812 | 1811 | |
| 1813 | 1812 | /* Re-calculate the VIDEO RAM base */ |
| 1814 | if ( | |
| 1813 | if (m_scroll1 != cps1_base(machine(), CPS1_SCROLL1_BASE, m_scroll_size)) | |
| 1815 | 1814 | { |
| 1816 | state->m_scroll1 = cps1_base(machine, CPS1_SCROLL1_BASE, state->m_scroll_size); | |
| 1817 | state->m_bg_tilemap[0]->mark_all_dirty(); | |
| 1815 | m_scroll1 = cps1_base(machine(), CPS1_SCROLL1_BASE, m_scroll_size); | |
| 1816 | m_bg_tilemap[0]->mark_all_dirty(); | |
| 1818 | 1817 | } |
| 1819 | if ( | |
| 1818 | if (m_scroll2 != cps1_base(machine(), CPS1_SCROLL2_BASE, m_scroll_size)) | |
| 1820 | 1819 | { |
| 1821 | state->m_scroll2 = cps1_base(machine, CPS1_SCROLL2_BASE, state->m_scroll_size); | |
| 1822 | state->m_bg_tilemap[1]->mark_all_dirty(); | |
| 1820 | m_scroll2 = cps1_base(machine(), CPS1_SCROLL2_BASE, m_scroll_size); | |
| 1821 | m_bg_tilemap[1]->mark_all_dirty(); | |
| 1823 | 1822 | } |
| 1824 | if ( | |
| 1823 | if (m_scroll3 != cps1_base(machine(), CPS1_SCROLL3_BASE, m_scroll_size)) | |
| 1825 | 1824 | { |
| 1826 | state->m_scroll3 = cps1_base(machine, CPS1_SCROLL3_BASE, state->m_scroll_size); | |
| 1827 | state->m_bg_tilemap[2]->mark_all_dirty(); | |
| 1825 | m_scroll3 = cps1_base(machine(), CPS1_SCROLL3_BASE, m_scroll_size); | |
| 1826 | m_bg_tilemap[2]->mark_all_dirty(); | |
| 1828 | 1827 | } |
| 1829 | 1828 | |
| 1830 | 1829 | /* Some of the sf2 hacks use only sprite port 0x9100 and the scroll layers are offset */ |
| 1831 | if ( | |
| 1830 | if (m_game_config->bootleg_kludge == 1) | |
| 1832 | 1831 | { |
| 1833 | state->m_cps_a_regs[CPS1_OBJ_BASE] = 0x9100; | |
| 1834 | state->m_obj = cps1_base(machine, CPS1_OBJ_BASE, state->m_obj_size); | |
| 1832 | m_cps_a_regs[CPS1_OBJ_BASE] = 0x9100; | |
| 1833 | m_obj = cps1_base(machine(), CPS1_OBJ_BASE, m_obj_size); | |
| 1835 | 1834 | scroll1xoff = -0x0c; |
| 1836 | 1835 | scroll2xoff = -0x0e; |
| 1837 | 1836 | scroll3xoff = -0x10; |
| 1838 | 1837 | } |
| 1839 | 1838 | else |
| 1840 | 1839 | { |
| 1841 | | |
| 1840 | m_obj = cps1_base(machine(), CPS1_OBJ_BASE, m_obj_size); | |
| 1842 | 1841 | scroll1xoff = 0; |
| 1843 | 1842 | scroll2xoff = 0; |
| 1844 | 1843 | scroll3xoff = 0; |
| 1845 | 1844 | } |
| 1846 | 1845 | |
| 1847 | | |
| 1846 | m_other = cps1_base(machine(), CPS1_OTHER_BASE, m_other_size); | |
| 1848 | 1847 | |
| 1849 | 1848 | /* Get scroll values */ |
| 1850 | state->m_scroll1x = state->m_cps_a_regs[CPS1_SCROLL1_SCROLLX] + scroll1xoff; | |
| 1851 | state->m_scroll1y = state->m_cps_a_regs[CPS1_SCROLL1_SCROLLY]; | |
| 1852 | state->m_scroll2x = state->m_cps_a_regs[CPS1_SCROLL2_SCROLLX] + scroll2xoff; | |
| 1853 | state->m_scroll2y = state->m_cps_a_regs[CPS1_SCROLL2_SCROLLY]; | |
| 1854 | state->m_scroll3x = state->m_cps_a_regs[CPS1_SCROLL3_SCROLLX] + scroll3xoff; | |
| 1855 | state->m_scroll3y = state->m_cps_a_regs[CPS1_SCROLL3_SCROLLY]; | |
| 1856 | state->m_stars1x = state->m_cps_a_regs[CPS1_STARS1_SCROLLX]; | |
| 1857 | state->m_stars1y = state->m_cps_a_regs[CPS1_STARS1_SCROLLY]; | |
| 1858 | state->m_stars2x = state->m_cps_a_regs[CPS1_STARS2_SCROLLX]; | |
| 1859 | state->m_stars2y = state->m_cps_a_regs[CPS1_STARS2_SCROLLY]; | |
| 1849 | m_scroll1x = m_cps_a_regs[CPS1_SCROLL1_SCROLLX] + scroll1xoff; | |
| 1850 | m_scroll1y = m_cps_a_regs[CPS1_SCROLL1_SCROLLY]; | |
| 1851 | m_scroll2x = m_cps_a_regs[CPS1_SCROLL2_SCROLLX] + scroll2xoff; | |
| 1852 | m_scroll2y = m_cps_a_regs[CPS1_SCROLL2_SCROLLY]; | |
| 1853 | m_scroll3x = m_cps_a_regs[CPS1_SCROLL3_SCROLLX] + scroll3xoff; | |
| 1854 | m_scroll3y = m_cps_a_regs[CPS1_SCROLL3_SCROLLY]; | |
| 1855 | m_stars1x = m_cps_a_regs[CPS1_STARS1_SCROLLX]; | |
| 1856 | m_stars1y = m_cps_a_regs[CPS1_STARS1_SCROLLY]; | |
| 1857 | m_stars2x = m_cps_a_regs[CPS1_STARS2_SCROLLX]; | |
| 1858 | m_stars2y = m_cps_a_regs[CPS1_STARS2_SCROLLY]; | |
| 1860 | 1859 | |
| 1861 | 1860 | /* Get layer enable bits */ |
| 1862 | layercontrol = state->m_cps_b_regs[state->m_game_config->layer_control / 2]; | |
| 1863 | videocontrol = state->m_cps_a_regs[CPS1_VIDEOCONTROL]; | |
| 1864 | state->m_bg_tilemap[0]->enable(layercontrol & state->m_game_config->layer_enable_mask[0]); | |
| 1865 | state->m_bg_tilemap[1]->enable((layercontrol & state->m_game_config->layer_enable_mask[1]) && (videocontrol & 4)); | |
| 1866 | state->m_bg_tilemap[2]->enable((layercontrol & state->m_game_config->layer_enable_mask[2]) && (videocontrol & 8)); | |
| 1867 | state->m_stars_enabled[0] = layercontrol & state->m_game_config->layer_enable_mask[3]; | |
| 1868 | state->m_stars_enabled[1] = layercontrol & state->m_game_config->layer_enable_mask[4]; | |
| 1861 | layercontrol = m_cps_b_regs[m_game_config->layer_control / 2]; | |
| 1862 | videocontrol = m_cps_a_regs[CPS1_VIDEOCONTROL]; | |
| 1863 | m_bg_tilemap[0]->enable(layercontrol & m_game_config->layer_enable_mask[0]); | |
| 1864 | m_bg_tilemap[1]->enable((layercontrol & m_game_config->layer_enable_mask[1]) && (videocontrol & 4)); | |
| 1865 | m_bg_tilemap[2]->enable((layercontrol & m_game_config->layer_enable_mask[2]) && (videocontrol & 8)); | |
| 1866 | m_stars_enabled[0] = layercontrol & m_game_config->layer_enable_mask[3]; | |
| 1867 | m_stars_enabled[1] = layercontrol & m_game_config->layer_enable_mask[4]; | |
| 1869 | 1868 | |
| 1870 | 1869 | #ifdef MAME_DEBUG |
| 1871 | 1870 | { |
| 1872 | 1871 | int enablemask = 0; |
| 1873 | 1872 | |
| 1874 | if (state->m_game_config->layer_enable_mask[0] == state->m_game_config->layer_enable_mask[1]) | |
| 1875 | enablemask = state->m_game_config->layer_enable_mask[0]; | |
| 1873 | if (m_game_config->layer_enable_mask[0] == m_game_config->layer_enable_mask[1]) | |
| 1874 | enablemask = m_game_config->layer_enable_mask[0]; | |
| 1876 | 1875 | |
| 1877 | if (state->m_game_config->layer_enable_mask[0] == state->m_game_config->layer_enable_mask[2]) | |
| 1878 | enablemask = state->m_game_config->layer_enable_mask[0]; | |
| 1876 | if (m_game_config->layer_enable_mask[0] == m_game_config->layer_enable_mask[2]) | |
| 1877 | enablemask = m_game_config->layer_enable_mask[0]; | |
| 1879 | 1878 | |
| 1880 | if (state->m_game_config->layer_enable_mask[1] == state->m_game_config->layer_enable_mask[2]) | |
| 1881 | enablemask = state->m_game_config->layer_enable_mask[1]; | |
| 1879 | if (m_game_config->layer_enable_mask[1] == m_game_config->layer_enable_mask[2]) | |
| 1880 | enablemask = m_game_config->layer_enable_mask[1]; | |
| 1882 | 1881 | |
| 1883 | 1882 | if (enablemask) |
| 1884 | 1883 | { |
| r20647 | r20648 | |
| 1886 | 1885 | popmessage("layer %02x contact MAMEDEV", layercontrol & 0xc03f); |
| 1887 | 1886 | } |
| 1888 | 1887 | |
| 1889 | enablemask = state->m_game_config->layer_enable_mask[0] | state->m_game_config->layer_enable_mask[1] | |
| 1890 | | state->m_game_config->layer_enable_mask[2] | |
| 1891 | | state->m_game_config->layer_enable_mask[3] | state->m_game_config->layer_enable_mask[4]; | |
| 1888 | enablemask = m_game_config->layer_enable_mask[0] | m_game_config->layer_enable_mask[1] | |
| 1889 | | m_game_config->layer_enable_mask[2] | |
| 1890 | | m_game_config->layer_enable_mask[3] | m_game_config->layer_enable_mask[4]; | |
| 1892 | 1891 | |
| 1893 | 1892 | if (((layercontrol & ~enablemask) & 0x003e) != 0) |
| 1894 | 1893 | popmessage("layer %02x contact MAMEDEV", layercontrol & 0xc03f); |
| r20647 | r20648 | |
| 2134 | 2133 | m_scroll3 = NULL; |
| 2135 | 2134 | m_obj = NULL; |
| 2136 | 2135 | m_other = NULL; |
| 2137 | cps1_get_video_base(machine()); /* Calculate base pointers */ | |
| 2138 | cps1_get_video_base(machine()); /* Calculate old base pointers */ | |
| 2136 | cps1_get_video_base(); /* Calculate base pointers */ | |
| 2137 | cps1_get_video_base(); /* Calculate old base pointers */ | |
| 2139 | 2138 | |
| 2140 | 2139 | /* state save register */ |
| 2141 | 2140 | save_item(NAME(m_scanline1)); |
| r20647 | r20648 | |
| 2166 | 2165 | save_pointer(NAME(m_cps2_buffered_obj), m_cps2_obj_size / 2); |
| 2167 | 2166 | } |
| 2168 | 2167 | |
| 2169 | machine().save().register_postload(save_prepost_delegate(FUNC(cps1_get_video_base), | |
| 2168 | machine().save().register_postload(save_prepost_delegate(FUNC(cps_state::cps1_get_video_base), this)); | |
| 2170 | 2169 | } |
| 2171 | 2170 | |
| 2172 | 2171 | VIDEO_START_MEMBER(cps_state,cps1) |
| r20647 | r20648 | |
| 2791 | 2790 | layercontrol = m_cps_b_regs[m_game_config->layer_control / 2]; |
| 2792 | 2791 | |
| 2793 | 2792 | /* Get video memory base registers */ |
| 2794 | cps1_get_video_base( | |
| 2793 | cps1_get_video_base(); | |
| 2795 | 2794 | |
| 2796 | 2795 | /* Find the offset of the last sprite in the sprite table */ |
| 2797 | 2796 | cps1_find_last_sprite(machine()); |
| r20647 | r20648 | |
| 2938 | 2937 | if (state) |
| 2939 | 2938 | { |
| 2940 | 2939 | /* Get video memory base registers */ |
| 2941 | cps1_get_video_base( | |
| 2940 | cps1_get_video_base(); | |
| 2942 | 2941 | |
| 2943 | 2942 | if (m_cps_version == 1) |
| 2944 | 2943 | { |
| r20647 | r20648 | |
|---|---|---|
| 211 | 211 | } |
| 212 | 212 | |
| 213 | 213 | |
| 214 | ||
| 214 | void tumbleb_state::tumbleb_tilemap_redraw() | |
| 215 | 215 | { |
| 216 | tumbleb_state *state = machine.driver_data<tumbleb_state>(); | |
| 217 | ||
| 218 | state->m_pf1_tilemap->mark_all_dirty(); | |
| 219 | state->m_pf1_alt_tilemap->mark_all_dirty(); | |
| 220 | state->m_pf2_tilemap->mark_all_dirty(); | |
| 221 | if (state->m_pf2_alt_tilemap) | |
| 222 | state->m_pf2_alt_tilemap->mark_all_dirty(); | |
| 216 | m_pf1_tilemap->mark_all_dirty(); | |
| 217 | m_pf1_alt_tilemap->mark_all_dirty(); | |
| 218 | m_pf2_tilemap->mark_all_dirty(); | |
| 219 | if (m_pf2_alt_tilemap) | |
| 220 | m_pf2_alt_tilemap->mark_all_dirty(); | |
| 223 | 221 | } |
| 224 | 222 | |
| 225 | 223 | VIDEO_START_MEMBER(tumbleb_state,pangpang) |
| r20647 | r20648 | |
| 231 | 229 | m_pf1_tilemap->set_transparent_pen(0); |
| 232 | 230 | m_pf1_alt_tilemap->set_transparent_pen(0); |
| 233 | 231 | |
| 234 | machine().save().register_postload(save_prepost_delegate(FUNC(tumbleb_tilemap_redraw), | |
| 232 | machine().save().register_postload(save_prepost_delegate(FUNC(tumbleb_state::tumbleb_tilemap_redraw), this)); | |
| 235 | 233 | } |
| 236 | 234 | |
| 237 | 235 | |
| r20647 | r20648 | |
| 244 | 242 | m_pf1_tilemap->set_transparent_pen(0); |
| 245 | 243 | m_pf1_alt_tilemap->set_transparent_pen(0); |
| 246 | 244 | |
| 247 | machine().save().register_postload(save_prepost_delegate(FUNC(tumbleb_tilemap_redraw), | |
| 245 | machine().save().register_postload(save_prepost_delegate(FUNC(tumbleb_state::tumbleb_tilemap_redraw), this)); | |
| 248 | 246 | } |
| 249 | 247 | |
| 250 | 248 | VIDEO_START_MEMBER(tumbleb_state,sdfight) |
| r20647 | r20648 | |
| 256 | 254 | m_pf1_tilemap->set_transparent_pen(0); |
| 257 | 255 | m_pf1_alt_tilemap->set_transparent_pen(0); |
| 258 | 256 | |
| 259 | machine().save().register_postload(save_prepost_delegate(FUNC(tumbleb_tilemap_redraw), | |
| 257 | machine().save().register_postload(save_prepost_delegate(FUNC(tumbleb_state::tumbleb_tilemap_redraw), this)); | |
| 260 | 258 | } |
| 261 | 259 | |
| 262 | 260 | VIDEO_START_MEMBER(tumbleb_state,fncywld) |
| r20647 | r20648 | |
| 268 | 266 | m_pf1_tilemap->set_transparent_pen(15); |
| 269 | 267 | m_pf1_alt_tilemap->set_transparent_pen(15); |
| 270 | 268 | |
| 271 | machine().save().register_postload(save_prepost_delegate(FUNC(tumbleb_tilemap_redraw), | |
| 269 | machine().save().register_postload(save_prepost_delegate(FUNC(tumbleb_state::tumbleb_tilemap_redraw), this)); | |
| 272 | 270 | } |
| 273 | 271 | |
| 274 | 272 | |
| r20647 | r20648 | |
| 280 | 278 | |
| 281 | 279 | m_pf1_alt_tilemap->set_transparent_pen(0); |
| 282 | 280 | |
| 283 | machine().save().register_postload(save_prepost_delegate(FUNC(tumbleb_tilemap_redraw), | |
| 281 | machine().save().register_postload(save_prepost_delegate(FUNC(tumbleb_state::tumbleb_tilemap_redraw), this)); | |
| 284 | 282 | } |
| 285 | 283 | |
| 286 | 284 | /******************************************************************************/ |
| r20647 | r20648 | |
|---|---|---|
| 325 | 325 | } |
| 326 | 326 | |
| 327 | 327 | |
| 328 | ||
| 328 | void hyprduel_state::hyprduel_postload() | |
| 329 | 329 | { |
| 330 | hyprduel_state *state = machine.driver_data<hyprduel_state>(); | |
| 331 | 330 | int i; |
| 332 | 331 | |
| 333 | 332 | for (i = 0; i < 3; i++) |
| 334 | 333 | { |
| 335 | UINT16 wx = state->m_window[i * 2 + 1]; | |
| 336 | UINT16 wy = state->m_window[i * 2 + 0]; | |
| 334 | UINT16 wx = m_window[i * 2 + 1]; | |
| 335 | UINT16 wy = m_window[i * 2 + 0]; | |
| 337 | 336 | |
| 338 | state->m_bg_tilemap[i]->set_scrollx(0, state->m_scroll[i * 2 + 1] - wx - (wx & 7)); | |
| 339 | state->m_bg_tilemap[i]->set_scrolly(0, state->m_scroll[i * 2 + 0] - wy - (wy & 7)); | |
| 337 | m_bg_tilemap[i]->set_scrollx(0, m_scroll[i * 2 + 1] - wx - (wx & 7)); | |
| 338 | m_bg_tilemap[i]->set_scrolly(0, m_scroll[i * 2 + 0] - wy - (wy & 7)); | |
| 340 | 339 | |
| 341 | | |
| 340 | m_bg_tilemap[i]->mark_all_dirty(); | |
| 342 | 341 | } |
| 343 | 342 | } |
| 344 | 343 | |
| r20647 | r20648 | |
| 386 | 385 | /* Set up save state */ |
| 387 | 386 | save_item(NAME(m_sprite_xoffs)); |
| 388 | 387 | save_item(NAME(m_sprite_yoffs)); |
| 389 | machine().save().register_postload(save_prepost_delegate(FUNC(hyprduel_postload), | |
| 388 | machine().save().register_postload(save_prepost_delegate(FUNC(hyprduel_state::hyprduel_postload), this)); | |
| 390 | 389 | } |
| 391 | 390 | |
| 392 | 391 | VIDEO_START_MEMBER(hyprduel_state,hyprduel_14220) |
| r20647 | r20648 | |
|---|---|---|
| 283 | 283 | state->m_pf4_tilemap->set_scrolly(0, (state->m_pf4_scrolly >> 7) - (state->m_tiles_offsety - state->m_scrolly_offs)); |
| 284 | 284 | } |
| 285 | 285 | |
| 286 | ||
| 286 | void toaplan1_state::rallybik_flipscreen() | |
| 287 | 287 | { |
| 288 | toaplan1_state *state = machine.driver_data<toaplan1_state>(); | |
| 289 | address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM); | |
| 288 | address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM); | |
| 290 | 289 | |
| 291 | | |
| 290 | rallybik_bcu_flipscreen_w(space, 0, m_bcu_flipscreen, 0xffff); | |
| 292 | 291 | } |
| 293 | 292 | |
| 294 | ||
| 293 | void toaplan1_state::toaplan1_flipscreen() | |
| 295 | 294 | { |
| 296 | toaplan1_state *state = machine.driver_data<toaplan1_state>(); | |
| 297 | address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM); | |
| 295 | address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM); | |
| 298 | 296 | |
| 299 | | |
| 297 | toaplan1_bcu_flipscreen_w(space, 0, m_bcu_flipscreen, 0xffff); | |
| 300 | 298 | } |
| 301 | 299 | |
| 302 | 300 | static void register_common(running_machine &machine) |
| r20647 | r20648 | |
| 350 | 348 | |
| 351 | 349 | register_common(machine()); |
| 352 | 350 | |
| 353 | machine().save().register_postload(save_prepost_delegate(FUNC(rallybik_flipscreen), | |
| 351 | machine().save().register_postload(save_prepost_delegate(FUNC(toaplan1_state::rallybik_flipscreen), this)); | |
| 354 | 352 | } |
| 355 | 353 | |
| 356 | 354 | VIDEO_START_MEMBER(toaplan1_state,toaplan1) |
| r20647 | r20648 | |
| 372 | 370 | |
| 373 | 371 | register_common(machine()); |
| 374 | 372 | |
| 375 | machine().save().register_postload(save_prepost_delegate(FUNC(toaplan1_flipscreen), | |
| 373 | machine().save().register_postload(save_prepost_delegate(FUNC(toaplan1_state::toaplan1_flipscreen), this)); | |
| 376 | 374 | } |
| 377 | 375 | |
| 378 | 376 |
| r20647 | r20648 | |
|---|---|---|
| 72 | 72 | state->save_item(NAME(state->m_tx_flip)); |
| 73 | 73 | } |
| 74 | 74 | |
| 75 | ||
| 75 | void toaplan2_state::truxton2_postload() | |
| 76 | 76 | { |
| 77 | 77 | for (int i = 0; i < 1024; i++) |
| 78 | machine.gfx[2]->mark_dirty(i); | |
| 78 | machine().gfx[2]->mark_dirty(i); | |
| 79 | 79 | } |
| 80 | 80 | |
| 81 | 81 | VIDEO_START_MEMBER(toaplan2_state,toaplan2) |
| r20647 | r20648 | |
| 108 | 108 | |
| 109 | 109 | /* Create the Text tilemap for this game */ |
| 110 | 110 | machine().gfx[2]->set_source(reinterpret_cast<UINT8 *>(m_tx_gfxram16.target())); |
| 111 | machine().save().register_postload(save_prepost_delegate(FUNC(truxton2_postload), | |
| 111 | machine().save().register_postload(save_prepost_delegate(FUNC(toaplan2_state::truxton2_postload), this)); | |
| 112 | 112 | |
| 113 | 113 | truxton2_create_tx_tilemap(machine()); |
| 114 | 114 | m_tx_tilemap->set_scrolldx(0x1d4 +1, 0x2a); |
| r20647 | r20648 | |
| 166 | 166 | /* Create the Text tilemap for this game */ |
| 167 | 167 | m_tx_gfxram16.allocate(RAIZING_TX_GFXRAM_SIZE/2); |
| 168 | 168 | machine().gfx[2]->set_source(reinterpret_cast<UINT8 *>(m_tx_gfxram16.target())); |
| 169 | machine().save().register_postload(save_prepost_delegate(FUNC(truxton2_postload), | |
| 169 | machine().save().register_postload(save_prepost_delegate(FUNC(toaplan2_state::truxton2_postload), this)); | |
| 170 | 170 | |
| 171 | 171 | truxton2_create_tx_tilemap(machine()); |
| 172 | 172 | m_tx_tilemap->set_scrolldx(0x1d4, 0x2a); |
| r20647 | r20648 | |
|---|---|---|
| 86 | 86 | |
| 87 | 87 | ***************************************************************************/ |
| 88 | 88 | |
| 89 | ||
| 89 | void fortyl_state::redraw_pixels() | |
| 90 | 90 | { |
| 91 | fortyl_state *state = machine.driver_data<fortyl_state>(); | |
| 92 | state->m_pix_redraw = 1; | |
| 93 | state->m_bg_tilemap->mark_all_dirty(); | |
| 91 | m_pix_redraw = 1; | |
| 92 | m_bg_tilemap->mark_all_dirty(); | |
| 94 | 93 | } |
| 95 | 94 | |
| 96 | 95 | |
| r20647 | r20648 | |
| 122 | 121 | save_item(NAME(*m_tmp_bitmap1)); |
| 123 | 122 | save_item(NAME(*m_tmp_bitmap2)); |
| 124 | 123 | save_item(NAME(m_pixram_sel)); |
| 125 | machine().save().register_postload(save_prepost_delegate(FUNC(redraw_pixels), | |
| 124 | machine().save().register_postload(save_prepost_delegate(FUNC(fortyl_state::redraw_pixels), this)); | |
| 126 | 125 | } |
| 127 | 126 | |
| 128 | 127 |
| r20647 | r20648 | |
|---|---|---|
| 40 | 40 | |
| 41 | 41 | ***************************************************************************/ |
| 42 | 42 | |
| 43 | ||
| 43 | void tail2nos_state::tail2nos_postload() | |
| 44 | 44 | { |
| 45 | tail2nos_state *state = machine.driver_data<tail2nos_state>(); | |
| 46 | 45 | int i; |
| 47 | 46 | |
| 48 | | |
| 47 | m_bg_tilemap->mark_all_dirty(); | |
| 49 | 48 | |
| 50 | 49 | for (i = 0; i < 0x20000; i += 64) |
| 51 | 50 | { |
| 52 | machine.gfx[2]->mark_dirty(i / 64); | |
| 51 | machine().gfx[2]->mark_dirty(i / 64); | |
| 53 | 52 | } |
| 54 | 53 | } |
| 55 | 54 | |
| r20647 | r20648 | |
| 62 | 61 | m_zoomdata = (UINT16 *)memregion("gfx3")->base(); |
| 63 | 62 | |
| 64 | 63 | save_pointer(NAME(m_zoomdata), 0x20000 / 2); |
| 65 | machine().save().register_postload(save_prepost_delegate(FUNC(tail2nos_postload), | |
| 64 | machine().save().register_postload(save_prepost_delegate(FUNC(tail2nos_state::tail2nos_postload), this)); | |
| 66 | 65 | } |
| 67 | 66 | |
| 68 | 67 |
| r20647 | r20648 | |
|---|---|---|
| 954 | 954 | } |
| 955 | 955 | |
| 956 | 956 | |
| 957 | ||
| 957 | void pc080sn_device::pc080sn_restore_scroll() | |
| 958 | 958 | { |
| 959 | pc080sn_state *pc080sn = pc080sn_get_safe_token(this); | |
| 959 | 960 | int flip; |
| 960 | 961 | |
| 961 | 962 | pc080sn->bgscrollx[0] = -pc080sn->ctrl[0]; |
| r20647 | r20648 | |
| 1037 | 1038 | |
| 1038 | 1039 | save_pointer(NAME(pc080sn->ram), PC080SN_RAM_SIZE / 2); |
| 1039 | 1040 | save_item(NAME(pc080sn->ctrl)); |
| 1040 | machine().save().register_postload(save_prepost_delegate(FUNC(pc080sn_restore_scroll), | |
| 1041 | machine().save().register_postload(save_prepost_delegate(FUNC(pc080sn_device::pc080sn_restore_scroll), this)); | |
| 1041 | 1042 | |
| 1042 | 1043 | } |
| 1043 | 1044 | |
| r20647 | r20648 | |
| 1879 | 1880 | } |
| 1880 | 1881 | |
| 1881 | 1882 | |
| 1882 | ||
| 1883 | void tc0080vco_device::tc0080vco_postload() | |
| 1883 | 1884 | { |
| 1885 | tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(this); | |
| 1886 | ||
| 1884 | 1887 | tc0080vco->flipscreen = tc0080vco->scroll_ram[0] & 0x0c00; |
| 1885 | 1888 | |
| 1886 | 1889 | tc0080vco->tilemap[0]->set_flip(tc0080vco->flipscreen ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0); |
| r20647 | r20648 | |
| 1978 | 1981 | machine().gfx[tc0080vco->tx_gfx] = auto_alloc(machine(), gfx_element(machine(), tc0080vco_charlayout, (UINT8 *)tc0080vco->char_ram, 64, 0)); |
| 1979 | 1982 | |
| 1980 | 1983 | save_pointer(NAME(tc0080vco->ram), TC0080VCO_RAM_SIZE / 2); |
| 1981 | machine().save().register_postload(save_prepost_delegate(FUNC(tc0080vco_postload), t | |
| 1984 | machine().save().register_postload(save_prepost_delegate(FUNC(tc0080vco_device::tc0080vco_postload), this)); | |
| 1982 | 1985 | } |
| 1983 | 1986 | |
| 1984 | 1987 | /***************************************************************************/ |
| r20647 | r20648 | |
| 2214 | 2217 | } |
| 2215 | 2218 | |
| 2216 | 2219 | |
| 2217 | ||
| 2220 | void tc0100scn_device::tc0100scn_postload() | |
| 2218 | 2221 | { |
| 2222 | tc0100scn_state *tc0100scn = tc0100scn_get_safe_token(this); | |
| 2223 | ||
| 2219 | 2224 | tc0100scn_set_layer_ptrs(tc0100scn); |
| 2220 | 2225 | tc0100scn_restore_scroll(tc0100scn); |
| 2221 | 2226 | |
| r20647 | r20648 | |
| 2603 | 2608 | save_item(NAME(tc0100scn->ctrl)); |
| 2604 | 2609 | save_item(NAME(tc0100scn->dblwidth)); |
| 2605 | 2610 | save_item(NAME(tc0100scn->gfxbank)); |
| 2606 | machine().save().register_postload(save_prepost_delegate(FUNC(tc0100scn_postload), t | |
| 2611 | machine().save().register_postload(save_prepost_delegate(FUNC(tc0100scn_device::tc0100scn_postload), this)); | |
| 2607 | 2612 | } |
| 2608 | 2613 | |
| 2609 | 2614 | //------------------------------------------------- |
| r20647 | r20648 | |
| 3708 | 3713 | return tc0480scp->pri_reg; |
| 3709 | 3714 | } |
| 3710 | 3715 | |
| 3711 | ||
| 3716 | void tc0480scp_device::tc0480scp_postload() | |
| 3712 | 3717 | { |
| 3718 | tc0480scp_state *tc0480scp = tc0480scp_get_safe_token(this); | |
| 3719 | ||
| 3713 | 3720 | int reg; |
| 3714 | 3721 | int flip = tc0480scp->ctrl[0xf] & 0x40; |
| 3715 | 3722 | |
| r20647 | r20648 | |
| 3891 | 3898 | save_pointer(NAME(tc0480scp->ram), TC0480SCP_RAM_SIZE / 2); |
| 3892 | 3899 | save_item(NAME(tc0480scp->ctrl)); |
| 3893 | 3900 | save_item(NAME(tc0480scp->dblwidth)); |
| 3894 | machine().save().register_postload(save_prepost_delegate(FUNC(tc0480scp_postload), t | |
| 3901 | machine().save().register_postload(save_prepost_delegate(FUNC(tc0480scp_device::tc0480scp_postload), this)); | |
| 3895 | 3902 | } |
| 3896 | 3903 | |
| 3897 | 3904 | //------------------------------------------------- |
| r20647 | r20648 | |
| 4787 | 4794 | DEVICE HANDLERS |
| 4788 | 4795 | *****************************************************************************/ |
| 4789 | 4796 | |
| 4790 | ||
| 4797 | void tc0110pcr_device::tc0110pcr_restore_colors() | |
| 4791 | 4798 | { |
| 4799 | tc0110pcr_state *tc0110pcr = tc0110pcr_get_safe_token(this); | |
| 4800 | ||
| 4792 | 4801 | int i, color, r = 0, g = 0, b = 0; |
| 4793 | 4802 | |
| 4794 | 4803 | for (i = 0; i < (256 * 16); i++) |
| r20647 | r20648 | |
| 4943 | 4952 | DEVICE INTERFACE |
| 4944 | 4953 | *****************************************************************************/ |
| 4945 | 4954 | |
| 4946 | static DEVICE_START( tc0110pcr ) | |
| 4947 | { | |
| 4948 | tc0110pcr_state *tc0110pcr = tc0110pcr_get_safe_token(device); | |
| 4949 | const tc0110pcr_interface *intf = tc0110pcr_get_interface(device); | |
| 4950 | ||
| 4951 | tc0110pcr->m_machine = &device->machine(); | |
| 4952 | ||
| 4953 | tc0110pcr->pal_offs = intf->pal_offs; | |
| 4954 | ||
| 4955 | tc0110pcr->ram = auto_alloc_array(device->machine(), UINT16, TC0110PCR_RAM_SIZE); | |
| 4956 | ||
| 4957 | device->save_pointer(NAME(tc0110pcr->ram), TC0110PCR_RAM_SIZE); | |
| 4958 | device->save_item(NAME(tc0110pcr->type)); | |
| 4959 | device->machine().save().register_postload(save_prepost_delegate(FUNC(tc0110pcr_restore_colors), tc0110pcr)); | |
| 4960 | } | |
| 4961 | ||
| 4962 | static DEVICE_RESET( tc0110pcr ) | |
| 4963 | { | |
| 4964 | tc0110pcr_state *tc0110pcr = tc0110pcr_get_safe_token(device); | |
| 4965 | tc0110pcr->type = 0; /* default, xBBBBBGGGGGRRRRR */ | |
| 4966 | } | |
| 4967 | ||
| 4968 | 4955 | const device_type TC0110PCR = &device_creator<tc0110pcr_device>; |
| 4969 | 4956 | |
| 4970 | 4957 | tc0110pcr_device::tc0110pcr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| r20647 | r20648 | |
| 4989 | 4976 | |
| 4990 | 4977 | void tc0110pcr_device::device_start() |
| 4991 | 4978 | { |
| 4992 | DEVICE_START_NAME( tc0110pcr )(this); | |
| 4979 | tc0110pcr_state *tc0110pcr = tc0110pcr_get_safe_token(this); | |
| 4980 | const tc0110pcr_interface *intf = tc0110pcr_get_interface(this); | |
| 4981 | ||
| 4982 | tc0110pcr->m_machine = &machine(); | |
| 4983 | ||
| 4984 | tc0110pcr->pal_offs = intf->pal_offs; | |
| 4985 | ||
| 4986 | tc0110pcr->ram = auto_alloc_array(machine(), UINT16, TC0110PCR_RAM_SIZE); | |
| 4987 | ||
| 4988 | save_pointer(NAME(tc0110pcr->ram), TC0110PCR_RAM_SIZE); | |
| 4989 | save_item(NAME(tc0110pcr->type)); | |
| 4990 | machine().save().register_postload(save_prepost_delegate(FUNC(tc0110pcr_device::tc0110pcr_restore_colors), this)); | |
| 4991 | ||
| 4993 | 4992 | } |
| 4994 | 4993 | |
| 4995 | 4994 | //------------------------------------------------- |
| r20647 | r20648 | |
| 4998 | 4997 | |
| 4999 | 4998 | void tc0110pcr_device::device_reset() |
| 5000 | 4999 | { |
| 5001 | DEVICE_RESET_NAME( tc0110pcr )(this); | |
| 5000 | tc0110pcr_state *tc0110pcr = tc0110pcr_get_safe_token(this); | |
| 5001 | tc0110pcr->type = 0; /* default, xBBBBBGGGGGRRRRR */ | |
| 5002 | 5002 | } |
| 5003 | 5003 | |
| 5004 | 5004 |
| r20647 | r20648 | |
|---|---|---|
| 105 | 105 | |
| 106 | 106 | // access to legacy token |
| 107 | 107 | void *token() const { assert(m_token != NULL); return m_token; } |
| 108 | void pc080sn_restore_scroll(); | |
| 108 | 109 | protected: |
| 109 | 110 | // device-level overrides |
| 110 | 111 | virtual void device_config_complete(); |
| r20647 | r20648 | |
| 147 | 148 | |
| 148 | 149 | // access to legacy token |
| 149 | 150 | void *token() const { assert(m_token != NULL); return m_token; } |
| 151 | void tc0080vco_postload(); | |
| 150 | 152 | protected: |
| 151 | 153 | // device-level overrides |
| 152 | 154 | virtual void device_config_complete(); |
| r20647 | r20648 | |
| 170 | 172 | |
| 171 | 173 | // access to legacy token |
| 172 | 174 | void *token() const { assert(m_token != NULL); return m_token; } |
| 175 | void tc0100scn_postload(); | |
| 173 | 176 | protected: |
| 174 | 177 | // device-level overrides |
| 175 | 178 | virtual void device_config_complete(); |
| r20647 | r20648 | |
| 237 | 240 | |
| 238 | 241 | // access to legacy token |
| 239 | 242 | void *token() const { assert(m_token != NULL); return m_token; } |
| 243 | void tc0480scp_postload(); | |
| 240 | 244 | protected: |
| 241 | 245 | // device-level overrides |
| 242 | 246 | virtual void device_config_complete(); |
| r20647 | r20648 | |
| 282 | 286 | |
| 283 | 287 | // access to legacy token |
| 284 | 288 | void *token() const { assert(m_token != NULL); return m_token; } |
| 289 | void tc0110pcr_restore_colors(); | |
| 285 | 290 | protected: |
| 286 | 291 | // device-level overrides |
| 287 | 292 | virtual void device_config_complete(); |
| r20647 | r20648 | |
|---|---|---|
| 58 | 58 | |
| 59 | 59 | ***************************************************************************/ |
| 60 | 60 | |
| 61 | ||
| 61 | void gradius3_state::gradius3_postload() | |
| 62 | 62 | { |
| 63 | 63 | int i; |
| 64 | 64 | |
| 65 | 65 | for (i = 0; i < 0x20000; i += 16) |
| 66 | 66 | { |
| 67 | machine.gfx[0]->mark_dirty(i / 16); | |
| 67 | machine().gfx[0]->mark_dirty(i / 16); | |
| 68 | 68 | } |
| 69 | 69 | } |
| 70 | 70 | |
| r20647 | r20648 | |
| 87 | 87 | |
| 88 | 88 | machine().gfx[0]->set_source((UINT8 *)m_gfxram.target()); |
| 89 | 89 | |
| 90 | machine().save().register_postload(save_prepost_delegate(FUNC(gradius3_postload), | |
| 90 | machine().save().register_postload(save_prepost_delegate(FUNC(gradius3_state::gradius3_postload), this)); | |
| 91 | 91 | } |
| 92 | 92 | |
| 93 | 93 |
| r20647 | r20648 | |
|---|---|---|
| 753 | 753 | state->save_item(NAME(state->m_blit.clip_top)); |
| 754 | 754 | state->save_item(NAME(state->m_blit.clip_bottom)); |
| 755 | 755 | |
| 756 | machine.save().register_postload(save_prepost_delegate(FUNC(cave_get_sprite_info), | |
| 756 | machine.save().register_postload(save_prepost_delegate(FUNC(cave_state::cave_get_sprite_info), state)); | |
| 757 | 757 | } |
| 758 | 758 | |
| 759 | 759 | static void cave_sprite_check( screen_device &screen, const rectangle &clip ) |
| r20647 | r20648 | |
| 1642 | 1642 | |
| 1643 | 1643 | /**************************************************************/ |
| 1644 | 1644 | |
| 1645 | void cave_get_sprite_info( | |
| 1645 | void cave_state::cave_get_sprite_info() | |
| 1646 | 1646 | { |
| 1647 | cave_state *state = machine.driver_data<cave_state>(); | |
| 1648 | if (state->m_kludge == 3) /* mazinger metmqstr */ | |
| 1647 | if (m_kludge == 3) /* mazinger metmqstr */ | |
| 1649 | 1648 | { |
| 1650 | if (machine.video().skip_this_frame() == 0) | |
| 1649 | if (machine().video().skip_this_frame() == 0) | |
| 1651 | 1650 | { |
| 1652 | state->m_spriteram_bank = state->m_spriteram_bank_delay; | |
| 1653 | (*state->m_get_sprite_info)(machine); | |
| 1651 | m_spriteram_bank = m_spriteram_bank_delay; | |
| 1652 | (*m_get_sprite_info)(machine()); | |
| 1654 | 1653 | } |
| 1655 | | |
| 1654 | m_spriteram_bank_delay = m_videoregs[4] & 1; | |
| 1656 | 1655 | } |
| 1657 | 1656 | else |
| 1658 | 1657 | { |
| 1659 | if (machine.video().skip_this_frame() == 0) | |
| 1658 | if (machine().video().skip_this_frame() == 0) | |
| 1660 | 1659 | { |
| 1661 | state->m_spriteram_bank = state->m_videoregs[4] & 1; | |
| 1662 | (*state->m_get_sprite_info)(machine); | |
| 1660 | m_spriteram_bank = m_videoregs[4] & 1; | |
| 1661 | (*m_get_sprite_info)(machine()); | |
| 1663 | 1662 | } |
| 1664 | 1663 | } |
| 1665 | 1664 | } |
| r20647 | r20648 | |
|---|---|---|
| 204 | 204 | INTERRUPT_GEN_MEMBER(cave_interrupt); |
| 205 | 205 | TIMER_CALLBACK_MEMBER(cave_vblank_end); |
| 206 | 206 | TIMER_DEVICE_CALLBACK_MEMBER(cave_vblank_start); |
| 207 | void cave_get_sprite_info(); | |
| 207 | 208 | }; |
| 208 | 209 | |
| 209 | 210 | /*----------- defined in video/cave.c -----------*/ |
| 210 | void cave_get_sprite_info(running_machine &machine); | |
| 211 | 211 | void sailormn_tilebank_w(running_machine &machine, int bank); |
| r20647 | r20648 | |
|---|---|---|
| 124 | 124 | UINT32 screen_update_profpac(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 125 | 125 | TIMER_CALLBACK_MEMBER(interrupt_off); |
| 126 | 126 | TIMER_CALLBACK_MEMBER(scanline_callback); |
| 127 | void profbank_banksw_restore(); | |
| 127 | 128 | }; |
| 128 | 129 | |
| 129 | 130 | /*----------- defined in audio/wow.c -----------*/ |
| r20647 | r20648 | |
|---|---|---|
| 74 | 74 | virtual void video_start(); |
| 75 | 75 | UINT32 screen_update_renegade(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 76 | 76 | TIMER_DEVICE_CALLBACK_MEMBER(renegade_interrupt); |
| 77 | void setbank(); | |
| 77 | 78 | }; |
| r20647 | r20648 | |
|---|---|---|
| 66 | 66 | UINT32 screen_update_othunder(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 67 | 67 | INTERRUPT_GEN_MEMBER(vblank_interrupt); |
| 68 | 68 | TIMER_CALLBACK_MEMBER(ad_interrupt); |
| 69 | void reset_sound_region(); | |
| 69 | 70 | }; |
| r20647 | r20648 | |
|---|---|---|
| 39 | 39 | virtual void machine_reset(); |
| 40 | 40 | virtual void video_start(); |
| 41 | 41 | UINT32 screen_update_tail2nos(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 42 | void tail2nos_postload(); | |
| 42 | 43 | }; |
| 43 | 44 | |
| 44 | 45 | /*----------- defined in video/tail2nos.c -----------*/ |
| r20647 | r20648 | |
|---|---|---|
| 68 | 68 | void screen_eof_taito_no_buffer(screen_device &screen, bool state); |
| 69 | 69 | INTERRUPT_GEN_MEMBER(slapshot_interrupt); |
| 70 | 70 | TIMER_CALLBACK_MEMBER(slapshot_interrupt6); |
| 71 | void reset_sound_region(); | |
| 71 | 72 | }; |
| r20647 | r20648 | |
|---|---|---|
| 95 | 95 | UINT32 screen_update_darius_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 96 | 96 | UINT32 screen_update_darius_middle(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 97 | 97 | UINT32 screen_update_darius_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 98 | void darius_postload(); | |
| 98 | 99 | }; |
| r20647 | r20648 | |
|---|---|---|
| 60 | 60 | TIMER_CALLBACK_MEMBER(topspeed_interrupt6); |
| 61 | 61 | TIMER_CALLBACK_MEMBER(topspeed_cpub_interrupt6); |
| 62 | 62 | DECLARE_WRITE8_MEMBER(topspeed_tc0140syt_comm_w); |
| 63 | void topspeed_postload(); | |
| 63 | 64 | }; |
| r20647 | r20648 | |
|---|---|---|
| 73 | 73 | TIMER_CALLBACK_MEMBER(wgp_interrupt4); |
| 74 | 74 | TIMER_CALLBACK_MEMBER(wgp_interrupt6); |
| 75 | 75 | TIMER_CALLBACK_MEMBER(wgp_cpub_interrupt6); |
| 76 | void wgp_postload(); | |
| 76 | 77 | }; |
| r20647 | r20648 | |
|---|---|---|
| 51 | 51 | UINT32 screen_update_gradius3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 52 | 52 | INTERRUPT_GEN_MEMBER(cpuA_interrupt); |
| 53 | 53 | TIMER_DEVICE_CALLBACK_MEMBER(gradius3_sub_scanline); |
| 54 | void gradius3_postload(); | |
| 54 | 55 | }; |
| 55 | 56 | |
| 56 | 57 | /*----------- defined in video/gradius3.c -----------*/ |
| r20647 | r20648 | |
|---|---|---|
| 75 | 75 | TIMER_DEVICE_CALLBACK_MEMBER(mystwarr_interrupt); |
| 76 | 76 | TIMER_DEVICE_CALLBACK_MEMBER(metamrph_interrupt); |
| 77 | 77 | TIMER_DEVICE_CALLBACK_MEMBER(mchamp_interrupt); |
| 78 | void reset_sound_region(); | |
| 78 | 79 | }; |
| r20647 | r20648 | |
|---|---|---|
| 144 | 144 | void screen_eof_taitof2_partial_buffer_delayed_qzchikyu(screen_device &screen, bool state); |
| 145 | 145 | INTERRUPT_GEN_MEMBER(taitof2_interrupt); |
| 146 | 146 | TIMER_CALLBACK_MEMBER(taitof2_interrupt6); |
| 147 | void reset_driveout_sound_region(); | |
| 147 | 148 | }; |
| r20647 | r20648 | |
|---|---|---|
| 257 | 257 | DECLARE_WRITE16_MEMBER(sf2mdt_layer_w); |
| 258 | 258 | DECLARE_WRITE16_MEMBER(sf2mdta_layer_w); |
| 259 | 259 | UINT32 screen_update_fcrash(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 260 | void cps1_get_video_base(); | |
| 260 | 261 | }; |
| 261 | 262 | |
| 262 | 263 | /*----------- defined in drivers/cps1.c -----------*/ |
| r20647 | r20648 | |
| 267 | 268 | |
| 268 | 269 | |
| 269 | 270 | /*----------- defined in video/cps1.c -----------*/ |
| 270 | void cps1_get_video_base(running_machine &machine); | |
| 271 | 271 | void cps2_set_sprite_priorities(running_machine &machine); |
| 272 | 272 | void cps2_objram_latch(running_machine &machine); |
| 273 | 273 |
| r20647 | r20648 | |
|---|---|---|
| 97 | 97 | DECLARE_MACHINE_RESET(ta7630); |
| 98 | 98 | UINT32 screen_update_fortyl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 99 | 99 | TIMER_CALLBACK_MEMBER(nmi_callback); |
| 100 | void redraw_pixels(); | |
| 100 | 101 | }; |
| r20647 | r20648 | |
|---|---|---|
| 131 | 131 | DECLARE_WRITE8_MEMBER(polaris_sh_port_1_w); |
| 132 | 132 | DECLARE_WRITE8_MEMBER(polaris_sh_port_2_w); |
| 133 | 133 | DECLARE_WRITE8_MEMBER(polaris_sh_port_3_w); |
| 134 | ||
| 135 | void schaser_reinit_555_time_remain(); | |
| 134 | 136 | }; |
| 135 | 137 | |
| 136 | 138 |
| r20647 | r20648 | |
|---|---|---|
| 33 | 33 | virtual void video_start(); |
| 34 | 34 | UINT32 screen_update_atetris(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 35 | 35 | TIMER_CALLBACK_MEMBER(interrupt_gen); |
| 36 | void reset_bank(); | |
| 36 | 37 | }; |
| r20647 | r20648 | |
|---|---|---|
| 127 | 127 | DECLARE_READ8_MEMBER(tshoot_input_port_0_3_r); |
| 128 | 128 | DECLARE_WRITE8_MEMBER(tshoot_maxvol_w); |
| 129 | 129 | DECLARE_WRITE8_MEMBER(tshoot_lamp_w); |
| 130 | void williams2_postload(); | |
| 131 | void defender_postload(); | |
| 130 | 132 | }; |
| 131 | 133 | |
| 132 | 134 |
| r20647 | r20648 | |
|---|---|---|
| 107 | 107 | UINT32 screen_update_toaplan0(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 108 | 108 | INTERRUPT_GEN_MEMBER(twincobr_interrupt); |
| 109 | 109 | INTERRUPT_GEN_MEMBER(wardner_interrupt); |
| 110 | void twincobr_restore_screen(); | |
| 111 | void twincobr_restore_dsp(); | |
| 110 | 112 | }; |
| 111 | 113 | |
| 112 | 114 |
| r20647 | r20648 | |
|---|---|---|
| 490 | 490 | TIMER_DEVICE_CALLBACK_MEMBER(majxtal7_vblank_interrupt); |
| 491 | 491 | TIMER_DEVICE_CALLBACK_MEMBER(tenkai_interrupt); |
| 492 | 492 | TIMER_DEVICE_CALLBACK_MEMBER(mjmyster_irq); |
| 493 | void tenkai_update_rombank(); | |
| 494 | void gekisha_bank_postload(); | |
| 493 | 495 | }; |
| 494 | 496 | |
| 495 | 497 | //----------- defined in drivers/dynax.c ----------- |
| r20647 | r20648 | |
|---|---|---|
| 56 | 56 | UINT32 screen_update_djmain(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); |
| 57 | 57 | INTERRUPT_GEN_MEMBER(vb_interrupt); |
| 58 | 58 | DECLARE_WRITE_LINE_MEMBER(ide_interrupt); |
| 59 | void sndram_set_bank(); | |
| 59 | 60 | }; |
| 60 | 61 | |
| 61 | 62 | /*----------- defined in video/djmain.c -----------*/ |
| r20647 | r20648 | |
|---|---|---|
| 53 | 53 | virtual void video_start(); |
| 54 | 54 | virtual void palette_init(); |
| 55 | 55 | UINT32 screen_update_chaknpop(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 56 | void tx_tilemap_mark_all_dirty(); | |
| 56 | 57 | }; |
| r20647 | r20648 | |
|---|---|---|
| 100 | 100 | void screen_eof_tnzs(screen_device &screen, bool state); |
| 101 | 101 | INTERRUPT_GEN_MEMBER(arknoid2_interrupt); |
| 102 | 102 | TIMER_CALLBACK_MEMBER(kludge_callback); |
| 103 | void tnzs_postload(); | |
| 103 | 104 | }; |
| r20647 | r20648 | |
|---|---|---|
| 89 | 89 | INTERRUPT_GEN_MEMBER(blkpnthr_interrupt); |
| 90 | 90 | TIMER_DEVICE_CALLBACK_MEMBER(konamigt_interrupt); |
| 91 | 91 | TIMER_DEVICE_CALLBACK_MEMBER(gx400_interrupt); |
| 92 | void nemesis_postload(); | |
| 92 | 93 | }; |
| r20647 | r20648 | |
|---|---|---|
| 60 | 60 | TIMER_CALLBACK_MEMBER(irq_timer_tick); |
| 61 | 61 | TIMER_CALLBACK_MEMBER(firq_off_tick); |
| 62 | 62 | TIMER_CALLBACK_MEMBER(firq_timer_tick); |
| 63 | void expand_pixels(); | |
| 63 | 64 | }; |
| 64 | 65 | |
| 65 | 66 |
| r20647 | r20648 | |
|---|---|---|
| 44 | 44 | TIMER_CALLBACK_MEMBER(nmi_callback); |
| 45 | 45 | TIMER_CALLBACK_MEMBER(dmaend_callback); |
| 46 | 46 | DECLARE_READ8_MEMBER(simpsons_sound_r); |
| 47 | void simpsons_postload(); | |
| 47 | 48 | }; |
| 48 | 49 | |
| 49 | 50 |
| r20647 | r20648 | |
|---|---|---|
| 48 | 48 | UINT32 screen_update_ninjaw_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 49 | 49 | UINT32 screen_update_ninjaw_middle(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 50 | 50 | UINT32 screen_update_ninjaw_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 51 | void ninjaw_postload(); | |
| 51 | 52 | }; |
| r20647 | r20648 | |
|---|---|---|
| 173 | 173 | DECLARE_WRITE8_MEMBER(invad2ct_audio_2_w); |
| 174 | 174 | DECLARE_WRITE8_MEMBER(invad2ct_audio_3_w); |
| 175 | 175 | DECLARE_WRITE8_MEMBER(invad2ct_audio_4_w); |
| 176 | void maze_update_discrete(); | |
| 176 | 177 | }; |
| 177 | 178 | |
| 178 | 179 |
| r20647 | r20648 | |
|---|---|---|
| 30 | 30 | UINT32 screen_update_syvalion(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 31 | 31 | UINT32 screen_update_recordbr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 32 | 32 | UINT32 screen_update_dleague(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 33 | void reset_sound_region(); | |
| 33 | 34 | }; |
| r20647 | r20648 | |
|---|---|---|
| 94 | 94 | TIMER_CALLBACK_MEMBER(magerror_irq_callback); |
| 95 | 95 | TIMER_CALLBACK_MEMBER(hyprduel_blit_done); |
| 96 | 96 | TIMER_DEVICE_CALLBACK_MEMBER(hyprduel_interrupt); |
| 97 | void hyprduel_postload(); | |
| 97 | 98 | }; |
| r20647 | r20648 | |
|---|---|---|
| 53 | 53 | UINT32 screen_update_psikyo4_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 54 | 54 | UINT32 screen_update_psikyo4_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 55 | 55 | INTERRUPT_GEN_MEMBER(psikyosh_interrupt); |
| 56 | void hotgmck_pcm_bank_postload(); | |
| 56 | 57 | }; |
| r20647 | r20648 | |
|---|---|---|
| 144 | 144 | void screen_eof_toaplan1(screen_device &screen, bool state); |
| 145 | 145 | void screen_eof_samesame(screen_device &screen, bool state); |
| 146 | 146 | INTERRUPT_GEN_MEMBER(toaplan1_interrupt); |
| 147 | void rallybik_flipscreen(); | |
| 148 | void toaplan1_flipscreen(); | |
| 149 | void demonwld_restore_dsp(); | |
| 147 | 150 | }; |
| 148 | 151 | |
| 149 | 152 |
| r20647 | r20648 | |
|---|---|---|
| 68 | 68 | UINT32 screen_update_xexex(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); |
| 69 | 69 | TIMER_CALLBACK_MEMBER(dmaend_callback); |
| 70 | 70 | TIMER_DEVICE_CALLBACK_MEMBER(xexex_interrupt); |
| 71 | void xexex_postload(); | |
| 71 | 72 | }; |
| 72 | 73 | |
| 73 | 74 | /*----------- defined in video/xexex.c -----------*/ |
| r20647 | r20648 | |
|---|---|---|
| 54 | 54 | UINT32 screen_update_xmen6p_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 55 | 55 | void screen_eof_xmen6p(screen_device &screen, bool state); |
| 56 | 56 | TIMER_DEVICE_CALLBACK_MEMBER(xmen_scanline); |
| 57 | void sound_reset_bank(); | |
| 57 | 58 | }; |
| 58 | 59 | |
| 59 | 60 | /*----------- defined in video/xmen.c -----------*/ |
| r20647 | r20648 | |
|---|---|---|
| 132 | 132 | INTERRUPT_GEN_MEMBER(toaplan2_vblank_irq4); |
| 133 | 133 | INTERRUPT_GEN_MEMBER(bbakraid_snd_interrupt); |
| 134 | 134 | TIMER_CALLBACK_MEMBER(toaplan2_raise_irq); |
| 135 | void truxton2_postload(); | |
| 135 | 136 | }; |
| r20647 | r20648 | |
|---|---|---|
| 108 | 108 | UINT32 screen_update_semibase(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 109 | 109 | UINT32 screen_update_sdfight(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 110 | 110 | INTERRUPT_GEN_MEMBER(tumbleb2_interrupt); |
| 111 | void tumbleb_tilemap_redraw(); | |
| 111 | 112 | }; |
| r20647 | r20648 | |
|---|---|---|
| 88 | 88 | INTERRUPT_GEN_MEMBER(sci_interrupt); |
| 89 | 89 | TIMER_CALLBACK_MEMBER(taitoz_interrupt6); |
| 90 | 90 | TIMER_CALLBACK_MEMBER(taitoz_cpub_interrupt5); |
| 91 | void taitoz_postload(); | |
| 91 | 92 | }; |
| r20647 | r20648 | |
|---|---|---|
| 83 | 83 | virtual void machine_reset(); |
| 84 | 84 | virtual void video_start(); |
| 85 | 85 | UINT32 screen_update_taitoair(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 86 | void reset_sound_region(); | |
| 86 | 87 | }; |
| r20647 | r20648 | |
|---|---|---|
| 42 | 42 | virtual void video_start(); |
| 43 | 43 | UINT32 screen_update_warriorb_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 44 | 44 | UINT32 screen_update_warriorb_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 45 | void reset_sound_region(); | |
| 45 | 46 | }; |
| r20647 | r20648 | |
|---|---|---|
| 92 | 92 | } |
| 93 | 93 | } |
| 94 | 94 | |
| 95 | ||
| 95 | void xmen_state::sound_reset_bank() | |
| 96 | 96 | { |
| 97 | xmen_state *state = machine.driver_data<xmen_state>(); | |
| 98 | state->membank("bank4")->set_entry(state->m_sound_curbank & 0x07); | |
| 97 | membank("bank4")->set_entry(m_sound_curbank & 0x07); | |
| 99 | 98 | } |
| 100 | 99 | |
| 101 | 100 | WRITE8_MEMBER(xmen_state::sound_bankswitch_w) |
| 102 | 101 | { |
| 103 | 102 | m_sound_curbank = data; |
| 104 | sound_reset_bank( | |
| 103 | sound_reset_bank(); | |
| 105 | 104 | } |
| 106 | 105 | |
| 107 | 106 | |
| r20647 | r20648 | |
| 311 | 310 | save_item(NAME(m_layer_colorbase)); |
| 312 | 311 | save_item(NAME(m_layerpri)); |
| 313 | 312 | save_item(NAME(m_vblank_irq_mask)); |
| 314 | machine().save().register_postload(save_prepost_delegate(FUNC(sound_reset_bank), | |
| 313 | machine().save().register_postload(save_prepost_delegate(FUNC(xmen_state::sound_reset_bank), this)); | |
| 315 | 314 | } |
| 316 | 315 | |
| 317 | 316 | void xmen_state::machine_reset() |
| r20647 | r20648 | |
|---|---|---|
| 127 | 127 | { |
| 128 | 128 | m_vblank_irq = 1; |
| 129 | 129 | update_irq_state(machine()); |
| 130 | cave_get_sprite_info( | |
| 130 | cave_get_sprite_info(); | |
| 131 | 131 | m_agallet_vblank_irq = 1; |
| 132 | 132 | machine().scheduler().timer_set(attotime::from_usec(2000), timer_expired_delegate(FUNC(cave_state::cave_vblank_end),this)); |
| 133 | 133 | } |
| r20647 | r20648 | |
|---|---|---|
| 938 | 938 | ROM_END |
| 939 | 939 | |
| 940 | 940 | |
| 941 | ||
| 941 | void psikyo4_state::hotgmck_pcm_bank_postload() | |
| 942 | 942 | { |
| 943 | set_hotgmck_pcm_bank(machine, 0); | |
| 944 | set_hotgmck_pcm_bank(machine, 1); | |
| 943 | set_hotgmck_pcm_bank(machine(), 0); | |
| 944 | set_hotgmck_pcm_bank(machine(), 1); | |
| 945 | 945 | } |
| 946 | 946 | |
| 947 | 947 | static void install_hotgmck_pcm_bank(running_machine &machine) |
| r20647 | r20648 | |
| 957 | 957 | set_hotgmck_pcm_bank(machine, 1); |
| 958 | 958 | |
| 959 | 959 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0x5800008, 0x580000b, write32_delegate(FUNC(psikyo4_state::hotgmck_pcm_bank_w),state)); |
| 960 | machine.save().register_postload(save_prepost_delegate(FUNC(hotgmck_pcm_bank_postload), | |
| 960 | machine.save().register_postload(save_prepost_delegate(FUNC(psikyo4_state::hotgmck_pcm_bank_postload), state)); | |
| 961 | 961 | } |
| 962 | 962 | |
| 963 | 963 | DRIVER_INIT_MEMBER(psikyo4_state,hotgmck) |
| r20647 | r20648 | |
|---|---|---|
| 337 | 337 | DECLARE_WRITE8_MEMBER(sound_bankswitch_w); |
| 338 | 338 | DECLARE_DRIVER_INIT(kyustrkr); |
| 339 | 339 | DECLARE_MACHINE_START(taitox); |
| 340 | void reset_sound_region(); | |
| 340 | 341 | }; |
| 341 | 342 | |
| 342 | 343 | READ16_MEMBER(taitox_state::superman_dsw_input_r) |
| r20647 | r20648 | |
| 412 | 413 | |
| 413 | 414 | /**************************************************************************/ |
| 414 | 415 | |
| 415 | ||
| 416 | void taitox_state::reset_sound_region() | |
| 416 | 417 | { |
| 417 | taitox_state *state = machine.driver_data<taitox_state>(); | |
| 418 | ||
| 419 | state->membank("bank2")->set_base(state->memregion("audiocpu")->base() + (state->m_banknum * 0x4000) + 0x10000 ); | |
| 418 | membank("bank2")->set_base(memregion("audiocpu")->base() + (m_banknum * 0x4000) + 0x10000 ); | |
| 420 | 419 | } |
| 421 | 420 | |
| 422 | 421 | WRITE8_MEMBER(taitox_state::sound_bankswitch_w) |
| 423 | 422 | { |
| 424 | 423 | m_banknum = (data - 1) & 3; |
| 425 | reset_sound_region( | |
| 424 | reset_sound_region(); | |
| 426 | 425 | } |
| 427 | 426 | |
| 428 | 427 | |
| r20647 | r20648 | |
| 806 | 805 | { |
| 807 | 806 | m_banknum = -1; |
| 808 | 807 | save_item(NAME(m_banknum)); |
| 809 | machine().save().register_postload(save_prepost_delegate(FUNC(reset_sound_region), | |
| 808 | machine().save().register_postload(save_prepost_delegate(FUNC(taitox_state::reset_sound_region), this)); | |
| 810 | 809 | } |
| 811 | 810 | |
| 812 | 811 | static const tc0140syt_interface taitox_tc0140syt_intf = |
| r20647 | r20648 | |
|---|---|---|
| 164 | 164 | SOUND |
| 165 | 165 | ***********************************************************/ |
| 166 | 166 | |
| 167 | ||
| 167 | void warriorb_state::reset_sound_region() | |
| 168 | 168 | { |
| 169 | warriorb_state *state = machine.driver_data<warriorb_state>(); | |
| 170 | state->membank("bank10")->set_entry(state->m_banknum); | |
| 169 | membank("bank10")->set_entry(m_banknum); | |
| 171 | 170 | } |
| 172 | 171 | |
| 173 | 172 | WRITE8_MEMBER(warriorb_state::sound_bankswitch_w) |
| 174 | 173 | { |
| 175 | 174 | m_banknum = data & 7; |
| 176 | reset_sound_region( | |
| 175 | reset_sound_region(); | |
| 177 | 176 | } |
| 178 | 177 | |
| 179 | 178 | WRITE16_MEMBER(warriorb_state::warriorb_sound_w) |
| r20647 | r20648 | |
| 524 | 523 | |
| 525 | 524 | save_item(NAME(m_banknum)); |
| 526 | 525 | save_item(NAME(m_pandata)); |
| 527 | machine().save().register_postload(save_prepost_delegate(FUNC(reset_sound_region), | |
| 526 | machine().save().register_postload(save_prepost_delegate(FUNC(warriorb_state::reset_sound_region), this)); | |
| 528 | 527 | } |
| 529 | 528 | |
| 530 | 529 | void warriorb_state::machine_reset() |
| r20647 | r20648 | |
|---|---|---|
| 454 | 454 | } |
| 455 | 455 | |
| 456 | 456 | |
| 457 | ||
| 457 | void astrocde_state::profbank_banksw_restore() | |
| 458 | 458 | { |
| 459 | astrocde_state *state = machine.driver_data<astrocde_state>(); | |
| 460 | address_space &space = machine.device("maincpu")->memory().space(AS_IO); | |
| 459 | address_space &space = machine().device("maincpu")->memory().space(AS_IO); | |
| 461 | 460 | |
| 462 | | |
| 461 | profpac_banksw_w(space, 0, m_profpac_bank); | |
| 463 | 462 | } |
| 464 | 463 | |
| 465 | 464 | |
| r20647 | r20648 | |
| 1791 | 1790 | |
| 1792 | 1791 | /* reset banking */ |
| 1793 | 1792 | profpac_banksw_w(iospace, 0, 0); |
| 1794 | machine().save().register_postload(save_prepost_delegate(FUNC(profbank_banksw_restore), | |
| 1793 | machine().save().register_postload(save_prepost_delegate(FUNC(astrocde_state::profbank_banksw_restore), this)); | |
| 1795 | 1794 | } |
| 1796 | 1795 | |
| 1797 | 1796 | |
| r20647 | r20648 | |
| 1807 | 1806 | |
| 1808 | 1807 | /* reset banking */ |
| 1809 | 1808 | profpac_banksw_w(iospace, 0, 0); |
| 1810 | machine().save().register_postload(save_prepost_delegate(FUNC(profbank_banksw_restore), | |
| 1809 | machine().save().register_postload(save_prepost_delegate(FUNC(astrocde_state::profbank_banksw_restore), this)); | |
| 1811 | 1810 | } |
| 1812 | 1811 | |
| 1813 | 1812 | |
| r20647 | r20648 | |
| 1828 | 1827 | |
| 1829 | 1828 | /* reset banking */ |
| 1830 | 1829 | profpac_banksw_w(iospace, 0, 0); |
| 1831 | machine().save().register_postload(save_prepost_delegate(FUNC(profbank_banksw_restore), | |
| 1830 | machine().save().register_postload(save_prepost_delegate(FUNC(astrocde_state::profbank_banksw_restore), this)); | |
| 1832 | 1831 | } |
| 1833 | 1832 | |
| 1834 | 1833 |
| r20647 | r20648 | |
|---|---|---|
| 383 | 383 | SOUND |
| 384 | 384 | *****************************************/ |
| 385 | 385 | |
| 386 | ||
| 386 | void othunder_state::reset_sound_region() | |
| 387 | 387 | { |
| 388 | othunder_state *state = machine.driver_data<othunder_state>(); | |
| 389 | state->membank("bank10")->set_entry(state->m_banknum); | |
| 388 | membank("bank10")->set_entry(m_banknum); | |
| 390 | 389 | } |
| 391 | 390 | |
| 392 | 391 | |
| 393 | 392 | WRITE8_MEMBER(othunder_state::sound_bankswitch_w) |
| 394 | 393 | { |
| 395 | 394 | m_banknum = data & 7; |
| 396 | reset_sound_region( | |
| 395 | reset_sound_region(); | |
| 397 | 396 | } |
| 398 | 397 | |
| 399 | 398 | WRITE16_MEMBER(othunder_state::othunder_sound_w) |
| r20647 | r20648 | |
| 685 | 684 | save_item(NAME(m_ad_irq)); |
| 686 | 685 | save_item(NAME(m_banknum)); |
| 687 | 686 | save_item(NAME(m_pan)); |
| 688 | machine().save().register_postload(save_prepost_delegate(FUNC(reset_sound_region), | |
| 687 | machine().save().register_postload(save_prepost_delegate(FUNC(othunder_state::reset_sound_region), this)); | |
| 689 | 688 | } |
| 690 | 689 | |
| 691 | 690 | void othunder_state::machine_reset() |
| r20647 | r20648 | |
|---|---|---|
| 3025 | 3025 | SAVE STATES |
| 3026 | 3026 | ***********************************************************/ |
| 3027 | 3027 | |
| 3028 | ||
| 3028 | void taitoz_state::taitoz_postload() | |
| 3029 | 3029 | { |
| 3030 | parse_cpu_control(machine); | |
| 3031 | reset_sound_region(machine); | |
| 3030 | parse_cpu_control(machine()); | |
| 3031 | reset_sound_region(machine()); | |
| 3032 | 3032 | } |
| 3033 | 3033 | |
| 3034 | 3034 | MACHINE_START_MEMBER(taitoz_state,bshark) |
| r20647 | r20648 | |
| 3058 | 3058 | |
| 3059 | 3059 | machine().root_device().membank("bank10")->configure_entries(0, banks, machine().root_device().memregion("audiocpu")->base() + 0xc000, 0x4000); |
| 3060 | 3060 | |
| 3061 | machine().save().register_postload(save_prepost_delegate(FUNC(taitoz_postload), | |
| 3061 | machine().save().register_postload(save_prepost_delegate(FUNC(taitoz_state::taitoz_postload), this)); | |
| 3062 | 3062 | |
| 3063 | 3063 | MACHINE_START_CALL_MEMBER(bshark); |
| 3064 | 3064 | } |
| r20647 | r20648 | |
|---|---|---|
| 789 | 789 | }; |
| 790 | 790 | |
| 791 | 791 | |
| 792 | ||
| 792 | void ninjaw_state::ninjaw_postload() | |
| 793 | 793 | { |
| 794 | parse_control(machine); | |
| 795 | reset_sound_region(machine); | |
| 794 | parse_control(machine()); | |
| 795 | reset_sound_region(machine()); | |
| 796 | 796 | } |
| 797 | 797 | |
| 798 | 798 | void ninjaw_state::machine_start() |
| r20647 | r20648 | |
| 819 | 819 | save_item(NAME(m_cpua_ctrl)); |
| 820 | 820 | save_item(NAME(m_banknum)); |
| 821 | 821 | save_item(NAME(m_pandata)); |
| 822 | machine().save().register_postload(save_prepost_delegate(FUNC(ninjaw_postload), | |
| 822 | machine().save().register_postload(save_prepost_delegate(FUNC(ninjaw_state::ninjaw_postload), this)); | |
| 823 | 823 | } |
| 824 | 824 | |
| 825 | 825 | void ninjaw_state::machine_reset() |
| r20647 | r20648 | |
|---|---|---|
| 551 | 551 | /**********************************************************************************/ |
| 552 | 552 | |
| 553 | 553 | |
| 554 | ||
| 554 | void mystwarr_state::reset_sound_region() | |
| 555 | 555 | { |
| 556 | mystwarr_state *state = machine.driver_data<mystwarr_state>(); | |
| 557 | state->membank("bank2")->set_base(state->memregion("soundcpu")->base() + 0x10000 + state->m_cur_sound_region*0x4000); | |
| 556 | membank("bank2")->set_base(memregion("soundcpu")->base() + 0x10000 + m_cur_sound_region*0x4000); | |
| 558 | 557 | } |
| 559 | 558 | |
| 560 | 559 | WRITE8_MEMBER(mystwarr_state::sound_bankswitch_w) |
| 561 | 560 | { |
| 562 | 561 | m_cur_sound_region = (data & 0xf); |
| 563 | reset_sound_region( | |
| 562 | reset_sound_region(); | |
| 564 | 563 | } |
| 565 | 564 | |
| 566 | 565 | /* sound memory maps |
| r20647 | r20648 | |
| 838 | 837 | { |
| 839 | 838 | /* set default bankswitch */ |
| 840 | 839 | m_cur_sound_region = 2; |
| 841 | reset_sound_region( | |
| 840 | reset_sound_region(); | |
| 842 | 841 | |
| 843 | 842 | m_mw_irq_control = 0; |
| 844 | 843 | |
| 845 | 844 | state_save_register_global(machine(), m_mw_irq_control); |
| 846 | 845 | state_save_register_global(machine(), m_cur_sound_region); |
| 847 | machine().save().register_postload(save_prepost_delegate(FUNC(reset_sound_region), | |
| 846 | machine().save().register_postload(save_prepost_delegate(FUNC(mystwarr_state::reset_sound_region), this)); | |
| 848 | 847 | } |
| 849 | 848 | |
| 850 | 849 | MACHINE_RESET_MEMBER(mystwarr_state,mystwarr) |
| r20647 | r20648 | |
|---|---|---|
| 910 | 910 | graphics glitches. |
| 911 | 911 | ***********************************************************/ |
| 912 | 912 | |
| 913 | ||
| 913 | void wgp_state::wgp_postload() | |
| 914 | 914 | { |
| 915 | parse_control(machine); | |
| 916 | reset_sound_region(machine); | |
| 915 | parse_control(machine()); | |
| 916 | reset_sound_region(machine()); | |
| 917 | 917 | } |
| 918 | 918 | |
| 919 | 919 | void wgp_state::machine_reset() |
| r20647 | r20648 | |
| 948 | 948 | save_item(NAME(m_cpua_ctrl)); |
| 949 | 949 | save_item(NAME(m_banknum)); |
| 950 | 950 | save_item(NAME(m_port_sel)); |
| 951 | machine().save().register_postload(save_prepost_delegate(FUNC(wgp_postload), | |
| 951 | machine().save().register_postload(save_prepost_delegate(FUNC(wgp_state::wgp_postload), this)); | |
| 952 | 952 | } |
| 953 | 953 | |
| 954 | 954 | static const tc0100scn_interface wgp_tc0100scn_intf = |
| r20647 | r20648 | |
|---|---|---|
| 361 | 361 | layercontrol = m_cps_b_regs[m_layer_enable_reg / 2]; |
| 362 | 362 | |
| 363 | 363 | /* Get video memory base registers */ |
| 364 | cps1_get_video_base( | |
| 364 | cps1_get_video_base(); | |
| 365 | 365 | |
| 366 | 366 | /* Build palette */ |
| 367 | 367 | fcrash_build_palette(machine()); |
| r20647 | r20648 | |
|---|---|---|
| 820 | 820 | "maincpu", "audiocpu" |
| 821 | 821 | }; |
| 822 | 822 | |
| 823 | ||
| 823 | void darius_state::darius_postload() | |
| 824 | 824 | { |
| 825 | parse_control(machine); | |
| 826 | reset_sound_region(machine); | |
| 825 | parse_control(machine()); | |
| 826 | reset_sound_region(machine()); | |
| 827 | 827 | } |
| 828 | 828 | |
| 829 | 829 | void darius_state::machine_start() |
| r20647 | r20648 | |
| 872 | 872 | save_item(NAME(m_nmi_enable)); |
| 873 | 873 | save_item(NAME(m_vol)); |
| 874 | 874 | save_item(NAME(m_pan)); |
| 875 | machine().save().register_postload(save_prepost_delegate(FUNC(darius_postload), | |
| 875 | machine().save().register_postload(save_prepost_delegate(FUNC(darius_state::darius_postload), this)); | |
| 876 | 876 | } |
| 877 | 877 | |
| 878 | 878 |
| r20647 | r20648 | |
|---|---|---|
| 862 | 862 | /* schematic says 12.5 Hz, but R/C values shown give 8.5Hz */ |
| 863 | 863 | #define MAZE_555_B1_PERIOD PERIOD_OF_555_ASTABLE(RES_K(33) /* R200 */, RES_K(68) /* R201 */, CAP_U(1) /* C201 */) |
| 864 | 864 | |
| 865 | ||
| 865 | void mw8080bw_state::maze_update_discrete() | |
| 866 | 866 | { |
| 867 | mw8080bw_state *state = machine.driver_data<mw8080bw_state>(); | |
| 868 | maze_write_discrete(machine.device("discrete"), state->m_maze_tone_timing_state); | |
| 867 | maze_write_discrete(machine().device("discrete"), m_maze_tone_timing_state); | |
| 869 | 868 | } |
| 870 | 869 | |
| 871 | 870 | |
| r20647 | r20648 | |
| 886 | 885 | |
| 887 | 886 | /* setup for save states */ |
| 888 | 887 | save_item(NAME(m_maze_tone_timing_state)); |
| 889 | machine().save().register_postload(save_prepost_delegate(FUNC(maze_update_discrete), | |
| 888 | machine().save().register_postload(save_prepost_delegate(FUNC(mw8080bw_state::maze_update_discrete), this)); | |
| 890 | 889 | |
| 891 | 890 | MACHINE_START_CALL_MEMBER(mw8080bw); |
| 892 | 891 | } |
| r20647 | r20648 | |
|---|---|---|
| 46 | 46 | DECLARE_DRIVER_INIT(pengadvb); |
| 47 | 47 | virtual void machine_start(); |
| 48 | 48 | virtual void machine_reset(); |
| 49 | void pengadvb_postload(); | |
| 49 | 50 | }; |
| 50 | 51 | |
| 51 | 52 | |
| r20647 | r20648 | |
| 244 | 245 | DEVCB_DRIVER_LINE_MEMBER(pengadvb_state,vdp_interrupt) |
| 245 | 246 | }; |
| 246 | 247 | |
| 247 | ||
| 248 | void pengadvb_state::pengadvb_postload() | |
| 248 | 249 | { |
| 249 | mem_map_banks(machine); | |
| 250 | mem_map_banks(machine()); | |
| 250 | 251 | } |
| 251 | 252 | |
| 252 | 253 | void pengadvb_state::machine_start() |
| r20647 | r20648 | |
| 254 | 255 | state_save_register_global_pointer(machine(), m_main_mem, 0x4000); |
| 255 | 256 | state_save_register_global(machine(), m_mem_map); |
| 256 | 257 | state_save_register_global_array(machine(), m_mem_banks); |
| 257 | machine().save().register_postload(save_prepost_delegate(FUNC(pengadvb_postload), | |
| 258 | machine().save().register_postload(save_prepost_delegate(FUNC(pengadvb_state::pengadvb_postload), this)); | |
| 258 | 259 | } |
| 259 | 260 | |
| 260 | 261 | void pengadvb_state::machine_reset() |
| r20647 | r20648 | |
|---|---|---|
| 371 | 371 | |
| 372 | 372 | |
| 373 | 373 | |
| 374 | ||
| 374 | void taitoair_state::reset_sound_region() | |
| 375 | 375 | { |
| 376 | taitoair_state *state = machine.driver_data<taitoair_state>(); | |
| 377 | state->membank("bank1")->set_entry(state->m_banknum); | |
| 376 | membank("bank1")->set_entry(m_banknum); | |
| 378 | 377 | } |
| 379 | 378 | |
| 380 | 379 | WRITE8_MEMBER(taitoair_state::sound_bankswitch_w) |
| 381 | 380 | { |
| 382 | 381 | m_banknum = data & 3; |
| 383 | reset_sound_region( | |
| 382 | reset_sound_region(); | |
| 384 | 383 | } |
| 385 | 384 | |
| 386 | 385 | |
| r20647 | r20648 | |
| 682 | 681 | state_save_register_item(machine(), "globals", NULL, i, m_q.p[i].y); |
| 683 | 682 | } |
| 684 | 683 | |
| 685 | machine().save().register_postload(save_prepost_delegate(FUNC(reset_sound_region), | |
| 684 | machine().save().register_postload(save_prepost_delegate(FUNC(taitoair_state::reset_sound_region), this)); | |
| 686 | 685 | } |
| 687 | 686 | |
| 688 | 687 | void taitoair_state::machine_reset() |
| r20647 | r20648 | |
|---|---|---|
| 228 | 228 | } |
| 229 | 229 | } |
| 230 | 230 | |
| 231 | ||
| 231 | void taitoh_state::reset_sound_region() | |
| 232 | 232 | { |
| 233 | taitoh_state *state = machine.driver_data<taitoh_state>(); | |
| 234 | state->membank("bank1")->set_entry(state->m_banknum); | |
| 233 | membank("bank1")->set_entry(m_banknum); | |
| 235 | 234 | } |
| 236 | 235 | |
| 237 | 236 | WRITE8_MEMBER(taitoh_state::sound_bankswitch_w) |
| 238 | 237 | { |
| 239 | 238 | m_banknum = data & 3; |
| 240 | reset_sound_region( | |
| 239 | reset_sound_region(); | |
| 241 | 240 | } |
| 242 | 241 | |
| 243 | 242 | |
| r20647 | r20648 | |
| 532 | 531 | m_tc0080vco = machine().device("tc0080vco"); |
| 533 | 532 | |
| 534 | 533 | save_item(NAME(m_banknum)); |
| 535 | machine().save().register_postload(save_prepost_delegate(FUNC(reset_sound_region), | |
| 534 | machine().save().register_postload(save_prepost_delegate(FUNC(taitoh_state::reset_sound_region), this)); | |
| 536 | 535 | } |
| 537 | 536 | |
| 538 | 537 |
| r20647 | r20648 | |
|---|---|---|
| 62 | 62 | virtual void video_start(); |
| 63 | 63 | UINT32 screen_update_mjsister(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 64 | 64 | TIMER_CALLBACK_MEMBER(dac_callback); |
| 65 | void mjsister_redraw(); | |
| 65 | 66 | }; |
| 66 | 67 | |
| 67 | 68 | |
| r20647 | r20648 | |
| 441 | 442 | * |
| 442 | 443 | *************************************/ |
| 443 | 444 | |
| 444 | ||
| 445 | void mjsister_state::mjsister_redraw() | |
| 445 | 446 | { |
| 446 | 447 | /* we can skip saving tmpbitmaps because we can redraw them from vram */ |
| 447 | | |
| 448 | m_screen_redraw = 1; | |
| 448 | 449 | } |
| 449 | 450 | |
| 450 | 451 | void mjsister_state::machine_start() |
| r20647 | r20648 | |
| 469 | 470 | save_item(NAME(m_dac_bank)); |
| 470 | 471 | save_item(NAME(m_dac_adr_s)); |
| 471 | 472 | save_item(NAME(m_dac_adr_e)); |
| 472 | machine().save().register_postload(save_prepost_delegate(FUNC(mjsister_redraw), this)); | |
| 473 | machine().save().register_postload(save_prepost_delegate(FUNC(mjsister_state::mjsister_redraw), this)); | |
| 473 | 474 | } |
| 474 | 475 | |
| 475 | 476 | void mjsister_state::machine_reset() |
| r20647 | r20648 | |
|---|---|---|
| 101 | 101 | |
| 102 | 102 | //--------- |
| 103 | 103 | |
| 104 | ||
| 104 | void djmain_state::sndram_set_bank() | |
| 105 | 105 | { |
| 106 | djmain_state *state = machine.driver_data<djmain_state>(); | |
| 107 | state->m_sndram = state->memregion("shared")->base() + 0x80000 * state->m_sndram_bank; | |
| 106 | m_sndram = memregion("shared")->base() + 0x80000 * m_sndram_bank; | |
| 108 | 107 | } |
| 109 | 108 | |
| 110 | 109 | WRITE32_MEMBER(djmain_state::sndram_bank_w) |
| r20647 | r20648 | |
| 112 | 111 | if (ACCESSING_BITS_16_31) |
| 113 | 112 | { |
| 114 | 113 | m_sndram_bank = (data >> 16) & 0x1f; |
| 115 | sndram_set_bank( | |
| 114 | sndram_set_bank(); | |
| 116 | 115 | } |
| 117 | 116 | } |
| 118 | 117 | |
| r20647 | r20648 | |
| 1409 | 1408 | state_save_register_global(machine(), m_v_ctrl); |
| 1410 | 1409 | state_save_register_global_array(machine(), m_obj_regs); |
| 1411 | 1410 | |
| 1412 | machine().save().register_postload(save_prepost_delegate(FUNC(sndram_set_bank), | |
| 1411 | machine().save().register_postload(save_prepost_delegate(FUNC(djmain_state::sndram_set_bank), this)); | |
| 1413 | 1412 | } |
| 1414 | 1413 | |
| 1415 | 1414 | |
| r20647 | r20648 | |
| 1417 | 1416 | { |
| 1418 | 1417 | /* reset sound ram bank */ |
| 1419 | 1418 | m_sndram_bank = 0; |
| 1420 | sndram_set_bank( | |
| 1419 | sndram_set_bank(); | |
| 1421 | 1420 | |
| 1422 | 1421 | /* reset the IDE controller */ |
| 1423 | 1422 | machine().device("ide")->reset(); |
| r20647 | r20648 | |
|---|---|---|
| 281 | 281 | 0x68, 0x60 |
| 282 | 282 | }; |
| 283 | 283 | |
| 284 | ||
| 284 | void renegade_state::setbank() | |
| 285 | 285 | { |
| 286 | renegade_state *state = machine.driver_data<renegade_state>(); | |
| 287 | UINT8 *RAM = state->memregion("maincpu")->base(); | |
| 288 | state->membank("bank1")->set_base(&RAM[state->m_bank ? 0x10000 : 0x4000]); | |
| 286 | UINT8 *RAM = memregion("maincpu")->base(); | |
| 287 | membank("bank1")->set_base(&RAM[m_bank ? 0x10000 : 0x4000]); | |
| 289 | 288 | } |
| 290 | 289 | |
| 291 | 290 | void renegade_state::machine_start() |
| r20647 | r20648 | |
| 296 | 295 | state_save_register_global(machine(), m_mcu_key); |
| 297 | 296 | |
| 298 | 297 | state_save_register_global(machine(), m_bank); |
| 299 | machine().save().register_postload(save_prepost_delegate(FUNC(setbank), | |
| 298 | machine().save().register_postload(save_prepost_delegate(FUNC(renegade_state::setbank), this)); | |
| 300 | 299 | } |
| 301 | 300 | |
| 302 | 301 | DRIVER_INIT_MEMBER(renegade_state,renegade) |
| r20647 | r20648 | |
| 660 | 659 | if ((data & 1) != m_bank) |
| 661 | 660 | { |
| 662 | 661 | m_bank = data & 1; |
| 663 | setbank( | |
| 662 | setbank(); | |
| 664 | 663 | } |
| 665 | 664 | } |
| 666 | 665 | |
| r20647 | r20648 | |
| 925 | 924 | void renegade_state::machine_reset() |
| 926 | 925 | { |
| 927 | 926 | m_bank = 0; |
| 928 | setbank( | |
| 927 | setbank(); | |
| 929 | 928 | } |
| 930 | 929 | |
| 931 | 930 |
| r20647 | r20648 | |
|---|---|---|
| 238 | 238 | SOUND |
| 239 | 239 | *****************************************************/ |
| 240 | 240 | |
| 241 | ||
| 241 | void slapshot_state::reset_sound_region() | |
| 242 | 242 | { |
| 243 | slapshot_state *state = machine.driver_data<slapshot_state>(); | |
| 244 | state->membank("bank10")->set_entry(state->m_banknum); | |
| 243 | membank("bank10")->set_entry(m_banknum); | |
| 245 | 244 | } |
| 246 | 245 | |
| 247 | 246 | WRITE8_MEMBER(slapshot_state::sound_bankswitch_w) |
| 248 | 247 | { |
| 249 | 248 | m_banknum = data & 7; |
| 250 | reset_sound_region( | |
| 249 | reset_sound_region(); | |
| 251 | 250 | } |
| 252 | 251 | |
| 253 | ||
| 254 | ||
| 255 | ||
| 256 | ||
| 257 | ||
| 258 | 252 | WRITE16_MEMBER(slapshot_state::slapshot_msb_sound_w) |
| 259 | 253 | { |
| 260 | 254 | if (offset == 0) |
| r20647 | r20648 | |
| 532 | 526 | |
| 533 | 527 | m_banknum = 0; |
| 534 | 528 | save_item(NAME(m_banknum)); |
| 535 | machine().save().register_postload(save_prepost_delegate(FUNC(reset_sound_region), | |
| 529 | machine().save().register_postload(save_prepost_delegate(FUNC(slapshot_state::reset_sound_region), this)); | |
| 536 | 530 | } |
| 537 | 531 | |
| 538 | 532 |
| r20647 | r20648 | |
|---|---|---|
| 672 | 672 | MACHINE DRIVERS |
| 673 | 673 | ***********************************************************/ |
| 674 | 674 | |
| 675 | ||
| 675 | void topspeed_state::topspeed_postload() | |
| 676 | 676 | { |
| 677 | parse_control(machine); | |
| 678 | reset_sound_region(machine); | |
| 677 | parse_control(machine()); | |
| 678 | reset_sound_region(machine()); | |
| 679 | 679 | } |
| 680 | 680 | |
| 681 | 681 | void topspeed_state::machine_start() |
| r20647 | r20648 | |
| 697 | 697 | save_item(NAME(m_cpua_ctrl)); |
| 698 | 698 | save_item(NAME(m_ioc220_port)); |
| 699 | 699 | save_item(NAME(m_banknum)); |
| 700 | machine().save().register_postload(save_prepost_delegate(FUNC(topspeed_postload), | |
| 700 | machine().save().register_postload(save_prepost_delegate(FUNC(topspeed_state::topspeed_postload), this)); | |
| 701 | 701 | } |
| 702 | 702 | |
| 703 | 703 | void topspeed_state::machine_reset() |
| r20647 | r20648 | |
|---|---|---|
| 1351 | 1351 | } |
| 1352 | 1352 | } |
| 1353 | 1353 | |
| 1354 | ||
| 1354 | void dynax_state::tenkai_update_rombank() | |
| 1355 | 1355 | { |
| 1356 | dynax_state *state = machine.driver_data<dynax_state>(); | |
| 1357 | state->m_romptr = state->memregion("maincpu")->base() + 0x10000 + 0x8000 * state->m_rombank; | |
| 1358 | // logerror("rombank = %02x\n", state->m_rombank); | |
| 1356 | m_romptr = memregion("maincpu")->base() + 0x10000 + 0x8000 * m_rombank; | |
| 1357 | // logerror("rombank = %02x\n", m_rombank); | |
| 1359 | 1358 | } |
| 1360 | 1359 | |
| 1361 | 1360 | READ8_MEMBER(dynax_state::tenkai_p3_r) |
| r20647 | r20648 | |
| 1366 | 1365 | WRITE8_MEMBER(dynax_state::tenkai_p3_w) |
| 1367 | 1366 | { |
| 1368 | 1367 | m_rombank = ((data & 0x04) << 1) | (m_rombank & 0x07); |
| 1369 | tenkai_update_rombank( | |
| 1368 | tenkai_update_rombank(); | |
| 1370 | 1369 | } |
| 1371 | 1370 | WRITE8_MEMBER(dynax_state::tenkai_p4_w) |
| 1372 | 1371 | { |
| 1373 | 1372 | m_rombank = (m_rombank & 0x08) | ((data & 0x0e) >> 1); |
| 1374 | tenkai_update_rombank( | |
| 1373 | tenkai_update_rombank(); | |
| 1375 | 1374 | } |
| 1376 | 1375 | |
| 1377 | 1376 | READ8_MEMBER(dynax_state::tenkai_p5_r) |
| r20647 | r20648 | |
| 1398 | 1397 | WRITE8_MEMBER(dynax_state::tenkai_p8_w) |
| 1399 | 1398 | { |
| 1400 | 1399 | m_rombank = ((data & 0x08) << 1) | (m_rombank & 0x0f); |
| 1401 | tenkai_update_rombank( | |
| 1400 | tenkai_update_rombank(); | |
| 1402 | 1401 | } |
| 1403 | 1402 | |
| 1404 | 1403 | READ8_MEMBER(dynax_state::tenkai_p8_r) |
| r20647 | r20648 | |
| 4975 | 4974 | { |
| 4976 | 4975 | MACHINE_START_CALL_MEMBER(dynax); |
| 4977 | 4976 | |
| 4978 | machine().save().register_postload(save_prepost_delegate(FUNC(tenkai_update_rombank), | |
| 4977 | machine().save().register_postload(save_prepost_delegate(FUNC(dynax_state::tenkai_update_rombank), this)); | |
| 4979 | 4978 | } |
| 4980 | 4979 | |
| 4981 | 4980 | WRITE_LINE_MEMBER(dynax_state::tenkai_rtc_irq) |
| r20647 | r20648 | |
| 5036 | 5035 | Mahjong Gekisha |
| 5037 | 5036 | ***************************************************************************/ |
| 5038 | 5037 | |
| 5039 | ||
| 5038 | void dynax_state::gekisha_bank_postload() | |
| 5040 | 5039 | { |
| 5041 | dynax_state *state = machine.driver_data<dynax_state>(); | |
| 5042 | ||
| 5043 | gekisha_set_rombank(machine, state->m_rombank); | |
| 5040 | gekisha_set_rombank(machine(), m_rombank); | |
| 5044 | 5041 | } |
| 5045 | 5042 | |
| 5046 | 5043 | MACHINE_START_MEMBER(dynax_state,gekisha) |
| 5047 | 5044 | { |
| 5048 | 5045 | MACHINE_START_CALL_MEMBER(dynax); |
| 5049 | 5046 | |
| 5050 | machine().save().register_postload(save_prepost_delegate(FUNC(gekisha_bank_postload), | |
| 5047 | machine().save().register_postload(save_prepost_delegate(FUNC(dynax_state::gekisha_bank_postload), this)); | |
| 5051 | 5048 | } |
| 5052 | 5049 | |
| 5053 | 5050 | MACHINE_RESET_MEMBER(dynax_state,gekisha) |
| r20647 | r20648 | |
|---|---|---|
| 504 | 504 | virtual void machine_reset(); |
| 505 | 505 | UINT32 screen_update_vegas(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); |
| 506 | 506 | TIMER_CALLBACK_MEMBER(nile_timer_callback); |
| 507 | void remap_dynamic_addresses(); | |
| 507 | 508 | }; |
| 508 | 509 | |
| 509 | 510 | |
| 510 | ||
| 511 | 511 | /************************************* |
| 512 | 512 | * |
| 513 | * Prototypes | |
| 514 | * | |
| 515 | *************************************/ | |
| 516 | ||
| 517 | ||
| 518 | static void remap_dynamic_addresses(running_machine &machine); | |
| 519 | ||
| 520 | ||
| 521 | ||
| 522 | /************************************* | |
| 523 | * | |
| 524 | 513 | * Video start and update |
| 525 | 514 | * |
| 526 | 515 | *************************************/ |
| r20647 | r20648 | |
| 576 | 565 | state_save_register_global(machine(), m_sio_led_state); |
| 577 | 566 | state_save_register_global(machine(), m_pending_analog_read); |
| 578 | 567 | state_save_register_global(machine(), m_cmos_unlocked); |
| 579 | machine().save().register_postload(save_prepost_delegate(FUNC(remap_dynamic_addresses), | |
| 568 | machine().save().register_postload(save_prepost_delegate(FUNC(vegas_state::remap_dynamic_addresses), this)); | |
| 580 | 569 | } |
| 581 | 570 | |
| 582 | 571 | |
| r20647 | r20648 | |
| 732 | 721 | { |
| 733 | 722 | case 0x04: /* address register */ |
| 734 | 723 | state->m_pci_ide_regs[offset] &= 0xfffffff0; |
| 735 | remap_dynamic_addresses( | |
| 724 | state->remap_dynamic_addresses(); | |
| 736 | 725 | break; |
| 737 | 726 | |
| 738 | 727 | case 0x05: /* address register */ |
| 739 | 728 | state->m_pci_ide_regs[offset] &= 0xfffffffc; |
| 740 | remap_dynamic_addresses( | |
| 729 | state->remap_dynamic_addresses(); | |
| 741 | 730 | break; |
| 742 | 731 | |
| 743 | 732 | case 0x08: /* address register */ |
| 744 | 733 | state->m_pci_ide_regs[offset] &= 0xfffffff0; |
| 745 | remap_dynamic_addresses( | |
| 734 | state->remap_dynamic_addresses(); | |
| 746 | 735 | break; |
| 747 | 736 | |
| 748 | 737 | case 0x14: /* interrupt pending */ |
| r20647 | r20648 | |
| 810 | 799 | state->m_pci_3dfx_regs[offset] &= 0xff000000; |
| 811 | 800 | else |
| 812 | 801 | state->m_pci_3dfx_regs[offset] &= 0xfe000000; |
| 813 | remap_dynamic_addresses( | |
| 802 | state->remap_dynamic_addresses(); | |
| 814 | 803 | break; |
| 815 | 804 | |
| 816 | 805 | case 0x05: /* address register */ |
| 817 | 806 | if (voodoo_type >= TYPE_VOODOO_BANSHEE) |
| 818 | 807 | { |
| 819 | 808 | state->m_pci_3dfx_regs[offset] &= 0xfe000000; |
| 820 | remap_dynamic_addresses( | |
| 809 | state->remap_dynamic_addresses(); | |
| 821 | 810 | } |
| 822 | 811 | break; |
| 823 | 812 | |
| r20647 | r20648 | |
| 825 | 814 | if (voodoo_type >= TYPE_VOODOO_BANSHEE) |
| 826 | 815 | { |
| 827 | 816 | state->m_pci_3dfx_regs[offset] &= 0xffffff00; |
| 828 | remap_dynamic_addresses( | |
| 817 | state->remap_dynamic_addresses(); | |
| 829 | 818 | } |
| 830 | 819 | break; |
| 831 | 820 | |
| r20647 | r20648 | |
| 833 | 822 | if (voodoo_type >= TYPE_VOODOO_BANSHEE) |
| 834 | 823 | { |
| 835 | 824 | state->m_pci_3dfx_regs[offset] &= 0xffff0000; |
| 836 | remap_dynamic_addresses( | |
| 825 | state->remap_dynamic_addresses(); | |
| 837 | 826 | } |
| 838 | 827 | break; |
| 839 | 828 | |
| r20647 | r20648 | |
| 1127 | 1116 | |
| 1128 | 1117 | case NREG_PCIINIT1+0: /* PCI master */ |
| 1129 | 1118 | if (((olddata & 0xe) == 0xa) != ((state->m_nile_regs[offset] & 0xe) == 0xa)) |
| 1130 | remap_dynamic_addresses( | |
| 1119 | state->remap_dynamic_addresses(); | |
| 1131 | 1120 | logit = 0; |
| 1132 | 1121 | break; |
| 1133 | 1122 | |
| r20647 | r20648 | |
| 1215 | 1204 | case NREG_DCS8: |
| 1216 | 1205 | case NREG_PCIW0: |
| 1217 | 1206 | case NREG_PCIW1: |
| 1218 | remap_dynamic_addresses( | |
| 1207 | state->remap_dynamic_addresses(); | |
| 1219 | 1208 | break; |
| 1220 | 1209 | } |
| 1221 | 1210 | |
| r20647 | r20648 | |
| 1552 | 1541 | } |
| 1553 | 1542 | |
| 1554 | 1543 | |
| 1555 | ||
| 1544 | void vegas_state::remap_dynamic_addresses() | |
| 1556 | 1545 | { |
| 1557 | vegas_state *state = machine.driver_data<vegas_state>(); | |
| 1558 | dynamic_address *dynamic = state->m_dynamic; | |
| 1559 | device_t *ethernet = machine.device("ethernet"); | |
| 1560 | device_t *ide = machine.device("ide"); | |
| 1561 | int voodoo_type = voodoo_get_type(state->m_voodoo); | |
| 1546 | dynamic_address *dynamic = m_dynamic; | |
| 1547 | device_t *ethernet = machine().device("ethernet"); | |
| 1548 | device_t *ide = machine().device("ide"); | |
| 1549 | int voodoo_type = voodoo_get_type(m_voodoo); | |
| 1562 | 1550 | offs_t base; |
| 1563 | 1551 | int addr; |
| 1564 | 1552 | |
| 1565 | 1553 | /* unmap everything we know about */ |
| 1566 | for (addr = 0; addr < state->m_dynamic_count; addr++) | |
| 1567 | machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_readwrite(dynamic[addr].start, dynamic[addr].end); | |
| 1554 | for (addr = 0; addr < m_dynamic_count; addr++) | |
| 1555 | machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_readwrite(dynamic[addr].start, dynamic[addr].end); | |
| 1568 | 1556 | |
| 1569 | 1557 | /* the build the list of stuff */ |
| 1570 | | |
| 1558 | m_dynamic_count = 0; | |
| 1571 | 1559 | |
| 1572 | 1560 | /* DCS2 */ |
| 1573 | base = state->m_nile_regs[NREG_DCS2] & 0x1fffff00; | |
| 1574 | if (base >= state->m_rambase.bytes()) | |
| 1561 | base = m_nile_regs[NREG_DCS2] & 0x1fffff00; | |
| 1562 | if (base >= m_rambase.bytes()) | |
| 1575 | 1563 | { |
| 1576 | add_dynamic_address(state, base + 0x0000, base + 0x0003, sio_irq_clear_r, sio_irq_clear_w); | |
| 1577 | add_dynamic_address(state, base + 0x1000, base + 0x1003, sio_irq_enable_r, sio_irq_enable_w); | |
| 1578 | add_dynamic_address(state, base + 0x2000, base + 0x2003, sio_irq_cause_r, NULL); | |
| 1579 | add_dynamic_address(state, base + 0x3000, base + 0x3003, sio_irq_status_r, NULL); | |
| 1580 | add_dynamic_address(state, base + 0x4000, base + 0x4003, sio_led_r, sio_led_w); | |
| 1581 | add_dynamic_address(state, base + 0x5000, base + 0x5007, NOP_HANDLER, NULL); | |
| 1582 | add_dynamic_address(state, base + 0x6000, base + 0x6003, NULL, cmos_unlock_w); | |
| 1583 | add_dynamic_address(state, base + 0x7000, base + 0x7003, NULL, vegas_watchdog_w); | |
| 1564 | add_dynamic_address(this, base + 0x0000, base + 0x0003, sio_irq_clear_r, sio_irq_clear_w); | |
| 1565 | add_dynamic_address(this, base + 0x1000, base + 0x1003, sio_irq_enable_r, sio_irq_enable_w); | |
| 1566 | add_dynamic_address(this, base + 0x2000, base + 0x2003, sio_irq_cause_r, NULL); | |
| 1567 | add_dynamic_address(this, base + 0x3000, base + 0x3003, sio_irq_status_r, NULL); | |
| 1568 | add_dynamic_address(this, base + 0x4000, base + 0x4003, sio_led_r, sio_led_w); | |
| 1569 | add_dynamic_address(this, base + 0x5000, base + 0x5007, NOP_HANDLER, NULL); | |
| 1570 | add_dynamic_address(this, base + 0x6000, base + 0x6003, NULL, cmos_unlock_w); | |
| 1571 | add_dynamic_address(this, base + 0x7000, base + 0x7003, NULL, vegas_watchdog_w); | |
| 1584 | 1572 | } |
| 1585 | 1573 | |
| 1586 | 1574 | /* DCS3 */ |
| 1587 | base = state->m_nile_regs[NREG_DCS3] & 0x1fffff00; | |
| 1588 | if (base >= state->m_rambase.bytes()) | |
| 1589 | add_dynamic_address(state, base + 0x0000, base + 0x0003, analog_port_r, analog_port_w); | |
| 1575 | base = m_nile_regs[NREG_DCS3] & 0x1fffff00; | |
| 1576 | if (base >= m_rambase.bytes()) | |
| 1577 | add_dynamic_address(this, base + 0x0000, base + 0x0003, analog_port_r, analog_port_w); | |
| 1590 | 1578 | |
| 1591 | 1579 | /* DCS4 */ |
| 1592 | base = state->m_nile_regs[NREG_DCS4] & 0x1fffff00; | |
| 1593 | if (base >= state->m_rambase.bytes()) | |
| 1594 | add_dynamic_address(state, base + 0x0000, base + 0x7fff, timekeeper_r, timekeeper_w); | |
| 1580 | base = m_nile_regs[NREG_DCS4] & 0x1fffff00; | |
| 1581 | if (base >= m_rambase.bytes()) | |
| 1582 | add_dynamic_address(this, base + 0x0000, base + 0x7fff, timekeeper_r, timekeeper_w); | |
| 1595 | 1583 | |
| 1596 | 1584 | /* DCS5 */ |
| 1597 | base = state->m_nile_regs[NREG_DCS5] & 0x1fffff00; | |
| 1598 | if (base >= state->m_rambase.bytes()) | |
| 1599 | add_dynamic_address(state, base + 0x0000, base + 0x0003, sio_r, sio_w); | |
| 1585 | base = m_nile_regs[NREG_DCS5] & 0x1fffff00; | |
| 1586 | if (base >= m_rambase.bytes()) | |
| 1587 | add_dynamic_address(this, base + 0x0000, base + 0x0003, sio_r, sio_w); | |
| 1600 | 1588 | |
| 1601 | 1589 | /* DCS6 */ |
| 1602 | base = state->m_nile_regs[NREG_DCS6] & 0x1fffff00; | |
| 1603 | if (base >= state->m_rambase.bytes()) | |
| 1590 | base = m_nile_regs[NREG_DCS6] & 0x1fffff00; | |
| 1591 | if (base >= m_rambase.bytes()) | |
| 1604 | 1592 | { |
| 1605 | add_dynamic_address(state, base + 0x0000, base + 0x003f, midway_ioasic_packed_r, midway_ioasic_packed_w); | |
| 1606 | add_dynamic_address(state, base + 0x1000, base + 0x1003, NULL, asic_fifo_w); | |
| 1607 | if (state->m_dcs_idma_cs != 0) | |
| 1608 | add_dynamic_address(state, base + 0x3000, base + 0x3003, NULL, dcs3_fifo_full_w); | |
| 1609 | if (state->m_dcs_idma_cs == 6) | |
| 1593 | add_dynamic_address(this, base + 0x0000, base + 0x003f, midway_ioasic_packed_r, midway_ioasic_packed_w); | |
| 1594 | add_dynamic_address(this, base + 0x1000, base + 0x1003, NULL, asic_fifo_w); | |
| 1595 | if (m_dcs_idma_cs != 0) | |
| 1596 | add_dynamic_address(this, base + 0x3000, base + 0x3003, NULL, dcs3_fifo_full_w); | |
| 1597 | if (m_dcs_idma_cs == 6) | |
| 1610 | 1598 | { |
| 1611 | add_dynamic_address(state, base + 0x5000, base + 0x5003, NULL, dsio_idma_addr_w); | |
| 1612 | add_dynamic_address(state, base + 0x7000, base + 0x7003, dsio_idma_data_r, dsio_idma_data_w); | |
| 1599 | add_dynamic_address(this, base + 0x5000, base + 0x5003, NULL, dsio_idma_addr_w); | |
| 1600 | add_dynamic_address(this, base + 0x7000, base + 0x7003, dsio_idma_data_r, dsio_idma_data_w); | |
| 1613 | 1601 | } |
| 1614 | 1602 | } |
| 1615 | 1603 | |
| 1616 | 1604 | /* DCS7 */ |
| 1617 | base = state->m_nile_regs[NREG_DCS7] & 0x1fffff00; | |
| 1618 | if (base >= state->m_rambase.bytes()) | |
| 1605 | base = m_nile_regs[NREG_DCS7] & 0x1fffff00; | |
| 1606 | if (base >= m_rambase.bytes()) | |
| 1619 | 1607 | { |
| 1620 | add_dynamic_device_address(state, ethernet, base + 0x1000, base + 0x100f, ethernet_r, ethernet_w); | |
| 1621 | if (state->m_dcs_idma_cs == 7) | |
| 1608 | add_dynamic_device_address(this, ethernet, base + 0x1000, base + 0x100f, ethernet_r, ethernet_w); | |
| 1609 | if (m_dcs_idma_cs == 7) | |
| 1622 | 1610 | { |
| 1623 | add_dynamic_address(state, base + 0x5000, base + 0x5003, NULL, dsio_idma_addr_w); | |
| 1624 | add_dynamic_address(state, base + 0x7000, base + 0x7003, dsio_idma_data_r, dsio_idma_data_w); | |
| 1611 | add_dynamic_address(this, base + 0x5000, base + 0x5003, NULL, dsio_idma_addr_w); | |
| 1612 | add_dynamic_address(this, base + 0x7000, base + 0x7003, dsio_idma_data_r, dsio_idma_data_w); | |
| 1625 | 1613 | } |
| 1626 | 1614 | } |
| 1627 | 1615 | |
| 1628 | 1616 | /* PCI config space */ |
| 1629 | if (( | |
| 1617 | if ((m_nile_regs[NREG_PCIINIT1] & 0xe) == 0xa) | |
| 1630 | 1618 | { |
| 1631 | base = state->m_nile_regs[NREG_PCIW1] & 0x1fffff00; | |
| 1632 | if (base >= state->m_rambase.bytes()) | |
| 1619 | base = m_nile_regs[NREG_PCIW1] & 0x1fffff00; | |
| 1620 | if (base >= m_rambase.bytes()) | |
| 1633 | 1621 | { |
| 1634 | add_dynamic_address(state, base + (1 << (21 + 4)) + 0x0000, base + (1 << (21 + 4)) + 0x00ff, pci_3dfx_r, pci_3dfx_w); | |
| 1635 | add_dynamic_address(state, base + (1 << (21 + 5)) + 0x0000, base + (1 << (21 + 5)) + 0x00ff, pci_ide_r, pci_ide_w); | |
| 1622 | add_dynamic_address(this, base + (1 << (21 + 4)) + 0x0000, base + (1 << (21 + 4)) + 0x00ff, pci_3dfx_r, pci_3dfx_w); | |
| 1623 | add_dynamic_address(this, base + (1 << (21 + 5)) + 0x0000, base + (1 << (21 + 5)) + 0x00ff, pci_ide_r, pci_ide_w); | |
| 1636 | 1624 | } |
| 1637 | 1625 | } |
| 1638 | 1626 | |
| r20647 | r20648 | |
| 1640 | 1628 | else |
| 1641 | 1629 | { |
| 1642 | 1630 | /* IDE controller */ |
| 1643 | base = state->m_pci_ide_regs[0x04] & 0xfffffff0; | |
| 1644 | if (base >= state->m_rambase.bytes() && base < 0x20000000) | |
| 1645 | add_dynamic_device_address(state, ide, base + 0x0000, base + 0x000f, ide_main_r, ide_main_w); | |
| 1631 | base = m_pci_ide_regs[0x04] & 0xfffffff0; | |
| 1632 | if (base >= m_rambase.bytes() && base < 0x20000000) | |
| 1633 | add_dynamic_device_address(this, ide, base + 0x0000, base + 0x000f, ide_main_r, ide_main_w); | |
| 1646 | 1634 | |
| 1647 | base = state->m_pci_ide_regs[0x05] & 0xfffffffc; | |
| 1648 | if (base >= state->m_rambase.bytes() && base < 0x20000000) | |
| 1649 | add_dynamic_device_address(state, ide, base + 0x0000, base + 0x0003, ide_alt_r, ide_alt_w); | |
| 1635 | base = m_pci_ide_regs[0x05] & 0xfffffffc; | |
| 1636 | if (base >= m_rambase.bytes() && base < 0x20000000) | |
| 1637 | add_dynamic_device_address(this, ide, base + 0x0000, base + 0x0003, ide_alt_r, ide_alt_w); | |
| 1650 | 1638 | |
| 1651 | base = state->m_pci_ide_regs[0x08] & 0xfffffff0; | |
| 1652 | if (base >= state->m_rambase.bytes() && base < 0x20000000) | |
| 1653 | add_dynamic_device_address(state, ide, base + 0x0000, base + 0x0007, ide_bus_master32_r, ide_bus_master32_w); | |
| 1639 | base = m_pci_ide_regs[0x08] & 0xfffffff0; | |
| 1640 | if (base >= m_rambase.bytes() && base < 0x20000000) | |
| 1641 | add_dynamic_device_address(this, ide, base + 0x0000, base + 0x0007, ide_bus_master32_r, ide_bus_master32_w); | |
| 1654 | 1642 | |
| 1655 | 1643 | /* 3dfx card */ |
| 1656 | base = state->m_pci_3dfx_regs[0x04] & 0xfffffff0; | |
| 1657 | if (base >= state->m_rambase.bytes() && base < 0x20000000) | |
| 1644 | base = m_pci_3dfx_regs[0x04] & 0xfffffff0; | |
| 1645 | if (base >= m_rambase.bytes() && base < 0x20000000) | |
| 1658 | 1646 | { |
| 1659 | 1647 | if (voodoo_type == TYPE_VOODOO_2) |
| 1660 | add_dynamic_device_address( | |
| 1648 | add_dynamic_device_address(this, m_voodoo, base + 0x000000, base + 0xffffff, voodoo_r, voodoo_w); | |
| 1661 | 1649 | else |
| 1662 | add_dynamic_device_address( | |
| 1650 | add_dynamic_device_address(this, m_voodoo, base + 0x000000, base + 0x1ffffff, banshee_r, banshee_w); | |
| 1663 | 1651 | } |
| 1664 | 1652 | |
| 1665 | 1653 | if (voodoo_type >= TYPE_VOODOO_BANSHEE) |
| 1666 | 1654 | { |
| 1667 | base = state->m_pci_3dfx_regs[0x05] & 0xfffffff0; | |
| 1668 | if (base >= state->m_rambase.bytes() && base < 0x20000000) | |
| 1669 | add_dynamic_device_address(state, state->m_voodoo, base + 0x0000000, base + 0x1ffffff, banshee_fb_r, banshee_fb_w); | |
| 1655 | base = m_pci_3dfx_regs[0x05] & 0xfffffff0; | |
| 1656 | if (base >= m_rambase.bytes() && base < 0x20000000) | |
| 1657 | add_dynamic_device_address(this, m_voodoo, base + 0x0000000, base + 0x1ffffff, banshee_fb_r, banshee_fb_w); | |
| 1670 | 1658 | |
| 1671 | base = state->m_pci_3dfx_regs[0x06] & 0xfffffff0; | |
| 1672 | if (base >= state->m_rambase.bytes() && base < 0x20000000) | |
| 1673 | add_dynamic_device_address(state, state->m_voodoo, base + 0x0000000, base + 0x00000ff, banshee_io_r, banshee_io_w); | |
| 1659 | base = m_pci_3dfx_regs[0x06] & 0xfffffff0; | |
| 1660 | if (base >= m_rambase.bytes() && base < 0x20000000) | |
| 1661 | add_dynamic_device_address(this, m_voodoo, base + 0x0000000, base + 0x00000ff, banshee_io_r, banshee_io_w); | |
| 1674 | 1662 | |
| 1675 | base = state->m_pci_3dfx_regs[0x0c] & 0xffff0000; | |
| 1676 | if (base >= state->m_rambase.bytes() && base < 0x20000000) | |
| 1677 | add_dynamic_device_address(state, state->m_voodoo, base + 0x0000000, base + 0x000ffff, banshee_rom_r, NULL); | |
| 1663 | base = m_pci_3dfx_regs[0x0c] & 0xffff0000; | |
| 1664 | if (base >= m_rambase.bytes() && base < 0x20000000) | |
| 1665 | add_dynamic_device_address(this, m_voodoo, base + 0x0000000, base + 0x000ffff, banshee_rom_r, NULL); | |
| 1678 | 1666 | } |
| 1679 | 1667 | } |
| 1680 | 1668 | |
| 1681 | 1669 | /* now remap everything */ |
| 1682 | 1670 | if (LOG_DYNAMIC) logerror("remap_dynamic_addresses:\n"); |
| 1683 | address_space &space = machine.device<cpu_device>("maincpu")->space(AS_PROGRAM); | |
| 1684 | for (addr = 0; addr < state->m_dynamic_count; addr++) | |
| 1671 | address_space &space = machine().device<cpu_device>("maincpu")->space(AS_PROGRAM); | |
| 1672 | for (addr = 0; addr < m_dynamic_count; addr++) | |
| 1685 | 1673 | { |
| 1686 | 1674 | if (LOG_DYNAMIC) logerror(" installing: %08X-%08X %s,%s\n", dynamic[addr].start, dynamic[addr].end, dynamic[addr].rdname, dynamic[addr].wrname); |
| 1687 | 1675 | |
| r20647 | r20648 | |
| 1698 | 1686 | |
| 1699 | 1687 | if (LOG_DYNAMIC) |
| 1700 | 1688 | { |
| 1701 | ++state->m_count; | |
| 1702 | popmessage("Remaps = %d", state->m_count); | |
| 1689 | ++m_count; | |
| 1690 | popmessage("Remaps = %d", m_count); | |
| 1703 | 1691 | } |
| 1704 | 1692 | } |
| 1705 | 1693 |
| r20647 | r20648 | |
|---|---|---|
| 607 | 607 | } |
| 608 | 608 | |
| 609 | 609 | |
| 610 | ||
| 610 | void taitof2_state::reset_driveout_sound_region() | |
| 611 | 611 | { |
| 612 | taitof2_state *state = machine.driver_data<taitof2_state>(); | |
| 613 | state->m_oki->set_bank_base(state->m_oki_bank * 0x40000); | |
| 612 | m_oki->set_bank_base(m_oki_bank * 0x40000); | |
| 614 | 613 | } |
| 615 | 614 | |
| 616 | 615 | WRITE8_MEMBER(taitof2_state::oki_bank_w) |
| r20647 | r20648 | |
| 620 | 619 | m_oki_bank = (data & 3); |
| 621 | 620 | } |
| 622 | 621 | |
| 623 | reset_driveout_sound_region( | |
| 622 | reset_driveout_sound_region(); | |
| 624 | 623 | } |
| 625 | 624 | |
| 626 | 625 | WRITE16_MEMBER(taitof2_state::driveout_sound_command_w) |
| r20647 | r20648 | |
| 5373 | 5372 | save_item(NAME(m_driveout_sound_latch)); |
| 5374 | 5373 | save_item(NAME(m_oki_bank)); |
| 5375 | 5374 | save_item(NAME(m_nibble)); |
| 5376 | machine().save().register_postload(save_prepost_delegate(FUNC(reset_driveout_sound_region), | |
| 5375 | machine().save().register_postload(save_prepost_delegate(FUNC(taitof2_state::reset_driveout_sound_region), this)); | |
| 5377 | 5376 | } |
| 5378 | 5377 | |
| 5379 | 5378 |
| r20647 | r20648 | |
|---|---|---|
| 195 | 195 | INTERRUPT_GEN_MEMBER(crystal_interrupt); |
| 196 | 196 | TIMER_CALLBACK_MEMBER(Timercb); |
| 197 | 197 | IRQ_CALLBACK_MEMBER(icallback); |
| 198 | void crystal_banksw_postload(); | |
| 198 | 199 | }; |
| 199 | 200 | |
| 200 | 201 | static void IntReq( running_machine &machine, int num ) |
| r20647 | r20648 | |
| 564 | 565 | #endif |
| 565 | 566 | } |
| 566 | 567 | |
| 567 | ||
| 568 | void crystal_state::crystal_banksw_postload() | |
| 568 | 569 | { |
| 569 | crystal_state *state = machine.driver_data<crystal_state>(); | |
| 570 | ||
| 571 | if (state->m_Bank <= 2) | |
| 572 | state->membank("bank1")->set_base(state->memregion("user1")->base() + state->m_Bank * 0x1000000); | |
| 570 | if (m_Bank <= 2) | |
| 571 | membank("bank1")->set_base(memregion("user1")->base() + m_Bank * 0x1000000); | |
| 573 | 572 | else |
| 574 | | |
| 573 | membank("bank1")->set_base(memregion("user2")->base()); | |
| 575 | 574 | } |
| 576 | 575 | |
| 577 | 576 | void crystal_state::machine_start() |
| r20647 | r20648 | |
| 600 | 599 | save_item(NAME(m_PIO)); |
| 601 | 600 | save_item(NAME(m_DMActrl)); |
| 602 | 601 | save_item(NAME(m_OldPort4)); |
| 603 | machine().save().register_postload(save_prepost_delegate(FUNC(crystal_banksw_postload), | |
| 602 | machine().save().register_postload(save_prepost_delegate(FUNC(crystal_state::crystal_banksw_postload), this)); | |
| 604 | 603 | } |
| 605 | 604 | |
| 606 | 605 | void crystal_state::machine_reset() |
| r20647 | r20648 | |
|---|---|---|
| 440 | 440 | 0, 0 |
| 441 | 441 | }; |
| 442 | 442 | |
| 443 | ||
| 443 | void xexex_state::xexex_postload() | |
| 444 | 444 | { |
| 445 | parse_control2(machine); | |
| 446 | reset_sound_region(machine); | |
| 445 | parse_control2(machine()); | |
| 446 | reset_sound_region(machine()); | |
| 447 | 447 | } |
| 448 | 448 | |
| 449 | 449 | void xexex_state::machine_start() |
| r20647 | r20648 | |
| 477 | 477 | |
| 478 | 478 | save_item(NAME(m_cur_control2)); |
| 479 | 479 | save_item(NAME(m_cur_sound_region)); |
| 480 | machine().save().register_postload(save_prepost_delegate(FUNC(xexex_postload), | |
| 480 | machine().save().register_postload(save_prepost_delegate(FUNC(xexex_state::xexex_postload), this)); | |
| 481 | 481 | |
| 482 | 482 | m_dmadelay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(xexex_state::dmaend_callback),this)); |
| 483 | 483 | } |
| r20647 | r20648 | |
|---|---|---|
| 94 | 94 | * |
| 95 | 95 | *************************************/ |
| 96 | 96 | |
| 97 | ||
| 97 | void atetris_state::reset_bank() | |
| 98 | 98 | { |
| 99 | atetris_state *state = machine.driver_data<atetris_state>(); | |
| 100 | ||
| 101 | memcpy(state->m_slapstic_base, &state->m_slapstic_source[state->m_current_bank * 0x4000], 0x4000); | |
| 99 | memcpy(m_slapstic_base, &m_slapstic_source[m_current_bank * 0x4000], 0x4000); | |
| 102 | 100 | } |
| 103 | 101 | |
| 104 | 102 | |
| r20647 | r20648 | |
| 110 | 108 | /* Set up save state */ |
| 111 | 109 | save_item(NAME(m_current_bank)); |
| 112 | 110 | save_item(NAME(m_nvram_write_enable)); |
| 113 | machine().save().register_postload(save_prepost_delegate(FUNC(reset_bank), | |
| 111 | machine().save().register_postload(save_prepost_delegate(FUNC(atetris_state::reset_bank), this)); | |
| 114 | 112 | } |
| 115 | 113 | |
| 116 | 114 | |
| r20647 | r20648 | |
| 119 | 117 | /* reset the slapstic */ |
| 120 | 118 | slapstic_reset(); |
| 121 | 119 | m_current_bank = slapstic_bank() & 1; |
| 122 | reset_bank( | |
| 120 | reset_bank(); | |
| 123 | 121 | |
| 124 | 122 | /* start interrupts going (32V clocked by 16V) */ |
| 125 | 123 | m_interrupt_timer->adjust(machine().primary_screen->time_until_pos(48), 48); |
| r20647 | r20648 | |
|---|---|---|
| 971 | 971 | } |
| 972 | 972 | |
| 973 | 973 | |
| 974 | ||
| 974 | void _8080bw_state::schaser_reinit_555_time_remain() | |
| 975 | 975 | { |
| 976 | address_space &space = state->m_maincpu->space(AS_PROGRAM); | |
| 977 | state->m_schaser_effect_555_time_remain = attotime::from_double(state->m_schaser_effect_555_time_remain_savable); | |
| 978 | state->schaser_sh_port_2_w(space, 0, state->m_port_2_last_extra); | |
| 976 | address_space &space = m_maincpu->space(AS_PROGRAM); | |
| 977 | m_schaser_effect_555_time_remain = attotime::from_double(m_schaser_effect_555_time_remain_savable); | |
| 978 | schaser_sh_port_2_w(space, 0, m_port_2_last_extra); | |
| 979 | 979 | } |
| 980 | 980 | |
| 981 | 981 | |
| r20647 | r20648 | |
| 985 | 985 | save_item(NAME(m_schaser_effect_555_is_low)); |
| 986 | 986 | save_item(NAME(m_schaser_effect_555_time_remain_savable)); |
| 987 | 987 | save_item(NAME(m_port_2_last_extra)); |
| 988 | machine().save().register_postload(save_prepost_delegate(FUNC(schaser_reinit_555_time_remain), this)); | |
| 988 | machine().save().register_postload(save_prepost_delegate(FUNC(_8080bw_state::schaser_reinit_555_time_remain), this)); | |
| 989 | 989 | } |
| 990 | 990 | |
| 991 | 991 |
| r20647 | r20648 | |
|---|---|---|
| 66 | 66 | device->machine().root_device().membank("bank1")->set_entry(lines & 0x3f); |
| 67 | 67 | } |
| 68 | 68 | |
| 69 | ||
| 69 | void simpsons_state::simpsons_postload() | |
| 70 | 70 | { |
| 71 | simpsons_state *state = machine.driver_data<simpsons_state>(); | |
| 72 | ||
| 73 | simpsons_video_banking(machine, state->m_video_bank); | |
| 71 | simpsons_video_banking(machine(), m_video_bank); | |
| 74 | 72 | } |
| 75 | 73 | |
| 76 | 74 | void simpsons_state::machine_start() |
| r20647 | r20648 | |
| 93 | 91 | save_item(NAME(m_layerpri)); |
| 94 | 92 | save_pointer(NAME(m_xtraram), 0x1000); |
| 95 | 93 | save_pointer(NAME(m_spriteram), 0x1000 / 2); |
| 96 | machine().save().register_postload(save_prepost_delegate(FUNC(simpsons_postload), | |
| 94 | machine().save().register_postload(save_prepost_delegate(FUNC(simpsons_state::simpsons_postload), this)); | |
| 97 | 95 | } |
| 98 | 96 | |
| 99 | 97 | void simpsons_state::machine_reset() |
| r20647 | r20648 | |
|---|---|---|
| 148 | 148 | } |
| 149 | 149 | } |
| 150 | 150 | |
| 151 | ||
| 151 | void toaplan1_state::demonwld_restore_dsp() | |
| 152 | 152 | { |
| 153 | toaplan1_state *state = machine.driver_data<toaplan1_state>(); | |
| 154 | demonwld_dsp(machine, state->m_dsp_on); | |
| 153 | demonwld_dsp(machine(), m_dsp_on); | |
| 155 | 154 | } |
| 156 | 155 | |
| 157 | 156 | WRITE16_MEMBER(toaplan1_state::demonwld_dsp_ctrl_w) |
| r20647 | r20648 | |
| 413 | 412 | state->save_item(NAME(state->m_main_ram_seg)); |
| 414 | 413 | state->save_item(NAME(state->m_dsp_BIO)); |
| 415 | 414 | state->save_item(NAME(state->m_dsp_execute)); |
| 416 | machine.save().register_postload(save_prepost_delegate(FUNC(demonwld_restore_dsp), | |
| 415 | machine.save().register_postload(save_prepost_delegate(FUNC(toaplan1_state::demonwld_restore_dsp), state)); | |
| 417 | 416 | } |
| 418 | 417 | |
| 419 | 418 | MACHINE_RESET_MEMBER(toaplan1_state,vimana) |
| r20647 | r20648 | |
|---|---|---|
| 433 | 433 | * |
| 434 | 434 | *************************************/ |
| 435 | 435 | |
| 436 | ||
| 436 | void williams_state::williams2_postload() | |
| 437 | 437 | { |
| 438 | williams_state *state = machine.driver_data<williams_state>(); | |
| 439 | address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM); | |
| 440 | state->williams2_bank_select_w(space, 0, state->m_vram_bank); | |
| 438 | address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM); | |
| 439 | williams2_bank_select_w(space, 0, m_vram_bank); | |
| 441 | 440 | } |
| 442 | 441 | |
| 443 | 442 | |
| r20647 | r20648 | |
| 449 | 448 | |
| 450 | 449 | /* register for save states */ |
| 451 | 450 | state_save_register_global(machine(), m_vram_bank); |
| 452 | machine().save().register_postload(save_prepost_delegate(FUNC(williams2_postload), | |
| 451 | machine().save().register_postload(save_prepost_delegate(FUNC(williams_state::williams2_postload), this)); | |
| 453 | 452 | } |
| 454 | 453 | |
| 455 | 454 | |
| r20647 | r20648 | |
| 734 | 733 | * |
| 735 | 734 | *************************************/ |
| 736 | 735 | |
| 737 | ||
| 736 | void williams_state::defender_postload() | |
| 738 | 737 | { |
| 739 | williams_state *state = machine.driver_data<williams_state>(); | |
| 740 | address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM); | |
| 741 | state->defender_bank_select_w(space, 0, state->m_vram_bank); | |
| 738 | address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM); | |
| 739 | defender_bank_select_w(space, 0, m_vram_bank); | |
| 742 | 740 | } |
| 743 | 741 | |
| 744 | 742 | |
| r20647 | r20648 | |
| 749 | 747 | /* configure the banking and make sure it is reset to 0 */ |
| 750 | 748 | machine().root_device().membank("bank1")->configure_entries(0, 9, &machine().root_device().memregion("maincpu")->base()[0x10000], 0x1000); |
| 751 | 749 | |
| 752 | machine().save().register_postload(save_prepost_delegate(FUNC(defender_postload), | |
| 750 | machine().save().register_postload(save_prepost_delegate(FUNC(williams_state::defender_postload), this)); | |
| 753 | 751 | } |
| 754 | 752 | |
| 755 | 753 |
| r20647 | r20648 | |
|---|---|---|
| 666 | 666 | m_mcu_type = -1; |
| 667 | 667 | } |
| 668 | 668 | |
| 669 | ||
| 669 | void tnzs_state::tnzs_postload() | |
| 670 | 670 | { |
| 671 | tnzs_state *state = machine.driver_data<tnzs_state>(); | |
| 672 | state->membank("subbank")->set_entry(state->m_bank2); | |
| 671 | membank("subbank")->set_entry(m_bank2); | |
| 673 | 672 | } |
| 674 | 673 | |
| 675 | 674 | |
| r20647 | r20648 | |
| 693 | 692 | save_item(NAME(m_bank1)); |
| 694 | 693 | save_item(NAME(m_bank2)); |
| 695 | 694 | |
| 696 | machine().save().register_postload(save_prepost_delegate(FUNC(tnzs_postload), | |
| 695 | machine().save().register_postload(save_prepost_delegate(FUNC(tnzs_state::tnzs_postload), this)); | |
| 697 | 696 | } |
| 698 | 697 | |
| 699 | 698 | MACHINE_START_MEMBER(tnzs_state,tnzs) |
| r20647 | r20648 | |
|---|---|---|
| 191 | 191 | } |
| 192 | 192 | } |
| 193 | 193 | |
| 194 | ||
| 194 | void twincobr_state::twincobr_restore_dsp() | |
| 195 | 195 | { |
| 196 | twincobr_state *state = machine.driver_data<twincobr_state>(); | |
| 197 | twincobr_dsp(machine, state->m_dsp_on); | |
| 196 | twincobr_dsp(machine(), m_dsp_on); | |
| 198 | 197 | } |
| 199 | 198 | |
| 200 | 199 | |
| r20647 | r20648 | |
| 336 | 335 | state_save_register_global(machine, state->m_fsharkbt_8741); |
| 337 | 336 | state_save_register_global(machine, state->m_wardner_membank); |
| 338 | 337 | |
| 339 | machine.save().register_postload(save_prepost_delegate(FUNC(twincobr_restore_dsp), | |
| 338 | machine.save().register_postload(save_prepost_delegate(FUNC(twincobr_state::twincobr_restore_dsp), state)); | |
| 340 | 339 | } |
| Previous | 199869 Revisions | Next |