📄 makev16t.asm
字号:
NEWSYM processmode716t2 ; calculate current video offset xor ebx,ebx mov bx,[curypos] mov esi,ebx shl esi,9 shl ebx,6 add esi,ebx add esi,32 add esi,[vidbuffer] mov [curvidoffset],esi ; get current sprite table xor ebx,ebx mov bl,[curypos] shl ebx,9 add ebx,[spritetablea] mov [currentobjptr],ebx mov dword[cursprloc],sprleftpr ; setup priorities cmp byte[sprprifix],0 je .nosprprio mov dword[cursprloc],sprlefttot call preparesprpr.nosprprio ; clear back area w/ back color call clearback16t ; clear registers xor eax,eax xor ecx,ecx mov byte[extbgdone],0 test byte[interlval],40h jz .noback0m call procmode716tmainextbg.noback0m mov ebp,0 call procspritesmain16t ; do background 1 test byte[interlval],40h jnz .noback1m call procmode716tmain.noback1m mov ebp,1 call procspritesmain16t test byte[interlval],40h jz .noback2m call procmode716tmainextbgb call procmode716tmainextbg2.noback2m mov ebp,2 call procspritesmain16t mov ebp,3 call procspritesmain16t pop ebp pop edx pop ebx pop edi pop esi xor eax,eax xor ecx,ecx ret;*******************************************************; Clear Backarea, with 0s;*******************************************************SECTION .bssNEWSYM prevrgbcol, resd 1NEWSYM prevrgbpal, resd 1SECTION .textNEWSYM clearback16bts mov byte[DoTransp],0 cmp dword[vesa2_rpos],0 je near clearback16bts0.clear cmp byte[winon],0 je near clearback16bts0b cmp byte[winon],2 je near clearback16bts0 cmp byte[winon],4 je near clearback16bts0.clear.noclear mov bl,[scaddset] and bl,30h cmp bl,20h jne .dontclear cmp byte[winon],5 je near clearback16bts0.clear.dontclear cmp byte[winon],5 je near clearback16bts0b cmp byte[winon],3 je near clearback16bts0b mov eax,[coladdr] shl eax,8 mov bx,[prevrgbpal] mov al,[vidbright] cmp eax,[prevrgbcol] je .useprevpal mov [prevrgbcol],eax xor eax,eax mov al,[coladdr] mov cl,[vidbright] mul cl mov cl,15 div cl xor ah,ah mov cl,[vesa2_rpos] shl ax,cl mov bx,ax xor eax,eax mov al,[coladdg] mov cl,[vidbright] mul cl mov cl,15 div cl xor ah,ah mov cl,[vesa2_gpos] shl ax,cl add bx,ax xor eax,eax mov al,[coladdb] mov cl,[vidbright] mul cl mov cl,15 div cl xor ah,ah mov cl,[vesa2_bpos] shl ax,cl add bx,ax mov [prevrgbpal],bx.useprevpal mov ax,bx cmp eax,0 je .nowin jmp dowindowback16b.nowin mov edi,[curvidoffset] or eax,eax jz near clearback16bts0.clearing cmp byte[MMXSupport],1 je .dommxclear mov ecx,128 rep stosd xor eax,eax ret.dommxclear mov [mmxtempdat],eax mov [mmxtempdat+4],eax mov ecx,32 movq mm0,[mmxtempdat].mmxloop movq [edi],mm0 movq [edi+8],mm0 add edi,16 dec ecx jnz .mmxloop emms xor eax,eax retSECTION .bssmmxtempdat resd 2SECTION .textNEWSYM clearback16bts0b mov eax,[coladdr] shl eax,8 mov bx,[prevrgbpal] mov al,[vidbright] cmp eax,[prevrgbcol] je .useprevpal2 mov [prevrgbcol],eax xor eax,eax mov al,[coladdr] mov cl,[vidbright] mul cl mov cl,15 div cl xor ah,ah mov cl,[vesa2_rpos] shl ax,cl mov bx,ax xor eax,eax mov al,[coladdg] mov cl,[vidbright] mul cl mov cl,15 div cl xor ah,ah mov cl,[vesa2_gpos] shl ax,cl add bx,ax xor eax,eax mov al,[coladdb] mov cl,[vidbright] mul cl mov cl,15 div cl xor ah,ah mov cl,[vesa2_bpos] shl ax,cl add bx,ax mov [prevrgbpal],bx.useprevpal2 mov ax,bx shl eax,16 mov ax,bx cmp byte[winon],3 je near clearback16bdual mov edi,[curvidoffset] or eax,eax jz near clearback16bts0.clearing cmp byte[MMXSupport],1 je .dommxclear mov ecx,128 rep stosd xor eax,eax ret.dommxclear mov [mmxtempdat],eax mov [mmxtempdat+4],eax mov ecx,32 movq mm0,[mmxtempdat].mmxloop movq [edi],mm0 movq [edi+8],mm0 add edi,16 dec ecx jnz .mmxloop emms xor eax,eax retNEWSYM clearback16bts0 mov bl,[scaddset] and bl,30h cmp bl,20h je near clearback16bts0b.clear mov edi,[curvidoffset] xor eax,eax.clearing test byte[scrnon+1],10h jnz .notnotransp mov byte[DoTransp],1.notnotransp cmp byte[MMXSupport],1 je .dommxclear mov ecx,128 rep stosd ret.dommxclear mov [mmxtempdat],eax mov [mmxtempdat+4],eax mov ecx,32 movq mm0,[mmxtempdat].mmxloop movq [edi],mm0 movq [edi+8],mm0 add edi,16 dec ecx jnz .mmxloop emms retNEWSYM dowindowback16b test byte[scrnon+1],10h jnz .notnotransp mov byte[DoTransp],1.notnotransp mov bl,[scaddset] and bl,30h cmp bl,20h je near dowindowback16brev mov ebx,windowdata mov edi,[curvidoffset] xor edx,edx xor ch,ch.getnext mov cl,[ebx] cmp dl,cl je .procnext.dorest sub cl,dl cmp ch,0 ja .nodraw mov byte[DoTransp],0.loopa mov [edi+edx*2],ax inc dl dec cl jnz .loopa.procnext add ch,[ebx+1] add ebx,2 test byte[numwin],0FFh jz .finishwin dec byte[numwin] jnz .getnext xor cl,cl jmp .dorest.nodraw.loopb mov word[edi+edx*2],0 inc dl dec cl jnz .loopb jmp .procnext.finishwin xor eax,eax retNEWSYM dowindowback16brev mov ebx,windowdata mov edi,[curvidoffset] xor edx,edx xor ch,ch.getnext mov cl,[ebx] cmp dl,cl je .procnext.dorest sub cl,dl cmp ch,0 ja .nodraw.loopa mov word[edi+edx*2],0 inc dl dec cl jnz .loopa.procnext add ch,[ebx+1] add ebx,2 test byte[numwin],0FFh jz .finishwin dec byte[numwin] jnz .getnext xor cl,cl jmp .dorest.nodraw mov byte[DoTransp],0.loopb mov [edi+edx*2],ax inc dl dec cl jnz .loopb jmp .procnext.finishwin xor eax,eax retNEWSYM clearback16bdual cmp byte[bgmode],7 jne .notmode7 test byte[scrnon+1],10h jnz .notmode7 jmp clearback16bdualb2.notmode7 mov bl,[scaddset] and bl,30h cmp bl,10h je near clearback16bdualrev mov edi,[curvidoffset] mov esi,[cwinptr] mov ecx,64 cmp dword[esi],01010101h je near .drawnone.nextpart cmp dword[esi],0 jne .drawpart.drawall mov [edi],eax mov [edi+4],eax add edi,8 add esi,4 dec ecx jnz .nextpart jmp .findraw.nextpartp cmp dword[esi],01010101h je near .drawnone cmp dword[esi],0h je .drawall.drawpart xor ebx,ebx cmp byte[esi],1 je .nodraw mov ebx,eax.nodraw mov [edi],bx xor ebx,ebx cmp byte[esi+1],1 je .nodraw1 mov ebx,eax.nodraw1 mov [edi+2],bx xor ebx,ebx cmp byte[esi+2],1 je .nodraw2 mov ebx,eax.nodraw2 mov [edi+4],bx xor ebx,ebx cmp byte[esi+3],1 je .nodraw3 mov ebx,eax.nodraw3 mov [edi+6],bx add edi,8 add esi,4 dec ecx jnz near .nextpartp jmp .findraw.nextpartn cmp dword[esi],01010101h jne .drawpart.drawnone mov dword[edi],0 mov dword[edi+4],0 add edi,8 add esi,4 dec ecx jnz .nextpartn.findraw retNEWSYM clearback16bdualrev; xor eax,eax ;aaaaaaaaaaa; ret mov edi,[curvidoffset] mov esi,[winptrref] mov esi,[cwinptr] mov ecx,64 cmp dword[esi],0 je near .drawnone.nextpart cmp dword[esi],01010101h jne .drawpart.drawall mov [edi],eax mov [edi+4],eax add edi,8 add esi,4 dec ecx jnz .nextpart jmp .findraw.nextpartp cmp dword[esi],0 je near .drawnone cmp dword[esi],01010101h je .drawall.drawpart xor ebx,ebx cmp byte[esi],1 jne .nodraw mov ebx,eax.nodraw mov [edi],bx xor ebx,ebx cmp byte[esi+1],1 jne .nodraw1 mov ebx,eax.nodraw1 mov [edi+2],bx xor ebx,ebx cmp byte[esi+2],1 jne .nodraw2 mov ebx,eax.nodraw2 mov [edi+4],bx xor ebx,ebx cmp byte[esi+3],1 jne .nodraw3 mov ebx,eax.nodraw3 mov [edi+6],bx add edi,8 add esi,4 dec ecx jnz near .nextpartp jmp .findraw.nextpartn cmp dword[esi],0 jne .drawpart.drawnone mov dword[edi],0 mov dword[edi+4],0 add edi,8 add esi,4 dec ecx jnz .nextpartn.findraw retNEWSYM clearback16bdualb2 mov byte[DoTransp],1 mov bl,[scaddset] and bl,30h cmp bl,10h je near clearback16bdualrev2 mov edi,[curvidoffset] mov esi,[cwinptr] mov ecx,64 cmp dword[esi],01010101h je near .drawnone mov byte[DoTransp],0.nextpart cmp dword[esi],0 jne .drawpart.drawall mov [edi],eax mov [edi+4],eax add edi,8 add esi,4 dec ecx jnz .nextpart jmp .findraw.nextpartp cmp dword[esi],01010101h je near .drawnone cmp dword[esi],0h je .drawall.drawpart mov byte[DoTransp],0 xor ebx,ebx cmp byte[esi],1 je .nodraw mov ebx,eax.nodraw mov [edi],bx xor ebx,ebx cmp byte[esi+1],1 je .nodraw1 mov ebx,eax.nodraw1 mov [edi+2],bx xor ebx,ebx cmp byte[esi+2],1 je .nodraw2 mov ebx,eax.nodraw2 mov [edi+4],bx xor ebx,ebx cmp byte[esi+3],1 je .nodraw3 mov ebx,eax.nodraw3 mov [edi+6],bx add edi,8 add esi,4 dec ecx jnz near .nextpartp jmp .findraw.nextpartn cmp dword[esi],01010101h jne .drawpart.drawnone mov dword[edi],0 mov dword[edi+4],0 add edi,8 add esi,4 dec ecx jnz .nextpartn.findraw retNEWSYM clearback16bdualrev2 mov edi,[curvidoffset] mov esi,[winptrref] mov esi,[cwinptr] mov ecx,64 cmp dword[esi],0 je near .drawnone mov byte[DoTransp],0.nextpart cmp dword[esi],01010101h jne .drawpart.drawall mov [edi],eax mov [edi+4],eax add edi,8 add esi,4 dec ecx jnz .nextpart jmp .findraw.nextpartp cmp dword[esi],0 je near .drawnone cmp dword[esi],01010101h je .drawall.drawpart mov byte[DoTransp],0 xor ebx,ebx cmp byte[esi],1 jne .nodraw mov ebx,eax.nodraw mov [edi],bx xor ebx,ebx cmp byte[esi+1],1 jne .nodraw1 mov ebx,eax.nodraw1 mov [edi+2],bx xor ebx,ebx cmp byte[esi+2],1 jne .nodraw2 mov ebx,eax.nodraw2 mov [edi+4],bx xor ebx,ebx cmp byte[esi+3],1 jne .nodraw3 mov ebx,eax.nodraw3 mov [edi+6],bx add edi,8 add esi,4 dec ecx jnz near .nextpartp jmp .findraw.nextpartn cmp dword[esi],0 jne .drawpart.drawnone mov dword[edi],0 mov dword[edi+4],0 add edi,8 add esi,4 dec ecx jnz .nextpartn.findraw retSECTION .bssNEWSYM DoTransp, resb 1SECTION .text;*******************************************************; Clear Backarea, 16-bit mode w/ transparency;*******************************************************NEWSYM clearback16t test byte[scaddtype],20h jz near .backcopy test byte[scaddtype],80h jnz near clearback16ts mov eax,[pal16b] mov esi,[curvidoffset] mov ebp,transpbuf+32 mov dx,ax and eax,[vesa2_clbit] shr eax,1 test byte[scaddtype],40h jz .fulladd cmp byte[scrnon+1],0 je .fulladd mov ecx,128
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -