Всем привет
Вот на собственно досуге.
Целью проекта была ни сколько юзабельность или точность работы,
сколько желание увидеть на дисплее любимую надпись бэйсика
" с 1982 Sinclair Research Ltd "
В реальности на авр крутиться настоящий эмулятор Z80, прилеплена SRAM 64 килобайта , в качестве пямяти эмулируемого проца.
Эмулируется прерывание после завершения отрисовки кадра как в натуральном спекки. Далее отрисовывается все что находится
в экранной области (из реального SRAM прямо на дисплей), попиксельно (атрибуты пока не работают). Ром бэйсика выполняет все свои дела : начаный тест, опрос клавы, отрисовку , порты ,как на реальной машине.
Сам же ром грузится с microSD в нашу SRAM .
Проект дошел до стадии (появлении изображения ) более-менее точной эмуляции в том числе и недокументированных инструкций.
Багов много. Нет времени отлаживать. Да и суть всего этого была - понимание, практика.
Кстати в результате работы очень помогли эмуляторы : z80ex-1.1.19 , EmuZWin , aspectrum-0.1.3.tar ,spiffy.
Размер голого эмуля 16кб , пока это оптимально скорость работы\размер. Принципе можно сжать еще ,но тогда 20 МИПС авр будут еле гонять и без того медленную развалину))
Пытался прикрутить кнопку. Вроде получилось. В прерывании проц захватывает с порта состояние кнопки. Но есть маленький косячек.
Бэйсик не выводит оператор , а просто печатает символ. Флаги... такие флаги....
Смог и выдержал отладку до мэйна бэйсика. Но баг где-то глубже.
Экран отрисовывает сколько может пикселей. 176х 132. остальное срезает.
В Принципе можно все довести до ума и юзабельного состояния при хорошей мотивации.
В качестве принципа декодирования команд были выбраны таблицы переходов. После выборки и декодирования , производится дополнительное декодирование регистров, условий , прочего... это очень сэкономило место при компиляции дублирующихся команд.
Плохое видео
https://www.youtube.com/watch?v=t4R9-Mc0Lfo
прилагаю исходники и проект в протеусе