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

📄 newgfx16.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
    pop edx    add edx,8    mov esi,edx    dec byte[NGNumSpr]    jnz near .loopobj    rol byte[csprbit],1    cmp byte[csprbit],1    je near .clearcsprmem    pop ebx    pop esi    xor ecx,ecx    xor ecx,ecx    ret.clearcsprmem    xor eax,eax    mov ecx,64    mov edi,sprpriodata+16    rep stosd    pop ebx    pop esi    ret.drawsingle    push esi    push ebx    mov edi,esi    mov esi,[sprtbng+ebx*4]    xor edx,edx    mov dl,[NGNumSpr]    and edx,0FFh    shl edx,3    sub edx,8    add edx,esi    mov esi,edx    xor ebx,ebx.loopobj2    test byte[esi+7],20h    jnz near .drawspriteflipx2    push edx    mov bx,[esi]    mov dh,[esi+6]    mov esi,[esi+2]    sprdrawa16b %2    pop edx    sub edx,8    mov esi,edx    dec byte[NGNumSpr]    jnz near .loopobj2    pop ebx    pop esi    xor ecx,ecx    ret.drawspriteflipx2    push edx    mov bx,[esi]    mov dh,[esi+6]    mov esi,[esi+2]    sprdrawaf16b %2    pop edx    sub edx,8    mov esi,edx    dec byte[NGNumSpr]    jnz near .loopobj2    pop ebx    pop esi    xor ecx,ecx    ret%endmacro; FillSubScr bit 0 sets to 1 if there is no subscreen present; ms,wms,wm,ws; FillSubScr scadtngNEWSYM drawsprng16b    test byte[BGMS1+ebx*2],10h    jz .nosubmain    test byte[FillSubScr+ebx],1    jnz near drawsprng16bt.nosubmain    mov ebp,[cpalval+ebx*4]    xor eax,eax    mov edi,[CMainWinScr]    test byte[FillSubScr+ebx],1    jz .main2    test byte[BGMS1+ebx*2],10h    jnz .main2    mov edi,[CSubWinScr].main2    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16b    test byte[FillSubScr+ebx],1    jz .main    test byte[BGMS1+ebx*2],10h    jnz .main    add esi,75036*2.main    xor edi,edi    normalsprng16b sprdrawpra16bng,sprdrawprb16bngNEWSYM drawsprngw16b    xor edi,edi    test byte[FillSubScr+ebx],1    jz .main    test byte[BGMS1+ebx*2],10h    jnz .main    add esi,75036*2.main    normalwsprng16b sprdrawprawb16bng,sprdrawprbwb16bngdrawsprng16bt:    test byte[scadtng+ebx],10h    jz near drawsprng16bnt    mov ebp,[cpalval+ebx*4]    xor eax,eax    test byte[BGMS1+ebx*2+1],10h    jnz near drawsprng16bmst    mov al,[BGMS1+ebx*2]    shr al,2    test byte[BGMS1+ebx*2],al    jnz .transpwin    test byte[scaddset],0C0h    jz .transpwin    cmp byte[BGMS1+ebx*2+1],0    jnz .main.transpwin    mov edi,[CMainWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bt.main    xor edi,edi    normalsprng16b sprdrawpra16bngt,sprdrawprb16bngtNEWSYM drawsprngw16bt    xor edi,edi    normalwsprng16b sprdrawprawb16bngt,sprdrawprbwb16bngtdrawsprng16bmst:    mov edi,[CMainWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bmt    mov edi,[CSubWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bst    xor edi,edi    normalsprng16b sprdrawpra16bngmst,sprdrawprb16bngmstdrawsprngw16bst:    xor edi,edi    normalwsprng16b sprdrawprawb16bngst,sprdrawprbwb16bngstdrawsprngw16bmt:    mov edi,[CSubWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bmst    xor edi,edi    normalwsprng16b sprdrawprawb16bngmt,sprdrawprbwb16bngmtdrawsprngw16bmst:    xor edi,edi    normalwsprng16b sprdrawprawb16bngmst,sprdrawprbwb16bngmstdrawsprng16bnt:    mov ebp,[cpalval+ebx*4]    xor eax,eax    test byte[BGMS1+ebx*2+1],10h    jnz near drawsprng16bmsnt    mov edi,[CMainWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16b    xor edi,edi    normalsprng16b sprdrawpra16bngnt,sprdrawprb16bngntdrawsprngw16bnt    xor edi,edi    normalwsprng16b sprdrawprawb16bngnt,sprdrawprbwb16bngntdrawsprng16bmsnt:    mov edi,[CMainWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bmnt    mov edi,[CSubWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bsnt    xor edi,edi    normalsprng16b sprdrawpra16bngmsnt,sprdrawprb16bngmsntdrawsprngw16bsnt:    xor edi,edi    normalwsprng16b sprdrawprawb16bngsnt,sprdrawprbwb16bngsntdrawsprngw16bmnt:    mov edi,[CSubWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bmsnt    xor edi,edi    normalwsprng16b sprdrawprawb16bngmnt,sprdrawprbwb16bngmntdrawsprngw16bmsnt:    xor edi,edi    normalwsprng16b sprdrawprawb16bngmsnt,sprdrawprbwb16bngmsntNEWSYM drawsprng16bhr    test byte[BGMS1+ebx*2],10h    jz .nosubmain    test byte[FillSubScr+ebx],1    jnz near drawsprng16bthr.nosubmain    mov ebp,[cpalval+ebx*4]    xor eax,eax    mov edi,[CMainWinScr]    test byte[FillSubScr+ebx],1    jz .main2    test byte[BGMS1+ebx*2],10h    jnz .main2    mov edi,[CSubWinScr].main2    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bhr    test byte[FillSubScr+ebx],1    jz .main    test byte[BGMS1+ebx*2],10h    jnz .main    add esi,75036*2.main    xor edi,edi    normalsprng16b sprdrawpra16bnghr,sprdrawprb16bnghrNEWSYM drawsprngw16bhr    xor edi,edi    test byte[FillSubScr+ebx],1    jz .main    test byte[BGMS1+ebx*2],10h    jnz .main    add esi,75036*2.main    normalwsprng16b sprdrawprawb16bnghr,sprdrawprbwb16bnghrdrawsprng16bthr:    test byte[scadtng+ebx],10h    jz near drawsprng16bnthr    mov ebp,[cpalval+ebx*4]    xor eax,eax    test byte[BGMS1+ebx*2+1],10h    jnz near drawsprng16bmsthr    mov edi,[CMainWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bthr    xor edi,edi    normalsprng16b sprdrawpra16bngthr,sprdrawprb16bngthrNEWSYM drawsprngw16bthr    xor edi,edi    normalwsprng16b sprdrawprawb16bngthr,sprdrawprbwb16bngthrdrawsprng16bmsthr:    mov edi,[CMainWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bmthr    mov edi,[CSubWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bsthr    xor edi,edi    normalsprng16b sprdrawpra16bngmsthr,sprdrawprb16bngmsthrdrawsprngw16bsthr:    xor edi,edi    normalwsprng16b sprdrawprawb16bngsthr,sprdrawprbwb16bngsthrdrawsprngw16bmthr:    mov edi,[CSubWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bmsthr    xor edi,edi    normalwsprng16b sprdrawprawb16bngmthr,sprdrawprbwb16bngmthrdrawsprngw16bmsthr:    xor edi,edi    normalwsprng16b sprdrawprawb16bngmsthr,sprdrawprbwb16bngmsthrdrawsprng16bnthr:    mov ebp,[cpalval+ebx*4]    xor eax,eax    test byte[BGMS1+ebx*2+1],10h    jnz near drawsprng16bmsnthr    mov edi,[CMainWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bhr    xor edi,edi    normalsprng16b sprdrawpra16bngnthr,sprdrawprb16bngnthrdrawsprngw16bnthr    xor edi,edi    normalwsprng16b sprdrawprawb16bngnthr,sprdrawprbwb16bngnthrdrawsprng16bmsnthr:    mov edi,[CMainWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bmnthr    mov edi,[CSubWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bsnthr    xor edi,edi    normalsprng16b sprdrawpra16bngmsnthr,sprdrawprb16bngmsnthrdrawsprngw16bsnthr:    xor edi,edi    normalwsprng16b sprdrawprawb16bngsnthr,sprdrawprbwb16bngsnthrdrawsprngw16bmnthr:    mov edi,[CSubWinScr]    cmp byte[edi+ebx+4*256],0    jne near drawsprngw16bmsnthr    xor edi,edi    normalwsprng16b sprdrawprawb16bngmnthr,sprdrawprbwb16bngmnthrdrawsprngw16bmsnthr:    xor edi,edi    normalwsprng16b sprdrawprawb16bngmsnthr,sprdrawprbwb16bngmsnthrProcessTransparencies:    cmp byte[NGNoTransp],0    je .yestransp    ret.yestransp    cmp byte[MMXSupport],1    je near ProcessTransparenciesMMX    mov esi,[vidbuffer]    add esi,16*2+288*2    mov ebx,1.nextline    test byte[FillSubScr+ebx],1    jz near .notransp    mov dword[HiResDone],0.againtransp    test byte[scadtng+ebx],40h    jz near .fulltransp    test byte[scadtng+ebx],80h    jnz near .subtract    ; Half Add    push esi    push ebx    ; filter out all fixed color sub-screen    test byte[FillSubScr+ebx],2    jnz .halfaddcomb    mov ecx,256    mov ebx,[UnusedBit]    mov edi,[HalfTrans]    xor eax,eax    jmp .next2.notranspha    add esi,2    dec ecx    jz .done.next2    mov ax,[esi]    test ax,bx    jz .notranspha    mov dx,[esi+75036*2]    test dx,bx    jnz .notranspha    and eax,edi    and edx,edi    add eax,edx    shr eax,1    mov [esi],ax    add esi,2    dec ecx    jnz .next2.done    pop ebx    pop esi    jmp .donetransp.halfaddcomb    mov ecx,256    mov ebx,[UnusedBit]    mov edi,[HalfTrans]    xor eax,eax    xor edx,edx    jmp .next2c.notransphac    add esi,2    dec ecx    jz .donec.next2c    mov ax,[esi]    test ax,bx    jz .notransphac    mov dx,[esi+75036*2]    test dx,bx    jnz .fulladdtranspc    and eax,edi    and edx,edi    add eax,edx    shr eax,1    mov [esi],ax    add esi,2    dec ecx    jnz .next2c.donec    pop ebx    pop esi    jmp .donetransp.fulladdtranspc    and eax,edi    and edx,edi    add eax,edx    shr eax,1    mov ax,[fulladdtab+eax*2]    mov [esi],ax    add esi,2    dec ecx    jnz .next2c    pop ebx    pop esi    jmp .donetransp.subtract    push ebx    push esi    ; half adder    mov ecx,256    mov ebp,[HalfTrans]    xor edx,edx    mov bx,[UnusedBit].nextfshs    mov ax,[esi]    test ax,bx    je .notranspfshs    mov dx,[esi+75036*2]    xor ax,0FFFFh    and edx,ebp    and eax,ebp    add edx,eax    shr edx,1    mov dx,[fulladdtab+edx*2]    xor dx,0FFFFh    test word[esi+75036*2],bx    jnz .nothalfhs    and edx,ebp    shr edx,1.nothalfhs    mov [esi],dx.notranspfshs    add esi,2    dec ecx    jnz .nextfshs    pop esi    pop ebx    jmp .donetransp.fulltransp    test byte[scadtng+ebx],80h    jnz near .fullsubtract    push ebx    push esi    mov ecx,256    mov ebp,[HalfTrans]    xor edx,edx    xor eax,eax    mov bx,[UnusedBit].nextfa    mov ax,[esi]    test ax,bx    jz .notranspfa    mov dx,[esi+75036*2]    and eax,ebp    and edx,ebp    add edx,eax    shr edx,1    mov dx,[fulladdtab+edx*2]    mov [esi],dx.notranspfa    add esi,2    dec ecx    jnz .nextfa    pop esi    pop ebx    jmp .donetransp.fullsubtract    push ebx    push esi    ; half adder    mov ecx,256    mov ebp,[HalfTrans]    xor edx,edx    xor eax,eax    mov bx,[UnusedBit].nextfs    mov ax,[esi]    test ax,bx    jz .notranspfs    mov dx,[esi+75036*2]    xor ax,0FFFFh    and edx,ebp    and eax,ebp    add edx,eax    shr edx,1    mov dx,[fulladdtab+edx*2]    xor dx,0FFFFh    mov [esi],dx.notranspfs    add esi,2    dec ecx    jnz .nextfs    pop esi    pop ebx.donetransp    test byte[SpecialLine+ebx],3    jz .notransp    xor dword[HiResDone],1    cmp dword[HiResDone],0    je .okaytransp    add esi,75036*4    jmp .againtransp.okaytransp    sub esi,75036*4.notransp    inc ebx    add esi,288*2    cmp [resolutn],bx    jne near .nextline    ret%macro TranspMMX 3    mov esi,[vidbuffer]    add esi,16*2+288*2    mov ebx,1.nextline    test byte[FillSubScr+ebx],1    jz near .notransp    mov dword[HiResDone],0.againtransp    test byte[scadtng+ebx],40h    jz near .fulltransp    test byte[scadtng+ebx],80h    jnz near .subtract    ; Half Add    push esi    push ebx    ; filter out all fixed color sub-screen    mov ecx,64    mov eax,[UnusedBit].faddl2h    test dword[esi],eax    jnz near .faddloopbh    test dword[esi+4],eax    jnz near .faddloopbh    add esi,8    dec ecx    jnz .faddl2h    jmp .faddloopdoneh.prochalfadd    test dword[esi+75036*2],eax    jnz near .faddloopbh    test dword[esi+75036*2+4],eax    jnz near .faddloopbh    mov ebx,[esi]    and ebx,eax    cmp ebx,eax    jne near .faddlooph    mov ebx,[esi+4]    and ebx,eax    cmp ebx,eax    jne near .faddlooph.prochalfadddo    movq mm0,[esi]    movq mm1,[esi+75036*2]    pand mm0,[HalfTrans]    pand mm1,[HalfTrans]    psrlw mm0,1    psrlw mm1,1    paddw mm0,mm1    movq [esi],mm0    add esi,8    dec ecx    jnz .prochalfadd    jmp .faddloopdoneh.procfulladdnext:    movq [esi-8],mm0.procfulladd    mov ebx,[esi]    and ebx,eax    cmp ebx,eax    jne near .faddlooph    mov ebx,[esi+4]    and ebx,eax    cmp ebx,eax    jne near .faddlooph    mov ebx,[esi+75036*2]    and ebx,eax    cmp ebx,eax    jne near .faddlooph    mov ebx,[esi+75036*2+4]    and ebx,eax    cmp ebx,eax    jne near .faddlooph.procfulladddo    movq mm0,[esi]    movq mm1,[esi+75036*2]    pand mm0,[UnusedBitXor]    movq mm4,mm1    movq mm2,mm0    %if %1>0    psllw mm0,%1    psllw mm1,%1    movq mm3,mm2    %else    movq mm3,mm0    %endif    psllw mm2,%2    pand mm1,[FullBitAnd]    paddusw mm0,mm1    pand mm0,[FullBitAnd]    movq mm1,mm4    psllw mm4,%2    add esi,byte 8    %if %1>0    psrlw mm0,%1    %endif    paddusw mm2,mm4    psllw mm3,%3    pand mm2,[FullBitAnd]    psllw mm1,%3    psrlw mm2,%2    pand mm1,[FullBitAnd]    paddusw mm3,mm1    por mm0,mm2    pand mm3,[FullBitAnd]    psrlw mm3,%3    por mm0,mm3    dec ecx    jnz near .procfulladdnext    movq [esi],mm0    jmp .faddloopdoneh.faddlooph    mov ebx,[esi]    test ebx,eax    jz near .faddl2h    and ebx,eax    cmp ebx,eax    jne .faddloopbh    mov ebx,[esi+4]    and ebx,eax    cmp e

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -