SGDK+Code::Blocksでの開発環境を整えたので、さっそく使ってきます。
まずは画像を1枚表示します。新しいゲーム開発環境を使う時のセオリーは1ドットを表示するとか1文字出すが基本ですが、SGDKを使う場合、そのへんはすっとばした方が理解が早く、また、楽しいです。
まずは、新しいプロジェクトを作成します。Code::Blocksを起動して、メニューのFile->New->Project...で、Empty Projectを選択して、プロジェクト名を付けます。


ウィンドウ左端のプロジェクト名を右クリックしてメニュー最下段のProperties...を選択します。

Makefileを指定してください。この辺はCode::Blocksの環境設定での新規プロジェクトの作成と同じです。

一応、Hello worldの表示確認をしておきます。
#include <genesis.h>
int main()
{
VDP_drawText("hello world", 0, 0);
while(1)
{
VDP_waitVSync();
}
return (0);
}
注意点としては、Code:BlocksのBuild対象がdefaultになってないとエラーになります。Debugだとだめみたいです。

メガドラの仕様はよくわかってないのですが、画面は320×224らしいのと、パレット1つが16色らしいので、edgeとかの16色を扱えるツールを使って画像を用意します。

edgeでこんな感じで16色のpngで保存します。

Code::Blocksのプロジェクトフォルダにresという名前のフォルダを作成して、そこに画像ファイルを置きます。(※画像の配置場所はここでなくてもいいのですがわかりやすいので)

Code::BlocksでFile->New->empty fileを選びます。最初にファイルを保存するかどうか聞かれるので、先ほど作成したresフォルダにresource.resという名前で保存します。自動的にresource.resがプロジェクトのResources\resの位置に追加されるはずです。
resources.resをCode::Blocksか、テキストエディタで開き、
IMAGE ys_title "ys_title16.png" -1
と書いてセーブしておきます。この辺、画像ファイルをドロップするだけでリソース追加できそうな気がするのですが、よくわかりません。

hello worldのプログラムが書いてあるmain.cに三行追加します。
#include <genesis.h>
#include "resource.h"
int main()
{
VDP_setPalette(0, ys_title.palette->data);
VDP_drawImageEx(BPLAN, &ys_title, TILE_ATTR_FULL(PAL0, 0, 0, 0, TILE_USERINDEX), 0, 0, 0, 1);
VDP_drawText("hello world", 0, 0);
while(1)
{
VDP_waitVSync();
}
return (0);
}
※ 最近のSGDKではVDP_drawImageEx()の第一引数の定義が変わっていて、BPLANではなくPLAN_Bのようです。
resource.hは、いつの間にやらresフォルダに勝手に作られていました。
VDP_setPalette()はパレットを設定してて、VDP_drawImageEx()で画像を表示するっぽいです。仕組みは分かりません。
Buildすると、outフォルダにrom.binが出来るのでエミュレータに放り込みます。

かんたん!これだけでも、文字表示と合わせてテキストアドベンチャーゲームが作れそうですね。
Regenというエミュレータでは、BGやパレットやスプライトの定義を見ることができます。 (デバッグ版だけかもしれません / v0.97 (with debuggers) )
メニューのTools→VDP Debugger...を選択します。

png画像を8x8のパーツに切り分けて表示しているみたいですね。定義データの最初の16個は単色パターンが定義してあるようです。
また、パターン定義の後半に数字やアルファベットが定義してありました。VDP_drawText()は、これを使って文字を表示しているわけですか、なるほど。

これまで、VDP_ナントカみたいな関数を使ってきましたが、これらの使い方は、SGDKのdoc/htmlフォルダにあるドキュメントに書かれています。なぜか公式サイト上では読めないようなので、自分のサイト上にUpしてあります。
BG面に描画する関数は、vdp_bg.hで定義されているようです。色々と楽しげな関数が用意されてますね。
せっかくなので、BG面に指定位置に書き込みをしてみます。何かよさげな命令はないかなーと探してみると、vdp_tile.hにVDP_setTileMapXY()という関数がありました。たぶん、(x,y)の位置にBGデータを配置するんだと思うので、てきとーに使ってみます。
VDP_PLAN_A、VDP_PLAN_Bというのは、メガドラのBG面が2枚あって、そのどちらに表示するかの指定だと思います、たぶん。TILE_ATTR_FULL()マクロは、BGのパレットやら反転指定をしているみたいですね、なんとなく。
#include <genesis.h>
#include "resource.h"
int main()
{
int y;
VDP_setPalette(0, ys_title.palette->data);
VDP_drawImageEx(BPLAN, &ys_title, TILE_ATTR_FULL(PAL0, 0, 0, 0, TILE_USERINDEX), 0, 0, 0, 1);
VDP_drawText("hello world", 0, 0);
for (y = 0; y < 16; y++) {
VDP_setTileMapXY(VDP_PLAN_A, TILE_ATTR_FULL(PAL0, 1, 0, 0, y), 0, y);
VDP_setTileMapXY(VDP_PLAN_A, TILE_ATTR_FULL(PAL0, 1, 0, 0, y), 39, y);
}
while(1)
{
VDP_waitVSync();
}
return (0);
}
※ 最近のSGDKではVDP_drawImageEx()の第一引数の定義が変わっていて、BPLANではなくPLAN_Bのようです。

BG面の任意の位置にBGパターンを表示することができました。これだけでもテトリスなら作れそうですね。メガドラでテトリス・・・あっ