Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 19

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

  1. #1
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    900
    Поблагодарили
    592 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

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

    Вопрос к знатокам программирования РАДИО-86РК. Как вывести на экран символ псевдографики с кодом 07h (правый верхний уголок) ?



    Вывод кода 07h стандартными подпрограммами Монитора (F809h и F818h) выводит звуковой сигнал, что в общем-то логично.
    А как вывести этот чёртов уголок?!
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

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

  3. #2
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,404
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    598
    Поблагодарили
    444 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ПДП.

  4. #3
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    900
    Поблагодарили
    592 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Т.е. через стандартные п/п Монитора совсем никак? (пишу ПО, которое обязано работать на совершенно разных железках, через стандартные средства BIOS, напрямую лазать в экран низя).
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  5. #4
    Guru Аватар для tnt23
    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,634
    Спасибо Благодарностей отдано 
    392
    Спасибо Благодарностей получено 
    78
    Поблагодарили
    63 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Записать в нужную ячейку экрана код 07?

  6. #5
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,404
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    598
    Поблагодарили
    444 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    tnt23, Я уже это предложил, но ТС сказал низзя.

  7. #6
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    900
    Поблагодарили
    592 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А нет ли случайно какой-нибудь магии через 1Bh+<чего-то там>+07h ?
    Ради одного уголка писать код определения платформы и вычисления адреса экранной области как-то бессмысленно...
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  8. #7
    Banned
    Регистрация
    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.

  9. #8
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    900
    Поблагодарили
    592 сообщений
    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.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  10. #9
    Banned
    Регистрация
    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.

  11. #10
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    900
    Поблагодарили
    592 сообщений
    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.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

Страница 1 из 2 12 ПоследняяПоследняя

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

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

Эту тему просматривают: 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

Ваши права

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