vak: (Default)
[personal profile] vak
Внезапно (tm) в сети обнаружились исходные тексты компилятора Фортрана для PDP-8.  Около двух тысяч строчек на языке PL/I.  Есть смысл попробовать переписать на Си и запустить.  Оцифрованную версию сложу пока тут.

Компилятор разработан Джеральдом Вильямом Сабером, и опубликован в 1971-м в качестве диссертации в высшей военно-морской школе в Монтерей, Калифорния. 

PDP-8 - первый в истории успешный коммерческий мини-компьютер.  Имел 6 килобайт адресуемой памяти.  Позже придумали страничную организацию, и память увеличилась до 48 килобайт.

Date: 2012-09-22 21:41 (UTC)
From: [identity profile] timka21213.livejournal.com
PL-1 мой первый язык программирования, ещё скальпелем по перфокартам... ностальджи!

Date: 2012-09-22 21:57 (UTC)
From: [identity profile] andy-scott.livejournal.com
хммм а зачем, собственно?

вот если бы DEC Fortran-77 нашелся

Date: 2012-09-23 03:47 (UTC)
From: [identity profile] panchul.livejournal.com
У этого компилятора такой код, что лучше новый написать.

Например:

dj i=0 to 30; code(i+2845)=float(i); end;
do i=0 to 27; code(i+2876)=write_string(i); end;
do i=0 to 39; code(i+2904)=integer io(1); end;
do 1=0 to 127; /* l3ad floating potnt package */
code(i+2944)=a56(1); code(i+3072)=a60(i);
code(i+3200)=a62(i); code(i+3328)=a64(1);
code(i+3456)=a66(i); code(1+3584)=a70(1);
code(i+3712)=a72(1); code(i+3840)=a74(i); end;
do i=0 to 109; code(i+3968)=subprogs(i); end;
/* set initial jump to main program */
code(128)=2945; /* jmp i 201 */ code(129)=130; cb=c8+2; . call scan;


И ты хочешь симулятор PDP-8 на MIPS M4K под RetroBSD?
Edited Date: 2012-09-23 03:49 (UTC)

Date: 2012-09-23 00:22 (UTC)
From: [identity profile] panchul.livejournal.com
*** Есть смысл попробовать переписать на Си и запустить ***

Нет, Сережа, нет смысла попробовать переписать на Си и запустить компилятор с Фортрана для PDP-8 написанный на PL/I.

Т.е. переписать можно. По приколу. Но только пожалуйста не утверждай, что в этом есть смысл. По крайней мере естественный смысл. Понятно, что за уши смысл можно притянуть даже к этому.

Date: 2012-09-23 00:27 (UTC)
From: [identity profile] panchul.livejournal.com
И я не говорю уже о том, что данный студент военно-морской школы в Монтерее не выглядит особенно хорошим программистом. На PL/I в 1971 году можно было бы написать лучше, чем нескончаемые массивы магических констант:

declare 5ubprogs(109) bit(16) initial(0,896,1775,1152,1007,1776,1263,
563,3904,2703,3616,1774,750,750,750,1774,1264,2707,2721,1264,1007i
1777,1263,563,3616,516,1778,754,1266,2715,750,1774,2704,647,168t,
1007,3616,515,751,750,2688, 0,0,37761938,1774,1006,1774,1194,v38,
1775,1007,3616,1775,1194,1263,2746,2986,750,2743,0,3776,956,1774,
1006,1774,1212,956,1212,1775,1007,3616,516,3872,2764,3842,1775,
1776,750,751,1264,3036,2767,3904,e774,514,752,3004,0,3776,984,
1774,1006,3616,516,1774,1240,984,1775,1240,2311,3055,3311,0,2311,
1775,0,1262,2792,3032);
/* arrays a of 56 through 74 contain floating point package */
declare
a56(127) bit(16) initial(0,3776,1571,1575,896,1707,683,179,4008,
2700,689,128,1710,690,171,686,1710,692,171,4008,2711,942,
1710,1152,942/1568,686,1711,1199,943,1569,1199,943,1570,683,3654,
3590,176,693,1708,940,1708,2988,0,'00,0,0,15,3968,127,128,256,
2998,3042,3022,3039,3057,3269,3006,3013,3067,544,1572,545,1573,
546,1574,2689,548,1966,1198,549,1966,1198,550,1966,2689,2553,
2689,2554,3648,547,551,1575,3588,546,550,1574,3588,545,549,1573,
2552,2689,2529,2766,3328,683,176,3880,2944,752,1708,940,17081
0640,1709,2476,685,1664,2689,3428,3713,544,548,1572,2551,2689,
3217,3456,3088,3444,2552,2689,0,0,0),

Date: 2012-09-23 05:49 (UTC)
From: [identity profile] spamsink.livejournal.com
Юра, ты пропустил самое главное: This compiler was written using the XPL Compiler Generator System. Это не исходник, это уже байткод.

Date: 2012-09-23 09:28 (UTC)
From: [identity profile] spamsink.livejournal.com
Это типа YACC: http://www.cs.toronto.edu/XPL/tws.html
From: [identity profile] panchul.livejournal.com
Ах, да, вспомнил про "Генератор компиляторов". Я в СССР даже читал книжку про это в 8 классе в библиотеке КПИ

http://www.cs.toronto.edu/XPL/

Но это же еще хуже - зачем переписывать на Си экскременты этого динозавра? Мы что - живем вечно? Почему бы не соблюдать дисциплину и заниматься только тем, в чем есть хоть чуть-чуть смысла, даже хотя-бы смысла в порядке хобби?

Date: 2012-09-23 01:44 (UTC)
From: [identity profile] panchul.livejournal.com
Ну притяни за уши, мне интересно, как именно ты это сделаешь.

А вообще надо бы в порядке диверсии привести тебя в библиотеку Стенфорда, где стоят книжки про несколько тысяч мертвых языков программирования, чтобы твой внутренний орган интересования переполнился и вышел из строя.

(При этом я вовсе не говорю, что Фортран - мертв, или что PDP-8 - плохая архитектура. Даже PL/I представляет интерес в так сказать социально-корпоративном ракурсе, но вот комбинация всего этого да еще и с Монтереем требует терапии стенфордской библиотекой)

Date: 2012-09-23 20:54 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
корпоративном или копропоративном?

Date: 2012-09-23 23:12 (UTC)
From: [identity profile] dz.livejournal.com
+1.
(Я вот такое говорить уже перестал. Обижаются.)
Хотя, конечно, pdp-8 - зачотная машина :)

Date: 2012-09-23 05:19 (UTC)
From: [identity profile] spamsink.livejournal.com
Ну перепишешь, запустишь. Получится программа на Си, реализующая какой-то магический байткод, преобразующий Фортран образца 1971 года в код PDP-8. А дальше?

Уж если хочется Фортран под RetroBSD, то лучшим вариантом будет заточка f2c под существующую систему программирования.
Edited Date: 2012-09-23 05:47 (UTC)

Date: 2012-09-23 09:26 (UTC)
From: [identity profile] spamsink.livejournal.com
Я не понял, что речь идет о нативном компиляторе. Так на RetroBSD не помещается никакой нативный компилятор с чего бы то ни было? tcc тоже слишком велик?

Date: 2012-09-23 20:56 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
исходники DECUS C в инете доступны, написанны на нормальном си, работали на pdp11 с 56K RAM.

Date: 2012-09-23 21:45 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
ан нет, на си он только частично.
остальное на macro-11

antiquesilicon.com/library/metalab.unc.edu/history/pdp-11/language/decus-C/

но все равно, это хоть относительно нормальный си

SmallC

Date: 2012-09-24 08:21 (UTC)
From: [identity profile] skolk.livejournal.com
Какой именно SmallC? Если тот, который недо- (DDJ. 1988), то временно оставьте родной "кодогенератор" на трех регистрах. Кстати, а как насчет Forth-ядра? ;)

Date: 2012-09-24 08:28 (UTC)
From: [identity profile] spamsink.livejournal.com
IOCCC 2001/bellard тоже должно влезть.

Оверлеи

Date: 2012-09-24 08:33 (UTC)
From: [identity profile] skolk.livejournal.com
А проверялось ли, нельзя ли наших невлазящих успешно разбить на влазящие оверлеи? Вообще, линкер должен был про это знать. Может, позволить ему вспомнить? ;)
Edited Date: 2012-09-24 08:34 (UTC)

a ^ b == a + b - (a & b) << 1

Date: 2012-09-24 08:43 (UTC)
From: [identity profile] skolk.livejournal.com
Интересно, кто от какой архитектуры (набора команд) об этом помнит? Я от PDP-8.