GBA: Update some register information with new stereoscopy discoveries

This commit is contained in:
Vicki Pfau 2025-02-07 03:03:09 -08:00
parent 92e10f31ea
commit 2e7918d8b2
7 changed files with 12 additions and 10 deletions

View File

@ -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,

View File

@ -110,7 +110,7 @@ struct GBAVideoSoftwareRenderer {
uint16_t bldy;
GBAMosaicControl mosaic;
bool greenswap;
bool stereo;
struct WindowN {
struct GBAVideoWindowRegion h;

View File

@ -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);

View File

@ -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:

View File

@ -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;

View File

@ -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) {

View File

@ -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 },
});