| Разработка и ромхакинг > Ромхакинг и программирование |
| M68K SANDBOX [SMD] |
| (1/2) > >> |
| vladikcomper:
M68K Sandbox - моя первая программа для Сеги, написанная целиком на ассемблере. Она изначально задумывалась как инструмент для отладки программ. Идея проста - вы пишите какой-нибудь законченный кусок кода, включаете его в программу и запускаете в эмуляторе. А SANDBOX предоставит вам средства для отладки, например возможность просматривать регистры и RAM. Но самое главное, при написании ASM-кода вы сможете воспользоваться дополнительными командами, для вывода текста, значений регистров и даже приостановки программы в любом месте. Например, команда OUT выводит строку на экран, команды OUTW, OUTB и OUTL выводят на экран числа из регистров, памяти - откуда угодно. PAUSE может приостановить выполнение программы в любом месте и ждать нажатия кнопки на джойпаде. Причем когда программа приостановлена, вы можете просматривать состояния регистров и памяти на данный момент. А теперь пример из жизни. Допустим, вы не знаете, что делает BCC (или знаете, но сомневаетесь и хотите проверить), можно написать следующий код: --- Код: --- move.w #$10,d0 cmpi.w #$20,d0 bcc.s BCCWorks out "BCC didn't work!" rts BCCWorks: out 'BCC worked!' rts --- Конец кода --- Когда вы скомпилируете проект и запустите его в SANDBOX'е, вот что получится в результате: (Кстати да, в моей программке можно просматривать исходнички ^_^ ) BCC не сработал? Попробуйте другое значение в cmp, экспериментируйте! В комплекте с программой поставляются множество примеров, которые расскажут вам об основных вещах в АСМе и о том, как пользоваться дополнительными командами. Кстати, намного более полная версия примера с BCC тоже есть. SANDBOX можно использовать для изучения кода и проверки кода из других игр, пример из Соник 1 тоже в комплекте :) Новые программы добавляются в Sandbox очень легко - вы просто ложите АСМ-файлы со своим кодом в отдельную папку и после компиляции они будут включены в РОМ. А компиляция - совсем простой процесс: нажимаете на build.bat - и готово. При запуске РОМа в эмуляторе будут показаны все включенные туда ASM-файлы, можно выбирать любой и запускать: Еще пример, вывод одного числа из регистра d0 в различных типах и системах счисления: --- Код: --- move.b #$F0,d0 ; let's put $F0 to d0 and see it in different modes! outb d0 ; see as Unsigned Hexadecimal break outb d0,signed ; see as Signed Hexadecimal break outb d0,dec ; see as Unsigned Decimal break outb d0,dec+signed ; see as Signed Decimal break outb d0,bin ; see as Unsigned Binary break outb d0,bin+signed ; see as Signed Binary pause move.w #$1020,d0 outw d0 ; see as Unsigned Hexadecimal word break outw d0,signed ; see as Signed Hexadecimal word break outb d0 ; see as byte pause move.l #-$1,d0 outl d0 ; see as unsigned break outl d0,signed ; see as signed break outl d0,trim+signed ; see as signed with triming! rts --- Конец кода --- Результат: Тестовая программая, заполняющая память: Программа пока что в стадии бета-версии, возможны глюки, и просмотр исходного кода работает очень глючно. Если вы заметите внезапные вылеты, баги, пожалуйста, сообщайте. SANDBOX пока что полностью на английском, включая комментарии в примерах и коде самой программы, русские символы пока не поддерживаются, хоть их довольно легко добавить - просто дорисуйте буквы в файле шрифта. Есть только документация на русском. Переводить программу на русский я не планировал, потому что во-первых, она была рассчитана на иностранное сообщество, а во вторых многие термины я знаю только в английском варианте и никак не могу подобрать им нормального перевода =Ъ Скачать И не забудьте прочитать Readme_ru.htm, там даны описания всех команд. EDIT: Описание |
| Smoke:
Интересная программка. Эх пораньше бы ее года этак на 2. Сейчас уже мне вполне хватает генса с дебаггером ^_^ |
| Razor:
О круто, что и тут выложил прогу ^_^ А ЦИС не достоин этой проги ? |
| vladikcomper:
--- Цитата: Razor_ua от 05 Ноябрь 2010, 21:29:00 ---О круто, что и тут выложил прогу ^_^ А ЦИС не достоин этой проги ? --- Конец цитаты --- Программа требует некоторого понимания того, как работает код. Как я заметил, у всех, кто начинает познавать ассемблер с хакинга Соник 1 с его дизасемблом, это понимание очень сильно нарушено, из-за того, что они подошли к АСМу не с той стороны. Как ни печально, но факт. Вместо того, чтобы разбираться в командах, многие рвутся составлять свой код, просто копируя или редактируя готовые строчки, опираясь только на коментарии к ним. Начинающим хакерам кажется, что инструкции вида "move.w #$600,($FFFFF760).w ; Sonic's Top Speed" вызывают магические процессы над изменением физики Соника, в то время как они просто записывают значение в адрес, а оно будет обработано другим кодом. В итоге, большинство людей просто не могут понять суть, не могут понять, почему нельзя просто вырывать без раздумий код из Соников и вставлять его в Sandbox. И я сам был такой в далеком 2009-м. Пытался по гиду вставить Спин Дэш, не имея ни малейшего представления о том, что такое АСМ :) Понадобилось очень много усилий, долблений о стенку, чтобы перевернуть, "выправить" мое искаженное неправильным подходом представление об АСМе. И только тогда я научился составлять осмысленный код, освоил процессы дебага и имел представление о работе игры. Очень печально, но даже на Ретро многие не могут понять суть программы. :( А на ЦИСе... ну ты понял. Можно конечно выложить на ЦИСе, но не знаю, будет ли это иметь смысл - 99,99% не поймут, нубы могут закидать бесконечно тупыми вопросами касаемо смысла программы. Как вариант - темка просто повисит без постов и канет в небытие... |
| Sakura:
Долго писал? |
| vladikcomper:
--- Цитата: Sakura от 05 Ноябрь 2010, 22:09:41 ---Долго писал? --- Конец цитаты --- Чуть меньше месяца, начал примерно 12 октября. Впрочем, в разработке был перерыв примерно неделю, из-за занятости и прочих дел. Если бы все время я был свободен, думаю, уложился бы в 2 недели. |
| Ti_:
--- Цитата: Smoke от 05 Ноябрь 2010, 20:32:44 ---Сейчас уже мне вполне хватает генса с дебаггером ^_^ --- Конец цитаты --- я обычным генсом проверял: пошаговое выполнение в нем хоткей - T (рус-Е); открываю, сразу же ставлю на паузу и потом в дебаг. cycles там еще показывает такты(скорость). --- Код: --- dc.l 0,reset reset: nop ; ваш код moveq #1,d0 ; end: bra.s end --- Конец кода --- p.s. программу может гляну потом как настроение будет. успехов автору если она кому поможет. |
| r57shell:
Так, я тут долго тупил, и не мог понять по описанию, что она делает. И вот тут, похоже догодался. Это обёртка для рома который ей скормишь, которая даёт возможность выводить отладочную инфу? Хмм интересно. Если да, то непонятно как её можно юзать с нормальной игрой. А те куски где надо "что-то проверять" я обычно отлаживаю за счёт хитростей, например сделаю nop который делается только при определённом условии, или например в какое-нить видное место буду выводить то, что надо... Пока не сильно понятно куда был убит месяц ). |
| Segaman:
неплохо ^_^ кому-то и пригодится, но не мне :cool: |
| vladikcomper:
--- Цитата: r57shell от 06 Ноябрь 2010, 00:26:14 ---Так, я тут долго тупил, и не мог понять по описанию, что она делает. И вот тут, похоже догодался. Это обёртка для рома который ей скормишь, которая даёт возможность выводить отладочную инфу? Хмм интересно. Если да, то непонятно как её можно юзать с нормальной игрой. А те куски где надо "что-то проверять" я обычно отлаживаю за счёт хитростей, например сделаю nop который делается только при определённом условии, или например в какое-нить видное место буду выводить то, что надо... Пока не сильно понятно куда был убит месяц ). --- Конец цитаты --- Эх, наверное я не понятно объяснил. Тогда начну с простого. У программы несколько целей применения. Например, она может помочь начинающим разобраться с тем, как работают разные команды. Например, если нужно проверить, в каких конкретно случаях срабатывает BCC, можно написать небольшую программку, которая показана в первом посте. В CMP можно будет подставлять разные значения и узнавать, кода же срабатывает BCC. Моя программка позволяет выводить числа в разных системах счисления, так что можно вживую увидеть, как работают команды EOR, AND, OR, NOT (пример в комплекте). Люди, хорошо разбирающиеся в АСМе и пишущие на нем большие по объему коды, проверять, правильно ли они работают. Для этого не к чему запихивать все, можно лишь часть, которая вероятнее всего глючит. Вот мой пример: давным давно я написал код, обесцечивающий палитру (это часть цикла, цвет в d2, конечный цвет будет там же): --- Код: --- moveq #0,d3 move.b d2,d3 andi.b #%11110000,d3 lsr.b #4,d3 ; G andi.b #%1111,d2 add.b d2,d3 ; G + R swap.w d2 add.b d2,d3 ; G + R + B divu.w #3,d3 ; divide by 3 andi.b #%1110,d3 ; mod 2 moveq #0,d2 move.b d3,d2 lsl.b #4,d2 add.b d3,d2 swap.w d2 move.b d3,d2 swap.w d2 --- Конец кода --- Код по какой-то причине работал неверно, и вместо серой палитры, получалась сепия. Если бы у меня тогда был SANDBOX, я запихнул бы туда этот кусок кода и добавил outw d2 и outw d3 в некоторые места, и знал бы какие значения у d2/d3 в определенных местах, это быстро бы помогло найти ошибку. Да, можно просто ставить бранч на бесконечный цикл в эмуляторе между нужных строк и смотреть значения регистров, но разве может эмулятор показать их в разных системах счисления, с типом signed, и только нужного размера (word или byte)? Нет, здесь удобнее использовать SANDBOX :) |
| r57shell:
Берёшь Gens_11a ставишь после тех строг где ты поставил outw d2 бряки, и смотришь на регистры сам. Понта не вижу. И даже если это не регистр (сложно смотреть, что в не регистре) то есть Tools->Ram Watch который надо просто обновлять ручками (Edit, OK). Те кто дружит с Hex легко переводят в 10-тичную. точнее чаще всего если что-то десятичное, то обычно это одно число, которое можно в калькуляторе перевести, а потом уже в хексе остальное на калькуляторе проверять. Пока не понял... Дак всёже обёртка да? Код который ей дают - встраивает в себя. |
| MetalliC:
не хотелось бы расстраивать автора, но подобные фишки уже есть в эмуляторах с нормальными отладчиками, например в MESS/HazeMD, называются trace, tracelog и т.п. |
| vladikcomper:
--- Цитата: r57shell от 06 Ноябрь 2010, 18:59:21 ---Дак всёже обёртка да? Код который ей дают - встраивает в себя. --- Конец цитаты --- Да, конечно. Перед запуском компилятора, срабатывает моя программа-includer, которая перебирает все файлы и включает их. Просмотр исходного кода в Sandbox'е реализован точно также - та же текст из ASM-файлов обрабатывается и влючается в РОМ. Впрочем, разницы в форматах особой нет, если только перенос строки делается байтом $80 и не работают табы. --- Цитата: MetalliC от 06 Ноябрь 2010, 19:22:22 ---не хотелось бы расстраивать автора, но подобные фишки уже есть в эмуляторах с нормальными отладчиками, например в MESS/HazeMD, называются trace, tracelog и т.п. --- Конец цитаты --- Хм, не знал, и все это время пользовался менее совершенными средствами дебага. Выходит, зря я так старался, все это уже есть в самих эмуляторах. Эх, жаль. Ну по крайней мере для себя опыт приобрел, отойдя от хакинга и написав первую программу под SMD. Идея Sandbox'а была лучшим, что я мог придумать для своей разработки. По крайней мере, она может быть полезна (при обилии современных продвинутых эмуляторов с дебаггерами) в качестве площадки для экспериментов (изучения команд, составления простейших алгоритмов и пр.). В этом случае использовать Sandbox думаю будет действительно удобнее, чем применять трюки и пользоваться дебаггерами. |
| worm:
vladikcomper, не унывай, программа на мой взгляд весьма актуальна! :) Удобно то, что ее (саму программу) можно легко редактировать без заморочек с компиляторами т.к. нужный уже встроен. Мне нравится :) |
| r57shell:
1) унывай, да, давайте проголосуем, я за "унывай" 2) Удобно что? Ещё разок ) Я 5 раз прочитал не понял, больше - не осилил. "саму программу" - какую? если это про сандбокс, тогда вопрос, как можно без заморочек с компиляторами её редактировать?) она же тоже на чём-то написана ). Compile - собирать. прогерская шутка "сидишь в Microsoft Visual Studio и нервно тычишь F7 приговаривая: "Соберись тряпка!" " END_OF_JOKE. |
| worm:
r57shell, :lol: веселый ты Ну удобно саму прогу ковырять, полезно (мне) для восприятия) Кстати можно так асм для сеги создать, прикольно будет)) |
| vladikcomper:
--- Цитата: HackerLee от 19 Ноябрь 2010, 18:27:04 ---Кстати можно так асм для сеги создать, прикольно будет)) --- Конец цитаты --- АСМ? Как ты себе это представляешь? --- Цитата: HackerLee от 18 Ноябрь 2010, 20:33:48 ---vladikcomper, не унывай, программа на мой взгляд весьма актуальна! :) Удобно то, что ее (саму программу) можно легко редактировать без заморочек с компиляторами т.к. нужный уже встроен. Мне нравится :) --- Конец цитаты --- Я и не унываю. Написание программы намного улучшило мои навыки программинга и знания АСМа. К тому же даже сейчас я периодически пользуюсь ей для экспериментов (я очень ленивый, и не хочу разбираться в работе продвинутых дебагеров). А другие, видимо, предпочитают дебаггеры и не обращают на мой самодельный велосипед внимания. =Ъ Впрочем, буду рад, если моя программа поможет в изучении АСМа (именно в изучении, а не отладке, для этих целей она прекрасно подходит) |
| r57shell:
--- Цитата: vladikcomper от 19 Ноябрь 2010, 21:46:43 ---АСМ? Как ты себе это представляешь? --- Конец цитаты --- ACM? Я его знаю, а вот вы никто не знаете... даже не догадываетесь. Различайте ASM с ACM - разные вещи. Вот где настоящий ACM. Я его знаю, т.к. постоянно участвую. --- Цитата: vladikcomper от 19 Ноябрь 2010, 21:46:43 ---Я и не унываю. --- Конец цитаты --- 1) Кому говорю унывай говорю. 2) Ты уныл? Если нет перейти к шагу 1. Пей "унылко" чтобы вырасти и стать унылым, и гавном )). --- Цитата: vladikcomper от 19 Ноябрь 2010, 21:46:43 ---Написание программы намного улучшило мои навыки программинга и знания АСМа. --- Конец цитаты --- 1) Пропустил слово "этой" 2) Знание ACM-а тебе не прибавило, а вот знания ASM может быть. --- Цитата: vladikcomper от 19 Ноябрь 2010, 21:46:43 ---К тому же даже сейчас я периодически пользуюсь ей для экспериментов. --- Конец цитаты --- 1) если слово "сейчас" вырезать получится смешно. --- Цитата: vladikcomper от 19 Ноябрь 2010, 21:46:43 ---(я очень ленивый, и не хочу разбираться в работе продвинутых дебагеров) --- Конец цитаты --- Ты уже ленивый? Поздравляем первый левел. Осталось стать: Унылым, и гавном. --- Цитата: vladikcomper от 19 Ноябрь 2010, 21:46:43 ---А другие, видимо, предпочитают дебаггеры и не обращают на мой самодельный велосипед внимания. =Ъ --- Конец цитаты --- Да, имено, я сижу и предпочитаю, и предпочитаю... делаю перерыв на обед, и снова предпочитаю. Предпочитать - такое весёлое занятие не находишь?). Да, какой нафиг велосипед - предпочитать интереснее. "Привет, пошли на улицу по предпочитаем пару часиков?" --- Цитата: vladikcomper от 19 Ноябрь 2010, 21:46:43 ---Впрочем, буду рад, если моя программа поможет в изучении АСМа (именно в изучении, а не отладке, для этих целей она прекрасно подходит) --- Конец цитаты --- Будь. --- Цитата: vladikcomper от 05 Ноябрь 2010, 18:52:28 ---M68K Sandbox - моя первая программа для Сеги, написанная целиком на ассемблере. --- Конец цитаты --- Первый блин, комом. А кому блин как блин )). --- Цитата: vladikcomper от 05 Ноябрь 2010, 18:52:28 ---Она изначально задумывалась как инструмент для отладки программ. --- Конец цитаты --- Пожелаю, чтобы её использовали не по назначению ))). Да, и чтобы не останавливали её крутящие части голыми руками или.... (кто знает пропущеное слово - маладец) (Это был прикол про бензопилу). |
| vladikcomper:
r57shell, какой толстый троллинг. --- Цитата ---ACM? Я его знаю, а вот вы никто не знаете... даже не догадываетесь. Различайте ASM с ACM - разные вещи. --- Конец цитаты --- --- Цитата ---Пей "унылко" чтобы вырасти и стать унылым, и гавном )). --- Конец цитаты --- --- Цитата ---Да, имено, я сижу и предпочитаю, и предпочитаю... делаю перерыв на обед, и снова предпочитаю. Предпочитать - такое весёлое занятие не находишь?). --- Конец цитаты --- --- Цитата ---Ты уже ленивый? Поздравляем первый левел. Осталось стать: Унылым, и гавном. --- Конец цитаты --- Поздравляем, стопицотый левел. Вы труЪ УГ |
| r57shell:
Надеюсь всем понравилось, спасиба спасиба... я так старался. Да и настроение так поднялось. Эх сёдня на паре был такого-же типа прикол... Представьте вас ведут на экскурсии а потом экскурсовод говорит "Внимание смотрите! Это - стена! Любой желающий, может побится об неё в любой момент времени! Не стесняйтесь." |
| Навигация |
| Главная страница сообщений |
| Следующая страница |