<< Вернуться к содержанию





Файл UNIPAS.TXT
===========================================================================


    UniPascal е реализация на езика Pascal на микрокомпютърите от
типа Пълдин 601/601А.
    При реализирането му се използува така наречения смесен метод
- компилация до междинен псевдо код и след това интерпретация на
този код.  Ефекта от избора на този вид реализация е в
намаляването на обема на генерирания псевдо код (от 2 до 5 пъти в
сравнение с 16 битовите компютри от типа на IBM PC), което при
сравнително ограниченото количество памет е особено съществено
предимство.
    По начина си на реализация UniPascal донякъде прилича на
широко разпространения UCSD Pascal, но по възможности далеч
го надхвърля и се приближава до една друга също широко
разпространена реализация на Pascal, но за 16 битови
микрокомшютри, а именно до Turbo Pascal. Нещо повече при
проектирането на езика е взета в предвид общата насоченост на
микрокомютъра Пълдин като по-малък брат на IBM PC и UniPascal има
силна съвместимост с Turbo Pascal - една от най-добрите
реализации на Pascal за IBM PC.
    Ако трябва да направим сравнение между UniPascal и вече
цитираните UCSD Pascal и Turbo Pascal, трябва да кажем че
UniPascal превъзхожда UCSD Pascal по всички параметри и отстъпва
на Turbo Pascal по бързодействие, но не трябва да се забравя, че
той работи на значително по-слаб клас микрокомпютри.
    UniPascal се придържа към ISO стандарта на Pascal, като в
болшинството случаи представлява надмножество на този стандрат.
    В досегашните версии на UniPascal от ISO стандарта не са
реализирани само съвместяемите масиви параметри и предаването на
процедури и функции като параметри.

    От възможностите и особенностите на UniPascal внимание
заслужават следните:
    ¦ два типа условна компилация, позволяващи да се постигне
      почти пълна съвместимост с другите реализации на Pascal;
    ¦ практически пълна съвместимост на файловете с данни
      използувани от UniPascal и тези от реализациите на Pascal и
      от други езици за програмиране за IBM PC;
    ¦ автоматично поддържане на овърлейни процедури и функции;
    ¦ разрешаването на константни изрази в декларациите;
    ¦ 16 и 32 битова целочислена аритметика;
    ¦ 32 битова реална аритметика по IEEE стандарт;
    ¦ поддръжка на стандартния тип string, за обработване на
      символна информация;
    ¦ широк набор стандартни процедури и функции (надстройка на
      ISO стандарта) позволяващи удобна работа на програмиста и
      ускоряване изпълнението на програмата;
    ¦ интерпретатора на междинния код се разпространява на ROM,
      който, поради архитектурата на микрокомпютъра Пълдин, не
      отнема на потребителя нито байт от свободната памет;
    ¦ практически всички системни програми съществуват в cross
      варианти работещи на IBM PC и при желание на потребителя
      могат да бъдат включени в дистрибутивния пакет, което
      позволява разработката на голяма част от програмното
      осигуряване да се извършва на по-мощни компютри;
    ¦ на дистрибутивния диск ще намерите повече от 20 примерни
      програми написани на UniPascal.

    От версия 1.10 нататък са реализирани и следните съществени
възможности, липсващи в предишните версии:
    ¦ разделно модулна компилация, реализирана чрез използуване
      на модули (unit - както е в UCSD и Turbo Pascal);
    ¦ удобна връзка с подпрограми написани на асемблер.

    Освен това в момента се разработват следните помощни програми:
    ¦ оптимизатор на програмите написани на UniPascal, намаляващ
      генерирания код и ускоряващ работата им;
    ¦ програми за статистическо измерване на времето и честотата
      на използуване на процедурите по време на работа на Pascal
      програма, което дава възможност за по-добра оптимаизация на
      алгоритмите от старана на програмиста.







Файл CALLASM.
============================================================================


     Параметрите се предават чрез стека в обратен ред, т.е. последния параметър
е на върха на стека. Големината на параметрите е кратна на дума (2 байта).
Функциите връщат резултата си в стека (една или две думи). Всички типве данни
се представят в Negative Byte Sex (първо младшия после старшия байт), с
изключение на указателите (адресите) те са в нормалния за процесора Positive
Byte Sex (първо старшия после младшия байт).
     NB: На върха на стека се намира return address където трябва да се върне
подпрограмата на асемблер и едва след него са параметрите. За целта трябва да
се спаси този адрес и после да се извадят параметрите (евентуално на излизане
да се напъха резултата на функцията). Възможно е и друго решение: адреса от
вурха на стека се изхвърля с две инструкции INS и после връщатането става чрез
jmp $befe.
    Вид на параметрите:
    1) по стойност
      a) всички параметри с големина до две думи (4 байта) ако не са от тип
         string[?] се предават директно в стека;
      б) за всички останали (string и по-големи от две думи) се предава адрес;
    2) по адрес (VAR)
      а) ако типа е STRING (само STRING без описател за дължина) се предават
         две думи първо в стека е пъхнат адреса на променливата и след него
         (т.е. отгоре му) се намира спецификатора за дължина на фактическия
         параметър. Пример:  procedure bz(var s: string);
         се вика BZ(sss); където var sss: string[77];
         тогава в стека след адреса е напъхана дума в която пише 77.
      б) за другите е ясно (предава се адреса им);
    3) константни (const) аналогично на тези по стойност.

Внимавай с пакетирането.







Файл CFILE.
===============================================================================


-------------------------------------------------------------------------------
---------------------------- Описание на YcodeFile ----------------------------
-------------------------------------------------------------------------------

    Първите няколко байта от всеки YcodeFile са със следния строго фиксиран
формат. Даденото съдържание обикновено се отнася до Пълдинската реализация.

offset   size  съдържание       Описание
------------------------------------------------------------------------------
               ------¦          Всеки YcodeFile ТРЯБВА да съдържа в първите си
$0000  2 bytes Lc0 deL          два байта $c0 $de (code).
               +--+---
$0002  1 byte  L10L             Големина на една дума в битове            ($10)
               +--L
$0003  1 byte  L00L             Byte sex (0 - negative).                  ($00)
               +--+--¦
$0004  2 bytes L01 xxL          Version (Major.Minor) на вида на YcodeFile.
               +--+--L
$0006  2 bytes L00 00L          Unused. обикновено има 0.               ($0000)
               +--+--L
$0008  1 word  L20 00L          Големина на параграф (32 байта) даден в Bsex-
               +--+--L
$000a  1 word  L00 02L          Големина на блок (512 байта) даден в Bsex-
               +--+--L
$000c  1 word  Lxx xxL          Номер на параграф в който е записан
               +--+--L          Module Descriptor на първия модул.
$000e          |  U  |          версия 1.00 на codefile това е unused до края
               |  n  |          на параграфа а за следващите версии > 1.00
  .            |  u  |          се използуват последните 4 или 8 байта
  :            |  s  |          взависимост от версията (ако е > $80 то 8bytes)
               |  e  |
$0017          |  d  |
               +-----+-----¦
$0018  LongWrd L Check Sum L    CheckSum of a file (if MinVer > $80)
               +--+--+--+--L
$001c  LongWrd L serial No L    serial number (Compiler/Linker/Optimizer)
               L--+--+--+---

------------------------------ Module Descriptor ------------------------------
------------------------¦
L module name 8 chars   L       Име на модула. 8 буквено.
+--+--+--+--+--+--+--+---
L Ver L  (word)                 Версия на модула(все още има само 0 обикновено)
+--+--L
LDate L  (2 bytes)              Дата на компилация (на interface частта)
+--+--L
LTime L  (2 bytes)              Време (час, мин ...) на компилация
+--+--L
LNext L  (word)                 Номер на параграф на следващия ModuleDescriptor
+--+--L
LMseg L  (word)                 Номер на параграф на главния сегмент
+--+--L
LLang L  (2 bytes)              Език на който е написан.
+--+--L
LCstrtL  (word)                 Информация за компилатора. Начален блок на
+--+--L                         interface парчето. (Block No)
LCsizeL  (word)                 Информация за компилатора. Дължина на
+--+--L                         interface парчето. (in bytes)
LUsageL  (word)                 Offset of first paragraph in usage list
+--+--L
L     L
+--+--L
L     L
+--+---
LNeL     (byte)                 брой външни сегменти (модули/units/)
+--L
LNiL     (byte)                 брой вътрешни сегменти (сегментни процедури)
L---

Пояснения: Версията, датата и времето на модула се вземат от неговия interface.
Те се използуват при следния случай: Нужен ни е модул X, в такъв случай търсим
такъв (как това е отделен въпрос) и когато намерим модул със същото име
проверяваме версията
  ако версията съвпада
     то и датата и времето трябва да съвпадат иначе не сме намерили това което
     ни трябва и търсим друг удовлетворяващ изискванията.
  ако версиите са различни, но версията на намерения е по-голяма от версията на
     търсения, и ако датата и времето на намерения са по-големи от тези на
     търсения то този модул ни върши работа и си го прибираме.
  във всички останали случай намерения модул не ни върши работа и трябва да
     потърсим друг удовлетворяващ изискванията за съвместимост.

Language:това е една дума в която ако я представим като полубайтове ще получим:

 ------------- Главен номер на езика: 0 - асемблери (native code)
 L                                    1 - Pascal.
 L   --------- Подномер на езика.
 L --+-¦
----T---¦
LX YLx yL
L-+-+-+--

    Номер език $0000 е невалиден.

    Номер $01xx - е запазен за MC6800 native code
          $02xx - е запазен за MCS6502 native code

    Номер $1Xxx - е запазен за Pascal.

    Номер $2Xxx - е запазен за Modula-2.

--------T-------¦
L HiByte LowByteL   Date: заема два байта и описанието е дадено побитово
L+++++++++++++++-
L--T---+-T-+-T---
   L     L   L------ day         (1..31)   (5 bits)
   L     L---------- month       (1..12)   (4 bits)
   L---------------- year - 1980 (0..127)  (7 bits)

--------T-------¦
L HiByte LowByteL     Time: заема два байта и описанието е дадено побитово
L+++++++++++++++-
L--T-+---T-+-T---
   L     L   L------ sec / 2 (0..29)    (5 bits)
   L     L---------- min     (0..59)    (6 bits)
   L---------------- hour    (0..23)    (5 bits)

------------------------------- Usage Paragraph -------------------------------
------------------------¦
L module name 8 chars   L       Име на модула. 8 буквено.
+--+--+--+--+--+--+--+---
L Ver L  (word)                 Версия на модула(все още има само 0 обикновено)
+--+--L
LDate L  (2 bytes)              Дата на компилация (на interface частта)
+--+--L
LTime L  (2 bytes)              Време (час, мин ...) на компилация
+--+--L
LNext L  (word)                 Номер на параграф на следващия UsageParagraph
+--+--L
L     L \
+--+--L  \
L     L   \
+--+--L    \
L     L     \
+--+--L      \
L     L       \
+--+--L        >             unused now
L     L       /
+--+--L      /
L     L     /
+--+--L    /
L     L   /
+--+--L  /
L     L /
L--+---

----------------------------- Segment Descriptor ------------------------------

------------------------¦
L segment name 8 chars  L       Име на сегмента. 8 буквено. Използува се само
+--+--+--+--+--+--+--+---       само за проверка за вярност .
LStartL  (word)                 Start block of a code segment
+--+--L
LSize L  (word)                 Size in bytes of a code segment
+--+--L
LNo   L  (word)                 Segment No (0 for main)
+--+--L
LNext L  (word)                 Next Segment (pragraph No)
+--+--L
L     L
+--+--L
L     L
+--+--L
L     L
+--+--L
L     L
+--+--L
L     L
+--+--L
L     L
+--+--L
L     L
+--+--L
L     L
L--+---

----------------------------- Описание на сегмент -----------------------------

              ---------------------------------------------------------¦
              L-------------------------------------------¦            L
              LL-------------------------¦                L          | L
              LLL                        V                V          | V
-----------------T----------------------T----------------T-----------T--------¦
L Segment Header L Ycode for Procedures L ProcDictionary L ConstPool L RelTbl L
L----------------+----------------------+----------------+-----------+---------
                   ^    ^      ^          L L      L                 | cut this
                   L    L      L----------- L ...  L                 |  after
                   L    L--------------------      L                 relocation
                   L--------------------------------

=== Segment Header Info (32 байта) ===

------------------------¦
L segment name 8 chars  L       Име на сегмента. 8 буквено. Използува се
+--+--+--+--+--+--+--+---       само за проверка за вярност.
L10L     (byte)                 големина на думата в битове (16)
+--L
L00L     (byte)                 byte sex (0 - negative)
+--+--¦
L01.00L  (2 bytes)              Ycode version (major.minor)
+--+--L
LTsizeL  (word)                 Total size (in bytes без тези 32 байта header),
+--+--L                         но + дължината на ConstPool
LCsizeL  (word)                 Const Pool size. (in bytes)
+--+--L
|  .  |                         10 неизползувани (засега) байта
|  :  |
+-----L
LRelctL  (word)                 Pointer to Relocation Tables
+-----L
LPdictL  (word)                 Pointer to ProcDictionary
+--+--L
LCPoolL  (word)                 Pointer to Const Pool
L--+---

Както се вижда от диаграмата местата на ProcDictionary, ConstPool и процедурите
се получават от разните му там указатели. По тази ми ти причина те могат да
бъдат в произволен ред.

=== ProcDictionary ===

----T---T---T     ---¦
LN 0L p1L p2L ...  pnL
L-+-+-+-+-+-+     -+--
 ^    ^   ^        ^
 L    L---+-- ... -+--- offset на съответната процедура от началото на сегмента
 L--------------------- общ брой процедури

=== ConstPool ===
засега представлява една сбирщина от байтове.

=== RelTbl (Relocation table) ===

  Relocation table представлява информация за relocate-ване на асемблерските
процедури (MC6800 Пълдин). Организирацията и е строго специфична за Пълдин.
Това са таблиците генерирани за всеки obj файл залепени една след друга, като
всяка от тях завършва с 0 и започва с отместване от началото на сегмента. Ако
отместването е отрицателно то това е и края на таблиците. От таблицата
генерирана от асемблера се изхвърлят първите два байта т.е. Nitems.

Забележка: Таблиците трябва да са последни защото след relocate се изхвърлят,
           като цялата памет след тях се освобождава.


=== Procedure ===

  --------------------------------------¦
  |    exit code of a procedure         |
->|  exit:                           |
| |    Ycode of a procedure.            |
| |                                     |
L +-----T--------------------------------
L-Lexit L (word) ExitPtr: къде се скача ако се прави exit от тази процедура.
  +--+--L
  LPsizeL (word) ParamSize: колко байта параметри има процедурата.
  +--+--L
  LDsizeL (word) DataSize: колко байта данни има процедурата. (без Params)
  +--+---
  LLxL  (byte) LexLevel: Лексическо Ниво на процедурата.
  +--L   ------------------------------------------------------------------
  LNoL  (byte) ProcNo: Номер на процедурата: трябва да бъде който трябва
  L---                 Използува се само за проверка за правилност
                       Ако е 0 следователно процедурата е асемблерска и
                       там важат други хави. Които са следните:
                       Първия байт (както вече стана ясно) и втория е $00
                       след това е кода на процедурката на Ассемблер.


-------------------------------------------------------------------------------
-------------------------- Описание на SYM файловете --------------------------
-------------------------------------------------------------------------------

               ------------------------------¦
$0000 10 bytes L U  n  i  P  a  s  c  a  l 00L идентификатор
               +--+--+--+--+--+--+--+--+--+---
$000a  2 bytes L01 xxL                         версия на SYM файл организацията
               +--+--+-----¦
$000c  4 bytes L serial No L                   compiler's serial number
               +--+--+--+--+-----------¦
$0010  8 bytes L module name 8 chars   L
               +--+--+--+--+--+--+--+---
$0018  2 bytes L Ver L  (word)
               +--+--L
$001a  2 bytes LDate L  (2 bytes)
               +--+--L
$001c  2 bytes LTime L  (2 bytes)
               +--+--L
$001e  2 bytes LdsizeL  (word)                 size of interfaced variables
               +--+---
$0020  1 byte  L0xL                            x = 0/1 (interface/
               +--L                                     interface only) unit
$0021  1 byte  LnnL                            nn = number of external units
               +--+--------------------¦
       8 bytes L module name 8 chars   L   \
               +--+--+--+--+--+--+--+---   |
       2 bytes L Ver L  (word)              \   Тази информация я има за всеки
               +--+--L                       >       използуван UNIT (модул),
       2 bytes LDate L  (2 bytes)           /   но без unit STANDARD.
               +--+--L                     |
       2 bytes LTime L  (2 bytes)          /
               +--+--L
$0022  2 bytes LCsizeL                         Interfaced const pool size
               +--+--L
              /|     |                         Large constants itself (Cpool)
       Csize < |     |                              size in bytes = Csize
              \+--+---
               |  |                            Forward definitions
               |  |                            for all exported type Idents
               |  |
               +--L
               LFFL                            завършват с $FF
               +--L
               |  |                            Dump of all identifiers
               |  |
               +--L
               LFFL                            завършват с $FF
               +--L
               |  |                            Type definitions
               |  |                            for all exported types
               |  |
               +--+--¦
               L$ffffL                          свършват на $ffff
               L--+---

-------------------------------------------------------------------------------






Файл CONVENTI.
==============================================================================


                   Съглашения при използуването на UniPascal

1. Разпределение на нулевата страница ($0000..$00ff)

  $0000..$007f - reserved for BIOS, UniBIOS & UniDOS
  $0080..$00af - reserved for UniPascal (don't touch)
  $00b0..$00df - work locations for UniPascal (can be used)
  $00e0..$00f0 - Free for use (never used by UniPascal Interpreter)

2. Обработване на специален тип файлове

                section $00aa
IOsize          ds      2       ; $aa - size
IObuff          ds      2       ; $ac - Buffer address
IOfile          ds      2       ; $ae - address of Pascal File variable
                ends







Файл FPCODES.
==============================================================================


                         Описание на FP instructions

OpCodeL Mnemonic L Description                              L   Stack Status
------+----------+------------------------------------------+------------------
00..7fL SLR_0..7fL Short Load Real Constant                 L  { } -> { r }
      L          L r = кода на инструкцията - $40, т.е. товаL
      L          L са реалните константи -64.0 .. +63.0     L
------+----------+------------------------------------------+------------------
 80   L addR     L Add Reals.                   r:= r2 + r1 L {r1, r2} -> { r }
------+----------+------------------------------------------+------------------
 81   L subR     L Subtract reals.              r:= r2 - r1 L {r1, r2} -> { r }
------+----------+------------------------------------------+------------------
 82   L mulR     L Multiply Reals.              r:= r2 * r1 L {r1, r2} -> { r }
------+----------+------------------------------------------+------------------
 83   L divR     L Divide reals.                r:= r2 / r1 L {r1, r2} -> { r }
------+----------+------------------------------------------+------------------
 84   L absR     L Absolute value of real       r:= abs(r1) L { r1 } -> { r }
------+----------+------------------------------------------+------------------
 85   L negR     L Neagte real                     r:= - r1 L { r1 } -> { r }
------+----------+------------------------------------------+------------------
 86   L sqrR     L Square Real                  r:= r1 * r1 L { r1 } -> { r }
------+----------+------------------------------------------+------------------
 87   L sqrt     L Square Root of real         r:= sqrt(r1) L { r1 } -> { r }
------+----------+------------------------------------------+------------------
 88   L sin      L Calculate SIN                r:= sin(r1) L { r1 } -> { r }
------+----------+------------------------------------------+------------------
 89   L cos      L Calculate COS                r:= cos(r1) L { r1 } -> { r }
------+----------+------------------------------------------+------------------
 8a   L exp      L Calculate EXP                r:= exp(r1) L { r1 } -> { r }
------+----------+------------------------------------------+------------------
 8b   L ln       L Calculate LN                  r:= ln(r1) L { r1 } -> { r }
------+----------+------------------------------------------+------------------
 8c   L Atan     L Calculate ArcTan            r:= atan(r1) L { r1 } -> { r }
------+----------+------------------------------------------+------------------
 8d   L intR     L get integer part of real     r:= int(r1) L { r1 } -> { r }
------+----------+------------------------------------------+------------------
 8e   L fracR    L get fraction part of real   r:= frac(r1) L { r1 } -> { r }
------+----------+------------------------------------------+------------------
 8f   L randomR  L generate random real number   r:= random L { } -> { r }
------+----------+------------------------------------------+------------------
 90   L equR     L Compare reals (for = )       b:= r2 = r1 L {r1, r2} -> { b }
------+----------+------------------------------------------+------------------
 91   L equR     L Compare reals (for <> )     b:= r2 <> r1 L {r1, r2} -> { b }
------+----------+------------------------------------------+------------------
 92   L lesR     L Compare reals (for < )       b:= r2 < r1 L {r1, r2} -> { b }
------+----------+------------------------------------------+------------------
 93   L leqR     L Compare reals (for <= )     b:= r2 <= r1 L {r1, r2} -> { b }
------+----------+------------------------------------------+------------------
 94   L grtR     L Compare reals (for > )       b:= r2 > r1 L {r1, r2} -> { b }
------+----------+------------------------------------------+------------------
 95   L geqR     L Compare reals (for >= )     b:= r2 >= r1 L {r1, r2} -> { b }
------+----------+------------------------------------------+------------------
 96   L trunc    L Convert real to LongInt     i:= trunc(r) L { r } -> { li }
------+----------+------------------------------------------+------------------
 97   L round    L Convert real to LongInt     i:= round(r) L { r } -> { li }
------+----------+------------------------------------------+------------------
 98   L i2real   L Integer to real. Convert top of stack    L { i } -> { r }
      L          L integer number to 4 byte IEEE real       L
------+----------+------------------------------------------+------------------
 99   L c2real   L Cardinal to real. Convert top of stack   L { c } -> { r }
      L          L cardinal number to 4 byte IEEE real      L
------+----------+------------------------------------------+------------------
 9a   L l2real   L LongInt to real. Convert top of stack    L { li } -> { r }
      L          L LongInt number to 4 byte IEEE real       L
------+----------+------------------------------------------+------------------
 9b   L LwRcnst wL Load word as Real constant (convert cnst L { } -> { r }
      L          L from integer format to real).      r:= w L
------+----------+------------------------------------------+------------------

                          Таблица на FPcode инструкциите

   г========T========T========T========T========T========T========T========+
   ¦ .0 /.8 ¦ .1 /.9 ¦ .2 /.a ¦ .3 /.b ¦ .4 /.c ¦ .5 /.d ¦ .6 /.e ¦ .7 /.f ¦
г==+========+========+========+========+========+========+========+========+==+
¦80¦  addR  ¦  subR  ¦  mulR  ¦  divR  ¦  absR  ¦  negR  ¦  sqr   ¦  sqrt  ¦87¦
¦==+========+========+========+========+========+========+========+========+==¦
¦88¦  sin   ¦  cos   ¦  exp   ¦  ln    ¦  Atan  ¦  intR  ¦  fracR ¦ randomR¦8f¦
¦==+========+========+========+========+========+========+========+========+==¦
¦90¦  equR  ¦  neqR  ¦  lesR  ¦  leqR  ¦  grtR  ¦  geqR  ¦  trunc ¦  round ¦97¦
¦==+========+========+========+========+========+========+========+========+==¦
¦98¦ i2real ¦ c2real ¦ l2real ¦ LwRcnst¦        ¦        ¦        ¦        ¦9f¦
¦  ¦        ¦        ¦        ¦  word  ¦        ¦        ¦        ¦        ¦  ¦
L==+========+========+========+========+========+========+========+========+==+
   ¦ .0 /.8 ¦ .1 /.9 ¦ .2 /.a ¦ .3 /.b ¦ .4 /.c ¦ .5 /.d ¦ .6 /.e ¦ .7 /.f ¦
   L========¦========¦========¦========¦========¦========¦========¦========+








Файл LYCODES.
==============================================================================


                      Описание на Long Ycode instructions

    При описанието се използуват същите означения както и при Ycode
инструкциите, за повече подробности виж там.

                         Long Ycode instructions

OpCodeL Mnemonic L Description                              L   Stack Status
------+----------+------------------------------------------+------------------
  08  L IOrslt   L Return IOresult                          L  { } -> { w }
------+----------+------------------------------------------+------------------
  09  L SetIOr   L Store <w> in IOresult                    L  { w } -> { }

------+----------+------------------------------------------+------------------
  0d  L SNCI byteL Short Native code info                   L  { [?] } -> { }
      L          L Извикваме с jsr кода който е след това   L
      L          L и който е дълъг <byte> байта.      L
------+----------+------------------------------------------+------------------
  0e  L NCI word L Native code info                         L  { [?] } -> { }
      L          L Извикваме с jsr кода който е след това   L
      L          L и който е дълъг <word> байта.      L
------+----------+------------------------------------------+------------------
  0f  L UsrBpnt  L User Breack Point                        L  { w } -> { }

------+----------+------------------------------------------+------------------
  12  L IdSrch   L Identifier Search  (виж Lexical)         L  { p } -> { w }
------+----------+------------------------------------------+------------------
  13  L Scan byteL Scan for char                            L  { ... } -> { i }
      L          L function Scan(ch: char;                  L
      L          L               const buffer;              L
      L          L               offset: Cardinal;          L
      L          L               Limit: integer): integer;  L
      L          L Търсим <Ch> в buffer започвайки от offsetL
      L          L позиция, и търсейки в Limit позиции,     L
      L          L ако Limit е < 0 търсим назад и връщаме   L
      L          L отрицателна стойност                     L
------+----------+------------------------------------------+------------------
  14  L str2val bL string -> value                          L  { ... } -> { ? }
      L          L Convert packed array of byte to          L
      L          L   Numeric Value                          L
      L          L function Str2Val(const Buff;             L
      L          L                  Ndx, limit: cardinal;   L
      L          L                  var Nchars: Cardinal):  L
      L          L                  (LongInt/Real);         L
      L          L <b>: IHUSxxxxx                           L
      L          L      ^^^^________ allow sign             L
      L          L      |||_________ allow underscores      L
      L          L      ||__________ get hex number (if int)L
      L          L      |___________ int/real convert (0/1) L
------+----------+------------------------------------------+------------------
  15  L val2str bL value -> string                          L  { ... } -> { }
      L          L Convert value to string                  L
      L          L procedure Int2Str (Value: (LWord/LInt);  L
      L          L                    var s: string);       L
      L          L procedure Real2Str(Value: real;          L
      L          L                    w: natural;           L
      L          L                    var s: string);       L
      L          L <b>: negative/positive - real/longint    L
      L          L      0 - integer, 1 - LongWord,          L
      L          L      2 - Word, 3 - Byte                  L
      L          L      $80 - exponential form,             L
      L          L      $81 - fraction form                 L
      L          L                                          L
      L          L незадължителния параметър w се дава само L
      L          L ако е нужно да се превръща от real       L

------+----------+------------------------------------------+------------------
  18  L Qsearch  L Queue Search                             L { ... } -> { b }
      L          L function QueueSearch(Root: pointer;      L
      L          L          LinkOffs,                       L
      L          L          SortOffs: Natural;              L
      L          L          var LastSrch: pointer;          L
      L          L          const SrchFor;                  L
      L          L          Special: word): boolean;        L
      L          L Започвайки от Root търсим в списък като  L
      L          L знаем че LinkOffs е отместване от        L
      L          L началото на този списък на полето в      L
      L          L което е записан указателя към следващия  L
      L          L елемент от списъка, в SortOffs е записаноL
      L          L отместването на полето по което се търси,L
      L          L SrchFor е това което се търси. LastSrch еL
      L          L намереният елемент от списъка или        L
      L          L елемента след които трябва да включим    L
      L          L търсения елемент ако не е намерен.       L
      L          L Special: LSByte -                        L
      L          L   %ABCDEFGH                              L
      L          L   ^****^^^                               L
      L          L   |    |||-> FGH = 100, 010, 000 -       L
      L          L   |          >, <, <> подредба           L
      L          L   ---------> 0/1 Packed/String           L
      L          L MSByte - Size of searched (packed only)  L

------+----------+------------------------------------------+------------------
  1a  L compB    L compare bytes                            L { ... } -> { w }
      L          L function Compare(limit: natural;         L
      L          L          const Src;                      L
      L          L          SRCoffset:  natural;            L
      L          L          const Dest;                     L
      L          L          Destoffset: natural): natural;  L
      L          L Сравняваме Src и Dest и връщаме          L
      L          L къде се различават                       L

------+----------+------------------------------------------+------------------
  20  L Lo_Hi bt L Get Lo/Hi byte/word                      L
      L          L <bt> = $90 (hi word), $b0 (lo word)      L { dw } -> { w }
      L          L <bt> = $08 (hi byte), $18 (lo byte)      L { w } -> { w }
------+----------+------------------------------------------+------------------
  21  L Swap  bt L SwapWord / LongSwap                      L
      L          L <bt> = $90 (longswap)                    L { dw } -> { dw }
      L          L <bt> = $08 (swap word)                   L { w } -> { w }

------+----------+------------------------------------------+------------------
  26  L GetDate  L get date and store in Day, Month, Year   L {^d,^m,^y} -> {}
------+----------+------------------------------------------+------------------
  27  L GetTime  L get time and store in s100, Sec, min,HourL{^s1,^s,^m,^h}->{}

------+----------+------------------------------------------+------------------
  34  L ULcase btL Up/Lo case char/string                   L { ch } -> { ch }
      L          L ако <bt> A.....GH                        L       or
      L          L          ^     ^^-- 0/1 char/string      L { addr } -> { }
      L          L          |     ---- 0/1 ASCII/ASCII + CYRL
      L          L          ---------- 0/1 Lo/UpCase        L
------+----------+------------------------------------------+------------------
  35  L delete   L Delete W chars starting from w position  L {W,w,w0,s} -> {}
      L          L in string s (w0 - unused)                L
------+----------+------------------------------------------+------------------
  36  L insert   L Insert s1 in s2 starting from pos w      L {W,w,s2,s1} -> {}
      L          L max string length (s2) is W              L
------+----------+------------------------------------------+------------------
  37  L POS      L return start position of s1 in s2        L {s2, s1} -> { i }

------+----------+------------------------------------------+------------------
  38  L FillCh   L FillChar(buff, offset, count, ch)        L{w, w, w, p} -> {}
      L          L Запълваме count пъти с ch започвайки от  L
      L          L адрес buff + offset.                     L
------+----------+------------------------------------------+------------------
  39  L FillW    L FillWord(buff, count, word)              L{ w, w, p } -> { }
      L          L Запълваме count пъти с word започвайки отL
      L          L адрес buff, но този път пълним думи.     L
------+----------+------------------------------------------+------------------
  3a  L MoveB    L Move(src, Soffs, dest, Sdest, sz)        L{w,w,p,w,p} -> {}
------+----------+------------------------------------------+------------------
  3b  L MoveW    L MoveWords(src, dest, size)               L{ w,Sp,Dp } -> { }

------+----------+------------------------------------------+------------------
  3e  L dupW     L duplicate  word                          L{ w } -> { w, w }

------+----------+------------------------------------------+------------------
  40  L AbsI     L ABSolute value of Integer    i:= abs(i1) L  { i1 } -> { i }
------+----------+------------------------------------------+------------------
  41  L AbsL     L ABSolute value of LongInt    l:= abs(l1) L  { l1 } -> { l }
------+----------+------------------------------------------+------------------
  42  L NegI     L NEGative value of Integer        i:= -i1 L  { i1 } -> { i }
------+----------+------------------------------------------+------------------
  43  L NegL     L NEGative value of LongInt        l:= -l1 L  { l1 } -> { l }
------+----------+------------------------------------------+------------------
  44  L SqrI     L SQUare integer                i1:= i * i L  { i } -> { i1 }
------+----------+------------------------------------------+------------------
  45  L SqrC     L SQUare cardinal               c1:= c * c L  { c } -> { c1 }
------+----------+------------------------------------------+------------------
  46  L SqrL     L SQUare Long Integer           l1:= l * l L  { l } -> { l1 }
------+----------+------------------------------------------+------------------
  47  L Random btL Randon/Randomize  <bt> = xy (two nybbles)L  { X } -> { Y }
      L          L В стека X е с големина x бйата, а Y - y. L
      L          L има пет възможни случая bt = (xy):       L
      L          L $00 - randomize                          L
      L          L $20 - initialize with word               L
      L          L $40 - initialize with longword           L
      L          L $02 - return random cardinal number      L
      L          L $22 - return random cardinal number < TOSL
      L          L $40 - това е нещо което вече не работи   L

------+----------+------------------------------------------+------------------
  58  L GetWrds  L GET WoRDS from heap                      L  { w } -> { p }
      L          L Allocate memory with size <w> words and  L
      L          L return start address                     L
------+----------+------------------------------------------+------------------
  59  LFreeWrds  L FREE WoRDS from heap                     L  { w, p } -> { }
      L          L Free memory starting from address p and  L
      L          L with size (in words) = w.                L
------+----------+------------------------------------------+------------------
  5a  L Mark     L MARK heap state                          L  { } -> { p }
      L          L Return heap state                        L
------+----------+------------------------------------------+------------------
  5b  L Release  L RELEASE marked heap                      L  { p } -> { }
------+----------+------------------------------------------+------------------
  5c  L getW_d   L GET WoRDS from data stack                L  { w } -> { p }
      L          L Allocate memory with size <w> words and  L
      L          L return start address (but not on heap)   L
------+----------+------------------------------------------+------------------
  5d  LfreeW_d   L FREE WoRDS from data stack               L  { w, p } -> { }
      L          L Free memory starting from address p and  L
      L          L with size (in words) = w. (not heap)     L
------+----------+------------------------------------------+------------------
  5e  L MaxAvl   L return size of largest free contigiuous  L  { } -> { w }
      L          L block of AVaiLable MEMory in words       L
------+----------+------------------------------------------+------------------
  5f  L MemAvl   L return size of AVaiLable MEMory in words L  { } -> { w }
      L          L i.e. sum of all free blocks in heap      L
------+----------+------------------------------------------+------------------
  60  L Return   L RETURN from procedure                    L  { [?] } -> { }
      L          L В стека е възможно да е останала някаква L
      L          L боза и тя трябва да се изхвърли.         L
------+----------+------------------------------------------+------------------
  61  L Return1  L RETURN from function with one word value L {w, [?]} -> { w }
      L          L В стека (под return value) е възможно да L
      L          L е останала някаква боза и тя трябва да сеL
      L          L изхвърли.                                L
------+----------+------------------------------------------+------------------
  62  L Return2  L RETURN from function with dbl word value L {dw, [?]} -> {dw}
      L          L В стека (под return value) е възможно да L
      L          L е останала някаква боза и тя трябва да сеL
      L          L изхвърли.                                L

------+----------+------------------------------------------+------------------
  67  L XitFrom  L eXIT FROM procedure No = bt2 from        L
      L  bt1, bt2L segment No = bt1                         L
------+----------+------------------------------------------+------------------
  68  L SegInit bL INITialize SEGment number <b>.     L  { [w] } -> { }
      L          L В стека има една дума само при b = $ff,  L
      L          L т.е. това е случая на Init Standard unit L
      L          L и тази дума означава default in/out filesL
------+----------+------------------------------------------+------------------
  69  LSegFinit bL FINIT SEGment number <b>.                  L  { } -> { }
------+----------+------------------------------------------+------------------
  6a  LChkSeg  btL force run time error if seg <bt> is in   L  { } -> { }
      L          L initialize                               L

------+----------+------------------------------------------+------------------
  6c  LSegLoad btL Load resident segment (seg no in stack)  L  { w } -> { }
------+----------+------------------------------------------+------------------
  6d  LSegFree btL Free resident segment (seg no in stack)  L  { w } -> { }
------+----------+------------------------------------------+------------------
  6e  L Halt     L Terminate program execution              L  { w } -> { }
      L          L Край на изпълнението на програмата, като L
      L          L думата от стека е exit code. Всъщност се L
      L          L прави exit(MainProgram).                 L
------+----------+------------------------------------------+------------------
  6f  L IReturn  L RETURN from Initialize                   L  { [?] } -> { }
      L          Lако се намираме в инициализация на сегментL
      L          Lсе прави return а иначе не.               L
------+----------+------------------------------------------+------------------
  70  LLFTjump...L Long For To jump (big, Rword)            L  { w } -> { }
      L          L Ако локалната променлива с адрес big е   L
      L          L равна на върха на стека, не се прави нищоL
      L          L а ако не е равна то тя се увеличава и се L
      L          L изпълнява long jump.                     L
------+----------+------------------------------------------+------------------
  71  LSFTjump...L Short For To jump (big, rel-)            L  { w } -> { }
      L          L Ако локалната променлива с адрес big е   L
      L          L равна на върха на стека, не се прави нищоL
      L          L а ако не е равна то тя се увеличава и се L
      L          L изпълнява short jump.                    L
------+----------+------------------------------------------+------------------
  72  LLFDjump...L Long For Downto jump (big, Rword)        L  { w } -> { }
      L          L Ако локалната променлива с адрес big е   L
      L          L равна на върха на стека, не се прави нищоL
      L          L а ако не е равна то тя се намалява и се  L
      L          L изпълнява long jump.                     L
------+----------+------------------------------------------+------------------
  73  LSFDjump...L Short For Downto jump (big, Rword)       L  { w } -> { }
      L          L Ако локалната променлива с адрес big е   L
      L          L равна на върха на стека, не се прави нищоL
      L          L а ако не е равна то тя се намалява и се  L
      L          L изпълнява short jump.                    L
------+----------+------------------------------------------+------------------
74,75 L CjumpT...L Case jump by address table               L  { w } -> { }
      L          L CjumpT min,max,ElseLab,array[0..max-min] L
      L          L                               of Address;L
      L          L Хващаме думата от върха на стека и       L
      L          L сравняваме с min и max параметрите на    L
      L          L инструкцията, ако е между тях то вадим   L
      L          L min, умножаваме по две и получаваме      L
      L          L offset в таблицата jump-ваме по посоченияL
      L          L Address който е даден относно началото наL
      L          L ElseLab.                                 L

------+----------+------------------------------------------+------------------
  77  L Cjump ...L Case jump by value-address table         L  { w } -> { }
      L          L Cjump big, ElseLab, array[1..big] of     L
      L          L                       (Value, Address);  L
      L          L Хващаме думата от върха на стека и       L
      L          L сравняваме с Value парчетата от таблицатаL
      L          L и ако не дай боже съвпадне то jump-ваме  L
      L          L по сътоветния Address който е даден      L
      L          L относно началото на ElseLab.             L

------+----------+------------------------------------------+------------------
  7f  LInitFor...L INITialize FOR loop (big, byte, (rw/r+)) L{w2,w1} ->{}/{w2}
      L          L На върха на стека има две думи които са  L
      L          L пресметнатите изрази от for ?:= w1 to w2 L
      L          L параметъра на инструкцията byte: 0000xxyzL
      L          L xx - 11 - integer, 10 - cardinal for loopL
      L          L      01 longint (unimplemented),00 unusedL
      L          L  y - 0/1 initialize to/downto loop       L
      L          L  z - 0/1 третия параметър е rw/r+        L
------+----------+------------------------------------------+------------------

                       Таблица на Long Ycode инструкциите

   г========T========T========T========T========T========T========T========+
   ¦ .0 /.8 ¦ .1 /.9 ¦ .2 /.a ¦ .3 /.b ¦ .4 /.c ¦ .5 /.d ¦ .6 /.e ¦ .7 /.f ¦
г==+========+========+========+========+========+========+========+========+==+
¦00¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦07¦
¦==+========+========+========+========+========+========+========+========+==¦
¦08¦ IOrslt ¦ SetIOr ¦        ¦        ¦        ¦  SNCI  ¦  NCI   ¦ UsrBpnt¦0f¦
¦  ¦        ¦        ¦        ¦        ¦        ¦  byte  ¦  word  ¦        ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦10¦        ¦        ¦ IdSrch ¦ Scan   ¦ str2val¦ val2str¦        ¦        ¦17¦
¦  ¦        ¦        ¦        ¦ byte   ¦  byte  ¦  byte  ¦        ¦        ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦18¦ Qsearch¦        ¦ compB  ¦        ¦        ¦        ¦        ¦        ¦1f¦
¦  ¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦20¦ Lo_Hi  ¦ Swap   ¦        ¦        ¦        ¦        ¦ GetDate¦ GetTime¦27¦
¦  ¦ byte   ¦ byte   ¦        ¦        ¦        ¦        ¦        ¦        ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦28¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦2f¦
¦==+========+========+========+========+========+========+========+========+==¦
¦30¦        ¦        ¦        ¦        ¦ ULcase ¦ delete ¦ insert ¦  pos   ¦37¦
¦  ¦        ¦        ¦        ¦        ¦  byte  ¦        ¦        ¦        ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦38¦ FillCh ¦  FillW ¦ MoveB  ¦ MoveW  ¦        ¦        ¦ dupW   ¦        ¦3f¦
¦==+========+========+========+========+========+========+========+========+==¦
¦40¦  AbsI  ¦  AbsL  ¦  NegI  ¦  NegL  ¦  SqrI  ¦  SqrC  ¦  SqrL  ¦ Random ¦47¦
¦  ¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦  byte  ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦48¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦4f¦
¦==+========+========+========+========+========+========+========+========+==¦
¦50¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦57¦
¦==+========+========+========+========+========+========+========+========+==¦
¦58¦ GetWrds¦FreeWrds¦  Mark  ¦ Release¦ getW_d ¦ freeW_d¦ MaxAvl ¦ MemAvl ¦5f¦
¦==+========+========+========+========+========+========+========+========+==¦
¦60¦ Return ¦ Return1¦ Return2¦        ¦        ¦        ¦        ¦ XitFrom¦67¦
¦  ¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦ bt, bt ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦68¦ SegInit¦SegFinit¦ ChkSeg ¦        ¦ SegLoad¦ SegFree¦  Halt  ¦ Ireturn¦6f¦
¦  ¦  byte  ¦  byte  ¦ byte   ¦        ¦        ¦        ¦        ¦        ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦70¦ LFTjump¦ SFTjump¦ LFDjump¦ SFDjump¦ CjumpT ¦ CjumpT ¦        ¦ Cjump  ¦77¦
¦  ¦ bg, rw ¦ bg, r- ¦ bg, rw ¦ bg, r- ¦  ...   ¦  ...   ¦        ¦  ...   ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦78¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦InitFor ¦7f¦
¦  ¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦bg,bt,??¦  ¦
L==+========+========+========+========+========+========+========+========+==+
   ¦ .0 /.8 ¦ .1 /.9 ¦ .2 /.a ¦ .3 /.b ¦ .4 /.c ¦ .5 /.d ¦ .6 /.e ¦ .7 /.f ¦
   L========¦========¦========¦========¦========¦========¦========¦========+








Файл OPCODES.
==============================================================================


                         Описание на Ycode instructions

При описанието се използуват следните означения:
    { x, y, z } състояние на стека. На върха на стека е x под него y и т.н.
    { ... } -> { ... } стека преди и след изпълнението на инструкцията
                       означението {} означава, че инструкцията не очаква
                       нищо в стека (той може и да е празен), или че
                       инструкцията не връща нищо в стека. Във всички случай
                       се предполага че инструкцията вади каквото има в стека и
                       после връща каквото се очаква от нея.

Елементите в стека се означават с букви като се използуват следните означения:

    w   - word.         (Negative Byte Sex)
    dw  - double word.  (Negative Byte Sex)

    b   - boolean.      Това е дума която ако е 0 значи имаме false инак true.
    i   - integer.      Това е дума (word), но със знак.
    c   - cardinal.     Това е 16 битово число без знак (word).
    li  - long integer. Това е двойна дума, но със знак.
    p   - pointer.      Това е адрес. (Positive Byte Sex заради MC6800)
    r   - real.         Това е 4 байтово реално число в IEEE стандард
    s   - set.          Това е множество с дескриптор за дължина.

Параметрите на инструкциите се означават с:
    byte  (bt) - byte parameter
    big   (bg) - big parameter
    word  (w)  - word (Bsex -)
    dw         - double word (Bsex -)
    rel+  (r+) - forward relative
    rel-  (r-) - backword relative
    Rword (rw) - relative word
    prefix     - prfeix instruction

Забележка: Всъщност Byte Sex-а (разположението на старши - младши байт) зависи
           изцяло от компютъра. Тук за пълнота е описано положението при
           Пълдин реализацията.

                               Ycode instructions

OpCodeL Mnemonic L Description                              L   Stack Status
------+----------+------------------------------------------+------------------
00..0fL SLDC_x   L Short LoaD Constant <x>                  L   {} -> { w }
      L          L Зарежда собствения си код в стека.       L
------+----------+------------------------------------------+------------------
10..1fL SLDL_x   L Short LoaD Local word <x>                L   {} -> { w }
      L          L Зарежда локална дума с номер x в стека.  L
------+----------+------------------------------------------+------------------
20..2fL SLDG_x   L Short LoaD Global word <x>               L   {} -> { w }
      L          L Зарежда глобална дума с номер x в стека. L
------+----------+------------------------------------------+------------------
30..37L SCXP_x btL Short Call eXternal Procedure No <bt>    L {params}-> {rslt}
      L          L Активиране на процедура с номер <bt>     L
      L          L намираща се в сегмент <x>. В стека са    L
      L          L параметрите й. След завършване на нейнотоL
      L          L изпълнение в стека остава резултата.     L
------+----------+------------------------------------------+------------------
38..3fL SIND_x   L Short load INDirect word with offset <x>.L   { p } -> { w }
      L          L Зарежда в стека дума която се намира на  L
      L          L адрес: p + 2*x (x е offset в думи)       L
------+----------+------------------------------------------+------------------
  40  L ADDw     L ADD Words.                   w:= w2 + w1 L {w1, w2} -> { w }
------+----------+------------------------------------------+------------------
  41  L SUBw     L SUBtract Words.              w:= w2 - w1 L {w1, w2} -> { w }
------+----------+------------------------------------------+------------------
  42  L ANDw     L bitwize AND Words.         w:= w2 and w1 L {w1, w2} -> { w }
------+----------+------------------------------------------+------------------
  43  L ORw      L bitwize OR Words.           w:= w2 or w1 L {w1, w2} -> { w }
------+----------+------------------------------------------+------------------
  44  L XORw     L bitwize XOR Words.         w:= w2 xor w1 L {w1, w2} -> { w }
------+----------+------------------------------------------+------------------
  45  L MULi     L MILtiply Integers.           i:= i2 * i1 L {i1, i2} -> { i }
------+----------+------------------------------------------+------------------
  46  L DIVi     L DIVide Integers.           i:= i2 div i1 L {i1, i2} -> { i }
------+----------+------------------------------------------+------------------
  47  L MODi     L MODulo Integers.           i:= i2 mod i1 L {i1, i2} -> { i }
------+----------+------------------------------------------+------------------
  48  L          L                                          L
------+----------+------------------------------------------+------------------
  49  L          L                                          L
------+----------+------------------------------------------+------------------
  4a  L ItoL     L convert Integer TO Long integer          L { i } -> { li }
------+----------+------------------------------------------+------------------
  4b  L WtoD     L convert Word TO Double Word              L { w } -> { dw }
------+----------+------------------------------------------+------------------
  4c  L DtoW     L convert Double word TO Word flush MSword L { dw } -> { w }
------+----------+------------------------------------------+------------------
  4d  L MULc     L MILtiply Cardinals.          c:= c2 * c1 L {c1, c2} -> { c }
------+----------+------------------------------------------+------------------
  4e  L DIVc     L DIVide Cardinals.          c:= c2 div c1 L {c1, c2} -> { c }
------+----------+------------------------------------------+------------------
  4f  L MODc     L MODulo Cardinals.          c:= c2 mod c1 L {c1, c2} -> { c }
------+----------+------------------------------------------+------------------
  50  L ADDd     L ADD Double words.         dw:= dw2 + dw1 L {dw1, dw2}-> {dw}
------+----------+------------------------------------------+------------------
  51  L SUBd     L SUBtract Double words.    dw:= dw2 - dw1 L {dw1, dw2}-> {dw}
------+----------+------------------------------------------+------------------
  52  L ANDd     L bitwize AND Double words dw:= dw2 and dw1L {dw1, dw2}-> {dw}
------+----------+------------------------------------------+------------------
  53  L ORd      L bitwize OR Double words. dw:= dw2 or dw1 L {dw1, dw2}-> {dw}
------+----------+------------------------------------------+------------------
  54  L XORd     L bitwize XOR Double words dw:= dw2 xor dw1L {dw1, dw2}-> {dw}
------+----------+------------------------------------------+------------------
  55  L MULl     L MILtiply Long integers.   li:= li2 * li1 L {li1, li2}-> {li}
------+----------+------------------------------------------+------------------
  56  L DIVl     L DIVide Long integers.   li:= li2 div li1 L {li1, li2}-> {li}
------+----------+------------------------------------------+------------------
  57  L MODl     L MODulo Long integers.   li:= li2 mod li1 L {li1, li2}-> {li}
------+----------+------------------------------------------+------------------
  58  L CNP byte L Call iNternal Procedure No <byte>          L{params} -> {rslt}
      L          L Активиране на процедура с номер <byte>   L
      L          L намираща се в същия сегмент. В стека са  L
      L          L параметрите й. След завършване на нейнотоL
      L          L изпълнение в стека остава резултата.     L
------+----------+------------------------------------------+------------------
  59  L CXP b1,b2L Call eXternal Procedure No <b2> SegNo<b1>L{params} -> {rslt}
      L          L Активиране на процедура с номер <b2> от  L
      L          L сегмент с номер <b1>. В стека са парамет-L
      L          L рите й. След завършване на нейното       L
      L          L изпълнение в стека остава резултата.     L
------+----------+------------------------------------------+------------------
  5a  L CGP byte L Call Global Procedure No <byte>            L{params} -> {rslt}
      L          L Активиране на процедура с номер <byte>   L
      L          L намираща се в Глобалния сегмент. В стека L
      L          L са параметрите й. След завършване на     L
      L          L изпълнението й в стека остава резултата. L
------+----------+------------------------------------------+------------------
  5b  L          L                                          L
------+----------+------------------------------------------+------------------
  5c  L          L                                          L
------+----------+------------------------------------------+------------------
  5d  L FP prefixL FloatingPoint instructions prefix.       L { ? } -> { ? }
      L          L Всички инструкция за FP аритметиката     L
      L          L започват с така.                         L
------+----------+------------------------------------------+------------------
  5e  L StdIO    L STanDard I/O proc/funcs prefix           L
------+----------+------------------------------------------+------------------
  5f  L LYC      L Long Ycode instructions prefix           L
------+----------+------------------------------------------+------------------
  60  L EQUw     L EQUal Words                  b:= w1 = w2 L {w2,w1} -> { b }
------+----------+------------------------------------------+------------------
  61  L NEQw     L Not EQual Words             b:= w1 <> w2 L {w2,w1} -> { b }
------+----------+------------------------------------------+------------------
  62  L LESi     L LESs than Integers           b:= i1 < i2 L {i2,i1} -> { b }
------+----------+------------------------------------------+------------------
  63  L LEQi     L Less than or EQual Integers b:= i1 <= i2 L {i2,i1} -> { b }
------+----------+------------------------------------------+------------------
  64  L LESc     L LESs than Cardinals          b:= c1 < c2 L {c2,c1} -> { b }
------+----------+------------------------------------------+------------------
  65  L LEQc     L Less than or EQual Cardinals b:= c1 <= c2L {c2,c1} -> { b }
------+----------+------------------------------------------+------------------
  66  L EQUptr   L EQUal PoinTeRs               b:= p1 = p2 L {p2,p1} -> { b }
------+----------+------------------------------------------+------------------
  67  L NEQptr   L Not EQual PoinTeRs          b:= p1 <> p2 L {p2,p1} -> { b }
------+----------+------------------------------------------+------------------
  68  L EQUd     L EQUal Double words         b:= dw1 = dw2 L {dw2,dw1} -> {b}
------+----------+------------------------------------------+------------------
  69  L NEQd     L Not EQual Double words    b:= dw1 <> dw2 L {dw2,dw1} -> {b}
------+----------+------------------------------------------+------------------
  6a  L LESl     L LESs than LongInts         b:= li1 < li2 L {li2,li1} -> {b}
------+----------+------------------------------------------+------------------
  6b  L LEQl     L Less than or EQual LongInts b:= li1<=li2 L {li2,li1} -> {b}
------+----------+------------------------------------------+------------------
  6c  L          L                                          L
------+----------+------------------------------------------+------------------
  6d  L          L                                          L
------+----------+------------------------------------------+------------------
  6e  L NOP      L No OPeration (do nothing)                L { } -> { }
------+----------+------------------------------------------+------------------
  6f  L BNOT     L Boolean NOT                  b2:= not b1 L { b1 } -> { b2 }
------+----------+------------------------------------------+------------------
  70  L Ljump rw L Long unconditional JUMP                  L { } -> { }
------+----------+------------------------------------------+------------------
  71  L SFjump r+L Short Forward unconditional JUMP         L { } -> { }
------+----------+------------------------------------------+------------------
  72  L SBjump r+L Short Backword unconditional JUMP        L { } -> { }
------+----------+------------------------------------------+------------------
  73  L LFjump rwL Long False JUMP                          L { b } -> { }
------+----------+------------------------------------------+------------------
  74  LSFFjump r+L Short False Forward JUMP                 L { b } -> { }
------+----------+------------------------------------------+------------------
  75  LSFBjump r+L Short False Backword JUMP                L { b } -> { }
------+----------+------------------------------------------+------------------
  76  L LOjump rwL Long Or else JUMP                        L { b } -> { }  или
      L          L Ако на върха на стека има TRUE се прави  L { b } -> { b }
      L          L преход и стека остава същия, а ако има   L
      L          L FALSE не се прави преход, но от стека се L
      L          L вади това FALSE. Прехода е дълъг т.е. па-L
      L          L раметъра е дума (relative)               L
------+----------+------------------------------------------+------------------
  77  L SOjump r+L Short Or else JUMP                       L { b } -> { }  или
      L          L Положениeтo е аналогично не LOjump, но   L { b } -> { b }
      L          L прехода е къс преход напред (short rel)  L
      L          L и при това е само напред.                L
------+----------+------------------------------------------+------------------
  78  L          L                                          L
------+----------+------------------------------------------+------------------
  79  L          L                                          L
------+----------+------------------------------------------+------------------
  7a  L          L                                          L
------+----------+------------------------------------------+------------------
  7b  L LTjump rwL Long True JUMP                           L { b } -> { }
------+----------+------------------------------------------+------------------
  7c  LSTFjump r+L Short True Forward JUMP                  L { b } -> { }
------+----------+------------------------------------------+------------------
  7d  LSTBjump r+L Short True Backword JUMP                 L { b } -> { }
------+----------+------------------------------------------+------------------
  7е  L LAjump rwL Long And then JUMP                       L { b } -> { }  или
      L          L Ако на върха на стека има FALSE се прави L { b } -> { b }
      L          L преход и стека остава същия, а ако има   L
      L          L TRUE не се прави преход, но от стека се  L
      L          L вади това TRUE. Прехода е дълъг т.е. па- L
      L          L раметъра е дума (relative)               L
------+----------+------------------------------------------+------------------
  7f  L SAjump r+L Short And then JUMP                      L { b } -> { }  или
      L          L Положениeтo е аналогично не LAjump, но   L { b } -> { b }
      L          L прехода е къс преход напред (short rel)  L
      L          L и при това е само напред.                L
------+----------+------------------------------------------+------------------
  80  L LDCB b   L LoaD Constant Byte                       L { } -> { w }
      L          L Зареждане константата <b> като 16 битова L
      L          L дума в стека (старши байт $00).          L
------+----------+------------------------------------------+------------------
  81  L LDCNB b  L LoaD Constant negative Byte              L { } -> { w }
      L          L Зареждане константата <b> като 16 битова L
      L          L дума в стека със старши байт $ff.        L
------+----------+------------------------------------------+------------------
  82  L LDCW  w  L LoaD Constant Word                       L { } -> { w }
      L          L Зареждане константата <w> като дума 16bitL
------+----------+------------------------------------------+------------------
  83  L LDCDW dw L LoaD Constant Double Word                L { } -> { dw }
------+----------+------------------------------------------+------------------
  84  L LDCWD w  L LoaD Constant Word as Double word        L { } -> { dw }
      L          L Зареждане константата <w> като 32 битова L
      L          L двойна дума в стека (старша част $0000)  L
------+----------+------------------------------------------+------------------
  85  L LDCBD b  L LoaD Constant Byte as Double word        L { } -> { dw }
      L          L Зареждане константата <b> като 32 битова L
      L          L двойна дума в стека (старша част $000000)L
------+----------+------------------------------------------+------------------
  86  L LDCNBD b L LoaD Constant negative Byte as Dbl word  L { } -> { dw }
      L          L Зареждане константата <b> като 32 битова L
      L          L двойна дума в стека (старша част $ffffff)L
------+----------+------------------------------------------+------------------
  87  L LDCN     L LoaD Constant Nil                        L { } -> { p }
      L          L Зареждане на константата Nil.            L
------+----------+------------------------------------------+------------------
  88  L LDB      L LoaD Byte                                L { w, p } -> { w }
      L          L Зареждане на байт намиращ се на адрес    L
      L          L addr = p + w, като 16 битова дума.       L
      L          L Баита е число без знак (0..255)          L
------+----------+------------------------------------------+------------------
  89  L STB      L STore Byte                               L {w1,w2,p} -> { }
      L          L Записваме байта от върха на стека <w1>   L
      L          L (представен като 16 битова дума) по адресL
      L          L addr = p + w.                            L
------+----------+------------------------------------------+------------------
  8a  L LDSB     L LoaD Signed Byte                         L { w, p } -> { w }
      L          L Зареждане на байт намиращ се на адрес    L
      L          L addr = p + w, като 16 битова дума.       L
      L          L Баита е число със знак (-128..127)       L
------+----------+------------------------------------------+------------------
  8b  L          L                                          L
------+----------+------------------------------------------+------------------
  8c  L          L                                          L
------+----------+------------------------------------------+------------------
  8d  L LDCA w   L LoaD Constant Address                    L { } -> { p }
      L          L Зареждане адреса на константа от Cpool наL
      L          L текущия сегмент.                         L
------+----------+------------------------------------------+------------------
  8е  L LDGCA w  L LoaD Global Constant Address             L { } -> { p }
      L          L Зареждане адреса на константа от Cpool наL
      L          L глобалния сегмент.                       L
------+----------+------------------------------------------+------------------
  8f  LLDXCA bt,wL LoaD eXternal Constant Address           L { } -> { p }
      L          L Зареждане адреса на константа от Cpool наL
      L          L сегмент номер <bt>.                      L
------+----------+------------------------------------------+------------------
  90  L LAL big  L Load address of Local (offset = big)     L  { } -> { p }
------+----------+------------------------------------------+------------------
  91  L LAG big  L Load address of Global (offset = big)    L  { } -> { p }
------+----------+------------------------------------------+------------------
  92  L LAI bt,bgL Load address of Intermediate(bt lexs out)L  { } -> { p }
------+----------+------------------------------------------+------------------
  93  L LAX bt,bgL Load address of eXternal (from seg bt)   L  { } -> { p }
------+----------+------------------------------------------+------------------
94..97L SLAX_x bgL Short Load address of eXternal           L  { } -> { p }
------+----------+------------------------------------------+------------------
  98  L LDL big  L Load Local word (offset = big)           L  { } -> { w }
------+----------+------------------------------------------+------------------
  99  L LDG big  L Load Global word (offset = big)          L  { } -> { w }
------+----------+------------------------------------------+------------------
  9a  L LDI bt,bgL Load Intermediate word (bt lexs out)     L  { } -> { w }
------+----------+------------------------------------------+------------------
  9b  L LDX bt,bgL Load eXternal word                       L  { } -> { w }
------+----------+------------------------------------------+------------------
9b..9fL SLDX_x bgL Short Load eXternal word                 L  { } -> { w }
------+----------+------------------------------------------+------------------
  a0  L LDDL big L Load Double Local word (offset = big)    L  { } -> { dw }
------+----------+------------------------------------------+------------------
  a1  L LDDG big L Load Double Global word (offset = big)   L  { } -> { dw }
------+----------+------------------------------------------+------------------
  a2  LLDDI bt,bgL Load Dbl Intermediate word (bt lexs out) L  { } -> { dw }
------+----------+------------------------------------------+------------------
  a3  LLDDX bt,bgL Load Dbl eXternal word                   L  { } -> { dw }
------+----------+------------------------------------------+------------------
a4..a7LSLDDX_x bgL Short Load Dbl eXternal word             L  { } -> { dw }
------+----------+------------------------------------------+------------------
  a8  L STL big  L Store Local word (offset = big)          L  { w } -> { }
------+----------+------------------------------------------+------------------
  a9  L STG big  L Store Global word (offset = big)         L  { w } -> { }
------+----------+------------------------------------------+------------------
  aa  L STI bt,bgL Store Intermediate word (bt lexs out)    L  { w } -> { }
------+----------+------------------------------------------+------------------
  ab  L STX bt,bgL Store eXternal word                      L  { w } -> { }
------+----------+------------------------------------------+------------------
ac..afL SSTX_x bgL Short Store eXternal word                L  { w } -> { }
------+----------+------------------------------------------+------------------
  b0  L STDL big L Store Local Double word (offset = big)   L  { dw } -> { }
------+----------+------------------------------------------+------------------
  b1  L STDG big L Store Global Double word (offset = big)  L  { dw } -> { }
------+----------+------------------------------------------+------------------
  b2  LSTDI bt,bgL Store Intermediate Dbl word (bt lexs out)L  { dw } -> { }
------+----------+------------------------------------------+------------------
  b3  LSTDX bt,bgL Store Dbl eXternal word                  L  { dw } -> { }
------+----------+------------------------------------------+------------------
b4..b7LSSTDX_x bgL Short Store Dbl eXternal word            L  { dw } -> { }
------+----------+------------------------------------------+------------------
  b8  L SLAI1 bg L Load address of Parent variable          L  { } -> { p }
------+----------+------------------------------------------+------------------
  b9  L SLAI2 bg L Load address of GrandParent variable     L  { } -> { p }
------+----------+------------------------------------------+------------------
  ba  L ID_wrd btL Increment/Decrement WoRD                 L
      L          L Ако старшия бит на дадения байт е 0      L
      L          L се прави increment иначе decrement       L
      L          L Ако останалите 7 бита от байта са 0 то =>L { w, p } -> { }
      L          L  се увеличава/намалява думата чиито адресL
      L          L  е даден от p със стойността на думата w L
      L          L иначе                                  =>L { p } -> { }
      L          L  стойността на думата с адрес p се       L
      L          L  увеличава/намалява с байта без първия   L
      L          L  бит (0..127)                            L
------+----------+------------------------------------------+------------------
  bb  L ID_dbl btL Increment/Decrement DouBLe word          L
      L          L Ако старшия бит на дадения байт е 0      L
      L          L се прави increment иначе decrement       L
      L          L Ако останалите 7 бита от байта са 0 то =>L { dw, p } -> { }
      L          L  се увеличава/намалява двойната думата   L
      L          L  чиито адрес е даден от p със стойността L
      L          L  на двойната дума dw                     L
      L          L иначе                                  =>L { p } -> { }
      L          L  стойността на двойната дума с адрес p   L
      L          L  се увеличава/намалява с байта без       L
      L          L  първия бит (0..127)                     L
------+----------+------------------------------------------+------------------
  bc  L ID_bt  btL Increment/Decrement byte                 L
      L          L Ако старшия бит на дадения байт е 0      L
      L          L се прави increment иначе decrement       L
      L          L Ако останалите 7 бита от байта са 0 то =>L { w, p } -> { }
      L          L  се увеличава/намалява байта             L
      L          L  чиито адрес е даден от p със стойността L
      L          L  на думата w                             L
      L          L иначе                                  =>L { p } -> { }
      L          L  стойността на байта с адрес p           L
      L          L  се увеличава/намалява с байта без       L
      L          L  първия бит (0..127)                     L
------+----------+------------------------------------------+------------------
  bd  L LoChk    L Check Lo bound                           L {l, li} -> { li }
      L          L Check that l <= li and leave li in stack L
      L          L if OK, force run time error if not       L
------+----------+------------------------------------------+------------------
  be  L HiChk    L Check Hi bound                           L {l, li} -> { li }
      L          L Check that li <= l and leave li in stack L
      L          L if OK, force run time error if not       L
------+----------+------------------------------------------+------------------
  bf  L IOchk    L CHecK for I/O error (force runtime error)L  {} -> {}
------+----------+------------------------------------------+------------------
  c0  L SLDI1 bg L Load word from Parent proc               L  { } -> { w }
------+----------+------------------------------------------+------------------
  c1  L SLDI2 bg L Load word from GrandParent proc          L  { } -> { w }
------+----------+------------------------------------------+------------------
  c2  L IXFA byteL Index Foraml array                       L{p,w...w,p} -> {p}
      L          L Stack: { at, xN, ... x2, x1, a } -> { A }L
      L          L индексиране на формален масив това значи:L
      L          L x1,x2, ...,xN са индексите в масив които L
      L          L са на брой <byte>, at е адрес на таблица L
      L          L от вида: m1,s1,m2,s2,... където m1,m2,...L
      L          L са долните граници в масива, а s1,s2, ...L
      L          L са големините на подмасивите за съответ- L
      L          L ната размерност. <a> е началния адрес на L
      L          L масива. <A> е получения адрес.сметката е:L
      L          L A = a+[(m1-x1)*s1+...+(mN-xN)*sN]; като  L
      L          L това което е в счупени скоби трябва      L
      L          L да се умножи по 2 ако става въпрос за    L
      L          L думови неща, щото m1,m2,... са в думи    L
------+----------+------------------------------------------+------------------
  c3  L IXFPA bt L Index Foraml Packed array                L{p,w...w,p} -> {p}
      L          L виж IXFA                                 L
------+----------+------------------------------------------+------------------
  c4  L SIXA1    L Short IndeX Array element size 1 word    L { i, p } -> { P }
      L          L P:= p + i * 2 * 1, i - index in array    L
      L          L                    p - array address     L
------+----------+------------------------------------------+------------------
  c5  L SIXA2    L Short IndeX Array element size 2 words   L { i, p } -> { P }
      L          L P:= p + i * 2 * 2, i - index in array    L
      L          L                    p - array address     L
------+----------+------------------------------------------+------------------
  c6  L IXA  big L IndeX Array with element size big words  L { i, p } -> { P }
      L          L P:= p + i * 2 * big, i - index in array  L
      L          L                      p - array address   L
------+----------+------------------------------------------+------------------
  c7  L SIXA4    L Short IndeX Array element size 4 words   L { i, p } -> { P }
      L          L P:= p + i * 2 * 4, i - index in array    L
      L          L                    p - array address     L
------+----------+------------------------------------------+------------------
  c8  L SLDDI1 bgL Load Double word from Parent proc        L  { } -> { dw }
------+----------+------------------------------------------+------------------
  c9  L SLDDI2 bgL Load Double word from GrandParent proc   L  { } -> { dw }
------+----------+------------------------------------------+------------------
  ca  L          L                                          L
------+----------+------------------------------------------+------------------
  cb  L          L                                          L
------+----------+------------------------------------------+------------------
  cc  L INDD big L Load Indirect Double word                L { p } -> { dw }
      L          L load double word pointed at by p+<big>*2 L
------+----------+------------------------------------------+------------------
  cd  L SINDD0   L Short Load indirect double word          L { p } -> { dw }
      L          L load double word pointed at by p         L
------+----------+------------------------------------------+------------------
  ce  L INCFP bg L Increment Field Pointer                  L { p } -> { p1 }
      L          L calculate addr of field with <big> offs  L
      L          L p1:= p + big * 2                         L
------+----------+------------------------------------------+------------------
  cf  L IND  big L load INDirect word with offset <big>.    L     { p } -> { w }
      L          L Зарежда в стека дума която се намира на  L
      L          L адрес: p + 2*big (big е offset в думи)   L
------+----------+------------------------------------------+------------------
  d0  L SSTI1 bg L Store word in Parent proc                L  { w } -> { }
------+----------+------------------------------------------+------------------
  d1  L SSTI2 bg L Store word in GrandParent proc           L  { w } -> { }
------+----------+------------------------------------------+------------------
  d2  L          L                                          L
------+----------+------------------------------------------+------------------
  d3  L          L                                          L
------+----------+------------------------------------------+------------------
  d4  L          L                                          L
------+----------+------------------------------------------+------------------
  d5  L          L                                          L
------+----------+------------------------------------------+------------------
  d6  L          L                                          L
------+----------+------------------------------------------+------------------
  d7  L pckAddr  L Convert packed pointer to pointer        L { w, p } -> { w }
------+----------+------------------------------------------+------------------
  d8  L SSTDI1 bgL Stroe Double word in Parent proc         L  { dw } -> { }
------+----------+------------------------------------------+------------------
  d9  L SSTDI2 bgL Store Double word in GrandParent proc    L  { dw } -> { }
------+----------+------------------------------------------+------------------
  da  L MOV  big L Transfer a source block of <big> words,  L{Psrc, Pdest} ->{}
      L          L pointed to by <Psrc>, to a similar       L
      L          L destination block pointed to by <Pdest>. L
------+----------+------------------------------------------+------------------
  db  L MOVp big L Transfer a source block of <big> bytes,  L{Osrc,Psrc,
      L          L pointed to by <Psrc> + <Osrc>, to a      L Odest,Pdest} ->{}
      L          L similar destination block pointed to by  L
      L          L <Pdest> + <Odest>.                       L
------+----------+------------------------------------------+------------------
  dc  L SSTO     L Short STOre indirect word         p^:= w L  { w, p } -> { }
------+----------+------------------------------------------+------------------
  dd  L SSTOD    L Short Store Indirect Double word         L { dw, p } -> { }
------+----------+------------------------------------------+------------------
  de  L STO  big L STOre indirect word        p^[big*2]:= w L  { w, p } -> { }
------+----------+------------------------------------------+------------------
  df  L STOD big L STOre indirect Double word (with offset) L { dw, p } -> { }
------+----------+------------------------------------------+------------------
  e0  L sas  byteL String assign                            L { Sp, Dp } -> {}
------+----------+------------------------------------------+------------------
  e1  L sasf     L String Assign formal                     L {Sp,sz,Dp} -> {}
------+----------+------------------------------------------+------------------
  e2  L ch2str   L Convert Char to string                   L { w } -> { p }
------+----------+------------------------------------------+------------------
  e3  L eqstr    L Equal strings                b:= s2 = s1 L {s1, s2} -> { b }
------+----------+------------------------------------------+------------------
  e4  L neqstr   L Not Equal strings           b:= s2 <> s1 L {s1, s2} -> { b }
------+----------+------------------------------------------+------------------
  e5  L lesstr   L Less than strings            b:= s2 < s1 L {s1, s2} -> { b }
------+----------+------------------------------------------+------------------
  e6  L leqstr   L Less than or equal strings  b:= s2 <= s1 L {s1, s2} -> { b }
------+----------+------------------------------------------+------------------
  e7  L NULLSTR  L loae aeeress of NULL STRing (i.e. '')    L  { } -> { p }
------+----------+------------------------------------------+------------------
  e8  L SLEN     L return String LENgth (TOS is aeer(s))    L  { p } -> { w }
------+----------+------------------------------------------+------------------
  e9  L          L                                          L
------+----------+------------------------------------------+------------------
  ea  L          L                                          L
------+----------+------------------------------------------+------------------
  eb  L          L                                          L
------+----------+------------------------------------------+------------------
  ec  L          L                                          L
------+----------+------------------------------------------+------------------
  ed  L          L                                          L
------+----------+------------------------------------------+------------------
  ee  L          L                                          L
------+----------+------------------------------------------+------------------
  ef  LpackCMP btL Compare packed array of char (size in bg)L
      L        bgL в <bt> пише вида на сравнението и на     L
      L          L адресите в стека, ако bt < 0 то ===>     L{Do,Dp,So,Sp}->{b}
      L          L   в стека има pack pointers (src, dest)  L
      L          L иначе в стека има обикновени ptr         L {Dp, Sp} -> {b}
------+----------+------------------------------------------+------------------
  f0  L LCset    L Load Constant SET                        L  { p } -> { s }
      L          L На върха на стека е адрес на константно  L
      L          L м-во, основната разлика с LdSet инстр.   L
      L          L е че в константното мн-во влиза и дълж.  L
------+----------+------------------------------------------+------------------
  f1  L Adjust btL Adjust set to occuy N bytes              L { s } -> { s' }
------+----------+------------------------------------------+------------------
  f2  L SRS      L Build Subrange Set          s:= [i2..i1] L {i1, i2} -> { s }
------+----------+------------------------------------------+------------------
  f3  L SGS      L Build Singleton Set              s:= [i] L  { i } -> { s }
------+----------+------------------------------------------+------------------
  f4  L SetUni   L Set Union                    s:= s2 + s1 L {s1, s2} -> { s }
------+----------+------------------------------------------+------------------
  f5  L SetInt   L Set Intersection             s:= s2 * s1 L {s1, s2} -> { s }
------+----------+------------------------------------------+------------------
  f6  L SetDiff  L Set Difference               s:= s2 - s1 L {s1, s2} -> { s }
------+----------+------------------------------------------+------------------
  f7  L IN  byte L word/long IN set                         L { s, w } -> { b }
      L          L Ако параметъра на инструкцията <byte> е сL{ s, dw } -> { b }
      L          L вдигнат първи бит - значи имаме LongInt. L { p, w } -> { b }
      L          L Ако <byte> and $7f е <> 0 значи на върха L{ p, dw } -> { b }
      L          L на стека е адреса на мн-во и това е size,L
      L          L иначе мн-вото е на върха на стека.       L
------+----------+------------------------------------------+------------------
  f8  L InExcl btL INclude/EXCLude word to/from set         L  { w, p } -> { }
      L          L Ако параметъра на инструкцията <bt> е с  L
      L          L вдигнат първи бит - Exclude. Останалите 7L
      L          L бита са дължина на множеството в байтове.L
------+----------+------------------------------------------+------------------
  f9  L StoSet btL STOre SET (<bt> is set's size)    p^:= s L  { s, p } -> { }
------+----------+------------------------------------------+------------------
  fa  L LdSet bt L LoaD SET with size <bt>                    L  { p } -> { s }
      L          L На върха на стека е адрес на м-во, основ-L
      L          L ната разлика с LCSet инструкцията е че   L
      L          L дължината се дава от инструкцията.       L
------+----------+------------------------------------------+------------------
  fb  L EqSet    L Equal Sets                   b:= s2 = s1 L {s1, s2} -> { b }
------+----------+------------------------------------------+------------------
  fc  L NeqSet   L Not Equal Sets              b:= s2 <> s1 L {s1, s2} -> { b }
------+----------+------------------------------------------+------------------
  fd  L LeqSet   L Subset (less than or = )    b:= s2 <= s1 L {s1, s2} -> { b }
------+----------+------------------------------------------+------------------
  fe  L GeqSet   L Superset(greater than or =) b:= s2 >= s1 L {s1, s2} -> { b }
------+----------+------------------------------------------+------------------
  ff  L EmptySet L push EMPTY SET onto stack                L  { } -> { [] }
------+----------+------------------------------------------+------------------

                          Таблица на Ycode инструкциите

   г========T========T========T========T========T========T========T========+
   ¦ .0 /.8 ¦ .1 /.9 ¦ .2 /.a ¦ .3 /.b ¦ .4 /.c ¦ .5 /.d ¦ .6 /.e ¦ .7 /.f ¦
г==+========¦========¦========¦========¦========¦========¦========¦========+==+
¦00¦ SLDC_0 L SLDC_1 L SLDC_2 L SLDC_3 L SLDC_4 L SLDC_5 L SLDC_6 L SLDC_7 ¦07¦
¦==¦--------+--------+--------+--------+--------+--------+--------+--------¦==¦
¦08¦ SLDC_8 L SLDC_9 L SLDC_a L SLDC_b L SLDC_c L SLDC_d L SLDC_e L SLDC_f ¦0f¦
¦==+=======================================================================+==¦
¦10¦ SLDL_0 L SLDL_1 L SLDL_2 L SLDL_3 L SLDL_4 L SLDL_5 L SLDL_6 L SLDL_7 ¦17¦
¦==¦--------+--------+--------+--------+--------+--------+--------+--------¦==¦
¦18¦ SLDL_8 L SLDL_9 L SLDL_a L SLDL_b L SLDL_c L SLDL_d L SLDL_e L SLDL_f ¦1f¦
¦==+=======================================================================+==¦
¦20¦ SLDG_0 L SLDG_1 L SLDG_2 L SLDG_3 L SLDG_4 L SLDG_5 L SLDG_6 L SLDG_7 ¦27¦
¦==¦--------+--------+--------+--------+--------+--------+--------+--------¦==¦
¦28¦ SLDG_8 L SLDG_9 L SLDG_a L SLDG_b L SLDG_c L SLDG_d L SLDG_e L SLDG_f ¦2f¦
¦==+=======================================================================+==¦
¦30¦ SCXP_0 L SCXP_1 L SCXP_2 L SCXP_3 L SCXP_4 L SCXP_5 L SCXP_6 L SCXP_7 ¦37¦
¦  ¦  byte  L  byte  L  byte  L  byte  L  byte  L  byte  L  byte  L  byte  ¦37¦
¦==+=======================================================================+==¦
¦38¦ SIND_0 L SIND_1 L SIND_2 L SIND_3 L SIND_4 L SIND_5 L SIND_6 L SIND_7 ¦3f¦
¦==+========T========T========T========T========T========T========T========+==¦
¦40¦ ADDw   ¦ SUBw   ¦ ANDw   ¦ ORw    ¦ XORw   ¦ MULi   ¦ DIVi   ¦ MODi   ¦47¦
¦==+========+========+========+========+========+========+========+========+==¦
¦48¦        ¦        ¦ ItoL   ¦ WtoD   ¦ DtoW   ¦ MULc   ¦ DIVc   ¦ MODc   ¦4f¦
¦==+========+========+========+========+========+========+========+========+==¦
¦50¦ ADDd   ¦ SUBd   ¦ ANDd   ¦ ORd    ¦ XORd   ¦ MULl   ¦ DIVl   ¦ MODl   ¦57¦
¦==+========+========+========+========+========+========+========+========+==¦
¦58¦ CNP    ¦ CXP    ¦ CGP    ¦        ¦        ¦   FP   ¦ StdIO  ¦   LYC  ¦5f¦
¦  ¦ byte   ¦ bt,bt  ¦ byte   ¦        ¦        ¦ prefix ¦ prefix ¦ prefix ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦60¦ EQUw   ¦ NEQw   ¦ LESi   ¦ LEQi   ¦ LESc   ¦ LEQc   ¦ EQUptr ¦ NEQptr ¦67¦
¦==+========+========+========+========+========+========+========+========+==¦
¦68¦ EQUd   ¦ NEQd   ¦ LESl   ¦ LEQl   ¦        ¦        ¦ NOP    ¦  bnot  ¦6f¦
¦==+========+========+========+========+========+========+========+========+==¦
¦70¦ Ljump  ¦ SFjump ¦ SBjump ¦ LFjump ¦ SFFjump¦ SFBjump¦ LOjump ¦ SOjump ¦77¦
¦  ¦ Rword  ¦  rel+  ¦  rel-  ¦ Rword  ¦  rel+  ¦  rel-  ¦ Rword  ¦  rel+  ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦78¦        ¦        ¦        ¦ LTjump ¦ STFjump¦ STBjump¦ LAjump ¦ SAjump ¦7f¦
¦  ¦        ¦        ¦        ¦ Rword  ¦  rel+  ¦  rel-  ¦ Rword  ¦  rel+  ¦  ¦
L==+========+========+========+========+========+========+========+========+==+
   ¦ .0 /.8 ¦ .1 /.9 ¦ .2 /.a ¦ .3 /.b ¦ .4 /.c ¦ .5 /.d ¦ .6 /.e ¦ .7 /.f ¦
   L========¦========¦========¦========¦========¦========¦========¦========+

   г========T========T========T========T========T========T========T========+
   ¦ .0 /.8 ¦ .1 /.9 ¦ .2 /.a ¦ .3 /.b ¦ .4 /.c ¦ .5 /.d ¦ .6 /.e ¦ .7 /.f ¦
г==+========+========+========+========+========+========+========+========+==+
¦80¦  ldcb  ¦  ldcNb ¦  ldcw  ¦  ldcdw ¦  ldcwD ¦  ldcbd ¦ ldcNbd ¦  ldcn  ¦87¦
¦  ¦  byte  ¦  byte  ¦  word  ¦dbl word¦  word  ¦  byte  ¦  byte  ¦        ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦88¦  ldb   ¦  stb   ¦  ldsb  ¦        ¦        ¦ LDCA   ¦ LDGCA  ¦ LDXCA  ¦8f¦
¦  ¦        ¦        ¦        ¦        ¦        ¦ word   ¦ word   ¦  bt,w  ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦90¦  lal   ¦  lag   ¦  lai   ¦  lax   ¦ slax_1 ¦ slax_2 ¦ slax_3 ¦ slax_4 ¦97¦
¦  ¦  big   ¦  big   ¦byte,big¦byte,big¦  big   ¦  big   ¦  big   ¦  big   ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦98¦  ldl   ¦  ldg   ¦  ldi   ¦  ldx   ¦ sldx_1 ¦ sldx_2 ¦ sldx_3 ¦ sldx_4 ¦9f¦
¦  ¦  big   ¦  big   ¦byte,big¦byte,big¦  big   ¦  big   ¦  big   ¦  big   ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦a0¦  lddl  ¦  lddg  ¦  lddi  ¦  lddx  ¦ slddx_1¦ slddx_2¦ slddx_3¦ slddx_4¦a7¦
¦  ¦  big   ¦  big   ¦byte,big¦byte,big¦  big   ¦  big   ¦  big   ¦  big   ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦a8¦  stl   ¦  stg   ¦  sti   ¦  stx   ¦ sstx_1 ¦ sstx_2 ¦ sstx_3 ¦ sstx_4 ¦af¦
¦  ¦  big   ¦  big   ¦byte,big¦byte,big¦  big   ¦  big   ¦  big   ¦  big   ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦b0¦  stdl  ¦  stdg  ¦  stdi  ¦  stdx  ¦ sstdx_1¦ sstdx_2¦ sstdx_3¦ sstdx_4¦b7¦
¦  ¦  big   ¦  big   ¦byte,big¦byte,big¦  big   ¦  big   ¦  big   ¦  big   ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦b8¦  slai1 ¦  slai2 ¦ ID_wrd ¦ ID_dbl ¦ ID_bt  ¦ LOchk  ¦ HIchk  ¦  IOchk ¦bf¦
¦  ¦  big   ¦  big   ¦  byte  ¦  byte  ¦  byte  ¦        ¦        ¦        ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦c0¦  sldi1 ¦  sldi2 ¦  ixfa  ¦ ixfpa  ¦  sixa1 ¦  sixa2 ¦  ixa   ¦  sixa4 ¦c7¦
¦  ¦  big   ¦  big   ¦  byte  ¦  byte  ¦        ¦        ¦  big   ¦        ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦c8¦ slddi1 ¦ slddi2 ¦        ¦        ¦  indd  ¦ sindd0 ¦ incfp  ¦  ind   ¦cf¦
¦  ¦  big   ¦  big   ¦        ¦        ¦  big   ¦        ¦  big   ¦  big   ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦d0¦  ssti1 ¦  ssti2 ¦        ¦        ¦        ¦        ¦        ¦ pckAddr¦d7¦
¦  ¦  big   ¦  big   ¦        ¦        ¦        ¦        ¦        ¦        ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦d8¦ sstdi1 ¦ sstdi2 ¦  mov   ¦ movp   ¦  ssto  ¦  sstod ¦  sto   ¦  stod  ¦df¦
¦  ¦  big   ¦  big   ¦  big   ¦  big   ¦        ¦        ¦  big   ¦  big   ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦e0¦  sas   ¦  sasf  ¦ ch2str ¦  eqStr ¦ neqStr ¦ lesStr ¦ leqStr ¦ nullStr¦e7¦
¦  ¦  byte  ¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦e8¦  slen  ¦        ¦        ¦        ¦        ¦        ¦        ¦ PackCmp¦ef¦
¦  ¦        ¦        ¦        ¦        ¦        ¦        ¦        ¦ bt,bg  ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦f0¦ LCset  ¦ Adjust ¦  srs   ¦  sgs   ¦ setUni ¦ setInt ¦ setDif ¦   IN   ¦f7¦
¦  ¦        ¦  byte  ¦        ¦        ¦        ¦        ¦        ¦  byte  ¦  ¦
¦==+========+========+========+========+========+========+========+========+==¦
¦f8¦ InExcl ¦ StoSET ¦  LdSet ¦ EqSet  ¦ NeqSet ¦ LeqSet ¦ GeqSet ¦EmptySet¦ff¦
¦  ¦  byte  ¦  byte  ¦  byte  ¦        ¦        ¦        ¦        ¦        ¦  ¦
L==+========+========+========+========+========+========+========+========+==+
   ¦ .0 /.8 ¦ .1 /.9 ¦ .2 /.a ¦ .3 /.b ¦ .4 /.c ¦ .5 /.d ¦ .6 /.e ¦ .7 /.f ¦
   L========¦========¦========¦========¦========¦========¦========¦========+








Файл STDPROC.
=============================================================================


                        Описание на Standard Proc/Funcs

-------------------------------------------------------------------------------
{ $02 } function RdInt: integer;

        Stack: { } -> { i }

-------------------------------------------------------------------------------
{ $03 } function RdCard: cardinal;

        Stack: { } -> { c }

-------------------------------------------------------------------------------
{ $04 } function RdLong: longint;

        Stack: { } -> { li }

-------------------------------------------------------------------------------
{ $05 } procedure WrLwrd(L: LongWord; Width: integer);
        begin write(L: Width); end;

        Stack: { Width, L } -> { }

-------------------------------------------------------------------------------
{ $06 } function RdReal: real;

        Stack: { } -> { r }

-------------------------------------------------------------------------------
{ $08 } function RdChar: char;

        Stack: { } -> { ch }

-------------------------------------------------------------------------------
{ $09 } procedure RdStr(var s: string);

        Stack: { sz, ^s } -> {  }

-------------------------------------------------------------------------------
{ $0a } function EOLN: boolean;

        Stack: { } -> { b }

-------------------------------------------------------------------------------
{ $0b } procedure RdLn;

        Stack: { } -> { }

-------------------------------------------------------------------------------
{ $0c } procedure WrInt(I: Integer; Width: integer);
        begin write(I: Width); end;

        Stack: { Width, I } -> { }

-------------------------------------------------------------------------------
{ $0d } procedure WrCard(C: Cardinal; Width: integer);
        begin write(C: Width); end;

        Stack: { Width, C } -> { }

-------------------------------------------------------------------------------
{ $0e } procedure WrLong(L: LongInt; Width: integer);
        begin write(L: Width); end;

        Stack: { Width, L } -> { }

-------------------------------------------------------------------------------
{ $0f } procedure WrWord(w: word; Width: integer; ndigits: word {= 2/4});

        Stack: { ndigits, Width, w } -> { }

-------------------------------------------------------------------------------
{ $10 } procedure WrReal(r: real; width, fraction: integer);

        Stack: { fraction, width, r } -> { }

-------------------------------------------------------------------------------
{ $12 } procedure WrChr(ch: char; Width: integer);
        begin write(ch: Width); end;

        Stack: { Width, ch } -> { }

-------------------------------------------------------------------------------
{ $13 } procedure WrStr(const s: string; Width: integer);
        begin write(s: Width); end;

        Stack: { Width, addr(s) } -> { }

-------------------------------------------------------------------------------
{ $14 } procedure WrPack(const Buff: packed array [0..Size-1] of char;
                 Width, Size: integer);
        begin write(Buff: Width); end;

        Stack: { Size, Width, addr(Buff) } -> { }

-------------------------------------------------------------------------------
{ $15 } procedure WrLine;
        begin writeln; end;

        Stack: { } -> { }

-------------------------------------------------------------------------------
{ $16 } function fRdInt(var f): integer;

        Stack: { f } -> { i }

-------------------------------------------------------------------------------
{ $17 } function RdCard(var f): cardinal;

        Stack: { f } -> { c }

-------------------------------------------------------------------------------
{ $18 } function RdLong(var f): longint;

        Stack: { f } -> { li }

-------------------------------------------------------------------------------
{ $19 } procedure fWrLwrd(var f; L: LongWord; Width: integer);
        begin write(f, L: Width); end;

        Stack: { Width, L, ^f } -> { ^f }

-------------------------------------------------------------------------------
{ $1a } function fRdReal(var f): real;

        Stack: { f } -> { r }

-------------------------------------------------------------------------------
{ $1c } function fRdChar(var f): char;

        Stack: { ^f } -> { ch }

-------------------------------------------------------------------------------
{ $1d } procedure fRdStr(var f; var s: string);

        Stack: { sz, ^s, ^f } -> {  }

-------------------------------------------------------------------------------
{ $1e } function fEOLN: boolean;

        Stack: { ^f } -> { b }

-------------------------------------------------------------------------------
{ $1f } procedure fRdLn;

        Stack: { ^f } -> { }

-------------------------------------------------------------------------------
{ $20 } procedure fWrInt(var f: text; I: Integer; Width: integer);
        begin write(f, I: Width); end;

        Stack: { Width, I, addr(f) } -> { addr(f) }

-------------------------------------------------------------------------------
{ $21 } procedure fWrCard(var f: text; C: Cardinal; Width: integer);
        begin write(f, C: Width); end;

        Stack: { Width, C, addr(f) } -> { addr(f) }

-------------------------------------------------------------------------------
{ $22 } procedure fWrLong(var f: text; L: LongInt; Width: integer);
        begin write(f, L: Width); end;

        Stack: { Width, L, addr(f) } -> { addr(f) }

-------------------------------------------------------------------------------
{ $23 } procedure fWrWord(var f; w:word; Width:integer; ndigits:word {= 2/4});

        Stack: { ndigits, Width, w, f } -> { f }

-------------------------------------------------------------------------------
{ $24 } procedure fWrReal(var f; r: real; width, fraction: integer);

        Stack: { fraction, width, r, ^f } -> { ^f }

-------------------------------------------------------------------------------
{ $26 } procedure fWrChr(var f: file; ch: char; Width: integer);
        begin write(f, ch: Width); end;

        Stack: { Width, ch, addr(f) } -> { addr(f) }

-------------------------------------------------------------------------------
{ $27 } procedure fWrStr(var f: file; const s: string; Width: integer);
        begin write(f, s: Width); end;

        Stack: { Width, addr(s), addr(f) } -> { addr(f) }

-------------------------------------------------------------------------------
{ $28 } procedure fWrPack(var f: text;
                          const Buff: packed array [0..Size-1] of char;
                          Width, Size: integer);
        begin write(f, Buff: Width); end;

        Stack: { Size, Width, addr(Buff), addr(f) } -> { addr(f) }

-------------------------------------------------------------------------------
{ $29 } procedure fWrLine(var f: text);
        begin writeln(f); end;

        Stack: { addr(f) } -> { }

-------------------------------------------------------------------------------
{ $2a } procedure Finit(var f: file; RecSize: Cardinal;
                        Kind: (Normal, Packed, text, file));
        begin
           initialize file pointed at by <file>
           with record size <RecSize> and
           <Kind> = 0 - normal, 1 - packed, 2 - text, 3 - file
           { този вид номерация се генерира от стария компилатор }
           желателно е да бъде сменена на 0 - file, 1 - normal, 2 - text
        end;

        Stack: { Kind, RecSize, addr(f) } -> { }

------------------------------------------------------------------------------
{ $2b } procedure Fopen(var f: file; const Name: string; mode: word);
        begin
           open file pointed at by <file>
           if ^name = nil значи имаме reset(f) или подобните му там
            Open file with required mode = Hi(mode) send to UniDOS as Bregister
            Lo(mode): ABCDEFGH
                         |||\|__ Write/Read mode
                         |||____ append (ако е 1 то Write = 1 също)
                         ||_____ temporary
                         |______ create new file only
        end;

        Stack: { mode, ^name, ^f } -> { }

-------------------------------------------------------------------------------
{ $2c } procedure: Fclose(var f: file; mode: (FromCompiler,
                                              FromClose,
                                              TruncateClose,
                                              TruncOnly));
        Stack: { mode, ^f } -> { }

-------------------------------------------------------------------------------
{ $2d } function EOF: boolean;
        begin return(eof); end;

        Stack: { } -> { b }

-------------------------------------------------------------------------------
{ $2e } function fEOF(var f): boolean;
        begin return(eof(f)); end;

        Stack: { ^f } -> { b }

-------------------------------------------------------------------------------
{ $2f } procedure EndWr;
        generated at the end of every WRITE (but not WRITELN) procedure

        Stack: { } -> { }

-------------------------------------------------------------------------------
{ $30 } procedure fEndWr;
        generated at the end of every WRITE (but not WRITELN) procedure

        Stack: { } -> { }

-------------------------------------------------------------------------------
{ $31 } procedure BlockRW(var f: file; var Buff; Offset, Nbytes: Cardinal;
                          var Processed: word; Write: boolean);
        begin
        if processed <> nil then
          if write then
            blockwrite(f, buff[offset], Nbytes, processed^)
          else
            blockread(f, buff[offset], Nbytes, processed^)
        else
          if write then
            blockwrite(f, buff[offset], Nbytes)
          else
            blockread(f, buff[offset], Nbytes);
        end;

        Stack     { RW, addrP, Nbytes, Offset, AddrBuff, f } -> { }

-------------------------------------------------------------------------------
{ $32 } function Fpos(var f): longint;
        begin return(FilePos(f)); end;

        Stack: { f } -> { L }

-------------------------------------------------------------------------------
{ $33 } procedure Seek(var f; pos: longint);
        begin seek(f, pos) end;

        Stack: { L, f } -> { }

-------------------------------------------------------------------------------
{ $34 } function ParamCnt: Cardinal;
        begin return(ParamCnt); end;

        Stack: { } -> { w }

-------------------------------------------------------------------------------
{ $35 } procedure ParamStr(No: Natural; var s: string);
        begin s:= ParamStr(No); end;

        Stack: { sz, addr(s), w } -> { }

-------------------------------------------------------------------------------
{ $36 } function MsgLmt: Natural;
        begin return(ScreenSize(X)) end;

        Stack: { } -> { w }

-------------------------------------------------------------------------------
{ $37 } procedure Remove(const name: string);

        Stack: { ^name } -> { }

-------------------------------------------------------------------------------
{ $38 } function Fsize(var f): longint;
        begin return(FileSize(f)); end;

        Stack: { f } -> { L }

-------------------------------------------------------------------------------
{ $39 } procedure StdPut(var f; const buffer);

        Stack: { ^buffer, f } -> { }

-------------------------------------------------------------------------------
{ $3a } procedure StdGet(var f; var buffer);

        Stack: { ^buffer, f } -> { }

-------------------------------------------------------------------------------
{ $3b } procedure Rename(const old, new: string);

        Stack: { ^new, ^old } -> { }

-------------------------------------------------------------------------------


                         Таблица на Standard Proc/Funcs

   г========T========T========T========T========T========T========T========+
   ¦ .0 /.8 ¦ .1 /.9 ¦ .2 /.a ¦ .3 /.b ¦ .4 /.c ¦ .5 /.d ¦ .6 /.e ¦ .7 /.f ¦
г==+========+========+========+========+========+========+========+========+==+
¦00¦        ¦        ¦ RdInt  ¦ RdCard ¦ RdLong ¦ WrLwrd ¦ RdReal ¦        ¦07¦
¦==+========+========+========+========+========+========+========+========+==¦
¦08¦ RdChar ¦ RdStr  ¦ Eoln   ¦ RdLn   ¦ WrInt  ¦ WrCard ¦ WrLong ¦ WrWord ¦0f¦
¦==+========+========+========+========+========+========+========+========+==¦
¦10¦ WrReal ¦        ¦  WrChr ¦ WrStr  ¦ WrPack ¦ WrLine ¦ fRdInt ¦ fRdCard¦17¦
¦==+========+========+========+========+========+========+========+========+==¦
¦18¦ fRdLong¦ fWrLwrd¦ fRdReal¦        ¦ fRdChr ¦ fRdStr ¦ fEoln  ¦ fRdLn  ¦1f¦
¦==+========+========+========+========+========+========+========+========+==¦
¦20¦ fWrInt ¦ fWrCard¦ fWrLong¦ fWrWord¦ fWrReal¦        ¦ fWrChr ¦ fWrStr ¦27¦
¦==+========+========+========+========+========+========+========+========+==¦
¦28¦ fWrPack¦ fWrLine¦  Finit ¦ Fopen  ¦ Fclose ¦ EOF    ¦ fEOF   ¦ EndWr  ¦2f¦
¦==+========+========+========+========+========+========+========+========+==¦
¦30¦ fEndWr ¦BlockRW ¦ Fpos   ¦ seek   ¦ParamCnt¦ParamStr¦ MsgLmt ¦ Remove ¦37¦
¦==+========+========+========+========+========+========+========+========+==¦
¦38¦ Fsize  ¦ StdPut ¦ StdGet ¦ Rename ¦        ¦        ¦        ¦        ¦3f¦
L==+========+========+========+========+========+========+========+========+==+
   ¦ .0 /.8 ¦ .1 /.9 ¦ .2 /.a ¦ .3 /.b ¦ .4 /.c ¦ .5 /.d ¦ .6 /.e ¦ .7 /.f ¦
   L========¦========¦========¦========¦========¦========¦========¦========+