深圳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,但我觉得和现实中的DACADC更像。

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
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu所有php扩展php-7.0扩展列表

ubuntu所有php扩展php-7.0扩展列表 sudo apt-get install php7.0-bcmath sudo apt-get install php7.0-bz2 sudo apt-get install php7.0-calendar sudo apt-get install php7.0-ctype sudo apt-get install php7.0-curl sudo apt-get install php7.0-dom sudo ap…

unity shader 编辑器扩展类 ShaderGUI

这应该unity5才出的新功能了,今天看文档时刚巧看到了,就来尝试了一下。 效果如图: shader 的编辑器扩展分为2种方法: 是通过UnityEditor下的ShaderGUI类来实现的,形式比较近似于我们一般对unity编辑器的扩展方式。是通…

英语语法学习2--句子的成分

句子成份 词语和句子,就象是个人与家庭之间的关系一样,家庭是有个人组成的,家庭带来的幸福和责任都随着成员的增加而几何倍数的递增。 但是个人绝对不能脱离家庭。一个没有家庭概念的人注定活着没有什么意义。 现在我们聊一下,词语…

DataTables获取指定元素的行数据

https://www.cnblogs.com/hdwang/p/7126796.html 看上帖,没有看懂 看官网 https://datatables.net/examples/ajax/null_data_source.html 好像看懂,待测试。 响应式处理: https://datatables.net/extensions/responsive/ 实测代码 &l…

[LeetCode] Power of Two 判断2的次方数

Given an integer, write a function to determine if it is a power of two. Example 1: Input: 1 Output: true Example 2: Input: 16 Output: true Example 3: Input: 218 Output: false 这道题让我们判断一个数是否为2的次方数,而且要求时间和空间复杂度都为常数…

【电路补习笔记】9、电容式开关电源(电荷泵)

目录分类原理电荷泵基础开关电容稳压器的细调功能电荷泵的电压增益调节输出电容(Co)优点电容式开关稳压器减小纹波相关应用老师的主页:唐老师讲电赛 视频地址: 电源大师3——电容式开关电源(电荷泵)工作原理…

CPU 硬盘性能到底相差多少

本文以一个现代的、实际的个人电脑为对象,分析其中CPU(Intel Core 2 Duo 3.0GHz)以及各类子系统的运行速度——延迟和数据吞吐量。通过粗略的估算PC各个组件的相对运行速度,希望能给大家留下一个比较直观的印象。本文中的数据来自…

Datatables 构建响应式

https://datatables.net/extensions/responsive/

【电路补习笔记】10、电感式开关电源(BUCK 降压电路)

目录分类封装焊线式覆晶式开关电源三种基本的非隔离开关电源纹波(ripple)开关电源的元件构成有源开关肖特基二极管或快恢复二极管不使用普通硅二极管的原因电感电容分压电阻(输出电压设置)工作原理工作模式连续模式(co…

php中Session的生成机制、回收机制和存储机制探究

转载:http://www.jb51.net/article/53938.htm这篇文章主要介绍了php中Session的生成机制、回收机制和存储机制探究,可以帮助大家对Session有一个全面的了解,需要的朋友可以参考下1、php中session的生成机制我们先来分析一下PHP中是怎么生成一个session的。设计出session的目的是…

FFT(模板)

优美 这里写代码片 #include<cstdio> #include<cstring> #include<iostream> #include<cmath>using namespace std;const int N301000; const double piacos(-1.0); struct node{double x,y;node (double xx0,double yy0){xxx;yyy;} }; node a[N],b[N]…

iPhone使用CoreTelephony获得SIM卡网络运营商资讯和通话资料

注意要加头文件目录 /System/Library/Frameworks/CoreTelephony.framework/Headers 到 build 设置 Header Search Paths&#xff0c;并在使用到这些类中加头文件&#xff0c;例如1. #import "CTCarrier.h" 2. #import "CTTelephonyNetworkInfo.h" iOS 4.0 …

datatables隐藏列设置及获取隐藏列的值

https://blog.csdn.net/bingguang1993/article/details/84649674

wsl2 Ubuntu 18.04 安装 ROS

目录前期准备安装ROS初始化rosdep测试前期准备 WSL的安装见旧版 WSL 的手动安装步骤从步骤4开始弄。 图形界面安装见在WSL中使用GPU&#xff1a;WSL2 Ubuntu 18.04 CUDA Gnome图形界面环境配置 界面汉化见WSL-Ubuntu安装中文语言 这里使用鱼香ROS大佬的一键安装脚本&…

Udi Dahan对于业务逻辑重用以及微服务方面的观点

今年的DDD Exchange大会在伦敦如期举行&#xff0c;Udi Dahan在大会上的一场演讲中从一种不同的角度对业务逻辑进行了剖析。他表示&#xff1a;近三十年来&#xff0c;重用已经成为了一种口号&#xff0c;它几乎可以套用在系统开发中的每一个环节上。但重用其实是一种砒霜&…

微软移除Visual Studio 2015中的UML

微软已经在Visual Studio 2015中移除了UML&#xff08;Unified Modeling Language&#xff0c;统一建模语言&#xff09;&#xff0c;原因是该语言使用率过低。因此微软要优化产品结构&#xff0c;把好钢用在刀刃上。 Visual Studio高级产品经理Jean-Marc Prieur表示&#xff0…

GPU CUDA 经典入门指南

转自&#xff1a;http://luofl1992.is-programmer.com/posts/38830.html CUDA编程中&#xff0c;习惯称CPU为Host&#xff0c;GPU为Device。编程中最开始接触的东西恐怕是并行架构&#xff0c;诸如Grid、Block的区别会让人一头雾水&#xff0c;我所看的书上所讲述的内容比较抽象…

Jquery创建动态表单

$(document).ready(function(){$("#button1").click(function(){//获取html <body></body>的Jquery对象var body $("body");//创建表单var form $("<form></form>");//将表单放入body中body.append(form);//设置表单各…

用PyQt实现透明桌面时钟小部件

2019独角兽企业重金招聘Python工程师标准>>> #!/usr/bin/env python # -*- coding: utf-8 -*-Created on 2012-4-6author: wangxiaoimport sys from PyQt4 import QtGui, QtCore from PyQt4.QtCore import Qt from PyQt4.QtCore import QPoint from PyQt4.QtCore…

实现织梦dedecms百度主动推送(实时)网页抓取

做百度推广的时候&#xff0c;如何让百度快速收录呢&#xff0c;下面提供了三种方式&#xff0c;今天我们主要讲的是第一种。 如何选择链接提交方式 1、主动推送&#xff1a;最为快速的提交方式&#xff0c;推荐您将站点当天新产出链接立即通过此方式推送给百度&#xff0c;以保…