Feb. 3rd, 2023

spamsink: (Default)
[personal profile] spamsink
Я пытаюсь довести систему Паскаль-Автокод до состояния, которое позволяло бы по ее образцу писать произвольные компиляторы в автокод ИТМ. В процессе разборки с запускалкой компилятора, которая также упрощала печать инструкции, я декомпилировал и программу печати в две колонки (БИЛИСТ) - это заняло всего несколько часов, потому программа с очень похожей функциональностью уже была готова (система ТИРАЖ).

Оказалось достаточно лишь выдрать процедуру, делающую собственно печать в две колонки и разобраться с режимами компиляции и разбиением на строки; правки кода как таковые были минимальные. Разница заключалась в том, что БИЛИСТ была скомпилирована с неполной оптимизацией: проверки на выход индексов за границы массивов оставались, и в вызовах сообщений об ошибках были номера строк. Это позволило примерно подогнать программу к исходному виду, отчего она получилась весьма кирпичеобразной почти везде, кроме самого конца, где уже нет обращений к массивам.

https://github.com/besm6/pasauto-re/blob/main/bilist.pas
spamsink: (Default)
[personal profile] spamsink
Так как запускать программы из Паскаля-Автокода неудобно, я решил попробовать перенести программу печати в две колонки в Паскаль-Монитор. Одна известная разница - отсутствие в П-М конструкции "var _IN type" (например, "ch _IN letters", где тип letters определён как 'A'..'Z'), но это легко решается введением функций.

А дальше случилось забавное: я впервые увидел ошибку компилятора. Тестовый пример выглядит так:
 PASCAL COMPILER 15.0 (15.02.82)
 00001    1  0 PROGRAM MAIN(OUTPUT);
 00001    2  1 VAR S: SET OF 0..47;
 00007    3  2 BEGIN
 ******200 SYSTEM=200
 00010    4  2 S := [ORD(’ ’)..ORD(’/’)];
        *****                           0
 00023    5  0 END.


В перенесенном на С++ компиляторе падает с тем же успехом.

Pascal-Monitor in C++ (17.05.2019)
 00001    1  0 program main(output);
 00001    2  1 var s: set of 0..47;
 00007    3  2 begin
Error 200: Internal error 200
 00010    4  2 s := [ord(' ')..ord('/')];
       ^^^^^                            0
 00023    5  0 end.


Если вместо диапазона просто перечисление [ord(' '), ord('/')] - работает. Надо разбираться :)
spamsink: (Default)
[personal profile] spamsink
На дисках нашлось несколько текстов, подготовленных к печати с помощью "Паскаль-программы листинг в две колонки".

Один - рубрикатор ВИНИТИ, сам по себе довольно скучный, хотя оттуда я СЯУ о понятии "эргатическая система" (sic).

Другой - инструкция по редактору системы "Пульт", которая у нас уже есть в выдранном с диска и отредактированном вручную виде, а 36 лет назад (я чуть-чуть опоздал к годовщине) она представала заинтересованным пользователям в следующем виде:
под катом )
spamsink: (Default)
[personal profile] spamsink
Чисто ради прикола, вот так выглядит начало рубрикатора (всего там 23 страницы, убиться можно).
под катом )

Profile

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

December 2025

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
282930 31   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 13th, 2026 10:37 pm
Powered by Dreamwidth Studios