更新日: 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)