ここでは、アクションゲーム制作などに適した画面モードの初期化方法を紹介します。
IOCSコール で画面モードを選択する場合、d1レジスタにモード番号を与えてコールしますが、 その選択肢は以下の表のようになっています。
参考のため、右端にはX-BASICで設定するときのパラメータを併記しました。
たくさんあって目移りしてしまいそうですが、私ならとりあえず10番で作り始めることに決めています。
_CRTMOD equ $10 moveq #10,d1 IOCS _CRTMOD
| CRTMOD | 表示サイズ | 解像度 | グラフィック面構成 | X-BASIC |
| 0 | 512*512 | High | 1024*1024,16色1面 | screen 1,0,1 |
| 1 | 512*480 | Low | 1024*1024,16色1面 | screen 1,0,0 |
| 2 | 256*256 | High | 1024*1024,16色1面 | screen 0,0,1 |
| 3 | 256*240 | Low | 1024*1024,16色1面 | screen 0,0,0 |
| 4 | 512*512 | High | 512*512,16色4面 | screen 1,1,1 |
| 5 | 512*480 | Low | 512*512,16色4面 | screen 1,1,0 |
| 6 | 256*256 | High | 512*512,16色4面 | screen 0,1,1 |
| 7 | 256*240 | Low | 512*512,16色4面 | screen 0,1,0 |
| 8 | 512*512 | High | 512*512,256色2面 | screen 1,2,1 |
| 9 | 512*480 | Low | 512*512,256色2面 | screen 1,2,0 |
| 10 | 256*256 | High | 512*512,256色2面 | screen 0,2,1 |
| 11 | 256*240 | Low | 512*512,256色2面 | screen 0,2,0 |
| 12 | 512*512 | High | 512*512,65536色1面 | screen 1,3,1 |
| 13 | 512*480 | Low | 512*512,65536色1面 | screen 1,3,0 |
| 14 | 256*256 | High | 512*512,65536色1面 | screen 0,3,1 |
| 15 | 256*240 | Low | 512*512,65536色1面 | screen 0,3,0 |
| 16 | 768*512 | High | 1024*1024,16色1面 | screen 2,0,1 |
上の表から選択すると、表示画像の縦横比が約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 カピバラ父さん