Tyfoza blog
  • Fotogalerie 
  • 3D
  • Bastlení
  • Suzuki V-Strom
  • Další témata
  • Hledat
  • Archiv
  • Napsat Tyfovi

Počítač Rosco_m68k

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

26. srpna 2026 · 1 min

CP/M na 68k-MBC

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

25. srpna 2026 · 6 min

PIP v CP/M

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

24. srpna 2026 · 2 min

HAD v Enhaced 68k BASIC

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). ...

23. srpna 2026 · 13 min

Space 68K Invaders

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

23. srpna 2026 · 21 min

Přenos dat mezi PC a 68k-MBC

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ů. ...

22. srpna 2026 · 28 min

Toolchain z roku 1983

Tradiční vývoj a kompilace přímo na fyzickém stroji 68k-MBC přináší zásadní zdržení. Procesor M68000 na taktu 8 MHz musí pro každý průchod překladače číst a zapisovat dočasné mezisoubory přes emulovanou SD kartu a BIOS, což prodlužuje proces kompilace na několik minut.

21. srpna 2026 · 8 min

Počítač 68k-MBC

68k-MBC of autora Just4Fun. Domácí retro jednodeskový počítač. Navazuje na předchozí autorovy projekty Z80-MBC2 (Zilog Z80) a V20-MBC (NEC V20). Počítač je postavený na Motorola 68008 (1982). Procesor původně vznikl jako levnější varianta procesoru M68k (1979) a lišil se především 8bitovou vnější sběrnicí. Díky tomu mohli výrobci navrhovat levnější hardware s použitím běžných 8bitových pamětí, řadičů a periferií. V komerční sféře tento procesor proslavil počítač Sinclair QL (1984). Podrobně o tomto procesoru viz článek na root.cz Projekt 68k-MBC nabízí možnost, jak si vyzkoušet oživení 16bitového počítače bez nutnosti shánět někdy už nedostupné historické součástky. Víc na hackaday.io Hardwarová architektura Architektura základní desky v plně osazené verzi je minimalistická. Skládá se ze tří hlavních integrovaných obvodů a jednoho volitelného GPIO expandéru. Srdcem počítače je 16/32bitový mikroprocesor Motorola MC68008. Uvnitř čipu se skrývá plnohodnotná 32bitová architektura s 32bitovými datovými i adresními registry, ovšem vnější datová sběrnice je pouze 8bitová. Instrukce se proto musí z paměti načítat po částech, kvůli čemuž procesor dosahuje zhruba 50–60 % výkonu své plnohodnotné varianty MC68000. Moderním prvkem je řídicí mikrokontrolér Microchip PIC18F47Q10. Tento čip plní funkci I/O subsystému, zajišťuje TTL kompatibilitu pro propojení s procesorem a obsluhuje I2C sběrnici. Zásadním způsobem usnadňuje stavbu, protože supluje roli EPROM paměti (obsahuje firmware) a stará se o bootování, díky čemuž stavitelé nepotřebují klasický programátor historických pamětí. ...

20. srpna 2026 · 19 min

Co je VT100 a jak fungují Escape Sekvence

Terminál DEC VT100 (uvedený na trh v roce 1978) se stal průmyslovým standardem pro textovou komunikaci. Namísto přímého zápisu do videopaměti (framebufferu) komunikuje počítač s terminálem výhradně pomocí proudu znaků po sériové lince. Pokud terminál obdrží běžný ASCII znak (např. litera ‘A’, kód 65), vykreslí ho na aktuální pozici kurzoru. Pokud však obdrží speciální Escape znak (ASCII 27 / 0x1B / CHR$(27)), přepne se do režimu zpracování příkazu. ESC + [ + [Parametry] + Příkazový znak Sekvence začínající dvojicí ESC [ se označují jako CSI (Control Sequence Introducer). Většina příkazů má formát ESC [ číslo1 ; číslo2 ... příkaz. Kompletní Přehled VT100 / ANSI Escape Sekvencí Při práci s terminálem (např. v nástroji tio, PuTTY nebo na fyzickém terminálu) můžete využít širokou škálu příkazů: Řízení Kurzoru Escape Sekvence Zkrácený Kód Popis Funkce ESC [ H CUP Posun na pozici [1,1] (Home) ESC [ Y ; X H CUP Posun kurzoru na řádek Y a sloupec X ESC [ Y ; X f HVP Ekvivalentní příkaz k H ESC [ N A CUU Posun kurzoru o N řádků NAHORU ESC [ N B CUD Posun kurzoru o N řádků DOLŮ ESC [ N C CUF Posun kurzoru o N sloupců DOPRAVA ESC [ N D CUB Posun kurzoru o N sloupců DOLEVA ESC [ ? 25 l DECTCEM Skryje blikající kurzor ESC [ ? 25 h DECTCEM Zobrazí kurzor ESC 7 nebo ESC [ s DECSC Uloží aktuální pozici kurzoru ESC 8 nebo ESC [ u DECRC Obnoví uloženou pozici kurzoru Mazání Obrazovky a Řádků Escape Sekvence Zkrácený Kód Popis Funkce ESC [ 2 J ED2 Smaže celou obrazovku ESC [ 0 J (nebo ESC [ J) ED0 Smaže obrazovku od kurzoru do konce ESC [ 1 J ED1 Smaže obrazovku od začátku do kurzoru ESC [ 2 K EL2 Smaže celý aktuální řádek ESC [ 0 K (nebo ESC [ K) EL0 Smaže řádek od kurzoru do konce ESC [ 1 K EL1 Smaže řádek od začátku do kurzoru Formátování Textu a Barvy (SGR - Select Graphic Rendition) Atributy textu se nastavují pomocí ESC [ N m. Více parametrů lze řetězit pomocí středníku (např. ESC [ 1;31;40m nastaví tučný červený text na černém pozadí). ...

19. srpna 2026 · 3 min

Typst a převod na blog

Budou delší články na blogu K programům a projektům tvořím místy rozsáhlou dokumentaci ve formátu Typst. Takový moderní nástupce LaTeXu. Má pěknou sazbu a umí hezky matematiku. Hotový .typ umíme převést do .md pomocí pandoc. A výsledný .md soubor lze s minimálními úpravami vložit na tento blog, tedy do systému hugo. Nebudu muset odkazovat hotové PDF, ale můžu text převést do blogové příspěvku a zachovat matematickou sazbu s využitím KaTeX. Vtipné je, že jsem na Typst přešel především proto, že v něm píše výrazně komfortněji než v LyXu, který jsem používal roky. výborná přednáška o Typst Převod Typst na Markdown pandoc vstup.typ -f typst -t markdown+tex_math_dollars+pipe_tables-grid_tables-multiline_tables -o vystup.md převodní skript typ2md #!/bin/bash # Kontrola, zda byl zadán vstupní parametr if [ -z "$1" ]; then echo "Použití: $0 <soubor.typ>" exit 1 fi INPUT_FILE="$1" # Kontrola, zda vstupní soubor existuje if [ ! -f "$INPUT_FILE" ]; then echo "Chyba: Soubor '$INPUT_FILE' nebyl nalezen." exit 1 fi # Nahrazení koncovky .typ za .md OUTPUT_FILE="${INPUT_FILE%.typ}.md" echo "Převádím: $INPUT_FILE -> $OUTPUT_FILE" # Samotný převod s optimalizacemi pro Hugo (matematika + pipe tabulky) pandoc "$INPUT_FILE" \ -f typst \ -t markdown+tex_math_dollars+pipe_tables-grid_tables-multiline_tables \ -o "$OUTPUT_FILE" # Vyhodnocení výsledku if [ $? -eq 0 ]; then echo "Převod byl úspěšný!" else echo "Při převodu došlo k chybě." exit 1 fi

19. srpna 2026 · 2 min
« Předchozí  Další  »
© 2026 Tyfoza blog · Powered by Hugo & PaperMod