📄 newgfx16.asm
字号:
pop edx add edx,8 mov esi,edx dec byte[NGNumSpr] jnz near .loopobj rol byte[csprbit],1 cmp byte[csprbit],1 je near .clearcsprmem pop ebx pop esi xor ecx,ecx xor ecx,ecx ret.clearcsprmem xor eax,eax mov ecx,64 mov edi,sprpriodata+16 rep stosd pop ebx pop esi ret.drawsingle push esi push ebx mov edi,esi mov esi,[sprtbng+ebx*4] xor edx,edx mov dl,[NGNumSpr] and edx,0FFh shl edx,3 sub edx,8 add edx,esi mov esi,edx xor ebx,ebx.loopobj2 test byte[esi+7],20h jnz near .drawspriteflipx2 push edx mov bx,[esi] mov dh,[esi+6] mov esi,[esi+2] sprdrawa16b %2 pop edx sub edx,8 mov esi,edx dec byte[NGNumSpr] jnz near .loopobj2 pop ebx pop esi xor ecx,ecx ret.drawspriteflipx2 push edx mov bx,[esi] mov dh,[esi+6] mov esi,[esi+2] sprdrawaf16b %2 pop edx sub edx,8 mov esi,edx dec byte[NGNumSpr] jnz near .loopobj2 pop ebx pop esi xor ecx,ecx ret%endmacro; FillSubScr bit 0 sets to 1 if there is no subscreen present; ms,wms,wm,ws; FillSubScr scadtngNEWSYM drawsprng16b test byte[BGMS1+ebx*2],10h jz .nosubmain test byte[FillSubScr+ebx],1 jnz near drawsprng16bt.nosubmain mov ebp,[cpalval+ebx*4] xor eax,eax mov edi,[CMainWinScr] test byte[FillSubScr+ebx],1 jz .main2 test byte[BGMS1+ebx*2],10h jnz .main2 mov edi,[CSubWinScr].main2 cmp byte[edi+ebx+4*256],0 jne near drawsprngw16b test byte[FillSubScr+ebx],1 jz .main test byte[BGMS1+ebx*2],10h jnz .main add esi,75036*2.main xor edi,edi normalsprng16b sprdrawpra16bng,sprdrawprb16bngNEWSYM drawsprngw16b xor edi,edi test byte[FillSubScr+ebx],1 jz .main test byte[BGMS1+ebx*2],10h jnz .main add esi,75036*2.main normalwsprng16b sprdrawprawb16bng,sprdrawprbwb16bngdrawsprng16bt: test byte[scadtng+ebx],10h jz near drawsprng16bnt mov ebp,[cpalval+ebx*4] xor eax,eax test byte[BGMS1+ebx*2+1],10h jnz near drawsprng16bmst mov al,[BGMS1+ebx*2] shr al,2 test byte[BGMS1+ebx*2],al jnz .transpwin test byte[scaddset],0C0h jz .transpwin cmp byte[BGMS1+ebx*2+1],0 jnz .main.transpwin mov edi,[CMainWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bt.main xor edi,edi normalsprng16b sprdrawpra16bngt,sprdrawprb16bngtNEWSYM drawsprngw16bt xor edi,edi normalwsprng16b sprdrawprawb16bngt,sprdrawprbwb16bngtdrawsprng16bmst: mov edi,[CMainWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bmt mov edi,[CSubWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bst xor edi,edi normalsprng16b sprdrawpra16bngmst,sprdrawprb16bngmstdrawsprngw16bst: xor edi,edi normalwsprng16b sprdrawprawb16bngst,sprdrawprbwb16bngstdrawsprngw16bmt: mov edi,[CSubWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bmst xor edi,edi normalwsprng16b sprdrawprawb16bngmt,sprdrawprbwb16bngmtdrawsprngw16bmst: xor edi,edi normalwsprng16b sprdrawprawb16bngmst,sprdrawprbwb16bngmstdrawsprng16bnt: mov ebp,[cpalval+ebx*4] xor eax,eax test byte[BGMS1+ebx*2+1],10h jnz near drawsprng16bmsnt mov edi,[CMainWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16b xor edi,edi normalsprng16b sprdrawpra16bngnt,sprdrawprb16bngntdrawsprngw16bnt xor edi,edi normalwsprng16b sprdrawprawb16bngnt,sprdrawprbwb16bngntdrawsprng16bmsnt: mov edi,[CMainWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bmnt mov edi,[CSubWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bsnt xor edi,edi normalsprng16b sprdrawpra16bngmsnt,sprdrawprb16bngmsntdrawsprngw16bsnt: xor edi,edi normalwsprng16b sprdrawprawb16bngsnt,sprdrawprbwb16bngsntdrawsprngw16bmnt: mov edi,[CSubWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bmsnt xor edi,edi normalwsprng16b sprdrawprawb16bngmnt,sprdrawprbwb16bngmntdrawsprngw16bmsnt: xor edi,edi normalwsprng16b sprdrawprawb16bngmsnt,sprdrawprbwb16bngmsntNEWSYM drawsprng16bhr test byte[BGMS1+ebx*2],10h jz .nosubmain test byte[FillSubScr+ebx],1 jnz near drawsprng16bthr.nosubmain mov ebp,[cpalval+ebx*4] xor eax,eax mov edi,[CMainWinScr] test byte[FillSubScr+ebx],1 jz .main2 test byte[BGMS1+ebx*2],10h jnz .main2 mov edi,[CSubWinScr].main2 cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bhr test byte[FillSubScr+ebx],1 jz .main test byte[BGMS1+ebx*2],10h jnz .main add esi,75036*2.main xor edi,edi normalsprng16b sprdrawpra16bnghr,sprdrawprb16bnghrNEWSYM drawsprngw16bhr xor edi,edi test byte[FillSubScr+ebx],1 jz .main test byte[BGMS1+ebx*2],10h jnz .main add esi,75036*2.main normalwsprng16b sprdrawprawb16bnghr,sprdrawprbwb16bnghrdrawsprng16bthr: test byte[scadtng+ebx],10h jz near drawsprng16bnthr mov ebp,[cpalval+ebx*4] xor eax,eax test byte[BGMS1+ebx*2+1],10h jnz near drawsprng16bmsthr mov edi,[CMainWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bthr xor edi,edi normalsprng16b sprdrawpra16bngthr,sprdrawprb16bngthrNEWSYM drawsprngw16bthr xor edi,edi normalwsprng16b sprdrawprawb16bngthr,sprdrawprbwb16bngthrdrawsprng16bmsthr: mov edi,[CMainWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bmthr mov edi,[CSubWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bsthr xor edi,edi normalsprng16b sprdrawpra16bngmsthr,sprdrawprb16bngmsthrdrawsprngw16bsthr: xor edi,edi normalwsprng16b sprdrawprawb16bngsthr,sprdrawprbwb16bngsthrdrawsprngw16bmthr: mov edi,[CSubWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bmsthr xor edi,edi normalwsprng16b sprdrawprawb16bngmthr,sprdrawprbwb16bngmthrdrawsprngw16bmsthr: xor edi,edi normalwsprng16b sprdrawprawb16bngmsthr,sprdrawprbwb16bngmsthrdrawsprng16bnthr: mov ebp,[cpalval+ebx*4] xor eax,eax test byte[BGMS1+ebx*2+1],10h jnz near drawsprng16bmsnthr mov edi,[CMainWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bhr xor edi,edi normalsprng16b sprdrawpra16bngnthr,sprdrawprb16bngnthrdrawsprngw16bnthr xor edi,edi normalwsprng16b sprdrawprawb16bngnthr,sprdrawprbwb16bngnthrdrawsprng16bmsnthr: mov edi,[CMainWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bmnthr mov edi,[CSubWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bsnthr xor edi,edi normalsprng16b sprdrawpra16bngmsnthr,sprdrawprb16bngmsnthrdrawsprngw16bsnthr: xor edi,edi normalwsprng16b sprdrawprawb16bngsnthr,sprdrawprbwb16bngsnthrdrawsprngw16bmnthr: mov edi,[CSubWinScr] cmp byte[edi+ebx+4*256],0 jne near drawsprngw16bmsnthr xor edi,edi normalwsprng16b sprdrawprawb16bngmnthr,sprdrawprbwb16bngmnthrdrawsprngw16bmsnthr: xor edi,edi normalwsprng16b sprdrawprawb16bngmsnthr,sprdrawprbwb16bngmsnthrProcessTransparencies: cmp byte[NGNoTransp],0 je .yestransp ret.yestransp cmp byte[MMXSupport],1 je near ProcessTransparenciesMMX mov esi,[vidbuffer] add esi,16*2+288*2 mov ebx,1.nextline test byte[FillSubScr+ebx],1 jz near .notransp mov dword[HiResDone],0.againtransp test byte[scadtng+ebx],40h jz near .fulltransp test byte[scadtng+ebx],80h jnz near .subtract ; Half Add push esi push ebx ; filter out all fixed color sub-screen test byte[FillSubScr+ebx],2 jnz .halfaddcomb mov ecx,256 mov ebx,[UnusedBit] mov edi,[HalfTrans] xor eax,eax jmp .next2.notranspha add esi,2 dec ecx jz .done.next2 mov ax,[esi] test ax,bx jz .notranspha mov dx,[esi+75036*2] test dx,bx jnz .notranspha and eax,edi and edx,edi add eax,edx shr eax,1 mov [esi],ax add esi,2 dec ecx jnz .next2.done pop ebx pop esi jmp .donetransp.halfaddcomb mov ecx,256 mov ebx,[UnusedBit] mov edi,[HalfTrans] xor eax,eax xor edx,edx jmp .next2c.notransphac add esi,2 dec ecx jz .donec.next2c mov ax,[esi] test ax,bx jz .notransphac mov dx,[esi+75036*2] test dx,bx jnz .fulladdtranspc and eax,edi and edx,edi add eax,edx shr eax,1 mov [esi],ax add esi,2 dec ecx jnz .next2c.donec pop ebx pop esi jmp .donetransp.fulladdtranspc and eax,edi and edx,edi add eax,edx shr eax,1 mov ax,[fulladdtab+eax*2] mov [esi],ax add esi,2 dec ecx jnz .next2c pop ebx pop esi jmp .donetransp.subtract push ebx push esi ; half adder mov ecx,256 mov ebp,[HalfTrans] xor edx,edx mov bx,[UnusedBit].nextfshs mov ax,[esi] test ax,bx je .notranspfshs mov dx,[esi+75036*2] xor ax,0FFFFh and edx,ebp and eax,ebp add edx,eax shr edx,1 mov dx,[fulladdtab+edx*2] xor dx,0FFFFh test word[esi+75036*2],bx jnz .nothalfhs and edx,ebp shr edx,1.nothalfhs mov [esi],dx.notranspfshs add esi,2 dec ecx jnz .nextfshs pop esi pop ebx jmp .donetransp.fulltransp test byte[scadtng+ebx],80h jnz near .fullsubtract push ebx push esi mov ecx,256 mov ebp,[HalfTrans] xor edx,edx xor eax,eax mov bx,[UnusedBit].nextfa mov ax,[esi] test ax,bx jz .notranspfa mov dx,[esi+75036*2] and eax,ebp and edx,ebp add edx,eax shr edx,1 mov dx,[fulladdtab+edx*2] mov [esi],dx.notranspfa add esi,2 dec ecx jnz .nextfa pop esi pop ebx jmp .donetransp.fullsubtract push ebx push esi ; half adder mov ecx,256 mov ebp,[HalfTrans] xor edx,edx xor eax,eax mov bx,[UnusedBit].nextfs mov ax,[esi] test ax,bx jz .notranspfs mov dx,[esi+75036*2] xor ax,0FFFFh and edx,ebp and eax,ebp add edx,eax shr edx,1 mov dx,[fulladdtab+edx*2] xor dx,0FFFFh mov [esi],dx.notranspfs add esi,2 dec ecx jnz .nextfs pop esi pop ebx.donetransp test byte[SpecialLine+ebx],3 jz .notransp xor dword[HiResDone],1 cmp dword[HiResDone],0 je .okaytransp add esi,75036*4 jmp .againtransp.okaytransp sub esi,75036*4.notransp inc ebx add esi,288*2 cmp [resolutn],bx jne near .nextline ret%macro TranspMMX 3 mov esi,[vidbuffer] add esi,16*2+288*2 mov ebx,1.nextline test byte[FillSubScr+ebx],1 jz near .notransp mov dword[HiResDone],0.againtransp test byte[scadtng+ebx],40h jz near .fulltransp test byte[scadtng+ebx],80h jnz near .subtract ; Half Add push esi push ebx ; filter out all fixed color sub-screen mov ecx,64 mov eax,[UnusedBit].faddl2h test dword[esi],eax jnz near .faddloopbh test dword[esi+4],eax jnz near .faddloopbh add esi,8 dec ecx jnz .faddl2h jmp .faddloopdoneh.prochalfadd test dword[esi+75036*2],eax jnz near .faddloopbh test dword[esi+75036*2+4],eax jnz near .faddloopbh mov ebx,[esi] and ebx,eax cmp ebx,eax jne near .faddlooph mov ebx,[esi+4] and ebx,eax cmp ebx,eax jne near .faddlooph.prochalfadddo movq mm0,[esi] movq mm1,[esi+75036*2] pand mm0,[HalfTrans] pand mm1,[HalfTrans] psrlw mm0,1 psrlw mm1,1 paddw mm0,mm1 movq [esi],mm0 add esi,8 dec ecx jnz .prochalfadd jmp .faddloopdoneh.procfulladdnext: movq [esi-8],mm0.procfulladd mov ebx,[esi] and ebx,eax cmp ebx,eax jne near .faddlooph mov ebx,[esi+4] and ebx,eax cmp ebx,eax jne near .faddlooph mov ebx,[esi+75036*2] and ebx,eax cmp ebx,eax jne near .faddlooph mov ebx,[esi+75036*2+4] and ebx,eax cmp ebx,eax jne near .faddlooph.procfulladddo movq mm0,[esi] movq mm1,[esi+75036*2] pand mm0,[UnusedBitXor] movq mm4,mm1 movq mm2,mm0 %if %1>0 psllw mm0,%1 psllw mm1,%1 movq mm3,mm2 %else movq mm3,mm0 %endif psllw mm2,%2 pand mm1,[FullBitAnd] paddusw mm0,mm1 pand mm0,[FullBitAnd] movq mm1,mm4 psllw mm4,%2 add esi,byte 8 %if %1>0 psrlw mm0,%1 %endif paddusw mm2,mm4 psllw mm3,%3 pand mm2,[FullBitAnd] psllw mm1,%3 psrlw mm2,%2 pand mm1,[FullBitAnd] paddusw mm3,mm1 por mm0,mm2 pand mm3,[FullBitAnd] psrlw mm3,%3 por mm0,mm3 dec ecx jnz near .procfulladdnext movq [esi],mm0 jmp .faddloopdoneh.faddlooph mov ebx,[esi] test ebx,eax jz near .faddl2h and ebx,eax cmp ebx,eax jne .faddloopbh mov ebx,[esi+4] and ebx,eax cmp e
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -