(c) Бекарев Михаил,
г. Красноярск.
Я давний поклонник ZX (и ком-
пьютера и журнала). В основном,
пробую свои силы в программиро-
вании. Поначалу в Бейсике, как и
все, а теперь перешел на машин-
ные коды и очень жалею, что дол-
го не мог преодолеть так назы-
ваемого психологического барьера
при переходе с BASIC на ASSEM-
BLER. Поразительная разница! Не
только в скорости, но и в дос-
тупности. В кодах общаешься с
процессором как с хорошим това-
рищем, обо всем можно погово-
рить.
Начиная познавать ассемблер,
я столкнулся с проблемой расче-
та адреса экранной области по
знакоместу и наоборот. И решил
эту проблему прилагаемой таблич-
кой. Пользоваться ей не просто,
а очень просто!
Например, нам необходимо рас-
считать адрес по знакоместу с
координатами y=11, x=18.
H L
┌───┬──┬──┬──┬─┬─┬─┬─╥───┬──┬──┬──┬─┬─┬─┬─┬────────────────────┐
│128│64│32│16│8│4│2│1║128│64│32│16│8│4│2│1│ │
├───┼──┼──┼──┼─┼─┼─┼─║───┼──┼──┼──┼─┼─┼─┼─┼────────────────────┤
│ │ │ │ │ │4│2│1║ │ │ │ │ │ │ │ │Номер строки 0..7 │
├───┼──┼──┼──┼─┼─┼─┼─║───┼──┼──┼──┼─┼─┼─┼─┤ │
│ │ │ │16│8│ │ │ ║ 4│ 2│ 1│ │ │ │ │ │Y 0..23│
├───┼──┼──┼──┼─┼─┼─┼─║───┼──┼──┼──┼─┼─┼─┼─┤ │
│ │ │ │ │ │ │ │ ║ │ │ │16│8│4│2│1│X 0..31│
├───┼──┼──┼──┼─┼─┼─┼─║───┼──┼──┼──┼─┼─┼─┼─┤ │
│ │ │ │ 2│1│ │ │ ║ │ │ │ │ │ │ │ │Номер сегмента 0..2 │
├════════════════════╬════════════════════├────────────────────┘
│ │ 1│ │ │ │ │ │ ║ │ │ │ │ │ │ │ │Адрес экрана
└───┴──┴──┴──┴─┴─┴─┴─╨───┴──┴──┴──┴─┴─┴─┴─┘
Смотрим и набираем в таблице
по строке Y число 11 и отмечаем
его в самой нижней строке Адрес
экрана.
Число 11 набирается как 8
старшего байта и 2,1 младшего.
1 1 ║ 1 1
└───┴──┴──┴──┴─┴─┴─┴─┴───┴──┴──┴──┴─┴─┴─┴─┘
Теперь набираем по X число
18, это 16 и 2 младшего байта
1 1 ║ 1 1 1 1
└───┴──┴──┴──┴─┴─┴─┴─┴───┴──┴──┴──┴─┴─┴─┴─┘
Можно даже узнать, какой ад-
рес будет иметь 3 строка в дан-
ном знакоместе, добавив в строке
таблицы "номер строки" число 3
старшего байта:
1 1 1 1║ 1 1 1 1
└───┴──┴──┴──┴─┴─┴─┴─┴───┴──┴──┴──┴─┴─┴─┴─┘
Теперь мы видим все это как
битовую раскладку двухбайтового
регистра (например, HL).
1 1 1 1║ 1 1 1 1
└───┴──┴──┴──┴─┴─┴─┴─┴───┴──┴──┴──┴─┴─┴─┴─┘
128 64 32 16 8 4 2 1 128 64 32 16 8 4 2 1
Следовательно, старший байт
H=(64+8+2+1)*256=19200, а млад-
ший L=64+32+16+2=114, и, значит,
адрес равен 19200+114 = 19314.
Можно даже увидеть, что адрес
находится в первом сегменте эк-
рана, так как включен бит над 1
в строке "номер сегмента".
Обратный пересчет еще проще.
Разложив адрес экрана в битах,
нетрудно узнать координаты, пос-
читав даже на пальцах.
Единица в старшем регистре
(бит 6) обязательна, т.к. это
начало адреса экрана (64*256=
16384).
********************************