mirror of
https://github.com/id-Software/wolf3d.git
synced 2026-03-19 16:39:29 +01:00
The Wolfenstein 3D source as originally released.
This commit is contained in:
100
WOLFSRC/WHACK_A.ASM
Normal file
100
WOLFSRC/WHACK_A.ASM
Normal file
@@ -0,0 +1,100 @@
|
||||
; WOLFHACK.ASM
|
||||
|
||||
.386C
|
||||
IDEAL
|
||||
MODEL MEDIUM,C
|
||||
|
||||
|
||||
;============================================================================
|
||||
|
||||
DATASEG
|
||||
|
||||
EXTRN mr_rowofs:WORD
|
||||
EXTRN mr_count:WORD
|
||||
EXTRN mr_xstep:WORD
|
||||
EXTRN mr_ystep:WORD
|
||||
EXTRN mr_xfrac:WORD
|
||||
EXTRN mr_yfrac:WORD
|
||||
EXTRN mr_dest:WORD
|
||||
|
||||
FARDATA
|
||||
|
||||
planepics db 8192 dup(?) ; // 4k of ceiling, 4k of floor
|
||||
PUBLIC planepics
|
||||
|
||||
|
||||
;============================================================================
|
||||
|
||||
CODESEG
|
||||
|
||||
;============================
|
||||
;
|
||||
; MapRow
|
||||
;
|
||||
;
|
||||
;============================
|
||||
|
||||
PROC MapRow
|
||||
PUBLIC MapRow
|
||||
push esi
|
||||
push edi
|
||||
push ebp
|
||||
push ds
|
||||
|
||||
mov bp,[mr_rowofs]
|
||||
mov cx,[mr_count]
|
||||
mov dx,[mr_ystep]
|
||||
shl edx,16
|
||||
mov dx,[mr_xstep]
|
||||
mov si,[mr_yfrac]
|
||||
shl esi,16
|
||||
mov si,[mr_xfrac]
|
||||
mov di,[mr_dest]
|
||||
mov ax,SEG planepics
|
||||
mov ds,ax
|
||||
mov ax,0a000h
|
||||
mov es,ax
|
||||
mov ax,1111111111110b
|
||||
|
||||
; eax color lookup
|
||||
; ebx scratch offset and pixel values
|
||||
; ecx loop counter
|
||||
; edx packed x / y step values
|
||||
; esi packed x / y fractional values
|
||||
; edi write pointer
|
||||
; ebp toprow to bottomrow delta
|
||||
; es: screenseg
|
||||
; ds: pictures
|
||||
|
||||
; mov al,[esi]
|
||||
; mov al,[eax]
|
||||
; mov [edi],al
|
||||
|
||||
; mov ax,[_variable+ebx+2]
|
||||
|
||||
|
||||
pixelloop:
|
||||
shld ebx,esi,22 ; shift y units in
|
||||
shld ebx,esi,7 ; shift x units in and one extra bit
|
||||
and bx,63*65*2 ; mask off extra top bits and 0 low bit
|
||||
add esi,edx ; position += step
|
||||
mov al,[bx]
|
||||
mov al,[eax]
|
||||
mov [es:di],al ; write ceiling pixel
|
||||
mov al,[bx+1]
|
||||
mov al,[eax]
|
||||
mov [es:di+bp],al ; write floor pixel
|
||||
inc di
|
||||
loop pixelloop
|
||||
|
||||
pop ds
|
||||
pop ebp
|
||||
pop edi
|
||||
pop esi
|
||||
|
||||
retf
|
||||
|
||||
ENDP
|
||||
|
||||
END
|
||||
|
||||
Reference in New Issue
Block a user