現在地

MB8861 と MB8870


予告どおり富士通のMB8861, MB8870です。

MB8861H
MB8861はMotorola MC6800の相当品ですが、いくつか独自の命令が追加されています。これは1979年製のようですね。

パッケージは中央に大きな円と下側に溝のある富士通独特の特徴あるスタイルです。今回は国内調達したのであまり心配はないのですが、海外からだとこのパッケージは(ニセモノの可能性が低いということで)安心材料の一つといえそうです。

さて、追加された命令の詳細を知りたいところなのですが、富士通のデバイスはデータシートの入手が難しいことが多く、このMB8861も入手できていません。ハード的にはMC6800と差し替え可能ということで、「リンク」に挙げたサイトの情報と実験をもとに動かしていきます。

MB8870H
もう一つのMB8870はMotorola MC6802の相当品です。これもMB8861と同様の命令が追加されています。

1987年製のようですから上と時期がだいぶ違っていますがパッケージのスタイルは変わっていません。表記は左上にまとまっていて、MB8877とそっくりです。

さて、これらを入手した目的はCPU判定ルーチンを書きたいことでした。当然のことながら動かさなければ話になりません。

まずMB8861はMC6800と置き換え可能なのでSBC6800に載せてみます。現状の判定ルーチンはMC6800と判断しました。MC6801の追加命令を持っていないので当然といえばいえますが、MC6800の未定義命令がMB8861で同じ動作をする保証はありませんので一安心です。これで現行ルーチンでMC6800と判断したあとMB8861を判定すればよいことがわかります。

次にMB8870はMC6802と置き換え可能なので、1820-2151下駄を使ってSBC6800に載せました。

この下駄、しばらく前から動作しなくなっていて1820-2151を壊したかと心配していたのですが、今回チェックして断線箇所を発見・修理しました。1820-2151も無事でしたし、MC6802でも確認しました。

こちらも問題なく動作し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が判別できないように無理なのではないかと思います。


コメント

はじめまして。大昔に仕事でMB8861を少しいじっていた者です。http://radiopench.blog96.fc2.com/

昔、出張先の同僚から突然の電話。「原因不明のバグが発生して困っている。どうもADX命令の挙動が何か変。ついてはこれこれのアセンブラ命令を実行した時の結果がどうなるか至急調べてくれないか?」。その時の命令が確かADX #
早速やってみたけど問題無し。その旨連絡してその時はそれで終わり。

後日聞いてみると、問題が発生していた基板に載っていたのは何とMC6800。同僚を含んでこっちはMB8861と思っていたので、「そりゃそうだ」となって原因判明。

この記事読んで昔のこんな経験を思い出しました。

ちなみに、ほうめいさんのツイッッター読んでこちらのサイトに来ました。そっちにレス入れればいいのですが、私はツィッターやらないものでこちらコメント入れてます。

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
※ コメントは原則公開です。個別のご相談などは「ご意見・ご要望」からお願いします。