80系でリロケータブルを実現する
カテゴリー:
80系(8080,Z80,8085)で真のリロケータブルコード(PIC)を書くことはほぼ不可能です。
MC6809では普通に可能だったので、6809ファンの友人によく馬鹿にされたものです。
PICであるためには何が必要で80系では何が欠けているのか考えて見ましょう。必要なのはコード内のアドレスを正しく求め、参照できることです。
80系(8080,Z80,8085)で真のリロケータブルコード(PIC)を書くことはほぼ不可能です。
PICであるためには何が必要で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もエントリポイントと考えると以下のようになります。オブジェクトは上と一緒です。
今回からしばらくはちょっと趣向を変え、ソフトウェアについて書いてみたいと思います。1回目は「ソースコード等に16進を記述する際の記述方法」です。
今ではアセンブラもこの記述方法が多いです。
またも懐かしいものが出てきました。
これは電磁カウンタと呼ばれるものです。電気のパルスを数えるものですが、今や電子式(液晶やLED表示)に置き換わってしまい、このような機械式は珍しくなりました。
これは3桁のもので、左のボタンを押すことで「000」にリセットすることができます。
個人的に(つまり自宅で)使ってきたプリンタたちです。
ポケコン用の小さなものやワープロ内蔵のものなどを除いたメインで使っていたものだけを挙げています。
10インチ幅のドットインパクト式のプリンタです。連続紙の使用時はトラクタユニットが必要なのですが、買えないのでそのまま使っていました。丁寧に紙をセットしても何十枚もプリントしていると少しずつズレてきてしまうので時々セットし直してあげる必要があり不便ではあるのですが、初めてもったプリンタということで当時はあまり気にしていませんでした。
私がこれまでに使ってきたOSたちです。
操作環境としてのもののみ挙げており、vxWorks, μITRONといった組み込みOSは除いています。
いつもモノのことばかり書いているので、時には「私」についても書いてみようかと思っています。
題して「私の~遍歴」、第1回はプログラミング言語についてです。
これまでに個人的にも業務としてもいろいろなプログラミング言語を使ってきました。既存のプログラムをちょっと修正したようなものまで含めるとかなりの数になってしまうので、ある程度使い込んだものを並べて見ました。
私が初めてパソコンに接したのは1982年のことですから、BASICから入ったのはごく自然な流れでした。一部の例外を除いてパソコンを買えばBASICは入っている時代でしたから、まずはそれを使ってみることになります。
今回ご紹介するのはNEC製のパソコン、PC-8001mk2です。
本体が別にあるのではなく、これが本体です。このようなキーボード一体型(キーボードの下にメインの基板が配置されています)は当時一般的なものでした。もちろん本体とキーボードが分離されている機種も存在していました。逆に本体にキーボードもモニタもカセットデッキも一体になっているものもありました。
基本的なスペックを挙げると以下のようになります。