/* * 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 "blit.S" /* * extern unsigned int vesa_gran_mask, vesa_gran_shift; * extern int vl_video_selector; * extern void *vl_current_draw_buffer; * extern int vl_current_stride, vl_current_height; * extern int vl_current_offset, vl_current_delta; */ .text /* Desc: VESA bank switching routine (BIOS) * * In : EBX=0, EDX = bank number * Out : - * * Note: thrashes EAX */ .p2align 5,,31 _vesa_swbankBIOS: movw $0x4f05, %ax int $0x10 ret .p2align 2,,3 .global _vesa_swbank _vesa_swbank: .long _vesa_swbankBIOS /* Desc: void vesa_b_dump_virtual (void); * * In : - * Out : - * * Note: uses current draw buffer */ .p2align 5,,31 .global _vesa_b_dump_virtual _vesa_b_dump_virtual: cld pushl %es pushl %ebx pushl %esi pushl %edi pushl %ebp movl _vl_video_selector, %es movl _vl_current_draw_buffer, %esi movl _vl_current_offset, %edi movl _vesa_gran_shift, %ecx movl _vesa_gran_mask, %ebp movl %edi, %edx xorl %ebx, %ebx andl %ebp, %edi shrl %cl, %edx incl %ebp call *_vesa_swbank movl _vl_current_stride, %ecx movl _vl_current_height, %eax movl _vl_current_delta, %ebx shrl $2, %ecx .balign 4 0: pushl %ecx .balign 4 1: cmpl %ebp, %edi jb 2f pushl %eax pushl %ebx incl %edx xorl %ebx, %ebx call *_vesa_swbank popl %ebx popl %eax subl %ebp, %edi .balign 4 2: movsl decl %ecx jnz 1b popl %ecx addl %ebx, %edi decl %eax jnz 0b popl %ebp popl %edi popl %esi popl %ebx popl %es ret /* Desc: void vesa_l_dump_virtual (void); * * In : - * Out : - * * Note: uses current draw buffer */ .p2align 5,,31 .global _vesa_l_dump_virtual _vesa_l_dump_virtual: cld pushl %es pushl %esi pushl %edi movl _vl_video_selector, %es movl _vl_current_draw_buffer, %esi movl _vl_current_offset, %edi movl _vl_current_stride, %ecx movl _vl_current_height, %edx movl _vl_current_delta, %eax shrl $2, %ecx .balign 4 0: pushl %ecx rep; movsl popl %ecx addl %eax, %edi decl %edx jnz 0b popl %edi popl %esi popl %es ret /* Desc: void vesa_l_dump_virtual_mmx (void); * * In : - * Out : - * * Note: uses current draw buffer */ .p2align 5,,31 .global _vesa_l_dump_virtual_mmx _vesa_l_dump_virtual_mmx: #ifdef USE_MMX_ASM pushl %esi pushl %edi movl _vl_video_selector, %fs movl _vl_current_draw_buffer, %esi movl _vl_current_offset, %edi movl _vl_current_stride, %ecx movl _vl_current_height, %edx movl _vl_current_delta, %eax shrl $3, %ecx .balign 4 0: pushl %ecx .balign 4 1: movq (%esi), %mm0 addl $8, %esi movq %mm0, %fs:(%edi) addl $8, %edi decl %ecx jnz 1b popl %ecx addl %eax, %edi decl %edx jnz 0b popl %edi popl %esi emms #endif ret