Оберон-клуб «ВЄДАsoft» https://zx.oberon.org/forum/ |
|
Межслотовые вызовы подпрограмм https://zx.oberon.org/forum/viewtopic.php?f=89&t=212 |
Страница 1 из 1 |
Автор: | Zorko [ 08 июл 2014, 16:32 ] |
Заголовок сообщения: | Межслотовые вызовы подпрограмм |
Книга «Программирование на языке ассемблера в системе MSX-2» вещает про: Цитата: п.6. Межслотовые вызовы подпрограмм При выполнении программы может возникнуть ситуация, когда необходимо вызвать подпрограмму, находящуюся в текущий момент в неактивном слоте. Например, при режиме работы, когда на всех страницах включена только оперативная память, может понадобиться вызов подпрограммы BIOS, хранящейся в одном из слотов ПЗУ. В этом случае можно либо попытаться включить необходимые слоты и вызвать подпрограмму, либо выполнить межслотовый вызов. Межслотовый вызов выполняется подпрограммой BIOS CALSLT по адресу 1Ch. MSX-DOS также поддерживает эту подпрограмму. Перед вызовом в регистр IX нужно загрузить адрес требуемой подпрограммы BIOS, а в IY - указатель слота в виде: ... При межслотовом вызове CALSLT и CALLF прерывания автоматически запрещаются. При возврате управления из этих подпрограмм в MSX-1 прерывания остаются запрещенными, а в MSX-2 восстанавливается статус прерываний, который был установлен до вызова подпрограмм. Например, LD IX,0156h ; адрес чистки буфера клавиатуры LD IY,0 ; указатель слота CALL 1Ch ; межслотовый вызов EI ; включение прерываний в MSX-1 Понятно, что в этом случае регистры IX и IY не могут использоваться для передачи параметров. Для межслотового вызова можно использовать и команду рестарта. Например, RST 30h DB 0 ; указатель слота DW 6Ch ; установка SCREEN 0 Подпрограмма установки режима экрана (с прямым вызовом BIOS): Код: "C" void Basic_SCREEN_BIOS (char mode) __naked { Код: "C" void Basic_SCREEN_ISLT (char mode) { Встречаются также исходники, авторы которых не заморачиваются межслотовыми вызовами. Замыслившись над эдакой интересностью было решено сделать межслотовые вызовы опциональными, в стиле библиотек XDev, конфигурируемых без перекомпиляции. BasicCfg.h: Код: "C" /* Interslot calls of BIOS subroutines */ Код: "C" //#define INTERSLOT_CALLS |
Страница 1 из 1 | Часовой пояс: UTC + 2 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |