piroyan's Lablog

実験の合間に思いついた戯言などをつらつらと

<<次の記事 前の記事>>

MSX × SDCC(第3回)

仕事が終わった~~と言いつつ、まだもう少し作業が残っているもので、更新遅めです……しくしく

さて、そんな中、今回は取り急ぎ第1回で公開したにも関わらず、不具合が見つかって公開を停止していた→Hex2Binの修正。

そして、第2回の追記で「悩み中」と書いていたスタートアップコード→crt0.s
(悩むまでも無く、初期値付き変数の初期化が必要なので、必須でしたね。。しょぼん)



しかし奇妙なのが、初期値付き変数の初期化コードがRAM領域の一番最後に付加されるんですが……

全てのコードがRAM上で実行される場合はともかく、ROM化を前提とするならこれはマズいと思うんですけど、どうなんでしょうか。。

.area _GSINITを設定している辺りがクサそうなんですが、まだまだ勉強不足しょぼん

もうちょい調べてみます。(MSXで使う分には今のままでも特に問題無いですが)


【12/25追記】
--
何か勘違いをしていました汗
_DATA領域の初期化コードは、ちゃんと_CODE領域の最後に追加されます。

→さらに追記:
Makefileにおいて、リンクするオブジェクトに crt0.o を一番最初に指定しないとダメなようです。

 × OBJ = main.o crt0.o ...
 ○ OBJ = crt0.o main.o ...

#ctr0にてorgで絶対アドレスを指定しているから?
--

開始アドレスは0x8030からになっているので(BASICでギリギリ
10 BLOAD"xxxxxxxx.xxx",r

が書けるくらいの場所)、必要に応じて書き換えて下さい。

このままの設定なら、--code-loc 0x8036が良い感じですてへっ

【12/25追記】
--
●開始アドレスの補足:

crt0.s内で.orgを指定しないと、0x0000が開始位置になるので、.org指定が必要です。
また、linkerに指定する--code-locは、.orgで指定した開始アドレス+スタートアップコードサイズにする必要があります。

上記のcrt0.sの場合、

    call gsinit
    jp _main

の、6バイトのコードなので、0x8030 + 6 = 0x8036 となるわけです。
--

| MSX | 12:34 AM | comments (0) | trackback (0) |

コメント

コメントする








この記事のトラックバックURL

http://piroyan.com/lablog/tb.php/36

トラックバック

PAGE TOP ↑

CALENDAR

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31      
<前月 2017年07月 次月>

QR CODE

QRコード

PROFILE

NEW ENTRIES

CATEGORIES

ARCHIVES

RECENT COMMENTS

RECENT TRACKBACK

PRODUCTS

LINK

BANNER

piroyan's lablog banner

リンクする際にお使い下さい。
※リンクはご自由にどうぞ。

大きいサイズはコチラ

POWERED BY

BLOGNPLUS(ぶろぐん+)

OTHER