Răsfoiți Sursa

Importing all files

istván 7 ore în urmă
părinte
comite
ebb600c5fa
6 a modificat fișierele cu 2715 adăugiri și 0 ștergeri
  1. 90 0
      EMEDRA.cnf
  2. 268 0
      EMEDRA_patch.doc
  3. 40 0
      EMEDRA_patch.hed
  4. 2315 0
      EMEDRA_patch.s
  5. BIN
      EMEDRA_patch.x
  6. 2 0
      README.md

+ 90 - 0
EMEDRA.cnf

@@ -0,0 +1,90 @@
+*******************************************************************************
+***  エメラルド・ドラゴン 環境設定ファイル  (for EMEDRA_patch.x v0.99)     ***
+*******************************************************************************
+
+* ・行の先頭が'*'の物は、コメント行です。
+
+*******************************************************************************
+* ●戦闘高速化
+*
+*  [ひらがな]をロックしておくか、[SHIFT]を押すと、戦闘が高速になります。
+*  [ひらがな]をロックしたまま[SHIFT]を押した場合は、従来通りです。
+*
+* 0 = 高速化しない
+* 1 = 高速化する
+* 2 = 高速化するが、起動時に[ひらがな]をロックしない
+*
+EX_BATTLE = 1
+
+*******************************************************************************
+* ●移動(スクロール)高速化
+*
+*  [全角]をロックしておくか、[SHIFT]を押すと、移動速度が2倍になります。
+*  両方押した場合は、4倍になります。
+*
+* 0 = 高速化しない
+* 1 = 高速化する
+* 2 = 高速化するが、起動時に[全角]をロックしない
+*
+EX_SCROLL = 1
+
+*******************************************************************************
+* ●どこでもマップ表示
+*
+*  マップを持っていない場所でも、建物/洞窟の中などでも、[HELP]でマップが
+* 表示できます。
+*
+* 0 = どこでもマップを使わない
+* 1 = どこでもマップを使う
+*
+EX_MAP = 1
+
+*******************************************************************************
+* ●ほぼ最強装備でスタート
+*
+*  ゲームスタート時のアトルシャンとタムリンの装備が、ほぼ最強になります。
+*  ただし、このゲームの性格上、そんなに楽になる訳ではありません。
+*
+* 0 = 通常装備でスタート
+* 1 = ほぼ最強装備でスタート
+*
+EX_SUPER = 1
+
+*******************************************************************************
+* ●経験値2倍
+*
+*  戦闘で得られる経験値が、2倍になります。
+*
+* 0 = 通常通り
+* 1 = 2倍
+*
+EX_EXP = 1
+
+*******************************************************************************
+* ●戦闘メッセージ表示時間
+*
+*  戦闘中のメッセージの表示時間を指定します。
+*
+* 1~255 の数値
+*
+FTIME = 1
+
+*******************************************************************************
+* ●インストールパスの個別設定
+*
+*  ハードディスクにインストールしたパスを、個別設定したい時に記述します。
+*  パス名の最後には、'\'を付けないで下さい。
+* ┌───────────────────────────────────┐
+* │通常、この設定をする必要はありません。                │
+* │無設定の場合は、自動的に EMEDRA_patch.x を起動したパスとなるからです。│
+* └───────────────────────────────────┘
+*PATH SYS    =  C:\EMEDRA\SYSDATA	システム関連データ
+*PATH MAP    =  C:\EMEDRA\MAPDATA	マップデータ
+*PATH MOVER  =  C:\EMEDRA\MOVER		地上キャラデータ
+*PATH MUSIC  =  C:\EMEDRA\MUSIC		音楽データ
+*PATH TALK   =  C:\EMEDRA\TALKDATA	トークデータ
+*PATH FIGHT  =  C:\EMEDRA\FIGHTDATA	戦闘キャラデータ
+*PATH VISUAL =  C:\EMEDRA\VISDATA	ビジュアルデータ
+*PATH USER   =  C:\EMEDRA\USERDATA	セーブデータ
+
+

+ 268 - 0
EMEDRA_patch.doc

@@ -0,0 +1,268 @@
+△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△
+
+	~ あの名作をもう一度… ~
+
+		『エメラルド・ドラゴン』にパッチを当てる
+
+			EMEDRA_patch.x  version 0.99
+
+					1996/11/16 ずうやん
+
+△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△
+
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
+
+1.概要
+
+  このプログラムは、グローディアが制作した X68000用RPG『エメラルド・
+ ドラゴン』を、快適にプレイするために、パッチを行なうものです。
+
+ 以下のような機能があります。
+
+  ・戦闘を高速化
+  ・移動(スクロール)を高速化
+  ・どこでもマップ表示(ダンジョンもok)
+  ・ほぼ最強装備でスタート
+  ・経験値2倍
+  ・HD起動支援
+
+  このパッチは、「あの名作を、もう一度プレイしてみたいけど……むちゃ
+ くちゃ時間が掛かるもんなぁ」という人のために作られたものです。
+  パッチ使用状態でのクリア所要時間は、人によって差はあるでしょうが、
+ 8~30時間程度になると思います。
+
+  使用するには、『エメラルド・ドラゴン』と、ADDDRV.X,DELDRV.X が必
+ 要です。
+
+  ★★ 注  意 ★★★★★★★★★★★★★★★★★★★★★★★★
+  ★ 今のところ、68000MPUのマシンでは動作しません。        ★
+  ★ X68030シリーズ、もしくは、Xellent30搭載機が必要です。 ★
+  ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
+
+
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
+
+2.使用方法
+
+(1) 準備
+
+  まず、エメドラをHD等へインストールする必要があります。
+
+  エメドラ用にディレクトリをひとつ作り、全てのディスクの内容を、ディ
+ レクトリごとコピーして下さい。
+
+  例外として、ゲームをするだけならば、オープニングディスクはインストー
+ ルしなくてもかまいません。(オープニングとミュージックモードの起動は
+ できなくなります)
+
+  次に、このエメドラパッチのアーカイブを、同じディレクトリに解凍しま
+ す。
+  ここまで正しく出来たなら、以下のようになるはずです。
+
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ ゲーム                 E:\EMEDRA
+    17 ファイル     77874K Byte 使用中      3868K Byte 使用可能
+ ファイル使用量        29K Byte 使用
+glodia             x         5856  90-11-23  12:00:00 ┐
+config             sys         85  90-11-23  12:00:00 ┼ これらは削除しても
+iplx68             blp       4792  90-11-23  12:00:00 ┘ かまわない
+mdevice            sys      16620  90-11-23  12:00:00
+emedra                 <dir>       90-11-23  12:00:00
+sysdata                <dir>       90-11-23  12:00:00
+music                  <dir>       90-11-23  12:00:00
+mapdata                <dir>       90-11-23  12:00:00
+fightdata              <dir>       90-11-20  12:00:00
+mover                  <dir>       90-11-20  12:00:00
+talkdata               <dir>       90-11-20  12:00:00
+visdata                <dir>       90-11-20  12:00:00
+bin                    <dir>       90-11-01  12:00:00 ┐
+exdev                  <dir>       90-11-01  12:00:00 ┼ オープニングを
+image                  <dir>       90-11-01  12:00:00 ┘ インストールした時のみ
+EMEDRA_patch       x         5218  96-11-07  01:00:00
+EMEDRA             CNF       2951  96-11-07  01:00:00
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+  さらに、パス上に ADDDRV.X および DELDRV.X があることを確認しておい
+ て下さい。
+
+  これで、インストールは完了です。
+
+
+(2) 起動方法
+
+ a.ゲームをする場合
+
+  EMEDRA_patch.x を起動するだけです。
+  ただし、ドライブ0には、エメドラのシステムディスクを入れておいて下
+ さい。
+
+  ゲームを終了するには、システム設定の拡張メニューを選びます。
+
+  このパッチにより、ゲームがどのように変わるかは、EMEDRA.CNF を参照
+ して下さい。そして、好みに応じて書き換えて下さい。
+
+ b.オープニングを見る場合
+
+  EMEDRA_patch.x -O として起動します。
+  ただし、オープニングを起動すると、Humanに復帰する方法がありません。
+  見終わったら、リセットして下さい。
+
+ c.ミュージックモードに入る場合
+
+  EMEDRA_patch.x -M として起動します。
+  これも、オープニングと同じく、Humanに復帰出来ません。
+  聴き終わったら、リセットして下さい。
+
+
+(3) 補足
+
+  当然のことですが、起動前には、全ての音源ドライバ(ZMUSIC,MXDRV等)
+ を解除しておく必要があります。
+
+  動作確認は、X68030(cache on),X68000PRO(Xellent30あり/なし)の2機
+ 種3パターンで行っています。
+  倍速スクロールにはXVI程度、4倍速スクロールにはX68030程度の、ある
+ 程度高速なマシンが必要です。
+
+  パッチの機能ではありませんが、[CAPS]をロックしておくと、会話のメッ
+ セージとメニューの表示が、ノーウエイトになります。
+  でも、これにより、大事なメッセージを読み飛ばしてしまっても、私は知
+ らないですからね。
+
+
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
+
+3.おまけ
+
+  サブシナリオ、ありましたね。
+  特に、ミスティーナは、とっても可愛いので、絶対忘れないように。(笑)
+
+◎メリル・ウィードの章
+
+  オストラコンを倒した後、バージルの町のワラムルの所へ行く前に、フォー
+ ウィーの町のメリルの母に会う。
+  名剣ガラティンをもらえる。
+
+◎ミスティーナの章
+
+  魔王ガルシアを倒した後、ファルナの所へ行く前に、小カシャ島南端にい
+ るミスティーナに会う。(^^)
+  ローヤル・レイピアをもらえる。
+
+◎サギーの章
+
+  魔王ガルシアを倒した後、ファルナの所へ行く前に、マルギアナの町のハ
+ ダル博士に会う。
+  粒子カッターが手に入る。サギーに持たせないように。
+
+
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
+
+4.取り扱いについて
+
+  このプログラムを使用したことにより、いかなる問題が発生しようとも、
+ 私は一切責任は持ちません。
+
+  このプログラムは、フリーソフトウェアとします。著作権は放棄しません。
+
+  著作権が侵害されない限り、転載/再配付等は制限しません。
+  転載は、私への連絡なしに自由にして頂いてかまいません。
+
+  以下のネットでは、直接サポートを行なっています。
+
+	===========================================================
+	・インターネット
+		http://plaza7.mbn.or.jp/~shigema2/
+		E-Mail:shigema2@ac.mbn.or.jp
+	===========================================================
+	・NIFTY-Serve			MHF03052  ずう
+	===========================================================
+	・こっとん☆ぱふ (Tel:0848-67-4619)
+					PUFF0053  優美ちゃんと遊ぼ
+	===========================================================
+	・MIYA-NET (Tel:048-650-1234)	MIYA4D61  ずう
+	===========================================================
+
+
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
+
+5.謝辞
+
+  このプログラムは、以下のソフトウェアその他により制作されました。深
+ く感謝致します。
+  敬称は省略させて頂きます。ご了承下さい。
+
+
+(1) 開発に直接使用した物
+
+ ◎ハイスピードアセンブラ【HAS】Ver 3.09		Y.Nakamura
+ ◎ハイスピードリンカ【HLK】Ver 3.01			SALT
+ ◎EDライク高速高機能エディタ【EDR-plus】v2.01	?
+
+
+(2) 開発を手助けした物
+
+ ◎ディスアセンブラ【DIS】Ver 2.77			K.Abe/R.ShimiZu
+ ◎X68000環境ハンドブック		  吉沢正敏,市原昌文
+ ◎68000プログラマーズ・ハンドブック		宍倉幸則
+ ◎Inside X68000				桑野雅彦
+ ◎ファイルユーティリティ【Fu】Ver 2.09		☆かずりん☆
+
+
+(3) 参考とした物
+
+ ◎スーパーストリートファイター2パッチ【SP2_patch】v1.00		E.Watanabe
+ ◎TIMER-D(PROCESS) PAUSE【TDPAUSE】v0.02		TNB製作所
+
+
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
+
+6.思い出のアルバム
+
+  『今まで遊んだ中で、最も良かったと思うゲームは?』
+
+  こんなアンケートを採ると、今でも必ず上位に名前が挙がるのが、この
+ 『エメラルド・ドラゴン』です。
+
+  このゲームが最初に発売されたのはいつなのか、私にもはっきりと分かり
+ ません。
+  当時私は、週末になると友人の家に遊びに行き、そこにあったPC-8801FA
+ という8ビット機で、エメドラをプレイし続けていました。
+  ところが、プレイできるのは週にわずか数時間。しかもPC88版は、数ある
+ エメドラの中でも最も難しいと言われています。ようやくクリアした時には、
+ なんと一年が過ぎていました。
+
+  X68k版は、PC88版と比べると、遙かに易しいです。ええ、マジで。
+  どのぐらい違うかというと、PC88版は『タムリンが全く回復魔法を使って
+ くれない』のです。
+  余力があれば、PC88版を再現した『マゾ・モード』でも作ってみましょう
+ か。私は、絶対にプレイしたいとは思いませんが。(笑)
+
+  と、まあ、色々ありましたが、とにかくエメドラは、私の思い出に残る、
+ 『今まで遊んだ中で、最も良かったと思うゲーム』です。
+
+				・
+
+  感動した。楽しかった。
+  だから、X68k版もやった。
+  しかし、PC88版を遊んだ頃は、まだ学生。
+  今は、貧乏暇なしを懐かしむ社会人。
+  でも、あの感動を、もう一度味わいたい……
+
+  こんな私の想いが、プログラムになりました。
+  ちっちゃなプログラムですが、大きな感動を思い起こすきっかけになれば、
+ とても嬉しいです。
+
+
+			  おしまい
+
+
+======================================================================
+改版履歴
+----------------------------------------------------------------------
+v0.99 作成	1996/11/16
+  ・新規作成
+   ただし、68000機では動かないというバグあり。
+----------------------------------------------------------------------
+(EOF)
+

+ 40 - 0
EMEDRA_patch.hed

@@ -0,0 +1,40 @@
+X68k>『エメラルド・ドラゴン』パッチ v0.99
+===============================================================================
+【ソフト紹介】  『エメラルド・ドラゴン』パッチ【EMEDRA_patch】v0.99 (96/11/16)
+【作      者】  ずう
+【掲  載  者】  
+【掲  載  元】  
+【転載の可否】  ドキュメント参照
+【 動作環境 】  X680x0
+===============================================================================
+【備      考】
+
+	~ あの名作をもう一度… ~
+
+  このプログラムは、グローディアが制作した X68000用RPG『エメラルド・
+ ドラゴン』に、パッチを行なうものです。
+
+ 以下のような機能があります。
+
+  ・戦闘を高速化
+  ・移動(スクロール)を高速化
+  ・どこでもマップ表示(ダンジョンもok)
+  ・ほぼ最強装備でスタート
+  ・経験値2倍
+  ・HD起動支援
+
+  このパッチは、「あの名作を、もう一度プレイしてみたいけど……むちゃ
+ くちゃ時間が掛かるもんなぁ」という人のために作られたものです。
+  パッチ使用状態でのクリア所要時間は、人によって差はあるでしょうが、
+ 8~30時間程度になると思います。
+
+  使用するには、『エメラルド・ドラゴン』と、ADDDRV.X,DELDRV.X が必
+ 要です。
+
+  ★★ 注  意 ★★★★★★★★★★★★★★★★★★★★★★★★
+  ★ 今のところ、68000MPUのマシンでは動作しません。        ★
+  ★ X68030シリーズ、もしくは、Xellent30搭載機が必要です。 ★
+  ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
+
+FILENAME: EMEDP099.LZH
+

+ 2315 - 0
EMEDRA_patch.s

@@ -0,0 +1,2315 @@
+*
+* EMEDRA_patch.s (c)1996 ずうやん
+*
+* 公開する時は、下の行を注釈にしてからアセンブルすること
+*DEBUG		equ	1
+
+	.include	doscall.mac
+	.include	iocscall.mac
+
+NOP_code	equ	$4e71		* nop コード
+RTS_code	equ	$4e75		* rts コード
+JSR_code	equ	$4eb9		* jsr コード
+
+	.text
+	.even
+
+*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+*@
+*@ ・パッチ常駐部
+*@
+*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+**********************************************************************
+* 戦闘高速化パッチ
+* a6以外は破壊可能
+*
+* [ひらがな]または[SHIFT]のみ:高速
+* 両方押し:低速
+**********************************************************************
+battle_patch:
+	move.w	$810.w,d1		* シフト系キーの状態を得る
+*
+	move.l	$0018(a6),d0
+	beq	1f
+*戦闘用タイマー
+	subq.l	#1,d0			* タイマーカウンタ-1(従来の処理)
+	btst.l	#$0,d1			* [SHIFT]が押されていたら、
+	beq	@f
+	bchg.l	#$d,d1			* [ひらがな]を逆転
+@@:
+	btst.l	#$d,d1			* [ひらがな]が押されていたら、ノーウエイト
+	beq	@f
+	moveq.l	#0,d0			* タイマーカウンタの残りを強制的に0にする
+@@:
+	move.l	d0,$0018(a6)
+1:
+*ビジュアル用タイマー:ここは、従来通りの処理
+	move.l	$001c(a6),d0
+	beq	@f
+	subq.l	#1,d0
+	move.l	d0,$001c(a6)
+@@:
+	rts
+
+**********************************************************************
+* コンフィグファイルをすげかえるパッチ
+**********************************************************************
+config_patch:
+	movem.l	a0-a5,-(sp)
+	lea.l	sysdata_path_check_mes(pc),a4
+	lea.l	sysdata_path(pc),a5
+1:
+	lea.l	set_path_buf(pc),a1	* パス名を登録するバッファ
+@@:
+	move.b	(a4)+,(a1)+
+	bne	@b
+*
+	subq.w	#1,a1
+	move.b	#'=',(a1)+
+	lea.l	emedra_all_path(pc),a0
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	subq.w	#1,a1
+@@:
+	move.b	(a5)+,(a1)+
+	bne	@b
+*
+	pea.l	set_path_buf(pc)
+	movea.l	compare_path_name_address(pc),a0
+	jsr	(a0)			* パスを登録するサブルーチンを呼ぶ
+	addq.w	#4,sp
+*
+	cmpi.b	#$ff,(a4)
+	bne	1b
+*
+	movea.l	start_a0_backup(pc),a0
+	adda.w	#$80,a0			* a0.l=EMEDRA_patch.xの起動パス格納アドレス
+	lea.l	config_file_name(pc),a1
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	subq.w	#1,a1
+	lea.l	config_name(pc),a0
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	clr.l	-(sp)
+	pea.l	config_file_name(pc)
+	DOS	_OPEN			* $ff3d
+	addq.w	#8,sp
+*
+	movem.l	(sp)+,a0-a5
+	rts
+
+compare_path_name_address:
+	.ds.l	1
+
+**********************************************************************
+* スクロール高速化パッチ
+* d0は破壊可能
+**********************************************************************
+scroll_patch:
+	move.w	$810.w,d0		* シフト系キーの状態を得る
+	btst.l	#$0,d0			* [SHIFT]が押されていたら、倍速
+	beq	@f
+*
+	lsr.b	#1,d1
+@@:
+	btst.l	#$e,d0			* [全角]が押されていたら、倍速
+	beq	@f
+*
+	lsr.b	#1,d1
+@@:
+	ori.w	#$0700,d1
+	rts
+
+**********************************************************************
+* 高速化のための、[ひらがな][全角]キーLED変更を禁止する
+**********************************************************************
+led_patch:
+	cmpi.b	#5,d1			* [ひらがな]か?
+	beq	@f
+	cmpi.b	#6,d1			* [全角]か?
+	beq	@f
+	IOCS	_LEDMOD
+@@:
+	rts
+
+**********************************************************************
+* 経験値を2倍にする
+**********************************************************************
+exp_patch:
+	lsl.l	#1,d0			* 2倍にする
+	move.l	a0,-(sp)
+	movea.l	exp_address(pc),a0
+	move.l	d0,(a0)
+	move.l	(sp)+,a0
+	rts
+
+exp_address:
+	.ds.l	1			* 足し込む経験値を保存するアドレス
+
+**********************************************************************
+* オープニング:パス相対化
+**********************************************************************
+opening_open_patch:
+	move.w	$000e(a6),-(sp)		* オープンモード
+	move.l	$0008(a6),d0		* ファイル名パス
+	movem.l	a0-a1,-(sp)		* レジスタ保存
+	movea.l	d0,a0
+	cmpi.b	#'\',2(a0)
+	bne	1f
+*
+	addq.w	#3,a0
+	move.l	a0,d0
+	movea.l	start_a0_backup(pc),a0
+	adda.w	#$80,a0			* a0.l=EMEDRA_patch.xの起動パス格納アドレス
+	lea.l	file_name_buf(pc),a1	* ファイル名を登録するバッファ
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	subq.w	#1,a1
+	movea.l	d0,a0
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+	move.l	#file_name_buf,d0
+1:
+	movem.l	(sp)+,a0-a1		* レジスタ復帰
+	move.l	d0,-(sp)
+	DOS	_OPEN
+	addq.w	#6,sp
+*元々の処理
+	unlk	a6
+	rts
+
+**********************************************************************
+* ミュージックモード:パス相対化
+**********************************************************************
+music_mode_open_patch:
+	move.w	$000e(a6),-(sp)		* オープンモード
+	move.l	$0008(a6),d0		* ファイル名パス
+	movem.l	a0-a1,-(sp)		* レジスタ保存
+	movea.l	d0,a0
+	cmpi.b	#'\',(a0)
+	bne	1f
+*
+	addq.w	#1,a0
+	move.l	a0,d0
+	movea.l	start_a0_backup(pc),a0
+	adda.w	#$80,a0			* a0.l=EMEDRA_patch.xの起動パス格納アドレス
+	lea.l	file_name_buf(pc),a1	* ファイル名を登録するバッファ
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	subq.w	#1,a1
+	movea.l	d0,a0
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+	move.l	#file_name_buf,d0
+1:
+	movem.l	(sp)+,a0-a1		* レジスタ復帰
+	move.l	d0,-(sp)
+	DOS	_OPEN
+	addq.w	#6,sp
+*元々の処理
+	unlk	a6
+	rts
+
+
+*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+*@
+*@ ・メインプログラム
+*@
+*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+**********************************************************************
+* 初期処理
+**********************************************************************
+emedra_patch:
+	lea.l	user_sp(pc),sp
+	move.l	8(a0),himem_pointer	* メモリ上限アドレス退避
+	move.l	a0,start_a0_backup	* a0 を保存しておく
+	lea.l	$0010(a0),a0
+	suba.l	a0,a1
+	move.l	a1,-(sp)
+	move.l	a0,-(sp)
+	DOS	_SETBLOCK		* $ff4a
+	addq.w	#8,sp
+	tst.l	d0
+	bmi	setblock_error		* SETBLOCK失敗
+*タイトル表示
+	pea.l	title_mes(pc)
+	DOS	_PRINT
+	addq.w	#4,sp
+
+**********************************************************************
+* コマンドライン解析
+**********************************************************************
+	tst.b	(a2)+			* ここまで a2 は壊さないように
+	beq	1f
+ifdef	DEBUG
+	pea.l	command_line_mes(pc)
+	DOS	_PRINT
+	addq.w	#4,sp
+	move.l	a2,-(sp)
+	DOS	_PRINT
+	addq.w	#4,sp
+	pea.l	cr_mes(pc)
+	DOS	_PRINT
+	addq.w	#4,sp
+	bra	@f
+command_line_mes:
+	.dc.b	'コマンドライン:',0
+	.even
+@@:
+endif
+	bsr	switch_check		* コマンドラインを解析
+1:
+*パス名は指定されていたか
+	move.b	emedra_path_set_flag(pc),d0
+	bne	@f
+*起動パスをインストールパスとして登録する
+	movea.l	start_a0_backup(pc),a2
+	adda.w	#$80,a2			* a2.l=EMEDRA_patch.xの起動パス格納アドレス
+	bsr	emedra_path_set
+@@:
+**********************************************************************
+* コンフィグファイルの読み込み
+**********************************************************************
+	bsr	config_file
+
+**********************************************************************
+* ミュージックドライバを常駐させる
+**********************************************************************
+	bsr	mdevice_keep
+
+**********************************************************************
+* タイトル表示
+**********************************************************************
+ifdef	DEBUG
+	bsr	title_print
+endif
+
+**********************************************************************
+* オープニングモードかどうか
+**********************************************************************
+	move.b	opening_switch_flag(pc),d0
+	bne	opening_exec
+
+**********************************************************************
+* ミュージックモードかどうか
+**********************************************************************
+	move.b	music_mode_switch_flag(pc),d0
+	bne	music_mode_exec
+
+**********************************************************************
+* プログラムの読み込み
+**********************************************************************
+*カレントドライブの変更
+	lea.l	emedra_all_path(pc),a0	* 格納パス
+	moveq.l	#0,d0
+	move.b	(a0),d0
+	andi.b	#$1f,d0
+	subq.b	#1,d0			* A=0,B=1…
+	move.w	d0,-(sp)
+	DOS	_CHGDRV			* $ff0e
+	addq.w	#2,sp
+	bmi	program_load_error	* カレント移動エラー
+*パスの変更
+	lea.l	exe_load_path(pc),a1	* ファイル名作成領域
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	subq.w	#1,a1
+	lea.l	emedra_path(pc),a0	* 'EMEDRA\'
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	pea.l	exe_load_path(pc)
+	DOS	_CHDIR			* $ff3b
+	addq.w	#4,sp
+	bmi	program_load_error	* カレント移動エラー
+
+*読み込み
+	clr.l	-(sp)			* 環境は親と同じ
+	pea.l	emedra_command_line(pc)	* コマンドライン
+	pea.l	emedra_exe_name(pc)	* ファイル名
+	move.w	#$0001,-(sp)		* ロードのみ
+	DOS	_EXEC			* $ff4b
+	lea.l	14(sp),sp
+	tst.l	d0
+	bmi	program_load_error	* 読み込みエラー
+	bsr	exec_extract		* LZX圧縮チェック&解凍
+	lea.l	$100(a0),a0
+	move.l	a0,program_top_address		* 先頭アドレスを保存
+	move.l	a4,program_exec_address		* 実行アドレスを保存
+
+**********************************************************************
+* パッチを当てる
+**********************************************************************
+*キーLED状態を保存
+	IOCS	_B_SFTSNS
+	lsr.w	#8,d0
+	bclr.l	#7,d0
+	move.b	d0,key_led_backup
+	move.b	d0,key_led_new
+*
+* 必ず当てるパッチ
+*
+	lea.l	patch_data_table_default(pc),a0
+	bsr	memory_patch		* パッチ実行
+*
+* コンフィグファイルパッチ
+*
+	lea.l	patch_data_table_path_1(pc),a0
+	bsr	memory_patch		* パッチアドレス決定
+	movea.l	last_patch_address(pc),a0
+	subq.w	#8,a0			* サブルーチンの先頭アドレス
+	move.l	a0,compare_path_name_address
+*
+	lea.l	patch_data_table_path_2(pc),a0
+	bsr	memory_patch		* パッチアドレス決定
+	movea.l	last_patch_address(pc),a0
+	move.l	#config_patch,(a0)
+*
+* どこでもマップパッチ
+*
+	move.b	ex_map_flag(pc),d0
+	beq	@f
+*
+	lea.l	patch_data_table_map(pc),a0
+	bsr	memory_patch		* パッチ実行
+@@:
+*
+* 移動高速化パッチ
+*
+	move.b	ex_scroll_flag(pc),d0
+	beq	@f
+*
+	lea.l	patch_data_table_scroll(pc),a0
+	bsr	memory_patch		* パッチ実行
+*
+	move.b	ex_scroll_flag(pc),d0
+	cmpi.b	#1,d0
+	bne	@f
+*[全角]ロックする
+	bset.b	#6,key_led_new
+@@:
+*
+* 戦闘高速化パッチ
+*
+	move.b	ex_battle_flag(pc),d0
+	beq	@f
+*
+	lea.l	patch_data_table_battle(pc),a0
+	bsr	memory_patch		* パッチ実行
+*
+	move.b	ex_battle_flag(pc),d0
+	cmpi.b	#1,d0
+	bne	@f
+*[ひらがな]ロックする
+	bset.b	#5,key_led_new
+@@:
+*
+* 経験値2倍パッチ
+*
+	move.b	ex_exp_flag(pc),d0
+	beq	@f
+*
+	lea.l	patch_data_table_exp(pc),a0
+	bsr	memory_patch		* パッチアドレス決定
+	movea.l	last_patch_address(pc),a0
+	move.l	2(a0),exp_address	* 経験値を保存するアドレスを保存
+	move.w	#JSR_code,(a0)+
+	move.l	#exp_patch,(a0)
+@@:
+*
+* ほぼ最強装備パッチ
+*
+	move.b	ex_super_flag(pc),d0
+	beq	@f
+*
+	lea.l	patch_data_table_super(pc),a0
+	bsr	memory_patch		* パッチ実行
+@@:
+*
+* ずうパッチ
+*
+	move.b	ex_zoo_flag(pc),d0
+	beq	@f
+*
+	lea.l	patch_data_table_zoo(pc),a0
+	bsr	memory_patch		* パッチ実行
+@@:
+* パッチ結果を表示後の、キー入力待ち(/Zスイッチ時のみ)
+	bsr	patch_print_wait
+
+**********************************************************************
+* USERDATAディレクトリ(セーブデータ領域)がなければ作る
+**********************************************************************
+	lea.l	emedra_all_path(pc),a0
+	lea.l	set_path_buf(pc),a1	* パス名を登録するバッファ
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	subq.w	#1,a1
+	lea.l	userdata_path(pc),a0
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	move.w	#$0010,-(sp)		* 検索するアトリビュートは、ディレクトリ
+	pea.l	set_path_buf(pc)
+	pea.l	files_buffer(pc)
+	DOS	_FILES			* $ff4e
+	lea.l	10(sp),sp
+*
+	cmpi.l	#-2,d0
+	bne	@f
+*USERDATAディレクトリを作成
+	pea.l	set_path_buf(pc)
+	DOS	_MKDIR			* $ff39
+	addq.w	#4,sp
+@@:
+
+**********************************************************************
+* プログラム実行
+**********************************************************************
+*TIMER-Dを使用可能にする
+	bsr	tdpause_keep
+*キーLEDの設定
+	move.b	key_led_new(pc),d1
+	IOCS	_KEY_INIT
+*実行
+	move.l	program_exec_address(pc),-(sp)
+	move.w	#$0004,-(sp)		* 実行のみ
+	DOS	_EXEC			* $ff4b
+	addq.w	#6,sp
+	move.l	d0,emedra_exe_exit_code
+*キーLED状態を戻す
+	move.b	key_led_backup(pc),d1
+	IOCS	_KEY_INIT
+*TIMER-D設定を復活させる
+	bsr	tdpause_free
+*カレントディレクトリを戻す
+	movea.l	start_a0_backup(pc),a0
+	adda.w	#$80,a0			* a0.l=EMEDRA_patch.xの起動パス格納アドレス
+	move.l	a0,-(sp)
+	DOS	_CHDIR			* $ff3b
+	addq.w	#4,sp
+*emedra.xの戻り値をチェック
+	move.l	emedra_exe_exit_code(pc),d0
+	bmi	program_exec_error
+
+**********************************************************************
+* 終了処理
+**********************************************************************
+emedra_exit:
+*ミュージックドライバを常駐解除する
+	bsr	mdevice_free
+*
+	DOS	_EXIT
+
+
+**********************************************************************
+* オープニング処理
+**********************************************************************
+opening_exec:
+*カレントドライブの変更
+	lea.l	emedra_all_path(pc),a0	* 格納パス
+	moveq.l	#0,d0
+	move.b	(a0),d0
+	andi.b	#$1f,d0
+	subq.b	#1,d0			* A=0,B=1…
+	move.w	d0,-(sp)
+	DOS	_CHGDRV			* $ff0e
+	addq.w	#2,sp
+	bmi	program_load_error	* カレント移動エラー
+*パスの変更
+	lea.l	exe_load_path(pc),a1	* ファイル名作成領域
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	subq.w	#1,a1
+	lea.l	bin_path(pc),a0		* 'BIN\'
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	pea.l	exe_load_path(pc)
+	DOS	_CHDIR			* $ff3b
+	addq.w	#4,sp
+	bmi	program_load_error	* カレント移動エラー
+
+*読み込み
+	clr.l	-(sp)			* 環境は親と同じ
+	pea.l	emopen_command_line(pc)	* コマンドライン
+	pea.l	emopen_exe_name(pc)	* ファイル名
+	move.w	#$0001,-(sp)		* ロードのみ
+	DOS	_EXEC			* $ff4b
+	lea.l	14(sp),sp
+	tst.l	d0
+	bmi	program_load_error	* 読み込みエラー
+	bsr	exec_extract		* LZX圧縮チェック&解凍
+	lea.l	$100(a0),a0
+	move.l	a0,program_top_address		* 先頭アドレスを保存
+	move.l	a4,program_exec_address		* 実行アドレスを保存
+
+*パッチ
+	lea.l	patch_data_table_opening(pc),a0
+	bsr	memory_patch		* パッチ実行
+*パッチ結果を表示後の、キー入力待ち(/Zスイッチ時のみ)
+	bsr	patch_print_wait
+
+*TIMER-Dを使用可能にする
+	bsr	tdpause_keep
+*実行
+	move.l	program_exec_address(pc),-(sp)
+	move.w	#$0004,-(sp)		* 実行のみ
+	DOS	_EXEC			* $ff4b
+	addq.w	#6,sp
+**	move.l	d0,emedra_exe_exit_code
+*emedra.xの戻り値をチェック
+**	move.l	emedra_exe_exit_code(pc),d0
+	tst.l	d0
+	bmi	program_exec_error
+
+*TIMER-D設定を復活させる
+	bsr	tdpause_free
+*
+	bra	emedra_exit
+
+
+**********************************************************************
+* ミュージックモード処理
+**********************************************************************
+music_mode_exec:
+*カレントドライブの変更
+	lea.l	emedra_all_path(pc),a0	* 格納パス
+	moveq.l	#0,d0
+	move.b	(a0),d0
+	andi.b	#$1f,d0
+	subq.b	#1,d0			* A=0,B=1…
+	move.w	d0,-(sp)
+	DOS	_CHGDRV			* $ff0e
+	addq.w	#2,sp
+	bmi	program_load_error	* カレント移動エラー
+*パスの変更
+	lea.l	exe_load_path(pc),a1	* ファイル名作成領域
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	subq.w	#1,a1
+	lea.l	bin_path(pc),a0		* 'BIN\'
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	pea.l	exe_load_path(pc)
+	DOS	_CHDIR			* $ff3b
+	addq.w	#4,sp
+	bmi	program_load_error	* カレント移動エラー
+
+*読み込み
+	clr.l	-(sp)			* 環境は親と同じ
+	pea.l	mode_command_line(pc)	* コマンドライン
+	pea.l	mode_exe_name(pc)	* ファイル名
+	move.w	#$0001,-(sp)		* ロードのみ
+	DOS	_EXEC			* $ff4b
+	lea.l	14(sp),sp
+	tst.l	d0
+	bmi	program_load_error	* 読み込みエラー
+	bsr	exec_extract		* LZX圧縮チェック&解凍
+	lea.l	$100(a0),a0
+	move.l	a0,program_top_address		* 先頭アドレスを保存
+	move.l	a4,program_exec_address		* 実行アドレスを保存
+
+*パッチ
+	lea.l	patch_data_table_music_mode(pc),a0
+	bsr	memory_patch		* パッチ実行
+*パッチ結果を表示後の、キー入力待ち(/Zスイッチ時のみ)
+	bsr	patch_print_wait
+
+*TIMER-Dを使用可能にする
+	bsr	tdpause_keep
+*実行
+	move.l	program_exec_address(pc),-(sp)
+	move.w	#$0004,-(sp)		* 実行のみ
+	DOS	_EXEC			* $ff4b
+	addq.w	#6,sp
+**	move.l	d0,emedra_exe_exit_code
+*emedra.xの戻り値をチェック
+**	move.l	emedra_exe_exit_code(pc),d0
+	tst.l	d0
+	bmi	program_exec_error
+
+*TIMER-D設定を復活させる
+	bsr	tdpause_free
+*
+	bra	emedra_exit
+
+
+**********************************************************************
+* タイトル表示
+**********************************************************************
+ifdef	DEBUG
+
+title_print:
+	movem.l	d1-d7/a0-a6,-(sp)
+*カレントドライブの変更
+	lea.l	emedra_all_path(pc),a0	* 格納パス
+	moveq.l	#0,d0
+	move.b	(a0),d0
+	andi.b	#$1f,d0
+	subq.b	#1,d0			* A=0,B=1…
+	move.w	d0,-(sp)
+	DOS	_CHGDRV			* $ff0e
+	addq.w	#2,sp
+	bmi	title_print_error_exit	* カレント移動エラー
+*パスの変更
+	lea.l	exe_load_path(pc),a1	* ファイル名作成領域
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	subq.w	#1,a1
+	lea.l	bin_path(pc),a0		* 'BIN\'
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	pea.l	exe_load_path(pc)
+	DOS	_CHDIR			* $ff3b
+	addq.w	#4,sp
+	bmi	title_print_error_exit	* カレント移動エラー
+
+*読み込み
+	clr.l	-(sp)			* 環境は親と同じ
+	pea.l	emopen_command_line(pc)	* コマンドライン
+	pea.l	emopen_exe_name(pc)	* ファイル名
+	move.w	#$0001,-(sp)		* ロードのみ
+	DOS	_EXEC			* $ff4b
+	lea.l	14(sp),sp
+	tst.l	d0
+	bmi	title_print_error_exit	* 読み込みエラー
+	bsr	exec_extract		* LZX圧縮チェック&解凍
+	lea.l	$100(a0),a0
+	move.l	a0,program_top_address		* 先頭アドレスを保存
+	move.l	a4,program_exec_address		* 実行アドレスを保存
+
+*パッチ
+	lea.l	patch_data_table_opening(pc),a0
+	bsr	memory_patch		* パッチ実行
+	lea.l	patch_data_table_title_print(pc),a0
+	bsr	memory_patch		* パッチ実行
+*パッチ結果を表示後の、キー入力待ち(/Zスイッチ時のみ)
+	bsr	patch_print_wait
+
+*TIMER-Dを使用可能にする
+	bsr	tdpause_keep
+*実行
+	move.w	#$c,d1
+	IOCS	_CRTMOD
+	clr.l	-(sp)
+	DOS	_SUPER
+	addq.w	#4,sp
+	move.l	d0,-(sp)		* SSP保存
+*
+	movea.l	last_patch_address(pc),a0
+	move.l	#$4fef000c,30(a0)	* (lea.l 12(sp),sp)
+	move.w	#RTS_code,34(a0)
+	subq.w	#4,a0			* サブルーチンの先頭アドレス
+	jsr	(a0)
+*
+	DOS	_SUPER
+	addq.w	#4,sp
+
+*TIMER-D設定を復活させる
+	bsr	tdpause_free
+*ダミーEXEC
+	bsr	dummy_exec
+*
+	movem.l	(sp)+,d1-d7/a0-a6
+	moveq.l	#0,d0
+	rts
+
+title_print_error_exit:
+	movem.l	(sp)+,d1-d7/a0-a6
+	moveq.l	#-1,d0
+	rts
+
+endif
+
+ifdef	DEBUG
+
+**title_print:
+	movem.l	d1-d7/a0-a6,-(sp)
+*カレントドライブの変更
+	lea.l	emedra_all_path(pc),a0	* 格納パス
+	moveq.l	#0,d0
+	move.b	(a0),d0
+	andi.b	#$1f,d0
+	subq.b	#1,d0			* A=0,B=1…
+	move.w	d0,-(sp)
+	DOS	_CHGDRV			* $ff0e
+	addq.w	#2,sp
+	bmi	title_print_error_exit	* カレント移動エラー
+*パスの変更
+	lea.l	exe_load_path(pc),a1	* ファイル名作成領域
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	subq.w	#1,a1
+	lea.l	bin_path(pc),a0		* 'BIN\'
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	pea.l	exe_load_path(pc)
+	DOS	_CHDIR			* $ff3b
+	addq.w	#4,sp
+	bmi	title_print_error_exit	* カレント移動エラー
+
+*読み込み
+	clr.l	-(sp)			* 環境は親と同じ
+	pea.l	mode_command_line(pc)	* コマンドライン
+	pea.l	mode_exe_name(pc)	* ファイル名
+	move.w	#$0001,-(sp)		* ロードのみ
+	DOS	_EXEC			* $ff4b
+	lea.l	14(sp),sp
+	tst.l	d0
+	bmi	title_print_error_exit	* 読み込みエラー
+	bsr	exec_extract		* LZX圧縮チェック&解凍
+	lea.l	$100(a0),a0
+	move.l	a0,program_top_address		* 先頭アドレスを保存
+	move.l	a4,program_exec_address		* 実行アドレスを保存
+
+*パッチ
+	lea.l	patch_data_table_music_mode(pc),a0
+	bsr	memory_patch		* パッチ実行
+	lea.l	patch_data_table_title_print(pc),a0
+	bsr	memory_patch		* パッチ実行
+*パッチ結果を表示後の、キー入力待ち(/Zスイッチ時のみ)
+	bsr	patch_print_wait
+
+*TIMER-Dを使用可能にする
+	bsr	tdpause_keep
+*実行
+	move.w	#$c,d1
+	IOCS	_CRTMOD
+	clr.l	-(sp)
+	DOS	_SUPER
+	addq.w	#4,sp
+	move.l	d0,-(sp)		* SSP保存
+*
+	movea.l	last_patch_address(pc),a0
+	subq.w	#8,a0			* サブルーチンの先頭アドレス
+	jsr	(a0)
+*
+	DOS	_SUPER
+	addq.w	#4,sp
+
+*TIMER-D設定を復活させる
+	bsr	tdpause_free
+*ダミーEXEC
+	bsr	dummy_exec
+*
+	movem.l	(sp)+,d1-d7/a0-a6
+	moveq.l	#0,d0
+	rts
+
+**title_print_error_exit:
+	movem.l	(sp)+,d1-d7/a0-a6
+	moveq.l	#-1,d0
+	rts
+
+endif
+
+**********************************************************************
+* スイッチ解析
+*
+* 入力:a2.l=解析する文字列の先頭アドレス
+* 出力:なし
+**********************************************************************
+switch_check:
+switch_check_loop:
+	move.b	(a2)+,d0
+	beq	switch_check_exit
+	cmpi.b	#' ',d0
+	beq	switch_check_loop
+	cmpi.b	#7,d0			* TAB
+	beq	switch_check_loop
+	cmpi.b	#'-',d0
+	beq	@f
+	cmpi.b	#'/',d0
+	beq	@f
+	cmpi.b	#'?',d0
+	beq	manual
+	subq.w	#1,a2
+	bra	emedra_path_set
+@@:
+	move.b	(a2)+,d0
+	cmpi.b	#'?',d0
+	beq	manual
+	and.b	#$df,d0			* 大文字化
+	cmpi.b	#'G',d0
+	beq	g_switch
+	cmpi.b	#'M',d0
+	beq	m_switch
+	cmpi.b	#'O',d0
+	beq	o_switch
+	cmpi.b	#'Z',d0
+	beq	z_switch
+	cmpi.b	#'H',d0
+	beq	manual
+	bra	manual
+
+*Gスイッチ指定時(ゲーム)
+g_switch:
+	st.b	game_switch_flag
+	bra	switch_check_loop
+
+*Mスイッチ指定時(ミュージックモード)
+m_switch:
+	st.b	music_mode_switch_flag
+	bra	switch_check_loop
+
+*Oスイッチ指定時(オープニング)
+o_switch:
+	st.b	opening_switch_flag
+	bra	switch_check_loop
+
+*Zスイッチ指定時
+z_switch:
+	st.b	zoo_switch_flag
+	bra	switch_check_loop
+
+switch_check_exit:
+	rts
+
+
+*パス名読み込み
+emedra_path_set:
+	lea.l	emedra_all_path(pc),a0
+	moveq.l	#0,d1			* パス名の長さ
+@@:
+	move.b	(a2),d0			* (a2)+ にすると、0チェックでバグる(^^;
+	beq	@f
+	cmpi.b	#' ',d0
+	beq	@f
+	cmpi.b	#7,d0
+	beq	@f
+	addq.w	#1,a2
+	addq.b	#1,d1
+	move.b	d0,(a0)+
+	bra	@b
+@@:
+*'\'が省略されていたら付ける
+	cmpi.b	#2,d1
+	bls	@f			* 2>=d1
+	cmpi.b	#'\',-1(a0)
+	beq	1f
+@@:
+	move.b	#'\',(a0)+
+1:
+	clr.b	(a0)
+ifdef	DEBUG
+	pea.l	emedra_path_mes(pc)
+	DOS	_PRINT
+	addq.w	#4,sp
+	pea.l	emedra_all_path(pc)
+	DOS	_PRINT
+	addq.w	#4,sp
+	pea.l	cr_mes(pc)
+	DOS	_PRINT
+	addq.w	#4,sp
+	bra	@f
+emedra_path_mes:
+	.dc.b	'パス名:',0
+	.even
+@@:
+endif
+	st.b	emedra_path_set_flag
+	rts
+
+**********************************************************************
+* メモリパッチ
+*
+* 入力:a0.l=パッチテーブルのアドレス
+* 出力:なし
+**********************************************************************
+memory_patch:
+	movem.l	d0-d7/a0-a6,-(sp)
+1:
+	move.w	(a0)+,d0
+	beq	memory_patch_exit	* 全パッチ終了
+*
+	lea.l	memory_patch(pc),a1	* disしたらパニックになると思う算出方法(^^;
+	adda.w	d0,a1
+	movea.l	(a1)+,a4		* a4.l=検索基準アドレス
+	move.w	(a1)+,d1		* d1.w=チェックデータ長(ワード単位)
+	movea.l	a1,a2			* a1.l=チェック元データアドレス
+	adda.w	d1,a2
+	adda.w	d1,a2			* a2.l=書き換え後データアドレス
+	adda.l	program_top_address(pc),a4
+	movea.l	a4,a5
+	suba.w	#$100,a4		* 検索開始アドレス
+	adda.w	#$100,a5		* 検索終了アドレス
+*
+	tst.b	zoo_switch_flag
+	beq	@f
+*変更内容を表示する(要Zスイッチ)
+	movem.l	d0/a2,-(sp)
+	adda.w	d1,a2
+	adda.w	d1,a2			* 変更内容メッセージポインタ
+	move.l	a2,-(sp)
+	DOS	_PRINT
+	pea.l	cr_mes(pc)
+	DOS	_PRINT
+	addq.w	#8,sp
+	movem.l	(sp)+,d0/a2
+@@:
+2:
+	movea.l	a1,a3			* チェックデータアドレス設定
+	move.w	(a3)+,d0
+*1ワード目一致チェックループ
+@@:
+	cmp.w	(a4)+,d0
+	beq	@f
+	cmp.w	(a4)+,d0
+	beq	@f
+	cmp.w	(a4)+,d0
+	beq	@f
+	cmp.w	(a4)+,d0
+	beq	@f
+	cmpa.l	a5,a4			* 高速化のため、エンドチェックは8バイトに1回
+	bcs	@b
+*
+	bra	5f			* プログラムの終端に達した
+@@:
+*1ワード目一致
+	move.l	a4,d7			* a4保存
+	cmpi.w	#1,d1
+	beq	4f			* 1ワードデータなので見つかり
+	move.w	d1,d2
+	subq.w	#2,d2
+@@:
+	cmpm.w	(a3)+,(a4)+
+	bne	3f
+	dbra	d2,@b
+	bra	4f			* 見つかった
+3:
+*2ワード目以降で不一致
+	move.l	d7,a4			* a4復帰
+	cmpa.l	a5,a4
+	bcs	2b			* 検索続行
+	bra	5f			* 見つからなかった
+
+*見つかった
+4:
+	movem.l	a0-a1,-(sp)
+	move.l	d7,a1
+	suba.w	#2,a1			* 書き換えアドレス
+	movea.l	a2,a0
+	move.w	d1,d2
+	subq.w	#1,d2
+*書き換えループ
+@@:
+	move.w	(a0)+,(a1)+
+	dbra	d2,@b
+	move.l	a1,last_patch_address	* 最後に書き換えた場所+1を保存しておく
+	movem.l	(sp)+,a0-a1
+*書き換えアドレス表示(要Zスイッチ)
+	tst.b	zoo_switch_flag
+	beq	@f
+	movem.l	d0/a0-a1,-(sp)
+	pea.l	hexheader_mes(pc)
+	DOS	_PRINT
+	addq.w	#4,sp
+	move.l	program_top_address(pc),a0	* 検索開始アドレス
+	move.l	d7,a1
+	suba.w	#2,a1			* 書き換えアドレス
+	suba.l	a0,a1			* オフセット
+	move.l	a1,d0
+	bsr	lhex_print
+	movem.l	(sp)+,d0/a0-a1
+@@:
+	bra	3b
+
+*見つらなかった(1データ検索終了)
+5:
+	tst.b	zoo_switch_flag
+	beq	@f
+	move.l	d0,-(sp)
+	pea.l	cr_mes(pc)
+	DOS	_PRINT
+	addq.w	#4,sp
+	move.l	(sp)+,d0
+@@:
+	bra	1b			* 次のデータ検索へ
+
+memory_patch_exit:
+	movem.l	(sp)+,d0-d7/a0-a6
+	rts
+
+**********************************************************************
+* ダミーEXEC
+* ・プログラムをロードして実行しないままEXITしようとすると、ロードし
+*  た所から再実行されてしまうので、ダミーでEXECしてやる。
+*
+* 入力:なし
+* 出力:なし
+**********************************************************************
+dummy_exec:
+	movem.l	d1-d7/a0-a6,-(sp)
+	movea.l	program_exec_address(pc),a0
+	move.w	#$ff00,(a0)		* DOS _EXEC のコード
+	move.l	a0,-(sp)
+	move.w	#$0004,-(sp)		* 実行のみ
+	DOS	_EXEC			* $ff4b
+	addq.w	#6,sp
+	movem.l	(sp)+,d1-d7/a0-a6
+	rts
+
+**********************************************************************
+* 16進数表示
+*
+* 入力:d0.l=表示するデータ
+* 出力:なし
+**********************************************************************
+lhex_print:
+	move.w	d0,-(sp)
+	swap.w	d0
+	bsr	whex_print
+	move.w	(sp)+,d0
+whex_print:
+	move.w	d0,-(sp)
+	lsr.w	#8,d0
+	bsr	bhex_print
+	move.w	(sp)+,d0
+bhex_print:
+	move.b	d0,-(sp)
+	andi.b	#$f0,d0
+	lsr.b	#4,d0
+	bsr	hhex_print
+	move.b	(sp)+,d0
+	andi.b	#$0f,d0
+hhex_print:
+	addi.b	#'0',d0
+	cmpi.b	#'9'+1,d0
+	bmi	@f
+	addq.b	#7,d0
+@@:
+	move.w	d0,-(sp)
+	DOS	_INPOUT			* 一文字表示
+	addq.w	#2,sp
+	rts
+
+**********************************************************************
+* LZX圧縮されていたら解凍する(SF2_patch.s を参考にしています)
+*
+* 入力:なし
+* 出力:なし
+**********************************************************************
+exec_extract:
+	movem.l	d0-d7/a0/a2-a3/a5-a6,-(sp)
+	cmpi.l	#'LZX ',$04(a4)
+	bne	1f			* lzx v0.30以降の圧縮がされていなかった
+	cmpi.w	#$4ed4,-$2e(a1)		* 自己解凍ルーチン内 jmp (a4)存在確認
+	bne	1f
+	movea.l	a4,a0			* 転送
+	move.l	$0e(a0),d0
+	add.l	a0,d0			* 実行アドレス算出
+	movem.l	d0,-(sp)		* 退避
+	move.l	$12(a0),d0
+	add.l	a0,d0			* データサイズ算出
+	movem.l	d0,-(sp)		* 退避
+	move.l	himem_pointer(pc),d6
+	move.l	d6,$04(a0)		* メモリ使用上限アドレス設定
+	movea.l	a0,a5
+	move.l	a0,$08(a0)		* 解凍アドレス設定
+	lea.l	@f(pc),a4		* 戻りアドレス設定
+	jmp	2(a0)			* lzx自己解凍処理ルーチンへジャンプ
+@@:
+	movem.l	(sp)+,a1/a4		* データ終端&実行アドレス復帰
+1:
+	movem.l	(sp)+,d0-d7/a0/a2-a3/a5-a6
+	move.l	a1,$38(a0)		* プロセス初期スタックアドレス強制設定
+	rts
+
+**********************************************************************
+* コンフィグファイルを読み込み、スイッチを解析する
+*
+* 入力:なし
+* 出力:なし
+**********************************************************************
+config_file:
+	movem.l	d0-d7/a0-a6,-(sp)
+*
+	movea.l	start_a0_backup(pc),a0
+	adda.w	#$80,a0			* a0.l=EMEDRA_patch.xの起動パス格納アドレス
+	lea.l	config_file_name(pc),a1
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	subq.w	#1,a1
+	lea.l	config_name(pc),a0
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	clr.l	-(sp)
+	pea.l	config_file_name(pc)
+	DOS	_OPEN			* $ff3d
+	addq.w	#8,sp
+	tst.l	d0
+	bmi	config_load_error
+	move.w	d0,d7			* d7.w=ファイルハンドル
+*
+	move.w	#2,-(sp)		* ファイル終端へ
+	clr.l	-(sp)			* オフセット0
+	move.w	d7,-(sp)		* ハンドル
+	DOS	_SEEK			* $ff42
+	addq.w	#8,sp
+	move.l	d0,d6			* d6.l=ファイルサイズ
+*
+	move.l	d6,-(sp)		* 確保するメモリサイズ
+	DOS	_MALLOC			* $ff48
+	addq.w	#4,sp
+	tst.l	d0
+	bmi	config_file_exit	* メモリ確保エラー
+	movea.l	d0,a6			* a6.l=確保したアドレス
+	movea.l	a6,a5
+	adda.l	d6,a5			* a5.l=メモリ終端+1
+*
+	clr.w	-(sp)			* ファイル先頭へ
+	clr.l	-(sp)			* オフセット0
+	move.w	d7,-(sp)		* ハンドル
+	DOS	_SEEK			* $ff42
+	addq.w	#8,sp
+*
+	move.l	d6,-(sp)		* 読み込むサイズ
+	move.l	a6,-(sp)		* 読み込むアドレス
+	move.w	d7,-(sp)		* ハンドル
+	DOS	_READ			* $ff3f
+	lea.l	10(sp),sp
+*
+	move.w	d7,-(sp)
+	DOS	_CLOSE
+	addq.w	#2,sp
+*
+	movea.l	a6,a0
+config_line_loop:
+	cmpa.l	a0,a5
+	bls	config_file_memfree
+	move.b	(a0)+,d0
+	cmpi.b	#'*',d0
+	beq	next_line
+	cmpi.b	#$0d,d0
+	beq	next_line
+*'EX_'が一致するか
+	cmpi.b	#'E',d0
+	bne	next_line
+	move.b	(a0)+,d0
+	cmpi.b	#'X',d0
+	bne	next_line
+	move.b	(a0)+,d0
+	cmpi.b	#'_',d0
+	bne	next_line
+*
+	move.b	(a0)+,d0
+	cmpi.b	#'B',d0
+	bne	@f
+*'EX_BATTLE'だった
+	bsr	flagon_check
+	move.b	d0,ex_battle_flag
+	bra	next_line
+@@:
+	cmpi.b	#'E',d0
+	bne	@f
+*'EX_EXP'だった
+	bsr	flagon_check
+	move.b	d0,ex_exp_flag
+	bra	next_line
+@@:
+	cmpi.b	#'M',d0
+	bne	@f
+*'EX_MAP'だった
+	bsr	flagon_check
+	move.b	d0,ex_map_flag
+	bra	next_line
+@@:
+	cmpi.b	#'Z',d0
+	bne	@f
+*'EX_ZOO'だった
+	bsr	flagon_check
+	move.b	d0,ex_zoo_flag
+	bra	next_line
+@@:
+	cmpi.b	#'S',d0
+	bne	next_line
+	move.b	(a0)+,d0
+	cmpi.b	#'U',d0
+	bne	@f
+*'EX_SUPER'だった
+	bsr	flagon_check
+	move.b	d0,ex_super_flag
+	bra	next_line
+@@:
+	cmpi.b	#'C',d0
+	bne	@f
+*'EX_SCROLL'だった
+	bsr	flagon_check
+	move.b	d0,ex_scroll_flag
+	bra	next_line
+@@:
+next_line:
+	move.b	(a0)+,d0
+	cmpa.l	a0,a5
+	bls	config_file_memfree
+	cmpi.b	#$0a,d0
+	bne	next_line
+	bra	config_line_loop
+
+config_file_memfree:
+	move.l	a6,-(sp)
+	DOS	_MFREE			* $ff49
+	addq.w	#4,sp
+
+config_file_exit:
+	movem.l	(sp)+,d0-d7/a0-a6
+	rts
+
+
+flagon_check:
+	move.b	(a0)+,d0
+	cmpa.l	a0,a5
+	bls	@f
+	cmpi.b	#$0d,d0
+	beq	@f
+	cmpi.b	#'*',d0
+	beq	@f
+	cmpi.b	#'1',d0
+	bmi	flagon_check
+	cmpi.b	#'9',d0
+	bhi	flagon_check
+*
+	subi.b	#'0',d0		* d0.b= 1~9
+	rts
+@@:
+	subq.w	#1,a0
+	moveq.l	#0,d0
+	rts
+
+**********************************************************************
+* TIMER-D を使用可能にする/戻す
+*
+* 入力:なし
+* 出力:なし
+**********************************************************************
+tdpause_keep:
+	pea.l	get_pr_buffer(pc)
+	clr.w	-(sp)
+	DOS	_GET_PR
+	addq.w	#6,sp
+	tst.l	d0
+	bmi	@f			* スレッドはなかった(BG未使用)
+*
+	clr.l	-(sp)
+	DOS	_SUPER
+	addq.w	#4,sp
+	move.l	d0,-(sp)		* SSP保存
+	move.w	sr,-(sp)
+	ori.w	#$0700,sr
+	move.l	$0110.w,timerd_vector_backup
+	bsr	timerd_stop
+	lea.l	iocs6b_vector_backup(pc),a0
+	move.l	$05ac.w,(a0)
+	lea.l	new_iocs6b(pc),a0
+	move.l	a0,$05ac.w
+	move.w	(sp)+,sr
+	DOS	_SUPER
+	addq.w	#4,sp
+	st.b	tdpause_flag
+@@:
+	move.b	zoo_switch_flag(pc),d0	* tst.b
+	beq	@f
+*
+	pea.l	bg_stop_mes(pc)
+	DOS	_PRINT
+	addq.w	#4,sp
+@@:
+	rts
+
+tdpause_free:
+	move.b	tdpause_flag(pc),d0
+	beq	@f
+*
+	clr.l	-(sp)
+	DOS	_SUPER
+	addq.w	#4,sp
+	move.l	d0,-(sp)		* SSP保存
+	move.w	sr,-(sp)
+	ori.w	#$0700,sr
+	move.l	iocs6b_vector_backup(pc),$05ac.w
+	move.l	timerd_vector_backup(pc),$0110.w
+	lea.l	$00e88000,a0
+	move.b	#$77,$1d(a0)
+	move.b	#$14,$25(a0)
+	move.b	$09(a0),d0
+	ori.b	#$10,d0
+	move.b	d0,$09(a0)
+	move.b	$15(a0),d0
+	ori.b	#$10,d0
+	move.b	d0,$15(a0)
+	move.w	(sp)+,sr
+	DOS	_SUPER
+	addq.w	#4,sp
+@@:
+	rts
+
+* 新しい IOCS _TIMERDST
+new_iocs6b:
+	movem.l	d1/a0,-(sp)
+	move.l	a1,d0
+	beq	timerd_stop_2		* 割り込み禁止設定
+*
+	move.l	$0110.w,d0
+	cmpi.l	#$00c00000,d0
+	bcs	@f			* すでに設定されている
+*
+	move.l	a1,$0110.w
+	lea.l	$00e88000,a0
+	move.w	d1,d0
+	ror.w	#8,d0
+	andi.w	#$0007,d0
+	ori.w	#$0070,d0
+	move.b	d0,$1d(a0)
+	move.b	d1,$25(a0)
+	move.b	$09(a0),d0
+	ori.b	#$10,d0
+	move.b	d0,$09(a0)
+	move.b	$15(a0),d0
+	ori.b	#$10,d0
+	move.b	d0,$15(a0)
+	moveq.l	#0,d0
+@@:
+	movem.l	(sp)+,d1/a0
+	rts
+
+timerd_stop:
+	movem.l	d1/a0,-(sp)
+timerd_stop_2:
+	lea.l	$00e88000,a0
+	move.b	#$70,$1d(a0)
+	move.b	$09(a0),d0
+	andi.b	#$ef,d0
+	move.b	d0,$09(a0)
+	move.b	$15(a0),d0
+	andi.b	#$ef,d0
+	move.b	d0,$15(a0)
+	lea.l	tdpause_rte(pc),a0
+	move.l	a0,d0
+	ori.l	#$44000000,d0
+	move.l	d0,$0110.w
+	moveq.l	#0,d0
+	movem.l	(sp)+,d1/a0
+	rts
+
+tdpause_rte:
+	rte
+
+**********************************************************************
+* ミュージックドライバを常駐させる
+*
+* 入力:なし
+* 出力:なし
+**********************************************************************
+mdevice_keep:
+	movem.l	d0-d7/a0-a6,-(sp)
+*
+	clr.l	-(sp)
+	pea.l	emdrive_name(pc)	* 'EMDRIVE'
+	DOS	_OPEN			* $ff3d
+	addq.w	#8,sp
+	tst.l	d0
+	bmi	@f			* まだ常駐していない
+*既に常駐していたので、何もしない
+	move.w	d0,-(sp)
+	DOS	_CLOSE
+	addq.w	#2,sp
+	bra	mdevice_keep_exit
+
+@@:
+	lea.l	adddrv_command_line(pc),a6
+*パス検索
+	lea.l	adddrv_exe_name(pc),a0
+	lea.l	adddrv_file_name(pc),a1
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*ダミーのコマンドライン
+	moveq.l	#0,d0
+	move.b	d0,(a6)
+	move.b	d0,1(a6)
+*パス検索
+	clr.l	-(sp)			* 環境は親と同じ
+	move.l	a6,-(sp)		* コマンドライン
+	pea.l	adddrv_file_name(pc)	* ファイル名
+	move.w	#2,-(sp)		* 検索
+	DOS	_EXEC			* $ff4b
+	lea.l	14(sp),sp
+	tst.l	d0
+	bmi	adddrv_load_error	* 読み込みエラー
+*コマンドライン作成
+	lea.l	emedra_all_path(pc),a0	* 格納パス
+	lea.l	1(a6),a1
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*
+	subq.w	#1,a1
+	lea.l	mdevice_sys_name(pc),a0
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*コマンドラインの長さ
+	movea.l	a1,a0
+	lea.l	1(a6),a2
+	suba.l	a2,a0
+	move.l	a0,d0
+	move.b	d0,(a6)
+*一行改行
+	pea.l	cr_mes(pc)
+	DOS	_PRINT
+	addq.w	#4,sp
+*実行(常駐)
+	clr.l	-(sp)			* 環境は親と同じ
+	move.l	a6,-(sp)		* コマンドライン
+	pea.l	adddrv_file_name(pc)	* ファイル名
+	clr.w	-(sp)			* ロード&実行
+	DOS	_EXEC			* $ff4b
+	lea.l	14(sp),sp
+	tst.l	d0
+	bmi	adddrv_load_error	* 読み込みエラー
+*
+*一行改行
+	pea.l	cr_mes(pc)
+	DOS	_PRINT
+	addq.w	#4,sp
+*ADDDRVしたフラグをオン
+	st.b	adddrv_use_flag
+*
+mdevice_keep_exit:
+	movem.l	(sp)+,d0-d7/a0-a6
+	rts
+
+**********************************************************************
+* ミュージックドライバを常駐解除する
+*
+* 入力:なし
+* 出力:なし
+**********************************************************************
+mdevice_free:
+	movem.l	d0-d7/a0-a6,-(sp)
+*
+	move.b	adddrv_use_flag(pc),d0
+	beq	mdevice_free_exit	* 常駐していないので、開放しない
+*
+	lea.l	deldrv_command_line(pc),a6
+*パス検索
+	lea.l	deldrv_exe_name(pc),a0
+	lea.l	deldrv_file_name(pc),a1
+@@:
+	move.b	(a0)+,(a1)+
+	bne	@b
+*ダミーのコマンドライン
+	moveq.l	#0,d0
+	move.b	d0,(a6)
+	move.b	d0,1(a6)
+*パス検索
+	clr.l	-(sp)			* 環境は親と同じ
+	move.l	a6,-(sp)		* コマンドライン
+	pea.l	deldrv_file_name(pc)	* ファイル名
+	move.w	#2,-(sp)		* 検索
+	DOS	_EXEC			* $ff4b
+	lea.l	14(sp),sp
+	tst.l	d0
+	bmi	deldrv_load_error	* 読み込みエラー
+*実行(常駐解除)
+	clr.l	-(sp)			* 環境は親と同じ
+	move.l	a6,-(sp)		* コマンドライン
+	pea.l	deldrv_file_name(pc)	* ファイル名
+	clr.w	-(sp)			* ロード&実行
+	DOS	_EXEC			* $ff4b
+	lea.l	14(sp),sp
+	tst.l	d0
+	bmi	deldrv_load_error	* 読み込みエラー
+*
+mdevice_free_exit:
+	movem.l	(sp)+,d0-d7/a0-a6
+	rts
+
+**********************************************************************
+* パッチ結果を表示後の、キー入力待ち(/Zスイッチ時のみ)
+**********************************************************************
+patch_print_wait:
+	move.l	d0,-(sp)
+	move.b	zoo_switch_flag(pc),d0	* tst.b
+	beq	@f
+*キー入力を待つ
+	pea.l	hit_any_key_mes(pc)
+	DOS	_PRINT
+	addq.w	#4,sp
+	DOS	_INKEY			* $ff07
+@@:
+	move.l	(sp)+,d0
+	rts
+
+**********************************************************************
+* 使用方法表示
+**********************************************************************
+manual:
+	pea.l	manual_mes(pc)
+	DOS	_PRINT
+	addq.w	#4,sp
+	bra	error_exit
+
+**********************************************************************
+* エラー処理
+**********************************************************************
+adddrv_load_error:
+	pea.l	color2n_mes(pc)		* 黄色にする
+	DOS	_PRINT
+	addq.w	#4,sp
+	pea.l	adddrv_exe_name(pc)
+	DOS	_PRINT
+	addq.w	#4,sp
+	pea.l	adddrv_load_error_mes(pc)
+	bra	1f
+
+deldrv_load_error:
+	pea.l	color2n_mes(pc)		* 黄色にする
+	DOS	_PRINT
+	addq.w	#4,sp
+	pea.l	deldrv_exe_name(pc)
+	DOS	_PRINT
+	addq.w	#4,sp
+	pea.l	deldrv_load_error_mes(pc)
+	bra	1f
+
+config_load_error:
+	pea.l	color2n_mes(pc)		* 黄色にする
+	DOS	_PRINT
+	addq.w	#4,sp
+	pea.l	exe_load_path(pc)	* パス名
+	DOS	_PRINT
+	addq.w	#4,sp
+	pea.l	config_name(pc)		* 'emedra.cnf'
+	DOS	_PRINT
+	addq.w	#4,sp
+	pea.l	config_load_error_mes(pc)
+	bra	1f
+
+program_load_error:
+	pea.l	program_load_error_mes(pc)
+	bra	@f
+
+program_exec_error:
+	pea.l	program_exec_error_mes(pc)
+	bra	@f
+@@:
+	pea.l	color2n_mes(pc)		* 黄色にする
+	DOS	_PRINT
+	addq.w	#4,sp
+	pea.l	exe_load_path(pc)	* パス名
+	DOS	_PRINT
+	addq.w	#4,sp
+	pea.l	emedra_exe_name(pc)	* 'emedra.x'
+	DOS	_PRINT
+	addq.w	#4,sp
+	bra	1f
+
+setblock_error:
+	pea.l	setblock_error_mes(pc)
+	bra	@f
+
+patch_error:
+	bsr	dummy_exec		* ロードしたプログラムを開放する
+	pea.l	patch_error_mes(pc)
+	bra	@f
+@@:
+	pea.l	color2n_mes(pc)		* 黄色にする
+	DOS	_PRINT
+	addq.w	#4,sp
+1:
+	DOS	_PRINT			* エラーメッセージ表示
+	addq.w	#4,sp
+	pea.l	color3n_mes(pc)		* 白に戻す
+	DOS	_PRINT
+	pea.l	hit_any_key_mes(pc)
+	DOS	_PRINT
+	addq.w	#8,sp
+	DOS	_INKEY			* $ff07
+error_exit:
+*ミュージックドライバを常駐解除する
+	bsr	mdevice_free
+*
+	move.w	#$0001,-(sp)
+	DOS	_EXIT2			* $ff4c
+
+
+	.data
+	.even
+
+*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+*@
+*@ ・パッチデータテーブル
+*@
+*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+**********************************************************************
+* 必ず当てるパッチ達
+**********************************************************************
+patch_data_table_default:
+	.dc.w	patch_data_data_check_off-memory_patch
+	.dc.w	patch_data_led-memory_patch
+	.dc.w	0			* 終端コード
+
+* キャラクター改造チェックを無効にするパッチ
+patch_data_data_check_off:
+	.dc.l	$00e554			* アドレス
+	.dc.w	3			* ワード数
+
+	.dc.w	$b0ae,$fff8		** 	cmp.l	-$0008(a6),d0
+	.dc.w	$6706			**	beq	L00e55c
+
+	.dc.w	$b0ae,$fff8		** 	cmp.l	-$0008(a6),d0
+	.dc.w	$6006			**	bra	L00e55c
+
+	.dc.b	'キャラクター改造チェック外し',0
+	.even
+
+* 特定LED変更禁止パッチ
+patch_data_led:
+	.dc.l	$002cb8			* アドレス
+	.dc.w	7			* ワード数
+
+	.dc.w	$222f,$0004		**	move.l	$0004(a7),d1
+	.dc.w	$242f,$0008		**	move.l	$0008(a7),d2
+	.dc.w	$700d,$4e4f		**	IOCS	_LEDMOD
+	.dc.w	$4e75			**	rts
+
+	.dc.w	$222f,$0004		**	move.l	$0004(a7),d1
+	.dc.w	$242f,$0008		**	move.l	$0008(a7),d2
+	.dc.w	$4ef9			**	jmp	[led_patch]
+	.dc.l	led_patch		**
+
+	.dc.b	'[ひらがな][全角]キーのLED変更禁止',0
+	.even
+
+**********************************************************************
+* 戦闘高速化パッチ
+**********************************************************************
+patch_data_table_battle:
+	.dc.w	patch_data_battle-memory_patch
+	.dc.w	0			* 終端コード
+
+patch_data_battle:
+	.dc.l	$000098			* アドレス
+	.dc.w	10			* ワード数
+
+	.dc.w	$202e,$0018		**	move.l	$0018(a6),d0
+	.dc.w	$6704			**	beq	L0000a2
+	.dc.w	$53ae,$0018		**	subq.l	#1,$0018(a6)
+	.dc.w	$202e,$001c		**	move.l	$001c(a6),d0
+	.dc.w	$6704			**	beq	L0000ac
+	.dc.w	$53ae,$001c		**	subq.l	#1,$001c(a6)
+
+	.dc.w	$4eb9			**	jsr	[battle_patch]
+	.dc.l	battle_patch		**	
+	.dc.w	$600c			**	bra	L0000ac
+	.dc.w	$4e71			**	nop
+	.dc.w	$4e71,$4e71		**	nop * 2
+	.dc.w	$4e71			**	nop
+	.dc.w	$4e71,$4e71		**	nop * 2
+
+	.dc.b	'戦闘高速化',0
+	.even
+
+**********************************************************************
+* スクロール高速化パッチ
+**********************************************************************
+patch_data_table_scroll:
+	.dc.w	patch_data_scroll-memory_patch
+	.dc.w	0			* 終端コード
+
+patch_data_scroll:
+	.dc.l	$008c14			* アドレス
+	.dc.w	7			* ワード数
+
+	.dc.w	$122f,$000b		**	move.b	$000b(a7),d1
+	.dc.w	$e149			**	lsl.w	#8,d1
+	.dc.w	$122f,$000f		**	move.b	$000f(a7),d1
+	.dc.w	$706b,$4e4f		**	IOCS	_TIMERDST
+
+	.dc.w	$122f,$000f		**	move.b	$000f(a7),d1
+	.dc.w	$4eb9			**	jsr	[scroll_patch]
+	.dc.l	scroll_patch		**	
+	.dc.w	$706b,$4e4f		**	IOCS	_TIMERDST
+
+	.dc.b	'移動高速化',0
+	.even
+
+**********************************************************************
+* ほぼ最強装備パッチ
+**********************************************************************
+patch_data_table_super:
+	.dc.w	patch_data_super-memory_patch
+	.dc.w	0			* 終端コード
+
+patch_data_super:
+	.dc.l	$021b70			* アドレス
+	.dc.w	$22			* ワード数
+
+	.dc.b	$01,$00,$00,$02,$00,$19,$00,$0a,$00,$3c,$00,$05,$00,$0c,$01,$01
+	.dc.b	$01,$01,$00,$00,$01,$29,$3d,$00,$00,$00,$ae,$d4,$f7,$c3,$ef,$ff
+	.dc.b	$00,$00					** ここまで、アトルシャン
+	.dc.b	$02,$00,$00,$05,$00,$08,$00,$06,$00,$28,$00,$02,$00,$08,$01,$01
+	.dc.b	$01,$01,$00,$01,$15,$34,$00,$00,$00,$01,$cb,$ec,$f6,$ff,$00,$00
+	.dc.b	$00,$00					** ここまで、タムリン
+
+	.dc.b	$01,$00,$00,$02,$00,$19,$00,$0a,$00,$3c,$00,$05,$00,$0c,$01,$01
+	.dc.b	$01,$01,$00,$00,$09,$32,$44,$55,$00,$00,$ae,$d4,$f7,$c3,$ef,$ff
+	.dc.b	$00,$00	**	^^^^^^^^^^^^^^^ 武器,鎧,盾,メット
+	.dc.b	$02,$00,$00,$05,$00,$08,$00,$06,$00,$28,$00,$02,$00,$08,$01,$01
+	.dc.b	$01,$01,$00,$01,$1f,$33,$45,$56,$00,$01,$cb,$ec,$f6,$ff,$00,$00
+	.dc.b	$00,$00	**	^^^^^^^^^^^^^^^
+
+	.dc.b	'ほぼ最強装備',0
+	.even
+
+**********************************************************************
+* どこでもマップパッチ
+**********************************************************************
+patch_data_table_map:
+	.dc.w	patch_data_map-memory_patch
+	.dc.w	0			* 終端コード
+
+patch_data_map:
+	.dc.l	$0075dc			* アドレス
+	.dc.w	3			* ワード数
+
+	.dc.w	$4e90			**	jsr	(a0)
+	.dc.w	$4a80			**	tst.l	d0
+	.dc.w	$670c			**	beq	L0075ee
+
+	.dc.w	$4e90			**	jsr	(a0)
+	.dc.w	$4a80			**	tst.l	d0
+	.dc.w	$4e71			**	nop
+
+	.dc.b	'どこでもマップを表示',0
+	.even
+
+**********************************************************************
+* 経験値2倍パッチ(探すだけ)
+**********************************************************************
+patch_data_table_exp:
+	.dc.w	patch_data_exp-memory_patch
+	.dc.w	0			* 終端コード
+
+patch_data_exp:
+	.dc.l	$00dc80			* アドレス
+	.dc.w	4			* ワード数
+
+	.dc.w	$4e56,$fffc		**	link.w	a6,#-4
+	.dc.w	$202e,$0008		**	move.l	$0008(a6),d0
+
+	.dc.w	$4e56,$fffc		**	link.w	a6,#-4
+	.dc.w	$202e,$0008		**	move.l	$0008(a6),d0
+
+	.dc.b	'経験値2倍',0
+	.even
+
+
+**********************************************************************
+* パス名定義(探すだけ)
+**********************************************************************
+patch_data_table_path_1:
+	.dc.w	patch_data_path_1-memory_patch
+	.dc.w	0			* 終端コード
+
+patch_data_path_1:
+	.dc.l	$000c98			* アドレス
+	.dc.w	9			* ワード数
+
+	.dc.w	$0c10,$0009		**	cmpi.b	#$09,(a0)
+	.dc.w	$67ec			**	beq	L000c8a
+	.dc.w	$2008			**	move.l	a0,d0
+	.dc.w	$4e75			**	rts
+	.dc.w	$48e7,$0018		**	movem.l	a3-a4,-(a7)
+	.dc.w	$286f,$000c		**	movea.l	$000c(a7),a4
+
+	.dc.w	$0c10,$0009		**	cmpi.b	#$09,(a0)
+	.dc.w	$67ec			**	beq	L000c8a
+	.dc.w	$2008			**	move.l	a0,d0
+	.dc.w	$4e75			**	rts
+	.dc.w	$48e7,$0018		**	movem.l	a3-a4,-(a7)
+	.dc.w	$286f,$000c		**	movea.l	$000c(a7),a4
+
+	.dc.b	'パス名登録サブ',0
+	.even
+
+**********************************************************************
+* パス名定義(探すだけ)
+**********************************************************************
+patch_data_table_path_2:
+	.dc.w	patch_data_path_2-memory_patch
+	.dc.w	0			* 終端コード
+
+patch_data_path_2:
+	.dc.l	$000d2e			* アドレス
+	.dc.w	4			* ワード数
+
+	.dc.w	$42a7			**	clr.l	-(a7)
+	.dc.w	$487a,$ffc2		**	pea.l	emedra_sys_name(pc)
+	.dc.w	$4eb9			**	jsr	open
+
+	.dc.w	$42a7			**	clr.l	-(a7)
+	.dc.w	$487a,$ffc2		**	pea.l	emedra_sys_name(pc)
+	.dc.w	$4eb9			**	jsr	open
+
+	.dc.b	'パス名登録メイン',0
+	.even
+
+**********************************************************************
+* ディスクチェック外し(隠し:でも、プロテクトは外さないんだな)
+**********************************************************************
+patch_data_table_zoo:
+	.dc.w	patch_data_zoo_1-memory_patch
+	.dc.w	patch_data_zoo_2-memory_patch
+	.dc.w	0			* 終端コード
+
+*このパッチは、_B_READ,_B_READDI のふたつ共用
+patch_data_zoo_1:
+	.dc.l	$008c3c			* アドレス
+	.dc.w	5			* ワード数
+
+	.dc.w	$48e7,$1000		**	movem.l	d3,-(a7)
+	.dc.w	$4cef,$020e,$0008	**	movem.l	$0008(a7),d1-d3/a1
+
+	.dc.w	$4e75,$4e71		**	rts, nop
+	.dc.w	$4e71,$4e71,$4e71	**	nop * 3
+
+	.dc.b	'ずう1',0
+	.even
+
+patch_data_zoo_2:
+	.dc.l	$009736			* アドレス
+	.dc.w	5			* ワード数
+
+	.dc.w	$4e56,$0000		**	link.w	a6,#0
+	.dc.w	$3f2e,$000a		**	move.w	$000a(a6),-(a7)
+	.dc.w	$ff0f			**	DOS	_DRVCTRL
+
+	.dc.w	$7042			**	moveq.l	#$42,d0
+	.dc.w	$4e75			**	rts
+	.dc.w	$4e71,$4e71,$4e71	**	nop * 3
+
+	.dc.b	'ずう2',0
+	.even
+
+**********************************************************************
+* オープニング用パッチ
+**********************************************************************
+patch_data_table_opening:
+	.dc.w	patch_data_opening_open-memory_patch
+	.dc.w	patch_data_opening_drvctrl-memory_patch
+	.dc.w	0			* 終端コード
+
+* オープニングファイル読み込みパス相対化
+patch_data_opening_open:
+	.dc.l	$002dc4			* アドレス
+	.dc.w	6			* ワード数
+
+	.dc.w	$3f2e,$000e		**	move.w	$000e(a6),-(a7)
+	.dc.w	$2f2e,$0008		**	move.l	$0008(a6),-(a7)
+	.dc.w	$ff3d			**	DOS	_OPEN
+	.dc.w	$5c8f			**	addq.l	#6,a7
+
+	.dc.w	$4ef9			**	jmp	[opening_open_patch]
+	.dc.l	opening_open_patch	**	
+	.dc.w	$4e71,$4e71,$4e71	**	nop * 3
+
+	.dc.b	'オープニング:パス相対化',0
+	.even
+
+* オープニングフロッピーチェック解除
+patch_data_opening_drvctrl:
+	.dc.l	$002e54			* アドレス
+	.dc.w	3			* ワード数
+
+	.dc.w	$3f00			**	move.w	d0,-(a7)
+	.dc.w	$ff0f			**	DOS	_DRVCTRL
+	.dc.w	$548f			**	addq.l	#2,a7
+
+	.dc.w	$3f00			**	move.w	d0,-(a7)
+	.dc.w	$7042			**	moveq.l	#$42,d0
+	.dc.w	$548f			**	addq.l	#2,a7
+
+	.dc.b	'オープニング:フロッピーチェック解除',0
+	.even
+
+ifdef	DEBUG
+* オープニングタイトル表示(v0.99 現在、このパッチは無効)
+patch_data_table_title_print:
+	.dc.w	patch_data_opening_title_print-memory_patch
+	.dc.w	0			* 終端コード
+
+patch_data_opening_title_print:
+	.dc.l	$001000			* アドレス
+	.dc.w	4			* ワード数
+
+	.dc.w	$4e93			**	jsr	(a3)
+	.dc.w	$4e95			**	jsr	(a5)
+	.dc.w	$487a,$fe86		**	pea.l	optitle_mbt_name(pc)
+
+	.dc.w	$4e93			**	jsr	(a3)
+	.dc.w	$4e95			**	jsr	(a5)
+	.dc.w	$487a,$fe86		**	pea.l	optitle_mbt_name(pc)
+
+	.dc.b	'オープニング:タイトル表示用',0
+	.even
+endif
+
+**********************************************************************
+* ミュージックモード用パッチ
+**********************************************************************
+patch_data_table_music_mode:
+	.dc.w	patch_data_music_mode_open-memory_patch
+	.dc.w	patch_data_music_mode_drvctrl-memory_patch
+	.dc.w	0			* 終端コード
+
+* ミュージックモードファイル読み込みパス相対化
+patch_data_music_mode_open:
+	.dc.l	$001652			* アドレス
+	.dc.w	6			* ワード数
+
+	.dc.w	$3f2e,$000e		**	move.w	$000e(a6),-(a7)
+	.dc.w	$2f2e,$0008		**	move.l	$0008(a6),-(a7)
+	.dc.w	$ff3d			**	DOS	_OPEN
+	.dc.w	$5c8f			**	addq.l	#6,a7
+
+	.dc.w	$4ef9			**	jmp	[music_mode_open_patch]
+	.dc.l	music_mode_open_patch	**	
+	.dc.w	$4e71,$4e71,$4e71	**	nop * 3
+
+	.dc.b	'ミュージックモード:パス相対化',0
+	.even
+
+* ミュージックモードフロッピーチェック解除
+patch_data_music_mode_drvctrl:
+	.dc.l	$0016e4			* アドレス
+	.dc.w	3			* ワード数
+
+	.dc.w	$3f00			**	move.w	d0,-(a7)
+	.dc.w	$ff0f			**	DOS	_DRVCTRL
+	.dc.w	$548f			**	addq.l	#2,a7
+
+	.dc.w	$3f00			**	move.w	d0,-(a7)
+	.dc.w	$7042			**	moveq.l	#$42,d0
+	.dc.w	$548f			**	addq.l	#2,a7
+
+	.dc.b	'ミュージックモード:フロッピーチェック解除',0
+	.even
+
+ifdef	DEBUG
+* オープニングタイトル表示(v0.99 現在、このパッチは無効)
+patch_data_table_title_print_1:
+	.dc.w	patch_data_music_mode_title_print-memory_patch
+	.dc.w	0			* 終端コード
+
+patch_data_music_mode_title_print:
+	.dc.l	$00084a			* アドレス
+	.dc.w	4			* ワード数
+
+	.dc.w	$48e7,$0018		**	movem.l	a3-a4,-(a7)
+	.dc.w	$42a7			**	clr.l	-(a7)
+	.dc.w	$47f9			**	lea.l
+
+	.dc.w	$48e7,$0018		**	movem.l	a3-a4,-(a7)
+	.dc.w	$42a7			**	clr.l	-(a7)
+	.dc.w	$47f9			**	lea.l
+
+	.dc.b	'ミュージックモード:タイトル表示用',0
+	.even
+endif
+
+
+*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+*@
+*@ ・各種データ/ワーク
+*@
+*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+**********************************************************************
+* メッセージデータ
+**********************************************************************
+title_mes:
+	.dc.b	$1b,'[37m'
+	.dc.b	'《エメラルド・ドラゴン パッチ》'
+	.dc.b	$1b,'[0m',13,10
+	.dc.b	' EMEDRA_patch.x  version 0.99  (C)1996 ずうやん',13,10,0
+
+manual_mes:
+	.dc.b  13,10
+	.dc.b  ' 機 能 :エメラルド・ドラゴンに、パッチを当てます。',13,10
+	.dc.b  13,10
+	.dc.b  '使用方法:EMEDRA_patch <スイッチ>',13,10
+	.dc.b  13,10
+	.dc.b  'スイッチ:-G ゲーム起動',13,10
+	.dc.b  '          -M ミュージックモード起動',13,10
+	.dc.b  '          -O オープニング起動',13,10
+	.dc.b  13,10
+	.dc.b  0
+
+setblock_error_mes:
+	.dc.b	'メモリブロックの確保/解除に失敗しました。',13,10,0
+
+program_load_error_mes:
+	.dc.b	' を読み込むことが出来ませんでした。。',13,10
+	.dc.b	'指定したパス名を確認して下さい。',13,10,0
+
+patch_error_mes:
+	.dc.b	'パッチに失敗しました。',13,10,0
+
+program_exec_error_mes:
+	.dc.b	' の実行で、エラーが発生しました。',13,10,0
+
+config_load_error_mes:
+	.dc.b	' を読み込むことが出来ませんでした。',13,10
+	.dc.b	'EMEDRA_patch.x と同じディレクトリに用意して下さい。',13,10,0
+
+adddrv_load_error_mes:
+	.dc.b	' が見つからないので、ミュージックドライバを'
+	.dc.b				'常駐させることが出来ません。',13,10,0
+
+deldrv_load_error_mes:
+	.dc.b	' が見つからないので、ミュージックドライバを'
+	.dc.b				'常駐解除することが出来ません。',13,10,0
+
+bg_stop_mes:
+	.dc.b	'バックグラウンドを停止し、TIMER-Dを使用可能にします。',13,10,0
+
+hit_any_key_mes:
+	.dc.b	13,10,'何かキーを押して下さい。',13,10,0
+
+*16進数を表示する時の先頭に付ける文字列
+hexheader_mes:
+	.dc.b	' $',0
+
+*改行する文字列
+cr_mes:
+	.dc.b	13,10,0
+
+*水色にする
+color1n_mes:
+	.dc.b	$1b,'[31m',0
+
+*黄色にする
+color2n_mes:
+	.dc.b	$1b,'[32m',0
+
+*白にする
+color3n_mes:
+	.dc.b	$1b,'[33m',0
+
+*ゲームプログラムのファイル名
+emedra_exe_name:
+	.dc.b	'EMEDRA.X',0
+
+*オープニングプログラムのファイル名
+emopen_exe_name:
+	.dc.b	'EMOPEN.X',0
+
+*ミュージックモードプログラムのファイル名
+mode_exe_name:
+	.dc.b	'MODE.X',0
+
+adddrv_exe_name:
+	.dc.b	'ADDDRV.X',0
+
+deldrv_exe_name:
+	.dc.b	'DELDRV.X',0
+
+mdevice_sys_name:
+	.dc.b	'MDEVICE.SYS #/B9',0
+
+config_name:
+	.dc.b	'EMEDRA.CNF',0
+
+*ミュージックドライバのデバイス名
+emdrive_name:
+	.dc.b	'EMDRIVE',0
+
+*プログラム実行時のダミーのコマンドライン
+emopen_command_line:
+emedra_command_line:
+mode_command_line:
+	.dc.b	0,0
+
+*emedra.x 格納パス
+emedra_path:
+	.dc.b	'EMEDRA\',0
+
+*emopen.x 格納パス
+bin_path:
+	.dc.b	'BIN\',0
+
+sysdata_path:
+	.dc.b	'SYSDATA',0
+	.dc.b	'MAPDATA',0
+	.dc.b	'MOVER',0
+	.dc.b	'MUSIC',0
+	.dc.b	'TALKDATA',0
+	.dc.b	'FIGHTDATA',0
+	.dc.b	'VISDATA',0
+userdata_path:
+	.dc.b	'USERDATA',0
+	.dc.b	$ff		* パス名リスト終了コード
+
+sysdata_path_check_mes:
+	.dc.b	'SYS',0
+	.dc.b	'MAP',0
+	.dc.b	'MOVER',0
+	.dc.b	'MUSIC',0
+	.dc.b	'TALK',0
+	.dc.b	'FIGHT',0
+	.dc.b	'VISUAL',0
+	.dc.b	'USER',0
+	.dc.b	$ff		* チェック文字リスト終了コード
+
+
+**********************************************************************
+* スイッチ保存情報,フラグ
+**********************************************************************
+game_switch_flag:
+	.dc.b	0		* -G:ゲームなら0以外
+
+music_mode_switch_flag:
+	.dc.b	0		* -M:ミュージックモードなら0以外
+
+opening_switch_flag:
+	.dc.b	0		* -O:オープニングを実行するなら0以外
+
+zoo_switch_flag:
+	.dc.b	0		* -Z:ずうスイッチ指定なら0以外
+
+emedra_path_set_flag:
+	.dc.b	0		* パス名が指定されたら0以外
+
+ex_map_flag:
+	.dc.b	0		* どこでもマップパッチ有無
+
+ex_scroll_flag:
+	.dc.b	0		* 移動高速化パッチ有無
+
+ex_battle_flag:
+	.dc.b	0		* 戦闘高速化パッチ有無
+
+ex_exp_flag:
+	.dc.b	0		* 経験値2倍パッチ有無
+
+ex_super_flag:
+	.dc.b	0		* ほぼ最強装備パッチ有無
+
+ex_zoo_flag:
+	.dc.b	0		* ずう隠しパッチ有無
+
+tdpause_flag:
+	.dc.b	0		* TIMER-D停止が必要なら0以外
+
+adddrv_use_flag:
+	.dc.b	0		* ADDDRVを使ったなら0以外
+
+**********************************************************************
+* ワーク領域
+**********************************************************************
+
+	.bss
+	.even
+
+himem_pointer:
+	.ds.l	1
+
+start_a0_backup:
+	.ds.l	1		* EMEDRA_patch.x 実行直後のa0(メモリ管理ポインタ)
+
+program_top_address:
+	.ds.l	1
+
+program_exec_address:
+	.ds.l	1
+
+last_patch_address:
+	.ds.l	1		* パッチで最後に書き換えた場所
+
+emedra_exe_exit_code:
+	.ds.l	1		* emedra.x のexit値
+
+iocs6b_vector_backup:
+	.ds.l	1		* IOCS _TIMERDST ($05ac.w) のベクタを保存する
+
+timerd_vector_backup:
+	.ds.l	1		* MFP TIMER-D ($0110.w) のベクタを保存する
+
+key_led_backup:
+	.ds.b	1		* ゲーム開始前のキーLED状態を保存
+
+key_led_new:
+	.ds.b	1		* ゲーム開始時のLED状態
+
+emedra_all_path:
+	.ds.b	64+1		* ハードディスクにインストールしたパス
+
+files_buffer:			* DOS _FILES ($ff4e) で使うバッファ 53バイト
+get_pr_buffer:			* DOS _GET_PR ($fffa) で使うバッファ 116バイト
+	.ds.b	116
+
+exe_load_path:			* プログラムを読み込むパス名
+set_path_buf:			* パス名をemedra.xに登録するバッファ
+	.ds.b	64+1
+
+config_file_name:		* 
+adddrv_file_name:		* adddrv実行ファイル名(パス付き) 90バイト
+deldrv_file_name:		* deldrv実行ファイル名(パス付き) 90バイト
+file_name_buf:
+	.ds.b	128+1
+
+adddrv_command_line:		* adddrv実行時のコマンドライン
+deldrv_command_line:		* deldrv実行時のコマンドライン
+	.ds.b	256
+
+*スタック
+	.ds.b	2048
+
+	.even
+user_sp:
+	.end	emedra_patch
+

BIN
EMEDRA_patch.x


+ 2 - 0
README.md

@@ -0,0 +1,2 @@
+# emedra68p
+Backup of Zuuyan's trainer for Emerald Dragon on X68000