現在地

ソフトウェア

南青山アドベンチャー

テーマ:

昨日の表参道アドベンチャーに続いて南青山アドベンチャーです。

「南青山アドベンチャー」は独立なった「AhSKI!」1983年号に掲載されたテキストのアドベンチャーゲームです。やはり機種依存部分が分離された構造で、本体プログラムは共通で PC-6001, PC-8001/8801, MZ-80B/2000, PASOPIA の各機種に対応していました。

これもZ80バイナリなのでZ80コードを実行できる何らかの環境が必要なのも同様です。

プログラムは9000H~0E817Hまでとかなり大きくなっています。グラフィックは無いものの近傍のマップが表示されたりと画面表示も進歩していて、機種依存部分も9000H~91FFHと拡大されています。実行時にRAMに転送して実行しなければならないという状況も同様です。

機種依存部分のアドレスは以下のようになっています。

表参道アドベンチャー

テーマ:

呟いたら意外に反響があったので資料を残しておきます。

「表参道アドベンチャー」は「ASCII」1982年4月号の綴じ込み付録「AhSKI!」に掲載されたテキストのアドベンチャーゲームです。ソフトウェアに互換性の無いパソコンが乱立していた時代ですが、機種依存部分を分離することにより本体共通で PC-8001, MZ-80K/C, MZ-80B の各シリーズで実行可能となっていました。

この機種依存部分が分離されているということはそこだけ作り直せば他のハードウェアでも実行できる可能性があるということです。

ということで自作のボードで動かすために機種依存部分を解析しました。

ボードは翌年の「南青山アドベンチャー」のために製作したものですが問題なく実行できます。

こんなことをする人は少ないかもしれませんがここに記録しておきます。

まずこのゲームはZ80のバイナリなのでZ80か互換のプロセッサが必要です。あるいはZ80をエミュレーションする方法もあります。

PC-8001 テープからのオートスタート

カテゴリー:

テープ時代のメモの記事でオートスタートに触れたのでその仕組みを書いてみます。

PC-8001でバイナリ(いわゆるマシン語)のプログラムをテープから読んで実行するには普通次のようにします。

mon
*L
*GD55B

ここで「*」はプロンプトなので入力はしません。

mon」コマンドでマシン語モニタに入り、「L」でテープからロードし、「G」で実行します。「D55B」は実行開始アドレスです。

mon」「L」は不変なので憶えられますが、実行開始アドレスはプログラム毎に異なるので面倒です。そこで市販ソフトウェアを中心にこのオートスタートのテクニックが使われました。

The Macroassembler AS

以前うまくインストールできずに旧バージョンを入れてしのいでいた「The Macroassembler AS」ですが、公式ページを見に行ったところ数日前に新バージョンが出ていたことと、SBC6800, SBC6809のコードを書き始めるところだったことから最新版にアップデートしました。

前回はさらっと書いたので今回は流れを書いてみます。

私はNetBSD環境で使いたいのでソースコードからビルドすることにします。

まだpkgsrcには入っていないようです。私は野良ビルドしてしまうことが多いので気にしません。

Win32などバイナリの用意されているプラットフォームもあります。

ISHからbase64へ

カテゴリー:

誰もがお世話になっているメールへのファイル添付、簡単な操作で可能になっていますが昔は結構面倒なものでした。

メール本文に添付ファイルのデータを単純に結合するだけだといろいろな問題が発生します。

  1. バイナリファイルにはメール本文に使用できないコード(制御文字やビット7が立っている文字等)や改行文字のように変換される可能性のあるコードが含まれている
  2. どこからどこまでが添付ファイルのデータかわからなくなる
  3. ファイル名等のメタデータをどうするのか
  4. 通信エラー等にどう対処するのか

そこで添付したいファイルを専用のソフトウェアでテキスト形式に変換(エンコード)し、これをメール本文(の末尾など)に挿入して送信します。

受信側では添付データ(のテキスト化された)部分を切り出して専用ソフトウェアで元に戻す(デコード)ことになります。

ファイルが大きすぎる(時代によりますが、私が始めた頃は50kBくらいでしょうか)場合には分割・結合の作業も必要でした。

この変換にはいくつかの方式が使われましたが、今ではほぼbase64に収束しています。

Z8613を動かす (その5:私のハマった点)

テーマ:

前回私がハマったところの詳細を残しておきます。

Z8にはレジスタファイルと呼ばれる256バイトの空間があります。これは通常のメモリ空間とは別に存在し、内蔵ペリフェラルのレジスタや汎用レジスタなどが配置されています。Z8613ではアドレス0x80~0xEFまでは未実装になっていますが、デバイスによってはフル実装されていたりバンク切り替えによって拡張されているものもあります。

このレジスタファイルへのアクセスには2種類あり、命令によってどちらが使えるかあるいは両方かが決まっています。

一つは8ビットのアドレスを指定する方法で、どこにでもアクセス可能な代わりに命令長は最低でも2バイト必要です。アセンブリ言語での記述は単に8ビットのアドレスを書きます。

もう一つはアドレスを(下位)4ビットだけ命令の中で指定し、アドレスの上位は別途RP(Register Pointer)レジスタで指定しておく方法です。アセンブリ言語での記述はr0~r15と書きます。命令長が短くなるほか、RPレジスタを変更することで割り込みでの退避・復帰を高速に行なうことも可能です。

Z8613を動かす (その4:とりあえず動きました)

テーマ:

いろいろやっているうちに何とか動き始めました。

まずはシリアルポートです。

Z8のシリアルはちょっと変わっていてシリアルのステータスレジスタがありません。それでは受信完了などをどうやって知るのかというと、割り込み要因レジスタを読むのです。ここまではマニュアルを読んでわかっていたのですが...

マニュアルを読み直していると、たとえ割り込みを使わないでポーリング処理をする場合でも一度EI命令を実行しないと割り込み要因レジスタが有効にならないのだそうです。

ポーリングでやるつもりでマニュアルの割り込みの部分をちゃんと読んでいなかったので気付かなかったのでした。

指示通りに初期化するとあっさり動くようになりました。

パラレルの方はアセンブラが原因でした。

前回書いたようにタイマT0の設定は出来ていました。パラレルポートも試しにプルアップ・プルダウンしながら電圧を測ると出力に設定されているようです。それなのに出力すべきデータが設定できていませんでした。

何が違っているのでしょう?

Z8613を動かす (その2:クロスアセンブラ)

テーマ:

ハードウェアが出来たら次はソフトウェアです。

Z8はハンドアセンブルできないほど複雑ではありませんが、アセンブラくらいは欲しいところです。今回のZ8だけでなくSBC6303ボードのHD63C03やMC6803、さらには手持ちのいろいろなプロセッサにも使いたいので出来れば多くのプロセッサに対応しているとありがたい。

ということで候補に挙がったのが「The Macroassembler AS」です。

開発ペースは遅い(というか止まっている?)ようですが、現時点でかなりの数のプロセッサに対応しています。8ビットが中心ですが、16ビット以上にも一部対応といったところでしょうか。マクロは使えますが、リロケータブルオブジェクトの出力は出来ません。

GNU binutils(の中の「as」)にも期待していたのですが、こちらは上とは逆で32ビットが中心で残念ながらZ8には非対応でした。

パーソナルなコンピュータの技術情報事情 (ソフトウェア編)

ハードウェア編に続きまして、今回はソフトウェア編です。

トレーニングキットの時代は回路図同様にソフトウェアについてもオープンなものが多かったと思います。
ソフトウェアといってもメモリの内容を表示・変更したりプログラムの実行ができるモニタ等ですが、これのソースコードがマニュアルに掲載されていたりするわけです。これもサンプルとしての意味が大きいからでしょう。オブジェクトのサイズも数kB以下ですから量的にも大したことはありません。

BASICインタープリタをROM搭載したいわゆるパソコンになると状況が変わりました。シャープのようにモニタのソースコードのマニュアルへの掲載を続けたところもありますが、BASIC自体となるとそうはいきません。

  • マイクロソフト等の社外開発のものが多く勝手に公開できない
  • サイズも小さなものでも10kB以上と大きくなり紙面的にも難しい
  • ユーザ層としても必要としない人が増えた

といった事情からソースコードの公開は困難になります。

パーソナルなコンピュータの漢字事情 (第5回: 文字コード)

カテゴリー:

これまで表示や印字の見た目の話がメインでしたが、最後に文字コードの話をしてみたいと思います。

漢字ROMが最初に搭載された頃、パソコン上ではまだBASICが主流でしたが、まだ「文字」という扱いではありませんでした。JISコードを指定すればパターンとして表示できるというだけで、文字列として(変数に入れたり)扱うことはできませんでした。ワープロ等のソフトウェアは独自に処理していたものです。

使える文字もJIS第1水準の約3,000字(+非漢字)のみでした。足りない字については次のような方法で対処します。

  • 第1水準の文字で置き換える
    例えば私の姓の「淺」は第2水準なので、第1水準の「浅」を使っていました。
  • 外字(ユーザ定義文字)に定義する
    自分でフォントを作らなくてはいけないこと、互換性がなく他人とのやり取りに支障があること、使える字数が限られること、などの欠点があります。
  • (印刷なら)空白にしておいて手書きする

PC-9801シリーズ等ではオプションでJIS第2水準(約3,400字)まで使えるようになりました。

ページ