Отличная идея. Для безпроблемности с RK-DOS при Z80, да и для личного комфорта пользователя при пользовании ДОС, надо предусмотреть возможность иметь в системе (для нужд RK-DOS и не только) ПЗУ большее, чем 4 кб. Т.к никто не хочет понять, что в РК86 полезно расширение ПЗУ, попробую понятно объяснить почему это необходимо.Сообщение от Vldimir_S
Так как 4 кб, это слишком мало для ДОС, на чём Е.Седов и "погорел". Он вынужден был извращаться по страшной силе, чтобы уместить в 4 кб хотя бы ядро системы и минимальное CCP с командами загрузки и запуска. А все остальные, очень необходимые при работе пользователя команды, ему пришлось делать внешними SYS-файлами, что неудобно и заставляет загромождать все диски SYS-файлами (тогда как юзеров, чтобы их там спрятать тоже нет). Из-за этих же ужасных ограничений объёма ПЗУ даже обработку BAT-файлов пришлось вынести в отдельный внешний файл COMMAND.COM. Хотя, очевидно изначально COMMAND.COM должен был играть роль обычного CCP оформленного в виде внешнего файла, как и сделано в развитых ДОС (CP/M, MSX, MSDOS). Поэтому из-за предельной "уплющенности" кода и немыслимо расширять или даже как-то минимально изменять RK-DOS V2.95, в частности для Z80.
А при Z80 приходится избавляться от извращений, возможных только при КР580 (а также эмуляции READY из сигнала INDEX, т.к дисководы 3.5" и HD-5.25" не имеют сигнала READY), отчего объём кода разбухает на килобайт и уже не влезает в 4 кб. А из функционала из кода RK-DOS можно выкинуть только вывод на принтер (~15 байтов) и команду TYPE (~20 байтов). Даже, если изуродовать ДОС и выкинуть обработку BAT-файлов и стартового AUTOEXEC это позволяет выиграть всего лишь ~50 байтов.
Поэтому при Z80 бессмысленно связываться с RK-DOS не предусмотрев расширение ПЗУ, хотя-бы на 2 кб. Это можно сделать кучей способов.
Во-первых можно, оставив ПЗУ 4 кб на плате РК-КНГМД, где-то, как-то установить на основной плате РК86 еще 2 кб. Например, напаяв на ПЗУ РФ2 с ROM-BIOS-ом вторую РФ2, включаемую каким-либо битом порта С D14 (порт C в ППА позволяет побитовое управление, поэтому наиболее подходит для управления конфигурацией). Так что D14 вообще-то убирать нежелательно, т.к это не даст выигрыша. Если понаставить кучу регистров для управления режимами, то это потребует, во-первых, организации дополнительных чип-селектов на запись, а во-вторых, куча сильно-токовых входов регистров 155-той серии сильно перегрузит шину (что уже не потянут CPU, ОЗУ и ППА). А D14 даёт 24 управляющих железом сигнала. Например, один из её разрядов при Z80 можно отдать на звук, (т.к делать громоздкую ловушку на команды DI/EI не смешно).
Впрочем, если наплевать на пользователей с клавиатурой MS-7007, то можно звук выводить на свободных разрядах порта C клавиатуры. Хотя ещё лучше звук выводить через D-триггер, т.к это сокращает код и избавляет от необходимости добиваться правильного меандра (скважности 2), что нужен для получения синусоиды путём установки на выходе звука НЧ фильтра (цепочка RC или LC).
В таком варианте расширения ПЗУ (когда 2 страницы ПЗУ в окне F800...FFFF) во вторую страницу разумно, как и принято во всех ROM-BIOS прошить три подпрограммы - чтение/запись сектора и формат трека. А в RK-DOS в соответствующих местах оставить только CALL на ROM-BIOS. Тогда код дискетных подпрограмм можно произвольно менять, настраивая на конкретное железо (флоп, винт, micro-SD или эл.диск из излишнего ОЗУ), не изменяя сам код RK-DOS, находящийся в ПЗУ на плате РК-КНГМД. Это грамотный вариант.
Во-втором варианте расширения ПЗУ под нужды RK-DOS, можно пользуясь очень расточительным расходованием области памяти 8000...FFFF на порты (по 8К на порт), организовать "дыры" в этом адресном пространстве размером в 2...6 кб и "воткнуть" там дополнительное ПЗУ, которое можно использовать, как для расширения ROM-BIOS (для вставки туда дискетных подпрограмм), так и для размещения там части кода RK-DOS, что не влезает в 4 кб ПЗУ на плате РК-КНГМД. Такой вариант технически "некрасив", но сработает. В таком варианте сделать RK-DOS одним массивом (D800...EFFF) не получится, т.к у МИКРОШИ на D800 стоит ВИ53.
В-третьем варианте расширения ПЗУ под нужды RK-DOS вводится страничность в той же области E000...EFFF, что уже истрачена на RK-DOS. Тогда каким-либо образом в этом окне прокачиваются две (или более) страниц ПЗУ размером в 4 кб каждая. Конструктивно и аппаратно это делается так. Из платки РК-КНГМД от МИКРОШИ удаляются две ПЗУ РФ2 напаянные в 2 этажа. А на основной плате РК86, около разъёма ГРПМ-61, там где есть некое подобие слепыша из 3-х рядов дырок, монтируют панельку на 28 ног, куда втыкают ПЗУ 27256. Эта ПЗУ выбирается чип-селектом E000, а на адреса A12, A13, A14 заводятся выходы доп.ППА D14 (например разряды PA0, PA1, PA2), что и обеспечивает работу многостраничного ПЗУ в стандартном окне RK-DOS и проще всего по объёму трудозатрат. Этот вариант наиболее предпочтителен, т.к даёт больше всего возможностей по хранению резидентного ПО и одновременно не меняет базовой архитектуры. Если расширить ПЗУ до 8К на плате РК-КНГМД, то ПЗУ теряется при удалении РК-КНГМД, а ПЗУ на основной плате остаётся даже если нет РК-КНГМД.
Поясню почему надо расширять RK-DOS.
Во-первых, RK-DOS сделана для работы с одним жёстко фиксированным дискетным форматом, а именно 5 секторов на трек при 160-ти треках. Тогда как есть дисководы на 35 треков, есть на 40 треков, а на винчестере и micro-SD для увеличения диска удобно организовывать 255 треков (максимально возможный размер диска RK-DOS достигается при 8 секторах и 255 треках, всего 1020 кб). Кроме того, даже обычный отечественный НГМД типа 5311 лучше работает в формате 7 секторов на трек при 166 треках, что даёт 581 кб на диск вместо 400 кб. Так как в начале первого сектора каталога специально зарезервировано 7 байтов, то сюда можно записывать БПД диска, сохранив совместимость по дискетам (если эти 7 байт нули, как на старых дискетах, значит это базовый формат 400К).
Во всех грамотных ДОС используется автоматическая настройка на формат диска. Для этого БПД считывается в процедуре настройки на формат (что входит в функцию SEL DSK). Считав БПД, ДОС автоматически, незаметно для пользователя, перенастраивается на работу с конкретным форматом дискеты. Таким образом можно, не меняя код самой ДОС, работать с дисками любого формата. Также это необходимо, когда в системе несколько приводов разного типа, флоп и эл.диск или винт и флоп. Для работы с каждым из них ДОС должна перенастраиваться. Чтобы ввести всеядность по форматам приводов, требуются дополнительное место в ПЗУ размером в 300-500 байт.
Большое нудобство в RK-DOS это отсутствие подкаталогов или хотя-бы юзеров. С подкаталогами туго, а вот юзеры ввести несложно, но для этого надо иметь в ПЗУ лишние 500 байт.
Ещё одним недостатком RK-DOS является извращённый программный интерфейс, где не только надо извращаться со стеком, но и работать напрямую с ячейками ОЗУ. Можно, при сохранении совместимости, ввести в RK-DOS нормальный программный интерфейс, например, набор функций как в CP/M, что не только позволит легкую переделку CP/M-программ, но главное облегчит работу программиста и существенно расширит ДОС. Сейчас фактически проще работать с диском подпрограммами низкого уровня (чтение/запись сектора), чем пользоваться функциями RK-DOS. Для такой доработки надо ещё 2-3 кб, отчего общий объём достигнет 10-11 кб. Такую доработку я не планирую, но это вполне возможно сделать.
Далее, чтобы избавиться от дурацких SYS-файлов, надо все внешние команды встроить в код ДОС. Тогда не надо будет на всех дисках хранить SYS-файлы, а все функции сохранятся. Я уже встроил несколько SYS-команд в код RK-DOS (в варианте для эл.диска, что умещается в 4К). Я встраивал код для работы в ПЗУ, т.е не сам извращённый код SYS-файлов. Но для простоты достаточно и тупого встраивания в ПЗУ кода самих SYS-файлов без модификаций. Тогда по вызову команды, код SYS-файла кидается в ОЗУ и стартует, что равнозначно старту SYS-файла с дискеты. Такая доработка RK-DOS занимает 20 минут и доступна любому пионеру лишь вчера узнавшему мнемонки КР580.
Сложность переноса SYS-файлов в ПЗУ в том, что там используется извращённый метод программирования, позволяющий даже при КР580 иметь перемещаемый код (переходы через стек). Но чтобы разобраться в такой программе и получить нормальный код, работоспособный в ПЗУ, надо долго и упорно считать числа байтов команд и вычислять адреса переходов. Поэтому проще написать свой эквивалент, чем разбираться в извращённом программировании. Поэтому DEL и REN я переписал, а остальные SYS-команды включил в код ДОС в оригинальном виде. От того объём кода разбух до полных 8-ми килобайт.


Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 


