ШТА?
Код:
RST8_entry:
call store_context_and_set_system_page
// Сохранили всё, что надо для вызова и включили системную страницу с адреса 0xC000
// считаем, что bc не изменяется при вызове
// Вычисляем адрес обработчика системной функции
ld hl,#0xC000
add hl,bc
ld c,(hl)
inc hl
ld b,(hl)
push bc
ret // Переходим на обработчик
// Выход
RST8_exit:
call restore_context_and_set_progpage
ret
store_context_and_set_system_page:
push:push:push
или ещё как аргументы кидаем, регистры сохраняем
ret
Код:
;RST 10h
jp sys ; вектор ДОС-а
...
;-------------------------------------------------
; ДОС-овый вектор
;-------------------------------------------------
sys: push hl
ld l,c ; номер команды
ld h,sys_tbl / 256 ; 0200h..02FFh массив мл.байтов адресов
ld c,(hl) ; загр. мл.байт адреса
inc h ; 0300h..03FFh массив ст.байтов адресов
ld h,(hl) ; загр. ст.байт адреса
ld l,c ; готовый адрес
ex (sp),hl ; в стек и
ret
;возврат в процесс по ret, без всяких call чего то там
такты считать будем или как?
на каждый рестарт в итоге СВОЯ таблица.
ЧТо мешает иметь таблицу, например в 2К величиной и там хранить до 1024 адресов функций?
в контексте затрат по памяти нет разницы - будет это 2 таблицы рестартов или 1, но сразу на 512 адресов (или 1024 или ещё там как).
и ты предлагаешь делать очередной тазис/издос. в котором всё засунуто в одну кучу. и bdos и драва и ioctl и остальное и пофиг на всё.
даже в старой cp/m есть разделение на уровни. есть bdos, есть bios, есть ccp. и попробуй там через call 5 к bios`у обратиться)))