trunk/src/mame/video/ninjakd2.c
| r18284 | r18285 | |
| 1 | 1 | /****************************************************************************** |
| 2 | 2 | |
| 3 | 3 | UPL "sprite framebuffer" hardware |
| 4 | |
| 5 | Functions to emulate the video hardware |
| 4 | 6 | |
| 5 | 7 | ******************************************************************************/ |
| 6 | 8 | |
| r18284 | r18285 | |
| 108 | 110 | * |
| 109 | 111 | *************************************/ |
| 110 | 112 | |
| 111 | | static void videoram_alloc(running_machine& machine, int const size) |
| 113 | void ninjakd2_state::video_init_common(UINT32 vram_alloc_size) |
| 112 | 114 | { |
| 113 | | ninjakd2_state *state = machine.driver_data<ninjakd2_state>(); |
| 114 | | if (size) |
| 115 | // create video ram |
| 116 | if (vram_alloc_size) |
| 115 | 117 | { |
| 116 | | /* create video ram */ |
| 117 | | state->m_robokid_bg0_videoram = auto_alloc_array_clear(machine, UINT8, size); |
| 118 | | state->m_robokid_bg1_videoram = auto_alloc_array_clear(machine, UINT8, size); |
| 119 | | state->m_robokid_bg2_videoram = auto_alloc_array_clear(machine, UINT8, size); |
| 118 | m_robokid_bg0_videoram = auto_alloc_array_clear(machine(), UINT8, vram_alloc_size); |
| 119 | m_robokid_bg1_videoram = auto_alloc_array_clear(machine(), UINT8, vram_alloc_size); |
| 120 | m_robokid_bg2_videoram = auto_alloc_array_clear(machine(), UINT8, vram_alloc_size); |
| 121 | |
| 122 | save_pointer(NAME(m_robokid_bg0_videoram), vram_alloc_size); |
| 123 | save_pointer(NAME(m_robokid_bg1_videoram), vram_alloc_size); |
| 124 | save_pointer(NAME(m_robokid_bg2_videoram), vram_alloc_size); |
| 120 | 125 | } |
| 121 | 126 | |
| 122 | | machine.primary_screen->register_screen_bitmap(state->m_sprites_bitmap); |
| 127 | m_fg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); |
| 128 | m_fg_tilemap->set_transparent_pen(0xf); |
| 129 | |
| 130 | machine().primary_screen->register_screen_bitmap(m_sprites_bitmap); |
| 131 | |
| 132 | m_sprites_updated = 0; |
| 133 | m_robokid_sprites = 0; |
| 134 | m_vram_bank_mask = 0; |
| 135 | |
| 136 | // register for save states |
| 137 | save_item(NAME(m_sprites_updated)); |
| 138 | save_item(NAME(m_next_sprite_overdraw_enabled)); |
| 139 | save_item(NAME(m_robokid_bg0_bank)); |
| 140 | save_item(NAME(m_robokid_bg1_bank)); |
| 141 | save_item(NAME(m_robokid_bg2_bank)); |
| 123 | 142 | } |
| 124 | 143 | |
| 125 | 144 | static int stencil_ninjakd2( UINT16 pal ); |
| r18284 | r18285 | |
| 130 | 149 | |
| 131 | 150 | void ninjakd2_state::video_start() |
| 132 | 151 | { |
| 133 | | videoram_alloc(machine(), 0); |
| 152 | video_init_common(0); |
| 134 | 153 | |
| 135 | | m_fg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); |
| 136 | | m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::ninjakd2_get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); |
| 154 | m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::ninjakd2_get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); |
| 137 | 155 | |
| 138 | | m_fg_tilemap->set_transparent_pen(0xf); |
| 139 | | |
| 140 | | m_robokid_sprites = 0; |
| 141 | 156 | m_stencil_compare_function = stencil_ninjakd2; |
| 142 | 157 | } |
| 143 | 158 | |
| 144 | 159 | VIDEO_START_MEMBER(ninjakd2_state,mnight) |
| 145 | 160 | { |
| 146 | | videoram_alloc(machine(), 0); |
| 161 | video_init_common(0); |
| 147 | 162 | |
| 148 | | m_fg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); |
| 149 | | m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::mnight_get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); |
| 163 | m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::mnight_get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); |
| 150 | 164 | |
| 151 | | m_fg_tilemap->set_transparent_pen(0xf); |
| 152 | | |
| 153 | | m_robokid_sprites = 0; |
| 154 | 165 | m_stencil_compare_function = stencil_mnight; |
| 155 | 166 | } |
| 156 | 167 | |
| 157 | 168 | VIDEO_START_MEMBER(ninjakd2_state,arkarea) |
| 158 | 169 | { |
| 159 | | videoram_alloc(machine(), 0); |
| 170 | video_init_common(0); |
| 160 | 171 | |
| 161 | | m_fg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); |
| 162 | | m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::mnight_get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); |
| 172 | m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::mnight_get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); |
| 163 | 173 | |
| 164 | | m_fg_tilemap->set_transparent_pen(0xf); |
| 165 | | |
| 166 | | m_robokid_sprites = 0; |
| 167 | 174 | m_stencil_compare_function = stencil_arkarea; |
| 168 | 175 | } |
| 169 | 176 | |
| 170 | 177 | VIDEO_START_MEMBER(ninjakd2_state,robokid) |
| 171 | 178 | { |
| 179 | video_init_common(0x0800); |
| 172 | 180 | m_vram_bank_mask = 1; |
| 181 | m_robokid_sprites = 1; |
| 173 | 182 | |
| 174 | | videoram_alloc(machine(), 0x0800); |
| 183 | m_bg0_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::robokid_get_bg0_tile_info),this), tilemap_mapper_delegate(FUNC(ninjakd2_state::robokid_bg_scan),this), 16, 16, 32, 32); |
| 184 | m_bg1_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::robokid_get_bg1_tile_info),this), tilemap_mapper_delegate(FUNC(ninjakd2_state::robokid_bg_scan),this), 16, 16, 32, 32); |
| 185 | m_bg2_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::robokid_get_bg2_tile_info),this), tilemap_mapper_delegate(FUNC(ninjakd2_state::robokid_bg_scan),this), 16, 16, 32, 32); |
| 175 | 186 | |
| 176 | | m_fg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); |
| 177 | | m_bg0_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::robokid_get_bg0_tile_info),this), tilemap_mapper_delegate(FUNC(ninjakd2_state::robokid_bg_scan),this), 16, 16, 32, 32); |
| 178 | | m_bg1_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::robokid_get_bg1_tile_info),this), tilemap_mapper_delegate(FUNC(ninjakd2_state::robokid_bg_scan),this), 16, 16, 32, 32); |
| 179 | | m_bg2_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::robokid_get_bg2_tile_info),this), tilemap_mapper_delegate(FUNC(ninjakd2_state::robokid_bg_scan),this), 16, 16, 32, 32); |
| 180 | | |
| 181 | | m_fg_tilemap->set_transparent_pen(0xf); |
| 182 | 187 | m_bg1_tilemap->set_transparent_pen(0xf); |
| 183 | 188 | m_bg2_tilemap->set_transparent_pen(0xf); |
| 184 | 189 | |
| 185 | | m_robokid_sprites = 1; |
| 186 | 190 | m_stencil_compare_function = stencil_robokid; |
| 187 | 191 | } |
| 188 | 192 | |
| 189 | 193 | VIDEO_START_MEMBER(ninjakd2_state,omegaf) |
| 190 | 194 | { |
| 195 | video_init_common(0x2000); |
| 191 | 196 | m_vram_bank_mask = 7; |
| 197 | m_robokid_sprites = 1; |
| 192 | 198 | |
| 193 | | videoram_alloc(machine(), 0x2000); |
| 199 | m_bg0_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::robokid_get_bg0_tile_info),this), tilemap_mapper_delegate(FUNC(ninjakd2_state::omegaf_bg_scan),this), 16, 16, 128, 32); |
| 200 | m_bg1_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::robokid_get_bg1_tile_info),this), tilemap_mapper_delegate(FUNC(ninjakd2_state::omegaf_bg_scan),this), 16, 16, 128, 32); |
| 201 | m_bg2_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::robokid_get_bg2_tile_info),this), tilemap_mapper_delegate(FUNC(ninjakd2_state::omegaf_bg_scan),this), 16, 16, 128, 32); |
| 194 | 202 | |
| 195 | | m_fg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); |
| 196 | | m_bg0_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::robokid_get_bg0_tile_info),this), tilemap_mapper_delegate(FUNC(ninjakd2_state::omegaf_bg_scan),this), 16, 16, 128, 32); |
| 197 | | m_bg1_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::robokid_get_bg1_tile_info),this), tilemap_mapper_delegate(FUNC(ninjakd2_state::omegaf_bg_scan),this), 16, 16, 128, 32); |
| 198 | | m_bg2_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ninjakd2_state::robokid_get_bg2_tile_info),this), tilemap_mapper_delegate(FUNC(ninjakd2_state::omegaf_bg_scan),this), 16, 16, 128, 32); |
| 199 | | |
| 200 | | m_fg_tilemap->set_transparent_pen(0xf); |
| 201 | 203 | m_bg0_tilemap->set_transparent_pen(0xf); |
| 202 | 204 | m_bg1_tilemap->set_transparent_pen(0xf); |
| 203 | 205 | m_bg2_tilemap->set_transparent_pen(0xf); |
| 204 | 206 | |
| 205 | | m_robokid_sprites = 1; |
| 206 | 207 | m_stencil_compare_function = stencil_omegaf; |
| 207 | 208 | } |
| 208 | 209 | |
| r18284 | r18285 | |
| 227 | 228 | } |
| 228 | 229 | |
| 229 | 230 | |
| 230 | | |
| 231 | 231 | WRITE8_MEMBER(ninjakd2_state::robokid_bg0_bank_w) |
| 232 | 232 | { |
| 233 | 233 | m_robokid_bg0_bank = data & m_vram_bank_mask; |
| r18284 | r18285 | |
| 283 | 283 | } |
| 284 | 284 | |
| 285 | 285 | |
| 286 | | |
| 287 | 286 | static void bg_ctrl(int offset, int data, tilemap_t* tilemap) |
| 288 | 287 | { |
| 289 | 288 | int scrollx = tilemap->scrollx(0); |
| r18284 | r18285 | |
| 346 | 345 | UINT8* sprptr = &state->m_spriteram[11]; |
| 347 | 346 | int sprites_drawn = 0; |
| 348 | 347 | |
| 349 | | // the sprite generator draws exactly 96 16x16 sprites per frame. When big |
| 350 | | // (32x32) sprites are drawn, this counts for 4 sprites drawn, so the sprite |
| 351 | | // list is reduced accordingly (i.e. three slots at the end of the list will |
| 352 | | // be ignored). Note that a disabled sprite, even if it is not drawn, still |
| 353 | | // counts as one sprite drawn. |
| 354 | | // This is proven by Mutant Night, which doesn't work correctly (leaves shots |
| 355 | | // on screen) if we don't take big sprites into account. |
| 348 | /* The sprite generator draws exactly 96 16x16 sprites per frame. When big |
| 349 | (32x32) sprites are drawn, this counts for 4 sprites drawn, so the sprite |
| 350 | list is reduced accordingly (i.e. three slots at the end of the list will |
| 351 | be ignored). Note that a disabled sprite, even if it is not drawn, still |
| 352 | counts as one sprite drawn. |
| 353 | This is proven by Mutant Night, which doesn't work correctly (leaves shots |
| 354 | on screen) if we don't take big sprites into account. |
| 355 | */ |
| 356 | 356 | |
| 357 | 357 | for (;;) |
| 358 | 358 | { |
| r18284 | r18285 | |
| 444 | 444 | for (int x = 0; x < state->m_sprites_bitmap.width(); ++x) |
| 445 | 445 | { |
| 446 | 446 | UINT16* const ptr = &state->m_sprites_bitmap.pix16(y, x); |
| 447 | | |
| 448 | 447 | if ( (*state->m_stencil_compare_function)(*ptr) ) *ptr = 0xf; |
| 449 | 448 | } |
| 450 | 449 | } |
trunk/src/mame/drivers/ninjakd2.c
| r18284 | r18285 | |
| 177 | 177 | const int length = state->memregion("pcm")->bytes(); |
| 178 | 178 | INT16* sampledata = auto_alloc_array(machine, INT16, length); |
| 179 | 179 | |
| 180 | | int i; |
| 181 | | |
| 182 | 180 | // convert unsigned 8-bit PCM to signed 16-bit |
| 183 | | for (i = 0; i < length; ++i) |
| 181 | for (int i = 0; i < length; ++i) |
| 184 | 182 | sampledata[i] = rom[i] << 7; |
| 185 | 183 | |
| 186 | 184 | state->m_sampledata = sampledata; |
| r18284 | r18285 | |
| 195 | 193 | if (rom) |
| 196 | 194 | { |
| 197 | 195 | const int length = memregion("pcm")->bytes(); |
| 198 | | |
| 199 | 196 | const int start = data << 8; |
| 200 | 197 | |
| 201 | | int end; |
| 202 | | |
| 203 | 198 | // find end of sample |
| 204 | | end = start; |
| 199 | int end = start; |
| 205 | 200 | while (end < length && rom[end] != 0x00) |
| 206 | 201 | ++end; |
| 207 | 202 | |
| r18284 | r18285 | |
| 220 | 215 | * |
| 221 | 216 | *************************************/ |
| 222 | 217 | |
| 218 | void ninjakd2_state::omegaf_io_protection_start() |
| 219 | { |
| 220 | // register for save states |
| 221 | save_item(NAME(m_omegaf_io_protection)); |
| 222 | save_item(NAME(m_omegaf_io_protection_input)); |
| 223 | save_item(NAME(m_omegaf_io_protection_tic)); |
| 224 | } |
| 225 | |
| 223 | 226 | void ninjakd2_state::omegaf_io_protection_reset() |
| 224 | 227 | { |
| 225 | 228 | // make sure protection starts in a known state |
| r18284 | r18285 | |
| 296 | 299 | { |
| 297 | 300 | case 0: result = ioport("DIPSW1")->read(); break; |
| 298 | 301 | case 1: result = ioport("DIPSW2")->read(); break; |
| 299 | | case 2: result = 0x02; break; |
| 302 | case 2: result = 0x02; break; |
| 300 | 303 | } |
| 301 | 304 | break; |
| 302 | 305 | |
| r18284 | r18285 | |
| 305 | 308 | { |
| 306 | 309 | case 0: result = ioport("PAD1")->read(); break; |
| 307 | 310 | case 1: result = ioport("PAD2")->read(); break; |
| 308 | | case 2: result = 0x01; break; |
| 311 | case 2: result = 0x01; break; |
| 309 | 312 | } |
| 310 | 313 | break; |
| 311 | 314 | } |
| r18284 | r18285 | |
| 362 | 365 | AM_RANGE(0xc003, 0xc003) AM_READ_PORT("DIPSW1") |
| 363 | 366 | AM_RANGE(0xc004, 0xc004) AM_READ_PORT("DIPSW2") |
| 364 | 367 | AM_RANGE(0xc200, 0xc200) AM_WRITE(soundlatch_byte_w) |
| 365 | | AM_RANGE(0xc201, 0xc201) AM_WRITE(ninjakd2_soundreset_w) // sound reset + flip screen |
| 368 | AM_RANGE(0xc201, 0xc201) AM_WRITE(ninjakd2_soundreset_w) |
| 366 | 369 | AM_RANGE(0xc202, 0xc202) AM_WRITE(ninjakd2_bankselect_w) |
| 367 | 370 | AM_RANGE(0xc203, 0xc203) AM_WRITE(ninjakd2_sprite_overdraw_w) |
| 368 | | AM_RANGE(0xc208, 0xc20c) AM_WRITE(ninjakd2_bg_ctrl_w) // scroll + enable |
| 371 | AM_RANGE(0xc208, 0xc20c) AM_WRITE(ninjakd2_bg_ctrl_w) |
| 369 | 372 | AM_RANGE(0xc800, 0xcdff) AM_RAM_WRITE(paletteram_RRRRGGGGBBBBxxxx_byte_be_w) AM_SHARE("paletteram") |
| 370 | 373 | AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(ninjakd2_fgvideoram_w) AM_SHARE("fg_videoram") |
| 371 | 374 | AM_RANGE(0xd800, 0xdfff) AM_RAM_WRITE(ninjakd2_bgvideoram_w) AM_SHARE("bg_videoram") |
| r18284 | r18285 | |
| 391 | 394 | AM_RANGE(0xfa01, 0xfa01) AM_WRITE(ninjakd2_soundreset_w) |
| 392 | 395 | AM_RANGE(0xfa02, 0xfa02) AM_WRITE(ninjakd2_bankselect_w) |
| 393 | 396 | AM_RANGE(0xfa03, 0xfa03) AM_WRITE(ninjakd2_sprite_overdraw_w) |
| 394 | | AM_RANGE(0xfa08, 0xfa0c) AM_WRITE(ninjakd2_bg_ctrl_w) // scroll + enable |
| 397 | AM_RANGE(0xfa08, 0xfa0c) AM_WRITE(ninjakd2_bg_ctrl_w) |
| 395 | 398 | ADDRESS_MAP_END |
| 396 | 399 | |
| 397 | 400 | |
| r18284 | r18285 | |
| 403 | 406 | AM_RANGE(0xd000, 0xd3ff) AM_READWRITE(robokid_bg2_videoram_r, robokid_bg2_videoram_w) // banked |
| 404 | 407 | AM_RANGE(0xd400, 0xd7ff) AM_READWRITE(robokid_bg1_videoram_r, robokid_bg1_videoram_w) // banked |
| 405 | 408 | AM_RANGE(0xd800, 0xdbff) AM_READWRITE(robokid_bg0_videoram_r, robokid_bg0_videoram_w) // banked |
| 406 | | AM_RANGE(0xdc00, 0xdc00) AM_READ_PORT("KEYCOIN") |
| 407 | | AM_RANGE(0xdc01, 0xdc01) AM_READ_PORT("PAD1") |
| 408 | | AM_RANGE(0xdc02, 0xdc02) AM_READ_PORT("PAD2") |
| 409 | | AM_RANGE(0xdc03, 0xdc03) AM_READ_PORT("DIPSW1") |
| 409 | AM_RANGE(0xdc00, 0xdc00) AM_READ_PORT("KEYCOIN") AM_WRITE(soundlatch_byte_w) |
| 410 | AM_RANGE(0xdc01, 0xdc01) AM_READ_PORT("PAD1") AM_WRITE(ninjakd2_soundreset_w) |
| 411 | AM_RANGE(0xdc02, 0xdc02) AM_READ_PORT("PAD2") AM_WRITE(ninjakd2_bankselect_w) |
| 412 | AM_RANGE(0xdc03, 0xdc03) AM_READ_PORT("DIPSW1") AM_WRITE(ninjakd2_sprite_overdraw_w) |
| 410 | 413 | AM_RANGE(0xdc04, 0xdc04) AM_READ_PORT("DIPSW2") |
| 411 | | AM_RANGE(0xdc00, 0xdc00) AM_WRITE(soundlatch_byte_w) |
| 412 | | AM_RANGE(0xdc01, 0xdc01) AM_WRITE(ninjakd2_soundreset_w) // sound reset + flip screen |
| 413 | | AM_RANGE(0xdc02, 0xdc02) AM_WRITE(ninjakd2_bankselect_w) |
| 414 | | AM_RANGE(0xdc03, 0xdc03) AM_WRITE(ninjakd2_sprite_overdraw_w) |
| 415 | | AM_RANGE(0xdd00, 0xdd04) AM_WRITE(robokid_bg0_ctrl_w) // scroll + enable |
| 414 | AM_RANGE(0xdd00, 0xdd04) AM_WRITE(robokid_bg0_ctrl_w) |
| 416 | 415 | AM_RANGE(0xdd05, 0xdd05) AM_WRITE(robokid_bg0_bank_w) |
| 417 | | AM_RANGE(0xde00, 0xde04) AM_WRITE(robokid_bg1_ctrl_w) // scroll + enable |
| 416 | AM_RANGE(0xde00, 0xde04) AM_WRITE(robokid_bg1_ctrl_w) |
| 418 | 417 | AM_RANGE(0xde05, 0xde05) AM_WRITE(robokid_bg1_bank_w) |
| 419 | | AM_RANGE(0xdf00, 0xdf04) AM_WRITE(robokid_bg2_ctrl_w) // scroll + enable |
| 418 | AM_RANGE(0xdf00, 0xdf04) AM_WRITE(robokid_bg2_ctrl_w) |
| 420 | 419 | AM_RANGE(0xdf05, 0xdf05) AM_WRITE(robokid_bg2_bank_w) |
| 421 | 420 | AM_RANGE(0xe000, 0xf9ff) AM_RAM |
| 422 | 421 | AM_RANGE(0xfa00, 0xffff) AM_RAM AM_SHARE("spriteram") |
| r18284 | r18285 | |
| 426 | 425 | static ADDRESS_MAP_START( omegaf_main_cpu, AS_PROGRAM, 8, ninjakd2_state ) |
| 427 | 426 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 428 | 427 | AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") |
| 429 | | AM_RANGE(0xc000, 0xc000) AM_READ_PORT("KEYCOIN") |
| 428 | AM_RANGE(0xc000, 0xc000) AM_READ_PORT("KEYCOIN") AM_WRITE(soundlatch_byte_w) |
| 430 | 429 | AM_RANGE(0xc001, 0xc003) AM_READ(omegaf_io_protection_r) |
| 431 | | AM_RANGE(0xc000, 0xc000) AM_WRITE(soundlatch_byte_w) |
| 432 | | AM_RANGE(0xc001, 0xc001) AM_WRITE(ninjakd2_soundreset_w) // sound reset + flip screen |
| 430 | AM_RANGE(0xc001, 0xc001) AM_WRITE(ninjakd2_soundreset_w) |
| 433 | 431 | AM_RANGE(0xc002, 0xc002) AM_WRITE(ninjakd2_bankselect_w) |
| 434 | 432 | AM_RANGE(0xc003, 0xc003) AM_WRITE(ninjakd2_sprite_overdraw_w) |
| 435 | 433 | AM_RANGE(0xc004, 0xc006) AM_WRITE(omegaf_io_protection_w) |
| 436 | | AM_RANGE(0xc100, 0xc104) AM_WRITE(robokid_bg0_ctrl_w) // scroll + enable |
| 434 | AM_RANGE(0xc100, 0xc104) AM_WRITE(robokid_bg0_ctrl_w) |
| 437 | 435 | AM_RANGE(0xc105, 0xc105) AM_WRITE(robokid_bg0_bank_w) |
| 438 | | AM_RANGE(0xc1e7, 0xc1e7) AM_READNOP // see notes |
| 439 | | AM_RANGE(0xc200, 0xc204) AM_WRITE(robokid_bg1_ctrl_w) // scroll + enable |
| 436 | AM_RANGE(0xc1e7, 0xc1e7) AM_READNOP // see notes |
| 437 | AM_RANGE(0xc200, 0xc204) AM_WRITE(robokid_bg1_ctrl_w) |
| 440 | 438 | AM_RANGE(0xc205, 0xc205) AM_WRITE(robokid_bg1_bank_w) |
| 441 | | AM_RANGE(0xc300, 0xc304) AM_WRITE(robokid_bg2_ctrl_w) // scroll + enable |
| 439 | AM_RANGE(0xc300, 0xc304) AM_WRITE(robokid_bg2_ctrl_w) |
| 442 | 440 | AM_RANGE(0xc305, 0xc305) AM_WRITE(robokid_bg2_bank_w) |
| 443 | 441 | AM_RANGE(0xc400, 0xc7ff) AM_READWRITE(robokid_bg0_videoram_r, robokid_bg0_videoram_w) // banked |
| 444 | 442 | AM_RANGE(0xc800, 0xcbff) AM_READWRITE(robokid_bg1_videoram_r, robokid_bg1_videoram_w) // banked |
| r18284 | r18285 | |
| 903 | 901 | device.execute().set_input_line_and_vector(0, HOLD_LINE, 0xd7); /* RST 10h */ |
| 904 | 902 | } |
| 905 | 903 | |
| 904 | void ninjakd2_state::machine_start() |
| 905 | { |
| 906 | } |
| 907 | |
| 906 | 908 | void ninjakd2_state::machine_reset() |
| 907 | 909 | { |
| 908 | 910 | /* initialize main Z80 bank */ |
| r18284 | r18285 | |
| 913 | 915 | m_rom_bank_mask = num_banks - 1; |
| 914 | 916 | } |
| 915 | 917 | |
| 918 | MACHINE_START_MEMBER(ninjakd2_state,omegaf) |
| 919 | { |
| 920 | omegaf_io_protection_start(); |
| 921 | |
| 922 | machine_start(); |
| 923 | } |
| 924 | |
| 916 | 925 | MACHINE_RESET_MEMBER(ninjakd2_state,omegaf) |
| 917 | 926 | { |
| 918 | 927 | omegaf_io_protection_reset(); |
| r18284 | r18285 | |
| 1011 | 1020 | MCFG_CPU_MODIFY("maincpu") |
| 1012 | 1021 | MCFG_CPU_PROGRAM_MAP(omegaf_main_cpu) |
| 1013 | 1022 | |
| 1023 | MCFG_MACHINE_START_OVERRIDE(ninjakd2_state,omegaf) |
| 1014 | 1024 | MCFG_MACHINE_RESET_OVERRIDE(ninjakd2_state,omegaf) |
| 1015 | 1025 | |
| 1016 | 1026 | /* video hardware */ |
| r18284 | r18285 | |
| 1494 | 1504 | *************************************/ |
| 1495 | 1505 | |
| 1496 | 1506 | // YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS |
| 1497 | | GAME( 1987, ninjakd2, 0, ninjakd2, ninjakd2, ninjakd2_state, ninjakd2, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 1)", 0 ) |
| 1498 | | GAME( 1987, ninjakd2a, ninjakd2, ninjakd2, ninjakd2, ninjakd2_state, bootleg, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 2, bootleg?)", 0 ) |
| 1499 | | GAME( 1987, ninjakd2b, ninjakd2, ninjakd2, rdaction, ninjakd2_state, bootleg, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 3, bootleg?)", 0 ) |
| 1500 | | GAME( 1987, rdaction, ninjakd2, ninjakd2, rdaction, ninjakd2_state, ninjakd2, ROT0, "UPL (World Games license)", "Rad Action / NinjaKun Ashura no Shou", 0 ) |
| 1501 | | GAME( 1987, mnight, 0, mnight, mnight, ninjakd2_state, mnight, ROT0, "UPL (Kawakus license)", "Mutant Night", 0 ) |
| 1502 | | GAME( 1988, arkarea, 0, arkarea, arkarea, ninjakd2_state, mnight, ROT0, "UPL", "Ark Area", 0 ) |
| 1503 | | GAME( 1988, robokid, 0, robokid, robokid, ninjakd2_state, robokid, ROT0, "UPL", "Atomic Robo-kid", 0 ) |
| 1504 | | GAME( 1988, robokidj, robokid, robokid, robokidj, ninjakd2_state, robokidj, ROT0, "UPL", "Atomic Robo-kid (Japan, set 1)", 0 ) |
| 1505 | | GAME( 1988, robokidj2, robokid, robokid, robokidj, ninjakd2_state, robokidj, ROT0, "UPL", "Atomic Robo-kid (Japan, set 2)", 0 ) |
| 1506 | | GAME( 1989, omegaf, 0, omegaf, omegaf, driver_device, 0, ROT270, "UPL", "Omega Fighter", 0 ) |
| 1507 | | GAME( 1989, omegafs, omegaf, omegaf, omegaf, driver_device, 0, ROT270, "UPL", "Omega Fighter Special", 0 ) |
| 1507 | GAME( 1987, ninjakd2, 0, ninjakd2, ninjakd2, ninjakd2_state, ninjakd2, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 1)", GAME_SUPPORTS_SAVE ) |
| 1508 | GAME( 1987, ninjakd2a, ninjakd2, ninjakd2, ninjakd2, ninjakd2_state, bootleg, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 2, bootleg?)", GAME_SUPPORTS_SAVE ) |
| 1509 | GAME( 1987, ninjakd2b, ninjakd2, ninjakd2, rdaction, ninjakd2_state, bootleg, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 3, bootleg?)", GAME_SUPPORTS_SAVE ) |
| 1510 | GAME( 1987, rdaction, ninjakd2, ninjakd2, rdaction, ninjakd2_state, ninjakd2, ROT0, "UPL (World Games license)", "Rad Action / NinjaKun Ashura no Shou", GAME_SUPPORTS_SAVE ) |
| 1511 | GAME( 1987, mnight, 0, mnight, mnight, ninjakd2_state, mnight, ROT0, "UPL (Kawakus license)", "Mutant Night", GAME_SUPPORTS_SAVE ) |
| 1512 | GAME( 1988, arkarea, 0, arkarea, arkarea, ninjakd2_state, mnight, ROT0, "UPL", "Ark Area", GAME_SUPPORTS_SAVE ) |
| 1513 | GAME( 1988, robokid, 0, robokid, robokid, ninjakd2_state, robokid, ROT0, "UPL", "Atomic Robo-kid", GAME_SUPPORTS_SAVE ) |
| 1514 | GAME( 1988, robokidj, robokid, robokid, robokidj, ninjakd2_state, robokidj, ROT0, "UPL", "Atomic Robo-kid (Japan, set 1)", GAME_SUPPORTS_SAVE ) |
| 1515 | GAME( 1988, robokidj2, robokid, robokid, robokidj, ninjakd2_state, robokidj, ROT0, "UPL", "Atomic Robo-kid (Japan, set 2)", GAME_SUPPORTS_SAVE ) |
| 1516 | GAME( 1989, omegaf, 0, omegaf, omegaf, driver_device, 0, ROT270, "UPL", "Omega Fighter", GAME_SUPPORTS_SAVE ) |
| 1517 | GAME( 1989, omegafs, omegaf, omegaf, omegaf, driver_device, 0, ROT270, "UPL", "Omega Fighter Special", GAME_SUPPORTS_SAVE ) |