正直日記



2008/11/19

_ 教育用としてのメガドラ
倫理的な問題(があるとして、それ)を抜きにすれば、メガドラがアリなんじゃ
ないかと思う。アセンブリャが何をやってるのか位は分かるようになる?例えば
MPU。メガドラには高速な MC68000 と低速な Z80 の、二つの MPU がある。しか
し教科書どおりにアセンブラで作ると MC68000 しか使えず、ちょっとしたもの
を作るには物足りなくなってしまう?じゃあどうするのかと言うと、Z80_BUSREQ
を使うことで、Z80 用メモリ領域にアクセスできるようになる。Z80_BUSREQ が
何をしているのかは調べてみるまでもなく単なるメモリマップド I/O なので気
にしないでいい。そしてそこで Z80 という CPU があるのだな、と意識するよう
になる。ということは MC68000 という MPU もあるのだなと連想出来るし(だん
だん破綻してきたぞ)、MPU は自動的に MC68000 が使われるのかなと思いつく。

ごめん勢いが足りなかった。
_ 教育用としてのGBA
倫理的な問題(があるとして、それ)を抜きにすれば、GBA がアリなんじゃない
かと思う。リンカが何をやってるのか位は分かるようになる。例えばメモリ配置。
GBA には高速小容量な IWRAM と低速大容量な EWRAM の、二つのメモリがある。
しかし教科書どおりに C で作ると IWRAM しか使えず、ちょっとしたものを作る
には足りなくなってしまう。じゃあどうするのかというと、大域変数宣言の真後
ろに IN_EWRAM と書き添えてやることで、大域変数が EWRAM に配置されるよう
になる。IN_EWRAM が何をしているのか調べてみると

#define IN_EWRAM __attribute__ ((.section (".ewram")))

と定義されていて、 .ewram というセクションがあるのだなと意識するようにな
る。ということは IWRAM は .iwram と連想出来るし、変数は自動的に .iwram 
セクションに放り込まれるようになってるのかなと思いつく。ていうかセクショ
ンって何だろう? 〜〜〜 途中すっ飛ばして、gba_cart.ld にたどり着くと、そ
こには C の参考書で malloc のところにチラリと書いてあるヒープみたいな単
語が目に入る。おぉーここにあったのか heap よ、と思ったりする。


あ、勢いでここまで書いて気づいたけど、ヒープ領域は EWRAM に確保されてる
ので、malloc を使う前提なら "教科書どおりに C で作ると IWRAM しか使えず" 
のくだりが完全に嘘だわ。なんだー crt0.S で bss クリア / data セクション
コピーするところまで話を繋げて、あわよくばスタックとか割り込みとかCPUレ
ジスタとかの話まで広げられるんじゃないかと思ったのに。やっぱ駄目だ GBA じゃ。
_ 32X は slave か
32X なデモの ASM ソースを読んでみたら、m68k から SH 用のコードを 32X に
転送する部分があって、ずらっと16進数が並んでた。考えてみりゃ当然なんだけ
ど、扱い的には Z80 なんかと一緒なのかと連想したら思わず何かを噴きそうに
なったよ。

それにしても、m68k, z80, sh-2 と3種もコンパイラ / アセンブラを使い分けな
きゃいけないのは凄いな。開発者はポップアップしまくってたんじゃなかろうか。

最新
2010 | 01 04
2009 | 01 02 03 04 05 06 07 09 10 11 12
2008 | 01 02 03 04 05 06 07 08 09 10 11 12
2007 | 02 03 04 05 06 07 08 10 11 12
2006 | 01 02 03 04 05 06 07 08 09 10 11 12
2005 | 01 02 03 04 05 06 07 08 09 10 11 12