Как сделать 8 051 эмулятор

Просто поймайте исключение. Маленькие издержки от ловли исключения тонут по сравнению с парсингом XML.

, Если Вы хотите функцию (по стилистическим причинам, не по производительности), реализуйте его сами:

public class MyXmlDocument: XmlDocument
{
  bool TryParseXml(string xml){
    try{
      ParseXml(xml);
      return true;
    }catch(XmlException e){
      return false;
    }
 }
6
задан K Singh 24 November 2009 в 09:09
поделиться

2 ответа

Я думаю, вы не совсем понимаете масштаб этого проекта, по крайней мере, в отношении названия.

Эмулятор ] выполняет двоичный код и ничего больше. Эмулятор не включает ни редактор (это инструмент разработки), ни ассемблер (то же самое). Ответственность за проверку и перевод синтаксиса лежит на ассемблере, таким образом, эмулятор выполняет только относительно простую работу по выполнению предварительно проверенного юридического кода.

Похоже, вы хотите создать полную IDE. Это обернуло бы много графического интерфейса вокруг редактора, ассемблера и эмулятора. Я бы оставил этот шаг последним.


Что касается ваших вопросов относительно самого эмулятора:

Вы можете использовать массив до (например) 64 Кбайт в качестве рабочей памяти эмулятора. Вы используете в своей программе переменные для имитации регистров. Я бы использовал unsigned char * для имитации программного счетчика и int s для большинства других вещей ...

Операция довольно проста: запустите программный счетчик с 0 (или заранее определенное место загрузки) и запускает цикл, который выбирает инструкции через этот указатель и применяет к регистрам и памяти любую операцию, связанную с инструкцией. Простая реализация будет сосредоточена вокруг огромного оператора switch , который включает все возможные коды инструкций.

Как я уже сказал, ваш эмулятор не должен беспокоиться о незаконных инструкциях, потому что ассемблер не должен их создавать. Вы можете остановить свою программу (т.е. основной цикл), если она обнаружит недопустимую операцию.

Точно так же вашему эмулятору не нужно беспокоиться о превышении диапазона, индекса или размера ... это тоже проблема ассемблера, или, может быть, компоновщик, если он у вас есть.


Обновление: Несколько указателей прямо здесь, в SO:

Emulator Framework

7
ответ дан 8 December 2019 в 18:37
поделиться

Недавно я собрал эмулятор для микросхемы AVR, которая также является небольшим 8-битным микроконтроллером. Источник находится на GitHub как ghewgill / emulino . Самый интересный файл - cpu.c , который содержит реализации каждой инструкции ЦП. Ключевые строки находятся в cpu_run () (без некоторых деталей):

while (state == CPU_RUN) {
    u16 instr = Program[PC++];
    Instr[instr](instr);
}

Это загружает 16-битное слово из памяти программы, на которую указывает регистр ПК, а затем использует его как индекс в инструкции таблица переходов (которая представляет собой массив из 64 Кб указателей на функции - фактическая таблица создается сценарием во время компиляции). Эта функция будет одной из функций do_XXX () в этом исходном файле и может выполнять дальнейшее декодирование инструкции перед выполнением самой инструкции. Например, функция do_ADD () :

6
ответ дан 8 December 2019 в 18:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: