RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Май 2024
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031  

Календарь Календарь

Последние темы
» Вити больше нет!
автор bug19 Пн Фев 20 2023, 19:54

» Собираем оригинальный Орион 128
автор bug19 Пн Фев 20 2023, 19:47

» Проблема плющеного экрана ОРИОНА
автор kanzler Пн Ноя 28 2022, 12:05

» Орион 128 и его клоны возрождение 2019-2022 год
автор kanzler Пн Ноя 28 2022, 12:03

» Электроника КР-04. Информация, документы, фото.
автор kanzler Пн Ноя 28 2022, 12:02

» Новости форума
автор kanzler Пн Ноя 28 2022, 11:52

» Орион-128 НГМД запуск 2021 года
автор matrixplus Сб Сен 10 2022, 17:36

» ПЗУ F800 для РК86
автор ведущий_специалист Сб Сен 10 2022, 10:37

» Микропроцессорная лаборатория "Микролаб К580ИК80", УМК-80, УМПК-80 и др.
автор Электротехник Вт Июл 26 2022, 19:33

» Орион-128 SD карта в Орионе
автор matrixplus Чт Июн 02 2022, 09:00

» 7 Мая. День Радио!
автор Viktor2312 Чт Май 12 2022, 10:58

» Серия: Массовая радио библиотека. МРБ
автор Viktor2312 Ср Май 11 2022, 12:17

» Полезные книги
автор Viktor2312 Пн Май 09 2022, 15:07

» Орион 128 Стандарты портов и системной шины Х2
автор matrixplus Вс Май 08 2022, 23:08

» Орион-128 и Орион ПРО еще раз про блоки питания
автор matrixplus Вс Май 08 2022, 19:09

» Орион-128 Программаторы
автор matrixplus Вс Май 08 2022, 19:02

» Орион ПРО история сборки 2021 до 2022
автор matrixplus Вс Май 08 2022, 18:47

» Анонсы монет (New coin).
автор Viktor2312 Сб Май 07 2022, 23:11

» Хочу свой усилок для квартиры собрать не спеша
автор Viktor2312 Сб Май 07 2022, 19:33

» Амфитон 25у-002С
автор Viktor2312 Сб Май 07 2022, 09:38

» Майнер: T-Rex
автор Viktor2312 Вс Май 01 2022, 09:12

» GoWin. Изучение документации. SUG100-2.6E_Gowin Software User Guide. Среда разработки EDA.
автор Viktor2312 Пн Апр 25 2022, 01:01

» GoWin. Изучение документации. UG286-1.9.1E Gowin Clock User Guide.
автор Viktor2312 Сб Апр 23 2022, 18:22

» GoWin. Documentation Database. Device. GW2A.
автор Viktor2312 Ср Апр 20 2022, 14:08

» GOWIN AEC IP
автор Viktor2312 Ср Апр 20 2022, 12:08

Самые активные пользователи за месяц
Нет пользователей

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


ROM-BIOS ИРИШИ

Перейти вниз

ROM-BIOS ИРИШИ Empty ROM-BIOS ИРИШИ

Сообщение  barsik Ср Янв 23 2019, 12:43

1
В этой теме можно обсудить не только иришины ПЗУ содержащие ROM-BIOS, но и содержимое других ПЗУ ИРИШИ с программным кодом. В частности, - ПЗУ ROM-диска и состав резидентных программ или драйверов прошиваемых в основное ПЗУ при его расширении.

ИРИША в базовом виде имеет ПЗУ с программным кодом только в двух местах, - это собственно ROM-BIOS, прошитый в две 573 РФ4 (или в 8 штук РФ2, что невыгодно т.к занимается локальный разъём), а также иришин инкрементный ROM-диск в 64 кб, в котором также можно применять или РФ2 или РФ4.

Т.к сейчас РФ4 и 2764 уже не выпускают, то обычно ставят две 27256 или 27128, прошивая коды ROM-BIOS в самые старшие 8 кб. Тогда на плате не требуется никаких коррекций и можно ставить любые ПЗУ 2764, 27128, 27256 в любом сочетании. Я в 90-тые использовал так прошитую 27256 (с монитором, обеспечивающим наличие входов в ROM-BIOS в карте 2, что надо для адаптированных программ), а также две 2764 с родной прошивкой.

При этом у 27256 на адресах A13 и A14 (это ноги 26 и 27) находится уровень +5В и сигналы выбирающие участок ПЗУ равны 11. Если на эти ноги 27 и 26 (адреса А14, А13) подавать не сигнал 11, а 00/01/10, то получится еще 3 страницы ПЗУ по 16 кб каждая, отчего две 27256 будут использованы целиком на все 64 кб.

Таким образом, если Вы применили две 27256 (вместо двух 2764), то всё, что Вам требуется, чтобы расширить ПЗУ до 64 кб, это откуда-то взять два управляющих бита. При этом по сбросу эти биты д.быть равны 11 (или 00, если родные ROM-BIOS-ы прошить в первые четвертинки обоих ПЗУ).

Теоретически можно взять эти биты, например, из порта А резидентного ППА. Порт А в ИРИШЕ используется для вывода на принтер (но уже не будет так использоваться, т.к посимвольные принтеры в мире исчезли), для считывания резисторов аналогового джойстика, а также для вывода программно-формируемого звука. Потому порт A (как и порт C) почти всегда запрограммирован на вывод.

В порту А заняты лишь биты PA0, PA4, PA5, остальные биты свободны. При этом, чтобы решить "проблему НП" (нач.пуска), возникающую из-за того, что по сбросу на выходах порта А возникают единицы (Z-состояние), а нужны нули, можно в ПЗУ 27256 в первую и последнюю четверти прошить одинаковый код родного ROM-BIOS. Тогда при работе всех старых программ из ПЗУ всегда будет читаться родной ROM-BIOS, но вместо него программно можно будет включить ещё две версии ПЗУ. Или можно решить эту проблему также как в плате ЦП по сбросу выходы PC2 и PC3 устанавливаются в 0 (за счёт ЛА9 с открытым коллектором и сигнала НП).

Можно добавить и отдельный порт для коммутации страниц ПЗУ и смонтировать на плате ЦП вторым этажом триггер ТМ2 и ЛЛ1 (из которой нужен всего один вентиль, так что разумно ЛЛ1 заменить двумя диодами и резистором). Запись в этот двухразрядный порт можно сделать по адресам $14, $18 или $1C, чип-селекты которых формирует плата ЦП. Это самый простой способ расширить ПЗУ, не требующий монтажа никаких расширительных плат содержащих доп.панельки на 28 ног.

По техническим причинам пока перешивать базовый ROM-BIOS не могу, т.к прошитые 30 лет назад ПЗУ уже не перезашьются (так бывает почти всегда), а запасных ПЗУ у меня практически нет. Т.к осталось лишь несколько 27С256, но они шьются лишь с третьего раза и будут нужны для прошивки DOS в ROM-диск. Есть ещё три 27C512 (купленных более 15 лет назад) и одна 32-х ногая 27C1024 (а её мне вообще прошить нечем).

Есть, правда, ещё 12 штук абсолютно новых D27C256 -200V10 intel (c) 1984, но они почему-то не прошиваются орионовским УФ-прошивателем для 27256 (ROM-Wriiter, В.Ивинских, который отлично прошивал другие 27С256). В них любая прошиваемая ячейка после прошивки оказывается нулевой по всем битам. В чём дело не могу понять.

Возможно, они не терпят наличие напряга +12 В в момент переключения адресов или сигналы на чип-селектах (ногах 20 и 22) как-то не так выставляются. Придётся самому делать соответствующий прошиватель точно по даташиту. Тогда смогу изменить ROM-BIOS, чтобы он поддерживал при старте не иришин ROM-диск, а ROM-диск из резидентного ПЗУ и иришин ROM-диск станет ненужным. Но пока иришин ROM-диск является очень необходимым, даже если есть винчестер или дисковод (иначе негде разместить холодный загрузчик).

Иришин инкрементный ROM-диск включаемый в локальную шину сделан так, чтобы получить внешнее устройство без вторжений на основной плате, из-за чего несколько громоздкий. Если этот ROM-диск делать не на Рф4/2764, а на 27256 или 27512, то из схемы выбрасываются два элемента и схема упрощается до пяти TTL-корпусов (думаю чертить нет смысла, любой начертит себе сам).

А если применить не 27256, а 64-х килобайтовые 27512 (они тоже на 28 ног), то также переключая страницы ПЗУ 3-мя битами резидентного ППА и используя те же самые имеющиеся 2 панельки на 28 ног, можно поиметь в ИРИШЕ ПЗУ аж в 128 кб, истратив кроме самих ПЗУ всего несколько кусочков проволоки.

Хочу отметить, что ПЗУ в ИРИШЕ ценно тем, что программы прогоняемые в нём работают на скорости процессора, практически без тормозов (торможение возникает лишь из-за стека, потому линейный фрагмент в ПЗУ будет ещё быстрее, чем фрагмент с подпрограммами). Потому в расширение ROM-BIOS выгодно прошить альтернативные драйверы экрана (это шрифт 6*8 и, возможно, 7*8 ) и подпрограммы обмена с внешними приводами (винтом, флопом и флэш-картой).


Последний раз редактировалось: barsik (Чт Июн 06 2019, 19:37), всего редактировалось 1 раз(а)
barsik
barsik
Ветеран

Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия, СПб

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

ROM-BIOS ИРИШИ Empty .

Сообщение  barsik Пт Мар 29 2019, 07:58

2
При изучении машины обычно начинают с изучения ROM-BIOS. Это позволяет лучше понять железо и разобраться в методах программирования. Также исходник нужен, чтобы разобраться в рабочих ячейках ROM-BIOS (чтобы узнать как подгружать драйверы экрана и клавиатуры). А ещё более исходник необходим, чтобы можно было изменять и дополнять ПЗУ.

Готового исходника ПЗУ ИРИШИ в Интернете не нашёл (точнее нашёл, но туфту, что делается с помощью IDA за 15 минут). Потому пришлось самому дизассемблировать оба ПЗУ ИРИШИ. Сначала дизассемблировал своё ПЗУ, что у меня с 1988 (которое скорее всего из ж.МПСС) и ПЗУ от ДИАЛОГА, а затем вчера дизассемблировал и ПЗУ из красной книги. Т.о уже появился вполне рабочий, но незаконченный исходник (точнее в ПЗУ-1 CONOUT ещё не особо разбирался, там нет комментариев и некоторые адреса табличек не проставлены, потому менять ПЗУ-1 пока не стоит, можно лишь изучать). Т.о понять как подгрузить драйверы, - уже можно.

Вообще для использования в качестве ROM-BIOS сейчас доступны три (вполне совместимые) версии. Одна журнальная 1986 года, одна из красной книги и одна от компьютера ДИАЛОГ. Жалко, что нет кодов ПЗУ от второго клона ИРИШИ - КАСПИЯ.

Кстати, ДИАЛОГ это одноплатный турбированный до 2.5 МГЦ клон ИРИШИ, в котором, чтобы сэкономить 7 микросхем ROM-диска, отказались от внешнего автоинкрементного ROM-диска, а файлы из него перенесли в ПЗУ, соответственно его расширив (изменив процедуру загрузки файлов из ROM-диска и прошивку карты памяти).

CONOUT содержит драйвер вывода символов и графический язык. ПЗУ BOOTM содержит загрузчики из нескольких устройств, опрос клавиатуры, процедуру обслуживания меню, вывод музыки и магнитофонный драйвер. Реально в первом ПЗУ кода ROM-BIOS-а всего 2 кб (ещё 4 кб отладчик и целых 2 кб свободны для расширений ROM-BIOS). Во втором ПЗУ полезного кода ROM-BIOS - 6 кб (т.к 2 кб занимает фонт 8*8 ). Т.е из 16 кб код собственно ROM-BIOS занимает всего 8 кб. А если выкинуть загрузку из сети и дисковода, то будет ещё на полкило меньше.

ROM-BIOS полезно чуть изменить. Не только, чтобы убрать ненужные вещи ради экономии пространства. А например, надо как-то переделать процедуру проигрывания мелодии (CALL 0055H). Сейчас эта процедура для целей музыки практически бесполезна. Похоже в коде ошибка. Т.к с помощью описанного в красной книге музыкального языка у меня не получилось проигрывать мелодии, т.к не сумел сделать паузы. Или ума не хватило, или описание неверное, или дохлота в коде (возможно это только в моём ПЗУ, что из 1988, а в ПЗУ из красной книги всё O'KAY). Из-за этого две одинаковые ноты подряд никак не воспроизвести и даже одноголосная мелодия невозможна.

Вставить тексты вышеупомянутых исходников ПЗУ в пост не получилось (получил сообщение форума, что размер слишком большой). Потому временно кладу их на Яндекс.диск. ПЗУ-0 (BOOTM) уже готово, а с ПЗУ-1 (CONOUT) ещё не особо разбирался, но понять всё можно. Приложил также ПЗУ BOOTM ДИАЛОГА и ПЗУ BOOTM из красной книги.

ПЗУ ДИАЛОГА - немного изменённое ПЗУ ИРИШИ из ж.МПСС. В нём исправленная подпрограмма вывода нот (а также константы нот пересчитаны на клок ВИ53 в 2.5 МГЦ, что кстати, недопустимо для него по РТМ), другое стартовое меню, а также вместо списка файлов из инкрементного ROM-диска добавлен текстов редактор. Похоже, что ПЗУ CONOUT во всех трёх версиях ПЗУ ИРИШИ одинаковое.

Исходник журнальной версии ПЗУ ИРИШИ, исходник ПЗУ ДИАЛОГА и исходник ПЗУ ИРИШИ-Л из красной книги вот здесь. Они в альтернативной кодировке и будут ещё меняться (постепенно буду их доделывать, потому смотрите дату в названии файла).

ROM-BIOS из красной книги очень близок к журнальному ROM-BIOS и в принципе не приносит пользователю никакой пользы относительно журнальной версии. К тому-же содержит полудохлый отладчик. Хотя отладчики во всех машинах совпадают с точностью до байта.

Отличия ПЗУ из красной книги лишь в том, что добавлена более простая альтернативная аппаратная клавиатура (требующая не одно, а аж 10 считываний), также добавлен ввод ключевых слов для CP/M. Даже загрузчик с экзотического дисковода (порт $50) и подпрограмма музыки та же. Кстати, в зависимости от сигнала с перемычки EX1 происходит загрузка или из дисковода с портом $50 (читается и стартует на A000 BOOT-сектор в 128 байт), или из другого типа дисковода с портами $20 и $38 (хотя возможно это не дисковод, а RAM-диск).

Таким образом, если у Вас нет антикварных КНГМД и/или альтернативной клавиатуры, то польза от более нового ROM-BIOS из красной книги (даже если исправить ошибку) - нулевая.

Интересно, что ROM-BIOS (особенно CONOUT) написан не новичком, а судя по уровню кода, довольно сообразительным и грамотным программистом. Потому меня очень удивляет повсеместное использование команды  CP 0 (там где флаги не нужны) и команды CP 0FFH для анализа стоп-байта (т.е там, где содержимое аккумулятоа не нужно). Флаги и стоп-байты потому и делают равными 0 и 0FFH, что их можно анализировать однобайтовой командой. А CP для анализа 0 и 0FFH применяют лишь самые новички, что не знают о результате команды XOR A и того, что команда INC A короче, чем CP 0FFH или те, кто привык писать для многоразрядных процессоров больших ЭВМ, где длина и скорость прогона команд XOR A и CP 0 одинакова.

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

И всё-же несмотря на бесполезность новой красно-книжной прошивки, для меня от неё всё-же возникла практическая польза. Оказалось, что моя журнальная прошивка из 1988 содержит опечатку, а в журнале МПСС этой опечатки нет. Очевидно эту ошибку совершил, тот кто набирал код моей прошивки из журнального дампа в 1988 году. Из-за этой опечатки заставка (слово ИРИША в круге) с моей прошивкой рисуется с небольшим искажением. Ранее я думал, что так и должно быть (т.к с красно-книжной прошивкой ранее дела не имел). Но проверяя в ходе получения исходников разные прошивки в эмуляторе, я заметил, что с красно-книжной прошивкой заставка иная.

С моей журнальной прошивкой буква И рисуется с разрывом, а с безошибочной журнальной прошивкой этого нет. Выяснилось, что блок графики в моей прошивке отличается одним байтом. Для исправления заставки в моей журнальной прошивке (что я выложил ранее) достаточно в ПЗУ-0 изменить байт 01 по адресу 00EF на байт C1. Естественно, контрольная сумма ПЗУ-0 от этого изменится. В исходной прошивке КС равна A98E, а после исправления байта в файле графики станет - 6A4E.

Через некоторое время (чтобы тот кто скачал мою прошивку ранее успел прочитать) выкладку кодов ПЗУ-0, что скачивается по ссылке в теме прошивок, - заменю на исправленную, а этот текст и все упоминания о опечатке в моей прошивке удалю. А исходник по ссылке я уже заменил.

Хотелось бы найти другой вариант журнальной прошивки, чтобы сравнить, хотя я сомневаюсь, что есть ещё ошибки. Потому что именно с этой прошивкой у моих знакомых с ИРИШЕЙ работал бейсик, программы на бейсике, форт и все другие программы ИРИШИ купленные в КООП при МГУ в 1988/1989.

Спойлер:


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

Нашёл неверную работу одного стандартного искейп-кода в драйвере вывода ИРИШИ. По счастью это ещё не причина для модификации ПЗУ, т.к ценой некоторых программистких извращений с проблемой можно справиться. Оказалось, что неверно работает искейп-код ESC,45. Это стандартный код инициализации терминала. Для советских 8-ми разрядок достаточно по приёму этого кода просто очистить экран и сделать HOME курсора. А если используется оконный и цветной драйвер, то дополнительно окно вывода устанавливается на полный экран и режим монохром в текущем разрешении.

Проблема возникла из-за того, что этот искейп-код в ИРИШЕ не сохраняет текущий режим на 80 символов, а очищает экран и нагло устанавливает убогий режим моно-40. Т.е получив этот искейп-код терминал "ИРИША" нагло переключает формат экрана с 80*25 на полезный только для полуслепых очкариков формат экрана 40*20.

А все полно-экранные программы CP/M по старой советской традиции начинают свою работу с того, что выкидывают на консоль искейп-45. Если бы это было всё, то было бы достаточно находить в начале программ такой участок кода и модифицировать. Но увы программы часто используют этот код в качестве кода очистки экрана, т.к в разных терминалах код CLS разный, а вот код инициализации у всех терминалов одинаковый. Причём, поиск цепочки байтов 1B,45 не всегда помогает, приходится искать цепочку кодов, соответствующую фрагменту:

кто-то в 1981 году пишет:        LD      C,27
       CALL    CONOUT
       LD      C,45H
       CALL    CONOUT

т.е поиск байтов $1B и $45 следующих друг за другой с интервалом в 4 байта тоже не всегда помогает, т.к выкидыш может делаться функциями вывода BDOS, а их аж две. В итоге, проще дизассемблировать и изучать программы, чтобы избавить их от выдачи искейп-45, заменив на выкидыш кода $0C. Ясно, что ломать фирменные программы из-за глупой ошибки автора ROM-BIOS ИРИШИ глупо, проще починить ROM-BIOS ИРИШИ.

Если с маленьким TPA экранные программы не работали из-за нехватки ОЗУ, то когда я поимел высокое TPA, то из-за неверности обслуживания этого искейп-кода, всё-равно обломился. Сразу же захотел воспользоваться лучшим текстовым редактором CP/M SuperText (он же нерусифицированный FinalWord) и тут же обломился, подло включился моно экран 320*40 с текстовым форматом 40*20 (даже не 25) и на экране возникла мешанина, т.к вывод шёл на 80-ти символьный экран.

Попробовал WordStar и WordMaster - тот же печальный результат. Тогда я впал в депрессию и горько заплакал... Т.к уже решил, что придётся сломать себе мозг пытаясь разобраться в работе драйвера в ПЗУ-1. Но плакал недолго, т.к в голове ещё осталось несколько тысяч серых клеточек, которые и подсказали выход.

Достаточно доработать CP/M-BIOS, чтобы встроить в него перехват кода искейп-45. Это очень просто. В ближайшие годы займусь этим, вот тогда и смогу пользоваться текстовым редактором SuperText в эмуляторе ИРИШИ, включив полноэкранный режим и задав такт Z80 в 100 МГЦ.

ИРИША, кстати, это настоящий CP/M компьютер из эпохи, не то, что эти нечестные CP/M-шалабушки в 10 корпусов, что ныне делают некоторые, прилепив к МП-ядру на Z80 контроллер консоли на современном скоростном однокристалле. В ИРИШЕ можно написать драйвер любого терминала, а в шалабушке он только один, да и тот монохромный.

К тому же в эмуляторе ИРИШИ, имея достаточно быструю PC можно установить такт Z80 в 100 МГЦ, хотя слегка сомневаюсь, что эмулятор EMU имеет настолько эффективный блок эмуляции процессора, да и принцип периодической цельно-кадровой визуализации дико тормозит, примерно процентов на 95% или больше. Хотя в эмуляторе с блоком эмуляции написанном на ассемблере и побайтовой визуализацией, я в 90-тые имел в эмуляторе эмулируемый такт Z80 в 100 МГЦ ещё на 486DX2-66.

Т.е имея эмулятор ИРИШИ, нет смысла трахаться делая CP/M-шалабушки, т.к на них 100 МГЦ такта Z80 не получишь. Да и графического экрана в этих шалабушках нет. Писать игры с графикой для них невозможно. А CP/M с процессором на такте 100 МГЦ будет достаточно быстрой. Этой скорости с избытком хватит, чтобы написать 8-ми разрядную версию Принца Персии и даже на DOOM первой версии хватит такой скорости. Хотя нет, скорости хватит, а графики нет, - написать DOOM не получится, кажется не было его версии для CGA, требовался минимум EGA.

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

Менять ROM-BIOS для серъёзного пользования ИРИШЕЙ всё-равно выгоднее. Во-первых, это позволит тем, кто ещё не имеет иришиного ROM-диска не монтировать его, достаточно допрошить холодный загрузчик в ROM-диск.

При этом разумно выкинуть из ПЗУ ИРИШИ ненужное, - любителям не надо инициализировать мифические устройства, читать из локальной сети, грузиться из антикварного дисковода 6022 и инициализировать несуществующий диспетчер несуществующего ОЗУ на несуществующих периферийных платах. Это даёт в плюс ~ 1 кб, хотя двигать остальной код нельзя, в эмуляторе перестаёт работать директива ввода с МГ-ленты.

С эмулятором переделывать ПЗУ гораздо удобнее, чем это приходилось делать в 90-тые тысячи раз перешивая прошивателем УФ-ПЗУ. Причём так было удобно и стоило делать только для РФ2, у них ресурс перезашивок больше, чем 150 раз, тогда как более современные 2764...27256 имеют очень маленький ресурс перезашивок. А из 27256 надёжнее и долговечнее те, у которых кристалл большего размера. Это естественно, т.к чем технология древнее, тем она надёжнее.

Для поддержки DOS без наличия массовой внешней памяти в ПЗУ можно иметь холодный загрузчик файлов из ROM-диска. Тогда при холодном старте DOS из ROM-диска автоматически будут считываться файлы и записываться на эл.диск из излишнего ОЗУ.

Так и делалось в CP/M ОРИОНА в бездисководном варианте. Для этого, сразу после загрузки стартовый конфигуратор (иными словами форматер эл.диска и обработчик AUTOEXEC.SUB) проверяет, что первый файл в квазидиске ORDOS имеет имя !ZAGR и если это так, то грузит его на $100 и выставляет флаг для CP/M-BIOS, который при первом входе, т.е при холодном старте проверяет этот флаг ORDOS и если он стоИт, то перед передачей управления на CCP, делается CALL $100.

Таким образом с потерей в коде CP/M всего в 6 байтов всякий раз при холодной загрузке стартует внешний загрузчик файлов из квази-диска ORDOS (т.к загрузчик внешний, то это поддерживает разные DOS). Все CP/M-файлы оттуда переписываются в электронный диск. Что и позволяло пользователям ОРИОНА в начале 90-тых как-то жить и бороться не имея дисковода.
barsik
barsik
Ветеран

Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия, СПб

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

ROM-BIOS ИРИШИ Empty .

Сообщение  barsik Ср Май 29 2019, 12:15

3
Обнаружил ещё одну, хотя и не очень серъёзную и не сразу бросающуюся в глаза, ошибку в ПЗУ ИРИШИ. Оказалось, что блок адресов фонтов инициализируется неверно. После такой инициализации нельзя вывести символы с кодами интервале $A0...$BF. Вместо них выводятся символы из интервала $20...$3F.

Блок адресов фонтов это блочок из 8-подряд записанных адресов, каждый из которых задаёт адрес фонта для 32-х подряд следующих кодов. Изменив какой-либо адрес в этом блоке на адрес расположенный в ОЗУ карты 0 можно поместить по этому адресу графику своих 32-х символов и тогда они будут выводиться вместо стандартных символов прошитых в ПЗУ.

В таблицу инициализации в ПЗУ, которая копируется для работы в ОЗУ (чтобы её можно было менять), вместо адреса $3D00 записан адрес $3900, что приводит к тому, что символы с кодами $20...$3F выводятся дважды, дублируются кодами $A0...$BF. А сами символы $A0...$BF прошитые в ПЗУ без модификаций служ.ячеек не вывести.

После замены одного байта $39 на $3D все символы фонта выводятся нормально. Причём эта же ошибка повторена и в ПЗУ красной книги (точнее в версии ПЗУ, что включена в дистрибутив EMU, буду считать это ПЗУ из красной книги). Так что ПЗУ-1 в любом случае надо менять (т.е даже не учитывая, что в оригинале прошита нестандартная кодировка для псевдографики).

Кстати, я сравнил коды ПЗУ-1 (маркируемое иногда как Conout) из журнала МПСС и из красной книги. Оказалось, что не совпадают всего лишь 22 байта (т.е чуть изменена какая-то подпрограмма, а всё остальное не тронуто и даже не сдвинуто. Это означает, что в ПЗУ из красной книги вообще практически нет смысла. Т.к журнальное ПЗУ-0 для пользователя лучше (даёт больше пустого места, причём программных потерь нет), а ПЗУ-1, как выяснилось теперь, практически совпадает. При желании можно сочетать ПЗУ из разных прошивок.

Чуть позже я посмотрю, что там конкретно изменено, пока на это тратить время нет смысла, т.к перешивать свои реальные ПЗУ пока не собираюсь. Через сколько-то месяцев, надеюсь, существенно переделать оба ПЗУ, тогда и перезашью в реале исправленную окончательную версию.

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

ROM-BIOS ИРИШИ EMU_FONT.1559121246

А на самом деле должно выводиться вот что (что и выводится после замены байта $39 на $3D и совпадает с рисунком в журнально/книжных публикациях):


ROM-BIOS ИРИШИ ORG_FONT.1559121031
barsik
barsik
Ветеран

Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия, СПб

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

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

- Похожие темы

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