(c) Андряшкин А., Ульяновская
обл., р.п.Старая Майна
Полностью согласен с мнением,
что прежде чем посылать в жур-
нал свои процедуры, нужно снача-
ла оптимизировать их по объему
или по скорости.
Вот, к примеру, процедура
Александра Соловьева (ZX РЕВЮ
N5/1995 стр.51) для индикации
амплитуды каналов музыкального
сопроцессора, которая у него за-
нимает 70 байт. Если в ней про-
вести простенькие перестановки
(убрать ненужные подпрограммы) и
заменить операции на более ко-
роткие, то можно укоротить ее на
10 - 15 байт, но, по моему, мож-
но пойти еще дальше.
140.
ANAL LD HL,#58E2
LD A,3
AN1 PUSH AF
LD HL,#FFFD
ADD A,7
OUT (C),A
IN A,(C)
PUSH HL
LD C,4
AN2 LD B,4
AN3 DEC H
DEC H
OR A
LD (HL),A
JR Z,AN4
LD (HL),126
DEC A
AN4 DJNZ AN3
LD DE,#07E0
ADD HL,DE
DEC C
JR NZ,AN2
POP HL
POP AF
DEC L
DEC A
JR NZ,AN1
RET
2
Эта процедура будет работать
в любой трети экрана (адрес ин-
дикатора 3 канала заносится в HL
[метка ANAL]).
Пользуясь случаем, хочу на-
помнить об одной простенькой
конструкции, если требуется от-
нять от регистровой пары HL ка-
кое-либо число (константу), то
обычно используется следующая
конструкция:
LD DE,NN
AND A ;т.к. неиз-
вестно состояние флага переноса
SBC HL,DE
Но эту конструкцию можно уко-
ротить на 2 байта (не говоря о
скорости выполнения), если вмес-
то вычитания использовать сложе-
ние, а константу переести в до-
полнительный код:
LD DE,0-NN
ADD HL,DE
Так в цифровой технике выполня-
ется операция вычитания.
* * *