Что то я запутался.
Есть значение в HL, фактически адрес. Как сделать вызов подпрограммы по этому адресу?
Спасибо ))
Вид для печати
Что то я запутался.
Есть значение в HL, фактически адрес. Как сделать вызов подпрограммы по этому адресу?
Спасибо ))
Код:m0
jp (hl)
my_prog
...
call m0
...
push aa
jp (hl)
aa:
call #006f ;)
ух, через какое черезжопие удалось решить... пришлось городить таблицу вызовов ))
Код:;-- user app for test
org #8000
jr startapp
;-- table of need drivers
ttydev db "prscr"
;--
;-- table of core call's
sysc db #cd,0,0
ret
ttyadr db #cd,0,0
ret
;--
startapp
ld d,h
ld e,l
ld hl,sysc
inc hl
ld (hl),e
inc hl
ld (hl),d
ld hl,ttydev
call sysc
ld d,h
ld e,l
ld hl,ttyadr
inc hl
ld (hl),e
inc hl
ld (hl),d
ret
;-- end user app
Ой вэй... Чем вариант shurik-ua не устраивает? Сам им пользуюсь.
И если уж на то пошло...Код:ttydev:
db "prscr"
startapp:
ld de,ttydev
call callHL ; пусть в HL вернёт нужный адрес (который у тебя ложится в ttyadr+1)
callHL:
jp (hl)
Сокращается доКод:startapp
ld d,h
ld e,l
ld hl,sysc
inc hl
ld (hl),e
inc hl
ld (hl),d
Код:ld (sysc+1),hl
Он то как раз на мысль и навел ) спасибо ему.
Дело в том что у меня адрес вызова неопределен изначально (в hl нужные данные только один раз, на старте приложения). За остальными адресами надо слазить в таблицу драйверов. Пользовательская прикладуха ведь на старте только и имеет что в HL адрес подпрограммы которая отдает в HL же адреса нужных драйверов. То есть методом jp (hl) я могу определить только адрес системной функции отдающей адреса драйверов. А потом все, куку. А представьте что приложению нужно обратиться к 2,3,5 драйверам? )
В моем примере я запомнил адрес системной функции и некоего драйвера prscr, который могу вызывать теперь постоянно напрямую из ядра с любыми параметрами. Работает. Шурик помог ) ну или я не вкуриваю всей стройности jp (hl). (((
---------- Post added at 20:04 ---------- Previous post was at 19:57 ----------
Да я пока ждал ответ на*****кодил наспех, лишь бы работало.
Все равно не вкуриваю как без таблицы вызовов запомнить в приложении адреса нескольких разных драйверов ((
я так понял у тебя при входе в user_app должны вызваться несколько драйверов, причём адреса могут меняться от приложения к приложению ?
Верно. Произвольное количество. Какому то приложению достаточно tty типа hello world :-), какому то нужен и tty и клавиатура, какому то еще какие то.
Скорее от ядра к ядру (какое то собрано с AY, какое то с мышкой и так далее). По моей задумке, user_app вообще ничего о ядре не знает изначально и запрашивает адрес нужного ему для работы драйвера непосредственно при своей инициализации.Цитата:
причём адреса могут меняться от приложения к приложению ?