PB-100系USBインターフェスのEEPROMをもっと使いたい。
なんかないかな?と考えて、かの「ZORK」(的な)ゲームをのっけてみました。
PC側のターミナルにメッセージ表示させるようにしたら、もっとZORKっぽい。
雰囲気ZORKになりました。素敵♡
ZORKっぽいゲームはこんな感じ
いまどきはZORKもWEBで遊べる。すげー

Pythonで書かれた雰囲気ZORKがGitHubにありました。
ZORKの超超サブセット。なのでプログラムサイズも手ごろ。
この雰囲気ZORKをPBに移植。
とはいえ、PBにオンメモリは無理です。今回使ったのFX-700P 1568STEPだし。
複数のBASICファイルに分割してEEPROMに格納します。
それを適宜LOADすることしました。
BASICファイルは5本。
PBはLOADがBASIC上に書けないので、LOADが必要になると
「To continue, enter the LOAD ‘ファイル名’」
を表示させて、人力でLOADを入力する仕様です。
移動コマンド(GO)ですると、だいたい要LOAD。
EEPROMからのLOADは結構時間がかかります。
1400STEPだとLOADに1分弱。
EEPROMアクセス中は緑のLEDが点灯する。省電力のうっすい光・・・

雰囲気ZORKをPBで動かして、メッセージ表示をMODE7で印刷すると・・・
PC側のTeraTermにテキストが表示されて、こんな感じになります。
80年代のPCっぽくて雰囲気あるね!

最初はLCD表示だったけど・・・
最初はLCD表示だったんですが、雰囲気いまいち。
オープニング。

メッセージは表示しきれないからスクロール。

コマンド入力待ち。

コマンドを入力して。

コマンドのレスポンスを表示。

ちまちました表示で、ちょっとな~
ひらめいた!印刷結果が表示できるんじゃね
ひらめいた!
本家の通信インターフェスのプリンタ機能に”シリアルプリンタ”があったような・・・
もしかして、PBで印刷するとPCのターミナルに表示されるのでは?
そしたら複数行見れるようになるはず!
通信インターフェスから削除したプリンタ機能を復活。
予想以上に、いい感じじゃないっすか~
動画だとこんなです。
遅いので穏やかな気持ちで見てください。
1分くらい間が空いてます。変化ないのでシークお勧め。
この間は、EEPROMから次のプログラム読み込んでる時間です。
あと、コマンド入力とメッセージの間隔に間があります。
入力の手際が悪い(;^ω^)のと、入力判定に時間かかってます。
これPBの出力なんですよ。すごくないですか?
ちゃんと表示出たときの感激!最の高!!
通信インターフェースの改造
USB通信インターフェースの改造についてちょっと。
ハード
簡易版インターフェースEEPROMのっけ版を改造しました。
ビフォー

アフター

PBとの接続を追加してます。
マイコンの空きポートが無くなり、EEPROM↔シリアル切換スイッチに困りました。
結局PD6端子(EEPROM電源)にスイッチつけました。
5VでEEPROM/GNDでシリアルの切換判定するようにして解決。
ソフト
通信インタフェース本家のソフト「TAPE25D」をベース。
そこに「TAPE27H」のシリアル通信ルーチン(mass storage handle SERIAL)関連をコピペ。
ラベルと汎用レジスタのだぶりを修正します。
タイマ類やペリフェラルの設定はそのままでも動きます。
が、気になるようなら、UBRRの設定とタイマ類(wait_XXXルーチン)を調整。
調整と言っても、数値±1程度なので、外観だと動きとして全然わからんです。
main_loopルーチンで、EEPROM or シリアルの判定を追加します。
PD6端子のレベルをチェックして切り換えます。
今デバウンス除去していないけど、スイッチによっては必要かも。
ちなみに、LOAD/SAVEとプリンタ出力は排他されてます。
シリアルでもLOAD/SAVEとプリンタ出力の切り換えは、気にしなくても良さげ。
【main_looのサンプル】
main_loop: sbis PIND,EEPROM ;SERIAL or NVM ? PD6のレベルで切り換え
rjmp tape_seri
sbrc Flags,TAPE_ACTIVE ;tape access request? EEPROM LOAD/SAVEモード
rcall tape
sbrc Flags,PRN_REQUEST ;printer access request? プリンタ出力
rcall print
sbis PINB,KEY ;key pressed ?
rcall rewind
rjmp main_loop
tape_seri: sbrc Flags,TAPE_ACTIVE ;tape access request? シリアル LOAD/SAVEモード
rcall s_tape
sbrc Flags,PRN_REQUEST ;printer access request? プリンタ出力
rcall print
rjmp main_loop
改造後の動作はこんな感じ
シリアルに切り替えて、LOADA→LIST→SAVEAするとこんな感じ。
マウスカーソルちらちらは、LOADするファイルをTeraTermにドロップしているところ。
ちっさくて見辛い・・・
ポケコンとして本末転倒だけど・・・
ポケコン使ってPCに出力するって、ポケコンの意味ないんじゃ・・・と思わなくもないですがw
PBで、いろんな画面が出せるって胸熱すぎる!

コメント