## 65XX CPU 未文档化指令:摘要 本文档由Adam Vardy在1995-1996年间编写,详细记录了105个6502/85XX CPU的“未定义”指令——超出标准151条的指令。这些指令在一些文档中标记为“未来扩展”,表现出多样且常常不可预测的行为。 该列表参考了“The Complete Inner Space Anthology”等资料,将这些指令按十六进制值和执行周期进行分类。许多指令结合了标准指令的操作(例如,ASO = ASL + ORA)。然而,一些指令,如TAS、SAY、XAS和AXA,表现出复杂且不一致的功能,可能受到硬件因素的影响,例如视频芯片(VIC-II)。 值得注意的指令包括HLT(使处理器崩溃)、SKB/SKW(跳过指令)以及ARR、XAA和OAL等在不同机器上表现出操作差异的指令。作者指出现有文档中的不一致性,并强调Power Assembler是一种支持这些指令的工具。 虽然提供了全面的目录,但该文档承认某些指令的异常性质,并警告了页面边界交叉和不可靠行为可能导致的问题。
## Base64 编码:摘要
Base64 是一种使用 64 个字符的字母表将二进制数据转换为文本格式的方法。这对于在基于文本的环境(如 HTML 或 JavaScript)中嵌入数据,或通过基于文本的协议传输二进制文件非常有用。该过程通过将二进制数据分成 6 位段,然后将每个段映射到 Base64 字母表中的一个字符来工作。当输入不是 3 字节的倍数时,使用“=”号进行填充。
现代浏览器提供内置函数(`Uint8Array.toBase64()` 和 `Uint8Array.fromBase64()`)来实现高效的编码和解码。基准测试显示不同浏览器之间存在显著的性能差异。基于 Chromium 的浏览器(Chrome、Edge、Brave)展示了更快的编码速度(高达 19 GB/s),而 Safari 在解码方面表现出色(9.4 GB/s)。Firefox 和 Servo 显示出明显较慢的性能。
这些速度通常比典型的磁盘或网络速度更快。Chromium 浏览器中的解码速度稍慢,因为存在中间缓冲区步骤。正在进行中的改进,例如 Firefox 计划的改进,旨在进一步提高 Base64 的性能。
## JavaScript中使用TypeScript的多线程
多线程为JavaScript带来了受Rust启发的并发性,利用Web Workers实现真正的并行性,同时简化了复杂的worker管理。它提供了一个管理的线程池,确保高效的资源利用,并优先考虑内存安全,具有Mutexes、Read-Write Locks和Condition Variables等同步原语。
主要特性包括通过`SharedArrayBuffer`和`SharedJsonBuffer`(用于JSON对象)安全地在线程之间共享状态,以及在worker任务中无缝导入模块(外部库和相对文件)。数据传输到worker通过`move()`函数处理,对兼容对象使用零拷贝传输,对其他对象使用克隆。
核心函数`spawn()`将任务提交到线程池并返回一个句柄以等待结果。同步原语可以防止在访问共享内存时发生竞争条件。建议使用异步方法来获取锁,以避免阻塞worker线程。Channels提供了一个强大、线程安全的队列,用于协调复杂的流程。
该库抽象了Web Worker的复杂性,为JavaScript中的并发编程提供了一种更直观、更强大的方法。它是CPU密集型任务的宝贵工具,可以提高应用程序的响应速度和性能。