Adventurer #05
30 ноября 1996

Oбмен опытом - Некоторые особенности XAS'а. Передача параметров в программу в командной строке.

<b>Oбмен опытом</b> - Некоторые особенности XAS'а. Передача параметров в программу в командной строке.
ВНИМАНИЕ: в ADVENTURER N4  в  статье
"Обмен опытом" была допущена ошибка! Пра-
вильно должно быть так:
чтобы подпрограммы ПЗУ нормально работали
в 128-м режиме, надо сбросить 4-й бит пe-
ременной FLAGS (23611/#5C3B).
     Редакция приносит  извинения читате-
лям за допущенную неточность.

               (C) Cav inc.
╔───────────────────────────────────────╗
│ ──── Некоторые особенности XAS'a ──── │
╚───────────────────────────────────────╝

     Внимание !!!  Речь пойдет о XAS'е, в
котором НЕ указана версия, а просто выда-
ется копирайт автора с указанием 1996 г.
     Первая особенность XAS'a, замеченная
мной - то,  что  после  выхода  в JEMMINI
COMMANDER и,  допустим, уплотнения диска,
при запуске  XAS'a загружается текст, ко-
торый  был  последним при редактировании.
(Но не всегда).
     Вторая  особенность  заключается   в
том, что при запуске вашей программы,  вы
можете как хотите  "портить"  3,4,5,6 и 0
страницы  памяти;  можно даже 7 (если вам
STS не нужен) - ваш текст не "умрет"  при
выходе  обратно  в  XAS, он подгрузится с
диска. (Совет: сохраняйте  перед запуском
текст на диске).
     Третья  особенность  заключается   в
том, что инструкция   LD (adr)  ассембли-

руется как LD (adr),BC.
     Четвертая особенность относится не к
XAS'у, а к  STS 3.2, который попал ко мне
вместе с XAS'ом на диске, он  имеет имя :
"xsts.C".  Особенность заключается в кно-
пке [C] - она  вызывает  каталог диска. И
еще: в этой версии сделана трассировка до
нужного  вам  адреса,  а не по количеству
команд.

От редакции: Еще  одна, к  сожалению, не-
приятная  особенность  состоит в том, что
нет контроля - сохранен  ли  рабочий файл
перед запуском или загрузкой с диска  но-
вого  (есть, конечно, цветовая индикация,
но после ассемблирования  она  показывает
неверную информацию).

           ──────────────────────  
╔───────────────────────────────────────╗
│ ── К вопросу о передаче параметров ── │
│ ── в программу  в командной строке ── │
╚───────────────────────────────────────╝

     Какой  обычный  способ запуска прог-
рамм с диска в системе TR-DOS ?  Правиль-
но, с помощью boot'а. Во всяком случае, в
90 % всех запусков. Параметры же програм-
ма запрашивает уже после запуска.  Но хо-
телось бы указывать параметры или  данные
для программы во время запуска  так,  как
это делается в  MS DOS или RT-11.  Долгое
время я не знал,как это реализовать (вер-
нее, не было нужно), и вот как-то раз ре-
шил с этим разобраться.  Что из этого по-
лучилось - читайте ниже...
     Первой идеей, которaя приходит в го-
лову - это использовать  буфер  редактора
строки  (на  него указывает E_LINE).  Тем
более,  при  наборе  командной  строки  в
TR-DOS'e он используется. Идея была хоро-
шая, но нереализуемая, так как этот буфер

затирался  при  загрузке BASIC'ом.  Около
двух  дней  я ломал голову и приставал ко
всем знакомым кодерам с вопросами.. Поко-
вырял INSULT, но то, что я  там наковырял
мне было не нужно. Оказалось, что наличие
чего-то после имени файла определялось по
последним символам строки. То есть строка
должна быть достаточно длинной.   Обдумав
этот вопрос,  я нашел решение, но получи-
лась не очень удобная вещь (в смысле дли-
ны).  Чтобы  все работало, пришлось напи-
сать  самый короткий из возможных загруз-
чиков, с таким текстом :

      10 RANDOMIZE USR VAL "23883":REM...

после REM шел такой код:
       LD   HL,ADDR
       LD   DE,(#5CF4)
       LD   BC,#nn05
       PUSH HL
       CALL #3D13
       RET 

     здесь ADDR - адрес загрузки кодового
     блока, nn - число секторов.

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

╔───────────────────────────────────────╗
│ Знаете ли вы, что такое RST 16(#10) ? │
╚───────────────────────────────────────╝

     Конечно,- ответит начинающий кодер,-
это подпрограмма печати символа,  код ко-
торого помещен в регистр A. И он будет не
прав! Или представьте реакцию того же на-
чинающего хакера, когда он залазит,  ска-
жем, в программу  LIST III (by G.D.C.)  и

с трепетом обнаруживает, что через RST 16
осуществляется  печать  фонтом шириной  в
четыре пиксела с растоянием между буквами
в один пиксел!

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

     Использование каналов в программах
    ────────────────────────────────────

     Вообще-то,  информацию  по   данному
вопросу  можно  найти  в изданиях "Инфор-
ком"'а. Но не у всех они есть, да и напи-
сано там не всегда понятно.   Итак, после
включения  машины определено четыре стан-
дартных канала.  Число каналов ограничено
лишь размером ОЗУ. Область каналов распо-
ложена  перед  областью  BASIC'а и на нее
(область  каналов)  указывает  переменная
CHANS (#5C4F).  Концепция  каналов играет
важную роль в Spectrum'е. Весь символьный

ввод/вывод, идущий через RST #10 на самом
деле идет через каналы. Поэтому, если вы,
ковыряясь в чужой программе,увидели, что,
допустим, печать  в 64 символа идет через
RST #10 или же через этот рестарт делает-
ся вообще почти все, то не пугайтесь и не
копайте судорожно ПЗУ'шку!  Просто в этой
программе переопределен канал.
     Переопределение  каналов  по  своему
усмотрению дает иногда значительное преи-
мущество в работе.  Теперь перейдем к бо-
лее глубокому рассмотрению вопроса.
     Стандартные  каналы имеют достаточно
простую структуру :

длина(байт)    имя        комментарий
─────────────────────────────────────────
    2       proc_out    - адрес процедуры
                          вывода
    2       proc_in     - адрес процедуры
                          ввода
    1       name chanel - имя канала
─────────────────────────────────────────

     Адреса  процедур  ввода (proc_in)  у
всех стандартных каналов,кроме канала "К"
установлены на #15C4 (RST #8),  т. е.  на
печать сообщения об  ошибке  "Invalid I/O
device". У канала "К" (нижняя часть экра-
на) указатель proc_in указывает на  #10А8
(КEY-INPUT). Если вы собрались менять ад-
реса proc_out и proc_in у стандартных ка-
налов,  то  имейте  в виду, что некоторые
команды BASIC'a при своем выполнении ини-
циализируют  в стандартных каналах значе-
ния из ПЗУ.  Поэтому  желательно  создать
СВОЙ канал и делать с ним все, что угодно
вашей душе.  В литературе  написано,  что
ТОЛЬКО СТАНДАРТНЫЕ  каналы имеют длину  в
5 байт,  а  если пользователь  решил  из-
вратиться, то ему нужно отводить под блок
информации о канале не менее 11 байт. Бы-
ла произведена проверка и оказалось,  что
вполне  хватает  и  пяти (если устройство
ввода/вывода не блочное). Свой канал мож-
но создать таким образом :

    LD   HL,(PROG)   ; сист.перем. #5C53
                     ; (начало BASIC'а)
    DEC  HL          ;
    LD   BC,len      ; длина резерви-
                     ; руемой области
    CALL #1655       ; п/п MAKE_ROOM
    INC  HL          ; адрес канала
    LD   DE,adr_data ; адрес ваших дан-
                     ; ных о канале
    EX   DE,HL       ;
    LD   BC,len_data ; длина данных,
                     ; должна быть рав-
                     ; на len
    LDIR             ;

      ...

adr_data
      DEFW print_my  ;  адрес proc_out
      DEFW input_my  ;  адрес proc_in
      DEFB "E"       ;  имя канала

Таким образом вы получаете свой канал, но
его нужно еще подключить к потоку.  Пото-
ков всего 19 и их не может быть больше. К
потоку нужно обязательно подключатся,если
вы собрались использовать RST#10. Область
информации  о  потоках  занимает память с
адреса #5C10 до адреса #5C34.  Под каждый
поток отведено два байта.  Если в  данных
потока содержится #0000, то это означает,
что этот поток  не подключен.   Для того,
чтобы подключить канал к нужному вам  по-
току, нужно в данные потока внести смеще-
ние начала описания вашего канала относи-
тельно начала области каналов.  Звучит не
очень понятно, но на самом деле все прос-
то и расчитывается по формуле:
   ┌──────────────────────────────────┐
   │ adr_my_chanel-adr_begin_chanel+1 │
   └──────────────────────────────────┘

Здесь adr_my_chanel - адрес начала вашего
                      канала;
      adr_begin_chanel - адрес начала об-
                         ласти о каналах.

     Открыть канал легко, гораздо труднее
закрыть его. Нет, если канал последний,то
проблем нет, но если вы собрались удалить
описание  канала, допустим, предпоследне-
го, то вам придется повозиться. То  есть:
отключить поток, сместить конец области о
каналах  в  меньшую  сторону, передвинуть
BASIC  и  все, что выше его  до RAMTOP'а,
пересчитать смещения в потоках для остав-
шихся каналов.  Но  не стоит пугаться, не
такое уж это сложное дело.
     Кстати, из-за того, что область  ка-
налов находится после системных  перемен-
ных (как SOS, так и DOS), возможно созда-
ние самозапускающихся дисков  (т.е по ко-
мандам CAT, LIST и т.п.).   А  происходит
это так : при обработке комадны CAT, LIST
и др. с адреса #5D25 образуется временный
буфер,  куда  читается восьмой сектор для
произведения настройки на диск. Стандарт-
ные сектора TR-DOS'a имеют 256 байт, поэ-
тому  отводится  именно это число под бу-
фер.  Но  ВГ93 может читать любые сектора
(128, 256, 512 и 1024 байта)  и если раз-

мер сектора БОЛЬШЕ стандартного, то оста-
ток  сектора  наезжает на область о кана-
лах. После этого TR-DOS, ничего не подоз-
ревая,пытается напечатать "ОК", а так как
у нас в данных на канал совсем не то, что
надо (вернее, то,  если диск с автозапус-
ком), то происходит переход или на  нахо-
дящуюся в этом же считанном секторе  про-
цедуру загрузки  или  в  "ахун"  (понятие
"ахун" объяснено  в  произведениях Ф.Кар-
сака /прим. редактора/).  В  свете  всего
вышесказанного становится понятно поведе-
ние TR-DOS  при попытке поглядеть каталог
МS-DOS диска (512 байт на сектор).  А так
же, как работает запуск в iS-DOS.
     Вообще-то, при использовании концеп-
ции переопределения каналов, можно делать
довольно-таки занятные штуки.  Так,  я до
появления у меня STS 4.1,  получал  текст
дизассемблера программ  (чужих) следующим
образом: я открывал файл последовательно-
го доступа на чтение: (OPEN #4,"NAME",W),
переопределял   принтерный      п о т о к
(stream #3)  на  вновь  открытый  поток в

файл (POKE 23580, PEEK 23582:
      POKE 23581, PEEK 23583),
грузил  MONS,  потом блок кодов, входил в
MONS и давал команду "вывод дизассемблера
блока  на  принтер",  выходил из  MONS'a,
закрывал файл (CLOSE #4) и получал  гото-
вый к употреблению текст в ASCII формате.

     Вот, вроде,  и все, что я хотел ска-
зать. Кто не понял, можете написать пись-
мо с конкретными вопросами ЧТО непонятно.

         Используемая литература :

  Ю. Поморцев   "TR-DOS для профессио-
                 налов  и любителей"

  "Инфорком"    Трехтомник по графике.
                том второй "Прикладная
                графика"

  "Инфорком"    ZX-Ревю 1991 год

           ────────────────────── 

                 (C) RAY



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

Oбмен опытом - Использование каналов в программах. Использование подпрограмм ПЗУ.

Oбмен опытом - Некоторые особенности XAS'а. Передача параметров в программу в командной строке.

Oбмен опытом - Несколько полезных советов и рекомендаций по подключению FDD 3.5 (трехдюймового дисковода).

Интервью - Интервью с Nicodim'ом (Р.Романовым) автором игры Prince of Persia.

Интерфейс - Письма Читателей: Игорь Галуза, Гаркушин Алексей, Иноземцев Андрей Леонидович, Потоловский Виктор Николаевич.

Интерфейс - Причины развала Ярославско электронного журнала "ЭЛЬДОРАДО". Новая защита - Anti McDonald. Плохо ли пиратство? Несколько причин по которым не стоит покупать IBM PC в качестве домашнего компьютера. Как пройти "NEW DIZZY"?

Обзор - O новых программах: Narc, The Hundred, Heavy Metal Mover, Quick Draw McGraw, Iice Climber (Альпинист), Super Cars, Lode Runner 3, Down Town, Страна Мифов, Gremlin 2, Sword of Bane, Turbo Skate Fighter, Assault Course, Mercs, Darkman. Десятка лучших игр.

Оттяг - Тест "Ты ,случаем, не тормоз ?"

Презентация - Авторская презентация: Ray Disk Monitor v1.5.

Презентация - Авторская презентация: Войны Роботов.

Презентация - Программа для создания адвентюр QUILL.

Раскрутка - Новелла к игре "Trap Door".

Раскрутка - Описание игры "Jungle Warrior".

Раскрутка - прохождение игры "Navy Moves-2".

Реклама - Реклама и объявления.

Система - Описание программ : ZX-ASM3.0, Universal XAS Converter v2.1, Format Utility v2.01, Commander DOS v1.9, Super Catalog v1.12, Text Designer v1.0, The Dizzy Editor v1.0, Digital Studio for Covox, Alfasoft Music Crasher v2.13. Драйвер печати шрифтов , созданных в Mach v2.4.

Оттяг - Несколько советов тем, кто хочет отправить программы по почте своим зарубежным друзьям.

Оттяг - 40 вещей, которые можно сделать с "битым" диском.

Оттяг - тест: Насколько вы нравитесь окружающим.

Оттяг - 20 вещей,которые вы можете сделать, пока игра загружается с диска.

Оттяг - 20 вещей,которые вы можете сделать, пока игра загружается с ленты.

купить кп довиль

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

Похожие статьи:
Вступление - Тяжко, во времена капиталистических отношений.
PartyZone! - Первое и последнее демопарти под маркой Конструкции Хаоса, проводимая в третьем тысячелетии, будет проходить в Санкт-Петербурге, Россия в августе 2001 года.
Презентация - новая программа для коллекционирования мелодий: UniPlayer v1.0
Insanity Add-pack - о приложении газеты.
TOP TEN - Десяточка лучших игр.

В этот день...   21 ноября