[今更誰得] カシオPB-100のプログラムをPCとやり取りしてマルチプラットフォーム環境を実現する(その1)

前のエントリで、カシオポケコン用の40桁サーマルプリンタ「FP-40」をUSB-AC(急速充電用)駆動に改造して、プログラム印字環境もFP-12SとFP-40である程度整ったなあと思って一段落・・・と言いたいところなのですが、現状、PB-100系のポケコンとFP-40をつなぐインターフェース(SB-42)を持っていないというか当時入手できなかったため、FP-40からPB-100のプログラムを印字することが出来ません。

せっかく40桁のプリンタを持っているのに、どうにかならないものかと思っていました。

VX-4(FX-870P)はカセットテープへのプログラムロード・セーブに対応しているので、もしかしてPB-100のプログラムをそのままロードできたりしないかな・・・と思ったのですが、中の人は残念ながらVX-4で使えるカセットインターフェースを持っていません。FP-40はカセットインターフェース自体は内蔵しているのですが、このカセットインターフェースはPB-100/PB-700でしか使えない仕様なんだそうで・・・

VX-4だとFA-6というインターフェースボックスを使えばカセットインターフェースを使えるようなのですが、これまた、某オークションくらいでしか手に入らず、しかも、PB-100のセーブデータと互換性があるという記述もネットには見当たらず、徒労に終わるリスクを考えると手は出しにくく・・・

と、モヤモヤと逡巡していると、また別のサイトにて、カシオポケコンの上位機種の一部(FX-860系)には、なんとPB-100互換モードなるものがあり(正式にはDEFMモードというらしいです。変数の割当方法をPB-100系に合わせる?)、さらに、PB-100フォーマットでセーブしたプログラムをロードできる「PBLOAD」というコマンドがあることを発見しました。

ということは、FX-860系のポケコンを入手すれば、

  1. PB-100系のプログラムをデータレコーダにセーブ
  2. FX-860系本体で、PBLOADを使ってPB-100プログラムをロード
  3. FX-860系本体をFP-40に接続
  4. PB-100のプログラムリストをプリントアウトできる!
ということになるのです。
おおー!とテンションが上がりかけましたが、そうすると、FA-6ばかりかFX-860系の本体までも入手しなくてはならず、必要経費もだいぶ上がってしまいます。FX-860系本体はオークションサイトではおおむね10,000円以上で取引されており、FA-6と合わせるとさらに・・・ということになります。せめてVX-4がPBLOADをサポートしてくれていれば良いものを・・・なぜそこは切り捨ててしまったのかw 過去のソフト資産重要でしょうにw

とはいえ、もし仮にその環境が整ったとしても、おそらくはPB-100系の特殊文字(ハートとかオメガとかの記号類)はうまく読まれないでしょうから、そのまま印字することは難しいんだろうなあ・・・などと思うと、やっぱり踏み切れないところがあります。

で、さらに「PBLOAD」でネットをぼんやりと検索していたら、驚くべきページを発見してしまいました・・・!

全部英語のページなので読むのが大変ですが(ちなみに作者のMarcus氏はドイツ人らしい、でも英語で文章書けるのすごい)、かいつまんで端的に言いますと

  1. PB-100からSAVEコマンドで出力した音声を録音したWAVファイルをPC上でソースコードに変換できる
  2. PC上で作成したソースコードをPB-100でLOADできるWAVファイルに変換できる
という、PB-100マニアには夢のようなツールなのです。そう、つまりこれを使えば、PC上でPB実機で動くプログラムを作れる!しかもデバッグ環境はPCやAndroidのPB-100エミュレータも使える!

つまり、1つのソースコードで、
  • 実機
  • Windows(エミュレータ)
  • Android(エミュレータ)
のマルチプラットフォーム対応アプリケーションが作れてしまうということなのですw
これ、スゴくないですか?

しかも特別なオプションは不要!FA-3/FA-5だけあればOKなんです!

ということで、早速MarcusさんのCASutilをダウンロードして実験開始です。
まずは、実機のプログラムをPCに取り込んでみます。
手順は以下のとおりです。
  1. 実機にFA-3を接続し、PCのマイク端子にFA-3のRECジャック(白)を挿します
  2. PCの録音ソフトで録音を開始します
  3. 実機でSAVEコマンドを実行します
  4. SAVEコマンドが終了したら録音を停止し、WAVファイルとして保存します
  5. CASutilのwav2wavコマンドで「録音したWAVファイル」を「解析可能なWAVファイル」に変換します
  6. CASutilのlist730コマンドで「解析可能なWAVファイル」からプログラムのソースコードを表示します
PCの録音ソフトは、Marcusさんもご推薦のAudacityを使ってみましたが、無料だし、手順が簡単かつ録音結果を直接WAVファイルにエクスポートできるのでおすすめです。



今回は、手始めに前のエントリで中の人が書いたしょーもない、ボルトワットアンペア変換プログラムをwva_orig.wavという名前で録音し保存しました。

そして、CASIOutilのコマンドです。wav2wavコマンドの実行はこんな感じです。wva_orig.wavが元の録音したWAVファイル、wva.wavが変換後のWAVファイル名になります。


上手く変換できているようなので、list730コマンドでソースコードを表示してみます。
-wオプションというのはWAVファイルからの取り込みであることを示すオプションです。


できました!!ちなみにProgram: "WVA"というのはセーブ時につけたプログラム名です。
実機からSAVE "WVA"のようにして指定した名称ですね。

う~ん、完璧じゃないですかぁ・・・

SAVE ALLしたデータには対応していないらしいのですが、でもP0~P9のエリアごとのプログラムが読めるだけでも中の人には十分ですw

もちろん、PB-100系特有の特殊文字はそのままASCII文字(半角英数字)には変換できないので、エスケープシーケンスが使われます。日本人の感覚なら、Unicodeでほとんどの記号は変換できるような気がしてしまいますが、欧米圏の方々にはASCII文字以外はやはり敷居が高いのかもしれません。

↓のリストは、とある特殊記号をたくさん表示に使うプログラムを変換した結果の抜粋です。


CASutilでの特殊文字のエスケープシーケンスについて、PB-100で使われるものだけ抜粋してまとめてみました。



まあ、はっきり言ってこれだけでもかなり感激なんですが・・・マルチプラットフォームを目指すためには、CASutilのソースコードをPB-Sim(Windows用PB-100シミュレータ)やPokecom GO(Android用PB-100エミュレータ)のソースコードに相互変換できなければいけません。

ということで、各プラットフォームの相互変換表を作ってみましたw
あとは、これを自動で変換する何かを誰かが作るだけですねw





まとめてから気づいたのですが、PB-SimとPokecom GOのエスケープシーケンスは同じになっているんですね。おそらく、後発のPokecom GOの作者さん(デジホリさん)が意図的に互換性のためにPB-Simに合わせてくださった模様です。

そして、デジホリさんはCASutilの存在も認識していて、そのソースも改良されてさらにエスケープシーケンスをPB-Sim仕様に合わせるカスタマイズまでされていました。さすが・・・
※ただ、ちゃんとしたプログラマでない中の人にはCソースのコンパイルはできなくてですね・・・

pb100 - digihori ページ!

と、いうことで、その1はここまで。その2ではPCで書いたソースを実機で動かすまでをやってみて、気が向いたらエスケープシーケンスの相互変換もやってみるかも?


mobileFF's blog: [今更誰得] カシオPB-100のプログラムをPCとやり取りしてマルチプラットフォーム環境を実現する(その2)

に続きます。

        

コメント

  1. こんにちは。
    古い記事へのコメントで恐縮ですが、、
    Pokecom GO(PB-SIM)形式のBASICソースファイルをwaveファイルに変換するスクリプトをperlで書いています。
    よろしかったらどうぞ。

    https://digihori.jimdofree.com/index/cassette-io/

    返信削除
    返信
    1. デジホリさん>
      わざわざコメントいただきありがとうございます!
      Pokecom GO楽しく使わせていただいてます。
      ご紹介のスクリプト、おそらく記事を書いた当時も拝見していたかと存じますが、perlの実行の仕方が自信が無くて、触れられずにいたような記憶ですw お恥ずかしいです・・・。

      削除
    2. perlは動作環境を作ってしまえばいいだけなのでそんなに敷居は高くないですよ。
      Windowsな環境であればActive Perlあたりをインストールすればいいだけだと思います。
      ちなみに、mobileFFさんのおっしゃっているマルチな環境ですが、私も同じようなことを考えていました。
      Pokecom GO と実機でどうやってソースコードをやり取りするのか。
      で、そのときにBASICのソースをwaveに変換するスクリプトをperlで書いたのですが、Pokecom GOにもインプリしていまして、
      BASICソース -> Pokecom GO -> wave出力(スマホと実機を接続) -> 実機
      という感じの連携ができるようになっています。これはこれで楽しいですよ。
      https://twitter.com/yo6987/status/992954457989070848

      削除
    3. デジホリさん>
      wave変換機能、Pokecom GOにもすでに実装されていたんですね。知らなかった・・・。このへん、素人なのでわからない部分ですが、waveをそのままPokecom GOに取り込むというのは、やっぱり難しいものですか?そうすればAndroid←→実機が直接行き来できるようになるので、これまた夢が広がるなあ・・・などと、勝手なことを申しておりますがw

      削除
    4. waveファイルのデコード機能をPokecom GOにインプリすることは可能だと思いまが、
      実機 ->Pokecom GO の場合は結局一旦ファイルに落とす必要があるため、Pokecom GO側にwaveファイルのデコード機能をインプリする必要性をあまり感じていませんでした。
      また、実機で開発することは基本ないので、waveファイルのデコード機能はPC上にあれば十分というのもあります。
      PC上でソースコード作成->エミュレータでデバック->(wave変換)->実機で確認
      基本はこのユースケースですよね。
      唯一あるのが、昔テープなどに保存したデータの復元でしょうか。でもこのパターンはPCでwaveファイルにキャプチャしてデコードすればテキスト化できるので特に問題ないです。

      削除
    5. とはいうものの、waveファイルを読み込める機能があると、ちょっと面白いかもしれませんね。インプリを検討してみます。
      色々ご意見ありがとうございました。

      削除
    6. デジホリさん>
      お返事遅くなりました。確かにおっしゃるとおりですw
      大変失礼いたしました~
      今後ともどうぞよろしくお願いいたします!

      削除

コメントを投稿