|
ZX Format
#05
11 декабря 1996 |
|
Программистам - adventure: разумный подход к прохождению.

ADVENTURE: РАЗУМНЫЙ ПОДХОД К ПРОХОЖДЕНИЮ
music by DNK
(С) 1996 Alex ASP
_________________________________________
1. Введение
Для начала, наверное, необходимо разъ-
яснить, о чем вообще пойдет речь, дабы
любители диззеобразных игр не закидали бы
автора тухлыми яйцами, а сразу же могли
вернуться к столь привычным для них соро-
ка восьми предметам народного потребле-
ния или что там у них на подходе. Итак,
если, загрузив игру, Вы увидели кучу тек-
ста (с корявыми картинками), да и еще от
Вас требуют что-то вводить с клавы на ан-
глицком, как правило, лангуаге после по-
хабных 'What now?', '>', '*' и им подо-
бных, то смело можете жать Super Magic
Button или 'комбинацию из трех пальцев'
(Ctrl+Alt+Del), что, в сущности, одно и
то же, наконец-то понимая, что из себя
представляет Adventure-игрушка.
Теперь можно поговорить и о спеллинге.
Всвязи с тем, что автор - человек доволь-
но ленивый, и его просто ломает переклю-
чаться без особой надобности на вышеупо-
мянутый англицкий посредством хлопания по
двум клавишам, то он просто введет рус-
ский эквивалент слова Adventure. На самом
деле, это слово звучит так: "адвенчер", а
в переводе означает "приключение", но го-
ворить "приключенческая игра" влом, похо-
же, не только автору, но и всем, а термин
"адвенчер", похоже, никого не прикалывал.
И тут добрый "Инфорком" предложил: "А да-
вайте-ка обзовем все это дело словцом
"адвентюра"! Ведь крутое словцо-то, а?"
И именно с той поры и начали все, кому не
лень, именовать игрушки данного рода этим
корявым словом. Что ж, раз уж так пове-
лось, то и автор будет употреблять этого
уродца в качестве эквивалента.
Теперь немного поговорим о том, какие
бывают адвентюры, ибо адвентюра адвентюре
рознь. Так вот, поделим мы их на две ча-
сти: написанные при помощи всевозможных
неудобных, но все-таки работающих пакетов
и написанные без оных. В свою очередь,
пакетные делятся по наименованиям паке-
тов, в коих они были сотворены, а безпа-
кетные делятся по языку написания. Среди
пакетов наиболее распространены (отделя-
ются точкой с запятой) Adventure Builder
System (ABS и ее русифицированная произ-
водная); Graphic Adventure Creator (он же
GAC); Quill, Patch, Illustrator (QPI).
Среди беспакетных распространены написан-
ные в BASIC'e (как с использованием маш-
кода, так и без оного (сюда же можно от-
нести и ABS)), на других языках высокого
(хм?) уровня, например, Laser BASIC'e
(честно признаюсь, что видел только одну
такую вещицу), а также на языке низкого
уровня, т.е. Assembler'e (или в машкоде -
кому что больше нравится). Интересно от-
метить то, что качество игры, ее слож-
ность и интересность (простите) обратно
пропорциональны уровню языка, на котором
она написана. Есть еще несколько параме-
тров, по которым можно поделить адвентю-
ры: с графикой/без нее, требующей не ме-
нее 128К/не имеющей данных претензий, с
сопровой музыкой/вообще немой, а также по
годам выпуска или производителям, но не
это будет главным.
И именно в этот момент настало то вре-
мя, когда можно объяснить уставшему чита-
телю, о чем же дальше пойдет повествова-
ние. А пойдет речь о том, как помочь себе
самому, если адвентюра упирается и не хо-
чет раскалываться. Чем-то этот материал
поможет русификаторам (сам автор в такие
игры не играет, так как придерживается
принципа, что если что-то хорошо, то его
всегда можно сделать еще хуже, а желающих
это сделать всегда с лихвой найдется).
И, наконец, последний абзац. Автор бу-
дет рад видеть какие-либо отклики на ра-
боту, замечания, исправления, доп. инфо-
рмацию и проч. Для связи можно использо-
вать журнал ZX-FORMAT (адрес можно найти
где-нибудь внутри журнала), а также можно
выйти (пешком, наезжать лучше не надо -
не конструктивно это) лично на автора по
E-mail:
SAB94174@D1.IFMO.RU
P.S. Пару слов о теневом мониторе, вшитом
в Scorp. Автору интересно, по каким при-
чинам создатели Scorp'a отрубили вход в
монитор из BASIC'a и TR-DOS. Возможно, у
автора устаревшая прошивка (прошивка ав-
тора или ПЗУ - не известно). Некоторым
читателям, по-видимому, прийдется пользо-
ваться теневым монитором, и столкнуться с
такой же проблемой, а посему автор осме-
лился предложить для них нижеизложенный
способ входа из BASIC'a в монитор. В ко-
мандной строке набирается:
POKE 16384,195: POKE 16385,0: POKE 16386,
64: POKE 16387,201: RANDOMIZE USR 16384
или в переводе
16384 JP 16384
16387 RET
Для тех, кто не понял, объясняю: програм-
ма запускается с адреса 16384 и выполня-
ет команду, предписывающую перейти по ад-
ресу 16384 и выполнить команду, находящу-
юся там (а там находится команда перехо-
да по адресу 16384, где содержится ко-
манда перехода...). После запуска этой
программки самое время нажать Magic But-
ton (не путать с SMB, о которой было на-
писано выше) и с радостью вывалиться в
теневой монитор. Зачем же по адресу 16387
стоит команда возврата, спросите Вы. А
затем, чтобы, при необходимости, суметь
вновь вывалиться в родимый BASIC не пере-
капывая кучу машкода в поисках команды
возврата. Делается это путем набивания
двух строк в командной строке монитора:
PC=16387
EXIT
и нажатия кнопки '0', означающей возврат
в программу. Может быть, это все и извра-
щение, но является одним из возможных
подходов к решению проблемы. На сем месте
разрешите откланяться, и, если автора не
прибьют в конец обнаглевшие гоблины, то в
следующий раз и начнется серьезный разго-
вор об адвентюрах, а в частности - об их
словарном запасе.
ZF> Пара слов по поводу более простого
способа вызова теневика:
POKE 16384,243: POKE 16385,118: POKE
16386,251: POKE 16387,201: RANDOMIZE USR
16384
что в свою очередь значит:
DI
HALT
EI
RET
И вам не понадобиться переустанавливать
PC, a для выхода из теневика достаточно
просто набрать J.
2. Словарь.
Настала пора поговорить об языковых
проблемах. Можно долго спорить, какой
язык лучше - русский или английский. Ав-
тор придерживается того мнения, что лю-
бое произведение лучше всего читать в
оригинале, поэтому про всевозможные руси-
фикации может лишь заметить, мол, третий
сорт - не брак. Однако и в русской версии
игры, и в английской очень часто встает
вопрос: а что же программа сможет понять
из того, что ей скажут? И вообще, что ну-
жно сказать программе, чтобы пройти игру
дальше? Одного знания языка быват мало.
Так, например, несколько лет назад, играя
в игру Robin of Sherlock, я был весьма
удивлен тем, что, во-первых, нужно было
звонить по телефону Лестрейду, про суще-
ствование которого создатели позабыли
оповестить играющих, а, во-вторых, тем,
что для того, чтобы осуществить вышеука-
занное действие, нужна была команда Redi-
al, что означает перезвонить, а не Dial,
означающая просто позвонить. Для устране-
ния подобных обломов и полезно просматри-
вать словарь игры.
Существует несколько форматов хране-
ния словарей. Далее по тексту будут опи-
саны некоторые из них (те, которые ис-
пользовались в игрушах, валявшихся у ав-
тора где-то в районе коробки с дисками).
Совсем в конце будут приведены небольшие
программки, которые, ковыряясь в кишках
игрушки, вытаскивают на свет то, о чем
идет речь вот уже порядка полутора кило-
байтов. Что ж, настала пора войти в этот
Ад злобной богини Вентюры.
2.1 Пакетные игры.
2.1.1 ABS
А что Вы, собственно говоря, ожидали
здесь увидеть? Это весьма простой пакет,
где для ввода данных (словаря и пр.) и
для самой игры используется BASIC, чем
обуславливается неудобство написания, ма-
лый размер (в локациях, памяти же она за-
нимает отвратительно много), тормозность
при получении не только машкодового бло-
ка, но и при самой игре, и куча других
нареканий. Этот пакет пару лет назад ис-
пользовали русские программисты, наводняя
страну продукцией весьма сомнительного (в
большинстве своем) качества, за что ог-
ромное СПАСИБО нужно сказать все тому же
Инфоркому, который умудрился откопать это
чудо со свалки, русифицировал его и выпу-
стил в свет. Сам пакет можно найти в
ZX-Ревю (на мой взгляд "ревью" бы звучало
куда лучше и больше бы соответствовало
слову Review) NN 9-12 1993 года и в Spec-
trofon N 1 (данные приведены из памяти).
Вернемся к нашим баранам (это я не об
Инфоркоме). В пакете применяется самый
простой формат хранения словаря, описание
которого сейчас последует.
Формат N 1.
Каждое слово словаря начинается с пер-
вых, как правило, четырех букв слова.
Вместо четырех может быть и любое другое
число букв, например, пять или три, но
обычно используют именно четыре. Затем
следует номер этого слова в словаре, по-
сле чего - первые четыре буквы следующего
слова и т.д. Если длина слова меньше не-
обходимого для распознавания числа букв
(в данном случае меньше четырех), а это
бывает при использовании сокращений типа
E вместо EAST, то оставшееся место доби-
вается пробелами (будет E и три пробела)
или нулями.
В играх словарь начинается с адреса,
записанного в ячейках 64860/1. Встреча-
лась, правда, игрушка Last Rider, которая
базировалась на ABS, но сам пакет был до-
работан, благодаря чему программа воспри-
нимала не два, а три слова. В этой игре
начало словаря хранилось в ячейках
65297/8. Перед поиском словаря рекоменду-
ется переключиться на шрифт, используемый
в данной программе, особенно при просма-
тривании словаря русских игрушек.
2.1.2 QPI.
Этот пакет будет посерьезнее предыду-
щего. Сам пакет автору увидеть не дове-
лось, поэтому о том, что этот пакет пред-
ставляет, автор может судить лишь по иг-
рушкам, написанным в этом пакете. Хочется
заметить, что большинство пакетных игру-
шек, валявшихся на дисках, были написаны
именно в QPI, среди них изрядное количес-
тво занимают пародии на другие известные
адвентюрные игры. В пакете используется
следующий формат хранения словаря:
Формат N 2.
Сей формат являет собой модификацию
предыдущего формата, заключающуюся в том,
что сами слова закодированы. При кодиро-
вании использовалась команда CPL, которая
инвертирует все биты аккумулятора, т.е.
выполняет то же самое, что и команда
XOR #FF.
Существует два адреса, где могут хра-
ниться данные о начале словаря. В самых
старых игрушках (Hotel 'Africa Gardens';
Hampstead) они находятся в ячейках
27937/8, а в более новых - в ячейках
27557/8.
2.1.3 GAC
Этот пакет довольно хорошо известен
нашему народу, как и вышеопущенный ABS.
Информация о нем может быть найдена
где-то в районе Cпектрофона N 10, автор
же работал с кассетной версией, откопан-
ной там же, где и ABS. Не смотря на иден-
тичное место обнаружения, он вселяет го-
раздо больше оптимизьма в светлое будущее
пакетного адвентюропроизводизьма, чем его
менее удачливый коллега. Наверное, он на-
ходится на одной ступени с QPI. Словарь
же хранится следующим образом:
Формат N 3.
Сначала идет слово полностью. Потом
это слово заканчивается и вслед за ним
идет его номер. После этого все повторя-
ется. Кодировка отсутствует.
Эти данные были получены при работе с
прилагающимся примером игры и могут быть
совершенно другими в других игрушках, ко-
их автору видеть до сей поры еще не дове-
лось, окромя Apollo, но о ней нужно вести
разговор особый. Не смотря на вышеупомя-
нутый формат словаря, программа положи-
тельно реагирует на сокращения из трех
букв (как не стыдно! Не о том думаете!).
2.2 Беспакетные игры.
Настала пора рассмотреть продукцию тех
авторов, которые сказали:"Мы пойдем дру-
гим путем". Сказано - сделано, и вскоре
появляются замечательные игрушки, пере-
числять которые автор не будет (кто ж за
это ему будет благодарен?), а лучше зай-
мется он описанием форматов хранения сло-
варей в этих игрушках, отсортировав их по
производителям.
2.2.1 Adventure Soft
Здесь используется уже известный нам
Формат N 1 (Rebel Planet). Комментарии
излишни.
2.2.2 Adventure International
Словарь в игрушках этой фирмы имеет
пару различных форматов хранения, но, к
счастью, он не закодирован.
Формат N 4.
Сначала идет идентификатор слова, за-
нимающий один байт. Если он равен 0, то
слово, которое за ним последует, будет
новым словом, а если он равен 42 (#2А),
то следующее за ним слово будет синони-
мом предыдущего. Далее следуют первые че-
тыре буквы слова, после чего все повторя-
ется.
Такой формат кодирования применялся в
старых игрушках (Hulk). Осознав, видимо,
что в результате такой кодировки словаря
совершенно неоправданно расходуется лиш-
ний байт на каждое слово, программисты
побросали свои любимые игрушки, стали но-
чами не спать и, наконец, придумали, как
уберечь пропадавшую раньше сотню-другую
байт. Так, судя по всему, и появился сле-
дуюущий формат.
Формат N 5.
Вначале идут первые четыре буквы сло-
ва. Если первая буква - прописная латин-
ская, то слово новое, а если она заглав-
ная латинская, то это слово является си-
нонимом предыдущего. Три оставшиеся бук-
вы - заглавные. Следом идут четыре буквы
следующего слова, подчиняясь этому же
правилу и т.д.
Такой формат хранения словаря приме-
нялся в более поздних играх (Robin of
Sherwood, Seas of Blood). Словарь в них
начинается со следующей строки символов:
"aUTOgO". Если надумаете сами искать сло-
варь, то можно рекомендовать искать его
начало по этой строке.
2.2.3 Mastertronic.
Долгое время автор считал, что эта
фирма производит только игрушки, в кото-
рые заставляют играть приговоренных к
высшей мере наказания (хорошо по этому
поводу высказались в Robin of Sherlock).
Но тут попалась(лся/лось) на глаза ZZZZ,
и именно эта игрушка опровергла вышеупо-
мянутое представление об этой фирме. Фор-
мат хранения словаря - N 5.
Формат N 6.
Чем-то этот формат напоминает предыду-
щий. Вначале три заглавные буквы первого
слова, потом три заглавные буквы второго
и т.д.
2.2.4 Ocean.
Весьма уважаемая автором фирма, соз-
давшая множество неплохих Action игрушек,
приложила руку и к адвентюрам, и вышло у
нее это совсем неплохо. Для хранения сло-
варя был использован Формат N 1 с тремя
первыми буквами слова (Neverending
Story).
2.2.5 Abstract Concepts.
Концепции этой фирмы и вправду абс-
трактные, эдакий изврат. Если посмотреть
на игрушку невооруженным взглядом, а рас-
сматривался Mindfighter, то создается
впечатление наворотности. На самом же де-
ле все не так сложно, как могло бы быть,
а формат хранения словаря, на мой взгляд,
страдает некоторой избыточностью.
Формат N 7.
Словарь закодирован как и его коллега
под номером 2, т.е. используется команда
CPL. С самого начала обнаруживаются пер-
вые пять букв слова. Следом за ними идет
байт, значение которого означает номер
слова в группе. После него идет еще один
байт, означающий номер группы, к которой
принадлежит данное слово. При длине слова
менее пяти байт, оставшееся место забива-
ется пробелами, что в закодированном ва-
рианте соответствует числу 233. Синонимы
имеют одинаковые порядковые номера и но-
мера групп. Группы имеют следующие номе-
ра:
0. Глаголы
1. Не используется
2. Существительные
3. Прилагательные
4. Наречия, предлоги и прочая нечисть
5. Союзы
6. Местоимения
Про группы 4, 5 и 6 сказать что-либо
сложно, но, вроде бы, приемущественное
разграничение именно такое.
Словарь начинался с адреса 38433 в
файлах MindFX.A, где X={0..3}.
2.2.6 Level 9.
Похоже, девизом этой фирмы было выска-
зывание приблизительно следующего содер-
жания: "Никогда не делай проще то, что
можно и нужно сделать гораздо труднее".
Именно этого принципа фирма придержива-
лась во всех своих программах. О самой
фирме писалось где-то в неизменном
ZX-Ревю, если не ошибаюсь, 94 года. Без
приличного знания английского языка в
этих игрушках делать практически нечего,
а без приличного знания Assembler'а - не-
чего в них и ковыряться. В большинстве
случаев и то, и другое становится просто
бессмысленной тратой времени при отсут-
ствии наличия или при наличии отсутствия
вышеоговоренных знаний. Зато при знании
первого, а еще лучше и второго, гаранти-
ровано изрядное количество головодроби-
тельных, а не просто головоломных задач.
Впрочем, это - лирическое отступление.
Настала пора поговорить и о словаре.
Здесь подстерегают несколько форматов,
поэтому рассмотрим их согласно устано-
вленному регламенту. Для разминки фирма
использовала третий формат (Emerald
Isle). В программе Red Moon был использо-
ван немного другой формат, а имено вышео-
писанный Формат N 3. И вот мы подобрались
к самому навороченному формату хранения
данных из всех виденных ранее. Это извра-
щение было откопано в программе The Worm
in Paradise.
Формат N 8.
Признаюсь честно, я так до конца и не
разобрался, что и как там происходит, то
есть разобрался, но как это перевести во
что нибудь простое на BASIC'е или Assem-
bler'е мне до сих пор непонятно. Поэтому
не могу я его конкретно описать здесь, а,
чтобы не мучить вас своими 'вроде как',
приведу программку, позволяющую счастли-
вым владельцам теневого монитора просмо-
треть хоть как-то этот словарь.
2.3 Что делать?...
Написал я всю эту лабуду и подумал, а
кому все это, собственно говоря, нужно?
Посидел, подумал и хотел уж было весь
этот текст заксорить, а дискетку после
него расформатировать, но в последний мо-
мент, когда рука уже зависла над самой
главной кнопкой, пришла мысль о том, что
вдруг кто-нибудь мне этого не простит.
Вот так и остались вышеизложенные мысли в
этой статье. На самом же деле мораль это-
го текста вовсе не в них, а вот в чем.
Предположим такую ситуацию: неизвестно
откуда среди порядком поднадоевших ходи-
лок-собиралок, мочилок и прочих остаточ-
ных продуктов безотходного производства
появляется одна-единственная сиротинуш-
ка - адвентюрка. Решив, что заняться со-
всем нечем, Вы бросаетесь в бой и, пройдя
около половины игрушки, осознаете, что
дальше-то идут сплошные обломы. Что же
делать? Предлагаются следующие варианты
(нужное подчеркнуть):
а) Расформатировать диск и забыть об этой
адвентюре как о страшном сне.
б) Найти умного дядю, который либо произ-
ведет вместо Вас действие а), либо Вам
скажет, как ее пройти дальше.
в) При невозможности выполнения первых
двух действий прийдется копать про-
грамму самому.
Предположим также, что из предложенного
выбран третий пункт. Для начала следует
обратить внимание на файловую структуру
программы. Если с первого взгляда броса-
ется в глаза аномально огромная длина
BASIC-файла, то это или ABS'овское поро-
ждение, или не менее страшное нечто, ло-
гика которого написана в BASIC'e, либо
моноблоковый загрузчик. В первых двух
случаях рекомендуется просмотреть кодовые
блоки этих монстров каким-либо viewer'ом.
Если там нет ничего похожего на словарь,
то приготовтесь к поискам в BASIC'е. В
случае же с моноблоковым загрузчиком сто-
ит обматерить (про себя) тех буржуев, ко-
торым жалко лишнего полупустого сектора
на диске, а затем прийдется либо ломать
загрузчик и обломкам придавать вид фай-
лов, если просмотр каким-либо viewer'ом
дает ровным счетом ничего, а ломка такая
требует небольшого знания Assembler'a,
либо обзаводиться теневым монитором и ко-
паться в кишках дальше. Кстати, прежде
чем лезть вовнутрь любой адвентюры, пе-
рвым делом посмотрите коды viewerом - это
сэкономит и время, и нервы.
Обратите внимание на фирму, произвед-
шую Ваше подопытное животное и посмотри-
те эту статейку - быть может Вам повезет
и Вы найдете эту фирму (или пакет) среди
вышеописанных. Ну а если Вам повезет еще
больше, то формат, описанный здесь, сов-
падет с форматом в Вашей игре.
При наличии теневого монитора можно
слегка повеселиться. Бывают такие прогон-
щики, которые перекодируют загружаемые
данные сразу после загрузки, что встре-
чается довольно часто, либо во время за-
грузки, что встречается реже и, вроде бы,
только на ленте. В таком случае ждем до
тех пор, пока игрушка не начнет работать,
а затем с радостными воплями жмем любимый
Magic Button и, если какой-нибудь извра-
щенец не придумал обломать Вас с этим де-
лом, заЩИТщая свой загрузчик с очередной
хромающей ползукой, полной мегафуцков,
даете команды mem начиная от 25000 с ша-
гом 1000. Справа будет видно содержимое
ячеек в символьном виде. Двигаясь таким
макаром, Вы либо натолкнетесь на словарь,
а может быть и на текст сообщений, либо
прийдется лезть еще глубже.
Ежели Вам посчастливилось с пол-пинка
найти словарь, то можно поздравить Вас с
удачей. Остальным же можно посочувство-
вать и предложить провести проверку на
использование формата N 2 или N 7.
Для Формата N 2 можно использовать
следующую программку:
10 FOR N=256*PEEK 64861+PEEK 64860 TO
64000 STEP 5: PRINT PEEK (N+4);TAB 4;:
FOR M=N TO N+3: PRINT CHR$ (255-PEEK
M);: NEXT M: PRINT: NEXT N
Ну а если кто-то желает покопаться в
мозгах MindFighter'а, или посмотреть Фор-
мат N 7, рекомендуется следующее извраще-
ние:
10 FOR A=0 TO 6: PRINT '"Group ";A'': FOR
N=38433 TO 65535 STEP 7: IF PEEK
(N+6)=A THEN PRINT PEEK (N+5); TAB 7;:
FOR B=N TO N+4: PRINT CHR$ (255-PEEK
B);: NEXT B: PRINT
20 IF PEEK (N+7)=0 THEN GOTO 40
30 NEXT N
40 NEXT A
Можно предположить существование неко-
его формата, похожего на N 2 - использо-
вание кодировки по XOR #NN. В этом случае
можно опять же пролистать всю память ни-
жеследующей программкой, смотря на то,
что появляется сугубо скептически (с ша-
гом 1000, как и в ситуации с теневым мо-
нитором):
10 LET T=40000: LET A=1: POKE T+3,A:
INPUT L: FOR N=L TO 65535: POKE T+1,
PEEK N: RANDOMIZE USR T: NEXT N
Здесь Т - адрес расположения процедурки
в машкоде (его можно менять, но не за-
будьте запоукать машкод именно туда, к
чему приравняли Т), А - код ксорирования,
а сама процедура выглядит следующим обра-
зом:
62, 0, 238, 0, 215, 201 или
T LD A, 0
XOR 0
RST #10
RET
(Намеренно не привожу программок полно-
стью написанных в машкоде дабы не отпуг-
нуть юзеров - для них же, родимых, ста-
раюсь, а то ищи их потом...)
Набрав все это, делайте RUN. Далее
листайте память. Ничего не дало - меняй-
те А и снова - RUN. Повторю, что этот
недоформат - мои измышлизмы, сам я его
НИГДЕ не встречал, но вдруг?..
А теперь будет приведена обещанная ко-
вырялка для Формата N 8. Для начала за-
грузите игрушку как положено (эту фразу я
увидел в одной инструкции к Art Studio, и
у меня сразу же возник вопрос: а КАК по-
ложено?) . Когда игра запустится и выве-
дет Вам первый What now?, жмите MB. По
благополучному прибытию в теневой монитор
давайте команду mem #EAA0 и затем введите
следующую строку: .#CD, #C0,#FF. Переводя
на нормальный язык - CALL #FFC0, где и
разместится наша программка. Дайте коман-
ду mem #FFC0 и введите следующие строчки:
.#E5, #21, #43, #E6, #7E, #FE, 0, #28, 6
.#CD, #3C, #F0, #23, #18, #F5, #3E, #20
.#CD, #3C, #F0, #E1, #C9
что в переводе означает:
PUSH HL ; Запоминаем HL
LD HL, #E643 ; в HL - начало буфера,
; где хранится слово, вы-
; тащенное программой для
; сравнивания с тем, что
; Вы ввели на What now?
L1 LD A, (HL) ; В Акк. - содержимое HL
CP #0 ; Проверяем на конец сло-
; ва
JR Z, L2 ; Если конец - переход
; на L2
CALL #F03C ; Вызов подпрограммы пе-
; чати символа
INC HL ; Увеличиваем значение
; HL, чтобы прочитать
; следующую букву
JR L1 ; И все делаем заново
L2 LD A, #20 ; Суда мы попадаем, если
; слово закончилось. В
; Акк. - код пробела
CALL #F03C ; Печатаем пробел, чтобы
; слова не сливались
POP HL ; Восстанавливаем HL
RET ; Возвращаемся в програм-
; му
Теперь выходим из монитора и вводим
какое-нибудь слово. В ответ наша програм-
мка напечатает те слова, с которыми осно-
вная программа проверяла введенное слово.
В программе стоит хитрый анализатор, по-
этому вам прийдется слегка поработать,
чтобы просмотреть весь словарные запас.
Возможны глюки со стороны программы печа-
ти. Но все же это лучше, чем ничего.
здесь, казалось бы, можно было поста-
вить точку, но я скажу еще парочку слов.
Во-первых, здесь рассмотрено не все мно-
гообразие форматов хранения словарей, а
лишь только то, что у меня валялось под
рукой. Если у кого-то что-то завалялось
из неописанного мной, и он не может ра-
зобраться сам, то не шлите мне мегафуц-
ки, а лучше (если не влом) саму эту про-
граммку. Глядишь, что-нибудь про это бе-
зобразие и появитсяв следующем ZF. Може-
те и сами послать описание формата. Для
меня - халява, для Вас в этих двух слу-
чаях - персональный тханкс прям здесь,
если сами халявить не будете. А я тем
временем чем-нибудь да позанимаюсь . Так
что ждите того, сам не знаю чего да и
продолженьица - на этот раз про хранение
текстов. На сей весьма оптимистической
ноте разрешите закончить наш разговор.
Если повезет, то еще увидимся.
Другие статьи номера:
Похожие статьи:
В этот день... 30 октября