RTSをoffにしたままFreeBSDでハードフローなし通信を行なえるように
するためのパッチです。このパッチをカーネルにあてることで、FreeBSD
でもケーブルの改造なしでqvplayが使えるようになる「はず」です。
（情報提供ありがとうございます。＞下川＠東大さん）
なお、このパッチはRTS制御のためのofficialなパッチではありませんし、
完全なパッチでもありません。このパッチのために予期せぬ動作を
ひき起こす可能性も十分にあります。
各自の責任において利用してください。

！！なお、FreeBSDの2.2 Releaseでは以下のパッチは必要ありません。

パッチをあてるソース/sys/i386/isa/sio.c
*** sio.c~~	Mon Nov  4 03:21:16 1996
--- sio.c	Thu Nov 14 01:29:13 1996
***************
*** 1645,1648 ****
--- 1645,1652 ----
  		(void)commctl(com, TIOCM_DTR, DMBIC);
  		break;
+ 	/*
+ 	 * XXX should disallow changing MCR_RTS if CS_RTS_IFLOW is set.  The
+ 	 * changes get undone on the next call to comparam().
+ 	 */
  	case TIOCMSET:
  		(void)commctl(com, *(int *)data, DMSET);
***************
*** 1750,1760 ****
  			 * there is room in the high-level buffer.
  			 */
- 			/*
- 			 * XXX this used not to look at CS_RTS_IFLOW.  The
- 			 * change is to allow full control of MCR_RTS via
- 			 * ioctls after turning CS_RTS_IFLOW off.  Check
- 			 * for races.  We shouldn't allow the ioctls while
- 			 * CS_RTS_IFLOW is on.
- 			 */
  			if ((com->state & CS_RTS_IFLOW)
  			    && !(com->mcr_image & MCR_RTS)
--- 1754,1757 ----
***************
*** 1986,1993 ****
  	if (!(tp->t_state & TS_TTSTOP))
  		com->state |= CS_TTGO;
! 	if (cflag & CRTS_IFLOW)
! 		com->state |= CS_RTS_IFLOW;	/* XXX - secondary changes? */
! 	else
  		com->state &= ~CS_RTS_IFLOW;
  
  	/*
--- 1983,2002 ----
  	if (!(tp->t_state & TS_TTSTOP))
  		com->state |= CS_TTGO;
! 	if (cflag & CRTS_IFLOW) {
! 		com->state |= CS_RTS_IFLOW;
! 		/*
! 		 * If CS_RTS_IFLOW just changed from off to on, the change
! 		 * needs to be propagated to MCR_RTS.  This isn't urgent,
! 		 * so do it later by calling comstart() instead of repeating
! 		 * a lot of code from comstart() here.
! 		 */
! 	} else if (com->state & CS_RTS_IFLOW) {
  		com->state &= ~CS_RTS_IFLOW;
+ 		/*
+ 		 * CS_RTS_IFLOW just changed from on to off.  Force MCR_RTS
+ 		 * on here, since comstart() won't do it later.
+ 		 */
+ 		outb(com->modem_ctl_port, com->mcr_image |= MCR_RTS);
+ 	}
  
  	/*
***************
*** 2015,2018 ****
--- 2024,2028 ----
  	enable_intr();
  	splx(s);
+ 	comstart(tp);
  	return (0);
  }
***************
*** 2038,2047 ****
  			outb(com->modem_ctl_port, com->mcr_image &= ~MCR_RTS);
  	} else {
! 		/*
! 		 * XXX don't raise MCR_RTS if CTS_RTS_IFLOW is off.  Set it
! 		 * appropriately in comparam() if RTS-flow is being changed.
! 		 * Check for races.
! 		 */
! 		if (!(com->mcr_image & MCR_RTS) && com->iptr < com->ihighwater)
  			outb(com->modem_ctl_port, com->mcr_image |= MCR_RTS);
  	}
--- 2048,2053 ----
  			outb(com->modem_ctl_port, com->mcr_image &= ~MCR_RTS);
  	} else {
! 		if (!(com->mcr_image & MCR_RTS) && com->iptr < com->ihighwater
! 		    && com->state & CS_RTS_IFLOW)
  			outb(com->modem_ctl_port, com->mcr_image |= MCR_RTS);
  	}


