現在地

ソフトウェア

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字)まで使えるようになりました。

パーソナルなコンピュータのメモリ事情 (第8回: 80386以降)

日本ではPC-9801RAから(PCではPS/2の一部から)搭載された80386になるとCPUのメモリ空間は4GBとなり、しばらくこの4GBの時代が続くことになります。
しかし当時本当にありがたかったのはメモリ空間が増えたことより、仮想86モードが使えるようになったことでしょう。プロテクトモードにいながら8086互換の環境を提供できるようになり、ソフトウェアのみでメモリの再配置が可能になりました。

これにより1MB超にあるメモリの好きな部分を1MB内の好きなエリアに割り当てることができます。これはコピー操作を伴わないので時間はかかりませんし、同じメモリを複数個所にマップしても矛盾は生じません。

  1. ソフトウェアのみでバンクメモリをエミュレーション
  2. ソフトウェアのみでEMSをエミュレーション
  3. 拡張ROMエリアなどメモリ未実装のエリアにメモリを割り当てる

といったことが可能です。1,2ができるので増設メモリはプロテクトメモリ用のみですべての機能が実現できるようになるのでメモリボード選択の悩みもなくなります。3はメモリ管理チェーンに組み込むことでドライバや常駐プログラムのエリアとして使うことができます。

パーソナルなコンピュータのメモリ事情 (第7回: 80286期)

80286が使われるようになるとCPUのメモリ空間は16MBありますのでメモリ問題は解決(一時的なものなので先送りと言った方が良いかもしれません)したかと思いきや、そう簡単ではありませんでした。

80286にはリアルモードとプロテクトモードという2つの動作モードがあります。リアルモードでは8086のソフトウェアがそのまま動作しますが、メモリ空間は1MB (実は「+α」があり、後で出てきます)のままです。リセット後は自動的にリアルモードになるので特別なことはせずに高速な8086として使用できます。一方プロテクトモードでは16MBのメモリ空間が使えますが、ソフトウェアの変更が必要になり、OSもMS-DOSは使えず専用のものが必要になります。

ここで皆がOS/2へ移行していれば良かったのですが、DOS互換機能に難(後に80386で解決)があったこともあり多くの人が移行せずDOSを使い続けたためメモリ問題に悩まされ続けることになります。
MS-DOS環境で大きなメモリを使う工夫は8086時代の延長ですが、新たなものも加わりました。

パーソナルなコンピュータのメモリ事情 (第6回: 8086後期)

8086/8088に移行して1MBというメモリ空間を手に入れましたが、すぐに不足をきたすようになります。

PC-9801の発売から4年後のPC-9801VM21で標準搭載のメインメモリは640kBとなり、拡張は限界に達しました。同じ頃、メモリ空間が16MBの80286搭載の上位機種も発売されていますが、8086やV30(NEC製の8086改良版でメモリ空間は1MBのまま)の機種もラインナップとして残りました。また従来機を640kBにまで拡張して使い続けるユーザも多くいました。
これらの機種でも大容量のメモリを使いたいということでいくつかの方式が考えられました。

私のエディタ遍歴

カテゴリー:

先日のVzエディタの記事で予告したとおり、過去に使っていたエディタについて書いて見ます。

ここで言う「エディタ」は勿論テキストファイル編集用のソフトウェアのことですよ。
  1. BASICのエディタ
    最初はN-BASICのエディタでした。あくまでもBASICプログラム入力用のものですが、他の用途に使用したこともありました。
    一つはTL/1のソースコードです。PC-8001用のTL/1コンパイラはBASICのREM(コメント)としてソースコードを入力します。
    もう一つはMC68000のクロスアセンブラのソースです。これはREMではなく文字列として下記のように入力します。
    10 "entry:
    20 " mov d0,#$3400
    30 " rts
        

    BASICのプログラムとしては文法エラーですが、そのまま(中間コードに変換されたりせず)保存されるのでアセンブラはそれを読み取って処理するという寸法です。

ページ