VideoCast: COSMAC Elf – operační systémy

V Popular Electronics byly publikovány dva “operační systémy” pro Elfa.

Nečekejte nějaké kódové kolosy se správou souborů. V podstatě jde jen o velmi jednoduché monitory.

První z nich je ETOPS.
Zabírá 32 bajtů.

ETOPS je určen pro základní konfiguraci Elfa s dvouciferným displejem a přepínači.
Vznikl právě proto, aby uživatel při touze změnit 43. bajt paměti nemusel 43x přepnout INP, než k příslušnému bajtu paměti dokrokuje.
Dále umožňuje prohlížet a měnit obsah paměti i spouštět programy.
Je psán pro 256bajtovou RAMku, takže pracuje v rámci aktuální paměťové stránky. Pro uživatele jsou volné adresy 21-FF.

Jak se s ním pracuje?
Prohlížení paměti:
Nastavte na přepínačích 01 a nacvakněte RUN.
Nastavte adresu a stiskněte INP. Po dalších stiscích INP se začne zobrazovat obsah paměti od zadané adresy.

Zápis do paměti:
Nastavte na přepínačích 02 a nacvakněte RUN.
Nastavte adresu a stiskněte INP. Rozsvítí se LED.
Nastavte na přepínačích novou hodnotu bajtu a uložte stiskem INP, a můžete pokračovat dalším bajtem (LED stále varuje, že zapisujete do paměti).

Spuštění programu:
Nastavte na přepínačích 00 a nacvakněte RUN.
Následně nastavte adresu a stiskem INP spustíte program. Jako program counter bude ale použit R3!


0000 F8 LDI - uloží do akumulátoru číslo...
0001 20 - ... 20 (třicet dva - adresa dočasného úložiště)
0002 A1 PLO1 - a dá ho do registru R1.
0003 E1 SEX1 - nastaví ukazatel X na registr R1
0004 6C INP4 - načte stav portu 4 (datových přepínačů)
0005 64 OUT4 - a zobrazí na portu 4 (na displeji), tím se zvýší R1 o 1
0006 21 DEC1 - sníží registr R1 o 1
0007 3F BN4 - a pokud není stištěn INP (vstup EF4), čeká na stisk - skočí na adresu...
0008 07 - ... sedm.

0009 37 B4 - a pokud je stištěn INP (vstup EF4), čeká na uvolnění - skočí na adresu...
0010 09 - ... devět.

000B 32 BZ - při nule (funkce spuštění programu) skočí na adresu ...
000C 1D - ... dvacet devět (1D)

000D F6 SHR - rotuje akumulátor doprava (vyděl dvěma)
000E 33 BDF - a při přenosu bitu (liché číslo) skočí na adresu
000F 11 - ... sedmnáct (11) - funkce prohlížení paměti.

0010 7B SEQ - Nastaví výstup Q na 1 (a rozsvítí LED),
0011 6C INP4 - načte stav portu 4 (datových přepínačů)
0012 A1 PLO1 - a dá ho do registru R1.
0013 3F BN4 - a pokud není stištěn INP (vstup EF4), čeká na stisk - skočí na adresu...
0014 13 - ... devatenáct (13).

0015 37 B4 - a pokud je stištěn INP (vstup EF4), čeká na uvolnění - skočí na adresu...
0016 15 - ... dvacte jedna (15).

0017 39 BNQ - Pokud je výstup Q vypnutý (0), skočí na adresu ...
0018 1A - ... dvacet šest (1A).

0019 6C INP4 - Načte stav portu 4 (datových přepínačů).
001A 64 OUT4 - Zobrazí na portu 4 (na displeji), tím se zvýší R1 o 1
001B 30 BR - a skočí na adresu ...
001C 13 - ... devatenáct (13).

001D 6C INP4 - Načte stav portu 4 (datových přepínačů)
001E A3 PLO3 - a uloží do registru R3.
001F D3 SEP3 - a nataví registr R3 jako programový čítač.

0020 00 - (data) dočasné úložiště na adrese třicet dva
0021 21-FF volné pro uživatele

EHOPS pracuje podobně. Pokud jsme pochopil návod, tak režim práce se nastavuje na přepínačích, ale adresy a data se zadávají pohodlně z hexadecimální klávesnice.
Jen je program trochu delší, zabírá 74 bajtů (a nechává 182 volných pro uživatele).

Aby se dalo s ETOPS pracovat v rámci paměti větší, než 256 bajtů, vznikla rozšířená verze používající 16bitové adresování – Extended ETOPS.

Adresy se zde zadávají nadvakrát, nejprve vyšší bajt a po něm nižší.

Při spuštění programu, narozdíl od původního ETOPS, zachovává R0 jako programový čítač (pro sebe používá R3).

Jinak se ovládá stejně a nabízí stejné tři funkce.


0000 90 GHI0 - Vezme vyšší byte registru 0 (aktuální stránku)
0001 B2 PHI2 - a nastaví na ni registr R2 (zásobník).
0002 F8 LDI - Na adresu dočasného úložiště na adrese ...
0003 3B - ... padesát devět (3B) ...
0004 A2 PLO2 - ... nastaví nižší byte R2 (zásobníku).
0005 E2 SEX2 - Ukazatel X nastaví na registr 2.
0006 90 GHI0 - Vezme vyšší byte registru 0 (aktuální stránku)
0007 B3 PHI3 - a nastaví na ni registr R3,
0008 F8 LDI - hodnotu ...
0009 0C - ... dvanáct (0C), tedy adresu začátku cyklu monitoru,
000A A3 PLO3 - uloží do dolního bytu registru R3.
000B D3 SEP3 - Nastaví registr R3 jako program counter (skočí na začátek cyklu monitoru).

000C 6C INP4 - Ze stavu přepínačů (na vstupu INP4) načte kód příkazu
000D 64 OUT4 - a zapíše na displej (na výstupu OUT4), se zvýšením R2 o 1.
000E 22 DEC2 - Sníží R2 zpět na adresu došasného úložiště.
000F A1 PLO1 - Uloží kód příkazu do registru R1.
0010 3F BN4 - Počká na stisk INP (vstup EF4) na adrese ...
0011 10 - ... šestnáct (10)

0012 37 B4 - a pak na puštění INP (vstup EF4) na adrese...
0013 12 - ... osmnáct (12).

0014 6C INP4 - Načte vyšší část adresy z přepínačů (port 4)
0015 64 OUT4 - a zobrazí na displej (port 4) se zvýšením obsahu registru R2,
0016 22 DEC2 - opět sníží R2 zpět na adresu dočasného úložiště,
0017 B0 PHI0 - a načtené uloží do registru R0.
0018 3F BN4 - Počká na stisk INP (vstup EF4) na adrese ...
0019 18 - ... dvacet čtyři (18)

001A 37 B4 - a pak na puštění INP (vstup EF4) na adrese...
001B 1A - ... dvacet šest (1A).

001C 6C INP4 - Načte nižší část adresy z přepínačů (port 4)
001D 64 OUT4 - a zobrazí na displej (port 4) se zvýšením obsahu registru R2,
001E 22 DEC2 - opět sníží R2 zpět na adresu dočasného úložiště,
001F A0 PLO0 - a načtené uloží do registru R0.
0020 81 GLO1 - Načte kód příkazu z registru R1
0021 3A BNZ - a pokud nejde o spuštění programu (kód 00), skočí na adresu ...
0022 24 - ... třicet šest (24).

0023 D0 SEP0 - nastaví registr R0 jako program counter (skočí na adresu obsaženou v R0).

0024 FF SMI - odečte od akumulátoru číslo...
0025 01 - ... jedna (kód příkazu pro prohlížení paměti)
0026 32 BZ - a podle kódu případně skočí na prohlížení paměti na adrese ...
0027 29 - ... čtyřicet jedna (29).

0028 7B SEQ - Nastaví výstup Q na 1 (a rozsvítí LED) pro zapisování do paměti.
0029 3F BN4 - Počká na stisk INP (vstup EF4) na adrese ...
002A 29 - ... čtyřicet jedna (29)

002B 80 GLO0 - Načte adresu z registru R0
002C 52 STR2 - a uloží obsah akumulátoru D do paměti na adresu ukazovanou registrem R2
002D 64 OUT4 - a zobrazí na displeji (s přičtením registru R2),
002E 22 DEC2 - opět sníží R2 zpět na adresu dočasného úložiště,
002F 37 B4 - a pak počká na puštění INP (vstup EF4) na adrese...
0030 2F - ... čtyřicet sedm (2F).

0031 39 BNQ - Pokud není výstup Q nastaven na 1 (a rozsvícená LED), skočí na adresu ...
0032 35 - ... padesát tři (35)

0033 6C INP4 - Načte hodnotu z přepínačů (port 4)
0034 50 STR0 - a uloží do paměti (na adresu ukazovanou registrem R0).
0035 40 LDA0 - Načte bajt z paměti (podle zvoleného režimu buď původní, nebo zapsaný),
0036 52 STR2 - uloží na dočasné úložiště
0037 64 OUT4 - a a zobrazí na displeji (s přičtením registru R2),
0038 22 DEC2 - opět sníží R2 zpět na adresu dočasného úložiště,
0039 30 BR - skočí na adresu ...
003A 29 - ... čtyřicet jedna (29)

003B 00 - (data) dočasné úložiště

Za zmínku ještě stojí, nejen kvůli názvu, monitor IDIOT.

Vyžaduje sériový port postavený na signálech Q a EF3 (tak, jako to má třeba Membership Card Computer nebo Elf-2000), respektive na těchto dvou signálech simuluje sériový port softwarově.
Ovládání monitoru IDIOT pak probíhá přes terminál podobně, jako na jiných počítačích vybavených alfanumerickou klávesnicí a zobrazováním.

IDIOT se vejde do dvou 256bajtových stránek, přičemž se dá nahrát od libovolné stránky – díky tomu, že procesor 1802 krátké skoky a “krátká čtení” z paměti adresuje v rámci stránky a je z hlediska programu jedno, která je ta akutuální, je IDIOT relokovatelný (stejně jako většina ostatních programů, pokud nepoužijí natvrdo dlouhý skok nebo “dlouhé čtení” paměti).

Podívat se na práci s “operačním systémem” na Elfu můžete ve VideoCastu Hexadecimálního doupěte.
Aby nebylo video příliš krátké, přidal jsem malou ukázku dalšího počítače se stejným procesorem, ale úplně jiným ovládáním: Ei Pecom 32.
O něm a o dalších systémech, založených na procesoru COSMAC, už řeč byla.