void write_byte_io(UInt16 adr, byte abyte) { if (adr >= 0xe000) { ram[adr] = abyte; if (adr == 0xff00) { TheREU.FF00Trigger(); } } else if (io_in) { switch ((adr >> 8) & 0x0f) { case 0x0: // VIC case 0x1: case 0x2: case 0x3: TheVIC.WriteRegister((UInt16)(adr & 0x3f), abyte); return; case 0x4: // SID case 0x5: case 0x6: case 0x7: TheSID.WriteRegister((UInt16)(adr & 0x1f), abyte); return; case 0x8: // Color RAM case 0x9: case 0xa: case 0xb: color_ram[adr & 0x03ff] = (byte)(abyte & 0x0f); return; case 0xc: // CIA 1 TheCIA1.WriteRegister((UInt16)(adr & 0x0f), abyte); return; case 0xd: // CIA 2 TheCIA2.WriteRegister((UInt16)(adr & 0x0f), abyte); return; case 0xe: // REU/Open I/O case 0xf: if ((adr & 0xfff0) == 0xdf00) { TheREU.WriteRegister((UInt16)(adr & 0x0f), abyte); } return; } } else { ram[adr] = abyte; } }
public void NewPrefs(Prefs prefs) { open_close_joysticks(GlobalPrefs.ThePrefs.Joystick1On, GlobalPrefs.ThePrefs.Joystick2On, prefs.Joystick1On, prefs.Joystick2On); patch_kernel(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 (!GlobalPrefs.ThePrefs.Emul1541Proc && prefs.Emul1541Proc) { TheCPU1541.AsyncReset(); } }
byte read_byte_io(UInt16 adr) { switch (adr >> 12) { case 0xa: case 0xb: if (basic_in) { return(basic_rom[adr & 0x1fff]); } else { return(ram[adr]); } case 0xc: return(ram[adr]); case 0xd: if (io_in) { switch ((adr >> 8) & 0x0f) { case 0x0: // VIC case 0x1: case 0x2: case 0x3: return(TheVIC.ReadRegister((UInt16)(adr & 0x3f))); case 0x4: // SID case 0x5: case 0x6: case 0x7: return(TheSID.ReadRegister((UInt16)(adr & 0x1f))); case 0x8: // Color RAM case 0x9: case 0xa: case 0xb: return((byte)(color_ram[adr & 0x03ff] & 0x0f | TheVIC.LastVICByte & 0xf0)); case 0xc: // CIA 1 return(TheCIA1.ReadRegister((UInt16)(adr & 0x0f))); case 0xd: // CIA 2 return(TheCIA2.ReadRegister((UInt16)(adr & 0x0f))); case 0xe: // REU/Open I/O case 0xf: if ((adr & 0xfff0) == 0xdf00) { return(TheREU.ReadRegister((UInt16)(adr & 0x0f))); } else if (adr < 0xdfa0) { return(TheVIC.LastVICByte); } else { return(read_emulator_id((UInt16)(adr & 0x7f))); } } } else if (char_in) { return(char_rom[adr & 0x0fff]); } return(ram[adr]); case 0xe: case 0xf: if (kernal_in) { return(kernel_rom[adr & 0x1fff]); } else { return(ram[adr]); } default: // Can't happen return(0); } }