┌══════════════════════════════════════════════════════════════┐
│▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ PUSH HL ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│
└══════════════════════════════════════════════════════════════┘
(C)SATSOFT PHN 270-72-36
СЕГОДНЯ Я ПРОДОЛЖАЮ РУБРИКУ ПОД КОДОВЫМ НАЗВАНИЕМ 'PUSH HL' И
ПРЕДЛАГАЮ ВАШЕМУ ВНИМАНИЮ ОЧЕНЬ ПРОСТЕНЬКУЮ ПРОЦЕДУРУ ВЫВОДА
ТОЧКИ НА ЭКРАН:
;ВЫВОД ТОЧКИ
ORG 40000
LD D,10 ;КООРДИНАТА Х
LD E,11 ;КООРДИНАТА Y
LD A,#AF ;РАСЧЕТ АДРЕСА ПО КООРДИНАТАМ
SUB E
RET C
LD E,A
AND A
RRA
SCF
RRA
AND A
RRA
XOR E
AND #F8
XOR E
LD H,A
LD A,D
RLCA
RLCA
RLCA
XOR E
AND #C7
XOR E
RLCA
RLCA
LD L,A
ТЕПЕРЬ МЫ ЗНАЕМ НОМЕР СЕГМЕНТА, РЯДА, СТОЛБЦА И ЛИНИИ. ВСЕ ЭТИ
ДАННЫЕ ХРАНЯТСЯ В РЕГИСТРОВОЙ ПАРЕ 'HL'.Т.К. ДАННАЯ ЛИНИЯ В
ЗНАКОМЕСТЕ ИМЕЕТ 8 ПИКСЕЛОВ, А ВКЛЮЧИТЬ НУЖНО ТОЛЬКО ОДИН ИЗ
НИХ, ТО НЕОБХОДИМО РАССЧИТАТЬ КАКОЙ БИТ ТРЕБУЕТСЯ ВКЛЮЧИТЬ.
ФАКТИЧЕСКИ, ЕГО НОМЕР ОПРЕДЕЛЯЕТСЯ ОСТАТКОМ ОТ ДЕЛЕНИЯ
КООРДИНАТЫ Х НА 8, А ВЫЧИСЛЯЕТСЯ ЭТОТ ОСТАТОК - ПУТЕМ
МАСКИРОВАНИЯ ПЯТИ СТАРШИХ БИТОВ. НО ДЕЛО В ТОМ, ЧТО КООРДИНАТА Х
ИЗМЕНЯЕТСЯ СЛЕВА НАПРАВО,Т.Е. 0,1,2,3,...,175, А НОМЕРА БИТОВ В
БАЙТЕ, СООТВЕТСТВУЮЩИМ НАЙДЕННОЙ ЛИНИИ ИДУТ НАОБОРОТ,Т.Е.
7,6,5,...,0.ПОЭТОМУ НУЖНО СДЕЛАТЬ ПРЕОБРАЗОВАНИЕ. В РЕГИСТР 'А'
ВВОДИТСЯ ЧИСЛО '#FE'(11111110), ПОСЛЕ ЧЕГО ДЕЛАЕТСЯ ВРАЩЕНИЕ
ЭТОГО БАЙТА N+1 РАЗ, ГДЕ N - ОСТАТОК ОТ ДЕЛЕНИЯ Х НА 8.
LD A,D ;КООРДИНАТА Х
AND #07 ;МАСКИРОВАНИЕ
LD B,A ;ОСТАТОК ОТ ДЕЛЕНИЯ Х НА 8
INC B ;+1
LD A,#FE ;ВВЕЛИ БАЙТ 11111110
LOOP RRCA ;ВРАЩЕНИЕ N+1 РАЗ
DJNZ LOOP
LD B,#FF ;ИНВЕРСИЯ,ЧТОБЫ ПЕЧАТЬ ТОЧКИ БЫЛА ЧЕРНЫМ
XOR B ; ПО БЕЛОМУ
LD B,A ;ЗАПОМНИЛИ В РЕГИСТРЕ 'B'
LD A,(HL) ;В 'А' ГРУЗИМ ЗНАЧЕНИЕ ИЗ ЭКРАНА
OR B ;ВКЛЮЧЕМ ТРЕБУЕМЫЙ БИТ
LD (HL),A ;ГРУЗИМ В ЭКРАН ПОЛУЧЕННЫЙ РЕЗУЛЬТАТ
RET ;ВЫХОД ИЗ ПРОЦЕДУРЫ :)
ВМЕСТО КОМАНДЫ 'OR B' МОЖНО ИСПОЛЬЗОВАТЬ 'XOR B' И ПЕЧАТЬ БУДЕТ
ПРОИЗВОДИТЬСЯ ПО XOR'У.ПО ИДЕЕ, ВСЕ ДОЛЖНО БЫТЬ ПОНЯТНО, Т.К.
ПРОГА ОЧЕНЬ ПРОСТАЯ И К НЕЙ В ДОБАВОК ПРЕДОСТАВЛЕНО БОЛЬШОЕ
КОЛИЧЕСТВО КОММЕНТАРИЕВ.
ПИШИТЕ О ВСЕМ, ЧТО ВАС ИНТЕРЕСУЕТ ПО АССЕМБЛЕРУ В РАЗУМНЫХ
ПРЕДЕЛАХ.ПРИСЫЛАЙТЕ СВОИ ПРОГРАММЫ, И Я ИХ ОБЯЗАТЕЛЬНО(!)
ОПУБЛИКУЮ.