2001/1/25 井桁 健一郎
タイトル
作者情報
使用方法
WWCTool.exeを起動する。
プログラムを作成する。
動作環境
ペンタ以降のPC
WWCTool.exeで開発したプログラム
ワンダースワンカラー専用
バージョン
その他
セレロン850MHz、256MByte、WinMe
C++Builder Ver5.0
確認した環境
ペンタ三800MHz、768MByte、Win98
日立フローラ、セレロン?MHz、128MByte、Win95
コンセプト
アピールポイント
技術解説
開発チュートリアル
ハローワールド
1.最初に
WWCTool.exeを起動しファイルメニューの新規作成を選択します。
保存ダイアログが出るので先程のHelloフォルダーにHello.cで保存します。
2.フォームの設定
StartCloseの右の入力欄にtrueを入力します。
FormColorの右の入力欄に(BLUE<<4)|BLUEを入力します。
FormのOnCreateの右の入力欄をダブルクリックします。(EFormCreateが自動で入ります)
もう一度ダブルクリックすると編集画面のvoid EFormCreate(void)に移動しますので、太字の部分
void EFormCreate(void)
{
ImagePuts(Image1, 1, 1, "Hello, World!", WHITE, BLACK);
}
以上のように入力します。
3.イメージの設定
Image1
OnKeyUp
左上座標 1 1
幅高さ 15 5
Image ImageBuf1
Image幅高さ 15 5
Enabled true
以上のように入力します。
編集画面のグローバル変数に
UCHAR ImageBuf1[15*5*32];
以上のように入力します。
画面タブでイメージバッファーと表示される領域の関係がわかります。
4.仕上げ
転送ボタンでワンダースワンに転送し実行します。
Hello, World!
と表示され、startボタンを押すと終了すれば成功です。
ロール
1.最初に
WWCTool.exeを起動しファイルメニューの新規作成を選択します。
保存ダイアログが出るので先程のRollフォルダーにRoll.cで保存します。
2.フォームの設定
StartCloseの右の入力欄にtrueを入力します。
FormColorの右の入力欄に(BLUE<<4)|BLUEを入力します。
FormのOnCreateの右の入力欄をダブルクリックします。(EFormCreateが自動で入ります)
もう一度ダブルクリックすると編集画面のvoid EFormCreate(void)に移動しますので、太字の部分
void EFormCreate(void)
{
ImagePuts(Image1, 0, 0, "ロールのサンプル", WHITE, BLACK);
ImagePuts(Image1, 0, 1, "トリプルバッファー使用?", WHITE, BLACK);
ImagePuts(Image1, 0, 2, "横表示モードの時", WHITE, BLACK);
ImagePuts(Image1, 0, 3, " Aキーで縦表示に", WHITE, BLACK);
ImagePuts(Image1, 0, 4, " Bキーで表示領域変更", WHITE, BLACK);
ImagePuts(Image1, 0, 5, " Xキーでロール", WHITE, BLACK);
ImagePuts(Image1, 0, 6, "縦表示モードの時", WHITE, BLACK);
ImagePuts(Image1, 0, 7, " X3キーで横表示に", WHITE, BLACK);
ImagePuts(Image1, 0, 8, " X4キーで表示領域変更", WHITE, BLACK);
ImagePuts(Image1, 0, 9, " Yキーでロール", WHITE, BLACK);
chdir("/rom0/");
ImageLoadFromFile(Image1, "Map.bmp");
Form->Focused = 1;
}
以上のように入力します。
3.イメージの設定
Image1のOnKeyUpの右の入力欄をダブルクリックします。(EImage1KeyUpが自動で入ります)
Image1
OnKeyUp EImage1KeyUp
左上座標 1 1
幅高さ 12 12
Image ImageBuf1
Image幅高さ 32 32
Enabled true
以上のように入力します。
編集画面のグローバル変数に
UCHAR ImageBuf1[32*32*32];
以上のように入力します。
Image0のOnKeyUpの右の入力欄をダブルクリックします。
void EImage1KeyUp(UINT Keys)
{
static int Mode=0;
if(Keys & Key->Enter){
FormViewChange(!Form->TateView);
ImageTateYoko(Image1);
}
if(Keys & Key->Esc){
if(Mode == 0){
Image1->Width = 20;
Image1->Height = 16;
Mode=1;
}else{
Image1->Width = 12;
Image1->Height = 12;
Mode=0;
}
}
}
3.タイマーの設定
TimerのOnTimerの右の入力欄をダブルクリックします。(ETimerTimerが自動で入ります)
Interval 200;
Enabled true;
以上のように入力します。
TimerのOnKeyUpの右の入力欄をダブルクリックします。
void ETimerTimer(void)
{
if(Form->Key & Key->Right){
Image1->ImageLeft++;
}
if(Form->Key & Key->Left){
Image1->ImageLeft--;
}
if(Form->Key & Key->Up){
Image1->ImageTop--;
}
if(Form->Key & Key->Down){
Image1->ImageTop++;
}
}
以上のように入力します。
4.仕上げ
ここでファイルを上書き保存し、コンパイルボタンを押します。
転送ボタンでワンダースワンに転送し実行します。
説明がでて、落書きが表示され、startボタンを押すと終了すれば成功です。
ロールしたときに画像が乱れるのは画面更新と同期が取れていない為で3.のタイマーを
フォームのVBlankイベントに変更すると乱れなくなります。(Rool2フォルダーに有ります)
画像ビュアの開発(24ビットbmpファイルを4096色に減色表示する)
1.最初に
WWCTool.exeを起動しファイルメニューの新規作成を選択します。
保存ダイアログが出るので先程のBmpViewフォルダーにBmpView.cで保存します。
2.フォームの設定
StartClose右の入力欄にtrueを入力します。
FormのOnCreateの右の入力欄をダブルクリックします。(EFormCreateが自動で入ります)
もう一度ダブルクリックすると編集画面のvoid EFormCreate(void)に移動しますので、太字の部分
void EFormCreate(void)
{
chdir("/rom0/");
ImagePuts(Image0, 0, 0,"テストプログラム", WHITE, BLACK);
}
と入力します。
編集画面のグローバル変数に
UCHAR ImageBuf0[WWC_FORM_WIDTH*WWC_FORM_HEIGHT*32];
と入力します。
3.テスト1
転送ボタンでワンダースワンに転送し実行します。
テストプログラム
と表示され、startボタンを押すと終了すれば成功です。
ImagePuts(Image0, 0, 0,"テストプログラム", WHITE, BLACK);この文を
EImage0KeyUp(Key->ExUp);こちらの文に置き換えます。
4.ファイル選択部分の作成
Image0のOnKeyUpの右の入力欄をダブルクリックします。(EImage0KeyUpが自動で入ります)
Image0
OnKeyUp EImage0KeyUp
Image ImageBuf0
Enabled true
以上のように入力します。
UCHAR FileList[18][MAXFNAME];
int FileListPos;
と入力します。
Image0のOnKeyUpの右の入力欄をダブルクリックします。
void EImage0KeyUp(UINT Keys)
{
int Size, n;
if(Keys & Key->ExUp){
ImageFill(Image0, (WHITE<<4)|WHITE);
Size = FileGetName(FileList, "", 18);
for(n=0;n < Size;n++){
FileList[n][MAXFNAME-1] = 0;
ImagePuts(Image0, 0, n, FileList[n], BLACK, WHITE);
}
}
ImagePuts(Image0, 0, FileListPos, FileList[FileListPos], BLACK, WHITE);
if(Keys & Key->Up){
if(FileListPos > 0){
FileListPos--;
}
}
if(Keys & Key->Down){
if(FileListPos < 18-1){
FileListPos++;
}
}
ImagePuts(Image0, 0, FileListPos, FileList[FileListPos], WHITE, BLACK);
/* if(Keys & Key->Enter){
Image12Fill(0, 0, 0);
if(Image12LoadFromFile(FileList[FileListPos]) == true){
Form->Color12bit=true;
Form->Focused = 1;
}
}*/
}
以上のように入力します。
5.テスト2
転送ボタンでワンダースワンに転送し実行します。
ファイル一覧が表示され、startボタンを押すと終了すれば成功です。
コメントの部分を解除してください。
6.画像表示部分の作成
Image1のOnKeyUpの右の入力欄をダブルクリックします。(EImage1KeyUpが自動で入ります)
Image1
OnKeyUp EImage1KeyUp
左上座標 5 5
幅高さ 10 10
Image ImageBuf1
Image幅高さ 10 10
Image2
OnKeyUp
左上座標 5 5
幅高さ 10 10
Image ImageBuf2
Image幅高さ 10 10
Image3
OnKeyUp
左上座標 5 5
幅高さ 10 10
Image ImageBuf3
Image幅高さ 10 10
以上のように入力します。
編集画面のグローバル変数に
UCHAR ImageBuf1[10*10*32];
UCHAR ImageBuf2[10*10*32];
UCHAR ImageBuf3[10*10*32];
と入力します。
Image0のOnKeyUpの右の入力欄をダブルクリックします。
void EImage1KeyUp(UINT Keys)
{
if(Keys & Key->ExUp){
Form->Color12bit=false;
Form->Focused = 0;
}
if(Keys & Key->Right){
Image1->Left++;
}
if(Keys & Key->Left){
Image1->Left--;
}
if(Keys & Key->Up){
Image1->Top--;
}
if(Keys & Key->Down){
Image1->Top++;
}
if(Keys & Key->Esc){
FormViewChange(!Form->TateView);
Form->Color12bit=false;
Form->Focused = 0;
EImage0KeyUp(Key->ExUp);
}
}
以上のように入力します。
7.仕上げ
転送ボタンでワンダースワンに転送し実行します。
24bit bmpファイルを表示出来ます。(横幅256まで)
テキストビュア
技術解説
1章 プログラムの起動、終了
1)プログラム開始時の起動順番
2.WWCmain内初期化
3.Form->OnCreate();
2)プログラム終了時の起動順番
2.WWCmain内終了処理
2章 フォーム(WWCForm)
1)イベント
2.OnIdle アイドリング中に呼び出し
3.OnVBlank VBlank発生時呼び出し
4.OnKeyUp キーが放された時呼び出し
5.OnClose プログラム終了時呼び出し
2)変数
2.Height 画面高さ(縦表示:28 横表示:18)
3.MouseX マウスX軸座標
4.MouseY マウスY軸座標
5.MouseFont マウスのフォントデータ
6.MouseEnabled マウス有効
7.Key キーの状態
8.StartClose STARTキー入力でプログラム終了
9.Tateview 縦表示
10.FormColor フォーム色表示
11.color12 12bitカラーモード(Image1~3を使用)
12.color Image0->Enabled=false時のフォームの色
13.Focused フォーカス設定
3章 キー(Key) 横表示時と縦表示でキー割り当てが変わります。
2.Down 横表示:X3 縦表示:Y4
3.Left 横表示:X4 縦表示:Y1
4.Right 横表示:X2 縦表示:Y3
5.Enter 横表示:A 縦表示:X3
6.Esc 横表示:B 縦表示:X4
7.ExUp 横表示:Y1 縦表示:X2
8.ExDown 横表示:Y3 縦表示:B
9.ExLeft 横表示:Y4 縦表示:X1
10.ExRight 横表示:Y2 縦表示:A
4章 イメージ(WWCImage0~3)
1)イベント
2)変数
2.Left 左座標(キャラクタ単位)
3.Height 高さ(キャラクタ単位)
4.Width 幅(キャラクタ単位)
5.Image イメージが格納されるバッファ
6.ImageTop Imageバッファーの上座標(キャラクタ単位)
7.ImageLeft Imageバッファーの左座標(キャラクタ単位)
8.ImageHeight Imageバッファーの高さ(キャラクタ単位)
9.ImageWidth Imageバッファの幅(キャラクタ単位)
10.Enabled 有効
5章 タイマー(WWCTimer)
1)イベント
2)変数
2.Enabled 有効
6章 画面構成(スクリーン)
1)横置き(screen_set_char関数使用)
---|000|001|002|003|004|005|006|007|008|009|010|011|012|013|014|015|016|017|018|019|020|021|022|023|024|025|026|027
000|000|018|036|054|072|090|108|126|144|162|180|198|216|234|252|270|288|306|324|342|360|378|396|414|432|450|468|486
001|001|019|037|055|073|091|109|127|145|163|181|199|217|235|253|271|289|307|325|343|361|379|397|415|433|451|469|487
002|002|020|038|056|074|092|110|128|146|164|182|200|218|236|254|272|290|308|326|344|362|380|398|416|434|452|470|488
003|003|021|039|057|075|093|111|129|147|165|183|201|219|237|255|273|291|309|327|345|363|381|399|417|435|453|471|489
004|004|022|040|058|076|094|112|130|148|166|184|202|220|238|256|274|292|310|328|346|364|382|400|418|436|454|472|490
005|005|023|041|059|077|095|113|131|149|167|185|203|221|239|257|275|293|311|329|347|365|383|401|419|437|455|473|491
006|006|024|042|060|078|096|114|132|150|168|186|204|222|240|258|276|294|312|330|348|366|384|402|420|438|456|474|492
007|007|025|043|061|079|097|115|133|151|169|187|205|223|241|259|277|295|313|331|349|367|385|403|421|439|457|475|493
008|008|026|044|062|080|098|116|134|152|170|188|206|224|242|260|278|296|314|332|350|368|386|404|422|440|458|476|494
009|009|027|045|063|081|099|117|135|153|171|189|207|225|243|261|279|297|315|333|351|369|387|405|423|441|459|477|495
010|010|028|046|064|082|100|118|136|154|172|190|208|226|244|262|280|298|316|334|352|370|388|406|424|442|460|478|496
011|011|029|047|065|083|101|119|137|155|173|191|209|227|245|263|281|299|317|335|353|371|389|407|425|443|461|479|497
012|012|030|048|066|084|102|120|138|156|174|192|210|228|246|264|282|300|318|336|354|372|390|408|426|444|462|480|498
013|013|031|049|067|085|103|121|139|157|175|193|211|229|247|265|283|301|319|337|355|373|391|409|427|445|463|481|499
014|014|032|050|068|086|104|122|140|158|176|194|212|230|248|266|284|302|320|338|356|374|392|410|428|446|464|482|500|
015|015|033|051|069|087|105|123|141|159|177|195|213|231|249|267|285|303|321|339|357|375|393|411|429|447|465|483|501|
016|016|034|052|070|088|106|124|142|160|178|196|214|232|250|268|286|304|322|340|358|376|394|412|430|448|466|484|502|
017|017|035|053|071|089|107|125|143|161|179|197|215|233|251|269|287|305|323|341|359|377|395|413|431|449|467|485|503
2)縦置き(screen_set_char関数使用)
000|000|028|056|084|112|140|168|196|224|252|280|308|336|364|392|420|448|476
001|001|029|057|085|113|141|169|197|225|253|281|309|337|365|393|421|449|477
002|002|030|058|086|114|142|170|198|226|254|282|310|338|366|394|422|450|478
003|003|031|059|087|115|143|171|199|227|255|283|311|339|367|395|423|451|479
004|004|032|060|088|116|144|172|200|228|256|284|312|340|368|396|424|452|480
005|005|033|061|089|117|145|173|201|229|257|285|313|341|369|397|425|453|481
006|006|034|062|090|118|146|174|202|230|258|286|314|342|370|398|426|454|482
007|007|035|063|091|119|147|175|203|231|259|287|315|343|371|399|427|455|483
008|008|036|064|092|120|148|176|204|232|260|288|316|344|372|400|428|456|484
009|009|037|065|093|121|149|177|205|233|261|289|317|345|373|401|429|457|485
010|010|038|066|094|122|150|178|206|234|262|290|318|346|374|402|430|458|486
011|011|039|067|095|123|151|179|207|235|263|291|319|347|375|403|431|459|487
012|012|040|068|096|124|152|180|208|236|264|292|320|348|376|404|432|460|488
013|013|041|069|097|125|153|181|209|237|265|293|321|349|377|405|433|461|489
014|014|042|070|098|126|154|182|210|238|266|294|322|350|378|406|434|462|490
015|015|043|071|099|127|155|183|211|239|267|295|323|351|379|407|435|463|491
016|016|044|072|100|128|156|184|212|240|268|296|324|352|380|408|436|464|492
017|017|045|073|101|129|157|185|213|241|269|297|325|353|381|409|437|465|493
018|018|046|074|102|130|158|186|214|242|270|298|326|354|382|410|438|466|494
019|019|047|075|103|131|159|187|215|243|271|299|327|355|383|411|439|467|495
020|020|048|076|104|132|160|188|216|244|272|300|328|356|384|412|440|468|496
021|021|049|077|105|133|161|189|217|245|273|301|329|357|385|413|441|469|497
022|022|050|078|106|134|162|190|218|246|274|302|330|358|386|414|442|470|498
023|023|051|079|107|135|163|191|219|247|275|303|331|359|387|415|443|471|499
024|024|052|080|108|136|164|192|220|248|276|304|332|360|388|416|444|472|500
025|025|053|081|109|137|165|193|221|249|277|305|333|361|389|417|445|473|501
026|026|054|082|110|138|166|194|222|250|278|306|334|362|390|418|446|474|502
027|027|055|083|111|139|167|195|223|251|279|307|335|363|391|419|447|475|503
3)イメージ(WWCImage)との関係
2.方法としてImage0->ImageからImage3->Imageを重ねた後wwc_font_set_colordata関数で画面に転送されます。
3.Image0->Enabled=falseのときはForm->Colorで指定された色が代わりに使用されます。
4.12bitカラーモードはスクリーン2の screen2_set_window関数で表示範囲を制限しVBALNAK後とにwwc_palette_set_color関数でRGBを切り替えています。
(リフレッシュ周波数は1/75から1/25に遅くなる)
7章 関数
desの先頭からLen*32バイトsrcをセットします。
void MemCpy32(void far *des, void far *src, int Len);
void MemCpy32Roll(void far *des, void far *src, int Len, void *End, int RoolLen);
srcの領域からdesの領域にLen*32バイトコピーします。
MemCpy32Rollロールに対応します。
フォームを閉じる要求をします。(プログラム終了要求)
void FormViewChange(int Mode);
縦置き、横置きを切り替えます。
Mode=true:縦置き、
Mode=false:横置き
key->?の内容は更新されます。
Image?の内容は更新されません。
void ImagePutc(TWWC_IMAGE *Img, int x, int y, UINT Src, UCHAR FColor, UCHAR BColor);
Imgの座標(x,y)に文字Srcを描画します。(漢字も指定できます。)
文字色はFColorで、背景色はBColorで指定します。
void ImagePuts(TWWC_IMAGE *Img, int x, int y, UCHAR far *Src, UCHAR FColor, UCHAR BColor);
void ImagePutsH(TWWC_IMAGE *Img, int x, int y, UCHAR far *Src, UCHAR FColor, UCHAR BColor);
Imgの座標(x,y)に文字列Srcを描画します。(漢字も指定できます。)
文字色はFColorで、背景色はBColorで指定します。
ImagePutsHは縦書きします。
void ImageWPuts(TWWC_IMAGE *Img, int x, int y, UINT far *Src, UCHAR FColor, UCHAR BColor);
void ImageWPutsH(TWWC_IMAGE *Img, int x, int y, UINT far *Src, UCHAR FColor, UCHAR BColor);
Imgの座標(x,y)に文字列Srcを描画します。(漢字も指定できます。)
文字色はFColorで、背景色はBColorで指定します。
ImagePutsとの違いは漢字も1文字として扱います。
ImageWPutsHは縦書きします。
void ImagePSet(TWWC_IMAGE *Img, int x, int y, UCHAR Color);
Imgの座標(x,y)にColor色で点を打ちます。
void ImageTateYoko(TWWC_IMAGE *Img);
FormViewChange使用後に呼び出すとImgの内容を補正します。
int ImageLoadFromFile(TWWC_IMAGE *Img, UCHAR far *path);
Pathで指定された4色bmpファイルをImgにロードします。
void ImageFill(TWWC_IMAGE *Img, UCHAR Color);
ImgをColor色で埋めます。Colorは8bit指定で(WHITE<<4)|WHITEの用に指定します。
int FileGetName(UCHAR far Name[][MAXFNAME], UCHAR far *Path, int Size);
Pathで指定されたフォルダーのファイル名をSize個Nameに入れます。
以下WwcTool.exeの実行画面