svofski,
Если главная программа читает данные из стека для например рисования на экране или любых других случаев когда sp указывает не на стек главной программы, а на некие данные мы всегда читаем так pop B. Это гарантирует что bc можно использовать в прерывании для восстановления стека. Если же прерывание случилось когда главная программа использовала обычный стек, то push b в прерывании ничего не делает полезного, но и ничего не портит.
Не помню чей именно это метод изначально, но впервые я прочитал о нем от Jerry на этом форуме.
Кажется я нашел в чем была проблема. После того как в основной программе я делал xra a, out $10, я восстанавливал стек lxi sp, xxxx. Если прерывание происходило после out $10, то стек указывал на адрес в квазидиске где-то в районе 4k, это как раз попадало на музыку в основной памяти.
Поменял местами восстановление стека и выключение квазидиска и все стало работать как нужно. Можно двигаться дальше
- - - Добавлено - - -
Лечение не идеальное, так как прерывание будет корраптить данные квазидиска в этот момент и восстановить не получится, но в моем текущем случае это не страшно так как стек основной программы находиться в диапазоне $7ff80-$8000 и по эти адресам ничего полезного в квазидиске нет.
- - - Добавлено - - -
Лучше всего наверное использовать квазидиск для стека в основной программе. Это наверное упростит инициализацию данных после старта если программа будет больше 32к. Можно будет не боятся что стек запортит основную программу.
- - - Добавлено - - -
Если программа запускается из под операционной системы, может ли она менять данные ниже $100? Или они зарезервированы под систему?
- - - Добавлено - - -
Было бы интересно узнать, но не супер важно сейчас, так как основная программа не делает di






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