現在地

ポケコンパイラ


テーマ:

カテゴリー:

またまた懐かしいファイルが出てきました。

ファイル
30年以上前のもの、ポケコン用のコンパイラをハンド逆アセンブルして解析した資料です。バイナリで1.5kB程を全部手書きしていました。

掲載誌(『I/O』1984年12月号)もまだ持っていたので何箇所か比較してみましたが、それで間違いないようです。

対象機種のPC-1251は所有していませんでしたので、単に中身というか仕組みを知りたかっただけなのか、PC-1261への移植を企図していたのかもしれません。最終的に移植はしていませんが。

「日本児童図書出版協会」のファイルは中学のとき図書委員をやっていたのでその関係で貰ったものと思います。

ポケコンパイラ1251
全部で30ページありますが、とりあえず1枚目をスキャンしてみました。

数値はすべて16進数、行頭のアドレスは適当に省略されています。

いくつか例を挙げてみます。

   D 67 D0      CPIA D0 (IF)

アドレス$BB0Dからの2バイト$67,$D0はアキュムレータAと$D0の比較命令(ComPare Immediate with Aかな)、「(IF)」とあるのは$D0がBASICの「IF命令」の中間コードであることを表しています。

  1C 2C 04      JRP 04 *(BB21)

アドレス$BB1Cからの$2C,$04は前方への相対分岐命令(Jump Relative Plusかな)、BB21は分岐先のアドレスです。前方と後方で相対分岐命令が別なのは面白いですね。2の補数を考えなくて良いのでハンドアセンブルにはありがたいです。

全体的にコメントが少ないので途中で解析あきらめたのかも。

そういえばこのプログラムには一つエピソードがありました。

もう15年位前になるかと思いますが、当時の仕事仲間と雑談していてポケコンの話になりました。いろいろ話しているうちに「そういえばコンパイラあって、昔逆アセンブルしたんだよね」みたいなことを言ったところ、何とその方が作者さんだったのです。

世界は意外と狭いものですね。

参考文献・関連図書: 
氏家一浪(1984)「ポケコンパイラ1251」,『I/O』1984年12月号, pp.233-236, 工学社.
関連項目: 

コメント

I/Oに載っていたのを思い出しました。
ポケコンパイラや、ポケコンのアセンブラは使ったことはなかったですが、PC-1251向けの各種記事を参考にしてPC-1245をいじっていました。

ポケコンパイラの作者が同僚だったとは驚きですね。
自分の仕事関係だと、かって8ビットPCのSMCシリーズのCP/Mに関わっていた人に話を聞きに行ったことがありました。

いやぁ、ビックリしました。

もう一人取引先の人でI/OのCP/M68Kの記事の著者と同姓同名だった方もいるのですが、
こちらは確認する機会もなく謎のままです。

当時PC-1245欲しかったのですが、買おうとしたらPC-1246にモデルチェンジしていました。
上位互換だという言葉を信じて買ったのですが...

PEEK,POKEはあるけどCALL命令は無い。
そのPEEK,POKEもアクセスできるのはRAMエリアのみ。
というまったくの別物でした。確かに公式の部分は互換なので嘘ではないです。
これも探しているのですがまだ発見できていません。手放した記憶は無いのですが。

モデルチェンジの際に、そんな仕様変更が行われていたとは…なぜでしょうね。
一般のユーザはそもそも使わないでしょうし、雑誌に掲載されるプログラムは出版社が動作確認しているでしょうし、そういういじり方をするユーザーは自己責任でやるでしょうし。
もしかして、バイナリレベルでの互換性に問題があっため、混乱を避けるためにユーザが触れないようにしたとか!?

当時の自分は、PC-1245をマシン語でいじってはいませんでしたが、LCDに任意のビットパターンを表示するぐらいはやっていました。V-RAMのアドレスが、左から12文字までとその後で違う配置だったのは謎ですね。PC-1250/1251由来で24文字分割り当てられてましたね。

確かCPUから何からまったくの別物だったはずです。
それでBASICの挙動だけ合わせたといったところ。

VRAMのアクセスも、実行中の表示ONもできないので遊べませんでした。

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
※ コメントは原則公開です。個別のご相談などは「ご意見・ご要望」からお願いします。