|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 30, 2003 20:10:44 Изучаю работу таймера типа 8253. На обум толкать умные мысли в голову не стал поэтому решил запрограммировать музыку использованием этой и друго чипа 8255. Взял готовую прогу из Скэнлона и друга стащил на пару деньков, ну так вот и изу чаю я ее и естественно много дыр в этом сплошном лесу умных мыслей. Слабал музыку забацал тоже проге в тасме ни каких ошибок не делает, но при запуске исполнителя выдается ошибка: Run-time error R6003 Integer devide by 0 Помогите чем могете исходник прилогаю. Сам сидеть тоже не буду, буду медитировать вместе с Джордэйном. _1446291243__TERMIN.ASM |
|
|
Дата: Дек 1, 2003 16:41:58 Дык этож деление на ноль вроде ... |
|
|
Дата: Дек 1, 2003 16:44:56 Слушай а там "org 100" в начале не должно быть ? |
|
|
Дата: Дек 1, 2003 17:14:14 · Поправил: bsl_zcs У тебя там идёт проверка на конец нот (cmp di,0ffffh), а на самом деле конец не отмечен. Вероятно, ты его упустил когда набирал. Оно доходит до первой длительности, а она маленькая, и результат деления на него делителя таймера не влазит в регистр. Нулевое исключение - это не только division by zero, но и Division Overflow.... А код, который делает задержку циклом, выкинь. Он был актуален только для ibm PC. Скорости с того времени немного выросли. ;) Сделай туда нормальную задержку. |
|
|
Дата: Дек 1, 2003 17:56:11 Каким макаром например? |
|
|
Дата: Дек 1, 2003 20:40:14 Из того, что мне вспомнилось, наверное, проще всего в цикле смотреть биосовскую ячейку с таймерными тиками. В этом тоже нормального мало, но тебя же, судя по всему, загрузка процессора не смущает? ;) И точность у неё под виндами - плюс-минус одна автобусная остановка... :) Лежит она в [40:06Ch]. Длительность одного тика 55мс, так что под неё придётся поправить длительность нот. Или забить. Замени цикл задержки на что-нибудь вроде: push ds
mov cx,40h
mov ds,cx
shr bx,1
mov dx,[ds:6Ch]
wait2:
mov cx,[ds:6Ch]
sub cx,dx
cmp cx,bx
jb wait2
pop ds
Кстати, у тебя в коде масса опечаток. Например, вместо add di,2 по смыслу должно быть add bp,2. Набрав на гугле "spkr_on:loop spkr_on" ;) можно найти вордовский файл на китайском языке, где, в числе прочего, есть тот же пример, но набраный нормально. ;) |
|
|
Дата: Дек 2, 2003 20:26:14 Блин. Я тут единицу поделил на частоту своего проца 1100 МГц. Получил 909 пс. И по формуле в исходнике она есть (17(n-1)+5+4)(909*10 в степени -12)=0.01 получил 691889, но это число для cx cлишком громадно. Если справки по времени выполнения команд? Дай ссылки. |
|
|
Дата: Дек 2, 2003 22:14:24 Я тут прочел: "Как задавать вопросы?". И не пожалел думаю мне простят весь этот бред, но он от чистого сердца, если кого случаем своей дуростью задел в частности Володю. Прошу прощения, впредь постараюсь быть поаккуратней. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.042 |