1 Отредактировано garnizon (25-04-2024 20:37)

Тема: Применение платы палитр в софте.

Собственно с чего-то надо начинать. Хоть с простой демонстрашки, которая картинки показывает стаями.

Возник вопрос, можно ли, и как, из ИКП-бейсика, обработать хвост графического файла?
http://agatcomp.ru/agat/PCutils/EXIF.shtml

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

2

Re: Применение платы палитр в софте.

Насчет этого "хвоста" я вот чего не понимаю: он включается в длину файла или нет?

Просто у меня сложилось впечатление, что этот хвост добавляется именно в "пустую" с точки зрения DOS область файла типа B.
Вот как-то так:

+----------------------------------+-----+--------------------------+
|             Сектор 0             | ... |     Последний сектор     |
+---------+---------+--------------+-----+--------------+-----------+
| Адрес   | Длина   | Данные файла |     | Данные файла | "Хвост"   |
| 2 байта | 2 байта | 252 байта    |     | 4 байта      | 252 байта |
+---------+---------+--------------+-----+--------------+-----------+

То есть, если у нас ч/б картинка 256x256 (МГВР), то в поле "Длина" будет значение $2000.

Если это так, то последние 252 байта с точки зрения DOS не существуют, и доступ к ним стандартными средствами (командой BLOAD) получить нельзя. Их можно будет вычитать только прямыми вызовами RWTS, что плохо.

Если "хвост" в файл включается, то длина должна быть $20FC. Тогда "хвост" будет грузиться в память сразу после картинки.

3 Отредактировано Voldemar0 (26-04-2024 06:05)

Re: Применение платы палитр в софте.

Теоретически можно без обращения к RWTS. ДОС читает диск блоками по 256 байт. Я не уверен, но предполагаю (судя по скорости работы команды BLOAD), что те блоки файла, которые должны быть прочитаны целиком, читаются сразу на адреса назначения. Но те, которые нужны не полностью, читаются сперва в промежуточный буфер, а потом часть сектора копируется в регион назначения. Соответственно, если знать адрес этого буфера, после BLOAD можно вытащить "хвост" оттуда. Это потребует привязок к конкретной версии ДОС, но работать должно.

Это не будет работать в Школьнице и её "наследниках": у RWTS есть параметр LAST - сколько байт нужно считать c диска. Там "хвост" будет теряться.

4

Re: Применение платы палитр в софте.

Так примерно (выводит комментарий из VR):

3 REM Этот код работает только в ИКП-Бейсике-9
5 REM Для других версий бейсика нужно подбирать смещение буферов ДОС

7 BUF%=$1F00

10 *$30A:
20 ! LDY $C150
30 ! LDX #0
40 ! STA $C15D
50 ! L:LDA $B107,X ! STA BUF%,X ! INX ! BNE L
80 ! STA $C100,Y
90 ! RTS !:

100 HOME
110 ? "Выберите файл-картинку:"
120 ?:?CHR$(4)"BLOAD?,A$2000"
130 CALL $30A

200 ? CHR$(30+128) : ?
210 IF PEEK(BUF% + 4) <> ASC("V") THEN 900
220 IF PEEK(BUF% + 5) <> ASC("R") THEN 900

300 FOR L = 4 TO 15
310   FOR C = 0 TO 15
320     S% = PEEK(BUF% + L * 16 + C)
330     ? CHR$(S%);
340   NEXT C
350   ?
360 NEXT L
370 STOP

900 ? "В этом файле нет VR-расширения"
910 STOP
Post's attachments

Attachment icon VR.FIL 808 b, 5 downloads since 2024-04-27