.global _DBFillScreen _DBFillScreen: push %edi mov $64000, %ecx mov 8(%esp), %eax mov _DblBuffer, %edi cld rep stosl pop %edi ret .global _DBPSet _DBPSet: mov 4(%esp), %ecx mov 8(%esp), %edx mov %edx, %eax shl $8, %edx shl $10, %eax add %edx, %eax lea _DblBuffer(%eax, %ecx, 4), %eax mov 12(%esp), %edx mov %edx, (%eax) ret .global _DBPSetCAsm _DBPSetCAsm: push %ebp mov %esp, %ebp mov 8(%ebp), %ecx mov 12(%ebp), %edx cmp (_clip_x1), %ecx jl _DBPSetCAsmEnd cmp (_clip_x2), %ecx jg _DBPSetCAsmEnd cmp (_clip_y1), %edx jl _DBPSetCAsmEnd cmp (_clip_y2), %edx jg _DBPSetCAsmEnd mov %edx, %eax shl $8, %edx shl $10, %eax add %edx, %eax lea _DblBuffer(%eax, %ecx, 4), %eax mov 16(%ebp), %edx mov %edx, (%eax) _DBPSetCAsmEnd: pop %ebp ret .global _DBCopyBufferAsm _DBCopyBufferAsm: push %ebp mov %esp, %ebp mov 12(%ebp), %eax mov $320, %ebx mul %ebx add 8(%ebp), %eax shl $2, %eax add _DblBuffer, %eax mov %eax, %edi mov 16(%ebp), %esi mov 20(%ebp), %eax mov $320, %ecx sub %eax, %ecx inc %eax shl $2, %ecx mov 28(%ebp), %ebx _DBCopyBufferLoop: dec %eax jz _DBCopyBufferRowEnd mov (%esi), %edx cmp %edx, %ebx jz _DBCopyBufferAddOffsets mov %edx, (%edi) _DBCopyBufferAddOffsets: add $4, %esi add $4, %edi jmp _DBCopyBufferLoop _DBCopyBufferRowEnd: decw 24(%ebp) jz _DBCopyBufferEnd mov 20(%ebp), %eax inc %eax add %ecx, %edi jmp _DBCopyBufferLoop _DBCopyBufferEnd: pop %ebp ret .global _DisplayDBAsm _DisplayDBAsm: push %ecx push %esi push %edi mov $64000, %ecx mov _DblBuffer, %esi mov _VBuffer, %edi cld rep movsl pop %edi pop %esi pop %ecx /*dec %ecx _DisplayDBAsmLoop: mov (%esi,%ecx,4), %eax mov %eax, (%edi,%ecx,4) dec %ecx jnz _DisplayDBAsmLoop*/ ret .global _MakeFarCall _MakeFarCall: movl 12(%esp), %ebx movw 4(%ebx), %fs movl (%ebx), %esi movl %fs:(%esi), %eax .byte 38 /*CALL FAR HWORD PTR ES:[EBX]*/ .byte 255 .byte 27 ret .global _ColorAdd _ColorAdd: push %esi movd 12(%esp), %mm0 movl 8(%esp), %esi movd (%esi), %mm1 paddusb %mm1, %mm0 movd %mm0, (%esi) pop %esi emms ret .global _ColorSub _ColorSub: push %esi movd 12(%esp), %mm0 movl 8(%esp), %esi movd (%esi), %mm1 psubusb %mm0, %mm1 movd %mm1, (%esi) pop %esi emms ret .global _DBCopyBufferTransAsm _DBCopyBufferTrans: push %ebp movl %esp, %ebp push %edi push %esi push %ecx movl 12(%ebp), %edi movl %edi, %eax shll $10, %eax shll $8, %edi addl %eax, %edi movl 8(%ebp), %eax addl (_DblBuffer), %edi leal (%edi, %eax, 4), %edi movl 16(%ebp), %esi movl $1280, %eax movl 20(%ebp), %ebx shll $2, %ebx subl %ebx, %eax push %eax movl 32(%ebp), %eax movl _TransOps(, %eax, 4), %eax push %eax DBCopyBufferTransYLoop: movl 20(%ebp), %ecx DBCopyBufferTransXLoop: movl (%esi), %eax cmpl 28(%ebp), %eax je DBCopyBufferTransAddOffsets push %ecx push %edx push %eax push %edi call *-20(%ebp) add $8, %esp pop %edx pop %ecx DBCopyBufferTransAddOffsets: add $4, %edi add $4, %esi loop DBCopyBufferTransXLoop addl -16(%ebp), %edi decl 24(%ebp) jnz DBCopyBufferTransYLoop add $8, %esp pop %ecx pop %esi pop %edi pop %ebp ret