$nogen $save nolist ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; NUCLEUS PRIMITIVE AND FEATURE CONFIGURATION MACROS ; ; DATE: 7 JANUARY 1981 ; ; THESE MACROS ARE USED TO BUILD THE ENTRY TABLE USED BY ; NUCLEUS ENTRY. ; ; PRIMITIVES NOT CURRENTLY SUPPORTED BY THE RMX/86 NUCLEUS ; APPEAR IN THE TABLE AS RQNOTSUPPORTED. ; THE DEFAULT ENTRIES IN THE TABLE ARE RQNOTCONFIGURED. ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CGROUP GROUP code, obj_seg, job_seg, task_seg, mb_seg, sem_seg, & reg_seg, fs_seg, int_seg, excep_seg, valid_seg CODE SEGMENT WORD PUBLIC 'CODE' ASSUME CS:CGROUP EXTRN RQNOTSUPPORTED: NEAR EXTRN RQNOTCONFIGURED: NEAR ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; NUCLEUS FEATURE CONFIGURATION MACROS ; ; THE FOLLOWING MACROS ARE USED TO BRING IN CHUNKS OF CODE ; FOR EACH OF THE LISTED FEATURES. ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %set(PARAM_V,0) %set(delete_job_in,0) valid_seg segment word public 'CODE' valid_seg ends %*DEFINE(PARAMETER_VALIDATION)(%' valid_seg segment word public 'CODE' %SET(PARAM_V,255) assume cs:cgroup public param_validation_path extrn validate_params_body:near extrn no_valid:near public valid_table no_of_prims equ 23 valid_table label word dw no_of_prims dup(cgroup:no_valid) ; one entry for each ; primitives validation routine param_validation_path dw validate_params_body valid_seg ends )%' %*DEFINE(FULL_MEMORY_SCANNER)() %' This is left in for compatibility with prioir configuration files %' The macro does nothing, there is only one memory scanner. %*DEFINE(SYSTEM_EXCEPTION_HANDLER)(EXTRN SYSTEMEXCEPTIONHANDLER:NEAR) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; NUCLEUS PRIMITIVE CONFIGURATION MACROS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NUM_OBJECT_MGMNT EQU 13 ; 13 PRIMITIVES INCLUDED NUM_JOB_MGMNT EQU 5 ; 5 PRIMITIVES INCLUDED NUM_TASK_MGMNT EQU 10 ; 10 PRIMITIVES INCLUDED NUM_MAILBOX_MGMNT EQU 4 ; 4 PRIMITIVES INCLUDED NUM_SEMAPHORE_MGMNT EQU 4 ; 4 PRIMITIVES INCLUDED NUM_REGION_MGMNT EQU 5 ; 5 PRIMITIVES INCLUDED NUM_FREE_SPACE_MGMNT EQU 7 ; 7 PRIMITIVES INCLUDED NUM_INTERRUPT_MGMNT EQU 7 ; 7 PRIMITIVES INCLUDED NUM_EXCEPTION_MGMNT EQU 3 ; 3 PRIMITIVES INCLUDED ENTRY_VECTOR LABEL WORD PUBLIC ENTRY_VECTOR DW NUM_OBJECT_MGMNT, CGROUP: OBJECT_MANAGEMENT DW NUM_JOB_MGMNT, CGROUP: JOB_MANAGEMENT DW NUM_TASK_MGMNT, CGROUP: TASK_MANAGEMENT DW NUM_MAILBOX_MGMNT, CGROUP: MAILBOX_MANAGEMENT DW NUM_SEMAPHORE_MGMNT, CGROUP: SEMAPHORE_MANAGEMENT DW NUM_REGION_MGMNT, CGROUP: REGION_MANAGEMENT DW NUM_FREE_SPACE_MGMNT, CGROUP: FREE_SPACE_MANAGEMENT DW NUM_INTERRUPT_MGMNT, CGROUP: INTERRUPT_MANAGEMENT DW NUM_EXCEPTION_MGMNT, CGROUP: EXCEPTION_MANAGEMENT code ENDS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %*DEFINE(gen_entry(name,segg,where))(%' EXTRN %name: NEAR %segg SEGMENT ORG %where DW CGROUP: %name %segg ENDS )%' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; obj_seg SEGMENT WORD PUBLIC 'CODE' OBJECT_MANAGEMENT LABEL WORD DW CGROUP: RQNOTCONFIGURED ; RQGETTYPE DW CGROUP: RQNOTCONFIGURED ; RQDISABLEDELETION DW CGROUP: RQNOTCONFIGURED ; RQENABLEDELETION DW CGROUP: RQNOTCONFIGURED ; RQCATALOGOBJECT DW CGROUP: RQNOTCONFIGURED ; RQUNCATALOGOBJECT DW CGROUP: RQNOTCONFIGURED ; RQLOOKUPOBJECT DW CGROUP: RQNOTCONFIGURED ; RQCREATEEXTENSION DW CGROUP: RQNOTCONFIGURED ; RQDELETEEXTENSION DW CGROUP: RQNOTCONFIGURED ; RQCREATECOMPOSITE DW CGROUP: RQNOTCONFIGURED ; RQDELETECOMPOSITE DW CGROUP: RQNOTCONFIGURED ; RQINSPECTCOMPOSITE DW CGROUP: RQNOTCONFIGURED ; RQALTERCOMPOSITE DW CGROUP: RQNOTCONFIGURED ; RQFORCEDELETE obj_seg ENDS %*DEFINE(RQGETTYPE)(%gen_entry(RQGETTYPE,obj_seg,000h)) %*DEFINE(RQDISABLEDELETION)(%gen_entry(RQDISABLEDELETION,obj_seg,002h) %if (%param_v eq 255) then ( %gen_entry(V_RQDISABLE_DELETION,valid_seg,000h))fi) %*DEFINE(RQENABLEDELETION)(%gen_entry(RQENABLEDELETION,obj_seg,004h) %if (%param_v eq 255) then ( %gen_entry(V_RQENABLE_DELETION,valid_seg,002h))fi) %*DEFINE(RQCATALOGOBJECT)(%gen_entry(RQCATALOGOBJECT,obj_seg,006h) %if (%param_v eq 255) then ( %gen_entry(V_RQCATALOG_OBJECT,valid_seg,004h))fi) %*DEFINE(RQUNCATALOGOBJECT)(%gen_entry(RQUNCATALOGOBJECT,obj_seg,008h) %if (%param_v eq 255) then ( %gen_entry(V_RQUNCATALOG_OBJECT,valid_seg,006h))fi) %*DEFINE(RQLOOKUPOBJECT)(%gen_entry(RQLOOKUPOBJECT,obj_seg,00Ah) %if (%param_v eq 255) then ( %gen_entry(V_RQLOOKUP_OBJECT,valid_seg,008h))fi) %*DEFINE(RQCREATEEXTENSION)(%gen_entry(RQCREATEEXTENSION,obj_seg,00Ch) %if (%param_v eq 255) then ( %gen_entry(V_RQCREATE_EXTENSION,valid_seg,00Ah))fi) %*DEFINE(RQDELETEEXTENSION)(%gen_entry(RQDELETEEXTENSION,obj_seg,00Eh)) %*DEFINE(RQCREATECOMPOSITE)(%gen_entry(RQCREATECOMPOSITE,obj_seg,010h) %if (%param_v eq 255) then ( %gen_entry(V_RQCREATE_COMPOSITE,valid_seg,00Ch))fi) %*DEFINE(RQDELETECOMPOSITE)(%gen_entry(RQDELETECOMPOSITE,obj_seg,012h)) %*DEFINE(RQINSPECTCOMPOSITE)(%gen_entry(RQINSPECTCOMPOSITE,obj_seg,014h) %if (%param_v eq 255) then ( %gen_entry(V_RQINSPECT_COMPOSITE,valid_seg,00Eh))fi) %*DEFINE(RQALTERCOMPOSITE)(%gen_entry(RQALTERCOMPOSITE,obj_seg,016h) %if (%param_v eq 255) then ( %gen_entry(V_RQALTER_COMPOSITE,valid_seg,010h))fi) %*DEFINE(RQFORCEDELETE)(%gen_entry(RQFORCEDELETE,obj_seg,018h)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; job_seg SEGMENT WORD PUBLIC 'CODE' JOB_MANAGEMENT LABEL WORD DW CGROUP: RQNOTCONFIGURED ; RQCREATEJOB DW CGROUP: RQNOTCONFIGURED ; RQDELETEJOB DW CGROUP: RQNOTSUPPORTED DW CGROUP: RQNOTSUPPORTED DW CGROUP: RQNOTCONFIGURED ; RQOFFSPRING job_seg ENDS %*DEFINE(RQCREATEJOB)(%gen_entry(RQCREATEJOB,job_seg,000h) %if (%param_v eq 255) then ( %gen_entry(V_RQCREATE_JOB,valid_seg,012h))fi) %*DEFINE(RQDELETEJOB)(%gen_entry(RQDELETEJOB,job_seg,002h) %' Force the deletion version of delete running task if delete job %' is configured into the system, else the suspension version is linked in. %' Set a flag (delete_job_in) for use by delete task configuration so %' it can avoid a duplicate declaration of delete running task. extrn deleterunningtask:near %set(delete_job_in,0FFH) %if (%param_v eq 255) then ( %gen_entry(V_RQDELETE_JOB,valid_seg,014h))fi) %*DEFINE(RQOFFSPRING)(%gen_entry(RQOFFSPRING,job_seg,008h)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; task_seg SEGMENT WORD PUBLIC 'CODE' TASK_MANAGEMENT LABEL WORD DW CGROUP: RQNOTCONFIGURED ; RQCREATETASK DW CGROUP: RQNOTCONFIGURED ; RQDELETETASK DW CGROUP: RQNOTCONFIGURED ; RQSUSPENDTASK DW CGROUP: RQNOTCONFIGURED ; RQRESUMETASK DW CGROUP: RQNOTCONFIGURED ; RQSLEEP DW CGROUP: RQNOTSUPPORTED DW CGROUP: RQNOTCONFIGURED ; RQGETTASKTOKENS DW CGROUP: RQNOTSUPPORTED DW CGROUP: RQNOTCONFIGURED ; RQGETPRIORITY DW CGROUP: RQNOTCONFIGURED ; RQSETPRIORITY task_seg ENDS %*DEFINE(RQCREATETASK)(%gen_entry(RQCREATETASK,task_seg,000h) %if (%param_v eq 255) then ( %gen_entry(V_RQCREATE_TASK,valid_seg,016h))fi) %*DEFINE(RQDELETETASK)(%gen_entry(RQDELETETASK,task_seg,002h) %' force the deletion version of delete running task if delete task %' is configured into the system, else the suspension version is linked in. %' If delete job is configured in then do not declare delete running task %' to be external. The external declaration is done in delete job configuration. %IF (%delete_job_in NE 0FFH) THEN ( extrn deleterunningtask:near )FI%' ) %*DEFINE(RQSUSPENDTASK)(%gen_entry(RQSUSPENDTASK,task_seg,004h) %if (%param_v eq 255) then ( %gen_entry(V_RQSUSPEND_TASK,valid_seg,018h))fi) %*DEFINE(RQRESUMETASK)(%gen_entry(RQRESUMETASK,task_seg,006h) %if (%param_v eq 255) then ( %gen_entry(V_RQRESUME_TASK,valid_seg,01Ah))fi) %*DEFINE(RQSLEEP)(%gen_entry(RQSLEEP,task_seg,008h)) %*DEFINE(RQGETTASKTOKENS)(%gen_entry(RQGETTASKTOKENS,task_seg,00Ch)) %*DEFINE(RQGETPRIORITY)(%gen_entry(RQGETPRIORITY,task_seg,010h) %if (%param_v eq 255) then ( %gen_entry(V_RQGET_PRIORITY,valid_seg,01Ch))fi) %*DEFINE(RQSETPRIORITY)(%gen_entry(RQSETPRIORITY,task_seg,012h) %if (%param_v eq 255) then ( %gen_entry(V_RQSET_PRIORITY,valid_seg,01Eh))fi) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mb_seg SEGMENT WORD PUBLIC 'CODE' MAILBOX_MANAGEMENT LABEL WORD DW CGROUP: RQNOTCONFIGURED ; RQCREATEMAILBOX DW CGROUP: RQNOTCONFIGURED ; RQDELETEMAILBOX DW CGROUP: RQNOTCONFIGURED ; RQSENDMESSAGE DW CGROUP: RQNOTCONFIGURED ; RQRECEIVEMESSAGE mb_seg ENDS %*DEFINE(RQCREATEMAILBOX)(%gen_entry(RQCREATEMAILBOX,mb_seg,000h)) %*DEFINE(RQDELETEMAILBOX)(%gen_entry(RQDELETEMAILBOX,mb_seg,002h)) %*DEFINE(RQSENDMESSAGE)(%gen_entry(RQSENDMESSAGE,mb_seg,004h) %if (%param_v eq 255) then ( %gen_entry(V_RQSEND_MESSAGE,valid_seg,020h))fi) %*DEFINE(RQRECEIVEMESSAGE)(%gen_entry(RQRECEIVEMESSAGE,mb_seg,006h) %if (%param_v eq 255) then ( %gen_entry(V_RQRECEIVE_MESSAGE,valid_seg,022h))fi) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; sem_seg SEGMENT WORD PUBLIC 'CODE' SEMAPHORE_MANAGEMENT LABEL WORD DW CGROUP: RQNOTCONFIGURED ; RQCREATESEMAPHORE DW CGROUP: RQNOTCONFIGURED ; RQDELETESEMAPHORE DW CGROUP: RQNOTCONFIGURED ; RQSENDUNITS DW CGROUP: RQNOTCONFIGURED ; RQRECEIVEUNITS sem_seg ENDS %*DEFINE(RQCREATESEMAPHORE)(%gen_entry(RQCREATESEMAPHORE,sem_seg,000h) %if (%param_v eq 255) then ( %gen_entry(V_RQCREATE_SEMAPHORE,valid_seg,024h))fi) %*DEFINE(RQDELETESEMAPHORE)(%gen_entry(RQDELETESEMAPHORE,sem_seg,002h)) %*DEFINE(RQSENDUNITS)(%gen_entry(RQSENDUNITS,sem_seg,004h) %if (%param_v eq 255) then ( %gen_entry(V_RQSEND_UNITS,valid_seg,026h))fi) %*DEFINE(RQRECEIVEUNITS)(%gen_entry(RQRECEIVEUNITS,sem_seg,006h) %if (%param_v eq 255) then ( %gen_entry(V_RQRECEIVE_UNITS,valid_seg,028h))fi) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; reg_seg SEGMENT WORD PUBLIC 'CODE' REGION_MANAGEMENT LABEL WORD DW CGROUP: RQNOTCONFIGURED ; RQCREATEREGION DW CGROUP: RQNOTCONFIGURED ; RQDELETEREGION DW CGROUP: RQNOTCONFIGURED ; RQSENDCONTROL DW CGROUP: RQNOTCONFIGURED ; RQRECEIVECONTROL DW CGROUP: RQNOTCONFIGURED ; RQACCEPTCONTROL reg_seg ENDS %*DEFINE(RQCREATEREGION)(%gen_entry(RQCREATEREGION,reg_seg,000h)) %*DEFINE(RQDELETEREGION)(%gen_entry(RQDELETEREGION,reg_seg,002h)) %*DEFINE(RQSENDCONTROL)(%gen_entry(RQSENDCONTROL,reg_seg,004h)) %*DEFINE(RQRECEIVECONTROL)(%gen_entry(RQRECEIVECONTROL,reg_seg,006h)) %*DEFINE(RQACCEPTCONTROL)(%gen_entry(RQACCEPTCONTROL,reg_seg,008h)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fs_seg SEGMENT WORD PUBLIC 'CODE' FREE_SPACE_MANAGEMENT LABEL WORD DW CGROUP: RQNOTCONFIGURED ; RQCREATESEGMENT DW CGROUP: RQNOTSUPPORTED DW CGROUP: RQNOTSUPPORTED DW CGROUP: RQNOTCONFIGURED ; RQDELETESEGMENT DW CGROUP: RQNOTCONFIGURED ; RQGETSIZE DW CGROUP: RQNOTCONFIGURED ; RQGETPOOLATTRIB DW CGROUP: RQNOTCONFIGURED ; RQSETPOOLMIN fs_seg ENDS %*DEFINE(RQCREATESEGMENT)(%gen_entry(RQCREATESEGMENT,fs_seg,000h)) %*DEFINE(RQDELETESEGMENT)(%gen_entry(RQDELETESEGMENT,fs_seg,006h)) %*DEFINE(RQGETSIZE)(%gen_entry(RQGETSIZE,fs_seg,008h) %if (%param_v eq 255) then ( %gen_entry(V_RQGET_SIZE,valid_seg,02Ah))fi) %*DEFINE(RQGETPOOLATTRIB)(%gen_entry(RQGETPOOLATTRIB,fs_seg,00Ah)) %*DEFINE(RQSETPOOLMIN)(%gen_entry(RQSETPOOLMIN,fs_seg,00Ch)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; int_seg SEGMENT WORD PUBLIC 'CODE' INTERRUPT_MANAGEMENT LABEL WORD DW CGROUP: RQNOTCONFIGURED ; RQSETOSEXTENSION DW CGROUP: RQNOTCONFIGURED ; RQSETINTERRUPT DW CGROUP: RQNOTSUPPORTED DW CGROUP: RQNOTSUPPORTED DW CGROUP: RQNOTCONFIGURED ; RQENABLE DW CGROUP: RQNOTSUPPORTED DW CGROUP: RQNOTCONFIGURED ; RQRESETINTERRUPT DW CGROUP: RQNOTSUPPORTED DW CGROUP: RQNOTSUPPORTED DW CGROUP: RQNOTSUPPORTED DW CGROUP: RQNOTSUPPORTED DW CGROUP: RQNOTSUPPORTED int_seg ENDS %*DEFINE(RQSETOSEXTENSION)(%gen_entry(RQSETOSEXTENSION,int_seg,000h)) %*DEFINE(RQSETINTERRUPT)(%gen_entry(RQSETINTERRUPT,int_seg,002h) %if (%param_v eq 255) then ( %gen_entry(V_RQSET_INTERRUPT,valid_seg,02Ch))fi) %*DEFINE(RQENABLE)(%gen_entry(RQENABLE,int_seg,008h)) %*DEFINE(RQRESETINTERRUPT)(%gen_entry(RQRESETINTERRUPT,int_seg,00Ch)) %*DEFINE(RQGETLEVEL)(%gen_entry(RQGETLEVEL,int_seg,00Eh)) %*DEFINE(RQEXITINTERRUPT)(%gen_entry(RQEXITINTERRUPT,int_seg,010h)) %*DEFINE(RQSIGNALINTERRUPT)(%gen_entry(RQSIGNALINTERRUPT,int_seg,012h)) %*DEFINE(RQWAITINTERRUPT)(%gen_entry(RQWAITINTERRUPT,int_seg,014h)) %*DEFINE(RQENTERINTERRUPT)(%gen_entry(RQENTERINTERRUPT,int_seg,016h)) %*DEFINE(RQDISABLE)(%gen_entry(RQDISABLE,int_seg,018h)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; excep_seg SEGMENT WORD PUBLIC 'CODE' EXCEPTION_MANAGEMENT LABEL WORD DW CGROUP: RQNOTCONFIGURED ; RQGETEXCEPTIONHANDLER DW CGROUP: RQNOTCONFIGURED ; RQSETEXCEPTIONHANDLER DW CGROUP: RQNOTCONFIGURED ; RQSIGNALEXCEPTION excep_seg ENDS %*DEFINE(RQGETEXCEPTIONHANDLER)(%gen_entry(RQGETEXCEPTIONHANDLER,excep_seg,000h)) %*DEFINE(RQSETEXCEPTIONHANDLER)(%gen_entry(RQSETEXCEPTIONHANDLER,excep_seg,002h)) %*DEFINE(RQSIGNALEXCEPTION)(%gen_entry(RQSIGNALEXCEPTION,excep_seg,004h)) $restore