カピバラ父さんのプログラミング処方箋~共通ヘッダファイルの使い方

ライブラリアンの項目でも説明したように、プログラムを開発するときには、 ソースコードを分割して少しずつ拡張していく方法があります。

本項目では、分割の考え方をもう一歩進めてみます。

共通ヘッダファイルの使い方

ソースコードを構成する要素には、プログラムコードだけでなく、 変数領域の宣言と、定数シンボル定義があります。

	.include	doscall.mac
	* _EXIT equ $ff00

CHAR_DATA	equ	30
MAX_ENEMY 	equ	10	
	.offset	0
Cplayer:	.ds.b	CHAR_DATA
Cenemy:	.ds.b	CHAR_DATA*MAX_ENEMY
szWorkArea:

	.text
	lea	WORK_AREA(pc),a6
	lea	Cplayer(a6),a1
	bsr	init_character

	lea	Cenemy(a6),a1
	moveq	#MAX_ENEMY-1,d7
	@@:
		bsr	init_character
		lea	CHAR_DATA(a1),a1
		dbra	d7,@b

	:

	DOS	_EXIT
	
	.bss
WORK_AREA:	.ds.b	szWorkArea
	.even
	.stack:
	.ds.l	1024
myStack:

特に定数シンボルについては、doscall.macやiocscall.macのように システムコール番号を直接羅列定義するものもあれば、 構造体を定義してレジスタ相対アドレッシングのディスプレイスメントとして使う定数があります。

これらの定数は、プログラム全体で共有しないと問題が生じるとともに、 プログラムの開発が進むたびに修正される可能性がある要素です。

そのため、プログラムの保守性を考えて赤字の部分を共通ヘッダファイルに記載し、 それを必要とするソースコードには、.includeで参照させています。

【myheader.h】

CHAR_DATA	equ	30
MAX_ENEMY 	equ	10	
	.offset	0
Cplayer:	.ds.b	CHAR_DATA
Cenemy: 	.ds.b	CHAR_DATA*MAX_ENEMY
szWorkArea:

	.include	doscall.mac
	.include	myheader.h
	
	.text
	lea	WORK_AREA(pc),a6
	lea	Cplayer(a6),a1
	bsr	init_character
		以下省略

ワークエリアをBSSに集めてa6レジスタ相対アドレスで読み書きする プログラミングスタイルでは、ワークエリアを構造体として定義します。

実際のゲーム制作では、とても大きな構造体を作っていくことになります。


プログラミング処方箋へ

Copyright©2026 カピバラ父さん