1 Отредактировано Voldemar0 (24-04-2024 07:04)

Тема: dos33c2

Привет!

Накопился большой пакет обнаруженных проблем по dos33c2 и как раз сейчас есть компактная возможность их подправить.

Здесь будет немного информации об этом. Сейчас готовится версия 2.09. Где-то, к концу месяца, надеюсь, она возникнет.
В основном это исправление ошибок и мелкие правки-дополнения-изменения в разных местах.
Фундаментально ничего не меняется.

Более-менее крупные дополнения:
1) Просмотрщик документов редактора "Диалект". Таких документов не много и он как-то выпал из моего поля зрения. Но добавить его не очень сложно, так что пусть будет.
2) Просмотр файлов в видеоформате T40 - это эпловское, но пусть будет.
3) Импорт и экспорт текстовых файлов из/в UTF-16 и UTF-8. Это дополнительная функция для всех целевых систем, где работает dos33c2.
4) Поддержка расширения "VR" для графических файлов (файлов видеопамяти).

Текущий History:

Spoiler

2009:

1.999    Выпущена впервые

1.9999    Ошибка в импорте B-файлов
    Мелкая ошибка в декодере Бейсика
    Ошибка в записи крупных файлов ( > $7A блоков )
        Ошибки в режимах доступа к файлом
    Ошибки в палитре 4-х цветных рисунков (256x256x4) и цветном текстовом режиме (32x32x8)
    Перечитывание панелей после вызова файл-менеджера
    Увеличен буфер текста
    Мелкая ошибка в сравнении текстовых файлов
    Добавлено сообщение "буфер вьювера переполнен" (вместо runerror)
    Добавлено подтверждение удаления, если среда == HostFS
    Иногда не сохранялись изменения после hex-редактора
    Проверка наличия среды перед чтением каталога, поиск следующей при отсутствии
    Ошибка палитры в Picler-файлах

2.0    Экран hex-редактора не обновляется при движении курсора (если не нужен сдвиг и выключен режим выделения)
    Добавлено: Ctrl-T - просмотр Д-файлов ТОР
    Добавлено: Ctrl-Y - просмотр И-файлов TED
    Мелкая ошибка в aim_800-декодере (приводила к зависанию иногда)
    Ошибка в сравнении образов: "нет отличий.." выводилось в случае, если в одном из образов был сбой в чтении сектора, а в другом (на этом же адресе) - нет
    Ошибка в просмотрщиках текстов приводила к обрезке строк по 255-й символ

2.01    Критическая ошибка: в некоторых случаях можно было удалить непустой BTK-каталог (при групповом удалении)

2010:

2.02    Ошибка в кодировщике символов win -> agat
    Глюк в обновлении экрана в HEX-редакторе/вьювере
    Добавлено "заполнение выделения нулями" в HEX-редакторе и "создание T/S-пары"
    Глюк в установке выбранной области в HEX-редакторе/вьювере

2.03    Некоторые исправления для совместимости с Linux
    Чтение текстов Word Master

2012:

2.04    В *nix версии файловый менеджер теперь вызывается с передачей путей для обоих панелей
    Исправлена ошибка: "Информация об объекте" неправильно сообщала о файлах-образах
    ФРГ mousegraf определяется по более мягким критериям
    Небольшие изменения (mwrite.AnsiString -> String), которые, возможно, избавят от некоторых тормозов
    Файлы Picler опознаются по более мягким критерями
    Не всегда работали комбинации Ctrl- с буквой под Windows
    Добавлена функция расширения каталога по запросу пользователя (не при записи файлов)
    Добавлена возможность выбора группы секторов на карте диска и некоторые операции над выбранной группой
    Текстовый просмотрщик неправильно выбирал цвет верхней строки (а иногда и других)
    Исправлена справка HEX-редактора
    Небольшие изменения в AIM-декодере
    Автоопределение файлов редактора ТОР
    Ошибка в списке поддерживаемых форматов ("Предполагаемый формат:")
    Не заполнялось поле "тип среды" для записей каталога при чтении образов
    Просмотр текстовых файлов Apple ][

2.05    Ошибка в процедурах восстановления удалённых файлов могла приводить к падению программы, если файловая система была повреждена
    Мелкое дополнение в декодере Basic-программ
    Теперь "очистка среды" обнуляет также последние неиспользуемые записи в последнем используемом секторе каталога
    Пара ошибок в AIM-декодере
    Добавлен просмотрщик программ Apple Integer Basic
    Ошибка в проверке на зацикленность каталога
    Подправлена и улучшена схема начальных путевых имён панелей (чтобы при взаимных переходах между dos33 и файловым менеджером пути сохранялись)
    Мелкая ошибка в Basic-декодере (вылет, если объявленный размер программы < 2 байт).
    Добавлены структурирующие отступы в Basic-декодер (после IF и FOR)

2013:

2.06    Добавлено заполнение константой в HEX-редакторе сразу всего ближайшего блока/сектора
    Небольшая ошибка в сравнивалке текстовых файлов (если последняя строка не была закрыта 8D, она не учитывалась в сравнении)
    ? в винде правильно сделан подъём графического окна ?

2014:

    Поддержка несжатых файлов редактора "Документ"
    Добавлена функция "восстановить файлы из всех брошенных TSL" - 'R' (в редакторе образа)

2015:

    Небольшая ошибка в декодере nib140 (падала, если в секторе были GCR-ошибки)

2.07    Добавлен механизм переключения палитр в графическом просмотрщике (была только цветная, теперь есть ещё полутон)
    Добавлен просмотр эпловской графики Lo-Res и Double Hi-Res Color/Mono (вся эпловская графика - только в B-файлах)
    При переходах между host-каталогами и входами/выходами в/из образов не вызывается перечитывание противоположной панели.
      Это уменьшает число повторых сообщений об ошибках противоположной панели.
      Полное перечитывание панелей происходит только при переходах в BTK-подкаталоги (так как такой переход модифицирует образ).
    Переписана механника вывода картинки в винде. Добавлено сохранение BMP-шки там же.

2018:

2.08    При просмотре бейсик-программ различаются русские буквы, они выводятся своим цветом
    При просмотре бейсик-программ "NEXT x,y" уменьшает отступы соответственно числу переменных
    Увеличен максимальный размер длинных переменных в Basic-распаковщике
    Изменил адреса загрузки в процедуре импорта B- и К- файлов (было $1800, стало $2800 для К и $1900 для B).
    Добавил выбор шрифта при просмотре текстов в формате видеопамяти
    Добавил просмотрщик П-файлов
    Если свободного пространства на HostOS сильно много, при выводе оно чуточку уменьшается (до High(LongInt))

2019:
    Просмотр в формате видеопамяти для текстовых режимов урезан до матрицы 7x8 (вместо 8x8)
    Исправлена странная ошибка в бейсик-декодере. Зачем-то я оставил закомментированной одну нужную строку в исходнике
    Исправлена мелкая ошибка в бейсик-декодере Integer Basic'a: он падал при некоторых повреждениях бейсик-программы
    Добавлено предупреждение в бейсик-декодере: "Таблицы длинных переменных попадает на текст программы !"
    Мелкие правки для совместимости с Linux

2024:

2.09    Изменён критерий зацикленности каталога - проверка стала более быстрой.
    Зацикленность каталога проверяется также при очистке среды - это позволило избавиться от зависаний процедуры очистки.
    В блоке информации о выбранном объекте:
        - "Тип файла" теперь, помимо буквы, содержит численное значение поля lock&type, фактически хранимое в каталоге.
        - "Скрытый" - добавлен комментарий "(ALV DOS)" (это поле влияет на поведение команды CATALOG только в этой ОС).
        - "Агат-имя" дублируется в hex, причём непечатаемые символы будут помечатся красным цветом.
          Важно: для разных hostOS, в которых работает dos33c2, список непечатаемых символов различается.
          То же имеет место и для агатовских ОС (например: Школьница имеет больше непечатаемых символов, чем DOS).
    В процедуры конвертации кодировок агат<->hostOS добавлены буквы ё и Ё.
        Теперь эти буквы должны поддеживаться во всех операциях dos33c2 и под всеми целевыми системами.
    При сравнении двух файлов автовыбор процедуры сравнения анализировал тип только одного из файлов,
        а должен был смотреть типы обеих файлов.
    В экcпорт бейсик-программ теперь не добавляется список длинных переменных.
        Если этот список всё таки нужно вывести в файл, можно сохранить его из вьювера ("просмотр", затем "сохранить").
    Добавлена предварительная очистка буфера файла при выполнении двух операций:
        - При импорте текстового или двоичного файла в FIL или DSK;
        - При чтении FIL-файла (возможно, для дальнейшей просмотра, записи в DSK или экспорта).
        Это приводит к тому, что при округлении размера файла до полного сектора добивка будет всегда содержать нулевые байты.
! тут сразу ошибка: на уникодовый импорт это почему-то не повлияло !
    В hex-редакторе сделаны две-три важные правки:
        - Подсказка по используемым клавишам разделена на три фрагмента:
          отдельно по readonly-режиму, отдельно по hex-редактору и по всем остальным клавишам.
        - В не-hex-режиме теперь не работают функции, вызываемые буквенными клавишами (символы 'zxZX[]{}' просто вводятся как текст);
        - В hex-режиме цифры A-F можно вводить в любом регистре (полезно для copy/paste из других программ).
    В карте диска все трек-секторные пары теперь, помимо десятичной системы, выводятся также в hex.
    "FIL-файл" переименован в "FIL-контейнер". Для большей точности отображения его сути.
    Поддержка формата редактора "Диалект". Это работает, однако: "Диалект" предполагает для каждого текста
        ссылку на файл шрифта и шрифты эти весьма вольготные, вплоть до хитрых кодировок.
        Так что входящий в поставку редактора файл "Реклама" просматривается в dos33c2 довольно коряво.
        Хотя все остальные файлы выглядят более-менее неплохо.
    Экранирование ошибок обращения к файлам HostOS: это когда прога не падает,
        а только выводит сообщение об ошибке доступа к какому-нибудь файлу (существующему или вновь создаваемому).
        На первый взгляд это касается, в основном, экспорта и импорта.
        Но, на самом деле, доработка коснулась примерно 15 ситуаций доступа к файлам.
        Это - мелкое изменение, но затрагивает оно много разных частей кода - из-за чего долго откладывалось.
    В просмотрщике графики:
        - Добавлен режим Apple ][ Text 40 x 24.
        - Для режима Агат Text 32 x 32 добавлена поддержка бита Y (яркость).
    Функции экспорта и импорта агатовских текстовых файлов в уникод (отдельный раздел в меню).
    При сохранении первого после запуска проги .bmp-файла в графпросмотрщике, его имя синтезируется не полностью.
        Это имеет место только в Windows версии.
        (В ДОС-версии алгоритм генерации уникальных имён попроще и потупее, а в *NIX его вообще нет.)

2.10    После переключения некоторых параметров отображения картинки в графвьювере переставала меняться палитра.
    Некоторые режимы Apple-графики рисовались с агатовской палитрой.
        (тут не совсем ошибка: эпловские режимы, которые умеет рисовать Агат, с точки зрения dos33c2 являются агатовскими...)
    Перетасованы палитры. Агатовские режимы - с агатовскими палитрами, эпловские - с эпловскими,
        HiRes эпловский с любой на выбор.
    Теперь в окне просмотра графики текущий режим выводится в заголовок окна. И там же теперь информация о палитре.

Post's attachments

Attachment icon dos33c2.rar 382.98 kb, 7 downloads since 2024-04-24 

2

Re: dos33c2

Класс! Замечательная утилита становится ещё замечательнее!

3

Re: dos33c2

Вот, кстати, хотел вопрос задать: а как просмотрщик в DOS33C2 определяет, что файл является картинкой?
И можно ли как-то это определение отключить?
А то он некоторые файлы по F3 упорно показывает как картинку (пример в аттаче). Приходится лезть обходными путями через меню, чтобы посмотреть файл в шестнадцатеричном виде.

Post's attachments

Attachment icon NET.zip 4.67 kb, 16 downloads since 2024-03-15 

4 Отредактировано Voldemar0 (16-03-2024 08:39)

Re: dos33c2

> Вот, кстати, хотел вопрос задать: а как просмотрщик в DOS33C2 определяет, что файл является картинкой?
И можно ли как-то это определение отключить?

Образы видеопамяти определяются по типу файла, его точному размеру и смещению загрузки.
Этот алгоритм - не точный, но сделать более точный было бы сложно. Например, вычислить спектры по X и Y и ввести какой-то критерий, вроде "мало высоких частот, много низких частот". Хотя и такой алгоритм будет работать неуверенно, если картинка будет содержать какой нибудь дизеринг.

Но если файл неправильно определяется как картинка, его всё равно можно посмотреть как бинарник кнопками 'b' и 'B' (для B-файлов) и 'К' (для ошибочно распознанных K-файлов). Фактически, всё меню "Просмотр файла" как раз предназначено для использования в случае ошибок работы автомата распознавания.

{
Определение типа файла построено на наборе процедур, которые по всевозможным косвенным признакам пытаются распознать содержимое. Учитываться может всё, включая фрагменты имени файла, заданный в каталоге тип, адреса загрузки, размеры, отдельные байты в содержимом файла.
}

5

Re: dos33c2

Хорошо бы поменять "Данные в t/s списке" на "Байты 00-0B в t/s списке" и показывать байты 00 - 0B первого ТСЛ, т.е. все что идет до списка секторов.

Ну и совсем прекрасно, если подсвечивать
Красным цветом -  байты точно используемые ДОСами,
желтым - предположительно, могут использовать некоторые ДОС,
белым - точно неиспользуемые ДОСами.

http://forum.agatcomp.ru//viewtopic.php?id=192

6 Отредактировано garnizon (28-03-2024 21:48)

Re: dos33c2

>Так вроде так и есть ? Там всё уже размещено в соответствии направлений стрелок и текущий режим выводится в рамке >окна или где-то в центре ?

Иногда, даже неделю, не открываешь программу, и уже завис на этом экране, опять приходится соображать логику переключений. На картинке накидал примерно как хотелось бы. В левом нижнем углу можно инверсией, и\или надпись типа "текущий"

http://forum.agatcomp.ru//misc.php?action=pun_attachment&amp;item=1264&amp;download=1


>В коде проги имя для картинки (windows) формируется так: img-<исходное имя><номер>.bmp
>Что неправильно ?

Картинку эту попытался сохранить, в аттаче результат 4-х нажатий на F2, только последние сохранились нормально.

Post's attachments

Attachment icon Furgon.rar 7.23 kb, 10 downloads since 2024-03-28 

Attachment icon STR.png 49.16 kb, 126 downloads since 2024-03-28 

7 Отредактировано Voldemar0 (29-03-2024 07:46)

Re: dos33c2

> Хорошо бы поменять "Данные в t/s списке" на "Байты 00-0B в t/s списке" и показывать байты 00 - 0B первого ТСЛ, т.е. все что идет до списка секторов.

Первые три байта смысла нет выводить - они служебные и легко предсказуемые. Указывают на следующий ТСЛ.
Их нельзя по другому использовать.

Кроме того, сейчас добраться до них сложно: они не являются "данными в т/с списке" - это структура такая, которая в FIL потом пишется. Либо их надо будет отдельно вытаскивать и таскать за собой (из файла и до пользовательского интерфейса) - но работать это будет только для файлов, которые на диске (не .FIL). Либо расширять саму структуру "данные в т/с списке" - тогда это уже сломает совместимость с существующими .FIL.

А на кой их вообще смотреть ?

"Данные в т/с списке" - изначально выводились в ИНФО по двум причинам:
- было не ясно, бывает ли там что-то в каких-то форматах или нет ? Мне самому это было нужно, чтобы встретив новый формат быстро его изучить. Но новых форматов сейчас нет.
- потому что это - элемент .FIL-контейнера.

А всё остальное (сам список, ссылки в 1 и 2 байтах) - они выводятся в просмотрщике дисковых секторов или можно просто открыть сектор ТСЛ и рассматривать его весь целиком.

Название в ИНФО уточню ("Байты в первом Т/С-списке [$3..$B]")

> белым - точно неиспользуемые ДОСами.

Это уже совсем нереальная задача: кто поручится, что никакая из существующих ДОС не использует чего-то ? :)

Ну ладно, там, по dos3.3 доки и результаты изучения есть. А ИКП, который в себе содержит несколько отдельных ОС ? А ещё куча агатовского софта, который сам пишет файлы ? А всякие хитрые "промежуточные" ОС: dos3.3/840, агат-автор, СЧМ - которые вроде бы и наследники dos3.3, но сильно переработанные.


> Картинку эту попытался сохранить, в аттаче результат 4-х нажатий на F2, только последние сохранились нормально.

А, ну так понятнее уже. Т.е. она всё таки формирует расширение, но не с первого раза. Поправим.

8 Отредактировано Voldemar0 (29-03-2024 22:02)

Re: dos33c2

Немного заметок про Уникод

Он возник очень давно, но долго не мог стать популярным.
Основная идея: расширить количество символов в знакогенераторах свыше 256.

Но очевидно, что это потребует введения больше чем одного байта на символ.
Т.е. увеличение объёма данных/файлов на тот же объём текста.

Отсюда вылезли разные идеи о том, как уникод должен хранится и передаваться.
Идей много, около десятка, а может и больше. Обычно кодировки уникода
(способы хранения и передачи символов) обозначаются как UTF (Uncode Transfer Format)
и дальше цифры и буквы. Хотя есть и более старые обозначения: например, UCS (Universal Character Set), UCS-2.

В целом, разница между разными UTF в том, насколько больший объём данных требуется
для хранения одного и того же текста и насколько удобно обрабатывать такую кодировку.
Всё как обычно: или обработка простая, но тогда объём данных больше или наоборот.

Здесь я опишу только три, самых ходовых типа UTF:

UTF-8 - очень распространнёная в протоколах Интернета и в современных *NIX'ах.
Всякие JavaScript, JSON и прочее - везде она крутится как основная и, нередко, как единственно
возможная.

Особенность UTF-8 в том, что символы с кодами меньше 128 хранятся тут как 1 байт,
но если значение кода растёт, требуется уже 2 - 3 - 4 байта.

UTF-16, наследник UCS-2 - её любят в GSM (СМС-ки в ней передаются, если содержат не латиницу,
и моя любимая Motorola 3788 шибко на это ругается). Её также любит MicroSoft.
Строго говоря, я не знаю кого любит MicroSoft: UCS-2 или UTF-16 ?
Эти кодироки для символов в диапазоне символов $0000..$CFFF совпадают по формату
и требуют всегда минимум двух байт на символ.

UTF-16 делится на два подвида: BE и LE - они отличаются порядком байт в словах.
Microsoft предпочитает вариант LE. *NIX считает, что более правильная - BE.

Поскольку единого предпочтения нет, хорошие проги, поддерживающие уникод, стремятся к тому, чтобы хотя бы читать любую из кодировок.
Но склонности к той или иной кодировке могут проявлятся мягко или жестко:
Linux'овый текстовый редактор leafpad не понимает ничего, кроме UTF-8.
Window'ый текстовый редактор wordpad (из Windows-10) не понимает ничего, кроме UTF-16LE.
*NIX'вая утилита iconv (конвертор сотен разных кодировок, там только Агата нет) понимает всё, но, по умолчанию, "UTF-16" понимает как "UTF-16BE".

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

Microsoft Word (пробовал с 2003 версией) понимает также все три типа UTF, но:
- UTF-16BE он называет "UNICODE (big endian)";
- UTF-16LE - "UNICODE";
- UTF-8 - "UTF-8".

Notepad из состава Windows-10 понимает все три кодироки.
И, вроде бы, даже позволяет сохранять файл тоже в любой из трех кодировок.


"Byte order mark" (BOM)

Это специальный символ, может записыватся в начале текста и указывает на конкретный тип UTF.
Но, как правило, в текстовых файлах он используется, если текст сохраняется как UTF-16 и не используется для текстов в UTF-8.
Notepad, из состава винды, даже явно указывает при сохранении файла, будет ли записываться BOM или нет.
Причина в том, что не все проги правильно понимают этот символ, так что иногда его лучше исключить.


dos33c2 и уникод

Сейчас в dos33c2 работа с уникодом сделана как совершенно отдельная операция.
Она работает только файлами типа T- на стороне Агата.

В случае экспорта необходимо поставить курсор на нужный файл или выделить группу текстовых файлов.
Дальше заходим в главное меню и ищем там "Уникод экспорт и импорт".

В меню выбираем направление и тип кодировки.


Импорт с автоопределением типа кодировки имеет hotkey и является рекомендуемым.
Определение типа выполняется так: если в начале текста найден BOM для UTF-16, то текст считается соответствующим UTF-16 be или le.
Если BOM не найден, то считается, что его тип - UTF-8.
Другие типы UTF dos33c2 не поддерживает.

Импорт с жестко заданным типом UTF не ищет BOM, а сразу начинает декодирование по заданному формату.
Если BOM присутствует в тексте, он станет вопросительным знаком в импортированном тексте.


Экспорт в UTF-8 стоит первым пунктом и имеет hotkey 'u' - как наиболее универсальный формат.
BOM при экспорте записывается по тому же правилу: он есть для UTF-16 и отсутствует для UTF-8.

{ Строго говоря, dos33c2 под UTF-16 подразумевает, скорее, UCS-2. Т.е. в этом режиме она предполагает, что любой
символ представляется двумя и только двумя байтами. Но - с другой стороны - таблица конвертации действительно
не выходит за значения выше кодов символов $CFFF, а в этом случае UCS-2 и UTF-16 совпадают. }


Будет ли отличаться при уникод-экспорте обычный текстовый файл без особо наворочанной псевдографики девятки или чего-то подобного ?

Обратите внимание на то, что символ $ в советских компах был заменён на знак валюты ("солнышко" или "клоп").
Соответственно, если вы экспортируете бейсиковскую программу, то обычный встроенный экспортёр сохраняет код символа и
на PC вы видите знак $ (символ с этим кодом как в агатовских так и в PC-шных бейсиках используется как указатель типа переменной: "строковая").
Но если вы попробуете экспортировать какую нибудь документацию по бейсику, используя уникодовый
экспортер, то в результирующем тексте вы получите знак валюты. В обратную сторону знак $ в агатовский файл импортировать
уникодом невозможно - на Агате нет этого символа. Но это можно сделать обычным импортёром.


Любой цветастый смайлик можно запихнуть в девятку ?

Само собой нет. В уникоде полно символов, визуально похожих, но имеющих разные коды.
Но таблица конвертации в dos33c2 одна.
Поэтому если хочется узнать, что конкретно можно импортировать на девятку,
проще всего экспортировать файл со всеми символами 1..255 и из того, там будет,
выбирать то, что нужно.

В таблице нет символов $80..$9D. При экспорте там будут '?', при импорте - тоже.
Это от того, что этот регион повторяет другой регион, с чуть более высокими кодами.

Тут есть темка:
http://forum.agatcomp.ru//viewtopic.php?id=378
таблица из этой темы ушла уже в два проекта: Аппаратный отладчик для Агата и dos33c2.

9

Re: dos33c2

Voldemar0 пишет:

как по простому сделать перекодировку из cp1251 в то, что в винде называется wide char  (UCS-2) ?

Функция MultiByteToWideChar (https://learn.microsoft.com/en-us/windo … towidechar)

10 Отредактировано Voldemar0 (19-04-2024 09:59)

Re: dos33c2

Немного про отрисовку графики (часть 1/2)

Агат на RGB-выход выдаёт, фактически, 4 бита цвета: RGB и яркость.
Однако форматы видеопамяти Агат-7 могут подразумевают 1 или 4 бита на пиксель, а Агат-9: 1, 2 или 4 бита на пиксель.
Кроме того, в текстовых режимах, цвет фона в Агат-7 может быть черным или белым, а у Агат-9, кроме того, синим или фиолетовым.
Т.е. 1 или 2 бита, в конечном итоге, по различным правилам, становятся 4 битами.

Также к Агату может подключаться плата палитр, которая преобразует 4 бита в 12 бит по таблице, которая загружается в ОЗУ платы.

Примерно такое же влияние на цвет, какое оказывает плата палитр, может оказать использование монохромного монитора неопределённого оттенка, подключаемого
к разъёму "Видеосигнал". На этот сигнал выдаётся комбинация то ли 3 то ли 4 бит в неожиданных пропорциях.
Абсолютные значения видеосигнала у семёрки зашкаливали, у девятки были более близкими к тому, что ожидал бы обычный телек
(да и моник, поддерживающий более-менее аналоговый сигнал единственного цвета).
Свою семёрку я, в итоге, переделал, чтобы получить чистый ряд оттенков зелёного (у меня монохромный моник был зелёным),
яркость которых линейно возрастала по мере роста номера цвета.

--

К тому, чтобы повторить всю эту логику и вывести агатовские файлы с изображениями на экран современной PC, есть примерно два подхода:

1) Рассматривать систему агатовский ДК + монитор как единое целое и пытаться повторить все детали их совместного поведения.
    - Недостаток подхода: мониторов было много разных, каждый со своими особенностями.
      Да и агатовский ДК имел различные варианты формирователя выходного монохромного сигнала.
    - Достоинство подхода: максимальное приближение изображения к тому, что было на реале при условии комплектации компьютера
      наиболее навороченной конфигурацией (конкретный цветной монитор с поддержкой линии Y по определённым правилам).

2) Рассматривать существенно важным только агатовский ДК, полагая монитор устройством идеальным.
    - Достоинство подхода: это соответствовать некоему абстрактному идеальному варианту:
      агатовский ДК подключен через хороший ЦАП к современному монитору.
    - Недостаток подхода: это будет примерно в равной степени не соответствать
      ни одной конфигурации реального Агата с монитором из 80-90х годов.

Поскольку мнения о том, какой подход использовать, давно и твёрдо разделились, в dos33c2 предыдущих версий (до 2.08 включительно)
был реализован простой, но очень компромиссный, вариант: при просмотре графики, нажатием клавиши Пробел, можно было выбрать одну из трех палитр:

- 1. Монохромную, слегка похожую на реальную картинку Агата с монохромным монитором.
    (Некоторые программы имели дизайн именно под такой монитор, на цветном они будут выглядеть заметно хуже).
    0x000000, 0x333333, 0x222222, 0x666666, 0x111111, 0x555555, 0x444444, 0x777777,
    0x888888, 0xbbbbbb, 0xaaaaaa, 0xeeeeee, 0x999999, 0xdddddd, 0xcccccc, 0xffffff

- 2. Цветную идеализированная: эта палитра строится из предположения, что сигнал Y влияет ровно на 50% яркости:
    0x000000, 0x7f0000, 0x007f00, 0x7f7f00, 0x00007f, 0x7f007f, 0x007f7f, 0x7f7f7f,
    0x404040, 0xff0000, 0x00ff00, 0xffff00, 0x0000ff, 0xff00ff, 0x00ffff, 0xffffff
    Цвет 8 в этой палитре взят вообще с потолка.

- 3. Эпловскую с поправкой на прохождение сигнала через декодер NTSC:
    0x000000, 0x4348C1, 0x157744, 0x43A9EF, 0x656000, 0x929292, 0x65C216, 0x8CEEBA,
    0x933164, 0xC063FF, 0x929292, 0xB9BEFF, 0xE27C36, 0xFFA7DB, 0xDCD75E, 0xFFFFFF

Это переключение было доступно независимо от формата изображения.
Последние изменения по этому вопросу были сделаны около 2018 года.
При этом dos33c2 не поддерживала механизм переключения палитр, который умеет выполнять контроллер ДК Агат-9.

--

Но в версии 2.09 была сделана поддержка расширения "VR" - это блок дополнительной информации, хранящийся в файлах изображений
и описывающий детали режимов отображения файла, включая даже информацию о программировании дополнительного устройства: платы палитр.

Также в список палитр были добавлены новые палитры:

- 4. Цветная, соответствующая реальному монитору с поддержкой линии Y (??? какому ???):
    $000000, $d90000, $00d900, $d9d900, $0000d9, $d900d9, $00d9d9, $d9d9d9,
    $262626, $ff2626, $26ff26, $ffff26, $2626ff, $ff26ff, $26ffff, $ffffff

- 5. Монохромная, уточнённая по схемотехнике ДК:
    $000000, $828282, $595959, $dddddd, $414141, $c2c2c2, $979797, $f1f1f1,
    $272727, $b9b9b9, $949494, $f4f4f4, $6c6c6c, $e5e5e5, $c5c5c5, $ffffff

Т.е. теперь dos33c2 может использовать уже 5 встроенных палитр + одну палитру, которая может быть сохранена в VR-блоке файла.
Также в эту версию был добавлен переключатель палитр, который реализован внутри ДК Агат-9.

Таким образом, одно и то же изображение уже может иметь до 24 вариантов отображения.

Чтобы как-то ограничить перебор всех этих комбинаций пришлось пару дней подумать.
В итоге было использовано следующее решение: всё зависит от того, есть ли в файле расширение VR или нет.
Так как VR появилось уже после 2010 года, можно предположить, что файлы, созданные без него, делались давно и без надежды
на точность воспроизведения и их можно отображать по старым схемам:

- палитра ДК - всегда 0, но можно переключить на другую;
- палитра платы палитр и монитора: палитры 1 и 2 для изображений в формате контроллера Агат;
палитра 3 для изображений в формате эпловской графики.

Если же VR присутствует, то:

- палитра ДК берётся из данных VR, но можно переключать на другую;
- палитра платы палитр и монитора: палитры 4, 5 и палитра из VR (если она там есть) - для изображений
в формате контроллера Агат, для форматов Apple: палитра 3 и палитра из VR (если она там есть).

Причём для монохромных графических режимов Агата по умолчанию будет включена палитра 1 или 5, а для остальных - 2 или 4.

<продолжение следует>

11 Отредактировано Voldemar0 (19-04-2024 11:42)

Re: dos33c2

Немного про отрисовку графики (часть 2/2)

Как опознаётся формат файла:

Если файл типа B:
    Тест 1: сперва поиск расширения VR, если оно найдено: файл графический с расширением VR.
    Если VR не найден, то проводится тест 2.
    Тест 2: размер файла должен быть $400, $800, $2000, $4000, смещение должно быть кратно размеру.
    Если это выполняется: файл графический, его формат зависит от размера.
    Реально, разные авторы делали размеры разными: могли быть и $1FFF и $1FFC и другие варианты.
    Но dos33c2 имеет строгий тест для того, чтобы уменьшить вероятность ложных срабатываний.

Если файл типа К:
    Проводится только тест 2.

Как просмотреть файл в определённом режиме, если результат работы автоопознавалки не устраивает:

- Просмотреть файл как HEX: клавиши 'B' (как просто B), 'K' (как просто К), 'b' (как есть HEX).
- Просмотреть файл как графический без VR: клавиша 'g'.

! Надо бы добавить ещё просмотр как VR без VR. Но тогда система споткнётся о непонятный режим отображения VR? !

Для некоторых типов файлов (.ФРГ от MouseGraph, .Рис от AlfGraf, .bol от Pixler и т.д.) опознавание
происходит однозначно, поэтому для них клавиши переключения палитр
и режимов во вьювере или недоступны или вызывают специальные действия, связанные с конкретным декодером.

--

Клавиши управления:

-- "r" - смена палитры 1->4 и 2->4 ("селектор палитр", "внутри дисплейного контроллера Агат-9").
Можно выбрать один из 4 вариантов таких преобразований.

-- пробел - смена палитры  4->12 ("селектор типа монитора", "внутри платы палитр").
Можно выбрать из 1-3 различных палитр.

-- Стрелки - переключают режим отображения. Сверху, снизу, справа и слева от картинки выводятся подсказки по режимам,
которые будут выбраны при нажатии соответствующей кнопки.
Общая логика переключения может быть представлена в виде таблицы:

  Apple 40 x 48 (NTSC, графика)
  Text 64 normal        Text 64 inverse        Text 32                    Apple 40 x 24 (Text)
  GR7  64 x  64 x 16
  MGR  128 x 128 x 16        HGR  256 x 256 x  2    Apple 280 x 192 (agat, графика)
  MGR9 256 x 256 x  4        HGR9 512 x 256 x  2    Apple 140 x 192 (NTSC, графика)        Apple 560 x 192 (Mono, графика)

Здесь различные графические режимы отсортированы по приблизительному объёму памяти, от наименьших к наибольшим.
В верхней строке - наименьшие по объёму ОЗУ, в следующей строке - чуть больше и т.д..
Стрелки вверх-вних переключают строки, а вправо-влево - столбцы.

Таблица не идеальна, так как она создавалась для поддержки только режимов, которые поддерживают Агаты,
остальные режимы (Apple, но не совместимые с Агатом), допинывались уже позднее и не всегда на удачное место.

-- F12, F2 - сохранение картинки в файле, в формате HostOS. Может быть BMP (MS-DOS, Windows) или TIF (*NIX).
Имя при сохранении не запрашивается, оно будет синтезировано автоматически. Файл сохраняется в текущем каталоге.

-- F4 - переключение режима размытия (dither, только в *NIX).

-- "0", "4", "7", "9" - переключают шрифты при просмотре в формате текстовой видеопамяти.

-- Escape, F3 - закрыть окно просмотра.

И ещё: агатовские форматы видеопамяти могут отображаться как из К- так и из B- файлов.
Но эпловские форматы из К- файлов будут отображаться немного некорректно
(будет сдвиг на 4 байта). Причина: К- формат - это формат
агатовской Школьницы и некоторых других агатовских программ.
К эплу он отношения не имеет и эпловские картинки в К- формате мне не встречались.

--

Что не реализовано

Поскольку я вернулся к dos33c2 только потому, что имел примерно дней 10 почти свободного времени и длинный список обнаруженных ошибок,
у меня не было возможности что-то фундаментально дорабатывать. Я ориентировался только на
исправление ошибок и мелкие дополнения. VR была последней доработкой и я не ожидал, что она потребует
много дополнений. Поэтому пока не реализовано два крупных блока:

- Поддержка шрифтов в VR для отображения текстовых режимов.
  В dos33c2 есть 4 встроенных шрифта: семёрка-128 символов, девятка, семёрка-256 символов,
  семёрка-256 моя версия (семёрка 128 символов с дополнением в нижней части таблицы).
  Они переключаются клавишами "0", "4", "7", "9".

  В формате VR есть поле 8 символов для хранения имени шрифта.
  Но в описании VR не указано, как именно используется это имя:
  - Какая кодировка ?
  - Как хранится имя короче 8 символов или длинее 8 ? (чем дополняется поле)
  - Что делать с полученным именем ? (это имя файла ? это имя шрифта в библиотеке шрифтов, которая хранится в каком-то файле ?...)
  - Формат самого шрифта. Мы же помним, что формат шрифтов семёрки и девятки различается и уже это - причина задуматься над вопросом.

  IMHO, так как весь формат предназначен для Агата и, очевидно, должен воспроизводится Агатом
  (если укомплектовать его программируемым знакогенератором, платой палитр и моником с поддержкой Y-линии),
  то получается, что это имя должно ссылаться на какую-то сущность в рамках Агата.
  Например, на файл шрифта. Но тогда для dos33c2 возникает вопрос: где искать этот файл, если, например,
  само изображение хранится в виде .FIL-файла ? Если перебирать все доступные .FIL и искать нужный
  по хранимому агатовскому имени, то такой логики у dos33c2 пока нет. Это нужно будет написать некоторый
  кусок кода, который будет вызывать читалку каталога, искать там нужный .FIL, вызывать читалку файла и т.д.

  В любом случае, тут хотелось бы иметь реальный агатовский софт для поддержки этого
  подхода, а потом уже эмулировать его поведение.
  Всё таки dos33c2 - вторичная вещь по отношению к тому, что существует на Агате.

- Декодеры VR
  dos33c2 писалась, в первую очередь, с ориентацией на реально существующий софт и железо, причем именно железо Агата.
  Поэтому ранние версии имели только поддержку агатовских видеорежимов. Потом, понемногу, добавились эпловские
  режимы, которые Агат поддерживает (причем именно так, как это делает Агат). Потом, по чуть-чуть, добавлялись
  эпловские режимы, которые Агат не поддерживает.
  Когда я стал читать список поддерживаемых режимов в описании VR, я понял, что проще даже не пытаться поддержать всё,
  что там заявлено. Это и "новые" эпловские режимы и режимы, которые могли бы быть у Агата..
  И если на первые ещё есть шанс найти документацию, хотя бы в книжках, то на вторые формальных описаний нет вообще.
  Да и железа для их поддержки тоже нет.
  Ещё режимы переключаемой палитры и ещё режимы многостраничных изображений - туда же.
  Поэтому пока что эти - довольно крупные куски - я оставляю на когда нибудь потом.

Spoiler

Мне кажется, что развитие агатовской графики сейчас зашло куда-то не совсем туда.
Логичнее было бы писать софт на Агат, который бы мог читать хотя бы png или gif или bmp как есть
и, уже исходя из изображения, выбирать режим просмотра, настраивать карту палитр, если она доступна,
режимы графики (исходя из модели компа - 7/9), может быть использовать какие-то ещё аппаратные фичи.

12

Re: dos33c2

Voldemar0 пишет:

Мне кажется, что развитие агатовской графики сейчас зашло куда-то не совсем туда.
Логичнее было бы писать софт на Агат, который бы мог читать хотя бы png или gif или bmp как есть
и, уже исходя из изображения, выбирать режим просмотра, настраивать карту палитр, если она доступна,
режимы графики (исходя из модели компа - 7/9), может быть использовать какие-то ещё аппаратные фичи.

Ну, иметь некоторый запас для описания режимов - это неплохо. Чтобы не переделывать формат VR по каждому чиху.

Насчет поддержки png или gif есть некоторые сомнения. Я вот видел, что ivagor с zx-pk сделал поддержку jpeg для Вектор-06Ц. Круто? Да. Но распаковка картинки занимает две минуты. Стал бы я пользоваться просмотрщиком, который 20 минут тратит на 10 картинок? Нет.

Распаковка png и gif конечно попроще, но все равно они тяжеловаты для 6502. Мне кажется, ничего сложнее формата bmp и алгоритма RLE под Агат делать не стоит. С другой стороны, bmp может быть очень здоровым. Например, если там 24-битный цвет.

Так что, по хорошему, Агату нужен свой формат. Ну или какой-то специально оптимизированный вариант bmp или gif. Короче, просто кидать в Агат картинки в известных форматах будет плохо. Обязательно понадобится какая-то утилита, которая будет их конвертировать или во внутренний формат или в известный, но со специальными настройками. Как минимум, чтобы учесть разрешение экрана и неквадратный пиксель.

Но меня вот какой вопрос интересует. Я что-то вообще не видел в коллекции софта каких-то сборников картинок. По отдельности какие-то картинки как части программ - есть. А вот чтобы именно коллекции картинок для "просто посмотреть" - нет. Может, потому и просмотрщиков нет?

13 Отредактировано Voldemar0 (23-04-2024 20:54)

Re: dos33c2

> Но меня вот какой вопрос интересует. Я что-то вообще не видел в коллекции софта каких-то сборников картинок. По отдельности какие-то картинки как части программ - есть. А вот чтобы именно коллекции картинок для "просто посмотреть" - нет.

Встречались группы картинок - штук 5-10 и простая бейсик-прога, которая их "листала". Не знаю, для чего писалось это, может быть на какие-то выставки. Но картинки были, как правило, выдранные из эпловских игр, а может из каких-то графредакторов эпла (демки, примеры). Как правило, обесцвеченные под 256x256x2. Ну или как есть - в виде HiRes.

Их набор я уже выучил: Черчиль, Дядя Сэм, девушки из стрипокера...

Тут играло роль не только отсутствие особой нужды в отдельных картинках, но и средства рисования. Всё-таки с клавиатуры много не нарисуешь. Тут нужен талант художника/дизайнера и мышка, хотя бы...

--

Я не настаиваю на каком-то конкретном формате, речь больше о том, что изображение должно быть отделено от средств его воспроизведения. Это можно описать как лёгкий в распаковке формат малого размера (например, не больше 1024x1024 точки). Пусть даже BMP, причем именно версия со встроенной палитрой (например, не больше 256 цветов). Важно, что он будет напрямую редактироваться любыми современными средствами, а дальше уже можно его воспроизоводить на любой старой технике (в нашем случае: на любой конфигурации Агата (7/9, с/без платы палитр...), обеспечивая максимально возможное качество).

Возвращаясь к первому вопросу о цели - ну вот ввели VR-расширение, софт под него под винду - значит цель-то есть какая-то.

Я и завернул это под спойлер, потому что понимаю - сейчас это некому реализовать.

14 Отредактировано Voldemar0 (23-04-2024 20:58)

Re: dos33c2

Вроде разобрался с палитрами: все эпловские совпадают с теми, что есть на сайте, но они по разному перетасованы (под HiRes, под DHiRes...).

В итоге разрулил ситуацию так:
- Агатовские декодеры работают только с агатовскими палитрами (цветная, монохромная, цветная 50%).
- Эпловский LoRes и DHiRes работают с эпловскими палитрами (независимо от наличия VR).
- Эпловский HiRes, поскольку он обрабатывается "агатовским" декодером, может работать с цветной и монохромной палитрой Агата, а также с палитрой Apple NTSC (под спецназванием "Агат как Apple NTSC").

Пока так. Если, в дальнешем, будет декодер Apple HiRes как NTSC-телек, то тогда можно будет разделить палитры на два декодера: HiRes как Агат (с палитрой Агата) и HiRes как Apple на NTSC.
Но дальше всё упирается в декодеры.

Декодер в dos33c2 выполняет следующее:
он читает буфер видеопамяти (получает указатель на начало блока данных)
и заполняет двумерный массив-растр цветами 0-15.
Также на входе у декодера может быть номер палитры ДК Агат-9 (0-3).
Дальше - не его забота.

Реальные цвета на мониторе берутся из одной из палитр (массив 16 элементов RRGGBB), список которых может зависеть от разных условий (в первую очередь от используемого декодера, но и не только). Но этим уже занимаются платформенно-зависимые визуализаторы растра.

--

Исправленные ошибки, найденные на неделе и другие изменения:

2.10    После переключения некоторых параметров отображения картинки в графвьювере переставала меняться палитра.                                     
        Некоторые режимы Apple-графики рисовались с агатовской палитрой.                                                                            
            (тут не совсем ошибка: эпловские режимы, которые умеет рисовать Агат, с точки зрения dos33c2 являются агатовскими...)                   
        Перетасованы палитры. Агатовские режимы - с агатовскими палитрами, эпловские - с эпловскими,                                                
             HiRes эпловский с любой на выбор.
        Теперь в окне просмотра графики текущий режим выводится в заголовок окна. И там же теперь информация о палитре.                             

15

Re: dos33c2

Выложил аттач в первое сообщение, сборка 2.10b.
Надеюсь, последняя на ближайшее время.