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.
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.
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
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.
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.
Hardware počítačů Thomson je dosti podrobně popsaný v manuálu.
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é.
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.
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
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
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.)
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ě.
6809!!! Ještě jsem nedoslintal od zmínky na Bytefestu a už o něm článek (doufám, že úvodní v plánované sérii). Deriváty 6811 hledejme i v družicích. Tenhle procesor bych napájel do všech osmibitů, včetně SAM Coupé 🙂 s.
http://en.wikipedia.org/wiki/OS-9
http://en.wikipedia.org/wiki/Fairlight_CMI
Díky za článek. 6809 mne zaujal natolik, že jsem pořídil jak brouka s nějakými jeho kamarády pro stavbu pokusného jednodeskáče, tak i CoCo II, ale i MO-5 🙂 … jen zatím nebyl čas se do nich pustit. Díky článku ale roste chuť až k mezní hodnotě 😀
Napiš toho víc – napiš všechno, co o něm víš (jak o procesoru, tak o MO-5 – Francouzsština je pro mne opravdu velký oříšek) – prosím.
Díky
Jirka
6809 byla použita jako procesor ve výherních hracích automatech firmy Barcrest, které jsem kolem roku 1996 jezdíval servisovat. Jo ta okradla lidí…
6809 ma v sobe Vectrex