私の中ではMAXお気に入りポケコンとして君臨してるSHARP PC-1600K!
機能や性能的にはPC-G850VSやPC-E650の方が上だったりするんだろうけれども、見た目大きさ重さなども含めてのお気に入り度合いは群を抜いている。
まだこのブログを始めるよりも前、ちょうど1年前の2020年2月頃にPC-1600Kの開発環境を整えた。
当時はSDCC(Z80 Cコンパイラ)を中心に環境を組み立てたけど、アセンブラとの連携のやりにくさから主にアセンブラでの開発っぽくなっていた。とりあえず画面にグラフィックスを表示して終了となった(まぁ私のいつものパターンだw)
PC-1600Kで作った適当なるプログラム。オールマシン語(笑)です。とりあえずスクロールさせてみた!このくらいの速度で動くのね…ふむふむ。
— PocketGriffon (@GriffonPocket) 2020年2月22日
RS-232C繋げたら便利過ぎてFDDを使わなくなってしまった。9600bpsフルスピードで転送出来るのはさすが!(^ ^) pic.twitter.com/wrzbJIQXJR
今回、PC-8300用にLSIC80の環境を整えた流れで、もう一度PC-1600KでもLSIC80を中心とした環境を整えてみようという気になった。ビルドする環境自体はPC-8300と全く同じだが、本体へプログラムを送り込む方法だけが異なる。
PC-1600K自体、マシン語プログラムをBSAVE、BLOADする事が出来る。
前回の作業ドキュメントを漁ってみたが、どうも当時はBLOADの存在に気が付いていなかったようだ。BASICでマシン語データを送り込む方法だけが試されていた。
せっかくある機能を使えてないのはもったいないので、頑張って解析してみる事にした!
BASICでBLOADするのは?
何にしてもBASICからBLOAD出来るのが一番効率良いに決まってる。でもそのためには、PC-1600Kへ送り込む「データのフォーマット情報」がどうしても必要だ。
本体のマニュアルを見ても、残念ながらそういった情報は書かれていない。
PC-1600Kデータブックに、テープへ記録するフォーマットについて書かれていたが、RS-232Cでも同じとは限らない。むしろ同じであるハズがない。
BSAVEのパラメータ(開始アドレス、サイズ、実行アドレス等)から想像出来るヘッダを付けて、いくつかのロード実験を繰り返したが、成功にもエラーにもならずPC-1600Kは沈黙状態(T-T) こうなるとリセットするしか止める方法が無い。
うーん、やっぱり解析するのは簡単じゃ無いなぁ…
BASICROMを解析しようとも思ったが、これまた壮大な話になってしまう。
フォーマットを調べるのは簡単じゃないかもな…。
仕方なく別のアプローチを検討する事となった。
バイナリロードプログラムを移植する?
HC-88で開発をしたバイナリロードプログラム。先日このプログラムをPC-8300へ移植して、ロード→実行の時間が劇的に改善された。
このプログラムをPC-1600Kへ移植する事も、比較的簡単と思っていた。
まずはこちらを実用化するべきかも知れない…と思い、移植に必要な作業を開始した。
このバイナリロードプログラム自体はオールアセンブラで書かれているため、移植そのものには大した手間は掛からない。シーケンスはそのまま利用出来るので、RS-232Cを使う部分だけPC-1600K用に書き替えてやれば良いはずだ。
バッファサイズの変更、通信パラメータの設定、通信デバイスの選択等、HC-88やPC-8300には無かった初期化が数多く存在した。特にバッファサイズを変更出来るのはありがたい!HC-88などは明らかに通信バッファが足りなくて速度が出ないって感じだったもの(T-T)
通信速度を38400bpsにするための推奨バッファサイズは1100バイト以上らしい。そんな速度で通信出来たらマジで嬉しい!そんな事を考えながら準備を進めた。
そしたら……なんとドハマりしたのは別のところだった! 文字列表示関数でコントロールコードを解釈してくれないみたいなのだ!&12(画面クリア)、&OD&0A(改行)などがことごとく処理されない(T-T)
何かメモリ中にスイッチがあるのかも知れないと思い、あちゃこちゃ探してみたがどうにも見つからない。試しにBASICで「PRINT CHR$(12)」とやってみたが画面クリアがされない!え??もしかしてそういう仕様なの??
仕方ないのでいくつかのコントロールコードを解釈する事の出来る1文字表示処理を自前で書くことにした。きっと同じような処理がROMに含まれてるんだろうな…と思いつつも、今は動かす事を急ぎたい!
突破口!
コントロールコードを含んだ文字列が問題なく表示出来るようになった頃、少し落ち着いて資料を見返してみる事にした。ずっと他の機種に取り組んでいたため、PC-1600Kデータブックを手に入れてからも熟読出来ていなかったのだ。この本は国会図書館で複写サービスを受けていた事もあり、ある程度の中身は読めている自覚があった。
そうか…BLOADのフォーマットばかり気にしていたけど、考えてみればRS-232Cに対してBSAVEしてみたらデータが出力されるのではないか…と気が付いた。もちろん当初テストもしていたが、PCG-LinkMacにはなんの情報も出力されなかったため、後回しにしていたのだw
Macのコマンドラインで以下を打ち込む(XXX...の部分は通信アダプタによって異なる)
cat /dev/cu.usbserial-XXXXXXX > m.bin
PC-1600K本体で以下を打ち込む
BSAVE "COM1:",#0,&C000,&C00F
Mac側は自動停止しないのでCTRL-Cで中断。
これでPC-1600Kから送られてきたバイナリデータがm.binとしてファイルに入るはずだ。
そうして出来たのが↓これ。
これを見てピンときた!
なんだ、これはディスクへBSAVEした時のデータと同じじゃ無いか!と(^^;;
実行アドレスのところにそれっぽいアドレスを入れてしまうと、BLOADした後に「実行されて」しまう。実行されて困る場合には、実行アドレスを&FFFFにしておけば良いようだ。
それじゃあ…という事で、簡単なHello Worldを作成し、出来上がった(PC-1600Kでの)実行ファイルに、ヘッダーをつけてやるツールを作成した。
完璧!!!(^-^)/
BLOADした後、そのまま実行されて「Hello World!」が表示された!
出来上がった開発環境
今回もLSIC80を中心に環境を構築したため、Macだけでは完結していない。
編集とPC-1600Kへの転送はMacで行うが、ビルド自体はWindowsで行っている。普段からWindowsを使っている方であれば、Windowsマシン1台で完結する開発環境が作れるだろう。やっぱりWindowsへ移行した方がいいのかなぁ…なんて事も頭によぎるけれども、使い慣れるまでにストレス過多になりそうなのでどうしても決心が付かない(T-T)
まだ通信速度のテストとか一切していないので、9600、19200、38400と試してみたい!
少し大きめな何か作りたいなー(といつも言いつつ何も出来ない…)
せっかくなので何かやります!
PC-1600K、久しぶりに触るので楽しみです!(^-^)
ではまた次回!(^-^)ノ