Сделал грубый дизасм 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
Последний раз редактировалось nzeemin; 05.01.2022 в 22:31.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Надо мой дизасмер научить FIS понимать.
Эйфория с диска disk2.dsk - который ещё со старого SVN-репо - https://github.com/troosh/ukncbtl/bl...isks/disk2.dsk
Я уже не помню откуда этот диск взялся.
hobot (24.04.2021)
nzeemin (23.04.2021)
Набросал начерновую:
Скрытый текст
Код:#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 дня.
Последний раз редактировалось nzeemin; 16.05.2021 в 02:09.
По поводу переменной 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;
nzeemin (15.05.2021), Oleg N. Cher (16.05.2021)
Спасибо, это сэкономило мне время.
Пока не понял что в процедуре L60060 заставляет сохранять SP в R4 - пока воткнул там NOP для выравнивания.
В конце 4-го .PAS модуля (KINGM4.PAS) стоит какой-то заполнитель из слов 011404 - пока не понял что это.
- - - Updated - - -
В общем, первый проход по основному модулю (KINGOM.PAS) - сделан.
Недоделаны процедуры в остальных модулях (KINGM3.PAS, KINGM4.PAS, KINGM5.PAS).
Приготовил всё ко второму проходу по основному модулю - дальше пока буду этим заниматься.
Alex_K (16.05.2021)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)