返回首页

Turing Complete 中的 SAP-1 组装:指南

Turing Complete 中 SAP-1 组装指南:架构、ROM 微码、代码生成器。适用于开发者 — 从 NAND 到带有示例的汇编器。

如何在 Turing Complete 中组装 Ben Eater 的 SAP-1
Advertisement 728x90

## 在 Turing Complete 中构建 SAP-1:开发者分步指南

在游戏 Turing Complete 中,你需要组装 SAP-1 计算机(Simple As Possible)——一种经典的 8 位架构,带有 4 位地址空间(16 字节内存)。它是一种基于累加器的模型,所有操作都使用累加器作为主要寄存器。游戏让你从基本逻辑门逐步推进到完整架构和汇编程序。

SAP-1 复制了 Ben Eater 的设计:两个寄存器(累加器和辅助寄存器),16 字节内存。游戏限制——程序块中无法保存数据。

SAP-1 的主要组件

架构包括:

Google AdInline article slot
  • 指令解码器 基于 ROM 芯片以简化微码。
  • 寄存器:累加器 (A)、指令 (IR)、内存 (RAM)。
  • ALU:加法器/减法器,带有 Z(零)和 C(进位)标志。
  • 控制器:微码,带有 MI、RO、II、AI、AO 等信号。

布局遵循 Ben Eater 的原版:左侧内存,中央 ALU,右侧输出。

微码实现

指令解码器使用带有微程序的 ROM。为了加载到游戏中,生成 ROM 文件。下面是创建微码的 C++ 代码(考虑了 ZF/CF 标志):

#include <windows.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <format>
#include <filesystem>

#define HLT 0b1000000000000000
// ... (ostalnye #define how in originale)

uint16_t ucode_TEMP[16][8] = {
    {MI|CO, RO|II|CE, 0, 0, 0, 0, 0, 0},  // NOP
    // ... (full array)
};

uint16_t ucode[4][16][8];

void initUCode() {
    memcpy(ucode[FLAGGS_Z0C0], ucode_TEMP, sizeof(ucode_TEMP));
    // Adaptatsiya for flagov JC/JZ
}

int main() {
    initUCode();
    std::ofstream fout("2929467240861350664.rom", std::ios::binary);
    fout.write((char*)&ucode, sizeof(ucode));
    fout.close();
    return 0;
}

使用 C++20 编译(VS Code 中的 gnu++20)。将 .rom 文件复制到游戏的用户文件夹。

Google AdInline article slot

处理器命令

| Code | Mnemonic | Description |

|-----|-----------|----------|

| 0000 | NOP | 无操作 |

Google AdInline article slot

| 0001 | LDA | 加载到 A |

| 0010 | ADD | 加 B |

| 0011 | SUB | 减 |

| 0100 | STA | 存储 A |

| 0101 | LDI | 立即加载 |

| 0110 | JMP | 无条件跳转 |

| 0111 | JC | 进位时跳转 |

| 1000 | JZ | 零时跳转 |

| 1110 | OUT | 输出 |

| 1111 | HLT | 停止 |

微码为每个时钟周期生成信号序列。

在 Sandbox 中安装 SAP-1

  • 下载项目文件。
  • 在设置中找到路径:C:\Users\[User]\AppData\Roaming\Godot\app_userdata\Turing Complete
  • .rom 和原理图复制到用户文件夹。
  • 启动 Sandbox 并加载 sap-1

测试:运行测试程序(Fort Boyard 中的拔棒游戏)。

组装问题与细节

  • 旋转元件:空格键。
  • 选择:Shift。
  • 进入架构:双击。
  • 自定义元件:每个图块一个输入/输出,至少一个内部组件。

游戏处于早期访问阶段:战役中断,但 Sandbox 充满可能性。

要点

  • SAP-1 是 80 年代的累加器架构,旨在节省内存。
  • ROM 中的微码简化了解码(备选——纯逻辑)。
  • 限制:16 字节 RAM,程序中无数据。
  • 游戏从 NAND 到汇编教导一切。
  • 通过 C++ 生成 ROM 用于自定义芯片。

— Editorial Team

Advertisement 728x90

继续阅读