Разработка и ромхакинг > Ромхакинг
M68K SANDBOX [SMD]
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 думаю будет действительно удобнее, чем применять трюки и пользоваться дебаггерами.
Takamura-kun:
vladikcomper, не унывай, программа на мой взгляд весьма актуальна! :)
Удобно то, что ее (саму программу) можно легко редактировать без заморочек с компиляторами т.к. нужный уже встроен. Мне нравится :)
r57shell:
1) унывай, да, давайте проголосуем, я за "унывай"
2) Удобно что? Ещё разок ) Я 5 раз прочитал не понял, больше - не осилил. "саму программу" - какую? если это про сандбокс, тогда вопрос, как можно без заморочек с компиляторами её редактировать?) она же тоже на чём-то написана ). Compile - собирать.
прогерская шутка "сидишь в Microsoft Visual Studio и нервно тычишь F7 приговаривая: "Соберись тряпка!" " END_OF_JOKE.
Takamura-kun:
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:
Надеюсь всем понравилось, спасиба спасиба... я так старался. Да и настроение так поднялось. Эх сёдня на паре был такого-же типа прикол...
Представьте вас ведут на экскурсии а потом экскурсовод говорит "Внимание смотрите! Это - стена! Любой желающий, может побится об неё в любой момент времени! Не стесняйтесь."
Навигация
Перейти к полной версии