Как и можно ли выполнить LOAD SYS из программы?
допустим я хотел бы из своей программы запускать часики @form 'a CL.SYS которые?
Это хороший пример, поскольку часики для старта не нужны никакие SET, just LO CL?
Вид для печати
Как и можно ли выполнить LOAD SYS из программы?
допустим я хотел бы из своей программы запускать часики @form 'a CL.SYS которые?
Это хороший пример, поскольку часики для старта не нужны никакие SET, just LO CL?
Код:.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).
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 адрес вообще никак не используется.
заменил название на 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), получить, проверить, что выдали затребованное, загрузить драйвер