
Сообщение от
Andrey Vladimirovich
в им2
для мелодии компилированной в wham! с адреса 40000 в режиме always, по порядку вводятся следующие значения:
первый адрес вызывается при старте (40000)
второй адрес вызывается при остановке (0, т.к. ничего вызывать не нужно)
третий адрес вызывается каждое прерывание (40012)
четвертый адрес первый байт занимаемый процедурой (расположение в памяти, не более того).

правда адрес 39900 он не пропускает (почему такое происходит?), поэтому указываю тот, который он предлагает.
Потому, что в ПЗУ нужного вектора нет, а в ОЗУ значения можно записать только по адресу 255+256*154=39679\39680 (либо 255+256*155=39935\39936). По одному из них и заносится указатель на адрес, начала процедуры обработки прерываний (старший и младший байт).


Сообщение от
Andrey Vladimirovich
в бейсике
для запуска на бейсике ввести (для данного случая):
Код:
8 clear 39899
10 randomize usr 15619: rem: load"music" code 40000
20 randomize usr 15619: rem: load"im" code 39935
30 randomize usr 39971
Кстати, для той мелодии, что использовалась мною в демонстрации нужны другие адреса (ибо написана она не в wham!, воспроизводится не через бипер, и принцип прогирывания другой).
----
На самом деле, обработчик можно прописать по любому адресу (т.к. все три части не особо связаны между собой), занеся два байта в ячейки на которые указывает вектор прерываний. Для этого можно использовать программу autoIM2 стерев строки со 2 по 17 и набрать:
Код:
2 let m1=адрес при старте
4 let m2=адрес при остановке
6 let m3=адрес в прерывании
8 let i=адрес начала процедуры
10 let o=i
12 let z=старший байт вектора (0-255)
в своей программе же нужно вписать:
Код:
здесь z и i - числа, соответствующие переменным использованным в предыдущей программе!
10 poke 255+256*z,i-256*int (i/256)
12 poke 255+256*z+1,int (i/256)
либо вычислить все значения заранее.
----
Сам долго не мог разобраться, как работают прерывания, пока не допетрил, что вектор прерываний указывает на две ячейки, содержимое которых указывает на адрес начала процедуры обработки прерываний. Что-то вроде рекурсии: go to n, где в строке n стоит go to m, а уже со строки m располагается подпрограмма.
----
добавил вложение.. enjoy it! 
----

Сообщение от
Andrey Vladimirovich
спасибо!!! теперь все ок!!!
Ну, наконец-то.. Рад за вас!