             M I K R O  -  P A S C A L 
             =========================
                   s y s t e m
              ( verze       010189)
                
1/ Úvodní informace.
--------------------

MIKRO - pascal  je  verzí  Turbo-pascalu  v  3.0  firmy  Borland
Z implementace na MZ800 bez disketové jednotky vyplývaji  někte-
rá omezení, která jsou popsána dále v textu.

 Činnost po zavedení:
     
     Na dotaz  INIT SCREEN  1 - 4 možnost volby
    
     1 -  40 znaků na řádek  4 barvy  \ 
     2 -  40 znaků na řádek 16 barev    odpovídá parametru 
     3 -  80 znaků na řádek  2 barvy    INIT "SCR,Mx" BASICU
     4 -  80 znaků na řádek  4 barvy  /   
 
     Poté se zadají barvy tisku,pozadí a lowvideo.

Základní MENU
-------------

W - volba pracovního souboru - pokud chceme  nový  soubor  stisk
    SHFT/BREAK na požadavek PLAY
    
E - Edit pracovního souboru -  pokud  není  v  paměti  předchází
    automaticky funkce W.
    
C - Překlad pracovního souboru

R - Spuštení přeloženého programu - nebyl li přeložen předchazí
    automaticky funkce C.
              
T - Výpis pracovního souboru na LPT.

M - Aktivace vestavěného monitoru

F - Přepínání typu pracovního souboru  MIKRO / FET.

O - volba činnosti překladu

Od verze 111188 je modul MIKRO.MSG integralni součástí překladače
a nezavádí se proto z magnetické pásky. Podle odpovědi na dotaz 
vložit chybové zprávý se buď aktivuje nebo ne.


Editor
------
ovládání ukazatele
    
   o znak vlevo         CTRL-S   šipka vlevo
   o znak vpravo        CTRL-D   šipka vpravo
   o slovo vlevo        CTRL-A   [ F3 ]
   o slovo vpravo       CTRL-F   [ F4 ]
   o řádek nahoru       CTRL-E   [šipka nahoru]
   o řádek dolů         CTRL-X   [šipka dolů ]
   o stranu nahoru      CTRL-R   [shift + šipka nahoru]
   o stranu dolů        CTRL-C   [shift + šipka dolů]
   na začátek řádku     CTRL-Q-S [shift + šipka vlevo]
   na konec řádku       CTRL-Q-D [shift + šipka vpravo]
   na začátek obrazovky CTRL-Q-E
   na konec obrazovky   CTRL-Q-X
   na začátek souboru   CTRL-Q-R
   na konec souboru     CTRL-Q-C
   na předchozí pozici  CTRL-Q-P

   příkazy vkládání a mazání

   vkládání/přepisování CTRL-V   [ INS ]
   vložení řádku        CTRL-N   [ shift + INS]
   vymazání znaku       DELETE
   vymazání slova       CTRL-T
   vymazání řádku       CTRL-Y   [ shift + DEL]
   vymazání do kon rad  CTRL-Q-Y [ F2 ]

   příkazy pro práci s bloky

   vyznač začátek bloku CTRL-K-B
   vyznač konec bloku   CTRL-K-K
   kopírování bloku     CTRL-K-C
   přesunutí bloku      CTRL-K-V
   výmaz bloku          CTRL-K-Y
   čti blok ze souboru  CTRL-K-R
   piš blok do souboru  CTRL-K-W
   ukazatel na zač blk  CTRL-Q-B
   ukazatel na kon blk  CTRL-Q-K
   zobrazení bloku Z/V  CTRL-K-H

   příkazy vyhledávání a nahrazování

   vyhledání řetězce    CTRL-Q-F
   nahrazení řetězce    CTRL-Q-A
   opakování přikazu    CTRL-L
   zrušení příkazu      CTRL-U

   ostatní příkazy

   ukončení editování   CTRL-K-D   [ F1 ]
   obnovení řádku       CTRL-Q-L
   změna odsazování     CTRL-Q-I
   tabulátor            CTRL-I     [ TAB ]


   volby pro vyhledání a nahrazení

 volba       vyhledání       nahrazení

  B      zpětní hledání   zpětní hledání
  G                       globální hledání
  N                       nahrazení bez dotazu
  U      ignorování rozdilu mezi malými a
         velkými písmeny
  W      vyhledávaní celých slov
  n      vyhledání n-teho výskytu řetězce


2/Monitor
---------

  příkazy monitoru

  Dadr1[,adr2]

   výpis úseku operační paměti od adr1
   do adr2
   není-li adr2 uvedeno vypíse se 160 byte

   zastavení výpisu              CTRL-S
   zrušení zastaveného výpisu    CTRL-C

  Madr1

   modifikace obsahu od adresy adr1 ukončení modifikace  zadáním
'k'

 Fadr1,adr2,xx

   zaplnění úseku  paměti  od  adresy  adr1  do  adr2  bytem  xx
(hexadecimálně);

 Tadr1,adr2,adr3

   přesun úseku paměti  počínaje  adresou  adr1  konče  adr2  na
adresu adr3

 Gadr1

   vyvolání podprogramu na adrese adr1 pro řadný návrat musí být
zásobník na stejné úrovni

 L[adr]

  zavedení programu  (dat)  od  adresy  adr  pokud  není  adresa
uvedena zavede se od adresy v záhlaví

 Sadr1,adr2,adr3,filename

   uložení úseku paměti od adresy adr1  do  adr2  na  pásku  pod
jménem filename, adr3 je uložena jako start adr  do  záhlavi (je
nutno ji uvést)

 R

   návrat zpět do základního menu


3/ Volby kompilace
------------------

 Kompilace do paměti - volba M

nevytváří se soubor na magn pásce

Kompilace na mp - volba C 

na magnetickou pásku se zapíše knihovna PASCALU + BIOS , pak  se
provede překlad a zapíše se výsledný program
    před zápisem BIOS , před vlastním překladem a  před  zápisem
programu zpráva na display Set tape... čeká  na  CR  .  V  tomto
momentě je  možno  provést  výměnu  pásky  pokud  používáme  při
překladu direktivu {$I jméno souboru} pro vkládáni části textu z
magnetické pásky.
 

 Kompilace na mp     - volba H

na magnetickou pásku se zapiše pouze  výsledný  program.  (takto
vytvořený program je možno provozovat  pod  systémem  vytvořeným
volbou C (po ukončení programu zůstane systém funkční a je možno
zavést a spustit další program (uvedením jména)

 Struktura programu na magnetické pásce

program COM na magnetické pásce se skládá ze 4 částí

                   délka           zav.adresa

1/ LOADER           D6               2BA8
2/ BDOS+BIOS      25E0               DA00
3/ Knihovna PASC  2033                100
4/ Vlastni prog   ????               ????

program CHN obsahuje pouze cast 4.

   Obsazení paměti programem
   
   0000 - 0100          pracovní oblast systemu
   0100 - 2033          knihovna Pascalu
   2033 - cca 7FF7      překladač PASCAL  - v souboru COM  volná
                                            oblast
   7FF7 - nnnn          zdrojový text     - v souboru COM volna                                            
                                            oblast   
   nnnn - D600          přeložený program + HEAP + proměnné 
   D600 - FC00          BDOS + BIOS
   FC00 - FFE0          případné překryvné programy (GRAF)
   
volnou oblast v programu COM lze využít pro umistění absolutních
proměnných.  Místo  pro  cílový  program  lze  zvětšit  použitím
direktivy {$I  soubor}  překladače  pro  minimalizaci  velikosti
zdrojového textu v paměti.   

4/ Restart zadřeného programu 
-----------------------------

    Při běhu programu za volby překladu M tj.  překladač  je
přitomen v paměti je možno použít tlačítka  CTRL  RESET  pro
nové nastartování překladače.



5/ Omezení a rozšíření proti přiručce
--------------------------------------

   Videorutiny
   -----------

nejsou funkční procedury

   INSLINE, DELLINE

   je doplněna procedura

   PAL (x,y);

pričemž x je číslo palety 0 - 3
          y je číslo barvy  0 - 15

paleta 0 odpovídá barvě pozadí
       1 odpovídá barvě lowvideo
       2 odpovídá barvě highvideo
       3 odpovídá barvě normvideo
 

   Zpracování souborů
   ------------------

nejsou funkční procedury

SEEK , FLUSH , ERASE , RENAME , CHAIN , EXECUTE

a funkce  FILESIZE

Dále není možno používat procedury OVERLAY.

je možno současně  pracovat  jen  s  jedním  souborem  tzn  mezi
přikazy RESET (REWRITE) a CLOSE  pro  jeden  soubor  není  možno
použít přikazy pro jiný soubor (není kontrolováno - použití vede
k nedefinovatelným výsledkům)

Formáty souboru na magnetické pásce
-----------------------------------

   Zdrojové i datové soubory na magnetické pásce jsou ve formátu
BSD s délkou datové oblasti 8 virtuálních sektorů tj  1024  byte
blok je doplněn na začátku 2 bytovým číslem bloku (poslední blok
FFFF). 

 Z toho vyplývá problém při kopírování zdrojových  textů,  které
nejdou kopírovat žádným běžným kopírákem. 

 Bohužel kazeta se  musí  pokoušet  imitovat  disketový  přístup
(alespoň sekvenční) takže není jiná možnost.  



Soubory ve formátu MZ800
------------------------

  Pro zpracování souborů ve formátu MZ800 se používá příkaz BDOS
(12,adr(LAB));

 přičemž LAB je  pole o struktuře

 LAB = record       
                    opByte    :  byte; 
                    fileName  :  array [1..17] of char;
                    fileSize  :  integer;
                    loadAddr  :  integer;
                    startAddr :  integer;
                    comment   :  array [1..104] of char;
      end;

opByte = kod operace     1 .. čtení návěští do pole LAB
                         2 .. čtení bloku (dle adres v LAB)
                         3 .. zápis návěští (zapise se LAB)
                         4 .. zápis bloku (dle adres v LAB)

další údaje odpovídají návěští formátu MZ800

Přikaz type
-----------
   
    Byl doplněn příkaz  Type  pro  opis  pracovního  souboru  na
tiskárně. 


Soubory ve formátu editoru FET.
-------------------------------

   Mikro od verze 101088 umožňuje zpracování  textových  souborů
vytvořených editorem FET. Přechod do tohoto  režimu  se  provede
volbou F základního menu. Volba je indikována číslem jednotky  F
v Logged drive. Přechod  zpět  do  základního  režimu  opětovným
stiskem F. Indikace B v Logged drive.
 V režimu zpracováni souboru FET lze používat  pouze  příkazy  W
pro přečtení souboru a S pro zápis souboru na kazetu. Pro  práci
se soubory ( vkládání do textu ; direktiva $I překladače atd  je
nutno používat soubory v základním tvaru.
 POZOR !!! v režimu souboru  FET  není  kontrolováno  jestli  se
soubor vejde do přidělené paměti (když se nevejde - přepíše BDOS
a následuje odchod).
           dalšim  omezením  je  to  že  system  nekontroluje  u
souboru FET jméno souboru - přečte se první soubor na pásce.



údaje reálného času
-------------------

  Jsou definovány procedury pro nastavení  reálného  času  a
zjištění reálného času

 SETIM (pole) nastavení času

 GETIM (pole) zjištění času

  pole je proměnná popsaná jako array [1..3] of byte

  v prvku pole [1] se předávají hodiny
          pole [2]              minuty
          pole [3]              sekundy


  příklad nastavení času na  21:12:00

           .......
         pole  [1] := 21;
         pole  [2] := 12;
         pole  [3] := 0;
         SETIM (pole);



  Problematika tiskáren
  ----------------------

Mikro Pascal pracuje se standardním ASCII kodem.  Pro  připojení
tiskáren jsou uvažovány dva typy dialogu.

Dialog 1

               -------|    |----------
   Data Strobe        |    |
                      ------

                             |---------
   Busy                      |
               ---------------


Dialog 2

              --------|    |-----------
   Data Strobe        |    |
                      ------


                        |--------------
   Busy                 |
              -----------

Dialog 1 používají  tiskárny  s  vyrovnávací  pamětí  např  D100
Robotron 6313/14

Dialog 2 používá např plotter MZ-1P16


Dialog      adresa na CMT   adresa pamet  Obsah

  1         9C71            EC71           00 00

  2         9C71            EC71           20 F8


Konverze malých písmen do kodu SHARP

  na adrese 9ACC  (CMT)   EACC  (pamět)   01   pokud   požadujeme
konverzi (stand. 00).
 

Dodávaná verze je s dialogem 1 bez transformace 
Adresou CMT se rozumí adresa  na  které  je  nutno  zmodifikovat
program po natažení do programu TURBO COPY



Zajímavé adresy
---------------

aktivní border při čtení MP

 E991 [9991]   F8

neaktivní      FF


zpracování magnetických pásek 2:1


adresa prg.  adresa mp   1:1       2:1

E79B           979B       4C        20
E7A1           97A1       18        0C
E7A5           97A5       69        34


barva tisku    F9EB
mění se použitím normvideo,lowvideo,highvideo

vzor kurzoru je na adresách FA06-FA0D

na adrese FA0E FF = kursor se zobrazuje
               00 = kursor se nezobrazuje


              MIKRO a základní grafika
              ========================

pro možnost použití základních  grafických  elementů  v  systému
MIKRO byl vytvořen překryvný modul  MIKRO-GRAF,  který  umožňuje
použití příkazů:

          PLOT   -   pro vynesení bodu
          UNPLOT -   pro zrušení bodu
          LINE   -   pro vynesení úsečky
          BLINE  -   pro zrušení úsečky
          
          COLOR  -   pro zadání grafických parametrů
                     (parametry jsou shodné s obdobným pří-
                     kazem BASIC tj 1.parametr paleta druhý
                     parametr mode).

          SOUND  -   pro řízení zvukového generátoru
                     pokud první parametr  je  9..83  je  příkaz
                     ekvivalentní Basicovemu  přikazu  SOUND  ve
                     formátu   1   tj   první   parametr   výška
                     tónu,druhý délka v  1/100  sec.  viz  popis
                     BASIC str 6-71.  Pokud  první  parametr  je
                     0..7 je příkaz ekvivalentní  formátu  2  tj
                     první operand registr, druhý data viz popis
                     strana 6-72. 


          
          SCR    -   init obrazovky. Parametr odpovídá parametru
                     v BASICU nebo úvodní nabídce
                     
          CURON  -   kursor se zobrazuje
          
          CUROF  -   kurzor se nezobrazuje
          
          CLICK  -   pípání při stisku klávesy ma dva  parametry
                     první výška tónu ( čím větší číslo tím niž-
                     ší tón) druhý délka tónu (čím  větší  číslo
                     tím delši tón). Implicitní hodnoty jsou 256
                     a 512.


                              
Následující příklad názorně ilustruje použití grafického modulu
včetně zavedení do paměti
Ve vlastním programu  použijeme  buď  jen  ty  procedury,  které
potřebujeme nebo vytvoříme zdrojový modul na pásce a připojujeme
ho direktivou {$I soubor}

program GRAF;
                { procedury obsazene v modulu MIKRO-GRAF}

procedure PLOT (x,y:integer);
          external $fc00;

procedure UNPLOT (x,y:integer);
          external $fc03;

procedure LINE (x,y,x1,y1:integer);
          external $fc06;

procedure BLINE (x,y,x1,y1:integer);
          external $fc09;

procedure COLOR (pal,mode:integer);
          external $fc0c;

procedure SOUND (vyska,delka:integer);
          external $fc0f;

procedure SCR (typ:integer);
          external $fc12;
          
procedure CURON;
          external $fc15;
          
procedure CUROF;
          external $fc18;
          
procedure CLICK (vyska,delka:integer);
          external $fc1b;

procedure TEXTCOLOR (barva:integer);
  begin
  mem[$f9eb]:=barva;
  end;


                   
      { procedura  pro  zavedeni  modulu  MIKRO-GRAF  do pameti }
procedure LOAD;

var lab:array[1..128] of byte;
    a1 :integer;
    bylload : byte absolute $fc00;
begin
     if bylload <> $c3 then
     begin
     lab[1]:=1;                        {cteni navesti}
     bdos(12,addr(lab));
     a1:=2;
     writeln;                          {tisk Loading ...}
     write ('Loading ');
     repeat
     write (char(lab[a1]));
     a1:=succ(a1);
     until lab[a1]=13;
     writeln;
     lab[1]:=2;                        {cteni tela programu}
     bdos(12,addr(lab));
     end;
end;

procedure CTVEREC(x,y,r:integer);
     begin
     plot (x,y);
     line (x,y,x+r,y);
     line (x+r,y,x+r,y+r);
     line (x+r,y+r,x,y+r);
     line (x,y+r,x,y);
     end;

                      { ****  P R O G R A M  ***  }
                           
begin
load;
{ ...... sem prijde program ...}
write (char(12));                  {CLS}
ctverec(100,100,40);
end.

V uvedeném přikladě je použito zavádění překryvné fáze při  běhu
programu. Je možno  ji  zavést  téz  monitorem  (příkaz  L).  Po
provedení překladu do souboru (COM) se zapíše BIOS  včetně  této
překryvné části.

 POZOR !!! pokud zavedeme do  pameti  modul  MIKRO-GRAF  neni
    funkční CTRL - RESET.

Grafika na pásce je generována v režimu 320 x 200 bodu 4 barvy.
Pokud pracujeme v jinem režimu obrazovky  musí  prvním  příkazem
pred použitím grafických přikazu být přikaz SCR , kterým  přede-
finujeme obrazovku.

    Při použití SCR (2)  -  šestnáct  barev  dochází  ke  kolizi
grafického a textového režimu. Je třeba při vstupu  do  programu
předefinovat PAL (1,1);PAL(2,2);PAL(3,3) a pro barvu  tisku  po-
užívat proceduru TEXTCOLOR ve které uvádíme přímo  barvu  tisku.
Před ukončením programu vrátit  PAL(1,lowvideo),PAL(3,normvideo)
obnovi se spravné barvy tisku pro funkci editoru.


Grafický modul MIKRO-DRAW - rychlá grafika
------------------------------------------
obsahuje procedury :

          POINT   -   pro vynesení bodu
          DRAW    -   pro vynesení úsečky
          
          SCR     -   init obrazovky. Parametr odpovídá parametru
                      v BASICU nebo úvodní nabídce
                     
          CURON   -   kursor se zobrazuje
          
          CUROF   -   kurzor se nezobrazuje
          
          CLICK   -   pípání při stisku klávesy ma dva  parametry
                      první výška tónu ( čím větší číslo tím niž-
                      ší tón) druhý délka tónu (čím  větší  číslo
                      tím delši tón). Implicitní hodnoty jsou 256
                      a 512.

**  pro proceduru DRAW byl použit interpolátor úsečky vypracovaný
    v SHARP klubu Bratislava **

volání procedur:

procedure POINT (x,y,barva:integer);
          external $fc00;

procedure DRAW (x,y,x1,y1,barva:integer);
          external $fc06;

procedure SCR (typ:integer);
          external $fc12;
          
procedure CURON;
          external $fc15;
          
procedure CUROF;
          external $fc18;
          
procedure CLICK (vyska,delka:integer);
          external $fc1b;

Grafický zápis je v modulu MIKRO-DRAW prováděn v režimu OR  (viz
popis GDG). Pokud chceme  použít  jiný  režim  je  možno  použít
proceduru SETGRAFMODE v následujícím tvaru.

const    GRAFSINGLE = $0;   {vsechny konstanty jsou globalni}
         GRAFEXOR   = $20;
         GRAFOR     = $40;
         GRAFRESET  = $60;
         GRAFREPLACE= $80;
         GRAFPSET   = $C0;

procedure SETGRAFMODE (typ:integer);
begin
  mem [$fc60]:=typ;
  mem [$fdaf]:=typ;
end;
            
jinak pro použití modulu MIKRO-DRAW platí vše co bylo řečeno u
modulu MIKRO-GRAF.

 Dalši informace o systemu na adrese
         
                
                                      Vladimir Svoboda
                                      Kpt Jarose 14
                            415 02    TEPLICE

