2023-10-23

vak: (Default)
В 2017 году Warner Losh сумел разыскать образы флопиков операционной системы Venix - был такой юникс для первых компьютеров с процессором 8086. Скачать можно по ссылке: venix21.zip.

Народ сумел установить систему с этих дисков на симуляторе MAME: virtuallyfun.com/2015/08/14/venturcomm-venix86-on-messmame/

Но это только присказка. Самая забава в том, чтобы восстановить систему в исходных текстах. Подробности смотрите в докладе про Venix/86 на конференции FOSDEM 2022. Слайды здесь: docs.google.com/presentation/d/1aAxBk6ODGA28H32cH1GNghGJ4O-fSyam5faNFWVSrdI/

Исходники проекта на Гитхабе: github.com/bsdimp/venix

Был разработан симулятор, позволяющий выполнять бинарники Venix/86 "как родные" на современном компьютере под FreeBSD. Вот исходник для интересующихся: venix.c

Это намного ускоряет работу над проектом. На реальной XT-шке перекомпиляция всей системы занимает 7 часов. На FreeBSD нужно несколько минут.

Задумка очень похожа на наш с Лёней [personal profile] spamsink проект bkunix, где мы восстановили до исходных текстов крошечный LSX Unix, и приспособили его для БК-0010/11.

Если удастся полностью восстановить Venix, можно его слегка модифицировать для лаптопа Book 8088, продающегося сейчас на Aliexpress за $200. Получится забавный ретрокомпьютер. Кто имеет ностальгию и страсть к 8086, присоединяйтесь к проекту Варнера, получите массу удовольствия. 

vak: (Default)
Мне по работе периодически приходится дебажить арифметический хардвер, в том числе вещественную арифметику. Каждый бит на счету, поэтому десятичное представление плавающей точки не годится. К счастью, умные люди изобрели hexfloat, формат вещественных чисел, где каждый бит явно представлен, и ничего не теряется.

Стал я искать простой калькулятор, чтобы из командной строки быстренько прикинуть пару формул с hexfloat. Обычно если надо что-то посчитать, я зову python3 или pdc. Всё у них хорошо, кроме hexfloat.

Неожиданно оказалось, что существует прилада, дающая интерактивный Си++ примерно в том же стиле, что и Питон. Называется cling. Внутри это clang/llvm, так что за надёжность можно не беспокоиться. Вот пример.
$ cling

****************** CLING ******************
* Type C++ code and press enter to run it *
* Type .q to exit *
*******************************************
[cling]$ 2*3*4
(int) 24

[cling]$ 0x1.151a4cp-7 * 0x1.9bb298p+27
(double) 1825320.6

[cling]$ printf("%a\n", 0x1.151a4cp-7 * 0x1.9bb298p+27)
0x1.bda288d4752p+20
(int) 20

[cling]$ printf("%a\n", (float)(0x1.151a4cp-7 * 0x1.9bb298p+27))
0x1.bda288p+20
(int) 15

[cling]$ #include <cfloat>
[cling]$ FLT_MAX
(float) 3.40282e+38f

[cling]$ printf("%a\n", FLT_MAX)
0x1.fffffep+127
(int) 16

[cling]$ printf("%a\n", DBL_MAX)
0x1.fffffffffffffp+1023
(int) 24