Amazing #01
29 сентября 1997

Ассемблер - начинющим: проигрывание музыки на прерываниях, бегущая строка и процедура часов.

<b>Ассемблер</b> - начинющим: проигрывание музыки на прерываниях, бегущая строка и процедура часов.
╔══════════════════════════════════════╗
║Раздел : Ассемблер                    ║
║Текст : Ж.Юрий                        ║
║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
_______________


------------------------------------------
Ну вот, на сегодня вроде-бы все, больше

информации у меня не осталось.
                        

А если у Вас есть интересные процедуры

и вы хотите с ними поделиться, тогда

пишите в редакцию и мы опубликуем их в

кратчайшие сроки.


Продолжение следует ...
________________________



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

Electronic Magazine Amazing - первый номер нового компьютерного журнала "AMAZING"; внимание конкурс!

Архив - описание программ из приложения к журналу: Inter Mode Player v1.2, Stainless steel, Space crusade, Extreme's Tracker v1.32, Chopper duel.

Ассемблер - начинющим: проигрывание музыки на прерываниях, бегущая строка и процедура часов.

TR-DOS - отключение клавиши Break, опрос ВГ 93 на отсутствие диска, процедура позиционирование головки дисковода.

Железо - новые похождения Штирлица.

Новости - новости из Харькова: Impetus Led, Stalker, Enigma Group, Wanderer, Joker, Dr.Serg, Patsoft, Mr.Beeper.

Новости - Amiga или PC ???

Разное - Самая популярная игра америки: Magic: The Gathering.

Разное - Fantasy: Монолог крысы.

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

Реклама - сказочки про "Вовочку".


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

Похожие статьи:
Алгоритм - Один полезный трюк с ^ (алгоритм круга).
Проект - Тема этой половинки одна, проект новой, электронной некомпьютерной газеты 'CITY'.
Игры - прохождение игры Iron Lord .
Artique - Kejser_Soze: о том почему недостаток, невнимание, и иногда даже отрицательное отношение к ascii-art на Spectrum'е.
Игромания - секреты, пароли и приколы в играх: Адская Земля, Double Xonix, Зеркало.

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