Если вы прочитали мою другую question, вы узнаете, что я провел в эти выходные, собрав эмулятор процессора 6502 как упражнение по программированию.
Эмулятор процессора в основном завершен и, по-видимому, довольно точным из моего ограниченного тестирования, однако он работает невероятно быстро, и я хочу уменьшить его до фактической тактовой частоты машины.
Мой текущий тестовый цикл:
// 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;
}
}
Как вы можете сказать, каждый код операции занимает определенное количество времени для завершения, поэтому я не запускаю следующую инструкцию, пока не посчитаю часы CPU Cycle. Это обеспечивает правильное время между кодами операций, а именно то, что вся вещь проходит быстро.
Целевая скорость процессора составляет 1,79 мГц, однако я бы хотел, чтобы любое решение проблемы с часами поддерживало скорость на 1,79 МГц, даже когда я добавляю сложность, поэтому мне не нужно ее корректировать.
Любые идеи?