VZt03k2のソースをMASM5.1+LINK.EXEでアセンブルすると、
LINK : error L2029: Unresolved externals:
killmemtmp in file(s):
TEXT.OBJ(text.ASM)
readdir_lfn in file(s):
FILER.OBJ(filer.ASM)
flsyscall in file(s):
MACRO.OBJ(macro.ASM)
altsize in file(s):
SCRN.OBJ(scrn.ASM)
texts in file(s):
DOS.OBJ(dos.ASM)
chkdosheight in file(s):
CORE.OBJ(core.ASM)
tmpnamep in file(s):
TEXT.OBJ(text.ASM)
init_module in file(s):
MAIN.OBJ(main.ASM)
writememtmp in file(s):
TEXT.OBJ(text.ASM)
ems_free in file(s):
DOS.OBJ(dos.ASM)
sm_sensekey in file(s):
SCRN.OBJ(scrn.ASM)
readmemtmp in file(s):
TEXT.OBJ(text.ASM)
There were 12 errors detected
と、12個のエラーが出ます。これらは全て外部参照宣言文の所であり、実際には
そのラベルが使われていないために出ます。なので、当然出来た実行ファイルは
何の問題もありません。
これはいかにも開発途上であったことをうかがわますね。
いっぽう私のソースでも11個のエラーが出ていたんですが、ソースを公開するに
あたっていらない宣言文を全部コメントにしました。
が、まだエラーが6個残っていてしかもこれらは実際に使われているんです。
な、何故だぁ!
LINK : error L2029: Unresolved externals:
ias_on in file(s):
SCRN.OBJ(scrn.ASM)
csrblnk in file(s):
KEY.OBJ(key.ASM)
sound_func in file(s):
MAIN.OBJ(main.ASM)
omori_fkey in file(s):
KEY.OBJ(key.ASM)
idl_count in file(s):
SCRN.OBJ(scrn.ASM)
hp_lx in file(s):
KEY.OBJ(key.ASM)
There were 6 errors detected
いろいろやってみてわかったこと。
ias_on:
これは、ローカルラベルなので、外部から呼び出すとエラーになるようだ。
対策は、public宣言する
public ias_on
ias_on proc ;これは必要だろうか?
;ias_on:
;中略
ret
ias_on endp ;procと対
csrblnk db 0
これはローカルデータなので、頭に GDATA を付けてみた。(グローバルデータ?)
GDATA csrblnk db 0
GDATA はVZ.INCのマクロで、パブリック宣言を追加するようだ。
GDATA macro sym,def,val1
public sym
sym def val1
endm
sound_func、omori_fkey、idl_count は同様に対策した。が、
hp_lx
こ、これは実データが無いぃ! げげぇ・・・・
見てわかるように、これは200LXのスリープフラグを変数に変更したときに追加した
変数 HP のデータだが、高橋版とDANNY版を交互に弄っているうちにフラグに
戻すつもりでデータだけ消してしまい、プログラムの方を直してないのでした。
これではまともに動くわけないですねぇ。申し訳ない。m(__)m
うう〜む、良く見たら(良く見なくても)すぐ下のTlinkのエラーと同じでしたね。
別スレッドにしてしまって申し訳ない。m(__)m
とりあえずリンクエラーは無くなったので、お詫びに MASM6用のVZアセンブルバッチ
を、テスト板に置いておきました。m(__)m
えむしさんのバッチを少し改造しただけですが、特徴として、
・引数対応。98、IBMJ の引数で2種類のVZをアセンブルできる。デフォはIBMJ
・エラーで COM が出来無かったら、ASMERR. ファイルにアセンブルログを出力
*.OBJ や、EXEも削除しない。
・COM が出来た場合は、ASMERR. ファイルも *.OBJ や、EXEも削除する。
・高橋版以降のVZ対応で、FILER2.ASM もアセンブル(これにはまった(;_;))
というものです。EXE2BIN はなぜかエラーになったので、EXE2COM を使用しています。
もちろん、ML.EXE 使用が前提です。LINK.EXE は TLINK に置き換えてもOKです。
で、これでアセンブルしたものは、5.1のものとバイト数は同じですが、中身は
相当違っていますね。・・・いいかげんに公開しないとなぁ。(^^;