打开您的网站(记得启动网络服务器,6502web运行时使用fetch加载二进制文件,我们需要一个为此运行的网络服务器:3)

还有... 那是什么?!

\\\"Web

如果你打开devtools,你可以看到,不知何故,一个

元素已出现并带有“HI!”作为其内容..但是如何?!让我们再看一下 6502 代码,现在有注释了!

LDA #0   ; 0 is the ID of a 

element in 6502web runtime, lets load itSTA $46 ; store it to $46, which is start of our RAM memorySTA $0; by storing to $0, we RUN a built-in function which is responsible for creating an HTML element, that uses $46 as its argument (what HTML element to create!)LDA #3 ; 3 will now be the length of the string we want to put in our

!STA $46 ; store it at $46LDA #72 ; \\'H\\' in ASCII!STA $47 ; store it at $47LDA #73 ; \\'I\\' in ASCII!STA $48 ; store it at $48LDA #33 ; \\'!\\' in ASCII!STA $49 ; store it at $49STA $1; storing to $1 runs another built-in function, that is responsible for setting up text content of a *recently* created HTML element. Its first argument is length of the string it has to read, and then it reads memory fields (ASCII characters) after that, corresponding to the length we stored at $46

所以.. 这基本上就是 6502web 运行时的工作原理。目前仅实现了少量功能:

通过少量的功能,我能够创建一个非常简单的计数器应用程序!

\\\"Web

\\\"Web

我相信现在就够了,如果你有兴趣,可以自己来看一下,只是要注意这个运行时间主要是一个笑话(我花了很多功夫的一个笑话)

我仍在努力,所以许多操作码尚未实现。

GitHub

祝大家有美好的一天!

","image":"http://www.luping.net/uploads/20240918/172662264966ea2bb9b2959.png","datePublished":"2024-09-18T09:24:09+08:00","dateModified":"2024-09-18T09:24:09+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 组装中的 Web 应用程序!

组装中的 Web 应用程序!

发布于2024-09-18
浏览:685

MOS 6502 是经济实惠计算领域的一大进步。感谢这个小家伙,我们了解了 Commodore64、Apple II、
Atari2600 和 NES。直到今天,人们仍在使用 6502 Assembly,为这些被遗忘的平台创建软件和游戏。

现在,让我介绍一下自己 - 我是Cassiopeia(但是,我在正式场合使用 Oliwia),一位热爱旧技术和汇编编程的跨性别女性。我担任 JavaScript 开发人员已有六年多了。大部分时间我都使用典型的 Web 技术,例如 Vue、React 和 Angular。尽管我的大部分经验来自前端开发,但我从编程中获得的大部分乐趣却来自后端开发。大约一年前,我对旧技术感到惊讶,这就是 6502 的用武之地。

6502 只有(!)56 条指令,但即使指令数量如此有限,开发人员(一如既往)也可以创建令人印象深刻的程序。
您有没有想过使用 6502 编写 Web 应用程序会是什么样子?

不?

当然不是,你为什么会这么想?!

但是我...!我想过这个!我想过如何组装你的6502程序,上传它并让它生成一个网站!

6502网页

欢迎来到6502Web,这是一个用 JavaScript 编写的 6502 运行时,它使得使用 6502 程序集创建(简单)网站和 Web 应用程序成为可能!

我想让我的运行时尽可能简单并且尽可能少使用 javascript,特别是因为这是我第一次写这样的东西。

首先,组装你的6502程序,为了测试我主要使用masswerk汇编器,因为它对我来说是最快的。

让我们从简单的事情开始,尝试编写这样的程序:

LDA #0
STA $46
STA $0
LDA #3
STA $46
LDA #72
STA $47
LDA #73
STA $48
LDA #33
STA $49
STA $1

现在您已经下载了 .bin 文件,请将 6502web cdn 链接到您的网络应用程序。

然后,您可以加载二进制文件并运行它,如下所示:

打开您的网站(记得启动网络服务器,6502web运行时使用fetch加载二进制文件,我们需要一个为此运行的网络服务器:3)

还有... 那是什么?!

Web Applications in ssembly!

如果你打开devtools,你可以看到,不知何故,一个

元素已出现并带有“HI!”作为其内容..但是如何?!让我们再看一下 6502 代码,现在有注释了!

LDA #0   ; 0 is the ID of a 

element in 6502web runtime, lets load it STA $46 ; store it to $46, which is start of our RAM memory STA $0 ; by storing to $0, we RUN a built-in function which is responsible for creating an HTML element, that uses $46 as its argument (what HTML element to create!) LDA #3 ; 3 will now be the length of the string we want to put in our

! STA $46 ; store it at $46 LDA #72 ; 'H' in ASCII! STA $47 ; store it at $47 LDA #73 ; 'I' in ASCII! STA $48 ; store it at $48 LDA #33 ; '!' in ASCII! STA $49 ; store it at $49 STA $1 ; storing to $1 runs another built-in function, that is responsible for setting up text content of a *recently* created HTML element. Its first argument is length of the string it has to read, and then it reads memory fields (ASCII characters) after that, corresponding to the length we stored at $46

所以.. 这基本上就是 6502web 运行时的工作原理。目前仅实现了少量功能:

  • 创建 HTML 元素,
  • 设置HTML元素的文本内容
  • 添加事件监听器
  • 将 X 和 Y 寄存器绑定到 HTML 元素
  • 6502和JS共享内存

通过少量的功能,我能够创建一个非常简单的计数器应用程序!

Web Applications in ssembly!

Web Applications in ssembly!

我相信现在就够了,如果你有兴趣,可以自己来看一下,只是要注意这个运行时间主要是一个笑话(我花了很多功夫的一个笑话)

我仍在努力,所以许多操作码尚未实现。

GitHub

祝大家有美好的一天!

版本声明 本文转载于:https://dev.to/cassiopeiaoli/web-applications-in-6502-assembly-3g0k?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • MySQL 中的数据库分片:综合指南
    MySQL 中的数据库分片:综合指南
    随着数据库变得越来越大、越来越复杂,有效地控制性能和扩展就出现了。数据库分片是用于克服这些障碍的一种方法。称为“分片”的数据库分区将大型数据库划分为更小、更易于管理的段(称为“分片”)。通过将每个分片分布在多个服务器上(每个服务器保存总数据的一小部分),可以提高可扩展性和吞吐量。 在本文中,我们将探...
    编程 发布于2024-11-06
  • 如何将 Python 日期时间对象转换为秒?
    如何将 Python 日期时间对象转换为秒?
    在 Python 中将日期时间对象转换为秒在 Python 中使用日期时间对象时,通常需要将它们转换为秒以适应各种情况分析目的。但是,toordinal() 方法可能无法提供所需的输出,因为它仅区分具有不同日期的日期。要准确地将日期时间对象转换为秒,特别是对于 1970 年 1 月 1 日的特定日期...
    编程 发布于2024-11-06
  • 如何使用 Laravel Eloquent 的 firstOrNew() 方法有效优化 CRUD 操作?
    如何使用 Laravel Eloquent 的 firstOrNew() 方法有效优化 CRUD 操作?
    使用 Laravel Eloquent 优化 CRUD 操作在 Laravel 中使用数据库时,插入或更新记录是很常见的。为了实现这一点,开发人员经常求助于条件语句,在决定执行插入或更新之前检查记录是否存在。firstOrNew() 方法幸运的是, Eloquent 通过firstOrNew() 方...
    编程 发布于2024-11-06
  • 为什么在 PHP 中重写方法参数违反了严格的标准?
    为什么在 PHP 中重写方法参数违反了严格的标准?
    在 PHP 中重写方法参数:违反严格标准在面向对象编程中,里氏替换原则 (LSP) 规定:子类型的对象可以替换其父对象,而不改变程序的行为。然而,在 PHP 中,用不同的参数签名覆盖方法被认为是违反严格标准的。为什么这是违规?PHP 是弱类型语言,这意味着编译器无法在编译时确定变量的确切类型。这意味...
    编程 发布于2024-11-06
  • 哪个 PHP 库提供卓越的 SQL 注入防护:PDO 还是 mysql_real_escape_string?
    哪个 PHP 库提供卓越的 SQL 注入防护:PDO 还是 mysql_real_escape_string?
    PDO vs. mysql_real_escape_string:综合指南查询转义对于防止 SQL 注入至关重要。虽然 mysql_real_escape_string 提供了转义查询的基本方法,但 PDO 成为了一种具有众多优点的卓越解决方案。什么是 PDO?PHP 数据对象 (PDO) 是一个数...
    编程 发布于2024-11-06
  • React 入门:初学者的路线图
    React 入门:初学者的路线图
    大家好! ? 我刚刚开始学习 React.js 的旅程。这是一次令人兴奋(有时甚至具有挑战性!)的冒险,我想分享一下帮助我开始的步骤,以防您也开始研究 React。这是我的处理方法: 1.掌握 JavaScript 基础知识 在开始使用 React 之前,我确保温习一下我的 JavaScript 技...
    编程 发布于2024-11-06
  • 如何引用 JavaScript 对象中的内部值?
    如何引用 JavaScript 对象中的内部值?
    如何在 JavaScript 对象中引用内部值在 JavaScript 中,访问引用同一对象中其他值的对象中的值有时可能具有挑战性。考虑以下代码片段:var obj = { key1: "it ", key2: key1 " works!" }; ...
    编程 发布于2024-11-06
  • Python 列表方法快速指南及示例
    Python 列表方法快速指南及示例
    介绍 Python 列表用途广泛,并附带各种内置方法,有助于有效地操作和处理数据。下面是所有主要列表方法的快速参考以及简短的示例。 1. 追加(项目) 将项目添加到列表末尾。 lst = [1, 2, 3] lst.append(4) # [1, 2, 3, 4]...
    编程 发布于2024-11-06
  • C++ 中何时需要用户定义的复制构造函数?
    C++ 中何时需要用户定义的复制构造函数?
    何时需要用户定义的复制构造函数?复制构造函数是 C 面向对象编程的组成部分,提供了一种基于现有实例初始化对象的方法。虽然编译器通常会为类生成默认的复制构造函数,但在某些情况下需要进行自定义。需要用户定义复制构造函数的情况当默认复制构造函数不够时,程序员会选择用户定义的复制构造函数来实现自定义复制行为...
    编程 发布于2024-11-06
  • 尝试...捕获 V/s 安全分配 (?=):现代发展的福音还是诅咒?
    尝试...捕获 V/s 安全分配 (?=):现代发展的福音还是诅咒?
    最近,我发现了 JavaScript 中引入的新安全赋值运算符 (?.=),我对它的简单性着迷。 ? 安全赋值运算符 (SAO) 是传统 try...catch 块的简写替代方案。它允许您内联捕获错误,而无需为每个操作编写显式的错误处理代码。这是一个例子: const [error, respons...
    编程 发布于2024-11-06
  • 如何在Python中优化固定宽度文件解析?
    如何在Python中优化固定宽度文件解析?
    优化固定宽度文件解析为了有效地解析固定宽度文件,可以考虑利用Python的struct模块。此方法利用 C 来提高速度,如以下示例所示:import struct fieldwidths = (2, -10, 24) fmtstring = ' '.join('{}{}'.format(abs(fw...
    编程 发布于2024-11-06
  • 蝇量级
    蝇量级
    结构模式之一旨在通过与相似对象共享尽可能多的数据来减少内存使用。 在处理大量相似对象时特别有用,为每个对象创建一个新实例在内存消耗方面会非常昂贵。 关键概念: 内在状态:多个对象之间共享的状态独立于上下文,并且在不同对象之间保持相同。 外部状态:每个对象唯一的、从客户端传递的状态。此状态可能会有所不...
    编程 发布于2024-11-06
  • 解锁您的 MySQL 掌握:MySQL 实践实验室课程
    解锁您的 MySQL 掌握:MySQL 实践实验室课程
    通过全面的 MySQL 实践实验室课程提高您的 MySQL 技能并成为数据库专家。这种实践学习体验旨在指导您完成一系列实践练习,使您能够克服复杂的 SQL 挑战并优化数据库性能。 深入了解 MySQL 无论您是想要建立强大 MySQL 基础的初学者,还是想要提升专业知识的经验丰富的开...
    编程 发布于2024-11-06
  • 文件夹
    文件夹
    ? ?大家好,我是尼克?? 利用专家工程解决方案提升您的项目 探索我的产品组合,了解我如何将尖端技术、强大的问题解决能力和创新热情结合起来,构建可扩展的高性能应用程序。无论您是寻求增强开发流程还是解决复杂的技术挑战,我都可以帮助您实现愿景。看看我的工作,让我们合作做一些非凡的事情! 在这里联系我:作...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3