更新日: 2011 年 11 月 15 日
060pcr5.x の説明
説明
060pcr5.x の添付ドキュメントです。末尾に記載されている連絡先は無効です。
060pcr5.doc
────────────────────────────────────
060pcr5 for 060turbo
1997 by M.Kamada
────────────────────────────────────
このプログラムは 68060 の内部の store/load bypass の可否を変更するもの
です。
> 060pcr5 1
store/load bypass を禁止します
> 060pcr5 0
store/load bypass を許可します
────────────────────────────────────
68060 の F43G および G65V マスクセットの store/load bypass にはエラッ
タがあり、キャッシュ禁止の I/O ポートにロングワードサイズのデータを書き
込み、すぐに同じアドレスから読み出すと、I/O ポートから読み出す代わりに書
き込んだデータを使用されてしまうことがあります。store/load bypass を禁止
することで、このエラッタを回避することができます。
────────────────────────────────────
例: 故意にエラッタを発生させるプログラム
┌────────────────────────────
│main::
│ lea.l $00E82400,a0 ;ビデオコントローラ
│ move.l (a0),d1
│ or.l #$80008000,d1
│ bsr sub
│ move.l (a0),d1
│ or.l #$80008000,d1
│ bsr sub
│ rts
│
│ .align 16
│sub:
│ move.l d1,d0
│ move.l d0,(a0)
│ move.l (a0),d1
│ move.l d1,d1
│ rts
この例では、ビデオコントローラのメモリモードのポートを故意にロングワー
ドサイズでアクセスしています(本来はワードサイズです)。メモリモードが 3
のとき、$00E82400 からロングワードで読み出すと、$00030003 という値が返り
ます。これに $80008000 を or して $80038003 としてから書き込むと、次に読
み出したときは $00030003 に戻っています。これは、このポートの最上位ビッ
トに 1 を書き込んでも読み出される値が 0 であるためですが、これを 68060
でやると $80038003 が返されることがあります。
つまり、キャッシュ禁止の領域であるにも関わらず、実際にデータを読み出さ
ずに直前に書き込んだデータをそのまま返してしまっているのです。これは
68060 の store/load bypass のエラッタです。store/load bypass を禁止する
ことで、このエラッタを回避することができます。
幸い、X68030 では、書き込んですぐに読み出したデータが変化している可能
性があるのは VRAM を除く I/O ポートだけで、それらは普通はロングワードサ
イズでアクセスしないので、エラッタの影響はほとんどないと思われます。DMAC
レジスタの MAR/DAR/BAR はロングワードサイズですが、書き込んですぐに監視
するようなことをしないと思います。強いて言えば、メモリチェッカの類に影響
が出る可能性があるかもしれません。
────────────────────────────────────
060pcr5 の配布は特に制限しませんが、68060 を使っていなければ無意味です。
(EOF)