Этим Вы окажете большую помощь науке и медицине. См. подробнее: 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 цифри след точката