ZX Format #04
14 июня 1996
  Софт  

Премьера - АССЕМБЛЕРЫ, КОТОРЫЕ МЫ ВЫБИРАЕМ (описание XAS).


Программное обеспечение Описание Ассемблеры

    АССЕМБЛЕРЫ, КОТОРЫЕ МЫ ВЫБИРАЕМ.
                ________

         Пару строк от редакции.

  С  тех пор, как в нашей дорогой и люби-
мой отчизне появился Spectrum, прошло уже
довольно  таки  много  времени. И, вполне
естественно, для многих он превратился из
игрушки  в  орудие производства чего-либо
стимулирующего  интелектуальное  развитие
как  производителя,  так  и пользователя.
Путь становления отдельного индивида лич-
ностью   и  Программистом/Кодером  весьма
тернист  и сильно поддается влиянию окру-
жающей  среды,  а  именно потребительским
спросом на ПО данной платформы. И если Вы
не первый день используете Spectrum в ка-
честве домашнего компьютера, то могли за-
метить, что этот самый спрос меняется изо
дня в день. Если пару лет назад всем были
нужны  лишь  новые тетрисы и биты, то се-
годня однозначно назвать приоретеное нап-
равление   весьма  сложно.  Как  показала
жизнь,  наши  производители ПО в отличие,
скажем,  от  нашего  правительства, чутко
реагируют  на запросы потребителей (может
быть даже слишком чутко). Но, слава богу,
эпоха  "Color Lines" и "Диззи-хрен-знает-
какой-по-номеру-и-вообще-непонятно-откуда
взявшийся-да-и-не-диззи-вовсе"  вроде за-
кончилась, а адвентюры и стратегии, столь
популярные  на всех компьютерных платфор-
мах,  начинают  приобретать  человеческое
лицо,  и  все  больше  народа  желает  не
только  играть,  но и ТВОРИТЬ. Вот тут то
на смену диззи-подобным извратам и пришло
время системных программ и программистов.
  "А какя системная программа нужна Твор-
цу  больше всего?" - спосите Вы меня. А я
Вам  по  традиции  не отвечу. Но, немного
подумав,  опять  таки по традиции Вы сами
догадаетесь, что енто эсть ассемблер.
  "Да сколько же можно ?" - заропщете Вы.
  "Столько,  сколько  нужно !" - отвечу я
Вам  цитатой. Больше ассемблеров, хороших
и  разных! Существует некая аксиома, гла-
сящая  "сколько  юзеров, столько мнений",
но  я  позволю себе не согласиться с этим
утверждением,  по  крайней мере в области
ассемблеров  для  Speccy.  После изучения
непредвзятого   общественного  мнения  на
предмет того, каким должен быть идеальный
ассемблер, я могу с уверенностью заявить,
что  идеальных  ассемблеров  должно  быть
всего лишь порядка 5-10 штук. Причем гло-
бально  они делятся на 42-ух и 64-ех сим-
вольные.  А  посему выносим вердикт: дер-
зайте,  и,  быть может,  Вы  напишите ас-
семблер, удовлетворяющий как минимум 1/10
часть  населения,  пользующегося  прогами
данного  типа;  ищите,  и, быть может, Вы
найдете Вашу "мечту идиота" под названием
"ПростоИдеальныйАссеблер".

  В  данном номере мы публикуем два ( 2 )
ассемблера: XAS и ZXAssm. Описание перво-
го  из  них  составляет   основну  данной
статьи, что же касаемо второго конкурента
на звание сами знаете чего, то инструкция
по его эксплуатациии находится в приложе-
нии, в файле "Read.Me.C", идущем сразу за
самим "ZXASM3.0".   По  причине  экономии
места  на  диске мы не включили ни в один
из представляемых пакетов sts3.xx, и, ес-
ли Вы собираетесь ими пользоваться, то не
сочтите  за  труд  дописать  на свой диск
требуемую версию данного монитора.

  Отклики, пожелания, наставления, нраво-
учения   и  просто  благодарности  можете
отправлять как  авторам, так и в редакцию
ZF.
              ____________


┌───────────────────────────────────────┐
│      Xas редактор-ассемблер 128k      │
└───────────────────────────────────────┘
                (v 5.05)
(C) Макс Петров
__________________________________________

  Предлагаю Вам описание последней версии
программы, в журнале же Вы увидите преды-
дущую,  отличия которой оговорены и обоз-
начены значком "*".

         1. Вводная информация.

   1.1 Что такое, зачем надо и почему.

  Сейчас, как известно, для нашего много-
страдального, но любимого друга существу-
ет несколько подобных программ с бесспор-
ным лидером  Tasmом  (есть  ещё  какой-то
Zxasm,  но я его  не видел).  Однако Tasm
уже  с момента своего появления  отталки-
вал некоторых юзеров (меня) своей 64-сим-
вольностью,  а сегодня  вообще устарел со
своей overностью и букетом глюков. Собст-
венно вот  и вся  причина  появления моей
программы, за что спасибо Rst 7.
  Основываясь на опыте работы в Tasmе, на
котором  и писалась  первая версия  прог-
раммы,  а также  на собственных мечтах  и
пожеланиях  VL, IK и AB, получилась такая
штука:

 - ассемблирование в 4.4 раза быстрее
   Tasm 3.x.
 - дисковые операции в 2-3 раза быстрее,
   при большом количестве файлов на дис-
   кете - до 10-20 (!) раз.
 - поиск в тексте - почти мгновенный (со-
   ответственно в 20-30 раз (!)).
 - буфер на 1820 меток (* 1500) (tasm -
   740).
 - редактирование двух текстов одновре-
   менно с возможностью переноса блоков
   из одного текста в другой.
 - текст программы в 1.79 раза меньше,
   чем аналогичный в tasm.
 - количество кнопок, которые необходимо
   нажать для набора одного и того же
   текста в 1.333...1.5 раза меньше.
 - объём текста, который может быть отас-
   семблирован без единого обращения к
   дисководу - в 2.23 раза больше, чем
   в tasm (!).
 - максимальный объём одного текста в
   1.12 раза больше чем в tasm.
 - время, уходящее на поиск строки, со-
   держащей ошибку, которая выявилась
   при ассемблировании - в 50..1000 раз
   меньше ;).

 - работа с половинами ix и iy;
 - возможность ассемблирования выделенно-
   го участка n-е число раз (* - нет);
 - макросы,  которые в любой момент можно
   отредактировать;
 - большие русские и большие  и маленькие
   латинские буквы;
 - режимы ins и ovr;
 - 42 символа в строке;
 - сохранение  текущей  позиции  в тексте
   при любых операциях;
 - автотабуляция;
 - загрузка по курсору;  время загрузки и
   записи  не зависит от кол-ва файлов на
   дискете  (чего не скажешь о Tasme, ко-
   торый при работе с диском с 40-ка фай-
   лaми просто засыпает);
 - называется Xas [ksas];
 - много удобных, неожиданных, новых
   вещей...

  недостатки:
, - нет merge; (но с лихвой окупается воз-
   можностью переноса  помеченного  блока
   текста из одного окна в другое);
 - нет замены при find;
 - метки до 7 символов (остальные символы
   при ассемблировании игнорируются),
   (Tasm - до 14);
 - defb не любит стрингов;
 - глупенький equ  (в выражении не должно
   быть неопределённых меток);


         1.2 Загрузка и запуск.

  На диске находятся два файла: сам xas и
(должен быть  записан сразу  за ним)  sts
3.21.  Если Вы вышли из xasa в basic,  то
вернуться обратно можно выполнив run, ес-
ли  жива  программа  на  бейсике  (первую
строку можно удалить), usr 23465, если Вы
не  трогали  буфер  принтера  по  адресам
23465-23471 или usr 49152, включив банк 1
(out 32765,81).


       1.3 Расположение в памяти.

  Ramtop устанавливается  на адрес 24575,
но его можно  переставить  в любые адреса
до 32768.  Xas находится  в странице 1, в
странице 3 - первый текст,  в 4-ой - вто-
рой текст,  в 6-й макрос, таблица меток и
буфер для блочных операций,  в 7-oй стра-
нице находится sts.  При входе/выходе  из
xasa так же используется память в адресах
23440-23471. Вы можете использовать стра-
ницу 6 (даже убив макрос), а так же стра-
ницу 4,  если  не будете загружать  в неё
второй  текст,  и  если  в ассемблируемой
программе нет опций loadtext.
  Кстати, следует сказать, что loadcode и
save code  пользуются   экранной  памятью
stsа (т.е. банком 7).
  В общем-то  можно изгадить и 3-й банк -
к зависанию это не приведёт.
  И естественно, в Вашем распоряжении вся
48-я  память  (страницы 0, 2 и 5),  кроме
некоторых системных переменных бейсика.
  Если у Вас 256/512к через порт #fd биты
6 и 7, то используется 2й банк 128к (т.е.
#10 банк вместо 0,  #17 - 7-ого...),  что
обычно приводит к сохранению текста в па-
мяти даже после нажатия reset...


             2. Ввод текста.

              2.1 Загрузка.

  При любых операциях с диском смена цве-
та бордюра означает ошибку чтения/записи.
После четырёх попыток, выдаётся запрос:
Error t/s. Retry, Ignore, Abort.
где t/s- номер дорожки/сектора с ошибкой.
  При ответе  Retry  будет сделано ещё 14
попыток... Прерывание операции с диском -
- space.

  При запуске редактора-ассемблера (далее
р-а),  если  в памяти  нет текста,  то на
диске ищется файл  XMACROS.XaS (макрос) и
загружается  в случае  наличия  (и отсут-
ствия  в памяти).  Затем,  если  на диске
имеются файлы с расширениями  XAS, xAS  и
XaS,  перед  Вами появится  их списочек и
количество  свободных  на диске секторов.
Вы  можете выбрать нужный файл  с помощью
курсорных клавиш и enterа,  или отказать-
ся от загрузки,  нажав  edit  (отмена за-
грузки)  или ext mode (удаление текста из
памяти).  Space  - перезачтение каталога.
Если  файлов  на диске нет,  то р-а сразу
выйдет в редактор.


               2.2 Экран.

  Войдя в редактор, вы увидите несколько
буковок и цифирок внизу экрана.
INS - означает, что включён режим вставки
      (CS/3), OVR - замены;
LAT - выбран латинский алфавит (edit),
      РУС - русский;
0/1 - первое число показывает номер теку-
      щей строки (с нуля), второе - коли-
      чество строк в тексте  (т.е. макси-
      мальное  значение  для первого чис-
      ла).  В тексте  не может быть менее
      двух строк;
самое  -  показывает  номер текущего тек-
правое   ста:  1 - текст в банке 3, 2 - в
число    банке 4  и 3 - макрос в банке 6.
         Цвет цифры означает следующее:
        белый -  Вы ещё  не редактировали
         текст после загрузки,
        жёлтый -  текст ещё не редактиро-
         вался после записи,
        красный - текст уже редактировал-
         ся,  и при следующей записи  его
         на диск  увеличится число, пока-
         зывающее кол-во редакций;
число, которое  - кол-во редакций текста,
находится перед   если  оно   равно  нулю
правым числом     (новый текст  или толь-
                  ко  что  перекодирован-
                  ный), то оно не показы-
                  вается.

Внизу находится строка из 29-ти символов.
Это комментарий, который хранится в текс-
те.
  В третьей снизу строке часто напечатана
модель для поиска (* - нет).

             2.3 Редактор.

  Довольно хитрая вещь:  при попытке вый-
ти за пределы строки он её упакует,  про-
верит элементарный синтаксис и,  если всё
в порядке,  сделает  автотабуляцию  (т.е.
строка вида
  LabEL    lD  Hl     #4000    ;МДААА ..
превратится в
"label   LD    HL,#4000;МДААА ..
  При синтаксических ошибках как то:  две
метки подряд в начале строки, использова-
ние имён регистров  и условий  в качестве
меток,  более 3-х меток  в строке  (у z80
нет команд с четырьмя параметрами) (к de-
f-ам ограничение не относится),  редактор
что-то  пропищит  и никуда уйти не позво-
лит.
  Будте  осторожны  при  вводе  вложенных
друг в друга ковычек в defm:  если  у Вас
две рядом стоящие ковычки,  то  после них
рекомендую продолжать  ввод  со следующей
строки:  например нужен текст: "a""b" его
следует набрать не defm ""a""b"", а
defm """
defm "a"""
defm "b""



           Операции в строке:

ext mode - выход из редактора;
ss/q     - рус/lat;  расположение русских
           букв 'яверты' как в is_dos;
ss/a     - табуляция (самая редко исполь-
           зуемая кнопка);
cs/2     - ovr/ins;
edit     -home/end (начало/конец строки);
cursor   - курсор;
graph    - префикс макроса (см. ниже);
delete   - догадайтесь; если нажать в на-
           чале пустой строки,  то строка
           удалится;
break    - удаление по курсору;
ss/w     - удаление строки;
ss/enter - восстановление строки; возвра-
           щает строке вид,  который  она
           имела до редактирования;
ss/e     - пометка   строки  для  блочных
           операций;  не  обязательно ме-
           тить   строки  подряд;   чтобы
           снять пометку, нажмите повтор-
           но,  отметте  другим видом по-
           метки (см. cs/ent) или нажмите
           enter; (см. также ss/s);
cs/ent   - пометка   строки  для  памяти,
           этой же  пометкой метит строку
           ассемблер,  если в ней обнару-
           жена  ошибка;  снять пометку -
           - см. ss/e;

           Операции в тексте:

cs/3/4   - страница вверх/вниз;
ss/g     - начало/конец текста;
ss/y/u   - найти предыд./след. помеченную
           строку; если таких нет, ничего
           не происходит;
ss/s     - отмена пометки;
ss/f     - поиск  следующей модели;  если
           такой  нет,  то  меняется цвет
           бордюра; (см. ниже find);
graph ent - поиск  с _начала текста_ сло-
           ва,  на котором  стоит курсор;
           очень удобная вещь  для поиска
           меток;  не обязательно ставить
           курсор  на начало  слова - это
           будет сделано автоматически;
           для  поиска  следующего такого
           слова нажимайте ss/f;

           Блочные операции:

ss/d     -удаление помеченных ss/e строк;
ss/i     - копирование  помеченных   ss/e
           строк;  если  помеченных строк
           нет,   то  происходит  вставка
           текста из буфера;
graph ss/i - копирование помеченных строк
           в буфер, например, для перено-
           са их в другой текст;

(* - несколько  другое  расположение кла-
вишь:  edit - рус/lat; cs/2 - tab; cs/3 -
ovr/ins;  cs/4 - home/end; ss/q/a - pgup/
/pgdw).

 Чтобы скопировать строки из одного текс-
та в другой,  надо сначала поместить их в
буфер. Помеченные строки помещаются в бу-
фер при нажатии ss/i или graph ss/i.  За-
тем следует перейти  в другой текст  (за-
грузить его  или просто переключиться  на
другое окно), убрать в нём жёлтую пометку
(ss/e) и нажать ss/i.

  При ассемблировании  с большим количес-
твом меток они могут наехать на буфер.
 (* при ассемблировании буфер очищается)


            2.4 Команды Xas.

   При нажатии ext в редакторе вы попада-
ете в командную строку. Вернуться в реда-
ктор можно нажав ext.  Команды выбираются
нажатием соответствующих клавиш:

aUto     (соответственно - 'u') отмена/
         /включение   необходимости  под-
         тверждения  выбора команды ente-
         rом (эта команда, на самом деле,
         рудимент,  и в след.  версиях её
         не будет,  так что наслаждайтесь
         сейчас);
Edit     возврат в редактор;
Sаve text запись текста на диск;  предла-
         гает сменить имя;  во время вво-
         да имени команду можно отменить,
         нажав ext,  при  этом  изменение
         имени сохраняется; если на диске
         такой  файл есть,  он удаляется;
         если на диске нет места, сообще-
         ний  не выдаётся,  меняется цвет
         бордюра на красный.

Load text загрузка файла по каталогу; ес-
         ли на диске нет файлов  с типами
         XAS, XaS, xAS или xaS,  то ката-
         лог  не появляется и xas возрва-
         щается  в командную строку;  при
         выборе файла  работают следующие
         клавиши:  space  -  перезачтение
         каталога,  edit - отмена загруз-
         ки, ext - удаление текста из па-
         мяти; файлы, начинающиеся с сим-
         вола '▒' - удалённые, но их мож-
         но свободно загрузить; тип файла
         'Т' означает текст, 'М' - макрос
         (он автоматически загружается  в
         окно 3, независимо от текущего);
sTs      выход в sts (* - нет);
         при нажатии cs/t  в pc будет за-
         писан адрес старта отассемблиро-
         ванной программы,  а  в memadr -
         последнее напечатанное в кальку-
         ляторе число (для sts 4.x);

         потоком N 2 и заканчивать свою
         работу операцией ret;
         cs/r - после  возврата  из прог-
         раммы  и до очистки экрана будет
         ожидаться нажатие любой клавиши;
remarK   редактирование комментария;
Assemble ассемблирование;
fullCat  полный  каталог  диска; cs/c -
         все данные выводятся  в десятич-
         ном виде;
neW      удаление текста из памяти;  надо
         подтвердить 'Y';
laBels   вывод  на экран  таблицы  меток,
         отсортированной  по первому сим-
         волу;  для  прерывания   нажмите
         space;  если после ассемблирова-
         ния Вы пользовались блочной опе-
         рацией 'копирование' и меток бы-
         ло очень много, то Вы увидите не
         все метки;
         cs/b - печать в десятичном виде;
         (* -  не поддерживает  нажатие с
         cs,  а задаёт вопрос 'hex?',  на
         который надо ответить 'n',  если
         нужна печать в десятичной систе-
         ме);
,save cOde -  запись объектного кода;  при
         длине кода более #c000 запись не
         производится, т.к. таких длин  в
         памяти 48k не бывает;
Mac edit - редактирование файла макросов,
         который находится в 3-ем окне;
aNother  - переключение на редактирование
         другого окна: 1>2, 2>1, 3>1;
comPute  -  калькулятор.  Можно  набирать
         выражения  как  и в тексте прог-
         раммы  (имена меток,  двоичные и
         символьные константы..), резуль-
         тат будет  напечатан  в десятич-
         мой  и  шестнадцатиричной систе-
         мах; калькулятором можно пользо-
         ваться для перевода чисел из од-
         ной системы в другую,  просмотра
         значений меток,  установки адре-
         са sts  на значение  метки  (см.
         sTs) (* - нет);

          3. Ассемблирование.


   Ассемблирование  в два прохода,  но не
традиционное. На первом проходе составля-
ется таблица меток. По окончании его поя-
вится сообщение о длине и конце объектно-
го кода.
   Почти все ошибки объявляются на втором
проходе.  Ассемблирование  можно прервать
на втором проходе, нажав cs.  Второй про-
ход заканчивается звуковым сигналом.  Те-
перь программу можно запустить  (см. run)
или записать на диск (save code).
   Хочется заметить,  что время ассембли-
рования  в основном зависит от количества
меток, а от, скажем, длины текста  - зна-
чительно меньше. Отсюда очень простой вы-
вод: делайте меньше меток,  и формула для
примерного вычисления времени ассемблиро-
вания: t=0.000163*n^1.72, где t - время в
секундах, а n - кол-во меток.


              3.1 Ошибки.

   При обнаружении ошибки  на экран выво-
дится строка с ошибкой,  ниже - ёе номер,
название ошибки и, если текст загружается
loadtextом или просто находится во второй
странице, его имя.  При этом строка поме-
чается красным цветом (см. cs/ent), чтобы
её можно было легко найти  и отредактиро-
вать ((c) мой).

   Список ошибок:

No Label   - нет такой метки;
Syntax In Number  - синтаксическая ошибка
             в числе;
Label Exists - выдаётся  на первом прохо-
             де; метка с таким именем уже
             существует (см. введение);
Syntax     - синтаксическая ошибка  в па-
             раметре  операции  (например
             (ix+));
Target Too Far  - операция jr или djnz не
             может прыгнуть так далеко;
Number Too Big -в операциях, не связанных
             с (ix/iy+d)  - просто преду-
             преждение,   что  параметром
             является число,  превышающее
             допустимое для данной опера-
             ции  (например, bit 3+15,a),
             при этом будут взяты младшие
             разряды числа;  в  параметре
             же для (ix/iy+d) может озна-
             чать ошибку;
Fatal Error - обычно  ошибка  в параметре
             операции,  которая исключает
             возможность её ассемблирова-
             ния (ld sp,bc);
LTB Over   - нет больше  места  в таблице
             меток;  появляется на первом
             проходе  и останавливает ас-
             семблирование;
No File    - нет файла в командах loadco-
             de и loadtext;
Skipping   - предупреждение  об игнориро-
             вании команды loadtext, если
             она встретилась  в тексте во
             втором окне (см. ниже)
             или команды  loadcode,  если
             файл отсутствует  (на втором
             проходе);
             предупреждение  о  вложенном
             !assm;

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



          3.2 Текст программы


  Текст можно набирать маленькими и боль-
шими буквами, с или без табуляторов, вме-
сто запятых можно набирать пробелы (кроме
def-ов). Маленькие буквы набираются с cs.
Макросы набираются нажатием graph и затем
какой-либо клавиши.  При попытке выйти за
пределы строки, она будет перекодирована,
пробелы,  где  надо,  заменены  запятыми,
метки для повышения читабельности (может,
сначала  Вам это будет мешать,  но затем,
надеюсь,  Вы оцените мои старания)  будут
напечатаны  маленькими  буквами.  Если  в
строке есть ошибки,  Вы  не сможете выйти
за её пределы, не исправив её.
 Русские буквы нельзя использовать в мет-
ках.
 Вместо (ix/iy+0) можно набирать (ix/iy);
половинки ix/iy обозначаются hx/y и lx/y.
 В ex af,af' апостроф можно не ставить.
 При наборе шестнадцатиричных чисел вмес-
то значка '#' можно нажимать '.'.
 В операциях
ld (adr),rp ld (adr),a out (n),a in a,(n)
скобки ставить не обязательно (т.е. можно
ld l01+50/3,de).
 В out (c),r и in r,(c) '(c)' можно опус-
кать (out l). (* - нет)
  Несколько push или pop подряд можно за-
менить одним, перечислив регистровые пары
через запятую: pop af:pop iy:pop bc =
pop af,iy,bc.


 Числа

  Вместо _любых_ чисел можно набирать вы-
ражения,  где   - буквы в ковычках - чис-
ло,  состоящее из кодов букв  (в ковычках
(кроме defm) могут быть одна или две бук-
вы),  причём первая буква - старший байт,
вторая  - младший.  Если  буква одна,  то
первый байт равен нулю;  - скобки  и пре-
оритет операций не поддерживаются;  - до-
пустимые операции: +,-,*,/ и ! - xor (на-
пример: "B"!#80; 1520!label1!#f001). Под-
держиваются  двоичние  числа,  они должны
начинаться со знака '%' и лежать в диапа-
зоне 0..65535.
 Ещё две логические операции:
'&l - взять только младший байт,
'&h - взять только старший байт,  поместив
     его в младший, т.е. #5cf4'&h = #5c;
'l - циклический сдвиг результата влево,
'r - то же вправо, т.е. #a703'r = #d381.
  Если надо сдвинуть несколько раз, то
операцию надо просто продублировать.

    Особенности (def, work, ent, org,
             loadcode, loadtext, !assm)

 defs  - поддерживает до двух параметров;
если второго параметра нет,  то он прини-
мается  равным нулю.  Второй  параметр  -
- _двухбайтовое_ число, которым будет за-
полнять память defs. Примеры:
1) надо 15 нулей  -  defs 15
2) надо 31 push af - defs 31,#f5f5
3) надо 10,0,10 - defs 3,10
4) надо 32 ldi (ed a0) - defs 64,#a0ed

 work  -  позволяет  создавать программы,
работающие  не  с тех адресов,  в которые
они будут ассемблироваться.  Параметр оз-
начает адрес,  с которого  будет работать
данная  программа.   Распространяется  на
_всю_ программу  и _все_ orgи и сохраняет
своё влияние до опции work без параметра.
Рекомендую ставить её  в начале программы
_после_ orga. Пример: нужно отассемблиро-
вать программу для работы с адреса 0:
     org #9000
     work 0
lab1 .....
     org #a005
lab2 work
lab3 .....
   метка lab1 будет иметь значение #0000,
lab2 - #1005, а lab3 - #a005.

 ent  - позволяет указать адрес,  с кото-
рого будет запускаться программа командой
run. Используется без параметра.

 org  -  указывает текущий адрес для рас-
положения программы.   Если orga нет,  то
адрес будет равен #8000. Внимание! Если в
начале  Вашего текста  orgа нет,  но оrgи
есть дальше, и если они все больше #8000,
то длина  объектного кода будет вычислена
неправильно!  (не будет учтён org #8000).
Поэтому  если Вы желаете  воспользоваться
save code, то в данном случае надо поста-
вить в начале текста org #8000.

 loadcode "name"  - имя должно быть в ко-
вычках; грузится файл типа code;

 loadtext "name" - если во второй страни-
це уже есть файл с таким именем, то обра-
щения к диску не происходит!!!,  если  же
его нет,  то он  загрузится туда,  удалив
текст, который там был до этого.  Из вто-
рой страницы по понятной причине не рабо-
тает.  Если кто не знает, что такое load-
text - эта опция позволяет иметь програм-
му на ассемблере,  состоящую из множества
текстов, которые грузятся и ассемблируют-
ся  по очереди;  при этом  они пользуются
одной  таблицей меток,  поэтому  из одних
файлов можно без ограничений ссылаться на
метки из других файлов.

  !assm  !on/!off

  Eщё имеется  оригинальная опция  !assm,
которая  может  иметь  параметр  !on  или
!off. Она даёт возможность выделять куски
текста,   которые  надо  отассемблировать
только один раз,  или вообще  не надо ас-
семблировать.  Параметр !on означает, что
опция !assm игнорируется, но после ассем-
блирования он будет переведён в !off.
!off  же вызывает пропуск текста до опции
!cont.  Пример: Вы пишите драйверок печа-
ти,  который пользуется  загружаемым фон-
том.  Так зачем же его загружать при каж-
дом ассемблировании?  Можно загрузить его
только один раз,  и потом он будет сидеть
в памяти:
...
font  org #7000
      !assm !on
      loadcode "font51"
      !cont
      org #7300
...
  или Вам не надо, чтобы ассемблировалась
какая-то часть кода,  и чтобы не забивать
все строки в комментарии, просто огранич-
те их опциями !assm !off и !cont.

 !assm n  (* - нет)

 Параметр n - кол-во повторов.  Позволяет
отассемблировать  кусок  текста  до опции
!cont n раз. Напоминает об defs Tasmа, но
на порядок круче её:

 !assm 128
 ld hl,0
 push hl
 !cont

 !assm #50/2-%0101
"i zachem eto?"
 ld hl,0
 call 1
 !cont

Вместо n может стоять метка, если она оп-
ределяется выше.
Ставить метки между !assm n  и  !cont  не
рекомендуется. Пользуйтесь $.

Вложенность !assm с любыми параметрами не
допускается!



defm - вместо  defm "string"  можно наби-
рать просто "string", в этом случае коли-
чество  символов  в строке  увеличится до
40.

defb - если в defb у  Вас только шестнад-
цатиричные числа, то можно вместо
defb #n1,#n2,#n3,#n4... набирать просто
#n1n2n3n4... Здесь первый символ '#' обя-
зателен и каждое число должно быть набра-
но двумя цифрами  (0=00, #a=0a...); числа
для наглядности  можно разделять значками
'#'  (#n1#n2n3#n4... - как угодно)  и ко-
нечно, вместо '#' можно жать '.'


               4  Макрос.

  Макросы набираются нажатием graph  (cs/
/9) и затем одной из клавиш с шифтами или
без.  При этом на экран выведется строка,
которая  присвоена файлом макроса  данной
букве.  Файл  макроса строится  следующим
образом:  он состоит из строк, где первым
символом должен стоять знак ';', вторым -
символ, при нажатии которого на экран бу-
дет выводиться строка, которая расположе-
на за этим вторым  (т.е. до 40 символов).
Если  в конце строки  необходимы пробелы,
то последний пробел  следует заменить  на
подчёркивание (ss/0), иначе они будут об-
резаны редактором. Если надо, чтобы после
вывода  макроса  автоматически  нажимался
enter, заканчивайте макрос точкой.
  Длина файла макроса не должна превышать
#b20, чего, собственно,  вполне достаточ-
но,  чтобы иметь макрос на всех возможных
символах (их около 90). Ограничение длины
связано  с  таблицей  меток:  при блочной
операции копирования  макрос будет урезан
до указанной длины. Если в Вашей програм-
ме огромное количество меток  (>1500), то
файл макросов в памяти может быть частич-
но или полностью уничтожен, что, впрочем,
к подвисанию не приведёт, просто, если Вы
пользуетесь макросами,  надо будет их пе-
резагрузить.


            5 Формат текста.

  Раздел для тех, кто хочет написать свои
перекодеровщики  и др. или разобраться  в
работе р-а...

 Первые 29 байт файла хранят комментарий;
затем 2 байта  - адрес текущей позиции  в
тексте  (адрес  _начала_ текущей строки);
далее 2 байта - текущие координаты курсо-
ра (x, потом y);  1 байт признак ovr/ins;
1 байт - кол-во редакций файла  (0..127);
байт #01 - признак начала текста.
Формат строки текста объясню на примере:

экран:
label   LD    HL,#4d00-" a"; ПРИМЕР
память:
'LABEL',#ac,#d2,'#4D00-" a"; ПРИМЕР',#0d

метки хранятся большими буквами;
табуляторы отсутствуют;
запятые могут быть только в комментариях,
ковычках  или  в качестве разделителей  в
defах;
пробелы могут быть только  в ковычках или
в комментариях;
последний байт  в строке может быть #0d -
строка обычного цвета,  #09 - жёлтого или
#0c - красного;
такой пример:
                                 тексте должен
стоять #00.



      6 Советы по программированию
                новичкам

 Может, конечно, это наглость с моей сто-
роны давать какие-либо советы, но всё-та-
ки я написал уже две серьёзные программы,
так что кое-что могло бы Вам пригодиться.
1)  постарайтесь  спланировать  программу
перед  её написанием.  Точно решите,  что
она будет делать и как.
2) старайтесь делать меньше меток - и ас-
семблирование пойдёт быстрее,  и не будет
проблем с переполнением таблицы - исполь-
зуйте значёк '$',  который означает теку-
щий адрес; если рядом стоят несколько ме-
ток,  то можно обратиться к одной исполь-
зуя имя другой +/- смещение.
3) для экономии памяти пользуйтесь следу-
ющими вещами:  если вам нужна ячейка,  то
не делайте подобного:
label defb 0
....
ld a,(label)
....
ld (label),a
а заменяйте на:
label ld a,0

ld (label+1),a
  В качестве ячеек для хранения чего-либо
можно использовать переменные бейсика.
Для, например,  печати через свой драйвер
можно переопределить канал  и пользовать-
ся rst 16.
4) о быстродействии: помните,  что jp ра-
ботает быстрее jr,  ldi быстрее ldir, что
самый быстрый способ  запихнуть  в память
байт  или достать его оттуда  это push  и
pop.
5) о '$':  помните, что $ указывает адрес
начала текущей операции, т.е.
label djnz label
эквивалентно
      djnz $
a не, скажем, $-2.

            7 Перекодеровщик.

   Перекодеровщик написал  hacker Cris, и
вещь, я Вам скажу, довольно крутая: пере-
кодирует он из gens,  isdos assembler или
tasm 3.0  в xas  и из xasa  в txt, причём
формат текста (gens/isdos/tasm/xas) опре-
деляет сам,  так что думать вообще не на-
до.
   При перекодеровке в xas он пишет коли-
чество ошибок - переполнений строки (т.к.
в  tasme  и isdose строки  до 255(?), а у
меня до 42 символов, и длинные строки ре-
жутся пополам. При этом строка будет  по-
мечена  красным цветом  и её можно  легко
найти  в xasе  (по ss/y/u)  и подправить.
После перекодеровки может возникнуть глю-
чок:  при ассемблировании находится ошиб-
ка,  тогда как строка выглядит нормально.
Здесь надо просто встать  на эту строку и
нажать что-либо  отличное от курсор вверх
и вниз.  Например,  можно просто нажимать
ss/u или y.


               8 The End.

  Ну всё, закончена эта убойная работа по
набиванию helpа, теперь можно расслабить-
ся и сознаться,  что весь help и весь Xas
написал Макс Петров из Санкт-Петербурга в
январе 1996 года с телефоном 598 0159 (по
которому можно сообщить о глюках).
  А также сказать, что перекодеровщик на-
писал hacker Cris,  похоже не без  помощи
своего виртуального брата Johna Stunnera.
За что им спасибо,  т.к. во время писания
они поймали часть глючков в Xasе.  Johnnу
ещё одно спасибо за ускорение оч. малень-
кой,  но оч. важной процедурки, результа-
том которого стало повышение скорости ас-
семблирования  на  15% по сравнению с ис-
ходным,  а больше всего  я ему благодарен
за то,  что его ускорение навело меня  на
мысль о ещё большем ускорении,  и я полу-
чил ещё 32-х процентное уменьшение време-
ни ассемблирования... В результате счет в
нашу пользу увеличился в полтора раза.
  И наконец передать привет  и  пожелания
счастья в новом году всем юзерам,  плейе-
рам, хакерам и сочувствующим.





        Max Petrov (hpm) 01.96-05.96 SPb.
_________________________________________

 Вопросы есть? Как говорится, try again.

  О притормаживании после загрузки xasa:
он запачен trusheм, который немного тор-
моз... (пока только *)

              Max Petrov (hpm) 05.96 SPb.
_________________________________________



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

Игрушки - 48 утюгов (3 уровень).

Игрушки - прохождение La abadia del crimen.

Игрушки - новелла по игре "Приключения Винни Пуха" (Level 1)

Программистам - изучаем Бейсик (часть 4).

Программистам - Адаптация программ под TR-DOS #2.

Программистам - IMMORTAL #2 (бессмертие в играх).

Программистам - музыкальные Редакторы, которые мы выбираем.

Программистам - справочник по теневому сервис монитору Scorpion ZS 256.

Программистам - "В ПОИСКАХ ВЕЧНОЙ ЖИЗНИ".

IS-DOS - Рубрика "IS-DOS - начинающим" No 4.

IS-DOS - пользователям" No4: "Работа с электронным диском в среде IS-DOS".

IS-DOS - информация о фирме ISKRASOFT.

Железо - Nemo отвечает на вопросы пользователей.

Железо - Сообщение от фирмы Nemo (о микропроцессорах Z84C0010PEC).

Премьера - АССЕМБЛЕРЫ, КОТОРЫЕ МЫ ВЫБИРАЕМ (описание XAS).

Премьера - Описание программы 'CONVER-Commander V 4.50 pro'.

Премьера - НЛО-2. Дьяволы бездны.

Презентация - новгородская группа Digital Reality о себе.

Интервью - Интервью Капитана Nemo с комментариями фирмы Искрасофт.

Интервью - Николай Родионов и ZX-Sectrum.

Интервью - интервью с разработчиком компьютера HOBBIT Дмитрием Михайловым.

Отдохнём - HAL 9000

Отдохнём - Nemo рассказывает о ВиртуалЕТной реальности в России.

Почтовый ящик - письма читателей.

Почтовый ящик - доска обьявлений.

Почтовый ящик - "Империя Spectrum".

Разное - Вступительная новелла к игре Paradise Lost (Потерянный Рай).

Разное - перспективы П/О: WARCRAFT

Разное - Amiga Club: Вопросы и ответы #2.

Разное - Amiga Rulez или пропоганда здорового образа жизни.

От Авторов - о новом номере и планах на будущее.

Авторы журнала - ZX-Format No.4

Лотерея - первые итоги первой лотереи.


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

Похожие статьи:
Рабочий стол - Краткое описание: макро-ассемблера отладчика "ALASM 2.8".
Система - Обзор системных программ: ассемблер TASM v 4.12
Новые программы - Обзор программ FASTzasm и @-zasm.

В этот день...   6 апреля