Как запустить набор тестов 6502 Клауса Дормана на реальном оборудовании с отдельными ПЗУ и ОЗУ

Я хотел бы запустить полный набор тестов 6502 от Клауса Дормана для тестирования моя реализация Kansas Lava 6502. Однако в коде используется самомодификация (см. Все варианты использования range_adr) , который, хотя и тривиально реализовать в эмуляторе, не сулит ничего хорошего для аппаратной реализации: образ программы должен храниться в ПЗУ, поэтому обратная запись будет заблокирована любыми маршрутами записи на основе адресации ПЗУ или Детали с RAM-поддержкой.

Одна и та же проблема, конечно, применима как к его синтезу в реальной FPGA, так и к запуску в симуляторе (низкоуровневом VHDL или высокоуровневом Kansas Lava).

Есть ли способ запустить набор тестов, не выполняя длительную (с точки зрения циклов) пляску приостановки ЦП, побайтно копируя программу из некоторого неадресуемого ПЗУ в память, полностью состоящую из ОЗУ, а затем инициализируя ЦП и позволяя ему бежать? Я бы предпочел не делать этого, потому что имитация этих дополнительных циклов при запуске значительно замедлит выполнение теста.


person Cactus    schedule 07.07.2015    source источник


Ответы (1)


Наблюдения за коленным рефлексом:

Несмотря на то, что он представлен в виде изображения размером 64 КБ, на самом деле тест представляет собой всего 14 093 байта фактического содержимого, от 0000 до 370 долларов, затем заполненное заполнение от $ ffs до трех векторов в $ fffa– $ ffff. Таким образом, вам нужно скопировать максимум 14 099 байтов, а не 65 536 байтов на первый взгляд.

Настроив тот самый набор тестов в эмуляторе, я вчера написал (нет, на самом деле) полный диапазон затронутых адресов - используя [x, y] для обозначения замкнутого диапазона, то есть для включения обоих x и y, это:

  • [000a, 0012], [0100, 0101], [01f9, 01ff] (т.е. стопка и нулевые страницы);
  • 0200;
  • [0203, 0207];
  • 04a8;
  • 2cbb;
  • 2cdc;
  • 2eb1;
  • 2ed2;
  • 30a7;
  • 30c8;
  • 33f2;
  • 3409;
  • 353b; а также
  • 3552.

В .lst версии программы это означает, что все, что вам нужно переместить, - это переменные с метками:

  • прецедент;
  • ada2;
  • sba2;
  • range_adr;

... и либо переместите, либо удалите подпрограммы, которые:

  • тест И сразу с 2cac до 2cec;
  • немедленное испытание EOR с 2ea2 до 2ee2;
  • проверить ORA немедленно с 3098 на 30d8;
  • протестировать десятичный ADC / SBC сразу с 33e7 до 3414 (в частности, чтобы включить chkdadi и chksbi);
  • тестируйте двоичный ADC / SBC сразу с 3531 до 355d.

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

Итак, я думаю, отредактируйте эти тесты из исходного файла, и вы можете безопасно переместить range_adr в середину страницы стека, если моя симуляция верна.

person Tommy    schedule 07.07.2015