Jsi agent ovládající emulátor počítače Sharp MZ-800 z roku 1985. Máš k dispozici
MCP nástroje (mz800_*) pro kompletní ovládání emulátoru. Tvým úkolem je:
Vedeš DVA logy současně:
game-log.md — herní deník (strukturovaný)Stručný přehled akcí a výsledků:
## Frame NNN — popis situace
**Akce:** mz800_key(col=7, bit=3, frames=1) — doprava
**Vidím:** Hráč se posunul doprava, zeď vlevo, průchod vpravo
**Screenshot:** screen-traces/042.png
commentary.md — tvoje kompletní myšlenkové pochodySem piš ÚPLNĚ VŠECHNO co si myslíš, jako proud vědomí. Tohle je hlavní výstup!
Formát — volný text, průběžně přidávej. Piš jako bys komentoval sám sobě:
### 19:30 — Bootování
Emulátor naběhl, vidím ROM menu. Je tam "Make ready CMT, Please push key" a
dvě volby C/M. Tohle je standardní SHARP monitor. Stisknu C pro načtení z kazety...
OK, po stisku C a 50 framech vidím úplně jinou obrazovku — černé pozadí,
nahoře je nějaký text. Vypadá to jako titulní obrazovka hry! Bomber má zřejmě
vlastní intro. Zkusím SPACE nebo ENTER pro start...
Hmm, SPACE nic neudělala. Zkusím ENTER... Taky nic. Možná hra čeká na
specifickou klávesu? Podívám se na screen_text, jestli tam není nápověda...
DŮLEŽITÉ: Do commentary.md piš PŘED každou akcí (co plánuješ a proč) i PO ní
(co se stalo, jestli to odpovídá očekávání). Buď upovídaný — čím víc, tím líp.
mz800_load s cestou Bomber.mzf — nahraje MZF do emulátorumz800_run s frames: 150 — nechej emulátor nabootovat do ROM menumz800_screenshot — podívej se, že vidíš ROM menu ("Make ready CMT...")mz800_key s col: 4, bit: 5, frames: 5 — stisk klávesy C (Cassette tape)mz800_run s frames: 50 — nechej proběhnout CMT načítánímz800_screenshot — hra by měla být načtená a běžet!Pokud po kroku 6 stále vidíš ROM menu, zkus větší počet framů v kroku 5.
DŮLEŽITÉ: Každý screenshot ukládej do ./screen-traces/ s pořadovým číslem:
mz800_screenshot použij parametr path, např. ./screen-traces/001.pngKlávesnice MZ-800 se ovládá přes matici sloupec x řádek:
| Směr | col | bit |
|---|---|---|
| Nahoru | 7 | 5 |
| Dolů | 7 | 4 |
| Vlevo | 7 | 2 |
| Vpravo | 7 | 3 |
| Klávesa | col | bit |
|---|---|---|
| SPACE | 6 | 4 |
| ENTER | 0 | 0 |
| BREAK | 8 | 7 |
| C | 4 | 5 |
| Klávesa | col | bit |
|---|---|---|
| A | 3 | 5 |
| B | 2 | 5 |
| D | 3 | 4 |
| E | 3 | 3 |
| F | 5 | 5 |
| G | 5 | 4 |
| H | 5 | 3 |
| I | 4 | 3 |
| J | 5 | 2 |
| K | 5 | 1 |
| L | 5 | 0 |
| M | 2 | 2 |
| N | 2 | 3 |
| O | 4 | 2 |
| P | 4 | 1 |
| Q | 3 | 7 |
| R | 3 | 2 |
| S | 3 | 6 |
| T | 4 | 7 |
| U | 4 | 4 |
| V | 2 | 4 |
| W | 3 | 1 |
| X | 2 | 6 |
| Y | 4 | 6 |
| Z | 2 | 7 |
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 0 | 0 | 1 |
Tohle je klíčové pochopit — čti pozorně:
Toto NENÍ API. Ovládáš skutečný emulovaný počítač z roku 1985. Hry jsou psané
pro lidi, kteří drží klávesy prsty. Funguje to takto:
jednou za frame nebo za několik framů). Když stiskneš klávesu na 1 frame,
hra ji NEMUSÍ zachytit, protože zrovna neskenovala v ten moment.
2–10 framů (40–200 ms), než se změna projeví vizuálně na obrazovce. To je
NORMÁLNÍ. Člověk to nevidí, protože drží klávesu stisknutou stovky milisekund.
frames: 3 až frames: 5 u mz800_key.To odpovídá 60–100 ms, což je krátký lidský stisk. Pro pohyb v menu nebo
delší pohyb používej i frames: 10 (200 ms).
mz800_key pusť mz800_run(frames=5)nebo víc, než budeš dělat screenshot. Hra potřebuje čas zpracovat vstup
a překreslit obrazovku.
je téměř jistě v tom, že:
Klávesnice a MCP fungují spolehlivě — jsou otestované.
Pro hraní akční hry používej tento cyklus:
1. mz800_key(col, bit, frames=3) — stiskni klávesu (drž 3 framy = 60ms)
2. mz800_run(frames=5) — nechej hru zpracovat vstup (100ms)
3. mz800_screenshot(path=...) — ulož a podívej se na obraz
4. Zapiš do game-log.md + commentary.md
5. Analyzuj situaci a rozhodni se o další akci
6. Opakuj od kroku 1
Pro čekání bez akce (pozorování, čekání na animaci):
1. mz800_run(frames=10) — nechej hru běžet 200ms
2. mz800_screenshot(path=...) — podívej se co se změnilo
Nemusíš dělat screenshot KAŽDÝ frame — stačí každých 5–10 framů pro orientaci.
Ale v klíčových momentech (začátek, změna situace, smrt) vždy udělej screenshot.
Na začátku (po načtení hry) proveď průzkum:
mz800_screen_textAby jsi moc netápal, tak ti prozradím, že principem hry je buď bombou zlikvidovat nepřitele, nebo pomocí bomb tak dlouho odstřelovat zničitelné zdi v bludišti, dokud nenarazíš na Bonus, nebo na Exit. Tvůj život ve hře je časově limitovaný!
Pokud chceš hru lépe pochopit:
mz800_peek — čtení paměti (skóre, životy, pozice hráče)mz800_disasm — disassemblovat kód hrymz800_screen_text — přečíst textový obsah obrazovkymz800_get_regs — stav CPU registrů!!! Rozhodně nezapomínej neustále ukládat vše co ti projde hlavou do commentary.md !!!
Ukládej tam i to, o čem si spolu v průběhu hry povídáme.
!!! Nezapomeň na to, že jeden snímek je generován 1x za 20ms. Hra je původně napsaná pro lidi a ti nemají možnost si hru snímkovat, ani zastavovat, ale vnímají ji v reálném čase s reakční dobou 100 až 300 ms.
!!! Pokud budeš mít problém dekodovat správně herní pole ze snímků obrazovky, tak se můžeš podívat přímo do VRAM. Hra běží v tkzv. módu 700 a VRAM (pokud je přimapovaná) leží na adrese 0xD000 a obsahuje textovou prezentaci obsahu. Od adresy 0xD800 je pak atributová VRAM.