
Automatické titulky a překlad
K mému oblíbenému seriálu z roku 1983 jsem nedohledal anglické titulky. Vytvoříme je automaticky ze zvukové stopy; a když už budeme mít anglické titulky, tak je strojově přeložíme do češtiny.

K mému oblíbenému seriálu z roku 1983 jsem nedohledal anglické titulky. Vytvoříme je automaticky ze zvukové stopy; a když už budeme mít anglické titulky, tak je strojově přeložíme do češtiny.

Přes 30 originálních počítačů a zařízení – všechny plně funkční a připravené k vyzkoušení. Od Apple II z roku 1977, přes první Macintosh, iMac G3, iPhone až po revoluční Apple Vision Pro.

Často se čelím otázce: “A k čemu to je dobré?” Proč trávíš čas programováním pro čtyřicet let starý procesor, když tu máme cloud, umělou inteligenci a nekonečný výpočetní výkon?

Naivní přístup spočívající v prostém zapsání a zpětném přečtení jedné hodnoty je pro odhalení skutečných defektů nedostačující. Polovodičová paměť je extrémně hustá fyzická matice tranzistorů, u které dochází k parazitním jevům, svodovým proudům a elektromagnetickému rušení.

Proč stavíme homebrew počítače a kouzlo Motoroly 68k Návrat k hardwarovým kořenům (Bare metal) Žijeme v éře bezprecedentní výpočetní abstrakce. Od hardwaru nás dnes dělí mikrokód, operační systém, virtuální stroje, kontejnery a vysokoúrovňové běhové prostředí. Ačkoliv je tento vrstvený přístup nezbytný pro moderní vývoj softwaru, zcela izoluje vývojáře od základních principů fungování počítače. Stavba “homebrew” (po domácku vyráběných) počítačů je reakcí na tuto nepřehlednost. Jde o touhu porozumět počítači do posledního bitu, adresního pinu a hodinového taktu. Na vlastnoručně postaveném počítači víte přesně, co se děje, když se CPU resetuje, jak paměť odpovídá na požadavky a jak se přes I/O porty rozsvěcují LED diody. Je to absolutní kontrola, která spojuje svět elektroniky a nízkoúrovňového programování. Proč právě Motorola 68000? Zatímco 8bitovým homebrew počítačům kralují procesory Z80 a 6502, přechod do 16/32bitové éry má jediného nekorunovaného krále: procesor Motorola 68000 (zkráceně M68k nebo 68k). Tento čip formoval 80. a 90. léta, kdy poháněl legendární stroje jako Commodore Amiga, Atari ST, původní Apple Macintosh nebo konzoli Sega Mega Drive. Mezi bastlíři a vývojáři je 68k oblíbený z několika klíčových důvodů: Elegance instrukční sady: Na rozdíl od archaické a segmentované architektury x86 (Intel 8086), Motorola 68000 nabídla nádherně ortogonální instrukční sadu, která je pro programátora v asembleru radostí. 32bitové srdce: Ačkoliv má původní 68000 16bitovou datovou a 24bitovou adresní sběrnici (fyzicky), uvnitř pracuje s 32bitovými daty a registry. Lineární adresní prostor: Adresování až 16 MB paměti probíhá zcela plynule, bez nutnosti používat segmenty a offsety. Osm datových a osm adresních registrů (D0-D7, A0-A7): Nabízejí obrovskou flexibilitu, která na svou dobu připomínala spíše sálové počítače. ...

původní verze na githubu řešení od Solder Demon MOTOROLA 68010 na 10 MHz Rozšiřující deska a 4MB paměti Brzy snad přibude grafická a zvuková karta
Programování pro CP/M-68K Operační systém CP/M-68K poskytuje běžícím programům sadu služeb zvanou BDOS (Basic Disk Operating System). Díky nim program v jazyce C nemusí znát fyzické detaily hardwaru (např. na kterém pinu mikrokontroléru PIC je sériová linka). Místo toho program požádá CP/M o standardizovanou službu – například “vypiš znak” nebo “přečti klávesu”. Na procesorech řady Motorola 68000 se tyto služby volají softwarovým přerušením pomocí instrukce trap #2. Předávání parametrů Když chceš zavolat funkci BDOS z assembleru, CP/M-68K očekává následující konvenci: Registr d0 (spodní word): Číslo funkce BDOS (např. 2 pro výpis znaku, 9 pro výpis řetězce). Registr d1 (nebo a0 pro adresy): Parametr funkce (např. jaký znak vypsat, nebo adresa řetězce v paměti). Instrukce trap #2: Předání řízení operačnímu systému. Registr d0: Po návratu z trap #2 obsahuje d0 výsledek operace (např. přečtený znak nebo návratový kód). Seznam nejdůležitějších funkcí BDOS Zde je přehled základních funkcí, které se ti budou při programování retro her a utilit na 68k-MBC nejvíce hodit: Číslo v d0 Název funkce Popis a parametry 0 System Reset Ukončí program a vrátí uživatele do příkazové řádky (A>). 1 Console Input Čeká na stisk klávesy a její znak zobrazí na obrazovce (echo). Výsledek v d0. 2 Console Output Vypíše znak zadaný v registru d1 na terminál. 6 Direct Console I/O Univerzální funkce. Pokud je v d1 hodnota 255 (0xFF), pokusí se přečíst klávesu bez zobrazení (no echo). Pokud klávesa není stisknuta, vrátí v d0 nulu. Vhodné pro neblokující čtení. 9 Print String Vypíše na obrazovku textový řetězec. V registru d1 (nebo a0) musí být adresa řetězce ukončeného znakem dolaru ($). 11 Console Status Zkontroluje buffer klávesnice. Pokud je klávesa připravena, vrátí 0xFF v d0. Pokud ne, vrátí 0x00. Příklad 1: Neblokující čtení klávesnice Protože staré kompilátory jazyka C (jako Alcyon C) často nepodporují snadné vkládání assembleru přímo do C kódu (inline assembly), řeší se systémová volání tak, že se napíše malá funkce v assembleru, která se v C pouze deklaruje a následně s ním slinkuje. ...
PIP (zkratka pro Peripheral Interchange Program) je jedním z nejdůležitějších příkazů v historickém operačním systému CP/M. Zjednodušeně řečeno je to dobový ekvivalent dnešního příkazu copy (ve Windows) nebo cp (v Linuxu), ale uměl toho mnohem víc. Sloužil primárně ke kopírování souborů a přesouvání dat mezi různými fyzickými i logickými zařízeními (např. mezi disketami, tiskárnou, obrazovkou nebo děrnou páskou). Zvláštní syntaxe (Cíl = Zdroj) Na rozdíl od pozdějšího MS-DOSu nebo dnešních systémů, kde zadáváme nejdřív to, co kopírujeme, a pak to, kam to kopírujeme (např. copy ODKUD KAM), PIP používal opačnou logiku, která připomínala matematickou rovnici: CÍL = ZDROJ Běžné příklady použití v praxi Kopírování souboru na jiný disk: PIP B:TEXT.TXT = A:TEXT.TXT (Zkopíruje soubor TEXT.TXT z disku A na disk B.) Tisk souboru (odeslání dat na zařízení): PIP LST: = A:DOPIS.TXT (Vezme soubor a odešle ho přímo na fyzickou tiskárnu – LST jako List device.) Spojování více souborů do jednoho: PIP KNIHA.TXT = KAPITOLA1.TXT, KAPITOLA2.TXT (Vezme oba zdrojové soubory a plynule je spojí do jednoho nového souboru.) Zobrazení textu na obrazovce: PIP CON: = READ.ME (Pošle obsah souboru na konzoli – CON, tedy na obrazovku.) 68k-MBC Na CP/M-68k máme PIP na disketě A: tedy pak píšeme příkaz A:PIP Typický příklad – na disketě F: máme SKED editor. Vyvoříme zdrojový kód POKUS.C Na disketě C: máme céčkový kompilátor. C: se přepnu na disk C: C>A:PIP POKUS.C=F:POKUS.C zkopírujeme si soubor z diskety F: na aktuální disketu (C:) a pak už jenom SUBMIT C POKUS pro kompilaci a pak CLINK POKUS pro linkování a máme hotový POKUS.68K ...
Cílem bylo dosáhnout maximální plynulosti v prostředí interpretovaného BASICu. Pomohly kruhové zásobníky, předpočítání náhodného výskytu jídla a tabulky escape sekvencí a hlavně O(1) detekce kolizí. Použitá pole Program je rychlý, protože nevyužívá k běhu hry téměř žádné výpočty, ale čte data z předem připravených paměťových struktur. X(500), Y(500) – Kruhový zásobník (Ring Buffer) těla hada. Uchovává X a Y souřadnice. Nešoupe se s nimi! Pouze se posouvá virtuální ukazatel hlavy (H) a ocas se dopočítává. Velikost 500 definuje maximální možnou délku hada. P$(45, 25) – Cache pro ANSI sekvence. Dvourozměrné textové pole. V každé buňce je uložen hotový textový řetězec pro skok kurzoru (např. ESC[10;20H). Tím se zcela eliminuje pomalé spojování řetězců během hry. FX(500), FY(500) – Předgenerované jídelníček. Tabulka náhodných pozic žrádla. Místo pomalého volání matematické funkce RND() se během hry jen sekvenčně čte další hodnota v pořadí. Q(25) – Fronta stisků kláves (Input Queue). Menší kruhový zásobník chytající rychlé stisky kláves od hráče, aby nedošlo k zahození příkazů (např. při rychlé kličce “nahoru a hned doprava”). B(45, 25) – Mapa kolizí (Collision Map). Dvourozměrné pole fungující jako mřížka obrazovky. 1 znamená, že na dané souřadnici je tělo hada nebo zeď, 0 znamená volno. Zajišťuje absolutní O(1) detekci nárazu a bezpečné generování jídla bez složitých podmínek. Proměnné Systémové a dočasné proměnné E$ – Obsahuje “Escape” sekvenci CHR$(27) + "[". Slouží jako základ pro všechny ANSI příkazy. SY$, SX$ – Dočasné textové proměnné (String Y, String X) používané výhradně při startu (řádky 70, 90) k oříznutí mezer po funkci STR$(). A$ – Proměnná pro zachycení stisku klávesy v obrazovce “Game Over” (Ano/Ne). ...

Space 68K Invaders je můj pokus o adaptaci klasické arkádové střílečky z roku 1978. Napsáno v Alcyon C, kompilováno a linkováno na procesoru a pro procesor Motorola 68008. Běží na jednodeskovém homebrew počítači 68k-MBC pod operačním systémem CP/M-68K. V článku řeším problematiku optimalizace hry pro textový terminál. Přestože 16/32bitový procesor taktovaný na frekvenci 8 MHz poskytuje pro podobný typ hry více než dostatečný výpočetní výkon, narazili jsme se jiný problém: odezva komunikačního rozhraní. V prostředí CP/M-68K typicky neexistuje přímý přístup do grafické paměti (VRAM) displeje. Veškerý vizuální výstup je odesílán jako proud ASCII znaků a escape sekvencí na připojený terminál (standardu VT100) prostřednictvím sériové linky RS232. Tento způsob komunikace, často na rychlosti 115 200 baudů, znamená, že prosté překreslení celé obrazovky o velikosti 24 řádků a 80 sloupců trvá z pohledu interaktivní hry neakceptovatelně dlouho. Tradiční přístup k programování her (vymazání obrazovky a vykreslení nové scény) zde proto naprosto selhává a vede k masivnímu zpoždění (lagu) a výraznému blikání (flickeringu) pohybujících se objektů. Fyzikální limity VT100 a RS232 Úzkým hrdlem při vývoji her pro terminál je sériová linka RS232. Oproti klasickým 8bitovým počítačům s přímým přístupem do video paměti (VRAM) musí 68k-MBC odesílat veškeré grafické změny sekvenčně. Zvolená komunikační rychlost je 115 200 baudů. Ačkoliv se to v kontextu retro počítačů jeví jako velmi rychlé připojení, pro interaktivní plynulé překreslování herní scény představuje tvrdý limit. Při standardním nastavení sériového přenosu 8N1 (1 start bit, 8 datových bitů, 1 stop bit bez parity) trvá přenos jednoho znaku přesně 10 bitů. Maximální teoretická propustnost sériové linky je tedy: ...