PDA

Просмотр полной версии : PDP-11 и всё всё всё :)



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

Hunta
04.08.2017, 00:58
Эта тема - для интересных фактов о семействе PDP-11 и софта для него. Упоминание совместимого не особо приветствуется, но если факт интересный - почему бы и нет. Если у Вас есть такой - you are welcome. Если не уверены - свяжитесь с топикстартёром - из-за первой любви к PDP-11 и совместимым он достаточно лоялен.

Темы - "А что было бы, если бы (нужное дописать)", "А вот на Ангстреме (нужное дописать) и всё загибается", "А вот в Воронеже (нужное дописать) и всё загибается" - оффтоп. Со всеми вытекающими.

Тема алкоголизма где бы то не было - злостный оффтоп. Со всеми вытекающими.


Интересные ссылки

Digital Equipment Corporation (http://www.b67c.com/DEC1.html)

Аппаратный эмулятор TU-58 (https://github.com/joelang/tu58v3)


Из документации на DOS-11 V004A

Вольный перевод.

Если CTRL/C вводится мгновенно после клавиши RETURN, монитор отобразит эхо ^C и зависнет - потребуется перезагрузка монитора. Очень небольшая задержка (моргните глазами) после ввода клавиши RETURN - это все, что необходимо, чтобы обойти эту проблему.

Так что народ не прав - Выключить-Включить - это был не первый способ решения проблем на компах, первый - Морг-Морг!

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

RSX-11M. Working Design

3.3. Обработка в/в
3.3.1. Цели

Интерфейс в/в на 100 процентов совместим с RSX-11D. Кроме требований совместимости, в дизайне поставлены три цели:

1. Общее количество памяти для обработки в/в (структуры данных плюс драйвера) должно быть уменьшено на 50 процентов по сравнению с RSX-11D.
2. Структуры данных в/в должны быть существенно гибкими для добавления будущих устройств или для изменения принципов обслуживания существующих устройств.
3. Пропускная способность должна быть равной или превышать такую в RSX-11D.

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

*** RSTS родилась 11 июня 1970 года.

Конечно, тогда она не называлась RSTS - просто IOX - от Input Output eXecutive (исполнитель ввода вывода), который был разработан как часть PTS (Punch Type System - перфоленточная система).

Решение написать многопользовательскую систему было принято несколькими месяцами ранее и Tom Barnett был назначен Менеджером Продукта. Nathan Teicholtz (бывший программный инженер TSS/8) управлял командой проектировщиков.

Однако задержки были вызваны внутренней враждой относительно того, какой язык следует поддерживать. Боевые действия разделяли два лагеря.

Выбор был между FOCAL (FOrmula CALculator Вычислитель Формул) и BASIC.

Решение оставили за маркетологами, так как на техническом уровне эти два языка считались одинаковыми.

(Никто не думал, что ограниченные возможности обработки символов в FOCAL создадут какие либо серьёзные проблемы).

У сторонников FOCAL было два основных аргумента: язык уже существовал на PDP-8 и (что более важно) - он соответствовал фундаментальной философии Digital - «Давайте будем разными».

Чем больше лагерь BASIC утверждал, что нуждается в отраслевом стандарте, тем больше представители FOCAL повторяли - «Давайте будем уникальными».

В итоге классический компромисс - уникальный BASIC.

Let's be different :):):) А не Think different ;););)

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

Январь 1972 RSTS Version 3A-19.

Работала на PDP-11/20 без диспетчера памяти, то есть 28 килослов памяти - это было всё, что было доступно всей операционной системе, программам на BASIC плюс место для работающих пользователей - до 16 человек.

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

2050

Позже в этом году, 11 июня 2050 года, если быть точным, операционной системе RSTS/E исполнится 80 лет.

Ещё в 1985 году версия 9 представила третий формат даты, STAR, в дополнение к давно существовавшим символьным и числовым форматам.

Это была ключевая особенность.

Мало того, что это «фиксировало» рождение RSTS, поскольку 11 июня 1970 года - это день номер 1 в формате STAR, но также это был первый реальный знак того, что Digital ожидает, что RSTS будет использоваться ещё очень долгое время.

Формат даты STAR не заканчивается до 2150 года - ещё 100 лет.

У Digital есть IT... но мы сделали так, что бы это работало.

Долгой жизни, PDP-11!

form
04.08.2017, 05:52
RSTS/E
Долго соображал как вводить в ней современные даты :)
А сейчас у меня RSTS/E просто не работает ибо после выполнения рекомендаций XXDP по раздаче регистров-векторов, RSTS пытается запользовать контроллером MSCP чужой вектор, а как его поменять я не нашел - в описание про подобную команду говорится, что она только для кард-ридера :)

Hunta
05.08.2017, 19:52
Практически у всех PDP-11 "адреса" регистров общего назначения работают только с консоли - Вы не можете использовать их в программе.
Но они работают на PDP-11/05 и PDP-11/10. Фактически, вы можете поместить код в регистры. И если Вы это сделаете, счётчик текущего адреса PC будет увеличиваться на 1, а не на 2! (Похоже, что у кого то было несколько свободных слов в микропрограмме и он решил, что это будет полезным хаком. И да - это позволит вам проверить процессор, не имея вообще никакой работающей памяти).

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

Не-существовавшие PDP-11

•Bluefin или PDP-11/68

PDP-11/60 первоначально должен был быть 22-битным. 11/68 должен был иметь до 16 процессоров, каждый из которых был бы настолько же мощным, как 4-процессорный PDP-11/74. Законсервирован для предотвращения конкуренции с будущим 32-битным продуктом.

Hunta
06.08.2017, 16:07
Поприкалывался с CAPS-11 :) Почти Микроша :D

form
06.08.2017, 16:14
Поприкалывался с CAPS-11
А я развлекаюсь с RSX-11M на УКНЦ на жестком диске. Бедные соседи, до них наверное все маты по поводу реализации жесткого диска на УКНЦ долетают :)
Ну очень уж недружественный он...

Hunta
06.08.2017, 16:24
RSX-11M на УКНЦ отстой. RSX-11M-PLUS на УКНЦ выбор профи :)))

form
06.08.2017, 17:06
RSX-11M-PLUS на УКНЦ
Плюс даже на 100/25 фиг запустишь без бубна :)
В теории есть в SGNPREFIX.CMD возможность разрешить 18bit, но на практике будет куча undefined globals. Впрочем все они по теме разборок с UNIBUS mapping - можно за.IFать, но результат не оправдает усилий :)

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

Задача поначалу была интересной: побороться с УКНЦшным WD, считающим, что существует только RT-11SJ без поддержки таймера в драйверах и ничего более в этом мире нет :)
Но по мере продвижения матов было много...
Прежде всего WD работает исключительно по прерываниям, положив при том большой и толстый на приоритет процессора.
Но и этого ему мало, он кроме всего прочего использует простратство векторов для передачи команд и возврата ответа, отсюда возникла проблема чтения в эту область - после чтения поменяется содержимое вектора и прерывание улетит в неведомые дали...
Обошел эту фигню, возник другой вопрос - при записи этой области в загрузчик попадает содержимое командной ячейки в аккурат с командой, при загрузки оно естественно читается обратно, результат непредсказуем. Решил и этот вопрос, но веселостей еще хватает :)

Hunta
08.08.2017, 16:54
PDP-11 - первая и единственная 16-битная серия компьютеров фирмы DEC.

form
09.08.2017, 17:01
единственная 16-битная
А как же rainbow? :)
Или это 16+8 - не считается? :)

Hunta
09.08.2017, 17:19
А что, 16-битный проц в rainbow был разработан DEC?

form
09.08.2017, 17:25
А что, 16-битный проц в rainbow был разработан DEC?
Нет, но речь шла о компьютерах, а не о процах :)

Hunta
09.08.2017, 17:32
Тогда не зачёт.
Говоря про PDP-11, думаю, не сильно ошибусь, если скажу, что подавляющее количество людей будет подразумевать как компы, так и процессора. Семейство PDP-11. Rainbow к нему не относится.
Так что по прежнему один - и на порядок, а то и больше коммерчески самый успешный - на втором месте - семейство (процессоров и компов) PDP-8.

Hunta
12.08.2017, 01:24
И тогда нам повезло - мы наняли Гарольда Макфарланда, протеже К. Гордона Белла, что бы он работал со мной. Гарольд работал над несколькими архитектурами в институте Карнеги-Меллона. Одна из них, нравившаяся ему, была настолько сложной и запутанной, что я не мог понять, как писать для неё программы - кто знает, она могла быть самой лучшей, но этого мы никогда не узнаем. Другая архитектура Гарольда была по существу тем, что стало PDP-11. Когда мы представили эту архитектуру в качестве нашей рекомендации для первой 16-разрядной машины DEC, менеджеры по аппаратным средствам (например, Роджер Кэди) просто выгнали нас из комнаты, потому что не было 16-битных инструкций, с данными, закодированными непосредственно в них! И коротких адресов не было! Эти и другие подобные идеи были в значительной степени важны, для достижения низкой нагрузки на канал обмена с памятью и компактного кода. Вскоре мы смогли преодолеть эти предвзятые понятия, и внезапно проект Desk Calculator стал горячим. Всевозможные архитекторы (в том числе К. Гордон Белл и Билл Вульф как консультанты), а также инженеры по аппаратным и программным средствам, участвовали в быстром описании деталей машины. Основываясь на материалах Гарольда и других, я написал оригинальную спецификацию языка ассемблера, и Боб Бауэрс (если я правильно помню) написал кросс-ассемблер на PDP-10 в течение выходных. (И, хотя это не было указано, у него так же был и макропроцессор!) Я начал нанимать разработчиков программного обеспечения (всего 3), и я написал SIM-11 - полное моделирование PDP-11 на базе PDP-10 на FORTRAN (не мой язык!). С ассемблером и симулятором мы смогли спроектировать и протестировать исходное программное обеспечение для перфоленты (ассемблер, редактор, IOX, компоновщик, ....) и разработать простые тестовые программы до того, как будет доступен первый прототип.

Самая первая программа, выполненная PDP-11, была набрана на консоли, и это был простой цикл для заполнения слов памяти собственным адресом. Это делается элементарно с помощью цикла MOV R0, (R0) +, где R0 начинается с небольшого чётного числа. Как известно, PDP-11/20 неправильно помещал A+2 в слово A. Однако SIM-11 правильно помещал A в слово A. Следующее событие было предсказуемым и повторялось снова и снова в моем личном опыте. То есть - мне пришлось реализовать аппаратную ошибку в SIM-11!

Одно из моих любимых воспоминаний - личное упаковывание первой коробки с программным обеспечением на перфоленте для первого PDP-11, доставленного клиенту. К сожалению, я не помню, кем был клиент.

Я также помню, как на меня давили маркетологи, чтобы минимальный объём памяти был 2 килобайта. Я им ответил: «Тогда не будет ассемблера» - так что теперь у нас 4 килобайта минимальной памяти.

И маркетологи хотели, чтобы комментарий начинался с косой черты (а ля PDP-8?), на что я сказал: «Тогда я буду использовать точку с запятой для деления».

Первый диск, подключенный к PDP-11, имел ёмкость 64 килослов и каждое слово было индивидуально адресуемым. Расскажите о коротких секторах!

Позже я был основным участником внедрения RSX-11C (вся система в памяти) и RSX-11B (добавлено массовое хранилище, то есть диск).

form
12.08.2017, 01:35
MOV R0, (R0) +

PDP-11/20 неправильно помещал A+2 в слово A
Я бы сказал, что это документированное поведение многих процессоров, в частности, всех J11-based. У меня на 11/83 именно так и будет.
Поэтому MACRO-11 генерит Z на такую команду :)

Собственно согласно таблицы разностей поведения, так ведут себя 23, 24, 15, 20, 35, 40, 60, 73, 83, 84, 93, 94 и все M :)

Hunta
13.08.2017, 15:20
"Дисплеи - это отдельная история - кубинские не работали, когда было жарко, советские, когда холодно..."

Моя первая работа - на химфаке МГУ - привезли нам это чудо, порядки десяти штук. Не завёлся ни один :) Приехали два спеца с Кубы, вводить в эксплуатацию :) С ними приехали две здоровых коробки, набитые платами. Метод ремонт на 90 процентов - замены плат :) Не помню насчёт работоспособности в жару или в холод :)

Третья работа - в Саратове - был комплекс СМ-1600 (если мне не изменяет память - четыре стойки, мегабайт памяти). Крутая особенность - полная неработоспособность холодной. Помещение зимой сильно остывало, я приходил часам к восьми, включал СМ-ку, включал пару обогревателей и.... мы ждали примерно до обеда - пока в помещении не станет достаточно тепло для работы нашего ЧУДА. Зато летом было всё тип-топ - какая бы жара не стояла (окна нараспашку, потом был кондиционер, но он не сильно спасал) - ни малейшего сбоя :) И были на этой СМ-ке диски типа RK06 (не помню их советское название) - вот с ними была полная жопа. Сам дисковод продувался воздухом, что бы обеспечить достаточную подъёмную силу для головок - должен был быть определённый напор воздуха, а что бы всякая пыль не царапнула поверхность - были воздушные фильтры, в том числе - предварительный фильтр, который в нашем помещении быстро забивался, напор воздуха падал и... головка садилась на блин. После чего - диск можно было выбрасывать. Сколько мы тогда дисков угробили, пока поняли в чём причина... И что самое противное - вроде как в диске два блина.. но пересобрать из живых не получится - на одной из поверхностей был на заводе прописан серво-сигнал - по нему позиционировались головки - разобрал диск - и все.. Отъюстировать уже никак.. Жаль не оставил себе на память хотя бы испорченных парочку :)

AFZ
13.08.2017, 16:43
И были на этой СМ-ке диски типа RK06 (не помню их советской название)СМ5408 - 14М, двухдисковая кассета.

Hunta
13.08.2017, 20:17
Похоже, судя по тому, что увидел на фотках :) В общем, барахло редкостное в пыльной атмосфере.

Потом работал на СМ-1420, там стояли, опять же, судя по фоткам СМ5407 - 20-ти мб-ные монстрики :) У этих было аппаратное позиционирование головок (гребёнка), так то проблем с разборкой сборкой особо не было - но у них площадь головки была больше, поэтому посадить её на диск было сложней. Зато была проблема совместимости самих дисков между накопителями - периодически нужно было выставлять положение головок по эталонному диску, у которого на каждой поверхности была записана всего одна дорожка :) Опять же - жаль не упёр хотя бы один на память :)

Hunta
26.08.2017, 13:21
C RT-11 OBJECT MODULE PATCH UTILITY (PATCHO)
C
C DEC-11-ORPOA-E
C
C ECP, RRB, BAM
C APRIL 1974
C BC SEP 1975
C
C COPYRIGHT (C) 1974,1975
C DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
C
C THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY
C ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH
C THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE,
C OR ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE
C AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO
C ONE WHO AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE
C SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.
C
C THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO
C CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED
C AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
C
C DEC ASSUMES NO RESPONSIBILITY FOR THE USE
C OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT
C WHICH IS NOT SUPPLIED BY DEC.
C
C
C MAIN DRIVER ROUTINE FOR PATCHO
C
IMPLICIT INTEGER*2 (A-Z)
LOGICAL*1 IBUF(512),OBUF(512),FBBUF(50),B1(2),B2(2),ERROR,EO F
LOGICAL*4 WORD,DECSW
INTEGER*2 IFBBUF(25),MODNAM(2),CMBLK(12)
COMMON FBBUF,FBLEN,FBPTR,FBCODE,IBUF,OBUF,IPTR,OPTR,ERROR ,EOF,
1IREC,OREC,MODNAM,LSTMOD,BUFFUL,PREVIREC,PREVIPTR
COMMON /CS/ NAME1(2),VALUE1,NAME2(2),VALUE2,RELATV,WORD,CMDNMB
COMMON /CS/ CHKSUM,DECSW
COMMON /SECTBL/ SECMAX !TO PULL SECTBL INTO THE ROOT
COMMON /CHGTBL/ CHGMAX !AND ALSO CHGTBL
EQUIVALENCE (CMBLK,NAME1)
DATA OPENFL/-1/ !INDICATES IF A FILE IS OPEN YET
DATA BUFFUL/0/ !INDICATES WHETHER A BLOCK IS PRESENT IN FBBUF
DATA CHANGE/0/ !INDICATES IF A CHANGE HAS BEEN MADE
DATA CMBLK/12*0/ !INITIALIZE SCAN COMMON BLOCK
DATA LSTMOD /-1/ !LIST MODE SWITCH, INITIALLY OFF
DATA ERROR,EOF /F,F/ !ERROR AND END-OF-FILE FLAGS
DATA IPTR,OPTR /513,1/ !BUFFER POINTERS
DATA IREC,OREC /1,1/ !AND RECORD NUMBERS
DATA SECMAX/0/, CHGMAX/0/ !INIT # OF CSECTS, CHANGES
C
C
10 CALL GETCMD !GET NEXT COMMAND
IF (CMDNMB.NE.6.AND.OPENFL) GOTO 900 !OOPS - NO FILE OPEN
GOTO (100,200,300,400,400,600,700),CMDNMB
100 IF (CHANGE) CALL CLOSEF !DUMP ANY CHANGES MADE SO FAR
CHANGE = 0 !INDICATE CLEAN STATE
CALL POINT
GOTO 10
200 CALL LIST
GOTO 10
300 CALL DUMP
GOTO 10
400 CALL WRDBYT
CHANGE = -1 !INDICATE A CHANGE PENDING
GOTO 10
600 DEFINE FILE 1(0,256,U,IREC)
DEFINE FILE 2(0,256,U,OREC)
CALL INBLK !GET FIRST BLOCK
CALL NEXT !AND SET UP NAME OF MODULE
OPENFL = 0 !ALLOW OTHER COMMANDS NOW
GOTO 10
700 IF (CHANGE) CALL CLOSEF
710 IF (EOF) GOTO 720 !UNTIL DONE
CALL OUTBLK !ELSE KEEP COPYING
CALL INBLK
GOTO 710
720 IF (BUFFUL) CALL OUTBLK !DUMP LAST BUFFER IF NECESSARY
IF (OPTR.EQ.1) GOTO 740 !IF OUTPUT BUFFER EMPTY
DO 730 L=OPTR,512 !ZERO REMAINDER OF BUFFER
730 OBUF(L) = .FALSE.
WRITE (2'OREC) OBUF !AND WRITE IT
740 TYPE 1010 !CHECKSUM TO ASSURE PATCH TYPED CORRECTLY
1010 FORMAT('+ENTER CHECKSUM: ',$)
IF (DECSW) GOTO 800 !IF HE DOESN'T KNOW THE CHECKSUM
ACCEPT 1020,CHK1 !ELSE READ IT FROM THE CONSOLE
1020 FORMAT(O6)
IF (CHK1.NE.CHKSUM) PAUSE '?BAD PATCH?'
STOP
800 TYPE 1030,CHKSUM !TYPE OUT CALCULATED CHECKSUM
1030 FORMAT('+',O6)
STOP
900 TYPE 1000
1000 FORMAT('+?NO FILE OPEN?',/)
GOTO 10
END


Из RT-11 V02C

Ну прям моя молодость - всё что можем, пишем на фортране :) Всё что не можем - ... тоже на фортране :)

form
26.08.2017, 15:41
пишем на фортране
Недавно ради интереса посмотрел на g77. Мало того, что ни о какой свободе с аргументами даже речи не идет, так еще и не поддерживается... VFC :)

Hunta
28.08.2017, 11:59
Всё было круче :)

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

Дедушка SYSGEN.COM



SYSGEN.CND V02.11B RT-11 SYSGEN SCRIPT FILE
;
; COPYRIGHT (C) 1978
;
; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
;
; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;
#NAME SYCND
#FILE SYCND.MAC
.SBTTL SYSTEM CONDITIONAL FILE
; SYCND.MAC--SYSTEM CONDITIONAL FILE
;
; COPYRIGHT (C) 1978
;
; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.

#SET MONITR=N
#SET MTTY=N
#SET BLSJFB=N
#SET FBXM=N
#SET TIME=N
#PRINT
#PRINT RT-11 SYSTEM GENERATION PROGRAM V02.11B
#PRINT
#ASK Do you want the expanded form of dialogue [Y/N] (Y)?LONG/Y=Y
#IF LONG
#PRINT
#PRINT All answers requiring a choice are indicated by [Y/N]
#PRINT and require you to type either 'Y' for yes or 'N'
#PRINT for no followed by a carriage return. Answers requiring
#PRINT numeric input are indicated by [D] for decimal input and
#PRINT [O] for octal input. Answers requiring a device name
#PRINT response are indicated by [DD]; answers requiring a
#PRINT device name followed by a unit number are indicated
#PRINT by [DDU]. If you enter no response (just a CARRIAGE RETURN),
#PRINT your answer will default to the response indicated in
#PRINT parentheses before the question mark (e.g. [DD] (RK)?).
#PRINT Your responses are checked for validity wherever possible.
#PRINT
#PRINT The outputs of this SYSGEN program are two conditional
#PRINT files (SYCND.MAC and SYSTBL.MAC) and three indirect
#PRINT command files (SYSBLD.COM, MONBLD.COM and DEVBLD.COM)
#PRINT which are used to assemble and link the monitor(s) and
#PRINT device handlers for the target system. The assembly
#PRINT and linking process requires a machine with at least
#PRINT 16K words of memory and mass storage with at least 500
#PRINT free blocks on the output device and 128 free blocks
#PRINT on the system device.
#PRINT
#PRINT The following dialogue asks questions about
#PRINT the configuration for which the system is being
#PRINT generated, and about monitor and device support
#PRINT options you may desire. You should have read the
#PRINT RT-11 System Generation Manual before proceeding.
#PRINT You can terminate SYSGEN at any time by typing CTRL/C.
#PRINT
#PRINT The RT-11 system includes a variety of monitors, allowing
#PRINT you to select the monitor best suited to your
#PRINT application. The monitors are customized to your configuration
#PRINT by this SYSGEN process, and, while you may build any number of
#PRINT monitors, you should realize that SYSGEN places a large
#PRINT demand on time and data storage.
#PRINT
#PRINT If you elect to build the base-line
#PRINT single-job (SJ) monitor, no other monitors
#PRINT may be built during the same SYSGEN pass.
#PRINT
#PRINT The base-line single-job (SJ) monitor is the minimal monitor
#PRINT necessary to execute standard system functions. It is intended
#PRINT for systems with only 8K words of memory, or for larger
#PRINT systems that require the lowest possible monitor overhead.
#PRINT Device support is limited, and some features of the
#PRINT SJ monitor usable in larger configurations are omitted,
#PRINT such as BATCH and VT11 support.
#ENDC LONG
SYSG$N = 1 ;INDICATE SYSGENED MONITOR
#PRINT
#ASK Do you want the base-line single-job monitor [Y/N] (N)?BLSJ/Y=N
#IF BLSJ
#SET SJ=N
#SET FB=N
#SET XM=N
#SET TIME$R=N
#SET DS=N
#SET DM=N
#SET RF=N
#SET RX2=N
#SET DP=N
#SET RP3=N
#SET MTSP=N
#SET TM=N
#SET TJU=N
#SET GRAFX=N
#SET CT=N
#SET CR=N
#SET BATC$H=N
#SET ERL$G=N
#SET MONITR=Y
#SET BLSJFB=Y
#SET MTTY=N
; BASE-LINE SJ MONITOR
TIME$R = 0 ;NO TIMER SUPPORT
MPT$Y = 0 ;NO MEMORY PARITY SUPPORT
BATC$H = 0 ;NO BATCH SUPPORT
ERL$G = 0 ;NO ERROR LOG SUPPORT
ESC$P = 0 ;NO ESCAPE SEQUENCE SUPPORT
RDF$L = 0 ;NO MESSAGE ON SYS I/O ERRORS (SJ)
#IFF
#IF LONG
#PRINT
#PRINT The single-job (SJ) monitor provides an environment suitable
#PRINT for the development of simple applications in FORTRAN or
#PRINT BASIC. It provides a subset of the foreground/background
#PRINT (FB) features and offers maximum ability for minimum size.
#PRINT Some additional features may be added during SYSGEN, but at
#PRINT the cost of increased monitor size.
#ENDC LONG
#PRINT
#ASK Do you want the single-job (SJ) monitor [Y/N] (Y)?SJ/Y=Y
#IF SJ
#SET BLSJFB=Y
#SET MONITR=Y
#ENDC SJ
#IF LONG
#PRINT
#PRINT The foreground/background (FB) monitor offers an extended
#PRINT set of facilities which are helpful for applications
#PRINT involving real-time or data acquisition. These
#PRINT include timer support, serialized asynchronous I/O, and
#PRINT support for a foreground job.
#ENDC LONG
#PRINT
#ASK Do you want the foreground/background (FB) monitor [Y/N] (Y)?FB/Y=Y
#IF FB
#SET BLSJFB=Y
#SET MONITR=Y
#SET FBXM=Y
#ENDC FB
#IF LONG
#PRINT
#PRINT The extended memory (XM) monitor is a version of the FB
#PRINT monitor which supports up to 128K words of memory. It is
#PRINT useful for advanced applications that require an extended
#PRINT addressing space. The XM monitor is larger than FB and
#PRINT requires a resident USR and drivers.
#ENDC LONG
#PRINT
#ASK Do you want the extended memory (XM) monitor [Y/N] (N)?XM/Y=N
#IF XM
#SET MONITR=Y
#SET FBXM=Y
#ENDC XM
#ENDC BLSJ
#IFN MONITR
#PRINT
#PRINT ?SYSGEN-F-No monitor requested
#PRINT
#EXIT
#ENDC MONITR
#IFN BLSJ
#IF LONG
#PRINT
#PRINT There are a number of monitor options you may select:
#ENDC LONG
#IF SJ
#IF LONG
#PRINT
#PRINT The following options apply only to the SJ monitor.
#PRINT
#PRINT The SJ monitor normally does not have timer support.
#PRINT You may optionally include the .MRKT and .CMKT requests.
#ENDC LONG
#PRINT
#ASK Do you want timer support in the SJ monitor [Y/N] (N)?TIME$R/Y=N
#IF TIME$R
TIME$R = 1 ;ADD TIMER SUPPORT (SJ)
#ENDC TIME$R
#IF LONG
#PRINT
#PRINT The device time-out option permits device drives to issue
#PRINT mark time requests. This feature is currently not used
#PRINT by any RT-11 drivers, but is necessary for DECNET support.
#PRINT Select this option if you are planning to use DECNET
#PRINT with your monitor.
#ENDC LONG
#PRINT
#ASK Do you want device time-out support [Y/N] (N)?DEVTO/Y=N
#IF DEVTO
#IFN TIME
TIM$IT = 1 ;ADD DEVICE TIMER SUPPORT
#SET TIME=Y
#ENDC TIME
#IF SJ
#IFN TIME$R
TIME$R = 1 ;ADD TIMER SUPPORT (SJ)
#ENDC TIME$R
#ENDC SJ
#ENDC DEVTO
#IF LONG
#PRINT
#PRINT The SJ monitor will normally halt at the "system halt"
#PRINT if there is a fatal system I/O error. This halt can
#PRINT be replaced with a system error message at the cost of
#PRINT about 30 words additional code in the resident
#PRINT monitor. This option is highly recommended if the system
#PRINT is going to be used by anyone other than the expert.
#ENDC LONG
#PRINT
#ASK Do you want an error message on system I/O errors [Y/N] (Y)?RDF$L/Y=Y
#IF RDF$L
RDF$L = 1 ;ADD SYSTEM I/O ERROR MESSAGE (SJ)
#IFF
RDF$L = 0 ;NO SYSTEM I/O ERROR MESSAGE (SJ)
#ENDC RDF$L
#ENDC SJ
#IF FBXM
#IF LONG
#PRINT
#PRINT The following options apply only to the FB and XM monitors.
#PRINT
#PRINT The FB and XM monitors' scheduler idle loop will display
#PRINT a moving light pattern in the display register of any
#PRINT PDP-11/45, 11/50, 11/55 or 11/70 processor.
#ENDC LONG
#PRINT
#ASK Do you want idle loop light pattern [Y/N] (N)?LIGH$T/Y=N
#IF LIGH$T
LIGH$T = 1 ;IDLE LOOP LIGHT PATTERN (FB,XM)
#ENDC LIGH$T
#IF LONG
#PRINT
#PRINT RT-11 normally supports a single terminal interfaced through
#PRINT the console KL11 or DL11, which is shared by both background
#PRINT and foreground jobs. You may optionally select multi-
#PRINT terminal support of up to 16 terminals interfaced through
#PRINT a choice of DL11 and DZ11 interfaces.
#ENDC LONG
#PRINT
#ASK Do you want support of more than one terminal [Y/N] (N)?MTTY/Y=N
#IF MTTY
MTT$Y = 1 ;MULTIPLE TERMINAL SUPPORT (FB,XM)
#ENDC MTTY
#ENDC FBXM
#ENDC BLSJ
#IF LONG
#PRINT
#PRINT The following options apply to all monitors.
#PRINT
#PRINT RT-11 assumes a 60 Hz power line frequency, but can
#PRINT optionally support a 50 Hz frequency.
#ENDC LONG
#PRINT
#ASK Do you want the optional 50 Hz clock support [Y/N] (N)?CLOCK/Y=N
#IF CLOCK
CLOCK = 50. ;POWER LINE FREQUENCY (SJ,FB,XM)
#IFF
CLOCK = 60. ;POWER LINE FREQUENCY (SJ,FB,XM)
#ENDC CLOCK
#IFN BLSJ
#IF LONG
#PRINT
#PRINT RT-11 normally uses a line clock for the system clock.
#PRINT You may substitute the KW11-P programmable clock if you wish,
#PRINT in which case the KW11-P is not available for program use.
#ENDC LONG
#PRINT
#ASK Do you want to use the KW11-P clock as the system clock [Y/N] (N)?KW11$P/Y=N
#IF KW11$P
KW11$P = 1 ;USE KW11-P CLOCK AS SYSTEM CLOCK (SJ,FB,XM)
#ENDC KW11$P
#ENDC BLSJ
#IF LONG
#PRINT
#PRINT The bootstrap optionally executes an indirect file when
#PRINT starting the system.
#ENDC LONG
#PRINT
#ASK Do you want the startup indirect file [Y/N] (Y)?START/Y=Y
#IF START
STAR$T = 1 ;STARTUP COMMAND FILE (SJ,FB,XM)
#ENDC START
#IFN BLSJ
#IF LONG
#PRINT
#PRINT RT-11 supports parity memory and processes memory
#PRINT parity errors. If error logging is present, parity errors
#PRINT are also logged.
#ENDC LONG
#PRINT
#ASK Do you want memory parity support [Y/N] (N)?MPT$Y/Y=N
#IF MPT$Y
MPT$Y = 1 ;MEMORY PARITY (SJ,FB,XM)
#ENDC MPT$Y
#IF LONG
#PRINT
#PRINT The monitor normally halts on power recovery startup
#PRINT after a power failure. You may elect to have the monitor
#PRINT print a message explaining that power failure caused the halt.
#ENDC LONG
#PRINT
#ASK Do you want power failure messages [Y/N] (Y)?PWF$L/Y=Y
#IF PWF$L
PWF$L = 1 ;POWER FAIL (SJ,FB,XM)
#ENDC PWF$L
#IF LONG
#PRINT
#PRINT RT-11 supports BATCH as an option. Indirect command
#PRINT file support is separately available in all monitors,
#PRINT and BATCH support need not be selected to obtain
#PRINT indirect command file support.
#ENDC LONG
#PRINT
#ASK Do you want BATCH support [Y/N] (N)?BATC$H/Y=N
#IF BATC$H
BATC$H = 1 ;BATCH SUPPORT (SJ,FB,XM)
#ENDC BATC$H
#IF LONG
#PRINT
#PRINT The RT-11 terminal service is capable of recognizing
#PRINT ANSI or DEC standard escape sequences and processing
#PRINT those sequences according to application instructions.
#PRINT This support is not necessary for normal system operation;
#PRINT if your application does not make special use of escape
#PRINT sequences, do not select this support.
#ENDC LONG
#PRINT
#ASK Do you want escape sequence processing [Y/N] (N)?ESC/Y=N
#IF ESC
#PRINT
#ASK Do you want ANSI standard escape sequences [Y/N] (N)?ANSI/Y=N
#IF ANSI
ESC$P = 2 ;ANSI ESCAPE SEQUENCES (SJ,FB,XM)
#IFF
ESC$P = 1 ;DEC ESCAPE SEQUENCES (SJ,FB,XM)
#PRINT
#PRINT DEC standard escape sequences assumed.
#ENDC ANSI
#IFF
ESC$P = 0 ;NO ESCAPE SEQUENCES (SJ,FB,XM)
#ENDC ESC
#IF LONG
#PRINT
#PRINT Selection of error logging creates the error logging
#PRINT driver EL and incorporates error logging into the device
#PRINT handlers. When EL is loaded and initialized, logging of
#PRINT disk, DECtape and memory parity errors will occur.
#ENDC LONG
#PRINT
#ASK Do you want error logging [Y/N] (N)?ERL$G/Y=N
#IF ERL$G
ERL$G = 1 ;ERROR LOGGING (SJ,FB,XM)
#IF SJ
#IFN TIME$R
TIME$R = 1 ;ADD TIMER SUPPORT (SJ)
#ENDC TIME$R
#ENDC SJ
#IF LONG
#PRINT
#PRINT The error logger can capture either initial errors
#PRINT or the most recent errors that have occured. For most
#PRINT types of problems, information concerning initial
#PRINT errors is most useful.
#ENDC LONG
#PRINT
#ASK Should the error logger capture the most recent errors [Y/N] (N)?ERLW/Y=N
#IF ERLW
ERL$W = 1 ;LOG MOST RECENT ERROR (SJ,FB,XM)
#ENDC ERLW
#IF LONG
#PRINT
#PRINT Normal error logging usage requires the utility ERRUTL
#PRINT to be run occasionally from the console
#PRINT to write the error information out to the error log file. If
#PRINT an application is to be run continuously for a long period
#PRINT of time, however, the error logger has a facility that
#PRINT allows the application program to dump the error log buffer
#PRINT to the error file at regular intervals. Unless your
#PRINT application specifically uses this feature, you do not need
#PRINT this support.
#ENDC LONG
#PRINT
#PRINT Do you want a program other than ERRUTL
#ASK - to write the error log buffer [Y/N] (N)?ERLA/Y=N
#IF ERLA
ERL$A = 1 ;AUTOMATIC ERROR LOG DUMPING (SJ,FB,XM)
#ENDC ERLA
#IF LONG
#PRINT
#PRINT The error logger requires a resident buffer to collect
#PRINT errors. The buffer size may be increased to accomodate
#PRINT an unusual error load.
#ENDC LONG
#PRINT
#PRINT How many 256 word memory blocks should be
#ASK - set aside for the error buffer [D] (1)?ERLB/D=1,1,4
#SUBS "ER.B"ERLB
ERL$B = ER.B. ;NUMBER OF BLOCKS IN ERROR LOG BUFFER
#ENDS
#IF LONG
#PRINT
#PRINT The error logger can handle up to 35 individual device
#PRINT units. Space can be conserved by reducing the number
#PRINT of units the logger can handle to the specific number
#PRINT of units present on the target configuration. Only disk
#PRINT and DECtape units need be included.
#ENDC LONG
#PRINT
#ASK How many disk and DECtape device units can be logged [D] (10)?ERLU/D=10,1,35
#SUBS "ER.U"ERLU
ERL$U = ER.U. ;NUMBER OF UNITS TO BE LOGGED
#ENDS
#ENDC ERL$G
#ENDC BLSJ
#SET RK=N
#SET RF=N
#SET DT=N
#SET DX=N
#SET DS=N
#SET DP=N
#SET DM=N
#SET DL=N
#SET DY=N
#SET DD=N
#SET PD=N
#IF LONG
#PRINT
#PRINT The following questions ask about the
#PRINT peripheral devices that are to be supported by the
#PRINT generated system. By selecting support for a specific
#PRINT device, you make the device known to the monitor's
#PRINT device tables, and you cause a device handler
#PRINT to be generated for the device. If you do not select
#PRINT a specific device, you will have to create the
#PRINT device handler separately and use the monitor
#PRINT INSTALL command when device access is desired.
#PRINT
#PRINT RT-11 supports the following devices as system devices:
#IF BLSJ
#PRINT RK RK05 Cartridge Disk
#PRINT DT DECtape
#PRINT DX Flexible Diskette
#PRINT PD PDT Intelligent Terminal
#IFF
#PRINT RK RK05 Cartridge Disk
#PRINT DL RL01 Cartridge Disk
#PRINT RF RF11 Fixed-head Disk
#PRINT DT DECtape
#PRINT DX RX01 Flexible Diskette
#PRINT DY RX02 Double Density Diskette
#PRINT DS RJS03/4 Massbus Fixed-head Disk
#PRINT DP RP11 Disk Pack
#PRINT DM RK06/RK07 Cartridge Disk
#PRINT DD DECtape II Data Cartridge
#PRINT PD PDT Intelligent Terminal
#ENDC BLSJ
#PRINT
#PRINT You must select one as your system device; use the
#PRINT two character device name as indicated above.
#ENDC LONG
#PRINT
#ASK What is the name of the system device [DD] (RK)?SYSDV/A=RK
#SUBS "S$D."SYSDV
$S$D.SYS = 1 ;SYSTEM DEVICE
#SET S$D.=Y
#ENDS
#IF BLSJ
#IFN RK
#IFN DT
#IFN DX
#IFN PD
#PRINT
#PRINT ?SYSGEN-F-Illegal system device for base-line monitor
#EXIT
#ENDC PD
#ENDC DX
#ENDC DT
#ENDC RK
#ENDC BLSJ
#IFN BLSJ
#IFN DS
#IFN RF
#PRINT
#ASK Do you want RJS03 or RJS04 disk support [Y/N] (N)?DS/Y=N
#ENDC RF
#ENDC DS
#IF DS
#PRINT
#ASK Do you want RJS03 support (as opposed to RJS04 support) [Y/N] (Y)?DS3/Y=Y
#IF DS3
RJS0$3 = 1 ;RJS DISK IS RJS03
#IFF
#PRINT
#PRINT RJS04 support assumed.
RJS0$3 = 0 ;RJS DISK IS RJS04
#ENDC DS3
#ENDC DS
#IFN DS
#IFN RF
#PRINT
#ASK Do you want RF11 fixed-head disk support [Y/N] (N)?RF/Y=N
#ENDC RF
#IF RF
#PRINT
#ASK How many disk platters are installed on the RF11 controller [D] (1)?RFP/D=1,1,8
#SUBS "RF.P"RFP
$RFNUM = RF.P. ;NUMBER OF RS11 PLATTERS
#ENDS
#ENDC RF
#ENDC DS
#IFN DP
#PRINT
#ASK Do you want RP11/RPR02 or RP11/RP03 disk support [Y/N] (N)?DP/Y=N
#ENDC DP
#IF DP
#PRINT
#ASK Do you want RPR02 support (as opposed to RPR02/RP03) [Y/N] (Y)?DP2/Y=Y
#IF DP2
RP0$3 = 0 ;RP11 DISK IS RP02/RPR02
#IFF
RP0$3 = 1 ;RP11 DISK IS RP03
#PRINT
#PRINT RPR02 and RP03 support assumed.
#ENDC DP2
#ENDC DP
#ENDC BLSJ
#IFN DX
#PRINT
#ASK Do you want RX01/RX11 flexible diskette support [Y/N] (N)?DX/Y=N
#ENDC DX
#IF DX
#IF LONG
#PRINT
#PRINT The RX11 flexible diskette subsystem supports only two
#PRINT drives for each controller. If your system contains four
#PRINT diskette drives, there is a second controller present
#PRINT supporting the third and fourth units.
#ENDC LONG
#PRINT
#ASK Do you want support for a second RX11 controller [Y/N] (N)?DX2/Y=N
#PRINT
#PRINT What is the CSR address for the
#ASK - first RX11 controller [O] (177170)?DXC1/O=177170,160000,177570
#PRINT
#ASK What is the vector address for the first RX11 controller [O] (264)?DXV1/O=264,100,770
#SUBS "R.C"DXC1
DX$CSR = R.C ;CSR OF FIRST RX11
#SUBS "R.V"DXV1
DX$VEC = R.V ;VECTOR OF FIRST RX11
#ENDS
#IF DX2
DXT$O = 1 ;SECOND RX11 CONTROLLER
#PRINT
#PRINT What is the CSR address for the
#ASK - second RX11 controller [O] (177150)?DXC/O=177150,160000,177570
#PRINT
#ASK What is the vector address for the second RX11 controller [O] (270)?DXV/O=270,100,770
#SUBS "R.C"DXC
DX$CS2 = R.C ;CSR OF SECOND RX11
#SUBS "R.V"DXV
DX$VC2 = R.V ;VECTOR OF SECOND RX11
#ENDS
#ENDC DX2
#ENDC DX
#IFN BLSJ
#IFN DY
#PRINT
#ASK Do you want RX02 diskette support [Y/N] (N)?DY/Y=N
#ENDC DY
#IF DY
#IF LONG
#PRINT
#PRINT The RX02 diskette subsystem supports only two drives for
#PRINT each controller. If your system contains four drives,
#PRINT there is a second controller present supporting the
#PRINT third and fourth units.
#ENDC LONG
#PRINT
#ASK Do you want support for a second RX02 controller [Y/N] (N)?DY2/Y=N
#IF LONG
#PRINT
#PRINT The RX02 diskette supports both single and double densities
#PRINT by default. You can obtain a slight performance
#PRINT enhancement and a reduction in the size of the device
#PRINT handler by specifying double density support only.
#ENDC LONG
#PRINT
#ASK Do you want RX02 double density support only [Y/N] (N)?DYD/Y=N
#IF DYD
DY$DD = 1 ;RX02 DOUBLE DENSITY ONLY
#ENDC DYD
#PRINT
#PRINT What is the CSR address for the
#ASK - first RX02 controller [O] (177170)?DYC1/O=177170,160000,177570
#PRINT
#ASK What is the vector address for the first RX02 controller [O] (264)?DYV1/O=264,100,770
#SUBS "R.C"DYC1
DY$CSR = R.C ;CSR OF FIRST RX02
#SUBS "R.V"DYV1
DY$VEC = R.V ;VECTOR OF FIRST RX02
#ENDS
#IF DY2
DYT$O = 1 ;SECOND RX02 CONTROLLER
#PRINT
#PRINT What is the CSR address for the
#ASK - second RX02 controller [O] (177150)?DYC/O=177150,160000,177564
#PRINT
#ASK What is the vector address for the second RX02 controller [O] (270)?DYV/O=270,100,770
#SUBS "R.C"DYC
DY$CS2 = R.C ;CSR OF SECOND RX02
#SUBS "R.V"DYV
DY$VC2 = R.V ;VECTOR OF SECOND RX02
#ENDS
#ENDC DY2
#ENDC DY
#IFN DD
#PRINT
#ASK Do you want DECtape II Data Cartridge support [Y/N] (N)?DD/Y=N
#ENDC DD
#IF DD
#PRINT
#PRINT What is the CSR address for the
#ASK - DECtape II controller [O] (176500)?DDC/O=176500,160000,177570
#PRINT
#ASK What is the vector address for the DECtape II controller [O] (300)?DDV/O=300,100,770
#SUBS "R.C"DDC
DD$CSR = R.C ;CSR OF DECTAPE II
#SUBS "R.V"DDV
DD$VEC = R.V ;VECTOR OF DECTAPE II
#ENDS
#ENDC DD
#IFN DL
#PRINT
#ASK Do you want RL01 disk support [Y/N] (N)?DL/Y=N
#ENDC DL
#IF DL
#PRINT
#ASK How many RL01 units are to be supported [D] (2)?DLUNIT/D=2,1,4
#SUBS "U.N"DLUNIT
DL$UN = U.N ;NUMBER OF RL01 UNITS
#ENDC DL
#ENDC BLSJ
#IFN RK
#PRINT
#ASK Do you want RK05/RK05F disk support [Y/N] (N)?RK/Y=N
#ENDC RK
#IFN DT
#PRINT
#ASK Do you want TC11 DECtape support [Y/N] (N)?DT/Y=N
#ENDC DT
#IFN BLSJ
#IFN DM
#PRINT
#ASK Do you want RK06/RK07 disk support [Y/N] (N)?DM/Y=N
#ENDC DM
#PRINT
#ASK Do you want magnetic tape support [Y/N] (N)?MTSP/Y=N
#IFN MTSP
#SET TM=N
#SET TJU=N
#IFF
#IF LONG
#PRINT
#PRINT RT-11 magtape support is available in two forms. The standard
#PRINT form is file-structured magtape, which supports a subset of
#PRINT ANSI file format. The file-structured handler may be used to
#PRINT store and retrieve data in a file format usable with most
#PRINT RT-11 system programs. The second form of magtape support
#PRINT omits file structuring and reads and writes data directly in variable
#PRINT length records. This type of support is called the "hardware
#PRINT handler", and while this handler is significantly smaller than
#PRINT the file-structured handler, it can not be used with any
#PRINT system programs. The file-structured handler is also
#PRINT capable of performing direct hardware functions.
#ENDC LONG
#PRINT
#ASK Do you want the file-structured magtape handler [Y/N] (Y)?MTF/Y=Y
#IF MTF
FILES = 1 ;MAGTAPE FILES SUPPORT
#IF LONG
#PRINT
#PRINT The file-structured handler requires table space for
#PRINT each magtape unit. You can minimize the size of
#PRINT the magtape handler by limiting the number of units it can
#PRINT simultaneously handle to the number actually present on the
#PRINT target machine.
#ENDC LONG
#PRINT
#ASK How many magtape units are to be supported [D] (2)?DRIVEN/D=2,1,8
#SUBS "D.N"DRIVEN
DRIVEN = D.N. ;NUMBER OF MAGTAPE UNITS
#ENDS
#ENDC MTF
#PRINT
#ASK Do you want TM11 (UNIBUS) magtape support [Y/N] (Y)?TM/Y=Y
#IF TM
#SET TJU=N
#IFF
#PRINT
#ASK Do you want TJU16 (MASSBUS) magtape support [Y/N] (Y)?TJU/Y=Y
#IFN TJU
#PRINT
#PRINT ?SYSGEN-F-Magtape specification error
#PRINT
#EXIT
#ENDC TJU
#ENDC TM
#ENDC MTSP
#PRINT
#ASK Do you want TA11 cassette support [Y/N] (N)?CT/Y=N
#PRINT
#ASK Do you want VT11 or VS60 graphics support [Y/N] (N)?GRAFX/Y=N
#IF GRAFX
#PRINT
#ASK Do you want VS60 support [Y/N] (N)?VS60$/Y=N
#IF VS60$
VS60$ = 1 ;SUPPORT VS60 DISPLAY
#IFF
VT11$ = 1 ;SUPPORT VT11 DISPLAY
#PRINT
#PRINT VT11 hardware is assumed.
#ENDC VS60$
#IF LONG
#PRINT
#PRINT The VT11/VS60 is normally installed at vector 320 with
#PRINT its CSR address at 172000, but these addresses may float.
#ENDC LONG
#PRINT
#ASK What is the CSR address for the VT11/VS60 [O] (172000)?VC/O=172000,160000,177570
#PRINT
#ASK What is the vector address for the VT11/VS60 [O] (320)?VV/O=320,300,770
#SUBS "V.C"VC
VT.CSR = V.C ;VT11/VS60 CSR
#SUBS "V.V"VV
VT.VEC = V.V ;VT11/VS60 VECTOR
#ENDS
#ENDC GRAFX
#ENDC BLSJ
#PRINT
#ASK Do you want line printer support [Y/N] (Y)?LP/Y=Y
#IF LP
#IF LONG
#PRINT
#PRINT The line printer vector address is normally 200
#PRINT and the CSR address is normally 177514. If your printer
#PRINT is installed at another vector or CSR address, you
#PRINT must specify the correct values.
#ENDC LONG
#PRINT
#ASK Does your printer have a non-standard vector or CSR address [Y/N] (N)?NSLP/Y=N
#IF NSLP
#PRINT
#ASK What is the CSR address for the printer [O] (177514)?LPCS/O=177514,160000,177570
#PRINT
#ASK What is the vector address for the printer [O] (200)?LPVC/O=200,100,770
#SUBS "LPC$"LPCS
LP$CSR = LPC$ ;LINE PRINTER CSR
#SUBS "LPV$"LPVC
LP$VEC = LPV$ ;LINE PRINTER VECTOR
#ENDS
#ENDC NSLP
#ENDC LP
#IF LONG
#PRINT
#PRINT The PC11 is a high speed paper tape reader/punch unit.
#PRINT The PR11 is a similar unit with a high speed reader but no punch.
#ENDC LONG
#PRINT
#ASK Do you want PC11 high-speed paper tape reader/punch support [Y/N] (N)?PC/Y=N
#IF PC
#SET PR=N
PR11$X = 0 ;PC11 HI-SPEED READER/PUNCH
#IFF
#PRINT
#ASK Do you want PR11 high-speed paper tape reader support [Y/N] (N)?PR/Y=N
#IF PR
PR11$X = 1 ;PR11 HI-SPEED READER
#ENDC PR
#ENDC PC
#IFN BLSJ
#PRINT
#ASK Do you want card reader support [Y/N] (N)?CR/Y=N
#ENDC BLSJ
#IF LONG
#PRINT
#PRINT The null handler is a mechanism that allows logical
#PRINT input and output to take place without actual physical
#PRINT data transfers. It is most useful in debugging applications.
#ENDC LONG
#PRINT
#ASK Do you want the null handler [Y/N] (Y)?NULL/Y=Y
#IF LONG
#PRINT
#PRINT This completes the device query. Space in the monitor is allocated
#PRINT only for the devices specified, but you may allocate additional
#PRINT space by requesting empty device slots. Allocate
#PRINT one empty slot for each device you intend to add to
#PRINT the system after it is built.
#ENDC LONG
#PRINT
#ASK How many extra device slots do you want [D] (0)?EMPTY/D=0,0,10
#IF LONG
#PRINT
#PRINT The indirect command files generated by the SYSGEN program
#PRINT contain commands that will delete the object modules
#PRINT from which the system is built when they are
#PRINT no longer needed. This measure serves to conserve disk
#PRINT space while the system is being built. It is often useful,
#PRINT however, to keep the object modules for later use in
#PRINT patching the system. If your output device
#PRINT has sufficient free space,you can elect to retain all
#PRINT system object modules for future use.
#ENDC LONG
#PRINT
#ASK Do you want to retain the system OBJ's [Y/N] (N)?OBJ/Y=N
#IF MTTY
#IF LONG
#PRINT
#PRINT The following questions ask about the terminal
#PRINT interfaces installed in your system. RT-11 supports a
#PRINT combination of serial asynchronous interfaces which include
#PRINT the KL11, DLV11, DLV11-E, DLV11-F, DLV11-J, and the DL11
#PRINT series. It also supports DL11-E and DLV11-E interfaces with
#PRINT modem capabilities, and the DZ11 and DZV11 series of
#PRINT asynchronous line multiplexors.
#PRINT
#PRINT The dialogue asks first for the number of local DL11
#PRINT lines, then the number of remote DL11 lines. The total
#PRINT number of lines is the sum of local and remote
#PRINT lines. Physical unit numbers of the DL11 lines are assigned
#PRINT first to local lines and then to remote lines. This assignment
#PRINT is permanent and its order cannot be changed.
#PRINT
#PRINT After the dialogue has established the number of lines of each
#PRINT type, the CSR and vector addresses for each line must be
#PRINT established. The first question corresponds to the first
#PRINT local line (the console), the second to the second local
#PRINT line, etc. until all local lines are accounted for. At that
#PRINT point, the next response applies to the first remote
#PRINT line, the second to the second remote line, etc. until all
#PRINT remote lines are accounted for.
#ENDC LONG
#PRINT
#ASK How many local DL11's, including the console [D] (1)?DLNUM/D=1,1,8
#SUBS "DLN$"DLNUM
DL11$L = DLN$. ;# OF LOCAL DL11 INTERFACES (MULTI-TERM SUPPORT)
#PRINT
#ASK How many remote DL11 lines [D] (0)?DLMDM/D=0,0,7
#SUBS "DLM$"DLMDM
DL11$M = DLM$. ;# OF REMOTE DL11-E LINES (MULTI-TERM SUPPORT)
DL11$N = DLN$. + DLM$. ;TOTAL # OF DL11 LINES (MULTI-TERM SUPPORT)
#ENDS
#PRINT
#PRINT What is the CSR address for the
#ASK - first (console) DL11 [O] (177560)?DLC/O=177560,160000,177570
#PRINT
#ASK What is the vector address for the first (console) DL11 [O] (60)?DLV/O=60,60,770
#SUBS "DL.C"DLC
#SUBS "DL.V"DLV
DLC$0 = DL.C ;CSR OF 1ST (CONSOLE) DL11 (MULTI-TERM SUPPORT)
DLV$0 = DL.V ;VECTOR OF 1ST (CONSOLE) DL11 (MULTI-TERM SUPPORT)
#ENDS
#DECR DLNUM
#IFGT DLNUM
#PRINT
#ASK What is the CSR address for the next (local) DL11 [O] (176500)?DLC/O=176500,160000,177570
#PRINT
#ASK What is the vector address for the next (local) DL11 [O] (300)?DLV/O=300,60,770
#SUBS "DL.C"DLC
#SUBS "DL.V"DLV
DLC$1 = DL.C ;CSR OF 2ND (LOCAL) DL11 (MULTI-TERM SUPPORT)
DLV$1 = DL.V ;VECTOR OF 2ND (LOCAL) DL11 (MULTI-TERM SUPPORT)
#ENDS
#IFF
#IFGT DLMDM
#PRINT
#ASK What is the CSR address for the next (remote) DL11 [O] (175610)?DLC/O=175610,160000,177570
#PRINT
#ASK What is the vector address for the next (remote) DL11 [O] (300)?DLV/O=300,60,770
#SUBS "DL.C"DLC
#SUBS "DL.V"DLV
DLC$1 = DL.C ;CSR OF 2ND (REMOTE) DL11 (MULTI-TERM SUPPORT)
DLV$1 = DL.V ;VECTOR OF 2ND (REMOTE) DL11 (MULTI-TERM SUPPORT)
#ENDS
#DECR DLMDM
#ENDC DLMDM
#ENDC DLNUM
#DECR DLNUM
#IFGT DLNUM
#PRINT
#ASK What is the CSR address for the next (local) DL11 [O] (176510)?DLC/O=176510,160000,177570
#PRINT
#ASK What is the vector address for the next (local) DL11 [O] (310)?DLV/O=310,60,770
#SUBS "DL.C"DLC
#SUBS "DL.V"DLV
DLC$2 = DL.C ;CSR OF 3RD (LOCAL) DL11 (MULTI-TERM SUPPORT)
DLV$2 = DL.V ;VECTOR OF 3RD (LOCAL) DL11 (MULTI-TERM SUPPORT)
#ENDS
#IFF
#IFGT DLMDM
#PRINT
#ASK What is the CSR address for the next (remote) DL11 [O] (175620)?DLC/O=175620,160000,177570
#PRINT
#ASK What is the vector address for the next (remote) DL11 [O] (310)?DLV/O=310,60,770
#SUBS "DL.C"DLC
#SUBS "DL.V"DLV
DLC$2 = DL.C ;CSR OF 3RD (REMOTE) DL11 (MULTI-TERM SUPPORT)
DLV$2 = DL.V ;VECTOR OF 3RD (REMOTE) DL11 (MULTI-TERM SUPPORT)
#ENDS
#DECR DLMDM
#ENDC DLMDM
#ENDC DLNUM
#DECR DLNUM
#IFGT DLNUM
#PRINT
#ASK What is the CSR address for the next (local) DL11 [O] (176520)?DLC/O=176520,160000,177570
#PRINT
#ASK What is the vector address for the next (local) DL11 [O] (320)?DLV/O=320,60,770
#SUBS "DL.C"DLC
#SUBS "DL.V"DLV
DLC$3 = DL.C ;CSR OF 4TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
DLV$3 = DL.V ;VECTOR OF 4TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
#ENDS
#IFF
#IFGT DLMDM
#PRINT
#ASK What is the CSR address for the next (remote) DL11 [O] (175630)?DLC/O=175630,160000,177570
#PRINT
#ASK What is the vector address for the next (remote) DL11 [O] (320)?DLV/O=320,60,770
#SUBS "DL.C"DLC
#SUBS "DL.V"DLV
DLC$3 = DL.C ;CSR OF 4TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
DLV$3 = DL.V ;VECTOR OF 4TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
#ENDS
#DECR DLMDM
#ENDC DLMDM
#ENDC DLNUM
#DECR DLNUM
#IFGT DLNUM
#PRINT
#ASK What is the CSR address for the next (local) DL11 [O] (176530)?DLC/O=176530,160000,177570
#PRINT
#ASK What is the vector address for the next (local) DL11 [O] (330)?DLV/O=330,60,770
#SUBS "DL.C"DLC
#SUBS "DL.V"DLV
DLC$4 = DL.C ;CSR OF 5TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
DLV$4 = DL.V ;VECTOR OF 5TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
#ENDS
#IFF
#IFGT DLMDM
#PRINT
#ASK What is the CSR address for the next (remote) DL11 [O] (175640)?DLC/O=175640,160000,177570
#PRINT
#ASK What is the vector address for the next (remote) DL11 [O] (330)?DLV/O=330,60,770
#SUBS "DL.C"DLC
#SUBS "DL.V"DLV
DLC$4 = DL.C ;CSR OF 5TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
DLV$4 = DL.V ;VECTOR OF 5TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
#ENDS
#DECR DLMDM
#ENDC DLMDM
#ENDC DLNUM
#DECR DLNUM
#IFGT DLNUM
#PRINT
#ASK What is the CSR address for the next (local) DL11 [O] (176540)?DLC/O=176540,160000,177570
#PRINT
#ASK What is the vector address for the next (local) DL11 [O] (340)?DLV/O=340,60,770
#SUBS "DL.C"DLC
#SUBS "DL.V"DLV
DLC$5 = DL.C ;CSR OF 6TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
DLV$5 = DL.V ;VECTOR OF 6TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
#ENDS
#IFF
#IFGT DLMDM
#PRINT
#ASK What is the CSR address for the next (remote) DL11 [O] (175650)?DLC/O=175650,160000,177570
#PRINT
#ASK What is the vector address for the next (remote) DL11 [O] (340)?DLV/O=340,60,770
#SUBS "DL.C"DLC
#SUBS "DL.V"DLV
DLC$5 = DL.C ;CSR OF 6TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
DLV$5 = DL.V ;VECTOR OF 6TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
#ENDS
#DECR DLMDM
#ENDC DLMDM
#ENDC DLNUM
#DECR DLNUM
#IFGT DLNUM
#PRINT
#ASK What is the CSR address for the next (local) DL11 [O] (176550)?DLC/O=176550,160000,177570
#PRINT
#ASK What is the vector address for the next (local) DL11 [O] (350)?DLV/O=350,60,770
#SUBS "DL.C"DLC
#SUBS "DL.V"DLV
DLC$6 = DL.C ;CSR OF 7TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
DLV$6 = DL.V ;VECTOR OF 7TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
#ENDS
#IFF
#IFGT DLMDM
#PRINT
#ASK What is the CSR address for the next (remote) DL11 [O] (175660)?DLC/O=175660,160000,177570
#PRINT
#ASK What is the vector address for the next (remote) DL11 [O] (350)?DLV/O=350,60,770
#SUBS "DL.C"DLC
#SUBS "DL.V"DLV
DLC$6 = DL.C ;CSR OF 7TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
DLV$6 = DL.V ;VECTOR OF 7TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
#ENDS
#DECR DLMDM
#ENDC DLMDM
#ENDC DLNUM
#DECR DLNUM
#IFGT DLNUM
#PRINT
#ASK What is the CSR address for the next (local) DL11 [O] (176560)?DLC/O=176560,160000,177570
#PRINT
#ASK What is the vector address for the next (local) DL11 [O] (360)?DLV/O=360,60,770
#SUBS "DL.C"DLC
#SUBS "DL.V"DLV
DLC$7 = DL.C ;CSR OF 8TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
DLV$7 = DL.V ;VECTOR OF 8TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
#ENDS
#IFF
#IFGT DLMDM
#PRINT
#ASK What is the CSR address for the next (remote) DL11 [O] (175670)?DLC/O=175670,160000,177570
#PRINT
#ASK What is the vector address for the next (remote) DL11 [O] (360)?DLV/O=360,60,770
#SUBS "DL.C"DLC
#SUBS "DL.V"DLV
DLC$7 = DL.C ;CSR OF 8TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
DLV$7 = DL.V ;VECTOR OF 8TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
#ENDS
#DECR DLMDM
#ENDC DLMDM
#ENDC DLNUM
#IF LONG
#PRINT
#PRINT RT-11 supports one DZ11-A or -B eight line multiplexor
#PRINT with an additional DZ11-C or -D eight line multiplexor
#PRINT for a maximum of 16 lines,or one DZV11 four line
#PRINT multiplexor. Modem support is available on
#PRINT remote lines, but is limited to Bell 103 type modems or
#PRINT equivalent with the "common clear to send and carrier"
#PRINT option installed to operate the modem in an auto-answer mode.
#ENDC LONG
#PRINT
#ASK Do you want DZ11 or DZV11 multiplexor support [Y/N] (N)?DZNEED/Y=N
#IFN DZNEED
DZ11$N = 0 ;NO DZ11 OR DZV11 SUPPORT (MULTI-TERM SUPPORT)
#IFF
#PRINT
#ASK Do you want DZ11 multiplexor support [Y/N] (Y)?DZ11/Y=Y
#IF DZ11
#PRINT
#ASK Do you want support for two DZ11's [Y/N] (N)?DZTWO/Y=N
#IF DZTWO
DZ11$N = 2 ;# OF DZ11 MULTIPLEXORS (MULTI-TERM SUPPORT)
#IFF
DZ11$N = 1 ;# OF DZ11 MULTIPLEXORS (MULTI-TERM SUPPORT)
#ENDC DZTWO
#IFF
#PRINT
#PRINT One DZV11 four line multiplexor assumed.
DZ11$N = 1 ;# OF DZV11 MULTIPLEXORS (MULTI-TERM SUPPORT)
#ENDC DZ11
#IF LONG
#PRINT
#PRINT The lines must be initialized to a specific baud
#PRINT rate. The choices are 300, 150, and 110 baud.
#ENDC LONG
#PRINT
#ASK Do you want the lines initialized to 300 baud [Y/N] (Y)?B300/Y=Y
#IF B300
DZSP$D = 2400 ;INIT TO 300 BAUD (MULTI-TERM SUPPORT)
DZST$P = 0 ;1 STOP UNIT (MULTI-TERM SUPPORT)
#IFF
#PRINT
#ASK Do you want the lines initialized to 150 baud [Y/N] (Y)?B150/Y=Y
#IF B150
DZSP$D = 2000 ;INIT TO 150 BAUD (MULTI-TERM SUPPORT)
DZST$P = 0 ;1 STOP UNIT (MULTI-TERM SUPPORT)
#IFF
DZSP$D = 1000 ;INIT TO 110 BAUD (MULTI-TERM SUPPORT)
DZST$P = 40 ;2 STOP UNITS (MULTI-TERM SUPPORT)
#PRINT
#PRINT 110 baud is assumed.
#ENDC B150
#ENDC B300
#IF LONG
#PRINT
#PRINT The vectors and CSR addresses are assigned to the floating
#PRINT device region and will vary with each installation.
#ENDC LONG
#IFN DZ11
#PRINT
#ASK What is the CSR address for the DZV11 [O] (160010)?DZ1/O=160010,160000,177570
#PRINT
#ASK What is the vector address for the DZV11 [O] (300)?DZV1/O=300,60,770
#SUBS "DZCS1"DZ1
#SUBS "DZVEC1"DZV1
DZVC$0 = DZVEC1 ;VECTOR OF FIRST DZ11 (MULTI-TERM SUPPORT)
DZCS$0 = DZCS1 ;CSR OF FIRST DZ11 (MULTI-TERM SUPPORT)
#ENDS
#IFF
#PRINT
#ASK What is the CSR address for the first DZ11 [O] (160010)?DZ1/O=160010,160000,177570
#PRINT
#ASK What is the vector address for the first DZ11 [O] (300)?DZV1/O=300,60,770
#SUBS "DZCS1"DZ1
#SUBS "DZVEC1"DZV1
DZVC$0 = DZVEC1 ;VECTOR OF FIRST DZ11 (MULTI-TERM SUPPORT)
DZCS$0 = DZCS1 ;CSR OF FIRST DZ11 (MULTI-TERM SUPPORT)
#ENDS
#IF DZTWO
#PRINT
#ASK What is the CSR address for the second DZ11 [O] (160020)?DZ2/O=160020,160000,177570
#PRINT
#ASK What is the vector address of the second DZ11 [O] (310)?DZV2/O=310,60,770
#SUBS "DZCS2"DZ2
#SUBS "DZVEC2"DZV2
DZVC$1 = DZVEC2 ;VECTOR OF SECOND DZ11 (MULTI-TERM SUPPORT)
DZCS$1 = DZCS2 ;CSR OF SECOND DZ11 (MULTI-TERM SUPPORT)
#ENDS
#ENDC DZTWO
#ENDC DZ11
#IF LONG
#PRINT
#PRINT The following dialogue will ask for the number of local
#PRINT DZ11 or DZV11 lines, then the number of remote lines.
#PRINT The total number of lines is the sum of local and remote
#PRINT lines. Physical unit numbers of the DZ11 or DZV11 lines
#PRINT are assigned first to local lines and then to remote
#PRINT lines. This assignment is permanent and its order cannot
#PRINT be changed.
#ENDC LONG
#IF DZ11
#PRINT
#ASK How many DZ11 lines are local terminals [D] (0)?DZLCL/D=0,0,16
#PRINT
#ASK How many remote DZ11 lines [D] (0)?DZM/D=0,0,16
#IFF
#PRINT
#ASK How many DZV11 lines are local terminals [D] (0)?DZLCL/D=0,0,4
#PRINT
#ASK How many remote DZV11 lines [D] (0)?DZM/D=0,0,4
#ENDC DZ11
#SUBS "DZL$"DZLCL
DZ11$L = DZL$. ;# OF LOCAL DZ11 LINES (MULTI-TERM SUPPORT)
#ENDS
#SUBS "DZM$"DZM
DZ11$M = DZM$. ;# OF REMOTE DZ11 LINES (MULTI-TERM SUPPORT)
#ENDS
#IFGT DZM
#IFN TIME
TIM$IT = 1 ;GENERAL DEVICE TIME OUT (MULTI-TERM SUPPORT)
#SET TIME=Y
#ENDC TIME
#ENDC DZM
#ENDC DZNEED
#IF LONG
#PRINT
#PRINT The terminal service requires a set of input and output
#PRINT ring buffers for each terminal supported. The output ring
#PRINT buffer default size is 40 characters. The input ring size
#PRINT depends on terminal width and amount of type-ahead
#PRINT expected. The default size is 82 characters.
#ENDC LONG
#PRINT
#ASK Size of the output buffers in characters [D] (40)?ORNG/D=40,10,132
#PRINT
#ASK Size of the input buffers in characters [D] (82)?IRNG/D=82,74,132
#SUBS "O.R"ORNG
#SUBS "I.R"IRNG
TTYOUT = O.R. ;SIZE OF OUTPUT RING BUFFERS(MULTI-TERM SUPPORT)
TTYIN = I.R. ;SIZE OF INPUT RING BUFFERS (MULTI-TERM SUPPORT)
#ENDS
#IF LONG
#PRINT
#PRINT Terminal status may be obtained by doing an .MTGET request
#PRINT but some applications require asynchronous notification of
#PRINT changes in terminal status. RT-11 supports asynchronous
#PRINT terminal status as an option to the .MTATCH
#PRINT request and provides information on buffer and modem
#PRINT status as well as double CTRL/C.
#ENDC LONG
#PRINT
#ASK Do you want asynchronous terminal status [Y/N] (Y)?MATS/Y=Y
#IF MATS
MAT$S = 1 ;ASYNCHRONOUS TERMINAL STATUS (MULTI-TERM SUPPORT)
#ENDC MATS
#IF LONG
#PRINT
#PRINT Time-out support will cause the monitor to reset at regular
#PRINT intervals any terminal that may have gone off-line. This
#PRINT helps to minimize the impact of static (and similar)
#PRINT problems, and is recommended if maximum availability
#PRINT is important to the application.
#ENDC LONG
#PRINT
#ASK Do you want multi-terminal time-out support [Y/N] (Y)?MTTO/Y=Y
#IF MTTO
MTI$M = 1 ;TERMINAL TIME OUT (MULTI-TERM SUPPORT)
#IFN TIME
TIM$IT = 1 ;GENERAL DEVICE TIME OUT (MULTI-TERM SUPPORT)
#SET TIME=N
#ENDC TIME
#ENDC MTTO
#ENDC MTTY
#CALL SYSTBL.CND
#NAME SYSBLD
#FILE SYSBLD.COM
@MONBLD
@DEVBLD
#NAME MONBLD
#FILE MONBLD.COM
! MONBLD.COM
!
#IF LONG
#PRINT
#PRINT The SYSGEN assembling and linking process requires a
#PRINT source input and a binary output device, as well as an
#PRINT output device for monitor link maps. You must specify
#PRINT the physical name and unit number for each (for example,
#PRINT RK1, DP4, etc.). For more explanation, see
#PRINT Section 3.6.1 of the RT-11 System Generation Manual.
#ENDC LONG
#PRINT
#PRINT What is the PHYSICAL name and unit of the
#ASK - source input device [DDU] (RK1)?IN/A=RK1
#SUBS "IN$"IN
ASS IN$ SRC
#PRINT
#PRINT What is the PHYSICAL name and unit of the
#ASK - binary output device [DDU] (RK0)?OUT/A=RK0
#SUBS "OUT$"OUT
ASS OUT$ BIN
#PRINT
#PRINT What is the PHYSICAL name and unit of the
#ASK - map output device [DDU] (TT)?MAP/A=TT
#SUBS "MAP$"MAP
ASS MAP$ MAP
#ENDS
#IF BLSJ
MACRO/OBJ:BIN:KMBL SRC:(SJ+SYCND+EDTGBL+KMON+KMOVLY)
MACRO/OBJ:BIN:RMBL SRC:(SJ+SYCND+EDTGBL+USR+RMONSJ)
#SUBS "S$D."SYSDV
MACRO/OBJ:BIN:SYBL SRC:(SJ+SYCND+SYSDEV+S$D.)
#ENDS
MACRO/OBJ:BIN:TBBL SRC:(SJ+SYCND+SYSTBL)
MACRO/OBJ:BIN:BTBL SRC:(SJ+SYCND+BSTRAP)
#SUBS "S$D."SYSDV
LINK/EXE:BIN:S$D.MNSJ.BLG/BOU:1000/MAP:MAP:S$D.MNSJ
BIN:(BT,RM,KM,TB,SY)BL
#ENDS
OVLY0
#IFN OBJ
DELETE/NOQ BIN:(BT,RM,KM,TB,SY)BL.OBJ
#ENDC OBJ
#ENDC BLSJ
#IF SJ
MACRO/OBJ:BIN:KMSJ SRC:(SJ+SYCND+EDTGBL+KMON+KMOVLY)
MACRO/OBJ:BIN:RMSJ SRC:(SJ+SYCND+EDTGBL+USR+RMONSJ)
#SUBS "S$D."SYSDV
MACRO/OBJ:BIN:SYSJ SRC:(SJ+SYCND+SYSDEV+S$D.)
#ENDS
MACRO/OBJ:BIN:TBSJ SRC:(SJ+SYCND+SYSTBL)
MACRO/OBJ:BIN:BTSJ SRC:(SJ+SYCND+BSTRAP)
#SUBS "S$D."SYSDV
LINK/EXE:BIN:S$D.MNSJ.SYG/BOU:1000/MAP:MAP:S$D.MNSJ
BIN:(BT,RM,KM,TB,SY)SJ
#ENDS
OVLY0
#IFN OBJ
DELETE/NOQ BIN:(BT,RM,KM,TB,SY)SJ.OBJ
#ENDC OBJ
#ENDC SJ
#IF FB
MACRO/OBJ:BIN:KMFB SRC:(FB+SYCND+EDTGBL+KMON+KMOVLY)
MACRO/OBJ:BIN:RMFB SRC:(FB+SYCND+EDTGBL+USR+RMONFB)
#SUBS "S$D."SYSDV
MACRO/OBJ:BIN:SYFB SRC:(FB+SYCND+SYSDEV+S$D.)
#ENDS
MACRO/OBJ:BIN:TBFB SRC:(FB+SYCND+SYSTBL)
MACRO/OBJ:BIN:BTFB SRC:(FB+SYCND+BSTRAP)
#IF MTTY
MACRO/OBJ:BIN:MEFB SRC:(FB+SYCND+MTTEMT)
MACRO/OBJ:BIN:MIFB SRC:(FB+SYCND+MTTINT)
#SUBS "S$D."SYSDV
LINK/EXE:BIN:S$D.MNFB.SYG/BOU:1000/PROMPT/MAP:MAP:S$D.MNFB BIN:BTFB
BIN:RMFB,KMFB,MEFB,MIFB,TBFB,SYFB//
#ENDS
OVLY0
#IFN OBJ
DELETE/NOQ BIN:(BT,RM,ME,MI,TB,SY)FB.OBJ
DELETE/NOQ BIN:KMFB.OBJ
#ENDC OBJ
#IFF
#SUBS "S$D."SYSDV
LINK/EXE:BIN:S$D.MNFB.SYG/BOU:1000/MAP:MAP:S$D.MNFB
BIN:(BT,RM,KM,TB,SY)FB
#ENDS
OVLY0
#IFN OBJ
DELETE/NOQ BIN:(BT,RM,KM,TB,SY)FB.OBJ
#ENDC OBJ
#ENDC MTTY
#ENDC FB
#IF XM
MACRO/OBJ:BIN:KMXM SRC:(XM+SYCND+EDTGBL+KMON+KMOVLY)
MACRO/OBJ:BIN:RMXM SRC:(XM+SYCND+EDTGBL+USR+RMONFB)
#SUBS "S$D."SYSDV
MACRO/OBJ:BIN:SYXM SRC:(XM+SYCND+SYSDEV+S$D.)
#ENDS
MACRO/OBJ:BIN:TBXM SRC:(XM+SYCND+SYSTBL)
MACRO/OBJ:BIN:BTXM SRC:(XM+SYCND+BSTRAP)
#IF MTTY
MACRO/OBJ:BIN:MEXM SRC:(XM+SYCND+MTTEMT)
MACRO/OBJ:BIN:MIXM SRC:(XM+SYCND+MTTINT)
#SUBS "S$D."SYSDV
LINK/EXE:BIN:S$D.MNXM.SYG/BOU:1000/PROMPT/MAP:MAP:S$D.MNXM BIN:BTXM
BIN:RMXM,KMXM,MEXM,MIXM,TBXM,SYXM//
#ENDS
OVLY0
#IFN OBJ
DELETE/NOQ BIN:(BT,RM,ME,MI,TB,SY)XM.OBJ
DELETE/NOQ BIN:KMXM.OBJ
#ENDC OBJ
#IFF
#SUBS "S$D."SYSDV
LINK/EXE:BIN:S$D.MNXM.SYG/BOU:1000/MAP:MAP:S$D.MNXM
BIN:(BT,RM,KM,TB,SY)XM
#ENDS
OVLY0
#IFN OBJ
DELETE/NOQ BIN:(BT,RM,KM,TB,SY)XM.OBJ
#ENDC OBJ
#ENDC MTTY
#ENDC XM
#NAME DEVBLD
#FILE DEVBLD.COM
! DEVBLD.COM
!
#SUBS "IN$"IN
ASS IN$ SRC
#SUBS "OUT$"OUT
ASS OUT$ BIN
#ENDS
#IF SJ
MACRO/OBJ:BIN:TT SRC:(SYCND+TT)
LINK/EXE:BIN:TT.SYG BIN:TT
#IFN OBJ
DELETE/NOQ BIN:TT.OBJ
#ENDC OBJ
#ENDC SJ
#IF BLSJ
MACRO/OBJ:BIN:TT SRC:(SYCND+TT)
LINK/EXE:BIN:TT.SYG BIN:TT
#IFN OBJ
DELETE/NOQ BIN:TT.OBJ
#ENDC OBJ
#ENDC BLSJ
#IF ERL$G
#IF BLSJFB
MACRO/OBJ:BIN:EL SRC:(SYCND+EL)
LINK/EXE:BIN:EL.SYG BIN:EL
#IFN OBJ
DELETE/NOQ BIN:EL.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:ELX SRC:(XM+SYCND+EL)
LINK/EXE:BIN:ELX.SYG BIN:ELX
#IFN OBJ
DELETE/NOQ BIN:ELX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC ERL$G
#IF BATC$H
#IF BLSJFB
MACRO/OBJ:BIN:BA SRC:(SYCND+BA)
LINK/EXE:BIN:BA.SYG BIN:BA
#IFN OBJ
DELETE/NOQ BIN:BA.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:BAX SRC:(XM+SYCND+BA)
LINK/EXE:BIN:BAX.SYG BIN:BAX
#IFN OBJ
DELETE/NOQ BIN:BAX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC BATC$H
#IF LP
#IF BLSJFB
MACRO/OBJ:BIN:LP SRC:(SYCND+LP)
LINK/EXE:BIN:LP.SYG BIN:LP
#IFN OBJ
DELETE/NOQ BIN:LP.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:LPX SRC:(XM+SYCND+LP)
LINK/EXE:BIN:LPX.SYG BIN:LPX
#IFN OBJ
DELETE/NOQ BIN:LPX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC LP
#IF RK
#IF BLSJFB
MACRO/OBJ:BIN:RK SRC:(SYCND+RK)
LINK/EXE:BIN:RK.SYG BIN:RK
#IFN OBJ
DELETE/NOQ BIN:RK.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:RKX SRC:(XM+SYCND+RK)
LINK/EXE:BIN:RKX.SYG BIN:RKX
#IFN OBJ
DELETE/NOQ BIN:RKX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC RK
#IF DL
#IF BLSJFB
MACRO/OBJ:BIN:DL SRC:(SYCND+DL)
LINK/EXE:BIN:DL.SYG BIN:DL
#IFN OBJ
DELETE/NOQ BIN:DL.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:DLX SRC:(XM+SYCND+DL)
LINK/EXE:BIN:DLX.SYG BIN:DLX
#IFN OBJ
DELETE/NOQ BIN:DLX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC DL
#IF DT
#IF BLSJFB
MACRO/OBJ:BIN:DT SRC:(SYCND+DT)
LINK/EXE:BIN:DT.SYG BIN:DT
#IFN OBJ
DELETE/NOQ BIN:DT.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:DTX SRC:(XM+SYCND+DT)
LINK/EXE:BIN:DTX.SYG BIN:DTX
#IFN OBJ
DELETE/NOQ BIN:DTX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC DT
#IF DS
#IF BLSJFB
MACRO/OBJ:BIN:DS SRC:(SYCND+DS)
LINK/EXE:BIN:DS.SYG BIN:DS
#IFN OBJ
DELETE/NOQ BIN:DS.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:DSX SRC:(XM+SYCND+DS)
LINK/EXE:BIN:DSX.SYG BIN:DSX
#IFN OBJ
DELETE/NOQ BIN:DSX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC DS
#IF PC
#IF BLSJFB
MACRO/OBJ:BIN:PC SRC:(SYCND+PC)
LINK/EXE:BIN:PC.SYG BIN:PC
#IFN OBJ
DELETE/NOQ BIN:PC.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:PCX SRC:(XM+SYCND+PC)
LINK/EXE:BIN:PCX.SYG BIN:PCX
#IFN OBJ
DELETE/NOQ BIN:PCX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC PC
#IF PR
#IF BLSJFB
MACRO/OBJ:BIN:PC SRC:(SYCND+PC)
LINK/EXE:BIN:PC.SYG BIN:PC
#IFN OBJ
DELETE/NOQ BIN:PC.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:PCX SRC:(XM+SYCND+PC)
LINK/EXE:BIN:PCX.SYG BIN:PCX
#IFN OBJ
DELETE/NOQ BIN:PCX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC PR
#IF DM
#IF BLSJFB
MACRO/OBJ:BIN:DM SRC:(SYCND+DM)
LINK/EXE:BIN:DM.SYG BIN:DM
#IFN OBJ
DELETE/NOQ BIN:DM.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:DMX SRC:(XM+SYCND+DM)
LINK/EXE:BIN:DMX.SYG BIN:DMX
#IFN OBJ
DELETE/NOQ BIN:DMX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC DM
#IF DX
#IF BLSJFB
MACRO/OBJ:BIN:DX SRC:(SYCND+DX)
LINK/EXE:BIN:DX.SYG BIN:DX
#IFN OBJ
DELETE/NOQ BIN:DX.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:DXX SRC:(XM+SYCND+DX)
LINK/EXE:BIN:DXX.SYG BIN:DXX
#IFN OBJ
DELETE/NOQ BIN:DXX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC DX
#IF DY
#IF BLSJFB
MACRO/OBJ:BIN:DY SRC:(SYCND+DY)
LINK/EXE:BIN:DY.SYG BIN:DY
#IFN OBJ
DELETE/NOQ BIN:DY.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:DYX SRC:(XM+SYCND+DY)
LINK/EXE:BIN:DYX.SYG BIN:DYX
#IFN OBJ
DELETE/NOQ BIN:DYX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC DY
#IF CR
#IF BLSJFB
MACRO/OBJ:BIN:CR SRC:(SYCND+CR)
LINK/EXE:BIN:CR.SYG BIN:CR
#IFN OBJ
DELETE/NOQ BIN:CR.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:CRX SRC:(XM+SYCND+CR)
LINK/EXE:BIN:CRX.SYG BIN:CRX
#IFN OBJ
DELETE/NOQ BIN:CRX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC CR
#IF NULL
#IF BLSJFB
MACRO/OBJ:BIN:NL SRC:(SYCND+NL)
LINK/EXE:BIN:NL.SYG BIN:NL
#IFN OBJ
DELETE/NOQ BIN:NL.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:NLX SRC:(XM+SYCND+NL)
LINK/EXE:BIN:NLX.SYG BIN:NLX
#IFN OBJ
DELETE/NOQ BIN:NLX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC NULL
#IF DP
#IF BLSJFB
MACRO/OBJ:BIN:DP SRC:(SYCND+DP)
LINK/EXE:BIN:DP.SYG BIN:DP
#IFN OBJ
DELETE/NOQ BIN:DP.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:DPX SRC:(XM+SYCND+DP)
LINK/EXE:BIN:DPX.SYG BIN:DPX
#IFN OBJ
DELETE/NOQ BIN:DPX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC DP
#IF CT
#IF BLSJFB
MACRO/OBJ:BIN:CT SRC:(SYCND+CT)
LINK/EXE:BIN:CT.SYG BIN:CT
#IFN OBJ
DELETE/NOQ BIN:CT.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:CTX SRC:(XM+SYCND+CT)
LINK/EXE:BIN:CTX.SYG BIN:CTX
#IFN OBJ
DELETE/NOQ BIN:CTX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC CT
#IF RF
#IF BLSJFB
MACRO/OBJ:BIN:RF SRC:(SYCND+RF)
LINK/EXE:BIN:RF.SYG BIN:RF
#IFN OBJ
DELETE/NOQ BIN:RF.OBJ
#ENDC OBJ
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:RFX SRC:(XM+SYCND+RF)
LINK/EXE:BIN:RFX.SYG BIN:RFX
#IFN OBJ
DELETE/NOQ BIN:RFX.OBJ
#ENDC OBJ
#ENDC XM
#ENDC RF
#IF MTSP
#IF TM
#IF BLSJFB
MACRO/OBJ:BIN:MT SRC:(SYCND+TM)
#IF MTF
MACRO/OBJ:BIN:FSM SRC:(SYCND+FSM)
LINK/EXE:BIN:MT.SYG BIN:(MT,FSM)
#IFN OBJ
DELETE/NOQ BIN:(FSM.OBJ,MT.OBJ)
#ENDC 0BJ
#IFF
LINK/EXE:BIN:MTHD.SYG BIN:MT
#IFN OBJ
DELETE/NOQ BIN:MT.OBJ
#ENDC OBJ
#ENDC MTF
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:MTX SRC:(XM+SYCND+TM)
#IF MTF
MACRO/OBJ:BIN:FSMX SRC:(XM+SYCND+FSM)
LINK/EXE:BIN:MTX.SYG BIN:(MTX,FSMX)
#IFN OBJ
DELETE/NOQ BIN:(FSMX.OBJ,MTX.OBJ)
#ENDC 0BJ
#IFF
LINK/EXE:BIN:MTHDX.SYG BIN:MTX
#IFN OBJ
DELETE/NOQ BIN:MTX.OBJ
#ENDC OBJ
#ENDC MTF
#ENDC XM
#ENDC TM
#IF TJU
#IF BLSJFB
MACRO/OBJ:BIN:MM SRC:(SYCND+TJ)
#IF MTF
MACRO/OBJ:BIN:FSM SRC:(SYCND+FSM)
LINK/EXE:BIN:MM.SYG BIN:(MM,FSM)
#IFN OBJ
DELETE/NOQ BIN:(FSM.OBJ,MM.OBJ)
#ENDC 0BJ
#IFF
LINK/EXE:BIN:MMHD.SYG BIN:MM
#IFN OBJ
DELETE/NOQ BIN:MM.OBJ
#ENDC OBJ
#ENDC MTF
#ENDC BLSJFB
#IF XM
MACRO/OBJ:BIN:MMX SRC:(XM+SYCND+TJ)
#IF MTF
MACRO/OBJ:BIN:FSMX SRC:(XM+SYCND+FSM)
LINK/EXE:BIN:MMX.SYG BIN:(MMX,FSMX)
#IFN OBJ
DELETE/NOQ BIN:(FSMX.OBJ,MMX.OBJ)
#ENDC 0BJ
#IFF
LINK/EXE:BIN:MMHDX.SYG BIN:MMX
#IFN OBJ
DELETE/NOQ BIN:MMX.OBJ
#ENDC OBJ
#ENDC MTF
#ENDC XM
#ENDC TJU
#ENDC MTSP
#IF LONG
#PRINT
#PRINT To build an entire system, mount the source and
#PRINT binary disks, copy the files SYCND.MAC and SYSTBL.MAC
#PRINT to the source disk, and type "@SYSBLD". To build just the monitors,
#PRINT type "@MONBLD". To build just the device handlers, type
#PRINT "@DEVBLD". For more information, read Section 3.6 of the
#PRINT RT-11 System Generation Manual.
#ENDC LONG
#PRINT
#PRINT END OF SYSGEN PROGRAM--Don't forget to copy DK:SYCND.MAC and
#PRINT DK:SYSTBL.MAC to the source disk before executing the
#PRINT command file(s). Remember that SWAP.SYS must
#PRINT be on all bootable volumes.
#PRINT


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

И дедушка IND.SAV



C SYSGEN.FOR V02-07
C
C COPYRIGHT (C) 1977,1978
C DIGITAL EQUIPMENT CORPORATION
C
C THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
C ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
C INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
C COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO
C ANY OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS
C HEREBY TRANSFERRED.
C
C THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
C AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
C CORPORATION.
C
C DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
C SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
C
C R. BEAN 23-JAN-78 9:17
C MODELLED AFTER A PROGRAM BY HANK MAURER
C
C
C
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C INITIALIZE THE VARIOUS DATA AND CONSTANT ARRAYS
C
DATA LEVEL,NXTVAR,NUMSUB/1,1,0/
DATA ANSWER,VAR,VALUE/1000*0,600*0,100*0./
DATA IN,OUT,INS,LNLENG/1,2,3,1/
C CHANGE FOLLOWING TO CHANGE SCRIPT FILE NAME.
DATA FILE/'S','Y','S','G','E','N','.','C','N','D',0,0/
DATA CMDS/
1 'A','S','K',0,0,0,
1 'C','A','L','L',0,0,
1 'D','E','C','R',0,0,
1 'E','N','D','C',0,0,
1 'E','N','D','S',0,0,
1 'E','X','I','T',0,0,
1 'F','I','L','E',0,0,
1 'I','F',0,0,0,0,
1 'I','F','F',0,0,0,
1 'I','F','G','T',0,0,
1 'I','F','N',0,0,0,
1 'I','F','T',0,0,0,
1 'I','F','T','F',0,0,
1 'N','A','M','E',0,0,
1 'P','R','I','N','T',0,
1 'S','E','T',0,0,0,
1 'S','U','B','S',0,0/
DATA SUBNAM/'*','N','O','N','E','*'/
DATA INSERT,FIRST/.FALSE.,.TRUE./
DATA INCLUD/.TRUE.,10*0/
DATA COND/.TRUE.,10*0/
C
C INITIALIZE OPERATING VARIABLES
C
VARLEN=6 !NUMBER OF CHARACTERS IN VARIABLES
NUMVAR=100 !NUMBER OF VARIABLES
C
C OPEN THE SCRIPT FILE
C
CALL ASSIGN(IN,FILE)
C
C MAIN COMMAND LOOP
C AFTER PRESERVING PREVIOUS LINE IN LASTLN,
C IF NOT INSERTING FROM SECONDARY SCRIPT FILE,
C READ LINE FROM PRIMARY SCRIPT FILE
C
100 DO 105 I=1,LNLENG
105 LASTLN(I)=LINE(I) !PRESERVE PREVIOUS COMMAND LINE
LSTLEN=LNLENG !REMEMBER LENGTH OF PREV LINE
C
C NOW READ FROM PRIMARY SCRIPT
C
IF(.NOT.INSERT)
1 READ(IN,80000,END=90000,ERR=91000)LNLENG,(LINE(I), I=1,LNLENG)
C
C OTHERWISE READ FROM SECONDARY SCRIPT FILE
C
IF(INSERT)READ(INS,80000,END=90010,ERR=91010)LNLEN G,(LINE(I),I=1,LNLENG)
C
C IF COMMENT LINE, IGNORE IT
C
IF(LINE(1).EQ.';')GOTO 100
C
C IF LINE BEGINS WITH A FORM FEED, IGNORE THE FORM FEED
C
IF(LINE(1).NE."14)GOTO 200
DO 110 I=2,LNLENG
110 LINE(I-1)=LINE(I) !SLIDE CHARS UP, OVER FORMF
LNLENG=LNLENG-1
C
C IF SUBSTITUTION NOT ENABLED, PROCEED TO COMMAND DISPATCH
C
200 IF(NUMSUB.EQ.0)GOTO 350
C
C SUBSTITUTION LOOP
C PERFORM SUBSTITUTIONS BEFORE PROCESSING LINE
C
DO 300 I=1,NUMSUB
II=1
C
C IF LINE SCAN FINISHED, PROCEED TO NEXT I
C
210 IF(II+PATLEN(I)-1.GT.LNLENG)GOTO 300
C
C SCAN LINE FOR A PATTERN MATCH
C
DO 220 J=1,PATLEN(I)
III=II+J-1
IF(LINE(III).NE.PATERN(I,J))GOTO 280
220 CONTINUE
K=PATLEN(I)-REPLEN(I) !K=LENGTH DIFF BETWEEN PATERN AND REPLACEMENT
C
C DETERMINE IF THERE IS ENOUGH ROOM IN LINE FOR REPLACEMENT
C
IF(K)230,240,250
C
C IF REPLACEMENT LARGER THAN PATTERN, SLIDE LINE RIGHT TO MAKE ROOM
C
230 DO 235 J=1,LNLENG-III
235 LINE(LNLENG-K+1-J)=LINE(LNLENG+1-J)
240 IF(REPLEN(I).LE.0)GOTO 248 !IF REPLACEMENT NULL, JUST COLLAPSE LINE
C
C OTHERWISE REPLACE PATTERN WITH REPLACEMENT
C
DO 245 J=1,REPLEN(I)
245 LINE(II+J-1)=REPLAC(I,J)
248 LNLENG=LNLENG-K !SHORTEN LINE LENGTH BY PATTERN/REPLACEMENT DIFFERENCE
II=II+REPLEN(I)
GOTO 290
C
C COLLAPSE LINE TO MAKE PATTERN LENGTH=REPLACEMENT LENGTH
C
250 DO 255 J=III+1,LNLENG
255 LINE(J-K)=LINE(J)
GOTO 240 !NOW REPLACE PATTERN
280 II=II+1 !START ONE CHAR TO RIGHT
290 IF(II.LE.LNLENG)GOTO 210 !AND LOOP
300 CONTINUE
350 LINE(LNLENG+1)=0 !MAKE SURE LINE STRING ZERO-TERMINATED
C
C COMMAND DISPATCHER
C IF LINE DOES NOT BEGIN WITH A <TAB>#, WRITE IT TO OUTPUT FILE
C
IF(LINE(1).NE."11.OR.LINE(2).NE.'#')GOTO 450 !"11 IS A TAB
C
C FIND THE COMMAND
C
DO 410 I=1,17
DO 400 J=1,6
IF(CMDS(J,I).EQ.0.AND.(LINE(J+2).EQ.0.OR.LINE(J+2) .EQ."11)) !"11 IS A TAB
1 GOTO 500 !COMMAND FOUND - CALL COMMAND SUBROUTINE
IF(LINE(J+2).NE.CMDS(J,I))GOTO 410
400 CONTINUE
410 CONTINUE
C
C COMMAND NOT FOUND - PRINT ERROR MESSAGE
C
CALL EPRINT(6) !SYSGEN-F-UNDEFINED COMMAND
GOTO 100
C
C LINE NOT A COMMAND LINE - WRITE IT TO OUTPUT FILE
C
450 IF(INCLUD(LEVEL))WRITE(OUT,80010,END=90020,ERR=900 20)(LINE(I),I=1,LNLENG)
GOTO 100
C
C COMMAND SUBROUTINE CALLS
C
500 GOTO(501,502,503,504,505,506,507,508,509,510,511,5 12,513,514,515,516,517)I
501 CALL ASK
GOTO 100
502 CALL CALLF
GOTO 100
503 CALL DECR
GOTO 100
504 CALL ENDC
GOTO 100
505 CALL ENDS
GOTO 100
506 CALL EXITS
GOTO 100
507 CALL FILES
GOTO 100
508 CALL IF0
GOTO 100
509 CALL IFF
GOTO 100
510 CALL IFGT
GOTO 100
511 CALL IFN
GOTO 100
512 CALL IFT
GOTO 100
513 CALL IFTF
GOTO 100
514 CALL NAME
GOTO 100
515 CALL PRINT0
GOTO 100
516 CALL SET
GOTO 100
517 CALL SUB
GOTO 100
C
C FORMAT STATEMENTS FOR COMMAND ROTUINE
C
80000 FORMAT(Q,100A1) !FOR SCRIPT READS
80010 FORMAT(100A1) !FOR OUTPUT WRITES
C
C ERROR PROCESSING ROUTINES FOR I/O STATEMENTS
C
90000 CALL CLOSE(IN) !EOF FOR PRIMARY INPUT FILE
IF(.NOT.FIRST)CALL CLOSE(OUT)
GOTO 99000
90010 INSERT=.FALSE. !EOF FOR SECONDARY INPUT FILE
CALL CLOSE(INS)
GOTO 100
90020 CALL EPRINT(17) !?SYSGEN-F-OUTPUT ERROR
GOTO 99000
91000 CALL EPRINT(18) !?SYSGEN-F-INPUT ERROR
GOTO 99000
91010 CALL EPRINT(16) !?SYSGEN-F-INSERT ERROR
99000 CALL EXIT
END


SUBROUTINE ASK
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLACE,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
LOGICAL*1 HIVAL(10),LOWVAL(10),ALINE(80),YES(4),NO(3)
REAL RTMP1
DATA YES/'Y','E','S',0/,NO/'N','O',0/
C
C ROUTINE TO PROCESS ASK COMMAND
C <TAB>#ASK<TAB>QUESTION?VARIABLE/T=DEF[,LOWLIM[,HILIM]]
C
IF(.NOT.INCLUD(LEVEL))GOTO 1000 !IF CONDITIONAL OFF, DON'T DO
C
C FIND QUESTION MARK AT END OF QUESTION
C
5 DO 10 LPTR=7,LNLENG
IF (LINE(LPTR).EQ.'?')GOTO 20
10 CONTINUE
15 CALL EPRINT(5) !?SYSTEN-F-BAD #ASK IN
GOTO 1000
C
C TYPE THE QUESTION ON THE TERMINAL
C
20 I=7 !QUESTION STARTS IN CHAR POSITION 7
IF(LINE(I).EQ.'-')I=I+1 !SKIP OVER CONTINUATION MARK IF PRESENT
WRITE(5,80000)(LINE(J),J=I,LPTR),"40 !"40 IS A SPACE
IF(LNLENG.EQ.LPTR)GOTO 15 !IF NO VARIABLE SPECIFIED
C
C FIND THE VARIABLE INDEX
C
LPTR=LPTR+1 !SPACE LPTR PAST ?
CALL FNDVAR(0) !SETS VIDX FOR VARIABLE, MOVES LPTR TO CHAR FOLLOWING
IF(CARRY.EQ.1)GOTO 1000
VALUE(VIDX)=0 !SET VALUE TO 0
C
C ENSURE ANSWER TYPE SPECIFIED
C
IF(LINE(LPTR).NE.'/')GOTO 15
LPTR=LPTR+1 !ADVANCE PAST "/"
C
C SET FLAG DEPENDING ON ANSWER TYPE
C
ATYPE=0
IF(LINE(LPTR).EQ.'A')ATYPE=1 !DEVICE NAME ANSWER
IF(LINE(LPTR).EQ.'O')ATYPE=2 !OCTAL ANSWER
IF(LINE(LPTR).EQ.'D')ATYPE=3 !DECIMAL ANSWER
IF(LINE(LPTR).EQ.'Y')ATYPE=4 !YES/NO ANSWER
IF(ATYPE.EQ.0)GOTO 15 !ILLEGAL TYPE CODE
LPTR=LPTR+1 !ADVANCE PAST TYPE CODE
C
C ENSURE DEFAULT PRESENT
C
IF(LINE(LPTR).NE.'=')GOTO 15
LPTR=LPTR+1 !ADVANCE PAST "="
IF(LINE(LPTR).EQ.0)GOTO 15 !NOTHING FOLLOWING "=" IS AN ERROR
C
C COPY THE DEFAULT INTO ANSWER
C
II=1
DO 30 K=LPTR,LNLENG
IF(LINE(K).EQ.',')GOTO 35
IF(II.GT.9)GOTO 15 !DEFAULT TOO LONG
ANSWER(VIDX,II)=LINE(K)
30 II=II+1
C
C PARSE LOW LIMIT
C
35 LPTR=K
LVCNT=0
IF(LINE(LPTR).EQ.0)GOTO 100 !NO RANGE VALUES
LPTR=LPTR+1 !STEP PAST COMMA
IF(LINE(LPTR).EQ.',')GOTO 15 !NO LO VALUE IS AN ERROR
DO 40 K=LPTR,LNLENG !COPY LOWVAL
IF(LINE(K).EQ.',')GOTO 45
IF(LVCNT.GT.9)GOTO 15
LVCNT=LVCNT+1
LOWVAL(LVCNT)=LINE(K)
40 CONTINUE
C
C PARSE HI LIMIT
C
45 HVCNT=0
LPTR=LPTR+LVCNT
IF(LINE(LPTR).EQ.0)GOTO 100 !NO HIGH VALUE
LPTR=LPTR+1 !STEP PAST COMMA
C
C COPY HIGH LIMIT TO HIVAL
C
DO 50 K=LPTR,LNLENG
IF(HVCNT.GT.9)GOTO 15
HVCNT=HVCNT+1
HIVAL(HVCNT)=LINE(K)
50 CONTINUE
C
C GET USER'S ANSWER
C
100 READ(5,80010)ALLENG,(ALINE(K),K=1,ALLENG)
ALINE(ALLENG+1)=0 !MAKE SURE ANSWER STRING 0 TERMINATED
C
C IF NO RESPONSE, USE DEFAULT
C
IF(ALLENG.EQ.0)GOTO 1000
IF(ALLENG.GT.9)GOTO 400 !ANSWER TOO LONG
C
C CHECK ANSWER FOR TYPE VALIDITY
C
GOTO(200,250,300,350)ATYPE
C
C ROUTINE TO CHECK ANSWER FOR ALPHA DEV NAME
C
200 IF(ALLENG.GT.3)GOTO 400 !ANSWER TOO LONG FOR DEV NAME
DO 210,I=1,2
IF(ALINE(I).LT.'A')GOTO 400
210 IF(ALINE(I).GT.'Z')GOTO 400
IF(ALINE(3).EQ.0)GOTO 500
IF(ALINE(3).LT.'0')GOTO 400
IF(ALINE(3).GT.'7')GOTO 400
GOTO 500
C
C ROUTINE TO CHECK ANSWER FOR OCTAL VALUE
C
250 DO 260 I=1,9
IF (ALINE(I).EQ.0)GOTO 450
IF(ALINE(I).LT.'0')GOTO 400
260 IF(ALINE(I).GT.'7')GOTO 400
GOTO 450
C
C ROUTINE TO CHECK ANSWER FOR DECIMAL VALUE
C
300 DO 310 I=1,9
IF (ALINE(I).EQ.0)GOTO 450
IF(ALINE(I).LT.'0')GOTO 400
310 IF(ALINE(I).GT.'9')GOTO 400
GOTO 450
C
C ROUTINE TO CHECK ANSWER FOR YES/NO
C
350 DO 355 I=1,ALLENG !TEST FOR N OR NO ANSWER
355 IF(ALINE(I).NE.NO(I))GOTO 360
GOTO 500 !ANSWER WAS A VALID NO
360 DO 365 I=1,ALLENG !TEST FOR Y OR YE OR YES ANSWER
365 IF(ALINE(I).NE.YES(I))GOTO 400
GOTO 500 !ANSWER WAS A VALID YES
C
C VALIDITY CHECK FAILED - TYPE ERROR MESSAGE
C AND RETRY
C
400 CALL EPRINT(1) !SYSGEN-F-INVALID ANSWER;RETRY
410 IF(LINE(7).NE.'-')GOTO 5 !IF NOT 2 LINE ASK,JUST REPROCESS COMMAND
WRITE(5,80030)(LASTLN(J),J=9,LSTLEN) !2 LINE ASK-ASSUME PREVIOUS LINE
C !WAS A #PRINT AND REPRINT IT
GOTO 5 !RESTART QUESTION
C
C ROUTINE TO CHECK IF OCTAL OR DECIMAL ANSWER FALLS IN RANGE
C AND STORE VALUE FOR VARIABLE
C
450 IF(LVCNT.EQ.0)GOTO 500 !NO LIMITS AVAILABLE
DECODE(LVCNT,80020,LOWVAL)RTMP1 !LOW VALUE TO TEMPORARY
DECODE(ALLENG,80020,ALINE)VALUE(VIDX) !ANSWER VALUE
IF(VALUE(VIDX)-RTMP1)455,460,460 !ANSWER - LOW LIMIT
455 CALL EPRINT(2) !SYSGEN-F-ANSWER TOO SMALL
GOTO 410 !RESTART QUESTION
460 IF(HVCNT.EQ.0)GOTO 500 !NO HILIMIT AVAL
DECODE(HVCNT,80020,HIVAL)RTMP1 !HI VALUE CONVERSION
IF(VALUE(VIDX)-RTMP1)500,500,465 !ANSWER - HI LIMIT
465 CALL EPRINT(3) !SYSGEN-F-ANSWER TOO LARGE
GOTO 410 !RETRY
C
C ANSWER IS ACCEPTABLE - STORE IT FOR VARIABLE
C
500 DO 510 K=1,ALLENG
510 ANSWER(VIDX,K)=ALINE(K)
ANSWER(VIDX,K+1)=0
C
C ROUTINE FINISHED - RETURN
C
1000 RETURN
C
C FORMAT STATEMENTS FOR ASK ROUTINE
C
80000 FORMAT('$',72A1)
80010 FORMAT(Q,80A1)
80020 FORMAT(F9.0)
80030 FORMAT(1X,100A1)
END

SUBROUTINE CALLF
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PROCESS CALL COMMAND
C <TAB>#CALL<TAB>FILNAM.EXT
C
IF(.NOT.INCLUD(LEVEL))GOTO 1000 !CONDITIONAL OFF
IF(LNLENG.GE.10)GOTO 10
CALL EPRINT(9) !SYSGEN-W-MISSING FILE NAME
GOTO 1000
10 IF(.NOT.INSERT)GOTO 20 !MAKE SURE NOT ALREADY IN SEC. SCRIPT
CALL EPRINT(10) !SYSGEN-W-NESTED #CALL?
GOTO 1000
20 INSERT=.TRUE.
CALL ASSIGN(INS,LINE(8))
C
C COMMAND DONE
C
1000 RETURN
END
SUBROUTINE DECR
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PROCESS DECR COMMAND
C <TAB>#DECR<TAB>VARIABLE
C
IF(.NOT.INCLUD(LEVEL))GOTO 1000 !MAY BE CONDITIONALIZED OUT
IF(LNLENG.GE.8)GOTO 10 !MAKE SURE CONDITIONAL NAMED
CALL EPRINT(11) !SYSGEN-W-MISSING CONDITIONAL IN
GOTO 1000
10 LPTR=8
CALL FNDVAR(1) !FIND VARIABLE
IF(CARRY.EQ.1)GOTO 1000 !VARIABLE NOT THERE
VALUE(VIDX)=VALUE(VIDX)-1. !DECREMENT VALUE
C
C COMMAND DONE
C
1000 RETURN
END
SUBROUTINE ENDC
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PROCESS ENDC COMMAND
C <TAB>#ENDC
C
IF(LEVEL.GT.1)GOTO 10 !MAKE SURE NOT AT BOTTOM LEVEL
CALL EPRINT(15) !?SYSGEN-W-TOO MANY #ENDC'S
GOTO 1000
10 LEVEL=LEVEL-1 !DROP CONDITIONAL LEVEL
C
C DONE
C
1000 RETURN
END
SUBROUTINE ENDS
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PROCESS ENDS COMMAND
C <TAB>#ENDS
C
IF(INCLUD(LEVEL))NUMSUB=0 !IF NOT CONDITIONALIZED OUT, RESET FOR NO SUBS
RETURN
END
SUBROUTINE EXITS
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PROCESS #EXIT COMMAND
C <TAB>#EXIT
C
IF(.NOT.INCLUD(LEVEL))GOTO 1000 !DON'T DO IF CONDITIONALIZED OUT
CALL EXIT
1000 RETURN
END
SUBROUTINE FILES
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PROCESS #FILE COMMAND
C <TAB>#FILE<TAB>FILNAM.EXT
C
IF(.NOT.INCLUD(LEVEL))GOTO 1000
IF(LNLENG.GE.8)GOTO 10 !MAKE SURE FILE NAME SPECIFIED
CALL EPRINT(9) !?SYSGEN-W-MISSING FILE NAME
GOTO 1000
10 IF(.NOT.FIRST)CALL CLOSE(OUT) !CLOSE PREVIOUS FILE
FIRST=.FALSE.
CALL ASSIGN(OUT,LINE(8)) !OPEN NEW OUTPUT FILE
C
C DONE
C
1000 RETURN
END
SUBROUTINE IF0
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PROCESS #IF COMMAND
C <TAB>#IF<TAB>VARIABLE
C
IF(LEVEL.LT.11)GOTO 10
CALL EPRINT(12) !SYSGEN-W-TOO MANY NESTED IF'S
GOTO 1000
10 IF(LNLENG.GE.6)GOTO 20 !CHECK FOR CONDITIONAL PRESENT
CALL EPRINT(11) !?SYSGEN-W-MISSING CONDITIONAL
GOTO 1000
20 LPTR=6
IF(.NOT.INCLUD(LEVEL))GOTO 30 !IF NOT ACTIVE,DON'T LOOKUP VARIABLE
CALL FNDVAR(1) !FIND VARIABLE
IF(CARRY.EQ.1)GOTO 1000 !OPERATION FAILED
30 LEVEL=LEVEL+1 !NEW CONDITIONAL LEVEL
COND(LEVEL)=ANSWER(VIDX,1).EQ.'Y' !COND=TRUE IF ANSWER = Y
C INCLUD TRUE IF PREVIOUS LEVEL TRUE
INCLUD(LEVEL)=COND(LEVEL).AND.INCLUD(LEVEL-1)
C
C DONE
C
1000 RETURN
END

SUBROUTINE IFF
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PROCESS THE #IFF COMMAND
C <TAB>#IFF
C
IF(LEVEL.GT.1)INCLUD(LEVEL)=.NOT.COND(LEVEL).AND.I NCLUD(LEVEL-1)
RETURN
END

SUBROUTINE IFGT
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PROCESS THE #IFGT COMMAND
C <TAB>#IFGT<TAB>CONDITIONAL
C
IF(LEVEL.LT.11)GOTO 10 !TEST NESTING DEPTH
CALL EPRINT(12) !?SYSGEN-W-TOO MANY NESTED CONDITIONALS
GOTO 1000
10 IF(LNLENG.GE.8)GOTO 20 !TEST FOR CONDITIONAL PRESENSE
CALL EPRINT(11) !?SYSGEN-W-MISSING CONDITIONAL
GOTO 1000
20 LPTR=8
IF(.NOT.INCLUD(LEVEL))GOTO 30 !IF NOT ACTIVE,DON'T LOOKUP VARIABLE
CALL FNDVAR(1) !FIND THE VARIABLE
IF(CARRY.EQ.1)GOTO 1000 !ERROR
30 LEVEL=LEVEL+1 !NEW CONDITIONAL LEVEL
COND(LEVEL)=VALUE(VIDX).GT.0. !CONDITION TRUE IF VALUE >0
C INCLUDE TRUE IF PREVIOUS LEVEL TRUE
INCLUD(LEVEL)=COND(LEVEL).AND.INCLUD(LEVEL-1)
C
C DONE
C
1000 RETURN
END


SUBROUTINE IFN
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO HANDLE #IFN COMMAND
C <TAB>#IFN<TAB>VARIABLE
C
IF(LEVEL.LT.11)GOTO 10 !?SYSGEN-W-TOO MANY CONDITIONALS
CALL EPRINT(12)
GOTO 1000
10 IF(LNLENG.GE.7)GOTO 20
CALL EPRINT(11) !?SYSGEN-W-MISSING CONDITIONALS
GOTO 1000
20 LPTR=7
IF(.NOT.INCLUD(LEVEL))GOTO 30 !IF NOT ACTIVE,DON'T LOOKUP VARIABLE
CALL FNDVAR(1) !FIND VARIABLE
IF(CARRY.EQ.1)GOTO 1000 !VARIABLE NOT FOUND
30 LEVEL=LEVEL+1 !BUMP CONDITIONAL LEVEL
COND(LEVEL)=ANSWER(VIDX,1).EQ.'N' !COND TRUE IF VARIABLE="NO"
C INCLUD TRUE ONLY IF PREVIOUS LEVEL TRUE
INCLUD(LEVEL)=COND(LEVEL).AND.INCLUD(LEVEL-1)
C
C DONE
C
1000 RETURN
END

SUBROUTINE IFT
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PROCESS #IFT COMMAND
C <TAB>#IFT
C
IF(LEVEL.GT.1)INCLUD(LEVEL)=COND(LEVEL).AND.INCLUD (LEVEL-1)
RETURN
END

SUBROUTINE IFTF
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PROCESS #IFTF COMMAND
C <TAB>#IFTF
C
IF(LEVEL.GT.1)INCLUD(LEVEL)=INCLUD(LEVEL-1)
RETURN
END

SUBROUTINE NAME
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PROCESS #NAME COMMAND
C <TAB>#NAME<TAB>SECTION NAME
C
IF(LEVEL.EQ.1)GOTO 10 !CHECK TO BE SURE AT BASE LEVEL
CALL EPRINT(4) !?SYSGEN-F-TOO FEW ENDC'S
10 LEVEL=1
DO 20 KK=1,6
K=LINE(KK+7) !COPY NAME CHARS TO SUBNAME
IF(KK+7.GT.LNLENG)K="40 !"40 IS A SPACE
20 SUBNAM(KK)=K
C
C DONE
C
RETURN
END

SUBROUTINE PRINT0
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PROCESS #PRINT COMMAND
C <TAB>#PRINT<TAB>TEXT
C
IF(INCLUD(LEVEL))WRITE(5,80000)(LINE(J),J=9,LNLENG )
RETURN
80000 FORMAT(1X,100A1)
END

SUBROUTINE SET
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PROCESS #SET COMMAND
C <TAB>#SET<TAB>VARIABLE=ANSWER
C
IF(.NOT.INCLUD(LEVEL))GOTO 1000 !MAY BE CONDITIONALIZED OUT
IF(LNLENG.GE.7)GOTO 10 !MAKE SURE VARIABLE PRESENT
CALL EPRINT(11) !?SYSGEN-F-MISSING CONDITIONAL IN
GOTO 1000
10 LPTR=7
CALL FNDVAR(0) !FIND VARIABLE
IF(CARRY.EQ.1)GOTO 1000 !FAILED
IF(LINE(LPTR).EQ.'=')GOTO 20
15 CALL EPRINT(13) !?SYSGEN-F-BAD SET IN
GOTO 1000
20 IF((LNLENG-LPTR).GT.10)GOTO 15 !TOO MANY CHARS IN ANSWER
DO 30 KK=LPTR+1,LNLENG
30 ANSWER(VIDX,KK-LPTR)=LINE(KK)
C
C DONE
C
1000 RETURN
END

SUBROUTINE SUB
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PROCESS THE #SUBS COMMAND
C <TAB>#SUBS<TAB>"PATTERN"VARIABLE
C
IF(.NOT.INCLUD(LEVEL))GOTO 1000
IF(NUMSUB.LT.5)GOTO 3 !CHECK # OF SUBS ACTIVE
CALL EPRINT(12) !?SUSGEN-F-TOO MANY NESTED SUBS
GOTO 1000
3 IF(LINE(8).EQ.'"')GOTO 10
5 CALL EPRINT(14) !?SYSGEN-F-BAD SUBSTITUTE PATTERN
GOTO 1000
10 NUMSUB=NUMSUB+1
DO 20 J=1,30
PATERN(NUMSUB,J)=LINE(8+J)
IF(LINE(8+J).EQ.'"')GOTO 30
20 CONTINUE
NUMSUB=NUMSUB-1
GOTO 5 !TOO MANY CHARS IN PATTERN
30 PATLEN(NUMSUB)=J-1
LPTR=8+J+1 !POINTER TO START OF VARIABLE NAME
CALL FNDVAR(1) !FIND VARIABLE IN SYMBOL TABLE
IF(CARRY.EQ.1)GOTO 1000
DO 40 K=1,10
REPLAC(NUMSUB,K)=ANSWER(VIDX,K) !COPY ANSWER INTO REPLACE ARRAY
IF(REPLAC(NUMSUB,K).NE.0)GOTO 40
REPLEN(NUMSUB)=K-1
GOTO 1000
40 CONTINUE
C
C DONE
C
1000 RETURN
END
SUBROUTINE FNDVAR(OLD)
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO FIND A VARIABLE NAME IN THE VARIABLE TABLE
C
C INPUTS:-"LINE" ARRAY CONTAINS VARIABLE NAME
C LPTR POINTS TO VARIABLE NAME IN "LINE"
C VARIABLE NAME TERMINATED BY 0 OR "/" OR "="
C ARGUMENT "OLD"
C =0 MEANS IF VARIABLE NAME NOT IN TABLE,
C CREATE A NEW ENTRY
C =1 MEANS IF VARIABLE NAME NOT IN TABLE,
C PRINT ERROR MESSAGE
C OUTPUTS:-VIDX CONTAINS INDEX TO VARIABLE IN SYMBOL TABLE
C COMMON FLAG "CARRY"
C =0 IF OPERATION SUCCESSFUL
C =1 IF OPERATION FAILED
C
C CHECK FOR TABLE OVERFLOW
C
IF(NXTVAR.LT.NUMVAR)GOTO 10
CALL EPRINT(7) !?SYSGEN-W-TOO MANY CONDITIONALS
GOTO 1000 !FAILED
C
C SEARCH TABLE FOR NAME
C
10 DO 20 KK=1,NXTVAR
DO 15 JJ=0,VARLEN-1
IF(LINE(LPTR+JJ).EQ.0.AND.VAR(KK,JJ+1).EQ.0.OR.
1 LINE(LPTR+JJ).EQ.'/'.AND.VAR(KK,JJ+1).EQ.0.OR.
1 LINE(LPTR+JJ).EQ.'='.AND.VAR(KK,JJ+1).EQ.0)GOTO 40
IF(LINE(LPTR+JJ).NE.VAR(KK,JJ+1))GOTO 20
15 CONTINUE
GOTO 40 !INNER LOOP COMPLETE MEANS VARIABLE MATCH
20 CONTINUE
C
C IF WE GET HERE, SEARCH HAS FAILED
C
IF(OLD.EQ.0)GOTO 30 !CREATE NEW ENTRY
CALL EPRINT(8) !?SYSGEN-W-UNDEFINED VARIABLE IN
GOTO 1000 !FAILED
C
C CREATE NEW ENTRY FROM VARIABLE NAME
C
30 DO 35 JJ=0,VARLEN-1
IF(LINE(LPTR+JJ).EQ.0.OR.LINE(LPTR+JJ).EQ.'/'.OR.LINE(LPTR+JJ).EQ.'=')
1 GOTO 37
35 VAR(NXTVAR,JJ+1)=LINE(LPTR+JJ)
37 VIDX=NXTVAR
NXTVAR=NXTVAR+1
GOTO 45 !SUCCESS
C
C SEARCH SUCCEEDED
C
40 VIDX=KK
45 LPTR=LPTR+JJ
GOTO 1010
C
C RETURN AFTER SETTING FLAG
C
1000 CARRY=1 !OPERATION FAILED
RETURN
1010 CARRY=0 !OPERATION FAILED
RETURN
END

SUBROUTINE EPRINT(ERRNUM)
IMPLICIT INTEGER*2(A-Z)
COMMON ANSWER,VAR,LINE,COND,INCLUD
COMMON SUBNAM,VALUE,CARRY,SUBFLG
COMMON PATERN,REPLAC,PATLEN,REPLEN
COMMON LEVEL,NXTVAR,NUMSUB,LPTR
COMMON VARLEN,NUMVAR,LNLENG,VIDX
COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIR ST,
1 COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC( 5,30),
1 FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
REAL VALUE(100)
INTEGER PATLEN(5),REPLEN(5)
C
C SUBROUTINE TO PRINT AN ERROR MESSAGE
C USES ERRNUM AS INDICATOR FOR WHICH
C ERROR TO PRINT
WRITE(5,10)
10 FORMAT (/,'$?SYSGEN-')
GOTO(101,102,103,104,105,106,107,108,109,110,111,1 12,113,114,115,116,
1 117,118)ERRNUM
C
101 WRITE(5,201)
GOTO 1000
201 FORMAT ('+F-Inappropriate answer',/)
C
102 WRITE(5,202)
GOTO 1000
202 FORMAT ('+F-Answer value too small',/)
C
103 WRITE(5,203)
GOTO 1000
203 FORMAT ('+F-Answer value too large',/)
C
104 WRITE(5,204)SUBNAM,(LINE(K),K=1,LNLENG)
GOTO 1000
204 FORMAT ('+W-Too few #ENDC''s in ',6A1,/,1X,80A1)
C
105 WRITE(5,205)SUBNAM,(LINE(K),K=1,LNLENG)
GOTO 1000
205 FORMAT ('+W-Bad #ASK in ',6A1,/,1X,80A1)
C
106 WRITE(5,206)SUBNAM,(LINE(K),K=1,LNLENG)
GOTO 1000
206 FORMAT ('+W-Undefined command in ',6A1,/,1X,80A1)
C
107 WRITE(5,207)SUBNAM,(LINE(K),K=1,LNLENG)
GOTO 1000
207 FORMAT ('+W-Too many variables in ',6A1,/,1X,80A1)
C
108 WRITE(5,208)SUBNAM,(LINE(K),K=1,LNLENG)
GOTO 1000
208 FORMAT ('+W-Undefined variable in ',6A1,/,1X,80A1)
C
109 WRITE(5,209)SUBNAM,(LINE(K),K=1,LNLENG)
GOTO 1000
209 FORMAT ('+W-Missing file name in ',6A1,/,1X,80A1)
C
110 WRITE(5,210)SUBNAM,(LINE(K),K=1,LNLENG)
GOTO 1000
210 FORMAT ('+W-Nested #CALL in ',6A1,/,1X,80A1)
C
111 WRITE(5,211)SUBNAM,(LINE(K),K=1,LNLENG)
GOTO 1000
211 FORMAT ('+W-Missing variable in ',6A1,/,1X,80A1)
C
112 WRITE(5,212)SUBNAM,(LINE(K),K=1,LNLENG)
GOTO 1000
212 FORMAT ('+W-Too many nested #IFs or #SUBs in ',6A1,/,1X,80A1)
C
113 WRITE(5,213)SUBNAM,(LINE(K),K=1,LNLENG)
GOTO 1000
213 FORMAT ('+W-Bad #SET in ',6A1,/,1X,80A1)
C
114 WRITE(5,214)SUBNAM,(LINE(K),K=1,LNLENG)
GOTO 1000
214 FORMAT ('+W-Bad substitute pattern in ',6A1,/,1X,80A1)
C
115 WRITE(5,215)SUBNAM,(LINE(K),K=1,LNLENG)
GOTO 1000
215 FORMAT ('+W-Too many #ENDC''s in ',6A1,/,1X,80A1)
C
116 WRITE(5,216)
GOTO 1000
216 FORMAT ('+F-Insert error',/)
C
117 WRITE(5,217)
GOTO 1000
217 FORMAT ('+F-Output error',/)
C
118 WRITE(5,218)
218 FORMAT ('+F-Input error',/)
C
C DONE
C
1000 RETURN
END

Hunta
28.08.2017, 16:28
Под RT-11 V03 скрывается аж четыре варианта - V03-02, V03B-00, V03B-00B и V03B-00D.

Причём V03B-00B и V03B-00D у меня на одном ките - RT-11SJ V03B-00B, RT-11FB - V03B-00D
А ещё какой то вариант для RK05 - для разных загрузочных устройств SJ и FB могут и совпадать по версии.

form
28.08.2017, 16:52
аж четыре варианта
На известном исошнике валяются:

01-15
02B, 02C
03, 03B
04.00, 04.00C
05.00
05.01, 05.01B, V05.01C
05.02
05.03
05.04, 05.04A, 05.04B, 05.04C, 05.04D, 05.04E, 05.04F, 05.04G
05.05
05.06
05.07

V04.00C еще есть отдельно вариант для RTEM (начиная с версии 5 поддержка RTEM добавлена в DUP сразу, а система собирается из обычных исходников с добавкой RTEDEF)

V05.04 самый плодовитый - аж 8 вариантов, причем различия существенные: например в V05.04G впервые появляется полноценный DECовский SL, позволяющий хранить в истории много строк. В предыдущих версиях хранилась всего одна. В этой же версии (может и раньше - не проверял) в .DRxxx макросах появилась поддержка номеров устройств 10-77 (сама поддержка таких устройств появилась только в V05.05).

V05.05 последняя версия где есть RT-11SJ (в следующих версиях уже идут пары мониторов однозадачный+многозадачны и к многозадачному FB в пару идет SB, поддерживающий все фичи FB кроме многозадачности), так же сильно перелопачен RMON, добавлены терминальные хуки, позволяющие вклиниться в его работу или вовсе заменить терминал софтом, поддержка номеров устройств 10-77.

V05.06 переход на пары одно/многозадачных мониторов: SB+FB, XB+XM, ZB+ZM, поддержка I&D, supervisor mode, в документации появляется спецификация дат Y2K (до 2099 года), но самой поддержки таких дат в системе еще нет

V05.07 собственно добавлена поддержка Y2K и вроде больше ничего нового после 05.06.

Hunta
28.08.2017, 17:54
На известном исошнике валяются
Это если читать то, что создатели исо-шника написали. А если заглянуть внутрь (то, как мониторы представляются) - V01-15, V02B-05, V02C, V02C-02, V03-02, V03B-00, V03B-00B, V03B-00D. До остальных пока не добрался

Hunta
01.09.2017, 20:53
Дэйв Катлер, который уже был выдающейся фигурой в DEC, перешёл в компанию Microsoft, где стал отвечать за разработку нескольких ключевых версий Windows, в том числе NT.

Он определённо заслуживает внесения в Книгу рекордов Гиннесса как единственный человек на Земле, возглавлявший разработку широко используемых операционных систем для по меньшей мере трех поколений ЭВМ: PDP-11, VAX и серии компьютеров, базирующихся на Intel, с операционной системой Windows.

Hunta
01.03.2018, 20:46
The RSX-11M Realtime Operating System can be used on any DEC PDP-11 computer(*) ....

---------
(*) The minimum configuration is a 16K PDP-11/10 with a Teletype (Teletype is a registered trademark of the Teletype Corporation) or LA30 for the console terminal; one RK disk drive? which is the system distribution medium; a KW11-L/P for the system clock; a hardware bootstrap loader, and either one additional RK disk drive, a DECtape or cassete.

Hunta
04.03.2018, 13:22
.TITLE BFCTL
.IDENT /04/

;
; COPYRIGHT 1974, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.
; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.
;
; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE
; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION
; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT
; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.
;
; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT
; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL
; EQUIPMENT CORPORATION.
;
; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY
; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
;
; VERSION 04
;
; D. N. CUTLER 26-DEC-73
;
; MODIFIED BY:
;
; D. N. CUTLER 10-JUL-75
;
; DC085 -- EXPAND STACK AND ADD CONDITIONS FOR ICS/ICR-11.
;
; BUFFER CONTROL ROUTINES


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

Дэйв Катлер (р. 13 марта 1942) — американский инженер-программист, дизайнер и разработчик нескольких операционных систем, включая RSX-11M, VMS и VAXELN в Digital Equipment Corporation и Windows NT корпорации Майкрософт.

Hunta
04.01.2019, 14:38
There is no reason anyone would want a computer in their home.
Ken Olsen President, Chairman and founder of Digital, 1977

Нет причин, что бы кто то захотел компьютер у себя дома
Кен Олсен, Президент, Председатель и основатель Digital, 1977

CodeMaster
04.01.2019, 18:44
Нет причин, что бы кто то захотел компьютер у себя дома ... 1977
Очевидно, что в 1977 это была здравая мысль. То же самое до сих пор можно сказать, что "нет причин, что бы кто то захотел ядерный реактор у себя дома", но кто знает, что будет через 100-200 лет.

Hunta
04.01.2019, 18:59
Очевидно, что в 1977 это была здравая мысль.

Первое использование термина «персональный компьютер» относилось к компьютеру Programma 101 (1964) итальянской фирмы Olivetti.

В мае 1966 г. Стивен Грей основывает общество компьютерных любителей (Amateur Computer Society) или ACS.

C 1973 года выпускается как исследовательский прототип несколько тысяч Xerox Alto — первый персональный компьютер с графическим интерфейсом и метафорой рабочего стола.

В 1974 году фирма MITS начало производство компьютера Altair 8800, который, как считается, положил начало всем любительским персональным компьютерам

В 1975 г. Билл Гейтс и Пол Аллен решили написать интерпретатор языка BASIC для компьютера Altair 8800 и основали компанию Micro-Soft, специализировавшуюся на разработке программного обеспечения для компьютеров.

1 апреля 1976 г. Стив Джобс и Стив Возняк основали фирму Apple Computer.

В 1976 году начался кустарный выпуск Apple I — компьютера, который послужил предтечей развития одного из современных производителей персональных компьютеров, Apple Computer.

В июне 1977 года первый серийно выпускавшийся Apple II предложил пользователям интегрированную клавиатуру, цветную графику, звук, пластиковый корпус и восемь слотов расширения.

В августе 1977 года начался выпуск Tandy Radio Shack TRS-80 — первого домашнего компьютера, стоившего менее 600 долларов США.

В декабре 1977 года появился Commodore PET — первый компьютер, в комплект поставки которого входили клавиатура, монитор, накопитель на магнитной ленте (специальный фирменный магнитофон).

В 1978 году поступил в продажу Sinclair Mk14 по цене всего 39.95 английских фунтов.

В ноябре 1979 года начинаются массовые продажи домашних персональных компьютеров Atari 400/800.

В 1980 году в TRS-80 Color Computer впервые в персональном компьютере использована многопользовательская и многозадачная операционная система OS-9.

Безусловно, очень здравая. Ведь прошло каких то 100-200 лет. Ой, НЕ прошло.

AFZ
04.01.2019, 19:33
Очевидно, что в 1977 это была здравая мысль.Не-а! В 57-м да, мысль была бы здравой, в 67-м уже сомнительной, а в 77 уже год, как продавался Apple-1, а всякие Альтаиры и пр. - и того дольше. Всего год спустя Интел предложил 8086, а в 81-м (еще 3 года спустя) Межделмаш предложил свой первый писюк на 8088.

Налицо классический случай почивания на лаврах и утраты нюха. То же и с Межделмашем: разработка писюка выполнена "на отвали", а софт вообще поручили никому не известной мелкой компании Microsoft. Они даже не удосужились запатентовать свой писюк, за что, кстати, им большое спасибо - высокая конкуренция и цены сделала разумными, и привела к быстрому техническому совершенствованию.

В отличие от Apple, которые жестко запатентовали свой Мак и юридически преследовали клонмейкеров. И где он, тот Мак?..

MM
04.01.2019, 20:03
В отличие от Apple, которые жестко запатентовали свой Мак и юридически преследовали клонмейкеров. И где он, тот Мак?..
Это похоже на вечный вопрос экономистов - "фальшивомонетчики - это зло или благо ?"

Например, известно, что при советах печатали американские доллары ( бумашки ), прямо в центре Москвы , прямо с оригинальных матриц - американцы высчитали по номерам. Но матрицы признали настоящими ( краденными - ??? ).
Периоды печатания - при курителе трубки, возможно при кукурузнике ( должно гуглится ).
Есть мнение, что это пошло на пользу экономике США - по типу "количественного смягчения" .

MacBuster
04.01.2019, 20:13
Удаление в знак протеста против действий MM

Hunta
04.01.2019, 20:14
Налицо классический случай почивания на лаврах и утраты нюха
Насчёт почивания на лаврах - сложно сказать, а вот утрата нюха - практически наверняка - технологии производства компонент компов, самих компов и программ для них - рванули с космической скоростью. И он не успел (или не смог - всё таки возраст и мышление в определённых рамках) среагировать. По мне, так что бы он смог среагировать - ему нужно было не бизнес двигать (хотя это тоже не последнее дело), а технологии прокачивать (заодно с мышлением) - но учитывая большую вероятность ошибок на этом пути - можно было и бизнес похерить. Так что - палка о трёх концах - что бы получилось, пойди он по такому пути.

Кстати, отнюдь не факт, что то, к чему мы в этих технологиях пришли - зер гут. А по мне - так не в ту сторону поехали технологии. За что отдельное "спасибо" именно IBM. Но это только моё мнение :)

MM
04.01.2019, 20:31
Чертовски точная нумерология однако. Скоро перейдём к съемкам высадки американцев на Луне в павильонах Мосфильма?

Вы даже не гуглили.
Тиражи бумажек были существенные, и не заметить такую массу в Вашингтоне не смогли.

zx_
04.01.2019, 20:35
да их и щас печатают прямо на гознаке
цех отдельный
для лаврушки гру и фсб

MM
04.01.2019, 20:38
что бы получилось, пойди он по такому пути.
Терак 1977 г.
Но это типа как "не ПК".

DEC на милитарисских заказах катался как сыр в масле, по 1991 г. включительно.
А уже в 1994 готовился к банкротству, т.к. вояки стали заказывать на полпорядка меньше, в связи с развалом главного противника.

Hunta
04.01.2019, 21:02
Терак 1977 г.
Это гадание на кофейной гуще.

MM
04.01.2019, 21:14
Это гадание на кофейной гуще.
http://www.threedee.com/jcm/terak/index.html
В рознице в 1979 г., причем даже есть программы типа CAD-софта - который за ~месяц не пишется.

Через несколько лет его прокачали до Э-85 ( 1982 ), потом ( 1984 ) до ( Pro-380 ).

Hunta
04.01.2019, 22:18
В рознице в 1979 г.,
Эта история. И история с тем Олсеном, при котором DEC благополучно отдал концы.
Я говорил о человеке, который бы прокачивал не бизнес, а архитектуру и свой мозг. И в этом случае - все текущие предположения - гадание на кофейной гуще.

MM
04.01.2019, 23:26
И история с тем Олсеном, при котором DEC благополучно отдал концы.
История DEC почему-то несколько похожа на историю НЦ.
Оба были на Фактическом безлимитном финансировании, оба разорились во время паузы в холодной Войне.

В одном из последних номеров журнала Электроникс ( США ) ( обанкроился в 1993 г. тоже, кстати... ) была статья-некролог о DEC - формально они тогда были на "полном ходу", но спецам было ясно - "на полном ходу на кладбище". Подробнее - у министра обороны США была специальная помощница по заказам для фирмы DEC - в ранге чуть ли не зама. Так в 1993 г. её сократили...

Hunta
05.01.2019, 00:05
История DEC почему-то несколько похожа на историю НЦ.
И что? Да хоть два раза похожа. Речь не про то.

svinka
05.01.2019, 01:15
Да хоть два раза похожа
Ни фига непохоже. Digital была продана в 1998 производителю писюков COMPAQ за рекордные для того времени 9 миллиардов долларов.
Неплохой итог бизнеса.

Hunta
05.01.2019, 01:48
Ни фига непохоже. Digital была продана в 1998 производителю писюков COMPAQ за рекордные для того времени 9 миллиардов долларов.
Неплохой итог бизнеса.
Ещё раз. Речь шла о совсем другом.

MM
05.01.2019, 02:21
...о совсем другом...
Тут есть некотрые аналогии.

Предположим, в крупном российском городе есть заводик по выпуску ИС. Есть даже линия, способная давать 1 мкм с ПВГ 1% на 1 млн транзисторов ( не путать с узкоглазыми 130 нм при ПВГ 20% на 10 млн транзисторов ). Руководитель предприятия получает ~ 100 т.р. в день ( в конверте, разумеется ), и озабочен лишь тем, что бы "случайно" не обнаружить мешок 50 кг Горыныча в холодильнике ( да и платяной шкаф тоже надо контролировать ... ). Ну может еще, что бы голодающие цеховые детишек не похители и не съели ( в самом прямом смысле ).
Есть еще грамотный ветеран - ГК. Опыта офисных войн - хорошо за 30 лет, все - с победой. Получает ~10 т.р. в день ( в конверте ).
И вот к ним приезжает какой-то инженеришка из всемирного центра алкоголизьма и криминала - с предложением наладить выпуск ОЭВМ на 1 мкм с ядром 1806ВМ2. Разумеется, традиционно собирается совещание с нужными службами. Повестка дня :
1. В какой стадии проект ОЭВМ ? Сколько нужно денех/времени до шаблонов ?
2. С чем совместимо ( из имеющегося аппарата ) ?
3. Какой объем сбыта в первый год продаж ? А во второй ?
4. Дадут ли сверху госзаказ на кучу ОЭВМ ?
Услышав "неготово"-"несовместимо"-"единицы-десяки"-"нет" - устало приглашает на повторное совещание, когда будет готов п.1

Почему ГК послал в Лес - да старенький он уже, лень, и страх вообще что-то делать - вдруг непродадут нисколько, а сотни т.руб потрачены ?!
И главное - зарплатка капает каждый день - даже если в цеху все разбегутся или отравятся "неправильным спиртом".

Примерно потому и глава DEC малость затупил с ПК для народа - нахрена дергаться, если всё налажено и работает, фактически непотопляемая присоска к госказне ?

Hunta
05.01.2019, 02:32
российском городе
Я догадываюсь, что люди все более менее похожи, вот только проблема в том, что - не видно ни раньше в СССР, ни сейчас в России личности уровня Олсена - что ни говори - но DEC всё таки был создан и его серия PDP-11 - это не дешёвый ширпотреб, ломающийся на второй день после включения. Есть у нас компы сравнимого качества? А значит и проводить параллели - почему мифический ГК мог затупить и почему Олсен затупил - полная хрень.

Korchagin
05.01.2019, 20:23
Ну, DEC то присоской к госказне не был. Частная контора таки. Просто фирма специализировалась на т.н. средних ЭВМ. ПК в конце 70-х (расцвет многотерминальных ЭВМ) казались блажью, тот самый Альтаир был неимоверным убожеством с чувствительной ценой. А когда IBM пару лет позанималась персоналками и выдала на гора XT с жестким диском, было уже поздно дергаться.

MacBuster
05.01.2019, 20:42
Удаление в знак протеста против действий MM

MM
05.01.2019, 22:23
Ну, DEC то присоской к госказне не был. Частная контора таки.
В США в общем, для очень крупного бизнеса, практикуется именно метод государственно-частного партнерства по типу "присосок" . Не следует путать с русско-итальянскими "пилорамами" и русско-уголовными "прачечными" .
Отличия "присосок" от стандартных рыночных отношений по типу закупок на торгах - это как раз умышленное отсуствие таковых.
Но, опять таки, с контролем норм прибыли - в районе 20-25%% ( это для русских лжепредпринимателей не очень понятно - "как это так 20% ?!?!" :v2_dizzy_pirate: )
Нынешние примеры - Боинг и т.п. менее известные конторы ВПК США.

Можно предположить, что нынешняя парочка из Крючкова А.+М. - тоже по сути присоски. С элементами пилорамы .

Korchagin
05.01.2019, 22:50
Естественно, лобби в верхах у DEC было. Но качество выпущенной техники как-то не вяжется с пилорамой. Да, их ЭВМ в одно время стояли вообще везде в США - от вузов до электростанций, сам Арпанет в 70-х состоял из PDP, а в 80-е из VAX и изделий Sun Microsystems. Картинка забавная до сих пор сохранилась.
https://upload.wikimedia.org/wikipedia/commons/b/bf/Arpanet_logical_map%2C_march_1977.png
Но что-то не срослось, раз произошла продажа конторы со всеми наработками. Стандартные рыночные отношения по типу закупок при торгах далеко не всегда благо, совсем недавно наши российские электростанции волосы себе на заднице начали рвать - настоль это оказалось неудобно.

CodeMaster
07.01.2019, 14:36
Картинка забавная до сих пор сохранилась.
А где узел самой DEC? Не верится, что их не было ARPANET, если там был даже Лондон.

Hunta
07.01.2019, 15:54
Их там, похоже, не было - и я не стал бы сильно этому удивляться, учитывая, что примерно в это же время (но вроде как немного пораньше) у них появился DECNet - и смысл поддерживать ещё один протокол?

ЕМНИП, как раз недавно где то читал по поводу того, что не вставание у истоков Internet - ещё один просчёт DEC.

И вроде как одна из наработок DECNet Phase V - протокол IS-IS, допиленный для поддержки IP, используется до сих пор крупными провайдерами в штатах. Ну или по крайне мере - достаточно долго использовался.

Korchagin
07.01.2019, 16:35
А где узел самой DEC? Не верится, что их не было ARPANET, если там был даже Лондон.
Между Линкольном и Гарвардом. По центру, ближе к правому краю рисунка.

DEC в начале 80-х с другими крупными игроками компьютерного рынка участвовала в стандартизации Ethernet. DEC также разработала протокол LAT. А про LAT этот я слышал еще в начале 90-х, когда разбиралось дело некоего Левина, который перевел что-то в районе 10 млн. долларов с многих счетов Ситибанка на свой счет. По этому же LAT наверное годов до 2005-2010 общались международные службы резервирования авиабилетов.

Hunta
07.01.2019, 17:23
DEC в начале 80-х с другими крупными игроками компьютерного рынка участвовала в стандартизации Ethernet
Ещё точнее - DEC вместе с Intel и Xerox и разработали первый (первые) стандарты Ethernet (DIX)


DEC также разработала протокол LAT
Протокол терминального доступа, DECNet Phase IV (1982 год)

svinka
09.01.2019, 00:15
c предложением наладить выпуск ОЭВМ на 1 мкм с ядром 1806ВМ2 пусть наладят выпуск микросхем памяти СОЗУ и ДОЗУ в керамических ДИП корпусах и будет им счастье

MM
09.01.2019, 00:41
пусть наладят выпуск микросхем памяти СОЗУ и ДОЗУ в керамических ДИП корпусах и будет им счастье
Докладываю.
В 2019 г. истекают крайние сроки хранения последних запасов ИС выпуска периода СССР ( выпуска по 1993 г. включительно ).
Новых ИС выпускаеся мало, в районе единиц %% от периода 1991 г.
Т.е. Король по факту остается в крайнем минимуме одежды. А грядет 2024 г., когда вообще вся техника периода СССР ( по 1993 г. включительно ) подлежит списанию. Т.е. на всю страну останутся порядка ~100 самолетов, ~30 кораблей, ~100 танков и даже под ~50 шт. ракет ( с разделением головок ).
И да, несколько сотен тысяч автоматов - все в вазелине, с пауками в дуле :v2_dizzy_army:
*
Лет 10 назад посещал небольшой заводик по выпуску ИС, в провинции.
В день на всем предприятии выпускалось примерно так ~500 шт. ИС.
А в цеху жарки кристаллов меня горячо заверили, что годных за 1 день никогда не выходило больше ~300 ИС в составе ПМК ( Пластина Монокристаллического Кремния ).
Разница - чуть ли не 50% в производстве и отгрузке в штуках :v2_dizzy_ironic:

Korchagin
09.01.2019, 02:26
Сколько надо для военных целей, столько и наляпают. В том сомнений вообще нет. Возможно, свернут в ближайшие годы PDP- и VAX-подобное. Ядра MIPS, ARM и еще некоторых ходовых в мире процессоров давно уж РФ производятся и явно не на склад, почти топовые на текущий момент резиновые дамы в золоте и никеле со свинцово-керамическими бронелифчиками тоже. Ушли уж от советского вперед. Что спишут советские вооружения, вряд ли - подновят последними партиями изделий от ангстремовских алкашей и в какую-нить зимбабве скинут, как это всегда бывало.

CodeMaster
09.01.2019, 21:01
Докладываю.
Этот доклад мы уже в прошлом году где-то видели.


~100 танков
Спокойствие, только спокойствие, сегодня несколько десятков Т34-85 отправились эшелоном в Подмосковье.


И да, несколько сотен тысяч автоматов
Не сгущайте краски, точные цифры знает только Шойгу, на момент снятия АК с производства их было несколько миллионов на складах, не считая другого стрелкового.


А грядет 2024 г.
Если ВВП пойдёт на третий срок, то это неважно, а если нет, то тем более. Вообще, до него ещё дожить надо.


Разница - чуть ли не 50% в производстве и отгрузке в штуках
Секретность. Путают следы.

Hunta
15.03.2019, 07:01
"Моя компания - сельскохозяйственный трейдер и переработчик зерна и масличных культур. Она торгует товарами на миллиарды долларов на различных биржах, таких как Чикагская торговая палата, Mercantile, Comex и несколько других торговых домов. В 1980 году только начиналось создание компьютерных сетей и компания создала собственную торговую систему, которая состояла из пары PDP-11/44 с RSX-11M, соединённых, с помощью DMC-11, мегабитным каналом с 8 линиями передачи данных из различных источников. Пара 11/44, с возможностью горячего переключения при отказе с помощью коммутатора шины DT07, обслуживала сеть из двенадцати PDP-11/23, работавших под управлением RSX11S (загружаемых по сети). 11/23 были расположены в разных частях мира, и каждая из них обслуживала порядка 20-24 VT100 - в общей сложности пары сотен товарных трейдеров с индивидуально настроенными экранами: самая свежая информация о цене кукурузы, соевых бобов, пшеницы, мировые новости и т. д. На этих PDP-11 работали программы, написанные на MACRO-11 реентерабельным кодом, использовавшие первые версии DECnet для организации межзадачной передачи данных по арендованным 9600 бодовым линиям, для передачи самой свежей информации в реальном масштабе времени. Программисты этих PDP-11 RSX систем были грубыми, жёсткими, опытными парнями, которые работали над такими проектами, как система SAGE ВВС США в начале 1960 года."

Korchagin
15.03.2019, 12:53
А, собственно, почему бы нет? Мейнфрейм от IBM был куда дороже всего этого комплекта пдпшек, обслуживание было дороже, программирование, заметно меньшая надежность. А тут забацали текстовую систему обновления котировок онлайн и подачи заявок покупки-продажи. А за терминалами торчали сами трейдеры, каждый по своему торговому инструменту. Древний пример дилинговых залов типа современных форексклубовских.

Hunta
15.03.2019, 13:02
А, собственно, почему бы нет
В статье интересная фраза попалась, не совсем дословно - "Наши админы сказали мне, что SYSGEN RSX-11M позволяет отделить сосунков от мужчин" :)

Korchagin
15.03.2019, 13:11
Так и есть, они правы. Как мужчины представлялись обладатели серьезных знаний по этой операционке, остальные это просто юзвери уровня сосунков.

AFZ
15.03.2019, 16:51
1980, да? Я бы эту задачу стал делать на ДИАМСе, вроде-бы, тогда уже был DSM-11 V3.0, а это крутизна по тем временам.

Hunta
29.05.2019, 10:31
Стек RSX-11M-PLUS


;
; EXECUTIVE STACK AREA
;

.ASCII /COPR. (C) MENTEC 1995/ ;ASCII COPYRIGHT NOTICE

.ASCIZ /*PDP-11 25TH ANNIVERSARY*/

.ASCIZ /*RSX-11 20TH ANNIVERSARY*/

Arseny
02.06.2019, 16:14
Очистил тему от офтопика и флуда.
Всем спасибо за внимание.

Hunta
02.06.2019, 16:32
Arseny, спасибо.
Дописал небольшие правила в начале темы

Hunta
09.06.2019, 19:00
http://www.KpXX.Ru/DEC/DCT11-EM/Foto

Hunta
10.06.2019, 09:57
Не про PDP-11, а просто прикольно. Компьютер с процессором на TTL микрухах :) Ещё один шаг на пути от "резиновой женщины" :)
https://gigatron.io/

CodeMaster
24.06.2019, 21:50
Не про PDP-11, а просто прикольно.

совсем не про PDP-11 и даже совсем не про компьютеры.

А как же:

Дописал небольшие правила в начале темы

Эта тема - для интересных фактов о семействе PDP-11 и софта для него.

или ты решил превратить тему в личный блог? Ну, так тут есть функция дневников для этого.

Xrust
26.06.2019, 23:28
Первый в мире робот-убийца (https://youtu.be/d3ENbjUTv0I) под управлением pdp-11.

Hunta
27.06.2019, 04:59
Да, известная история...

Hunta
27.09.2019, 09:41
RFC 790, далёкий 1981 год (я ещё в школе учился):



....

Assigned Network Numbers

Class A Networks

....

037.rrr.rrr.rrr DECNET Digital Equipment Network [DRL]
038.rrr.rrr.rrr DECNET-TEST Test Digital Equipment Net [DRL]


Ну и для того, что бы понять масштабы тогдашнего интернета:



Class B Networks

Internet Address Name Network References
---------------- ---- ------- ----------
128.000.rrr.rrr Reserved [JBP]
128.001.rrr.rrr-128.254.rrr.rrr Unassigned [JBP]
191.255.rrr.rrr Reserved [JBP]

Class C Networks

Internet Address Name Network References
---------------- ---- ------- ----------
192.000.001.rrr Reserved [JBP]
192.000.001.rrr-223.255.254.rrr Unassigned [JBP]
223.255.255.rrr Reserved [JBP]

xolod
27.09.2019, 12:22
RFC 790, далёкий 1981 год (я ещё в школе учился):



....

Assigned Network Numbers

Class A Networks

....

037.rrr.rrr.rrr DECNET Digital Equipment Network [DRL]
038.rrr.rrr.rrr DECNET-TEST Test Digital Equipment Net [DRL]


Ну и для того, что бы понять масштабы тогдашнего интернета:



Class B Networks

Internet Address Name Network References
---------------- ---- ------- ----------
128.000.rrr.rrr Reserved [JBP]
128.001.rrr.rrr-128.254.rrr.rrr Unassigned [JBP]
191.255.rrr.rrr Reserved [JBP]

Class C Networks

Internet Address Name Network References
---------------- ---- ------- ----------
192.000.001.rrr Reserved [JBP]
192.000.001.rrr-223.255.254.rrr Unassigned [JBP]
223.255.255.rrr Reserved [JBP]


Тут скоро распилят все, что можно и что нет!!!
class-e (240/4), 0/8, 127/8, 224/4
https://github.com/dtaht/unicast-extensions
а 37/8 и 38/8 уже и не вспомнят. =)

AFZ
27.09.2019, 13:12
Вот до чего доводит экономия там, где не надо. Вон, для МАК-адресов сделали 48 бит, и пока хватает. (Правда, только "пока"...)
Особенно умиляет добавление по одному-два бита в дисковые адреса IDE - это же вообще песня! Очень грустная, если помните. Хотя, на той же системе-360 сразу сделали дисковый адрес 56 бит, и хватило на все время жизни этих систем - и 360-й, и 370-й, и 380-й...

И, кстати, решение с IPv6 напоминает те же пляски с бубном вокруг отдельных битиков IDE. Нет, чтобы сразу сделать 64 бита - опять будем рубить хвост по частям...

xolod
27.09.2019, 13:45
Да адресация в IDE это просто позорище..

CodeMaster
27.09.2019, 14:05
Вот до чего доводит экономия там, где не надо.
Ну, возможно в этом был смысл в то время, если пошли на использование RADIX-50. А это же не только "битики", а ещё и какие-то вычисление, а с мощностями тогда то же было не густо.


Хотя, на той же системе-360 сразу сделали дисковый адрес 56 бит
Разные сегменты, где-то можно было не экономить.

Hunta
27.09.2019, 14:14
И, кстати, решение с IPv6 напоминает те же пляски с бубном вокруг отдельных битиков IDE. Нет, чтобы сразу сделать 64 бита - опять будем рубить хвост по частям...
Вообще-то адрес IPv6 - 128 бит. По стандарту - первые 64 бита - идентификатор сети, вторые 64 бита - идентификатор хоста в этой сети.

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


Вот до чего доводит экономия там, где не надо.
Ничё, что в первой PDP-11/20 было 4 кб памяти? Ну да, чё их экономить то.

Hunta
29.09.2019, 17:03
Занимательные комментарии в RMON

; "GORT, Klaatu...borada...nikto"
; - "Day the Earth Stood Still"
;
; "The death of God left the angels in a strange position."
; - Barthelme, "On Angels"
;
; "I could prove God statistically."
; - George Gallop

SuperMax
14.10.2019, 09:56
Вопрос тут возник, есть ли под RT11 (XM ?) Си, причем с поддержкой ДП и оверлея
грубо говоря, чтобы писать на Си сразу и не заморачитьваться переключением страниц ?

Hunta
14.10.2019, 11:13
Вопрос тут возник, есть ли под RT11 (XM ?) Си, причем с поддержкой ДП и оверлея

Факты
- RT поддерживает оверлеи
- RSX точно поддерживает оверлеи, резидентные в памяти - они как раз и используют (через системные вызовы) ДП
- технически, для поддержки оверлеев, резидентных в памяти, всё нужное есть в syslib и TKB (компоновщик RSX) - программу как то специфически писать не надо

Сильная уверенность
- Большая вероятность того, что под RSX я напишу на C программу, которая будет работоспособна с использованием этого механизма (точно работает с MACRO-11 и FORTRAN-77 - был опыт)

Не хватка информации, а память не совсем уверенно подсказывает
- Вроде как в RT есть аналогичное. Надо читать доку на LINK

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

Посмотрел описание компоновщика RT - да, можно, аналогичный функционал есть

SuperMax
14.10.2019, 15:02
вопрос не в поддержке RT и оверлееев
вопрос в компиляторе СИ, который выдаст код с поддержкой ДП (!) и оверлеев

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

вопрос не в поддержке RT и оверлееев
вопрос в компиляторе СИ, который выдаст код с поддержкой ДП (!) и оверлеев

Hunta
14.10.2019, 16:27
вопрос не в поддержке RT и оверлееев
вопрос в компиляторе СИ, который выдаст код с поддержкой ДП (!) и оверлеев

Если программа собирается стандартным LINK-ером, то по барабану - поддерживает ли компилятор. Как я уже написал - писались программы на MACRO, на FORTRAN-е, и, ЕМНИП - на Паскале - все могли использовать резидентные в памяти оверлеи, функционал которых был завязан на системные макровызовы к ОС

Тот компилятор С, который я знаю (от DECUS-а), насколько мне не изменяет память (я его почти не использовал), использовал стандартный линкер операционки. Возможно, ошибаюсь, дома посмотрю - напишу. Если использовал стандартный - то проблем нет. Если не использовал - то придётся делать самому (и не стоит лезть напрямую к ДП под XM)

С другими компиляторами не сталкивался

SuperMax
14.10.2019, 17:29
главный вопрос как раз в ДП

Hunta
14.10.2019, 19:20
Вопрос тут возник, есть ли под RT11 (XM ?)

главный вопрос как раз в ДП

Если речь идёт о XM - вопроса о ДП в принципе нет, иначе смысла в XM нет

SuperMax
14.10.2019, 21:07
Если речь идёт о XM - вопроса о ДП в принципе нет, иначе смысла в XM нет
не понял
я спросил - есть ли компилятор СИ под RT11 с поддержкой ДП и оверлеев ?
если есть то прошу подсказать где/какой ?

Hunta
14.10.2019, 22:59
Берём исходный вопрос


Вопрос тут возник, есть ли под RT11 (XM ?) Си, причем с поддержкой ДП и оверлея
грубо говоря, чтобы писать на Си сразу и не заморачитьваться переключением страниц ?

Если программа будет работать под XM - прямая работа с MMU, строго говоря, не допустима ни из какого языка

Если речь идёт о работе не под XM, то единственный мне известный компилятор, позволяющий не заморачиваться с MMU, но при этом работать с расширенной памятью - компилятор с Fortran-77, но строго говоря - ЕМНИП

Известные мне компиляторы C
- ни один (напрямую) не выдаёт код, позволяющий работать с MMU не задумываясь.
- ни один (напрямую) не выдаёт код, позволяющий работать с оверлеями, не задумываясь.

Если писать на F77, можно так же не задумываться о работе с большими массивами данных, которые будут храниться в расширенной памяти (при поддержки ОС или, в случае SJ-FB - и прямой работой с MMU - за счёт библиотеки OTS)

При использовании стандартного подхода - можно писать программу (на любому языке), не задумываясь об оверлеях (резидентных на диске или (при поддержке со стороны операционки) в памяти)

Если суть вопроса - можно ли малой кровью обойти ограничение в 64 кб для кода и данных - в целом ответ - нет. Скорее всего, придётся писать свою библиотеку и работать из кода с ней

hobot
14.10.2019, 23:25
SuperMax
Си поставлялись с УК-НЦ и ДВК отдельным пакетом,
вот несколько прямых ссылок на варианты
http://archive.pdp-11.org.ru/ukdwk_archive/dwkwebcomplekt/C/
http://archive.pdp-11.org.ru/ukdwk_archive/dwkwebcomplekt/PATRON_RAFOS_C/
http://archive.pdp-11.org.ru/ukdwk_archive/dwkwebcomplekt/Algol_C_F77_Pascal_Lisp/
http://archive.pdp-11.org.ru/ukdwk_archive/ukncbtlwebcomplekt/Cc_rafos_UKNC/
http://archive.pdp-11.org.ru/ukdwk_archive/ukncbtlwebcomplekt/Other/VAMOS_C_BOOT/

AFZ
15.10.2019, 06:28
Если речь идёт о работе не под XM, то единственный мне известный компилятор, позволяющий не заморачиваться с MMU, но при этом работать с расширенной памятью - компилятор с Fortran-77, но строго говоря - ЕМНИПФорьран-4, вроде-бы, тоже. Мне в те времена не попадалось документации по Ф-77, и, кажется, я даже не знал, что он есть под RT-11, но фразу о том, что Фортран умеет пользоваться расширенной памятью под SJ/FB читал совершенно точно.


я спросил - есть ли компилятор СИ под RT11 с поддержкой ДП и оверлеев ? А оверлеи компиляторы вообще не поддерживают. Оверлеи ты планируешь сам, а создает их по твоему плану линкер.

Hunta
15.10.2019, 10:04
Форьран-4, вроде-бы, тоже
Насчёт FIV не уверен - в те времена, когда не было доступен F77 - вопрос о использовании расширенной памяти не стоял, а когда появился F77, в силу большего удобства языка - FIV практически перестал использовать


Фортран умеет пользоваться расширенной памятью под SJ/FB
За счёт того, что а) было слово VIRTUAL и б) была поддержка со стороны OTS в двух вариантах - для SJ/FB и для XM


создает их по твоему плану линкер.
Который так же поддерживает два варианта (библиотека SYSLIB) - обычные и виртуальные (резидентные в расширенной памяти). Но работает ли второй вариант не в XM - не помню, потому как активно это юзал в RSX. И тут поддержки компилятора так же не требуется - рулит компоновщик

AFZ
15.10.2019, 12:20
За счёт того, что а) было слово VIRTUAL и б) была поддержка со стороны OTS в двух вариантах - для SJ/FB и для XMЗаглянул в "ПО ДВК книга 4 Языки программирования Фортран, Модула-2" То же самое, вместо DIMENSION пиши VIRTUAL, и вперед! Естественно, далее долго и нудно перечисляются правила пользования и ограничения, но таки да, Фортран-4 умеет использовать массивы в расширенной памяти, причем как через XM, так и через свою ран-тайм систему, если монитор не ХМ.

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

Собственно говоря, оверлеи, резидентные в расширенной памяти, как и все оверлейное хозяйство, к фортрану имеют крайне косвенное отношение. Это фича ХМ-монитора, а не Фортрана.

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

Стоп! Я невнимательно прочитал. Оверлеи в расширенной памяти без ХМ-монитора не должны работать.Пункт 3.9.2 той же книги. Можно использовать редактор связей для создания оверлейной структуры, использующей расширенную память, для привилегированных или виртуальных заданий. Для этого необходим монитор ХМ и диспетчер памяти...

hobot
15.10.2019, 19:26
Для этого необходим монитор ХМ и диспетчер памяти...
http://archive.pdp-11.org.ru/ukdwk_archive/dwkwebcomplekt/FODOS3_6DISKET/

Hunta
15.10.2019, 21:31
Это всё есть в оригинале от DEC, а не в попытках переделки

CodeMaster
16.10.2019, 00:00
Если суть вопроса - можно ли малой кровью обойти ограничение в 64 кб для кода и данных - в целом ответ - нет.
А почему? Это было неактуально в то время или это бы имело побочные эффекты нивелирующие пользу?

Hunta
16.10.2019, 05:43
Это было неактуально в то время
Неактуально - что?

AFZ
16.10.2019, 07:20
А почему? Это было неактуально в то время или это бы имело побочные эффекты нивелирующие пользу?Все проще. Диспетчер памяти к PDP-11 прикрутили слишком сбоку - почти без вмешательства в аппаратуру процессора, и, поэтому, у программы нет средств нормального манипулирования длинными адресами. Вспомните х86*16. У него есть команды дальнего перехода, дальнего вызова подпрограммы, дальней косвенной адресации... То есть, при помощи специальных команд ЦП доступно все адресное пространство, все данные для этого содержались в регистрах процессора, при переключении задач они входили в контекст сохранения/восстановления. А здесь до этого не догадались, ДП прикрутили сбоку, как внешнее устройство, систему команд оставили, практически, прежней, а ей доступно только 64К. То есть, конечно, можно сделать что-то подобное, используя ресурсы ОС, что в некотором роде и сделали. Но это, прежде всего, долго, "на лету" не сделаешь. То есть, допустим, не сделаешь последовательный вызов нескольких дальних подпрограмм из быстрого цикла, поскольку он перестанет быть быстрым - вызов ОС для переключения - это не одна машинная команда, как в х86. Пусть и не самая быстрая...

С другой стороны, такая модификация системы команд отправила бы лесом бОльшую часть наработанного до этого... ИМХО.

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

Да, умелое планирование оверлеев и правильное размещение данных позволяет решать многое, но это надо напрягаться программисту, тогда, как при наличии расширенной системы команд (как в х86, допустим) с этим справляются компиляторы.

Hunta
16.10.2019, 08:37
вызов ОС для переключения
Это если из системы, которая сама управляет MMU - типа XM монитора или RSX. Если прога сама будет управлять MMU - всё несколько быстрее и можно даже проимитировать дальние вызовы и возвраты, но ценой поддержки транслятором или программистом и всё равно это будет достаточно медленно.
И ещё надо учесть факт, что PDP создавались изначально даже не во времена "640 кб хватит всем", память была крайне дорогой, процессор то же не за фантики можно было купить, плюс конкуренция по цене (с той же IBM), поэтому делали не "машину мечты", а то, что будет неплохим и хорошо продающимся. Ну и если вдруг памяти мало, а буратино попался богатым, можно было взять проц (корзина с платами), воткнуть в него (в корзину) ещё плату, (возможно) переставить перемычки и вуаля - у нас уже 248 кб (а то и 4 мб) памяти. А не нужно было столько памяти или буратино просадил все свои сольдо - продаём базовый процессор подешевле, ну а если вдруг сольдо таки найдутся - продаём доп плату и все. Так что не фига он там не был прикручен

сбоку
- всё было очень логично - с точки зрения ведения бизнеса, а не хотелок людей из 21 века
И точно так же сделали FPP

И кстати - это сейчас, когда всё упаковано в одну две микросхемы похожее решение (вот одна микросхема без MMU, а вот вторая микросхема - MMU) было бы решением сбоку, а во времена процессоров из нескольких плат - всё достаточно логично и с точки зрения техники


можно сделать что-то подобное, используя ресурсы ОС
Необязательно. Виртуальные массивы в FORTRAN при работе под SJ/FB - тому пример. И работать, кстати, будут быстрее, чем под ОС, потому что той ещё надо управлять - кто где память занял


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

А цену работа под включённым MMU можно понять (весьма грубо, правда) по

Под SB

Копирование в NL:

65534*512/(2:37)/1024 = ~ 209 кб/с

Копирование на другой ZF с проверкой (два чтения, одна запись, сравнение в памяти)

65534*512*3/(11:25)/1024 = ~ 144 кб/с


Под XM

Копирование в NL:

65534*512/(3:07)/1024 = ~ 175 кб/с

Копирование на другой ZF с проверкой (два чтения, одна запись, сравнение в памяти)

65534*512*3/(13:13)/1024 = ~ 124 кб/с

то есть в районе 10-20 процентов

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


А здесь до этого не догадались
Аха, конечно, там одни тупые пьяные инженеры сидели

AFZ
16.10.2019, 12:14
А цену работа под включённым MMU можно понять (весьма грубо, правда) Это не столько цена самогО MMU, сколько цена более навороченной ОС, в том числе, конечно, и затраты на обслуживание MMU, но не только.


можно было взять проц (корзина с платами), воткнуть в него (в корзину) ещё плату, (возможно) переставить перемычки и вуаля - у нас уже 248 кб (а то и 4 мб) памяти.ИМХО, ни фига! Проц без ДП не переделывался влёгкую в проц с ДП, это совершенно разные изделия.

Тем не менее, оно, все-таки, сбоку - добавили несколько битов в PSW, добавили второй указатель стека со схемой выбора, кому из них работать, прицепили ДП, как внешнее устройство, завернули шину адреса через него, и все. Ах, да, еще подправили дешифратор команд, запретить исполнение некоторых команд в юзермоде.


Аха, конечно, там одни тупые пьяные инженеры сиделиЗлой ты! :) Тем не менее, мэйнстрим DEC'и проглядели, как и Межделмаш. Хотя, конечно, в то время, когда к PDP-11 цепляли ДП, будущее еще было туманным...

Hunta
16.10.2019, 13:50
ИМХО, ни фига!
DEC-11-HKBB-D
KB11-A Central Processor unit maintenance manual

Страница 1-4

The KT11-C Memory Management Unit is an OPTION that replaces the SJB System Jumper Board to provide both forms of memory management

Ну и менее надёжный источник - моя память. Когда на химфак МГУ привезли СМ-4 и наш электронщик её приводил в рабочее состояние, насколько мне не изменяет память, он вначале её приводил в чувство БЕЗ ДП, гоняя тесты сначала с перфолент, а потом, когда оживил более менее - грузил с RK05 - сообщение 28KW достаточно хорошо помню. И только после этого он начал смотреть на ДП

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

О, читаем 1-4 в конце:

1.1.4 Expanded Systems

The elements that distinguish a PDP-11/45 System have all been introduced in the three preceding paragraphs.

These elements are the following:

a. the KB11-A Central Processor Unit
b. the MS11 Semiconductor Memory System
c. the FP11 Floating-Point Processor
d. the KT11-C Memory Management Unit

All PDP-11/45 Systems include the KB11-A; however, ALL OTHER COMPONENTS are OPTIONAL

AFZ
16.10.2019, 14:02
Когда на химфак МГУ привезли СМ-4 и наш электронщик её приводил в рабочее состояние, насколько мне не изменяет память, он вначале её приводил в чувство БЕЗ ДП, гоняя тесты сначала с перфолент, а потом, когда оживил более менее - грузил с RK05 - сообщение 28KW достаточно хорошо помню. И только после этого он начал смотреть на ДП Да? Не знал. Но это, как я понимаю,одна из первых моделей с ДП. На 1420 максимум вариаций - это, ИМХО, 18- или 22-разрядный адрес. Хотя, конечно, черт его знает - с СМ-ками я не работал, Э-60 и все модели ДВК, вот и весь парк техники, с которой я работал плотно.

Hunta
16.10.2019, 14:23
На СМ-4 - было давно, поэтому не гарантирую, только подсказывает память, на 1420 максимум что делали - вырубали один раз кэш-память проца, когда чинили, на 1600 тоже не было случая выключения ДП, хотя с 1600-ой я по первости сел в лужу - зуб давал, что 248 Кб, а оказался мег

Ну и 11/45 (насколько мне не изменяет память, но искать лень) - мог работать как с 18-битным MMU, так и с 22-ух битным

Hunta
12.03.2020, 13:10
The game is very similar to the traditional Star-Trek game with the following exceptions.

First, the game involves several players (1-6), each of whom has his own terminal and starship.

Second, the game runs in real time as far as the players are concerned. For example, if you are going warp 8 you will continue to move regardless of your activity at the terminal (unless you are destroyed, hit something, run out of energy, or change your warp speed). Each player's status and position as well as the scores of all players is displayed and continuously updated at each player's terminal. (The update rate is twice per second, but the source code is commented on where to change it should you wish to do so.)

Third, at the present time there are no Klingons or Romulans to shoot down, instead you shoot (or at least attempt to shoot) the other players.


Игра очень похожа на традиционную игру СтарТрек со следующими отличиями.

Во-первых, в игре участвуют несколько игроков (от 1 до 6), играющими каждый со своего термаинала и на своем звёздном судне.

Во-вторых, игра идёт настолько в реальном времени, насколько игроки заинтересованы. Например, если Вы начали перемещаться варпом со скоростью 8, движение продолжается независимо от ваших действий за терминалом (если только Вы не уничтожены, не ударились обо что-то, не израсходовали всю энергию или не изменили скорость варпа). Статус и позиция каждого игрока, а так же счёт всех игроков отображается и постоянно обновляется на терминале каждого игрока (по умолчанию частота обновления - дважды в секунду, но в исходном тексте есть комментарии - как это изменить, будь на то ваша воля).

В-третьих, в настоящее время во Вселенной нет ни клингонов, ни ромулан, которых можно было бы перестрелять, зато Вы можете перестрелять (ну или по крайне мере попробовать перестрелять) других игроков.

...

4.0 TERMINATING THE GAME


It is important that the last MTREK players clean up the system before they leave. This is done by issuing the following set of commands:

1. Terminate each PLAYER program by entering the "Q" command.

2. If the universe manager MTREKD does not terminate automatically abort it as follows:

<CNTRL> C
MCR> ABORT

3. If you are running any ROBOT programs abort each one as follows:

<CNTRL> C
MCR> ABORT

Now mop up the blood, sweat, and tears; logout; and go home.


4.0 Завершение игры

Важно, что бы последние игроки MTREK убрались за собой в системе перед тем, как выйти.
Это делается следующими действиями:

1. Завершить работу каждой программы PLAYER вводом команды Q.
2. Если программа MTREKD, управляющая вселенной, не завершила свою работы автоматически, завершите её работу следующими действиями:

Ctrl/C
MCR> ABORT

3. Если Вы запустили одну или несколько копий программы ROBOT, завершите их работу следующими действиями:

Ctrl/C
MCR> ABORT

А теперь время вытереть кровь, пот и слезы, выйти из системы и идти домой.

-------------------

Другая игрушка:

This game is similar to the arcade game, CENTIPEDE. As written, it must be played on a VT100 video terminal. You have a gun, which you can move around on the bottom third of the screen (player's zone) and with which you can shoot at various invading creatures. Bullets from your gun travel upwards until they either hit a target or the top of the screen. No more than one bullet can be on the screen at a time. Centipedes appear at various times on the screen, consisting of a head and from zero to eleven body segments. Centipedes move back and forth across the screen, descending a level when they hit a screen boundary, a mushroom, or another centipede. When they reach the bottom of the screen they begin to ascend in the same manner, but remain within the player's zone. The object of the game is to kill these centipedes before they eat your gun.

Модуль из неё, написан на RATFOR:



SUBROUTINE BULCOL
#
# THIS SUBROUTINE CONTROLS COLLISIONS BETWEEN BULLETS AND TARGETS.
#
IMPLICIT INTEGER (A-Z)
INCLUDE SY:CNTPED.CMN
INCLUDE SY:UVT100.DAT
BYTE THREE,SIX,NINE
% DATA THREE,SIX,NINE / "063,"066,"071 /
#
# CHECK IF CURRENT BULLET LOCATION COLLIDES WITH MUSHROOM
#
IF (MSHBRD(BULX,BULY) > 0) [
BULACT = 0
MSHBRD(BULX,BULY) = MSHBRD(BULX,BULY) - 1
IF (MSHBRD(BULX,BULY) == 0) [
PSNBRD(BULX,BULY) = 0
SCORE = SCORE + 1
]
]
#
# CHECK IF CURRENT BULLET LOCATION COLLIDES WITH CENTIPEDE(S)
#
DO I = 1,MAXCNT [ #LOOP THROUGH CENTIPEDE TABLE ENTRIES
IF (CLEN(I) == 0)
NEXT #UNUSED ENTRY
DO J = 1,CLEN(I) [ #LOOP THROUGH LINKS FOR THIS ENTRY
IF (BULX == CX(I,J) .AND. BULY == CY(I,J)) [ #COLLISION
BULACT = 0
MSHBRD(BULX,BULY) = 4 #CREATE MUSHROOM IN MUSHROOM TABLE
CNTBRD(BULX,BULY) = 0 #CLEAR CENTIPEDE BOARD AT THIS LOC
IF (J == 1) [ #COLLISION WITH CENTIPEDE HEAD
SCORE = SCORE + 100 #INCREMENT SCORE
CLEN(I) = CLEN(I) - 1 #'SHORTEN' CENTIPEDE
IF (CLEN(I) > 0) [ #IF LENGTH NOT ZERO
DO K = 1,CLEN(I) [ #UPDATE LINKS IN CENTIPEDE TABLE
CX(I,K) = CX(I,K+1)
CY(I,K) = CY(I,K+1)
]
CALL UVT100(CUP,CX(I,1),CY(I,1)) #DISPLAY NEW CENTIPEDE HEAD
IF (CDIR(I) == LEFT)
CALL GETADR(PRL,CLHEAD)
ELSE IF (CDIR(I) == RIGHT)
CALL GETADR(PRL,CRHEAD)
ELSE
CALL GETADR(PRL,CDHEAD)
CALL WTQIO(IOWVB,5,2,,,PRL)
]
]
ELSE [ #COLLISION WITH CENTIPEDE BODY
SCORE = SCORE + 10 #INCREMENT SCORE
NEWLEN = CLEN(I) - J
CLEN(I) = J - 1
IF (NEWLEN > 0) [
DO K = 1,MAXCNT [ #FIND EMPTY SLOT IN CENTIPEDE TABLE
IF (CLEN(K) > 0)
NEXT
DO L = 1,NEWLEN [ #MOVE NEW CENTIPEDE LINKS TO THIS SLOT
CX(K,L) = CX(I,L+J)
CY(K,L) = CY(I,L+J)
]
CLEN(K) = NEWLEN #NEW CENTIPEDE LENGTH
CDIR(K) = CDIR(I) #NEW CENTIPEDE DIRECTION OF MOTION
CRISE(K) = CRISE(I) #NEW CENTIPEDE ASCEND OR DESCEND
CBOT(K) = CBOT(I) #NEW CENTIPEDE HIT BOTTOM FLAG
CALL UVT100(CUP,CX(K,1),CY(K,1))
IF (CDIR(K) == LEFT) #DISPLAY NEW CENTIPEDE HEAD
CALL GETADR(PRL,CLHEAD)
ELSE IF (CDIR(K) == RIGHT)
CALL GETADR(PRL,CRHEAD)
ELSE
CALL GETADR(PRL,CDHEAD)
CALL WTQIO(IOWVB,5,2,,,PRL)
BREAK
]
]
]
]
]
]
#
# CHECK IF CURRENT BULLET LOCATION COLLIDES WITH SPIDER
#
IF (SPIACT == 1 .AND. BULX == SPIX .AND. BULY == SPIY) [
BULACT = 0
SPIACT = 0
SPITIM = TIMER + 30 #SCHEDULE NEXT SPIDER
ITMP = GUNX - SPIX
IF (ITMP < 0)
ITMP = 0
CALL UVT100(CUP,BULX,BULY)
IF (ITMP < 2) [ #INCREMENT SCORE
SCORE = SCORE + 900
CALL GETADR(PRL,NINE)
]
ELSE IF (ITMP < 4) [
SCORE = SCORE + 600
CALL GETADR(PRL,SIX)
]
ELSE [
SCORE = SCORE + 300
CALL GETADR(PRL,THREE)
]
CALL WTQIO(IOWVB,5,2,,,PRL) #DISPLAY POINTS FOR KILL
CALL WAIT(200,1) #WAIT 200 MILLISECONDS
]
#
# CHECK IF CURRENT BULLET LOCATION COLLIDES WITH FLEA
#
IF (FLEACT == 1 .AND. FLEX == BULX .AND. FLEY == BULY) [
BULACT = 0
FLEACT = 0
ICOUNT = 0
DO I = GMAR,BMAR [ #NEXT SCHEDULED FLEA TIME DEPENDS
DO J = LMAR,RMAR [ #ON NUMBER OF MUSHROOMS IN PLAYER ZONE
IF (MSHBRD(I,J) > 0)
ICOUNT = ICOUNT + 1
]
]
IF (ICOUNT < 5) #SCHEDULE NEXT FLEA
FLETIM = FLETIM + 20
ELSE
FLETIM = FLETIM + 200
SCORE = SCORE + 200 #INCREMENT SCORE
]
#
# CHECK IF CURRENT BULLET LOCATION COLLIDES WITH SCORPION
#
IF (SCOACT == 1 .AND. SCOX == BULX .AND. SCOY == BULY) [
BULACT = 0
SCOACT = 0
SCOTIM = SCOTIM + 200 #SCHEDULE NEXT SCORPION
SCORE = SCORE + 1000 #INCREMENT SCORE
]
#
# IF BULLET HIT SOMETHING, DISPLAY APPROPRIATE CHARACTER
#
IF (BULACT == 0) [
CALL UVT100(CUP,BULX,BULY)
CALL GETADR(PRL,SPACE)
IF (MSHBRD(BULX,BULY) > 0)
CALL GETADR(PRL,MSHCHR)
IF (PSNBRD(BULX,BULY) == 1)
CALL GETADR(PRL,PSNCHR)
CALL WTQIO(IOWVB,5,2,,,PRL)
]
RETURN
END

Alex
12.03.2020, 15:39
В качестве примера, показывающего как к процессору не предназначенному для работы с диспетчером памяти - прикрутили сей диспетчер - "Союз-Неон" (ПК11/16).
Хотя получилось, на мой взгляд не очень хорошо :(
Не была соблюдена совместимость с классическим диспетчером памяти PDP-11 :(
Вот если бы соблюли, возможно, что софта под ПК11/16 было бы сильно более.

Хотя есть мысль, что 1801ВМ3 настолько дефицитны были, что дешевле оказалось взять 1806ВМ2 и сгородить невесть что...

Hunta
12.03.2020, 15:55
Хотя получилось, на мой взгляд не очень хорошо
Там тяжело сделать хорошо, потому что 4 бита сидят в PSW, а оно как бы унутри процессора, меняется не всегда командами и наружу вроде как не вылазиет... Хотя.. Надо будет попробовать - а что будет, если через ПДП попробовать прочесть PSW :)


Не была соблюдена совместимость с классическим диспетчером памяти PDP-11
Так что если и можно сделать навесной ДП, чувствую - как минимум попотеть придётся


Хотя есть мысль, что 1801ВМ3 настолько дефицитны были, что дешевле оказалось взять 1806ВМ2 и сгородить невесть что
По датам посмотреть - когда ваяли Союз-Неон и что в это время было с ВМ3. Свой Квант я брал примерно летом 93, а через какое то время в магазине Электроника начали выбрасывать разные микросхемы - я тогда пару ВМ3 там купил (и похоже, именно они у меня только 1280 на регистр-регистр кажут, а не 1600, как остальные, купленные уже в наши времена)

Alex
12.03.2020, 18:30
По поводу расширения адресного пространства в 64Кбайт у DEC был заход - это I/D режим на последних PDP-11. Удвоили...
Хотя детального описания I/D режима я не могу найти :(
Чисто общие слова... Про слово состояния процессора и про регистры в ДП... И увсё :(
Надо на оригиналы DEC почитать на досуге :)
Хотя ребята немного не последовательны... Надо было тогда уж ещё на стек выделить. Хотя не все программы работали бы, но была бы возможность утроения :)
А далее пошли VAX :) и всё стало неважно.... :(

Hunta
12.03.2020, 19:04
Хотя детального описания I/D режима я не могу найти
Насколько я помню, вроде было в описании J-11. Должно быть в описании 11/70
Но всё строится на том, что нужно аккуратно выделять .PSECT-ами секции с кодом (вроде как нужно ещё их помечать как RO, но не помню точно_) и секции с данными. Я пробовал на нашей Электронике-79.


Чисто общие слова...
Чисто обще - при определённых методах адресации в определённых командах выборки происходит через другой набор регистров PAR :)


Надо было тогда уж ещё на стек выделить.
Проблема в том, что по принципу стека можно организовать память на любом регистре, просто некоторые операции, которые используют стек - используют ТОЛЬКО R6 или SP :) Если делать стек только для него - как понять, что мы в, скажем, R0 заслали SP и работаем через R0 с содержимым стека? :)

SuperMax
13.03.2020, 07:22
подумалось
если бы я озадачится сделать расширение доступной оперативки то я бы поступил вот так:
к каждому регистру R0-R7
добавляем по байту верхнего адреса
и используем при всей работе с памятью

те адрес получается 24х битный, но программно доступна только нижняя 16bit часть
тк адресная добавка есть у всех регистров, то это дает достаточно широкие возможности в работе с оперативкой, пусть и с ограничением на 56/64К за один заход
те можно спокойно перегнать 56/64К данных с одного адрес на другой в одном цикле SOB

возникает вопрос - как вписать работу с этими адресными 8bit кусками
для этой цели прекрасно сгодится команда
MOV R0,#123
те мы будем использовать #123 для занесения в байт адресной добавки R0
аналогично и с другими регистрами

Hunta
13.03.2020, 08:13
подумалось
если бы я озадачится сделать расширение доступной оперативки то я бы поступил вот так:
к каждому регистру R0-R7
добавляем по байту верхнего адреса
и используем при всей работе с памятью
А оно по сути так и работает - только не 8 бит, а 6 и с несколько более сложным алгоритмом, позволяя адресовать память страницами по 100(8) байт


возникает вопрос - как вписать работу с этими адресными 8bit кусками
Регистры PAR

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


те можно спокойно перегнать 56/64К данных с одного адрес на другой в одном цикле SOB
До 60000(8) байт за один SOB

Hunta
13.03.2020, 10:17
Обычный текстовый редактор TECO и его макросы



!
DIRFIX.TEC

TECO macro to manipulate directory-listing files
generated by PIP or SRD

Eliminates all header, trailer lines associated with
a directory; and prefixes each filespec with the [g,m]
directory identifier

Purpose: makes file easily searchable with a utility
such as GREP so that full file location is displayed
when match is found

Technique: lines containing [ are assumed to be direct-
ory headers. Lines containing ; are assumed filespecs.
Some fancy stuff included so TECO can handle the fact
that the wierd format of PIP (and SRD??) outputs causes
buffer reads (:A op) to sometimes have a partial line
image at end of buffer.

Modification history:
13-Mar-82 Change to trim line down to filespec only
5-Nov-82 Change to elim [*,*] lines, insert leading
zeroes to force g,m to fixed-length
8-Nov-82 Change so can handle PIP /FU listings

To use: MUNG DIRFIX,filespec
Will create a new version for output via the EB command.
!

JX1 EBQ1

^U1[]
HK
<:100A;-1U2
< Q2"E 0L **DEL**> TK .-Z; |
FBL; -L'
0U2 :FB[*,*
"F :fb;"f :fb[
"t ^u1[ \ 3+^s<:^u10> :^yx1 :^u1, fb
\ 3+^s<:^u10> :^yx1 :^u1] '
| -1U2 0L G1 FB;\ KI
 -T'
'
>
0,.PW 0,.K
>
EF 
***> DONE ***>

EX

Hunta
12.05.2020, 19:44
BLUEFISH представляет новый хайэнд архитектуры PDP-11, предлагая производительность, превышающую производительность PDP-11/74 (цель - в полтора раза от базовой производительности процессора PDP-11/74).

...

Как результат выполнения, инструкция MFPT возвращает в младший байт R0 код модели процессора (восьмеричное 3 для PDP-11/68), в старший байт R0 будет загружен субкод модели процессора (восьмеричное 0 для PDP-11/68).

...

Слово статуса процессора (17 777 776), бит 8 - приостанов выполнения инструкций CIS - указывает, что выполнение инструкции CIS было прервано до её завершения.

Hunta
13.06.2020, 19:45
Из интересного.

Для тестирования FPP на PDP-11/34 (возможно, на каких то ещё) для второго теста (FFPB) оказывается есть специальная плата, проверяющая некоторые внутренние дела.

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

То есть на этой модели (и каких то ещё, надо по докам смотреть) команды FPP - прерываемые в "середине" выполнения.

А на каких то ещё - EIS и FIS.

Не зря всё таки DEC позиционировала PDP-11 как системы real time с гарантированным временем отклика :)

hobot
13.06.2020, 21:14
позиционировала PDP-11 как системы real time
мультиколорщикам читать эту фразу полчаса )))

Hunta
13.06.2020, 21:47
мультиколорщикам читать эту фразу полчаса
Не поможет. Потому что она позиционировалась, но без квалифицированного программиста, досконально знающего железа и рекомендации вендора - real time не гарантировала :)

Hunta
12.11.2020, 16:03
Из истории RSTS/E

1994

...

New DECtape 4, based on optical paper tape reader that senses round holes punched in the tape, now able to back up an entire 2 inch RA95 disk (1792 megabytes) in less than 20 miles.

1994

....

Новый считыватель DECtape 4, основанный на оптической бумажной ленте и распознающий круглые отверстия, пробитые в ленте, теперь способен создать резервную копию всего 2-дюймового диска RA95 (1792 мегабайта) длиной менее, чем 20 миль.


1995

...

New PDP-11 processor, capable of running in compatibility mode, includes a subset of VAX machine code instructions within the user programmable microcode.

1995

...

Первые прототипы видеотелефонов на базе PDP-11 (с использованием новых чипов K-11) теперь доступны по цене менее 100 долларов. Это устройство также включает в себя схемы речевой и факсимильной связи.


2005

FINS-11, special military version of the PDP-11 developed for US Navy. It features both TUNABUS and OCTOBUS for high speed transfers, DECwet/E for communication via micro-fiche and, of course, a CORAL compiler. The whole system is mounted on special ten legged DECapod chassis.

2005

FINS-11, специальная военная версия PDP-11, разработана для ВМС США. В нем есть TUNABUS и OCTOBUS для высокоскоростной передачи данных, DECwet/E для связи через микрофиши и, конечно же, компилятор CORAL. Вся система смонтирована на специальном десятиногом шасси DECapod.

2027

First computer 100% designed and built by a PDP-11 artificial intelligence system resembles an early 11/45, complete with a FASTER-BUS and a CHEAPERNET.

2027

Первый компьютер, на 100% спроектированный и построенный системой искусственного интеллекта PDP-11, напоминает ранний компьютер 11/45, в комплекте с БыстроБАС-ом и ХалявоНЕТ-ом.

2031

Robinsons Ripples allow the polarising of radio frequencies to be both multiplexed and magnetised in smaller waves (Ripples) which transmits data at 8 times the speed of light.

Vapournet becomes trade mark of Digital Press Office.

2031

Рябь Робинсона позволяет мультиплексировать поляризацию радиочастот и намагничивать их в меньших волнах (Рябь), которые передают данные со скоростью в 8 раз быстрее скорости света.

ПароНЕТ становится торговой маркой Digital Press Office.


2048

New PDP-11/900 series announced with 32 bit memory management unit. Range now comprises of:

PDP-11/924 Unibus Entry model-being discontinued
PDP-11/944 Unibus Mid range
PDP-11/928 Top of the range
PDP-11/911 Fastest PDP-11 ever built

2048

Анонсирована новая серия PDP-11/900 с 32-битным блоком управления памятью. В настоящее время ассортимент включает:

PDP-11/924 Unibus модель начального уровня, снята с производства
PDP-11/944 Unibus модель среднего уровня
PDP-11/928 Модель максимального уровня
PDP-11/911 Самый Быстрый Когда Либо Созданный PDP-11


LONG LIVE THE PDP-11!

shattered
12.11.2020, 23:38
давайте больше ржаки из глубин веков!





[Historical note: This joke has been floating around the Internet
since at least 1986, which is roughly when I first came across it and
archived it. (It refers to VMS version 3, which came out in 1982, so
that's probably about the right timing.) It refers to Software Product
Reports (SPRs) for VMS, an operating system that only barely exists
any more, written by DEC, a computer company that was later bought by
Compaq, which was later bought by HP who are doubtless due to be bought
by somebody else, because that's how things go.

However, I lately came across someone who had seen the figure without
reading the text, and thought I was just flipping people off for fun.
As it happens, I DO just flip people off for fun, but this isn't a case
of that. This is a historical archive.]


Suggested New SPR Wording, or We're VMS and You're Not.

VMS Version 3:

Please stop submitting SPR's. This is our system. We designed
it, we built it, and we use it more than you do. If there are some
features you think might be missing, if the system isn't as effective
as you think it could be, TOUGH! Give it back, we don't need you.
See figure 1.

---------------------------
! - !
! { } !
! | | !
! | | !
! .-.! !.-. !
! .-! ! ! !.-. !
! ! ! ! ; !
! \ ; !
! \ ; !
! ! : !
! ! | !
! | | !
! !
---------------------------
Figure 1.

Forget about your silly problem, let's take a look at some of the
features of the VMS operating system.

1. Options. We've got lots of them. So many in fact, that you
need two strong people to carry the documentation around. So many
that it will be a cold day in hell before half of them are used.
So many that you are probably not going to do your work right
anyway. However, the number of options isn't all that important,
because we picked some interesting values for the options and called
them...

2. Defaults. We put a lot of thought into our defaults. We like
them. If we didn't, we would have made something else be the
default. So keep your cotton-picking hands off our defaults.
Don't touch. Consider them mandatory. "Mandatory defaults" has
a nice ring to it. Change them and your system crashes, tough.
See figure 1.

3. Language processors. They work just fine. They take in source,
and often produce object files as a reward for your efforts. You
don't like the code? Too bad! You can even try to call operating
system services from them. For any that you can't, use the assembler
like we do. We spoke to the language processor developers about
this, they think a lot like we do, they said "See figure 1".

4. Debuggers. We've got debuggers, one we support and one we use.
You shouldn't make mistakes anyway, it is a waste of time. We
don't want to hear anything about debuggers, we're not interested.
See figure 1.

5. Error logging. Ignore it. Why give yourself an ulcer? You
don't want to give us the machine to get the problem fixed and we
probably can't do it anyway. Oh, and if something breaks between
17:00 and 18:00 or 9:30 and 10:30 or 11:30 and 13:30 or 14:30 and
15:30 don't waste your time calling us, we're out. See figure 1.

6. Command language. We designed it ourselves, it's perfect. We
like it so much we put our name on it, DCL-- Digital's Command
Language. In fact we're so happy with it, we designed it once for
each of our operating systems. We even try to keep it the same
from release to release, sometimes we blow it though. See figure
1.

7. Real time performance. We got it. Who else could have done
such a good job? So the system seems sluggish with all those
priority 18 processes, no problem, just make them priority 1.
Anyway, real time isn't important anymore like it used to be. We
changed our group's name to get rid of the name realtime, we told
all our realtime users to see figure 1 a long time ago.

In conclusion, stuff your SPR. Love VMS or leave it, but don't
complain.

hobot
13.11.2020, 00:37
давайте больше ржаки из глубин веков!

вдумчиво читал пост Хунты - пока не дошёл до строки



2027

Первый компьютер, на 100% спроектированный и построенный системой искусственного интеллекта PDP-11, напоминает ранний компьютер 11/45, в комплекте с БыстроБАС-ом и ХалявоНЕТ-ом.



Ага. Вспомнились Булгаковские воробушки )))

Hunta
13.11.2020, 11:19
давайте больше ржаки из глубин веков!

[Историческая справка: эта шутка ходила по Интернету по крайней мере с 1986 года, то есть примерно тогда, когда я впервые наткнулся на неё и заархивировал. (Она о VMS версии 3, которая вышла в 1982 году, так что, вероятно, время - правильное). В ней говорится об отчётах о программных продуктах (SPR) для VMS, операционной системы, которой теперь почти нет, созданной в DEC - компьютерной компании, которая позднее была куплена Compaq, которая затем была куплена HP, которая, несомненно, будет куплена кем-то ещё, потому что так устроен этот мир.

Однако недавно я столкнулся кое с кем, кто увидел картинку, не читая текста, и он подумал, что я просто отвлекаю людей ради шутки. Бывает, что я действительно отвлекаю людей ради шутки, но это не тот случай. Это исторический архив.]

Предлагаемая новая формулировка SPR, или - Мы - VMS, а вы нет.

VMS, Версия 3:

Пожалуйста, прекратите посылать запросы о SPR отчётах. Это наша система. Мы её спроектировали, реализовали и используем больше, чем вы. Если в ней, как Вы думаете, отсутствую некоторые компоненты, если система не так эффективна, как вы думаете, - круто! Верните её, Вы нам не нужны.

См. Рисунок 1.



-
{ }
| |
| |
.-.! !.-.
.-! ! ! !.-.
! ! ! ;
\ ;
\ ;
! :
! |
| |

Рисунок 1.


Забудьте о своей глупой проблеме, давайте взглянем на некоторые возможности операционной системы VMS.

1. Параметры. Их у нас много. На самом деле, их так много, что вам нужны два силача, что бы переносить документацию. Их так много, что в аду будет холодно до тех пор, пока хотя бы половина из них не будет использована. Так много, что, скорее всего, Вы не сможете сделать свою работу правильно. Однако, количество параметров - это не всё, что важно, потому что мы выбрали некоторые интересные значения для параметров и назвали их ...

2. Значения по умолчанию. Мы много думали над значениями по умолчанию. Они нам нравятся. Если бы они нам не нравились, мы бы сделали какие то другие значения значениями по умолчанию. Так что держите подальше свои бестолковые руки от наших значений по умолчанию. Не прикасайтесь к ним. Считайте их обязательными. "Обязательные значения по умолчанию" - хорошо звучит! Измените их, и ваша система рухнет. Круто! См. Рисунок 1.

3. Языковые процессоры. Они работают просто отлично. Они берут исходный текст и часто создают объектные файлы как награду за ваши труды. Вам не нравится их язык? Очень плохо! Можете попробовать вызвать из него службы операционной системы. Не можете? Используйте ассемблер! Как это делаем мы. Мы поговорили об этом с разработчиками языковых процессоров, они думают так же, как мы - они сказали: «См. Рисунок 1».

4. Отладчики. Да, у нас есть отладчики, один из которых мы поддерживаем, а другой используем. В любом случае - не делайте ошибки - это потеря вашего времени. И мы больше не хотим ничего слышать об отладчиках - нам это не интересно. См. Рисунок 1.

5. Регистрация ошибок. Игнорируй их - вы же не хотите заполучить язву? Вы не хотите отдать нам компьютер, чтобы мы исправили ошибку, а мы, вероятно, все равно не сможем этого сделать. О, и если что-то сломается между 17:00 и 18:00, или 9:30, и 10:30, или 11:30, и 13:30, или 14:30, и 15:30 - не тратьте ваше время, звоня нам - нас нет на месте. См. Рисунок 1.

6. Командный язык. Мы сами разработали его и он идеален. Нам он так нравится, что мы даже дали ему своё имя - DCL - язык команд Digital. Он так нам нравится, что мы разработали его для каждой из наших операционных систем. Мы даже стараемся сохранять его неизменным от релиза к релизу, хотя иногда мы круто лажаем с ним. См. Рисунок 1.

7. Производительность реального времени. Мы сделали это. Кто ещё мог сделать такую хорошую работу? И если система кажется Вам долго реагирующей для процессов с приоритетом 18, без проблем, просто повысьте им приоритет до значения 1. В любом случае, реальное время больше не так важно, как раньше. Мы изменили название нашей группы, чтобы избавиться в её названии от слов - реального времени, а всем нашим пользователям реального времени мы давным-давно сказали - см. рисунок 1.

В заключение. Сами наймите себе сотрудников для отчётов SPR. Любите VMS или покиньте её, но не жалуйтесь.

Hunta
26.02.2021, 20:57
Рассматривал тут по одной причине (не при детях будет сказано) файл TDSCH.MAC из RSX. И наткнулся на интересный... и кусок кода и коммент :)


;+
; **-$CKINT-CLOCK INTERRUPT
;
.....
MOV $TKPS,R5 ;;; Get the ticks/second
MUL #10.,R5 ;;; multiply * 10
CMP (R4),R5 ;;; are we in range?
BLO 7$ ;;; if LO, yes, finish the interrupt
;+
; If we cannot process a clock interrupt within 10 seconds, we are
; no longer processing in real time, and we may as well become
; a VAX ... Call an end to this ... NOW!
;-
BGCK$A BF.SAN,BE.IDC,<FATAL> ;;; System massively confused

7$: ;;;REFERENCE LABEL


"Если мы не можем обработать прерывание от часов за 10 секунд, мы больше не работаем в режиме реального времени, и мы можем, также, стать VAX-ой... Положим этому конец ... ПРЯМО СЕЙЧАС!"

После чего система устраивает себе харакири (макрос BGCK$A - BuG ChecK) :) Суровые были раньше люди :) И Операционки у них были суровые :)

Найдено пока только в RSX-11M-Plus 4.6, вполне возможно, есть и в более ранних версиях :)

Hunta
23.03.2021, 20:46
"Frankenstein" PDP-11 (https://www.youtube.com/watch?v=hoW7Szkppww)

Hunta
08.04.2021, 15:56
Напрямую к PDP-11 не относится, зато относится к нашей любимой восьмеричной системе :)

Итак.

Количество дней в обычном году - 365
В двоичной системе - 101 101 101
В восьмеричной - 555

Красота :)

В шестнадцатеричной системе - 16D

Никакой красоты. Блюэ, одним словом.

TheGWBV
08.04.2021, 19:41
Ага, главное к этому числу не применять оператор ASR =)

S_V_B
22.04.2021, 14:37
Случайно наткнулся:
https://habr.com/ru/post/540614/
https://pic.maxiol.com/thumbs2/1619091448.1388899422.vyvuyfxsbhkxzze5se.jpg (https://pic.maxiol.com/?v=1619091448.1388899422.vyvuyfxsbhkxzze5se.jpg&dp=2)

Hunta
25.04.2021, 19:43
Kremvax — изначально выдуманный узел Usenet, якобы находящийся в Кремле.
http://kremvax.hq.demos.su/
В 1990 году компания «Демос» для поддержания шутки одному из компьютеров, списанному из Курчатовского института и переданному в Демос, MicroVAX II, было присвоено доменное имя kremvax.hq.demos.su

falanger
26.04.2021, 19:28
Есть какие-то особые требования к сигналу таймера для PDP-11 QBUS? У мен нет бесхозной 1801ВП1-055/065, или БПС6-1, так что надо колхозить на рассыпухе. На NE555 если слепить таймер на 50 Гц - подойдет?

Hunta
26.04.2021, 19:42
Я именно потому и взял -065, что бы не думать на эту тему

dk_spb
26.04.2021, 23:34
А нет ли у кого-нибудь под рукой перлового, win32 или dos "конвертера" из .LDA в .BIN ?

nzeemin
27.04.2021, 01:50
А нет ли у кого-нибудь под рукой перлового, win32 или dos "конвертера" из .LDA в .BIN ?

Какой .BIN имеется в виду?
Я делал конвертер из RT-11 .SAV в БК-0010 .BIN - https://github.com/nzeemin/ukncbtl-utils/blob/master/Sav2BkBin/sav2bkbin.cpp

dk_spb
27.04.2021, 08:29
Какой .BIN имеется в виду?
Я делал конвертер из RT-11 .SAV в БК-0010 .BIN - https://github.com/nzeemin/ukncbtl-utils/blob/master/Sav2BkBin/sav2bkbin.cpp

Нужен именно конвертер из LDA (многоблочного, просто откусить заголовок и хвост не получается) в .bin. Адреса загрузки не важны особо.
Просто выкусить из .lda всю служебку, оставить только собственно данные.

Hunta
27.04.2021, 08:38
Просто выкусить из .lda всю служебку, оставить только собственно данные.
LDA - это загрузка набора байт по указанным адреса.
Скажем, первый блок загружает 10 байт с адреса 1000, второй - 20 байт с адреса 150000.

Что и в каком месте должно быть в выходном файле? Предполагается, что он начинается с адреса 0 и занимается адреса до 150017? Или первый байт BIN файла - это адрес 1000?

Загрузчик LDA ничего не пишет в ячейки памяти, для которых ничего нет в самом файле (то есть на реальной машине в них будет что угодно). А конвертер? Пишет 0?

dk_spb
27.04.2021, 11:24
Hunta, Просто есть содержание ПЗУ (две РФ2), но только не .rom и не .bin, а в формате LDA блоками по 20-40 байт.
Уже наваял конвертер. Понял что тот кто делал .LDA делал их криво, с потерей байт. Как они так умудрились - не знаю. Ну например, 10 блоков нормально, а в 11 потерян первый байт.
То есть в оригинальной ПЗУ в этом месте есть 0xC5, а в LDA вообще этого байта нет.
Что с КС - не знаю, не проверял.
Вот, например, (сорри за HEX):
Addr: E3AA : header 01 00 19 00 AA E3 --- data 0D 0A 53 50 3D 00 0D 0A 50 43 3D 00 0D 0A 52 53 3D 00 00 82
Addr: E3BE : header 01 00 2C 00 BE E3 --- data 57 21 07 00 D1 82 DF 09 D6 E5 DF 15 80 00 F6 FF 07 0A DF 15 00 E0 E4 FF C6 15 00 02 00 0A E0 15 F4 5C E0 15 22 E8 61
Видно что в исходном файле нет C5 в начале второго блока. А в оригинальной ПЗУ он есть. По адресу загруки тоже никаких пропусков вроде нет. И размер выходного файла меньше чем 4096.
!upd - как раз пропуск по адресу в данном месте есть. Но он один на весь файл и на один байт. А разница в итоге 13 байт.

Вот исходный LDA: 75307 - на выходе 4096 байт у меня никак не получается

Hunta
27.04.2021, 11:53
Ндя... Занимательный файл.. DisAsm на КС не матерится, но загрузил с НЕЧЁТНОГО (!) адреса... Надо посмотреть под микроскопом (но это уже вечером)

dk_spb
27.04.2021, 12:00
А вот на этом примере с того же источника мой конвертер отработал нормально75310

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


Ндя... Занимательный файл.. DisAsm на КС не матерится, но загрузил с НЕЧЁТНОГО (!) адреса... Надо посмотреть под микроскопом (но это уже вечером)
Это как с нечётного. Там же в первом заголовке строго 0xE000 (160000) ?

Hunta
27.04.2021, 12:28
А не знаю :) Надо глянуть под отладчиком (тот самый микроскоп, я в нём и структуру увижу), но я на работе, а он дома. Поэтому - вечером :)


Там же в первом заголовке строго 0xE000 (160000)
Могу предположить, что где то встретилась загрузка байт по 157777, но это только предположение. Я вообще удивился, что были показаны НЕЧЁТНЫЕ адреса, вроде как делал прогу так, что бы адреса в показе были всегда чётные (ибо PDP-11 не исполняет прогу по нечётным адресам :D ) (ну, метки понятно и по нечётным могут ставится), а тут тако...

Hunta
27.04.2021, 23:22
Это была ошибка в DisAsm-е :) Как то я не подумал, что а) .LDA может начать грузиться не с нулевого адреса и б) при этом у файле может и не быть стартового адреса - точнее, он может быть равен 1 :) На такой комбинации DisAsm немного прихреневал :) Поправил ошибку, спасибо :)

По поводу самого .LDA - ничего криминального в нём не нашёл. Лог описания блоков из него


Адрес 160000 Счётчик байт 46/54
Адрес 160046 Счётчик байт 32/40
Адрес 160100 Счётчик байт 46/54
Адрес 160146 Счётчик байт 46/54
Адрес 160214 Счётчик байт 46/54
Адрес 160262 Счётчик байт 46/54
Адрес 160330 Счётчик байт 46/54
Адрес 160376 Счётчик байт 46/54
Адрес 160444 Счётчик байт 46/54
Адрес 160512 Счётчик байт 46/54
Адрес 160560 Счётчик байт 46/54
Адрес 160626 Счётчик байт 46/54
Адрес 160674 Счётчик байт 46/54
Адрес 160742 Счётчик байт 46/54
Адрес 161010 Счётчик байт 46/54
Адрес 161056 Счётчик байт 46/54
Адрес 161124 Счётчик байт 46/54
Адрес 161172 Счётчик байт 46/54
Адрес 161240 Счётчик байт 46/54
Адрес 161306 Счётчик байт 46/54
Адрес 161354 Счётчик байт 46/54
Адрес 161422 Счётчик байт 46/54
Адрес 161470 Счётчик байт 46/54
Адрес 161536 Счётчик байт 46/54
Адрес 161604 Счётчик байт 46/54
Адрес 161652 Счётчик байт 23/31
Адрес 161676 Счётчик байт 46/54
Адрес 161744 Счётчик байт 46/54
Адрес 162012 Счётчик байт 46/54
Адрес 162060 Счётчик байт 46/54
Адрес 162126 Счётчик байт 46/54
Адрес 162174 Счётчик байт 46/54
Адрес 162242 Счётчик байт 46/54
Адрес 162310 Счётчик байт 46/54
Адрес 162356 Счётчик байт 46/54
Адрес 162424 Счётчик байт 46/54
Адрес 162472 Счётчик байт 46/54
Адрес 162540 Счётчик байт 46/54
Адрес 162606 Счётчик байт 46/54
Адрес 162654 Счётчик байт 46/54
Адрес 162722 Счётчик байт 4/12
Адрес 162726 Счётчик байт 46/54
Адрес 162774 Счётчик байт 46/54
Адрес 163042 Счётчик байт 46/54
Адрес 163110 Счётчик байт 46/54
Адрес 163156 Счётчик байт 46/54
Адрес 163224 Счётчик байт 46/54
Адрес 163272 Счётчик байт 46/54
Адрес 163340 Счётчик байт 46/54
Адрес 163406 Счётчик байт 46/54
Адрес 163454 Счётчик байт 12/20
Адрес 163466 Счётчик байт 46/54
Адрес 163534 Счётчик байт 46/54
Адрес 163602 Счётчик байт 46/54
Адрес 163650 Счётчик байт 46/54
Адрес 163716 Счётчик байт 46/54
Адрес 163764 Счётчик байт 46/54
Адрес 164032 Счётчик байт 46/54
Адрес 164100 Счётчик байт 46/54
Адрес 164146 Счётчик байт 46/54
Адрес 164214 Счётчик байт 46/54
Адрес 164262 Счётчик байт 46/54
Адрес 164330 Счётчик байт 46/54
Адрес 164376 Счётчик байт 46/54
Адрес 164444 Счётчик байт 46/54
Адрес 164512 Счётчик байт 46/54
Адрес 164560 Счётчик байт 46/54
Адрес 164626 Счётчик байт 46/54
Адрес 164674 Счётчик байт 46/54
Адрес 164742 Счётчик байт 46/54
Адрес 165010 Счётчик байт 46/54
Адрес 165056 Счётчик байт 46/54
Адрес 165124 Счётчик байт 46/54
Адрес 165172 Счётчик байт 46/54
Адрес 165240 Счётчик байт 46/54
Адрес 165306 Счётчик байт 32/40
Адрес 165340 Счётчик байт 46/54
Адрес 165406 Счётчик байт 46/54
Адрес 165454 Счётчик байт 46/54
Адрес 165522 Счётчик байт 46/54
Адрес 165570 Счётчик байт 46/54
Адрес 165636 Счётчик байт 46/54
Адрес 165704 Счётчик байт 46/54
Адрес 165752 Счётчик байт 46/54
Адрес 166020 Счётчик байт 44/52
Адрес 166064 Счётчик байт 46/54
Адрес 166132 Счётчик байт 46/54
Адрес 166200 Счётчик байт 46/54
Адрес 166246 Счётчик байт 46/54
Адрес 166314 Счётчик байт 46/54
Адрес 166362 Счётчик байт 46/54
Адрес 166430 Счётчик байт 46/54
Адрес 166476 Счётчик байт 46/54
Адрес 166544 Счётчик байт 46/54
Адрес 166612 Счётчик байт 46/54
Адрес 166660 Счётчик байт 46/54
Адрес 166726 Счётчик байт 46/54
Адрес 166774 Счётчик байт 46/54
Адрес 167042 Счётчик байт 46/54
Адрес 167110 Счётчик байт 46/54
Адрес 167156 Счётчик байт 46/54
Адрес 167224 Счётчик байт 46/54
Адрес 167272 Счётчик байт 46/54
Адрес 167340 Счётчик байт 46/54
Адрес 167406 Счётчик байт 46/54
Адрес 167454 Счётчик байт 46/54
Адрес 167522 Счётчик байт 46/54
Адрес 167570 Счётчик байт 46/54
Адрес 167636 Счётчик байт 46/54
Адрес 167704 Счётчик байт 46/54
Адрес 167752 Счётчик байт 12/20
Адрес 1 Счётчик байт 0/6

Единственный занятный блок - Адрес 161652 Счётчик байт 23/31 - но и в нём ничего криминального - формат .LDA допускает блоки, которые грузятся с нечётного адреса и с нечётно длиной.

А вот если заглянуть внутрь, то тут есть некоторая нестыковка:



. = 160000

.BYTE 170, 377
.WORD 160210
.WORD 341
.WORD 161726
.WORD 340
.WORD 161142
.WORD 340
.WORD 137
.WORD 163466
.WORD 137
.WORD 163504
.WORD 137
.WORD 163722

Первые два байта - 170, 377 (или слово 177570) - они как бы.. или лишние или что то обозначают. Потому как дальше идёт то, что выглядит очень похоже на вектора 0, 4, 10 а потом JMP... ПЗУ случаем не 1801РР1?

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

Аха, про блок - Адрес 161652 Счётчик байт 23/31 и потерянный байт как раз и шёл разговор...


.WORD 5015
.WORD 51522
.WORD 75
.BYTE 0
.BLKB ; пропущенный байт
.WORD 20527
.WORD 7
.WORD 101321
.WORD 4737
.WORD 162726


Судя по всему, ПЗУ от чего то PDP-подобного и в этом месте заканчивается строка и дальше идёт код. Пропущенный байт - он как раз перед кодом - перед командой 20527 (CMP R5, #7). И будет точнее сказать, что пропущен он в конце блока, который начинается с адреса 161652, а не из начала следующего. Что это за байт (305 в octal) и влияет ли он на что - надо ПЗУ дизассемблить :)

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

Нуууу.... Да, PDP подобное :)


N61574:
MOV (R4)+, R3
CALL @#N62236

SOB R2, N61574
BR N61444
.ASCIZ <CR><LF>|R0=|

.ASCIZ <CR><LF>|R1=|

.ASCIZ <CR><LF>|R2=|

.ASCIZ <CR><LF>|R3=|

.ASCIZ <CR><LF>|R4=|

.ASCIZ <CR><LF>|R5=|

.ASCIZ <CR><LF>|SP=|

.ASCIZ <CR><LF>|PC=|

.ASCIZ <CR><LF>|RS=|

.BYTE 0
.BLKB
N61676:
CMP R5, #7

BHI N61546
CALL @#N62726

MOV #200, @#CPUERR

CLR PC




L62624:
.WORD 3003
.ASCII <5>|МРТИ|<HT><HT><HT><HT>|КВ|<5>| НЕМИГА|<5>| 4.06|<6><HT>|РМП РМУ |

B62671:
.ASCIZ <FF>|ждите...|

.ASCIZ |?|<6><CR><LF>|Пульт>|

.ASCIZ <LF><CR>
.BYTE 72
.WORD 40
.WORD 40
N62726:
CALL @#N63466

dk_spb
28.04.2021, 00:09
Это пультовое пзу от Немиги.

Пропущенный байт - он как раз перед кодом
Вот и вопрос как этот байт пропал.
Это я неправильно сконвертировал lda2bin или кто-то до меня .lda неправильно создал?
Вроде я вообще этого байта в .lda не нахожу.....
Или этот байт вообще несущественный? и можно вписать любой? Я так понимаю что Вы на это "намекаете", но уже ночь и я торможу :-(

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

Кстати, про disasm: такое не хотите?
RT-11 PRESSURE GROUP (RT-PRESS), MOSCOW, 1987
R T - 1 1 D I S A S S E M B L E R V 5 . 0 1
с исходниками

Hunta
28.04.2021, 07:22
Про Немигу уже понял :)

Сценарий (пропажи и появления байта)

1. Был исходник на MACRО, где было примерно так


.ASCIZ <CR><LF>|RS=|
.BYTE 0
.EVEN

2. Из него сделал .LDA. В этот момент байта в нём не было (.EVEN - скорректировать счётчик на чётный, MACRO в байт коррекции ничего не помещает)
3. Была прога, которая конвертирует .LDA в некий вариант .BIN. И была в ней... нуууу... неточность. Она выделяла некий буфер для размещения информации из .LDA, но НЕ инициализировала его. Соответственно, на месте этого байта коррекции могло быть что угодно. В некий очередной раз оказался C5(16) 305(8). Который и попал в ПЗУ

Сценарий выглядит достаточно логичным, что бы быть похожим на правду :) Но оставляет открытым два вопроса
1) Действительно ли этот байт несущественный - можно сказать только после анализа дизассемблированного ПЗУ
2) Что это за два байта - 170, 377 (или слово 177570) - и вот это пока для меня большая загадка.

По пункту 2. Я попробовал вырезать эти два байта (со смещением первого блока из LDA на одно слово вниз по адресам) и результат вроде как получился нормальный (после прикидочного дизассемблирования), но появляется пустышка по адресу 160044(8) - второй блок то идёт с 160046.

Вот примерно как то так.

Конечно хочу :)

Hunta
23.10.2021, 13:34
Где только не встретишь PDP-11 :)

https://www.ebay.com/itm/274989231721

Hunta
26.11.2021, 21:50
Ещё занимательное от DEC :) - https://www.youtube.com/watch?v=kuNsK_IWC2I

S_V_B
30.11.2021, 21:03
Про Немигу уже понял :)

Сценарий (пропажи и появления байта)

1. Был исходник на MACRО, где было примерно так


.ASCIZ <CR><LF>|RS=|
.BYTE 0
.EVEN

2. Из него сделал .LDA. В этот момент байта в нём не было (.EVEN - скорректировать счётчик на чётный, MACRO в байт коррекции ничего не помещает)
3. Была прога, которая конвертирует .LDA в некий вариант .BIN. И была в ней... нуууу... неточность. Она выделяла некий буфер для размещения информации из .LDA, но НЕ инициализировала его. Соответственно, на месте этого байта коррекции могло быть что угодно. В некий очередной раз оказался C5(16) 305(8). Который и попал в ПЗУ

Сценарий выглядит достаточно логичным, что бы быть похожим на правду :) Но оставляет открытым два вопроса
1) Действительно ли этот байт несущественный - можно сказать только после анализа дизассемблированного ПЗУ
2) Что это за два байта - 170, 377 (или слово 177570) - и вот это пока для меня большая загадка.

По пункту 2. Я попробовал вырезать эти два байта (со смещением первого блока из LDA на одно слово вниз по адресам) и результат вроде как получился нормальный (после прикидочного дизассемблирования), но появляется пустышка по адресу 160044(8) - второй блок то идёт с 160046.

Вот примерно как то так.

Конечно хочу :)
Я знаю... Что Хунта ты меня сильно любишь.... но блять...работает же.

Hunta
30.11.2021, 21:21
К сожалению, больше он не с нами... https://www.youtube.com/watch?v=Y-DpcvY4aBk

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


Я знаю... Что Хунта ты меня сильно любишь.... но блять...работает же.
Ничего не понял

Hunta
29.12.2021, 23:03
System Overview

https://www.youtube.com/watch?v=0kz0i3ANHZY

Hunta
11.01.2022, 21:09
Из занимательного. Несмотря на то, что Unibus, как правило, была 18-ти битной, тем не менее, был вариант и 22-ух битной Unibus - Extended Unibus или EUB. Поддержка этого варианта была вроде только в двух машинах - PDP-11/24 и PDP-11/44. И вроде как из EUB устройств выпускалась только память.

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

И ещё из занимательного. В PDP-11/44 название модели процессора - KD11-Z. Буква Z как бы подсказывала, что это был последний нативный UNIBUS процессор PDP-11 и последний, сделанный на дискретных микросхемах, и не микропроцессор.

ra3qdp
12.01.2022, 10:28
KD11-Z
что-то не могу найти описание и схему этого процессора. Подскажите, пожалуйста.

Hunta
12.01.2022, 10:35
этого процессора
PDP-11/44

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

И в гугле всё ищётся

ra3qdp
12.01.2022, 12:37
нашел кое-что.
Я, собственно, почему интересовался этим процессором : считается, что Электроника-79 это копия PDP-11/70, а я видел ее схемы и помню, что там применяется 531ИК02(74S381) [да и делали эту микросхему в Воронеже, а не во Фрязино, как остальную 531-ю].
А в 11/44 оказывается - применяется 74S381 !
Возможно, что 79-я машина это не 70-я, а нечто несколько другое.

Hunta
12.01.2022, 13:00
считается, что Электроника-79 это копия PDP-11/70
Это не считается, это так и есть. RSX-11M-Plus точно определяет как 11/44, так и 11/70, я ставил её на Электронику-79 - определялась как PDP-11/70

ra3qdp
12.01.2022, 13:49
RSX-11M-Plus точно определяет как 11/44, так и 11/70
он в схемы "смотрит" ?
По каким критериям определяет ?

Hunta
12.01.2022, 14:02
А причём здесь схемы. Есть определённое поведение и наличие определённых регистров у процессоров.
Например, у PDP-11/70 есть регистр System Id, которого больше, насколько мне известно, ни у одной модели нет.

ra3qdp
12.01.2022, 15:47
не знаю - нашли Вы в Google или еще нет:
http://www.bitsavers.org/pdf/quickwareEngineering/QED-95_Ver_4.3_1995.pdf
может будет интересно...

Hunta
12.01.2022, 16:00
Да, я знаю про эту игрушку

ra3qdp
12.01.2022, 16:01
я не про неё конкретно, а про то - как один процессор представить (для RSX) другим. В этой pdf-ке, например, упоминается.

Hunta
12.01.2022, 16:24
Да да да, в тем времени как раз этим в Союзе все и страдали - копировать, но при это добавлять до хрена от себя. Скопировать PDP-11/44, при этим добавить (нахуа??) System Id регистр (которого больше ни у кого нет), использовать все три бита доступа (нахуа??) в PDR (а это есть только на двух моделях процессоров PDP-11) - это из того, что я помню точно, плюс - show configure в RT-11 показывала, что это PDP-11/70, а это значит (как выяснилось для меня недавно), что реализован (нахуа??) как минимум младший регистр размера памяти (которые тоже есть только на PDP-11/70)

Не много ли вопросов - нахуа?

Я уже молчу, что по внешнему виду Электроника-79 крайне сильно напоминает PDP-11/70, а не PDP-11/44. Жаль вот только не скажу (тогда как то этим не интересовался) - микропрограммная или нет реализация у Электроники-79

ra3qdp
12.01.2022, 16:30
я не про не конкретно, а про то - как один процессор представить (для RSX) другим.

добавить (нахуа??) System Id регистр
этот регистр - что бы софт от 70й не переделывать (для Кулона, например), а остальное - как оно именно у 79й в отличие от 44й - Вы точно помите ?

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


микропрограммная или нет реализация у Электроники-79

Вы хоть одну, кроме 20й знаете НЕ микропрограммную ?

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


по внешнему виду
смешно

Hunta
12.01.2022, 16:33
а остальное - как оно именно у 79й в отличие от 44й - Вы точно помите
Специально написал, что точно помню, что нет


Вы хоть одну, кроме 20й знаете НЕ микропрограммную ?
Дохрена не микропрограммных


смешно
Да, то, что Э-79 - не PDP-11/70 - оборжаться.

На этом эту хрень здесь больше не нести. Создавайте свою тему - и обпишитесь. Данная тема - про PDP-11, а не её клоны и копии. Следуещее сообщение здесь НЕ ПО ТЕМЕ - будет звонок модераторам

ra3qdp
12.01.2022, 16:39
Дохрена не микропрограммных
очень интересно про НЕ микропрограммные PDP-11. Какие именно ?

Hunta
12.01.2022, 16:42
google в руки

ra3qdp
12.01.2022, 16:46
он не поможет, т.к. - таких не было у DEC.
И странно, т.к. Вы, вроде, глубоко изучаете разные машины, а этого не знаете.

Vslav
12.01.2022, 17:39
он не поможет, т.к. - таких не было у DEC.
Интересно, меня одного раздражают Ваши риторические вопросы и упорное нежелание искать базовую информацию самостоятельно?
Первая же статья в вики про PDP-11: https://en.wikipedia.org/wiki/PDP-11
"PDP-11/20 and PDP-11/15 — 1970.[13] The 11/20 sold for $11,800.[14] The original, non-microprogrammed processor; designed by Jim O'Loughlin."

Hunta
12.01.2022, 18:21
PDP-11/20 and PDP-11/15

Vslav, это один и тот же процессор - PDP-11/15 - oem, PDP-11/20 - retail варианты :) Просто я, по некоторому размышлению, решил считать микропрограммированием только вертикальное - оно всё таки ближе к программированию, в отличии от горизонтального - где микрокоманда, по сути, выдаёт управляющие сигналы для разных микросхем :) Но говорить ему я не стал :)

Woxem
12.01.2022, 21:11
Здравствуйте всем, а возможно ли pdp-11 процессор симулировать в среде Proteus есть ли готовые решения.

Hunta
12.01.2022, 22:12
Понятия не имею, я вообще с этой программой не знаком

Hunta
24.04.2022, 10:11
Из занятного

RT-11 v5.7 source distribution kit:



...
SST .SAV 186. 1977-03-31
RT11SR.SYS 97. 1997-02-29
VD .MAC 1. 1995-05-06
...
IDCND .MAC 1. 1995-05-06
SBROL .CND 2. 1997-02-29
SBROL .ANS 6. 1997-02-29
SBROL .BLD 1. 1997-02-29
SBROL .MON 3. 1997-02-29
SBROL .DEV 2. 1997-02-29
SBROL .TBL 4. 1997-02-29
TIM .COM 1. 1997-11-27
...


Из SBROL.ANS оттуда же



; SYSGEN V05.14001 Answer File Created 29-Feb-97 00:32:37
;
; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
; COPYRIGHT 1989, 1990, 1991, 1992 BY DIGITAL EQUIPMENT CORPORATION.
; ALL RIGHTS RESERVED.
;
...

Hunta
05.05.2022, 09:51
Не помню, постил или нет, так что пусть будет:



BLUEFISH represents the new high end of the PDP-11 architecture offering performance
in excess of the 11/74 (target at 1.5 times 11/74 base processor) at a significantly
reduced cost (0.5 transfer cost of 11/74).
...
Upon execution, the MFPT instruction returns to the low byte of R0 a processor model
code (octal 3 for PDP 11/68). The high byte of R0 will be loaded with a processor
specified subcode (octal 0 for PDP 11/68).


Но в настоящее время тройку возвращает F-11. На текущий момент:

1 - 11/44
3 - F-11, PDP-11/68
4 - T-11
5 - J-11

То есть по прежнему не известно - кто (планировалось, что) возвращает двойку...

Hunta
03.10.2022, 13:42
http:///bitsavers.informatik.uni-stuttgart.de/pdf/dec/_Books/101_BASIC_Computer_Games_Mar75.pdf

Hunta
30.10.2022, 00:59
Век живи - век учись :) Как то даже не думал, что слово SPOOL - акроним :) Из документации DEC:
"File spooling (Shared Peripheral Operations OnLine)..."

Hunta
16.11.2022, 20:53
Оказывается, то ли DEC, то ли Mentec в ФС RT-11 собиралась ввести цветовую дифференциацию штано.. Э... Файлов :) Слово статуса (нулевое слово) в записе о файле - бит 2 - красный, бит 1 - зелёный и бит 0 - синий :) Ну а если был установлен бит 3 - то цвет штанов, тьфу, файла определялся клиентом :) То есть всего было доступно шышнадцать цветов :)

Hunta
05.12.2022, 20:43
Ещё из занимательного (как то не задумывался даже) :)
SWAP.SYS появился в третьей версии RT-11, до этого SWAP.SYS был частью монитора

Hunta
06.12.2022, 12:36
Занимательная плата
https://forum.vcfed.org/index.php?attachments/pxl_20221206_074055018-jpg.1249657/

AlexG
06.12.2022, 16:14
"You must be logged-in to do that. "

Hunta
06.12.2022, 16:17
"You must be logged-in to do that. "
http://www.KpXX.Ru/Pics/PXL_20221206_074055018.jpg

Alex
06.12.2022, 17:31
Хм, прикольная штука, с 4 мегабайтами памяти на борту :)
Про VAX в слоте ISA - ведомо, про 8086(8087), Z-80, 8080 и пр. в разных конструктивах PDP-11 слышал, но такое ...

Radon17
06.12.2022, 21:44
Вещь конечно потрясающая. Но наверняка невероятно редкая и дорогая, если не вообще штучная.

Сводный брат нашей PDPC (https://zx-pk.ru/threads/11619-pdpc-ot-kompanii-klodiks.html) )))

max232cpe
26.12.2022, 00:12
Незнаю на сколько в тему но видос интересный

https://www.youtube.com/watch?v=SB95dlrS5kU&ab_channel=UsagiElectric

ra3qdp
26.12.2022, 13:18
Занимательная плата
https://forum.vcfed.org/index.php?attachments/pxl_20221206_074055018-jpg.1249657/
дайте, пожалуйста, ссылку на тот форум на том сайте - где про нее почитать.

Hunta
26.12.2022, 13:22
https://forum.vcfed.org/index.php?forums/dec/

ra3qdp
26.12.2022, 13:37
знаю этот сайт, зарегистрирован там, знаю где там ветка про PDP. Но что бы не искать - где там про эту плату ?

Hunta
26.12.2022, 13:56
Но что бы не искать
То есть типа мне искать?

ra3qdp
26.12.2022, 14:08
логично было бы просто ответить - не помню.

Hunta
26.12.2022, 14:18
логично было бы просто предположить, что дали то, что помнят.

Electricman
16.01.2023, 15:14
Не прошло и нескольких лет, как в нагрузку к KA630 появилась ещё плата вакса с другим расположением м/сх, M7554 на J11, M8189 на трёх чипах, память M7551 и кучка других модулей. Остаётся только выяснить, что за периферия, ну и самая главная проблема - чем это всё соединять, ну и в целом проверить работоспособность, так как что-то ремонтировалось, а что-то без ПЗУ.

Hunta
16.01.2023, 15:49
появилась ещё
KA630-ых было два варианта, один из которых (более старый) скопировали в Воронеже, насчёт второго - не скажу. На них есть мегабайт памяти и консольник, так что запустить можно будет (возможно даже тесты погонять - но тут ничего не скажу - нет носителей с ними, которые можно было к моему стенду подключить), а вот установить операционку - крайне врят ли, даже старые версии
M7554 - есть разные варианты, в том числе те, у которых содержимое ПЗУ надо менять, но в целом - весьма плата :)
M8189 - тоже неплохой вариант - есть аж два последовательных порта
M7551 - от 1 (вроде как) до 4 мб памяти, у меня есть её аналог не от DEC


чем это всё соединять
Корзинкой :)


что-то без ПЗУ
Насколько я помню, проблемы только с M8189 - там какие то старые ПЗУ, которые проблематично найти. Ну или переходники на более современные. Я чего-то такое находил в инете

Electricman
16.01.2023, 16:15
Ну, один вакс я запускал, жив, в терминал выдавал инфу. Он вообще более в приоритете, так как больше всего нафаршмачен. :)
M7554 - KDJ11-D/S, визуально цела и комплектна. А вот M8189 уже без ПЗУшек.
Из такого же некомплекта M8639 "RDRX disk controller", нет ПЗУ. А M3104 - выжжены выходные усилители (или приёмники).
Остальное вроде цело и комплектно, даже контроллеры сети на 80186. Но вот периферии для работы с накопителями что-то очень мало. Есть ещё непонятные эмулексы, на которые ничего не гуглится адекватного. Ладно, будем разбираться.

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

Hunta
16.01.2023, 16:53
А вот M8189 уже без ПЗУшек
Содержимое есть, а вот сами ПЗУ...


Но вот периферии для работы с накопителями что-то очень мало.

А вот корзинок нет и не предвидится,
На ебее это всё есть, но вот самого ебея...


поэтому буду что-то колхозить на базе разъёмов ISA
Ещё народ находил очень похожие на родные разъёмы, только без безконтактного промежутка посередине, но, ЕМНИП, они тоже только там и недешёвые..


Есть ещё непонятные эмулексы
А фото или надписи с них?


M8189
Самые комплектные M8189 - у меня :) Вместе с CIS :)

Electricman
18.01.2023, 20:36
Раскочевряжить другие пзу проблем нет. У меня ситуация как раз таки обратная, прошивки нет.

Emulex'ы - QD3310401/QD3310701, первое краской написано, второе вытравлено, и QT1310401/QT1310701 соответственно. Оба - половинчатого формата. Ещё непонятная Excelan EXOS 203, полноформатного размера, на 80186. Остальное всё гуглится.

Hunta
18.01.2023, 21:02
Emulex-ы - контроллеры диска (D) и ленты (T) для QBus. Про ленточный ничего не скажу, а дисковый, ЕМНИП - для хитрых (SMD) дисков

Excelan EXOS 203
Плата ethernet контроллера

прошивки нет
на M8189?

xolod
19.01.2023, 07:02
Emulex'ы - QD3310401/QD3310701, первое краской написано, второе вытравлено, и QT1310401/QT1310701 соответственно. Оба - половинчатого формата.

Есть SMD диск, а контролера к нему нет. Было-бы интересно считать его содержимое. Если вы не против, могли скооперироваться.

Electricman
19.01.2023, 16:12
>на M8189?
Угу. Ну и ещё на дисковый контроллер М8639.

>Если вы не против, могли скооперироваться.
С этим сложнее, я с этим труден на подъём :(

СМД - это которые со сменными блоками дисков?

Hunta
19.01.2023, 16:34
На M8189 - есть, на M8639 - вроде тоже, но вот на всё ли на нём (там ещё вроде что то типа PLM) - с ходу не скажу

СМД - это которые со сменными блоками дисков?
Это, скорей, стандарт интерфейса. Наследник от старого стандарта DEC RP0x

Hunta
27.01.2023, 14:45
J-11 в микротестах проверяет - откликается ли адрес 17777700. Если да - это считается ошибкой, но работа продолжается

max232cpe
30.01.2023, 17:12
https://www.youtube.com/watch?v=e0FXy1Mho3c&ab_channel=UsagiElectric

Hunta
02.05.2023, 09:07
Наследие DEC (http://www.KpXX.Ru/DEC/NearDEC/8080FocalCassetteTape.jpg) :)

MiX
02.05.2023, 14:49
Есть SMD диск, а контролера к нему нет. Было-бы интересно считать его содержимое.
Есть унибасный контроллер под эти диски, можно считать.

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


Ну и ещё на дисковый контроллер М8639.
А с какими буквами на конце? Если без букв то есть.

Hunta
02.05.2023, 17:08
Конечно, это меринье штангенциркулями, но тем не менеe (c vcfed.org):
"The RICM has a Cray T3E with 36 450 MHz 21164 Alpha CPUs.."

xolod
02.05.2023, 20:36
СМД - это которые со сменными блоками дисков?

Вот такой.
https://i.ibb.co/6JKxq2K/IMG-20220721-WA0004.jpg (https://ibb.co/6JKxq2K) https://i.ibb.co/yq61tyJ/IMG-20220721-WA0006.jpg (https://ibb.co/yq61tyJ) https://i.ibb.co/m83d3Vg/IMG-20220721-WA0005.jpg (https://ibb.co/m83d3Vg) https://i.ibb.co/r7f7ch6/IMG-20220721-WA0007.jpg (https://ibb.co/r7f7ch6)

Hunta
13.05.2023, 23:21
Не совсем про PDP-11, но..

RSX180
RSX180 is an Operating System for the Zilog Z180 CPU that is similar in look and feel to the old DEC's RSX-11M.

Features:

- Multi-tasking.
- Multi-user.
- Multi-terminal.
- Priority-based micro-kernel with round-robin scheduling of tasks of the same priority.
- QIO mechanism.
- AST support.
- Event Flags.
- Send-Receive inter-task communication mechanism.
- Kernel functionality extended by privileged tasks.
- Task Directory for fast task activation.
- Tasks can be fixed in memory for even faster activation.
- Device drivers.
- Dynamic allocation of system resources.
- Fork processes.
- Clock queue and time-scheduled task execution.
- Privileged and non-privileged users.
- 2-level filesystem structure.
- Indirect Command Processor.

Alex
15.05.2023, 10:50
С чем могли сравнить - с тем и сравнили :)
А уж компьютер под эту систему найти сложно, экзотика однако :(

Hunta
15.05.2023, 11:18
С чем могли сравнить - с тем и сравнили
Если я правильно понял - то эту операционку написали по мотивам RSX, а не просто сравнили

Alex
15.05.2023, 13:17
Название одно об этом говорит... :)
Когда есть перед глазами что-то достойное для подражания, всё легче :)

vva
16.05.2023, 15:30
Возился с F77 под RT11XM на PDP11/23+ от forth32 и обнаружилось:
1) с real*4 прооблем нет;
2) c real*8 не работают SQRT, TAN, ATAN (возможно глючная библиотека);
3) вот такая програмка "рубится" на операции деления
PROGRAM TOP
PARAMETER (N=20)
REAL*8 V1,V2,V3,V4,O1,O2
INTEGER I

DO 100 I=1,N
O1=I
O2=O1
V1=O1+O2
V2=O1-O2
V3=O1*O2
C V4=O1/O2
100 CONTINUE
STOP
END

Железо или софт?

Alex
16.05.2023, 16:34
Попробовать можно предыдущую версию фортрана.
И если там будет так же , то значит что-то с аппаратной частью.
Хотя классика - тесты FPU... И ещё, FPU - они были разные. Например, разное число команд FPU.
На фортране-IV есть разные ключи компиляции, их много...
Ничего(THR), EIS , FIS, FPU и EAE(что это такое EAE, я сам не видел ни разу живьём, но мне сказали, что арифметический расширитель, работает типа через адреса на странице ввода-вывода).
Компилятор должен быть отгенерён с возможностями генерации этих кодов.
Получается максимальный объём файлов компилятора.
Можно обойтись при генерации чем-то конкретным, тогда объём файлов компилятора станет меньше. Разница по объёму может быть почти в два раза.(актуально, если проблемы с местом на диске)
Ещё можно попробовать другой дистрибутив F77, чтобы избежать битых файлов ...
Битым может быть как сам компилятор, так и библиотека(библиотеки)
И ещё, фортрановские библиотеки генерятся вместе с файлом компилятора. Если взять библиотеку от одной генерации , а компилятор от другой, то возможны сюрпризы ...

Hunta
16.05.2023, 16:56
Компилятор должен быть отгенерён с возможностями генерации этих кодов.
F77 умеет только FPP, насколько я помню.


Возился с F77 под RT11XM на PDP11/23+ от forth32 и обнаружилось:
Я могу попробовать на реальном железе, но нужна ссылка на этот вариант компилятора и его библиотеку

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


И ещё, FPU - они были разные. Например, разное число команд FPU.
Основной набор команд - один и тот же

vva
16.05.2023, 17:30
Я могу попробовать на реальном железе, но нужна ссылка на этот вариант компилятора и его библиотеку
Все, что могу:
.f77xm
*
FORTRAN-77 V5.0A
Взял у form

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

Попробовал аналогичную прогу на С:
#include <stdio.h>

#define N 20

int main()
{
int i;
static double o1, o2, v1, v2, v3, v4;

for(i=0; i<N; i++)
{
o1=i+1; o2=o1; v1=o1+o2; v2=o1-o2;
v3=o1*o2; v4=o1/o2;
}
}

Все работает, однако есть но:
у F77 деление командой DIVD, у С - DIVF
То есть С работает с фортрановским real*4, хотя указан double и резервируется именно 8 байт на переменную.
Как в С включить работу с double я не нашел.

Hunta
16.05.2023, 17:30
Ок, посмотрю, но когда получится - наверняка не скажу. Точнее так - в выходные - да, а вот до выходных получится или нет..

Alex_K
16.05.2023, 21:17
у F77 деление командой DIVD, у С - DIVF
В FPP команды одинарной и двойной точности имеют один и тот же код. Перед их использованием нужно указать точность с помощью команд SETF или SETD.

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


То есть С работает с фортрановским real*4, хотя указан double и резервируется именно 8 байт на переменную.
Как в С включить работу с double я не нашел.
Если вы про DECUS C, то он с FPP работает в режиме двойной точности, в библиотеке она устанавливается командой SETD (170011). При работе с переменными одинарной точности происходит загрузка и сохранение регистров с преобразованием точности. В качестве примера небольшая программка и полученный результат на ассемблере:

float a1,a2,a3;
double b1,b2,b3;
int main()
{
a1=1; a2=2; a3=a1/a2;
b1=1; b2=2; b3=b1/b2;
}

.comm _a1,4
.comm _a2,4
.comm _a3,4
.comm _b1,10
.comm _b2,10
.comm _b3,10
.globl _main
.text
_main:
~~main:
jsr r5,csv~
movf $40200,r0
movfo r0,_a1
movf $40400,r0
movfo r0,_a2
movof _a1,r0
movof _a2,r1
divf r1,r0
movfo r0,_a3
movf $40200,r0
movf r0,_b1
movf $40400,r0
movf r0,_b2
movf _b1,r0
divf _b2,r0
movf r0,_b3
jmp cret~
.globl fpin~~
.globl fppr~~
.globl fpem~~

vva
17.05.2023, 08:48
В FPP команды одинарной и двойной точности имеют один и тот же код. Перед их использованием нужно указать точность с помощью команд SETF или SETD.
Уже разобрался (ранее ориентировался только на код, генерируемый компилятором). Вывод, сделанный ранее про PDP-11 C V1.2-006 был неверен, идет работа с double:
#include <stdio.h>

#define N 20

int main()
{
int i;
static double o1, o2, v1, v2, v3, v4;

for(i=0; i<N; i++)
{
o1=i+1; o2=o1; v1=o1+o2; v2=o1-o2;
v3=o1*o2; v4=o1/o2;
}
}

.TITLE TOP8NP
.IDENT /V1.0 /

.PSECT $CODEI,RO,I,LCL,REL,CON
$CODEI:

.PSECT $READW,RW,D,GBL,REL,CON,SAV
$READW:
.BLKB 8. ; o1
.BLKB 8. ; o2
.BLKB 8. ; v1
.BLKB 8. ; v2
.BLKB 8. ; v3
.BLKB 8. ; v4

.GLOBL C$SVFR,C$MAI

.PSECT $CODEI

MAIN:: ; main
CALL C$SVFR ; 227
CLR R4 ; 232 i
BR 2$
1$: MOV R4,R5 ; 234 i,
INC R5
SETD
SETI
LDCIF R5,F3
STF F3,$READW+0 ; ,o1
LDF $READW+0,F3 ; o1,
STF F3,$READW+8. ; ,o2
LDF $READW+0,F3 ; o1,
ADDF $READW+8.,F3 ; o2,
STF F3,$READW+16. ; ,v1
LDF $READW+0,F3 ; o1,
SUBF $READW+8.,F3 ; o2,
STF F3,$READW+24. ; ,v2
LDF $READW+0,F3 ; 235 o1,
MULF $READW+8.,F3 ; o2,
STF F3,$READW+32. ; ,v3
LDF $READW+0,F3 ; o1,
DIVF $READW+8.,F3 ; o2,
STF F3,$READW+40. ; ,v4
INC R4 ; 232 i
2$: CMP R4,#20. ; i,
BLT 1$
RETURN
.END

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


float a1,a2,a3;
double b1,b2,b3;
int main()
{
a1=1; a2=2; a3=a1/a2;
b1=1; b2=2; b3=b1/b2;
}
Эта програмка на PDP-11 C выглядит нагляднее:

.PSECT $CODEI,RO,I,LCL,REL,CON
$CODEI:
.PSECT $READW,RW,D,GBL,REL,CON,SAV
$READW:
A1:: .BLKB 4 ; a1
A2:: .BLKB 4 ; a2
A3:: .BLKB 4 ; a3
B1:: .BLKB 8. ; b1
B2:: .BLKB 8. ; b2
B3:: .BLKB 8. ; b3

.GLOBL C$SVFP,C$MAI
.PSECT $CONST,RO,D,LCL,REL,CON
$CONST:
.FLT4 2.
.FLT4 1.
.FLT2 2.
.FLT2 1.

.PSECT $CODEI
MAIN:: ; main
CALL C$SVFP ; 228
SETF ; 230
LDF $CONST+20.,F3
STF F3,A1 ; ,a1
LDF $CONST+16.,F3
STF F3,A2 ; ,a2
LDF A1,F3 ; a1,
DIVF A2,F3 ; a2,
STF F3,A3 ; ,a3
SETD ; 231
LDF $CONST+8.,F3
STF F3,B1 ; ,b1
LDF $CONST+0,F3
STF F3,B2 ; ,b2
LDF B1,F3 ; b1,
DIVF B2,F3 ; b2,
STF F3,B3 ; ,b3
RETURN
.END

Alex
17.05.2023, 10:18
В FPP команды одинарной и двойной точности имеют один и тот же код. Перед их использованием нужно указать точность с помощью команд SETF или SETD.
Читал, сейчас вспомнил, но так как судьба меня не сводила с FPU :(

Из лайфхаков, под XM можно собирать компилятор с ключами /V вместо /O при генерации. Процесс компиляции сильно ускоряется, так как компилятор грузится в память и от туда работает...
Плюс VBGEXE, тоже способ ускорения ... :)
Можно в XM держать постоянно в памяти редактор, компилятор и линкер :)
VBGEXE вполне запускается и как системное задание тоже...

Насчёт работы без FPU F77, у меня работал на 1801ВМ3, но нужно ключ соответствующий и не обращаться к плавающий арифметике... Целые считаются через EIS.

И прочитал года 4 назад, что есть специальная библиотека для работы F77 на процессорах без FPU.
Ну плюс существует драйвер - эмулятор FPU

Hunta
17.05.2023, 10:48
Насчёт работы без FPU F77, у меня работал на 1801ВМ3, но нужно ключ соответствующий
Насчёт RT не скажу, но в варианте исполняющей библиотеки под RSX нужно было слегка модуль инициализации хакнуть - оно чего-то там делало, детали с ходу не вспомню, надо свои файлы с ДВК глянуть.
И именно для комплятора под RSX такого ключа не помню.
Гляну сво файлы (постараюсь сегодня), когда и если найду - отпишусь. Скорее всего это будет с одновременной проверкой на PDP-11/23+

vva
17.05.2023, 12:32
С FPU напрямую тоже дела не имел, решил попробовать:
.TITLE FDIV
.IDENT /X1.0/
.MCALL .EXIT

.PSECT $CODE1
; JSR PC,OTI$
; MOV #-73200,-(SP)
; MOV #23051,R4
; JSR R4,@$NAM$

; MOV #-5,$SEQC
START: MOV #1,R2
SETD
SETI
L$GANC:
; MOV #-6,$SEQC
LDCIF R2,%1
LDF %1,%0
DIVF %1,%0
STF %0,V
INC R2
CMP R2,#24
BLE L$GANC
MOV R2,I
; CLR -(SP)
; JSR PC,STOP$
.EXIT
;
V: .BLKB 8.
I: .BLKB 2
;
.END START

В итогк получил: ?MON-F-FPU trap 001014

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

Как получить доступ к регистрам FPU?

Hunta
17.05.2023, 13:17
Как получить доступ к регистрам FPU?
%0-%3, в некоторых командах %4 и %5
Ну или стандартное R0-R5

Основной нюанс - какой регистр - CPU или FPP - определяется командной, скажем, если это LDF/LDD, то источник - процессор, а приёмник - FPP.

Доп нюанс. В некоторых командах, когда в качетстве источника/приёмника указан регистр - то это будет не регистр процессора, а FPP.

vva
17.05.2023, 14:48
%0-%3, в некоторых командах %4 и %5
Пробовал (см. распечатку) - получил ?MON-F-FPU trap 001014

Убрал знак % - работает и по коду соответствует.
Осталось выяснить правильно ли считает (нет проги распечатки float, писать лень). Буду использовать .DPRINT

Hunta
17.05.2023, 15:12
Убрал знак %
Если просто убрать %, это будет ссылка на ячейки памяти, а не на регистры. Что-то где-то не так.

vva
17.05.2023, 16:18
Если просто убрать %, это будет ссылка на ячейки памяти, а не на регистры. Что-то где-то не так.
Проверил с % и без -- работает в обоих случаях (очевидно ранее где-то была ошибка)
Примеры:
172367 000172 ADDF V1,3
172567 000112 LDF V2,1
172467 000054 LDF V2,0

172367 000172 ADDF V1,%3
172567 000112 LDF V2,%1
172467 000054 LDF V2,%0

Результат работы:
.RUN FTEST
Enter first value (int dec): 3
Enter second value (int dec): 15

ADD result=00018.
SUB result=00012.
MUL result=00045.
DIV result=00005.

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

Прога:
.TITLE FDIV
.IDENT /X1.0/
.MCALL .EXIT, .DEBUG, .DPRINT, .PRINT
.ENABL LSB
.DEBUG SWITCH=ON,VALUE=YES

.PSECT $CODE1

START: CLR R1
1$: .PRINT PRTMSG(R1)
CALL INDEC
BCC 2$
.EXIT
2$: MOV R0, INVAL(R1)
TST (R1)+
CMP R1, #4
BNE 1$
;
CLR R0
.PRINT
;
SETD
SETI
L$GANC:
LDCIF INVAL,%3
STF %3,V1
LDCIF INVAL+2,%3
STF %3,V2
ADDF V1,%3
STCFI %3,IRES
.DPRINT ^"ADD result=",IRES,DEC
;
LDF V2,%2
SUBF V1,%2
STCFI %2,IRES
.DPRINT ^"SUB result=",IRES,DEC
;
LDF V2,%1
MULF V1,%1
STCFI %1,IRES
.DPRINT ^"MUL result=",IRES,DEC
;
LDF V2,%0
DIVF V1,%0
STCFI %0,IRES
.DPRINT ^"DIV result=",IRES,DEC
.EXIT
;
V: .BLKB 8.
V1: .BLKB 8.
V2: .BLKB 8.
INVAL: .BLKW 2
IRES: .BLKW 1
;
PRTMSG: .WORD EFVMSG
.WORD ESVMSG

EFVMSG: .ASCII /Enter first value (int dec): /<200>
ESVMSG: .ASCII /Enter second value (int dec): /<200>
.EVEN

.END START

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


.TITLE FDIV
Нужно поменять - не порядок...

Alex
17.05.2023, 16:27
% - вроде как в старых ассемблерах регистры обозначались, потом заменили на R
% - остался для совместимости.

Что касается FPP(раньше писал FPU), то насколько я помню из когда-то прочитанного, то есть два способа работы c FPP
Правда там не указывалась конкретная модель, писалось просто PDP-11 :(
Первый непосредственно с регистрами. Второй - как со стеком.
Самое интересно, то FPU от Интела 8087 и прочие очень похожи на FPU DEC по программированию.
Интересно, на сколько коды команд совпадают ? ;)
Единственно Интел накрутил разрядность до 80 разрядов, чтобы точность поднять.
Я полагаю, что это связано со стандартами IEEE 754 на работу с числами с плавающей запятой, а стандарт писался с большой оглядкой на изделия DEC...
Правда потом были изменения в IEEE, но там в основном изменения поведения процессора в крайних случаях.
Так же как стандарт дисплея ANSI ну прямо очень похож на VT100 да практически калька с VT340
По поводу основных команд FPP DEC, когда одной команды не хватает...
А вот когда более десятка - возникает желание разобраться...
Да и на одной команде можно пролететь как фанера над Парижем...

Нашёл пример кода аж с 1973 года :) PDP-11/45 :
LDD (R3)+,AC3
LDD (R3)+,AC0
ADDD AC0,AC3

Hunta
17.05.2023, 16:39
% - вроде как в старых ассемблерах регистры обозначались
Это исходная ссылка на регистры.
Потом начали писать в начале проги, что то а-ля
R0=%0
Потом появился макрос, где это всё определялось, а потом зашили в сам компилятор.
Ну и где-то once upon a time аналогичное, только по шаблону ACx добавили для регистров FPP

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


Правда потом были изменения в IEEE
Там немного другой формат хранения и вроде как при одинаковом количестве бит у DEC будет на один бит точнее
В частности - в М11, который не от DEC для выполнения команд FPP используется i960 (ЕМНИП - какой именно камень), который как раз по стандарту IEEE - и на этой при вычислении теряются один-два бита

vva
17.05.2023, 16:40
Переделал прогу для работы аккум-аккум:
LDCIF INVAL,%3
STF %3,V1
LDF %3,%0
LDCIF INVAL+2,%3
STF %3,V2
ADDF %0,%3
STCFI %3,IRES
.DPRINT ^"ADD result=",IRES,DEC
;
LDF V2,%2
SUBF %0,%2
STCFI %2,IRES
.DPRINT ^"SUB result=",IRES,DEC
;
LDF V2,%1
MULF %0,%1
STCFI %1,IRES
.DPRINT ^"MUL result=",IRES,DEC
;
LDF V2,%3
DIVF %0,%3
STCFI %3,IRES
.DPRINT ^"DIV result=",IRES,DEC

Далее интересное:
1) - SETF
.RUN FTEST
Enter first value (int dec): 2
Enter second value (int dec): 10

ADD result=00012.
SUB result=00008.
MUL result=00020.
DIV result=00005.

2) - SETD
.RUN FTEST
Enter first value (int dec): 2
Enter second value (int dec): 10

ADD result=00012.
SUB result=00008.
MUL result=00020.

?MON-F-FPU trap 002514
-----------------
команда DIVF память,АС (в отличии от глючной DIVF AC,AC) работает в обоих режимах.
Фортран делает именно DIVF AC,AC

Hunta
17.05.2023, 16:42
Проверил с % и без
Хм.. Может из-за того, что в операции на этом месте обязательно регистр нужно указывать?.. Я сталкивался с тем, что можно писать, скажем, (R0)+, а можно (0)+, но вот что бы так свободно 0 интерпретировался как %0...

Alex
17.05.2023, 16:43
Я, увы с FPP DEC не сталкивался в реале :(
Иначе бы смог бы сказать более...
А пример программы именно с 1973 года, как раз с тех времён, когда FPP у DEC только появился...
И если там AC написано, значит AC и надо писать
.
Ещё подумал, могут быть проблемы с Macro... Может быть - файл битый в области именно инструкций сопроцессора много лет назад.
Так как очень редко плавающую арифметику напрямки в Macro программируют. А всё остальное вполне рабочее. Хотя вряд ли, но кто его знает....

Hunta
17.05.2023, 16:58
команда DIVF память,АС (в отличии от глючной DIVF AC,AC)
Странно.. По идее должно работать. Гляну и на это

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


И если там AC написано, значит AC и надо писать
Не обязательно


Может быть - файл битый в области именно инструкций сопроцессора много лет назад.
Ну это вообще из области фантастики

vva
17.05.2023, 17:06
И если там AC написано, значит AC и надо писать
Не обязательно
С АC (как и F) Macro меня послал...

Hunta
17.05.2023, 17:10
С АC (как и F) Macro меня послал...
Забыл написать - ACx не заложено, в отличии от Rx, в компилятор MACRO-11, это надо явно определять

Alex
18.05.2023, 07:39
Надо получить листинг да поглядеть, что именно генерит Macro

vva
18.05.2023, 07:56
Надо получить листинг да поглядеть, что именно генерит Macro
Эта ситуация впервые "обнаружилась" у Фортрана, соменаваюсь, что он использует Macro для компиляции...

Hunta
18.05.2023, 09:10
соменаваюсь, что он использует Macro для компиляции
Не использует. Сразу в obj

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

Хотя.. Память царапнула, что вроде был какой-то вариант, когда компилятор с FORTRAN-а показывал код MACRO в листинге

Alex
18.05.2023, 09:56
Фортран-IV показывал ... Ключи для листинга...
Про F77 точно не скажу. Так как я им немного поигрался только. Без плавающей арифметики тогда проку в нём мне было мало.
Хотя должна быть такая возможность.

Hunta
18.05.2023, 10:17
Без плавающей арифметики тогда проку в нём мне было мало.
На самом деле - был прок. В силу (какой-никакой) поддержки структурного IF - было быстрее писать прогу и легче понимать.

Так что я очень быстро перешёл на него с FORTRAN-IV. На Квант-е - после того, как хакнул зависимость OTS от FPP. Ну, точнее - на комбинацию - FORTRAN-77 + MACRO-11 - логика на фортране, всякая системно- или скоростно-зависимая вешь - на MACRO. Но после того, как наткнулся на DSMAC и более-менее его освоил - чистый MACRO-11. Ну а сейчас, когда восстановил свой интерес к PDP-11 - чистый MACRO-11 :)

vva
18.05.2023, 11:02
когда компилятор с FORTRAN-а показывал код MACRO в листинге
R F77XM
OBFILE,LSFILE=SRC.FOR/L:3
^C

И получите искомое, например (кусок)
...
000042 LDCID R2,F2
000044 LDD F2,F0
; 0007
000046 LDD F0,F1
; 0008
000050 LDD F0,F2
000052 ADDD F1,F2
000054 STD F2,V1
...

Hunta
18.05.2023, 11:08
И получите искомое, например (кусок)
Ну, значит, память не обманула.

Alex
18.05.2023, 12:15
У F77 - ещё из вкусностей, в версии для RT-11 лучше возможности работы с файлами последовательного доступа :)

И вообще фортран - язык направленный более на счёт.
И когда на кафедре работал - там начальству в основном от меня нужны были расчётные задачи.
Благо, когда есть алгоритм, программа пишется легко :)
По этому F77 в основном только ознакомился из личного любопытства.

И ещё, судя по листингу из F77 наименование регистров для плавающей арифметики менялось...

Hunta
18.05.2023, 13:13
У F77 - ещё из вкусностей, в версии для RT-11 лучше возможности работы с файлами последовательного доступа
Вспомнил - под RSX ещё возможно работа не только с файлами последовательного доступа, но и относительного (дурацкий какой-то формат - по сути, похож на формата с фиксированными записями, но для программы это не видно - для неё - записи с переменной длиной с возможностью прямой адресации) и индексного - у записи есть ключи (первичный и, возможно, альтернативные) - и возможен поиск по ключу - что-то типа прообраза баз данных. При этом используется библиотка RMS. Не помню - есть ли она для RT


И ещё, судя по листингу из F77 наименование регистров для плавающей арифметики менялось...
Ещё раз. Православное название регистров - %0-%7 для CPU и %0-%5 для FPP. Всё остальное - псевдонимы. И ты их (псевдонимы) можешь определять как угодно.

Alex
18.05.2023, 13:39
И как определить, что есть %0?
R0 или F0 ?

Библиотеки RMS я не встречал для RT-11 :(

Что было(не считая компиляторов, DECNet и самописных) - Графор(две версии под плоттер и КГД) и специфические библиотеки под КГД.

Hunta
18.05.2023, 13:45
И как определить, что есть %0?
R0 или F0 ?
Исключительно по команде (команда CPU или FPP) и по подтипу команды FPP


Графор
Это у меня и исходники есть (некоторой версии) и моя доработка (громко сказано - там всего лишь надо было одну процедуру написать - провести линию, ЕМНИП) под КЦГД и принтер. Причём сделано было два вариант - или сразу рисовать на терминал или вывести в файл, который можно было вывести на терминал или распечатать :)

Alex
18.05.2023, 15:54
LDCID R2,F2 из листинга...
LDCID %2.%2 так? очень удобно и читаемо ;)

Графор мне показался громоздким тогда...
Изначально был массив в расширенной памяти по размерам экрана КЦГД(800*240). Уж из него и отправлялось либо на печать , либо экран...
Но с экраном были проблемы... По сему написал точку, чтобы с фонтами текста не возиться, потом линию ...
То есть изначально выводил текстовую часть, затем загрузка программы в КЦГД а потом графику отрисовывал и возвращал управление исходной прошивке ...
Муторно... Но стандартного интерфейса графики для КЦГД тогда не было :(

Сейчас считаю, что нужно мне было самому делать программу графического терминала, либо выпросить готовую с нашего ВЦ :)

vva
18.05.2023, 16:46
Перехватил прерывание по вектору 244, поигрался с делением аккум-аккум double, результат:
1) легальные исключения (деление на 0 и переполнение целого) - прерывание и в FEC легальные значения (соответственно 4 и 6);
2) нормальное деление (аккум-аккум) - прерывание и в FEC ненормальное значение (205, 203б 200б 175 - зависит от чисел);
3) деление 0/число - результат 0 и ПРЕРЫВАНИЯ НЕТ.

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

.RUN FTEST
Enter first value (int dec): 12
Enter second value (int dec): 144

*** Float operations ***
*** ADD 156 007400
*** SUB 132 007400
*** MUL 1728 007400
*** DIV 12 007400

*** Double operations ***
*** ADD 156 007600
*** SUB 132 007600
*** MUL 1728 007600

!!! Interrupt has been captured !!!
FEC=000205 FEA=002534

*** DIV 0 107604




.RUN FTEST
Enter first value (int dec): 144
Enter second value (int dec): 0

*** Float operations ***
*** ADD 144 007400
*** SUB 65392 007410
*** MUL 0 007404
*** DIV 0 007404

*** Double operations ***
*** ADD 144 007600
*** SUB 65392 007610
*** MUL 0 007604
*** DIV 0 007604

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

*** операция результат статусный-регистр-FPU

Hunta
18.05.2023, 17:58
LDCID %2.%2 так? очень удобно и читаемо
Зато чётко понятно, что это регистры, а не (возможные) ячейки памяти, как в LDCID R2,F2


Но с экраном были проблемы... По сему написал точку, чтобы с фонтами текста не возиться, потом линию ...
То есть изначально выводил текстовую часть, затем загрузка программы в КЦГД а потом графику отрисовывал и возвращал управление исходной прошивке ...
Муторно... Но стандартного интерфейса графики для КЦГД тогда не было
Я пошёл по другому пути для терминала - сделал расширение для ESC последовательности - нарисовать линию от и до - и дальше написание процедуры линии было тривиально.


чтобы с фонтами текста не возиться
Так в Графоре уже встроены шрифты, чего с ними возиться?

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

Из тестовой программы


GRF:
.ASCII <33>/H/<33>/J/
.ASCII <33>/</
.ASCII <33>/[1;190;40y/
.ASCII <33>/[1;610;200;190;200y/
.ASCII <33>/[1;610;40y/
.ASCII <33>/[2;200;50;600;190y/
.ASCII <33>/[2;200;190;600;50y/
.ASCII <33>/[2;200;50;200;190;y/
.ASCII <33>/[2;200;50;600;50y/
.ASCII <33>/[2;200;190;600;190y/
.ASCII <33>/[?2;600;50y/
.ASCII <33>/[2;0;0;0;239;799;239;799;0;0;0y/
.ASCII <33>/[?2l/
GRF.LN=.-GRF

В КЦГД загружался модуль расширения, который, собстенно, и интерпретировал пришедшую последовательность. Ну а перед этим несколько вскрыл код КЦГД, чтобы понять - как сделать :)

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

Посмотрел код. 0 - это было выставить перо рисования в точку с координатами, 1 - нарисовать точку, а 2 - нарисовать линию, не отрывая перо, а ?2 - переместить первоначально перо, оторвав от бумаги :) Ну и технически, что то типа ?2;600;50 - это аналогично команде 0

Alex
18.05.2023, 18:22
Сделал я неправильно, но у меня очень поджимало тогда время :(
Шефу надо было всё ещё вчера :) как всегда...
Потом оказалось, что и так работает и я оказался занят совсем другими вопросами.
Например убил кучу времени на борьбу с КМД. Написал драйвер который прекрасно работал SJ/FB
Он работал и в ХМ, но, зараза, только с задачами в нижней памяти.
И только тут я прочитал, что первые КМД были с ошибкой... :(
А я тогда этого не знал, и не мог понять в чём дело ...
Знал бы, сделал буфер в нижней памяти. Было бы медленнее, затратнее по памяти, но работало бы...
Хотя драйвер DW переделал из драйвера для Электроники-85.
И драйвер прекрасно работал со всеми мониторами.

Hunta
20.05.2023, 12:19
Железо или софт?
Обещанный тест. На реальном F11 - проблем нет


.DIR HX5:

INSTAL.COM 9P 08-Jun-1985 F77 .SAV 340P 27-Jun-1985
F77COM.MSG 15P 05-Feb-1985 F77OTS.OBJ 130P 27-Jun-1985
SHORT .OBJ 1P 27-Jun-1985 F77MAP.OBJ 32P 27-Jun-1985
F77CVF.OBJ 4P 27-Jun-1985 F77EIS.OBJ 2P 27-Jun-1985
F77NER.OBJ 1P 27-Jun-1985 F77RAN.OBJ 1P 27-Jun-1985
F77TST.FOR 1P 30-Apr-1984 VIRTXM.OBJ 2P 27-Jun-1985
SYSUPD.OBJ 5P 27-Jun-1985 F77DWA.MAC 2P 06-Jun-1985
F77XM .SAV 341P 27-Jun-1985
15 Files, 886 Blocks
2076 Free blocks

.IND HX5:INSTAL
;
; FORTRAN-77/RT-11 Installation procedure for RX50 diskette distribution
; Version 5.0
;
; This procedure will build the working FORTRAN-77 on SY:
;
* Enter the name of the device holding the distribution files [ddn:] [S]: HX5:
;
.ASSIGN HX5: INP
.ASSIGN SY: OUP
;
; The RX50 distribution is supplied with a complete FORTRAN-77 system
; on each diskette; disk 1 contains the SJ/FB version of the compiler
; while disk 2 holds the XM version. If the disk that is now loaded
; does not hold the compiler that you want, replace it now with the
; other diskette.
;
* Is the correct diskette mounted and ready to go? [Y/N D:N]: Y
;
; Do you want your default system library SYSLIB.OBJ to include
;
; 1) only the RT-11 distributed SYSLIB.OBJ (unchanged)
; 2) SYSLIB plus FORTRAN-IV (FORLIB) (unchanged SYSLIB+FORLIB)
; 3) SYSLIB plus FORTRAN-77 (F77OTS) (new combined SYSLIB+F77OTS)
;
* Enter option number: [O]: 1
;
; The F77 OTS will be copied to SY:. The SYSLIB update modules
; in SYSUPD.OBJ will be merged into the FORTRAN-77 OTS library.
;
; Should F77OTS be given the name FORLIB.OBJ to be compatible with the
* linker's /F switch? [Y/N D:N]: Y
;
.LIBR OUP:FORLIB/CREATE INP:F77OTS.OBJ,INP:SYSUPD
;
; Copying the F77 compiler and message file to the system disk...
;
.COPY INP:(F77*.SAV,F77COM.MSG) OUP:
Files copied:
INP:F77.SAV to OUP:F77.SAV
INP:F77XM.SAV to OUP:F77XM.SAV
INP:F77COM.MSG to OUP:F77COM.MSG
;
; There are several optional object modules supplied in the distribution.
; They are explained in detail in the FORTRAN-77/RT-11 Installation Guide.
;
* Do you want to copy any of the optional modules to SY:? [Y/N D:N]:
;
; This completes the FORTRAN-77/RT-11 installation.
;
@ <EOF>

.ASS HX7 DK

.DIR

TEST .FOR 1 20-May-2023
1 Files, 1 Blocks
65466 Free blocks

.F77 TEST,TEST=TEST

.DAT 20-MAY-2023

.TIM 13:11

.DIR
20-May-2023
TEST .FOR 1 20-May-2023 TEST .OBJ 2
TEST .LST 3
3 Files, 6 Blocks
65461 Free blocks

.LINK TEST,SY:FORLIB

.RUN TEST

STOP

.


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


PDP11/23+ от forth32
Вопрос - он у него собран на основе PDP-2011 или на основе реверса Vslav-а?

vva
20.05.2023, 12:24
опрос - он у него собран на основе PDP-2011 или на основе реверса Vslav-а?
На основе реверса Vslav'a.

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

Однако XXDP тест FPU проходит нормально. Нужно найти текст теста и попытаться разобраться...

Hunta
20.05.2023, 12:29
На основе реверса Vslav'a
Тогда ОЧЕНЬ странно, вроде как тест FPP для F11 есть и, ЕМНИП, вроде как тестировалось. Или нет? Память как то настороженно про тестирование FPP

Кстати, я очень предполагал, что на реальном F11 будет всё норм - в самой команде ошибок я не увидел (ну сложно их там в ней допустить, да и F77 аналогичный код генерит), так что с самого начала грешил на FPGA-шный F11, но - мало ли.

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


Однако XXDP тест FPU проходит нормально
Тогда ещё страньше.
Попробую MACRO-овскую прогу запстить

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


MACRO-овскую прогу
А её текст где-то можно взять?

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


Однако XXDP тест FPU проходит нормально
И JKDC?? и JKDD?? ?

vva
20.05.2023, 12:41
И JKDC?? и JKDD?? ?
1 JKDAD1.BIC 3-MAR-83 28 000050
2 JKDBD0.BIC 3-MAR-83 52 000104
3 JKDCB0.BIC 3-MAR-83 52 000170
4 JKDDB0.BIC 3-MAR-83 32 000254
Проходят все.


А её текст где-то можно взять?
Могу переслать или сюда скопировать, но здесь "съедаются" лидирующие пробелы/табуляции.

Hunta
20.05.2023, 13:12
Проходят все.
Да, очень странно.
Хотя я уже налетал - только на тестах MMU (и не помню, с какой моделью проца - но в моей теме есть об этом) - тесты без проблем, а драйвер VM ругалсо.
Но раз это на основе реверса - тут только Vslav, скорее всего, сможет помочь - я с его исходниками от реверса пока не возился, в первую очередь из-за того, что они на Verilog-е

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


здесь "съедаются" лидирующие пробелы/табуляции.
Окружать тегами [ CODE ] и [ /CODE ] (пробела после [ и перед ] убрать)

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


Могу переслать
Лог


.DIR *.MAC
20-May-2023
FTEST .MAC 8 20-May-2023 INP .MAC 12 20-May-2023
PRTOD .MAC 5 20-May-2023
3 Files, 25 Blocks
65415 Free blocks

.MAC FTEST

.MAC INP
U 2 .MCALL .PRINT, OCTDIS
?MACRO-E-Errors detected: 1
DK:INP=DK:INP

.MAC PRTOD

.LINK FTEST,INP,PRTOD

.RUN FTEST
Enter first value (int dec): 10
Enter second value (int dec): 20

*** Float operations ***
*** ADD 30 007400
*** SUB 10 007400
*** MUL 200 007400
*** DIV 2 007400
*** NEG 65526 007410
*** ABS 10 007400

*** Double operations ***
*** ADD 30 007600
*** SUB 10 007600
*** MUL 200 007600
*** DIV 2 007600
*** NEG 65526 007610
*** ABS 10 007600

.RUN FTEST
Enter first value (int dec): 12
Enter second value (int dec): 144

*** Float operations ***
*** ADD 156 007400
*** SUB 132 007400
*** MUL 1728 007400
*** DIV 12 007400
*** NEG 65524 007410
*** ABS 12 007400

*** Double operations ***
*** ADD 156 007600
*** SUB 132 007600
*** MUL 1728 007600
*** DIV 12 007600
*** NEG 65524 007610
*** ABS 12 007600

.RUN FTEST
Enter first value (int dec): 144
Enter second value (int dec): 0

*** Float operations ***
*** ADD 144 007400
*** SUB 65392 007410
*** MUL 0 007404
*** DIV 0 007404
*** NEG 65392 007410
*** ABS 144 007400

*** Double operations ***
*** ADD 144 007600
*** SUB 65392 007610
*** MUL 0 007604
*** DIV 0 007604
*** NEG 65392 007610
*** ABS 144 007600

.

vva
20.05.2023, 13:25
А если ввести 0 12?

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

Должно быть прерывание с FEC=4

Hunta
20.05.2023, 13:25
.RUN FTEST
Enter first value (int dec): 0
Enter second value (int dec): 12

*** Float operations ***
*** ADD 12 007400
*** SUB 12 007400
*** MUL 0 007404

!!! Interrupt has been captured !!!
FEC=000004 FEA=002520

*** DIV 12 107400
*** NEG 0 107404
*** ABS 0 107404

*** Double operations ***
*** ADD 12 007600
*** SUB 12 007600
*** MUL 0 007604

!!! Interrupt has been captured !!!
FEC=000004 FEA=002520

*** DIV 12 107600
*** NEG 0 107604
*** ABS 0 107604

.

vva
20.05.2023, 13:31
Запуск на FPGA 12,144


.ru ftest
Enter first value (int dec): 12
Enter second value (int dec): 144

*** Float operations ***
*** ADD 156 007400
*** SUB 132 007400
*** MUL 1728 007400
*** DIV 12 007400
*** NEG 65524 007410
*** ABS 12 007400

*** Double operations ***
*** ADD 156 007600
*** SUB 132 007600
*** MUL 1728 007600

!!! Interrupt has been captured !!!
FEC=000205 FEA=002520

*** DIV 0 107604
*** NEG 65524 107610
*** ABS 12 107600


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


FEC=000205
Такое значение FEC не имеет смысла (с точки зрения доки). Значение всегда четное в диапазоне 2 - 16

Hunta
20.05.2023, 13:31
Ну, что могу сказать.. Уже сказал :)

vva
20.05.2023, 13:33
Например:


.ru ftest
Enter first value (int dec): 0
Enter second value (int dec): 144

*** Float operations ***
*** ADD 144 007400
*** SUB 144 007400
*** MUL 0 007404

!!! Interrupt has been captured !!!
FEC=000004 FEA=002520

*** DIV 144 107400
*** NEG 0 107404
*** ABS 0 107404

*** Double operations ***
*** ADD 144 007600
*** SUB 144 007600
*** MUL 0 007604

!!! Interrupt has been captured !!!
FEC=000004 FEA=002520

*** DIV 144 107600
*** NEG 0 107604
*** ABS 0 107604

Hunta
20.05.2023, 13:37
Такое значение FEC не имеет смысла
В доках искать лень. Посмотрел в PDP-11X (ака PDP-2011) - да, заносятся только четные значения.

vva
20.05.2023, 13:42
И чем сие безобразие может быть вызвано?
1. - "огрехими" генерации Quartus?
2. - "особеностями" макетной платы?
3. - ошибками в микрокоде FPU?

Кто-нибудь может повторить этот проект на другой FPGA?

Alex_K
20.05.2023, 13:44
Такое значение FEC не имеет смысла (с точки зрения доки). Значение всегда четное в диапазоне 2 - 16
По документации на KDF11-BA он вообще 4-х разрядный, от 2 до 14.

Hunta
20.05.2023, 13:50
"огрехими" генерации Quartus?
Вроде на такое не налетал


"особеностями" макетной платы?
Что-то сомнительно - там же весь проц с потрохами в FPGA


3. - ошибками в микрокоде FPU?
Маловероятно. А вот какая-нибудь несинхронность обмена CPU и FPU - более вероятно

vva
20.05.2023, 13:56
По документации на KDF11-BA он вообще 4-х разрядный, от 2 до 14.
По доке на FP11-E 2 -16
на KDF11-AA: 2 - 12

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


несинхронность обмена CPU и FPU
По моему в варианте команды деления аккум-аккум все происходит внутри FPU (и прерывание генерится FPU).
Вариант команды деления память-аккум работает без ошибки.

Hunta
20.05.2023, 14:06
По моему в варианте команды деления аккум-аккум все происходит внутри FPU
Там идёт взаимодействие между CPU и FPP при передаче аргументов - приёме результов, если они на стороне CPU и есть некоторая зависимость от команда, когда в качестве одно или обоих из них выступает регистр. То есть на некоторых командых FPU понадобится или взять содержимое регистра CPU или сохранить туда что-то. И вот тут может быть как ошибка в микрокоде, так и не синхронность взаимодействия. Мне кажется, что в случае ошибки в микрокоде - оно бы вылезло на тестах, но.. именно, что кажется. А в принципе - листинги тестов скорее всего доступны - можно глянуть, есть ли в них тестирование DIVx на регистрах

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


Вариант команды деления память-аккум работает без ошибки.
Потому что здесь всё всегда однозначно - память, а не регистр, и она будет браться через проц

vva
20.05.2023, 14:15
Кто-нибудь может повторить этот проект на другой FPGA?
У меня есть OMDAZZ, но даже в мин. конфигурации (KSM+RK+Bootrom) текущий проект занимает 13000 - то есть "не влезет".
Увы.