First Version

Version 0.01 - from wonbe001.lzh
This commit is contained in:
Kawamata Akira 2000-11-06 12:00:00 +09:00 committed by Godzil
commit 7179e632c5
18 changed files with 2766 additions and 0 deletions

59
keywords.h Normal file
View File

@ -0,0 +1,59 @@
/* WONBE predefined keyword IDs */
/* First Created: Nov.3,2000 by Nashiko */
/* Copyright 2000 (c) by Pie Dey Co.,Ltd. */
#define KEYWORD_IF 0x80
#define KEYWORD_PRINT 0x81
#define KEYWORD_LOCATE 0x82
#define KEYWORD_CLS 0x83
#define KEYWORD_GOTO 0x84
#define KEYWORD_GOSUB 0x85
#define KEYWORD_RETURN 0x86
#define KEYWORD_FOR 0x87
#define KEYWORD_NEXT 0x88
#define KEYWORD_END 0x89
#define KEYWORD_BREAK 0x8a
#define KEYWORD_REM 0x8b
#define KEYWORD_NEW 0x8c
#define KEYWORD_LIST 0x8d
#define KEYWORD_RUN 0x8e
#define KEYWORD_CONT 0x8f
#define KEYWORD_SAVE 0x90
#define KEYWORD_LOAD 0x91
#define KEYWORD_MERGE 0x92
#define KEYWORD_RANDOMIZE 0x93
#define KEYWORD_EXIT 0x94
#define KEYWORD_DEBUG 0x95
#define KEYWORD_WAITVB 0x96
#define KEYWORD_FILES 0x97
#define KEYWORD_AND 0xa0
#define KEYWORD_OR 0xa1
#define KEYWORD_XOR 0xa2
#define KEYWORD_NOT 0xb0
#define KEYWORD_SCAN 0xc0
#define KEYWORD_WAIT 0xc1
#define KEYWORD_RND 0xc2
#define KEYWORD_ABS 0xc3
#define KEYWORD_TICK 0xc4
#define KEYWORD_SCAN_A 0xd0
#define KEYWORD_SCAN_B 0xd1
#define KEYWORD_SCAN_X1 0xd2
#define KEYWORD_SCAN_X2 0xd3
#define KEYWORD_SCAN_X3 0xd4
#define KEYWORD_SCAN_X4 0xd5
#define KEYWORD_SCAN_Y1 0xd6
#define KEYWORD_SCAN_Y2 0xd7
#define KEYWORD_SCAN_Y3 0xd8
#define KEYWORD_SCAN_Y4 0xd9
#define KEYWORD_THEN 0xf0
#define KEYWORD_CHR 0xf1
#define KEYWORD_TO 0xf2
#define KEYWORD_STEP 0xf3
#define KEYWORDS_STATEMENT_FROM 0x80
#define KEYWORDS_STATEMENT_TO 0x97
#define KEYWORDS_2OP_FROM 0xa0
#define KEYWORDS_2OP_TO 0xa2
/* end of keywords.h */

23
makefile 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

2
test.wb Normal file
View File

@ -0,0 +1,2 @@
10 print 1
20 print 2

3
testcont.wb Normal file
View File

@ -0,0 +1,3 @@
100 debug "contしてね"
200 break
300 debug "contされたよ"

11
testfor.wb Normal file
View File

@ -0,0 +1,11 @@
100 rem ワンべぇ テストプログラム
200 rem forのテストその1
210 print "loop by global=":for I=0 to 9:print I,:next:print
215 print "PUSH ANY BUTTON";wait
220 print "loop by local=":for i=0 to 9:print i,:next:print
225 print "PUSH ANY BUTTON";wait
230 print "loop by array=":for @(0)=0 to 9:print @(0),:next:print
235 print "PUSH ANY BUTTON";wait
240 print "step 2=":for i=0 to 18 step 2:print i,:next:print
245 print "PUSH ANY BUTTON";wait
250 print "step -1=":for i=9 to 0 step -1:print i,:next:print

19
testgosub.wb Normal file
View File

@ -0,0 +1,19 @@
100 'gosubとローカル変数のテスト
200 a=1
210 gosub 1000
220 if a <> 1 then print "220でエラー"
300 print "main return"
900 end
1000 'sub1
1010 print "sub1"
1100 a=123
1200 if a <> 123 then print "1200でエラー"
1300 gosub 2000
1400 if a <> 123 then print "1400でエラー"
1450 print "sub1 return"
1500 return
2000 'sub2
2010 print "sub2"
2100 a=321
2200 if a <> 321 then print "2200でエラー"
2500 return

9
testif.wb Normal file
View File

@ -0,0 +1,9 @@
10 if 1 then print "条件成立"
20 if 0 then print "条件不成立"
30 if 1 then if 1 then if 1 then print "多重条件成立"
40 print "ifによるループ"
50 i = 0
60 print i;" ";
70 i=i+1
80 if i < 10 then goto 60
90 print "終了",wait

7
testlocate.wb Normal file
View File

@ -0,0 +1,7 @@
2 rem cls, localeのテスト
5 cls
7 randomize tick
10 for i=0 to 999
20 locate rnd(28),rnd(18)
30 print chr(rnd(26)+0x41);
40 next

1
testlongloop.wb Normal file
View File

@ -0,0 +1 @@
10 for i=0 to 32767:print "test";i:next

275
win32text.c Normal file
View File

@ -0,0 +1,275 @@
// wonbe Win32 text emulation
// First Created: Nov.4,2000 by Nashiko
// Copyright 2000 (c) by Pie Dey Co.,Ltd.
#include <windows.h>
#include "win32text.h"
#define SCREEN_SIZE_X (224/8)
#define SCREEN_SIZE_Y (144/8)
static WORD screen[SCREEN_SIZE_X][SCREEN_SIZE_Y];
static WORD lastChar;
static HWND hwnd;
static void wmPaint( HWND hWnd, HDC hdc )
{
int x,y;
int xArea, yArea;
RECT rect, rectDraw;
TEXTMETRIC tm;
GetClientRect( hWnd, &rect );
GetTextMetrics( hdc, &tm );
xArea = SCREEN_SIZE_X * tm.tmMaxCharWidth;
yArea = SCREEN_SIZE_Y * tm.tmHeight;
rectDraw.left = (rect.right-rect.left)/2-xArea/2;
rectDraw.top = (rect.bottom-rect.top)/2-yArea/2;
rectDraw.right = (rect.right-rect.left)/2+xArea/2;
rectDraw.bottom = (rect.bottom-rect.top)/2+yArea/2;
FillRect( hdc, &rect, GetStockObject(GRAY_BRUSH) );
FillRect( hdc, &rectDraw, GetStockObject(WHITE_BRUSH) );
for( y=0; y<SCREEN_SIZE_Y; y++ ) {
for( x=0; x<SCREEN_SIZE_X; x++ ) {
WORD val;
BYTE str[2];
val = screen[x][y];
if( val >= 0x100 ) {
str[0] = (val >> 8);
str[1] = (val & 0xff);
TextOut( hdc,
rectDraw.left+x*tm.tmMaxCharWidth,
rectDraw.top+y*tm.tmHeight,
str, 2 );
} else {
str[0] = (BYTE)val;
TextOut( hdc,
rectDraw.left+x*tm.tmMaxCharWidth,
rectDraw.top+y*tm.tmHeight,
str, 1 );
}
}
}
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch (message) {
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
wmPaint(hWnd,hdc);
EndPaint(hWnd, &ps);
break;
case WM_CHAR:
lastChar = (WORD)wParam;
break;
case WM_CLOSE:
return 0; // 閉じちゃ駄目
case WM_DESTROY:
hwnd = NULL;
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
}
return (0);
}
static int createTextInThread()
{
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = GetModuleHandle(NULL);
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = "wonbe_win32text";
RegisterClass(&wc);
hwnd = CreateWindow(wc.lpszClassName, "WONBE TEXT", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, SCREEN_SIZE_X*16+64, SCREEN_SIZE_Y*20+64,
NULL, NULL, wc.hInstance, NULL);
if( !hwnd ) return FALSE;
clearText();
ShowWindow( hwnd, SW_SHOW );
UpdateWindow( hwnd );
return TRUE;
}
void clearText()
{
int x,y;
if( hwnd == NULL ) return;
for( y=0; y<SCREEN_SIZE_Y; y++ ) {
for( x=0; x<SCREEN_SIZE_X; x++ ) {
screen[x][y] = ' ';
}
}
InvalidateRect( hwnd, NULL, FALSE );
}
void drawChar( int x, int y, unsigned short ch )
{
if( x < 0 ) return;
if( y < 0 ) return;
if( x >= SCREEN_SIZE_X ) return;
if( y >= SCREEN_SIZE_Y ) return;
screen[x][y] = ch;
InvalidateRect( hwnd, NULL, FALSE );
}
void updateText()
{
UpdateWindow( hwnd );
}
void deleteText()
{
if( hwnd == NULL ) return;
DestroyWindow( hwnd );
hwnd = NULL;
}
DWORD WINAPI ThreadFunc( LPVOID lpParam )
{
MSG msg;
createTextInThread();
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
int createText()
{
DWORD dwThreadId, dwThrdParam = 1;
HANDLE hThread;
lastChar = 0;
hThread = CreateThread(
NULL, // no security attributes
0, // use default stack size
ThreadFunc, // thread function
&dwThrdParam, // argument to thread function
0, // use default creation flags
&dwThreadId); // returns the thread identifier
return TRUE;
}
unsigned short win32_wait()
{
WORD t;
while( TRUE ) {
// 以下の2行は本当はマルチスレッド的にNGなんだけど
// テスト用環境だから大目に見る
t = lastChar;
lastChar = 0;
switch( t ) {
case 'p':
case 'P':
return 0x02; // START BUTTON
case ' ':
return 0x04; //KEYWORD_SCAN_A;
case 0x1b:
return 0x08; //KEYWORD_SCAN_B;
case 'e':
case 'E':
return 0x10; //KEYWORD_SCAN_X1;
case 'd':
case 'D':
return 0x20; //KEYWORD_SCAN_X2;
case 'x':
case 'X':
return 0x40; //KEYWORD_SCAN_X3;
case 's':
case 'S':
return 0x80; //KEYWORD_SCAN_X4;
case 't':
case 'T':
return 0x100; //KEYWORD_SCAN_Y1;
case 'g':
case 'G':
return 0x200; //KEYWORD_SCAN_Y2;
case 'v':
case 'V':
return 0x400; //KEYWORD_SCAN_Y3;
case 'f':
case 'F':
return 0x800; //KEYWORD_SCAN_Y4;
}
Sleep( 100 );
}
}
unsigned short win32_scan()
{
WORD t;
t = 0;
if( GetAsyncKeyState('P') & 0x8000 ) {
t |= 0x02; // START
}
if( GetAsyncKeyState(VK_SPACE) & 0x8000 ) {
t |= 0x04; // A
}
if( GetAsyncKeyState(VK_ESCAPE) & 0x8000 ) {
t |= 0x08; // B
}
if( GetAsyncKeyState('E') & 0x8000 ) {
t |= 0x10; // X1
}
if( GetAsyncKeyState('D') & 0x8000 ) {
t |= 0x20; // X2
}
if( GetAsyncKeyState('X') & 0x8000 ) {
t |= 0x40; // X3
}
if( GetAsyncKeyState('S') & 0x8000 ) {
t |= 0x80; // X4
}
if( GetAsyncKeyState('T') & 0x8000 ) {
t |= 0x100; // Y1
}
if( GetAsyncKeyState('G') & 0x8000 ) {
t |= 0x200; // Y2
}
if( GetAsyncKeyState('V') & 0x8000 ) {
t |= 0x400; // Y3
}
if( GetAsyncKeyState('F') & 0x8000 ) {
t |= 0x800; // Y4
}
return t;
}
unsigned int win32_get_tick_count()
{
return GetTickCount()/10;
}
void win32_sys_wait( unsigned int val )
{
Sleep( val*10 );
}
// end of win32text.c

15
win32text.h Normal file
View File

@ -0,0 +1,15 @@
// wonbe Win32 text emulation
// First Created: Nov.4,2000 by Nashiko
// Copyright 2000 (c) by Pie Dey Co.,Ltd.
int createText();
void clearText();
void drawChar( int x, int y, unsigned short ch );
void updateText();
void deleteText();
unsigned short win32_wait();
unsigned short win32_scan();
unsigned int win32_get_tick_count();
void win32_sys_wait( unsigned int val );
// end of win32text.h

1974
wonbe.c Normal file

File diff suppressed because it is too large Load Diff

1
wonbe.cf Normal file
View File

@ -0,0 +1 @@
name: wonbe info: ワンべぇ mode: 7 source: wonbe.bin output: wonbe.fx

112
wonbe.dsp Normal file
View File

@ -0,0 +1,112 @@
# Microsoft Developer Studio Project File - Name="wonbe" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** 編集しないでください **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=wonbe - Win32 Debug
!MESSAGE これは有効なメイクファイルではありません。 このプロジェクトをビルドするためには NMAKE を使用してください。
!MESSAGE [メイクファイルのエクスポート] コマンドを使用して実行してください
!MESSAGE
!MESSAGE NMAKE /f "wonbe.mak".
!MESSAGE
!MESSAGE NMAKE の実行時に構成を指定できます
!MESSAGE コマンド ライン上でマクロの設定を定義します。例:
!MESSAGE
!MESSAGE NMAKE /f "wonbe.mak" CFG="wonbe - Win32 Debug"
!MESSAGE
!MESSAGE 選択可能なビルド モード:
!MESSAGE
!MESSAGE "wonbe - Win32 Release" ("Win32 (x86) Console Application" 用)
!MESSAGE "wonbe - Win32 Debug" ("Win32 (x86) Console Application" 用)
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "wonbe - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c
# ADD BASE RSC /l 0x411 /d "NDEBUG"
# ADD RSC /l 0x411 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "wonbe - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c
# ADD BASE RSC /l 0x411 /d "_DEBUG"
# ADD RSC /l 0x411 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ENDIF
# Begin Target
# Name "wonbe - Win32 Release"
# Name "wonbe - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\win32text.c
# End Source File
# Begin Source File
SOURCE=.\wonbe.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\keywords.h
# End Source File
# Begin Source File
SOURCE=.\win32text.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

29
wonbe.dsw Normal file
View File

@ -0,0 +1,29 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# 警告: このワークスペース ファイル を編集または削除しないでください!
###############################################################################
Project: "wonbe"=.\wonbe.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

BIN
wonbe.exe Normal file

Binary file not shown.

BIN
wonbe.fx Normal file

Binary file not shown.

226
wonbe.txt Normal file
View File

@ -0,0 +1,226 @@
ワンべぇ: WONBE, WonderWitch BASIC Environment
暫定マニュアル Ver 0.01
2000年11月6日
株式会社ピーデー
川俣 晶
Copyright 2000 (c) by Pie Dey Co.Ltd.
●これは何か?
 ワンべぇは、WonderWitch上で使用できる小型BASICインタプリタです。
 WonderWitch上ですべての機能が稼働し、シリアルケーブル経由で接続された一般の通信ソフトで操作します。デバッグ済みのプログラムを実行する場合は、シリアルケーブルも通信ソフトも必要ありません。
 WonderWitchのテキスト画面を扱う最小限度のステートメント(cls,locate,print)と、最小限度のボタン入力機能(wait,scan)を持ち、簡易なミニゲームが書けます。
 動作テスト用にWin32上で動くバイナリーもありますが、これは、BASIC本体の動作確認用と割り切ってください。
●必要なもの
・開発時
 WonderWitchのカートリッジとシリアルケーブル。38400bpsの無手順通信が可能な通信ソフトを持つパソコン等。
・実行時
 ワンべぇと実行したプログラムを入れてあるWonderWitchのカートリッジのみ
●準備
・TransMagicなどでワンべぇ(fonbe.fx)をWonderWitchに転送します。
・TransMagicなどの接続を切り、通信ソフトから38400bpsの無手順通信を開始します
・WonderWitch上でワンべぇを実行します
・エントランスメニュー画面でY2を押します
・通信ソフトに、ワンべぇの名前が表示され、"*Ready"と出ます
・これで準備完了です
・print "hello!"リターンと打ってWonderWitchの画面を見てください。文字が出ていれば正常です。
●開発済みプログラムの実行
・WonderWitch上でワンべぇを実行します
・エントランスメニュー画面で実行したいファイルを選んでAボタンを押します
●開発環境の概要
 通常の行番号ベースのエディタが使えます。
 行番号に引き続いて1行を入力してリターンを押すと、プログラムに記録されます。
 行番号だけを入力してリターンを押すとその行は削除されます。
 行番号無しで命令を入力すると即座に実行されます。
 編集はバックスペースによる1文字削除しか使えません。通信ソフトからホスト上のエディタにCOPY&PASTEして、エディタ上で編集してから、通信ソフトに貼り付けてワンべぇに送ると便利です。ただし、フロー制御が無いので、複数行まとめて貼り付けると文字落ちが生じます。張り付けは1行単位で行ってください。プログラムはホスト上で編集してあらかじめTransMagicなどで送信しておくのも有効な手段です。
 現状では2Kバイト以上のプログラムを作成してもsaveコマンドで保存できません。listコマンドを実行してから通信ソフト上でCOPY&PASTEしてホスト上に保存してください。
 実行中は、STARTボタンを押すといつでも対話モードに戻れます。その後、contステートメントで実行を継続できます。
 中間言語に翻訳してから処理するため、中間言語に翻訳できない場合は、入力直後にエラーが出ます。
●言語の概要
 ごく軽いBASIC言語です。
 昔あったTiny BASICに近い構文を持っています。
 データ型は、符号付き16bit整数だけです。
 定数は、-3276832767の10進数か、0x00000xffffの16進数で記述できます。
 変数は、グローバル変数として、AZのアルファベット大文字1文字のものが26個あります。
 ローカル変数として、azのアルファベット子文字1文字のものが26個あります。ローカル変数はgosubステートメントを実行したときに新しい領域が割り当てられ、returnステートメントを実行したときにgosubする前の領域が戻ってきます。
 配列変数は@(インデックス)という形式の1次元配列だけが使用できます。使用可能なサイズは、プログラム記憶領域(48Kバイト)の残りサイズに等しくなります。インデックスは0から始まります。(例: for i=0 to 9:print @(i):next)
 演算子の優先順位はありません。(1+2*3は9になります)
 計算順序は、括弧()を使って明示的にコントロールしてください。
 オーバーフロー、アンダーフローのチェックはありません。溢れは無視されます。ただしゼロ除算はエラーになります。
 ステートメントなどのキーワードはすべてアルファベット小文字で入力します。大文字を使っても小文字になります。
● ステートメント一覧
変数 = 式
 式を計算して変数に代入します。letキーワードはサポートしていません。
例: a=b+c
if 式 then ステートメント列
 式が0でなければステートメント列を実行します。0なら次の行から実行を継続します。elseはありません。
例: if (a=0) and (b=1) then goto 200
print [文字列|式|chr(式)][,|;]...
 WonderWitchのテキスト画面の現在のカーソル位置から文字を表示します。
 式の前後に空白文字が入ることはありません。
 chr(式)は、式の値を文字コードと見なして表示します。
 制御コードは扱いませんので、WonderWitchのキャラクタージェネレータにあるすべての文字が表示できます。
 区切り文字の;は何もしません。,はタブストップ位置までカーソルを進めます。
 print文の最後は;または,で終わった場合は改行しません。
例: print "計算結果=",chr(34);1+2;chr(34)
locate 式,式
 WonderWitchのテキスト画面の現在のカーソル位置を設定します。引数はx,yの順番です。
例: locate 10,10
cls
 WonderWitchのテキスト画面を消去します。
例: cls
goto 式
 式の行番号に飛びます。計算型goto文が可能です。つまり、goto A*100とすると、Aが1のきは100行目に。2のときは200行目に飛びます。
例: goto 100
gosub 式
 スタックに現在位置とローカル変数を積んで、式の行番号に飛びます。gotoと同じく計算型gosubが可能です。
 スタックはforと合わせて8レベルまでです。
例: gosub 100
return
 gosubがスタックに積んだ情報を取り出して、そこに処理を戻す。ローカル変数も戻る。
例: return
for 変数=式 to 式
for 変数=式 to 式 step 式
 変数の値を変化させながらnextまで繰り返します。
 終了値は厳密であることに注意が必要です。for i=1 to 2 step 2:nextは、無限ループになります。なぜなら変数iは永遠に2にならないからです。このような仕様にしておかないと、終了値を超えたら終わるという判定だと、ループの終値が32767のときに機能しないためです。
例: for i=0 to 10 step 2
next
 forステートメントの位置に戻って動作を繰り返します。forステートメントで示した条件が満たされた場合は、nextの次に動作が進みます。nextの後に変数名を書くとエラーになります。
例: next
end
 プログラムの実行を終了します。
break
 その位置で一時的に実行を中断します。contステートメントで実行を継続できます。
rem 文字列
'文字列
 コメントを記述します。後ろに:を置いてステートメントを続けることはできません。
例: rem これはテストプログラムです。
例: 'この式が座標を計算します
new
 メモリ上のプログラムを消去します。
list [行番号][-][行番号]
 指定範囲の行番号のプログラムをリストします。すべて省略すると全行をリストします。
run
run 式
run 文字列
 プログラムを実行します。それに先だって変数やスタックがクリアされます。
 runはメモリ上のプログラムを先頭から。run 式は、式の行番号から。run 文字列は文字列のファイルを読み込んでそれを実行します。
例: run
例: run 100
例: run "test.wb"
cont
 breakステートメントやSTARTボタンによるブレークによって停止した位置から実行を再開します。
save 文字列
 文字列をファイル名としてメモリ上のプログラムを保存します。保存されるのは内部表現ではなくテキスト形式です。
 現在はWonderWitchのファイルシステムの制約上、2Kバイトを超えるファイルを保存できません。listコマンドで端末にリストを送ってそれをCOPY&PASTEして保存してください。
例: save "hello.wb"
load 文字列
 文字列をファイル名としてファイルからプログラムを読み込みます。読み込むのはテキスト形式で、改行はCRLFとLFのどちらでも可です。中間言語に翻訳できない行がある場合はそこで読み込みが中断されます。プログラムの実行中に使用した場合は実行は中断されます。
例: load "hello.wb"
merge 文字列
 メモリ上のプログラムにファイル上のプログラムを混ぜ合わせます。同じ行番号の行は読み込まれる方が優先されます。中間言語に翻訳できない行がある場合はそこで読み込みが中断されます。プログラムの実行中に使用した場合は実行は中断されます。
例: load "merge.wb"
randomize 式
 乱数の初期値を指定します。これを使わないと必ず同じ順序で乱数が発生します。引数には、システム変数tickを指定すると最適です。
例: randomize tick
exit
 ワンべぇを抜けてOSに戻ります。
debug [文字列|式|chr(式)][,|;]...
 printステートメントと同等ですが、WonderWitchの画面ではなく、シリアルポートに送ります。単体で実行する場合には使えないデバッグ専用の機能です。
waitvb 式
 式の回数だけVBLANKを待ちます。待っている間はSTARTボタンによるブレークを受け付けなくなるので、指定できる値は750までと制限されています。750を超える値を指定するとエラーになります。
例: waitvb 75
files
 カレントディレクトリのファイル一覧をシリアルポートに送ります。単体で実行する場合には使えないデバッグ専用の機能です。
 2項演算子
 + - * / < > = <= >= <> and or xor
● 単項演算子
 - not
● 関数
rnd(式)
 0から式-1までの範囲の乱数を返します。
abs(式)
 式の絶対値を返します。
● システム変数 (読み出しのみ)
scan
 WonderSwanのボタンの状態を調べ、1個の整数値として返します。SCAN_で始まるシステム変数とandを取ることで、どのボタンが押されているかどうか判定できます。STARTボタンは実行中断になるので、これは扱えません。
wait
 WonderSwanのボタンが押されるまで待ち、その状態を1個の整数値として返します。SCAN_で始まるシステム変数とandを取ることで、どのボタンが押されたか判定できます。STARTボタンは実行中断になるので、これは扱えません。
scan_a
scan_b
scan_x1
scan_x2
scan_x3
scan_x4
scan_y1
scan_y2
scan_y3
scan_y4
 それぞれのボタンのマスク値を示す定数を返します。
 Aボタンが押されているかどうかを調べるには、下記の例のように記述します。
例: if scan and scna_a then print "Aボタンが押さている"
tick
 システムタイマーのtickを返します。ただし、本来のtick値は符号無し32bit整数であり、ここで得られるのは16bit符号あり整数であることに注意が必要です。はみ出たbitは捨てられます。
● ファイル保存時の拡張子
 一応、ワンべぇのソースフィルは、".wb"で終わるファイル名にしておいて下さい。現在エントランスメニューには全ファイルが見えていますが、".wb"で終わるファイル名だけに限定しようかと考えています。
● 配布規則
 現バージョンは品質が不明のテスト版です。
 ですので、以下のように扱ってください。
 (正規版でどうするかは未定です)
・転載
 未完成品ですので、Internetやパソコン通信などへの転載は不可です。必ずhttp://www.piedey.co.jp/のサイトから入手するようにしてください。
・雑誌掲載等
 ご相談下さい。
・商業利用
 ご相談下さい。
・自作ソフトの実行手段としてのワンべぇの添付
 自作ソフトを配布するためにwonbe.fxを一緒に渡すことを許可します。アーカイブへの同梱、CD-Rメディアなどへの焼き込み、通信ケーブルによる転送、どれも可です。ただし、ワンべぇの動作に関しては何も保証はできませんので、リスクは自分で負ってください。利用にあたっては、ロイヤリティなどはありませんので、報告も送金も必要ありません。
● 問い合わせ先
株式会社ピーデー http://www.piedey.co.jp/
川俣 晶 autumn@piedey.co.jp
以上