Автор Тема: M68K SANDBOX [SMD]  (Прочитано 7024 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн vladikcomper

  • Пользователь
  • Сообщений: 57
  • Пол: Мужской
    • Просмотр профиля
M68K SANDBOX [SMD]
« : 05 Ноябрь 2010, 18:52:28 »
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: Описание
« Последнее редактирование: 19 Ноябрь 2010, 21:28:50 от vladikcomper »

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #1 : 05 Ноябрь 2010, 20:32:44 »
Интересная программка. Эх пораньше бы ее года этак на 2. Сейчас уже мне вполне хватает генса с дебаггером ^_^

Оффлайн Razor

  • Пользователь
  • Сообщений: 1963
  • Пол: Мужской
  • Gotta Go Fast!
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #2 : 05 Ноябрь 2010, 21:29:00 »
О круто, что и тут выложил прогу ^_^ А ЦИС не достоин этой проги ?

Оффлайн vladikcomper

  • Пользователь
  • Сообщений: 57
  • Пол: Мужской
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #3 : 05 Ноябрь 2010, 21:46:21 »
О круто, что и тут выложил прогу ^_^ А ЦИС не достоин этой проги ?

Программа требует некоторого понимания того, как работает код. Как я заметил, у всех, кто начинает познавать ассемблер с хакинга Соник 1 с его дизасемблом, это понимание очень сильно нарушено, из-за того, что они подошли к АСМу не с той стороны. Как ни печально, но факт.

Вместо того, чтобы разбираться в командах, многие рвутся составлять свой код, просто копируя или редактируя готовые строчки, опираясь только на коментарии к ним. Начинающим хакерам кажется, что инструкции вида "move.w #$600,($FFFFF760).w ; Sonic's Top Speed" вызывают магические процессы над изменением физики Соника, в то время как они просто записывают значение в адрес, а оно будет обработано другим кодом. В итоге, большинство людей просто не могут понять суть, не могут понять, почему нельзя просто вырывать без раздумий код из Соников и вставлять его в Sandbox.

И я сам был такой в далеком 2009-м. Пытался по гиду вставить Спин Дэш, не имея ни малейшего представления о том, что такое АСМ :)
Понадобилось очень много усилий, долблений о стенку, чтобы перевернуть, "выправить" мое искаженное неправильным подходом представление об АСМе. И только тогда я научился составлять осмысленный код, освоил процессы дебага и имел представление о работе игры.

Очень печально, но даже на Ретро многие не могут понять суть программы. :( А на ЦИСе... ну ты понял.
Можно конечно выложить на ЦИСе, но не знаю, будет ли это иметь смысл - 99,99% не поймут, нубы могут закидать бесконечно тупыми вопросами касаемо смысла программы. Как вариант - темка просто повисит без постов и канет в небытие...

Оффлайн Sakura

  • Пользователь
  • Сообщений: 54
  • Пол: Мужской
  • Иногда презираемое-имеет огромную ценность
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #4 : 05 Ноябрь 2010, 22:09:41 »
Долго писал?

Оффлайн vladikcomper

  • Пользователь
  • Сообщений: 57
  • Пол: Мужской
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #5 : 05 Ноябрь 2010, 22:19:39 »
Долго писал?
Чуть меньше месяца, начал примерно 12 октября. Впрочем, в разработке был перерыв примерно неделю, из-за занятости и прочих дел. Если бы все время я был свободен, думаю, уложился бы в 2 недели.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #6 : 05 Ноябрь 2010, 22:53:50 »
Сейчас уже мне вполне хватает генса с дебаггером ^_^
я обычным генсом проверял:
пошаговое выполнение в нем хоткей - T (рус-Е);  открываю, сразу же ставлю на паузу и потом в дебаг.  cycles там еще показывает такты(скорость).
dc.l 0,reset

reset:
nop ; ваш код
moveq #1,d0   ;


end:
bra.s end


p.s. программу может гляну потом как настроение будет. успехов автору если она кому поможет.
« Последнее редактирование: 05 Ноябрь 2010, 22:56:31 от Ti_ »

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #7 : 06 Ноябрь 2010, 00:26:14 »
Так, я тут долго тупил, и не мог понять по описанию, что она делает. И вот тут, похоже догодался. Это обёртка для рома который ей скормишь, которая даёт возможность выводить отладочную инфу? Хмм интересно. Если да, то непонятно как её можно юзать с нормальной игрой.

А те куски где надо "что-то проверять" я обычно отлаживаю за счёт хитростей, например сделаю nop который делается только при определённом условии, или например в какое-нить видное место буду выводить то, что надо... Пока не сильно понятно куда был убит месяц ).

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #8 : 06 Ноябрь 2010, 10:21:10 »
неплохо ^_^
кому-то и пригодится, но не мне  :cool:

Оффлайн vladikcomper

  • Пользователь
  • Сообщений: 57
  • Пол: Мужской
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #9 : 06 Ноябрь 2010, 15:38:26 »
Так, я тут долго тупил, и не мог понять по описанию, что она делает. И вот тут, похоже догодался. Это обёртка для рома который ей скормишь, которая даёт возможность выводить отладочную инфу? Хмм интересно. Если да, то непонятно как её можно юзать с нормальной игрой.

А те куски где надо "что-то проверять" я обычно отлаживаю за счёт хитростей, например сделаю 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

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #10 : 06 Ноябрь 2010, 18:59:21 »
Берёшь Gens_11a ставишь после тех строг где ты поставил outw d2 бряки, и смотришь на регистры сам. Понта не вижу. И даже если это не регистр (сложно смотреть, что в не регистре) то есть Tools->Ram Watch который надо просто обновлять ручками (Edit, OK). Те кто дружит с Hex легко переводят в 10-тичную. точнее чаще всего если что-то десятичное, то обычно это одно число, которое можно в калькуляторе перевести, а потом уже в хексе остальное на калькуляторе проверять. Пока не понял...

Дак всёже обёртка да? Код который ей дают - встраивает в себя.

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9386
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #11 : 06 Ноябрь 2010, 19:22:22 »
не хотелось бы расстраивать автора, но подобные фишки уже есть в эмуляторах с нормальными отладчиками, например в MESS/HazeMD, называются trace, tracelog и т.п.

Оффлайн vladikcomper

  • Пользователь
  • Сообщений: 57
  • Пол: Мужской
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #12 : 07 Ноябрь 2010, 12:04:54 »
Дак всёже обёртка да? Код который ей дают - встраивает в себя.
Да, конечно. Перед запуском компилятора, срабатывает моя программа-includer, которая перебирает все файлы и включает их. Просмотр исходного кода в Sandbox'е реализован точно также - та же текст из ASM-файлов обрабатывается и влючается в РОМ. Впрочем, разницы в форматах особой нет, если только перенос строки делается байтом $80 и не работают табы.

не хотелось бы расстраивать автора, но подобные фишки уже есть в эмуляторах с нормальными отладчиками, например в MESS/HazeMD, называются trace, tracelog и т.п.
Хм, не знал, и все это время пользовался менее совершенными средствами дебага. Выходит, зря я так старался, все это уже есть в самих эмуляторах. Эх, жаль. Ну по крайней мере для себя опыт приобрел, отойдя от хакинга и написав первую программу под SMD. Идея Sandbox'а была лучшим, что я мог придумать для своей разработки.

По крайней мере, она может быть полезна (при обилии современных продвинутых эмуляторов с дебаггерами) в качестве площадки для экспериментов (изучения команд, составления простейших алгоритмов и пр.). В этом случае использовать Sandbox думаю будет действительно удобнее, чем применять трюки и пользоваться дебаггерами.

Оффлайн Takamura-kun

  • Пользователь
  • Сообщений: 1086
  • Пол: Мужской
  • Закалён и плечист.
    • ВКонтакте
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #13 : 18 Ноябрь 2010, 20:33:48 »
vladikcomper, не унывай, программа на мой взгляд весьма актуальна!  :)
Удобно то, что ее (саму программу) можно легко редактировать без заморочек с компиляторами т.к. нужный уже встроен. Мне нравится  :)

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #14 : 19 Ноябрь 2010, 10:36:23 »
1) унывай, да, давайте проголосуем, я за "унывай"
2) Удобно что? Ещё разок ) Я 5 раз прочитал не понял, больше - не осилил. "саму программу" - какую? если это про сандбокс, тогда вопрос, как можно без заморочек с компиляторами её редактировать?) она же тоже на чём-то написана ). Compile - собирать.

прогерская шутка "сидишь в Microsoft Visual Studio и нервно тычишь F7 приговаривая: "Соберись тряпка!"  "  END_OF_JOKE.

Оффлайн Takamura-kun

  • Пользователь
  • Сообщений: 1086
  • Пол: Мужской
  • Закалён и плечист.
    • ВКонтакте
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #15 : 19 Ноябрь 2010, 18:27:04 »
r57shell:lol: веселый ты
Ну удобно саму прогу ковырять, полезно (мне) для восприятия)
Кстати можно так асм для сеги создать, прикольно будет))

Оффлайн vladikcomper

  • Пользователь
  • Сообщений: 57
  • Пол: Мужской
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #16 : 19 Ноябрь 2010, 21:46:43 »
Кстати можно так асм для сеги создать, прикольно будет))
АСМ? Как ты себе это представляешь?

vladikcomper, не унывай, программа на мой взгляд весьма актуальна!  :)
Удобно то, что ее (саму программу) можно легко редактировать без заморочек с компиляторами т.к. нужный уже встроен. Мне нравится  :)
Я и не унываю.
Написание программы намного улучшило мои навыки программинга и знания АСМа. К тому же даже сейчас я периодически пользуюсь ей для экспериментов (я очень ленивый, и не хочу разбираться в работе продвинутых дебагеров). А другие, видимо, предпочитают дебаггеры и не обращают на мой самодельный велосипед внимания. =Ъ
Впрочем, буду рад, если моя программа поможет в изучении АСМа (именно в изучении, а не отладке, для этих целей она прекрасно подходит)

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #17 : 19 Ноябрь 2010, 22:20:24 »
АСМ? Как ты себе это представляешь?
ACM? Я его знаю, а вот вы никто не знаете... даже не догадываетесь. Различайте ASM с ACM - разные вещи. Вот где настоящий ACM.
Я его знаю, т.к. постоянно участвую.

Я и не унываю.
1) Кому говорю унывай говорю.
2) Ты уныл? Если нет перейти к шагу 1.

Пей "унылко" чтобы вырасти и стать унылым, и гавном )).

Написание программы намного улучшило мои навыки программинга и знания АСМа.
1) Пропустил слово "этой"
2) Знание ACM-а тебе не прибавило, а вот знания ASM может быть.

К тому же даже сейчас я периодически пользуюсь ей для экспериментов.
1) если слово "сейчас" вырезать получится смешно.

(я очень ленивый, и не хочу разбираться в работе продвинутых дебагеров)
Ты уже ленивый? Поздравляем первый левел. Осталось стать: Унылым, и гавном.

А другие, видимо, предпочитают дебаггеры и не обращают на мой самодельный велосипед внимания. =Ъ
Да, имено, я сижу и предпочитаю, и предпочитаю... делаю перерыв на обед, и снова предпочитаю. Предпочитать - такое весёлое занятие не находишь?).
Да, какой нафиг велосипед - предпочитать интереснее. "Привет, пошли на улицу по предпочитаем пару часиков?"

Впрочем, буду рад, если моя программа поможет в изучении АСМа (именно в изучении, а не отладке, для этих целей она прекрасно подходит)
Будь.

M68K Sandbox - моя первая программа для Сеги, написанная целиком на ассемблере.
Первый блин, комом. А кому блин как блин )).

Она изначально задумывалась как инструмент для отладки программ.
Пожелаю, чтобы её использовали не по назначению ))).

Да, и чтобы не останавливали её крутящие части голыми руками или.... (кто знает пропущеное слово - маладец) (Это был прикол про бензопилу).

Оффлайн vladikcomper

  • Пользователь
  • Сообщений: 57
  • Пол: Мужской
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #18 : 19 Ноябрь 2010, 23:32:55 »
r57shell, какой толстый троллинг.

Цитата
ACM? Я его знаю, а вот вы никто не знаете... даже не догадываетесь. Различайте ASM с ACM - разные вещи.
Цитата
Пей "унылко" чтобы вырасти и стать унылым, и гавном )).
Цитата
Да, имено, я сижу и предпочитаю, и предпочитаю... делаю перерыв на обед, и снова предпочитаю. Предпочитать - такое весёлое занятие не находишь?).
Цитата
Ты уже ленивый? Поздравляем первый левел. Осталось стать: Унылым, и гавном.
Поздравляем, стопицотый левел. Вы труЪ УГ
« Последнее редактирование: 19 Ноябрь 2010, 23:35:30 от vladikcomper »

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #19 : 20 Ноябрь 2010, 00:16:52 »
Надеюсь всем понравилось, спасиба спасиба... я так старался. Да и настроение так поднялось. Эх сёдня на паре был такого-же типа прикол...
Представьте вас ведут на экскурсии а потом экскурсовод говорит "Внимание смотрите! Это - стена! Любой желающий, может побится об неё в любой момент времени! Не стесняйтесь."

Оффлайн Takamura-kun

  • Пользователь
  • Сообщений: 1086
  • Пол: Мужской
  • Закалён и плечист.
    • ВКонтакте
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #20 : 20 Ноябрь 2010, 14:14:37 »
r57shell, жжошь  :lol:

Цитата
АСМ? Как ты себе это представляешь?
vladikcomper, даже не представляю))
Не ну для изучения asm самое то на мой взгляд.

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: M68K SANDBOX [SMD]
« Ответ #21 : 20 Ноябрь 2010, 14:48:02 »
vladikcomper, а теперь, что я думаю по этому поводу.
Ты лучше бы добавил возможностей в эмулятор какой-нибудь, вот это было бы очень адско.
1) Адско тем кто хочет хакнуть
2) Адско тем кто хочет отдебажить свой проект
3) Адский опыт в программировании на C++ & может быть на ASM x86, и может быть (ну это уже маловероятно) на ASM M68k.
К примеру я когда прикрутил к эмулю отладчик M68k моего знания M68k не повысилось, и когда я прикрутил отладчик Z80 которого я и не знал, моего знания Z80 сНова таки не повысилось. Чтобы прикрутить отладчик - не нужно знание самого ассемблера, т.к. 100% уже есть готовый дизассемблер, нужно только его прикрутить.
Однако с помощью Z80 отладчика я разшифровал формат музыки RRR, который всёещё не публикую... а зачем? Кто вообще сможет в нём что-то написать? Прийдётся либо писать программу в которой можно будет редактировать музон, либо писать программу для сжатия этого музона, иначе просто он не влезает в ограничения... короче пока возможно только ручным трудом заталкивать...