📄 blit.s
字号:
jnz 0b popl %edi popl %esi popl %ebx popl %ebp ret/* transform B5G6R5 to fake8 */ .p2align 5,,31 .global _vesa_l_dump_16_to_8_vesa_l_dump_16_to_8: pushl %ebp pushl %ebx 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, %ebx .balign 4 0: pushl %ecx pushl %ebx 1: movl (%esi), %eax addl $4, %esi#if 1 movl %eax, %ebx andl $0xFFFF, %eax shrl $16, %ebx movb _tab_16_8(%eax), %al movb _tab_16_8(%ebx), %ah#endif movw %ax, %fs:(%edi) addl $2, %edi subl $2, %ecx jnz 1b popl %ebx popl %ecx addl %ebx, %edi decl %edx jnz 0b popl %edi popl %esi popl %ebx popl %ebp ret .p2align 5,,31 .global _vesa_b_dump_32_to_24_vesa_b_dump_32_to_24: pushl %ebx pushl %esi pushl %edi pushl %ebp movl _vl_video_selector, %fs 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 $0x00FFFFFF, %ebx .balign 4 0: pushl %eax pushl %ecx .balign 4 1: cmpl %ebp, %edi jb 2f pushl %ebx incl %edx xorl %ebx, %ebx call *_vesa_swbank popl %ebx subl %ebp, %edi .balign 4 2: movb (%esi), %al /* XXX too many accesses */ incl %esi rorl $8, %ebx jnc 2b movb %al, %fs:(%edi) incl %edi decl %ecx jnz 1b popl %ecx popl %eax addl _vl_current_delta, %edi decl %eax jnz 0b popl %ebp popl %edi popl %esi popl %ebx ret .p2align 5,,31 .global _vesa_b_dump_32_to_16_vesa_b_dump_32_to_16: pushl %ebx pushl %esi pushl %edi pushl %ebp movl _vl_video_selector, %fs 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 .balign 4 0: pushl %eax pushl %ecx .balign 4 1: cmpl %ebp, %edi jb 2f incl %edx xorl %ebx, %ebx call *_vesa_swbank subl %ebp, %edi .balign 4 2: movl (%esi), %eax addl $4, %esi CVT_32_TO_16(a, ebx) movw %ax, %fs:(%edi) addl $2, %edi subl $2, %ecx jnz 1b popl %ecx popl %eax addl _vl_current_delta, %edi decl %eax jnz 0b popl %ebp popl %edi popl %esi popl %ebx ret .p2align 5,,31 .global _vesa_b_dump_32_to_15_vesa_b_dump_32_to_15: pushl %ebx pushl %esi pushl %edi pushl %ebp movl _vl_video_selector, %fs 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 .balign 4 0: pushl %eax pushl %ecx .balign 4 1: cmpl %ebp, %edi jb 2f incl %edx xorl %ebx, %ebx call *_vesa_swbank subl %ebp, %edi .balign 4 2: movl (%esi), %eax addl $4, %esi CVT_32_TO_15(a, ebx) movw %ax, %fs:(%edi) addl $2, %edi subl $2, %ecx jnz 1b popl %ecx popl %eax addl _vl_current_delta, %edi decl %eax jnz 0b popl %ebp popl %edi popl %esi popl %ebx ret .p2align 5,,31 .global _vesa_b_dump_32_to_8_vesa_b_dump_32_to_8: pushl %ebx pushl %esi pushl %edi pushl %ebp movl _vl_video_selector, %fs 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 .balign 4 0: pushl %eax pushl %ecx pushl %edx .balign 4 1: cmpl %ebp, %edi jb 2f popl %edx incl %edx pushl %edx xorl %ebx, %ebx call *_vesa_swbank subl %ebp, %edi .balign 4 2: movl (%esi), %eax addl $4, %esi#if 1 xorl %ebx, %ebx movl %eax, %edx movb %ah, %bl shrl $16, %edx andl $0xFF, %edx andl $0xFF, %eax movb _array_b(%eax), %al movb _array_r(%edx), %dl movb _array_g(%ebx), %bl imull $36, %eax imull $6, %ebx addl %edx, %eax addl %ebx, %eax#endif movb %al, %fs:(%edi) incl %edi decl %ecx jnz 1b popl %edx popl %ecx popl %eax addl _vl_current_delta, %edi decl %eax jnz 0b popl %ebp popl %edi popl %esi popl %ebx ret .p2align 5,,31 .global _vesa_b_dump_24_to_32_vesa_b_dump_24_to_32: pushl %ebx pushl %esi pushl %edi pushl %ebp movl _vl_video_selector, %fs 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 .balign 4 0: pushl %eax pushl %ecx .balign 4 1: cmpl %ebp, %edi jb 2f pushl %ebx incl %edx xorl %ebx, %ebx call *_vesa_swbank popl %ebx subl %ebp, %edi .balign 4 2: movl (%esi), %eax addl $3, %esi movl %eax, %fs:(%edi) addl $4, %edi subl $4, %ecx jnz 1b popl %ecx popl %eax addl %ebx, %edi decl %eax jnz 0b popl %ebp popl %edi popl %esi popl %ebx ret .p2align 5,,31 .global _vesa_b_dump_24_to_8_vesa_b_dump_24_to_8: pushl %ebx pushl %esi pushl %edi pushl %ebp movl _vl_video_selector, %fs 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 .balign 4 0: pushl %eax pushl %ecx pushl %edx .balign 4 1: cmpl %ebp, %edi jb 2f popl %edx incl %edx pushl %edx xorl %ebx, %ebx call *_vesa_swbank subl %ebp, %edi .balign 4 2: movl (%esi), %eax addl $3, %esi#if 1 xorl %ebx, %ebx movl %eax, %edx movb %ah, %bl shrl $16, %edx andl $0xFF, %edx andl $0xFF, %eax movb _array_b(%eax), %al movb _array_r(%edx), %dl movb _array_g(%ebx), %bl imull $36, %eax imull $6, %ebx addl %edx, %eax addl %ebx, %eax#endif movb %al, %fs:(%edi) incl %edi decl %ecx jnz 1b popl %edx popl %ecx popl %eax addl _vl_current_delta, %edi decl %eax jnz 0b popl %ebp popl %edi popl %esi popl %ebx ret .p2align 5,,31 .global _vesa_b_dump_16_to_15_vesa_b_dump_16_to_15: pushl %ebx pushl %esi pushl %edi pushl %ebp movl _vl_video_selector, %fs 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 .balign 4 0: pushl %eax pushl %ecx .balign 4 1: cmpl %ebp, %edi jb 2f incl %edx xorl %ebx, %ebx call *_vesa_swbank subl %ebp, %edi .balign 4 2: movw (%esi), %ax addl $2, %esi CVT_16_TO_15(eax, ebx) movw %ax, %fs:(%edi) addl $2, %edi subl $2, %ecx jnz 1b popl %ecx popl %eax addl _vl_current_delta, %edi decl %eax jnz 0b popl %ebp popl %edi popl %esi popl %ebx ret .p2align 5,,31 .global _vesa_b_dump_16_to_8_vesa_b_dump_16_to_8: pushl %ebx pushl %esi pushl %edi pushl %ebp movl _vl_video_selector, %fs 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 .balign 4 0: pushl %eax pushl %ecx .balign 4 1: cmpl %ebp, %edi jb 2f pushl %ebx incl %edx xorl %ebx, %ebx call *_vesa_swbank popl %ebx subl %ebp, %edi .balign 4 2: movw (%esi), %ax addl $2, %esi#if 1 andl $0xFFFF, %eax movb _tab_16_8(%eax), %al#endif movb %al, %fs:(%edi) addl $1, %edi subl $1, %ecx jnz 1b popl %ecx popl %eax addl %ebx, %edi decl %eax jnz 0b popl %ebp popl %edi popl %esi popl %ebx ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -