Приветствую всех любителей олдскульной вычислительной техники! Ностальгия по восьмибитным компьютерам моей юности подвигла меня на сей проект Моим первым компьютером (не считая МК-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 [ 33.62 KiB | Viewed 13433 times ]
Да, я не использовал адаптер для карточки, я вставил ее в разъем шлейфа от пятидюймового дисковода. Для связи с компьютером я использую терминальную программу (в будущем планирую PS/2-клавиатуру и ЖК-экран либо подключение к телевизору). Вот скриншот проверки памяти:
Attachment:
cpm_memtest.png [ 4.84 KiB | Viewed 13433 times ]
Загрузка CP/M:
Attachment:
cpm_loading.png [ 3.79 KiB | Viewed 13433 times ]
Тест процессора:
Attachment:
cpm_mctest.png [ 3.63 KiB | Viewed 13433 times ]
А вот моя первая программа на Бейсике за прошедшие двадцать (! )))) лет:
Attachment:
cpm_tinybas.png [ 3.93 KiB | Viewed 13433 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.
Я использую оригинальные С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.
Проект хороший, за одним минусом - эмуляция 8080. К величайшему сожалению, найти нормальный софт под СР/М удаётся только для Z80, а вот сэмулировать зетку на Меге328, кмк, сложновато Вопрос второй - надолго ли хватит "пробега" карточки с эмуляцией ОЗУ - не так важен, ибо для работы такой компик всё равно никто не будет использовать, в познавательных целях разве что.
Спасибо! А что принципиально мешает эмулировать Z80? IX, IY, штриховые регистры, изменена логика для флагов - так у меня еще треть флэша свободна, хватит и на это. А тайминги все равно в CP/M не используются. Да и не такой уж медленный мой эмулятор - CP/M загружается за 9 секунд (до появления приглашения), MCTEST проходит за 17 секунд (вместе с загрузкой программы). Нашел бенчмарки для бейсика с данными для восьмибитных машин, проведу тест А про СДшку - добавлю биты четности Да и о чем речь - износится этот участок - поменяю одну константу, всего делов. На 4-х гигабайтной карточке места много
Last edited by FoxyLab on 02 Jan 2020 12:26, edited 1 time in total.
А про СДшку - добавлю биты четности Да и о чем речь - износится этот участок - поменяю одну константу, всего делов. На 4-х гигабайтной карточке места много
А ещё в уважающих себя СДшках есть wear levelling -- хоть всё время пиши в логический 1 сектор -- всё равно записи будут размазываться по внутренней флешке.
А про СДшку - добавлю биты четности Да и о чем речь - износится этот участок - поменяю одну константу, всего делов. На 4-х гигабайтной карточке места много
А ещё в уважающих себя СДшках есть wear levelling -- хоть всё время пиши в логический 1 сектор -- всё равно записи будут размазываться по внутренней флешке.
Спасибо за сырцы! Результаты тестов по сравнению с другими старыми компами тоже бы не помешали
Упорядочил немного код, сделал эмуляцию консоли и контроллера флоппи-дисковода на уровне портов - теперь можно запускать программы и без загрузки CP/M.
Но один из тестов процессора показал ошибку - из скудного описания вроде бы во флаге переноса (в какой команде - непонятно). Возможно из-за этого глючит команда TYPE в CP/M.
Тесты сделаю, но позже.
Last edited by FoxyLab on 02 Jan 2020 12:26, edited 1 time in total.
По этой ссылке упоминаются три теста: первый (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.
Для упрощения настройки 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 [ 3.94 KiB | Viewed 13433 times ]
Программа, используя файл CPMDIFF.SYS, корректирует адреса в файле CPM00K.SYS, выполняя настройку CCP и BDOS на заданный объем оперативной памяти:
Attachment:
getcpm_2.png [ 13.15 KiB | Viewed 13433 times ]
Сама программа написана на Go и компилируется командой go build getcpm.go
Last edited by FoxyLab on 02 Jan 2020 12:27, edited 1 time in total.
...если мне кардинально не отшибло память (а вся документация по СР/М сейчас находится далеко), то в описании настройки системы были упоминания о доступной памяти и требуемой коррекции одной или двух переменных в связи с этим. Помню визуально, что это было в начале листа и было три варианта объёма памяти: 47 (или около), 56 и 62 кБайт, соответственно три варианта системной переменной, подставляемой в листинг... Если Ваш вариант позволяет настраиваться на "нестандартный" с точки зрения канонической документации объём - это хорошо.
Там даже не две, а одна переменная меняется, но затем требуется ... перекомпилирование всей оси. Можете мне поверить, это далеко не тривиальная задача... А моя утилитка может сгенерить 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.
Users browsing this forum: No registered users and 3 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