bsnes/gba/ppu/registers.cpp

139 lines
3.6 KiB
C++

PPU::Registers::Control::operator uint16() const {
return (
(bgmode << 0)
| (cgbmode << 3)
| (frame << 4)
| (hblank << 5)
| (objmapping << 6)
| (forceblank << 7)
| (enable[BG0] << 8)
| (enable[BG1] << 9)
| (enable[BG2] << 10)
| (enable[BG3] << 11)
| (enable[OBJ] << 12)
| (enablewindow[In0] << 13)
| (enablewindow[In1] << 14)
| (enablewindow[Obj] << 15)
);
}
uint16 PPU::Registers::Control::operator=(uint16 source) {
bgmode = source >> 0;
cgbmode = source >> 3;
frame = source >> 4;
hblank = source >> 5;
objmapping = source >> 6;
forceblank = source >> 7;
enable[BG0] = source >> 8;
enable[BG1] = source >> 9;
enable[BG2] = source >> 10;
enable[BG3] = source >> 11;
enable[OBJ] = source >> 12;
enablewindow[In0] = source >> 13;
enablewindow[In1] = source >> 14;
enablewindow[Obj] = source >> 15;
return operator uint16();
}
PPU::Registers::Status::operator uint16() const {
return (
(vblank << 0)
| (hblank << 1)
| (vcoincidence << 2)
| (irqvblank << 3)
| (irqhblank << 4)
| (irqvcoincidence << 5)
| (vcompare << 8)
);
}
uint16 PPU::Registers::Status::operator=(uint16 source) {
vblank = source >> 0;
hblank = source >> 1;
vcoincidence = source >> 2;
irqvblank = source >> 3;
irqhblank = source >> 4;
irqvcoincidence = source >> 5;
vcompare = source >> 8;
return operator uint16();
}
PPU::Registers::BackgroundControl::operator uint16() const {
return (
(priority << 0)
| (characterbaseblock << 2)
| (mosaic << 6)
| (colormode << 7)
| (screenbaseblock << 8)
| (affinewrap << 13)
| (screensize << 14)
);
}
uint16 PPU::Registers::BackgroundControl::operator=(uint16 source) {
priority = source >> 0;
characterbaseblock = source >> 2;
mosaic = source >> 6;
colormode = source >> 7;
screenbaseblock = source >> 8;
affinewrap = source >> 13;
screensize = source >> 14;
return operator uint16();
}
PPU::Registers::WindowFlags::operator uint8() const {
return (
(enable[BG0] << 0)
| (enable[BG1] << 1)
| (enable[BG2] << 2)
| (enable[BG3] << 3)
| (enable[OBJ] << 4)
| (enable[SFX] << 5)
);
}
uint8 PPU::Registers::WindowFlags::operator=(uint8 source) {
enable[BG0] = source >> 0;
enable[BG1] = source >> 1;
enable[BG2] = source >> 2;
enable[BG3] = source >> 3;
enable[OBJ] = source >> 4;
enable[SFX] = source >> 5;
return operator uint8();
}
PPU::Registers::BlendControl::operator uint16() const {
return (
(above[BG0] << 0)
| (above[BG1] << 1)
| (above[BG2] << 2)
| (above[BG3] << 3)
| (above[OBJ] << 4)
| (above[SFX] << 5)
| (mode << 6)
| (below[BG0] << 8)
| (below[BG1] << 9)
| (below[BG2] << 10)
| (below[BG3] << 11)
| (below[OBJ] << 12)
| (below[SFX] << 13)
);
}
uint16 PPU::Registers::BlendControl::operator=(uint16 source) {
above[BG0] = source >> 0;
above[BG1] = source >> 1;
above[BG2] = source >> 2;
above[BG3] = source >> 3;
above[OBJ] = source >> 4;
above[SFX] = source >> 5;
mode = source >> 6;
below[BG0] = source >> 8;
below[BG1] = source >> 9;
below[BG2] = source >> 10;
below[BG3] = source >> 11;
below[OBJ] = source >> 12;
below[SFX] = source >> 13;
return operator uint16();
}