HC-88でプログラミング! その8

ゼロページの使用状況は?!

6301(6800)アセンブラの準備も出来たし、さっそく自作プログラムから直接画面を制御するプログラムを書いていこう!

…と思ったけれども、まだ調べないといけない事がいくつか残ってる…。

 

6301で少しでも高速なプログラムを書こうと思ったら、ダイレクトアドレッシング(ゼロページアクセス)が非常に重要らしい。もちろんゼロページが使えなくてもプログラムは組めるが、ほとんどの命令がゼロページアクセスならば1サイクル少ないのだ。ここぞというところには積極的に利用したい。利用したいけど……システム側でガンガン使用しているはずなので、ユーザープログラムでどこを使って良いのかが分からないのだ。

 

そこで、6301CPUのROMを解析して、使われているゼロページの情報をまとめてみた。

f:id:PocketGriffon:20201024232648j:plain

めっちゃ見にくいけれども…

256バイトあるゼロページのうち、前半はメモリがそもそも載ってなくて(I/O領域)、後半の128バイトがRAM、さらにそのうちの赤の部分が未使用らしい場所だ。

現状だと9バイトが空いている…みたい。

「みたい」というのは、あくまでもソースをかるーく眺めて拾い出しただけに過ぎず、プログラムを深く追い掛けていない。プログラム内で何かやっているとしても拾い切れていない。

 

ちなみに青いのはスタック領域。スタックこれしか使ってないの??と思ったけど、どうも複雑な処理をする際にはRAM領域の$97CAに再設定されるらしい。どれだけのエリアが用意されているのか不明なので、ユーザープログラムを実行する際には、独自にスタックエリアを設定した方が安全かも。

 

f:id:PocketGriffon:20201024224748j:plain

実際に該当部分のメモリを見てみてると、なんだかデータっぽい数値が入ってしまっている…。きっとこれは使われてるww

ホントに使われていないかどうかは、破壊してみるしかないかもなー。

例えばシリアル通信は使わないから、その領域を拝借しちゃうとか、そういう姑息な手段をするために調査を進めていこうと思う!

 

あ、↑こんな感じでHC-88の液晶は綺麗になりました!

PX-8の液晶パネルを移植してますが、PX-8ってエムブレムはないんですね…。

 

6301に感じる違和感

なんとなく経験的に違和感を感じる部分です。

アーキテクチャ的にそういうもんだと理解するのが良いというのは分かってますが、やっぱり気になるので書いてみようかと(^^)

 

スタックの初期化で「LDS #$00FF」という値を見た時。

え?$0100じゃないの??ってのが直感的な感想(^^;

PUSHした時に「SPを-1してからメモリへ書き込み」をするのか、「メモリに書き込みした後にSPを-1するのか」という問題だと思うんだけど、後者は珍しい…というか私が知らないだけか??

これはエミュレータ作ろうとしたら真っ先にハマりそうな項目だったので、先に気が付いて良かった。あとスタックを利用したメモリクリアとかのテクニック使う時にもハマりそう。

なんにせよ理解しておく必要があったと思う!

 

割り込み禁止命令のSEI、割り込み許可のCLI

これも感覚的な話だと思うんだけど、SEIは割り込み許可なイメージがww

6301のブート後プログラムの最初に「SEI」が出てきた時の混乱と言ったらw

この先、どうしても割り込みを触るプログラムを作ると思うので、これも意識して使わないと逆に書いてしまいそう。

 

これから6301でプログラムを書いていけば、もっと違和感を感じる事が出てくるのかも知れないけど、それはもうアーキテクチャ的な違いとして覚えていくしかない(^^)

エンディアンが逆ってのもメモリマップを上から書くか下から書くかの違いだと思うし!

昔、1バイトが8ビットじゃないマシンとか、そもそもスタックポインタを持たないCPUなどを触ったことがあるので、それに比べたら6301は可愛い範囲です(^-^)

 

よーし、次回からプログラム書いてみるよ!

とっても楽しみ!

アセンブラデバッグもしなくちゃw

 

あ、アセンブラの作り方に関する質問?がDMにいくつか来ていまして、意外にも作り方に関する疑問が多いんだな…と思ったので、近日中にアセンブラを開発する手順などを箇条書きで書いてみるかもです!

 

ではまた次回!(^-^)ノ