Перейти к содержимому
vladikcomper

M68K SANDBOX

4 сообщения в этой теме

При написании АСМ-кода для различных игр на Сегу, процесс отладки и проверки этого кода бывает сильно затруднен. Не всегда возможно точно знать результат работы последней команды, быть уверенным, что сработал бранч в нужном месте. Конечно, современные эмуляторы позволяют просматривать RAM, VRAM, регистры и пр., но этого не всегда достаточно. А если код в добавок ко всему большой, это настоящая головная боль.

Намучавшись так с отлаживанием некоторых больших кусков кода, у меня появилась абсолютно сумасшедшая для меня тогда идея - сделать инструмент, который мог бы как-то облегчить этот нелегкий процесс. Но я пошел намного дальше, и в результате появился... SANDBOX.

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[/code] Когда вы скомпилируете проект и запустите его в SANDBOX'е, вот что получится в результате: SANDBOX_scr-01.pngSANDBOX_scr-02.png (Кстати да, в моей программке можно просматривать исходнички ^_^ ) BCC не сработал? Попробуйте другое значение в cmp, экспериментируйте! В комплекте с программой поставляются множество примеров, которые расскажут вам об основных вещах в АСМе и о том, как пользоваться дополнительными командами. Кстати, намного более полная версия примера с BCC тоже есть. SANDBOX можно использовать для изучения кода и проверки кода из других игр, пример из Соник 1 тоже в комплекте :) Новые программы добавляются в Sandbox очень легко - вы просто ложите АСМ-файлы со своим кодом в отдельную папку и после компиляции они будут включены в РОМ. А компиляция - совсем простой процесс: нажимаете на build.bat - и готово. При запуске РОМа в эмуляторе будут показаны все включенные туда ASM-файлы, можно выбирать любой и запускать: SANDBOX_scr-03.png Еще пример, вывод одного числа из регистра [b]d0[/b] в различных типах и системах счисления:
[code]
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_scr-04.png

Тестовая программая, заполняющая память:

SANDBOX_scr-05.pngSANDBOX_scr-06.png

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

SANDBOX пока что полностью на английском, включая комментарии в примерах и коде самой программы, русские символы пока не поддерживаются, хоть их довольно легко добавить - просто дорисуйте буквы в файле шрифта. Есть только документация на русском.

Переводить программу на русский я не планировал, потому что во-первых, она была рассчитана на иностранное сообщество, а во вторых многие термины я знаю только в английском варианте и никак не могу подобрать им нормального перевода =Ъ

Скачать

И не забудьте прочитать Readme_ru.htm, там даны описания всех команд.

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Программа хорошая. Но только время покажет - не зря ли ты её делал столько времени...

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Программа хорошая. Но только время покажет - не зря ли ты её делал столько времени...

У меня с этой прогой проблеммы, никто не может понять основную ее идею и не знает, для чего ее использовать. =( Но тем, кто понял, она очень сильно помогла и они остались очень довольны. Эх, как бы всем объяснить...

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Она очень полезная, по крайней мере, для меня. Я смог благодаря ей написать алгоритм сжатияразжатия RLE. Я на ней могу проверить каждый шаг кода, который неправильно работает, и мне будет легче вычислить ошибку. Я изредка делаю эксперименты на ней, чтобы продвинуться в области АСМ. Возможно, в экспериментах я могу найти фишку, которая мне облегчит жизнь в АСМ.

Если все делать в исходнике S1, то было бы очень мне тяжело все это делать, т.к. пришлось бы мне писать постоянно дополнительный код-отладчик, чтобы просчитывать код или искать в нем ошибки. Я иногда так делаю, использую только один любимый простой отладчик "jmp *" про которого я узнал у Vladikcomper'а, если код не такой уж сложный. Если этот простой код-отладчик мне не поможет или код слишком сложный, то я бегу за мощным отладчиком M68K SANDBOX с уверенностью, что он мне поможет на 99,99%. Это происходит почти всегда. А если он мне даже не смог помочь, то я бегу за помощью к Vladikcomper'y, он мне поможет найти, и объяснит ошибку, которую я допустил.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пожалуйста, войдите для комментирования

Вы сможете оставить комментарий после входа



Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×