Кто нибудь знает способы? Правда, забыл зачем мне это надо :)
Вид для печати
Кто нибудь знает способы? Правда, забыл зачем мне это надо :)
Во-первых имеет смысл ТОЛЬКО ДЛЯ ПОЗИЦИОННО-НЕЗАВИСИМОГО КОДА.Цитата:
Сообщение от jim
Зависит от возможности ли использование заранее известного статического
адреса памяти. По этому адресу загоняется POP HL : JP (HL).
делаешь CALL на RET, после этого снимаешь со стека адрес инструкции после CALL
call 82
addr dec sp
dec sp
pop hl ; hl=addr
Ты забыл прерывания запретить :v2_wink2:Цитата:
Сообщение от goodboy
Для этото RST нужно иметь по известному адресу в памяти.Цитата:
Сообщение от goodboy
...на котором возникло прерывание...Цитата:
после этого снимаешь со стека адрес
А за это вообще руки отрывать, обязательно медленно и обязтельно чтоб мучтельно.Цитата:
call 82
за что такая жестокость, только если rom сменится ?Цитата:
Сообщение от fk0
Такими выходками вы ставите железячников в большой тупик :)Цитата:
Сообщение от goodboy
код 201 может быть в знакогенераторе отыскать? его вряд-ли куда-то денут или поменяют...
Да, кстати, команду Call 82 не может заменить команда HALT? Если уж это прерывание портит стек ниже SP, то адрес прерванной им процедуры оно все равно туда положит.
Супер !!! Велеколепное решение !!! А что бы решить проблему с IM 2 и тому подобное можно сделать CALL 56 !!! Я, надеюсь, правильно вспомнил адрес BASIC'овского прерывания ??? ...Цитата:
Сообщение от TomCaT
эхх молодеш
ld hl,#e9e1 ; pop hl : jp (hl)
; ld de,(#4000)
ld (#4000),hl
call #4000
;ld (#4000),de
в hl - адрес возврата
если вдруг резко понадобилось сохранить содержимое памяти
то можно добавить то что за точкой с запятой
О, вот это то самое! Спасибо всем. А где бы это можно было бы применить?
Кисо... а ты зачем просило то?
воще мона в результате прогу настроить...
на конкретный адрес
гаккон... а как вы это делаешь? проставляешь адресы переходов?
Вообще это активно юзается в плагинах RC, все плагины настраиваются на работу с адреса загрузки. С ходу еще могу вспомнить Laser Compact - распаковщик самонастраивался.
А в gens, например, не тот же принцип? Грузится по любому адресу. Потом работает только с этого адреса.Цитата:
Сообщение от Spectre
Сейчас глянул Gens - там тоже исполбзуется автонастройка на адрес запуска. Но я писал про современные утилиты (RC, LC), Gens это уже история.
Нет гарантий однако, что не снимет, например, его в регистр и чем-то ещё не загадит стек.Цитата:
Сообщение от TomCaT
Т.е. возвращаться из себя процедура прерывания будет не через стек?Цитата:
Сообщение от fk0
Тогда пожалуй гарантии нет.
Но если узнавать сразу после вызова из Васика, то сдрес вызова по USR попадает в BC.
Зачем такие сложности, все делается также как на x86
call на pop
call label1
label1: pop hl
в hl получаем значение label1
Во-первых, call - команда абсолютного перехода, а абсолютных адресов мы не знаем. :v2_tong:Цитата:
Сообщение от deathsoft
Ради интереса представил себе обработчик прерываний который на стеке не оставляет адрес.
EX (SP),HL
LD (WHERE+1),HL
...(сам обработчик)
POP HL
...(тут надо стек попортить что адрес врагам не достался, HL не менять)
WHERE JP 0
Выглядит несколько нереально... но почему бы и нет?
Да я уже понял, что чушь написал. Давно под z80 ничего не писал, поэтому забыл что в call абсолютный адрес прописывается. Привык уже к x86, где все адреса в командах перехода относительные.Цитата:
Сообщение от Titus