天天看点

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);