Zpět na domů

Sestavení SAP-1 v Turing Complete: návod

Návod k sestavení SAP-1 v Turing Complete: architektura, mikrokód na ROM, generátor kódu. Pro vývojáře — od NAND do assemblera s příklady.

Jak sestavit SAP-1 Bena Eatera v Turing Complete
Advertisement 728x90

# Sestavení SAP-1 v Turing Complete: podrobný návod pro vývojáře

V hře Turing Complete se realizuje sestavení počítače SAP-1 (Simple As Possible) — klasické 8bitové architektury s 4bitovým adresním prostorem (16 bajtů paměti). Jedná se o akumulační model, kde všechny operace používají akumulátor jako hlavní registr. Hra umožňuje projít etapy od základních logických prvků po úplnou architekturu a assembler programů.

SAP-1 kopíruje konstrukci Bena Eatera: dva registry (akumulátor a pomocný), paměť 16 bajtů. Omezení hry — absence ukládání dat do bloků programu.

Hlavní komponenty SAP-1

Architektura zahrnuje:

Google AdInline article slot
  • Dekodér instrukcí na bázi ROM čipu pro zjednodušení mikrokódu.
  • Registrů: akumulátor (A), instrukční (IR), paměť (RAM).
  • ALU: sčítací/odečítací jednotka s vlajkami Z (zero) a C (carry).
  • Kontroler: mikrokód se signály MI, RO, II, AI, AO aj.

Uspořádání schématu následuje originál Bena Eatera: paměť vlevo, ALU uprostřed, výstup vpravo.

Implementace mikrokódu

Dekodér instrukcí používá ROM s mikropogramem. Pro načtení do hry se generuje ROM soubor. Zde je kód v C++ pro vytvoření mikrokódu (zohledňuje vlajky 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;
}

Kompilovat s C++20 (gnu++20 v VS Code). Soubor .rom se zkopíruje do uživatelské složky hry.

Google AdInline article slot

Příkazy procesoru

| Kod | Mnemotechnika | Popis |

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

| 0000 | NOP | Žádná operace |

Google AdInline article slot

| 0001 | LDA | Načtení do A |

| 0010 | ADD | Sčítání s B |

| 0011 | SUB | Odečítání |

| 0100 | STA | Uložení A |

| 0101 | LDI | Načtení okamžité hodnoty |

| 0110 | JMP | Nepodmíněný skok |

| 0111 | JC | Skok podle Carry |

| 1000 | JZ | Skok podle Zero |

| 1110 | OUT | Výstup |

| 1111 | HLT | Halt |

Mikrokód generuje sekvence signálů pro každý takt.

Instalace SAP-1 v Sandbox

  • Stáhněte soubory projektu.
  • Najděte cestu v nastavení: C:\Users\[User]\AppData\Roaming\Godot\app_userdata\Turing Complete.
  • Zkopírujte .rom a schémata do uživatelské složky.
  • Spusťte Sandbox, načtěte sap-1.

Ověřte: spusťte testovací program (hra v paličky z Fort Boyard).

Problémy a nuance sestavování

  • Otáčení prvků: mezerník.
  • Výběr: Shift.
  • Vstup do architektury: dvojitý klik.
  • Vlastní prvky: jeden vstup/výstup na tile, minimálně jeden vnitřní komponent.

Hra je v early access: kampaň končí náhle, ale Sandbox je plný možností.

Co je důležité

  • SAP-1 — akumulační architektura 80. let pro úsporu paměti.
  • Mikrokód v ROM zjednodušuje dekódování (alternativa — čistá logika).
  • Omezení: 16 bajtů RAM bez dat v programu.
  • Hra učí od NAND po assembler.
  • Generování ROM přes C++ pro vlastní čipy.

— Editorial Team

Advertisement 728x90

Číst dál