ページ 1 / 1
スーパーファミコンでの1つのスプライトの表示方法について
Posted: 2014年5月11日(日) 11:24
by KEYONN_
久しぶりです。KEYONN_です。
どうしても分からない事がありまして、ここに質問させてもらいます。
過去のコンシューマープログラミングにおけるスーファミの開発は行われていたようですが、
最近は外国にしか詳しい情報が無くて困っています。
http://www.inetmie.or.jp/~koh/inside/koh-sfc.htm
http://hp.vector.co.jp/authors/VA042397/snes/
http://www.geocities.co.jp/Playtown/2004/816_2.txt
http://www.geocities.co.jp/Playtown/2004/sndtech.txt
http://www.geocities.co.jp/Playtown/2004/sfc.txt
(先頭にhを入れてください。) 意味が無いので、httpに変更。 by ソフト屋(softya)
そこで、スーパーファミコンで1つのスプライトを表示させる為のクロスアセンブラを使用した
サンプルプログラムを教えて欲しいです。
サンプルプログラムは、a816か、wla-dxでお願いします。
僕もいろいろと調べているのですが、I/Oレジスタ0x2101、0x2102,0x2103,0x2104が
使えるのでは?と思っていますが、うまくいきません。
また、スプライトをVRAMに転送するのに、DMAを使ってOAMに使うと良いらしい事が
書いてあったのですが、DMAはファミコンでやった事があるので、なんとなく分かるのですが、
OMAとは一体なんでしょうか?
Re: スーパーファミコンでの1つのスプライトの表示方法について
Posted: 2014年5月11日(日) 12:50
by softya(ソフト屋)
この掲示板にSFC経験者いないんじゃなかなぁと思いますが(私はGBは経験あり)、解析なら手伝いますがソースコードを要求されるのは無理かなと思います。
Re: スーパーファミコンでの1つのスプライトの表示方法について
Posted: 2014年5月11日(日) 13:17
by KEYONN_
softya(ソフト屋)さんへ
//この掲示板にSFC経験者いないんじゃなかなぁと思いますが(私はGBは経験あり)、
//解析なら手伝いますがソースコードを要求されるのは無理かなと思います。
返信ありがとうございます。
分かりました。
どうやら開発経験者が居ないみたいなので、
c言語の(snes sdk)開発環境で作ろうと思います。
Re: スーパーファミコンでの1つのスプライトの表示方法について
Posted: 2014年5月11日(日) 13:23
by softya(ソフト屋)
C言語でもSFCの制御レジスタを直接いじるのは変わらないはずですよ。それは良いのですか?
Re: スーパーファミコンでの1つのスプライトの表示方法について
Posted: 2014年5月11日(日) 13:24
by KEYONN_
ちなみにc言語ではある程度目星が付いてます。
BG書き込みや、スプライト表示、移動、ジョイパッドなどが使えますが、
まだまだ分からない事だらけです。
Re: スーパーファミコンでの1つのスプライトの表示方法について
Posted: 2014年5月11日(日) 13:27
by softya(ソフト屋)
いや、C言語で出来るならアセンブラでも大差ないでしょう。
それもすでにあるC言語のライブラリを使っていますか? なら、そのライブラリを解析するだけでは。
Re: スーパーファミコンでの1つのスプライトの表示方法について
Posted: 2014年5月11日(日) 13:34
by KEYONN_
ああ、なるほど。それも考えていたのですが、やはり解析が必要みたいですね。
考古学みたいな感じでしょうか。。。
ソースコードを添付しました。
Re: スーパーファミコンでの1つのスプライトの表示方法について
Posted: 2014年5月11日(日) 13:41
by softya(ソフト屋)
>考古学みたいな感じでしょうか。。。
SNES自体がすでに考古学ですよ。
ソースファイルを見る限りsetspriteとかレジスタいじる部分までcで書いてるあるので解析は困難とも思えませんね。
Re: スーパーファミコンでの1つのスプライトの表示方法について
Posted: 2014年5月11日(日) 14:42
by KEYONN_
今までファミコンとPCエンジンのプログラムをアセンブリ言語で(NESASM,MAGICKIT)
作った事がありますが、スーパーファミコンは、かなり難しい印象を持ちました。
でも、多分c言語の場合は、
cでレジスタを書いてるのを理解していないからcでしか作れないんだと自分で思います。
あとは、65816のアセンブリ言語を理解する事から始めないといけないみたいです。
ファミコンやPCエンジンのCPUである6502が分かるので、少しはマシですが。。。
Re: スーパーファミコンでの1つのスプライトの表示方法について
Posted: 2014年5月11日(日) 14:45
by softya(ソフト屋)
ハードウェアのレジスタ構成がSNESの場合ちょっと複雑ですね。セガサターンに比べれば簡単ですが。
65186言語問題とハードウェアの問題を混ぜて考えているようにお見受けします。
Re: スーパーファミコンでの1つのスプライトの表示方法について
Posted: 2014年5月11日(日) 22:18
by KEYONN_
ある程度期待が持てるようなプログラムなのですが(スプライト表示のための)
X座標とY座標を指定する方法がイマイチ分かりません(アドレッシングモードやアセンブラの指定の
仕方など)
ファミコンのゲームを作っていた頃は、比較的小規模で開発できましたし、8ビットの壁みたいのが
ありましたが、
スーパーファミコンは、16ビットのファミコンよりも規模の大きいゲーム作りになりそうな予感がします。
あと、a816にはサンプルプログラムが付いていたので、それを改造したソースにしています。
Re: スーパーファミコンでの1つのスプライトの表示方法について
Posted: 2014年5月11日(日) 23:35
by softya(ソフト屋)
> X座標とY座標を指定する方法がイマイチ分かりません(アドレッシングモードやアセンブラの指定の仕方など)
アセンブラの話ですか? 65186には詳しくないのですが、下記サイトを見る限りインデクスモードが有りますね。
「65816命令表」
http://dragon.s151.xrea.com/65816/65816.html
こういうのを調べるのが楽しいと思うのですが、目的が違いますかね。
Re: スーパーファミコンでの1つのスプライトの表示方法について
Posted: 2014年5月12日(月) 19:31
by KEYONN_
目的は恐らく同じではないでしょうか。作る為には、知識が必要なので。
ところで、このサイトは初めて知りました。
かなり詳しい所まで書いてあり、勉強になります。図も描いてあるし、分かりやすいです。
65816アセンブラを勉強するにはもってこいですね。
a816のサンプルプログラムを改造して作っていたのですが、表記の仕方といちいち、lda.b @$2100と
@とピリオドとb w lを使い分けなければいけないのもあって、慣れません。
また、サンプルプログラムで変数に@をつけている場合とつけていない場合があり、どちらが正解なのか
分かりづらい部分もあります。
NESASMのような、$(アドレス)や#(10進数),#$(16進数),%(2進数)が使いやすく感じてしまいます。
また、マクロをa816は作れないのです。せっかく使っていたかったのですが、他のアセンブラも検討中です。
とりあえず、アーキテクチャーやCPUの命令を覚える事に
集中します。また、最初にあげたサイトの中にサンプルプログラムがダウンロードできたので、
後で見ておくようにします。
学習ソフトP-StudySystemというフリーソフトがあるので、それも利用したいです。
無論問題集は自分で作る手間がかかりますが。
Re: スーパーファミコンでの1つのスプライトの表示方法について
Posted: 2014年5月12日(月) 19:34
by softya(ソフト屋)
C言語のコンパイラでアセンブラのソースコードを出力すると言う手もありますよ。
得体のしれないアセンブラの場合手がかりになります。
Re: スーパーファミコンでの1つのスプライトの表示方法について
Posted: 2014年5月13日(火) 18:41
by KEYONN_
スプライトのジョイパッドによる移動までやるつもりですが、途中経過です。
任意の位置にきわめて限定的ですが、任意のスプライトを描画できました。
ただ、パレットの指定が出来ていないのが残念です。
ソースは、添付しておきます。というか、win7でもa816.exeが動くのが不思議です。
nesasmは古いバージョンだと動かないみたいなので。。。
追記
readme.txtを添付し忘れていました。すみません。