Turing Complete에서 SAP-1 구축하기: 개발자를 위한 단계별 가이드
Turing Complete 게임에서 SAP-1 컴퓨터(Simple As Possible)를 조립합니다. 이는 4비트 주소 공간(16바이트 메모리)을 가진 고전적인 8비트 아키텍처입니다. 모든 연산이 어큐뮬레이터를 주 레지스터로 사용하는 어큐뮬레이터 기반 모델입니다. 게임은 기본 논리 게이트부터 전체 아키텍처와 어셈블러 프로그램까지 단계적으로 진행할 수 있게 해줍니다.
SAP-1은 Ben Eater의 디자인을 재현합니다: 어큐뮬레이터와 보조 레지스터 두 개, 16바이트 메모리. 게임 제한사항 — 프로그램 블록에 데이터 저장 불가.
SAP-1의 주요 구성 요소
아키텍처는 다음을 포함합니다:
- 마이크로코드 단순화를 위한 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 파일을 게임의 사용자 폴더에 복사하세요.
프로세서 명령어
| Code | Mnemonic | Description |
|-----|-----------|----------|
| 0000 | NOP | 무연산 |
| 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
아직 댓글이 없습니다.