en:docs:mvm:api:1

This is an old revision of the document!


SVC_ERROREXIT

Terminate MVM with an error message. This call displays a message and then terminates the current MVM session.

Parameters

Register Description
Stack (top) Far pointer (segment:offset) to an ASCIIZ message string. The message is displayed by the host system before termination.

Return Value

This function does not return; it terminates the MVM.

Description

SVC_ERROREXIT provides a way to terminate the MVM (Multiple Virtual DOS Machine) with a user‑supplied error message. It is specific to the OS/2 MVDM environment and has no direct equivalent in DOS INT 21h (the closest is AH=4Ch, which terminates without a message).

Before invoking the call, the far pointer (segment and offset) of a null‑terminated ASCII string must be pushed onto the stack. The host system (OS/2) will display the message and then terminate the virtual machine.

The low‑level instruction sequence generated for this SVC is:

HLT
DB  1          ; function code
DB  NOT 1      ; complement of function code (for validation)

Example

The following example shows how to terminate with an error message using assembly language:

   push ds
   push offset msg
   hlt
   db  1
   db  not 1
msg db "Fatal error",0

In a high‑level language (e.g., C with inline assembly), you could use a helper macro:

#define SvcErrorExit(msg) \
    __asm { \
        push ds \
        push offset msg \
        hlt \
        _emit 1 \
        _emit ~1 \
    }

Notes

* The message string must be in the ASCIIZ format (zero‑terminated). * After this call, the MVM is terminated and control returns to the host operating system. * Because the call never returns, no register values are preserved.

See Also

* SVC_EXIT – terminate without a message. * SVC_DUPHANDLE – duplicate handle. * INT 21h AH=4Ch – DOS terminate with return code.

2024/11/07 03:44 · prokushev · 0 Comments