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

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

  1. Faberge

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

    А можно поподробнее узнать как именно вы реализовали программную эмуляцию процессора 8080? Я вот смотрю файл "i8080_exec.h", там я так как понимаю, собраны ассемблерные команды в виде функций. А где расположен код функций, которые считывают и обрабатывают входной машинный код? Очень помогла бы схема, какой файл где используется и для чего нужен. Или хотя бы на словах. Проект интересный.
     
    Igor68 и FoxyLab нравится это.
  2. FoxyLab

    FoxyLab Гик

    Функция call в cpm4nano.ino - это основной диспетчер эмуляции.
    Спасибо за совет, сделаю описание файлов.
     
    Igor68 и Faberge нравится это.
  3. Faberge

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

    А, вот его я не открывал, думал, там собрано все, что уже относится к уровню ОС, выше аппаратной эмуляции. Спасибо, описание и схема были бы полезны всем интересующимся.
     
  4. FoxyLab

    FoxyLab Гик

    Тестирование 8 банков (512 КБайт памяти):
    [​IMG]
     
    Igor68 нравится это.
  5. FoxyLab

    FoxyLab Гик

    cpm4nano Mk II
    (использовал адаптер для подключения microSD-карточки)
    [​IMG]
     
    Igor68 нравится это.
  6. FoxyLab

    FoxyLab Гик

    Новый рекорд - я прогнал без сбоев 7400 проходов теста памяти (ардуинка непрерывно молотила больше двух суток):
    [​IMG]
    Так что опасения в быстром выходе из строя карточки немного преувеличены.
     
    Igor68 и Andrey12 нравится это.
  7. Igor68

    Igor68 Гуру

    В моём случае на motorola A1200(Linux)... раздел подкачки (swap) делал сам по рекомендациям... хватило на полгода. Про преувеличение выхода из строя не скажу... это понятие относительное. В моём случае было не очень приятно.
     
    FoxyLab нравится это.
  8. Green

    Green Гик

    Когда то была мысль использовать Нано в качестве ввода-вывода, навесив Z80 и статическое ОЗУ. Т.е., 2 внешних чипа всего. В этом случае всё нормальное СР/М-овское ПО должно работать.
     
    FoxyLab нравится это.
  9. FoxyLab

    FoxyLab Гик

    Нано вешается на шины адреса (на младшие восемь битов) и данных и на выводы WR, RD, IORQ? Интересно! Вот, кстати, статья на эту тему - http://benryves.com/journal/3298164 - подключение платы ввода-вывода к Z80.
    P.S. А так, конечно, да - Z80 forever!
     
    Igor68 нравится это.
  10. Green

    Green Гик

    Почти.
    Причём здесь эта статья? Рассыпухи нет. ПЗУ тоже.
     
  11. FoxyLab

    FoxyLab Гик

    Такой же принцип - обработка сигналов с шин.
     
  12. Green

    Green Гик

    По такому принципу сюда шо хош приплести можно.
     
  13. FoxyLab

    FoxyLab Гик

    Проект разморожен :)
    Успешные испытания подключения PS/2-клавиатуры через STM8-переходник сделали мой "нанокомпьютер" автономным.
    [​IMG]
    Итак, cpm4nano Mk V:
    Arduino Nano 3.0 - эмулирует систему команд i8080, обеспечивает работу с памятью и дисками, выполняет вывод видеоизображения и обмен по последовательному каналу
    RAM - 2 x 32 Кбайтных FRAM I2C-чипа FM24C256-G
    FDD - SD-карточка
    ввод - PS/2-клавиатура через STM8S103F3P6-переходник
    вывод - параллельно на видеовыход (20 строк x 45 колонок, шрифт 4 x 8) и последовательный порт (USB-UART преобразователь)
    [​IMG]
    P.S. Испытал подключение к кинескопному ТВ (четкость изображения хуже, чем на LCD, но синхронизация не нарушается и шрифт читаем).
     
    NikitOS, Igor68 и KindMan нравится это.
  14. Igor68

    Igor68 Гуру

    !!!!!:):):):):):):)
    Сделай ОЗУ так же 64 кб.
    Хотелось бы видеть консоль.
    И вопрос? А эмуляция процессора полная? В плане битов статуса, набора регистров. И как ОС сделана... заточена под свою периферию или так же эмуляция некой стандартной машины. Интересно было бы увидеть запуск программ стандартных для CP/M - 80. Помню на Орион-128 ставил эту ОС (на дискете 5 дюймов) в аккурат о реализации этой ОС на ZX-Spectrum(был такой проект наряду с TR DOS и т.п.). Программы были совместимы но при образе ОС для каждой машины своей. Конечно совместимость на уровне вызова системных функций (адрес 5 от начала адресного пространства). А программы которые использовали железо напрямую разумеется были не совместимы.
    :):):):):):)
    Рад Вашим успехам!!!!
     
    FoxyLab нравится это.
  15. Igor68

    Igor68 Гуру

    Простите, за мои 5 копеек если можно. А вот было бы здорово если были бы шины адреса и данных... или их эмуляция. Для связи с контроллером диска, клавиатуры, дисплея и т.п. Простите!
    Конечно понимаю, что может и глупость и т.п. Но допустим шины адреса, данных чтение/запись можно заменить SPI обменом. В роли контроллера терминала должна выступать другая ардуина, ведомая со знакогенератором. Ну и устройства ввода-вывода будет третья.
    Простите! Это я так просто.
     
    FoxyLab нравится это.
  16. FoxyLab

    FoxyLab Гик

    Спасибо! [​IMG]

    Так оно и есть 64 Кбайта (32 + 32)

    Вывод идет параллельно:
    на ТВ
    [​IMG]
    в консоль
    [​IMG]

    Полная, проходит все, самые замороченные тесты
    Вот некоторые:
    [​IMG]

    [​IMG]

    [​IMG]

    Оригинальный бинарник (да простит меня DR и все последующие правобладатели) CP/M (CCP + BDOS) под 8080 из 70-х, обращения к BIOS перехватываются.

    Эт можно :)
    TINY BASIC
    [​IMG]

    CBASIC
    [​IMG]

    ADA
    [​IMG]

    STARTREK
    [​IMG]

    У меня был 48-й ("Байт") с дисководом, но там ПЗУ, сидевшее внизу, крепко мешало. Поэтому моим пределом была IS-DOS. Веселое было время [​IMG]


    Клавиатура поддерживается через переходник на STM8.
    Дисплей поддерживает сама Ардуина, "по четным" на дисплей выводит, "по нечетным" команды 8080 выполняет, ну прямо как в начальном творении сэра Клайва.
    На три ардуины пойтить не могу :) чэлендж именно в выжимании всего, что можно, из одной (ну и с примкнувшим к ней Шел.. STM8 )
     
    Последнее редактирование: 4 окт 2019
    ZAZ-965 и Igor68 нравится это.
  17. Igor68

    Igor68 Гуру

    Респект!!!!:):):):):):):):):):):):)
     
    FoxyLab нравится это.
  18. parovoZZ

    parovoZZ Гуру

    Ваще ничо не понял, но жутко интересно.
     
    Securbond и FoxyLab нравится это.
  19. Igor68

    Igor68 Гуру

    Доброго времени суток!
    Вот рассмотрел i8080_exec.h (реализация инструкций i8080).- да верно наиболее просто описать на си, объявив регистры в виде переменных. Когда-то довелось несколько строчек на ASM для i8086 реализовать аналогично, правда не эмулируя полностью всю систему команд. У меня процессор был ARM9, а выполнить надо было i8086 инструкции. Простите но как-то подумал, что оба и i8080 и AVR 8-ми битные. И ряд инструкций совпадают функционально, хоть и не по системе команд. Ранее применял опять таки на ARM выполнение инструкций ASM внутри си функций
    Код (C++):
    __asm {
    ...
    }
     
    к сожалению в каждом компиляторе эти возможности либо есть, либо нет, либо организованы по разному. В Keil делал функции в ассемблерном файле *.s
    Пока не добрался до того места, где Вы декодировали коды инструкций (по системе команд i8080) из дампа выполняемой программы.

    Но Вам РЕСПЕКТ ещё .... и ещё раз!:):):):):):):):):):):):):):):):):):)..........
    :)
     
  20. FoxyLab

    FoxyLab Гик

    Спасибо!!!
    Это очень старый код, я много поменял в последних версиях. Но самое забавное вот что - в старом коде была ошибка в эмуляции, из-за которой не проходили некоторые тесты. Я ее исправил в новой версии, но перед этим я изменил структуру эмулятора, так что непосредственно сопоставлять два исходника проблематично. И ... забыл, что именно я исправил:). И похоже на то, что по этой причине ошибка в старом коде так и останется неисправленной - заставить себя сопоставлять эмуляцию всех команд в двух исходниках я врядли смогу.
    Я планирую выложить проект на hackaday.io вместе с публикацией нового кода.
    P.S. Самое увлекательное в новом коде - это модуль видеовывода, чистый ассемблер, причем учитывающий даже не машинные циклы, а такты (ведь прерывание может быть вызвано в любом такте цикла, и вызов обработчика будет отложен до окончания цикла, а из-за этого появляется джиттер - дрожание строк). Приходится учитывать это и вносить задержку с подстраиваемой длительностью + переписать процедуры работы с портами (они в стандартном варианте слишком небрежно обходились с прерываниями). Фактически, от IDE мне нужен только компилятор.
    P.S. Там еще и программно-аппаратная магия работы с областью памяти, отведенной под шрифт :cool:
     
    Последнее редактирование: 5 окт 2019
    Igor68 нравится это.