全ROMチェックサム計算プログラム

全ROMデータを加算したチェックサム計算プログラムを作りたいのですが、16bitCPUのためかアドレスインクリメントで0xFFFFの次が0x0000に戻ってしまい、全ROM領域を加算することができません。
ここで聞くことではないかもしれませんが、分かる方いたら御教示お願いいたします。

【やりたいこと】
アドレス0x00000~0x1FFFF(128KB)のROMデータを1byte単位で加算した下位2byteのチェックサム値を算出する
(Cソースでもアセンブラでも可)

【試したCソース】
#define ROM_START 0x00000
#define ROM_END 0x1FFFF

main()
{
unsigned char *adr;
unsigned char *rom_end;
unsigned short sum;

adr = (unsigned char *)ROM_START;
rom_end = (unsigned char *)ROM_END;
sum = 0;

while(adr <= rom_end) {
sum += *adr;
adr ++;
};
}
Parents
  • yamamotoさんはじめまして。

    >加算した下位2byteのチェックサム値を算出する

    下位2byteだけを使うならunsigned shortで桁あふれが起きても問題ないと思います。
    どうせ上位は捨ててしまうのですから。


    ちゃんと4バイトで計算して下位2バイトを残すのであれば
    unsigned short sum(2バイト)ではなく
    unsigned long sum(4バイト)で試してみてはいかがでしょう。

Reply
  • yamamotoさんはじめまして。

    >加算した下位2byteのチェックサム値を算出する

    下位2byteだけを使うならunsigned shortで桁あふれが起きても問題ないと思います。
    どうせ上位は捨ててしまうのですから。


    ちゃんと4バイトで計算して下位2バイトを残すのであれば
    unsigned short sum(2バイト)ではなく
    unsigned long sum(4バイト)で試してみてはいかがでしょう。

Children
No Data