6809 krátce a stručně

Různé procesory mají různé mnemoniky instrukcí, některé velmi zajímavé. 6502 má poněkud stydlivou instrukci BRA. To 8080 boduje instrukcemi ORAL a ANAL. Nu a který že to procesor má ve své sadě instrukci SEX?


Procesor 6809 nacházíme v několika málo počítačích.
Z těch známějších to jsou Dragon 32/64, Tandy Color Computer (CoCo) a obě řady počítačů Thomson MO a Thomson TO.


Ani jeden z nich u nás není zrovna moc známý.
O britském Dragonu jistě kdekdo četl, ale nejspíš se s ním nesetkal, existují mnohem populárnější stroje z ostrova. Dragon je zajímavý spíš tím, že se prezentuje jako projekt velšský, ne anglický. S americkým Tandy CoCo je hardwarově blízký, ale ne zcela kompatibilní (software se musí lehce upravit).


CoCo se v Evropě prodával minimálně (a to jen ve verzi I a II, verze III se, pokud vím, v Evropě neprodávala), blíže ho může znát někdo, komu se podařilo získat počítač ze Států.


Geograficky nejbližší nám je francouzský Thomson.
Jako celek je obtížné ho charakterizovat, protože jde o dvě relativně samostatné řady (MO a TO) s řadou modelů, od jakési poměrně jednoduché alternativy k ZX Spectru (jen vybavené Microsoft Basicem místo vlastního dialektu) až po stroje téměř kancelářské, s paletou 4096 barev, světelným perem, myší a podporou až pěti disketových jednotek.


Charakterizovat 6809 je jednodušší. Jde o procesor z rodiny, která se používala především ve videohrách, například v konzoli Vectrex a arkádách od Konami, dále na průmyslovém území (v řídící logice semaforů), v embedded řešeních a automobilovém průmyslu (6809 nebo 6811 tak můžete mít ve svém starším autě).
O tom, že jde o zajímavý a v praxi všestranně využitelný procesor, svědčí i to, že měl být původně osazen v předchůdci pozdějšího Macintoshe. A dále, že na 6809 pro Dragon a CoCo vznikl operační systém OS/9, multitaskingový systém podobný Unixu, který je (i pro současnější procesory) vyvíjen a udržován dodnes.
(Pro Thomson není jeho portace, pokud vím, bohužel zcela dokončena, viz http://os9.forler.ch/ .)


6809 není operačními kódy svých instrukcí kompatibilní se starší Motorolou 6800, ale na úrovni zdrojáku, i když oproti 6800 obsahuje mnohá vylepšení, ano.

A to přesto, že opticky obsahuje méně instrukci.
Překladače totiž obvykle umí 6800 instrukce přežvýkat do instrukční sady 6809.


Jak vypadá 6809 uvnitř?


Některé procesory se snaží řešit problém akumulátoru, který slouží ke skladování jak vstupních parametrů, tak výsledků výpočtů, a hlavně komunikaci s pamětí, čímž se stává “úzkým hrdlem od flašky”, kterým musí valná většina dat protéct.

Patří k nim i 6809.
Akumulátory má hned dva, A a B.
Valná většina instrukcí, které pracují s akumulátorem, může pracovat s libovolným z nich, výjimky jsou jen dvě, a sice instrukce ABX a DAA.
Oba akumulátory dohromady dávají 16bitový dvojregistr D.


Dále jsou přítomny dva šestnáctibitové indexregistry (X a Y), dva šestnáctibitové ukazatele na zásobník (systémový stack S a uživatelský zásobník U), osmibitový “direct page register” (DP) obsahující vyšší bajt adresy pro přímý adresovací režim (ukazatel na 256bytovou “stránku”) a samozřejmě “program counter” (PC).


Otázka je, zda bych měl na blogu popisovat celý instrukční soubor, když je možné si ho nastudovat v přehledné tabulce třeba zde:

http://www.flexusergroup.com/flexusergroup/pdfs/6809ist.pdf

V tabulce najdete i instrukci s mnemonikou SEX.


Při prostudování vidíte, že si procesor nese určité vlastnosti 6502, něco ze Z80 a něčím zase vzdáleně připomíná 68008.

I při relativně nízkém taktu (Thomsony mají 1 MHz) je poměrně výkonný, i když měřit se s počítači s vyšším taktem je těžké.


Zajímavé je, že ačkoli první stroje MO řady (MO5 s 320×200 body v 16 barvách) byly víceméně alternativou k ZX Spectru, TO řada (zvláště TO-8) měly soupeřit s Atari ST (16 barev, které má MO-5, se už u MO 6, a dále u TO-8 a TO-9 rozšiřují paletou 4096 barev) – což skončilo v okamžiku, kdy se Atari ST prodávalo levněji než Thomson.

(TO-7 mělo vlivem chyby v grafickém čipu jen 8 barev, a bylo proto rychle nahrazeno modelem TO-7/70 opět s 16 barvami a navíc s větší RAM.)
(Zvláštností je MO-5NR, což je v podstatě MO-6 , takže navzdory označení MO-5 má místo 16 paletu 4096 barev, a navíc podporu sítě NanoRéseau).
Podobně se měnily i možnosti zvukové – původní MO-5 (a TO-7) má jednobitový beeper, další už mají 6bitová DA a podporu tří nebo čtyř kanálů v 5 nebo 7 oktávách, podle modelu.


Hardware počítačů Thomson je dosti podrobně popsaný v manuálu.

Francouzské, ale i anglicky psané weby si chválí, že je manuál podrobný, nejde jen o prostý popis příkazů Basicu, a hodně vysvětluje. Pro nás je výhoda, že je psaný relativně jednoduchou, srozumitelnou francouzštinou, takže ani lama, která se francouzsky moc neučila, jako třeba já, nemá s jeho čtením větší problém.


Pro demomakery je navíc anglicky psaný web (od borců, co jezdí na Forever, http://pulko.mandy.pagesperso-orange.fr/shinra/mo5.shtml ), rozebírající hardwarová i softwarová zákoutí, sice jen nejslabšího MO-5, ale po hardwarové stránce jsou MO a TO řady spřízněné.

(Jejich periferie a rozšiřující moduly jsou údajně mezi oběma řadami zaměnitelné, a i když po softwarové stránce mezi sebou úplně kompatibilní být nemají, přesto řada softů nese označení, že jsou jak pro MO, tak pro TO stroje.)


Protože zajímavější, než školometské plkání, které se dá opsat z Wikipedie, bude praktická ukázka, podívejme se, jak vytvořit rutinu pro vykreslení spritu.

Na webu je celkem pěkný popis postupné evoluce vykreslovací rutiny použité v demu Chinese Stack (http://www.pulsdemos.com/chinese.html#) pro kreslení vektorových objektů pomocí spritů (viz obrázek http://www.pulsdemos.com/screenshots/vector.gif).

Kód rutiny pro vykreslení spritu bez masky vypadá takto:

LEAY $2000,X * Positionnement du pointeur pour la RAMB
LDA #$3C * Ligne 0, RAMB
STA ,Y
LDA #$00 * Ligne 0, RAMA
STA ,X
LDA #$56 * Ligne 1, RAMB
STA 40,Y
LDA #$38 * Ligne 1, RAMA
STA 40,X
LDA #$AF * Ligne 2, RAMB
STA 80,Y
LDA #$70 * Ligne 2, RAMA
STA 80,X

(Pro vysvětlenou – VideoRAM Thomsonu v režimu BITMAP 4 320×200, který je pro MO5 základním, je rozdělena na několik barvových rovin, RAM A začíná na $H0000 a RAM B na $H2000. Bit odpovídá pixelu – jako pixely na ZX Spectru nebo třeba PMD-85, bity v RAM A odpovídají barvě 2, bity v RAM B barvě 1, při nastavení bitu v obou rovinách se na daném místě zobrazí bod v barvě 3, při obou bitech nulových pak v barvě 0.)

Protože se ale kuličky musí překrývat, potřebujeme do rutiny přidat masku (přidané instrukce jsou červené):

LEAY $2000,X * Positionnement du pointeur pour la RAMB

LDA ,Y * Ligne 0, RAMB
ANDA #$C3
ORA
#$3C
STA ,Y
LDA ,X * Ligne 0, RAMA
ANDA #$C3
ORA
#$00
STA ,X
LDA 40,Y * Ligne 1, RAMB
ANDA #$81
ORA
#$56
STA 40,Y
LDA 40,X * Ligne 1, RAMA
ANDA #$81
ORA
#$38
STA 40,X
LDA 80,Y * Ligne 2, RAMB
ANDA #$00
ORA
#$AF
STA 80,Y
LDA 80,X * Ligne 2, RAMA
ANDA #$00
ORA
#$70
STA 80,X

Připomeňme si ale, že 6809 má šestnáctibitový dvojregistr D, a toho můžeme využít pro optimalizaci. Rutinu proto trochu upravíme takto:

LEAY $2000,X * Positionnement du pointeur pour la RAMB
LDA ,Y * Ligne 0, RAMB
ORA #$3C
STA ,Y
LDA ,X * Ligne 0, RAMA
ANDA #$C3
STA ,X

LDD #$8181
ANDA 40,Y * Ligne 1, RAMB
ORA #$56
STA 40,Y
ANDB 40,X * Ligne 1, RAMA
ORB #$38
STB 40,X
LDD #$AF70
STA 80,Y * Ligne 2, RAMB
STB 80,X * Ligne 2, RAMA

(Všimněte si, že jsme instrukci SEX nepoužili ani jednou.)

Doufám, že vás neobvyklý procesor zaujal.
Bylo by hezké, kdyby byl zveřejněn zdroják například pro intra z Foreveru.
No a nebo vůbec nejhezčí by bylo překvapit (a v compu i porazit) francouze na jejich vlastní platformě.