FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

ISSでイメージファイルをロードできるような機能を追加

xv6の勉強をしていて、xv6.imgとか、fs.imgとかがロードできたほうが良いなと思ったので、その機能を追加しておいた。

github.com

どうやら、単純にimgファイルは中身を読み取ってそれを転送していくだけで良いみたいだ。 ただし、今はテスト段階のため、512バイト(xv6で言う1ブロック)を転送するのみにした。

uint32_t EnvBase::LoadImage (std::string filename)
{
    uint8_t buf[512];

    // open binary
    int fs_img = open (filename.c_str(), O_RDONLY, S_IREAD);
    if (fs_img < 0) {
        perror (filename.c_str());
        exit (EXIT_FAILURE);
    }

    // Read head 512byte of image file
    if (read (fs_img, buf, 512) != 512){
        perror ("read");
        exit (EXIT_FAILURE);
    }

    fprintf (g_debug_fp, "<Load Image %s>\n", filename.c_str());
    for (int byte = 0; byte < 512; byte++) {
        StoreMemoryDebug (byte, buf[byte], Size_Byte);
        if (g_img_dump == true) {
            if ((byte % 16) == 0) {
                fprintf (stdout, "%08x : ", byte);
            }
            fprintf (stdout, "%02x ", buf[byte]);
            if ((byte % 16) == 15) {
                fprintf (stdout, "\n");
            }
        }
    }

    return 0;
}

--imgfileオプションでロードできる。--img_dumpオプションで、ロードしたイメージの内容をダンプする。

swimmer_mips --debug --imgfile xv6.img --out debug.log --debug_func --debug_gvar --max 1000000 --img_dump