ライブラリアンの項目でも説明したように、プログラムを開発するときには、 ソースコードを分割して少しずつ拡張していく方法があります。
本項目では、分割の考え方をもう一歩進めてみます。
ソースコードを構成する要素には、プログラムコードだけでなく、 変数領域の宣言と、定数シンボル定義があります。
.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 カピバラ父さん