(C) Max/CBX/BDA, 10.09.99.
__________________________________________
Все таки херово в Сибири, причем не
только зимой, но и осенью... Погодка вы-
далась самая что ни на есть мерзостная -
холодный ветер с дождичком. На градуснике
что-то около +7 - +8. И это еще ничего -
в прошлом году вообще 20 сентября снег вы-
пал...
С полчаса назад я приперся домой с уче-
бы, не миновав холодного дождичка. Сижу
вот, статью набиваю.
Да и не о кодинге эта статья - так, по
мелочам...
* * *
Почитал я в августе спековскую прессу и
решил кой-чего дополнить:
1) DEJA VU #08:
Я писал о глюке в плэйере от PT3. Глюк
заключался в подвисании проигрывателя во
время обработки команды Vibrate в канале B
(в редакторе ничего подобного не наблюда-
лось).
Где-то через месяц после выхода журнала
ко мне в руки попал BestView 2.8, в help'е
к которому Иван Рощин поведал о методе ус-
транения этого глюка: в player'е по смеще-
нию #0A34 необходимо байт #1A заменить на
#38.
Я считаю, что данный метод некорректен,
т.к. при этом команда Vibrate ВООБЩЕ не
будет использоваться в канале B. Чтобы она
все таки работала, необходимо заменить на
#1D !
Но и это еще не все ! В плэйере команда
Vibrate неверно работает во всех каналах,
независимо от способа fix'а ! Оказывается
(и в этом легко убедиться на слух), что в
проигрывателе (или компиляторе ?) перепу-
таны местами параметры этой команды.
Можете провести следующий эксперимент.
В редакторе сделайте какой-нибудь "долго-
играющий" сэмпл и поставьте в одном из ка-
налов ноту с этим сэмплом. Затем на ноте
поставьте команду Vibrate (COM 60A1) и
проиграйте паттерн. Вы услышите прерывис-
тый звук: #0A фреймов звук есть, 1 фрейм -
звука нет. Теперь компильните все это и
прослушайте вне редактора: 1 фрейм звук
есть, #0A фреймов - звука нет !
Для fix'a необходимы такие изменения
(плэйер откомпилен под адрес #C000):
╔═══════╤════════════════╤═══════════════╗
║ Адрес │ Есть │ Должно быть ║
╟───────┼────────────────┼───────────────║
║ #C86B │ LD A,(DE) │ LD A,(DE) ║
║ │ LD (#CBA3),A │ LD (#CB9B),A ║
║ │ INC DE │ INC DE ║
║ │ LD A,(DE) │ LD A,(DE) ║
║ │ INC DE │ INC DE ║
║ │ LD (#CB9B),A │ LD (#CBA3),A ║
║ │ LD A,#8C │ LD A,#8C ║
║ │ LD (#CB8A),A │ LD (#CB8A),A ║
║ │ RET │ RET ║
╟───────┼────────────────┼───────────────╢
║ #CA29 │ LD A,(DE) │ LD A,(DE) ║
║ │ LD (#CC26),A │ LD (#CC1E),A ║
║ │ INC DE │ INC DE ║
║ │ LD A,(DE) │ LD A,(DE) ║
║ │ INC DE │ INC DE ║
║ │ LD (#CC1E),A │ LD (#CC26),A ║
║ │ LD A,#1A; (#38)│ LD A,#1D ║
║ │ LD (#CC1B),A │ LD (#CC1B),A ║
║ │ RET │ RET ║
╟───────┼────────────────┼───────────────╢
║ #CD35 │ LD A,(DE) │ LD A,(DE) ║
║ │ LD (#C6B3),A │ INC DE ║
║ │ INC DE │ LD (#C6B8),A ║
║ │ LD A,(DE) │ LD (#C6A0),A ║
║ │ INC DE │ LD A,(DE) ║
║ │ LD (#C6B8),A │ INC DE ║
║ │ LD (#C6A0),A │ LD (#C6B3),A ║
║ │ XOR A │ XOR A ║
║ │ LD (#C667),A │ LD (#C667),A ║
║ │ LD L,A │ LD L,A ║
║ │ LD H,A │ LD H,A ║
║ │ LD (#C660),HL │ LD (#C660),HL║
║ │ RET │ RET ║
╚═══════╧════════════════╧═══════════════╝
После всего этого, компилированный RE-
SISTANCE звучит так же, как и в редакторе.
Да, еще одна вещь: почему-то инициали-
затор не возвращает флажки команд в исход-
ное состояние. Т.е., допустим, играет у
вас сэмпл с командой Vibrate, а вы в этот
момент прекращаете проигрывание музона,
инициализируете его (CALL #C000) и начи-
наете проигрывать снова. Так вот, в неко-
торых случаях, первые ноты мелодии могут
быть проиграны с "невыключенной" командой
Vibrate !
2) ADVENTURER #09:
Иван Рощин похвастался своей процедурой
перевода кода символа ("0...9", "A...F" и
"a...f") в соответствующее HEX-число #00 -
#0F. Занимала эта процедурка 10 байт, но
меньше, по видимому, сделать еще можно:
Было: Стало:
RES 5,A AND #1F
BIT 6,A SUB #10
JR NZ,$+4 JR NC,$+4
ADD A,#27 ADD A,#19
SUB #37
(10 байт) (8 байт)
3) BORN DEAD #0B:
Приведенную там как бы процедуру как
бы очистки экрана можно ЕЩЕ немного подсо-
кратить (как бы на байт):
Было написано: Следует читать:
XOR A XOR A
LD HL,#5B00 LD HL,#5B2B
DEC HL LD (HL),A
LD (HL),A OR (HL)
OR (HL) JR NZ,$-4
JR NZ,$-3
Только теперь она еще как бы очищает и
часть буфера принтера...
* * *
В заключение - небольшой анонс:
1) В RUSH #1 была статейка о том как звуки
делать (носом :). Так получилось, что
за неделю до прочтения сей статьи мне
приспичило самому заняться данной проб-
лемой. Из статьи я понял, что есть лю-
ди которых это интересует, посему решил
поделиться результатами собственных
изысканий.
Результаты представляют собой прос-
тенький редактор сэмплов. Редактор до-
вольно несложный, работа с диском вооб-
ще будет на БАСИКЕ. Тем не менее, сэмп-
лы можно делать приличные. В общем,
ждите следующего номера, а пока только
скриншот: