Как и можно ли выполнить LOAD SYS из программы?
допустим я хотел бы из своей программы запускать часики @form 'a CL.SYS которые?
Это хороший пример, поскольку часики для старта не нужны никакие SET, just LO CL?
Как и можно ли выполнить LOAD SYS из программы?
допустим я хотел бы из своей программы запускать часики @form 'a CL.SYS которые?
Это хороший пример, поскольку часики для старта не нужны никакие SET, just LO CL?
Последний раз редактировалось hobot; 30.05.2019 в 03:03.
Код:.TITLE RELEAS ;In this example, the Null handler (NL) is loaded into memory, ;used, then released. If NL is LOADed the handler is ;resident, and .FETCH will return HSPACE in R0. .MCALL .FETCH,.RELEAS,.EXIT,.PRINT START: .FETCH #HSPACE,#NLNAME ;Load NL handler BCS FERR ;Not available ; Use handler .RELEAS #NLNAME ;Mark NL no longer in memory .EXIT FERR: .PRINT #NONL ;NL not available .EXIT NLNAME: .RAD50 /NL / ;Name for NL handler NONL: .ASCIZ /?ERELEA-F-NL handler not available/ .EVEN HSPACE: ;Beginning of handler area .END START
Выше Hunta привет пример.
Вроде CL поддерживает вызов .FETCH - не помню уже. Если нет - можно сделать
Разве что замечу, что метка перед .END не всегда будет последним адресом программы. Более универсальный метод - взять значение по адресу 50 и прибавить к нему 2 (или взять значение, генерируемое директивой .LIMIT).
Последний раз редактировалось form; 30.05.2019 в 07:43.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Hunta,
form, благодарю )
пока результат такой, буду эксп-ть )
двойное зависание - обожаю, но "сбой аппаратуры" это абсолютный хит!Код:*** CТOП *** 000016/ 000000 @ 0 *** ДBOЙНOE ЗABИCAНИE *** 000006/ 000000 @
Вот этот код
под эмулятором Патрона показал вот такой результатКод:.TITLE RELEAS .MCALL .FETCH,.RELEAS,.EXIT,.PRINT START: .FETCH #HSPACE,#NLNAME ;Load NL handler BCS FERR ;Not available ; Use handler .RELEAS #NLNAME ;Mark NL no longer in memory .PRINT #OK ;NL not available .EXIT FERR: .PRINT #NONL ;NL not available .EXIT NLNAME: .RAD50 /NL / ;Name for NL handler NONL: .ASCIZ /?RELEAS-F-NL handler not available/ OK: .ASCIZ /?RELEAS-I-Ok!/ .EVEN HSPACE: ;Beginning of handler area .END START
Код:HD (177720) disk driver v1.6 2017 SL V08.00 [SW] Сторожевых С.В. 1988 KZ V01.00 (C) ВЦ МИЭТ, НОЯБРЬ 1987 RT-11SB (Y) V05.07 .SET TT FORM .SET TT SCOPE .SET EDIT K52 .SET SL ON .DAY Время Дата 11:29:52 30-Май-2019, Четверг .ASS HD1 DK .EXE T ?RELEAS-I-Ok! .
Использование .DSTAT и .SETTOP имеет смысл если хочется грузить драйвера начиная сверху вниз, а промежуток до них использовать на свое усмотрение. MU BASIC-11 так делает например.
В остальном смысла особого нет так как единственное что делает .SETTOP - это просто переставляет значение ячейки 50.
Так что если нет нужды в вышеописанном варианте, можно просто использовать .FETCH с указанием первого свободного адреса, а на выходе получать новый свободный адрес с учетом загруженного драйвера.
Бонусом будет отсутствие лишней суеты с файлом SWAP.SYS после выхода из программы
Что касается XM, в нем FG job е может использовать .FETCH, а в виртуальной BG программе .SETTOP просто переставит лимит задачи на который .FETCH и загруженному драйверу глубоко наплевать
Ну и для полноты картины, остается упомянуть VBGEXE BG job - в этом случае указанный в .FETCH адрес вообще никак не используется.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
заменил название на CL
закомментировал выгрузку
часики появились на долю секунды но одновременно с .EXIT исчезли
???
Код:! Apxивны дeл ЖД ! ЛAТ .TITLE RELEAS .MCALL .FETCH,.RELEAS,.EXIT,.PRINT START: .FETCH #HSPACE,#NLNAME ;Load NL handler BCS FERR ;Not available ; Use handler ; .RELEAS #NLNAME ;Mark NL no longer in memory .PRINT #OK ;NL not available .EXIT FERR: .PRINT #NONL ;NL not available .EXIT NLNAME: .RAD50 /CL / ;Name for NL handler NONL: .ASCIZ /?RELEAS-F-NL handler not available/ OK: .ASCIZ /?RELEAS-I-Ok!/ .EVEN HSPACE: ;Beginning of handler area .END START
Я писал программы, которые всю доступную память забирали себе в пул, из которой потом и выделялась память кусками. По описанной мной схеме мой код так с подгрузкой драйверов и работал - получить информацию - сколько надо памяти (посмотрел - да, .DSTAT), получить, проверить, что выдали затребованное, загрузить драйвер
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)