]> 4ch.mooo.com Git - 16.git/blobdiff - 16/x_/mxss.asm
wwww
[16.git] / 16 / x_ / mxss.asm
diff --git a/16/x_/mxss.asm b/16/x_/mxss.asm
new file mode 100755 (executable)
index 0000000..97df736
--- /dev/null
@@ -0,0 +1,72 @@
+;-----------------------------------------------------------\r
+;\r
+; MXSS.ASM - Split screen function\r
+; Copyright (c) 1993,1994 by Alessandro Scotti\r
+;\r
+;-----------------------------------------------------------\r
+WARN    PRO\r
+INCLUDE MODEX.DEF\r
+\r
+PUBLIC  mxSplitScreen\r
+\r
+MX_TEXT         SEGMENT USE16 PARA PUBLIC 'CODE'\r
+                ASSUME cs:MX_TEXT, ds:NOTHING, es:NOTHING\r
+\r
+;-----------------------------------------------------------\r
+;\r
+; Splits the screen.\r
+;\r
+; Input:\r
+;       Line    = scan line at which screen has to be splitted\r
+; Output:\r
+;       none\r
+;\r
+mxSplitScreen   PROC    FAR\r
+        ARG     Line:WORD       = ARG_SIZE\r
+        ASSUME  ds:NOTHING\r
+        .enter  0\r
+\r
+; Modify the line compare value: bits 0-7 are in the Line Compare\r
+; register (CRTC #18), bit 8 is in the Overflow Low register (CRTC #7)\r
+; and bit 9 is in the Maximum Row Address register (CRTC #9)\r
+        mov     ax, [Line]\r
+        shl     ax, 1                   ; Adjust line for mode "X"\r
+        mov     bh, ah\r
+        mov     bl, ah\r
+        and     bx, 0201h\r
+        mov     cl, 4\r
+        shl     bx, cl\r
+        shl     bh, 1\r
+        mov     dx, CRTC\r
+; Write bits 0-7 to line compare register\r
+        mov     ah, al\r
+        mov     al, 18h\r
+        out     dx, ax\r
+; Write bit 8 to overflow register\r
+        mov     al, 07h\r
+        out     dx, al\r
+        inc     dx\r
+        in      al, dx\r
+        dec     dx\r
+        mov     ah, al\r
+        and     ah, 11101111b\r
+        or      ah, bl\r
+        mov     al, 07h\r
+        out     dx, ax\r
+; Write bit 9 to maximum row address register\r
+        mov     al, 09h\r
+        out     dx, al\r
+        inc     dx\r
+        in      al, dx\r
+        dec     dx\r
+        mov     ah, al\r
+        and     ah, 10111111b\r
+        or      ah, bh\r
+        mov     al, 09h\r
+        out     dx, ax\r
+\r
+        .leave  ARG_SIZE\r
+mxSplitScreen   ENDP\r
+\r
+MX_TEXT         ENDS\r
+END\r