2019-07-14 18:21 — asano
カテゴリー:
予告どおり富士通のMB8861, MB8870です。
MB8861はMotorola MC6800の相当品ですが、いくつか独自の命令が追加されています。これは1979年製のようですね。
パッケージは中央に大きな円と下側に溝のある富士通独特の特徴あるスタイルです。今回は国内調達したのであまり心配はないのですが、海外からだとこのパッケージは(ニセモノの可能性が低いということで)安心材料の一つといえそうです。
さて、追加された命令の詳細を知りたいところなのですが、富士通のデバイスはデータシートの入手が難しいことが多く、このMB8861も入手できていません。ハード的にはMC6800と差し替え可能ということで、「リンク」に挙げたサイトの情報と実験をもとに動かしていきます。
もう一つのMB8870はMotorola MC6802の相当品です。これもMB8861と同様の命令が追加されています。
1987年製のようですから上と時期がだいぶ違っていますがパッケージのスタイルは変わっていません。表記は左上にまとまっていて、MB8877とそっくりです。
さて、これらを入手した目的はCPU判定ルーチンを書きたいことでした。当然のことながら動かさなければ話になりません。
まずMB8861はMC6800と置き換え可能なのでSBC6800に載せてみます。現状の判定ルーチンはMC6800と判断しました。MC6801の追加命令を持っていないので当然といえばいえますが、MC6800の未定義命令がMB8861で同じ動作をする保証はありませんので一安心です。これで現行ルーチンでMC6800と判断したあとMB8861を判定すればよいことがわかります。
次にMB8870はMC6802と置き換え可能なので、1820-2151下駄を使ってSBC6800に載せました。
こちらも問題なく動作しMC6800と判定されています。
それではMB8861の判定方法です。追加された命令の中でメモリへのアクセスのない(使いやすい)命令を探すと$ECのADX #Imm
(X+Imm → X)が候補に挙がります。これはMC6800ではどんな挙動をするのでしょう。付近の未定義命令の傾向からCPX n,X
(X - (X+n))が予想され、試してみると実際そのようです。
47/ E02C : CE 55 AA LDX #$55AA
48/ E02F : C6 64 LDAB #100
49/ E031 : 86 05 LDAA #5
50/ E033 : 8B 05 ADDA #5
51/ E035 : 18 FCB $18 ; DAA on 6800, ABA on 6803, XGDX on 6303
52/ E036 : 81 55 CMPA #$55
53/ E038 : 27 1F BEQ ID_6301
54/ E03A : 81 6E CMPA #110
55/ E03C : 27 14 BEQ ID_6801
56/ E03E : 81 10 CMPA #$10
57/ E040 : 26 25 BNE ID_UK
58/ E042 :
59/ E042 : CE FF FF LDX #$FFFF
60/ E045 : EC 01 FCB $EC,$01 ; CPX $01,X on 6800, ADX $01 on MB8861
61/ E047 : 8C 00 00 CPX #$0000
62/ E04A : 27 14 BEQ ID_8861
57行目までは前回と同じ(最後の条件分岐の論理を反転したのみ)です。MC6800判定の場合に59行目からの追加部分に入ります。
MC6800の場合は60行目でXの値と(X+1 = 0)番地の内容を比較します。0番地の内容は不定なのでフラグも不定になりますが、Xの値は変更されません。
MB8861の場合はXに1が加算されXが0になるため、61,62行目でXが0になったことを調べて分岐します。
MB8870も同様で、MB8861とMB8870の判別はMC6800とMC6802が判別できないように無理なのではないかと思います。
Comments
MB8861の拡張命令が原因でトラブルの経験があります
はじめまして。大昔に仕事でMB8861を少しいじっていた者です。http://radiopench.blog96.fc2.com/
昔、出張先の同僚から突然の電話。「原因不明のバグが発生して困っている。どうもADX命令の挙動が何か変。ついてはこれこれのアセンブラ命令を実行した時の結果がどうなるか至急調べてくれないか?」。その時の命令が確かADX #
早速やってみたけど問題無し。その旨連絡してその時はそれで終わり。
後日聞いてみると、問題が発生していた基板に載っていたのは何とMC6800。同僚を含んでこっちはMB8861と思っていたので、「そりゃそうだ」となって原因判明。
この記事読んで昔のこんな経験を思い出しました。
ちなみに、ほうめいさんのツイッッター読んでこちらのサイトに来ました。そっちにレス入れればいいのですが、私はツィッターやらないものでこちらコメント入れてます。
Re: MB8861の拡張命令が原因でトラブルの経験があります
こういうことがあるのでこの手の独自拡張命令は使いづらいですね。
μPD8080Aが嫌われたのも似たようなことではないかと思っています。
ハード的には交換可能なのでハード屋さんがよく考えずに切り替えちゃったとかですかね?
MB8861追加命令について
初めまして
MB8861の追加命令の資料持っています。
よかったら追加命令のページをお送りしましょうか。
Re: MB8861追加命令について
ありがとうございます。
よろしければ「ご意見・ご要望」から連絡いただければ直接やり取りできます。
Add new comment