Вопрос о точности подсчета циклов при эмуляции ЦП

Я планирую создать эмулятор Sega Master System в течение следующих нескольких месяцев в качестве хобби-проекта на Java (я знаю, что это не лучший язык для этого. но мне очень удобно работать, и, как частый пользователь как Windows, так и Linux, я подумал, что кроссплатформенное приложение будет отличным). Мой вопрос касается подсчета циклов;

Я просмотрел исходный код для другой эмулятор Z80, а также для других эмуляторов, и в частности цикл выполнения меня заинтриговал - когда он вызывается, в качестве аргумента передается int (скажем, 1000 в качестве примера). Теперь я понимаю, что каждый код операции принимает другой количество циклов для выполнения, и что по мере их выполнения количество циклов уменьшается от ov фигура Эралла. Как только количество оставшихся циклов становится <= 0, цикл выполнения завершается.

Мой вопрос в том, что многие из этих эмуляторов не принимают во внимание тот факт, что последняя выполняемая инструкция может увеличить количество циклов до отрицательное значение - это означает, что между циклами выполнения может получиться, скажем, 1002 цикла вместо 1000. Это важно? Некоторые эмуляторы учитывают это, компенсируя следующий цикл выполнения, а некоторые нет - какой подход лучше? Позвольте мне проиллюстрировать свой вопрос, поскольку я не очень хорошо умею объяснять себя:

public void execute(int numOfCycles) 
{ //this is an execution loop method, called with 1000.
   while (numOfCycles > 0)
   {
      instruction = readInstruction();
      switch (instruction)
      {
         case 0x40: dowhatever, then decrement numOfCycles by 5;
         break; 
         //lets say for arguments sake this case is executed when numOfCycles is 3.
      }
}

После окончания этого конкретного примера цикла numOfCycles будет равно -2. Это будет лишь небольшая неточность, но имеет ли это значение в целом для опыта людей? Я был бы признателен за чье-либо понимание этого. Я планирую прерывать работу процессора после каждого кадра, поскольку это кажется уместным, так что 1000 циклов - это мало, я знаю, это всего лишь пример.

Большое спасибо, Phil

6
задан PhilPotter1987 19 August 2011 в 14:21
поделиться