深圳IO —— 一个汇编编程小游戏
目录
- 简介
- 数据手册
- 接口
- 简单 I/O
- XBus
- 简单 I/O 对比 XBus
- 语言参考
- 程序结构
- 注释
- 标签
- 寄存器
- acc
- dat
- p0、p1、x0、x1、x2、x3
- null 伪寄存器
- 指令操作数
- 确保进行足够的睡眠 (slp)!
- 基本指令
- 算法指令
- 条件指令
- 隐藏指令
- 游戏界面
- DIY
版本:
简介
以下介绍摘自未来软件园
《深圳IO(SHENZHEN I/O)》是由硬核编程游戏开发商Zachtronics打造一款玩法新颖的模拟+解谜游戏。游戏中玩家需要利用手头的芯片,按照要求条件输出信号,制成一些电器元件产品。由于游戏中的数字都是用十进制存储的,上手相对容易许多,而且为了减少成本和运行功耗,本游戏有极高的重玩价值。《深圳IO(SHENZHEN I/O)》和Zachtronics此前开发的《太空化学》、《无限工厂》、《TIS-100》一样,这款模拟+解谜游戏相信是许多硬核玩家的必备之作。
数据手册
游戏专门准备了数据手册,属实是震撼到我了
接口
MCxxxx 微型控制器上有两种接口:简单 I/O 接口和 XBus 接口。请注意,它们之间不可交互,只得将同类型的引脚相互连接。
简单 I/O
简单 I/O 值是从 0 到 100 的连续电平信号。简单 I/O 引脚无标记。
简单 I/O 用于将微型控制器与按钮、开关或麦克风等简单输入以及 LED、扬声器或电机等简单输出连接起来。
以上介绍摘自手册
说是简单IO,但我觉得和现实中的DAC和ADC更像。
XBus
XBus 值是一系列不连续数据包,范围在从 -999 到 999 的区间内,包含边界值。XBus 引脚用黄点标记。
XBus 结构通常用于在两台微型控制器之间传输数据,或也可在一台微型控制器和键盘或数字显示器等复杂输入输出端口间进行传输。
以上介绍摘自手册
就当成一种封装好的协议接口就行,一帧数据范围为 -999 到 999。
简单 I/O 对比 XBus
以下介绍摘自手册
可随时对简单 I/O 引脚进行读写,而不需要考虑连接设备的状态。
与之不同,XBus 采用的是同步协议。只有当一端的读取接口尝试读取,同时另一端的写入接口尝试写入的时候,数据才能通过 XBus 引脚进行传输。如尝试发起读或写操作时,所有连接设备都未能配合进行相应的[写或读]操作,则发起的操作会被阻塞。
语言参考
以下介绍摘自手册
程序结构
在 MCxxxx 中,每行程序都必须由以下结构组合而成:
标签 条件 指令 注释
所有组成部分都为非必要的可选成分,但必须按照规定顺序(如有)出现。以下几行为正确语法示例:
# 该行是一条注释。
loop: # 循环到 ACC 值为 10teq acc 10
+ jmp endmov 50 x2add 1jmp loop
end:mov 0 acc # 重置计数器
注释
在“#”符号后直到该行结束的所有文字都会作为注释被忽略。注释能通过在程序内部描述代码行为,帮助开发者提高效率。
标签
标签必须出现在行首,后面跟一个冒号(“:”)。标签对应的是 jmp 指令,用于跳到某个目标地址。标签必须以字母开头,可以包含字母、数字和下划线。
寄存器
寄存器是 MCxxxx 指令操作数据的读取来源和写入目的地。不同 MCxxxx 模型使用的寄存器集合各不相同。如果一台微型控制器未装备某类寄存器,使用该类寄存器就会导致错误。
acc
acc 是 MCxxxx 系列微型控制器的通用主寄存器,用于进行内部计算。如未特别说明,所有数学计算都将使用并修改 acc 的值。
dat
dat 是一个额外的寄存器,只有部分 MCxxxx 系列机型安装了该类寄存器。绝大多数可使用 acc 的场景,都能使用 dat 替代。
MCxxxx 微型处理器的内部寄存器(acc 和部分机型上的 dat)初始值都为 0。
p0、p1、x0、x1、x2、x3
从 MCxxxx 微型控制器的引脚读取或写入数据时,要用到引脚寄存器(p0、p1、x0、x1、x2、x3)。
通过引脚读取和写入数据,让一台 MCxxxx 微型控制器可以同另一台与之相连的适配设备开展通讯和协作。MCxxxx 系列微型控制器的所有引脚都配备了简单 I/O 或 XBus 接口功能。请参照相应设备规格书了解有关引脚功能的详细内容。
null 伪寄存器
null 是一个伪寄存器。从 null 寄存器读取数值,会得到 0 值。写入 null 寄存器则不会有任何变化。一般用于丢弃来自Xbus接口的数据。
指令操作数
各个类型的指令都要求一个固定的操作数。如果一条指令要求相应操作数,则写法如下:开头是指令名,后跟所有操作数,全部由空格分开。为提高开发效率,MCxxxx 编程系统不需使用多余的标点来隔开指令操作数。
以下注释详细描述了指令操作数:
确保进行足够的睡眠 (slp)!
CPU 通常比读写信号显示的速度快得多。
CPU 可以在一个时间单位内执行大量指令。
CPU 可以通过睡眠 (sleep) 进入到下一个时间单位。
要让 CPU 进入 sleep 状态,就要使用 slp 指令,规定睡眠的时间单元。
基本指令
nop
该指令无效。
mov R/I R
将第一个操作数复制到第二个操作数中。
jmp L
跳到既定标签位置,执行下一行指令。
slp R/I
在操作数规定数量的时间单位内保持睡眠状态。
slx P
保持睡眠状态,直到可以从操作数中规定的 XBus 引脚读入数据。
算法指令
存储器可存储从 -999 到 999 之间的整数,包含边界值。如果一个算法操作的计算结果超出了该范围,系统将保存允许的最接近数值。例如,如果 acc 的值为 800,对其执行 add 400 指令后,系统会将 999 存入 acc。
add R/I
将第一个操作数的值与 acc 存储器的值相加,并将结果存入 acc 存储器。
sub R/I
从 acc 存储器的值中减去第一个操作数的值,并将结果存入 acc 存储器。
mul R/I
将第一个操作数的值与 acc 存储器的值相乘,并将结果存入 acc 存储器。
not
如果 acc 的值为 0,则将 100 值存入 acc。否则,将 0 值存入 acc。
dgt R/I
从 acc 存储器中分离出操作数规定的位数值,并将结果存入 acc 存储器。
dst R/I R/I
分离出 acc 值中第一个操作数规定的位数值,将该值设为第二个操作数的数值。
以下是 dgt 和 dst 指令的使用范例:
条件指令
所有 MCxxxx 编程语言的指令都允许有条件执行。在某条指令前添加“+”或“-”号可以借助测试指令允许或禁止执行该指令。当一条指令被测试指令禁止执行时,系统就会跳过该指令,且不会消耗能量。没有前缀符号的指令不会被禁止执行,因而每次都会正常执行。所有有条件指令在初始时都处于禁止执行状态。必须运行测试指令,才能允许执行有条件指令。
teq R/I R/I
测试第一个操作数 (A) 是否等于第二个操作数 (B) 的值。
tgt R/I R/I
测试第一个操作数 (A) 是否大于第二个操作数 (B) 的值。
tlt R/I R/I
测试第一个操作数 (A) 是否小于第二个操作数 (B) 的值。
tcp R/I R/I
比较第一个操作数 (A) 和第二个操作数 (B) 的值。
隐藏指令
来自游戏中期的“秘密指令”邮件
gen P R/I R/I
它能方便地在所有简单I/O引脚上生成脉冲!该信号会在开(100)和关(0)之间跳转,你想要持续多少时间单位都行,取决于最后两个操作数的数值。
gen P X Y
# 相当于:
mov 100 P
slp X
mov 0 P
slp Y
@符号
加在所需应用的语句前,使其只执行1次,一般用于初始化。
游戏界面
随着游戏进度,将会有不同的任务发布。每个任务完成后游戏会给出你的方案的产品成本、电量使用、代码行数;
信息栏给出了甲方的要求:
确认栏给出了需要的时序波形
左下角提供了单步调试和全速仿真等功能,最下方的拖动条控制仿真的速度。
界面右侧是器件选择
界面中间是PCB,可以放置器件和编写程序。
DIY
你甚至可以在游戏中设计俄罗斯方块!视频见【深圳I/O】我在游戏里玩游戏之俄罗斯方块 —— 0第十名0
深圳IO —— 一个汇编编程小游戏相关推荐
- 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子
在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...
- python能做什么游戏-有趣又好玩的9个Python编程小游戏、简直太棒了
打开搜狗搜索APP,查看更多精彩资讯 学习编程对大多数人来说是枯燥而无聊,大家有时候往往会觉得精神崩溃,提不起学习的兴趣,因此从入门到放弃,面临这种困境该怎么办呢? 这时候就有一些大牛设计出用游戏来学 ...
- python小游戏合集-9个Python编程小游戏,有趣又好玩,简直太棒了
前言 学习编程对大多数人来说是枯燥而无聊,大家有时候往往会觉得精神崩溃,提不起学习的兴趣,因此从入门到放弃(笑哭),面临这种困境该怎么办呢?这时候就有一些大牛设计出用游戏来学习编程知识点,所以,这世界 ...
- python简单游戏程序设计_有趣又好玩的9个Python编程小游戏、简直太棒了
打开搜狗搜索APP,查看更多精彩资讯 学习编程对大多数人来说是枯燥而无聊,大家有时候往往会觉得精神崩溃,提不起学习的兴趣,因此从入门到放弃,面临这种困境该怎么办呢? 这时候就有一些大牛设计出用游戏来学 ...
- 9个Python编程小游戏,有趣又好玩,简直太棒了
前言 学习编程对大多数人来说是枯燥而无聊,大家有时候往往会觉得精神崩溃,提不起学习的兴趣,因此从入门到放弃(笑哭),面临这种困境该怎么办呢?这时候就有一些大牛设计出用游戏来学习编程知识点,所以,这世界 ...
- python写一个游戏多少代码-使用50行Python代码从零开始实现一个AI平衡小游戏
集智导读: 本文会为大家展示机器学习专家 Mike Shi 如何用 50 行 Python 代码创建一个 AI,使用增强学习技术,玩耍一个保持杆子平衡的小游戏.所用环境为标准的 OpenAI Gym, ...
- c语言min函数_C语言探索之旅 | 第一部分第十课:第一个C语言小游戏
内容简介 前言 准备工作和建议 我的代码 改进方案 第一部分第十一课预告 1. 前言 上一课是 C语言探索之旅 | 第一部分第九课:循环语句 . 经过前面这么多课的努力,我们终于迎来了第一个比较正式的 ...
- 使用Python开发一个恐龙跑跑小游戏,玩起来
相信很多人都玩过 chrome 浏览器上提供的恐龙跑跑游戏,在我们断网或者直接在浏览器输入地址"chrome://dino/"都可以进入游戏 今天我们就是用 Python 来制作一 ...
- 你写一个web网页小游戏
写一个 web 网页小游戏需要以下几个步骤: 选择一种编程语言,常用的有 HTML.CSS.JavaScript 和 Python. 使用编辑器创建一个 HTML 文件,这个文件将是你的网页的基础. ...
最新文章
- 特殊标记字段(#)实时富文本显示
- pycharm点击右上角退出程序时terminate和disconnect区别?(别用disconnect)
- Spark Operator资料收集
- 微信小程序获取用户唯一openid,包含java
- JavaScript Onclick事件解释
- 前端学习(3120):item中的key
- “双击Pycharm无响应”解决方案
- linux-5.12-rc1-dontuse
- 数据结构开发(6):静态单链表的实现
- 单元测试工具 unitils
- Sybase:数据类型(对比sqlserver)
- 快速切换Mac系统设置One Switch
- chrome历史版本及重大变化(维基百科)
- 重磅!上海985教授当选!全球仅4人!
- HP台式机安装WIN10
- win10上成功运行faster-rcnn.pytorch-1.0
- 挽救市场信誉度,三星正面回应手机爆炸缘由
- python计算正整数各位之和_关于python:计算两个正整数或负整数之和
- java实现表情符号过滤
- MGN网络详解以及代码分析
热门文章
- Flutter 字节跳动穿山甲广告插件发布 - FlutterAds
- 【计算机毕业设计】21.二手拍卖系统maven源码
- VS2019 error : 无法加载具有重复项目项的项目: ....作为 Image 且作为 Image 项类型包括在其中。
- 我们与“盗墓的”是同行?
- 用类计算长方体体积 面积
- linux 基础命令(ps、kill、vim、grep等)
- Python3入门教程||Python3 数据结构||Python3 模块
- 纸质名片?OUT啦!“会说话”的官微名片助企提升销售力!
- ArFi光刻胶市场现状及未来发展趋势分析
- IOS开发常用工具网站