2个版本
使用旧的Rust 2015
0.1.1 | 2016年7月31日 |
---|---|
0.1.0 | 2016年7月29日 |
在#z80中排名27
130KB
3.5K SLoC
rz80 (工作进展中)
用Rust编写的Z80芯片家族仿真库。
用法
# Cargo.toml
[dependencies]
rz80 = "0.1.0"
示例
运行ZEXDOC和ZEXALL兼容性测试
> cargo test --release -- --nocapture --ignored
> cargo run --release --example z1013
在Z1013仿真器中,使用以下命令启动BASIC解释器
# J 300[Enter]
BASIC解释器将启动并请求内存大小,只需按Enter键。
输入并运行一个简单的Hello World程序
>AUTO[Enter]
10 FOR I=0 TO 10[Enter]
20 PRINT "HELLO WORLD!"[Enter]
30 NEXT[Enter]
40 [Escape]
OK
>LIST[Enter]
...
>RUN[Enter]
...
>BYE[Enter]
lib.rs
:
rz80是一个用Rust编写的Z80芯片家族仿真库,可以作为编写完整的基于Z80的计算机仿真器的起点。
概述
rz80库提供了Z80 CPU、PIO(并行输入/输出)、CTC(计数器/定时器通道)的芯片仿真器,以及一个定义特定仿真系统中芯片如何连接在一起的Bus
trait。
编写家用电脑仿真器通常涉及以下步骤
- 导入所需的芯片
- 使用include_bytes!宏导入ROM转储
- 定义一个包含仿真器所需状态的
State
struct,除了芯片状态外 - 定义一个包含所有芯片和State struct的
System
struct,并用RefCells包装 - 编写一个
System::poweron()
函数,该函数初始化嵌入式芯片和状态对象,初始化内存映射,并将CPU PC寄存器设置为ROM转储的起始地址 - 编写一个
video-decoder
函数,该函数每帧生成一个线性RGBA8帧缓冲区 - 在System struct上实现
Bus trait
,这通常涉及以下内容- 键盘仿真
- 内存银行切换
- 在各个硬件组件之间转发中断请求
- 声音生成
- 实现
main loop
,该循环创建窗口,转发键盘输入,并推进芯片仿真器
非常简单的8位家用电脑系统(类似于ZX81)不需要任何额外的代码,更复杂的家用电脑将需要rz80库之外的自定义芯片仿真。
查看附带的两个示例仿真器
> cargo run --release --example z1013
> cargo run --release --example kc87