Автор Тема: Разработка под M68K  (Прочитано 46544 раз)

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

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3206
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Разработка под M68K
« : 18 Август 2009, 22:47:14 »
нифига се ресы. я такую билибирду никада невидел (без обид). и компиль на 4мега. абалдеть. я фигею, как ва всём этом ещё и можно было танки слепить.

Тема была создана из разливанного флуда в Battle City для SEGA MEgaDrive2. Заголовок можно поправить, обращайтесь если что...
Yaranga.
« Последнее редактирование: 23 Август 2009, 17:34:14 от Yaranga »

Оффлайн totin

  • Пользователь
  • Сообщений: 337
  • Пол: Мужской
    • Просмотр профиля
Геймдев под M68K
« Ответ #1 : 18 Август 2009, 23:10:18 »
нифига се ресы. я такую билибирду никада невидел (без обид). и компиль на 4мега. абалдеть. я фигею, как ва всём этом ещё и можно было танки слепить.
ты привык на примитивном уровне в асме копаться а нормальные инструменты не 60кило весят и языки есть поинтереснее чем асм, но их учить конечно же нужно в отличии от асм. а асм годится только для узкого круга азадчь, и там где можно без него обойтись, лучше все таки обойтись, дабы не тратить свое время в погоне за сомнительными перспективами в виде размера/скорости. вот такое мое ИМХО (без обид)

Добавлено позже:
фраза "я фигею, как ва всём этом ещё и можно было танки слепит" вообще с ног валит (: дружище, это C, может это будет для тебя откровением, но на этом языке делают большинство софта, в особенности игр, в том числе и для SEGA, или ты думаешь что всё на асме пишут? может для денди и было все на асме а для сега я думаю по крайней мере большинство хороших игр было на С

Оффлайн Zephyr

  • Пользователь
  • Сообщений: 535
  • Пол: Мужской
  • coder
    • Просмотр профиля
Геймдев под M68K
« Ответ #2 : 19 Август 2009, 11:46:12 »
Цитата: Segaman
я фигею, как ва всём этом ещё и можно было танки слепить.
Целиком согласенс с totin. Segaman, ты сам подумал что написал??? Или у кого-то просто дикое желание выпендриться!?
« Последнее редактирование: 19 Август 2009, 12:21:49 от Zephyr »

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3206
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Геймдев под M68K
« Ответ #3 : 19 Август 2009, 14:31:23 »
Не, просто я действительно фигею. я на C видел тока проги на комп, но никак не гамы на сегу.

Оффлайн totin

  • Пользователь
  • Сообщений: 337
  • Пол: Мужской
    • Просмотр профиля
Геймдев под M68K
« Ответ #4 : 19 Август 2009, 15:57:50 »
Не, просто я действительно фигею. я на C видел тока проги на комп, но никак не гамы на сегу.
а ты вообще много видел исходников сеговских игр? хоумбрю и системный код типа драйверов не в счет. я думаю что вообще не видел, я тоже не видел но можно смело сказать что их писали на С так как нет ни одной объективной причины по которой мог бы использоваться асм в качестве основного языка. я даже только что припомнил исходники технопоповской игры/демки "ship" которые валяются вмести с исходниками GEMS, отгадай на каком языке написано?
ты так рассуждаешь "я на C видел тока проги на комп" так и что? ты много чего не видел, а я не один год проработал в игрострое и за плечами не один проект, и проекты разные, для разных платформ, крупные и не очень, масштабные,над которыми работала большая команда и свои поменьше. я точно знаю как и на чем нужно делать, а то что ты на асме копашишся и больше ничего не видишь это твои проблемы, у тебя такими темпами останется все на аматорском уровне, типа покодил, покодил, слепил pong, порадовался за себя и на этом все. хотя если  особо ничего не собираешся делать, а кодить на асме в кайф и делается все это исключительно ради удовольствия а не ради результата то это другое дело.
лично у меня ассемблерная романтика закончилась давным давно, ещё во времена спектрумов и меня не "возбуждает" мысль о тотальном контроле над каждым тактом процессора

Оффлайн sergi

  • Пользователь
  • Сообщений: 1648
    • ВКонтакте
    • Просмотр профиля
Геймдев под M68K
« Ответ #5 : 19 Август 2009, 16:05:10 »
Я видел, кстати я даже имею исходники нескольких игр - если кому надо то могу поделиться запросто

2 игры
Turrican 3

Mr Nuts 2

проблема одна - исходники то С, но вообще девелоперский софт был на компьютере Амига
поэтому нужно както коды эти перекодить уже под ваш девелоперский компилятор
но вполне реально думаю - там все есть практически

Оффлайн totin

  • Пользователь
  • Сообщений: 337
  • Пол: Мужской
    • Просмотр профиля
Геймдев под M68K
« Ответ #6 : 19 Август 2009, 16:12:10 »
вот, кстати, вспомнил после поста sergi ещё одну проблему асмокода - он не переносим абсолютно, сишный можно пересобрать под целевой процессор а асм разве что переписать. а код С от одного к другому компилятору сильно менять не прийдется.

Оффлайн sergi

  • Пользователь
  • Сообщений: 1648
    • ВКонтакте
    • Просмотр профиля
Геймдев под M68K
« Ответ #7 : 19 Август 2009, 16:54:24 »
Ну вот Mr Nuts 2 кто хочет сделать?, точнее нужно переделать, какбы платформер

си можно перенести он универсален, ну конечно главное чтобы железо могло реализовать это дело
просто хароших компиляторов на разные платформы к сожалению не так уж много, сега то харошо в этом плане прошарена, а остальные все через одно место :-\

Оффлайн totin

  • Пользователь
  • Сообщений: 337
  • Пол: Мужской
    • Просмотр профиля
Геймдев под M68K
« Ответ #8 : 19 Август 2009, 17:17:50 »
sergi компиляторы должны быть нормальные, как минимум GCC под любой проц я думаю есть. думаю вполне можно пользоваться сеговским компилем  для программ для ягуара, к примеру (там же вроди тоже м68к?).
« Последнее редактирование: 19 Август 2009, 17:24:19 от totin »

Оффлайн sergi

  • Пользователь
  • Сообщений: 1648
    • ВКонтакте
    • Просмотр профиля
Геймдев под M68K
« Ответ #9 : 19 Август 2009, 17:31:11 »
Там у сопроцессоров свои инструкции ну базовый код на M68K
но сколько видал компиляторов - все интерфейс имеют хуже наверно нельзя придумать и в плане ягуара - там такая хрень, компиляторы есть но кривые код может и не работать потом или сбоить :-\

Оффлайн totin

  • Пользователь
  • Сообщений: 337
  • Пол: Мужской
    • Просмотр профиля
Геймдев под M68K
« Ответ #10 : 19 Август 2009, 17:47:43 »
да, кривой код и у сеги бывает, SGCC к примеру глюкавый. интерфейс у них наверно у всех одинакоый - мейкфайл и командная строка, я честно сказать ненавижу мейкфайлы, но чтоже поделаешь, от них никуда не деться (: правда иногда их любезно автоматом генерируют и можно в гуе все настройки производить. вообще если помчуаться и хорошо все настроить, прикрутить к любимой IDE то дальше просто кайф. я к примеру работаю с сегой через нетбинс или визуал студию, очень удобно

Оффлайн sergi

  • Пользователь
  • Сообщений: 1648
    • ВКонтакте
    • Просмотр профиля
Геймдев под M68K
« Ответ #11 : 19 Август 2009, 18:30:42 »
Ну я с асмом работаю, но мне так проще и нужнее, т.к. хочу для себя много вещей понять

но програмить можно и на асме, он особо от си мало отличается как таковой в плане различных математических действий

вот сорс http://www.raregame.ru/file/Mr_Nutz_2_source_code_MD.zip
кому нада - смотрите

Оффлайн totin

  • Пользователь
  • Сообщений: 337
  • Пол: Мужской
    • Просмотр профиля
Геймдев под M68K
« Ответ #12 : 20 Август 2009, 02:14:55 »
сбосибо за серцы, взгляну как деды делали (:

Оффлайн romanich

  • Пользователь
  • Сообщений: 25
  • Пол: Мужской
  • пришёл
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #13 : 01 Сентябрь 2009, 06:40:10 »
Решил не плодить темы, написал в этой (коль уж кодинг для 68k, точнее Си)

Страница по Сеге МД:
http://segasecret.narod.ru

Демка с исходниками (тамже и бинарник)

Это так... в качестве разминки :)

А вообще желается написать небольшую игру. С нуля... Свою... Со своими главперсами...
Поэтому не порт и не хак и даже не ремейк :)

Вопрос Си-программистам 68k:

кто-нибудь объявлял static-переменные в функциях?

типа пример:

void Function(void)
{
 static char z=5; //При первом вызове z будет 5 (потом ещё на 1 увеличится)
 z++; //z будет увеличиваться при каждом вызове функции
}

нужно для того, чтобы не плодить кучу глобальных переменных и не присваивать им начальные значения в main()

у меня почему-то пакет(XGCC) делает переменную z read only, тоесть суёт в ROM-секцию

а нужно, чтобы в RAM и делал начальное присвоение.


« Последнее редактирование: 01 Сентябрь 2009, 06:47:01 от romanich »

Оффлайн totin

  • Пользователь
  • Сообщений: 337
  • Пол: Мужской
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #14 : 01 Сентябрь 2009, 14:11:50 »
все будет нормально, если не будешь инициализировать переменную начальным значением

Добавлено позже:
кстати, в GenesisDev04 походу посвежее компилятор чем в XGCC

Оффлайн romanich

  • Пользователь
  • Сообщений: 25
  • Пол: Мужской
  • пришёл
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #15 : 02 Сентябрь 2009, 02:52:21 »
все будет нормально, если не будешь инициализировать переменную начальным значением

в GenesisDev04 (от Stef'а который) тоже нельзя начальное значение присваивать, если нужна переменная?

кстати, в GenesisDev04 походу посвежее компилятор чем в XGCC

скачал MDKit с вашей ссылки, в папке bin лежит приложение sh.exe - оно не запускается под WinXP PE SP3  пишет, что "sh.exe - не является приложением Win32" :(
По этой же причине не отрабатывают до конца make-файл...

Оффлайн totin

  • Пользователь
  • Сообщений: 337
  • Пол: Мужской
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #16 : 02 Сентябрь 2009, 03:17:54 »
поставь cygwin, с ним все должно нормально работать, хотя по началу я и без него умудрялся, но возникали коекакие проблемы, особенно если запускать компилятор из IDE
GenesisDev04 (он же GCC 3.4.6) тоже нельзя инициализировать автоматом все, что в RAM находится. но нулями вполне можно все  инициализировать если в самом начале, перед переходом на main, залить весь RAM нулями, что и сделано в sega.s который лежит в GenesisDev04
такое вот там есть:

* clear Genesis RAM
        lea     0xff0000,%a0
        moveq   #0,%d0
clrram: move.w  #0,(%a0)+
        subq.w  #2,%d0
        bne     clrram
        jmp     start

думаю это вполне нормальный вариант

Добавлено позже:
кстати, твой ДиджиталТрешер - вешь! (:

Оффлайн romanich

  • Пользователь
  • Сообщений: 25
  • Пол: Мужской
  • пришёл
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #17 : 02 Сентябрь 2009, 04:32:13 »
GenesisDev04 (он же GCC 3.4.6) тоже нельзя инициализировать автоматом все, что в RAM находится.

Ну тогда не вижу причин менять XGCC (к которому уже успел прилипнуть  :)

нулями вполне можно все  инициализировать если в самом начале, перед переходом на main, залить весь RAM нулями, что и сделано в sega.s

так и сделано, только не всегда нулями нужно и не всё...

кстати, твой ДиджиталТрешер - вешь! (:

спасибо  :) старался...  :)



Оффлайн Ti_

  • Пользователь
  • Сообщений: 3255
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #18 : 03 Июнь 2010, 02:36:06 »
кто знает в чем отличия  команды  JSR   $4EBAxxxx   (pc?)   от  bsr.w $6100xxxx (pc)
                                                  и с   jmp ($4EFA)/ bra.w ($6000 также.

есть ещё JSR 4EB8 xxxx   , xxxx - абс. адрес +$8000 до -$8000.  ( $xxxx    $FFFFxxxx)

почему 4eb8  не было использована в игре Rock n' roll Racing , а только 4eb9  xx xx xx xx (jsr  xxxxxxxx) ?

еще интересует что такое  st   sttr  (что-то не нашел у себя)





Оффлайн Smoke

  • Пользователь
  • Сообщений: 3427
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #19 : 03 Июнь 2010, 17:35:10 »
JSR   $4EB8xxxx -- это обычный джамп, где ХХХХ это 2-х байтовый адрес. Прыгать можно от 0 до $FFFF. Редко используется.
Джампы относительно PC по-моему ничем и не отличаются от bsr.w/bra.w, так что не нужно заморачиваться с ними, размер у них одинаковый.
Цитата: Ti_
еще интересует что такое  st   sttr  (что-то не нашел у себя)
Это что? Ни разу не встречал, и в мануалах нету

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3255
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #20 : 03 Июнь 2010, 18:08:18 »
JSR   $4EB8xxxx -- это обычный джамп, где ХХХХ это 2-х байтовый адрес. Прыгать можно от 0 до $FFFF. Редко используется.
Джампы относительно PC по-моему ничем и не отличаются от bsr.w/bra.w, так что не нужно заморачиваться с ними, размер у них одинаковый.Это что? Ни разу не встречал, и в мануалах нету
да нет, 4eb8 насколько я помню до $8000 только , а если больше то в обратку пойдет. (как moveq)
sega assembler v.3 как раз автоматически делает именно 4eb8 если адрес позволяет, а не 4eb9.
насчет jmp pc - да я не заморачивался просто интересно, что-то две команды одинаковые чтоли?(в RRR есть и те и те)
ST есть в dune2  (в базе IDA) , только не могу показать где - не на том компе сейчас.  а в дебагере от Shella она обозначалась как STTR, а в Яковлеве тоже вроде St.

кстати swap 1-ый и 4-ый байты меняет? лень проверять было. но если так странно,что не сделали 1+2-ым с 3+4-ым - получилось бы как 2word'a.


« Последнее редактирование: 03 Июнь 2010, 18:15:03 от Ti_ »

Оффлайн evgeny

  • Пользователь
  • Сообщений: 1387
  • Пол: Мужской
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #21 : 03 Июнь 2010, 18:25:23 »
4eb8 - насколько я помню до $8000 - это прыжок в ROM, а после в RAM.

Оффлайн Марат

  • Пользователь
  • Сообщений: 559
  • Пол: Мужской
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #22 : 03 Июнь 2010, 22:14:25 »
еще интересует что такое  st   sttr  (что-то не нашел у себя)

Судя по документаций - это установка значения по условию. В идеале команда обозначается как Scc, где cc - condition code - ложь, истина, меньше, равно и т.д. Если условие выполняется, то по эффективному (исполнительному) адресу устанавливается значение $FF, в противном случае $00.

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3427
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #23 : 03 Июнь 2010, 23:48:33 »
Цитата: Ti_
но если так странно,что не сделали 1+2-ым с 3+4-ым - получилось бы как 2word'a.
По-моему так и сделали. Первые два меняются с двумя последними. Давно уже юзал свап, точно не помню

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9473
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #24 : 04 Июнь 2010, 01:06:33 »
Ti_,найди нормальную книгу/PDF по M68K и всё поймешь (жаль сейчас моторола бумажные книжки нашару не высылает, я в свое время успел заполучить парочку ;) )

по прошлому вопросу: bsr и jsr в твоем конкретном случае  - делают одно и то же,
но вообще:
bsr - тупо переход относительно PC с 8-ми 16-ти или 32-х битным (68020+) знаковым смещением
jsr - переход с хреновой кучей возможных адресаций (в том числе и относительно PC c 16-ти битным смещением)

Цитата: Ti_
да нет, 4eb8 насколько я помню до $8000 только , а если больше то в обратку пойдет. (как moveq)
sega assembler v.3 как раз автоматически делает именно 4eb8 если адрес позволяет, а не 4eb9.
насчет jmp pc - да я не заморачивался просто интересно, что-то две команды одинаковые чтоли?(в RRR есть и те и те)
по моторовской книжке:
4eb8 это jsr (xxxx).w - переход на абсолютный 16-ти битный адрес (не относительный, т.е. без знака)
4eb9 это jsr (xxxx).l - переход на абсолютный 32-х битный адрес

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3427
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #25 : 04 Июнь 2010, 13:52:10 »
Цитата: MetalliC
4eb8 это jsr (xxxx).w - переход на абсолютный 16-ти битный адрес (не относительный, т.е. без знака)
Ну я ж говорил :)

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3255
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #26 : 04 Июнь 2010, 15:17:12 »
Ti_,найди нормальную книгу/PDF по M68K и всё поймешь (жаль сейчас моторола бумажные книжки нашару не высылает, я в свое время успел заполучить парочку ;) )
да дело не в книге, команда я и так понимал как работает. хотя что это так происходит, потому что она 16битная не знал.
вопрос был почему она не была использована? были причины какие-то или их компилятор её не знал. (потому что sega assembler определяет 4eb8 , а не 9 , там где возможно)

Добавлено позже:
по прошлому вопросу: bsr и jsr в твоем конкретном случае  - делают одно и то же,
но вообще:
а здесь вопрос стоит так: если они делают одно и тоже, зачем было делать две одинаковые по сути команды?

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9473
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #27 : 04 Июнь 2010, 18:22:12 »
Цитата: Ti_
вопрос был почему она не была использована? были причины какие-то или их компилятор её не знал.
скорее всего банально так программисту захотелось и он в каждой комманде явно указывал .w или .l,
либо была директива компилятору, что для комманд перехода, где явно не указана длина, использовать 16 или 32 бита
Цитата: Ti_
а здесь вопрос стоит так: если они делают одно и тоже, зачем было делать две одинаковые по сути команды?
еще раз говорю - это две разные комманды

BSR - безусловный переход на подпрограмму относительно PC
15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
0   1   1  0   0   0   0  1 |8бит смещение    |

если смещение = 0 -> смещение следующие 2 байта
если смещение = FF -> смещение следующие 4 байта (68020+)

JSR - безусловный переход на подпрограмму по EA
15 14 13 12 11 10  9  8  7  6  5 4  3  2  1  0
0   1   0  0   1   1   1  0  1  0  mode  register

Адресация   Mode   Register
(An)            010     номер регистра A
(d16,An)      101     номер регистра A
(d8,An,Xn)   110     номер регистра A
(xxx).W       111      000
(xxx).L        111      001
(d16,PC)      111     010
(d8,PC,Xn)   111     011

плюс еще 6 видов адресации для 68020+



Добавлено позже:
ну и главное различие между B-коммандами и J-коммандами:

B-комманды есть по условию или безусловные, но только относительно PC
J-комманды только безусловные, но с кучей разных адресаций

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3255
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #28 : 05 Июнь 2010, 01:42:06 »
0000 F  False            Z = 1      1000 VC oVerflow Clear   V = 0
0001 T  True             Z = 0      1001 VS oVerflow Set     V = 1
0010 HI HIgh             C + Z = 0  1010 PL PLus             N = 0
0011 LS Low or Same      C + Z = 1  1011 MI MInus            N = 1
0100 CC Carry Clear      C = 0      1100 GE Greater or Equal N (+) V = 0
0101 CS Carry Set        C = 1      1101 LT Less Than        N (+) V = 1
0110 NE Not Equal        Z = 0      1110 GT Greater Than     Z + (N (+) V) = 0
0111 EQ EQual            Z = 1      1111 LE Less or Equal    Z + (N (+) V) = 1

ST d1 вот где видел в dune:
ROM:000008EA                 st      d1

теперь ясно, просто также как и bmi, bpl  и т.д., теперь ток придумать куда их прикручивать раз так редко использовали )

Добавлено позже:
Ни разу не встречал
:)

Добавлено позже:
еще раз говорю - это две разные комманды
но именно в этом случае они получаются одинаковые: а именно 4eba (d16,PC)  и bsr.w , но это так получилось не специально,  а из-за архитектуры процессора так я понимаю?
а пихают в ром их программисты от балды и те , и те по вкусу?


ROM:00001E1A                 jsr     sub_0_10D8
ROM:00001E1E                 bra.w   sub_0_1422

4EBA F2BC  6000 F602


ROM:000019E8                 bsr.w   buy_new_car_menu
ROM:000019EC                 jsr     sub_0_1DD0

6100 32D6  4EBA 03E2
« Последнее редактирование: 05 Июнь 2010, 01:48:47 от Ti_ »

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1301
    • Просмотр профиля
Re: Геймдев под M68K
« Ответ #29 : 05 Июнь 2010, 16:56:58 »
Есть ещё повторяющиеся команды, например, ADD.W #imm, Dn и ADDI.W #imm, Dn и другие (SUB, AND, OR). Просто в первом случае #imm - это один из возможных видов операндов для ADD и складываться может только с Dn, а во втором случае #imm - это всегда левый операнд, а правым может быть любой разрешённый вид адресации.
Так что это просто частное совпадение. Откуда оно берётся? Надо понимать хоть немного, как внутри устроен процессор и как он декодирует и выполняет команды.
А если не запрещать некоторые виды адресации, совпадений будет ещё больше. Почему данные случаи не запретили - не знаю.
Почему в одной игре используются оба варианта одной команды - возможно, они встречаются в разных модулях/подпрограммах и их писали разные люди/разные компиляторы. Отсюда и различия.

Scc нужно для вычисления и присвоения логического значения (чтобы обойтись без прыжков, где в одной ветке выдаётся 1, в другой 0). Например, код на паскале
isEqual := a = bможно написать так:
CMP a, b
SEQ isEqual