Если по фронту и срезу IORQ добавляется одинаковое количество WAITов, то результатом будет фиксированная длительность команды. Если разное - то длительность будет меняться, но в определенных пределах.
Improver (22.09.2022)
Текущее состояние дел по загрузчику:
По Ввод+Блк при нажатом УС не производится очистка ОЗУ.
При нажатии СС - вход в режим выбора устройства загрузки кнопками вверх-вниз, выбор - ВК.
Реализована загрузка: с магнитофона; дисковода; квазидисков 238кб и 800кб; винчестера с FAT16.
После загрузки по комбинации УС+1...8 можно просмотреть содержимое основного ОЗУ блоками по 8кб (простое отображение соответствующего блока как экранной плоскости)
По Ввод+Блк при удержании УС+СС+РУС запуск теста всей памяти. Алгоритм - сначала во всю память заносится тестовая маска, после чего производится многократное чтение, потом записывается другая маска и снова читается. Отображение текста и микросхем выполнено атрибутами и в целом тест будет работать даже без микросхем ОЗУ.
При выполнении программы в ОЗУ, при нажатии Fn+Блк запускается окно отладчика, где отображается содержимое всех регистров процессора, текущий исполняемый код и несколько последующих команд (ассемблерной мнемоникой), содержимое памяти по адресам из регистров DE, DE', HL, HL', SP, IX, IY в виде чисел и графически, последние значения, записанные в порты.
Выход обратно - по УС. При входе в отладчик фиксируются режимы работы с памятью и графикой, сохраняется массив атрибутов. При выходе всё восстанавливается как было, в том числе содержимое портов. К сожалению восстановить палитру, программируемую через порт 0C невозможно. Тут или надеяться, что отлаживаемая программа сама это исправит, или записывать левую палитру, чтобы что-то видно было.
Ассемблерный код реализован также для недокументированных команд.
Позже добавлю возможность более интерактивного просмотра и модификации содержимого регистров.
Ещё непонятно что делать с режимом прерываний IM2.
Последний раз редактировалось Napoleon1; 28.10.2022 в 02:11.
Загрузчик в целом готов, далее только отлов багов и небольшие модификации.
Принялся за операционку. Основная идея - обеспечить максимальную совместимость с CP/M 4.1 и Микродос (насколько это возможно), соответственно добавится поддержка FAT16 и подкаталогов, поддержка винчестера без нарезки на размер ГМД, квазидиска на 800кб.
Пользовательским программам будет предоставляться адресное пространство с 0100 по F7FF. Сама ОС будет размещаться в СОЗУ и (возможно) частично в ПЗУ.
Конечно же программы, взаимодействующие с аппаратурой напрямую корректно работать не будут.
На данный момент есть общая канва с блоками переходов BIOS и BDOS, программы инициализации, обработчик прерываний, мигающий курсор и ввод с консоли/вывод на экран с обработкой ESC-последовательностей.
Экранная плоскость - верхняя, разрешение 512х512 (64 символа х 32 строки). Символы выводятся в цвете (за счёт атрибутов). При выводе символов их коды и цвет сохраняются в "текстовом экране", за счёт чего возможно восстановление содержимого экрана.
Лучше сделать и жалеть, чем не сделать и жалеть.
Некоторые из моих поделок тут: https://github.com/serge-404
Это одна из последних версий CP/M (и для x86 машин). В целом работа с подкаталогами выполнена через те же функции что и с обычными файлами (№15, 16,...), только с 1 в старшем бите номера диска в FCB.
http://www.seasip.info/Cpm/bdos.html
Ну и подкаталоги я хочу только для дисков с FAT16 сделать.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)