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

Тема в разделе "Глядите, что я сделал", создана пользователем FoxyLab, 23 мар 2017.

  1. ostrov

    ostrov Гуру

    Эту бы энергию, да во что то полезное.,))
     
    ИгорьК нравится это.
  2. FoxyLab

    FoxyLab Гик

    )))))))))
    Прекрасная цитата из Википедии по этому поводу:
    "Хо́бби (от англ. hobby — увлечение, любимое дело) или увлечение — вид человеческой деятельности, некое занятие, которым занимаются на досуге, для наслаждения. Увлечение — то, чем человек любит и с радостью готов заниматься в своё свободное время."
    P.S.
    а вот совсем уж для Вас бесполезная вещь, но жутко интересная ("just for fun", как говорится )))
    Zusie - My Relay Computer

    http://www.nablaman.com/relay/
    [​IMG]
     
    Igor68 нравится это.
  3. ostrov

    ostrov Гуру

    Это что. Слышали об игре Майнкрафт? Там люди умудряются из элементов на основе красной пыли делать процессоры. Я сам видел восьмибитный в работе. Выглядит как дом, управляется тумблерами, работает. ) Даже мониторы делают.
     
  4. FoxyLab

    FoxyLab Гик

    Вряд ли выпаивание из телефонных плат полутора тысяч (!) реле и их последующее запаивание в плату "Цузе" сравится по трудоемкости со сборкой, пусть и весьма кропотливой, кубиков, соединенных "редстоуном", в Minecraft. Но ведь хобби у всех разные, и у многих оно совсем не одно.
     
    Igor68 нравится это.
  5. FoxyLab

    FoxyLab Гик

    Я запустил на моей Ардуинке компилятор языка Ada!!!
    Компиляция программы решения задачи о "Ханойской башне" TOWERS.ADA:
    [​IMG]
    Запуск скомпилированной программы TOWERS.COM:
    [​IMG]
     
    Последнее редактирование: 19 апр 2017
    Igor68 и ostrov нравится это.
  6. FoxyLab

    FoxyLab Гик

    Изменил подход к эмуляции НГМД - выделил на карточке область для хранения содержимого 100 дискет и командой монитора Z "вставляю" дискету в один из дисководов A, B, C или D
    (например, команда ZB02 монтирует дискету с номером 02 в дисковод B)
    [​IMG]
    Номера "вставленных" дискет запоминаются в EEPROM Arduino и восстанавливаются при повторном запуске эмулятора.
     
    Igor68 нравится это.
  7. ostrov

    ostrov Гуру

    Нет, ну реально жалко ресурсов же! Это все равно что экскаватором рыхлить землю в горшочке.
     
  8. FoxyLab

    FoxyLab Гик

    Используемые ресурсы - Ардуино Нано (около 3 долларов), шлейф от 5-дюймового флоппи-дисковода (найден в закромах), несколько резисторов (цена ничтожна), карточка (лежала без дела).
    Результат - мое удовольствие от процесса и результата. :)
     
    Igor68 нравится это.
  9. Igor68

    Igor68 Гуру

    В оправдание автору:
    Ведь кто-то делал же эмулятор ZX-Spectrum на PC. А там нестандартная де факто платформа! Но ведь делали! А тут CP/M-80 дисковая ОС, на которой работало целое семейство 8-ми битных машин. И тысячи строк кода тому пример. Не думаю, что Автор собирается реанимировать всё это в масштабе. Но ведь это тоже творчество! Респект!!!
     
    FoxyLab нравится это.
  10. FoxyLab

    FoxyLab Гик

    Спасибо!
    Ближняя задача проекта была эмуляция 8080 и запуск CP/M. Она выполнена. Прикладные программы я модифицировать не собираюсь, а использую как есть. Многие из них запускаются уже сейчас (тот же компилятор Ады), но некоторые нет. Вот потихоньку и собираюсь повышать совместимость эмулятора с существующим ПО и добавлять новые возможности (например, добавил эмуляцию SENSE SWITCH "Альтаира").
     
    Igor68 нравится это.
  11. Faberge

    Faberge Administrator Администратор

    А реально перенести проект на другие микроконтроллеры семейства ATmega, например 1284?
     
  12. yul-i-an

    yul-i-an Гик

    Респектую автору, так держать!
     
    FoxyLab нравится это.
  13. FoxyLab

    FoxyLab Гик

    Сейчас работаю над переключением банков памяти (эмуляция MMU) - будет возможность доступа к 512 КБайтам памяти.
     
    Igor68 нравится это.
  14. FoxyLab

    FoxyLab Гик

    1284 - это просто роскошь по сравнению с ATmega328 (128 Кбайт vs 32 Кбайт FLASH (можно много полезного добавить) + 16 Кбайт vs 2 КБайт SRAM (кэш шикарный получится + можно добавить опять же много полезного).
     
    Igor68 нравится это.
  15. Igor68

    Igor68 Гуру

    Не все будут запускаться... но это и понятно, если они не используют вызов CALL 5(ASM) - как раз вызов DIOS CP/M-80. Рад программ "заточены" под аппаратные рессурсы (как у меня в ОРИОН-128 манипулятор типа "мышь" через порт ввода-вывода на КР580ВВ55) никак не указанные в рессурсах системы.
     
    FoxyLab нравится это.
  16. Faberge

    Faberge Administrator Администратор

    Кстати, через ВВ55 можно попробовать и внешнее ОЗУ какое-нибудь к портам подключить, Кбайт на 128 например, типа UT621024PC.
     
    FoxyLab нравится это.
  17. Igor68

    Igor68 Гуру

    Много, чего можно... но что бы это было стандартом надо это прописывать в системный вызов CP/M-80... и далее ипользовать код через этот вызов. Если мне память не изменяет ето был адрес 5. По другому программа на других машинах... с другим распределением памяти (адресации к устройствам) запускаться или работать как надо не будет. В том то и стоял вопрос невозможности запуска... кстати многие машины имели в область ОЗУ в которой располагалась отображаемая на экране информация (экранная область), которая читалась для отобрадения устройством (если мне память не изменяет КР580ВГ75) - контроллером экрана. Раньше всё семейство было заточено для построения готовой машины... я имею ввиду 580 серию, как Советский аналог буржуйскому. А адресация в разных машинах не всегда совпадала. И для работы применялся системный вызов. Вообщето в современных машинах та же идея. Биос решал аппаратную разницу... и в каждой системе он свой. Конечно CALL сейчас уже нельзя как ранее, потому как процессоры на аппаратном уровне ограничивают такое через разрешение к доступу - защищённый режим. Для реализации и бал придуман механизм программных прерываний (INT - x86; SWI - ARM; SVC - Cortex и т.д.) Продолжать можно долго... но зачем? Для каждой машины была своя реализация CP/M-80... при этом программы применяя только системные вызовы выполнялись абсолютно на любой из них с среде CP/M-80. Это был стандарт де факто для восьмибитных машин!
     
    Faberge и FoxyLab нравится это.
  18. FoxyLab

    FoxyLab Гик

    CP/M весьма продуманная система. Ядро системы (CCP и BDOS) для одного типа процессора были неизменными, для каждой конкретной машины был необходим только свой BIOS.
    Если бы люди из IBM были немного терпеливее (читал давно, что они ждали, пока Гарри летал над ними на реактивном самолете), то IBM PC продавался бы не с MS/PC DOS, а с CP/M-подобной системой.
    P.S. IMHO Системные вызовы через CALL логичнее, чем через INT.
    P.P.S. Что касается экрана, то одним из стандартов видеовывода на Западе был Dazzler. Его эмуляция тоже в моих планах, но через отдельный МК, разумеется.
    P.P.P.S. Через что только ввод-вывод в те времена не делали. Я когда делал из своего "Спектрума" говорящий АОН ввод делал через порт кемпстон-джойстика, а вывод - через порты AY-8910.
     
    Faberge и Igor68 нравится это.
  19. Igor68

    Igor68 Гуру

    Я про вызов не CALL сказал совсем по другой причине. Из опыта эксплуатации ARM и Cortex(хоть он тоже от ARM) процессор запускается (после сброса) в режиме "superuser" и у него свой набор регистров "счетчик команд", "указатель стека" и т.п. Но при выходе из системного режима... а это есть (после инициализации) переход в режим "user", где другой набор этих упомянутых служебных регистров. Кстати в Z80 сделали не одну "страницу" регистров, а две. Тут то же самое. Вот только CALL по адресу, запрещённому для данного пользователя (заданы границы) вызовет прерывание с переходом в режим "superuser" по вектору соответствующего исключения. Понятно это будет отработано системой. Вы прекрасно знаете зачем это... ну к примеру что бы не переписать адрес вызова своей мелкой программы (вирус) в вектор BIOS... да и писать в эту область, как и читать запрещено. Потому и механизм такой. А выход из программного прерывания (ну допустим INT) как обычно сопровождается восстановлением состояний регистров... и режима "user". Всё банально просто. А CP/M-80 была большим шагом к этому - тем более, что для каждого из 0...15 пользователя было своё "пространство" (фактически флаг принадлежности) в файловой системе.
     
    Faberge и FoxyLab нравится это.
  20. FoxyLab

    FoxyLab Гик

    Сделал эмуляцию устройства управления памятью (MMU) с переключением банков, что позволило иметь доступ к 512 КБайтам памяти.
    Я разделил адресное пространство 0x0000...0xFFFF на 16 блоков (с номерами от 0x0 до 0xF) размером по 4 КБайта. Каждый блок может быть отображен в один из 8 банков (размер банка - 64 КБайта). Соответствие банков блокам определяется значениями (номерами банков от 0 до 7) в наборе из 16 регистров (при запуске эмулятора активен только банк 0).
    Для задания номера банка для определенного блока используются две команды вывода в порт:
    OUT D0, номер_блока
    OUT D1, номер_банка
    Также для переключения блока памяти X на банк памяти Y можно использовать команду монитора YXY.
     
    Последнее редактирование: 30 апр 2017
    Igor68 и Faberge нравится это.