|
|
@@ -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
|
|
|
+
|