Запуск компилятора языка Ada на Arduino Nano

На моем эмуляторе cpm4nano компьютера с процессором Intel 8080 и ОС CP/M (https://acdc.foxylab.com/node/76) на Arduino Nano 3.0 я запустил компилятор языка Ada!!! -
компиляция программы TOWERS.ADA для решения задачи о «Ханойской башне»:

запуск скомпилированной программы TOWERS.COM:

22 комментария

avatar
а что значит "Я создал эмулятор для Arduino Nano, способный воспроизводить все команды процессора i8080"?
Сам написал?
  • VBI
  • 0
avatar
Да.
Статья с описанием — acdc.foxylab.com/node/76
Код — github.com/Dreamy16101976/cpm4nano
avatar
очень впечатляюще!
avatar
Спасибо!
avatar
Отличный проект!
avatar
Рад, что проект понравился!
avatar
Интересно, а как реализован вывод на экран? только через BDOS или непосредственным доступом памяти?
avatar
Для консольного вывода я перехватываю обращение (из BDOS) к BIOS и делаю вывод в порт (я эмулирую порты «Альтаира» для совместимости) — при выполнении вывода в порт я делаю вывод на консоль (сейчас я использую для связи с эмулятором преобразователь USB-COM, в дальнейшем сделаю вывод на экран). Сами BDOS и CCP — оригинальные, от CP/M 2.2.
avatar
т.е. как в Apple I? Запись значения = вывод на экран?

оч. интересно.
avatar
пардон, Apple 3 вроде бы.
avatar
Не совсем так. В процессор 6502 (на котором построен Apple II) пространство ввода-вывода проецируется на адресное пространство памяти (ввод-вывод в определенную ячейку памяти = ввод-вывод в определенный порт). В Intel 8080 пространство ввода-вывода отделено от памяти, просто если исполнитель команд в моем эмуляторе видит, что нужно выполнить вывод байта в определенный порт, то он выводит этот байт на экран (в консоль).
avatar
Дело не в процессорах а в реализации. Интересно, а под cp/m ansi последовательности работают? Например, позиционирование курсора.
avatar
Реализация должна соответствовать тому, что ожидают прикладные программы, работающие на этом процессоре.
Там работают ESC-последовательности терминала VT-100.
avatar
P.S. Я же могу запустить на эмуляторе не только CP/M, но и программы, работающий без ОС — например, альтаировский BASIC.
avatar
версию PaloAlto?
avatar
Да, я для этого сделал порты консольного ввода-вывода как у двух разновидностей плат для «Альтаира». Но Ада, конечно, интереснее. Сейчас хочу Фортран (первый ЯВУ, с которым я познакомился) и Форт попробовать запустить.
avatar
Изменил подход к эмуляции НГМД — выделил на карточке область для хранения содержимого 100 дискет и командой монитора Z «вставляю» дискету в один из дисководов A, B, C или D
(например, команда ZB02 монтирует дискету с номером 02 в дисковод B)

Номера «вставленных» дискет запоминаются в EEPROM Arduino и восстанавливаются при повторном запуске эмулятора.
avatar
Я сделал эмуляцию устройства управления памятью (MMU) с переключением банков, что позволило иметь доступ к 256 КБайтам памяти.
Я разделил адресное пространство 0x0000...0xFFFF на 16 блоков (с номерами от 0x0 до 0xF) размером по 4 КБайта. Каждый блок может быть отображен в один из 8 банков (размер банка — 64 КБайта). Соответствие банков блокам определяется значениями (номерами банков от 0 до 7) в наборе из 16 регистров (при запуске эмулятора активен только банк 0).
Для задания номера банка для определенного блока используются две команды вывода в порт:
OUT D0, номер_блока
OUT D1, номер_банка
Также для переключения блока памяти X на банк памяти Y можно использовать команду монитора YXY.
avatar
Тестирование 8 банков (512 КБайт памяти):
avatar
cpm4nano Mk II
(использовал адаптер для подключения microSD-карточки)
avatar
Новый рекорд — я прогнал без сбоев 7400 проходов теста памяти (ардуинка непрерывно молотила больше двух суток):

Так что опасения в быстром выходе из строя карточки немного преувеличены.
avatar
Вот они какие, Гики…
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.