makevid.asm

来自「linux下的任天堂模拟器代码。供大家参考。」· 汇编 代码 · 共 3,364 行 · 第 1/5 页

ASM
3,364
字号
.clearnext    mov dword[esi],0    add esi,4    dec ecx    jnz .clearnext    mov esi,xtravbuf+16    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 draw8x8winon.domosaic    mov ch,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    mov eax,[ebx]    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    ; Start fast loop    or eax,eax    je .skiploop1    drawpixel8b8x8 al, .loopd1, 0    drawpixel8b8x8 ah, .loopd2, 1    mov eax,[ebx+2]    drawpixel8b8x8 al, .loopd3, 2    drawpixel8b8x8 ah, .loopd4, 3.skiploop1    mov eax,[ebx+4]    or eax,eax    je .skiploop2    drawpixel8b8x8 al, .loopd5, 4    drawpixel8b8x8 ah, .loopd6, 5    mov eax,[ebx+6]    drawpixel8b8x8 al, .loopd7, 6    drawpixel8b8x8 ah, .loopd8, 7.skiploop2.hprior    add esi,8    inc dl    cmp dl,20h    jne .loopc2    mov edi,[temptile].loopc2    dec ch    jnz near .loopa    cmp byte[drawn],0    je .nodraw    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic.nodraw    ret    ; reversed loop.rloop    mov cl,[bshifter]    and dh,1Ch    mov eax,[ebx]    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    ; Start fast loop    or eax,eax    je .skiploop1b    drawpixel8b8x8 al, .loopd1b, 7    drawpixel8b8x8 ah, .loopd2b, 6    mov eax,[ebx+2]    drawpixel8b8x8 al, .loopd3b, 5    drawpixel8b8x8 ah, .loopd4b, 4.skiploop1b    mov eax,[ebx+4]    or eax,eax    je .skiploop2b    drawpixel8b8x8 al, .loopd5b, 3    drawpixel8b8x8 ah, .loopd6b, 2    mov eax,[ebx+6]    drawpixel8b8x8 al, .loopd7b, 1    drawpixel8b8x8 ah, .loopd8b, 0.skiploop2b    add esi,8    inc dl    cmp dl,20h    jne .loopc    mov edi,[temptile].loopc    dec ch    jnz near .loopa    cmp byte[drawn],0    je .nodraw2    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic.nodraw2    retNEWSYM draw8x8winon    mov ch,33    mov byte[drawn],0    mov ebp,[winptrref]    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    mov eax,[ebx]    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    ; Start fast loop    or eax,eax    je .skiploop1    drawpixel8b8x8win al, .loopd1, 0    drawpixel8b8x8win ah, .loopd2, 1    mov eax,[ebx+2]    drawpixel8b8x8win al, .loopd3, 2    drawpixel8b8x8win ah, .loopd4, 3.skiploop1    mov eax,[ebx+4]    or eax,eax    je .skiploop2    drawpixel8b8x8win al, .loopd5, 4    drawpixel8b8x8win ah, .loopd6, 5    mov eax,[ebx+6]    drawpixel8b8x8win al, .loopd7, 6    drawpixel8b8x8win ah, .loopd8, 7.skiploop2.hprior    add esi,8    add ebp,8    inc dl    cmp dl,20h    jne .loopc2    mov edi,[temptile].loopc2    dec ch    jnz near .loopa    ret    ; reversed loop.rloop    mov cl,[bshifter]    and dh,1Ch    mov eax,[ebx]    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    ; Start fast loop    or eax,eax    je .skiploop1b    drawpixel8b8x8win al, .loopd1b, 7    drawpixel8b8x8win ah, .loopd2b, 6    mov eax,[ebx+2]    drawpixel8b8x8win al, .loopd3b, 5    drawpixel8b8x8win ah, .loopd4b, 4.skiploop1b    mov eax,[ebx+4]    or eax,eax    je .skiploop2b    drawpixel8b8x8win al, .loopd5b, 3    drawpixel8b8x8win ah, .loopd6b, 2    mov eax,[ebx+6]    drawpixel8b8x8win al, .loopd7b, 1    drawpixel8b8x8win ah, .loopd8b, 0.skiploop2b    add esi,8    add ebp,8    inc dl    cmp dl,20h    jne .loopc    mov edi,[temptile].loopc    dec ch    jnz near .loopa    retSECTION .bssNEWSYM alttile, resb 1NEWSYM hirestiledat, resb 256SECTION .textNEWSYM draw16x8    push eax    xor eax,eax    mov al,[curypos]    mov byte[hirestiledat+eax],1    pop eax    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    cmp byte[curmosaicsz],1    je .nomosaic    mov esi,xtravbuf+16    mov ecx,64.clearnext    mov dword[esi],0    add esi,4    dec ecx    jnz .clearnext    mov esi,xtravbuf+16    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 dword[bgofwptr],vcache8b+65536    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 draw16x8winon.domosaic    cmp byte[res512switch],0    jne near draw16x8b    mov ch,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]    ; Start loop    mov eax,[ebx]    or eax,eax    je .skiploop1    drawpixel8b8x8 al, .loopd1, 0    mov eax,[ebx+2]    drawpixel8b8x8 al, .loopd3, 1.skiploop1    mov eax,[ebx+4]    or eax,eax    je .skiploop2    drawpixel8b8x8 al, .loopd5, 2    mov eax,[ebx+6]    drawpixel8b8x8 al, .loopd7, 3.skiploop2    add ebx,64    ; Start loop    mov eax,[ebx]    or eax,eax    je .skiploop1c    drawpixel8b8x8 al, .loopd1c, 4    mov eax,[ebx+2]    drawpixel8b8x8 al, .loopd3c, 5.skiploop1c    mov eax,[ebx+4]    or eax,eax    je .skiploop2c    drawpixel8b8x8 al, .loopd5c, 6    mov eax,[ebx+6]    drawpixel8b8x8 al, .loopd7c, 7.skiploop2c.hprior    add esi,8    inc dl    cmp dl,20h    jne .loopc2    mov edi,[temptile].loopc2    dec ch    jnz near .loopa    cmp byte[drawn],0    je .nodraw    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic.nodraw    ret    ; reversed loop.rloop    mov cl,[bshifter]    and dh,1Ch    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    ; Start fast loop    mov eax,[ebx]    or eax,eax    je .skiploop1b    drawpixel8b8x8 ah, .loopd1b, 7    mov eax,[ebx+2]    drawpixel8b8x8 ah, .loopd3b, 6.skiploop1b    mov eax,[ebx+4]    or eax,eax    je .skiploop2b    drawpixel8b8x8 ah, .loopd5b, 5    mov eax,[ebx+6]    drawpixel8b8x8 ah, .loopd7b, 4.skiploop2b    add ebx,64    mov eax,[ebx]    or eax,eax    je .skiploop1d    drawpixel8b8x8 ah, .loopd1d, 3    mov eax,[ebx+2]    drawpixel8b8x8 ah, .loopd3d, 2.skiploop1d    mov eax,[ebx+4]    or eax,eax    je .skiploop2d    drawpixel8b8x8 ah, .loopd5d, 1    mov eax,[ebx+6]    drawpixel8b8x8 ah, .loopd7d, 0.skiploop2d    add esi,8    inc dl    cmp dl,20h    jne .loopc    mov edi,[temptile].loopc    dec ch    jnz near .loopa    cmp byte[drawn],0    je .nodraw2    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic    cmp byte[winon],0    jne near dowindow.nodraw2    retNEWSYM draw16x8b    mov ch,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]    ; Start loop    mov eax,[ebx]    or eax,eax    je .skiploop1    drawpixel8b8x8 ah, .loopd1, 0    mov eax,[ebx+2]    drawpixel8b8x8 ah, .loopd3, 1.skiploop1    mov eax,[ebx+4]    or eax,eax    je .skiploop2    drawpixel8b8x8 ah, .loopd5, 2    mov eax,[ebx+6]    drawpixel8b8x8 ah, .loopd7, 3.skiploop2    add ebx,64    ; Start loop    mov eax,[ebx]    or eax,eax    je .skiploop1c    drawpixel8b8x8 ah, .loopd1c, 4    mov eax,[ebx+2]    drawpixel8b8x8 ah, .loopd3c, 5.skiploop1c    mov eax,[ebx+4]    or eax,eax    je .skiploop2c    drawpixel8b8x8 ah, .loopd5c, 6    mov eax,[ebx+6]    drawpixel8b8x8 ah, .loopd7c, 7.skiploop2c.hprior    add esi,8    inc dl    cmp dl,20h    jne .loopc2    mov edi,[temptile].loopc2    dec ch    jnz near .loopa    cmp byte[drawn],0    je .nodraw    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic.nodraw    ret    ; reversed loop.rloop    mov cl,[bshifter]    and dh,1Ch    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    ; Start fast loop    mov eax,[ebx]    or eax,eax    je .skiploop1b    drawpixel8b8x8 al, .loopd2b, 7    mov eax,[ebx+2]    drawpixel8b8x8 al, .loopd4b, 6.skiploop1b    mov eax,[ebx+4]    or eax,eax    je .skiploop2b    drawpixel8b8x8 al, .loopd5b, 5    mov eax,[ebx+6]    drawpixel8b8x8 al, .loopd7b, 4.skiploop2b    add ebx,64    mov eax,[ebx]    or eax,eax    je .skiploop1d    drawpixel8b8x8 al, .loopd1d, 3    mov eax,[ebx+2]    drawpixel8b8x8 al, .loopd3d, 2.skiploop1d    mov eax,[ebx+4]    or eax,eax    je .skiploop2d    drawpixel8b8x8 al, .loopd5d, 1    mov eax,[ebx+6]    drawpixel8b8x8 al, .loopd7d, 0.skiploop2d    add esi,8    inc dl    cmp dl,20h    jne .loopc    mov edi,[temptile].loopc    dec ch    jnz near .loopa    cmp byte[drawn],0    je .nodraw2    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic.nodraw2    retNEWSYM draw16x8winon    cmp byte[res512switch],0    jne near draw16x8bwinon    mov ch,33    mov ebp,[winptrref]    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]    ; Start loop    mov eax,[ebx]    or eax,eax    je .skiploop1    drawpixel8b8x8win al, .loopd1, 0    mov eax,[ebx+2]    drawpixel8b8x8win al, .loopd3, 1.skiploop1    mov eax,[ebx+4]    or eax,eax    je .skiploop2    drawpixel8b8x8win al, .loopd5, 2    mov eax,[ebx+6]    drawpixel8b8x8win al, .loopd7, 3.skiploop2    add ebx,64    ; Start loop    mov eax,[ebx]    or eax,eax    je .skiploop1c    drawpixel8b8x8win al, .loopd1c, 4    mov eax,[ebx+2]    drawpixel8b8x8win al, .loopd3c, 5.skiploop1c    mov eax,[ebx+4]    or eax,eax    je .skiploop2c    drawpixel8b8x8win al, .loopd5c, 6    mov eax,[ebx+6]    drawpixel8b8x8win al, .loopd7c, 7.skiploop2c.hprior    add ebp,8    add esi,8    inc dl    cmp dl,20h    jne .loopc2    mov edi,[temptile].loopc2    dec ch    jnz near .loopa    ret    ; reversed loop.rloop    mov cl,[bshifter] 

⌨️ 快捷键说明

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