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

f:id:PocketGriffon:20201015214539j:plain

HC-88というマシンに惹かれるところ

先日からV20エミュレータの開発作業を中断して、HC-88にドハマりしている。

HC-88というマシンの、いったいどこにそんな魅力を感じているのか…をちょっと書いてみようと思う。

 

まずひとつにZ80+CP/M80という、とても使いやすいマシン構成が気に入っている。これはHC-40にも言える事なんだけど、根底にCP/MというOSが載っている事の安心感は凄まじい。使い方で困った時にはCP/Mまで立ち戻れば、解決出来ない事はほとんどない。その上でどう使うか…を楽しめるのだ!

 

もうひとつ、HC-40と大きく違う点は画像周りを別CPUが管理している点がある。これはFM-7やFP-1100を想像してもらえれば大体あってる。サブCPUが使えるメモリはFM-7ほど大きくないがFP-1100ほど小さくもない、速度はFM-7 > FP-1100 > HC-88と最も遅いと思われる。

こんなワケの分からない構造……楽しくて仕方が無いじゃないか!(^-^) 資料も少なく解析のしがいがあるっていうのも大きな魅力だろう。

 

とどのつまり、謎パーが大好きな私にマッチしてるってのが一番なのかもしれない。

複雑すぎず簡単すぎず、適度に遊べるマシンというのは本当に楽しい。

HC-88ではやりたいことがはっきりしているので、それをやるまでは頑張ってみるつもり。

 

6301CPUの制御プログラム

HC-88のスレーブCPU(PX-8ではSlaveCPUと呼ばれてるっぽいが日本の書籍ではサブCPUが一般的…どっちにあわせたらいいのさ…orz)を制御しているプログラムがある。

6301CPUのメモリマップ$F000から4KBに収まっている。6301が担当している処理を考えると驚異的に小さい気がするんだけど、ホントに???

それも含めて確かめるために、6301CPUで動いてるプログラムを解析したい。

 

それでメモリをダンプするプログラムを作っていた。当初からの目的は6301CPUのプログラムを覗く事だったのだ!BIOSコマンドのSLAVE機能を使えば、6301CPUのメモリを覗くことが出来る。これを利用すれば簡単だ。

 

で…問題は、その覗けたプログラムを、どうやってホスト側に持ってくるのか…という事だった。RS-232Cでの通信は、Mac→HC-88は問題ないのだが、なぜか逆(HC-88→Mac)が失敗してしまうのだ。これが成功していればとても簡単に転送出来たのだが…無いものは仕方が無い!

というわけで…画面に表示したバイナリデータを手で入力した!!!(^-^;;

プログラムは$F000〜$FFFFの4KBと分かっていたので、そんな大きな労力じゃない。たったの4096バイトだ!でも入力し間違いは避けられないので、ダンププログラムにチェックサム機能を付けたw

f:id:PocketGriffon:20201015221404j:plain

ホスト側ではテキストデータとして入力していき、それをバイナリに変換する時にチェックサムを確認するプログラムを作った。これでかなりの確率で間違いがなくせたはずだ!

 

昔むかしその昔、I/Oなどに載っていたバイナリダンプを入力する時に、マシン語入力ツールなるモノを利用していた。一番古くは、中村光一氏がI/Oに投稿していたマシン語モニタを利用した。仕組みが理解出来てからは、自分が使うマシン用に自作しまくった。

その時にテンキーを16進数のA〜Fに見立てて入力をする事をしていた。当時はタッチタイプなんぞ出来なかったので、一本指打法の王道として有効な方法だと思う。

それがここ数年、何度となくダンプリストを打ち込んでいるのだが、両手でタッチタイプしながら打ち込む方が圧倒的に早いのだ。昔は256バイト打ち込むのに10分くらい掛かっていた記憶があるのだが、今だと256バイトに3分掛からない。間違いを修正して5分前後だ。そんな感じだったので4KBというのはワリと現実的なサイズだった。

 

6301CPUのアセンブラ表記

私は6301というCPUを使った経験が無い。6301が6800とマシン語レベルで互換性がある…という事を知ったのも、ここ数年の間だ。そんな状態だったので手元に資料が全く無いわ…と思っていた。

 

そしたら……HC-20のCPUが6301だった!6301と聞いてピンと来ていない辺り、HC-20を使いこなせていないのがバレバレだ(TOT)

f:id:PocketGriffon:20201015223111j:plain

↑いつかちゃんと使おうと思って、マシン自体は持っているのだ。でもHC-40/88が楽しいので、HC-20を使うか…と聞かれたら、ちょっとだけ疑問(^-^;;

 

HC-20だったら本持ってる!

f:id:PocketGriffon:20201015223215j:plain

なんと!しっかりと「6301プログラミング」と書いてあるじゃないか!

これを参考にしながら、6301の逆アセンブラを作ってみた。

f:id:PocketGriffon:20201015223951j:plain

2パス逆アセンブラになっているけれども、2パス目をまだ手抜きで作っているので、せっかくプログラムコードとデータを分離しているのに、ちゃんと表示されない(^^; これからもう少し解析を進めていきつつ、機能を充実させていくつもり。

 

よーし、これでしばらくは解析時間に入るよ!

この先、6301用のプログラムを組むって考えたらアセンブラをなんとかしないといけないかもなぁ…小さいうちはハンドアセンブルでいいか。この時代にハンドアセンブルする?(^^;

こっちもさくっとアセンブラ作ろうかな…。

 

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