как сделать компьютер на ардуино

8-битный компьютер с BASIC и VGA-выходом на Arduino

C помощью Arduino можно собрать 8-битный ретро-компьютер с Basic (похожий на ZX Spectrum) с выводом цветного изображения на VGA-монитор.

Кроме того, этот проект можно использовать как простой способ вывода текстовых сообщений на монитор.

Сама по себе, идея использовать Arduino для создания компьютера с BASIC не нова, но насколько я знаю, все они не поддерживают вывод цветного изображения. В некоторых проектах использовались LCD-мониторы, а в других — библиотека TVout, которая выводит чёрно-белое изображение. Кроме того, многие из этих проектов требуют дополнительные модули и специальные платы расширения. Тут же нужно всего-то иметь два Arduino, несколько резисторов, плюс разъёмы для PS/2 клавиатуры и VGA-монитора.

Для проекта нужно две платы Arduino: один будет основным (или «мастером»), в нём работает интерпретатор Tiny Basic Plus (это порт Tiny Basic на языке Си, адаптированный для поддержки Arduino). Также этот Arduino управляет PS/2 клавиатурой. Вывод из первого Arduino через последовательный порт отправляется на второй Arduino, который с помощью библиотеки VGAx генерирует VGA-сигнал.

Программу на языке BASIC в собранный нами компьютер можно будет ввести с помощью PS/2 клавиатуры, а результат можно будет посмотреть на VGA-мониторе: разрешение получившегося изображения 24 столбца на 10 строк, размер символов — 5х6 пикселей, доступно 4 цвета.
После введения программы, её можно будет сохранить в энергонезависимой памяти самого Arduino, а также код программы предусматривает управление I/O пинами Arduino.

1. Подключаем основной Arduino с интерпритатором TinyBasic и с PS/2 клавиатурой

Потом нам понадобится библиотека PS2keyboard, её можно загрузить отсюда. После скачивания просто распакуйте архив, и скопируйте его содержимое в «arduino-1.6.4\libraries».

Дальше, загрузите файл TinyBasicPlus_PS2_VGAx.ino, и прошейте его в основной Arduino.
Это версия обычного TinyBasic Plus, где была добавлена поддержка библиотеки PS/2.

Больше информации о TiniBasic Plus и руководства (на английском языке) можно найти тут.

Если на этом этапе нет проблем (в том числе, проблем с совместимостью), то Tiny Basic будет автоматически запущен при включении Arduino. И его можно будет протестировать с помощью последовательного порта на вашем ПК. Для этих целей я использую PuTTY, но вы можете использовать и другую подобную программу, по вашему вкусу.

В настройках нужно правильно установить COM-порт (тот же, что используется в Arduino), и скорость передачи = 4800.

И тут уже можно протестировать нашу систему, набрав какую-нибудь программу на Basic с клавиатуры вашего ПК (позже мы подключим PS/2 клавиатуру напрямую к Arduino).

Для примера, можно набрать:

Прервать бесконечный цикл этой программы можно с помощью комбинации клавиш Ctrl+C (это не сработает, если мы будем делать это с клавиатуры PS/2).

Теперь подключим PS/2 клавиатуру.

2. Подключаем PS/2 клавиатуру к основному Arduino

Информация и библиотека были взяты из этого материала.

По существу, вам нужно соединить следующие четыре контакта:
Data клавиатуры к Arduino pin 8,
IRQ (clock) клавиатуры к Arduino pin 3;
а также подключить землю (GND) и питание +5V, соответственно.

Я использовал PS/2 разъём cо старой нерабочей материнской платы, его можно легко сдуть с помощью фена.

Распиновка PS/2 разъема есть на рисунке:

1fdsvyvp3lcsltguldtq6ae rtk

3. Загружаем библиотеку VGAx и код во второй Arduino, и соединяем его с основным

shlbrt8lnuqjkehceekjhmvadrm

Для начала, загрузите код VGAx-PC.ino и скопируйте его к себе на компьютер в папку с таким же именем.

Потом — загрузите с GitHub бибилиотеку VGAx. Её нужно поместить в подпапку «libraries» Arduino IDE.

ВАЖНО! Эта бибилиотека работает с Arduno IDE 1.6.4 и может быть не совместима с другими, более новыми версиями.

Теперь загрузите VGAx-PC.ino во второй Arduino (я тестировал на Arduino Nano, но с Arduino Uno тоже не должно быть проблем).

Предупреждение, что мало доступной памяти — это нормально для нашего случая. Если других ошибок нет, то всё в порядке — и можно сделать ещё пару шагов, чтобы получить свой собственный 8-битный ретро-компьютер.

Осталось всё соединить по схеме на рисунке, и наш 8-битный компьютер готов!

Источник

H Бортовой компьютер для авто на Arduino своими руками в черновиках Из песочницы

UPD 27.12.2017: Решил дополнить статью что проект был доработан другим пользователем, улучшен скетч в плане автоматической задержки, восстановления связи в случае разрыва соединения и много других нюансов… спасибо. Oleg его почта для вопросов: 2003shef@gmail.com

Его комментарии к переработке:

1.вся проводка и соединение всех модулей и узлов сохранены из первоначального проекта.(кроме подключения блутуз модуля, он теперь на серийном порте «1»)

2.программа жестко заточена под ардуино МЕГА 2560. на серийном порте «0» присутствует Дебаг при условии раскоментирования дефайна.

3.убран параметр задержки между опросами, задержка полностью интелектуальна и динамична, новый запрос не отправится пока не будет получен ответ на предыдущий с учетом таймаута.

4.добавлена функция восстановления связи в случае разрыва соединения (параметром потери связи служит отсутствие оборотов двигателя).

5.для работы требуется библиотека OBD.h вложенная в архив с проектом, этот экземпляр имеет несколько изменений от оригинала который можно скачать из интернета, и без неё скорее всего проект не будет работать или будет нестабилен.
папку нужно скопировать в папку » \Documents\Arduino\libraries»

Android приложение со всеми нюансами в Google Play: OliviaDrive

Мы сможем сделать бортовой компьютер, умеющий считать расход топлива, показывать температуру охлаждающей жидкости, скорость авто, расстояние поездки, потраченный бензин за поездку, обороты двигателя, давление во впускном коллекторе, температуру впускного коллектора, УОЗ, коррекции топлива, вольтаж датчиков кислорода, нагрузку двигателя и многое другое.

fd14863e6acb8f929360683240335730

b954e499bc36a0d0e756579ece677ab8
e955bac70ece4e532dffd13a7b922b89
28acd2c86cf5578ef9c92b9ba1433aaf
d76ffaef81be8e9030c0a14d4c7ec33b
a06d7973d138086a9143554daef84892
b56c8e61b127955d3e03f930b20bf131
f1e6bb48fd4bbfe4593961a012ba10cf

Список требуемых деталей для сборки БК

f46d6a3f79812d749c388902e98d90d3

2) LCD2004 жк-модуль

ffc07bb9f8d4a553ca43d5fb05f4bcee

3) Модуль Bluetooth HC-05

7ce9a82f4f99405793b5ce1b958177d2

4) OBD ELM327 Bluetooth сканер

aa9ee0a7a6a241b3ae05bf7ded289cbe

5) Резистор 10 кОм подстроечный, бипер для звука, 2 кнопки для смены экранов, провода для соединений, корпус

Настройка блютуз модуля HC-05 для работы

Подпаиваем провода к пинам блютуза: (картинку с выходами смотреть в описании требуемых деталей)

7ce9d1f59c654bcea000043cbc014830

#include
SoftwareSerial BTSerial(6, 7); // TX | RX
void setup()
<
Serial.begin(9600);
Serial.println(‘Enter AT commands:’);
BTSerial.begin(38400);
>

void loop()
<
if (BTSerial.available())
Serial.write(BTSerial.read());
if (Serial.available())
BTSerial.write(Serial.read());
>

После успешной загрузки скетча открываем: Сервис->Монитор порта. Далее снизу ставим скорость 9600 бод и NL+CR вместе.

Далее вводим команды по одной и нажимаем [Послать]. После каждого ввода должен быть ответ ok.

AT // (возможно 1 раз вылетит Error, не пугайтесь… это нормально, повторите опять)
AT+NAME=Car //Присваиваем имя модулю Car
AT+ROLE=1 // Переводим модуль в режим Мастер
AT+PSWD=1234 // Ставим пароль 1234 как на OBD ELM327
AT+BIND=AABB,CC,112233 //Прописываем Mac адрес OBD ELM327.
AT+CMODE=1 // Подключение модуля с фиксированным адресом
AT+UART=9600,0,0 // Скорость работы по UART

Заметьте, что mac-адрес вида: «AA:BB:CC:11:22:33» вводится как «AABB,CC,112233». MAC- адрес своего модуля ELM327 можете посмотреть, подключившись для начала на него со своего мобильника. (Стандартные пароли обычно: 1234, 6789, 0000).

Всё, настройка модуля Bluetooth закончена.

Теперь нужно собрать схему Arduino + блютуз + LCD-экран

Схема:
30a8f03420f34a58a5c0d028e6f1a049

Переменный резистор на 10кОм нужен, чтобы управлять контрастностью монитора, так что если при первом включении вы включите и ничего не увидите, попробуйте отрегулировать контрастность шрифта поворотом резистора.

3. Подключаем дополнительную кнопку для переключения экранов с данными.

[1 кнопка]: один конец от нормально-открытой кнопки подключаем в GND ардуино, а второй конец в пин 10.
[2 кнопка]: GND + пин 9.

Бипер для звуковых предупреждений подключить по следующей схеме «+» к пину 13, а минус к GND ардуино.

Заливаем скетч в Arduino с помощью Aduino IDE 1.0.6 (использовал эту версию).

Единственное, в скетче присутствуют переменные, которую нужно подправить.

Нужно будет обязательно учесть три переменных:

1) ED=1.998 Например объем двигателя в литрах 1.398;
2) VE_correct=1.0; Корректировка объёмного КПД ДВС по таблице: (если расход реально меньше — то уменьшаем значение в процентном соотношении). Если не хотите калибровать добейтесь чтобы при прогретом двигателе мгновенный расход в л/час был в районе половины обьема двигателя;
5)speed_korrect_val=1; Корректировка скорости машины, смотреть по GPS/

Управление

[Кнопка 1], [кнопка 2] — листать экран вперед назад.
При включении при надписи «Connecting»… держать [кнопку 1] вход в режим показывания технологических экранов и параметров отдаваемых ЭБУ в 16-чном формате. Если будете включать БК не в машине то нужно отключить функцию опроса блютуз, надо продолжать держать две кнопки при надписи «Recovery»… до появлении надписи «All off»… а то экран будет все время пустой.

[Кнопка 1] + [кнопка 2]: 4 секунды — Сброс журнала общего пробега и потраченного бензина на втором экране, также это сброс ошибок на экране информации об ошибках.

Скетч:

Старый скетч был удален в плане многих дефектов в работе… новая версия по ссылке вверху статьи… он был доработан пользователем Oleg, спасибо ему большое. его почта для вопросов: 2003shef@gmail.com

Все, идем в машину, вставляем ELM327 в порт, ардуину в зарядку для авто и проверяем.

Источник

Мой самодельный компьютер на Arduino Nano под управлением ОС CP/M

В процессе его создания я решил несколько задач:

Проект постоянно развивается, поэтому описание может не успевать за текущим состоянием проекта!

Структурная схема проекта :
cpm4nano mkV

Внешний вид проекта :
cpm4nano mkVI green

Конфигурация системы :

Симулятор процессора i8080

Я создал симулятор для Arduino Nano, способный воспроизводить все команды процессора i8080.
При этом под i8080 я понимаю все семейство X8080Y, не имевшее программных отличий.

Мой симулятор представляет собой интерпретатор, последовательно выполняющий команды микропроцессора i8080.

ТЕСТЫ ПРОЦЕССОРА i8080, УСПЕШНО ПРОЙДЕННЫЕ СИМУЛЯТОРОМ

cpm4nano mctest
Этот тест тестирует большую часть флагов, режимов и инструкций (за исключением операций ввода-вывода, обработки прерываний, также тестируются не все постусловия инструкций).

8080PRE (предварительный (preliminary) тест) от Ian Bartholomew и Frank Cringles

cpm4nano 8080pretest

DIAGNOSTICS I от SUPERSOFT ASSOCIATES (версия 1.2, 1980 год)

cpm4nano sscpudiag1 12

DIAGNOSTICS II от SUPERSOFT ASSOCIATES (версия 1.2, 1981 год)

cpm4nano sscpudiag2 12

Буквы A. Z обозначают пройденные тесты.

8080/8085 CPU Exerciser от Ian Bartholomew и Frank Cringles

Эмуляция оперативной памяти

Обозначение вывода Назначение вывода:
A0 бит 0 адреса
A1 бит 1 адреса
A2 бит 2 адреса
WP защита от записи
SDA данные/адрес (I 2 C)
SCL тактирование (I 2 C)
VDD напряжение питания 5 В
VSS «земля»

Подключение к Arduino Nano осуществляется так:

Вывод FRAM VDD SDA SCL VSS
Вывод Arduino Nano 5V A4 A5 GND

Схема подключения FRAM-памяти:
cpm4nano fram

Измерения выполнялись в FAST-режиме.

ТЕСТЫ ОПЕРАТИВНОЙ ПАМЯТИ, УСПЕШНО ПРОЙДЕННЫЕ СИМУЛЯТОРОМ

(случайная последовательность сгенерирована с помощью сервиса RANDOM.ORG).

UMPIRE от Mel Cruts (1980 год)

cpm UMPIRE

MEMR Rasmussen Memory Test от Lifeboat Associates (версия 2.2, 1980 год)

Сохранение и загрузка образов памяти

Эмуляция консоли

Ввод/вывод через последовательный порт

Для управления потоком используется вывод CTS преобразователя USB-Serial, который соединен с выводом D2 Arduino. «Низкий» уровень на этом выводе разрешает передачу данных от компьютера к эмулятору.

Вывод на экран телевизора

В качестве альтернативы выводу в последовательный порт я использую вывод на телевизионный экран через композитный вход.

Схема реализации вывода изображения на экран ТВ:
cpn4nano tvout mk1

Русские буквы и символы псевдографики (согласн RFC 1489) соответствуют кодировке КОИ-8 (KOI-8R):
.

Вот как выглядит набор символов шрифта:

на экране LCD-телевизора:
cpm4nano font 45

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

Снимок экрана ЭЛТ-телевизора с результатами дампа памяти из монитора:
cpm4nano dump

Пример снимка телевизионного экрана с выполненной командой DIR и тестами процессора:
cpm4nano tv 1

Я преодолел ограничение физического разрешения видеовыхода моего «нанокомпьютера» (45 колонок) в стиле портативного микрокомпьютера Osborne 1 — используя два виртуальных экрана.
Содержимое текущего виртуального экрана хранится в видеопамяти (ОЗУ микроконтроллера), а содержимое другого виртуального экрана — в основной памяти (I2C-чипах).
Они расположены горизонтально, разрешение виртуального экрана — 40 колонок и 19 строк + 1 строка статуса:
cpm4nano virt scrs
Таким образом, виртуальные экраны эмулируют физический экран с 80 колонками (Osborne эмулировал физический экран со 128 колонками посредством перекрывающихся виртуальных экранов шириной 56 колонок).
Переключение режимов (физический экран/виртуальные экраны) осуществляется из программы-монитора.
Переключение между виртуальными экранами осуществляется комбинацией клавиш CTRL-O.
Пример:
левый виртуальный экран
cpm4nano virt scr 0
правый виртуальный экран
cpm4nano virt scr 1

Я использую вот такой кабель:
cpm4nano tv cable

На телевизоре при этом необходимо выбрать соответствующий вход для сигнала:
cpm4nano tv av

При выводе на экран телевизора позиция следующего символа указывается подстрочным «аппаратным» курсором:
cpm4nano cursor

Я сделал отображение видеопамяти в верхнюю часть адресного пространства процессора. Поэтому при записи в эту область памяти на экране появляется соответствующий символ:
cpm4nano vram map CRT

Страничный режим вывода на экран

Если происходит полное заполнение экрана (после операции ввода с консоли), то вывод на экран и работа эмулятора приостанавливается, а в самой нижней строке экрана (она не используется для вывода текста) появляется приглашение «>>>» для нажатия какой-либо клавиши после просмотра информации на экране (страничный режим). После нажатия клавиши происходит прокрутка информации на экране и работа эмулятора продолжается до следующего полного заполнения экрана.

Ввод через PS/2-клавиатуру

В качестве альтернативы вводу из «большого» компьютера через последовательный порт я использую ввод с клавиатуры, подключенной через преобразователь PS/2UART:
cpm4nano stm8

Я сделал такой преобразователь на основе микроконтроллера STM8S103F3P6. К PS/2-разъему этого преобразователя подключается клавиатура, оснащенная соответствующим разъемом, а выход преобразователя подключается к контактам UART Arduino Nano вместо преобразователя USB-UART.

Преобразователь получает скан-коды нажатых клавиш от клавиатуры, помещает их в кольцевой буфер и выдает их в последовательный порт, проверяя предварительно сигнал CTS.

Индикация включенного режима блокировки прокрутки осуществляется желтым светодиодом SCROLL:
cpm4nano scroll led

Переключение языка ввода (английский/русский в кодировке КОИ-8) осуществляется нажатием сочетания клавиш AltShift:
cpm4nano rus hello

Включение русского языка ввода индицируется синим светодиодом RUS:
cpm4nano rus led

При нажатии сочетания клавиш CtrlAltDel на клавиатуре выполняется перезагрузка (подается импульс низкого уровня на вход RST Arduino).

Эмуляция дисководов

Я эмулирую поведение дисковода гибких дисков на уровне обращений чтения/записи к портам.

Порты контроллера дисковода/DMA:
порт 0xE0: порт статуса (R)/ команды (W)
порт 0xE1: порт дорожки (R/W)
порт 0xE2: порт сектора (R/W)
порт 0xE3: порт выбора диска (R/W)
порт 0xE4: порт младшего байта адреса DMA-буфера (W)
порт 0xE5: порт старшего байта адреса DMA-буфера (W)

Для эмуляции дисководов гибких дисков (на дискете 77 дорожек с 26 128-байтными секторами на каждой = 2002 (0x7D2) сектора = 256256 байт = 250,25 Кбайт) я использую SDHC-карточку, выделив в ней области, начиная с сектора 0x0001000, для эмуляции 100 дискет (128-байтный сектор эмулируемой дискеты размещен в начале 512-байтного сектора карточки, для каждой дискеты отводится 0x1000 секторов).

Для «общения» с карточкой используется шина SPI:

ICSP-разъем Arduino Nano:
cpm icsp

Я подключил microSD-карточку посредством специального адаптера:
cpm SD adapter

Для индикации доступа к карте я подключил красный светодиод с балластным резистором между выводами 3V3 (анод светодиода) и SS (катод светодиода).

С помощью команды Z монитора я могу «вставить» дискету в любой из четырех дисководов A, B, C или D:
(например, команда ZB02 монтирует дискету с номером 02 в дисковод B)
cpm floppy

Файлы могут быть скопирован с одного диска на другой с помощью утилиты PIP:
например, PIP B:=A:TEST.COM копирует файл TEST.COM с диска A на диск B.

Хранение данных на магнитной ленте

Я реализовал запись данных на магнитную ленту/в аудиофайл и считывание данных с магнитной ленты/аудиофайла.

Для согласования уровней я использую такую схему:
cpm4nano tape ckt

Она рассчитана на запись данных на линейный вход и считывание с линейного выхода.
Схема реализована в виде небольшой платы:
cpm4nano tape brd

Для подключения внешних устройств служат два RCA-разъема:
cpm4nano tape rca

При работе с магнитной лентой приостанавливается работа видеогенератора.

Формат данных:
cpm4nano tape fmt

Вот как биты представлены в аудиофайле:
cpm4nano tape bits

Эксперименты показали, что отклонение скорости проигрывания на 20% не влияет на надежность считывания данных.

Пример WAV-файла с записью трех блоков:
tape.wav

Звуковой сигнал

Для подачи звукового сигнала я использую пьезоизлучатель, подключенный к выводу A0 Arduino Nano (этот же выход используется и для записи на магнитную ленту):
cpm4nano beeper

Питание

В качестве источника питания (выходное напряжение 5 В) я использую интегральный стабилизатор 7805, входное напряжение (9 В) на который подается с выхода компактного блока питания:
cpm4nano psu

Адаптация операционной системы CP/M

Операционная система CP/MControl Program for Microcomputers«) версии 2.2 (однопользовательская и однозадачная) была выпущена компанией Digital Research Inc. (DRI) под руководством Гарри Килдалла (Gary Kildall) и его жены Дороти МакЭвен (Dorothy McEwen) в 1979 году.
Gary Kildall
Гарри Килдалл (Gary Kildall)

При запуске программы getcpm.exe требуется указать размер памяти в килобайтах (XX) и желаемый серийный номер системы CP/M (6 байтов в 16-ричном виде, YYYYYYYYYYYY), после выполнения настройки создается файл CPMXXK.SYS и указывается его восьмибитная контрольная сумма:
getcpm 1

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

Размер получаемого файла, содержащего CCP и BDOS операционной системы CP/M версии 2.2, равен 5632 байта.
Я выбрал вариант с 62 Кбайтами ОЗУ (62K system).

После ввода команды монитор ожидает начала передачи от компьютера, передавая символы C. Затем в программе Tera Term необходимо выбрать для загрузки файл CPM64K.SYS с образом системы. После окончания загрузки происходит возврат в монитор.

CCP и BDOS располагаются на SDHC-карточке, начиная с сектора 256, откуда их загружает написанный мной начальный загрузчик.

Карта памяти системы:

Я сделал перехват функций BIOS (при обращении по соответствующим адресам памяти) и их реализацию:
(смещения указаны относительно адреса 0xFA00)

Оптимизация проекта

Для оптимизации исходного кода проекта я использую утилиту avr-nm, которая позволяет отобразить размеры кода функций и областей памяти, занимаемых переменными:

Указанная команда выводит результирующую информацию (о скомпилированном файле проекта cpm4nano-master.ino.elf) в файл size.txt.

Пример результата работы утилиты:

Имя объекта указывается в четвертой колонке.

Эксплуатация

Карта памяти SD-карточки (сектора карточки имеют размер 512 байт)

После включения Arduino Nano происходит детектирование FRAM-чипов памяти на шине I 2 C, проверка оперативной памяти:
cpm4nano boot crt

Запуск программ в мониторе

В мониторе можно запустить монитор от микрокомпьютера «Altair 8800«.

После запуска появляется приглашение в виде точки:
cpm4nano turnmon run

Вводя команду D, получаем дамп области памяти:
cpm4nano turnmon d

Загрузка операционной системы CP/M

Пример результата выполнения команды DIR:
cpm dir
При нажатии клавиш CTRL + / при запросе ввода с консоли происходит возврат из ОС CP/M в монитор.

Загрузка файлов в эмулятор

Для загрузки файлов в эмулятор посредством терминальной программы (я покажу этот процесс на примере программы Tera Term) используется протокол XMODEM.

После ввода команды монитор ожидает начала передачи от компьютера, передавая символы C.

Затем в программе Tera Term необходимо выбрать пункт меню для передачи файла по протоколу XMODEM:
cpm4nano file wrt 2

Затем следует выбрать файл для загрузки (например, CPU.COM):
cpm4nano file wrt 3

После выбора файла начинается его загрузка:
cpm4nano file wrt 4

После окончания загрузки происходит возврат в монитор:
cpm4nano file wrt 5
При этом отображается количество принятых байт.

Для загрузки в оперативную память данных из файла формата Intel HEX используется команда монитора F.

Для записи загруженных (с адреса 0x100) данных на диск необходимо загрузить ОС CP/M командой монитора C:
cpm4nano file wrt 6

После окончания записи записанный файл CPU.COM отображается при просмотре директории командой DIR:
cpm4nano file wrt 8

Также я разместил на диске интерпретатор бейсика TINYBAS.COM и тестовые программы TEST.COM, 8080PRE.COM, 8080EX1.COM.

Оценка быстродействия

Прогон из монитора 32768 команд:

Команда FAST-режим SLOW-режим
NOP 1,7 секунды 3,0 секунды
MOV A, A 1,8 секунды 3,3 секунды
DAA 2,0 секунды 3,6 секунды

Выполнение теста DIAGNOSTICS II V1.2:

(между BEGIN TIMING TEST и END TIMING TEST):

FAST-режим SLOW-режим
899 секунд 1743 секунды (x1,94)

Выполнение тестовой программы в TINYBASIC:

FAST-режим SLOW-режим
123 секунды 202 секунды (x1,64)

Выполнение скомпилированной программы PRIMES, написанной на Ada (найдено 1899 простых чисел):

cpm ada primes

FAST-режим SLOW-режим
10320 секунд 16980 секунд (x1,65)

Программирование

Я запустил интерпретатор бейсика TinyBASIC (SHERRY BROTHERS TINY BASIC VER. 3.1):
cpm tinybas

Ссылка на скачивание zip-архива с исполняемым файлом TINYBAS.COM и файлом справки TINYBAS.DOC:
https://acdc.foxylab.com/sites/default/files/TINYBAS.ZIP

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

Особенности этого диалекта BASIC:

ALTAIR 8K BASIC

Из-за использования старшего бита в служебных целях листинг получается искаженным:
cpm4nano basic8k lst2

Отображение в терминале можно исправить, предварительно включив 7-битный режим обмена с помощью команды монитора H7.

Для удаления последнего введенного символа необходимо ввести знак подчеркивания:
cpm4nano basic8k del

Программу можно загрузить с компьютера через терминальную программу из текстового файла такого формата:

Вот такой тест выполняется 110 секунд в FAST-режиме (162 секунды в SLOW-режиме):
cpm4nano basic8k lst3

Также я проверил работоспособность четырехкилобайтной версии Бейсика:
cpm4nano basic4k lst1

Я записал на эмулируемую дискету компилятор CBASIC от компании Digital Research, который представлен такими файлами:

В моем эмуляторе успешно выполняются компиляция и линковка программ.

Вот какую тестовую программу я записал в файл HELLO.BAS:

Компиляция тестовой программы выполняется командой

cpm4nano cb80

Результатом компиляции является объектный файл HELLO.REL.

Линковка программы выполняется командой

cpm4nano lk80

Получаемый в процессе линковки исполнимый файл HELLO.COM успешно запускается командой

и выводит сообщение:
cpm4nano cbasic hello

Интерпретатор FOCAL для микрокомпьютера Altair успешно заработал на моем «нанокомпьютере»:
cpm4nano focal

Я успешно испытал компилятор и линкер из пакета BD Software C:
cpm4nano bds c 1

Компиляция тестовой программы TAIL.C выполняется командой

Результатом компиляции является объектный файл TAIL.CRL.

Линковка программы выполняется командой

В результате создается исполняемый файл TAIL.COM.

Я запустил FORTH-83 (файл f83.com доступен здесь):
cpm4nano f83 1

В качестве примера я ввел и исполнил простую программу, выводящую сообщение HELLO, WORLD!:
cpm4nano f83 2

Основные команды FORTH-83:
(при успешном выполнении команды выдается ok)

Можно вводить немедленно исполняемые команды:

towers ada comp

В процессе компиляции создаются временные файлы TOWERS.INT и TOWERS.OPT и результирующий файл TOWERS.COM.

Затем я запустил скомпилированную программу TOWERS.COM на выполнение командой

и получил решение задачи для трех колец:
towers ada 3

Я запустил интерпретатор LISP/80 версии 1.1 от Thomas W. Yonkman:

cpm4nano lisp80

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

cpm4nano lisp80 byte

Также я проверил работоспособность интерпретатора языка программирования MINOLTiny BASIC with Strings in 1.75K Bytes«), созданного для микрокомпьютера Altair :
cpm4nano minol

Игры

А вот как выглядит запуск игры реверси (Othello), написанной на языке C (файл OTHELLO.C скомпилировался в файл OTHELLO.COM):
cpm4nano othello 1

А вот как выглядит запуск игры Star Trek, написанной на языке Ada (файл STARTREK.ADA скомпилировался в файл STARTREK.COM):

в консоли:
cpm4nano startrek 00

на ЭЛТ ТВ:
cpm4nano startrek crt

Для атаки корабля Клингонов фазером (команда 2) необходимо указать мощность выстрела. Фазер не требует прицеливания, но сила его удара уменьшается с удалением от цели. После выполнения атаки отображается урон, нанесенный вражескому кораблю, и полученный от вражеского корабля:
cpm4nano startrek 04 0

При нанесении достаточного урона корабль Клингонов уничтожается и исчезает с карты:
cpm4nano startrek 06

Играющая в шахматы программа Microchess для микрокомпьютеров на процессоре Intel 8080 была разработана в 1977 году компанией MICRO-WARE LTD.:
cpm4nano uchess

Авторы программы: Peter R. Jennings (канадский исследователь) и T. O’Brien.
Эта была первая коммерчески успешная (было продано сыше 10 тысяч копий) шахматная программа для микрокомпьютеров. Код игры продавался напечатанным в брошюре, поэтому пользователь должен был сам ввести его в компьютер.

Вот как выглядит запуск этой программы на моем «нанокомпьютере»:
cpm4nano uchess 01

Клетки доски пронумерованы таким образом:
cpm4nano uchess board

На мой первый ход пешкой:

cpm4nano uchess 02

программа ответила ходом конем:
cpm4nano uchess 03

На обдумывание хода у «нанокомпьютера» ушло около трех минут.

youtube

Видео работы проекта в реальном времени:

Продолжение следует

Источник

Поделиться с друзьями
DOMA35.RU