Пример #1
0
        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;
            }
        }
Пример #2
0
        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();
            }
        }
Пример #3
0
        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);
            }
        }