User Tag List

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

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

Древовидный режим

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

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

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

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

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

Ваши права

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