Nicron #26
27 марта 1997

Программирование - ассемблер Z80 от Russos.

<b>Программирование</b> - ассемблер Z80 от Russos.
    



(c) RUSSOS

					Устранение  одного глюка
				       приводит к появлению дру-
				       гого, более тяжелого...

					    (прокодированное...)

   Привет всем! В раньних выпусках NICRON'а был цикл статей  про
асемблер Z-80. Там был дан список команд и их назначение. В этом
цикле статей будет продолжена эта тема и будут  рассмотрены  уже
различные процедуры (печать, работа с окнами и др.). В  основном
я буду рассказывать о процедурах, которые я написал  для  своего
boot'а (STATION CONTROL). Конечно, я не утверждаю, что это прог-
рамки являются идеальными. Нет. Этот материал дан скорее  всего,
для начинающих, т.к. посмотрев на очередное мое творение, он  бы
сказал: "А я могу лучше!" Ну и пожалуйста! Делай лучше!  Переде-
лывай мои процедуры, изучай их и создовай свои! Ну и может  быть
и какой-нибудь кодер возьмет эти процедуры в свою библиотеку...

   Что делать с этими процедурами? Т.к. я не знаю в каком асемб-
лере Вы работаете, то приведу лишь пример для  перевода в  Masm,
где я работаю.
   Для начала выгрузите текст из газеты на диск, потом загрузите
его в Word и удалите весь текст, оставив только текст программы.
Также удалите все комментарии в процедуре. К сожалению  Masm  не
понимает альтернативной кодировки и вместо текста будет бред(ал-
тернативную кодировку понимает ALASM, но я в нем не работаю!)  и
в конце  программы  поставте  значок  (EXT MODE + набрать  номер
26) это нужно для перевода в формат TASM 2. Далее выгрузете свое
творение на диск и загрузите TASM 4. Там нажмите клавишу  'I'  и
на запрос наберите имя своего файла (выгружать его надо с расши-
рением 'C'!) и дождитесь перевода в формат TASM 4. Выгрузив свой
текст  на  диск,  гризите  Masm и нажмите кнопочку 'I'. Появится
список  файлов в фотмате TASM 4. Выберете нужный и конвертируйте
его. Все! У вас есть текст в формате Masm. Теперь вы можете  его
редакторовать и отлаживать в STS в любой его версии (у меня 5.2)

   Для начала я покажу процедуру печати на экран. К ее достоинс-
твам следует отнести высокую скорость, понимание  альтернативной
кодировки и достаточно простой структурой. А к недостаткам:  об-
работка только одного управляющего кода '22'. Другие не были ре-
ализованы за ненадобностью. Сейчас я приведу текст  процедуры, а
после ее примеры ее использования и рекомендации по доработке.

;----------------
;Печать строк.
;HL-начало строки.
;В строке: 22-новая координата печати, потом два байта-сами ко-
;рдинаты: 1'ый - X, 2'ой Y, 0 - конец строки
;----------------
PRINT	LD	A,(HL)		;прием очередного байта.
	CP	#00		;проверка на 0.
	RET	Z		;выход, если строка закончилась.
	CP	#16		;подготовка к установки новой
	CALL	Z,UPR_22	;координате: D-x, E-y.
	CALL	PRINT_1		;печать символа.
	INC	HL		;увеличение и
	JR	PRINT		;переход к новому символу.
;--------
UPR_22	INC	HL		;║установка в регистрах D коор-
	LD	D,(HL)		;║динаты x, а в E - y.
	INC	HL		;║
	LD	E,(HL)		;║
	RET	 		;║
;--------
PRINT_1 PUSH	AF		;║сохранение на стеке всех реги-
	PUSH	BC		;║стров.
	PUSH	DE		;║
	PUSH	HL		;║
	CP	#16
	JR	Z,UPR1_22	;установка новой координаты.
	LD	L,A		;║расчет адреса верхней линии
	LD	H,#00		;║симвла в шрифте.
	ADD	HL,HL		;║FONT-адрес начала шрифта-#100
	ADD	HL,HL		;║
	ADD	HL,HL		;║
	LD	DE,FONT		;║
	ADD	HL,DE		;║
	LD	DE,(COOR)	;в DE адрес верхней линии знако-
				;места.
;--------
;Далее идет печать символа на экране из шрифта в знакоместо
;с адресом, находящимся в COOR. Если вам не нужна скорость,
;то можете этот фрагмент заменить другой програмкой:
;	...
;	LD	B,8
;LOOP	LD	А,(HL)
;	LD	(DE),A
;	INC	HL
;	INC	D
;	DJNZ	LOOP
;	...
;--------
;начало фтагмента
;--------
	LD	A,(HL)
	LD	(DE),A
	INC	HL
	INC	D
	LD	A,(HL)
	LD	(DE),A
	INC	HL
	INC	D
	LD	A,(HL)
	LD	(DE),A
	INC	HL
	INC	D
	LD	A,(HL)
	LD	(DE),A
	INC	HL
	INC	D
	LD	A,(HL)
	LD	(DE),A
	INC	HL
	INC	D
	LD	A,(HL)
	LD	(DE),A
	INC	HL
	INC	D
	LD	A,(HL)
	LD	(DE),A
	INC	HL
	INC	D
	LD	A,(HL)
	LD	(DE),A
	INC	HL
	INC	D
;--------
;конец фрагмента
;--------
	LD	DE,(COOR)	;загрузка в DE адреса знакоместа
	INC	DE		;увеличить адрес знакоместа.
	LD	A,D
	CP	#41		;║проверка на переход через гра-
	JR	Z,PR_L1		;║ницу 1'ого и 2'ого сегмента
	CP	#49		;║
	JR	Z,PR_L2		;║
	LD	(COOR),DE	;запоминания адреса знакоместа
	JR	PR_L0
PR_L1	LD	DE,#4800	;║коррекция адресов
	LD	(COOR),DE	;║
	JR	PR_L0		;║
PR_L2	LD	DE,#5000	;║
	LD	(COOR),DE	;║
;--------
PR_L0	POP	HL		;║востановление регистров и воз-
	POP	DE		;║врат.
	POP	BC		;║
	POP	AF		;║
	RET	 		;║
;--------
;стандартная процедура расчета адреса в дисплейном файле
;по знакомвстам.
;--------
UPR1_22	LD	A,E
	AND	#18
	OR	#40
	LD	H,A
	LD	A,E
	AND	#07
	OR	A
	RRA
	RRA
	RRA
	RRA
	ADD	A,D
	LD	L,A
	LD	(COOR),HL
	JR	PR_L0
;--------
COOR	DEFW	#4000		;адрес знакоместа.
;----------------

   Вот и процедура. Надеюсь Вам понятно,как она действует. А те-
перь примеры ее использования.

			ПРИМЕР ПЕРВЫЙ.

   Надо напечатать строку по координатам 2(X) и 1(Y).

	LD	HL,TXT
	CALL	PRINT
	RET
;----------------
PRINT	...
;----------------
TXT	DEFB	22,2,1,"NICRON - THE BEST!"
	DEFB	0		;конец строки.

			ПРИМЕР ВТОРОЙ.

   Надо напечатать любой символ (хоть '╬') в заданных координа-
тах (2,3)

	LD	А,22
	LD	DE,#0203
	CALL	PRINT_1		;установка нужной позиции печати
	LD	А,#CE		;код символа '╬'.
	CALL	PRINT_1		;печать.
	RET
;----------------
PRINT_1	...
;----------------

   При  желании  Вы  можете  легко модифицировать эту процедуру,
что бы она понимала другие управляющие коды. На до добавить про-
верку регистра A и производить действия, соотвествующие упр. ко-
ду. Если Вы добавляете цвет, то нужно добавить процедуру рассче-
та адреса в файле атрибутов по знакоместам

  Если у Вас что-то не работает, то позвоните мне, и я помогу.

  По всем вопросам и пожеланиям тоже звоните мне - поболтаем.

  Хотелось бы знать Ваше мнение: нужны ли такие статье в дальне-
йшим? Свое мнение можете сказать мне по  телефону  или  оставить
письмо на BBS, которые принимают почту для NICRON'а.


						   (c)RUSSOS
						461-84-81 (Саша)
						с 16.00 до 23.00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



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

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

BBS - список станций BBS ZXNet.

Программирование - ассемблер Z80 от Russos.

Графика - картинка АNSI графики.

Поиск - поиск игр, программ.

Юмор - Дембельская ракета рядового Кочкуркина.

Юмор - анекдоты.

Паяльник - LPT COVOX.

Поздравления - день рождения.

Реклама - реклама и объявления.

Обратная связь - контакты редакции.


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

Похожие статьи:
Programming - Banking in IAR and ZX Spectrum 128K
Юмор - Реклама.
Презентация - Компрессор экранов.
Обзор - О новых играх: PIRATES , MONTANA JONES 2.
Дебют - описание отдельных миссий к игре "Laser Squad".

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