trunk/src/mame/drivers/seabattl.c
| r24049 | r24050 | |
| 5 | 5 | driver by Mariusz Wojcieszek and David Haywood |
| 6 | 6 | |
| 7 | 7 | TODO: |
| 8 | | - collision detection |
| 8 | - improve collision detection? |
| 9 | 9 | - verify colors |
| 10 | 10 | - video timing |
| 11 | 11 | - discrete sound |
| r24049 | r24050 | |
| 190 | 190 | { |
| 191 | 191 | m_colorram[offset] = data; |
| 192 | 192 | m_bg_tilemap->mark_tile_dirty(offset); |
| 193 | | }; |
| 193 | } |
| 194 | 194 | |
| 195 | 195 | UINT32 seabattl_state::screen_update_seabattl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 196 | 196 | { |
| r24049 | r24050 | |
| 259 | 259 | // bit 0: m.obj - pvi-bkg |
| 260 | 260 | // bit 1: pvi-bkg - src.sm.obj |
| 261 | 261 | // bit 2: m.obj - src.sm.obj |
| 262 | | // TODO: are these variables needed? int colx = -1, coly = -1; |
| 263 | 262 | for (y = cliprect.min_y; y <= cliprect.max_y; y++) |
| 264 | 263 | { |
| 265 | 264 | for (x = cliprect.min_x; x <= cliprect.max_x; x++) |
| r24049 | r24050 | |
| 299 | 298 | void seabattl_state::video_start() |
| 300 | 299 | { |
| 301 | 300 | machine().primary_screen->register_screen_bitmap(m_collision_bg); |
| 302 | | m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(seabattl_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, |
| 303 | | 8, 8, 32, 32); |
| 301 | m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(seabattl_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); |
| 304 | 302 | m_bg_tilemap->set_transparent_pen(0); |
| 305 | 303 | machine().gfx[1]->set_colorbase(8); |
| 306 | 304 | machine().gfx[2]->set_colorbase(24); |
| r24049 | r24050 | |
| 333 | 331 | |
| 334 | 332 | READ8_HANDLER(seabattl_state::seabattl_redc_r) |
| 335 | 333 | { |
| 334 | machine().primary_screen->update_partial(machine().primary_screen->vpos()); |
| 336 | 335 | return m_collision; |
| 337 | | }; |
| 336 | } |
| 338 | 337 | |
| 339 | 338 | WRITE8_MEMBER(seabattl_state::seabattl_wrtc_w) |
| 340 | 339 | { |
| r24049 | r24050 | |
| 344 | 343 | // bit 3: inverse image |
| 345 | 344 | output_set_lamp_value(0, BIT(data,4) ); |
| 346 | 345 | m_waveenable = BIT(data, 5); |
| 347 | | }; |
| 346 | } |
| 348 | 347 | |
| 349 | 348 | READ8_HANDLER(seabattl_state::seabattl_portd_r) |
| 350 | 349 | { |
| 350 | machine().primary_screen->update_partial(machine().primary_screen->vpos()); |
| 351 | 351 | m_collision = 0; |
| 352 | 352 | return 0; |
| 353 | | }; |
| 353 | } |
| 354 | 354 | |
| 355 | 355 | WRITE8_HANDLER(seabattl_state::seabattl_portd_w ) |
| 356 | 356 | { |
| 357 | machine().primary_screen->update_partial(machine().primary_screen->vpos()); |
| 357 | 358 | m_collision = 0; |
| 358 | | }; |
| 359 | } |
| 359 | 360 | |
| 360 | 361 | WRITE8_HANDLER(seabattl_state::sound_w ) |
| 361 | 362 | { |
| r24049 | r24050 | |
| 369 | 370 | // 5 - bomb |
| 370 | 371 | // 6 - unused |
| 371 | 372 | // 7 - unused |
| 372 | | }; |
| 373 | } |
| 373 | 374 | |
| 374 | 375 | WRITE8_HANDLER(seabattl_state::sound2_w ) |
| 375 | 376 | { |
| r24049 | r24050 | |
| 383 | 384 | // 5 - fall aircraft |
| 384 | 385 | // 6 - unused |
| 385 | 386 | // 7 - unused |
| 386 | | }; |
| 387 | } |
| 387 | 388 | |
| 388 | 389 | WRITE8_HANDLER(seabattl_state::time_display_w ) |
| 389 | 390 | { |
| 390 | 391 | m_digit5->a_w(data & 0x0f); |
| 391 | 392 | m_digit4->a_w((data >> 4) & 0x0f); |
| 392 | | }; |
| 393 | } |
| 393 | 394 | |
| 394 | 395 | WRITE8_HANDLER(seabattl_state::score_display_w ) |
| 395 | 396 | { |
| 396 | 397 | m_digit3->a_w(data & 0x0f); |
| 397 | 398 | m_digit2->a_w((data >> 4) & 0x0f); |
| 398 | | }; |
| 399 | } |
| 399 | 400 | |
| 400 | 401 | WRITE8_HANDLER(seabattl_state::score2_display_w ) |
| 401 | 402 | { |
| 402 | 403 | m_digit1->a_w(data & 0x0f); |
| 403 | 404 | m_digit0->a_w((data >> 4) & 0x0f); |
| 404 | | }; |
| 405 | } |
| 405 | 406 | |
| 406 | 407 | READ8_HANDLER(seabattl_state::input_1e05_r) |
| 407 | 408 | { |
| r24049 | r24050 | |
| 412 | 413 | val |= (BIT(dsw1,4) ? 4 : 0); |
| 413 | 414 | val |= (BIT(dsw1,7) ? 8 : 0); |
| 414 | 415 | return val; |
| 415 | | }; |
| 416 | } |
| 416 | 417 | |
| 417 | 418 | READ8_HANDLER(seabattl_state::input_1e06_r) |
| 418 | 419 | { |
| r24049 | r24050 | |
| 425 | 426 | val |= (BIT(dsw1,6) ? 16 : 0); |
| 426 | 427 | val |= (BIT(dsw1,7) ? 32 : 0); |
| 427 | 428 | return val; |
| 428 | | }; |
| 429 | } |
| 429 | 430 | |
| 430 | 431 | READ8_HANDLER(seabattl_state::input_1e07_r) |
| 431 | 432 | { |
| r24049 | r24050 | |
| 438 | 439 | val |= (BIT(dsw0,5) ? 16 : 0); |
| 439 | 440 | val |= (BIT(dsw0,4) ? 32 : 0); |
| 440 | 441 | return val; |
| 441 | | }; |
| 442 | } |
| 442 | 443 | |
| 443 | 444 | static INPUT_PORTS_START( seabattl ) |
| 444 | 445 | PORT_START("IN0") |
| r24049 | r24050 | |
| 505 | 506 | PORT_DIPUNUSED( 0xe0, 0xe0 ) |
| 506 | 507 | |
| 507 | 508 | PORT_START("SENSE") |
| 508 | | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 509 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 509 | 510 | INPUT_PORTS_END |
| 510 | 511 | |
| 511 | 512 | void seabattl_state::machine_start() |
| r24049 | r24050 | |
| 606 | 607 | MCFG_CPU_ADD("maincpu", S2650, 14318180/4/2) |
| 607 | 608 | MCFG_CPU_PROGRAM_MAP(seabattl_map) |
| 608 | 609 | MCFG_CPU_IO_MAP(seabattl_io_map) |
| 609 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", seabattl_state, seabattl_interrupt) |
| 610 | MCFG_CPU_VBLANK_INT_DRIVER("screen", seabattl_state, seabattl_interrupt) |
| 610 | 611 | |
| 611 | 612 | MCFG_PALETTE_LENGTH(26) |
| 612 | 613 | |
| r24049 | r24050 | |
| 622 | 623 | MCFG_DM9368_ADD("tm_unity", digit_time_unity_intf) |
| 623 | 624 | |
| 624 | 625 | /* video hardware */ |
| 626 | MCFG_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) |
| 625 | 627 | MCFG_SCREEN_ADD("screen", RASTER) |
| 626 | 628 | MCFG_SCREEN_REFRESH_RATE(50) |
| 627 | 629 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) |
| r24049 | r24050 | |
| 633 | 635 | /* sound hardware */ |
| 634 | 636 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 635 | 637 | MCFG_SOUND_ADD("s2636snd", S2636_SOUND, 0) |
| 636 | | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| 638 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) |
| 637 | 639 | |
| 638 | 640 | /* discrete sound */ |
| 639 | 641 | MACHINE_CONFIG_END |
| r24049 | r24050 | |
| 680 | 682 | ROM_LOAD( "seawawe.ic9", 0x0000, 0x0800, CRC(7e356dc5) SHA1(71d34fa39ff0b7d0fa6d32ba2b9dc0006a03d1bb) ) // identical to above set |
| 681 | 683 | ROM_END |
| 682 | 684 | |
| 683 | | GAME( 1980, seabattl, 0, seabattl, seabattl, driver_device, 0, ROT0, "Zaccaria", "Sea Battle (set 1)", GAME_NO_SOUND | GAME_NOT_WORKING ) |
| 684 | | GAME( 1980, seabattla, seabattl, seabattl, seabattl, driver_device, 0, ROT0, "Zaccaria", "Sea Battle (set 2)", GAME_NO_SOUND | GAME_NOT_WORKING ) |
| 685 | GAME( 1980, seabattl, 0, seabattl, seabattl, driver_device, 0, ROT0, "Zaccaria", "Sea Battle (set 1)", GAME_IMPERFECT_COLORS | GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND | GAME_NOT_WORKING ) |
| 686 | GAME( 1980, seabattla, seabattl, seabattl, seabattl, driver_device, 0, ROT0, "Zaccaria", "Sea Battle (set 2)", GAME_IMPERFECT_COLORS | GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND | GAME_NOT_WORKING ) |