Vše o MZ-800 - Basic MZ-700

 

Zpět Nahoru Další

 

 

        Obsah této stránky:

bullet

MZ - 700 Basic  1Z-013B v1.0A

bullet

Organizace řádků BASICu v paměti

bullet

Manipulace s PEEK a POKE

bullet

RAM monitor

bullet

Užitecné adresy v S-BASICu.

bullet

Paměť barev a druhá sada znaků.

bullet

Převod programů z MZ-80 K

bullet

Vyloučení činnosti klávesy BREAK a SHIFT+BREAK

bullet

Změna barev bez vymazání obrazovky

bullet

Odvozené funkce

bullet

Pořízení bezpečnostní kopie S-BASICu

bullet

Rozšíření sady příkazů S-BASICu

MZ - 700 BASIC  1Z-013B v1.0A
Tato část knihy se zabývá interpretem BASICu MZ-700. Speciálně půjde o kazetovou verzi BASICu, která se od Q-disk verze BASICu liší hlavně tím, že adresy přesně neodpovídají. K mikropočítači MZ-800 patří dvě různé verze BASICu. jedna z nich je MZ-700 BASIC, který sice ponechává více volného místa v paměti, ale nepodporuje zvláštní možnosti grafiky a generování tónů. Proto se zvlášť hodí pro psaní programů, které tyto zvláštnosti nepotřebují jako například práce s daty. MZ-700 BASIC se vždy hlásí bílou barvou na modrém pozadí a tím se dá snadno rozeznat od MZ-800. BASIC se nahrává z kazety nebo disku a potom se sám spustí. Nyní můžete vkládat vlastní programy, nebo je nahrát z kazety, nebo disku. Některé příkazy v manuálu nejsou uvedeny, ale BASIC jim přesto rozumí.

TRON Tento příkaz vypisuje čísla řádků, které jsou interpretem právě zpracováván. Tento příkaz je užitečný zejména při hledání chyb nebo tvoření programu.

TROFF Vypíná příkaz TRON

POKE  O tomto příkazu je sice v manuálu zmínka, ale je zamlčeno, že může být použit také s několika parametry např.
 

  POKE 53248, 65,66,67 je stejné jako
    POKE 53248, 65
    POKE 53248, 66
    POKE 53248, 67

JOY   Tento příkaz kontroluje Joystick. V MZ-800 jsou ale definovány nové programy pro Joystick takže tento příkaz by mohl být bez účinku. (Blíže neznámá činnost, parametry 0 - 7 vrací log hodnotu)

CLS   Příkaz maže obrazovku a přesouvá kursor do levého horního rohu.

HEX$  Převádí dekadické číslo na hexadecimální, např.:  PRINT HEX$ (255)  dává  FF.
 

Organizace řádků BASICu v paměti
Programový řádek se do paměti neukládá tak, jak se objevuje na obrazovce nebo jak se zadává, ale v kódech. Každému příkazu se přiřadí hexadecimální kód (číslo), který je dlouhý jeden nebo dva byty. To má tu výhodu, že každý příkaz potřebuje maximálně jen dva byty, většina povelů se dokonce obejde s jedním bytem. Např.: Příkaz RESTORE má kód 85h místo 7 znaků. Program v MZ-700 BASICu začíná vždy od adresy 6BCFh.

Struktura programového řádku je následující:

1. První dva znaky určují počet znaků v program. řádku. Může mýt maximálně 255 bytů. To vychází z podmínek, že druhý byt (High byte) musí být vždy  00H.

2. Třetí a čtvrtý byt tvoří číslo programové řádky BASICu.

3. Následující byty až po koncový byt 00H jsou kódy, ASCII kódy, proměnné nebo řetězce.

4. Koncový byt 00H. Ten ukazuje konec programové řádky.

Je-li počet znaků 00, číslo řádky 00, je to konec celého programu v BASICu.
 

Příklad uložení programu v paměti:
Abychom ještě jednou zdůraznili celý postup ukládání řádků do paměti, vylistujeme si krátký program.

  10 REM BBG-DEMO
  20 FORA=1TO255
  25 PRINTCHR$(A);:NEXT
  30 PRINT"Info BASIC"
  40 GOTO10
  60 END

Výpis paměti:
      adresa      obsah       význam
      --------------------------------------------------------
      6BCF  0F          počet Bytů v řádce (low Byte)
      6CD0  00                             (high Byte)
      6CD1  0A          10 - číslo řádky (low Byte)
      6CD2  00                           (high Byte)
      6CD3  97          REM
      6CD4  20          SPACE (mezera)
      6CD5  42          B
      6CD6  42          B
      6CD7  47          G
      6CD8  2D          -
      6CD9  44          D
      6CDA  45          E
      6CDB  4D          M
      6CDC  4F          O
      6CDD  00          konec řádky
      6CDE  15          počet Bytů v řádce (low Byte)
      6CDF  00                             (high Byte)
      6CE0  14          20 - číslo řádky (low Byte)
      6CE1  00                           (high Byte)
      6CE2  8D          FOR
      6CE3  41          A
      6CE4  F4          =
      6CE5  15          tento Byt znamená, že následuje velká konstanta
      6CE6  81          konstanta (ve vnitřním kódu)
      6CE7  00                skok na adresu 1581h
      6CE8  00                -/-
      6CE9  00                -/-
      6CEA  00                -/-
      6CEB  E0          TO
      6CEC  15          následuje velká konstanta
      6CED  88          konstanta (ve vnitřním kódu)
      6CEE  7F                skok na adresu 1500h
      6CEF  00                -/-
      6CF0  00                -/-
      6CF1  00                -/-
      6CF2  00          konec řádky
      6CF3  0E          počet Bytů v řádce (low Byte)
      6CF4  00                             (high Byte)
      6CF5  19          25 - číslo řádky (low Byte)
      6CF6  00                           (high Byte)
      6CF7  8F          PRINT
      6CF8  FF          1. Token CHR$
      6CF9  A0          2. Token CHR$
      6CFA  28          (
      6CFB  41          A
      6CFC  29          )
      6CFD  3B          ;
      6CFE  3A          :
      6CFF  8E          NEXT
      6D00  00          konec řádky
      6D01  12          počet Bytů v řádce (low Byte)
      6D02  00                            (high Byte)
      6D03  1E          30 - číslo řádky (low Byte)
      6D04  00                           (high Byte)
      6D05  8F          PRINT
      6D06  22          "
      6D07  49          I
      6D08  B0          n
      6D09  AA          f
      6D0A  B7          o
      6D0B  20          SPACE (mezera)
      6D0C  42          B
      6D0D  A1          a
      6D0E  A4          s
      6D0F  A6          i
      6D10  9F          c
      6D11  22          "
      6D12  00          konec řádky
      6D13  09          počet Bytů v řádce (low Byte)
      6D14  00                             (high Byte)
      6D15  28          40 - číslo řádky (low Byte)
      6D16  00                           (high Byte)
      6D17  80          GOTO
      6D18  0C
      6D19  CF          1. Byt adresa skoku
      6D1A  6B          2. Byt adresa skoku (6BCF)
      6D1B  00          konec řádky
      6D1C  06          počet Bytů v řádce (low Byte)
      6D1D  00                             (high Byte)
      6D1E  3C          60 - číslo řádky (low Byte)
      6D1F  00                           (high Byte)
      6D20  98          END
      6D21  00          konec řádků v BASICu
      6D22  00          konec číslování řádků
      6D23  00          konec číslování

 

Příkazy BASICu, adresy a kódy (TOKEN)
Zde je ještě jednou vypsáno postavení všech povelů BASICu, jejich kódů a odpovídajících adres programů. Některé příkazy jsou sice obsaženy v tabulce kódů, ale vedou k hlášení Syntax Error. Příkazy jsou v seznamu odpovídajícím způsobem označeny. Tyto příkazy jsou převážně pro disketu, a proto z důvodu šetřením místa nejsou definovány pro kazetovou verzi BASICu, která je zde probírána.

      příkaz            TOKEN adresa      poznámka
      --------------------------------------------------------
      GOTO        80    3807
      GOSUB       81    36CD
      RUN         83    1C6E
      RETURN      84    3694
      RESTORE     85    25A8
      RESUME      86    36FB
      LIST        87    4102
      DELETE      89    3456
      RENUM       8A    3471
      AUTO        8B    21D5
      FOR         8D    1CBF
      NEXT        8E    1D6F
      PRINT       8F    1E6A
      INPUT       91    22CA
      IF          93    383F
      DATA        94    3323  viz REM
      READ        95    25E3
      DIM         96    5AEA
      REM         97    3323  viz DATA
      END         98    21B7
      STOP        99    2071
      CONT        9A    209F
      CLS         9B    38CE
      ON          9D    3792
      LET         9E    1959
      NEW         9F    2248
      POKE        A0    33D7
      OFF         A1    20FE  ERROR
      MODE        A2    4DD0
      SKIP        A3    4E2C
      PLOT        A4    3A31
      LINE        A5    4E8C
      RLINE       A6    4EFE
      MOVE        A7    4F05
      RMOVE       A8    4F14
      TRON        A9    227E
      TROFF       AA    2282
      INP         AB    3350
      GET         AD    3389
      PCOLOR      AE    4F1B
      PHOME       AF    4F50
      HSET        B0    4F64
      GPRINT      B1    4F76
      KEY         B2    4321
      AXIS        B3    4FFC
      LOAD        B4    41D1
      SAVE        B5    42A4
      MERGE       B6    41AB
      CONSOLE     B8    39CB
      OUT         BA    3339
      CIRCLE      BB    5050
      TEST        BC    5227
      PAGE        BD    523B
      ERASE       CD    20FE  ERROR
      ERROR       C1    2105
      USR         C3    3305
      BYE         C4    13C2
      DEF         C7    251B
      WOPEN       CE    46A3
      CLOSE       CF    4545
      ROPEN       D0    46DF
      KILL        D9    20FE  ERROR
      TO          E0          FOR program
      STEP        E1               -/-
      THEN        E2          IF program
      USING       E3          PRINT program
      TAB         E6          PRINT -/-
      SPC         E7          PRINT -/-
      OR          E8    20FE  ERROR
      AND         EC    20FE  ERROR
      > <         EE          MATEMAT. program
      < >         EF                -/-
      = <         F0                -/-
      < =         F1                -/-
      = >         F2                -/-
      > =         F3                -/-
      =           F4                -/-
      >           F5                -/-
      <           F6                -/-
      +           F7                -/-
      -           F8                -/-
      /           F8                -/-
      *           FC                -/-
      EXP(^)      FD                -/-
      SET         FE 81  3902
      RESET       FE 82  3935
      COLOR       FE 83  4473
      MUSIC       FE A2  443C
      TEMPO       FE A3  4463
      CURSOR      FE A4  336C
      VERIFY      FE A5  42D1
      CLR         FE A6  224E
      LIMIT       FE A7  340B
      BOOT        FE AE  3A6A  skok na 0000H
      INT         FE 80  6277
      ABS         FF 81  6272
      SIN         FF 82  63C6
      COS         FF 83  63B0
      TAN         FF 84  648D
      LN          FF 85  6736
      EXP         FF 86  6615
      SQR         FF 87  62D0
      RND         FF 88  65D0
      PEEK        FF 89  65B5
      ATN         FF 8A  62EE
      SGN         FF 8B  657A
      LOG         FF 8C  672A
      PIA         FF 8E  65A2
      RAD         FF 8F  659D
      EOF         FF 95  20FE
      JOY         FF 9E  39A3
      STR$        FF A1  5677
      HEX$        FF A2  55EC
      ASC         FF AB  56A0
      LEN         FF AC  56AC
      VAL         FF AD  56B4
      ERN         FF B3  5562
      ERL         FF B4  556A
      SIZE        FF B5  5548
      LEFT$       FF BA  56C7
      RIGHT$      FF BB  56E4
      MID$        FF BC  5702
      TI$         FF C4  573F
      FN          FF C7  5CF7
 

Manipulace s PEEK a POKE
Tato část knihy se zabývá BASIC monitorem MZ-700, který leží v oblasti 0000h až 0FFFh. Jsou zde udány specielní adresy, jejichž změna může sloužit k vytváření efektů. Tato paměťová místa mohou být měněna pomocí POKE nebo USR. Adresy v paměti jsou udány jednak v dekadickém, jednak v hexadecimální tvar.
 

hexa  dekad význam
--------------------------------------------------------

0015  21    Zobrazení řetězce na obrazovce.
            USR(21,A$)  A$ - vypíše od pozice kursoru

0030  48    Zahraje hudební řetězec

003E  62    Vyvolá se pomocí USR. Vytvoří krátký tón.
            USR (62), USR ($003E)

0044  68    USR (68)  zapíná frekvenci tónového generátoru, řiditelná přes 2717 a 2718

0047  71    USR (71) vypíná tónový generátor

004D  77    Plotter  zap/vyp. Když je oblast této paměťové buňky  1 zapíná, 0 vypíná

004E  78    CONSOLE zap/vyp. Když je obsah 1, jsou parametry zadány, když je 0 nejsou

 

0054  84    Tato adresa obsahuje momentální sloupec, ve kterém je kursor.

0055  85    Tato adresa obsahuje momentální řádek, na které se nachází kursor.
 

0056  86    Zde je první argument příkazu Console.

0057  87    Zde je poslední řádek oblasti přetáčení obrazu pro příkaz Console.

0059  89    Pomocí této adresy může být vytvořen autorepeat. Klávesa potom může zůstat stisknuta a nemusí se opětovně mačkat. To se dosáhne pomocí POKE 89,240. Původní nastavení POKE 89,83

005B  91    Tato adresa obsahuje počáteční sloupec oblasti přetáčení obrazu.

005C  92    Tato adresa obsahuje poslední sloupec oblasti přetáčení obrazu.

005D  93    Zde jsou uschovány informace o barvách. POKE 93,39 by změnilo barvu popředí na černou a barvu pozadí na bílou. Jestliže se k 39 přičte ještě 128, pak následuje výpis ve 2. sadě znaků. např. POKE 93,39+128:PRINT"BBG BUCH" 005F 95 Tato buňka obsahuje ASCII hodnotu napo sledy stisknuté klávesy.

0060  96    Tato adresa obsahuje znak kursoru v zobrazovacím kódu. Základní nastavení je 239  POKE 96,73 by změnilo kursor na ?
 

0064  100   AM/PM  (dopol./odpol.) přepínání vnitřních hodin. Jestliže je TI$ méně než 12.00 hod. dopol., je tato buňka 0, jinak 1. POKE 100,1 by nastavilo TI$ z 164312 na 044312.

0124  292   Při POKE 292,1 se při každém stisknuti klávesy CR vytvoří krátký tón. POKE 292,4 písknutí vypíná.

0288  648   V této buňce může být měněna rychlost, kterou se pohybuje kursor při trvalém testování klávesnice. Základní nastavení je 10. Větší než 10 je rychlejší, menší než 10 je pomalejší.

04B3  1203  Jestliže se během provádění programu stiskne klávesa BREAK, provádění programu se na krátký čas přeruší. Tomu se může zamezit POKE 1203,201. Základní nastavení je POKE 1203,216.

0655  1621  Přetáčení obrazu nahoru. USR(1621) má stejný efekt, jako stisknutí klávesy SHIFT+cursor nahoru.

067D  1661  Přetáčení obrazu dolů. Stejně jako nahoru.

07F9  2041  Tím se může měnit vzhled Alfa-módového kursoru. Změna se ale provede až po návratu z grafického módu.

0A32  2610  Obsahuje hodnotu tempa pro muziku. Když je tempo 1, je zde 7, když je tempo 6, je zde 2 atd.


0A39  2617  Byty 2617 a 2618 řídí tónový generátor. Generátor se zap. USR(68) a vyp. USR(71).

0FFC  4092  Zde je kód (File code) souboru, naposledy nahraného programu.

0FFD  4093  Zde začíná jméno naposledy nahraného programu. Délka může mýt maximálně 16 znaků.
 

1010  4112  Na této a následující adrese je zapsaná délka naposledy nahraného programu.
 

RAM monitor
Ještě jednou si zopakujeme nejdůležitější standardní programy, které jsou k dispozici v BASIC-monitoru a následně i v RAM monitoru. Tento monitor je značně kompatibilní s MZ-700 ROM monitorem. Tabulka skoků na začátku až po 0066h je s ROM-monitorem identické.

      adresa obsah      mnemonic          význam
      --------------------------------------------------------

      0000  C3DA00      JP 00DA           Začátek a do 1819h je 0
      0003  C32001      JP 0120           Vstup řádky - nepoužit
      0006  C3FE04      JP 04FE           Nová řádka 2
      0009  C3FA04      JP 04FA           Nová řád., když kursor není na nové řádce
      000C  C33105      JP 0531           Print Space
      000F  C30205      JP 0502           Print Tab 0,10,20,30,....
      0012  C33305      JP 0533           Print Chr. (ASCII)
      0015  C3DA04      JP 04DA           Print zprávy není použit
      0018  C3DA04      JP 04DA           Print zpráva siehe 0051h
      0018  C3F002      JP 02F0           Vstup klávesy není použit
      001E  C3A004      JP 04A0           BREAK
      0021  C33B0A      JP 0A3B           Zápis záhlaví
      0024  C33F0A      JP 0A3F           Zápis programu
      0027  C37A0A      JP 0A7A           Čtení záhlaví
      002A  C37E0A      JP 0A7E           Čtení programu
      002D  C3940A      JP 0A94           Kontrola
      0030  C3E408      JP 08E4           Melody  od 'DE' konec 0Dh
      0033  C35A0D      JP 0D5A           Nastavení času
      0036  0000        NOP NOP           žádný příkaz
      0038  C3E40D      JP 0DE4           program přerušení
      003B  C3E40D      JP 0DA7           čtení času, Akumulátor obsahuje 0=AM, 1=PM DE obsahuje sekundy.
      003E  C3130A      JP 0A13           Beep. Krátký tón
      0041  C3040A      JP 0A04           Tempo. Regostr A (1-7)
      0044  C3B709      JP 09B7           Začátek melodie
      0047  C3D209      JP 09D2           Konec melodie
      004A  C32001      JP 0120           Vstu řádky (0003)
      004D  00                            Plot Flag 1=zap, 2=vyp
      004E  00                            Console Flag 1=zap, 2=vyp
      004F  FF                            Basicflag FF=Basic, 64=Monitor
      0050  00                            Použit při nahrávání CMT
      0051  C3DA04      JP 04DA           Tisk zprávy
      0054  00                            Kursor sloupec
      0055  00                            Kursor řádek
      0056  00                            Console start. řádek
      0057  18                            Console - počet řádek
      0058  C35303      JP 0253           Vstup klávesy, bez opak.
      005B  00                            Console Start Spalte
      005C  27                            Console ANzahl der Spalten
      005D  71                            Barva obrazovky, 71=bílá-modrá
      005E  00
      005F  00                            ASCII kód naposledy stisknuté klávesy

      0060  00                            Zobrazovací kód kursoru
      0061  C36A0E      JP 0E6A           Program Joystick
      0064  00                            AM/PM Flag. 0=AM, 1=PM
      0065  00                            Pro Joystick
      0066  00                             -/-

Dále sou uvedeny, adresy kde začínají jednotlivé standardní programy, které jsou k dispozici v RAM-monitoru MZ-700. Jsou udány vstupní adresy v hexadecimálním tvaru

 

      1443  SAVE
      1469  LOAD
      14A9  VERIFY
      14B0  RETURN
      15BD  MEMORY SET
      1545  GOTO
      15F4  FIND
      154A  DUMP
      165A  TRANSPER
 

Užitecné adresy v S-BASICu.
Následující seznam S-BASIC monitoru a BASICu podává přehled o užitečných adresách a podprogramech a o struktuře a organizaci BASICu. Všechny údaje o adresách jsou v hexadecimálním kódu.


0067 až po 00A6 jsou adresy CTRL (řídící). Ty určují adresy skoků po ?CHR$ (příkazu nebo CTR klávesy společně s jinou klávesou.

00EA  Tento standardní program je vyvolán příkazem PEEK pro přístup na VIDEORAM

00F2  Tento standardní příkaz je zapotřebí na VIDEORAM pomocí příkazu POKE.

04A0  Příkaz testuje, zda byla stisknuta klávesa BREAK, nebo SHIFT+BREAK.

04CD  Zde se převádí ASCII kód do zobrazovacího kódu (Display kód)

0EFC  Tabulka pro přepočítávání z ASCII kódu do zobrazovacího kódu.

0FFC  Na této adrese je uložen kód souboru naposledy nahraného programu.

0FFD  Od této adresy je jméno naposledy nalezeného programu.

100E  Zde je délka naposledy nahraného programu. Na prvním místě je nižší slabika (low Byte) a potom vyšší (high Byte).

1010  Na tomto místě je adresa autostartu. V BASICu je ale bez významu

110F  Vyrovnávací paměť (Buffer). Zde je poslední řádka, která byla vložena klávesnicí.

1132  Odtud jsou povely, kterými jsou obsazeny klávesy funkcí. Tabulka sahá až po 13C1H.

1832  Sem skáče BASIC po nahrátí. Tento program také maže paměť až do konce. Na adrese 182EH je vyšší byt. Jestliže se sem vloží např. A0H, paměť se vymaže jen po A000H. Zde je také text hlášení po startu.

1848  Sem skáčou všechny skoky z ROM-monitoru do BASICu.

1869  Z této adresy vychází READY.

1872  Od této adresy leží standardní program pro vkládání měnění řádků programu BASICu.

18FE  Zde začíná prováděcí program RUN.
 

19B9  Odtud začíná startovací program, který převádí programy MZ-80 K  na MZ-700.

20C7  Zde jsou ERROR tabulky a příslušná čísla.

21A7  Tato adresa obsahuje právě aktuální čísla řádky programu v BASICu.

2287  Od této adresy je standardní program TRON.

242F  Až po adresu 245BH jsou nesmyslné věci.

2AF5  Odtud až po 2CA8H je první tabulka klíčových slov.

2CA9  Odtud až po 30A8H je nevyužita paměť. Sem se mohou zavést vlastní programy.

30A9  Odtud je druhá tabulka klíčových slov.
 

3147  Zde jsou adresy jednotlivých klíčových slov. Jsou vyhledávány analogicky k tabulkám.

38D5  Stack Pointer

38D9  RUN přepínač   1=Stop  0=RUN

38DD  TRON přepínač  1=TRON  0=TROFF


38E6  Tato a následující adresa obsahuje aktuální číslo řádky.

3D86  Odtud je standardní program přepočtu z binárních do dekadických hodnot v paměti.

4795  Odtud je standardní program, který převádí řádky v BASICu na kódy. V tomto způsobu zápisu (kódech), je program též uložen v paměti.

49CD  Působí právě opačně než standardní program na adrese 4795H.

4B72  Zde jsou chybová hlášení ve srozumitelné řeči. Tabulka sahá až po 4D4FH.

528B  Zde se zkoumá správnost matematických programů.

6AB3  Konec programu v BASICu.

6AB5  Ukazatel proměnných

6AB7  Ukazatel zásobníku pro BASIC.

6ABD  Konec paměti, která je k dispozici pro BASIC.

6ABF  Začátek programu v BASICu.
 

Paměť barev a druhá sada znaků.
Při zobrazování znaků a barev mějte vždy na paměti následující! Paměť znaků leží v oblasti D000H - D3E7H. To odpovídá přesně 1000 znakům a odpovídá to 25 řádkům po 40 znacích. V této oblasti jsou uloženy pouze znaky. Příslušné informace o barvě leží přesně o 2048 Bytů výše. Leží tedy v oblasti D800H - DBE7H.

Pozn.: BASIC MZ-700 používá celkem 50 řádků ve kterých lze editovat (SHIFT+nahoru,dolů nebo USR).

Příklad: Jak může být vytvořen znak s barvou. Znak se objeví v levém horním rohu.

  10 POKE 53248, 83:REM Vytvoření znaku
  20 POKE 53248+2048, 64:REM Přebarvení ze zelené na černou

Druhá sada znaků je aktivována vždy, když je v paměti barev více než 128 (80H). Proto musí být k barvě v našem příkladu přičteno 128.

Příklad: Přepnutí celého obsahu obrazovky na druhou sadu znaků a nastavení barvy na zelenou.
 

  FOR X=55296 TO 55295:POKE X,64+128:NEXT

Ale také příkazy PRINT mohou být zobrazeny přímo ve 2. sadě znaků. K tomu slouží místo v paměti 93 (5DH).

Příklad:
  POKE 93,PEEK(93)+128:?"700 Příklad"

Převod programů z MZ-80 K K tomu slouží místo v paměti 93 (5DH).

Příklad:
  POKE 93,PEEK(93)+128:?"700 Příklad"
 

Převod programů z MZ-80 K
S-BASIC má standardní program, který převádí programy z MZ-80 K do MZ-700. Tento program umí překládat pouze kódy. Především příkazy POKE, PEEK a USR by měli být před spouštěním překontrolovány ještě jednou. Všechny POKE mezi 53248 až 54217 sahají do oblasti Videa a nemusí se měnit.

Ostatní POKE většinou přímo ovlivňují BASIC a proto by měly být používány opatrně. Následuje výpis POKE, které by měli být změněny v každém případě. Adresy 4465 a 4466 řídí v MZ-80 K kursor(4465 je sloupec, 4466 je řádka). To může být změněno tím, že se oba argumenty napíší za příkaz CURSOR. 17828 je u MZ-80 K adresa pro trvalé testování kláves. Nová adresa je nyní 89.

Adresy 4513 a 4514 jsou u MZ-80 K určeny pro řízení tónového generátoru. Tyto adresy jsou u MZ-800 (v módu MZ-700) 2617 a 2618. POKE 4464, 1 přeřazuje u MZ-80 K klávesnici na malá písmena. Též může být zadáno PRINT CHR$(5). Přeřazení zpět na velká písmena bylo u MZ-80 K pomocí POKE 4464, 0. Tento příkaz může být proveden pomocí PRINT CHR$(6).

To jsou v podstatě všechny důležité POKE, které se musí změnit. U všech ostatních POKE se musí postupovat s nejvyšší opatrností, protože by mohlo dojít ke smazání BASICu i celého programu. Pro jistotu by měly být všechny neznámé POKE nejprve opatřeny REM, dokud Vám nebude jasný jejich význam.


Adresy jako 10167,10680,10682 a 7125 můžete v každém případě bez náhrady vymazat.
 

Logické operace AND / OR
V mnoha časopisech a výpisech programů se vyskytují příkazy AND a OR. S-BASIC těmito příkazy ale nedisponuje. To by však nemělo být problémem, protože tyto příkazy se dávají snadno nahradit. (Pouze v podmínce, ne v logických operacích)


  znak " * "  se použije pro AND
  Znak " + "  se použije pro OR

Příklad:
  1) místo  IF A=1 AND B=2 THEN
   lze psát IF (A=1) * (B=2) THEN
 

  2) místo  IF A= 1 OR B=2 THEN
   lze psát IF (A=1) + (B=2) TFEN

Je důležité sledovat, aby všechny takto použuté argumenty byly v závorkách
 

Vyloučení činnosti klávesy BREAK a SHIFT+BREAK
Zde bude uvedeno, jak se dá program zajistit proti přerušení nebo zastavení klávesou SHIFT+BREAK. Stisknutí samotné klávesy BREAK nepřeruší běžící program, ale na krátkou dobu ho zastavit.

  POKE 1203, 201 - zastavení zakázané
  POKE 1203, 216 - zastavení povoleno

Při zabránění přerušení pomocí SHIFT+BREAK se musí změnit více paměťových míst.

  POKE 6452, 54,25  přerušení zakázané
  POKE 6452, 113,32 přerušení povoleno

Nyní může být program přerušen příkazem INPUT. Tomu zabráníme pomocí těchto POKE

  POKE 8987, 29,35  přerušení zakázané
  POKE 9056, 98,35
  POKE 8987, 105,32 přerušení dovoleno
  POKE 9056, 105,32
 

Změna barev bez vymazání obrazovky
Normálně v S-BASICu není žádná možnost přiřadit celé obrazovce jinou barvu bez její vymazání. To právě může mýt velký význam pro vytvoření několika efektů. Proto zde ukážeme možnost, která to dovoluje. Může být změněna jak barva pozadí, tak barva popředí. To může být programátorem v programu velice efektně využito.
 

  COLOR,,6,1:USR($072D)

Tímto příkazem se provádí změna barvy. Je ale třeba dát pozor, protože se kursor přesune do levého horního rohu
 

Odvozené funkce
MZ-700 BASIC má množství matematických funkcí, ale mnoho funkcí nemá v sadě příkazů obsaženo. Tyto funkce mohou být velmi užitečné především v matematických programech. Tyto funkce mohou být odvozeny z funkcí, které jsou k dispozici a dají se též psát v MZ-800 BASICu. Proto zde uvádíme sestavu dalších důležitých a užitečných funkcí.

Secans             SEC(X)=1/COS(X)
Cosecans           CSC(X)=1/SIN(X)
Cotangens          COT(X)=1/TAN(X)
Arcussinus         ARCSIN(X)=ATN(X/SQR(-X*X+1))
Arcuscosinus       ARCCOS(X)=ATN(X/SQR(-X*X+1))*PI/2
Arcussecans        ARCSEK(X)=ATN(SQR(X*X-1))+(SGN(X)-1)*PI/2
Arcuscosecans      ARCCSC(X)=ATN(1/SQR(X*X-1))+(SGN(X)-1)*PI/2
Arcuscotangens     ARCCOT(X)=-ATN(X)*PI/2
Hyperbelsinus      SINH(X)=(EXP(X)-EXP(-X))/2
Hyperbelcosinus    COSH(X)=(EXP(X)+EXP(-X))/2
Hyperbeltangens    TANH(X)=-EXP(-X)/(EXP(-X))*2+1
Hyperbelsecasns    SECH(X)=2/(EXP(X)+EXP(-X))
Hyperbelcosecans   CSCH(X)=2/(EXP(X)-EXP(-X))
Hyperbelcotangens  COTH(X)=EXP(-X)/(EXP(X)-EXP(-X))*2+1
Areasinus          ARSINH(X)=LN(X)+SQR(X*X+1))
Areacosinus        ARCOSH(H)=LN(X+SQR(X*X-1))
Areatangens        ARTANH(X)=LN((1+X)/(1-X))/2
Areasecans         ARSECH(X)=LN((SQR(-X*X+1)+1)/X)
Areacosecans       ARCSCH(X)=LN((SGN(X)*SQR(X*X+1)+1)/X)
Areacotangans      ARCOTH(X)=LN((X+1)/(X-1))/2
 

Pořízení bezpečnostní kopie S-BASICu
Doporučuje se pořídit si bezpečnostní kopii S-BASICu a tuto také potom používat k denní potřebě, protože originální kazeta by
mohla být náhodou vymazána nebo přehrána. Dejte ale pozor na to, že je dovoleno udělat pouze jednu kopii a tu jen pro osobní použití

Pro vytvoření této kopie postupujte takto:
 

      - zapnout počítač
      - stisknout klávesu M, tím se dostanete do monitoru
      - vložit J00AD a stisknout CR
      -     MC000  CR
      -     CD     CR
      -     27     CR
      -     00     CR
      -     CD     CR
      -     2A     CR
      -     00     CR
      -     C3     CR
      -     08     CR
      -     11     CR
      - stisknout SHIFT+BREAK
      - vložit originál kazetu a přetočit na začátek
      - vložit JC000 a stisknout CR
      - stisknout PLAY na magnetofonu
      - program je nahraný po objevení "HIT ANY KEY"
      - vyndat originál kazetu
      - vložit prázdnou kazetu
      - stisknout libovolnou klávesu
      - stisknout klávesu RECORD PLAY na magnetofonu
      - čekat asi 7 minut
      - vyndat nahranou kazetu s kopii BASICu
 

Rozšíření sady příkazů S-BASICu
Zde budou ukázána některá rozšíření pro kazetovou verzi S-BASICu. Všechny následující rozšíření nepotřebují žádné další místo v paměti, protože používají prázdnou paměť uvnitř BASICu. Pro vložení standardních programů a rozšíření nejprve nahrajte S-BASIC z kazety do počítače a potom vložte všechny řádky, před kterými je uvedeno číslo řádky. Texty mezi řádky programu jsou pouze pro vysvětlení a slouží jako komentář.

  1) READY s tónem

Následující standardní program vytvoří při každém READY krátký tón. Toto umožňuje, aby po LOAD nebo jiných dlouhých procedurách byl jejich konec vnímán i akusticky.

    100 REM READY TON
    110 POKE 6256,129,48:POKE 12417,175,205,62,0,205,6,0,201

  2) Hudba při ERROR

Při každé chybě se pomocí tohoto programu vytvoří krátký hluboký tón. Tím se chyba neobjeví jen na obrazovce, ale je provázen hlubokým tónem.

    120 REM Hudba při ERROR
    130 POKE 8561,137,48
    140 POKE 12425,205,81,0,229,17,149,48,205,48,0,225,201,45,65,13

  3) Zastavení LIST pomocí SPACE

Tento program umožňuje při listování programu listování zastavit klávesou SPACE, aby jste mohli např. dělat poznámky. Při každém dalším stlačením SPACE se listuje řádka po řádce. Při stisknutí libovolné jiné klávesy probíhá listování dále.

    150 REM Zastavení LIST
    160 POKE 16786,77,36,204,83,2,0:POKE 9293,205,27,0,254,32,201

  4) Zlepšený příkaz TRON

Při tomto zlepšení příkazu TRON se bude číslo právě zpracovávané řádky zobrazeno v levém horním rohu obrazovky, místo na aktuálním pozici kursoru. Toto zlepšuje přehlednost. Příkaz TROFF ruší příkaz TRON.

    170 REM Nový TRON
    180 POKE 8841,42,230,56,205,167,33,33,0,208,6,5,26,205,205,4
    190 POKE 8856,205,242,0,35,19,16,245,225,241,201

  5) Zobrazení ROPEN a WOPEN

U předcházejících modelů MZ-700 bylo při ROPEN nebo WOPEN definována výzva pro PLAY nebo RECORD PLAY. V S-BASICu pracuje tato výzva pouze v přímém způsobu a na v programu. Dá se to však snadno realizovat i v programu. K tomu slouží následující program.

    200 REM PLAY/RECORD PLAY při ROPEN/WOPEN
    210 POKE 18442,205:POKE 18252,175

S tímto rozšířením ale stále ještě není zobrazeno, zda byla data nalezena a nahrána. Následující program vypíše jméno souboru dat před jejich nahráním na obrazovku.


    220 REM ROPEN se zobrazením jména
    230 POKE 18167,205,153,48
    240 POKE 12441,17,11,67,33,252,15,205,200,22,58,252,15,201

  6) Speciální LIST

Tato pozměnění standardního programu LIST způsobí, že po každé řádce programu v BASICu je vynechaná řádka. To usnadňuje přehled především u delších programů. Toto rozšíření platí pro obrazovku i pro tiskárnu.

    250 REM Speciální LIST
    260 POKE 12410,205,249,23,205,249,23,201
    270 REM Zapnuto:POKE 16781,122,48
    280 REM Vypnuto:POKE 16781,249,23
 

  7) Ochrana programů

Chránění programů proti LIST nebo SAVE může být provedeno, jestliže byl program spuštěn pomocí RUN. Proto není možné program 100% chránit.

Přesto vám zde ukážeme,jak může být program chráněn proti různým povelům.

      ochrana             proti           původní stav
      ----------------------------------------------
      POKE 16642,201      LIST            POKE 16642,175
      POKE 17060,201      SAVE            POKE 17060,205
      POKE 26037,201      PEEK            POKE 26037,254
      POKE 5058,201       BYE             POKE 5058,229

Výše uvedené řádky vložíme do počítače. Nyní máme basický program, který by po odstartování způsobil změny. Uživatel by si mě jenom zapamatovat adresy příkazů POKE, které jsou na řádcích 270 a 280, aby mohl zapínat a vypínat speciální LIST. Toto rozšíření by se mělo po vložení do počítače nahrát. Podle potřeby potom může být vždy přehrána. Jestliže byl program jednou odstartován, může být smazán příkazem NEW. Změny zůstanou zachovány až do vypnutí počítače.

 

Domů | Sharp MZ-800 | 8 bit klub Brno | Download | Kniha návštěv | Obchod SCAV | Vyhledání na těchto stránkách | Mapa stránek

 

Tyto stránky byli naposledy aktualizovány dne 08. 02. 2014      Copyright © 05/2006 - Brázda Pavel - Scav - webmaster(c)scav.cz

 

 

Google