カピバラ父さんのプログラミング処方箋~初期化と復元

新幹線を降りるとき座席のリクライニングを戻したり、 レンタルビデオテープを返すときに最後まで送ってから巻き戻したり、 公共施設に「来たときよりも美しく」という標語が掲げていたり。

日本人の道徳心なのか、自分の痕跡を残さない忍者の掟なのか、 借り物は元通りにして返すという習慣は、スムーズな社会生活を送る上で、 とても重要だと思います。

その姿勢は、コンピュータプログラミングにおいても通用します。

Human68kの標準機能を抑制する

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 カピバラ父さん