Ejemplo n.º 1
0
void initCPU(cpu* _cpu)
{
    _cpu->_mmu = (mmu*)malloc(sizeof(mmu));
    initMMU(_cpu->_mmu);
    _cpu->step = step;
    _cpu->doOp = doOp;
    return;
}
Ejemplo n.º 2
0
void initializeGameboy() {
    sgbMode = false;

    switch(gbcModeOption) {
        case 0: // GB
            initGBMode();
            break;
        case 1: // GBC if needed
            if (rom[0][0x143] == 0xC0)
                initGBCMode();
            else
                initGBMode();
            break;
        case 2: // GBC
            if (rom[0][0x143] == 0x80 || rom[0][0x143] == 0xC0)
                initGBCMode();
            else
                initGBMode();
            break;
    }

    bool sgbEnhanced = rom[0][0x14b] == 0x33 && rom[0][0x146] == 0x03;
    if (sgbEnhanced && resultantGBMode != 2 && probingForBorder) {
        resultantGBMode = 2;
        nukeBorder = false;
    }
    else {
        probingForBorder = false;
    }

    initMMU();
    initCPU();
    initLCD();
    initGFX();
    initSND();

    if (!probingForBorder && suspendStateExists) {
        loadState(-1);
        // enter the console on resume
        advanceFrame = true;
    }
    updateScreens();
}