QDOS Internals

Anything you never knew you wanted to know about the Sinclair QL.

User Tools

Site Tools


Table of Contents


Remove an existing (inactive) job. If you need to remove an active job then you need MT_FRJOB/SMS_FRJB.

Call ParametersReturn Parameters
D0.B$04D0.LError code.
D1.LId of job to be removed, or -1 for the current job.D1.LCorrupted.
D3.LError code to return from killed job to any waiting jobs.D3.LCorrupted.


ERR_NCNot complete. The job being killed is still active.
ERR_NJInvalid job id.


  • All registers not shown above are not used on entry and are preserved on exit.
  • Job 0 (SuperBasic) cannot be removed.
  • This trap is not atomic as it can exit via the scheduler - if the current job is being removed.
  • If the job being removed is active, then ERR_BC (not complete) is returned. This tends to imply that passing -1 (current job) as the id of the job to be killed is a non-starter!
  • If the job has child jobs, they are removed whether or not they are active - (probably) using MT_FRJOB/SMS_FRJB below.
  • The error code in D3.L is passed to any job which is waiting for this job to complete.
  • Any resources - channels, memory etc - owned by the job being removed, or its children, are released.


The following shows the use of this call to remove the job with id $00010666.

start   moveq   #mt_rjob,d0       ; Trap code.
        moveq   #$00010666,d1     ; I want to kill the job with this id.
        moveq   #0,d3             ; Don't pass any error codes to the job I'm killing.
        trap    #1                ; Kill this job. 
        tst.l   d0                ; Did it work?
        bne.s   <error handler>   ; It appears not.
qdosmsq/traps/trap_1/rmjb.txt · Last modified: 2008/06/25 12:54 by norman