ASに新CPU対応を(その4)
モニタも動いてこれまでに実装済みのMN1610命令に問題無いことがわかり、時間にも余裕が出てきたので、残りのMN1613拡張命令も一気に実装してしまいました。
MN1613で追加された命令にはパースの面倒なアドレッシングなどは無く、命令の数が多いだけの単純作業に近かったですね。
一段落したので現時点のファイル(asl-patch-20191120.tar_.gz)を添付しておきます。
ビルド方法
モニタも動いてこれまでに実装済みのMN1610命令に問題無いことがわかり、時間にも余裕が出てきたので、残りのMN1613拡張命令も一気に実装してしまいました。
MN1613で追加された命令にはパースの面倒なアドレッシングなどは無く、命令の数が多いだけの単純作業に近かったですね。
一段落したので現時点のファイル(asl-patch-20191120.tar_.gz)を添付しておきます。
ビルド方法
あれから作者の方と連絡とって質問したり、ID番号もらったり...
軽い気持ちで始めたのですが、ここまできたら本家への追加を目指そうかな。
code***.c
を参考に推測・試行錯誤した結果です。全体を理解して書いているわけではないので、間違っていたり作者の意図しない使い方をしたりしているかもしれません。ご了承ください。
前回厄介と書いたメモリに関係する L
, ST
, B
, BAL
, IMS
, DMS
の各命令も使えるようになりました。これらをデコードする DecodeAdr
は長いのでゼロページ間接インデックス(MN1610で一番複雑)を例にみてみます。
昨日に引き続きASのMN1610対応についてです。
code***.c
を参考に推測・試行錯誤した結果です。全体を理解して書いているわけではないので、間違っていたり作者の意図しない使い方をしたりしているかもしれません。ご了承ください。
前回の SwitchTo_MN1610()
の最後で呼び出していた InitFields()
です。
SC/MPボードにUniversal Monitorの移植を始めたのですが、前にも書いたように癖が強くて大変です。
そこで移植をしていて「げっ」と思ったことを書いてみたいと思います。
導通チェッカはPN接合がオンしない低電圧で測るのがウリですが、普通のテスタだとどうなるのか試してみました。
事の発端はダイオードの順方向電圧を測ろうとしたときのことです。テストリードのどちらがプラスなのか念のため電圧を測ってみました。
ついでに抵抗測定モードも見たのですが、300mV程しかかかっていません。これなら普通のテスタでもいけるのではないでしょうか。
ということで手元にあった2つのテスタと導通チェッカの電圧をチェックしてみました。各レンジで100Ω, 1kΩ, 10kΩ, 100kΩおよび開放時の電圧を測っています。
68編に引き続き80編をお送りします。
8080系とZ80系の区別は『I/O』誌の記事を参考にしました。i8080/μPD8080AF, μPD8080A, i8085の判別法は一般的なものがあれば利用するつもりでしたが、見当たらなかったのでデータシートを元に独自に書いたものです。
現在のCPUではその種類や対応する命令の範囲などを取得する命令(例えばx86系のCPUID命令)がありますが、以前は微妙な挙動の違いなどから判別していました。
自作のUniversal Monitorのソースコードを例に解説してみます。
まずは昨日目処が立ったと書いたMC6800系からです。
該当部分のソースは次のようになっています。
これまでAVRのソフトウェア開発はAVRAを使ってきました。文法が純正アセンブラとほぼ一緒で、NetBSD上で使えるのがその理由でした。
最近 8080, Z8, MC6800, MC6809 などで共通に使えるという理由で The Macroassembler AS を使うことが増えてきました。Z80 も容易に移行できたので、AVR もこの際統一しようとやってみたので引っかかった点などを書いてみようと思います。
題材は、ROMエミュレータのメモリ編集ルーチンの製作中のボードへの移植です。製作中のボードについてはある程度形になったところで取り上げようと思います。
テープ時代のメモの記事でオートスタートに触れたのでその仕組みを書いてみます。
PC-8001でバイナリ(いわゆるマシン語)のプログラムをテープから読んで実行するには普通次のようにします。
mon
*L
*GD55B
ここで「*
」はプロンプトなので入力はしません。
「mon
」コマンドでマシン語モニタに入り、「L
」でテープからロードし、「G
」で実行します。「D55B
」は実行開始アドレスです。
「mon
」「L
」は不変なので憶えられますが、実行開始アドレスはプログラム毎に異なるので面倒です。そこで市販ソフトウェアを中心にこのオートスタートのテクニックが使われました。