-
Вложений: 2
Нашёл небольшую недоработку в файле Flash-диска подключаемого к конфигурации Специалиста_МХ2. В файле MX2 SET8C, подключаемого как внешний Flash-диск (IvagorTim0xaGam8c.rom) есть опечатка для перехода к режиму цветов из 5 в 8 необходимо оперировать с регистром #f7fa, а не с #fffa. Т.е. в данный регистр нужно записать число D1=1. Вот скриншот доработки. Почему-то с этой опечаткой у меня не переключался цвет из 5 в 8 и не работала игра Color Lines от Vinxru (не сгорали построенные линии). Я сделал большой файл Flash-диска, который вмещает в себя 25 файлов и занимает 227 кБайт. Напомню, что данный Flash-диск на реале подключается при помощи данной схемы к Специалисту_МХ2.
-
Никто не сказал мне что файл косячный - несколько программ не запускалось. Перезалил - пользуйтесь.
-
Сегодня получил вот такую картинку :)
https://pic.maxiol.com/thumbs/1544788859.90463878..png
Чистый Python. Начал писать эмулятор Спектрума, а когда сделал эмуляцию первых 256 команд Z80, подумал, что уже могу начать эмулировать свой первый компьютер "Специалист".
-
Дело потихоньку движется. Конечно, тормоза удручают. Всё-таки по своей сути этот эмулятор - скрипт. Но у меня пока ещё есть, что оптимизировать ;)
https://pic.maxiol.com/images/154501...906935.zoo.gif
-
Ну ты красавчик, запитонил Спеца. А еще существует жаба версия, кстати.
-
По следам эмуляции клавиатуры Специалиста написал небольшую заметку.
А ещё в процессе разбирательства обнаружил ошибку на сайте @fifan. Таблица на этой странице должна выглядеть так:
https://pic.maxiol.com/thumbs/154510...06935.tabl.png
-
Номера столбцов перепишу, наверное уже ближе к новому году. За указанную опечатку спасибо.
Кстати и эту таблицу нужно переделать. Там кстати есть более чёткий рисунок подключения столбцов и строк клавиатуры к ВВ55.
-
Намучился с запуском BASIC. Я-то изначально делал эмуляцию Z80 по таблицам от Z80. И после того, как завершил 256 команд начали запускаться почти все игры. Если не брать во внимание ошибки, которые я сделал, то остались незапускаемыми только ADSKOK и BASIC.
ADSKOK я в итоге запустил. Там была проблема с флагами. Кто ж мог предположить, что если сделать PUSH BC, а потом тут же POP AF, то С ни разу не будет равен А! Из-за этого пришлось шерстить всю таблицу и проверять как на i8080 эмулируются флаги. Нашлось немало отличий от Z80! Всё, что нашёл исправил. В результате ADSKOK запустился таки. Оказалось, что программа имеет нечто типа защиты - при первом запуске код раскодируется, как раз с помощью всевозможных команд, которые используют флаги отличные от Z80, в том числе встречается и вышеупомянутая последовательность PUSH BC, POP AF. Но с BASIC пока всё плохо. Упёрся во флаг полупериноса.
Может быть уважаемый @Pyk внесёт ясность, эмулятором которого я пользуюсь для сравнения того, что я сделал с тем, как должно быть?
Вот, например команда #A7 AND A (ANA A). Согласно документации i8080 она устанавливает флаг полупереноса согласно результату операции, в то время как у Z80 он просто устанавливается в единицу в результате операции. Но в результате AND A,A никогда не будет полупереноса - так я и эмулирую. А по данным Emu80 он всё таки есть. Как же это расценивать?
-
Думаю все знают, но на всякий случай - в этом эмуляторе 8080 все флаги устанавливаются правильно, как на реале.
В бейсике проблема на z80 с флагом четности/переполнения. У 8080 это только четность, у z80 еще и переполнение в некоторых командах.
- - - Добавлено - - -
Конкретно в бейсике проблема командах adс a и sbb a. Еще был как минимум один специалистовский бейсик, у которого в процедуру затесалась недокументированная (для 8080) команда. На 8080 это nop, а на z80 - jr.
-
Ну вот есть же профильная тема, где есть абсолютно все ответы про 8080/ВМ80. Вот схема ALU:
https://jpegshare.net/images/15/a4/1...e4e8571aac.png
Флаги S, Z и P тупые, тупая логическая операция над битами (Z = NOR(7:0), P = XOR(7:0), S = [7]), а вот C и AC более сложные и зависят от операции. Тем не менее, их логика высчитывается достаточно легко (внимательно смотрим на схему переноса (между регистром R и схемой выбора вывода результата и блоки формирования переноса при десятичной коррекции). Отличия с Z80 только в том, что у Z80 есть действующий флаг N - negative, который позволяет учитывать знак операции (ADD/SUB). И тогда С и АС не будут совпадать.