Example #1
0
 public void CanLoadProgram()
 {
     Memory memory = new Memory();
     byte[] program = new byte[2];
     program[0] = 0x00;
     program[1] = 0xee;
     memory.LoadProgram(program);
     Assert.AreEqual(0x00, memory.GetValue(0x200));
     Assert.AreEqual(0xee, memory.GetValue(0x201));
 }
Example #2
0
            public void Run(string programpath)
            {
                var display = new ConsoleDisplay();
                var keyboard = new ConsoleKeyboard();
                memory = new Memory();
                cpu = new CPU(memory, display, keyboard);
                disassembler = new Disassembler();

                // Load ROM
                var romfile = File.OpenRead("ROM.bin");
                var rom = new byte[512];
                romfile.Read(rom, 0, 512);
                romfile.Close();
                memory.InitializeROM(rom);

                // Load Program
                var programfile = File.OpenRead(programpath);
                var program = new byte[3584];
                programfile.Read(program, 0, 3584);
                memory.LoadProgram(program);

                // Start clock
                Stopwatch sw = new Stopwatch();
                var cpuspeed = 6 * Stopwatch.Frequency / 1000;
                while (true){
                    var debug = keyboard.CheckKeys();
                    if (debug){
                        StartDebugging();
                        debug = false;
                        continue;
                    }

                    if(!sw.IsRunning || sw.ElapsedTicks > cpuspeed) {
                        cpu.Clock();
                        sw.Restart();
                    }
                }
            }
Example #3
0
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            SetContentView(Chip8Android.Resource.Layout.Main);
            SetClickHandler(Resource.Id.button0);
            SetClickHandler(Resource.Id.button1);
            SetClickHandler(Resource.Id.button2);
            SetClickHandler(Resource.Id.button3);
            SetClickHandler(Resource.Id.button4);
            SetClickHandler(Resource.Id.button5);
            SetClickHandler(Resource.Id.button6);
            SetClickHandler(Resource.Id.button7);
            SetClickHandler(Resource.Id.button8);
            SetClickHandler(Resource.Id.button9);
            SetClickHandler(Resource.Id.buttonA);
            SetClickHandler(Resource.Id.buttonB);
            SetClickHandler(Resource.Id.buttonC);
            SetClickHandler(Resource.Id.buttonD);
            SetClickHandler(Resource.Id.buttonE);
            SetClickHandler(Resource.Id.buttonF);

            Chip8View view = (Chip8View)FindViewById(Resource.Id.chip8view);

            var memory = new Memory();
            memory.InitializeInterpreterBuffer();
            int appno = 2;
            var apps = new string[]{
                "IBM Logo.ch8",
                "Brix.ch8",
                "Keypad Test.ch8",
                "Trip8 Demo.ch8"
            };

            var stream = Assets.Open(apps[appno]);
            byte[] buffer = new byte[3584];
            stream.Read(buffer, 0, 3584);
            memory.LoadProgram(buffer);
            keyboard = new KeyboardHandler();
            var chip8 = new CPU(memory, view, keyboard);

            timer = new System.Timers.Timer(1);
            timer.Elapsed += (sender, e) => chip8.Clock();
            timer.Enabled = true;

            //			GridView view = (GridView)FindViewById(Resource.Id.gridview);
            //			view.Adapter = new ImageAdapter(this.BaseContext);
        }