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

📄 makev16b.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
    dec cl    jz .doneloop    dec dl    jnz .zeroloop    mov ax,[esi]    mov dl,dh    test ax,0FFFFh    jnz .loopm    jmp .zeroloop.doneloop    retNEWSYM dowindow16b    mov ebx,windowdata    mov esi,xtravbuf+32    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 ax,[esi+edx*2]    test ax,0FFFFh    jz .nocopy    mov [edi+edx*2],ax.nocopy    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    add dl,cl    jmp .procnext.finishwin    xor eax,eax    ret;*******************************************************; Processes & Draws 8x8 tiles, offset mode;*******************************************************NEWSYM draw8x816boffset    mov [temp],al    mov [bshifter],ah    mov eax,esi    mov [yadder],ecx    mov [tempcach],ebx    mov ebx,56    sub ebx,ecx    mov [yrevadder],ebx    initoffsetmode    ; 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 draw8x816bwinonoffset.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 #    offsetmcachechk    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    procoffsetmode    add esi,16    dec byte[tileleft16b]    jnz near .loopa    xor eax,eax    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    procoffsetmode    add esi,16    dec byte[tileleft16b]    jnz near .loopa    xor eax,eax    cmp byte[drawn],0    je .nodraw2    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic16b.nodraw2    retNEWSYM draw8x816bwinonoffset    mov byte[tileleft16b],33    mov byte[drawn],0    mov dl,[temp]    mov ebp,[winptrref].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 #    offsetmcachechk    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    Draw8x816bwinmacro 0    Draw8x816bwinmacro 1    Draw8x816bwinmacro 2    Draw8x816bwinmacro 3.loopd4    cmp dword[ebx+4],0    je .loopd8    Draw8x816bwinmacro 4    Draw8x816bwinmacro 5    Draw8x816bwinmacro 6    Draw8x816bwinmacro 7.loopd8.hprior    procoffsetmode    add esi,16    add ebp,8    dec byte[tileleft16b]    jnz near .loopa    xor eax,eax    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    Draw8x816bwinflipmacro 0    Draw8x816bwinflipmacro 1    Draw8x816bwinflipmacro 2    Draw8x816bwinflipmacro 3.loopd4b    cmp dword[ebx],0    je .loopd8b    Draw8x816bwinflipmacro 4    Draw8x816bwinflipmacro 5    Draw8x816bwinflipmacro 6    Draw8x816bwinflipmacro 7.loopd8b    procoffsetmode    add esi,16    add ebp,8    dec byte[tileleft16b]    jnz near .loopa    xor eax,eax    retNEWSYM draw16x1616b    mov byte[drawn],0    mov [temp],eax    mov eax,esi    mov [yadder],ecx    mov [tempcach],ebx    mov ebx,56    sub ebx,ecx    mov [yrevadder],ebx    xor ebx,ebx    mov bl,[curypos]    mov [temptile],edx    ; set up y adders    test byte[a16x16yinc],01h    jz .noincrc    mov word[.yadd],16    mov word[.yflipadd],0    jmp .yesincrc.noincrc    mov word[.yadd],0    mov word[.yflipadd],16.yesincrc    ; 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    cmp byte[curmosaicsz],1    jne .domosaic    cmp byte[winon],0    jne near draw16x1616bwinon.domosaic    mov byte[tileleft16b],33    mov dl,[temp].loopa    mov ax,[edi]    mov dh,ah    xor byte[a16x16xinc],1    test dh,40h    jnz .noxflip    test byte[a16x16xinc],01h    jnz .noincr2    inc ax    add edi,2.noincr2    jmp .yesxflip.noxflip    test byte[a16x16xinc],01h    jnz .noincr    add edi,2    jmp .yesincr.noincr    inc ax.yesincr.yesxflip    xor dh,[curbgpr]    test dh,20h    jnz near .hprior    inc byte[drawn]    test dh,80h    jnz .noyflip    add ax,word[.yadd]    jmp .yesyflip.noyflip    add ax,word[.yflipadd].yesyflip    and ax,03FFh                ; filter out tile #    mov ebx,[tempcach]    shl ax,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    mov cl,[bshifter]    and dh,1Ch    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    xor eax,eax    ; Start loop    Draw16x1616b 0, 0    Draw16x1616b 1, 2    Draw16x1616b 2, 4    Draw16x1616b 3, 6    Draw16x1616b 4, 8    Draw16x1616b 5, 10    Draw16x1616b 6, 12    Draw16x1616b 7, 14.hprior    add esi,16    test byte[a16x16xinc],01h    jnz .noincrb2    inc dl.noincrb2    cmp dl,20h    jne .loopc2    xor dl,dl    mov edi,[temptile].loopc2    dec byte[tileleft16b]    jnz near .loopa    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic16b    ret    ; reversed loop.rloop    mov cl,[bshifter]    and dh,1Ch    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    xor eax,eax    Draw16x1616b 7, 0    Draw16x1616b 6, 2    Draw16x1616b 5, 4    Draw16x1616b 4, 6    Draw16x1616b 3, 8    Draw16x1616b 2, 10    Draw16x1616b 1, 12    Draw16x1616b 0, 14.skiploop2b    add esi,16    test byte[a16x16xinc],01h    jnz .noincrb    inc dl.noincrb    cmp dl,20h    jne .loopc    xor dl,dl    mov edi,[temptile].loopc    dec byte[tileleft16b]    jnz near .loopa    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic16b    retSECTION .bss.yadd      resw 1.yflipadd  resw 1SECTION .textdraw16x1616bwinon:    mov byte[tileleft16b],33    mov dl,[temp]    mov ebp,[winptrref].loopa    mov ax,[edi]    mov dh,ah    xor byte[a16x16xinc],1    test dh,40h    jnz .noxflip    test byte[a16x16xinc],01h    jnz .noincr2    inc ax    add edi,2.noincr2    jmp .yesxflip.noxflip    test byte[a16x16xinc],01h    jnz .noincr    add edi,2    jmp .yesincr.noincr    inc ax.yesincr.yesxflip    xor dh,[curbgpr]    test dh,20h    jnz near .hprior    inc byte[drawn]    test dh,80h    jnz .noyflip    add ax,word[draw16x1616b.yadd]    jmp .yesyflip.noyflip    add ax,word[draw16x1616b.yflipadd].yesyflip    and ax,03FFh                ; filter out tile #    mov ebx,[tempcach]    shl ax,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    mov cl,[bshifter]    and dh,1Ch    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    xor eax,eax    ; Start loop    Draw16x1616bwin 0, 0, 0    Draw16x1616bwin 1, 2, 1    Draw16x1616bwin 2, 4, 2    Draw16x1616bwin 3, 6, 3    Draw16x1616bwin 4, 8, 4    Draw16x1616bwin 5, 10, 5    Draw16x1616bwin 6, 12, 6    Draw16x1616bwin 7, 14, 7.hprior    add esi,16    add ebp,8    test byte[a16x16xinc],01h    jnz .noincrb2    inc dl.noincrb2    cmp dl,20h    jne .loopc2    xor dl,dl    mov edi,[temptile].loopc2    dec byte[tileleft16b]    jnz near .loopa    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic16b    ret    ; reversed loop.rloop    mov cl,[bshifter]    and dh,1Ch    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    xor eax,eax    Draw16x1616bwin 7, 0, 0    Draw16x1616bwin 6, 2, 1    Draw16x1616bwin 5, 4, 2    Draw16x1616bwin 4, 6, 3    Draw16x1616bwin 3, 8, 4    Draw16x1616bwin 2, 10, 5    Draw16x1616bwin 1, 12, 6    Draw16x1616bwin 0, 14, 7.skiploop2b    add esi,16    add ebp,8    test byte[a16x16xinc],01h    jnz .noincrb    inc dl.noincrb    cmp dl,20h    jne .loopc    xor dl,dl    mov edi,[temptile].loopc    dec byte[tileleft16b]    jnz near .loopa    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic16b    ret

⌨️ 快捷键说明

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