wolf3d

The original open source release of Wolfenstein 3D
Log | Files | Refs

ID_VH_A.ASM (1251B)


      1 ; ID_VL.ASM
      2 
      3 	IDEAL
      4 	MODEL	MEDIUM,C
      5 
      6 	INCLUDE	'ID_VL.EQU'
      7 
      8 SCREENSEG	=	0a000h
      9 
     10 UPDATEWIDE	=	20
     11 UPDATEHIGH	=	13
     12 
     13 	DATASEG
     14 
     15 
     16 EXTRN	bufferofs			:WORD
     17 EXTRN	displayofs			:WORD
     18 EXTRN	ylookup				:WORD
     19 EXTRN	linewidth			:WORD
     20 EXTRN	blockstarts			:WORD	;offsets from drawofs for each update block
     21 
     22 EXTRN	update				:BYTE
     23 
     24 	CODESEG
     25 
     26 
     27 ;=================
     28 ;
     29 ; VH_UpdateScreen
     30 ;
     31 ;=================
     32 
     33 PROC	VH_UpdateScreen
     34 PUBLIC	VH_UpdateScreen
     35 USES	si,di
     36 
     37 	mov	dx,SC_INDEX
     38 	mov	ax,SC_MAPMASK+15*256
     39 	out	dx,ax
     40 
     41 	mov dx,GC_INDEX
     42 	mov al,GC_MODE
     43 	out dx,al
     44 
     45 	inc dx
     46 	in	al,dx
     47 	and al,252
     48 	or	al,1
     49 	out dx,al
     50 
     51 	mov	bx,UPDATEWIDE*UPDATEHIGH-1		; bx is the tile number
     52 	mov	dx,[linewidth]
     53 
     54 ;
     55 ; see if the tile needs to be copied
     56 ;
     57 @@checktile:
     58 	test	[update+bx],1
     59 	jnz	@@copytile
     60 @@next:
     61 	dec	bx
     62 	jns	@@checktile
     63 
     64 ;
     65 ; done
     66 ;
     67 	mov dx,GC_INDEX+1
     68 	in	al,dx
     69 	and al,NOT 3
     70 	or	al,0
     71 	out dx,al
     72 	ret
     73 
     74 ;
     75 ; copy a tile
     76 ;
     77 @@copytile:
     78 	mov	[update+bx],0
     79 	shl	bx,1
     80 	mov	si,[blockstarts+bx]
     81 	shr	bx,1
     82 	mov	di,si
     83 	add	si,[bufferofs]
     84 	add	di,[displayofs]
     85 
     86 	mov	ax,SCREENSEG
     87 	mov	ds,ax
     88 
     89 REPT	16
     90 	mov	al,[si]
     91 	mov	[di],al
     92 	mov	al,[si+1]
     93 	mov	[di+1],al
     94 	mov	al,[si+2]
     95 	mov	[di+2],al
     96 	mov	al,[si+3]
     97 	mov	[di+3],al
     98 	add	si,dx
     99 	add	di,dx
    100 ENDM
    101 
    102 	mov	ax,ss
    103 	mov	ds,ax
    104 	jmp	@@next
    105 
    106 ENDP
    107 
    108 
    109 	END
    110