Randomize everything!
This commit is contained in:
parent
8b1c165253
commit
843683a492
81
Core/gb.c
81
Core/gb.c
@ -602,6 +602,87 @@ static void reset_ram(GB_gameboy_t *gb)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* HRAM */
|
||||||
|
switch (gb->model) {
|
||||||
|
case GB_MODEL_CGB_C:
|
||||||
|
// case GB_MODEL_CGB_D:
|
||||||
|
case GB_MODEL_CGB_E:
|
||||||
|
case GB_MODEL_AGB:
|
||||||
|
for (unsigned i = 0; i < sizeof(gb->hram); i++) {
|
||||||
|
gb->hram[i] = (random() & 0xFF);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GB_MODEL_DMG_B:
|
||||||
|
case GB_MODEL_SGB_NTSC: /* Unverified*/
|
||||||
|
case GB_MODEL_SGB_PAL: /* Unverified */
|
||||||
|
case GB_MODEL_SGB2:
|
||||||
|
for (unsigned i = 0; i < sizeof(gb->hram); i++) {
|
||||||
|
if (i & 1) {
|
||||||
|
gb->hram[i] = random() | random() | random();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
gb->hram[i] = random() & random() & random();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* OAM */
|
||||||
|
switch (gb->model) {
|
||||||
|
case GB_MODEL_CGB_C:
|
||||||
|
case GB_MODEL_CGB_E:
|
||||||
|
case GB_MODEL_AGB:
|
||||||
|
/* Zero'd out by boot ROM anyway*/
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GB_MODEL_DMG_B:
|
||||||
|
case GB_MODEL_SGB_NTSC: /* Unverified*/
|
||||||
|
case GB_MODEL_SGB_PAL: /* Unverified */
|
||||||
|
case GB_MODEL_SGB2:
|
||||||
|
for (unsigned i = 0; i < 8; i++) {
|
||||||
|
if (i & 2) {
|
||||||
|
gb->oam[i] = random() & random() & random();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
gb->oam[i] = random() | random() | random();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (unsigned i = 8; i < sizeof(gb->oam); i++) {
|
||||||
|
gb->oam[i] = gb->oam[i - 8];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Wave RAM */
|
||||||
|
switch (gb->model) {
|
||||||
|
case GB_MODEL_CGB_C:
|
||||||
|
case GB_MODEL_CGB_E:
|
||||||
|
case GB_MODEL_AGB:
|
||||||
|
/* Initialized by CGB-A and newer, 0s in CGB-0*/
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GB_MODEL_DMG_B:
|
||||||
|
case GB_MODEL_SGB_NTSC: /* Unverified*/
|
||||||
|
case GB_MODEL_SGB_PAL: /* Unverified */
|
||||||
|
case GB_MODEL_SGB2: {
|
||||||
|
uint8_t temp;
|
||||||
|
for (unsigned i = 0; i < GB_IO_WAV_END - GB_IO_WAV_START; i++) {
|
||||||
|
if (i & 1) {
|
||||||
|
temp = random() & random() & random();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
temp = random() | random() | random();
|
||||||
|
}
|
||||||
|
gb->apu.wave_channel.wave_form[i * 2] = temp >> 4;
|
||||||
|
gb->apu.wave_channel.wave_form[i * 2 + 1] = temp & 0xF;
|
||||||
|
gb->io_registers[GB_IO_WAV_START + i] = temp;
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (unsigned i = 0; i < sizeof(gb->extra_oam); i++) {
|
for (unsigned i = 0; i < sizeof(gb->extra_oam); i++) {
|
||||||
gb->extra_oam[i] = (random() & 0xFF);
|
gb->extra_oam[i] = (random() & 0xFF);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user