Otevření zahrady Panského domu
Bylo to velkolepé a lidí se sešlo opravdu mnoho. Měli jsme možnost se zúčastnit coby Václav hrabě z Kounic s chotí Josefínou. fotky od Stani Kadlčíka matap.cz
Bylo to velkolepé a lidí se sešlo opravdu mnoho. Měli jsme možnost se zúčastnit coby Václav hrabě z Kounic s chotí Josefínou. fotky od Stani Kadlčíka matap.cz
Č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?
Je větší e na π nebo π ne e?
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í. ...
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 ...
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: ...
Přenos dat (ať už textových zdrojových kódů nebo zkompilovaných binárních programů) z moderního počítače do retro počítače 68k-MBC s operačním systémem CP/M-68K představuje technickou výzvu. Terminálové emulátory a sériové linky jsou historicky navrženy primárně pro textová data, obvykle reprezentovaná 7bitovými nebo 8bitovými ASCII znaky. Pokud se přes takovou linku pokusíme odeslat surový binární soubor, nedopadne to dobře. Speciální řídící znaky obsažené v binárních datech vyvolávají nechtěné reakce operačního systému. Například byte 0x03 interpretuje systém jako přerušení (Ctrl+C), 0x1A jako konec souboru (EOF) a 0x04 jako konec vysílání (EOT). Výsledkem je poškození přenášeného souboru nebo úplný pád přenosu. Vkládání prostého textu pomocí schránky (Ctrl-V v emulátoru) je zase velmi pomalé, vyžaduje umělé vkládání pauz po každém znaku i řádku a neřeší problém s nekompatibilními znaky, jako je UTF-8 diakritika. Tradičním řešením pro bezpečný binární přenos bývaly protokoly s kontrolou chyb, jako je XMODEM nebo Kermit. Postavíme si svůj kompletní systém 68k-ser (skládající se z Python skriptu 68k-ser.py na PC a programu 68KSER.C na CP/M). Duální sériový port Základem rychlé a plynulé práce je využití obou sériových portů, kterými deska 68k-MBC (ve verzi FULL) disponuje: Port J4 (AUX): Obsahuje integrovaný sériový budič MAX323 (RS-232) a v moderním OS se typicky hlásí jako /dev/ttyUSB1. Slouží pro připojení fyzického terminálu nebo emulátoru (např. tio) a je vyhrazen pro interaktivní zadávání příkazů. Port J2 (SER1): Port v TTL logice, hlásící se typicky jako /dev/ttyUSB0. Tento port slouží výhradně jako vyhrazený datový kanál pro běh přenosových skriptů. ...