Связь адреса аттрибутов с адресом экрана — различия между версиями

Материал из SpeccyWiki
Перейти к: навигация, поиск
Строка 24: Строка 24:
 
</pre>
 
</pre>
 
приведенный пример имеет один недостаток: при использовании адреса #C000-#D7FF в странице 5 и 7 бит7 не учитывается.
 
приведенный пример имеет один недостаток: при использовании адреса #C000-#D7FF в странице 5 и 7 бит7 не учитывается.
 +
 +
Если известно, что указатель на графику указывает на верхнюю строку знакоместа, то вычисления проще: ld a,d:rrca:rrca:rrca:add a,80.
 
[[Категория:Программирование графики]]
 
[[Категория:Программирование графики]]

Версия 08:37, 27 мая 2013

Для пересчета адреса аттрибутов по адресу экрана необходимо знать соответствие двух областей памяти экранной области:

часть 1: #4000-#47FF - экран, #5800-#58ff - аттрибуты часть 2: #4800-#4FFF - экран, #5900-#59ff - аттрибуты часть 3: #5000-#57FF - экран, #5800-#5Aff - аттрибуты

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

40=01.00 0.000 58=0101 1.000
48=01.00 1.000 59=0101 1.001
50=01.01 0.000 5A=0101 1.010

это старший байт адреса, младший байт адреса не играет роль для аттрибута и знакоместа. Код:

;DE-адрес экранной области,A-цвет аттрибута
;!использует регистр С!
 push hl
 ld l,e,c,a;a=attribute
 ld a,d:and %00111000
 rra:rra:rra
 or %01011000
 ld h,a
 ld (hl),c
 pop hl
 ret

приведенный пример имеет один недостаток: при использовании адреса #C000-#D7FF в странице 5 и 7 бит7 не учитывается.

Если известно, что указатель на графику указывает на верхнюю строку знакоместа, то вычисления проще: ld a,d:rrca:rrca:rrca:add a,80.