現在地

ノウハウ・テクニック

Z80 IX,IYのテクニック

カテゴリー:

8080からZ80になってありがたいことはいろいろありますが(ハード屋なら5V単一電源になったことが一番ありがたいかも)、IX,IYレジスタが追加されたこともその1つです。でもIX,IY関係の命令って意外と使いにくいのです。

まずHLレジスタと併用できないこと。これはHLレジスタを使う命令にプレフィックスとして0DDH, 0FDHを付けることでHLの部分がそれぞれIX, IYに替わり、(HL)は(IX+d),(IY+d)に替わるようになっているためです。ですから

ADD     IX,BC

はできても

ADD     IX,HL

はできないのです。
例外的に

LD      H,(IX+4)

のようにHまたはLと(IX+d)または(IY+d)の間のLD命令は使えます。

80系でリロケータブルを実現する

カテゴリー:

80系(8080,Z80,8085)で真のリロケータブルコード(PIC)を書くことはほぼ不可能です。

これらのプロセッサが現役だった頃、リロケータブルなコードといえば現在のPIC (Position Independent Code)の事を指していました。好きなアドレスにロードすればそのまま(書き換えたりせずに)実行できるコードです。
MC6809では普通に可能だったので、6809ファンの友人によく馬鹿にされたものです。

PICであるためには何が必要で80系では何が欠けているのか考えて見ましょう。必要なのはコード内のアドレスを正しく求め、参照できることです。

80系アセンブラのテクニック

カテゴリー:

2日目の今日は80系(8080, Z80, 8085など)のちょっと懐かしいテクニックです。

今こんな書き方をすると、わかりにくいと怒られるか、パイプラインなどに悪影響が出たり技術的にもデメリットになったりしますので避けるべきですが、当時はそれなりにメリットもあってよく使われていました。

一つは命令の途中に飛び込むというものです。例えばこんな感じです。


   1:	8000          	    ORG 8000H
   2:	8000          	entry1:
   3:	8000  3EAF    	    LD  A,0AFH
   4:	8002  3200FF  	    LD  (0FF00H),A
   5:	8005  C9      	    RET

3行目でAレジスタに0AHを入れ、4行目で0FF00H番地のメモリに書き込んで、リターンするだけのものです。
ここでは8000Hがエントリポイントですが、8001Hもエントリポイントと考えると以下のようになります。オブジェクトは上と一緒です。

続・タイガー計算機の操作方法

カテゴリー:

前回、各部の機能を書きましたので今回は具体的な計算を挙げてみましょう。

  1. a.~j.はタイガー計算機の操作方法を参照してください
  2. 事前にg.,h.,i.を使用し、a.,b.,c.は0にリセットされているものとします
  3. レバーf.は中立を「-」、左を「×」、右を「÷」と表記します
  4. b.,c.の位置は左端(ハンドルd.の1回転でb.が1増減する位置)を「1」、1桁右にずらした位置を「10」...と表記します

まずは基本の加減算からいきましょう。
【例】 789 + 456 - 123

タイガー計算機の操作方法

カテゴリー:

先日購入したタイガー計算機の操作方法を書いておきます。
これを読んで実際に操作する人は殆どいないとは思いますが、ディジタル式の電子計算機の乗除算器と考え方は似ていますので比較してみると面白いかもしれません。

まずは各部の説明から。


a.では下のレバーで数値を設定します。レバーと上の窓は連動しているので異なった値を表示することはありません。

乗算のときは数値の片方(被乗数)をここでセットします。除算時には被除数と除数の両方をここでセットします。

8251 USART

カテゴリー:

今回は80系の同期/非同期シリアル通信コントローラ8251 USART (Universal Synchronous Asynchronous Receiver Transmitter)の紹介です。


これはOKI電子デバイスのMSM82C51A-2、8251のC-MOS版です。

この8251、Z80 SIOが高価だったこともありZ80システムに使われることも多かったですね。
有名どころではNECのPC-8001, PC-8801の各シリーズのカセットインターフェイスやシリアルポートに使われています。これはまぁNECがZ80はCPUしか製造していなくて、8251は自社で製造していたという理由でしょうが。
雑誌等に掲載されたZ80システムの製作記事でもZ80 SIOより8251の方が多かったように思います。