Jak probíhal vývoj pro osmibitová Atari před 45 lety?

25. 8. 2026
Doba čtení: 79 minut

Sdílet

Atari Assembler/Editor v akci.
Autor: tisnik, podle licence: Rights Managed
Vývoj aplikací pro počítače Atari s využitím cross assembleru CA65 není příliš komplikovaný. Vývoj totiž provádíme na PC se všemi jeho možnostmi. Pokusme se vrátit o 45 let zpět a použít Atari Assembler/Editor.

Na osmibitových mikropočítačích (a nyní se zaměříme především na domácí mikropočítače) měli ti uživatelé, kteří se chtěli zabývat programováním, na výběr z relativně velkého množství různých vývojových nástrojů a pomůcek (bylo jich dokonce až překvapivě velké množství – desítky programovacích jazyků atd.). Některé mikropočítače byly vybaveny pouze velmi jednoduchým operačním systémem zajišťujícím základní vstupně/výstupní operace (čtení klávesnice, zápis znaku na obrazovku, rutiny pro čtení a zápis dat na magnetofon).

Co se dozvíte v článku
  1. Monitory
  2. Dobové assemblery pro osmibitová Atari
  3. Vývoj s využitím Atari Assembler/Editoru krok za krokem
  4. Zápis jednoduchého programu
  5. Překlad programu s kontrolou chyb
  6. Spuštění a ladění s využitím debuggeru
  7. Uložení a zpětné načtení zdrojového kódu programu, uložení listingu vytvořeného assemblerem
  8. Uložení výsledného spustitelného programu na zvolené zařízení
  9. Analýza souboru PRG1.OBJ, který vznikl překladem
  10. Složitější projekt, pro jehož vývoj použijeme Atari Assembler/Editor
  11. Zdrojový kód programu určený pro překlad assemblerem CA65
  12. Definice adres registrů a dalších konstant použitých v programu
  13. Nastavení barev, pozic hráčů, spojení střel do pátého hráče a povolení DMA
  14. Nastavení bitmap (tvarů) všech pěti hráčů
  15. Hlavní programová smyčka: pohyb spritu joystickem
  16. Výsledná podoba celého programu ve verzi pro Atari Assembler/Editor
  17. Listing vygenerovaný assemblerem při překladu
  18. Repositář s demonstračními příklady
  19. Odkazy na Internetu

Většinou však byly domácí osmibitové počítače vybaveny nějakým dialektem programovacího jazyka BASIC (i když by se spíše hodilo mít k dispozici FORTH, to je však téma na delší debatu). I když se BASIC hodil na provádění různých výpočtů, jednodušších vizualizací a simulací (méně již na zpracování dat), poměrně rychle se narazilo na jeho limity. Především se jednalo o rychlost resp. pomalost samotného interpretru, obtížnou tvorbu strukturovaných programů a mnohdy i větší paměťové nároky.

Atari BASIC pochopitelně nebyl jediným dostupným programovacím jazykem.

 Obrázek 1: Atari BASIC pochopitelně nebyl jediným dostupným programovacím jazykem pro osmibitové domácí mikropočítače Atari.

Autor: tisnik, podle licence: Rights Managed

Alternativou používanou profesionály byly assemblery. Dnes si ukážeme tvorbu programů v Atari Assembler/Editoru, což je sice pomalý, ovšem možná až (s ohledem na jeho velikost) překvapivě dobrý assembler. Práce v tomto assembleru je do jisté míry interaktivní a možná čtenáře tohoto článku překvapí, jak „hardcore“ vlastně celý proces vývoje byl: muselo se bojovat s omezenou kapacitou operační paměti, s pomalostí assembleru, s kryptickými chybovými kódy, ale i například s takovou „maličkostí“, jakou je malý počet znaků zobrazitelných na obrazovce.

Zápis strojových instrukcí přímo jejich číselnými kódy.

 Obrázek 2: Zápis strojových instrukcí přímo s využitím strojového kódu instrukcí (řádky s DATA) a spuštění načteného strojového programu funkcí USR.

Autor: tisnik, podle licence: Rights Managed

Monitory

Mnoho začínajících programátorů se muselo spokojit s takzvaným monitorem, což byl (a na některých platformách doposud je) program umožňující manipulaci s daty uloženými v operační paměti, tj. zápis dat do paměti, čtení (zobrazení) vybraného bloku, přesun bloku, vyplnění určité oblasti konstantou, vyhledávání sekvence hodnot, čtení a zápis dat na externí paměťové médium (typicky na magnetofon). Nutno dodat, že některé pokročilejší monitory byly vybaveny i takzvaným disassemblerem umožňujícím transformaci sekvence bajtů na symbolické instrukce. Mimochodem – při výpisu obsahu operační paměti se v monitorech většinou používal stejný formát, jaký najdeme u mnoha moderních programátorských hexa editorů (některé techniky již pravděpodobně dosáhly své dokonalosti a není nutné je dále vyvíjet).

Úvodní obrazovka tuzemského Turbo Monitoru.

 Obrázek 3: Úvodní obrazovka tuzemského Turbo Monitoru, na který nemůžeme při popisu osmibitových počítačů Atari zapomenout.

Autor: tisnik, podle licence: Rights Managed

Monitory, zejména jejich pokročilejší varianty vybavené disassemblerem (zpětným assemblerem), bylo možné použít i pro tvorbu programů na úrovni strojového kódu. Takový program se většinou nejprve zapsal na papír (nutně se muselo jednat o čtverečkovaný papír :-) ve formě assembleru, dále se provedl ruční překlad jednotlivých instrukcí do sekvence decimálních nebo hexadecimálních číslic a následně se tato sekvence zapsala do monitoru do určité předem vybrané oblasti operační paměti. V případě, že monitor podporoval zápis bloku paměti na externí paměťové médium (kazetový magnetofon, disketu), jednalo se o dosti primitivní, ovšem stále ještě použitelné (a v některých případech i používané) vývojové prostředí.

Turbo Monitor obsahuje i disassembler.

 Obrázek 4: Turbo Monitor obsahuje i disassembler, tudíž ho bylo možné použít jako relativně použitelné vývojové prostředí.

Autor: tisnik, podle licence: Rights Managed

Na druhou stranu je programování na úrovni strojového kódu samozřejmě velmi pracné, zejména ve chvíli, kdy je nutné existující program modifikovat a tím pádem měnit cílové adresy skoků, adresy globálních proměnných atd. Mnohem civilizovanější způsob představovalo použití takzvaných assemblerů, což byly nástroje schopné překládat programy zapsané v jazyku symbolických adres/instrukcí do strojového kódu – ostatně přesně pro podobné činnosti jsou počítače zkonstruovány.

Výpis obsahu paměti (jeden z možných formátů).

 Obrázek 5: Výpis obsahu paměti Turbo Monitorem (jeden z možných formátů).

Autor: tisnik, podle licence: Rights Managed

Výpis obsahu paměti (další z možných formátů).

 Obrázek 6: Výpis obsahu paměti Turbo Monitorem (další z možných formátů).

Autor: tisnik, podle licence: Rights Managed

Dobové assemblery pro osmibitová Atari

Na osmibitových domácích mikropočítačích se používaly dva typy assemblerů. Prvním typem byly assemblery interaktivní, které uživateli nabízely poměrně komfortní vývojové prostředí, v němž bylo možné zapisovat jednotlivé instrukce, spouštět programy, krokovat je, vypisovat obsahy registrů mikroprocesoru atd. Výhodou takto pojatého řešení byla nezávislost těchto assemblerů na rychlém externím paměťovém médiu. Se zástupci těchto assemblerů určených pro počítače Atari se ve stručnosti seznámíme i v dnešním článku, protože jak Atari Assembler Editor, tak i MAC/65 náleží do této kategorie.

Poznámka: ovšem, jak uvidíme dále, lze tyto assemblery použít i v dávkovém režimu (viz praktickou část článku).
Úvodní obrazovka Atari Assembler Editoru je minimalisticky strohá.

Obrázek 7: Úvodní obrazovka Atari Assembler Editoru je minimalisticky strohá. A tak to má být.

Autor: tisnik, podle licence: Rights Managed

Druhý typ assemblerů je používán dodnes – jedná se vlastně o běžné překladače, kterým se na vstupu předloží zdrojový kód (v případě osmibitových počítačů Atari uložený na kazetě či disketě) a po překladu se výsledný nativní kód taktéž uloží na paměťové médium (odkud ho lze spustit). Tyto assemblery byly mnohdy vybaveny více či méně dokonalým systémem maker (odtud název macroassembler). Příkladem takového assembleru pro Atari jsou všechny moderní crossassemblery, včetně CA65, který v tomto seriálu hojně používáme.

Vestavěná nápověda v programu o velikosti osm kilobajtů? Zapomeňte, nápověda je jen pro pojídače koláčů.

 Obrázek 8: Vestavěná nápověda v programu o velikosti osm kilobajtů? Zapomeňte, ostatně nápověda je jen pro pojídače koláčů.

Autor: tisnik, podle licence: Rights Managed

Jedním z nejstarších vývojových nástrojů pro osmibitové mikropočítače Atari je Atari Assembler Editor, jehož vznik se datuje do let 1979 až 1980. Tento nástroj byl používán i pro vývoj samotného operačního systému počítačů Atari. Jak však tento nástroj vůbec vznikl, když ještě vlastně počítače Atari nebyly dokončené? První (zjednodušené) verze byly ručně děrovány na děrnou pásku, která byla použita pro naprogramování čipu EPROM. Ten byl vložen do prototypu Atari a následně otestován. Jednalo se tak o jednu z forem bootstrapingu, kterým jsme ze zabývali v článku Můžeme věřit překladačům? Projekty řešící schéma „důvěřivé důvěry“. Výsledná podoba Atari Assembler Editoru byla dodávána na standardní cartridge o kapacitě osmi kilobajtů (ovšem ve skutečnosti se do značné míry využívaly subrutiny z operačního systému a používané i Atari BASICem).

Zápis programu s instrukcemi pro změnu barvy okraje obrazovky.

 Obrázek 9: Zápis programu s instrukcemi pro změnu barvy okraje obrazovky.

Autor: tisnik, podle licence: Rights Managed

Atari Assembler Editor se skládal ze tří částí: editoru, assembleru a debuggeru (což však byl ve skutečnosti pouze monitor – viz předchozí text). Všechny tři části byly dostupné z cartridge a bylo možné se mezi nimi přepínat. Zdrojový kód zapisovaný v editoru byl překládán dvouprůchodovým překladačem a mohl být v operační paměti uložen souběžně se zdrojovým kódem, což ovšem znamenalo omezení maximálního objemu zdrojového kódu. Zajímavé a typické pro interaktivní assemblery je, že řádky zdrojového kódu byly číslovány, podobně jako v BASICu. K dispozici však byly i poměrně pokročilé operace pro vyhledání návěští atd.

Překlad programu.

 Obrázek 10: Překlad programu Atari Assembler Editorem je sice obecně pomalý, ale u našich čtyř řádků to není poznat.

Autor: tisnik, podle licence: Rights Managed

Debugger (spíše monitor) umožňoval zobrazení obsahu operační paměti, zobrazení obsahu registrů mikroprocesoru, modifikaci paměti, zobrazení disassemblované části paměti, krokování programu atd. – ovšem ne tak kvalitně, jako tomu bylo u dále popsaného assembleru MAC/65.

Zpětný listing.

 Obrázek 11: Zpětný listing programu.

Autor: tisnik, podle licence: Rights Managed

Spuštění programu v debuggeru.

 Obrázek 12: Spuštění programu v debuggeru. Výsledek je ihned viditelný.

Autor: tisnik, podle licence: Rights Managed

Další programátorský nástroj, s nímž se prozatím alespoň ve stručnosti seznámíme, se jmenuje MAC/65. Jedná se o assembler a současně i o debugger, jehož ovládání je odvozeno od výše zmíněného Atari Assembler Editoru; ve skutečnosti je však MAC/65 prakticky po všech stránkách lepší (až na poněkud vyšší cenu). Za vývojem MAC/65 stála společnost Optimized Systems Software (OSS). MAC/65 byl dodáván na specializované cartridgi s kapacitou 16kB, což je dvojnásobná kapacita, než jakou počítače Atari podporují (konektor měl pouze třináct adresních pinů). Z tohoto důvodu bylo oněch 16kB rozděleno do dvojice paměťových bank, z nichž každá měla kapacitu osmi kilobajtů a mezi kterými se provádělo automatické přepínání (taková cartridge se někdy nazývala „supercartridge“ a existovalo jich více typů, které se lišily způsobem přepínání paměťových bank).

První verze slavného assembleru MAC/65.

 Obrázek 13: První verze slavného assembleru MAC/65.

Autor: tisnik, podle licence: Rights Managed

Předností assembleru MAC/65 byl mnohem rychlejší překlad v porovnání s Atari Assembler Editorem. Taktéž byla k dispozici lepší forma debuggeru dostupná pod příkazem DDT (což je velmi příhodné označení).

Druhá verze MAC/65.

 Obrázek 14: Druhá verze MAC/65 dodávaná na cartridge.

Autor: tisnik, podle licence: Rights Managed

Vývoj s využitím Atari Assembler/Editoru krok za krokem

V praktické části dnešního článku si nejprve ukážeme několik způsobů, jakými lze využít původní Atari Assembler/Editor pro vývoj aplikací. Využívat budu původní verzi tohoto nástroje, která byla dodávána v cartridge. To znamenalo, že samotné načtení assembleru bylo prakticky okamžité – postačilo počítač zapnout ve stavu, kdy v něm byla cartridge nainstalována. Tudíž bylo možné realizovat vývoj i v případě, že jediným záznamovým zařízením byl kazetový magnetofon (to ovšem znamenalo omezení velikosti vyvíjeného programu a samozřejmě také nepříjemná zdržení při čtení a zápisu jak zdrojového kódu programu, tak i výsledného binárního spustitelného souboru).

Ovšem i samotný Atari Assembler/Editor měl mnohá omezení. Zejména standardní kapacity cartridge dosahovaly maximálně osmi kilobajtů (bylo k dispozici jen třináct adresových vodičů) – a přesně tuto velikost má i cartridge s assemblerem. Velmi stručná hlášení assembleru i stručnosti příkazů plynou mj. i z těchto omezení. S dalšími omezeními a nedostatky tohoto assembleru se postupně seznámíme v dalších kapitolách.

Hra Caverns of Mars byla celá naprogramována a odladěna v Atari Assembler/Editoru. Její délka (binární soubor) dosahuje 12kB, což byl slušný výkon.

Obrázek 15: Hra Caverns of Mars byla celá naprogramována a odladěna v Atari Assembler/Editoru. Její délka (binární soubor) dosahuje 12kB (prakticky jen strojový kód bez dat), což byl slušný výkon.

Autor: tisnik, podle licence: Rights Managed

Zápis jednoduchého programu

Při spuštění se assembler nachází v režimu EDIT:

Úvodní obrazovka Atari Assembler Editoru je minimalisticky strohá.

Obrázek 16: Výchozí stav assembleru.

Autor: tisnik, podle licence: Rights Managed

V tomto režimu se očekává zápis příkazů nebo programových řádků. Podobně jako v BASICu se řádek začínající celým číslem považuje za programový řádek, který je uložen do paměti (zpracovávat se bude ve správném pořadí). Ostatní řádky jsou chápány jako příkazy, které se ihned vykonají.

Každý programový řádek má tvar:

číslo_řádku návěští instrukce operandy komentář

To znamená, že pokud vynecháme návěští, musí být mezi číslem řádku a instrukcí zapsány minimálně dvě mezery (nebo více mezer). Kromě instrukcí lze zapisovat i několik typů pseudoinstrukcí a deklarací. Jednou z nich je i určení adresy, od které budou ukládány další překládané řádky. Náš program je velmi krátký a vejde se celý do šesté stránky paměti, tj. bude ukládán od adresy $0600 (šestá stránka je volná i v BASICu i v prostředí assembleru). Zkusme tedy zapsat následující program (pozor na dvojité mezery):

10  *=$0600
20  LDA #42
30  STA 712
40  BRK
Poznámka: pokud uděláte chybu, stačí řádek napsat znovu.

Zdrojový kód si můžete kdykoli zobrazit se správným pořadím řádků pomocí příkazu LIST (tedy jako v BASICu).

Nic nám ovšem nebrání v zápisu programu včetně komentářů. Ty se od operandů oddělují mezerou nebo mezerami:

Zdrojový kód i s komentáři.

 Obrázek 17: Zdrojový kód je do paměti uložen i s komentáři.

Autor: tisnik, podle licence: Rights Managed

Překlad programu s kontrolou chyb

Po zápisu zdrojového kódu programu do paměti je nutné provést jeho překlad. Pro tento účel slouží příkaz ASM, který sice akceptuje několik parametrů, ovšem jedná se o parametry nepovinné. V případě, že zadáme pouze příkaz:

ASM

provede se postupné načítání programových řádků z operační paměti a výsledek překladu je taktéž uložen do operační paměti (v našem případě od adresy $0600, tedy na šestou stránku paměti). A současně s druhou fází překladu se na obrazovku (resp. přesněji řečeno na zařízení E: vypisuje takzvaný listing), v němž je možné zkontrolovat adresy atd. Listing má pevně daný formát se sloupcem s absolutní adresou, dále se sloupcem s výpisem obsahu paměti, pravé sloupce pak obsahují opis zdrojového kódu:

Průběh překladu zdrojového kódu s posláním listingu na obrazovku.

 Obrázek 18: Průběh překladu zdrojového kódu s posláním listingu na obrazovku (pro kontrolu adres atd.).

Autor: tisnik, podle licence: Rights Managed

Po provedení příkazu ASM se assembler vrátí zpět do režimu EDIT.

Pochopitelně ovšem mohou být ve fázi překladu nalezeny různé chyby. Assembler je v tomto případě poměrně strohý a vypíše pouze kód chyby, jehož význam je nutné dohledat v manuálu (ten je ovšem praktický – začíná právě seznamem možných chyb s jejich popisem):

Chybová hlášení assembleru jsou poměrně strohá: chybný řádek a kód chyby.

Obrázek 19: Chybová hlášení assembleru jsou (minimálně z dnešního pohledu) poměrně strohá: opis chybného řádku a kód chyby.

Autor: tisnik, podle licence: Rights Managed

Poznámka: jiné assemblery se snaží chyby hledat již při zápisu jednotlivých programových řádků, což je pochopitelně praktičtější.

Spuštění a ladění s využitím debuggeru

Spuštění programu je nutné provést v režimu debuggeru, do kterého se přepneme příkazem:

BUG

V tomto režimu jsou očekávány odlišné příkazy, než v režimu editoru. Jedním novým příkazem je příkaz pro skok (goto) na určitou adresu, která je zapsána za jméno příkazu G:

G0600

Výsledkem by měla být pozměněná barva okraje obrazovky:

Spuštění programu v režimu debuggeru.

Obrázek 20: Spuštění programu v režimu debuggeru. Podle změněné barvy okraje obrazovky lze ihned vidět, že program byl vykonán korektně.

Autor: tisnik, podle licence: Rights Managed

Debugger ovšem nabízí i další příkazy; k některým z nich se ještě vrátíme:

Příkaz Stručný popis
DR zobrazení registrů CPU
CR modifikace registrů CPU
Dadresa zobrazení obsahu paměti
Cadresa modifikace paměti
Ladresa disassembler
A assembler jediné instrukce
T trasování programu
Sadresa krokování programu
X návrat do editoru

Uložení a zpětné načtení zdrojového kódu programu, uložení listingu vytvořeného assemblerem

Samotný zdrojový kód je možné uložit na libovolné zařízení, které umožňuje zápis. K tomu se příkaz LIST, který může mít následující podobu:

LIST #H:PRG1

Pro nahrání zdrojového kódu ze zařízení se použije příkaz ENTER:

ENTER #H:PRG1
Přečtení zdrojového kódu programu ze souboru na zařízení H:

Obrázek 21: Přečtení zdrojového kódu programu ze souboru na zařízení H: 

Autor: tisnik, podle licence: Rights Managed

Zařízení se ovšem používají i v příkazu ASM. Příkladem je uložení listingu do souboru či tisk na zařízení P:

ASM ,#P:
ASM ,#H:LISTING
Poznámka: čárka zapsaná v předchozím příkazu na zdánlivě nesmyslné pozici, je ve skutečnosti nutnou součástí příkazu. Vynechali jsme totiž jméno souboru se zdrojovým kódem.

Již z předchozí poznámky do jisté míry vyplývá, že assembler dokáže pracovat dávkovým způsobem, tedy tak, jak jsme zvyklí dnes. Vstupní zdrojový text může být načítán ze zvoleného zařízení (souboru), postupně překládán a listing produkovaný assemblerem bude uložen do jiného zařízení či souboru:

ASM #H:PRG1,#H:LISTING

Ostatně samotný listing si můžeme nechat zobrazit operačním systémem. Jen je zapotřebí korektně pracovat se znaky pro konec řádku:

$ tr "\233" "\n" <LISTING
 
0000        10          *=   $0600
0600 A900   20          LDA  #0
0602 8DC602 30          STA  710
0605 00     40          BRK
0 ERRORS
Překlad s listingem na obrazovku (první příkaz) a listingem do souboru (druhý příkaz).

Obrázek 22: Překlad s listingem na obrazovku (první příkaz) a listingem do souboru (druhý příkaz).

Autor: tisnik, podle licence: Rights Managed

Překlad ze zdrojového kódu načteného ze souboru s listingem provedeným do jiného souboru.

 Obrázek 23: Překlad ze zdrojového kódu načteného ze souboru s listingem provedeným do jiného souboru.

Autor: tisnik, podle licence: Rights Managed

Uložení výsledného spustitelného programu na zvolené zařízení

Nejvíce komplikovaná varianta příkazu ASM obsahuje jména tří zařízení a popř. i tři jména souborů. Formát je následující:

ASM zdroj, listing, cílový_binární_soubor

Můžeme například načítat zdrojový soubor z diskety, listing provádět na tiskárnu (zařízení P:) a výsledný binární soubor ukládat na kazetu ve standardním formátu (bloky 600Bd, zařízení C:):

ASM #D1:PRG1,#P:,#C:

Vzhledem k tomu, že ukázkové screenshoty vytvářím v emulátoru a nikoli na reálném Atari, mohu využít zařízení H:

ASM #H:PRG1,#H:LISTING,#H:PRG1.OBJ
Poznámka: no není CIO nádherné? Autorům původního Atari Assembler/Editoru se určitě ani nesnilo o tom, že by byl tento nástroj používán společně s SSD!
Dávkový způsob se specifikací souboru, do kterého se uloží výsledek překladu.

Obrázek 24: Dávkový způsob se specifikací souboru, do kterého se uloží výsledek překladu.

Autor: tisnik, podle licence: Rights Managed

Analýza souboru PRG1.OBJ, který vznikl překladem

Zastavme se na chvíli u souboru PRG1.OBJ, který vznikl jako výsledek činnosti assembleru (a vlastně i linkeru – pokud tedy použijeme moderní terminologii). Tento soubor má délku dvanácti bajtů a jeho obsah si můžeme zobrazit například nástrojem od (octal dump), nebo je možné využít jakéhokoli dobového nebo moderního hexa editoru. Pro jednoduchost ovšem zůstaňme u nástroje od:

$ od -t x1 PRG.OBJ
 
0000000 ff ff 00 06 05 06 a9 2a 8d c8 02 00
0000014

Tento soubor je možné přímo spustit v emulátoru osmibitových mikropočítačů Atari. Na rozdíl od moderních formátů spustitelných souborů (ELF atd.) má PRG.OBJ interně velmi jednoduchou strukturu. Skládá se (obecně) z jednotlivých segmentů, přičemž na začátku je u spustitelných souborů umístěn speciální segment nazvaný EXEHDR. Každý segment je uložen následovně:

Offset Stručný popis
00–01 obsahuje 0×ffff u prvního segmentu EXEHDR, u dalších segmentů uveden nemusí být
02–03 startovní adresa (dva bajty); obsah segmentu se do paměti nahraje právě od této adresy
04–05 koncová adresa určená pro výpočet délky segmentu
06-?? obsah segmentu

Náš soubor PRG1.OBJ obsahuje jen jediný segment. Jeho obsah lze tedy dekódovat následujícím způsobem:

Offset Hodnoty bajtů Stručný popis
00–01 ff ff označení segmentu EXEHDR, jedná se tedy o spustitelný soubor
02–03 00 06 startovní adresa je rovna $0600 (šestá stránka paměti)
04–05 05 06 koncová adresa je rovna $0605 (stále se tedy nacházíme v šesté stránce paměti)
06–07 a9 2a instrukce LDA #$2a (původně LDA #42)
08–10 8d c8 02 instrukce STA $02c8 (původně STA #712)
11 00 instrukce BRK
Poznámka: život Ataristy nebyl jednoduchý, zejména proto, že se nedostávalo kvalitních informačních zdrojů. Ovšem na druhou stranu byla většina technologií, na kterých tyto stroje vznikly, vlastně velmi snadno pochopitelná.

Složitější projekt, pro jehož vývoj použijeme Atari Assembler/Editor

Při zápisu a překladu programu, který se skládá ze čtyř programových řádků a pouhých tří instrukcí, pochopitelně nedokážeme posoudit, do jaké míry je Atari Assembler/Editor reálně použitelný ani jak je rychlý (nebo naopak pomalý). Proto se pokusíme o naprogramování poněkud delší aplikace. Bude se jednat o přepis příkladu, se kterým jsme se seznámili při popisu konfigurace grafického čipu GTIA. Program zobrazí pětici hráčů (players), přesněji řečeno čtyři hráče doplněné o čtveřici střel, ze kterých byl složen pátý hráč. Uživatel následně může s využitím joysticku horizontálně pohybovat prvním hráčem. Aby byl pohyb dostatečně pomalý (a viditelný pro člověka), je synchronizován s hodinami počítače.

Zdrojový kód bude mít délku cca 130 řádků, tedy zhruba pět obrazovek. Je to již dlouhý program? Záleží na úhlu pohledu. Překlad takového programu totiž Atari Assembler/Editoru trvá neuvěřitelných 24 sekund a překlad s výpisem (listingem) dokonce 33 sekund. Rychlost překladu tedy dosahuje necelých šesti zdrojových řádků za sekundu.

Poznámka: nakonec je z mého pohledu největší překážkou malý počet znaků na řádku. A dobré je vypnout si zvuky kláves :-)

Zdrojový kód programu určený pro překlad assemblerem CA65

Nejprve si ukažme, jak vypadá původní zdrojový kód příkladu, který budeme přepisovat. V něm je zobrazeno pět spritů (pátý hráč je tvořen čtyřmi střelami) a s využitím joysticku je možné horizontálně pohybovat prvním hráčem:

; ---------------------------------------------------------------------
; Ovládání PMG joystickem v horizontální směru, zobrazení pátého hráče.
;
; Tento zdrojový kód byl použit v článku:
;
; Další tipy a triky při práci s čipem GTIA a využití joysticku 
; https://www.root.cz/clanky/dalsi-tipy-a-triky-pri-praci-s-cipem-gtia-a-vyuziti-joysticku/
; ---------------------------------------------------------------------
 
.include "atari.inc"
 
.CODE
 
PLAYER_0_OFFSET = 512
PLAYER_1_OFFSET = PLAYER_0_OFFSET + 128
PLAYER_2_OFFSET = PLAYER_1_OFFSET + 128
PLAYER_3_OFFSET = PLAYER_2_OFFSET + 128
MISSILES_OFFSET = 384
 
 
.proc main
        lda #80                 ; horizontální pozice prvního hráče
        sta HPOSP0              ; uložit do řídicího registru HPOSP0 na čipu GTIA
 
        lda #95                 ; horizontální pozice druhého hráče
        sta HPOSP1              ; uložit do řídicího registru HPOSP1 na čipu GTIA
 
        lda #110                ; horizontální pozice třetího hráče
        sta HPOSP2              ; uložit do řídicího registru HPOSP2 na čipu GTIA
 
        lda #125                ; horizontální pozice čtvrtého hráče
        sta HPOSP3              ; uložit do řídicího registru HPOSP3 na čipu GTIA
 
        lda #146                ; horizontální pozice první střely
        sta HPOSM0              ; uložit do řídicího registru HPOSP0 na čipu GTIA
 
        lda #144                ; horizontální pozice druhé střely
        sta HPOSM1              ; uložit do řídicího registru HPOSP1 na čipu GTIA
 
        lda #142                ; horizontální pozice třetí střely
        sta HPOSM2              ; uložit do řídicího registru HPOSP2 na čipu GTIA
 
        lda #140                ; horizontální pozice čtvrté střely
        sta HPOSM3              ; uložit do řídicího registru HPOSP3 na čipu GTIA
 
        lda #HUE_GREEN<<4 + 12  ; barva prvního hráče (odstín+intenzita)
        sta PCOLR0              ; uložit do řídicího registru PCOLR0 na čipu GTIA
 
        lda #HUE_YELLOW<<4 + 12 ; barva druhého hráče (odstín+intenzita)
        sta PCOLR1              ; uložit do řídicího registru PCOLR1 na čipu GTIA
 
        lda #HUE_MAGENTA<<4 + 12 ; barva třetího hráče (odstín+intenzita)
        sta PCOLR2              ; uložit do řídicího registru PCOLR2 na čipu GTIA
 
        lda #HUE_CYAN<<4 + 12   ; barva čtvrtého hráče (odstín+intenzita)
        sta PCOLR3              ; uložit do řídicího registru PCOLR3 na čipu GTIA
 
        lda #HUE_YELLOWRED<<4 + 8   ; barva pátého hráče (odstín+intenzita)
        sta COLOR3              ; uložit do řídicího registru COLPF3 na čipu GTIA
 
        lda #$ff                ; bitová maska všech hráčů
        sta GRAFP0              ; uložit do řídicího registru GRAFP0 na čipu GTIA
        sta GRAFP1              ; uložit do řídicího registru GRAFP1 na čipu GTIA
        sta GRAFP2              ; uložit do řídicího registru GRAFP2 na čipu GTIA
        sta GRAFP3              ; uložit do řídicího registru GRAFP3 na čipu GTIA
 
        lda #3                  ; bitové pole: povolení hráčů i střel
        sta GRACTL              ; uložit do řídicího registru GRACTL na čipu GTIA
 
        lda #16                 ; priorita hráčů a pozadí -> povolení pátého hráče
        sta GPRIOR              ; uložit do řídicího registru GPRIOR na čipu GTIA
 
        lda #152                ; paměťová stránka číslo 152
        sta PMBASE
 
        addr = 152*256
        ldx #8                  ; začneme na hodnotě o 1 vyšší
next_line:
        lda sprite-1, x         ; načíst
        sta addr+PLAYER_0_OFFSET+50, x  ; uložit byte - první hráč
        sta addr+PLAYER_1_OFFSET+50, x  ; uložit byte - druhý hráč
        sta addr+PLAYER_2_OFFSET+50, x  ; uložit byte - třetí hráč
        sta addr+PLAYER_3_OFFSET+50, x  ; uložit byte - čtvrtý hráč
        sta addr+MISSILES_OFFSET+50, x  ; uložit byte - střely
        dex                     ; snížit offset + nastavit příznaky
        bne next_line           ; další byte spritu
 
        lda #46                 ; povolení PMG DMA
        sta SDMCTL
 
        ldx #80                 ; výchozí pozice prvního hráče
loop:
        txa                     ; uložení obsahu X do akumulátoru
        jsr _wait_vsync
        jsr _wait_vsync
        tax                     ; obnovení obsahu X z akumulátoru
 
        lda STICK0              ; čtení joysticku
        cmp #11                 ; je nakloněn doleva?
        bne not_left
        dex                     ; posun hráče doleva
not_left:
        cmp #7                  ; je nakloněn doprava?
        bne not_right
        inx                     ; posun hráče doprava
not_right:
        stx HPOSP0              ; změna pozice prvního hráče
        jmp loop
 
.endproc
 
 
.proc   _wait_vsync
        ldx     RTCLOK+2        ; čekání na konec snímku
@wt:    cpx     RTCLOK+2
        beq     @wt
        rts
.endproc
 
 
; data
sprite:   .byte 24, 60, 126, 219, 255, 36, 90, 165
 
end:
 
 
.segment "EXEHDR"
.word   $ffff                   ; uvodni sekvence bajtu v souboru XEX
.word   main                    ; zacatek kodoveho segmentu
.word   end - 1                 ; konec kodoveho segmentu
 
 
.segment "AUTOSTRT"             ; segment s pocatecni adresou
.word   RUNAD                   ; naplni se pouze adresy RUNAD a RUNAD+1
.word   RUNAD+1
.word   main                    ; adresa vstupniho bodu do programu
 
; finito

Definice adres registrů a dalších konstant použitých v programu

V prvním kroku do syntaxe Assembler/Editoru přepíšeme definici konstant, které představují adresy registrů čipů ANTIC a GTIA, adresy stínových registrů, kódy barev atd. Mnoho těchto konstant je dostupných při použití CA65 (po provedení .include „atari.inc“), ovšem tento luxus v Assembler/Editoru pochopitelně nemáme. Povšimněte si, že se při výpočtu konstant mohou použít i jednoduché výrazy. V názvech konstant nesmí být podtržítka, takže výsledek zrovna neoplývá čitelností:

0100  *=$0600
1000 GTIA=$D000      CTIA/GTIA AREA
1001 ; PLAYERS HORIZONTAL POSITIONS
1002 HPOSP0 = GTIA + $00
1003 HPOSP1 = GTIA + $01
1004 HPOSP2 = GTIA + $02
1005 HPOSP3 = GTIA + $03
1010 ; MISSILES HORIZONTAL POSITIONS
1011 HPOSM0 = GTIA + $04
1012 HPOSM1 = GTIA + $05
1013 HPOSM2 = GTIA + $06
1014 HPOSM3 = GTIA + $07
1020 ; COLOR REGISTERS
1021 PCOLR0 = $02C0
1022 PCOLR1 = $02C1
1023 PCOLR2 = $02C2
1024 PCOLR3 = $02C3
1025 COLOR3 = $02C7
1030 ; PLAYER SHAPES
1031 GRAFP0 = GTIA + $0D
1032 GRAFP1 = GTIA + $0E
1033 GRAFP2 = GTIA + $0F
1034 GRAFP3 = GTIA + $10
1040 ; GTIA CONTROLS
1041 GRACTL = GTIA + $1D
1042 GPRIOR = $026F   SHADOW REGISTER
1050 ; ANTIC REGISTERS
1051 ANTIC = $D400
1052 PMBASE = ANTIC + $07
1060 ; OTHER REGISTERS
1061 SDMCTL = $022F   SAVE DMCTL
1062 STICK0 = $0278   JOYSTICK 0
1063 RTCLOK = $12     REAL TIME CLOCK
1100 ; PAGE COLORS
1101 HUEGREY        = 0
1102 HUEGOLD        = 1
1103 HUEGOLDORANGE  = 2
1104 HUEREDORANGE   = 3
1105 HUEORANGE      = 4
1106 HUEMAGENTA     = 5
1107 HUEPURPLE      = 6
1108 HUEBLUE        = 7
1109 HUEBLUE2       = 8
1110 HUECYAN        = 9
1111 HUEBLUEGREEN   = 10
1112 HUEBLUEGREEN2  = 11
1113 HUEGREEN       = 12
1114 HUEYELLOWGREEN = 13
1115 HUEYELLOW      = 14
1116 HUEYELLOWRED   = 15
1200 ; PMG AREA
1201 PLAYER0OFFSET = 512
1202 PLAYER1OFFSET = PLAYER0OFFSET+128
1203 PLAYER2OFFSET = PLAYER1OFFSET+128
1204 PLAYER3OFFSET = PLAYER2OFFSET+128   LIST
1205 MISSILESOFFSET = 384

Nastavení barev, pozic hráčů, spojení střel do pátého hráče a povolení DMA

Dále přepíšeme původní hlavní proceduru, která nastaví pozice a barvy všech hráčů, nakonfiguruje spojení střel do pátého hráče, povolí DMA, priority hráčů vůči pozadí atd. Vzhledem k tomu, že PMBASE (bitmapy hráčů) nejsou nastaveny, budou sice hráči (po překladu a spuštění) zobrazeni, ovšem prozatím s (pseudo)náhodnými tvary:

Sprity se zobrazily na svých místech i se správnými barvami. Musíme pouze nastavit jejich tvar (bitmapy).

Obrázek 25: Sprity se zobrazily na svých místech i se správnými barvami. Musíme pouze nastavit jejich tvar (bitmapy).

Autor: tisnik, podle licence: Rights Managed

Přepis této části opět není nijak složitý:

2000  .PAGE MAIN
2001      LDA #80
2002      STA HPOSP0
2003      LDA #95
2004      STA HPOSP1
2005      LDA #110
2006      STA HPOSP2
2007      LDA #125
2008      STA HPOSP3
2009      LDA #146
2010      STA HPOSM0
2011      LDA #144
2012      STA HPOSM1
2013      LDA #142
2014      STA HPOSM2
2015      LDA #140
2016      STA HPOSM3
2020 ; PLAYER COLORS
2021      LDA #HUEGREEN * 16 + 12
2022      STA PCOLR0
2023      LDA #HUEYELLOW * 16 + 12
2024      STA PCOLR1
2025      LDA #HUEMAGENTA * 16 + 12
2026      STA PCOLR2
2027      LDA #HUECYAN * 16 + 12
2028      STA PCOLR3
2029      LDA #HUEYELLOWRED * 16 + 12
2030      STA COLOR3
2040 ; SHAPES + DMA
2041      LDA #$FF
2042      STA GRAFP0
2043      STA GRAFP1
2044      STA GRAFP2
2045      STA GRAFP3
2046      LDA #3
2047      STA GRACTL
2048      LDA #16
2049      STA GPRIOR
2050      LDA #46
2051      STA SDMCTL

Nastavení bitmap (tvarů) všech pěti hráčů

Konečně se dostáváme k zajímavější části – k programové smyčce sloužící pro nastavení bitmap (tedy tvarů) všech pěti hráčů. Výsledek by měl vypadat takto:

Nyní je všech pět spritů zobrazeno zcela korektně - máme napůl vyhráno.

Obrázek 26: Nyní je všech pět spritů zobrazeno zcela korektně – máme napůl vyhráno.

Autor: tisnik, podle licence: Rights Managed

Povšimněte si, jak se mohou zapisovat kratší návěští (na stejný řádek, jako instrukce). Na řádku 5000 je navíc uvedena definice bitmapy, resp. její části:

2060 ; PLAYER BITMAPS
2061 ADDR = 152*256
2062      LDA #152        PAGE
2063      STA PMBASE
2100      LDX #8
2101 NEXT LDA SPRITE-1,X
2102      STA ADDR+PLAYER0OFFSET+50,X
2103      STA ADDR+PLAYER1OFFSET+50,X
2104      STA ADDR+PLAYER2OFFSET+50,X
2105      STA ADDR+PLAYER3OFFSET+50,X
2106      STA ADDR+MISSILESOFFSET+50,X
2107      DEX
2108      BNE NEXT
5000 SPRITE .BYTE 24,60,126,219,255,36,90,165

Hlavní programová smyčka: pohyb spritu joystickem

Konečně se dostáváme k hlavní programové smyčce, ve které se čte náklon joysticku a podle něj se mění horizontální pozice prvního hráče. Navíc je posun synchronizován s hodinami počítače:

Pohyb prvního hráče s využitím joysticku (na tomto snímku je to hráč zcela napravo).

Obrázek 27: Pohyb prvního hráče s využitím joysticku (na tomto snímku je to hráč zcela napravo).

Autor: tisnik, podle licence: Rights Managed

Zde používáme jak krátká návěští (LOOP), tak delší návěští zapsaná na samostatném řádku (WAITWSYNC):

3000  .PAGE MAIN LOOP
3001      LDX #80
3002 LOOP TXA
3003      JSR WAITWSYNC
3004      JSR WAITWSYNC
3005      TAX
3006      LDA STICK0
3007      CMP #11        TO THE LEFT?
3008      BNE NOTL
3009      DEX            MOVE PLAYER
3010 NOTL CMP #7         TO THE RIGH?
3011      BNE NOTR
3012      INX            MOVE PLAYER
3013 NOTR STX HPOSP0     REAL MOVE
3014      JMP LOOP       AND AGAIN
4000  .PAGE WSYNC
4001 WAITWSYNC
4002      LDX RTCLOK+2   WAIT FOR CLK
4003 WT   CPX RTCLOK+2   SAME VALUE?
4004      BEQ WT
4005      RTS

Výsledná podoba celého programu ve verzi pro Atari Assembler/Editor

Úplný zdrojový kód demonstračního příkladu se sprity, který byl přepsán do formátu plně kompatibilního s Atari Assembler/Editorem, vypadá následovně. Pro jednoduchost jsem vše psal velkými písmeny, aby se zachovaly dobové zvyky:

Školení Linux

0100  *=$0600
1000 GTIA=$D000      CTIA/GTIA AREA
1001 ; PLAYERS HORIZONTAL POSITIONS
1002 HPOSP0 = GTIA + $00
1003 HPOSP1 = GTIA + $01
1004 HPOSP2 = GTIA + $02
1005 HPOSP3 = GTIA + $03
1010 ; MISSILES HORIZONTAL POSITIONS
1011 HPOSM0 = GTIA + $04
1012 HPOSM1 = GTIA + $05
1013 HPOSM2 = GTIA + $06
1014 HPOSM3 = GTIA + $07
1020 ; COLOR REGISTERS
1021 PCOLR0 = $02C0
1022 PCOLR1 = $02C1
1023 PCOLR2 = $02C2
1024 PCOLR3 = $02C3
1025 COLOR3 = $02C7
1030 ; PLAYER SHAPES
1031 GRAFP0 = GTIA + $0D
1032 GRAFP1 = GTIA + $0E
1033 GRAFP2 = GTIA + $0F
1034 GRAFP3 = GTIA + $10
1040 ; GTIA CONTROLS
1041 GRACTL = GTIA + $1D
1042 GPRIOR = $026F   SHADOW REGISTER
1050 ; ANTIC REGISTERS
1051 ANTIC = $D400
1052 PMBASE = ANTIC + $07
1060 ; OTHER REGISTERS
1061 SDMCTL = $022F   SAVE DMCTL
1062 STICK0 = $0278   JOYSTICK 0
1063 RTCLOK = $12     REAL TIME CLOCK
1100 ; PAGE COLORS
1101 HUEGREY        = 0
1102 HUEGOLD        = 1
1103 HUEGOLDORANGE  = 2
1104 HUEREDORANGE   = 3
1105 HUEORANGE      = 4
1106 HUEMAGENTA     = 5
1107 HUEPURPLE      = 6
1108 HUEBLUE        = 7
1109 HUEBLUE2       = 8
1110 HUECYAN        = 9
1111 HUEBLUEGREEN   = 10
1112 HUEBLUEGREEN2  = 11
1113 HUEGREEN       = 12
1114 HUEYELLOWGREEN = 13
1115 HUEYELLOW      = 14
1116 HUEYELLOWRED   = 15
1200 ; PMG AREA
1201 PLAYER0OFFSET = 512
1202 PLAYER1OFFSET = PLAYER0OFFSET+128
1203 PLAYER2OFFSET = PLAYER1OFFSET+128
1204 PLAYER3OFFSET = PLAYER2OFFSET+128   LIST
1205 MISSILESOFFSET = 384
2000  .PAGE MAIN
2001      LDA #80
2002      STA HPOSP0
2003      LDA #95
2004      STA HPOSP1
2005      LDA #110
2006      STA HPOSP2
2007      LDA #125
2008      STA HPOSP3
2009      LDA #146
2010      STA HPOSM0
2011      LDA #144
2012      STA HPOSM1
2013      LDA #142
2014      STA HPOSM2
2015      LDA #140
2016      STA HPOSM3
2020 ; PLAYER COLORS
2021      LDA #HUEGREEN * 16 + 12
2022      STA PCOLR0
2023      LDA #HUEYELLOW * 16 + 12
2024      STA PCOLR1
2025      LDA #HUEMAGENTA * 16 + 12
2026      STA PCOLR2
2027      LDA #HUECYAN * 16 + 12
2028      STA PCOLR3
2029      LDA #HUEYELLOWRED * 16 + 12
2030      STA COLOR3
2040 ; SHAPES + DMA
2041      LDA #$FF
2042      STA GRAFP0
2043      STA GRAFP1
2044      STA GRAFP2
2045      STA GRAFP3
2046      LDA #3
2047      STA GRACTL
2048      LDA #16
2049      STA GPRIOR
2050      LDA #46
2051      STA SDMCTL
2060 ; PLAYER BITMAPS
2061 ADDR = 152*256
2062      LDA #152        PAGE
2063      STA PMBASE
2100      LDX #8
2101 NEXT LDA SPRITE-1,X
2102      STA ADDR+PLAYER0OFFSET+50,X
2103      STA ADDR+PLAYER1OFFSET+50,X
2104      STA ADDR+PLAYER2OFFSET+50,X
2105      STA ADDR+PLAYER3OFFSET+50,X
2106      STA ADDR+MISSILESOFFSET+50,X
2107      DEX
2108      BNE NEXT
3000  .PAGE MAIN LOOP
3001      LDX #80
3002 LOOP TXA
3003      JSR WAITWSYNC
3004      JSR WAITWSYNC
3005      TAX
3006      LDA STICK0
3007      CMP #11        TO THE LEFT?
3008      BNE NOTL
3009      DEX            MOVE PLAYER
3010 NOTL CMP #7         TO THE RIGH?
3011      BNE NOTR
3012      INX            MOVE PLAYER
3013 NOTR STX HPOSP0     REAL MOVE
3014      JMP LOOP       AND AGAIN
4000  .PAGE WSYNC
4001 WAITWSYNC
4002      LDX RTCLOK+2   WAIT FOR CLK
4003 WT   CPX RTCLOK+2   SAME VALUE?
4004      BEQ WT
4005      RTS
5000 SPRITE .BYTE 24,60,126,219,255,36,90,165

Listing vygenerovaný assemblerem při překladu

Podívejme se pro úplnost ještě na listing, který byl vygenerován následujícím příkazem:

Překlad programu, jehož zdrojový kód byl načten z disku. Listing i výsledný spustitelný binární soubor jsou uloženy zpět na disk

Obrázek 28: Překlad programu, jehož zdrojový kód byl načten z disku. Listing i výsledný spustitelný binární soubor jsou uloženy zpět na disk

Autor: tisnik, podle licence: Rights Managed

0000        0100        *=   $0600
D000        1000 GTIA   =    $D000      CTIA/GTIA AREA
            1001 ; PLAYERS HORIZONTAL POSITIONS
D000        1002 HPOSP0 =    GTIA + $00
D001        1003 HPOSP1 =    GTIA + $01
D002        1004 HPOSP2 =    GTIA + $02
D003        1005 HPOSP3 =    GTIA + $03
            1010 ; MISSILES HORIZONTAL POSITIONS
D004        1011 HPOSM0 =    GTIA + $04
D005        1012 HPOSM1 =    GTIA + $05
D006        1013 HPOSM2 =    GTIA + $06
D007        1014 HPOSM3 =    GTIA + $07
            1020 ; COLOR REGISTERS
02C0        1021 PCOLR0 =    $02C0
02C1        1022 PCOLR1 =    $02C1
02C2        1023 PCOLR2 =    $02C2
02C3        1024 PCOLR3 =    $02C3
02C7        1025 COLOR3 =    $02C7
            1030 ; PLAYER SHAPES
D00D        1031 GRAFP0 =    GTIA + $0D
D00E        1032 GRAFP1 =    GTIA + $0E
D00F        1033 GRAFP2 =    GTIA + $0F
D010        1034 GRAFP3 =    GTIA + $10
            1040 ; GTIA CONTROLS
D01D        1041 GRACTL =    GTIA + $1D
026F        1042 GPRIOR =    $026F     SHADOW REGISTER
            1050 ; ANTIC REGISTERS
D400        1051 ANTIC  =    $D400
D407        1052 PMBASE =    ANTIC + $07
            1060 ; OTHER REGISTERS
022F        1061 SDMCTL =    $022F     SAVE DMCTL
0278        1062 STICK0 =    $0278     JOYSTICK 0
0012        1063 RTCLOK =    $12       REAL TIME CLOCK
            1100 ; PAGE COLORS
0000        1101 HUEGREY        = 0
0001        1102 HUEGOLD        = 1
0002        1103 HUEGOLDORANGE  = 2
0003        1104 HUEREDORANGE   = 3
0004        1105 HUEORANGE      = 4
0005        1106 HUEMAGENTA     = 5
0006        1107 HUEPURPLE      = 6
0007        1108 HUEBLUE        = 7
0008        1109 HUEBLUE2       = 8
0009        1110 HUECYAN        = 9
000A        1111 HUEBLUEGREEN   = 10
000B        1112 HUEBLUEGREEN2  = 11
000C        1113 HUEGREEN       = 12
000D        1114 HUEYELLOWGREEN = 13
000E        1115 HUEYELLOW      = 14
000F        1116 HUEYELLOWRED   = 15
            1200 ; PMG AREA
0200        1201 PLAYER0OFFSET = 512
0280        1202 PLAYER1OFFSET = PLAYER0OFFSET+128
0300        1203 PLAYER2OFFSET = PLAYER1OFFSET+128
0380        1204 PLAYER3OFFSET = PLAYER2OFFSET+128   LIST
0180        1205 MISSILESOFFSET = 384
 
 
 
 
 
0600        2000        .PAGE          MAIN
0600 A950   2001        LDA  #80
0602 8D00D0 2002        STA  HPOSP0
0605 A95F   2003        LDA  #95
0607 8D01D0 2004        STA  HPOSP1
060A A96E   2005        LDA  #110
060C 8D02D0 2006        STA  HPOSP2
060F A97D   2007        LDA  #125
0611 8D03D0 2008        STA  HPOSP3
0614 A992   2009        LDA  #146
0616 8D04D0 2010        STA  HPOSM0
0619 A990   2011        LDA  #144
061B 8D05D0 2012        STA  HPOSM1
061E A98E   2013        LDA  #142
0620 8D06D0 2014        STA  HPOSM2
0623 A98C   2015        LDA  #140
0625 8D07D0 2016        STA  HPOSM3
            2020 ; PLAYER COLORS
0628 A9CC   2021        LDA  #HUEGREEN * 16 + 12
062A 8DC002 2022        STA  PCOLR0
062D A9EC   2023        LDA  #HUEYELLOW * 16 + 12
062F 8DC102 2024        STA  PCOLR1
0632 A95C   2025        LDA  #HUEMAGENTA * 16 + 12
0634 8DC202 2026        STA  PCOLR2
0637 A99C   2027        LDA  #HUECYAN * 16 + 12
0639 8DC302 2028        STA  PCOLR3
063C A9FC   2029        LDA  #HUEYELLOWRED * 16 + 12
063E 8DC702 2030        STA  COLOR3
            2040 ; SHAPES + DMA
0641 A9FF   2041        LDA  #$FF
0643 8D0DD0 2042        STA  GRAFP0
0646 8D0ED0 2043        STA  GRAFP1
0649 8D0FD0 2044        STA  GRAFP2
064C 8D10D0 2045        STA  GRAFP3
064F A903   2046        LDA  #3
0651 8D1DD0 2047        STA  GRACTL
0654 A910   2048        LDA  #16
0656 8D6F02 2049        STA  GPRIOR
0659 A92E   2050        LDA  #46
065B 8D2F02 2051        STA  SDMCTL
            2060 ; PLAYER BITMAPS
9800        2061 ADDR   =    152*256
065E A998   2062        LDA  #152        PAGE
0660 8D07D4 2063        STA  PMBASE
0663 A208   2100        LDX  #8
0665 BD9D06 2101 NEXT   LDA  SPRITE-1,X
0668 9D329A 2102        STA  ADDR+PLAYER0OFFSET+50,X
066B 9DB29A 2103        STA  ADDR+PLAYER1OFFSET+50,X
066E 9D329B 2104        STA  ADDR+PLAYER2OFFSET+50,X
0671 9DB29B 2105        STA  ADDR+PLAYER3OFFSET+50,X
0674 9DB299 2106        STA  ADDR+MISSILESOFFSET+50,X
0677 CA     2107        DEX
0678 D0EB   2108        BNE  NEXT
 
 
 
 
 
067A        3000        .PAGE          MAIN LOOP
067A A250   3001        LDX  #80
067C 8A     3002 LOOP   TXA
067D 209706 3003        JSR  WAITWSYNC
0680 209706 3004        JSR  WAITWSYNC
0683 AA     3005        TAX
0684 AD7802 3006        LDA  STICK0
0687 C90B   3007        CMP  #11        TO THE LEFT?
0689 D001   3008        BNE  NOTL
068B CA     3009        DEX            MOVE PLAYER
068C C907   3010 NOTL   CMP  #7         TO THE RIGH?
068E D001   3011        BNE  NOTR
0690 E8     3012        INX            MOVE PLAYER
0691 8E00D0 3013 NOTR   STX  HPOSP0     REAL MOVE
0694 4C7C06 3014        JMP  LOOP       AND AGAIN
 
 
 
 
 
0697        4000        .PAGE          WSYNC
            4001 WAITWSYNC
0697 A614   4002        LDX  RTCLOK+2   WAIT FOR CLK
0699 E414   4003 WT     CPX  RTCLOK+2   SAME VALUE?
069B F0FC   4004        BEQ  WT
069D 60     4005        RTS
069E 18     5000 SPRITE .BYTE 24,60,126,219,255,36,90,165
069F 3C
06A0 7E
06A1 DB
06A2 FF
06A3 24
06A4 5A
06A5 A5

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_80×48.asm data obrázku 80×48 ve formě příkazů .byte https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/image_80×48.asm
206 image_160×96.asm data obrázku 160×96 ve formě příkazů .byte https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/image_160×96.asm
207 image_160×192.asm data obrázku 160×192 ve formě příkazů .byte https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/image_160×192.asm
208 image_320×192.bin čistě binární data obrázku 320×192× https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/image_320×192.bin
209 image_320×192_1.bin čistě binární data obrázku 320×96× (první polovina) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/image_320×192_1.bin
210 image_320×192_2.bin čistě binární data obrázku 320×96× (druhá polovina) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/image_320×192_2.bin
211 image_160×96×2.bin čistě binární data obrázku 320×192× https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/image_160×96×2.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, SELECTOPTION 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, SELECTOPTION 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/

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.atari800×l.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/800×l-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
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.