                  P Ř E D M L U V A 
                 -------------------

    Stalo se vám to taky? Tu jste si koupili computer a časem
zjišťujete, že vlastníte zařízení na zpracování dat. A tím
začíná zlobení. S programem BASIC je vám to jasné, ale programy
jsou pomalé. Odborný tisk však mluví o pojmech jako Hexmonitor,
strojový jazyk, assembler,bity a byty. Jedno je jasné. Lze se
dovědět o těchto problémech víc, než uvádí výrobce i návod k
obsluze. Konečně se též chcete dovědět více o vnitřní činnosti
vašeho počítače. 

    Ve vaší touze po vědění zjistíte, že existují odborné knihy
o počítači, avšak bohužel může jen obeznámená osoba něco
provádět s těmito zmatenými kolonkami Hexadecimálních čísel,
které údajně představují nějaké adresy a kódy. A tu buď ztrácíte
potěšení na věci nebo si začínáte zoufat. Aby k tomu nedošlo
má zajistit tento kurs. Krok za krokem vás uvede tento kurs do
vnitřního života počítače, abyste nakonec mohli zapisovat
vlastní programy. Zjistíte též, že vaše strojové programy
probíhají mnohem rychleji, než programy BASIC. A co je při
omezené kapacitě paměti vašeho počítače zvlášť důležité, že
stejné programy často zaberou jen zlomek místa v paměti. Poznáte,
že "vnitřní cestičky" vašeho domácího počítače nejsou tak
neproniknutelné a spletité jak jste se stále domnívali. A tak
náhle můžete mnohem nevázáněji rozvíjet vaši tvořivost jako ve
vyšších jazycích. Naším cílem bylo, poskytnout vám co
nejsrozumitelnější vstup do strojového programování. Avšak i
profesionál si zde má přijít na své. K tomuto kursu patří též
"učební software" s moduly : Kalkulátor, Hexmonitor,
Line-assembler, Disassembler a Tracer s jejichž pomocí si můžete
hned na příkladech které jsou v knížce uvedeny vyzkoušet na
počítači jak pracují. Neučíte se pouze "šedou teorii", ale můžete
všechno hned prakticky vyzkoušet. "Učební program" obsahuje
užitečné a důležité nástroje pro váš odborný růst strojového
programátora. Profesionálovi se tím dává k dispozici užitečná
pomůcka pro jeho práci. Příliš speciální problémy jsme vynechali.
Zde se mají předat pouze nutné základy a technické informace o
tomto počínání.


     Obsáhlý dodatek vám poskytne mnoho informací o počítači a o
CPU Z-80 a tak vám později poslouží jako výborná příručka,
obzvláště nutné je se odvolávat na přiloženou referenční kartu.

    Doufáme, že vás objevitelská cesta vaším počítačem potěší.
Až na této cestě k profesionálovi v programování mikropočítačů,
budete moci počítač používat mnohem všestraněji - náhle budete
schopen řešit úlohy, které nebylo možno zvládnout pouhým BASICem.
Poznáte nejen že jste se něco naučili, ale že se konečně můžete
zůžastnit hovoru, když odborníci se budou bavit o ROM listingu,
registrech, assembler programech a podobně.

str.ii

    D Ů L E Ž I T Ý   P O K Y N 
   -----------------------------


    MZ-LEARN (učitel) je původní chráněný program
RVS DATENTECHNIK a je prodáván s podmínkou, že bude používán
kupujícím výhradně na MZ-Computer, že žádná jeho část nesmí být
kopírována nebo nahrávána do jiných počítačů ani předávána dále.
Žádná část této knihy nesmí být bez předchozího svolení
vydavatele elektronicky, mechanicky nebo fotokopiemi či páskovým
záznamem rozmnožována nebo přenášena. Porušení tohoto ustanovení
bude trestně a civilněprávně stíháno.
    MZ-LEARN byl sestaven za největší možné pečlivosti a
přezkoušen.  RVS DATENTECHNIK neposkytuje záruku jak ve vztahu
na tuto knihu, tak na v ní uvedený SOFTWARE, jeho kvalitu,
proveditelnost nebo použitelnost pro určitý účel.RVS DATENTECHNIK
v žádném případě neručí za přímo, či nepřímo způsobené škody,
které vycházejí buď z neodborného zacházení nebo z jakychkoliv
chyb na software. Změny které slouží technickému pokroku jsou
vyhrazeny.


                 Štastnou cestu za poznánim
                                 a příjemné bezesné noci !!!


     Na tomto místě bych chtěl poděkovat za překlad orig.
manuálu Milanu  Bůbelovi a dále za pomoc při psaní tohoto
českého překladu Mirkovi Kolomazníkovi a Antonínu Beranovi

    Havlíček Josef. ZO.087 Svazarm, Praha 10, Tolstého 16


Manuál nebyl redigován, proto zašlete své připomínky na výše
uvedenou adresu do listopadu 1988.

          Děkuji.



str.1

    O B S A H 

1.  Systémy čísel: 1 a 1 je 10 ..............................  1

    1.1 Nahrání a start Learn-programu ......................  1
    1.2 Kalkulátor ..........................................  2
    1.3 Systémy čísel .......................................  8
    1.4 Bit, Byte a K ....................................... 13
    1.5 Dvojková aritmetika ................................. 15
    1.6 Logika pomocí AND, OR, NOT, XOR ..................... 18

2.  Prostor adresy: Paměť a jiné věci ....................... 23

    2.1 Adresy, PEEK a POKE ................................. 24
    2.2 RAM, ROM a Port ..................................... 28
    2.3 Plán pamětí ......................................... 29

3.  Kódy: Co všechno obsahuje paměť ......................... 33

    3.1 Texty: Kód ASCII .................................... 33
    3.2 Čísla, texty a program BASIC ........................ 39
    3.3 Strojový program: Op-kódy a dvojková čísla .......... 41

4.  Strojový jazyk: První přehled ........................... 43

    4.1 CPU: Srdce celku .................................... 43
    4.2 Jak vypadají strojové programy? ..................... 52
    4.3 Zadávání a test  strojových programů ................ 54
    4.4 Kterým povelům rozumí CPU ? ......................... 59
    4.5 Způsoby adresování: Odkud bere CPU data ? ........... 62

5.  Povelová věta: Co všechno umí CPU ....................... 67

    5.1 Skokové povely ...................................... 68
    5.2 Nahrávání a ukládání ................................ 79
    5.3 Aritmetické povely .................................. 91
    5.4 Logické povely ......................................104
    5.5 Porovnávací povely ..................................109
    5.6 Posouvací povely bitů ...............................118
    5.7 Jiné povely .........................................124

6.  Použítí: Příklady programů ..............................127

    6.1 Computer jako klavír ................................127
    6.2 Klíčování ...........................................130
    6.3 Měření času .........................................131

7.  Profesionální programování:
    Assembler a jiné věci ...................................135

    7.1 Assembler ...........................................135
    7.2 Debugger ............................................139
    7.3 Systémové znalosti a soubory podprogramů ............139
    7.4 Programovací technika ...............................140

str.2

    D O D A T E K 


A.  Kódování: Značkový kód, Tokeny,
    Znázornění čísel ........................................145

    A.1 Značkový kód ........................................145
    A.2 Znázornění čísel ....................................147

B.  CPU: Model programování, Mnemonics, Flagy
    Druhy adresování ........................................153

    B.1 Model programování Z-80 CPU .........................153
    B.2 Mnemonics ...........................................156
    B.3 Povely ovlivňující Flagy ............................158
    B.4 Druhy adresování ....................................159

C.  Povelová věta: Tabulky ..................................161

D.  Learn-Program: Návod k obsluze ..........................185

    D.1 Nahrání a start .....................................185
    D.2 Obsluha .............................................186

E.  Plán ukládání, podprogramy ..............................197

    E.1 Plán ukládání .......................................197
    E.2 Podprogramy z ROM ...................................206
    E.3 Důležitá místa paměti ROM ...........................208

F.  Kazetový záznam: Pokyny k obsluze .......................207


str.3

KAPITOLA 1

Systémy číslic: 1 a 1 je 10

V této kapitole jsou některá předběžná cvičení, která můžete
klidně vynechat jestliže již znáte různé systémy číslic
(dvojkový, šestnáctkový), počítání s dvojkovými čísly a logickou
působnost operací (AND, OR, NOT). V každém případě musíte přečíst
kapitolu 1.1 ( Nahrávání a start učebního programu ) a krátce se
podívejte na kapitolu 1.2 (Kalkulátor), abyste poznali kalkulátor
z učebního programu.

1.1 Zavádění a start učebního programu.
     Chcete-li pracovat se souborem učebního programu, po zapnutí
MZ 800 vložte učební MZ kazetu a zvolte z nabízeného menu opci C
(kasetu). Startujte nahrávání kazety. Po hlášení IPL is loading
MZ-LEARN se MZ-LEARN zavádí. Samozřejmě můžete program LEARN
zavádět taky povelem <L> monitoru.

----------------------------------
|                  #            #|  ------ kalkulátor
|--------------------------------|
|0000 :   .   00                 |
|0001 :   .   00                 |
|0002 :   .   00                 |
|0003 :   .   00                 |
|0004 :   .   00                 |
|0005 :   .   00                 |
|0006 :   .   00                 |
|0007 :   .   00                 |
|--------------------------------|
|0000 :   NOP                    |
|                                |
|                                |
|                                |
|                                |
----------------------------------


Nedivte se, jestliže se na obrazovce objeví jiné znaky. Zobrazené
hodnoty závisí na tom, co právě se náhodou nachází v paměti
počítače.
     V následujícím věnujeme pozornost pouze třem nejhořejším
okénkům kalkulátoru. Jestliže běžící kursor náhodným stiskem
klávesy <ALPHA> putoval do některého z jiných okének, stiskněte,
prosím, znovu nebo dvakrát klávesu <ALPHA>, dokud se cursor
nevrátí opět do horního okénka. Měla-li vypadat sestava na
obrazovce zcela jinak, pak jste patrně omylem stiskli dvakrát
klávesu <GRAPH>. Opětným stiskem této klávesy se znovu objeví
správný obraz.

str.4

1.2 Kalkulátor              
Kalkulátor je částí učebního programu. Jedná se zde o zcela
zvláštní kapesní kalkulačku. Tato disponuje funkcemi, které
jsou zvlášť pro programování ve strojovém jazyce užitečné.

Čísla se mohou zadávat šestnáctkově,desítkově nebo dvojkově a
znázorňovat. Vedle čtyřech základních početních úkonů umí
calkulatér též logické operace  AND, OR, NOT, XOR a různé jiné
věci užitečné pro strojové programování. Avšak je počítáno vždy
pouze s celými čísly v rozsahu 0...65535. To však je taky přesně
ten rozsah, který potřebujeme pro programování ve strojovém
jazyce.

Počítání s kalkulátorem

Kalkulátor užívá programovací jazyk FORTH nebo některé kalkulačky
tzv.  obrácenou polskou notaci  (UPN)
Podle této notace se zadávají napřed čísla, mezi nimiž se má
provést oerace, a pak teprve vlastní operace. Chcete-li např.
sečíst dvě čísla, zadejte napřed první číslo, pak druhé a konečně
stiskněte klávesu (+).
Příklad:
Sčítání
             --------------------------
   indikace  |               #       0|
             --------------------------
   vstup     70 <CR>
             --------------------------
   indikace  |            70 #       1|
             --------------------------

Po stisku klávesy <CR> je posunuto číslo směrem doleva. Hodnota
1 vpravo v okénku značí, že bylo do vstupu vloženo číslo.

   vstup      80 <CR>  
              -------------------------
   indikace   |           80 #       2|
              -------------------------

Teď jste zadal dvě čísla
   vstup      <+>
              -------------------------
   indikace   |          150 #       1|
              -------------------------

Součet byl proveden. Výsledek 70+80 je znázorněn indikací.

Právě tak fungují i ostatní početní úkony:

str.5

Odečítání

   vstup       indikace                    poznámka
               ------------------------
<SHIFT> <CLR>  |             #       0|    paměť vymazat
               |----------------------|
200<CLR>       |         200 #       1|
               |----------------------|
150<CLR>       |         150 #       2|
               |----------------------|
<->            |          50 #       1|    200-150=50
               ------------------------

Násobení

   vstup        indikace                   poznámka
                -----------------------
<SHIFT> <CLR>   |            #       0|    paměť vymazat
                |---------------------|
3<CR>           |          3 #       1|
                |---------------------|
15<CR>          |         15 #       2|
                |---------------------|
<*>             |         45 #       1|    3x15=45
                -----------------------

Dělení

   vstup         indikace                  poznámka
                 ----------------------
<SHIFT> <CLR>    |           #       0|    vymazat paměť
                 |--------------------|
90<CR>           |        90 #       1|
                 |--------------------|
 9<CR>           |         9 #       2|
                 |--------------------|
</>              |        10 #       1|    90/9=10
                 ----------------------

Aby se prováděla obrácená polská notace rozumně, pracuje
kalkulátor interně způsobem tzv. stohování (anglicky  stack ),
t.j. způsob se kterým se setkáte při strojovém programování
ještě častěji. Zadáte-li číslo, je toto napřed vloženo na
číslicový stoh.
Příklad:

   vstup         indikace                  stack
                 ----------------------
<SHIFT> <CLR>    |           #       0|
                 |--------------------|
5 <CR>           |         5 #       1|    5
                 |--------------------|
6 <CR>           |         6 #       2|    5, 6
                 |--------------------|
7 <CR>           |         7 #       3|    5, 6, 7
                 |--------------------|
8 <CR>           |         8 #       4|    5, 6, 7, 8
                 |--------------------|

str.6

 Teď je též jasné, co stojí v indikaci zcela vpravo: Počet čísel,
které jsou uloženy na stohu (stack). Když po vložení čísel
provedete operaci příkladem <+>, jsou odebírány obě horní čísla
se stohu, sečteny a výsledek odložen na stoh.
Příklad:

   vstup         indikace                  stack      poznámka
                 ----------------------
                 |          8 #      4|    5, 6, 7, 8
                 |--------------------|
<+>              |         15 #      3|    5, 6, 15   7+8=15
                 |--------------------|
<*>              |         90 #      2|    5, 90      6*15=90
                 |--------------------|
<+>              |         95 #      1|    95         5+90=95
                 |--------------------|

     Stack pracuje jako tzv. paměť Last-in-First-out . Poslední
odložená hodnota se odebírá opět jako první ze stohu. Tento
princip je používán v mnoha programech nebo programovacích
jazycích. Můžete u kalkulátoru přirozeně také smazat číslo ze
stohu. K tomu slouží klávesa <šipka dolů>, kterou se maže
nejhořejší číslo.

Příklad:

   vstup         indikace                  stack
                 ----------------------
<SHIFT> <CLR>    |            #      0|
                 |--------------------|
5 <CR>           |          5 #      1|    5
                 |--------------------|
6 <CR>           |          6 #      2|    5, 6
                 |--------------------|
<šipka dolů>     |          5 #      1|    5
                 ----------------------

Pomocí <SHIFT> <CLR> lze smazat celý stoh najednou. Nejhořejší
číslo stohu můžete taky zdvojit jednoduchým stlačením klávesy
<CR>.

Příklad:

   vstup         indikace                  stack
                 ----------------------
<SHIFT> <CLR>    |            #      0|
                 |--------------------|
5 <CR>           |          5 #      1|    5
                 |--------------------|
<CR>             |          5 #      2|    5, 5
                 |--------------------|
6 <CR>           |          6 #      3|    5, 5, 6
                 |--------------------|
<CR>             |          6 #      4|    5, 5, 6, 6
                 ----------------------

Kalkulátor má ještě podstatně více funkcí, které poznáte v
dalším. Shrnutí ve zkráceném návodu najdete v dodatku D.

str.7

1.3 Systémy čísel

Než se budeme zabývat dvojkovými nebo šestnáctkovými čísly,
vezmeme si pod lupu dobrý starý desítkový systém. Decimální
čísla v desítkové soustavě čísel se skládají z cifer  
 0 1 2 3 4 5 6 7 8 9
tak, že jednotlivá místa vícemístného čísla dostávají rozdílné
řádové hodnoty např. 1985 znamená:
1 tisícovka + 9stovek + 8desítek + 5jednotek  
1 * 1000  + 9*100 + 8*10 +  5*1
První místo (zprava doleva) udává v desítkové soustavě jednotky,
druhé desítky, třetí stovky atd. Prvních pět míst desítkové
soustavy mají následující hodnoty:

místo      5      4      3    2    1  
hodnota  10000   1000   100   10   1

Jak patrno, vyplývá hodnota dalšího místa vždy z násobku desíti.

Dvojková čísla

Binární soustava čísel (dvojkový systém pracuje na principu jako
desítková soustava, pouze s tím rozdílem, že včechna čísla jsou
skládána z cifer 0a1.
Hodnota místa v dvojkovém systému je vždy právě dvojnásobkem
předcházejícího místa. Prvních pět míst (zprava doleva) v
binární soustavě mají následující hodnoty:  

místo       5     4     3     2     1
hodnota    16     8     4     2     1

dvojkově   1101  znamená*
1 osmička+1 čtyřka+0 dvojka+1 jednička
1 *  8  + 1 * 4 + 0 * 2 +  1 
Tedy desítkově 8+4+0+1=13.
Zkuste to spočítat dvojkově.
Nula je 0, jedna je 1. Teď přistupuje nové místo. Dvě je 10
(jedna dvojka a nula jedničky). Tři je 11 (jedna dvojka a jedna
jednička).
Teď už se musí přidat další místo. Čtyři je 100 (jedna čtyřka,
nula dvojky a nula jedničky). Pět je pak 101 a šest je 110 atd.
Čísla 0 až 10 se tvoří následovně:

 0        0
 1        1
 2        10
 3        11 
 4        100
 5        101
 6        110
 7        111
 8        1000
 9        1001
10        1010 

str.8

Větší čísla dávají v dvojkové soustavě docela pěkně dlouhé
tasemnice. Čtyř-místné desítkové číslo 8193 v dvojkové soustavě
má již 14 míst a vypadá takto
                              10000000000001
Naštěstí se nemusíte starat o princip dvojkových čísel do
desítkových a obráceně, protože od toho máme kalkulátor.

 Dvojková čísla pomocí kalkulátoru
 ---------------------------------

Když při počítání s kalkulátorem stisknete klávesu <B> přepojuje
se na číselné vyjádření v binární soustavě. Stisknutím klávesy
<D> lze opět přepojit zpět po vyjádření v desítkové soustavě.

Příklad:

   vstup         indikace                  poznámka
                 ----------------------
<SHIFT> <CLR>    |           #       0|    vymazat stack
                 |--------------------|
9 <CR>           |         9 #       1|
                 |--------------------|
B                |     1001B #       1|    dvojkově 9
                 |--------------------|
110 <CR>         |      110B #       2|
                 |--------------------|
D                |         6 #       2|    desítkově 110
                 |--------------------|
<+>              |        15 #       1|    9+6=15
                 |--------------------|
B                |     1111B #       1|    dvojkově 15
                 ----------------------

     B  v indikaci znamená dvojkové vyčíslení. Chcete-li zadat
číslo, musíte napřed aktivovat způsob vyčíslení. Vidíte, že
pomocí kalkulátoru neexistují hlavolamy s dvojkovými čísly.
Ostatně kalkulátor počítá vnitřně vždy s 16ti místnými dvojkovými
čísly. Nejvyšší číslo je proto právě      1111111111111111
tedy desítkově 65535.

Šestnáctková soustava čísel 
     Pro počítčové specialisty je šestnáctková soustava zvlášť
zajímavá, protože se tím zkracují dlouhé řady dvojkových čísel.
V šestnáctkové soustavě se sdružují totiž 4 místa dvojková v
v jedno šestnáctkové místo. Přitom se však vedle číslic 0 až 9
používají ješt písmena A až F aby bylo možno vyjádřit 16 možných
hodnot binárních čtyřčíslí.

str.9

dvojkový sled čísel      šestnáctkové číslo
     0000                     0
     0001                     1
     0010                     2
     0011                     3
     0100                     4
     0101                     5
     0110                     6
     0111                     7
     1000                     8
     1001                     9
     1010                     A
     1011                     B
     1100                     C
     1101                     D
     1110                     E
     1111                     F

Tedy když chceme přeměnit dvojkové číslo na šestnáctkové,
bereme zprava do leva vždy po 4 cifrách a měníme tyto na
příslušné šestnáctkové číslo.
Příklad:
        dvojkové číslo       10100101111
        rozklad na čtveřice  0101 0010 1111
        šestnáctkové číslo     5    2    F

Jinak je šestnáctkový systém čísel jako každý jiný. 16 číslic
je : 
     0 1 2 3 4 5 6 7 8 9 A B C D E F 
     cifry A....F mají hodnotu 10....15

Čísla se znázorňují sledem cifer, přičemž hodnoty jednotlivých
míst v šestnáctkové soustavě mají hodnoty:
     místo    :    4     3     2     1
     hodnota  :  4096   256   16     1
Hodnotu čísla obdržíme když hodnoty čísel znásobíme hodnotami místa.
Příklad:
        1AF2   znamená :
        1*4096 + 10*256 + 15*16 + 2*1
                (=A)     (=F)
tedy desítkově
              4096 + 2560 + 240 + 2 = 6898

Šestnáctková čísla pomocí kalkulátoru 
------------------------------------- 

     Klávesou <H> se mění kalkulátor na šestnáctkový provozní
režim.

str.10

Příklad:
   vstup         indikace                  poznámka
                 ----------------------
<SHIFT> <CLR>    |                   0|    stack smazat
                 |--------------------|
    15 <CR>      |           15 #    1|
                 |--------------------|
       <H>       |           FH #    1|    vyjádření v 16.sous.
                 |--------------------|
   1F0 <CR>      |         1F0H #    2|
                 |--------------------|
       <D>       |         496  #    2|    desít. vyjádření 1F0
                 |--------------------|
       <+>       |         511  #    1|    15 + 496 = 511
                 |--------------------|
       <H>       |         1FFH #    1|    šestn. vyjádření 511
                 |--------------------|
       <B>       |   111111111B #    1|    dvojkové vyj. 511
                 ----------------------

 1.4 Bit, Byte a K 
 ----------------- 

     V tomto odstavci se jedná o množství informací a místa v
paměti. Současně se vysvětlují některé zkratky.
Bit 
    je informační jednotka kterou se vyanačuje právě množství
informace, která je obsažena v jednoduchém rozhodnutí ANO/NE
jako např. prší/neprší. V počítači je Bit jedním paměťovým 
prvkem, který může zaujmout stavy "0" nebo "1" takže lze v něm
uchovat výsledek jednoduchého rozhodnutí ano/ne.
0=neprší, 1=prší
V jednom Bitu lze uchovat rovněž jedno jednotlivé místo
dvojkového čísla.
Byte
    jako Byte označujeme skupinu 8Bitů. U 8mi bitového počítače
tak jako i u MZ je každá paměťová buňka o 8mi Bitech, tedy
jeden Byte. Do jednoho Byte můžeme tedy právě umístit osmimístné
dvojkové číslo. Nejvyšší číslo ve dvojkové soustavě které lze
ještě umístit v jednom Byte je desítkově 255 (=dvojkově 11111111)
8Bitů jednoho Bytu se normálně znamená zprava doleva číslicemi
0 až 7.
MSB                   LSB
 B7 B6 B5 B4 B3 B2 B1 B0
Bit 7 (B7) označuje se též jako MSB (Most Signifikant Bit česky
Bit s nejvyšší hodnotou). Bit 0 jako LSB (Least Significant Bit
česky Bit s nejnižší hodnotou). Aby bylo možno ukládat vyšší
čísla než 255, je zapotřebí více než jeden Byte. Použijeme-li
např. jako v kalkulátoru 16Bitů, tedy 2 Byte, pak lze ukládat
i vyšší čísla. Rozsah hodnot 16 Bitového čísla (2 Byty) :
     0.....65535     (dvojkově: 0000000000000000 až 1111111111
111111)

16 ti Bitová čísla hrají v následujícím důležitou roli. K
ukládání těchto čísel je tedy zapotřebí 2 Bytů. Byte, který
obsahuje 8 levých míst nazýváme H-Bytem (High Byte), Byte, který
obsahuje 8 pravých míst nazýváme L-Bytem (Low Byte).

str.11

K

  protože se u počítačů děje konají dvojkově, byla pro 1024
zavedena zkratka K, tak jako jinak 1000 se zkracuje K (kilo).
K je nazýváno též "kilo". 1kByte (někdy též označováno 1K) je
tedy 1024 Bytů, 1KBit je 1024 Bitů.


 1.5 Dvojková aritmetika 
 ----------------------- 

     Počítání s dvojkovými čísly funguje vlastně právě tak jako
při počítání s čísly desítkovými. Jednotlivé početní operace se
dvojkově provádí dokonce jednodušeji, protože se pracuje pouze s
nulami a jedničkami. S kalkulátorem můžete provádět všechny
čtyři základní početní operace s dvojkovými čísly. Zkuste
následující početní příklady na kalkulátoru.

Sečítání :
Při sčítání dvou čísel se sčítá zprava doleva po místech
   0+0 je pak 0, 0+1 je pak 1, 1+0 je pak 1, 1+1 je pak 0 a jedna
1 jako přenos na další místo.
Příklad:
         11011001
       + 10001001
        -----------
        1  11  1    přenos
        101100010   výsledek

Odečítámí :
Právě tak se děje odečítání, jen s tím, že se z dalšího místa
"vypůjčuje"
   1-0 je 1, 1-1 je 0, 0-0 je 0, 0-1 je 1 přičemž se vypůjčuje
1 z dalšího místa.
Příklad:
         11101010
       - 01011001
        -----------
           1   1    přenos (vypůjčení)
         10010001   výsledek

Násobení :
Násobení dvojkových čísel je podstatně jednodušší naž násobení
v desítkové soustavě, protože dvojková malá násobilka pozůstává
pouze z
   0*0 je 0, 0*1 je 0, 1*0 je 0, 1*1 je 1.
Jinak jako obvykle se násobí postupně místa a následně se sčítá.
Příklad:
         10010110  *  101
        ----------
         10010110     (*1)
      +   00000000    (*0)
      +    10010110   (*1)
        -----------
         1011101110

str.12

Dělení :
Stejně jednoduše jako u dvojkového násobení se provádí dvojkové
dělení. Musí se pouze zkusit zda dělitel je 1 krát obsažen ve 
zbytku dělence či ne, a pak jej odečíst.
Příklad:
         11101   :   11   =   1001     zbytek 10
       - 11      *   1     (jde)
        ---------------
          01
       -  11     *   0     (nejde)
        ---------------
          010
           11    *   0     (nejde)
        ---------------
          0101
            11   *   1     (jde)
        ---------------
            10             (zbytek)

 Přesuny
 -------

     Právě tak jako v desítkové soustavě se provádí zvlášť
jednoduše násobení a dělení deseti, je ve dvojkové soustavě
zvlášť jednoduché násobení a dělení dvěma (dvojkově 10).
Příklad: násobení dvěma se pouze přiřazuje 0
         
         O1010 * 10 = 10100 (přesun doleva)

Tyto operace nejsou ničím jiným než přesuny o jedno místo, jak
je zřetelně patrno. Když se vpředu doplní nuly. Protože se často
používají, existují ve strojovém jazyku vlastní příkazy. Taky
na kalkulátoru existují tyto operace a aktivují se klávesami
<L> a <R>.

 1.6 Logika pomocí AND, OR, NOT, XOR
 -----------------------------------

Vedle aritmetických operací hrají důležitou roli v počítači tzv.
logické operace. Používají se příkladně k tomu, aby se vyhodnotily
porovnání a formulovaly složité podmínky, jak je znáte z jazyka
BASIC.
Příklad:
        IF A < 3 AND A > 0 THEN
        IF A = 0  OR A = 1 THEN

Tyto operace se provádějí vždy mezi jednotlivými Bity. Jestliže
jsou s těmito operacemi spojovány vícemístná dvojková čísla,
pak se postupuje po místech.

AND
   Operace AND (a) je definována následovně:
        0 AND 0  dává  0
        0 AND 1  dává  0
        1 AND 0  dává  0
        1 AND 1  dává  0
Výsledek je tedy právě tehdy 1, když první a druhé vstupní číslo
má hodnotu 1.

str.13

OR
   Operace OR (nebo) je definována následovně:
        0  OR 0  dává  0
        0  OR 1  dává  1
        1  OR 0  dává  1
        1  OR 1  dává  1

Výsledek je tedy 1, když první nebo druhé vstupní číslo (nebo
obě) mají hodnotu 1.

NOT
   Operace NOT (ne) invetuje:
        NOT   0  dává  1
        NOT   1  dává  0

Výsledek je tedy 1, když výchozí hodnota nebyla 1.

XOR
   Operace XOR (exclusive OR, česky výlučně nebo) je definována
následovně:
        0 XOR 0  dává  0
        0 XOR 1  dává  1
        1 XOR 0  dává  1
        1 XOR 1  dává  0

Výsledek je tedy 1, když buď první nebo druhé vstuní číslo (ale
nikoli obě) má hodnotu 1.

 Logické operace s kalkulátorem
 ------------------------------

     Právě tak, jako u aritmetických operací lze provádět na
kalkulátoru logické operace. Kalkulátor provede tyto operace
ve dvojkové soustavě místo za místem. Klávesy pro AND, OR, NOT,
XOR jsou značeny pouze začátečním písmenem <A>, <O>, <N>, <X>.

Příklad:
        vstup           indikace            poznámka 
                   -----------------------
  <SHIFT> <CLR>    |                    0|  stack smazat
                   |---------------------|
        <B>        |                  B 0|  vyčištění dvojkově
                   |---------------------|
      11 <CR>      |                11B 1|
                   |---------------------|
      10 <CR>      |                10B 2|
                   |---------------------|
        <A>        |                10B 1|  11 AND 10 = 10
                   |---------------------|
    1001 <CR>      |              1001B 2|
                   |---------------------|
        <O>        |              1011B 1|  10 OR 1001 = 1011
                   |---------------------|
        <N>        |  1111111111110100B 1|  1111111111110100
                   -----------------------

Vyzkoušejte si ještě logické operace na kalkulátoru než budete
pokračovat v dalších kapitolách.

str.14

KAPITOLA 2


 Prostor adresy: Paměť a ostatní věci

     Abychom vám předem znázornili přehled vnitřních pochodů
počítače, dáváme následující náčrtek.

                        ---------------
                        |     C P U   |
                        |             |
                        |Mikroprocesor|
                        ---------------
                          |    |    |
                          |    |    |
                -----------    |    -----------
                |              |              |
                |              |              |
     --------------------------------------------------
     |                                                |
     | Prostor adresy                                 |
     | --------------  -----------------  ----------- |
     | |            |  |               |  |         | |
     | |    R A M   |  |      R O M    |  | P O R T | |
     | | paměť      |  | paměť         |  | spojení | |
     | | zapisovací |  | pouze čtecí   |  | s peri- | |
     | | a čtecí    |  |               |  | feriemi | |
     | |            |  |               |  |         | |
     | --------------  -----------------  ----------- |
     |                                                |
     --------------------------------------------------
                                              |
                                              |
                               ----------------
                               |
                               |
                        -----------------
                        |               |
                        | V n ě j š e k |
                        |               |
                        | indikase,kláv.|
                        | tiskárna atd. |
                        |               |
                        -----------------


     Jak znázorňuje náčrt jsou v prostoru adresy RAM, ROM a PORT.
Co s tím souvisí je látkou této kapitoly. O CPU, který provádí
v počítači všechny operace a je ve spojení s RAM, ROM a PORTy
bude pojednáno podrobněji v kapitole č.4.

str.15

 2.1 Adresy, PEEK a POKE 
 ----------------------- 

     Prostor adresy počítače je sestaven z jednotlivých
paměťových buněk, které jsou v pořadí číslovány. Číslo paměťové
buňky nazýváme  adresa. To je podobně jako u čísel domů v ulici
s rozdílem, že (ve strojovém jazyce programování) se nejčastěji
udává adresa v šestnáctkových číslech.
Tedy :
      0000     paměťová buňka 0
      0001      -     "    -  1
      0002      -     "    -  2
       .
       .
      123A      -     "    -  4666
       .
       .
      FFFE      -     "    -  65534
      FFFF      -     "    -  65535

     Právě tak, jak pod různými čísly domů jsou rozdílné domy,
jsou pod adresami rozdílné věci. Ve většině případů jsou to
však paměťové buňky. Do paměťových buněk se vejde málo, totiž
u 8mi Bitového počítače jeden jediný Byte (viz. odst. 1.4).
Do něho lze např. uložit čísla mezi 0 a 255.

PEEK, POKE

     Aby se jednotlivé buňky prostoru adresy daly přímo aktivovat,
jsou v BASICu povely PEEK a POKE. Příkazem POKE lze do jedné
paměťové buňky něco připsat, pomocí PEEK přečíst, co je v buňce
uloženo. Při POKE udejte adresu a žádaný obsah paměťové buňky
způsobem:
         POKE <adresa>, <obsah>
Při PEEK udejte adresu a odbržíte jako výsledek obsah paměťové
buňky:
         A=PEEK <adresa>
Když pracujete s BASIC, můžete používat PEEK a POKE k aktivaci
jednotlivých paměťových buněk. K tomu teď používáme vpodstatě
kompletní pomůcka: šestnáctkový monitor ze souboru  Learn
(učebního). Nahrajte učební (Learn) programovací soubor, v
případě, že jste tak ještě neučinili a pojíždějte cursorem pomocí
klávesy <ALPHA> do prostředního okénka monitoru. Uvidíte
následující obrázek:

    ------------------------------------
    |                                0 |  ------ Kalkulátor
    |----------------------------------|
    |8000 :   .   00  #                |  ------ Hexmonitor
    |8001 :   .   00                   |
    |8002 :   .   00                   |
    |8003 :   .   00                   |
    |8004 :   .   00                   |
    |8005 :   .   00                   |
    |8006 :   .   00                   |
    |8007 :   .   00                   |
    |----------------------------------|
    |8000 :   NOP                      |
    ------------------------------------

str.16

Okénko č. 2 vypadá asi takto :

     -----------------------------------
     |8000 :   .   00    #             |
     |8001 :   .   00                  |
     |8002 :   .   00                  |
     |8003 :   .   00                  |
     |8004 :   .   00                  |
     |8005 :   .   00                  |
     |8006 :   .   00                  |
     |8007 :   .   00                  |
     -----------------------------------
      |        |    |
adresa      obsah   obsah
šestnáctkově ASCII  šestnáctkově

     V kolonce 1 jsou adresy paměťových buněk šestnáctkově
8000...8007, v kolonce 2 je ten který obsah pamětové buňky
kodovaný znaky ASC II. (vysvětlení následuje v kapitole 3).
Kolonka 3 ukazuje číselnou hodnotu, která je v buňce uložena v
šestnáctkové souustavě. Místo nul může obsahovat i jiné hodnoty.
Toto závisí na náhodě. Když stiskete <šipka vlevo> můzete
zkontrolovat adresu nad aktuální adresou a pomocí <šipky vpravo>
dostanete se i dolů. Klávesami <šipka dolů> a <šipka nahoru>
můžete po krocích listovat po 8mi adresách dopředu i dozadu.
V případě, že by trvalo moc dlouho vyhledat žádanou adresu,
stiskněte klávesu <INST>. Tím můžete předvolit novou adresu
(Memory).

     -----------------------------------
     |8000 :   .   00                  |
     |A = #                            |
     |8002 :   .   00                  |
     |8003 :   .   00                  |
     |8004 :   .   00                  |
     |8005 :   .   00                  |
     |8006 :   .   00                  |
     |8007 :   .   00                  |
     -----------------------------------

Po vstupu adresy s následujícím <CR> (např. 8900 <CR>) uvidíte
obsah paměti nového rozsahu. Jestliže vám 8 Bytů, které současně
můžete vidět na monitoru nebude stačit, stlačte jednoduše <X>.
Tím se dostanete do způsobu znázornění  Dump .

     ---------------------------------------------------
     |8000 :  00 00 00 00 00 00 00 00  . . . . . . . . |
     |8008 :  00 00 00 00 00 00 00 00  . . . . . . . . |
     |8010 :  00 00 00 00 00 00 00 00  . . . . . . . . |
     |8018 :  00 00 00 00 00 00 00 00  . . . . . . . . |
     |8020 :  00 00 00 00 00 00 00 00  . . . . . . . . |
     |8028 :  00 00 00 00 00 00 00 00  . . . . . . . . |
     |8030 :  00 00 00 00 00 00 00 00  . . . . . . . . |
     |8038 :  00 00 00 00 00 00 00 00  . . . . . . . . |
     ---------------------------------------------------
       |                |                     |
       |                |                     |
   adresa           obsah                   obsah
 hexadecimálně  hexadecimálně               ASCII

str.17

     Dump není nic jiného, než stlačenou variantou, znázornění
na Hexamonitoru. Opakovaným stlačením klávesy <X> dostáváme opět
původní znázornění. To by pro začátek stačilo. Další funkce
učebního programu (Learn) poznáte později, souhrnný návod k
obsluze najdete v dodatku D.
     Pomocí Hexmonitoru můžete přímo přehlíž celý prostor adres
počítače. Zvolte klávesu <INST> v znázornění na Hexamonitoru
adresu A=8000. Když dáte na vstup číslo 12, také hodnota
(šestnáctkově) se zapíše přímo do paměťové buňky s adresou 8000.
Avšak pozor: proměňujte zatím pouze paměťové buňky, které vám
označíme, jinak byste mohli počítač docela rozházet.

 2.2 RAM, ROM a Port
 -------------------
RAM

     Paměťová buňka s adresou 8000 (šestnáctkově), kterou jsme
se právě zabývali, je paměťová buňka RAMu (Random Access Memory)
paměti psací a čtecí. To znamená:
můžete něco vepsat a později zase vyjmout. Informace zůstává
tak dlouho v ní uložena, dokud nevepíšete něco nového.

Než se budeme zabývat rozdílnými rozsahy RAMu, chceme vám ukázat,
které podivné paměťové buňky se skrývají za jednotlivými adresami.

ROM

     Zvolte si pomocí <INST> adresu 0100 a zkuste něco vepsat.
Zjistíte, že paměťová buňka 100 (šestnáctkově), ať děláte cokoli,
podrží si vždy hodnotu 00. Můžete dokonce vypnout a zapnout
počítač. Zůstává v ní stále 00.

Vysvětlení je následující: paměťová buňka 0100 je buňka ROMu.
( Read Only Memory).
ROM je pouze paměť čtecí, t.j. při výrobě ROMu se jednou pro
vždy vloží určité programy a data, které nelze již změnit. To
slouží např. k tomu, že váš počítač nezapomene jak se nabíjejí
programy z kazety. Jeho celé "know how" o nabíjení z kazety
je totiž uloženo v paměti ROM.

Port

     Zvolte adresu D303 a tam dejte hodnotu 55. Pozorujte
obrazovku. Nedivte se, když dole uprostřed obrazovky bude značka
(černé kolečko). Právě jste ji vepsali přímo do paměti
obrazovkové. Paměťová buňka D303 (šestnáctková) má "drát směrem
ven", totiž k obrazovce počítače. Obsah obrazovkové paměti
je okamžitě vydáván pomocí speciálního Videochipu. Takové paměťové
buňky s  drátem ven  nazýváme Porty. Slouží buď k tomu, aby něco
vydávali, např. na obrazovku, do tiskárny, na magnetopáskovou
kazetu, nebo aby něco akumulovali, např. z klávesnice nebo z
kazety.
     Porty jeví zcela odlišné způsoby chování. Při portu výdeje
(output-Port) se něco vepíše, zda se to pro kontrolu může opět
přečíst, závisí na konstrukci Portu. U vstupních portů (Input
Ports) obecně nemá smysl něco vepisovat, ale chceme tu právě
něco přečíst, např. z klávesnice.

str.18

 2.3 Plán pamětí
 ---------------

     Potom, co jsme se naučili co to je RAM, ROM a Porty, můžeme
vám dát nahlédnout do prostoru adresy vašeho počíače. Z
následujícího plánu paměti lze zjistit, u kterých adres je RAM,
ROM nebo vůbec žádná paměť.

     ----------------------------------
0000 | Monitor R O M                  |
     |--------------------------------|
1000 | Systém R A M                   |
     |--------------------------------|
1200 | Uživatelská R A M              |
     |                                |
     |                                |
5FFF | Učební LEARN program           |
     |--------------------------------|
     |                                |
     |                                |
     |                                |
     |                                |
     |--------------------------------|
D000 | Video R A M                    |
     |--------------------------------|
E000 | Monitor R O M                  |
     ----------------------------------
FFFF

     U Monitor-ROM jsou v paměti programy a data, které se nedají
přepisovat, byly od výrobce jednou pro vždy uloženy do paměti
a zajišťují např. že můžete nahrávat programy z kazety a tyto
startovat. Po vypnutí počítače zůstává obsah ROMu zachován.

     V uživatelském RAMu se ukládají do paměti strojové programy
a data. Mohou se kdykoli přepisovat, ale pouze tehdy, když známe
přesně význam každé paměťové buňky, neboť jinak lze způsobit
lehce zhroucení celého počítače. Kromě toho vlastní váš počíač
možnost, pomocí speciálních operací,  vyřadit ROM a nahradit jej
přídavným RAM do prostoru adresy. Avšak tím se nebudeme zde dále
zabývat, protože se přitom jedná o komplikované mechanismy.

KAPITOLA 3

Kódy:
        Co všechno obsahuje paměť

     Uzlem na kapesníku lze si poměrně zapamatovat všechno.
Podobná je situace, když chceme uložit něco do paměti počítače.
Máme místo uzlů ve skutečnosti k dispozici pouze nuly a jedničky,
přesto můžeme dávat do paměti nejrůznější věci: texty programů
BASIC, samozřejmě i osobní záznamy, to ovšem je vše jen otázka
kódování.

str.19

3.1 Texty:  kód ASCII

     Možná, že si někdo vzpomene na tajná psaní z dětství. Tehdy
byla např. pravidla jako A=1, B=2 .... Z=26 a tak se dal
sdělovat text tím, že se převedl do čísel. Jestliže jiní to
prohlédli, byly voleny komplikovanější systémy. Aby bylo
vyjadřování textu v počítačích jednotné např. pro výměnu
informací, byl kód normalizován, kód ASCII (American Standart
Code for Information Interchange), kterého se drží většina
mikropočítačů. Některé počítače mluví ovšem svým vlastním tajným
jazykem, a proto jim ostatní nerozumí. Bohužel patří počítače
MZ od fi SHARP co se týče malých písmen a malých znaků, také
do této kategorie. V kódu ASCII je stanoveno jak se převádí texty
na binární nuly a jedničky. Prvních 32 znaků v tomto kodu jsou
však řídící znaky, které se používají především při přenosu
textů z jednoho přístroje na druhý, např. aby byl signalizován
konec přenášeného textu. Nejpoužívanějším řídícím znakem je CR
(Carrige Return), který je často ve spojení s LF (Line Feet)
aby byl vyznačen konec řádku.
 V následujících tabulkách najdete kód ASCII a odchylky od
tohoto kódu pro počítače MZ:

----------------------------------------
|Binárně   |Hex  |Dec  |ASCII |MZ-800  |
|----------|-----|-----|------|--------|
|00000000  |0    |0    |NUL   | viz    |
|00000001  |1    |1    |SOH   |dodatek |
|00000010  |2    |2    |STX   |  A     |
|00000011  |3    |3    |ETX   |        |
|00000100  |4    |4    |EOT   |        |
|00000101  |5    |5    |ENQ   |        |
|00000110  |6    |6    |ACK   |        |
|00000111  |7    |7    |BEL   |        |
|00001000  |8    |8    |BS    |        |
|00001001  |9    |9    |HT    |        |
|00001010  |A    |10   |LF    |        |
|00001011  |B    |11   |VT    |        |
|00001100  |C    |12   |FF    |        |
|00001101  |D    |13   |CR    |        |
|00001110  |E    |14   |SO    |        |
|00001111  |F    |15   |SI    |        |
|--------------------------------------|
|00010000  |10   |16   |DLE   |  viz   |
|00010001  |11   |17   |DC1   |dodatek |
|00010010  |12   |18   |DC2   |   A    |
|00010011  |13   |19   |DC3   |        |
|00010100  |14   |20   |DC4   |        |
|00010101  |15   |21   |NAK   |        |
|00010110  |16   |22   |SYN   |        |
|00010111  |17   |23   |ETB   |        |
|00011000  |18   |24   |CAN   |        |
|00011001  |19   |25   |EM    |        |
|00011010  |1A   |26   |SUB   |        |
|00011011  |1B   |27   |ESC   |        |
|00011100  |1C   |28   |FS    |        |
|00011101  |1D   |29   |GS    |        |
|00011110  |1E   |30   |RS    |        |
|00011111  |1F   |31   |US    |        |
| -------------------------------------|

str.20

----------------------------------------
|Binárně   |Hex  |Dec  |ASCII | MZ-800 |
|----------|-----|-----|------|--------|
|00100000  |20   |32   |SPACE |SPACE   |
|00100001  |21   |33   |!     |!       |
|00100010  |22   |34   |"     |"       |
|00100011  |23   |35   |#     |#       |
|00100100  |24   |36   |$     |$       |
|00100101  |25   |37   |%     |%       |
|00100110  |26   |38   |&     |&       |
|00100111  |27   |39   |'     |'       |
|00101000  |28   |40   |(     |(       |
|00101001  |29   |41   |)     |)       |
|00101010  |2A   |42   |*     |*       |
|00101011  |2B   |43   |+     |+       |
|00101100  |2C   |44   |,     |,       |
|00101101  |2D   |45   |-     |-       |
|00101110  |2E   |46   |.     |.       |
|00101111  |2F   |47   |/     |/       |
|--------------------------------------|
|00110000  |30   |48   |0     |0       |
|00110001  |31   |49   |1     |1       |
|00110010  |32   |50   |2     |2       |
|00110011  |33   |51   |3     |3       |
|00110100  |34   |52   |4     |4       |
|00110101  |35   |53   |5     |5       |
|00110110  |36   |54   |6     |6       |
|00110111  |37   |55   |7     |7       |
|00111000  |38   |56   |8     |8       |
|00111001  |39   |57   |9     |9       |
|00111010  |3A   |58   |:     |:       |
|00111011  |3B   |59   |;     |;       |
|00111100  |3C   |60   |<     |<       |
|00111101  |3D   |61   |=     |=       |
|00111110  |3E   |62   |>     |>       |
|00111111  |3F   |63   |?     |?       |
----------------------------------------

