选择不同的分支来查看每次增加的内容,以达到分解整个项目实现的目的。
- Lab1:模拟CPU6502、总线和内存RAM,实现CPU可从内存中读写数据和取指令
- Lab2:参考6502 CPU 的datasheet,实现了CPU对指令的解码执行
- Lab3:解析卡带(Cartidge 游戏卡)的文件格式,编写简单的.nes程序(加法运算),测试 CPU 能否正常执行程序。
- Lab4:实现 Mapper,预留给游戏卡的地址空间是有限的,游戏卡的程序内存(Program Memory)被限制在 32 KB,角色内存(Character Memory)被限制在 8 KB。为了突破这种限制,人们发明了内存映射器(Mapper)。
- 内存映射器是游戏卡中的一个硬件,具有存储体空间切换(Bank Switching)的功能,以将新的程序或角色内存引入到可寻址的内存空间。
- Lab5:多媒体库(SFML 简单快速多媒体库)的配置和使用,并构建PPU总线(Picture Bus)以及虚拟屏幕(Virtual Screen)的实现
- Lab6: 实现 PPU 的各个回调函数,显示游戏画面
- Lab7:增加按键控制,愉快游戏!
start分支为主分支(默认分支),然后经过'修改-提交-合并-修改冲突-提交-合并'这六个过程,将其它分支依次往start分支上合并,并补全代码。
# 1.克隆仓库,当前位于主分支start
git clone https://github.com/SmallPond/CSUer_NES.git
# 切换到工程目录并创建 build 文件夹
cd CSUer_NES
mkdir build
# 2.主分支start不需要修改,直接将分支Lab1合并到主分支start
git merge origin/Lab1
# 3.补全Lab1的代码,在工程目录下执行 make 命令,类似的输出如下:
db@db:~/CUSer_NES$ make
./src/CPU.cpp ./src/MainBus.cpp ./src/main.cpp
./build/CPU.o ./build/MainBus.o ./build/main.o
g++ -g -Wall -I./include -std=c++11 -o build/CPU.o -c src/CPU.cpp
g++ -g -Wall -I./include -std=c++11 -o build/MainBus.o -c src/MainBus.cpp
g++ -g -Wall -I./include -std=c++11 -o build/main.o -c src/main.cpp
g++ ./build/CPU.o ./build/MainBus.o ./build/main.o -o myNES
...
# 若通过编译可生成myNES文件,在控制台执行./myNES 可打印出如下信息(对应执行了 main.cpp的逻辑)
db@db:~/MyNES$ ./myNES
After reset the PC is :0
After Step the PC is :1
# 4.提交到git本地仓库
git add .
git commit -m "输入你的提示文本"
# 5.将分支Lab2也合并到主分支start,去开启实验2
git merge origin/Lab2
# 6.此时会产生冲突,有冲突其实已合并完成了,改好冲突再提交就已经可以继续写了
<<<<<<< HEAD
=======
- Lab2: 参考6502 CPU 的datasheet,实现了CPU对指令的解码执行
>>>>>>> origin/Lab2
# 7.直接将<<<<<<< HEAD ======= >>>>>>> origin/Lab2这些多余字符去掉,再次提交到本地仓库
git add .
git commit -m "输入你的提示文本"
# 8.再次将分支Lab2合并一次,会提示Already up to date
git merge origin/Lab2
# 9.合并成功,开始补全Lab2代码。进入后面实验时,循环步骤4 ~ 8
# 10.可切换到其它分支进行查看,之后再切回主分支start即可
git checkout LabN
git checkout start