Ассемблер - Оверлеи для JC: Описание методов создания утилит работающих под управлением Jemmini_Commander 4.0T.

Virtual Worlds #01
 ┌────────────────────────────┐
░▒░ JEMMINI COMMANDER ▒░▒░ ░ ░▒░▒▓▒▓ FOREVER █▓▒▓▒░▒░ ░ └────────────────────────────┘

                (C) TimeKeeper


  Программа эта довольно старая,
но я думаю еще есть люди которые
ей пользуются. Именно  для них и
предназначена данная статья.


  Сегодня   появляется  огромное
количество всевозможных команди-
ров,  плохих  и  хороших. Вкусы,
естественно,  у  всех  разные, и
каждый для себя выбирает то, что
ему больше подходит. До недавне-
го времени я использовал Jemmini
Commander,  и  я хочу предложить
вам  одну  из  своих разработок,
благодаря   которой   вы  самос-
тоятельно  сможете писать утили-
ты,  работающие  под управлением
Jemmini Commander'а версии 4.0T.

  Вообще,    эта   функция   уже
реализована в нем в виде кодовых
запускаемых файлов с расширением
*.U,  но я так до конца и не ра-
зобрался в их формате и способах
взаимодействия  с командиром, но
у  меня уже давно возникло жела-
ние  написания подобных приложе-
ниЙ,  что и побудило меня вплот-
ную  заняться  изучением данного
вопроса.

  Все  оказалось даже проще, чем
я  думал.  Начальный загрущик JC
выглядит следующим образом:

 1 CLEAR 0:RANDOMIZE USR 0:****

 На месте  звездочек расположена
программа   начальной  загрузки,
написанная  в  кодах.  Подлинные
значения  Clear и Usr из Бейсика
увидеть  нельзя и я, при исполь-
зовании  STS,  получил следующие
числа:  Clear=#5F1F,  Usr=#5D60.
После   окончания   загрузки, JC
преобразует  первую  строку сле-
дующим образом:

 1 CLEAR 0:RANDOMIZE USR 0:REM:
     RUN "        "

Clear=#FFFF,  Usr=#3D03 (15619).

И  переопределяет  указатель за-
пуска  на начало текущей строки.
Перед стартом программы он всего
лишь подставляет имя файла вмес-
то  пробелов и делает возврат по
команде RET. Ну вот, в принципе,
и  все,  что  нам необходимо для
написания  программ  под JC. Для
тех,  кто еще не догадался, обь-
ясню:  сначала  мы  создаем сле-
дующий Бейсик-файл:

 1 CLEAR 0:RANDOMIZE USR 0:REM:
     RUN "        "
 2 REM *****

Clear=#5F1F, Usr=#5D66.

 Вместо  звездочек  мы  помещаем
программу,  выполняющую загрузку
утилиты,  ее  запуск и возврат в
Jemmini.  Возврат может произво-
диться  по двум адресам:

 36076 - с тестированием компа
 36178 - без него.

 Итак сама программа:

      ORG #5D66
      LD BC,#7FFD   ;Загружаем утилиту в 7 страничку.
      LD A,23
      OUT (C),A
      LD HL,56064
      LD DE,(#5CF4)
      LD BC,#XX05
      CALL #3D13
      CALL 56064    ;и запускаем ее.
      LD HL,TEST    ;После возврата проверяем откуда
      LD DE,#8BC4   ;она была запущена:
      LD B,22       ;из командира или из DOS'а и
L0    LD A,(DE)     ;возвращаемся в среду вызова.
      CP (HL)
      JR NZ,DOS
      INC HL
      INC DE
      DJNZ L0
      LD BC,#7FFD
      LD A,16       ;Возврат в командир с предварительной
      OUT (C),A     ;коррекцией Бейсика и содержания порта
      LD HL,#FFFF   ; #7FFD.
      LD (23876),HL
      LD HL,#3D03
      LD (23886),HL
      JP 36076      ;Возврат с выводом тестовой страницы.
DOS   LD BC,#7FFD   ;Выход в DOS.
      XOR A
      OUT (#FE),A
      RST #00
TEST  DB "JemminiCOMMANDER V4.0"
 
  Конечно  же, утилиты не обяза-
тельно  должны  работать в стра-
ничках  - можно запускать их и в
основной  памяти,  но  предвари-
тельно   сохранив   используемый
участок  в страницах и восстано-
вив  его  после  работы. Как вы,
наверное, заметили, в программу,
для   более  корректной  работы,
введена проверка среды, из кото-
рой  был  осушествлен  запуск и,
соответственно,  возврат  в нее.
Если  ваша  программа, по каким-
либо  причинам,  не должна рабо-
тать из DOS'а, то вставьте в нее
фрагмент,   который  будет  осу-
ществлять  проверку и, при необ-
ходимости,  выдавать сообщение о
невозможности  продолжения рабо-
ты,   сопровождаемое  выходом  в
Бейсик.

  При     запуске     утилиты из
JCv4.0T,  по адресу #8BC4 содер-
жится  строка:  JemminiCOMMANDER
V4.0

  Еще хочу добавить, что начиная
с #6000 хранится каталог диска.

  В приложении журнала вы найде-
те утилиту написанные специально
для  JC по описанному мной мето-
ду: JC_cat.B

  Эта утилита нужна для устране-
ния ошибок каталога, появившихся
в  результате  работы Jemmini.

 (:) - ред. )

  Про это, я думаю, следует рас-
сказать поподробнее:

  Дело  в  том, что JC не совсем
правильно  осуществляет уплотне-
ние  диска. После этой операции,
в  конце  каталога остается сле-
дующая комбинация:

50 53 43 20 31 2E 30 33 PSC 1.03
...
00 41 20 50 52 45 56 31 ?A PREV1
...
01 58 5A 49 50 52 45 46 ?XZIPREF
^^

В то время как должно быть:

50 53 43 20 31 2E 30 33 PSC 1.03
...
00 41 20 50 52 45 56 31 ?A PREV1
...
00 58 5A 49 50 52 45 46 ?XZIPREF
^^

(Пример приведен для конкретного
каталога).

  Аналогичная  ошибка  возникает
при удалении группы файлов, рас-
положеных  в конце каталога. При
этом   начинаются   всевозможные
глюки,  из-за которых можно пол-
ностью  потерять всю информацию,
записанную после уплотнения.

  Программы,  написанные по опи-
санному  методу,  будут  на 100%
работоспособными  только при за-
пуске  из JCv4.0T или DOS'a. Про
другие  версии командира сказать
ничего  не  могу из-за невозмож-
ности проверки.