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:

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

Мой "нанокомпьютер" успешно запустил BASIC (8 килобайт, версия 4.0) для микрокомпьютера Altair:

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

FoxyLab пишет:

Мой "нанокомпьютер" успешно запустил BASIC (8 килобайт, версия 4.0) для микрокомпьютера Altair:

Класс!!!
Рапира будет?

KPG
Offline
Зарегистрирован: 09.06.2019

FoxyLab пишет:

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

Если есть Форт, то можно запустить какой нибудь тетрис для консоли из Форта. :)

http://rosettacode.org/wiki/Tetris/Ansi94_Forth

P.S. на Z80 был и Форт-компьютер https://ru.wikipedia.org/wiki/Jupiter_ACE

https://sites.google.com/site/libby8dev/fignition FIGnition (AVR)

С тематикой использования Форт (Forth) много разных проектов в сети и на Github, Sourceforge ...

http://turboforth.net/you_tube.html

...

Forth для STM8 на Github https://github.com/TG9541/stm8ef

...

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

Ну а кому этот Форт сейчас может быть интересен? Если только любителям, как того же Brain Funk! Ну ладно, раньше ещё понимаю ограниченность ресурсов и т.п., сейчас то для чего? Если только чисто для мозговой тренировки. Так бестолку же.(

KPG
Offline
Зарегистрирован: 09.06.2019

Green пишет:

Ну а кому этот Форт сейчас может быть интересен? Если только любителям, как того же Brain Funk! Ну ладно, раньше ещё понимаю ограниченность ресурсов и т.п., сейчас то для чего? Если только чисто для мозговой тренировки. Так бестолку же.(

Спасибо за ваш ответ!

А, Вы уверены , что Форт исчерпал свои возможности?

Смотрели Вы на проекты языков типа https://factorcode.org/ ?

P.S. Я, понимаю, что на свалку истории можно выбросить многие идеи предыдущих поколений IT разработчиков

https://archive.org/details/Broudie2.  Интереснo ли  для Вас прочтение наполнения данной книги?

 

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

ua6em пишет:

Класс!!!

ua6em пишет:

Рапира будет?

KPG пишет:

Если есть Форт, то можно запустить какой нибудь тетрис для консоли из Форта. :)

Можно будет попытаться.
Но прямо сейчас проходит шахматный "батл" :-) между «нанокомпьютером», запустившим Microchess, (играет белыми) и «большим» компьютером с шахматным движком Sunfish (написан на Питоне, автор — Thomas Dybdahl Ahle).
Уже сыграны 22 хода:

1. e2 - e4
2. e7 - e5
3. g1 - f3
4. b8 - c6
5. f1 - b5
6. g8 - f6
7. 0 - 0
8. f6 - e4
9. d2 - d4
10. e5 - d4
11. f1 - e1
12. d7 - d5
13. d1 - d4
14. d8 - d7
15. d4 - c3
16. f8 - d6
17. c3 - g7
18. h8 - f8
19. h2 - h4
20. f7 - f5
21. g7 - h6
22. e8 - d8

Как оказалось, дебют - испанская партия, затем черные применили Берлинскую защиту, а белые - анти-Берлин.
Картинки и некоторые комментарии здесь - https://blog.foxylab.com/shahmatnyj-battl/
Игра продолжается :-)

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

дам посмотреть одному забегающему шахматисту на предмет каковы шансы...

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

Это было бы занятно.
Сам то я играю на уровне Остапа Бендера  :-( :-)

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

FoxyLab пишет:

Это было бы занятно.
Сам то я играю на уровне Остапа Бендера  :-( :-)

пока не публикуй результат, забежит - отпишу

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

Хорошо, но матч еще продолжается!

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

Да! Вижу. Белые должны взять коня конём, говорит, что у белых преимущество, большое, чёрные отстали в развитии, лишились рокировки, у белых очень сильная ладья, говорит, чёрные у меня бы уже не слезли )))

Говорит, было бы интересно посмотреть как бы сыграли Львовский гамбит

Да, говорит партия должна быть не более 40 ходов, при такой позиции дольше не играют

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

ua6em пишет:

Да! Вижу. Белые должны взять коня конём, говорит, что у белых преимущество, большое, чёрные отстали в развитии, лишились рокировки, у белых очень сильная ладья, говорит, чёрные у меня бы уже не слезли )))

Говорит, было бы интересно посмотреть как бы сыграли Львовский гамбит

Да, говорит партия должна быть не более 40 ходов, при такой позиции дольше не играют


Excellent!

Я, конечно, субъективно болею за "белых" ("нанокомпьютер" с Microchess), но Sunfish тоже дока писал.
Завтра - новая сводка.

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

ждём до завтра! сколько времени тратится на обдумывание ходов?

надо было конём )))

37 ход за белых - лошадью надо ходить, лошадью... )))

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

ua6em пишет:

ждём до завтра! сколько времени тратится на обдумывание ходов?

Первые ходы Microchess делал относительно быстро - минуты две-три, но затем стал думать час-два.

ua6em пишет:

надо было конём )))

37 ход за белых - лошадью надо ходить, лошадью... )))

 

:-))))

Означенная лошадь оказалась весьма резвой.

Ситуация после 40 хода (белые неплохо прижали черных - было уже два шаха):

23. e1 e2
24. a7 a6
25. b5 d3
26. c6 b4
27. c1 g5
28. e4 g5
29. h6 g5
30. d6 e7
31. g5 g7
32. b4 d3
33. c2 d3
34. f8 e8
35. h4 h5
36. c7 c5
37. f3 e5
38. d7 a4
39. e5 f7
40. d8 c7

P.S.
41. g7 e5
42. c7 c6
43. b1 c3
44. a4 d4
45. f7 d8
46. c6 d7
47. e5 f5
48. d7 d8
49. f5 f7
50. d4 d3
51. e2 e5
52. d3 c2

Продолжение по техническим причинам отложено на неделю.
 

 

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

Окрнчание пошло в стиле Пола Морфи )))