Virtual Worlds
#01
31 декабря 1999 |
|
Ассемблер - Оверлеи для JC: Описание методов создания утилит работающих под управлением Jemmini_Commander 4.0T.
┌────────────────────────────┐ │ ░▒░ 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. Про другие версии командира сказать ничего не могу из-за невозмож- ности проверки.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября