スーパーファミコンでの1つのスプライトの表示方法について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
KEYONN_
記事: 70
登録日時: 14年前

スーパーファミコンでの1つのスプライトの表示方法について

#1

投稿記事 by KEYONN_ » 11年前

久しぶりです。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とは一体なんでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: スーパーファミコンでの1つのスプライトの表示方法について

#2

投稿記事 by softya(ソフト屋) » 11年前

この掲示板にSFC経験者いないんじゃなかなぁと思いますが(私はGBは経験あり)、解析なら手伝いますがソースコードを要求されるのは無理かなと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
KEYONN_
記事: 70
登録日時: 14年前

Re: スーパーファミコンでの1つのスプライトの表示方法について

#3

投稿記事 by KEYONN_ » 11年前

softya(ソフト屋)さんへ
//この掲示板にSFC経験者いないんじゃなかなぁと思いますが(私はGBは経験あり)、
//解析なら手伝いますがソースコードを要求されるのは無理かなと思います。

返信ありがとうございます。
分かりました。
どうやら開発経験者が居ないみたいなので、
c言語の(snes sdk)開発環境で作ろうと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: スーパーファミコンでの1つのスプライトの表示方法について

#4

投稿記事 by softya(ソフト屋) » 11年前

C言語でもSFCの制御レジスタを直接いじるのは変わらないはずですよ。それは良いのですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
KEYONN_
記事: 70
登録日時: 14年前

Re: スーパーファミコンでの1つのスプライトの表示方法について

#5

投稿記事 by KEYONN_ » 11年前

ちなみにc言語ではある程度目星が付いてます。
BG書き込みや、スプライト表示、移動、ジョイパッドなどが使えますが、
まだまだ分からない事だらけです。
添付ファイル
無題.PNG
無題.PNG (14.26 KiB) 閲覧数: 10978 回

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: スーパーファミコンでの1つのスプライトの表示方法について

#6

投稿記事 by softya(ソフト屋) » 11年前

いや、C言語で出来るならアセンブラでも大差ないでしょう。
それもすでにあるC言語のライブラリを使っていますか? なら、そのライブラリを解析するだけでは。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
KEYONN_
記事: 70
登録日時: 14年前

Re: スーパーファミコンでの1つのスプライトの表示方法について

#7

投稿記事 by KEYONN_ » 11年前

ああ、なるほど。それも考えていたのですが、やはり解析が必要みたいですね。
考古学みたいな感じでしょうか。。。

ソースコードを添付しました。
添付ファイル
snesc.zip
(49.44 KiB) ダウンロード数: 262 回

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: スーパーファミコンでの1つのスプライトの表示方法について

#8

投稿記事 by softya(ソフト屋) » 11年前

>考古学みたいな感じでしょうか。。。

SNES自体がすでに考古学ですよ。
ソースファイルを見る限りsetspriteとかレジスタいじる部分までcで書いてるあるので解析は困難とも思えませんね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
KEYONN_
記事: 70
登録日時: 14年前

Re: スーパーファミコンでの1つのスプライトの表示方法について

#9

投稿記事 by KEYONN_ » 11年前

今までファミコンとPCエンジンのプログラムをアセンブリ言語で(NESASM,MAGICKIT)
作った事がありますが、スーパーファミコンは、かなり難しい印象を持ちました。

でも、多分c言語の場合は、
cでレジスタを書いてるのを理解していないからcでしか作れないんだと自分で思います。
あとは、65816のアセンブリ言語を理解する事から始めないといけないみたいです。

ファミコンやPCエンジンのCPUである6502が分かるので、少しはマシですが。。。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: スーパーファミコンでの1つのスプライトの表示方法について

#10

投稿記事 by softya(ソフト屋) » 11年前

ハードウェアのレジスタ構成がSNESの場合ちょっと複雑ですね。セガサターンに比べれば簡単ですが。
65186言語問題とハードウェアの問題を混ぜて考えているようにお見受けします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
KEYONN_
記事: 70
登録日時: 14年前

Re: スーパーファミコンでの1つのスプライトの表示方法について

#11

投稿記事 by KEYONN_ » 11年前

ある程度期待が持てるようなプログラムなのですが(スプライト表示のための)
X座標とY座標を指定する方法がイマイチ分かりません(アドレッシングモードやアセンブラの指定の
仕方など)

ファミコンのゲームを作っていた頃は、比較的小規模で開発できましたし、8ビットの壁みたいのが
ありましたが、
スーパーファミコンは、16ビットのファミコンよりも規模の大きいゲーム作りになりそうな予感がします。

あと、a816にはサンプルプログラムが付いていたので、それを改造したソースにしています。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: スーパーファミコンでの1つのスプライトの表示方法について

#12

投稿記事 by softya(ソフト屋) » 11年前

> X座標とY座標を指定する方法がイマイチ分かりません(アドレッシングモードやアセンブラの指定の仕方など)

アセンブラの話ですか? 65186には詳しくないのですが、下記サイトを見る限りインデクスモードが有りますね。
「65816命令表」
http://dragon.s151.xrea.com/65816/65816.html

こういうのを調べるのが楽しいと思うのですが、目的が違いますかね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
KEYONN_
記事: 70
登録日時: 14年前

Re: スーパーファミコンでの1つのスプライトの表示方法について

#13

投稿記事 by KEYONN_ » 11年前

目的は恐らく同じではないでしょうか。作る為には、知識が必要なので。

ところで、このサイトは初めて知りました。
かなり詳しい所まで書いてあり、勉強になります。図も描いてあるし、分かりやすいです。
65816アセンブラを勉強するにはもってこいですね。

a816のサンプルプログラムを改造して作っていたのですが、表記の仕方といちいち、lda.b @$2100と
@とピリオドとb w lを使い分けなければいけないのもあって、慣れません。
また、サンプルプログラムで変数に@をつけている場合とつけていない場合があり、どちらが正解なのか
分かりづらい部分もあります。

NESASMのような、$(アドレス)や#(10進数),#$(16進数),%(2進数)が使いやすく感じてしまいます。
また、マクロをa816は作れないのです。せっかく使っていたかったのですが、他のアセンブラも検討中です。

とりあえず、アーキテクチャーやCPUの命令を覚える事に
集中します。また、最初にあげたサイトの中にサンプルプログラムがダウンロードできたので、
後で見ておくようにします。

学習ソフトP-StudySystemというフリーソフトがあるので、それも利用したいです。
無論問題集は自分で作る手間がかかりますが。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: スーパーファミコンでの1つのスプライトの表示方法について

#14

投稿記事 by softya(ソフト屋) » 11年前

C言語のコンパイラでアセンブラのソースコードを出力すると言う手もありますよ。
得体のしれないアセンブラの場合手がかりになります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
KEYONN_
記事: 70
登録日時: 14年前

Re: スーパーファミコンでの1つのスプライトの表示方法について

#15

投稿記事 by KEYONN_ » 11年前

スプライトのジョイパッドによる移動までやるつもりですが、途中経過です。
任意の位置にきわめて限定的ですが、任意のスプライトを描画できました。

ただ、パレットの指定が出来ていないのが残念です。

ソースは、添付しておきます。というか、win7でもa816.exeが動くのが不思議です。
nesasmは古いバージョンだと動かないみたいなので。。。

追記
readme.txtを添付し忘れていました。すみません。
添付ファイル
README.TXT
(9.64 KiB) ダウンロード数: 220 回
nanntoka.PNG
nanntoka.PNG (41.1 KiB) 閲覧数: 10687 回
a816v107_xxx.zip
(39.19 KiB) ダウンロード数: 255 回

閉鎖

“C言語何でも質問掲示板” へ戻る