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));
得到478/2=239个字节.
this.memory[memStart..memStart + romSize] = cast(ushort[])read(rom);
失败,因为两个区间大小不同.
浙公网安备 33010602011771号