📄 spr16x16_32.s
字号:
#include "asmdefs.inc"CODE_SEG/******************************************************************************//* *//* RAINE 16x16 TILE DRAWING *//* *//******************************************************************************//*MappedTransparent MappedDirect-MappedTransparent Direct-Mapped*/#define DEST_0 0#define DEST_1 4#define DEST_2 8#define DEST_3 12#define DEST_4 16#define DEST_5 20#define DEST_6 24#define DEST_7 28#define DEST_8 32#define DEST_9 36#define DEST_10 40#define DEST_11 44#define DEST_12 48#define DEST_13 52#define DEST_14 56#define DEST_15 60FUNC(Draw16x16_Mapped_32) pushl %ebp pushl %edi pushl %esi pushl %ebx movl 20(%esp),%esi // source movl 28(%esp),%eax // y movl %esi,%edx sall $2,%eax addl $16*16,%edx // tile end movl 0xDEADBEEF(%eax),%ediblin_00: movl %edx,endc_00-4 movl 32(%esp),%ebp // cmap addl 24(%esp),%edi // x addl 24(%esp),%edi // x addl 24(%esp),%edi // x addl 24(%esp),%edi // x xorl %edx,%edx xorl %ecx,%ecx xorl %ebx,%ebx xorl %eax,%eax9: movb (%edi),%dl movb (%esi),%al movb 31(%edi),%cl movb 4(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_0(%edi) movl %edx,DEST_4(%edi) movb 1(%esi),%al movb 5(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_1(%edi) movl %edx,DEST_5(%edi) movb 2(%esi),%al movb 6(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_2(%edi) movl %edx,DEST_6(%edi) movb 3(%esi),%al movb 7(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_3(%edi) movl %edx,DEST_7(%edi) movb 8(%esi),%al movb 8+4(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_8(%edi) movl %edx,DEST_12(%edi) movb 8+1(%esi),%al movb 8+5(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_9(%edi) movl %edx,DEST_13(%edi) movb 8+2(%esi),%al movb 8+6(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_10(%edi) movl %edx,DEST_14(%edi) movb 8+3(%esi),%al movb 8+7(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_11(%edi) movl %edx,DEST_15(%edi) addl $16,%esi // Next Tile Line addl $0xDEADBEEF,%edi // Next Screen Linebitw_00: cmp $0xDEADBEEF,%esiendc_00: jne 9b popl %ebx popl %esi popl %edi popl %ebp retFUNC(Draw16x16_Mapped_32_FlipY) pushl %ebp pushl %edi pushl %esi pushl %ebx movl 20(%esp),%esi // source movl 28(%esp),%eax // y movl %esi,%edx sall $2,%eax addl $16*16,%edx // tile end movl 0xDEADBEEF(%eax),%ediblin_01: movl %edx,endc_01-4 movl 32(%esp),%ebp // cmap addl 24(%esp),%edi // x addl 24(%esp),%edi // x addl 24(%esp),%edi // x addl 24(%esp),%edi // x xorl %edx,%edx xorl %ecx,%ecx xorl %ebx,%ebx xorl %eax,%eax9: movb (%edi),%dl movb (%esi),%al movb 31(%edi),%cl movb 4(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_15(%edi) movl %edx,DEST_11(%edi) movb 1(%esi),%al movb 5(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_14(%edi) movl %edx,DEST_10(%edi) movb 2(%esi),%al movb 6(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_13(%edi) movl %edx,DEST_9(%edi) movb 3(%esi),%al movb 7(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_12(%edi) movl %edx,DEST_8(%edi) movb 8(%esi),%al movb 8+4(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_7(%edi) movl %edx,DEST_3(%edi) movb 8+1(%esi),%al movb 8+5(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_6(%edi) movl %edx,DEST_2(%edi) movb 8+2(%esi),%al movb 8+6(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_5(%edi) movl %edx,DEST_1(%edi) movb 8+3(%esi),%al movb 8+7(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_4(%edi) movl %edx,DEST_0(%edi) addl $16,%esi // Next Tile Line addl $0xDEADBEEF,%edi // Next Screen Linebitw_01: cmp $0xDEADBEEF,%esiendc_01: jne 9b popl %ebx popl %esi popl %edi popl %ebp retFUNC(Draw16x16_Mapped_32_FlipX) pushl %ebp pushl %edi pushl %esi pushl %ebx movl 20(%esp),%esi // source movl 28(%esp),%eax // y movl %esi,%edx sall $2,%eax addl $16*16,%edx // tile end movl 0xDEADBEEF(%eax),%ediblin_02: movl %edx,endc_02-4 movl 32(%esp),%ebp // cmap addl 24(%esp),%edi // x addl 24(%esp),%edi // x addl 24(%esp),%edi // x addl 24(%esp),%edi // x xorl %edx,%edx xorl %ecx,%ecx xorl %ebx,%ebx xorl %eax,%eax9: movb (%edi),%dl movb (%esi),%al movb 31(%edi),%cl movb 4(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_0(%edi) movl %edx,DEST_4(%edi) movb 1(%esi),%al movb 5(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_1(%edi) movl %edx,DEST_5(%edi) movb 2(%esi),%al movb 6(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_2(%edi) movl %edx,DEST_6(%edi) movb 3(%esi),%al movb 7(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_3(%edi) movl %edx,DEST_7(%edi) movb 8(%esi),%al movb 8+4(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_8(%edi) movl %edx,DEST_12(%edi) movb 8+1(%esi),%al movb 8+5(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_9(%edi) movl %edx,DEST_13(%edi) movb 8+2(%esi),%al movb 8+6(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_10(%edi) movl %edx,DEST_14(%edi) movb 8+3(%esi),%al movb 8+7(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_11(%edi) movl %edx,DEST_15(%edi) addl $16,%esi // Next Tile Line subl $0xDEADBEEF,%edi // Next Screen Linebitw_02: cmp $0xDEADBEEF,%esiendc_02: jne 9b popl %ebx popl %esi popl %edi popl %ebp retFUNC(Draw16x16_Mapped_32_FlipXY) pushl %ebp pushl %edi pushl %esi pushl %ebx movl 20(%esp),%esi // source movl 28(%esp),%eax // y movl %esi,%edx sall $2,%eax addl $16*16,%edx // tile end movl 0xDEADBEEF(%eax),%ediblin_03: movl %edx,endc_03-4 movl 32(%esp),%ebp // cmap addl 24(%esp),%edi // x addl 24(%esp),%edi // x addl 24(%esp),%edi // x addl 24(%esp),%edi // x xorl %edx,%edx xorl %ecx,%ecx xorl %ebx,%ebx xorl %eax,%eax9: movb (%edi),%dl movb (%esi),%al movb 31(%edi),%cl movb 4(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_15(%edi) movl %edx,DEST_11(%edi) movb 1(%esi),%al movb 5(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_14(%edi) movl %edx,DEST_10(%edi) movb 2(%esi),%al movb 6(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_13(%edi) movl %edx,DEST_9(%edi) movb 3(%esi),%al movb 7(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_12(%edi) movl %edx,DEST_8(%edi) movb 8(%esi),%al movb 8+4(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_7(%edi) movl %edx,DEST_3(%edi) movb 8+1(%esi),%al movb 8+5(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_6(%edi) movl %edx,DEST_2(%edi) movb 8+2(%esi),%al movb 8+6(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_5(%edi) movl %edx,DEST_1(%edi) movb 8+3(%esi),%al movb 8+7(%esi),%bl movl (%ebp,%eax,4),%ecx movl (%ebp,%ebx,4),%edx movl %ecx,DEST_4(%edi) movl %edx,DEST_0(%edi) addl $16,%esi // Next Tile Line subl $0xDEADBEEF,%edi // Next Screen Linebitw_03: cmp $0xDEADBEEF,%esiendc_03: jne 9b popl %ebx popl %esi popl %edi popl %ebp retFUNC(Draw16x16_Trans_Mapped_32) pushl %ebp pushl %edi pushl %esi pushl %ebx movl 20(%esp),%esi // source movl 28(%esp),%eax // y movl %esi,%edx sall $2,%eax addl $16*16,%edx // tile end movl 0xDEADBEEF(%eax),%ediblin_04: movl %edx,endc_04-4 movl 32(%esp),%ebp // cmap addl 24(%esp),%edi // x addl 24(%esp),%edi // x addl 24(%esp),%edi // x addl 24(%esp),%edi // x xorl %edx,%edx xorl %ecx,%ecx xorl %ebx,%ebx xorl %eax,%eax9: movw (%edi),%dx movb (%esi),%al movw 30(%edi),%cx movb 4(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_0(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_4(%edi)7: movb 1(%esi),%al movb 5(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_1(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_5(%edi)7: movb 2(%esi),%al movb 6(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_2(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_6(%edi)7: movb 3(%esi),%al movb 7(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_3(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_7(%edi)7: movb 8(%esi),%al movb 8+4(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_8(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_12(%edi)7: movb 8+1(%esi),%al movb 8+5(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_9(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_13(%edi)7: movb 8+2(%esi),%al movb 8+6(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_10(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_14(%edi)7: movb 8+3(%esi),%al movb 8+7(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_11(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_15(%edi)7: addl $16,%esi // Next Tile Line addl $0xDEADBEEF,%edi // Next Screen Linebitw_04: cmp $0xDEADBEEF,%esiendc_04: jne 9b popl %ebx popl %esi popl %edi popl %ebp retFUNC(Draw16x16_Trans_Mapped_32_FlipY) pushl %ebp pushl %edi pushl %esi pushl %ebx movl 20(%esp),%esi // source movl 28(%esp),%eax // y movl %esi,%edx sall $2,%eax addl $16*16,%edx // tile end movl 0xDEADBEEF(%eax),%ediblin_05: movl %edx,endc_05-4 movl 32(%esp),%ebp // cmap addl 24(%esp),%edi // x addl 24(%esp),%edi // x addl 24(%esp),%edi // x addl 24(%esp),%edi // x xorl %edx,%edx xorl %ecx,%ecx xorl %ebx,%ebx xorl %eax,%eax9: movw (%edi),%dx movb (%esi),%al movw 30(%edi),%cx movb 4(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_15(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_11(%edi)7: movb 1(%esi),%al movb 5(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_14(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_10(%edi)7: movb 2(%esi),%al movb 6(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_13(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_9(%edi)7: movb 3(%esi),%al movb 7(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_12(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_8(%edi)7: movb 8(%esi),%al movb 8+4(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_7(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_3(%edi)7: movb 8+1(%esi),%al movb 8+5(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_6(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_2(%edi)7: movb 8+2(%esi),%al movb 8+6(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_5(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_1(%edi)7: movb 8+3(%esi),%al movb 8+7(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_4(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_0(%edi)7: addl $16,%esi // Next Tile Line addl $0xDEADBEEF,%edi // Next Screen Linebitw_05: cmp $0xDEADBEEF,%esiendc_05: jne 9b popl %ebx popl %esi popl %edi popl %ebp retFUNC(Draw16x16_Trans_Mapped_32_FlipX) pushl %ebp pushl %edi pushl %esi pushl %ebx movl 20(%esp),%esi // source movl 28(%esp),%eax // y movl %esi,%edx sall $2,%eax addl $16*16,%edx // tile end movl 0xDEADBEEF(%eax),%ediblin_06: movl %edx,endc_06-4 movl 32(%esp),%ebp // cmap addl 24(%esp),%edi // x addl 24(%esp),%edi // x addl 24(%esp),%edi // x addl 24(%esp),%edi // x xorl %edx,%edx xorl %ecx,%ecx xorl %ebx,%ebx xorl %eax,%eax9: movw (%edi),%dx movb (%esi),%al movw 30(%edi),%cx movb 4(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_0(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_4(%edi)7: movb 1(%esi),%al movb 5(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_1(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_5(%edi)7: movb 2(%esi),%al movb 6(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_2(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_6(%edi)7: movb 3(%esi),%al movb 7(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_3(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_7(%edi)7: movb 8(%esi),%al movb 8+4(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_8(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_12(%edi)7: movb 8+1(%esi),%al movb 8+5(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_9(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_13(%edi)7: movb 8+2(%esi),%al movb 8+6(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_10(%edi)7: testb %bl,%bl jz 7f movl (%ebp,%ebx,4),%edx movl %edx,DEST_14(%edi)7: movb 8+3(%esi),%al movb 8+7(%esi),%bl testb %al,%al jz 7f movl (%ebp,%eax,4),%ecx movl %ecx,DEST_11(%edi)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -