Sériová sběrnice osmibitových počítačů Atari SIO: předchůdce USB

Včera
Doba čtení: 66 minut

Sdílet

Atari SIO
Autor: Multicherry, podle licence: Public Domain
Některé prvky počítačů Atari jsou navrženy s ohledem na co největší efektivitu, bez ohledu na možnosti dalšího rozšiřování. Ovšem subsystém SIO je velmi robustní, rozšiřitelný a dobře integrovaný.

Osmibitové počítače Atari: herní stroje nebo plnohodnotné domácí mikropočítače

Co se dozvíte v článku
  1. Osmibitové počítače Atari: herní stroje nebo plnohodnotné domácí mikropočítače
  2. Revoluce v IT: vznik konceptu domácích počítačů
  3. Trnitá cesta k návrhu SIO
  4. Krátká odbočka: koncept externích sběrnic a portů v informatice
  5. Externí sběrnice vs. port
  6. Sériový vs. paralelní přenos dat
  7. Jednosměrná vs. obousměrná komunikace
  8. Způsob řízení sběrnice
  9. SIO na osmibitových Atari z pohledu „teorie“ sběrnic a portů
  10. Konektor sériové sběrnice SIO
  11. Přenosový protokol: asynchronní režim
  12. Volba přenosové rychlosti
  13. Přenosový protokol: vyšší úroveň
  14. ID zařízení
  15. Posílané příkazy
  16. Řídicí a stavové registry čipu POKEY používané pro sériovou komunikaci
  17. Stav sériového portu
  18. Nastavení režimu sériového portu
  19. Repositář s demonstračními příklady
  20. Odkazy na Internetu

O domácích osmibitových mikropočítačích Atari se většinou v současnosti mluví jako o počítačích určených především pro provoz her. Ve skutečnosti tomu však bylo poněkud jinak. Firma Atari po úspěšném uvedení herní konzole Atari 2600 reálně uvažovala o vývoji modernější herní konzole (konkrétně u Atari 2600 se plánovalo, že na trhu „vydrží“ pouhé tři roky, nakonec to však bylo neuvěřitelných patnáct let, což je na tak primitivní zařízení až neuvěřitelné).

V rámci vývoje nové herní konzole byly vyvinuty čipy CTIA (později upraveno na GTIA) a POKEY, které nahradily původní čip TIA (realizoval pohyblivé grafické objekty + zvuky). Jako mikroprocesor měla být použita plnohodnotná verze MOS 6502 a nikoli ořezaná varianta MOS 6507.

Původní model herní konzole Atari 2600

 Obrázek 1: Původní model osmibitové herní konzole Atari 2600.

Autor: Evan-Amos, podle licence: Public Domain

Nová herní konzole, která byla interně pojmenována „Candy“, neměla mít (logicky) plnohodnotnou klávesnici; pouze několik tlačítek (z nich se posléze vyvinuly Start, Select a Option) a možnost připojení ovladačů, tedy primárně joysticků a taktéž paddle popř. světelného pera. A grafický subsystém měl být optimalizován na tehdejší herní žánry – tedy orientace na pohyblivé objekty, scrolling, s menší prioritou textových režimů.

Revoluce v IT: vznik konceptu domácích počítačů

Jenže v průběhu návrhu nové herní konzole „Candy“ došlo k velké revoluci v oblasti IT – v roce 1977 totiž doba „uzrála“ a vznikl zcela nový segment domácích počítačů. V první generaci těchto strojů, které zcela změnily náhled na IT (už žádné sterilní klimatizované sály a obrovské tajemné bedny opečovávané muži v oblecích), najdeme TRS-80, Commodore PET a Apple II (nazývané společně „trinity“).

Apple II s monitorem a dvojicí disketových jednotek

 Obrázek 2: Apple II s monitorem a dvojicí disketových jednotek.

Autor: Rama & Musée Bolo, podle licence: CC BY-SA 2.0

Na vznik zcela nového segmentu trhu společnost Atari zareagovala tím, že nad původním designem herní konzole navrhla vlastní architekturu domácích mikropočítačů. Změn, které musely být provedeny, bylo více – přidání textového a grafického režimu s vysokým horizontálním rozlišením (320 pixelů, tedy 40 znaků na řádku), přidání klávesnice, což si vyžádalo úpravu čipu POKEY, přidání dalších 8kB ROM s interpretrem programovacího jazyka Atari BASIC a rozšíření ROM s operačním systémem, který se tak stal plnohodnotným operačním systémem s podporou konfigurovatelných zařízení apod. Speciální „konzolová“ tlačítka však zůstala, čímž se Atari odlišuje od prakticky všech ostatních dobových počítačů).

TRS-80 s dobovým monitorem

 Obrázek 3: TRS-80 s dobovým monitorem.

Autor: Dave Jones, podle licence: CC BY-SA 4.0

Trnitá cesta k návrhu SIO

Navíc v době návrhu osmibitových mikropočítačů Atari začala být zaváděna poměrně striktní pravidla FCC (Federal Communications Commission), která určovala maximální úroveň rušení (tedy vlastně vysílání) televizního signálu (resp. signálu ve stejných frekvenčních pásmech, jaké měly televizory v USA). Tato pravidla platila pro všechna zařízení s vysokofrekvenčním modulátorem a tedy i pro nově vznikající počítače Atari (naproti tomu Apple II měl přesně z tohoto důvodu modulátor externí a tudíž tato pravidla dokázal obejít). Jak odstínit rušivé vysílání je problém se známým řešením – použít Faradayovu klec. To ovšem znamená nutnost uzavření celého plošného spoje do plechové „krabice“ s co nejmenšími otvory (což není zcela přesné tvrzení, protože je to závislé na vlnové délce, o čemž se ostatně můžeme přesvědčit pohledem na každou mikrovlnku).

Kvůli tomuto omezení vlastně vznikl koncept SIO (Serial Input/Output), tedy sériového portu s jen minimem vodičů, které bylo možné snadno (a bez porušení normy FCC) vyvést mimo Faradayovu klec. Díky SIO bylo možné počítač rozšiřovat o další zařízení, a to bez nutnosti využití konceptu zásuvných karet (ten byl použit u Apple II a později i u IBM PC, ovšem známe ho i z IQ-151 apod.).

Kabel SIO s třinácti vodiči.

 Obrázek 4: Kabel SIO s třinácti vodiči.

Autor: tisnik, podle licence: Rights Managed

Poznámka: mohlo by se zdát, zejména při pohledu na počítače vyrobené v ČSSR, jejichž televizní výstup bylo možné naladit i na několik metrů (bez koaxiálu), že pravidla FCC byla velmi přísná. Ovšem tato pravidla byla zavedena reakce na první a druhou generaci herních konzolí s levnými vysokofrekvenčními modulátory, které skutečně způsobovaly velké rušení. Takže svým způsobem byl tento problém a vznik následné normy do značné míry i odpovědností společnosti Atari a její herní konzole Atari 2600 (VCS).
Paralelní sběrnice, v tomto případě ISA, jsou sice skvělé pro rozšiřování PC, ovšem vyžadují zcela jiné uspořádání počítače, než mají osmibitová Atari (vše integrované v klávesnici).

 Obrázek 5: Paralelní sběrnice, v tomto případě ISA, jsou sice skvělé pro rozšiřování PC, ovšem vyžadují zcela jiné uspořádání počítače, než mají osmibitová Atari (vše integrované v klávesnici).

Autor: Unknown, podle licence: Rights Managed

Krátká odbočka: koncept externích sběrnic a portů v informatice

V minulosti bylo navrženo i implementováno poměrně mnoho technologií umožňujících komunikaci mezi počítačem na jedné straně a externími zařízeními na straně druhé. Některé technologie byly proprietární a objevily se například jen na jednom typu počítače, další technologie byly standardizovány a dočkaly se celosvětového rozšíření. Všechny technologie, které slouží pro připojení externích zařízení k počítačům, je možné rozdělit na základě několika vlastností, jež budou popsány v následujícím textu:

  1. Externí sběrnice vs. port
  2. Sériový vs. paralelní přenos dat
  3. Jednosměrná vs. obousměrná komunikace
  4. Způsob řízení sběrnice (u portu není vlastně co řídit)
Dobové terminály se připojovaly s využitím sériového portu. Teoreticky tedy mohly být připojeny i k osmibitovým počítačům Atari (postačuje upravit napěťové úrovně).

 Obrázek 6: Dobové terminály se připojovaly s využitím sériového portu. Teoreticky tedy mohly být připojeny i k osmibitovým počítačům Atari (postačuje upravit napěťové úrovně).

Autor: Unknown, podle licence: Rights Managed

Externí sběrnice vs. port

V praxi je od sebe většinou nutné odlišit sběrnice a porty. Mezi základní vlastnosti sběrnic patří fakt, že umožňují s počítačem propojit několik zařízení, přičemž řízení sběrnice (takzvanou arbitráž) obstarává buď jedno předem zvolené zařízení (používalo se pro ně označení master, a vzhledem k tomu, že je tento článek o historických počítačích, použiji historické jméno) nebo zařízení libovolné (master-select). Fyzická topologie externí sběrnice může být založena například na hvězdě/stromu (USB, ta má mimochodem pouze centrální řízení) nebo mohou být všechna zařízení připojena na společné vodiče (což je případ dnes popisované sběrnice SIO nebo například I2C).

Naproti tomu port slouží pro připojení pouze jednoho zařízení, které jednosměrně či obousměrně komunikuje s počítačem resp. s čipem, který v počítači ke komunikaci slouží. Typickým zástupcem portů, se kterým se ještě i dnes můžeme u některých počítačů setkat, je sériový port RS-232 (označován jako COM) a port paralelní (na osobních počítačích bývá resp. spíše býval označen jako LPT). I původní způsob připojení klávesnice u počítačů IBM PC přes konektor DIN i modernější (technicky však hůře navržený) konektor PS/2 je ve své podstatě založen na jednoúčelovém sériovém obousměrném portu.

Konektor typu A určený pro externí sběrnici USB. Tento konektor se připojuje vždy do počítače (přesněji řečeno do zařízení typu master), na druhé straně propojovacího kabelu je umístěn konektor typu B, protože na USB není možné připojit dvě zařízení typu master. To mj. znamená, že přes USB nelze přímo (bez nějakého mezičlánku) propojit dva počítače.

 Obrázek 7: Konektor typu A určený pro externí sběrnici USB. Tento konektor se připojuje vždy do počítače (přesněji řečeno do zařízení typu master), na druhé straně propojovacího kabelu je umístěn konektor typu B, protože na USB není možné připojit dvě zařízení typu master. To mj. znamená, že přes USB nelze přímo (bez nějakého mezičlánku) propojit dva počítače.

Autor: Unknown, podle licence: Rights Managed

Sériový vs. paralelní přenos dat

U externích sběrnic i portů se také rozlišuje, zda jsou data přenášena sériově či paralelně. Při sériovém přenosu dat jsou jednotlivé byty či delší bloky rozděleny na sekvence bitů, které jsou postupně přeneseny sériovým způsobem, tj. bit po bitu (pro přenos dat tímto způsobem teoreticky postačují pouze dva vodiče, popř. jeden vodič a společná zem). Naproti tomu u paralelního přenosu je použito větší množství vodičů pro přenos dat, další vodiče jsou použity k řídicím účelům. Například u výše zmíněného paralelního portu (LPT) se přenos provádí po celých bytech, tj. tento port obsahuje osm datových vodičů, které jsou doplněny o vodiče řídicí a signální.

Nejvíce datových vodičů bylo možné možné najít v některých verzích externího rozhraní SCSI, dnes se ovšem toto rozhraní pro připojení externích zařízení již příliš nepoužívá, protože je postupně nahrazováno sběrnicí USB či rozhraním FireWire (SCSI má i svoji interní podobu). Do nákladů, které je nutné vynaložit na implementaci externí sběrnice či portu, je nutné započítat cenu konektorů i vlastních vodičů, mechanickou odolnost atd. a proto je v této oblasti patrný příklon k sériovému způsobu přenosu dat – zmenšuje se počet vodičů (levnější kabely) a i konektory mohou být jednodušší a levnější.

Jednosměrná vs. obousměrná komunikace

Některé porty (u sběrnic se s touto vlastností v naprosté většině případů nesetkáme) také slouží pouze pro jednosměrný přenos dat. Například již dvakrát zmíněný původní paralelní port LPT byl původně určen pouze pro jednosměrný přenos dat z počítače do tiskárny. Zpět se přenášely po speciálních vodičích pouze stavové informace typu „tiskárna připravena“ či „došel papír“. Teprve pozdější rozšíření paralelního portu (technologie ECP a další) umožnily obousměrný přenos dat a posléze i přenos vyšší rychlostí, čehož bylo možné využít v programu LapLink, Norton Commander apod. pro propojení dvou počítačů v dobách před masivním rozšířením Ethernetu.

Prakticky všechna moderní zařízení vyžadují obousměrnou komunikaci, proto i externí sběrnice a porty bývají koncipovány pro přenos dat v obou směrech. I klávesnice, která je z hlediska operačního systému považována za typické vstupní (jednosměrné) zařízení, ve skutečnosti vyžaduje alespoň minimální obousměrnou komunikaci – počítač například může měnit rychlost automatického opakování stlačené klávesy, nebo je možné programově blikat světelnými diodami na klávesnici.

Způsob řízení sběrnice

Důležité je taktéž rozlišit způsob řízení sběrnice. V podstatě jsou možné dva způsoby řízení: řízení centrální, přičemž oním centrálním uzlem nejčastěji bývá počítač (přesněji řečeno řadič externí sběrnice umístěný v počítači, což je v případě Atari čip POKEY a PIA s dopomocí operačního systému) a řízení decentralizované, při kterém se jakékoli zařízení připojené na sběrnici může stát masterem, který provoz na sběrnici řídí.

U externích sběrnic se většinou můžeme setkat s centrálním řízením. Centrální řízení bývá v tomto případě vhodnější, protože externí zařízení nebývají konstruována tak, aby mohla komunikovat přímo sama mezi sebou, tudíž jsou všechny komunikace směrovány na centrální uzel představovaný počítačem. Naproti tomu je u některých počítačových architektur možné, aby interní zařízení spolu komunikovala přímo bez nutnosti jakýchkoli zásahů ze strany mikroprocesoru (to se však již pohybujeme ve zcela jiných cenových hladinách, než by bylo pro domácí osmibitové počítače vhodné).

Centrální řízení se také jednodušeji implementuje, protože není nutné navrhovat složitý přenosový protokol, řešit kolize více zařízení, které by chtěly sběrnici obsluhovat atd. Typickým příkladem externí sběrnice s centrálním řízením je USB. Zde je dokonce zařízení typu master vybaveno konektory odlišnými od zařízení typu slave. Tato sběrnice má fyzickou topologii hvězdy/stromu, přičemž uzlem stromu je vždy zařízení typu master, ostatní zařízení jsou typu slave. Na úrovni logické jsou všechna zařízení typu slave rovnocenná, i když mohou být zapojena v navzájem odlišných úrovních (patrech) stromové struktury. I u průmyslové sběrnice I2C je jedno zařízení typu master, na fyzické úrovni jsou však všechna zařízení (masterslave) připojena na společné vodiče.

Poznámka: způsob řízení taktéž ovlivňuje, jaké vodiče musí sběrnice obsahovat, protože je nutné nějakým způsobem odlišit příkazy od dat. Například v případě SIO pro osmibitová Atari je sběrnice vybavena signálem COMMAND, který slouží přesně k tomuto účelu.

SIO na osmibitových Atari z pohledu „teorie“ sběrnic a portů

SIO na osmibitových Atari můžeme charakterizovat následovně:

  1. Jedná se o externí sběrnici, na kterou lze připojit více inteligentních zařízení a na konci „hloupý“ kazetový magnetofon. Zařízení jsou vybavena vždy dvěma SIO konektory, což umožňuje jejich propojení.
  2. Je použit sériový přenos dat po jedné vstupní a jedné výstupní lince. Přenos je asynchronní, ale je doplněn o hodinové signály, takže se jedná o hybridní režim.
  3. Přenos je střídavý obousměrný (teoreticky však plně obousměrný).
  4. Sběrnice je řízena počítačem. Všechna ostatní zařízení jsou v režimu „poslouchání příkazů“. Tím, že vše řídí počítač, je vyřešená i arbitráž – žádné zařízení si nemůže vynutit o přístup na sběrnici.

Navíc, kromě nízkoúrovňového protokolu pro posílání bajtů (asynchronně), existuje i vysokoúrovňový protokol zajištující přenos příkazů i datových rámců do/z zvoleného zařízení. Výjimkou je „hloupý“ magnetofon, který příkazy ignoruje a je navíc řízen dalšími signály.

Poznámka: existence vysokoúrovňového protokolu znamená, že zařízení musí být dostatečně „inteligentní“. Například musí být vybavena mikroprocesorem MOS 6507 popř. jiným čipem, který rozpoznává příkazy a odpovídajícím způsobem na ně reaguje.
Vpravo dole je konektor SIO v počítači Atari. Vlevo nahoře pak dobastlený sériový port RS-232, který je interně připojen taktéž k SIO.

 Obrázek 8: Vpravo dole je konektor SIO v počítači Atari. Vlevo nahoře pak dobastlený sériový port RS-232, který je interně připojen taktéž k SIO.

Autor: Unknown, podle licence: Rights Managed

Konektor sériové sběrnice SIO

Pro sériovou sběrnici SIO byl navržen nový (proprietární) konektor se třinácti piny. Ty lze rozdělit do tří kategorií: napájení (a zem), sériový přenos (vstup, výstup, hodiny), řízení sběrnice a konečně několik pinů je určených pouze pro připojení kazetového magnetofonu. Všech třináct pinů SIO je vypsáno v následující tabulce:

Pin Název signálu Stručný popis
1 Clock In obousměrný hodinový signál pro synchronní přenosy dat
2 Clock Out výstup hodinového signálu z počítače
3 Data In asynchronní sériový přenos dat z periferního zařízení do počítače
4 GND zem
5 Data Out asynchronní sériový přenos dat z počítače do periferního zařízení
6 GND zem
7 Command nastaveno na nízkou úroveň při posílání příkazu počítačem
8 Motor Control řízení motoru kazetového magnetofonu
9 Proceed žádost o přerušení od periferního zařízení (u standardního zapojení nevyužito)
10 +5V / Ready +5V pro zařízení bez vlastního napájení (kazetový magnetofon) + informace o tom, že je počítač připraven
11 Audio In audio signál z kazetového magnetofonu
12 +12V +12V (dostupné jen u starších modelů počítačů)
13 Interrupt žádost o přerušení od periferního zařízení (u standardního zapojení nevyužito)

Interní zapojení signálů je ukázáno na následujících dvou obrázcích. Na obrázku prvním vidíme zapojení čtyř pinů k čipu POKEY. Jedná se o hodinové signály a taktéž o vstup i výstup sériových dat:

Propojení čipu POKEY s některými piny SIO.

 Obrázek 9: Propojení čipu POKEY s některými piny SIO.

Autor: sgl, podle licence: Rights Managed

Další piny jsou připojeny na čip PIA, kterému se budeme podrobněji věnovat v samostatném článku (jedná se o poslední „velký“ čip, který v počítačích Atari najdeme):

Propojení čipu PIA s některými piny SIO.

 Obrázek 10: Propojení čipu PIA s některými piny SIO.

Autor: sql, podle licence: Rights Managed

Přenosový protokol: asynchronní režim

U sběrnice SIO se typicky používá asynchronní přenos dat, při kterém jsou (stále nezbytné) synchronizační značky vkládány na začátek a konec většího celku bitů. V případě RS-232C atd. se může přenášet 5, 6, 7, nejčastěji však 8 bitů, tedy celý bajt. U SIO se naproti tomu přenáší vždy osm bitů – nelze tedy nastavit odlišnou hodnotu. K těmto osmi bitům se přidává start bit a stop bit. Jak takový „asynchronní“ přenos vypadá? Obě zařízení, tedy jak přijímací, tak i vysílací strana, se nejprve musí vhodným způsobem nakonfigurovat, aby přijímač věděl, jaká je přenosová rychlost (viz další kapitolu).

Datový vodič (tedy SEROUT nebo SERIN podle směru přenosu) se před vlastním přenosem nachází v klidovém stavu, což znamená vysokou úroveň napětí. Tato úroveň může trvat libovolně dlouhou dobu. Před začátkem odeslání osmi bitů je nejprve poslán takzvaný start bit, který má vždy nulovou hodnotu, tj. je zaručeno, že se klidový stav linky (vysoká úroveň) vždy změní. Na straně přijímacího zařízení se musí co nejpřesněji rozeznat změna stavu linky, tj. sestupná hrana, která reprezentuje začátek start bitu. Od této chvíle přijímací strana ví, že se přijme osm bitů s předem nastavenou bitovou rychlostí. Přijímací strana tedy vzorkuje stav linky a podle svých vlastních hodin rozeznává hodnoty jednotlivých bitů. Na konci přenášené sekvence následuje takzvaný stop bit. Ten má vždy hodnotu logické jedničky, což znamená vysokou úroveň napětí. Délka stop bitu je v případě SIO vždy rovna délce běžného bitu (u RS-232C to může být 1,5 bitu nebo i 2 bity).

Synchronizace na úrovni jednotlivých bitů je navíc realizována i signálem CLOCK OUT. Ten má vyšší úroveň (logickou jedničku) na začátku přenosu bitu, sestupná hrana nastává v půlce bitu. Zařízení tedy může snímání posílaného bitu synchronizovat se sestupnou hranou (takže přenos je sice asynchronní, ale vlastně i současně synchronní, alespoň v jednom směru).

Signály používané v SIO jsou kompatibilní s TTL (na rozdíl od RS-232C). Logická jednička je na výstupu ≥3,0 V, logická nula ≤0,4 V. Na vstupu se za logickou jedničku považuje úroveň ≥2,0 V a za logickou nulu ≤0,8 V (hodnoty mezi těmito limity můžou způsobit „překlopení“ na libovolnou hodnotu).

Volba přenosové rychlosti

Standardní přenosová rychlost SIO je specifikována na 19200 bitů za sekundu (a jedná se i o rychlost nastavenou operačním systémem při provádění I/O operací), ovšem tato rychlost je plně konfigurovatelná. Například některé disketové jednotky (popř. nověji čtečky SD karet) dokážou v „turbo“ režimu přenášet data rychlostí 72000 bitů za sekundu, popř. i vyšší (nejvyšší rychlost dosahuje zhruba 127000 bitů za sekundu). Na druhou stranu ovšem například standardní tiskárny takové vysoké rychlosti nepodporují, takže musí být odpojeny. Hodinový signál, od něhož se odvozuje přenosová rychlost, je řízen čipem POKEY, konkrétně zvukovými kanály (no proč je nevyužít – prostě se při tisku nebude přehrávat hudba).

Podívejme se nyní, jak je nastavena výše uvedená standardní rychlost 19200 bitů za sekundu. Nejdříve nastavíme POKEY takovým způsobem, že budou spojeny kanály 1+2 a 2+3 do dvojice 16bitových kanálů se 16bitovými děliči. A vstupní frekvence do těchto kanálů bude přímo hodinový signál CPU 1,77 nebo 1,79 MHz.

Dále vypočteme hodnotu děliče frekvence. Vstupní frekvence je rovna 17734470 Hz (pro PAL) a výpočet děliče vypadá takto:

N=f_cpu/(2*baudrate)-7

Po dosazení požadované rychlosti 19200:

N=17734470/(2*19200)-7=39

Hodnota děliče tedy bude rovna 39 (popř. 40 na NTSC).

Celé nastavení čipu POKEY tedy může vypadat takto (získáno z OS ROM):

LDA #$27        ; nastavení děliče
STA AUDF3       ; uložení pro kanál číslo 3
 
LDA #$00        ; dělení 1
STA AUDF4       ; uložení pro kanál číslo 4
 
LDA #$78        ; standard pro SIO: vstupem je f_CPU, spojení kanálů 1+2 a 3+4
STA AUDCTL      ; změna nastavení POKEY
 
LDA #$03        ; standardní nastavení SIO a klávesnice
STA SKCTL       ; změna nastavení POKEY
 
; nyní je možné zahájit přenos
LDA date
STA SEROUT      ; už vysíláme
Poznámka: výpočet děliče můžeme otočit a získat tak vzorec pro podporované přenosové rychlosti:
N=f_cpu/(2*baudrate)-7
...
baudrate=f_cpu/(2*N+7)

Tedy například:

N baudrate Poznámka
0 126674 teoretické maximum (některé SW nedokážou nastavit)
1 110840 praktické maximum
5 73893 cca SIO×4, použito v IndustGT Syncromesh (ovšem to jsem nikdy neviděl)
9 55420 cca SIO×3, použito v US-Doubleru
10 38553 použito jednotkou XF551 v režimu High Speed (má být 39000)
39 19276 standard SIO
85 9638 blízko std. modemové rychlosti
Poznámka: POKEY dokáže při čtení pracovat korektně i v případě, že se aktuální přenosová rychlost liší od teoretické rychlosti až o ±5%. Proto nevadí, že hodnoty POKEY divisoru nejsou zcela přesná (a budou odlišná i pro NTSC).

Přenosový protokol: vyšší úroveň

SIO ovšem neprovádí pouze „hloupý“ sériový přenos libovolných bloků dat. Protože se nejedná o port, ale o sběrnici, je nutné nějakým způsobem informovat připojená zařízení, jaká operace se bude provádět. K tomu slouží signál/pin command (je negovaný). Počítač zařízení ovládá tak, že jim pošle pět bajtů (nazývaných datový rámec), současně s nimi nastavuje právě signál command, takže všechna zařízení ví, že mají naslouchat a vybrané zařízení má vhodným způsobem zareagovat. Pokud je signál command aktivní (je v logické nule), vyšle počítač pět bajtů s následujícím obsahem:

Bajt (pořadí) Jméno Stručný popis
1 DDEVIC ID zařízení (viz další kapitolu)
2 DCOMND příkaz (bude popsáno o dvě kapitoly dále)
3 DAUX1 aux bajt (záleží na příkazu)
4 DAUX2 aux bajt (záleží na příkazu)
5 × kontrolní součet předchozích čtyř bajtů

Následně počítač čeká na odpověď vybraného zařízení. Odpověď se skládá ze dvou bajtů: vlastní odpovědi a kontrolního součtu. Odpověď může být $41 nebo $4E, což v ATASCII znamená znaky A (acknowledge) a N (negative). Po odpovědi A se příkaz provede (bude popsáno níže), při odpovědi N je přenos ukončen. Samotný blok (datový rámec) za odpovědí A může mít prakticky libovolnou délku a končí bajtem $43 nebo $45. Asi už sami tušíte význam. $43 v ATASCII znamená znak C (complete) a $45 znak E (error).

Tímto způsobem je vyřešena i arbitráž sběrnice. Všechna zařízení (kromě počítače) jsou totiž vždy v režimu slave a jen počítač „nařizuje“, jaké příkazy má které zařízení vykonat. Neexistuje zde tedy koncept aktivních zařízení, které by například mohla dát najevo „konečně mám připravena data, posílám“. To pochopitelně do jisté míry zpomaluje komunikaci, protože například příkaz čti sektor znamená, že všechna ostatní zařízení musí počkat na disketovou jednotku, až celý sektor načte a pošle. Totéž platí pro příkaz tiskni řádek apod.

Poznámka: samotný koncept SIO sběrnice i přenosového protokolu počítá s tím, že zařízení budou „hodná“, budou protokol dodržovat a reagovat budou pouze na příkazy se správným ID. Taktéž se počítá s tím, že přenosová rychlost bude neměnná a ideálně standardní (9600 nebo 19200 bitů/sekundu). Připojit lze i rychlejší zařízení, ale typicky samostatně (bez dalších zařízení).

ID zařízení

Zařízení, kterému je příkaz posílán, je identifikováno jedním bajtem. Identifikátor zařízení určuje i jeho typ, protože zařízení jsou rozdělena do skupin. Teoreticky (ovšem skutečně jen teoreticky) je možné k Atari připojit devět disketových jednotek, devět tiskáren, čtyři zařízení realizující sériový port RS-232C a na konec ještě připojit „hloupý“ kazetový magnetofon. Praxe bude odlišná – počítat můžeme s maximálně dvěma disketovými jednotkami, jednou tiskárnou a samozřejmě s kazetovým magnetofonem:

ID Typ Jméno zařízení
$31 disketová jednotka D1:
$32 disketová jednotka D2:
$33 disketová jednotka D3:
$34 disketová jednotka D4:
$35 disketová jednotka D5:
$36 disketová jednotka D6:
$37 disketová jednotka D7:
$38 disketová jednotka D8:
$39 disketová jednotka D9:
     
$40 tiskárna P1:
$41 tiskárna P2:
$42 tiskárna P3:
$43 tiskárna P4:
$44 tiskárna P5:
$45 tiskárna P6:
$46 tiskárna P7:
$47 tiskárna P8:
$48 tiskárna P9:
     
$50 RS-232 (modem atd.) R1:
$51 RS-232 (modem atd.) R2:
$52 RS-232 (modem atd.) R3:
$53 RS-232 (modem atd.) R4:
     
$60 kazetový magnetofon (nepoužíváno) C:

Posílané příkazy

Zajímavé bude zjistit, jaké příkazy vlastně může počítač zařízením poslat. ID příkazu je uloženo v jednom bajtu, takže se teoreticky rozeznává 256 možných příkazů. Dostupných je jich však méně – několik desítek. To ovšem neznamená, že by všechna zařízení musela rozpoznávat všechny příkazy (to ani není možné). Pouze zařízení, kterému je příkaz poslán, ho musí rozpoznat a reagovat na něj (klidně i odpovědí N – negative). Příkazy mohou mít parametry předávané v bajtech aux1 a aux2 (viz popis pětibajtového příkazového rámce). Podívejme se na některé základní příkazy i s jejich stručnými vysvětlivkami:

ID příkazu Jméno příkazu aux1 aux2 Stručný popis
$21 format drive × × naformátování celé diskety
$22 format medium density × × naformátování celé diskety (Atari 1050)
$3f get speed index × × zjistí dělič frekvence pro POKEY
$50 write sector sektor (nižší bajt) sektor (vyšší bajt) zápis do sektoru (následuje datový rámec, typicky délky 128 bajtů)
$51 quit × × dokončí zápis a zastaví motor (tedy vlastně flush)
$52 read sector sektor (nižší bajt) sektor (vyšší bajt) čtení sektoru (zařízení pošle datový rámec, typicky délky 128 bajtů)
$53 get status × × vrátí čtyři bajty s informacemi o stavu zařízení
$54 read memory adresa (nižší bajt) adresa (vyšší bajt) čtení 256bajtového bloku paměti
$57 write sector with verify sektor (nižší bajt) sektor (vyšší bajt) zápis do sektoru (následuje datový rámec) + verifikace čtením
$56 print line × počet znaků tisk celé řádky (následuje datový rámec)
         
Poznámka: hodnota sektoru je typicky v rozsahu 1 až 720, ovšem závisí na typu formátu diskety a taktéž na tom, zda se jedná o disketovou jednotku nebo o její moderní emulaci. Teoreticky je totiž možné adresovat 65536 sektorů, každý o velikosti 128 bajtů, tedy celých osm megabajtů (to není na osmibitový počítač špatné, že?).

Řídicí a stavové registry čipu POKEY používané pro sériovou komunikaci

Samotný sériový přenos bajtů je řízen čipem POKEY ve spolupráci se subrutinami operačního systému (ty ovšem nejsou příliš rychlé, protože jsou založeny na reakci na přerušení). Pro sériovou komunikaci se používá pětice řídicích a stavových registrů tohoto čipu:

Jméno Stínový registr Čtení/zápis Adresa Stručný popis
SERIN   čtení $d20d buffer pro data posílaná po sériovém portu (čtení-příjem)
SKSTAT   čtení $d20f stavový registr sériového portu
SEROUT   zápis $d20d buffer pro data posílaná po sériovém portu (zápis-vysílání)
SKCTL SSKCLT zápis $d20f řízení sériového portu, režimu čtení klávesnice a rychlého čtení paddle
SKRES   zápis $d20a zápis jakékoli hodnoty provede vynulování bitů 5 až 7 registru SKSTAT

Ovšem jak při posílání, tak i při čtení dat po sériové lince jsou generována přerušení, takže se v praxi navíc pracuje i s dalšími dvěma registry čipu POKEY:

Jméno Stínový registr Čtení/zápis Adresa Stručný popis
IRQST   čtení $d20e stav jednotlivých přerušení (IRQ)
IRQEN POKMSK zápis $d20e povolení či zákaz jednotlivých přerušení

Stav sériového portu

Stav sériového portu, ale i dalších subsystémů čipu POKEY, lze zjistit přečtením stavového registru SKSTAT. Význam jednotlivých bitů tohoto registru je vypsán v tabulce:

Bit Stručný popis
7 chyba při přenosu rámce (jak příkazového, tak i datového)
6 přichází další data přes SIO, původní bajt ale nebyl přečten
5 byla stlačena další klávesa, původní kód však nebyl přečten
4 data (bajt) je přečten
3 je stlačena klávesa Shift
2 poslední stlačená klávesa je stále stlačena
1 právě se provádí čtení bajtu přes SIO (busy)
0 nepoužito

Nejvyšší tři bity registru SKSTAT jsou určeny pro záznam chybových stavů, ať již při čtení dat přes SIO, tak i při čtení stavu klávesnice. Tyto bity je možné nastavit na výchozí hodnotu zápisem libovolného bajtu do řídicího registru SKREST, což lze typicky provést na začátku subrutiny pro přenos dat (přímý zápis do registru SKSTAT totiž není možný).

Nastavení režimu sériového portu

Nastavení režimu sériového portu (ale i dalších subsystémů čipu POKEY) se provádí zápisem bajtu do registru SKCTL. Zejména je možné nastavit takzvanou dvoutónovou modulaci použitou při práci s kazetovým magnetofonem, což je téma, kterému se budeme podrobněji věnovat příště. Samotné nastavení sériového portu spočívá v určení, jakým způsobem bude generovaný hodinový výstup a jak se bude číst hodinový vstup. To je ve skutečnosti zvláštní (možná až nadbytečné), protože SIO se typicky používá v jediném režimu – asynchronním s případnou „dopomocí“ zařízením existencí signálu Clock Out:

Školení Kubernetes

Bit Stručný popis
7 použito pro řízení dvoutónové modulace
6 řízení režimu sériového portu (viz níže)
5 řízení režimu sériového portu (viz níže)
4 řízení režimu sériového portu (viz níže)
3 povolení dvoutónové modulace (bude popsáno příště)
2 rychlé čtení stavů potenciometrů
1 povolení čtení klávesnice
0 povolení logiky eliminující zákmity při stisku klávesy

Pomocí bitů 7, 6 a 5 se určuje způsob generování hodinového signálu (označením kanál máme na mysli signál získaný děličem zvoleného zvukového kanálu):

Bity 7, 6 a 5 Vstupní hodiny Výstupní hodiny Obousměrné hodiny
0 0 0 externí signál externí signál vstup
0 0 1 kanál 3+4 externí signál vstup
0 1 0 kanál 4 kanál 4 výstup, kanál 4
0 1 1 kanál 3+4 kanál 4 (async) vstup
1 0 0 externí signál kanál 4 vstup
1 0 1 kanál 3+4 kanál 4 (async) vstup
1 1 0 kanál 4 kanál 2 výstup, kanál 4
1 1 1 kanál 3+4 kanál 2 vstup
Poznámka: podrobnosti si opět ukážeme příště.

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_color1.asm změna barvy pozadí – základní varianta příkladu https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/background_color1.asm
7 background_color1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/background_color1_list.asm
8 background_color1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/background_color1.map
       
9 background_color2.asm změna barvy pozadí – využití předdefinovaných konstant https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/background_color2.asm
10 background_color2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/background_color2_list.asm
11 background_color2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/background_color2.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_computation1.asm výpočet barvy, varianta bez bitových posunů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/color_computation1.asm
16 color_computation1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/color_computation1_list.asm
17 color_computation1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/color_computation1.map
       
18 color_computation2.asm výpočet barvy, varianta s bitovými posuny https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/color_computation2.asm
19 color_computation2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/color_computation2_list.asm
20 color_computation2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/color_computation2.map
       
21 subroutine1.asm skok do podprogramu bez předávání parametrů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/subroutine1.asm
22 subroutine1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/subroutine1_list.asm
23 subroutine1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/subroutine1.map
       
24 subroutine2.asm skok do podprogramu s předáním parametru https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/subroutine2.asm
25 subroutine2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/subroutine2_list.asm
26 subroutine2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/subroutine2.map
       
27 hex_number1.asm tisk jedné hexadecimální číslice (nekorektní varianta) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number1.asm
28 hex_number1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number1_list.asm
29 hex_number1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number1.map
       
30 hex_number2.asm tisk jedné hexadecimální číslice (korektní varianta) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number2.asm
31 hex_number2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number2_list.asm
32 hex_number2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number2.map
       
33 hex_number3.asm tisk jedné hexadecimální číslice (korektní varianta po refaktoringu) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number3.asm
34 hex_number3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number3_list.asm
35 hex_number3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number3.map
       
36 hex_number4.asm tisk jedné hexadecimální číslice, varianta postavená na makrech https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number4.asm
37 hex_number4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number4_list.asm
38 hex_number4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number4.map
       
39 hex_number5.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_number5.asm
40 hex_number5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number5_list.asm
41 hex_number5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number5.map
       
42 hex_number6.asm příprava pro tisk dvouciferné hexadecimální hodnoty https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number6.asm
43 hex_number6_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number6_list.asm
44 hex_number6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number6.map
       
45 hex_number7.asm realizace tisku dvouciferné hexadecimální hodnoty https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number7.asm
46 hex_number7_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number7_list.asm
47 hex_number7.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number7.map
       
48 hex_number8.asm makro pro logický posun doprava o zadaný počet bitů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number8.asm
49 hex_number8_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number8_list.asm
50 hex_number8.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number8.map
       
51 hex_number9.asm čekání na stisk klávesy https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number8.asm
52 hex_number9_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number8_list.asm
53 hex_number9.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/hex_number8.map
       
54 fill_block1.asm vyplnění bloku, varianta se dvěma index registry https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block1.asm
55 fill_block1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block1_list.asm
56 fill_block1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block1.map
       
57 fill_block2.asm vyplnění bloku, nekorektní varianta využívající jeden index registr https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block2.asm
58 fill_block2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block2_list.asm
59 fill_block2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block2.map
       
60 fill_block3.asm vyplnění bloku, korektní varianta využívající jeden index registr https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block3.asm
61 fill_block3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block3_list.asm
62 fill_block3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block3.map
       
63 fill_block4.asm vyplnění bloku delšího než 256 bajtů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block4.asm
64 fill_block4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block4_list.asm
65 fill_block4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block4.map
       
66 fill_block5.asm vyplnění bloku, čítání směrem nahoru https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block5.asm
67 fill_block5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block5_list.asm
68 fill_block5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/fill_block5.map
       
69 pmg01.asm inicializace PMG, povolení PMG, nastavení pozice a tvaru prvního hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg01.asm
70 pmg01_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg01_list.asm
71 pmg01.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg01.map
       
72 pmg02.asm nastavení pozice, tvaru a barvy prvního hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg02.asm
73 pmg02_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg02_list.asm
74 pmg02.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg02.map
       
75 pmg03.asm vliv zákazu DMA na zobrazení PMG https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg03.asm
76 pmg03_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg03_list.asm
77 pmg03.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg03.map
       
78 pmg04.asm postupná změna horizontální velikosti hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg04.asm
79 pmg04_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg04_list.asm
80 pmg04.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg04.map
       
81 pmg05.asm odlišná bitová maska tvaru hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg05.asm
82 pmg05_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg05_list.asm
83 pmg05.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg05.map
       
84 pmg06.asm inicializace a zobrazení dvou hráčů, kteří se překrývají https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg06.asm
84 pmg06_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg06_list.asm
86 pmg06.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg06.map
       
87 pmg07.asm naivní způsob nastavení bitmapy prvního hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg07.asm
88 pmg07_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg07_list.asm
89 pmg07.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg07.map
       
90 pmg08.asm elegantnější způsob nastavení bitmapy prvního hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg08.asm
91 pmg08_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg08_list.asm
92 pmg08.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg08.map
       
93 pmg09.asm zobrazení všech čtyř hráčů, změna priority zobrazení https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg09.asm
94 pmg09_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg09_list.asm
95 pmg09.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg09.map
       
96 pmg10.asm nastavení bitmap všech čtyř hráčů https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg10.asm
97 pmg10_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg10_list.asm
98 pmg10.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg10.map
       
99 pmg_stick1.asm ovládání prvního hráče joystickem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick1.asm
100 pmg_stick1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick1_list.asm
101 pmg_stick1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick1.map
       
102 pmg_stick2.asm zobrazení všech čtyř střel https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick2.asm
103 pmg_stick2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick2_list.asm
104 pmg_stick2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick2.map
       
105 pmg_stick3.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_stick3.asm
106 pmg_stick3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick3_list.asm
107 pmg_stick3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick3.map
       
108 pmg_stick4.asm korektní zobrazení pátého hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick4.asm
109 pmg_stick4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick4_list.asm
110 pmg_stick4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick4.map
       
111 pmg_stick5.asm detekce stisku tlačítka joysticku, změna barvy prvního hráče https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick5.asm
112 pmg_stick5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick5_list.asm
113 pmg_stick5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick5.map
       
114 pmg11.asm automatický horizontální pohyb prvního hráče, realizace zpožďovací smyčky https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg11.asm
115 pmg11_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg11_list.asm
116 pmg11.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg11.map
       
117 pmg12.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/pmg12.asm
118 pmg12_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg12_list.asm
119 pmg12.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg12.map
       
120 pmg13.asm vertikální posun spritu směrem dolů (nekorektní varianta) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg13.asm
121 pmg13_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg13_list.asm
122 pmg13.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg13.map
       
123 pmg14.asm vertikální posun spritu směrem dolů (korektní varianta) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg14.asm
124 pmg14_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg14_list.asm
125 pmg14.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg14.map
       
126 pmg15.asm vertikální posun spritu směrem nahoru (korektní varianta) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg15.asm
127 pmg15_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg15_list.asm
128 pmg15.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg15.map
       
129 pmg_stick6.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_stick6.asm
130 pmg_stick6_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick6_list.asm
131 pmg_stick6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_stick6.map
       
132 pmg_collision1.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_collision1.asm
133 pmg_collision1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision1_list.asm
134 pmg_collision1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision1.map
       
135 pmg_collision2.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_collision2.asm
136 pmg_collision2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision2_list.asm
137 pmg_collision2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision2.map
       
138 pmg_collision3.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_collision3.asm
139 pmg_collision3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision3_list.asm
140 pmg_collision3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision3.map
       
141 pmg_collision4.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_collision4.asm
142 pmg_collision4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision4_list.asm
143 pmg_collision4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/pmg_collision4.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 antic1.asm nastavení textového režimu se čtyřmi barvami a 20×12 znaky https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic1.asm
148 antic1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic1_list.asm
149 antic1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic1.map
       
150 antic2.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/antic2.asm
151 antic2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic2_list.asm
152 antic2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic2.map
       
153 antic3.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/antic3.asm
154 antic3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic3_list.asm
155 antic3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic3.map
       
156 antic4.asm nastavení standardního textového režimu GR.0, výpis 256 znaků https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic4.asm
157 antic4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic4_list.asm
158 antic4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic4.map
       
159 antic5.asm volba mezinárodní znakové sady pro textový režim GR.0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic5.asm
160 antic5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic5_list.asm
161 antic5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic5.map
       
162 antic6.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/antic6.asm
163 antic6_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic6_list.asm
164 antic6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic6.map
       
165 antic7.asm tisk 64 znaků ve čtyřech barvách v režimu GR.1 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic7.asm
166 antic7_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic7_list.asm
167 antic7.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic7.map
       
168 antic8.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/antic8.asm
169 antic8_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic8_list.asm
170 antic8.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic8.map
       
171 antic9.asm nastavení textového režimu GR.12 a výpis znaků na obrazovku https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic9.asm
172 antic9_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic9_list.asm
173 antic9.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic9.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_bitmap1.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_bitmap1.asm
181 antic_bitmap1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap1_list.asm
182 antic_bitmap1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap1.map
       
183 antic_bitmap2.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_bitmap2.asm
184 antic_bitmap2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap2_list.asm
185 antic_bitmap2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap2.map
       
186 antic_bitmap3.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_bitmap3.asm
187 antic_bitmap3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap3_list.asm
188 antic_bitmap3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap3.map
       
189 antic_bitmap4.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_bitmap4.asm
190 antic_bitmap4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap4_list.asm
191 antic_bitmap4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap4.map
       
192 antic_bitmap5.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_bitmap5.asm
193 antic_bitmap5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap5_list.asm
194 antic_bitmap5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap5.map
       
195 antic_bitmap6.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_bitmap6.asm
196 antic_bitmap6_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap6_list.asm
197 antic_bitmap6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap6.map
       
198 antic_bitmap7.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_bitmap7.asm
199 antic_bitmap7_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap7_list.asm
200 antic_bitmap7.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap7.map
       
201 antic_bitmap8.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_bitmap8.asm
202 antic_bitmap8_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap8_list.asm
203 antic_bitmap8.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_bitmap8.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_dli1.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_dli1.asm
213 antic_dli1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli1_list.asm
214 antic_dli1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli1.map
       
215 antic_dli2.asm dočasná modifikace barvy pozadí provedená v DLI (dvanáctý textový řádek) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli2.asm
216 antic_dli2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli2_list.asm
217 antic_dli2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli2.map
       
218 antic_dli3.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_dli3.asm
219 antic_dli3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli3_list.asm
220 antic_dli3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli3.map
       
221 antic_dli4.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_dli4.asm
222 antic_dli4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli4_list.asm
223 antic_dli4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli4.map
       
224 antic_dli5.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_dli5.asm
225 antic_dli5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli5_list.asm
226 antic_dli5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_dli5.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_vbi1.asm aktivní čekání na dokončení vykreslení snímku (bez VBI) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi1.asm
231 antic_vbi1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi1_list.asm
232 antic_vbi1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi1.map
       
233 antic_vbi2.asm pohyb PMG realizovaný ve VBI (první způsob nastavení vektoru) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi2.asm
234 antic_vbi2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi2_list.asm
235 antic_vbi2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi2.map
       
235 antic_vbi3.asm pohyb PMG realizovaný ve VBI (druhý způsob nastavení vektoru) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi3.asm
236 antic_vbi3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi3_list.asm
238 antic_vbi3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi3.map
       
239 antic_vbi_dli1.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_dli1.asm
240 antic_vbi_dli1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli1_list.asm
241 antic_vbi_dli1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli1.map
       
242 antic_vbi_dli2.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_dli2.asm
243 antic_vbi_dli2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli2_list.asm
244 antic_vbi_dli2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli2.map
       
245 antic_vbi_dli3.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_dli3.asm
246 antic_vbi_dli3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli3_list.asm
247 antic_vbi_dli3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli3.map
       
248 antic_vbi_dli4.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_dli4.asm
249 antic_vbi_dli4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli4_list.asm
250 antic_vbi_dli4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_vbi_dli4.map
       
251 antic_scrolling1.asm příprava pro scrolling: dvojice hodnot ovládaných joystickem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling1.asm
252 antic_scrolling1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling1_list.asm
253 antic_scrolling1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling1.map
       
254 antic_scrolling2.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_scrolling2.asm
255 antic_scrolling2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling2_list.asm
256 antic_scrolling2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling2.map
       
257 antic_scrolling3.asm realizace vertikálního scrollingu https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling3.asm
258 antic_scrolling3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling3_list.asm
259 antic_scrolling3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling3.map
       
260 antic_scrolling4.asm realizace horizontálního i vertikálního scrollingu https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling4.asm
261 antic_scrolling4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling4_list.asm
262 antic_scrolling4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_scrolling4.map
       
263 antic_playfield1.asm úzké, standardní a rozšířené herní pole https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_playfield1.asm
264 antic_playfield1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_playfield1_list.asm
265 antic_playfield1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/antic_playfield1.map
       
266 gtia_mode1.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_mode1.asm
267 gtia_mode1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode1_list.asm
268 gtia_mode1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode1.map
       
269 gtia_mode2.asm nastavení GTIA režimu 9 s vykreslením vzorku barev https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode2.asm
270 gtia_mode2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode2_list.asm
271 gtia_mode2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode2.map
       
272 gtia_mode3.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_mode3.asm
273 gtia_mode3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode3_list.asm
274 gtia_mode3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode3.map
       
275 gtia_mode4.asm nastavení GTIA režimu 11 s vykreslením vzorku barev https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode4.asm
276 gtia_mode4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode4_list.asm
277 gtia_mode4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode4.map
       
278 gtia_mode5.asm nastavení GTIA režimu 11 s postupnou změnou intenzity barev https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode5.asm
279 gtia_mode5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode5_list.asm
280 gtia_mode5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode5.map
       
281 gtia_mode6.asm zobrazení barevné škály v režimu GTIA 10 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode6.asm
282 gtia_mode6_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode6_list.asm
283 gtia_mode6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode6.map
       
284 gtia_mode7.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_mode7.asm
285 gtia_mode7_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode7_list.asm
286 gtia_mode7.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode7.map
       
287 gtia_mode8.asm   https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode8.asm
288 gtia_mode8_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode8_list.asm
289 gtia_mode8.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode8.map
       
290 gtia_mode9.asm zobrazení palety se šestnácti stupni šedi https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode9.asm
291 gtia_mode9_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode9_list.asm
292 gtia_mode9.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/gtia_mode9.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 rainbow1.asm zobrazení duhy ve standardním textovém režimu GR.0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow1.asm
300 rainbow1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow1_list.asm
301 rainbow1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow1.map
       
302 rainbow2.asm scrollující duha zobrazená ve standardním textovém režimu GR.0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow2.asm
303 rainbow2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow2_list.asm
304 rainbow2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow2.map
       
305 rainbow3.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/rainbow3.asm
306 rainbow3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow3_list.asm
307 rainbow3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow3.map
       
308 rainbow4.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/rainbow4.asm
309 rainbow4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow4_list.asm
310 rainbow4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow4.map
       
311 rainbow5.asm změna barvy v průběhu zobrazení televizních řádků https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow5.asm
312 rainbow5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow5_list.asm
313 rainbow5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow5.map
       
314 rainbow6.asm změna barvy (duha) na obrazovce bez display listu https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow6.asm
315 rainbow6_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow6_list.asm
316 rainbow6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rainbow6.map
       
317 sound1.asm čistý tón komorního A https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound1.asm
318 sound1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound1_list.asm
319 sound1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound1.map
       
320 sound2.asm tón komorního A modulovaný šumem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound2.asm
321 sound2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound2_list.asm
322 sound2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound2.map
       
323 sound3.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/sound3.asm
324 sound3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound3_list.asm
325 sound3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound3.map
       
326 sound4.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/sound4.asm
327 sound4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound4_list.asm
328 sound4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound4.map
       
329 sound5.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/sound5.asm
330 sound5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound5_list.asm
331 sound5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound5.map
       
332 sound6.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/sound6.asm
333 sound6_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound6_list.asm
334 sound6.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound6.map
       
335 sound7.asm ukázka všech kombinací generátorů šumu (jeden kanál) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound7.asm
336 sound7_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound7_list.asm
337 sound7.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound7.map
       
338 sound8.asm ovládání osmibitové děličky zvukového kanálu pomocí joysticku https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound8.asm
339 sound8_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound8_list.asm
340 sound8.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound8.map
       
341 sound9.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/sound9.asm
342 sound9_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound9_list.asm
343 sound9.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/sound9.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 rnd1.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/rnd1.asm
363 rnd1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd1_list.asm
364 rnd1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd1.map
       
365 rnd2.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/rnd2.asm
366 rnd2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd2_list.asm
367 rnd2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd2.map
       
368 rnd3.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/rnd3.asm
369 rnd3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd3_list.asm
370 rnd3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd3.map
       
371 rnd4.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/rnd4.asm
372 rnd4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd4_list.asm
373 rnd4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/rnd4.map
       
374 paddle1.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/paddle1.asm
375 paddle1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/paddle1_list.asm
376 paddle1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/paddle1.map
       
377 paddle2.asm ovládání horizontální pozice spritu s využitím paddle https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/paddle2.asm
378 paddle2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/paddle2_list.asm
379 paddle2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/paddle2.map
       
380 key1.asm zobrazení stavu kláves START, SELECTOPTION https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key1.asm
381 key1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key1_list.asm
382 key1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key1.map
       
383 key2.asm řízení barvy hráče (spritu) klávesami START, SELECTOPTION https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key2.asm
384 key2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key2_list.asm
385 key2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key2.map
       
386 key3.asm přečtení kódu naposledy stisknuté klávesy https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key3.asm
387 key3_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key3_list.asm
388 key3.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key3.map
       
389 key4.asm využití systémové rutiny pro čtení kódu stisknuté klávesy https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key4.asm
390 key4_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key4_list.asm
391 key4.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key4.map
       
392 key5.asm detekce stisku klávesy BREAK https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key5.asm
393 key5_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key5_list.asm
394 key5.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/key5.map

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­sue02/page10.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
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.