「ゲームプログラマになる前に覚えておきたい技術」のGameLibが32bit C++が前提なのに対して、16bit Cを前提にゲームを開発したいという趣旨で作っています。
http://www.shuwasystem.co.jp/support/7980html/2118.html
16bit Cではワンダースワンの参考書がわかりやすく、サンプルプログラムもインターネットで公開されているので、こちらをベースにAPIを開発しようと思います。
https://web.archive.org/web/20031227041501/http://page.freett.com:80/gameboy/wwpoka.html
対象プラットフォームは、メガドライブ、ワンダースワンカラー、ぴゅう太とし16bit Cで共通APIで開発するのが目的です。
void wwc_set_color_mode(int mode); void wwc_font_set_colordata(u16 tilestart, u16 noftiles, u16 *data); void wwc_palette_set_color(u8 palettenumber, u8 colornumber, u16 color); void screen_set_char(u8 layer, u8 xts, u8 yts, u8 xte, u8 yte, u16 *map); void screen_set_scroll(u8 layer, u8 x, u8 y); void display_control(u8 mode); void sprite_set_range(u8 sprstart, u8 sprend); void sprite_set_location(u8 sprite_no, u8 x, u8 y); void sprite_set_char(u8 sprite_no, u16 char_data); u8 key_press_check(void); void sys_wait(u16 nofvbl);
ワンダースワンカラーの画面表示については、256x256(表示領域 224x144)4096色中16色であるため、TMS9918にあわせて16色 256x192で管理し、表示領域に収まらない部分はハードウェアスクロールで対応する方針としました。
TMS9918はグラフィック2、スプライトサイズ16x16で本領を発揮するのですが、マルチプラットフォームでの開発を考えてグラフィック1、スプライトサイズ8x8を使う方針とします。
http://www43.tok2.com/home/cmpslv/Sg1000/9918.htm
なおグラフィック2のテクニックについては以下が詳しいです。
https://www.wizforest.com/OldGood/MSX1/MSX1_2.html
グラフィックデータはpiroPAINT、EDGEなどを利用してパレット16色で作成して、メガドライブ、ワンダースワンカラーはツールで変換しています。ぴゅう太に関しては、GAMELIB16の共通APIでワンダースワンカラー形式の16色データを2色に減色することで対応しています。