# Złożenie SAP-1 w Turing Complete: przewodnik krok po kroku dla programistów
W grze Turing Complete możesz złożyć komputer SAP-1 (Simple As Possible) — klasyczną 8-bitową architekturę z 4-bitową przestrzenią adresową (16 bajtów pamięci). Jest to model akumulatorowy, w którym wszystkie operacje wykorzystują akumulator jako główny rejestr. Gra pozwala przejść etapy od podstawowych bramek logicznych do pełnej architektury i asemblera programów.
SAP-1 naśladuje konstrukcję Bena Eatera: dwa rejestry (akumulator i pomocniczy), pamięć 16 bajtów. Ograniczenie gry — brak możliwości zapisywania danych w blokach programu.
Główne komponenty SAP-1
Architektura obejmuje:
- Dekoder instrukcji oparty na chipie ROM dla uproszczenia mikrokodu.
- Rejestry: akumulator (A), instrukcyjny (IR), pamięć (RAM).
- ALU: sumator/subtraktor z flagami Z (zero) i C (carry).
- Kontroler: mikrokod z sygnałami MI, RO, II, AI, AO i innymi.
Schemat rozmieszczenia podąża za oryginałem Bena Eatera: pamięć po lewej, ALU w centrum, wyjście po prawej.
Implementacja mikrokodu
Dekoder instrukcji wykorzystuje ROM z mikroprogramem. Do załadowania do gry generuje się plik ROM. Oto kod w C++ do tworzenia mikrokodu (uwzględnia flagi 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;
}
Kompilować z C++20 (gnu++20 w VS Code). Plik .rom kopiuje się do folderu użytkownika gry.
Polecenia procesora
| Kod | Mnemonika | Opis |
|-----|-----------|----------|
| 0000 | NOP | Brak operacji |
| 0001 | LDA | Ładowanie do A |
| 0010 | ADD | Dodawanie z B |
| 0011 | SUB | Odejmowanie |
| 0100 | STA | Zapis A |
| 0101 | LDI | Ładowanie immediate |
| 0110 | JMP | Skok bezwarunkowy |
| 0111 | JC | Skok po Carry |
| 1000 | JZ | Skok po Zero |
| 1110 | OUT | Wyjście |
| 1111 | HLT | Halt |
Mikrokod generuje sekwencje sygnałów dla każdego taktu.
Instalacja SAP-1 w Sandbox
- Pobierz pliki projektu.
- Znajdź ścieżkę w ustawieniach:
C:\Users\[User]\AppData\Roaming\Godot\app_userdata\Turing Complete. - Skopiuj
.romi schematy do folderu użytkownika. - Uruchom Sandbox, załaduj
sap-1.
Sprawdź: uruchom testowy program (gra w patyczki z Fort Boyard).
Problemy i niuanse składania
- Obracanie elementów: spacja.
- Zaznaczanie: Shift.
- Wejście do architektury: podwójny klik.
- Niestandardowe elementy: jedno wejście/wyjście na tile, minimum jeden wewnętrzny komponent.
Gra w wczesnym dostępie: kampania urywa się, ale Sandbox pełen możliwości.
Co ważne
- SAP-1 — architektura akumulatorowa z lat 80. do oszczędzania pamięci.
- Mikrokod w ROM upraszcza dekodowanie (alternatywa — czysta logika).
- Ograniczenie: 16 bajtów RAM bez danych w programie.
- Gra uczy od NAND do asemblera.
- Generowanie ROM przez C++ dla niestandardowych chipów.
— Editorial Team
Brak komentarzy.