Adventurer #08
31 августа 1998

Обмен опытом - Особенности видеоконтроллера ZX Spectrum (для программистов).

     (C) Иван Рощин, Москва, 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 .
 
        ╔════════════╗ ┌────────────┐
        ║   ░░░░░░░  ║ │            │
        ║  ░░▒▒▒░░░  ║ │            │
        ║  ░░░▒▒▒▒░░ ║ │            │
        ║   ██████   ║ │            │
        ╚════════════╝ └────────────┘
 
     2) Очищаем 1-й  экран и устанавливаем
INK 7 , PAPER 0 .
 
        ╔════════════╗ ┌────────────┐
        ║            ║ │            │
        ║            ║ │            │
        ║            ║ │            │
        ║            ║ │            │
        ╚════════════╝ └────────────┘
    
     3) Включаем 2-й  экран,  и  на нем на
мгновение  появляется горизонтальная белая
линия длиной  примерно 8 пикселей.
 
        ┌────────────┐ ╔════════════╗
        │            │ ║            ║
        │            │ ║            ║
        │            │ ║         -  ║
        │            │ ║            ║
        └────────────┘ ╚════════════╝
    
     4) После  HALT 'а для картинки на 2-м
экране устанавливаем ее атрибуты.
 
        ┌────────────┐ ╔════════════╗
        │            │ ║ ░░░░░░░░░░ ║
        │            │ ║  ░░░░░░░░░░║
        │            │ ║ ▒▒▒▒▒▒▒▒▒▒ ║
        │            │ ║   ▒▒▒▒▒▒▒▒ ║
        └────────────┘ ╚════════════╝
  
                   * * *





Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Paradox 2000 - Битва титанов: Спор Колотова Сергея/Serzh Soft с Селиным Дмитрием/Phantom Lord и Виктором/M.O.T. о том как надо делать демки.
Юмор - пара-тройка прикольных фишек и анекдотов.
Реклама - ремонт и модернизация Спектрум совместимых компьютеров.

В этот день...   24 сентября