⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmap.nas

📁 The source code of Doom legacy for windows
💻 NAS
📖 第 1 页 / 共 3 页
字号:
        shr     ebx,16                  ;; frac int.        and     ebx,byte +0x7f        shl     edx,16                  ;; y frac up        mov     ebp,ecx        shl     ebp,16                  ;; fracstep f. up        shr     ecx,16                  ;; fracstep i. ->cl        and     cl,0x7f        mov     esi,[dc_source];;;; lets rock :) !;;        mov     eax,[pixelcount]        mov     dh,al        shr     eax,2        mov     ch,al                   ;; quad count        mov     eax,[colormaps]        test    dh,3        je      sh4quadloop;;;;  do un-even pixel;;        test    dh,0x1        je      shf2        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        add     edx,ebp        adc     bl,cl        mov     al,[edi]                ;; fetch dest  : index into colormap        and     bl,0x7f        mov     dl,[eax]        mov     [edi],dlpl:     add     edi,0x12345678;;;;  do two non-quad-aligned pixels;;shf2:        test    dh,0x2        je      shf3        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        add     edx,ebp        adc     bl,cl        mov     al,[edi]                ;; fetch dest  : index into colormap        and     bl,0x7f        mov     dl,[eax]        mov     [edi],dlpm:     add     edi,0x12345678        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        add     edx,ebp        adc     bl,cl        mov     al,[edi]                ;; fetch dest  : index into colormap        and     bl,0x7f        mov     dl,[eax]        mov     [edi],dlpn:     add     edi,0x12345678;;;;  test if there was at least 4 pixels;;shf3:        test    ch,0xff                 ;; test quad count        je near shdone;;;; ebp : ystep frac. upper 24 bits;; edx : y     frac. upper 24 bits;; ebx : y     i.    lower 7 bits,  masked for index;; ecx : ch = counter, cl = y step i.;; eax : colormap aligned 256;; esi : source texture column;; edi : dest screen;;sh4quadloop:        mov     dh,0x7f                 ;; prep mask        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        mov     [tystep],ebppo:     add     edi,0x12345678        mov     al,[edi]                ;; fetch dest  : index into colormappp:     sub     edi,0x12345678        mov     ebp,edipq:     sub     edi,0x12345678        jmp short shinloopalign  4shquadloop:        add     edx,[tystep]        adc     bl,cl        and     bl,dhq5:     add     ebp,0x12345678        mov     dl,[eax]        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        mov     [edi],dl        mov     al,[ebp]                ;; fetch dest : index into colormapshinloop:        add     edx,[tystep]        adc     bl,cl        and     bl,dhq6:     add     edi,0x12345678        mov     dl,[eax]        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        mov     [ebp],dl        mov     al,[edi]                ;; fetch dest : index into colormap        add     edx,[tystep]        adc     bl,cl        and     bl,dhq7:     add     ebp,0x12345678        mov     dl,[eax]        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        mov     [edi],dl        mov     al,[ebp]                ;; fetch dest : index into colormap        add     edx,[tystep]        adc     bl,cl        and     bl,dhq8:     add     edi,0x12345678        mov     dl,[eax]        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        mov     [ebp],dl        mov     al,[edi]                ;; fetch dest : index into colormap        dec     ch        jne     shquadloopshdone:        pop     ebx                     ;; restore register variables        pop     edi        pop     esi        pop     ebp                     ;; restore caller's stack frame pointer        ret;;----------------------------------------------------------------------;;;;      R_DrawSpan;;;;      Horizontal texture mapping;;;;----------------------------------------------------------------------[SECTION .data]oldcolormap     dd      0[SECTION CODE_SEG write]cglobal R_DrawSpan_8R_DrawSpan_8:        push    ebp                     ;; preserve caller's stack frame pointer        push    esi                     ;; preserve register variables        push    edi        push    ebx;;;; initilise registers;;          mov     edx, [ds_xfrac]        mov     eax, [ds_ystep]        ror     edx, 14        ror     eax, 15        mov      bl, dl        mov     ecx, [ds_xstep]        mov      dh, al        mov      ax, 1        mov     [tystep], eax        mov     eax, [ds_yfrac]        ror     ecx, 13        ror     eax, 16        mov      dl, cl        mov      bh, al        xor      cx, cx        and     ebx, 0x3fff        mov     [pixelcount],ecx        mov     ecx, [ds_x2]        mov     edi, [ds_y]        mov     esi, [ds_x1]        mov     edi, [ylookup+edi*4]        mov     ebp, ebx        add     edi, [columnofs+esi*4]        sub     esi, ecx                ;; pixel count        shr     ebp, 2        mov     ecx, [ds_colormap]        mov      ax, si        mov     esi, [ds_source]        sar      ax,1        jnc     near .midloop           ;; check parity;   summary; edx = high16bit xfrac[0..13], ah=ystep[16..24] al=xtep[14..21]; ebx = high16bit =0, bh=yfrac[16..24], bl=xfrac[14..21] ; ecx = colormap table cl=0 (colormap is aligned 8 bits); eax = high16bit yfrac[0..15], dx = count; esi = flat texture source; edi = screeen buffer destination; ebp = work register; pixelcount = high16bit xstep[0..13] rest to 0; tystep     = high16bit ystep[0..15] low 16 bit = 2 (increment of count)align 4.loop        add     eax, [tystep]         mov      cl, [esi+ebp]        adc      bh, dh         mov      cl, [ecx]        and      bh, 0x3f          mov   [edi], cl        mov     ebp, ebx                 inc     edi         shr     ebp, 2.midloop:        add     edx, [pixelcount]         mov      cl, [esi+ebp]        adc      bl, dl         mov      cl, [ecx]        mov     ebp, ebx          mov   [edi], cl        inc     edi         shr     ebp, 2        test    eax, 0xffff        jnz     near .loop.hdone: pop     ebx                     ;; restore register variables        pop     edi        pop     esi        pop     ebp                     ;; restore caller's stack frame pointer        ret[SECTION .data]obelix          dd      0etaussi         dd      0[SECTION CODE_SEG]cglobal R_DrawSpan_8_oldR_DrawSpan_8_old:        push    ebp                     ;; preserve caller's stack frame pointer        push    esi                     ;; preserve register variables        push    edi        push    ebx;;;; find loop count;;        mov     eax,[ds_x2]        inc     eax        sub     eax,[ds_x1]             ;; pixel count        mov     [pixelcount],eax        ;; save for final pixel        js near .hdone                  ;; nothing to scale        shr     eax,0x1                 ;; double pixel count        mov     [loopcount],eax;;;; build composite position;;        mov     ebp,[ds_xfrac]        shl     ebp,10        and     ebp,0xffff0000        mov     eax,[ds_yfrac]        shr     eax,6        and     eax,0xffff        mov     edi,[ds_y]        or      ebp,eax        mov     esi,[ds_source];;;; calculate screen dest;;        mov     edi,[ylookup+edi*4]        mov     eax,[ds_x1]        add     edi,[columnofs+eax*4];;;; build composite step;;        mov     ebx,[ds_xstep]        shl     ebx,10        and     ebx,0xffff0000        mov     eax,[ds_ystep]        shr     eax,6        and     eax,0xffff        or      ebx,eax        mov     [obelix],ebx        mov     [etaussi],esi;; %eax      aligned colormap;; %ebx      aligned colormap;; %ecx,%edx  scratch;; %esi      virtual source;; %edi      moving destination pointer;; %ebp      frac        mov     eax,[ds_colormap]        mov     ecx,ebp        add     ebp,ebx                 ;; advance frac pointer        shr     cx,10        rol     ecx,6        and     ecx,4095                ;; finish calculation for third pixel        mov     edx,ebp        shr     dx,10        rol     edx,6        add     ebp,ebx                 ;; advance frac pointer        and     edx,4095                ;; finish calculation for fourth pixel        mov     ebx,eax        mov     al,[esi+ecx]            ;; get first pixel        mov     bl,[esi+edx]            ;; get second pixel        test dword [pixelcount],0xfffffffe        mov     dl,[eax]                ;; color translate first pixel;;      movw    $0xf0f0,%dx             ;;see visplanes start        je      .hchecklast        mov     dh,[ebx]                ;; color translate second pixel        mov     esi,[loopcount]align 4.hdoubleloop:        mov     ecx,ebp        shr     cx,10        rol     ecx,6         add     ebp,[obelix]            ;; advance frac pointer        mov     [edi],dx                ;; write first pixel         and     ecx,4095                ;; finish calculation for third pixel        mov     edx,ebp        shr     dx,10        rol     edx,6         add     ecx,[etaussi]        and     edx,4095                ;; finish calculation for fourth pixel         mov     al,[ecx]                ;; get third pixel        add     ebp,[obelix]            ;; advance frac pointer         add     edx,[etaussi]        mov     bl,[edx]                ;; get fourth pixel         mov     dl,[eax]                ;; color translate third pixel        add     edi,byte +0x2           ;; advance to third pixel destination         dec     esi                     ;; done with loop?        mov     dh,[ebx]                ;; color translate fourth pixel         jne     .hdoubleloop;; check for final pixel.hchecklast:        test dword [pixelcount],0x1        je      .hdone        mov     [edi],dl                ;; write final pixel.hdone: pop     ebx                     ;; restore register variables        pop     edi        pop     esi        pop     ebp                     ;; restore caller's stack frame pointer        ret;; ========================================================================;;  Rasterization des segments d'un polyg鬾e textur

⌨️ 快捷键说明

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