Сделал грубый дизасм KINGOM - https://github.com/nzeemin/uknc-vari...GOM/KINGOM.MAC
По объёму примерно в полтора раза больше чем STALK. И всё во FLOAT сверху донизу.
Код на Паскале - https://github.com/nzeemin/uknc-vari.../KINGOM-PASCAL
Сделал грубый дизасм KINGOM - https://github.com/nzeemin/uknc-vari...GOM/KINGOM.MAC
По объёму примерно в полтора раза больше чем STALK. И всё во FLOAT сверху донизу.
Код на Паскале - https://github.com/nzeemin/uknc-vari.../KINGOM-PASCAL
Надо мой дизасмер научить FIS понимать.
Эйфория с диска disk2.dsk - который ещё со старого SVN-репо - https://github.com/troosh/ukncbtl/bl...isks/disk2.dsk
Я уже не помню откуда этот диск взялся.
Набросал начерновую:
Скрытый текст
Код:#include <stdio.h>
void main(void)
{
unsigned short O1, O2;
short exp;
unsigned long mant, scmant;
long double res, sres;
while (1)
{
printf("#>");
scanf("%ho %ho", &O1, &O2);
printf("%ho %ho\n", O1, O2);
mant = ((((unsigned long)O1 << 16) | O2) & 0x7FFFFFL) | 0x800000L;
exp = (O1 >> 7) & 0xFF; exp -= 128;
printf("%hi %lX\n", exp, mant);
scmant = 0x800000L; sres = 0.5; res = 0.0;
while (scmant != 0)
{
if ((scmant & mant) != 0) res += sres;
scmant >>= 1; sres /= 2;
}
while (exp != 0)
{
if (exp < 0)
{
res /= 2; exp++;
}
else
{
res *= 2; exp--;
}
}
if ((O1 & 0x8000) != 0) res = -res;
printf("%Lg\n",res);
}
}
[свернуть]
"Королевство Эйфория":
Код на MACRO-11, постепенно пополняется комментариями - https://github.com/nzeemin/uknc-vari...GOM/KINGOM.MAC
Код на Паскале, незакончено - https://github.com/nzeemin/uknc-vari.../KINGOM-PASCAL
По моим прикидкам, общий объём работы - около 20 дней - на первые 20% ушло 4 дня.
По поводу переменной VAR224 - она типа INTEGER.
Функция L57170 получается что-то типа местного рандомайзера.
Хотя можно было сделать проще: B:=B*5 AND 4095;Код:FUNCTION L57170(A:INTEGER; VAR B:INTEGER):REAL;
LABEL 1;
BEGIN
IF A<>0 THEN B:=A;
B:=B*5;
1:
IF B>=16384 THEN B:=B-16384;
IF B>=8192 THEN B:=B-8192;
IF B>=4096 THEN B:=B-4096;
IF B>4096 THEN GOTO 1;
L57170:=B/4096;
END;
Спасибо, это сэкономило мне время.
Пока не понял что в процедуре L60060 заставляет сохранять SP в R4 - пока воткнул там NOP для выравнивания.
В конце 4-го .PAS модуля (KINGM4.PAS) стоит какой-то заполнитель из слов 011404 - пока не понял что это.
- - - Updated - - -
В общем, первый проход по основному модулю (KINGOM.PAS) - сделан.
Недоделаны процедуры в остальных модулях (KINGM3.PAS, KINGM4.PAS, KINGM5.PAS).
Приготовил всё ко второму проходу по основному модулю - дальше пока буду этим заниматься.