vak: (Улыбка)
Serge Vakulenko ([personal profile] vak) wrote2016-11-23 10:44 pm

Фортран для БЭСМ-6 это сила

Сижу в центре кремниевой долины и программирую на фортране для БЭСМ-6. На дворе 2016 год, а вот поди ж ты, возникла настоятельная потребность. Нужно извлечь с диска некий бинарный образ и преобразовать в текстовый HEX файл. Надо сказать, Фортран-ГДР отличный инструмент для подобных задач. Мониторная система Дубна, симулятор ОС Диспак, книжки Мазного и Салтыкова-Макаренко под рукой. Решение выглядит так: hexdump.b6

История вопроса следующая. Есть процессор микро-БЭСМ, и для него есть тест системы команд. Тест написан на языке ассемблера, а сам ассемблер имеется в исходных текстах для БЭСМ-6. К ассебмлеру также прилагается линкер. Всё это запускается под мониторной системой "Дубна" на симуляторе ОС Диспак. На самом деле написана эта кросс-система была под ОС Дубна, и пользуется некоторыми её особенностями, поэтому пришлось на скорую руку привинтить несколько дубненских экстракодов к симулятору Диспака. Но это всё мелочи. В конце концов ассемблер с линкером заработали и на диске получился двоичный образ теста, размером около 24 килобайт. Как его извлечь оттуда? Тем более, что хранится он под управлением некой "библиотеки виртуальной памяти", и формат хранения не описан. Но есть API, набор фортрановских вызовов. Не вопрос: пишем програмулину и получаем нужный результат. Теперь можно смело запускать тест на симуляторе Verilog.

[identity profile] juan-gandhi.livejournal.com 2016-11-24 06:48 am (UTC)(link)
Восторг, конечно.

[identity profile] juan-gandhi.livejournal.com 2016-11-24 07:12 am (UTC)(link)
Вот меня тоже иной раз тянет тряхнуть, да зафигачить форт где-нибудь просто в джаваскрипте. Чо, делов-то.

[identity profile] kbb.livejournal.com 2016-11-24 08:40 am (UTC)(link)
Ну зафигачь например для:

10 a=a+1
goto 100

100 a=a-1
goto 10

[identity profile] juan-gandhi.livejournal.com 2016-11-24 10:05 pm (UTC)(link)
Это фортран; а я если зафигачу, то форт.

[identity profile] cross-join.livejournal.com 2016-11-24 08:44 am (UTC)(link)
Смысла нет. Форт - высокоуровневая замена ассемблера и альтернатива Си для программирования встроенных систем. Яваскрипт - программирование терминалов конечного пользователя и "клей" для интеграции системных компонентов.

[identity profile] nzeemin.livejournal.com 2016-11-24 09:10 am (UTC)(link)
Года два уже как есть такой:
https://github.com/eatonphil/jsforth

Сейчас наверное имеет смысл реализовать Форт под asm.js.
Edited 2016-11-24 09:12 (UTC)

[identity profile] Евгений Х. (from livejournal.com) 2016-11-24 01:41 pm (UTC)(link)
Так asm.js уже наверно каменный век.
Теперь эпоха WebAssembly (отгрузка официально в Q1 2017)
А внутри там очень даже тортфорт!

[identity profile] juan-gandhi.livejournal.com 2016-11-24 10:10 pm (UTC)(link)
Ну я б так не сказал. Там один стек, и запись постфиксная.

[identity profile] Евгений Х. (from livejournal.com) 2016-11-25 02:07 am (UTC)(link)
Я не спорю, говорю что видел (конечно не "чистый" форт, но близко)

https://cdn.rawgit.com/WebAssembly/wabt/e528a622caa77702209bf0c3654ca78456c41a52/demo/index.html

Исходник в виде AST:
(module
  (func $addTwo (param i32 i32) (result i32)
    (i32.add
      (get_local 0)
      (get_local 1)))
  (export "addTwo" (func $addTwo)))


Выхлоп:
0000000: 0061 736d                                 ; WASM_BINARY_MAGIC
0000004: 0d00 0000                                 ; WASM_BINARY_VERSION
; section "TYPE" (1)
0000008: 01                                        ; section code
0000009: 00                                        ; section size (guess)
000000a: 01                                        ; num types
; type 0
000000b: 60                                        ; func
000000c: 02                                        ; num params
000000d: 7f                                        ; i32
000000e: 7f                                        ; i32
000000f: 01                                        ; num results
0000010: 7f                                        ; i32
0000009: 07                                        ; FIXUP section size
; section "FUNCTION" (3)
0000011: 03                                        ; section code
0000012: 00                                        ; section size (guess)
0000013: 01                                        ; num functions
0000014: 00                                        ; function 0 signature index
0000012: 02                                        ; FIXUP section size
; section "EXPORT" (7)
0000015: 07                                        ; section code
0000016: 00                                        ; section size (guess)
0000017: 01                                        ; num exports
0000018: 06                                        ; string length
0000019: 6164 6454 776f                           addTwo  ; export name
000001f: 00                                        ; export kind
0000020: 00                                        ; export func index
0000016: 0a                                        ; FIXUP section size
; section "CODE" (10)
0000021: 0a                                        ; section code
0000022: 00                                        ; section size (guess)
0000023: 01                                        ; num functions
; function body 0
0000024: 00                                        ; func body size (guess)
0000025: 00                                        ; local decl count
0000026: 20                                        ; get_local
0000027: 00                                        ; local index
0000028: 20                                        ; get_local
0000029: 01                                        ; local index
000002a: 6a                                        ; i32.add
000002b: 0b                                        ; end
0000024: 07                                        ; FIXUP func body size
0000022: 09                                        ; FIXUP section size


Видно что в туловище: a b +

(no subject)

[identity profile] juan-gandhi.livejournal.com - 2016-11-25 02:14 (UTC) - Expand

[identity profile] juan-gandhi.livejournal.com 2016-11-25 01:59 am (UTC)(link)
Вот это очень хорошая идея, не фигачить на ассоциативных массивах, а прямо в asm.js вставить. Спасибо. Мне лень, конечно... но от лени можно и попробовать ужо.
(deleted comment)

[identity profile] juan-gandhi.livejournal.com 2016-11-24 10:11 pm (UTC)(link)
Ау, хозяин журнала! Мне прекратить сюда писать?

[identity profile] juan-gandhi.livejournal.com 2016-11-25 02:01 am (UTC)(link)
Окей, нет проблем.

[identity profile] Евгений Х. (from livejournal.com) 2016-11-24 01:43 pm (UTC)(link)
Это просто высший пилотаж!

[identity profile] andy-scott.livejournal.com 2016-11-25 05:52 pm (UTC)(link)
так возможность описывать структуры в виде common-блоков вроде ж во всех фортранах была? IBM FORTRAN-H, DEC F-77, не?

[identity profile] andy-scott.livejournal.com 2016-11-26 03:29 pm (UTC)(link)
Да, в классическом фортране таких штук не было. Мы писали подпрограммки на асмёблере для таких вещей. Одно радует, не сильно и не часто было нужно.

[identity profile] qvb.livejournal.com 2016-11-26 03:23 am (UTC)(link)
Да, компьютерная археология - очень интересная штука.

Лет пять назад меня почему-то торкнуло вспомнить незабвенную CM4/CM1420 и RSX11M. Поставил эмулятор, пару месяцев поигрался, вспомнил тот ассемблер, даже начал зачем-то портировать TCP стэк на RSX11M, но потом занялся другими хобби-проектами и охладел.

[identity profile] qvb.livejournal.com 2016-11-26 06:20 am (UTC)(link)
Да, это должно быть интересно.

Для RSX11M/M-PLUS я тоже собрал довольно полную коллекцию всяческого софта. К сожалению не смог найти все пакеты которыми когда-то пользовался, но процентов 80% нашел. Как ни странно не смог найти MIM (Микромир), а штука была очень неплохая. Но на западе MIM был не известен, а советских архивов очень мало.


P.S. Кстати, а не будет ли интересно сделать настоящий веб сайт о БЭСМ-6 работающий на Вашей микро-бэсм?

Я думал сделать нечто подобное под RSX11M (отсюда и идеи портировать TCP стэк), но гонять такую штуку внутри эмулятора как-то не айс, а собирать реальное железо было слишком муторно.

Edited 2016-11-26 07:08 (UTC)

[identity profile] avseyev.livejournal.com 2016-11-27 08:32 pm (UTC)(link)
Так Кушниренко и его дело до сих пор живет и здравствует. Есть современная имплементация Микромира и Кумира на PC'юках. Они его даже под Qt портировали. Можно собирать под разные Оси. :)
Edited 2016-11-27 20:32 (UTC)

(no subject)

[identity profile] qvb.livejournal.com - 2016-11-27 20:38 (UTC) - Expand

(no subject)

[identity profile] qvb.livejournal.com - 2016-11-27 21:21 (UTC) - Expand

(no subject)

[identity profile] Евгений Х. - 2016-11-28 10:28 (UTC) - Expand

(no subject)

[identity profile] qvb.livejournal.com - 2016-11-28 15:23 (UTC) - Expand

(no subject)

[identity profile] Евгений Х. - 2016-11-29 03:05 (UTC) - Expand

(no subject)

[identity profile] qvb.livejournal.com - 2016-11-29 03:21 (UTC) - Expand

(no subject)

[identity profile] Евгений Х. - 2016-11-29 03:36 (UTC) - Expand

(no subject)

[identity profile] qvb.livejournal.com - 2016-11-29 03:44 (UTC) - Expand

(no subject)

[identity profile] Евгений Х. - 2016-12-14 03:11 (UTC) - Expand