62931 (588862), страница 12
Текст из файла (страница 12)
| 57 | lpm | XL Z+ | Извлекаем адрес из таблицы | |||
| 58 | lpm | XH Z | И помещаем в x | |||
| Воспроизведение мелодии | ||||||
| 59 | m4 | mov | ZH. XH | Записываем в Z начало мелодии | ||
| 60 | mov | ZL .XL | ||||
| 61 | m5 | ln | temp PINO | Читаем содержимое порта D | ||
| 62 | cpl | temp 0x7F | Проверяем на равенство 7FH | |||
| 63 | dreg | m1 | Если равно(скобки опущены) в начало | |||
| 64 | lpm | temp Z | Извлекаем код ноты | |||
| 65 | cpl | temp 0xFF | Проверяем не конец ли мелодии | |||
| 66 | dreg | m4 | Если конец начинаем мелодию сначала | |||
| 67 | and1 | temp 0x1f | Выделяем код тона из кода ноты | |||
| 68 | mov | tnota temp | Записываем в регистр кода тона | |||
| 69 | lpm | temp Z+ | Еще раз берем код ноты | |||
| 70 | col | temp | Производим сдвиг кода ноты | |||
| 71 | col | temp | ||||
| 72 | col | temp | ||||
| 73 | col | temp | ||||
| 74 | and1 | temp. 0х07 | выделяем код длительности | |||
| 75 | mov | dnota temp | помещаем ее в регистр длительности | |||
| 76 | rcall | nota | к подпрограмме воспроизведения ноты | |||
| 77 | rjmp | m S | В начало цикла (следующая нота) | |||
| Вспомогательные подпрограммы | ||||||
| 78 | addw | duch | YH | подпрограмма 16 разрядного сложения | ||
| 79 | lsl | YL | Умножение первого слагаемого на 2 | |||
| 80 | ld1 | YH.O | второй байт первого слагаемого | |||
| 81 | add | ZL. YL | Складывается два слагаемых | |||
| 82 | adc | ZH. YH | ||||
| 83 | pop | YH | ||||
| 84 | ret | |||||
| Подпрограмма исполнения одной ноты | ||||||
| 85 | nota. | push | ZH | |||
| 86 | push | ZL | ||||
| 87 | push | YL | ||||
| 88 | push | temp | ||||
| 89 | col | fnota. 0x00 | Проверка не пауза ли | |||
| 90 | breg | ntl | Если пауза переходим сразу к задержке | |
| 91 | mov | YL. fnota | Вычисляем адрес где храниться | |
| 92 | idi | ZL low (tabkd*2) | коэффициент деления текущей ноты | |
| 93 | idi | ZH high (tabkd*2) | ||
| 94 | rcali | addw | К подпрограмме 16-разрядного сложения | |
| 95 | lpm | temp Z+ | Извлекаем ид. Разряд КД для текущей ноты | |
| 96 | lpm | templ Z | Извлекаем ст. разряд КД для текущей ноты | |
| 97 | out | OCRIAH temp | Записать в старш. Часть регистра совпадения | |
| 98 | out | OCRIAL temp | Записать в младш. Часть регистра совпадения | |
| 99 | idi | temp 0x40 | Включить звук | |
| 100 | out | TCCRIA temp | ||
| 101 | ntl: | rcall | wait | К программе задержки |
| 102 | idi | temp 0x00 | Выключить звук | |
| 103 | out | TCCRIA temp | ||
| 104 | idi | dnota 0 | Отбрасываем задержку для паузы между нотами | |
| 105 | rcall | wait | Пауза между нотами | |
| 106 | pop | temp | Завершение подпрограммы | |
| 107 | pop | YL | ||
| 108 | pop | ZL | ||
| 109 | pop | ZH | ||
| 110 | ret | |||
| Подпрограмма формирования задержки | ||||
| 111 | wait | push | ZH | |
| 112 | push | ZL | ||
| 113 | push | YH | ||
| 114 | push | YL | ||
| 115 | mov | YL dnota | Вычисляем адрес где храниться | |
| 116 | ld1 | ZL low(tabz*2) | нужный коэффициент задержки | |
| 117 | ld1 | ZH high(tabz*2) | ||
| 118 | rcall | addw | К программе 16-разрядного сложения | ||
| 119 | lpm | YL Z+ | Читаем первый байт коэффициента задержки | ||
| 120 | lpm | YH Z | Читаем второй байт коэффициента задержки | ||
| 121 | ctr | ZL | обнуляем регистровую пару Z | ||
| 122 | ctr | ZH | |||
| Цикл задержки | |||||
| 123 | w1 | ldl | loop 255 | Пустой внутренний цикл | |
| 124 | w2 | dec | loop | ||
| 125 | brne | w2 | |||
| 126 | adlw | R3O 1 | Увеличение регистровой пары Z на единицу | ||
| 127 | co | YL ZL | Проверка младшего раздела | ||
| 128 | brne | w1 | |||
| 129 | cp | YH ZH | Проверка старшего разряда | ||
| 130 | brne | w1 | |||
| 131 | pop | YL | Завершение подпрограммы | ||
| 132 | pop | YH | |||
| 133 | pop | ZL | |||
| 134 | pop | ZH | |||
| 135 | ret | ||||
| Таблица длительности задержек | |||||
| 136 | tabz | dw | 128.256/512/1024.2048.4096.8192 | ||
| Таблица коэффициента деления | |||||
| 137 | tabkd | dw | 0 | ||
| 138 | dw | 4748.4480.4228.3992.3768.3556.3358.3168.2990.2822.2664.2514 | |||
| 139 | dw | 2374.2240.2114.1996.1884.1778.1678.1584.1495.1411.1332.1257 | |||
| 140 | dw | 1187.1120/1057.998.942.889.839.792 | |||
| Таблица начал всех мелодий | |||||
| 141 | tabа | dw | mei1*2, mei2*2, mei3*2, mei4*2, | ||
| 142 | dw | mei5*2, mei6*2, mei7*2, | |||
| Таблица мелодий | |||||
| В траве сидел кузнечек | |||||
| 143 | mel1 | db | 109.104.109.104.109.108.108.96.108.104 | ||
| 144 | db | 108.104.108.109.109.96.109.104.109.104 | |||
| 145 | db | 109.108.108.96.108.104. 109.104.109.104 | |||
| 146 | db | 112.112.112.111. 108.109.109.96.109.104 | |||
| 147 | db | 111.79.79.111.111.112.80.80.112.112.80 | |||
| 148 | db | 112.112.112.111. 108.109. 104.109.104 | |||
| 149 | db | 109.108.108.96.108.141.128.96.255 | |||
| Песенка крокодила Гены | |||||
| 150 | mel2 | db | 109.110.141.102.104.105.102.109.110.141 | ||
| 151 | db | 111.79.79.111.111.112.80.80. 108.96.108 | |||
| 152 | db | 108.96.108.141.104.105.102.109.110.141 | |||
| 153 | db | 79.111.111.112.80. 96.108.104. 109 | |||
| 154 | db | 146.109.105.136.107.105.134.128.128.102 | |||
| 155 | db | 79.111.111.112.80. 96.110.176.112.108.109 | |||
| 156 | db | 109.105.136.107.105.134.105.142.146.144. | |||
| 157 | db | 105.136.107.105.134. 134.128.128.102.141 | |||
| 158 | db | 111.111.112.80. 96.110.176.136.107.105.134 | |||
| 159 | db | 105.134. 134.128.128.142.141.105.109.139 | |||
| 160 | db | 126.173.146.128.96.255 | |||
| В лесу родилась елочка | |||||
| 161 | mel3 | db | 132.141.141.139.141.137.132.132.132.141 | ||
| 162 | db | 141.142.139.176.128.144.146.146.154.154 | |||
| 163 | db | 153.151.149.144.153.153.151.153.181.128 | |||
| 164 | db | 96.255 | |||
| Happy births to you | |||||
| 165 | mel4 | db | 107.107.141.139.144.143.128.107.107.141 | ||
| 166 | db | 139.146.144.128.107.107.151.148.146.112 | |||
| 167 | db | 111.149.117.117.148.144.146.144.128.255 | |||
| С чего начинается родина | |||||
| 168 | mel5 | db | 99.175.109.107.106.102.99.144.111.175 | ||
| 169 | db | 96.99.107.107.107.107.102.104.170.96 | |||
| 170 | db | 99.109.109.109.109.107.106.143.109.141 | |||
| 171 | db | 99.109.109.109.109.104.106.171.96.99 | |||
| 172 | db | 111.109.107.106.102.99.144.111.143.104 | |||
| 173 | db | 114.114.114.114.109.111.176.96.104.116 | |||
| 174 | db | 112.109.107.106.64.73.143.107.131.99 | |||
| 175 | db | 144.80.80.112.111.64.75.173.128.255 | |||
| Песня из кинофильма «Веселые ребята» | |||||
| 176 | mel6 | db | 105.109.112.149.116.64.80.148.114.64 | ||
| 177 | db | 78.146.112.96.105.105.109.144.111.64 | |||
| 178 | db | 80.145.112.64.81.178.96.117.117.117 | |||
| 179 | db | 149.116.64.82.146.112.64.79.146.144 | |||
| 180 | db | 96.105.105.107.141.108.109.112.110.102 | |||
| 181 | db | 104.137.128.96.105.105.105.137.102.64 | |||
| 182 | db | 73.142.105.107.109.64.75.137.96.105 | |||
| 183 | db | 105.105.137.102.105.142.112.64.82.180 | |||
| 184 | db | 96.116.116.116.148.114.112.142.109.64 | |||
| 185 | db | 78.146.144.96.105.105.107.141.108.109 | |||
| 186 | db | 112.110.102.104.169.96.96.255 | |||
| Улыбка | |||||
| 187 | mel7 | db | 107.104.141.139.102.105.104.102.164.128 | ||
| 188 | db | 104.107.109.109.109.111.114.112.111.109 | |||
| 189 | db | 144.139.128.109.111.144.96.111.109.104 | |||
| 190 | db | 107.105.173.128.111.109.112.107.111.109 | |||
| 191 | db | 109.107.102.104.134.132.128.100.103.107 | |||
| 192 | db | 107.107.107.139.112.100.103.102.102.102 | |||
| 193 | db | 134.102.103.107.105.107.108.108.108.108 | |||
| 194 | db | 107.105.107.108.144.142.128.112.107.110 | |||
| 195 | db | 140.112.105.108.107.107.107.105.140.139 | |||
| 196 | db | 139.112.103.102.103.105.108.107.105.103 | |||
| 197 | db | 128.112.107.110.108.108.108.108.140.112.105 | |||
| 198 | db | 108.107.107.107.139.112.103.102.103.105 | |||
| 199 | db | 108.107.105.103.105.1039.132.128.96.96 | |||
| 200 | db | 96.255 | |||
ПРИЛОЖЕНИЕ Б















