Вход

Просмотр полной версии : PASCAL + MACRO11 (УКНЦ-ДВК).



Страницы : 1 [2]

MM
24.12.2020, 03:47
пример
Не силен в Паскале, расскажу на словах, для дисплея 15-ИЭ-00хххх.
Нужно нарисовать на экране размером 80х24 символа круг из буковок, используя позиционирование курсора , привязанное к функции Кос и Син.

hobot
24.12.2020, 09:24
в сети никто не "парится" символами - там везде модулем графики окружность рисуют )))


Нужно нарисовать на экране размером 80х24 символа круг из буковок
слазил полистал шпоры по построению окружностей, ув. MM - сжальтесь над Хоботом, пожалуйста.

- - - Добавлено - - -

набросал такое, но конкретно с выводом по координатам проблема, что я не понимаю сам себя )))



PROGRAM MMM;
VAR
X0, Y0: INTEGER; (* ЦЕНТР *)
XR, YR: INTEGER; (* ТОЧКА НА ОКР. *)
RR: INTEGER; (* ВЫЧИСЛЯЕМЫЙ РАДИУС *)
XT,YT: INTEGER; (* ЭКРАННЫЕ КООРДИНАТЫ *)
BEGIN
WRITE(CHR(17B),CHR(27),'H',CHR(27),'J');
X0:=0;Y0:=0;XR:=0;YR:=0;RR:=0;XT:=0;YT:=0;
WRITE('ВВЕДИТЕ КООРДИНАТЫ СЕРЕДИНЫ ОКР. XO, YO >');
READLN(X0,Y0);
WRITE('ВВЕДИТЕ КООРДИНАТЫ ТОЧКИ НА ОКР. XR, YR >');
READLN(XR,YR);

RR:=ROUND(SQRT(SQR(XR-X0)+SQR(YR-Y0)));

FOR XT:=(X0-RR) TO RR*2 DO
FOR YT:=(Y0-RR) TO RR*2 DO
BEGIN
IF ((XT=(X0-RR))OR(XT=(RR*2)))AND((YT=(Y0-RR))OR(YT=(RR*2))) THEN
BEGIN
WRITE(CHR(27),'Y',CHR(32+YT),CHR(32+XT));
WRITE('#':1);
END;
END;

REPEAT UNTIL 0>0;
END.

Hunta
24.12.2020, 11:41
Набросок


PROGRAM CIRCLE;

VAR
X0: INTEGER;
Y0: INTEGER;
R: INTEGER;

PROCEDURE PUTPIXEL(X: INTEGER; Y: INTEGER; PIXEL: CHAR);
BEGIN
IF X > 79 THEN X:=79;
IF X < 0 THEN X:=0;
IF Y > 23 THEN Y:=23;
IF Y < 0 THEN Y:=0;
X:=X + 32;
Y:=ROUND(Y/2) + 6 + 32;
WRITE(CHR(27),'Y',CHR(Y),CHR(X), PIXEL);
END;

PROCEDURE PIXELCIRCLE(XC: INTEGER; YC: INTEGER;
DX: INTEGER; DY: INTEGER;
PIXEL: CHAR);
BEGIN
PUTPIXEL(XC+DX, YC+DY, PIXEL);
PUTPIXEL(XC+DY, YC+DX, PIXEL);
PUTPIXEL(XC+DY, YC-DX, PIXEL);
PUTPIXEL(XC+DX, YC-DY, PIXEL);
PUTPIXEL(XC-DX, YC-DY, PIXEL);
PUTPIXEL(XC-DY, YC-DX, PIXEL);
PUTPIXEL(XC-DY, YC+DX, PIXEL);
PUTPIXEL(XC-DX, YC+DY, PIXEL);
END;

PROCEDURE CIRCLE(XC: INTEGER; YC: INTEGER; R: INTEGER; PIXEL: CHAR);
VAR
DX: INTEGER;
DY: INTEGER;
Z: INTEGER;
DD: INTEGER;
BEGIN
DX:=0;
DY:=R;
DD:=2*(1-R);

WHILE DX < DY DO BEGIN
PIXELCIRCLE(XC, YC, DX, DY, PIXEL);
IF DD = 0 THEN BEGIN
DX:=DX+1; DY:=DY-1; DD:=DD+2*(DX-DY+1); END
ELSE BEGIN
Z:=2*DD-1;
IF DD > 0 THEN BEGIN
IF Z+2*DX <= 0 THEN BEGIN
DX:=DX+1; DY:=DY-1; DD:=DD+2*(DX-DY+1); END
ELSE BEGIN
DY:=DY-1; DD:=DD-2*DY+1;
END; END
ELSE BEGIN
IF Z+2*DY > 0 THEN BEGIN
DX:=DX+1; DY:=DY-1; DD:=DD+2*(DX-DY+1); END
ELSE BEGIN
DX:=DX+1; DD:=DD+2*DX+1;
END;
END;
END;
END;
IF DX = DY THEN PIXELCIRCLE(XC, YC, DX, DY, PIXEL);
END;

BEGIN
WRITE('wwedite koordinaty serediny okruzhnosti XO, YO >');
READLN(X0,Y0);
WRITE('wwedite radius okruzhnosti R >');
READLN(R);

WRITE(CHR(17B),CHR(27),'H',CHR(27),'J');
CIRCLE(X0, Y0, R, '.');

REPEAT UNTIL FALSE;
END.


Результат











.....
... ...
.. ..
.. ..
. .
. .
. .
. ..
.........


Что требует доработки.
- Более тщательный учёт округления челочисленной арифметики, особенно учитывая небольшой диапазон значений по X и особенно по Y (в наброске проги - не парился)
- Учёт несимметричности экрана по координатам X и Y (квадрат при подходе в лоб будет выглядеть прямоугольником) (в наброске проги - коэффициент 2 для оси Y - реальный коэффициент будет чуть больше двух)

- - - Добавлено - - -

Как выглядит окошко, в котором всё это было нарисовано. Минут за 20 :)



.............................................! !
.............................................! 2!C.LST
C.PAS .......................................! 1!C.PAS
C.BLD .......................................! !C.BLD
C.TSK .......................................! !C.TSK
.............................................! !C.OBJ
.............................................! !
.............................................! !
.............................................! !
.............................................! !USERCCL.CCL
[* КОНЕЦ ТЕКСТА *]

hobot
24.12.2020, 12:21
Что требует доработки.


Не силен в Паскале, расскажу на словах, для дисплея 15-ИЭ-00хххх.
Нужно нарисовать на экране размером 80х24 символа круг из буковок, используя позиционирование курсора , привязанное к функции Кос и Син.

И похоже MM сильно переживает за размер исполняемого файла

Hunta
24.12.2020, 12:27
привязанное к функции Кос и Син.
Не вижу в твоём варианте.


сильно переживает за размер исполняемого файла
Значит, писать на MACRO. Кстати, свой вариант я перенесу минут за 10.

hobot
24.12.2020, 12:38
Не вижу в твоём варианте.
так я же пояснил , что для начала просто по двум точкам попробовал построить цирцле из #
синусы - косинусы - это пока в сторонку было отложено...ибо я с выводом на жкран ничего не получилось.


Значит, писать на MACRO.
ну вот, а MM зачем то понадобился Паскаль )
Да ещё и син , и цос - не я ТЗ писал, мой набросок - это попытка нахрапом символьную окружность построить.
Как и твой, только у меня цикл отрисовки "НЕ РАБОТАЕТ". Повторюсь - копал в форумах, но там все "хитромодные"
все рисуют графмодулем.

У OMSI PASCAL - исполняемый файл на выходе весьма мал. По сравнению с более поздними версиями Паскалей на его основе. В архиве он оформлен как PASDWK.(SAV,OBJ)

Hunta
24.12.2020, 12:50
ибо я с выводом на жкран ничего не получилось
У тебя в слове "я" ошибка

Oleg N. Cher
25.12.2020, 02:24
Господа хорошие, окружности лучше всего рисовать не синусом и косинусом, а квадратами, даже не выходя на вещ. арифметику.


PROCEDURE Circle (cx, cy, radius: INTEGER);
VAR
x, y, rr, xx, yy: INTEGER;
PROCEDURE Cursors;
BEGIN
PutPixel(cx+x, cy+y); PutPixel(cx-x, cy+y);
PutPixel(cx+x, cy-y); PutPixel(cx-x, cy-y);
PutPixel(cx+y, cy+x); PutPixel(cx-y, cy+x);
PutPixel(cx+y, cy-x); PutPixel(cx-y, cy-x)
END {Cursors};
BEGIN
x := radius; y := 0; rr := x*x; xx := rr-x; yy := 0;
REPEAT
Cursors; INC(yy, y+y+1); INC(y);
IF xx > (rr-yy) THEN BEGIN INC(xx, 1-x-x); DEC(x); Cursors END
UNTIL x < y
END {Circle};

hobot
25.12.2020, 05:03
вещ. арифметику.
экранные координаты и окружность из символов , только целый тип.
А можешь по ТЗ сочинить? И показать MM размеры исполняемого файла?
Хотя всегда есть шанс, что "препод", просто оценив старания экзаминующихся, поставит зачёт за половину ответа )))

Oleg N. Cher
25.12.2020, 08:52
Лучше предложи как доработать, чтобы программа учитывала разный аспект соотношений сторон, для текстового режима это важно)

Hunta
25.12.2020, 09:00
Лучше предложи как доработать, чтобы программа учитывала разный аспект соотношений сторон
Мне уже весело.

Oleg N. Cher
25.12.2020, 09:03
А можешь по ТЗ сочинить? И показать MM размеры исполняемого файла?Неа - вломы. Но пусть берёт OMSI Pascal, там будет компактно)

hobot
25.12.2020, 14:15
Но пусть берёт OMSI Pascal, там будет компактно)
напомню, что для паскалей на основе OMSI Pascal - специально для УК-НЦ есть модуль+библиотека GRAY, требует предварительной загрузки GRAY.SAV, автор А.Фоменко (ASPcorp.)



program tsgray;(* (c) Фoмeнкo C.A. 7-Mapтa-1990 гoдa. *)
var
i : integer;
c : char;

procedure init; external;
(* инициaлизaция paбoты c пaкeтoм *)
procedure finit; external;
(* oкoнчaниe paбoты c пaкeтoм *)

procedure window(xl,yb,xr,yt:integer); external;
(* Уcтaнoвкa oкнa вывoдa гpaфики *)

procedure ramka; external;
(* Уcтaнoвлeниe paмки в oкнe тeкyщим цвeтoм
и типoм линии *)

procedure newpicture(i:integer); external;
(* Oтчиcткa тeкyщeгo oкнa i-cпocoб oтчиcтки *)
(* 0-инвepcиeй,1-нaлoжeниeм,2-oтчиcткoй пo мacкe
3-ycтaнoвкoй цвeтa *)

procedure drawmode(i:integer); external;
(* Зaдaниe cпocoбa pиcoвaния 0,1,2,3 *)

procedure color(i:integer); external;
(* Зaдaниe цвeтa гpaфики 0..7 *)

procedure linestyle(i:integer); external;
(* Зaдaниe типa линии 0..7 *)

procedure userstyle(i:integer); external;
(* Зaдaниe пoльзoвaтeльcкoгo типa линии *)

procedure line(x,y,x1,y1:integer); external;
(* Пpopиcoвкa линии *)

procedure dot(x,y:integer); external;
(* Пpopиcoвкa тoчки *)

procedure grdot(x,y:integer); external;
(* Пpopиcoвкa тoчки гpaфикa в cooтвeтcтвии
c тeкyщим типoм линии *)

procedure circle(x,y,r:integer); external;
(* Пpopиcoвкa oкpyжнocти *)

procedure arc(x,y,r,xs,ys,xt,yt,cw:integer); external;
(* Пpopиcoвкa дyги *)

procedure fill(x,y:integer); external;
(* Зaливкa пpoизвoльнoй oблacти *)

procedure square(x,y,x1,y1:integer); external;
(* Пpopиcoвкa квaдpaтa *)

procedure setcol(c,i:integer); external;
(* Уcтaнoвкa cooтвeтcтвия цвeтa *)

procedure screen(i:integer); external;
(* Уcтaнoвкa paзмepoв экpaнa 1,2,3,4 *)

procedure chcolor(i:integer); external;
(* Уcтaнoвкa цвeтa a/ц. cимвoлoв *)
procedure chkurs(i:integer); external;
(* Уcтaнoвкa цвeтa a/ц. кypcopa *)
procedure sccolor(i:integer); external;
(* Уcтaнoвкa цвeтa экpaнa. cимвoлoв *)
procedure stcolor(i:integer); external;
(* Уcтaнoвкa цвeтa cтpoки *)
(* Пpи зaдaнии цвeтa мeньшe 0 пpoиcxoдит
вoccтaнoвлeниe пpeдыдyщeгo цвeтa *)

procedure invers(onof:integer); external;
(* Уcтaнoвкa/cнятиe инвepcии a/ц. cимвoлoв
1-Уcтaнoвкa 0-cнятиe *)

procedure podch(onof:integer); external;
(* Уcтaнoвкa/cнятиe пoдчepкивaния a/ц. cимвoлoв
1-Уcтaнoвкa 0-cнятиe *)

procedure anpos(x,y:integer); external;
(* Пoзициoниpoвaниe a/ц кypcopa *)

procedure vanpos(x,y:integer); external;
(* Пoзициoниpoвaниe a/ц кypcopa близкo к гpaфикe *)

procedure anclear(x,y:integer); external;
(* oтчиcтк a/ц диcплeя дo кoнцa экpaнa *)

procedure setchsize(dx,dy:integer); external;
procedure setchup(up:integer); external;
procedure character(x,y:integer;c:char); external;
procedure string(x,y,dx,dy:integer); external;

begin(* main *)
init;
chkurs(1);
sccolor(1);
stcolor(1);
anclear(1,1);
window(20,23,620,243);
color(2);
ramka;
window(21,24,619,242);
color(0);
newpicture(3);
color(6);
for i:=0 to 7 do
begin
linestyle(i);
line(5,25+i*10,400,25+i*10);
end;
color(4);
linestyle(5);
circle(600,122,200);
linestyle(0);
circle(500,122,20);
fill(500,122);
linestyle(7);
color(3);
line(0,180,400,180);
linestyle(0);
color(2);
line(400,185,410,180);
line(400,180,410,180);
line(400,175,410,180);
circle(10,180,3);
fill(10,180);
linestyle(2);
color(5);
for i:=10 to 400 do
grdot(i,trunc(sin((i-10)/57)*50)+180);
setchsize(1,1);
setchup(12);
string(10,165,9,0);
write('Гpaфик y=Sin(x)',chr(12));
anpos(10,23);
chcolor(2);
write('Кpacный');
write(' ');
chcolor(-1);
chcolor(1);
stcolor(0);
write('cиний');
stcolor(-1);
chcolor(-1);
write(' ');
chcolor(4);
write('зeлeный ');
write(' ');
invers(1);
write('инвepcный');
invers(0);
write(' ');
podch(1);
write('пoдчepкнyтый');
podch(0);
readln(c);

chcolor(-1);
stcolor(-1);
sccolor(0);
chkurs(6);
finit;

end.(* main *)

Hunta
25.12.2020, 14:21
напомню, что для паскалей на основе OMSI Pascal - специально для УК-НЦ есть модуль+библиотека GRAY,
Кто то мне что тут про ТЗ намекал, я этом кому то тоже напоминаю

для дисплея 15-ИЭ-00хххх.
Нужно нарисовать на экране размером 80х24 символа круг из буковок, используя позиционирование курсора

hobot
25.12.2020, 14:26
Кто то мне что тут про ТЗ намекал, я этом кому то тоже напоминаю
ха! у вас получилось написать, у меня только вычисление элементарной формулы по двум точкам,
не понимаю как символами строить, скопипастить могу, а сам выдумать пока не могу. А син и кос,
я уже пол пальца предложим MM, но ему лень в Зелек переть забирать )))

Hunta
25.12.2020, 14:30
не понимаю как символами строить
Я показал - как

hobot
25.12.2020, 14:34
модуль+библиотека GRAY Alex_K отмечал, что все эти граф. построения в УК-НЦ прошиты где-то в ёё мозгах,
вот видимо оттуда все эти граф. навеси для ПАСКАЛЯ растут, напомнил про пакет -
если кому графики (хотя ИМХО:Бейсик-Вильнюс проще использовать наверное) порисовать
на Паскале захочется и построения всякие (хобби у всех разные бывают).

- - - Добавлено - - -


Я показал - как
а я видел ) не пропадёт ваш листинг - тема богатеет примерами. Так держать!

MM
25.12.2020, 14:40
как символами строить
В командах дисплея 15-ИЭ-хх есть ESC последовательность позиционирования курсора, добавляем в координаты результат функции Син и Кос ( для Х и У координат ), и пишем туда буковку "А", или др. ASCII код.
Табличка ESC команд , подходящих для дисплея, есть в паспорте КЦГД :
http://www.emuverse.ru/wiki/%D0%94%D0%92%D0%9A

Подстраивать плоскость круга можно , изменяя множители к результату функций Син и Кос.

Все ли посещали уроки информатики в школе ?

hobot
25.12.2020, 14:47
Все ли посещали уроки информатики в школе ?
у меня информатики в школе не было к сожалению, а вот позиционирование курсора и другие послед. в моём и других листингах есть )

- - - Добавлено - - -


уроки информатики
тут надо уже геометрию и тригонометрией вспоминать, а вы говорите информатика. )))
за ненадобностью всё потёрлось , сложение векторов, построение окружностей, а число пи я всегда ненавидел )))

hobot
05.04.2021, 23:34
nzeemin,



PROCEDURE TTYOUT(N:INTEGER);
CONST R=200B;
VAR A ORIGIN 177564B, D ORIGIN 177566B:INTEGER;
BEGIN
WHILE (A AND R)=0 DO;
D:=N;
END; /* THIS PROCEDURE WAS COPIED FROM HPIC.PAS */

PROCEDURE GOTOXY(XX,YY: INTEGER);
BEGIN
WRITE(CHR(27),'Y',CHR(32+YY),CHR(32+XX));
END;




American Standart Code for Information Interchange /ASCII/
-------------------+--------------------+------------------
Symbol Code | Symbol Code | Symbol Code
-------------------+--------------------+------------------
Null 0 0. | @ 100 64. | Ю 140 96.
Control-A 1 1. | A 101 65. | А 141 97.
Control-B 2 2. | B 102 66. | Б 142 98.
Control-C 3 3. | C 103 67. | Ц 143 99.
Control-D 4 4. | D ( 104 68. | Д 144 100.
Control-E 5 5. | E 105 69. | Е 145 101.
Control-F 6 6. | F 106 70. | Ф 146 102.
Bell 7 7. | G 107 71. | Г 147 103.
Backspace 10 8. | H 110 72. | Х 150 104.
Tab 11 9. | I 111 73. | И 151 105.
Line Feed 12 10. | J 112 74. | Й 152 106.
Vert Tab 13 11. | K 113 75. | К 153 107.
Form Feed 14 12. | L 114 76. | l 154 108.
Carr Ret 15 13. | M 115 77. | М 155 109.
Control-N 16 14. | N 116 78. | Н 156 110.
Control-O 17 15. | O 117 79. | О 157 111.
Control-P 20 16. | P 120 80. | П 160 112.
Control-Q 21 17. | Q 121 81. | Я ` 161 `113.
Control-R 22 18. | R 122 82. | Р 162 114.
Control-S 23 19. | S 123 x3. | С 163 115.
Control-T 24 20. | T 124 84. | Т )164 116.
Control-U 25 21. | U 125 85. | У 165 117.
Control-V 26 22. | V 126 86. | Ж 166 118.
Control-W 27 23. | W 127 87. | Б 167 119.
Control-X 30 24. | X 130 88. | Ь 170 120.
Control-Y 31 25. | Y 131 89. | Ы 171 121.
Control-Z 32 26. | Z 132 90. | З 172 122.
Escape 33 27. | [ 133 91. | Ш 173 123.
Control-\ 34 28. | \ 134 92. | Э 174 12<.
Control-] 35 29. | ] 135 93. | Щ 175 125.
JControl-^ 36 30. | ^ 136 94. | Ч 176 126.
Control-_ 37 31. | _ 137 95. | Забой 177 127.
Space 40 32. | ` 140 96. | ю 100 64.
! 41 33. | a 141 97. | а 111 65.
" 42 s4. | b 142 98. | б ` 102 66.
# 43 35. | c 143 99. | ц 103 67.
$ 44 36. | d 144 100. | д 104 68.
% 45 37. | e 145 )101. | е 105 69.
& 46 38. | f 146 102. | NF 106 70.
' 47 39. | g 147 103. | г 107 71.
( 50 40. | h 150 104. | х 110 72.
) 51 41. | i 151 105. | и 111 73.
* 52 42. | j 152 106. | й 112 74.
+ 53 `43. |` k 153 107. | к` 113 75.
, 54 44. | l 154 108. | л 114 76.
- 5u 45. | m 155 109. | м 115 77.
. 56 46. | n 156) 110. | н 116 78.
/ 57 47. | o 157 111. | о 117 79.
0 60 48. | p 160 112. | п 120 80.
1 61 49. | q 161 113. | я 121 81.
2 62 50. | r 162 114. | р 122 82.
3 63 51. | s 163 115. | с 123 83.
4 64 52. | t 164 116. | т 124 84.
5 65 53. | u 165 117. | у 125 85.
6 66 54. | v 166 118. | ж 126 86.
7 67 55. | w 16? 119. | б 127 87.
8 70 56. | x 170 120. | ь 130 88.
9 71 57. | y 171 121. | ы 131 89.
: 72 58. | z 172 122. | з 132 90.
; 73 59. | { 173 123. | ш 133 91.
< 74 60. | | 174 124. | э 134 92.
= 7u 61. | } 175 125. | щ 135 93.
> 76 62. | ~ 176 126. | ч 136 94.
? `77 63. | Rubout 177 127. | ъ 137 95.
-------------------+--------------------+------------------

А л ф а в и т н о - ц и ф р о в а я к л а в и а т у р а Д В К
+----+----+----+ +----+----+----+ +----+----+----+
|СБР |СТР |СТС | |АР1 | С1 |АР2 | |ПРД |ПРМ |ПРС |
| 14 | 37 | 13 | | 20 | 1 | 33 | | 36 | 21 | 6 |
+----+----+----+ +----+----+----+ +----+----+----+
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| ; | 1 | 2) | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |ТАБ | ГТ |
| + | ! | " | # | $ | % | & | ' | ( | ) | | = | | |
| 73 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 70 | 71 | 60 | 55 | 30 | 11 |
| 53 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 50 | 51 | 60 | 75 | | |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| Й | Ц | У | К | Е | Н | Г | Ш | Щ | З | Х | : | ПС | ВК |
| J | C | U | K | E | N } G | [ | ] | Z | H | * | | |
|112 |103 |125 |113 |10u |116`|107 |133 |135 |132 |110 | 72 | 12 | 15 |
|152 |143 |165 |163 |145 |156 |147 |173 |175 |172 |150 | 52 | | |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| СУ | Ф | Ы | В | А | П !| Р | О | Ло Э Д | Ж | Э | . |`ЗБ |
| | F | Y | W | A | P | R | O | L | D | V | \ | > | `|M
| |106 |131 |127 |101 |120 |122 |117 |114 |104 |126 |134 | 56 | 10 |
|-180|146 |171 |167 |141 |160 |162 |157 |154 |144 |166 |174 | 76 | |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| ВР | Я | Ч | С | М | И | Т | Ь | Б | Ю | , | / | | НР |
| | Q | ^ | S | M | I | T | X | B | @ | < | ? | _ | |
| |121 |136 |123 |115 |111 |124 |130 |102 |100 | 54 | 57 |177 | |
| |161 |176 |163 |155 |151 |164 |170 |142 |140 | 74 | 77 |137 |+40 |
+----+----+----+----+----+----+----+----+----+-,--+----+----+----+----+
| РУС | ПРОБЕЛ ` | ЛАТ |
| 16 | 40 | 17 |M
+---------+-------------------------------------------------+---------+

Дополнительная цифровая и служебная кмавиатуры Д В К
й `Без ДК С ДК Ю 1-я и 2-я с.к. С ДК
+----+----+----+ +----+----+----+ k-m--+----+----+ +----+----+---m+
| 7 | 8 | 9 | | 7 | 8 | 9 | | 25 } 34 | 15 | |125^|101E|115D|
| 67 | 70 | 71 | |127D|130D|131D| |125^|101E| 15 | |$^U |$A |$?M |
+----+----+----+ +----+----+----+ +----+----+----+ +----+----+----+
| 4 | 5 | 6 | | 4 | 5 | 6 | | 32 | 10 | 31 | |104E|110^|103E|
| 64 | 65 | 66 | |124D|125D|126D| |104E|110^|103E| `|$D |$^H |$C |
+----+----+--m-+ +----+----+----+ +----+----+----+ +----+----+----+
| 1 | 2 | 3 | | q | 2 | 3 | | 24 | 35 | 23 | |124^|102E|123^|
| 61 | 62 | 63 | |921D|122D|123D| |124^|102E|123^| |$^T |$D |$^S |
+----+----+----+ +----+----+----+ +----+----+----+ +----+----+----+
| 0 |, 54| | 0 | , | | 26 | 2 | 22 | |120E|121E|122E|
| 60 |. 56| | 120D |116D| |120E|121E|122E| |$P |$Q |$R |
+---------+----+ +---------+----+ +----+----+----+ +----+----+----+
E - ESC-Коды - 33 ... - $ ...
^ - ESC-Коды - 33 136 ... - $^...
D - Коды дополнительной клавиаттры - 33 77 ... - $?...
ESC-Коды для вывода на экран:
033 075 '=' - Установка дополнительной клавиатуры
033 076 '>' - Сброс дополнительной клавиатуры
033 105 'E' - Переход к системе команд 1
033 110 'H' - Возврат маркера в координаты 0,0
033 111 'I' - Маркер вверх со сдвигом первой строчки
033 112 'J' - Стирание от маркера до конца экрана
033 113 'K' - Стирание строки от маркера
033 131 'Y' - Прямая адресация маркера /033 131 040+Y 040+X/
033 132 'Z' - Выдача командной послемовательности 033 132

hobot
07.04.2021, 00:31
Кстати, в этом же справочнике я пытался найти как впихнуть в строку символы с произвольным кодом. В OMSI это сделать нельзя.
с этого места расшифруй пожалуйста - что такое "впихнуть с произвольным кодом в строку"
- что такое "произвольный"
- что ты называешь строкой?
одномерный массив CHAR, переменную типа STRING из Фортрановской SYSLIB или аргумент оператора WRITE \ WRITELN ???

Oleg N. Cher
07.04.2021, 01:53
Ну смотри. В строке WRITE('Stroka') есть шесть символов с кодами ASCII, т.е. коды эти могут быть от 32 (пробел) до 127 (какая-нить зюка). Как ты сам выяснил, можно в строку пихать переход на новую строку: WRITE('S1
S2'); и табуляцию. Это управляющие коды. И, например, XDev тебе этак запросто их добавить в строку не даст. OMSI Pascal разрешает.

А мы интересуемся вообще добавлять в эту строку любые произвольные управляющие коды, т.е. ниже 32 и выше 127. Чего OMSI Pascal не позволяет по стандарту (набор символов ASCII находится быть в диапазоне 32..127; выше может находиться псевдографика или русские символы. Ниже - управляющие коды. Но они разные на разных машинах. Поэтому стандарт тупо рубит их использование).

Выводить символы с произвольным кодом всё-таки можно - через WRITE(CHR(код)), но Никита спрашивал как их в строку упихнуть. А, получается, что никак нельзя. Но, возможно, в OMSI Pascal 2 что-то такое и можно.

- - - Добавлено - - -

P.S. Под строкой я в данном контексте подразумеваю строчный литерал, взятый в апострофы.

hobot
07.04.2021, 02:21
OMSI Pascal разрешает.
транслятор проверяет только синтаксис и тип данных
позволяет скорее редактор местный текстовый - который единственно правильный для работы
с исходниками может оказаться в некоторых случаях...

тип "СТРОКА" - одна из возможных реализаций для OMSI PASCAL


CONST STRINGMAX=100;

TYPE STRING=RECORD
LEN: 0..STRINGMAX;
CH: PACKED ARRAY[1..STRINGMAX] OF CHAR
END;

FUNCTION LEN(VAR S:STRING):INTEGER;
BEGIN LEN:= S.LEN
END;

PROCEDURE CLEAR(VAR S:STRING);
VAR I: INTEGER;
BEGIN S.LEN:=0;
FOR I:=1 TO STRINGMAX DO S.CH[I]:=' '
END;

PROCEDURE CONCATENATE(VAR S:STRING; VAR T:STRING);
VAR I,J: INTEGER;
BEGIN
IF S.LEN+T.LEN>STRINGMAX
THEN J:=STRINGMAX-S.LEN (* OVERFLOW *)
ELSE J:=T.LEN;
FOR I:=1 TO J DO S.CH[S.LEN+I]:=T.CH[I];
S.LEN:=S.LEN+J;
END;

FUNCTION SEARCH(VAR S,T:STRING; START:INTEGER):INTEGER;
VAR I,J: 0..STRINGMAX;
UNEQ: BOOLEAN;
BEGIN
IF START<1 THEN START:=1;
IF (START+T.LEN>S.LEN+1) OR (T.LEN=0)
THEN SEARCH:=0
ELSE BEGIN
I:=START-1;
REPEAT
I:=I+1; J:=0;
REPEAT
J:=J+1;
UNEQ:=T.CH[J]<>S.CH[I+J-1];
UNTIL UNEQ OR (J=T.LEN);
UNTIL (NOT UNEQ) OR (I=S.LEN-T.LEN+1);
IF UNEQ
THEN SEARCH:=0
ELSE SEARCH:=I;
END;
END;

PROCEDURE READSTRING(VAR F:TEXT; VAR S:STRING);
BEGIN
CLEAR(S);
WITH S DO
WHILE (NOT EOLN(F)) AND (LEN<STRINGMAX) DO BEGIN
LEN:=LEN+1;
READ(F,CH[LEN]);
END;
READLN(F);
END;

PROCEDURE WRITESTRING(VAR F:TEXT; VAR S:STRING);
BEGIN WRITE(F,S.CH:S.LEN)
END;

PROCEDURE SUBSTRING(VAR T:STRING; VAR S:STRING; START,SPAN:INTEGER);
VAR I: INTEGER;
BEGIN
IF SPAN<0 THEN BEGIN SPAN:= -SPAN; START:=START-SPAN END;
IF START<1 THEN BEGIN SPAN:=SPAN+START-1; START:=1 END;
IF START+SPAN>S.LEN+1 THEN SPAN:=S.LEN-START+1;
IF SPAN<=0
THEN CLEAR(T)
ELSE BEGIN
FOR I:=1 TO SPAN DO T.CH[I]:=S.CH[START+I-1];
FOR I:=SPAN+1 TO STRINGMAX DO T.CH[I]:=' ';
T.LEN:=SPAN;
END;
END;

PROCEDURE DELETE(VAR S:STRING; START,SPAN:INTEGER);
VAR I,LIMIT: INTEGER;
BEGIN
IF SPAN<0 THEN BEGIN SPAN:=-SPAN; START:=START-SPAN END;
LIMIT:=START+SPAN;
IF START<1 THEN START:=1;
IF LIMIT>S.LEN+1 THEN LIMIT:=S.LEN+1;
SPAN:=LIMIT-START;
IF SPAN>0 THEN BEGIN
FOR I:=0 TO S.LEN-LIMIT DO S.CH[START+I]:=S.CH[LIMIT+I];
FOR I:=S.LEN-SPAN+1 TO S.LEN DO S.CH[I]:=' ';
S.LEN:=S.LEN-SPAN;
END;
END;

PROCEDURE INSERT(VAR S:STRING;VAR T:STRING; P:INTEGER);
VAR I,J: INTEGER;
BEGIN
IF T.LEN>0 THEN
IF (P>0) AND (P<=S.LEN+1)
THEN BEGIN
IF S.LEN+T.LEN<=STRINGMAX
THEN S.LEN:=S.LEN+T.LEN
ELSE S.LEN:=STRINGMAX (* OVERFLOW *) ;
FOR I:=S.LEN DOWNTO P+T.LEN DO S.CH[I]:=S.CH[I-T.LEN];
IF S.LEN<P+T.LEN
THEN J:=S.LEN
ELSE J:=P+T.LEN-1;
FOR I:=P TO J DO S.CH[I]:=T.CH[I-P+1];
END
ELSE (* ERROR: NON-CONTIGUOUS STRING *)
END;

Oleg N. Cher
07.04.2021, 02:36
Ну я ж тебе сказал, что под строкой понимаю литерал, т.е. строковую константу. И пихать мы хотели не на уровне зюк, которые редактор может исказить, а на уровне кодов. В ТурбоПаскаль можно, в Дельфи можно. В OMSI походу нельзя.

Про строчные операции я не спрашивал. И под конкатенацией тоже подразумевал конкатенацию литералов, т.е. на уровне констант. Сможешь объявить строку с кодами в секции CONST - будет тебе респект. Но что-то я в этом сильно сомневаюсь.

Да оно не особо мешает, на то и стандарт. Сначала придумывали стандарты, потом - как их обходить)

hobot
07.04.2021, 03:22
Сможешь объявить строку с кодами в секции CONST - будет тебе респект.
это несбыточно... такое "низя!!!", не надо меня на слабо тянуть заведомо несбыточными хотелками...
я подразумевал то что написал... подходит не подходит под "ваши там запросы" - это не мне решать и не моя проблема, а вот информативность данной темы не флудом, а обсуждением и добавление ещё одной шпаргалки я с удовольствием (как видишь (https://zx-pk.ru/threads/20444-pascal-macro11-(uknts-dvk).html?p=1112133&viewfull=1#post1112133)) ...

Про строчные операции я не спрашивал.
а я на твой вопрос и не отвечал, я просто уточнил твою терминологию, ибо мудрённо вы программисты вещаете...

Кстати сейчас занят "пофиксить" и "пере \ до укомплектовать" образ дискеты по Паскалю... что бы побольше полезностей на 1-ой дискете...позже отпишусь...тут кстати кто то уже для себя поставку полностью пересобрал по паскалю...было обсуждение помнится...

По поводу твоей последней ссылки на какой-то там справочник - хочешь конкретно с ОМСИ работать - надо ДОКи по нему и читать - тогда вопросов не будет ни по УТИЛИТАМ, ни по коду, ни по отладке...

а как тебе вот такой пример?



BEGIN

WRITELN('СТРОКА 1 :');
WRITELN('СТРОКА 2',':':14);
WRITELN('':20,'ПРИВЕТ!!!');

WRITELN('^C ');
END.














Exit? Y

HD7>PASDWK TRISTR=TRISTR

ERRORS DETECTED: 0
FREE MEMORY: 10120 WORDS

HD7>MAC TRISTR

HD7>LIN TRISTR,PASDWK

HD7>RU TRISTR
СТРОКА 1 :
СТРОКА 2 :
ПРИВЕТ!!!


HD7>



в начале исходник в редакторе ;-)
в конце протокол выполнения, и вставленный символ виден только в редакторе,
если вывести на дисплей системной командой файл исходника - там "как бы пусто"



HD7>TY TRISTR.PAS
PROGRAM TROSTROKI;
BEGIN

WRITELN('СТРОКА 1 :');
WRITELN('СТРОКА 2',':':14);
WRITELN('':20,'ПРИВЕТ!!!');

WRITELN(' ');
END.


HD7>


а в супер функциональном NYS.SAV(он же EDIK.SAV)
как видим "оно ест" ))) И чито ви скажите на это уважаемый ?



BEGIN

WRITELN('СТРОКА 1 :');
WRITELN('СТРОКА 2',':':14);
WRITELN('':20,'ПРИВЕТ!!!');

WRITELN('^C ');
END.














Exit? Y



это опять просто информация по теме, а не ответ и не попытка что то где то притянуть
под "воссоздание" исходника (https://zx-pk.ru/threads/29331-igra-quot-zona-quot-na-dvk.html) -

Oleg N. Cher
07.04.2021, 04:43
Ну мало ли чего ест ваш Эдик ;-) Я как раз против таких подходов, потом можно проблем отгребсти.

hobot
07.04.2021, 06:57
Ну мало ли чего ест ваш Эдик ;-) Я как раз против таких подходов, потом можно проблем отгребсти. все твои проблемы за пределами аутентичной среды, а следовательно тут их обсуждать не корректно и противопоказано, как и прочие всякие ЗЫКС-мейкеры и ДЖАВА... Тут только правильное, аутентичное, с замечательным функционалом, продуманное, человеческое ПО, в реальном времени ;-)

Потихоньку - помаленьку буду компоновать fix. сборник по ПАСКАЛЮ,
пока так (как пишет тов. Хунта ) для затравочки



Image : PASCAL.DSK

Format : DSK : RT-11
Size : 800 Kb

Volume ID: RT11A
Owner :

File Blocks Date Bytes
---------- ------ ----------- ----------
PASDOC.TXT 2 07-Apr-2021 1'024
PASDOC.FCU 220 07-Apr-2021 112'640
PASFPP.FCU 76 07-Apr-2021 38'912
PASFPP.TXT 2 07-Apr-2021 1'024
PASDWK.FCU 70 07-Apr-2021 35'840
PASDWK.TXT 2 07-Apr-2021 1'024
PASY2K.FCU 85 07-Apr-2021 43'520
PASY2K.TXT 2 07-Apr-2021 1'024
< UNUSED > 1127 577'024
---------- ------ ----------- ----------
8 Files, 459 Blocks
1127 Free blocks


PASDOC.TXT :


List contents of archive: PASDOC.FCU
Fcu v2.03. Shurick inc. Dec 23 1994.
7-Apr-89. List contents of archive PASDOC.FCU

Name Date Original Compressed ratio
PASCAL.LST 7-Apr-89 176 61.742 35%
PASUSE.LST 7-Apr-89 161 54.234 34%
PASCAL.LAN 7-Apr-89 181 66.477 37%
PASCAL.RUK 7-Apr-89 112 37.195 33%
4 Files, 630 blocks.

АРХИВ СОДЕРЖИТ ОПИСАНИЕ ЯЗЫКА, РУКОВОДСТВО
ПО ПРОГРАММИРОВАНИЮ И ОТЛАДКЕ ПРОГРАММ НА
ЯЗЫКЕ ПАСКАЛЬ.

archive.pdp-11.org.ru


PASFPP.TXT :



Create new archive: PASFPP.FCU
archiving:
61% PASFPP.SAV 59 07-Apr-89
54% PASFPP.OBJ 74 07-Apr-89
Length of archive: 76 block(s), ratio: 57%

PASFPP.FCU 76 07-Apr-2021

List contents of archive: PASFPP.FCU
Fcu v2.03. Shurick inc. Dec 23 1994.
7-Apr-89. List contents of archive PASFPP.FCU

Name Date Original Compressed ratio
PASFPP.SAV 7-Apr-89 59 36.113 61%
PASFPP.OBJ 7-Apr-89 74 39.797 54%
2 Files, 133 blocks.

АРХИВ СОДЕРЖИТ ОДИН ИЗ ВАРИАНТОВ
ТРАНСЛЯТОРА ПАСКАЛЯ И БИБЛИОТЕКИ

archive.pdp-11.org.ru

nzeemin
07.04.2021, 13:22
Ребят, а что с русским языком в этом Паскале? есть версия с поддержкой КОИ-8 или только КОИ-7 ?

Hunta
07.04.2021, 13:46
есть версия с поддержкой КОИ-8
Вторая версия (под RSX) послала...

- - - Добавлено - - -

Технически, я думаю, можно попробовать хакнуть

nzeemin
07.04.2021, 21:32
Нашёл вот такую интересную ссылку:

http://www.ibiblio.org/pub/academic/computer-science/history/pdp-11/rsx/decus/rsx82b/351130/readme.1st

Что позволяет предположить, что есть утилита OMSI Improver, которая умеет оптимизировать выхлоп после OMSI Pascal, да ещё и весьма неслабо. Это что-то вроде peephole-оптимизатора, заменяющего по встроенному набору правил последовательности асм-инструкций на такие же по функциональности, но более компактные. Мне конечно интересно было бы увидеть эту утилиту, если она найдётся.

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

В документации написано что она делает -
The utility program IMP decrases the size of the object code produced by Pascal-1 by replacing branch/jump combinations with sigle branches when possible.
То есть, если идёт подряд BEQ xxxx / JMP yyyy (3 слова) - если yyyy отстоит недалеко, то это заменяется на BNE yyyy (1 слово).
Такая конструкция встречается в каждом IF, FOR, WHILE.

- - - Updated - - -

Вообще в этом Паскале IF, WHILE - относительно лёгкие, а вот FOR довольно громоздкий:


FOR I:=1 TO 10 DO BEGIN
WRITELN;
END;



; FOR I:=1 TO 10 DO BEGIN
MOV %5,-(6)
ADD #xxxx,%0
MOV #1,-(6)
MOV #10,-(6)
MOV 2(6),@4(6)
L1:
CMP @4(6),(6)
BLE .+6
JMP L2
; WRITELN;
JSR %7,$B36
; END;
INC @4(6)
JMP L1
L2:
ADD #6,%6
L0:

Итого - 19-21 слов на обеспечение цикла FOR (на два слова меньше если переменная объявлена первой).

Hunta
07.04.2021, 21:51
; FOR I:=1 TO 10 DO BEGIN
MOV %5,-(6)
ADD #xxxx,%0



Скорей так


; FOR I:=1 TO 10 DO BEGIN
MOV R5,R0
ADD #xxxx,R0
MOV R0,-(SP)

И ещё бывает такой вариант


; FOR I:=1 TO 10 DO BEGIN
MOV SP,R0
ADD #xxxx,R0
MOV R0,-(SP)

Ну и ещё бывает


L1:
CMP @4(6),(6)
BGE .+6
...
DEC @4(6)
...


- - - Добавлено - - -

Из восстанавливаемого исходника DIGER-а


P.FOR IDXVAR R5 AT #3654 FROM #1 TO #7 BEGIN
...
P.END


- - - Добавлено - - -

Оттуда же


P.FOR IDXVAR SP AT #6 FROM #1 TO #17 BEGIN
P.FOR IDXVAR SP AT #16 FROM #1 TO #3 BEGIN
...
CHKARR INDEX R0 AT RANGE LOW #1 HIGH #20
...
CHKARR INDEX R1 AT RANGE LOW #1 HIGH #17
...
P.END
...
CHKARR INDEX R0 AT RANGE LOW #1 HIGH #20
...
CHKARR INDEX R0 AT RANGE LOW #1 HIGH #20
...
P.END


- - - Добавлено - - -

Ещё CASE под макрос убрать, а потом допилить макросы описания локальных переменных и вообще почти Паскаль получится :)

nzeemin
07.04.2021, 22:02
Ещё CASE под макрос убрать, а потом допилить макросы описания локальных переменных и вообще почти Паскаль получится :)

У нас с вами разный подход.
Мне ваши макросы не кажутся ни понятными ни удобными.
Можно же смотреть на конструкции в ассемблере и сразу в Паскаль записывать.
Но это уж кому как удобнее конечно.

Hunta
07.04.2021, 22:13
Можно же смотреть на конструкции в ассемблере и сразу в Паскаль записывать.
Угу. Вот только проблема - уверенным, что логика работы правильно понята, можно, только если на выходе из Паскаля будет тот же код, что и в исходном .SAV файле. А уже понятно, что не получится. Если же на выходе другой код - 100 процентной уверенности нет.

В моём случае логика будет точно такой же - ибо на выходе .SAV файл идентичен исходному. А по написанию будет ближе к ЯВУ. И переделать на другой или тот же язык будет проще.


Мне ваши макросы не кажутся ни понятными ни удобными.
Да ради бога. На вкус и цвет все фломастеры разные.

nzeemin
07.04.2021, 22:37
Хотелось бы найти RANDOM.PAS из поставки Паскаля.
В Сталкере реализован какой-то рандомайзер, но там ногу сломишь ползать по этому коду.
И кстати, мне так и не удалось раскодировать библиотеку Паскаля через DECOBJ - он всё время просто умирает.

Alex_K
07.04.2021, 22:46
И кстати, мне так и не удалось раскодировать библиотеку Паскаля через DECOBJ - он всё время просто умирает.
Хотелось бы узнать, как вы пытаетесь делать.

nzeemin
07.04.2021, 22:54
Хотелось бы узнать, как вы пытаетесь делать.

Через LIBR/EXCTART мне удалось вынуть один из модулей (как я понял это модуль SUPMON, в нём ещё есть $BEGIN и $VER), в файл A.OBJ размером 2048.
Дальше я пытаюсь:
>rt11 RU DECOBJ A.OBJ A.DEC
Ничего не происходит.
Памяти вроде бы должно быть достаточно. Или нет?


>rt11 SH MEM Address Module Words
------- ------ -----
170000 IOPAGE 2048.
167520 HD 88.
156602 RMON 2279.
152264 SL 1127.
001000 ..BG.. 26970.

Alex_K
07.04.2021, 23:16
Памяти вроде бы должно быть достаточно. Или нет?
DECOBJ действительно пожирает много памяти. У меня обязательно приходится делать команду SET USR SWAP.

Сейчас попробовал, немного криво сделал, но раскрутил. Там ещё руками работать надо, но сделал.

Hunta
08.04.2021, 00:24
Хотелось бы найти RANDOM.PAS из поставки Паскаля.


Directory DU1:[PASRT]
2021-04-08 01:23

RANDOM.PAS;1 1. 1994-03-06 18:30

Total of 1./1. blocks in 1. file

>TYP [PASRT]RANDOM.PAS
var
Seed: 0..65535;
I: integer;

function Random: real;
begin { Random }
Seed := (Seed * 13077 + 6925) mod 32768;
Random := Seed / 32768.0
end { Random };

begin
Seed := trunc(time * 1000.0);
for I := 1 to 25 do writeln(trunc(Random * 10.0) + 1)
end.

hobot
08.04.2021, 00:30
Ребят, а что с русским языком в этом Паскале?
И между апострофами в операторах WRITE / WRITELN и в комментариях можешь смело использовать кириллицу прямо в исходнике, только про клавишу АЛФ - забудь ;-) CTRL-N - в редакторе переключает, а в "блокнотах" всё и так ясно,
был ещё момент, когда транслятор "орёт" на точку переключения - тогда там должен быть "пробел" и он перестаёт орать...

nzeemin
08.04.2021, 00:31
Оказывается, можно и так - а я уж думал, придётся ассемблерной вставкой делать:


type charptr = ^char;
var FIL: array[1..32,1..16,0..8] of char;
V11070: charptr;
...
V11070:=@FIL[VAR14,VAR12,VAR4];
...
V11070^:=' ';

hobot
08.04.2021, 07:00
Pasprf.obj ("") - наткнулся на такой .OBJ файл на дискете с доками и "не полной" поставкой ПАСКАЛЯ
Что это и нужно ли? LIBR - отказался выдавать /LIST:TT: - ругнулся ...

nzeemin
08.04.2021, 11:28
Pasprf.obj (http://archive.pdp-11.org.ru/vid/PASPRF.rar) - наткнулся на такой .OBJ файл на дискете с доками и "не полной" поставкой ПАСКАЛЯ
Что это и нужно ли? LIBR - отказался выдавать /LIST:TT: - ругнулся ...

я думаю, это профайлер - он входит в поставку Паскаля либо как .PAS либо как .SAV, тут полусобранный вариант кто-то оставил.

hobot
09.04.2021, 02:52
nzeemin,


L40052: JMP L06650 ; рестарт игры



REPEAT
UNTIL 0>0

вечный цикл, а выход из него по условию где THEN EXIT или вызов процедуры, где .EXIT - или что то похожее (Никита, ты я чую не оступно и не отрывно! Жаль таких авторов для УК-НЦ только ты,
точнее спасибо что ты у нас есть - вот!)

попался ещё вот такой РАНДОМ в виде глобальных :: - то есть можно слинковать с паскалем как внешний



.TITLE RND
;---------------------------------------
; dat~ik sl~ajnyh ~isel
;---------------------------------------
;wHOD: 1 SLOWO W STEKE - PREDEL ^ISLA
;wYHOD 1 SLOWO W STEKE - REZULXTAT OT 0 DO PREDELA

RND:: MOV R3,-(SP)
MOV R2,-(SP)
MOV R1,-(SP)
MOV R0,-(SP)

CLR R3
1$: SEC
ROL R3
CMP R3,12(SP)
BCS 1$
COM R3
2$: MOV #19.,R0
3$: MOV RAND+2,R1
BIC #^C22,R1
BNE 4$
CLC
BR 6$
4$: CMP #22,R1
BNE 5$
CLC
BR 6$
5$: SEC
6$: ROR RAND
ROR RAND+2
SOB R0,3$
MOV RAND,R0
BIC R3,R0
CMP R0,12(SP)
BCC 2$
MOV R0,12(SP)

MOV (SP)+,R0
MOV (SP)+,R1
MOV (SP)+,R2
MOV (SP)+,R3
Return
RAND:: 1,1
;--------------------------------------

.END





ещё (просто как вариант) позиционирование курсора можно не процедурой,
а функцией символьной оформить (по аналогу как в ВИЛЬНЮС-БЕЙСИКЕ есть оператор
LOCATE, а есть функция для оператора PRINT AT(X,Y) *** )



PROGRAM LOCATE;

FUNCTION AT(XX,YY : INTEGER) : CHAR;
BEGIN
AT:='';
WRITE(CHR(27),'Y',CHR(32+YY),CHR(32+XX));
END;

BEGIN
WRITE(AT(5,9),'УХА-ХА-ХА-ХА-ХА!');
END.



и ещё РАНДОМ из исходников Петра Высотина
==============================



FUNCTION RND: REAL;
VAR IRND: INTEGER;
BEGIN
/*$C
BR M1
RN: .WORD 435
M1: MOV RN, R1
MUL #12869, R1
ADD #6925, R1
MOV R1, RN
BIC #^O100000, R1
MOV R1, IRND(SP)
*/
RND:=IRND/32767;
END;

hobot
11.04.2021, 11:05
PTIME.PAS из поставки PASCAL / PTMSK.PAS - адаптация ;-)



LD7>TY PTIME.PAS
PROGRAM PTIME;


PROCEDURE WRITETIME;
VAR R:REAL;
HOURS,MINUTES:INTEGER;
AMPM: ARRAY [1..2] OF CHAR;
BEGIN
R:=TIME;
HOURS:=TRUNC(TIME);
MINUTES:=TRUNC((R-HOURS)*60.0);
IF HOURS > 12
THEN AMPM:='PM'
ELSE IF (HOURS = 12) AND (MINUTES = 0)
THEN AMPM:='M '
ELSE AMPM:='AM';
WRITE('AT THE TONE THE TIME WILL BE:');
WRITE((HOURS+11) MOD 12 + 1 :2);
WRITE(':', MINUTES DIV 10:1,
MINUTES MOD 10:1, AMPM:3);
WRITE(CHR(7));
END;


/* НАЧАЛО ОСНОВНОГО ТЕЛА ПРОГРАММЫ */
BEGIN
WRITETIME;
END.


LD7>RU PTIME
AT THE TONE THE TIME WILL BE: 8:59 AM
LD7>TY PTMSK.PAS
PROGRAM PTIME;

CONST
MSK = 3;

PROCEDURE WRITETIME;
VAR R:REAL;
HOURS,MINUTES:INTEGER;
AMPM: ARRAY [1..2] OF CHAR;
BEGIN
R:=TIME;
HOURS:=TRUNC(TIME);
MINUTES:=TRUNC((R-HOURS)*60.0);
IF HOURS > 12
THEN AMPM:='PM'
ELSE IF (HOURS = 12) AND (MINUTES = 0)
THEN AMPM:='M '
ELSE AMPM:='AM';
WRITE('МОСКОВСКОЕ ВРЕМЯ :');
WRITE((HOURS+11) MOD 12 + MSK :2);
WRITE(':', MINUTES DIV 10:1,
MINUTES MOD 10:1, AMPM:3);
WRITE(CHR(7));
END;


/* НАЧАЛО ОСНОВНОГО ТЕЛА ПРОГРАММЫ */
BEGIN
WRITETIME;
END.


LD7>RU PTMSK
МОСКОВСКОЕ ВРЕМЯ :10:59 AM
LD7>




про различные сочетания транслятор + библиотека,
я выбрал для себя PASDWK (так он "обозван" для возможности на одной дискете иметь сразу несколько вариантов, понятное дело, что библиотека имеет такое имя как и программа транслятор), поскольку он
абсолютный победитель по размеру .SAV файла после линковки. Других параметров я не учитывал - это было решающим. Поскольку я пишу свои программы ради удовольствия и практически всегда с "нуля" - никаких проблем с этим транслятором и его библиотекой пока не испытывал, но * не проверено* ошибка в обработке массивов там похоже всё таки есть...

И возможно во всех PASCAL-ях она есть, возможно... надо проверять и, если подтвердиться, я конечно и обязательно отпишусь об этом...

Oleg N. Cher
14.04.2021, 04:37
Прочёл в книге, данной Хоботычем, такую инфу:

What is Pascal-2?

Now that you know more about us, you may want to know more about our newest product-in-progress, Pascal-2. Pascal-2 is our new optimizing compiler, written in Pascal. It's designed to be portable, and it's already been moved to a Honeywell computer. The Pascal-2 compiler is bigger and slower than Pascal-1, but not the generated code. Typical programs are 40% smaller and almost twice as fast. You can expect Pascal-2 compilers to be available on a wide range of 16-bit and 32-bit processors in the next several years. Supported users of Pascal-1 will receive substantial discounts on their purchase of Pascal-2 licenses for the PDP-11.

У меня, в общем, слюнки потекли от одного упоминания уровня оптимизации аж на 40%. Захотелось пощупать этот Pascal-2. В связи с чем такие вопросы:

1. Вышел ли таки Pascal-2 для RT-11?
2. Если нет, то может ли Pascal-2 для других ОС на PDP-11 давать целевой код, работающий на RT-11?
3. Для каких ещё платформ и процессоров есть Pascal-2 (и Pascal-1)?
4. Кто-нить проверял качество машкода Pascal-2 и сравнивал ли с кодом от Pascal-1?

Ответьте, кто сможет.

Hunta
14.04.2021, 08:17
1. Вышел ли таки Pascal-2 для RT-11 и RSX - да. В инете попадался


Pascal-2 для других ОС на PDP-11 давать целевой код, работающий на RT-11? если из своего кода не обращаться к возможностям целевой системы, если не использовать библиотечные вызовы, специфичные для целевой системе, то да

hobot
14.04.2021, 10:49
ДАННЫЙ ОБРАЗ СОЗДАН СПЕЦИАЛЬНО ДЛЯ
ЭМУЛЯТОРА "ДВК" ОТ [Patron] И
ЛЮБИТЕЛЕЙ ЯЗЫКА ПРОГРАММИРОВАНИЯ
ПАСКАЛЬ В ЕГО ВАРИАНТЕ ДЛЯ ОС RT-11.

ОБРАЗ БУДЕТ НОРМАЛЬНО ЗАГРУЖАТЬСЯ
(ПРИ НЕОБХОДИМОСТИ) И НА РЕАЛЬНЫХ ДВК
С УСТАНОВЛЕННЫМ MY - КОНТРОЛЛЕРОМ.

ТАК ЖЕ МОЖЕТ БЫТЬ ПЕРЕДЕЛАН В ЗАГРУЖАЕМЫЙ
ДЛЯ ЭМУЛЯТОРА ИЛИ РЕАЛЬНОЙ УК-НЦ, ДЛЯ
ЭТОГО НЕОБХОДИМО ДОБАВИТЬ ДРАЙВЕР MZ.SYS
И СРЕДСТВАМИ СИСТЕМЫ ПЕРЕНАСТРОИТЬ ЗАГРУЗКУ.

ВСЕ ПОДРОБНОСТИ ПО СОДЕРЖАНИЮ АРХИВОВ СМОТРИТЕ
В ОДНОИМЕННЫХ ТЕКСТОВЫХ ФАЙЛАХ. ПОЛЬЗУЙТЕСЬ
ПРОГРАММОЙ TTY - ДЛЯ ПРОСМОТРА ФАЙЛОВ С
ДОКУМЕНТАЦИЕЙ И ОПИСАНИЯМИ, FCU - УПАКОВЩИК /
РАСПАКОВЩИК АРХИВОВ ПРИЛАГАЕТСЯ.

archive.pdp-11.org.ru (http://archive.pdp-11.org.ru/ukdwk_archive/dwkwebcomplekt/pascal_DWK/)

nzeemin
14.04.2021, 11:52
1. Вышел ли таки Pascal-2 для RT-11?
2. Если нет, то может ли Pascal-2 для других ОС на PDP-11 давать целевой код, работающий на RT-11?
3. Для каких ещё платформ и процессоров есть Pascal-2 (и Pascal-1)?
4. Кто-нить проверял качество машкода Pascal-2 и сравнивал ли с кодом от Pascal-1?


Посмотрите вот это:
http://bitsavers.trailing-edge.com/bits/DEC/pdp11/discimages/rk05/omsiPascal2.1/
http://mailman.trailing-edge.com/pipermail/simh/2016-February/014556.html

hobot
14.04.2021, 13:11
Просьба помочь с КНИГАМИ по ДВК в частности с этой позицией
-----------------------------------------
Книга 3: Языки программирования: Ассемблер, Паскаль, Бейсик (формат Tiff, 29 MB - 383 стр);
по ссылке в большом архиве то самое как строка выше >

а в папке КНИГА3 >
в формате DWK_ASM_PAS_BAS.djvu, но только первая часть "АССЕМБЛЕР".

Если есть опытные по форматам и готовые проявить инициативу (потратить время), хотелось бы
и раздел ПАСКАЛЬ и БЕЙСИК иметь в более удобном для пользователей формате (тот .djvu или .pdf) ?

Про создание "распознанной" текстовой версии с кликабельным меню я не буду даже задавать вопрос.
Достаточно было бы уже по примеру первого раздела иметь ВТОРОЙ и ТРЕТИЙ разделы.

Спасибо.

:redface:

nzeemin
14.04.2021, 13:26
Просьба помочь с КНИГАМИ по ДВК в частности с этой позицией
-----------------------------------------
Книга 3: Языки программирования: Ассемблер, Паскаль, Бейсик (формат Tiff, 29 MB - 383 стр);
по ссылке в большом архиве то самое как строка выше > http://hobot.pdp-11.ru/BIBLIOTEKA/dwkbooks/

а в папке КНИГА3 > http://hobot.pdp-11.ru/BIBLIOTEKA/dwkbooks/book3/
в формате DWK_ASM_PAS_BAS.djvu, но только первая часть "АССЕМБЛЕР".

http://www.emuverse.ru/wiki/%D0%94%D0%92%D0%9A

svinka
14.04.2021, 14:05
Моей первой книжкой в школе была такая
Бутомо И. Д., Самочадин А. В., Усанова Д. В. Программирование на алгоритмическом языке Паскаль для микроЭВМ. Учебное пособие. Ленинград 1985г. 216 с.

http://i77.fastpic.ru/big/2016/0515/fe/532baed7607eeadf4a020be796e057fe.jpg

Копия: https://drive.google.com/file/d/19pluZ4o62jbe_wtKFWqgMZaBL6X-V8p0/view?usp=sharing

hobot
14.04.2021, 14:57
Моей первой книжкой в школе была такая
Бутомо И. Д., Самочадин А. В., Усанова Д. В. Программирование на алгоритмическом языке Паскаль для микроЭВМ. Учебное пособие. Ленинград 1985г. 216 с.

http://i77.fastpic.ru/big/2016/0515/fe/532baed7607eeadf4a020be796e057fe.jpg

Копия: https://drive.google.com/file/d/19pluZ4o62jbe_wtKFWqgMZaBL6X-V8p0/view?usp=sharing

из предисловия )

https://pic.maxiol.com/images2/1618400601.787615185.citata.png

* хотелось бы напомнить ВСЕМ, что это тема по ПАСКАЛЮ, а не
для устраивания ХОЛИВАРОВ по ЯП. Спасибо.


- - - Добавлено - - -

svinka, хорошая книга, простым языком написана, как справочник по реализации или первичному ознакомлению самое то. У меня была вот такая (как справочник по функциям и операторам)
http://publ.lib.ru/ARCHIVES/M/%27%27Matematicheskoe_obespechenie_EVM%27%27/.Online/Pnyp82O1.jpg
http://publ.lib.ru/ARCHIVES/M/%27%27Matematicheskoe_obespechenie_EVM%27%27/_%27%27Matematicheskoe_obespechenie_EVM%27%27.html

svinka
14.04.2021, 15:13
первичному ознакомлению самое то По восьмеричному вроде.... до конца дочитай!

hobot
14.04.2021, 16:45
Посмотрите вот это:

а ведь form меня предупреждал помниться ;-)



размерчик однако галантный ;-) пришлось убить всё в памяти )))
XM .SAV 474
SJ .SAV 397 07-Mar-1985


.RU SJ HD7:TRISTR=HD7:TRISTR
Pascal-2 RT-11 SJ V2.1D 5-Jan-90 1:19 PM Site #1-1955 Page 1-1
University of Santa Clara #AG07619 Academic Computer Center Kenna 101 Santa
Clara CA 95053 USA
HD7:TRISTR=HD7:TRISTR

5 WRITELN('СТРОКА 1 :');
^1 ^1
*** 1: Illegal character

6 WRITELN('СТРОКА 2', ':': 14);
^1 ^1
*** 1: Illegal character

7 WRITELN('': 20, 'ПРИВЕТ!!!');
^6^44 ^1 ^1 ^38
*** 6: String of length zero
*** 44: Badly formed expression
*** 1: Illegal character
*** 38: ')' expected

9 WRITELN(' ');
^1
*** 1: Illegal character


*** There were 4 lines with errors detected ***
?Errors detected: 10





http://s.rimg.info/759808102c7d84f98ab238b771c2a43c.gif

- - - Добавлено - - -

в общем надо читать мануалы
легко ищется вот такой


Pascal-2 RT11 SJ V2.1A 5-Aug-83 7:04 PM Site #1-1 Page 1-1

Oregon Software, 2340 SI Canyon Road, Portland, Oregon 97201, (503) 226-7760

по ссылке от Никиты версия видимо более "навороченная"


Pascal-2 RT-11 SJ V2.1D

Oleg N. Cher
14.04.2021, 16:46
Та шо ж он так много ошибок на ровном месте выдаёт %)

Hunta
14.04.2021, 16:58
Та шо ж он так много ошибок на ровном месте выдаёт %)
ASCII

hobot
14.04.2021, 17:02
Та шо ж он так много ошибок на ровном месте выдаёт %)
напомнил про рыбака, собаку и лошадь )))

- - - Добавлено - - -


ASCII
ты вот краток когда надо бы подробнее
и подробен когда не надо вообще ;-)

Hunta
14.04.2021, 17:03
ты вот краток когда надо бы подробнее
и подробен когда не надо вообще
Аха. Как обычно - не по твоему.
Кто знает - поймет, кто не знает - пусть учит мат часть

Alex_K
14.04.2021, 20:37
Та шо ж он так много ошибок на ровном месте выдаёт %)

ASCII

ты вот краток когда надо бы подробнее
и подробен когда не надо вообще ;-)

hobot, судя по всему вы в текст программы символы переключения алфавита добавили. Редактор EDIK их добавляет автоматом.

Oleg N. Cher
14.04.2021, 21:54
Ааа, да-да, может такое быть, что OMSI Pascal 1 их тоже ест.

У меня вопрос по Pascal 2. Исполняемый файл XM.SAV имеет огромный по меркам RT-11 размер - 242 Кб. Как всё это работает с точки зрения адресации окнами по 64 Кб? В эмуле Патрона есть смысл пробовать?

- - - Добавлено - - -

Всё это меня крайне угнетает - работать на древнем компиляторе, от которого нет исходников. С ними эти моменты можно было бы легко поправить.

- - - Добавлено - - -

Ну а кто этот Pascal 2 реально пробовал? Он чем-то разительно лучше, чем 1 ?

Hunta
14.04.2021, 22:39
Исполняемый файл XM.SAV имеет огромный по меркам RT-11 размер - 242 Кб.
SJ .SAV 397. 1985-03-07

XM .SAV 474. 1985-03-07

F77 .SAV 340. 1992-10-31


адресации окнами по 64 Кб?
Нет такого на PDP-11

- - - Добавлено - - -


Всё это меня крайне угнетает - работать на древнем компиляторе, от которого нет исходников.
Коммерческий софт

- - - Добавлено - - -



.cop hx7:(SJ.SAV,XM.SAV,LIBFPP.OBJ,PROCRE.PAS) SY:
Files copied:
HX7:SJ.SAV to SY:SJ.SAV
HX7:XM.SAV to SY:XM.SAV
HX7:LIBFPP.OBJ to SY:LIBFPP.OBJ
HX7:PROCRE.PAS to SY:PROCRE.PAS

.BOO RT11XM

RT-11XM (S) V05.07

.TYPE V5USER.TXT

RT-11 V5.7

Installation of RT-11 Version 5.7 is complete and you are now running
RT-11 from your system volume.
....
contain much of the information you need to use RT-11 Version 5.7.


.R MSCPCK

.XM PROCRE,PROCRE=PROCRE

PASCAL--I/O error at user PC= 62176B
Can't open file
I/O error code= -9 in file: DK:CSICON.PAS

.COP HX7:CSICON.PAS SY:
Files copied:
HX7:CSICON.PAS to SY:CSICON.PAS

.XM PROCRE,PROCRE=PROCRE

PASCAL--I/O error at user PC= 62176B
Can't open file
I/O error code= -9 in file: DK:CSITYP.PAS

.COP HX7:CSITYP.PAS SY:
Files copied:
HX7:CSITYP.PAS to SY:CSITYP.PAS

.XM PROCRE,PROCRE=PROCRE

PASCAL--I/O error at user PC= 62176B
Can't open file
I/O error code= -9 in file: DK:CSIPRO.PAS

.COP HX7:CSIPRO.PAS SY:
Files copied:
HX7:CSIPRO.PAS to SY:CSIPRO.PAS

.XM PROCRE,PROCRE=PROCRE

PASCAL--I/O error at user PC= 62176B
Can't open file
I/O error code= -9 in file: DK:GETCS.PAS

.COP HX7:GETCS.PAS SY:
Files copied:
HX7:GETCS.PAS to SY:GETCS.PAS

.XM PROCRE,PROCRE=PROCRE

PASCAL--I/O error at user PC= 62176B
Can't open file
I/O error code= -9 in file: DK:FIXARG.PAS

.COP HX7:FIXARG.PAS SY:
Files copied:
HX7:FIXARG.PAS to SY:FIXARG.PAS

.XM PROCRE,PROCRE=PROCRE

PASCAL--I/O error at user PC= 62176B
Can't open file
I/O error code= -9 in file: DK:FIXINC.PAS

.COP HX7:FIXINC.PAS SY:
Files copied:
HX7:FIXINC.PAS to SY:FIXINC.PAS

.XM PROCRE,PROCRE=PROCRE

PASCAL--I/O error at user PC= 62176B
Can't open file
I/O error code= -9 in file: DK:CNVNUM.PAS

.COP HX7:CNVNUM.PAS SY:
Files copied:
HX7:CNVNUM.PAS to SY:CNVNUM.PAS

.XM PROCRE,PROCRE=PROCRE

.TIM
00:05:22

.XM PROCRE,PROCRE=PROCRE

.TIM
00:06:40

.LINK PROCRE,PASFPP/LIB
?LINK-W-File not found DK:PASFPP.OBJ

.LINK PROCRE,LIBFPP/LIB

.DIR PROCRE.SAV

PROCRE.SAV 56
1 Files, 56 Blocks
36182 Free blocks

.RUN PROCRE
*
Required argument missing (Input File)

.PROCRE PROCRE=PROCRE.PAS
PASCAL -- Multiple errors detected. Program aborted.

.


- - - Добавлено - - -



.TYP PROCRE.LST
Pascal-2 RT-11 XM V2.1D 1-Jan-72 12:06 AM Site #1-1955 Page 1-1
University of Santa Clara #AG07619 Academic Computer Center Kenna 101 Santa
Clara CA 95053 USA
PROCRE,PROCRE=PROCRE

1 {[b+]}
2
3 { NOTICE OF COPYRIGHT AND OWNERSHIP OF SOFTWARE:
4
5 Copyright 1980, 1981, 1982, 1983 by Oregon Software, Inc.
6 All Rights Reserved.
7
8 Whether this program is copied in whole or in part and whether this

9 program is copied in original or in modified form, ALL COPIES OF THIS
10 PROGRAM MUST DISPLAY THIS NOTICE OF COPYRIGHT AND OWNERSHIP IN FULL.
11
12 Pascal procedural cross-reference utility
13 Release version: 2.1 Level: 4 Date: 19-Apr-1983 11:38:14
14 Processor: PDP11
15 System: RSTS, RSX, RT11
16 }
17
18 program procref(input, output, inputfile, outputfile);
19
20 {-----------------------------------------------------------------------|
21 | |
22 | PASCAL PROCEDURAL CROSS-REFERENCER |
23 | |
24 | (c) Copyright 1979 A.H.J.Sale, Southampton, England. |
25 | |
26 | DEVELOPMENT |
27 | This program is a software tool developed from a prototype by |
28 | A.J.Currie at the University of Southampton, England. The proto- |
29 | type of 231 lines of source text was used firstly as a basis for |
30 | extensions, and then rewritten to assure correctness by |
31 | A.H.J.Sale, on leave from the University of Tasmania and then |
32 | stabilized at 1979 December 4; the development time being es- |
33 | timated at 4 man-days from prototype to production. |
34 | |
35 | PURPOSE |
36 | The program reads Pascal source programs and produces two tables |
37 | as output. One documents all procedure or function headings in |
38 | a format that illustrates lexical nesting. The other tables |
39 | gives the locations of heading, block, and body for each pro- |
40 | cedure and function, and what procedures and functions it immedi- |
41 | ately calls. |
42 | |
43 | There is a User Manual for this program; if it has not been pro- |
44 | vided with your installation write to: |
45 | Department of Information Science |
46 | University of Tasmania |
47 | P.O.Box 252C, G.P.O Hobart |
48 | Tasmania 7001 |
49 | and ask for the Technical Report on referencer, if it is still |
50 | available. The program is written to be portable and is believed |
51 | to be in Standard Pascal. |
52 | |
53 | Permission is granted to copy this program, store it in a comput- |
54 | er system, and distribute it, provided that this header comment |
55 | is retained in all copies. |








Pascal-2 RT-11 XM V2.1D 1-Jan-72 12:06 AM Site #1-1955 Page 1-2
University of Santa Clara #AG07619 Academic Computer Center Kenna 101 Santa
Clara CA 95053 USA
PROCRE,PROCRE=PROCRE

56 | |
57 |-----------------------------------------------------------------------}
58
59 { The above comment is included as requested. The source for this program
60 was obtained from Pascal News, and modified at Oregon Software to add the
61 following capabilities:
62
63 1. Command line scanning.
64 2. Multiple source and %include files.
65 3. Remove requirement for "program" header
66 4. Allow external procedure (no main body)
67 5. Reverse (called by) references
68 6. Tabs in input lines.
69
70 In addition, the program as distributed contained a major bug in the
71 handling of field names, and any field name in a record with the
72 same name as a procedure would mask any use of the procedure within
73 that scope. Removing the problem completely requires a large increase
74 in the complexity of the analysis, and was judged infeasable. The
75 current limitation is that an unqualified reference to a field with
76 the same name as a procedure will be treated as a reference to that
77 procedure. This can only occur within a "with" statement. This
78 restriction may be removed in a later release.
79
80 }








Pascal-2 RT-11 XM V2.1D 1-Jan-72 12:06 AM Site #1-1955 Page 2-1
University of Santa Clara #AG07619 Academic Computer Center Kenna 101 Santa
Clara CA 95053 USA
PROCRE,PROCRE=PROCRE

81
82 label
83 99; {exit for error or eof}
84
85 const
86
87 sigcharlimit = 16; {This constant is the number of significant characters
88 kept in the identifier entries. It can readily be
89 changed. It is not advised that it be reduced below
90 10 (reserved words get to 9). }
91
92 uclcdisplacement = 32; {This constant is used to convert upper-case
93 letters to lower-case and vice-versa. It should
94 be equal to ord('a') - ord('A').}
95
96 linelimit = 161; {This constant determines the size of the input line
97 buffer. The maximum acceptable input line is one
98 smaller because a sentinel space is appended to every
99 line.}
100
101 linewidth = 80; {This constant determines the default maximum width of the
102 printing of the second cross-reference table. The
103 program deduces how many names will fit on a line.}
104
105 indentation = 4; {This determines the indentation of the lex-levels.}
106
107 prefix = 9; {width of crossref prefix data}
108
109 { These constants are used for the sketchy syntax analysis. }
110 { They are collected here so that their lengths may be altered}
111 { if sigcharlimit is altered. }
112 sprogram = 'program ';
113 sprocedure = 'procedure ';
114 sfunction = 'function ';
115 slabel = 'label ';
116 sconst = 'const ';
117 stype = 'type ';
118 svar = 'var ';
119 sbegin = 'begin ';
120 scase = 'case ';
121 send = 'end ';
122 sforward = 'forward ';
123 srecord = 'record ';
124 sinclude = 'include ';
125 spaces = ' ';
126
127 labelsize = 13; {max size used for labeling files}
128
129 blanklabel = ' '; {blank file label}
130
131 fakeprog = '.MAIN. '; {fake program name if none}
132
133 {ASCII special character handline}
134
135 ff = 14B; {ascii form feed}








Pascal-2 RT-11 XM V2.1D 1-Jan-72 12:06 AM Site #1-1955 Page 2-2
University of Santa Clara #AG07619 Academic Computer Center Kenna 101 Santa
Clara CA 95053 USA
PROCRE,PROCRE=PROCRE

136 ht = 11B; {ascii tab character}
137
138 tabinterval = 8; {DEC standard tab interval}
139
140 sourcedepth = 8; {max source nesting depth for includes}








Pascal-2 RT-11 XM V2.1D 1-Jan-72 12:06 AM Site #1-1955 Page 3-1
University of Santa Clara #AG07619 Academic Computer Center Kenna 101 Santa
Clara CA 95053 USA
PROCRE,PROCRE=PROCRE

141
142 type
143 natural = 0..maxint;
144 positive = 1..maxint;
145
146 prefixname = packed array [1..prefix] of char;
147
148 sigcharrange = 1..sigcharlimit;
149
150 pseudostring = packed array [sigcharrange] of char;
151 stringcases = packed array [sigcharrange] of boolean;
152
153 linesize = 1..linelimit;
154 lineindex = 0..linelimit;
155
156 setofchar = set of char;
157
158 prockind = (fwdhalf, allfwd, shortform, formal, outside, outsidedef,
159 notproc);
160
161 ptrtoentry = ^entry;
162
163 listofusages = ^usagecell;
164
165 ptrtostackcell = ^stackcell;
166
167 tokentype = (othersy, namesy, lparensy, rparensy, colonsy, semicolsy,
168 periodsy, assignsy, subrangesy);
169
170 filelabel = packed array [1..labelsize] of char;
171
172 lineref =
173 record
174 line: natural; {line number of reference}
175 fileref: filelabel; {file of reference}
176 end;
177
178 entry =
179 record
180 procname: pseudostring;
181 procuppers: stringcases;
182 linenumber: lineref; {line where header found}
183 startofbody: lineref; {line where body is found}
184 left, right: ptrtoentry;
185 before, after: ptrtoentry;
186 calls: listofusages;
187 called: listofusages;
188 localtree: ptrtoentry;
189 case status: prockind of
190 fwdhalf, shortform, formal, outside, notproc: ();
191 allfwd, outsidedef:
192 (forwardblock: lineref {line where forward label found} );
193 end;
194
195 usagecell =








Pascal-2 RT-11 XM V2.1D 1-Jan-72 12:06 AM Site #1-1955 Page 3-2
University of Santa Clara #AG07619 Academic Computer Center Kenna 101 Santa
Clara CA 95053 USA
PROCRE,PROCRE=PROCRE

196 record
197 what: ptrtoentry;
198 next: listofusages;
199 end;
200
201 stackcell =
202 record
203 current: ptrtoentry;
204 scopetree: ptrtoentry;
205 substack: ptrtostackcell;
206 end;
207
208 {source include control}
209
210 sourceindex = 1..sourcedepth; {current source nexting level}
211
212 sourcedescriptor =
213 record
214 inputfile: text; {current input file}
215 line: array [linesize] of char; {current input line}
216 chno, total: lineindex; {char pointers in line}
217 lineno: natural; {line number of this line}
218 currentlabel: filelabel; {current file label}
219 end;
220
221 sourcestack = array [sourceindex] of sourcedescriptor;
...

nzeemin
17.04.2021, 10:40
Выложил модули Паскаля развёрнутые через DECOBJ - не все, но многие:
https://github.com/nzeemin/uknc-various/tree/master/PASCAL-DECOBJ

Как уже говорил Alex_K, эти "исходники" требуют доработки - кое-где перепутаны код/данные.

Alex_K
17.04.2021, 13:58
эти "исходники" требуют доработки - кое-где перепутаны код/данные.
Там особо весело с модулем SUPMON. Сначала идёт секция данных, в них есть сообщения об ошибках, которые набраны в верхнем и нижнем регистре. Потом идёт секция кода. А вот затем снова перескок на секцию данных, счетчик ставится на смещение 0104 от начала секции и все сообщения об ошибках замещаются на строки в верхнем регистре. DECOBJ это переводит, но немного спотыкается.

nzeemin
18.04.2021, 00:38
Постараюсь подытожить то что я узнал про Паскаль ДВК / OMSI Pascal 1 восстановлении паскалевского исходника Сталкера.

1. Возможна передача параметра "по ссылке" и это работает - через ключевое слово var перед параметром:

procedure READCHAR(var CH:char);

2. Можно делать ссылочные типы над базовыми и хранить/присваивать/передавать указатели:


type charptr = ^char;
type intptr = ^integer;
...
var V11070: charptr;
...
V11070:=@F[VAR4,VAR12,VAR14];
...
V11070^:='.';

Арифметики на указателях нет - к ним НЕльзя прибавить число чтобы получить следующий элемент массива например.

3. Макроассемблерные вставки весьма удобны, но надо учитывать что там включена десятичная система счисления.

4. Цикл FOR очень громоздкий, лучше использовать WHILE/UNTIL везде где это возможно, будет некоторая экономия.

5. У всех символов в строках срезается верхний (7-й) бит, так что работать с КОИ-8 весьма проблематично - работаем только с ASCII или КОИ-7.

6. Повторные упоминания строк приводят к их дублированию - для дублированных строк лучше использовать константы.

7. Нет возможности указать спецсимволы в строковых литералах через код символа, что очень неудобно.

8. Повторные упоминания множеств также приводят к их дублированию. Любое множество занимает 4 слова (64 бита).

9. Есть GOTO через метки:


label 1;
begin
...
1:
...
goto 1;

В основной процедуре программы это реализуется через восстановления SP из $RESR6; в процедурах/функциях используется регистр R4 для расчёта того насколько нужно "подобрать" стек при переходе по goto.

10. По-видимому, нет конструкции для выхода из процедуры/функции. Для этого можно использовать WHILE TRUE + EXIT, либо GOTO с меткой в конце.
В Сталкере реализовано через ассемблерную вставку, не рекомендую по причине того что стек может быть в неправильном состоянии для прямого JMP на конец.

11. Компилятор часто вылетает на условных выражениях со словом NOT - ставьте больше скобок, чтобы ему было проще.

12. Оптимизация очень и очень слабая, даже простые конструкции часто приводят к длинному коду.
Как пример,


if F[VAR4,VAR16,VAR20] = '.' then begin
F[VAR4,VAR16,VAR20]:='!';
end else begin
F[VAR4,VAR16,VAR20]:='#';
end;

Здесь адрес одной и той же ячейки одного и того же массива вычисляется трижды - лучше взять его в локальную переменную и работать уже с ней.

Oleg N. Cher
18.04.2021, 00:51
Арифметики на указателях нет - к ним НЕльзя прибавить число чтобы получить следующий элемент массива например.Не совсем так. В OMSI Pascal 1 есть PRED/SUCC:


TYPE CHARPTR = ^CHAR; VAR p: CHARPTR;
BEGIN
p := PRED(p); p := SUCC(p);

11 TYPE CHARPTR = ^CHAR; VAR p: CHARPTR;
12 BEGIN
13 1 1 1 p := PRED(p); p := SUCC(p);

ERRORS DETECTED: 0
FREE MEMORY: 14546 WORDS

Alex_K
18.04.2021, 01:22
7. Нет возможности указать спецсимволы в строковых литералах через код символа, что очень неудобно.
Этого нет. Но редактор EDIK позволяет вставлять управляющие символы прям в текст (коды 1 -31). Символ с кодом 127 через EDIK я вставить не смог, можно заменить в DESS, потом EDIK нормально будет его отображать.
И трансляция с управляющими символами проходит нормально.

hobot
19.04.2021, 11:40
Мысль вслух. Сильно подозреваю, что компилятор OMSI Pascal сам написан на Паскале Так что можно попробовать восстановить исходники
тут мог бы подтвердить или опровергнуть Полетаев Владимир ( vmp ), поскольку адаптированную версию транслятора для ADOS-SJ делал именно он, на основе OMSI Pascal.

- - - Добавлено - - -

Особенность - полная Русификация системных сообщений
в самой среде ADOS-SJ, Русификация текстового редактора Nys(EDIK),
Русификация сообщений транслятора языка Паскаль.




TROSTROKI ПАСКАЛЬ / АДОС V1.0B 19- 1 PROGRA

TROSTROKI ПАСКАЛЬ / АДОС V1.0 19- 1 PROGRA

Обнаружено ошибок: 0
Свободная память: 9653 слов

Обнаружено ошибок: 0
Свободная память: 9653 слов

Hunta
19.04.2021, 13:18
Особенность - полная Русификация системных сообщений
Я это делал и без доступа - как к исходникам, так и к obj модулям. Тяжеловато, но возможно.

Oleg N. Cher
20.04.2021, 07:45
Предлагаю спецам запатчить OMSI Pascal, чтобы не занулял старший бит в символах и тем самым позволял бы русифицировать строки.

У меня, увы, не хватит квалификации.

hobot
20.04.2021, 14:50
Предлагаю спецам запатчить OMSI Pascal, чтобы не занулял старший бит в символах и тем самым позволял бы русифицировать строки.

У меня, увы, не хватит квалификации.
ты о чём? в строках с кириллицей проблем нет.
или это снова "терминология".

Кстати говоря, ЕМНИП 8-битный транслятор был,
он так в шапке и писал, во время листинга пищал на ошибки (отсюда можно попытаться выяснить какая версия была за основу взята), form пропатчил самый громоздкий Паскаль на Y2K (громоздкий по размеру исполняемого файла после линковки).

Oleg N. Cher
20.04.2021, 21:40
Я про то, что Никита сделал утилиту, чтобы патчить .mac-файл после компиляции Паскалем именно в плане искажения строк на русском (обнуляется старший бит символов). Если Паскаль берёт русские строки и так, то зачем бы он стал это делать?

hobot
21.04.2021, 10:37
Паскаль берёт русские строки и так




HD7>TY OLEG.PAS
/* ПРОГРАММА "ПРИВЕТ, ОЛЕГ!" */
PROGRAM HO;
BEGIN
WRITELN('ПРИВЕТ, ОЛЕГ!');
END.

HD7>PASDWK OLEG,TT:=OLEG


.MAIN. OMSI PASCAL-1 RT11 V1.1G 21- -89 Page 1
Univ. Tasmania, Info. Sciences, Physics Bldg, Hobart 7001, site #72-12

LINE STMT LEVEL NEST SOURCE STATEMENT

1 /* ПРОГРАММА "ПРИВЕТ, ОЛЕГ!" */
2 PROGRAM HO;
3 BEGIN
4 1 1 1 WRITELN('ПРИВЕТ, ОЛЕГ!');
5 2 1 1 END.

ERRORS DETECTED: 0
FREE MEMORY: 11510 WORDS

ERRORS DETECTED: 0
FREE MEMORY: 11510 WORDS

HD7>TY OLEG.MAC
.GLOBL $RESR6,$RESR5,$KORE,$SAV10,$VER
.GLOBL $BEGIN,FILE,$TTY,$END
.RADIX 10
$VER=59.
$BEGIN:
JSR %7,$B127
.GLOBL $B127
MOV #L0,-(6)
MOV #17,-(6)
CLR -(6)
JSR %7,$B32
.GLOBL $B32
JSR %7,$B36
.GLOBL $B36
JMP $END
L0: .WORD 28686
.WORD 26994
.WORD 25975
.WORD 3956
.WORD 8236
.WORD 28430
.WORD 25964
.WORD 3943
.WORD 33
.END

HD7>MAC OLEG

HD7>LIN OLEG,PASDWK

HD7>RU OLEG
ПРИВЕТ, ОЛЕГ!

HD7>





5. У всех символов в строках срезается верхний (7-й) бит, так что работать с КОИ-8 весьма проблематично - работаем только с ASCII или КОИ-7.


КОИ-7 - семибитная кодировка для русского языка и обмена информацией, основанная на ASCII. КОИ-7 описана в ГОСТ 13052-67, 13052-74 и 27463-87. КОИ-7 включает в себя 3 "набора" - Н0, Н1, Н2. Н0 - это просто US-ASCII ; в Н1 все латинские буквы заменены на русские; в Н2 заглавные латинские буквы оставлены, а строчные заменены на заглавные русские.

На практике использовался либо набор Н2 сам по себе, либо Н0/Н1 с переключением: для перехода в русский режим Н1 использовался управляющий символ 0xE SO, РУС, а для возврата в латинский Н0 - символ 0xF SI, ЛАТ. Иногда смена набора, используемого устройством, осуществлялась ручным переключателем.

Буквы Ё не было; отсутствовала также заглавная буква Ъ для избежания потенциального конфликта с управляющим символом DELETE 0x7F. Поскольку русские буквы были размещены на позициях аналогичных латинских букв, текст оставался более-менее понятным даже при неправильно выбранном режиме.

КОИ-7 использовалась в основном на машинах серии СМ ЭВМ и ДВК; КОИ-7 Н2 использовалась на машинно-ориентированном языке в микроЭВМ Электроника Д3-28 в виде четырёхзначного шестнадцатеричного кода, также на БЭСМ-6 там она называлась ВКД, внутренний код данных; при этом вместо части русских букв использовались совпадающие по начертанию латинские.

- - - Добавлено - - -


hobot, судя по всему вы в текст программы символы переключения алфавита добавили.
да в этом была причина, убрал, собралось сразу в OBJ, но SAV в итоге всё равно не запустился - ругнулся "замысловато" )
В общем буду экспериментировать (по мимо прочего) с Pascal-2 - вещь занятная )

Alex_K
17.06.2021, 13:08
Штука в том, что в этом архиве помимо всего прочего присутсвует уже собранный PASCAL.OBJ, странный файл PCL.SAV - который ищет PASCAL.SAV строго на устройстве SY: .
БОЛЬШОЕ СПАСИБО!!! В данном архиве оказался полный комплект OMSI Pascal v1.2G, ну естественно "адаптированный" под наши ЭВМ. Включает компиляторы с поддержкой как FIS (PASSIM.SAV), так и FPP (PASFPP.SAV). Ну и четыре версии стандартной библиотеки - PASFPP (поддержка FPP), PASFIS (поддержка аппаратных FIS и EIS, эмулятора FIS нет), PASEIS (поддержка аппаратного EIS, эмулятор FIS присутствует), PASSIM (отсутствует аппаратная поддержка EIS и FIS, эмулятор FIS присутствует).

Manwe
07.07.2021, 20:17
Знатоки Macro-11, подскажите, пожалуйста, каков стандарт обработки локальных меток в случае если указанная метка не встречается между глобальными метками.

L1$: NOP
FIRST: MOV R0,R1
BR L1$
SECON: MOV R2,R3
L1$: WAIT
Куда Macro-11 сделает переход - на метку L1$ выше FIRST или ниже SECON? Или выдаст ошибку?

Hunta
07.07.2021, 20:49
Если код, как приведённый - ошибка - дубль метки, потому как L1$ - это отнюдь не локальная метка

Если правильная локальная метка, возможны три сценарии.
- ошибка - дубль метки
- ошибка - метка не определена
- нет ошибки - переход на одну из меток

Ищем в документации и читаем про понятие - блок локальных меток

Manwe
07.07.2021, 22:43
Если код, как приведённый - ошибка - дубль метки, потому как L1$ - это отнюдь не локальная меткаДа, ошибка - не должно быть буквы "L" в метке.


Если правильная локальная метка, возможны три сценарии.
- ошибка - дубль метки
- ошибка - метка не определена
- нет ошибки - переход на одну из метокЭто понятно, что три случая возможны:
1. между глобальными метками есть локальные с одинаковыми именами
2. указанной локальной метки вообще нет в программе
3. локальная метка есть, но после и/или до глобальной метки.
Интересует, конечно, третий случай. Я именно про него спрашивал.


Ищем в документации и читаем про понятие - блок локальных метокЯсно, "RTFM". Всё понял, спасибо большое, ты очень помог!

Hunta
07.07.2021, 23:20
Ясно, "RTFM"
Мои лекции стоят ОЧЕНЬ дорого, но всё это можно RTFM. Не за что

- - - Добавлено - - -


- ошибка - метка не определена

2. указанной локальной метки вообще нет в программе
Нет, она может и быть. И не одна. И тем не менее, MACRO-11 выдаст указанную ошибку

3. локальная метка есть, но после и/или до глобальной метки.
И в этом варианте возможны всё три случая

Manwe
08.07.2021, 10:57
Мои лекции стоят ОЧЕНЬ дорого, но всё это можно RTFMЕсли бы можно было RTFM, то я бы уже. В реальности хвалёная DECовская документация составлена так, что в ней многое не описано. Например, в "PDP-11 MACRO-11 Language Reference Manual" нет формулировок типа "область видимости" и нет даже самого описания локальных меток (зато сразу с места в карьер "7.3.5 Creating Local Symbols Automatically").
Моё время тоже стоит очень дорого, но я трачу его на бесплатное написание новых программ для БК и Союз-Неона. Если я буду тратить его на чтение чудовищно составленной DECовской документации, то на новые программы для БК и Союз-Неона времени не останется.
Странно, конечно, что ты знаешь ответ на вопрос и мог бы ответить "да" или "нет", но вместо этого предпочитаешь писать нравоучения, а знание своё собираешься унести с собой в могилу. Ну да ладно, у каждого свои мотивы.

dk_spb
08.07.2021, 11:06
а знание своё собираешься унести с собой в могилу.
Вспомнился анекдот:

Клиент спрашивает в банке:
-А вы даёте кредиты под честное слово?
-Без проблем.
-А если я не верну кредит?
-Тогда вам будет стыдно перед всевышним, когда предстанете.
-Ну, это когда ещё будет.
-Вот, если пятого не вернёте, то шестого предстанете.

Надеюсь Вы про могилу не в этом ключе? ;-)

Hunta
08.07.2021, 11:09
нет формулировок типа "область видимости" и нет даже самого описания локальных меток
Аха. Конечно.

"Local symbols are specially formatted symbols used as labels within a block of coding that has been delimited as a local symbol block. Local symbols are of the form n$, where n is a decimal integer from 1 to 65535, inclusive.
...
A local symbol block is delimited in one of three ways:"

Так и пиши - Не умею искать. Будет честнее.


знание своё собираешься унести с собой в могилу
Это то, которое в общедоступной документации? Да, точно, унесу с собой в могилу. Что бы современные горе-"программисты" научились с документацией работать.

- - - Добавлено - - -


то ты знаешь ответ на вопрос и мог бы ответить "да" или "нет"

3. локальная метка есть, но после и/или до глобальной метки.

И в этом варианте возможны всё три случая

Если мой ответ не устраивает - это не значит, что я его не дал. Просто уровень знаний не тот - для понимания ответа.

Manwe
08.07.2021, 14:56
Так и пиши - Не умею искать. Будет честнее.Честнее будет так: в документе используется старая терминология, поэтому поиск затруднён. Чтобы выучить старую терминологию, надо прочитать всю книгу. А это вовсе не поиск.


Если мой ответ не устраивает - это не значит, что я его не дал. Просто уровень знаний не тот - для понимания ответа.Нет никакого смысла давать ответ, понимание которого требует уровня знаний выше того, который обозначен в вопросе. Если только ты не ставишь цель похвастаться уровнем знаний и запросить денег за консультацию
:)

Нормальным ответом было бы:
"L1$ - это отнюдь не локальная метка. Если правильная локальная метка, то ассемблер выдаст ошибку, поскольку нет специальных директив".

Вообще, вопрос возник из-за этого кода (никаких директив Macro-11 в начале нет):

;процедура обработки перехода через сегмент и зацикливания

MOV #1,R4 ;МАСКА ДЛЯ ОПОЗНАНИЯ КОНЦА ИНСТР.

VL0: MOV #0,R5
BEQ 10$
ADD R5,VOL0+2
VLL0: CMP #0,VOL0+2
BLO 10$
MOV VLL0+2,VOL0+2
CLR VL0+2
10$: CMP R0,#ADINS1+10000
BLO 20$
SUB #10000,R0
ADD #10,@#UR1
20$: BITB R4,@R0
BNE 40$
CL0: SUB #0,@#UR1
ADD #0,R0
30$: TSTB @R0
BNE 40$
CLR QQ0
MOV #111004,INC0
CLR R0
40$:

VL1: MOV #0,R5
BEQ 10$
ADD R5,VOL1+2
VLL1: CMP #0,VOL1+2
BLO 10$
MOV VLL1+2,VOL1+2
CLR VL1+2
10$: CMP R1,#ADINS2+10000
BLO 20$
SUB #10000,R1
ADD #10,@#UR2
20$: BITB R4,@R1
BNE 40$
CL1: SUB #0,@#UR2
ADD #0,R1
30$: TSTB @R1
BNE 40$
CLR QQ1
MOV #111104,INC1
CLR R1
40$:

gid
08.07.2021, 15:03
(никаких директив Macro-11 в начале нет)
В этом случае (по умолчанию в Macro-11) область видимости локальной метки ограничена обычными метками. т.е. переход как вперёд к локальной через обычную, так и переход назад, через обычную выдаст ошибку, что нету метки для перехода.

Hunta
08.07.2021, 15:07
понимание которого требует уровня знаний выше того, который обозначен в вопросе.
RTFM


похвастаться уровнем знаний
Мне давно на это наплевать


запросить денег за консультацию
Даже если предложишь - не буду консультировать

Manwe
09.07.2021, 07:36
В этом случае (по умолчанию в Macro-11) область видимости локальной метки ограничена обычными метками. т.е. переход как вперёд к локальной через обычную, так и переход назад, через обычную выдаст ошибку, что нету метки для перехода.Спасибо!
Значит, исходник, который я разбираю, не из Macro-11, а из БКшной Turbo8. Там такие трюки (или глюки) прокатывают, переход вперёд произойдёт.
Это исходник проигрывателя трекерной музыки для Союз-Неона, переделанный для БК 0011М. Видимо, при портировании что-то пострадало - играет музыку неправильно. Сижу разбираюсь.

nzeemin
06.01.2022, 02:24
Постараюсь подытожить то что я узнал про Паскаль ДВК / OMSI Pascal 1 восстановлении паскалевского исходника Сталкера.

В продолжение, по коду KINGOM - про работу с файлами.
Этот Паскаль позволяет работать с файлами как со списками элементов заданного типа.
Для примера см. https://github.com/nzeemin/uknc-various/blob/master/KINGOM-PASCAL/KINGM6.PAS



type FArray = array [1..12] of integer;
var D,E: file of FArray; F:FArray;
...
F := D^; { Берём (копируем) текущий элемент файла D }
if D^[1] = 1 then ... { Обращаемся к текущему элементу файла D, без копирования }
GET(D); { Переходим к следующему элементу файла D }
...
E^ = F; { Копируем в текущий элемент файла E }
PUT(E); { Сохраняем элемент в файл E }


Открытие файлов через RESET либо REWRITE, переход к заданной записи SEEK, закрытие файла - CLOSE.

Alex_K
06.01.2022, 11:11
переход к заданной записи SEEK
Нету в данной версии (1.1) SEEK. Да, файл можно открыть, как файл с записями одинаковой длины, но переходить вперёд-назад нельзя. А вот в версии 1.2 это реализовано.

Alex_K
12.01.2022, 18:51
Хотелось бы найти RANDOM.PAS из поставки Паскаля.



>TYP [PASRT]RANDOM.PAS
var
Seed: 0..65535;
I: integer;

function Random: real;
begin { Random }
Seed := (Seed * 13077 + 6925) mod 32768;
Random := Seed / 32768.0
end { Random };
Hunta, а из какой поставки Паскаля у вас этот файл?

Hunta
12.01.2022, 19:06
из какой поставки Паскаля у вас этот файл?
Хороший вопрос :) По каталогу - однозначно из RT, и скорее всего, версия 1.x (ЕМНИП, то второй версии у меня во времена активного юзанья - а каталог на это намекает - Квант-а 4С не было. Немного позже (щас, ошибки поправлю и синтез запущу) гляну

Alex_K
12.01.2022, 19:10
Хороший вопрос По каталогу - однозначно из RT, и скорее всего, версия 1.x (ЕМНИП, то второй версии у меня во времена активного юзанья - а каталог на это намекает - Квант-а 4С не было. Немного позже (щас, ошибки поправлю и синтез запущу) гляну
А будет возможность выложить куда нибудь весь пакет? Интересуют сам компилятор и библиотеки к нему.

Hunta
12.01.2022, 19:26
Вот это несколько более геморойно (он на диске в формате RSX), попробую до выходных выцарапть, но не обещаю - в выходные точно смогу

- - - Добавлено - - -

И эта, вдогонку :) Если до субботы второй половины дня не выложу - можно смело меня пнуть-напомнить :) Работа началась, голова теперь не только DE10 занята - легко могу забыть :)

- - - Добавлено - - -

А вот обманул :) Не знаю, в каком смысле этого слова :) 2.0K

Alex_K
15.01.2022, 14:22
И эта, вдогонку Если до субботы второй половины дня не выложу - можно смело меня пнуть-напомнить
Напоминаем.

Hunta
15.01.2022, 17:30
Напоминаем.
Да, я помню, одно дело доделаю (минут 30 - час) и займусь :)

- - - Добавлено - - -

Пардон, потребовалось больше времени, чем предполагал :)
Переключился на паскаль :)

- - - Добавлено - - -

Вытащил всё, что было Pascal Omsi RT11 2.0K Changed (http://www.kpxx.ru/DEC/PDP-11/Software/Langs/Pascal/Omsi/RT11/2.0K.Changed)
Комментарии:
- До дистра добрались шаловливые советские ручки
- Выложен в том виде, который у меня
- Вроде как LIB*.OBJ - не библиотеки, а просто конкатенированные *.OBJ файлы - думаю, стоит на их основе создать библиотеки
- PASCAL.SAV у меня запустился только под XM и только в варианте VRUN PASCAL. Ну, никто не мешает выдать SET RUN VBGEXE
- Файл-образ диска можно сделать и поменьше - но это образ минимального размера, который оказался под рукой и учитывая его размер - не стал сильно париться на этот счёт :)