-/*\r
- * Mesa 3-D graphics library\r
- * Version: 4.0\r
- * \r
- * Copyright (C) 1999 Brian Paul All Rights Reserved.\r
- * \r
- * Permission is hereby granted, free of charge, to any person obtaining a\r
- * copy of this software and associated documentation files (the "Software"),\r
- * to deal in the Software without restriction, including without limitation\r
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
- * and/or sell copies of the Software, and to permit persons to whom the\r
- * Software is furnished to do so, subject to the following conditions:\r
- * \r
- * The above copyright notice and this permission notice shall be included\r
- * in all copies or substantial portions of the Software.\r
- * \r
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\r
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
- */\r
-\r
-/*\r
- * DOS/DJGPP device driver v1.3 for Mesa\r
- *\r
- * Copyright (C) 2002 - Borca Daniel\r
- * Email : dborca@yahoo.com\r
- * Web : http://www.geocities.com/dborca\r
- */\r
-\r
-\r
- .file "virtual.S"\r
-\r
-/*\r
- * extern void *vl_current_draw_buffer;\r
- * extern int vl_current_width, vl_current_bytes;\r
- */\r
-\r
- .text\r
-\r
-/* Desc: void v_clear8 (int color);\r
- *\r
- * In : color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_clear8\r
-_v_clear8:\r
- movl 4(%esp), %eax\r
- movb %al, %ah\r
- pushw %ax\r
- pushw %ax\r
- popl %eax\r
- jmp _v_clear_common\r
-\r
-/* Desc: void v_clear16 (int color);\r
- *\r
- * In : color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_clear16\r
-_v_clear16:\r
- movl 4(%esp), %eax\r
- pushw %ax\r
- pushw %ax\r
- popl %eax\r
- jmp _v_clear_common\r
-\r
-/* Desc: void v_clear32 (int color);\r
- *\r
- * In : color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_clear32\r
-_v_clear32:\r
- movl 4(%esp), %eax\r
- .balign 4\r
-_v_clear_common:\r
- movl _vl_current_bytes, %ecx\r
- movl _vl_current_draw_buffer, %edx\r
- shrl $2, %ecx\r
- .balign 4\r
- 0:\r
- movl %eax, (%edx)\r
- addl $4, %edx\r
- decl %ecx\r
- jnz 0b\r
- ret\r
-\r
-/* Desc: void v_clear8_mmx (int color);\r
- *\r
- * In : color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_clear8_mmx\r
-_v_clear8_mmx:\r
-#ifdef USE_MMX_ASM\r
- movd 4(%esp), %mm0\r
- punpcklbw %mm0, %mm0\r
- punpcklwd %mm0, %mm0\r
- jmp _v_clear_common_mmx\r
-#endif\r
-\r
-/* Desc: void v_clear16_mmx (int color);\r
- *\r
- * In : color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_clear16_mmx\r
-_v_clear16_mmx:\r
-#ifdef USE_MMX_ASM\r
- movd 4(%esp), %mm0\r
- punpcklwd %mm0, %mm0\r
- jmp _v_clear_common_mmx\r
-#endif\r
-\r
-/* Desc: void v_clear32_mmx (int color);\r
- *\r
- * In : color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_clear32_mmx\r
-_v_clear32_mmx:\r
-#ifdef USE_MMX_ASM\r
- movd 4(%esp), %mm0\r
- .balign 4\r
-_v_clear_common_mmx:\r
- punpckldq %mm0, %mm0\r
- movl _vl_current_bytes, %ecx\r
- movl _vl_current_draw_buffer, %edx\r
- shrl $3, %ecx\r
- .balign 4\r
- 0:\r
- movq %mm0, (%edx)\r
- addl $8, %edx\r
- decl %ecx\r
- jnz 0b\r
- emms\r
-#endif\r
- ret\r
-\r
-/* Desc: void v_clear24 (int color);\r
- *\r
- * In : color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_clear24\r
-_v_clear24:\r
- movl $0xaaaaaaab, %eax\r
- mull _vl_current_bytes\r
- movl 4(%esp), %eax\r
- movl %edx, %ecx\r
- pushl %ebx\r
- movl _vl_current_draw_buffer, %edx\r
- shrl %ecx\r
- movb 10(%esp), %bl\r
- .balign 4\r
- 0:\r
- movw %ax, (%edx)\r
- movb %bl, 2(%edx)\r
- addl $3, %edx\r
- decl %ecx\r
- jnz 0b\r
- popl %ebx\r
- ret\r
-\r
-/* Desc: void v_clear24_mmx (int color);\r
- *\r
- * In : color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_clear24_mmx\r
-_v_clear24_mmx:\r
-#ifdef USE_MMX_ASM\r
- movl 4(%esp), %eax\r
- movl %eax, %edx\r
- movl %eax, %ecx\r
- shll $16, %edx\r
- rorl $8, %ecx\r
- movw %cx, %dx\r
- rorl $16, %ecx\r
- movb %dh, %cl\r
- shll $8, %eax\r
- movb %ch, %al\r
- rorl $8, %eax\r
-\r
- pushl %edx\r
- pushl %eax\r
- movq (%esp), %mm0\r
- pushl %ecx\r
- movq (%esp), %mm1\r
- pushl %edx\r
- movq (%esp), %mm2\r
-\r
- movl $0xaaaaaaab, %eax\r
- mull _vl_current_bytes\r
- movl %edx, %ecx\r
- movl _vl_current_draw_buffer, %edx\r
- shrl $4, %ecx\r
- .balign 4\r
- 0:\r
- movq %mm0, (%edx)\r
- movq %mm1, 8(%edx)\r
- movq %mm2, 16(%edx)\r
- addl $24, %edx\r
- decl %ecx\r
- jnz 0b\r
- emms\r
- addl $16, %esp\r
-#endif\r
- ret\r
-\r
-/* Desc: void v_rect8 (int color);\r
- *\r
- * In : color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_rect8\r
-_v_rect8:\r
- cld\r
- pushl %esi\r
- pushl %edi\r
- movl 28(%esp), %eax\r
- movl _vl_current_width, %esi\r
- movl 16(%esp), %edi\r
- movb %al, %ah\r
- movl 20(%esp), %ecx\r
- imull %esi, %edi\r
- movl 24(%esp), %edx\r
- subl %ecx, %esi\r
- addl 12(%esp), %edi\r
- pushw %ax\r
- pushw %ax\r
- pushl %ds\r
- popl %es\r
- addl _vl_current_draw_buffer, %edi\r
- popl %eax\r
- pushl %ebx\r
- movl %ecx, %ebx\r
- andl $3, %ebx\r
- .balign 4\r
- 0:\r
- pushl %ecx\r
- .balign 4\r
- 1:\r
- shrl $2, %ecx\r
- rep; stosl\r
- testl %ebx, %ebx\r
- jz 2f\r
- movl %ebx, %ecx\r
- rep; stosb\r
- .balign 4\r
- 2:\r
- popl %ecx\r
- addl %esi, %edi\r
- decl %edx\r
- jnz 0b\r
- popl %ebx\r
- popl %edi\r
- popl %esi\r
- ret\r
-\r
-/* Desc: void v_rect16 (int color);\r
- *\r
- * In : color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_rect16\r
-_v_rect16:\r
- cld\r
- pushl %esi\r
- pushl %edi\r
- movl 28(%esp), %eax\r
- movl _vl_current_width, %esi\r
- movl 16(%esp), %edi\r
- movl 20(%esp), %ecx\r
- imull %esi, %edi\r
- movl 24(%esp), %edx\r
- subl %ecx, %esi\r
- addl 12(%esp), %edi\r
- pushw %ax\r
- shll %esi\r
- pushw %ax\r
- shll %edi\r
- pushl %ds\r
- popl %es\r
- addl _vl_current_draw_buffer, %edi\r
- popl %eax\r
- .balign 4\r
- 0:\r
- pushl %ecx\r
- .balign 4\r
- 1:\r
- shrl %ecx\r
- rep; stosl\r
- jnc 2f\r
- stosw\r
- .balign 4\r
- 2:\r
- popl %ecx\r
- addl %esi, %edi\r
- decl %edx\r
- jnz 0b\r
- popl %edi\r
- popl %esi\r
- ret\r
-\r
-/* Desc: void v_rect24 (int color);\r
- *\r
- * In : color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_rect24\r
-_v_rect24:\r
- pushl %esi\r
- pushl %edi\r
- movl 28(%esp), %eax\r
- movl _vl_current_width, %esi\r
- movl 16(%esp), %edi\r
- movl 20(%esp), %ecx\r
- imull %esi, %edi\r
- movl 24(%esp), %edx\r
- subl %ecx, %esi\r
- addl 12(%esp), %edi\r
- leal (%esi, %esi, 2), %esi\r
- pushl %ebx\r
- leal (%edi, %edi, 2), %edi\r
- movl %eax, %ebx\r
- addl _vl_current_draw_buffer, %edi\r
- shrl $16, %ebx\r
- .balign 4\r
- 0:\r
- pushl %ecx\r
- .balign 4\r
- 1:\r
- movw %ax, (%edi)\r
- movb %bl, 2(%edi)\r
- addl $3, %edi\r
- decl %ecx\r
- jnz 1b\r
- popl %ecx\r
- addl %esi, %edi\r
- decl %edx\r
- jnz 0b\r
- popl %ebx\r
- popl %edi\r
- popl %esi\r
- ret\r
-\r
-/* Desc: void v_rect32 (int color);\r
- *\r
- * In : color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_rect32\r
-_v_rect32:\r
- pushl %esi\r
- pushl %edi\r
- movl _vl_current_width, %esi\r
- movl 16(%esp), %edi\r
- movl 20(%esp), %ecx\r
- imull %esi, %edi\r
- movl 24(%esp), %edx\r
- subl %ecx, %esi\r
- addl 12(%esp), %edi\r
- shll $2, %esi\r
- shll $2, %edi\r
- movl 28(%esp), %eax\r
- addl _vl_current_draw_buffer, %edi\r
- .balign 4\r
- 0:\r
- pushl %ecx\r
- .balign 4\r
- 1:\r
- movl %eax, (%edi)\r
- addl $4, %edi\r
- decl %ecx\r
- jnz 1b\r
- popl %ecx\r
- addl %esi, %edi\r
- decl %edx\r
- jnz 0b\r
- popl %edi\r
- popl %esi\r
- ret\r
-\r
-/* Desc: void v_putpixel8 (unsigned int offset, int color);\r
- *\r
- * In : offset within buffer, color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_putpixel8\r
-_v_putpixel8:\r
- movl 8(%esp), %ecx\r
- movl 4(%esp), %edx\r
- movl _vl_current_draw_buffer, %eax\r
- movb %cl, (%eax,%edx)\r
- ret\r
-\r
-/* Desc: void v_putpixel16 (unsigned int offset, int color);\r
- *\r
- * In : offset within buffer, color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_putpixel16\r
-_v_putpixel16:\r
- movl 8(%esp), %ecx\r
- movl 4(%esp), %edx\r
- movl _vl_current_draw_buffer, %eax\r
- movw %cx, (%eax,%edx,2)\r
- ret\r
-\r
-/* Desc: void v_putpixel24 (unsigned int offset, int color);\r
- *\r
- * In : offset within buffer, color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_putpixel24\r
-_v_putpixel24:\r
- movl 4(%esp), %eax\r
- movl 8(%esp), %edx\r
- movl _vl_current_draw_buffer, %ecx\r
- leal (%eax,%eax,2), %eax\r
- movw %dx, (%ecx,%eax)\r
- shrl $16, %edx\r
- movb %dl, 2(%ecx,%eax)\r
- ret\r
-\r
-/* Desc: void v_putpixel32 (unsigned int offset, int color);\r
- *\r
- * In : offset within buffer, color\r
- * Out : -\r
- *\r
- * Note: uses current draw buffer\r
- */\r
- .p2align 5,,31\r
- .global _v_putpixel32\r
-_v_putpixel32:\r
- movl 8(%esp), %ecx\r
- movl 4(%esp), %edx\r
- movl _vl_current_draw_buffer, %eax\r
- movl %ecx, (%eax,%edx,4)\r
- ret\r
+/*
+ * Mesa 3-D graphics library
+ * Version: 4.0
+ *
+ * Copyright (C) 1999 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * DOS/DJGPP device driver v1.3 for Mesa
+ *
+ * Copyright (C) 2002 - Borca Daniel
+ * Email : dborca@yahoo.com
+ * Web : http://www.geocities.com/dborca
+ */
+
+
+ .file "virtual.S"
+
+/*
+ * extern void *vl_current_draw_buffer;
+ * extern int vl_current_width, vl_current_bytes;
+ */
+
+ .text
+
+/* Desc: void v_clear8 (int color);
+ *
+ * In : color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_clear8
+_v_clear8:
+ movl 4(%esp), %eax
+ movb %al, %ah
+ pushw %ax
+ pushw %ax
+ popl %eax
+ jmp _v_clear_common
+
+/* Desc: void v_clear16 (int color);
+ *
+ * In : color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_clear16
+_v_clear16:
+ movl 4(%esp), %eax
+ pushw %ax
+ pushw %ax
+ popl %eax
+ jmp _v_clear_common
+
+/* Desc: void v_clear32 (int color);
+ *
+ * In : color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_clear32
+_v_clear32:
+ movl 4(%esp), %eax
+ .balign 4
+_v_clear_common:
+ movl _vl_current_bytes, %ecx
+ movl _vl_current_draw_buffer, %edx
+ shrl $2, %ecx
+ .balign 4
+ 0:
+ movl %eax, (%edx)
+ addl $4, %edx
+ decl %ecx
+ jnz 0b
+ ret
+
+/* Desc: void v_clear8_mmx (int color);
+ *
+ * In : color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_clear8_mmx
+_v_clear8_mmx:
+#ifdef USE_MMX_ASM
+ movd 4(%esp), %mm0
+ punpcklbw %mm0, %mm0
+ punpcklwd %mm0, %mm0
+ jmp _v_clear_common_mmx
+#endif
+
+/* Desc: void v_clear16_mmx (int color);
+ *
+ * In : color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_clear16_mmx
+_v_clear16_mmx:
+#ifdef USE_MMX_ASM
+ movd 4(%esp), %mm0
+ punpcklwd %mm0, %mm0
+ jmp _v_clear_common_mmx
+#endif
+
+/* Desc: void v_clear32_mmx (int color);
+ *
+ * In : color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_clear32_mmx
+_v_clear32_mmx:
+#ifdef USE_MMX_ASM
+ movd 4(%esp), %mm0
+ .balign 4
+_v_clear_common_mmx:
+ punpckldq %mm0, %mm0
+ movl _vl_current_bytes, %ecx
+ movl _vl_current_draw_buffer, %edx
+ shrl $3, %ecx
+ .balign 4
+ 0:
+ movq %mm0, (%edx)
+ addl $8, %edx
+ decl %ecx
+ jnz 0b
+ emms
+#endif
+ ret
+
+/* Desc: void v_clear24 (int color);
+ *
+ * In : color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_clear24
+_v_clear24:
+ movl $0xaaaaaaab, %eax
+ mull _vl_current_bytes
+ movl 4(%esp), %eax
+ movl %edx, %ecx
+ pushl %ebx
+ movl _vl_current_draw_buffer, %edx
+ shrl %ecx
+ movb 10(%esp), %bl
+ .balign 4
+ 0:
+ movw %ax, (%edx)
+ movb %bl, 2(%edx)
+ addl $3, %edx
+ decl %ecx
+ jnz 0b
+ popl %ebx
+ ret
+
+/* Desc: void v_clear24_mmx (int color);
+ *
+ * In : color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_clear24_mmx
+_v_clear24_mmx:
+#ifdef USE_MMX_ASM
+ movl 4(%esp), %eax
+ movl %eax, %edx
+ movl %eax, %ecx
+ shll $16, %edx
+ rorl $8, %ecx
+ movw %cx, %dx
+ rorl $16, %ecx
+ movb %dh, %cl
+ shll $8, %eax
+ movb %ch, %al
+ rorl $8, %eax
+
+ pushl %edx
+ pushl %eax
+ movq (%esp), %mm0
+ pushl %ecx
+ movq (%esp), %mm1
+ pushl %edx
+ movq (%esp), %mm2
+
+ movl $0xaaaaaaab, %eax
+ mull _vl_current_bytes
+ movl %edx, %ecx
+ movl _vl_current_draw_buffer, %edx
+ shrl $4, %ecx
+ .balign 4
+ 0:
+ movq %mm0, (%edx)
+ movq %mm1, 8(%edx)
+ movq %mm2, 16(%edx)
+ addl $24, %edx
+ decl %ecx
+ jnz 0b
+ emms
+ addl $16, %esp
+#endif
+ ret
+
+/* Desc: void v_rect8 (int color);
+ *
+ * In : color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_rect8
+_v_rect8:
+ cld
+ pushl %esi
+ pushl %edi
+ movl 28(%esp), %eax
+ movl _vl_current_width, %esi
+ movl 16(%esp), %edi
+ movb %al, %ah
+ movl 20(%esp), %ecx
+ imull %esi, %edi
+ movl 24(%esp), %edx
+ subl %ecx, %esi
+ addl 12(%esp), %edi
+ pushw %ax
+ pushw %ax
+ pushl %ds
+ popl %es
+ addl _vl_current_draw_buffer, %edi
+ popl %eax
+ pushl %ebx
+ movl %ecx, %ebx
+ andl $3, %ebx
+ .balign 4
+ 0:
+ pushl %ecx
+ .balign 4
+ 1:
+ shrl $2, %ecx
+ rep; stosl
+ testl %ebx, %ebx
+ jz 2f
+ movl %ebx, %ecx
+ rep; stosb
+ .balign 4
+ 2:
+ popl %ecx
+ addl %esi, %edi
+ decl %edx
+ jnz 0b
+ popl %ebx
+ popl %edi
+ popl %esi
+ ret
+
+/* Desc: void v_rect16 (int color);
+ *
+ * In : color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_rect16
+_v_rect16:
+ cld
+ pushl %esi
+ pushl %edi
+ movl 28(%esp), %eax
+ movl _vl_current_width, %esi
+ movl 16(%esp), %edi
+ movl 20(%esp), %ecx
+ imull %esi, %edi
+ movl 24(%esp), %edx
+ subl %ecx, %esi
+ addl 12(%esp), %edi
+ pushw %ax
+ shll %esi
+ pushw %ax
+ shll %edi
+ pushl %ds
+ popl %es
+ addl _vl_current_draw_buffer, %edi
+ popl %eax
+ .balign 4
+ 0:
+ pushl %ecx
+ .balign 4
+ 1:
+ shrl %ecx
+ rep; stosl
+ jnc 2f
+ stosw
+ .balign 4
+ 2:
+ popl %ecx
+ addl %esi, %edi
+ decl %edx
+ jnz 0b
+ popl %edi
+ popl %esi
+ ret
+
+/* Desc: void v_rect24 (int color);
+ *
+ * In : color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_rect24
+_v_rect24:
+ pushl %esi
+ pushl %edi
+ movl 28(%esp), %eax
+ movl _vl_current_width, %esi
+ movl 16(%esp), %edi
+ movl 20(%esp), %ecx
+ imull %esi, %edi
+ movl 24(%esp), %edx
+ subl %ecx, %esi
+ addl 12(%esp), %edi
+ leal (%esi, %esi, 2), %esi
+ pushl %ebx
+ leal (%edi, %edi, 2), %edi
+ movl %eax, %ebx
+ addl _vl_current_draw_buffer, %edi
+ shrl $16, %ebx
+ .balign 4
+ 0:
+ pushl %ecx
+ .balign 4
+ 1:
+ movw %ax, (%edi)
+ movb %bl, 2(%edi)
+ addl $3, %edi
+ decl %ecx
+ jnz 1b
+ popl %ecx
+ addl %esi, %edi
+ decl %edx
+ jnz 0b
+ popl %ebx
+ popl %edi
+ popl %esi
+ ret
+
+/* Desc: void v_rect32 (int color);
+ *
+ * In : color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_rect32
+_v_rect32:
+ pushl %esi
+ pushl %edi
+ movl _vl_current_width, %esi
+ movl 16(%esp), %edi
+ movl 20(%esp), %ecx
+ imull %esi, %edi
+ movl 24(%esp), %edx
+ subl %ecx, %esi
+ addl 12(%esp), %edi
+ shll $2, %esi
+ shll $2, %edi
+ movl 28(%esp), %eax
+ addl _vl_current_draw_buffer, %edi
+ .balign 4
+ 0:
+ pushl %ecx
+ .balign 4
+ 1:
+ movl %eax, (%edi)
+ addl $4, %edi
+ decl %ecx
+ jnz 1b
+ popl %ecx
+ addl %esi, %edi
+ decl %edx
+ jnz 0b
+ popl %edi
+ popl %esi
+ ret
+
+/* Desc: void v_putpixel8 (unsigned int offset, int color);
+ *
+ * In : offset within buffer, color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_putpixel8
+_v_putpixel8:
+ movl 8(%esp), %ecx
+ movl 4(%esp), %edx
+ movl _vl_current_draw_buffer, %eax
+ movb %cl, (%eax,%edx)
+ ret
+
+/* Desc: void v_putpixel16 (unsigned int offset, int color);
+ *
+ * In : offset within buffer, color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_putpixel16
+_v_putpixel16:
+ movl 8(%esp), %ecx
+ movl 4(%esp), %edx
+ movl _vl_current_draw_buffer, %eax
+ movw %cx, (%eax,%edx,2)
+ ret
+
+/* Desc: void v_putpixel24 (unsigned int offset, int color);
+ *
+ * In : offset within buffer, color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_putpixel24
+_v_putpixel24:
+ movl 4(%esp), %eax
+ movl 8(%esp), %edx
+ movl _vl_current_draw_buffer, %ecx
+ leal (%eax,%eax,2), %eax
+ movw %dx, (%ecx,%eax)
+ shrl $16, %edx
+ movb %dl, 2(%ecx,%eax)
+ ret
+
+/* Desc: void v_putpixel32 (unsigned int offset, int color);
+ *
+ * In : offset within buffer, color
+ * Out : -
+ *
+ * Note: uses current draw buffer
+ */
+ .p2align 5,,31
+ .global _v_putpixel32
+_v_putpixel32:
+ movl 8(%esp), %ecx
+ movl 4(%esp), %edx
+ movl _vl_current_draw_buffer, %eax
+ movl %ecx, (%eax,%edx,4)
+ ret