适用于Commodore 64的Azure DevOps?



自从它最初称为Visual Studio Online以来,我一直是Azure DevOps的忠实拥护者。 我将其用于专业和个人目的,
并推荐给我的咨询客户。

但是,无论我对这个平台有多大的赞扬,通常都很难使Node或Java开发人员相信Azure DevOps可以很好地完成他们的项目,而且不比.NET差。 不管有多少种反驳偏见的演示和演示,在任何小组中,都有人坚信ADO不适合他们,因为它是“ Microsoft的工具”。

抛开哲学辩论,我可以解释大多数的阻力,因为他们缺乏对Azure DevOps如何从其前身Team Foundation Services(TFS)演变而来的理解,并成为同类最佳的工具箱,能够以任何语言和任何形式支持任何规模的项目平台。” 问题是,我怎么能一劳永逸地证明这一点?

我对这个想法进行了一些尝试,然后它突然出现在我身上。 无需为在AWS上为Kubernetes部署的SpringBoot微服务创建另一个CI / CD演示就可以完成证明-它需要使用更古怪的方法来完成。

现在完全不同了


如果我们不再专注于现代语言和平台,而是向前迈进30年前,看看现代工具和ADO是否可用于开发,构建,分解为模块并实现为8位计算机平台编写的程序,该怎么办?

就像我过去创建的其他ADO演示一样,我想展示一个完整的产品-从编辑代码,检查代码等,直到您可以观察更改的实时环境。

从理论上讲,这一切听起来不错,但真正的问题是-从哪里开始? 显然,这不是您可以运行StackOverflow来搜索先前示例的情况。 但是,在与朋友和同事讨论了这个想法之后(所有人都认为我已经搬家了),我开始提出自己的想法。

我决定使用VS Code编辑器为Commodore 64用8位机器代码编写演示程序。 源将由ADO上的Git存储库处理,CI / CD管道将负责Azure中的生成,模块和实现。 我已经开始怀疑我的朋友是对的,我的屋顶已经消失了,但是这个想法似乎仍然是一个有趣的挑战。

编辑选择


每个人都知道为特定工作选择正确工具的俗语。 这适用于家务劳动,汽车维修和代码编写。

作为.NET开发人员,我将大部分时间都花在Visual Studio 2017中。如果需要切换到Java项目或编写本机Android程序,则分别启动IntelliJ或Android Studio。 我应该使用哪个编辑器来处理C64机器代码?

您是否愿意-不管您相信与否-但是今天有一些适合编写CBM的优秀编辑器。 我玩了一些,但实际上我想使用Visual Studio Code。 我在其他项目中使用了VS Code,在我看来,它非常灵活,舒适,并且与git的内置集成很不错。

该解决方案的缺点是我必须牺牲汇编器6510中的语法高亮显示,而我只能盯着白色背景上的黑色文本。 这种情况与我关于“正确工具”的说法不符。

突然,我决定去Visual Studio Marketplace,看看是否已经有适合解决我的问题的VS Code扩展。 我惊喜地发现那里有一些旨在在汇编程序中工作的扩展。 不幸的是,没有一个人被我为该项目选择的ACME交叉汇编器监禁。

这并没有阻止我,并且不想重新体验80年代发展的单色方面,我将自己深埋在有关创建VS Code扩展的文档中。 几天后,我很高兴为Visual Studio Marketplace发布了扩展的第一个版本。

事实证明,此练习比最初看起来更有用。

有一次,我没有专注于用汇编器编写程序。 我几次尝试研究它,但是我通常感到无聊或烦躁,然后转向其他事物。 创建了插件后,我不仅了解了为VS Code创建扩展的机制,而且还对晦涩的语法和操作代码有了很好的了解。

有了合适的编辑器和80年代的一些老编程书籍,我开始编写代码。 很快,我得到了一个工作程序,该程序可以导入SID格式的音乐文件并在我64岁时播放披头士乐队的8位版本(这是Commodore用户的老笑话,但似乎恰好适合该项目)。



到目前为止,我已经在笔记本电脑上编译并测试了该程序。 源代码已提交到git存储库,因此下一步是需要为持续集成创建一个构建。

ADO令人印象深刻的能力之一是它能够处理几乎所有CI / CD情况。 开箱即用的服务提供了许多预定义的任务,使您只需单击几下即可快速为大多数现代项目创建CI / CD链。

如果您的需求不是基本服务的一部分,那么Marketplace通常会为您提供许多不同的合适工具。 如果这不起作用,则可以草绘完成所需工作的PowerShell脚本。

该项目的明显问题是,尽管服务功能范围广泛,但Commodore 64的交叉汇编程序和磁盘映像根本不存在。 当然,我可以使用所需工具在Azure中创建特殊的虚拟机,或者遵循PowerShell路径,但这会很有趣吗?

我也不喜欢云中的虚拟机,对于本练习,我想使用托管代理,因此我只有一个选择。 为了证明整个练习的目的,我决定最好创建自己的扩展程序来处理所有这些任务。

ACME跨汇编器扩展


CI链所需的第一个扩展是将我的汇编代码编译为C64机器代码。 为此,我需要在其中一个托管构建代理上安装交叉汇编器。

汇编程序是将人类可读的汇编语言转换成为特定二进制处理程序设计的真实机器代码的程序。 通常,将为运行机器的计算机中使用的处理器生成机器代码。 交叉汇编器是代码转换的下一步,它允许您为另一个处理器生成机器代码。

如前所述,在我的项目中,我选择了ACME Cross-Assembler,因为建议将其用于Commodore的开发。 它还支持各种其他8位项目,例如Nintendo Entertainment System或使用65xx处理器的Atari系列。

根据Microsoft和其他来源提供的文档和示例,我花了整整一天的时间来编写,验证和在Marketplace上发布该扩展的有效版本。

启动后,该任务会自动下载最新版本的ACME Cross-Assembler,并使用允许您为目标平台创建最终文件的选项启动它。 选择ACME的优点之一是,用于构建程序的大多数参数都内置在源代码中,从而将扩展中需要定义的输入量降至最低。

有人借用软盘吗?


链中的下一步是将程序转换为与Commodore 64兼容的媒体格式,即,将其放在软盘上。 开发人员在日常生活中也不会遇到这样的问题。 幸运的是,存在用于此任务的单独应用程序。

VICE是Commodore最受欢迎的模拟器。 它不仅为各种Commodore模型提供了许多仿真器,而且还提供了一些有用的工具,包括c1541虚拟磁盘管理器。 用它创建的磁盘映像可与仿真器一起使用,复制到物理介质(5英寸“低密度软盘”)或下载到microSD并与SD2IEC驱动器仿真器一起使用。

与ACME任务不同,后者从源文件的头中获取所有设置,而c1541磁盘实用程序依赖于CLI,并且用户具有许多用于管理磁盘的选项。 对于我的扩展,我决定只专注于完成任务所需的属性,但是即使那样,我仍然面临着与完成任务的方式有关的选择。

Commodore发布了三种不同的驱动器型号,它们根据格式和介质类型处理磁盘卷的方式不同。 大多数用户都熟悉的基本模型只能与容量为170 KB(是的,千字节。请问您的父母)的单面驱动器一起使用。 后来在Commodore 128上使用的1571型可以与双面驱动器一起使用,双面驱动器的容量增加到340 Kb。 我决定增加扩展灵活性,因此我增加了对各种磁盘格式的支持,可以通过下拉菜单在界面中进行选择。

由于我已经有了一个可行的示例,因此创建此扩展的速度要快得多。 我学到了一些新知识,使我也可以改进ACME扩展的代码。

与交叉汇编程序一样,所需的软件从开源项目存储库下载并安装在构建代理中。 该任务以所需的格式创建磁盘映像,然后将构建任务中的文件复制到其中。 生成的文件将移动到Build Artifacts目录中,您可以在其中下载它。



结果是-这么多的工作,结果您需要下载文件? 这应该是CI / CD培训材料。 如果需要证明自己的立场,则需要在计算机上部署程序,以便可以将其用作演示。

Floppinet已禁用


运行真正的Commodore 64计算机和1541驱动器的版本是一件罕见的事情,更不用说它又大又笨了。 另外,如果没有特殊的适配器,他们将无法在现代显示器上显示图像,这极大地限制了演示的有效性。



Commodore SX-64(第一台大批量生产的“便携式”彩色计算机)具有内置显示器,但它的大小与我随身携带的行李箱差不多,重量约为10公斤。 想象一下,带着这样的怪物要经历机场安检服务有多难?

最近发布的C64 Mini体积小巧,可以随身携带,可以从USB和HDMI输出下载程序。 在某些情况下,这将是一种选择。 但是他仍然没有达到预期的目标。

真正的问题不是熨斗的便携性,而是缺乏自动化。 需要使用闪存驱动器将程序从笔记本电脑传输到汽车上,并不能在演示文稿中完全揭示ADO的功能。

不带服务器的选件


如前所述,VICE是Commodore最受欢迎的仿真器。 它已移植到Windows,Linux,Mac OS X,MS-DOS和许多其他操作系统。 但是,对于云开发,此选项将需要将VM配置为主机,而我想采用不需要服务器的解决方案。

除了上述版本外,VICE还提供了JavaScript选项,该选项在大多数浏览器中均可正常运行。 尽管前端开发不是我的本事,但我仍然能够捆绑一个不错的响应页面。



为了组织发布链,我将带有磁盘映像的文件上传到同一存储库中的目录。 我将此与调用Azure Function App关联,该应用程序返回可用磁盘映像的列表。 从下拉菜单中选择其中一个会自动加载并在JavaScript仿真器中启动。

该系统不仅适用于我的程序,还设法创建了一个链,用于在Commodore 64 BASIC上部署和运行该程序。

10 PRINT "HELLO WORLD"
20 GOTO 10


我们完成


用于Commodore 64的DevOps? 这是不可想象的!



该练习的含义不仅是当他们说到Azure DevOps支持“任何语言和任何平台”时的证明,还不仅意味着与Microsoft相关的所有内容(尽管Commodore的BASIC版本是从Microsoft购买的。微软)。 它使我们无法集中精力于技术方面,并使人们超越了他们为自己任命的人为框架。

不论借口如何,诸如“这在这里行不通”之类的陈述通常等同于“我们一直这样做,为什么要改变某些东西”的陈述。 这两个短语都表明他们不愿发展和发展,不适应不断变化的技术格局,并克服了这些快速而激进的变化所带来的挑战。

DevOps不是工具。 最后的工具只是达到目的的一种手段,无论谁发布它们。

为了使DevOps在组织中取得成功,有必要改变思维方式并发展我们的企业文化。 我们需要接受很多新想法,重新考虑我们认为的知识,并摆脱诸如“这在这里行不通”之类的想法,因为我们之前从未尝试过。

为一台拥有30年历史的计算机创建CI / CD链对企业没有任何价值,除非可以清楚地说明这种观点。

Source: https://habr.com/ru/post/zh-CN430414/


All Articles