Deja Vu
#09
13 ноября 1999 |
|
Доска почета - Ща скажу №1: оптимизация процедур, анонс журнала и новой аркадной игрушки.
(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 была статейка о том как звуки делать (носом :). Так получилось, что за неделю до прочтения сей статьи мне приспичило самому заняться данной проб- лемой. Из статьи я понял, что есть лю- ди которых это интересует, посему решил поделиться результатами собственных изысканий. Результаты представляют собой прос- тенький редактор сэмплов. Редактор до- вольно несложный, работа с диском вооб- ще будет на БАСИКЕ. Тем не менее, сэмп- лы можно делать приличные. В общем, ждите следующего номера, а пока только скриншот:
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября