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 + -
显示快捷键?