因为之前不知道 Toby 学长开发的修改版 Mars,所以自己动手尝试了一下。但是现在要用的话,肯定用学长的修改版更好啦!
https://github.com/Toby-Shi-cloud/Mars-with-BUAA-CO-extension
下载
看到右侧的 Release,目前最新版是 0.4.2【11月11日才更新的!优化了新增配置的用户体验】
从源代码构建
Clone 下来源代码,丢到 IDEA 里面,运行 Mars.java
即可,若想打包成 jar,可以参考一下百度,新建一个工件,不赘述。
对修改版进行贡献
首先 fork 一下原始仓库,然后在自己 fork 下来的仓库中进行修改、提交等。原仓库配置了 github 的工作流,可以通过
1 | git tag vx.y.z |
给最近的一次提交打上 tag,x.y.z 是你写的版本号,然后推送上去(推送到你自己的仓库),会自动进行打包,并运行一些测试。
接着,在 github 上发起 Pull Request!学长就有可能去合并你的代码哦!
【以下内容不属于学长的修改版 Mars,用法不适用】
众所周知,Logisim 的 Logging
功能可以输出 CPU
运行过程中的一些信息,如对寄存器或者 Memory 的写入,而
Mars 的 dump
参数可以输出运行结束后的寄存器或者 Memory
中的数据。
这俩真不般配!
但是,倘若对其中的某一个进行修改,是不是就可以拿 Mars 和自己写的 CPU 进行对拍了呢?答案是肯定的。
我发现问题远比想象中的要简单。
使用方法
新增参数:record
,按照固定格式打印寄存器及内存的变化。注意,这里的
“变化” 指
“写入”,即使内容没有发生变化,只要有写入的动作,就会被打印(应该吧)。
打印格式:
1 | $<reg_name>($<reg_id>): <old> => <new> |
例如:
1 | $t9($25): 0000eebb => 0000ffff |
对于寄存器,只会打印 $1
~ $31
的变化。
命令行举例:
1 | java -jar Mars_with_record_headless.jar mc CompactDataAtZero record test.asm |
注意,打印的“目的地”是标准输出,而 Mars 的一些提示语默认也是打印到标准输出,不过好在它们很容易区分。
修改内容
- 禁用了
mars.MarsLaunch
中启用 GUI 的代码(这是为了避免后续修改可能造成的不良影响) - 在
mars.Globals
增加了全局配置record
,及其相关的参数解析 - 在
mars.mips.hardware.Register
中增加了对寄存器变化的打印 - 在
mars.mips.hardware.Memory
中增加了对内存变化的打印
下载链接
不能用这个 jar
包来启动 Mars 界面!!!
https://bhpan.buaa.edu.cn/link/AA2B7CEECAD915432EA982A2509B60A861(存档)(GitHub Releases)
文件名:Mars_with_record_headless.jar
字节码版本:52.0 (jdk1.8)
1