ゆったりとしたペースで、SBC6809とその拡張版で遊んでいますが、これまでは、人の仕立ててくれたBASICを動かしたり、モニターがただただ動くのを確認して楽しんでいました。
I2Cのインターフェースをつけたりしたんで、実際に自分のプログラムを組んでみようと思いましたので、ちょっと真面目に開発環境を整理することに。
1. 実行環境
ハードウェアはSBC6809を拡張してRAM32k, ROM16kにしたのを使ってますが、ちょっとしたハードウェアの動作の確認をするには、BASICでPOKE, PEEK()することで一応できますので、そうしてます(かなり低速ですが、そもそも現代において6809は超低速なのでいいのだ)。
ただ、今後、アセンブラを超昔を思い出して書いてみようと思うのと、Cでプログラムを書いたりしようとすると、クロスアセンブラ、クロスコンパイラでアセンブル、コンパイルして作ったMotrola S-record をモニターで送り込んで実行。というのがいいと思いますので、それはこちらのモニタープログラムを使っていますが、他の方がされているようにモニターやその他便利プログラム、それから、私はBASICが好きなので、それを一緒に焼いたのを作ろうかなと思っているところです。BASICには、I2Cインターフェースをいじくるコマンドも実装していきたいと思っています。
2. アセンブラ
私は、Windowsを使っているんですが、DOS関係はどうもなじめないので、linux のコマンドラインツールで開発するのが好きです。というわけで、アセンブラは、こちらのas09を使うのですが、BASICのアセンブルをしようとしたところ、改行コードがCRLFだと文句を言われるのと、’A’のような定数の書き方がすんなりアセンブルを通りませんでしたので、小改造してそのままアセンブルできるようにしました。
(追補 18/4/12)
上のように書いたんですが、as09 は私のところでは、インデックスモードのアドレシング処理がおかしいという深刻なバグがあり、現在のところちゃんと使えていません。とりあえず、as9は大丈夫そうなので、下のas63か、as9を使うようにしようと思います。
(追補おわり)
これはS-recordを直接吐きますが、binaryファイルに変換する必要があるかも、ということで、こちらの変換ツールを入れていますが、まだ使ってません。
それと、HD6309も型番と動作が一致しない怪しい代物ですが、入手してあるので、6309のインストラクションのアセンブルができるものが欲しいな、ということで、こちらのアセンブラ(as63 v1.20T)をas09と同様に改行コードその他の文句を言われないよう改造してみました。それで、また、BASICをアセンブルしようとしたんですが、なんかオペランドが1byteに収まってないとか多量に文句を言われたので調べてみたら、BASICのソースの
TOK_USR EQU *-FUNC_TAB/2+$7F
のようなところのアドレスの計算がas09などはちょっと変な扱いをしているということがわかりました。本来は、*-FUNC_TAB/2+$7Fは、(*-FUNC_TAB)/2+$7Fをやりたいんだけど、*-FUNC_TAB/2+$7Fと書くと、as09では狙い通りの計算をしてくれちゃうんだけど、真面目な(?)アセンブラ(as63のような)では真面目に計算して、全然狙いと違った計算結果になっちゃうという。。。
ちょっと悩んだけど、ここは、BASICのソースをカッコを入れた計算式に修正することにしました。ひょっとすると、標準アセンブラの正しい所作がカッコなしの計算順序が「まちがった」ものである可能性もあるので、アセンブラ処理系の方はいじらないようにしようと思いました。
(追補 18/4/12)
as9のもとになった
http://eecs.vanderbilt.edu/Courses/ee218/Asman.html#2.2.3.7%20Operators
のマニュアルを見ると、
Expressions are evaluated left to right and there is no provision for parenthesized expressions. Arithmetic is carried out in signed two-complement integer precision (that’s 16 bits on the IBM PC).
と書いてあった。うわー、演算子の優先順位なしですか。。。
ラベルの計算でカッコはas9では正しく処理できないようです。というか、アセンブラのexpressionって完全処理系依存なのね。悲しい。
演算子の順番が謎なルールに従うのが抵抗ある。。。
(追補終わり)
多分、じきに悩んだことすら忘れちゃうと思うので、備忘録として。。。