Programovací jazyk FORTH na osmibitových mikropočítačích Atari

Projekt Atari perex.
Autor: Michal Tauchman, podle licence: CC BY-SA 4.0
Projekt Atari perex.
V seriálu o vývoji pro Atari jsme využili assembler, překladače C a jazyka Action. Existuje však programovací jazyk ležící mimo tyto tři skupiny a současně spadá do všech tří skupin: FORTH.

V seriálu o vývoji her i dalších aplikací pro slavné osmibitové domácí mikropočítače Atari jsme primárně využívali assembler mikroprocesoru MOS 6502. Poté jsme se seznámili s několika vyššími programovacími jazyky. Buď se jednalo o překladače spouštěné přímo na Atari (do této kategorie spadají především Action!, Deep Blue C, ale i Kyan Pascal), cross překladače generující strojový kód na PC (CC65) nebo o více či méně výkonné interpretry (Atari BASIC, BASIC A+, Atari Microsoft BASIC, Turbo BASIC XL) či programovací jazyky překládané do bajtkódu (minule popsaný Fast BASIC).

Co se dozvíte v článku
  1. Vznik programovacího jazyka FORTH
  2. FORTH a další programovací jazyky
  3. Zásobníkové programovací jazyky a RPN
  4. Infixová vs. postfixová notace
  5. Přednosti a zápory RPN oproti infixové notaci
  6. Výpis numerické hodnoty uložené na vrcholu zásobníku operandů
  7. Základní operace prováděné s hodnotami uloženými na zásobníku operandů
  8. Slovo SWAP
  9. Slovo DUP
  10. Slovo DROP
  11. Slovo OVER
  12. Slovo ROT
  13. Definice nových slov
  14. Příklad definice a otestování nového slova ve fig-FORTHu
  15. Programové smyčky
  16. Příklad realizace programové smyčky ve fig-FORTHu
  17. Další typy programových smyček
  18. Repositář s demonstračními příklady
  19. Odkazy na Internetu

Z pohledu úrovně abstrakce spadají tyto programovací jazyky do tří skupin: assemblery, překladače a interpretry s volnějším zápisem kódu. A každá skupina má své přednosti, ale i zápory: assembler je nejtěžší na zápis i ladění, překladače obecně negenerují optimální kód a interpretry sice může používat téměř každý, ale jsou velmi pomalé. Ovšem existuje programovací jazyk, který do jisté míry leží mimo tyto tři skupiny a současně spadá do všech tří skupin. Jedná se o Forth resp. původně psaný FORTH.

Úvodní obrazovka fig-FORTHu (kazetová verze).

Obrázek 1: Úvodní obrazovka fig-FORTHu (kazetová verze) ve variantě pro osmibitové mikropočítače Atari.

Autor: tisnik, podle licence: Rights Managed

Forth, který byl na osmibitových Atari reprezentován především projektem fig-FORTH, je programovací jazyk, který byl – alespoň podle mého názoru – pravděpodobně nejlepším a nejvíce vyhovujícím programovacím jazykem pro „malé“ osmibitové domácí mikropočítače vůbec – a to, že se více neprosadil, byla možná škoda (na druhou stranu se jedná o poměrně „mimozemský“ jazyk, takže jeho prosazení do mainstreamu by bylo problematické v každém případě). Mezi jeho přednosti patří interaktivita (v tomto ohledu se podobá klasickým interpretrům) a současně i možnost zápisu relativně rychlého nízkoúrovňového kódu. Ve fig-FORTHu je navíc možné zapisovat i instrukce mikroprocesoru MOS 6502, takže části programu mohou být v případě potřeby optimalizovány (ovšem jak uvidíme dále, není to zcela jednoduché, protože i tyto části programu je nutné psát „forthovským“ stylem).

Uložení hodnoty na zásobník operandů, tisk hodnoty přečtené ze zásobníku operandů.

Obrázek 2: Interaktivní práce ve FORTHu. Uložení hodnoty na zásobník operandů, tisk hodnoty přečtené ze zásobníku operandů. Podrobnosti budou vysvětleny v dalším textu.

Autor: tisnik, podle licence: Rights Managed

Vznik programovacího jazyka FORTH

Programovacímu jazyku Forth jsme se již na stránkách Rootu kdysi věnovali v samostatném seriálu, ovšem neuškodí krátká rekapitulace. Tento jazyk, který je založený na konceptu dvou zásobníků (jeden je používaný pro operandy a druhý pro uložení návratových adres volajících funkcí), je známý mj. i tím, že jeho implementaci lze v nejjednodušší variantě provést v několika stovkách bajtů paměti, tj. přibližně s 300 až 500 strojovými instrukcemi a navíc se některé dialekty Forthu provozovaly bez použití operačního systému (Forthovské jazyky byly součástí i několika BIOSů). V takto malém počtu instrukcí bude složité uložit jakákoli nebezpečná zadní vrátka. Na druhou stranu je nutné poznamenat, že Forth tvoří svůj velmi zajímavý, ale dosti izolovaný svět, takže v něm pravděpodobně nikdy nevznikne překladač C ani dalšího vyššího programovacího jazyka (typicky se ovšem Forth spojuje s assemblerem, což je ostatně i logičtější).

Uložení dvou hodnot na zásobník operandů, jejich součet a tisk výsledku.

Obrázek 3: Uložení dvou hodnot na zásobník operandů, jejich součet a tisk výsledku.

Autor: tisnik, podle licence: Rights Managed

V roce 1976 byla firma FORTH Inc. (jejímž zakladatelem byl Chuck Moore, tvůrce jazyka FORTH) požádána, aby Forth portovala na mikroprocesor CDP-1802 (mimochodem, tento procesor, určený pro vojenské a kosmické aplikace, měl velmi zajímavý instrukční soubor – viz například stránku Great Microprocessors of the Past and Present popř. článek RCA 1802: poslední mohykán osmibitové éry mikroprocesorů). Nový produkt byl nazván microFORTH a v dalších letech byl portován na celou skupinu vzájemně odlišných mikroprocesorů, zejména Intel 8080, Motorola 6800, MOS 6502 (což nás zajímá nejvíce) a Zilog Z80. Systém microFORTH byl s úspěchem použit pro vytváření průmyslových a řídicích aplikací, které využívaly právě tyto osmibitové mikroprocesory. Mnohé tyto systémy prý pracují až do dnešní doby.

Všechny výše zmíněné mikroprocesory jsou osmibitové a v průmyslových aplikacích byly osazeny operační pamětí o typické kapacitě 16 kB. Tyto aplikace byly spouštěny většinou z pamětí EPROM nebo PROM, protože disky se používaly pouze v minipočítačích. Ostatní firmy pro tyto mikroprocesory dodávaly buď pouze assembler, nebo jazyk PL/M (raději na něj zapomeňte), ostatní jazyky byly buď příliš náročné na systémové prostředky (C, Pascal), nebo nevhodné pro programování složitějších aplikací (BASIC). V této „konkurenci“ je jasné, že se Forth velmi dobře prosazoval, zejména jako náhrada assembleru.

Programovací jazyk Forth byl použit i na osmibitových domácích počítačích. Zde se významně projevila schopnost Forthu generovat krátký kód, který bylo možné zpracovat velmi jednoduchým interpreterem. Ten byl dlouhý pouze několik strojových instrukcí. Jednou z prvních aplikací Forthu v oblasti osmibitových počítačů byly některé systémové rutiny uložené v paměti ROM počítače ZX-81. Jednalo se o operace s hodnotami uloženými v pohyblivé řádové čárce. Pomocí Forthu byl vytvořen velmi krátký kód hojně používající smyčky a iterace. Běh rutin byl díky tomu pomalý, proto byl v dalších počítačích firmy Sinclair Research použit kód psaný přímo v assembleru, který však byl delší.

Poznámka: nejednalo se ovšem o plnohodnotný FORTH. Ten byl dostupný jako samostatný SW: ZX-FORTH a Tree-Forth.

Osmibitové počítače, a to včetně osmibitových domácích mikropočítačů Atari, ještě v době svého největšího rozmachu zažily vznik oblíbeného fig FORTHU (byl odvozen od Forthu-78 a taktéž od výše zmíněného microFORTHu), jehož autoři si kladli za cíl vytvořit standard mezi různými dialekty Forthu i mezi různými mikroprocesorovými architekturami (například pro Intel 8080). A právě fig-FORTHem se budeme ve stručnosti zabývat v této kapitole. fig-FORTH byl portován i na mikroprocesory MOS 6502, takže další přenos na počítače Atari (ale i na BBC Micro, či Commodore C64) byl relativně snadnou záležitostí.

fig-FORTH byl na Atari vybaven editorem jednotlivých obrazovek (screen), který se ovládal podobně jako Vi či spíše Ed: zadávalo se vždy číslo řádku a operace, která se má provést. Podporována byla všechna slova (v jiných programovacích jazycích funkce) FIG Forthu a díky možnosti přímého přístupu do paměti bylo možné manipulovat s čipy ANTIC, GTIA i POKEY a využít tak i multimediálních možností počítačů Atari. Ostatně prakticky celý manuál FIG Forthu se skládá z popisu jednotlivých slov.

Poznámka: zajímavé je, že FIG Forth dokázal využít myš z Atari ST připojenou k osmibitovému Atari přes druhý joystickový port.
Načtení kódu editoru, který začíná na obrazovce 27.

Obrázek 4: Načtení kódu editoru, který začíná na obrazovce 27.

Autor: tisnik, podle licence: Rights Managed

FORTH a další programovací jazyky

Klasické jazyky, které leží v céčkovské (resp. přesněji řečeno v Algolské) generační větvi, se vyznačují tím, že striktně oddělují výrazy a příkazy. Funkce jsou také považovány za něco odlišného od datových typů. V LISPovských programovacích jazycích (sem spadá Clojure) jsou naopak výrazy, příkazy a funkce z hlediska konstrukce totožné. Funkce jsou totiž považovány za běžný datový typ (datové typy jsou samozřejmě v LISPovských jazycích používány, ale odlišným způsobem: proměnná nemá typ, ale hodnota ano. Ve skutečnosti je interně každá proměnná pouze referencí, což zjednodušuje práci s pamětí).

Forth se v některých svých vlastnostech i původem přibližuje programovacímu jazyku Go. Oba dva jazyky byly vytvořeny pro praktické použití, proto také jejich návrh není zdaleka tak „čistý“, jako je tomu u jazyků vytvořených v akademických institucích, jakými jsou například Haskell, LISP, Pascal nebo jeho předchůdce Algol. To je v některých ohledech výhodné (možnost vytváření kompaktních a elegantních algoritmů), ale při programování komplikovanějších a rozsáhlejších systémů to může přinášet praktické potíže.

Forth však nebyl vytvořen s ohledem na to, aby napravil chyby či nedostatky některého jiného programovacího jazyka, ale aby dovoloval psát kompaktní a snadno odladitelné programy. Z minulosti známe celou řadu takových „upgrade“ programovacích jazyků, například Algol->Pascal, C->C++, C+±>Java nebo C->C# (hmm, možná by sem patřil i Rust). Forth je prostě odlišný, což je z hlediska programátora, který přechází z jiného jazyka, nevýhodné, protože se musí naučit přemýšlet o výstavbě svých programů dosti odlišným způsobem.

Mezi největší nevýhody Forthu patří z tohoto hlediska postfixová notace zápisu matematických operací a řídicích příkazů, která mnoha programátorům zpočátku vadí. Stejnou notaci však používá i PostScript (který ostatně z Forthu vychází), takže jednou naučené zvyky je možné uplatnit i v oblasti DTP apod. Druhou nevýhodou je, že za Forthem nestála a dosud nestojí žádná opravdu silná firma, která by ho aktivně propagovala. Open source komunita je orientovaná spíše do oblasti serverů a výkonných osobních počítačů, Forth je však vhodný zejména pro embedded systémy, PDA, mobilní telefony apod. (a z tohoto důvodu našel své místo i na domácích osmibitových mikropočítačích).

Zásobníkové programovací jazyky a RPN

If you're a frequent calculator user, you owe it to yourself to investigate the advantages of RPN. RPN stands for Reverse Polish Notation. Reverse Polish Notation was developed in 1920 by Jan Lukasiewicz as a way to write a mathematical expression without using parentheses and brackets. Hewlett-Packard Co., realizing that Lukasiewicz's method was superior to standard algebraic expressions when using calculators and computers, adapted RPN for its first hand-held scientific calculator, the HP35, in 1972.
Hewlett-Packard Development Company The RPN Method: An Overview and History

Programovací jazyk Forth, ale například i programovací jazyky Factor a Joy, jsou založeny na použití dvou zásobníků. První z těchto zásobníků se nazývá zásobník operandů (operand stack), druhý zásobník návratových adres (return stack). Většina matematických operací je prováděna buď s jedním operandem (uloženým na vrcholu zásobníku operandů, což je místo označované zkratkou TOS neboli Top Of Stack) nebo s dvojicí operandů (první je uložený v TOS, druhý těsně pod prvním operandem). Funkce zásobníku návratových adres je zřejmá – obsahuje adresy, na které se má řízení programu vrátit při opuštění právě prováděné funkce (a jak uvidíme dále, ukládají se sem i počitadla smyček atd.).

Poznámka: funkce jsou v programovacích jazycích Forth i Factor/Joy označovány termínem slova (words), protože se při jejich definici ani volání nemusí zapisovat jejich parametry, neboť ty jsou vždy uloženy na zásobníku operandů, odkud si je volaná funkce (slovo) může přečíst a následně zpracovat. Zásobník operandů je taktéž použit pro uložení návratových hodnot, kterých může být více (nejenom jedna návratová hodnota, jak je tomu u většiny ostatních programovacích jazyků).
Zásobník je struktura typu LIFO, což je patrné z toho, že nejdříve je vypsána naposledy uložená hodnota.

Obrázek 5: Zásobník je struktura typu LIFO, což je patrné z toho, že nejdříve je vypsána naposledy uložená hodnota.

Autor: tisnik, podle licence: Rights Managed

Infixová vs. postfixová notace

Výše zmíněné programovací jazyky taktéž používají prakticky totožnou syntaxi pro vytváření nových slov (funkcí) i postfixovou notaci (RPN – Reverse Polish Notation) pro zápis matematických a logických výrazů.

Už na základní škole se však každý člověk učí infixovou notaci zápisu, ve které se operátory zapisují mezi operandy. Vzhledem k prioritě operátorů je však nutné v infixové notaci používat závorky. Rozdíl mezi následujícími dvěma výrazy uvedenými v infixové notaci je snad zřejmý:

a+b*c
(a+b)*c

Při použití postfixové notace nejsou závorky zapotřebí, protože se priorita operací vyjadřuje přímo posloupností operátorů. Výše uvedené výrazy lze tedy do postfixové notace přepsat následovně:

a b c * +   nebo též   b c * a +
a b + c *   nebo též   c a b + *
Poznámka: povšimněte si, že u výrazů napsaných na levé straně se oproti infixové notaci nemění pořadí operátorů.

Následuje několik příkladů zápisu aritmetických výrazů v postfixové notaci, jenž je oběma jazyky používána (a nejenom jimi – viz například tradiční prastará a stále existující a využívaná Unixová utilita dc nebo jazyk pro popis tiskových stran PostScript):

Zápis výrazu v RPN Infixový ekvivalent Výsledek
1 2 + 1 + 2 3
1 2 3 * – 1 – 2 * 3 –5
1 2 * 3 – 1 * 2 – 3 –1
1 2 + 3 4 + * (1 + 2) * (3 + 4) 21
4 3 2 1 + + * (1 + 2 + 3) * 4 24

Otestujme si RPN zápis ve fig-FORThu (výsledky jsem obarvil v grafickém editoru, aby se v textu neztratily):

Interaktivní výpočty založené na RPN.

Obrázek 6: Interaktivní výpočty založené na RPN.

Autor: tisnik, podle licence: Rights Managed

Přednosti a zápory RPN oproti infixové notaci

Jaké jsou však výhody postfixového zápisu výrazů oproti zápisu infixovému? Mezi základní přednost patří absence závorek, pomocí nichž se v infixové notaci mění priority operací (a které zde hrají nezastupitelnou roli). Priorita je totiž v postfixové notaci velmi intuitivně určena pozicí operátoru či funkce ve výrazu.

Mezi druhou výhodu patří, možná poněkud překvapivě, konzistence zápisu. Ve skutečnosti se v běžně používané infixové notaci zapisují pouze některé základní matematické operace, mezi než patří součet, součin, rozdíl a podíl. Další operace se zapisují pomocí funkcí v de facto prefixové notaci (například sinus, odmocnina, logaritmus, minimum) a některé dokonce v notaci postfixové (například faktoriál).

S využitím postfixové notace je možné zapisovat všechny operace i funkce, dokonce ani nezáleží na počtu operandů (stírá se rozdíl mezi unárními, binárními, ternárními apod. operacemi). Ve skutečnosti není v postfixové notaci prakticky žádný rozdíl mezi operacemi a funkcemi, takže pro ně není nutné zavádět nějaká zvláštní syntaktická pravidla.

Důsledkem výše uvedených skutečností je fakt, že znaky běžně používané pro operátory je možné použít pro jiné účely, podobně jako například v jazycích LISP nebo Scheme (což jsou mimochodem jazyky používající prefixovou notaci).

Aritmetické operace se ve Forthu zapisují přesně podle infixové notace s tou podmínkou, že jednotlivé operátory od sebe musí být odděleny mezerou, znakem tabelátoru či znakem pro konec řádku. Příklad zápisu některých aritmetických operací a jejich kombinací:

10 20 +
10 20 *
10 20 -
10 20 + 30 *
5 4 3 2 1 * / + -

Význam výše uvedených operací ve Forthu je následující: samotný zápis čísla znamená, že se toto číslo uloží na zásobník operandů. Zápis operátoru způsobí, že se operandy vyberou ze zásobníku, provede se s nimi požadovaná operace a výsledek se uloží zpět na zásobník. Vzhledem k tomu, že všechny zmíněné operace jsou binární (akceptují dva operandy), vyberou se ze zásobníku dvě hodnoty a zpět se zapíše pouze jediná hodnota, tj. počet položek na zásobníku se o jednu sníží. (Malé cvičení – jaký je výsledek poslední sekvence operací?).

To si můžeme ilustrovat na následujícím diagramu, kde na levé straně od pomlček jsou naznačeny významné položky na vrcholu zásobníku před provedením operace a na pravé straně od pomlček je uveden stav zásobníku po provedení operace. Tento diagram se nazývá stack diagram a hojně se vyskytuje ve zdrojových textech programů psaných ve Forthu, v manuálech Forthu atd. (do určité míry nahrazuje hlavičky funkcí):

(x y -- x+y)

Výpis numerické hodnoty uložené na vrcholu zásobníku operandů

Po spuštění některého interpretru Forthu, v našem případě fig-FORTHu, je možné ihned (podobně jako u klasických RPN kalkulaček společnosti HP) zapisovat aritmetické operace v postfixové notaci s využitím známých operátorů + - * a /. Pouze potřebujeme znát příkaz, kterým je možné vypsat hodnotu na vrcholu zásobníku. Tento příkaz je velmi jednoduchý a už jsme jej použili na screenshotech – jedná se o prostou tečku: ., kterou je však nutné od ostatních příkazů oddělit alespoň jednou mezerou nebo jiným „bílým“ znakem.

Zásobníkový diagram tohoto příkazu je velmi jednoduchý, protože dochází k vyjmutí prvku uloženého na vrcholu zásobníku:

(n -- )

Po zadání příkazu tečka se přečte hodnota uložená na vrcholu zásobníku a zapíše se na standardní výstup. Současně je hodnota ze zásobníku odebrána, takže se počet uložených položek o jednotku sníží. Pokud je tento příkaz zavolán na prázdný zásobník, znamená to chybu, kterou by měl interpretr ohlásit (fig-FORTH ovšem reaguje poněkud chaoticky). Příklady použití:

10 .
10 20 + .
10 20 30 * + .
10 20 * 30 + .

Všimněte si, že všechny výše zmíněné operace pracují se zásobníkem korektně, tj. po jejich provedení je zásobník zcela vyprázdněn. Při programování ve Forthu je důležité, aby na zásobníku nezůstala žádná zbytečná data, neboť to ve většině případů značí nesprávně napsanou operaci či funkci. Kód je možné upravit libovolným způsobem, vždy se však musí dodržet podmínka, že operandy a operátory musí být odděleny „bílým“ znakem:

10 20 + .
 
10 20 +
.
 
10 20
+ .
 
10
20
+
.

Základní operace prováděné s hodnotami uloženými na zásobníku operandů

Vzhledem k tomu, že zásobník operandů tvoří ve Forthu ústřední místo veškerého dění, je zapotřebí mít k dispozici i další operace, které mohou manipulovat s datovými položkami na zásobníku uloženými. V některých případech nám totiž nemusí vyhovovat pořadí položek uložených na zásobníku, položky je nutné kopírovat (duplikovat), mazat apod. Z tohoto důvodu má jazyk Forth implementovány následující základní operace (slova) nad zásobníkem, resp. nad jeho obsahem:

Slovo Popis manipulace se zásobníkem Stručný popis
SWAP ( n1 n2 — n2 n1 ) prohození dvou prvků na vrcholu zásobníku a těsně pod vrcholem zásobníku
DUP ( n — n n ) duplikace obsahu prvku na vrcholu zásobníku
DROP ( n — ) odstranění prvku z vrcholu zásobníku
OVER ( n1 n2 — n1 n2 n1 ) duplikace obsahu prvku POD vrcholem zásobníku
ROT ( n1 n2 n3 — n2 n3 n1 ) rotace tří prvků umístěných na nejvyšších třech místech zásobníku
Poznámka: navíc jsou v mnoha implementacích FORTHu k dispozici i slova začínající dvojkou, tedy například 2DUP atd. Tato slova pracují s prvky s dvojnásobnou bitovou šířkou.

Slovo SWAP

S využitím tohoto slova se provede prohození nejvyšší a druhé nejvyšší datové položky (což jsou nejčastěji celočíselné hodnoty) uložené na zásobníku. Pokud byly na zásobníku operandů například uložena čísla 1 a 2, je po provedení tohoto slova na nejvyšších dvou pozicích zásobníku uložena posloupnost 2 1. Následuje jednoduchý příklad použití tohoto slova.

Uložení dvou čísel na zásobník a jejich následný výpis na obrazovku, spolu s odřádkováním pomocí slova cr:

1 2 . . cr

Uložení dvou čísel na zásobník, provedení slova swap a následný výpis čísel na obrazovku:

1 2 swap . . cr

Vše si samozřejmě můžeme ověřit na reálném osmibitovém mikropočítači Atari s fig-FORTHem:

Slovo SWAP prohodí dva nejvyšší prvky na zásobníku operandů.

Obrázek 7: Slovo SWAP prohodí dva nejvyšší prvky na zásobníku operandů.

Autor: tisnik, podle licence: Rights Managed

Poznámka: fig-FORTH, minimálně jeho varianta pro osmibitové mikropočítače Atari, nekontroluje, zda je na zásobníku operandů uložen dostatečný počet prvků po prohození. To například znamená, že následující příklad je sice po sémantické stránce nekorektní, ovšem fig-FORTH ho provede a prohodí nejvyšší prvek (jediný prvek na zásobníku) s prvkem uloženým na adrese „pod“ zásobníkem:
1 SWAP . .

Slovo DUP

S využitím vestavěného slova dup se provede kopie (duplikace) hodnoty uložené na vrcholu zásobníku. Velikost zásobníku se tedy o jednotku zvětší. Toto slovo se využívá v mnoha případech, například pro přípravu na matematickou operaci násobení dvěma, umocnění, předání parametru na zásobník návratových adres apod. Opět následuje ilustrační příklad použití této operace:

1 dup . . cr

A pochopitelně si vyzkoušejme, jak se toto slovo chová ve fig-FORTHu:

Slovo DUP na zásobník uloží kopii prvku z původního vrcholu.

Obrázek 8: Slovo DUP na zásobník uloží kopii prvku z původního vrcholu zásobníku operandů.

Autor: tisnik, podle licence: Rights Managed

Slovo DROP

Logickým opakem standardního slova dup je slovo drop, pomocí něhož se odstraní položka z vrcholu zásobníku. Toto slovo, jež se často používá při „úklidu“ po nějaké složitější operaci, je podobné slovu . (tečka), avšak s tím rozdílem, že neprovádí výpis hodnoty odstraňované položky. Příklad použití:

1 2 drop . cr

Ověření funkcionality ve fig-FORTHu je snadné:

Slovo DROP odstraní prvek z vrcholu zásobníku operandů.

Obrázek 9: Slovo DROP odstraní prvek z vrcholu zásobníku operandů.

Autor: tisnik, podle licence: Rights Managed

V případě, že je zásobník prázdný, mohou slova DROP nebo . způsobit problémy (jejich chování není v takovém případě definováno; problém ve skutečnosti vznikne až po spuštění slova .):

Pokus o tisk prvku, který neexistuje, nedopadne dobře.

Obrázek 10: Pokus o tisk prvku, který neexistuje, nedopadne dobře.

Autor: tisnik, podle licence: Rights Managed

Slovo OVER

Další standardní slovo určené pro manipulaci s prvky na zásobníku se jmenuje over. Toto slovo se podobá výše popsanému slovu dup, tj. provádí se kopie hodnoty uložené na zásobníku. V tomto případě se však jedná o hodnotu uloženou pod vrcholem zásobníku, nikoli o hodnotu uloženou přímo na vrcholu zásobníku. Chování tohoto slova se nejlépe předvede na jednoduchém příkladu, který porovná význam operací over a dup. Na zásobník je nejdříve uložena hodnota 1 a poté hodnota 2 (ta je tedy uložena na vrcholu zásobníku):

1 2 dup . . . cr
1 2 over . . . cr
Poznámka: v obou případech vypisujeme tři prvky, nikoli prvky dva:
2 2 1
1 2 1

Ověření funkcionality tohoto standardního slova ve fig-FORTHu ve variantě pro osmibitové domácí mikropočítače Atari:

Interaktivní ověření operace prováděné slovem OVER - hodnota 2 je přečtena z druhého místa na zásobníku a zduplikována na jeho vrcholu.

Obrázek 11: Interaktivní ověření operace prováděné slovem OVER. Hodnota 2 je přečtena z druhého místa na zásobníku a zduplikována na jeho vrcholu.

Autor: tisnik, podle licence: Rights Managed

Slovo ROT

Další standardní slovo se jmenuje rot. To je zvláštní tím, že manipuluje hned se třemi položkami uloženými na zásobníku. Jak již název tohoto slova napovídá, provádí se rotace položek a to tak, že datová položka na třetí nejvyšší pozici v zásobníku operandů je vyjmuta a uložena na jeho vrchol. Opět je vhodné si vyzkoušet jednoduchý příklad, nejprve výpis tří položek bez rotace:

1 2 3 . . . cr

A následně s rotací:

1 2 3 rot . . . cr

Výsledky by měly vypadat následovně:

3 2 1
1 3 2
Poznámka: fig-FORTH opět nekontroluje, zda je na zásobníku uložen dostatečný počet prvků (zde konkrétně alespoň tři prvky) a provede rotaci jednoho, dvou a dokonce i nula prvků.
Operace prováděná slovem ROT.

Obrázek 12: Operace prováděná slovem ROT.

Autor: tisnik, podle licence: Rights Managed

Pro manipulaci s datovými položkami, které jsou na zásobníku uloženy ve větší hloubce než tři, je možné ve většině implementací Forthu (ovšem nikoli ve fig-FORTHu bez načtení příslušné obrazovky) použít slova nazvaná pick a roll. Jedná se v podstatě o selektory podobné indexům do polí u jiných programovacích jazyků – pokud se ovšem na zásobník díváme jako na dynamicky alokované pole s proměnnou velikostí. V reálných programech se však tato slova nevyskytují a jejich použití ani není doporučováno, protože neodpovídá programovacímu stylu používanému ve Forthu. Pokud je zapotřebí získat či uložit informace do dalších míst na zásobníku, je možné využít zásobník návratových adres (return stack) nebo použít proměnných pro uložení dočasných hodnot. Většinou však potřeba zásahu do hloubky zásobníku vychází ze špatného návrhu programu.

Vícenásobné zavolání slova ROT.

Obrázek 13: Vícenásobné zavolání slova ROT.

Autor: tisnik, podle licence: Rights Managed

Definice nových slov

V programovacím jazyku FORTH se namísto funkcí, aritmetických, logických, relačních atd. operací a řídicích struktur používají pouze takzvaná slova. Ta mohou manipulovat s obsahem obou zásobníků a popř. i zapisovat či číst data do/z paměti (typicky přes proměnné). Slova se při jejich definici zadávají z klávesnice nebo ze vstupního souboru a jsou určena svým jménem (v tomto ohledu se podobají běžným funkcím). Jméno slova může ve FORTHu obsahovat libovolný řetězec znaků, který je oddělen (ukončen) mezerou nebo v novějších verzích libovolným „bílým znakem“. Každé volání slova je ve forthovském programu nahrazeno jménem slova bez dalších znaků (závorek apod.), protože veškeré parametry slova i případná návratová hodnota nebo hodnoty jsou uloženy na zásobníku operandů.

SWAP, DUP, DROP, OVER i ROT lze zavolat i nad prázdným zásobníkem, ovšem výsledek není obecně definován.

Obrázek 14: SWAP, DUP, DROP, OVER i ROT lze zavolat i nad prázdným zásobníkem, ovšem výsledek není obecně definován.

Autor: tisnik, podle licence: Rights Managed

Ve FORTHu jsou rozeznávány tři typy slov: definovaná slova, nedefinovaná slova a číselné konstanty. Základní (řekněme vestavěná) slova, například operace se zásobníkem popsané v předcházejících kapitolách, jsou většinou vytvořena přímo s využitím operací napsaných v assembleru.

Uživatelem resp. programátorem definovaná slova jsou ukládána do slovníku (dictionary), který je většinou implementován formou lineárního seznamu nebo zásobníku (spíše ale seznamu). V multiuživatelských systémech má každý uživatel k dispozici svůj slovník, přičemž existuje ještě slovník společný. To však není případ fig-FORTHu, který je interně mnohem jednodušší.

První krok, který se před spuštěním Forthovských aplikací provádí, je rozklad řetězců, které jsou zadané uživatelem nebo načtené z datového zařízení (na PC z pevného disku, paměti EPROM apod., u Atari z diskety), do jednotlivých slov, což je operace triviální (na rozdíl od prakticky všech ostatních programovacích jazyků, které mají složitější syntaxi), protože za slova je považován souvislý řetězec oddělený bílými znaky. Tomu, kdo psal lexikální analyzátory pro jazyky podobné C-čku či Pascalu, je zřejmé že napsání základní lexikální analýzy pro Forth je otázka několika řádků kódu (resp. doslova několika desítek strojových instrukcí).

Každé slovo v řetězcové podobě je následně vyhledáno ve slovníku. Pokud je nalezeno, je proveden (spuštěn) jeho kód (slovo je v paměti uloženo jako seznam ukazatelů na další slova nebo primitivní operace). Pokud slovo ve slovníku nalezeno není, je považováno za číslo, které je po převodu do binární podoby uloženo na zásobník. V případě, že převod na číselnou konstantu z nějakého důvodu selže, znamená to, že jde o neznámé slovo, a proto interpret nahlásí chybu. Zde je opět vidět syntaktická jednoduchost jazyka, který rozeznává pouze slova a numerické hodnoty (operandy a řídicí struktury jsou také slova).

Pro vytváření nových slov se používají pouze dvě zabudovaná slova. Prvním slovem je : (dvojtečka) a druhým slovem je ; (středník). Po zadání dvojtečky se interpretr Forthu přepne z režimu Execute (přímého vykonávání zadávaných příkazů) do režimu Compile (překlad nového slova). Naopak, po zadání středníku se interpretr přepne z režimu Compile do režimu Execute (samotný středník se přitom překládá jako return). Za slovem dvojtečka musí následovat jméno nového slova (což si hlídá část interpretru pracující v režimu Compile).

Nově vytvořená slova se chovají stejným způsobem jako slova zabudovaná, tj. jejich parametry se vybírají ze zásobníku operandů a výsledek je taktéž uložen na zásobník operandů. V tom spočívá jedna z elegantních vlastností Forthu, kdy je vytváření a volání slov velmi jednoduché a rychlé. Ukažme si vytvoření nového slova print, které vytiskne hodnotu uloženou na vrcholu zásobníku a potom kurzor přesune na nový řádek:

: print
  .
  cr
;

Slovo print, které musí být od slova dvojtečky odděleno bílým znakem, tedy vytiskne hodnotu uloženou na vrcholu zásobníku (to zajistí volání zabudovaného slova tečka) a potom provede odřádkování pomocí interního slova cr. Středník ukončí kompilaci nového slova a vrátí řízení zpátky do režimu Execute. Můžeme ihned provést několik interaktivních testů s nově vytvořeným slovem:

10 print
1 2 + print
1 2 3 * - print

Vzhledem k tomu, že je tělo slova print velmi krátké, můžeme ho zapsat i na jeden řádek (což ušetří cenné bajty na disketě):

: print . cr ;

Příkladem složitějšího slova může být například mocnina. Toto slovo vezme ze zásobníku hodnotu a na zásobník vrátí její druhou mocninu. Slovo může vypadat následovně:

: mocnina dup * ;

Nejdříve se tedy provede duplikace hodnoty na vrcholu zásobníku. Poté se obě (shodné) hodnoty ze zásobníku vyjmou, vynásobí a na zásobník se uloží výsledek operace násobení. Použití tohoto slova je opět velmi jednoduché:

2 mocnina . cr
10 mocnina print

(na druhém programovém řádku používáme dříve vytvořené slovo print)

Příklad definice a otestování nového slova ve fig-FORTHu

Vyzkoušejme si nyní definici i otestování nového slova ve fig-FORTHu. Opět si připomeňme, že FORTH je plně interaktivní prostředí (podobně jako BASIC), ve kterém lze nově definovaná slova ihned otestovat, volat tato slova z jiných slov atd. atd. Uvedeme si velmi jednoduchý příklad – slovo, které vynásobí předanou hodnotu dvěma. Jak parametr, tak i výsledek, se předávají implicitně přes zásobník:

Definice nového slova pro vynásobení hodnoty na vrcholu zásobníku dvěma.

Obrázek 15: Definice nového slova pro vynásobení hodnoty na vrcholu zásobníku dvěma.

Autor: tisnik, podle licence: Rights Managed

Otestování slova DOUBLE.

Obrázek 16: Otestování slova DOUBLE.

Autor: tisnik, podle licence: Rights Managed

Ve skutečnosti lze vynásobení dvěma nahradit součtem. Povšimněte si, jak se jednotlivá slova aplikují postupně.

Obrázek 17: Ve skutečnosti lze vynásobení dvěma nahradit součtem, což je minimálně v případě mikroprocesoru MOS 6502 mnohem efektivnější operace. Povšimněte si, jak se jednotlivá slova spouští postupně.

Autor: tisnik, podle licence: Rights Managed

Otestování nové varianty slova DOUBLE.

Obrázek 18: Otestování nové varianty slova DOUBLE.

Autor: tisnik, podle licence: Rights Managed

Programové smyčky

Programovací jazyk FORTH patří v mnoha ohledech mezi nízkoúrovňové programovací jazyky. Tyto programovací jazyky jsou mimo jiné charakteristické častým používáním počítaných a nepočítaných programových smyček. U jazyků vyšší úrovně, zejména jazyků funkcionálních, se spíše setkáváme s použitím rekurze a konstrukcí typu foreach (tj. vlastně skrytých programových smyček).

Jedním ze základních typů cyklů ve Forthu je smyčka typu do-loop. Jedná se o počítanou programovou smyčku, která zhruba odpovídá smyčce for známé například z Pascalu, Fortranu či Basicu. Podobnost klíčových slov pro smyčku do-loop ve Forthu a C-čku sice svádí k jejich záměně, ale v céčku se jedná o obecnější nepočítanou smyčku s podmínkou, která se hodí pro poněkud jiné operace než její Forthovská příbuzná.

Inicializace smyčky do-loop je jednoduchá. Na zásobník operandů se nejprve uloží dvě hodnoty. První hodnotou se specifikuje mezní hodnota, jejíž překročení (při zvýšení nebo snížení počitadla) vede opakování smyčky, druhou hodnotou (tj. hodnotou uloženou na vrcholu zásobníku) pak počáteční hodnota.

Příkazy, které se mají ve smyčce opakovat, jsou umístěny uvnitř „příkazových závorek“ specifikovaných slovy do a loop. Smyčka probíhá tak, že se aktuální hodnota počitadla ukládá na zásobník návratových adres (return stack), na konci smyčky je pak tato hodnota přesunuta na zásobník operandů, kde je počitadlo porovnáno s koncovou hodnotou. Z toho vyplývá, že smyčka proběhne alespoň jednou, podobně jako smyčka typu do-while v céčku nebo repeat-until v Pascalu.

Nejjednodušší forma smyčky do-loop, která se má opakovat devětkrát, vypadá následovně:

10 1 do loop

Jak je z předchozího úryvku kódu patrné, bude se smyčka provádět devětkrát, přičemž první hodnota počitadla bude rovna jednotce.

Uvnitř smyčky je možné používat speciální klíčové slovo i (nejedná se o název proměnné, ale o skutečné slovo), pomocí kterého se na zásobník operandů uloží aktuální hodnota počitadla smyčky. Pokud by tedy měla smyčka proběhnout devětkrát a postupně vypisovat hodnotu počitadla, může celý kód vypadat následovně:

: smycka1
    10 1 do
        i . cr
    loop
;

Jak je z předchozího programu patrné, vytvořili jsme nové slovo smycka1, po jehož zavolání se smyčka devětkrát provede a vypíše všechny hodnoty počitadla. Připomínám, že slovo . (tečka) slouží k výpisu hodnoty uložené na vrcholu zásobníku a slovo cr provede přechod na nový řádek.

Výše vytvořené slovo smycka1 však není příliš flexibilní, výhodnější by bylo vytvořit slovo, které provede smyčku n-krát s různou počáteční hodnotou. To je možné provést jednoduchou úpravou kódu:

: smycka2
    do
        i . cr
    loop
;

Před provedením nově vytvořeného slova smycka2 je nutné na zásobník vložit počet opakování smyčky a počáteční hodnotu. Celé volání může vypadat například takto:

10 1 smycka2

Všimněte si velké jednoduchosti vytvoření nového slova a způsobu předávání parametrů přes zásobník. Nikde není zapotřebí pojmenovávat parametry, vytvářet lokální proměnné ani používat závorky. Tento způsob předávání parametrů pracuje samozřejmě pouze v případě, že se využívají čísla typu integer. V případě použití jiných datových typů (například reálných čísel) je nutné pracovat se zásobníkem nepřímo pomocí slov pro zpracování dalších datových typů (a to původně velmi elegantní kód může znepřehlednit).

Příklad realizace programové smyčky ve fig-FORTHu

Opět si vyzkoušíme zápis programové smyčky typu do-loop ve fig-FORTHu. Smyčky budou definovány uvnitř (nových) slov, což zjednoduší jejich spouštění. To se pochopitelně provede zavoláním příslušného slova a popř. předáním parametrů přes zásobník operandů:

Slovo, které spustí počítanou programovou smyčku.

Obrázek 19: Slovo, které spustí počítanou programovou smyčku.

Autor: tisnik, podle licence: Rights Managed

Otestování programové smyčky.

Obrázek 20: Otestování programové smyčky.

Autor: tisnik, podle licence: Rights Managed

Slovo, kterému je nutné předat počáteční a koncovou hodnotu počitadla smyčky.

Obrázek 21: Slovo, kterému je nutné předat počáteční a koncovou hodnotu počitadla smyčky.

Autor: tisnik, podle licence: Rights Managed

Slovo, které přesune počitadlo ze zásobníku návratových adres a poté vytiskne jeho hodnotu.

Obrázek 22: Slovo, které přesune počitadlo ze zásobníku návratových adres a poté vytiskne jeho hodnotu.

Autor: tisnik, podle licence: Rights Managed

Otestování třetí varianty počítané programové smyčky.

Obrázek 23: Otestování třetí varianty počítané programové smyčky.

Autor: tisnik, podle licence: Rights Managed

Odřádkování je realizováno slovem CR.

Obrázek 24: Odřádkování je realizováno slovem CR.

Autor: tisnik, podle licence: Rights Managed

Další typy programových smyček

Místo slova do je možné v některých dialektech FORThu použít i slovo ?do, při jehož vyvolání se nejprve provede test, zda se nerovná hodnota indexu a počáteční hodnoty. Pokud dojte k rovnosti, smyčka se neprovede a běh programu pokračuje až za slovem loop. Následující dva řádky tedy budou mít zcela odlišný efekt:

10 10 do i . cr loop
10 10 ?do i . cr loop

Ve Forthu je však možné použít i nepočítané smyčky, tj. smyčky, u kterých není předem známý počet opakování. V takové smyčce proto musí být při každé iteraci testována nějaká podmínka a na základě jejího výsledku musí být rozhodnuto, zda se má smyčka opakovat či ukončit.

Pro tvorbu prvního typu nepočítaných smyček, kdy se podmínka pro ukončení smyčky testuje ještě před první iterací, se používají slova begin, while a repeat. Způsob jejich použití ilustruje následující kód:

TOP100 prodej

begin
podmínka
while
    tělo smyčky
repeat

Kde podmínka značí hodnotu uloženou na vrcholu zásobníku. Při každé iteraci se podmínka vyhodnotí a na základě výsledku vyhodnocení (tj. hodnoty true či false) se smyčka buď provede, nebo se z ní vyskočí. Následuje jednoduchý příklad použití, kdy vytvořený program vypíše čísla od 1 do 10:

: pocitadlo
    0
    begin
        dup 10 <
    while
        1 +
        dup . cr
    repeat
    drop
;
Definice slova POCITADLO.

Obrázek 25: Definice slova POCITADLO.

Autor: tisnik, podle licence: Rights Managed

Zavolání slova POCITADLO.

Obrázek 26: Zavolání slova POCITADLO.

Autor: tisnik, podle licence: Rights Managed

Repositář s demonstračními příklady

Všechny demonstrační příklady, s nimiž jsme se v předchozích článcích i v článku dnešním seznámili a které jsou určeny pro překlad s využitím assembleru ca65, jsou dostupné, jak je zvykem, na GitHubu. V tabulce níže jsou uvedeny odkazy na jednotlivé zdrojové kódy příkladů psané v assembleru i „listingy“ vygenerované samotným assemblerem, ze kterých je patrné, jakým způsobem se jednotlivé příklady přeložily do výsledného XEX souboru:

# Příklad Stručný popis příkladu Adresa
1 Makefile definice cílů pro překlad všech demonstračních příkladů z této tabulky https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/Makefile
2 linker.cfg konfigurační soubor pro linker https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/linker.cfg
       
3 dummy.asm pouze nekonečná smyčka https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/dummy.asm
4 dummy_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/dummy_list.asm
5 dummy_list.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/dummy.map
       
6 background_color_1.asm změna barvy pozadí – základní varianta příkladu https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/background_color_1.asm
7 background_color_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/background_color_1_list.asm
8 background_color_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/background_color_1.map
       
9 background_color_2.asm změna barvy pozadí – využití předdefinovaných konstant https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/background_color_2.asm
10 background_color_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/background_color_2_list.asm
11 background_color_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/background_color_2.map
       
12 print_a.asm tisk znaku přímo do obrazové paměti https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/print_a.asm
13 print_a_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/print_a_list.asm
14 print_a.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/print_a.map
       
15 color_computation_1.asm výpočet barvy, varianta bez bitových posunů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/color_computation_1.asm
16 color_computation_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/color_computation_1_list.asm
17 color_computation_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/color_computation_1.map
       
18 color_computation_2.asm výpočet barvy, varianta s bitovými posuny https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/color_computation_2.asm
19 color_computation_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/color_computation_2_list.asm
20 color_computation_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/color_computation_2.map
       
21 subroutine_1.asm skok do podprogramu bez předávání parametrů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/subroutine_1.asm
22 subroutine_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/subroutine_1_list.asm
23 subroutine_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/subroutine_1.map
       
24 subroutine_2.asm skok do podprogramu s předáním parametru https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/subroutine_2.asm
25 subroutine_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/subroutine_2_list.asm
26 subroutine_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/subroutine_2.map
       
27 hex_number_1.asm tisk jedné hexadecimální číslice (nekorektní varianta) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_1.asm
28 hex_number_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_1_list.asm
29 hex_number_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_1.map
       
30 hex_number_2.asm tisk jedné hexadecimální číslice (korektní varianta) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_2.asm
31 hex_number_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_2_list.asm
32 hex_number_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_2.map
       
33 hex_number_3.asm tisk jedné hexadecimální číslice (korektní varianta po refaktoringu) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_3.asm
34 hex_number_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_3_list.asm
35 hex_number_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_3.map
       
36 hex_number_4.asm tisk jedné hexadecimální číslice, varianta postavená na makrech https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_4.asm
37 hex_number_4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_4_list.asm
38 hex_number_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_4.map
       
39 hex_number_5.asm tisk jedné hexadecimální číslice, varianta postavená na makrech, lokální automaticky generovaná návěští https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_5.asm
40 hex_number_5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_5_list.asm
41 hex_number_5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_5.map
       
42 hex_number_6.asm příprava pro tisk dvouciferné hexadecimální hodnoty https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_6.asm
43 hex_number_6_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_6_list.asm
44 hex_number_6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_6.map
       
45 hex_number_7.asm realizace tisku dvouciferné hexadecimální hodnoty https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_7.asm
46 hex_number_7_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_7_list.asm
47 hex_number_7.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_7.map
       
48 hex_number_8.asm makro pro logický posun doprava o zadaný počet bitů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_8.asm
49 hex_number_8_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_8_list.asm
50 hex_number_8.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_8.map
       
51 hex_number_9.asm čekání na stisk klávesy https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_8.asm
52 hex_number_9_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_8_list.asm
53 hex_number_9.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number_8.map
       
54 fill_block_1.asm vyplnění bloku, varianta se dvěma index registry https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block_1.asm
55 fill_block_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block_1_list.asm
56 fill_block_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block_1.map
       
57 fill_block_2.asm vyplnění bloku, nekorektní varianta využívající jeden index registr https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block_2.asm
58 fill_block_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block_2_list.asm
59 fill_block_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block_2.map
       
60 fill_block_3.asm vyplnění bloku, korektní varianta využívající jeden index registr https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block_3.asm
61 fill_block_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block_3_list.asm
62 fill_block_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block_3.map
       
63 fill_block_4.asm vyplnění bloku delšího než 256 bajtů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block_4.asm
64 fill_block_4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block_4_list.asm
65 fill_block_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block_4.map
       
66 fill_block_5.asm vyplnění bloku, čítání směrem nahoru https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block_5.asm
67 fill_block_5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block_5_list.asm
68 fill_block_5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block_5.map
       
69 pmg_01.asm inicializace PMG, povolení PMG, nastavení pozice a tvaru prvního hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_01.asm
70 pmg_01_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_01_list.asm
71 pmg_01.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_01.map
       
72 pmg_02.asm nastavení pozice, tvaru a barvy prvního hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_02.asm
73 pmg_02_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_02_list.asm
74 pmg_02.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_02.map
       
75 pmg_03.asm vliv zákazu DMA na zobrazení PMG https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_03.asm
76 pmg_03_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_03_list.asm
77 pmg_03.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_03.map
       
78 pmg_04.asm postupná změna horizontální velikosti hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_04.asm
79 pmg_04_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_04_list.asm
80 pmg_04.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_04.map
       
81 pmg_05.asm odlišná bitová maska tvaru hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_05.asm
82 pmg_05_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_05_list.asm
83 pmg_05.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_05.map
       
84 pmg_06.asm inicializace a zobrazení dvou hráčů, kteří se překrývají https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_06.asm
84 pmg_06_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_06_list.asm
86 pmg_06.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_06.map
       
87 pmg_07.asm naivní způsob nastavení bitmapy prvního hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_07.asm
88 pmg_07_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_07_list.asm
89 pmg_07.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_07.map
       
90 pmg_08.asm elegantnější způsob nastavení bitmapy prvního hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_08.asm
91 pmg_08_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_08_list.asm
92 pmg_08.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_08.map
       
93 pmg_09.asm zobrazení všech čtyř hráčů, změna priority zobrazení https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_09.asm
94 pmg_09_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_09_list.asm
95 pmg_09.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_09.map
       
96 pmg_10.asm nastavení bitmap všech čtyř hráčů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_10.asm
97 pmg_10_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_10_list.asm
98 pmg_10.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_10.map
       
99 pmg_stick_1.asm ovládání prvního hráče joystickem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_1.asm
100 pmg_stick_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_1_list.asm
101 pmg_stick_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_1.map
       
102 pmg_stick_2.asm zobrazení všech čtyř střel https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_2.asm
103 pmg_stick_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_2_list.asm
104 pmg_stick_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_2.map
       
105 pmg_stick_3.asm střely zdánlivě tvoří pátého hráče (ovšem stále jsou samostatné) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_3.asm
106 pmg_stick_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_3_list.asm
107 pmg_stick_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_3.map
       
108 pmg_stick_4.asm korektní zobrazení pátého hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_4.asm
109 pmg_stick_4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_4_list.asm
110 pmg_stick_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_4.map
       
111 pmg_stick_5.asm detekce stisku tlačítka joysticku, změna barvy prvního hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_5.asm
112 pmg_stick_5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_5_list.asm
113 pmg_stick_5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_5.map
       
114 pmg_11.asm automatický horizontální pohyb prvního hráče, realizace zpožďovací smyčky https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_11.asm
115 pmg_11_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_11_list.asm
116 pmg_11.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_11.map
       
117 pmg_12.asm automatický horizontální pohyb prvního hráče, čekání na další snímek https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_12.asm
118 pmg_12_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_12_list.asm
119 pmg_12.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_12.map
       
120 pmg_13.asm vertikální posun spritu směrem dolů (nekorektní varianta) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_13.asm
121 pmg_13_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_13_list.asm
122 pmg_13.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_13.map
       
123 pmg_14.asm vertikální posun spritu směrem dolů (korektní varianta) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_14.asm
124 pmg_14_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_14_list.asm
125 pmg_14.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_14.map
       
126 pmg_15.asm vertikální posun spritu směrem nahoru (korektní varianta) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_15.asm
127 pmg_15_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_15_list.asm
128 pmg_15.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_15.map
       
129 pmg_stick_6.asm ovládání PMG joystickem v horizontálním i vertikálním směru https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_6.asm
130 pmg_stick_6_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_6_list.asm
131 pmg_stick_6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick_6.map
       
132 pmg_collision_1.asm ovládání PMG joystickem, detekce kolize prvního hráče s dalšími hráči https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision_1.asm
133 pmg_collision_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision_1_list.asm
134 pmg_collision_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision_1.map
       
135 pmg_collision_2.asm ovládání PMG joystickem, detekce kolize prvního hráče s dalšími hráči https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision_2.asm
136 pmg_collision_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision_2_list.asm
137 pmg_collision_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision_2.map
       
138 pmg_collision_3.asm ovládání PMG joystickem, detekce kolize prvního hráče s dalšími hráči, detekce kolize první střely s hráči https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision_3.asm
139 pmg_collision_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision_3_list.asm
140 pmg_collision_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision_3.map
       
141 pmg_collision_4.asm ovládání PMG joystickem, detekce kolize prvního hráče s hracím polem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision_4.asm
142 pmg_collision_4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision_4_list.asm
143 pmg_collision_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision_4.map
       
144 pong.asm scéna ze hry Pong vykreslená jen s využitím spritů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pong.asm
145 pong_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pong_list.asm
146 pong.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pong.map
       
147 antic_1.asm nastavení textového režimu se čtyřmi barvami a 20×12 znaky https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_1.asm
148 antic_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_1_list.asm
149 antic_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_1.map
       
150 antic_2.asm nastavení textového režimu se čtyřmi barvami a 20×12 znaky, zlepšení čitelnosti https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_2.asm
151 antic_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_2_list.asm
152 antic_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_2.map
       
153 antic_3.asm nastavení režimu, ve kterém se kombinují různé textové a grafické řádky https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_3.asm
154 antic_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_3_list.asm
155 antic_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_3.map
       
156 antic_4.asm nastavení standardního textového režimu GR.0, výpis 256 znaků https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_4.asm
157 antic_4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_4_list.asm
158 antic_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_4.map
       
159 antic_5.asm volba mezinárodní znakové sady pro textový režim GR.0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_5.asm
160 antic_5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_5_list.asm
161 antic_5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_5.map
       
162 antic_6.asm volba náhodné stránky pro fonty v textovém režimu GR.0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_6.asm
163 antic_6_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_6_list.asm
164 antic_6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_6.map
       
165 antic_7.asm tisk 64 znaků ve čtyřech barvách v režimu GR.1 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_7.asm
166 antic_7_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_7_list.asm
167 antic_7.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_7.map
       
168 antic_8.asm určení, které znaky se budou tisknout v režimu GR.1 nebo GR.2 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_8.asm
169 antic_8_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_8_list.asm
170 antic_8.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_8.map
       
171 antic_9.asm nastavení textového režimu GR.12 a výpis znaků na obrazovku https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_9.asm
172 antic_9_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_9_list.asm
173 antic_9.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_9.map
       
174 antic_A.asm vlastní znaková sada (naivní přístup) pro textový režim GR.12 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_A.asm
175 antic_A_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_A_list.asm
176 antic_A.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_A.map
       
177 antic_B.asm nastavení dvoubarevného grafického režimu s rozlišením 80×48 pixelů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_B.asm
178 antic_B_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_B_list.asm
179 antic_B.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_B.map
       
180 antic_bitmap_1.asm nastavení dvoubarevného grafického režimu s rozlišením 80×48 pixelů, zobrazení bitmapy https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_1.asm
181 antic_bitmap_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_1_list.asm
182 antic_bitmap_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_1.map
       
183 antic_bitmap_2.asm nastavení dvoubarevného grafického režimu s rozlišením 80×48 pixelů, jednodušší zápis display listu https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_2.asm
184 antic_bitmap_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_2_list.asm
185 antic_bitmap_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_2.map
       
186 antic_bitmap_3.asm nastavení dvoubarevného grafického režimu s rozlišením 160×96 pixelů, zobrazení bitmapy https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_3.asm
187 antic_bitmap_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_3_list.asm
188 antic_bitmap_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_3.map
       
189 antic_bitmap_4.asm nastavení dvoubarevného grafického režimu s rozlišením 160×192 pixelů, zobrazení bitmapy https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_4.asm
190 antic_bitmap_4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_4_list.asm
191 antic_bitmap_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_4.map
       
192 antic_bitmap_5.asm nastavení dvoubarevného grafického režimu s rozlišením 320×192 pixelů, nekorektní display list, nekorektní zobrazení bitmapy https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_5.asm
193 antic_bitmap_5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_5_list.asm
194 antic_bitmap_5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_5.map
       
195 antic_bitmap_6.asm nastavení dvoubarevného grafického režimu s rozlišením 320×192 pixelů, zarovnání bitmapy do bloku 4096 bajtů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_6.asm
196 antic_bitmap_6_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_6_list.asm
197 antic_bitmap_6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_6.map
       
198 antic_bitmap_7.asm nastavení dvoubarevného grafického režimu s rozlišením 320×192 pixelů, korektní display list, rozdělená bitmapa https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_7.asm
199 antic_bitmap_7_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_7_list.asm
200 antic_bitmap_7.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_7.map
       
201 antic_bitmap_8.asm nastavení čtyřbarevného grafického režimu s rozlišením 160×96 pixelů, zobrazení čtyřbarevného obrázku https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_8.asm
202 antic_bitmap_8_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_8_list.asm
203 antic_bitmap_8.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap_8.map
       
204 chars.bas tisk všech znaků na obrazovku (varianta naprogramovaná v BASICu) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/chars.bas
       
205 image_80x48.asm data obrázku 80×48 ve formě příkazů .byte https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/image_80x48.asm
206 image_160x96.asm data obrázku 160×96 ve formě příkazů .byte https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/image_160x96.asm
207 image_160x192.asm data obrázku 160×192 ve formě příkazů .byte https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/image_160x192.asm
208 image_320x192.bin čistě binární data obrázku 320×192× https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/image_320x192.bin
209 image_320x192_1.bin čistě binární data obrázku 320×96× (první polovina) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/image_320x192_1.bin
210 image_320x192_2.bin čistě binární data obrázku 320×96× (druhá polovina) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/image_320x192_2.bin
211 image_160x96x2.bin čistě binární data obrázku 320×192× https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/image_160x96x2.bin
       
212 antic_dli_1.asm výpis všech 128 znaků v přímé i inverzní podobě v režimu GR.0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_1.asm
213 antic_dli_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_1_list.asm
214 antic_dli_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_1.map
       
215 antic_dli_2.asm dočasná modifikace barvy pozadí provedená v DLI (dvanáctý textový řádek) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_2.asm
216 antic_dli_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_2_list.asm
217 antic_dli_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_2.map
       
218 antic_dli_3.asm opakované čekání na synchronizační pulz v DLI, výběr odlišné barvy pozadí https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_3.asm
219 antic_dli_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_3_list.asm
220 antic_dli_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_3.map
       
221 antic_dli_4.asm display list obsahující několik instrukcí DLI, opakovaná změna barvy pozadí https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_4.asm
222 antic_dli_4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_4_list.asm
223 antic_dli_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_4.map
       
224 antic_dli_5.asm display list obsahující několik instrukcí DLI, opakovaná změna barvy pozadí https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_5.asm
225 antic_dli_5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_5_list.asm
226 antic_dli_5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_5.map
       
227 antic_dli_pmg.asm zobrazení osmi spritů namísto spritů čtyř s využitím DLI https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_pmg.asm
228 antic_dli_pmg_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_pmg_list.asm
229 antic_dli_pmg.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli_pmg.map
       
230 antic_vbi_1.asm aktivní čekání na dokončení vykreslení snímku (bez VBI) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_1.asm
231 antic_vbi_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_1_list.asm
232 antic_vbi_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_1.map
       
233 antic_vbi_2.asm pohyb PMG realizovaný ve VBI (první způsob nastavení vektoru) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_2.asm
234 antic_vbi_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_2_list.asm
235 antic_vbi_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_2.map
       
235 antic_vbi_3.asm pohyb PMG realizovaný ve VBI (druhý způsob nastavení vektoru) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_3.asm
236 antic_vbi_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_3_list.asm
238 antic_vbi_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_3.map
       
239 antic_vbi_dli_1.asm změna pozice PMG ve VBI, modifikace barvy herního pole v DLI https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli_1.asm
240 antic_vbi_dli_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli_1_list.asm
241 antic_vbi_dli_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli_1.map
       
242 antic_vbi_dli_2.asm dtto, ale s odstraněním nadbytečné instrukce RTS ve VBI https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli_2.asm
243 antic_vbi_dli_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli_2_list.asm
244 antic_vbi_dli_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli_2.map
       
245 antic_vbi_dli_3.asm přepis předchozího příkladu s využitím subrutin https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli_3.asm
246 antic_vbi_dli_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli_3_list.asm
247 antic_vbi_dli_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli_3.map
       
248 antic_vbi_dli_4.asm přepis předchozího příkladu s využitím maker https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli_4.asm
249 antic_vbi_dli_4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli_4_list.asm
250 antic_vbi_dli_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli_4.map
       
251 antic_scrolling_1.asm příprava pro scrolling: dvojice hodnot ovládaných joystickem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling_1.asm
252 antic_scrolling_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling_1_list.asm
253 antic_scrolling_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling_1.map
       
254 antic_scrolling_2.asm příprava na scrolling, tisk horizontálního a vertikálního posunu na obrazovku https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling_2.asm
255 antic_scrolling_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling_2_list.asm
256 antic_scrolling_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling_2.map
       
257 antic_scrolling_3.asm realizace vertikálního scrollingu https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling_3.asm
258 antic_scrolling_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling_3_list.asm
259 antic_scrolling_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling_3.map
       
260 antic_scrolling_4.asm realizace horizontálního i vertikálního scrollingu https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling_4.asm
261 antic_scrolling_4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling_4_list.asm
262 antic_scrolling_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling_4.map
       
263 antic_playfield_1.asm úzké, standardní a rozšířené herní pole https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_playfield_1.asm
264 antic_playfield_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_playfield_1_list.asm
265 antic_playfield_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_playfield_1.map
       
266 gtia_mode_1.asm základ pro další demonstrační příklady: monochromatický grafický režim 320×192 pixelů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_1.asm
267 gtia_mode_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_1_list.asm
268 gtia_mode_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_1.map
       
269 gtia_mode_2.asm nastavení GTIA režimu 9 s vykreslením vzorku barev https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_2.asm
270 gtia_mode_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_2_list.asm
271 gtia_mode_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_2.map
       
272 gtia_mode_3.asm nastavení GTIA režimu 9 s postupnou změnou základního odstínu barvy https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_3.asm
273 gtia_mode_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_3_list.asm
274 gtia_mode_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_3.map
       
275 gtia_mode_4.asm nastavení GTIA režimu 11 s vykreslením vzorku barev https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_4.asm
276 gtia_mode_4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_4_list.asm
277 gtia_mode_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_4.map
       
278 gtia_mode_5.asm nastavení GTIA režimu 11 s postupnou změnou intenzity barev https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_5.asm
279 gtia_mode_5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_5_list.asm
280 gtia_mode_5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_5.map
       
281 gtia_mode_6.asm zobrazení barevné škály v režimu GTIA 10 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_6.asm
282 gtia_mode_6_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_6_list.asm
283 gtia_mode_6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_6.map
       
284 gtia_mode_7.asm obrazovka s různými textovými režimy, přepnutí do „zobrazení“ GTIA https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_7.asm
285 gtia_mode_7_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_7_list.asm
286 gtia_mode_7.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_7.map
       
287 gtia_mode_8.asm   https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_8.asm
288 gtia_mode_8_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_8_list.asm
289 gtia_mode_8.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_8.map
       
290 gtia_mode_9.asm zobrazení palety se šestnácti stupni šedi https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_9.asm
291 gtia_mode_9_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_9_list.asm
292 gtia_mode_9.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_9.map
       
293 gtia_mode_A.asm rozšíření palety na 256 barev na jediné obrazovce https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_A.asm
294 gtia_mode_A_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_A_list.asm
295 gtia_mode_A.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_A.map
       
296 gtia_mode_B.asm kombinace 256 barev na obrazovce se sprity https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_B.asm
297 gtia_mode_B_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_B_list.asm
298 gtia_mode_B.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode_B.map
       
299 rainbow_1.asm zobrazení duhy ve standardním textovém režimu GR.0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_1.asm
300 rainbow_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_1_list.asm
301 rainbow_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_1.map
       
302 rainbow_2.asm scrollující duha zobrazená ve standardním textovém režimu GR.0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_2.asm
303 rainbow_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_2_list.asm
304 rainbow_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_2.map
       
305 rainbow_3.asm dvě nezávisle na sobě scrollující duhy ve standardním textovém režimu GR.0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_3.asm
306 rainbow_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_3_list.asm
307 rainbow_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_3.map
       
308 rainbow_4.asm dvě nezávisle na sobě scrollující duhy ve standardním textovém režimu GR.0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_4.asm
309 rainbow_4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_4_list.asm
310 rainbow_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_4.map
       
311 rainbow_5.asm změna barvy v průběhu zobrazení televizních řádků https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_5.asm
312 rainbow_5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_5_list.asm
313 rainbow_5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_5.map
       
314 rainbow_6.asm změna barvy (duha) na obrazovce bez display listu https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_6.asm
315 rainbow_6_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_6_list.asm
316 rainbow_6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow_6.map
       
317 sound_1.asm čistý tón komorního A https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_1.asm
318 sound_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_1_list.asm
319 sound_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_1.map
       
320 sound_2.asm tón komorního A modulovaný šumem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_2.asm
321 sound_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_2_list.asm
322 sound_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_2.map
       
323 sound_3.asm původní tón komorního A, ovšem nyní je frekvence snížena na 15kHz https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_3.asm
324 sound_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_3_list.asm
325 sound_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_3.map
       
326 sound_4.asm nejnižší tón, který lze získat ze zvukového kanálu s osmibitovým děličem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_4.asm
327 sound_4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_4_list.asm
328 sound_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_4.map
       
329 sound_5.asm zázněje získané ze dvou zvukových kanálů s podobnou výstupní frekvencí https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_5.asm
330 sound_5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_5_list.asm
331 sound_5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_5.map
       
332 sound_6.asm zázněje získané ze čtyř zvukových kanálů s podobnou výstupní frekvencí https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_6.asm
333 sound_6_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_6_list.asm
334 sound_6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_6.map
       
335 sound_7.asm ukázka všech kombinací generátorů šumu (jeden kanál) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_7.asm
336 sound_7_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_7_list.asm
337 sound_7.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_7.map
       
338 sound_8.asm ovládání osmibitové děličky zvukového kanálu pomocí joysticku https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_8.asm
339 sound_8_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_8_list.asm
340 sound_8.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_8.map
       
341 sound_9.asm ovládání šestnáctibitové děličky dvou spojených zvukových kanálů pomocí joysticku https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_9.asm
342 sound_9_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_9_list.asm
343 sound_9.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_9.map
       
344 sound_A.asm nastavení horní propusti pro první zvukový kanál https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_A.asm
345 sound_A_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_A_list.asm
346 sound_A.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_A.map
       
347 sound_B.asm první zvukový kanál s horní propustí, ovládání frekvencí pomocí joysticku https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_B.asm
348 sound_B_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_B_list.asm
349 sound_B.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_B.map
       
350 sound_C.asm první zvukový kanál s horní propustí, ovládání frekvencí pomocí joysticku, změna generátoru šumu pro první kanál https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_C.asm
351 sound_C_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_C_list.asm
352 sound_C.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_C.map
       
353 sound_D.asm přivedení generátoru šumu na horní propust https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_D.asm
354 sound_D_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_D_list.asm
355 sound_D.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_D.map
       
356 sound_E.asm přímé ovládání reproduktoru (generuje se poškozený zvuk) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_E.asm
357 sound_E_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_E_list.asm
358 sound_E.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_E.map
       
359 sound_F.asm přímé ovládání reproduktoru bez dalších přerušení https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_F.asm
360 sound_F_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_F_list.asm
361 sound_F.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound_F.map
       
362 rnd_1.asm tisk náhodných ATASCII znaků s hodnotami přečtenými z registru RANDOM https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd_1.asm
363 rnd_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd_1_list.asm
364 rnd_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd_1.map
       
365 rnd_2.asm vyplnění 48 obrazových řádků v grafickém režimu 80×48 pixelů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd_2.asm
366 rnd_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd_2_list.asm
367 rnd_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd_2.map
       
368 rnd_3.asm vyplnění celé obrazovky režimu 80×48 pixelů pseudonáhodnými daty (verze bez maker) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd_3.asm
369 rnd_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd_3_list.asm
370 rnd_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd_3.map
       
371 rnd_4.asm vyplnění celé obrazovky režimu 80×48 pixelů pseudonáhodnými daty (verze s makry) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd_4.asm
372 rnd_4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd_4_list.asm
373 rnd_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd_4.map
       
374 paddle_1.asm příprava pro ovládání horizontální pozice spritu s využitím paddle https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/paddle_1.asm
375 paddle_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/paddle_1_list.asm
376 paddle_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/paddle_1.map
       
377 paddle_2.asm ovládání horizontální pozice spritu s využitím paddle https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/paddle_2.asm
378 paddle_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/paddle_2_list.asm
379 paddle_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/paddle_2.map
       
380 key_1.asm zobrazení stavu kláves START, SELECT a OPTION https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key_1.asm
381 key_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key_1_list.asm
382 key_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key_1.map
       
383 key_2.asm řízení barvy hráče (spritu) klávesami START, SELECT a OPTION https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key_2.asm
384 key_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key_2_list.asm
385 key_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key_2.map
       
386 key_3.asm přečtení kódu naposledy stisknuté klávesy https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key_3.asm
387 key_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key_3_list.asm
388 key_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key_3.map
       
389 key_4.asm využití systémové rutiny pro čtení kódu stisknuté klávesy https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key_4.asm
390 key_4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key_4_list.asm
391 key_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key_4.map
       
392 key_5.asm detekce stisku klávesy BREAK https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key_5.asm
393 key_5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key_5_list.asm
394 key_5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key_5.map
       
395 cio_put_char.asm zápis jednoho znaku do kanálu číslo 0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_put_char.asm
396 cio_put_char_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_put_char_list.asm
397 cio_put_char.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_put_char.map
       
398 cio_put_block.asm zápis bloku dat do kanálu číslo 0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_put_block.asm
399 cio_put_block_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_put_block_list.asm
400 cio_put_block.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_put_block.map
       
401 cio_get_block.asm přečtení bloku z kanálu číslo 0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_get_block.asm
402 cio_get_block_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_get_block_list.asm
403 cio_get_block.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_get_block.map
       
404 cio_modify_block.asm přečtení bloku, jeho modifikace a zpětný zápis (tisk) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_modify_block.asm
405 cio_modify_block_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_modify_block_list.asm
406 cio_modify_block.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_modify_block.map
       
407 cio_print_1.asm zápis textových dat či binárních dat? první varianta https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print_1.asm
408 cio_print_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print_1_list.asm
409 cio_print_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print_1.map
       
410 cio_print_2.asm zápis textových dat či binárních dat? druhá varianta https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print_2.asm
411 cio_print_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print_2_list.asm
412 cio_print_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print_2.map
       
413 cio_write_to_c.bas zápis několika bajtů na kazetu ve standardním formátu (Atari Basic) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_write_to_c.bas
414 cio_write_to_d.bas zápis několika bajtů do souboru uloženého na disketě (Atari Basic) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_write_to_d.bas
415 cio_write_to_h.bas zápis několika bajtů do souboru uloženého v adresáři namapovaného emulátorem (Atari Basic) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_write_to_h.bas
416 cio_print_to_h.bas zápis textové zprávy do souboru uloženého v adresáři namapovaného emulátorem (Atari Basic) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_print_to_h.bas
417 cio_read_from_h.bas přečtení textové zprávy ze souboru uloženého v adresáři namapovaného emulátorem (Atari Basic) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_read_from_h.bas
418 cio_write_to_h_2.bas zápis jediného bajtu do souboru uloženého v adresáři namapovaného emulátorem (Atari Basic) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_write_to_h_2.bas
419 function_sin_plot_bmp.bas uložení screenshotu do souboru ve formátu BMP (TurboBASIC XL) https://github.com/tisnik/8bit-fame/blob/master/curves/ex­plicit/function_sin_plot_bmp­.bas
       
420 cio_write_byte_1.asm práce se zařízeními přes CIO v assembleru – kostra programu https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_write_byte_1.asm
421 cio_write_byte_1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_write_byte_1_list.asm
422 cio_write_byte_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_write_byte_1.map
       
423 cio_write_byte_2.asm práce se zařízeními přes CIO v assembleru – funkční řešení https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_write_byte_2.asm
424 cio_write_byte_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_write_byte_2_list.asm
425 cio_write_byte_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_write_byte_2.map
       
426 cio_read_file.asm přečtení obsahu souboru (jeden textový řádek) přes CIO https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_read_file.asm
427 cio_read_file_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_read_file_list.asm
428 cio_read_file.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_read_file.map
       
429 cio_read_file_2.asm přečtení obsahu celého souboru přes CIO https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_read_file_2.asm
430 cio_read_file_2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_read_file_2_list.asm
431 cio_read_file_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_read_file_2.map
       
432 cio_print_3.asm zápis s kontrolou výsledku operace (korektní provedení) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print_3.asm
433 cio_print_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print_3_list.asm
434 cio_print_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print_3.map
       
435 cio_print_4.asm zápis s kontrolou výsledku operace (provedení vede k chybě) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print_4.asm
436 cio_print_4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print_4_list.asm
437 cio_print_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print_4.map
       
438 cio_write_to_h_3.bas zápis jediného bajtu do souboru uloženého v adresáři namapovaného emulátorem (Atari Basic), realizace přes XIO https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_write_to_h_3.bas
       
439 cio_plot.bas vybarvení pixelu přes CIO operace https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_plot.bas
440 cio_drawto.bas kreslení úseček s využitím XIO https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_drawto.bas
441 cio_fill_1.bas kreslení polygonu s využitím XIO (bez zarážky) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_fill_1.bas
442 cio_fill_2.bas kreslení polygonu s využitím XIO (se zarážkou) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_fill_2.bas
       
443 cio_write_byte_3.asm kontrola chyby po zápisu bajtu na zvolené zařízení https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_write_byte_3.asm
444 cio_write_byte_3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_write_byte_3_list.asm
445 cio_write_byte_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_write_byte_3.map
       
446 cio_null_device.asm definice „nulového“ zařízení, které pro všechny operace hlásí úspěšné provedení https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_null_device.asm
447 cio_null_device_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_null_device_list.asm
448 cio_null_device.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_null_device.map
       
449 cio_null_device_err.asm definice „nulového“ zařízení, které pro všechny operace hlásí chybu https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_null_device_err.asm
450 cio_null_device_err_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_null_device_err_list.asm
451 cio_null_device_err.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_null_device_err.map
       
452 cio_custom_device.asm zařízení, které vypisuje informace o své činnosti na obrazovku https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_custom_device.asm
453 cio_custom_device_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_custom_device_list.asm
454 cio_custom_device.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_custom_device.map
       
455 g_device.asm zařízení pro ovládání spritu/spritů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/g_device.asm
456 g_device_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/g_device_list.asm
457 g_device.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/g_device.map
       
458 g_device.bas komplexní demo ukazující možnosti zařízení G (Atari Basic), realizace přes CIO https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/g_device.bas
459 g_device_1.bas demo ukazující možnosti zařízení G (Atari Basic): otevření a zavření https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/g_device_1.bas
460 g_device_2.bas demo ukazující možnosti zařízení G (Atari Basic): práce s více zařízeními https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/g_device_2.bas
       
461 PRG1.asm jednoduchý program se třemi instrukcemi (bez komentářů) https://github.com/tisnik/8bit-fame/blob/master/Assembler-editor/PRG1.asm
462 listing1.asm listing vygenerovaný Atari Assembler/Editorem při překladu https://github.com/tisnik/8bit-fame/blob/master/Assembler-editor/listing1.asm
463 PRG2.asm jednoduchý program se třemi instrukcemi (s komentáři) https://github.com/tisnik/8bit-fame/blob/master/Assembler-editor/PRG2.asm
464 listing2.asm listing vygenerovaný Atari Assembler/Editorem při překladu https://github.com/tisnik/8bit-fame/blob/master/Assembler-editor/listing2.asm
465 sprites.asm zobrazení spritů, ovládání horizontální pozice prvního hráče joystickem https://github.com/tisnik/8bit-fame/blob/master/Assembler-editor/sprites.asm
466 listing3.asm listing vygenerovaný Atari Assembler/Editorem při překladu https://github.com/tisnik/8bit-fame/blob/master/Assembler-editor/
       
467 prg1.asm nastavení barvy okraje obrazovky, varianta pro MAC-65 https://github.com/tisnik/8bit-fame/blob/master/MAC-65/prg1.asm
468 prg1_list.asm listing vygenerovaný assemblerem MAC-65 při překladu https://github.com/tisnik/8bit-fame/blob/master/MAC-65/prg1_list.asm
469 prg2.asm nastavení barvy okraje obrazovky, přidání přepínače pro překlad do paměti, varianta pro MAC-65 https://github.com/tisnik/8bit-fame/blob/master/MAC-65/prg2.asm
470 prg2_list.asm listing vygenerovaný assemblerem MAC-65 při překladu https://github.com/tisnik/8bit-fame/blob/master/MAC-65/prg2_list.asm
471 prg3.asm nastavení barvy okraje obrazovky, přidání podmíněných skoků https://github.com/tisnik/8bit-fame/blob/master/MAC-65/prg3.asm
472 prg3_list.asm listing vygenerovaný assemblerem MAC-65 při překladu https://github.com/tisnik/8bit-fame/blob/master/MAC-65/prg3_list.asm
473 sprites.asm zobrazení spritů, ovládání horizontální pozice prvního hráče joystickem, varianta pro MAC-65 https://github.com/tisnik/8bit-fame/blob/master/MAC-65/sprites.asm
474 sprites_list.asm listing vygenerovaný assemblerem MAC-65 při překladu https://github.com/tisnik/8bit-fame/blob/master/MAC-65/sprites_list.asm
475 macro.asm definice jednoduchého makra bez parametrů https://github.com/tisnik/8bit-fame/blob/master/MAC-65/macro.asm
476 macro_list.asm listing vygenerovaný assemblerem MAC-65 při překladu https://github.com/tisnik/8bit-fame/blob/master/MAC-65/macro_list.asm
       
477 hello.act program typu „Hello, world!“ naprogramovaný v jazyku Action! https://github.com/tisnik/8bit-fame/blob/master/Action!/hello.act
478 color1.act nastavení barvy pozadí s využitím proměnné uložené na určitém místě v paměti https://github.com/tisnik/8bit-fame/blob/master/Action!/color1.act
479 color1.asm výsledek překladu demonstračního příkladu do strojového kódu https://github.com/tisnik/8bit-fame/blob/master/Action!/color1.asm
480 color2.act nastavení barvy pozadí s využitím proměnné uložené na určitém místě v paměti https://github.com/tisnik/8bit-fame/blob/master/Action!/color2.act
481 color2.asm výsledek překladu demonstračního příkladu do strojového kódu https://github.com/tisnik/8bit-fame/blob/master/Action!/color2.asm
482 sprite1.act zobrazení spritu s nastavením jeho horizontální pozice a barvy https://github.com/tisnik/8bit-fame/blob/master/Action!/sprite1.act
483 sprite1.asm výsledek překladu demonstračního příkladu do strojového kódu https://github.com/tisnik/8bit-fame/blob/master/Action!/sprite1.asm
484 sprite2.act horizontální pohyb spritu s čekáním na dokončení zobrazení snímku https://github.com/tisnik/8bit-fame/blob/master/Action!/sprite2.act
485 sprite2.asm výsledek překladu demonstračního příkladu do strojového kódu https://github.com/tisnik/8bit-fame/blob/master/Action!/sprite2.asm
486 sprite3.act horizontální pohyb spritu řízený joystickem https://github.com/tisnik/8bit-fame/blob/master/Action!/sprite3.act
487 sprite3.asm výsledek překladu demonstračního příkladu do strojového kódu https://github.com/tisnik/8bit-fame/blob/master/Action!/sprite3.asm
488 inc.act překlad operace inkrementace hodnoty pro proměnné různých typů https://github.com/tisnik/8bit-fame/blob/master/Action!/inc.act
489 inc.asm výsledek překladu demonstračního příkladu do strojového kódu https://github.com/tisnik/8bit-fame/blob/master/Action!/inc.asm
490 rsh.act překlad operace pro posun doprava pro proměnné různých typů https://github.com/tisnik/8bit-fame/blob/master/Action!/rsh.act
491 rsh.asm výsledek překladu demonstračního příkladu do strojového kódu https://github.com/tisnik/8bit-fame/blob/master/Action!/rsh.asm
492 lsh.act překlad operace pro posun doleva o větší počet bitů https://github.com/tisnik/8bit-fame/blob/master/Action!/lsh.act
493 lsh.asm výsledek překladu demonstračního příkladu do strojového kódu https://github.com/tisnik/8bit-fame/blob/master/Action!/lsh.asm
494 multiply.act překlad součinu obsahu proměnné s konstantou https://github.com/tisnik/8bit-fame/blob/master/Action!/multiply.act
495 multiply.asm výsledek překladu demonstračního příkladu do strojového kódu https://github.com/tisnik/8bit-fame/blob/master/Action!/multiply.asm
       
496 Makefile make soubor pro překlad příkladů překladačem cc65 https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/Makefile
497 poke.c změna barvy pozadí textu s využitím makra POKE https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/poke.c
498 poke.asm kód v assembleru vygenerovaný překladačem cc65 https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/poke.asm
499 poke.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/poke.map
500 background_color.c změna barvy pozadí textu přes struktury namapované na přesné adresy https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/background_color.c
501 background_color.asm kód v assembleru vygenerovaný překladačem cc65 https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/background_color.asm
502 background_color.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/background_color.map
503 sprite1.c vykreslení spritu s využitím makra POKE https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite1.c
504 sprite1.asm kód v assembleru vygenerovaný překladačem cc65 https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite1.asm
505 sprite1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite1.map
505 sprite2.c vykreslení spritu přes struktury namapované na přesné adresy https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite2.c
506 sprite2.asm kód v assembleru vygenerovaný překladačem cc65 https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite2.asm
507 sprite2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite2.map
508 sprite3.c pohybující se sprite, řešeno přes struktury namapované na přesné adresy https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite3.c
509 sprite3.asm kód v assembleru vygenerovaný překladačem cc65 https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite3.asm
510 sprite3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite3.map
511 sprite4.c pohybující se sprite, řešeno čtením z paměti přes ukazatele https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite4.c
512 sprite4.asm kód v assembleru vygenerovaný překladačem cc65 https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite4.asm
513 sprite4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite4.map
514 sprite5.c pohybující se sprite, řešeno přes makro PEEK https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite5.c
515 sprite5.asm kód v assembleru vygenerovaný překladačem cc65 https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite5.asm
516 sprite5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite5.map
       
517 sprite6.c využití lokálních proměnných označených jako register https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite6.c
518 sprite6.asm kód v assembleru vygenerovaný překladačem cc65 https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite6.asm
519 sprite6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite6.map
520 sprite7.c přímý přístup k akumulátoru z céčka https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite7.c
521 sprite7.asm kód v assembleru vygenerovaný překladačem cc65 https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite7.asm
522 sprite6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/sprite6.map
523 print_1.c zápis do obrazové paměti: idiomatická varianta psaná v céčku https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/print_1.c
524 print_1.asm kód v assembleru vygenerovaný překladačem cc65 https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/print_1.asm
525 print_1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/print_1.map
526 print_2.c počitadlo smyčky i ukazatel uložený v nulté stránce paměti https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/print_2.c
527 print_2.asm kód v assembleru vygenerovaný překladačem cc65 https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/print_2.asm
528 print_2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/print_2.map
529 print_3.c využití makra POKE pro zápis do obrazové paměti https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/print_3.c
530 print_3.asm kód v assembleru vygenerovaný překladačem cc65 https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/print_3.asm
531 print_3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/print_3.map
532 print_4.c kombinace céčka a assembleru https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/print_4.c
533 print_4.asm kód v assembleru vygenerovaný překladačem cc65 https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/print_4.asm
534 print_4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-cc65/print_4.map
       
535 hello_1.bas Hello world ve Fast Basicu, nekorektní varianta https://github.com/tisnik/8bit-fame/blob/master/FastBasic/hello_1.bas
536 hello_2.bas Hello world ve Fast Basicu, korektní varianta https://github.com/tisnik/8bit-fame/blob/master/FastBasic/hello_2.bas
537 add.bas součet hodnot dvou proměnných https://github.com/tisnik/8bit-fame/blob/master/FastBasic/add.bas
538 add.asm součet hodnot dvou proměnných po překladu do assembleru https://github.com/tisnik/8bit-fame/blob/master/FastBasic/add.asm
539 fact_1.bas výpočet faktoriálu, celočíselná varianta https://github.com/tisnik/8bit-fame/blob/master/FastBasic/fact_1.bas
540 fact_2.bas výpočet faktoriálu, FP varianta https://github.com/tisnik/8bit-fame/blob/master/FastBasic/fact_2.bas
541 fact_3.bas výpočet faktoriálu, přepis z Turbo BASICu https://github.com/tisnik/8bit-fame/blob/master/FastBasic/fact_3.bas
542 gfx_01.bas vykreslení kříže ze dvou barev https://github.com/tisnik/8bit-fame/blob/master/FastBasic/gfx_01.bas
543 gfx_02.bas vykreslení vlajky, výplň části plochy https://github.com/tisnik/8bit-fame/blob/master/FastBasic/gfx_02.bas
544 pmg1.bas zobrazení prvního hráče na obrazovce https://github.com/tisnik/8bit-fame/blob/master/FastBasic/pmg1.bas
545 pmg2.bas řízení prvního hráče joystickem https://github.com/tisnik/8bit-fame/blob/master/FastBasic/pmg2.bas
546 pmg3.bas řízení prvního hráče joystickem, kratší varianta https://github.com/tisnik/8bit-fame/blob/master/FastBasic/pmg3.bas
       
547 snowcrash.bas benchmark: vyplnění bloku paměti náhodnými hodnotami https://github.com/tisnik/8bit-fame/blob/master/FastBasic/snow­crash.bas
548 bubble_sort_fp.bas benchmark: seřazení prvků pole (FP varianta) https://github.com/tisnik/8bit-fame/blob/master/FastBasic/bub­ble_sort_fp.bas
549 bubble_sort_int.bas benchmark: seřazení prvků pole (celočíselná varianta) https://github.com/tisnik/8bit-fame/blob/master/FastBasic/bub­ble_sort_int.bas
550 move.bas benchmark: vertikální posun spritu https://github.com/tisnik/8bit-fame/blob/master/FastBasic/move.bas
       
553 snowcrash.bas benchmark: vyplnění bloku paměti náhodnými hodnotami (Atari BASIC) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/snowcrash.bas
554 bubble_sort.bas benchmark: seřazení prvků pole (Atari BASIC) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/bubble_sort.bas
555 move.bas benchmark: vertikální posun spritu (Atari BASIC) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/move.bas
       
556 snowcrash.bas benchmark: vyplnění bloku paměti náhodnými hodnotami (Atari BASIC) https://github.com/tisnik/8bit-fame/blob/master/Turbo-Basic%20XL/snowcrash.bas
557 bubble_sort.bas benchmark: seřazení prvků pole (Atari BASIC) https://github.com/tisnik/8bit-fame/blob/master/Turbo-Basic%20XL/bubble_sort.bas
558 move.bas benchmark: vertikální posun spritu (Atari BASIC) https://github.com/tisnik/8bit-fame/blob/master/Turbo-Basic%20XL/move.bas

Odkazy na Internetu

  1. MOS 6502 instruction set
    http://www.6502.org/users/o­belisk/6502/instructions.html
  2. EXE File Format Description
    https://gury.atari8.info/ref­s/file_formats_exe.php
  3. XEX Filter – A toolkit to analyze and manipulate Atari binary files
    https://www.vitoco.cl/atari/xex-filter/index.html
  4. chkxex.py
    https://raw.githubusercon­tent.com/seban-slt/tcx_tools/refs/heads/mas­ter/chkxex.py
  5. ca65 Users Guide
    https://cc65.github.io/doc/ca65.html
  6. cc65 Users Guide
    https://cc65.github.io/doc/cc65.html
  7. ld65 Users Guide
    https://cc65.github.io/doc/ld65.html
  8. da65 Users Guide
    https://cc65.github.io/doc/da65.html
  9. Překladače jazyka C pro historické osmibitové mikroprocesory
    https://www.root.cz/clanky/prekladace-jazyka-c-pro-historicke-osmibitove-mikroprocesory/
  10. Překladače programovacího jazyka C pro historické osmibitové mikroprocesory (2)
    https://www.root.cz/clanky/prekladace-programovaciho-jazyka-c-pro-historicke-osmibitove-mikroprocesory-2/
  11. Getting Started Programming in C: Coding a Retro Game with C Part 2
    https://retrogamecoders.com/getting-started-with-c-cc65/
  12. NES game development in 6502 assembly – Part 1
    https://kibrit.tech/en/blog/nes-game-development-part-1
  13. NES 6502 Programming Tutorial – Part 1: Getting Started
    https://dev.xenforo.relay­.cool/index.php?threads/nes-6502-programming-tutorial-part-1-getting-started.858389/
  14. Minimal NES example using ca65
    https://github.com/bbbradsmith/NES-ca65-example
  15. List of 6502-based Computers and Consoles
    https://www.retrocompute.co.uk/list-of-6502-based-computers-and-consoles/
  16. 6502 – the first RISC µP
    http://ericclever.com/6500/
  17. 3 Generations of Game Machine Architecture
    http://www.atariarchives.or­g/dev/CGEXPO99.html
  18. “Hello, world” from scratch on a 6502 — Part 1
    https://www.youtube.com/wat­ch?v=LnzuMJLZRdU
  19. A Tour of 6502 Cross-Assemblers
    https://bumbershootsoft.wor­dpress.com/2016/01/31/a-tour-of-6502-cross-assemblers/
  20. Adventures with ca65
    https://atariage.com/forum­s/topic/312451-adventures-with-ca65/
  21. example ca65 startup code
    https://atariage.com/forum­s/topic/209776-example-ca65-startup-code/
  22. 6502 PRIMER: Building your own 6502 computer
    http://wilsonminesco.com/6502primer/
  23. 6502 Instruction Set
    https://www.masswerk.at/6502/6502_in­struction_set.html
  24. Chip Hall of Fame: MOS Technology 6502 Microprocessor
    https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-mos-technology-6502-microprocessor
  25. Single-board computer
    https://en.wikipedia.org/wiki/Single-board_computer
  26. www.6502.org
    http://www.6502.org/
  27. 6502 PRIMER: Building your own 6502 computer – clock generator
    http://wilsonminesco.com/6502pri­mer/ClkGen.html
  28. Great Microprocessors of the Past and Present (V 13.4.0)
    http://www.cpushack.com/CPU/cpu.html
  29. Jak se zrodil procesor?
    https://www.root.cz/clanky/jak-se-zrodil-procesor/
  30. Osmibitové mikroprocesory a mikrořadiče firmy Motorola (1)
    https://www.root.cz/clanky/osmibitove-mikroprocesory-a-mikroradice-firmy-motorola-1/
  31. Mikrořadiče a jejich použití v jednoduchých mikropočítačích
    https://www.root.cz/clanky/mikroradice-a-jejich-pouziti-v-jednoduchych-mikropocitacich/
  32. Mikrořadiče a jejich aplikace v jednoduchých mikropočítačích (2)
    https://www.root.cz/clanky/mikroradice-a-jejich-aplikace-v-jednoduchych-mikropocitacich-2/
  33. 25 Microchips That Shook the World
    https://spectrum.ieee.org/tech-history/silicon-revolution/25-microchips-that-shook-the-world
  34. Comparison of instruction set architectures
    https://en.wikipedia.org/wi­ki/Comparison_of_instructi­on_set_architectures
  35. How To Start Learning Atari 8 Bit Assembly For Free
    https://forums.atariage.com/to­pic/300732-how-to-start-learning-atari-8-bit-assembly-for-free/
  36. WUDSN (Demo Group)
    https://www.wudsn.com/
  37. Machine Language For Beginners
    https://www.atariarchives.org/mlb/
  38. Assembly language: all about I/O
    https://www.atarimagazines­.com/v3n8/AllAbout_IO.html
  39. Sedmdesátiny assemblerů: lidsky čitelný strojový kód
    https://www.root.cz/clanky/sed­mdesatiny-assembleru-lidsky-citelny-strojovy-kod/
  40. Color names
    https://atariwiki.org/wiki/Wi­ki.jsp?page=Color%20names
  41. ATASCII
    https://en.wikipedia.org/wiki/ATASCII
  42. Put characters in display ram isn't ATASCII?
    https://forums.atariage.com/to­pic/359973-put-characters-in-display-ram-isnt-atascii/
  43. ATASCII And Internal Character Code Values
    https://www.atariarchives­.org/mapping/appendix10.php
  44. Reading ATASCII from the keyboard in assembly
    https://forums.atariage.com/to­pic/361733-reading-atascii-from-the-keyboard-in-assembly/
  45. Why does the 6502 JSR instruction only increment the return address by 2 bytes?
    https://retrocomputing.stac­kexchange.com/questions/19543/why-does-the-6502-jsr-instruction-only-increment-the-return-address-by-2-bytes
  46. Pushing return address to stack off by 1 byte
    https://forums.atariage.com/to­pic/378206-pushing-return-address-to-stack-off-by-1-byte/
  47. Intel x86 documentation has more pages than the 6502 has transistors
    https://www.righto.com/2013/09/intel-x86-documentation-has-more-pages.html
  48. Clearing a Section of Memory
    http://www.6502.org/source/ge­neral/clearmem.htm
  49. Practical Memory Move Routines by Bruce Clark
    http://www.6502.org/source/ge­neral/memory_move.html
  50. 6502 Assembly Programming Guide
    https://neumont-gamedev.github.io/posts/retrogamedev-6502-guide/
  51. Off-by-one error
    https://en.wikipedia.org/wiki/Off-by-one_error
  52. 6502 cycle times
    https://www.nesdev.org/wi­ki/6502_cycle_times
  53. Atari TIA
    http://www.atarihq.com/danb/tia.shtml
  54. TIA Playfield
    http://www.atarihq.com/dan­b/TIA/Playfield.shtml
  55. Atari Inc.:
    ANTIC C012296 (NTSC) Revision D
    Atari Incorporated, Sunnyvale CA, 1982
  56. Atari Inc.:
    GTIA C014805 (NTSC) Revision A
    Atari Incorporated, Sunnyvale CA, 1982
  57. Atari 5200
    http://www.atariage.com/sof­tware_search.html?SystemID=5200
  58. Atari 5200 Hardware and Accessories
    http://www.atariage.com/5200/ar­chives/hardware.html
  59. Atari 5200 Screenshots
    http://www.atariage.com/sys­tem_items.html?SystemID=5200&I­temTypeID=SCREENSHOT
  60. History of video game consoles (second generation): Wikipedia
    http://en.wikipedia.org/wi­ki/History_of_video_game_con­soles_(second_generation)
  61. Atari 5200: Wikipedia
    http://en.wikipedia.org/wi­ki/Atari_5200
  62. Player-Missile Graphics
    https://www.atariarchives­.org/agagd/chapter5.php
  63. Sprite (computer graphics)
    https://en.wikipedia.org/wi­ki/Sprite_(computer_graphic­s)
  64. Atari Graphics Demonstrations by Underground Software, 1985 | Atari 8 bit Demo
    https://www.youtube.com/wat­ch?v=h7N9EYSyCkw
  65. Atari 8-bit Display List Interrupts: A Complete(ish) Tutorial
    https://playermissile.com/dli_tu­torial/
  66. Atari Assembler Editor manual
    https://atariwiki.org/wiki/at­tach/Atari%20Assembler%20E­ditor/ATARI%20Assembler%20E­ditor%20User-s%20Manual-OCR.pdf
  67. Atari 8-bit Fine Scrolling: A Complete(ish) Tutorial
    https://playermissile.com/scro­lling_tutorial/index.html
  68. Atari Fine Scrolling
    https://www.atarimagazines­.com/compute/issue67/338_1_A­tari_Fine_Scrolling.php
  69. CTIA / GTIA Pinout Diagram
    https://user.xmission.com/~tre­vin/atari/gtia_pinout.html
  70. GTIA Modes
    https://page6.org/archive/is­sue_02/page_10.htm
  71. 56 graphic modes
    https://www.atari800xl.eu/docs/kb/kb-hardware-0005-atari-8bit-56-graphic-modes.html
  72. UNLOCKING THE 56 GRAPHIC MODES
    https://www.atarimagazines­.com/v3n5/allmodes.html
  73. GTIA Modes 9, 10 & 11 + ANTIC data and color clocks
    https://forums.atariage.com/to­pic/366256-gtia-modes-9-10-11-antic-data-and-color-clocks/
  74. ANTIC, GTIA and timing info
    https://atarimax.com/jindrou­sh.atari.org/atanttim.html
  75. 6.10 Cycle timing
    https://github.com/AnimaIn­Corpore/A8E/blob/main/AHRM/6­.%20CTIA-GTIA/10.%20Cycle%20timing.md
  76. Doug Neubauer
    https://en.wikipedia.org/wi­ki/Doug_Neubauer
  77. POKEY
    https://en.wikipedia.org/wiki/POKEY
  78. Inside the Atari 800XL
    https://www.goto10retro.com/p/800xl-inside
  79. Grayscale Project – „Jam Session“ – Chiptune Visualization / Atari SAP
    https://www.youtube.com/watch?v=Qx-AHgvwrHo&list=PL92E73FD91764173B
  80. POKEY MUSIC ( ATARI XL / XE ) =+ MUSIC FROM POLAND += DEMO
    https://www.youtube.com/wat­ch?v=5PswfMjMop4&list=RD5PswfMjMop4&star­t_radio=1
  81. Atari.org
    http://www.atari.org/
  82. Atari POKEY
    http://www.absoluteastrono­my.com/topics/Atari_POKEY
  83. Chiptune
    http://www.absoluteastrono­my.com/topics/Chiptune
  84. ASAP – Another Slight Atari Player
    http://asap.sourceforge.net/
  85. Atari SAP music archive
    http://asma.atari.org/
  86. RASTER Music Tracker (RMT)
    http://raster.infos.cz/ata­ri/rmt/rmt.htm
  87. POKEY explorer
    https://github.com/ivop/pokey-explorer
  88. POKEY C012294 Documentation
    https://7800.8bitdev.org/in­dex.php/POKEY_C012294_Docu­mentation
  89. Pokey Registers
    https://user.xmission.com/~tre­vin/atari/pokey_regs.html
  90. POKEY CO12294
    http://krap.pl/mirrorz/ata­ri/homepage.ntlworld.com/kry­ten_droid/Atari/800XL/ata­ri_hw/pokey.htm
  91. De Re Atari: SOUND
    https://www.atariarchives­.org/dere/chapt07.php#H7_3_5
  92. Paddle (game controller)
    https://en.wikipedia.org/wi­ki/Paddle_(game_controller)
  93. Interfacing Your Atari
    https://www.atariarchives­.org/creativeatari/Interfa­cing_Your_Atari.php
  94. Atari SIO
    https://en.wikipedia.org/wi­ki/Atari_SIO
  95. Atari Chips
    https://atarimax.com/jindrou­sh.atari.org/achip.html
  96. Table 4: Keyboard Code Index, KEYCODE: ATASCII
    https://www.atariarchives­.org/c3ba/kcindex.php
  97. SIO2PC
    http://raster.atariportal­.cz/hw/sio2pc.htm
  98. Using Serial Input/Output
    https://www.atarimagazines­.com/compute/issue64/insig­ht_atari.php
  99. SIO ROUTINES
    https://www.atariarchives­.org/mmm/sio.php
  100. ATARI 8 bit Serial Input/Output (SIO)
    https://allpinouts.org/pi­nouts/connectors/serial/a­tari-8-bit-serial-input-output-sio/
  101. SIOspecs
    https://archive.org/details/SIOspecs
  102. Interview with Joe Decuir
    http://www.atarimuseum.com/ar­ticles/joedecuir.html
  103. USB AND OS/2
    http://www.os2voice.org/VNL/pas­t_issues/VNL1199H/vnewsf5­.htm
  104. Standards and specs: The ins and outs of USB
    http://www.ibm.com/develo­perworks/power/library/pa-spec7.html
  105. USB Class Codes
    http://www.usb.org/develo­pers/defined_class
  106. Universal Serial Bus
    http://en.wikipedia.org/wiki/Usb
  107. SMBus.org
    http://www.smbus.org
  108. SMBus FAQ
    http://www.smbus.org/faq/faq.htm
  109. System Management Bus
    http://en.wikipedia.org/wi­ki/System_Management_Bus
  110. SMBus Specifications
    http://www.smbus.org/specs
  111. SMBus Control Method Interface Specification Version 1.0
    http://www.smbus.org/spec­s/smbus_cmi10.pdf
  112. System Management Bus (SMBus) Specification Version 2.0
    http://www.smbus.org/spec­s/smbus20.pdf
  113. Atari Connection Machine
    http://acm.atariportal.cz/s/con8bit/8bits
  114. Atari Program Recorder
    https://en.wikipedia.org/wi­ki/Atari_Program_Recorder
  115. THE ATARI CASSETTE
    https://www.atariarchives­.org/dere/chaptC.php
  116. Turbo-2000
    https://www.atari-800.cz/turbo-2000
  117. Atari XC12 FSK Decoder
    https://zeninstruments.blog­spot.com/2024/08/atari-xc12-fsk-decoder.html
  118. Clock recovery
    https://en.wikipedia.org/wi­ki/Clock_recovery
  119. Jiří Richter (programátor)
    https://cs.wikipedia.org/wi­ki/Ji%C5%99%C3%AD_Richter_(pro­gram%C3%A1tor)
  120. Spectrum tape interface
    https://sinclair.wiki.zxnet­.co.uk/wiki/Spectrum_tape_in­terface
  121. How Tape Loading Works
    https://lemmings.info/how-tape-loading-works/
  122. CIO Reference
    https://atarifoundry.com/doc­s/forge/advanced-topics/cio-reference
  123. The central input-output system in Atari computers
    https://www.atariarchives­.org/alp/chapter_9.php
  124. ATR: chpt.1: Central Input/Output (CIO)
    https://www.atariarchives­.org/cfn/12/02/0010.php
  125. NOTE and POINT
    https://atarifoundry.com/doc­s/forge/advanced-topics/note-point
  126. Customizing the Atari Operating System Device Handlers: Part 1
    https://www.atarimagazines­.com/v8n2/customhandlers.html
  127. Customizing the Atari Operating System Device Handlers: Part II
    https://www.atarimagazines­.com/v8n3/OperatingSystem­Handlers.html
  128. Spectrum tape interface
    https://sinclair.wiki.zxnet­.co.uk/wiki/Spectrum_tape_in­terface
  129. Turbo 2000
    http://wiki.oldcomp.cz/in­dex.php?title=Turbo_2000
  130. Původní manuál k systému Turbo 2000
    http://wiki.oldcomp.cz/ima­ges/6/65/Zak_praha_1987_p2_tur­bo2000.pdf
  131. Mark and space
    https://en.wikipedia.org/wi­ki/Mark_and_space
  132. Obdélníkový průběh
    https://cs.wikipedia.org/wi­ki/Obd%C3%A9ln%C3%ADkov%C3%BD_pr%C5%AF­b%C4%9Bh
  133. All you ever wanted to know about: Atari Cartridges
    https://atariwiki.org/wiki/Wi­ki.jsp?page=Cartridges
  134. Manuál k MAC/65
    https://data.atariwiki.org/DOC/MAC-65_and_BUG-65_Rev._1.1-OSS-OCR.pdf
  135. Manuál k DDT
    https://atariwiki.org/wiki/at­tach/DDT/DDT_1.0_Manual.pdf
  136. MAC/65 na Atari wiki
    https://www.atariwiki.org/wi­ki/Wiki.jsp?page=Mac65
  137. Madass – home page
    https://mads.atari8.info/
  138. Mad-Assembler (GitHub)
    https://github.com/tebe6502/Mad-Assembler
  139. The 6502/65C02/65C816 Instruction Set Decoded
    https://llx.com/Neil/a2/opcodes.html
  140. Action
    https://atariwiki.org/wiki/Wi­ki.jsp?page=Action#top
  141. Action: manuál
    https://www.atarimania.com/do­cuments/atari-action-reference-manual.pdf
  142. Getting in on the Action 1
    https://atariwiki.org/wiki/Wi­ki.jsp?page=Getting%20in%20on%20the%20Ac­tion%201
  143. Getting in on the Action 2
    https://atariwiki.org/wiki/Wi­ki.jsp?page=Getting%20in%20on%20the%20Ac­tion%202
  144. Category:Action! na RosettaCode
    https://rosettacode.org/wi­ki/Category:Action!
  145. Deep Blue C Compiler
    https://www.atarimania.com/games/atari-400-800-xl-xe-utilities-deep-blue-c-compiler-12478
  146. DEEP BLUE C Manual
    https://www.atariarchives­.org/APX/showdocs.php?cat=20166
  147. C/65
    https://www.atarimania.com/games/atari-400-800-xl-xe-utilities-c-65-19204
  148. Getting Started Programming in C: Coding a Retro Game with C Part 2
    https://retrogamecoders.com/getting-started-with-c-cc65/
  149. CC65 Advanced optimizations
    https://github.com/ilmenit/CC65-Advanced-Optimizations/tree/master/04-get%20rid%20of%20C%20stack
  150. Bubble sort
    https://en.wikipedia.org/wi­ki/Bubble_sort
  151. Repositář projektu Fast Basic
    https://github.com/dmsc/fastbasic
  152. Fast Basic manual
    https://github.com/dmsc/fas­tbasic/blob/master/manual­.md
  153. Fast Basic Cross Compiler
    https://github.com/dmsc/fas­tbasic/blob/master/compiler/U­SAGE.md
  154. Short description of all Atari Basic instructions
    https://blog.3b2.sk/igi/Da­ta/Atari/Basic/abasic.html
  155. Revisiting a 1994 paper: When and why is RPN superior to algebraic? Hoffman et al.
    https://www.youtube.com/wat­ch?v=PBu7tpyttNY
  156. What Happened to the HP-48? Why It Lost the Classroom to a Simpler TI
    https://www.youtube.com/wat­ch?v=05IupxOjwak
  157. Why Does Wall Street Still Use the HP-12C? HP Has Sold It Since 1981
    https://www.youtube.com/wat­ch?v=2qUUKc2YFEA
  158. Reverse Polish Notation: Types of Mathematical Notations & Using A Stack To Solve RPN Expressions
    https://www.youtube.com/wat­ch?v=qN8LPIcY6K4
  159. Stack manipulation operators
    https://www.forth.com/starting-forth/2-stack-manipulation-operators-arithmetic/
Neutrální ikona do widgetu na odběr článků ze seriálů

Zajímá vás toto téma? Chcete se o něm dozvědět víc?

Objednejte si upozornění na nově vydané články do vašeho mailu. Žádný článek vám tak neuteče.


Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.