Судя по всему, на Апогее порты отображены в адреса ОЗУ, поэтому первые четыре константы в этом коде - это Апогеевский аналог адресов Векторовских портов 08-11.
Три последние константы - это константы управляющих слов для инициализации каналов таймера. Почему для второго канала это $be, а не $b6 - возможно, на Апогее используется другой режим таймера.
Так установка режима таймера и запись коэффициента деления обычно и происходит в прерывании, просто потому, что прерывание - это чуть ли не единственная надёжная привязка к реальному времени, благодаря которой можно управлять длительностью звучания нот без циклов задержек, во время которых центральный процессор не сможет делать ничего полезного.
Считай, что прерывание, это метроном, который тикает 50 раз в секунду. Зарядил канал таймера играть первую ноту - отсчитываешь нужное количество тактов метронома сообразно длительности ноты и выбранному темпу - затем программируешь канал таймера играть следующую ноту (или останавливаешь таймер, если нужна пауза).
- - - Добавлено - - -
Потому что диез (и бемоль) - это расстояние в полутон между нотами.
Знакомая же нам всем гамма до-ре-ми-фа-соль-ля-си, которую музыканты называют "до мажор", в плане разницы высоты звука между соседними нотами - это "тон, тон, полутон, тон, тон, тон, полутон"
Вот там, где между соседними нотами - всего полутон (между ми и фа, и между си и до) - ты и не видишь в таблице никаких диезов, потому что в мажорной гамме фа - это и есть ми диез, а до - это си диез предыдущей октавы.





Ответить с цитированием