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:
System - tips for beginning programmers.

В этот день...   21 November