]> 4ch.mooo.com Git - 16.git/blobdiff - 16/x_/mxit.asm
wwww
[16.git] / 16 / x_ / mxit.asm
diff --git a/16/x_/mxit.asm b/16/x_/mxit.asm
new file mode 100755 (executable)
index 0000000..c0d9ced
--- /dev/null
@@ -0,0 +1,98 @@
+;-----------------------------------------------------------\r
+;\r
+; MXIT.ASM - Initialization/termination functions\r
+; Copyright (c) 1993,1994 by Alessandro Scotti\r
+;\r
+;-----------------------------------------------------------\r
+WARN    PRO\r
+INCLUDE MODEX.DEF\r
+\r
+PUBLIC  mxInit\r
+PUBLIC  mxTerm\r
+\r
+PUBLIC  mx_VideoSegment\r
+PUBLIC  mx_CodeSegment\r
+\r
+MX_TEXT         SEGMENT USE16 PARA PUBLIC 'CODE'\r
+                ASSUME cs:MX_TEXT, ds:NOTHING, es:NOTHING\r
+\r
+DB      'MODEX library - Copyright (c) 1992-1994 Alessandro Scotti'\r
+\r
+mx_VideoSegment DW      0A000h\r
+mx_CodeSegment  DW      SEG MX_TEXT\r
+\r
+;-----------------------------------------------------------\r
+;\r
+; Initialization.\r
+;\r
+; Input:\r
+;       none\r
+; Output:\r
+;       AX      = 0 on success\r
+;\r
+mxInit  PROC FAR\r
+        LOCAL   Result:WORD,            \\r
+                VideoSeg:WORD,          \\r
+                CStoDSalias:WORD        = AUTO_SIZE\r
+        ASSUME  ds:NOTHING\r
+        .enter  AUTO_SIZE\r
+        .push   ds, si, es, di\r
+\r
+        mov     [Result], -1            ; Assume an error\r
+        mov     [VideoSeg], 0A000h      ; Real mode video segment\r
+        mov     [CStoDSalias], cs       ; Real mode data alias for CS\r
+\r
+; Check if running in protected mode under DPMI\r
+        mov     ax, 1686h\r
+        int     2Fh\r
+        or      ax, ax\r
+         jnz    @@1                     ; DPMI not found, continue in real mode\r
+\r
+; Get a data alias for CS\r
+        mov     ax, 000Ah               ; DMPI: create data alias\r
+        mov     bx, cs\r
+        int     31h\r
+         jc     @@Exit                  ; Exit if service failed\r
+        mov     [CStoDSalias], ax       ; Save data alias for CS\r
+; Get a protected-mode selector for the video segment\r
+        mov     ax, 0002h\r
+        mov     bx, 0A000h              ; Real mode segment of video\r
+        int     31h                     ; DPMI: get segment selector\r
+         jc     @@Exit                  ; Exit if service failed\r
+        mov     [VideoSeg], ax          ; Save protected mode video selector\r
+\r
+; Initialize variables\r
+@@1:\r
+        mov     ds, [CStoDSalias]\r
+        ASSUME  ds:MX_TEXT\r
+        mov     [mx_CodeSegment], ds\r
+        mov     ax, [VideoSeg]\r
+        mov     [mx_VideoSegment], ax\r
+\r
+; Don't bother with VGA check for now...\r
+\r
+        mov     [Result], 0\r
+\r
+@@Exit:\r
+        mov     ax, [Result]\r
+        .pop    ds, si, es, di\r
+        .leave\r
+mxInit  ENDP\r
+\r
+;-----------------------------------------------------------\r
+;\r
+; Termination.\r
+;\r
+; Input:\r
+;       none\r
+; Output:\r
+;       always 0.\r
+;\r
+mxTerm  PROC FAR\r
+        ASSUME  ds:NOTHING\r
+        xor     ax, ax\r
+        ret\r
+mxTerm  ENDP\r
+\r
+MX_TEXT         ENDS\r
+END\r