| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315 |
- *
- * 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
|