JR-100でネギをふってみた時

広告
広告1




ことはじめ

昔、松下電機産業株式会社から発売されたJR-100というパソコンがありました。
モノクロで1Mhzに満たない動作クロックに単音BEEP、グラフィック面も持たない
マシンではありましたが唯一、PCGを32キャラ持つことができました。

私が初めて親に無理を言って買ってもらったマシンであり、
ニコニコに初投稿するにあたりネギを振るターゲットにしたマシンでもあります。

PCGは32キャラ、でも実は128キャラ?

まずははちゅねミクをグラフィックで表示しなければならないのですが
JR-100には8x8PCGが32キャラしかありません。これでは
5x6キャラで並べたとしても40x48ドットにしかならず、ちょっと
小さすぎます。どうするか。

JR-100を使い込んでいくとPCGは128キャラ定義できることに気が付きました。
問題は32キャラ以上の定義領域がTEXTVRAMとアドレスがかぶっていることで、
確かに定義はできるがその定義データが画面のゴミとして表示され、
そのゴミを消そうとするとPCGが消えてしまうというジレンマが起きることでした。

PCGデータとTEXTVRAMの情報を両立させるには?

TEXTVRAMは32×24、PCGは1キャラにつき8バイト必要です。つまり、
定義によって画面に出るごみは横を4分割したバウンダリで
起こることになるので画面中央に表示領域をとる形で両サイド8キャラ分が
ゴミになるとして32+(24×2)の80キャラが使用できる計算になります。

で、PCGで埋めなければならないキャラ数は16×24の384キャラって全然足りんわ。
結局のところ16×24ではなく16×14としてPCGをさらに20上乗せした100キャラが
PCGとして使用可能ということとしました。

ドット絵を量子圧縮、つまりキャラ詰め

あとは128×112のドットマトリクスでネギ振りはちゅねミクを描き、
なおかつそのCGを1パターン100キャラに抑えます。
ネギ振りパターンは2つ。2つの絵の差分をとり、書き換えが最低限になるように
キャラ詰めを行いました。これはデータを書き換えるときにできるだけ
文字化けを発生させないようにするためです。

アニメーションをさせながらバックで曲を鳴らす。しかし割り込みなし

JR-100はBEEPしかなく曲を鳴らすのが基本的にはむつかしいマシンです。
リファレンスには直接VIAポートをたたいて周波数を変化させることで
かろうじて曲を鳴らすサンプルがありましたがもちろん実行中は帰ってきません。

これを解決するためにBEEPドライバーというべきものを作成しました。
しかし、こういったドライバーは割り込みなどで定期的に呼び出すのが
普通ですがJR-100にはタイマー等からの割り込みが一切つながっていないのです。
仕方がないのでVIAにタイマを設定してメインループの最後で監視して
メインループの長さが一定になるようにして、そのループの中からドライバーを
呼んでいます。

あとがき

ただネギ振ってるだけなのに大変めんどくさくてしかもとくに注目もされないことを
よくやったなあ。
まあ、初投稿だったし自分の今の仕事の原点となったパソコンでネギ振りたかったし。

広告
広告1




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

広告
広告1