天天看點

d寫仿真器錯誤

​​原文​​​ 我正在寫​

​chip8​

​仿真器.正在加載​

​rom​

​到記憶體中.根據​

​文檔​

​,每個​

​指令​

​是​

​2個​

​位元組,最大記憶體位址是​

​4K​

​.是以按​

​正短​

​數組定義記憶體.

struct Chip8
{
    ushort[4096] memory;
...      

這樣,加載它:

void read(string rom)
{
    import std.file : exists, getSize, read;

    if (exists(rom))
    {
        writeln("加載記憶體");
        auto romSize = getSize(rom);
        writeln("大小:", romSize);
        if (romSize > this.memory.length - memStart)
            writefln("太大! 大小 = %s 記憶體 = %s", romSize,this.memory.length - memStart);

        else
        {

            // 可用to!int[]或必須用`轉換`?
            this.memory[memStart..memStart + romSize] = cast(ushort[])read(rom);

        }
    }
    else
    {
        writeln("不能讀", rom);
    }

}      

但我得到了違反​

​區間​

​錯誤.

核心.異常.區間錯誤@源\晶片.d(85):違反區間      

我不明白​

​為什麼​

​​?根據​

​Windows​

​​該檔案為​

​478​

​​位元組.​

​memStart​

​​是​

​0x200​

​​.​

​0x200+478=990​

​​,它正好在我建立的​

​4096Kb​

​數組中.

writeln (getSize(rom));      

報告​

​478​

​​位元組,但你用的是​

​正短​

​​(為什麼?據我所知,這是一個8位機器),你轉換​

​read(rom)​

​​為​

​正短​

​,這隻有一半的大小:

writeln (cast(ushort[])read(rom));      
this.memory[memStart..memStart + romSize] = cast(ushort[])read(rom);