スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

neko on PIC 18F14K50

 xneko,oneko などで1990年代にワークステーションのデスクトップ上で一世を風靡したnekoシリーズの oneko 1.2 をPIC 18F14K50(他のチップでもよかったんですが)に移植してみました。ソースプログラムは、unix,X11 を前提に作られているので、移植にあたっては主にX11のXLib関連の関数、その他をYHY024006A用に新たに作りました(といっても5~6関数)。
 一番の難所はoneko 1.2+YHY024006A用XLibラッパーの容量でした。18F14K50は内蔵プログラムメモリが16KBytesなのでそのままC18でコンパイルしてもメモリに収まりません(確かフル機能で30数KBytes)。最小限の動作が見れればいいだろうと、dog,toraなどのビットマップデータ(xbm)はインクルードしないようにして、さらに、neko の動作を決めるアルゴリズムの部分で使われているsin(),sqrt()などの関数は使わないようにしました。sin()関数については起動したときの最初の一回目で定数を決めているようなので、関数電卓を使って三角関数の定数をベタ打ちにしてプログラム内部ではsin()関数は使わないようにしました。sqrt()も問題なのですが、ソースを良く読むとsqrt(x^2+y^2)のように距離を計算していることがわかりましたので、ちょっとインチキっぽいですが,距離関数L=fabs(x)+fabs(y)と定義して誤魔化しました。数学的には異なった距離関数ですがなんとなくうまく動いてるようなのでこれをそのままつかいました。
 PIC 18F14K50は 48MHz で動かしています。nekoの動作速度を決定する?pause()関数はループプログラムで作った100ms を使っています。ここのパラメータを小さくする事で neko はキビキビ走りまわると思いますが、昔Sparc Station 1で見た neko はこのくらいの速度だったよな?昔を思い出しながらパラメータを決定しました。





最後に、oneko, xneko 作者の方に敬意と感謝の言葉を送りたいと思います。

PS. YHY024006Aはタッチスクリーン付きのLCDモジュールなので、別のもっと足が多いPICに移植して、タッチスクリーンのインターフェースを作成して、画面上の好きな所へ行けるようなものを作るかもしれません。
スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。