nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 16:11



Reply to topic  [ 121 posts ]  Go to page 1, 2, 3, 4, 5 ... 9  Next
Arduino Nano - эмулятор компьютера под управлением ОС CP/M 
Author Message
Retired

Joined: 21 Mar 2017 06:37
Posts: 73
Reply with quote
Приветствую всех любителей олдскульной вычислительной техники! Ностальгия по восьмибитным компьютерам моей юности подвигла меня на сей проект :-) Моим первым компьютером (не считая МК-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 прототип моего поделия:

Attachment:
cpm_mk1.jpg
cpm_mk1.jpg [ 33.62 KiB | Viewed 11088 times ]


Да, я не использовал адаптер для карточки, я вставил ее в разъем шлейфа от пятидюймового дисковода. :ebiggrin:
Для связи с компьютером я использую терминальную программу (в будущем планирую PS/2-клавиатуру и ЖК-экран либо подключение к телевизору).
Вот скриншот проверки памяти:

Attachment:
cpm_memtest.png
cpm_memtest.png [ 4.84 KiB | Viewed 11088 times ]


Загрузка CP/M:

Attachment:
cpm_loading.png
cpm_loading.png [ 3.79 KiB | Viewed 11088 times ]


Тест процессора:

Attachment:
cpm_mctest.png
cpm_mctest.png [ 3.63 KiB | Viewed 11088 times ]


А вот моя первая программа на Бейсике за прошедшие двадцать (! )))) лет:

Attachment:
cpm_tinybas.png
cpm_tinybas.png [ 3.93 KiB | Viewed 11088 times ]


(я запустил на своем поделии TinyBASIC).
Более подробное описание я начал делать здесь - https://acdc.foxylab.com/node/76
Вам интересен такой проект?

Shaos восстановил топик из бекапа в мае 2020 (автор прибил большинство сообщений в январе 2020) заодно перетащив все картинки сюда


Last edited by FoxyLab on 02 Jan 2020 12:43, edited 2 times in total.



21 Mar 2017 07:02
Profile
Retired

Joined: 21 Mar 2017 06:37
Posts: 73
Reply with quote
Выложил на YouTube видео работы моего проекта в реальном времени:
https://youtu.be/LHFmt3qWAuY


Last edited by FoxyLab on 02 Jan 2020 12:25, edited 1 time in total.



23 Mar 2017 07:09
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
А исходники адаптирования CP/M есть?

Я в своё время (2006) тоже хотел эмулятор CP/M-80 сделать на SX (пик на стероидах), но остановился на видеотерминале 80x25:
http://www.nedopc.org/forum/viewtopic.php?f=67&t=8553
и дальше уже не продвинулся...

_________________
:dj: https://mastodon.social/@Shaos


23 Mar 2017 22:32
Profile WWW
Retired

Joined: 21 Mar 2017 06:37
Posts: 73
Reply with quote
Я использую оригинальные С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.



24 Mar 2017 01:47
Profile
Retired

Joined: 21 Mar 2017 06:37
Posts: 73
Reply with quote
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.



24 Mar 2017 08:48
Profile
Doomed

Joined: 08 Apr 2013 04:04
Posts: 449
Location: 213.247.249.139
Reply with quote
FoxyLab wrote:
А про СДшку - добавлю биты четности :ebiggrin: Да и о чем речь - износится этот участок - поменяю одну константу, всего делов. На 4-х гигабайтной карточке места много :ebiggrin:

А ещё в уважающих себя СДшках есть wear levelling -- хоть всё время пиши в логический 1 сектор -- всё равно записи будут размазываться по внутренней флешке.

_________________
привет засранцу лавру :)


24 Mar 2017 08:55
Profile
Retired

Joined: 21 Mar 2017 06:37
Posts: 73
Reply with quote
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.



24 Mar 2017 09:02
Profile
Retired

Joined: 21 Mar 2017 06:37
Posts: 73
Reply with quote
Я выгрузил очень сырую версию кода моего проекта на 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.



25 Mar 2017 12:57
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Спасибо за сырцы! Результаты тестов по сравнению с другими старыми компами тоже бы не помешали

_________________
:dj: https://mastodon.social/@Shaos


25 Mar 2017 19:52
Profile WWW
Retired

Joined: 21 Mar 2017 06:37
Posts: 73
Reply with quote
Shaos wrote:
Спасибо за сырцы! Результаты тестов по сравнению с другими старыми компами тоже бы не помешали

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

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

Тесты сделаю, но позже.


Last edited by FoxyLab on 02 Jan 2020 12:26, edited 1 time in total.



26 Mar 2017 11:12
Profile
Retired

Joined: 21 Mar 2017 06:37
Posts: 73
Reply with quote
Сделал сегодня табличную дешифрацию кода операции и табличную установку флагов.


Last edited by FoxyLab on 02 Jan 2020 12:27, edited 1 time in total.



27 Mar 2017 12:48
Profile
Doomed

Joined: 08 Apr 2013 04:04
Posts: 449
Location: 213.247.249.139
Reply with quote
FoxyLab wrote:
А что принципиально мешает эмулировать Z80?


Главное чтоб потом тест http://ru.wikipedia.org/wiki/ZEXALL проходил -- это будет высший класс!
И для 8o8o аналогичный: http://retrocomputing.stackexchange.com/questions/670/8080-8085-instruction-test-suite

_________________
привет засранцу лавру :)


27 Mar 2017 13:13
Profile
Retired

Joined: 21 Mar 2017 06:37
Posts: 73
Reply with quote
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.



28 Mar 2017 13:29
Profile
Retired

Joined: 21 Mar 2017 06:37
Posts: 73
Reply with quote
Для упрощения настройки CP/M под актуальный размер ОЗУ я извлек образ CCP и BDOS из MOVCPM.COM и проанализировал (с помощью программы, конечно) различия между этим шаблонным образом и реальным образом системы с 62 КБайтами. Результатом стал проект getcpm - https://github.com/Dreamy16101976/getcpm .
При запуске программы getcpm.exe требуется указать размер памяти в килобайтах (XX) и желаемый серийный номер системы CP/M (6 байтов в 16-ричном виде, YYYYYYYYYYYY), после выполнения настройки создается файл CPMXXK.SYS и указывается его восьмибитная контрольная сумма:

Attachment:
getcpm_1.png
getcpm_1.png [ 3.94 KiB | Viewed 11088 times ]


Программа, используя файл CPMDIFF.SYS, корректирует адреса в файле CPM00K.SYS, выполняя настройку CCP и BDOS на заданный объем оперативной памяти:

Attachment:
getcpm_2.png
getcpm_2.png [ 13.15 KiB | Viewed 11088 times ]


Сама программа написана на Go и компилируется командой go build getcpm.go


Last edited by FoxyLab on 02 Jan 2020 12:27, edited 1 time in total.



31 Mar 2017 06:24
Profile
Retired

Joined: 21 Mar 2017 06:37
Posts: 73
Reply with quote
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.



31 Mar 2017 07:32
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 121 posts ]  Go to page 1, 2, 3, 4, 5 ... 9  Next

Who is online

Users browsing this forum: No registered users and 17 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.