SMB Laboratoryのトップページへ

SMB2J DISASSEMBLYをエラー無しにアセンブルする方法

はじめに

 doppelganger氏による「SMB2J DISASSEMBLY - A COMPREHENSIVE SUPER MARIO BROS. 2 JAPAN DISASSEMBLY」をビルドしようとすると、sm2main.asmでエラーが出てしまい、アセンブルできません。この不具合を修正する方法を紹介します。

具体的な方法

 loopy氏によって開発されたオープンソースの6502アセンブラ「ASM6」を使ってアセンブルしていくわけですが、sm2main.asmをアセンブルしようとすると、以下のようなエラーが出て失敗してしまいます。

pass 1..
sm2main.asm(1663): Value out of range.
sm2main.asm(1664): Value out of range.
sm2main.asm(1665): Value out of range.
sm2main.asm(1666): Value out of range.

※ 余談ですが、ASM6は、ソースコードのファイルが読み取り専用になっていると、「Can't open file.」というエラーがでます。

これを回避するために、sm2main.asmの1662〜1666行目の

1662 GameTextOffsets:
1663    .db <TopStatusBarLine-GameText
1664    .db <WorldLivesDisplay-GameText
1665    .db <TimeUp-GameText
1666    .db <GameOver-GameText

の部分を以下のように丸括弧で囲みます。

1662 GameTextOffsets:
1663    .db <(TopStatusBarLine-GameText)
1664    .db <(WorldLivesDisplay-GameText)
1665    .db <(TimeUp-GameText)
1666    .db <(GameOver-GameText)

こうして変更を加えたsm2main.asmをアセンブルすると、以下のような出力があり、成功します。

pass 1..
pass 2..
sm2main.bin written (32768 bytes).
inserted by FC2 system