hra1129 / msx_basic_compiler

MSX-BASICコンパイラ
MIT License
22 stars 2 forks source link

LOCATEの諸問題について #17

Closed baseballcap-mio closed 5 months ago

baseballcap-mio commented 6 months ago

3本のプログラムについて問題があるが、まず2本について

プログラム1 100 LOCATE 256 110 END

プログラム2 100 X=256 110 LOCATE X 120 END

プログラム1、プログラム2は共にBACONはパスするが、ZMA(v1.0.18)でエラーとなる。そして、

プロンプト>zma xxx.asm zma.bin プロンプト>zma xxx.asm zma.bin プロンプト>zma xxx.asm zma.bin

のように連続してアセンブルするとわかるが、その結果がしばしば変わる。

最後にプログラム3

プログラム3 100 LOCATE 256, 0 110 LOCATE 0,256 120 LOCATE 256,256 130 END

プログラム3もBACONはパスするが、ZMA(v1.0.18)でエラーとなる 下のような結果となる

Z80 Macro Assembler ZMA v1.0.18

Programmed by t.hara ERROR:Out of range relative address.: test-t03.asm(76) ERROR:Illegal operand.: test-t03.asm(76) ERROR:Out of range relative address.: test-t03.asm(85) ERROR:Illegal operand.: test-t03.asm(85) Found 4 error(s). Failed.

以上です

hra1129 commented 5 months ago
        asm_line.set( "LD", "" "A", "[work_csry]" );
        p_info->assembler_list.body.push_back( asm_line );
        asm_line.set( "LD", "" "L", "A" );
        p_info->assembler_list.body.push_back( asm_line );

typo で、「,」が抜け落ちていました。"", "A" が "" "A" になっているので、"A" と解釈されておかしなコードを生成していました。 LOCATEの処理の中に、かなりの数の上記のようなミスがあり、全て修正しましたのでお試し下さい。

baseballcap-mio commented 5 months ago

プログラム1、プログラム2はBACON、ZMAともにパスしました。 プログラム3は前回と変わらず、ZMAで前回と全く同じエラーメッセージが出て終了します。

baseballcap-mio commented 5 months ago

間違って閉じてしまったので再オープンしました。すみません

hra1129 commented 5 months ago

LOCATEとしては、256は不正な値なのですが、これをそのままアセンブリコードとして出力してしまい、 LD A, 256 となっていたために、ZMA がエラーを出していました。

不正だけど、256 は 0 として動作するように対策を打ちました。 これで問題なくコンパイルが出来るようになったはずです。お試し下さい。

baseballcap-mio commented 5 months ago

BACON、ZMA共にパスすることを確認しました。 お疲れ様でした。