カピバラ父さんのプログラミング処方箋~画面モード

ここでは、アクションゲーム制作などに適した画面モードの初期化方法を紹介します。

CRTMODの選択肢

IOCSコール で画面モードを選択する場合、d1レジスタにモード番号を与えてコールしますが、 その選択肢は以下の表のようになっています。

参考のため、右端にはX-BASICで設定するときのパラメータを併記しました。

たくさんあって目移りしてしまいそうですが、私ならとりあえず10番で作り始めることに決めています。

_CRTMOD   equ  $10

	moveq	#10,d1
	IOCS	_CRTMOD
CRTMOD表示サイズ解像度グラフィック面構成X-BASIC
0512*512High1024*1024,16色1面screen 1,0,1
1512*480Low1024*1024,16色1面screen 1,0,0
2256*256High1024*1024,16色1面screen 0,0,1
3256*240Low1024*1024,16色1面screen 0,0,0
4512*512High512*512,16色4面screen 1,1,1
5512*480Low512*512,16色4面screen 1,1,0
6256*256High512*512,16色4面screen 0,1,1
7256*240Low512*512,16色4面screen 0,1,0
8512*512High512*512,256色2面screen 1,2,1
9512*480Low512*512,256色2面screen 1,2,0
10256*256High512*512,256色2面screen 0,2,1
11256*240Low512*512,256色2面screen 0,2,0
12512*512High512*512,65536色1面screen 1,3,1
13512*480Low512*512,65536色1面screen 1,3,0
14256*256High512*512,65536色1面screen 0,3,1
15256*240Low512*512,65536色1面screen 0,3,0
16768*512High1024*1024,16色1面screen 2,0,1

特殊な解像度"384x256"

上の表から選択すると、表示画像の縦横比が約3:4で、横に3割ほど伸びてしまいます。

見た目で分かるレベルで押しつぶされた感があり、ゲームの内容によっては不自然に感じるかもしれません。

そこで、CRTMODの選択肢を使わず、CRTコントローラの操作パラメータを直接書くことで、表示画面サイズを384x256ドットにします。

これで少しは正方形に近い比率(縦横比約9:8)で表示できます。

	* CRTコントローラの設定
	movea.l	#$e80000,a0
	move	#$0045,(a0)+		* R00:水平トータル
	move	#$0006,(a0)+		* R01:水平同期終了位置		
	move	#$000b,(a0)+		* R02:水平同表示開始位置
	move	#$003b,(a0)+		* R03:水平表示終了位置
	move	#$0237,(a0)+		* R04:垂直トータル
	move	#$0005,(a0)+		* R05:垂直同期終了位置
	move	#$0028,(a0)+		* R06:垂直表示開始位置
	move	#$0228,(a0)+		* R07:垂直表示終了位置
	move	#$001b,(a0)+		* R08:外部同期水平アジャスト

	move	#%0_01_000_1_00_01,$e80028	* R20:メモリモード、表示モード制御
		* bit  10[SIZ]: 実画面サイズ 0:512x512  1:1024x1024
		* bit 9-8[COL]: 色数   00:16色  01:256色  10:undef  11:64K色
		* bit   4[HF] : 水平偏向周波数  0:15.98kHz   1: 31.5kHz
		* bit 3-2[VD] : 垂直ドット数    00:256dot  01:512dot  10,11:undef
		* bit 1-0[HD] : 水平ドット数    00:256dot  01:512dot  10:undef  11:768dot  

	ori.b	#$02,$e8e007	* システムポート#4[HRL]/ドットクロック切り替え

	* ちょっと待つ
	move sr,-(sp)
	or #$700,sr
	moveq #6,d0
	1:
		btst #7,$e88001 *MFP H-sync
		beq 1b
	2:
		btst #7,$e88001 *MFP H-sync
		bne 2b
		dbra d0,1b
	move (sp)+,sr

	* スプライトコントローラの設定
	move	#%1000000011,$eb0808	* BGcontrol
	
	movea.l	#$eb080a,a0
	move	#$0011,(a0)+	* R09:水平トータル
	move	#11+4,(a0)+	* 水平表示位置
	move	#40,(a0)+	* 垂直表示位置
	move	#%1_00_01,(a0)+	* 解像度設定  HF:VD:HD

CRTのレジスタに直接パラメータを設定しますので、スーパーバイザーモードで実行します。

また垂直256ドット表示ですが、BGテキストのマップチップの大きさは16x16ドットになります。


プログラミング処方箋へ

Copyright©2026 カピバラ父さん