mirror of https://github.com/mgba-emu/mgba.git
GBA: Update some register information with new stereoscopy discoveries
This commit is contained in:
parent
92e10f31ea
commit
2e7918d8b2
|
@ -17,7 +17,7 @@ CXX_GUARD_START
|
|||
enum GBAIORegisters {
|
||||
// Video
|
||||
GBA_REG_DISPCNT = 0x000,
|
||||
GBA_REG_GREENSWP = 0x002,
|
||||
GBA_REG_STEREOCNT = 0x002,
|
||||
GBA_REG_DISPSTAT = 0x004,
|
||||
GBA_REG_VCOUNT = 0x006,
|
||||
GBA_REG_BG0CNT = 0x008,
|
||||
|
|
|
@ -110,7 +110,7 @@ struct GBAVideoSoftwareRenderer {
|
|||
uint16_t bldy;
|
||||
|
||||
GBAMosaicControl mosaic;
|
||||
bool greenswap;
|
||||
bool stereo;
|
||||
|
||||
struct WindowN {
|
||||
struct GBAVideoWindowRegion h;
|
||||
|
|
|
@ -42,7 +42,8 @@ enum {
|
|||
enum GBAVideoObjMode {
|
||||
OBJ_MODE_NORMAL = 0,
|
||||
OBJ_MODE_SEMITRANSPARENT = 1,
|
||||
OBJ_MODE_OBJWIN = 2
|
||||
OBJ_MODE_OBJWIN = 2,
|
||||
OBJ_MODE_STEREO = 3,
|
||||
};
|
||||
|
||||
enum GBAVideoObjShape {
|
||||
|
@ -142,6 +143,7 @@ DECL_BITS(GBARegisterDISPSTAT, VcountSetting, 8, 8);
|
|||
DECL_BITFIELD(GBARegisterBGCNT, uint16_t);
|
||||
DECL_BITS(GBARegisterBGCNT, Priority, 0, 2);
|
||||
DECL_BITS(GBARegisterBGCNT, CharBase, 2, 2);
|
||||
DECL_BITS(GBARegisterBGCNT, StereoMode, 4, 2);
|
||||
DECL_BIT(GBARegisterBGCNT, Mosaic, 6);
|
||||
DECL_BIT(GBARegisterBGCNT, 256Color, 7);
|
||||
DECL_BITS(GBARegisterBGCNT, ScreenBase, 8, 5);
|
||||
|
|
|
@ -934,7 +934,7 @@ uint16_t GBAIORead(struct GBA* gba, uint32_t address) {
|
|||
}
|
||||
// Fall through
|
||||
case GBA_REG_DISPCNT:
|
||||
case GBA_REG_GREENSWP:
|
||||
case GBA_REG_STEREOCNT:
|
||||
case GBA_REG_DISPSTAT:
|
||||
case GBA_REG_VCOUNT:
|
||||
case GBA_REG_BG0CNT:
|
||||
|
|
|
@ -136,7 +136,7 @@ static void GBAVideoSoftwareRendererReset(struct GBAVideoRenderer* renderer) {
|
|||
softwareRenderer->oamMax = 0;
|
||||
|
||||
softwareRenderer->mosaic = 0;
|
||||
softwareRenderer->greenswap = false;
|
||||
softwareRenderer->stereo = false;
|
||||
softwareRenderer->nextY = 0;
|
||||
|
||||
softwareRenderer->objOffsetX = 0;
|
||||
|
@ -195,8 +195,8 @@ static uint16_t GBAVideoSoftwareRendererWriteVideoRegister(struct GBAVideoRender
|
|||
softwareRenderer->dispcnt = value;
|
||||
GBAVideoSoftwareRendererUpdateDISPCNT(softwareRenderer);
|
||||
break;
|
||||
case GBA_REG_GREENSWP:
|
||||
softwareRenderer->greenswap = value & 1;
|
||||
case GBA_REG_STEREOCNT:
|
||||
softwareRenderer->stereo = value & 1;
|
||||
break;
|
||||
case GBA_REG_BG0CNT:
|
||||
value &= 0xDFFF;
|
||||
|
@ -705,7 +705,7 @@ static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* render
|
|||
}
|
||||
|
||||
int x;
|
||||
if (softwareRenderer->greenswap) {
|
||||
if (softwareRenderer->stereo) {
|
||||
for (x = 0; x < GBA_VIDEO_HORIZONTAL_PIXELS; x += 4) {
|
||||
row[x] = softwareRenderer->row[x] & (M_COLOR_RED | M_COLOR_BLUE);
|
||||
row[x] |= softwareRenderer->row[x + 1] & M_COLOR_GREEN;
|
||||
|
|
|
@ -128,7 +128,7 @@ void GBAVideoAssociateRenderer(struct GBAVideo* video, struct GBAVideoRenderer*
|
|||
video->renderer->init(video->renderer);
|
||||
video->renderer->reset(video->renderer);
|
||||
renderer->writeVideoRegister(renderer, GBA_REG_DISPCNT, video->p->memory.io[GBA_REG(DISPCNT)]);
|
||||
renderer->writeVideoRegister(renderer, GBA_REG_GREENSWP, video->p->memory.io[GBA_REG(GREENSWP)]);
|
||||
renderer->writeVideoRegister(renderer, GBA_REG_STEREOCNT, video->p->memory.io[GBA_REG(STEREOCNT)]);
|
||||
int address;
|
||||
for (address = GBA_REG_BG0CNT; address < 0x56; address += 2) {
|
||||
if (address == 0x4E) {
|
||||
|
|
|
@ -60,7 +60,7 @@ const QList<IOViewer::RegisterDescription>& IOViewer::registerDescriptions(mPlat
|
|||
{ tr("Enable Window 1"), 14 },
|
||||
{ tr("Enable OBJ Window"), 15 },
|
||||
});
|
||||
// 0x04000002: Green swap
|
||||
// 0x04000002: STEREOCNT
|
||||
regGBA.append({
|
||||
{ tr("Swap green components"), 0 },
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue