nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 24 Oct 2017 00:07



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

Joined: 21 Mar 2017 09:37
Posts: 26
Location: BY
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 прототип моего поделия:
Image
Да, я не использовал адаптер для карточки, я вставил ее в разъем шлейфа от пятидюймового дисковода. :ebiggrin:
Для связи с компьютером я использую терминальную программу (в будущем планирую PS/2-клавиатуру и ЖК-экран либо подключение к телевизору).
Вот скриншот проверки памяти:
Image
Загрузка CP/M:
Image
Тест процессора:
Image
А вот моя первая программа на Бейсике за прошедшие двадцать (! )))) лет:
Image
(я запустил на своем поделии TinyBASIC).
Более подробное описание я начал делать здесь - https://acdc.foxylab.com/node/76
Вам интересен такой проект?


21 Mar 2017 10:02
Profile WWW
Novelist
User avatar

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


23 Mar 2017 10:09
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15565
Location: Colorado
Reply with quote
А исходники адаптирования CP/M есть?

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

_________________
:eugeek: https://twitter.com/Shaos1973


24 Mar 2017 01:32
Profile WWW
Novelist
User avatar

Joined: 21 Mar 2017 09:37
Posts: 26
Location: BY
Reply with quote
Я использую оригинальные СCP и BDOS от CP/M 2.2, перехватываю только обращения к функциям BIOS, как и задумано было при создании в далекие 70-е модульной структуры ОС.
Исходники проекта я предполагаю выложить в своем репозитарии в Гитхабе в начале следующей недели.
Когда очередь дойдет до подключения экрана, то я в любом случае выделю для этого отдельный МК. А там уже или на LCD 320x200 или на TV выводить.
В Вашем проекте Вы же добились результата - вывод на экран работает. Весьма полезный опыт.


24 Mar 2017 04:47
Profile WWW
Senior
User avatar

Joined: 13 Nov 2007 14:09
Posts: 164
Location: Ставрополь
Reply with quote
Проект хороший, за одним минусом - эмуляция 8080. К величайшему сожалению, найти нормальный софт под СР/М удаётся только для Z80, а вот сэмулировать зетку на Меге328, кмк, сложновато ;)
Вопрос второй - надолго ли хватит "пробега" карточки с эмуляцией ОЗУ - не так важен, ибо для работы такой компик всё равно никто не будет использовать, в познавательных целях разве что.


24 Mar 2017 10:23
Profile WWW
Novelist
User avatar

Joined: 21 Mar 2017 09:37
Posts: 26
Location: BY
Reply with quote
rw6hrm wrote:
Проект хороший, за одним минусом - эмуляция 8080. К величайшему сожалению, найти нормальный софт под СР/М удаётся только для Z80, а вот сэмулировать зетку на Меге328, кмк, сложновато ;)
Вопрос второй - надолго ли хватит "пробега" карточки с эмуляцией ОЗУ - не так важен, ибо для работы такой компик всё равно никто не будет использовать, в познавательных целях разве что.

Спасибо!
А что принципиально мешает эмулировать Z80? IX, IY, штриховые регистры, изменена логика для флагов - так у меня еще треть флэша свободна, хватит и на это.
А тайминги все равно в CP/M не используются. Да и не такой уж медленный мой эмулятор - CP/M загружается за 9 секунд (до появления приглашения), MCTEST проходит за 17 секунд (вместе с загрузкой программы). Нашел бенчмарки для бейсика с данными для восьмибитных машин, проведу тест :ebiggrin:
А про СДшку - добавлю биты четности :ebiggrin: Да и о чем речь - износится этот участок - поменяю одну константу, всего делов. На 4-х гигабайтной карточке места много :ebiggrin:


24 Mar 2017 11:48
Profile WWW
Doomed

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

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


24 Mar 2017 11:55
Profile
Novelist
User avatar

Joined: 21 Mar 2017 09:37
Posts: 26
Location: BY
Reply with quote
angry_troll wrote:
FoxyLab wrote:
А про СДшку - добавлю биты четности :ebiggrin: Да и о чем речь - износится этот участок - поменяю одну константу, всего делов. На 4-х гигабайтной карточке места много :ebiggrin:

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

Да-да!
Вот интересная дискуссия по этому поводу:
http://electronics.stackexchange.com/qu ... controller


24 Mar 2017 12:02
Profile WWW
Novelist
User avatar

Joined: 21 Mar 2017 09:37
Posts: 26
Location: BY
Reply with quote
Я выгрузил очень сырую версию кода моего проекта на Github:
https://github.com/Dreamy16101976/cpm4nano

Также я сделал эмуляцию портов 0 и 1 в стиле "Альтаира". Это позволило мне запустить Альтаировский TinyBASIC без (!) CP/M.


25 Mar 2017 15:57
Profile WWW
Admin
User avatar

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

_________________
:eugeek: https://twitter.com/Shaos1973


25 Mar 2017 22:52
Profile WWW
Novelist
User avatar

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

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

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

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


26 Mar 2017 14:12
Profile WWW
Novelist
User avatar

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


27 Mar 2017 15:48
Profile WWW
Doomed

Joined: 08 Apr 2013 07:04
Posts: 353
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 16:13
Profile
Novelist
User avatar

Joined: 21 Mar 2017 09:37
Posts: 26
Location: BY
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 проверяется).
Таким образом, буду проверять логику обработки флагов.


28 Mar 2017 16:29
Profile WWW
Novelist
User avatar

Joined: 21 Mar 2017 09:37
Posts: 26
Location: BY
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 и указывается его восьмибитная контрольная сумма:
Image
Программа, используя файл CPMDIFF.SYS, корректирует адреса в файле CPM00K.SYS, выполняя настройку CCP и BDOS на заданный объем оперативной памяти:
Image
Сама программа написана на Go и компилируется командой go build getcpm.go


31 Mar 2017 09:24
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 36 posts ]  Go to page 1, 2, 3  Next

Who is online

Users browsing this forum: Bing [Bot] and 1 guest


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.