ノウハウ・テクニック

ASに新CPU対応を(その4)

2019-11-21 18:41 — asano

モニタも動いてこれまでに実装済みのMN1610命令に問題無いことがわかり、時間にも余裕が出てきたので、残りのMN1613拡張命令も一気に実装してしまいました。

MN1613で追加された命令にはパースの面倒なアドレッシングなどは無く、命令の数が多いだけの単純作業に近かったですね。

一段落したので現時点のファイル(asl-patch-20191120.tar_.gz)を添付しておきます。

ビルド方法

ASに新CPU対応を(その3)

2019-11-14 00:08 — asano

あれから作者の方と連絡とって質問したり、ID番号もらったり...
軽い気持ちで始めたのですが、ここまできたら本家への追加を目指そうかな。

以下は既存のcode***.cを参考に推測・試行錯誤した結果です。全体を理解して書いているわけではないので、間違っていたり作者の意図しない使い方をしたりしているかもしれません。ご了承ください。

前回厄介と書いたメモリに関係する L, ST, B, BAL, IMS, DMS の各命令も使えるようになりました。これらをデコードする DecodeAdr は長いのでゼロページ間接インデックス(MN1610で一番複雑)を例にみてみます。

ASに新CPU対応を(その2)

2019-11-10 15:38 — asano

昨日に引き続きASのMN1610対応についてです。

以下は既存のcode***.cを参考に推測・試行錯誤した結果です。全体を理解して書いているわけではないので、間違っていたり作者の意図しない使い方をしたりしているかもしれません。ご了承ください。

前回の SwitchTo_MN1610() の最後で呼び出していた InitFields() です。

ASに新CPU対応を(その1)

2019-11-09 23:03 — asano

なんか大昔のI/O誌の特集みたいなタイトルですが...

The Macroassembler ASは対応しているCPU多いのですが、先日のMN1613など対応していないものもあります。他にも手持ちのCPUで非対応のものにZ8001, NS32016, HD1-6120, HD642032なんかもあります。

日本独自のMN1613やHD642032(TRON-Chip)はともかく、Z8000(Z8001), NS32000, IM6100(HD1-6120)などは知名度も高いんですけどね。

テスタの抵抗測定時の電圧

2019-08-02 23:59 — asano
カテゴリー

導通チェッカはPN接合がオンしない低電圧で測るのがウリですが、普通のテスタだとどうなるのか試してみました。

事の発端はダイオードの順方向電圧を測ろうとしたときのことです。テストリードのどちらがプラスなのか念のため電圧を測ってみました。

昔のアナログテスタではCOM(黒)側がプラスなのが一般的で、ディジタルではCOM側がマイナスなのが普通です。

ついでに抵抗測定モードも見たのですが、300mV程しかかかっていません。これなら普通のテスタでもいけるのではないでしょうか。

ということで手元にあった2つのテスタと導通チェッカの電圧をチェックしてみました。各レンジで100Ω, 1kΩ, 10kΩ, 100kΩおよび開放時の電圧を測っています。

CPU判別法(80編)

2019-07-10 12:55 — asano

68編に引き続き80編をお送りします。

8080系

8080系とZ80系の区別は『I/O』誌の記事を参考にしました。i8080/μPD8080AF, μPD8080A, i8085の判別法は一般的なものがあれば利用するつもりでしたが、見当たらなかったのでデータシートを元に独自に書いたものです。

CPU判別法(68編)

2019-07-09 22:59 — asano

現在のCPUではその種類や対応する命令の範囲などを取得する命令(例えばx86系のCPUID命令)がありますが、以前は微妙な挙動の違いなどから判別していました。

自作のUniversal Monitorのソースコードを例に解説してみます。

MC6800系

まずは昨日目処が立ったと書いたMC6800系からです。

この系統はあまり情報が無く(旬な時期にあまりかかわらなかったのも理由です)手持ちのデバイスで試しながら書いたものです。

該当部分のソースは次のようになっています。

AVRA から AS へ

2019-04-04 23:40 — asano
カテゴリー

これまでAVRのソフトウェア開発はAVRAを使ってきました。文法が純正アセンブラとほぼ一緒で、NetBSD上で使えるのがその理由でした。

最近 8080, Z8, MC6800, MC6809 などで共通に使えるという理由で The Macroassembler AS を使うことが増えてきました。Z80 も容易に移行できたので、AVR もこの際統一しようとやってみたので引っかかった点などを書いてみようと思います。

題材は、ROMエミュレータのメモリ編集ルーチンの製作中のボードへの移植です。製作中のボードについてはある程度形になったところで取り上げようと思います。

PC-8001 テープからのオートスタート

2018-11-19 21:07 — asano
カテゴリー

テープ時代のメモの記事でオートスタートに触れたのでその仕組みを書いてみます。

PC-8001でバイナリ(いわゆるマシン語)のプログラムをテープから読んで実行するには普通次のようにします。

mon
*L
*GD55B

ここで「*」はプロンプトなので入力はしません。

mon」コマンドでマシン語モニタに入り、「L」でテープからロードし、「G」で実行します。「D55B」は実行開始アドレスです。

mon」「L」は不変なので憶えられますが、実行開始アドレスはプログラム毎に異なるので面倒です。そこで市販ソフトウェアを中心にこのオートスタートのテクニックが使われました。