Что может ячейка FAFB
В Бейсике "Корвета" есть оператор LUT. Выполнить все, что делает он, к тому же экономя память и с большим быстродействием, можно используя ячейку FAFB (на ПК8020 аналогичная ячейчка имеет адрес FFFB)*.
Выводимый на экран цвет называется физическим цветом, а задаваемый в графических операторах - логическим. Содержимое ячейки FAFB задает соответствие между ними. Обозначим содержимое битов C0 (0-й бит), C1 (1-й бит) и т.д. до C7. Число, составленное из C0, C1, C2, C3, задает номер логического цвета; C6, C5, C4 задают физический цвет (C6 - наличие красного, C5 - зеленого, C4 - синего компонентов); C7 регулирует яркость физического цвета (при C7=1 яркость максимальна, при C7=0 - вдвое меньше). Яркость можно рассматривать в качестве компонента физического цвета, и оказывается, что 16-ричное представление содержимого ячейчки FAFB первой цифрой кодирует физический цвет, а второй логический. Очень просто и удобно! Достаточно изменить значение этой ячейки, и сразу изменится вид экрана. В качестве примера - рисование окружности с центром в точке (100,100) физическим цветом 7, логическим цветом 1 и "мгновенный" вывод текста.
10 CLS:PCLS
20 POKE &HFAFB,&H71:REM на ПК8020 POKE &HFFFB,&H71
21 REM &H71 7 - физический цвет;
22 REM 1 - цвет, указанный в графическом операторе.
30 POKE &HFAFB,&H8:REM на ПК8020 POKE &HFFFB,&H8
31 REM Здесь цвет символов перекодируется в цвет фона
33 REM Логический цвет символов - 8
40 PRINT "-=:¤ Star system ¤:=-"
50 CIRCLE(100,100),50,1,,,1.5
60 POKE &HFAFB,&HF8:REM на ПК8020 POKE &HFFFB,&HF8
70 END
Теперь - "мгновенный" вывод на экран рисунка. Для этого "погасим" все цвета (обнулим физические цвета), а затем, создав рисунок, восстановим их.
10 CLS:PCLS
20 FOR I=&H1 TO 8
30 POKE &HFAFB,I:REM на ПК8020 POKE &HFFFB,I
40 NEXT I
50 REM Сoздание рисунка графическими командами
...
200 'Конец рисования
20 FOR I=&H11 TO &88 STEP &H11
30 POKE &HFAFB,I:REM на ПК8020 POKE &HFFFB,I
40 NEXT I:END
Сравним программы с использованием LUT и непосредственно ячейки FAFB.
10 DEFINT L
20 DIM L(31)
30 FOR I=0 TO 7:L(I)=I:NEXT
40 FOR I=8 TO 15:L(I)=15:NEXT
50 FOR I=0 TO 8
60 L(I)=0:NEXT
70 LUT L(0)
80 END
10 REM Нет операций
20 REM Нет операций
30 REM Нет операций
40 REM Нет операций
50 FOR I=0 TO 8
60 POKE &HFAFB,I:NEXT
70 REM Нет операций
80 END
Эти программы маскируют все цвета в цвет фона. Из примера ясно, что использование LUT требует большего времени, хотя, конечно, иногда и LUT может быть удобен.
От редакции: В момент изменения содержимого ячейки FAFB на экране может возникнуть мерцание. Использование LUT позволяет избежать этого.
* - Этот адрес может меняться в зависимости от версий Бейсика и МикроДОСа.