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 次下载
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