#00
12 августа 1997

Программистам - Хотелось бы поговорить о выводе точки.

<b>Программистам</b> - Хотелось бы поговорить о выводе точки.

╔══════════════════════════════════════════════════════════════╗
│├┌╟▒░╪▓╖╫┌▓┌┤└▄┌╜┬┼│█┬│▓ ПРОГРАММИСТАМ ┼▄╫└┘╨┬▄╫├┼▓╢├│╢└█▓└╙╜┬│
╚══════════════════════════════════════════════════════════════╝
(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-демы !



Другие статьи номера:

Вступление - Содержание номера.

Фантазия - ZX-Net и все, все, все...

Железо - Схема турбирования Z-80.

Программистам - Хотелось бы поговорить о выводе точки.

Тестик - Настоящий ли вы любитель ZX-Spectrum?

The end - Редакторы и авторы.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
PRICE LIST - Реклама и объявления ...
Терминалка - Что такое модем. - Макросы. Text и Hobeta.
Быстренько - самая быстрая процедура расчета адреса экрана по координатам и самая быстрая процедура печати точки.
PartyZone! - Первое и последнее демопарти под маркой Конструкции Хаоса, проводимая в третьем тысячелетии, будет проходить в Санкт-Петербурге, Россия в августе 2001 года.
Информация - "Sprinter-97". Описание и возможности.

В этот день...   7 октября