Skip to content

About

😎使用Rust实现Intel 8080,并实现《太空侵略者》的仿真

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Latest commit

 

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Space Invaders 8080

使用 Rust 编写的 Intel 8080 CPU 模拟器与《太空侵略者》街机仿真器

Space Invaders 游戏画面

项目介绍

本项目使用 Rust 模拟 Intel 8080 CPU,加载并执行《太空侵略者》(Space Invaders)的原版街机 ROM。CPU 的寄存器、指令执行、标志位、栈和中断由 Rust 代码模拟,游戏逻辑由 ROM 中的机器码驱动。

除了 CPU,项目还实现了游戏所需的 ROM、工作内存、显存映射和部分输入端口,并通过 minifb 显示画面、采集键盘输入。

开发本项目目的是学习 CPU 如何执行指令,以及模拟器如何把内存、输入输出和画面更新连接起来。

模拟器如何工作

Intel 8080 是一款 8 位处理器,使用 16 位地址寻址。项目中的 CPU 每次从程序计数器 PC 指向的位置读取指令,执行后更新寄存器、标志位或内存,并返回该指令消耗的时钟周期。

游戏主循环累计执行周期并请求中断,随后把显存内容转换为窗口像素。一次画面更新之间会执行多条 CPU 指令。键盘状态在刷新时采样,再通过输入端口供 ROM 读取,支持同时按住方向键和开火键。

模块 作用
CPU 模拟 8080 的寄存器、数据传送、算术与逻辑运算、跳转、调用、栈操作及中断
内存 为 CPU 提供统一的地址访问接口,区分 ROM、工作 RAM 和显存
游戏输入 将投币、开始、移动和开火按键组合为端口中的状态位
显示 将显存中的单色位图转换为 224 × 256 画面,默认以 2 倍大小显示

构建与运行

在项目根目录执行:

cargo run --release

也可以先构建,再运行可执行文件:

cargo build --release

游戏操作

启动后会进入演示画面。先按一下 C 并松开投币,再按 Enter 开始单人游戏。

按键 操作
C 投币
Enter 开始单人游戏
← / → 左右移动
Space 开火

方向键和开火键可以同时按下。需要结束程序时,可在启动它的终端按 Ctrl+C。

ROM 与内存布局

编译时需要 res/ 中的四个 ROM 文件,每个文件为 2 KiB。运行时,程序将内嵌的 ROM 数据映射到以下地址:

地址范围 内容
0x0000–0x07FF res/invaders.h
0x0800–0x0FFF res/invaders.g
0x1000–0x17FF res/invaders.f
0x1800–0x1FFF res/invaders.e
0x2000–0x23FF 工作 RAM,1 KiB
0x2400–0x3FFF 显存,7 KiB

代码结构

src/
├── cpu/             # Intel 8080 指令、寄存器和 I/O 接口
├── memory/          # 地址总线、ROM、工作 RAM 和显存
├── game/invaders/   # 游戏主循环、内存映射、输入及窗口显示
├── util/            # 数值处理工具
├── lib.rs           # 导出 CPU 和内存接口
└── main.rs          # 游戏启动入口
res/                 # 游戏 ROM
resource/            # README 使用的截图

About

😎使用Rust实现Intel 8080,并实现《太空侵略者》的仿真

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages