Ну что Вы? Это Вы пошутили.Сообщение от Denn
И мне и Вам прекрасно известно, что в ПЗУ РК86 поддержан только один искейп-код 1B,59, других нет. Я привёл код для вывода символов, т.к об этом был вопрос. В любой приличной машине, со всеми кодами символов (0-255), есть соответствующий искейп-код.
Вывести управляющий код как символ в РК86 корректным образом нельзя. Именно поэтому в знаконераторе (стандартном фонте) РК86 на месте управляющих кодов пустоты.
Вообще-то это явный просчёт авторов РК86, т.к при возможности иметь в фонте лишь 128 кодов, глупо терять кучу символов. Например, могли бы вместо пустот добавить в фонт сиволы 'Ё' и 'Ъ'. Кстати тратить код 0 впустую также глупо, т.к пробел делает то же самое. Замечу, что ввести теперь вместо "пустышек" в фонте какие-либо символы мы уже не можем, т.к такие пустые знакоместа используются как маркированные пустоты в программах, и если в фонте их заменить на какой-либо полезный символ, то в многих играх на экране возникнет "мазня".
Я недавно чуть "уплющил" код ПЗУ РК86. Для КР580 выиграл 20 байтов, а при удалении бесполезной директивы X и удалении в директиве G стоп-точки, освобождается ещё 80 байт. Ну а для ПЗУ РК86 на Z80 осовобождается целых 200 байт. В 20 байтов, а тем более в 100 байтов, засунуть один дополнительный искейп-код нетрудно. Я могу это сделать без проблем за 15 минут. Ещё проще ввести флаг игнорирования упр.кодов. Тогда при установке этого флага в неноль, все символы 0...127 будут печатными. Это расход 7-ми байтов в ПЗУ.
Что за дамп? Мне этот дамп следует ввести и дизассемблировать?
Что за симулятор? Наверное, имеется ввиду эмулятор РК86. Судя по вражеским сайтам, под симулятором в данной теме обычно понимают эмулятор только процессора, например 6502, непривязанный к архитектуре конкретной ЭВМ. В частности, эмуляторы CP/M по такой терминологии являются одновременно симуляторами, т.к тоже не привязан к конкретной ЭВМ. Симулятор обычно имеет отладчик и даже иногда интегрированную среду (т.е встроенный удобный редактор тестов с подстветкой и поиском синтаксических ошибок и возможность трансляции и запуска) и служит для обучения и проверки программ не привязанных к конкретным машинам. А эмулятор уже привязан к конкретной машине и служит для использования чужих программ на кросс-ЭВМ.Сообщение от Denn
Если Вы делаете универсальную программу РК/ОРИОН, то Вам в любом случае придётся делать определение типа машины. Т.к экранные координаты РК86 из-за его извращённого использования ВГ75 приходится пересчитывать (добавлять +3 и +8 к позициям POSY, POSX). Я с этим столкнулся, когда стал делать эмулятор РК86 и захотел перетранслировать на РК некоторые свои текстовые программки от ОРИОНА. Вместо универсальных программ я использовал условную трансляцию.Сообщение от Denn
Например, в текстовом редакторе изменяется только работа с координатами POSX,POSY и подпрограммы ролика экрана вверх-вниз (что неизбежно для приличного экранного редактора, т.к перевыводить весь экран - тормознуто визуально, тогда как ролик, особенно стеком, - мгновенен). Так что вполне можно делать программы для РК86 и при необходимости перетранслировать их на ОРИОН и наоборот. А вот, чтобы сделать универсальную программу, придётся определять тип машины, т.к даже работа стандартных подпрограмм отличается.
Только, когда будете писать код определения РК86 и ОРИОНА, не опирайтесь на код ПЗУ, как делали некоторые авторы универсального софта для РК-платформы. В частности, программы МИКРОШИ, где программы делаются так, чтобы одна и та же программа работала и на МИКРОШЕ и на РК86. В МИКРОШЕ по адресу F800 стоит команда отличная от JMP F836H, что и используется как критерий. Если тут стоит код JMP F836H, то считается, что это РК86 и программа соответственно перенастривается.
Если Вы делаете программу для РК-платформы, учитывайте наличие кучи полу-клонов РК86. Они полу-клоны, потому что у них ПЗУ, его служебные ячейки, адреса В/У и экрана - разные.
Грамотно, хотя и сложно, определять тип машины по адресам портов. Размер ОЗУ 16 или 32 кб определяйте по текущему при старте программы стеку, а не по коду в ПЗУ. Т.к ПЗУ РК должно иметь возможность меняться. Можно определять тип РК-клона и по служебным ячейкам ПЗУ, в частности по абсолютным экранным координатам и по POSX,POSY (они во всех клонах имеют разные адреса, но работа ячеек одинаковая, т.к код ПЗУ нагло передирался от РК86).
Т.е, для детектирования можно использовать единственный искейп-код РК и клонов. Можно выдавать на консоль код 1B,59 и позиционировать курсор куда-то. А затем проверять ячейки "абсолютный экранный адрес" (в РК 7600) и координаты POSX,POSY (в РК 7602). Или же очищать экран кодом 1FH, что одновременно позиционирует курсор и выводить символ 'A' и затем искать его в началах экранов разных клонов РК86.
Если наплевать на клоны РК86, то отличить РК86 ещё проще. Для этого используется разница в работе в п/п-мы запроса положения курсора. Которая в РК86 и в ОРИОНЕ работает по разному.
В отличие от ОРИОНА, в РК86 несбалансированные подпрограммы позиционирования и запрос положения курсора. Логично, чтобы те же координаты, что задаются при позиционировании, возвращались и подпрограммой "Запрос положения курсора" (ASKCUR: F81E). Так и сделано в ОРИОНЕ.
Но в РК86 подпрограмма "Запрос положения курсора" (F81E) выдаёт значение координат, которое отличается от координат заданных при позиционировании на константы +8 +3.
Поэтому, чтобы узнать, что мы на РК86, достаточно куда-то позиционировать курсор с помощью управляющих кодов 1B,59, а затем вызвать п/п-му "Запрос положения курсора" (F81E). Если возвращённое число равно заданным координатам, значит мы на ОРИОНЕ. В противном случае - это какой-то из клонов РК86.




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