解析結果 > 都市隣接チェックルーチン

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

都市隣接チェック 1BE39h~

現在選択している都市と隣接しているかのチェックを行う
  • 準備:M$0617に隣接元の都市ID、M$0642に隣接対象の都市ID
  • 結果:キャリーフラグ=0(隣接あり)、1(隣接なし)

BE29 : AD 17 06		lda	$0617		;都市ID取得
BE2C : 0A		asl	a		;都市ID左シフト(2倍)
BE2D : A8		tay			;レジスタyに格納(オフセットとして利用)
BE2E : A9 3C		lda	#$3C		;隣接都市IDデータアドレス読み込みのためバンク切り替え準備
BE30 : 20 13 E6		jsr	$E613		;バンク切り替えルーチンへジャンプ
BE33 : B9 40 9A		lda	$9A40,y		;隣接対象の
BE36 : 85 00		sta	$00		;隣接都市IDデータアドレスを
BE38 : B9 41 9A		lda	$9A41,y		;M$00とM$01に格納する
BE3B : 85 01		sta	$01		;
BE3D : A0 00		ldy	#$00		;レジスタyに00を格納(インデックスとして利用)
BE3F : B1 00		lda	($00),y		;隣接都市IDデータから隣接都市IDを取得
BE41 : C9 FF		cmp	#$FF		;データの終端かチェック
BE43 : F0 09		beq	$BE4E		;データの終端なら$BE4Eへブランチ
BE45 : C8		iny			;インデックスを
BE46 : C8		iny			;インクリメントする(yを+2)
BE47 : CD 42 06		cmp	$0642		;隣接対象の都市IDと一致するかチェック
BE4A : D0 F3		bne	$BE3F		;一致しなかったら$BE3Fへブランチ
BE4C : 18		clc			;一致したらキャリーフラグクリア(0)※隣接あり
BE4D : 60		rts			;ルーチン終了
---------------------------------------------------------------------------------------------------
BE4E : 38		sec			;一致しなかったらキャリーフラグセット(1)※隣接なし
BE4F : 60		rts			;ルーチン終了


隣接都市IDデータアドレス 19A50h~ 2バイト×30都市

 ・00:リョウトウ~1D:エイショウの順
 ・各都市の隣接都市IDデータのアドレスが格納されている


隣接都市IDデータ 19A8C~ 可変長データ×30都市

 ・00:リョウトウ~1D:エイショウの順
 ・隣接する都市数が異なるため可変長データとなる
  • 隣接都市IDデータ形式
 XX・・・都市ID YY・・・未解析データ FF・・・終端データ
 XX YYを一組にして隣接している都市数分繰り返し最後にFF
 XX1 YY1 XX2 YY2 XX3 YY3 ・・・ XXn YYn FF
例) リョウトウの隣接都市IDデータ 01 01 03 00 FF
01 ユウシュウと隣接
01 未解析データ
03 セイシュウと隣接
00 未解析データ
FF 終端データ


最終更新:2012年06月09日 01:23