]> 4ch.mooo.com Git - 16.git/blobdiff - 16/x_/mxsl.asm
wwww
[16.git] / 16 / x_ / mxsl.asm
diff --git a/16/x_/mxsl.asm b/16/x_/mxsl.asm
new file mode 100755 (executable)
index 0000000..d790885
--- /dev/null
@@ -0,0 +1,62 @@
+;-----------------------------------------------------------\r
+;\r
+; MXLN.ASM - Start line function\r
+; Copyright (c) 1994 by Alessandro Scotti\r
+;\r
+;-----------------------------------------------------------\r
+WARN    PRO\r
+NOWARN  RES\r
+INCLUDE MODEX.DEF\r
+\r
+PUBLIC  mxStartLine\r
+\r
+MX_TEXT SEGMENT USE16 PARA PUBLIC 'CODE'\r
+        ASSUME cs:MX_TEXT, ds:NOTHING, es:NOTHING\r
+\r
+EXTRN   mx_BytesPerLine : WORD\r
+\r
+;-----------------------------------------------------------\r
+;\r
+; Changes the video start address to the specified line.\r
+;\r
+; Input:\r
+;       Line    = new start line\r
+; Output:\r
+;       none\r
+;\r
+mxStartLine     PROC FAR\r
+        ARG     Line:WORD       = ARG_SIZE\r
+        .enter  0\r
+        ASSUME  ds:NOTHING\r
+\r
+        mov     ax, [Line]              ; Get video offset\r
+        mul     [mx_BytesPerLine]\r
+        xchg    ax, bx                  ; Copy it into BX\r
+\r
+; Wait display\r
+        mov     dx, STATUS\r
+@@1:    in      al, dx\r
+        test    al, 08h\r
+        jnz     @@1\r
+\r
+; Set starting address\r
+        mov     dx, CRTC\r
+        mov     al, 0Ch                 ; Linear Starting Address high\r
+        mov     ah, bh\r
+        cli\r
+        out     dx, ax\r
+        mov     al, 0Dh                 ; Linear Starting Address low\r
+        mov     ah, bl\r
+        out     dx, ax\r
+        sti\r
+\r
+; Wait retrace\r
+        mov     dx, STATUS\r
+@@2:    in      al,dx\r
+        test    al, 08h\r
+        jz      @@2\r
+\r
+        xor     ax, ax\r
+        .leave  ARG_SIZE\r
+MX_TEXT         ENDS\r
+END\r