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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

да где ж его счас взять-то, 25х80? 

у меня есть, я правда его лет 25 не включал )))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ua6em пишет:

DetSimen пишет:

да где ж его счас взять-то, 25х80? 

у меня есть, я правда его лет 25 не включал )))

ну этта ты такой запасливый, а я свою зеленую "MERA" в 1998-м на памойку отнёс, щас волосы на опе рву.  Правда, коту. :) 

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Челендж был в том, чтобы использовать минимум "железа" для реализации самодостаточной системы (под автономностью я понимал не мобильность, а именно самодостаточность).
80 х 25, конечно, очень распространен, но для многих программ хватает и меньшего числа столбцов.

Green
Offline
Зарегистрирован: 01.10.2015

Вы просто отсекаете кучу софта, который работает с экраном 80х25. Ладно саму CP/M можно модифицировать для вывода под другой экран, но прикладной софт зачастую рассчитан только на стандартный терминал и не имеет настроек. А так конечно, можно хоть на LCD 1602 выводить, не говоря уже о 2004.)

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Для самой CP/M 2-й версии разрешение экрана не играет практически никакой роли. Но прикладные программы, конечно, имеют свои требования и многие, как Вы совершенно верно заметили, ожидают 80x25.
Для начала я сделал блокировку прокрутки - если вывод заполняет весь экран (непрерывно, без ввода пользователя), то вывод останавливается, ожидая нажатия клавиши.
В дальнейшем можно замутить и окно в виртуальном экране (как было сделано в Osborne 1).

P.S. Для наглядности:

P.P.S. Добавил переключение с помощью перемычки источника входного потока данных - между клавиатурой и последовательным портом (для загрузки с компьютера по протоколу XMODEM).

Green
Offline
Зарегистрирован: 01.10.2015

FoxyLab пишет:

Для самой CP/M 2-й версии разрешение экрана не играет практически никакой роли.


А как же DIR? При 45-символах в строке, по моему, будет неаккуратненько, если не править CCP.) 

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Верно подмечено это нарушение общей концепции, но как-то же разработчикам надо было сделать перенос (в идеале, конечно, нужно было выводить одно имя на каждой строке :-) Сейчас в моем "нанокомпьютере" происходит автоматический перенос остатка файловых имен на другую строку "in distracting fashion", как сказано https://books.google.by/books?id=gy4EAAAAMBAJ&lpg=PA80&ots=7BxUMzdg3b&dq=%D0%A1P%2FM%20dir%2080%20cols&pg=PA80#v=onepage&q&f=false о занятном CP/M-аппарате Xerox 1810:

Green
Offline
Зарегистрирован: 01.10.2015

1984 однако.) У нас первые ПК в 1988 начали возить и стоили они дороже автомобиля.) Кстати, попадались ПК с процессором NEC V20. Это 8088, но у него была и аппаратная поддержка 8080. Как бы не 16мгц, но работал очень шустренько.)

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Green пишет:

1984 однако.) У нас первые ПК в 1988 начали возить и стоили они дороже автомобиля.) Кстати, попадались ПК с процессором NEC V20. Это 8088, но у него была и аппаратная поддержка 8080. Как бы не 16мгц, но работал очень шустренько.)

В Ключах-1 некоторые одноклассники ходили на импровизированный "кружок" (к ракетчикам-программистам) - они изучали PL/(I или M), не помню, причем, что самое интересное, утверждали, что их учили писать игры.
В Лебедине можно было полюбоваться на гордо стоящий в одиночестве "Агат", впрочем, в другом магазине был гораздо более доступный аппарат - "Корвет" или "Вектор" (забыл), и я чуть было не стал его обладателям, но не успел (он был только один). Но потом я все-таки вдоволь успел побаловаться со Спектрумом в его брестской реинкарнации. Но CP/M на нем запустить было никак нельзя, поэтому много лет спустя и появился этот проект "нанокомпьютера".

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

мне довелось попробовать только CP/M 86, на ЕС-1841, а остановился на Альфа-ДОС

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Картонный домик для "нанокомпьютера":

(мастерить коробки оказалось ужасно увлекательным делом :-)))))

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

ua6em пишет:

... CP/M 86 ... Альфа-ДОС

Жаль, что Гарри Килдалл легкомысленно отнесся к визиту людей из IBM. Как я читал, они ждали, пока он носился над ними на реактивном самолете. В итоге они обратились к Билли. А так, возможно, многое могло быть по-другому...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

FoxyLab пишет:

ua6em пишет:

... CP/M 86 ... Альфа-ДОС

Жаль, что Гарри Килдалл легкомысленно отнесся к визиту людей из IBM. Как я читал, они ждали, пока он носился над ними на реактивном самолете. В итоге они обратились к Билли. А так, возможно, многое могло быть по-другому...

 

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

ua6em пишет:

FoxyLab пишет:

ua6em пишет:

... CP/M 86 ... Альфа-ДОС

Жаль, что Гарри Килдалл легкомысленно отнесся к визиту людей из IBM. Как я читал, они ждали, пока он носился над ними на реактивном самолете. В итоге они обратились к Билли. А так, возможно, многое могло быть по-другому...

 

Интересное чтиво!
Одна опечатка:
"Но в конце 1990-х, когда Microsoft отвлеклась на Windows, а очередная версия MS DOS 4 оказалась не слишком удачной, Гари Килдалл выпустил весьма «продвинутую» версию своей операционки, получившей к тому времени название DR-DOS, с поддержкой расширенной памяти и процессора 80386. Она даже на короткое время смогла стать лидером продаж, но тут вышла Windows, которая с DR-DOS была плохо совместима, а также куда более совершенная MS DOS 5, и продукт Килдалла опять оказался в тени."

Должно быть 1980-х

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Добавил возможность включения "турбо"-режима "на лету" с помощью перемычки - отключается прорисовка пикселей в ТВ-кадре, аналог FAST MODE в ZX81. Время выполнения бейсик-теста уменьшается в этом режиме со 120 до 70 секунд.

Green
Offline
Зарегистрирован: 01.10.2015

А вот люди чем страдают: https://collapseos.org/

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Green пишет:

А вот люди чем страдают: https://collapseos.org/

Я видел статью на хабре об этом - так как адреса в памяти для этой ОС, скорее всего, можно менять, то возможно смогут добиться запуска на обычном Спектруме.

Так как там target - Z80, то на своем "нанокомпьютере" я ее не запущу. Хотя, в будущем, возможно - у них в дорожной карте есть 8080.
Видеовывод там пока не реализован, только последовательный канал (по крайней мере в дорожной карте, и я не совсем представляю как они сделают его универсальным, в Сеге они то использовали ее средства для этого).

Green
Offline
Зарегистрирован: 01.10.2015

Так Z80 ведь тоже эмулируется.)
А для CP/M люди вон какие командеры понаделали.

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Green пишет:

Так Z80 ведь тоже эмулируется.)

Конечно, эмулируется.
Но не в рамках моего проекта - я могу эмулировать, например, LDIR или другие некоторые популярные команды, но на полную эмуляцию всех дополнительных команд флэша 328-й не хватит.

P.S.
"Привет, мир!" на FORTH-83:

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

c CP/M была команда PING?

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

ua6em пишет:

c CP/M была команда PING?

Там еще есть занятные файлы, например, сервисные программы вот для такого устройства:
https://www.fussylogic.co.uk/~interak/www.interak.co.uk/micro_drive.htm

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Добавление read-ahead/write-through кэша инструкций (однолинейный, 16 байт) между ядром эмуляции и I2C-памятью ускорило работу CP/M, например, время полной отработки DIR на дискете с системными файлами и тестами уменьшилось в полтора раза.

Green
Offline
Зарегистрирован: 01.10.2015

А I2C RAM на какой частоте работает? Может SPI RAM следовало использовать?

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Green пишет:

А I2C RAM на какой частоте работает?

400 кГц.

Green пишет:

Может SPI RAM следовало использовать?

У меня есть такой чип на 32 Кбайта, но я хочу его для видеопамяти применить - там есть чудесный режим Sequential mode, в котором тактовые импульсы просто последовательно прогоняют на пин SO биты содержимого памяти.

Green
Offline
Зарегистрирован: 01.10.2015

Ну 400 кгц можно и поднять. Только не думаю что это сильно повлияет, ибо в интерпретацию в основном всё упирается.

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Green пишет:

Ну 400 кгц можно и поднять. Только не думаю что это сильно повлияет, ибо в интерпретацию в основном всё упирается.

Нет, это не так.

Длительность прогона 32768 команд:

NOP
без выборки из памяти  - 0,6 сек
с выборкой из памяти - 2,1 сек

MOV A,A
без выборки из памяти - 0,7 сек
с выборкой из памяти - 2,2 сек

DAA
без выборки из памяти - 0,8  сек
с выборкой из памяти - 2,3 сек

И это еще и с включенным кэшированием. Без кэша прогон NOP требует больше 6 секунд.

Так это подтверждается и простой арифметикой -
на выборку однобайтовой команды требуется ~ 10/400 кГц = 1/40 кГц - а это 400 машинных тактов.

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Актуальное видео работы «нанокомпьютера»:

https://youtu.be/Yuq1yEH-WZ8

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Набор символов шрифта:
на экране LCD-телевизора:

на экране ЭЛТ-телевизора:

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Игра в реверси против «нанокомпьютера», успешно скомпилировавшего для этого программу на C:

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Винтаж - StarTrek на кинескопном ТВ:

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Схема PS/2-UART преобразователя для подключения PS/2-клавиатуры:

Дополнительные опции -
страничный режим (блокировка прокрутки) — управление клавишей Scroll Lock с индикацией светодиодом;
ввод русских букв в кодировке КОИ-8 — переключение языка комбинацией клавиш Alt-Shift с индикацией светодиодом;
аппаратная перезагрузка сочетанием клавиш Ctrl-Alt-Del

Green
Offline
Зарегистрирован: 01.10.2015

У клавиатуры ведь свои индикаторы имеются.)

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Я преодолел ограничение физического разрешения видеовыхода моего "нанокомпьютера" (45 колонок) в стиле  портативного микрокомпьютера Osborne 1 - используя два виртуальных экрана.
Содержимое текущего виртуального экрана хранится в видеопамяти (ОЗУ микроконтроллера), а содержимое другого виртуального экрана - в основной памяти (I2C-чипах).
Экраны расположены горизонтально, разрешение виртуального экрана - 40 колонок и 19 строк + 1 строка статуса:

Таким образом, виртуальные экраны эмулируют физический экран с 80 колонками (Osborne эмулировал физический экран со 128 колонками посредством перекрывающихся виртуальных экранов шириной 56 колонок).
Переключение режимов (физический экран/виртуальные экраны) осуществляется из программы-монитора.
Переключение между виртуальными экранами осуществляется комбинацией клавиш CTRL-O.
Пример:
левый виртуальный экран

правый виртуальный экран

Green
Offline
Зарегистрирован: 01.10.2015

Ну так это ж порнография.) Уж лучше тогда сдвигать влево, допустим, на 8 колонок за одно нажатие.

FoxyLab
FoxyLab аватар
Offline
Зарегистрирован: 10.06.2015

Запустил на "нанокомпьютере" интерпретатор LISP/80 версии 1.1:

Вот заметка об этом интерпретаторе в журнале BYTE: