32 namespace libsidplayfp
41 static constexpr
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
void checkExp()
Definition: sprites.h:98
void checkDisplay()
Definition: sprites.h:106
void updateMcBase()
Definition: sprites.h:81
void checkDma(unsigned int rasterY, uint8_t regs[0x40])
Definition: sprites.h:120
void updateMc()
Definition: sprites.h:68
bool isDma(unsigned int val) const
Definition: sprites.h:169
void lineCrunch(uint8_t data, unsigned int lineCycle)
Definition: sprites.h:141