Последние темы
» Вити больше нет!автор 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
Самые активные пользователи за месяц
Нет пользователей |
Поиск
ПО. ПЭВМ "Ириша". Адаптация программ от "Радио-РК86".
RUЭВМ :: Отечественные ЭВМ, ПЭВМ и МВК :: ПЭВМ и МВК "Ириша", "Ириша-Л" , "Ириша-М" :: Программное обеспечение ПЭВМ "Ириша"
Страница 1 из 1 • Поделиться
ПО. ПЭВМ "Ириша". Адаптация программ от "Радио-РК86".
1
Хотя РК-игры неэстэтичны и в большинстве своём почти неиграбельны, но тем не менее, конверсия РК-игр имеет смысл для любительских компьютеров, для которых в своё время по каким-то причинам не было сделано достаточно игр или они были утеряны. Речь конечно о ИРИШЕ и ОКЕАНЕ.
Конвертировать в несколько раз проще, чем написать аналог с нуля. Конвертировать РК-игры можно на компьютер, имеющий быстродействие большее, чем РК, имеющий 32 кб ОЗУ и подходящий формат экрана. В экране другого компьютера на который переносятся РК-игры д.быть не менее 64 символов в строке и не менее того числа строк, что использовано в игре.
В этом плане, ИРИША оказалась не очень удачной для адаптации на неё РК-игр в силу неспособности п/п-рамм её ROM-BIOS отобразить более 25-ти текстовых строк (т.к вертикальное разрешение экрана в ней всего 200 точек). Т.о, если в РК-игре число строк 30 (а это, к сожалению, все игры с псевдографикой), то адаптировать её можно лишь для ОРИОНА (т.к для него есть драйверы на 32 строки). ЮТ88 и МИКРО-80 также имеют 32 строки и потому не годятся для заимствования игр на ИРИШУ.
Ещё одним неприятным недостатком железа ИРИШИ в отношении адаптации РК-игр оказалось отличие клавиатур РК и ИРИШИ. В частности, с клавиатурой ИРИШИ невозможно узнать держат ещё клавишу или уже отпустили. Клавиатура ИРИШИ в отличие от клавиатуры PC даёт информацию только о факте нажатия, а именно в момент нажатия выдаёт ASCII-код. Удержание клавиши ни к чему не приводит и узнать о моменте отпускания клавиши нельзя.
Не знаю как в промышленной клавиатуре 15ВВВ-97-006, но в родной иришиной клавиатуре нет автоповтора (для повтора есть отдельная клавиша ПОВТ, эту тупую идею авторы заимствовали от Apple-II, т.к в 1984 в СССР ещё не было клавиатур с автоповтором). Автоповтор свидетельствует, что клавишу держат. Да автоповтор и не поможет, т.к темп автоповтора д.быть очень быстрым и автоповтор начинается лишь спустя одну секунду после начала удержания.
Идеология использования клавиатуры в РК-играх основана на возможности узнавать нажата клавиша в данный момент или нет. Там, если держишь клавишу <влево> фигурка или ракетка двигается влево, а отпустил клавишу - останавливается. А клавиатура ИРИШИ это не позволяет.
В части РК-игр (адаптированных из CP/M) использована концепция аппаратной клавиатуры. Например, в Пэкмане и Ксониксе как раз такая идеология, - раз нажал, и даже после отпускания клавиши пэкман продолжает бег в ту же сторону. А в играх сразу написанных для РК, например, в тетрисе и теннисе концепция по нажатию, - ракетка двигается пока клавиша нажата и останавливается при отпускании (потому в ИРИШЕ, чтобы было движение приходится часто-часто барабанить по клавише).
Понятно почему изобретателю Apple-II С.Возняку, где такая же клавиатура, после проблем с играми на Apple-I пришла в голову мысль в Apple-II поставить аналоговый джойстик, что также повторили авторы ИРИШИ, причём сдуру по той же самой схеме применили невыпускаемый в стране аналоговый джойстик, а не простой контактный (а в ОКЕАНЕ джойстика нет вообще).
Вообще-то проблема не в самой клавиатуре, а в схеме включения. Т.к эту же клавиатуру я ставил в РК86 читая из неё ASCII байт и бит STATUS-а через ППА. Тогда по стробу взводился доп.триггер, как флаг, что было нажатие. Но т.к данные в порту не защёлкивались, то считывать их можно было только пока клавиатура выдаёт данные, о чём свидельствует строб. Т.о, если триггер взведён, но сигнал строб (читаемый по биту D7) уже убран, это значит, что нажатие было, но данные потеряны.
Так вот такая схема включения, в которой сигнал строб клавиатуры читается, позволяет использовать клавиатуру по идеологии клавиатуры РК86. А та схема включения клавиатуры, что реализована в ИРИШЕ больше рассчитана на использование прерываний, но они как раз и не используются (т.к это сложнее, да и не особо надо).
Клавиатура ИРИШИ выдаёт и ИРИША использует только 7-ми битовый код (на выходе п/п-мы опроса с байтом считанным из порта 4 делается AND $7F). Потому можно доработать схему включения так, чтобы по биту D7 читался строб клавиатуры. Это установка однобитового буфера на выход 589 ИР12 через который по биту D7 из порта 4 будет читаться строб, что позволит знать держат клавишу или уже отпустили. Это позволяет использовать клавиатуру по идеологии РК86, а в ROM-BIOS ИРИШИ удобно добавить п/п-мму XF81B.
Без такой доработки в адаптированных без смены логики РК-играх приходится с большой частотой барабанить по клавишам, чтобы имитировать удержание клавиши. Фигурка на одно нажатие делает только один шаг, а затем останавливается. Чтобы этого избежать, надо переделывать и сам алгоритм работы с клавиатурой в РК-программе. Это увеличивает трудоёмкость и для некоторых игр ухудшает играбельность.
Но бОльшей проблемой является то, что для конверсии РК-игры нужен полноценный исходник. Получить просто текст программы для изучения легко, - с помощью IDA это делается, в зависимости от объёма кода, всего за 5-20 минут. Но вот получить полноценный исходник, т.е текст в котором можно делать вставки, менять код, сдвигать фрагменты и изменять адрес размещения всей программы, получить для некоторых программ на порядок сложнее.
Часто на это уходит до 10 часов, а иногда получить исходник игры, который можно менять, вообще не удаётся, т.к не удаётся с времязатратой в рамках разумного разобраться в программе и проще написать свою полностью новую программу, чем разбираться в чужой.
Понятно, что легко конвертируются корректные программы, типа бейсик, ассемблер, текстов редактор, форт и шахматы. Т.е те программы, что никак не лезут в железо или раб.ячейки ПЗУ. Но РК-игры, даже простейшие, работают по железу и в них недостаточно заменить вызовы ПЗУ F800.
Если программа использует только прямое обращение в экран, то такую программу адаптировать намного проще, чем программу, которая меняет рабочие ячейки ПЗУ F800 и программу которая выводит в экран и напрямую и стандартными подпрограммами ПЗУ и к тому же ещё читает из экрана.
В этом случае уже недостаточно перехватывать и визуализировать команды с прямой записью в экранный буфер РК, а требуется еще эмулировать само ПЗУ РК86, причём так, чтобы рабочие ячейки (особенно 7600, адрес экр.вывода) влияли на вывод, а вывод на экран подпрограммой F809 не только выводил на экран ИРИШИ, но и дублировал символы в экранном буфере РК (76D0...7FF4). Т.е эмулятор ПЗУ РК должен не только работать по железу ИРИШИ, но и дублировать вывод на "виртуальном экране РК86".
В таких программах сложно сделать посимвольную визуализацию, проще периодическая цельно кадровая визуализация, но увы, она сильно тормозит. Теоретически при полной эмуляции работы ПЗУ и периодической визуализации всего экрана, конвертируется любая программа от РК86, причём если нет обращений в матрицу клавиш, менять в коде самой игры требуется только адреса вызовов ПЗУ F800. К игре подключается блок периодической визуализации и если игра использует раб.ячейки ПЗУ, то и блок эмулятора ПЗУ. К сожалению, это приводит к замедлению скорости прогона вдвое или втрое (это зависит от периода визуализации). Т.о в режиме Моно-80 эффективная скорость игры падает до ~0.5 МГЦ. Для не очень динамичных игр (без панорамирования) этой скорости вполне хватает.
А даже, если дизассемблирование вполне удаётся, понять саму логику работы чужой программы до конца часто не удаётся. Вот в качестве примера фрагмент программы Ксоникс. Есть около десятка версий РК-ксоникса, 90% из них по самому игровому коду идентично, видимо получены доработками из общего источника, и содержат вот такое извращение. И это работает !
Если же попытаться заменить адрес п/п F809 на адрес аналогичной процедуры в ИРИШЕ, - происходит улёт. Причём адрес п/п F809 в ИРИШЕ без расширения ОЗУ никак сделать нельзя, т.к в этой области у ИРИШИ экран. И подобные гадости в кодах РК встречаются часто, каждый крутой хотел извратиться. И только самые примитивные программы совсем новичков (которые легко узнать по наличию команд CP 0 и LD A,0, там где флаги не нужны) не содержат извратов. А первым делать джампы в середину команд (и другие гадости) придумал Билл Гейтс в Альтаир-бейсике, т.к каждое подобное извращение экономит один или два байта.
Кто-то узколобый скажет, ну вот идиот, нашёл откуда игры заимствовать, - от убогого по железу РК86. Игры сделанные на примерно том же уровне программирования есть и для ОРИОНА (а кажется, даже и для других отечественных 8-ми разрядок на КР580 тоже были игры).
К сожалению, про другие отечественные ЭВМ мне ничего неизвестно, а ОРИОН, увы, имеет экран в неудачном месте с C000, а по неудачному стечению обстоятельств экран ИРИШИ тоже занимает это адресное пространство (в режимах 2 и 3 экран с C000, в режиме 1 м.быть и с E000, но это тоже не спасает). Это трагическое обстоятельство приводит к тому, что для адаптации игр ОРИОНА требуется иметь ИРИШУ с 128 кб, что позволит переместить программу ОРИОНА в ОЗУ карты 1 или 3, где отстутствует экран ИРИШИ и не мешает прогону программы ОРИОНА. К сожалению, не каждый пользователь ИРИШИ в состоянии спаять себе платку расширения ОЗУ вручную с помощью провода МГТФ-0.03.
Во-первых, чисто текстовые программы адаптировать проще, например, полностью корректные программы вообще адаптируются за несколько минут - в полноценном исходнике удаляются EQU строки, где задаются вх.точки ПЗУ и с помощью оператора EXTRN объявляются внешними, а затем исходник транслируется с помощью Microsoft М80/L80, причём при линковке подключается модуль подпрограмм заменяющий стандартные входы ПЗУ F800.
Если бы в ИРИШЕ была эффективная скорость в 3 МГЦ (что достигается при Z80 на такте ~6 МГЦ), то все РК-игры можно было бы конвертировать за счёт периодической (3-5 раз в секунду) цельнокадровой визуализации. Трудоёмкость при таком методе раз в 50 ниже, т.к не нужен полноценный исходник, достаточно лишь за десяток минут получить читабельный листинг с помощью IDA и найти места, где стоят CALL F8XX, а далее (даже прямо в кодах) можно их отредактировать и подключить к программе код клавиатурных подпрограмм и визуализатора. Для такой адаптации программ даже ум не нужен, это может сделать любой достигший 6-ти летнего возраста и любой после 60, еще не полностью поражённый Альцгеймером или старческим маразмом.
Так вот, относительно игр от ОРИОНА, - их вручную конвертировать сложно, а вот как раз именно так, за счёт периодичекого "слива" экрана ОРИОНА в экран ИРИШИ, это сделать возможно, причём это достаточно просто. Но, увы, как указано выше, фатально неудачное положение экрана ОРИОНА всё портит. Потому более перспективным кажется адаптация таким способом программ от Львова (там экранный буфер предусмотрительно поместили на адрес 4000).
Пока для базовой тормозной ИРИШИ с приемлемым качеством работает только утомительный метод побайтовой визуализации. При этом в теле программы приходится разыскивать все команды, которые пишут в экранное ОЗУ [это обычно команды LD (HL),A и LD (DE),A ] и вставлять после них вызов подпрограммы визуализации одного символа на экране ИРИШИ. Эта подпрограмма каждый раз по адресу в РК-экране из HL рассчитывает координаты POSX, POSY, позиционирует курсор на нужное место экрана ИРИШИ и вызывает стандартную иришину подпрограмму CONOUT. Отчего символ записанный прямой записью в экранный буфер РК становится видимым на экране ИРИШИ.
Таким образом при адаптации программ с прямой записью в экран вместо команд LD (HL),A и LD (DE),A которые адресуются в экран РК достаточно заменить их на CALL SCRNHL и CALL SCRNDE соответственно, а в конец кода игры надо добавить вот такой код этих подпрограмм.
Понятно, что подпрограмма SCRNHL прогоняется в сотни раз дольше, чем команда LD (HL),A и возникает торможение. Но т.к запись в экранный буфер РК происходит относительно редко, то торможение в среднем не превышает 20%. Но например, если таким способом побайтово визуализировать цикл очистки РК-экрана (~1.75 кб), то вместо 0.05 секунды это длится 5 секунд.
Игры от РК86 легче адаптировать для карты 1 (в которой ОЗУ возникает, если в ИРИШЕ стоит расширение ОЗУ, как минимум ещё на 64 кб к базовым медленным 64 кб на плате граф.адаптера). Потому, что в РК86 ПЗУ стоит по адресу F800, а в карте 2 на этом месте экран, потому сюда и нельзя загрузить содержимое ПЗУ РК, что вызывает кучу дополнительных работ при адаптации. А в карте памяти 1 (или 3) свободны все 64 кб и ПЗУ от РК можно загрузить на F800 при сохранении видео режима на 80 символов в строке.
Получается, что ИРИША без расширения ОЗУ, как минимум до 128 кб не только по скорости, но и по удобству архитектуры ущербна и неудобна для программирования, т.к собственно её диспетчер памяти изначально и рассчитан на ОЗУ большее, чем 64К, а при всего 64К вообще не имеет смысла.
Конвертировать в несколько раз проще, чем написать аналог с нуля. Конвертировать РК-игры можно на компьютер, имеющий быстродействие большее, чем РК, имеющий 32 кб ОЗУ и подходящий формат экрана. В экране другого компьютера на который переносятся РК-игры д.быть не менее 64 символов в строке и не менее того числа строк, что использовано в игре.
В этом плане, ИРИША оказалась не очень удачной для адаптации на неё РК-игр в силу неспособности п/п-рамм её ROM-BIOS отобразить более 25-ти текстовых строк (т.к вертикальное разрешение экрана в ней всего 200 точек). Т.о, если в РК-игре число строк 30 (а это, к сожалению, все игры с псевдографикой), то адаптировать её можно лишь для ОРИОНА (т.к для него есть драйверы на 32 строки). ЮТ88 и МИКРО-80 также имеют 32 строки и потому не годятся для заимствования игр на ИРИШУ.
Ещё одним неприятным недостатком железа ИРИШИ в отношении адаптации РК-игр оказалось отличие клавиатур РК и ИРИШИ. В частности, с клавиатурой ИРИШИ невозможно узнать держат ещё клавишу или уже отпустили. Клавиатура ИРИШИ в отличие от клавиатуры PC даёт информацию только о факте нажатия, а именно в момент нажатия выдаёт ASCII-код. Удержание клавиши ни к чему не приводит и узнать о моменте отпускания клавиши нельзя.
Не знаю как в промышленной клавиатуре 15ВВВ-97-006, но в родной иришиной клавиатуре нет автоповтора (для повтора есть отдельная клавиша ПОВТ, эту тупую идею авторы заимствовали от Apple-II, т.к в 1984 в СССР ещё не было клавиатур с автоповтором). Автоповтор свидетельствует, что клавишу держат. Да автоповтор и не поможет, т.к темп автоповтора д.быть очень быстрым и автоповтор начинается лишь спустя одну секунду после начала удержания.
Идеология использования клавиатуры в РК-играх основана на возможности узнавать нажата клавиша в данный момент или нет. Там, если держишь клавишу <влево> фигурка или ракетка двигается влево, а отпустил клавишу - останавливается. А клавиатура ИРИШИ это не позволяет.
В части РК-игр (адаптированных из CP/M) использована концепция аппаратной клавиатуры. Например, в Пэкмане и Ксониксе как раз такая идеология, - раз нажал, и даже после отпускания клавиши пэкман продолжает бег в ту же сторону. А в играх сразу написанных для РК, например, в тетрисе и теннисе концепция по нажатию, - ракетка двигается пока клавиша нажата и останавливается при отпускании (потому в ИРИШЕ, чтобы было движение приходится часто-часто барабанить по клавише).
Понятно почему изобретателю Apple-II С.Возняку, где такая же клавиатура, после проблем с играми на Apple-I пришла в голову мысль в Apple-II поставить аналоговый джойстик, что также повторили авторы ИРИШИ, причём сдуру по той же самой схеме применили невыпускаемый в стране аналоговый джойстик, а не простой контактный (а в ОКЕАНЕ джойстика нет вообще).
Вообще-то проблема не в самой клавиатуре, а в схеме включения. Т.к эту же клавиатуру я ставил в РК86 читая из неё ASCII байт и бит STATUS-а через ППА. Тогда по стробу взводился доп.триггер, как флаг, что было нажатие. Но т.к данные в порту не защёлкивались, то считывать их можно было только пока клавиатура выдаёт данные, о чём свидельствует строб. Т.о, если триггер взведён, но сигнал строб (читаемый по биту D7) уже убран, это значит, что нажатие было, но данные потеряны.
Так вот такая схема включения, в которой сигнал строб клавиатуры читается, позволяет использовать клавиатуру по идеологии клавиатуры РК86. А та схема включения клавиатуры, что реализована в ИРИШЕ больше рассчитана на использование прерываний, но они как раз и не используются (т.к это сложнее, да и не особо надо).
Клавиатура ИРИШИ выдаёт и ИРИША использует только 7-ми битовый код (на выходе п/п-мы опроса с байтом считанным из порта 4 делается AND $7F). Потому можно доработать схему включения так, чтобы по биту D7 читался строб клавиатуры. Это установка однобитового буфера на выход 589 ИР12 через который по биту D7 из порта 4 будет читаться строб, что позволит знать держат клавишу или уже отпустили. Это позволяет использовать клавиатуру по идеологии РК86, а в ROM-BIOS ИРИШИ удобно добавить п/п-мму XF81B.
Без такой доработки в адаптированных без смены логики РК-играх приходится с большой частотой барабанить по клавишам, чтобы имитировать удержание клавиши. Фигурка на одно нажатие делает только один шаг, а затем останавливается. Чтобы этого избежать, надо переделывать и сам алгоритм работы с клавиатурой в РК-программе. Это увеличивает трудоёмкость и для некоторых игр ухудшает играбельность.
Но бОльшей проблемой является то, что для конверсии РК-игры нужен полноценный исходник. Получить просто текст программы для изучения легко, - с помощью IDA это делается, в зависимости от объёма кода, всего за 5-20 минут. Но вот получить полноценный исходник, т.е текст в котором можно делать вставки, менять код, сдвигать фрагменты и изменять адрес размещения всей программы, получить для некоторых программ на порядок сложнее.
Часто на это уходит до 10 часов, а иногда получить исходник игры, который можно менять, вообще не удаётся, т.к не удаётся с времязатратой в рамках разумного разобраться в программе и проще написать свою полностью новую программу, чем разбираться в чужой.
Понятно, что легко конвертируются корректные программы, типа бейсик, ассемблер, текстов редактор, форт и шахматы. Т.е те программы, что никак не лезут в железо или раб.ячейки ПЗУ. Но РК-игры, даже простейшие, работают по железу и в них недостаточно заменить вызовы ПЗУ F800.
Если программа использует только прямое обращение в экран, то такую программу адаптировать намного проще, чем программу, которая меняет рабочие ячейки ПЗУ F800 и программу которая выводит в экран и напрямую и стандартными подпрограммами ПЗУ и к тому же ещё читает из экрана.
В этом случае уже недостаточно перехватывать и визуализировать команды с прямой записью в экранный буфер РК, а требуется еще эмулировать само ПЗУ РК86, причём так, чтобы рабочие ячейки (особенно 7600, адрес экр.вывода) влияли на вывод, а вывод на экран подпрограммой F809 не только выводил на экран ИРИШИ, но и дублировал символы в экранном буфере РК (76D0...7FF4). Т.е эмулятор ПЗУ РК должен не только работать по железу ИРИШИ, но и дублировать вывод на "виртуальном экране РК86".
В таких программах сложно сделать посимвольную визуализацию, проще периодическая цельно кадровая визуализация, но увы, она сильно тормозит. Теоретически при полной эмуляции работы ПЗУ и периодической визуализации всего экрана, конвертируется любая программа от РК86, причём если нет обращений в матрицу клавиш, менять в коде самой игры требуется только адреса вызовов ПЗУ F800. К игре подключается блок периодической визуализации и если игра использует раб.ячейки ПЗУ, то и блок эмулятора ПЗУ. К сожалению, это приводит к замедлению скорости прогона вдвое или втрое (это зависит от периода визуализации). Т.о в режиме Моно-80 эффективная скорость игры падает до ~0.5 МГЦ. Для не очень динамичных игр (без панорамирования) этой скорости вполне хватает.
А даже, если дизассемблирование вполне удаётся, понять саму логику работы чужой программы до конца часто не удаётся. Вот в качестве примера фрагмент программы Ксоникс. Есть около десятка версий РК-ксоникса, 90% из них по самому игровому коду идентично, видимо получены доработками из общего источника, и содержат вот такое извращение. И это работает !
Если же попытаться заменить адрес п/п F809 на адрес аналогичной процедуры в ИРИШЕ, - происходит улёт. Причём адрес п/п F809 в ИРИШЕ без расширения ОЗУ никак сделать нельзя, т.к в этой области у ИРИШИ экран. И подобные гадости в кодах РК встречаются часто, каждый крутой хотел извратиться. И только самые примитивные программы совсем новичков (которые легко узнать по наличию команд CP 0 и LD A,0, там где флаги не нужны) не содержат извратов. А первым делать джампы в середину команд (и другие гадости) придумал Билл Гейтс в Альтаир-бейсике, т.к каждое подобное извращение экономит один или два байта.
- Спойлер:
L0056: LD A,E
AND L
LD B,A
LD A,D
AND H
OR B
LD A,8
JP PO,L0061+1
L0061: LD C,7 ; 07 это код RLC
L0063: CALL COUTC ; CD 09 F8
DEC A
JP NZ,L0063+2 ; F8 это код RET M
RET
Кто-то узколобый скажет, ну вот идиот, нашёл откуда игры заимствовать, - от убогого по железу РК86. Игры сделанные на примерно том же уровне программирования есть и для ОРИОНА (а кажется, даже и для других отечественных 8-ми разрядок на КР580 тоже были игры).
К сожалению, про другие отечественные ЭВМ мне ничего неизвестно, а ОРИОН, увы, имеет экран в неудачном месте с C000, а по неудачному стечению обстоятельств экран ИРИШИ тоже занимает это адресное пространство (в режимах 2 и 3 экран с C000, в режиме 1 м.быть и с E000, но это тоже не спасает). Это трагическое обстоятельство приводит к тому, что для адаптации игр ОРИОНА требуется иметь ИРИШУ с 128 кб, что позволит переместить программу ОРИОНА в ОЗУ карты 1 или 3, где отстутствует экран ИРИШИ и не мешает прогону программы ОРИОНА. К сожалению, не каждый пользователь ИРИШИ в состоянии спаять себе платку расширения ОЗУ вручную с помощью провода МГТФ-0.03.
Во-первых, чисто текстовые программы адаптировать проще, например, полностью корректные программы вообще адаптируются за несколько минут - в полноценном исходнике удаляются EQU строки, где задаются вх.точки ПЗУ и с помощью оператора EXTRN объявляются внешними, а затем исходник транслируется с помощью Microsoft М80/L80, причём при линковке подключается модуль подпрограмм заменяющий стандартные входы ПЗУ F800.
Если бы в ИРИШЕ была эффективная скорость в 3 МГЦ (что достигается при Z80 на такте ~6 МГЦ), то все РК-игры можно было бы конвертировать за счёт периодической (3-5 раз в секунду) цельнокадровой визуализации. Трудоёмкость при таком методе раз в 50 ниже, т.к не нужен полноценный исходник, достаточно лишь за десяток минут получить читабельный листинг с помощью IDA и найти места, где стоят CALL F8XX, а далее (даже прямо в кодах) можно их отредактировать и подключить к программе код клавиатурных подпрограмм и визуализатора. Для такой адаптации программ даже ум не нужен, это может сделать любой достигший 6-ти летнего возраста и любой после 60, еще не полностью поражённый Альцгеймером или старческим маразмом.
Так вот, относительно игр от ОРИОНА, - их вручную конвертировать сложно, а вот как раз именно так, за счёт периодичекого "слива" экрана ОРИОНА в экран ИРИШИ, это сделать возможно, причём это достаточно просто. Но, увы, как указано выше, фатально неудачное положение экрана ОРИОНА всё портит. Потому более перспективным кажется адаптация таким способом программ от Львова (там экранный буфер предусмотрительно поместили на адрес 4000).
Пока для базовой тормозной ИРИШИ с приемлемым качеством работает только утомительный метод побайтовой визуализации. При этом в теле программы приходится разыскивать все команды, которые пишут в экранное ОЗУ [это обычно команды LD (HL),A и LD (DE),A ] и вставлять после них вызов подпрограммы визуализации одного символа на экране ИРИШИ. Эта подпрограмма каждый раз по адресу в РК-экране из HL рассчитывает координаты POSX, POSY, позиционирует курсор на нужное место экрана ИРИШИ и вызывает стандартную иришину подпрограмму CONOUT. Отчего символ записанный прямой записью в экранный буфер РК становится видимым на экране ИРИШИ.
Таким образом при адаптации программ с прямой записью в экран вместо команд LD (HL),A и LD (DE),A которые адресуются в экран РК достаточно заменить их на CALL SCRNHL и CALL SCRNDE соответственно, а в конец кода игры надо добавить вот такой код этих подпрограмм.
- Спойлер:
.tpos MACRO Y,X
defb 1BH,59H,32+Y,32+X
ENDM
; ------------------------------------------
.jmsg MACRO ADDR
LD HL,ADDR
JP MSSG
ENDM
; ----------------------------------------------
SCRNDE: EX DE,HL
CALL SCRNHL
EX DE,HL
RET
; ----------------------------------------------
SCRNHL: LD (HL),A
SCREEN: PUSH HL
PUSH DE
PUSH BC
; PUSH AF ; обычно сохранять А не надо
LD C,A
LD DE,-77C2H +8 ; +8 для центровки
ADD HL,DE
LD B,-1
LD DE,-78
JJJ_01: INC B
ADD HL,DE
JP C,JJJ_01
LD DE,78
ADD HL,DE
LD H,L
LD L,B
CALL POS_HL
CALL CONOUT
; POP AF
POPREG: POP BC
POP DE
POP HL
RET
;--------------------------------------------
POS_HL: PUSH DE
LD DE,2020H
ADD HL,DE
POP DE
LD (TPOS+2),HL
.jmsg TPOS
TPOS: .tpos 0,0
defb 1BH,61H,0 ; ESC,61 - отключить курсор
Понятно, что подпрограмма SCRNHL прогоняется в сотни раз дольше, чем команда LD (HL),A и возникает торможение. Но т.к запись в экранный буфер РК происходит относительно редко, то торможение в среднем не превышает 20%. Но например, если таким способом побайтово визуализировать цикл очистки РК-экрана (~1.75 кб), то вместо 0.05 секунды это длится 5 секунд.
Игры от РК86 легче адаптировать для карты 1 (в которой ОЗУ возникает, если в ИРИШЕ стоит расширение ОЗУ, как минимум ещё на 64 кб к базовым медленным 64 кб на плате граф.адаптера). Потому, что в РК86 ПЗУ стоит по адресу F800, а в карте 2 на этом месте экран, потому сюда и нельзя загрузить содержимое ПЗУ РК, что вызывает кучу дополнительных работ при адаптации. А в карте памяти 1 (или 3) свободны все 64 кб и ПЗУ от РК можно загрузить на F800 при сохранении видео режима на 80 символов в строке.
Получается, что ИРИША без расширения ОЗУ, как минимум до 128 кб не только по скорости, но и по удобству архитектуры ущербна и неудобна для программирования, т.к собственно её диспетчер памяти изначально и рассчитан на ОЗУ большее, чем 64К, а при всего 64К вообще не имеет смысла.
barsik- Ветеран
- Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия, СПб
Похожие темы
» Использование ЯВУ для разработки программ для РК86
» ПО. ПЭВМ "Ириша". CP/M для ИРИШИ.
» ПЭВМ "Ириша-2020".
» ПО. ПЭВМ "Ириша". Программирование для ИРИШИ на PL/M.
» ПО. ПЭВМ "Ириша". Программирование для ИРИШИ на ассемблере.
» ПО. ПЭВМ "Ириша". CP/M для ИРИШИ.
» ПЭВМ "Ириша-2020".
» ПО. ПЭВМ "Ириша". Программирование для ИРИШИ на PL/M.
» ПО. ПЭВМ "Ириша". Программирование для ИРИШИ на ассемблере.
RUЭВМ :: Отечественные ЭВМ, ПЭВМ и МВК :: ПЭВМ и МВК "Ириша", "Ириша-Л" , "Ириша-М" :: Программное обеспечение ПЭВМ "Ириша"
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения