模拟的边缘:游戏男孩缝纫机

2020-06-05 22:39:15

到目前为止,这是一段相当长的旅程,但今天是“仿真边缘”系列文章发表3周年。早在2017年,当我第一次模仿Taisen Bardigan条形码扫描仪时,我实际上完全不知道我还能做多少。我的目标是完成一份清单,一次研究和记录一个项目,但我甚至不知道我是否拥有实现任何目标的正确技能。在过去的几年里,我遇到了相当多的挑战,面临着一些难题。尽管如此,只要有足够的时间、决心和朋友和同事的帮助,我还是设法克服了这些障碍。有些设备真的很容易理解,只需一两天就能正确模拟。然而,其他的则证明是顽固的困难。特别是这篇文章的主题真的让我大吃一惊。

2000年初,日本缝纫公司捷豹(Jaguar)发布了一款机器,它有一个非常奇怪的特点。捷豹JN-100不是将设计内置到缝纫机中,而是通过链接电缆与游戏机连接,以接收缝纫指令。(注:Jaguar JN-100是Jaguar JN-100,也就是Jaguar JN-100)通过链接电缆与游戏机连接,以接收缝纫指令。该软件名为Raku x Raku Mishin,装在一个普通的黑色游戏男孩墨盒上,负责向JN-100传输数据。然后,用户可以对机器进行编程,以缝制各种图案、纽扣孔、假名、字母,甚至是短的自定义路径。一家名为Singer的美国公司发现JN-100是一个诱人的商机;他们后来同意以自己的品牌Singer Izek 1500在美国发布几乎一模一样的复制品。2001年,捷豹制造了第二款名为JN-2000(又名Nuotto&34;)的车型,它拥有更快的缝合速度和一个名为EM-2000的专用刺绣手臂。虽然JN-2000向后兼容JN-100和JN-100的游戏男孩墨盒,但有3个新的软件专为较新的JN-2000的刺绣功能制作。虽然捷豹看到了他们的产品取得了显著的成功,但辛格发现Izek-1500在美国的接受度较低。也有计划制作一个处理刺绣的更新版本,但辛格从未完全实现这些计划。因此,JN-2000刺绣马里奥主题艺术品的能力仍然是日本独有的。

有些人可能会嘲笑将游戏机和缝纫机结合在一起听起来有多么奇怪,但这三种型号在游戏和家庭缝纫方面都具有相当重要的历史意义。虽然工业缝纫机已经有了多年的程控缝纫,但消费市场在选择和价格方面都落后了。今天,廉价的数字化缝纫是常态,但在世纪之交,捷豹为消费者提供了负担得起且易于使用的设备,引发了一场革命。使用Game Boy作为主界面可以降低复杂性(只有几个按钮,菜单可以是五颜六色的,您可以根据需要显示任意多的信息,甚至教程)。它还通过使用已知组件而不是从头开始创建硬件来节省成本。此外,这是并不罕见的饲料缝纫机指令从外部来源。目前的缝纫机通常通过USB连接到PC上传输刺绣设计,也许通过蓝牙进行通信的智能手机应用程序代表了未来。无论如何,任天堂的手持系统成为第一个(也是唯一的?)。这样的设备与缝纫机配合工作,为把数码缝纫和刺绣带给大众做出了自己的贡献。虽然这看起来像是一场奇怪的婚姻,但实际上双方都合作得很好。

即便如此,这些缝纫机仍是游戏机中最具异国情调、最迷人的配件之一。他们展示了不起眼的游戏男孩可以在游戏之外扩展到什么程度。不幸的是,虽然我们对捷豹和歌手机器的历史了解很多,但它们的确切操作方式几十年来一直是个谜。自从我了解了它们,我就忍不住想知道里面埋藏着什么秘密。从技术上讲,这些缝纫机和它们的软件都不是电子游戏。然而,它们在文化上的重要性不容忽视。我决定试着保护它们,而不是让它们的故事随着岁月的流逝而消失。现在,我已经在游戏男孩上模仿了一些相当狂野的东西:基于动作的红外玩具、声纳墨盒、类似Amiibo的小雕像,以及最近的机器人。但是模仿缝纫机呢?这完全是另一回事。我是说,你一定是疯了,对吧?

正确研究这些机器需要物理接触,这反过来又意味着要进行相当多的投资。不仅有3种不同的型号(JN-100、JN-2000、Izek 1500),而且每种型号的价格都相当可观。JN-100和Izek 1500不常见,但不一定罕见,但也有一些复杂的问题提高了它们的价格。Izek 1500的平均价格从150美元到250美元不等

我对这些缝纫机的初步研究始于整整一年前,也就是2019年5月初。通常我只在一件物品上花几个星期的时间就把它弄碎了。我最多会花几个月的时间,每隔一天分析和运行测试,直到我弄明白为止。我真的以为我能在一两个周末内完成大部分工作。如果事情按计划进行,这篇文章就应该写在2019年了。不幸的是,我花的时间远远不止几天。这些缝纫机给我带来了一个我以前从未解决过的难题,并在很多情况下真诚地挑战我。虽然我不会称它们为最难进行反向工程的东西,但事实证明它们确实是最令人沮丧的。我原本以为相对容易的事情变成了比这多得多的事情。

Singer Izek 1500是最容易买到的机器,所以它是我看的第一台。首先,我创建了一个非常简单的缝纫机操作软件ROM破解,它记录串行中断后的每个串行传输。有趣的是,我没有看到任何相关数据,只是重复了两个值的模式:0x00和0xFF。通过GBE+#39;的调试器运行ROM发现,并不是每个传输都应该触发串行中断;因此,ROM黑客遗漏了关键信息。与所有其他游戏男孩配件不同的是,Izek 1500可以在通过发送数据和内部和外部时钟之间切换。本质上,它在与Game Boy通信时来回切换,充当主设备和从设备(手持设备的开关也是如此,总是相反,以匹配机器)。游戏机发送到Izek 1500的数据总是通过外部时钟完成的,因此缝纫机控制比特传输的速率。串行中断是通过软件禁用的,但GBE+可以很好地看到它们,并打印出日志供我查看。

模拟器捕获的数据看起来像是发送到缝纫机的数据包,其中包含如何缝制图案的指令。我立刻意识到它有一个头,后面跟着一个主体,它看起来像是用于缝合点的XY坐标对,最后一直是某种校验和值。据我当时所知,一种图案是简单地将缝合点向上、向下、向左或向右移动不同的量。为了让GBE+正确地模拟这些缝纫机,它必须将缝纫重新创建为屏幕上的像素。它所需要做的就是从数据包数据中获取xy坐标,然后开始绘制线条,对吗?非常简单的东西,而且非常直截了当。简单的农民。

头几个图案,标记为A-001到A-010,是随着X坐标的变化而直线向下移动的线,有时会形成对角线。我从我的NDS 3D渲染器复制了一些线条绘制代码,给它提供了包中的坐标,并将结果保存到一个BMP文件中。这些图案的输出与游戏机屏幕上给出的预览相匹配。然而,当涉及到其他模式时,事情很快就崩溃了。这种故障的一个主要例子是B-007型。它没有像其他人那样曲折前进,而是径直地横着走,而是垂直向上走。我把每个Y坐标都当作正向下移动,因为我不知道Izek1500是如何处理负数的。这应该是相对明显的,比如所有负坐标都将位7设置为高,而所有正数都将位7设置为低。完全不是那样的。

--X坐标|Y坐标|移动--0x01|。0x0D|下0x01|0x0C|下0x01|0x14|右0x0E|0x1C|上0x0E|0x14|右0x1B|0x0C|下0x1B|0x0C|下0x1B|0x0C|下0x1B|0x14|左0x01|0x0D|下-观察每个动作以验证每个XY对应该做什么。很容易看到X坐标表现正常,通过增加从左到右逐渐移动,然后突然向左移动以重新启动模式。然而,Y坐标正在做一些其他的事情。乍一看,他们到处都是,尽管考虑到模式有点起伏,这并不是什么出人意料的事情。尽管如此,当我开始调查时,Y坐标在我看来非常奇怪。需要知道的一个重要细节是,当X坐标根据绝对位置进行操作时,Y坐标则不是。图案的宽度仅限于此(0x00到0x1F),因为针只能在物理上移动那么多。纸样的长度与面料的长度一样长,这样才能不间断地送入机器。

0x00下移1.25 mm 0x01下移1.1875 mm 0x02下移1.125 mm 0x03下移1.0625 mm 0x04下移1.0 mm 0x05下移0.9375 mm 0x06下移0.875 mm 0x07下移0.8125 mm 0x08下移0.75 mm 0x09下移0.6875 mm 0x0A下移0.625 mm 0x0B下移0.5625 mm 0x0C下移0.1875 mm 0x12下移0.125 mm 0x13下移0.0625 mm 0x14无变化0x15上移0.0625 mm 0x16上移0.125 mm 0x17上移0.1875 mm 0x18上移0.25 mm 0x19上移0.3125 mm 0x1B上移0.4375 mm 0x1C上移0.5 mm 0x1D上移0.5625 mm 0x1E上移0.6625 mm 0x1E。

解决这些Y值的意义实际上揭示了关于XY坐标的另一个奇怪之处。对于任何给定的X坐标,指示垂直移动的Y坐标是先前发送的最后一个Y坐标,而不是后面的Y坐标。为了说明这一点,回到模式B-007的坐标,第一条向右的水平线实际上并不使用0x01,0x14的xy值。相反,最好读为0x0E,0x14,其中X值表示向右移动,而Y值表示没有垂直移动。将它们归类为yx值可能更好,但从人的角度来看,无论哪种情况,坐标的原始字节都有些错位。

将此信息转换为像素相对简单。每个X值表示1个像素。对于Y值,0x14为零,高于它的每个值仅向上移动1个像素,低于它的每个值都向下移动1个像素。如此一来,即使是最复杂的图案,如天鹅、花朵和心脏,在GBE+中也可以毫无问题地绘制出来。即使是用户定制的图案也画得天衣无缝。算出xy坐标会让人头疼不已,而且还需要相当多的咒骂。我只能说,这三台机器处理一切的方式是愚蠢的。用0x14代替零绝对没有什么直观之处。使用前一个Y坐标而不是下一个坐标绝对没有什么直观之处。也许有人会指出,这就是许多缝纫机在内部工作的方式,或者这就是像这样的设备的工作方式,或者这只是一些微控制器的设计方式。我实际上可以看到和理解其中一些背后的逻辑和推理。但我不在乎。它是愚蠢的,在我的脑海里它永远都不会是愚蠢的。

不管怎么说,每个图案都工作正常后,我就开始测试刻字了。此功能仅在GBE+中部分起作用。奇怪的是,用于调试的BMP输出文件只显示了前几个字母。例如,当试图缝合";abcd&34;时,只会显示";AB&34;。在彻底检查了从Game Boy传输来的数据后,我意识到GBE+没有处理数据包格式的一个关键部分。游戏机给缝纫机发包的时候,包的长度只能是128个字节。但是,缝合长字母序列可能需要数百个XY坐标(因为许多部分是双针或三针)。发送那么多XY坐标意味着发送多个数据包,而GBE+只处理它遇到的第一个数据包。通过一些调整,GBE+解析了所有额外的数据包,并不仅修复了字母,还修复了纽扣孔。

在测试了缝纫机操作软件和Raku x Raku Mishin ROM后,我对GBE+可以忠实地模仿Singer Izek 1500和捷豹JN-100感到满意。这只是战斗的一半,因为捷豹JN-2000和它的刺绣手臂仍然是一个完全的谜。考虑到刺绣有多么复杂,我只能想象一下解决EM-2000会是什么样子。阻碍进步的一个主要问题是我根本没有EM-2000。我唯一一次找到一对待售的情侣,是随JN-2000一起来的,在那些情况下,这会让我花掉1000多美元。直到我吃完之后,它才开始。

..