2.8.3.3. К о м а н д а HMMM Стокгольм - город контрастов. Рядом с красивыми новыми домами стоят еще более новые и красивые. Н.Богословский Команда НМММ пересылает данные в виде специального прямоугольного бло- ка из в и д е о п а м я т и или р а с ш и р е н н о й памяти в в и д е о п а м я т ь или р а с ш и р е н н у ю память. Так как данные для пересылки организованы побайтно, существует ограниче- ние на значение параметра X в соответствии с режимом отображения. В и д е о п а м я т ь или р а с ш и р е н н а я п а м я т ь ┌───────────────────────────────────────┐ │ (SX,SY) │ │ ┌─────────────┐ ──▶ DIX │ │ │ NX│ (X-направление)│ │ │NY │ │ │ └─────────────┘ (DX,DY) │ │ │ ┌───────┐ │ │ │ DIY │ │ │ │ │ (Y-направление) └───────┘ │ │ ▼ │ └───────────────────────────────────────┘ Опишем порядок выполнения команды HMMM. 1. Вначале устанавливаются необходимые параметры в регистры команд VDP, а именно: α) MXS: Выбрать область памяти для и с т о ч н и к а; MXD: Выбрать область памяти для а д р е с а т а (0: видеопамять; 1: расширенная память); DIX: Направления для NX от точки источника (0: направо; 1: налево); DIY: Направления для NY от точки источника (0: вниз; 1: вверх). Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 45 │ 0 │ MXC │ MXD │ MXS │ DIY │ DIX │ EQ │ MAJ │ (регистр аргумента) └─────┴─────┴──▲──┴──▲──┴──▲──┴──▲──┴─────┴─────┘ │ │ │ │ Выбор области памяти для адресата ──┘ │ │ │ Выбор области памяти для источника ────────┘ │ │ Направление пересылаемых данных (Y) ──────────────┘ │ Направление пересылаемых данных (X) ────────────────────┘ β) SX: Х-координата и с т о ч н и к а (от 0 до 511) (отметим, что в режимах SCREEN 5 и SCREEN 7 теряется один младший бит,а в режиме SCREEN 6- - 2 младших бита SX, DX и NX); 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 │ SY7 │ SY6 │ SY5 │ SY4 │ SY3 │ SY2 │ SY1 │ SY0 │ (базовая координата Y └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ источника (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 35 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ SY9 │ SY8 │ (базовая координата Y └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ источника (старшая часть)) γ) DX: базовая Х-координата а д р е с а т а (от 0 до 511) (отметим, что в режимах SCREEN 5 и SCREEN 7 теряется один младший бит, а в режиме SCREEN 6 - 2 младших бита SX, DX и NX); DY: базовая Y-координата а д р е с а т а (от 0 до 1023). NX: "ширина" пересылаемого блока по X-направлению в точках (от 0 до 511) (отметим, что в режимах SCREEN 5 и SCREEN 7 теряется один младший бит, а в режиме SCREEN 6 - 2 младших бита SX, DX и NX); NY: "ширина" пересылаемого блока по 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 └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ адресата (старшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 40 │ NX7 │ NX6 │ NX5 │ NX4 │ NX3 │ NX2 │ NX1 │ NX0 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в X-направлении (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 41 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ NX8 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в X-направлении (старшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 42 │ NY7 │ NY6 │ NY5 │ NY4 │ NY3 │ NY2 │ NY1 │ NY0 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в Y-направлении (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 43 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ NY9 │ NY8 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в Y-направлении (старшая часть)) 2. Выполнение команды происходит заданием кода команды 11010000b в ре- гистре команд с номером 46. Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 46 │ 1 │ 1 │ 0 │ 1 │ 0 │ 0 │ 0 │ 0 │ (регистр команды) └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ 3. При выполнении команды HMMM СЕ-бит регистра состояния с номером 2 будет установлен в 1, а после выполнения - в 0. П р и м е р. Пример использования команды HMMM ─────────── 20 SCREEN 5:CIRCLE(40,40),40,8:PAINT STEP(0,0),8 30 FOR T=32 TO 46:VDP(T+1)=0:NEXT :'Очистка 40 VDP(32+1)=0:VDP(33+1)=0 :'Источник (координата X) 50 VDP(34+1)=0:VDP(35+1)=0 :'Источник (координата Y) 60 VDP(36+1)=80:VDP(37+1)=0 :'Приемник (координата X) 70 VDP(38+1)=80:VDP(39+1)=0 :'Приемник (координата Y) 80 VDP(40+1)=80:VDP(41+1)=0 :'Длина по координате X 90 VDP(42+1)=80:VDP(43+1)=0 :'Длина по координате Y 100 VDP(45+1)=&B00000000 :'Байт аргументов: 110 ' │││└─────────── :' пересылать направо; 120 ' ││└──────────── :' пересылать вниз; 130 ' │└───────────── :' пересылать из VRAM; 140 ' └────────────── :' принимать во VRAM; 150 VDP(46+1)=&B11010000 :'Выполнение команды HMMM 160 ' └▲─┘ :' 180 ' └─────────────── :'Код команды HMMM 190 A$=INPUT$(1) :'К о н е ц 2.8.3.4. К о м а н д а HMMV Каждая копировальная машина приводит в негодность оригинал. Закон Мэрфи Команда HMMV используется для з а к р а с к и указанной прямоугольной области видеопамяти или расширенной памяти. Так как пересылаемые данные организованы побайтно, то существует ограничение на величину X в соответ- ствии с режимом отображения. В и д е о п а м я т ь и л и р а с ш и р е н н а я п а м я т ь ┌────────────────────────────────────┐ │ (DX,DY) │ │ ┌─────────────┐ ──▶ DIX │ VDP │ │ NX│ (X-направление)│ ┌────────────────┐ │ │NY │ ◀───────────────────│ Видеопроцессор │ │ └─────────────┘ │ └────────────────┘ │ │ │ │ ▼ DIY (Y-направление) │ └────────────────────────────────────┘ Опишем последовательность выполнения команды НММV. 1. Вначале устанавливаются необходимые параметры в регистры команд VDP, а именно: α) MХD: задать область памяти а д р е с а т а (0: видеопамять; 1: расширенная память); DIX: направление для NX от точки и с т о ч н и к а (0:направо; 1:налево); DIY: направление для NY от точки и с т о ч н и к а (0:вниз; 1:вверх); Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 45 │ 0 │ MXC │ MXD │ MXS │ DIY │ DIX │ EQ │ MAJ │ (регистр аргумента) └─────┴─────┴──▲──┴─────┴──▲──┴──▲──┴─────┴─────┘ │ │ │ Выбор области памяти для адресата ──┘ │ │ Направление пересылаемых данных (Y) ──────────────┘ │ Направление пересылаемых данных (X) ────────────────────┘ β) DX: базовая X-координата а д р е с а т а (от 0 до 511) (отметим, что в режимах SCREEN 5 и SCREEN 7 теряется один младший бит, а в режиме SCREEN 6 - 2 младших бита DX и NX); DY: базовая Y-координата а д р е с а т а (от 0 до 1023). NX: "ширина" пересылаемого блока по X-направлению в точках (от 0 до 511) (отметим,что в режимах SCREEN 5 и SCREEN 7 теряется один младший бит, а в режиме SCREEN 6 - 2 младших бита DX и NX); NY: "ширина" пересылаемого блока по 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 └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ адресата (старшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 40 │ NX7 │ NX6 │ NX5 │ NX4 │ NX3 │ NX2 │ NX1 │ NX0 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в X-направлении (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 41 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ NX8 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в X-направлении (старшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 42 │ NY7 │ NY6 │ NY5 │ NY4 │ NY3 │ NY2 │ NY1 │ NY0 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в Y-направлении (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 43 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ NY9 │ NY8 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в Y-направлении (старшая часть)) γ) CLR: данные для ц в е т о в о г о к о д а. Д л я р е ж и м о в SCREEN 5 и SCREEN 7 Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 44 │ CH3 │ CH2 │ CH1 │ CH0 │ CL3 │ CL2 │ CL1 │ CL0 │ (регистр цвета) └──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┘ └─────┴─────┴─────┘ └─────┴─────┴─────┘ N=0,1,2,...,127 X=2·N (четные точки) X=2·N+1 (нечетные точки) Д л я р е ж и м а SCREEN 6 Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 44 │ CH3 │ CH2 │ CH1 │ CH0 │ CL3 │ CL2 │ CL1 │ CL0 │ (регистр цвета) └──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┘ └─────┘ └─────┘ └─────┘ └─────┘ N=0,1,2,...,127 X=4·N X=4·N+1 X=4·N+2 X=4·N+3 Четные точки Нечетные точки Д л я р е ж и м а SCREEN 8 Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 44 │ CH3 │ CH2 │ CH1 │ CH0 │ CL3 │ CL2 │ CL1 │ CL0 │ (регистр цвета) └──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┘ └─────┴─────┴─────┴─────┴─────┴─────┴─────┘ О д н а т о ч к а 2. Выполнение команды происходит после помещения числа 11000000b в ре- гистр команд с номером 46. Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 46 │ 1 │ 1 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ (регистр команд) └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ 3. При выполнении команды HMMV СЕ-бит регистра состояния номер 2 будет установлен в 1, а после выполнения - в 0. П р и м е р. Иллюстрация работы команды HMMV ──────────── 10 SCREEN 5 ' Возможны режимы SCREEN 5 ÷ SCREEN 8 30 VDP(36+1)=0: VDP(37+1)=0 ' X-координата прямоугольника 40 VDP(38+1)=0: VDP(39+1)=0 ' Y-координата прямоугольника 50 VDP(40+1)=25:VDP(41+1)=0 ' Длина по оси X 60 VDP(42+1)=19:VDP(43+1)=0 ' Длина по оси Y 70 VDP(44+1)=&B11011111 ' Чтобы прямоугольник был ровно окрашен, а не 71 ' └▲─┘└─▲┘ ' был "полосатым",значение младшего полубайта 80 ' │ │ ' регистра цвета должно быть равно значению 85 ' │ └── ' старшего полубайта 90 ' └─────── ' (в SCREEN 8 это правило может не выполнять- 100 ' ' ся, так как в этом режиме 256 цветов) 120 VDP(45+1)=&b00000000 ' Ориентация прямоугольника и выбор области 121 ' ' видеопамяти 130 VDP(46+1)=&B11000000 ' Код команды HMMV 140 A$=INPUT$(1) ' К о н е ц 2.8.3.5. К о м а н д а LMMC Историю цивилизации можно выразить в шести словах:чем больше знаешь, тем больше можешь. Э.Абу Команда LMMC передает данные из центрального процессора (CPU) в видео- память или расширенную память в указанную прямоугольную область через ви- деопроцессор. Так как данные для переноса организованы поточечно, то над точками адресата могут быть выполнены логические операции. В и д е о п а м я т ь или р а с ш и р е н н а я п а м я т ь ┌────────────────────────────────────┐ │ (DX,DY) │ │ ┌────────────┐ ──▶ DIX │ VDP CPU │ │ NX│ (X-направление)│ ┌────────────────┐ ┌────┐ │ │NY │ ◀───────────────────│ Видеопроцессор │◀───│ ЦП │ │ └────────────┘ │ └────────────────┘ └────┘ │ │ DIY (Y-направление) │ │ ▼ │ └────────────────────────────────────┘ Опишем последовательность выполнения команды LММС. 1. Вначале устанавливаются необходимые параметры в регистры команд VDP, а именно: α) MХD: задать область памяти а д р е с а т а (0: видеопамять; 1: расширенная память); DIX: направление для NX от X-координаты адресата (0: направо; 1: налево); DIY: направления для NY от Y-координаты адресата (0: вниз; 1: вверх). Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 45 │ 0 │ MXC │ MXD │ MXS │ DIY │ DIX │ EQ │ MAJ │ (регистр аргумента) └─────┴─────┴──▲──┴─────┴──▲──┴──▲──┴─────┴─────┘ │ │ │ Выбор области памяти для адресата ──┘ │ │ Направление пересылаемых данных (Y) ──────────────┘ │ Направление пересылаемых данных (X) ────────────────────┘ β) DX: Базовая X-координата а д р е с а т а (от 0 до 511); DY: Базовая Y-координата а д р е с а т а (от 0 до 1023); NX: "ширина" пересылаемого блока по X-направлению (от 0 до 511); NY: "ширина" пересылаемого блока по 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 └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ адресата (старшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 40 │ NX7 │ NX6 │ NX5 │ NX4 │ NX3 │ NX2 │ NX1 │ NX0 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в X-направлении (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 41 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ NX8 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в X-направлении (старшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 42 │ NY7 │ NY6 │ NY5 │ NY4 │ NY3 │ NY2 │ NY1 │ NY0 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в Y-направлении (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 43 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ NY9 │ NY8 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в Y-направлении (старшая часть)) γ) CLR: первый байт данных для пересылки. Р е ж и м ы SCREEN 5 и SCREEN 7 Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 44 │ 0 │ 0 │ 0 │ 0 │ CR3 │ CR2 │ CR1 │ CR0 │ (регистр цвета) └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ Р е ж и м SCREEN 6 Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 44 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ CR1 │ CR0 │ (регистр цвета) └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ Р е ж и м SCREEN 8 Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 44 │ CR7 │ CR6 │ CR5 │ CR4 │ CR3 │ CR2 │ CR1 │ CR0 │ (регистр цвета) └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ 2. Выполнение команды LMMC происходит после помещения числа 1011b в 4 с т а р ш и х битах регистра команд с номером 46 и помещения кода ло- гической операции в 4 м л а д ш и х битах регистра с номером 46. Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 46 │ 1 │ 0 │ 1 │ 1 │ LO3 │ LO2 │ LO1 │ LO0 │ (регистр команды) └──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┘ └─────┴─────┴─────┘ └─────┴─────┴─────┘ Код команды LMMC Код логической операции 3. Передавать второй байт и все последующие байты в 44-й регистр следу- ет с постоянной проверкой значений битов TR и СЕ в регистре состояния с номером 2. Приведем схему алгоритма выполнения команды LMMC. ┌────────────────────────┐ ┌───────────────┐ ┌────────────────────┐ │ Начало выполнения LMMC │──▶│ Установка VDP │──▶│ Выполнение команды │ └────────────────────────┘ └───────────────┘ └──────────┬─────────┘ ┌────────────────────────────────┘ ┌─────────────────────────▶│ │ ┌───────────────────▼───────────────────┐ │ │ Чтение регистра состояния с номером 2 │ │ └───────────────────┬───────────────────┘ │ ┌─────▼──────┐ │ │ Конец │ да (СЕ=0) │ │ команды ? ├─────────┐ │ └─────┬──────┘ │ │ │ нет (СE=1) │ │ ┌─────▼──────┐ │ │ нет (TR=0) │ Пересылка │ ┌────▼───────┐ ├────◀───────────────┤ окончена? │ │ Конец LMMC │ │ └─────┬──────┘ └────────────┘ │ │ да (TR=1) │ ┌────────▼─────────┐ │ │ Пересылка данных │ │ └────────┬─────────┘ └────◀─────────────────────┘ П р и м е р. Иллюстрация использования команды LMMC ─────────── 10:'Команда LMMC отличается от команды HMMC только тем, что в команде 20:'LMMC можно использовать л о г и ч е с к и е о п е р а ц и и. 30 DATA 3E,02,F7,87,31,01,32,00,E0,C9 :' Подпрограмма в машинных кодах, 40 FOR I=0 TO 9:READ A$ :' позволяющая "прочесть" содер- 50 POKE &HD000+I,VAL("&h"+A$):NEXT I :' жимое регистра статуса видео- 60 DEFUSR=&HD000: I=0 :' процессора с номером 2 70 SCREEN 8 :' Возможны SCREEN 5 ÷ SCREEN 8 80 VDP(36+1)=10:VDP(37+1)=0 :' X-координата блока 90 VDP(38+1)=10:VDP(39+1)=0 :' Y-координата блока 100 VDP(40+1)=30:VDP(41+1)=0 :' Длины сторон блока по осям OX 101 VDP(42+1)=30:VDP(43+1)=0 :' и OY 110 VDP(44+1)=PEEK(0) :' Цвет берем из RAM 120 VDP(45+1)=0 :' Ориентируем блок 130 VDP(46+1)=&B10110100 :' Подаем команду LMMC 140 A=USR(0):A=PEEK(&HE000) :' Читаем регистр стат. 2 ◀─┐ 150 CE=(A AND &B00000001) :' Выделяем бит CE │ 160 IF CE=0 THEN 210 :' Если он равен 0, то ─────│┐ 170 TR=(A AND &B10000000) :' иначе выделяем бит TR ││ 180 IF TR=0 THEN 140 :' Если он равен 0, то ─────┤│ 190 I=I+1:VDP(44+1)=PEEK(I) :' иначе задаем новый цвет ││ 200 GOTO 140 :' ─────────────────────────┘│ 210 A$=INPUT$(1) :' К о н е ц ◀───────────────┘ 2.8.3.6. К о м а н д а LMCM Когда я молод был, все тайны бытия, Казалось, я раскрыл. Ах, ошибался я! О.Хайям. Рубайят Команда LMCM пересылает данные из видеопамяти или расширенной памяти в центральный процессор в виде заданной прямоугольной области (в X-Y коорди- натах) через видеопроцессор. Данные пересылаются п о т о ч е ч н о . В и д е о п а м я т ь или р а с ш и р е н н а я п а м я т ь ┌──────────────────────────────────────┐ │ (SX,SY) │ │ ┌─────────────┐ ───▶ DIX │ VDP CPU │ │ NX│ (X-направление)│ ┌───────────────┐ ┌────┐ │ │NY │ ────────────────────▶│ Видеопроцессор│──▶│ ЦП │ │ └─────────────┘ │ └───────────────┘ └────┘ │ │ │ │ ▼ DIY (Y-направление) │ └──────────────────────────────────────┘ Сейчас мы расскажем вам о порядке выполнения команды LMCM. 1. Вначале устанавливаются необходимые параметры в регистры команд VDP, а именно: α) MXS: выбор области памяти для и с т о ч н и к а (0: видеопамять (VRAM); 1: расширенная память); DIX: направление для NX от Х-координаты точки источника (0: направо; 1: налево); DIY: направление для NY от Y-координаты точки источника (0: вниз; 1: вверх); Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 45 │ 0 │ MXC │ MXD │ MXS │ DIY │ DIX │ EQ │ MAJ │ (регистр аргумента) └─────┴─────┴─────┴──▲──┴──▲──┴──▲──┴─────┴─────┘ │ │ │ Выбор области памяти для источника ────────┘ │ │ Направление пересылаемых данных (Y) ──────────────┘ │ Направление пересылаемых данных (X) ────────────────────┘ β) SX: базовая X-координата точек и с т о ч н и к а (oт 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 │ SY7 │ SY6 │ SY5 │ SY4 │ SY3 │ SY2 │ SY1 │ SY0 │ (базовая координата Y └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ источника (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 35 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ SY9 │ SY8 │ (базовая координата Y └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ источника (старшая часть)) γ) NX: "ширина" пересылаемого блока по Х-направлению в точках (от 0 до 511); NY: "ширина" пересылаемого блока по Y-направлению в точках (от 0 до 1023). Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 40 │ NX7 │ NX6 │ NX5 │ NX4 │ NX3 │ NX2 │ NX1 │ NX0 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в X-направлении (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 41 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ NX8 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в X-направлении (старшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 42 │ NY7 │ NY6 │ NY5 │ NY4 │ NY3 │ NY2 │ NY1 │ NY0 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в Y-направлении (младшая часть)) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 43 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ NY9 │ NY8 │ (количество точек для └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ пересылки в Y-направлении (старшая часть)) 2. Выполнение команды LMCM происходит после помещения числа 1010b в 4 с т а р ш и х битах регистра команд с номером 46 и помещения кода ло- гической операции в 4 м л а д ш и х битах регистра с номером 46. Номера битов 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Р е г и с т р 46 │ 1 │ 0 │ 1 │ 0 │ 0 │ 0 │ 0 │ 0 │ (регистр команды) └──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┴──▲──┘ └─────┴─────┴─────┘ └─────┴─────┴─────┘ Код команды LMCM Код логической операции 3. Данные следует считывать из регистра состояния с номером 7, постоян- но проверяя биты TR и СЕ в регистре состояния с номером 2. Р е ж и м ы 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 │ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ Приведем схему алгоритма выполнения команды LMCM. ┌─────────────┐ ┌───────────────┐ ┌────────────────────┐ │ Начало LMCM │──▶│ Установка VDP │──▶│ Выполнение команды │ └─────────────┘ └───────────────┘ └───────────┬────────┘ ┌──────────────────────┘ ┌──────────────▼────────────────────────┐ ┌───────────▶ Чтение регистра состояния с номером 2 │ │ └──────────────┬────────────────────────┘ │ ┌────────▼──────────┐ нет (TR=0) │ │Пересылка окончена?├────────────────────┐ │ └────────┬──────────┘ │ │ │ да (TR=1) │ │ ┌────────────────────▼────────────────────────────┐ │ │ │ Чтение данных из регистра состояния с номером 7 │ │ │ └────────────────────┬────────────────────────────┘ │ │ │◀──────────────────────────────┘ │ нет (СЕ=1)┌────────▼─────────┐ да (CE=0) ┌────────────┐ └─────────────────┤ Конец команды ? ├─────────────▶ Конец LMCM │ └──────────────────┘ └────────────┘ З а м е ч а н и е 1. TR-бит должен быть "сброшен" перед выполнением команды. Чтение регист- ра состояния с номером 7 происходит после настройки видеопроцессора. З а м е ч а н и е 2. Даже если данные установлены в регистре состояния с номером 7 и бит TR установлен в 1, то видеопроцессор выполнит команду и бит СЕ будет установ- лен в 0. П р и м е р. Иллюстрация работы команды LMCM ─────────── 10 DATA 3E,00,F7,87,31,01,32,00,E0,C9:'Подпрограмма в кодах, "читающая" 20 FOR I=0 TO 9: READ A$ :'содержимое регистра статуса ви- 30 POKE &HD000+I,VAL("&h"+A$):NEXT I :'деопроцессора,номер которого на- 40 DEFUSR=&HD000 :'ходится в ячейке &hD001 50 I=&HA000 :'Начальный адрес области памяти, 51 SCREEN 8 :'где будем запоминать "картинку" 60 LINE (11,11)-(38,38),30,BF :' "К а р т и н к а" 61 VDP(32+1)=10:VDP(33+1)=0 :'X-координата запоминаемого блока 70 VDP(34+1)=10:VDP(35+1)=0 :'Y-координата запоминаемого блока 80 VDP(40+1)=30:VDP(41+1)=0 :'Длины сторон по осям OX и OY 90 VDP(42+1)=30:VDP(43+1)=0 100 VDP(45+1)=0 :'Выбираем направление запоминания 110 VDP(46+1)=&B10100000 :'Код команды LMCM 120 POKE &HD001,2:A=USR(0) :'Читаем регистр статуса 2 и ◀──┐ 121 A=PEEK(&HE000) :' │ 130 TR=(A AND &B10000000) :'выделяем бит TR. │ 140 IF TR=0 THEN 170 :'Если он не равен 0, то ──────┐│ 150 POKE &HD001,7:B=USR(0) :'иначе читаем регистр стат.7 и││ 160 POKE I,PEEK(&HE000):I=I+1 :'переносим данные ││ 170 CE=(A AND &B00000001) :'Выделяем бит CE рег. стат. 2◀┘│ 180 IF CE=1 THEN 120 :'Если он равен 1, то ──────────┘ 190 END :'К о н е ц