홈으로 돌아가기

Turing Complete에서 SAP-1 조립: 가이드

Turing Complete에서 SAP-1 조립 가이드: 아키텍처, ROM microcode, 코드 생성기. 개발자를 위한 — NAND부터 어셈블러까지 예제 포함.

Turing Complete에서 Ben Eater의 SAP-1 조립 방법
Advertisement 728x90

Turing Complete에서 SAP-1 구축하기: 개발자를 위한 단계별 가이드

Turing Complete 게임에서 SAP-1 컴퓨터(Simple As Possible)를 조립합니다. 이는 4비트 주소 공간(16바이트 메모리)을 가진 고전적인 8비트 아키텍처입니다. 모든 연산이 어큐뮬레이터를 주 레지스터로 사용하는 어큐뮬레이터 기반 모델입니다. 게임은 기본 논리 게이트부터 전체 아키텍처와 어셈블러 프로그램까지 단계적으로 진행할 수 있게 해줍니다.

SAP-1은 Ben Eater의 디자인을 재현합니다: 어큐뮬레이터와 보조 레지스터 두 개, 16바이트 메모리. 게임 제한사항 — 프로그램 블록에 데이터 저장 불가.

SAP-1의 주요 구성 요소

아키텍처는 다음을 포함합니다:

Google AdInline article slot
  • 마이크로코드 단순화를 위한 ROM 칩 기반 Instruction Decoder.
  • Registers: accumulator (A), instruction (IR), memory (RAM).
  • ALU: Z (제로) 및 C (캐리) 플래그가 있는 가산기/減산기.
  • Controller: MI, RO, II, AI, AO 등 신호를 가진 마이크로코드.

레이아웃은 Ben Eater의 원본을 따릅니다: 왼쪽에 메모리, 중앙에 ALU, 오른쪽에 출력.

마이크로코드 구현

명령 디코더는 마이크로프로그램이 포함된 ROM을 사용합니다. 게임에 로드하기 위해 ROM 파일을 생성합니다. ZF/CF 플래그를 고려한 마이크로코드 생성 C++ 코드입니다:

#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

다음 읽기