home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HOT Scene Stuff
/
hotscenestuffzyklop1996.iso
/
demos
/
sunknown
/
asmvoxel.asm
< prev
next >
Wrap
Assembly Source File
|
1994-04-07
|
6KB
|
447 lines
; ASMVOXEL
; Thomas H.
VOXX = 128
VOXY = 96
SMOOTHCUT = 10
AC_INDEX = 03c0h
MISC_OUTPUT = 03c2h
SC_INDEX = 03c4h
GC_INDEX = 03ceh
CRTC_INDEX = 03d4h
INPUT_STATUS_0 = 03dah
MAP_MASK = 02h
READ_MAP = 04h
BIT_MASK = 08h
public _lseg, _sseg, _hseg, _fseg, _alti, _asmvox, _interpolate
public _voxpos, _voypos, _ofraction, _copper_32, copper, _leapright, _asmsky
public _interlimit
.model large
.code
org 0
EVEN
copper db (3*96*128+32) dup (?)
_sseg dw ?
_hseg dw ?
_fseg dw ?
_lseg dw ?
_voxpos dw ?
_voypos dw ?
tempw dw ?
_copper_32 label dword
dw offset copper, seg copper
_leapright label dword
dw offset leap, seg leap
tempax dw ?
leap db 128 dup (20)
_alti db 0
_ofraction db ?
_interlimit db 64
fraction db ?
x db ?
y db ?
origx db ?
origy db ?
top db ?
forrigecol db ?
EVEN
.386
; ***** INTERPOLATE *****
_interpolate proc far
pusha
push ds
mov ax,_sseg
mov ds,ax
mov es,ax
xor si,si
mov di,256
mov ch,64
mov edx,0fefefefeh
next_right:
mov cl,128
mov eax,[si]
next_down:
add si,512
mov ebx,[si]
add eax,ebx
and eax,edx
shr eax,1
mov [di],eax
add di,512
mov eax,ebx
dec cl
jnz next_down
sub si,512*127-4
sub di,512*127-4
dec ch
jnz next_right
pop ds
popa
retf
_interpolate endp
; ***** ASMVOX *****
_asmvox proc far
pusha
push ds
mov ds,_sseg
mov es,_hseg
mov fs,_fseg
mov gs,_lseg
lds bp,_copper_32
mov ds,_sseg
mov ax,_voxpos
mov _ofraction,al
mov origx,ah
mov ax,_voypos
mov origy,al
mov x,128
xor di,di
next_x:
mov bx,128
sub bl,x
mov bl,leap[bx]
mov top,bl
add di,bx
mov forrigecol,0
mov y,95
next_yxx:
mov ebx,cs:[bp]
add bp,3
ror ebx,8
mov fraction,bh
rol ebx,8
add bh,origy
mov al,_ofraction
sub fraction,al
adc bl,origx
mov si,bx
mov bl,es:[si]
sub bl,_alti
mov bh,y
mov dl,gs:[bx]
mov cl,fraction
mov al,cl
mul dl
mov dx,ax
mov bx,si
inc bl
mov bl,es:[bx]
sub bl,_alti
mov bh,y
mov ch,gs:[bx]
mov al,cl
not al
mul ch
add ax,dx
cmp ah,top
jbe not_high_enoughxx
mov dh,ah
sub dh,top
mov top,ah
mov bx,si
mov al,fs:[bx]
mul cl
mov dl,ah
inc bl
mov al,fs:[bx]
dec bl
not cl
mul cl
add ah,dl
cmp dh,2
ja over2xx
je akkurat2xx
mov [di],ah
inc di
mov forrigecol,ah
dec y
cmp y,64
jne next_yxx
jmp next_yyy
akkurat2xx:
mov al,forrigecol
or al,al
jz toingengammelxx
add al,ah
shr al,1
mov [di],ax
add di,2
mov forrigecol,ah
dec y
cmp y,64
jne next_yxx
jmp next_yyy
toingengammelxx:
mov al,ah
mov [di],ax
add di,2
mov forrigecol,ah
dec y
cmp y,64
jne next_yxx
jmp next_yyy
over2xx:
mov bl,dh
mov dh,forrigecol
mov forrigecol,ah
or dh,dh
jz notfrombeforexx
dec bl
xor al,al
mov cx,dx
sub ah,dh
xor bh,bh
cwd
idiv bx
mov [di],ch
inc di
nextbortxx:
add cx,ax
mov [di],ch
inc di
dec bl
jnz nextbortxx
dec y
cmp y,64
jne next_yxx
jmp short next_yyy
notfrombeforexx:
nextnotfrombeforexx:
mov [di],ah
inc di
dec bl
jnz nextnotfrombeforexx
dec y
cmp y,64
jne next_yxx
jmp short next_yyy
not_high_enoughxx:
mov forrigecol,0
drawetokxx:
dec y
cmp y,64
jne next_yxx
; ******************************************************************
next_yyy:
mov bx,cs:[bp]
add bp,3
add bh,origy
add bl,origx
mov si,bx
mov bl,es:[si]
sub bl,_alti
mov bh,y
mov ah,gs:[bx]
cmp ah,top
jbe not_high_enoughyy
mov dh,ah
sub dh,top
mov top,ah
mov bx,si
mov ah,fs:[bx]
cmp dh,2
ja over2yy
je akkurat2yy
mov [di],ah
inc di
mov forrigecol,ah
dec y
jns next_yyy
jmp thatsyy
akkurat2yy:
mov al,forrigecol
or al,al
jz toingengammelyy
add al,ah
shr al,1
mov [di],ax
add di,2
mov forrigecol,ah
dec y
jns next_yyy
jmp thatsyy
toingengammelyy:
mov al,ah
mov [di],ax
add di,2
mov forrigecol,ah
dec y
jns next_yyy
jmp thatsyy
over2yy:
mov bl,dh
mov dh,forrigecol
mov forrigecol,ah
or dh,dh
jz notfrombeforeyy
dec bl
xor al,al
mov cx,dx
sub ah,dh
xor bh,bh
cwd
idiv bx
mov [di],ch
inc di
nextbortyy:
add cx,ax
mov [di],ch
inc di
dec bl
jnz nextbortyy
dec y
jns next_yyy
jmp short thatsyy
notfrombeforeyy:
nextnotfrombeforeyy:
mov [di],ah
inc di
dec bl
jnz nextnotfrombeforeyy
dec y
jns next_yyy
jmp short thatsyy
not_high_enoughyy:
mov forrigecol,0
drawetokyy:
dec y
jns next_yyy
thatsyy:
xor eax,eax
mov [di],eax
or di,255
mov al,top
sub al,2 ; fixme!
mov [di],al
add di,257
dec x
jnz next_x
pop ds
popa
retf
_asmvox endp
; ***** ASMSKY *****
_asmsky proc far
xor di,di
mov dl,128
mov si,-257
mov dh,es:[si]
next_double:
mov al,es:[di+255]
mov ah,al
cmp al,dh
jb allavest
mov al,dh
allavest:
mov dh,ah
mov cx,256
xor ah,ah
sub cx,ax
shr cx,1
jnc notodd
add di,ax
add bx,ax
mov ah,[bx]
mov es:[di],ah
inc bh
mov ah,[bx]
mov es:[di+256],ah
dec bh
xor ah,ah
sub di,ax
sub bx,ax
inc ax
notodd:
shr cx,1
jnc quadrupel
mov tempax,ax
add di,ax
add bx,ax
mov ax,[bx]
mov es:[di],ax
inc bh
mov ax,[bx]
mov es:[di+256],ax
dec bh
mov ax,tempax
sub di,ax
sub bx,ax
add ax,2
quadrupel:
mov si,bx
add di,ax
add si,ax
mov bp,cx
rep movsd
inc bh
mov si,bx
add di,ax
add si,ax
mov cx,bp
rep movsd
inc bh
dec dl
jnz next_double
retf
_asmsky endp
end