Document some revision differences
This commit is contained in:
parent
0145b790a3
commit
2e9e3424ec
@ -381,7 +381,10 @@ void GB_apu_run(GB_gameboy_t *gb)
|
||||
if (gb->model == GB_MODEL_CGB_C) {
|
||||
/* Todo: This was confirmed to happen on a CGB-C. This may or may not happen on pre-CGB models.
|
||||
Because this degrades audio quality, and testing this on a pre-CGB device requires audio records,
|
||||
I'll assume these devices are innocent until proven guilty. */
|
||||
I'll assume these devices are innocent until proven guilty.
|
||||
|
||||
Also happens on CGB-B, but not on CGB-D.
|
||||
*/
|
||||
gb->apu.current_lfsr_sample &= gb->apu.previous_lfsr_sample;
|
||||
}
|
||||
gb->apu.previous_lfsr_sample = gb->apu.noise_channel.lfsr & 1;
|
||||
|
@ -447,7 +447,7 @@ static void reset_ram(GB_gameboy_t *gb)
|
||||
{
|
||||
switch (gb->model) {
|
||||
case GB_MODEL_CGB_E:
|
||||
default:
|
||||
case GB_MODEL_AGB: /* Unverified */
|
||||
for (unsigned i = 0; i < gb->ram_size; i++) {
|
||||
gb->ram[i] = (random() & 0xFF);
|
||||
}
|
||||
|
16
Core/gb.h
16
Core/gb.h
@ -22,24 +22,22 @@
|
||||
|
||||
#define GB_STRUCT_VERSION 13
|
||||
|
||||
typedef enum {
|
||||
#ifdef GB_INTERNAL
|
||||
GB_MODEL_FAMILY_MASK = 0xF00,
|
||||
GB_MODEL_DMG_FAMILY = 0x000,
|
||||
#define GB_MODEL_FAMILY_MASK 0xF00
|
||||
#define GB_MODEL_DMG_FAMILY 0x000
|
||||
#define GB_MODEL_MGB_FAMILY 0x100
|
||||
#define GB_MODEL_CGB_FAMILY 0x200
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
|
||||
// GB_MODEL_DMG_0 = 0x000,
|
||||
// GB_MODEL_DMG_A = 0x001,
|
||||
GB_MODEL_DMG_B = 0x002,
|
||||
// GB_MODEL_DMG_C = 0x003,
|
||||
// GB_MODEL_SGB = 0x004,
|
||||
#ifdef GB_INTERNAL
|
||||
GB_MODEL_MGB_FAMILY = 0x100,
|
||||
#endif
|
||||
// GB_MODEL_MGB = 0x100,
|
||||
// GB_MODEL_SGB2 = 0x101,
|
||||
#ifdef GB_INTERNAL
|
||||
GB_MODEL_CGB_FAMILY = 0x200,
|
||||
#endif
|
||||
// GB_MODEL_CGB_0 = 0x200,
|
||||
// GB_MODEL_CGB_A = 0x201,
|
||||
// GB_MODEL_CGB_B = 0x202,
|
||||
|
@ -253,11 +253,24 @@ static uint8_t read_high_memory(GB_gameboy_t *gb, uint16_t addr)
|
||||
case GB_MODEL_AGB:
|
||||
return (addr & 0xF0) | ((addr >> 4) & 0xF);
|
||||
|
||||
/*
|
||||
case GB_MODEL_CGB_D:
|
||||
if (addr > 0xfec0) {
|
||||
addr |= 0xf0;
|
||||
}
|
||||
return gb->extra_oam[addr - 0xfea0];
|
||||
*/
|
||||
|
||||
case GB_MODEL_CGB_C:
|
||||
/*
|
||||
case GB_MODEL_CGB_B:
|
||||
case GB_MODEL_CGB_A:
|
||||
case GB_MODEL_CGB_0:
|
||||
*/
|
||||
addr &= ~0x18;
|
||||
return gb->extra_oam[addr - 0xfea0];
|
||||
|
||||
default:
|
||||
case GB_MODEL_DMG_B:
|
||||
;
|
||||
}
|
||||
}
|
||||
@ -544,11 +557,26 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value)
|
||||
gb->oam[addr & 0xFF] = value;
|
||||
}
|
||||
switch (gb->model) {
|
||||
/*
|
||||
case GB_MODEL_CGB_D:
|
||||
if (addr > 0xfec0) {
|
||||
addr |= 0xf0;
|
||||
}
|
||||
gb->extra_oam[addr - 0xfea0] = value;
|
||||
break;
|
||||
*/
|
||||
case GB_MODEL_CGB_C:
|
||||
/*
|
||||
case GB_MODEL_CGB_B:
|
||||
case GB_MODEL_CGB_A:
|
||||
case GB_MODEL_CGB_0:
|
||||
*/
|
||||
addr &= ~0x18;
|
||||
gb->extra_oam[addr - 0xfea0] = value;
|
||||
break;
|
||||
default:
|
||||
case GB_MODEL_DMG_B:
|
||||
case GB_MODEL_CGB_E:
|
||||
case GB_MODEL_AGB:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user