User Tag List

Показано с 1 по 10 из 105

Тема: Evacuator - help thread.

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11

    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    3,198
    Спасибо Благодарностей отдано 
    40
    Спасибо Благодарностей получено 
    128
    Поблагодарили
    103 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Exclamation

    Цитата Сообщение от 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 Посмотреть сообщение
    спасибо!!! теперь все ок!!!
    Ну, наконец-то.. Рад за вас!
    Последний раз редактировалось null_device; 03.10.2015 в 13:42.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •