vak: (Default)
[personal profile] vak posting in [community profile] besm6
Сейчас всё это ещё не очень удобно: общей запускалки нет, и компоненты компилятора надо вызывать по отдельности. Но для Makefile вполне достаточно.

К примеру, берём файл hello.pas. Сначала превратим его в объектный файл hello.obj:
$ besm6-pascompl hello.pas hello.obj
Теперь скомпонуем его с паскалевской библиотекой и получим выполняемый файл hello.out:
$ besm6-ld hello.obj -lpas -o hello.out
Смотрим размер:
$ besm6-size hello.out
text data bss dec oct filename
1047 270 1754 3071 5777 hello.out
Смотрим таблицу символов:
$ besm6-nm -n -g hello.out
00001 T HELLO
00026 T P/1
00032 T P/7A
00034 T P/7AD
00047 T P/BX
00061 T P/EN
00074 T P/EF
00077 T P/E
00102 T P/HIDE
00105 T P/EDIH
00110 T P/SC
00114 T P/SYS
00130 T P/MOD
00134 T P/DIV
00146 T P/IT
00150 T P/CO
00156 T P/RE1
00320 T P/RE2
00353 T PASCTRP
00426 T P/GF
00465 T P/RACPAK
00535 T PASINBUF
00572 T PASGIVEP
00653 T P/PF
00704 T P/WOLN
00705 T P/WL
00757 T P/RF
01042 T P/TF
01065 T P/TRPAGE
01115 T P/WX
01124 T P/WXD
01140 T PASEOF
01150 T PASISOXT
01160 T PASOUT
01161 T P/PRINT
01217 T PASTN
01233 T PASWHT
01274 T PASPMD
01327 T P/PMDSET
01406 T PRINT8
01410 T PULT
01411 T READ*
01412 T STOP*
01413 T P/BEXF
01420 T P/CW
01422 T P/DA
01432 T P/DI
01436 T P/ER
01444 T P/HT
01455 T P/MD
01464 T P/PAGES
01465 T P/RC
01506 T P/SP
01514 T P/WI
01566 T P/WO
01616 T P/WR
01761 T PASEVN
02000 T PASHID
02003 T PASDIH
02007 T PASNB8
02017 T P/A7
02025 T P/TR
02030 D /ETEXT
02204 D PASTENS
02232 C P/1D
02232 D /EDATA
02302 C *OUTPUT*
02340 C RGEXPORT
02341 C P/STACK
02342 C PASEOLSY
02343 C PASZERO*
02344 C PASMINS*
02345 C SPACE*
02346 C PASEOFCD
02347 C PASENDS*
02350 C PASCELUP
02351 C PASPMDAD
02352 C PASPAGN*
02353 C PASDRN*
02354 C PASDRUM*
02355 C MONCARD*
02373 C *PASDDS*
02374 C *PASTEL*
02425 C PASEXFT*
02444 C PASPERID
02445 C PASPLUS*
04000 P P/FIRP
06000 B /END
Чтобы всё это работало, нужно сначала установить симулятор dispak, а потом скомпилировать и установить утилиты из каталога mesm6/toolchain:
$ cd ~mesm6/toolchain/pascompl
$ make install
$ cd ~mesm6/toolchain/ld
$ make install
$ cd ~mesm6/toolchain/libpas
$ make install
Единственная проблема: в линкере пока недоделан флаг -Daddress, включающий раздельные адресные пространства для кода и данных, и задающий начальный адрес для данных. По умолчанию код и данные линкуются как на БЭСМ-6, в общее адресное пространство.

Для преобразования в форматы Intel HEX и МЭСМ-6 oct, в утилиту besm6-objdump надо будет добавить флаги -Oihex и -Oboct.

У Паскаль компилятора есть куча флагов. Нам могут оказаться полезными -a0, -p-, -s7, -s8, -t-, -u+:
$ besm6-pascompl
Pascal-Monitor in C++ (17.05.2019)
Usage:
pascompl [option...] infile [outfile]
Options:
-a0 -a1 -a2 Output encoding for strings:
-a0: UTF-8
-a1: KOI-8
-a2: KOI-7 (aka ISO, default)
-b0 -b1 ... -b4 Size of file buffer, in 256-word chunks
-c- -c+ Disable/enable checking of data types
-d0 -d1 ... -d15 Bitmask of debug flags:
-d1: Trace function calls
-d2: Enable debug() as writeln()
-d4: Enable code enclosed in {=Z-}/{=Z+}
-d8: Invoke Pascal Debugger
-e- -e+ Make procedures external (-e+) or local (-e-)
-f- -f+ Compile procedures as Pascal (-f-) or Fortran (-f+)
-k0 -k1 ... -k23 Heap size in 1024-word chunks (default -k4)
-l0 -l1 -l2 -l3 Listing mode:
-l0: No listing, only error messages
-l1: Print listing with relative addresses per line
-l2: Also print generated object code
-l3: Also print offsets for variables and fields
-m+ -m- Optimize integer multiplication (positives only)
-p+ -p- Enable/disable debug information and crash dump
-r+ -r- Compare reals with predefined tolerance
-s0 Use stars for commons (like *foobar*)
-s1 Append one star for external names (like foobar*)
-s2 No stars for external names (like foobar)
-s3 Re-start line numbering from this line
-s4 Print columns 73-80 as line tags
-s5 Disable external files
-s6 Pack record fields from right to left
-s7 Disable pointer checking
-s8 Disable checking for stack overflow
-s9 Unknown
-t+ -t- Enable/disable range checks
-u- -u+ Set length of source lines: 120 or 72 columns
-y- -y+ Disable/enable non-standard syntax
-v Output version information and exit
-h Display this help and exit
У линкера тоже есть флаги. Скажем, -Taddress задаёт начальный адрес размещения сегмента кода. Флаг -t включает выдачу списка линкуемых файлов, а повторив -t дважды, можно посмотреть подробную трассировку всех действий линкера.
$ besm6-ld
Linker for BESM-6 object files
Usage:
besm6-ld [options] file...
Options:
-d Force common symbols to be defined
-D address Use a separate address space for data and BSS
-e symbol Set entry address
-l name Search for library `libname'
-o filename Set output file name
-r Generate relocatable output
-s Strip all symbol information
-t Trace names of linked files
-T address Set base address (default 1)
-u symbol Start with undefined reference to `symbol'
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

Сообщество любителей БЭСМ-6

January 2026

S M T W T F S
    123
45678910
11121314151617
18192021222324
2526272829 3031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 7th, 2026 01:07 pm
Powered by Dreamwidth Studios