Подключите Ваш компьютер к проекту распределённых вычислений!
Этим Вы окажете большую помощь науке и медицине.
См. подробнее: http://solidstate.karelia.ru/~yura/pyldin/yura/computing.htm


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





Файл CODEFILE.DOC
===============================================================================


Описание на YcodeFile

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

offset   size  съдържание       Описание
------------------------------------------------------------------------------
               ------¦
$0000  2 bytes Lc0 deL          magic
               +--+---
$0002  1 byte  L10L             Големина на една дума в битове
               +--L
$0003  1 byte  L00L             Byte sex (0 - negative).
               +--+--¦
$0004  2 bytes L01 xxL          version
               +--+--L
$0006  2 bytes L00 00L          unused
               +--+--L
$0008  1 word  L20 00L          Големина на параграф
               +--+--L
$000a  1 word  L00 02L          Големина на блок
               +--+--L
$000c  1 word  Lxx xxL          Module Descriptor of first module
               +--+--L
$000e          |Unused          unused to end of paragraph

Module Descriptor
------------------------¦
L module name 8 chars   L
+--+--+--+--+--+--+--+---
L Ver L                         version
+--+--L
LDate L                         compilation date
+--+--L
LTime L                         compilation time
+--+--L
LNext L                         Next module descriptor
+--+--L
LMseg L                         main segment descriptor
+--+--L
LLang L                         language type
+--+--L
LCstrtL                         interface offset
+--+--L
LCsizeL                         interface size
+--+--L
LUsageL                         usage list offset
+--+--L
L     L
+--+--L
L     L
+--+---
LNeL     (byte)                 number of external modules
+--L
LNiL     (byte)                 number of internal segments
L---


Usage Paragraph
------------------------¦
L module name 8 chars   L
+--+--+--+--+--+--+--+---
L Ver L  (word)                 module version (все още има само 0 обикновено)
+--+--L
LDate L  (2 bytes)              compilation data
+--+--L
LTime L  (2 bytes)              compilation time
+--+--L
LNext L  (word)                 next usage paragraph
+--+--L
Lunused

Segment Descriptor

------------------------¦
L segment name 8 chars  L
+--+--+--+--+--+--+--+---
LStartL                         Start of a code segment
+--+--L
LSize L                         Size of a code segment
+--+--L
LNo   L                         Segment No
+--+--L
LNext L                         Next Segment
+--+--L
unused

Segment Header Info

------------------------¦
L segment name 8 chars  L
+--+--+--+--+--+--+--+---
L10L                            word size
+--L
L00L                            byte sex
+--+--¦
L     L                         version
+--+--L
LTsizeL                         Total size
+--+--L
LCsizeL                         cpool size
+--+--L
|  .  |                         unused
|  :  |
+-----L
LRelctL  (word)                 ptr to rel info
+-----L
LPdictL  (word)                 ptr to pdict
+--+--L
LCPoolL  (word)                 ptr to cpool
L--+---

RelTbl (Relocation table)

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

Procedure

  --------------------------------------¦
  |    exit code of a procedure         |
->|  exit:                           |
| |    Ycode of a procedure.            |
| |                                     |
L +-----T--------------------------------
L-Lexit L (word) ExitPtr: exit pointer
  +--+--L
  LPsizeL (word) ParamSize: parameters size
  +--+--L
  LDsizeL (word) DataSize: data size
  +--+---
  LLxL  (byte) LexLevel: proc lex level
  +--L
  LNoL  (byte) ProcNo: procedure number
  L---







Файл SPECIAL.DOC
=========================================================================


;  Real format number (IEEE standard in Negative Byte Sex):
;       (всъщност четирите байта са обърнати заради negative ByteSex)
;  ---- byte 3 ----T--- byte 2 ----T--- byte 1 ----T--- byte 0 ----¦
;  --T---------------T---------------------------------------------¦
;  LsL    exponent   L              m a n t i s s a                L
;  L-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--
;  31 30           23 22                                          0
;
;  assume e = exponent; m = mantissa; s = sign
;
; (1) if 0 < e < 255              then value = (-1)^s * 2^(e - 127) * (1.m);
; (2) if (e = 0) and (m = 0)    then value = (-1)^s * 0;
; (3) if (e = 0) and (m <> 0)     then value = (-1)^s * 2^(-126) * (0.m);
; (4) if (e = 255) and (m = 0)  then value = (-1)^s * infinite;
; (5) if (e = 255) and (m <> 0) then value is a NaN (Not A Number);
;
;  this implementation of FP arithmetics can't handle:
;    denormals (3), infinites (4) and NaNs (5)

    6-те вида сравнения на две реални числа -> 0/1
    sqr(r) вдигане на квадрат (еквивалентно на r*r)
    sqrt(r) корен квадратен (може би трябва да се пренапише = exp(0.5*ln(r))
    sin, cos, exp, ln, arctan, trunc, round, +, -, *, /, negative
    int(r) цялата част от реално число
    frac(r) дробната част от реално число
    random връща 0<= random <1
    integer -> real, cardinal -> real, longint -> real, real -> longint
    power(r, accA): r -> (r * 10) accA пъти
    f(r, accA): r -> r*10+accA специална работа, която може и да върши работа
    други специални процедури от вида:
      смятане на ред: a + b*x + c*x^2 + d*x^3 + ...
      смятане на ред: ax + b*x^3 + c*x^5 + d*x^7 + ...

Целочислена аритметика:
  сравнения (6-те вида)
  +, -, *, div/mod, sqr, hi/lo(word): byte, HiWord/LoWord(longword): word
  random(N) - връща 0<= random < N, ако N = 0 получаваме 0<= random <=$ffff
  randomize[(N)] задава ядката (или я установява по случаен начен от clock)
  negative <-> positive byte sex convertion:
    swap(word): word -             разменя двата байта
    longswap(longword): longword - разменя четирите байта

Низове (Pascal Like):
  сравнения (6-те вида)
  pos, delete, insert, присвоявания, string <-> ASCIIz,
  Up/Lo case на низ, буква, на ASCII и на разширен ASCII (барабар с кирилица)
  IdSearch - сравнително мощен табличен лексически анализатор
  +, -, *, / на низове (обаче го имам само на унит и то на торбалан (засега))

Byte Array
  scan for търсене на байт в масив (назад, напред)
  scan not for търсене на различен от даден байт в масив (назад, напред)
  compare - сравняване на два масива връща къде се различават

Превръщания:
  string -> longint (може и в HEX формат, може и с _ )
  longint, integer, cardinal -> string
  longword -> string със N<=8 шестнадесетични цифри
  string -> real по синтаксиса на парцал
  real -> string във експоненциален формат с 8<=N позиции
  real -> string във формат с фиксирана точка с N<=40 цифри след точката