Логотип.
 Разделы сайта Cтатьи.
Сайт в разработке!

Статистика сайта.

Посещений за день: 22
Посещений за месяц: 5638
Посещений за год: 41045


Баннеры.

DMconnect
Maksy's PWS


Статистика в картинках.

likes counter


Погода.


  • Главная.
  • Новости.
  • Файлы.
  • Работы.
  • Контакты.
  • Чат "Пиво".
  • Статьи.
  • Ссылки.
  • Гостевая.
  • Вывод точки по таблице.

     Сейчас хотелось бы поговорить о выводе точки. Сразу скажу, что метод, предложенный 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)
    	LD      L,B
    	INC     H
    	OR      (HL)
    	LD      C,A
    	INC     H
    	LD      B,(HL)
    	LD      A,(BC)
    	OR      E
    	LD      (BC),A
    

     Процедура достаточно проста: по координатам X и Y с помощью заранее подготовленной таблицы вычисляется адрес нужной области экранной памяти, после чего в соответствующем байте устанавливается необходимый бит.

     Теперь приведу программу, создающую таблицу для этой процедуры. Без неё приведённая выше подпрограмма работать не будет.
    	LD H,СТАРШИЙ БАЙТ РАЗМЕЩЕНИЯ БУДУЩЕЙ ТАБЛИЦЫ
    	LD L,0
    	LD A,1
    	LD B,L
    	MET1    RRCA
    	        LD (HL),A
    	        INC HL
    	        DJNZ MET1
    	LD D,L
    	LD B,D
    	MET2    LD A,D
    	        RRCA
    	        RRCA
    	        RRCA
    	        AND 31
    	        LD (HL),A
    	        INC HL
    	        INC D
    	        DJNZ MET2
    	LD B,192
    	MET3    LD A,D
    	        RLCA
    	        RLCA
    	        AND 224
    	        LD (HL),A
    	        LD A,D
    	        AND 7
    	        LD E,A
    	        LD A,D
    	        AND 192
    	        RRCA
    	        RRCA
    	        RRCA
    	        OR 64
    	        OR E
    	        INC H
    	        LD (HL),A
    	        DEC H
    	        INC HL
    	        INC D
    	        DJNZ MET3
    	        RET
    

     Таблица должна располагаться по адресу, соответствующему требованиям данной процедуры. Её размер можно определить по приведённому выше коду.

     И напоследок — немного информации о зависимости адреса экранной памяти от координат точки.

     Допустим, нам необходимо рассчитать адрес экранной памяти по координатам X и Y. Координата X может принимать значения от 0 до 255, а Y — от 0 до 191.
    	Y  ▒▒▓▓▓░░░      X  ╬╬╬╬╬+++
    	   76543210         76543210
    
    	Полученный адрес:
    
    	010▒▒░░░ ▓▓▓╬╬╬╬╬
    	76543210 76543210
    	    │         │
    	    │         └─ младший байт адреса
    	    └─────────── старший байт адреса
    

     Здесь символами обозначены группы битов, используемые при формировании адреса. Последовательность битов, обозначенная знаками «+», не влияет на получаемый адрес и при его расчёте может иметь любое значение. Однако это относится только к расчёту адреса, а не к самой процедуре вывода точки.

     Надеюсь, эта информация поможет разобраться с принципом работы процедуры и использовать её в собственных графических программах.

    >>

    BitByByte, 2000 г. (2026).