現在地

ソフトウェア

Motorola MC6800

テーマ:

このMotorola MC6800はIntelの8080とともに最初期の8ビットマイクロプロセッサです。

MC68A00P
MC68A00P、「A」ですから1.5MHz品で末尾の「P」はプラスチックパッケージです。1979年製でしょうか。

後にクロックジェネレータと128バイトRAMを内蔵したMC6802が作られたことは「Motorola MC6802」に書きました。

X60のHDD換装完了

テーマ:

カテゴリー:

やりかけになっていたX60のHDD換装ですが、なんとか完了しました。

まずエラーが出ていた/dev/sd0g (実際にエラーになっていたのは読み出し側の/dev/wd0gです)ですが、前回書いたようにエラーを無視しつつベタコピーしてみました。ブロックサイズ512バイトでしかもリトライがかかるのでほぼ1日がかりです。ところがfsckかけると大量の不整合が報告されます。面倒なので「-y」オプションで全部修正させたところ、なんと全てが「lost+found」に入ってしまいました。WindowsでいうところのFOUND.000, FOUND.001, ...になってしまったということです。

しょうがないのでファイル単位でコピーすることにします。今度はファイルを選べるので大事なものに絞りました。

/dev/sd0hは幸いエラーが出ることも無くコピーできました。こちらは予定通りファイル単位コピーです。

コピー作業に2日ほどかかり、その間エラーのあるHDDもアクセスしっぱなしの状況だったのですが、特に悪化することも無く動いてくれて助かりました。

ThinkPad X60用にHDDを買ってきました

テーマ:

カテゴリー:

ThinkPad X60のHDDの調子がおかしいので交換用にHDDを買ってきました。

MQ01ABD100
これが買ってきた東芝のMQ01ABD100です。これまでのものは500GBだったのですが、500GBと1TBで値段があまり違わなかったので1TBに増量です。2つあるのはちょっと別の予定があるから(先日の超小型PCではありません)です。

EPSONの超小型PC (インストール編 その2)

テーマ:

カテゴリー:

前回、どうやらキーボードが起動の邪魔をしているということだったのでキーボードを外して試してみます。

すると今回は/etc/rcまでたどり着きました。先頭のパーティション(/dev/wd0a)は問題無さそうです。ところが2つ目の/dev/wd0eの整合性チェック(fsck)が失敗しています。それもスーパーブロック(管理領域)が読めないという致命的なエラーです。少々のエラーなら修復してくれるのですが、これはどうにもなりません。しかもキーボードを接続していないので何もできません。

もしかして起動後に挿せばキーボードが使えるかも、と淡い期待をしつつ挿したところkernel panicで止まってしまいました。

仕方が無いのでまたHDDを外してX60に接続して内容を確認しました。

すると/dev/sd0aは正常だったものの、/dev/sd0e~/dev/sd0gは全てエラーとなってしまいました。

EPSONの超小型PC (インストール編 その1)

テーマ:

カテゴリー:

中を一通り見たところでインストール開始したのですが、実はまだ完了していません。

前回書いたようにSO-DIMMは手持ちの4GBに交換し、HDDはそのまま320GBのものを使用することにします。キーボードはちょうど手元にあったHappy Hacking Keyboard ProfessionalをUSB接続して、ディスプレイはVGA (アナログ)での接続です。

インストール方法はUSBでCD-ROM/DVD-ROMを繋いで行なうのが一般的ですが、その後の環境構築まで考えると結構面倒です。幸いNetBSDを使用中の環境があるのでそのクローンを作ることにしました。
候補となる環境は一つはこのサイトを運用しているPC、もう一つはLenovo ThinkPad X60です。どちらからでもできないことはありませんが、構成の近い後者を採用することにします。

何のルーチンでしょう?

ふと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のテクニック

カテゴリー:

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

ページ