Podpora unifikované práce se zařízeními v operačním systému Atari: CIO

Včera
Doba čtení: 76 minut

Sdílet

Projekt Atari perex.
Autor: Michal Tauchman, podle licence: CC BY-SA 4.0
Projekt Atari perex.
Na předchozí dvě části seriálu o tvorbě aplikací pro počítače Atari dnes navážeme. Popíšeme si totiž CIO, což je součást vestavěného operačního systému umožňující provádění I/O operací s různými zařízeními.

Při popisu standardní sériové sběrnice SIO jsme se zmínili o tom, že osmibitové domácí mikropočítače Atari nebyly navrženy pouze takovým způsobem, aby byly použitelné jako sofistikovanější herní konzole. Samotná sběrnice SIO a taktéž dnes popsaná součást operačního systému nazvaná CIO (Central Input/Output) totiž poskytuje unifikovaný přístup k různým zařízením (přes takzvané kanály), umožňuje relativně snadným způsobem přidávat nové typy zařízení (příkladem může být systém Turbo 2000, k němuž se ještě vrátíme). A co je nejdůležitější – v případě, že je nové zařízení do systému přidáno, mohou ho začít prakticky ihned používat všechny aplikace, nehledě na to, zda vůbec byly s tímto zařízením testovány nebo zda zařízení existovalo v době, kdy aplikace vznikala.

Co se dozvíte v článku
  1. Jména standardních zařízení i zařízení vyžadující vlastní ovladače
  2. Standardní operace, které mohou zařízení podporovat
  3. Koncept kanálů (channels)
  4. Výchozí nastavení kanálů po inicializaci Atari BASICu
  5. Práce se zařízeními a kanály v Atari BASICu
  6. Ukázky práce se zařízeními v Atari BASICu
  7. Čtení a zápisy celých bloků: rozšíření TurboBASICu XL
  8. Praktická ukázka: zápis obsahu grafické paměti do rastrového formátu BMP
  9. Práce se zařízeními a kanály v assembleru
  10. Adresy subrutin používaných v CIO
  11. Struktura IOCB použitá subrutinou CIOV
  12. Zápis znaku na textovou obrazovku
  13. Zápis celého řetězce na textovou obrazovku
  14. Přečtení řetězce zadávaného z klávesnice
  15. Přečtení řetězce, jeho úprava na inverzní znaky s následným tiskem na obrazovku
  16. Rozdíl mezi CIO operacemi PUTCHR a PUTREC
  17. Příloha: Makefile pro překlad všech demonstračních příkladů
  18. Repositář s demonstračními příklady
  19. Odkazy na Internetu

Příkladů lze najít celou řadu – od různých typů disketových jednotek, přes RAM disky až po již zmíněný systém Turbo 2000. Díky kombinaci CIO+SIO bylo možné osmibitové mikropočítače Atari používat i pro kancelářské činnosti (tedy spíše ve funkci osobních počítačů), přičemž bylo umožněno postupné rozšiřování systému (nová tiskárna, další disketová jednotka, RAM disk atd.)

Poznámka: koncept zařízení umožňuje velmi snadné použití běžného souborového systému (Linuxu atd.) v moderních emulátorech osmibitových mikropočítačů Atari. Emulátory totiž mohou do systému Atari snadno přidat nové zařízení, které se typicky jmenuje H: (nebo dokonce H1:H4:) a které zpřístupní zvolený adresář pro čtení a popř. i pro zápisy (volit lze režim pouze pro čtení či čtení+zápis). Podobně lze zajistit, že při tisku přes zařízení P: (printer) dojde k tisku na libovolnou tiskárnu nainstalovanou na počítači s emulátorem, alternativně se tisk může provést do textového souboru nebo do dokumentu ve formátu PDF. Nejedná se přitom o žádné ošklivé hacky, ale o plnohodnotné rozšíření možností operačního systému Atari, se kterým bylo počítáno již při jeho návrhu.
SpartaDOS je jedním z mnoha DOSů pro osmibitová Atari.

Obrázek 1: SpartaDOS je jedním z mnoha DOSů pro osmibitová Atari.

Autor: tisnik, podle licence: Rights Managed

Jména standardních zařízení i zařízení vyžadující vlastní ovladače

Nejprve si řekněme, jak se se zařízeními pracuje z pohledu běžného uživatele počítače Atari. Zařízení jsou pojmenována (typicky písmenem a popř. doplňujícím číslem) a jak (Atari)BASIC, tak i aplikace (například textový editor atd.) zařízení identifikují právě podle jeho jména. Existuje několik standardních zařízení, které jsou většinou přístupná (prakticky) kdykoli. Tato zařízení jsou vypsána v následující tabulce:

Jméno zařízení Význam jména Stručný popis zařízení
E: screen Editor  
S: Screen použito v BASICu pro výstup do grafické části obrazovky nebo v textových režimech 1 a 2
C: Cassette recorder datový rekordér, zde použit se standardním formátem zápisu (popsáno minule)
K: Keyboard vstup z klávesnice

Další zařízení lze do systému přidat tak, že se nahraje jejich příslušný ovladač resp. handler (nebo například systém DOS pro disketové jednotky nebo TOS pro Turbo 2000). Nová zařízení přidaná tímto způsobem mohou mít prakticky libovolná jména, ovšem některá jména se ustálila – opět viz následující tabulku:

Jméno zařízení Význam jména Stručný popis zařízení
P: line Printer tiskárna (většinou bez pořadového čísla, i když teoreticky by bylo možné použít více tiskáren současně)
D: Disk drive disketová jednotka, pokud je v systému jen jedna
D1-D8 Disk drive #n disketová jednotka s výběrem podle čísla (volí se přepínači)
D8 RAM Disk někdy je značen jako osmá disketová jednotka
T: Turbo 2000 Turbo 2000, celý soubor je tvořen jediným blokem
B: Turbo 2000 Turbo 2000, zápis po blocích
H: hard drive používán například v emulátorech pro čtení/zápis na souborový systém
R: RS-232 standardní sériový port (externí „krabička“ připojená k SIO)
Po přechodu do Atari BASICu je nyní možné používat zařízení D1: (až teoreticky D8:).

Obrázek 2: Po přechodu do Atari BASICu je nyní možné používat zařízení D1: (až teoreticky D8:).

Autor: tisnik, podle licence: Rights Managed

Standardní operace, které mohou zařízení podporovat

Existuje několik standardních operací, které zařízení mohou (ale nemusí) poskytovat. Tyto operace jsou vypsány (i když poněkud nepřesně) v následující tabulce:

Kód Operace Stručný popis operace
$03 Open otevření zařízení ve zvoleném režimu (viz dále) a přiřazení ke kanálu
$0C Close uzavření příslušného kanálu
(volá se odlišně) Status získání stavu zařízení (lze zavolat i pro zavřený kanál)
$07 Get Character přečtení znaku (bajtu)
$09 Put Character zápis znaku (bajtu)
$05 Read Record čtení řetězce, používá se ukončovací znak s kódem $9B (vysvětlím níže)
$09 Write Record tisk řetězce, používá se ukončovací znak s kódem $9B
>$0D Special různé speciální příkazy, pochopitelně se liší podle zařízení
Poznámka: pochopitelně platí, že ne všechny operace musí být podporovány. Například tiskárny podporují jen operace zápisu (což znamená tisk, typicky tisk celého řádku), kdežto klávesnice naopak podporuje jen operaci pro čtení. Na druhou stranu zařízení C: (představující kazetový magnetofon se standardním způsobem záznamu) podporuje jak čtení, tak i zápis.

Koncept kanálů (channels)

Ještě předtím, než se s vybraným zařízením bude provádět nějaká operace (čtení, zápis atd.), je nutné k zařízení přiřadit nějaký kanál (channel resp. přesněji řečeno I/O channel): zařízení se otevře (open) pro provádění vybraných operací (typicky pro čtení a/nebo zápis). Kanál je z pohledu programátora (běžný uživatel se s nimi nesetká) reprezentován číslem 0 až 7. Každý kanál může být v daný okamžik přiřazen pouze k jedinému zařízení. Kanál lze navíc kdykoli uzavřít (close), což znamená, že k němu bude možné přiřadit jiné zařízení.

V praxi to tedy znamená, že v jeden okamžik lze pracovat maximálně s osmi zařízeními (sem se typicky počítá i klávesnice a obrazovka, takže se počet dalších zařízení snižuje na šest), což je ovšem většinou dostačující. Příkladem může být zápis dat na kazetu ve standardním formátu. Pouze v době zápisu musí být nějaký kanál otevřen a spojen se zařízením C:. Po provedení zápisu se kanál uzavře a bude volný pro další použití.

Shrňme si předchozí text: osmibitové mikropočítače Atari podporují koncept takzvaných zařízení, která jsou identifikována jedním písmenem a popř. i číslem (za názvem zařízení následuje dvojtečka). Zařízení mohou provádět různé operace standardním způsobem (čtení a zápis znaků či bloků). Ovšem ještě předtím, než je možné nějakou operaci provést, je nutné k zařízení přiřadit kanál (0 až 7). Operace se následně budou provádět přes tento zvolený kanál.

Poznámka: současně s pojmem kanál se často setkáte se zkratkou IOCB znamenající Input/Output Control Bloc. Význam této zkratky bude vysvětlen níže.

Výchozí nastavení kanálů po inicializaci Atari BASICu

Vše si samozřejmě postupně vyzkoušíme, nejprve v Atari BASICu a posléze i v assembleru. Musíme se však zmínit ještě o jedné důležité informaci – po spuštění počítače a inicializaci Atari BASICu jsou již některé kanály inicializovány, tj. je jim přiřazeno nějaké zařízení otevřené do režimu čtení a/nebo zápisu. Pokud je k Atari připojen jen běžný kazetový magnetofon a není načten ani DOS ani TOS (či ovladač RAMdisku), je výchozí přiřazení zařízení ke kanálům následující:

Kanál Zařízení Režim otevření
0 E: vstup i výstup
6 S: výstup
7 C: vstup i výstup
Poznámka: kanály 6 i 7 lze uzavřít a použít pro jiné zařízení. Ovšem pochopitelně některé části Atari BASICu přestanou pracovat podle očekávání (například tisk textu v režimech 1 a 2). Pokus o uzavření kanálu číslo 0 povede k chybě 20 – BASIC nám naznačuje, že na kanál 0 nesmíme sahat (rozsah je tedy jen 1–7, minimálně z pohledu programátora používajícího BASIC).

Práce se zařízeními a kanály v Atari BASICu

V této části článku si ukážeme základní práci se zařízeními z Atari BASICu, a to z toho důvodu, že tyto relativně vysokoúrovňové operace se z BASICu provádí velmi snadno – Atari BASIC je sice pomalý a v mnoha ohledech omezený, ovšem práce se zařízeními je v něm vyřešena relativně dobrým způsobem (a ještě lépe je v tomto ohledu vybavený slavný TurboBASIC XL. V Atari BASICu jsou pro práci se zařízeními určené následující příkazy:

# Příkaz Parametry Stručný popis
1 OPEN #kanál, režim, další_info, „zařízení:cesta“ otevření kanálu v režimu čtení, zápisu, připojení na konec nebo čtení+zápisu
2 CLOSE #kanál uzavření kanálu
       
3 GET #kanál, proměnná načtení bajtu s jeho uložením do proměnné
4 PUT #kanál, výraz výraz je vyhodnocen, převeden na bajt a poslán na zápis do zařízení
5 INPUT #kanál, proměnné načítání dat ze zařízení, převod na numerické hodnoty nebo řetězce s uložením do proměnných
6 PRINT #kanál; výrazy výrazy jsou vyhodnoceny, převedeny na řetězec a poslány do zařízení
       
7 NOTE #kanál, proměnná_1, proměnná_2 do proměnné_1 zaznamená aktuální sektor a do proměnné_2 offset bajtu v sektoru
8 POINT #kanál, sektor, offset provede operaci typu „seek“ na sektor a offset v rámci sektoru
       
9 XIO příkaz, #kanál, režim, 0, výraz různé specializované operace (závisí na typu zařízení)

Režim v příkazu OPEN je zakódován takto:

Režim Význam
4 vstup (read)
8 výstup (write)
12 vstup+výstup (12=4+8)
9 připojení za konec (append)

Číslo sektoru je šestnáctibitové a velikost sektorů dosahuje až 256 bajtů. Z dnešního pohledu zastaralý Atari BASIC tedy dokáže pracovat se soubory o velikosti až 16MB – to není vůbec špatné.

Poznámka: operace INPUT sice může skončit (z různých důvodů) chybou, ale nikdy nedojde k buffer overflow nebo dalším typicky „céčkovým“ problémům.
Interaktivní zadávání I/O příkazů v BASICu - ten se tedy může použít i jako alternativa k shellu.

Obrázek 3: Interaktivní zadávání I/O příkazů v BASICu - ten se tedy může použít i jako alternativa k shellu.

Autor: tisnik, podle licence: Rights Managed

Ukázky práce se zařízeními v Atari BASICu

Ve všech výše uvedených příkazech se vždy pracuje s číslem kanálu a toto číslo je zapsáno za znak hashe, tedy #. Uveďme si několik příkladů zápisu (posléze si ukážeme i ucelenější příklady).

Samotné provedení vybraných vstupně/výstupních operací se v Atari BASICu realizuje poměrně snadno. Můžeme se například pokusit o zápis několika bajtů na kazetový magnetofon. Přitom se použije standardní formátu zápisu, který byl popsán v předchozím článku:

10 REM Zapis nekolika hodnot
11 REM na kazetu ve standardnim
12 REM formatu.
20 REM
21 REM Pro jistotu zavreme kanal
22 REM pred jeho pouzitim
22 CLOSE #4
30 REM Otevreme kanal pro zapis
31 OPEN #4, 8, 0, "C:"
40 REM Provedeni zapisu
41 FOR I=0 TO 100
42 PUT #4, I
43 NEXT I
50 REM Zavreme kanal
51 CLOSE #4

Pokud máte disketovou jednotku a BASIC spuštěný z DOSu, lze předchozí příklad přepsat. Nyní ovšem budeme pracovat nejenom se zařízením, ale i s názvem souboru, do kterého je prováděn zápis:

10 REM Zapis nekolika hodnot
11 REM na disketu.
20 REM
21 REM Pro jistotu zavreme kanal
22 REM pred jeho pouzitim
22 CLOSE #4
30 REM Otevreme kanal pro zapis
31 OPEN #4, 8, 0, "D:test.bin"
40 REM Provedeni zapisu
41 FOR I=0 TO 100
42 PUT #4, I
43 NEXT I
50 REM Zavreme kanal
51 CLOSE #4

Ještě jednodušší je využití zařízení H: (hard disk) v emulátoru počítačů Atari. V nastavení emulátoru se musí zvolit vhodný adresář na disku a povolit zápis do něj. Následovně lze z Atari BASICu spustit tento program:

10 REM Zapis nekolika hodnot
11 REM na disk namapovany emulatorem.
20 REM
21 REM Pro jistotu zavreme kanal
22 REM pred jeho pouzitim
22 CLOSE #4
30 REM Otevreme kanal pro zapis
31 OPEN #4, 8, 0, "H:test.bin"
40 REM Provedeni zapisu
41 FOR I=0 TO 100
42 PUT #4, I
43 NEXT I
50 REM Zavreme kanal
51 CLOSE #4

Po jeho vykonání by se měl na disku (resp. přesněji řečeno na souborovém systému Linuxu, Microsoft Windows atd.) objevit soubor test.bin s následujícím obsahem:

$ od -tx1 test.bin
 
0000000 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
0000020 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
0000040 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
0000060 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f
0000100 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f
0000120 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f
0000140 60 61 62 63 64
0000145

Zápis textových dat (řetězců):

10 REM Zapis textovych dat
11 REM na disk namapovany emulatorem.
20 REM
21 REM Pro jistotu zavreme kanal
22 REM pred jeho pouzitim
22 CLOSE #4
30 REM Otevreme kanal pro zapis
31 OPEN #4, 8, 0, "H:test.txt"
40 REM Provedeni zapisu
41 PRINT #4; "Hello Atari!"
50 REM Zavreme kanal
51 CLOSE #4

Povšimněte si, že řetězec je ukončen znakem pro konec řádku $9b:

$ od -tx1 test.txt
 
0000000 48 65 6c 6c 6f 20 41 74 61 72 69 21 9b
0000015

Podobným způsobem lze realizovat i čtení dat z nějakého zařízení. Opět si to ukažme na několika demonstračních příkladech. Navážeme na příklad předchozí (spouštěný v emulátoru). Pokusíme se načíst data ze zařízení H: a vypsat je na obrazovku:

10 REM Precteni retezce ze zarizeni
20 REM
21 REM Pro jistotu zavreme kanal
22 REM pred jeho pouzitim
22 CLOSE #4
30 REM Otevreme kanal pro cteni
31 OPEN #4, 4, 0, "H:test.txt"
40 REM Provedeni cteni
41 DIM A$(100)
42 INPUT #4, A$
50 REM Zavreme kanal
51 CLOSE #4
60 REM Co jsme nacetli?
61 PRINT A$

Výsledek může vypadat následovně:

Řetězec načtený z disku se korektně vypsal na obrazovku.

Obrázek 4: Řetězec načtený z disku se korektně vypsal na obrazovku.

Autor: tisnik, podle licence: Rights Managed

Čtení a zápisy celých bloků: rozšíření TurboBASICu XL

Atari BASIC má při práci se zařízeními jedno poměrně zásadní omezení – nedokáže totiž (bez problémů) pracovat s celými (binárními) datovými bloky. Mohlo by se zdát, že namísto binárních bloků můžeme číst a zapisovat řetězce. To je do jisté míry pravda, ovšem problém způsobí znak pro konec řádku (Return), který u některých operací může operaci předčasně ukončit. V assembleru tyto problémy nenastávají, jak ostatně uvidíme dále. A řešení nabízí například i již výše zmíněný TurboBASIC XL, který podporuje jak všech devět příkazů popsaných výše, tak i dva nové příkazy určené pro čtení a zápis celých (binárních) bloků:

# Příkaz Parametry Stručný popis
BGET #kanál, adresa, délka přečtení celého bloku dat s jejich uložením od zadané adresy
BPUT #kanál, adresa, délka zápis celého bloku dat  

Příklad použití je uveden přímo v manuálu TurboBASICu XL. Jedná se o kopii obsahu textové obrazovky (s výpisem programu) do souboru. Dovolil jsem si v kódu provést několik úprav:

100 GRAPHICS 0
101 LIST
110 REM Začátek obrazové paměti
111 ADDR=DPEEK(88)
120 REM Zápis na disk
121 CLOSE
122 OPEN #1, 8, 0, "D1:LISTING"
123 BPUT #1, ADDR, 40*24
123 CLOSE
Poznámka: je zde použit ještě jeden trik – příkaz CLOSE totiž dokáže uzavřít kanály 1–7 (bez nuly), pokud se mu explicitně nezadá číslo kanálu.
Úvodní obrazovka jedné z mnoha variant slavného Turbo BASICu XL.

Obrázek 5: Úvodní obrazovka jedné z mnoha variant slavného Turbo BASICu XL.

Autor: tisnik, podle licence: Rights Managed

Praktická ukázka: zápis obsahu grafické paměti do rastrového formátu BMP

Díky existenci příkazu BPUT bylo možné relativně snadno implementovat program zapsaný v TurboBASICu XL, který přečte obsah grafické paměti v režimu GRAPHICS 8 (320×192 pixelů monochromaticky) a uloží ho do souboru se standardním rastrovým formátem BMP, takže výsledný screenshot bude možné načíst do prakticky libovolného moderního grafického editoru. Povšimněte si, že je řešeno i otočení pořadí obrazových řádků, protože BMP řádky ukládá odspoda nahoru:

1 ------------------------------
2 REM SIN function plot (graph)
3 REM in graphics mode 8
4 REM 
5 REM This source code has been
6 REM prepared for TurboBASIC XL
7 REM 
8 REM 
9 ------------------------------
10 DEG
20 EXEC SET_GRAPHICS
30 EXEC DRAW_AXIS
40 REM PLOT FUNCTION
50 FOR X=0 TO 319
60   Y=79-70*SIN((X-160)*90/80)
70   IF Y<0 OR Y>159 THEN GOTO 90
80   PLOT X,Y
90 NEXT X
100 DIM FILENAME$(10)
110 FILENAME$="H:SIN.BMP"
120 EXEC WRITE_BMP
998 REM finito
999 STOP
1000 ------------------------------
1010 REM SET GRAPHICS MODE
1020 ------------------------------
1030 PROC SET_GRAPHICS
1040   GRAPHICS 8
1050   COLOR 1
1060 ENDPROC
2000 ------------------------------
2010 REM DRAW AXIS
2020 ------------------------------
2030 PROC DRAW_AXIS
2040   PLOT 160,0:DRAWTO 160,159
2050   PLOT 0,80:DRAWTO 319,80
2060   TEXT 0,82,"-90"
2070   TEXT 300,82,"90"
2080   TEXT 162,5,"1"
2090   TEXT 162,145,"-1"
2100   TEXT 162,82,"0,0"
2200 ENDPROC
2300 ------------------------------
10000 ------------------------------
10010 REM Store video RAM
10020 REM in graphics mode #8 into
10030 REM BMP file.
10035 REM
10040 REM Filename is to be provided
10050 REM via FILENAME$ variable.
10055 REM (Example: "H:TEST.BMP")
10060 ------------------------------
10070 PROC WRITE_BMP
10075   PRINT "Writing raster image into file ";FILENAME$
10080   OPEN #1,8,0,FILENAME$
10085   REM write BMP header (32 bytes)
10090   RESTORE 10502
10095   DIM B$(3)
10100   FOR I=0 TO 31
10105     READ B$
10110     B=DEC(B$(2,3))
10115     PUT #1,B
10120   NEXT I
10125   REM write scanlines from last to first
10130   SCANLINE_START=DPEEK(88)
10135   SCANLINE_END=SCANLINE_START+40*191
10140   PERCENT=0
10145   PERCENT_DELTA=100/191
10150   FOR I=SCANLINE_END TO SCANLINE_START STEP -40
10155     BPUT #1,I,40
10160     REM ATARI BASIC HAVE TO USE PUT
10165     REM FOR J=0 TO 39
10170     REM   PUT #1,PEEK(I+J)
10175     REM NEXT J
10180     PERCENT=PERCENT+PERCENT_DELTA
10185     PRINT TRUNC(PERCENT);"%  ";
10190   NEXT I
10195   CLOSE #1
10200 ENDPROC
10499 ------------------------------
10500 REM BMP file header
10501 REM magic number "BM"
10502 DATA $42,$4D
10503 REM file size=7712 bytes
10504 DATA $20,$1E,$00,$00
10505 REM reserved
10506 DATA $00,$00,$00,$00
10507 REM pixel array offset=32
10508 DATA $20,$00,$00,$00
10509 REM bitmap header size=12 bytes
10510 DATA $0C,$00,$00,$00
10511 REM bitmap width in pixels
10512 DATA $40,$01:REM 320 pixels
10513 REM bitmap height in pixels
10514 DATA $C0,$00:REM 192 pixels
10515 REM number of color planes
10516 DATA $01,$00:REM 1 clr.plane
10517 REM bits per pixel
10518 DATA $01,$00:REM 1 BPP
10519 REM first color in palette
10520 DATA $00,$00,$00
10521 REM second color in palette
10522 DATA $FF,$FF,$FF
10523 REM end of BMP file header

Práce se zařízeními a kanály v assembleru

Nyní se konečně dostáváme k zajímavější části článku. Budeme se totiž zabývat způsobem práce s kanály (a později i se zařízeními) v assembleru. V tomto případě sice nemáme k dispozici vysokoúrovňové příkazy tak, jako tomu bylo v Atari BASICu či v TurboBASICu, ovšem i v assembleru lze podobné operace provádět. Pracuje se zde s takzvanými IOCB neboli Input-Output Control Block(s).

Příkazy BASICů pro vstupně-výstupní operace mají obdobu v příkazech (operacích) CIO:

Konstanta Číslo operace Plný název Stručný popis
OPEN $03 OPEN otevření kanálu pro čtení/zápis/připojení na konec
CLOSE $0C CLOSE uzavření kanálu
GETCHR $07 GET CHARACTER čtení znaku nebo bloku dat
PUTCHR $0B PUT CHARACTER zápis znaku nebo bloku dat
GETREC $05 READ RECORD čtení řetězce(!) ukončeného znakem $9B
PUTREC $09 WRITE RECORD zápis řetězce(!) ukončeného znakem $9B
STATIS $0D STATUS získání informace o stavu zařízení
SPECIL $0E SPECIAL další operace specifické pro dané zařízení

Pojmenování operací GET… a PUT… může být matoucí, ale ještě se k němu vrátíme.

Poznámka: STATIS není typo. V assembleru jsou všechny symboly umístěny v globálním jmenném prostoru a proto bylo nutné použít tento divný identifikátor namísto STATUS, jenž má odlišný význam.

Adresy subrutin používaných v CIO

Celý subsystém CIO se z pohledu programátora používajícího assembler skládá ze šestnácti podprogramů (subrutin), které je možné volat. Všechny tyto podprogramy jsou vypsány v následující tabulce:

Návěští Adresa Popis
DISKIV $E450 Disk handier initiation routine
DSKINV $E453 Disk handler vector
CIOV $E456 Central Input/Output vector
SIOV $E459 Serial Input/Output vector
SETVBV $E45C Set system timers routine vector
SYSVBV $E45F System vertical blank interrupt processing
XITVBV $E462 Exit from vertical blank processing
SIOINV $E465 Serial Input/Output initialization
SENDEV $E468 Serial bus send enable routine
INTINV $E46B Interrupt handler routine
CIOINV $E46E Central Input/Output initialization
BLKBDV $E471 Blackboard mode vector to memo pad mode
WARMSV $E474 Warm start entry (follows SYSTEM RESET)
COLDSV $E477 Cold start entry point (follows power-up)
RBLOKV $E47A Cassette read block routine vector
CSOPIV $E47D Cassette open for input vector

Pokud ovšem budeme pracovat „jen“ s kanály, vystačíme si se subrutinou CIOV. A právě tato subrutina bude volána ve všech demonstračních příkladech popsaných v navazujících kapitolách (takže na další subrutiny můžeme, alespoň prozatím, zapomenout).

Struktura IOCB použitá subrutinou CIOV

Pro provedení většiny základních vstupně-výstupních operací postačuje zavolat subrutinu CIOV, což se v assembleru provádí triviálním způsobem:

; zavolání rutiny pro CIO
jsr CIOV

Jak se ovšem této subrutině předávají parametry? Registry mikroprocesoru MOS 6502 jsou zcela nedostačující, jak svým počtem, tak bitovou šířkou. Zásobník je taktéž obecně velmi malý a navíc se s ním pracuje relativně špatně (neexistují totiž instrukce s adresováním SP+offset). Navíc je nutné počítat s tím, že se některé operace volají i několikrát za sebou. Příkladem může být kopie dat (po blocích) z jednoho zařízení na zařízení jiné.

Řešení, které bylo v Atari OS implementováno, je založeno na takzvaných IOCB neboli Input-Output Control Block. Jedná se o paměťové bloky o velikosti šestnácti bajtů, které obsahují parametry pro další CIO operaci. Počet IOCB je roven osmi, protože pro každý kanál existuje zvláštní IOCB. Je tomu tak z toho důvodu, aby bylo umožněno provádění opakovaných operací. IOCB kanálu číslo #0 začíná na adrese $0340, IOCB kanálu číslo #1 na adrese $0350 atd. Každý IOCB má následující strukturu:

Adresa Název Stručný popis
$0340 ICHID index do tabulky ovladačů zařízení
$0341 ICDNO číslo zařízení, například pro diskety 1–8
$0342 ICCOM číslo příkazu – viz třetí kapitolu s tabulkou příkazů (operací)
$0343 ICSTA naplněno kódem se stavem provedené operace (OK/chyba)
$0344 ICBAL adresa bufferu pro zápis či čtení dat (nižší bajt)
$0345 ICBAH adresa bufferu pro zápis či čtení dat (vyšší bajt)
$0346 ICPTL používáno jen BASICem
$0347 ICPTH používáno jen BASICem
$0348 ICBLL velikost bufferu (nižší bajt)
$0349 ICBLH velikost bufferu (vyšší bajt)
$034A ICAX1 závisí na volané operace
$034B ICAX2 dtto (málokdy použito)
$034C ICAX3 dtto (málokdy použito)
$034D ICAX4 dtto (málokdy použito)
$034E ICAX5 dtto (málokdy použito)
$034F ICAX6 dtto (málokdy použito)

Pro základní operace typu čtení či zápisu postačuje:

  1. Naplnit ICCOM kódem prováděné operace
  2. Naplnit ICBAH+ICBAL adresou bufferu (naplněného při zápisu, zapisovaného při čtení)
  3. Naplnit ICBLH+ICBLL délkou resp. kapacitou bufferu
  4. Zavolat jsr CIOV

Zápis znaku na textovou obrazovku

V dnešním prvním demonstračním příkladu vytvořeném v assembleru vypíšeme na obrazovku znak s kódem $41 (tedy velké „A“). Zápis je proveden do kanálu číslo #0, který je implicitně otevřen pro zařízení E: (screen Editor):

Zápis jediného znaku přes CIO.

Obrázek 6: Zápis jediného znaku přes CIO.

Autor: tisnik, podle licence: Rights Managed

Použijeme přitom operaci PUTCHR a do IOCB číslo 0 uvedeme adresu jednobajtového bufferu, který obsahuje právě kód zapisovaného znaku:

.include "atari.inc"
 
.CODE
 
 
.proc main
        ldx #0                  ; offset odvozený od čísla IOCB kanálu (nutno násobit šestnácti)
        lda #PUTCHR             ; prováděná operace
        sta ICCOM, x
 
        ; adresa zapisovaného bloku
        lda #<char_to_put
        sta ICBAL, x
        lda #>char_to_put
        sta ICBAH, x
 
        ; nastavení počtu zapisovaných bajtů
        lda #1
        sta ICBLL, x
        lda #0
        sta ICBLH, x
 
        ; zavolání rutiny pro CIO
        jsr CIOV
 
loop:
        jmp loop                ; program vlastně nice nedělá - jen cyklí!
.endproc
 
char_to_put: .byte $41
 
end:
 
 
.segment "EXEHDR"
.word   $ffff                   ; uvodni sekvence bajtu v souboru XEX
.word   main                    ; zacatek kodoveho segmentu
.word   end - 1                 ; konec kodoveho segmentu
 
 
.segment "AUTOSTRT"             ; segment s pocatecni adresou
.word   RUNAD                   ; naplni se pouze adresy RUNAD a RUNAD+1
.word   RUNAD+1
.word   main                    ; adresa vstupniho bodu do programu
 
; finito

Zápis celého řetězce na textovou obrazovku

Namísto jediného znaku můžeme přes CIO operaci PUTCHR vypsat delší blok (teoreticky celý obsah paměti) resp. řetězec:

message: .byte "Hello, world!"

Postačuje pouze korektně vypočítat počet zapisovaných znaků:

; nastavení počtu zapisovaných bajtů
lda #(end_of_message-message)
sta ICBLL, x
lda #0
sta ICBLH, x

Výsledek:

Zápis delšího bloku přes CIO.

Obrázek 7: Zápis delšího bloku přes CIO.

Autor: tisnik, podle licence: Rights Managed

Zdrojový kód po výše provedené úpravě vypadá následovně:

.include "atari.inc"
 
.CODE
 
 
.proc main
        ldx #0                  ; offset odvozený od čísla IOCB kanálu (nutno násobit šestnácti)
        lda #PUTCHR             ; prováděná operace
        sta ICCOM, x
 
        ; adresa zapisovaného bloku
        lda #<message
        sta ICBAL, x
        lda #>message
        sta ICBAH, x
 
        ; nastavení počtu zapisovaných bajtů
        lda #(end_of_message-message)
        sta ICBLL, x
        lda #0
        sta ICBLH, x
 
        ; zavolání rutiny pro CIO
        jsr CIOV
 
loop:
        jmp loop                ; program vlastně nice nedělá - jen cyklí!
.endproc
 
message: .byte "Hello, world!"
end_of_message:
 
end:
 
 
.segment "EXEHDR"
.word   $ffff                   ; uvodni sekvence bajtu v souboru XEX
.word   main                    ; zacatek kodoveho segmentu
.word   end - 1                 ; konec kodoveho segmentu
 
 
.segment "AUTOSTRT"             ; segment s pocatecni adresou
.word   RUNAD                   ; naplni se pouze adresy RUNAD a RUNAD+1
.word   RUNAD+1
.word   main                    ; adresa vstupniho bodu do programu
 
; finito

Přečtení řetězce zadávaného z klávesnice

Prozatím jsme používali CIO operaci PUTCHR určenou pro zápis bajtů či bloků. Opačnou operací je GETCHR, která dokáže načíst blok o maximální zadané délce (v našem případě se jedná o deset bajtů). I tuto operaci lze provést s kanálem #0, protože zařízení E: podporuje vstup z klávesnice. Program na konci změní barvu obrazovky, aby bylo patrné, že se operace GETCHR skutečně dokončila:

Obrazovka se po přečtení bufferu z klávesnice obarví.

Obrázek 8: Obrazovka se po přečtení bufferu z klávesnice obarví.

Autor: tisnik, podle licence: Rights Managed

Opět si ukažme celý zdrojový kód příkladu:

.include "atari.inc"
 
.CODE
 
 
.proc main
        ldx #0                  ; offset odvozený od čísla IOCB kanálu (nutno násobit šestnácti)
        lda #GETCHR             ; prováděná operace
        sta ICCOM, x
 
        ; adresa, na který se blok zapíše
        lda #<buffer
        sta ICBAL, x
        lda #>buffer
        sta ICBAH, x
 
        ; nastavení počtu čtených bajtů
        lda #(end_of_buffer-buffer)
        sta ICBLL, x
        lda #0
        sta ICBLH, x
 
        ; zavolání rutiny pro CIO
        jsr CIOV
 
        lda #18                 ; kod barvy
        sta COLOR2              ; ulozit do registru COLOR2
loop:
        jmp loop                ; program vlastně nice nedělá - jen cyklí!
.endproc
 
buffer: .res 10
end_of_buffer:
 
end:
 
 
.segment "EXEHDR"
.word   $ffff                   ; uvodni sekvence bajtu v souboru XEX
.word   main                    ; zacatek kodoveho segmentu
.word   end - 1                 ; konec kodoveho segmentu
 
 
.segment "AUTOSTRT"             ; segment s pocatecni adresou
.word   RUNAD                   ; naplni se pouze adresy RUNAD a RUNAD+1
.word   RUNAD+1
.word   main                    ; adresa vstupniho bodu do programu
 
; finito

Přečtení řetězce, jeho úprava na inverzní znaky s následným tiskem na obrazovku

Další demonstrační příklad je již poněkud komplikovanější, protože v něm provádíme trojici operací:

  1. Načtení řetězce ze zařízení E: (screen Editor) do bufferu
  2. Negace nejvyšších bitů obsahu celého bufferu, čímž se vlastně všechny znaky změní na svoji inverzní variantu
  3. Výpis řetězce na zařízení E:, čímž se inverzní znaky objeví na obrazovce

V demonstračním příkladu sice vyplňuji IOCB pro kanál číslo #0 dvakrát za sebou, ale ve skutečnosti tomu tak být nemusí – jak adresa bufferu, tak i jeho délka se přece nemění, takže by mělo postačovat modifikovat bajt na adrese ICCOM. Pro větší čitelnost (resp. kontext) jsem však zvolil „ukecanější variantu“ programu.

Výsledek po načtení řetězce, jeho modifikaci a výpisu:

Původní text, který jsem zapsal na klávesnici a text vypsaný programem po jeho úpravě na inverzní znaky.

Obrázek 9: Původní text, který jsem zapsal na klávesnici a text vypsaný programem po jeho úpravě na inverzní znaky.

Autor: tisnik, podle licence: Rights Managed

Následuje výpis celého zdrojového kódu tohoto demonstračního příkladu:

.include "atari.inc"
 
.CODE
 
 
.proc main
        ldx #0                  ; offset odvozený od čísla IOCB kanálu (nutno násobit šestnácti)
        lda #GETCHR             ; prováděná operace
        sta ICCOM, x
 
        ; adresa, na který se blok zapíše
        lda #<buffer
        sta ICBAL, x
        lda #>buffer
        sta ICBAH, x
 
        ; nastavení počtu čtených bajtů
        lda #(end_of_buffer-buffer)
        sta ICBLL, x
        lda #0
        sta ICBLH, x
 
        ; zavolání rutiny pro CIO
        jsr CIOV
 
        ; modifikace obsahu bufferu
        ldx #0
next_char:
        lda buffer, x
        eor #%10000000          ; inverse video
        sta buffer, x
        inx
        cpx #(end_of_buffer-buffer)
        bne next_char
 
        ldx #0                  ; offset odvozený od čísla IOCB kanálu (nutno násobit šestnácti)
        lda #PUTCHR             ; prováděná operace
        sta ICCOM, x
 
        ; adresa zapisovaného bloku
        lda #<buffer
        sta ICBAL, x
        lda #>buffer
        sta ICBAH, x
 
        ; nastavení počtu zapisovaných bajtů
        lda #(end_of_buffer-buffer)
        sta ICBLL, x
        lda #0
        sta ICBLH, x
 
        ; zavolání rutiny pro CIO
        jsr CIOV
loop:
        jmp loop                ; program vlastně nice nedělá - jen cyklí!
.endproc
 
buffer: .res 10
end_of_buffer:
 
end:
 
 
.segment "EXEHDR"
.word   $ffff                   ; uvodni sekvence bajtu v souboru XEX
.word   main                    ; zacatek kodoveho segmentu
.word   end - 1                 ; konec kodoveho segmentu
 
 
.segment "AUTOSTRT"             ; segment s pocatecni adresou
.word   RUNAD                   ; naplni se pouze adresy RUNAD a RUNAD+1
.word   RUNAD+1
.word   main                    ; adresa vstupniho bodu do programu
 
; finito

Rozdíl mezi CIO operacemi PUTCHR a PUTREC

Ještě nám zbývá jedna past, resp. specifikum pojmenování operací PUTCHR a PUTREC. Obě operace dokážou do zvoleného kanálu zapsat blok dat, přičemž velikost bloku je předána v IOCB. Vyzkoušejme si tedy, co uvidíme na obrazovce (tedy na zařízení E:) v případě, že operace PUTCHRPUTREC zavoláme se stejnou zprávou i stejnou velikostí bufferu. Velikost bufferu bude nastavena na 256 bajtů a buffer bude na začátku obsahovat řetězec ukončený znakem pro konec řádku $9b (155):

message: .byte "Hello, world!", $9b

Výsledky se budou lišit, což je patrné ze screenshotů:

Výpis bloku o velikosti 256 bajtů CIO operací PUTCHR.

Obrázek 10: Výpis bloku o velikosti 256 bajtů CIO operací PUTCHR. Srdíčka mají kód 0. 

Autor: tisnik, podle licence: Rights Managed

Výpis bloku o velikosti 256 bajtů CIO operací PUTREC.

Obrázek 11: Výpis bloku o velikosti 256 bajtů CIO operací PUTREC. 

Autor: tisnik, podle licence: Rights Managed

Rozdíl způsobuje znak $9b (155), tedy konec řádku.

Následují výpisy zdrojových kódů obou demonstračních příkladů. První z nich volá CIO operaci PUTCHR, druhý pak operaci PUTREC:

.include "atari.inc"
 
.CODE
 
 
.proc main
        ldx #0                  ; offset odvozený od čísla IOCB kanálu (nutno násobit šestnácti)
        lda #PUTCHR             ; prováděná operace
        sta ICCOM, x
 
        ; adresa zapisovaného bloku
        lda #<message
        sta ICBAL, x
        lda #>message
        sta ICBAH, x
 
        ; nastavení počtu zapisovaných bajtů na 256!!!
        lda #0
        sta ICBLL, x
        lda #1
        sta ICBLH, x
 
        ; zavolání rutiny pro CIO
        jsr CIOV
 
loop:
        jmp loop                ; program vlastně nice nedělá - jen cyklí!
.endproc
 
message: .byte "Hello, world!", $9b
end_of_message:
 
end:
 
 
.segment "EXEHDR"
.word   $ffff                   ; uvodni sekvence bajtu v souboru XEX
.word   main                    ; zacatek kodoveho segmentu
.word   end - 1                 ; konec kodoveho segmentu
 
 
.segment "AUTOSTRT"             ; segment s pocatecni adresou
.word   RUNAD                   ; naplni se pouze adresy RUNAD a RUNAD+1
.word   RUNAD+1
.word   main                    ; adresa vstupniho bodu do programu
 
; finito

Varianta s CIO operací PUTREC:

.include "atari.inc"
 
.CODE
 
 
.proc main
        ldx #0                  ; offset odvozený od čísla IOCB kanálu (nutno násobit šestnácti)
        lda #PUTREC             ; prováděná operace
        sta ICCOM, x
 
        ; adresa zapisovaného bloku
        lda #<message
        sta ICBAL, x
        lda #>message
        sta ICBAH, x
 
        ; nastavení počtu zapisovaných bajtů na 256!!!
        lda #0
        sta ICBLL, x
        lda #1
        sta ICBLH, x
 
        ; zavolání rutiny pro CIO
        jsr CIOV
 
loop:
        jmp loop                ; program vlastně nice nedělá - jen cyklí!
.endproc
 
message: .byte "Hello, world!", $9b
end_of_message:
 
end:
 
 
.segment "EXEHDR"
.word   $ffff                   ; uvodni sekvence bajtu v souboru XEX
.word   main                    ; zacatek kodoveho segmentu
.word   end - 1                 ; konec kodoveho segmentu
 
 
.segment "AUTOSTRT"             ; segment s pocatecni adresou
.word   RUNAD                   ; naplni se pouze adresy RUNAD a RUNAD+1
.word   RUNAD+1
.word   main                    ; adresa vstupniho bodu do programu
 
; finito

Příloha: Makefile pro překlad všech demonstračních příkladů

Všechny minule i dnes popsané demonstrační příklady, pro jejichž překlad je zapotřebí použít assembler ca65 a linker ld65, je možné přeložit s využitím souboru Makefile, jehož obsah je vypsán pod tímto odstavcem:

Školení Zabbix

execs := dummy.xex print_a.xex \
         background_color_1.xex  background_color_2.xex \
         color_computation_1.xex color_computation_2.xex \
         subroutine_1.xex        subroutine_2.xex \
         hex_number_1.xex        hex_number_2.xex \
         hex_number_3.xex        hex_number_4.xex \
         hex_number_5.xex        hex_number_6.xex \
         hex_number_7.xex        hex_number_8.xex \
         hex_number_9.xex \
         fill_block_1.xex        fill_block_2.xex \
         fill_block_3.xex        fill_block_4.xex \
         fill_block_5.xex \
         pmg_01.xex              pmg_02.xex \
         pmg_03.xex              pmg_04.xex \
         pmg_05.xex              pmg_06.xex \
         pmg_07.xex              pmg_08.xex \
         pmg_09.xex              pmg_10.xex \
         pmg_11.xex              pmg_12.xex \
         pmg_13.xex              pmg_14.xex \
         pmg_15.xex              pong.xex \
         pmg_stick_1.xex         pmg_stick_2.xex \
         pmg_stick_3.xex         pmg_stick_4.xex \
         pmg_stick_5.xex         pmg_stick_6.xex \
         pmg_collisions_1.xex    pmg_collisions_2.xex \
         pmg_collisions_3.xex    pmg_collisions_4.xex \
         antic_1.xex             antic_2.xex \
         antic_3.xex             antic_4.xex \
         antic_5.xex             antic_6.xex \
         antic_7.xex             antic_8.xex \
         antic_9.xex             antic_A.xex \
         antic_B.xex \
         antic_bitmap_1.xex      antic_bitmap_2.xex \
         antic_bitmap_3.xex      antic_bitmap_4.xex \
         antic_bitmap_5.xex      antic_bitmap_6.xex \
         antic_bitmap_7.xex      antic_bitmap_8.xex \
         antic_dli_1.asm         antic_dli_2.asm \
         antic_dli_3.asm         antic_dli_4.asm \
         antic_dli_5.asm         antic_dli_pmg.asm \
         sound_1.xex             sound_2.xex \
         sound_3.xex             sound_4.xex \
         sound_5.xex             sound_6.xex \
         sound_7.xex             sound_8.xex \
         sound_9.xex             sound_A.xex \
         sound_B.xex             sound_C.xex \
         sound_D.xex             sound_E.xex \
         sound_F.xex \
         rnd_1.xex               rnd_2.xex \
         rnd_3.xex               rnd_4.xex \
         paddle_1.xex            paddle_2.xex \
         key_01.xex              key_02.xex \
         key_03.xex              key_04.xex \
         key_05.xex \
         cio_put_char.xex        cio_put_block.xex \
         cio_get_block.xex       cio_modify_block.xex \
         cio_print_1.xex         cio_print_2.xex
 
all: $(execs)
 
clean:
        rm -f *.o
        rm -f *.xex
 
.PHONY: all clean
 
%.o: %.asm
        ca65 $< -t atari -o $@ -l $(basename $<)_list.asm --list-bytes 100
 
%.xex: %.o
        ld65 -C linker.cfg $< -o $@ -m $(basename $<).map
 
antic_bitmap_6.xex:     antic_bitmap_6.o
        ld65 -C linker_image.cfg $< -o $@ -m $(basename $<).map
 
antic_bitmap_7.xex:     antic_bitmap_7.o
        ld65 -C linker_image_2.cfg $< -o $@ -m $(basename $<).map
 
antic:  \
         antic_1.xex \
         antic_2.xex \
         antic_3.xex \
         antic_4.xex \
         antic_5.xex \
         antic_6.xex \
         antic_7.xex \
         antic_8.xex \
         antic_9.xex \
         antic_A.xex \
         antic_B.xex
 
antic_bitmap:   \
        antic_bitmap_1.xex \
        antic_bitmap_2.xex \
        antic_bitmap_3.xex \
        antic_bitmap_4.xex \
        antic_bitmap_5.xex \
        antic_bitmap_6.xex \
        antic_bitmap_7.xex \
        antic_bitmap_8.xex
 
antic_dli:      \
        antic_dli_1.xex \
        antic_dli_2.xex \
        antic_dli_3.xex \
        antic_dli_4.xex \
        antic_dli_5.xex \
        antic_dli_pmg.xex
 
antic_vbi:      \
        antic_vbi_1.xex \
        antic_vbi_2.xex \
        antic_vbi_3.xex \
        antic_vbi_dli_1.xex \
        antic_vbi_dli_2.xex \
        antic_vbi_dli_3.xex \
        antic_vbi_dli_4.xex
 
antic_scrolling:        \
        antic_scrolling_1.xex \
        antic_scrolling_2.xex \
        antic_scrolling_3.xex \
        antic_scrolling_4.xex
 
gtia:   \
        gtia_mode_1.xex \
        gtia_mode_2.xex \
        gtia_mode_3.xex \
        gtia_mode_4.xex \
        gtia_mode_5.xex \
        gtia_mode_6.xex \
        gtia_mode_7.xex \
        gtia_mode_8.xex \
        gtia_mode_9.xex \
        gtia_mode_A.xex \
        gtia_mode_B.xex
 
sound:  \
        sound_1.xex \
        sound_2.xex \
        sound_3.xex \
        sound_4.xex \
        sound_5.xex \
        sound_6.xex \
        sound_7.xex \
        sound_8.xex \
        sound_9.xex \
        sound_A.xex \
        sound_B.xex \
        sound_C.xex \
        sound_D.xex \
        sound_E.xex \
        sound_F.xex
 
rnd:    \
        rnd_1.xex \
        rnd_2.xex \
        rnd_3.xex \
        rnd_4.xex
 
paddle: \
        paddle_1.xex \
        paddle_2.xex
 
key: \
        key_01.xex \
        key_02.xex \
        key_03.xex \
        key_04.xex \
        key_05.xex
 
cio: \
        cio_put_char.xex \
        cio_put_block.xex \
        cio_get_block.xex \
        cio_modify_block.xex \
        cio_print_1.xex \
        cio_print_2.xex

Výsledkem překladu jsou soubory s koncovkou .xex, které je možné přímo spustit v emulátoru osmibitových počítačů Atari.

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
       
395 cio_put_char.asm zápis jednoho znaku do kanálu číslo 0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_put_char.asm
396 cio_put_char_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_put_char_list.asm
397 cio_put_char.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_put_char.map
       
398 cio_put_block.asm zápis bloku dat do kanálu číslo 0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_put_block.asm
399 cio_put_block_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_put_block_list.asm
400 cio_put_block.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_put_block.map
       
401 cio_get_block.asm přečtení bloku z kanálu číslo 0 https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_get_block.asm
402 cio_get_block_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_get_block_list.asm
403 cio_get_block.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_get_block.map
       
404 cio_modify_block.asm přečtení bloku, jeho modifikace a zpětný zápis (tisk) https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_modify_block.asm
405 cio_modify_block_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_modify_block_list.asm
406 cio_modify_block.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_modify_block.map
       
407 cio_print1.asm zápis textových dat či binárních dat? první varianta https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print1.asm
408 cio_print1_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print1_list.asm
409 cio_print1.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print1.map
       
410 cio_print2.asm zápis textových dat či binárních dat? druhá varianta https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print2.asm
411 cio_print2_list.asm „listing“ vygenerovaný assemblerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print2_list.asm
412 cio_print2.map mapa paměti; soubor vytvořený linkerem https://github.com/tisnik/8bit-fame/blob/master/Atari800-ca65/cio_print2.map
       
413 cio_write_to_c.bas zápis několika bajtů na kazetu ve standardním formátu (Atari Basic) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_write_to_c.bas
414 cio_write_to_d.bas zápis několika bajtů do souboru uloženého na disketě (Atari Basic) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_write_to_d.bas
415 cio_write_to_h.bas zápis několika bajtů do souboru uloženého v adresáři namapovaného emulátorem (Atari Basic) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_write_to_h.bas
416 cio_print_to_h.bas zápis textové zprávy do souboru uloženého v adresáři namapovaného emulátorem (Atari Basic) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_print_to_h.bas
417 cio_read_from_h.bas přečtení textové zprávy ze souboru uloženého v adresáři namapovaného emulátorem (Atari Basic) https://github.com/tisnik/8bit-fame/blob/master/Atari%20BA­SIC/cio_read_from_h.bas
418 function_sin_plot_bmp.bas uložení screenshotu do souboru ve formátu BMP (TurboBASIC XL) https://github.com/tisnik/8bit-fame/blob/master/curves/ex­plicit/function_sin_plot_bmp­.bas

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
  97. SIO2PC
    http://raster.atariportal­.cz/hw/sio2pc.htm
  98. Using Serial Input/Output
    https://www.atarimagazines­.com/compute/issue64/insig­ht_atari.php
  99. SIO ROUTINES
    https://www.atariarchives­.org/mmm/sio.php
  100. ATARI 8 bit Serial Input/Output (SIO)
    https://allpinouts.org/pi­nouts/connectors/serial/a­tari-8-bit-serial-input-output-sio/
  101. SIOspecs
    https://archive.org/details/SIOspecs
  102. Interview with Joe Decuir
    http://www.atarimuseum.com/ar­ticles/joedecuir.html
  103. USB AND OS/2
    http://www.os2voice.org/VNL/pas­t_issues/VNL1199H/vnewsf5­.htm
  104. Standards and specs: The ins and outs of USB
    http://www.ibm.com/develo­perworks/power/library/pa-spec7.html
  105. USB Class Codes
    http://www.usb.org/develo­pers/defined_class
  106. Universal Serial Bus
    http://en.wikipedia.org/wiki/Usb
  107. SMBus.org
    http://www.smbus.org
  108. SMBus FAQ
    http://www.smbus.org/faq/faq.htm
  109. System Management Bus
    http://en.wikipedia.org/wi­ki/System_Management_Bus
  110. SMBus Specifications
    http://www.smbus.org/specs
  111. SMBus Control Method Interface Specification Version 1.0
    http://www.smbus.org/spec­s/smbus_cmi10.pdf
  112. System Management Bus (SMBus) Specification Version 2.0
    http://www.smbus.org/spec­s/smbus20.pdf
  113. Atari Connection Machine
    http://acm.atariportal.cz/s/con8bit/8bits
  114. Atari Program Recorder
    https://en.wikipedia.org/wi­ki/Atari_Program_Recorder
  115. THE ATARI CASSETTE
    https://www.atariarchives­.org/dere/chaptC.php
  116. Turbo-2000
    https://www.atari-800.cz/turbo-2000
  117. Atari XC12 FSK Decoder
    https://zeninstruments.blog­spot.com/2024/08/atari-xc12-fsk-decoder.html
  118. Clock recovery
    https://en.wikipedia.org/wi­ki/Clock_recovery
  119. Jiří Richter (programátor)
    https://cs.wikipedia.org/wi­ki/Ji%C5%99%C3%AD_Richter_(pro­gram%C3%A1tor)
  120. Spectrum tape interface
    https://sinclair.wiki.zxnet­.co.uk/wiki/Spectrum_tape_in­terface
  121. How Tape Loading Works
    https://lemmings.info/how-tape-loading-works/
  122. CIO Reference
    https://atarifoundry.com/doc­s/forge/advanced-topics/cio-reference
  123. The central input-output system in Atari computers
    https://www.atariarchives­.org/alp/chapter9.php
  124. NOTE and POINT
    https://atarifoundry.com/doc­s/forge/advanced-topics/note-point
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.