mirror of https://github.com/bsnes-emu/bsnes.git
42 lines
955 B
C++
42 lines
955 B
C++
auto VDC::Background::scanline(uint y) -> void {
|
|
if(y == 0) {
|
|
vcounter = vscroll;
|
|
} else {
|
|
vcounter++;
|
|
}
|
|
hoffset = hscroll;
|
|
voffset = vcounter;
|
|
}
|
|
|
|
auto VDC::Background::run(uint x, uint y) -> void {
|
|
color = 0;
|
|
palette = 0;
|
|
|
|
uint16 batAddress;
|
|
batAddress = (voffset >> 3) & (height - 1);
|
|
batAddress *= width;
|
|
batAddress += (hoffset >> 3) & (width - 1);
|
|
|
|
uint16 tiledata = vdc->vram.read(batAddress);
|
|
uint16 patternAddress = tiledata.bits(0,11) << 4;
|
|
patternAddress += (voffset & 7);
|
|
uint4 palette = tiledata.bits(12,15);
|
|
|
|
uint16 d0 = vdc->vram.read(patternAddress + 0);
|
|
uint16 d1 = vdc->vram.read(patternAddress + 8);
|
|
|
|
uint3 index = 7 - (hoffset & 7);
|
|
uint4 color;
|
|
color.bit(0) = d0.bit(0 + index);
|
|
color.bit(1) = d0.bit(8 + index);
|
|
color.bit(2) = d1.bit(0 + index);
|
|
color.bit(3) = d1.bit(8 + index);
|
|
|
|
if(enable && color) {
|
|
this->color = color;
|
|
this->palette = palette;
|
|
}
|
|
|
|
hoffset++;
|
|
}
|