Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MZT出力の追加とCMT不具合の修正 #384

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

dogatana
Copy link

@dogatana dogatana commented Jan 3, 2025

内容

  • MZT 出力のオプション追加と実装
  • CMT 出力の不具合修正

2件の修正になりましたが、相互に関係するので1件の PR となっているのをご承知おきください。
手動でのテスト、既存のテストが問題なく実行できることまでは確認しています。
申し訳ないですがMZT用のテストコードは追加できていません。

MZT 出力のオプション追加と実装

ヘルプ出力も含めて関連しそうな箇所は修正しているつもりです。
修正内容に不備、過不足ありましたら訂正お願いします。

CMT 出力の不具合修正

不具合内容

現在の処理では CMTヘッダのアドレスに実行開始アドレスを設定しているため、
格納先頭アドレス≠実行開始アドレスの場合に不整合が発生します。

不具合再現例

        org     $1200

data1:  db      "01234567"
start1: ld      de,data1
        ret

        end     start1

このアセンブル結果は次のとおりになります。
ここで開始アドレスが 1208 になっているため、ローダは 1208 からプログラムを配置します。
これは 1200 となるのが正しいです。

00000000: 3a 12 08 e6 3a 0c 30 31  32 33 34 35 36 37 11 00  |:...:.01234567....l:
00000010: 12 c9 6c 3a 00 00                                 |..l:..

3a 1208(開始アドス)
   e6(チェックサム)
3a 0c(出力長)
   30 31 32 33 34 35 36 37 11 00 12 c9
   6c(チェックサム)
3a 0000(終了)                               

@AILight
Copy link
Owner

AILight commented Mar 2, 2025

確認が遅くなっておりましてすみません。今週の課題とさせていただきます。

@AILight
Copy link
Owner

AILight commented Mar 9, 2025

作業の開始が遅れてしまったので内容の理解とファイル形式の理解までしか進められませんでした。
まだまだ理解度が低いので間違っている可能性もありますが、今今の理解ですとCMT形式でのヘッダーのアドレスはロードされる場所を示しているようです。ですので、ENDの仕様は今までの方がよさそうです。
MZT は、読み込みアドレスと実行アドレスを指定できますのでENDを拡張するか?何か別の指定を考えて読み込みアドレスと実行アドレスを指定できるようにした方が良いように思います。

他のアセンブラやツールの実装状況を確認して仕様を考えたいと思います。

@AILight
Copy link
Owner

AILight commented Mar 9, 2025

こちらの仕様もあとで確認をします。
http://www.maroon.dti.ne.jp/youkan/mz700/z80as.html

@dogatana
Copy link
Author

CMT形式でのヘッダーのアドレスはロードされる場所
ENDの仕様は今までの方がよさそうです。

はい。構造としてアドレス情報は 1 つで、ローダはこのアドレス情報しか得られません。
よって実行開始アドレス(エントリーポイント)ではなく、格納開始アドレスでないと不都合が発生します。
END の仕様は現在のもので問題ありません。

MZT は、読み込みアドレスと実行アドレスを指定できますのでENDを拡張するか?

こちらも END を拡張する必要はありません。

  • 最小のORGアドレスをロードアドレス
  • 実行開始アドレス

に格納することになりますが、どちらも現在の仕様・実装で得られますので。

@AILight
Copy link
Owner

AILight commented Mar 16, 2025

コメントありがとうございます。CMTの仕様を考慮して考えていたのですが、ENDはやはり起動のアドレスを指定できるようにしておいて、第二引数が空いていればそこをロードアドレスにするのがいいと思いました。また第二引数が省略された場合にはORGの起動時のアドレスを使う方がよいかと思います。仕様の整合を考えたうえでもそれがベストと考えました。
方針が決まりましたので、今週の空き時間をみつけて対応したいと思います。

@dogatana
Copy link
Author

END はMASM他でも起動アドレス指定が普通だと思います。(これ以外のものを知りません😓)
第2引数で格納アドレスを指定できるのは、本来(ORG)のアドレスとは別のアドレスにロードしておいて、起動後転送するといった用途を想定されたものでしょうか。自由度が高まると思います。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants