アセンブラやデバッガの動作確認も含めて、どんどんプログラム作っていこう!
前回とは違うやり方でHello Worldを表示してみた。
前回は「テキストバッファに文字列をコピーして一気に表示」の方法だった。
今回は1文字ずつ表示をさせる方法で試してみた。
懸念点がいくつもあったので、それらを1つずつデバッガで確認しながら進める事となった。
まずは出来上がったプログラムを載せちゃう。
前回も書いたが、あくまでもSC61860の素人が書いてるので、慣れている方には気になるところが莫大にあるだろう(^^;;
前回よりも長くなる事に驚いた!
1文字表示をループ回数分だけ呼び出すだけなら簡単じゃ無い?という予想を見事に裏切られた感じだ。
前準備
ただのHello Worldでこれだけ解説が付くブログも珍しいだろうw
言いたいことも含めて書いているのでどうしても長くなる!(^^;
まず最初のおまじない的なコード。
実はこのコードは最後の最後に入れたんだけど、$788Fのbit0を1にしてやらないと画面に何を表示させようとしても、豆腐(■)になってしまう。何のスイッチなのかさっぱり分かっていないが、SHARPの「機械語マニュアル」に1を入れろと書いてあったので入れたら表示された。うーん、解説なしはちょっと厳しいなぁ…。
「Hello World2」の表示座標について、これはメモリ(プログラムではDPX,DPYで定義)にあらかじめ座標を入れてやらないといけない。設定しなければ、そのままシステムが表示していた続きの位置に表示されるだけだ。
そして肝心の文字列データへのポインタはXレジスタが押さえる事となる。この…内部メモリにあるレジスタへのロードは、もっと簡単に書けないんだろうか…。XYレジスタを使うコードが多いと思うんだけど、レジスタにロードするだけでこんなに書くのではたまったものではない…。きっと何か定石があるんだろうな…と思いつつ、今は冗長なコードを書く自分(T-T)
文字表示処理
今回の主役、1文字表示ルーチンが、外部ROMにある$E983(PUTC)だ。ここにはとっても疑問が生じていた。果たして…これを呼び出した後、どのレジスタが壊れていてどれが壊れていないのかが分からないのだ。保護すべきレジスタが分からない限り、続きを書いていくのはちょっとキケンだ。
しかしこういう時こそ環境を作ったパワーが発揮される。PUTCを呼び出すコードを書いて、デバッガ上でステップ実行してやれば一発で分かる。レジスタの値を見ておいて、ステップした瞬間にどれが壊れるのかを見れば良いだけだ。
そしたら…困った事にXレジスタが壊されていた…。えーこれはどうしたらいいの?(T-T)
幸い、内部ROMにXレジスタをPUSH/POPする関数があったので、今回はこれを利用する事にした。スタックが極端に少ないアーキテクチャである事は理解してるんだけど、常時使うものがポンポン破壊されたのではメモリも食うしパフォーマンスも上がらない。
うーん、これって……普通なの?(T-T)
そしてもうひとつ困った事が。
驚いた事が…1文字表示ルーチンを呼び出しても、カーソル座標が更新されない!自前で更新してやらないといけないらしい。うーん…これもはっきり言って相当面倒。きっとカーソルを更新する1文字表示ルーチンのエントリがどっかにあると思うんだけどな。
そして動いたHello World2!
動くには動いたものの、Hello World1に比べてもサイズが大きくなってしまった。
前回のプログラムが44バイトだったのに対し、今回は64バイト!
慣れていない分、どうしてもコードが冗長になってしまう(T-T)
これはいつかパパッと組めるようになるモノなのかなぁ…。
次はグラフィクスでHello Worldを…と思っているが、気持ちが折れそうwww
いやもう少し頑張る(自分を追い込むパターンw)
ではまた次回!(^-^)ノ