Smekám poklonu za naprosto detailný a hluboký náhled do nitra těhle strojů. V tom mohu jen tiše závidět, jako neprogramátor bych tohle nedal do kupy snad ani ve snu. Tenhle směr mi v životě nějak utekl, kromě pár základních hrátek s BASICem jsem to nikdy dál nedotáhl.
Ale je fajn vidět vlastní fotku jako náhledovku :-)
Nikdy není pozdě začít. Např. POKE 40000,64. A pak to přepsat na
PLA
LDA #64
STA 40000
RTS
Když si to převedete na strojový kód, bude to
104,
169, 64,
141, 64, 156,
96
V Basicu to naládujete do paměti takto:
10 REM TEST
20 FOR i=1536 to 1542
30 READ a:POKE i,a
40 NEXT I
50 END
60 DATA 104,169,64,141,64,156,96
A pak už jen RUN a ?USR(1536)
Při tvorbě tohoto příkladu jsem použil https://www.masswerk.at/6502/6502_instruction_set.html a emulátor https://www.virtualdub.org/altirra.html
Hezké na tom všem je, že počítač nepokazíte, když uděláte nějakou chybu. Tedy - Atari určitě ne a emulátor už vůbec ne.
Jestli vás to zajímá, nebojte se toho a prostě to zkuste. Nebo si jen tak čtěte v https://www.atariarchives.org/mapping/ :-)
17. 3. 2026, 08:37 editováno autorem komentáře
Ono je problém mít na to čas. S malým dítětem vyžadujícím stále pozornost jsem rád, když zvládnu opečovat svoji sbírku a aspoň sem tam dát do kupy nějaký článek. I tak se mi kupí věci, co bych rád udělal a nedostávám se k tomu.
Ale rozhodně bych někdy rád vyzkoušel. Ideálně i se synem, třeba by se mu mohlo programování zalíbit a do budoucna se tomu mohl věnovat, nebo mít koníček, ale na to je zatím přiliš malý.
Ked sa clovek stara do akejkovek veci v ktorej nema rozhlad tak mu vsetko pripada ako maly zazarak nie?
To ako nie ze by som nejako utocil na rozhlad p. Tisnovskeho to je najdynamickejsi mozok aky poznam.
Kéž bych měl tyto informace tak krásně podané a napsané v roce 1990 když jsem dostal k narozeninám svůj první c64. Po dvou měsících hrani s basicem, jsem se dostal k nějaké samizdatové literatuře assembleru c64, byly to většinou jenom příklady nedobře vysvětlené. To co tam ale nebylo vysvětlené vůbec jaký je rozdíl mezi asemblerem a macroassemblerem
Měl jsem tenkrát přídavnou kartu na které byl jednoduchý monitor (program zobrazující výpis instrukcí, s možností je zapsat) a já netušil kam mám ty návěští nacpat. Kdyby byl tenkrát internet tak bych se to učil asi stokrát rychleji.
Díky za článek
Díky za pěkný seriál. Sice už tomu skoro vůbec nerozumím, ale je to příjemné vzpomínání na mládí s Atari a pokusy s programováním. Ještě spojeno s nedávným nálezem Atari v garáži a následnou radostí Michala T. nad muzeálním kouskem.
Půjčím si jeho poznámku je fajn vidět "vlastní" počítač jako náhledovku :-) I zbytky fixem dopsaných českých kláves :-)
V tom vzpomínání... jako vrchol mých Atari programátorských pokusů si pamatuju na hrátky s obrazovým přerušení (VBI, DLI). To mi přišlo jako bomba věc...
Nebude některý díl i o tomhle? Nebo už byl a uteklo mi to? Nebo to je HW záležitost, v emulátorech asi nepoužitelná.
Ano, ten fix byl velice kvalitní výrobek, ten mi nešel z kláves beze zbytku dostat :-D A že jsem se toho něco nadrbal. Ale drsnější jsem už nechtěl být z obavy nad poškozením vlastního povrchu nebo popisků.
To taky vysvetluje tu nostalgii po 8bitovych pocitacich. Ted kdyz se clovek dostava ke kvalitni dokumentaci ma chut dodelat to co v mladi nestihnul/nemohl.
Skoda ze ta nostalgie je dost podobna novorocnimu predsevzeti "odted budu cvicit". ;o)
Tedy, musim rici ze "zlatej z80/i8080!". S tou hromadou registru zvladne programovani i kdejake batole. 6502 je ve srovnani s tim opravdove hardcore...
a to ještě nic nebylo. Příště ukážu kód pro vyplnění bloku většího než 256 bajtů a možná i pro přenos bloku. To je oproti Z80 peklíčko (a my ataristi se v tom rádi rochňáme :-)
jo, taky bych cekal ze se X nejak nastavi, nejlepe na nulu, kdyz uz to maze nekolik stranek naraz, to by bylo divne aby x byl nejaky vstupni parametr
ano mate pravdu, aby to makro bylo prenositelne, tak by se melo X taky vynulovat. Ale toto je zrovna kod, kterej jsem tady ukazoval na NESu, reset konzole. A tam to vypada nejak takto:
.proc reset
; nastavení stavu CPU
setup_cpu
; nastavení řídicích registrů
ldx #$00
stx PPUCTRL ; nastavení PPUCTRL = 0
stx PPUMASK ; nastavení PPUMASK = 0
stx APUSTATUS ; nastavení APUSTATUS = 0
; čekání na vnitřní inicializaci PPU (dva snímky)
wait_for_frame
wait_for_frame
; vymazání obsahu RAM
clear_ram
; čekání na další snímek
wait_for_frame
Takze je to skaredy, ale X je vynulovane uz na zacatku, protoze wait_for_frame nenici zadny registr (jen cte z pameti).
aha, to vysvetluje i druhou zahadu, proc je to makro v tomhle clanku o Atari a take proc se pak nikde v clanku nepouziva
Omlouvam se, ze muj prispevek neni k programovani, ale aspon je k Atari. Poprosil sem kamarada, at se mrkne po svem Atari. Nasel ho a poslal mi foto, na kterem nas oba zaujalo to, ze 3 klavesy jsou nezazloutle. Kamarad si neni vedom, ze by s temi klavesami nekdo neco specialniho kdy delal. Atari samozrejme nekolik let lezelo schovane nekde v bedne.
foto: https://share.bjsw.cz/index.php/s/ztoHJYLStQUZ1EE
Potkal to uz nekdo? Jina vyrobni sarze tech klaves? Ufoni?
Vyhoda Atari 800 bylo, ze jeho low level architekturu pochopi i 13lete dite jako tenkrat ja, ktere se chtelo posunout od Basicu do assembleru (protoze ten je cool a pisou se v nem hry) a proslo svym prvnim heureka momentem: vzdyt ten assembler nic neumi! Jen scitat nejaky registry a cist a zapisovat do pameti! Kde je grafika? Kde zvuk?
A pak mi bylo vysvetleno, ze tam jsou dalsi cipy, jako Antic a GTIA, sidlici na specialnich adresach v pameti a kdyz tam neco zapisu, stane se neco magickeho. Pro me klicovy moment pochopeni, jak funguje pocitac!
Doted si pamatuju, jak napsat ultra kratkej programek, co zobrazi na pozadi pruhy vsech barev, co Atari umi zobrazit:
AD0BD48D1AD04C0070
spustte od adresy $7000 (posledni instrukce je skok na zacatek, je to loop)
Pekne.
ad 0b d4 lda $D40B 8d 1a d0 sta $D01A 4c 00 70 jmp $7000
Problemom moze byt absolutny skok ktory nuti ulozit kod na pevnu adresu.
Obist sa to da pouzitim relativneho skoku. Kedze 6502 nema nepodmienecny relativny skok, treba pouzit SEC a BCS (Branch if Carry Set) alebo CLC a BCC (Branch if Carry Clear):
ad 0b d4 go lda $D40B 8d 1a d0 sta $D01A 18 clc 90 f7 bcc go
Vsetky Atari farby tam ale nevidno. Viac farieb sa ukaze, ked medzi LDA a STA vlozime ROL (Rotate Left - delenie dvojkou), potom ale treba zmenit adresu relativneho skoku z 90 f7 na 90 f6.
ad 0b d4 go lda $D40B 2a rol 8d 1a d0 sta $D01A 18 clc 90 f6 bcc go
Pomerne komfortne sa s tymto celym da hrat na 8bit workshope https://8bitworkshop.com/v3.12.1/?platform=atari8-800, mozete vychadzat z Hello world, treba si dat pozor na zachovanie cartridge footeru. Kompiluje a spusta to priebezne, breakpoint klikom na riadok, stack a registre procesorov, parada.
je maličko škoda, že těch řádků je 130 a ne jen 128. Potom by bylo vždy zřejmé, že LDA NEnastaví příznak N a tedy se dá provést skok BPL bez nutnosti si hrát s carry. Ale ten ROL to stejně "rozbije" takže CLC+BCC je nutnost.