]> 4ch.mooo.com Git - 16.git/commitdiff
xlib going somewhere~
authorsparky4 <sparky4@cock.li>
Fri, 13 Nov 2015 01:58:33 +0000 (19:58 -0600)
committersparky4 <sparky4@cock.li>
Fri, 13 Nov 2015 01:58:33 +0000 (19:58 -0600)
23 files changed:
16.exe
16/xlib/demo1.exe [deleted file]
16/xlib/demo2.exe [deleted file]
16/xlib/demo3.exe [deleted file]
16/xlib/demo4.exe [deleted file]
16/xlib/demo5.exe [deleted file]
16/xlib/demo6.exe [deleted file]
16/xlib/demo7.exe [deleted file]
16/xlib/demo8.exe [deleted file]
16/xlib/makefile
16/xlib/model.inc
16/xlib/xbmtools.asm
16/xlib/xfileio.asm
16/xlib/xlib.inc
16/xlib/xline.asm
16/xlib/xmain.asm
16/xlib/xmain.inc
16/xlib/xpoint.asm
exmmtest.exe
makefile
planrpcx.exe
scroll.exe
test.exe

diff --git a/16.exe b/16.exe
index 81763d01ddf4b8b6b7160986a26dd6ed59a2fc63..55e5c3bea279bc585e428f122f3601da0d9b247a 100755 (executable)
Binary files a/16.exe and b/16.exe differ
diff --git a/16/xlib/demo1.exe b/16/xlib/demo1.exe
deleted file mode 100755 (executable)
index 7d8a4d6..0000000
Binary files a/16/xlib/demo1.exe and /dev/null differ
diff --git a/16/xlib/demo2.exe b/16/xlib/demo2.exe
deleted file mode 100755 (executable)
index d6dfd06..0000000
Binary files a/16/xlib/demo2.exe and /dev/null differ
diff --git a/16/xlib/demo3.exe b/16/xlib/demo3.exe
deleted file mode 100755 (executable)
index ef3a06a..0000000
Binary files a/16/xlib/demo3.exe and /dev/null differ
diff --git a/16/xlib/demo4.exe b/16/xlib/demo4.exe
deleted file mode 100755 (executable)
index 54c567d..0000000
Binary files a/16/xlib/demo4.exe and /dev/null differ
diff --git a/16/xlib/demo5.exe b/16/xlib/demo5.exe
deleted file mode 100755 (executable)
index 30993d2..0000000
Binary files a/16/xlib/demo5.exe and /dev/null differ
diff --git a/16/xlib/demo6.exe b/16/xlib/demo6.exe
deleted file mode 100755 (executable)
index 7e26f1f..0000000
Binary files a/16/xlib/demo6.exe and /dev/null differ
diff --git a/16/xlib/demo7.exe b/16/xlib/demo7.exe
deleted file mode 100755 (executable)
index 3762184..0000000
Binary files a/16/xlib/demo7.exe and /dev/null differ
diff --git a/16/xlib/demo8.exe b/16/xlib/demo8.exe
deleted file mode 100755 (executable)
index 98c480e..0000000
Binary files a/16/xlib/demo8.exe and /dev/null differ
index cba0dcac040881c9b129875c19142a21bebc4b0c..d1ec5db3a9062ecfaa9cc7fb626549ab71bd13ca 100755 (executable)
@@ -150,6 +150,9 @@ xvsync.$(OBJ)  : xvsync.asm#                        xvsync.inc xlib.inc     model.inc
 xfill.$(OBJ)   : xfill.asm#                            xfill.inc       xlib.inc                model.inc\r
        $(CC) -c $(CFLAGS) xfill.asm#   xfill.inc       xlib.inc                model.inc\r
 \r
+xbezier.$(OBJ): xbezier.asm\r
+       $(CC) -c $(CFLAGS) xbezier.asm\r
+\r
 #\r
 #other~\r
 #\r
index 0aded8e95f164e8b5b25465c66bcf9e48876226e..f35b3faeae75f1eca1c9585af43fa9f478a2b92f 100755 (executable)
@@ -1,20 +1,22 @@
-/*;IFDEF s\r
+IFDEF s\r
 ;  DISPLAY "XLIB04 Small Model"\r
-;  .model small\r
-;ELSE\r
-;  IFDEF c\r
+  .model small\r
+ELSE\r
+  IFDEF c\r
 ;    DISPLAY "XLIB04 Compact Model"\r
-;    .model compact\r
-;  ELSE\r
-;     IFDEF l\r
+    .model compact\r
+  ELSE\r
+     IFDEF l\r
 ;       DISPLAY "XLIB04 Large Model"\r
-;      .model large\r
-;     ELSE\r
+      .model large\r
+     ELSE\r
+          IFDEF h\r
+      .model huge\r
+               ELSE\r
 ;       DISPLAY "WARNING: Model was not defined at the command line."\r
 ;       DISPLAY "         Using default small model ie /ds         "\r
 ;       DISPLAY "         Include in TASM commandline either /ds, /dc or /dl"\r
-;;       .model small\r
-;     ENDIF\r
-;  ENDIF\r
-;ENDIF\r
-*/\r
+       .model small\r
+     ENDIF\r
+  ENDIF\r
+ENDIF\r
index f39c9a322ea7e8333511cf95ea546ce3237e7353..490b2635c2e2b234b370f6fc99f474a0e3112681 100755 (executable)
@@ -42,7 +42,7 @@ COMMENT $
 \r
 $\r
 \r
-LOCALS\r
+.LOCALS\r
 .8086\r
 \r
 include model.inc\r
index 40a0777591098b80baec1e79fe3b7feeacebfe30..253e237cd815f42fc89d5c27df54651d4f57b4e1 100755 (executable)
@@ -430,4 +430,3 @@ _f_filelength endp
 \r
 \r
        end\r
-\r
index 3dbfa758db4f3701760f103932034c80f446fa15..e352f3cf718463cf3a9f4d113d9851d9ea1753ab 100755 (executable)
 \r
 ;\r
 \r
-;.LOCALS\r
+;.global\r
 ;.8086\r
 \r
 ; First lets find out what memory model to use\r
-\r
-include model.inc\r
+;.model huge\r
+;include model.inc\r
 \r
 \r
 AC_INDEX        equ  03c0h   ;Attribute controller index register\r
@@ -162,5 +162,3 @@ WaitNotVsync2:
        global _VsyncPaletteStart       :word\r
        global _VsyncPaletteCount       :word\r
        global _VsyncPaletteBuffer      :byte\r
-\r
-\r
index 6c9c5c56c0421726f7355e80805b13312fb278eb..910c1fc9c13be1b844e81ab8586ed288c2d208cb 100755 (executable)
@@ -26,9 +26,10 @@ ModeXAddr       macro
        mov     dx,[_ScrnLogicalByteWidth]\r
        mul     dx\r
        pop     dx\r
-       shr     bx,2\r
+       shr     bx,1\r
+       shr     bx,1\r
        add     bx,ax\r
-       add     bx,[PgOffs]\r
+       add     bx,[bp+14]\r
        and     cl,3\r
        endm\r
 \r
@@ -44,7 +45,7 @@ ModeXAddr       macro
 ;\r
 \r
 _x_line        proc\r
-ARG     x1:word,y1:word,x2:word,y2:word,Color:word,PgOffs:word\r
+;ARG     x1:word,y1:word,x2:word,y2:word,Color:word,PgOffs:word\r
 LOCAL   vertincr:word,incr1:word,incr2:word,routine:word=LocalStk\r
        push    bp              ; Set up stack frame\r
        mov     bp,sp\r
@@ -60,8 +61,8 @@ LOCAL   vertincr:word,incr1:word,incr2:word,routine:word=LocalStk
 ; check for vertical line\r
 \r
        mov     si,[_ScrnLogicalByteWidth]\r
-       mov     cx,[x2]\r
-       sub     cx,[x1]\r
+       mov     cx,[bp+8]\r
+       sub     cx,[bp+4]\r
        jz      VertLine\r
 \r
 ; force x1 < x2\r
@@ -70,19 +71,19 @@ LOCAL   vertincr:word,incr1:word,incr2:word,routine:word=LocalStk
 \r
        neg     cx\r
 \r
-       mov     bx,[x2]\r
-       xchg    bx,[x1]\r
-       mov     [x2],bx\r
+       mov     bx,[bp+8]\r
+       xchg    bx,[bp+4]\r
+       mov     [bp+8],bx\r
 \r
-       mov     bx,[y2]\r
-       xchg    bx,[y1]\r
-       mov     [y2],bx\r
+       mov     bx,[bp+10]\r
+       xchg    bx,[bp+6]\r
+       mov     [bp+10],bx\r
 \r
 ; calc dy = abs(y2 - y1)\r
 \r
 L01:\r
-       mov     bx,[y2]\r
-       sub     bx,[y1]\r
+       mov     bx,[bp+10]\r
+       sub     bx,[bp+6]\r
        jnz     short skip\r
        jmp     HorizLine\r
 skip:          jns     L03\r
@@ -113,14 +114,17 @@ L04:
 ; calc first pixel address\r
 \r
        push    cx\r
-       mov     ax,[y1]\r
-       mov     bx,[x1]\r
+       mov     ax,[bp+6]\r
+       mov     bx,[bp+4]\r
        ModeXAddr\r
        mov     di,bx\r
        mov     al,1\r
        shl     al,cl\r
        mov     ah,al           ; duplicate nybble\r
-       shl     al,4\r
+       shl     al,1\r
+       shl     al,1\r
+       shl     al,1\r
+       shl     al,1\r
        add     ah,al\r
        mov     bl,ah\r
        pop     cx\r
@@ -130,8 +134,8 @@ L04:
 ; routine for verticle lines\r
 \r
 VertLine:\r
-       mov     ax,[y1]\r
-       mov     bx,[y2]\r
+       mov     ax,[bp+6]\r
+       mov     bx,[bp+10]\r
        mov     cx,bx\r
        sub     cx,ax\r
        jge     L31\r
@@ -140,7 +144,7 @@ VertLine:
 \r
 L31:\r
        inc     cx\r
-       mov     bx,[x1]\r
+       mov     bx,[bp+4]\r
        push    cx\r
        ModeXAddr\r
 \r
@@ -149,7 +153,7 @@ L31:
        mov     al,MAP_MASK\r
        out     dx,ax\r
        pop     cx\r
-       mov     ax, word ptr [Color]\r
+       mov     ax, word ptr [bp+12]\r
 \r
 ; draw the line\r
 \r
@@ -164,15 +168,15 @@ L32:
 HorizLine:\r
        push    ds\r
 \r
-       mov     ax,[y1]\r
-       mov     bx,[x1]\r
+       mov     ax,[bp+6]\r
+       mov     bx,[bp+4]\r
        ModeXAddr\r
 \r
        mov     di,bx     ; set dl = first byte mask\r
        mov     dl,00fh\r
        shl     dl,cl\r
 \r
-       mov     cx,[x2] ; set dh = last byte mask\r
+       mov     cx,[bp+8] ; set dh = last byte mask\r
        and     cl,3\r
        mov     dh,00eh\r
        shl     dh,cl\r
@@ -180,17 +184,19 @@ HorizLine:
 \r
 ; determine byte offset of first and last pixel in line\r
 \r
-       mov     ax,[x2]\r
-       mov     bx,[x1]\r
+       mov     ax,[bp+8]\r
+       mov     bx,[bp+4]\r
 \r
-       shr     ax,2     ; set ax = last byte column\r
-       shr     bx,2    ; set bx = first byte column\r
+       shr     ax,1     ; set ax = last byte column\r
+       shr     bx,1    ; set bx = first byte column\r
+       shr     ax,1     ; set ax = last byte column\r
+       shr     bx,1    ; set bx = first byte column\r
        mov     cx,ax    ; cx = ax - bx\r
        sub     cx,bx\r
 \r
        mov     ax,dx    ; mov end byte masks to ax\r
        mov     dx,SC_INDEX ; setup dx for VGA outs\r
-       mov     bx, [Color]\r
+       mov     bx, [bp+12]\r
 \r
 ; set pixels in leftmost byte of line\r
 \r
@@ -231,7 +237,7 @@ L44:
 \r
 LoSlopeLine:\r
        mov     al,MAP_MASK\r
-       mov     bh,byte ptr [Color]\r
+       mov     bh,byte ptr [bp+12]\r
 L10:\r
        mov     ah,bl\r
 \r
@@ -283,7 +289,7 @@ HiSlopeLine:
        mov     al,MAP_MASK\r
 L21:            out    dx,ax\r
        push    ax\r
-       mov     ax,[Color]\r
+       mov     ax,[bp+12]\r
        mov     es:[di],al\r
        pop     ax\r
        add     di,bx\r
@@ -314,4 +320,3 @@ Lexit:
 _x_line        endp\r
 \r
 end\r
-\1a
\ No newline at end of file
index a8fd41842af94371f7bab962c121641ec57000f3..cdb174fdd42ca48111ad00c4305d7834d618fef1 100755 (executable)
 ;                      and tripple buffering - Tore Jahn Bastiansen\r
 ;                      (toreba@ifi.uio.no) for the\r
 ;-----------------------------------------------------------------------\r
-\r
-\r
 include xlib.inc\r
 include xmain.inc\r
 \r
 \r
-       .data\r
+       _DATA           SEGMENT WORD PUBLIC USE16 'DATA'\r
+;.data\r
 \r
 \r
 ; Mode X CRTC register tweaks for various resolutions\r
 \r
 \r
-LABEL X256Y200 word\r
+X256Y200 LABEL word\r
                db      0e3h    ; dot clock\r
                db      8       ; Number of CRTC Registers to update\r
        dw      05f00h  ; horz total\r
@@ -49,7 +48,7 @@ LABEL X256Y200 word
        dw      200\r
 \r
 \r
-LABEL X256Y240 word\r
+X256Y240 label word\r
        db      0e3h    ; dot clock\r
        db      16      ; Number of CRTC Registers to update\r
        dw      05f00h  ; horz total\r
@@ -157,7 +156,7 @@ X376Y282 label word
        dw      376\r
        dw      282\r
 \r
-LABEL X256Y400 word\r
+X256Y400 label word\r
        db      0e3h    ; dot clock\r
        db      8       ; Number of CRTC Registers to update\r
        dw      05f00h  ; horz total\r
@@ -173,7 +172,7 @@ LABEL X256Y400 word
        dw      400\r
 \r
 \r
-LABEL X256Y480 word\r
+X256Y480 label word\r
        db      0e3h    ; dot clock\r
        db      16      ; Number of CRTC Registers to update\r
                dw      05f00h  ; horz total\r
@@ -439,6 +438,9 @@ PARAM_COUNT equ ($-PARAMS)
 \r
 DoubleScanFlag db ?     ; Flag to indicate double scanned mode\r
 \r
+_DATA          ENDS\r
+\r
+\r
        .code\r
 \r
 ;-------------------------------------------------------------------------\r
@@ -459,7 +461,9 @@ SetLogicalScrWidth proc
        mov   ax,bx                        ; no - set logical width = physical\r
 \r
 @@ValidLogicalWidth:\r
-       shr   ax,3\r
+       shr   ax,1\r
+       shr   ax,1\r
+       shr   ax,1\r
        out   dx,al\r
 \r
        ; The EXACT logical pixel width may not have been possible since\r
@@ -472,10 +476,12 @@ SetLogicalScrWidth proc
        mov   [_RightClip],ax             ; Set default Right clip column\r
                                          ; screen\r
        sub   ax,[_ScrnPhysicalByteWidth] ; Calculate and store Max X position\r
-       shl   ax,2                        ; of physical screen in virtual\r
+       shl   ax,1                        ; of physical screen in virtual\r
+       shl   ax,1                        ; of physical screen in virtual\r
        mov   [_MaxScrollX],ax            ; screen in pixels\r
        mov   ax,bx                       ; set ax to byte width of virt scrn\r
-       shl   ax,2                        ; convert to pixels\r
+       shl   ax,1                        ; convert to pixels\r
+       shl   ax,1                        ; convert to pixels\r
        mov   [_ScrnLogicalPixelWidth],ax ; store virt scrn pixel width\r
        mov   cx,ax                       ; save ax (return value)\r
 \r
@@ -550,7 +556,7 @@ clear_vram endp
 ; parts adapted from M. Abrash code.\r
 ;------------------------------------------------------------------------\r
 _x_set_mode proc\r
-       ARG   mode:word,logicalscrwidth:word\r
+       ;;arg   mode:word,logicalscrwidth:word\r
        push  bp      ;preserve caller's stack frame\r
        mov   bp,sp\r
 \r
@@ -565,7 +571,7 @@ _x_set_mode proc
        mov   cx,PARAM_COUNT\r
        rep   stosb\r
 \r
-       mov   cx,[mode]\r
+       mov   cx,[BP+4]\r
        cmp   cx,LAST_X_MODE        ; have we selected a valid mode\r
        jle   @@ValidMode           ; Yes !\r
 \r
@@ -657,7 +663,8 @@ _x_set_mode proc
        mov   [_SplitScrnScanLine],ax       ; No splitscrn ==\r
                                            ; splitscrn=PhysicalscrnHeight\r
        mov   bx,ax                         ; Copy width for later use\r
-       shr   ax,2                          ; Convert to byte width\r
+       shr   ax,1                          ; Convert to byte width\r
+       shr   ax,1                          ; Convert to byte width\r
        mov   [_ScrnPhysicalByteWidth],ax   ; Store for later use\r
        lodsw                               ; Load Screen Phys. Height\r
        mov   [_ScrnPhysicalHeight],ax      ; Store for later use\r
@@ -665,7 +672,7 @@ _x_set_mode proc
 \r
        ;  Mode X is set, now set the required logical page width.\r
 \r
-       mov     cx,[logicalscrwidth]\r
+       mov     cx,[BP+6]\r
 \r
        call    SetLogicalScrWidth\r
 \r
@@ -687,10 +694,10 @@ _x_set_mode endp
 ; Written by Themie Gouthas\r
 ;----------------------------------------------------------------------\r
 _x_select_default_plane proc\r
-ARG Plane:byte\r
+       ;arg Plane:byte\r
        push bp\r
        mov  bp,sp       ; set up stack frame\r
-       mov  cl,byte ptr [Plane]\r
+       mov  cl,byte ptr [bp+4]\r
 \r
        ; SELECT WRITE PLANE\r
        and  cl,011b              ;CL = plane\r
@@ -727,7 +734,7 @@ _x_select_default_plane endp
 ;----------------------------------------------------------------------\r
 \r
 _x_set_splitscreen proc\r
-       ARG Line:word\r
+       ;arg Line:word\r
        push bp\r
        mov  bp,sp       ; set up stack frame\r
        push si\r
@@ -769,7 +776,7 @@ _x_set_splitscreen proc
        mov  [_PhysicalStartPixelX],ax  ; offset within virtual screen\r
        mov  [_PhysicalStartY],ax\r
        mov  [_SplitScrnActive],TRUE\r
-       mov  ax,[Line]\r
+       mov  ax,[bp+4]\r
        jns  @@NotNeg    ; Check that Split Scrn start scan line is +ve\r
 \r
        mov  ax,0        ; Since -ve set to 0\r
@@ -804,7 +811,10 @@ _x_set_splitscreen proc
 \r
        mov  ah,bh\r
        and  ah,1\r
-       shl  ah,4\r
+       shl  ah,1\r
+       shl  ah,1\r
+       shl  ah,1\r
+       shl  ah,1\r
        mov  al,OVERFLOW     ; Bit 4 of overflow register = Bit 8 of split\r
        out  dx,al           ; screen scan line,\r
        inc  dx              ; So using readability of VGA registers\r
@@ -816,7 +826,9 @@ _x_set_splitscreen proc
        dec  dx\r
        mov  ah,bh\r
        and  ah,2\r
-       ror  ah,3\r
+       ror  ah,1\r
+       ror  ah,1\r
+       ror  ah,1\r
        mov  al,MAX_SCAN_LINE  ; Bit 6 of max scan line register =\r
        out  dx,al             ; Bit 9 of split screen scan line\r
        inc  dx                ; As we did before, update the apropriate\r
@@ -846,9 +858,9 @@ _x_set_splitscreen proc
 \r
        mov  [_ScrnLogicalHeight],ax     ; Save Screen Logical Height\r
        cmp   ax,[_BottomClip]\r
-       jle   @@BottomClipOK             ; Adjust Clip Rectangle if necessary\r
+       jle   @@BottomClipOK2             ; Adjust Clip Rectangle if necessary\r
        mov   [_BottomClip],ax\r
-@@BottomClipOK:\r
+@@BottomClipOK2:\r
        sub  ax,[_SplitScrnScanLine]     ; Update the maximum Y position of\r
        mov  [_MaxScrollY],ax            ; Physical screen in logical screen\r
 \r
@@ -875,14 +887,14 @@ _x_set_splitscreen      endp
 ;------------------------------------------------------------------------\r
 \r
 _x_page_flip proc\r
-       ARG x:word,y:word\r
+       ;arg x:word,y:word\r
        push  bp                  ;preserve caller's stack frame\r
        mov   bp,sp               ;point to local stack frame\r
        push  si\r
 \r
-       mov  si,[x]\r
+       mov  si,[bp+4]\r
        mov  ax,[_ScrnLogicalByteWidth]     ; Calculate Offset increment\r
-       mov  cx,[y]\r
+       mov  cx,[bp+6]\r
        mul  cx                             ; for Y\r
        cmp  [_DoubleBufferActive],TRUE     ; Do we have double buffering ?\r
        je   @@DoubleBuffer\r
@@ -931,14 +943,14 @@ _x_page_flip endp
 ; Parts addapted from M. Abrash code published in DDJ Mag.\r
 ;------------------------------------------------------------------------\r
 _x_set_start_addr proc\r
-       ARG x:word,y:word\r
+       ;arg x:word,y:word\r
        push bp\r
        mov  bp,sp\r
        push si\r
 \r
-       mov  si,[x]\r
+       mov  si,[bp+4]\r
        mov  ax,[_ScrnLogicalByteWidth]     ; Calculate Offset increment\r
-       mov  cx,[y]                         ; for Y\r
+       mov  cx,[bp+6]                         ; for Y\r
        mul  cx\r
        cmp  [_DoubleBufferActive],TRUE     ; Do we have double buffering ?\r
        je   @@PageResolution\r
@@ -958,7 +970,8 @@ PageFlipEntry2:
 \r
 @@AddColumn:\r
        mov  cx,si\r
-       shr  cx,2\r
+       shr  cx,1\r
+       shr  cx,1\r
        mov  [_PhysicalStartByteX],cx\r
        add  ax,cx                          ; add the column offset for X\r
        mov  bh,al                          ; setup CRTC start addr regs and\r
@@ -1052,14 +1065,14 @@ _x_hide_splitscreen proc
        cmp  [_SplitScrnActive],TRUE\r
        je   @@SplitScreenEnabled\r
 \r
-@@error:\r
+@@error0:\r
        mov  [_ErrorValue],ERROR\r
        pop  bp\r
        ret\r
 \r
 @@SplitScreenEnabled:\r
        cmp  [_CurrXMode],4          ; Do nothing for Modes > 2\r
-       jg   @@error\r
+       jg   @@error0\r
        mov  bx,[_ScrnPhysicalHeight]\r
 \r
        mov  ax,[_ScrnLogicalHeight]\r
@@ -1069,10 +1082,10 @@ _x_hide_splitscreen proc
        mov  [_SplitScrnVisibleHeight],ax\r
 \r
        or    [DoubleScanFlag],0\r
-       jz    @@NotDoubleScanned\r
+       jz    @@NotDoubleScanned0\r
        shl   bx,1\r
        dec   bx\r
-@@NotDoubleScanned:\r
+@@NotDoubleScanned0:\r
        ;mov  cl,[DoubleScanFlag]  ; Compensate for double scanned modes\r
        ;shl  bx,cl\r
 \r
@@ -1086,7 +1099,10 @@ _x_hide_splitscreen proc
 \r
        mov  ah,bh\r
        and  ah,1\r
-       shl  ah,4\r
+       shl  ah,1\r
+       shl  ah,1\r
+       shl  ah,1\r
+       shl  ah,1\r
        mov  al,OVERFLOW  ; Bit 4 of overflow register = Bit 8 of split\r
        out  dx,al        ; screen scan line,\r
        inc  dx           ; So using readability of VGA registers\r
@@ -1098,7 +1114,9 @@ _x_hide_splitscreen proc
        dec  dx\r
        mov  ah,bh\r
        and  ah,2\r
-       ror  ah,3\r
+       ror  ah,1\r
+       ror  ah,1\r
+       ror  ah,1\r
        mov  al,MAX_SCAN_LINE  ; Bit 6 of max scan line register =\r
        out  dx,al             ; Bit 9 of split screen scan line\r
        inc  dx                ; As we did before, update the apropriate\r
@@ -1108,7 +1126,7 @@ _x_hide_splitscreen proc
        out  dx,al\r
        sti                  ; Registers are set, so interrupts are safe\r
 \r
-@@done:\r
+@@done0:\r
 \r
        mov  [_ErrorValue],OK\r
        pop  bp\r
@@ -1140,16 +1158,16 @@ _x_show_splitscreen proc
        mov  bp,sp\r
 \r
        cmp  [_SplitScrnActive],TRUE\r
-       je   @@SplitScreenEnabled\r
+       je   @@SplitScreenEnabled0\r
 \r
-@@error:\r
+@@error1:\r
        mov  [_ErrorValue],ERROR\r
        pop  bp\r
        ret\r
 \r
-@@SplitScreenEnabled:\r
+@@SplitScreenEnabled0:\r
        cmp  [_CurrXMode],4          ; Do nothing for Modes > 2\r
-       jg   @@error\r
+       jg   @@error1\r
 \r
        mov  bx,[_SplitScrnScanLine]\r
        mov  ax,[_ScrnLogicalHeight] ; Update Max Scroll Y\r
@@ -1161,10 +1179,10 @@ _x_show_splitscreen proc
        mov  [_SplitScrnVisibleHeight],ax\r
 \r
        or    [DoubleScanFlag],0\r
-       jz    @@NotDoubleScanned\r
+       jz    @@NotDoubleScanned1\r
        shl   bx,1\r
        dec   bx\r
-@@NotDoubleScanned:\r
+@@NotDoubleScanned1:\r
        ;mov  cl,[DoubleScanFlag]  ; Compensate for double scanned modes\r
        ;shl  bx,cl\r
        WaitVsyncStart               ; wait for vertical retrace\r
@@ -1177,7 +1195,10 @@ _x_show_splitscreen proc
 \r
        mov  ah,bh\r
        and  ah,1\r
-       shl  ah,4\r
+       shl  ah,1\r
+       shl  ah,1\r
+       shl  ah,1\r
+       shl  ah,1\r
        mov  al,OVERFLOW  ; Bit 4 of overflow register = Bit 8 of split\r
        out  dx,al        ; screen scan line,\r
        inc  dx           ; So using readability of VGA registers\r
@@ -1189,7 +1210,9 @@ _x_show_splitscreen proc
        dec  dx\r
        mov  ah,bh\r
        and  ah,2\r
-       ror  ah,3\r
+       ror  ah,1\r
+       ror  ah,1\r
+       ror  ah,1\r
        mov  al,MAX_SCAN_LINE  ; Bit 6 of max scan line register =\r
        out  dx,al             ; Bit 9 of split screen scan line\r
        inc  dx                ; As we did before, update the apropriate\r
@@ -1199,7 +1222,7 @@ _x_show_splitscreen proc
        out  dx,al\r
        sti                  ; Registers are set, so interrupts are safe\r
 \r
-@@Done:\r
+@@Done1:\r
        mov  [_ErrorValue],0\r
        pop  bp\r
        ret\r
@@ -1229,24 +1252,24 @@ _x_show_splitscreen endp
 \r
 \r
 _x_adjust_splitscreen proc\r
-       ARG   ScanLine\r
+       ;arg   ScanLine\r
        push bp\r
        mov  bp,sp\r
 \r
        cmp  [_SplitScrnActive],TRUE\r
-       je   @@SplitScreenEnabled\r
+       je   @@SplitScreenEnabled1\r
 \r
-@@error:\r
+@@error2:\r
        mov  [_ErrorValue],ERROR\r
        pop  bp\r
        ret\r
 \r
-@@SplitScreenEnabled:\r
+@@SplitScreenEnabled1:\r
        cmp  [_CurrXMode],4          ; Do nothing for Modes > 2\r
-       jg   @@error\r
-       mov  bx,[ScanLine]            ; Is the required starting scan line\r
+       jg   @@error2\r
+       mov  bx,[bp+4]            ; Is the required starting scan line\r
        cmp  bx,[_SplitScrnScanLine]  ; valid ?\r
-       js   @@Done                   ; No - Then do nothing\r
+       js   @@Done2                   ; No - Then do nothing\r
 \r
 @@ValidScanLine:\r
 \r
@@ -1259,10 +1282,10 @@ _x_adjust_splitscreen proc
        mov  [_SplitScrnVisibleHeight],ax\r
 \r
        or    [DoubleScanFlag],0\r
-       jz    @@NotDoubleScanned\r
+       jz    @@NotDoubleScanned2\r
        shl   bx,1\r
        dec   bx\r
-@@NotDoubleScanned:\r
+@@NotDoubleScanned2:\r
        ;mov  cl,[DoubleScanFlag]   ; Compensate for double scanned modes\r
        ;shl  bx,cl\r
 \r
@@ -1277,7 +1300,10 @@ _x_adjust_splitscreen proc
 \r
        mov  ah,bh\r
        and  ah,1\r
-       shl  ah,4\r
+       shl  ah,1\r
+       shl  ah,1\r
+       shl  ah,1\r
+       shl  ah,1\r
        mov  al,OVERFLOW  ; Bit 4 of overflow register = Bit 8 of split\r
        out  dx,al        ; screen scan line,\r
        inc  dx           ; So using readability of VGA registers\r
@@ -1289,7 +1315,9 @@ _x_adjust_splitscreen proc
        dec  dx\r
        mov  ah,bh\r
        and  ah,2\r
-       ror  ah,3\r
+       ror  ah,1\r
+       ror  ah,1\r
+       ror  ah,1\r
        mov  al,MAX_SCAN_LINE  ; Bit 6 of max scan line register =\r
        out  dx,al             ; Bit 9 of split screen scan line\r
        inc  dx                ; As we did before, update the apropriate\r
@@ -1298,7 +1326,7 @@ _x_adjust_splitscreen proc
        or   al,ah\r
        out  dx,al\r
        sti                    ; Registers are set, so interrupts are safe\r
-@@Done:\r
+@@Done2:\r
        mov  [_ErrorValue],OK\r
        pop   bp\r
        ret\r
@@ -1330,7 +1358,7 @@ _x_adjust_splitscreen endp
 \r
 \r
 _x_set_doublebuffer proc\r
-          ARG PageHeight:word\r
+          ;arg PageHeight:word\r
           push  bp\r
           mov   bp,sp\r
 \r
@@ -1346,7 +1374,7 @@ _x_set_doublebuffer proc
           mov   ax,[_ScrnLogicalHeight] ; Set Maximum D.B. Page height to\r
           shr   ax,1                    ;   _ScrnLogicalHeight / 2\r
 \r
-          mov   bx,[PageHeight]         ; Is the require D.B. Page Height\r
+          mov   bx,[bp+4]         ; Is the require D.B. Page Height\r
           cmp   ax,bx                   ;  > the Maximum  D.B. Page Height ?\r
 \r
           js    @@InvalidHeight         ; no  - jump\r
@@ -1357,9 +1385,9 @@ _x_set_doublebuffer proc
           mov   [_ScrnLogicalHeight],ax    ; Update logical screen height to\r
                                        ;  reflect the height of a D.B. page\r
           cmp   ax,[_BottomClip]\r
-          jle   @@BottomClipOK             ; Adjust Clip Rectangle if necessary\r
+          jle   @@BottomClipOK0             ; Adjust Clip Rectangle if necessary\r
           mov   [_BottomClip],ax\r
-@@BottomClipOK:\r
+@@BottomClipOK0:\r
           push  ax\r
           mul   [_ScrnLogicalByteWidth]    ; Calculate the offset of the second\r
           mov   cx,ax                      ;  D.B. Page in video ram\r
@@ -1410,40 +1438,40 @@ _x_set_doublebuffer endp
 ;------------------------------------------------------------------------\r
 \r
 _x_set_tripplebuffer proc\r
-          ARG PageHeight:word\r
+          ;arg PageHeight:word\r
           push  bp\r
           mov   bp,sp\r
 \r
           cmp   [_DoubleBufferActive],0\r
-          jne   @@Error\r
+          jne   @@Error3\r
           cmp   [_TrippleBufferActive],0\r
-          je    @@OkToContinue\r
-@@Error:\r
+          je    @@OkToContinue3\r
+@@Error3:\r
           mov   [_ErrorValue],ERROR\r
           pop   bp\r
           ret\r
 \r
-@@OkToContinue:\r
+@@OkToContinue3:\r
           mov   [_VisiblePageIdx],0     ; Set visible Page to 0\r
           mov   ax,[_ScrnLogicalHeight] ; Set Maximum T.B. Page height to\r
           mov   bx,3\r
           xor   dx,dx\r
           idiv  bx                      ;   _ScrnLogicalHeight / 3\r
 \r
-          mov   bx,[PageHeight]         ; Is the require T.B. Page Height\r
+          mov   bx,[bp+4]         ; Is the require T.B. Page Height\r
           cmp   ax,bx                   ;  > the Maximum  T.B. Page Height ?\r
 \r
-          js    @@InvalidHeight         ; no  - jump\r
+          js    @@InvalidHeight0         ; no  - jump\r
           mov   ax,bx                   ; yes - Set the T.B. Page height to\r
                                                                         ;       to the maximum allowed.\r
 \r
-@@InvalidHeight:\r
+@@InvalidHeight0:\r
           mov   [_ScrnLogicalHeight],ax    ; Update logical screen height to\r
                                                                                ;  reflect the height of a T.B. page\r
           cmp   ax,[_BottomClip]\r
-          jle   @@BottomClipOK             ; Adjust Clip Rectangle if necessary\r
+          jle   @@BottomClipOK1             ; Adjust Clip Rectangle if necessary\r
           mov   [_BottomClip],ax\r
-@@BottomClipOK:\r
+@@BottomClipOK1:\r
           push  ax\r
           mul   [_ScrnLogicalByteWidth]    ; Calculate the offset of the second\r
           mov   cx,ax                      ;  D.B. Page in video ram\r
@@ -1489,19 +1517,19 @@ _x_set_tripplebuffer endp
 ;------------------------------------------------------------------------\r
 \r
 _x_set_cliprect proc\r
-ARG left:word,top:word,right:word,bottom:word\r
+;arg left:word,top:word,right:word,bottom:word\r
        push  bp\r
        mov   bp,sp\r
-       mov   ax,[left]\r
-       mov   bx,[right]\r
+       mov   ax,[bp+4]\r
+       mov   bx,[bp+8]\r
        cmp   bx,ax\r
        jns   @@CorrectXOrder\r
        xchg  bx,ax\r
 @@CorrectXOrder:\r
        mov   [_LeftClip],ax\r
        mov   [_RightClip],bx\r
-          mov   ax,[top]\r
-       mov   bx,[bottom]\r
+          mov   ax,[bp+6]\r
+       mov   bx,[bp+10]\r
        cmp   bx,ax\r
           jns   @@CorrectYOrder\r
        xchg  bx,ax\r
@@ -1536,4 +1564,4 @@ _x_wait_vsync proc
 _x_wait_vsync endp\r
 \r
 \r
-       end\r
+end\r
index 44b40fc2bd7a05b433f928af00655559058d4705..4b1f4410ff920f4f8d9920654c8ec0229172ed96 100755 (executable)
@@ -26,6 +26,6 @@
         global _x_show_splitscreen      :proc\r
         global _x_adjust_splitscreen    :proc\r
         global _x_set_doublebuffer      :proc\r
-         global _x_set_tripplebuffer     :proc\r
+        global _x_set_tripplebuffer     :proc\r
         global _x_set_cliprect          :proc\r
-        global _x_wait_vsync            :proc
\ No newline at end of file
+        global _x_wait_vsync            :proc\r
index f6bed9612dc7c4264cfc9a8f281d3dc6c8b0eab8..7b7dc910d9ab70d2c5ad9eaad41be603f8d523a1 100755 (executable)
@@ -34,21 +34,21 @@ include xpoint.inc
 ;\r
 \r
 _x_put_pix  proc\r
-       ARG X:word,Y:word,PgOfs:word,Color:word\r
+       ;ARG X:word,Y:word,PgOfs:word,Color:word\r
        push bp                   ;preserve caller's stack frame\r
        mov  bp,sp                ;point to local stack frame\r
 \r
        mov  ax,[_ScrnLogicalByteWidth]\r
-       mul  [Y]                  ;offset of pixel's scan line in page\r
-       mov  bx,[X]\r
+       mul  [BP+6]                  ;offset of pixel's scan line in page\r
+       mov  bx,[BP+4]\r
        shr  bx,1                 ;X/4 = offset of pixel in scan line\r
        shr  bx,1                 ;X/4 = offset of pixel in scan line\r
        add  bx,ax                ;offset of pixel in page\r
-       add  bx,[PgOfs]           ;offset of pixel in display memory\r
+       add  bx,[BP+8]           ;offset of pixel in display memory\r
        mov  ax,SCREEN_SEG\r
        mov  es,ax                ;point ES:BX to the pixel's address\r
 \r
-       mov  cl,byte ptr [X]\r
+       mov  cl,byte ptr [BP+4]\r
        and  cl,011b              ;CL = pixel's plane\r
        mov  ax,0100h + MAP_MASK  ;AL = index in SC of Map Mask reg\r
        shl  ah,cl                ;set only the bit for the pixel's\r
@@ -56,7 +56,7 @@ _x_put_pix  proc
        mov  dx,SC_INDEX          ;set the Map Mask to enable only the\r
        out  dx,ax                ; pixel's plane\r
 \r
-       mov  al,byte ptr [Color]\r
+       mov  al,byte ptr [BP+10]\r
        mov  es:[bx],al           ;draw the pixel in the desired color\r
 \r
        pop   bp                  ;restore caller's stack frame\r
@@ -74,21 +74,21 @@ _x_put_pix   endp
 \r
 \r
 _x_get_pix   proc\r
-       ARG x:word,y:word,PageBase:word\r
+       ;ARG x:word,y:word,PageBase:word\r
        push bp                   ;preserve caller's stack frame\r
        mov  bp,sp                ;point to local stack frame\r
 \r
        mov  ax,[_ScrnLogicalByteWidth]\r
-       mul  [Y]                  ;offset of pixel's scan line in page\r
-       mov  bx,[X]\r
+       mul  [bp+6]                  ;offset of pixel's scan line in page\r
+       mov  bx,[bp+4]\r
        shr  bx,1\r
        shr  bx,1                 ;X/4 = offset of pixel in scan line\r
        add  bx,ax                ;offset of pixel in page\r
-       add  bx,[PageBase]        ;offset of pixel in display memory\r
+       add  bx,[bp+8]        ;offset of pixel in display memory\r
        mov  ax,SCREEN_SEG\r
        mov  es,ax                ;point ES:BX to the pixel's address\r
 \r
-       mov  ah,byte ptr [X]\r
+       mov  ah,byte ptr [bp+4]\r
        and  ah,011b              ;AH = pixel's plane\r
        mov  al,READ_MAP          ;AL = index in GC of the Read Map reg\r
        mov  dx,GC_INDEX          ;set the Read Map to read the pixel's\r
index ddb08bfb692bd91d3c4105ce826dfe92af8e658a..07856205a166e08c85635ea8857367c5bc2fdc27 100755 (executable)
Binary files a/exmmtest.exe and b/exmmtest.exe differ
index 6c388c71f96fff09e1224c685f9f688ae62d342d..5e7828c6700b761be1f1d3566d279ff14ba45cc3 100755 (executable)
--- a/makefile
+++ b/makefile
@@ -416,3 +416,9 @@ updatelibs: .symbolic
        cd $(JSMNLIB)
        git pull
        cd ../../../
+
+xlib: .symbolic
+       @cd 16/xlib
+       @wmake clean
+       @wmake all
+       cd ../../
index 6cd69f00f38e18efc3ebfa3e5f42d6991f492256..8d261568e00519a9f62d9c2ae7697d0f893356ff 100755 (executable)
Binary files a/planrpcx.exe and b/planrpcx.exe differ
index f3bebb2cdacf38c22e9b3e5f22c297dd11c95055..b0718babfd2adc07047330501c9113f1f11e4d67 100755 (executable)
Binary files a/scroll.exe and b/scroll.exe differ
index 6e5281c319f08f8d73d541a409f34b89f0688d8e..31afc8ffd6cb69b117b62b78fde13e35863ed37e 100755 (executable)
Binary files a/test.exe and b/test.exe differ