Пример #1
0
C64::~C64()
{
    open_close_joysticks(ThePrefs.Joystick1On, ThePrefs.Joystick2On, false, false);

    delete TheJob1541;
    delete TheREU;
    delete TheIEC;
    delete TheCIA2;
    delete TheCIA1;
    delete TheSID;
    delete TheVIC;
    delete TheCPU1541;
    delete TheCPU;
    delete TheDisplay;

    delete[] RAM;
    delete[] Basic;
    delete[] Kernal;
    delete[] Char;
    delete[] Color;
    delete[] RAM1541;
    delete[] ROM1541;

    c64_dtor();
}
Пример #2
0
void C64::NewPrefs(Prefs *prefs)
{
    open_close_joysticks(ThePrefs.Joystick1Port, ThePrefs.Joystick2Port, prefs->Joystick1Port, prefs->Joystick2Port);
    PatchKernal(prefs->FastReset, prefs->Emul1541Proc);

    TheDisplay->NewPrefs(prefs);

#ifdef __riscos__
    // Changed order of calls. If 1541 mode hasn't changed the order is insignificant.
    if (prefs->Emul1541Proc) {
        // New prefs have 1541 enabled ==> if old prefs had disabled free drives FIRST
        TheIEC->NewPrefs(prefs);
        TheJob1541->NewPrefs(prefs);
    } else {
        // New prefs has 1541 disabled ==> if old prefs had enabled free job FIRST
        TheJob1541->NewPrefs(prefs);
        TheIEC->NewPrefs(prefs);
    }
#else
    TheIEC->NewPrefs(prefs);
    TheJob1541->NewPrefs(prefs);
#endif

    TheREU->NewPrefs(prefs);
    TheSID->NewPrefs(prefs);

    // Reset 1541 processor if turned on
    if (!ThePrefs.Emul1541Proc && prefs->Emul1541Proc)
        TheCPU1541->AsyncReset();
}
Пример #3
0
void C64::NewPrefs(Prefs *prefs)
{
    open_close_joysticks(ThePrefs.Joystick1On, ThePrefs.Joystick2On, prefs->Joystick1On, prefs->Joystick2On);
    PatchKernal(prefs->FastReset, prefs->Emul1541Proc);

    TheDisplay->NewPrefs(prefs);

    TheIEC->NewPrefs(prefs);
    TheJob1541->NewPrefs(prefs);

    TheREU->NewPrefs(prefs);
    TheSID->NewPrefs(prefs);

    // Reset 1541 processor if turned on
    if (!ThePrefs.Emul1541Proc && prefs->Emul1541Proc)
        TheCPU1541->AsyncReset();
}
Пример #4
0
C64::C64()
{
    int i,j;
    uint8 *p;

    // The thread is not yet running
    thread_running = false;
    quit_thyself = false;
    have_a_break = false;

    // System-dependent things
    c64_ctor1();

    // Open display
    TheDisplay = new C64Display(this);

    // Allocate RAM/ROM memory
    RAM = new uint8[0x10000];
    Basic = new uint8[0x2000];
    Kernal = new uint8[0x2000];
    Char = new uint8[0x1000];
    Color = new uint8[0x0400];
    RAM1541 = new uint8[0x0800];
    ROM1541 = new uint8[0x4000];

    // Create the chips
    TheCPU = new MOS6510(this, RAM, Basic, Kernal, Char, Color);

    TheJob1541 = new Job1541(RAM1541);
    TheCPU1541 = new MOS6502_1541(this, TheJob1541, TheDisplay, RAM1541, ROM1541);

    TheVIC = TheCPU->TheVIC = new MOS6569(this, TheDisplay, TheCPU, RAM, Char, Color);
    TheSID = TheCPU->TheSID = new MOS6581(this);
    TheCIA1 = TheCPU->TheCIA1 = new MOS6526_1(TheCPU, TheVIC);
    TheCIA2 = TheCPU->TheCIA2 = TheCPU1541->TheCIA2 = new MOS6526_2(TheCPU, TheVIC, TheCPU1541);
    TheIEC = TheCPU->TheIEC = new IEC(TheDisplay);
    TheREU = TheCPU->TheREU = new REU(TheCPU);

    // Initialize RAM with powerup pattern
    for (i=0, p=RAM; i<512; i++) {
        for (j=0; j<64; j++)
            *p++ = 0;
        for (j=0; j<64; j++)
            *p++ = 0xff;
    }

    // Initialize color RAM with random values
    for (i=0, p=Color; i<1024; i++)
        *p++ = rand() & 0x0f;

    // Clear 1541 RAM
    memset(RAM1541, 0, 0x800);

    // Open joystick drivers if required
    open_close_joysticks(false, false, ThePrefs.Joystick1On, ThePrefs.Joystick2On);
    joykey = 0xff;

#ifdef FRODO_SC
    CycleCounter = 0;
#endif

    // System-dependent things
    c64_ctor2();
}
Пример #5
0
C64::C64()
{
    uint8 *p;

    // The thread is not yet running
    thread_running = false;
    quit_thyself = false;
    have_a_break = 0;

    // System-dependent things
    c64_ctor1();

    // Open display
    TheDisplay = new C64Display(this);

    // Allocate RAM/ROM memory
    RAM = new uint8[C64_RAM_SIZE];
    Basic = new uint8[BASIC_ROM_SIZE];
    Kernal = new uint8[KERNAL_ROM_SIZE];
    Char = new uint8[CHAR_ROM_SIZE];
    Color = new uint8[COLOR_RAM_SIZE];
    RAM1541 = new uint8[DRIVE_RAM_SIZE];
    ROM1541 = new uint8[DRIVE_ROM_SIZE];

    // Create the chips
    TheCPU = new MOS6510(this, RAM, Basic, Kernal, Char, Color);

    TheJob1541 = new Job1541(RAM1541);
    TheCPU1541 = new MOS6502_1541(this, TheJob1541, TheDisplay, RAM1541, ROM1541);

    TheVIC = TheCPU->TheVIC = new MOS6569(this, TheDisplay, TheCPU, RAM, Char, Color);
    TheSID = TheCPU->TheSID = new MOS6581(this);
    TheCIA1 = TheCPU->TheCIA1 = new MOS6526_1(TheCPU, TheVIC);
    TheCIA2 = TheCPU->TheCIA2 = TheCPU1541->TheCIA2 = new MOS6526_2(TheCPU, TheVIC, TheCPU1541);
    TheIEC = TheCPU->TheIEC = new IEC(TheDisplay);
    TheREU = TheCPU->TheREU = new REU(TheCPU);

    // Initialize RAM with powerup pattern
    p = RAM;
    for (unsigned i=0; i<512; i++) {
        for (unsigned j=0; j<64; j++)
            *p++ = 0;
        for (unsigned j=0; j<64; j++)
            *p++ = 0xff;
    }

    // Initialize color RAM with random values
    p = Color;
    for (unsigned i=0; i<COLOR_RAM_SIZE; i++)
        *p++ = rand() & 0x0f;

    // Clear 1541 RAM
    memset(RAM1541, 0, DRIVE_RAM_SIZE);

    // Open joystick drivers if required
    open_close_joysticks(0, 0, ThePrefs.Joystick1Port, ThePrefs.Joystick2Port);
    joykey = 0xff;

#ifdef FRODO_SC
    CycleCounter = 0;
#endif

    // System-dependent things
    c64_ctor2();
}