12 августа 1997 |
|
╔══════════════════════════════════════════════════════════════╗
│├┌╟▒░╪▓╖╫┌▓┌┤└▄┌╜┬┼│█┬│▓ ПРОГРАММИСТАМ ┼▄╫└┘╨┬▄╫├┼▓╢├│╢└█▓└╙╜┬│
╚══════════════════════════════════════════════════════════════╝
(c) SpaceS MDM 294-23-76
Данную рубрику, если мне никто не воспрепятствует , буду вести
снова я(SpaceS,конечно)! Сейчас мне бы хотелось поговорить о вы-
воде точки (!) . Сразу скажу,что метод,предложенный SATSOFT'ом в
седьмом номере BODY , меня несколько не устраивает скоростью его
работы.Я думаю,что все это объясняется тем,что вышеназванный ко-
дер,издавая BODY,не читает других изданий,где,кстати, содержится
довольно много полезной информации(я говорю об ECHO#1).Именно об
ECHO'вской процедуре вывода точки я и собираюсь сейчас погово-
рить. Почему я решил еще раз его опубликовать ? Логичный вопрос.
Отвечаю: в ECHO подпрограмма вывода точки была напечатана в оши-
бкой (ошибка ли это???),к тому же я приведу здесь процедурку со-
здания таблицы к ней.Итак, начнем-с...
Вывод точки:
LD D,XPOSITION
LD B,YPOSITION
LD H,СТАРШИЙ БАЙТ АДРЕСА ТАБЛИЦЫ
LD L,D ;Ничего больше комментировать я не
LD E,(HL) ;буду,т.к. прога весьма простая.Ну
INC H ;а ежели кто-то не поймет,закиньте
LD A,(HL) ;мессагу на ABIGOR BBS или позвоните
LD L,B ;мне,буду объяснять персонально...
INC H
OR (HL)
LD C,A
INC H
LD B,(HL)
LD A,(BC)
OR E
LD (BC),A
А сейчас-программа,создающая к предыдущей процедурке таблицу ,
без которой все вышенаписанное работать не будет:
LD H,СТАРШИЙ БАЙТ РАЗМЕЩЕНИЯ БУДУЩЕЙ ТАБЛИЦЫ
LD L,0 ;L=0
LD A,1 ;A=1
LD B,L ;B=256
MET1 RRCA ;скроллируем A
LD (HL),A ;сохраняем в таблице
INC HL ;следующая ячейка
DJNZ MET1 ;NEXT B
LD D,L ;D=0
LD B,D ;B=256
MET2 LD A,D ;A=D
RRCA ;
RRCA ;
RRCA ;A=A/8
AND 31 ;выделяем пять последних битов в A
LD (HL),A ;сохраняем в таблице
INC HL ;следующая ячейка
INC D ;D=D+1
DJNZ MET2 ;NEXT B
LD B,192 ;B=192
METЗ LD A,D ;A=0
RLCA ;сдвиг аккумулятора
RLCA ;еще раз
AND 224 ;выделяем три первых бита A
LD (HL),A ;сохраняем в таблице
LD A,D ;A=D
AND 7 ;выделение трех последних битов в A
LD E,A ;E=A
LD A,D ;A=D
AND 192 ;выделяем два первых бита из аккумулятора
RRCA ;
RRCA ;
RRCA ;три сдвига вправо
OR 64 ;OR #40
OR E ;это ясно
INC H ;H=H+1
LD (HL),A ;сохраняем в таблице
DEC H ;H=H-1
INC HL ;следующая ячейка
INC D ;D=D+1
DJNZ METЗ ;NEXT B
RET ;THE END !
Как вы уже,наверное,успели догадаться,таблица может располага-
ться только по "ровному" шестнадцатиричному адресу.Ее размер по-
считайте сами ;-) !
И в заключение приведу еще немного полезной информации , кото-
рая,несомненно,поможет вам разобраться со всем вышеизложенным. И
это будет называться...
ЗАВИСИМОСТЬ АДРЕСА ЭКРАНА ОТ КООРДИНАТ,ПО КОТОРЫМ
ОН БУДЕТ РАССЧИТЫВАТЬСЯ.
Во загнул !
Короче,допустим, нам надо по координатам X и Y рассчитать ад-
рес экрана.Координата X может изменяться от 0 до 255,а Y-от 0 до
191.
Y ▒▒▓▓▓░░░ X ╬╬╬╬╬+++
76543210 76543210
Полученный адрес: 010▒▒░░░ ▓▓▓╬╬╬╬╬
76543210 76543210
│ │
Это стар- А это-
ший байт млад-
адреса в ший
видеопа-
мяти
Думаю,здесь даже идиот разберется.НО на всякий случай разъяс-
няю:значками "▒▒" или "╬╬╬╬╬" я обозначил определенную НЕИЗМЕНЯ-
ЕМУЮ последовательность битов в байте. А значками "+++" последо-
вательность битов,которая не влияет на будущий адрес в экране и
может быть абсолютно любой ( но учтите : это только при рассче-
те адреса,а не при выводе точки!!!)
Вобщем,разбирайтесь и пишите свои супер-мега-гига-ЗD-демы !
Other articles:
|
|
|
|
|
|
Similar articles:
В этот день... 21 November