原文 我正在写
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);