📄 mv16tms.asm
字号:
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 + -