Micro #10
28 ноября 1998
  TR-DOS  

Tape и Disk - Адаптация программ к системе TR-DOS (часть 4).

┌═══════════════════════════════════════┐
║  АДАПТАЦИЯ ПРОГРАММ К СИСТЕМЕ TR-DOS  ║▒
└═══════════════════════════════════════┘▒
  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

                 ГЛАВА 4
      ─────────────────────────────
       ЗАГРУЗЧИКИ В МАШИННЫХ КОДАХ
     --------------------------------
     для тех, кто не знает, что такое
              машинный код.

   Несмотря на то,что знание ассемблера не
является  обязательным для понимания того,
о чём я буду писать дальше,  оно отнюдь не
повредит. Ещё более полезным является уме-
ние пользоваться каким-либо монитором-диз-
ассемблером,   рекомендую  воспользоваться
программой из пакета Ultraviolet/Infrared.
Это первые ассемблер и дизассемблер, кото-
рые  появились  на  рынке для ZX Spectrum.
Программа проста в обращении и вполне при-
емлема  для решения тех задач, которые бу-
дут разбираться в этой главе.  Позднее Вам
придётся перейти к чему-нибудь более серь-
ёзному (например, STS 6.2).
   Изложить последовательно и понятно  ор-
ганизацию загрузки файлов из машинного ко-
да для неподготоленного пользователя ─ за-
дача более чем сложная,но попробовать мож-
но.
   Начнём с самого простого.  Предположим,
что на ленте  имеется программа, состоящая
из четырёх файлов: файл на Бейсике,  кодо-
вый файл и два файла без заголовка. Изучив
бейсик-программу,  Вы пришли к выводу, что
она загружает кодовый файл и запускает его
с адреса 65000.
   С помощью копировщика вы определили,что
кодовый файл  загружается с адреса 65000 и
имеет длину 30 байт,длина файлов без заго-
ловка  равна  соответственно  6912 и 32768
байт.
   Теперь запустите кодовый файл туда, где
ему  положено находиться,  но запустите не
его, а Ваш дизассемблер. Дизассемблировать
память необходимо, начиная с адреса запус-
ка,  то есть с адреса 65000.  Предположим,
что дизассемблер показал следующее:

 65000  LD    IX,16384  ;стартовый адрес
 65004  LD    DE,6912   ;длина
 65007  LD    A,255
 65009  SCF
 65010  CALL  1366      ;вызов подпрограм-
;мы загрузки
 65013  LD    IX,25000  ;стартовый адрес
 65017  LD    DE,32768  ;длина
 65020  LD    A,255
 65022  SCF
 65023  CALL  1366      ;вызов подпрограм-
;мы загрузки
 65026  JP    40000     ;запуск программы
 65029  NOP

   Не берусь объяснять смысл всех этих за-
корючек. Если Вы знаете, что они обознача-
ют ─ Ваше счастье,  если нет,  то  и Бог с
Вами. Чтобы мало-мальски разбираться с за-
грузчиками, необходимо запомнить, что пос-
ле LD IX следует адрес загрузки файла,пос-
ле LD DE ─ его длина. Мнемоники LD A,255 и
SCF  устанавливают  системные  регисты,  а
CALL 1366 вызывает подпрограмму загрузки с
ленты. Адрес после CALL может изменяться в
зависимости от того, использует ли загруз-
чик стандартную подпрограмму загрузки,рас-
положенную в ПЗУ(как в данном примере),или
свою собственную.
   Таким образом, мы узнали, что загрузчик
загружает два файла,первый из которых(дли-
ной 6912 байт  и  адресом загрузки 16384),
очевидно, ─ заставка,   а второй (32768  и
25000 соответственно) ─ основной файл про-
граммы (обратите  внимание,   что данные о
длинах файла совпадают с данными,  предос-
тавленными копировщиком);  кроме того,  мы
узнали, что программа запускается с адреса
40000.
   Получив эти данные,  можно приступить к
адаптации программы.
   Пожалуй,  самое сложное,  что предстоит
сделать, ─ это записать  два файла без за-
головков на диск. Если у Вас есть програм-
ма PCopier,PCopier Plus или L-COPY, то за-
дача несколько упростится.  Достаточно бу-
дет скопировать файлы на диск, а затем вы-
полнить следующую программу:

  10  RANDOMIZE USR 15619: REM:
      LOAD "less 001"CODE 16384

  20  RANDOMIZE USR 15619: REM:
      SAVE "screen"SCREEN$

  30  RANDOMIZE USR 15619: REM:
      LOAD "less 002"CODE 25000

  40  RANDOMIZE USR 15619: REM:
      SAVE "main"CODE 25000,32768

   Разумеется,  адреса и имена файлов при-
годны только для данного примера.
   Существует, однако, немало способов ко-
пирования  файлов и без использования спе-
циальных  копирощиков.   Приведу  наиболее
простой для данного примера метод (в прин-
ципе,он пригоден для большинства случаев).
   После загрузки  файлов, загрузчик,  как
правило, запускает программу.   Обычно для
этого используется  уже упомянутая команда
JP XXXXX, где XXXXX ─ адрес запуска  прог-
раммы.Чтобы получить копию файла на диске,
нужно  загрузить  файлы в память с ленты и
записать их на диск.  Для этого можно вос-
пользоваться уже готовым загрузчиком, пре-
дварительно заменив инстукцию, запускающую
программу, на инструкцию, возвращающую уп-
равление  бейсик-интерпретатору,   то есть
вместо мнемоники  JP  нужно поставить RET,
код которой ─ 201.   В нашем примере этого
можно добиться,   выполнив оператор   POKE
65026,201. Значение по адресу,где располо-
жена инструкция JP, измениться на 201 (ко-
манда RET),что обеспечит возврат в бейсик-
систему после загрузки обоих файлов.
   Подготовив кодовый  загрузчик  подобным
образом,можно его запускать,не забыв обес-
печить  запись файлов на диск после завер-
шения  работы загрузчика.   Удобно набрать
программу в несколько строк:

  10 RANDOMIZE USR 65000: REM  Запуск за-
     грузчика

  20 RANDOMIZE USR 15619: REM:
     SAVE "screen"SCREEN$

  30 RANDOMIZE USR 15619: REM
     SAVE "main"CODE 25000,32768

   Когда на экране  появиться сообщение об
успешном выполнении программы,Вам останет-
ся только написать загрузчик  с  диска,  с
чем, я надеюсь, трудностей не возникнет.

       ────────────────────────────
   Главу 5 "КАК БОРОТЬСЯ С RAMTOP'ом", Вы
найдёте в следующем номере Micro.
       ----------------------------

 03.12.98.         Gloom Demons Inc.
               C.E. special for Micro 10.
 



Другие статьи номера:

BBS - ПОЛНОЕ описание работы с BBS на Спектруме.

Мнение - обзор игры жанра D&D - Last Herp of Light Force.

Tape и Disk - Адаптация программ к системе TR-DOS (часть 4).

Юмор - подборка анекдотов.

Pokes - подборка Poke's.


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

Похожие статьи:
Вступление - Читалка была написана за пару часов, меня полностью устраивает, без всякого цветного мельтешения и меню на треть экрана.
Demoparty - КАСик из Sinclair Club организует KIDSOFT'2004.
События 1 - добровольно покинул ряды lsg и oca наш кодер ex-mr. pi, ныне morphy.

В этот день...   20 января