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

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

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

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

10 a=a+1
goto 100

100 a=a-1
goto 10

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

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

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

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

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

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

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

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 +

Date: 2016-11-25 02:14 (UTC)
From: [identity profile] juan-gandhi.livejournal.com
А! Действительно. Впрочем, без второго стека это все равно не форт. И, конечно, обратная польская должна быть прямо в сорсах. Позволяет частичную параметризацию, все такое.

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

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

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