Amazing
#01
29 сентября 1997 |
|
Ассемблер - начинющим: проигрывание музыки на прерываниях, бегущая строка и процедура часов.
╔══════════════════════════════════════╗ ║Раздел : Ассемблер ║ ║Текст : Ж.Юрий ║ ║Music : IRONMAN ║ ║Информация : Mr.Beeper, Activator. ║ ╚══════════════════════════════════════╝ Наверное каждый, кто только начинает изу чать ассемблер, сталкивается с этой проб- лемой. HEX - система. Я скажу прямо, что ничего удивитель- ного нет в нормальном "человеческом" отно- шении к этой системе. Но все же, я уверен, что чем больше Вы будете общаться со своим SPECCY на уровне ассемблера, тем более будет меняться Ваше отношение к HEX - сис- теме. Это просто неизбежно. Представте себе такую ситуацию. человек едет, скажем, за границу. Как лучше узнать о неизвестой стране, о жизни людей, кото- рые там живут, да и извлечь максимум поль- зы от поездки? Разумеется, если знать язык. После этого Вам откроются многие нюансы, которые Вы никогда бы не узнали иначе. Вы будете уже не "понимать", а "чувствовать". Компьютер "разговаривает" на своем языке и если Вы хотите (а ведь Вы конечно хоти- те!) узнать о нем больше, даже не узнать, а "почувствовать" его, изучайте его язык - шестнадцатиричную систему. И способ здесь только один - как можно больше "говорить" на этом языке - работать в HEX системе. Попробуйте, ради интереса провести такой эксперимент. Все, что связано с ассембле- ром, пишите только в HEX - системе, и только в ней, даже если поначалу будет трудновато. Хотя бы неделю. Ведь насколько естественней записать элегантное: LD HL,#4000 чем несуразное: LD HL,16384 и так далее. Я уверен, что через неделю работы на ассемблере в HEX - системе вмес- то: LD A,2 Вам захочется написать: LD A,#02 А такие вещи, как загрузка в регистр BC длины и кода операции TR-DOS: LD BC,#2005 вообще выглядит естественно и Вам даже не придет в голову загружать регистры B и C отдельно - это все будет происходить на подсознательном уровне - Вам откроется шестое чувство! ──────────────────────── Вообщем начиная с этого номера, мы с вами попробуем сделать маленькое, но красивое DEMO, а если вы потом его и пришлете к нам в редакцию, то оно будет вставлено в приложение журнала !!! Итак, все по порядку: Первое что надо нам сделать, это уста- новить атрибуты, сделать цыкл, а в цыкле опрос клавиши SPACE для выхода в TASM. ORG 25000 XOR A ; установка OUT (254),A ; атрибутов LD HL,#4000 ; LD DE,#4001 ; и очистка экрана LD BC,6144 ; LD (HL),L ; LDIR ; LD BC,767 ; LD (HL),7 ; < PAPER 0: INK 7 LDIR ; ;--------------- ЦЫКЛ ! CYCL LD BC,#7FFE ; если нажата кл. IN A,(C) ; "space" BIT 0,A ; то RET Z ; выход CALL ... ; вызов осн.подпр. HALT ; задержка JR CYCL ; возврат на начало Ну вот, с первой задачей мы и справились. Попробуйте сюда вставить еще проигрывание мелодии. А если вы не знаете как это сделать, тогда подсказываю, что надо для этого сделать: 1. Надо откомилировать мелодию в любом музыкальном редакторе, под удобный для Вас адрес. Если вы не знаете как компилировать мелодию, тогда почитайте HELP для редак- тора, там должно быть это написано. Да, ■и компилируйте с player'ом. 2. Подгрузить в память ассемблера эту мелодию можно следующим образом. В самом начале вашей программы надо напи- сать две вот такие строчки: ORG ... ; адрес INCBIN ... ; имя файла и мелодия будет уже находится в памяти. Давайте предположим, что мелодия у нас будет находится по адресу 49152. После этого поставте перед началом цыкла CALL 49152, а в самом цыкле надо влепить тоже команду CALL, но адрес уже придется изменить в соответствии с ре- дактором, в котором откомпилирована эта мелодия. Ниже преведены адреса инсталя- ции и проигрывания мелодии, для различных типов музыки: инсталяция│проигрыв. ──────────────────── │ Pro Tracker 1.1 - - - - - +0 │+6 │ Pro Tracker 2.1 - - - - - +0 │+6 │ Pro Tracker 2.4 - - - - - +0 │+5 │ Sound Tracker Pro x.x - - +0 │+6 │ ASC Sound Master x.x - - +11│+14 Ну вот, теперь мы знаем как мелодию проиг- рывать. А чтоб ее выключить, надо в цыкле изменить команду RET Z, на JR Z,EXIT И в конце цыкла дописать: EXIT CALL 49152 ; выключение мелодии RET ; выход в TASM Теперь все это попробуйте записать в TASM и запустить. Если все правильно, то эта небольшая програмка должна работать !!! * * * Конечно это ничто, что еще мы с вами сделаем, но для начала сойдет. А для тех, кто знает ассемблер чуть луч- ше, внизу приведена процедура бегущей строки по спрайтам. На диске есть как и этот скролл в формате TASM 4.0 так и шрифт для него, под название "SPR.FNT". Попробуйте разобраться с ним сами. ORG #8000 SCROLL LD A,(DATA) DEC A LD (DATA),A JR NZ,SCROL LD A,8 - ;расстояние LD (DATA),A ;между буквами LD HL,(TDAT) LD A,(HL) CP #FF - ;проверка на ко- CALL Z,NEW ;нец текста INC HL LD (TDAT),HL LD H,0 LD L,A ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL LD DE,#9000-512 ;адрес шрифта ADD HL,DE LD DE,POLY LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI SCROL LD IX,POLY LD HL,#50C0+31 ;размещение на LD B,16 ;экране KC PUSH HL RLC (IX+00) RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) DEC HL RL (HL) POP HL CALL SNOS INC IX DJNZ KC RET SNOS INC H LD A,H AND 7 RET NZ LD A,L ADD A,#20 LD L,A RET C LD A,H SUB 8 LD H,A RET NEW LD HL,TEXT LD (TDAT),HL LD A,(HL) RET POLY DW 0,0,0,0,0,0,0,0,0 DATA DB 8 TDAT DW TEXT TEXT DB " THIS IS POLYFORM MAGAZINE " DB #FF Если вы уже разобрались, то переходим к следующей процедуре, которая тоже встре- чается во многих demo. Это часы, которые предоставил нам ACTIVATOR. ________________________________ ;TIMING!; ;CODED AND COPYRIGHT BY ACTIVATOR'97; CALL NEW ;надо ставить перед ;цыклом TIKTAK LD A,(ZAD) DEC A LD (ZAD),A AND A RET NZ LD A,50 LD (ZAD),A LD A,(SEC1) INC A LD (SEC1),A CP #0A JR Z,NEXT1 LD HL,#50E5 CALL PRINT RET NEXT1 XOR A LD (SEC1),A LD HL,#50E5 CALL PRINT LD A,(SEC2) INC A LD (SEC2),A CP #06 JR Z,NEXT2 LD HL,#50E4 CALL PRINT RET NEXT2 XOR A LD (SEC2),A LD HL,#50E4 CALL PRINT LD A,(MIN1) INC A LD (MIN1),A CP #0A JR Z,NEXT3 LD HL,#50E2 CALL PRINT RET NEXT3 XOR A LD (MIN1),A LD HL,#50E2 CALL PRINT LD A,(MIN2) INC A LD (MIN2),A CP #06 JR Z,NEW LD HL,#50E1 CALL PRINT RET NEW XOR A LD (SEC1),A LD HL,#50E5 CALL PRINT XOR A LD (SEC2),A LD HL,#50E4 CALL PRINT XOR A LD (MIN1),A LD HL,#50E2 CALL PRINT XOR A LD (MIN2),A LD HL,#50E1 CALL PRINT RET PRINT LD (VIV+1),HL LD H,#00 LD L,A ADD HL,HL ADD HL,HL ADD HL,HL LD DE,#6A19 ADD HL,DE VIV LD DE,#0000 LD B,#07 LOOP LD A,(HL) LD (DE),A INC HL INC D DJNZ LOOP RET ZAD DB 50 SEC1 DB 0 SEC2 DB 0 MIN1 DB 0 MIN2 DB 0 На диске эта процедура тоже есть в фор- мате TASM 4.0 _______________ ------------------------------------------ Ну вот, на сегодня вроде-бы все, больше информации у меня не осталось. А если у Вас есть интересные процедуры и вы хотите с ними поделиться, тогда пишите в редакцию и мы опубликуем их в кратчайшие сроки. Продолжение следует ... ________________________
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября