Как написать игру для ZX Spectrum на ассемблере

       

Перемещения битов



Рисунок 6.3. Перемещения битов

ORG 60000 ENT $ LD A,(23296) ;начало - как в процедуре BIGSYM DBLSYM LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL LD DE,(23606) ADD HL,DE EX DE,HL LD HL,(23684) LD B,8 ;количество повторений внешнего цикла PUSH HL ; Во внешнем цикле по очереди берутся 8 байтов исходного символа ; для преобразования во внутреннем цикле DBLS1 PUSH BC ;сохраняем BC для внешнего цикла PUSH DE ;сохраняем текущий адрес ; в символьном наборе LD A,(DE) LD DE,0 ;подготавливаем пару DE для последующего ; формирования в ней расширенного ; байта символа LD B,8 ;количество повторений внутреннего цикла ; (равное числу бит в одном байте) ; Во внутреннем цикле каждый бит исходного символа дважды копируется ; в регистровую пару DE, где в конце концов получаем расширенный ; в два раза байт (Рисунок 6.3) DBLS2 RLCA PUSH AF RL E RL D POP AF RL E RL D DJNZ DBLS2 LD (HL),D ;вывод преобразованных байтов из INC HL ; пары DE на экран LD (HL),E DEC HL POP DE ;восстанавливаем значение DE INC H INC DE ;переходим к обработке следующего ; байта из набора символов POP BC ;восстанавливаем BC для внешнего цикла DJNZ DBLS1 POP HL INC HL ;переходим к следующему INC HL ; знакоместу экрана LD (23684),HL ;записываем в системную переменную ; адрес следующего символа RET

Чтобы напечатать на экране строку с каким-то текстом, можно воспользоваться той же программкой на Бейсике, что и для демонстрации процедуры BIGSYM.

Теперь в вашем распоряжении имеются три программы, в той или иной мере изменяющие форму стандартных символов и, чтобы лучше понять их работу, можно порекомендовать слегка «поиздеваться» над символами, создавая комбинированные программы. Например, часть символа увеличить по высоте, а оставшуюся часть - по ширине, или BIGSYM и DBLSYM соединить с программой BOLD. Надо сказать, что последний вариант дает совсем недурные результаты, в чем вы сможете убедиться, дойдя до последнего раздела этой главы.



Содержание раздела