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

📄 mv16tms.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
    mov edi,[temptile].loopc    dec byte[tileleft16b]    jnz near .loopa    ret;*******************************************************; Processes & Draws 16x16 tiles in 2, 4, & 8 bit mode;*******************************************************NEWSYM draw16x1616tms    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 draw16x1616twinonms.domosaic    mov ebp,transpbuf+32    sub ebp,eax    sub ebp,eax    test byte[scaddtype],80h    jnz near draw16x1616tsms    test byte[scaddtype],40h    jz near draw16x16fulladdms    cmp byte[scrnon+1],0    je near draw16x16fulladdms    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    xor ecx,ecx    ; Start loop    drawtilegrp draw8x816tams.hprior    add esi,16    add ebp,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    xor ecx,ecx    ; Start loop    drawtilegrpf draw8x816tams.skiploop2b    add esi,16    add ebp,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    retdraw16x16fulladdms:    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]    push edi    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 edi,[tempcach]    shl ax,6    add edi,eax    cmp edi,[bgofwptr]    jb .noclip    sub edi,[bgsubby].noclip    test dh,80h    jz .normadd    add edi,[yrevadder]    jmp .skipadd.normadd    add edi,[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    xor ecx,ecx    ; Start loop    drawtilegrpfull draw8x816tbms.hprior    pop edi    add esi,16    add ebp,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    xor ecx,ecx    drawtilegrpfullf draw8x816tbms    pop edi    add esi,16    add ebp,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    retNEWSYM draw16x1616tsms    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]    push edi    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 edi,[tempcach]    shl ax,6    add edi,eax    cmp edi,[bgofwptr]    jb .noclip    sub edi,[bgsubby].noclip    test dh,80h    jz .normadd    add edi,[yrevadder]    jmp .skipadd.normadd    add edi,[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    xor ecx,ecx    ; Start loop    drawtilegrpfull draw8x816tcms.hprior    pop edi    add esi,16    add ebp,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    xor ecx,ecx    drawtilegrpfullf draw8x816tcms    pop edi    add esi,16    add ebp,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    retNEWSYM draw16x1616twinonms    mov ebp,transpbuf+32    sub ebp,eax    sub ebp,eax    test byte[scaddtype],80h    jnz near draw16x1616tswinonms    test byte[scaddtype],40h    jz near draw16x16fulladdwinonms    cmp byte[scrnon+1],0    je near draw16x16fulladdwinonms    mov byte[tileleft16b],33    mov edx,[winptrref].loopa    mov ax,[edi]    mov cl,ah    xor byte[a16x16xinc],1    test cl,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 cl,[curbgpr]    test cl,20h    jnz near .hprior    inc byte[drawn]    test cl,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 cl,80h    jz .normadd    add ebx,[yrevadder]    jmp .skipadd.normadd    add ebx,[yadder].skipadd    test cl,40h    jnz near .rloop    mov al,cl    mov cl,[bshifter]    and al,1Ch    shl al,cl                    ; process palette # (bits 10-12)    add al,[bgcoloradder]    mov [coadder16],al    xor eax,eax    xor ecx,ecx    ; Start loop    drawtilegrp draw8x816tawinonms.hprior    add esi,16    add edx,8    add ebp,16    test byte[a16x16xinc],01h    jnz .noincrb2    inc byte[temp].noincrb2    cmp byte[temp],20h    jne .loopc2    mov byte[temp],0    mov edi,[temptile].loopc2    dec byte[tileleft16b]    jnz near .loopa    ret    ; reversed loop.rloop    mov al,cl    mov cl,[bshifter]    and al,1Ch    shl al,cl                    ; process palette # (bits 10-12)    add al,[bgcoloradder]    mov [coadder16],al    xor eax,eax    xor ecx,ecx    ; Start loop    drawtilegrpf draw8x816tawinonbms.skiploop2b    add esi,16    add edx,8    add ebp,16    test byte[a16x16xinc],01h    jnz .noincrb    inc byte[temp].noincrb    cmp byte[temp],20h    jne near .loopc2    mov byte[temp],0    mov edi,[temptile].loopc    dec byte[tileleft16b]    jnz near .loopa    retNEWSYM draw16x16fulladdwinonms    mov byte[tileleft16b],33    mov edx,[winptrref].loopa    mov ax,[edi]    mov cl,ah    xor byte[a16x16xinc],1    test cl,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 cl,[curbgpr]    push edi    test cl,20h    jnz near .hprior    inc byte[drawn]    test cl,80h    jnz .noyflip    add ax,word[yadd]    jmp .yesyflip.noyflip    add ax,word[yflipadd].yesyflip    and ax,03FFh                ; filter out tile #    mov edi,[tempcach]    shl ax,6    add edi,eax    cmp edi,[bgofwptr]    jb .noclip    sub edi,[bgsubby].noclip    test cl,80h    jz .normadd    add edi,[yrevadder]    jmp .skipadd.normadd    add edi,[yadder].skipadd    test cl,40h    jnz near .rloop    mov al,cl    mov cl,[bshifter]    and al,1Ch    shl al,cl                    ; process palette # (bits 10-12)    add al,[bgcoloradder]    mov [coadder16],al    xor eax,eax    xor ecx,ecx    ; Start loop    drawtilegrpfull draw8x816tbwinonms.hprior    pop edi    add esi,16    add edx,8    add ebp,16    test byte[a16x16xinc],01h    jnz .noincrb2    inc byte[temp].noincrb2    cmp byte[temp],20h    jne .loopc2    mov byte[temp],0    mov edi,[temptile].loopc2    dec byte[tileleft16b]    jnz near .loopa    ret    ; reversed loop.rloop    mov al,cl    mov cl,[bshifter]    and al,1Ch    shl al,cl                    ; process palette # (bits 10-12)    add al,[bgcoloradder]    mov [coadder16],al    xor eax,eax    xor ecx,ecx    drawtilegrpfullf draw8x816tbwinonbms    pop edi    add esi,16    add edx,8    add ebp,16    test byte[a16x16xinc],01h    jnz .noincrb    inc byte[temp].noincrb    cmp byte[temp],20h    jne near .loopc2    mov byte[temp],0    mov edi,[temptile].loopc    dec byte[tileleft16b]    jnz near .loopa    retNEWSYM draw16x1616tswinonms    mov byte[tileleft16b],33    mov edx,[winptrref].loopa    mov ax,[edi]    mov cl,ah    xor byte[a16x16xinc],1    test cl,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 cl,[curbgpr]    push edi    test cl,20h    jnz near .hprior    inc byte[drawn]    test cl,80h    jnz .noyflip    add ax,word[yadd]    jmp .yesyflip.noyflip    add ax,word[yflipadd].yesyflip    and ax,03FFh                ; filter out tile #    mov edi,[tempcach]    shl ax,6    add edi,eax    cmp edi,[bgofwptr]    jb .noclip    sub edi,[bgsubby].noclip    test cl,80h    jz .normadd    add edi,[yrevadder]    jmp .skipadd.normadd    add edi,[yadder].skipadd    test cl,40h    jnz near .rloop    mov al,cl    mov cl,[bshifter]    and al,1Ch    shl al,cl                    ; process palette # (bits 10-12)    add al,[bgcoloradder]    mov [coadder16],al    xor eax,eax    xor ecx,ecx    ; Start loop    drawtilegrpfull draw8x816tcwinonms.hprior    pop edi    add esi,16    add edx,8    add ebp,16    test byte[a16x16xinc],01h    jnz .noincrb2    inc byte[temp].noincrb2    cmp byte[temp],20h    jne .loopc2    mov byte[temp],0    mov edi,[temptile].loopc2    dec byte[tileleft16b]    jnz near .loopa    ret    ; reversed loop.rloop    mov al,cl    mov cl,[bshifter]    and al,1Ch    shl al,cl                    ; process palette # (bits 10-12)    add al,[bgcoloradder]    mov [coadder16],al    xor eax,eax    xor ecx,ecx    drawtilegrpfullf draw8x816tcwinonbms    pop edi    add esi,16    add edx,8    add ebp,16    test byte[a16x16xinc],01h    jnz .noincrb    inc byte[temp].noincrb    cmp byte[temp],20h    jne near .loopc2    mov byte[temp],0    mov edi,[temptile].loopc    dec byte[tileleft16b]    jnz near .loopa    ret

⌨️ 快捷键说明

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