Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.
Bylo vydáno OpenBSD 7.7. Opět bez písničky.
Při pohledu na klávesnici ZX Spectra jsem si uvědomil, že smysl řady příkazů, které jsou na ni vytištěny, mi už není zřejmý. Proto jsem si znovu prošel slovenský manuál k počítači Didaktik Gama a prolistoval knihu Můj přítel Didaktik Gama, což byl jeden z mála zdrojů informací, který jsem měl k dispozici k prvnímu programovacímu jazyku, s nímž jsem přišel do styku - Sinlair BASICem. Zajímalo mě, jak se těch několik zaprášených střípků informací a dojmů, které mi z té doby před několika desetiletími zbyly, vypořádají s novým pohledem. Jaký tehdy byl dnes tolik opovrhovaný BASIC?
Pokud jste byli nebo dokonce stále jste v BASICu jako doma, pravděpodobně vám následující řádky mnoho nového nepřinesou, i když snad i vy v nich najdete pár zajímavých detailů. Pokud jste se setkali s BASICem na jiné platformě, můžete si ji alespoň s gumákem porovnat.
Z dnešního pohledu jsou na Sinclair BASICu nezvyklé především tři vlastnosti: číslování řádků, způsob zadávání kódu a větvení. Jednotlivé řádky programu se zadávaly v libovolném pořadí, ale na začátku každého z nich, pokud neměl být okamžitě vykonán, bylo nutné uvést jeho číslo v rozsahu 1 až 9999. Bez výjimky. Návěstí neexistovala, takže pokud na určitém řádku začínal nějaký podprogram a vy jste ho pak přesunuli jinam, bylo nutné opravit všechny skoky na něj. Částečně se to dalo obejít tím, že příkazy GO TO a GO SUB akceptovaly na místo čísla řádku libovolný výraz, takže jste si mohli nejdříve deklarovat proměnné fungující jako návěstí a pak je používat. Nejednalo se však o příliš využívanou možnost. Číslo řádku, kam směřoval skok, mohlo být i reálné číslo. V takovém případě se nejdříve zaokrouhlilo a pak se hledalo nejbližší vyšší číslo řádku. Ty nemusely tvořit souvislou sekvenci.
S číslováním řádků úzce souvisel editor, který byl u ZX Spectra 48k jednořádkový. Pomocí šipek nahoru a dolů (bylo nutné použít kombinaci kláves) jste si ve výpisu programu přesunuli značku na vybraný řádek a ten pak klávesou “EDIT” (opět kombinace) zobrazili v editačním řádku na spodní straně obrazovky, kde jste se pohybovali pomocí šipek. Klávesou Enter se řádek uložil, přičemž bylo možné změnit jeho číslo a tak ho přesunout. Vložením čísla řádku bez obsahu se takový řádek smazal. Jeden řádek programu nebyl totožný s řádkem obrazovky, která byla měla šířku jen 32 znaků, takže docházelo k jeho případnému zalamování. Pozdější model ZX Spectrum 128k obsahoval vylepšený celoobrazovkový editor, který umožňoval i přečíslování řádků.
Klávesnice Spectra měla 40 kláves (standardní PC klávesnice jich má cca 104) a patří k tomu nejhoršímu, co tehdejší trh nabízel. Didaktik Gama na tom byl mnohem lépe, ale z principu se na ní nedalo psát moc rychle. Navíc mezerník byl umístěn v pravém spodním rohu klávesnice a byl jen o něco málo větší než standardní klávesy. To bylo částečně kompenzováno tím, že klíčová slova BASICu s přilehlými mezerami nebylo nutné psát celá, ale určité klávesy nebo jejich kombinace vše vypsaly přímo. Klávesy měly až šest různých významů a to, co dělaly, bylo částečně určeno kontextem. Na místo programu, kde byl očekáván příkaz, tak nebylo možné například zapsat pouhé znaky. Do určité míry to omezovalo možné syntaktické chyby. To, v jakém jste kontextu, se dalo poznat podle tvaru textového kurzoru. Klíčová slova byla reprezentována nezměnitelnými tokeny, takže je nebylo možné v editoru poškodit a kurzor je přeskakoval.
Příkazy se většinou psaly jeden na řádek, ale bylo možné jich na na něj umístit i více. V takovém případě se oddělovaly dvojtečkou. Pak se chovaly, jako by byly na samostatném leč nečíslovaném řádku s jednou výjimkou (pomineme-li komentář REM). Tím byl příkaz IF, který v případě splnění podmínky vykonal všechny příkazy na témže řádku, či je v opačném případě přeskočil. Alternativa ELSE neexistovala, bylo nutné použít příkaz GO TO, například následujícím způsobem:
10 INPUT a 20 IF a=1 THEN PRINT “is one”: GO TO 40 30 PRINT “is not one” 40 PRINT “continue”
Pokud by nebylo možné použít více příkazů na řádek, bylo by nutné použít dokonce dva příkazy GO TO. Toto nadužívání i pro elementární konstrukce přineslo příkazu GO TO i BASICu samotnému velice špatnou pověst, které se dodnes nedokázali zbavit.
O mnoho lépe na tom BASIC nebyl ani s podprogramy. Na ty se skákalo příkazem GO SUB, příčemž aktuální pozice v programu se uložila na zásobník volání. Návrat z podprogramu pak obstaral příkaz RETURN. To sice umožňovalo rekurzi omezenou pouze velikostí volné paměti, ale neexistovala žádná možnost, jak na zásobník uložit také nějaké argumenty. Bylo možné použít pouze globální proměnné.
Krom podprogramů měl BASIC ještě funkce definované pomocí příkazu DEF FN a volané příkazem FN. Funkce mohly mít více argumentů, avšak jejich jméno smělo být tvořeno pouze jediným písmenem! Navíc se nerozlišovalo mezi velkými a malými písmeny, což celkové množství funkcí značně omezovalo. Funkce byly tvořeny pouze jediným výrazem, nemohly obsahovat příkazy. Mohly volat jiné funkce a dokonce i volat rekurzivně samy sebe, ale vzhledem k tomu, ani logické funkce nepoužívaly líné vyhodnocování, byl to pouze elegantní způsob, jak se dobrat k chybě Out of memory. Argumenty funkcí překrývaly lokální proměnné a stejně jako jména funkcí mohly být tvořeny pouze jediným písmenem.
Sinclair BASIC znal tři druhy proměnných. Čísla, která byla vždy reálná, řetězce a pole. Z nich pouze číselné proměnné mohly být pojmenovány rozumným identifikátorem. Jména proměnných s řetězci byla omezena na jedno písmeno a vždy končila znakem dolaru (např. s$). Jména zabudovaných funkcí pracujících výhradně s řetězci taktéž končila znakem dolaru.
Stejně tak jména polí byla limitována délkou jednoho znaku. Mohla být mnohorozměrná a jejich rozměry zadány i reálným číslem, které se však vždy zaokrouhlilo na celé číslo. Indexovala se od jedničky a nebylo možné pracovat s polem jako celkem, pouze jednotlivými prvky.
Proměnné nebylo potřeba předem deklarovat, což byl častý zdroj chyb. Možnost vkládat více příkazů na jeden řádek člověk ocenil hlavně v případě, že už se mu nedostávalo volných čísel řádků v místech, kam chtěl kód vložit. Čitelnosti programu to však nepřidávalo.
Do zdrojového kódu programu bylo možné vkládat přímo z klávesnice tokeny měnící barvu textu. Hlavní smysl této funkce byl umožnit programátorům snadno upravovat barvy ve vypisovaných řetězcích, ale protože tyto tokeny mohly být umístěny kdekoliv v kódu, daly se použít i pro věci jako ruční zvýrazňování syntaxe. V praxi se však této funkce zneužívalo k tomu, aby se nastavením stejné barvy textu a pozadí část programu, většinou zavaděče, skryla před zraky zvědavců. Klávesnice umožňovala i vstup speciálních pseudografických znaků vyplňujcích vždy některé kvadranty plochy znaku (▙ ▚ ▛ ▜ ▝ ▟ a podobné). Těch byla jen polovina z potřebného počtu, protože zbylé se zobrazily přidáním tokenu inverzní grafiky. Protože BASIC Spectra měl příkazy pro vykreslování grafiky, nejednalo se o příliš využívanou možnost a byla zde hlavně kvůli kompatibilitě se staršími modely ZX80 a ZX81. Ale protože se bitmapy znaků dala upravovat, využívaly se pozměněné například pro češtinu.
Příkaz pro cyklus byl pouze jediný, počítaný FOR. Všechny ostatní případy se řešily přes GO TO. O debuggeru jsme si mohli nechat jen zdát, ale protože byl Sinclair BASIC interpretovaný a obsahoval příkaz STOP, který v daném místě běh programu přerušil. Bylo možné třeba vypsat hodnoty proměnných, program opravit a pak pokračovat příkazem CONTINUE. Ten se snažil navázat přesně tam, kde jste program ukončili, takže si poradil i s více příkazy na řádek. Když jste příkaz STOP, který přerušení programu vyvolal, smazali, pokračovalo se na následujícím řádku.
Pokud bylo potřeba do programu zadat více údajů, například předvolené hodnoty nějakého pole nebo matice, daly se do programu zadat příkazem DATA a pak do příslušných proměnných nebo prvků pole načíst příkazem READ. Zajímavé je, že data mohla být definována kdekoliv v programu, tedy i za místem, kde se četla. Příkazy READ se pak sekvenčně procházela. Navíc byl k dispozici i příkaz RESTORE, který určil, ze kterého řádku se data mají nadále číst. I ten přijímal jako argument obecný výraz, takže cílový řádek nemusel být pevně určen.
Ač byl BASIC tenkrát široce prezentován jako programovací jazyk pro začátečníky, z dnešního pohledu tak příliš nepůsobí. Ano, jednoduché věci, především základní výpočty, v něm bylo možné dělat docela jednoduše, ale u rozsáhlejších programů jste museli bojovat s velice nepřehlednou strukturou, která neumožňovala ani oddělení částí programu prázdnými řádky, natož odsazení. Absence návěstí a omezení délky jmen funkcí čitelnosti také rozhodně nepřidalo. Když se k tomu připočítá malý počet znaků na obrazovce, absence skutečného zvýrazňování syntaxe, lokálních proměnných, pořádných funkcí a procedur a podobně, nevychází z toho BASIC vůbec dobře. V mnoha ohledech si člověk při přechodu na assembler připadal jako ve vyšším programovacím jazyce. Svoji pošramocenou pověst si BASIC právem zaslouží a člověku nezbývá než litovat, že tenkrát výrobci domácích mikropočítačů nesáhli po jiné lepší alternativě.
A nebo je to vše trochu jinak?
BASIC totiž nebyl jen Sinclair BASIC. Například jeho implementace v BBC Micro ze stejné doby byla na mnohem lepší úrovni. Tam podmínky měly podporu ELSE, existoval v něm cyklus REPEAT UNTIL, jména řetězcových proměnných a polí neměla tak drastická omezení a podobně. V podstatě se jednalo o docela hezký jazyk, ze kterého si jeho uživatel neodnášel tolik špatných návyků
Malá odbočka. Nedávno se na AbcLinuxu objevila zprávička upozorňující na to, že BBC zpřístupnila kompletní archiv svého projektu Computer Literacy Project. Vřele doporučuji se na některá videa podívat, především pak na úvodní The Silicon Factor. Prakticky všechny předpovědi, které v tom pořadu zazněly, se také dočkaly naplnění. Zvláště zajímavý je náhled na myšlení tehdejších lidí, kteří měli velké obavy z dopadů, které bude mít rychlý a nezvratný nástup počítačů a automatizace na pracovní trh. Hodně to připomíná to, co si dnes můžete přečíst v novinách o zavádění umělé inteligence. I to, jak se v těch pořadech učí BASIC a prezentují možnosti počítačů, je hodné obdivu a uznání.
Na obranu ZX Spectra je nutné poznamenat, že BBC Micro mělo dvojnásobný objem paměti ROM (32 kB), takže si mohlo dovolit mnohem více. Právě ve velikosti paměti leží jeden z klíčů k tomu, proč tenkrát hromadně nesáhli po jiné alternativě k BASICu. V podstatě nebylo po čem. Sinclair BASIC se poprvé objevil na počítači ZX80, který měl pouhých 4 kB ROM. Do té se muselo podařit vměstnat vše včetně fontů a základních rutin operačního systému, takže na vlastní programovací jazyk s uživatelským rozhraním moc prostoru nezbývalo. Paměť RAM měla kapacitu pouhý 1 kB, z níž si systém ještě malou část ukousl.
I s tak nepatrným množstvím místa se jim podařilo vyrobit počítač, který byl vlastně překvapivě použitelný. Klávesnice sice byla ještě o řád horší než u Spectra a způsob generování obrazu, kdy se o vše staral přímo procesor, vedl k nepříjemnému poblikávání obrazu, kdykoliv se stiskla nějaká klávesa, či celkovému výraznému zpomalení (ZX81), ale měli jste počítač, který se možnostmi pro programování od Spectra nijak extrémně nelišil. Chyběla sice důležitá podpora reálných čísel a skutečné grafiky, ale jinak to byl stroj, se kterým se toho díky BASICu dalo dělat s ohledem na hardwarové prostředky docela dost, o čemž se lze přesvědčit v dobových knihách či časopisech s příklady programů. Emuátor ZX80, výpis ROM.
Úspěšný nástupce ZX81, který již měl 8 kB ROM, zvládal reálná čísla i jednoduchou grafiku. BASIC na ZX Spectru byl logickým pokračovatelem a nesporným vylepšením již rozjeté platformy se zpětnou kompatibilitou s většinou programů v literatuře. Navíc, BASIC používaly prakticky všechny konkurenční platformy, takže sáhnout po Forthu, Lispu, něčem jako Rosetta Smalltalk a podobně by je možná odsoudilo do stejné kategorie dobových obskurností, kam se dnes řadí Jupiter Ace.
Zbývá ještě otázka, proč si BASIC přes své nesporné zápory a vady vydobyl pověst jednoduchého jazyka pro začátečníky. Když se podíváme na první verzi BASICu, kterým byl Dartmouth BASIC z roku 1964, odpověď dostaneme hned. Protože takový prostě byl. Tento BASIC byl narozdíl od pozdějších implementací kompilovaný, umožňoval pouze jeden příkaz na řádek a podmíněný příkaz IF měl možnost pouze skočit na určité číslo řádku. Jinými slovy, byla to přímočará nadstavba nad Assemblerem s podporou reálných čísel, pojmenovaných proměnných a počítaných cyklů. Dokonce neobsahoval z počátku ani příkaz INPUT, protože se prostě předpokládalo, že data se zadají přímo do programu (jak jinak než příkazem DATA) a budou neinteraktivně zpracována. Neměl ani podporu řetězců, protože byl primárně používán na matematické výpočty. Manuál k němu naleznete zde.
V tomto světle plnil původní BASIC svou roli velice dobře a i programy v něm vypadaly docela přehledně. Odsuzovat za něj jeho autory k věčnému zatracení, by bylo hodně nespravedlivé. To, co se z něj později vyvinulo, je věc jiná. O tom, že dnešní implementace BASICu jsou někde úplně jinde, nemá cenu ani hovořit. A popravdě řečeno, všechny neduhy, kterými BASIC trpěl, měly jeden velmi pozitivní efekt. Motivovaly nás ponořit se do tajů strojového kódu a tím i k důslednějšímu poznání, jak ty úžasné domácí počítače vlastně fungují.
Tiskni
Sdílej:
Klávesnice Spectra měla 40 kláves (standardní PC klávesnice jich má cca 104) a patří k tomu nejhoršímu, co tehdejší trh nabízel.
To se ale týká původního "gumáka", v pozdějších letech už byla obvyklejší varianta ZX Spectrum+ ("plusko"), která měla klávesnici o dost lepší.
I to PMD 85 bylo z hlediska HW provedení klávesnice lepší.
Jak které. Původní PMD-85 se svými nízkými hranatými "cvakacími" klávesami z mého pohledu směle konkurovalo IQ 151, jehož klávesnice byla ve své době legendou. Verze PMD-85-2 (vyšší zkosené klávesy s měkkým stiskem) byla o poznání lepší, i když pořád trpěla problémem s velikostí (nebo spíš malinkostí) kláves.
Ty malé cvakací klávesy mělo primárně PMD 85-1 (skutečné peklo), u verze 2 se vyskytovalo možná i obojí, rozhodně jsem viděl variantu s malými, ale skutečnými klávesami, stejně jako má verze 3 (tu mám). Hodně klávesám pomohlo lehké promazání a vyčištění, protože mají vespod jen takové ty měkké kloboučky s vodivou gumou, která se přimačkává přímo na plošný spoj, nečistota může snadno zhoršit dotek.
Viz foto nejmodernější verze PMD-85 s lepšími tlačítky https://egalerie.net/index.php/opravy/PMD-85-3
Sinclairisti, co se s PMD 85 nikdy nepotkali, ale mají doma UR-4, vědí. To jedno tlačítko reset na UR-4 je přesně stejné, jako ta nízká cvakací tlačítka na PMD 85.
UR-4 viz https://cygnus.speccy.cz/popis_mhb8255.php
Didaktikům hodně moc pomáhá lehké promazání tlačítek. Didaktik M se tím prakticky přiblíží membránovkám (fakt, tlačítka kloužou naprosto hladce) a je pak na psaní podle mého názoru pohodlnější než ZX Spectrum 48k+. Didaktik Gama není o moc horší. Možná mají svůj vliv ty středy uprostřed pružinek, nevím, ale ani jedna z klávesnic nemusí bý vysloveně špatná.
promazání kláves Didaktiků viz https://egalerie.net/index.php/opravy/klavesnice-Didaktik-M
Nejlepší klávesnici mezi ZX Spectry měly stroje od Amstradu. Jednak mají tlačítka klasický klávesový tvar (Didaktik M taky), ale jsou membránové (narozdíl od Didaktiků, ty mají pozlacené plíšky) a fungují většinou hladce i bez promazání. I když i mé šedé +2 to prospělo, je to znát hlavně u velkých kláves (mezerní, shifty, enter).
Tady mám +2 klávesnici rozebranou https://egalerie.net/index.php/opravy/promaz-n-kl-vesnice-ZX-Spectrum-2
IQ151 proti čemukoli z toho byl děs a běs, prý používali tlačítka z ovládacího panelu výtahu, ale to je nejspíš jen výmysl ilustrující jak moc špatná ta klávesnice byla.
Nó, není to Merkur, ale zelený monochrom monitor NEC... někde k němu mám i schéma. PMD je připojené přes kompozitní PAL.
Ne, nemělo to Zilog Z80 na 3.5MHz, mělo to MHB8080, což je klon Intel 8080 od Tesly na pouhých 2MHz s chudší instrukční sadou a komplikovaněji organizovanou video RAM (6 bitů pixy, dva bity barvy v jednom bytu).
Pssst je remake přepsaný komplet od základů podle původní hry ze ZX Spectra, napsal ho Libor Lasota, viz https://pmd85.borik.net/wiki/PSSST
Ono těch přeportovaných her je mnohem víc, co si tak z paměti vzpomínám, tak ještě JetPac, Arkanoid, Atomix, Kvádro (podle flashové hry, na ZXS bylo napsáno pod názvem WHB), Spindizzy, Plotting, Highway Encounter, Treasure Island ... jo a taky samozřejmě Lemmings a přepis ZX ROM, takže na PMD 85 lze programovat v Sinclair BASICU
Stahujte zde https://pmd85.borik.net/wiki/Software
Koho by zajímalo, jak vypadá z PMD 85-3 barevný obraz, tak viz přiložené foto, PMD jsem měl připojené přes RGB -> VGA konvertor GBS 8220.
komplikovaněji organizovanou video RAM (6 bitů pixy, dva bity barvy v jednom bytu).
No, barvy, řekněme atributů. Standardně byl jeden bit pro jas a jeden pro blikání. Aby místo toho mohly být barvy (celé čtyři), byla potřeba úprava hardware. A to ještě není všechno: těch šestic bylo na řádek 48 (tj. 288 pixelů) a pak nevyužitých 16 bytů, aby vycházelo 64B na řádek. Považte, v té době prostě jen tak nechali celou čtvrtinu videopaměti (4 KB) ležet ladem. Našli se i drsňáci, kteří tam dokázali schovat celý program nebo jeho velkou část (IIRC třeba COPY482). :-)
Pravda, pořád zapomínám, že oficiálně "barevná" byla jen verze 3, předchozí verze 1, 2, 2B byly monochrom s jednou šedou a blikáním.
Resp. zatímco ZX Spectrum má 3 bity pro barvu podkladu, 3 bity pro barvu pixelů, jeden bit blikání a jeden bit jas, který se nevztahuje na černou, tak u PMD buď pixel chyběl, nebo měl vlastnosti definované těmi atributy. Chybějící pixel byl vždy černý.
Mimochodem, elektricky je to řešené taky zajímavě, na pětikolíku jsou vyvedené 4 signály. Kompozitní a zelená v jednom a pak červená, modrá (obě bez synchronizace) a synchronizační směs.
I verze 1 a 2 mají RGB výstupy, ale s blikáním. Verze 3 blikat neumí.
Základní barvy PMD jsou zelená, modrá, červená, purpurová (magenta), zelená proto, protože pixel je zapnutý, ale atribut pro BR je 00, červená pixel zapnutý, ale atribut BR je 01 atd... Žádná paleta.
Tj. i na barevném monitoru je základní barva zelená, nikoli bílá.
Více viz https://oldcomp.cz/viewtopic.php?f=49&t=6106&p=74622
A rozšíření ColorACE viz https://pmd85.borik.net/wiki/ColorAce
a snad dokonce byla jen černobílá?Kdepak, i cerna Gama byla barevna.
1) Záklandí omyl hodnocení Basicu je, že to nebyl primárně programovací jazyk. On je to spíše shell počítačů Sinclair. I na řadě jiných počítačů měl Basic funkci shellu spíše než programovacího jazyka.
To, co byl BASIC na těchto počítačích primárně, by se dalo dlouho a zbytečně polemizovat. Tenkrát se na takové rozlišení moc nehrálo. Bylo prostě běžné, že počítač se ovládal programovacím jazykem. To by pak bylo nutné dát do stejné kategorie neprogramovacích jazyků třeba Forth nebo Smalltalk. V ROM mohl stejně tak být jen zavaděč pro externí programy, nějaká tabulka znaků a pár rutin, případně pro uživatele vědecká kalkulačka a třeba monitor.
2) V článku je Basic Spectra dost podhodnocen, uměl toho poměrně více. Například definovat funkce i s předávanými parametry je možné pomocí slov DEF FN a používat je pomocí FN.
Funkcím je v tomto článku věnován celý odstavec, kde se hovoří i o překrývání proměnných a jejich možném rekurzivním volání.
3) Kromě toho uměl Basic volat podprogramy/funkce ve strojovém kódu pomocí klíčového slova USR. Návratová hdonota byla uložena v registru BC, mohly se používat všechny registry s výjimkou IX a IY.
Spouštění strojového kódu mi přišlo natolik samozřejmé, že jsem to nezmínil. Nicméně je pravda, že všechny BASICy to neumí.
4) Spectrum Basic používal jak celá tak reálná čísla. Čísla byla uložena buď jako celá či reálná podle hodnoty. Byla to absolutní nutnost, pokud měly cykly FOR dodržet počet opakování. Při zaokrouhlovacích chybách reálných čísel by jinak občas byl o 1 opakování cyklu méně či více - a to se na jiných osmibitech i často stávalo, že se na počet opakování cyklu FOR nedalo spolehnout.
Děkuji za doplnění. Z uživatelského hlediska se však všechna čísla tvářila jako reálná.
5) Daleko zajímavější je implementace, celý Basic je v zásadě dostupný jako podporogramy ve strojovém kódu volatelné z ROM. Ve strojovém kódu tak mohl programátor použít cokoli z Basicu, například třeba reálné výpočty ála matematický korpocesor. Nebo pracovat se streamy ála C/C++. A to nejzajímavější - bylo to možné i naopak, tedy volat z Basicu podpogramy psané ve strojovém kódu.
Myslím, že schopnost snadno používat rutiny z ROM, byl spíše vedlejší efekt rozumného návrhu, protože sami je v rámci strojového kódu v ROM potřebovali občas použít.
6) Spectrum Basic byl kódován tak, že klíčová slova byly uloženy jako jediný bajt. Tvořily vyšší polovinu ASCII tabulky.
7) Zajímavé je pojetí řetězců. Zatímco v C končí řetězce nulovým znakem, v Basicu končí řetězce nastavením nejvyššího bitu. Mimo jiné nejvyšší bit mají nastaveny všechna klíčová slova Basicu (která jsou jediným bajtem také jako znaky). To umožnilo velice efektivní ukládání programu i dat krutě šetřící pamětí, což bylo opravdu potřeba.
Viz třeba kapitoly z uváděné knihy, které se zabývají interní reprezentací programů v Sinclair BASICu.
8) Řádky programu v Basicu nemusely jít za sebou. Takže se program dělal jako řádky 10, 20, 30, ... - a byl prostor pro dopisování. Kromě toho se daly řádky v Basicu přečíslovat - třeba programem ve strojovém kódu. (Jak jsem už psal - Basic a strojový kód byl vzájemně míchatelný).
O tom, že čísla řádků nemusela tvořit souvislou sekvenci, se v článku píše. O přečíslování jako o funkci modelu 128k také. U nižších modelů se nejednalo o možnost dostupnou bez externího programu.
9) Návěští, která údajně chyběla - to jsou ty čísla řádků. Čísla řádků slouží jako návěští.
Samozřejmě...
V ROM mohl stejně tak být jen zavaděč pro externí programy, nějaká tabulka znaků a pár rutin, případně pro uživatele vědecká kalkulačka a třeba monitor.Viz třeba výše zmíněné PMD-85 Počítač byl dost často vybavený ROM modulem s jazykem BASIC-G, ale stejně tak tam mohl být programovací jazyk Karel, Pascal, nebo něco úplně jiného. Počítač bez ROM modulu měl k dispozici jen primitivní monitor, kde byly k dispozici jen základní příkazy - vzpomínám si na MGLD a MGSV pro load a save programů ve strojáku, DUMP adresa pro výpis obsahu RAM v HEXu a JUMP adresa pro spuštění programu ve strojáku. Myslím, že to, že BASIC na ZX Spectru funguje dobře jako programovací jazyk i shell v jednom je dáno především nemožností BASIC odstránkovat a spustit (neupravený) počítač bez něj. A vrámci možností to vyřešili docela elegantně. Ad číslování - nemyslím, že by to byl problém. Ano, občas se mi stalo, že jsem vyčerpal těch 9 řádků mezi násobky 10, někdy jsem postrádal funkci pro automatické přečíslování (některé BASICy měly příkaz RENUM), ale když si to člověk předem důkladně rozmyslel, tak to problém nebyl, to spíš došla RAM jako taková než čísla řádků. Ukončování řetězců bitem 7 je docela běžné i ve strojáku, pokud nepotřebujeme znaky z horní půlky tabulky (texty v ASCII). V každém řetězci se tím ušetřil jeden byte a detekce byla triviální.
4) Spectrum Basic používal jak celá tak reálná čísla. Čísla byla uložena buď jako celá či reálná podle hodnoty. Byla to absolutní nutnost, pokud měly cykly FOR dodržet počet opakování. Při zaokrouhlovacích chybách reálných čísel by jinak občas byl o 1 opakování cyklu méně či více - a to se na jiných osmibitech i často stávalo, že se na počet opakování cyklu FOR nedalo spolehnout.Přeci jen to jen pár let, co jsem na Spectru programoval, tak jste mne málem napálil. Ale letmý pohled do dumpu ROMky Vás usvědčuje :) Nikdy tomu tak nebylo, spektrácký Basic používá na všechno 5-bytové floaty, které mají pro běžné FOR cykly dostatek přesnosti mantisy, aby se žádné zaokrouhlovací chyby neprojevily.
Ano, je pravda, že kabel protáhli chladičem i u Didaktiku Gama a to určitě není dobrý nápad - viz přiložené foto (našel jsem ve svém archivu). Zdroj k Mku nemám, napájím ho jiným zdrojem.
Ale na druhou stranu, ještě jsem nezažil, že by se kabel přepálil. Vyfocený zdroj byl určitě v provozu několik let skoro nonstop (hádám tak 4 roky a nejmíň 8 hodin denně). Ani další Gamy, co mám, nevykazují potíže se zdrojem. Nejspíš souběh více závad?
Btw... nebylo tam +12V, ale nestabilizovaných cca 19 - 21V, ze kterých se stabilizovalo 12V až v počítači.
Sir Clive dělal zas jiné chyby. V ZX Spectrech dost často odcházejí tranzistory ZXT650 (TR4) v měniči +12V/-5V a absence těchto dvou napětí může vést k poškození RAM 4116 (VRAM). Nemluvě o tom, že Gumáky se taky dost přehřívají, jen s tím rozdílem, že mají stabilizátor 7805 uvnitř pod klávesnicí. Nápad umístit ho mimo počítač není zas tak moc špatný.
Záklandí omyl hodnocení Basicu je, že to nebyl primárně programovací jazyk. On je to spíše shell počítačů Sinclair. I na řadě jiných počítačů měl Basic funkci shellu spíše než programovacího jazykaTo se může zdát, protože veškeré příkazy jsou interpretem ihned vykonávané, ale kdysi se podařilo tatovi koupit od Proximy nějaké programy. Pamatuju se že tam byl kompilátor BASICu. Vypadalo to jako klasický interpret jen s tím rozdílem že výsledek se uložil na kazetu jako CODE blok. A taky v tom že to bylo oproti interpretu šíleně rychlé. Takže prostě instrukce pro začátečníky. Naprosto ideální.
Proměnné nebylo potřeba předem deklarovat, což byl častý zdroj chyb.Není pravda. Proměnné bylo potřeba definovat, pokus o použití neinicializované proměnné vedl na chybu "2 Variable not found".
Jinak co se týče výrobního družstva Didaktik vo Skalici, pro zajímavost dodám že stojí do dnešního dne (kupodivu tam co stávalo). Akorát s původním zaměřením nemá už nic společného. Vím to protože do Skalice sem tam umím zajet.
Ač byl BASIC tenkrát široce prezentován jako programovací jazyk pro začátečníky, z dnešního pohledu tak příliš nepůsobí. Ano, jednoduché věci, především základní výpočty, v něm bylo možné dělat docela jednoduše, ale u rozsáhlejších programů jste museli bojovat s velice nepřehlednou strukturou, která neumožňovala ani oddělení částí programu prázdnými řádky, natož odsazení. Absence návěstí a omezení délky jmen funkcí čitelnosti také rozhodně nepřidalo. Když se k tomu připočítá malý počet znaků na obrazovce, absence skutečného zvýrazňování syntaxe, lokálních proměnných, pořádných funkcí a procedur a podobně, nevychází z toho BASIC vůbec dobře. V mnoha ohledech si člověk při přechodu na assembler připadal jako ve vyšším programovacím jazyce. Svoji pošramocenou pověst si BASIC právem zaslouží a člověku nezbývá než litovat, že tenkrát výrobci domácích mikropočítačů nesáhli po jiné lepší alternativě.Haha. A teď si namlátíme milé děti (a to vyloženě protože to zní jako by je jednotlivé instrukce mlátil do paměti kladivem na kovadlině, minimálně patro se při tom třepat musí) do RAMky BASIC od Gejtse a Allena, konkrétně tedy 4k BASIC: Jak zní Sinclair BASIC včil?
Jak zní Sinclair BASIC včil?Jako vysoce uživatelsky přívětivý
A já přitom měl obavy, abych sousedy nerušil provozem jehličkové tiskárny... :/To šasi je tak robustní protože to bude nejspíš základ pro něco jiného (tipuju řezačku), že to umí tisknout byla první (a asi taky poslední) varianta. Ale jinak je to úplně stejné jako splašený hřebík (pakl průklepáku se mi ještě někde bude válet). Jinak cena 4990Kčs je naprosto vycucaná z prstu, protože pár stováku k tomu a stálo to jako fungl nová dvourychlostní Babetta. Kdo to vyráběl?
Však taky lidi, alespoň co vím, kupovali častěji BT-100, která stála tuším okolo 1400Kčs a později cca 700Kčs (myslím, že jsme ji tehdy kupovali za tolik), BT-100 dokonce tiskla lépe a tišeji, byť extrémně pomalu.
Výrobce viz foto štítku na mém webu hhttps://cygnus.speccy.cz/popis_printer-gamacentrum01.php - národní/státní podnik GAMA, České Budějovice, závod 5, Milevsko - datum výroby 24.1.1989, tj. v té době za plnou cenu nejspíš zcela neprodejné. I já svůj kus od někoho dostal (takřka nepoužitý v originál obalu).
Tiskárna k mikropočítačům G - Centrum 01 je určena k bodovému zobrazování párem spřažených hlaviček na jednom mikrořádku. Zobrazení bodu je způsobeno obtiskem uhlového papíru při úderu jehly.
Dnes už naštěstí můžeme ze ZX Spectra dávno tisknout i na inkoustech a laserovkách, alespoň na těch starých s paralelním portem a jazykem PCL https://cygnus.speccy.cz/popis_printer-deskjet1.php... i z BASICU (abychom neutíkali od tématu příliš)
Jako vysoce uživatelsky přívětivýZeptám se jinak: Existovalo v éře 8-bitů něco uživatelsky přívětivějšího (klidně v podobě alternativního ROMu či nahratelného programu) než originální BASIC v ROMce Spektra resp. Didaktiku? Je fakt že přehled o ostatních variantách moc nemám.
co me zejmena zarazilo - jak jednoduchy ten BASIC bylOno to opravdu nic moc sloziteho nebylo, v podstate se jednalo o spoustec predchystanych rutin.
Coz je zatracene malicko ve srovnani s jakymkoli dnesnim (prakticky pouzitelnym) programovacim jazykem.Skoda ze takovy Forth uplne zapadl, pricemz jeho implementace je (co do narocnosti) srovnatelna s BASICem, pricemz vyjadrovaci prostredky jsou mnohem lepsi.
Tehdy mi to (jako diteti) pripadalo slozite.....ta neotesana jednoduchost a primocarost BASICu byla asi nakonec jeho killer feature. Sice se pak clovek musel odnaucovat spoustu zlozvyku, ale v konecnem dusledku to pritahlo k pocitacum nezanedbatelne mnozstvi lidi.
Ono to opravdu nic moc sloziteho nebylo, v podstate se jednalo o spoustec predchystanych rutin.To ja bych zase nerekl, ze ten BASIC je az tak trivialni, prece jen se v nem dalo napsat (a bylo napsano) dost slusnych aplikaci.
Skoda ze takovy Forth uplne zapadl, pricemz jeho implementace je (co do narocnosti) srovnatelna s BASICem, pricemz vyjadrovaci prostredky jsou mnohem lepsi.To mas naprostou pravdu. S Forthem jsem si hral v Minecraftu (RedPower 2 mod), a moc se mi to libilo, ale bohuzel vetsina lidi proste chce BASIC (nebo aspon Luu), buhviproc. Takze interpret BASICu pro RP2 byl nakonec taky popularnejsi nez originalni interpret Forthu. Navic kdyby v ZX ROM byl Forth, dokazala by toho tak 2-4x vic (podle navrhu).
...ta neotesana jednoduchost a primocarost BASICu byla asi nakonec jeho killer feature.Rekl bych, ze to je prave to, co si nechceme priznat. I Python, ktery tomu BASICu asi dnes ma nejbliz, je dost slozity jazyk.
... a co me zejmena zarazilo - jak jednoduchy ten BASIC byl. Referencni dokumentace ma 22 stranek. Coz je zatracene malicko ve srovnani s jakymkoli dnesnim (prakticky pouzitelnym) programovacim jazykem.Ani ne. Tohle jsem slyšel snad na všechny jazyky, včetně Lispu, Smalltaku, Selfu, ale i Pythonu. Například Smalltalk se slavně vejde na pohlednici. K čemu ti to ale je, když pak stejně musíš nastudovat tisíc knihoven? Nebo lisp. Celý interpreter i s makry se ti vejde to 1000 řádek C kódu. Syntaxe je doslova na dva řádky vysvětlování. Dělá to pak jazyk a programování v něm jednoduchým? Vůbec.
nejdriv musite vysvetlit, jak doinstalovat python-tkRovněž je potřeba počítač vybalit z krabice, zapojit ho a nainstalovat operační systém a ovladače.
a nasledne vysvetlit, co jsou to modulyProč je potřeba vysvětlovat moduly, ale vysvětlovat built-in funkce BASICu problém není?
Proč je potřeba vysvětlovat moduly, ale vysvětlovat built-in funkce BASICu problém není?Vysvetlovat built-in funkce se musi jak u pythonu tak u basicu, vysvetlovat moduly je neco, co se musi delat u pythonu navic. Ze stejneho duvodu je na vyuku nevhodna napr. Java, kde se musi zacit prvni program "public class HelloWorld { public static void main(String[] args) {", coz pro zacatecnika znamena asi neco jako "abrakadabra pocitaci, spust muj program".
Uznávám, že v tomto ohledu je vstupní bariéra mírně vyššíVstupni bariera je obrovska. Byvaly spoluzak se prihlasil na pocitacovy krouzek v domeni, ze se tam hrajou hry, a misto toho na druhe hodine uz kreslili trojuhelniky. Dovedete si predstavit, ze dostanete skupinu deti, ktere nevedi, co je soubor, jak pracovat s okny atd. a po druhe hodine uz budete prgramovat kreslici programy?
Ze stejneho duvodu je na vyuku nevhodna napr. Java, kde se musi zacit prvni program "public class HelloWorld { public static void main(String[] args) {", coz pro zacatecnika znamena asi neco jako "abrakadabra pocitaci, spust muj program".
Ono takové první setkání s printf()
(a pochopitelně scanf()
) může být taky celkem traumatizující zážitek.
vysvetlovat moduly je neco, co se musi delat u pythonu navic.No, dobře, v tomhle konkrétním případě. Stejně tak si ale můžu vymyslet nějaký, kde na tom bude BASIC hůř, že. Například vytvoř asociativní pole (dictionary), či stáhni stránku z internetu a zkontroluj, jestli v ní není substring. Nebo něco, kde na tom budou oba stejně blbě, například nakresli rotující 3D krychli.
Byvaly spoluzak se prihlasil na pocitacovy krouzek v domeni, ze se tam hrajou hry, a misto toho na druhe hodine uz kreslili trojuhelniky. Dovedete si predstavit, ze dostanete skupinu deti, ktere nevedi, co je soubor, jak pracovat s okny atd. a po druhe hodine uz budete prgramovat kreslici programy?To zní super, dokud si neuvědomíš, že ten spolužák stejně jako v druhém případě nevěděl nic o souborech, práci s okny a ničem, dokázal jen nakreslit trojuhelník, což je znalost sice silně poetická, ale reálně úplně k ničemu. Ve chvíli, kdy bys vysvětloval třeba jak uložit soubor na nějakém osmibitu, nebo na současných počítačích, tak hádej kde bude lehčí pracovat se soubory.
Vstupni bariera je obrovska.Tohle uznávám, a myslím si, že je to špatně. Problém ale není technického rázu, nýbrž rázu fundamentální filosofie. V dnešní době se programování mezi běžnými lidmi bere jako něco komplikovaného a přežitého, hlavně protože to vyžaduje časovou investici a vloženou námahu a správný interface má být přece intuitivní a okamžitě použitelný, aby to dokázal použít i úplný dement. Dřív mi přišlo, že počítače se braly víc jako pomocník člověka, než jako spotřební elektronika. Mělo to být rozšíření vlastní mysli, které jsi musel ovládnout, stejně jako musíš ovládnout například matematiku. Od uživatelů se předpokládala jistá gramotnost. Tomu byl trh přizpůsobený, například tím že počítače bootovaly do programovacího jazyka. Ukázalo se ovšem, že většina trhu tahle nesmýšlí a peníze nejlíp vyděláš, pokud je prodáš všem s příslibem, že do toho lidi nemusí investovat žádný čas a námahu. Osobně mi na tom přijde škoda, že se to bere často jako buď a nebo. I když si člověk stáhne něco relativně technicky specifického, jako třeba linuxovou distribuci, stejně se všude počítá s tím, že jí bude používat jako uživatel, ne jako tvůrce, pro kterého je počítač médium, rozšíření mysli (viz původní Engelbartův sen).
Dovedete si predstavit, ze dostanete skupinu deti, ktere nevedi, co je soubor, jak pracovat s okny atd. a po druhe hodine uz budete prgramovat kreslici programy?Ano, samozřejmě. Naučil bych je ale jen to, co je naučili na těch osmibitech. Musel bych tedy investovat nějaký čas do přípravy, abych našel nebo vytvořil co nejjednodušší prostředí. Vzhledem k tomu, že na osmibitech byly dedikované klávesy na zadávání klíčových slov, možná bych musel nechat vyrobit na zakázku speciální klávesnici, popř. sehnat klávesnici s multifunkčními klávesami, které bych přebindoval a opatřil je patřičnými nálepkami. To zadání je ale nesmyslné, jelikož dnes reálně děti samozřejmě umí nejen pracovat s okny, ale umí toho daleko víc, protože s tou technologií vyrůstají. Omezovat se na faktickou emulaci osmibitů by dávalo smysl leda u dětí z nejnižších sociálních skupin, které s počítačem dosud nepřišly do styku. U těch ostatních nelze předpokládat, že nebudou vědět „jak pracovat s okny“ a nic nebrání tomu používat rovnou něco rozumnějšího. Nemyslím si, že mezi mnou uvedeným příkladem programu v Pythonu (za předpokladu, že bych připravil takový modul, což je ovšem záležitost jednoho odpoledne) a tím BASICem na osmibitu by byl v tomto ohledu podstatný rozdíl. Dále existuje například jazyk Karel, pro který existuje i čistě webové prostředí. Nelíbí se mi ani ten jazyk, ani toto prostředí, ale není ostatně problém vytvořit něco lepšího.
Vstupni bariera je obrovska.Ano, ale na druhou stranu bych řekl, že 95 % dětí ji zdolalo (s okny pracovat umí).
Dovedete si predstavit, ze dostanete skupinu deti, ktere nevedi, co je soubor, jak pracovat s okny atd. a po druhe hodine uz budete prgramovat kreslici programy?Můžeš jim ten IPython hodit na fullscreen a prohlásit že sedí u toho osmibitu?
Viz https://www.youtube.com/watch?v=_9im5fro1rgJá měl doma Atari 800XE, takže vím jak to fungovalo.
Lišit se to bude minimálně tím, že ten Python s želví grafikou nenacpeš do 8 KiB ROMTo jestli se to vejde do 8KiB ROM zajímá dneska v podstatě už jen pár fetišistů adorujících některé aspekty minulosti, které by jim paradoxně nejspíš v té době přišlo naprosto smysluplné odbourat, kdyby to tenkrát šlo. Mimochodem existuje micropython, který ale pravda vyžaduje 16kB paměti.![]()
import grafika # kde načtením modulu se rovnou vytvoří okno o určitém rozlišení atp. import time grafika.barva(grafika.bila) grafika.primka(100, 100, 200, 200) time.sleep(3) grafika.vycistit() grafika.barva(grafika.cervena) grafika.primka(100, 100, 200, 200)Dokonce by šlo ještě upravit ty importy tak, aby se ušetřilo psaní a šlo rovnou psát třeba
barva(bila)
.
Nic nebrání tomu takový modul dnes poskytnout v PythonuStejne tak nic nebranilo poskytnout neco navic pred X lety. Bezne se prodavali cartridge, kde byly ruzne pokrocile rutiny implementovane v ROM a uzivatel je mohl volat. O tom se tu ale nebavime. Bavime se tu o tom, jak jednoduche bylo driv neco naprogramovat, clovek si prinesl pocitac z obchodu, otevrel si knizku a programoval. Dnes si musite osvojit spoustu znalosti, nez se vubec k samotnemu programovani dostanete.
clovek si prinesl pocitac z obchodu, otevrel si knizku a programoval. Dnes si musite osvojit spoustu znalosti, nez se vubec k samotnemu programovani dostanete.Jednak si myslím, že to není blocker, protože ty znalosti si zjevně skoro všichni osvojit dokázali i z jiného důvodu. A jednak si myslím, že to není tak úplně pravda, pokud se tedy nebavíme o počítačích s Windows -- v normálních systémech je interpret nějakého skriptovacího jazyka (s možnostmi a snadností použití daleko překonávajícího osmibity -- což je samozřejmě dáno 100000x vyšším dostupným výkonem a pamětí) dostupný na jeden příkaz. (a konec konců i v těch windows není instalace Pythonu něco, co by lama nedala)
Většina děcek si s tím LOAD vystačila, jen ti zvídavější se dostali dál.Jen dodám že do toho jdou cpát Cartridge alias Atari či Famicom (později diskety, CD alias Playstation). Jenže nevím, i když to šlo, málo lidí se vyhnulo aspoň mírné znalosti programování v BASICu na těch 8-bitech. Různí bastliči, to už je kapitola sama pro sebe. Kdežto dneska v době různých AppStoů je to přitom přesně naopak.
Možná za to může moje sociální bublinaTakovou závidím. Tady frčí drogy, tráva, alkohol.
Možná za to může moje sociální bublina, ale nepřijde mi, že by se procento dětí co se věnují technice na (na tuto dobu) nižší úrovni je menší než dřív.To asi jo. To bude konstantní. Zas na druhou stranu díky BASICu se programováni dotkli i lidi kteří neměli úmysl věnovat se technice (jde původně o jazyk určený "to enable students in fields other than science and mathematics to use computers").
Všechno je dostupnější a mají na hraní si s tím čas, kterého já už po práci tolik nemámChce to jen najít si koníček trošku dál od zaměření oboru. Toť vše.
grafika
v podstatě existuje a jmenuje se PyGame.
ANSII BASIC pokud vím ...WTF, jaky ANSI BASIC? V te dobe pouzival kazdy BASIC jaky byl k dispozici a nejaka standardizovana varianta byla vsem ukradena. Vyrobcum i uzivatelum.
PLOT neměl a u dost počítačů se muselo pro něco podobného sahat k assembleru, ale možná se pletu :)Nekde byl PLOT, nekde byl treba LINE, ale rekl bych, ze pokud hardware umoznoval pracovat s grafikou na urovni jednotlivych pixelu, BASIC to podporoval taky. Slusi se dodat, ze nekde to z hardwarovych duvodu neslo a tak se pouzival trik s premapovanim jednotlivych znaku (symbolu) tak, aby to odpovidalo vykreslovanym grafickym objektum.
Nedílnou součástí programování tehdy byla tužka a papír položené u počítače, kde si člověk psal poznámky: na kterém čísle - resp. rozsahu čísel - je jaký rutina, kam uložit která DATA, který název pole co obsahuje atd.
A milimetrák na grafiku. :-)
Pohodlné grafické editory tu nebyly odjakživa. Na Spectru jsem sice později na nějaký narazil (jméno už si nevzpomenu), ale ovládání z klávesnice (myš neměl skoro nikdo) stejně nebylo nic příjemného.
Takže když chtěl člověk nějakého panáčka nebo jiný obrázek, tak se to prostě nakreslilo na milimetrový papír a z něj už s trochou praxe nebyl problém odečítat rovnou hodnoty jednotlivých bytů.