CPU-Emulation und sperren, die eine bestimmte Taktfrequenz

Wenn Sie hatten, Lesen Sie meine anderen Frage, wissen Sie, ich habe dieses Wochenende zusammen eine 6502-CPU emulator als Programmier-übung.

Den CPU-emulator ist weitgehend abgeschlossen, und scheint zu sein, ziemlich genau aus meiner begrenzten testen, aber es läuft unglaublich schnell, und ich will Gas nach unten auf das tatsächliche Taktrate der Maschine.

Meiner aktuellen test-Schleife ist dieses:

    //Just loop infinitely.
    while (1 == 1)
    {                
        CPU.ClockCyclesBeforeNext--;

        if (CPU.ClockCyclesBeforeNext <= 0)
        {
            //Find out how many clock cycles this instruction will take
            CPU.ClockCyclesBeforeNext = CPU.OpcodeMapper.Map[CPU.Memory[CPU.PC]].CpuCycles;

            //Run the instruction
            CPU.ExecuteInstruction(CPU.Memory[CPU.PC]);

            //Debugging Info
            CPU.DumpDebug();
            Console.WriteLine(CPU.OpcodeMapper.Map[CPU.Memory[CPU.PC]].ArgumentLength);

            //Move to next instruction
            CPU.PC += 1 + CPU.OpcodeMapper.Map[CPU.Memory[CPU.PC]].ArgumentLength;                                        
        }
    }

Wie Sie sagen können, jeder Befehl dauert eine bestimmte Zeit abgeschlossen, so dass ich das nicht ausführen des nächsten Befehls, bis ich die count-down-CPU-Zyklus-Uhr. Dies liefert das richtige timing zwischen opcodes, seine nur, dass die ganze Sache läuft viel zu schnell.

Der Ziel-CPU-Geschwindigkeit ist 1.79 mhz, aber ich würde gerne welche Lösung auch immer um-die-Uhr-Ausgabe zu halten, die Geschwindigkeit, mit 1.79 mhz auch, wie ich hinzufügen, Komplexität, so dass ich nicht haben, um Sie einzustellen.

Irgendwelche Ideen?

InformationsquelleAutor FlySwat | 2008-09-21

Schreibe einen Kommentar