⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makev16t.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
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 + -