Эмулятор B2M при эмуляции РК86 визуализирует экран выше 8000 только с таким конфигом, при котором область 8400...BFFF некоммутируемая и является частью mem1, расширенной с 32К до 64К.
mem1 : Memory {
size=10000
}
mm : MemMap {
map[0][0000-7FFF]=mem1[0000]
map[0][8000-83FF]=KBDPPA.data
map[0][8400-BFFF]=mem1[8400]
А вот при такой строке отображения экрана выше 8000 нет:
mm : MemMap {
map[0][0000-7FFF]=mem1[0000]
map[0][8000-83FF]=KBDPPA.data
map[0][8400-BFFF]=mem1.frame[0][0400]
Т.е при коммутируемой области 8400...BFFF экран выше 8000 делать нельзя, что несколько снижает ценность эмулятора.
Попробовал получить архитектуру с переключение ОЗУ полу-банками по 8000H байт и с предложенной (красным цветом) строкой
map[0][F300-F3FF]=mem1.frame[1].page
и со строкой
map[0][F300-F3FF]=XPPA.data
Результат одинаковый.
Тогда попробовал трассировать тест переключения полубанок, загруженный в верхнее, (т.е некоммутируемое командами переключения полу-банок) ОЗУ 8400. Уж извините за правду, но увы, встроенный в эмулятор отладчик оказался неудобным, неполноценным и потому непригодным (для меня) для практического использования. Если интересно, могу высказать свои пожелания к встроенному отладчику.
К сожалению, исходника отладчика для Z80 у меня нет, да и в 4К в области E000...EFFF отладчик Z80 не влезет. Поэтому пришлось перетранслировать тест на команды КР580 и использовать отладчик для КР580.
В результате удалось выяснить, что экран в эмуляторе гаснет не по команде записи в регистр переключающий банки, а по команде пишущей в ОЗУ 0...7FFF, т.е в уже переключённую полубанку. Но проблема не в отсутствии визуализации, а в том, что одновременно с гашением изображения происходит улёт самой программы, расположенной в области 8400, даже в шаговом режиме под отладчиком, отчего ничего выяснить нельзя.
Тогда странслировал тест для адреса E000, где в эмулируемом РК ПЗУ, т.е где код не должен разрушаться. Однако стек всё-равно пришлось ставить на C000, т.е в область 8400...BFFF. Результат был аналогичным.
Это меня достало. Я не могу тратить столько времени, на то, что особо и не требуется. Достаточно наличия "верхнего ОЗУ". А уж если оно банкированное (несколько страниц), то это предел мечтаний любого фаната РК86, измученного нехваткой ОЗУ.
Коммутацию полу-банок хотелось иметь в эмуляторе, чтобы не тратить 1/16 ОЗУ впустую (из-за некруглости окна в 15К). На реальном РК86 сделать одновременно и "верхнее ОЗУ" и диспетчер ОЗУ с коммутацией всего основного ОЗУ - нереально. Слишком много пайки и слишком много деталей. Я признаю только такие доработки, что можно без хлопот сделать за 1-2 часа. Наличие ОЗУ 8400...BFFF важнее, чем чуть больший размер эл.диска.
Однако и использование "верхнего ОЗУ" в эмуляторе B2M сейчас под вопросом.
Я обнаружил, что отладчик работающий в верхнем ОЗУ нельзя использовать. А именно, при попытке трассировать программу командой Gstart,stop (где START адрес старта, а STOP адрес стоп-точки), отладчик портит программу. Возврат в отладчик из стоп-точки происходит, но сама стоп-точка не восстанавливается. По адресу стоп точки остаётся байт с кодом RST 8. В этом легко убедиться дав команду X, или L. Тот же отладчик странслированный в основное ОЗУ работает как положено. Происходит так, как будто после прогона кода RST 8, и возврата тем самым в верхнее ОЗУ, программа не смогла записать байт в основное ОЗУ.
Опыт был повторён с тремя разными отладчиками, которые использовались в течение 25 лет и не имели нареканий. В файле TEST B2M.RAR прилагаю исходник отладчика, чтобы Вы могли повторить эксперимент. Руководство в файле _READ_ME.TXT.
В то же время в верхнем ОЗУ без проблем работали несколько игр, мой текстовый редактор и макроассемблер. Т.е проблемы с верхним ОЗУ возникают только при каких-то условиях (возможно при прогоне каких-то редких команд).
Как указано выше, тесты работающие из верхнего ОЗУ и вызывающие п/п-ммы F836/39 тоже по непонятным причинам улетают и трассировать их не удаётся. Я потерял много времени, пока это понял. Причём, как в варианте с двумя блоками памяти (mem1 и mem8400), так и с совмещённым ОЗУ из одного блока памяти.
Таким образом пока разрабатывать программы в эмуляторе B2M, по причине отстутствия отладчика, невозможно. Т.к не имея ни отладчика, ни команд эмулятора для управления прогоном, ничего делать нельзя. Команда HALT, если в ней программа находится более 2 секунд должна автоматически вылетать в отладчик.
Обнаружились глюки эмулятора B2M не зависящие от архитектуры. Если по директиве I ввести файл, а по окончании ввода сразу нажать клавишу I и <ВК>, например, загружая программу для отладки и затем отладчик, то второй файл вводится неверно. Старшим байтом введённого блока выводится FF. Т.е блок вводится в область ПЗУ, выходит за сегмент в 64К и концом блока затирает код самого эмулятора. Если затем снова ввести I и <ВК>, то произойдёт улёт эмулятора с авральным его завершением. Если же между первым вводом файла и вторым вводом файла выполнить любую директиву, например дамп, то последующий блок вводится нормально. Данное явление почему-то бывает не всегда. В половине случаев два подряд ввода по директиве I проходят прекрасно. Если такой глюк случился и старшим байтом введённого блока выведен FF, то необходимо сразу сделать сброс (кликнуть кнопку с красным кружком). После такого глюка в эмуляторе ничего делать нельзя, - будет улёт. Если сразу после сброса нажать I и <ВК> и затем в меню выбора файлов нажать <ESC>, то изображение на экране исчезает и прогон зависает. Это тоже глюк эмулятора B2M.
Эмулятор B2M с базовым ПЗУ F800, но без ПЗУ F000 улетает, если нажать <ВК> на пустой строке. Это ошибка не эмулятора, а авторов РК86, точнее их ПЗУ F800 (уход на несуществующее ПЗУ F000). Автор эмулятора B2M избавился от этой ошибки подставив код ПЗУ F800 также по адресу F000, отчего JMP F000 равноценен рестарту. Поэтому надо использовать исправленый мной ROM-BIOS, где вместо ухода на F000, в случае ввода ошибочной команды, сделан уход на ERROR.
Регистр управляющий содержимым окна 8400...BFFF надо инициализировать при старте компьютера, т.е по холодному старту ПЗУ F800. Для этого надо запрограммировать режим доп.ППА (по адресу F100) и вывести в порт C ППА число 2. Иначе в окне 8400 отображается содержимое основного ОЗУ с адресов 0400...3FFF. При числе в порту С равном 1 в окне 8400 тоже отображается основное ОЗУ (но уже 4400...7FFF). Поэтому приходится выводить в регистр число 2. При расширении ОЗУ выше 8000 за счёт статического ОЗУ, это ОЗУ не совмещено с ОЗУ из динамического ОЗУ и таких проблем нет.
Использование ОЗУ 8400...BFFF со стандартным базовым ПЗУ F800, т.е без инициализации регистра управления равнозначно использованию основного ОЗУ 0400...3FFF. И если, использовать текстовый редактор, работающий в верхнем ОЗУ, то при загрузке текста разрушается код редактора и происходит улёт. Таким образом инициализировать регистр управления окном надо как в версии ПЗУ для Z80, так и в версии для КР580.
Т.к регистр управления находится в ППА стоящем по адресу F100, то работать такие ROM-BIOS могут только, если область F000 выделена дешифратором. Если дешифратора нет, т.е РК86 абсолютно базовый, без РК-КНГМД, то запись в ППА F100 попадает в БИС ВТ57. И соответственно такое ПЗУ не годится для базового РК86.
Прилагаю версии ROM-BIOS для КР580 и Z80. В версии Z80 есть п/п-ммы для работы с расширенным ОЗУ, а также добавлены 2 новые директивы. Читайте READ_ME-файлы и смотрите исходники. Всё документировано.
Прилагаю для тестирования версии RK-DOS для Z80. Также читайте READ_ME- файлы и смотрите исходники. Всё документировано.
Прилагаю для теста "верхнего" ОЗУ несколько программ работающих в верхнем ОЗУ. Мой редактор и ассемблер - это последняя версия для КР580, что была адаптирована от СПЕЦИАЛИСТА к РК86. Последующие версии были для Z80 и только для ОРИОНА и их конверсия для РК требует труда и пока не сделана (не ясно как сделать маркировку текста без инверсии, нужна замена Z80-команд, замена координат POSX,POSY и переделка роликов вверх-вниз). В этой версии макроассемблера в макрокомандах нет некоторых расширенных свойств (но документация соответствует).
- - - Добавлено - - -
Здесь во вложении версия RKDOS с ошибкой (работает только в ОЗУ) исправленную версию можно взять в конце темы.




Ответить с цитированием