Просмотр полной версии : Программирование на УКНЦ как?
Страницы :
1
2
3
4
5
[
6]
7
randomizer
11.03.2020, 13:56
А как же функциональные языки? Ведь учится программировать нужно начинать именно с фунциональной парадигмы, дабы сходу не извратить мышление всякими ООП и прочим :v2_dizzy_punk:
К тому же, хотя бы даже Haskell - используют в проде. Не говоря уже о Clojure(Lisp) и прочих.
Oleg N. Cher
11.03.2020, 13:59
Функциональные языки по-прежнему имеют очень небольшую применимость, так что не соглашусь.
Но расширять кругозор конечно не помешает. Haskell в проде? Не слышал. Erlang в проде ещё куда ни шло. Ну немного Clojure. Наверное.
randomizer
11.03.2020, 14:28
Haskell в проде? Не слышал.
Просто это за пределами круга интересов. Haskell - Biocad (https://biocad.ru/) я их запомнил просто потому что у меня их мерч на работе лежит. Примеров хватает, стоит лишь побывать на конференции или митапах по функциональному программированию. Мнение точно изменится.
Сам же в прод на Elixir писал.
blackmirror
11.03.2020, 19:20
И убить людей, например. Или чего-то взорвать. А на более тяжёлом, но более безопасном языке - нет. Так что тут не так всё однозначно, как Вы пытаетесь показать.
Эта ситуация не исключена и в "безопасных языках", к примеру для систем реального времени слишком поздно вычисленный результат является бесполезным, поскольку окружающая ситуация могла очень сильно измениться и запоздалая реакция уже не будет правильной. Тут проблемы могут быть не только со сборщиком мусора, есть много задач которые решаются итеративно, и если для некоторого сочетания параметров задача будет решаться существенно дольше чем обычно, медленный но безопасный язык может стать очень опасным.
В этом свете фраза "засирать мозги Паскалем" для меня звучит как "дать обучающемуся стабильную хорошую базу для алгоритмирования, притом чистую и не перегруженную". Помните как изобретали разные Кумиры и Рапиры? Вот примерно для того же. Угу. Вирт сочинил свой Паскаль именно для обучения. И все эти разговоры о базе для алгоритмирования и пр. - это мнение Вирта, и его последователей. А вот Кнут для первичного обучения сочинил свою ЭВМ "MIX" и начинал обучать студентов с программирования в кодах и на асме. Можно, конечно поспорить, кто круче: Вирт или Кнут, но должен заметить, что подход Кнута, скажем так, реальнее. Студент сразу понимает, что компьютер исполняет достаточно мелкие операции с ограниченным набором объектов, что какое-то серьезное действие требует большого количества этих элементарных операций, и, учитывая, что всё в этой модели конечное, нельзя безрассудно накручивать и код, и память, и пр.. Подход Вирта наоборот, все скрывает за абстракцией и потом, когда вдруг находится что-то невыполнимое в рамках этой абстракции и возникает необходимость перейти на уровень асма, многие студенты банально впадают в ступор...
А потом человек после небольшого изучения тонкостей синтаксиса легко овладеет любым средством.Да-да. Только вот есть еще обыкновенная лень. Выучил студент Паскаль, и хватит. А потом сочинил он какую-то программу, потом утратил к ней интерес, выложил ее в открытый доступ и забыл. Кто-то ее находит, но под современными виндами она не идет. Надо бы подправить, а она на давно забытом диалекте Паскаля, которого под современные винды тоже нет...
Oleg N. Cher
11.03.2020, 23:15
А чем это принципиально отличается от того, что старая программа на давно забытом диалекте Турбо Си, которого под современные винды тоже нет?
Но вообще обвинять Вирта в том, что он обучает не на асме, а "сочинил Паскаль" и бедные ленивые студенты оболванены и не могут перейти на уровень асма - это смешно. Поглядите на другие сочинённые языки - C#, Java, это их в большей степени касается.
- - - Добавлено - - -
медленный но безопасный язык может стать очень опасным.Как показала практика Оберона - между словами "медленный" и "безопасный" не надо ставить знак равенства. Бывает и иначе.
Здесь вопрос в том, насколько дорого будут стоить абстракции, которые считаются крутыми и современными, что современный прогер не будет рассматривать средство без оных. Вот они стоят всё дороже.
Кстати, Паскаль- и Оберон-языки как раз очень близки к железу, притом к разному. Им обычно не требуется ВМ или интерпретация.
- - - Добавлено - - -
Коллеги, давайте ближе к теме. Почему наше с Хоботом желание покодить на Паскале вызывает столько обсуждения о том, кто какие языки предпочитает? Какая здесь связь? Ну хочется нам так, и что?
и если уж говорить о моем стеке, то он сейчас
C / C++ начиная от PDP11 кончая Linux-ом и микроконтроллерамиВот и чудно. Поделитесь, пожалуйста, с нами опытом использования Си для PDP-11. Мне действительно интересно какие есть компиляторы и как их использовать.
В эмуле Патрона я не смог запустить Си, который прислал мне Хобот. Там требуется назначить диск C, но я не разобрался как это сделать одним вызовом с компилятором. Поделитесь как это надо делать правильно?
Читать (Ctrl+F "assign hd1: c:"):
https://www.phantom.sannata.org/viewtopic.php?t=31098
То есть, мне нужно из батника при вызове эмуля Патрона подать сразу две команды внутрь:
rt11.exe assign hd1: c:
и
rt11.exe run cc файл.c
Вторая команда без первой не работает. Если подать их двумя вызовами, то второй вызов уже не будет помнить ассигн первого. Две команды в строку написать нельзя. Или можно?
То есть, мне нужно из батника при вызове эмуля Патрона подать сразу две команды внутрь:
rt11.exe assign hd1: c:
и
rt11.exe run cc файл.c
Вторая команда без первой не работает. Если подать их двумя вызовами, то второй вызов уже не будет помнить ассигн первого. Две команды в строку написать нельзя. Или можно?
Сделйте батник на RT-11, называется любым именем с расширением .COM, например NAME.COM, внутри каждая строка это одна команда на терминале RT-11.
Затем вызываете из RT-11 как @NAME
blackmirror
11.03.2020, 23:53
Кстати, Паскаль- и Оберон-языки как раз очень близки к железу, притом к разному. Им обычно не требуется ВМ или интерпретация.
Сейчас любой алгоритмический язык крайне далёк от железа, там давно уже многоядерность, выполнение инструкций пачкой и миллионы параллельных процессов, а программисты всё еще думают последовательно.
Oleg N. Cher
12.03.2020, 00:09
Ну, Оберон и на это ложится. См. Active Oberon (https://ru.wikipedia.org/wiki/Active_Oberon), диалект для параллелизма, на активных объектах.
Я назову те несколько достоинств Оберон-языков, которые вы все, вероятно, даже не посчитаете достоинствами.
1. Возможность развивать маленькими силами. Например, Ofront+ сейчас развиваю в основном я один.
2. Языковое конструирование, подобное железячному. Железо для любителей паять, а это для любителей покодить.
3. Независимость от трендов и современных тенденций.
4. Стабильность и проверенность временем. Сбалансированный языковой минимум. Академическая основа. Не разменивается на модные рюшики.
Так что и такой вот взгляд возможен. В противовес иметь средство от сторонней фирмы, запакованное в коробке. В котором уже всё для бедного ленивого программиста предусмотрено.
А чем это принципиально отличается от того, что старая программа на давно забытом диалекте Турбо Си, которого под современные винды тоже нет?Тем, что я, зная Си, могу загрузить этот исходник в современнфй визуальный Си и портировать его, особо не вникая в детали. А переписывать на Си паскальную программу - бррр!
Но вообще обвинять Вирта в том, что он обучает не на асме, а "сочинил Паскаль" и бедные ленивые студенты оболванены и не могут перейти на уровень асма - это смешно. Главная вина Вирта в том, что он сочинил пригодный к использованию учебный язык. И ленивые студенты, выучив этот язык, считают, что этого достаточно. Вон, наш коллега Хобот - типичный пример. В то время, как студент, обученный по методике Кнута, будет вынужден выучить что-то реальное.
Меня, в общем-то, так и учили. Начали с программирования в машинных кодах (восьмеричных) ЭВМ "Минск-22", потом был Автокод "Инженер" этой же машинки, далее я обучался сам. Потом была Минск-32 с ее Системой Символического Кодирования (ССК - Минск-32, так назывался ее ассемблер) и Фортраном, потом наши клоны Системы-360/370, ЕС ЭВМ, потом Э-60, потом, совсем немного, писюк, после чего я сменил род деятельности. И только несколько лет назад, уже будучи пенсионером, в порядке хобби, решил вспомнить программирование и занялся микроконтроллерами. Ну, и, из ностальгических соображений, тусуюсь здесь...
Oleg N. Cher
12.03.2020, 11:21
Тем, что я, зная Си, могу загрузить этот исходник в современнфй визуальный Си и портировать его, особо не вникая в детали. А переписывать на Си паскальную программу - бррр!Та ладно? Ну так а я, зная Паскаль, загружу исходник на ТурбоПасе в Дельфи или ФриПаскаль и очень легко заставлю его работать. Между Паскалем, Модулой и Обероном портировать значительно проще, чем между MS Visual C и Borland C. А уж если пошли плюсы, то это брррр.
Кстати, Оберон есть в проде. Сам внедрял, знаю людей, которые внедряют. Хотите плеваться - плюйтесь. Но он там себя неплохо чувствует.
- - - Добавлено - - -
Мне Наташа Зотова из Zosya Entertainment сказала, что их главный кодер, разработчик игр Valley of Rains и Drift, обучался на Паскале и не знает никаких других ЯВУ, кроме Паскаля. Только Паскаль и асм. Так что не надо, ладно?)
- - - Добавлено - - -
http://i.piccy_.info/i9/ef665383555d9d0dc2ee246f1de3908f/1584001325/22384/1320134/Zosya.png
Коллеги, давайте ближе к теме. Почему наше с Хоботом желание покодить на Паскале вызывает столько обсуждения о том, кто какие языки предпочитает? Какая здесь связь? Ну хочется нам так, и что?
Вот и чудно. Поделитесь, пожалуйста, с нами опытом использования Си для PDP-11. Мне действительно интересно какие есть компиляторы и как их использовать.
https://github.com/yshestakov/pdp11-toolchain/blob/master/hello-gcc/hello.c
Пример выполнения (на Linux или MacOS):
me@mac hello-gcc> make run
simh-pdp11 simh.ini
PDP-11 simulator V3.9-0
Disabling CR
Disabling XQ
CPU, 11/05, idle enabled, stability wait = 20s, autoconfiguration enabled, 64KB
PC: 001000
1000: MOV #10000,SP
1004: MOV #0,-(SP)
1010: MOV #1312,-(SP)
1014: MOV #1,-(SP)
1020: JSR PC,1034
1024: ADD #6,SP
1030: HALT
1032: NOP
1034: MOV R5,-(SP)
1036: MOV SP,R5
1040: ADD #177774,SP
1044: MOV #1316,177776(R5)
1052: MOV 177776(R5),R0
1056: MOV R0,R1
1060: INC R1
1062: MOV R1,177776(R5)
1066: MOVB (R0),R0
1070: MOVB R0,R0
1072: MOV R0,177774(R5)
1076: BR 1142
1100: MOV 177774(R5),R0
Hello, GCC world!
HALT instruction, PC: 001032 (NOP)
SP: 010000
Goodbye
Крутится у меня в голове, что одна из первых версий Oracle, после того, как его переписали на С, компилировалась компилятором C не от DECUS-а (варианты которого для PDP-11 под RT и RSX, собственно, и бродят по инету), а от как бы не WATCOM-а. Но - от WATCOM - это абсолютно не точно, точно только то, что у меня тогда был (может и сейчас живой где то) какой-то компилятор С под RSX, с помощью которого я с пяток модулей из Oracle восстановил до исходников на С, причём (опять по памяти) этот компилятор делал сразу .obj файлы.
BlaireCas
12.03.2020, 22:33
Oleg N. Cher, А тебе ведь надо на макро-11 лишь вывод спрайтов сделать? Причем рисовать должен ПП (ибо только он умеет во все три плана рисовать).
Всей памятью ПП можно будет пожертвовать если допустить что из игры в систему RT-11 выходить будет не нужно (ну как на спектруме мол загрузил игру и все, выход через reset).
Для той карточной игры может быть видимо лишь проблема в том что в колоде 36 карт. Каждая карта если полностью хранить с 8-ю цветами это три байта на 8 пикселей. Пусть одна карта будет 48 х 60 это 6*60*3 = 1080 байт. Если так все карты делать то это скушает вместе с кодом игры все адресное пространство ЦП. А в ПП память влезет только 32 килобайта. Видимо надо будет уменьшить цвета до 4-х.
Плюс придумать как грузить данные и код в память ПП. Ведь паскаль будет компилять в .sav который разумеется ни в какое адресное пространство ПП лезть и не должен. То-есть надо будет графику отдельно подгрузить.
- - - Добавлено - - -
С паскалем под RT-11 совершенно дел не имел. Даже не знаю какой он код там генерирует. А так игрушка видится в таком плане - код паскаля как-то должен загрузить в память ПП свой код (спрайты и данные). Основная логика игры сидит в памяти ЦП, а ПП только принимает команды мол нарисовать спрайт, зажужжать там динамичком и т.д. Там придется на макро-11 все сделать, это не прям мегасложно. Я такое даже напишу для вас. Но как паскуаль этот грузит данные с диска - тут я даже и не знаю.
Oleg N. Cher
13.03.2020, 01:36
Я решил ограничиться двумя планами, как это сделали Вы и Никита Зимин. Думаю, доступ к ПП слишком сложен, да и жертвовать выходом в RT-11 не хочется. Карты будут отрисоваться по частям двухцветными тайлами, которые можно хранить в виде пары цветов - фон и цвет рисовки - и битовой маски, где каждый бит отвечает за то, фон это или цвет. Так сэкономится память. Памяти ведь у УКНЦ больше, чем у Спектрума 48Кб, да и подгрузки есть, на крайний случай.
Да, я тоже склоняюсь к тому, что надо ЦП сделать диспетчером, который просто отсылает в ПП команды типа: нарисуй спрайт, линию и т.д. Только я не знал, что ПП умеет обращаться ко всем битпланам. Я думал, что к двум первым - только ЦП. Вообще пока смутно представляю как распределена память в УКНЦ и как там может исполняться .sav размером > 64 Кб.
То есть, нужен графический движок, который будет работать через ЦП и ПП, где ЦП будет диспетчером, а ПП выполнит роль видеокарты. Видимо, примерно так.
Из Паскаля загружать файлы с диска несложно встроенными средствами. Я это проверил написанием на коленке простого вьювера BMP. Но думаю обойтись без подгрузок. Их только на самый крайний случай.
Кстати, было бы интересно увидеть сравнение качества кодогенерации OMSI Pascal, нативного Си для RT-11 - CC и GCC из pdp11-toolchain Юрия Шестакова. Какой вариант лучше прорабатывать?
распределена память в УКНЦ и как там может исполняться .sav размером > 64 Кб.
Для ЦП всё не фонтан.
1. Фундаментальное ограничение простых М-ЭВМ 56 Кбайт прямо адресуемой ОЗУ - адреса 000000-157776 ( 8 ). ( 0-55.99 Кбайт ).
2. Из них священные адреса :
000000 - 000376 - не стоит и думать о них, если софт работает под RT-11 .
Подробнее о этой области - в КД на систему от НЦ - довольно точный перевод от DEC, поставлялся с БК11 без "М" и с ДВК-2 МС0501 и МС0502.
3. Ядро ОС , для SJ ( однозадачника ) - адреса ориентировочно с 134000 и выше - см. КД на ОС, в зависимости от ревизии и версии ОС могут малость меняться.
4. Добавочный оверлей ОС, для работы с файлами - еще ~8 Кбайт, итого адреса порядка свыше 114000 - заняты ОС. Но ОС содержит команды, позволяющие этот компонент выгружать и загружать по ходу исполнения программы .
5. Библиотечка Паскаля - она не есть равна 000000, и даже не 1 Кбайт - еще досадный минус ОЗУ.
Итого - язык в мусорку, пишите на MACRO сразу.
Рисунки карточек рисуйте ( на экране ) по ходу вывода ( из малых графических форм ), не храните сканы натуральных карт , особенно если не работаете с винчестера/ЭД.
Если надо временно выгружать ядро ОС ( например, в ЭД ) - перед его удалением ( из ОЗУ ЦП ) не забудте запретить прерывания, а после восстановления ядра - можно и разрешить прерывания.
Oleg N. Cher
13.03.2020, 04:24
Спасибо за инфу! :-)
Собираюсь заморочиться именно разработкой на ЯВУ, вставки на асме конечно неизбежны, но хотелось бы свести их к минимуму.
Поэтому не собираюсь юзать оверлеев, резидентов и всего такого прочего. Если кто-то заинтересуется помочь с обменом с ПП, будет здорово. Но постараемся это скомпоновать как библиотеку для вызова из ЯВУ.
Сколько у нас есть доступной линейно адресуемой (без фрагментации) памяти для ЦП? Килобайт 30-35 на игру, по идее, должно хватить. Может даже меньше.
OMSI Pascal даёт компактный размер, т.е. потери на весь рантайм - 2-3 блока. Это не так уж и плохо. Насчёт Си не знаю, надо пробовать.
Пусть одна карта будет 48 х 60 это 6*60*3 = 1080 байт. Если так все карты делать то это скушает вместе с кодом игры все адресное пространство ЦП.
Можно сделать шаблон 3х карт с картинками, пустой карты и спрайты мастей. На пустой шаблон выводить масти согласно закодированного порядка в списке. Для карт с картинками планами "играть" чтобы они цветами отличались. Сэкономишь памяти почти на порядок.
- - - Добавлено - - -
Спрайты мастей сделать однобитными - черные BICом выводить, а красные во 2й план.
SuperMax
13.03.2020, 07:07
Спасибо за инфу! :-)
Собираюсь заморочиться именно разработкой на ЯВУ, вставки на асме конечно неизбежны, но хотелось бы свести их к минимуму.
Сколько у нас есть доступной линейно адресуемой (без фрагментации) памяти для ЦП? Килобайт 30-35 на игру, по идее, должно хватить. Может даже меньше.
рекомендую изучить тему
https://zx-pk.ru/threads/29643-portirovanie-igry-quot-last-mission-quot-na-uknts/page27.html
https://zx-pk.ru/threads/29643-portirovanie-igry-quot-last-mission-quot-na-uknts/page30.html
а именно идею как использовать ЦП на полную:
в случае с применением контроллера AZ, который подключен на шину ЦП, можно использовать _всю_ память ПП под игру
что важно - в таком режиме легко реализовать и возврат в RT11
и подгрузку информации в диска во время загрузки новых уровней
Про AZ подробнее описано в этой теме: УКНЦ + AZ - вариант контроллера псевдодисков на микро-SD для УКНЦ. (https://zx-pk.ru/threads/30596-uknts-az-variant-kontrollera-psevdodiskov-na-mikro-sd-dlya-uknts.html)
Основная страничка поддержки проекта [инструкции, техническое описание, обновления фирмвари]
Контроллер псевдодиска на MicroSD (https://forum.maxiol.com/index.php?showtopic=5388)
Контроллер псевдодиска на MicroSD на шину МПИ: особенности версии для УКНЦ (https://forum.maxiol.com/index.php?showtopic=5491)
Контроллер псевдодиска на MicroSD для УКНЦ: сборка и наладка конструктора контроллера (https://forum.maxiol.com/index.php?showtopic=5492)
Да, мне не удалось запустить компилятор Си под эмулем Патрона. Там требуется назначение диска C, с чем я не разобрался. Без этого он не хочет работать. Хотя примерно понял куда копать.Вот более-менее настроенный комплект (https://yadi.sk/d/mzkVeecUIDDbMQ). HD_SYS_51.DSK монтируем на HD2, папку CTST на HD1, загружаемся с HD2 и вперед! Исходники в папке CTST правим любимым писюшным редактором, затем в эмуляторе запускаем командный файл, и вперед. Там есть две тестовых задачки - TST1 - обычный Hello, world и TST2 - чуть посложнее. Командный файл для своих задач делать по образу и подобию. Если вдруг захочется поработать на реальном железе, раскомментировать вызов редактора EDK (или заменить его вызов на свой любимый редактор для RT-11).
Если вдруг захочется разбить исходник на несколько .C файлов, из которых получится несколько объектных файлов, то, когда их много, я делал объектную библиотеку для этого проекта, тогда командные файлы будут посложнее. Если надо - подскажу. У меня (тогда) необходимость разбить исходник на несколько файлов возникла когда он (исходник) перестал влезать в оперативку редактора EDK. Под эмулятором этот вопрос, скорее всего, не возникнет.
Да, эмулятор Патрона иногда не замечает, что кто-то из посторонних (в смысле, редактор из-под винды) что-то изменил в папке для HD1. В таком случае помогает команда SQ HD1:.
...
5. Библиотечка Паскаля - она не есть равна 000000, и даже не 1 Кбайт - еще досадный минус ОЗУ.
Итого - язык в мусорку, пишите на MACRO сразу.
За Паскаль не скажу. Но в случае с GCC для pdp-11 платформы не поставляется стандартная LibC. Есть только кросс-компилятор + binutils (линкер, дебагер, все такое). Потому программа на C может быть достаточно компактной.
Другое дело -- поддержка процессоров 1801ВМ1/ВМ2 в GCC в части EIS инструкций. Я этим начал заниматься год тому, разобрался что к чему и как писать тесты на генератор кода. Но забросил это хобби, переключился на IDA, соотв. модуль декомпиляции для ВМ1 на Python (кросс-платформенный), и декомпилил им ПЗУ-шки. Листинги из-под IDA конвертил в синтаксис GNU AS, компилировал обратно в бинарный код и сравнивал с оригинальным бинарником.
BlaireCas
13.03.2020, 12:05
как это сделали Вы и Никита Зимин
У меня 5 цветов в игре считая белый и черный. Немного больше чем 2 плана. Но конечно не прям все 8.
- - - Добавлено - - -
Думаю, доступ к ПП слишком сложен
Нет, он как-раз не сложен на асме. Но я-ж сказал что самая проблема будет туда отправить код с паскаля. Тут уж я этого не знаю как такое забацать. И потом уже скорей-всего нельзя будет нативно что-то читать с дисковода или с винчестера если всю его память там закушать. Так-то там при разработке самой УКНЦ он и задумывался как нечто такое что не мешает ЦП и рисует всякие символы, графоний, работает с диском и пищит пищалкой.
- - - Добавлено - - -
Надо будет все-ж запустить паскаль под RT-11, тут верно говорят что написать что-то можно только на ассемблере ибо ну не запихать во второй процессор что-то по-дефолту. Не компиляет небось паскаль всякие .asect .1000. Сначала надо бы сделать загрузку бинарника на паскале.
- - - Добавлено - - -
2. Из них священные адреса
Нет же, машинка наша - почему все адреса не заюзать? Система сразу идет лесом после загрузки игрушки. Я так и делал в своей. Выхода в систему нету ну что-ж поделать.
Система сразу идет лесом после загрузки игрушки.
?!
А Паскаль вслед за ядром ОС разве не идет ?
*
Для прояснения ситуации с Паскаль-котом берется файл игры .SAV и смотрится в DESS.SAV - какие вызовы ЕМТ он использует.
Если хоть один в наличии - ядро удалять нельзя.
Oleg N. Cher
13.03.2020, 15:11
У меня 5 цветов в игре считая белый и черный. Немного больше чем 2 плана. Но конечно не прям все 8.:-) Установка палитры для каждой строки?
Кстати, было бы интересно посмотреть как это делается. Вообще было бы интересно увидеть разные мелкие штучки, реализованные на ассемблере. Вот как есть рубрика Этюды для Спека. Для УКНЦ или БК такого особо не встречал, а жаль.
Прикинул, что мне понадобится 32-битная целочисленная арифметика. Или на PDP-11 оптимальнее использовать плавучку? Кстати, сопроцессора ведь там нет, всё делается подпрограммами в целых числах?
Но я-ж сказал что самая проблема будет туда отправить код с паскаля.Если привязаться к конкретным адресам, то просто перебросить массив из Паскаля в память ПП. Он конечно будет занимать и основную память, т.е. продублируется. Но тут уже ничего не поделаешь. Можно после переноса кода в ПП использовать эту память в ЦП для других целей.
Можно даже предусмотреть переносимый код. Или код с автонастройкой адресов. Ну если понадобится.
И потом уже скорей-всего нельзя будет нативно что-то читать с дисковода или с винчестера если всю его память там закушать.Но можно же и не всю. Можно этот графический драйвер для ПП снабдить только нужными функциями. Можно их собрать в виде объектников и линковать в бинарь, чтобы адреса настроил сам линкер.
Драйвер графики для ПП я конечно не предлагаю писать на Паскале.
Система сразу идет лесом после загрузки игрушки. Я так и делал в своей. Выхода в систему нету ну что-ж поделать.Ну тоже вариант конечно. Для игры вполне годится, это ж не системная программа.
- - - Добавлено - - -
За Паскаль не скажу. Но в случае с GCC для pdp-11 платформы не поставляется стандартная LibC. Есть только кросс-компилятор + binutils (линкер, дебагер, все такое). Потому программа на C может быть достаточно компактной.Юрий, есть ли интерес попробовать скрестить Ofront+ и GCC для PDP-11? Чтобы разрабатывать на Обероне для PDP-11 машинок. Библиотечин разных наработать, для графики и прочих вещей. Я когда-то ковырял этот GCC, хотел сделать подсистему UkncDev, но он слегка не похож на более новые версии, где-то там я споткнулся и не смог разрулить. Деталей, впрочем, уже не помню.
Если согласитесь и интерес есть, это будет мощный стимул для меня. Если же нет, скорее всего, я ограничусь OMSI Pascal + Macro-11.
...
Юрий, есть ли интерес попробовать скрестить Ofront+ и GCC для PDP-11? Чтобы разрабатывать на Обероне для PDP-11 машинок. Библиотечин разных наработать, для графики и прочих вещей. Я когда-то ковырял этот GCC, хотел сделать подсистему UkncDev, но он слегка не похож на более новые версии, где-то там я споткнулся и не смог разрулить. Деталей, впрочем, уже не помню.
Я ничего не знаю про Ofront+, кроме того, что это препроцессор из языка Oberon в C код. И в GCC я разбираюсь на уровне "потратил неделю-две на изучить устройтво генерации в pdp-11 бакенде". Не думаю, что у меня будет время что-то сделать в GCC кроме обещанного Vslav в части поддержки ВМ1 и ВМ2 CPU.
Прикинул, что мне понадобится 32-битная целочисленная арифметика. Или на PDP-11 оптимальнее использовать плавучку? Кстати, сопроцессора ведь там нет, всё делается подпрограммами в целых числах?Аппаратная плавучка есть только у 1801ВМ4 - это арифметический сопроцессор для 1801ВМ3. ДВК с этой парочкой (ВМ3+ВМ4) выпустить не успели, можно считать, что плавучки нет ни в одном из серийных изделий на 1801-х микропроцессорах. Да, та плавучка (FIS), которая есть у ВМ2, это программная эмуляция FIS, программой, расположенной в теневом ПЗУ. Или, в случае УКНЦ, в теневом ОЗУ ЦП.
А 32-битная арифметика на PDP-11 - это несложно и быстро.
BlaireCas
13.03.2020, 19:46
какие вызовы ЕМТ он использует.
Да по-хорошему он их и не должен будет использовать. Вот в плане того как он компиляет я нубас и ничего не скажу. Но не надо с него такие вызовы делать. Можно сделать так чтоб на нем только логика висела. А остальное ПП сделает через запись в ячейки памяти мол "нарисуй бубнового короля там-то".
- - - Добавлено - - -
:-) Установка палитры для каждой строки?
Да, ее можно установить и для каждой строки, но ИМХО дело не в ней. Просто ЦП не умеет физически добраться до третьего плана видеопамяти. Ну не знаю почему так сделано, поэтому если более 4-х цветов (вместе с черным) то увы - только в периферийный проц лезть. Пока не думай об этом. Считай что он будет обрабатывать команды и рисовать. Делай логику игрушки, можно пока прям через вывод TTYOUT - потом переделается
читай что он будет обрабатывать команды и рисовать
Нужно не забывать, что ПП достаточно тормозной и доверять ему всю обработку графики неразумно, у него и без нее забот хватает.
Оптимально через ПП выводить статичную графику (фон, интерфейс, заставки полноцветные).
Вот более-менее настроенный комплект.Не поленился, проверил этот Си под RT-11 V05.07, той выборки из нее, которая представлена на HD0 Патрона. RT-11 V05.07 расходует на себя заметно больше памяти, чем 5.1 и я побаивался, что памяти для СС будет маловато. Оказалост, памяти хватает.
Действия такие. Надо поместить на какой-то отдельный диск содержимое моего CC.DSK, расположенного на файл-образе HD_SYS_51.DSK и назначить туда логическое устройство C:. Я, по-простому, смонтировал его на LD2, но можно и скопировать его в файловую систему хоста и смонтировать полученный файл-образ на какой-то HDn. Ну, и DK назначаем на HD1, и можно программировать. Не знаю, правда, как компилятор будет понимать современные даты..
Итак, действия. (1) Средствами эмулятора монтируем на HD1 папку CTST. (2) Этими же средствами монтируем на HD2 файл-образ HD_SYS_51.DSK. Далее работаем из RT-11.
MO LD2 HD2:CC
AS LD2 C
AS HD1 DK
@TST2Последняя команда - это проверочное действие. Должны нормально пройти компиляция, линковка и запуск сишной программы TST2.
Да, сведения о том, что смонтировано на HDn запомнит эмулятор, сведения о LD2 запомнит драйвер LD, а вот сведения о назначениях запоминать некому. Поэтому при повторном запуске эмулятора их придется повторить. Ну, или собрать в отдельный командный файл. Как вариант - добавить в стартовый командный файл RT-11.
Наткнулся на прикольную игу (прадедушку LIMBO).
https://www.old-games.ru/game/2450.html
https://pic.maxiol.com/thumbs2/1584442888.1388899422.245049e37c70879db.png (https://pic.maxiol.com/?v=1584442888.1388899422.245049e37c70879db.png&dp=2)
Если на УКНЦ фон вывести допустим в планы 1,2 и заблокировать их, а синий цвет в палитре поменять на черный и рисовать в 3м плане, возможно ли добиться подобного эффекта?
Если на УКНЦ фон вывести допустим в планы 1,2 и заблокировать их, а синий цвет в палитре поменять на черный и рисовать в 3м плане, возможно ли добиться подобного эффекта?
Подобного - это какого?
Чтобы два слоя были статическими, а третий менялся? Конечно. Что этому мешает?
Просто это уберет кучу проблем с сохранением-восстановлением фона.
А так "стильно-модно-молодежно". :)
- - - Добавлено - - -
Еще бы приемлемый горизонтальный однобитный скролл придумать.
Хотя если объектов немного проще спрайты двигать (тут как раз пригодится процедурка вывода части спрайта).
randomizer
18.03.2020, 14:50
Задумал было отказаться полность от ОС и работать с дисководом напрямую.
Но возник вопрос - как правильно это делать?
В какой то теме натыкался на то что form писал о реализации минимального драйвера MZ (который работает только с диками на 800КБ). Помню что судя по контексту должны были присутствовать ссылки на драйвер, но их не было.
В общем разыскиваю примеры как строится передача данных с дискет.
Немного о затруднениях:
В массиве параметров который передается ПП для того чтобы он выполнил чтение, задается количество слов для чтения.
Здесь я наткнулся на несколько неожиданное поведение:
допустим запросил я считать 512 слов, начиная с сектора 10(последнего на дорожке), головки 0 и дорожки 0
соответственно ПП нужно прочитать два сектора, и второй сектор будет прочитан со следующей дорожки(1), хотя я ожидал что будет произведено чтение с другой стороны диска.
Ну да ладно, чтобы особо не заморачиватся я могу раскидать данные внутри образа так что каждая непрерывная последовательность будет находится на одной стороне диска.
Но наткнулся на другое, когда запрашиваю чтение более 2000 слов(не пытался установить точное значение), что то переклинивает, сначала считывается примерно 2000 слов, а потом головка дисковода начинает метаться, и через какое то время все прекращается.
допустим запросил я считать 512 слов, начиная с сектора 10(последнего на дорожке), головки 0 и дорожки 0
соответственно ПП нужно прочитать два сектора, и второй сектор будет прочитан со следующей дорожки(1), хотя я ожидал что будет произведено чтение с другой стороны диска.
Но наткнулся на другое, когда запрашиваю чтение более 2000 слов(не пытался установить точное значение), что то переклинивает, сначала считывается примерно 2000 слов, а потом головка дисковода начинает метаться, и через какое то время все прекращается.
В своё время восстановил текст драйвера MZ и чего то там с ним делал. Не помню, что бы на что то налетал такое особенное. Вечером посмотрю на свои исходники
Lethargeek
18.03.2020, 19:18
Сейчас любой алгоритмический язык крайне далёк от железа, там давно уже многоядерность, выполнение инструкций пачкой и миллионы параллельных процессов, а программисты всё еще думают последовательно.
ага, любой, как же... чтоб ты знал, один из языков современного стандарта промавтоматики зачем-то базируется на паскале (вероятно, чтобы пэтэушники поменьше косячили))
blackmirror
18.03.2020, 19:40
Lethargeek, в стандарте можно много чего написать, а как это поддерживается в железе?! Если память мне не врёт, то турбопаскаль поддерживал доступ ко всем внешним контекстам для вложенных процедур. Уж не знаю это часть стандарта или исключительно его особенность, но мне что-то не попадались железяки с каким-то аппаратными регистрами для ускорения этого дела. Везде стандартные SP/BP и копирование этой кучки указателей через стек.
сли память мне не врёт, то турбопаскаль поддерживал доступ ко всем внешним контекстам для вложенных процедур
Везде стандартные SP/BP и копирование этой кучки указателей через стек.
Не знаю, как для турбопаскаля на ЦеПе, а на PDP-11 и для нерекурсивных процедур это всё просчитывается в момент компиляции, ничего копировать не нужно.
Lethargeek
18.03.2020, 20:02
Lethargeek, в стандарте можно много чего написать, а как это поддерживается в железе?!
"это" что? в стандарте 5 языков, причём 3 из них - графические, и все их можно применять вперемешку
взаимодействие с железом дело оси, а программист фактически пишет что-то вроде обработчика прерывания
randomizer
18.03.2020, 21:34
В своё время восстановил текст драйвера MZ и чего то там с ним делал. Не помню, что бы на что то налетал такое особенное. Вечером посмотрю на свои исходники
Я передавал неправильный тип устройства в массиве параметров - 01(односторонний диск). После этого просил прочитать со второй стороны, когда сектор заканчивает, должен осущестится переход на другую дорожку, но тут что то переклинивало и головка дисковода начинала метаться между текущей и следующей дорожкой. :v2_dizzy_facepalm:
Я передавал неправильный тип устройства в массиве параметров
Ну вот - я же говорю, ничего там необычного не было :) Видимо, в ПЗУ не учли такой прикол :)
blackmirror
18.03.2020, 22:38
Не знаю, как для турбопаскаля на ЦеПе, а на PDP-11 и для нерекурсивных процедур это всё просчитывается в момент компиляции, ничего копировать не нужно.
Там не только с рекурсией проблемы, допустим у нас есть процедура D внутри которой описаны процедуры A,B,C, причём процедура A вызывается из B и C, в этом случае процедуре A должны передать указатель на локальные переменные процедуры D, иначе доступа к ним она не получит. Ну и такая же фигня может случиться на любом уровне, где есть несколько вложенных процедур и в итоге копировать придётся несколько указателей.
"это" что? в стандарте 5 языков, причём 3 из них - графические, и все их можно применять вперемешку
взаимодействие с железом дело оси, а программист фактически пишет что-то вроде обработчика прерывания
Это всё прекрасно, только этим языкам уже лет 20 и не удивительно что на тот момент они как-то соответствовали возможностям железа. С другой стороны, если взять язык релейных диаграмм, то реально никаких реле внутри нет, кроме возможно силовых на выходе и изолирующих на входах. Так что тезис о том, что алгоритмические языки сильно отстали от железа промышленная автоматика никак не опровергает.
Lethargeek
19.03.2020, 01:14
Так что тезис о том, что алгоритмические языки сильно отстали от железа промышленная автоматика никак не опровергает.
от какого, блин, такого "железа"? там сейчас типичное железо - армы на десятки мгц (а то и 80186) и оси наподобие мс-дос - потому что выше избыточно
в этом случае процедуре A должны передать указатель на локальные переменные процедуры D,
Считается на этапе компиляции
blackmirror
19.03.2020, 19:28
Hunta, это нельзя вычислить на этапе компиляции, если процедурам B и C требуется разное количество памяти для локальных переменных.
ребят вы тему по УК-НЦ засорили уже реально! Создаёте в разном новую и обсуждайте свои "реле" там!
если процедурам B и C требуется разное количество памяти для локальных переменных. однотипность переменных же - нет?
если процедурам B и C требуется разное количество памяти для локальных переменных.
Какая разница? Количество локальных переменных известно и не меняется, их тип известен и не меняется, то есть сколько будет занято места на стеке - можно просчитать
blackmirror
19.03.2020, 20:07
Если на входе процедура D выделила место для своих переменных и скопировала SP в BP, далее процедура B или C сохранила в стеке BP от процедуры D, и точно так же выделила место для своих переменных, то если теперь вызать процедуру A, она не будет знать из B или C её вызвали, и где искать BP от процедуры D, чтобы добраться до её локальных переменных. Каким образом это можно подсчитать во время компиляции?!
SP в BP
На PDP-11 нет BP
- - - Добавлено - - -
И вообще - понятие BP избыточно
blackmirror
19.03.2020, 20:59
И вообще - понятие BP избыточно
Это не обязательно какой-то выделенный регистр, но в Си имеется функция выделения памяти в стеке, и когда размер выделяемой памяти приходит в виде параметра, без BP или его аналога этого не сделать. Ну а в паскале, если разрешать доступ к локальным переменным внешних процедур, то значение SP при входе тоже придётся где-то запоминать, а во внутренней процедуре откуда-то извлечь.
Ещё раз - в Паскале всё просчитывается в момент компиляции - потому что понятно - кто в кого вложен и как был вызов
Если Вам это не понятно - это не мои проблемы
Oleg N. Cher
19.03.2020, 22:45
Вообще доступ к локальным переменным из вложенных процедур организован несколько менее эффективно. Это действительно так. Но ведь можно такие процедуры и не юзать. Вот в Си их вообще нет, и не парятся.
Есть попытки выпустить реализацию Оберона-07 без вложенных процедур. Но это только эксперименты.
blackmirror
19.03.2020, 23:34
Ещё раз - в Паскале всё просчитывается в момент компиляции - потому что понятно - кто в кого вложен и как был вызов
Если Вам это не понятно - это не мои проблемы
Еще раз обращаю внимание A,B и C это процедуры напрямую вложенные в процедуру D, но процедура A вызывается через B или C, хотя можно еще и напрямую из D вызвать. Возможные состояния стека:
Avars Bvars Dvars
Avars Cvars Dvars
Avars Dvars
Как образом при компиляции здесь можно подсчитать где окажутся переменные процедуры D в тот момент когда вызвана процедура A?
Oleg N. Cher
20.03.2020, 00:27
Доступ к таким локальным переменным идёт по смещению, передаваемому извне при вызове вложенной процедуры. О чём спор вообще?
Немного инфы перед анонсом большего для pdp-11:
C:\ming-w64\bin> pdp11-aout-gcc -v
Using built-in specs.
COLLECT_GCC=pdp11-aout-gcc
COLLECT_LTO_WRAPPER=c:/ming-w64/bin/../libexec/gcc/pdp11-aout/10.0.1/lto-wrapper.exe
Target: pdp11-aout
Configured with: ../configure --prefix=/opt/pdp11/ming-w64 --target=pdp11-aout --host=i686-w64-mingw32 --disable-shared --enable-static --disable-threads --disable-multilib --enable-languages=c,c++ --disable-libstdcxx --disable-libsanitizer --disable-gold --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-nls --disable-plugin --disable-silent-rules --disable-sjlj-exceptions --without-headers --without-isl --without-cloog --enable-stage1-checking --disable-libgcc --with-gmp=/opt/pdp11/ming-w64 --with-mpfr=/opt/pdp11/ming-w64 --with-mpc=/opt/pdp11/ming-w64 --without-iconv
Thread model: single
Supported LTO compression algorithms: zlib
gcc version 10.0.1 20200318 (experimental) (GCC)
D:\workspace\pdp11-toolchain\hello-gcc> make
pdp11-aout-as -o crt0rt.o crt0rt.s
pdp11-aout-gcc -O1 -m10 -c -o hello.o hello.c
pdp11-aout-as -o puts.o puts.s
pdp11-aout-ld -T pdp11-aout.ld -o hello.out hello.o puts.o -Map=hello.out.map
bin2load -a -f hello.out -o hello.lda
lda2sav -o hello.sav hello.lda
Немного инфы перед анонсом большего для pdp-11:
Правильно понимаю что из нового тут только lda2sav, чтобы использовать этот тулчейн для RT-11 ?
https://github.com/yshestakov/pdp11-toolchain/blob/master/hello-gcc/lda2sav.c
Да, правильно.
И свежий GCC (master, 10.0.1) + binutils 2.34, собранный с помощью MinGW в 32-bit Windows executables.
Я чуть позже перенесу (добавлю) в pdp11 бакэнд GCC описание процессоров ВМ1 и ВМ2, чтоб генерился код под них.
Прямо сейчас сборка в виже ZIP лежит у Vslav на сайте:
https://www.1801bm1.com/files/pdp11/cross-compilers/
Да, правильно.
И свежий GCC (master, 10.0.1) + binutils 2.34, собранный с помощью MinGW в 32-bit Windows executables.
https://www.1801bm1.com/files/pdp11/cross-compilers/
Pull Request-ы не хочешь в GCC закинуть? Или для PDP-11 такое в апстрим не принимается?
Тут пока чистый GCC. Как сделаю поддержку ВМ1/ВМ2 - попробую закинуть
Поднимем тему немного.
Решил скинуть сюда отдельные примеры работы с библиотекой ULBLIB (входит в состав RT-11 Source Kit). Вдруг кому пригодится.
Сам многократно писал с нуля функционал который уже есть в этой библиотеке.
Для начала пример обработки ошибок в программе.
.MCALL .MODULE
.MODULE ULB,RELEASE=V01,VERSION=00,COMMENT=<ERROR HANDLING>,AUDIT=YES
.MCALL .EXIT ;SYSTEM MACROS
.INCLUD /SY:ULBMAC/ ;ULBLIB MACROS
ERAREA: .BLKB ;ERROR CODE
.BLKB ;ERROR LEVEL/RETURN FLAG
.WORD ERRPRE ;ERROR MESSAGE PREFIX
.WORD ERRLEV ;ERROR LEVEL BYTE
.WORD ERRTAB ;ERROR MESSAGE OFFSET TABLE
.BLKW ;FILE NAME BLOCK/ADDRESS OF STRING
.WORD $ABORT ;ABORT ENTRY
ERRPRE: .NLCSI TYPE=I,PART=PREFIX
ERRLEV: .ASCII /X-/<200>
.EVEN
MSGLST ERRTAB
ERRMSG ERR,<Just an error>
ERRMSG WAR,<Warning and nothing more>
ERRMSG FIL,<File error >
ERRMSG STR,<Error with string >
ERRMSG FAT,<Fatal error>
MSGEND
DBLK: .RAD50 /SY FILNAMTYP/
TEXT: .ASCII /"Hi there"/<200>
.EVEN
$START::
.ERR #ERAREA,#ERR,LEVEL=FATAL,RETURN=YES
.ERR #ERAREA,#WAR,LEVEL=WARNING,RETURN=YES
.ERR #ERAREA,#FIL,LEVEL=FATAL,FILE=#DBLK,RETURN=YES
.ERR #ERAREA,#STR,LEVEL=PADLA,ASCII=#TEXT,RETURN=YES
.ERR #ERAREA,#FAT,LEVEL=U
BR $START
$ABORT::
.EXIT
.END $START
В принципе тут все должно быть понятно.
Определяется таблица ERRTAB.
В этой таблице определяются сообщения с уникальным кодом.
Код занимает один байт со знаком.
Положительные значения назначаются автоматически макрокомандой ERRMSG.
Отрицательные значения зарезервированы для файловых и прочих системных ошибок (об этом в другой раз).
Таблиц может быть несколько, хотя скорее всего одной хватит.
Макрокоманда .ERR вызывает печать сообщения с заданным уровнем (используется первая буква).
Если указан адрес стандартного блока имени файла - к сообщению добавляется имя файла.
Если указан адрес дополнительной строки - к сообщению добавляется строка.
Одновременно указать блок имени файла и дополнительную строку нельзя.
Для стандартных уровней (W,E,F,U) устанавливаются правильные биты в байте ошибки программы (@#53).
Если не указан RETURN=YES, возврата не происходит, управление передается на заданную в блоке описания точку входа.
Как-то так :)
.EX UL/LINK:SY:ULBLIB
?ULB-F-Just an error
?ULB-W-Warning and nothing more
?ULB-F-File error SY:FILNAM.TYP
?ULB-P-Error with string "Hi there"
?ULB-U-Fatal error
.
- - - Добавлено - - -
Здесь без примеров.
Просто описание вызовов.
;CALL $INIDM -- Инициализация динамической памяти.
;
;На входе:
; R0 - Адрес двухсловного массива $FRHD (нужно определить в программе)
; +00 - начальный адрес используемой памяти (обычно содержимое @#50 плюс 2)
; +02 - 0
;
;На выходе:
; C - 0=успех, 1=ошибка
; R0 - Размер свободной памяти в байтах
; @#50 - Максимальный доступный программе адрес
;CALL $RQCB -- Запрос блока динамической памяти
;
;На входе:
; R0 - адрес $FRHD
; R1 - размер блока в байтах
;
;На выходе:
; C - 0=успех, 1=ошибка
; R0 - адрес выделенного блока памяти
; R1 - реальный размер выделенного блока памяти
;CALL $RLCB - Освобождение блока памяти
;
;На входе:
; R0 - Адрес $FRHD
; R1 - Размер блока памяти
; R2 - Адрес блока памяти
Вызов $INIDM можно так же вызвать повторно чтобы освободить всю выделенную ранее память (предварительно нужно обнулить второе слово $FRHD).
Память выделяется сверху вниз. Если планируется вызывать подпрограммы работы с файлами из ULBLIB, сразу после инициализации динамической памяти стоит выделить "в пустоту" блок памяти под USR (не требуется в XB/XM/ZB/ZM или если выгрузка USR запрещена). Размер USR в байтах можно получить по смещению 374 от начала RMON.
Так же не требуется выделять блок памяти под USR если все нужные драйвера гарантированно загружены.
Для вывода сообщения об ошибке выделения памяти можно воспользоваться макрокомандой .ERR как показано выше со стандартным кодом FE.NOM.
- - - Добавлено - - -
Здесь кратко о макросах/подпрограммах ULBLIB для работы с файлами.
Начало программы может выглядеть примерно так:
$FRHD:: .BLKW 2 ;ЗАГОЛОВОК СПИСКА СВОБОДНОЙ ПАМЯТИ
OUTSPC: .BLKW 3*5 ;БЛОКИ ВЫХОДНЫХ ФАЙЛОВ
INPSPC: .BLKW 6*4 ;БЛОКИ ВХОДНЫХ ФАЙЛОВ
DEFEXT: .RAD50 /INPOUTOUTOUT/ ;РАСШИРЕНИЯ ФАЙЛОВ ПО УМОЛЧАНИЮ
;+
;ТОЧКА ЗАПУСКА.
;-
$START::
MOV @#50,R0 ;ПОЛУЧАЕМ ВЕРХНИЙ АДРЕС
TST (R0)+ ;СЛЕДУЮЩИЙ АДРЕС - НАЧАЛО СВОБОДНОЙ
;ПАМЯТИ
MOV R0,$FRHD ;СОХРАНЯЕМ ЕГО
;+
;ТОЧКА ПОВТОРНОГО ВХОДА.
;-
$RETRY:
MOV #$FRHD+4,R5 ;АДРЕС ЗАГОЛОВКА (+4)
CLR -(R5) ;ИНИЦИАЛИЗИРУЕМ ЗАГОЛОВОК
MOV -(R5),R4 ;ПОЛУЧАЕМ АДРЕС НАЧАЛА СВОБОДНОЙ
;ПАМЯТИ
MOV R4,R0 ;КОПИРУЕМ ДЛЯ ИСПОЛЬЗОВАНИЯ
TST -(R0) ;ПРЕДЫДУЩИЙ АДРЕС - ВЕРХ ПРОГРАММЫ
.SETTOP ;ВОССТАНАВЛИВАЕМ ВЕРХНИЙ АДРЕС
;
;ВЕРХНИЙ АДРЕС ВОССТАНАВЛИВАЕТСЯ ЧТОБЫ ИЗБЕЖАТЬ ЛИШНЕЙ АКТИВНОСТИ С ФАЙЛОМ
;SWAP.SYS ПРИ ВЫХОДЕ ИЗ ПРОГРАММЫ.
;
.SRESET ;ЗАКРЫВАЕМ ОТКРЫТЫЕ КАНАЛЫ,
;ВЫГРУЖАЕМ ЗАГРУЖЕННЫЕ ДРАЙВЕРЫ
;
;В ЭТОМ МЕСТЕ:
; R5 = АДРЕС ЗАГОЛОВКА СПИСКА СВОБОДНОЙ ПАМЯТИ
; R4 = НАЧАЛЬНЫЙ АДРЕС СВОБОДНОЙ ПАМЯТИ
;
;МЫ ИСПОЛЬЗУЕМ .CSISPC, ВСЕ ОСТАЛЬНЫЕ ОПЕРАЦИИ ВЫПОЛНЯЮТСЯ СРЕДСТВАМИ
;БИБЛИОТЕКИ ULBLIB.
;
10$: MOV @#42,SP ;ВОССТАНАВЛИВАЕМ УКАЗАТЕЛЬ СТЕКА
.CSISPC #OUTSPC,#DEFEXT,#0,R4 ;РАЗБИРАЕМ КОМАНДНУЮ СТРОКУ
;
;КОМАНДНАЯ СТРОКА ЧИТАЕТСЯ С ТЕРМИНАЛА ИЛИ ИЗ КОМАНДНОГО ФАЙЛА,
;ПРОВЕРЯЕТСЯ НА СООТВЕТСТВИЕ CSI, ОБРАБОТКА ОШИБОК ПРОИСХОДИТ
;ПРИ ЭТОМ БЕЗ НАШЕГО УЧАСТИЯ.
;
;R4 ССЫЛАЕТСЯ НА КОПИЮ КОМАНДНОЙ СТРОКИ ДЛЯ ДОПОЛНИТЕЛЬНОЙ ПРОВЕРКИ.
;
.................................................. .........................
;
;ЗДЕСЬ И ДАЛЕЕ СЧИТАЕМ ЧТО СОДЕРЖИМОЕ РЕГИСТРОВ R4 И R5 ОСТАЛОСЬ ТЕМ ЖЕ,
;ЧТО БЫЛО ВЫШЕ.
;
;ИНИЦИАЛИЗИРУЕМ ДИНАМИЧЕСКУЮ ПАМЯТЬ.
;
.GVAL R4,#300 ;ЧИТАЕМ КОНФИГУРАЦИЮ СИСТЕМЫ
MOV R0,-(SP) ;СОХРАНЯЕМ НА ПОТОМ
.GVAL R4,#374 ;ЧИТАЕМ РАЗМЕР USR
MOV R0,-(SP) ;СОХРАНЯЕМ НА ПОТОМ
MOV R5,R0 ;ЗАГОЛОВОК
CALL $INIDM ;ИНИЦИАЛИЗИРУЕМ ПАМЯТЬ
BCC 30$ ;CC - OK
20$: .ERR #ERAREA,#FE.NOM,LEVEL=F ;МАЛО ПАМЯТИ
30$: MOV (SP)+,R1 ;ВОССТАНАВЛИВАЕМ РАЗМЕР USR
BIT #1000,(SP)+ ;USR ВСЕГДА В ПАМЯТИ?
BNE 40$ ;ДА
MOV R5,R0 ;ЗАГОЛОВОК
CALL $RQCB ;РЕЗЕРВИРУЕМ ПАМЯТЬ ПОД USR
;(ТРЕБУЕТСЯ ДЛЯ .FETCH)
BCS 20$ ;CS - МАЛО ПАМЯТИ
40$:
Для работы с файлами средствами ULBLIB используются дескрипторы фалов (FDB).
;+
;ДЕСКРИПТОРЫ ФАЙЛОВ.
;ИСХОДЯЩЕМУ ПРИВЯЗЫВАЕМ КАНАЛ 0, ВХОДЯЩЕМУ КАНАЛ 1.
;МАКСИМАЛЬНАЯ ДЛИНА СТРОКИ - 132. БАЙТА,
;РАЗМЕР РАБОЧЕГО БУФЕРА - 512. БАЙТ.
;
;ЕСЛИ НЕ ПЛАНИУРЕТСЯ РАБОТА СО СТРОКАМИ (БУДУТ ИСПОЛЬЗОВАНЫ ВЫЗОВЫ
;.READ/.WRITE), RECSIZ И BUFSIZ ДОЛЖНЫ БЫТЬ РАВНЫ 0.
;-
OUTFDB: .FILE <OUT>,0,OUTSPC,RECSIZ=132.,BUFSIZ=512.
INPFDB: .FILE <IN>,1,INPSPC,RECSIZ=132.,BUFSIZ=512.
Для открытия файлов по дескриптору используется макрокоманда .OPEN.
При этом выделяется память под драйвер (если нужно), загружается драйвер (если нужно), выделяется память под рабочий буфер (если указано).
Входящие файлы открываются с помощью .LOOKUP, исходящие - с помощью .ENTER.
MOV #OUTFDB,R2 ;ДЕСКРИПТОР ФАЙЛА
.OPEN R2,R5 ;ОТКРЫВАЕМ ФАЙЛ
BCC 60$ ;CC - OK
;
;ОБРАБОТКА ОШИБОК РАБОТЫ С ФАЙЛОМ.
;R2 У НАС СОДЛЕРЖИТ АДРЕС FDB.
;
50$: .ERR #ERAREA,F.ERR(R2),LEVEL=F,FILE=F.OPNM(R2) ;ОБРАБОТКА ОШИБОК
60$:
Последовательное чтение строк из файла выполняется макрокомандой GET$S.
В случае ошибки будет установлен бит C.
R0 после вызова GET$S ссылается на FDB.
Код ошибки можно получить по смещению F.ERR дескриптора файла.
Код FE.EOF означает, что во входящем файле больше нечего читать.
;+
;СЧИТАЕМ ЧТО В R2 У НАС АДРЕС FDB ВХОДЯЩЕГО ФАЙЛА
;-
GET$S R2 ;ЧИТАЕМ СТРОКУ
BCC 70$ ;CC - OK
CMPB #FE.EOF,F.ERR(R0) ;КОНЕЦ ФАЙЛА?
BNE 50$ ;НЕТ, ОШИБКА
;
;ЗДЕСЬ МОЖНО ЗАВЕРШИТЬ РАБОТУ С ФАЙЛАМИ И ПЕРЕЙТИ К ОБРАБОТКЕ СЛЕДУЮЩЕЙ
;КОМАНДЫ.
;
.................................................. .........................
70$: MOV F.NRBD+2(R0),R1 ;ПОЛУЧАЕМ АДРЕС СТРОКИ
MOV F.NRBD(R0),R2 ;ПОЛУЧАЕМ ДЛИНУ СТРОКИ
Последовательная запись строк в файл выполняется макрокомандой PUT$S.
В случае ошибки будет установлен бит C.
R0 после вызова PUT$S ссылается на FDB.
;+
;СЧИТАЕМ ЧТО В R2 У НАС АДРЕС FDB ИСХОДЯЩЕГО ФАЙЛА,
;В R1 - АДРЕС СТРОКИ, В R3 - ДЛИНА.
;-
PUT$S R2,R1,R3 ;ЗАПИСЫВАЕМ СТРОКУ
BCS 50$ ;CS - ОШИБКА
Если для чтения/записи файла используются макрокоманды .READ/.WRITE, для обработки ошибок нужно сконвертировать код RT-11 в код ошибки для .ERR.
Для этого есть подпрограммы $IERR (для .READ/.READC/.READW) и $OERR (для .WRITE/.WRITC/.WRITW).
Обе подпрограммы на входе требуют адрес FDB в R1, на выходе C устанавливается, F.ERR(R1) содержит код ошибки, пригодный для .ERR.
.READW #AREA,#1,#BUFF,#WCNT,#BLKN ;ВЫПОЛНЯЕМ ЧТЕНИЕ
BCC OK ;CC - OK
MOV R2,R1 ;FDB
CALL $IERR ;КОНВЕРТИРУЕМ КОД ОШИБКИ
BR 50$ ;ОБРАБАТЫВАЕМ ОШИБКУ
Для закрытия файла используется подпрограмма $CLOSE.
На входе R0 должен содержать адрес FDB.
Подпрограмма $CLOSE записывает остатки рабочего буфера в исходящий файл и закрывает его.
Входящий файл можно так же закрыть просто макрокомандой .PURGE или .CLOSE на соответствующем канале.
MOV R2,R0 ;FDB
CALL $CLOSE ;ЗАКРЫВАЕМ ФАЙЛ
BCS 50$ ;CS - ОШИБКА
Примерно так :)
Некоторые подпрограммы в ULBLIB пересекаются с теми, что я портировал из RSX в RSXLIB (https://zx-pk.ru/threads/10718-soft-dlya-dvk-pdp11.html?p=583946&viewfull=1#post583946).
Для них описание уже есть (https://zx-pk.ru/threads/10718-soft-dlya-dvk-pdp11.html?p=583946&viewfull=1#post583946).
ULBLIB содержит следующие подпрограммы, присутствующие в RSXLIB:
подпрограммы сохранения регистров $SAVAL, $SAVRG, $SAVVR
подпрограммы преобразования $CBDSG, $CBDMG, $CBOSG, $CBOMG
подпрограммы арифметики $DIV, $MUL
- - - Добавлено - - -
Другие подпрограммы преобразования (этих в RSXLIB нет).
;CALL $R50AS - ПРЕОБРАЗОВАНИЯ RADIX-50 В ASCII
; КОД 034 (".") ПРЕОБРАЗУЕТСЯ В "%"
; КОД 035 ПРЕОБРАЗУЕТСЯ В "*"
;
;НА ВХОДЕ:
; R0 - СЛОВО ДЛЯ ПРЕОБРАЗОВАНИЯ
; R1 - АДРЕС БУФЕРА
;
;НА ВЫХОДЕ:
; R1 - УКАЗЫВАЕТ НА СЛЕДУЮЩИЙ БАЙТ ЗА ПОЛУЧЕННОЙ СТРОКОЙ
;CALL $ASCR5 - ПРЕОБРАЗОВАНИЕ ASCII В RADIX-50
; ПРОВЕРОК НЕ ПРОИСХОДИТ, ЕСЛИ СТРОКА СОДЕРЖИТ
; СИМВОЛЫ, НЕ ВХОДЯЩИЕ В RADIX-50 - ПОЛУЧИТСЯ КАША
; "%" ПРЕОБРАЗУЕТСЯ В КОД 034 (".")
; "*" ПРЕОБРАЗУЕТСЯ В КОД 035
;
;НА ВХОДЕ:
; R1 - АДРЕС СТРОКИ
;
;НА ВЫХОДЕ:
; R0 - РЕЗУЛЬТАТ В RADIX-50
; R1 - НАЧАЛЬНЫЙ АДРЕС + 3
;CALL $FNASC - ПРЕОБРАЗОВАНИЯ ИМЕНИ ФАЙЛА В ASCII
;
;НА ВХОДЕ:
; R0 - АДРЕС БЛОКА ИМЕНИ ФАЙЛА RT-11
; R1 - АДРЕС БУФЕРА
;
;НА ВЫХОДЕ:
; R1 - СДРЕС СЛЕДУЮЩЕГО БАЙТА ЗА ПОЛУЧЕННОЙ СТРОКОЙ
form, позвольте вопрос к Вам, как к гуру RT-11.
Я правильно распознал способ выделения памяти под переменные в программе для RT-11? Вот здесь описал: https://zx-pk.ru/threads/11381-napisanie-programm-dlya-bk0010.html?p=1064763&viewfull=1#post1064763
Я правильно распознал способ выделения памяти под переменные в программе для RT-11?
.SETTOP
- - - Добавлено - - -
https://zx-pk.ru/threads/15587-programmirovanie-na-uknts-kak.html?p=923105&viewfull=1#post923105
Я правильно распознал способ выделения памяти под переменные в программе для RT-11?
В RT-11 используется .SETTOP для запроса верхнего адреса который нужен программе.
Результатом выполнения будет установка максимально возможного для использования адреса (не выше запрошенного).
.SETTOP #20000 ;ЗАПРАШИВАЕМ ВЕРХНИЙ АДРЕС 20000
.SETTOP #-2 ;ЗАПРАШИВАЕМ МАКСИМАЛЬНЫЙ ВОЗМОЖНЫЙ ВЕРХНИЙ АДРЕС
После вызова R0 будет содержать самый верхний адрес, доступный программе.
А вот нижний доступный свободный адрес (сразу после кода программы) как раз стоит брать из @#50 (прибавив к нему 2) или с помощью директивы .LIMIT (так же прибавив 2).
Очень частая ошибка:
...
END: ;КОНЕЦ ПРОГРАММЫ
.END START
Это неправильный способ определения конца программы (если программа состоит из нескольких модулей или использует библиотеки, в этом мести может оказаться код следующего модуля).
Если хочется динамически выделять блоки памати из свободного места после программы, лучше всего использовать готовые вызовы ULBLIB (выше есть описание подпрограмм).
Есть там так же вариант с виртуальной памятью на диске, но я его еще не смотрел.
Ну и перед выходом из программы стоит возвращать старый верхзний адрес макрокомандой .SETTOP (или вовсе сделать .SETTOP #0). Это поможет избежать лишней дисковой активности.
.SETTOPв документации написано, что .SETTOP для изменения верхнего адреса программы, прочитанного при её загрузке. Мне менять на ходу не нужно, я хочу один раз указать в заголовке программы.
Мне менять на ходу не нужно, я хочу один раз указать в заголовке программы.
Тогда нужно просто при сборке программы указать LINK/TOP:addr и не мучиться :)
Можно конечно и с помощью .ASECT прописать явно - это тоже дозволяется.
Это экономит дисковое место немного, но не факт что программа окажется совместимой со всеми вариантами системы.
LINK/TOP:addr
У меня это приводило к тому, что увеличивался до соотвествующего размера .sav файл
.SETTOP позволяет обойтись без этого
У меня это приводило к тому, что увеличивался до соотвествующего размера .sav файл
.SETTOP позволяет обойтись без этого
Да, это расширит файл.
Если через .ASECT прописать - файл не расширится, но при загрузке верхний адрес будет проверяться на доступность для программы. Это этакий заранее сделанный .SETTOP получается. Но вот как оно будет работать в mapped системах, TSX и RSTS - черт его знает :)
нижний доступный свободный адрес (сразу после кода программы) как раз стоит брать из @#50 (прибавив к нему 2)Вот я и хочу с помощью 50-ой ячейки в заголовке sav-файла добавить к фактическому концу программы ещё немножко под переменные, чтобы это стало «нижним доступным свободным адресом». Можно, конечно, нулей записать в конец с помощью .BLKW, но это расточительно в смысле места на диске.
Если хочется динамически выделять блоки памати из свободного места после программыНе-не, только статически один раз при загрузке программы.
Исхожу из описания процесса загрузки sav-файла в докумендации DEC: «KMON sets $USRTO (location 50) to the top of the user program». То есть что я прописал в 50-ю ячейку sav-файла, то и будет. Если умещается в память, то начинается загрузка блоков из тела программы согласно битовой карте («The monitor uses this information when it loads the program»).
Если через .ASECT прописать - файл не расширится, но при загрузке верхний адрес будет проверяться на доступность для программы.Во, это круто. То, что надо :) Спасибо.
Это этакий заранее сделанный .SETTOP получается. Но вот как оно будет работать в mapped системах
Не проверял, но пошёл по пути, который точно работает, позволяет выделять место в конце программы для рабочих данных, не увеличивая размер .sav файла и при этом адреса определяются статически - то есть можно не заморачиваться на динамическое выделение памяти и хранение адреса блока где-либо.
Проверил виртуальный запуск в XM - без проблем.
Так что через .ASECT инициализировать можно.
Главное потом начало буфера найти :)
- - - Добавлено - - -
точно работает
.SETTOP просто более правильный метод.
Прямая установка 50 ничему не противоречит, но усложняет само написание программы: доступный нам верх мы определили, а вот низ найти может быть проблематично.
- - - Добавлено - - -
Во, это круто.
Главное - учитывать то, что я написал выше про последний адрес программы.
Как уже написал, верх мы определим таким способом, а вот с низом могут быть проблемы :)
но усложнает само написание программы
Ну и это тоже. В моём варианте этих проблем нет.
Помнится, я его сделал и под RSX, но это надо диски на системе с RSX посмотреть, для RT-11 доступно подключение к папке Windows, поэтому для неё больше файлов непосредственно на PC лежит.
Дополнение.
Низ определить в принципе несложно - директива .LIMIT в помощь.
Только вот стоит ли оно того :)
Низ определить в принципе несложно
Низ чего - программы или блока переменных?
Низ чего - программы или блока переменных?
Низ доступной памяти (в случае явного прописывания верха программы в 50 через .ASECT).
Второе слово, созданное директивой .LIMIT и будет нижним доступным адресом в этом случае (если к нему 2 прибавить).
Непривычно, неудобно, но в принципе возможно :)
Низ доступной памяти (в случае явного прописывания верха программы в 50 через .ASECT).
Второе слово, созданное директивой .LIMIT и будет нижним доступным адресом в этом случае (если к нему 2 прибавить)пишут «The .LIMIT directive reserves two words into which the Linker puts the low and high addresses of the relocated code. The low address (inserted into the first word) is the address of the first byte of code (http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp11/dos-batch/DEC-11-OMACA-A-D_DOS_MACRO-11_Assembler_Programmers_Manual_Jun72.pdf)» – похоже, это загрузочный адрес программы из 40-ой ячейки заголовка sav-файла.
Мы же говорим про неперемещаемые файлы (.sav)
Низ доступной памяти
Так это будет (в лучшем случае) верх блока переменных, а я про них блока переменных
Мы же говорим про неперемещаемые файлы (.sav)
Это относится к любым файлам.
.LIMIT в первом слове пишет начальный адрес программы (совпадает с содержимым 42), во втором конечный адрес программы (совпадает с содержимым 50 если его явно не переписать).
Второе слово, созданное директивой .LIMIT и будет нижним доступным адресом
Мне разъяснять не надо, что такое директива .LIMIT
Так это будет (в лучшем случае) верх блока переменных, а я про них блока переменных
Это и есть низ блока переменных в описываемом случае (он же - верх программы):
START: MOV #BUFF,R0
MOV #FMTS,R1
MOV #ARGS,R2
MOV @#50,@R2
CALL $EDMSG
CLRB @R0
.PRINT #BUFF
.EXIT
ARGS: .LIMIT
BUFF: .BLKB 80.
FMTS: .ASCIZ /%P:%P/
.ASECT
.=50
.WORD 100000
.END START
.EX TEST/LINK:SY:RSXLIB
100000:003542
.
Это и есть низ блока переменных в описываемом случае (он же - верх программы):
Это будут нижний и верхний адреса блока памяти, в котором где-то (это ещё надо вычислить) располагается блок переменных. В моём случае всё это известно на этапе трансляции.
это ещё надо вычислить
Вычислять тут ничего не надо - мы на этапе трансляции знаем адрес начала и адрес конца, и они фиксированные.
В моём случае - MOV #BUF, R0
В твоём случае - MOV .LIMIT+2, R0 ADD #BUF, R0 (SUB .LIMIT, R0 ADD #BUF, R0)
Вот даже не скажу сходу, как вычислить адреса буфера, который где то внутри блока
В моём случае - MOV #BUF, R0
В твоём случае - MOV .LIMIT, R0 ADD #BUF, R0
Абсолютно неверно.
Рассмотрим два случая.
Единственный (есть конечно и другие способы, но в данном случае нам интересна сама суть - возможность использования #BUF) случай когда можно обойтись одним "MOV #BUF,R0" - это когда мы уверены что "BUF:" перед .END - окажется в конце программы. Но тогда "мой" случай сводится к тому же самому и .LIMIT не нужен в принципе.
Второй случай - когда мы используем библиотеки, кучу модулей итд, и "BUF:" перед .END может и не быть концом программы. Описываемый вариант предназначен именно для этого случая, и тут нам нужно уже MOV LIMIT+2,R0 и TST (R0)+ (а не мифический ADD #BUF). Но и "канонический" вариант с .SETTOP тут сводится к тому же самому - мы получаем адрес верха программы из @#50 (до расширения) и так же должны добавить к нему 2.
Иными словами, .LIMIT здесь выполняет роль чтения @#50 в момент старта программы, только результат готов еще до ее запуска.
Второй случай - когда мы используем библиотеки, кучу модулей итд, и "BUF:" перед .END может и не быть концом программы.
В моём случае он ГАРАНТИРОВАННО будет в конце за пределами программы, но внутри блока, который будет распределён вызовом .SETTOP внутри п/п инициализации, которая ещё и отдаст свою память в этот блок. Как я и сказал - ВСЁ адреса этого блока будут известны на момент компиляции, но при этом пространство для него не будет выделятся в .SAV и вообще не будет трогаться ячейка 50
- - - Добавлено - - -
Единственный особый случай - это программы с перекрытиями, но даже в этом случае есть обходной манёвр
ГАРАНТИРОВАННО будет в конце за пределами программы, но внутри блока, который будет распределён вызовом
Это точно так же легко делается с использованием правки 50 через .ASECT.
Напомню, речь идет не о том как ЛУЧШЕ сделать, а о самой возможности.
Сам я использую .SETTOP и @#50 как самый универсальный и подконтрольный способ, тем более, что ULBLIB предоставляет достаточно удобный набор для работы с памятью.
Это точно так же легко делается с использованием правки 50 через .ASECT.
Этого недостаточно, что бы потом без лишних вычислений работать с этим блоком.
Сам я использую .SETTOP и @#50 как самый универсальный и подконтрольный способ, тем более, что ULBLIB предоставляет достаточно удобный набор для работы с памятью.
Мне понадобился простой и удобный способ выделения места под impure переменные, так что бы не возиться вообще с динамической памятью, не занимать места в .sav файле и не проводить вообще никаких вычислений - то есть, что бы ВСЕ адреса переменных были известны в момент компиляции. По ссылке, которую я привёл - мой ответ на ответ, что это вообще не возможно в RT.
Тебя устраивает твой - да ради бога - я никому ничего не навязываю.
- - - Добавлено - - -
На этом на эту тему писать больше не буду. Можно мне не отвечать.
Я обычно в конце программы ставлю метку FREE: (подразумевая свободную память с этого адреса) непосредственно перед директивой .END
А в начале программы задаю переменные (указатели на буферы для временных вычислений) типа таких:
BUF1 = FREE
BUF2 = BUF1 + 256 ; размер первого буфера
BUF3 = BUF2 + 1230 ; размер второго буфера
FREEND = BUF3 + 542 ; размер третьего буфера.
В самой программе пишу MOV #BUF1,R0 или MOV BUF2(R1),R2 или что угодно в таком духе.
Остаётся только после компиляции в .sav-файл как-то вписать значение FREEND в 50-ю ячейку этого sav-файла.
Я обычно в конце программы ставлю метку FREE: (подразумевая свободную память с этого адреса) непосредственно перед директивой .END
Такой способ не всегда годится.
Предполaгаю, что работа с памятью в RT-11SJ как в Досе - получай всю. Хотя неуверен, на БК11 работает какой-то своппинг. А библиотеки сверху кода никакой в этом случае нет. С ХМ монитором это не так, но этого нет на БК и УКНЦ. На системе без виртуальной памяти возможно, что никаких действий и не нужно, но не уверен. Это получился вопрос.
Пользуюсь случаем обратиться к уважаемому form. Меня швед BQT просто достал, более 4-х месяцев доказывал, что данные, которые вы мне сообщили по π-затвору на 11/83 неверные, так как они лучше, чем от его 11/93. Объяснял ему, что это из-за того, что RT-11SJ быстрее RSX-11 и 2.11BSD, но он не верил. А RT-11 он не любит и ставить не хочет. Нет ли у вас сейчас какой-нибудь DEC PDP-11 системы с RT-11, чтобы данными оттуда помочь мне его убедить? У шведа есть довольно сильный аргумент, так как алгоритм несколько раз слегка разгонялся и мне приходилось ваши данные согласовывать с новыми кодами. И он настаивает, что в таких согласованиях невозможно быть 100% точным и в этом он прав. Считаю, что погрешность в процентов 10 вполне могла случится. И хотя 11/93 получается, в любом случае, медленнее, шведа это не убеждает. Он предполагает, что возможна и большая погрешность. Помогите, если возможно.
Такой способ не всегда годится.но что может пойти не так, если в 50-ой ячейке заголовка .sav-файла я указал верхний адрес FREEND?
Я не нашёл ни единого упоминания в документации DEC, что так делать нельзя. Там эта тема вообще опущена, как самоочевидная. Типа, «всё, что не запрещено – разрешено».
Кроме того, посмотрел sav-программы для ОС БК-11, собранные, очевидно, в Macro-11, – у них в 50-ой ячейке записан верхний адрес памяти, который отличается и от реального размера программы на диске, и от числа занимаемых ей блоков*512. Причём, отличается в большую сторону (наверняка ради резерва памяти). Как-то ведь скомпилировали и слинковали эти файлы.
Предполaгаю, что работа с памятью в RT-11SJ как в Досе - получай всю.
Все зависит от того что собственно требуется.
В RT-11 нет никакого функционала по запросу/освобождению памяти (XM вызовы не рассматриваем здесь).
Вызов .SETTOP просто уведомляет систему какой самый верхний адрес программа собирается использовать, чтобы она ориентировалась нужен ли свопинг при USR вызовах и при выходе программы.
К примеру если мы просто хотим подгрузить драйверы с помощью .FETCH или .CSIGEN, нам вообще .SETTOP не нужен в принципе.
Если же .SETTOP используется, хорошим правилом будет перед выходом (или перед получением следующей команды) вернуть верхний адрес в исходное положение, чтобы после выхода программы не дергать зря диск.
- - - Добавлено - - -
Я не нашёл ни единого упоминания в документации DEC, что так делать нельзя.
В документации просто расписано как что работает, а что с этим делать - дело пользователя.
- - - Добавлено - - -
верхний адрес памяти, который отличается и от реального размера программы на диске, и от числа занимаемых ей блоков*512.
А он и не должен совпадать.
Содержимое ячейки 50 - это просто самый верхний адрес который программа собирается использовать.
К примеру оверлейная программа по размеру может вообще быть больше физической памяти.
Предварительная запись адреса в ячейку 50 абсолютно идентична вызову .SETTOP с тем же адресом, за исключением того, что если значение окажется слишком большим, то программа просто не загрузится.
- - - Добавлено - - -
Нет ли у вас сейчас какой-нибудь DEC PDP-11 системы с RT-11
Пока все разобрано и упаковано.
- - - Добавлено - - -
Я не нашёл ни единого упоминания в документации DEC, что так делать нельзя.
Кстати под "не всегда работает" я имел в виду, что в коде
END:
.END START
END - не обязательно окажется в конце программы :)
- - - Добавлено - - -
Вот для пояснения что я имею в виду:
.MCALL .PRINT,.EXIT
START:: MOV #152525,R1
CALL PRINT
MOV #52525,R1
CALL PRINT
.EXIT
PRINT:: MOV #BUF,R0
MOV SP,R2
CALL $CBOMG
CLRB @R0
.PRINT #BUF
RETURN
BUF::
.END START
"Вам кажется", что это программа которая печатает 152525, а потом 052525, а на самом деле - это программа которая печатает 152525, а потом обрушивает все (при первом вызове $CBOMG записал результат поверх себя) :)
К примеру оверлейная программа по размеру может вообще быть больше физической памяти.Хмм, в ячейке 50 записано 16-битное число, значит программа не может запрашивать больше 64 kb. Разве RT-11 может работать на компьютерах, у которых физической памяти меньше 64 килобайт?
Разве RT-11 может работать на компьютерах, у которых физической памяти меньше 64 килобайт?
Для начала - 56 кб.
Для окончания - я запускал RT-11 на компе с 16-ю килобайтами.
Хмм, в ячейке 50 записано 16-битное число, значит программа не может запрашивать больше 64 kb. Разве RT-11 может работать на компьютерах, у которых физической памяти меньше 64 килобайт?
Да, RT-11 прекрасно работает на компьютерах с физической памятью меньше 64 Kb.
В зависимости от размеров системы минимальные требования разные.
В теме программ для ДВК/PDP-11 есть программа VKMON (или SYSTOP - она только для этого и предназначена) которой можно принудить монитор использовать не всю память (только SJ/SB/FB) - если интересно побаловаться.
Ячейка же 50 (содержимое) - это просто верхний адрес программы который она объявляет используемым.
Физический смысл этого параметра (имеем в виду обычную прогу, не виртуальную) такой: если какой-либо вызов, требует USR, и он загружается в область памяти выше данного адреса, то USR просто загружается и используется.
Если же USR попадает в этот адрес или ниже - происходит свопинг - часть памяти выгружается в файл SWAP.SYS, загружается USR, используется, память читается обратно.
Второй смысл этого значения аналогичен, только речь идет про выход из программы и возможное ее перекрытие USR+KMON.
Что касается памяти больше 64Kb (как правильно было замечено, обычно все-таки 56, хотя бывает и больше - например 60), то тут разные варианты:
оверлейные программы используют одну и ту же память для разных кусков программы
в системах с управлением памятью, программа может использовать области верхней памяти, а так же оверлеи которые лежат в верхней памяти и просто переключаются между собой
ZB/ZM монитор и TSX-Plus поддерживают использования раздельного пространства кода и данных (между собой несовместимы).
Что быстрее?
MUL #80.,R2
или
MOV R3,R2
ASL R3
ASL R3
ASL R3
ASL R3
ASL R3
ASL R3
ASL R2
ASL R2
ASL R2
ASL R2
ADD R2, R3
LeoN65816
01.06.2020, 08:12
А так?
MOV R3,R2
ASL R3
ASL R3
ADD R2, R3
ASL R3
ASL R3
ASL R3
ASL R3
А так?
???
фигня получится
MOV R3,R2 ; r3=x r2=x
ASL R3 ; r3=2x
ASL R3 ; r3=4x
ADD R2, R3 ; r3=5x
ASL R3 ; r3=10x
ASL R3 ; r3=20x
ASL R3 ; r3=40x
ASL R3 ; r3=80x
Ну да, согласен.
Только вопрос был не в этом.
Что быстрее - очевидно, надо проверять на реале.
В UKNCBTL для MUL с регистрами стоит задержка 96. тактов, для ASL с регистром 11. тактов, ADD с регистрами 11. тактов (см. emubase/Processor.cpp).
Итого получается вариант MUL = 96., вариант со сдвигами = 132. такта, вариант Hunta = 88. тактов.
А так вообще ещё можно применить команды ASH/ASHC для быстрого сдвига.
Напомню ещё про тему https://zx-pk.ru/threads/14702-raschjot-tochnogo-vremeni-vypolneniya-komand-razlichnymi-protsessorami-arkhitektury-pdp-11.html
и страничку http://www.emuverse.ru/wiki/%D0%A3%D0%9A%D0%9D%D0%A6_%D0%A0%D0%B0%D1%81%D1%87% D1%91%D1%82_%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D0%B3%D 0%BE_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8_%D 0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0% B8%D1%8F_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4
А так вообще ещё можно применить команды ASH/ASHC для быстрого сдвига.
ASH =41 если использовать две то медленнее будет, если одну то то на то и выйдет.
- - - Добавлено - - -
88. тактов.
курочка по зернышку :)
вариант Hunta
Ну, строго говоря - это не мой вариант, моё только объяснение :)
Как то так. Надо только уточнить поведение ASH со всякими C битами (не помню точно, но вроде не должно влиять)
MOV R3,R2 ; r3=x r2=x
ASL R3 ; r3=2x
ASL R3 ; r3=4x
ADD R2, R3 ; r3=5x
ASH #4, R3 ; r3=80x
При прочих равных этот вариант наверное предпочтительней будет - его и оставим :)
Спасибо за помощь :)
Ещё раз - надо проверить, как реагируют ASL и ASH на установленный бит С - насколько я помню - никак, но это из тех вещей, который я периодически проверяю - ибо не каждый день требуются ROR|ROL|ASR|ASL|ASH|ASHC
randomizer
10.06.2020, 18:53
Как то так. Надо только уточнить поведение ASH со всякими C битами (не помню точно, но вроде не должно влиять)
Ради интереса сравнил время выполнения ASH (Rs), Rd с эвалентным по количеству ASL Rd
При тактовой частоте процессора 10MHz(лень мне кварц ради теста ставить старый))), выравнивание по скорости происходит на 5 сдвигах.
Т.е. 4 раза ASL быстрее(на 20%) чем один ASH сдвигающий на 4 влево.
На пяти разница незначительна, а на шести ASH уже выигрывает.
Ну и сдвиг на 10 командой ASH (Rs), Rs, в два раза медленней чем сдвиг ею же на один разряд.
И сдвиг на 30, в 3.2 раза медленней чем сдвиг на один разряд.
Да, думаю что , при частоте процессора 8MHz, выравние по скорости произойдет на 6-ти сдвигах. 8MHz увеличат время выполнения ASH, но не повлияют на скорость выборки из памяти.
Это было понятно и на вскидку.. последняя версия оптимальна по размеру одинакова по скорости..
- - - Добавлено - - -
Было бы памяти побольше можно было бы делать по две процедуры для сдвига (больших) спрайтов.. глядишь чего и выиграли бы.
shattered
14.06.2020, 15:32
Обнаружил занятный язык Cowgol -- http://cowlark.com/cowgol/ и пробую сделать pdp-11 backend для него. Будет интересно, если заработает :-)
shattered
17.06.2020, 01:23
Что-то получается. Если так пойдет и дальше, продолжим в ветке про кросс-системы :-)
var s: [uint8] := "ello, world!";
var c: uint8 := 'H';
ASm ".ttyout", c;
ASm ".print", s;
->
.mcall .exit, .print, .ttyout
.radix 10
start:
call f41
exit:
.exit
.even
c28xc0:
.byte 101,108,108,111,44,32,119,111,114,108,100,33,0
; __main workspace at ws+0 length ws+3
.even
f41:
MOV #c28xc0, R4
MOV R4, ws+0
MOVB #+72, r4
MOVB r4, ws+2
.ttyout ws+2
.print ws+0
endf41:
RTS PC
.even
ws: .blkb 3
.end start
Обнаружил занятный язык Cowgol -- http://cowlark.com/cowgol/ и пробую сделать pdp-11 backend для него. Будет интересно, если заработает :-)На БК 0010 было бы интересно увидеть такое.
shattered
21.06.2020, 16:15
Пока кодогенератор нацеливаю на процессор с EIS (чтобы меньше мучаться с div/mul и 32-битными типами), а runtime -- на rt-11. Простенькая замена команде TYPE работает :)
Пока кодогенератор нацеливаю на процессор с EIS (чтобы меньше мучаться с div/mul и 32-битными типами), а runtime -- на rt-11. Простенькая замена команде TYPE работает :)На БК есть эмулятор EIS (https://zx-pk.ru/threads/29759-extended-instructions-set-(eis)-mul-div-ash-ashc.html), сидит в дополнительной памяти, так что всё запустится!
shattered
21.06.2020, 22:12
Круто. Осталось понять, какие api у разнообразных ОС на БК :)
Круто. Осталось понять, какие api у разнообразных ОС на БК :)Да никакие :) Всё делается через Монитор (bios). EMT 20 - вывод текстовой строки, EMT 36 - чтение или запись файла, всё в таком духе. Это понимают все ОС.
shattered
21.06.2020, 22:45
ОК. Цыплят по осени считают, примерно тогда и вернемся к БК -- почитал первый попавшийся обзор ОС (http://bk0010.narod.ru/pashigorov/files/osreview.html) и порадовался :)
shattered
03.07.2020, 00:02
Двигаюсь дальше, потребовался malloc. В cowgol он есть, только нужно сообщить границы свободной памяти (LOMEM, HIMEM)
Пока сделал так (оставляю место для USR):
mov limit+2, LOMEM
.gval #limit, #$USRAR
mov r0, r1
.settop #-2
sub r1, r0
.settop r0
mov r0, HIMEM
<...>
limit: .limit
shattered
04.07.2020, 23:53
Видимо, лучше брать $USRLC и считать его за HIMEM, иначе при set usr noswap вычитается лишнее...
shattered
06.07.2020, 21:15
Какую минимальную версию RT-11 V5 имеет смысл поддерживать в генераторе кода (т.е. на какие макросы итд можно рассчитывать)? Наши клоны продвигались дальше 5.0?
shattered, ИМХО: возможно поддержать всю 5-ю линейку (с учётом, что после v5.4 SJ-монитора не стало) ?
И да - наши клоны минимум до 5.2 доходили точно, а вот выше я не знаю точно, как определить какой версией монитора
является ADOSSJ.SYS ? - он имеет свой номер версии , как версия сборки, но на каком дистр. основан я не знаю точно,
вполне возможно, что на 5.4 ?
Насколько важно, что поддержка современных дат - это 5.4G и выше?
А может ну их поддерживать и ваять строго под 7-ку?
Или так = 5.4 и выше )))
shattered
06.07.2020, 23:43
Видимо, это будет зависеть от того, какие .mcall потребуются для работы. Пока набор такой:
.mcall .serr, .herr, .exit, .qset, .mrkt, .cmkt, .print, .ttyout
.mcall .csispc, .lookup, .cstat, .enter, .close, .readw, .writw
.mcall .settop, .gval, .mfps, .mtps
Сейчас собираю в SIMH под 5.3.
5.3.
https://zx-pk.ru/threads/16861-poisk-fajlov-dlya-uknts-dvk.html?p=499359&viewfull=1#post499359
shattered
07.07.2020, 19:44
Занятно, учту. Любопытно будет найти полные дистрибутивы наших клонов, для сравнения (я пользусь http://simh.trailing-edge.com/kits/rtv53swre.tar.Z -- опубликован с разрешения Mentec, как я понял)
shattered, каких клонов?
РАФОС, ФОДОС и АДОС в архиве есть +
очень популярные отечественные сборки мониторов (QQ,CD)с разной степенью копания в них нашими программистами-анархистами )))
ОС ДВК - обзывалась некоторая часть разновидности SJ-монитора, но этот всё то же не выше 5.1 , в крайнем случае 5.2,
да!!! Ещё СЭМЗовский из поставки УК-НЦ 5.0 очень стабильная и шустрая - под УК-НЦ в то время идеально подходило (там даты не подд.)
<Для УК-НЦ ещё несколько специализированных вариаций всё той же 5.0. 5.1 и 5.2 попадаются).
shattered
07.07.2020, 21:20
Интересуют заводские, не копанные дистрибутивы.
Интересуют заводские, не копанные дистрибутивы.
Отечественные все "копанные" по определению ))) Или я не совсем понимаю, что интересно?
Чистенькие от DEC известно где брать, я же про наши клоны отвечаю :
из поставки ученического класса УК-НЦ и комплекта школьной\промышленной ДВК - других нет )))
Описания есть сканы в библиотеке, а ADOSSJ - собран от создателей с кряком на форуме SuperMax'а,
Семёрку для УК-НЦ дистрибутив с патчами от [form] - самое то для 0511...
Ну и СЭМЗ-же поставка для бытовых\промышленных УК-НЦ (220В которые в розницу можно было купить)
Фотки дискет в шапке темы поиска файлов есть )))
shattered
08.07.2020, 09:59
Интересно то, что поставлялось с завода и было описано в документации на машину (не только УКНЦ). Почитал форум и нашел такое, например:
МС0102 (Электроника 89) -- ФОДОС-3 и ТМОС-2
6 дисков DZ, децималы 4.800.020 + 4.800.020-{01,02,10,04,05}. есть исходники ОС.
http://archive.pdp-11.org.ru/ukdwk_archive/dwkwebcomplekt/FODOS3_6DISKET/
4 диска DZ, децималы 4.800.020-{11,12,13,14}
http://emulator.pdp-11.org.ru/XXDP/TMOS-2/TMOS-2_DZ.zip
shattered, по первой ссылке - это сравнительно недавно специально для архива товарищ сделал, по моей просьбе,
он там образы на реале считывал и перегонял, поизучай - капни полный архив от TheGWBV - 15мб который, там QQ - дистрибутив присутствует
(хотя может и не полностью).
Занятно, учту. Любопытно будет найти полные дистрибутивы наших клонов, для сравнения (я пользусь http://simh.trailing-edge.com/kits/rtv53swre.tar.Z -- опубликован с разрешения Mentec, как я понял)
Все версии, насколько я помню: http://www.classiccmp.org/PDP-11/RT-11/dists/RT11DV50.ISO.zip
Его тут уже во всех топиках вспоминали :D
shattered
13.07.2020, 15:39
Похоже, нужен еще и .readc -- любопытно, как оно работает с разннобразными дисками УКНЦ (MZ/WD/AZ/...). Проверить могу, правда, только в эмуляторе :(
любопытно, как оно работает с разннобразными дисками
скорее всего нормально будет работать с любым устройством, драйвер которого непосредственно в память загружен (предположение, надо проверять)
shattered
13.07.2020, 17:09
В документации на 5.6 опечатка, кстати
.READC area,chan,buf,wcnt,crtn,blk[,BMODE][,CMODE]
должно быть
.READC area,chan,buf,wcnt,blk,crtn[,BMODE][,CMODE]
shattered,
.READC ! 375 ! 10 ! ПЕРЕДЕТ ДАННЫЕ ПО УКАЗАННОМУ !
! ! ! ! КАНАЛУ В БУФЕР ПАМЯТИ И ВОЗ- !
! ! ! ! ВРАЩАЕТ УПРАВЛЕНИЕ ПРОГРАММЕ !
! ! ! ! ПОЛЬЗОВАТЕЛЯ, КАК ТОЛЬКО ЗА- !
! ! ! ! ПРОС НА ЧТЕНИЕ ДАННЫХ БУДЕТ !
! ! ! ! ПОСТАВЛЕН В ОЧЕРЕДЬ ВВОДА- !
! ! ! ! ВЫВОДА. ПОСЛЕ ОКОНЧАНИЯ ЧТЕ- !
! ! ! ! НИЯ УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ !
! ! ! ! ПОДПРОГРАММЕ ЗАВЕРШЕНИЯ
.RCVD ! 375 ! 26 ! ОСУЩЕСТВЛЯЮТ ПРИЕМ СООБЩЕНИЙ !
! .RCVDC ! ! ! ИЛИ ДАННЫХ, ПЕРЕДАВАЕМЫХ ДРУ-!
! .RCVDW ! ! ! ГИМ ЗАДАНИЕМ В РЕЖИМЕ FB. !
! ! ! ! АНАЛОГИЧНЫ ЗАПРОСАМ .READ, !
! ! ! ! .READC,.READW
далее см. раздел 5.2 (5.2.1) описания системной библиотеки
Sysmac.hlp
shattered
13.07.2020, 18:59
Проверил, можно ли сыграть на УКНЦ что-то похожее на 25fps видео (а-ля https://youtu.be/MWdG413nNkI?t=150 и https://www.youtube.com/watch?v=8Q1vN51o-Dg) -- можно, но тормозят регистровый доступ к памяти + чтение диска через канал к ПП... генератор кода тоже не факт, что оптимален (я думаю, что о цветной картинке можно пока забыть, тогда в нем есть, что оптимизировать)
Setting encoding fps of 25 which grants 80000 cycles per frame
<...>
Average compiled video frame: 1477
Maximum compiled video frame: 6011
Least amount of remaining cycles per frame: 1
Average disk I/O: 50 KB/s
Maximum disk I/O: 175 KB/s
73057
Проверил, можно ли сыграть на УКНЦ что-то похожее на 25fps видео (а-ля https://youtu.be/MWdG413nNkI?t=150 и https://www.youtube.com/watch?v=8Q1vN51o-Dg) -- можно, но тормозят регистровый доступ к памяти + чтение диска через канал к ПП... генератор кода тоже не факт, что оптимален (я думаю, что о цветной картинке можно пока забыть, тогда в нем есть, что оптимизировать)
Setting encoding fps of 25 which grants 80000 cycles per frame
<...>
Average compiled video frame: 1477
Maximum compiled video frame: 6011
Least amount of remaining cycles per frame: 1
Average disk I/O: 50 KB/s
Maximum disk I/O: 175 KB/s
73057
ух ты! мультики!
вот детишки будут рады )
shattered
14.07.2020, 15:11
Форкнут. живет и поддерживается тут
https://github.com/simh/simtools/tree/master/crossassemblers/macro11
и тут https://gitlab.com/Rhialto/macro11
- - - Добавлено - - -
ух ты! мультики!
не так быстро :) картинка в четверть экрана, наверно, получится плавная, а с полным экраном пока тухло.
не так быстро картинка в четверть экрана, наверно, получится плавная, а с полным экраном пока тухло.
а ты используй 10Х24 формат )
детишкам всё равно! лишь бы мультики! )
не так быстро :) картинка в четверть экрана, наверно, получится плавная, а с полным экраном пока тухло.
Лучше тогда задавить горизонтальное разрешение до 320 точек.
SuperMax
14.07.2020, 18:23
Проверил, можно ли сыграть на УКНЦ что-то похожее на 25fps видео (а-ля https://youtu.be/MWdG413nNkI?t=150 и https://www.youtube.com/watch?v=8Q1vN51o-Dg) -- можно, но тормозят регистровый доступ к памяти + чтение диска через канал к ПП...
можно читать с диска AZ через ЦП
shattered
15.07.2020, 00:27
Ага, и каждому покупателю AZ -- карточку с HD видео в подарок :)
SuperMax
15.07.2020, 08:06
Ага, и каждому покупателю AZ -- карточку с HD видео в подарок :)
скажем так, тому кто возьмется делать "видео" для УКНЦ - AZ в комплекте с сетевухой - в подарок
скажем так, тому кто возьмется делать "видео" для УКНЦ - AZ в комплекте с сетевухой - в подарок
короткометражку про Чужого - для УК-НЦ )))
shattered
15.07.2020, 11:58
Чтение с ЦП будет быстрее (~150 KB/s?), но отнимет циклы от собственно рисования видео, а ПП (и WDR.SAV на нем) действует как DMA, хотя и медленный (~50 KB/s). В общем, занятный эксперимент, пока отложу на потом.
randomizer
15.07.2020, 11:59
можно читать с диска AZ через ЦП
Насколько он быстрый?
Пробовал тестировать фремрейт при простом копировании из памяти без задержек в память ЦП.
На частоте ЦП 10МГц, копирование блока 16000 байт (320x200x2bpp) - получилось 29.3 кадра/сек
На 8 МГц - 23 кадра/сек
Для еще некоторого ускорения можно читать файл с AZ минуя ОС. Открываем файл обычным макро .LOOKUP, а далее повторяем тот же набор команд, что и в драйвере - естественно, в укороченном виде - мы ведь заранее знаем, что и куда посылать. Выбрали накопитель, послали команду чтения, вместо ожидания, пока оно там считается с SD-щки, выполняем какие-то действия, пришло время пользовать данные, ждем на всякий случай, вдруг еще не прочиталось, потом пересылаем данные из RD прямо куда нужно, минуя буфер в памяти. Потом выдаем новую команду чтения, следующего блока и можем 400-500 мкс заниматься своими делами. Программу подсказать?
Проверил, можно ли сыграть на УКНЦ что-то похожее на 25fps видео
Я думаю если сделать ЧБ (3й план сделать с прямым доступом), "задизерить" каждый кадр..и далее по списку (разница и.т.д).. будет очень эффектно.. на Комоде в 50б кадр сжимали и с дисковода читали :)
- - - Добавлено - - -
С телефона трудно писать... но хотел указать га одну проблему.. AZ в ЦП... третий план (если прямой доступ в ПП).... все варианты прямого доступа - "от лукавого" у Вас не останется памяти.
Нужно сделать буферизированную запись в ПП... дело за SuperMaxом илиAFZ.. предоставить для этого интерфейс... чтоб вы после вызовы процедуры RT-11 не придумывали ничего больше.
shattered
19.07.2020, 15:08
Для еще некоторого ускорения можно читать файл с AZ минуя ОС.
Хотелось бы оставаться в пределах API -- так что это на случай, если другие варианты не помогают.
shattered
21.07.2020, 14:38
Лучше тогда задавить горизонтальное разрешение до 320 точек.
да, и/или так:
Можно настроить таблицу строк таким образом, чтобы она указывала на адреса меньше 100000, т.е. на ОЗУ ЦП и ПП. Тогда менять информацию ВОЗУ можно прямым доступом, а это значительно быстрее.
Вы не хотите, случаем, видео в ascii-art попробовать проиграть на УКНЦ?
https://github.com/fossage/ASCII-Video
shattered
21.07.2020, 18:02
Может быть -- если зайду в тупик с проигрыванием XDV (https://x86dc.wordpress.com/)
shattered
06.09.2020, 13:18
Пока кодогенератор нацеливаю на процессор с EIS (чтобы меньше мучаться с div/mul и 32-битными типами), а runtime -- на rt-11. Простенькая замена команде TYPE работает :)
Вышел cowgol 2.0, допиливаю генератор под него. Пока половина тестов проваливается, в частности 32-битная арифметика - деление/умножение/сдвиги.
shattered
08.09.2020, 22:58
https://github.com/bsdimp/2.11bsd/tree/master/lib/libc/pdp/crt -- деление и умножение здесь.
https://www.bell-labs.com/usr/dmr/www/odd.html на закуску про фокус с делением.
http://www.telegraphics.com.au/sw/info/lcc-pdp11.html для сравнения, как делался генератор кода для lcc.
Вы не хотите, случаем, видео в ascii-art попробовать проиграть на УКНЦ?
https://github.com/fossage/ASCII-Video
Смысла большого именно на УКНЦ почти нет. На УКНЦ текст рисуется в графическом режиме. То есть будут затраты времени на передачу символов, потом программа на периферийном процессоре отрисовывает всё из фонтов. В общем напрямки - быстрее. Если хочется чего-то видеоподобное, то либо действительно отобразить видеопамять на адресное пространство периферийного процессора и запрограммировать его на непосредственную пересылку с карты на видеопамять с какой-то минимальной обработкой... Слоты расширения ведь у периферийного процессора. Операционную систему даже трогать не следует. Другой разговор, если устройство памяти находится в адресном пространстве ЦП. Вместо сетевого адаптера. Но будут задержки на пересылку...
Если очень хочется реализовать демку с минимумом чтения, то можно посмотреть в сторонy GIF-подобной анимации. То есть грузим в видеопамять и играя палитрой и таблицей адресов строк можно впихнуть что-то на некоторое время. Зациклив фрагмент на какое-то время, можно подгрузить ещё что-то в видеопамять с последующим пользованием.
Есть ещё способ теоретический... Но требует дополнительной проработки... Есть платка ремулятора. Но нужно программу менять. Можно STM32 использовать в качестве своеобразного ускорителя.
shattered
09.09.2020, 14:06
Но интереснее всего обойтись без дополнительного железа/разгона/итп (не считая контроллера диска и covox, разве что) и замены ОС.
При использовании программы в ПП как раз и решается проблема без дополнительного железа.
Операционная система после запуска - стоит свободна, так же свободный ЦП, который можно чем-то полезным загрузить. ;)
Если посмотрим на схему передачи данных в УКНЦ, коей пользуется большая часть программ, увидим:
Накопитель с контроллером в катридже
I
V
Буферная память ПП
I
V
Память ЦП
I
V
Память ПП(опять!!!)
Большой соблазн сократить из этой схемы ЦП минимизировав его роль:)
Почему так сделали на УКНЦ? УКНЦ - попытка задёшево сделать компьютер максимально совместимый с PDP-11 с графикой.
shattered
09.09.2020, 20:05
Звучит просто :-) Насколько это будет быстрее при том, что ПП медленнее, а чтение с диска + распаковка видео будут работать последовательно, а не параллельно?
Это всё надо пробовать... Прикинуть можно плюс-минус лапоть, но сколько именно ???
Главное хорошо продумать алгоритм.
Как правильно сжульничать, чтобы обойти низкое быстродействие процессоров ;)
Прямо в лоб результат будет не ахти :(
На Спектрумах были популярны демки... Надо как-то их брать за образец идей. Но архитектура там другая, по этому прямо не передрать.
На УКНЦ - работа с палитрами, работа с таблицей адресов строк(можно одно и то же содержимое памяти отображать на разные строки), программирование ПП.
Классическое видео не выйдет, но создать видимость, что оно есть можно ;)
shattered
10.09.2020, 10:06
Что тут думать, трясти надо (c) :)
А именно -- допиливать https://x86dc.wordpress.com/
shattered
13.09.2020, 22:37
https://github.com/DoctorWkt/Apout -- симулятор Unix V1-V7, 2.9BSD, 2.11BSD
в копилку инструментов разработки.
shattered
26.09.2020, 13:54
Вышел cowgol 2.0, допиливаю генератор под него. Пока половина тестов проваливается, в частности 32-битная арифметика - деление/умножение/сдвиги.
Допилил, заслал автору. В ответ автор пишет ассемблер :)
https://www.youtube.com/watch?v=9D0Lrgmm8f8
Отсюда вопрос -- поддерживает ли MACRO-11 из наших версий RT-11 дополнительные инструкции ВМ2 ?
MACRO-11 из наших версий RT-11
Насколько я копался с ассемблером MACRO-11 из наших версий RT-11 - это слегка (не принципиально) изменённые версии от DEC. И поскольку наши 1801ВМ процы - не от DEC - есссвенно, MACRO-11 ничего о них не знает. Правда, проблемы я в этом не вижу - макросы решают почти любые проблемы
shattered
26.10.2020, 21:49
Нашлось такое описание, но без самих библиотек:
Описание макровызовов для работы с периферийным процессором УК-НЦ
Автор: Жалнин Д.Н. 11.3.92
Все макрорасширения включены в библиотеку SYSMAC.MLB и поддерживаются
объектной библиотекой при компоновке (все макрорасширения вызовов ЕМТ не
содержат - отсюда необходимость использования SYSLIB.OBJ). После вызовов
регистры общего назначения не нарушаются, исходные параметры не изменяют-
ся.
.PPINI - инициализация работы с периферийным процессором.
Команду необходимо подать один раз в начале про-
граммы.
.PPEXI - Удаление всех подпрограмм из памяти ПП, которые
были загружены командой .PPINI . Удаление под-
программ, загруженных командой .PPRUN должно
производиться командой .PPDEL .
.SLPRI ADR - печать текста в служебной строке. ADR - обяза-
тельный аргумент, содержащий адрес строки. Пер-
вый байт строки должен содержать номер позиции в
строке.
.PPRUN BEG,FIN,FACT,LEN - загрузка и запуск программы в ПП.
Входные параметры:
BEG - начало программы
FIN - конец программы
Выходные параметры:
FACT -
фактический адрес загрузки программы в
периферийный процессор (использу-
ется для повторного пуска про-
граммы в ПП командой .PPCAL, a
так же для удаления программы из
памяти ПП)
LEN - фактическая количество переданых
байтов (используется для последу-
ющего удаления программы из памя-
ти ПП.
.PPCAL FACT - вызов загруженной в память ПП подпрограммы.
FACT - фактический адрес запуска подпрограммы.
.PPDEL FACT,LEN - удаление подпрограммы из памяти ПП.
FACT - фактический адрес начала подпрограммы
LEN - длина удаляемой подпрограммы
.PPRED ADRIN,ADROUT,LEN - чтение данных из озу ПП.
ADRIN - адрес озу ПП
ADROUT - адрес озу ЦП, куда передаются данные
LEN - длина в байтах
.PPWRI ADRIN,ADROUT,LEN - запись данных в озу ПП.
ADRIN - адрес озу ЦП, откуда читаются данные
ADROUT - адрес озу ПП, куда записываются данные
LEN - длина в байтах
После макровызова байт ошибки 52 содержит , если операция заверши-
лась успешно, в противном случае - код ошибки (см. описание 31-1 9
1)
ПРИМЕЧАНИЕ. В каждой макрокоманде необходимо указывать все огово-
ренные в ее описании параметры. В противном случае правильность работы
макрокоманд не гарантируется!
-----------------------------------------------------------------------
Макроопределения для прямой работы с дисководом
.SCTRE NDSK,LOC,ADDR,LEN - чтение сектора с диска
NDSK - номер привода, 7 бит - верхняя сторона
LOC - мл. байт номер дорожки,
старший байт - номер сектора
ADDR - адрес буфера
LEN - количество слов
.SCTWR NDSK,LOC,ADDR,LEN - запись сектора на диск
NDSK - номер привода, 7 бит - верхняя сторона
LOC - мл. байт номер дорожки,
старший байт - номер сектора
ADDR - адрес буфера
LEN - количество слов
.FORMAT NDSK,NTRK - форматирование
NDSK - номер привода, 7 бит - верхняя сторона
NTRK - номер дорожки
ПРИМЕЧАНИЕ. Метка LOC обязана иметь четный адрес, как и другие мет-
ки, или быть регистром.
================================================== =====================
BlaireCas
30.10.2020, 15:35
Немного помучавшись с таблицей строк возникла не то чтобы проблема, а вопрос такой.
Зачем в УКНЦ первые 18 элементов в таблице строк?
Обычно у них прописываются адреса видеопамяти типа 0, мол не используется. Но туда можно ставить палитру/разрешение экрана/яркость.
Второй момент - почему установка палитры слетает для каждого кадра, а установка разрешения и яркости не слетает? То-есть не получается один раз сделать палитру, а потом закольцевать без палитры таблицу строк только на видеопамять? Необходимо хоть раз установить палитру (разрешение все-ж не нужно устанавливать, достаточно один раз и потом переделать таблицу строк на 2-word'a на строку
(фраза из фильма - "хотел бы я тому изобретателю взглянуть в глаза")
Установка таблицы строк (в периферийном процессоре):
(я ставлю адреса таблицы строк с адреса 2000, но это не суть важно)
; set lines table
; idea here is to make plain ppu vram -> device projection
; WARNING! lines table starts with 18 lines (i don't know the reason)
; first 2 lines to set palette and resolution
; to set palette as soon as possible is ... important I think
mov #2000, R0
mov #152140, R1 ; bottom 18th line vaddr
mov #^B1111101011111000, (R0)+ ; YGRB for 011 010 001 000
mov #^B1111101111111110, (R0)+ ; YRGB for 111 110 101 100
mov #0, (R0)+ ; vaddr
mov R0, (R0)
add #2, (R0)
bis #2, (R0)+ ; next 4-word to set resolution
mov #^B0000000000010000, (R0)+ ; no cursor
mov #^B0000000000000111, (R0)+ ; 640x288, max luminance (..010111 - 320, ..100111 - 160, ..110111 - 80)
add #80., R1 ; advance to next line
mov #0, (R0)+ ; vaddr
mov R0, (R0)
add #2, (R0)+ ; next are 2-word elements
; second 16 bottom lines
mov #16., R5
10$: add #80., R1
mov #0, (R0)+
mov R0, (R0)
add #2, (R0)+
sob R5, 10$
; next 288 'main' lines from top, vaddr = 100000
mov #100000, R1
mov #288., R5
20$: mov R1, (R0)+
mov R0, (R0)
add #2, (R0)+
add #80., R1
sob R5, 20$
; cycle to 'first' element
dec R0
dec R0
mov #2120, (R0)+
; all lines are set - put them to work
clr @#270
mov #2006, @#272
Первые 18 (почему 18, что за магическое число?) можно установить на нижние адреса и потом закольцевать, то-есть последнюю часть не делать с 288 строками, а делать только с 270-ю и закольцевать на первую.
(проще говоря - УКНЦ это какая-то жуть)
Немного помучавшись с таблицей строк возникла не то чтобы проблема, а вопрос такой.
Если будешь мучиться дальше.. слезная просьба.. разберись с мусором котjрый возникает вверху экрана при переносе адреса ВОЗУ в ЦП :)
BlaireCas
30.10.2020, 16:05
переносе адреса ВОЗУ в ЦП
Это невозможно. Из ЦП только через регистры в ВОЗУ.
Можно сделать таблицу строк на plain адреса 100000.. в ПП. Но с одним но - там будет только plane 0 в этих адресах. Отключив ПЗУ из этих адресов.
; WARNING !!! We can't read (and bit/tst so on..) from there, but CAN write
mov #161, @#177054
; get ROM banks back
; mov #1, @#177054
Ты сможешь банально ставить точки белым цветом (например установив палитру нужную) записав что-то навроде mov #1, @#100000 в ПП. Без регистров и прочей ерунды, навроде как в "нормальных" компьютерах (шучу, укнц тоже неплохая техника).
Но считывать из них не выйдет. Только записывать. Команды со считыванием памяти (типа bis) будут в любом случае начинать читать из ПЗУ (оно быстрее как пояснял Alex_K поэтому считается из него первым, то-есть отключение банков ПЗУ неполноценное).
(однако команда movb несмотря на то что утверждается что она сначала читает слово - работает нормально в таком случае, эмуляторы такое не умеют, реальная укнц подтверждает что это так)
Это невозможно. Из ЦП только через регистры в ВОЗУ.
Кто сказал?
Можно.... только планы у тебя будут разнсены физически.. и третий план будет в ПП:)
А два первых будут лежать последовательно и занимать почти всю память:)
шучу, укнц тоже неплохая техника
я уже писал, извиняюсь, что тут не по теме - приятно порадовал звук на живой машинке в KRK )
Пищалка рулит !!! )
Немного помучавшись с таблицей строк возникла не то чтобы проблема, а вопрос такой.
Зачем в УКНЦ первые 18 элементов в таблице строк?
Ребята, все же описано уже в теме с реверсом: Описание циклов памяти видеоконтроллера (https://zx-pk.ru/threads/30964-revers-inzhiniring-uknts-(1515khm1-amp-2-1801vp1-1801vm2).html?p=1075864&viewfull=1#post1075864)
- - - Добавлено - - -
Это невозможно. Из ЦП только через регистры в ВОЗУ.
Конечно возможно.
- - - Добавлено - - -
Если будешь мучиться дальше.. слезная просьба.. разберись с мусором котjрый возникает вверху экрана при переносе адреса ВОЗУ в ЦП
Возможно, ты не отключил системные прерывания или не перенес стек, вот поэтому и мусор был в начале экрана.
Ребята, все же описано уже в теме с реверсом: Описание циклов памяти видеоконтроллера
Если найдешь время чиркни.. как это делать правильно (не с одной строкой).., а так чтобы можно было реально пользоваться:)
Если найдешь время чиркни.. как это делать правильно (не с одной строкой).., а так чтобы можно было реально пользоваться
Я не понимаю твоего вопроса)
По ссылке описана подробно работа видеоконтроллера.
Это невозможно. Из ЦП только через регистры в ВОЗУ.
Titus, почему ты всегда стараешься быть вне контекста? Развиваешь наши когнитивные возможности???
- - - Добавлено - - -
Я так же с китайцами общаюсь :) Когда деньги возвращать - "моя-твоя не понимать... мы все сделать"
shattered
31.10.2020, 14:37
Описание макровызовов для работы с периферийным процессором УК-НЦ
Автор: Жалнин Д.Н. 11.3.92
Все макрорасширения включены в библиотеку SYSMAC.MLB и поддерживаются
объектной библиотекой при компоновке (все макрорасширения вызовов ЕМТ не
содержат - отсюда необходимость использования SYSLIB.OBJ).
+ нашлись обе.
+ нашлись обе.
Ну это блин... заговор какой-то.
Теперь Титус не увидит то что написано на предыдущей странице..
Titus, почему ты всегда стараешься быть вне контекста? Развиваешь наши когнитивные возможности???
Я так же с китайцами общаюсь Когда деньги возвращать - "моя-твоя не понимать... мы все сделать"
Возможно, я так плохо тебя понимаю. Поэтому учитывая это, задавай мне вопросы подробные)
Возможно, я так плохо тебя понимаю. Поэтому учитывая это, задавай мне вопросы подробные)
Ты не русский что ли?
shattered
31.10.2020, 14:52
Страуса не пугать, пол бетонный, так сказать :-)
Я блин из Казахстана и то понимаю все тонкости Русского языка.. а тут блин что ни вопрос - моя твоя не понимать.
- - - Добавлено - - -
Покажи наконец НАМ "недоделкам", как по твоему мнению нужно правильно делать.
- - - Добавлено - - -
Может я действительно по русски неправильно изъясняюсь... давай по простому.. нарисуй зеленый квадрат 8х8.. в центре экрана (с прямым доступом к ВОЗУ).. не нужно синий:)
20 строк.. больше разговоров:) И я увижу где я ошибался:)
- - - Добавлено - - -
И мы "недоделки".. будем этим пользоваться как эталоном:)
- - - Добавлено - - -
Я бы не подначивал если было бы все просто.. поскольку Титус рекламирует эту тему.. пусть покажет как работать, заодно и свои 128 цветов может показать (на реальном примере.. не на одной строке)
Может я действительно по русски неправильно изъясняюсь... давай по простому.. нарисуй зеленый квадрат 8х8.. в центре экрана (с прямым доступом к ВОЗУ).. не нужно синий
20 строк.. больше разговоров И я увижу где я ошибался
Я не собираюсь никому ничего показывать, доказывать или писать примеры.
Есть документация, на которую я дал ссылку.
Если что-то непонятно в моей документации, задавайте уточняющие вопросы.
Если что-то непонятно в моей документации, задавайте уточняющие вопросы.
На которые ты будешь отвечать стандартными ответами... читайте документацию..
Как тогда понять работает это или нет (то что я пробовал - не работает)
- - - Добавлено - - -
Как ты докажешь обратное?
- - - Добавлено - - -
Твои примеры далеки от жизни...
Зачем тогда делать громкие заявления если тебе по..
- - - Добавлено - - -
Я не собираюсь никому ничего показывать, доказывать или писать примеры.
Из чего следует, что тебе в принципе - насрать..
Обидно.. столько времени потрачено... чтобы понять, что все это пустышка.
- - - Добавлено - - -
Все вы буржуи.. падки на сенсации -"128 цветов на УКНЦ", прямой доступ к ВОЗУ".. Где реальные примеры Ваших открытий?
А вот где - "я не обязан вам что-либо объяснять"... В итоге, что имеем - по крупицам собранная информация является фейком... За столько лет никто даже не попытался проверить... зато Хобот всем гласит что УКНЦ 128 цветов. А все почему - "я не обязан вам что-либо доказывать", то что ты показал Хоботу к реальной жизни не имеет ни какого отношения (о чем ты умолчал)
shattered
31.10.2020, 17:33
Где реальные примеры Ваших открытий?
Вы что, купить их хотите?
Вы что, купить их хотите?
А что обогатиться желаете???
- - - Добавлено - - -
Что Вы имеете пгродать?
- - - Добавлено - - -
Вышеуказанные грабли не интересуют.., а на другие у Вас фантазии не хватит:)
- - - Добавлено - - -
Что смотрите.. опровергните меня :)
ато Хобот всем гласит что УКНЦ 128 цветов. А все почему - "я не обязан вам что-либо доказывать", то что ты показал Хоботу к реальной жизни не имеет ни какого отношения (о чем ты умолчал)
Где? Прямую ссылку давай! У меня война с фанатами цветастости с самого начала, а с ув. д.г.к. @Titus (https://zx-pk.ru/member.php?u=748)'ом вообще без
шансов на мирный договор. УК-НЦ - это ч\б машинка и точка!!! Только градации серого и никаких аигреков и прочего
навесного - ибо ПО под это вообще нет и вряд ли будет, для получения точной информации про исследования доктора
про цвета см. 1 - соотв. тему на форуме, 2 - исходник теста палитр и саму программу. И не надо снова прикручивать мне то чего у меня не прирастётся ))) Я никому и нигде не утверждаю того, что сам не могу гарантировать (ПКМ стараюсь так делать). И ещё - в этом вопросе надо учитывать, что наш ув. доктор с классической УК-НЦ в зрелом и сознательном возрасте никогда не имел, та машинка ,которая всю дорогу у него дома была - это копаный-перекопаный передел, где неизвестно что "улучшено, перепаяно и ускорено". В общем читайте форум!!! Прошу меня в дальнейшем в качестве антигероя и третьего лица в своих постах не использовать - я вам не деревянный Итальянец какой-нибудь.
Хотите что то сообщить мне лично или что то уточнить - обращайтесь ко мне лично.
Спасибо.
- - - Добавлено - - -
Твои примеры далеки от жизни...
каждый живёт своей собственной жизнью, что гарантируется конституцией нашего государства.
А общение на форуме должно основываться на взаимном уважении и понимании сути ответов,
которые публикует другой участник. В случае же взаимной неприязни вас никто не заставляет дискуссию
с конкретным участником вести - для этого есть и форумные настройки ( что гораздо более здраво, чем
публичная истерика на пустом месте в очередной раз).
Хотите что то сообщить мне лично или что то уточнить - обращайтесь ко мне лично.
:) :(
публичная истерика на пустом месте в очередной раз).
Жениться вам Барин нужно...
что гораздо более здраво, чем
публичная истерика на пустом месте в очередной раз).
чем ваша тов @S_V_B (https://zx-pk.ru/members/8684-s_v_b.html) публичная истерика на пустом месте и не в первый раз.
Вы упрямый, сложно понимающий посты других людей форумчанин, что затрудняет
комфортное с вами общение.
- - - Добавлено - - -
зато Хобот всем гласит что УКНЦ 128 цветов.
ссылки так и не увидел, как мне реагировать на такое по вашему?
мой вывод - вы просто не читаете форум, ибо написать такое про меня может
у вас нет и не может быть никакого повода. К слову - я вообще во всех этих
видеостроках, лучах, синхросмесях и прочего ничего не понимаю. Как я
могу все кричать о том в чём ничего не смыслю? ))) Вы пишите про меня бред
и тут же смайликами украшаете свой следующий пост - который даже формального "Хобот, извини к слову пришлось" не содержал.
Жениться вам Барин нужно...
И я не барин! Я потомственный крестьянин если что ( в плане классовой принадлежности)
Подобные рекомендации напоминают только известный анекдот про врача и наркомана.
BlaireCas
31.10.2020, 22:43
Конечно возможно.
КАК? (речь про доступ с ЦП без регистров к видеопамяти, с ПП оно понятно что можно в один план ВОЗУ залезть на запись по памяти)
Расскажи-же не томи. Адреса меньше 100000 поставить?
shattered
31.10.2020, 22:48
Адреса меньше 100000 поставить.
BlaireCas
31.10.2020, 23:05
Кстати да, получилось из ЦП писать в ВОЗУ поставив адреса в строках меньше 100000.
Проверил на реальной УКНЦ (правда сейчас без цветов, в ч/б варианте - но работает).
Хотя выглядит конечно довольно странно и возможно не особо применимо, но неплохо. Не знал.
Кстати да, получилось из ЦП писать в ВОЗУ поставив адреса в строках меньше 100000.
Проверил на реальной УКНЦ (правда сейчас без цветов, в ч/б варианте - но работает).
Хотя выглядит конечно довольно странно и возможно не особо применимо, но неплохо. Не знал.
Нормально выглядит.
И вполне нормально разместить видео в первых 64Кб памяти. Для разрешения 320 - это всего чуть более 20Кб. И остается еще много для всего остального.
Для разрешения 320
которое ИМХО оптимальное для УК-НЦ игрушек )
40 - буковок в строке, а больше и не надоть )
40*8 = 320 ! Ура !
чем ваша тов @S_V_B публичная истерика на пустом месте и не в первый раз.
Вы упрямый, сложно понимающий посты других людей форумчанин, что затрудняет
комфортное с вами общение.
Может я очень тупой.. но зачем эти квесты??? Я тебя не понял.. задай вопрос повторно.. Если ты разобрался в теме.. напиши как это делать правильно, зачем подвешивать тему в воздухе на годы???
Кстати ты Хобот всегда весьма активно поддерживаешь непроверенные факты.. в том числе и о 128ми цветности УКНЦ.. В теме нужно было указать что это частный случай.. не имеющий к реальной жизни никакого отношения.
В итоге я истерик.. ,а Вам и так хорошо. Если бы отношение было несколько другое, то и сделали бы уже гораздо больше..
КАК? (речь про доступ с ЦП без регистров к видеопамяти, с ПП оно понятно что можно в один план ВОЗУ залезть на запись по памяти)
Трудно было показать как нужно делать :)....У тебя получилось.. странно у меня тоже так себе.... а как правильно.. специалисты умолчали.
- - - Добавлено - - -
которое ИМХО оптимальное для УК-НЦ игрушек )
40 - буковок в строке, а больше и не надоть )
40*8 = 320 ! Ура !
Не факт.., а когда ты линии рисуешь? тогда 320 бэд.. Вот ты блин Хобот готов всех поддержать... поскольку сам не в чнем не рубишь :)
shattered
02.11.2020, 14:07
И вполне нормально разместить видео в первых 64Кб памяти. Для разрешения 320 - это всего чуть более 20Кб. И остается еще много для всего остального.
Я думал про этот вариант для видеоплеера, но в той же памяти еще нужно уместить нераспакованное видео... и побольше, побольше, чтобы сгладить неравномерное чтение с диска :)
BlaireCas
11.12.2020, 13:10
Для информации:
Попробовал компилятор DECUS C ради интереса. Что-ж, он компилирует вполне под RT-11 и простенькие вещи на УКНЦ работают.
Можно скачать .dsk с ним например отсюда http://www.classiccmp.org/PDP-11/RT-11/freeware/dsk/misc/ (decusc.dsk)
Компиляется сишник скажем так (в LD1 примаунчен диск с декусом):
ASSIGN LD1: C:
RU C:CC test
RU C:AS test
link test,C:(SUPORT,CLIB)
Но... так и не понял как там работать с floating point. Поскольку с float он генерит инструкции какие-то под математический сопроцессор что-ли? (FP-11?)
Получается код навроде:
...
ldcif _h,r3
ldf _y,r0
divf r3,r0
stf r0,_y2
...
Несмотря на то что ассемблер и линкер такой код нормально соберут, но ... :)
DECUS C
Он вполне пригоден, но старомоден - чистый K&R и никакого анся :)
Есть еще PDP11 C для RT-11, он вполне себе ANSI, но к сожалению только для mapped мониторов.
Но... так и не понял как там работать с floating point. Поскольку с float он генерит инструкции какие-то под математический сопроцессор что-ли? (FP-11?)
Да, под FPP-11. Ну или под FPA (по командам одно и тоже, по скорости раз в пять быстрее), но ни того ни другого на УК-НЦ нет. Из советских микропроцессором - есть на 1811 и 1831, из буржуйских, соответственно на F-11 и J-11. Для 1801ВМ3 был выпущен как микросхема сопроцессора 1801ВМ4. Что то ещё есть под аналог ВМ3 для 1806, но тут сходу не скажу
Возможно, у компилятора есть какой-нибудь ключ - какие команды для плавучки использовать, но ... надо смотреть доки.
С похожей проблемой столкнулся при использовании компилятора с FORTRAN-77 на Квант-е 4С (1801ВМ3) - он тоже для плавучки использует FPP-11, но мне было проще - на Квант я перенёс RSX, а под RSX был программный эмулятор.
Вроде что то такое (эмулятор) был и для DECUS C, но учитывая мою "любовь" к C - не в курсе
Но... так и не понял как там работать с floating point. Поскольку с float он генерит инструкции какие-то под математический сопроцессор что-ли? (FP-11?)
Да, генерит инструкции под FP-11. Но в библиотеках должен быть эмулятор FPP. При старте программа захватывает вызов прерывания TRAP10. При исполнении на УКНЦ вызов инструкций FPP вызывает прерывание TRAP10 (отсутствующая команда). А уже подпрограмма обработки TRAP10 вызывает эмулятор FPP. Так что всё исполнится нормально, только довольно медленно, эмуляция всё-таки.
Он вполне пригоден, но старомоден - чистый K&R и никакого анся :)
Есть еще PDP11 C для RT-11, он вполне себе ANSI, но к сожалению только для mapped мониторов.
http://archive.pdp-11.org.ru/ukdwk_archive/dwkwebcomplekt/C/
Ещё, помню, продавался на Кванте в начале 90-х продавали драйвер-эмулятор FPU под RT11. Помню, что в компиляторе С была библиотека эмуляции FPU, но какой именно компилятор - не помню, под RT-11. C фортраном-77 я тогда только целочисленную арифметику смог запустить без FPU. Недавно только прочитал, как можно было ... Но тогда интернета не было :(
драйвер-эмулятор FPU под RT11.
на одной из дискет ФОДОС есть такие библиотеки
EIS .OBJ 43 14-Mar-1985 22'016
FIS .OBJ 41 14-Mar-1985 20'992
FPU .OBJ 27 14-Mar-1985 13'824
Единственно странно, что FPU.OBJ самый маленький по размеру... Так что скорее всего это не эмуляция :(
В случае бы эмуляции - был бы самым большим по размеру.
Похоже просто математические библиотеки заточенные под какой-то компилятор. Или под генерацию какого-либо компилятора(интерпретатор ???)
Единственно странно, что FPU.OBJ самый маленький по размеру... Так что скорее всего это не эмуляция
Похоже просто математические библиотеки заточенные под какой-то компилятор
В поставке FORTRAN-а (да и Pascal-я, насколько я помню) примерно так и было - исполняющие (математика) библиотеки под разный набор команд проца. В процессе установки выбиралась нужная и вместе с общей частью создавались библиотека.
- - - Добавлено - - -
Кстати, по названиям и размерам похоже на библиотеки от поставки РАТФОР-а :)
- - - Добавлено - - -
Последнее предложение не совсем точное. Компилятор РАТФОР-а даёт на выходе текст на FORTRAN-е, так что это файлы из исполняющей системы FORTRAN-а, если точнее, то FORTRAN-IV
Про фортран, который IV, от DEC - помню, что там был модульный код(по листингу интересно смотреть) с минимальным объёмом, либо оптимизация под EIS и FIS. При оптимизации включались инструкции непосредственно в тело программы, росло быстродействие но так же рос объём. И при генерации можно было сделать более компактный компилятор, отбросив лишние опции для генерации кода. Особенно актуально было для тех систем, где ничего другого, кроме двух дискеток МХ не было. Обычно оставляли только модульный код(THR - дай бог памяти) и увсё... Да ещё библиотеку фортрановскую в SYSLIB включали. На кафедре вычислительной математики для студентов делалась ещё система меню, дабы студенты своими грязными руками к системе не лезли :)
По крайне мере для FORTRAN-IV 2.8 уже был FPP.OBJ, и, насколько мне не изменяет память, был он и для более ранних версий. Просто на тех PDP-11, где я использовал FORTRAN-IV, FPP не было, так что в памяти и не отложился.
А вариант кода THR (thread) у нас назывался шитый, а не модульный.
Времени прошло много... Давно в фортране не сидел ...
Что-то завбывается...
У меня тогда в радиусе доступности не было ни одного компьютера с FPU... Единственные, которые с FPU видел на расстоянии - "Электроника-85". Стояли две штуки в деканате "И", там где иностранцы учились... Ну уж без такой передовой советской техники было ну ни как :)
Ой, ещё вспомнил - где у нас парочка "Электроника-85" стояла - кафедра физики, там же где СМ-1700 под ... Рафосом гоняли... Я пару раз всего лишь видел терминалы и оба раза видел загруженнный ... РАФОС-SJ... Я вообще охренел тогда. Один раз понятно, но когда повторно... То ли я везучий такой :) Студентов туда не пускали. Техника выделенная для член-кора АН-СССР. У нас в институте тогда два член-кора было. Единственный VAX-образный на весь институт.
Давно в фортране не сидел ...
Хороший язык :)
А я тут как-то сунулся ради интереса в g77 - а там фортраном вообще не пахнет.
Уже начиная с самого начала: не поддерживается фортрановское вертикальное форматирование :)
Хороший язык
http://archive.pdp-11.org.ru/ukdwk_archive/ukncbtlwebcomplekt/FortranIV_GromovK/
Хороший язык :)
А я тут как-то сунулся ради интереса в g77 - а там фортраном вообще не пахнет.
Уже начиная с самого начала: не поддерживается фортрановское вертикальное форматирование :)
Ну на старых компиляторах была опция совместимости со старым синтаксисом. А так да, изменения в фортране сделали его сильно ближе к паскалю...
Про визуальные версии вообще...
А так да, изменения в фортране сделали его сильно ближе к паскалю...
Одна из особенностей фортрана - возможность передавать аргументы в любом количестве, пропуская ненужные - в g77 этой возможности нет.
Другая фича - векторность аргументов. Если склероз не врет, это даже всегда документировалось в руководствах по фортрану.
То есть вызовы вида RAN(0, 0) - это не вызов с двумя нулями в качестве аргументов, а вызов с двумя нулями первый раз.
В g77 и тут все испоганили :)
Другая фича - векторность аргументов.
Более точно - передача по ссылки. То есть RAN(0, 0) - это не вызов с двумя нулями в списке параметров (передача по значению), а с адресами, указывающими на ячейки, где лежат нули. Если в g77 действительно реализовали только передачу по значению - то это полная хрень
Ещё читом был оператор EQUIVALENCE. Можно было преобразовывать типы не вызывая функции :)
У фортрана от мелкомягких(был и таковой :) ) были опции передачи параметров при вызове. Помню точно, что было две формы передачи аргументов Pascal и С.
Хотя сейчас современные компиляторы фортрана популярностью не пользуются :(
Есть вроде как фортран от интела... Я его пытался запустить, но чего-то не понравилось...
Последняя более-менее версия Compaq fortran - ведёт свою историю от компилятора DEC.
И что самое печальное, что разрабатываются новые стандарты, есть Fortran 2018, но я не знаю какой из компиляторов сей стандарт поддерживает :(
Ещё читом был оператор EQUIVALENCE.
В Pascal-е есть аналог :)
Последняя более-менее версия Compaq fortran
Есть и поновее :)
COMPILER: HP Fortran V8.2-104679-48H9K
В паскале есть указатели ... Но многие считают, что это типа "неправильный паскаль"... Типа всё должно расписано и шаг в лево, шаг в право - попытка к бегству, а прыжок на месте - провокация :v2_dizzy_army:
Типа можно тогда будет избежать ошибок... Наивные :)
В паскале есть указатели ... Но многие считают, что это типа "неправильный паскаль"...
Ну, с учётом того, что указатели есть и в Modula-2, Вирт не согласен с этими некоторыми :)
Но EQUIVALЕNCE можно сделать и без них :)
В паскале есть указатели
У DEC для фортрана есть CALL GETADR на данный случай :)
Так Вирт - это Вирт ... Тот кто заложил основу....
Глянул статью про фортран, там написано, что прекращены обновления:
Hewlett Packard
Watcom
PathScale
G95
Open64
Unisys
:(
Но что меня поразило:
The AMD Optimizing C/C++ Compiler (AOCC) compiler system is a high performance, production quality code generation tool. The AOCC environment provides various options to developers when building and optimizing C, C++, and Fortran applications targeting 32-bit and 64-bit Linux® platforms. The AOCC compiler system offers a high level of advanced optimizations, multi-threading and processor support that includes global optimization, vectorization, inter-procedural analyses, loop transformations, and code generation. AMD also provides highly optimized libraries, which extract the optimal performance from each x86 processor core when utilized. The AOCC Compiler Suite simplifies and accelerates development and tuning for x86 applications.
То есть называется компилятор С, а переваривает и фортран....
Watcom
Watcom еше во времена глубогого OS/2 вроде слился, взамен остался openwatcom, но чем там дело кончилось уже не знаю.
Правда это про C++, про фортран не знаю.
В общем, лучше MACRO-11 для PDP-11 ещё не придумали :)
В общем, лучше MACRO-11 для PDP-11 ещё не придумали
Ну учитывая его простоту и удобство - да.
Я начинал с фортрана, а оказалось MACRO-11 просто как три рубля :)
Зато когда потом стал на ассемблере x86 писать - долго плевался - как резко вернули в каменный век, но каменный топор тоже отобрали :)
Ну учитывая его простоту и удобство - да.
На самом деле основа - в простоте и удобстве системы команд, но удобные структурные операторы (позволяют обойтись почти без локальных меток) легко реализуются на макросах. Ещё бы длину идентификаторов побольше.... :)
удобные структурные операторы
Был у нас такой язык в использовании PL-11 - выглядел как паскаль, но по сути - этакий MACRO-11 в обертке.
Я даже документацию по нему нашел в инене, но ни одного компилятора :(
Был у нас такой язык в использовании PL-11 - выглядел как паскаль, но по сути - этакий MACRO-11 в обертке.
Плюс макросов - тебе всегда доступно всё остальное из MACRO-11.
Минусы языков, выглядящих как MACRO-11 (надо посчитать, но штук пять примерно я пробовал) - не всё из MACRO-11 доступно.
Когда мне попался пакет макросов структурных операторов - я перестал пробовать и даже начал отходить от связки FORTRAN-MACRO-11, ну а сейчас с того момента как опять вернулся к PDP-11 - только MACRO-11 (со структурными макросами) и использую.
Кстати, у меня был (!) компилятор в PL-11, но... ка бы раньше знать то - я бы всё постарался сохранить... :(
Самое обидное, что ушло много, чего сам писал ... И ушло много, чего писали люди вокруг меня(даже простенькие игры для КЦГД, всякие загрузки для КЦГД, до сих пор обидно, что не списал клон нортона-командера сидящий в КЦГД и не требующий памяти у центрального процессора ) :(
Я так думаю, что если поискать хорошо, то PL-11 найти можно... Но, то что было написано, существовало в одном-двух экземплярах ушло :(
Я так думаю, что если поискать хорошо, то PL-11 найти можно
Я давно его (периодически) ищу. Как и DECNet для RT...
DECNet для RT...
Его много кто ищет.
В HECnet как-то даже кто-то обещал посмотреть, но дело так и заглохло.
А вот обычного BASIC-11 для RSX не завалялось нигде?
BP2 как интерпретатор не годится. А то уже мысли дурацкие лезут в голову - переделать RTшный :)
Directory DU3:[11,104]
2020-12-16 22:44
IMPURE.OBJ;1 3. 1976-09-23 15:11
EDIT.OBJ;1 21. 1976-09-23 15:12
XEQT1.OBJ;1 13. 1976-09-23 15:12
CKCTCI.OBJ;1 1. 1976-09-23 15:12
STOP.OBJ;1 1. 1976-09-23 15:12
PNTRS.OBJ;1 5. 1976-09-23 15:13
XEQT2.OBJ;1 6. 1976-09-23 15:13
IOPK1.OBJ;1 5. 1976-09-23 15:13
PRU1N.OBJ;1 1. 1976-09-23 15:13
XEQT0.OBJ;1 16. 1976-09-23 15:13
FUNC.OBJ;1 7. 1976-09-23 15:14
IOPK0.OBJ;1 11. 1976-09-23 15:14
CALLS.OBJ;1 5. 1976-09-23 15:15
DEBUG.OBJ;1 1. 1976-09-23 15:15
PRU0.OBJ;1 2. 1976-09-23 15:15
CALLI.OBJ;1 1. 1976-09-23 15:16
PRU1.OBJ;1 5. 1976-09-23 15:16
CKCTCO.OBJ;1 1. 1976-09-23 15:17
COMPIL.OBJ;1 4. 1976-09-23 15:17
IOPK2.OBJ;1 4. 1976-09-23 15:18
KEYS.OBJ;1 7. 1976-09-23 15:18
IMPURF.OBJ;1 1. 1976-09-23 15:18
XDISP.OBJ;1 2. 1976-09-23 15:19
PRU0N.OBJ;1 2. 1976-09-23 15:19
ROOT.OBJ;1 7. 1976-09-23 15:20
OTSE.OBJ;1 13. 1976-09-23 15:20
OTSI.OBJ;1 11. 1976-09-23 15:21
CALLSN.OBJ;1 1. 1976-09-23 15:21
OTSA.OBJ;1 13. 1976-09-23 15:22
OTSN.OBJ;1 13. 1976-09-23 15:23
OTSF.OBJ;1 8. 1976-09-23 15:23
CALLIN.OBJ;1 1. 1976-09-23 15:24
QIODFS.OBJ;1 1. 1976-09-23 15:25
STRING.OBJ;1 2. 1976-09-23 15:27
CALMSG.OBJ;1 1. 1976-09-23 15:28
MBASN.CMD;1 1. 1976-09-23 15:28
MBASA.CMD;1 1. 1976-09-23 15:29
MBASE.CMD;1 1. 1976-09-23 15:29
MBASI.CMD;1 1. 1976-09-23 15:30
MBASF.CMD;1 1. 1976-09-23 15:30
MBASNO.CMD;1 1. 1976-09-23 15:31
MBASN.ODL;1 1. 1976-09-23 15:31
MBASAO.CMD;1 1. 1976-09-23 15:32
MBASA.ODL;1 1. 1976-09-23 15:33
MBASEO.CMD;1 1. 1976-09-23 15:33
MBASE.ODL;1 1. 1976-09-23 15:34
MBASIO.CMD;1 1. 1976-09-23 15:34
MBASI.ODL;1 1. 1976-09-23 15:35
MBASFO.CMD;1 1. 1976-09-23 15:35
MBASF.ODL;1 1. 1976-09-23 15:36
SBASLN.CMD;1 1. 1976-09-23 15:36
SBASUN.CMD;1 1. 1976-09-23 15:37
SBASLE.CMD;1 1. 1976-09-23 15:38
SBASUE.CMD;1 1. 1976-09-23 15:38
SBASLI.CMD;1 1. 1976-09-23 15:39
SBASUI.CMD;1 1. 1976-09-23 15:40
SBASLF.CMD;1 1. 1976-09-23 15:40
SBASUF.CMD;1 1. 1976-09-23 15:41
DBASE.CMD;1 1. 1976-09-23 15:41
DBASI.CMD;1 1. 1976-09-23 15:42
DBASF.CMD;1 1. 1976-09-23 15:43
IBASE.CMD;1 1. 1976-09-23 15:43
IBASI.CMD;1 1. 1976-09-23 15:44
IBASF.CMD;1 1. 1976-09-23 15:45
DSTOP.CMD;1 1. 1976-09-23 15:45
MSTOP.CMD;1 1. 1976-09-23 15:47
CALLI.MAC;1 5. 1976-09-23 15:48
BMAC.MAC;1 4. 1976-09-23 15:49
ASSEM.MAC;1 5. 1976-09-23 15:50
CONVRT.BAS;1 9. 1976-09-23 15:50
Total of 250./250. blocks in 70. files
>
Где б его стянуть?
Здесь (http://www.kpxx.ru/DEC/PDP-11/Software/Langs/Basic/RSX) :)
В первом приближении работает.
Y2K патч прилепить и можно пользовать :)
>BAS
IAS/RSX BASIC V02-01
READY
LIST
NONAME 17-DEC-<0 02:32:07
READY
READY
10 PRINT "HELLO WORLD"
20 PRINT PI
RUN
NONAME 17-DEC-<0 02:32:40
HELLO WORLD
3.14159
READY
LIST
NONAME 17-DEC-<0 02:32:43
10 PRINT "HELLO WORLD"
20 PRINT PI
READY
A=SYS(4)
>
- - - Добавлено - - -
А собственно чего мучиться - благо 1075 найти в небольшой кучке DOB файлов - не проблема :)
>BAS
IAS/RSX BASIC V02-01
READY
LIST
NONAME 17-DEC-20 03:42:41
READY
PRINT DAT$
17-DEC-20
READY
BYE
>TYP PATCH.MAC
.TITLE IOPK2
.PSECT BASSCD
.=.+602
CALL FIX
.PSECT PATCH
FIX: SUB #100.,R3
BPL FIX
ADD #100.,R3
MOV #'0,R4
RETURN
.END
>
Теперь на CTAKAHе есть BASIC-11 :)
Теперь на CTAKAHе есть BASIC-11
можно с патчем версию для архива в раздел ДВК скинуть? RSX_BASIC-11_Y2K - папка с архивом ???
по ссылке от Хунты там без патча же?
IAS/RSX BASIC V02-01 (http://pdp-11.online/~form/files/pdp-11/rsx/basic-11/)
Directory VF0:[11,104]
17-DEC-20 12:25
IMPURE.OBJ;1 3. 23-SEP-76 15:11
EDIT.OBJ;1 21. 23-SEP-76 15:12
XEQT1.OBJ;1 13. 23-SEP-76 15:12
CKCTCI.OBJ;1 1. 23-SEP-76 15:12
STOP.OBJ;1 1. 23-SEP-76 15:12
PNTRS.OBJ;1 5. 23-SEP-76 15:13
XEQT2.OBJ;1 6. 23-SEP-76 15:13
IOPK1.OBJ;1 5. 23-SEP-76 15:13
PRU1N.OBJ;1 1. 23-SEP-76 15:13
XEQT0.OBJ;1 16. 23-SEP-76 15:13
FUNC.OBJ;1 7. 23-SEP-76 15:14
IOPK0.OBJ;1 11. 23-SEP-76 15:14
CALLS.OBJ;1 5. 23-SEP-76 15:15
DEBUG.OBJ;1 1. 23-SEP-76 15:15
PRU0.OBJ;1 2. 23-SEP-76 15:15
CALLI.OBJ;1 1. 23-SEP-76 15:16
PRU1.OBJ;1 5. 23-SEP-76 15:16
CKCTCO.OBJ;1 1. 23-SEP-76 15:17
COMPIL.OBJ;1 4. 23-SEP-76 15:17
IOPK2.OLD;1 4. 23-SEP-76 15:18
KEYS.OBJ;1 7. 23-SEP-76 15:18
IMPURF.OBJ;1 1. 23-SEP-76 15:18
XDISP.OBJ;1 2. 23-SEP-76 15:19
PRU0N.OBJ;1 2. 23-SEP-76 15:19
ROOT.OBJ;1 7. 23-SEP-76 15:20
OTSE.OBJ;1 13. 23-SEP-76 15:20
OTSI.OBJ;1 11. 23-SEP-76 15:21
CALLSN.OBJ;1 1. 23-SEP-76 15:21
OTSA.OBJ;1 13. 23-SEP-76 15:22
OTSN.OBJ;1 13. 23-SEP-76 15:23
OTSF.OBJ;1 8. 23-SEP-76 15:23
CALLIN.OBJ;1 1. 23-SEP-76 15:24
QIODFS.OBJ;1 1. 23-SEP-76 15:25
STRING.OBJ;1 2. 23-SEP-76 15:27
CALMSG.OBJ;1 1. 23-SEP-76 15:28
MBASN.CMD;1 1. 23-SEP-76 15:28
MBASA.CMD;1 1. 23-SEP-76 15:29
MBASE.CMD;1 1. 23-SEP-76 15:29
MBASI.CMD;1 1. 23-SEP-76 15:30
MBASF.CMD;1 1. 23-SEP-76 15:30
MBASNO.CMD;1 1. 23-SEP-76 15:31
MBASN.ODL;1 1. 23-SEP-76 15:31
MBASAO.CMD;1 1. 23-SEP-76 15:32
MBASA.ODL;1 1. 23-SEP-76 15:33
MBASEO.CMD;1 1. 23-SEP-76 15:33
MBASE.ODL;1 1. 23-SEP-76 15:34
MBASIO.CMD;1 1. 23-SEP-76 15:34
MBASI.ODL;1 1. 23-SEP-76 15:35
MBASFO.CMD;1 1. 23-SEP-76 15:35
MBASF.ODL;1 1. 23-SEP-76 15:36
SBASLN.CMD;1 1. 23-SEP-76 15:36
SBASUN.CMD;1 1. 23-SEP-76 15:37
SBASLE.CMD;1 1. 23-SEP-76 15:38
SBASUE.CMD;1 1. 23-SEP-76 15:38
SBASLI.CMD;1 1. 23-SEP-76 15:39
SBASUI.CMD;1 1. 23-SEP-76 15:40
SBASLF.CMD;1 1. 23-SEP-76 15:40
SBASUF.CMD;1 1. 23-SEP-76 15:41
DBASE.CMD;1 1. 23-SEP-76 15:41
DBASI.CMD;1 1. 23-SEP-76 15:42
DBASF.CMD;1 1. 23-SEP-76 15:43
IBASE.CMD;1 1. 23-SEP-76 15:43
IBASI.CMD;1 1. 23-SEP-76 15:44
IBASF.CMD;1 1. 23-SEP-76 15:45
DSTOP.CMD;1 1. 23-SEP-76 15:45
MSTOP.CMD;1 1. 23-SEP-76 15:47
CALLI.MAC;1 5. 23-SEP-76 15:48
BMAC.MAC;1 4. 23-SEP-76 15:49
ASSEM.MAC;1 5. 23-SEP-76 15:50
CONVRT.BAS;1 9. 23-SEP-76 15:50
IOPK2.OBJ;1 4. 17-DEC-20 12:22
Y2KPATCH.OBJ;1 1. 17-DEC-20 03:41
Y2KPATCH.MAC;1 1. 17-DEC-20 03:41
Total of 256./256. blocks in 73. files
до сих пор обидно, что не списал клон нортона-командера сидящий в КЦГД и не требующий памяти у центрального процессораА оно нужно? Нет, конечно, если системный диск MY - да, нужно. Но уже при системном диске DW время загрузки этого командира ничтожно по сравнению со временем перерисовки всего экрана, которое на КЦГД по-любому будет не менее 2.5 секунды.
Я, когда-то, тоже загорелся идеей склепать для ДВК-шника свой аналог Командира Нортона. Сделал, практически, всё, кроме нормального самозапуска этого командира после окончания вызванной программы и хождения по подоглавлениям вложенных файлов DSK. Сделал, посмотрел, как экран перерисовывается почти 3 секунды, да и забросил этот проект, хотя осталось только разобрать тонкости работы драйверов LD и SL и включить их к себе в проект. Но, увы, с КЦГД-шной скоростью такой командный процессор и даром не нужен.
Сейчас у меня, где-то на заднем плане, вертится мыслишка склепать для ДВК нормальный VT240 с выходом на VGA, на каком-нибудь STM32. Если я таки займусь этим, то, может быть, со временем,можно будет и тот старый проект эксгумировать...
Так весь цимис этого коммандера был в том, что он был загрузкой в КЦГД и не требовал перезапуска да перезагрузки. Если нужно было посмотреть каталог, запускалась R DIR потом ... ^C и всё, что DIR выдавал - красиво отрисовывалось в панелях :) При копировании изначально PIP пахал, потом свой копировщик написал, чтобы % отображать. По сему скорости КЦГД хватало.
То есть это была программа-фильтр :)
Автор коммандера боролся с файлами .DSK , проблема была в том, чтобы с одной стороны лазить на полную глубину вложений и у него всё лазило, а с другой стороны, некоторым программам надо, чтобы например LD3: примонтирован с A.DSK.
Он начал склонятся, к драйверу-дублёру LD.SYS :)
Это в RT-11 5.6 появилась поддержка до 64 устройств...
Ну плюс ограничения на графический режим(только его протокол) во время работы коммандера да на загрузки в КЦГД(коммандер спрашивал разрешение на загрузку, если разрешали, то его приходилось перезапускать).
Была у автора задумка ещё через порт ИРПС две ДВК соединять с коммандером. Даже что-то получалось ;)
По идее что-то подобное можно было и на УКНЦ сделать.
Интересные вещи заметил в данном варианте BASIC-11:
он не перехватывает CTRL/C - появляется обычная подсказка CLI
нельзя открыть TI: как файл - ругается
Насчет второго не уверен, а вот по первому - точно помню, что у нас был BASIC-11 который вел себя в точности как в RT-11 - CTRL/C позволял оборвать программу. И вроде вопросы про функционал задавал как в RT-11 (но тут точно не уверен).
Trying 80.89.204.47...
>BAS
IAS/RSX BASIC V02-01
READY
RUN SW:[BASIC]SNOOPY
XXXX
X XX
X *** X XXXXX
X ***** X XXX XX
XXXX ******* XXX XXXX XX
XX X ****** XXXXXXXXX XX XXX
XX X **** X X** X
X XX XX X X***X
X //XXXX X XXXX
X // X XX
X // X XXXXXXXXXXXXXXXXXX/
X XXX// X X
X X X X X
X X X X X
X X X X X XX
X X X X X XXX XX
X XXX X X X X X X
X X X XX X XXXX
X X XXXXXXXX\ XX XX X
XX XX X X X XX
XX XXXX XXXXXX/ X XXXX
XXX XX*** X X
XXXXXXXXXXXXX * * X X
*---* X X X
*-* * XXX X X
*- * XXX X
*- *X XXX
*- *X X XXX
*- *X X XX
*- *XX X X
* *X* X X X
* *X * X X X
* * X** X XXXX X
* * X** XX X X
* ** X** X XX X
* ** X* XXX X X
* ** XX XXXX XXX
* * * XXXX X X
* * * X X X
=======******* * * X X XXXXXXXX\
* * * /XXXXX XXXXXXXX\ )
=====********** * X ) \ )
====* * X \ \ )XXXXX
=========********** XXXXXXXXXXXXXXXXXXXXXX
READY
В BASIC RT-11 была возможность перехвата управляющих нажатий. Можно было сделать так, чтобы программа не прерывалась по ^C.
Возможно и в BASIC RSX-11 нужно какую-то функцию вызывать для настройки реакции на ^C...???
Документацию смотреть надо.
В BASIC RT-11 была возможность перехвата управляющих нажатий.
Ну это sys() функции - это понятно.
Тут вопрос в том, что как раз нельзя оборвать программу по CTRL/C (ну если не считать возможности оборвать сам BASIC) :)
- - - Добавлено - - -
Документацию смотреть надо.
Ее надо найти сначала.
Пока попадается только RTшная, а для RSX только BP2.
Я думаю, что скорее всего реакция на ^C программируемая. Тут два варианта, либо функция, либо ключ при старте.
Просто с BASIC RSX-11 не ковырялся :(
С BASIC RT-11 пришлось поковыряться.
Реакция на ^C - выход в MCR - для RSX-11 - стандартно, хотя возможны варианты.
При этом, после использования MCR, программу можно продолжить.
Я думаю, что скорее всего реакция на ^C программируемая.
Я думаю, что по умолчанию не иметь возможности оборвать программу - явный косяк.
Это получается, что после запуска BASIC-11 я еще и должен гарантировать что моя программа написана без ошибок с самого начала и позаботилась о том, чтобы она не потерялась (а именно это и случится в случае ошибки) :)
Более вероятно, что просто есть разные варианты сборки (там куча командных файлов для сборки и никакой информации в чем отличия. Часть видно и так - к примеру есть группы файлов для сборки с оверлеями и без, об остальном можно только догадываться).
В BASIC RT-11 все варианты сборки были вполне понятны . Был файл генерации, где задавались вопросы. И был текстовый файл с разъяснениями.
Так же побаловался с MTBASIC RT-11. Там аналогично. Только особенности многотерминальной конфигурации :)
И система нужна специально сгенерённая - с многотерминальной поддержкой. Кстати, других программ использующих многотерминальную поддержку в RT-11 я и не упомню...
У нас в институте ходил ещё бэйсик с исправленным SUB. Там был построчный экранный редактор. то есть набираешь просто, например, SUB 80 и можешь пользоваться стрелками перемещая курсор и забоем при редактировании. Удобная штука :)
Для чего блокировка ^C?
Например, был написан машконтроль(угадайка). И чтобы студенты не могли остановить по ^C программу и выставить себе такую оценку, какую хочется ;) Интерпретатор же...
А то были приколы типа: " Вы ответили правильно на 12 вопросов из 10" ;)
Если очень нужно снять другую задачу в RSX-11 , то можно использовать другой терминал :)
Обычно на машинах с RSX-11 было более одного терминала :)
то можно использовать другой терминал
Только вот с другого терминала нужны привилегии - это не UNIX где достаточно быть тем же пользователем ;)
В RSX-11M их легко украсть - сам тот кто будет сопротивляться и поможет это сделать.
В M+ сложнее :)
Знающий всегда найдёт способ ;)
Крутой очень программер воспользуется пультом ;)
Я таких ещё застал, кои из головы что-то в пульте ввести могли ...
Раньше студентов за системный терминал просто не пускали. Обычно ЭВМ стояла отдельно и рядом системный терминал. Все остальные терминалы в дисплейном классе.
Я таких ещё застал, кои из головы что-то в пульте ввести могли ...
Ну все мы с пульта вводили и форматировали RK05 вообще не используя саму машину.
Тогда программер означало нечто иное чем сейчас :)
Но это при условии доступа к железу, а кто ж его студентам дает-то - тогда вообще принято было в машинный зал не лезть без надобности :D
Причём на машзал не жалели финансов. Один фальшпол из плит алюминиевого сплава, под которым кабели протягивали сколько стоил...
Потом ставили кондиционеры, что по тем временам было очень круто :) И если вентиляция, то приточка и вытяжка :)
Студиусы вообще машину не видели :)
И ещё куча народа на обслугу... На польскую ERA-1300 (СМ-1300)- три штатных единицы было :)
Спирт выделялся ;)
Alex, сам никогда не щупал, но видел распечатку исходников многотерминального Паскаля, для старших машин видимо (не для УК-НЦ само собой), этот листинг на хранении в Университетском музее МИЭТа теперь.
Так весь цимис этого коммандера был в том, что он был загрузкой в КЦГД и не требовал перезапуска да перезагрузки.Это, да и все остальное, катит только если не пользоваться этим командиром в писюшном стиле. Как только начинаешь активно работать - заглянул в оглавление (3 сек рисуется экран) - не то. Заглянул в другое (еще 3 сек) - опять не то, заглянул в третье, посмотрел на рисующийся экран, да и плюнул на все это.
А если не пользоваться этим командиром в писюшном стиле, то на фиг он и не нужен. Подготовить заранее набор командных файлов, расположить их там, где надо, а дальше достаточно драйвера SL и одной-двух-трех команд типа @CMDFIL на проект, которые нетрудно и запомнить. Причем, для первого запуска в цикле отладки их придется вспомнить самому, а для всех остальных запусков пусть вспоминает SL...
Он начал склонятся, к драйверу-дублёру LD.SYS
Это в RT-11 5.6 появилась поддержка до 64 устройств... Я, помню, как-то выкрутился с двумя LD, 6-м и 7-м, но это действовало до перезагрузки RT-11, в процессе которой LD.SYS ругался на недоступность файлов для LD6 и LD7.
В общем, единственное полезное применение аналога Командира Нортона при трехсекундной перерисовке экрана - это когда надо с большого диска (например, с DW) сделать выборку вразброс небольшого количества файлов. Например, скопировать на дискету минимальную систему для какого-то конкретного набора действий. Вот тогда, не торопясь, листаешь содержимое своего большого диска и отмечаешь те файлы, которые должны быть скопированы...
В BASIC RT-11 была возможность перехвата управляющих нажатий. Можно было сделать так, чтобы программа не прерывалась по ^C.Угу, RCTRLC, CTRLC. По идее, это же должно быть и Бейсиках для RSX-11.
По идее, это же должно быть и Бейсиках для RSX-11.
Должно, но не работает по причине того, что данный конкретный вариант просто не прикрепляется к терминалу как положено.
Надо полноценный дистрибутив искать или таки переделывать RTшный вариант :)
Ну или как время будет - разобрать OBJ из этого варианта по косточкам и поискать где там чего делается. OBJ дизассемблится с глобальными именами - искать легче.
- - - Добавлено - - -
В общем накопал среди этого же набора командный файл для сборки программы STOP которая и используется для останова программы :)
>BAS
IAS/RSX BASIC V02-01
READY
10 PRINT PI
20 FOR I%=0 TO 32767 \ NEXT I%
30 GOTO 10
RUN
NONAME 22-DEC-20 09:14:06
3.14159
MCR>STOP
>
STOP AT LINE 20
READY
Приятно, что MCR отличает задачу ...STO от команды STO/ACC - видно как раз на такой случай :)
В общем, единственное полезное применение аналога Командира Нортона при трехсекундной перерисовке экрана - это когда надо с большого диска (например, с DW) сделать выборку вразброс небольшого количества файлов. Например, скопировать на дискету минимальную систему для какого-то конкретного набора действий. Вот тогда, не торопясь, листаешь содержимое своего большого диска и отмечаешь те файлы, которые должны быть скопированы... MiX для архива и всех форумчан публиковал\выкладывая Смирнова коммандер для КЦГД, на образе главный баг - там при загрузке монитор ругается на битость TT.SYS, но это можно фиксить при нужде сильной, я этого не делал, образ как есть в архиве лежит.
" Smirnow Commander "
Программа интерактивной работы пользователя .
(C) Смирнов А. Ю.
ЛГУ 1990 г.
-1-
1. Назначение и условия применения.
1.1. Программа "Smirnow Commander" ( кратко-"SC" ) предназначена для об-
легчения работы с файлами и программами в среде операционных систем
RT11,FODOS,TSX и аналогичных, на ЭВМ "Электроника", "ДВК" подобно извест-
ной программной оболочке Нортона для IBM-совместимых компъютеров .
Для работы с программой необходимо иметь плату контроллера цветного гра-
фического дисплея КЦГД ( или контроллер символьного монитора КСМ ,для
которого существует упрощенный вариант программы ), желательно иметь
жесткий диск .
1.2. При работе с программой SC на системном устройстве должен находиться
файл : SC.SAV ( собственно программа ).
На системном устройстве, или на устройстве с логическим именем SC: дложны
находитья файлы : SC.EXE, SC.MEN, SC.KEY . Они определяют , какие команды
будет формировать программа при работе.
Кроме того, можно перед работой программы загрузить в контроллер дисплея
новый шрифт.Это можно сделать программой FONT.SAV ,рисунки шрифта хранят-
ся в файле FONT.DAT , который должен находиться на системном устройстве.
Можно отредактировать шрифт программой EDFONT.SAV .
Для того, чтобы при работе не происходила остановка при ошибках в выпол-
нении команд монитора или прикладных программ, надо установить статус
прерывания командных файлов командой SET ERROR NONE.
1.3. Вызов программы : R SC ,при этом программа при первом старте выве-
дет оглавления устройств "SY:" и "DK:".В дальнейшем информация о текущем
состоянии программы будет сохраняться в файле на устройстве "SY:" SC.TMP.
Информация выводится на экран в трех панелях.На двух левых выводятся
имена файлов , находящихся на устройствах. Можно выводить информацию
только об именах файлов (тогда на одной панели помещается 54 имени ), или
имя файла, его размер и дату создания ( тогда на одной панели помещается
18 имен ). Одно из имен изображено инверсными символами - это курсор, в
дальнейшем файл, на котором стоит курсор , будет называться текущим.
Курсор можно передвигать по файлам с помощью клавиш со стрелками на доп.
клавиатуре. Если на диске больше файлов, чем помещается на панели, то при
достижении курсором края панели на ней будут выведены имена остальных
файлов,то есть панель является как-бы окном,через которое рассматривается
оглавление диска.
На крайней справа панели выводится информация об общем количестве
файлов на устройстве, занятом ими об'еме,количестве свободных блоков и
размер максимальной свободной области.
-2-
2. КОМАНДЫ ПРОГРАММЫ :
1.1 Команды общего назначения :
C- Выполнить команду монитора. При этом под левой панелью будет вы-
ведена подсазка "Command ?" . Команда вводится по подсказке, при
нажатии на клавишу <ВК> она будет исполнена и управление снова
передается в SC. Если Вы раздумали, то можно нажать <ВК> ничего
не набирая или комбинацию клавиш <CONTROL>+C , для отмены. При
наборе команды можно пользоваться клавишей <DEL> и клавишами
управления курсором.
E- Редактировать текущий файл. ( Про установку редактора см. ниже.)
H- Изменить устройство , каталог которого выводится на текущую
панель ( текущей является панель, в которой находится курсор )
имя устройства вводится по подсказке.
W- Задать маску выводимых на экран файлов, вводится по подсказке.
можно задать несколько через запятую . После этого на панели
будут выведены имена только тех файлов, которые подходят под
маску. Маска имеет вид FILENAM.EXT и кроме обычных символов может
содержать "*", "?" , "%". При сравнении "*" может заменять любую
подстрочку ( возможно и пустую ),"?" или "%" может заменять любой
символ.
U- Вызвать меню пользователя .( О виде меню смотри ниже )
V- Просмотр текстового файла, текст выводится по 23 строки. Для пре-
кращения просмотра надо нажать <CONTROL>+C .
K- Просмотр файла запрограмированных клавиш. Выводится в виде меню.
Можно выбрать нужную команду курсором, и нажать для выпрлнения
<ВК>.
Q- Выход из программы,текущее состояние запоминается.
<ВК>- Выполнить действия с текущим файлом по умолчанию.(см. ниже)
B- Выводить на панель только имена файлов.
F- Выводить на панель имена,длинну и дату создания файлов
<ТАБ>- Переход на другую панель. Если вызвано меню пользователя то
происходит переход на панель файлов( или обратно в меню ).
-3-
2.2. Операции с группой файлов и отмеченными файлами:
2.2.1 В верхней части крайней справа панели выводится информация о
том, какие файлы будут взяты для выполнения операций: "CURSOR" -
только текущий файл, "SELECT" - все отмеченные файлы, видимые на
текущей панели, "ALL" -все файлы, видимые на панели. После выпол-
нения любой операции автоматически устанавливается режим "CURSOR".
2.2.2 Выбор файлов :
<ВЫБР> - Отметить файл. Имена отмеченных файлов подчеркиваются.
Повторное нажатие клавиши отменяет отметку файла. Если перед
операцией был установлен режим "ALL", то будут отмечены все
файлы, видимые на панели.
<ПФ1>- Для операций Delete, Move, Renаme, S будут взяты отмеченные
файлы, видимые на текущей панели.( Режим "SELECT" )
<ПФ2>- Для операций Delete, Move, Reneme, S будут взяты все файлы
,видимые на текущей панели.( Режим "ALL" )
<ПФ3>- Для операций Delete, Move, Reneme, S будет взят только файл
на котором стоит курсор.( Режим "CURSOR" )
<ПФ4>- Очистить список отмеченных файлов для текущей панели.
2.2.3 Операции с выбранными файлами:
D- Удалить текущий файл ( файлы ),требуется подтверждение.
R- Переименовать файл ( файлы ). Новое имя запрашиваенся в виде
FILENAM.EXT , если в новом имени присутствует символ "*",
он заменяется подстрочкой из старого имени.
M- Скопировать текущий файл ( файлы ) на другую панель.
S- Скопировать файл (файлы),устройство и имя для выходного файла
запрашивается. ( если указано только имя устройства, файл
копируется со старым именем ).
Если операция проводится с группой файлов, допускается только
задание имени устройства.
-4-
3. Програмирование работы программы.
Действия программы в остальных случаях определяются информацией,
находящейся в соответствующих файлах. Все файлы ищутся вначале на устрой-
стве с логическим именем "SC:", а если такого устройства нет или на нем
нет соответствующего файла, то на "SY:". Присваивая логическое имя "SC:"
разным устройствам можно выбирать действия программы, нужные Вам для
разных случаев.
3.1 Програмирование клавиш
Действия при нажатии любой клавиши, не задействованной в командах
программы определяются файлом SC.KEY.
В файле должны быть строки формата : K:COMMAND;коментарий<ВК> ,
где K - символ , соответствующий клавише ,если клавиша передает "esc"-
последователность, то должна стоять строка "ESCK", где К - символ,
соответствующий коду, передаваемому после "esc".
COMMAND - строка, преобразующаяся в командный файл , в ней могут быть
любые команды монитора, или символы, преобразующиеся в соответствующие
строки :
$-заменяется на имя текущего устройства.
!-заменяется на имя текущего файла .
.! - заменяется на расширение текущего файла.
_ -заменяется на <вк>.
?"PROMPT"-заменяется на строку,введеную по подсказке PROMPT.
& - подставляется маска выводимых файлов.
>-ничем не заменяется,но перед входом в программу ждет <вк> для
продолжения.
%-меняет текущую панель.
#-заменяется на список отмеченных файлов.
После расшифровки строки она преобразуется в командный файл и передается
Монитору для исполнения. После выполнения снова вызывается программа "SC".
Если командная строка заключена в фигурные скобки ( {} ), то выхода из
программы не происходит, а команды заносятся в буфер и поступают в программу
как с клавиатуры.
Для работы команды Edit в этом файле должна быть строка:
E:R "редактор" $!.!_;
"редактор"-имя Вашего любимого редактора.
3.2 Меню пользователя.
При вызове меню пользователя ищется файл текстов меню SC.MEN , если не
найден, никаких действий не производится. Формат файла меню такой же, как и
для програмирования клавиш, но в нем могут присутствовать заголовки меню.
Все строки, заключенные между двумя заголовками считаются одним меню.
Заголовок меню имеет вид: [n]:name; - n-номер меню, name-имя, например:
[0]:MAIN MENU;
Вместо командной строки может быть: [m] - перейти к меню [m].
Выбор нужной позиции осуществляется клавишами со стрелками, исполнение
по <ВК>. Нажатием клавишы <ТАБ> можно перейти на панель файлов, возврат
в меню происходит по этой же клавише. Для отмены режима надо 2 раза нажать
<CONTROL>+C .
3.3 Действия с файлом по умолчанию.
При нажатии <CR> - ищется файл SC.EXE, формат файла: "образец":коменда;
"образец" - группоое имя файла , которое имеет тот же вид, что и маска
выводимых файлов ( см. выше ) например *.SAV . Если имя текущего файла под-
ходит под групповое имя , то исполняется командная строка после ":", которая
имеет тот же формат, что и в файле SC.KEY . Файл просматривается последова-
тельно от начала.
конец. ВОТ!!!
https://pic.maxiol.com/thumbs2/1608603365.787615380.sckcgd.png (https://pic.maxiol.com/?v=1608603365.787615380.sckcgd.png&dp=2)
- - - Добавлено - - -
По идее что-то подобное можно было и на УКНЦ сделать.
PAF Commander есть на УК-НЦ )
- - - Добавлено - - -
Ее надо найти сначала.
сам бейсик то вновь обретён - вот form и набросился ) На новую "старую" игрушку )
Системщики - аки дети малые - им basic без документации под ретровую ось забава лютая, чем любой 3D шутер самый красочный ))) <- это три смайла подряд, если что )))
- - - Добавлено - - -
В общем накопал среди этого же набора командный файл для сборки программы STOP которая и используется для останова программы
для меня листинг приведённый не очень явный - вот у тебя основной цикл неразрывный, так?
а откуда приглашение MCR ??? Это особенность RSX какая-то или что вообще? Интересно же, как и откуда во время
выполнения ты можешь вторую программу(подпрограмму) вызывать в нужный момент???
а откуда приглашение MCR
Оно появляется по CTRL/C поскольку BASIC его не перхватывает.
Оно появляется по CTRL/C поскольку BASIC его не перхватывает.
ага! в RSX так работает система видимо, очень не привычно для меня, ты жмёшь 003, появляется CMR и руками вызываешь STOP - хитро, но иначе действительно было бы то что ты описал -
должен гарантировать что моя программа написана без ошибок с самого начала
- - - Добавлено - - -
ещё один вариант описания к файлокомандиру Смирнова
*** SMIRNOW COMMANDER ***
1. Назначение и условия применения.
Программа "Smirnow commander" (кратко "SC") предназначена для
облегчения работы с файлами и программами в среде операционных систем
RT11, FODOS и аналогичных, на ЭВМ "Электроника", "ДВК" подобно извест-
ной программной оболочке Нортона для IBM-совместимых компьютеров.
При работе с программой SC на системном устройстве должен нахо-
диться файл: SC.SAV (собственно программа).
На системном устройстве, или на устройстве с логическим именем SC
должны находиться файлы: SC.EXE, SC.MEN, SC.KEY. Они определяют, ка-
кие команды будет формировать программа при работе.
Кроме того, можно перед работой программы загрузить в контроллер
дисплея новый шрифт. Это можно сделать программой FONT.SAV, рисунки
шрифта хранятся в файлах вида IBM. . Можно отредактировать шрифт
программой FONTER.SAV.
Для того, чтобы при работе не происходила остановка при ошибках в
выполнении команд монитора или прикладных команд, надо установить ста-
тус прерывания командных файлов командой SET ERROR NONE.
Вызов программы: R SC или просто SC, при этом программа при первом
старте выведет оглавление устройств "SY:" и "DK:". В дальнейшем
информация о текущем состоянии программы будет сохраняться в файле
на устройстве "SY:" SC.TMP.
Информация выводится на экран в трех панелях. На двух левых выво-
дятся имена файлов, находящихся на устройствах. Можно выводить инфор-
мацию только об именах файлов ( тогда на одной панели помещается 54
имени ), или имя файла, его размер и дату создания ( тогда на одной
панели помещается 18 имен ). Одно из имен изображено инверсивными сим-
волами - это курсор; в дальнейшем файл, на котором стоит курсор, бу-
дет называться текущим.
Курсор можно передвигать по файлам с помощью клавиш со стрелками
на дополнительной клавиатуре. Если на диске больше файлов, чем поме-
щается на панели, то при достижении курсором края панели, на ней бу-
дут выведены имена остальных файлов, то есть панель является как бы
окном, через которое рассматривается оглавление диска.
На крайней справа панели выводится информация об общем количестве
файлов на устройстве, занятом ими объеме, количестве свободных бло-
ков и размер максимальной свободной области.
2. Команды программы.
В нижней части экрана выводится список команд. При этом ключевые
клавиши выделены заглавными буквами. Ниже приведены назначения этих
команд.
C - Выполнить команду монитора операционной системы. При этом
под левой панелью будет выведена подсказка " Command ? ".
Команда вводится по подсказке, при нажатии на клавишу <ВК>
она будет исполнена и управление снова передается в SC. Если
Вы раздумали, то можно нажать клавишу <ВК> ничего не набирая
или комбинацию клавиш <УПР>+<C>, для отмены. При наборе коман-
ды можно пользоваться клавишей <=| и клавишами управления
курсором.
E - Редактировать текующий файл.
H - Изменить устройство, каталог которого выводится на текущую
панель (текущей является панель, в которой находится курсор).
Имя устройства вводится по подсказке.
W - Задать маску выводимых на экран файлов, вводится
по подсказке. Можно задать несколько через запятую. После
этого на панель будут выведены имена только тех файлов, кото-
рые подходят под маску. Маска имеет вид <имя файла>.<расшире-
ние> и кроме обычных символов может содержать "*", "?", "%".
При сравнении "*" может заменять любую подстрочку ( возможно
и пустую ), "?" или "%" может заменять любой символ.
U - Вызвать меню пользователя.
V - Просмотр текстового файла, текст выводится по 23 строки.
Для прекращения просмотра надо нажать <УПР>+<C>.
K - Просмотр файла запрограммированных клавиш. Выводится в виде
меню. Можно выбрать нужную команду курсором, и нажать для
выполнения <ВК>.
Q - Выход из программы текущее состояние запоминается.
B - Выводить на панель только имена файлов.
F - Выводить на панель имена, длину и дату создания файлов.
<ВК> - Выполнить действия с текущим файлом по умолчанию. Необходи-
мые входные параметры вводятся по подсказке.
<ТАБ> - Переход на другую панель. Если вызвано меню пользователя то
происходит переход на панель ( или обратно в меню ).
3. Операции с группой файлов и отмеченными файлами.
В верхней части крайней справа панели выводится информация о том,
какие файлы будут взяты для выполнения операций: "CURSOR" - только
текущий файл, "SELEKT" - все отмеченные файлы, видимые на текущей
панели, "ALL" - все файлы, видимые на панели. После выполнения любой
операции автоматически устанавливается режим "CURSOR".
Выбор файлов:
<К5> - Отметить файл. Имена отмеченных файлов подчеркиваются. Повтор-
ное нажатие клавиши отменяет отметку файла. Если перед опера-
цией был установлен режим "ALL", то будут отмечены все файлы,
видимые на панели.
<К1> - Для операций Delete, Move, Rename, S будут взяты отмеченные
файлы, видимые на текущей панели. ( Режим "SELEKT" ).
<К2> - Для операций Delete, Move, Rename, S будут взяты все файлы,
видимые на панели. ( Режим "ALL" ).
<К3> - Для операций Delete, Move, Rename, S будут взят только файл,
на котором стоит курсор. ( Режим "CURSOR" ).
<К4> - Очистить список отмеченных файлов для текущей панели.
Операции с выбранными файлами:
D - Удалить текущий файл ( файлы ), требуется подтверждение.
R - Переименовать файл ( файлы ). Новое имя запрашивается в виде
<имя файла>.<расширение>, если в новом имени присутствует сим-
вол "*", он заменяется подстрочкой из старого имени.
M - Скопировать текущий файл ( файлы ) на другую панель.
S - Скопировать файл ( файл ), устройство и имя для выходного файла
запрашивается ( если указано только имя устройства, файл копи-
руется со старым именем ).
Если операция проводится с группой файлов, допускается только
задание имени устройства.
- - - Добавлено - - -
@MiX для архива и всех форумчан публиковал\выкладывая Смирнова коммандер для КЦГД
на том же образе и SCE под КЦГД лежит - моноэкранный командер и весьма шустрый, я пользуюсь похожим MFP в некоторых случаях при копировании сложной выборки с невозможностью объединения *-чками очень выручает на УК-НЦ и в эмуляторах.
https://pic.maxiol.com/thumbs2/1608608974.787615380.sce2kcgd.png (https://pic.maxiol.com/?v=1608608974.787615380.sce2kcgd.png&dp=2)
https://pic.maxiol.com/thumbs2/1608609024.787615380.sce1kcgd.png (https://pic.maxiol.com/?v=1608609024.787615380.sce1kcgd.png&dp=2)
Этот софт только под КЦГД работает, в то время как MFP работает везде и шустрый как нинзя )))
*MFP* V4.0 (c) S.T.A.R. programming, SMIT & BATON computer DATA 1991. Press "?"
DK:=[WD2]
+-----------------------------------+ Date: 5-Bad-88
! Filnam Ext Size Date Block! Mode: Editor
!> SWAP .SYS 27P 19-Dec-88 68!
! RT11SJ.SYS 79P 17-Bad-81 95! Volume ID : PCX_FULL
! TT .SYS 2P 23-Jan-80 174! Owner name : UKNCBTL
! LD .SYS 8P 19-Dec-88 176!
! NL .SYS 2P 19-Dec-88 184! Select: 246 File(s)
! SL .SY 10P 19-Jan-88 186! 0 blocks in 13564 Block(s)
! WD .SYS 3P 5-Aug-79 196! 0 files 41901 Free block(s)
! MZ .SYS 4P 8-Dec-79 199! 55465 Total block(s)
! WE .SYS 2P 16-May-79 203!
! LS .SYS 5P 8-Bad-79 205!
! XL .SYS 4P 8-Bad-79 210!
! LP .SY 2P 8-Bad-79 214!
! CL .SYS 3P 8-Bad-79 216!
! RESORC.SAV 26P 29-Bad-81 219!
! PIP .SAV 30P 31-Oct-98 245!
! DUP .SAV 52P 31-Oct-98 275!
! DIR .SAV 20P 31-Oct-98 327!
+-----------------------------------+
- - - Добавлено - - -
вообще все эти манагеры лучше в соотв. теме конечно же обсуждать и саму тему ещё раз читать
https://zx-pk.ru/threads/13558-fajlovyj-menedzher-tipa-norton-dlya-dvk.html
тема по программированию для УК-НЦ немного не для этого )))
RCTRLC/SYS(6) здесь тоже работает, только отслеживает запуск STOP :)
LIST
CTRLC 22-DEC-20 11:03:17
10 C=RCTRLC
20 FOR C=1 TO 1000
30 PRINT C
40 FOR I=0 TO 4000 \ IF SYS(6)<>0 THEN 70 \ NEXT I
50 NEXT C
60 PRINT "DONE" \ GO TO 80
70 PRINT \ PRINT "ABORTED"
80 END
READY
RUNNH
1
MCR>STO
ABORTED
>
READY
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot