diff -c -r quake2-r0.0.8-linux/Makefile quake2-r0.0.8/Makefile
*** quake2-r0.0.8-linux/Makefile	Fri Jan  4 12:58:26 2002
--- quake2-r0.0.8/Makefile	Mon Jan 21 03:18:29 2002
***************
*** 26,33 ****
--- 26,35 ----
  OSTYPE := $(shell uname -s)
  
  ifneq ($(OSTYPE),Linux)
+ ifneq ($(OSTYPE),FreeBSD)
  $(error OS $(OSTYPE) is currently not supported)
  endif
+ endif
  
  # this nice line comes from the linux kernel makefile
  ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc/ -e s/sparc64/sparc/ -e s/arm.*/arm/ -e s/sa110/arm/ -e s/alpha/axp/)
***************
*** 92,103 ****
--- 94,113 ----
  
  DEBUG_CFLAGS=$(BASE_CFLAGS) -g
  
+ ifeq ($(OSTYPE),FreeBSD)
+ LDFLAGS=-lm
+ endif
+ ifeq ($(OSTYPE),Linux)
  LDFLAGS=-lm -ldl
+ endif
  
  SVGALDFLAGS=-lvga
  
  XCFLAGS=
  XLDFLAGS=-L/usr/X11R6/lib -lX11 -lXext -lXxf86dga -lXxf86vm
+ ifeq ($(OSTYPE),FreeBSD)
+ XINCLUDES=-I/usr/X11R6/include
+ endif
  
  SDLCFLAGS=$(shell sdl-config --cflags)
  SDLLDFLAGS=$(shell sdl-config --libs)
***************
*** 118,125 ****
  SHLIBLDFLAGS=-shared
  
  DO_CC=$(CC) $(CFLAGS) -o $@ -c $<
! DO_SHLIB_CC=$(CC) $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
! DO_GL_SHLIB_CC=$(CC) $(CFLAGS) $(SHLIBCFLAGS) $(GLCFLAGS) -o $@ -c $<
  DO_AS=$(CC) $(CFLAGS) -DELF -x assembler-with-cpp -o $@ -c $<
  DO_SHLIB_AS=$(CC) $(CFLAGS) $(SHLIBCFLAGS) -DELF -x assembler-with-cpp -o $@ -c $<
  
--- 128,135 ----
  SHLIBLDFLAGS=-shared
  
  DO_CC=$(CC) $(CFLAGS) -o $@ -c $<
! DO_SHLIB_CC=$(CC) $(CFLAGS) $(SHLIBCFLAGS) $(XINCLUDES) -o $@ -c $<
! DO_GL_SHLIB_CC=$(CC) $(CFLAGS) $(SHLIBCFLAGS) $(XINCLUDES) $(GLCFLAGS) -o $@ -c $<
  DO_AS=$(CC) $(CFLAGS) -DELF -x assembler-with-cpp -o $@ -c $<
  DO_SHLIB_AS=$(CC) $(CFLAGS) $(SHLIBCFLAGS) -DELF -x assembler-with-cpp -o $@ -c $<
  
Only in quake2-r0.0.8: debugi386
Only in quake2-r0.0.8: releasei386
diff -c -r quake2-r0.0.8-linux/src/client/snd_mix.c quake2-r0.0.8/src/client/snd_mix.c
*** quake2-r0.0.8-linux/src/client/snd_mix.c	Fri Dec 28 00:04:23 2001
--- quake2-r0.0.8/src/client/snd_mix.c	Sun Jan 20 22:16:54 2002
***************
*** 30,36 ****
  
  void S_WriteLinearBlastStereo16 (void);
  
! #if !(defined __linux__ && defined __i386__)
  #if	!id386
  
  void S_WriteLinearBlastStereo16 (void)
--- 30,36 ----
  
  void S_WriteLinearBlastStereo16 (void);
  
! #if !((defined __linux__ || defined __FreeBSD__) && defined __i386__)
  #if	!id386
  
  void S_WriteLinearBlastStereo16 (void)
***************
*** 362,368 ****
  }
  
  
! #if !(defined __linux__ && defined __i386__)
  #if	!id386
  
  void S_PaintChannelFrom8 (channel_t *ch, sfxcache_t *sc, int count, int offset)
--- 362,368 ----
  }
  
  
! #if !((defined __linux__ || __FreeBSD__) && defined __i386__)
  #if	!id386
  
  void S_PaintChannelFrom8 (channel_t *ch, sfxcache_t *sc, int count, int offset)
diff -c -r quake2-r0.0.8-linux/src/game/q_shared.c quake2-r0.0.8/src/game/q_shared.c
*** quake2-r0.0.8-linux/src/game/q_shared.c	Fri Dec 28 02:05:47 2001
--- quake2-r0.0.8/src/game/q_shared.c	Sun Jan 20 22:22:43 2002
***************
*** 345,351 ****
  Returns 1, 2, or 1 + 2
  ==================
  */
! #if !id386 || defined __linux__ 
  int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *p)
  {
  	float	dist1, dist2;
--- 345,351 ----
  Returns 1, 2, or 1 + 2
  ==================
  */
! #if !id386 || defined __linux__ || defined __FreeBSD__
  int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *p)
  {
  	float	dist1, dist2;
diff -c -r quake2-r0.0.8-linux/src/linux/cd_linux.c quake2-r0.0.8/src/linux/cd_linux.c
*** quake2-r0.0.8-linux/src/linux/cd_linux.c	Fri Dec 28 00:04:24 2001
--- quake2-r0.0.8/src/linux/cd_linux.c	Tue Jan 22 02:13:59 2002
***************
*** 31,37 ****
  #include <time.h>
  #include <errno.h>
  
! #include <linux/cdrom.h>
  
  #include "../client/client.h"
  
--- 31,41 ----
  #include <time.h>
  #include <errno.h>
  
! #if defined(__FreeBSD__)
!   #include <sys/cdio.h>
! #else
!   #include <linux/cdrom.h>
! #endif
  
  #include "../client/client.h"
  
***************
*** 61,68 ****
--- 65,77 ----
  	if (cdfile == -1 || !enabled)
  		return; // no cd init'd
  
+ #if defined(__FreeBSD__)
+ 	if ( ioctl(cdfile, CDIOCEJECT) == -1 ) 
+ 		Com_DPrintf("ioctl cdioeject failed\n");
+ #else
  	if ( ioctl(cdfile, CDROMEJECT) == -1 ) 
  		Com_DPrintf("ioctl cdromeject failed\n");
+ #endif
  }
  
  
***************
*** 71,100 ****
--- 80,136 ----
  	if (cdfile == -1 || !enabled)
  		return; // no cd init'd
  
+ #if defined(__FreeBSD__)
+ 	if ( ioctl(cdfile, CDIOCCLOSE) == -1 ) 
+ 		Com_DPrintf("ioctl cdiocclose failed\n");
+ #else
  	if ( ioctl(cdfile, CDROMCLOSETRAY) == -1 ) 
  		Com_DPrintf("ioctl cdromclosetray failed\n");
+ #endif
  }
  
  static int CDAudio_GetAudioDiskInfo(void)
  {
+ #if defined(__FreeBSD__)
+ 	struct ioc_toc_header tochdr;
+ #endif
+ #ifdef __linux__
  	struct cdrom_tochdr tochdr;
+ #endif
  
  	cdValid = false;
  
+ #if defined(__FreeBSD__)
+ 	if ( ioctl(cdfile, CDIOREADTOCHEADER, &tochdr) == -1 ) 
+     {
+       Com_DPrintf("ioctl cdioreadtocheader failed\n");
+ #endif
+ #ifdef __linux__
  	if ( ioctl(cdfile, CDROMREADTOCHDR, &tochdr) == -1 ) 
      {
        Com_DPrintf("ioctl cdromreadtochdr failed\n");
+ #endif
  	  return -1;
      }
  
+ #if defined(__FreeBSD__)
+ 	if (tochdr.starting_track < 1)
+ #endif
+ #ifdef __linux__
  	if (tochdr.cdth_trk0 < 1)
+ #endif
  	{
  		Com_DPrintf("CDAudio: no music tracks\n");
  		return -1;
  	}
  
  	cdValid = true;
+ #if defined(__FreeBSD__)
+ 	maxTrack = tochdr.ending_track;
+ #endif
+ #ifdef __linux__
  	maxTrack = tochdr.cdth_trk1;
+ #endif
  
  	return 0;
  }
***************
*** 102,109 ****
--- 138,153 ----
  
  void CDAudio_Play(int track, qboolean looping)
  {
+ #if defined(__FreeBSD__)
+ 	struct ioc_read_toc_entry entry;
+ 	struct cd_toc_entry toc_buffer;
+ 	struct ioc_play_track ti;
+ #endif
+ 
+ #ifdef __linux__
  	struct cdrom_tocentry entry;
  	struct cdrom_ti ti;
+ #endif
  
  	if (cdfile == -1 || !enabled)
  		return;
***************
*** 123,128 ****
--- 167,188 ----
  		return;
  	}
  
+ #if defined(__FreeBSD__)
+ 	#define CDROM_DATA_TRACK 4
+ 	bzero((char *)&toc_buffer, sizeof(toc_buffer));
+ 	entry.data_len = sizeof(toc_buffer);
+ 	entry.data = &toc_buffer;
+ 	// don't try to play a non-audio track
+ 	entry.starting_track = track;
+ 	entry.address_format = CD_MSF_FORMAT;
+     if ( ioctl(cdfile, CDIOREADTOCENTRYS, &entry) == -1 )
+ 	{
+ 		Com_DPrintf("ioctl cdromreadtocentry failed\n");
+ 		return;
+ 	}
+ 	if (toc_buffer.control == CDROM_DATA_TRACK)
+ #endif
+ #if defined(__linux__)
  	// don't try to play a non-audio track
  	entry.cdte_track = track;
  	entry.cdte_format = CDROM_MSF;
***************
*** 132,142 ****
--- 192,204 ----
  		return;
  	}
  	if (entry.cdte_ctrl == CDROM_DATA_TRACK)
+ #endif
  	{
  		Com_Printf("CDAudio: track %i is not audio\n", track);
  		return;
  	}
  
+ 
  	if (playing)
  	{
  		if (playTrack == track)
***************
*** 144,161 ****
--- 206,241 ----
  		CDAudio_Stop();
  	}
  
+ #if defined(__FreeBSD__)
+ 	ti.start_track = track;
+ 	ti.end_track = track;
+ 	ti.start_index = 1;
+ 	ti.end_index = 99;
+ #endif
+ #if defined(__linux__)
  	ti.cdti_trk0 = track;
  	ti.cdti_trk1 = track;
  	ti.cdti_ind0 = 1;
  	ti.cdti_ind1 = 99;
+ #endif
  
+ #if defined(__FreeBSD__)
+ 	if ( ioctl(cdfile, CDIOCPLAYTRACKS, &ti) == -1 ) 
+ #endif
+ #if defined(__linux__)
  	if ( ioctl(cdfile, CDROMPLAYTRKIND, &ti) == -1 ) 
+ #endif
      {
  		Com_DPrintf("ioctl cdromplaytrkind failed\n");
  		return;
      }
  
+ #if defined(__FreeBSD__)
+ 	if ( ioctl(cdfile, CDIOCRESUME) == -1 ) 
+ #endif
+ #if defined(__linux__)
  	if ( ioctl(cdfile, CDROMRESUME) == -1 ) 
+ #endif
  		Com_DPrintf("ioctl cdromresume failed\n");
  
  	playLooping = looping;
***************
*** 175,182 ****
--- 255,268 ----
  	if (!playing)
  		return;
  
+ #if defined(__FreeBSD__)
+ 	if ( ioctl(cdfile, CDIOCSTOP) == -1 )
+ 		Com_DPrintf("ioctl cdiocstop failed (%d)\n", errno);
+ #endif
+ #if defined(__linux__)
  	if ( ioctl(cdfile, CDROMSTOP) == -1 )
  		Com_DPrintf("ioctl cdromstop failed (%d)\n", errno);
+ #endif
  
  	wasPlaying = false;
  	playing = false;
***************
*** 190,197 ****
--- 276,289 ----
  	if (!playing)
  		return;
  
+ #if defined(__FreeBSD__)
+ 	if ( ioctl(cdfile, CDIOCPAUSE) == -1 ) 
+ 		Com_DPrintf("ioctl cdiocpause failed\n");
+ #endif
+ #if defined(__linux__)
  	if ( ioctl(cdfile, CDROMPAUSE) == -1 ) 
  		Com_DPrintf("ioctl cdrompause failed\n");
+ #endif
  
  	wasPlaying = playing;
  	playing = false;
***************
*** 209,216 ****
--- 301,314 ----
  	if (!wasPlaying)
  		return;
  	
+ #if defined(__FreeBSD__)
+ 	if ( ioctl(cdfile, CDIOCRESUME) == -1 ) 
+ 		Com_DPrintf("ioctl cdiocresume failed\n");
+ #endif
+ #if defined(__linux__)
  	if ( ioctl(cdfile, CDROMRESUME) == -1 ) 
  		Com_DPrintf("ioctl cdromresume failed\n");
+ #endif
  	playing = true;
  }
  
***************
*** 334,340 ****
--- 432,444 ----
  
  void CDAudio_Update(void)
  {
+ #if defined(__FreeBSD__)
+ 	struct ioc_read_subchannel subchnl;
+ 	struct cd_sub_channel_info data;
+ #endif
+ #if defined(__linux__)
  	struct cdrom_subchnl subchnl;
+ #endif
  	static time_t lastchk;
  
  	if (cdfile == -1 || !enabled)
***************
*** 358,363 ****
--- 462,486 ----
  
  	if (playing && lastchk < time(NULL)) {
  		lastchk = time(NULL) + 2; //two seconds between chks
+ #if defined(__FreeBSD__)
+ 		subchnl.address_format = CD_MSF_FORMAT;
+ 		subchnl.data_format = CD_CURRENT_POSITION;
+ 		subchnl.data_len = sizeof(data);
+ 		subchnl.track = playTrack;
+ 		subchnl.data = &data;
+ 		if (ioctl(cdfile, CDIOCREADSUBCHANNEL, &subchnl) == -1 ) {
+ 			Com_DPrintf("ioctl cdiocreadsubchannel failed\n");
+ 			playing = false;
+ 			return;
+ 		}
+ 		if (subchnl.data->header.audio_status != CD_AS_PLAY_IN_PROGRESS &&
+ 			subchnl.data->header.audio_status != CD_AS_PLAY_PAUSED) {
+ 			playing = false;
+ 			if (playLooping)
+ 				CDAudio_Play(playTrack, true);
+ 		}
+ #endif
+ #if defined(__linux__)
  		subchnl.cdsc_format = CDROM_MSF;
  		if (ioctl(cdfile, CDROMSUBCHNL, &subchnl) == -1 ) {
  			Com_DPrintf("ioctl cdromsubchnl failed\n");
***************
*** 370,375 ****
--- 493,499 ----
  			if (playLooping)
  				CDAudio_Play(playTrack, true);
  		}
+ #endif
  	}
  }
  
diff -c -r quake2-r0.0.8-linux/src/linux/gl_glx.c quake2-r0.0.8/src/linux/gl_glx.c
*** quake2-r0.0.8-linux/src/linux/gl_glx.c	Wed Jan  2 21:10:14 2002
--- quake2-r0.0.8/src/linux/gl_glx.c	Mon Jan 21 03:39:29 2002
***************
*** 34,40 ****
  #include <termios.h>
  #include <sys/ioctl.h>
  #include <sys/stat.h>
! #include <sys/vt.h>
  #include <stdarg.h>
  #include <stdio.h>
  #include <signal.h>
--- 34,42 ----
  #include <termios.h>
  #include <sys/ioctl.h>
  #include <sys/stat.h>
! #if defined(__linux__)
! #include <sys/vt.h> /* does this even do anything */
! #endif
  #include <stdarg.h>
  #include <stdio.h>
  #include <signal.h>
diff -c -r quake2-r0.0.8-linux/src/linux/glw_linux.h quake2-r0.0.8/src/linux/glw_linux.h
*** quake2-r0.0.8-linux/src/linux/glw_linux.h	Fri Dec 28 00:04:24 2001
--- quake2-r0.0.8/src/linux/glw_linux.h	Mon Jan 21 03:19:23 2002
***************
*** 18,24 ****
  
  */
  #ifndef __linux__
! #error You shouldnt be including this file on non-Linux platforms
  #endif
  
  #ifndef __GLW_LINUX_H__
--- 18,26 ----
  
  */
  #ifndef __linux__
! #ifndef __FreeBSD__
! #error You shouldnt be including this file on non-unix platforms
! #endif
  #endif
  
  #ifndef __GLW_LINUX_H__
diff -c -r quake2-r0.0.8-linux/src/linux/q_shlinux.c quake2-r0.0.8/src/linux/q_shlinux.c
*** quake2-r0.0.8-linux/src/linux/q_shlinux.c	Mon Dec 31 11:34:39 2001
--- quake2-r0.0.8/src/linux/q_shlinux.c	Mon Jan 21 02:57:04 2002
***************
*** 31,36 ****
--- 31,40 ----
  
  #include "../qcommon/qcommon.h"
  
+ #if defined(__FreeBSD__)
+ #include <machine/param.h>
+ #endif
+ 
  //===============================================================================
  
  byte *membase;
***************
*** 42,49 ****
--- 46,60 ----
  	// reserve a huge chunk of memory, but don't commit any yet
  	maxhunksize = maxsize + sizeof(int);
  	curhunksize = 0;
+ 
+ #if (defined __FreeBSD__)
+ 	membase = mmap(0, maxhunksize, PROT_READ|PROT_WRITE, 
+ 		MAP_PRIVATE|MAP_ANON, -1, 0);
+ #else
  	membase = mmap(0, maxhunksize, PROT_READ|PROT_WRITE, 
  		MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+ #endif
+ 
  	if (membase == NULL || membase == (byte *)-1)
  		Sys_Error("unable to virtual allocate %d bytes", maxsize);
  
***************
*** 69,75 ****
--- 80,105 ----
  {
  	byte *n;
  
+ #if defined(__FreeBSD__)
+   size_t old_size = maxhunksize;
+   size_t new_size = curhunksize + sizeof(int);
+   void * unmap_base;
+   size_t unmap_len;
+ 
+   new_size = round_page(new_size);
+   old_size = round_page(old_size);
+   if (new_size > old_size)
+   	n = 0; /* error */
+   else if (new_size < old_size)
+   {
+     unmap_base = (caddr_t)(membase + new_size);
+     unmap_len = old_size - new_size;
+     n = munmap(unmap_base, unmap_len) + membase;
+   }
+ #endif
+ #if defined(__linux__)
  	n = mremap(membase, maxhunksize, curhunksize + sizeof(int), 0);
+ #endif
  	if (n != membase)
  		Sys_Error("Hunk_End:  Could not remap virtual block (%d)", errno);
  	*((int *)membase) = curhunksize + sizeof(int);
diff -c -r quake2-r0.0.8-linux/src/linux/snd_linux.c quake2-r0.0.8/src/linux/snd_linux.c
*** quake2-r0.0.8-linux/src/linux/snd_linux.c	Fri Jan  4 12:35:08 2002
--- quake2-r0.0.8/src/linux/snd_linux.c	Mon Jan 21 02:06:48 2002
***************
*** 25,31 ****
--- 25,36 ----
  #include <sys/mman.h>
  #include <sys/shm.h>
  #include <sys/wait.h>
+ #if defined(__FreeBSD__)
+ #include <sys/soundcard.h>
+ #endif
+ #if defined(__linux__)
  #include <linux/soundcard.h>
+ #endif
  #include <stdio.h>
  
  #include "../client/client.h"
diff -c -r quake2-r0.0.8-linux/src/linux/sys_linux.c quake2-r0.0.8/src/linux/sys_linux.c
*** quake2-r0.0.8-linux/src/linux/sys_linux.c	Fri Jan  4 12:58:26 2002
--- quake2-r0.0.8/src/linux/sys_linux.c	Sun Jan 20 22:21:55 2002
***************
*** 35,41 ****
  #include <sys/wait.h>
  #include <sys/mman.h>
  #include <errno.h>
! #include <mntent.h>
  
  #include <dlfcn.h>
  
--- 35,43 ----
  #include <sys/wait.h>
  #include <sys/mman.h>
  #include <errno.h>
! #if defined (__linux__)
!   #include <mntent.h> */
! #endif
  
  #include <dlfcn.h>
  
diff -c -r quake2-r0.0.8-linux/src/ref_soft/r_alias.c quake2-r0.0.8/src/ref_soft/r_alias.c
*** quake2-r0.0.8-linux/src/ref_soft/r_alias.c	Wed Jan  2 21:10:14 2002
--- quake2-r0.0.8/src/ref_soft/r_alias.c	Mon Jan 21 02:58:10 2002
***************
*** 418,424 ****
  R_AliasTransformFinalVerts
  ================
  */
! #if id386 && !defined __linux__
  void R_AliasTransformFinalVerts( int numpoints, finalvert_t *fv, dtrivertx_t *oldv, dtrivertx_t *newv )
  {
  	float  lightcos;
--- 418,424 ----
  R_AliasTransformFinalVerts
  ================
  */
! #if id386 && !defined __linux__ && !defined __FreeBSD__
  void R_AliasTransformFinalVerts( int numpoints, finalvert_t *fv, dtrivertx_t *oldv, dtrivertx_t *newv )
  {
  	float  lightcos;
diff -c -r quake2-r0.0.8-linux/src/ref_soft/r_part.c quake2-r0.0.8/src/ref_soft/r_part.c
*** quake2-r0.0.8-linux/src/ref_soft/r_part.c	Wed Jan  2 21:10:14 2002
--- quake2-r0.0.8/src/ref_soft/r_part.c	Mon Jan 21 02:59:27 2002
***************
*** 34,40 ****
  
  static partparms_t partparms;
  
! #if id386 && !defined __linux__
  
  static unsigned s_prefetch_address;
  
--- 34,40 ----
  
  static partparms_t partparms;
  
! #if id386 && !defined __linux__ && !defined __FreeBSD__
  
  static unsigned s_prefetch_address;
  
***************
*** 606,612 ****
  	VectorScale( vup, yscaleshrink, r_pup );
  	VectorCopy( vpn, r_ppn );
  
! #if id386 && !defined __linux__
  	__asm fldcw word ptr [fpu_sp24_cw]
  #endif
  
--- 606,612 ----
  	VectorScale( vup, yscaleshrink, r_pup );
  	VectorCopy( vpn, r_ppn );
  
! #if id386 && !defined __linux__ && !defined __FreeBSD__
  	__asm fldcw word ptr [fpu_sp24_cw]
  #endif
  
***************
*** 623,629 ****
  		partparms.particle = p;
  		partparms.color    = p->color;
  
! #if id386 && !defined __linux__
  		if ( i < r_newrefdef.num_particles-1 )
  			s_prefetch_address = ( unsigned int ) ( p + 1 );
  		else
--- 623,629 ----
  		partparms.particle = p;
  		partparms.color    = p->color;
  
! #if id386 && !defined __linux__ && !defined __FreeBSD__
  		if ( i < r_newrefdef.num_particles-1 )
  			s_prefetch_address = ( unsigned int ) ( p + 1 );
  		else
***************
*** 633,639 ****
  		R_DrawParticle();
  	}
  
! #if id386 && !defined __linux__
  	__asm fldcw word ptr [fpu_chop_cw]
  #endif
  
--- 633,639 ----
  		R_DrawParticle();
  	}
  
! #if id386 && !defined __linux__ && !defined __FreeBSD__
  	__asm fldcw word ptr [fpu_chop_cw]
  #endif
  
diff -c -r quake2-r0.0.8-linux/src/ref_soft/r_polyse.c quake2-r0.0.8/src/ref_soft/r_polyse.c
*** quake2-r0.0.8-linux/src/ref_soft/r_polyse.c	Fri Dec 28 00:04:24 2001
--- quake2-r0.0.8/src/ref_soft/r_polyse.c	Mon Jan 21 03:00:13 2002
***************
*** 411,417 ****
  R_PolysetCalcGradients
  ================
  */
! #if id386 && !defined __linux__
  void R_PolysetCalcGradients( int skinwidth )
  {
  	static float xstepdenominv, ystepdenominv, t0, t1;
--- 411,417 ----
  R_PolysetCalcGradients
  ================
  */
! #if id386 && !defined __linux__ && !defined __FreeBSD__
  void R_PolysetCalcGradients( int skinwidth )
  {
  	static float xstepdenominv, ystepdenominv, t0, t1;
