📄 makev16b.asm
字号:
add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx-6],dx.skipf2 mov al,[esi+1] test al,0Fh jz .skipg2 add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx-4],dx.skipg2 mov al,[esi] test al,0Fh jz .skiph2 add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx-2],dx.skiph2 pop esi add esi,8 dec cl jnz near .loopobj mov [currentobjptr],esi retNEWSYM drawsprites16bwinon mov esi,[currentobjptr] mov edi,[curvidoffset] xor ebx,ebx xor eax,eax.loopobj test byte[esi+7],20h jnz near .drawspriteflipx push esi mov bx,[esi] mov ch,[esi+6] mov esi,[esi+2] mov al,[esi] test al,0Fh jz .skipa cmp byte[winspdata+ebx-8+16],0 jne .skipa add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-16],dx.skipa mov al,[esi+1] test al,0Fh jz .skipb cmp byte[winspdata+ebx-7+16],0 jne .skipb add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-14],dx.skipb mov al,[esi+2] test al,0Fh jz .skipc cmp byte[winspdata+ebx-6+16],0 jne .skipc add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-12],dx.skipc mov al,[esi+3] test al,0Fh jz .skipd cmp byte[winspdata+ebx-5+16],0 jne .skipd add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-10],dx.skipd mov al,[esi+4] test al,0Fh jz .skipe cmp byte[winspdata+ebx-4+16],0 jne .skipe add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-8],dx.skipe mov al,[esi+5] test al,0Fh jz .skipf cmp byte[winspdata+ebx-3+16],0 jne .skipf add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-6],dx.skipf mov al,[esi+6] test al,0Fh jz .skipg cmp byte[winspdata+ebx-2+16],0 jne .skipg add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-4],dx.skipg mov al,[esi+7] test al,0Fh jz .skiph cmp byte[winspdata+ebx-1+16],0 jne .skiph add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-2],dx.skiph pop esi add esi,8 dec cl jnz near .loopobj mov [currentobjptr],esi ret.drawspriteflipx push esi mov bx,[esi] mov ch,[esi+6] mov esi,[esi+2] mov al,[esi+7] test al,0Fh jz .skipa2 cmp byte[winspdata+ebx-8+16],0 jne .skipa2 add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-16],dx.skipa2 mov al,[esi+6] test al,0Fh jz .skipb2 cmp byte[winspdata+ebx-7+16],0 jne .skipb2 add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-14],dx.skipb2 mov al,[esi+5] test al,0Fh jz .skipc2 cmp byte[winspdata+ebx-6+16],0 jne .skipc2 add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-12],dx.skipc2 mov al,[esi+4] test al,0Fh jz .skipd2 cmp byte[winspdata+ebx-5+16],0 jne .skipd2 add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-10],dx.skipd2 mov al,[esi+3] test al,0Fh jz .skipe2 cmp byte[winspdata+ebx-4+16],0 jne .skipe2 add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-8],dx.skipe2 mov al,[esi+2] test al,0Fh jz .skipf2 cmp byte[winspdata+ebx-3+16],0 jne .skipf2 add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-6],dx.skipf2 mov al,[esi+1] test al,0Fh jz .skipg2 cmp byte[winspdata+ebx-2+16],0 jne .skipg2 add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-4],dx.skipg2 mov al,[esi] test al,0Fh jz .skiph2 cmp byte[winspdata+ebx-1+16],0 jne .skiph2 add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx*2-2],dx.skiph2 pop esi add esi,8 dec cl jnz near .loopobj mov [currentobjptr],esi retNEWSYM drawsprites16bprio cmp byte[sprclprio+ebp],0 je near .endobj test byte[cwinenabm],10h jz .drawnowin cmp byte[winonsp],0 jne near drawspritesprio16bwinon.drawnowin cmp dword[sprsingle],1 je near .drawsingle mov [csprprlft],cl mov esi,[currentobjptr] mov edi,[curvidoffset] mov edx,esi xor ebx,ebx.loopobj test byte[esi+7],20h jnz near .drawspriteflipx mov bx,[esi] push esi mov ch,[esi+6] mov dl,[esi+7] xor eax,eax and edx,03h cmp edx,ebp jne near .notprio mov esi,[esi+2] mov cl,[csprbit] sprdrawa16b sprdrawpra16b pop esi add esi,8 dec byte[csprprlft] jnz near .loopobj rol byte[csprbit],1 cmp byte[csprbit],1 je near .clearcsprmem ret.notprio mov esi,[esi+2] mov dl,[csprbit] sprdrawa sprdrawpra2 pop esi add esi,8 dec byte[csprprlft] jnz near .loopobj rol byte[csprbit],1 cmp byte[csprbit],1 je near .clearcsprmem ret.drawspriteflipx mov bx,[esi] push esi mov ch,[esi+6] mov dl,[esi+7] xor eax,eax and edx,03h cmp edx,ebp jne near .notpriof mov esi,[esi+2] mov cl,[csprbit] sprdrawaf16b sprdrawpra16b pop esi add esi,8 dec byte[csprprlft] jnz near .loopobj rol byte[csprbit],1 cmp byte[csprbit],1 je near .clearcsprmem.endobj ret.notpriof mov esi,[esi+2] mov dl,[csprbit] sprdrawaf sprdrawpra2 pop esi add esi,8 dec byte[csprprlft] jnz near .loopobj rol byte[csprbit],1 cmp byte[csprbit],1 je near .clearcsprmem ret.clearcsprmem xor eax,eax mov ecx,64 mov edi,sprpriodata+16 rep stosd ret.drawsingle mov esi,[currentobjptr] mov edi,[curvidoffset] mov edx,ecx and edx,0FFh xor eax,eax shl edx,3 sub edx,8 add edx,esi mov esi,edx xor ebx,ebx.loopobj2 test byte[esi+7],20h jnz near .drawspriteflipx2 mov bx,[esi] push esi mov ch,[esi+6] mov esi,[esi+2] sprdrawa16b sprdrawprb16b pop esi sub esi,8 dec cl jnz near .loopobj2 ret.drawspriteflipx2 mov bx,[esi] push esi mov ch,[esi+6] mov esi,[esi+2] sprdrawaf16b sprdrawprb16b pop esi sub esi,8 dec cl jnz near .loopobj2 retNEWSYM drawspritesprio16bwinon cmp dword[sprsingle],1 je near .drawsingle mov [csprprlft],cl mov esi,[currentobjptr] mov edi,[curvidoffset] mov edx,esi xor ebx,ebx.loopobj test byte[esi+7],20h jnz near .drawspriteflipx mov bx,[esi] push esi mov ch,[esi+6] mov dl,[esi+7] xor eax,eax and edx,03h cmp edx,ebp jne near .notprio mov esi,[esi+2] mov cl,[csprbit] sprdrawa16b sprdrawpraw16b pop esi add esi,8 dec byte[csprprlft] jnz near .loopobj rol byte[csprbit],1 cmp byte[csprbit],1 je near .clearcsprmem ret.notprio mov esi,[esi+2] mov dl,[csprbit] sprdrawa sprdrawpra2 pop esi add esi,8 dec byte[csprprlft] jnz near .loopobj rol byte[csprbit],1 cmp byte[csprbit],1 je near .clearcsprmem ret.drawspriteflipx mov bx,[esi] push esi mov ch,[esi+6] mov dl,[esi+7] xor eax,eax and edx,03h cmp edx,ebp jne near .notpriof mov esi,[esi+2] mov cl,[csprbit] sprdrawaf16b sprdrawpraw16b pop esi add esi,8 dec byte[csprprlft] jnz near .loopobj rol byte[csprbit],1 cmp byte[csprbit],1 je near .clearcsprmem.endobj ret.notpriof mov esi,[esi+2] mov dl,[csprbit] sprdrawaf sprdrawpra2 pop esi add esi,8 dec byte[csprprlft] jnz near .loopobj rol byte[csprbit],1 cmp byte[csprbit],1 je near .clearcsprmem ret.clearcsprmem xor eax,eax mov ecx,64 mov edi,sprpriodata+16 rep stosd ret.drawsingle mov esi,[currentobjptr] mov edi,[curvidoffset] mov edx,ecx and edx,0FFh xor eax,eax shl edx,3 sub edx,8 add edx,esi mov esi,edx xor ebx,ebx.loopobj2 test byte[esi+7],20h jnz near .drawspriteflipx2 mov bx,[esi] push esi mov ch,[esi+6] mov esi,[esi+2] sprdrawa16b sprdrawprbw16b pop esi sub esi,8 dec cl jnz near .loopobj2 ret.drawspriteflipx2 mov bx,[esi] push esi mov ch,[esi+6] mov esi,[esi+2] sprdrawaf16b sprdrawprbw16b pop esi sub esi,8 dec cl jnz near .loopobj2 retNEWSYM draw8x816b cmp byte[osm2dis],1 je .osm2dis cmp byte[bgmode],2 je near draw8x816boffset.osm2dis cmp byte[bgmode],5 je near draw16x816 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 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 draw8x816bwinon.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 # 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 add esi,16 inc dl cmp dl,20h jne .loopc2 mov edi,[temptile].loopc2 dec byte[tileleft16b] jnz near .loopa 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 add esi,16 inc dl cmp dl,20h jne .loopc mov edi,[temptile].loopc dec byte[tileleft16b] jnz near .loopa cmp byte[drawn],0 je .nodraw2 mov dh,[curmosaicsz] cmp dh,1 jne near domosaic16b.nodraw2 retSECTION .bssNEWSYM tileleft16b, resb 1SECTION .textNEWSYM draw8x816bwinon mov byte[tileleft16b],33 mov byte[drawn],0 mov dl,[temp] mov ebp,[winptrref].loopa mov ax,[edi] mov dh,ah add edi,2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -