diff --git a/Cocoa/Preferences.xib b/Cocoa/Preferences.xib index 699f264..dcaa161 100644 --- a/Cocoa/Preferences.xib +++ b/Cocoa/Preferences.xib @@ -402,7 +402,7 @@ - + @@ -854,7 +854,7 @@ - + diff --git a/Core/apu.c b/Core/apu.c index 76171ff..ce775fb 100644 --- a/Core/apu.c +++ b/Core/apu.c @@ -901,7 +901,7 @@ static inline uint16_t effective_channel4_counter(GB_gameboy_t *gb) case GB_MODEL_SGB2: case GB_MODEL_SGB2_NO_SFC: case GB_MODEL_CGB_0: - // case GB_MODEL_CGB_A: + case GB_MODEL_CGB_A: case GB_MODEL_CGB_C: if (effective_counter & 8) { effective_counter |= 0xE; // Sometimes F on some instances diff --git a/Core/display.c b/Core/display.c index 1a36916..5ce0f2b 100644 --- a/Core/display.c +++ b/Core/display.c @@ -169,6 +169,9 @@ void GB_display_vblank(GB_gameboy_t *gb) if (gb->model == GB_MODEL_CGB_0) { index = 1; // CGB 0 was only available in Indigo! } + else if (gb->model == GB_MODEL_CGB_A) { + index = 0; // CGB 0 was only available in Indigo! + } gb->borrowed_border.palette[0] = LE16(colors[index]); gb->borrowed_border.palette[10] = LE16(colors[5 + index]); gb->borrowed_border.palette[14] = LE16(colors[10 + index]); diff --git a/Core/gb.c b/Core/gb.c index 34d9136..632c5a8 100644 --- a/Core/gb.c +++ b/Core/gb.c @@ -1409,6 +1409,7 @@ static void reset_ram(GB_gameboy_t *gb) break; case GB_MODEL_CGB_0: + case GB_MODEL_CGB_A: case GB_MODEL_CGB_B: case GB_MODEL_CGB_C: for (unsigned i = 0; i < gb->ram_size; i++) { @@ -1436,6 +1437,7 @@ static void reset_ram(GB_gameboy_t *gb) /* HRAM */ switch (gb->model) { case GB_MODEL_CGB_0: + case GB_MODEL_CGB_A: case GB_MODEL_CGB_B: case GB_MODEL_CGB_C: case GB_MODEL_CGB_D: @@ -1468,6 +1470,7 @@ static void reset_ram(GB_gameboy_t *gb) /* OAM */ switch (gb->model) { case GB_MODEL_CGB_0: + case GB_MODEL_CGB_A: case GB_MODEL_CGB_B: case GB_MODEL_CGB_C: case GB_MODEL_CGB_D: @@ -1501,6 +1504,7 @@ static void reset_ram(GB_gameboy_t *gb) /* Wave RAM */ switch (gb->model) { case GB_MODEL_CGB_0: + case GB_MODEL_CGB_A: case GB_MODEL_CGB_B: case GB_MODEL_CGB_C: case GB_MODEL_CGB_D: @@ -1578,6 +1582,7 @@ static void request_boot_rom(GB_gameboy_t *gb) case GB_MODEL_CGB_0: type = GB_BOOT_ROM_CGB_0; break; + case GB_MODEL_CGB_A: case GB_MODEL_CGB_B: case GB_MODEL_CGB_C: case GB_MODEL_CGB_D: diff --git a/Core/gb.h b/Core/gb.h index c0a16bd..c116cbc 100644 --- a/Core/gb.h +++ b/Core/gb.h @@ -97,7 +97,7 @@ typedef enum { GB_MODEL_SGB2 = 0x101, GB_MODEL_SGB2_NO_SFC = GB_MODEL_SGB2 | GB_MODEL_NO_SFC_BIT, GB_MODEL_CGB_0 = 0x200, - // GB_MODEL_CGB_A = 0x201, + GB_MODEL_CGB_A = 0x201, GB_MODEL_CGB_B = 0x202, GB_MODEL_CGB_C = 0x203, GB_MODEL_CGB_D = 0x204, diff --git a/Core/memory.c b/Core/memory.c index 977f407..913fb68 100644 --- a/Core/memory.c +++ b/Core/memory.c @@ -567,8 +567,8 @@ static uint8_t read_high_memory(GB_gameboy_t *gb, uint16_t addr) case GB_MODEL_CGB_C: case GB_MODEL_CGB_B: - // case GB_MODEL_CGB_A: - case GB_MODEL_CGB_0: + case GB_MODEL_CGB_A: + case GB_MODEL_CGB_0: addr &= ~0x18; return gb->extra_oam[addr - 0xfea0]; @@ -1228,7 +1228,7 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) break; case GB_MODEL_CGB_C: case GB_MODEL_CGB_B: - // case GB_MODEL_CGB_A: + case GB_MODEL_CGB_A: case GB_MODEL_CGB_0: addr &= ~0x18; gb->extra_oam[addr - 0xfea0] = value; diff --git a/Core/save_state.c b/Core/save_state.c index e9470bf..e090036 100644 --- a/Core/save_state.c +++ b/Core/save_state.c @@ -318,6 +318,7 @@ static bool verify_and_update_state_compatibility(GB_gameboy_t *gb, GB_gameboy_t case GB_MODEL_SGB2: return true; case GB_MODEL_SGB2_NO_SFC: return true; case GB_MODEL_CGB_0: return true; + case GB_MODEL_CGB_A: return true; case GB_MODEL_CGB_B: return true; case GB_MODEL_CGB_C: return true; case GB_MODEL_CGB_D: return true; @@ -575,6 +576,7 @@ static int save_state_internal(GB_gameboy_t *gb, virtual_file_t *file, bool appe bess_core.full_model = BE32('S2 '); break; case GB_MODEL_CGB_0: bess_core.full_model = BE32('CC0 '); break; + case GB_MODEL_CGB_A: bess_core.full_model = BE32('CCA '); break; case GB_MODEL_CGB_B: bess_core.full_model = BE32('CCB '); break; case GB_MODEL_CGB_C: bess_core.full_model = BE32('CCC '); break; case GB_MODEL_CGB_D: bess_core.full_model = BE32('CCD '); break;