思い出・昔話

何のルーチンでしょう?

2017-04-11 14:01 — asano

テーマ

ふとZ80ボード 3号機で遊んでいたときに考えたルーチンを思い出しました。


   1:	8000          	    ORG     8000H
   2:	8000          	check:
   3:	8000  7E      	    LD      A,(HL)
   4:	8001  AE      	    XOR     (HL)
   5:	8002  C9      	    RET

ルーチンと呼ぶのもおかしいほどの短いコードです。何をするものでしょうか?

Z80のコードがわからない人のために簡単に解説するとこんな感じです。

  1. 1,2行目は開始番地とエントリポイントのラベルです。
  2. 3行目でHLレジスタの指すメモリを読んでAレジスタに入れます。
  3. 4行目でもHLレジスタの指すメモリを読み、Aレジスタの内容とXOR演算をします。結果はAレジスタに入ります
  4. 5行目でメインルーチンへ帰ります。

簡単ですね。

Z80 IX,IYのテクニック

2017-03-09 23:05 — asano
カテゴリー

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系でリロケータブルを実現する

2017-03-08 16:38 — asano
カテゴリー

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

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

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

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

2017-03-06 18:53 — asano
カテゴリー

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

電磁カウンタ と秋葉原の思い出

2017-01-04 15:57 — asano
カテゴリー

またも懐かしいものが出てきました。

電磁カウンタ
これは電磁カウンタと呼ばれるものです。電気のパルスを数えるものですが、今や電子式(液晶やLED表示)に置き換わってしまい、このような機械式は珍しくなりました。

これは3桁のもので、左のボタンを押すことで「000」にリセットすることができます。

私のプリンタ遍歴

2016-12-29 22:45 — asano

テーマ

カテゴリー

個人的に(つまり自宅で)使ってきたプリンタたちです。
ポケコン用の小さなものやワープロ内蔵のものなどを除いたメインで使っていたものだけを挙げています。

  1. NEC NK3618-21

    初めて買ったこれは主にBASICプログラムやZ80アセンブルリストの出力に使っていました。

    10インチ幅のドットインパクト式のプリンタです。連続紙の使用時はトラクタユニットが必要なのですが、買えないのでそのまま使っていました。丁寧に紙をセットしても何十枚もプリントしていると少しずつズレてきてしまうので時々セットし直してあげる必要があり不便ではあるのですが、初めてもったプリンタということで当時はあまり気にしていませんでした。