- Transfer to WonderSwan Color development kit

- Add colormode, palette, color statement, hardarch system variable
 - Add a digression to the document

Version 0.06 - from wonbe006.lzh
This commit is contained in:
Kawamata Akira 2001-01-29 12:00:00 +09:00 committed by Godzil
parent b906d49ca1
commit 7d4a34e405
8 changed files with 240 additions and 16 deletions

11
colordemo.wb Normal file
View File

@ -0,0 +1,11 @@
100 rem draw random characters
110 if hardarch = 0 then print "Try in WonerSwanColor":a=wait:end
120 colormode 128
200 for i=0 to 1000
300 locate rnd(28), rnd(17):color rnd(4), rnd(4):print chr(rnd(256));
400 next
450 locate 0,0:color 3,0:print "Push START to exit...."
500 rem palette random
600 palette rnd(4), rnd(16), rnd(16), rnd(16)
700 waitvb 30
800 goto 500

View File

@ -34,12 +34,15 @@
#define KEYWORD_INT 0x9b
#define KEYWORD_TRON 0x9c
#define KEYWORD_TROFF 0x9d
#define KEYWORD_COLORMODE 0x9e
#define KEYWORD_PALETTE 0x9f
#define KEYWORD_COLOR 0xa0
#define KEYWORD_AND 0xa0
#define KEYWORD_OR 0xa1
#define KEYWORD_XOR 0xa2
#define KEYWORD_AND 0xb0
#define KEYWORD_OR 0xb1
#define KEYWORD_XOR 0xb2
#define KEYWORD_NOT 0xb0
#define KEYWORD_NOT 0xb8
#define KEYWORD_SCAN 0xc0
#define KEYWORD_WAIT 0xc1
#define KEYWORD_RND 0xc2
@ -62,6 +65,7 @@
#define KEYWORD_SCAN_Y2 0xd7
#define KEYWORD_SCAN_Y3 0xd8
#define KEYWORD_SCAN_Y4 0xd9
#define KEYWORD_HARDARCH 0xda
#define KEYWORD_AX 0xe0
#define KEYWORD_BX 0xe1
@ -79,9 +83,9 @@
#define KEYWORD_STEP 0xf3
#define KEYWORDS_STATEMENT_FROM 0x80
#define KEYWORDS_STATEMENT_TO 0x9d
#define KEYWORDS_2OP_FROM 0xa0
#define KEYWORDS_2OP_TO 0xa2
#define KEYWORDS_STATEMENT_TO 0xa0
#define KEYWORDS_2OP_FROM 0xb0
#define KEYWORDS_2OP_TO 0xb2
/*
WONBE
@ -93,6 +97,7 @@ WONBE
 1
WORD (1-32767)
WORD
BYTE 0x0d

View File

@ -1,7 +1,7 @@
INCLUDE=C:\vshare\ww\dev\WWitch\include
LIB=..\COMMON
LIBS=libww.lib runtime.lib
LIBS=libww.lib libwwc.lib runtime.lib
LINKER=..\..\vc15\bin\link
CC=..\..\vc15\bin\cl

23
makefile.tc Normal file
View File

@ -0,0 +1,23 @@
# start up routine
C0WW_JAPANESE2=..\common\c0wwjpn2.obj
C0WW=$(C0WW_JAPANESE2)
LIBWW=@..\common\libww.rsp
CFLAGS=-DWW -ms -zPCGROUP -zSDGROUP -zGDGROUP
all: wonbe.fx
wonbe.fx: wonbe.bin
mkfent wonbe.cf
wonbe.bin: wonbe.obj
tlink /m /c $(C0WW) wonbe, wonbe, wonbe, $(LIBWW)
exe2fbin wonbe.exe wonbe.bin
wonbe.obj: wonbe.c
tcc -c $(CFLAGS) $(DEFINES) -IC:\vshare\ww\dev\WWitch\include wonbe.c

125
wonbe.c
View File

@ -21,6 +21,7 @@
#include <sys/process.h>
#include <sys/fcntl.h>
#include <sys/bios.h>
#include <sys/libwwc.h>
#define assert(x)
#endif
#include "keywords.h"
@ -33,7 +34,7 @@
#include <stdarg.h>
#endif
char myVersion[] = "0.05";
char myVersion[] = "0.06";
#ifdef WW
#define NEWLINE "\xa\xd"
@ -90,6 +91,13 @@ void fatalExit( const char * msg )
}
#endif
#ifdef WW
BOOL isWonderSwanColor()
{
return wwc_get_hardarch() != HARDARCH_WS;
}
#endif
BOOL commonPrint( FILE FAR * fp, const char * msg,... )
{
#ifdef WW
@ -184,6 +192,8 @@ KEYWORDITEM keywordsC[] = {
{ KEYWORD_CALL, "call" },
{ KEYWORD_CSEG, "cseg" },
{ KEYWORD_CX,"cx" },
{ KEYWORD_COLORMODE,"colormode" },
{ KEYWORD_COLOR,"color" },
{ 0,NULL }
};
@ -216,6 +226,11 @@ KEYWORDITEM keywordsG[] = {
{ 0,NULL }
};
KEYWORDITEM keywordsH[] = {
{ KEYWORD_HARDARCH,"hardarch" },
{ 0,NULL }
};
KEYWORDITEM keywordsI[] = {
{ KEYWORD_IF,"if" },
{ KEYWORD_INT, "int" },
@ -250,6 +265,7 @@ KEYWORDITEM keywordsP[] = {
{ KEYWORD_PLAY,"play" },
{ KEYWORD_PEEK, "peek" },
{ KEYWORD_POKE, "poke" },
{ KEYWORD_PALETTE, "palette" },
{ 0,NULL }
};
@ -309,7 +325,7 @@ KEYWORDITEM keywordsX[] = {
KEYWORDITEM * keywordsIndex[26] = {
keywordsA, keywordsB, keywordsC, keywordsD,
keywordsE, keywordsF, keywordsG, NULL,
keywordsE, keywordsF, keywordsG, keywordsH,
keywordsI, NULL, NULL, keywordsL,
keywordsM, keywordsN, keywordsO, keywordsP,
NULL, keywordsR, keywordsS, keywordsT,
@ -506,14 +522,14 @@ void cantContinue()
void saveError()
{
commonPrint(NULL, "Save Erroor in %d\x7" NEWLINE, currentLineNumber );
commonPrint(NULL, "Save Error in %d\x7" NEWLINE, currentLineNumber );
bForceToReturnSuper = TRUE;
requestNextAction = REQUEST_INTERACTIVE;
}
void paramError()
{
commonPrint(NULL, "Parameter Erroor in %d\x7" NEWLINE, currentLineNumber );
commonPrint(NULL, "Parameter Error in %d\x7" NEWLINE, currentLineNumber );
bForceToReturnSuper = TRUE;
requestNextAction = REQUEST_INTERACTIVE;
}
@ -1002,6 +1018,12 @@ SHORT calcValue()
return 1024;
case KEYWORD_SCAN_Y4:
return 2048;
case KEYWORD_HARDARCH:
#ifdef WW
return wwc_get_hardarch();
#else
return 0; /* DUMMY VALUE */
#endif
case KEYWORD_DEFSEG:
return defseg;
case KEYWORD_DSEG:
@ -1961,6 +1983,96 @@ void st_troff()
traceFlag = FALSE;
}
void st_colormode()
{
SHORT newmode;
newmode = expr();
if( bForceToReturnSuper ) return;
#ifdef WW
if( isWonderSwanColor() ) {
/*SHORT result;*/
/*result =*/ wwc_set_color_mode( newmode );
/*if( result != newmode ) {*/
/* paramError();*/ /* 値の設定に失敗したとき */
/* return;*/
/*}*/
}
#else
printf("colormode: %d\n", newmode );
#endif
}
void st_palette()
{
SHORT index, r, g, b;
BYTE ch;
index = expr();
if( bForceToReturnSuper ) return;
while( TRUE ) {
ch = *executionPointer++;
if( ch != ' ' && ch != '\t' ) break;
}
if( ch != ',' ) {
syntaxError();
return;
}
r = expr();
if( bForceToReturnSuper ) return;
while( TRUE ) {
ch = *executionPointer++;
if( ch != ' ' && ch != '\t' ) break;
}
if( ch != ',' ) {
syntaxError();
return;
}
g = expr();
if( bForceToReturnSuper ) return;
while( TRUE ) {
ch = *executionPointer++;
if( ch != ' ' && ch != '\t' ) break;
}
if( ch != ',' ) {
syntaxError();
return;
}
b = expr();
if( bForceToReturnSuper ) return;
#ifdef WW
if( isWonderSwanColor() ) {
wwc_palette_set_color(0, index, ((r << 8)&0xf00) | ((g << 4)&0xf0) | (b&0xf) );
}
#else
printf("palette: %d (%d,%d,%d)\n", index, r, g, b );
#endif
}
void st_color()
{
SHORT fore, back;
BYTE ch;
fore = expr();
if( bForceToReturnSuper ) return;
while( TRUE ) {
ch = *executionPointer++;
if( ch != ' ' && ch != '\t' ) break;
}
if( ch != ',' ) {
syntaxError();
return;
}
back = expr();
if( bForceToReturnSuper ) return;
#ifdef WW
font_set_color( (fore & 0x03) | ((back << 2) & 0x0c));
#else
printf("color: %d %d\n", fore & 3, back & 3 );
#endif
}
/* <20>sƒGƒfƒBƒ^ */
void editLine()
{
@ -2243,7 +2355,10 @@ NEARPROC statements[KEYWORDS_STATEMENT_TO-KEYWORDS_STATEMENT_FROM+1] = {
st_call,
st_int,
st_tron,
st_troff
st_troff,
st_colormode,
st_palette,
st_color
};
void interpreterMain()

BIN
wonbe.exe

Binary file not shown.

BIN
wonbe.fx

Binary file not shown.

View File

@ -1,6 +1,6 @@
ワンべぇ: WONBE, WonderWitch BASIC Environment
暫定マニュアル Ver 0.05
2000年12月10
暫定マニュアル Ver 0.06
2001年1月29
株式会社ピーデー
川俣 晶
This software is distributed under GNU General Public License
@ -9,8 +9,9 @@
 ワンべぇは、WonderWitch上で使用できる小型BASICインタプリタです。
 WonderWitch上ですべての機能が稼働し、シリアルケーブル経由で接続された一般の通信ソフトで操作します。デバッグ済みのプログラムを実行する場合は、シリアルケーブルも通信ソフトも必要ありません。
 WonderWitchのテキスト画面を扱う最小限度のステートメント(cls,locate,print)と、最小限度のボタン入力機能(wait,scan)を持ち、簡易なミニゲームが書けます。
 WonderSwan Color使用時には4色カラーモードが可能です。
 動作テスト用にWin32上で動くバイナリーもありますが、これは、BASIC本体の動作確認用と割り切ってください。
 ドキュメントは、ちょっと見難いと思いますが、暫定版とします。
 ドキュメントは、ちょっと見難いかもしれませんが、有志が見やすいものを作ってくれることを期待します。
●必要なもの
・開発時
@ -187,6 +188,25 @@ tron
troff
 トレースモードをオフにします。
colormode 式
 カラーモードを設定します。WonderSwan Colorでのみ使用できます。
 式の値は以下の通りです。
0x00 モノクロモード
0x80 4色モード
0xC0 16色モード (設定できますがワンべぇの機能からは描画できません)
0xE0 16色PACKEDモード (設定できますがワンべぇの機能からは描画できません)
 Win32版では機能しません。
color 式,式
 描画する文字の色を指定します。最初の式が前景色のインデックス、2番目の式が背景色のインデックスです。それぞれ、03のみ指定できます。
 実行開始時の初期状態はcolor 3,0に相当する状態です。
 Win32版では機能しません。
palette 式,式,式,式
 パレットを指定します。最初の式が設定するパレットのインデックス(03)を指定します。2番目から4番目の式が、それぞれ、R,G,Bの値を示します。R,G,Bの値はそれぞれ015の範囲内です。
 Win32版では機能しません。
例: palette 0,15,0,0
 2項演算子
 + - * / < > = <= >= <> and or xor
@ -258,6 +278,10 @@ sseg
 実行中のSSセグメントレジスタの値を返します。マシン語スタックがこのセグメントにあります。
 Win32版では機能しません。
hardarch
 現在実行中のWonderSwanがColorモデルかどうかを返します。モクロWonderSwanなら0。WonderSwan Colorなら1になります。
 Win32版では機能しません。
● ファイル保存時の拡張子
 ワンべぇのソースフィルは、".wb"で終わるファイル名にしておいて下さい。loadなどのコマンドでは拡張子に関係なく読み込めますが、エントランスメニューに表示されるのは".wb"で終わるファイル名だけです。
@ -270,8 +294,54 @@ sseg
 要するに、誰でも、どんな目的にも使用して良いということです。ただし、本ソフトを売ってはいけません。また、ソースコードは必ず公開しなければなりません。商品の中に収録することは可ですが、本ソフトを利用者が自由にコピーして配布することを妨げてはなりません。
 2000年12月現在、ソースコードは株式会社ピーデーの川俣晶(autumn@piedey.co.jp)が管理しています。有益なソースコードの修正をフィードバックしてくれれば、こちらのソースツリーに反映します。
● 余談
 ワンべぇは、私こと川俣が、20世紀への感謝と決別の気持ちで作ったものです。つまり、私にとって、マイコン/パソコンに出会ったという事件こそが、20世紀最大のイベントであり、そこで大きな役割を果たした超小型インタプリタ言語達、Tiny BASIC、VTL、GAME、TL/1は大きな印象を私の中に残したのです。そして、当時、私はプログラム言語を自分で作りたくて、一生懸命研究を重ねていたのも、また事実です。結局、いくつものトイ言語を開発しました。必要とあれば実用言語も作りました。ENIXのTOKYOナンパストリートをFM-7からPC-8801に移植するときにはメモリ効率を上げるために整数型の小型インタプリタを作ったりもしました。しかし、最終的に構造化アセンブラの匂いを微かに含んだ自作のZ-80用アセンブラ開発システムAZASをもって自作言語の世界は終着駅を迎えたわけです。この時点で、明らかに、Tiny BASICのような言語を開発する意味がなかったのです。必要な性能を得るためには、アセンブラレベルの開発が不可欠だったためです。作ることはできたけれど、作る意味は既に無かったのです。そして、時代が16bitの時代に移ると共に、私も自作言語を使うのはやめて、出来の良い既存の処理系を使うようになりました。MASM 1.27, Turbo Pascal 3.0, Turbo C 1.52.0, MS-C 6.0, Visual BASIC 1.0, JDK 1.02などなど。しかし、ふと20世紀も終わる頃に振り返ると、右も左も分からない少年時代に憧れたあのシンプルなTiny BASICが思い出されたわけです。だから、これこそが私にとっての20世紀そのもの、という気持ちを込めて作ったのです。
 そのような訳で、これにはある種の世代性があります。BASICでゲームを作るというと、MSXとかベーマガという世代もいるようですが、はっきり言って、この世代にはワンべぇは理解できないと思います。MSXに搭載されたBASICは、超高機能巨大BASICであって、Tiny BASICとはまったく世代が違うのです。PC-8801やFM-7まで遡れる世代でも、まだ分からないでしょう。結局のところ、これが分かるためには、パソコンがパソコンと呼ばれる前、マイコンと呼ばれ、ケースに収まっておらず基板が剥き出しの状態で売られていた時代まで遡る必要があります。つまりは、そういう時代、何かを得ようとすれば手作りの要素が入り込んで当たり前の時代のロマンへ捧げるものが、このワンべぇと言うことになります。そして、そのロマンを再現するにふさわしい土台として、WonderWitchという製品がこの時代に登場したことも、不思議な縁だと思います。
 というわけで、私がワンべぇ利用者に言いたいことは一つです。このロマンを分かち合ってくれ。つまり、気に入らないところは、どんどん改造してくれ。好き勝手に改造して使えることを保証するために、ソースはGPLにしてあります。
● 同梱ワンべぇプログラム
▼デモ
colordemo.wb
 カラー機能のデモ (これのみWonderSwanColor用)
▼ゲーム
ctb.wb
 落ち物ゲーム
janken.wb
 ジャンケンゲーム
shoot.wb
 シューティングゲーム
star.wb
 STAR TREK風ゲーム"STAR WITCH" (同梱star.txt参照)
 プログラムの書き方の参考にどうぞ
▼テスト
test.wb
 簡単なインタプリタの動作テスト
testcall.wb
 callステートメントの動作テスト
testcont.wb
 contステートメントの動作テスト
testfor.wb
 forステートメントの動作テスト
testgosub.wb
 gosubステートメントの動作テスト
testif.wb
 ifステートメントの動作テスト
testint.wb
 intステートメントの動作テスト
testlocate.wb
 locateステートメントの動作テスト
testlongloop.wb
 STARTキーによる中断のテスト
testpeekpoke.wb
 peek関数pokeステートメントのテスト
● 変更履歴
2001年1月29日 Ver 0.06
・WonderSwan Colorの開発キットに移行
・colormode, palette, colorステートメント、hardarchシステム変数を追加
・ドキュメントに余談を追加
2000年12月10日 Ver 0.05
・Hirotaka JOE Ohkuboさんの差分(0.04j4)をマージ play文が使用可能に (要sound.il)
・?をキーワードdebugと見なす