解析用の環境も整ってきたので、HD61700のプログラムを組んでみよう!
そろそろ実機で動く何を作らないと、こんなだるだるな進み方のブログに付き合ってくださってる読者の皆さんに申し訳がないw
開発環境を整える!
解析を頑張ろうと思って逆アセンブラを作っている流れの中で、当初はアセンブラも自分用に開発するかーと考えていた。しかし…続々と出現する未定義命令の多さに困惑し、これはアセンブラ作るのも大変だよ…と思うように変化していった(^-^;
アセンブラを独自に作るのは諦めようと思ったが、可能であればMacだけで開発環境が完結するのが望ましい。Macで動くHD61700アセンブラを探してみたが、残念ながら見つける事が出来なかった。
仕方ないので、マクロアセンブラを活用することでそれっぽいコードを吐かせる事が出来ないかなぁ…とか検討してみたけど、どうもしっくりこない。
それに、素直に
LD $1,10
AD $1,$SX
と書くよりも
$1=10
$1++
などと書けても良いかも…とかも検討。
昔MZシリーズにあったBASEを移植(という名の新規開発)してみるのも面白いかも?
実はこれ、AI-1000のみならず、何度と無く検討しているのだが結局やっていない。
本来のニーモニックを覚えるチャンスを逃してしまいそうな怖さがある。せっかくレトロコンピュータを使っているのに、当時のニーモニックを使わないのは「超えてはいけない一線」のような気がしていて、SC61860の時にもギリギリまで検討してやめてしまった。
そんな事を考えていたら、このブログには何度と無く出てきている「BLOCKS」の作者から連絡があり、話の流れからHD61700アセンブラの話へ行き、最終的にあお氏が開発した「HD61700 CROSS ASSEMBLER」まで話が行き着いた。
……とか思っていたら!
今までまーったく気がついてなかったけれども、ソースがダウンロード出来るようになっていた!!!!
じゃあ…という事で、ソースをダウンロードし、Macでビルドしてみた。
gcc -O3 -o hd61 hd61700.c
warningは大量に出るものの、コンパイル自体は問題なく通った。
試しに小さなサンプルを書きアセンブルしてみたところ、動作も問題なし!
やった!! これは素晴らしいアセンブラが使えるようになったぞ!(^-^)
AI-1000へダウンロード!
hd61はいろんな形式で出力できる機能を持っている。これも便利だなー。
いつものパターンだと、BASICのDATA文にマシン語コードを入れておき、それをPOKEしまくる…という形式を利用するのだけれども、今回は先人の知恵を拝借してしまおうと思う!
先日、Amano氏が公開しているページにある「BLOCKS」というゲームがAI-1000に対応したとブログに書いた。
このローダーがものすごく良く出来てるのだ!DEFCHR$を用いた方法に脱帽…これよりも速い方法はバイナリを直接ロードする以外にないんじゃないだろーか??
クロスアセンブラといい、作者のあお氏には感謝しかない!(^-^)
さっそくMakefileへ組み込んで、make一発でQuickLoader対応のファイルが出力出来るようになった。
ROM内ルーチンの活用
なにかプログラムを組んでみようか…と思ったが、例のごとくとっかかりがない(^^;;
まずは画面になにか表示してみる!
ポケコンジャーナル1990年8月号にAIMON(こたちゃん氏作)がソース付きで掲載されていたので、まずはこのソースをじっくりと読んで見る事に。最初は全く見慣れなかったニーモニックも、逆アセンブラ開発で格闘したこともあって、少しずつ読めるようになってきた!
どうやら…AI-1000(というかPB系?)では表示方法にお作法があるみたい。
以下、なんとなく頭に出来たイメージを書いていくので、間違いがあったらごめんなさい。
画面に文字を表示するためには…
・テキストメモリにキャラクタコードを書き込む
・ROMルーチンDOTMKを呼び出してドットパターンへ変換
・ROMルーチンDOTDSを呼び出してLCDへ描画
…という感じっぽい。
ということは、変換されたドットパターンが格納されているアドレスに、独自のグラフィックパターンを送り込んで、DOTDSすれば任意の絵が描画される…ということか。
そしてそのドットパターンが入っているアドレスを調べていったんだけど…どうも納得が出来ない数字が出てきた。&H0201というアドレス。最後の1ってなんだろ??
先日、本体から抜き出したRAMデータも見てみたが、確かに&H0201からデータが入ってるっぽい。
PB-1000の、同じバッファは$6201にあるらしい。最初、この数字を見た時には「誤植か」と気にも止めなかったんだけど、どの資料を見ても$6201になってる。
なにか理由があるんだろうか…あるんだろうなぁ…うーん…(^^;;
とりあえず表示してみる!
そして細かいことは後回しにして、とにかく適当な絵を出してみたのが写真というワケ。
←これね
ここのプログラムだけを晒してみると、こんな感じ↓
もうコメントから言ってラフに書いてるの丸わかり(^^;
もっと良い方法があるのかも知れないけど、今はこれがMAXパワーって事で!
ところで…AI-1000へプログラムを転送すると、識別子がSになる。これをBASICファイルのBに変更する方法はないんだろうか…。いつもnameでファイル名変更→BASIC起動→LOAD"ファイル名"をしなくちゃいけなくて、段々面倒になってくる…(^^;;
なにか良い方法があったら教えてください。
ではまた次回!(^-^)ノ