]> 4ch.mooo.com Git - 16.git/blob - 16/lib/x/MXIT.ASM
modified: 16/DOS_GFX.EXE
[16.git] / 16 / lib / x / MXIT.ASM
1 ;-----------------------------------------------------------\r
2 ;\r
3 ; MXIT.ASM - Initialization/termination functions\r
4 ; Copyright (c) 1993,1994 by Alessandro Scotti\r
5 ;\r
6 ;-----------------------------------------------------------\r
7 ;WARN    PRO\r
8 INCLUDE MODEX.DEF\r
9 \r
10 PUBLIC  mxInit\r
11 PUBLIC  mxTerm\r
12 \r
13 PUBLIC  mx_VideoSegment\r
14 PUBLIC  mx_CodeSegment\r
15 \r
16 MX_TEXT         SEGMENT USE16 PARA PUBLIC 'CODE'\r
17                 ASSUME cs:MX_TEXT, ds:NOTHING, es:NOTHING\r
18 \r
19 DB      'MODEX library - Copyright (c) 1992-1994 Alessandro Scotti'\r
20 \r
21 mx_VideoSegment DW      0A000h\r
22 mx_CodeSegment  DW      SEG MX_TEXT\r
23 \r
24 ;-----------------------------------------------------------\r
25 ;\r
26 ; Initialization.\r
27 ;\r
28 ; Input:\r
29 ;       none\r
30 ; Output:\r
31 ;       AX      = 0 on success\r
32 ;\r
33 mxInit  PROC FAR\r
34         LOCAL   Result:WORD,            \\r
35                 VideoSeg:WORD,          \\r
36                 CStoDSalias:WORD        = AUTO_SIZE\r
37         ASSUME  ds:NOTHING\r
38         .enter  AUTO_SIZE\r
39         .push   ds, si, es, di\r
40 \r
41         mov     [Result], -1            ; Assume an error\r
42         mov     [VideoSeg], 0A000h      ; Real mode video segment\r
43         mov     [CStoDSalias], cs       ; Real mode data alias for CS\r
44 \r
45 ; Check if running in protected mode under DPMI\r
46         mov     ax, 1686h\r
47         int     2Fh\r
48         or      ax, ax\r
49          jnz    @@1                     ; DPMI not found, continue in real mode\r
50 \r
51 ; Get a data alias for CS\r
52         mov     ax, 000Ah               ; DMPI: create data alias\r
53         mov     bx, cs\r
54         int     31h\r
55          jc     @@Exit                  ; Exit if service failed\r
56         mov     [CStoDSalias], ax       ; Save data alias for CS\r
57 ; Get a protected-mode selector for the video segment\r
58         mov     ax, 0002h\r
59         mov     bx, 0A000h              ; Real mode segment of video\r
60         int     31h                     ; DPMI: get segment selector\r
61          jc     @@Exit                  ; Exit if service failed\r
62         mov     [VideoSeg], ax          ; Save protected mode video selector\r
63 \r
64 ; Initialize variables\r
65 @@1:\r
66         mov     ds, [CStoDSalias]\r
67         ASSUME  ds:MX_TEXT\r
68         mov     [mx_CodeSegment], ds\r
69         mov     ax, [VideoSeg]\r
70         mov     [mx_VideoSegment], ax\r
71 \r
72 ; Don't bother with VGA check for now...\r
73 \r
74         mov     [Result], 0\r
75 \r
76 @@Exit:\r
77         mov     ax, [Result]\r
78         .pop    ds, si, es, di\r
79         .leave\r
80 mxInit  ENDP\r
81 \r
82 ;-----------------------------------------------------------\r
83 ;\r
84 ; Termination.\r
85 ;\r
86 ; Input:\r
87 ;       none\r
88 ; Output:\r
89 ;       always 0.\r
90 ;\r
91 mxTerm  PROC FAR\r
92         ASSUME  ds:NOTHING\r
93         xor     ax, ax\r
94         ret\r
95 mxTerm  ENDP\r
96 \r
97 MX_TEXT         ENDS\r
98 END\r