Из журнала Adventurer #8, Рыбинск, 20.08.98  Иван Рощин, Москва, 1998 Особенности видеоконтроллера ZX SPECTRUM Что будет видно на экране, если запи- сать по адресам #4000-#57FF любую инфор- мацию, а атрибуты обнулить? А если обну- лить #4000-#57FF и установить PAPER рав- ным 0, а INK каким угодно? Здравый смысл подсказывает, что и в том, и в другом случае мы не увидим абсолютно ничего. Все это так, но приведенная ниже программа доказывает обратное. LD HL,#5800 LD (HL),L LD DE,#5801 LD BC,#2FF LDIR LD HL,0 LD DE,#4000 LD BC,#1800 LDIR LD BC,#7FFD LD A,#17 OUT (C),A LD HL,#C000 LD (HL),L LD DE,#C001 LD BC,#17FF LDIR LD HL,#D800 LD (HL),7 LD DE,#D801 LD BC,#2FF LDIR LD BC,#7FFD M1 LD A,#18 OUT (C),A LD A,#10 OUT (C),A XOR A IN A,(254) CPL AND 31 JR Z,M1 RET Эта программа заполняет 1-й экран со- держимым ПЗУ и обнуляет атрибуты (таким образом, на экране ничего не видно), за- тем очищает 2-й экран и устанавливает для него атрибуты INK 7 , PAPER 0 (и на 2-м экране ничего не видно). Затем программа начинает быстро переключать 1-й и 2-й эк- раны, и тут мы видим такую картину: +-------------------+ | - - - | | - - - | | - - - | | - - -| | - - | | - - | |- - - | +-------------------+ По-видимому,происходит следующее: при выводе изображения на экран байт из эк- ранной памяти вместе со своим атрибутом попадает в специальный сдвиговый регистр, но может случиться так, что видеоконтрол- лер возьмет байт из экранной памяти 1-го экрана, а затем программа переключит эк- ран, и байт атрибутов будет взят уже из 2-го экрана (или наоборот). В обоих слу- чаях на экране появятся белые полосы. Интересно, наблюдается ли этот эффект на других компьютерах, кроме "Пентаго- на128" ? А на эмуляторах? Можно ли найти для него какое-нибудь применение? Теперь расскажу, как я обнаружил этот эффект. Дело было так: я писал программу, которая показывала некоторую картинку на 1-м экране, затем показывала следующую картинку на 2-м экране, потом опять на 1-м и т.д. Вот как эта программа работала (активный экран выделен двойной рамкой): 1) На 1-м экране какая-то картинка,на 2-м экране другая картинка, скрытая под атрибутами INK 0 , PAPER 0 . +============+ +------------+ | ******* | | | | **###*** | | | | ***####** | | | | XXXXXX | | | +============+ +------------+ 2) Очищаем 1-й экран и устанавливаем INK 7 , PAPER 0 . +============+ +------------+ | | | | | | | | | | | | | | | | +============+ +------------+ 3) Включаем 2-й экран, и на нем на мгновение появляется горизонтальная белая линия длиной примерно 8 пикселей. +------------+ +============+ | | | | | | | | | | | - | | | | | +------------+ +============+ 4) После HALT 'а для картинки на 2-м экране устанавливаем ее атрибуты. +------------+ +============+ | | | ********** | | | | **********| | | | ########## | | | | ######## | +------------+ +============+ * * *