1 Отредактировано garnizon (25-03-2020 21:58)

Тема: Режим Double Lo-Res

Ребята, как на поздних эплах и правцах включается режим Double Lo-Res (это 80х48 блоков).

Скажем есть картинка, в формате видеопамяти, для такого режима, загружаю её в ОЗУ по BLOAD, а вот как ДК перевести в этот режим чтоб она на экране показалась?

Дело заключается в том, что в программу http://agatcomp.ru/Soft/filConverter.shtml добавили такой режим, но хотелось бы
проверить правильно ли. В аттаче картинка и сделанный из неё FIL. Хотелось бы запустить его в эмуляторе, а если на
реальной машине кто проверит - вообще сказка.

Post's attachments

Attachment icon 911.DSK 140 kb, 207 downloads since 2020-03-25 

Attachment icon 911.fil 2.04 kb, 196 downloads since 2020-03-20 

911.png, 1018 b, 80 x 48
911.png 1018 b, 196 downloads since 2020-03-16 

2

Re: Режим Double Lo-Res

Формально, надо последовательно сделать запись в следующие адреса:

C050:00
C056:00
C052:00
C00D:00
C05E:00

Но есть засада. У старших Apple память устроена хитро. Есть два страницы по 64 кб (PAGE1 и PAGE2). Первая страница выбирается при включении машины. Страницы охватывают весь диапазон адресов от $0000 до $BFFF, и если их переключать "в лоб", то процессору будут подсунуты неинициализированные нулевая страница и стек, и он повиснет.

В режимах высокого разрешения чередуются адреса видеопамяти из PAGE1 и PAGE2. В Double Lo-Res первый байт берется из адреса $400 PAGE2, второй байт из $400 PAGE1. Третий байт из адреса $401 PAGE2, четвертый байт из $401 PAGE1. И так далее.

И вот проблема в том, что одной командой BLOAD картинку просто не загрузить.

Надо одной командой загрузить четные байты картинки, правильно переключить страницы, а потом загрузить нечетные. Вроде бы, области как-то можно переключать по обращениям к $C054 и $C055 (у них функция меняется, по сравнению с ранними Apple), но я про это только что прочитал и никогда не пробовал.

3 Отредактировано SnakE (20-03-2020 23:18)

Re: Режим Double Lo-Res

Вот описание, как этот режим включить в бэйсике. Но это только для рисования примитивов: http://en.wikibedia.ru/wiki/Apple_II_gr … Resolution

В аттаче -- скриншоты из эплового мануала. Чтобы загрузить картинку, сделанную FilConv 1.9.1, нужно:

1. Загрузить всю картинку куда-нибудь, например по адресу $2000
2. Скопировать первый килобайт картинки $2000-$23FF в $400-$7FF. Это затрёт первую страницу текстового режима.
3. Подключить AUX память по адресам $400-$7FF:
- Установить флаг 80STORE записью в $C001
- Установить флаг PAGE2 чтением или записью в $C055
4. Скопировать второй килобайт картинки из $2400-$27FF в $400-$7FF

После этого картинка должна нормально показываться, если включить графический режим. Для этого нужно очистить флаг TEXT чтением или записью в $C050 и включить флаг 80COL записью в $C00D. Включать DHIRES $C05E не нужно, он всё равно без $C07E ничего не делает.

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=747&download=0

Post's attachments

Attachment icon displayswitch.png 573.64 kb, 99 downloads since 2020-03-17 

memswitch.png, 355.33 kb, 513 x 565
memswitch.png 355.33 kb, 188 downloads since 2020-03-17 

4

Re: Режим Double Lo-Res

Во блин, и чего же делать? Просить кого-то с реальным эпл это пробовать?

5

Re: Режим Double Lo-Res

Эмулятор исходно не поддерживает DLGR. Я прикрутил его поддержку к своей экспериментальной графике. Картинку загружал и режимы переключал через отладчик, встроенный в эмулятор. Всё в целом работает, только я перепутал половинки.

FilConv генерит файл так, что в первой половине файла 0000-03FF хранятся чётные колонки 0,  2, ... 78, а во второй 0400-07FF нечётные 1, 3, ... 79. А DLGR устроен так, что чётные колонки берутся из AUX памяти, а нечётные из основной. Не знаю, стоит ли переделывать filconv и менять порядок половинок. Стандартного формата для хранения таких картинок всё равно нет, а вручную распихивать куски картинки по памяти одинаково неудобно что так, что эдак.

Я поправлю свой пост, где описываю процедуру загрузки, чтобы она соответствовала файлу, который сейчас делает FilConv.

6

Re: Режим Double Lo-Res

Может все таки поменять на всякий случай

7

Re: Режим Double Lo-Res

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

Post's attachments

car-dlgr.png, 8.59 kb, 562 x 418
car-dlgr.png 8.59 kb, 443 downloads since 2020-03-20 

8

Re: Режим Double Lo-Res

Всем привет, попробовал написать программу на бейсике реализующую алгоритм из третьего сообщения, но споткнулся на первой же строчке "BLOAD 911,A$2000". На что мне отвечают "Syntax error"
Загружаю в эмуляторе Apple II из образа 911.DSK прикрепленного к первому сообщению.
Что я делаю не так?

9

Re: Режим Double Lo-Res

Вот в этой книжке: https://archive.org/details/Apple_II_in … 5/mode/2up на 69 странице написано:

To use BLOAD as a DOS command within a BASIC program use the instruction

PRINT CHR$(4)"BLOAD filename"

10

Re: Режим Double Lo-Res

Более того, при первом вызове ДОСовской команды из васика рекомендуется его дополнить предшествующим пустым принтом, чтобы парсер отбросил возможный мусор в буфере. То есть:
PRINT : PRINT CHR$(4) "BLOAD file"

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

11

Re: Режим Double Lo-Res

На всяк случай: поддержка hex-чисел ($XX) появилась в разных бейсиках-досах в разное время. Могу ошибаться, но в AppleSoft hex-чисел ещё не было, они появились только в агат-версии. Причем в операторе DATA hex-числа можно использовать только в ИКП-Бейсике. Что было в комстроке ДОС - не знаю.

Если сообщение "Syntax error" выводится без знака "?" в начале строки - это сообщение ДОС, ему не нравиться синтаксис.  Попробуй указать адрес загрузки в десятичном виде.

12

Re: Режим Double Lo-Res

Voldemar0 пишет:

в AppleSoft hex-чисел ещё не было, они появились только в агат-версии.

Нет, в DOS 3.3 hex-числа есть.

sintech пишет:

"BLOAD 911,A$2000". На что мне отвечают "Syntax error"

Первый символ имени файла должен быть буквой. https://www.apple.asimov.net/documentat … %20FAQ.txt пункт 4.1