円でエンエンエーン!
最近自宅で円を書いているのだが、それをMSXで書くことにした。
そんでMSXエミュレーターを入手して動かして見ることにした。
円の高速描画コマンドとしてMSXではサークル文というのがあったが、もう大人になったのでサインやコサインを使うことにした。またこのソースはオープンソースとなっているので自由につかっていただきたい。
サインやコサインは、ある角度を与えたときに原点からの比を割り出してくれるので、この比に半径ぶんかけると、原点からの任意の角度までの距離となってくれる。サインとコサインで対比の場所がX軸Y軸とかわるのでそれぞれ利用する。
この場合円を書きたいので角度は0度から360度までとして、早速実行して見ることに
なるほどいびつだ。ときどき横にはみ出したりもしているが、まあまあの円がかけた。これはサインやコサイン、はたまた円周率の少数精度かと思ったが、いまのところそれをどのようにして誰に訴えるべきかすべがない。
またこれが非常に遅い。遅い遅いとは思っていたがこれほどまでとは。
ということなので、VRAMあたりに直接描画するソースになおすとみちがえることを覚えていたので、次はそうしようかと思う。しかし使い方も、VRAMの番地のしくみも忘れてしまっていた。とりあえずプログラムを消したいので、消したい、と念じると体が勝手にnewと打ち込んでいた。あなおそろしや。
ちゅうことで打って見たが、なんかしらんがへんなCが出た、たぶんSCREEN0のVRAM領域はアスキー文字なんだろうという結論に達した。
実際255,256,257とアタックしていくと変なCが次々と打ち込まれていった。
いろいろぶちこんでいってみると、screen0がどうも40*24行であることがわかった。番地がそうすると40*25からスクリーン1なのかな、とおもったら違った。ホームページで調べて見ると6144番からなのがわかった。ここらへんはどっかで情報を入手する必要があった。
さて、肝心なSCREEN2だが、どこから始まるのだろうか。ブラジル人から8194であることを教えてもらってそこに書き込んだすると横長の線がしょうじされるようになった。
8ドット2色とかいう話があったかと思うので、一つの番地で8ドット分の情報をゴニョゴニョやっているのかと予測する。
ちなみに8195とか番地を足していくとどんどん横線が下にさがっていく。
よくわかんないからこんな感じでルーぷさしていくと、ブロックごとに描画されていっているのがわかる。