ZX Review
#3-4
22 июля 1997 |
|
Форум - М.Бекарев. Расчет адреса экранной области по знакоместу и наоборот.
(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). ********************************
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября