Радио-86РК: Расширение ПЗУ

Перейти вниз

Радио-86РК: Расширение ПЗУ

Сообщение  barsik в Ср Ноя 22 2017, 23:41

Т.к ПЗУ в РК86 тоже не особо много, то каждый здравомыслящий пользователь РК мечтает его расширить. В этой теме речь пойдёт о расширении ПЗУ РК86 и программах, которые разумно туда прошить.

Заниматься маленькими постепенными доработками на старой базовой плате РК имеет смысл потому, что сделав какие-то доработки вручную, можно заняться разработкой ПО для этого улучшенного железа. А постепенное накопление проверенных и снабжённых программами доработок даст дополнительный стимул для разработчиков печ.плат заняться внедрением этих доработок на плате новодела РК.

Благодаря тому, что в адресном пространстве РК86 можно выделить много "дыр" между адресами портов и тому, что каждый порт занимает всего несколько смежных адресов, то можно придумать тысячу вариантов расширения ПЗУ. К тому же ПЗУ не обязано быть в виде единой сплошной области (что желательно для ОЗУ), так что теоретически при сохранении совместимости можно расширить ПЗУ до 32 кб минус 17 байтов, расположив его в неиспользуемых "дырах" адресного пространства.

Первым самым тупым лобовым вариантом расширения ПЗУ является введение нескольких страниц ПЗУ в окне F800...FFFF. Для этого проще всего напаять на имеющуюся РФ2 панельку, куда устанавливается вторая ПЗУ РФ2. Для выбора текущей страницы ПЗУ удобно использовать бит PB0 запасного ППА D14 (PC0 обычно тратят на выбор альтернативного фонта). Расход деталей составляет один инвертор, панелька и, естественно, РФ2. Это простейший способ расширить ПЗУ до 4 кб. Например, можно иметь два ROM-BIOS (например, один м.быть совместимым с МИКРОШЕЙ). Если хочется получить много страниц ПЗУ в окне F800...FFFF, то можно заменить панельку на 24 ноги на 28-ми-ногую и применить 27256.

Второй способ расширения ПЗУ был использован в плате РК-КНГМД от Е.Седова. При этом используется тот факт, что в ПДП, т.е по адресу E000...E008 процессор только пишет, но никогда не читает. Поэтому в адресах E000...EFFF может стоять ПЗУ, что и сделано в плате РК-КНГМД. Это даёт в системе 4 кб сплошного ПЗУ (не считая ПЗУ F800).

Легко сообразить, что ПЗУ может занимать всё окно E000...FFFF, которое в базовой схеме занимает ПДП. А это даёт уже 8 кб сплошного ПЗУ, хотя и конфликтует с адресом F000, что использует РК-КНГМД. Если РК-КНГМД не нужен или, если использовать для РК-КНГМД другой адрес, то полученные 8 кб ПЗУ очень удобны для резидентного ПО. Можно также организовать 4 страницы ПЗУ по 8 кб, используя 27256, переключая страницы битами PB0, PB1 запасного ППА D14. Панельку для 27256 в оригинальной плате РК86 удобно ставить в уже имеющиеся отверстия около ПЗУ с фонтом. Будем считать это третьим вариантом расширения ПЗУ, дающим 8 кб сплошного ПЗУ.

Но самый грамотный вариант расширения ПЗУ до 15 кб сплошного ПЗУ получается, если для адресации ВГ75, стоящего по адресам C000...DFFF, оставить только 1 кб в области C000...C3FF. Совместимости это не нарушит, т.к процессор пишет только в адреса C000...C0C0, C1C1, C2C2 и C3C3, т.е всё в пределах оставленной для адресации области. Тогда ПЗУ может занимать сплошную область размером в 15 кб, а именно C400...FFFF. При этом напрашивается применение ПЗУ 27128, или же 27256 с двухстраничной организацией (управление, например, битом PB0 D14).

Но в данной теме речь только про ПЗУ. Потому прилагаю схему расширения ПЗУ до 15 кб. Возможно, используя 556 РТ4 можно чуть сократить схемотехнику, но вряд-ли за счёт этого удастся выиграть хоть один TTL-корпус (зато добавит проблему прошивки РТ4).

Интересно, что благодаря тому, что в этой схеме ИД7 выбирается в области C000...DFFF и из её выходов использована только выборка C000...C3FF и т.к РК не пишет в область C400...DFFF, то остальные формируемые этим ИД7 чип-селекты с шагом в 1 кб можно задействовать под устройства вывода (например, ВИ53 только для звуков, без чтения).

- - - Добавлено - - -

Конечно можно занять под ПЗУ и второе окно 8400...BFFF, но это не даст никаких преимуществ. Окно 8400 (где в отличие от области E000, допустимо ОЗУ) пригодится при доработке РК86 до полной графики (на базе идей от freddy), а также для CP/M и т.п.

И если уж требуется поставить много ПЗУ, то окно ПЗУ лучше наоборот сократить, с целью сделать его кратным и более пригодным для страничной коммутации. Окно ПЗУ в 8 кб (E000...FFFF) в общем-то даже выгоднее и с точки зрения расширения ОЗУ.

Для расширения ПЗУ в этом случае идеально подойдёт 27256/27512 с кучей страниц в окне по 8 кб. 8 кб достаточно большой кусок, чтобы разместить здесь какую-нибудь программу, а при использовании ПЗУ лишь в качестве хранилища резидентных программ (которые для прогона всегда копируются в ОЗУ) размер окна, через которое мы имеем доступ к ПЗУ не играет роли.

А ПЗУ ограниченного размера, зато, даёт возможность удобно расширить ОЗУ до 56 кб, хотя и с использованием двухрежимной коммутации. Здесь же идёт речь лишь о случае когда в РК требуется иметь максимально большое сплошное ПЗУ, а не о какой-то иной несовместимой архитектуре.

Нескольно слов о том, что удобно прошивать в сплошное ПЗУ 15 кб. Понятно, что 2 кб из этого размера "открызает" базовый ROM-BIOS РК86. Вообще в ПЗУ в первую очередь хранят ROM-BIOS. Например, в ещё 1 кб можно разместить небольшой набор подпрограмм для поддержки оконного интерфейса РК86 имеющего альтернативный фонт (переключаемый PC0). Такой фонт даёт инверсию знакомест и нормальные рамки, что и позволяет открывать на экране инверсные окна. К сожалению неперекрывающиеся, как делают с цветными окнами (т.е с глубиной вложенности 1).

Хотя конечно, никто не мешает добавить цвет и иметь многооконность. Я об этом не пишу, т.к не имел цвета и опыта его использования нет. Потому что бросить один проводок к ПЗУ фонта намного проще, чем сделать схему Толкалина из ж.Радиолюбитель 04.1992 или схему цвета из АПОГЕЯ. Да и программирование без цвета на порядок проще.

Так вот, в 1 кб можно уместить простейшие оконные подпрограммы OPEN и CLOSE. По OPEN в подпрограмму передаются координата верхнего левого угла окна X,Y и размер окна dX,dY. Тогда эта процедура сливает старое содержимое окна в оконный буфер (вот для чего в графических системах надо дохрена ОЗУ). Затем рисует на экране белое окно с рамкой по краю окна и заголовком. К сожалению ROM-BIOS РК86 не оконный (что как раз наличие второй страницы ПЗУ в 8 кб позволяет исправить). А для оконного драйвера вывода при открытии окна и размер экрана вывода устанавливается в это "открытое" окно. Т.е, если ранее координата 0,0 была в левом верхнем углу экрана, то теперь координата 0,0 это правый верхний угол окна. Это к слову (о том как работает нормальный графический BIOS). В РК86 такого нет, да и при однооконности не особо и надо, тут отслеживание, чтобы вывод попадал в открытое окно а не мимо, возлагается на программиста.

Закончив работу с окном, вызывается п/п-мма CLOSE, которая как бы закрывает окно, просто восстанавливая старое содержимое окна из буфера. Можно открыть 2 и более окна, но чтобы они не перекрывались. Понятно, что поддержка неперекрывающихся окон в инверсии проста и имеет малый объём, отчего легко может встраиваться в сами программы. Но наличие стандартных процедур в ПЗУ даёт единообразие и экономит объём кода.
Вот иллюстрации.

Далее, в ПЗУ обычно хранят драйверы внешних устройств. Так, встроив в ПЗУ подпрограммы чтения, записи сектора и процедуру формат трека мы избавляемся от зависимости от конкретного железа. Тогда DOS (а к железу в нормальных системах лезет только DOS, прикладные программы никогда не лезут к железу на низком уровне) поддерживает все имеющиеся у разных пользователей носители, например, винчестер, дисковод, RAM-диск и различные флэш-накопители с микроконтроллерами. И соответственно все программы для этой DOS без всякого изменения кода будут работать на всех носителях независимо от их физической природы.

В ПЗУ полезно иметь мелкие сервисные программы и драйвера. В частности, программу обслуживания прошивателя УФ-ПЗУ, программу обслуживания ROM-диска (ROM-Service), драйвер принтера, драйвер и программу обмена по проводной линии с IBM PC и т.п.

А в самом простейшем случае, для РК86 без внешних носителей в такое ПЗУ 15 кб можно прошить бейсик и ассемблер, работающие уже непосредственно из старших адресов, а не с 0. Это увеличивает объём исходного текста могущего быть странслированным и максимальный размер бейсик программы (а размер бейсик программы написанной для бейсик-интерпретара с вкраплением ассемблера может быть большим, т.к операторы DATA сжирают много места).

Учтите, что бейсик нельзя просто перетранслировать, указав иной адрес трансляции. Т.к в этом бейсике "уши растут" от бейсика Билла Гейтса из 1975, который активно использует RST-команды, отчего может работать только с 0. Поэтому для перемещения кода на другой адрес Вам придётся все вызовы RST переделать на CALL, отчего объём кода немного разбухнет на 100 байт (но всё равно, думаю, влезет в 8 кб, а если нет, то можно забить какие-то малонужные операторы, например для принтера).

Какой-нибудь РК-Бейсик я собираюсь позднее попробовать перетранслировать на работу без RST, а также странслирую свой текстов редактор для РК86 и макроассемблер для прошивки в ПЗУ C400.

avatar
barsik
новичёк

Сообщения : 85
Дата регистрации : 2016-11-10
Откуда : 600 км от Москвы

Посмотреть профиль

Вернуться к началу Перейти вниз

ROM-BIOS РК86 с функциональными клавишами

Сообщение  barsik в Сб Май 05 2018, 12:18

После расширения ПЗУ в РК86 разумно сделать хоть какую-то его поддержку ROM-BIOS-ом. Т.к в противном случае, чтобы воспользоваться ПЗУ придётся с МГ-ленты грузить какую-то программку, которая предоставит Вам доступ к этому резидентному ПЗУ, что явно неудобно.

В предыдущем посте рассказано о возможных методах установки дополнительного ПЗУ в РК86. Из чего ясно, что в РК наиболее удобно ввести или ПЗУ 15 кб в адресах C400...FFFF или в окне в 8 кб по адресам E000...FFFF. Последний вариант более выгодный, т.к кратное окно позволяет организовать страницы (размером по 8 кб) и использовать ПЗУ бОльшего размера. Например, удобно применить ПЗУ 27256 с 4-мя страницами по 8 кб, что даёт 30 кб для резидентных программ.

ПЗУ стоящее в адресном пространстве имеет неоспоримые преимущество перед ROM-диском, т.е ПЗУ считываемым через интерфейс ППА D14, т.к программа может работать прямо из окна ПЗУ в адресном пространстве процессора не нуждаясь в перегрузке в ОЗУ (это экономит ОЗУ, что важно, например, для DOS или бездисководного ассемблера).

С другой стороны, при наличии неизвестного старым программам ОЗУ в области A000...BFFF, ROM-диск тоже удобен, например, для загрузки оттуда ОС. Т.к ROM-диски можно оперативно переставлять, имея несколько ROM-дисков. Базовое ПЗУ РК имеет рудиментарную поддержку ROM-диска в виде директивы R. Более удобно ROM-диск поддержан в ОРИОНЕ. Использованный там метод размещения файлов в виде сплошного связанного списка удобен для ПЗУ, и хорошо себя зарекомендовал.

Исходя из вышеизложенного я странслировал модифицированный ROM-BIOS РК86 (для клавиатуры с матрицей РК86, не MS7007). В него внесены следующие доработки:

Как всегда обеспечил совместимость. Причём в данном случае не только по стандартным и нестандартным внутренним точкам ПЗУ, а также и по 4-м внутренним точкам перехвата, которые используют эмуляторы EMU и EMU80 (что не нужно для реала, но на что впустую приходится тратить память).

Добавлена директивы K и H - подсчёт контрольной суммы блока и HEX-арифметика, подсчёт суммы и разности 16-ти ричных чисел

Удалена директива X (печать содержимого регистров). Для этого предназначен полноценный отладчик.

Удалена директива R (чтение блока ROM-диска). Это была неудобная директива, вместо этого теперь файл из ROM-диска грузится и стартует по нажатию клавиш СС+F5 (правила оформления ROM-диска см.ниже).

Директива G теперь не имеет второго параметра - стоп точки. Зато теперь введён возврат из запуска по G по RET, т.е теперь G работает по CALL, а не по JMP (как во всех компютерах в мире). И что важно, введена возможность передавать два параметра (второй и третий, они передаются в регистрах DE и BC, первый параметр в команде G это адрес запуска).

Звук выдается не только по DI/EI, но и по PC0 ППА клавиатуры (это сделано для тех у кого Z80 или HD64180).

Поддерживается расширение ОЗУ на 32 кб самым примитивным способом - цельно полубанковой коммутацией. Для чего введены две новые стандартные подпрограммы, аналогичные подпрограммам ОРИОНА, - подпрограммы для чтения/записи байта - F836/39. Работа этих п/п-мм идентична аналогичным п/п-мам ОРИОНА.

В данной версии регистр управления полу банками - бит PC1 в ППА РК-клавиатуры. При записи 1 в ППА по биту PC1 в окне 0...7FFF должна включаться вторая половина банки РУ5. Т.е это самый простой вариант дополнительного ОЗУ для тех у кого ОЗУ на РУ5. В данной версии есть доступ только к 32-м дополнительным килобайтам (а содержимое рег.A в этих подпрограммах не важно). Для интереса посмотрите, что делают эти подпрограммы. Несложно их изменить, если у Вас доп.ОЗУ 1 МБ, коммутируется в окне A000...BFFF.

По сбросу инициализируется и запасной ППА. Это важно, т.к при этом выходы его порта C программируются на вывод, что позволяет использовать этот ППА для управления режимами РК86. Тогда, используя свойство ППА, что по инициализации его выходы ставятся в 0, устанавливается стандартный режим, т.е - базовый фонт, режим монохром, банко ROM-диска 0, текущая страница ПЗУ E000...FFFF - тоже 0.

Введены, так называемые программные клавиатурные прерывания, подобно тому, как были клавиатурные прерывания на D000,D003,D006... в Специалисте (по нажатию НР+Fn) или в М3 ОРИОНА по нажатию УС+СС+симв.клавиша в ОРИОНЕ. Т.е программные переходы по нажатию на клавиатуре определённого сочетания клавиш на какой-то адрес, причём по команде CALL, а не JMP (потому правильное название клавиатурные прерывания, а не переходы). Если по этому адресу стоит процедура, сохраняющая регистры и выполняющая возврат по RET, то по RET происходит возврат в первоначальную программу в то же самое место из которого было вызвано клавиатурное прерывание.

Контроль на сочетание клавиш происходит при выполнении основных подпрограмм ПЗУ - F803, F809, F812 и F81B. Т.е клавиатурное прерывание срабатывает всегда, когда программа использует стандартные функции ввода/вывода.

Если в Специалисте клавиатурные прерывания были фиксированными (т.е по навсегда фиксированному адресу), а в ОРИОНЕ, наоборот, требовалась загрузка внешнего обработчика таких прерываний (что, как бы добавляло клавишу АЛЬТ=УС+СС и загружаемые функции), то в данном ПЗУ РК86 использованы оба способа.

В ОРИОНЕ, где тоже РК-клавиатура, используется сочетание клавиш УС+СС. В данном ПЗУ переходы вызываются по нажатию клавиш F1...F5, если заранее нажата и удерживается клавиша СС (что тоже самое, что НР или Shift). Это не сокращает объём кода (но так нажимать проще), а возможным это стало потому, что символьные клавиши не используются, только F1...F5. В эмуляторах обычно роль клавиши СС играет клавиша Shift.

Есть две версии. В одной пользователь может, как изначально настроить адреса переходов на конкретные адреса ПЗУ (например E000), так и оперативно изменить адреса обработки всех пяти клавиатурных прерываний, т.к адреса переходов расположены в ОЗУ. Это удобно, например загрузка ОС может изменить работу клавиатурных прерываний. В альтернативной версии, адреса переходов оперативно не меняются (что прошито в ПЗУ в табличке на FFF6, туда и переход по CALL).

7614 - адрес куда происходит CALL по Shift+F1 (по умолчанию адрес из FFF6)
7616 - адрес куда происходит CALL по Shift+F2 (по умолчанию адрес из FFF8)
7618 - адрес куда происходит CALL по Shift+F3 (по умолчанию адрес из FFFA)
761A - адрес куда происходит CALL по Shift+F4 (по умолчанию адрес из FFFC)
761C - адрес куда происходит CALL по Shift+F5 (по умолчанию адрес из FFFE)

Достаточно заменить два байта и по сочетанию клавиш переходить на нужные адреса. Например, загрузив какую-либо программу, например текстов редактор, и соответственно изменив вышеприведённые ячейки, по указанному сочетанию клавиш будет вызываться какая-то функция, например, включение/выключение эхо печати на принтер. По сбросу данные ячейки инициализируются из ПЗУ, что даёт возможность иметь как предопределённые переходы, так и оперативно менять их.

Клавиатурные прерывания также дают возможность ввода так называемых ключевых команд, по типу того как это было на Роботроне-1715. Там можно было задать в соответствие функциональной клавише определённой строки. Например, можно задать по нажатию <F2> выдачу на консоль команды DIR B:<ВК>. Т.е клавитурные прерывания позволяют программировать команды в DOS.

Как выше указано, по сбросу адреса переходов устанавливаются в соответствии с прошитой в ПЗУ табличкой, которую перед прошивкой может изменить каждый пользователь самостоятельно. Эта табличка имеет размер 2*5= 10 байт и расположена в самом конце ПЗУ по адресу FFF6.

В данной прошивке ПЗУ в табличке такие адреса:

Shift+F1 - E000
Shift+F2 - Pause
Shift+F3 - F86C (Warm Boot монитора)
Shift+F4 - F86C (Warm Boot монитора)
Shift+F5 - старт самого первого файла из ROM-диска

Т.е по нажатию Shift+F1 стартует RK-DOS (или что-то ещё, что находится по E000). По нажатию Shift+F2 происходит зацикливание до нажатия клавиши <ВК>, что удобно для останова для просмотра текста при его ролике, например по TYPE в DOS. Сочетание Shift+F3 я чуть позднее сделаю CLS, а Shift+F4 это очень полезное свойство - выход в монитор на WARM START из любой программы (экран не очищается).

Сочетание Shift+F5 предназначена для загрузки ОС с ROM-диска (удобно ОС из ROM-диска грузить в доп.ОЗУ, например, на A000). При этом в отличие от ORDOS ОРИОНА грузится не фиксированный объём кода в фиксированные места. Размер ОС задаётся в самом файле расположенном в ПЗУ по адресу 0, а адрес загрузки можно задать в коде ПЗУ (сейчас там 7000/A000).

Т.е адрес загрузки определяется не меткой ORDOS-файла в ROM-диске, а прошивкой данного ROM-BIOS, т.к адрес загрузки одновременно является признаком наличия ROM-диска (по типу того, как ORDOS определяла наличие ROM диска байтом C3 по адресу с оффсетом 7FD). Стартовый файл ROM-диска должен располагаться в ROM-диске с адреса 0 и быть в обычном формате ORDOS, т.е это код файла снабжённый ORDOS-заголовком в 16 байт. Никакого специального кода ОС в 800 байтов, как в ORDOS ОРИОНА нет. Это удобнее, т.к не ограничивает адрес и размер ОС. Адрес загрузки (оффсет 8 ) должен совпадать с адресом прошитым в ROM-BIOS, а длина в ячейке с оффсетом 10 может быть любой. По нажатию Shift+F5 данный файл грузится и стартует. Формат всех остальных файлов в ROM-диске может быть любым и определяется уже самой загруженной ОС, хотя и нет особых поводов менять хорошо себя зарекомендовавший формат файлов квази-дисков ОРИОНА.

Позднее выложу микро-ОС (аналог ORDOS, но в 4 раза короче), позволяющую запускать файлы из ROM-диска и RAM-диска в 32 кб из верхнего ОЗУ РУ5-тых, а также Changer позволяющий загружать RAM-диск с МГ-ленты или проводной линии. При установке одной 62256 в окно A000...BFFF, общий размер RAM-диска достигает 64 кб (при этом, естественно, и п/п-ммы F836/39 немного меняются). Эта микро-ОС не аналог ORDOS, т.к содержит всего 4 функции - считать/записать/удалить файл и считать каталог, причём в варианте для базового РК эти функции оверлейные, отчего микро-ОС сокращает доступное ОЗУ всего на 200 байт, а не на 2 кб.

Удобно иметь ПЗУ на E000 (всё-равно на E000 обычно стоит RK-DOS). Если же такого ПЗУ нет, то разумно иметь ROM-диск и ОЗУ на A000, куда могут грузиться системные программы из ROM-диска (отдадчик и DOS, в т.числе и RK-DOS перетранслированная на A000 и CP/M).

Так как все исполнительные адреса клавиатурных прерываний всё-же не в ПЗУ, а в ОЗУ (7614...761D), то в ходе работы любое клавиатурное прерывание можно изменить. Если же это не делать, то работают те адреса, что прошиты в ПЗУ.

А чтобы Вам более детально понять, что делает загрузчик ОС из ROM-диска привожу полный код этого загрузчика:

Спойлер:

Код:

ROMDOS: LD      A,90H
        LD      (PDU),A

        LD      DE,0A000H
        LD      HL,9
        CALL    RDROM
        CP      D
        JP      NZ,WARMST      ; НЕТ ROM-ДИСКА
        CALL    RDROM
        LD      C,A
        CALL    RDROM
        LD      B,A
       
        PUSH    HL
L30:    CALL    RDROM
        LD      (DE),A
        INC    DE
        LOOP    L30
        POP    HL
        JP      (HL)

RDROM:  LD      (PDB),HL
        LD      A,(PDA)
        INC    HL
        RET

Таким образом, чтобы грузить Вашу ОС в другие адреса замените параметр в команде LD DE,0A000H на тот адрес? куда должна грузиться Ваша ОС.

Можно также посмотреть как устроены п/п-ммы чтения/записи байта из второй половинs РУ5-тых. Видно, что здесь упрощённый доступ (т.е не к 1 мб на SIMMS-30, а только к 32 кб в верхних адресах РУ5-тых).

Спойлер:

Код:

RRAM:  LD      A,RAMBYT shl 1 + 1
        LD      (PU),A
        LD      C,(HL)
RAMRET: DEC    A
        LD      (PU),A
        RET

WRAM:  LD      A,H
        RLCA
        RET    C
        LD      A,RAMBYT shl 1 + 1
        LD      (PU),A
        LD      (HL),C
        JP      RAMRET

Вопросы и просьбы изменить что-то (например, автостарт ОС из ROM-диска или E000, как в ОРИОНЕ), помочь настроить код под иные адреса - пишите в личку. Кстати, как всегда, это не последняя версия ПЗУ, это будет меняться по мере доработки и моих потребностей (периодически смотрите дату упаковки RAR-архива).

Выложенная здесь версия странслирована под самый общий случай, т.е для случая когда и ППА D14 ещё стоит по базовому адресу A000 (и соответственно, ОЗУ на A000 нет), а полубанково-коммутируемое дополнительное ОЗУ самое минимальное - 32К, всего одна дополнительная полу-банка из верхней части РУ5-тых.

Если же у Вас запасной ППА переставлен на 8400, чтобы в области A000...BFFF поставить ОЗУ (любое, открытием верхней памяти РУ5-тых, или, что приятнее, - сделано из двух 62256, что даёт прокачку в окне 8 кб дополнительных 64 кб, коммутируемых битами запасного ППА по адресу 8400), то используйте версию для ППА D14 на 8400, что также включена в архив. Не перепутайте, т.к версия ПЗУ для D14 на 8400 не будет работать на базовом РК86, где нет дешифратора ИД7 на область 8000...9FFF. Т.к тогда обращения на 8400 будут попадать на 8000 (т.е не в D14, а в ППА клавиатуры на 8000), что приведёт к ужасному завису...

PS. Учтите, что для РК86 я встречал несколько универсальных игр, что контроллируют команду LD SP,76CF (или LD SP,36CF) по адресу F836, определяя по байту 76 или 36 размер ОЗУ и соответственно корректируя код игры. Правильнее было бы проконтроллировать старший байт регистра SP при запуске игры. В данном ПЗУ, т.к число входов увеличено (да и код начала совсем иной), на адресе F836 находится совсем другой код, потому эти игры вероятно будут улетать. Если обнаружите такие игры, пришлите мне, исправить их - дело нескольких минут.

В выложенный по ссылке архив вложен отладчик, странслированный на адрес E000, что позволяет установить ПЗУ с ним в панельку ROM-диска и выходить в него по Shift+F1. Это обычный отладчик, он не предназначен для входа в него по CALL и возврата из него по RET. Так что после прерывания программы по Shift+F1 с целью отладки возврата не будет. Чуть позднее я переделаю отладчик, чтобы он работал в более удобной мнемонике (Z80) и введу вход/выход в отладчик по CALL.

Обращаю внимание, что эмуляторы EMU и EMU80 содержат ошибку. С моими модификациями мониторов РК86 с большим курсором в этих эмуляторах неверно отображается курсор. На реале всё нормально. Потому в архиве есть версии странслированные как для большого курсора, так и для обычного курсора в виде чёрточки, что нормально отображаются в эмуляторах.

Чтобы использовать эти файлы ПЗУ в эмуляторе переименуйте файл ПЗУ в то имя, что указано в конфиг-файле конкретного эмулятора. Или отредактируйте конфиг файл, указав там имя данного файла в качестве файла ПЗУ, вместо ранее указанного.

Ссылка для скачивания: https://yadi.sk/d/bcz2I0tZ3VNUms

_________________
***
avatar
barsik
новичёк

Сообщения : 85
Дата регистрации : 2016-11-10
Откуда : 600 км от Москвы

Посмотреть профиль

Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения