ZX Турбо Дизассемблер. Немного информации для тех, кто заинтересовался этой штукой. Divide et impera (разделяй и властвуй) (C) Иноземцев Алексей. Special for ZX Power. ________________________________ Итак, вы уже побаловались с этим программным продуктом и те- перь решили найти ответы на воп- рос: зачем это нужно, и как этим пользоваться? Отлично, это как раз то место,в котором эти отве- ты и находятся. Ответ на вопрос, для чего предназначена эта программа, не так и прост. Сначала попробуем ответить на вопрос, для чего эта программа не предназначена. Эта программа не может отлаживать ваши творения, ломать чужие или снимать защиту с UFO-2. Это не отладчик, не вьюер и даже не мо- нитор, хотя очень на них похоже. Это именно дизассемблер, един- ственным назначением которого является получение текста на языке ассемблера, максимально приближенного к тому тексту, ко- торый в начале веков, в далекой, далекой Англии был написан и ас- семблирован в игрушку легендар- ной Ocean Software. И теперь, разглядывая прошедшую огонь, во- ду и волшебные кнопки, програм- му, вы уже не будете ломать се- бе голову, чем же порубить на куски сей многострадальный про- дукт интеллектуального труда, чтобы затем использовать эти запчасти в своих шедеврах. Этот дизассемблер был зачат двумя монстрами отладки: MONS'ом и STS'ом 4.0. Но как и каждый сын он на порядок перерос своих родителей в деле получения ис- ходного текста, которым, по чис- той случайности, забыл поде- литься с вами ваш незнакомый друг-кодер. Те, кто пытался достать исход- ник с помощью MONS'а или STS'а, воистину должны были запастись терпением индийского йога, для того чтобы получить текст, так- же полезный, как и полное собра- ние сочинений В.И.Ленина на мон- гольском языке. Теперь же, вы можете получить текст, пусть не 100%-но такой же, как у автора (комментарии, увы, не восстанавливаются) но, тем не менее, который позволит вам как угодно переписать, до- полнить, урезать разобрать по косточкам (хрящам, сухожилиям и.. см. "Атлас анатомии") любую программу отечественного или им- портного производства (реклам- ная пауза). Теперь как же эти все чудеса сотворить. Надеемся не надо обьяснять как запустить сие чу- до техники (для тех, кому надо, сообщаем: наберите в TR-DOS RUN "ZXD" и.. о чудо! Оно закрути- лось!!!) Посему сразу престу- паем к описанию программы. После запуска (см. выше) вы узрите приблизительно такую кар- тинку: сверху полоса меню, со всякими словами, а внизу полоса подсказок, которая в данный мо- мент подсказывает вам название программы. В середине находится рабочее поле (Desktop по ихнему) на котором и будет происходить все самое интересное, но сейчас оно закрашено приятным серо-бу- ро-малиновым цветом, что озна- чает, что никакая программа по- ка не загружена в рабочую об- ласть. Поразглядываем теперь внима- тельнее слова в полосе меню. Их там четыре штуки: FILE (файл, а не филе), VIEW (глазеть), DISASSM (о..! майн готт!!) и OPTIONS (непонятно что). Заме- тим, что одна из букв в этих словах выделена красным цветом (именно красным, даже если крас- ного там и в помине нет, напри- мер: все слово написано синим, а первая буква фиолетовым, код си- него 1, код фиолетового 3, вычи- таем из большего меньшее полу- чаем 2 - красный цвет! Дальтони- ки могут проделывать этот рас- чет каждый раз) так вот если на- жать на такую вот клавишу, то получите интересный эффект: вы- падет кубик с еще одной кучкой слов. Для FILE эти слова будут та- кими: Load prog - грузануть прог- рамму, которую вы собственно и собрались разделывать. Наберите ее имечко (фамилия всегда <C>) и все будет тип топ. Save work - если после того как вы отделили коды от данных (см. пункт VIEW) вам, возможно, захотелось сохранить это разде- ление на диске, чтобы в следую- щий раз не глядеть тупо на дев- ственный код, а продолжить (ис- править) свой work, то вам пря- мая дорога в этот пункт меню. Введите имя (фамилия по-мужу бу- дет <w>) и, вставив в дисковод какой-нибудь круглый предмет (желательно дискету) смело жми- те <ENTER>. Open work - если вы уже че- го-то наковыряли и даже ухитри- лись это самое сохранить на дис- ке перед тем как в вашем районе вырубили свет, то этот пункт ме- ню позволит вам получить назад ваши труды праведные для дальнейшего поливания их твор- ческим потом. Имя вводится и т.д. и т.п.. Но! файл с исходным кодом обязан присутствовать на диске и именно под тем именем, которое было у него на момент сохранения вашего workа (понят- но, что его имя может не совпа- дать с именем workа, просто ес- ли вы сделаете ему Rename, то программа его никакими водолаза- ми не отыщет). Catalogue - поглядеть, чего еще не доели вирусы на вашей дискете. Вам покажут прибли- зильно тоже, что и LIST в TR-DOSе, но это все это можно полистать туда-сюда-обратно (кнопки на полосе подсказок) и посмотреть в десятиричной (если вы умеете считать только до 10) или 16-ричной системе. Drive - самая приятная менюшка для тех, у кого один дисковод - вам никогда не придется сюда лазить. Для остальных приятная возможность выбрать флоппер ко- торый меньше глючит (Всем прият- но - кайф). Quit - если вам насто..доело все это и вам просто захотелось поиграть в UFO-2 (класс!), ну что ж поделать... Reset конечно проще, однако из этой опции иногда удается выпасть в Бейсик откуда потом можно попытаться вернуться (sorry,paradise lost). Покончив с филе.. с FILE идем к следующему пункту Главного. VIEW - тут все очень просто. Вы- берите вид отображения информа- ции Code или Dump и... (Wellcome to hell!!). Тут-то все и начинается. Но (с горбачевским акцентом) не надо, товарищи, отчаиваться. Совмес- тными усилиями мы придем к кон- сенсусу (апплодисменты). Если вы загрузились file, в смысле филе, то вы сей prog и увидите в зака- заном виде (Dump или Code). Те- перь ваша задача правильно раз- метить (расписать, раскрасить) этот prog по четырем типам дан- ных: byte, word, code, space, для чего применяется такая шту- ка как БЛОК. Сначала блок надо отметить сначала и с конца той области, которую надо преобразо- вать к нужному типу (сам понял че сказал?). Начало БЛОКа отме- чается кнопкой "q", а конец "a". После того, как вы проделаете все эти операции вам покажут (инверсией) свежевыделеный БЛОК, а в правом верхнем углу зами- гает слово "block". И затем кнопками 1,2,3,4 (только не все сразу) устанавливаете нужный тип. Без БЛОКа жать их абсолют- но бесполезно. Определившись с типом блока, советуем снять БЛОК клавишей "z" от греха подальше, дабы гуляющие по клавиатуре та- раканы случайно не испортили го- ды кропотливой работы. Если вы сразу не запомнили столько кно- пок то это не страшно - нажмите <EXT> (для тех, кто не понял, коробка конопок в конце файла) вывалится менюха со всеми клави- шами. Если у вас какая-то кноп- ка дребезжит, заедает или ее ам- путировали в детстве, то курсор- ными клавишами выберите чего на- до и давите <ENTER> - эффект бу- дет тот-же. Теперь подробнее о типах дан- ных: byte - просто байт данных, в тексте будет стоять после DEFB. Если он попадает в диапа- зон #20..#7f то будет заменен на соотв. символ (sorry, других ва- риантов нет). На дампе выделяет- ся белым цветом. word - слово-метка (если по- падает в программу) или просто слово данных (если попадает в другое место) будет стоять пос- ле DEFW и на дампе выделяется желтым цветом. code - просто код, ничего больше, голубой цвет. space - если вам не важно что именно лежит здесь, главное, чтобы оно занимало место, это тип как раз то, что нужно. Если там 6 симфония Баха для биппера с оркестром, не волнуйтесь она сохранится в отдельном файле. На экране этот тип отображается как DEFS мmm, где mmm - это не АО"МММ", а количество байт кото- рые вы ухитрились запихнуть в эту строчку. В текстовом файле эта строчка будет выглядеть как insert "nnmmm", где nn (бес)по- рядковый номер insertа, а mmm - длина угадайте чего. Если вы смотрите на CODE,то увидите жал- кую, намазанную зеленкой, строч- ку, но переключившись на DUMP увидите обширное, успокаивающее глаза, зеленое поле. Как же угадать какой байт ка- ким цветом красить? К сожалению готовых рецептов не дает даже "Книга о вкусной и здоровой пи- ще" Но, к счастью, есть нес- колько полезных кнопочек, нажи- мать которые мы сейчас научимся: r - (не путать с R) самая полезная кнопка. Она позволяет найти первого, кто указывает на данную строчку (т.е. ту на кото- рую положили курсором) если та- кой товарищ найдется то вам его покажут, если нет - вы услышите длинный гудок и останетесь на месте. R - (не путать с r) находит следующего, кто указывал на ту строчку. j - если в данной строке есть метка, то вы к ней и перейдете,а если нет то испытаете на проч- ность свои барабанные перепонки. l - если в данной строке есть метка, но вы хотите чтобы ее не стало, например: #7ffa 01fd7f ld bc,l7ffd #7ffd ed79 out (c),a Ежу понятно, что 7ffd это адрес порта конфигурации ZX128, а не метка команды out.Из этой ситуа- ции есть только два выхода: либо подвести курсор к строке и на- жать l, либо ковырять только те progи в которых делается только out (#fd),a (ау, скорпионщики!). m - если в данной строке нет метки, а переехать куда-нибудь хочется - жмите эту кнопку и вводите адрес станции назначе- ния. Перед 16-ричным числом ста- вится забор (#), а десятиричное покатит и так. i - (не путать с I) если у вас голубым цветом остались покраше- ны лишь отдельные байты пора за- даться вопросом "Как так - на 30 килобайт программы 200 байт ко- да?". Жмите эту кнопку и вы сра- зу узнаете где делается CALL/JP/ JR/DJNZ в середину, как вам ка- жется, какой-нибудь порнокартин- ки. Смотрите внимательно, ис- правляйте. Если же все так и бы- ло задумано, то жмите I - (не путать с i) следую- щий такой CALL/JP и так далее. b - и, наконец, если после всех этих утомительных путешест- вий вам захотелось вернуться назад (I'll be back) - пра- вильно, но только на один шаг. Остальные кнопки понажимаете сами, ничего особо интересного они не делают, кроме пожалуй <GRAF> которая в DUMPе перекиды- вает курсор с HEXа на TEXT и об- ратно. Теперь, собственно, то, ради чего мы все здесь и собрались. Следующий пункт Главного - DISASSM. В этом подменю всего четыре пункта, так что мы сей- час их по-быстренькому и дока- наем. Первый пункт: Build labels - вообще сюда попал по ошибке. Обычно с него и надо начинать работу, но ничего не поделаешь - торчит он именно здесь. Ну чтож, выберем его. Ми- нуты две компьютер будет показы- вать вам, как он быстро умеет считать до ..надцати тысяч,а по- том адреса,на которые есть пере- ходы, обращения и т.п. (словом будущие метки) засветятся как синяки на роже боксера, помогая вам разобраться что к чему. Clear labels - если вам ос- точертела эта иллюминация, пожа- луйста - все метки быстренько потухнут (а вот зажечь их обрат- но так быстренько не получится). Disassm all - вот он Момент Истины, Минута Озарения, Час X. После трудов праведных да воз- дастся нам по делам нашим. Помо- лившись и перекрестившись (сот- ворив намаз, воспев Кришну или на худой конец трижды плюнув че- рез плечо) быстренько вводим имя будущего текста (7 букв по гори- зонтали). Компьютер еще раз сде- лает инвентаризацию всем меткам и затем начнет великое таинство записи текста на диск. Но не то- ропитесь уходить за пивом, в сортир или еще куда. Запись тек- ста 40ка килобайтной игрушки за- нимает меньше минуты (в турбе). Дождавшись конца можете смело выходить (эй, а work кто списы- вать будет?), грузить ассемблер ZXASM 2.4 и смотреть почему это все не работает. Если файлов текста получилось больше одного, то создается main-файл в кото- ром кроме includов ничего нет (загадка для любителей математи- ки: почему не может быть двух текстовых файлов?). Хотя дизас- семблер написан в ZXASMе 3.0, он поддерживает только формат тек- ста ZXASM 2.xx, sorry сей недос- таток будет исправлен в первую очередь. Тем, кто любит ломать глаза в TASMе/MASMе ничем по- мочь не можем - обращайтесь к окулисту. (хм.. Идя на встре- чу пожеланиям трудящихся, воз- можно будет сделана поддержка TASMа 2.0). Disassm blk - если вам пон- равился какой-то кусочек кода, а на остальную лабуду вам начхать, отметьте БЛОКом тот скроллер,ко- торый, на ваш вкус, лучше всех и спокойно дизассемблите его в от- дельный файл. Без БЛОКа такой номер не проходит. И вот последний пункт Главно- го - Options. Зачем он нужен - непонятно. Скорее всего он на- фиг никому не нужен. Просто у всех есть, а мы че хуже? Ну раз он тут торчит, ладно, опишем и его. Первая опция: New start - если вы выдрали код неизвестно откуда и вам в облом было доктором вставить правильный стартовый адрес, мо- жете вставить его сейчас. Sound - вообще-то никакого soundа в программе нет, так па- ровозные гудки и все. Но если у кого будет желание послушать по ходу дела любимый музон - пожа- луйста, присылайте ваши ST, PT или MOD файлы. А пока вы можете выбрать устройство которое бу- дет для вас гудеть и щелкать. Это может быть: Beeper - звенит тихо и слегка подтормаживает, поэтому предназ- начен для тех, кто лишен счастья слушать AY-Chip - классный рев при минимуме съедаемого машинного времени. Стоит по-умолчанию. None - если ваши бетховенс- кие уши категорически не перено- сят ничего, кроме тишины, возми- те побольше ваты и скорее сюда. Следующим номером нашей прог- раммы будет: Colours - те, кому наплевать на цвета в программе, могут вык- лючить монитор на пару минут, а для остальных собщаем, что изме- нить цвета вы сможете только в следующей версии, о чем вы еще раз сможете прочесть в этом пун- кте меню. И наконец (фу-у..) About - ..... (ну че, about он и в Африке about). Ну вот и все, что вам нужно для работы Рафаэли Секко и Оли- веры Твинсы наших дней. Надеюсь Exolon 2 и Cybernoid 3 не заста- вят себя долго ждать. С надеждой в душе и шлакобло- ком на шее. Иноземцев А.С. Зугрэс-2, кремль 10.11.1996 23:57 ________________________________ Апендицит A. Приветы и прочее. Особый привет и большую благо- дарность хочу выразить Марущен- ко Вите за моральную поддержку и бесполезные советы. (Витек,hi!). Донецк: К.Афендиков и В.Рубцов (ZXASM-3 классная штука,thanks), ALOS и др. Харьков: Cobra, James Advent, В.М.Г., Max Iwamoto и др. Зугрэс: Витек и его компания. Харцызск: OV (thanks за music), Ваня & Дизя. Апендицит B. Гарантийные обязательства. Автор гарантирует наличие глю- ков в программе, посему уходит от уголовной ответственности как чистосердечно признавшийся и глубоко раскаявшийся. По-этому встретившись один-на-один с ка- ким-нибудь глюком, не паникуйте, не зовите адвоката, военкома или родную маму, а возьмите ручку, бумагу и запишите где, когда и при каких обстоятельствах вы с ним познакомились. Свои письма, бандероли, посылки и контейнеры отправляйте по адресу: 343710 г.Зугрэс-2, Донецкой обл. ул. 60 лет Октября, д.6а, кв.41 Иноземцеву Алексею Сергеевичу Ну, а если в вашем принтере кончились иголки, то звоните по телефону: (06257) 4-31-88 с 9:30 до 17:00 в рабочие дни ________________________________