📄 spr8x8_8.s
字号:
/******************************************************************************/
/* */
/* RAINE 8x8 TILE DRAWING */
/* */
/******************************************************************************/
/*
Mapped
Transparent Mapped
Direct-Mapped
Transparent Direct-Mapped
*/
#include "asmdefs.inc"
CODE_SEG
FUNC(Draw8x8_Mapped)
movl 12(%esp),%eax // y
movl 4(%esp),%edx // source
shll $2,%eax
addl $8*8,%edx // tile end
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
movl %edx,endc_00-4
movl 20(%esp),%esi // source
movl 32(%esp),%ebp // cmap
movl 0xDEADBEEF(%eax),%edi
blin_00:
addl 24(%esp),%edi // x
jmp 9f
//xorl %eax,%eax // No! It's not the good way to do fast things.
//xorl %ebx,%ebx // I know that it could appears strange, but the
//xorl %ecx,%ecx // best thing to do is to zeroing registers just
//xorl %edx,%edx // 1 cycle before to use them as 8bits registers.
// please believe blindly in karma's knowledge :-)
.align 8
9:
xorl %eax,%eax
xorl %ebx,%ebx
movb (%esi),%al
movb 4(%esi),%bl
xorl %ecx,%ecx
xorl %edx,%edx
movb 1(%esi),%cl
movb 5(%esi),%dl
movb (%ebp,%eax),%al
movb (%ebp,%ebx),%bl
movb %al,(%edi)
movb %bl,4(%edi)
movb (%ebp,%ecx),%cl
movb (%ebp,%edx),%dl
movb %cl,1(%edi)
movb %dl,5(%edi)
xorl %eax,%eax
xorl %ebx,%ebx
movb 2(%esi),%al
movb 6(%esi),%bl
xorl %ecx,%ecx
xorl %edx,%edx
movb 3(%esi),%cl
movb 7(%esi),%dl
movb (%ebp,%eax),%al
movb (%ebp,%ebx),%bl
movb %al,2(%edi)
movb %bl,6(%edi)
movb (%ebp,%ecx),%cl
movb (%ebp,%edx),%dl
movb %cl,3(%edi)
movb %dl,7(%edi)
addl $8,%esi // Next Tile Line
addl $0xDEADBEEF,%edi // Next Screen Line
bitw_00:
cmp $0xDEADBEEF,%esi
endc_00:
jne 9b
popl %ebx
popl %esi
popl %edi
popl %ebp
ret // Arg ! I have nothing rest to pair with the ret
// instruction : Here is a waste of 1/2 cycle ... :-)
FUNC(Draw8x8_Mapped_FlipY)
movl 12(%esp),%eax // y
movl 4(%esp),%edx // source
shll $2,%eax
addl $8*8,%edx // tile end
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
movl %edx,endc_01-4
movl 20(%esp),%esi // source
movl 32(%esp),%ebp // cmap
movl 0xDEADBEEF(%eax),%edi
blin_01:
addl 24(%esp),%edi // x
jmp 9f
//xorl %eax,%eax // No! It's not the good way to do fast things.
//xorl %ebx,%ebx // I know that it could appears strange, but the
//xorl %ecx,%ecx // best thing to do is to zeroing registers just
//xorl %edx,%edx // 1 cycle before to use them as 8bits registers.
// please believe blindly in karma's knowledge :-)
.align 8
9:
xorl %eax,%eax
xorl %ebx,%ebx
movb (%esi),%al
movb 4(%esi),%bl
xorl %ecx,%ecx
xorl %edx,%edx
movb 1(%esi),%cl
movb 5(%esi),%dl
movb (%ebp,%eax),%al
movb (%ebp,%ebx),%bl
movb %al,7-0(%edi)
movb %bl,7-4(%edi)
movb (%ebp,%ecx),%cl
movb (%ebp,%edx),%dl
movb %cl,7-1(%edi)
movb %dl,7-5(%edi)
xorl %eax,%eax
xorl %ebx,%ebx
movb 2(%esi),%al
movb 6(%esi),%bl
xorl %ecx,%ecx
xorl %edx,%edx
movb 3(%esi),%cl
movb 7(%esi),%dl
movb (%ebp,%eax),%al
movb (%ebp,%ebx),%bl
movb %al,7-2(%edi)
movb %bl,7-6(%edi)
movb (%ebp,%ecx),%cl
movb (%ebp,%edx),%dl
movb %cl,7-3(%edi)
movb %dl,7-7(%edi)
addl $8,%esi // Next Tile Line
addl $0xDEADBEEF,%edi // Next Screen Line
bitw_01:
cmp $0xDEADBEEF,%esi
endc_01:
jne 9b
popl %ebx
popl %esi
popl %edi
popl %ebp
ret // Arg ! I have nothing rest to pair with the ret
// instruction : Here is a waste of 1/2 cycle ... :-)
FUNC(Draw8x8_Mapped_FlipX)
movl 12(%esp),%eax // y
movl 4(%esp),%edx // source
shll $2,%eax
addl $8*8,%edx // tile end
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
movl %edx,endc_02-4
movl 20(%esp),%esi // source
movl 32(%esp),%ebp // cmap
movl 0xDEADBEEF(%eax),%edi
blin_02:
addl 24(%esp),%edi // x
jmp 9f
//xorl %eax,%eax // No! It's not the good way to do fast things.
//xorl %ebx,%ebx // I know that it could appears strange, but the
//xorl %ecx,%ecx // best thing to do is to zeroing registers just
//xorl %edx,%edx // 1 cycle before to use them as 8bits registers.
// please believe blindly in karma's knowledge :-)
.align 8
9:
xorl %eax,%eax
xorl %ebx,%ebx
movb (%esi),%al
movb 4(%esi),%bl
xorl %ecx,%ecx
xorl %edx,%edx
movb 1(%esi),%cl
movb 5(%esi),%dl
movb (%ebp,%eax),%al
movb (%ebp,%ebx),%bl
movb %al,(%edi)
movb %bl,4(%edi)
movb (%ebp,%ecx),%cl
movb (%ebp,%edx),%dl
movb %cl,1(%edi)
movb %dl,5(%edi)
xorl %eax,%eax
xorl %ebx,%ebx
movb 2(%esi),%al
movb 6(%esi),%bl
xorl %ecx,%ecx
xorl %edx,%edx
movb 3(%esi),%cl
movb 7(%esi),%dl
movb (%ebp,%eax),%al
movb (%ebp,%ebx),%bl
movb %al,2(%edi)
movb %bl,6(%edi)
movb (%ebp,%ecx),%cl
movb (%ebp,%edx),%dl
movb %cl,3(%edi)
movb %dl,7(%edi)
addl $8,%esi // Next Tile Line
subl $0xDEADBEEF,%edi // Next Screen Line
bitw_02:
cmp $0xDEADBEEF,%esi
endc_02:
jne 9b
popl %ebx
popl %esi
popl %edi
popl %ebp
ret // Arg ! I have nothing rest to pair with the ret
// instruction : Here is a waste of 1/2 cycle ... :-)
FUNC(Draw8x8_Mapped_FlipXY)
movl 12(%esp),%eax // y
movl 4(%esp),%edx // source
shll $2,%eax
addl $8*8,%edx // tile end
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
movl %edx,endc_03-4
movl 20(%esp),%esi // source
movl 32(%esp),%ebp // cmap
movl 0xDEADBEEF(%eax),%edi
blin_03:
addl 24(%esp),%edi // x
jmp 9f
//xorl %eax,%eax // No! It's not the good way to do fast things.
//xorl %ebx,%ebx // I know that it could appears strange, but the
//xorl %ecx,%ecx // best thing to do is to zeroing registers just
//xorl %edx,%edx // 1 cycle before to use them as 8bits registers.
// please believe blindly in karma's knowledge :-)
.align 8
9:
xorl %eax,%eax
xorl %ebx,%ebx
movb (%esi),%al
movb 4(%esi),%bl
xorl %ecx,%ecx
xorl %edx,%edx
movb 1(%esi),%cl
movb 5(%esi),%dl
movb (%ebp,%eax),%al
movb (%ebp,%ebx),%bl
movb %al,7-0(%edi)
movb %bl,7-4(%edi)
movb (%ebp,%ecx),%cl
movb (%ebp,%edx),%dl
movb %cl,7-1(%edi)
movb %dl,7-5(%edi)
xorl %eax,%eax
xorl %ebx,%ebx
movb 2(%esi),%al
movb 6(%esi),%bl
xorl %ecx,%ecx
xorl %edx,%edx
movb 3(%esi),%cl
movb 7(%esi),%dl
movb (%ebp,%eax),%al
movb (%ebp,%ebx),%bl
movb %al,7-2(%edi)
movb %bl,7-6(%edi)
movb (%ebp,%ecx),%cl
movb (%ebp,%edx),%dl
movb %cl,7-3(%edi)
movb %dl,7-7(%edi)
addl $8,%esi // Next Tile Line
subl $0xDEADBEEF,%edi // Next Screen Line
bitw_03:
cmp $0xDEADBEEF,%esi
endc_03:
jne 9b
popl %ebx
popl %esi
popl %edi
popl %ebp
ret // Arg ! I have nothing rest to pair with the ret
// instruction : Here is a waste of 1/2 cycle ... :-)
FUNC(Draw8x8_Trans_Mapped)
movl 12(%esp),%eax // y
movl 4(%esp),%edx // source
shll $2,%eax
addl $8*8,%edx // tile end
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
movl %edx,endc_04-4
movl 20(%esp),%esi // source
movl 32(%esp),%ebp // cmap
movl 0xDEADBEEF(%eax),%edi
blin_04:
xorl %ecx,%ecx
xorl %edx,%edx
addl 24(%esp),%edi // x
jmp 9f
.align 8
9:
xorl %eax,%eax
xorl %ebx,%ebx
movb (%esi),%al
movb 4(%esi),%bl
movb 1(%esi),%cl
movb 5(%esi),%dl
testb %al,%al
jz 7f
movb (%ebp,%eax),%al
movb %al,(%edi)
7: testb %bl,%bl
jz 7f
movb (%ebp,%ebx),%bl
movb %bl,4(%edi)
7: testb %cl,%cl
jz 7f
movb (%ebp,%ecx),%cl
movb %cl,1(%edi)
7: testb %dl,%dl
jz 7f
movb (%ebp,%edx),%dl
movb %dl,5(%edi)
7: xorl %eax,%eax
xorl %ebx,%ebx
movb 2(%esi),%al
movb 6(%esi),%bl
movb 3(%esi),%cl
movb 7(%esi),%dl
testb %al,%al
jz 7f
movb (%ebp,%eax),%al
movb %al,2(%edi)
7: testb %bl,%bl
jz 7f
movb (%ebp,%ebx),%bl
movb %bl,6(%edi)
7: testb %cl,%cl
jz 7f
movb (%ebp,%ecx),%cl
movb %cl,3(%edi)
7: testb %dl,%dl
jz 7f
movb (%ebp,%edx),%dl
movb %dl,7(%edi)
7: addl $8,%esi // Next Tile Line
addl $0xDEADBEEF,%edi // Next Screen Line
bitw_04:
cmp $0xDEADBEEF,%esi
endc_04:
jne 9b
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
FUNC(Draw8x8_Trans_Mapped_FlipY)
movl 12(%esp),%eax // y
movl 4(%esp),%edx // source
shll $2,%eax
addl $8*8,%edx // tile end
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
movl %edx,endc_05-4
movl 20(%esp),%esi // source
movl 32(%esp),%ebp // cmap
movl 0xDEADBEEF(%eax),%edi
blin_05:
xorl %ecx,%ecx
xorl %edx,%edx
addl 24(%esp),%edi // x
jmp 9f
.align 8
9:
xorl %eax,%eax
xorl %ebx,%ebx
movb (%esi),%al
movb 4(%esi),%bl
movb 1(%esi),%cl
movb 5(%esi),%dl
testb %al,%al
jz 7f
movb (%ebp,%eax),%al
movb %al,7-0(%edi)
7: testb %bl,%bl
jz 7f
movb (%ebp,%ebx),%bl
movb %bl,7-4(%edi)
7: testb %cl,%cl
jz 7f
movb (%ebp,%ecx),%cl
movb %cl,7-1(%edi)
7: testb %dl,%dl
jz 7f
movb (%ebp,%edx),%dl
movb %dl,7-5(%edi)
7: xorl %eax,%eax
xorl %ebx,%ebx
movb 2(%esi),%al
movb 6(%esi),%bl
movb 3(%esi),%cl
movb 7(%esi),%dl
testb %al,%al
jz 7f
movb (%ebp,%eax),%al
movb %al,7-2(%edi)
7: testb %bl,%bl
jz 7f
movb (%ebp,%ebx),%bl
movb %bl,7-6(%edi)
7: testb %cl,%cl
jz 7f
movb (%ebp,%ecx),%cl
movb %cl,7-3(%edi)
7: testb %dl,%dl
jz 7f
movb (%ebp,%edx),%dl
movb %dl,(%edi)
7: addl $8,%esi // Next Tile Line
addl $0xDEADBEEF,%edi // Next Screen Line
bitw_05:
cmp $0xDEADBEEF,%esi
endc_05:
jne 9b
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
FUNC(Draw8x8_Trans_Mapped_FlipX)
movl 12(%esp),%eax // y
movl 4(%esp),%edx // source
shll $2,%eax
addl $8*8,%edx // tile end
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
movl %edx,endc_06-4
movl 20(%esp),%esi // source
movl 32(%esp),%ebp // cmap
movl 0xDEADBEEF(%eax),%edi
blin_06:
xorl %ecx,%ecx
xorl %edx,%edx
addl 24(%esp),%edi // x
jmp 9f
.align 8
9:
xorl %eax,%eax
xorl %ebx,%ebx
movb (%esi),%al
movb 4(%esi),%bl
movb 1(%esi),%cl
movb 5(%esi),%dl
testb %al,%al
jz 7f
movb (%ebp,%eax),%al
movb %al,(%edi)
7: testb %bl,%bl
jz 7f
movb (%ebp,%ebx),%bl
movb %bl,4(%edi)
7: testb %cl,%cl
jz 7f
movb (%ebp,%ecx),%cl
movb %cl,1(%edi)
7: testb %dl,%dl
jz 7f
movb (%ebp,%edx),%dl
movb %dl,5(%edi)
7: xorl %eax,%eax
xorl %ebx,%ebx
movb 2(%esi),%al
movb 6(%esi),%bl
movb 3(%esi),%cl
movb 7(%esi),%dl
testb %al,%al
jz 7f
movb (%ebp,%eax),%al
movb %al,2(%edi)
7: testb %bl,%bl
jz 7f
movb (%ebp,%ebx),%bl
movb %bl,6(%edi)
7: testb %cl,%cl
jz 7f
movb (%ebp,%ecx),%cl
movb %cl,3(%edi)
7: testb %dl,%dl
jz 7f
movb (%ebp,%edx),%dl
movb %dl,7(%edi)
7: addl $8,%esi // Next Tile Line
subl $0xDEADBEEF,%edi // Next Screen Line
bitw_06:
cmp $0xDEADBEEF,%esi
endc_06:
jne 9b
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
FUNC(Draw8x8_Trans_Mapped_FlipXY)
movl 12(%esp),%eax // y
movl 4(%esp),%edx // source
shll $2,%eax
addl $8*8,%edx // tile end
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
movl %edx,endc_07-4
movl 20(%esp),%esi // source
movl 32(%esp),%ebp // cmap
movl 0xDEADBEEF(%eax),%edi
blin_07:
xorl %ecx,%ecx
xorl %edx,%edx
addl 24(%esp),%edi // x
jmp 9f
.align 8
9:
xorl %eax,%eax
xorl %ebx,%ebx
movb (%esi),%al
movb 4(%esi),%bl
movb 1(%esi),%cl
movb 5(%esi),%dl
testb %al,%al
jz 7f
movb (%ebp,%eax),%al
movb %al,7-0(%edi)
7: testb %bl,%bl
jz 7f
movb (%ebp,%ebx),%bl
movb %bl,7-4(%edi)
7: testb %cl,%cl
jz 7f
movb (%ebp,%ecx),%cl
movb %cl,7-1(%edi)
7: testb %dl,%dl
jz 7f
movb (%ebp,%edx),%dl
movb %dl,7-5(%edi)
7: xorl %eax,%eax
xorl %ebx,%ebx
movb 2(%esi),%al
movb 6(%esi),%bl
movb 3(%esi),%cl
movb 7(%esi),%dl
testb %al,%al
jz 7f
movb (%ebp,%eax),%al
movb %al,7-2(%edi)
7: testb %bl,%bl
jz 7f
movb (%ebp,%ebx),%bl
movb %bl,7-6(%edi)
7: testb %cl,%cl
jz 7f
movb (%ebp,%ecx),%cl
movb %cl,7-3(%edi)
7: testb %dl,%dl
jz 7f
movb (%ebp,%edx),%dl
movb %dl,(%edi)
7: addl $8,%esi // Next Tile Line
subl $0xDEADBEEF,%edi // Next Screen Line
bitw_07:
cmp $0xDEADBEEF,%esi
endc_07:
jne 9b
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
FUNC(Draw8x8)
pushl %edi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -