「スーパーバイザーモード」という響きに、何か中二病的な魅力を感じますが、 これは「ユーザーモード」と対をなす、68000CPUの動作状態のことです。
「特権モード」とも呼ばれ、ユーザモードにかかっている制限を受けない、 68000CPUの真の実力を発揮できるモードと考えておけばよいでしょう。
_SUPER equ $ff20
clr.l -(sp)
DOS _SUPER
move.l d0,(sp)
:
DOS _SUPER
addq.l #4,sp
スタックにロングワードでゼロを積んで、DOSコール _SUPERを呼び出すと、 スーパーバイザーモードになります。
コール後にd0レジスタに戻ってきた値(前のSSP)は、後でユーザモードに戻すときに使います
どこかに保存しておくのですが、ちょうどスタックトップに先程ゼロを積んでいた場所があるので、 そこに置くと良いです。スタック補正は、敢えてしません。
2回めの_SUPERでは、スタックトップに先のSSP値が残っていますので、 そのままDOSコールを行い、その後にスタック補正をしています。
ユーザーモードのプログラムは、アクセスできるメモリ範囲に制限があります。 具体的には、OSがロードされている場所やそのワークエリア、それにVRAMやIOポートのアドレスです。
プログラムでこのあたりにアクセスしたいときには、DOSコールやIOCSコールを使うこともできます。
ただ、ゲームプログラムで頻繁にVRAMをアクセスするときには、システムコールを介さず直接操作したほうが効率的で、 また、X68000を使いこなしている感が強く得られます。
必要な場面で一時的にスーパーバイザーモードに切り替えるか、 終始スーパーバイザーモードで動作するかは、プログラマの判断です。
なお、割込み処理は自動的にスーパーバイザーモードですので、切り替え不要です。
このほか、スーパーバイザーモードでしか実行できない命令(特権命令)という、中二病万歳な機能がありますが、 ゲーム制作に必須ではないので割愛します。
Copyright©2026 カピバラ父さん