技術的にはまだ生きていて、macOS はPICが採用されてます。PICの方が10%-20%遅いとか言われた時期もあるのだが、どうなのかな。macOSだと、
関数の先頭でPIC用のアドレスをPCから取得するコード(x86はPC offsetできない)
リンクするshared libraryをlinkするためのstab
みたいなのが入っていて結構重い印象。64bit時代なんだから、もっとましな技術ないのかな。Linuxの絶対番地なリンクもクソではあるんだが。
MC6809とOS9は同時に開発されたのでPIC関係の連携は素晴らしい。
1byte addressなDP(direct page)がDP registerで移動可能
定数はPC相対で取れる
大域変数はU registerで要求した分用意される(DPと同じ)
となっているので、
STA <$20
みたいなコードがそのままでPICになります。なので、
LDB $FF80
LDX #$FF09
みたいな絶対アドレス参照なものは、
LDB <$80
LEAX 9,U
とかで置き換えれば良いだけ。むしろコードは小さくなるので速度的なペナルティもない。
つまり、MC6809でPICでないのは「MC6800/8080からの移植でさぼっている」だけってことね。GAME09もbuffer関係の数ヶ所だった。
buffer end の一つあとみたいなのが入っていたので、それを考えるのがめんどくさかったのだろうな。
CMPX #buffer-1
みたいなコードだと CMPX Y とかないので面倒。いやだから、
LEAX buffer-1,U
STX <buff_1
とかしておけば、
CMPX <buf_1
とできる。でも、あの頃はメモリの1 byteは血の一滴だったからな。DP領域256byteしかないし。その辺を嫌がったのかも。
UをUser stackに使うとかするからいけなくて、Uを大域変数用に使えば楽勝だったはずです。(が、LISP09は、それだとレジスタが足りなくなるのかも)
と言いながら、os9 自体のoverheadが結構大きくて、8/16bitな real-time OSでは遅い方らしいです。
No comments:
Post a Comment