trunk/src/mame/video/1942.c
| r26300 | r26301 | |
| 24 | 24 | |
| 25 | 25 | ***************************************************************************/ |
| 26 | 26 | |
| 27 | | void _1942_state::palette_init() |
| 27 | void _1942_state::create_palette() |
| 28 | 28 | { |
| 29 | |
| 30 | |
| 29 | 31 | const UINT8 *color_prom = memregion("proms")->base(); |
| 30 | | rgb_t palette[256]; |
| 31 | | int i, colorbase; |
| 32 | int i; |
| 32 | 33 | |
| 33 | 34 | for (i = 0; i < 256; i++) |
| 34 | 35 | { |
| r26300 | r26301 | |
| 55 | 56 | |
| 56 | 57 | palette[i] = MAKE_RGB(r,g,b); |
| 57 | 58 | } |
| 59 | } |
| 58 | 60 | |
| 61 | void _1942_state::palette_init() |
| 62 | { |
| 63 | machine().colortable = colortable_alloc(machine(), 0x600); |
| 64 | |
| 65 | create_palette(); |
| 66 | |
| 67 | const UINT8 *color_prom = memregion("proms")->base(); |
| 68 | int i, colorbase; |
| 59 | 69 | color_prom += 3 * 256; |
| 60 | 70 | /* color_prom now points to the beginning of the lookup table */ |
| 61 | 71 | |
| r26300 | r26301 | |
| 63 | 73 | /* characters use palette entries 128-143 */ |
| 64 | 74 | colorbase = 0; |
| 65 | 75 | for (i = 0; i < 64 * 4; i++) |
| 66 | | palette_set_color(machine(), colorbase + i, palette[0x80 | *color_prom++]); |
| 76 | { |
| 77 | colortable_palette_set_color(machine().colortable, colorbase + i, palette[0x80 | *color_prom++]); |
| 78 | } |
| 67 | 79 | colorbase += 64 * 4; |
| 68 | 80 | |
| 69 | 81 | /* background tiles use palette entries 0-63 in four banks */ |
| 70 | 82 | for (i = 0; i < 32 * 8; i++) |
| 71 | 83 | { |
| 72 | | palette_set_color(machine(), colorbase + 0 * 32 * 8 + i, palette[0x00 | *color_prom]); |
| 73 | | palette_set_color(machine(), colorbase + 1 * 32 * 8 + i, palette[0x10 | *color_prom]); |
| 74 | | palette_set_color(machine(), colorbase + 2 * 32 * 8 + i, palette[0x20 | *color_prom]); |
| 75 | | palette_set_color(machine(), colorbase + 3 * 32 * 8 + i, palette[0x30 | *color_prom]); |
| 84 | colortable_palette_set_color(machine().colortable, colorbase + 0 * 32 * 8 + i, palette[0x00 | *color_prom]); |
| 85 | colortable_palette_set_color(machine().colortable, colorbase + 1 * 32 * 8 + i, palette[0x10 | *color_prom]); |
| 86 | colortable_palette_set_color(machine().colortable, colorbase + 2 * 32 * 8 + i, palette[0x20 | *color_prom]); |
| 87 | colortable_palette_set_color(machine().colortable, colorbase + 3 * 32 * 8 + i, palette[0x30 | *color_prom]); |
| 76 | 88 | color_prom++; |
| 77 | 89 | } |
| 78 | 90 | colorbase += 4 * 32 * 8; |
| 79 | 91 | |
| 80 | 92 | /* sprites use palette entries 64-79 */ |
| 81 | 93 | for (i = 0; i < 16 * 16; i++) |
| 82 | | palette_set_color(machine(), colorbase + i, palette[0x40 | *color_prom++]); |
| 94 | colortable_palette_set_color(machine().colortable, colorbase + i, palette[0x40 | *color_prom++]); |
| 95 | |
| 96 | for (i = 0; i < 0x600; i++) |
| 97 | { |
| 98 | colortable_entry_set_value(machine().colortable, i, i); |
| 99 | } |
| 100 | |
| 83 | 101 | } |
| 84 | 102 | |
| 103 | void _1942_state::palette_init_1942p() |
| 104 | { |
| 105 | machine().colortable = colortable_alloc(machine(), 0x500); |
| 106 | |
| 107 | for (int i = 0; i < 0x400; i++) |
| 108 | { |
| 109 | colortable_entry_set_value(machine().colortable, i, i); |
| 110 | } |
| 85 | 111 | |
| 112 | const UINT8 *color_prom = memregion("proms")->base(); |
| 113 | for (int i = 0; i < 0x100; i++) |
| 114 | { |
| 115 | colortable_entry_set_value(machine().colortable, i+0x400, color_prom[i]| 0x240); |
| 116 | } |
| 117 | } |
| 118 | |
| 119 | |
| 120 | |
| 86 | 121 | /*************************************************************************** |
| 87 | 122 | |
| 88 | 123 | Callbacks for the TileMap code |
| r26300 | r26301 | |
| 131 | 166 | m_fg_tilemap->set_transparent_pen(0); |
| 132 | 167 | } |
| 133 | 168 | |
| 169 | void _1942_state::video_start_c1942p() |
| 170 | { |
| 171 | m_fg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(_1942_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); |
| 172 | m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(_1942_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 32, 16); |
| 134 | 173 | |
| 174 | m_fg_tilemap->set_transparent_pen(3); |
| 175 | } |
| 176 | |
| 177 | |
| 135 | 178 | /*************************************************************************** |
| 136 | 179 | |
| 137 | 180 | Memory handlers |
| r26300 | r26301 | |
| 247 | 290 | |
| 248 | 291 | code = (m_spriteram[offs] & 0x7f) + 4 * (m_spriteram[offs + 3] & 0x20) |
| 249 | 292 | + 2 * (m_spriteram[offs] & 0x80); |
| 250 | | col = m_spriteram[offs + 1] & 0x0f; |
| 293 | col = m_spriteram[offs + 3] & 0x0f; |
| 251 | 294 | |
| 252 | 295 | |
| 253 | | sx = m_spriteram[offs + 2]; |
| 296 | sx = m_spriteram[offs + 2] - 0x10 * (m_spriteram[offs + 3] & 0x10); |
| 254 | 297 | sy = m_spriteram[offs + 1]; |
| 255 | | dir = 1; |
| 256 | 298 | |
| 299 | |
| 300 | |
| 257 | 301 | if (flip_screen()) |
| 258 | 302 | { |
| 259 | 303 | sx = 240 - sx; |
| 260 | | sy = 240 - sy; |
| 261 | 304 | dir = -1; |
| 262 | 305 | } |
| 306 | else |
| 307 | { |
| 308 | sy = 240 - sy; |
| 309 | dir = 1; |
| 310 | } |
| 263 | 311 | |
| 264 | 312 | /* handle double / quadruple height */ |
| 265 | | i = (m_spriteram[offs + 1] & 0xc0) >> 6; |
| 313 | i = (m_spriteram[offs + 3] & 0xc0) >> 6; |
| 266 | 314 | if (i == 2) |
| 267 | 315 | i = 3; |
| 268 | 316 | |
| 317 | i = 0; |
| 318 | |
| 269 | 319 | do |
| 270 | 320 | { |
| 271 | 321 | drawgfx_transpen(bitmap,cliprect,machine().gfx[2], |
trunk/src/mame/drivers/1942.c
| r26300 | r26301 | |
| 105 | 105 | AM_RANGE(0xe000, 0xefff) AM_RAM |
| 106 | 106 | ADDRESS_MAP_END |
| 107 | 107 | |
| 108 | WRITE8_MEMBER(_1942_state::c1942p_f600_w) |
| 109 | { |
| 110 | // printf("c1942p_f600_w %02x\n", data); |
| 111 | } |
| 112 | |
| 113 | WRITE8_MEMBER(_1942_state::c1942p_palette_w) |
| 114 | { |
| 115 | m_protopal[offset] = data; |
| 116 | |
| 117 | int r = (data & 0x07) >> 0; |
| 118 | int g = (data & 0x38) >> 3; |
| 119 | int b = (data & 0xc0) >> 6; |
| 120 | |
| 121 | colortable_palette_set_color(machine().colortable, offset, MAKE_RGB(r<<5,g<<5,b<<6)); |
| 122 | } |
| 123 | |
| 108 | 124 | static ADDRESS_MAP_START( c1942p_map, AS_PROGRAM, 8, _1942_state ) |
| 109 | 125 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 110 | 126 | AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") |
| r26300 | r26301 | |
| 120 | 136 | AM_RANGE(0xc804, 0xc804) AM_WRITE(c1942_c804_w) |
| 121 | 137 | AM_RANGE(0xc805, 0xc805) AM_WRITE(c1942_palette_bank_w) |
| 122 | 138 | |
| 123 | | AM_RANGE(0xf000, 0xf3ff) AM_RAM |
| 139 | AM_RANGE(0xf000, 0xf3ff) AM_RAM AM_WRITE(c1942p_palette_w) AM_SHARE("protopal") |
| 124 | 140 | |
| 125 | 141 | AM_RANGE(0xf400, 0xf400) AM_WRITE(c1942_bankswitch_w) |
| 126 | 142 | AM_RANGE(0xf500, 0xf500) AM_WRITE(soundlatch_byte_w) |
| 143 | AM_RANGE(0xf600, 0xf600) AM_WRITE(c1942p_f600_w) |
| 127 | 144 | |
| 128 | 145 | AM_RANGE(0xf700, 0xf700) AM_READ_PORT("DSWA") |
| 129 | 146 | AM_RANGE(0xf701, 0xf701) AM_READ_PORT("SYSTEM") |
| r26300 | r26301 | |
| 241 | 258 | |
| 242 | 259 | |
| 243 | 260 | PORT_START("P1") |
| 244 | | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY |
| 245 | | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY |
| 261 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY |
| 262 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY |
| 246 | 263 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY |
| 247 | 264 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY |
| 248 | 265 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 ) |
| r26300 | r26301 | |
| 369 | 386 | GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 64*4+4*32*8, 16 ) |
| 370 | 387 | GFXDECODE_END |
| 371 | 388 | |
| 389 | |
| 390 | static const gfx_layout charlayout_p = |
| 391 | { |
| 392 | 8,8, |
| 393 | RGN_FRAC(1,1), |
| 394 | 2, |
| 395 | { 0, 4 }, |
| 396 | { 0, 1, 2, 3, 8+0, 8+1, 8+2, 8+3 }, |
| 397 | { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 }, |
| 398 | 16*8 |
| 399 | }; |
| 400 | |
| 372 | 401 | static const gfx_layout tilelayout_p = |
| 373 | 402 | { |
| 374 | 403 | 16,16, |
| 375 | 404 | RGN_FRAC(1,12), |
| 376 | 405 | 3, |
| 377 | | { RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) }, |
| 406 | { RGN_FRAC(1,3), RGN_FRAC(2,3), RGN_FRAC(0,3) }, |
| 378 | 407 | { 0, 1, 2, 3, 4, 5, 6, 7, |
| 379 | 408 | 0x2000*8, 0x2000*8 +1, 0x2000*8 +2, 0x2000*8 +3, 0x2000*8 +4, 0x2000*8 +5, 0x2000*8 + 6, 0x2000*8 +7 }, |
| 380 | 409 | { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 0x1000*8 + 0*8, 0x1000*8 + 1*8, 0x1000*8 + 2*8, 0x1000*8 + 3*8, 0x1000*8 + 4*8, 0x1000*8 + 5*8, 0x1000*8 + 6*8, 0x1000*8 + 7*8 }, |
| r26300 | r26301 | |
| 395 | 424 | }; |
| 396 | 425 | |
| 397 | 426 | static GFXDECODE_START( 1942p ) |
| 398 | | GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 64 ) |
| 399 | | GFXDECODE_ENTRY( "gfx2", 0, tilelayout_p, 64*4, 4*32 ) |
| 400 | | GFXDECODE_ENTRY( "gfx3", 0, spritelayout_p, 64*4+4*32*8, 16 ) |
| 427 | GFXDECODE_ENTRY( "gfx1", 0, charlayout_p, 0x000, 64 ) |
| 428 | GFXDECODE_ENTRY( "gfx2", 0, tilelayout_p, 0x300, 32 ) |
| 429 | GFXDECODE_ENTRY( "gfx3", 0, spritelayout_p, 0x400, 16 ) |
| 401 | 430 | GFXDECODE_END |
| 402 | 431 | |
| 403 | 432 | |
| r26300 | r26301 | |
| 463 | 492 | |
| 464 | 493 | /* video hardware */ |
| 465 | 494 | MCFG_GFXDECODE(1942p) |
| 466 | | MCFG_PALETTE_LENGTH(64*4+4*32*8+16*16) |
| 495 | MCFG_PALETTE_LENGTH(0x500) |
| 496 | MCFG_PALETTE_INIT_OVERRIDE(_1942_state, 1942p) |
| 497 | MCFG_VIDEO_START_OVERRIDE(_1942_state,c1942p) |
| 467 | 498 | |
| 468 | 499 | MCFG_SCREEN_ADD("screen", RASTER) |
| 469 | 500 | MCFG_SCREEN_REFRESH_RATE(60) |
| r26300 | r26301 | |
| 701 | 732 | ROM_LOAD( "(__1942p)3.bin", 0x14000, 0x4000, CRC(108fda63) SHA1(6ffdf57a04bcfae9fdb2343f30cff50926188cbf) )// |
| 702 | 733 | |
| 703 | 734 | ROM_REGION( 0x10000, "audiocpu", 0 ) |
| 704 | | ROM_LOAD( "(__1942p)snd.bin", 0x0000, 0x4000, CRC(43d6df9f) SHA1(c34579c73faa7e9552a6721ef8050b33ca158588) )// |
| 735 | ROM_LOAD( "(__1942p)snd.bin", 0x0000, 0x4000, BAD_DUMP CRC(43d6df9f) SHA1(c34579c73faa7e9552a6721ef8050b33ca158588) )// looks bad |
| 736 | ROM_LOAD( "sr-01.c11", 0x0000, 0x4000, CRC(bd87f06b) SHA1(821f85cf157f81117eeaba0c3cf0337eac357e58) ) // unlikely to be the same.. |
| 705 | 737 | |
| 706 | | ROM_REGION( 0x2000, "gfx1", 0 ) |
| 738 | ROM_REGION( 0x2000, "gfx1", ROMREGION_INVERT ) |
| 707 | 739 | ROM_LOAD( "(__1942p)8.bin", 0x0000, 0x2000, CRC(6ebca191) SHA1(0dbddadde54a0ab66994c4a8726be05c6ca88a0e) ) /* characters */ // |
| 708 | 740 | |
| 709 | | ROM_REGION( 0xc000, "gfx2", 0 ) |
| 741 | ROM_REGION( 0xc000, "gfx2", ROMREGION_INVERT ) |
| 710 | 742 | ROM_LOAD( "(__1942p)5.bin", 0x0000, 0x4000, CRC(1081b88c) SHA1(f3026e72206c96573fd6ba28d15e865b51735004) ) /* tiles */ |
| 711 | 743 | ROM_LOAD( "(__1942p)6.bin", 0x4000, 0x4000, CRC(2d6acd8c) SHA1(914bb971c8f1364d0c44bd11f5f7e8da1f4953bb) ) |
| 712 | 744 | ROM_LOAD( "(__1942p)7.bin", 0x8000, 0x4000, CRC(30f13e78) SHA1(51b9c0dfc53db705b75dd7ce643cec807533af5a) ) |
| r26300 | r26301 | |
| 717 | 749 | ROM_LOAD( "(__1942p)11.bin", 0x8000, 0x4000, CRC(d2ce3eb6) SHA1(ebe71bd413b169ff2cea6973faf48527a8283eef) ) |
| 718 | 750 | ROM_LOAD( "(__1942p)12.bin", 0xc000, 0x4000, CRC(aaa86493) SHA1(b0f6c59b5369b565bf863544a26cde2105aa35be) ) |
| 719 | 751 | |
| 720 | | ROM_REGION( 0x0a00, "proms", 0 ) // only one prom was in the dump |
| 721 | | ROM_LOAD( "sb-5.e8", 0x0000, 0x0100, BAD_DUMP CRC(93ab8153) SHA1(a792f24e5c0c3c4a6b436102e7a98199f878ece1) ) /* red component */ |
| 722 | | ROM_LOAD( "sb-6.e9", 0x0100, 0x0100, BAD_DUMP CRC(8ab44f7d) SHA1(f74680a6a987d74b3acb32e6396f20e127874149) ) /* green component */ |
| 723 | | ROM_LOAD( "sb-7.e10", 0x0200, 0x0100, BAD_DUMP CRC(f4ade9a4) SHA1(62ad31d31d183cce213b03168daa035083b2f28e) ) /* blue component */ |
| 724 | | ROM_LOAD( "sb-0.f1", 0x0300, 0x0100, BAD_DUMP CRC(6047d91b) SHA1(1ce025f9524c1033e48c5294ee7d360f8bfebe8d) ) /* char lookup table */ |
| 725 | | ROM_LOAD( "sb-4.d6", 0x0400, 0x0100, BAD_DUMP CRC(4858968d) SHA1(20b5dbcaa1a4081b3139e7e2332d8fe3c9e55ed6) ) /* tile lookup table */ |
| 726 | | ROM_LOAD( "(__1942p)ic22.bin", 0x0500, 0x0100, CRC(f6fad943) SHA1(b0a24ea7805272e8ebf72a99b08907bc00d5f82f) ) /* sprite lookup table */ // |
| 727 | | ROM_LOAD( "sb-2.d1", 0x0600, 0x0100, BAD_DUMP CRC(8bb8b3df) SHA1(49de2819c4c92057fedcb20425282515d85829aa) ) /* tile palette selector? (not used) */ |
| 728 | | ROM_LOAD( "sb-3.d2", 0x0700, 0x0100, BAD_DUMP CRC(3b0c99af) SHA1(38f30ac1e48632634e409f328ee3051b987de7ad) ) /* tile palette selector? (not used) */ |
| 729 | | ROM_LOAD( "sb-1.k6", 0x0800, 0x0100, BAD_DUMP CRC(712ac508) SHA1(5349d722ab6733afdda65f6e0a98322f0d515e86) ) /* interrupt timing (not used) */ |
| 730 | | ROM_LOAD( "sb-9.m11", 0x0900, 0x0100, BAD_DUMP CRC(4921635c) SHA1(aee37d6cdc36acf0f11ff5f93e7b16e4b12f6c39) ) /* video timing? (not used) */ |
| 752 | ROM_REGION( 0x0100, "proms", 0 ) // only one prom was in the dump - uses paletteram instead of proms |
| 753 | ROM_LOAD( "(__1942p)ic22.bin", 0x0000, 0x0100, CRC(f6fad943) SHA1(b0a24ea7805272e8ebf72a99b08907bc00d5f82f) ) /* sprite lookup table */ // |
| 731 | 754 | ROM_END |
| 732 | 755 | |
| 733 | 756 | |
| r26300 | r26301 | |
| 743 | 766 | GAME( 1984, 1942abl, 1942, 1942, 1942, _1942_state, 1942, ROT270, "bootleg", "1942 (Revision A, bootleg)", GAME_SUPPORTS_SAVE ) // data is the same as 1942a set, different rom format |
| 744 | 767 | GAME( 1984, 1942b, 1942, 1942, 1942, _1942_state, 1942, ROT270, "Capcom", "1942 (First Version)", GAME_SUPPORTS_SAVE ) |
| 745 | 768 | GAME( 1985, 1942w, 1942, 1942, 1942, _1942_state, 1942, ROT270, "Capcom (Williams Electronics license)", "1942 (Williams Electronics license)", GAME_SUPPORTS_SAVE ) /* Based on 1942 (Revision B) */ |
| 746 | | GAME( 1984, 1942p, 1942, 1942p,1942p,_1942_state, 1942, ROT270, "Capcom", "1942 (prototype?)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) // possibly bootleg of prototype |
| 769 | GAME( 1984, 1942p, 1942, 1942p,1942p,_1942_state, 1942, ROT270, "Capcom", "1942 (prototype)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) |