IOCS _ADPCMAOT、IOCS _ADPCMLOTを実行してDMACの一部のレジスタの値を表示します。
DMACのレジスタの値を確認するためのものですが、手抜きでDMAを動作させるのに
IOCSコールを使っているのでADPCMドライバなどは組み込んでいない状態で実行してください。
ユーザーモードにおいて、メインメモリ末尾-2のアドレスからロングワードサイズで読み込みを行い
バスエラーを発生させます。
M68000は16ビットバスなので、メインメモリの容量が$00Y0_0000のとき以下のような挙動になります。
- メインメモリ末尾-2(
$00Xf_fffe)から1ワード読み込む → 成功 - メモリ未実装アドレスまたはGVRAM(
$00Y0_0000)から1ワード読み込む → バスエラー発生
ただし拡張エリアセットやMMUによりメインメモリの末尾付近がスーパーバイザ保護されている場合は、 1.の時点でバスエラーが発生します。
RTCの挙動の違いを利用して、実行環境が実機かエミュレータかを判別します。 エミュレータはバージョン検出ポートとWINDRVを無効にしたXM6gが対象です。
XEiJは0.26.02.08まではプログラムが終了しませんでしたが、0.26.02.11 TESTでRTC ALARM 1Hz/16Hz が実装され実機と同等の挙動となったため実機として判定されます。
XM6 TypeGはversion 3.38で実機と同等の挙動となったため実機として判定されます。
movem.l (a0)+,a0命令を実行し、実行前後のa0レジスタの値を表示します。
afterの値 = before+4なら正常で、それ以外(5など)の場合はエミュレータのMPUコアに不具合があります。
run68の-fオプションの動作確認用に作成した、
ほとんどのDOSコールを呼び出すだけの特に機能を持たないツールです。
途中でコンソールからの入力待ちがあるのでリターンキーを何度か押してください。
Warning
実行しても害はないと思いますが、確実ではない(保証できない)ので、 普段使っているシステムでは実行しないこと!
SRAMに保存されているメインメモリ容量($00ed0008)を1MB少ない値(メインメモリ1MBの場合は2MB) に書き換え、書き換え前後の値を表示します。
エミュレータによってはメインメモリ容量を設定に合わせて動的に補正するものがあり、 その場合はSRAMの値が書き換わりません (そのような環境ではSRAM用のメモリチェッカーでデータ異常が検出されるでしょう)。