User Tag List

Показано с 1 по 10 из 19

Тема: Как на РК вывести символ с кодом 07h ?

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В драйверах вывода многих компьютеров (не только ОРИОНА) используется искейп-последовательность 1B,01,код, которая позволяет выводить любой код как печатаемый символ (игнорируя управляющие способности кода). В драйверах С.Коровкина и во всех моих драйверах, где есть символы с кодом менее 20H, этот код был поддержан. Этот упр.код есть также в драйверах других авторов, но конкретно у кого, уже не помню.

    Код:
    .ESC,01,BYTE - вывод графических символов с кодами 0..1F
    .01,BYTE - полный аналог ESC,01,BYTE (вывод кодов до 20H)
    
    				   01,BYTE
    				 ~~~~~~~~~~~
       Этот код новый. Старый код ESC,01,BYTE есть во многих старых (моих  и
    чужих) драйверах. Но код 01,BYTE - новый.  Этот код есть во многих маши-
    нах - АТМ-Турбо,  Ямаха и др.  Это уже не ESC-код,  а единственный  код,
    как-бы образующий новую управляющую последовательность. Смысл его введе-
    ния в том, чтобы упростить вывод псевдографики с кодами 0...1F. Теорети-
    чески при использовании этого кода с более высокими символами от  20  до
    FF (которые выводятся на консоль и без префиксирования),  вместо базово-
    го фонта должен был бы включаться альтернативный (дающий еще 224 изобра-
    жения псевдографики). Однако в моих драйверах этого нет.
    Во вложении - доки к драйверам (~1996), где описаны все упр.коды моих драйверов для всех ДОС.
    Вложения Вложения
    Последний раз редактировалось barsik; 10.02.2017 в 15:54.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,234
    Спасибо Благодарностей отдано 
    490
    Спасибо Благодарностей получено 
    989
    Поблагодарили
    641 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    barsik, увы, не прокатило По крайней мере в симуляторе. Полагаю, на реале будет тоже самое.



    Не высекается уголок

    Боевая задача - использовать родные драйвера, которые в ПЗУ Монитора.
    Вот тут в доках про 1Bh+01h+<00..1Fh> нету - http://retrocomputer.ru/RK/DOC/CTRLCODES.html
    Последний раз редактировалось Denn; 10.02.2017 в 13:38.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  4. #3

    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 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-ми байтов в ПЗУ.

    Что за дамп? Мне этот дамп следует ввести и дизассемблировать?

    Цитата Сообщение от Denn
    Увы не прокатило, по крайней мере, в симуляторе.
    Что за симулятор? Наверное, имеется ввиду эмулятор РК86. Судя по вражеским сайтам, под симулятором в данной теме обычно понимают эмулятор только процессора, например 6502, непривязанный к архитектуре конкретной ЭВМ. В частности, эмуляторы CP/M по такой терминологии являются одновременно симуляторами, т.к тоже не привязан к конкретной ЭВМ. Симулятор обычно имеет отладчик и даже иногда интегрированную среду (т.е встроенный удобный редактор тестов с подстветкой и поиском синтаксических ошибок и возможность трансляции и запуска) и служит для обучения и проверки программ не привязанных к конкретным машинам. А эмулятор уже привязан к конкретной машине и служит для использования чужих программ на кросс-ЭВМ.

    Цитата Сообщение от Denn
    писать код определения платформы и вычисления адреса экранной области как-то бессмысленно...
    Если Вы делаете универсальную программу РК/ОРИОН, то Вам в любом случае придётся делать определение типа машины. Т.к экранные координаты РК86 из-за его извращённого использования ВГ75 приходится пересчитывать (добавлять +3 и +8 к позициям POSY, POSX). Я с этим столкнулся, когда стал делать эмулятор РК86 и захотел перетранслировать на РК некоторые свои текстовые программки от ОРИОНА. Вместо универсальных программ я использовал условную трансляцию.

    Например, в текстовом редакторе изменяется только работа с координатами 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.
    Последний раз редактировалось barsik; 10.02.2017 в 19:38.

  5. #4

    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,234
    Спасибо Благодарностей отдано 
    490
    Спасибо Благодарностей получено 
    989
    Поблагодарили
    641 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от barsik Посмотреть сообщение
    Ну что Вы? Это Вы пошутили.

    И мне и Вам прекрасно известно, что в ПЗУ РК86 поддержан только один искейп-код 1B,59, других нет.
    Отнюдь. Я грубо говоря вчера узнал что такое РК, да и то - по-наслышке. Знал бы, тему не создавал.


    Цитата Сообщение от barsik Посмотреть сообщение
    Вывести управляющий код как символ в РК86 корректным образом нельзя. Именно поэтому в знаконераторе (стандартном фонте) РК86 на месте управляющих кодов пустоты.
    В итоге я тоже пришёл к этой мысли.


    Цитата Сообщение от barsik Посмотреть сообщение
    Я недавно чуть "уплющил" код ПЗУ РК86. Для КР580 выиграл 20 байтов, а при удалении бесполезной директивы X и удалении в директиве G стоп-точки, освобождается ещё 80 байт. Ну а для ПЗУ РК86 на Z80 осовобождается целых 200 байт. В 20 байтов, а тем более в 100 байтов, засунуть один дополнительный искейп-код нетрудно. Я могу это сделать без проблем за 15 минут. Ещё проще ввести флаг игнорирования упр.кодов. Тогда при установке этого флага в неноль, все символы 0...127 будут печатными. Это расход 7-ми байтов в ПЗУ.
    Это здесь к чему?


    Цитата Сообщение от barsik Посмотреть сообщение
    Что за симулятор?
    http://bashkiria-2m.narod.ru/index/emul/0-8


    Цитата Сообщение от barsik Посмотреть сообщение
    Если Вы делаете универсальную программу РК/ОРИОН, то Вам в любом случае придётся делать определение типа машины. Т.к экранные координаты РК86 из-за его извращённого использования ВГ75 приходится пересчитывать (добавлять +3 и +8 к позициям POSY, POSX).
    Если я пользуюсь стандартными п/п Монитора (а я очень хочу пользоваться только ими!), то никаких отличий при позиционировании курсора на экране нет: что в РК, что в том же Орионе оно работает одинаково. Если речь про математику ПДП, то это не интересно.


    Цитата Сообщение от barsik Посмотреть сообщение
    Только, когда будете писать код определения РК86 и ОРИОНА...
    Здесь тема только про вывод 07h.
    Последний раз редактировалось Denn; 10.02.2017 в 17:03.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  6. #5

    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn
    Если речь про математику ПДП...
    Не знаю что за математика ПДП. Или Вы так обзываете наглые программы, которые нагло лезут в экранное ОЗУ. ПДП здесь не при чём. Программисту для чисто текстового режима не требуется знать о "железе", о микросхеме ПДП ВТ57, так как, каким способом символы визуализируются нас не волнует. Если Вы хотите делать универсальные программы РК-ОРИОНА, то Вам доступна всего одна функция, реализуемая искейп-кодом 1B,59. Таким образом Ваше нежелание определять тип машины, обрекает на усложнённые или убогие программы (убогие, в смысле без окон, а вывод рамок, как я понял, нужен для обрамления окон).

    Поясняю. Подпрограммы F81E (запрос координат курсора) в РК и ОРИОНЕ отличаются, так что в универсальной программе это Вы использовать не сможете (посмотрите мой предыдущий пост). В РК86 есть п/п-мма RD_SYM (F821), позволяющая считывать символ с позиции курсора. Но в ОРИОНЕ такой подпрограммы нет. Таким образом чтобы в корректной и универсальной программе иметь окна, или придётся перевыводить весь экран заново по закрытию окна, или же иметь в ОЗУ свою текстовую копию экрана, что позволит по закрытию окна восстановить экран под окном.

    Кстати, без определения типа клона РК86, Вы не сможете выводить цвет. Это ещё один довод в пользу определения типа машины для универсальных программ.


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


    Цитата Сообщение от Denn
    от идеи использовать псевдографику отказываюсь
    Напрасно.

    Pyk предложил отличный вариант решающий все Ваши проблемы. Но надо только определить тип машины РК+клон или ОРИОН. И если это РК или РК-клон, то просто позиционируете курсор на правый угол окна и из "ячейки абсолютного экранного адреса" 7600 (или E000, если это Апогей) считываете этот адрес и затем кладете по этому адресу код 7. И простейшим способом получается универсальная программа. Кстати, это одновременно способ "вычисления" экранного адреса по координатам.

    Правда, при отказе от псевдографики, Ваша программа смогла бы работать и на других ЭВМ с входами в области F800. Интересно посмотреть полный список всех отечественных ЭВМ, что имеют ПЗУ F800 (тогда можно делать программы сразу для всех них).

    Извиняюсь, что этот пост "вышел" уже после закрытия темы, но начал я его набирать до этого, пару часов назад. Если это так уж фатально, то модераторам следует удалить этот пост.
    Последний раз редактировалось barsik; 13.02.2017 в 05:20.

  7. #6

    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,234
    Спасибо Благодарностей отдано 
    490
    Спасибо Благодарностей получено 
    989
    Поблагодарили
    641 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    barsik, идея с практически халявным обнаружением адреса экранной области целевого символа и записью кода прямо в экран хороша, но не подходит.
    К сожалению, я изначально не совсем корректно сформулировал задачу, сказав что мне это нужно на РК. Как раз основная задача - вывод не на конкретном ПК, а на разных машинах, без какой-либо привязки к аппаратной реализации вывода символов, используя только стандартные подпрограммы.
    У одного РК два варианта ОЗУ, т.е. две разных реализации экрана! Если я для всех 8-биток буду подстраиваться под железо, то код вывода уголка получится больше самой программы, а это уже бессмыслица. Оно не стоит того.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Помогите вывести видео со спека
    от NehakeR в разделе Несортированное железо
    Ответов: 29
    Последнее: 12.03.2023, 09:22
  2. Как правильно вывести AY, бипер и TAPE со Spectrum +2 Black (ISSUE 4) ?
    от ZX_NOVOSIB в разделе Зарубежные модели
    Ответов: 23
    Последнее: 24.06.2014, 08:05
  3. СИМВОЛ
    от D-M в разделе Клоны на ПЛИС, МК и БМК
    Ответов: 11
    Последнее: 22.07.2006, 18:26
  4. Быстро вывести число 0-255 на экран
    от Aprisobal в разделе Программирование
    Ответов: 7
    Последнее: 26.01.2005, 08:05

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •