Mask
#00
11 августа 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-демы !
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября