//public MediaStreamSource Video //{ // get { return _video; } // set { _video = value; } //} public C64Display(C64 c64, UserInterface ui) { _ui = ui; _TheC64 = c64; CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering); //_ui.ScreenImage.Source = _image; }
public C64(UserInterface ui) { int i, j; // The thread is not yet running thread_running = false; quit_thyself = false; have_a_break = false; // Open display TheDisplay = new C64Display(this, ui); // Allocate RAM/ROM memory //RAM = new byte[0x10000]; _ram = new SystemRam(); _colorRam = new ColorRam(); _basicRom = new BasicRom(); _kernalRom = new KernalRom(); _characterRom = new CharacterRom(); //Basic = new byte[0x2000]; //Kernal = new byte[0x2000]; //Char = new byte[0x1000]; //Color = new byte[0x0400]; _ram1541 = new Drive1541Ram(); _rom1541 = new Drive1541Rom(); //RAM1541 = new byte[0x0800]; //ROM1541 = new byte[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); _ram.InitializeWithPowerUpPattern(); _colorRam.InitializeWithRandomValues(); _video = new VideoMediaStreamSource(TheSID.Renderer.AudioStream, C64Display.DISPLAY_X, C64Display.DISPLAY_Y); TheDisplay.Initialize(); #if false //unsafe //{ // fixed (byte* pRAM = RAM, pColor = Color) // { // byte* p = pRAM; // // Initialize RAM with powerup pattern // for (i = 0; i < 512; i++) // { // for (j = 0; j < 64; j++) // *p++ = 0; // for (j = 0; j < 64; j++) // *p++ = 0xff; // } // Random rand = new Random(); // p = pColor; // // Initialize color RAM with random values // for (i = 0; i < 1024; i++) // *p++ = (byte)(rand.Next() & 0x0f); // } //} #endif // Open joystick drivers if required open_close_joysticks(false, false, GlobalPrefs.ThePrefs.Joystick1On, GlobalPrefs.ThePrefs.Joystick2On); joykey = 0xff; CycleCounter = 0; // No need to check for state change. state_change = false; // TODO frameTimer.Reset(); frameTimer.Start(); }