41 static constexpr unsigned int SPRITES = 8;
43 const uint8_t &enable, &y_expansion;
47 uint8_t mc_base[SPRITES];
53 y_expansion(regs[0x17]) {}
60 std::fill(std::begin(mc_base), std::end(mc_base), 0);
61 std::fill(std::begin(mc), std::end(mc), 0);
71 for (
unsigned int i = 0; i < SPRITES; i++, mask <<= 1)
74 mc[i] = (mc[i] + 3) & 0x3f;
84 for (
unsigned int i = 0; i < SPRITES; i++, mask <<= 1)
89 if (mc_base[i] == 0x3f)
100 exp_flop ^= dma & y_expansion;
108 for (
unsigned int i = 0; i < SPRITES; i++)
120 void checkDma(
unsigned int rasterY, uint8_t regs[0x40])
122 const uint8_t y = rasterY & 0xff;
124 for (
unsigned int i = 0; i < SPRITES; i++, mask <<= 1)
126 if ((enable & mask) && (y == regs[(i << 1) + 1]) && !(dma & mask))
144 for (
unsigned int i = 0; i < SPRITES; i++, mask <<= 1)
146 if (!(data & mask) && !(exp_flop & mask))
151 const uint8_t mc_i = mc[i];
152 const uint8_t mcBase_i = mc_base[i];
154 mc[i] = (0x2a & (mcBase_i & mc_i)) | (0x15 & (mcBase_i | mc_i));
169 inline bool isDma(
unsigned int val)
const