summaryrefslogtreecommitdiff
path: root/v4.0/src/MAPPER/EXIT.ASM
blob: 5f98f704c038eef3892ff8a520e8209481a7d24e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
;
page 60,132
;
title CP/DOS DosExit mapper
;
dosxxx  segment byte public 'dos'
        assume  cs:dosxxx,ds:nothing,es:nothing,ss:nothing
;
;**********************************************************************
;*
;*   MODULE:   dosexit
;*
;*   FUNCTION:  Exit a process
;*
;*   CALLING SEQUENCE:
;*
;*       push      word   action code
;*       push      word   result code
;*       call      dosexit
;*
;*   MODULES CALLED:  DOS Int 21h, Function 4ch, terminate process
;*
;*********************************************************************

            public   dosexit
            .sall
            include  macros.inc

str         struc
old_bp      dw       ?
return      dd       ?
Result      dw       ?       ; result code
Action      dw       ?       ; action code
str         ends

dosexit     proc     far

            Enter    DosExit             ; push registers

            mov      ax,[bp].action      ; set resule code area
            cmp      ax,1                ; check for valid action code
            jg       exit                ; jump if invalid action code

            mov      ax,[bp].result      ; else, set result code

            mov      ah,4ch              ; load opcode
            int      21h                 ; do exit

            xor      ax,ax               ; set good return code

exit:       mexit                        ; pop registers
            ret      size str - 6        ; return

dosexit     endp

dosxxx      ends

            end