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

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

  1. FoxyLab

    FoxyLab Гик

    Структурная схема "нанокомпьютера" для некоторой наглядности:
    [​IMG]

    P.S. Добавил переключение с помощью перемычки источника входного потока данных - между клавиатурой и последовательным портом (для загрузки с компьютера по протоколу XMODEM).
     
    Igor68 нравится это.
  2. FoxyLab

    FoxyLab Гик

    Занявшись моделированием из картона, построил домик для "нанокомпьютера":
    [​IMG]
     
    Igor68 нравится это.
  3. FoxyLab

    FoxyLab Гик

    Добавил возможность включения "турбо"-режима "на лету" с помощью перемычки - отключается прорисовка пикселей в ТВ-кадре, аналог FAST MODE в ZX81. Время выполнения бейсик-теста уменьшается в этом режиме со 120 до 70 секунд.
     
    Igor68 нравится это.
  4. FoxyLab

    FoxyLab Гик

    Мой "нанокомпьютер" успешно запустил FORTH-83:
    [​IMG]
    Как водится, "Привет, мир!":
    [​IMG]
     
    Igor68 нравится это.
  5. Igor68

    Igor68 Гуру

    Сам в 90-х "щупал" этот FORT (масштабируемая машина форт-система)... про Си тогда ещё не знал (1990...1993). Ассемблер был единственным для меня, а с бейсика соскочил уже полностью в 1992-м. Искал язык подходящий. Паскаль по книге красив, но не понравился. Потом Си увидел и раздобыл.... там в знакогенераторе моей машины не было скобок "{" и "}", а были заменены "[[" и "]]" соответственно в компиляторе. Понравился этот самый Си. Просто Си без классов.
    Вот и думаю, а что Вы про FORT вспомнили? А Си под CP/M-80 у Вас был или видели? Был бы рад если поделитесь компилятором для этих машин. У меня он был на магнитной ленте для ПАРТНЁР 01.01. На CP/M-80 я не смог перетащить, потому и применял АССЕМБЛЕР. Перетаскивать код уже умел через дизассемблер и ассембер (спасибо моему другу - да земля ему пухом), но только между подобными машинами у которых монитор(в ПЗУ) был совместим, а экранная область и периферия имели разную адресацию.
     
    FoxyLab нравится это.
  6. ostrov

    ostrov Гуру

    Партнер 0101 мой первый домашний комп! Аж прослезился почти. Я ему игры на ассемблере писал! Форт очень интересный, необычный, но не вкатил мне, да и трудно по нему документацию раздобыть было. А польская система, помнится, еще на МК-85 применялась, что по тем временам было вообще вывертом мозга.
     
    FoxyLab нравится это.
  7. Igor68

    Igor68 Гуру

    ПАРТНЁР 01.01. и у меня был первый комп. А вот про MK-85 это первая советская карманная машинка на бейсике размером с калькулятор? Или что?
     
    FoxyLab нравится это.
  8. ostrov

    ostrov Гуру

    Пардон, МК-61 имел ввиду, это программируемый калькулятор без языка на польской системе команд. МК-85 на порядок круче, он с текстово-графическим экраном, до сих пор где-то валяется у меня на полке. )
     
    FoxyLab нравится это.
  9. Igor68

    Igor68 Гуру

    МК-85 сам хотел... в 1985-м читал про него в "Наука и жизнь", но найти его не смог. В 1990-м мне попался на рынке (барахолке), но это уже было не актуально. И вскоре увидел некую Атари в фильме Терминатор 2... читал про неё (на 8086 процессоре) но так же не видел. Позже гораздо купил Copaq 3600 уже с Windows 2002. Был рад. Сейчас даже живой, но не актуален. Будь на нём Linux и сейчас был бы рад. А вообще от Motorola A1200 с Linux на бору и сейчас балдею. Жаль проект умер. Было бы в нём ОЗУ потолще и вместо никому не нужного радио был модуль WIFI и сейчас бы балдел. Даже компилятор прямо на нем работал. Но вот из-за этого не актуален. Про мобильники скажу - пародия на линукс этот самый андроид полная дрянь. Система (ОС) чья угодно, но только не моя и не мне принадлежит. И хозяин не я даже если и рут. А рут там вовсе не рут. А экраны - рахмер крокодила. Если надо большой экран - беру планшет, а если телефон - то должен быть в кармане а не сумке. Моторола ранее упомянутая идеальна по размерам.
     
    FoxyLab нравится это.
  10. FoxyLab

    FoxyLab Гик

    Я с ним еще на Спектруме баловался.

    Вот здесь их много - http://www.z80.eu/c-compiler.html
    Если какой-то успешно запустится, отпишусь.
     
    Igor68 нравится это.
  11. Igor68

    Igor68 Гуру

    Только Z80 не выбирайте... у него система команд расширена (добавлены дополнительные таблицы и код команды превысил размер одного байта) и изменено расположение битов в регистре статуса (это не имеет значения для команд условного ветвления) и операции напрямую анализирующие состояния битов будут работать некорректно в плане совместимости Z80 и I8080. И если не считать вызова программных прерываний в остальном оба процессора условно идентичны... я имею ввиду ещё и слово состояния процессора, которое выставляется на шину данных в конце машинного цикла и сопровождается соответствующим сигналом (вывод процессора).
     
    FoxyLab нравится это.
  12. FoxyLab

    FoxyLab Гик

    Это конечно. Мне много ПО приходится отбрасывать из-за Z80. Хотя некоторые программы и используют только LDIR :) , который вполне можно эмулировать. Но гарантии нет, а на всю дополнительную систему команд флэша 328-й не хватит (хотя в свое время я много возился с ассемблером Z80 - от расшифровки уровней игр :)))))))))))))) (их создатели основательно знали толк в извращениях, применяя многоэтапное шифрование) до превращения "Байта" в говорящий АОН и чтения/записи DOS-вских дискет.
    P.S. Если память не изменяет, там в некоторых операциях и с поведением флагов есть различия.
    P.P.S. Добавление read-ahead/write-through кэша инструкций (однолинейный, 16 байт) между ядром эмуляции и I2C-памятью ускорило работу CP/M, например, время полной отработки DIR на дискете с системными файлами и тестами уменьшилось в полтора раза.
     
    Последнее редактирование: 15 окт 2019
    Igor68 нравится это.
  13. FoxyLab

    FoxyLab Гик

    Некоторые тесты быстродействия (в FAST-режиме):

    Длительность прогона 32768 команд:
    (при выборке из памяти было включено кэширование)

    NOP
    без выборки из памяти - 0,6 сек
    с выборкой из памяти - 2,1 сек

    MOV A,A
    без выборки из памяти - 0,7 сек
    с выборкой из памяти - 2,2 сек

    DAA
    без выборки из памяти - 0,8 сек
    с выборкой из памяти - 2,3 сек

    Без кэша заметно медленнее - например, прогон NOP требует больше 6 секунд.
     
  14. FoxyLab

    FoxyLab Гик

    Актуальное видео работы "нанокомпьютера":

     
    Igor68 нравится это.
  15. FoxyLab

    FoxyLab Гик

    Набор символов шрифта:
    на экране LCD-телевизора:
    [​IMG]
    на экране ЭЛТ-телевизора:
    [​IMG]
     
  16. FoxyLab

    FoxyLab Гик

    Компилятор и линкер пакета BDS C успешно работают на "нанокомпьютере":
    [​IMG]

    Игра в реверси против «нанокомпьютера», успешно скомпилировавшего для этого программу на C:
    [​IMG]
    [​IMG]
     
    Igor68 нравится это.
  17. Igor68

    Igor68 Гуру

    Вот что-то совсем забыл, по какому адресу ОЗУ по стандарту располагаются программы для CP/M-80. По моему 0x100.
    Помню на ассемблере в начале было
    Код (Text):
           ORG    100H;
    start:   jmp  xxxxH;
                ......
     
    Вроде так.
     
  18. DetSimen

    DetSimen Guest

    Именно так, все .com программы (неперемещаемые и без exe заголовка) стартовали с адреса 0x100 именно для совместимости с CPM
     
    Igor68 нравится это.
  19. DetSimen

    DetSimen Guest

    тама еще и INT5 перехватывался (CPM сервис), который вёл в глубины DOS.
    Upd. Перепутал я, там CALL 0x0005 перехватывался в INT20.
     
    Последнее редактирование модератором: 23 окт 2019
  20. Igor68

    Igor68 Гуру

    А вершина стека вроде как 0xFF? И так же для совместимости между 8-ми разрядными машинами... потому как конечный адрес хоть и 0xFFFF для I8080, но у всех была своя организация и размер ОЗУ. По нынешним меркам не глубокий стек если учесть, что точка системных вызовов была 0x05 ну и
    Код (Text):
    .....
    call   5;
    .....
     
    А перед этим заполнить регистры параметров A,B,C,D,E... а возвращаемое значение (если таковое есть) в A. Да! Помница выставлял головку дисковода 5 дюймов по позициям. (ну делал программу теста дискет и дисководов). А вот ни номеров вызова (их по моему надо было указать в регистре A, а номер подфункции в B) и не помню. Я их для себя разделял по типам(в рег.А) и собственно функции(в рег. B). Типа для работы с димком один номер(тип), для работы с консолью другой. Ну и функции по номерам. Вообще идея мало чем отличается от DOS. Хотя что далеко ходить CP/M-80 то же только дисковая система как и DOS. Кстати в BIOS ПК аналогично... недавно старую книжку курил. А вот куда делось описание CP/M-80 хоть убей не помню. А ведь мне присылали по почте.