Запись графического эмулятора Z80 в C или [закрытом] C++

Используйте эту команду:

dd if=$INPUT-FILE of=$OUTPUT-FILE bs=$BLOCK-SIZE count=$NUM-BLOCKS

Для создания большого (пустого) файла установите $INPUT-FILE=/dev/zero.
Общий размер файла будет $BLOCK-SIZE * $NUM-BLOCKS.
Новый созданный файл будет $OUTPUT-FILE.

13
задан Peter Mortensen 7 August 2016 в 13:33
поделиться

6 ответов

15
ответ дан 1 December 2019 в 17:24
поделиться

Это немного побочный ход, но, поскольку вы говорите, что у вас нет опыта программирования этого типа, вы можете начать с создания эмулятора для универсальной виртуальной машины из 2006 ICFP программирования. конкурс . Это задача, на которую опытный программист уходит 90 минут, но многие команды без опыта смогли выполнить ее за несколько дней. Когда вы закончите работу с эмулятором, откроется множество забавных вещей, и это может стать хорошей разминкой перед тем, как вы взяться за Z80.

16
ответ дан 1 December 2019 в 17:24
поделиться

Попробуйте взглянуть на эмуляторы Sega Master System и Game Gear (я почти уверен, что некоторые из них имеют открытый исходный код). Эти консоли имеют Z80 в качестве процессора и ZX Spectrum тоже использовал его, http://www.worldofspectrum.org/emulators.html .

4
ответ дан 1 December 2019 в 17:24
поделиться

Я бы порекомендовал вам начать с написания эмулятора для более простого, но связанного с ним процессора, 8080 . Z80 на самом деле довольно сложен (многобайтовые инструкции, больше режимов адресации, индексные регистры и т. Д.), Тогда как инструкции 8080 очень легко декодировать (вы можете просто использовать таблицу поиска с 256 записями в качестве решения первого порядка) .

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

3
ответ дан 1 December 2019 в 17:24
поделиться

Митч совершенно прав. Начните с понимания процессора. Затем немного поиграйте, написав код для реализации конкретных инструкций. Используйте для этого C ++, BTW, а не C, иначе концепции процессора не будут отображаться в классы в вашем коде.

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

В конечном итоге вам придется выяснить, как загрузить код и данные в память, и, возможно, как выгрузить их обратно на диск.

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

5
ответ дан 1 December 2019 в 17:24
поделиться

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

В зависимости от вашей цели вы можете захотеть начать с уже существующего эмулятора для Z80. Быстрый поиск дает несколько из них, но не эмулятор для TI-84. simh , фреймворк для эмуляции старых компьютеров уже имеет эмуляцию процессора Z80, добавление эмуляции остального оборудования должно быть проще, чем начинать с нуля. Даже если вы не пойдете по этой дороге, есть некоторые дизайнерские документы, которые могут вам помочь.

3
ответ дан 1 December 2019 в 17:24
поделиться