trunk/src/mame/drivers/groundfx.c
| r241834 | r241835 | |
| 48 | 48 | |
| 49 | 49 | Ground Effects combines the sprite system used in Taito Z games with |
| 50 | 50 | the TC0480SCP tilemap chip plus some features from the Taito F3 system. |
| 51 | | It has an extra tilemap chip which is a dead ringer for the TC0100SCN |
| 52 | | (check the inits), like Under Fire. |
| 51 | It has an extra TC0620SCC tilemap chip which is a 6bpp version of the |
| 52 | TC0100SCN (check the inits), like Under Fire. |
| 53 | 53 | |
| 54 | 54 | Ground Effects is effectively a 30Hz game - though the vblank interrupts |
| 55 | 55 | still come in at 60Hz, the game uses a hardware frame counter to limit |
| r241834 | r241835 | |
| 190 | 190 | AM_RANGE(0x700000, 0x7007ff) AM_RAM AM_SHARE("snd_shared") |
| 191 | 191 | AM_RANGE(0x800000, 0x80ffff) AM_DEVREADWRITE("tc0480scp", tc0480scp_device, long_r, long_w) /* tilemaps */ |
| 192 | 192 | AM_RANGE(0x830000, 0x83002f) AM_DEVREADWRITE("tc0480scp", tc0480scp_device, ctrl_long_r, ctrl_long_w) // debugging |
| 193 | | AM_RANGE(0x900000, 0x90ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, long_r, long_w) /* piv tilemaps */ |
| 193 | AM_RANGE(0x900000, 0x90ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, long_r, long_w) /* 6bpp tilemaps */ |
| 194 | 194 | AM_RANGE(0x920000, 0x92000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, ctrl_long_r, ctrl_long_w) |
| 195 | 195 | AM_RANGE(0xa00000, 0xa0ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") |
| 196 | 196 | AM_RANGE(0xb00000, 0xb003ff) AM_RAM // ?? single bytes, blending ?? |
| r241834 | r241835 | |
| 279 | 279 | 128*8 /* every sprite takes 128 consecutive bytes */ |
| 280 | 280 | }; |
| 281 | 281 | |
| 282 | | static const gfx_layout pivlayout = |
| 282 | static const gfx_layout scclayout = |
| 283 | 283 | { |
| 284 | 284 | 8,8, /* 8*8 characters */ |
| 285 | 285 | RGN_FRAC(1,2), |
| r241834 | r241835 | |
| 293 | 293 | static GFXDECODE_START( groundfx ) |
| 294 | 294 | GFXDECODE_ENTRY( "gfx2", 0x0, tile16x16_layout, 4096, 512 ) |
| 295 | 295 | GFXDECODE_ENTRY( "gfx1", 0x0, charlayout, 0, 512 ) |
| 296 | | GFXDECODE_ENTRY( "gfx3", 0x0, pivlayout, 0, 512 ) |
| 296 | GFXDECODE_ENTRY( "gfx3", 0x0, scclayout, 0, 512 ) |
| 297 | 297 | GFXDECODE_END |
| 298 | 298 | |
| 299 | 299 | |
| r241834 | r241835 | |
| 375 | 375 | ROM_LOAD32_BYTE( "d51-07.51", 0x000003, 0x200000, CRC(24b2f97d) SHA1(6980e67b435d189ce897c0301e0411763410ab47) ) |
| 376 | 376 | |
| 377 | 377 | ROM_REGION( 0x400000, "gfx3", 0 ) |
| 378 | | ROM_LOAD16_BYTE( "d51-10.95", 0x000000, 0x100000, CRC(d5910604) SHA1(8efe13884cfdef208394ddfe19f43eb1b9f78ff3) ) /* PIV 8x8 tiles, 6bpp */ |
| 378 | ROM_LOAD16_BYTE( "d51-10.95", 0x000000, 0x100000, CRC(d5910604) SHA1(8efe13884cfdef208394ddfe19f43eb1b9f78ff3) ) /* SCC 8x8 tiles, 6bpp */ |
| 379 | 379 | ROM_LOAD16_BYTE( "d51-11.96", 0x000001, 0x100000, CRC(fee5f5c6) SHA1(1be88747f9c71c348dd61a8f0040007df3a3e6a6) ) |
| 380 | 380 | ROM_LOAD ( "d51-12.97", 0x300000, 0x100000, CRC(d630287b) SHA1(2fa09e1821b7280d193ca9a2a270759c3c3189d1) ) |
| 381 | 381 | ROM_FILL ( 0x200000, 0x100000, 0 ) |
| r241834 | r241835 | |
| 418 | 418 | /* Speedup handlers */ |
| 419 | 419 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x20b574, 0x20b577, read32_delegate(FUNC(groundfx_state::irq_speedup_r_groundfx),this)); |
| 420 | 420 | |
| 421 | | /* make piv tile GFX format suitable for gfxdecode */ |
| 421 | /* make SCC tile GFX format suitable for gfxdecode */ |
| 422 | 422 | offset = size/2; |
| 423 | 423 | for (i = size/2+size/4; i<size; i++) |
| 424 | 424 | { |
trunk/src/mame/drivers/undrfire.c
| r241834 | r241835 | |
| 7 | 7 | |
| 8 | 8 | Board Info (Underfire): |
| 9 | 9 | |
| 10 | | TC0470LIN : ? |
| 10 | TC0470LIN : object line buffer? |
| 11 | 11 | TC0480SCP : known tilemap chip |
| 12 | 12 | TC0510NIO : known input chip |
| 13 | 13 | TC0570SPC : must be the object chip (next to spritemap and OBJ roms) |
| 14 | | TC0590PIV : Piv tilemaps |
| 15 | | TC0620SCC : lightgun ??? pivot port ??? |
| 14 | TC0590PIV : object related??? |
| 15 | TC0620SCC : tilemap chip (6bpp version of TC0100SCN) |
| 16 | 16 | TC0650FDA : palette ? (Slapshot and F3 games also have one) |
| 17 | 17 | |
| 18 | 18 | M43E0278A |
| r241834 | r241835 | |
| 46 | 46 | |
| 47 | 47 | Under Fire combines the sprite system used in Taito Z games with |
| 48 | 48 | the TC0480SCP tilemap chip plus some features from the Taito F3 system. |
| 49 | | It has an extra tilemap chip which is a dead ringer for the TC0100SCN |
| 50 | | (check the inits). Why did Taito give it a different name in this |
| 51 | | incarnation? |
| 49 | It has an extra TC0620SCC tilemap chip which is a 6bpp version of the |
| 50 | TC0100SCN (check the inits). |
| 52 | 51 | |
| 53 | 52 | |
| 54 | 53 | Game misbehaviours |
| r241834 | r241835 | |
| 452 | 451 | AM_RANGE(0x700000, 0x7007ff) AM_RAM AM_SHARE("snd_shared") |
| 453 | 452 | AM_RANGE(0x800000, 0x80ffff) AM_DEVREADWRITE("tc0480scp", tc0480scp_device, long_r, long_w) /* tilemaps */ |
| 454 | 453 | AM_RANGE(0x830000, 0x83002f) AM_DEVREADWRITE("tc0480scp", tc0480scp_device, ctrl_long_r, ctrl_long_w) |
| 455 | | AM_RANGE(0x900000, 0x90ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, long_r, long_w) /* piv tilemaps */ |
| 454 | AM_RANGE(0x900000, 0x90ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, long_r, long_w) /* 6bpp tilemaps */ |
| 456 | 455 | AM_RANGE(0x920000, 0x92000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, ctrl_long_r, ctrl_long_w) |
| 457 | 456 | AM_RANGE(0xa00000, 0xa0ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") |
| 458 | 457 | AM_RANGE(0xb00000, 0xb003ff) AM_RAM /* single bytes, blending ??? */ |
| r241834 | r241835 | |
| 471 | 470 | AM_RANGE(0x700000, 0x7007ff) AM_RAM AM_SHARE("snd_shared") |
| 472 | 471 | AM_RANGE(0x800000, 0x80ffff) AM_DEVREADWRITE("tc0480scp", tc0480scp_device, long_r, long_w) /* tilemaps */ |
| 473 | 472 | AM_RANGE(0x830000, 0x83002f) AM_DEVREADWRITE("tc0480scp", tc0480scp_device, ctrl_long_r, ctrl_long_w) |
| 474 | | AM_RANGE(0x900000, 0x90ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, long_r, long_w) /* piv tilemaps */ |
| 473 | AM_RANGE(0x900000, 0x90ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, long_r, long_w) /* 6bpp tilemaps */ |
| 475 | 474 | AM_RANGE(0x920000, 0x92000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, ctrl_long_r, ctrl_long_w) |
| 476 | 475 | AM_RANGE(0xa00000, 0xa0ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") |
| 477 | 476 | AM_RANGE(0xb00000, 0xb0000f) AM_RAM /* ? */ |
| r241834 | r241835 | |
| 639 | 638 | 128*8 /* every sprite takes 128 consecutive bytes */ |
| 640 | 639 | }; |
| 641 | 640 | |
| 642 | | static const gfx_layout pivlayout = |
| 641 | static const gfx_layout scclayout = |
| 643 | 642 | { |
| 644 | 643 | 8,8, /* 8*8 characters */ |
| 645 | 644 | RGN_FRAC(1,2), |
| r241834 | r241835 | |
| 653 | 652 | static GFXDECODE_START( undrfire ) |
| 654 | 653 | GFXDECODE_ENTRY( "gfx2", 0x0, tile16x16_layout, 0, 512 ) |
| 655 | 654 | GFXDECODE_ENTRY( "gfx1", 0x0, charlayout, 0, 512 ) |
| 656 | | GFXDECODE_ENTRY( "gfx3", 0x0, pivlayout, 0, 512 ) |
| 655 | GFXDECODE_ENTRY( "gfx3", 0x0, scclayout, 0, 512 ) |
| 657 | 656 | GFXDECODE_END |
| 658 | 657 | |
| 659 | 658 | static GFXDECODE_START( cbombers ) |
| 660 | 659 | GFXDECODE_ENTRY( "gfx2", 0x0, tile16x16_layout, 0, 512 ) |
| 661 | 660 | GFXDECODE_ENTRY( "gfx1", 0x0, charlayout, 0x1000, 512 ) |
| 662 | | GFXDECODE_ENTRY( "gfx3", 0x0, pivlayout, 0, 512 ) |
| 661 | GFXDECODE_ENTRY( "gfx3", 0x0, scclayout, 0, 512 ) |
| 663 | 662 | GFXDECODE_END |
| 664 | 663 | |
| 665 | 664 | /*********************************************************** |
| r241834 | r241835 | |
| 1099 | 1098 | int size=memregion("gfx3")->bytes(); |
| 1100 | 1099 | int data; |
| 1101 | 1100 | |
| 1102 | | /* make piv tile GFX format suitable for gfxdecode */ |
| 1101 | /* make SCC tile GFX format suitable for gfxdecode */ |
| 1103 | 1102 | offset = size/2; |
| 1104 | 1103 | for (i = size/2+size/4; i<size; i++) |
| 1105 | 1104 | { |
| r241834 | r241835 | |
| 1129 | 1128 | int data; |
| 1130 | 1129 | |
| 1131 | 1130 | |
| 1132 | | /* make piv tile GFX format suitable for gfxdecode */ |
| 1131 | /* make SCC tile GFX format suitable for gfxdecode */ |
| 1133 | 1132 | offset = size/2; |
| 1134 | 1133 | for (i = size/2+size/4; i<size; i++) |
| 1135 | 1134 | { |
trunk/src/mame/video/groundfx.c
| r241834 | r241835 | |
| 197 | 197 | { |
| 198 | 198 | address_space &space = machine().driver_data()->generic_space(); |
| 199 | 199 | UINT8 layer[5]; |
| 200 | | UINT8 pivlayer[3]; |
| 200 | UINT8 scclayer[3]; |
| 201 | 201 | UINT16 priority; |
| 202 | 202 | |
| 203 | 203 | m_tc0100scn->tilemap_update(); |
| r241834 | r241835 | |
| 211 | 211 | layer[3] = (priority & 0x000f) >> 0; /* tells us which is top */ |
| 212 | 212 | layer[4] = 4; /* text layer always over bg layers */ |
| 213 | 213 | |
| 214 | | pivlayer[0] = m_tc0100scn->bottomlayer(); |
| 215 | | pivlayer[1] = pivlayer[0]^1; |
| 216 | | pivlayer[2] = 2; |
| 214 | scclayer[0] = m_tc0100scn->bottomlayer(); |
| 215 | scclayer[1] = scclayer[0]^1; |
| 216 | scclayer[2] = 2; |
| 217 | 217 | |
| 218 | 218 | screen.priority().fill(0, cliprect); |
| 219 | 219 | bitmap.fill(0, cliprect); /* wrong color? */ |
| 220 | 220 | |
| 221 | | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[0], TILEMAP_DRAW_OPAQUE, 0); |
| 222 | | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[1], 0, 0); |
| 221 | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[0], TILEMAP_DRAW_OPAQUE, 0); |
| 222 | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[1], 0, 0); |
| 223 | 223 | |
| 224 | 224 | /* BIG HACK! |
| 225 | 225 | |
| r241834 | r241835 | |
| 244 | 244 | m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[2], 0, 4); |
| 245 | 245 | m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[3], 0, 8); |
| 246 | 246 | |
| 247 | | //m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, 0, pivlayer[2], 0, 0); |
| 247 | //m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, 0, scclayer[2], 0, 0); |
| 248 | 248 | |
| 249 | 249 | if (m_tc0480scp->long_r(space, 0x20 / 4, 0xffffffff) != 0x240866) /* Stupid hack for start of race */ |
| 250 | 250 | m_tc0480scp->tilemap_draw(screen, bitmap, m_hack_cliprect, layer[0], 0, 0); |
| r241834 | r241835 | |
| 257 | 257 | m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[2], 0, 4); |
| 258 | 258 | m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[3], 0, 8); |
| 259 | 259 | |
| 260 | | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[2], 0, 0); |
| 260 | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[2], 0, 0); |
| 261 | 261 | |
| 262 | 262 | draw_sprites(screen, bitmap, cliprect, 0, 44, -574); |
| 263 | 263 | } |
trunk/src/mame/video/undrfire.c
| r241834 | r241835 | |
| 347 | 347 | { |
| 348 | 348 | address_space &space = machine().driver_data()->generic_space(); |
| 349 | 349 | UINT8 layer[5]; |
| 350 | | UINT8 pivlayer[3]; |
| 350 | UINT8 scclayer[3]; |
| 351 | 351 | UINT16 priority; |
| 352 | 352 | |
| 353 | 353 | #ifdef MAME_DEBUG |
| 354 | 354 | if (machine().input().code_pressed_once (KEYCODE_X)) |
| 355 | 355 | { |
| 356 | 356 | m_dislayer[5] ^= 1; |
| 357 | | popmessage("piv text: %01x",m_dislayer[5]); |
| 357 | popmessage("scc text: %01x",m_dislayer[5]); |
| 358 | 358 | } |
| 359 | 359 | if (machine().input().code_pressed_once (KEYCODE_C)) |
| 360 | 360 | { |
| r241834 | r241835 | |
| 398 | 398 | layer[3] = (priority & 0x000f) >> 0; /* tells us which is top */ |
| 399 | 399 | layer[4] = 4; /* text layer always over bg layers */ |
| 400 | 400 | |
| 401 | | pivlayer[0] = m_tc0100scn->bottomlayer(); |
| 402 | | pivlayer[1] = pivlayer[0] ^ 1; |
| 403 | | pivlayer[2] = 2; |
| 401 | scclayer[0] = m_tc0100scn->bottomlayer(); |
| 402 | scclayer[1] = scclayer[0] ^ 1; |
| 403 | scclayer[2] = 2; |
| 404 | 404 | |
| 405 | 405 | screen.priority().fill(0, cliprect); |
| 406 | 406 | bitmap.fill(0, cliprect); /* wrong color? */ |
| 407 | 407 | |
| 408 | 408 | |
| 409 | | /* The "PIV" chip seems to be a renamed TC0100SCN. It has a |
| 409 | /* The "SCC" chip seems to be a 6bpp TC0100SCN. It has a |
| 410 | 410 | bottom layer usually full of bright garish colors that |
| 411 | 411 | vaguely mimic the structure of the layers on top. Seems |
| 412 | 412 | pointless - it's always hidden by other layers. Does it |
| 413 | 413 | serve some blending pupose ? */ |
| 414 | 414 | |
| 415 | | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[0], TILEMAP_DRAW_OPAQUE, 0); |
| 416 | | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[1], 0, 0); |
| 415 | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[0], TILEMAP_DRAW_OPAQUE, 0); |
| 416 | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[1], 0, 0); |
| 417 | 417 | |
| 418 | 418 | #ifdef MAME_DEBUG |
| 419 | 419 | if (m_dislayer[layer[0]]==0) |
| r241834 | r241835 | |
| 455 | 455 | #ifdef MAME_DEBUG |
| 456 | 456 | if (m_dislayer[5]==0) |
| 457 | 457 | #endif |
| 458 | | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[2], 0, 0); /* piv text layer */ |
| 458 | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[2], 0, 0); /* TC0620SCC text layer */ |
| 459 | 459 | |
| 460 | 460 | m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[4], 0, 0); /* TC0480SCP text layer */ |
| 461 | 461 | |
| r241834 | r241835 | |
| 488 | 488 | { |
| 489 | 489 | address_space &space = machine().driver_data()->generic_space(); |
| 490 | 490 | UINT8 layer[5]; |
| 491 | | UINT8 pivlayer[3]; |
| 491 | UINT8 scclayer[3]; |
| 492 | 492 | UINT16 priority; |
| 493 | 493 | |
| 494 | 494 | #ifdef MAME_DEBUG |
| 495 | 495 | if (machine().input().code_pressed_once (KEYCODE_X)) |
| 496 | 496 | { |
| 497 | 497 | m_dislayer[5] ^= 1; |
| 498 | | popmessage("piv text: %01x",m_dislayer[5]); |
| 498 | popmessage("scc text: %01x",m_dislayer[5]); |
| 499 | 499 | } |
| 500 | 500 | if (machine().input().code_pressed_once (KEYCODE_C)) |
| 501 | 501 | { |
| r241834 | r241835 | |
| 539 | 539 | layer[3] = (priority & 0x000f) >> 0; /* tells us which is top */ |
| 540 | 540 | layer[4] = 4; /* text layer always over bg layers */ |
| 541 | 541 | |
| 542 | | pivlayer[0] = m_tc0100scn->bottomlayer(); |
| 543 | | pivlayer[1] = pivlayer[0] ^ 1; |
| 544 | | pivlayer[2] = 2; |
| 542 | scclayer[0] = m_tc0100scn->bottomlayer(); |
| 543 | scclayer[1] = scclayer[0] ^ 1; |
| 544 | scclayer[2] = 2; |
| 545 | 545 | |
| 546 | 546 | screen.priority().fill(0, cliprect); |
| 547 | 547 | bitmap.fill(0, cliprect); /* wrong color? */ |
| 548 | 548 | |
| 549 | 549 | |
| 550 | | /* The "PIV" chip seems to be a renamed TC0100SCN. It has a |
| 550 | /* The "SCC" chip seems to be a 6bpp TC0100SCN. It has a |
| 551 | 551 | bottom layer usually full of bright garish colors that |
| 552 | 552 | vaguely mimic the structure of the layers on top. Seems |
| 553 | 553 | pointless - it's always hidden by other layers. Does it |
| 554 | 554 | serve some blending pupose ? */ |
| 555 | 555 | |
| 556 | | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[0], TILEMAP_DRAW_OPAQUE, 0); |
| 557 | | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[1], 0, 0); |
| 556 | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[0], TILEMAP_DRAW_OPAQUE, 0); |
| 557 | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[1], 0, 0); |
| 558 | 558 | |
| 559 | 559 | #ifdef MAME_DEBUG |
| 560 | 560 | if (m_dislayer[layer[0]]==0) |
| r241834 | r241835 | |
| 596 | 596 | #ifdef MAME_DEBUG |
| 597 | 597 | if (m_dislayer[5]==0) |
| 598 | 598 | #endif |
| 599 | | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[2], 0, 0); /* piv text layer */ |
| 599 | m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[2], 0, 0); /* TC0620SCC text layer */ |
| 600 | 600 | |
| 601 | 601 | m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[4], 0, 0); /* TC0480SCP text layer */ |
| 602 | 602 | |