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