Arduino Nano - эмулятор компьютера под управлением ОС CP/M

Публичный форум для http://www.nedopc.org/nedopc

Moderator: Shaos

FoxyLab
Retired
Posts: 73
Joined: 21 Mar 2017 06:37

Arduino Nano - эмулятор компьютера под управлением ОС CP/M

Post by FoxyLab »

Приветствую всех любителей олдскульной вычислительной техники! Ностальгия по восьмибитным компьютерам моей юности подвигла меня на сей проект :-) Моим первым компьютером (не считая МК-61 и МК-52) был "Байт" - брестский клон Спектрума. Дисковод расширил его возможности, позволяя даже использовать отечественную ОС IsDOS. Но на нем нельзя было запустить "настоящую" операционную систему CP/M (ПЗУ сидело в нижних адресах, и победить это я тогда не смог). Прошло много лет с тех времен и я решил исправить это упущение - сделать свой CP/M компьютер из ... чего бы Вы думали? Arduino Nano 3.0
За недели две-три я сделал эмулятор процессора i8080 для Arduino Nano (он проходит тест от MICROCOSM) и адаптировал CP/M. Основная проблема - в ардуинке всего 2 (!) кбайта ОЗУ. Но у нас же есть SD-карточка - я сделал 4-х линейный кэш (по 32 байта) к этой карточке, а сама карточка эмулировала все 64 кбайта ОЗУ. Хотя и применил самый примитивный алгоритм управления кэшем, скорость работы не такая уж и плохая.
Вот quick-and-dirty прототип моего поделия:
cpm_mk1.jpg
Да, я не использовал адаптер для карточки, я вставил ее в разъем шлейфа от пятидюймового дисковода. :ebiggrin:
Для связи с компьютером я использую терминальную программу (в будущем планирую PS/2-клавиатуру и ЖК-экран либо подключение к телевизору).
Вот скриншот проверки памяти:
cpm_memtest.png
Загрузка CP/M:
cpm_loading.png
Тест процессора:
cpm_mctest.png
А вот моя первая программа на Бейсике за прошедшие двадцать (! )))) лет:
cpm_tinybas.png
(я запустил на своем поделии TinyBASIC).
Более подробное описание я начал делать здесь - https://acdc.foxylab.com/node/76
Вам интересен такой проект?

Shaos восстановил топик из бекапа в мае 2020 (автор прибил большинство сообщений в январе 2020) заодно перетащив все картинки сюда
You do not have the required permissions to view the files attached to this post.
Last edited by FoxyLab on 02 Jan 2020 12:43, edited 2 times in total.
FoxyLab
Retired
Posts: 73
Joined: 21 Mar 2017 06:37

Re: Arduino Nano - эмулятор компьютера под управлением ОС CP

Post by FoxyLab »

Выложил на YouTube видео работы моего проекта в реальном времени:
https://youtu.be/LHFmt3qWAuY
Last edited by FoxyLab on 02 Jan 2020 12:25, edited 1 time in total.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Arduino Nano - эмулятор компьютера под управлением ОС CP

Post by Shaos »

А исходники адаптирования CP/M есть?

Я в своё время (2006) тоже хотел эмулятор CP/M-80 сделать на SX (пик на стероидах), но остановился на видеотерминале 80x25:
viewtopic.php?f=67&t=8553
и дальше уже не продвинулся...
Я тут за главного - если что шлите мыло на me собака shaos точка net
FoxyLab
Retired
Posts: 73
Joined: 21 Mar 2017 06:37

Re: Arduino Nano - эмулятор компьютера под управлением ОС CP

Post by FoxyLab »

Я использую оригинальные СCP и BDOS от CP/M 2.2, перехватываю только обращения к функциям BIOS, как и задумано было при создании в далекие 70-е модульной структуры ОС.
Исходники проекта я предполагаю выложить в своем репозитарии в Гитхабе в начале следующей недели.
Когда очередь дойдет до подключения экрана, то я в любом случае выделю для этого отдельный МК. А там уже или на LCD 320x200 или на TV выводить.
В Вашем проекте Вы же добились результата - вывод на экран работает. Весьма полезный опыт.
Last edited by FoxyLab on 02 Jan 2020 12:25, edited 1 time in total.
FoxyLab
Retired
Posts: 73
Joined: 21 Mar 2017 06:37

Re: Arduino Nano - эмулятор компьютера под управлением ОС CP

Post by FoxyLab »

rw6hrm wrote:Проект хороший, за одним минусом - эмуляция 8080. К величайшему сожалению, найти нормальный софт под СР/М удаётся только для Z80, а вот сэмулировать зетку на Меге328, кмк, сложновато ;)
Вопрос второй - надолго ли хватит "пробега" карточки с эмуляцией ОЗУ - не так важен, ибо для работы такой компик всё равно никто не будет использовать, в познавательных целях разве что.
Спасибо!
А что принципиально мешает эмулировать Z80? IX, IY, штриховые регистры, изменена логика для флагов - так у меня еще треть флэша свободна, хватит и на это.
А тайминги все равно в CP/M не используются. Да и не такой уж медленный мой эмулятор - CP/M загружается за 9 секунд (до появления приглашения), MCTEST проходит за 17 секунд (вместе с загрузкой программы). Нашел бенчмарки для бейсика с данными для восьмибитных машин, проведу тест :ebiggrin:
А про СДшку - добавлю биты четности :ebiggrin: Да и о чем речь - износится этот участок - поменяю одну константу, всего делов. На 4-х гигабайтной карточке места много :ebiggrin:
Last edited by FoxyLab on 02 Jan 2020 12:26, edited 1 time in total.
angry_troll
Doomed
Posts: 449
Joined: 08 Apr 2013 04:04
Location: 213.247.249.139

Re: Arduino Nano - эмулятор компьютера под управлением ОС CP

Post by angry_troll »

FoxyLab wrote: А про СДшку - добавлю биты четности :ebiggrin: Да и о чем речь - износится этот участок - поменяю одну константу, всего делов. На 4-х гигабайтной карточке места много :ebiggrin:
А ещё в уважающих себя СДшках есть wear levelling -- хоть всё время пиши в логический 1 сектор -- всё равно записи будут размазываться по внутренней флешке.
привет засранцу лавру :)
FoxyLab
Retired
Posts: 73
Joined: 21 Mar 2017 06:37

Re: Arduino Nano - эмулятор компьютера под управлением ОС CP

Post by FoxyLab »

angry_troll wrote:
FoxyLab wrote: А про СДшку - добавлю биты четности :ebiggrin: Да и о чем речь - износится этот участок - поменяю одну константу, всего делов. На 4-х гигабайтной карточке места много :ebiggrin:
А ещё в уважающих себя СДшках есть wear levelling -- хоть всё время пиши в логический 1 сектор -- всё равно записи будут размазываться по внутренней флешке.
Да-да!
Вот интересная дискуссия по этому поводу:
http://electronics.stackexchange.com/questions/27619/is-it-true-that-a-sd-mmc-card-does-wear-levelling-with-its-own-controller
Last edited by FoxyLab on 02 Jan 2020 12:26, edited 1 time in total.
FoxyLab
Retired
Posts: 73
Joined: 21 Mar 2017 06:37

Re: Arduino Nano - эмулятор компьютера под управлением ОС CP

Post by FoxyLab »

Я выгрузил очень сырую версию кода моего проекта на Github:
https://github.com/Dreamy16101976/cpm4nano

Также я сделал эмуляцию портов 0 и 1 в стиле "Альтаира". Это позволило мне запустить Альтаировский TinyBASIC без (!) CP/M.
Last edited by FoxyLab on 02 Jan 2020 12:26, edited 1 time in total.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Arduino Nano - эмулятор компьютера под управлением ОС CP

Post by Shaos »

Спасибо за сырцы! Результаты тестов по сравнению с другими старыми компами тоже бы не помешали
Я тут за главного - если что шлите мыло на me собака shaos точка net
FoxyLab
Retired
Posts: 73
Joined: 21 Mar 2017 06:37

Re: Arduino Nano - эмулятор компьютера под управлением ОС CP

Post by FoxyLab »

Shaos wrote:Спасибо за сырцы! Результаты тестов по сравнению с другими старыми компами тоже бы не помешали
Упорядочил немного код, сделал эмуляцию консоли и контроллера флоппи-дисковода на уровне портов - теперь можно запускать программы и без загрузки CP/M.

Но один из тестов процессора показал ошибку - из скудного описания вроде бы во флаге переноса (в какой команде - непонятно). Возможно из-за этого глючит команда TYPE в CP/M.

Тесты сделаю, но позже.
Last edited by FoxyLab on 02 Jan 2020 12:26, edited 1 time in total.
FoxyLab
Retired
Posts: 73
Joined: 21 Mar 2017 06:37

Re: Arduino Nano - эмулятор компьютера под управлением ОС CP

Post by FoxyLab »

Сделал сегодня табличную дешифрацию кода операции и табличную установку флагов.
Last edited by FoxyLab on 02 Jan 2020 12:27, edited 1 time in total.
angry_troll
Doomed
Posts: 449
Joined: 08 Apr 2013 04:04
Location: 213.247.249.139

Re: Arduino Nano - эмулятор компьютера под управлением ОС CP

Post by angry_troll »

FoxyLab wrote: А что принципиально мешает эмулировать Z80?
Главное чтоб потом тест http://ru.wikipedia.org/wiki/ZEXALL проходил -- это будет высший класс!
И для 8o8o аналогичный: http://retrocomputing.stackexchange.com/questions/670/8080-8085-instruction-test-suite
привет засранцу лавру :)
FoxyLab
Retired
Posts: 73
Joined: 21 Mar 2017 06:37

Re: Arduino Nano - эмулятор компьютера под управлением ОС CP

Post by FoxyLab »

angry_troll wrote:
По этой ссылке упоминаются три теста:
первый (8080/8085 CPU Diagnostic, version 1.0, by Microcosm Associates) мой эмулятор уже проходит
на втором (Diagnostics II, version 1.2, CPU test by Supersoft Associates) выдает наличие одной ошибки - как я смог понять из весьма лаконичного описания, в одной из команд неверно обрабатывается флаг (скорее всего, переноса)
третий тест (8080/8085 CPU Exerciser by Ian Bartholomew and Frank Cringles) я запускал, но он слишком дотошный и, как я читал, работает как минимум несколько часов, поэтому его я пока отложил, так и не дождавшись результата даже первой строки (там dad проверяется).
Таким образом, буду проверять логику обработки флагов.
Last edited by FoxyLab on 02 Jan 2020 12:27, edited 1 time in total.
FoxyLab
Retired
Posts: 73
Joined: 21 Mar 2017 06:37

Re: Arduino Nano - эмулятор компьютера под управлением ОС CP

Post by FoxyLab »

Для упрощения настройки CP/M под актуальный размер ОЗУ я извлек образ CCP и BDOS из MOVCPM.COM и проанализировал (с помощью программы, конечно) различия между этим шаблонным образом и реальным образом системы с 62 КБайтами. Результатом стал проект getcpm - https://github.com/Dreamy16101976/getcpm .
При запуске программы getcpm.exe требуется указать размер памяти в килобайтах (XX) и желаемый серийный номер системы CP/M (6 байтов в 16-ричном виде, YYYYYYYYYYYY), после выполнения настройки создается файл CPMXXK.SYS и указывается его восьмибитная контрольная сумма:
getcpm_1.png
Программа, используя файл CPMDIFF.SYS, корректирует адреса в файле CPM00K.SYS, выполняя настройку CCP и BDOS на заданный объем оперативной памяти:
getcpm_2.png
Сама программа написана на Go и компилируется командой go build getcpm.go
You do not have the required permissions to view the files attached to this post.
Last edited by FoxyLab on 02 Jan 2020 12:27, edited 1 time in total.
FoxyLab
Retired
Posts: 73
Joined: 21 Mar 2017 06:37

Re: Arduino Nano - эмулятор компьютера под управлением ОС CP

Post by FoxyLab »

rw6hrm wrote:...если мне кардинально не отшибло память (а вся документация по СР/М сейчас находится далеко), то в описании настройки системы были упоминания о доступной памяти и требуемой коррекции одной или двух переменных в связи с этим. Помню визуально, что это было в начале листа и было три варианта объёма памяти: 47 (или около), 56 и 62 кБайт, соответственно три варианта системной переменной, подставляемой в листинг... Если Ваш вариант позволяет настраиваться на "нестандартный" с точки зрения канонической документации объём - это хорошо.
Там даже не две, а одна переменная меняется, но затем требуется ... перекомпилирование всей оси. :ebiggrin: Можете мне поверить, это далеко не тривиальная задача... :egeek:
А моя утилитка может сгенерить CCP и BDOS CP/M версии 2.2 для 8080 при любом объеме памяти (от 20 до 64 Кбайт) одной командой.
P.S. На объем там одно ограничение - кратность килобайту. Были системы и с 20, и с 32, и с 62.
Last edited by FoxyLab on 02 Jan 2020 12:29, edited 1 time in total.