Powrót do strony głównej

Montaż SAP-1 w Turing Complete: przewodnik

Przewodnik po montażu SAP-1 w Turing Complete: architektura, mikrokod na ROM, generator kodu. Dla programistów — od NAND do asemblera z przykładami.

Jak złożyć SAP-1 Bena Eatera w Turing Complete
Advertisement 728x90

# 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:

Google AdInline article slot
  • 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.

Google AdInline article slot

Polecenia procesora

| Kod | Mnemonika | Opis |

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

| 0000 | NOP | Brak operacji |

Google AdInline article slot

| 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 .rom i 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

Advertisement 728x90

Czytaj dalej