2.8.3.10. К о м а н д а SRCH То, что вы ищете, вы найдете в самом последнем месте. Надо было посмотреть там с самого начала. Закон Мэрфи Команда SCRH проводит поиск цвета границы в видеопамяти или расширен- ной памяти "вправо" или "влево" от базовой точки. В и д е о п а м я т ь или р а с ш и р е н н а я п а м я т ь ┌──────────────────────────────────────────┐ │ (SX,SY) │ │ X-направление поиска │ │ · ───────────────────▶· DIX │ │ Базовая точка Точка цвета границы │ └──────────────────────────────────────────┘ А теперь мы расскажем Вам об установке регистров и порядке выполнения команды SRCH. 1. Вначале устанавливаются необходимые параметры в регистры команд VDP, а именно: α) MXD: выбор области памяти для поиска (0: видеопамять (VRAM); 1: расширенная память); DIX: направление для поиска точки истoчника: (0: направо; 1: налево); ЕQ: при 0 выполнение команды заканчивается,когда н а й д е н гра- ничный цвет; при 1 выполнение заканчивается, когда цвет отлича- ется от граничного. Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 45 │ 0 │ MXC │ MXD │ MXS │ DIY │ DIX │ EQ │ MAJ │ (регистр аргумента) └─────┴─────┴──▲──┴─────┴─────┴──▲──┴──▲──┴─────┘ │ │ │ Выбор области памяти для поиска ──────┘ │ │ Направление поиска (X) ────────────────────────┘ │ Условие окончания команды ──────────────────────────────┘ β) SX: базовые X-координаты для поиска (от 0 до 511); SY: базовые Y-координаты для поиска (от 0 до 1023). Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 32 │ SX7 │ SX6 │ SX5 │ SX4 │ SX3 │ SX2 │ SX1 │ SX0 │ (базовая координата X └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ для поиска (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 33 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ SX8 │ (базовая координата X └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ для поиска (старшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 34 │ SY3 │ SY2 │ SY1 │ SY0 │ SY3 │ SY2 │ SY1 │ SY0 │ (базовая координата Y └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ для поиска (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 35 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ SY9 │ SY8 │ (базовая координата Y └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ для поиска (старшая часть)) γ) CLR: данные о к о д е ц в е т а г р а н и ц ы для поиска. Р е ж и м ы SCREEN 5 и SCREEN 7 Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 44 │ 0 │ 0 │ 0 │ 0 │ C3 │ C2 │ C1 │ C0 │ (регистр цвета) └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ Р е ж и м SCREEN 6 Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 44 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ C1 │ C0 │ (регистр цвета) └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ Р е ж и м SCREEN 8 Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 44 │ C7 │ C6 │ C5 │ C4 │ C3 │ C2 │ C1 │ C0 │ (регистр цвета) └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ 2. Выполнение команды осуществляется помещением кода 01100000b в регистр команд с номером 46. Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 46 │ 0 │ 1 │ 1 │ 0 │ 0 │ 0 │ 0 │ 0 │ (регистр команды) └──▲──┴──▲──┴──▲──┴──▲──┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┘ Код команды SRCH 3. При выполнении команды СЕ-бит регистра состояния с номером 2 будет установлен в 1, а после выполнения - в 0. Кроме того, местоположение най- денного цвета границы (X-координата) окажется в регистрах статуса 8 и 9. Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Регистр с т а т у с а 2 │ │ │ │ BD │ │ │ │ CE │ └─────┴─────┴─────┴──▲──┴─────┴─────┴─────┴──▲──┘ Устанавливается в 1, ─────────┘ │ если н а й д е н цвет границы │ Устанавливается в 0 по окончании команды SRCH ─────────────────┘ Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Регистр с т а т у с а 8 │ BX7 │ BX6 │ BX5 │ BX4 │ BX3 │ BX2 │ BX1 │ BX0 │ (местоположение найден- └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ ного цвета границы (младшая часть X-координаты)) Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Регистр с т а т у с а 9 │ 1 │ 1 │ 1 │ 1 │ 1 │ 1 │ BX9 │ BX8 │ (местоположение найден- └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ ного цвета границы (старшая часть X-координаты)) Приведем схему алгоритма выполнения команды SRCH. ┌─────────────┐ ┌───────────────┐ ┌────────────────────┐ │ Начало SRCH │──▶│ Настройка VDP │──▶│ Выполнение команды │ └─────────────┘ └───────────────┘ └──────────┬─────────┘ ┌─────────────┘ ┌─────────────────▼─────────────────────┐ ┌───────────────▶ Чтение регистра состояния с номером 2 │ │ └─────────────────┬─────────────────────┘ │ нет (CE=1)┌───────▼────────┐ └─────────────────────────┤ Конец команды? │ └───────┬────────┘ │ да (СЕ=0) нет (BD=0)┌─────────▼───────────┐ ┌───────────────────────┤ Цвет границы найден?│ │ └─────────┬───────────┘ │ │ да (BD=1) │ ┌─────────────────▼─────────────────────┐ │ │ Чтение регистра состояния с номером 8 │ │ └─────────────────┬─────────────────────┘ │ ┌─────────────────▼─────────────────────┐ │ │ Чтение регистра состояния с номером 9 │ │ └─────────────────┬─────────────────────┘ │ ┌──────▼─────┐ └──────────────────────────▶ Конец SCRH │ └────────────┘ П р и м е р. Изображение на экране б е л о й линии. Далее, видео- ─────────── процессор ищет Х-координату этой линии 5 'Программу составил Беленький Г. (IX класс) 10 SCREEN 7 :' Возможны SCREEN 5÷SCREEN 8 20 LINE (254,0)-(254,121),15 :' Граница для поиска 30 VDP(32+1)=0: VDP(33+1)=0 :' X-координата начальн. точки 40 VDP(34+1)=0: VDP(34+1)=0 :' Y-координата начальн. точки 50 VDP(44+1)=15 :' Ищем б е л у ю точку 60 VDP(45+1)=&B00000000 :' 70 ' │ │└───────────────────:' Выполнение закончится,когда 71 ' │ │ :' будет найдена белая точка 80 ' │ └────────────────────:' Ищем направо от нач. точки 90 ' └──────────────────────:' Ищем во VRAM 100 VDP(46+1)=&B01100000 :' Выполнение команды SRCH 110 VDP(15+1)=2:A=INP(&H99):VDP(15+1)=0 :' Читаем регистр ст.2; ◀─┐ 120 CE=(A AND &B00000001) :' Выделяем бит CE │ 130 IF CE=1 THEN 110 :' Если он равен 1, то ───┘ 140 BD=(A AND &B00010000) :' выделяем бит BD 150 IF BD=0 THEN 190 :' Если он равен 0, то ────┐ 160 VDP(15+1)=8:A=INP(&H99):VDP(15+1)=0 :' читаем регистр ст.8 и │ 170 OPEN "GRP:" AS #1 :' печатаем X-координату,│ 180 PRESET(0,0):PRINT #1,A :' на которой найдена │ 181 ' :' белая точка │ 190 A$=INPUT$(1) :' К о н е ц ◀─────────────┘ 2.8.3.11. К о м а н д а PSET Слово только оболочка, Пленка, звук пустой, но в нем Бьется розовая точка Странным светится огнем. Арс.Тарковский Команда PSET устанавливает точку определенного цвета в видеопамяти или расширенной памяти. При этом над уже находящейся в указанных координатах точкой производится логическая операция. В и д е о п а м я т ь или р а с ш и р е н н а я п а м я т ь ┌─────────────────────────┐ │ (DX,DY) │ │ · │ └─────────────────────────┘ А теперь мы расскажем Вам об установке регистров и порядке выполнения команды PSET. 1. Сначала устанавливаются необходимые параметры в регистры команд VDP, а именно: α) MXD: выбор области памяти (0: видеопамять (VRAM); 1: расширенная память). Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 45 │ │ │ MXD │ │ │ │ │ │ (регистр аргумента) └─────┴─────┴──▲──┴─────┴─────┴─────┴─────┴─────┘ └───────── Выбор области памяти β) DX: X-координата точки (от 0 до 511); DY: Y-координата точки (от 0 до 1023). Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 36 │ DX7 │ DX6 │ DX5 │ DX4 │ DX3 │ DX2 │ DX1 │ DX0 │ (базовая координата X └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ точки (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 37 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ DX8 │ (базовая координата X └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ точки (старшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 38 │ DY7 │ DY6 │ DY5 │ DY4 │ DY3 │ DY2 │ DY1 │ DY0 │ (базовая координата Y └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ точки (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 39 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ DY9 │ DY8 │ (базовая координата Y └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ точки (старшая часть)) γ) CLR: данные о к о д е ц в е т а т о ч к и. Р е ж и м ы SCREEN 5 и SCREEN 7 Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 44 │ 0 │ 0 │ 0 │ 0 │ C3 │ C2 │ C1 │ C0 │ (регистр цвета) └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ Р е ж и м SCREEN 6 Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 44 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ C1 │ C0 │ (регистр цвета) └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ Р е ж и м SCREEN 8 Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 44 │ C7 │ C6 │ C5 │ C4 │ C3 │ C2 │ C1 │ C0 │ (регистр цвета) └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ 2. Выполнение команды осуществляется заданием числа 0101b в четырех с т а р ш и х битах и кода логической операции в четырех м л а д ш и х битах регистра команд с номером 46. Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 46 │ 0 │ 1 │ 0 │ 1 │ LO3 │ LO2 │ LO1 │ LO0 │ (регистр команды) └──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┘ └─────┴─────┴─────┘ └─────┴─────┴─────┘ Код команды PSET Код логической операции 3. При выполнении команды PSET СЕ-бит регистра состояния с номером 2 устанавливается в 1, а после выполнения - в 0. П р и м е р 1(а). Программа установки б е л о й точки при помощи ко- ──────────────── манды видеопроцессора PSET. 5' Программу составил Беленький Г. (IX класс) 10 COLOR 15,1,1:SCREEN 7 ' Возможны режимы SCREEN 5 ÷ SCREEN 8 20 VDP(36+1)=254 ' X-координата 30 VDP(38+1)=110 ' Y-координата 40 VDP(44+1)=15 ' Цвет 50 VDP(45+1)=0 ' Если Вы хотите увидеть результат своего 70 : ' труда, то 0 обязателен! 90 VDP(46+1)=&B01010000 ' Код команды PSET 110 A$=INPUT$(1) ' К о н е ц П р и м е р 1(б). Эта же программа, написанная на макроассемблере име- ──────────────── ет следующий вид: VDP MACRO @A,@B ;Макрос, который помещает число @B в LD B,@B ;в регистр видеопроцессора с номером @A LD C,#99 ; OUT (C),B ; LD A,@A ; OR #80 ; OUT (C),A ; ENDM ; LD A,7 ;Установка режима DEFB #F7,#87,#D1,0 ;SCREEN 7 VDP 36,255 ;X-координата точки VDP 38,128 ;Y-координата точки VDP 44,8 ;Цвет VDP 45,0 ; VDP 46,%01010000 ;Код команды видеопроцессора PSET DEFB #F7,0,#9F,0 ;Задержка DEFB #F7,#87,#D5,0 ;Установка режима SCREEN 0 RET ;Возврат в MSX-DOS 2.8.3.12. К о м а н д а POINT Черное - цвет? Цвет. Белое - цвет? Цвет. Кто сказал, что у меня нет цветного те- левизора? Философия владельца черно-белого те- левизора Команда POINT считывает цвет указанной точки из видеопамяти или расши- ренной памяти. В и д е о п а м я т ь или р а с ш и р е н н а я п а м я т ь ┌────────────────────────┐ │ (SX,SY) │ │ · │ └────────────────────────┘ А теперь мы расскажем Вам об установке регистров и порядке выполнения команды POINT. 1. Вначале устанавливаются необходимые параметры в регистр команд VDP, а именно: α) MXD: выбор области памяти (0: видеопамять (VRAM); 1: расширенная память). Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 45 │ │ │ MXS │ │ │ │ │ │ (регистр аргумента) └─────┴─────┴──▲──┴─────┴─────┴─────┴─────┴─────┘ └───────── Выбор области памяти β) SX: X-координата точки (от 0 до 511); SY: Y-координата точки (от 0 до 1023). Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 32 │ SX7 │ SX6 │ SX5 │ SX4 │ SX3 │ SX2 │ SX1 │ SX0 │ (базовая координата X └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ точки (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 33 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ SX8 │ (базовая координата X └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ точки (старшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 34 │ SY3 │ SY2 │ SY1 │ SY0 │ SY3 │ SY2 │ SY1 │ SY0 │ (базовая координата Y └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ точки (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 35 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ SY9 │ SY8 │ (базовая координата Y └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ точки (старшая часть)) 2. Выполнение команды осуществляется заданием кода 01000000b в регистре с номером 46. Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 46 │ 0 │ 1 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ (регистр команды) └──▲──┴──▲──┴──▲──┴──▲──┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┘ Код команды PSET 3. При выполнении видеопроцессором команды POINT СЕ-бит регистра состо- яния с номером 2 устанавливается в 1, а после выполнения - в 0. Кроме того, найденный цветовой код помещается в регистр статуса 7. Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Регистр с т а т у с а 2 │ │ │ │ │ │ │ │ CE │ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴──▲──┘ Устанавливается в 0 по окончанию команды SRCH ──────┘ Р е ж и м ы SCREEN 5 и SCREEN 7 Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Регистр с т а т у с а 7 │ 0 │ 0 │ 0 │ 0 │ C3 │ C2 │ C1 │ C0 │ (цветовой код) └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ Р е ж и м SCREEN 6 Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Регистр с т а т у с а 7 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ C1 │ C0 │ (цветовой код) └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ Р е ж и м SCREEN 8 Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Регистр с т а т у с а 7 │ C7 │ C6 │ C5 │ C4 │ C3 │ C2 │ C1 │ C0 │ (цветовой код) └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ П р и м е р. Определение цвета заданной точки ─────────── 5' Пример составил Беленький Г. (IX класс). 10 COLOR 15,1,1:SCREEN 7 ' Возможны режимы SCREEN 5 ÷ SCREEN 8 20 VDP(36+1)=254 ' X-координата 30 VDP(38+1)=110 ' Y-координата 40 VDP(44+1)=15 ' Цвет 50 VDP(45+1)=0 ' Если Вы хотите увидеть результат 60 ' ' своих трудов, то ставьте 0 │ 70 VDP(46+1)=&B01010000 ' Код команды PSET │ 80 VDP(32+1)=254 ' X'-координата │ 90 VDP(34+1)=110 ' Y'-координата │ 100 VDP(45+1)=&B00000000 ' ◀────────────────────────────┘ 110 VDP(46+1)=&B01000000 ' Код команды POINT 120 DATA 3E,07,F7,87,31,01,32,00,E0,C9 ' Считываем регистр статуса 7 130 ' ▲▲ │ 140 ' └┴───────────────────────────────────────────────┘ 150 FOR I=0 TO 9: READ A$ ' 160 POKE &HD000+I,VAL("&h"+A$): NEXT I ' 170 DEFUSR=&HD000:A=USR(0) ' 180 OPEN "GRP:" AS #1: PRESET(0,0),0 ' Печатаем 190 PRINT #1, PEEK(&HE000) ' код цвета 200 A$=INPUT$(1) Характеристики купленного прибора соответствуют спецификации довольно долго,все время, пока про- давец демонстрирует его Вам. Закон Мэрфи П р и м е р. Демонстрация действия в с е х команд видеопроцесора ─────────── 5 ' Программу составил Беленький Г. (IX класс) 10 DATA 01,00,00,11,00,00,3E,00,32,B3,FC :' Эта подпрограмма в машин- 20 DATA 32,B5,FC,32,F2,F3,F7,87,85,00,C9 :' ных кодах моделирует опе- 30 FOR I=0 TO 21:READ A$ :' ратор LINE (0,0)-(0,0),0 , 40 POKE &HD000+I,VAL("&h"+A$) :' который обнуляет неисполь- 50 NEXT I :' зуемые регистры видеопро- 60 DEFUSR=&HD000 :' цессора. 70 COLOR 15,0,0: SCREEN 8 80 FOR I=0 TO 63 90 DL=128-I*2+1 100 Z=USR(0) :'─┐ 110 VDP(36+1)=I:VDP(38+1)=I :' ├─ LMMV (закрашивает прямоугольную 120 VDP(40+1)=DL:VDP(42+1)=DL :' │ область с логическим преобразова- 130 VDP(44+1)=I:VDP(45+1)=0 :' │ нием цвета) 140 VDP(46+1)=&B10000100 :'─┘ │ 150 NEXT I ' ▲ :' │ 160 :' └──────────────────────────┘ 170 VDP(36+1)=0:VDP(38+1)=0 :'─┐ 180 VDP(44+1)=255 :' ├─ PSET (установка точки) 190 VDP(45+1)=0:VDP(46+1)=&B01010000 :'─┘ 200 A$=INPUT$(1) 210 VDP(32+1)=0:VDP(34+1)=0 :'─┐ 220 VDP(36+1)=129:VDP(38+1)=0 :' │ 230 VDP(40+1)=129:VDP(42+1)=129 :' ├─ HMMM (быстрая пересылка) 240 VDP(45+1)=0 :' │ 250 VDP(46+1)=&B11010000 :'─┘ 260 A$=INPUT$(1) 270 VDP(32+1)=130:VDP(34+1)=0 :'─┐ 280 VDP(36+1)=0:VDP(38+1)=0 :' │ 290 VDP(40+1)=129:VDP(42+1)=129 :' ├─ LMMM(пересылка с логичес- 300 VDP(45+1)=0 :' │ ким преобразованием) 310 VDP(46+1)=&B10010100 :'─┘ │ 320 A$=INPUT$(1):' └───────────────────────────────────┘ 330 FOR I=0 TO 255 340 VDP(36+1)=I:VDP(38+1)=0 :'─┐ 350 VDP(40+1)=128:VDP(42+1)=0 :' │ 360 VDP(44+1)=I :' ├─ LINE (линия) 370 VDP(45+1)=&B00000001 :' │ 380 VDP(46+1)=&B01110100 :'─┘ 390 NEXT I 400 A$=INPUT$(1) 410 VDP(34+1)=0:VDP(36+1)=0 :'─┐ 420 VDP(38+1)=129:VDP(42+1)=83 :' ├─ YMMM(быстрая пересылка толь- 430 VDP(45+1)=0 :' │ ко в Y-направлении) 440 VDP(46+1)=&B11100000 :'─┘ 450 A$=INPUT$(1) 460 Z=USR(0) 470 VDP(36+1)=0:VDP(38+1)=0 :'─┐ 480 VDP(40+1)=255:VDP(42+1)=64 :' ├─ HMMV (закраска прямоуголь- 490 VDP(44+1)=0:VDP(45+1)=0 :' │ ной области без ло- 500 VDP(46+1)=&B11000000 :'─┘ гических операций) 510 OPEN "GRP:" AS #1: PRESET(0,0) 520 PRINT #1," А теперь найдем, на какой X- координате находится ли ния с цветом 128." 530 DATA 3E,00,F7,87,31,01,32,00,F0,C9 :'─┐ 540 FOR I=0 TO 9:READ A$ :' │ 550 POKE &HE000+I,VAL("&h"+A$):NEXT I :' │ 560 DEFUSR1=&HE000 :' │ 570 VDP(32+1)=0:VDP(34+1)=128 :' │ 580 VDP(44+1)=128:VDP(45+1)=0 :' │ 590 VDP(46+1)=&B01100000 :' ├─ SRCH (поиск точки 600 POKE &HE001,2:A=USR1(0):A=PEEK(&HF000) :' │ заданного цвета) 610 CE=(A AND &B00000001) :' │ 620 IF CE=1 THEN 600 :' │ 630 BD=(A AND &B00010000) :' │ 640 IF BD=0 THEN 670 :' │ 650 POKE &HE001,8:A=USR1(0):A=PEEK(&HF000) :'─┘ 660 PRESET (100,30):PRINT #1, A;" 255-128=127 (!)" 670 A$=INPUT$(1) 680 CLS 690 PRESET (0,0): PRINT #1," Поставим точку "; 700 VDP(36+1)=128:VDP(38+1)=106 :'─┐ 710 VDP(44+1)=128:VDP(45+1)=0 :' ├─ PSET (ставит точку) 720 VDP(46+1)=&B01010000 :'─┘ 730 PRINT #1,"и определим ее цвет." 740 VDP(32+1)=128:VDP(34+1)=106 :'─┐ 750 VDP(45+1)=0:VDP(46+1)=&B01000000 :' ├─ POINT(определяет цвет 760 POKE &HE001,7:Z=USR1(0):A=PEEK(&HF000) :'─┘ заданной точки) 770 PRINT #1," Цвет точки :",A 780 A$=INPUT$(1) 790 CLS 800 PSET (0,0): PRINT #1,"Нарисуем ";CHR$(34);"картинку";CHR$(34);"." 810 Z=USR(0) 820 VDP(36+1)=110:VDP(38+1)=90 830 VDP(40+1)=30:VDP(42+1)=30 840 VDP(44+1)=255:VDP(45+1)=0 850 VDP(46+1)=&B10000000 860 Z=USR(0) 870 VDP(36+1)=115:VDP(38+1)=95 880 VDP(40+1)=20:VDP(42+1)=20 890 VDP(44+1)=7:VDP(45+1)=0 900 VDP(46+1)=&B10000000 910 PRINT #1,"И запомним ее в RAM начиная с адреса &hA800." 920 PRINT #1,"Подождите ! Процесс длится около д в у х минут." 930 I=&HA800 940 VDP(32+1)=110:VDP(34+1)=90 950 VDP(40+1)=30:VDP(42+1)=30 960 VDP(45+1)=0:VDP(46+1)=&B10100000 970 POKE &HE001,2:A=USR1(0):A=PEEK(&HF000) 980 TR=(A AND &B10000000) 990 IF TR=0 THEN 1020 1000 POKE &HE001,7:B=USR1(0):B=PEEK(&HF000) 1010 POKE I,B:I=I+1 1020 CE=(A AND &B00000001) 1030 IF CE=1 THEN 970 1040 PRINT #1,"Запомнили ..." 1050 A$=INPUT$(1) 1060 CLS 1070 PRESET (0,0):PRINT #1,"Очистили экран." 1080 PRINT#1,"Теперь восстановим рисунок из памяти в нормальном виде." 1090 I=&HA801 1100 VDP(36+1)=110:VDP(38+1)=90 1110 VDP(40+1)=30:VDP(42+1)=30 1120 VDP(44+1)=256+NOT(PEEK(&HA800)) 1130 VDP(45+1)=0:VDP(46+1)=&B11110000 1140 POKE &HE001,2:A=USR1(0):A=PEEK(&HF000) 1150 CE=(A AND &B00000001) 1160 IF CE=0 THEN 1210 1170 TR=(A AND &B10000000) 1180 IF TR=0 THEN 1140 1190 I=I+1:VDP(44+1)=PEEK(I) 1200 GOTO 1140 1210 A$=INPUT$(1) 1220 PRINT #1,"А теперь в инвертированном ..." 1230 I=&HA801 1240 VDP(36+1)=110:VDP(38+1)=90 1250 VDP(40+1)=30:VDP(42+1)=30 1260 VDP(44+1)=256+NOT(PEEK(&HA800)) 'Маленькая хитрость! 1270 VDP(45+1)=0:VDP(46+1)=&B10110100 1280 POKE &HE001,2:A=USR1(0):A=PEEK(&HF000) 1290 CE=(A AND &B00000001) 1300 IF CE=0 THEN 1350 1310 TR=(A AND &B10000000) 1320 IF TR=0 THEN 1280 1330 I=I+1:VDP(44+1)=PEEK(I) 1340 GOTO 1280 1350 A$=INPUT$(1) В заключение поговорим вкратце о возможностях ускорения выполнения ко- манд видеопроцессора. Выполнение команд видеопроцессора можно ускорить д в у м я следующи- ми способами. 1. Запрещение отображения спрайтов ("гашение" спрайтов) Если бит 1 регистра с номером 8(SPD) установлен в 1, то время, расходу- емое на обработку спрайтов может быть использовано для выполнения команд. 2. Запрещение отображения экрана ("гашение" экрана). Если бит 6 регистра видеопроцессора с номером 1(BL) установлен в 0, то время, затрачиваемое на отображение содержимого экрана, может быть ис- пользовано для выполнения команд. Даже самые светлые в мире умы Не смогли разогнать окружающей тьмы. Рассказали нам несколько сказочек на ночь- И отправились мудрые спать, как и мы. О.Хайям. Рубайят