
Комментарии 8
Может вы это знаете, но на всякий случай предложу альтернативный метод создания эмуляторов процессоров.
Можно найти и взять ядро процессора на языке Verilog, например, вот здесь (правда не знаю точно работает ли оно, но уверен, что найти аналогичные не составит труда). Это те ядра, которые можно запускать в FPGA. Потом подключить его к Verilator - это симулятор Verilog. И тогда получается модель как настоящая.
"метод создания" типа "найти и взять" - это интересно ) Но может автору действительно на verilog и FPGA замахнуться...
"Найти и взять" - мне кажется это нормальный метод.
Прежде, чем что-то реализовывать самому всегда имеет смысл посмотреть, что уже сделано другими же. В том же Linux на каждую задачу найдется утилита или программа. И можно посмотреть исходный код при желании.
По поводу процессоров.. я как-то делал эксперимент по подключению через JTAG отладчика GDB к SoC с процессором RISC-V.
https://marsohod.org/projects/marsohod3-board-prj/risc-v/458-gdb-verilator-sim
При этом, само ядро процессора я не писал, взял на github.
И вся "система" у меня запустилась и жила виртуально в отладчике Verilator. То есть даже не в плате. Точно так же на этом отладчике можно запустить желаемую программу, монитор или игру какую ни будь. Если компьютер быстрый, то вполне будет крутиться.
Понятно, что уже полно готовых эмуляторов CPU и на C/C++ и на верилоге, но тут смысл написать именно свой (как минимум для самоообразования), эмуляция системы - логичный следующий шаг, а не изначальная цель.
Прогресс одобряю :)
Хотя мой код и покрыт тестами, их разработка — дело очень тонкое. Тесты для SBC всегда были зеленые, но, видимо, я подобрал такие тестовые сценарии или вовсе выстраивал логику теста на основе того, какие значения должны получиться
Вообще, если уж покрывать тестами, в первую очередь нужно тестировать все граничные случаи (первое и последнее значения, когда некий флаг устанавливается, а затем первое и последнее, когда он сбрасывается, и т. д.). Применительно к переносу надо ещё постоянно держать в голове, что у разных архитектур при вычитании он ведёт себя по-разному: на одних устанавливается при возникновении заёма, а на других, наоборот, сбрасывается в такой ситуации; соответственно, нельзя "механически" перенести тест с одной архитектуры на другую, предварительно не убедившись, что логика изменения флагов у них совпадает.
Круто! Но я не совсем понял как реализована работа с диском. Вы реализовали полную эмуляцию привода флоповода + DMA контроллер ? Или же подправили код BIOS подусунув ему свои функции для чтения/записи сектора ?
Какая файловая система на диске, FAT12 ?
Симулятор микропроцессоров: запускаем BASIC и не только