ZX Time #10
22 ноября 2002

                                 Кодерам
────────────────────────────────────────
                                        
       ВАРИАНТ ОРГАНИЗАЦИИ РАБОТЫ       
              С ДИСКОВОДОМ              
                                        
     (С) Александр Сизенко (Alex_S)     
                                        
    Судя по последним релизам, например,
Slider`a, перенос программ c ленты в TR-
DOS  еще  не потерял своей актуальности.
По сему нижеприведенный материал, навер-
ное, будет полезен.                     
                                        
    Некоторые  игровые  программы  имеют
функции  отгрузки/загрузки текущего coc-
тояния  игровой  ситуации на магнитофон.
Если  данная программа не портит систем-
ную  область, то проблем при "диcкoнaфи-
гaции" в принципе не возникает. Сложнее,
если программа поступает противным обра-
зом, например: располагая там свое тело.
Хочу   предложить  читателям,  наверное,
один из самых простых способов организа-
ции  работы таких игр c дисководом, раз-
paбoтaнный   автором  буквально  методом
"научного  тыка"  и  ни  в  коей мере не
претендующего на его оригинальность.    
                                        
      LD HL,#5С00       ;берем и стираем
      LD DE,#5С01       ;на хрен систем-
      LD ВС,#013A       ;ную     область
      LD (HL),L         ;Бейсика и TRDOS
      LDIR                              
                                        
      LD IY,#5C3A       ;восстанавливаем
                        ;стандартное    
                        ;значение IY    
      LD A,#FF                          
      LD (IY),A         ;кидаем сюда #FF
                        ;(просто так на-
                        ;до)            
      LD (#SCC8),A      ;если  этого  не
                        ;сделать,  будут
                        ;неприятности   
                        ;при   обращении
                        ;ко второй поло-
                        ;вине диска     
                                        
      LD (#5D0C),A      ;и сюда (зачем  
                        ;не знаю)       
                                        
      LD A,#С9          ;без команды RET
                        ;ничего работать
                        ;не будет       
                                        
      LD (#SCC2),A                      
      ЕХ AF,AF`         ;в A` будем  по-
                        ;сылать  5 или 6
                        ;для   LOAD/SAVE
      LD С,A            ;и  помещать в С
                                        
      LD HL,#6000       ;допустим, #6000
                        ;адрес блока те-
                        ;кущего  состоя-
                        ;ния            
COUNT LD DE,#0000       ;B (COUNT+1) не-
                        ;обходимо занес-
                        ;ти после загру-
                        ;зки (и  возмож-
                        ;ной распаковки)
                        ;программы  зна-
                        ;чение слова  по
                        ;адресу    #5CF4
                        ;(счетчик   сек-
                        ;тор, трек),т.e.
                        ;загружать/сохр-
                        ;aнять будем   в
                        ;конце тела про-
                        ;граммы, соотве-
                        ;тственно  длину
                        ;моноблока  Бей-
                        ;cuk - программы
                        ;увеличим на ве-
                        ;личину регистра
                        ;B (см. ниже)   
                                        
      LD B,1            ;к примеру,  за-
                        ;пись  не превы-
                        ;шает  256  байт
      CALL #3D13        ;c     некоторым
                        ;трепетом входим
                        ;в TR-DOS       
                                        
     Замечу, что все это работает только
c  драйвом  A, если Вы хотите, чтобы это
работало  на  диске B или даже на С и D,
то  необходима  небольшая  доработка при
установке системных переменных:         
                                        
      LD A,#FF                          
      ............                      
      LD (#SCC9),A      ;для  "B"  этого
                        ;хватит         
      LD (#5CCA),A                      
      LD (#5CCB),A      ;для С и D      
      ............                      
DRIVE LD A,0            ;в ячейку       
                        ;DRIVE+1   после
                        ;загрузки       
                        ;программы      
     LD (#5D16),A       ;необходимо     
                        ;занести   копию
                        ;ячейки    #5D16
                        ;(число 60+номер
                        ;накопителя)    
                                        
    Обращение  к этой п/п для LOAD будет
таким:                                  
                                        
                                        
     ........                           
     LD A,5             ;или LD A,6  для
                        ;SAVE           
     ЕХ AF,AF`                          
     CALL DOS                           
     ........                           
                                        
    Напомню,  что  процедура #3D13 рабо-
тает только c первым режимом прерывания.
При необходимости, выключим второй режим
на  время  обращения.  Ну и естественно,
если   в   системной   области   Бейсика
расположено  тело программы, сохраняем и
восстанавливаем ee значение.            
                                        
                 * * * 



Other articles:


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
Nemo open letters № 2.9
drop of solder - The decision PROBLEMS 1.2MB drive.
Litstranichka - Literary miniatures from readers Optron.
Project - The project is the game "Dungeons Black Castle.

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