PB-100シミュレータの開発をしています。

ってか、エミュレータではないです。広義ではエミュレータですけど。

まだまだPB-100愛好家は大勢いると思いますので、それなりに需要があると思っています(^^)

ソースコードも公開しています。

 

<コンテンツ>

Download

スクリーンキャプチャ

仕様

実機用wavファイルの作成について

 


Download

pokecom2-1.03.04.apk   2018/07/08

SETコマンド対応

RESTOREの引数なし時の不具合修正

数値演算のスケールを99桁まで有効にした

pokecom2-1.03.01.apk   2018/07/01

SDKバージョンを23から26に変更した

ファイルロード時のエスケープ文字変換の不具合を修正した

READ-DATAのデータ個数の最大を64から512に変更した

pokecom2-1.02.03.apk   2018/06/23

内部の演算をdouble型ではなくBigDecimalで処理するようにした。

※これで門真なむさんのデジタルインベーダー がちゃんと動くはず。

pokecom2-1.02.02.apk   2018/06/17

LEN / VALが正しく動いていなかったのを修正した

aboutダイアログで表示する内容を更新した

pokecom2-1.02.01.apk   2018/06/17

PB-110系で追加された命令への対応

ON GOTO / ON GOSUB

READ DATA RESTORE

STR$

BEEP

MID$ (MIDと同じ)

KEY$ (KEYと同じ)

LET (何もしない)

単純な四則演算はBigDecimalを使うようにした(double型の誤差が出ないように)

PRINT のパラメータで":"を使うとステートメントの区切りと判断してしまう不具合を修正した

pokecom2-1.01.04.apk   2018/06/09

PRINTの引数で変数にマイナスをつけた単項演算表現ができない不具合を修正した。

FOR-NEXTループを途中で抜けたときの挙動がおかしい不具合を修正した。

文字列変数の大小比較ができない不具合を修正した。

ファイルload時に行番号で始まらない行を読み捨てるようにした。

※門真なむさん作のデジタルインベーダーのおかげで上記の不具合を見つけることができました。どうもありがとうございます。

pokecom2-1.01.03.apk   2018/05/25

プログラムモードで存在しない行番号を指定して[EXE]するとセグ落ちする不具合を修正した。

pokecom2-1.01.02.apk   2018/05/15

バンク切り替えができない不具合を修正した。

pokecom2-1.01.01.apk   2018/05/06

PRINTのパラメータをカンマで区切ったときの挙動がおかしい不具合を修正した。

pokecom2-1.01.00.apk   2018/05/06

実機ロード用(LOAD A用)のサウンドデータを出力する機能を追加した。"SAVE"コマンド実行でLOAD A用のサウンドデータをアナログ出力します。(まだテスト中、、、端末によって出力レベルが足りないものがある感じ。。)

PRINT CSRn;A で数値データを表示するときの位置がずれていた不具合を修正した。

pokecom2-1.00.07.apk   2018/04/21

コマンドラインでRUN [行番号]ができるようにした。

特定の解像度でレイアウトが崩れる不具合を修正した。

pokecom2-1.00.06.apk   2018/03/21

プログラム実行時のINPUT処理で整数値しか入力できない不具合を修正した。

本当は変数が使えたり計算式でも入力できないといけないが、とりあえず数値のみとする。

pokecom2-1.00.05.apk   2018/03/01

EXT-SHIFT I/O/Pのときの文字が文字コード1つずれていた不具合を修正した。

以前文字コードを振り直したときにデグレした。。

pokekom2-1.00.04.apk   2018/02/11

べき乗計算が整数値しかできない不具合の対応

コマンド入力時に閉じカッコが省略できない不具合の対応

pokecom2-1.00.03.apk   2018/02/01

言語設定をドイツにすると、小数点がドットではなくカンマになってしまい、その後の計算ができない不具合を修正した。

(ドイツの方から不具合レポートをいただきました。どうもありがとうございます。)

恥ずかしながら、ドイツやフランスなどでは小数点をカンマで表現するということを知りませんでした。またJavaのString.formatメソッドは、言語の設定によって、自動でドットがカンマに切り替わるようです。これも知らなかった。。

ということで、String.format(Locale.US, "%g", x) という感じで、USフォーマット固定になるようにして対応しました。

pokecom2-1.00.02.apk   2018/01/21

[不具合対応]

DEFM0のときにZ(26)にアクセスすると落ちる

CLEAR/LIST命令とパラメータ間のスペースが省略できない

プログラム入力時の行番号と本文間のスペースが省略できない

RUNモードで計算結果が浮動小数点になる時の表示がおかしい

RUNモードで'E'(Exponent)入力後の'-'でE+/E-が切り替わらない

関数の閉じ括弧を省略した後に比較演算子がきた場合にエラーになる

[機能追加]

上下キーのコマンドヒストリー機能

STOPコマンド

pokecom2-1.00.01.apk   2018/01/13

RUNモードで配列変数の参照ができない不具合を修正した。

pokecom2-1.00.00.apk   2018/01/08 16:55

正式リリース(のつもり)

このバージョンからPlayStoreで公開しています。


スクリーンキャプチャ

よなぷーさん作の「PB-100 DEMO」を動かしてみたよ。

よなぷーさん作の「DOMINO」を動かしてみたよ。


仕様

 

・RUNモードでのコマンド入出力、プログラムの実行

・WRTモードでのプログラム入力

・内部ストレージに対するファイルロード/セーブ

・特殊文字に関してはファイル入出力時にエスケープ文字に変換します。この仕様はPB-SIMに準拠してます。

・マニュアル計算後に[←]で直前のコマンドが表示されます。

・ステップ数計算は正確ではありません。実機とは微妙に誤差があります。
・BASICプログラムのトレース実行はできません。また中断/再開もできません。終了のみとなります。

・内部の計算ロジックはdouble型を使っているため、小数を使った演算は誤差が出ることがあります。

<対応しているBASIC命令>
PRINT
INPUT
GOTO
GOSUB-RETURN
FOR-TO-STEP-NEXT
IF-THEN/IF-;
VAC
CLEAR/CLEAR A
RUN
LIST
END
KEY
CSR
DEFM
MID
VAL
SIN/COS/TAN/ASN/ACS/ATN
LOG/LN/EXP/SQR
ABS
SGN
INT
FRAC
RND
RAN#
STOP
SAVE

--- 1.02.01以降で追加した命令 ---
ON-GOTO
ON-GOSUB
READ-DATA-RESTORE
STR$
KEY$ (KEYと同じ)
MID$ (MIDと同じ)
BEEP
LET (何もしない)

--- 1.03.04以降で追加した命令 ---
SET

<設定メニュー>
・cpu clock emulate
 実行時にウェイトを入れて、実機に近い動作を実現します。
・memory unit
 拡張メモリがあるかどうかの設定。残メモリの表示が変わるだけです。
・UI design
 PB-100 compatible にすると PB-100 っぽくなります。
 PB-100 custom にすると Fキーや↑↓キーが出てきます。
・viblation
 キー押下時に振動します。
・debug
 デバッグメッセージやソフトウェアキーのフレームを表示します。

<特殊記号について>
テキストファイルの入出力において、PBの特殊記号はエスケープ文字に変換します。
なお全角コードは読み捨てます。

\\ ¥
\LE(or <=) Less Equal
\NE(or <>) Not Equal
\GE(or >=) Greater Equal
\LA Left Arrow
\DA Down Arrow
\RA Right Arrow
\UA Up Arrow
\PI PI
\EX EXponent
\CI CIrcle
\SQ SQuare
\TR TRiangle
\CR CRoss
\DV DiVide
\DT DoT
\DG DeGree
\SP SPade
\HT HearT
\DI DIa
\CL CLover
\BX Box
\SG SiGma
\OM OMega
\MU MU

<その他>
命令とパラメータ間はスペースを入れなくても切り出しします。
(例)
PRINT CSR1;"ABC"
SINA
など

 


実機用wavファイルの作成について

 

PB-100 の実機でロードできる wav ファイルを出力するプログラムを perl で書いてみました。

 

また、色々調べてわかったことをこちらに整理しました。

 

pbsavea.pl version 0.3 (ファイル名が8文字を超えたときに正しくエンコードできない不具合を修正した)

 

<使い方>

usage:  perl pbsavea.pl <infile.bas> <outfile.wav> 

 

<入力ファイルのフォーマット>

[P0]

10 X=1

 

[P2]

100 A=1

110 PRINT A

 

というような感じで、、

PBの特殊文字はエスケープコードで表現します。(=PB-SIM仕様)

 

<wavファイルの仕様>

22,050Hz, 8bit, mono  ---> なので CASsette IO Utilities の list730 でデコードできません。。

 


CASsette IO Utilities の話

 

CASsette IO Utilities というのがあります。

※このツール、複数の機種に対応しています。この中でFX-730PというのがPB-100に相当します。

 

ただ、このツール、全てのプログラムデータをロード(LOAD A)するwavファイル作成に対応していません。

なので、所望のファイルを作成できるようにソースを書き換えてみました。

それから、特殊記号についてはPokecom GO仕様(PB-SIM仕様)に書き換えています。

 

これ

bas730.c (※2018/1/21 <> >= <=が変換されない不具合を修正した)

list730.c

 

この2つのファイルを差し替えてmakeすると、LOAD A 対応したwavファイルを作成できる bas730 / list730 が出来上がります。

 

使い方

basファイルからwavファイルを作成する場合→ bas730  -w  hoge.bas  hoge.wav

wavファイルからソースに戻す場合→ list730 -w hoge.wav

 

basファイルのフォーマット

---

[P0]

10 X=0

 

[P2]

100 PRINT X

 

というような感じ。

 

このツールのおかげで、実機へのソースコード転送が非常に楽になった。

でもCで書かれているので、当たり前だけど動作環境によって実行のバイナリファイルを使い分けないといけない。

perlとかで書き直せば、もっと使い勝手がよくなるのかもしれないけど。

 

いずれはPokecom GO2にインプリして、

webで見つけたソースコードをコピペしてPokecom GO2で動作確認

Pokecom GO2でwavファイルに書き出し、スマホから直接カセットI/Fを介して実機に転送

実機にて動作確認

みたいなことをやってみたいなぁ。