現在地

思い出・昔話

ISHからbase64へ

カテゴリー:

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

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

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

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

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

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

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

パーソナルなコンピュータの数値演算事情 (第5回:32ビット・そして…)

カテゴリー:

32ビットの時代になると32ビットの四則演算が一命令で実行できるのは当然になり、浮動小数点演算についても一般的になってきます。

Intel 80386ではレジスタが32ビットに拡張され、80486では浮動小数点演算機能も内蔵されます。廉価版として浮動小数点演算を省いた486SXというものありましたが主流にはなっていません。

MotorolaはMC68020で外部バスも32ビットになりましたが、このシリーズは最初から32ビット演算命令は持っていました。それよりもMC68020から外部の浮動小数点演算プロセッサであるMC68881に対応したことの方が大きいでしょう。

パーソナルなコンピュータの数値演算事情 (第4回:16ビット)

カテゴリー:

8086, MC68000, Z8000といった16ビットプロセッサになると加減乗除の命令を持っているのが一般的になります。もちろん1命令で16ビット幅の演算が可能で、MC68000などは32ビットまで可能でした。

まだ浮動小数点演算命令は持っていないのが一般的でしたが、NEC V60やPanafacom MN1613のように浮動小数点の加減乗除の命令を持っているものもありました。

また内蔵していないまでも外部に浮動小数点演算プロセッサを接続できるようになっているものもありました。前回取り上げた MM57109, Am9511, Am9512 はI/Oデバイスとして接続するものでしたが、プロセッサの命令を拡張する(浮動小数点演算命令が追加される)タイプが登場します。

Intelの8087は 8086, 8088 に追加することで浮動小数点演算命令が使えるようになります。

パーソナルなコンピュータの数値演算事情 (第3回:8ビット後期)

カテゴリー:

8ビットマイコンでも集積度が上がってくると乗算や除算命令を持つものが出てきます。

日立のHD64180はZ80の拡張ですが、8ビット×8ビットの乗算命令が追加されています。

MotorolaのMC6809にも8ビット×8ビットの乗算命令が含まれています。

Zilog Z8の上位のSuper8シリーズは乗算に加えて16ビット÷8ビットの除算命令も持っています。

プロセッサに内蔵せずともCDP1855のような外付けの乗除算ユニット等もありました。これはRCA CDP1802ファミリの乗除算ユニットで、単独で8ビット×8ビットの乗算・16ビット÷8ビットの除算が可能です。最大4段まで接続でき32ビット×32ビットの乗算・64ビット÷32ビットの除算まで拡張することもできました。

浮動小数点演算については8ビットプロセッサで内蔵したものは見たことがありません。当然ソフトウェアで処理することになりますが、(少なくとも当時は)複雑な処理だったのでライブラリとして提供されたり、書籍や雑誌記事にもよく書かれていました。

パーソナルなコンピュータの数値演算事情 (第2回:8ビット前期)

カテゴリー:

今回からパーソナルということでマイコンの事情について見ていきましょう。

8080, MC6800, 6502といった初期の8ビットマイコンの直接扱える数値はもちろん8ビットの整数です。16ビットのレジスタを持ったものもありますが主にアドレス指定のためのもので使える演算が限られていたり自由度の低いものでした。

この頃になると数値のビット表現は2進で負数は2の補数に収束しています。ただ10進演算の需要自体は残っているため、8ビットを2つに分けて10進2桁として使用するための補正命令を持っているものもありました。通常の加算命令と組み合わせることで10進の加算ができるというものです。

演算は2項演算としては加算・減算・比較・AND・OR・XORあたり、単項演算では符号反転・ビット反転・シフト・ローテートくらいを持っているのが一般的でした。中には符号反転+加算で代用できるからと減算命令を持たないものがあったり、各社の考え方や想定している用途等で微妙に異なってはいます。

乗算や除算命令は無いのが普通で、必要とあらばソフトウェアで処理をします。

パーソナルなコンピュータの数値演算事情 (第1回:パーソナル以前)

カテゴリー:

今は汎用の(組み込みではない)コンピュータでは最低でも32ビットの整数が扱え浮動小数点演算もハードウェアでサポートされるのが当たり前になっています。

今回はこのあたりの事情について何回かに分けて書いていきたいと思っています。

第1回は個人で使えるようになる以前の話です。

まずは黎明期の有名なコンピュータをいくつか挙げてみましょう。

マイナーなZ80周辺LSI

カテゴリー:

昔のプロセッサ誌を調べていたらZ80の面白い周辺LSIの紹介記事「Z80 GLU と Z80 SPCT」を見つけましたので、今回はこれについて書きたいと思います。現物を持っていないので写真は無しです。

まずはZ84C80, Z84C81 Z80 GLU(General Logic Unit)です。

これはよく使われる以下の機能をまとめたものです。

  • クロック発振器
  • DRAMコントローラ(アドレスのマルチプレクサも含む)
  • ROM用のアドレスデコーダ
  • メモリあるいはI/O用のアドレスデコーダ
  • リセット回路・ウォッチドッグタイマ
  • WAIT挿入回路
  • Z8500系デバイスとのインターフェイス(Z84C80のみ)
  • パワーダウンモードへの移行(Z84C80のみ)
  • GPIO

一部のピンは共有になっているので同時に全てが使えるわけではありません。

BASIC内蔵マイコン

カテゴリー:

先日のINS8073はBASICインタプリタを内蔵していましたが、似たようなものは他にもいくつかありました。

  1. NS INS8073
    CPUはSC/MP IIIでROMは2.5kBです。内蔵RAMだけでは不足なので最低256バイト以上のRAMを外付けする必要があります。

    このBASICはNIBL(National Industrial BASIC Language)と呼ばれており、そのサイズからもわかる通りいわゆるTiny BASICです。扱える数値は16ビットの整数のみです。

  2. NS INS8075
    CPUは上と同じくSC/MP IIIでROM容量は4kBに増えています。

    資料が少なく4kBの容量とN2BASICの名称以外の詳細は不明です。

  3. Zilog Z8671
    Z8ファミリの一員Z8601のROMにBASICとデバッグモニタを格納したものです。

    ROM容量は2kBなのでTiny BASICの一種と思います。やはりRAMは外付けの必要があります。

手持ちのROMを読んでみた

カテゴリー:

せっかくROMライタもあることですし、昔使っていたROMを読んでみることにしました。何か懐かしいものが書かれているかもしれません。

UVEPROM
実際に使った記憶のある 2764, 27128 を集めました。あとTMM323C(2716)もライタを作ったことがあるので何か書かれているかもしれません。

まずは 2764(ほとんどが三菱のM5L2764K)です。これはZ80ボード3号機に使ったもの、MC68kボードも初期はこれを使っていたかもしれません。

NMOS Z80 CPU のクロック

カテゴリー:

先日クロック信号について書いた時、資料に面白い記述を見つけたので今回はそれについて書いてみます。

それは1978年3月版のZ80 CPUの仕様のAC特性にあった以下の記述です。『Z80ファミリ・ハンドブック』もこれを元にしていると思われます。

ページ