現在地

SL1960の判別


カテゴリー:

Z8S180 SL1960の最後で判別する方法を探すと書きましたが、とても簡単でした。

1992年の"Volume I Databook"にはZ80180とZ8S180の違いの記載があり、まだ新版が出るはるか前なので、Z80180(HD64180Z)とZ8S180 SL1960の相違点がわかります。

一方テクニカルノートTN005301-0506にはSL1960と新Z8S180の相違点が載っています。

この2つを参考にSL1960の判定を追加してみました。以下のコードはOMCRによってZ80180以降と判定されたところからです。

     207/     1A2 :                     	;; HD64180Z
     208/     1A2 :                     ID_180Z:
     209/     1A2 : 3E 40               	LD	A,OMCR_V
     210/     1A4 : ED 39 FE            	OUT0	(IOBASE+3EH),A
     211/     1A7 : AF                  	XOR	A
     212/     1A8 : ED 39 D2            	OUT0	(IOBASE+12H),A
     213/     1AB : ED 38 D2            	IN0	A,(IOBASE+12H)
     214/     1AE : E6 40               	AND	40H
     215/     1B0 : 28 1D               	JR	Z,ID_Z8S	; Z8S180 (SL1919) detected
     216/     1B2 :                     
     217/     1B2 : AF                  	XOR	A
     218/     1B3 : ED 39 DF            	OUT0	(IOBASE+1FH),A
     219/     1B6 : ED 38 DF            	IN0	A,(IOBASE+1FH)
     220/     1B9 : B7                  	OR	A
     221/     1BA : 28 07               	JR	Z,ID_1960	; Z8S180 (SL1960) detected
     222/     1BC :                     	
     223/     1BC : 21 90 0A            	LD	HL,IM180Z
     224/     1BF : 3E 02               	LD	A,02H
     225/     1C1 : 18 3F               	JR	IDE

211,212行では念のためASCI Extension Control Register(ASEXT0)を初期状態に戻しておきます。

ASEXT0は新版Z8S180から追加されたレジスタで、Z80180とSL1960では常に0FFHが読み出されます。新版Z8S180ではビット6~2は書き込んだ値がそのまま読み出されるので、213~215行でビット6をチェックして0なら新版Z8S180と判定します。ここまではこれまでと一緒です。

217,218行ではCPU Control Register(CCR)を初期値00Hに戻しておきます。

CCRはZ80180にはありませんが、旧版Z8S180(=SL1960)で追加されたレジスタです。これはZ80180では常に0FFHが読み出され、Z8S180では書き込んだ値が読み出されます。219~221行では00Hが読み出されたらZ8S180 SL1960と判定します。

CCRは新版でも00Hになるので、ASEXT0とCCRの順番は重要です。

どちらの条件にも当てはまらなければ(223行以下)Z80180です。

ちなみにASEXT0もCCRも未対応プロセッサで読んだ場合に0FFHが読み出されるというのは手持ちの実物で確認したのみで、マニュアルなどでは明確に規定されている箇所は見つけられませんでした。0の確認だけでなく1にできることをチェックしたほうがより確実だと思いますが、ASEXT0はともかくCCRのビットには1にすること自体にリスクがあります。

CCRのビット7はクロックの分周で、1にするとクロックが倍になりますが、私の環境ではこれを1にするとハングアップしてしまいます。

ビット6,5,3はSLP命令実行しなければ害はなさそうです。

ビット4,2,1,0は1にすると外部ピンのドライブを下げるのでハードウェア構成によっては正常な動作をしなくなるかもしれません。

誤判定の実例が見つかれば別ですが、当面は初期値の00Hを書いておくのが無難かなと考えています。

参考文献・関連図書: 
”Volume I Databook Microprocessors and Peripherals 1992", DC-2610-01, Zilog.
"Differences between Standard Z8S180 and SL1960 Revision", TN005301-0506, Zilog.

コメントを追加

Plain text

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