@nanochess@nanochess Main page Intel 8080 emulator Chess programs Contests Store Retrogaming FAQ Links About me

用 JavaScript 实现的 Transputer 模拟器

这是我的 用 C 语言编写的 transputer 模拟器 的 JavaScript 移植版本,用于我关于 transputer 处理器的系列文章。在过去,JavaScript 是一种解释型语言,但自从多年前它被实现为 JIT (Just-In-Time) 编译器以来,它的速度可以接近 C 语言。

这里另一个实现的注意事项是,JavaScript 将按位运算符视为生成 32 位有符号整数。 这可以通过使用 >>> 0 运算符(逻辑右移)来避免,因为它会生成一个 32 位 无符号 整数。 您可以尝试 0x80000000 >> 0 并查看它如何返回一个负数,而 0x80000000 >>> 0 保留了无符号值。

JavaScript 中另一个“新”的东西是 Uint8Array,它比普通数组快得多,而且 节省 内存,因为有几个这样的数组(包括一个 40MB 的数组来保存整个硬盘驱动器!)。 对于驱动器镜像,我尝试使用初始化的数组,但源代码为 3MB 的二进制文件使用了 20MB。 我想出了一个好办法来减小 JavaScript 源代码大小,即使用 我在 bin2.c 实用程序中的 Base64 来编码硬盘驱动器的 3MB 数据,并且 window.atob 获得一个解码后的字符串,该字符串被直接复制到硬盘驱动器的 Uint8Array。

我没想到会有浮点仿真,但我发现了 Float32Array 和 Float64Array 类型(在 2010 年添加),以及如何使用 Uint32Array 隐藏这些类型,因此模拟器可以使用真正的浮点数学,并使用 Uint32Array 来获取浮点二进制数据以复制到 transputer 内部存储器中。

最后,对于显示,我很幸运地找到了具有兼容许可证的 Peter Nitsch 的 jsTerm。 我删除了 Telnet 和套接字部分。 并且因为它使用位图作为字体,所以我能够用 1996 年的原始字体替换它并使用它,因此你可以看到文本窗口的单行边框和其他特殊字符。 我的字体基于 ECMA-94(字符集 1),也称为 ISO-8859-1,其中 $00-$1f 和 $80-$9f 字符填充了图形。 它基于 VGA BIOS 字体,我认为我改进了一些字母,但我不记得是哪些字母了。 尝试运行 C:Conjunto 命令以查看所有字母和符号。

你可以在 https://github.com/nanochess/transputer/tree/master/js 查看此模拟器的 JavaScript 源代码。

这里有什么?

此模拟器没有运行 我的早期 Pascal 编译器Small-C 编译器 的选项,而是预装了 我的完整操作系统(1996 年春季),它包括许多功能,如多个驱动器(A: 是 1.44mb 软盘,B: 是 512K RAM 磁盘,C: 是 40 MB 硬盘驱动器,D: 是 ISO-9660 格式的 CD-ROM,但无法加载映像)。

C 编译器支持完整的 K&R 语法(除了 staticextern ,因为没有链接器)。

你可以在操作系统内部测试的一些命令:

    DIR A:
    DIR C:
    AYUDA
    MEM
    C:EDITOR

使用 F1(或 macOS 中的 Fn+F1)访问可视化文本编辑器的帮助框,然后键入 F4(或 macOS 中的 Fn+F4)打开目录浏览以读取文本文件。

使用 C:CC 调用 C 编译器,C:ENS 调用汇编器,C:EJECUTABLE 将汇编器输出构建为可执行文件。 C:/Documentos/Programas.doc 文件中包含编译程序的说明(你可以尝试自编译 C 编译器!)。

这是一个程序编译的示例:

    C:CC
    N
    N
    C:/C/Hora.c
    B:Hora.len
    
    C:ENS
    B:Hora.len
    C:/Lib/stdio.len
    [empty line]
    B:Hora.e
    
    C:EJECUTABLE
    B:Hora.e
    512
    0
    C:Hora.p

我的 C 语言模拟器比这个演示快得多,但如果你有一台速度快的计算机和一个好的浏览器,那么这个 JavaScript 版本会非常有趣。

3D 建模器

你可以使用以下命令运行 3D 建模器:

      c:modela
      c:dibujo_3d/escena_tetera

选择一个模式,按 Enter,然后再次按 Enter 开始显示。 C:/Dibujo_3D 目录中有更多场景,每个场景都以名称 escena_ 开头。 你可以使用以下命令列出场景:

      dir c:/dibujo_3d/escena*

光线追踪器

你可以使用以下命令运行光线追踪器:

      c:m3d
      c:dibujo_3d/prueba

C:/Dibujo_3D 目录中只有两个 M3D 文件可用。 你应该输入不带扩展名的名称。

多任务处理

有一个多任务处理的小例子,你可以在屏幕的右上角显示一个时钟。 输入以下命令:

      @c:/Desarrollo/Reloj

源代码

源代码发布在 https://github.com/nanochess/transputer

尽情享受吧! 你喜欢这个吗?在 ko-fi 上请我喝杯咖啡!

相关链接