新幹線を降りるとき座席のリクライニングを戻したり、 レンタルビデオテープを返すときに最後まで送ってから巻き戻したり、 公共施設に「来たときよりも美しく」という標語が掲げていたり。
日本人の道徳心なのか、自分の痕跡を残さない忍者の掟なのか、 借り物は元通りにして返すという習慣は、スムーズな社会生活を送る上で、 とても重要だと思います。
その姿勢は、コンピュータプログラミングにおいても通用します。
X68000の自作プログラムは、一般的には、Human68kのコマンドプロンプトから ファイル名を入力して実行されます。 コマンドプロンプトを使える画面の状態は、システムで定義された挙動のため、 見た目以上に色々な機能が有効になっています。
例えば、マウスの右ボタンを1回クリックすると、マウスカーソルが現れます。 さらにクリックすると、ソフトウェアキーボードが表示されます。
他には、キーボードのOpt.1とOpt.2を同時に押すと電卓が現れたり、 そもそも、カーソルキーが常時点滅しているのが、ゲームでは邪魔です。
こうした標準機能が、自作ゲームの動作中に動き出すとプレイに支障がでますので、 プログラムの初期化処理で抑制します。 このとき、これらの機能を管理しているIOCSやDOSに使用禁止を要請するため、 いくつかのシステムコールを使用します。
_CONCTRL equ $ff23 _TGUSEMD equ $0e _MS_INIT equ $70 _SKEY_MOD equ $7d move #18,-(sp) * カーソル非表示 DOS _CONCTRL addq.l #2,sp move #2,-(sp) move #14,-(sp) * ファンクションキーを消す DOS _CONCTRL addq.l #4,sp IOCS _MS_INIT * マウスカーソルを初期化(消去) moveq #0,d1 IOCS _SKEY_MOD * マウスカーソルおよびソフトキーボードを使用不可 moveq #1,d1 moveq #2,d2 IOCS _TGUSEMD * 電卓使用禁止
いくつかのDOSコール、IOCSコールが登場しています。
DOSコールのパラメータはスタックに積み、コール後にスタック補正を行います。
IOCSコールのパラメータは、レジスタで渡します。
パラメータを変えると挙動が変わりますが、初期化用途でしたら、 上記のまま使えば問題ありません。
このページ冒頭に書いたとおり、プログラムを正常終了するときには、 可能な限り状態を復元し、次のコマンドプロンプト入力に備えるのが日本人の美徳です。
自分のプログラムで抑制した処理については、元通りに戻しておくべきです。
_KFLUSH equ $ff0c moveq #1,d1 moveq #1,d2 IOCS _TGUSEMD * 電卓許可 moveq #-1,d1 moveq #0,d2 IOCS _SKEY_MOD * マウスとソフトキーボード許可 moveq #3,d1 IOCS _B_COLOR clr -(sp) move #16,-(sp) * 画面モードを768x512、グラフィック表示なしにする DOS _CONCTRL move #17,(sp) * カーソル点滅を開始 DOS _CONCTRL move #14,(sp) * ファンクションキー表示(mod=0) DOS _CONCTRL addq.l #4,sp clr -(sp) DOS _KFLUSH * キーバッファをクリア addq.l #2,sp
CONCTRLの3回の呼び出しでは、スタックへのパラメータ積み下ろしをまとめています。
Copyright©2026 カピバラ父さん