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

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

Та же проблема, конечно же, относится как к синтезу ее к реальной ПЛИС, так и к запуску ее в симуляторе (либо низкоуровневом VHDL, либо высокоуровневом Kansas Lava).

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

1 ответ

Решение

Коленный рефлекс наблюдений:

Несмотря на то, что это изображение размером 64 КБ, тест на самом деле составляет всего 14 093 байта фактического контента, от $0000 до $370d, затем заполненная $ffs до трех векторов в $fffa–$ffff. Таким образом, вам нужно скопировать не более 14 099 байт, а не prima facie 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.

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

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

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

  • тест И немедленно от 2cac до 2cec;
  • немедленно проверить EOR от 2ea2 до 2ee2;
  • немедленный тест ORA с 3098 по 30d8;
  • тестировать десятичный ADC/SBC немедленно с 33e7 до 3414 (специально для включения chkdadi а также chksbi);
  • Немедленный тест двоичного АЦП / СБК с 3531 до 355d.

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

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

Другие вопросы по тегам