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

📄 makev16b.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-6],dx.skipf2    mov al,[esi+1]    test al,0Fh    jz .skipg2    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-4],dx.skipg2    mov al,[esi]    test al,0Fh    jz .skiph2    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx-2],dx.skiph2    pop esi    add esi,8    dec cl    jnz near .loopobj    mov [currentobjptr],esi    retNEWSYM drawsprites16bwinon    mov esi,[currentobjptr]    mov edi,[curvidoffset]    xor ebx,ebx    xor eax,eax.loopobj    test byte[esi+7],20h    jnz near .drawspriteflipx    push esi    mov bx,[esi]    mov ch,[esi+6]    mov esi,[esi+2]    mov al,[esi]    test al,0Fh    jz .skipa    cmp byte[winspdata+ebx-8+16],0    jne .skipa    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-16],dx.skipa    mov al,[esi+1]    test al,0Fh    jz .skipb    cmp byte[winspdata+ebx-7+16],0    jne .skipb    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-14],dx.skipb    mov al,[esi+2]    test al,0Fh    jz .skipc    cmp byte[winspdata+ebx-6+16],0    jne .skipc    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-12],dx.skipc    mov al,[esi+3]    test al,0Fh    jz .skipd    cmp byte[winspdata+ebx-5+16],0    jne .skipd    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-10],dx.skipd    mov al,[esi+4]    test al,0Fh    jz .skipe    cmp byte[winspdata+ebx-4+16],0    jne .skipe    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-8],dx.skipe    mov al,[esi+5]    test al,0Fh    jz .skipf    cmp byte[winspdata+ebx-3+16],0    jne .skipf    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-6],dx.skipf    mov al,[esi+6]    test al,0Fh    jz .skipg    cmp byte[winspdata+ebx-2+16],0    jne .skipg    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-4],dx.skipg    mov al,[esi+7]    test al,0Fh    jz .skiph    cmp byte[winspdata+ebx-1+16],0    jne .skiph    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-2],dx.skiph    pop esi    add esi,8    dec cl    jnz near .loopobj    mov [currentobjptr],esi    ret.drawspriteflipx    push esi    mov bx,[esi]    mov ch,[esi+6]    mov esi,[esi+2]    mov al,[esi+7]    test al,0Fh    jz .skipa2    cmp byte[winspdata+ebx-8+16],0    jne .skipa2    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-16],dx.skipa2    mov al,[esi+6]    test al,0Fh    jz .skipb2    cmp byte[winspdata+ebx-7+16],0    jne .skipb2    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-14],dx.skipb2    mov al,[esi+5]    test al,0Fh    jz .skipc2    cmp byte[winspdata+ebx-6+16],0    jne .skipc2    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-12],dx.skipc2    mov al,[esi+4]    test al,0Fh    jz .skipd2    cmp byte[winspdata+ebx-5+16],0    jne .skipd2    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-10],dx.skipd2    mov al,[esi+3]    test al,0Fh    jz .skipe2    cmp byte[winspdata+ebx-4+16],0    jne .skipe2    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-8],dx.skipe2    mov al,[esi+2]    test al,0Fh    jz .skipf2    cmp byte[winspdata+ebx-3+16],0    jne .skipf2    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-6],dx.skipf2    mov al,[esi+1]    test al,0Fh    jz .skipg2    cmp byte[winspdata+ebx-2+16],0    jne .skipg2    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-4],dx.skipg2    mov al,[esi]    test al,0Fh    jz .skiph2    cmp byte[winspdata+ebx-1+16],0    jne .skiph2    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-2],dx.skiph2    pop esi    add esi,8    dec cl    jnz near .loopobj    mov [currentobjptr],esi    retNEWSYM drawsprites16bprio    cmp byte[sprclprio+ebp],0    je near .endobj    test byte[cwinenabm],10h    jz .drawnowin    cmp byte[winonsp],0    jne near drawspritesprio16bwinon.drawnowin    cmp dword[sprsingle],1    je near .drawsingle    mov [csprprlft],cl    mov esi,[currentobjptr]    mov edi,[curvidoffset]    mov edx,esi    xor ebx,ebx.loopobj    test byte[esi+7],20h    jnz near .drawspriteflipx    mov bx,[esi]    push esi    mov ch,[esi+6]    mov dl,[esi+7]    xor eax,eax    and edx,03h    cmp edx,ebp    jne near .notprio    mov esi,[esi+2]    mov cl,[csprbit]    sprdrawa16b sprdrawpra16b    pop esi    add esi,8    dec byte[csprprlft]    jnz near .loopobj    rol byte[csprbit],1    cmp byte[csprbit],1    je near .clearcsprmem    ret.notprio    mov esi,[esi+2]    mov dl,[csprbit]    sprdrawa sprdrawpra2    pop esi    add esi,8    dec byte[csprprlft]    jnz near .loopobj    rol byte[csprbit],1    cmp byte[csprbit],1    je near .clearcsprmem    ret.drawspriteflipx    mov bx,[esi]    push esi    mov ch,[esi+6]    mov dl,[esi+7]    xor eax,eax    and edx,03h    cmp edx,ebp    jne near .notpriof    mov esi,[esi+2]    mov cl,[csprbit]    sprdrawaf16b sprdrawpra16b    pop esi    add esi,8    dec byte[csprprlft]    jnz near .loopobj    rol byte[csprbit],1    cmp byte[csprbit],1    je near .clearcsprmem.endobj    ret.notpriof    mov esi,[esi+2]    mov dl,[csprbit]    sprdrawaf sprdrawpra2    pop esi    add esi,8    dec byte[csprprlft]    jnz near .loopobj    rol byte[csprbit],1    cmp byte[csprbit],1    je near .clearcsprmem    ret.clearcsprmem    xor eax,eax    mov ecx,64    mov edi,sprpriodata+16    rep stosd    ret.drawsingle    mov esi,[currentobjptr]    mov edi,[curvidoffset]    mov edx,ecx    and edx,0FFh    xor eax,eax    shl edx,3    sub edx,8    add edx,esi    mov esi,edx    xor ebx,ebx.loopobj2    test byte[esi+7],20h    jnz near .drawspriteflipx2    mov bx,[esi]    push esi    mov ch,[esi+6]    mov esi,[esi+2]    sprdrawa16b sprdrawprb16b    pop esi    sub esi,8    dec cl    jnz near .loopobj2    ret.drawspriteflipx2    mov bx,[esi]    push esi    mov ch,[esi+6]    mov esi,[esi+2]    sprdrawaf16b sprdrawprb16b    pop esi    sub esi,8    dec cl    jnz near .loopobj2    retNEWSYM drawspritesprio16bwinon    cmp dword[sprsingle],1    je near .drawsingle    mov [csprprlft],cl    mov esi,[currentobjptr]    mov edi,[curvidoffset]    mov edx,esi    xor ebx,ebx.loopobj    test byte[esi+7],20h    jnz near .drawspriteflipx    mov bx,[esi]    push esi    mov ch,[esi+6]    mov dl,[esi+7]    xor eax,eax    and edx,03h    cmp edx,ebp    jne near .notprio    mov esi,[esi+2]    mov cl,[csprbit]    sprdrawa16b sprdrawpraw16b    pop esi    add esi,8    dec byte[csprprlft]    jnz near .loopobj    rol byte[csprbit],1    cmp byte[csprbit],1    je near .clearcsprmem    ret.notprio    mov esi,[esi+2]    mov dl,[csprbit]    sprdrawa sprdrawpra2    pop esi    add esi,8    dec byte[csprprlft]    jnz near .loopobj    rol byte[csprbit],1    cmp byte[csprbit],1    je near .clearcsprmem    ret.drawspriteflipx    mov bx,[esi]    push esi    mov ch,[esi+6]    mov dl,[esi+7]    xor eax,eax    and edx,03h    cmp edx,ebp    jne near .notpriof    mov esi,[esi+2]    mov cl,[csprbit]    sprdrawaf16b sprdrawpraw16b    pop esi    add esi,8    dec byte[csprprlft]    jnz near .loopobj    rol byte[csprbit],1    cmp byte[csprbit],1    je near .clearcsprmem.endobj    ret.notpriof    mov esi,[esi+2]    mov dl,[csprbit]    sprdrawaf sprdrawpra2    pop esi    add esi,8    dec byte[csprprlft]    jnz near .loopobj    rol byte[csprbit],1    cmp byte[csprbit],1    je near .clearcsprmem    ret.clearcsprmem    xor eax,eax    mov ecx,64    mov edi,sprpriodata+16    rep stosd    ret.drawsingle    mov esi,[currentobjptr]    mov edi,[curvidoffset]    mov edx,ecx    and edx,0FFh    xor eax,eax    shl edx,3    sub edx,8    add edx,esi    mov esi,edx    xor ebx,ebx.loopobj2    test byte[esi+7],20h    jnz near .drawspriteflipx2    mov bx,[esi]    push esi    mov ch,[esi+6]    mov esi,[esi+2]    sprdrawa16b sprdrawprbw16b    pop esi    sub esi,8    dec cl    jnz near .loopobj2    ret.drawspriteflipx2    mov bx,[esi]    push esi    mov ch,[esi+6]    mov esi,[esi+2]    sprdrawaf16b sprdrawprbw16b    pop esi    sub esi,8    dec cl    jnz near .loopobj2    retNEWSYM draw8x816b    cmp byte[osm2dis],1    je .osm2dis    cmp byte[bgmode],2    je near draw8x816boffset.osm2dis    cmp byte[bgmode],5    je near draw16x816    mov [temp],al    mov [bshifter],ah    mov eax,esi    mov [yadder],ecx    mov [tempcach],ebx    mov ebx,56    sub ebx,ecx    mov [yrevadder],ebx    ; esi = pointer to video buffer    mov esi,[cwinptr]    sub esi,eax    mov [winptrref],esi    mov esi,[curvidoffset]    sub esi,eax           ; esi = [vidbuffer] + curypos * 288 + 16 - HOfs    sub esi,eax    cmp byte[curmosaicsz],1    je .nomosaic    mov esi,xtravbuf+32    mov ecx,128.clearnext    mov dword[esi],0    add esi,4    dec ecx    jnz .clearnext    mov esi,xtravbuf+32    sub esi,eax    sub esi,eax.nomosaic    mov [temptile],edx    push ecx    mov dword[bgsubby],262144    mov ecx,[vcache2b]    add ecx,262144    mov [bgofwptr],ecx    cmp dword[tempcach],ecx    jb .nobit    mov dword[bgsubby],131072    mov ecx,[vcache4b]    add ecx,131072    mov [bgofwptr],ecx    cmp dword[tempcach],ecx    jb .nobit    mov ecx,[vcache8b]    add ecx,65536    mov [bgofwptr],ecx    mov dword[bgsubby],65536.nobit    pop ecx; tile value : bit 15 = flipy, bit 14 = flipx, bit 13 = priority value;              bit 10-12 = palette, 0-9=tile#    cmp byte[curmosaicsz],1    jne .domosaic    cmp byte[winon],0    jne near draw8x816bwinon.domosaic    mov byte[tileleft16b],33    mov byte[drawn],0    mov dl,[temp].loopa    mov ax,[edi]    mov dh,ah    add edi,2    xor dh,[curbgpr]    test dh,20h    jnz near .hprior    inc byte[drawn]    and eax,03FFh                ; filter out tile #    mov ebx,[tempcach]    shl eax,6    add ebx,eax    cmp ebx,[bgofwptr]    jb .noclip    sub ebx,[bgsubby].noclip    test dh,80h    jz .normadd    add ebx,[yrevadder]    jmp .skipadd.normadd    add ebx,[yadder].skipadd    test dh,40h    jnz near .rloop    ; Begin Normal Loop    mov cl,[bshifter]    and dh,1Ch    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    xor eax,eax    ; Start loop    cmp dword[ebx],0    je .loopd4    Draw8x816bmacro 0    Draw8x816bmacro 1    Draw8x816bmacro 2    Draw8x816bmacro 3.loopd4    cmp dword[ebx+4],0    je .loopd8    Draw8x816bmacro 4    Draw8x816bmacro 5    Draw8x816bmacro 6    Draw8x816bmacro 7.loopd8.hprior    add esi,16    inc dl    cmp dl,20h    jne .loopc2    mov edi,[temptile].loopc2    dec byte[tileleft16b]    jnz near .loopa    cmp byte[drawn],0    je .nodraw    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic16b.nodraw    ret    ; reversed loop.rloop    mov cl,[bshifter]    and dh,1Ch    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    xor eax,eax    cmp dword[ebx+4],0    je .loopd4b    Draw8x816bflipmacro 0    Draw8x816bflipmacro 1    Draw8x816bflipmacro 2    Draw8x816bflipmacro 3.loopd4b    cmp dword[ebx],0    je .loopd8b    Draw8x816bflipmacro 4    Draw8x816bflipmacro 5    Draw8x816bflipmacro 6    Draw8x816bflipmacro 7.loopd8b    add esi,16    inc dl    cmp dl,20h    jne .loopc    mov edi,[temptile].loopc    dec byte[tileleft16b]    jnz near .loopa    cmp byte[drawn],0    je .nodraw2    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic16b.nodraw2    retSECTION .bssNEWSYM tileleft16b, resb 1SECTION .textNEWSYM draw8x816bwinon    mov byte[tileleft16b],33    mov byte[drawn],0    mov dl,[temp]    mov ebp,[winptrref].loopa    mov ax,[edi]    mov dh,ah    add edi,2

⌨️ 快捷键说明

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