#memory #emulator #parse #vector #file #map

svmap

一个用于解析 SVMap 的库,用于为仿真器映射内存

5 个不稳定版本

0.3.0 2023年6月10日
0.2.1 2023年6月5日
0.2.0 2023年6月5日
0.1.1 2023年5月28日
0.1.0 2023年5月28日

#326仿真器

每月 24 次下载

MIT 许可证

25KB
477

SVMap

此包提供了一个用于解析 SVMap 文件(*.svmap)的库,用于为仿真器映射/配置内存。这样可以通过编辑一个简单且易于阅读的文本文件来配置仿真器内存,而不需要重新编程和重新编译现有的仿真器。

SVMap 文件的示例

(Set up memory)
0x0000 ... 0x7FFF -> ram 
0x8000 ... 0xFFFF -> rom 

(Set up vectors)
@reset_vector = 0xFFFD

有关更多信息,请参阅 lib.rs


lib.rs:

此包提供了一个用于解析 SVMap 文件 (*.svmap) 的库,用于为仿真器映射/配置内存。这样可以通过编辑一个简单且易于阅读的文本文件来配置仿真器内存,而不需要重新编程和重新编译现有的仿真器。

使用 SVMap 可以以类似实际生活的方式更改内存配置

插入额外的 RAM 棒并启动计算机。

(将 "address1 ... address2 -> ram (stick 3)" 添加到 SVMap 文件中)

示例

MOS6502 CPU 内存布局的示例

(Set up memory)
0x0000 ... 0x7FFF -> ram
0x8000 ... 0xFFFF -> rom

(Set up vectors)
@reset_vector = 0xFFFD

可以按照以下方式解析

#[derive(Clone)]
enum Region {
Ram,
Rom
}

#[derive(Clone)]
enum Vector {
ResetVector
}

fn parse_region(identifier: &str) -> Result<Region, &str> {
match identifier {
"ram" => Ok(Region::Ram),
"rom" => Ok(Region::Rom),
_ => Err(identifier)
}
}

fn parse_vector(identifier: &str) -> Result<Vector, &str> {
match identifier {
"reset_vector" => Ok(Vector::ResetVector),
_ => Err(identifier)
}
}

// MemoryLayout::from_file( ... ) is also possible.
let ml = MemoryLayout::from_lines(
"(Set up memory)\n
0x0000 ... 0x7FFF -> ram\n
0x8000 ... 0xFFFF -> rom\n

(Set up vectors)\n
@reset_vector = 0xFFFD".into(),
parse_region,
parse_vector
).unwrap();

依赖项

~2.2–3MB
~54K SLoC