╓───────────────────╖
║ ─── ПОЧТА ─── ║
╙───────────────────╜
Этот раздел пока остается
пуст. однако будем надеяться.
что будет все ОК.
A пока опубликуем новый хит-
парад игр.
тОР tEN 'SPECtROPHOBY'
1.НЛО:Враг неизвестен
2.Звездное наследие
3.DIZZY 1-X2
4.ELItE 2-3 (новосиб.)
5.ROBOCOP 1-3
6.BAtMAN 1-3
7.NIGEL MANSELL GP
8.tERMINAtOR 2
9.SPACE CRUSADE
10.LAZER SQUAD
╓────────────────────────────╖
║ ─── СЕКРЕтЫ tR-DOS ─── ║
╙────────────────────────────╜
При адаптации отгрузок в играх
многие наверняка сталкивались с
проблемой под названием IM2.
т.к. при обращении к tR-DOSy с
включенным IM2 происходит пови-
сание. Этого можно избежать нес-
колькими путями:
1.В начале подпрограммы отгрузки
выключить прерывание командой
IM1. a в конце обратно включить.
Это наиболее распространенный и
простой способ.
2.Сделать так. чтобы при работе
IM2 работал и tR-DOS. Как это
сделать? Вот на это сегодня мы и
дадим ответ.
Вначале рассмотрим что проис-
ходит при обработке прерывания.
После прихода импульса прерыва-
ния микропроцессор считывает с
шины данных байт - вектор преры-
вания (при стандартной шине -
это #FF). 3atem из памяти по ад-
ресу. обрaзуeмому вектором пре-
рывания и содержимым регистра I.
будут выбраны два байта - адрес
подпрограммы обработки прерыва-
ния. Но если прерывание пришло в
тот момент. когда работает
tR-DOS. то передача управления в
область ОЗУ автоматически вернет
на свое место стандартное ПЗУ ZX
Spectrum. По окончании выполнe-
ния подпогрaммы произойдет
возврат в основную программу.
Однако о "подмене" ПЗУ микропро-
цессор не узнает. и вместо про-
должeния работы ОС tR-DOS будет
выполняться "нечто" из ОС ZX
Spectrum.
Итак. для того. чтобы работать
со вторым режимом прерываний
нужно каким-то образом устано-
вить. какое ПЗУ в данный момент
включено. На первый взгляд зада-
ча невыполнимая. так как перек-
лючения ПЗУ происходят аппарат-
но. Однако можно воспользоваться
отличиями информации в ПЗУ и за-
дать различные адреса подпрог-
рамм обработки прерывания. Для
этого необходимо задать в регис-
ре I микропроцессора число от 0
до #3F. тогда адрес будет выбран
из области ПЗУ. Самое выгодное
здесь число 9. сейчас объясню
почему. так для ПЗУ ZX Spectrum
будет 65129(#FE82). a для ПЗУ
tR-DOS - 65535 (#FFFF) (и для
версии 5.01 и 5.03 и 5.04т).
Этим достигается наибольшая сов-
mectumoctb.
теперь при обработке прерыва-
ния при включенном ПЗУ ZX
Spectrum прерывание будет проис-
ходить по адресу 65129. и это
будет основной подпрограммой об-
работки прерывания. однако если
все установлено под другой ад-
рес. то здесь можно поставить JP
ADDR. где ADDR - настоящий адрес
обработки прерывания. A при
включенном ПЗУ tR-DOS прерывание
придет на адрес #FFFF и нам ос-
тaлся только один байт. но этого
вполне достаточно. так как туда
можно записать код команды
JR(#18). Смещение будет взято
уже из ПЗУ ZX Spectrum. и это
будет число #F3 (код команды
DI). таким образом получится JR
65524. В "отвоeвaнныx" 11 байтах
можно разместить подпрограмку
обработки прерывания и возврaщe-
ния в tR-DOS.
Вот эта подпрогрaмкa:
PUSH HL
LD HL.15663
EX (SP).HL
JP ADDR
где ADDR подпрограмма обработки
прерывания. В данном случае это
будет 65129 (при I=9).
A теперь для укрепления мате-
риала приведем пример.
Итак мы имеем: I=54(#36).
Первым делом определяем по како-
му адресу находится процедура
обработки прерывания. (справка:
таблицу адресов процедур обра-
ботки прерываний можно взять в
книге ZX Spectrum & tR-DOS фирмы
ПИтЕР. или в трехтомнике по
прогрaммировнию фирмы ИНФОРКОМ).
Итак мы получили адрес #8603.
теперь записываем в память наши
доработки:
#FE86: #C30386 (JP #8603);
#FFFF: #18 (JR 65524).
#FFES: #E5212FЗDEЗC30386.
И затем в основной программе
меняем значение I на #09. (это
делается LD A.N:LD I.A где N как
раз и будет I).
Ну что-ж. пожалуй это все. Ин-
формация взята из книги ZX-Spec-
trum & tR-DOS фирмы ПИтЕР.
Other articles: