+------------------------------+
| ----- ПРОГРАММИСТАМ ----- |
+------------------------------+
Сегодня в разделе процедуры:
1."Слияние картинок"
2."Инвертирование экрана"
З."Сдвиг влево на один пиксел"
4."Сдвиг вправо на один пиксел"
1." Слияние картинок "
Эта процедура объединяет картин-
ку, храняшуюся в ОЗУ , с текущим
экраном.Атрибуты не изменяются.
LD HL,16З84
LD DE,ADDR
LD ВС,6144
LOP LD А,(DE)
OR (HL)
LD (HL),А
INC HL
INC HL
DEC ВС
LD А,В
OR С
JR NZ,LOP
RET
Как она работает :
В пару регистров HL загружается
начальный адрес экрана , в пару
регистров DE загружается адрес
картинки храняшуюся в ОЗУ, реги-
стровая пара ВС служит счетчиком
В аккумулятор А загружается байт
с адресом в DE и выполняется ло-
гическое 'ИЛИ' ( OR ) этого зна-
чения с байтом экрана. Результат
помещается в область экрана.
HL и DE перемещаются на следу-
ющую позицию,счетчик уменьшается
Если счетчик не равен нулю, то
процедура возвращается назад для
повторения процесса со следующем
байтом.
2." Инвертирование экрана "
Эта процедура инвертирует все в
экране : если пиксель включен,он
сбрасывается, если выключен , то
устанавливается.
LD HL,16З84
LD ВС,6144
LD D,255
LOP LD А,D
SUB (HL)
LD (HL),А
INC HL
DEC ВС
LD А,В
OR С
JR NZ,LOP
RET
Как она работает :
В пару регистров HL загружается
адрес начала экрана, а в ВС за-
гружается его длина. В D-регистр
записывается число 255. Всякий
раз когда процедура возвращается
к LOP, в аккумулятор загружается
значение из D-регистра. Значение
байта,хранящегося по адресу,ука-
занному в HL,вычитается из акку-
мулятора,а результат загружается
в тот же самый байт.Таким обра-
зом делается инвертирование.
HL увеличивается , указывая на
следующий байт , а счетчик ВС
уменьшается на единицу , если он
не равен нулю, то процедура воз-
вращается к LOP.
З."Сдвиг влево на один пиксел"
Эта процедура сдвигает все
содержимое экрана на один пиксел
влево. Атрибуты не изменяются.
LD HL,22527
LD С,192
LOP1 LD В,З2
OR А
LOP2 RL (HL)
DEC HL
DJNZ LOP2
DEC С
JR NZ,LOP1
RET
Как она работает :
В пару регистров HL загружается
адрес последнего байта экрана, а
в регистр С загружается колли-
чество линий в экране. В регистр
' В ' загружается колличество
байтов в одной линии.Флаг пере-
носа устанавливается в ноль.
Байт, адресованый HL сдвигается
на один бит влево , бит переноса
копируется в крайний правый бит,
а крайний левый бит копируется
во флаг переноса. Пара регистров
HL уменьшается для указания на
следующий байт. Счетчик ' В '
уменьшается. Если он не равен 0,
то осуществляется переход на
LOP2 , иначе уменьшается коли-
чество обрабатываемых линий, и,
если оно не равно 0,подпрограмма
возвращается к процедуре LOP1.
4."Сдвиг вправо на один пиксел"
Эта процедура сдвигает все
содержимое экрана на один пиксел
вправо. Атрибуты не изменяются.
LD HL,16З84
LD С,192
LOP1 LD В,З2
OR А
LOP2 RR (HL)
INC HL
DJNZ LOP2
DEC С
JR NZ,LOP1
RET
Как она работает :
В пару регистров HL загружается
адрес начала экрана, а в регистр
'С' колличество линий на экране.
В регистр 'В' загружается колли-
чество байтов на одной линии.
Флаг переноса устанавливается в
0.Байт по адресу HL сдвигается
на один бит вправо, бит переноса
копируется в крайний левый бит,
а крайний правый бит копируется
во флаг переноса.Пара регистров
HL увеличивается , указывая на
следующий байт и счетчик ' В '
уменьшается.Если он не равен 0,
то программа переходит на LOP2,
иначе уменьшается колличество
обрабатываемых линий, и, если не
равно 0, подпрограмма переходит
на LOP1.
Небольшой ананос -
В следующем выпуске вы можете
узнать :
Как поставить защиту от Magic на
компьютере Scorpion .
Как перехватить кнопку Magic в
том же компьютере.
__________________________________________
Other articles: