Spectrophoby #02
20 октября 1995 |
|
╓───────────────────╖ ║ ─── ПОЧТА ─── ║ ╙───────────────────╜ Этот раздел пока остается пуст. однако будем надеяться. что будет все ОК. 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:
|
|
|
|
|
|
|
|
Similar articles:
В этот день... 21 November