CONTENTS
Top Profile Vanity Develop P6Dev JavaScript (゚Д゚) BBS Link

Pocket BASIC Simulator.
PB-100



【目次】

▲前のページに戻る

■説明
■具体例
  ・サンプルソース
■リストについて
  ・条件式
  ・エスケープシーケンス
■キー入力について
■トレースモードについて
■コマンドラインモードについて
■メニューについて
■メッセージについて
■動作上の差違について
■課題

▼ファイルのダウンロード



【 説明 】
Pocket BASIC のシミュレーターです。
正確に言うと 「PB-100 のマニュアルを読みながら作ったBASICインタープリター」 です。
意図的にマニュアル表記と異なった動作をさせている部分もあるし、OSやキーボードの仕様上の差異からやむなく異なった部分もあります。 その辺は項目別に記述して行きます。


【 対象システム 】
OS: Windows 98/Me/2000/Xp
    Windows CE (CPU:ARMV4I)

PB-SIM対応機種一覧
Pocket BASIC
Ver 1.0
PB-100、PB-200、PB-300、FX-700P、FX-802P
Pocket BASIC
Ver 2.x
PB-80、PB-100F、PB-110、PB-120、PB-220、PB-400、PB-410、FX-710P、FX-720P、FX-780P、FX-781P、FX-820P、FX-5200P
(非対応命令を除き、上記一覧の機種用に作られた BASIC-LIST が動作します。)



【 具体例 】

具体的な実行手順です。
まずは、"PB-SIM.EXE" を起動すると下のようなウィンドウが表示されます。

PBSIM

PB-SIM は限定的なコマンドライン処理(計算)はサポートしていますが、リスト行入力などには対応していません。 その為、予め入力されたBASICリストのテキストファイルを読込んで実行させます。
そこで最初に実行したいBASICのファイルを PB-SIM に読み込ませます。 メニューの [ファイル]->[リストを開く] からファイルを読み込むか、 ウィンドウ上にBASICリストをドロップして下さい。 因みにPB-SIMでは、 よりBASICらしさを強調するためにファイルを『リスト』と表記してます…(笑

試しに下のリスト "test.bas" を読み込ませてみます。
[P0]
10 $="0123456789":A$=MID(3,1)
15 B=VAL(A$)-1
20 GOSUB #B
100 PRINT:PRINT CSR 0;"Value=";Z;
200 END

[P1]
5  C=4
10 GOSUB #2
20 GOSUB #3
30 RETURN

[P2]
200 E(0)=1
400 E(B)=2
600 E(2)=3
700 H=E(0)+E(1)+E(2)
800 RETURN

[P3]
750 GOSUB #5
1000 GOSUB #9
800 RETURN


[P9]
0 PRINT
1 FOR I=0 TO 10 STEP 2
2 A$=KEY:IF A$="" THEN 2
3 PRINT A$;:NEXT I
4 A(26)=5963:RETURN


[P5]
10 J=0
15 FOR J=0 TO 4 STEP 2
20 FOR I=0 TO 15
22 IF J=2 THEN 60
23 PRINT CSR I;">\HT";
40 NEXT I:NEXT J
50 RETURN
60 PRINT CSR I;">\DI";
70 NEXT I:NEXT J
80 GOTO 50

[P7]
10 A=1:A$="A"

[P8]
10 B$="B":B=1

※このサンプルリストは、解説の都合上、エラー行が含まれています。実行を試した人は、ついでにヘルプメニューの「エラー詳細情報」(参照→【メニューについて】)を見ながら自分で不具合箇所を修正するように試みて下さい。

あくまでテスト用なので、かなりいい加減な内容ですが、ま、それは置いといて…
上記リストを読み込ませようとすると、行番号不正でエラーが出ます。 原因は [P3]の1000行目と800行目の位置が入れ替わっているからです。 正しい並びになるように修正してください。 (ver0.11 以前は行並びをワザとチェックしないようにしていましたが、 使っていて混乱するとの事で順番をチェックするように変更しました。)
修正リストの再読み込みが成功すると下の状態になります。

READY

タイトルバーに読み込まれているファイル名が表示され、 次回起動時から自動的にこのリストが読み込まれるようになります。
PB実機の動作内容についてここで説明する事はありませんが、 ページ案内の画面情報に関して、 [P0][P1][P2][P3] [P5] [P7][P8][P9] にリストが格納された状態になっている事が判ると思います。
カーソル点滅しているページが現在選択されているプログラムエリアになりますので、後はメニューの [コマンド]->[RUN] を行う事で [P0] のリストが実行されます。

▲【目次】に戻る


【 リストについて 】
リストを入力する際の注意点です。

PB はキャラクターがASCIIコードと異なる為、 テキストエディターでそのままリストを入力する事は出来ません。 そこで雑誌などからPB用リストを入力するときは、 多少ソースに手を加えてもらう事になります。
基本事項として、実機上ではBASIC命令のアイテム間に空白が無くても殆ど問題がありませんが、PB-SIMの場合は アルファベット同士のアイテム間に空白を挿入しないとエラーになります。

[例]
  PRINT CSRA;"ABCD";  →エラー
  PRINT CSR A;"ABCD";  →○

但し、(アルファベット+数値)のアイテム並びの場合は間に空白が無くても問題なかったりします…。

[例]
  GOTOA  →エラー
  GOTO200  →○

とにかく、アイテム間には無条件で空白を挿入しておけば問題ありませんので、 リストはなるべくそのように入力してください。

文法上の書式変更について…

≪条件式・計算式≫
PB表記 WIN表記
<= IF A<=6 THEN 50
< > IF B$<>"N" THEN 20
>= IF C>=6;C=0
^ Y=(X+2)^2
PI Y=SIN (PI/2)
EX A=1.32EX4
EM A=2.46EM3

条件文の表記は N80-BASIC や MSX-BASIC などの一般的な MS-BASIC 文法に 基づいた書き方に変更するだけなので、特に難しい事は無いと思います。
因みに、PB-SIM はC言語の表記も受け付けるようにしているので、 "<>" は "!=" と書いても問題無いし、 BASICでのIF文のイコール条件は通常 "IF A=B" ですが、 "IF A==B" と書いても正常に処理されます。
論理演算式も同様に… というかPBに論理演算は有りませんね。コレは不要な機能です(笑。


次は、 文字列内(ダブルコーテーションで囲まれた部分)の特殊キャラクター 入力について…

≪エスケープシーケンス一覧≫
PB表記 WIN表記 説明
\\ 単独の "\" ではエスケープシーケンスと勘違いされてしまうので、二重に重ねて "\\" と表記します。C言語の表記と一緒です。
\CS CurSor
"_"(アンダーバー)と同じです。
\LE Less Equal
\NE Not Equal
\GE Greater Equal
\LA Left Arrow
\DA Down Arrow
\RA Right Arrow
\UA Up Arrow
" ^ "(サーカムフレックス)と同じです。
\PI PI
\CI CIrcle
\SQ SQuare
\TR TRiangle
\CR CRoss
\DV DiVide
\EX EXponent
\EM Exponent Minus
エキスポーネント・マイナスは、PB実機ではエキスポーネントの直後に "-"(マイナス)符号を書き込むと自動的に "E-"(エキスポーネントマイナス) に変化するのですが、リスト入力でこれを再現することは出来ないので、"E-" を文字キャラクターとして使用する場合、このエスケープシーケンスを使用してください。
\DT DoT
中央ドットです。ピリオドとは異なります。
\DG DeGree
角度の「度」です。
\SP SPade
\HT HearT
\DI DIa
\CL CLover
\BX BoX
Black Box で "\BB" にしようかと思いましたが、 何の省略だか判らなくなりそうなので "\BX"。
\SG SiGma
\OM OMega
ついついオームと読んでしまうのは電気系の性(サガ)ですか?
\MU MU
ついついマイクロと読んでしまうのは電気系の性ですか?
(しつこい)

これが一番面倒なのですが、 特殊キャラクター文字列を入力する時はそれぞれのキャラクターに応じたエスケープシーケンスを入力してください。 但し、IFの”条件式”にエスケープシーケンスを使用することは出来ません。
(※ "IF A \LE B;" と書いても、Syntaxエラーとなるだけで "IF A<=B;" とは解釈されない。 もちろん "IF A$="\BX";" のような文字列比較での使用は可能です。)

他、 注釈行以外の場所で全角コードは入力しない でください。 全角が入力されてもエラーが出るか異常な表示になるだけです…。 文字列の中も同様です。


≪PB-110拡張記号≫

以下の記号は PB-110 のキャラクター記号です。 気分によりPB-100 の記号と使い分けてください(笑。 ちなみ、”\”バックスラッシュはPB-100には存在しない記号ですが、 在ると便利そうなので利用できるようにしました。

PB表記 WIN表記 説明
\S2 Spade2
PB-110のスペード記号。
\C2 Clover2
PB-110のクローバー記号。
\D2 Dia2
PB-110のダイヤ記号。
\H2 Heart2
PB-110のハート記号。
\BS BackSlush
PB-110のバックスラッシュ記号。



以上でPBソース入力時の注意点はおしまいです。


ここで、リストファイルの書き方についてですが、 【具体例】のところで示した テストリスト "test.bas" を見て既に理解しているかと思いますが、 1つのファイルに全ページ分のリストを書き込みます。
ページ指定は "[P0]" のように行い、 以降、継続行をそのページのリストとして読み込みます。

リストファイルは行の先頭に注釈記号を書き込むことで、 その行を注釈として無視する事が出来ます。 注釈はページ指定行にも有効です。 注釈として使える記号は以下のとおりです。
記号 説明
# シャープ
; セミコロン
' アポストロフィ
, カンマ
! エクスクラメーション
/ スラッシュ

色々対応していますので、自分の見やすい記号を使ってください。

例)
[P0]
10 VAC
'20 GOSUB #5

#[P1]
;10 A=0:B=0
//20 $="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
!30 PRINT CSR A;"_";
40 PRINT MID(B,4);

上の例では[P1]が注釈にされているので、40行は[P0]の扱いになります。


そうそう、サンプルリストは全て大文字で表記してありますが、 小文字で書いても大丈夫です。


▲【目次】に戻る


【 キー入力について 】
PCとPBではキーボードにも相違があります。 コレはもうPCのキーをそのままPBキーに適応させただけなので、 下の一覧を見てください。
PB の入力モードは「シフト入力」と「拡張入力」の2種類があり、 それぞれの組み合わせでキーボードから入力されるコードが異なります。 PB実機上でのモード入力は、 入力モード切り替えキーを押してから文字キーを押すという2段階入力になっています。 しかし、PCの場合は折角キーボードの同時押しを受け付けてくれる事だし、 通常シフトキーを使う感覚で使えるようになっています。
それぞれの入力モードのキー割り当ては以下の通りです。

[Shift]:シフト入力
[Ctrl] :拡張入力
[Alt] :ファンクション入力

(※ファンクションボタンは PB-100実機には実装されていませんが、Shiftボタンの右隣に穴を空けると押下ゴムが出てきます。)

[Shift],[Ctrl],[Alt] を押すと PB-SIM のPB画面で以下のアイコンが点いたり消えたりします。

, ,

尚、 「ASCII入力モード」のスイッチが有効になっていると 普段通り英数記号のアスキーコード入力になります。 この場合、一部の計算記号( π[パイ]とE[エキスポーネント] )を除いたPB独自の特殊コードが入力出来なくなります。 スペード、ハートなどの特殊記号を入力したいときは「ASCII入力モード」スイッチを切って入力して下さい。

PC上で使用するキーは下の表の通りです。
([Home],[End]キーは、それぞれPBの[AC],[ANS]が割り当てられています。)

他、PB実機のキー配置と関連はありませんがPB-SIM独自機能のキーが用意してあります。

[F1]  : 画面表示倍率の変更(縮小)
[F2]  : 画面表示倍率の変更(拡大)
[F4]  : 高速実行モード

[F5]  : RUN モード
[F6]  : COMMAND-LINE モード
[F7]  : "E"エキスポーネント(INPUT入力やコマンドライン計算で使用)
[F8]  : "π"パイ(INPUT入力やコマンドライン計算で使用)

[F9]  : デバッグ用変数領域バイナリ出力(カレント出力)
[F12] : スナップショット(デスクトップに出力)
[↑][↓]: 入力コマンド履歴(コマンドラインモードのみ)


通常入力。

シフトモード。

拡張モード。

拡張シフトモード。

ファンクションモード。

テンキーの方は、WINDOWSキーコードの仕様上完全に対応がとれていませんが、 通常の数値入力は問題ありませんので大丈夫でしょう。
それと、本来PBでは [Shift] + テンキー"." で "↑" が入力されるはずですが、 WINDOWSだと [Shift] + テンキー"." で [Delete] が認識されるんですよね。 仕方がないので、"↑" は、フルキーの "^" (サーカムフレックス) で入力できるように しておきました。 まぁ、実際にこの操作でリストを打ち込むわけではないし、 プログラム実行中に特殊キャラクタ入力を促される事など 皆無に等しいかと思いますが…(せいぜい数値入力くらい?)

最後にもう一つ、 [ESC] もPBの[STOP]と同じ動作をするようにしました。 こちらのキーの方が [Pause]キーより咄嗟に押しやすいと思いますので…


▲【目次】に戻る



【 トレースモードについて 】
PBには、リストを1行実行する毎に STOP が掛かる、デバッグ実行用の「トレースモード」があります。 本来のトレースモードは一行実行するたびに、 「P0-20」などと表示され、 STOPキーを押した時と同じ状態になります。 このときに、 「PRINT A」 などとコマンドラインから変数表示するなどしてデバッグするようになっています。 しかし、コマンドラインデバッグでは余りに非効率のため、「トレースモード」では別のトレースウィンドウに変数情報を出しながらポーズが掛かる仕様になっています。

[↓トレース実行中のトレースウィンドウ]

ステップ実行は、実機と同じく[EXE](Enterキー)で継続されます (PB-SIMではPB画面をクリックすることで、[EXE]を押した事と同じ扱いになります) 。 しかし、[EXE] 継続だとキー押下情報を受け付けてしまう為、 「if key<>"" then 20」 のような条件分岐で必ず引っかかってしまいます。 そこで キーの入力認識を行わずにステップ実行したいときはトレースウィンドウをマウスでクリックするか、[Tab]キーを押してください。
それと、実機のトレースモードは実行単位が 行単位 でしたが、 ここではインタープリター呼び出し毎に停止されるようになっています。 よって、PRINT や INPUT では引数のブロックごとに停止する事となり 多少煩わしい感はありますが、デバッグ作業はやり易いかと思われます。

トレースウィンドウ内のボックスについて説明します。
「▼変数領域」が各変数の内容表示、 「▼リスト実行位置」のところに表示されているリストは 「LAST:」・「NEXT:」でそれぞれ、前回実行位置・現実行位置を表しています。 "◆" の在るところが解析ポインタの位置で、 現在は「LAST:」の "◆" 以降「NEXT:」の "◆" 以前の命令が実行され停止していることになります。
左のトレースウィンドウのサンプルを例にとりますと、
[LAST]
10 print csr 0;$;◆csr x;"=";:return
[NEXT]
10 print csr 0;$;csr x;"=";◆:return
ですので、 「csr x;"=";」 が実行された直後、 「return」 が実行される直前で停止中と言う事になり、 各種変数はその状態の時のものが出力されています。


変数領域のエディットボックスについてですが、
変数が未使用の時は -------、 変数が数値として扱われているときには (数値)、 変数が文字列として扱われているときには "(文字列)"、 と出力されます。

さて、現在のウィンドウ中に表示されている変数は 増設RAMを装着していない状態の最大配列数(94個)ですが、 増設RAMを装着した状態の最大配列(222個)まで見たい時は ウィンドウ右下にある[拡張変数]のボタンを押してください。 拡張変数領域を表示する拡張トレースウィンドウが出現します。


こちらはかなり手抜きな表示になっていますが、 通常ここまで配列は使わないだろうし、 エディットボックス出し過ぎで処理が重くなるのを防ぐ為に、 このような簡易形式にしています。
で、実際、PB実機で222個の配列を使うように設定すると、 プログラムに使えるメモリが0ステップになってしまうんですけどね(笑。 幸いPB-SIMにメモリ制限は関係ありません…( ゚∀゚)



▲【目次】に戻る



【 コマンドラインモードについて 】
PB-SIMのコマンドラインモードは主に計算作業を目的としたもの で、 RUN以外の制御系コマンド( FOR,GOTO,IF等々… )は正常に動作しません。 入力コマンドラインはBASIC-LISTと同じインタープリタ解析を行っているので、 SIN,COS などの数値関数を使用する場合は BASIC-LIST と同様、 命令と引数のアイテム間に空白をはさむ必要があります。

[例]
×: SINA
○: SIN A


文字列中で使用する特殊文字については特殊記号をそのまま入力してもエスケープシーケンスを使用してもどちらの入力が可能です。ただし "\" の入力だけはエスケープシーケンス入力と混同しないように "\\" を使用してください。

[例]
○: A$="\OM"
○: A$="Ω"
×: A$="\"
○: A$="\\"

計算で使用する特殊記号、π [パイ] と E [エキスポーネント] の入力については間違って文字列用のエスケープシーケンスを使用しないで下さい。 パイに関しては "PI" マクロ、エキスポーネントに付いては "EX"、"EM" 演算子を使用してください。

[例]
○: 1.665E4 (PBのエキスポーネント記号:[F7]キー)
○: 1.665EX4
×: 1.665\EX4
○: SIN (6/Π) (π記号の入力は[F8]キー)
○: SIN (6/PI)


他、[Ctrl]+[C]、 [Ctrl]+[V] で Copy & Paste に対応しています。 [Ctrl]+[C] は計算の答えだけでなく、現在コマンドライン上に表示されている文字列を全て取り込みます。



▲【目次】に戻る



【 メニューについて 】
メニューの各項目について説明します。

 ファイル(F) 
 
リストを開く(O)
  
 ファイルを選択して、BASICリストを読み込みます。
 これ以外に、リストファイルの Drag & Drop も受け付けています。
 もちろん、ショートカットアイコンへの D&D も可能です。
   設定(C)  
  
 ↓のダイアログが開きます。
 

 設定ダイアログ内の各種項目は以下の通りです。
 テキストエディター  [エディター起動]で使用されるテキストエディター。
 開始ページ番号(0∼9)  [RUN]した時に起動されるページ番号。
 実行速度(インターバルタイマー)  BASICリストが実行されるタイマーの速度。
 Start mode  シミュレータ起動時、BASICとコマンドライン、どちらのモードを起動させるか選択します。
 キー入力をASCIIコードにする  キー入力モードをPB配列からASCII配列に切り替えます。
 有効桁数指定  SET 命令で設定される桁数です。-1 の時は "SET N" された状態となります。
"SET G" は数値演算時に変換する固定小数点(浮動小数点の丸め誤差問題を解決するため) の桁指定で、PB-SIMの拡張コマンドです。浮動小数点問題に関しては【動作上の差違∼取り扱い数値範囲∼】の項を参照してください。
 BEEP SOUND  BEEP命令の発音を、PC本体のBEEPスピーカで行うか、PCM再生で行うか選択できます。 現在はPCM再生で固定されています。
 BEEP volume  BEEP音の音量を設定します。0 にすると無音になります。

 タイマーの実行速度はいまいち基準となるモノが無いため、 実機と比べて早いのか遅いのか良く分からないかも知れませんが、 各人、自分のPCのスペックに合わせて適当な値に調整して下さい。
因みに私の場合、お気に入りゲームの実行速度でコノ値!と決めていたりします(笑


   ASCII入力モード  
  
 入力モードをPBキー配列からASCII配列に切り替えます(トグルスイッチ)。
 このモードではPBの特殊キャラクターは入力できなくなりますが、 コマンドライン計算などは遙かに入力し易くなるかと思います。
   高速実行モード  
  
 通常タイマーを無視して、高速タイマー(5ms)で実行させます(トグルスイッチ)。
  エディター起動(E)
  
 上の設定ダイアログで指定したテキストエディターで現在選択されているBASファイルを開きます。
  リスト再読込(L) 
  
 テキストエディタなどでリストを修正した場合など、 このコマンドを実行してリストの再登録を行います。
    終了(Q)   
 現在の設定内容をINIファイルの保存して、PB-SIMを終了します。

 コマンド(C) 
 
   RUN(R)  
  
 リストを実行します。
  ページ選択 
  
  →P0P9
   実行ページを選択します。

PBSIM
※↑上のプログラムエリア画面で、番号をクリックする事でも開始ページを選択する事が出来ます。 ダブルクリックすると該当ページが RUN されます。
  角度単位 
  
  →DEG RAD GRAD
   三角関数で使用する角度単位を選択します。

※初期のプログラムエリア画面内で、[DEG]、[RAD]、[GRA] をクリックする事でも角度単位を選択する事が出来ます。
 
   COMMAND(C)  
  
 コマンドラインモードに移行します。
   STOP(S)  
  
 リストを停止します。停止状態の時に再び STOP を行うと、 実行が再開されます。
   TRACE(T)  
  
 トレースウィンドウを表示して、トレースモードに突入します。
 もう一度実行すると、トレースモードが解除されます。

※別方法として、リスト中に "BREAK" という拡張コマンドを挿入する事によっても、そこの場所でトレースウィンドウを出現させデバッグモードに突入させる事が出来ます。


 表示(V) 
 
 表示倍率 
  →x1x4
   PB画面の表示倍率を変更します。
   あまり大きくし過ぎると風情に欠けます …(;´ー`)>何だそりゃ?
   キーボードの [F1] , [F2] でも画面の拡縮が可能です。
  Software Keyboard
  
 メインウィンドウの下にソフトウェアキーボードが出現します。  左上の[X] をクリックするか、もう一度本コマンドを選択するとキーボードが消去されます。
ソフトキー上の文字をマウスクリックする事で文字が入力されます。 クリックしたままにすると一定間隔でキーリピートが掛かります。 タッチペン操作を見込んでの機能です。

  


 ヘルプ(H) 
 
エラー詳細情報(E)
  
 リスト実行中にエラーが発生した時、エラーの詳細な内容を表示します。
 なんせPBのエラーは殆ど "ERR2" にしかなりませんので…(笑
 まぁ、半分はデバッグ用です。 「リストに間違いが無いのに何故かエラーが出るんですけど…?」
という場合、このコマンドで詳細を確認してみて下さい。 PB-SIM のバグかも知れませんので…(汗。
   HELP(H)  
 HTML-HELPを呼び出します。

   About(A)  
  
 バージョン情報を表示します。
  

▲【目次】に戻る



【 メッセージについて 】
シミュレータ内で使われる全メッセージは、 外部ファイルの "message.ini" で定義されています。 (設定ダイアログの説明文なども含む)

このINIファイルを書き換える事で、 日本語バージョン以外の環境のPBsimを作る事が可能です。 誰か翻訳の得意な人、多言語に訳したメッセージファイルを提供してください…(・∀・)

個別の項目についての説明は量が多い為に省きます。 セクション名を見れば、何が何処で使われている文章かある程度予想がつくと思いますので…。 個別関数のメッセージは、エラーが出たときに詳細情報に出力させる文章です。


▲【目次】に戻る



【 動作上の差違 】
実機と仕様が異なる部分や、 マニュアルに表記されておらず、尚且つ 実機でないと動作を確認できずに勘で作り込んだ部分とか…(笑)  とりあえず箇条書きにしてみます。

0. リスト
上記【リストについて】で述べたとおり、 リストを入力する上での大前提として アルファベット同士のアイテム間は 空白を開ける必要があります。

1. 実行速度
もっとも根幹にして、もっとも重大な差違。
そもそも、WINDOWSプログミング(メッセージ駆動)は直列的な動作を行う事が許されていない為、 ある程度処理を実行したら一旦処理を中断して OS に処理を返す必要があります。 その為にマルチメディアタイマーを使用して一定時間毎にインタープリターを呼び出してもらい1コマンド実行して中断させているわけですが、 これでは実機の速度と合わせようがありません…。 単なる代入だろうが加減算だろうが三角関数など明らかに処理が重そうな命令だろうが、 全て等しい時間内で処理している為です。 アセンブラのようなCPUレベルのシミュレートなら各ニーモニックに費やされるステップ数からウェイトをつけることが出来るのですが、 BASIC命令ともなるとそう簡単には行きません。
どこかにBASIC命令の相対的な処理時間比でも書いてあれば、 1割込みでどれだけコマンドをこなせば良いのかの目安になるんですけどね…
とにかく、現在は放置中です。


2. 無効コマンド
コマンドラインから実行されるような命令は 無視するようにしています。 無効コマンドは以下の通りです。


【 PocketBASIC ver 1.0 】
 LIST、CLEAR、DEFM、SAVE、LOAD、PUT、GET、VER

【 PocketBASIC ver 2.0以降 】
 DIM、READ#、WRITE#、RESTORE#、EOX、EOY


DEFM が無効なのは端っから222個の変数最大配列が使用可能だからです。


無効コマンドとは逆にPB-SIMオリジナル拡張コマンドの存在もありますので、下の「取り扱い数値範囲」・「拡張コマンド」の項も読んでください。

3. ステップ数
ステップ数の制限はありません。 理由は、ステップカウントを取るのが面倒だった…と言いたい所ですが、 実機でのプログラミング中 ステップ数で泣かされる事が多かったというトラウマだったりします。 何万ステップでも好きなだけ長いソースを書いてやってください(笑。
但し、 1ページの最大行数は512行まで となっていますので、 何万ステップも書きたかったら 1行に何千コマンドも詰め込む必要がありますが…(^^;


4. PRINTスクロールについて
PB実機では、一画面に納まりきれない長さの文字列をPRINTで表示すると、 左端からの文字列が画面一杯に表示された後一度停止し、 その後ゆっくりとスクロールを開始します。
この時の表示ウェイトが どれくらい間を空けて良いのか判断付かなかったので、 INIファイルの中でウェイトの値を自由に設定出来るようになっています。

WAITPRINTSC_INI 文字列が画面一杯に表示された時の初期ウェイト[ms]。(DEF:64)
WAITPRINTSC 文字列スクロールウェイト[ms]。(DEF:24)

テキストエディタで "PB-100.INI" を開いて、好みの値に調整してください。

5. 液晶のカラー
INIファイルの中で液晶のカラーを設定出来るようになっています。

PAL_ON 表示画素の色
PAL_OFF 非表示画素の色
PAL_BG 背景の色

パレット値は一六進数で 0xRRGGBB の形式で書き込みます。
テキストエディタで "PB-100.INI" を開いて、好みの色に調整して下さい。


例

←こんな感じとか…
例

←こうとか…
例

←コレとか…(笑

パレットをデフォルトの色に戻したかったら、INIファイルから "PAL_ON","PAL_OFF","PAL_BG" の項目を削除してください。 次回起動時に元に戻ります。


6. 取り扱い数値範囲

浮動小数点の丸め誤差問題が表面化したので、数値の比較演算は固定小数点で行うようになりました。 浮動小数点問題とは具体的にこのような現象の事です。

10 A=8.2:B=5500
20 C=A*B:D=INT(C
30 IF C!=D ;PRINT "Error"

PB-SIM ver 008 以前のバージョンで、上記のリストを実行すると見事に "Error" に引っ掛かります。
手動で計算すると、 "C =8.2*5500 =45100"  となり、ここからINT命令で小数を除去しても、 "D = INT(C) = INT(45100) = 45100" で C と D はイコールになるハズですが、実際には異なる数値であると判断されてしまいます。

簡単に理由を書くと、小数点計算などで使用される数値演算プロセッサ(FPU) のレジスタ(内部変数)と CPU レジスタのビット長(≒有効数値の範囲) が異なるため、FPU から CPU に計算結果が返されて来たとき、FPU と CPU のビット長の差分が誤差となって CPU のレジスタに収納されてしまう現象です。

これを避けるためには、一旦、比較の為の数値を全て FPU から CPU に引っ張り出して変数の長さを合わせ、両方同じ条件で比較判定させるしかないのですが、生憎 CPU のレジスタは整数のみの扱いとなっているので、そのまま代入を行ったのでは整数部分しか計算結果を取り込めません。そのため前準備として FPU の小数部分が整数になるように桁上げの掛け算を行ってから代入処理をします。

例)
数値演算プロセッサ内での変数が以下の状態だとすると、
FPU = 123.456789
そのまま代入すると小数が消え去って、
FPU → CPU =123 →×
なので、FPUの小数桁分だけ底上げして、
FPU *1000000 → CPU =123456789 → ○
で、FPUのレジスタにあった数値情報は全てCPU側に取り込む事が出来ます。 そして、この数値を 1000000 で除算した値が正式な値になります。

上記例の様に、小数が含まれた数値を整数に直してから取り込むわけですが、実際問題、FPU内にある数値は "123456789.1" だったり、"123.123456789" だったり、有効小数桁数が幾つなのか分からないので、必要な小数値の最大桁数を決めて底上げする事になります(これが固定小数点の処理)。
例えば、固定小数点の有効桁数を 5桁 に設定したら、FPUからは小数点5桁まで使用している数値を取り込む事が出来るようになります。
FPU = 123.456 → FPU * 100000 = 12345600 → CPU =12345600
ただし、FPU の変数が小数点 5桁以上は切捨て扱いになってしまいます。
FPU = 123.456789 → FPU * 100000 = 12345678.9 → CPU = 12345678 (0.9 が切り捨てられた)


この小数点をどこまで有効にするかという判断は、使用者が用途に合わせて設定出来るようになっています。
PB-SIM で独自に拡張した "SET G*" コマンドで指定された値が、固定小数点の有効桁数になります。
ただし、CPUのレジスタの大きさにも制限があるので、 整数部と小数部の桁数合わせて 18桁 までしか扱えません。 小数の有効桁数を大きくし過ぎてしまうと整数部分で扱える桁が下がってしまい、逆に整数の桁数を大きくしようとすると小数の桁数が減る事になりますので、 この辺はバランスを考えて決めて下さい。 PB-SIMのデフォルト状態では18桁を等分し、整数9桁:小数9桁となっています。 因みにこの有効桁数から桁あふれが起こると数値の符号がひっくり返ったりして滅茶苦茶な数値になりますので注意が必要です。(一応、整数の桁溢れを防ぐ為の最低限の保護措置は取っていますが、動かすリストの用途にあった設定を用いてください。)


以上、出来る限り砕いて説明してみましたが、既に浮動小数点問題の知識がある人以外にもこのパラメタの用途は理解してもらえたでしょうか? 個人的には整数9桁 というのは10億の数値までしか使えないので、整数を PB-100 の液晶サイズに合わせて、整数12桁:小数6桁 あたりが適当のような気がします。 ("SET G6" の状態。)

PB-100実機では SET 命令の設定内容は記憶されませんが、 PB-SIMの場合、数値の比較や演算で常に利用する事になるので、 アプリケーションを終了させてもこの値を記憶させるようになっています。 SET 内容を確認したいときは、設定画面を開いてください。 "-1" は未設定 (SET N) の状態と同じです。

自作のLISTを打ち込む際には、そのリスト内で扱われる数値の有効桁数を考慮し、リストの先頭で SET G 命令による桁数指定しておく方が無難かもしれません。


7. 拡張コマンド

PB-SIMには便宜上幾つかの拡張コマンドが用意してあります。
SET G 上で説明した通り、固定小数点比較を行うための桁数設定です。
BREAK ブレイク・ポイント。このコマンドが実行されるとトレースモードに突入します。 PRINT や IF などの引数の区切りにも挟み込む事が出来ます。

ex)
 PRINT CSR 0;"A=";BREAK VAL(A$);
 IF B=BREAK FRAC(.1*ATN(C;D=D+1
BEEPS 音階つきのBEEP音を発声させる事が出来ます。 BEEP命令の音階を調べる為にテスト実装しただけなのですが、 面白いのでそのまま残してあります。

USAGE: BEEPS [octave],[note],[wait]

・引数説明
[octave]:オクターブ(1∼8)

[note] :音階(-1∼11)。数字と音階の対応は以下の通り。
-101234567891011
R(休符)CC+DD+EFF+GG+AA+B

[wait] :長さ(5∼)。単位は[ms]。


BEEPS命令を使ったサンプル音楽LIST。
【 ラジオ体操導入 】
【 ラジオ体操第一イントロ 】
【 XEVIOUS BGM 】

BEEPWAIT 上記、BEEPS命令の再生時間が終わるまで、その場で待機します。

ex)
 20 BEEPS 4,0,800:BEEPWAIT
 30 BEEPS 4,2,400:BEEPWAIT
GLOAD GLOAD "filename" でキャラクターグラフィックを変更します。
グラフィックファイルの読込対象パスは、現在ロードされている BASIC-LIST と同位置となります。 BASIC-LIST がロードされていない場合、"PB-Sim.exe" のカレントディレクトリが読込対象となります。

キャラクターグラフィックのテンプレートは文字キャラクターが並んだBMP形式のファイルです (下は縮小表示)。

テンプレート画像には未使用のキャラクターが含まれていたり、トランプマークはPB-100用とPB-110用の二通りが存在します。 グラフィックをロードした後、どの絵がどのキャラクターに当てはまるのかキャラクターの表示を確認しながらプログラムを作成してください。
[ DOWNLOAD :PB-SIMキャラクターテンプレートBITMAP ]
グラフィックを書き換えたい文字をピクセルエディタなどで書き換えて使用してください。 512x480、256色のみ対応で、サイズや色数を変えてしまうと非対応になってしまうので注意が必要です。


文字キャラクターの表示矩形は左の赤枠の範囲となっています。 文字と文字の間の横の空白部分も1キャラクターとして転送されます。 サイズは 32x42 。


ex)
例えば下のゲーム画面にグラフィック変更を適応させ…


この様な感じに変化させることも可能。


(グラフィック使用サンプル:Power-Bomb-USAさん作『七月の悪夢』より)

この機能は単にPB用ソフトに絵を付けられると考えるより、 PBのソフトはあくまでPB用として基本キャラクターを生かした想像力をくすぐるような作りを目指して、グラフィックを使用する場合はそれ相応に多彩な絵が使える事を生かしたソフトを目指すといった感じで、自分が作りたいモノによって使い分け出来れば良いのではないかと思います。


当然の事ですが、拡張コマンドをそのまま実機に入力してしまうとエラーが出ますので、実機に入力する際には除外する必要があります。


▲【目次】に戻る




【 課題 】
・メモリバンク機能の実装。


【 謝辞 】
・Takeyaさん には解析フェーズのアルゴリズムミスを指摘していただきました。
・鶴味さん にはPB-100実機と差違の有る文字キャラクター一覧を頂いた上、何とPB-100本体まで譲っていただきました。
・しぶきさんには動作テストやPocketBASICコマンドのリファレンス提供、Sigmarion3 での動作デバッグまでお任せしてしまいました(^^;
・渡辺さん、PBロッキーさん には数々のペンディング情報や疑問点のテスト結果を提供していただきました。

その他、不具合を報告していただいた皆様、御協力有り難う御座いました…m(_ _)m


【 ファイルのダウンロード 】
ダウンロード
ファイル
説明
アイコン
PocketBASIC Simulator
ver 0.12
(2007/04/30)
"pbs012.zip"
[94.9 KB]
わびさびWORLD@PB-100
ん〜、PB-100、PB-110 系のリストなら、 動くかも?…ちょっと自信ありませんが… (;゚∀゚)ゞ手屁
 そもそも、 実機が無いのにシミュレーター製作するのは かなり無理がありましたね。  マニュアルから読みとれる情報だけで作り込んでも、 実際のソースなんてマトモに動きやしない…  でも、インタープリターやコンパイラの良い勉強になりました。

アイコン
PocketBASIC Simulator MINI
ver 0.11a
(2007/01/07)
"pbsm011a.zip"
[80.0 KB]
PB-Sim の MINI_SIZE 版。
PB-SIM MINI

外部グラフィック使用のGLOAD命令は、フルサイズ版と同じ画像を共用します。縮小表示になる為に多少絵が潰れますけど…。

アイコン
PocketBASIC SimulatorCE
ver 0.10a
(2005/10/01)
"pbs010asig3.zip"
WindowsCE用バイナリは下記サイトに移管されました。
Banner
【ポケットコンピューティング】


リンク先に移動してからダウンロードして下さいね。
アイコン
HELP
(2005/10/01)
"pbs010ahelp.zip"
[147 KB]
本ページの内容をHTMLヘルプに固めたものです。

履歴:

2007/04/22 Ver0.12
   ・PRINTの無限出力を行うと表示が固まる不具合を修正。
2007/02/13 Ver0.12
   ・メッセージを外部ファイルに持たせるように変更。
2007/01/07 Ver0.11a
   ・DATAの不具合を修正。
   ・PRINTの不具合を修正。
2006/11/07 Ver0.11
  でも、本当の更新日は 2005/10/20。一年熟成…(;゚Д゚)
   ・マウスクリックによる角度モード変更(DEG,RAD,GRA)に対応。
   ・ソフトウェアキーボード実装。
   ・その他、不具合修正。
2005/10/01 Ver0.10a
   ・BEEPボリューム実装。
   ・WindowsCE版バイナリの削除。
   ・他、Win版とWinCE版ソースの互換調整。
2005/09/20 Ver0.10
   ・キャラクターグラフィック変更に対応。
   ・シミュレータ起動時のモード選択(BASIC or COMMAND-LINE)を実装。
   ・BEEP命令に100 ms ウェイト追加。
   ・HTML-HELP Ver0.10.
2004/10/22 Ver0.09a1
   ・REM内で全角文字が使われても問題ないよう修正。
   ・本体BEEPの無効化。
2004/09/15 Ver0.09a
   ・STR$ の不具合修正。
2004/09/13 Ver0.09
   ・PocketBASIC ver3.0 まで実装。
   ・WinCE-ARMV4I,Sigmarion3 Release.
   ・HTML-HELP Ver0.09.
2004/08/10 HTML-HELP Ver0.08。
2004/08/10 Ver0.08b
   ・PRINTの不具合修正。
   ・RUN命令で行番号指定出来るように修正。


(以降、"PB-SIMhistory.txt" の履歴を参照。)





▲ ページ頭 へ▲

■前のページに戻る■


CONTENTS
Top Profile Vanity Develop P6Dev JavaScript (゚Д゚) BBS Link



This page was confirmed by IE6.
Copyright(c) 2001-2007 Bernie Mask. All right reserved.
Banner
Banner (200x40)