Как запустить набор тестов Клауса Дормана 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
к середине страницы стека, если моя симуляция точна.