ПК-01 ЛЬВОВ

форум о ПК-01,02 "Львов"
Текущее время: 30 сен 2020, 09:26

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 5 сообщений ] 
Автор Сообщение
 Заголовок сообщения: Оператор PAINT
СообщениеДобавлено: 17 дек 2012, 11:39 
Не в сети
Аватара пользователя

Зарегистрирован: 11 авг 2008, 17:05
Сообщения: 1405
Откуда: Украина
В этот пост призываются силы разума в лице ivagor и sadfsdfsdaf!

Работа оператора PAINT меня заинтересовала после сообщения vinxru на форуме zx.pk.ru, где он прямо пишет:
Цитата:
В справке написано, что надо записать цвет границы в переменную BRD_COLOR. Но её нет.

Описал и проверил все нужные функции BIOS. Не рабоатет только PAINT.
Я просмотрел стандартные доки по ПК-01. Обнаружил любопытный момент. В версии #1 оператор PAINT в качестве процедуры из стандартного ПЗУ упоминается, там же упоминается злополучная переменная BRD_COLOR (но нигде не указан конкретный адрес ее размещения), однако в версии #2 (от 1990 года) оператор PAINT из описания ПЗУ уже напрочь исключен. Хм... Ради интереса я заглянул в тот образ ПЗУ, что идет с эмулем "Башкирия", нашел процедуру PAINT (0xE774), и увидел невооруженным глазом, что там зачем-то активно юзаются переменные 0xBEA3, 0xBEA4 и 0xBEA5, которые вообще-то отвечают за работу с магнитофоном. У меня возникло подозрение, что значение BRD_COLOR накладывается на переменную AUTOSTART по адресу 0xBEA3.

Что думаю по этому поводу знатоки и ценители? Где же на самом деле хранится значение BRD_COLOR?

_________________
Carthago delenda est, Carthaginem delendam esse


Вернуться к началу
 Заголовок сообщения: Re: Оператор PAINT
СообщениеДобавлено: 17 дек 2012, 12:20 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 24 июл 2008, 12:05
Сообщения: 1025
Пока нет времени дизассемблировать, попробовал просто потыкать этот оператор в эумле. Так он вобще странно работает! Я зарисовывал прямоугольник с левым верхним углом (10,10). Так вот, если PAINT`у указать стартовую точку (15, 15) то он будет зарисовывать только от нее, т.е. не весь прямоугольник, а как бы вправо и вниз. Надо будет попозже поиграться детальнее.


Вернуться к началу
 Заголовок сообщения: Re: Оператор PAINT
СообщениеДобавлено: 17 дек 2012, 13:49 
Не в сети
Аватара пользователя

Зарегистрирован: 11 авг 2008, 17:05
Сообщения: 1405
Откуда: Украина
Пересмотрел избранные реплики sadfsdfsdaf [#1, #2]. Оказывается, сам по себе оператор PAINT расположен в ПЗУ по адресу 0xE748, где код начинается так:
Код:
E748: LDA BE52
E74B: STA BEA3
Что совпадает с тем, что написано в мануале по Бэйсику:
Цитата:
Оператор PAINT используется для закрашивания области экрана видеотерминала сплошным цветом.

Формат оператора:
<номер строки> PAINT (<Х - коорд>, <Y - коорд> ), <цвет> [, <граница>]
где <Х - коорд>, <Y - коорд> - выражения, значения которых равны соот­ветственно координате Х и координате Y - точки, с которой начинается закрашивание области;
<цвет> - выражение, задающее значение номера цвета закраски (если опущено, то используется цвет переднего плана, определенный ранее);
<граница> - выражение, определяющее номер цвета границы области закраски (если опущено, то номер цвета границы совпадает с номером цвета закраски).

Параметр <граница> указывается в том случае, если цвет закрашивания не совпадает с цветом границы закрашиваемой области. Точка начала закраски области может быть любой точкой внутри области (но не на границе). Оператор PAINT проверяет наличие границ только по вертикали и горизонтали - и объект признается ограниченным, если ограничены вертикаль и горизонталь. Но малейшая прореха в границе позволяет оператору PAINT "пролезть" наружу и там закрасить область экрана (а том числе и всего).
По коду дальше видно, что 0хBEA3 действительно может принимать независимое значение.

Так что, все сходится. Переменная BRD_COLOR прописана по адресу 0хBEA3, по которому одновременно проживает и AUTOSTART. Такая вот коммуналка.

Наличие явной баги составители доки отметили, но проблему в результате решили без затей: просто удалили описание процедуры PAINT. Это по-нашенски. Зато PAINT теоретически можно было бы использовать для создания каких-либо неожиданных эффектов при работе с магнитофоном. :D

_________________
Carthago delenda est, Carthaginem delendam esse


Вернуться к началу
 Заголовок сообщения: Re: Оператор PAINT
СообщениеДобавлено: 22 янв 2013, 08:40 
Не в сети

Зарегистрирован: 23 авг 2012, 12:28
Сообщения: 123
Так в чем проблема то? Цвет границы для PAINT перед вызовом E774 пишем в BEA3 (ну и X, Y, цвет заливки в свои ячейки) и все работает.
Единственный сценарий использования, который приходит на ум и может вызвать "проблему":
1. Задаем все параметры PAINT, в т.ч. BEA3 и закрашиваем то, что нужно.
2. Загружаем что-нибудь (с автостартом или без).
3. Оставляем BEA3 как есть после загрузки, и пытаемся что-то заPAINTить. Если нужный цвет границы не 2 (после загрузки с автостартом) или не 0 (после загрузки без автостарта), то fail.

Коммунальное использование переменных конечно нехорошо, но в данном случае мне кажется не критичным.
Цитата:
Зато PAINT теоретически можно было бы использовать для создания каких-либо неожиданных эффектов при работе с магнитофоном. :D
Скорее наоборот - можно было бы использовать загрузку с магнитофона для скрытого задания цвета границы фигуры при заливке.


Вернуться к началу
 Заголовок сообщения: Re: Оператор PAINT
СообщениеДобавлено: 02 авг 2020, 22:59 
Не в сети

Зарегистрирован: 07 дек 2010, 16:54
Сообщения: 225
Я не удивлюсь, что кто-то из разработчиков ошибся, там есть странная переменная 0BE3Ah, которая инициализируется при старте:
Код:
ROM:E0E3 2E 38                    mvi     l,  BORDER - SYS_VARS ; байт заполнения рамки
ROM:E0E5 36 0F                    mvi     m, 0Fh          ; BORDER = 0Fh (подряд 4 точки цвета 1
ROM:E0E5                                                  ; - это "синий" для палитры по умолчанию)
ROM:E0E7
ROM:E0E7
ROM:E0E7 23                       inx     h
ROM:E0E8 23                       inx     h
ROM:E0E9 36 01                    mvi     m, 1            ; ??? BE3A ???
Но кто-то ошибся и стал использовать 0BEA3h ? Причину мы уже не узнаем.....


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 5 сообщений ] 

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


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

Найти:
cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB