MCPcopy Create free account
hub / github.com/TASEmulators/fceux / FetchSpriteData

Function FetchSpriteData

src/ppu.cpp:1420–1557  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1418
1419static uint8 numsprites, SpriteBlurp;
1420static void FetchSpriteData(void) {
1421 uint8 ns, sb;
1422 SPR *spr;
1423 uint8 H;
1424 int n;
1425 int vofs;
1426 uint8 P0 = PPU[0];
1427
1428 spr = (SPR*)SPRAM;
1429 H = 8;
1430
1431 ns = sb = 0;
1432
1433 vofs = (uint32)(P0 & 0x8 & (((P0 & 0x20) ^ 0x20) >> 2)) << 9;
1434 H += (P0 & 0x20) >> 2;
1435
1436 if (!PPU_hook)
1437 for (n = 63; n >= 0; n--, spr++) {
1438 if ((uint32)(scanline - spr->y) >= H) continue;
1439 if (ns < maxsprites) {
1440 if (n == 63) sb = 1;
1441
1442 {
1443 SPRB dst;
1444 uint8 *C;
1445 int t;
1446 uint32 vadr;
1447
1448 t = (int)scanline - (spr->y);
1449
1450 if (Sprite16)
1451 vadr = ((spr->no & 1) << 12) + ((spr->no & 0xFE) << 4);
1452 else
1453 vadr = (spr->no << 4) + vofs;
1454
1455 if (spr->atr & V_FLIP) {
1456 vadr += 7;
1457 vadr -= t;
1458 vadr += (P0 & 0x20) >> 1;
1459 vadr -= t & 8;
1460 } else {
1461 vadr += t;
1462 vadr += t & 8;
1463 }
1464
1465 /* Fix this geniestage hack */
1466 if (MMC5Hack && geniestage != 1)
1467 C = MMC5SPRVRAMADR(vadr);
1468 else
1469 C = VRAMADR(vadr);
1470
1471 if (SpriteON)
1472 RENDER_LOGP(C);
1473 dst.ca[0] = C[0];
1474 if (SpriteON)
1475 RENDER_LOGP(C + 8);
1476 dst.ca[1] = C[8];
1477 dst.x = spr->x;

Callers 1

DoLineFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected