Могут ли программы Chip-8 переходить на нечетные адреса? - PullRequest
0 голосов
/ 30 января 2019

Я пишу интерпретатор чип-8.У меня есть фиктивное аппаратное обеспечение, выполнение инструкций, пользовательский интерфейс и т. Д. Все в порядке, поэтому я начал загружать и выполнять настоящие программы на чип-8.

В zip-архиве, который я нашел в Интернете, есть несколько игр втам, кажется, есть незаконные прыжки.

Из Спецификация CowGod гласит:

Все инструкции имеют длину 2 байта и сначала сохраняются в старшем значащем байте.В памяти первый байт каждой инструкции должен быть расположен по четным адресам.Если программа содержит данные спрайта, она должна быть дополнена, поэтому любые последующие инструкции будут правильно расположены в ОЗУ.

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

Однако две игры вмоя пачка (INVADERS и BLITZ), похоже, сразу начинается с вызова прыжка (они подписывают ромы своими именами в ascii, поэтому первая инструкция - это вызов для перехода после подписи.

Первый из них начинается с 0x12 0x25, а второй начинается с 0x12 0x17. Оба этих параметра указывают, что в моем эмуляторе происходит сбой вызовов на нечетные адреса (0x225 и 0x217 соответственно). Смотря на те адреса, на которые они указывают, они выглядят так, как будто онисодержит действительные инструкции (байт 25 в первом содержит 0x6000 (LD V0, 00) и байт 17 в тон указывает на 0xA341 (LD I, 341).

Я просто слишком строго интерпретирую спецификации, и ожидается, что реальные приложения не будут дополнены и могут быть запущены по нечетным адресам?

1 Ответ

0 голосов
/ 09 февраля 2019

Ответ на вопрос (на основе комментариев): спецификация Chip-8, по-видимому, должна включать в себя требование, чтобы инструкции начинались с четных адресов, однако из-за того, что она не указана очень сильно (в спецификации упоминается толькопри использовании термина «должен» вместо «должен») и тот факт, что набор инструкций прекрасно работает с инструкциями, которые не находятся по четным адресам (например, инструкция перехода может переходить на любой адрес, а не только на один)Разработчики эмуляторов склонны игнорировать это требование.Следовательно, для Chip-8 существует ряд двоичных файлов, в которых есть инструкции по нечетным адресам, поэтому маловероятно, что будущие эмуляторы будут выполнять это требование.

...