Example #1
0
        public VIC_II(C64 _c64) : base(0xd000, 0xd3ff)
        {
            C64 = _c64;

            Palette     = new Color[16];
            Palette[0]  = Color.FromArgb(0xff, 0x00, 0x00, 0x00);
            Palette[1]  = Color.FromArgb(0xff, 0xff, 0xff, 0xff);
            Palette[2]  = Color.FromArgb(0xff, 0x68, 0x37, 0x2b);
            Palette[3]  = Color.FromArgb(0xff, 0x70, 0xa4, 0xb2);
            Palette[4]  = Color.FromArgb(0xff, 0x6F, 0x3D, 0x86);
            Palette[5]  = Color.FromArgb(0xff, 0x58, 0x8D, 0x43);
            Palette[6]  = Color.FromArgb(0xff, 0x35, 0x28, 0x79);
            Palette[7]  = Color.FromArgb(0xff, 0xB8, 0xC7, 0x6F);
            Palette[8]  = Color.FromArgb(0xff, 0x6F, 0x4F, 0x25);
            Palette[9]  = Color.FromArgb(0xff, 0x43, 0x39, 0x00);
            Palette[10] = Color.FromArgb(0xff, 0x9A, 0x67, 0x59);
            Palette[11] = Color.FromArgb(0xff, 0x44, 0x44, 0x44);
            Palette[12] = Color.FromArgb(0xff, 0x6C, 0x6C, 0x6C);
            Palette[13] = Color.FromArgb(0xff, 0x9A, 0xD2, 0x84);
            Palette[14] = Color.FromArgb(0xff, 0x6C, 0x5E, 0xB5);
            Palette[15] = Color.FromArgb(0xff, 0x95, 0x95, 0x95);

            Screen = new Bitmap(Settings.PixelsPerScanLine, Settings.NumScanLines, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);

            if (Screen.Palette.Flags > 0)
            {
                ColorPalette pal = Screen.Palette;
                for (int i = 0; i < 16; i++)
                {
                    pal.Entries[i] = Palette[i];
                }
                Screen.Palette = pal;
            }
        }
Example #2
0
 public PLA(C64 _c64)
 {
     C64 = _c64;
     Reset();
 }
Example #3
0
        public void Process(C64 _c64)
        {
            xSignal.CopyFrom(Signal);
            Signal.toInactive();

            //  collision?

            //  CIA2: let host signal
            byte PRA = _c64.CIA2.PRA;

            if ((PRA & (1 << 3)) > 0)
            {
                Signal.ATN += 1;
            }

            if ((PRA & (1 << 4)) > 0)
            {
                Signal.CLK += 1;
            }

            if ((PRA & (1 << 5)) > 0)
            {
                Signal.DATA += 1;
            }

            //  floppy output
            C1541 floppy = _c64.Floppy;

            if (floppy.DATA_OUT)
            {
                Signal.DATA += 2;
            }

            if (floppy.CLOCK_OUT)
            {
                Signal.CLK += 2;
            }

            //  collision?
            if ((Signal.ATN == 3) ||
                (Signal.CLK == 3) ||
                (Signal.DATA == 3))
            {
                Console.Out.WriteLine("IEC: collision");
            }

            //
            //  inputs
            //

            //  floppy input
            floppy.ATN_IN   = (Signal.ATN > 0);
            floppy.CLOCK_IN = (Signal.CLK > 0);
            floppy.DATA_IN  = (Signal.DATA > 0);

            //  CIA2 input
            _c64.CIA2.PRA &= 0x3f;
            if (Signal.CLK == 0)
            {
                _c64.CIA2.PRA |= (1 << 6);
            }
            else
            {
                _c64.CIA2.PRA &= 0xbf;
            }

            if (Signal.DATA == 0)
            {
                _c64.CIA2.PRA |= (1 << 7);
            }
            else
            {
                _c64.CIA2.PRA &= 0x7f;
            }

            //
            //  Trace
            //
            if ((Signal.ATN != xSignal.ATN) ||
                (Signal.DATA != xSignal.DATA) ||
                (Signal.CLK != xSignal.CLK))
            {
                string str = "";

                str += string.Format("ATN:{0}  ", Signal.ATN);
                str += string.Format("CLK:{0}  ", Signal.CLK);
                str += string.Format("DATA:{0}  ", Signal.DATA);

                Console.Out.WriteLine(str);
            }
        }
Example #4
0
 public IOMemoryBank(C64 _c64, int _offset, int _len) : base(_offset, _len)
 {
     C64 = _c64;
 }