💾 Archived View for spam.works › mirrors › textfiles › programming › gla-91o captured on 2023-11-14 at 11:50:03.

View Raw

More Information

⬅️ Previous capture (2023-06-16)

-=-=-=-=-=-=-

From markb@tplrd.tpl.oz.AU Thu Oct  3 05:06:27 1991
Received: from metro.ucc.su.OZ.AU by karazm.math.UH.EDU with SMTP id AA12981
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 2 Oct 1991 21:12:00 -0500
Received: by metro.ucc.su.OZ.AU (5.61/1.34)
	id AA02783; Thu, 3 Oct 1991 12:08:05 +1000
Received: by tpl68k0 (5.51/2.27); id AA11116; Thu, 3 Oct 91 10:06:37 EST
From: markb@tplrd.tpl.oz.au (Elvis Presley)
Message-Id: <9110030006.AA11116@tpl68k0>
Received: by tpl68k5 (5.51/2.15); id AA09177; Thu, 3 Oct 91 10:06:27 EST
Date: Thu, 3 Oct 91 10:06:27 EST
To: glove-list@karazm.math.uh.edu
Subject: Subscribe


SUBSCRIBE me please
subscribe

mark

From dirtybob@janis.cac.washington.edu Sun Oct  6 12:38:18 1991
Received: from janis.cac.washington.edu by karazm.math.UH.EDU with SMTP id AA00263
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 6 Oct 1991 21:40:26 -0500
Received: by janis.cac.washington.edu (5.57/Ultrix3.0-C)
	id AA15155; Sun, 6 Oct 91 19:38:18 -0700
Date: Sun, 6 Oct 91 19:38:18 -0700
From: dirtybob@janis.cac.washington.edu (Richard M. Nixon)
Message-Id: <9110070238.AA15155@janis.cac.washington.edu>
To: glove-list@karazm.math.uh.edu
Subject: PLEASE ADD ME TO THE MAILING LIST

Thanks!

From jdb9608@cs.rit.edu Mon Oct  7 08:43:19 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA02032
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 7 Oct 1991 11:46:29 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA02651; Mon, 7 Oct 91 12:42:36 -0400
Received: from lithium.CS (lithium.ARPA) by junior.rit.edu (4.1/5.17)
	id AA01637; Mon, 7 Oct 91 12:32:14 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110071632.AA01637@junior.rit.edu>
Subject: C hires code for ATARI 1040 ST (fwd)
To: glove-list@karazm.math.uh.edu
Date: Mon, 7 Oct 91 12:43:19 EDT
Cc: jxw1578@cs.rit.edu (John X Whitehurst), rwr9481@cs.rit.edu (Robert W Reay),
        rxc9885@cs.rit.edu (Robert X Costello)
X-Mailer: ELM [version 2.3 PL8]

HIRES HIRES HIRES HIRES HIRES HIRES HIRES HIRES HIRES HIRES

This is it, folks!  I can't believe it.

It really works.  I didn't do any of its development, but I have
tested it with Sozoban C (with minor adjustments--changing "tos.h"
to "osbind.h", and deleting two void's in forward function declarations).

Manfredo has tried posting it to the glove-list, but it's disappeared
into some black hole somewhere, so he asked me to post it for him.

I've gotten the data packets in the right sequence, but not the
right order.  They've started with Z and ended with A0 X Y,
so I don't have it all figured out yet, but that doesn't really
matter since even if the data packet is out of order, I can still
tell which byte is which by seeing where A0, 0, 0, 3F, FF, FF occur.

The problem with this program is that it uses busy loops for
very long times (i.e., over 75,000 microseconds).  That makes
the sample rate a little slow (which is okay since my ST can't
do much per second anyway), and---most importantly---it hogs
all the CPU time.  I'm working on a modification which uses the
MFP's timer A to generate an interrupt after the appropriate
long interval (D2SLOW) and then handle the rest of the protocol
in an ISR.  That should free up the CPU for graphics.  
I'll post it when I get it working. 

I'll also put this source in karazm.math.uh.edu:pub/incoming/VR
tonite when the anonymous ftp is allowed (Eric...).
If anyone has special questions about how the ST works,
for converting this code to other computers, I'll be happy to
see what answers I can dig up.

Now, does anyone have freely--distributable source for a nice
3D graphics library (PHIGS, maybe?), before I go write my own?...

Forwarded message:
> From manfredo@medap1.cs.tu-berlin.de Wed Oct  2 12:12:02 1991
> From: manfredo@medap1.cs.tu-berlin.de (Manfred Krauss)
> Message-Id: <9110021622.AA09307@medap1.cs.tu-berlin.de>
> Subject: C hires code for ATARI 1040 ST
> To: jdb9608@rit
> Date: Wed, 2 Oct 91 17:22:37 MET
> X-Mailer: ELM [version 2.3 PL6]
> 
> Hi,
> 
> Following C program switches the glove into hi-res mode.
> The protocol goes via latch. The code works very well.
> 
> Next project is to build a little controller with a 68HC11 
> processor to connect the glove to any? computer via RS232
> interface. I've no experience in programming such a processor.
> Is anyone out there who is familiar with the 68HC11?
> I can send a complete timing diagramm and support the work
> with my knowledge.
> 
> Waiting for hints and comments.
> 
> manfredo
> 
> -------------------- cut here --------------------------------------
/**********************************************************************
 
    power.c       (c) manfredo 9/91           enjoy "HiRes" mode
 
                   manfredo@opal.cs.tu-berlin.de
 
 	This program is without any WARRANTY use at your OWN risk
        @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
	The code is very ugly, but it was the only way to get speed
	on this poor hardware in C. It was developed on an ATARI
        1040ST with TC 1.1 using a logic analyzer to get the correct
	timings.


	connect NINTENDO POWERGLOVE to ATARI 1040ST parallel port

	PG                          ATARI 

	+5V pin7                                          power supply +5V

	GND pin1                    pin18 parallel port & power supply GND

	data pin4                   pin1  parallel port

 	latch pin3                  pin2  parallel port

	clock pin2                  pin3  parallel port




    Datapacket: (12 bytes)

    1.    2.    3.    4.    5.    6.    7.    8.    9.    10.   11.    12.

    A0    X     Y     Z    rot  finger  keys  00    00    3F    FF     FF



	
#include <stdio.h>
#include <tos.h>


/* PSG (Programable Sound Generator) */
#define		PSG             0xff8800 /* sound chip read data */
#define		PSGW            0xff8802 /* sound chip write data */

/* registers in PSG */
#define		CONREG          7       /* read/write control reg */
#define		AREG            14      /* port A */
#define		BREG            15      /* port B */

/* read / write bits in PSG register 7 */
#define		AREAD           0xbf    /* A read bit in register 7 */
#define		BREAD           0x7f    /* B read bit in register 7 */
#define		AWRITE          0x40    /* A write bit in register 7 */
#define		BWRITE          0x80    /* B write bit in register 7 */

/* bits from parallel port */
#define		GDATA           0x20    /* Strobe (Pin 1) PG data in */
#define		GLATCH          0x01    /* bit1 (pin2) PG latch out */
#define		GCLOCK          0x02    /* bit2 (pin3) PG clock out */
#define		GCLOLAT         0x03    /* bit2  + bit 1 */


/* Delay timing */
#define		delay(val)     { \
                                register unsigned long i = val /7; \
                                for ( ;i-- > 0; ) \
                                      ; \
                           }


#define     D2BYTES      192      /* delay between 2 bytes   96 us */
#define     D2BITS       21       /* delay between 2 bits    22 us */
#define     D2SLOW       32000    /* 4 slow bytes in packet  14720 us */

#define     C0L0()       *wr = 0        /* clock 0 latch 0 */
#define     C0L1()       *wr = GLATCH   /* clock 0 latch 1 */
#define     C1L0()       *wr = GCLOCK   /* clock 1 latch 0 */
#define     C1L1()       *wr = GCLOLAT  /* clock 1 latch 1 */

#define     setporta()   *rd = CONREG; \
                         *wr = *rd & AREAD; \
                         *rd = AREG

#define     setportb()   *rd = CONREG; \
                         *wr = *rd | BWRITE; \
                         *rd = BREG


void Hires (void);
unsigned char getbyte (void);


void main ()
{
	long lola;
	unsigned char buf[12];
	register unsigned char *bp;

	lola = Super (0L); /* set supervisor mode to access hardware
	                      directly */
	printf ("lola <0x%x>\n", lola);  /* satisfy TC compiler */                                                
	
	Hires (); /* set PG into 'hires' mode */

	for ( ; ; ) /* read 12 byte packets */
	{
		bp = buf;
		*bp++ = getbyte ();
		delay (D2BYTES);
		*bp++ = getbyte ();
		delay (D2BYTES);
		*bp++ = getbyte ();
		delay (D2BYTES);
		*bp++ = getbyte ();
		delay (D2BYTES);
		*bp++ = getbyte ();
		delay (D2BYTES);
		*bp++ = getbyte ();
		delay (D2BYTES);
		*bp++ = getbyte ();
		delay (D2BYTES);
		*bp++ = getbyte ();
		delay (D2SLOW);
		*bp++ = getbyte ();
		delay (D2SLOW);
		*bp++ = getbyte ();
		delay (D2SLOW);
		*bp++ = getbyte ();
		delay (D2SLOW);
		*bp++ = getbyte ();
		delay (D2SLOW);

		printf ("Glove %-2x %-2x %-2x %-2x %-2x %-2x %-2x %-2x %-2x %-2x %-2x %-2x\n",
				buf[0], buf[1], buf[2], buf[3], buf[4], buf[5],
				buf[6], buf[7], buf[8], buf[9], buf[10], buf[11]);
	}
}

unsigned char getbyte ()
{
	register unsigned char *rd = (unsigned char *)PSG;
	register unsigned char *wr = (unsigned char *)PSGW;
	register int i;
	register unsigned Glov = 0;	

	/* prepare port b as output port */
	setportb ();

        /* generate a reset (latch) pulse */
	C1L0 ();
	C1L1 ();
	for (i = 1; i-- > 0; ); /* 5 us delay */
	C1L0 ();

	/* configure port a as input */
	setporta ();

	/* read a bit */
	*rd &= GDATA;
	Glov <<= 1;
	Glov += *rd >> 7;

	/* prepare port b as output port */
	setportb ();

	/* generate a clock pulse */
	C0L0 ();
	C1L0 ();
	
	/* configure port a as input */
	setporta ();

	/* read a bit */
	*rd &= GDATA;
	Glov <<= 1;
	Glov += *rd >> 7;

	/* prepare port b as output port */
	setportb ();

	/* generate a clock pulse */
	C0L0 ();
	C1L0 ();
	
	/* configure port a as input */
	setporta ();

	/* read a bit */
	*rd &= GDATA;
	Glov <<= 1;
	Glov += *rd >> 7;

	/* prepare port b as output port */
	setportb ();

	/* generate a clock pulse */
	C0L0 ();
	C1L0 ();
	
	/* configure port a as input */
	setporta ();

	/* read a bit */
	*rd &= GDATA;
	Glov <<= 1;
	Glov += *rd >> 7;

	/* prepare port b as output port */
	setportb ();

	/* generate a clock pulse */
	C0L0 ();
	C1L0 ();
	
	/* configure port a as input */
	setporta ();

	/* read a bit */
	*rd &= GDATA;
	Glov <<= 1;
	Glov += *rd >> 7;

	/* prepare port b as output port */
	setportb ();

	/* generate a clock pulse */
	C0L0 ();
	C1L0 ();
	
	/* configure port a as input */
	setporta ();

	/* read a bit */
	*rd &= GDATA;
	Glov <<= 1;
	Glov += *rd >> 7;

	/* prepare port b as output port */
	setportb ();

	/* generate a clock pulse */
	C0L0 ();
	C1L0 ();
	
	/* configure port a as input */
	setporta ();

	/* read a bit */
	*rd &= GDATA;
	Glov <<= 1;
	Glov += *rd >> 7;

	/* prepare port b as output port */
	setportb ();

	/* generate a clock pulse */
	C0L0 ();
	C1L0 ();
	
	/* configure port a as input */
	setporta ();

	/* read a bit */
	*rd &= GDATA;
	Glov <<= 1;
	Glov += *rd >> 7;

	/* prepare port b as output port */
	setportb ();

	/* generate a clock pulse */
	C0L0 ();
	C1L0 ();

	return Glov;  /* return the byte */
}


void Hires ()
{
	register unsigned char *rd = (unsigned char *)PSG;
	register unsigned char *wr = (unsigned char *)PSGW;
	register unsigned char Glov = 0;
	register int i;

	/* read 4 bits from glove */
	setportb ();

        /* generate a reset (latch) pulse */
	C1L0 ();
	C1L1 ();
	for (i = 1; i-- > 0; );   /* 5 us delay */
	C1L0 ();

	/* configure port a as input */
	setporta ();

	/* read a bit */
	*rd &= GDATA;
	Glov <<= 1;
	Glov += *rd >> 7;

	/* prepare port b as output port */
	setportb ();

	/* generate a clock pulse */
	C0L0 ();
	C1L0 ();
	
	/* configure port a as input */
	setporta ();

	/* read a bit */
	*rd &= GDATA;
	Glov <<= 1;
	Glov += *rd >> 7;

	/* prepare port b as output port */
	setportb ();

	/* generate a clock pulse */
	C0L0 ();
	C1L0 ();
	
	/* configure port a as input */
	setporta ();

	/* read a bit */
	*rd &= GDATA;
	Glov <<= 1;
	Glov += *rd >> 7;

	/* prepare port b as output port */
	setportb ();

	/* generate a clock pulse */
	C0L0 ();
	C1L0 ();
	
	/* configure port a as input */
	setporta ();

	/* read a bit */
	*rd &= GDATA;
	Glov <<= 1;
	Glov += *rd >> 7;

	/* prepare port b as output port */
	setportb ();

	/* generate a clock pulse */
	C0L0 ();
	C1L0 ();
	
	/* end of read 4 bits */

	/* prepare port b as output port */
	setportb ();

	C1L0 ();
	delay (16950);  /* 7212 us delay */

	setportb ();

	C1L1 ();
	delay (4750);   /* 2260 us delay */

	/* prepare port b as output port */
	setportb ();

	C1L0 ();	/* Start of 1. Byte */
	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);
	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);	

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C1L1 ();
	C0L1 ();
	C1L1 ();
	delay (D2BITS);
	
	/* prepare port b as output port */
	setportb ();

	C0L1 ();
	C1L1 ();
	delay (D2BITS);	

	/* prepare port b as output port */
	setportb ();

	C1L0 ();
	C0L0 ();
	C1L0 ();
	delay (D2BYTES);		

	/* prepare port b as output port */
	setportb ();

	C1L1 ();	/* Start of 2. Byte */
	C0L1 ();
	C1L1 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L1 ();
	C1L1 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C1L0 ();
	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C1L1 ();
	C0L1 ();
	C1L1 ();
	delay (D2BYTES);

	/* prepare port b as output port */
	setportb ();

	C1L0 ();	/* Start of 3. Byte */
	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);	

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);	

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);	

	/* prepare port b as output port */
	setportb ();

	C1L1 ();
	C0L1 ();
	C1L1 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C1L0 ();
	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BYTES);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();	/* start of 4. byte */
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BYTES);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();	/* start of 5. byte */
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C1L1 ();
	C0L1 ();
	C1L1 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C1L0 ();
	C0L0 ();
	C1L0 ();
	delay (D2BYTES);

	/* prepare port b as output port */
	setportb ();

	C1L1 ();	/* start of 6. byte */
	C0L1 ();
	C1L1 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L1 ();
	C1L1 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L1 ();
	C1L1 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L1 ();
	C1L1 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L1 ();
	C1L1 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L1 ();
	C1L1 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L1 ();
	C1L1 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L1 ();
	C1L1 ();
	delay (D2BYTES);

	/* prepare port b as output port */
	setportb ();

	C1L0 ();	/* start of 7. byte */
	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C0L0 ();
	C1L0 ();
	delay (D2BITS);

	/* prepare port b as output port */
	setportb ();

	C1L1 ();
	C0L1 ();
	C1L1 ();
	delay (1090); /* 892 us delay (end of 7. byte) */

	/* prepare port b as output port */
	setportb ();

	C1L0 ();
	delay (60000);   /* some time for the glove controller
						to relax */
}
-------------------- cut here --------------------------------------
----------------------------------------------------------------- 
Manfred Krauss,                     manfredo@opal.cs.tu-berlin.de
Dept of Computer Science,
Technical University of Berlin,
Franklinstr. 28-29,
W-1000 Berlin 10,
Sekr. FR3-3,
Germany
----------------------------------------------------------------- 



--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From jdb9608@cs.rit.edu Mon Oct  7 10:03:51 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA02232
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 7 Oct 1991 13:05:38 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA05490; Mon, 7 Oct 91 14:01:50 -0400
Received: from argon.CS (argon.ARPA) by junior.rit.edu (4.1/5.17)
	id AA01993; Mon, 7 Oct 91 13:51:35 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110071751.AA01993@junior.rit.edu>
Subject: test
To: glove-list@karazm.math.uh.edu
Date: Mon, 7 Oct 91 14:03:51 EDT
X-Mailer: ELM [version 2.3 PL8]

testing...

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From nop@att1.Mankato.MSUS.EDU Mon Oct  7 11:42:29 1991
Received: from ATT1.Mankato.MSUS.EDU by karazm.math.UH.EDU with SMTP id AA03580
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 7 Oct 1991 16:49:47 -0500
Received:  by att1.Mankato.MSUS.EDU (5.59/25-eef)
	id AA28398; Mon, 7 Oct 91 16:42:29 CDT
Date: Mon, 7 Oct 91 16:42:29 CDT
From: Jay A. Carlson <nop@att1.Mankato.MSUS.EDU>
Message-Id: <9110072142.AA28398@att1.Mankato.MSUS.EDU>
To: jdb9608@cs.rit.edu
Cc: glove-list@karazm.math.uh.edu, jxw1578@cs.rit.edu, rwr9481@cs.rit.edu,
        rxc9885@cs.rit.edu
In-Reply-To: John D Beutel's message of Mon, 7 Oct 91 12:43:19 EDT <9110071632.AA01637@junior.rit.edu>
Subject: C hires code for ATARI 1040 ST (fwd)


I have a fair amount of HC11 experience.  I'm interested in doing the
powerglove interpreter---but I don't have a glove any more. :-(
I can look over code, and suggest design and strategies, however.  If
someone is doing the HC11 interpreter project, I'd love to provide
support.

  // Jay Carlson
\X/  nop@att1.mankato.msus.edu

To subscribe to the MC68HC11 list, email to mc68hc11-request@quack.sac.ca.us.

From jdb9608@cs.rit.edu Mon Oct  7 19:42:36 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA04638
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 7 Oct 1991 22:46:14 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA09181; Mon, 7 Oct 91 23:41:46 -0400
Received: from lithium.CS (lithium.ARPA) by junior.rit.edu (4.1/5.17)
	id AA03667; Mon, 7 Oct 91 23:31:31 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110080331.AA03667@junior.rit.edu>
Subject: hires source (C Atari ST) via ftp
To: glove-list@karazm.math.uh.edu, jet@uh.edu
Date: Mon, 7 Oct 91 23:42:36 EDT
X-Mailer: ELM [version 2.3 PL8]

Incase anyone missed it (I missed it myself at first; a delay
in the mailers confused me), the C source code (Atari ST) for
the hi-res mode is available via anonymous ftp (at nite) from
karazm.math.uh.edu.  It's pub/Incoming/VR/hires.src.ST (I think),
and soon it may be in the pub/VR directory instead.

I can't wait to see what great software comes out of this!

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From jdb9608@cs.rit.edu Mon Oct  7 19:49:43 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA04655
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 7 Oct 1991 22:52:42 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA09253; Mon, 7 Oct 91 23:48:53 -0400
Received: from lithium.CS (lithium.ARPA) by junior.rit.edu (4.1/5.17)
	id AA03682; Mon, 7 Oct 91 23:38:38 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110080338.AA03682@junior.rit.edu>
Subject: flaky lo-res
To: glove-list@karazm.math.uh.edu
Date: Mon, 7 Oct 91 23:49:43 EDT
X-Mailer: ELM [version 2.3 PL8]

I noticed something about lo-res mode acting flaky.
It's worked pretty well for me before, but just this
month I've moved my computer into a smaller room.
I tested it recently, for the first time, in the new room.
Now lo-res is flaky.  I get readings when I point the
glove in ANY direction.  I get changing readings when
the glove is pointing away from the receivers and
I just WALK thru the room between the glove and the mics. 
The sounds have got to be bouncing off the walls. 
This could be a cause of some of the problems people have had.

If you're glove acts flaky and adjusting your program's timing
hasn't helped, you might want to try using it in a big room or
wide open space.

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From yonder@netcom.netcom.com Mon Oct  7 22:55:28 1991
Received: from netcomsv.netcom.com by karazm.math.UH.EDU with SMTP id AA06611
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 8 Oct 1991 08:00:02 -0500
Received: from netcom.netcom.com by netcomsv.netcom.com (4.1/SMI-4.1)
	id AA10740; Tue, 8 Oct 91 05:55:29 PDT
Received: by netcom.netcom.com (4.1/SMI-4.1)
	id AA02449; Tue, 8 Oct 91 05:55:29 PDT
From: yonder@netcom.com (Christopher Russell)
Message-Id: <9110081255.AA02449@netcom.netcom.com>
Subject: ST hi-res code!
To: glove-list@karazm.math.uh.edu (Power Glove mailing list)
Date: Tue, 8 Oct 91 5:55:28 PDT
X-Mailer: ELM [version 2.3 PL11]

Could somebody give me some background on how the ST hi-res code
was developed!  I am an ST user so this is great.  But I was just
wondering how it was figured out!  

-- 
Christopher L. Russell (yonderboy)  Phone: (408)378-9078 Campbell,CA
yonder@netcom.COM or clr40@amail.amdahl.com or chrisr@leland.stanford.edu


From jet Tue Oct  8 05:42:12 1991
Received: by karazm.math.UH.EDU id AA07173
  (5.65c/IDA-1.4.4 for glove-list@karazm.math.uh.edu); Tue, 8 Oct 1991 10:42:12 -0500
From: J Eric Townsend <jet>
Message-Id: <199110081542.AA07173@karazm.math.UH.EDU>
Subject: Re: hires source (C Atari ST) via ftp
To: jdb9608@cs.rit.edu (John D Beutel)
Date: Tue, 8 Oct 91 10:42:12 CDT
Cc: glove-list@karazm.math.uh.edu, jet@uh.edu
In-Reply-To: <9110080331.AA03667@junior.rit.edu>; from "John D Beutel" at Oct 7, 91 11:42 pm
X-Mailer: ELM [version 2.3 PL11]

you wrote:
>karazm.math.uh.edu.  It's pub/Incoming/VR/hires.src.ST (I think),
>and soon it may be in the pub/VR directory instead.

It's in the pub/VR directory, compressed.

thanks.


-- 
J. Eric Townsend - jet@uh.edu - Systems Wrangler, UH Dept of Mathematics
vox: (713) 749-2126  '91 CB750, DoD# 0378, TMRA# 27834
PowerGlove mailing list: glove-list-request@karazm.math.uh.edu
     --  Vote Bart Stewart for Houston Mayor -- "Why the Hell Not?" --

From squier@babbage.ecs.csus.edu Tue Oct  8 10:14:51 1991
Received: from babbage.ecs.csus.edu by karazm.math.UH.EDU with SMTP id AA09456
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 8 Oct 1991 19:19:41 -0500
Received: by babbage.ecs.csus.edu (5.61/1.34)
	id AA06845; Tue, 8 Oct 91 17:14:54 -0700
From: squier@babbage.ecs.csus.edu (Anthony Squier)
Message-Id: <9110090014.AA06845@babbage.ecs.csus.edu>
Subject: HiRes Mode
To: glove-list@karazm.math.uh.edu
Date: Tue, 8 Oct 91 17:14:51 PDT
X-Mailer: ELM [version 2.3 PL0]



From eegeh@wrasse.jcu.edu.au Wed Oct  9 23:25:37 1991
Received: from wrasse.jcu.edu.au by karazm.math.UH.EDU with SMTP id AA09858
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 8 Oct 1991 22:29:30 -0500
Received: by wrasse.jcu.edu.au (5.57/1.34)
	id AA07549; Wed, 9 Oct 91 13:25:37 +1000
Date: Wed, 9 Oct 91 13:25:37 +1000
From: eegeh@wrasse.jcu.edu.au (Glen Elliot Harris)
Message-Id: <9110090325.AA07549@wrasse.jcu.edu.au>
To: glove-list@karazm.math.uh.edu
Subject: please add me

please add me

From galt%peruvian@cs.utah.edu Tue Oct  8 15:50:49 1991
Received: from cs.utah.edu by karazm.math.UH.EDU with SMTP id AA09914
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 8 Oct 1991 22:54:40 -0500
Received: from peruvian.utah.edu by cs.utah.edu (5.65/utah-2.18-cs)
	id AA03547; Tue, 8 Oct 91 21:50:52 -0600
Received: by peruvian.utah.edu (5.65/utah-2.12s-leaf)
	id AA04800; Tue, 8 Oct 91 21:50:49 -0600
Date: Tue, 8 Oct 91 21:50:49 -0600
From: galt%peruvian@cs.utah.edu (Greg Alt)
Message-Id: <9110090350.AA04800@peruvian.utah.edu>
To: glove-list@karazm.math.uh.edu
Subject: PC hires source

I uploaded source code for a PC...  I converted the ST code and fixed it up
a little.  I was thinking, we should probably have a standard interface of
some sort so that our code will be relatively compatible.  Here is my proposal:

typedef struct _glove_data {
   unsigned char dum0;
   signed   char x,y,z;
   unsigned char rot,fingers,keys,dum7,dum8,dum9,dumA,dumB;
   } glove_data;
 
void Hires();
void getglove(glove_data *);

 
possibly better function names would be glove_init() and glove_sample()
Also, the byte that I called "dum9" seems to be used to tell if the glove
is not aimed at the receivers.  
 
One more thing I was wondering about...  In the initialization function,
it looks like 7 bytes are sent to the glove.  I wonder what the significance
of these is...  The reading of the first few bits is probably to tell if 
a glove is really attached.  The other thing to start brainstorming about is
how to solve the problem of the 5 long pauses.  Each one is 14 milliseconds,
so you waste 70 milliseconds per sample.  Surely something useful could be
squeezed into that time somehow.  Also, that only gives us 14 samples per
second (assuming nothing else is done between samples).
 
Tonight I plan on experimenting with the finger input (I played around
with x,y,z, moving a simulated 3D cursor around, and it was kind of interesting)
        Greg

From jdb9608@cs.rit.edu Tue Oct  8 22:04:57 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA10541
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 9 Oct 1991 01:09:14 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA23462; Wed, 9 Oct 91 02:03:42 -0400
Received: from hendrix.CS (hendrix.ARPA) by junior.rit.edu (4.1/5.17)
	id AA07963; Wed, 9 Oct 91 01:53:21 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110090553.AA07963@junior.rit.edu>
Subject: Re: glove HIRES source for Atari 1040ST
To: djimenez@ringer.cs.utsa.edu (Daniel Jimenez)
Date: Wed, 9 Oct 91 2:04:57 EDT
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: <9110081846.AA16271@ringer.cs.utsa.edu.sunset>; from "Daniel Jimenez" at Oct 8, 91 1:46 pm
X-Mailer: ELM [version 2.3 PL8]

Great!  I get the same problem with order, and so does Lance Norstrom.
The packets start with Z, and end with A0, X, Y.  Manfredo suggests
pressing <center> several times and making fists to calibrate it.
Galt suggests that it's a timing problem.

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From galt%peruvian@cs.utah.edu Tue Oct  8 18:01:00 1991
Received: from cs.utah.edu by karazm.math.UH.EDU with SMTP id AA10539
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 9 Oct 1991 01:05:52 -0500
Received: from peruvian.utah.edu by cs.utah.edu (5.65/utah-2.18-cs)
	id AA04860; Wed, 9 Oct 91 00:01:02 -0600
Received: by peruvian.utah.edu (5.65/utah-2.12s-leaf)
	id AA05937; Wed, 9 Oct 91 00:01:00 -0600
Date: Wed, 9 Oct 91 00:01:00 -0600
From: galt%peruvian@cs.utah.edu (Greg Alt)
Message-Id: <9110090601.AA05937@peruvian.utah.edu>
To: glove-list@karazm.math.uh.edu
Subject: hires initialization

Well, if anyone is interested, the 7 bytes sent to init the glove seem
to be: 0x06, 0xC1, 0x08, 0x00, 0x02, 0xFF, 0x01
 
It is hard to believe this is a whole program...  Well, back to playing with
the glove...  
 
Oh, also, here's a list of all the finger positions that seem meaningful...
First, only look at the high bit for each finger to get rid of noise, then
look up in this chart:
 
0  open hand
1  double gun
2  middle finger bent
3  gun
4  fore finger bent
5  ??
6  ??
7  thumb up (or down depending on rotation)
8  thumb bent
9  double point (or peace sign)
10 ??
11 point
12 O.K. sign
13 extended middle finger
14 extended ring finger (painful)
15 fist
 
Most of these are easily distinguished, so we have about 12 possible
finger positions, and if you include orientation and possibly movement,
that adds up to a lot of gestures.
 
     Greg

From kskelm@uccs.edu Tue Oct  8 20:03:22 1991
Received: from GRUMPY (grumpy.uccs.edu) by karazm.math.UH.EDU with SMTP id AA10548
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 9 Oct 1991 01:10:08 -0500
Received: by uccs.edu (MX V2.3-1) id 17473; Wed, 09 Oct 1991 00:03:22 EDT
Date: Wed, 09 Oct 1991 00:03:22 EDT
From: "NO, That's NOT a cord of wood in my pocket!" <kskelm@uccs.edu>
To: glove-list@karazm.math.uh.edu
Message-Id: <0094FD54.0F42E6E0.17473@uccs.edu>
Subject: Well......

 
	So we've got an ST version and a PC version of the Hires code.
Now.... what kind and brilliant soul will make a nice, timer-interrupt
-based, multitasking version for the Amiga??  *with* a sample executable,
preferrably??     :-)

From jdb9608@cs.rit.edu Tue Oct  8 22:14:56 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA10574
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 9 Oct 1991 01:17:31 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA23550; Wed, 9 Oct 91 02:13:42 -0400
Received: from hendrix.CS (hendrix.ARPA) by junior.rit.edu (4.1/5.17)
	id AA07970; Wed, 9 Oct 91 02:03:20 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110090603.AA07970@junior.rit.edu>
Subject: 3D graphics library
To: glove-list@karazm.math.uh.edu
Date: Wed, 9 Oct 91 2:14:56 EDT
X-Mailer: ELM [version 2.3 PL8]

Lance Norskog mentioned:

> You asked about 3D libraries.  In uunet.uu.net:/usr/spool/ftp/graphics/vogle
> there's a nice software-based clone of the SGI GL library, circa 1985.
> It has 3D wire frame stuff, filled polygons, and vector fonts.
> It has drivers for PC's, Suns, X windows, other workstations, and
> PostScript (graphics commands, not bit maps).  All public-domain.
> I think I'll be rewriting the PC assembler video drivers into
> 386 assembler.  It should howl.  

(I'm really sorry about misspelling your last name a minute ago, Lance.)

Has anyone used this on the ST before?  I'll be checking it out,
but I'm mentioning it incase it needs porting and someone already has.

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From jdb9608@ultb.isc.rit.edu Tue Oct  8 23:42:27 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA10742
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 9 Oct 1991 02:46:17 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA24537; Wed, 9 Oct 91 03:42:27 -0400
Date: Wed, 9 Oct 91 03:42:27 -0400
From: jdb9608@ultb.isc.rit.edu (J.D. Beutel)
Message-Id: <9110090742.AA24537@ultb.isc.rit.edu>
To: glove-list@karazm.math.uh.edu
Subject: vogle

I got the vogle 3D graphics library, and read its docs.
It's supposed to be very similar to SGI's GL.  Perhaps someone
familiar with either could advise me.

I'm thinking of using it for virtual reality work with the glove.
The library calls look just like CORE, which is an old standard
I'm familiar with.  Both are capable of 3D, but with CORE it
translated the world coordinates to device coordinates immediately,
which meant that every time you wanted to change perspective
(i.e., move your point of view), you had to enter all the world
coordinates again.  That seemed real ugly for a world I may
want to be flying thru.  Does VOGLE require the same thing?
CORE had one-level "segments", but not VOGLE's multi-level
"objects" (which can call other objects).  Does this make up for 
redrawing the world at every perspective change (e.g., define
everything in terms of objects, define a root object containing
every other object, and just redraw the root object each time
you change perspective).  Is this a nice way to do it?
Is VOGLE quick enuf for real-time response?

Its source is available so I could try converting one of its many 
supported device drivers to one for the ST.  It does double-buffering,
which is probably good enuf in itself for shutter glasses.
Quadruple-buffering would be needed for a head-mounted display
with two screens, but since the source is there it shouldn't be too hard.
It also supports a lot of hardware; that's very attractive.
Does anyone have any comments on it?

--
J. David Beutel  11011011  jdb9608@cs.rit.edu      "I am, therefore I am."

From giszter@ai.mit.edu Wed Oct  9 07:42:50 1991
Received: from life.ai.mit.edu by karazm.math.UH.EDU with SMTP id AA11688
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 9 Oct 1991 10:47:15 -0500
Received: from cauda-equina (CAUDA-EQUINA.MIT.EDU) by life.ai.mit.edu (4.1/AI-4.10) id AA12582; Wed, 9 Oct 91 11:43:13 EDT
From: giszter@ai.mit.edu (Simon Giszter)
Received: by cauda-equina (4.1/AI-4.10) id AA00432; Wed, 9 Oct 91 11:42:50 EDT
Date: Wed, 9 Oct 91 11:42:50 EDT
Message-Id: <9110091542.AA00432@cauda-equina>
To: glove-list@karazm.math.uh.edu
Subject: gloves supply



For those in NH:
Toys Unlimited (toy surplus outlet) in Conway has L Power gloves
bundled with SuperGlove Ball cartridges for $40.00
This was a good deal before the code was cracked or if you have a 
Nintendo. They also has NES infrared remotes and Sega stuff (but
not the Head system) for cheap.


From squier@babbage.ecs.csus.edu Wed Oct  9 02:19:32 1991
Received: from babbage.ecs.csus.edu by karazm.math.UH.EDU with SMTP id AA11950
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 9 Oct 1991 11:24:21 -0500
Received: by babbage.ecs.csus.edu (5.61/1.34)
	id AA09435; Wed, 9 Oct 91 09:19:35 -0700
From: squier@babbage.ecs.csus.edu (Anthony Squier)
Message-Id: <9110091619.AA09435@babbage.ecs.csus.edu>
Subject: HiRes 
To: glove-list@karazm.math.uh.edu
Date: Wed, 9 Oct 91 9:19:32 PDT
X-Mailer: ELM [version 2.3 PL0]


I'm not sure if this made it the first time, so I am trying again. Sorry
if everyone gets it twice.


I am very interested in getting the timing diagrams from Manfred for the glove
Hi-Res Mode. I am using the glove for part of a Master's Project(for the 
Amiga coding in C++) and would like to attempt to interface the glove via 
RS-232. I greatly apprecieate the work that Manfred Krauss has put into the 
glove. If I have success with the RS-232 interfacing I'll let everyone know. 
Also, what is the format of the data that is returned by the glove?


Tony...
squier@babbage.ecs.csus.edu

From gbnewby@alexia.lis.uiuc.edu Wed Oct  9 06:17:07 1991
Received: from uxc.cso.uiuc.edu by karazm.math.UH.EDU with SMTP id AA11958
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 9 Oct 1991 11:25:11 -0500
Received: from alexia.lis.uiuc.edu by uxc.cso.uiuc.edu with SMTP id AA00178
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 9 Oct 1991 11:21:05 -0500
Received: by alexia.lis.uiuc.edu id AA11807
  (5.61/ for glove-list@karazm.math.uh.edu); Wed, 9 Oct 91 11:17:07 -0500
Date: Wed, 9 Oct 91 11:17:07 -0500
From: Greg Newby <gbnewby@alexia.lis.uiuc.edu>
Message-Id: <9110091617.AA11807@alexia.lis.uiuc.edu>
To: giszter@ai.mit.edu, glove-list@karazm.math.uh.edu
Subject: Re:  gloves supply
Cc: gbnewby@alexia.lis.uiuc.edu

I tried to post a note earlier in the week, and it didn't get through.
Now that the list is active again:

I phoned Mattel the other day.  They say that they will be selling/
distributing the gloves (large only) for this christmas. So, if you
don't have one and can't find one, you should be able to find one
within the next few months.  It sounded like they'd be pretty hard
to find after December or January, though...

Update on the AGE box thing:  Now I'm wondering if it's obsolete.  It's
not quite, because, among other things, the box can get data on demand,
instead of in a stream.  I'm not sure how sensitive the timing for the
ST code will be when people port it to other platforms.

Anyway, I'm still battling the legal thing, to get an agreement w/ 
AGE and my employer.  I'll take a final call for people interested
when the time comes, should be (as usual) pretty soon.  Thanks fo
your patience.

Oh, while I'm rambling:  standards for the glove drivers are a good
idea.  Once drivers get written for various platforms, real development
can begin.
-- Greg

From dbarberi@mailbox.syr.edu Wed Oct  9 10:31:22 1991
Received: from mailbox.syr.EDU by karazm.math.UH.EDU with SMTP id AA12646
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 9 Oct 1991 13:36:01 -0500
Received: from rodan.acs.syr.edu by mailbox.syr.edu (4.1/CNS)
	id AA15265; Wed, 9 Oct 91 14:32:13 EDT
Received: by rodan.acs.syr.edu (4.1/Spike-2.0)
	id AA21885; Wed, 9 Oct 91 14:31:24 EDT
Message-Id: <9110091831.AA21885@rodan.acs.syr.edu>
To: galt%peruvian@cs.utah.edu (Greg Alt)
Cc: glove-list@karazm.math.uh.edu, dbarberi@mailbox.syr.edu
Subject: Re: PC hires source 
In-Reply-To: Your message of "Tue, 08 Oct 91 21:50:49 MDT."
             <9110090350.AA04800@peruvian.utah.edu> 
Date: Wed, 09 Oct 91 14:31:22 -0400
From: dbarberi@mailbox.syr.edu

Greg Alt writes:

possibly better function names would be glove_init() and glove_sample()
Also, the byte that I called "dum9" seems to be used to tell if the glove
is not aimed at the receivers.  
-----

  We use init_glove() and query_glove(), if we are comparing.  But I don't understand about the 'dum9'.. how does the glove know if it is not pointing to sensors?  I never knew it could do that.  Is that the same as receiving bad data?

	David Barberi
	Syracuse University Virtual Reality Lab

From jdb9608@cs.rit.edu Wed Oct  9 13:36:34 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA13401
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 9 Oct 1991 16:38:30 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA14510; Wed, 9 Oct 91 17:34:34 -0400
Received: from chromium.CS (chromium.ARPA) by junior.rit.edu (4.1/5.17)
	id AA10489; Wed, 9 Oct 91 17:24:08 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110092124.AA10489@junior.rit.edu>
Subject: Re: standard interface
To: glove-list@karazm.math.uh.edu
Date: Wed, 9 Oct 91 17:36:34 EDT
X-Mailer: ELM [version 2.3 PL8]

> I uploaded source code for a PC...  I converted the ST code and fixed it up
> a little.

Wonderful!

> I was thinking, we should probably have a standard interface of
> some sort so that our code will be relatively compatible.  Here is my proposal:
> typedef struct _glove_data {
>    unsigned char dum0;
>    signed   char x,y,z;
>    unsigned char rot,fingers,keys,dum7,dum8,dum9,dumA,dumB;
>    } glove_data;
>  
> void Hires();
> void getglove(glove_data *);
> 
>  
> possibly better function names would be glove_init() and glove_sample()
> Also, the byte that I called "dum9" seems to be used to tell if the glove
> is not aimed at the receivers.  

That sounds good to me.  I would have favored the structure that
already comes from the "black box", since it's already been around,
but the data itself is exactly the same form so conversions should
be trivial, and the "black box" has no specific structure defined
(i.e., no names that I'm aware of).  So, I'd say lets use these names.
Should we define a whole .h file?  (E.g., constants for the bits in
keys, macros to mask and shift the two bits in fingers...)
I hate to start a senseless meta-discusion, but I don't want to go to
over-plan anything.

>   The other thing to start brainstorming about is
> how to solve the problem of the 5 long pauses.  Each one is 14 milliseconds,
> so you waste 70 milliseconds per sample.  Surely something useful could be
> squeezed into that time somehow.

I'm trying to solve that on the ST by using an internal timer to
generate an interrupt at the end of each long pause.  An ISR would
handle the protocol at each interrupt, and the CPU would be free to
do other things in the mean time.  Lately I've been talking about
it more than trying it, but in theory I should get it working.
I don't know if other computers have a similar capability,
but probably they do.

So, for the sake of implementations that take this approach,
I propose two more things:

void  glove_pre();		/* call > 80 ms previous to glove_sample() */
int   glove_pend;		/* boolean flags glove data as pending */

The glove_pre() is a function which should be called 80 ms or more
previous to glove_sample().  When the glove data is ready, the global
glove_pend will be set = 0, and then glove_sample() may be called.

For implementations like mine, glove_pre() will start the protocol
and set glove_pend = 1.  When an ISR finishes the protocol, it will
set glove_pend = 0, and glove_sample() will just be a dumby that
copies the glove_data into the given structure.

For implementations using busy loops or external hardware (e.g., 68HC11),
the glove_pre() will be a dumby function, glove_pend will always = 0,
and glove_sample() will really go get the data each time.

This will allow people to write programs that work both ways.
The code wouldn't be much more complicated than without glove_pre():

glove_data	gd;

glove_init();			/* hi-res mode */
glove_pre();			/* start first sample if we need to */
while( 1) {
	foo();			/* 80 ms worth of graphics stuff */
	while( glove_pend);	/* wait if we need to */
	glove_sample( &gd);	/* get the data (one way or the other) */
	glove_pre();		/* start the next sample if we need to */
}

Also, shouldn't we allow glove_init(), glove_pre(), and glove_sample()
to return error codes, at least for recognizable hardware errors?

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From motcsd!roi!lance@apple.com Sun Oct  9 10:23:38 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA14073
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 9 Oct 1991 20:01:04 -0500
Received: by apple.com (5.61/1-Oct-1991-eef)
	id AA15196; Wed, 9 Oct 91 17:37:13 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kUoFV-0001BsC@motcsd.csd.mot.com>; Wed, 9 Oct 91 17:27 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA06559; 9 Oct 91 17:23:41 PDT (Wed)
To: glove-list@karazm.math.uh.edu, glove-list-request@karazm.math.UH.EDU
Subject: Re:  3D graphics library
Message-Id: <9110091723.AA06545@roi.ca41.csd.mot.com>
Date: 9 Oct 91 17:23:38 PDT (Wed)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>

I've seen a Mac port of vogle mentioned in the docs, but haven't
seen it.  There was no mention of amiga or ST support.

It would be pretty wimpy compared to the Amiga demos I've seen.

At $800 for a 4meg system (some ad I saw), an ST is attractive
for a home toy.  You can do some serious graphics in 4megs.

Lance Norskog

From motcsd!roi!lance@apple.com Sun Oct  9 10:19:45 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA14088
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 9 Oct 1991 20:06:54 -0500
Received: by apple.com (5.61/1-Oct-1991-eef)
	id AA15140; Wed, 9 Oct 91 17:36:44 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kUoC0-0001CSC@motcsd.csd.mot.com>; Wed, 9 Oct 91 17:24 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA06534; 9 Oct 91 17:19:45 PDT (Wed)
To: glove-list@karazm.math.uh.edu
Subject: Re: vogle
Message-Id: <9110091719.AA06530@roi.ca41.csd.mot.com>
Date: 9 Oct 91 17:19:45 PDT (Wed)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>


The VOGLE and VOGL libraries are on uunet.uu.net in 
/usr/spool/ftp/graphics/vogle.  They're from an Australian
university, and are copyright-but-free.  They're a software
version of SGI's GL core graphics library, written from scratch
with drivers for lots of frame buffers: X windows, all PC
adapters, a Mac version somewhere, Sun, Apollo, and postscript
commands.

VOGLE is the main one.  They were inspired to change a few
things to make it exactly compatible with GL, and called that
VOGL.  If you want portability to SGI machines, stick with VOGL.

It has a lot of nifty calls, and an object data structure.
Objects can have their own personal translation matrices.
They can call other objects.  All translations are applied
to the current global matrix.  Thus, a tree of objects
can be defined, each with it's own matrix.  You call the
root object with a viewpoint and whatnot, and the resulting
matrix bubbles down and each object is redrawn with its
transform applied to it's inherited matrix; i.e. the parents
matrix passed down on the matrix stack.

The source comes with a lot of demos, including how to use the
polygon-filled fonts to draw on invisible planes criss-crossing
the screen.  It's fun, easy, and not a big mess like X windows.

Lance Norskog

From S.M.Clark@loughborough.ac.uk Thu Oct 10 08:39:25 1991
Received: from sun2.nsfnet-relay.ac.uk by karazm.math.UH.EDU with SMTP id AA16089
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 10 Oct 1991 08:39:25 -0500
Received: from loughborough.ac.uk by sun2.nsfnet-relay.ac.uk via JANET 
          with NIFTP id <10276-0@sun2.nsfnet-relay.ac.uk>;
          Thu, 10 Oct 1991 12:25:14 +0100
Date: Thu, 10 Oct 91 12:25:19 bst
Message-Id: <26893.9110101125@hpd.lut.ac.uk>
To: glove-list@karazm.math.uh.edu
From: Sean Clark <S.M.Clark@loughborough.ac.uk>
Subject: Hi-res for Mac?

All,

The 'discovery' of the hi-res mode for the glove is great news. Is anyone
working on an interface for the Macintosh? I am considering converting the
Joe Britt interface to handle hi-res data. Any other ideas?

Sean

----------------------------------------------------------------------------
 Sean Clark,               Tel: (0509) 263171x4166                    ~~~~
 LUTCHI Research Centre,   Fax: (0509) 610815                        ROCOCO
 Loughborough University,                                             ~~~~
 Leicstershire,            
 LE11 3TU, UK              Internet: S.M.Clark%lut.ac.uk@nsfnet-relay.ac.uk
----------------------------------------------------------------------------


From rparker@nike.calpoly.edu Thu Oct 10 01:51:33 1991
Received: from nike.calpoly.edu (demeter.calpoly.edu) by karazm.math.UH.EDU with SMTP id AA16451
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 10 Oct 1991 10:52:51 -0500
Received: by nike.calpoly.edu (5.61-AIX-1.2/1.0)
	id AA501206; Thu, 10 Oct 91 08:51:33 -0700
Date: Thu, 10 Oct 91 08:51:33 -0700
From: rparker@nike.calpoly.edu (Richard Parker)
Message-Id: <9110101551.AA501206@nike.calpoly.edu>
To: glove-list@karazm.math.uh.edu
Subject: Re: HiRes of for the Mac

  Once I can get a glove and interface it to my mac se I will be trying to 
get the code together for LPC on the Mac.  The only thing thats keeping me
back, is this is not a cheap endevor.
Rick

From rparker@nike.calpoly.edu Fri Oct 11 02:46:04 1991
Received: from nike.calpoly.edu (demeter.CalPoly.EDU) by karazm.math.UH.EDU with SMTP id AA22978
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 11 Oct 1991 11:47:22 -0500
Received: by nike.calpoly.edu (5.61-AIX-1.2/1.0)
	id AA516977; Fri, 11 Oct 91 09:46:04 -0700
Date: Fri, 11 Oct 91 09:46:04 -0700
From: rparker@nike.calpoly.edu (Richard Parker)
Message-Id: <9110111646.AA516977@nike.calpoly.edu>
To: glove-list@karazm.math.uh.edu
Subject: Re: LPC?

  I can't believe I wrote that... sorry  I meant LSC (Lightspeed C 4.0 or later)
instead of LPC (a c variant for LP Muds ) See what sleep deprivation does to ya.
The mac does have a parallel port along with 2 RS422 serial ports.  Also a SCSI
port which has the +5.... Maybe I could come up with a SCSI adapter for thething.  I will try to look into it this weekend, and also get a glove now that payday
has come around.

From jmunkki@hila.hut.fi Fri Oct 11 21:41:23 1991
Received: from hila.hut.fi by karazm.math.UH.EDU with SMTP id AA23172
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.UH.EDU>); Fri, 11 Oct 1991 12:45:17 -0500
Received: by hila.hut.fi (5.65c/7.0/S-TeKoLa)
	id AA01040; Fri, 11 Oct 1991 19:41:23 +0200
Date: Fri, 11 Oct 1991 19:41:23 +0200
From: Juri Munkki <jmunkki@hila.hut.fi>
Message-Id: <199110111741.AA01040@hila.hut.fi>
To: glove-list@karazm.math.UH.EDU
Subject: Macintosh...

As far as I know, Macs do not have parallel ports. Of course it is possible
to use a SCSI port as a parallel port, but it takes some logic and if you
keep things simple, you have to forget about using a proper SCSI protocol.

The serial port should be quite adequate for the glove. The only problem
is that there are only two serial ports. I already have a modem connected to
the other and will soon have localtalk on the other. This still leaves the
Sega 3D glasses and my audio sampler unconnected.

A 68HC11 board with a SCSI interface would probably be the optimal
solution. I could connect the sega glasses and the powerglove to this
hardware box. I assume that at least some versions of this processor
have some EPROM and RAM, so the board would need a clock crystal,
a SCSI-chip and a VIA. The 6522 VIA has a shift register that could
easily be used to read the glove. The other I/O lines could be used
to control the Sega glasses.

I know someone at Microsoft who has a small ADB box based on an Intel
processor. I don't know how well his system works, but I do know that
ADB provides +5V and it has some room for expansion.

   ____________________________________________________________________________
  / Juri Munkki	    /  Helsinki University of Technology   /  Wind  / Project /
 / jmunkki@hut.fi  /  Computing Center Macintosh Support  /  Surf  /  STORM  /
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

From motcsd!roi!lance@apple.com Tue Oct 11 04:06:18 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA23308
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 11 Oct 1991 13:32:45 -0500
Received: by apple.com (5.61/1-Oct-1991-eef)
	id AA16222; Fri, 11 Oct 91 11:10:01 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kVRJq-0001C0C@motcsd.csd.mot.com>; Fri, 11 Oct 91 11:10 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA17366; 11 Oct 91 11:06:19 PDT (Fri)
To: glove-list@karazm.math.uh.edu
Subject: LPC?
Message-Id: <9110111106.AA17362@roi.ca41.csd.mot.com>
Date: 11 Oct 91 11:06:18 PDT (Fri)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>


It also means Linear Predictive Coding, a data compression technique.

When you get a Power Glove, also hunt around for a soft cotton liner
glove.  The Glove is scratchy on the inside of the fingers.  As for
sensitivity to hard walls, I put the sensors on the floor and
the carpet handles that problem.  This also handles the problem
of my arm getting tired.

Lance

From beeman@cats.UCSC.EDU Fri Oct 11 05:02:41 1991
Received: from cats.UCSC.EDU by karazm.math.UH.EDU with SMTP id AA23404
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 11 Oct 1991 14:07:09 -0500
Received: from am.UCSC.EDU by cats.UCSC.EDU with SMTP
	id AA10581; Fri, 11 Oct 91 12:02:42 -0700
From: beeman@cats.UCSC.EDU
Received: by am.ucsc.edu (5.65/4.7) id AA15568; Fri, 11 Oct 91 12:02:41 -0700
Date: Fri, 11 Oct 91 12:02:41 -0700
Message-Id: <9110111902.AA15568@am.ucsc.edu>
To: glove-list@karazm.math.uh.edu
Subject: LPC!


Sleep deprivation produces miracles!  Imagine being able to program objects
in LPC on an LP-Mud with datagloves in mind!  Of course, you would need to 
add graphics routines to the language, and you would need to change all the 
text output to graphic or audio output, and the resulting project would no 
doubt either swell up into several megs of code before there could even be
two functional rooms...

Let me know if you are crazy enough to try this.

Adam


From S.M.Clark@loughborough.ac.uk Fri Oct 11 14:32:23 1991
Received: from sun2.nsfnet-relay.ac.uk by karazm.math.UH.EDU with SMTP id AA23475
  (5.65c/IDA-1.4.4 for <glove-list@KARAZM.MATH.UH.edu>); Fri, 11 Oct 1991 14:32:23 -0500
Received: from loughborough.ac.uk by sun2.nsfnet-relay.ac.uk via JANET 
          with NIFTP id <7608-2@sun2.nsfnet-relay.ac.uk>;
          Fri, 11 Oct 1991 12:11:30 +0100
Date: Fri, 11 Oct 91 10:35:24 bst
Message-Id: <11277.9110110935@hpd.lut.ac.uk>
To: glove-list@KARAZM.MATH.UH.edu
From: Sean Clark <S.M.Clark@loughborough.ac.uk>
Subject: Hi-res for PC?

Hello,

I'm having problems in conecting to the EDU.UH.MATH.KARAZM FTP site. Could
someone e-mail me a copy of the PC Hi-res code? This should keep me going
until I can get a Mac version working!

Many thanks,

Sean

----------------------------------------------------------------------------
 Sean Clark,               Tel: (0509) 263171x4166                    %%%%
 LUTCHI Research Centre,   Fax: (0509) 610815                        ROCOCO
 Loughborough University,                                             %%%%
 Leicstershire,            
 LE11 3TU, UK              Internet: S.M.Clark%lut.ac.uk@nsfnet-relay.ac.uk
----------------------------------------------------------------------------


From MCARPENTER@HMCVAX.CLAREMONT.EDU Fri Oct 11 07:24:00 1991
Received: from FRIGGA.CLAREMONT.EDU by karazm.math.UH.EDU with SMTP id AA23795
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 11 Oct 1991 16:31:25 -0500
Received: from HMCVAX.CLAREMONT.EDU by HMCVAX.CLAREMONT.EDU (PMDF #11000) id
 <01GBMFNDMGIO9S3RO4@HMCVAX.CLAREMONT.EDU>; Fri, 11 Oct 1991 14:24 PDT
Date: Fri, 11 Oct 1991 14:24 PDT
From: MATT CARPENTER <MCARPENTER@HMCVAX.CLAREMONT.EDU>
Subject: Re: LPC!
To: glove-list@karazm.math.uh.edu
Message-Id: <01GBMFNDMGIO9S3RO4@HMCVAX.CLAREMONT.EDU>
X-Vms-To: IN%"glove-list@karazm.math.uh.edu"


In message <9110111902.AA15568@am.ucsc.edu> beeman@cats.UCSC.EDU writes:

>Sleep deprivation produces miracles!  Imagine being able to program objects
>in LPC on an LP-Mud with datagloves in mind!  Of course, you would need to 
>add graphics routines to the language, and you would need to change all the 
>text output to graphic or audio output, and the resulting project would no 
>doubt either swell up into several megs of code before there could even be
>two functional rooms...

Actually, I've been thinking about something like this for a while.  If the
user connects to the MUD from a personal computer, then the MUD wouldn't have
to do much more than keep track of where the objects are (which is pretty much
what they already do anyway, although it would also need to keep track of
coordinates).  All the graphics computations and stuff could be done by the
user's computer.  For instance, the MUD would just say something like "Object
#1 has moved to x,y,z" and the user's computer, which  already has the
description data for object #1, generates the scene.  Likewise, the user's
computer translates the actions of the user (like moving a power glove around)
into a similar form which is sent to the MUD.  Of course this would all be
rather crude, but it would be interesting to experiment with. 

>Let me know if you are crazy enough to try this. 
> 
>Adam

Sure, I'm crazy enough.  Anybody else interested, or have suggestions?

Matt

From nop@att1.Mankato.MSUS.EDU Fri Oct 11 11:28:11 1991
Received: from ATT1.Mankato.MSUS.EDU by karazm.math.UH.EDU with SMTP id AA23822
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.UH.EDU>); Fri, 11 Oct 1991 16:37:13 -0500
Received:  by att1.Mankato.MSUS.EDU (5.59/25-eef)
	id AA03981; Fri, 11 Oct 91 16:28:11 CDT
Date: Fri, 11 Oct 91 16:28:11 CDT
From: Jay A. Carlson <nop@att1.Mankato.MSUS.EDU>
Message-Id: <9110112128.AA03981@att1.Mankato.MSUS.EDU>
To: jmunkki@hila.hut.fi
Cc: glove-list@karazm.math.UH.EDU
In-Reply-To: Juri Munkki's message of Fri, 11 Oct 1991 19:41:23 +0200 <199110111741.AA01040@hila.hut.fi>
Subject: Macintosh...


> A 68HC11 board with a SCSI interface would probably be the optimal
> solution. I could connect the sega glasses and the powerglove to this
> hardware box. I assume that at least some versions of this processor
> have some EPROM and RAM, so the board would need a clock crystal,
> a SCSI-chip and a VIA. The 6522 VIA has a shift register that could
> easily be used to read the glove. The other I/O lines could be used
> to control the Sega glasses.

Unfortunately, the versions of the HC11 with EPROM instead of
mask-programmed ROM are still quite pricey.  If you plan on bringing
out the bus to the SCSI chip anyway, hooking an external EPROM up is
more cost-effective.

The HC11 also has a SPI, Serial Peripheral Interface, on-chip.  It's a
more general version of the shift register of the VIA.  There also
should be plenty of I/O lines on-chip left over to drive your glasses.

If we remove the VIA, the parts list is now an HC11, a crystal, a
2764, a latch and maybe a '138 to drive the bus, and the SCSI
controller.

The same hardware, substituting an RS-232 line driver for the SCSI
chip, could be used for a universal serial glove interface.  I don't
know that much about the Apple Desktop Bus, but I know that HC11
series chips live in some ADB devices.  And finally, you can run data
out the serial port at MIDI rates, making the hypothetical board of
some interest to musical types.

I wonder how much demand there'd be for one of these boxes....

  // Jay Carlson
\X/  nop@att1.mankato.msus.edu

To subscribe to the MC68HC11 list, email to mc68hc11-request@quack.sac.ca.us.

From awilliam@qucis.queensu.ca Sat Oct 12 09:29:27 1991
Received: from QUCDN.QueensU.CA by karazm.math.UH.EDU with SMTP id AA26299
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 12 Oct 1991 12:33:07 -0500
Received: from qucis.queensu.ca by QUCDN.QueensU.CA (IBM VM SMTP V2R1) with TCP;
   Sat, 12 Oct 91 13:29:49 EDT
Received: from qusuna.qucis.queensu.ca by qucis.queensu.ca (4.1/SMI-4.1-qs1.1)
	id AA18864; Sat, 12 Oct 91 13:29:30 EDT
From: awilliam@qucis.queensu.ca (Andrew Williams)
Received: by qusuna.qucis.queensu.ca (4.1/SMI-4.0-qc1.1)
	id AA06139; Sat, 12 Oct 91 13:29:27 EDT
Date: Sat, 12 Oct 91 13:29:27 EDT
Message-Id: <9110121729.AA06139@qusuna.qucis.queensu.ca>
To: glove-list@karazm.math.uh.edu
Subject: PC (386/486) version of Hires?


Reports that it has been placed on the archive are baffling me.. 
'cause I can't seem to find it. (a very large and heartfelt *SIGH*)

If it is there can someone direct me.. if not can someone put it there OR
E-mail me a copy of the source code?? (please .. PLEASE.. (thanks))

Andrew Williams
(all suited up and the d*mn thing won't go!!)

From galt%peruvian@cs.utah.edu Sat Oct 12 16:40:41 1991
Received: from cs.utah.edu by karazm.math.UH.EDU with SMTP id AA27697
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 12 Oct 1991 23:44:36 -0500
Received: from peruvian.utah.edu by cs.utah.edu (5.65/utah-2.18-cs)
	id AA22960; Sat, 12 Oct 91 22:40:42 -0600
Received: by peruvian.utah.edu (5.65/utah-2.12s-leaf)
	id AA23053; Sat, 12 Oct 91 22:40:41 -0600
Date: Sat, 12 Oct 91 22:40:41 -0600
From: galt%peruvian@cs.utah.edu (Greg Alt)
Message-Id: <9110130440.AA23053@peruvian.utah.edu>
To: glove-list@karazm.math.uh.edu
Subject: simple code to get simple gestures

------------- cut here for pwrglove.h ----------------
typedef struct _glove_data
    {
    signed char  dum0,x,y,z,rot,fingers,keys,dum7,dum8,dum9,dumA,dumB;
    } glove_data;
 
 
void init_glove (void);
void query_glove (glove_data *);
------------- end of pwrglove.h ----------------------
------------- cut here for fingers.c -----------------
#include <stdio.h>
#include "pwrglove.h"
#include "pwrglove.c"
 
#define F1(x)   ((x>>6)&3)
#define F2(x)   ((x>>4)&3)
#define F3(x)   ((x>>2)&3)
#define F4(x)   (x&3)
#define HAND(x) (((x&2)>>1)|((x&8)>>2)|((x&32)>>3)|((x&128)>>4))
 
static char  gesture[16][8]={
       "Open   ",
       "Dbl Gun",
       "0010   ",
       "Gun    ",
       "0100   ",
       "0101   ",
       "0110   ",
       "Thumb  ",
       "Three  ",
       "Dbl Pnt",
       "1010   ",
       "Point  ",
       "O.K.   ",
       "Birdie ",
       "1110   ",
       "Fist   "};
 
void main ()
{
	glove_data   glov;
	int          hand,dir;
 
	init_glove();
	while(1)
	{
	query_glove(&glov);
	hand=HAND(glov.fingers);
	printf("%s  (%x)  (%d,%d,%d)\n",
	       gesture[hand],glov.rot,glov.x,glov.y,glov.z);
	}
}
 
------------- end of fingers.c -----------------------
I'm working on something that will strip some of the
noise out of the positional data by possibly predicting
movement. does anyone know if there are any books/papers
that discuss a decent way of doing this without having
a lag most of the time?  My first goal is to make a game
of rock/paper/scissors (once I get vogle up and running).
Anyway, have fun with this code...
    Greg

From jdb9608@cs.rit.edu Sun Oct 13 12:34:51 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA29387
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 13 Oct 1991 15:35:31 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA12699; Sun, 13 Oct 91 16:31:30 -0400
Received: from texas.CS (texas.ARPA) by junior.rit.edu (4.1/5.17)
	id AA22035; Sun, 13 Oct 91 16:20:46 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110132020.AA22035@junior.rit.edu>
Subject: Re: LPC!
To: MCARPENTER@hmcvax.claremont.edu (MATT CARPENTER)
Date: Sun, 13 Oct 91 16:34:51 EDT
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: <01GBMFNDMGIO9S3RO4@HMCVAX.CLAREMONT.EDU>; from "MATT CARPENTER" at Oct 11, 91 2:24 pm
X-Mailer: ELM [version 2.3 PL8]

> Sure, I'm crazy enough.  Anybody else interested, or have suggestions?

I'm crazy enuf, too.  That sounds like a really exciting approach to 
group communications and work environments, which has applications for
reducing business travel (among other things).  It was a MUD that
got me interested in VR in the first place (altho it was text).

I have some experience with adventures, MUD's, and adventure languages.
But, I don't have enuf.  I.e., I don't feel like I know the perfect
language to use, or the right combiniation of flexibility/power versus
simplicity/usability for the user programming language within the MUD.

But, there are other people (somewhere) who may be interested in a
project like this and have much more MUD programming experience,
on both the system and user sides.  Such a large part of this project
would overlap the issues of a normal MUD, that we'd need people
with lots of experience with MUD's.

The VR stuff would be fairly unknown to everyone, so that's okay,
but I wouldn't want to stumble around making MUD mistakes that
someone else could easily avoid. 

So, are there MUD experts on this list?

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From crash!jester@nosc.mil Sun Oct 13 17:52:57 1991
Received: from trout.nosc.mil by karazm.math.UH.EDU with SMTP id AA29737
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 13 Oct 1991 17:52:57 -0500
Received: by trout.nosc.mil (5.59/1.27)
	id AA13925; Sun, 13 Oct 91 15:49:02 PDT
Received: by crash.cts.com (/\==/\ Smail3.1.21.1 #21.3)
	id <m0kWEN4-0000EeC@crash.cts.com>; Sun, 13 Oct 91 15:33 PDT
Message-Id: <m0kWEN4-0000EeC@crash.cts.com>
From: jester@crash.cts.com (Ken Bibb)
To: glove-list@karazm.math.uh.edu
Subject: Muddy gloves
Date: Sun Oct 13 15:33:18 1991


I'm not a MUD expert, but I've always been interested in implementing a real-
time multi-user virtual reality dungeon.  I've been involved with frp since
79 and had a campaign that lasted 7 years with a group of 14 players.

The important thing would be to provide the illusion--not to simulate--the
experience.  Too many programmers/researchers spend too much time trying to
make microdetail simulations when crude simulations would be sufficient.  I
see the glove as a tool that could lead to some interesting games/work
environments.


From kd4nc!km4ba!alan@gatech.edu Sun Oct 13 19:13:00 1991
Received: from gatech.edu by karazm.math.UH.EDU with SMTP id AA01176
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 13 Oct 1991 23:22:15 -0500
Received: from gatech.UUCP by gatech.edu (4.1/Gatech-9.1)
	id AA26301 for glove-list@karazm.math.uh.edu.; Mon, 14 Oct 91 00:18:19 EDT
Received: from kd4nc.UUCP by gatech.UUCP (4.1/SMI-4.1)
	id AA24860; Mon, 14 Oct 91 00:18:00 EDT
Received: by kd4nc (smail2.5)
	id AA01256; 14 Oct 91 00:02:47 EDT (Mon)
Received: by km4ba.uucp (smail 3.1) id <m0kWKbx-00000AC@km4ba.uucp>; Sun, 13 Oct 91 23:13 EDT
Message-Id: <m0kWKbx-00000AC@km4ba.uucp>
Date: Sun, 13 Oct 91 23:13 EDT
From: km4ba!alan@gatech.edu (Alan Barrow)
To: km4ba!glove
Subject: AGE kit under $50, sign me up!

I also would be interested in a "kit" of the AGE box. PC board and
programmed micro would be fine, assuming no other unusual parts.

BTW, Walmart stores have large quan. of gloves (L) for $24.95 as well.

I may buy another!

I guess I need to dig up the old BYTE to wire mine up for the PC.
Has the schematic been posted yet? If someone will fax it to me, I 
will try to make it available in PS, gif, etc format. (Assuming this
has not been done by others.) Fax: 404/850-2703

See Ya!


 Alan Barrow  km4ba | I've seen things you people wouldn't believe. Attack
 jab@hpuerca.hp.com | ships on fire off the shoulder of Orion. I watched
                    | C-beams glitter in the dark near the Tannhauser gate.
 ..!gatech!kd4nc!   | All those moments will be lost in time -
         km4ba!alan | like tears in rain. Time to die.          Roy Batty

From kovach%rtc.atk.com%nic@rtc.atk.com Mon Oct 14 04:07:30 1991
Received: from nic.rtc.atk.com (rtc.atk.com) by karazm.math.UH.EDU with SMTP id AA02729
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 14 Oct 1991 09:11:46 -0500
Received: from hayward.rtc.atk.com ([138.64.16.55]) by nic with SMTP id <46119>; Mon, 14 Oct 1991 09:07:38 -0500
Received: by hayward.rtc.atk.com (4.1/SMI-4.1/RTC-1.1)
	id AA02532; Mon, 14 Oct 91 08:59:04 CDT
From: <kovach@rtc.atk.com>
To: jester@crash.cts.com
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: Ken Bibb's message of Sun, 13 Oct 1991 10:33:18 -0500 <m0kWEN4-0000EeC@crash.cts.com>
Subject: Muddy gloves
Message-Id: <91Oct14.090738cdt.46119@nic>
Date: 	Mon, 14 Oct 1991 09:07:30 -0500

Ken Bibb writes - 
>I'm not a MUD expert, but I've always been interested in implementing a real-
>time multi-user virtual reality dungeon.  I've been involved with frp since
>79 and had a campaign that lasted 7 years with a group of 14 players.

Well, I've been into FRP since '72. Published and everything. :->

>The important thing would be to provide the illusion--not to simulate--the
>experience.  Too many programmers/researchers spend too much time trying to
>make microdetail simulations when crude simulations would be sufficient.  I
>see the glove as a tool that could lead to some interesting games/work
>environments.

Got to agree. I`ve been looking at a glove based "sword" interface to a
dungeon for quite a while. Multiplayer through computer networking/modem is
a definite goal. 

What we need is a group of folks in a small eough geographic area to get
together and develop something. Considering how I've seen people jump as
critters step around corners while playing a game like Dungeon Master, I
can imagine this type game would be quite popular and addictive. I've just
always been to busy to do it myself:->

From rparker@nike.calpoly.edu Mon Oct 14 02:18:05 1991
Received: from nike.calpoly.edu (demeter.CalPoly.EDU) by karazm.math.UH.EDU with SMTP id AA03267
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 14 Oct 1991 11:19:26 -0500
Received: by nike.calpoly.edu (5.61-AIX-1.2/1.0)
	id AA510569; Mon, 14 Oct 91 09:18:05 -0700
Date: Mon, 14 Oct 91 09:18:05 -0700
From: rparker@nike.calpoly.edu (Richard Parker)
Message-Id: <9110141618.AA510569@nike.calpoly.edu>
To: glove-list@karazm.math.uh.edu
Subject: Re: Muddy Gloves (was VR and MUDS)

  My senior project is a Mud system with 3-d rendering graphics.  Right now
I am just woried about cursor and key movements, but the next logical step 
is glove interface.  Thats why I want to get a mac interface up and running
so I can start working on it.
  Just a note, there are some people that would hate a glove interface, same
as hating maouse input, as they feel it detracts their attention from the 
game and it takes too long ("I could do several keystrokes faster than what
this is doing .... " is a common quote)  So, if you come up with something,
that will be very nice, you might want to incorporate keys too.  (You could
use it for debugging, so it wouldn't be a total waste.  And hopefully, these
archaic types will catch up with the real world and start using alternate 
input devices.
Rick

From motcsd!roi!lance@apple.com Fri Oct 14 04:11:36 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA04334
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 14 Oct 1991 13:36:59 -0500
Received: by apple.com (5.61/1-Oct-1991-eef)
	id AA09655; Mon, 14 Oct 91 11:21:44 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kWWnB-0001C1C@motcsd.csd.mot.com>; Mon, 14 Oct 91 11:13 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA08572; 14 Oct 91 11:11:36 PDT (Mon)
To: galt%peruvian@cs.utah.edu
Subject: Re: simple code to get simple gestures
Cc: glove-list@karazm.math.uh.edu
Message-Id: <9110141111.AA08568@roi.ca41.csd.mot.com>
Date: 14 Oct 91 11:11:36 PDT (Mon)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>


Yes, Fred Brooks of the Pixel-Planes project said that predictive
tracking should work best.  

Graphics Gems II has a thing on predictive coding as compression technique.
Here's the idea: you have a state machine which reads a sample stream and 
guesses the next sample, and output the difference between your guess
and the actual sample.  This should give you lots of samples with low
values, suitable for Huffman or dictionary compression.  I've been
itching to try this on sound samples.  The article does it on pictures,
and shows the error output as a separate picture.  It's an excellent
demonstration of the principle.

A first attempt would track the slope of the last few samples, thus
extending the first derivative out.  If you assume that the input
stream is delayed by X milliseconds, and it samples at half your
update rate, you can create a separate one-dimensional tracker
for each of (X, Y, Z, rot) and do a better job than drawing
from raw input.  You can also reject weird inputs, and average
noisy ones.

If you move your hand fast and then stop, the predictive tracking
will overshoot and come back to the resting place.  Cest la vie.

I'd say it's time to sample movements, run the output through
a statistics package, and figure out just what kind of error
you need to deal with.

Lance Norskog

From jet Mon Oct 14 09:07:07 1991
Received: by karazm.math.UH.EDU id AA04448
  (5.65c/IDA-1.4.4 for glove-list); Mon, 14 Oct 1991 14:07:08 -0500
From: J Eric Townsend <jet>
Message-Id: <199110141907.AA04448@karazm.math.UH.EDU>
Subject: move to a newsgroup?
To: glove-list
Date: Mon, 14 Oct 91 14:07:07 CDT
X-Mailer: ELM [version 2.3 PL11]


Any reason why this list shouldn't become a newsgroup?  I'm more than
willing to keep karazm as the ftp site for glove related sources..

I was thinking

comp.periphs.glove -- since datagloves will fall in price over the
		      next few years.

Or perhaps:
alt.power-glove -- to test the waters and see what the response is like.

-- 
J. Eric Townsend - jet@uh.edu - Systems Wrangler, UH Dept of Mathematics
vox: (713) 749-2126  '91 CB750, DoD# 0378, TMRA# 27834
PowerGlove mailing list: glove-list-request@karazm.math.uh.edu

From rparker@nike.calpoly.edu Mon Oct 14 06:07:50 1991
Received: from nike.calpoly.edu (demeter.CalPoly.EDU) by karazm.math.UH.EDU with SMTP id AA04894
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 14 Oct 1991 15:09:11 -0500
Received: by nike.calpoly.edu (5.61-AIX-1.2/1.0)
	id AA514151; Mon, 14 Oct 91 13:07:50 -0700
Date: Mon, 14 Oct 91 13:07:50 -0700
From: rparker@nike.calpoly.edu (Richard Parker)
Message-Id: <9110142007.AA514151@nike.calpoly.edu>
To: glove-list@karazm.math.uh.edu
Subject: Re: Newsgroup

  The idea of putting this into a newsgroup sounds like a good idea.  We would
get more input from people that don't know about the group, and possibly some
different opinions.  The name that sounds best so far is the comp.periph.glove
as it stresses the technical aspect of the glove as an alternate input device
vs. a game toy interface.

From jet Mon Oct 14 10:49:40 1991
Received: by karazm.math.UH.EDU id AA05027
  (5.65c/IDA-1.4.4 for glove-list); Mon, 14 Oct 1991 15:49:40 -0500
From: J Eric Townsend <jet>
Message-Id: <199110142049.AA05027@karazm.math.UH.EDU>
Subject: Re: Newsgroup
To: glove-list
Date: Mon, 14 Oct 91 15:49:40 CDT
X-Mailer: ELM [version 2.3 PL11]

>From: rparker@nike.calpoly.edu (Richard Parker)
>
>  The idea of putting this into a newsgroup sounds like a good idea.  We would
>get more input from people that don't know about the group, and possibly some
>different opinions.  The name that sounds best so far is the comp.periph.glove
>as it stresses the technical aspect of the glove as an alternate input device
>vs. a game toy interface.
>


-- 
J. Eric Townsend - jet@uh.edu - Systems Wrangler, UH Dept of Mathematics
vox: (713) 749-2126  '91 CB750, DoD# 0378, TMRA# 27834
PowerGlove mailing list: glove-list-request@karazm.math.uh.edu

From jdb9608@cs.rit.edu Mon Oct 14 13:06:40 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA05146
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 14 Oct 1991 16:09:42 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA09776; Mon, 14 Oct 91 17:05:43 -0400
Received: from calcium.CS (calcium.ARPA) by junior.rit.edu (4.1/5.17)
	id AA26349; Mon, 14 Oct 91 16:54:56 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110142054.AA26349@junior.rit.edu>
Subject: Re: Newsgroup
To: glove-list@karazm.math.uh.edu
Date: Mon, 14 Oct 91 17:06:40 EDT
X-Mailer: ELM [version 2.3 PL8]

It's a good idea to make the glove-list a newsgroup,
depending on how many subscribers there are.  How many are there?

Also, how about a mailing list or newsgroup for low-end VR?
Sci.virtual-worlds doesn't seem appropriate for the noise
that various colaborative efforts would require---it seems
more for the high-end researchers who work on exotic machines
and don't publish code.  But, the glove-list doesn't seem
right either, since many other issues besides the glove are involved.

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From jet Mon Oct 14 11:33:30 1991
Received: by karazm.math.UH.EDU id AA05396
  (5.65c/IDA-1.4.4 for glove-list); Mon, 14 Oct 1991 16:33:31 -0500
From: J Eric Townsend <jet>
Message-Id: <199110142133.AA05396@karazm.math.UH.EDU>
Subject: re: newsgroup
To: glove-list
Date: Mon, 14 Oct 91 16:33:30 CDT
X-Mailer: ELM [version 2.3 PL11]

>It's a good idea to make the glove-list a newsgroup,
>depending on how many subscribers there are.  How many are there?

$ wc -l vr/glove-list/list
294 vr/glove-list/list

Almost 300, it would seem.

-- 
J. Eric Townsend - jet@uh.edu - Systems Wrangler, UH Dept of Mathematics
vox: (713) 749-2126  '91 CB750, DoD# 0378, TMRA# 27834
PowerGlove mailing list: glove-list-request@karazm.math.uh.edu
"allow users to create more impactful documents" -- from Apple press release

From gbnewby@alexia.lis.uiuc.edu Mon Oct 14 12:14:42 1991
Received: from alexia.lis.uiuc.edu by karazm.math.UH.EDU with SMTP id AA05803
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 14 Oct 1991 17:18:56 -0500
Received: by alexia.lis.uiuc.edu id AA02728
  (5.61/ for glove-list@karazm.math.uh.edu); Mon, 14 Oct 91 17:14:42 -0500
Date: Mon, 14 Oct 91 17:14:42 -0500
From: Greg Newby <gbnewby@alexia.lis.uiuc.edu>
Message-Id: <9110142214.AA02728@alexia.lis.uiuc.edu>
To: glove-list@karazm.math.uh.edu, rparker@nike.calpoly.edu
Subject: Re: Newsgroup
Cc: gbnewby@alexia.lis.uiuc.edu

Hi, all.  In order to form a non-alt group (one in the comp. hierarchy,
for example), you need to take a vote.  This is a fairly well-defined
process, in which initial feedback and support is solicited.  

Someone would have to volunteer for this (sorry, not me), keep
track of votes, and then institute the group.  I don't have the
file containing details -- I think  news.admin  or something like
that has a FAQ on this topic.
-- Greg

From dstamp@watserv1.uwaterloo.ca Mon Oct 14 14:35:47 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA06017
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 14 Oct 1991 17:41:36 -0500
Received: by watserv1.uwaterloo.ca
	id <AA18567>; Mon, 14 Oct 91 18:35:47 -0400
Date: Mon, 14 Oct 91 18:35:47 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110142235.AA18567@watserv1.uwaterloo.ca>
To: galt%peruvian@cs.utah.edu, lance@roi.ca41.csd.mot.com
Subject: Re: simple code to get simple gestures
Cc: glove-list@karazm.math.uh.edu

> From glove-list-request@karazm.math.UH.EDU Mon Oct 14 15:44:19 1991
> To: galt%peruvian@cs.utah.edu
> Subject: Re: simple code to get simple gestures
> Cc: glove-list@karazm.math.uh.edu
> From: Lance Norskog <lance@roi.ca41.csd.mot.com>
> 
> 
> Yes, Fred Brooks of the Pixel-Planes project said that predictive
> tracking should work best.  
> 
> Graphics Gems II has a thing on predictive coding as compression technique.
> Here's the idea: you have a state machine which reads a sample stream and 
> guesses the next sample, and output the difference between your guess
> and the actual sample.  This should give you lots of samples with low
> values, suitable for Huffman or dictionary compression.  I've been
> itching to try this on sound samples.  The article does it on pictures,
> and shows the error output as a separate picture.  It's an excellent
> demonstration of the principle.
> 
> A first attempt would track the slope of the last few samples, thus
> extending the first derivative out.  If you assume that the input
> stream is delayed by X milliseconds, and it samples at half your
> update rate, you can create a separate one-dimensional tracker
> for each of (X, Y, Z, rot) and do a better job than drawing
> from raw input.  You can also reject weird inputs, and average
> noisy ones.
> 
> If you move your hand fast and then stop, the predictive tracking
> will overshoot and come back to the resting place.  Cest la vie.
> 
> I'd say it's time to sample movements, run the output through
> a statistics package, and figure out just what kind of error
> you need to deal with.
> 
> Lance Norskog
> 
Sounds like a Kalman predictive filter.  The question is, how much will
the overshoots affect operator performance?
If you're going to develop the code for such a filter, I hope you make
several versions, using different delays.  This would allow users to
match the filter to their own system's video display, rendering and
processing times.  Isuggest multiples of 33 mS.
Also, it would be interesting to set up a simple system using a "bar"
cursor or other easy-to-draw symbol, and try out the effect of changing
the filter coefficients.  After all, we're getting into psychophysics
here, and that is *not* an easy field to predict.  I've noticed weird
"viscous" effects using head-position to cursor feedback with a system
delay of 50 mS or less.  Addition of hysterisis of 1/6 visual degree
stopped that, and reduced noise, but at the cost of some of the 
"reality" feel of the system.  It's amazing how little it takes to 
make such feedback feel like a "tool" rather than an extension of
the body.

Dave Stampe

From motcsd!roi!lance@apple.com Fri Oct 14 10:15:36 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA06436
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 14 Oct 1991 19:40:02 -0500
Received: by apple.com (5.61/1-Oct-1991-eef)
	id AA25749; Mon, 14 Oct 91 17:21:03 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kWcTV-0001BVC@motcsd.csd.mot.com>; Mon, 14 Oct 91 17:17 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA12566; 14 Oct 91 17:15:40 PDT (Mon)
To: galt%peruvian@cs.utah.edu, lance@roi.ca41.csd.mot.com,
        dstamp@watserv1.uwaterloo.ca
Subject: Re: simple code to get simple gestures
Cc: glove-list@karazm.math.uh.edu
Message-Id: <9110141715.AA12550@roi.ca41.csd.mot.com>
Date: 14 Oct 91 17:15:36 PDT (Mon)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>

	> 
	Sounds like a Kalman predictive filter.  The question is, how much will
	the overshoots affect operator performance?
	If you're going to develop the code for such a filter, I hope you make
	several versions, using different delays.  This would allow users to
	match the filter to their own system's video display, rendering and
	processing times.  Isuggest multiples of 33 mS.
	Also, it would be interesting to set up a simple system using a "bar"
	cursor or other easy-to-draw symbol, and try out the effect of changing
	the filter coefficients.  After all, we're getting into psychophysics
	here, and that is *not* an easy field to predict.  I've noticed weird
	"viscous" effects using head-position to cursor feedback with a system
	delay of 50 mS or less.  Addition of hysterisis of 1/6 visual degree
	stopped that, and reduced noise, but at the cost of some of the 
	"reality" feel of the system.  It's amazing how little it takes to 
	make such feedback feel like a "tool" rather than an extension of
	the body.

Sounds like you know what you're talking about and I don't.

Yes, this needs a lot of experimentation, and preferably a
menu and calibration system.  I don't believe in canned software.
"I know what you need.  Trust me!"

References, please?  Should I look for books by Kalman at the
Stanford CS library?  References in CACM year-end indices?

Thanks,

Lance Norskog

From dstamp@watserv1.uwaterloo.ca Mon Oct 14 17:58:04 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA06855
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 14 Oct 1991 21:05:44 -0500
Received: by watserv1.uwaterloo.ca
	id <AA23815>; Mon, 14 Oct 91 21:58:04 -0400
Date: Mon, 14 Oct 91 21:58:04 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110150158.AA23815@watserv1.uwaterloo.ca>
To: dstamp@watserv1.uwaterloo.ca, galt%peruvian@cs.utah.edu,
        lance@roi.ca41.csd.mot.com
Subject: Re: simple code to get simple gestures
Cc: glove-list@karazm.math.uh.edu

A "Kalman filter" refers to any of a class of predictive filters.  The simplest predictive filter is just a "highpass" type.  What I gather from your talk
of "states" is that you are referring to a "state-variable" type of filter.

OK, enough of the technical terms.  Basically, what you need to do is to
look up some signal-processing or control textbooks.  Alternatively,
there should be some software available to generate your filter code
given delays, etc.

Now the bad news.  This type of filter will always have overshoots
and delays at any change of velocity of the glove.  This means that
the image of the glove will play catch-up when motion starts, and
will continue moving after motion ceases, then go backwars to correct
itself.  This can be disconcerting to the user!

The predictive filters also tend to increse noise in position.  The
"jitter" in the hi-res mode (if it is just a quick jump to the wrong
position and back) can be removed at the cost of more delay-- just add
a glitch detector to the glove data output.  Alternatively, the 
derivative or highpass terms of the predictive filter can be limited,
but this might cause weird effects during fast motions.

From what I've read about flight simulators, the best way to find the
correct filter coefficients is to compute them as usual, then get into
an interactive program (using the glove to move a cursor), and test the
"feel" of the system.  Try several different sets of coefficients, then
use the intuition you'll develop to tweak the program.

Hope you can find some references that are more CS based, or sample code.
All the stuff I have assumes familiarity with Laplace transforms and other
scary stuff (typical engineering overkill).

Dave Stampe

From giszter@ai.mit.edu Mon Oct 14 19:07:26 1991
Received: from life.ai.mit.edu by karazm.math.UH.EDU with SMTP id AA07093
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 14 Oct 1991 22:12:01 -0500
Received: from cauda-equina (CAUDA-EQUINA.MIT.EDU) by life.ai.mit.edu (4.1/AI-4.10) id AA19676; Mon, 14 Oct 91 23:07:38 EDT
From: giszter@ai.mit.edu (Simon Giszter)
Received: by cauda-equina (4.1/AI-4.10) id AA02969; Mon, 14 Oct 91 23:07:26 EDT
Date: Mon, 14 Oct 91 23:07:26 EDT
Message-Id: <9110150307.AA02969@cauda-equina>
To: glove-list@karazm.math.uh.edu
Subject: PC Hi Res
Cc: giszter@ai.mit.edu


I played with the Hi Res mode on a 25MHz 386 tonight. I found much of the 
jitter in values disappeared when I added in a small delay in the 
readbit macro.

namely:

#define readbit(x) for(i=0;i<5;i++); rd=inportb(0x379); ...

I still couldn't push the thing beyond the 4/21 for constants N & D 
which Greg Alt found. It was actually most stable a little below that
speed (i.e. the dummy values were all stable). I didn't have obvious 
echo problems unless I shielded the glove with my hand. If your glove
is skittish it may help to add this delay.

ciao,
Simon


From paulg@tplrd.tpl.oz.AU Tue Oct 15 19:49:41 1991
Received: from metro.ucc.su.OZ.AU by karazm.math.UH.EDU with SMTP id AA07603
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 00:20:57 -0500
Received: by metro.ucc.su.OZ.AU (5.61/1.34)
	id AA11324; Tue, 15 Oct 1991 15:16:21 +1000
Received: by tpl68k0 (5.51/2.27); id AA21792; Tue, 15 Oct 91 09:48:52 EST
From: paulg@tplrd.tpl.oz.au (Paul Gittings)
Message-Id: <9110142348.AA21792@tpl68k0>
Received: from loopback by sydrd15 (4.1/2.14); id AA23086; Tue, 15 Oct 91 09:49:43 EST
To: glove-list@karazm.math.UH.EDU
Subject: RE: move to a newsgroup? 
Date: Tue, 15 Oct 91 09:49:41 +1000


------- Forwarded Message

> J Eric Townsend <JET%UH.EDU@metro.ucc.su.OZ.AU> in
> Message-Id: <199110141907.AA04448@karazm.math.UH.EDU>  wrote:

> Or perhaps:
> alt.power-glove -- to test the waters and see what the response is like.

A newsgroup may be a good idea, but please don't make it an "alt" group
this site does not receive any of the "alt" groups.  Maybe the group
should be a bit more general to cover things like: head mounted tracking
devices, sega specs etc??

Cheers,
Paul Gittings
Telectronics Pacing Systems - 7 Sirius Rd, Lane Cove, NSW 2066, Australia
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   _              | paulg@tplrd.tpl.oz.au     | What's a Welsh/Canadian
_ // Amiga users  | 61-2-4136963 (voice: work)| doing in Oz? Looking for
\X/ make it happen| 61-2-4136868 (fax)        | the Wizard of course!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
No matter how much I beg, Telectronics will not allow me to express any
opinions on its behalf.


From "Marshall_Robin"@NESTOR10.ceo.dg.com Tue Oct 15 07:40:14 1991
Received: from dg-rtp.dg.com (dg-rtp.rtp.dg.com) by karazm.math.UH.EDU with SMTP id AA08965
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 10:55:13 -0500
Received: from rtp40.rtp.dg.com by dg-rtp.dg.com (5.4/dg-rtp-proto)
	id AA10380; Tue, 15 Oct 1991 11:51:09 -0400
Received: by rtp40.dg.com (1.00/2.1)
	id AC00033; Tue, 15 Oct 91 11:40:14 edt
Date: Tue, 15 Oct 91 11:40:14 edt
Message-Id: <9110151640.AC00033@rtp40.dg.com>
From: Marshall_Robin@CEO_SWD.ceo.dg.com
To: glove-list@karazm.math.uh.edu
Subject: CHEAP source of gloves in Central MA area
X-Ceo_Options: Short_message

Anyone know where I can get a PowerGlove in the central MA
area for around $25 (the price it is at Wal-Mart)? Thanks...
 
-marsh
 




From schildba@spot.Colorado.EDU Tue Oct 15 05:26:04 1991
Received: from spot.Colorado.EDU by karazm.math.UH.EDU with SMTP id AA09295
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 12:30:01 -0500
Received: by spot.Colorado.EDU id AA24142
  (5.65b+/IDA-1.4.3/CNS-2.0 for glove-list@karazm.math.uh.edu); Tue, 15 Oct 91 11:26:04 -0600
Date: Tue, 15 Oct 91 11:26:04 -0600
From: SCHILDBACH WOLFGANG <schildba@spot.Colorado.EDU>
Message-Id: <9110151726.AA24142@spot.Colorado.EDU>
To: glove-list@karazm.math.uh.edu
Subject: LPC vs. polynomial predicting

Is it really a good idea to use Linear Predictive Coding for the glove?
From what I understand LPC works with fourier coefficients of the data
given, or, in other words, it tries to model the data as a sum of sines
and cosines. Now I would guess that most movements you make are not sinu-
soidal but rather polynomial (i.e. the velocity should go like a parabola).
(Of course, some research has to be done at that, but it shouldn't be to
hard for those of you who have gloves to write a little hack that records
your glove movements on time and display this data.)
	Now if the velocity is mainly polynomial, wouldn't it be better
to model it as a polynomial?

	For references on Kalman filters, LPC etc. try

Teukolsky, Vetterling, Press, Flannery: Numerical Recipes in (C|FORTRAN|PASCAL)

which is technical (the matter is, after all) but easy to understand. It
contains a lot of sources that might help.

	For filtering the glove output, I would suggest what I would call a
"plausibility filter": If the (pos,vel) measurement at time 0 is (x0,v0) and
time t is x1, solve x1=x0+v0 t+1/2 a t^2 for a (the acceleration) and check if
it gives a reasonable value. If not, reject the measurement and predict it in-
stead.

Ciao
 Wolfgang

From jdb9608@cs.rit.edu Tue Oct 15 08:28:34 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA09315
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 12:39:09 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA20933; Tue, 15 Oct 91 12:25:04 -0400
Received: from texas.CS (texas.ARPA) by junior.rit.edu (4.1/5.17)
	id AA28947; Tue, 15 Oct 91 12:14:13 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110151614.AA28947@junior.rit.edu>
Subject: Re: Newsgroup
To: glove-list@karazm.math.uh.edu
Date: Tue, 15 Oct 91 12:28:34 EDT
X-Mailer: ELM [version 2.3 PL8]

Greg's right; there are well-established procedures for normal
hiearchy newsgroups.  So, a comp. group would take some time
to make (something like a week of discussion period plus a month
of voting period, or more).  An alt. group takes no time to make,
because there are no such rules for them, but not everyone can
get the alt. groups.

We get the alt. groups here.  Is there anyone who can't get them?

If not, an alt. group could be made right away, and then after
the appropriate procedures are followed it could move to a comp. group.

Eric, do you have software that will automatically gateway between
a newsgroup and a mailing list?  I haven't seen any, but I'm sure
it exists.  Would that be defeating the point of making it a newsgroup?

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From motcsd!roi!lance@apple.com Sat Oct 15 03:26:01 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA09377
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 12:55:06 -0500
Received: by apple.com (5.61/1-Oct-1991-eef)
	id AA06533; Tue, 15 Oct 91 10:34:05 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kWsYq-0001BkC@motcsd.csd.mot.com>; Tue, 15 Oct 91 10:28 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA17786; 15 Oct 91 10:26:01 PDT (Tue)
To: giszter@ai.mit.edu, glove-list@karazm.math.uh.edu
Subject: Re:  PC Hi Res
Message-Id: <9110151026.AA17781@roi.ca41.csd.mot.com>
Date: 15 Oct 91 10:26:01 PDT (Tue)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>

	
> I played with the Hi Res mode on a 25MHz 386 tonight. I found much of the 
> jitter in values disappeared when I added in a small delay in the 
> readbit macro.
	
Yes, the PC parallel port has data input lines and control input lines.
The data input lines are, in fact, 2-way, and they have some
settling time.  The control input lines are one-way, and are faster.

Lance Norskog

From jdb9608@cs.rit.edu Tue Oct 15 10:14:51 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA09477
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 13:15:21 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA24521; Tue, 15 Oct 91 14:11:22 -0400
Received: from texas.CS (texas.ARPA) by junior.rit.edu (4.1/5.17)
	id AA29369; Tue, 15 Oct 91 14:00:29 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110151800.AA29369@junior.rit.edu>
Subject: sega glasses available?
To: glove-list@karazm.math.uh.edu
Date: Tue, 15 Oct 91 14:14:51 EDT
X-Mailer: ELM [version 2.3 PL8]

Does anyone know where Sega 3D glasses are available (and $)?
(Or another type, I guess, and cost?)

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From motcsd!roi!lance@apple.com Sat Oct 15 03:53:17 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA09475
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 13:15:13 -0500
Received: by apple.com (5.61/1-Oct-1991-eef)
	id AA10508; Tue, 15 Oct 91 10:59:42 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kWszJ-0000poC@motcsd.csd.mot.com>; Tue, 15 Oct 91 10:55 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA18005; 15 Oct 91 10:53:18 PDT (Tue)
To: dstamp@watserv1.uwaterloo.ca, galt%peruvian@cs.utah.edu
Subject: Re: simple code to get simple gestures
Cc: glove-list@karazm.math.uh.edu
Message-Id: <9110151053.AA18001@roi.ca41.csd.mot.com>
Date: 15 Oct 91 10:53:17 PDT (Tue)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>

	
	Now the bad news.  This type of filter will always have overshoots
	and delays at any change of velocity of the glove.  This means that
	the image of the glove will play catch-up when motion starts, and
	will continue moving after motion ceases, then go backwars to correct
	itself.  This can be disconcerting to the user!
	
This follows the signal-processing paradigm.  An extensions
of the mouse-cursor paradigm is another possibility.

If you're willing to forgo the direct mapping concept,
prediction from the glove inputs can just "push" a 3D 
position around.  Changes in direction and speed can
be handled as special cases to avoid the overshoot/correction
effect.

Being 31 (as of this weekend) instead of 12 years old,
I don't plan to hold my hand up to the screen 
for several hours at a time anyway.
I've been testing with the sensors arranged on the
floor and letting my hand hang down.  I don't see that
I need direct mapping to use the glove in this mode,
and so the 3D-cursor-pushing scheme should work fine.

Lance Norskog

From aaronp@narrator.pen.tek.com Tue Oct 15 04:33:36 1991
Received: from relay.tek.com by karazm.math.UH.EDU with SMTP id AA09588
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 13:43:54 -0500
Received: by relay.tek.com id <AA02013@relay.tek.com>; Tue, 15 Oct 91 11:33:40 -0700
Received: from tekig7.map.tek.com by tektronix.TEK.COM (4.1/7.1)
	id AA18129; Tue, 15 Oct 91 11:33:18 PDT
Received: from narrator.PEN.TEK.COM (narrator.TEK) by tekig7.map.tek.com (4.1/7.1)
	id AA25497; Tue, 15 Oct 91 11:33:36 PDT
Received: by narrator.PEN.TEK.COM (4.1/7.1)
	id AA01622; Tue, 15 Oct 91 11:33:36 PDT
Date: Tue, 15 Oct 91 11:33:36 PDT
From: aaronp@narrator.pen.tek.com (Aaron Pulkka)
Message-Id: <9110151833.AA01622@narrator.PEN.TEK.COM>
To: glove-list@karazm.math.uh.edu
Subject: Low-end VR Newsgroup (was Re: move to a newsgroup?)


If this list truly has about 300 participants, I think now is a reasonable
time to consider moving to a newsgroup.  If this list does move to a
newsgroup, I suggest that its scope be expanded to include all types of
low-end (read: cheap) VR solutions.

From reading resent submissions on this topic I get the impression that
there are others who agree with this approach.  Now comes the tough part:
What should the newsgroup be named and who will organize its creation?

I suggest that the newsgroup should not be part of the 'alt' hierarchy,
since many sites don't carry it; either the 'comp' or 'sci' hierarchy
would work.  If the discussions are only going to be
about peripherals like the power glove and the Sega glasses, then it
would make sense to tag onto the end of 'comp.periphs' (something like
'comp.periphs.virtual')If people want to also talk about rendering
3-D graphics or creating 3-D sound with a PC, then 'periphs' wouldn't
be quite as appropriate (maybe 'comp.sys.virtual' or
'sci.virtual-worlds.low-end').  Can anyone think of a more flattering
tag then 'low-end'?

I would be willing to administrate the Call For Votes if there is
some kind of consensus about what the scope and name of the newsgroup
should be.

Another question comes to mind...should the newsgroup be moderated?
The answer to that is usually "yes it should, but no one wants to do it."
I might be willing to moderate such a group as well (depending mainly
on what the scope will be).


Please e-mail me (or this list, if you prefer) any ideas or suggestions
about the scope and name of this proposed newsgroup.  Consider these
names:
	comp.periphs.glove  (previously proposed to discuss only the glove)
	comp.periphs.virtual
	comp.sys.virtual
	sci.virtual-worlds.low-end

        +--------------\
        | Aaron Pulkka  >       aaronp@narrator.PEN.TEK.COM
        +--------------/
"when there is no answer,
 we are free to think." -- 1991 Portland Creative Conference

From dstamp@watserv1.uwaterloo.ca Tue Oct 15 10:47:19 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA09615
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 13:51:31 -0500
Received: by watserv1.uwaterloo.ca
	id <AA05571>; Tue, 15 Oct 91 14:47:19 -0400
Date: Tue, 15 Oct 91 14:47:19 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110151847.AA05571@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu, schildba@spot.Colorado.EDU
Subject: Re:  LPC vs. polynomial predicting

I think one of the problems with ANY predictive filtering of the poer glove
is going to be the sparseness of the data (that is, the wide spacing of
the samples).  These methods work best with finer data.

BTW, an idea about speeding the glove's readout: from my fooling around,
the glove's computer reads the receivers after pulsing the two transmitters
(20 mS each) then reads the fingers with an RC circuit and comparator for
each finger.  This takes the remaining 35 mS of the 75 mS glove cycle: in
fact, when you bend the fingers, you can *hear* the transmitter's click
rate change, showing that the finger read cycle gets shorter.
SO: why not "hardwire" the finger sensor RC circuits low (or high, I forget
which) and cut 35 mS off the sample period?  An external A/D converter 
could read the finger positions with at least 4 bits of precision.
Of course, there are obvious disadvantages here, but it might push the sample
rate up to 25 Hz, which is much better than the current 13.3 Hz

-Dave Stampe

From brownp@dg-rtp.dg.com Tue Oct 15 10:34:54 1991
Received: from dg-rtp.dg.com (dg-rtp.rtp.dg.com) by karazm.math.UH.EDU with SMTP id AA09703
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 14:07:08 -0500
Received: from stuff.rtp.dg.com by dg-rtp.dg.com (5.4/dg-rtp-proto)
	id AA25398; Tue, 15 Oct 1991 14:36:07 -0400
Received: by stuff (5.4/rtp-s04)
	id AA05236; Tue, 15 Oct 1991 14:34:55 -0400
From: brownp@dg-rtp.dg.com (Peter Brown)
Message-Id: <9110151834.AA05236@stuff>
Subject: sega glasses available? (fwd)
To: glove-list@karazm.math.uh.edu
Date: Tue, 15 Oct 91 14:34:54 EDT
X-Mailer: ELM [version 2.3 PL11]

Please tell me too!  I've been loking around, but no luck yet.  I think
I remember someone saying something about Toy Liquidators, but I didn't
see any at the local one.

> 
> Does anyone know where Sega 3D glasses are available (and $)?
> (Or another type, I guess, and cost?)
> 
> --
> J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."
> 

-- 
Peter Brown --- brownp@stuff.rtp.dg.com --- x6009 -- hall 123 office 10

From burgess@warhol.cc.gatech.edu Tue Oct 15 11:11:31 1991
Received: from gatech.edu by karazm.math.UH.EDU with SMTP id AA09790
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 14:26:28 -0500
Received: from cc.gatech.edu (hermes.cc.gatech.edu) by gatech.edu (4.1/Gatech-9.1)
	id AA20086 for glove-list@karazm.math.uh.edu; Tue, 15 Oct 91 15:22:23 EDT
Received: from warhol.cc.gatech.edu by cc.gatech.edu (3.2/SMI-3.2)
	id AA08626; Tue, 15 Oct 91 15:21:43 EDT
Received: by warhol.cc.gatech.edu (NeXT-1.0 (From Sendmail 5.52)/SMI-4.1)
	id AA08238; Tue, 15 Oct 91 15:11:31 EDT
Date: Tue, 15 Oct 91 15:11:31 EDT
From: burgess@cc.gatech.edu (David Burgess)
Message-Id: <9110151911.AA08238@warhol.cc.gatech.edu>
Received: by NeXT Mailer (1.62)
To: glove-list@karazm.math.uh.edu
Subject: Re: LPC vs. polynomial predicting


I normally just listen to this list, but since I'm up to my neck in filters and predictors right  
now, I couldn't help but run my mouth:
Linear predictive coding predicts with a linear filter: a differential equation, or, in the digital  
domain, a difference equation.  Implementation is easy: you just feed the signal into the  
filter and take the result.  The trick is picking the right filter.
Low pass filters will control jitter, but may give sluggish response.
A properly tuned second order filter is good for many control/conditioning applications,  
like the suspension system of your car.  It will reduce jitter, but still can be tuned to give a  
quick response.  A second order difference equation looks like:
y[n] = x[n] + ax[n-1] + bx[n-2] + cy[n-1] + dy[n-2]
where x is the input, y is the output, n is the time index, any all the other things are  
coefficiants.  choose a,b,c,d carefully, because bad choices will give unstable filters that  
can oscillate uncontrolably or go racing off into infinity.
I once experimented with polynomial prediction on my mouse driver, and found the first  
order prediction was ok, but higher order (quadratic, cubic, etc.) resulted in really bad  
overshoot.
Disclaimers: I've never used a power-glove.  I'm not a professional DSP engineer.

--david

From robichau@lambda.msfc.nasa.gov Tue Oct 15 09:54:44 1991
Received: from lambda.msfc.nasa.gov by karazm.math.UH.EDU with SMTP id AA10181
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 14:58:56 -0500
Received: by lambda.msfc.nasa.gov (4.0/SMI-4.0)
	id AA11591; Tue, 15 Oct 91 14:54:44 CDT
Date: Tue, 15 Oct 91 14:54:44 CDT
From: robichau@lambda.msfc.nasa.gov (Paul Robichaux)
Message-Id: <9110151954.AA11591@lambda.msfc.nasa.gov>
To: aaronp@narrator.pen.tek.com
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: Aaron Pulkka's message of Tue, 15 Oct 91 11:33:36 PDT <9110151833.AA01622@narrator.PEN.TEK.COM>
Subject: Low-end VR Newsgroup (was Re: move to a newsgroup?)

Perhaps "sci.virtual-worlds.small?"

I think that the new group would work best as a discussion area for 
inexpensive VR systems; thus, it should permit discussion of peripherals,
software techniques, and interface issues (although the last should 
probably be in sci.virtual-worlds.)

I'm willing to help in the c.f.v, or to serve as moderator if necessary. 

-Paul 

From crash!jester@nosc.mil Tue Oct 15 15:10:49 1991
Received: from trout.nosc.mil by karazm.math.UH.EDU with SMTP id AA10345
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 15:10:49 -0500
Received: by trout.nosc.mil (5.59/1.27)
	id AA09481; Tue, 15 Oct 91 13:06:51 PDT
Received: by crash.cts.com (/\==/\ Smail3.1.21.1 #21.3)
	id <m0kWv0r-0000KDC@crash.cts.com>; Tue, 15 Oct 91 13:05 PDT
Message-Id: <m0kWv0r-0000KDC@crash.cts.com>
From: jester@crash.cts.com (Ken Bibb)
To: glove-list@karazm.math.uh.edu
Subject: newsgroups
Date: Tue Oct 15 13:05:13 1991


Why not have two groups?  comp.periphs.glove and sci.virtual-worlds.entry
to cover the concerns that have been discussed?  The first would be glove
only stuff (the equivalent of this group) and the second could be for
low end virtual reality work.


From dstamp@watserv1.uwaterloo.ca Tue Oct 15 12:15:07 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA10520
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 15:19:20 -0500
Received: by watserv1.uwaterloo.ca
	id <AA11950>; Tue, 15 Oct 91 16:15:07 -0400
Date: Tue, 15 Oct 91 16:15:07 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110152015.AA11950@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

Lance Norskog <lance@roi.ca41.csd.mot.com> says:
	
>If you're willing to forgo the direct mapping concept,
>prediction from the glove inputs can just "push" a 3D 
>position around.  Changes in direction and speed can
>be handled as special cases to avoid the overshoot/correction
>effect.
>
>Being 31 (as of this weekend) instead of 12 years old,
>I don't plan to hold my hand up to the screen 
>for several hours at a time anyway.
>I've been testing with the sensors arranged on the
>floor and letting my hand hang down.  I don't see that
>I need direct mapping to use the glove in this mode,
>and so the 3D-cursor-pushing scheme should work fine.

This is, of course, true.  How critical the read rate of the Glove is
depends on the application.  As a mouse, it's OK, but I wouldn't try
drawing with it (B-{) !

The type of application where the delay is critial is VR (virtual reality).
Here, any mapping errors or delay between glove movement and the video seen by 
the user's eyes results in wear and tear on the user, and in extreme cases 
destroys the VR illusion ("That can't be MY hand unless I have a rubber arm!")

Of course, in VR the video usually takes a long time to draw too.  This can add up to 200 mS to the glove's own 75 mS data delay.  This is bad: the rule of
thumb for aircraft simulators is 200 mS maximum, and a 300 mS delay completely 
destroys coordination.  100 mS delay is enough to make handwriting difficult,
according to one experiment. (This one used delayed video from a camera:
how much better "rendering" can you get?)

If you're interested in other uses for hi-res, how about a TSR or adapter to
replace a joystick for video games?  Shouldn't be too hard, esp. if the
game is key-driven (Tetris looks like an easy one, and it's PD). 

-Dave Stampe

From jim@kaos.stanford.edu Tue Oct 15 06:43:15 1991
Received: from fou-local (fou.Stanford.EDU) by karazm.math.UH.EDU with SMTP id AA10642
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 15:46:45 -0500
Received: from localhost.Stanford.EDU by fou-local (4.1/inc-1.0)
	id AA24072; Tue, 15 Oct 91 13:43:16 PDT
Message-Id: <9110152043.AA24072@fou-local>
To: glove-list@karazm.math.uh.edu
Subject: Re: newsgroups 
In-Reply-To: Your message of "Tue, 15 Oct 91 13:05:13."
             <m0kWv0r-0000KDC@crash.cts.com> 
Date: Tue, 15 Oct 91 13:43:15 -0700
From: James Helman <jim@kaos.stanford.edu>


How about a slightly more general group name that could encompass
other 3D input devices, e.g. ultrasonic trackers, flex sensors, flying
mice, etc., and perhaps even "output" devices, e.g., display and
feedback devices.  Basically, the group would a way to disseminate
information about rolling your own devices for VR.

I'd propose: comp.periphs.vr or sci.virtual-worlds.periphs.

-jim

Jim Helman					Lab:  (415) 723-9127
Stanford University				FAX:  (415) 591-8165
(jim@KAOS.stanford.edu) 			Home: (415) 593-1233

"The power of the computer is locked behind a door with no knob."
							-B. Laurel



From motcsd!roi!lance@apple.com Sat Oct 15 07:06:52 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA11088
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 16:41:24 -0500
Received: by apple.com (5.61/1-Oct-1991-eef)
	id AA05691; Tue, 15 Oct 91 14:19:09 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kWw0Z-0001DjC@motcsd.csd.mot.com>; Tue, 15 Oct 91 14:08 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA20735; 15 Oct 91 14:06:53 PDT (Tue)
To: dstamp@watserv1.uwaterloo.ca, glove-list@karazm.math.uh.edu
Subject: Separate finger readout
Message-Id: <9110151406.AA20731@roi.ca41.csd.mot.com>
Date: 15 Oct 91 14:06:52 PDT (Tue)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>


This does require cutting up the glove, which I am loath to do.

The fingers range from 100k to 500k ohm in flexing.  The PC
joystick port has four a-d integrators which measure 0 ohms
right away and are recommended to range from 0 to 100kohm.
The hardware works by polling, so the smaller the range,
and the lower the low-end value, the faster it works.

So, if you put 1megohm across the finger, you can drop the
input range to a small, quickly readable value using the
formula for parallel resistance which I have forgotten.
You'll read from 10-100 with this stratagem.

Being clever, you could integrate the Power Glove value
sampling code and the polling of the joystick ports.

You then need to do a calibration system to make the glove useable.

Lance Norskog


From S.M.Clark@loughborough.ac.uk Tue Oct 15 16:59:33 1991
Received: from sun2.nsfnet-relay.ac.uk by karazm.math.UH.EDU with SMTP id AA11510
  (5.65c/IDA-1.4.4 for <glove-list@KARAZM.MATH.UH.edu>); Tue, 15 Oct 1991 16:59:33 -0500
Received: from loughborough.ac.uk by sun2.nsfnet-relay.ac.uk via JANET 
          with NIFTP id <12860-0@sun2.nsfnet-relay.ac.uk>;
          Tue, 15 Oct 1991 15:32:34 +0100
Date: Tue, 15 Oct 91 15:33:01 bst
Message-Id: <27143.9110151433@hpd.lut.ac.uk>
To: glove-list@KARAZM.MATH.UH.edu
From: S.M.Clark@loughborough.ac.uk
Subject: Re: Hi-res for PC?

Thanks to those of you who sent me a copy of the PC Hi-res code. However, I
have recently had a *serious* e-mail problem and all copies have been lost
:-( Could someone (Greg Alt?) re-send it for me?

Thanks again,

Sean Clark
----------------------------------------------------------------------------
 Sean Clark,                     Tel: (0509) 263171x4166              %%%%
 LUTCHI Research Centre,         Fax: (0509) 610815                  ROCOCO
 University of Technology,                                            %%%%
 Loughborough, Leicestershire,
 LE11 3TU, UK                    Internet: S.M.Clark%lut.ac.uk@nsfnet-relay

  * Due to e-mail problems I have lost some messages. If I have not *
       * replied to your e-mail please re-submit your message. *
----------------------------------------------------------------------------


From jmunkki@hila.hut.fi Wed Oct 16 02:00:02 1991
Received: from hila.hut.fi by karazm.math.UH.EDU with SMTP id AA11568
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 17:06:05 -0500
Received: by hila.hut.fi (5.65c/7.0/S-TeKoLa)
	id AA24024; Wed, 16 Oct 1991 00:00:02 +0200
Date: Wed, 16 Oct 1991 00:00:02 +0200
From: Juri Munkki <jmunkki@hila.hut.fi>
Message-Id: <199110152200.AA24024@hila.hut.fi>
To: brownp@dg-rtp.dg.com, glove-list@karazm.math.uh.edu
Subject: Re:  sega glasses available? (fwd)

The Sega glasses are available directly from Sega USA. They used to sell
them for about $50. The shutters are not of high quality, but the interface
is simple to build and the shutters are good enough to produce a good 3D
effect. (I highly recommend playing with Sega glasses: it's FUN!)

Juri

From com2serv.c2s.mn.org!craig%tcnet.uucp@jhereg.osa.com Tue Oct 15 11:02:55 1991
Received: from jhereg.osa.com by karazm.math.UH.EDU with SMTP id AA11916
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.UH.EDU>); Tue, 15 Oct 1991 17:27:38 -0500
Received: by jhereg.osa.com with UUCP
	id <46745>; Tue, 15 Oct 1991 17:08:01 -0500
Received: by tcnet.MN.ORG (smail2.5 (MN.ORG))
	id AA17517; 15 Oct 91 17:09:22 EDT (Tue)
Received: by com50.c2s.mn.org (5.51/6.8 JRC0225)
	id AA25412; Tue, 15 Oct 91 16:02:51 CDT
Received: by com2serv.c2s.mn.org (4.1/SMI-3.2)
	id AA07327; Tue, 15 Oct 91 16:02:57 CDT
From: craig@com2serv.c2s.mn.org (Craig S. Wilson)
Message-Id: <9110152102.AA07327@com2serv.c2s.mn.org>
Subject: Re: Low-end VR Newsgroup (was Re: move to a newsgroup?)
To: glove-list@karazm.math.UH.EDU
Date: 	Tue, 15 Oct 1991 16:02:55 -0500
In-Reply-To: <9110151954.AA11591@lambda.msfc.nasa.gov>; from "Paul Robichaux" at Oct 15, 91 2:54 pm
X-Mailer: ELM [version 2.3 PL7]

In a message Paul Robichaux stated:
> 
> Perhaps "sci.virtual-worlds.small?"
> 


Yea.  And I can just hear the theme song running endlessly through my head:

"It's a small world, virt--u--al;
  it's a small world, virt--u--al;
	it's a small, small world.

Sorry.  I couldn't help myself.

/craig

From ifat423@ccwf.cc.utexas.edu Tue Oct 15 12:40:48 1991
Received: from minnie.cc.utexas.edu by karazm.math.UH.EDU with SMTP id AA12134
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.UH.EDU>); Tue, 15 Oct 1991 17:44:47 -0500
Received: by minnie.cc.utexas.edu (5.61/1.34/CCWF 1.16)
	id AA17613; Tue, 15 Oct 91 17:40:48 -0500
Date: Tue, 15 Oct 91 17:40:48 -0500
From: ifat423@ccwf.cc.utexas.edu (yo'man)
Message-Id: <9110152240.AA17613@minnie.cc.utexas.edu>
To: glove-list@karazm.math.UH.EDU
Subject: low-end VR.


I personally prefer "sci.virtual-worlds.homebrew."  It has a nice
earthy feel to it.

just my 2 mil specs

Andrew

From cdshaw@cs.ualberta.ca Tue Oct 15 10:59:27 1991
Received: from scapa.cs.ualberta.ca by karazm.math.UH.EDU with SMTP id AA12407
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 18:03:52 -0500
Received: by scapa.cs.ualberta.ca id <42506>; Tue, 15 Oct 1991 16:59:50 -0600
Subject: Re: Low-end VR Newsgroup 
From: Chris Shaw <cdshaw@cs.ualberta.ca>
To: glove-list@karazm.math.uh.edu
Date: 	Tue, 15 Oct 1991 16:59:27 -0600
In-Reply-To: <9110151833.AA01622@narrator.PEN.TEK.COM>; from "Aaron Pulkka" at Oct 15, 91 12:33 pm
Organization: U of Alberta, Dept of Computing Science
Address: 713D General Services Building, U of A, Edmonton, Alberta, T6G 2H1
X-Mailer: ELM [version 2.3 PL11]
Message-Id: <91Oct15.165950mdt.42506@scapa.cs.ualberta.ca>

> 	comp.periphs.virtual
> 	sci.virtual-worlds.low-end

I woould support the above two newsgroups.
Volume is a bit much now.
-- 
Chris Shaw               University of Alberta
cdshaw@cs.UAlberta.ca    CatchPhrase: Bogus as HELL !

From molly@cs.uq.oz.au Wed Oct 16 19:21:58 1991
Received: from uqcspe.cs.uq.oz.au by karazm.math.UH.EDU with SMTP id AA12799
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 18:26:04 -0500
Received: from pansy.cs.uq.oz.au by uqcspe.cs.uq.oz.au 
	id <AA23131@uqcspe.cs.uq.oz.au>; Wed, 16 Oct 91 09:21:59 +1000
Date: Wed, 16 Oct 91 09:21:58 +1000
From: molly@cs.uq.oz.au
Message-Id: <9110152321.AA06243@client>
To: glove-list@karazm.math.uh.edu


	comp.sys.virtual

I prefer this group name.
Mark.

From nop@att1.Mankato.MSUS.EDU Tue Oct 15 16:11:44 1991
Received: from ATT1.Mankato.MSUS.EDU by karazm.math.UH.EDU with SMTP id AA13320
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 15 Oct 1991 21:19:55 -0500
Received:  by att1.Mankato.MSUS.EDU (5.59/25-eef)
	id AA29570; Tue, 15 Oct 91 21:11:44 CDT
Date: Tue, 15 Oct 91 21:11:44 CDT
From: Jay A. Carlson <nop@att1.Mankato.MSUS.EDU>
Message-Id: <9110160211.AA29570@att1.Mankato.MSUS.EDU>
To: cdshaw@cs.ualberta.ca
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: Chris Shaw's message of Tue, 15 Oct 1991 16:59:27 -0600 <91Oct15.165950mdt.42506@scapa.cs.ualberta.ca>
Subject: Low-end VR Newsgroup 

>>       comp.periphs.virtual
>>       sci.virtual-worlds.low-end
> 
> I woould support the above two newsgroups.
> Volume is a bit much now.

I support sci.virtual-worlds.low-end, and suspect it should be
unmoderated.  People are less afraid to post to unmoderated groups,
and I think we'd like to encourage the shy to post their new use for
surplus laptop screens, or whatever.

(sci.virtual-worlds.actually-doing-something-now comes to mind too,
but I don't think the sci.virtual-worlds moderator would be amused.)

From cdshaw@cs.ualberta.ca Tue Oct 15 17:56:34 1991
Received: from scapa.cs.ualberta.ca by karazm.math.UH.EDU with SMTP id AA14068
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.UH.EDU>); Wed, 16 Oct 1991 01:02:04 -0500
Received: by scapa.cs.ualberta.ca id <42521>; Tue, 15 Oct 1991 23:57:59 -0600
Subject: Re: Low-end VR Newsgroup
From: Chris Shaw <cdshaw@cs.ualberta.ca>
To: glove-list@karazm.math.UH.EDU
Date: 	Tue, 15 Oct 1991 23:56:34 -0600
In-Reply-To: <9110160211.AA29570@att1.Mankato.MSUS.EDU>; from "glove-list-request@karazm.math.UH.EDU" at Oct 15, 91 8:11 pm
Organization: U of Alberta, Dept of Computing Science
Address: 713D General Services Building, U of A, Edmonton, Alberta, T6G 2H1
X-Mailer: ELM [version 2.3 PL11]
Message-Id: <91Oct15.235759mdt.42521@scapa.cs.ualberta.ca>

By the way, I'm definitely against comp.sys.virtual, because the
comp.sys hierarchy is for machines from a particular manufacturer, or
a manufacturer's product line. Hence c.s.mac, c.s.sgi, c.s.dec, etc.

There is no standard "virtual" system, nor is there a manufacturer 
called "virtual", so comp.sys.virtual is out.

> (sci.virtual-worlds.actually-doing-something-now comes to mind too,
> but I don't think the sci.virtual-worlds moderator would be amused.)

Actually, it seems to me that the only purpose for moderation of that group
is to get U of Washington's name in lights on a permanent basis.

I happen not to like the stuff in that group right now, but on the other
hand, the philosophizing does not seem inappropriate.

The fact of the matter is that almost everyone who is doing work in this
field can't be bothered to post to that group. This is due mainly to 
the high "fluff" level, but also because most labs out there are extremely
busy getting their labs up & running. Most people are starting from
scratch, building things using the first technique that comes to mind. As a
result, nobody talks to each other because everyone thinks they have "the
best answer". Face it, reporting your hot new result to sci.virtual-worlds
is worth absolutely nothing. Better to get it in a conference or a
journal, and get credit for it. When these projects finally get published,
the seriousness level on sci.virtual-worlds will increase, because people
won't be so worried about proving themselves. I hope.
-- 
Chris Shaw               University of Alberta
cdshaw@cs.UAlberta.ca    CatchPhrase: Bogus as HELL !

From rrr@aberystwyth.ac.uk Wed Oct 16 12:59:43 1991
Received: from sun2.nsfnet-relay.ac.uk by karazm.math.UH.EDU with SMTP id AA15181
  (5.65c/IDA-1.4.4 for <glove-list@KARAZM.MATH.UH.edu>); Wed, 16 Oct 1991 09:16:24 -0500
Received: from aberystwyth.ac.uk by sun2.nsfnet-relay.ac.uk via JANET 
          with NIFTP id <9191-0@sun2.nsfnet-relay.ac.uk>;
          Wed, 16 Oct 1991 12:00:10 +0100
Received: by uk.ac.aber.aberda (5.57/aberclient-4.0) id AA05378;
          Wed, 16 Oct 91 11:59:43 +0100
Date: Wed, 16 Oct 91 11:59:43 +0100
From: rrr@aberystwyth.ac.uk
Message-Id: <9110161059.AA05378@uk.ac.aber.aberda>
To: dstamp@WATSERV1.UWATERLOO.ca, glove-list@KARAZM.MATH.UH.edu
Subject: TSR


>If you're interested in other uses for hi-res, how about a TSR or adapter to
replace a joystick for video games?  Shouldn't be too hard, esp. if the
game is key-driven (Tetris looks like an easy one, and it's PD).
>

Ive written a TSR for low res use og PowerGlove, it works for

most applications. I dont have time to rewrite my basic IO

stuff for hi res, but the TSR should work fine, Ill post the source

if anybodys interested.

Ronan

R M Ruairi, UCW Aberystwyth, rrr@UK.AC.Aber

ps the code interprets data from PG as keystrokes and stuffs the standard
   buffer. Its written in Turbo Pascal v6.


From elci@BUGS.gs.com Wed Oct 16 08:44:00 1991
Received: from CCA.CAMB.COM by karazm.math.UH.EDU with SMTP id AA15851
  (5.65c/IDA-1.4.4 for <GLOVE-LIST@KARAZM.MATH.UH.EDU>); Wed, 16 Oct 1991 11:55:54 -0500
Received: from olymps.gs.com by camb.com (PMDF #12148) id
 <01GBTBUQQJN495N415@camb.com>; Wed, 16 Oct 1991 12:51 EDT
Received: from DECNET-MAIL by gs.com (PMDF #12282) id
 <01GBTBLNKZO08WWFR8@gs.com>; Wed, 16 Oct 1991 12:44 EDT
Date: Wed, 16 Oct 1991 12:44 EDT
From: Reha Elci <elci@BUGS.gs.com>
Subject: hi-res rs232?
To: GLOVE-LIST@KARAZM.MATH.UH.EDU
Message-Id: <01GBTBLNKZO08WWFR8@gs.com>
X-Organization: Goldman, Sachs & Co.
X-Vms-To: olymps::in%"glove-list@karazm.math.uh.edu"


Does anyone know if someone is selling a high-res rs232 interface to the
glove. It seems like people are experimenting with micro-controllers; 
maybe there already is some general product out there that outputs to an
rs-232. Thanks for the info.

Reha Elci

Email: elci@bugs.gs.com

From motcsd!roi!lance@apple.com Sun Oct 16 03:54:50 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA17143
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.UH.EDU>); Wed, 16 Oct 1991 13:51:33 -0500
Received: by apple.com (5.61/1-Oct-1991-eef)
	id AA15368; Wed, 16 Oct 91 11:14:29 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kXFUZ-0001RtC@motcsd.csd.mot.com>; Wed, 16 Oct 91 10:57 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA03292; 16 Oct 91 10:54:51 PDT (Wed)
To: glove-list@karazm.math.UH.EDU
Subject: Re: Low-end VR Newsgroup
Message-Id: <9110161054.AA03288@roi.ca41.csd.mot.com>
Date: 16 Oct 91 10:54:50 PDT (Wed)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>


sci.virtual-worlds.homebrew captures the essence of this list.

Or alt.cyberspace.homebrew, although, yes, lots of geek
administrators don't take alt groups.  If you promise there
will not be 5 megs of bad porno every day, you may be
able to change this.

If you think sci.v-w has fluff, go check out comp.graphics.
Sci.v-w doesn't have people posting for GIF viewers every damn day.
Moderation is a good thing, except that you can't involve
two groups in a jointly interesting topic.  

I'd like to start a conversation between sci.v-w and 
comp.simulation on the topic "how do I simulate recombinant 
objects and substances?" but I can't because they're
both moderated.

	"I have two pieces of clay.
	I slap them together and make one big piece.
	What data structures should I use?
	Are objects appropriate?"

I've been told that few people in industry post to sci.v-w 
because they don't want to leak proprietary secrets.  
The computer biggies (SUN Dec IBM etc.) are putting large
budgets behind VR groups.

Lance Norskog

From agodwin@acorn.co.uk Wed Oct 16 10:52:37 1991
Received: from eros.uknet.ac.uk by karazm.math.UH.EDU with SMTP id AA17502
  (5.65c/IDA-1.4.4 for <glove-list@KARAZM.MATH.UH.edu>); Wed, 16 Oct 1991 15:08:16 -0500
Received: from acorn.co.uk by eros.uknet.ac.uk with UUCP 
          id <7227-0@eros.uknet.ac.uk>; Wed, 16 Oct 1991 21:04:25 +0100
Received: from snark.acorn.co.uk by acorn.co.uk (4.1/Am31) id AA18236;
          Wed, 16 Oct 91 09:52:33 BST
From: agodwin@acorn.co.uk (Adrian Godwin)
Date: Wed, 16 Oct 91 09:52:37 +0100
Message-Id: <9110160852.AA00837@snark.acorn.co.uk>
To: cdshaw@CA.UALBERTA.cs, glove-list@KARAZM.MATH.UH.edu
Subject: Re: Low-end VR Newsgroup



>  
> I happen not to like the stuff in that group [ sci.virtual.worlds] right now, 
> but on the other hand, the philosophizing does not seem inappropriate.
>  

I agree : that group doesn't have much hardware discussion (except to say 
'buy an SGI' !), and the hardware threads that do appear don't last long.
I think there's a need for a general purpose hardware group, and the
existence of such a group would make a glove-only one rather pointless.
...periphs seems too limited (I think of peripherals as parts very distinct
from the host, and some possible video adapters aren't really that. 
We might even develop a complete host, specifically for VR).

How about sci.virtual-worlds.hardware ? I don't much care whether it's 
moderated or not, as long the moderator is welded to it's keyboard :-).

-adrian



From dstamp@watserv1.uwaterloo.ca Wed Oct 16 13:34:28 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA18002
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 16 Oct 1991 16:38:29 -0500
Received: by watserv1.uwaterloo.ca
	id <AA22998>; Wed, 16 Oct 91 17:34:28 -0400
Date: Wed, 16 Oct 91 17:34:28 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110162134.AA22998@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu


I've been experimenting with the hi-res mode, and I want to compare my
results with others.

I have found a way to read the glove as fast as possible.  Simply read the 6
data bytes from the glove, then 2 more at the fast speed (discard these).
Now read a byte from the glove every 2 to 4 millisecond (with an interrupt?).
If the read returns $A0, read the next data set.  If 500 reads pass without
$A0, repeat the hires setup sequence.  This can run in the background while
graphics are drawn.

This results in speeds of 17 samples/sec (fingers open) to 12.5 (fist).
It appears that up to 25 samples/sec could be achieved by disabling finger
reads by the glove controller, and reading finger positions externally as
I suggested earlier.  (Lance Norskog suggested using an IBM PC's game port
as an analog input for this.  Sounds feasible, and could be made fast).

The data etc. read from the glove is in 6 bytes:
1) X (side-to side)
2) Y (up and down)
3) Z (distance)
4) rot (turning wrist)
5) fingers (2 bits for each finger)
6) keys on glove

For X and Y, the glove seems to return differences in distances to receiver
pairs from the transmitters.  This implies that the X and Y scaling to
position gain changes with position, being greatest closer to and centered
on the receiver array.	At 300 cm (10') the resolution is 3 mm per count.
Right and up are positive, left and down are negative.	Range is +/- 127,
which is achived at 45 degrees from and outside the receiver array (!).

Z resolution seems disappointingly low, being 1.6 cm (0.65") per step.
I KNOW that the internal resolution is 2 mm for this one! Away is positive,
toward is negative.

Rotation is also low resolution, and seems quite nonlinear.  This could
be caused by the room I'm in, though.  The values increase with clockwise
rotation, palm down being 0.  Steps are (about) 30 to 40 degrees, with a
range of 0 to 13.  Sensitivity seems greatest in palm-up position (6 to 9).

Finger positions are packed into 1 byte, with 2 bits per finger.  The
format is:
		 T t I i M m R r
for thumb, index, middle and ring fingers.  Open hand is 0, fist is 3.
Capital is MSB, lowercase is LSB.

The key byte can accept all number keys (0 to 9) and returns their number
codes (0-9).  If no key is pressed, this byte is $FF.
Other key codes are:

SEL	 $83
START	 $82
A	 $0A
B	 $0B
UP	 $0D
DOWN	 $0E
LEFT	 $0C
RIGHT	 $0F

Codes are returned as long as the key is held down.


NOTE ON NOISE:	I have found the glove position data tends to take
jumps of about 6 to 8 units in X and Y position (about an inch).
This is NOT a glitch or a misread, but a position-related discontinuity.

The reason for this can be seen by scoping the receiver detector inputs and
outputs (in the small box joining the receivers and the glove).  These are
peak detectors, and respond when the sound pulse has been received.

However, the glove uses piezoelectric transducers in its transmitters and
receivers, which have a VERY high Q.  This means that a 12-cycle pulse
driving the transmitter is stretched to several hundred pulses at the
receiver detector.  Also, the "rising edge" of the received envelope
increases linearly for at least 20 cycles before stablizing.

This means that 3 to 6 pulses actually arrive at the receivers before
the detector is tripped.  The detection point is always near the peak
of one of the 45 KHz wave cycles, and this adds a quantized offset
to the delay.  The power glove seems to use a delay resolution of
2 microseconds.

However, if the strength of the pulse at the receiver changes ( or
if a reflection of the pulse interferes) the detector will trigger on
an earlier or later cycle than it did on the last pulse.  This
causes a +/- 20 microsecond change in the delay time, or about
8 mm of distance.  Thus, the glove can resolve about 1.3 mm of
distance, but with errors of +/- 8 mm superimposed!
See this diagram for a possible result:
		__________
	       /	  \
	      / 	    \
	    /		      \
   ^	   |		       |  <-- GLITCH!
   |	   |		       |
   |	  /			\
   |  __ /			 \___
position			      time--->

This problem is built into the design, and can't be fixed.  If the user
moves the glove slowly enough, these glitches might be filterable
by software.  Have to try it, though.

-Dave Stampe

From dstamp@watserv1.uwaterloo.ca Wed Oct 16 16:48:34 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA20065
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 16 Oct 1991 19:52:33 -0500
Received: by watserv1.uwaterloo.ca
	id <AA00603>; Wed, 16 Oct 91 20:48:34 -0400
Date: Wed, 16 Oct 91 20:48:34 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110170048.AA00603@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

K. C. Lee  (LEEK@QUCDN.QueensU.CA) replies:

>I suspect the sampling rates of the glove can go much faster if the
>glove CPU don't have to process the 6 sets of distances into (X,Y,Z,Rotation).
>In that case the only limitation would be how fast can the receivers settle
> so that the transmitter can send another ping.

I don't believe the CPU is doing any special processing.  I did some work on 
an implementation using an 80C196, and the math required a lot of 32-bit
multiplications, divisions and roots, about 4 mS worth on that processor and
out of the question for an 8-bit processor in any reasonable time.
 
Also, if you compute the distortion that would be caused by just using 
the difference in delay between horizontal and vertical receiver pair
response times, you get a response very like the one I've measured: about
50% better resolution at 100 cm distance as compared to 200 cm.

I've also scoped the unit in operation and there isn't any extra time for
calculations.  The CPU waits for incoming pulses for 20 mS times 2 trans-
mitters, for a total of 40 mS.  This corresponds to the 25 Hz read rate
seen if the finger timing circuit is defeated.  BTW, 20 mS corresponds to
a maximum echo path of 6.8 m (22'), which seems reasonable to me.  Any 
less, and you could only use it in a padded cell! (B-{)

Of course, the processor COULD attempt to do the math while it's waiting
for the receivers to respond, but I don't think it is.

-Dave Stampe

From jdb9608@cs.rit.edu Thu Oct 17 17:06:04 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA24731
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 17 Oct 1991 20:09:08 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA06230; Thu, 17 Oct 91 21:05:04 -0400
Received: from gallium.CS (gallium.ARPA) by junior.rit.edu (4.1/5.17)
	id AA10376; Thu, 17 Oct 91 20:54:02 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110180054.AA10376@junior.rit.edu>
Subject: Re: sega glasses available?
To: gbnewby@alexia.lis.uiuc.edu (Greg Newby)
Date: Thu, 17 Oct 91 21:06:04 EDT
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: <9110152112.AA24605@alexia.lis.uiuc.edu>; from "Greg Newby" at Oct 15, 91 4:12 pm
X-Mailer: ELM [version 2.3 PL8]

I called Sega USA tonite (1-800-USA-SEGA) and the guy I asked
said that they would sell the 3D glasses by themselves,
over the phone with a credit card or thru the mail by check.

	34.95	3D glasses
	+2.80	postage & handling

	ATTN: Parts and Orders Dept.
	Sega America
	3375 Arden Rd.
	Hayward, CA  94545

I haven't ordered one yet, but that's probably the way I'll do it.

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From dstamp@watserv1.uwaterloo.ca Thu Oct 17 17:47:39 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA24854
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 17 Oct 1991 20:51:46 -0500
Received: by watserv1.uwaterloo.ca
	id <AA12204>; Thu, 17 Oct 91 21:47:39 -0400
Date: Thu, 17 Oct 91 21:47:39 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110180147.AA12204@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

Program: PWRFILT.C

This is a new HIRES glove driver program that includes NOISE REDUCTION!
I hung the receiver array in the *worst* corner of my room, and got
almost no glitches and rock-solid operation.  It's hard to believe it's
the same system!  And the NR adds no delay, and is invisible to the user.

This driver rolls up some of the loops in the original HIRES driver, 
exchanging speed in unimportant areas for much smaller code.  It was 
written to use a PC-LabCard I/O device, since I happened to have one.
Someone else will have to change the port addresses, bit masks, etc.
so it's usable with the printer port.

Interrupt polling of the Glove should be easy, given this code.  One 
warning: don't test the power glove too often (I recommend about 2-4 mS
between pollings) or the Glove will start trashing data severely. 

You non-PC users will want to transplant the NR code at least, so go ahead.

------------------------- cut here -----------------------------------

/**********************************************************************
 
  Originally "power.c" (c) manfredo 9/91 (manfredo@opal.cs.tu-berlin.de)
  Developed on an ATARI 1040ST with TC 1.1 using a logic analyzer to get
  the correct timings.
 

/*********************************************************************
		      ported to PC compatibles by
			     Greg Alt 10/91
 
			    galt@peruvian.utah.edu
			 or galt@es.dsd.com
 

/*********************************************************************

 Substantially rewritten by Dave Stampe (c) 1991: PWRFILT.C
  No cash, no warranty, no flames.
  This stuff works great, so gimme credit.

 Goals <achieved> were:

  Higher speed, smaller code.
  Polled operation is now possible.
  Graphics test (VGA)
  Noise reduction added, gets rid of 99.5% of noise with NO DELAY!

  This runs on a 486/25 with an i/o card. 
  Someone should adapt it for the usual printer port adapter.
  It was compiled with Turbo C++ 2.0 but will probably
  work on any Turbo C directly. MSC will need library calls checked.


 dstamp@watserv1.uwaterloo.ca			17/10/91


#include <dos.h>
#include <bios.h>
#include <stdio.h>
#include <conio.h>
#include <graphics.h>

int gdriver = VGA;		/* for graphics plot and cursor */
int gmode = VGAHI;

#define XHYST 2			/* hysterisis for X, Y low noise reduction */
#define YHYST 2			/* 2 eliminates +/-3 quanta of noise */

#define XACC 8                  /* X, Y maximum accel/decel level. Should */
#define YACC 8			/* be 6-10, but too high limits gesturing */

#define XXTEND 2		/* stretches deglitching time */
#define YXTEND 1

#define N 1			/* delay scaled by N/D <CHANGED> */
#define D 1     		/* these are 1,1 for 486 PC with i/o card */
#define INPORT  0x2A0       	/* i/o port addresses <CHANGED> */
#define OUTPORT 0x2A0
 
/* bits for i/o ports <CHANGED> */

#define		GDATA           0x01    /* PG data in */
#define		GLATCH          0x02    /* PG latch out */
#define		GCLOCK          0x01    /* PG clock out */
#define		GCLOLAT         0x03    /* clock + latch */

/* delay values for sending and sampling data <CHANGED> */
 
#define     D2BYTES      150      /* delay between 2 bytes = 96 us  */
#define     D2BITS       6        /* delay between 2 bits = 3 us    */
#define     D2SLOW       8000     /* intertest delay = 2000-4000 us */

/* Delay timing: may not work in some IBM C's due to problems with LONGs */

void fdelay(unsigned int val)
{
 register long i=N*val;
 for(;i>0;i-=D);
}

/* defines for output line pair control */
 
#define     C0L0()       outportb(OUTPORT, 0)        /* clock 0 latch 0 */
#define     C0L1()       outportb(OUTPORT, GLATCH)   /* clock 0 latch 1 */
#define     C1L0()       outportb(OUTPORT, GCLOCK)   /* clock 1 latch 0 */
#define     C1L1()       outportb(OUTPORT, GCLOLAT)  /* clock 1 latch 1 */
 

/* prototypes */
 
void Hires (void);		 	/* puts glove in hires mode   */
void getglove (unsigned char *);	/* get data packet from glove */
int  glove_ready();			/* returns 0 if not ready     */
					/* delay repeats by 2-4 ms    */
unsigned char getbyte (void);		/* read byte from glove */
 

/***** GLOVE DATA SPECIFICATIONS **************

 The glove_data array has been simplified. These are its functions:


x =   X position, 3mm per number
y =   Y position, 3mm per number
z =   distance,  14mm per number 
rot = wrist twist. 0 is up 1 is slightly CW, 5 is down, 11 is slightly CCW.
      About 30 to 40 degrees per count.

 Note: exact scaling of all above change with distance! Closer is higher res.

fingers = packed 2-bit values, 0 is open, 3 is (tight) fist:
	  Bit format: TtIiMmRr  for Thumb, Index, Middle, and Ring fingers.

keys: $FF or $80 is no key. Responds with 0 to 9 for keys "0" thru "9"
      $82 = START, $83 = SEL, $0A = "A", $0B = "B", 0 is "Center"
      Up,down,left,right are $0D,$0E,$0C,$0F respectively.



typedef struct glove_data { 
			  signed char x,y,z,rot,fingers,keys;
			  } glove_data;

/*********************************************/
			    
void main ()
{
 unsigned char buf[12];
 glove_data   *glov;
 unsigned unready;         /* number of unsuccessful tries to read glove */

 glov=(glove_data *)buf;
 initgraph(&gdriver, &gmode, "");	/* VGA graphics, 640x480 */
 cleardevice();
			   /* begin again here if glove crashes */
restart:		
 Hires (); 				/* set PG into 'hires' mode */

 while(!kbhit())
  {
   unready = 0; 			/* start polling glove */
   fdelay(D2SLOW);
   while(glove_ready()==0)              /* wait for glove to become ready */
    {
     if (unready++>500) goto restart; 	/* reset mode if dead glove */
     fdelay(D2SLOW);
    }
   
   getglove(buf);		 	/* read 6 byte packet */
   gotoxy(1,1);				/* print xyz at scrren top */
   printf("% 4d % 4d % 4d    ", 255&glov->x, 255&glov->y, 255&glov->z);
					/* print rot, fingers, keys */	
   printf("%-2x %-2x %-2x ", buf[3],buf[4],buf[5]);

   deglitch(glov);		/* remove spikes and jumps */
   dehyst(glov);  		/* add hysteresis to remove LL noise */

   drawp(glov);  		/* plot x,y positions */
   drawthing(glov);  		/* animate glove cursor */
  }

 getch();			/* exit when keyboard hit */
 C0L0();			/* release glove on exit */
}
 

 
void getglove(buf)      /* read 6 byte data packet */
unsigned char *buf;
{
 register unsigned char *bp;

 bp = buf;

 *bp++ = getbyte ();	/* read data */
 fdelay(D2BYTES);
 *bp++ = getbyte ();
 fdelay(D2BYTES);
 *bp++ = getbyte ();
 fdelay(D2BYTES);
 *bp++ = getbyte ();
 fdelay(D2BYTES);
 *bp++ = getbyte ();
 fdelay(D2BYTES);
 *bp++ = getbyte ();
 fdelay(D2BYTES);
			/* throwaways (speeds up polling later) */
 getbyte ();	
 fdelay(D2BYTES);
 getbyte ();
}



int glove_ready()	/* returns 1 if glove ready, 0 otherwise */
{
 int f;
 f = getbyte();
 return( (f==0xA0) ? 1 : 0);
}
 
 
 
unsigned char getbyte ()     	/* read a byte from glove <rolled code> */
{
 register int i;
 register unsigned char x = 0;
    
 C1L0 ();	    		/* generate a reset (latch) pulse */
 C1L1 ();
 fdelay(D2BITS);    		/* hold for 5 us */
 C1L0 ();

 for(i=0;i<8;i++)
  {
   x=x<<1;
   x+=inportb(INPORT)&GDATA; 
   C0L0 ();
   C1L0 ();  /* pulse */
  }

 return(x);  /* return the byte */
}


/*  HIRES ENTRY CODES 
byte:
1- any value between $05 and $31
2- only $C1 and $81 work OK
3- no effect
4- no effect
5- no effect
6- only $FF works
7- seems to affect read rate slightly, 1 fastest


int hires_code[7] = { 0x06, 0xC1, 0x08, 0x00, 0x02, 0xFF, 0x01 };

 
void Hires ()	/* enter HIRES mode <rolled code- speed unimportant> */
{
 int i,j,k;
		      /* dummy read 4 bits from glove:  */
 C1L0 (); C1L1 ();    /* generate a reset (latch) pulse */
 fdelay(D2BITS);
 C1L0 ();

 fdelay(D2BITS);
 C0L0 (); C1L0 ();    /* pulse clock */
 fdelay(D2BITS);
 C0L0 (); C1L0 ();    /* pulse clock */
 fdelay(D2BITS);
 C0L0 (); C1L0 ();    /* pulse clock */
 fdelay(D2BITS);
 C0L0 (); C1L0 ();    /* pulse clock */
 
		 /* handshake for command code? */
 C1L0 ();
 fdelay(16950);  /* 7212 us delay */
 C1L1 ();
 fdelay(4750);   /* 2260 us delay */
 
 for(i=0;i<7;i++)   	/* send 7 bytes */
  {
   k=hires_code[i];
   for(j=0;j<8;j++)     /* 8 bits per byte, MSB first */
    {
     if(k & 0x80) 
      {
       C1L1(); 
       C0L1();
       C1L1();
      }
     else
      {
       C1L0(); 
       C0L0();
       C1L0();
      }
     k=k<<1;
     fdelay(D2BITS);
    }
   fdelay(D2BYTES);
  }

 fdelay(1090);    /* 892 us delay (end of 7. byte) */
 
 C1L0 ();         /* drop the reset line */
 fdelay(30000);   /* some time for the glove controller to relax */
 fdelay(30000);
}
 


glove_data oldbuf;	/* used to store old state for drawing */

int drawn = 0;		/* set if cursor to be erased */


drawthing(glove_data *g)	/* draw square cursor */
{
 if(g->keys==2) return;		/* hold down "2" to stop drawing */

 if(drawn)			/* erase old box */
  {
   setcolor(0);
   drawit(&oldbuf);
  }

 setcolor(15);			/* draw new box */
 drawit(g);
 drawn = 1;

 oldbuf.x = g->x;		/* save pos'n for next erase */
 oldbuf.y = g->y;
 oldbuf.z = g->z;
}



drawit(glove_data *g)		/* draw/erase box cursor */
{
 int x = 320+2*(g->x);		/* compute X,Y center */
 int y = 240-2*(g->y);
 int z = 30+(g->z);		/* size prop. to Z */

 rectangle(x-z,y-z,x+z,y+z);
}



int xx = 0;           		/* plot position */

drawp(glove_data *g)	/* plot X,Y data to test smoothing */
{
 if(g->keys==4) 	/* restart at left edge if "4" pressed */
  {
   cleardevice();
   xx=0;
  }

 setcolor(0);
 line(xx,0,xx,479);
 line(xx+1,0,xx+1,479);
 setcolor(15);
 line(xx,240-2*g->x,xx+1,240-2*g->x);
 setcolor(12);
 line(xx+1,240-2*g->y,xx+2,240-2*g->y);
 xx++;
 xx++;
 if(xx>639)xx=0;
}



int ox = -1000;			/* last x,y for hysterisis */
int oy = -1000;


dehyst(glove_data *g)		/* hysterisis deglitch (low noise removal) */
{
 int x = g->x;
 int y = g->y;

 if(g->keys==0) ox = oy = 0;	/* handle recentering ("0"key or "Center") */

 if(x-ox>XHYST) ox = x-XHYST;	/* X hysterisis */
 if(ox-x>XHYST) ox = x+XHYST;

 if(y-oy>YHYST) oy = y-YHYST;	/* Y hysterisis */
 if(oy-y>YHYST) oy = y+YHYST;

 g->x = ox;			/* replace present X,Y data */
 g->y = oy;
}



int x1 = 0;		/* delayed 1 sample (for smoothed velocity test) */
int y1 = 0;
int x2 = 0;		/* delayed 2 samples */
int y2 = 0;
int lx = 0;		/* last good X,Y speed */
int ly = 0;
int lax = 0;		/* bad data "stretch" counter */
int lay = 0;
int lsx = 0;		/* X,Y "hold" values to replace bad data */
int lsy = 0;
int lcx = 0;		/* last X,Y speed for accel. calc. */
int lcy = 0;


deglitch(glove_data *g)
{
 int vx, vy;

 int x = g->x;
 int y = g->y;

 if(g->keys==0)		/* reset on recentering ("0" or "Center" key) */
  {
   x1 = x2 = y1 = y2 = 0;
   lx = ly = lax = lay = 0;
   lsx = lsy = lcx = lcy = 0;
  }

 vx = x-((x1+x2)>>1);		/* smoothed velocity */
 vy = y-((y1+y2)>>1);

 x2 = x1;			/* update last values */
 x1 = g->x;

 y2 = y1;
 y1 = g->y;

 if(abs(lcx-vx)>XACC) lax = XXTEND;	/* check for extreme acceleration */
 if (lax == 0) lx=vx;                   /* save only good velocity        */
 lcx = vx;                              /* save velocity for next accel.  */

 if(abs(lcy-vy)>YACC) lay = YXTEND;	/* same deal for Y accel. */
 if (lay == 0) ly=vy;
 lcy = vy;

 if(lax!=0)		/* hold X pos'n if glitch */
  {
   g->x = lsx;
   lax--;
  }

 if(lay!=0)             /* hold Y pos'n if glitch */
  {
   lay--;
   g->y = lsy;
  }

 lsx = g->x;		/* save position for X,Y hold */
 lsy = g->y;

/* g->y = x;*/
}



From kskelm@uccs.edu Thu Oct 17 16:58:06 1991
Received: from happy (happy.uccs.edu) by karazm.math.UH.EDU with SMTP id AA25307
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 17 Oct 1991 22:39:55 -0500
Received: by uccs.edu (MX V2.3-1) id 9694; Thu, 17 Oct 1991 20:58:06 EDT
Date: Thu, 17 Oct 1991 20:58:06 EDT
From: "NO, That's NOT a cord of wood in my pocket!" <kskelm@uccs.edu>
To: glove-list@karazm.math.uh.edu
Message-Id: <0095044C.AC4DE760.9694@uccs.edu>
Subject: Amiga version of Hires code?

 
	Is anybody working on an Amiga version of the glove Hires code?
I sure hope so... 'cuz I know *I* don
oops ...don't fully understand its function.
 
 			Kevins

From nik@bu-it.bu.edu Fri Oct 18 03:50:19 1991
Received: from BU-IT.BU.EDU by karazm.math.UH.EDU with SMTP id AA26700
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.UH.EDU>); Fri, 18 Oct 1991 06:54:26 -0500
Received: from BUITC.BU.EDU by bu-it.bu.edu (5.61+++/Spike-2.1)
	id AA25694; Fri, 18 Oct 91 07:50:22 -0400
From: nik@bu-it.bu.edu (Nik Conwell)
Received: by buitc.bu.edu (5.61+++/Spike-2.0)
	id AA08066; Fri, 18 Oct 91 07:50:19 -0400
Date: Fri, 18 Oct 91 07:50:19 -0400
Message-Id: <9110181150.AA08066@buitc.bu.edu>
To: glove-list@karazm.math.UH.EDU
Subject: PG locations, NC-1 cables, and Amiga hookup.
Cc: nik@bu-it.bu.edu

A few things:

7 gloves spotted at Toys'R'Us in Framingham Ma (on Route 9).  508 872-6242
Marked at $49, but rang up for about $30.

Curtis NC-1 Super Extendo cable, mentioned in the Byte Article (Byte, July 1990
page 288), found at that toy store in the Natick Mall on Route 9. $9.99/pair.

Has anyone made an Amiga cable yet?  Did you have the same wiring as the
Byte Article, except that +5 volts could be taken from pin 14 on the parallel
port??

Is there any Amiga code out there that would point me in the right direction
of talking to the glove through the parallel port (just in regular mode)?

Any info is greatly appreciated.
Thanks
-nik
--
nik@bu-it.bu.edu

From druwy!mab@att.att.com Fri Oct 18 01:30:00 1991
Received: from att.att.com by karazm.math.UH.EDU with SMTP id AA26978
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.UH.EDU>); Fri, 18 Oct 1991 08:39:22 -0500
Message-Id: <199110181339.AA26978@karazm.math.UH.EDU>
From: druwy!mab@att.att.com
Date: Fri, 18 Oct 91 07:30 MDT
To: att!glove-list
Subject: Amiga hi-res glove code available

Last weekend I got the hi-res code working on the Amiga with my
own custom hookup.  I don't have ftp access.  Anybody who wants
a copy, send me e-mail and I'll send you source and executables.
I ultimately plan to do a nice multi-tasking-friendly version,
but for now you'll have to make do with a busy-wait version.

My glove hooks to the parallel port.  It's *almost* the BYTE hack.
I moved the data line from pin 13 to pin 4, and of course hooked
up the +5V line to pin 14.

Alan Bland
mab@druwy.att.com


From agodwin@acorn.co.uk Fri Oct 18 15:31:23 1991
Received: from eros.uknet.ac.uk by karazm.math.UH.EDU with SMTP id AA27065
  (5.65c/IDA-1.4.4 for <glove-list@KARAZM.MATH.UH.edu>); Fri, 18 Oct 1991 08:54:15 -0500
Received: from acorn.co.uk by eros.uknet.ac.uk with UUCP 
          id <10436-0@eros.uknet.ac.uk>; Fri, 18 Oct 1991 14:39:11 +0100
Received: from snark.acorn.co.uk by acorn.co.uk (4.1/Am31) id AA11208;
          Fri, 18 Oct 91 14:31:21 BST
From: agodwin@acorn.co.uk (Adrian Godwin)
Date: Fri, 18 Oct 91 14:31:23 +0100
Message-Id: <9110181331.AA00911@snark.acorn.co.uk>
To: glove-list@KARAZM.MATH.UH.edu, nik@BU-IT.BU.edu
Subject: Re: PG locations, NC-1 cables, and Amiga hookup.


>  
> Is there any Amiga code out there that would point me in the right direction
> of talking to the glove through the parallel port (just in regular mode)?
>  
> Any info is greatly appreciated.
> Thanks
> -nik

There's some Amiga code around for a 'learning remote control' - it's
incomplete, but since it operates by polling the parallel port direct it
might give you some guidelines. It's also covered in both the CBM 
and Abacus books, but sample code always makes it easier ..

The code I have was on comp.sources.amiga; I can send a copy if you
don't have a local archive.

-adrian


From galt@dsd.es.com Fri Oct 18 05:01:05 1991
Received: from orca.es.com (ES.COM) by karazm.math.UH.EDU with SMTP id AA28398
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 18 Oct 1991 12:05:41 -0500
Received: from dsd.ES.COM ([130.187.100.101]) by orca.es.com (4.1/SMI-4.1)
	id AA08987; Fri, 18 Oct 91 11:01:06 MDT
Received: by dsd.ES.COM (4.0/SMI-4.1/e&s_server-2.1/dsd)
	id AA05304; Fri, 18 Oct 91 11:01:05 MDT
Date: Fri, 18 Oct 91 11:01:05 MDT
From: galt@dsd.es.com (Greg Alt - Perp)
Message-Id: <9110181701.AA05304@dsd.ES.COM>
To: dstamp@watserv1.uwaterloo.ca, glove-list@karazm.math.uh.edu
Subject: noise-free glove software

Hey, that looks great.  I'm glad someone went to the trouble of
rolling up the init routine into a loop...  I'll try out it out
this weekend.  That noise-reduction part sounds pretty impressive.
Here's my plan for what we need to do to make the whole package
(close to) perfect:  
 
1) convert the function names to some standard
2) separate the glove driver in its own .c file
3) use compiler directives to allow use of the same code on several machines
  e.g. #define PC_PRINTER would make it compile for a
       PC using the printer port.
  This shouldn't be too difficult since the code is basically the
  same with only a few minor differences for each machine.
 
 
This is all pretty amazing...  before we got our first hi-res code,
nobody was very interested in the glove, now people everywhere are
getting excited about it.  I've already gotten mail from people from
Korea to the U.K.  
       Greg

From gbnewby@alexia.lis.uiuc.edu Fri Oct 18 07:05:21 1991
Received: from alexia.lis.uiuc.edu by karazm.math.UH.EDU with SMTP id AA28422
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 18 Oct 1991 12:09:41 -0500
Received: by alexia.lis.uiuc.edu id AA15909
  (5.61/ for glove-list@karazm.math.uh.edu); Fri, 18 Oct 91 12:05:21 -0500
Date: Fri, 18 Oct 91 12:05:21 -0500
From: Greg Newby <gbnewby@alexia.lis.uiuc.edu>
Message-Id: <9110181705.AA15909@alexia.lis.uiuc.edu>
To: jdb9608@cs.rit.edu
Subject: Re: sega glasses available?
Cc: glove-list@karazm.math.uh.edu

For the circuit, has anyone tested it out?  It appears that
you hook in the Sega glasses, and then send a signal to switch
the LCDs (from left-on, right-off to left-off, right-on).  

The signal is sent via pin 4, which is not the regular pin
for reading or writing data.

So, the question is, what's involved in switching the signal?
If it's a call to termio() or somesuch, what sort of speed
limitations are we talking about?  I didn't check the
RS232 standard just now, but I wonder about the +/- 10V switching
signal -- isn't that rather 0-12V?  (effectively, probably
+/-3 to 8-12V).

Finally, does anyone have the tech specs on the glasses (or 
an estimate, as I suspect Sega doesn't include such things
with the glasses)?  Switching speed, %dark, etc...

With the brain trust we have on this list, I'm not too worried
that someone will figure out how to hook in the glasses.  I'm
just wondering in advance if performance (especially switching
speed) will be up to snuff.  
	(For example, to give some numbers, we need a minimum
	 of about 10 frames per second to perceive continuity
	 between frames of a moving scene.  That means the glasses
	 need to switch 20 times per second, right?  A left-right
	 sequence for each frame.
		If there's more than a few u-second lag for the
	 glasses to switch, we'll have to compensate in the
	 display program.  Being that we're usually using all
	 the computing power we have just to keep the graphic
	 images coming fast enough, incorporating some sort
	 of delay for the glasses would be undesirable.)

Oh, BTW: I've done a bit of experimenting (back at Syracuse) with
some Tektronics shutter glasses -- a very similar beast, tho
presumably higher performance.  I found that the flicker was
perceivable at 30Hz (60 switches / second), and intolerable
(read, "doesn't work") at about 7-15 Hz.  I didn't experiment
with the full range....this was because the software-driven
switching circuit never operated more quickly than about 15Hz.

Ok, I'm rambling now:  the alternative, to get 30Hz, is to 
NOT switch the glasses via software.  Just let them operate
at the frequency of the power supply (60Hz in the US, which, in
the circuit we used @ Syracuse, was run through a rectifier).
Then, no coordinating between your graphics program and the
glasses are necessary, PROVIDED that your program is able to 
operate at "top-speed," switching the image on the screen
as often as possible (as in, the speed of the power supply).
 	I don't know if this technique works for all platforms,
but it worked on the Amiga and Iris we used at Syracuse.  I even
synched the glasses off of a Sony VCR/editor to look at 
the display on the Iris.

'Nuff said.
-- Greg
gbnewby@alexia.lis.uiuc.edu

From leh@manatee.cis.ufl.edu Fri Oct 18 08:14:13 1991
Received: from manatee.cis.ufl.edu by karazm.math.UH.EDU with SMTP id AA28603
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 18 Oct 1991 12:52:58 -0500
Received:  from localhost  by manatee.cis.ufl.edu (5.61ufl/4.12)
	id AA29184; Fri, 18 Oct 91 12:14:14 -0400
Message-Id: <9110181614.AA29184@manatee.cis.ufl.edu>
To: glove-list@karazm.math.uh.edu
Subject: Re: PG locations, NC-1 cables, and Amiga hookup. 
In-Reply-To: Your message of "Fri, 18 Oct 91 07:50:19 EDT."
             <9110181150.AA08066@buitc.bu.edu> 
Date: Fri, 18 Oct 91 12:14:13 EDT
From: leh@manatee.cis.ufl.edu

In another life you (nik@bu-it.bu.edu (Nik Conwell)) wrote:
...deleted...
>Has anyone made an Amiga cable yet?  Did you have the same wiring as the
>Byte Article, except that +5 volts could be taken from pin 14 on the parallel
>port??
>
>Is there any Amiga code out there that would point me in the right direction
>of talking to the glove through the parallel port (just in regular mode)?

and "NO, That's NOT a cord of wood in my pocket!" <kskelm@uccs.edu>
wrote:
>	Is anybody working on an Amiga version of the glove Hires code?
>I sure hope so... 'cuz I know *I* don
>oops ...don't fully understand its function.

Last night I downloaded the original ST code and reworked my lores
code for the Amiga and achieved mixed results --  partially due to
an AND instead of an OR (it was late :)  In any case, contrary to
my initial expectation, the glove (in HIRES) seems to work off of the
JOYMOUSE ports on the A3000.  This is, IMO, greatly preferable to a
serial or parallel solution and has the additional benefit of letting
me use my lores cable :)

As to code, I think karazm.math.uh.edu has the Amiga lores code that
I wrote for the JOYMOUSE ports (be warned, it was a quick hack --
but it does multitask :).

QUESTION for those with HIRES working: is the glove supposed to click
audibly in HIRES?

Les

Extraordinary crimes against the people and the state have to be avenged by
agents extraordinary.  Two such people are John Steed -- top professional, and
his partner, Emma Peel -- talented amateur; otherwise known as "The Avengers."
INTERNET: leh@ufl.edu  UUCP: ...!gatech!uflorida!leh  BITNET: vishnu@UFPINE

From dstamp@watserv1.uwaterloo.ca Fri Oct 18 10:10:33 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA28677
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 18 Oct 1991 13:15:15 -0500
Received: by watserv1.uwaterloo.ca
	id <AA24742>; Fri, 18 Oct 91 14:10:33 -0400
Date: Fri, 18 Oct 91 14:10:33 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110181810.AA24742@watserv1.uwaterloo.ca>
To: gbnewby@alexia.lis.uiuc.edu, jdb9608@cs.rit.edu
Subject: Re: sega glasses available?
Cc: glove-list@karazm.math.uh.edu

> From glove-list-request@karazm.math.UH.EDU Fri Oct 18 13:25:24 1991
> From: Greg Newby <gbnewby@alexia.lis.uiuc.edu>
> To: jdb9608@cs.rit.edu
> Subject: Re: sega glasses available?
> Cc: glove-list@karazm.math.uh.edu
> 
> For the circuit, has anyone tested it out?  It appears that
> you hook in the Sega glasses, and then send a signal to switch
> the LCDs (from left-on, right-off to left-off, right-on).  
> 
> The signal is sent via pin 4, which is not the regular pin
> for reading or writing data.
> 
> So, the question is, what's involved in switching the signal?
> If it's a call to termio() or somesuch, what sort of speed
> limitations are we talking about?  I didn't check the
> RS232 standard just now, but I wonder about the +/- 10V switching
> signal -- isn't that rather 0-12V?  (effectively, probably
> +/-3 to 8-12V).
> 
> Finally, does anyone have the tech specs on the glasses (or 
> an estimate, as I suspect Sega doesn't include such things
> with the glasses)?  Switching speed, %dark, etc...
> 
> With the brain trust we have on this list, I'm not too worried
> that someone will figure out how to hook in the glasses.  I'm
> just wondering in advance if performance (especially switching
> speed) will be up to snuff.  
> 	(For example, to give some numbers, we need a minimum
> 	 of about 10 frames per second to perceive continuity
> 	 between frames of a moving scene.  That means the glasses
> 	 need to switch 20 times per second, right?  A left-right
> 	 sequence for each frame.
> 		If there's more than a few u-second lag for the
> 	 glasses to switch, we'll have to compensate in the
> 	 display program.  Being that we're usually using all
> 	 the computing power we have just to keep the graphic
> 	 images coming fast enough, incorporating some sort
> 	 of delay for the glasses would be undesirable.)
> 
> Oh, BTW: I've done a bit of experimenting (back at Syracuse) with
> some Tektronics shutter glasses -- a very similar beast, tho
> presumably higher performance.  I found that the flicker was
> perceivable at 30Hz (60 switches / second), and intolerable
> (read, "doesn't work") at about 7-15 Hz.  I didn't experiment
> with the full range....this was because the software-driven
> switching circuit never operated more quickly than about 15Hz.
> 
> Ok, I'm rambling now:  the alternative, to get 30Hz, is to 
> NOT switch the glasses via software.  Just let them operate
> at the frequency of the power supply (60Hz in the US, which, in
> the circuit we used @ Syracuse, was run through a rectifier).
> Then, no coordinating between your graphics program and the
> glasses are necessary, PROVIDED that your program is able to 
> operate at "top-speed," switching the image on the screen
> as often as possible (as in, the speed of the power supply).
>  	I don't know if this technique works for all platforms,
> but it worked on the Amiga and Iris we used at Syracuse.  I even
> synched the glasses off of a Sony VCR/editor to look at 
> the display on the Iris.
> 
> 'Nuff said.
> -- Greg
> gbnewby@alexia.lis.uiuc.edu
> 

Here's the EXACT driving specs on the Sega, Haitex, and X-Spec glasses.  These
all use the same type of LCD pi-cell.  They are normally fairly dark (30%
transmissive) and drop to 1% transmissive (very dark) when sent a 24V. 2 KHz
signal (square wave).  Do not accept drivers that use lower frequencies 
or voltages, as these will not become fully opaque!

I spent several month designing drivers for these things about a year ago.
We used both computer and video (alternating-field) signals to drive them.
I have the following designs:
- A 5V supply design with a flyback power supply
- A 12V supply design using push-pull drive
- A (theoretical) design using the RS232 port of a computer and 4 components.

This last design has not been built or tested yet, as I temporarily do not 
have access to glasses.  However, if you want to try it, go ahead.  Just tell
me it it works.

Basically, you hook the outside (common) of the glasses connector (use a 
Walkman-type stero phone jack) to the ground pin of the RS232 port.
Connect 2 of 2.2K resistors to the TX pin.  Connect a 1N914,1N4005, etc.
diode's cathode to the DTR and another to the RTS pin.  Connect one anode of 
diode and one of the resistors to each of the pins on the glasses jack. THAT'S
IT.

The software is a bit complex.  Basically, you have to set up an interrupt to keep the TX buffer of the serial port stuffed with $55's.  Set the baud rate
to 4800 baud, and voila! a 24V 2200 Hz output.  Raise and lower the DTR and
RTS pins (via the UART in the PC) to turn the pulses to each eye on and off.

This should work on any PC that supplies at least +/-10V (the RS232 standard
is +/- 12V).  Interrupt loading is not terribly high: about 5-10%.

No guarantees that this will work, but it would be pretty easy to try.

-Dave Stampe

From dstamp@watserv1.uwaterloo.ca Fri Oct 18 10:49:30 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA28759
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 18 Oct 1991 13:54:04 -0500
Received: by watserv1.uwaterloo.ca
	id <AA27819>; Fri, 18 Oct 91 14:49:30 -0400
Date: Fri, 18 Oct 91 14:49:30 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110181849.AA27819@watserv1.uwaterloo.ca>
To: dstamp@watserv1.uwaterloo.ca, galt@dsd.es.com,
        glove-list@karazm.math.uh.edu
Subject: Re:  noise-free glove software

> From galt@dsd.es.com Fri Oct 18 13:01:46 1991
> From: galt@dsd.es.com (Greg Alt - Perp)
> To: dstamp@watserv1, glove-list@karazm.math.uh.edu
> Subject: noise-free glove software
> 
> Hey, that looks great.  I'm glad someone went to the trouble of
> rolling up the init routine into a loop...  I'll try out it out
> this weekend.  That noise-reduction part sounds pretty impressive.
> Here's my plan for what we need to do to make the whole package
> (close to) perfect:  
>  
> 1) convert the function names to some standard
> 2) separate the glove driver in its own .c file
> 3) use compiler directives to allow use of the same code on several machines
>   e.g. #define PC_PRINTER would make it compile for a
>        PC using the printer port.
>   This shouldn't be too difficult since the code is basically the
>   same with only a few minor differences for each machine.
>  
>  
> This is all pretty amazing...  before we got our first hi-res code,
> nobody was very interested in the glove, now people everywhere are
> getting excited about it.  I've already gotten mail from people from
> Korea to the U.K.  
>        Greg
> 


THe first step in developing the standard will have to be the development
of functioning code for each machine.  The IBM PC's can be made self-
calibrating pretty easily, and the use of defines for I/O port
is a good idea.  

I would like to define the minimum functionality as:

- initialize with one call, which enters hi-res mode, sets up a timer
interrupt every 4 mS, and initializes the code.
- an interrupt handler which:
	- polls the glove for $A0 start code, exits if not ready
	- if the glove was not ready after 500 tries, resets the glove mode
	- reads the 6-byte data packet, and 2 more throwaway bytes
	- deglitches and denoises the X and Y data (deglitches Z???)
	- stores the data int the glove_int_data buffer
	- sets the glove_int_data.new flag
- a glove_read routine which:
	- disables interrupts
	- copies the glove_int_data (including .new flag) to buffer
	- clears the glove_int_data.new flag
	- enables interrupts
- a reset routine (onexit(?)) which resets the timer interrupt

It is probably worthwhile to have a LORES and HIRES mode set on initialization,
which means that only the .keys data field is valid.  The timer interupt
would happen less often, to reduce CPU interrupt load.  Total CPU load on
a 386 looks to be about 3%.

Proposed names for routines:

int init_glove(int mode)
#define LORES 0
#define HIRES 1

void reset_glove()

int glove_read(glove_data *) /* returns 0 if old, 1 if new data */

If we try to keep some interface stuff the same, everyone can develop code for
their machine that meets the specs.  Then they can either be combined or 
distibuted seperatly.

Any comments?

- Dave Stampe

From gibsonm@u.washington.edu Fri Oct 18 04:50:05 1991
Received: from milton.u.washington.edu by karazm.math.UH.EDU with SMTP id AA28766
  (5.65c/IDA-1.4.4 for <glove-list@KARAZM.MATH.UH.edu>); Fri, 18 Oct 1991 13:54:32 -0500
Received: by milton.u.washington.edu
	(5.65/UW-NDC Revision: 2.1 ) id AA03678; Fri, 18 Oct 91 11:50:05 -0700
Date: Fri, 18 Oct 91 11:50:05 -0700
From: Michael Gibson <gibsonm@u.washington.edu>
Message-Id: <9110181850.AA03678@milton.u.washington.edu>
Sender: gibsonm@milton.u.washington.edu
To: agodwin@acorn.co.uk, glove-list@KARAZM.MATH.UH.edu, nik@BU-IT.BU.edu
Subject: Re: PG locations, NC-1 cables, and Amiga hookup.

Could you please mail me the amiga code that you mentioned? I would sure
appreciate it. My name is Michael Gibson and my e-mail addess is :
gibsonm@milton.u.washington.edu

		Thanks.


From jdb9608@cs.rit.edu Fri Oct 18 10:52:18 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA28773
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 18 Oct 1991 13:55:47 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA05145; Fri, 18 Oct 91 14:51:32 -0400
Received: from aluminum.CS (aluminum.ARPA) by junior.rit.edu (4.1/5.17)
	id AA13024; Fri, 18 Oct 91 14:40:20 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110181840.AA13024@junior.rit.edu>
Subject: Re: Sega circuit
To: cci632!ccicpg!sun!apple!well!gregk@isc.rit.edu (Greg Kaiser)
Date: Fri, 18 Oct 91 14:52:18 EDT
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: <9110180455.AA26212@well.sf.ca.us>; from "Greg Kaiser" at Oct 17, 91 9:55 pm
X-Mailer: ELM [version 2.3 PL8]

> I did not catch a copy of the cicuit to hook up sega glasses to the VGA
> on an IBM PC.  I saw you post about how to buy the glasses, do you happen 
> to have a copy of the cicuit you could send me? I'd appreciate it.


Here is the schematic and C source (for IBM PC) for the Sega 3D glasses
that was posted on sci.virtual-worlds a while ago.  Using this circuit
seems simpler than generating a square wave with 0x55 at 4800 baud;
I'm not certain, but I think the outportb(0x3fc, 1) and outportb(0x3fc, 3)
commands in the WaitForVerticalRetrace() function alternately set and
reset the RTS line on the RS-232 port, while keeping the DTR line constant
as a power supply.  Could someone with PC docs confirm whether bit 0 is
the DTR line and bit 2 is the RTS line at port 0x3fc on a PC?

I know next to nothing about circuits, and I haven't tried to make
this one (yet), so I can't say much about it.  I just hope it works
and that it's controled by the DTR line being constantly on, and the
RTS line causing one eye's view when set and the other eye's view
when reset.  Can someone confirm this or add advice?

I'll put this on karazm.math.uh.edu tonite for those with ftp, too.

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."



From rit!rochester!udel!wupost!zaphod.mps.ohio-state.edu!rpi!dali.cs.montana.edu!milton!hlab Tue Sep 10 14:02:24 EDT 1991
Article 1626 of sci.virtual-worlds:
Path: ultb!rit!rochester!udel!wupost!zaphod.mps.ohio-state.edu!rpi!dali.cs.montana.edu!milton!hlab
>From: frank@cavebbs.gen.nz (Frank van der Hulst)
Newsgroups: sci.virtual-worlds
Subject: Sega Glasses / RS-232 interface circuit
Message-ID: <1991Sep9.155236.6358@milton.u.washington.edu>
Date: 9 Sep 91 09:49:38 GMT
Sender: hlab@milton.u.washington.edu (Human Int. Technology Lab)
Organization: The Cave MegaBBS, Public Access Usenet, Wellington, NZ
Lines: 77
Approved: cyberoid@milton.u.washington.edu



Circuit to connect SEGA 3D glasses to RS-232 port.
--------------------------------------------------

       RS-232
     DB25 / DB9
                                                   10K
RTS   4      7  Switching signal +/- 10V  --------vvvvv--+
                                                         |
                                                         |
GND   7      5  Ground ----+-------------+--+---------+--|----+
                           |             |  |         |  |    |
                           |             |  +-|>|--+  |  |    |
                           +--|>|--+    ---        |  |  |    |  Transistor
                                   |    ---  22 uF |  |  |    |   2N2222
                                   |     |         |  |  |  +-+---------+
                                   |     |         |  |  |  | Emitter   |
                                   |     |         |  |  |  |           |
DTR  20      4  Vdd +10V --|>|-----+-----+         +--|--+--+ Base      |
                                         |            |     |           |
                              +--+--+--+-+-vvvvv---+--|-----+ Collector |
                              |  |  |  |    10K    |  |     |           |
                              |  |  |  |           |  |     +-----------+
                      +-------+--+--+--+-----------+--+--+
                      |       1  9  13 14          5  7  |
                      |                                  |
                      |   RCA CD 4030 Quad XOR gate      |
                      |                                  |
                      | 2 11  12       3  6  8   10   4  |
                      +-+--+---+-------+--+--+----+---+--+
                        |  |   |       |  |  |    |   |
                        +--+   |       +--+--+    |   +--- Outside of jack
                           |   |             |    |
                           |   +-vvvvv-+     |    +------- Middle of jack
                           |      22K  |     |
                           |           |     +------------ Centre of jack
                           +-vvvvv-----+     |
                              22K      |     |
                                      ---    |
                              .01 uF  ---    |
                                       |     |
                                       +-----+

Diode:     --|>|--

Resistor:  --vvvvv--

Capacitor:   |
            ---
            ---
             |

This is my best attempt at a rendition of the circuit which connects my
SEGA glasses to my AT. I didn't design the circuit -- I'm a software
rather than hardware person. In fact I barely understand it -- as far as
I can tell, the .01uF capacitor & the 22K resistors act as a delay. The
outputs of the XOR gates feed back into their own inputs, thus producing
an oscillator. The "jack" mentioned in the diagram is the mini-jack
which is connected as standard to the glasses. "Centre", "middle", and
"outside" relate to the external connections, looking at the thing
end-on.

Disclaimer: The circuit diagram above may be entirely wrong. My
description may be wrong.

Caveat emptor... to paraphrase the standard software licence agreement:
It's as good as I can get it. If it doesn't work or blows up your
computer or your glasses and blinds you for life, I'll give you back all
the money you paid me.

Good Luck...    Frank.

-- 

Take a walk on the wild side, and I don't mean the Milford Track.
Kayaking: The art of appearing to want to go where your boat is taking you.





From rit!rochester!udel!wupost!sdd.hp.com!spool.mu.edu!agate!bionet!raven.alaska.edu!milton!hlab Fri Sep 27 18:40:47 EDT 1991
Article 1742 of sci.virtual-worlds:
Path: ultb!rit!rochester!udel!wupost!sdd.hp.com!spool.mu.edu!agate!bionet!raven.alaska.edu!milton!hlab
>From: frank@cavebbs.gen.nz (Frank van der Hulst)
Newsgroups: sci.virtual-worlds
Subject: Sega glasses & VGA (C source code)
Message-ID: <1991Sep25.022127.27830@milton.u.washington.edu>
Date: 23 Sep 91 08:42:28 GMT
Sender: hlab@milton.u.washington.edu (Human Int. Technology Lab)
Organization: The Cave MegaBBS, Public Access Usenet, Wellington, NZ
Lines: 200
Approved: cyberoid@milton.u.washington.edu


Several people requested info on how to display 3D images, after my post of
the circuit to hook up Sega glasses to the PC. Following is source code to
do that.

Frank.

/*

VGA 320 * 400 * 256 * 2 frames routines.

Written by: F van der Hulst, 20/2/91

These routines display pixels in 320*400 mode by modifying the VGA
registers, as outlined in Programmer's Journal V7.1 (Jan/Feb '89)
article, pages 18-30, by Michael Abrash.

The advantage of 320 * 400, is that it gives two separate video pages,
which can be displayed on the screen independently. These can contain
two views of a scene, taken from slightly different viewpoints. These
are displayed alternately on the screen, in sync with a pair of
"chopper glasses", to give a 3D effect.


#include <conio.h>

typedef unsigned char DacPalette[256][3];

/* Setvgapalette sets the entire 256 color palette     */
/* PalBuf contains RGB values for all 256 colors       */
/* R,G,B values range from 0 to 63                         */
/* Taken from SVGA256.H, by Jordan Hargraphix Software */

void setvgapalette(DacPalette *PalBuf)
{
  struct REGPACK reg;

  reg.r_ax = 0x1012;
  reg.r_bx = 0;
  reg.r_cx = 256;
  reg.r_es = FP_SEG(PalBuf);
  reg.r_dx = FP_OFF(PalBuf);
  intr(0x10,&reg);
}


unsigned int act_page = 0; /* Current page being written to */


#define VGA_SEGMENT        0xa000
#define SC_INDEX           0x3c4
#define GC_INDEX           0x3ce
#define CRTC_INDEX         0x3d4
#define DISPIO             0x3DA

#define MAP_MASK           2
#define MEMORY_MODE        4
#define GRAPHICS_MODE      5
#define MISCELLANEOUS      6
#define VRT_bit            8
#define MAX_SCAN_LINE      9
#define START_ADDRESS_HIGH 0x0c
#define UNDERLINE          0x14
#define MODE_CONTROL       0x17

void writepixel(int x, int y, unsigned char colour)
{
long addr;

        addr = ((x >> 2) + 320/4 * y + act_page);
        addr = ((addr & 0xffff0000l) << 4) + (addr & 0xffffL) + ((long) VGA_SEGM
ENT << 16);
        outport(SC_INDEX, (0x100 << (x & 3)) | MAP_MASK);
        *(char far*)addr = colour;
}

void set320x400mode(void)
{
struct REGPACK regs;
unsigned char x;

        regs.r_ax = 0x13;                               /* Set 320*200*256 graph
ics mode via BIOS */
        intr(0x10, &regs);

/* Change CPU addressing of video memory to linear (not odd/even, chain, or
        chain 4), to allow access to all 256K of display memory. Each byte will 
now
        control one pixel, with 4 adjacent pixels at any given address, one pixe
l
        per plane. */

        outportb(SC_INDEX, MEMORY_MODE);
        x = inportb(SC_INDEX+1);
        x &= 0xf7;                                                              
        /* Turn off chain 4  */
        x |= 4;                                                                 
        /* Turn off odd/even */
        outportb(SC_INDEX+1, x);
        outportb(GC_INDEX, GRAPHICS_MODE);
        x = inportb(GC_INDEX+1);
        x &= 0xef;                                                              
        /* Turn off odd/even */
        outportb(GC_INDEX+1, x);
        outportb(GC_INDEX, MISCELLANEOUS);
        x = inportb(GC_INDEX+1);
        x &= 0xfd;                                                              
        /* Turn off chain */
        outportb(GC_INDEX+1, x);

/* Now clear the whole screen, since the mode 13h set only clears 64K. Do this
        before switching CRTC out of mode 13h, so that we don't see grabage on t
he
        screen. */

        outport(SC_INDEX, 0x0f00 | MAP_MASK);                   /* Write to 4 pl
anes at once */
        setmem(MK_FP(VGA_SEGMENT, 0), 0xffff, 0);

/* Change mode to 320*400 by not scanning each line twice. */
        outportb(CRTC_INDEX, MAX_SCAN_LINE);
        x = inportb(CRTC_INDEX+1);
        x &= 0xe0;                                                              
/* Set maximum scan line to 0 */
        outportb(CRTC_INDEX+1, x);

/* Change CRTC scanning from doubleword to byte mode, allowing the CRTC to
        scan more than 64K */
        outportb(CRTC_INDEX, UNDERLINE);
        x = inportb(CRTC_INDEX+1);
        x &= 0xbf;                                      /* Turn off doubleword *
/
        outportb(CRTC_INDEX+1, x);
        outportb(CRTC_INDEX, MODE_CONTROL);
        x = inportb(CRTC_INDEX+1);
        x |= 0x40;                                      /* Turn on the byte mode
 bit, so memory is linear */
        outportb(CRTC_INDEX+1, x);
}

void end320x400mode(void)
{
struct REGPACK regs;

        regs.r_ax = 3;                          /* Return to text mode */
        intr(0x10, &regs);
}

/* Set visible page */

void setvispage(int page)
{
        outport(CRTC_INDEX, (page << 15) | START_ADDRESS_HIGH);
}

/* Set active page (page being written to */

void setactpage(int page)
{
        act_page = page ? 0x8000 : 0;
}


void WaitForVerticalRetrace(void)
{
static char chopper = 1;

        while (inportb(DISPIO) & VRT_bit) /* wait */ ;
        while ((inportb(DISPIO) & VRT_bit) == 0) /* wait */ ;
        if ((chopper++ & 1)== 0)                outportb(0x3fc, 1);
        else                                                                    
outportb(0x3fc, 3);
}

void main(int argc, char *argv[])
{
   set320x400mode();

/* Now fill the rgb_palette structure in memory with colour info */

   setvgapalette(&rgb_palette);

   setactpage(0);
/* Now call writepixel to put stuff on page 0 */
   setactpage(1);
/* Now call writepixel to put stuff on page 1 */

   while (!kbhit()) {
           WaitForVerticalRetrace();
           setvispage(0);
           WaitForVerticalRetrace();
           setvispage(1);
   }
   getch();
   end320x400mode();
}

-- 

Take a walk on the wild side, and I don't mean the Milford Track.
Kayaking: The art of appearing to want to go where your boat is taking you.


--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From jmunkki@hila.hut.fi Fri Oct 18 23:39:28 1991
Received: from hila.hut.fi by karazm.math.UH.EDU with SMTP id AA28966
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 18 Oct 1991 14:43:40 -0500
Received: by hila.hut.fi (5.65c/7.0/S-TeKoLa)
	id AA16262; Fri, 18 Oct 1991 21:39:28 +0200
Date: Fri, 18 Oct 1991 21:39:28 +0200
From: Juri Munkki <jmunkki@hila.hut.fi>
Message-Id: <199110181939.AA16262@hila.hut.fi>
To: glove-list@karazm.math.uh.edu
Subject: Re: sega glasses available?

The Sega glasses really do operate with +/- 10 V. I haven't tried anything
higher, but I do know that they work with +/- 9V. You have to be particularly
careful not to feed any DC to the glasses, because it will break the shutters.

The % darkness is supposedly around 60%. On the Macintosh it's not a problem
to switch the glasses at vertical blanking time (the operating system has
support for installing tasks to run at VBL time), so on my monitor at home,
I get 66 switches per second (a frame rate of 33 Hz). The new 21" monitor
from Apple uses 75 Hz, so there should be almost no flicker.

I hope all Mac users on this list are aware of the Macintosh-compatible
interface and the sample application that I wrote for it. I don't know
if it is any longer possible to connect the glasses and the glove to the
same serial port now that we know how to access the hi-res mode. (I haven't
looked at the code, but I expect someone to come up with a Mac version
really soon now.)

Juri

From motcsd!roi!lance@apple.com Tue Oct 18 06:25:25 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA29470
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 18 Oct 1991 15:56:47 -0500
Received: by apple.com (5.61/18-Oct-1991-eef)
	id AA27173; Fri, 18 Oct 91 13:30:44 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kY0nt-0001QuC@motcsd.csd.mot.com>; Fri, 18 Oct 91 13:28 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA15238; 18 Oct 91 13:25:27 PDT (Fri)
To: glove-list@karazm.math.uh.edu, jdb9608@cs.rit.edu
Subject: Re: sega glasses available?
Message-Id: <9110181325.AA15226@roi.ca41.csd.mot.com>
Date: 18 Oct 91 13:25:25 PDT (Fri)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>


Another source of glasses is a product from Haitex (inc. or something)
in Charleston, S. Carolina.  These are surplus Nintendo glasses
packaged with a box half the size of a cigarette pack.  The
box takes 5V, Ground, and a control line and controls one or
two goggles.  These are built for the Amiga and should be
available from a hip Amiga dealer near you.  The Haitex BBS had
the pinouts for the 9-pin Amiga joystick connector; I've got
them stashed somewhere.  The things list for $110 and are
built and solidly packaged.  A deal for we non-electronics types.

The Nintendo goggles (welder's helmet actually) were never marketed
in the states.

Lance Norskog

From dstamp@watserv1.uwaterloo.ca Fri Oct 18 13:01:17 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA29697
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 18 Oct 1991 16:05:22 -0500
Received: by watserv1.uwaterloo.ca
	id <AA08021>; Fri, 18 Oct 91 17:01:17 -0400
Date: Fri, 18 Oct 91 17:01:17 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110182101.AA08021@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

Hey, thanks for the 320x400x256 code fragment!  I had already figured out how 
get that resolution, and how to get 2 pictures, but I couln't figure out how
to write the pictures without leaving the mode. (A bit misleading, calling
SC#4 bit 3 "odd/even"!)  A bit expensive in time, constantly changing the plane
write register, though.  Guess I'll have to figure out another damn 4-pass
write algorithm. (B-{)

I think that VR applications would be better served by using 4 pages of
200 lines, as that cuts down the rendering time and allows double buffering.
Any comments on using 16-color modes for even faster rendering?  Is there
ANY way that so few colors is sufficient for filled-poly VR work?

Which brings up the topic of reprogramming VGA cards to achieve new resolutions
and timings.  Cheap LCD displays are going to need this to work properly.  
I did some work last summer on getting NTSC timings to run Sharp LCD
panels, but I had to add a new clock source via the VGA feature connector.
Any idea how cards from different manufacturers handle radical reprogramming
of the registers?  Is the timing (i.e. blanking period) and "screwy" video
modes reliable across all cards?

About the Sega driver: looks a lot like the push-pull driver I developed
a while ago.  I didn't consider using the RS232 port as a power source then as
I wasn't sure of the current capacity.  Using a CMOS part as an oscillator
makes it draw a LOT more current than the spec sheet suggests.  It DOES get
the needed 20-24V signal output that the glasses need for full shuttering, 
though.

-Dave Stampe
 



From motcsd!roi!lance@apple.com Tue Oct 18 06:40:03 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA29733
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 18 Oct 1991 16:09:35 -0500
Received: by apple.com (5.61/18-Oct-1991-eef)
	id AA28855; Fri, 18 Oct 91 13:45:43 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kY124-0001FVC@motcsd.csd.mot.com>; Fri, 18 Oct 91 13:43 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA15364; 18 Oct 91 13:40:05 PDT (Fri)
To: glove-list@karazm.math.uh.edu
Subject: Sega driving
Cc: gbnewby@alexia.lis.uiuc.edu, jdb9608@cs.rit.edu
Message-Id: <9110181340.AA15352@roi.ca41.csd.mot.com>
Date: 18 Oct 91 13:40:03 PDT (Fri)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>


If you were clever, you could drive the Sega and the glove
off the same 68C11 evaluation board.

No! No! Stop hitting me!

Lance Norskog

From dstamp@watserv1.uwaterloo.ca Fri Oct 18 14:02:00 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA00339
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 18 Oct 1991 17:06:10 -0500
Received: by watserv1.uwaterloo.ca
	id <AA10961>; Fri, 18 Oct 91 18:02:00 -0400
Date: Fri, 18 Oct 91 18:02:00 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110182202.AA10961@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

|> One reasons that Jez San et al write such fast code is that they
|> count 
|> almost every instruction cycle in their assembler routines aiming to
|> end up 
|> with as few as possible. Writing at such a low level of course means
|> that
|> they have to know a lot about how the computer and its processor
|> work. High
|> level languages and computer operating systems tend to try to mask
|> off the
|> computer; they also try to be flexible which is not always
|> necessary.

>This debate went through the Amiga newsgroups recently, and I will quickly
>point out the conclusion reached there: many good C compilers, with the
>optimizer turned on, come close enough to a good assembler programmer as
>to be indistinguishable. This came out after assembly programmers posted
>an assembly algorithm as they would do it, and the C programmers ran the
>same thing through their C compilers, and the two were nearly identical!

 Was this graphics code or was it something else?  Was it programming the
  Amiga hardware or was it doing the tight loops we know and ?love???

>There was a small cycle-count difference (something like 2 cycles in
>a 100-cycle loop) in that particular loop, so you are right -- assembly
>programmers can get every last cycle, but they're not winning by much.
>And as has already been pointed out here, the high-level programmer can 
>spend more time refining the algorithm, and thus maybe execute the
>loop fewer times. Conclusion: Assembly programmers make each iteration
>of the loop slightly faster, but high-level programmers iterate it
>less.
>
>-- Greg Stelmack (stelmack@eggo.csee.usf.edu)

I think I see the problem here.  The difference is between the IBM and Amiga
designs.  Any real graphics work on the IBM PC requires multiple I/O space
accesses with inportb() and ouportb() type routines.  Since most of the 
available C compilers do not replace these with inline code, this results
in much slower operation than with assembly code.  Also, many of the good 
instructions on the 80x86 (such as LOOP or REP STOSB) are not used by 
compilers.  Again, assembly code is the only solution.  

Conversely, the Amiga's 68000 processor accesses its graphics hardware's
registers as memory-mapped, so C tends to work well here.  There are very
few special instructions on the 68K processor that are good for graphics.
Also, on the Amiga, the graphics hardware makes the need for tight, fast
graphics loops less.

When it comes to higher-level stuff like handling data structures and
calculating stuff, I agree that C is better than assembler.  My code
usually consists of 90% C and 10% embedded assembly code for the graphics
kernals.  I usually gain 300-1000% in performance of the graphics sections
of my code by converting selected sections to assembler.

The low-level VR thread portion which is also taking place via the powerglove
mailing list seems to be showing that there is at LEAST a 50-50 split
between graphics and database manipulation/sorts/etc in a VR system.
This indicates that C code is going to be VERY useful.  Conversely, the
need for assembly code (machine-specific) in the actual poly-rendering
drivers is especially great on the IBM PC machines (see above).

- Dave Stampe



From dstamp@watserv1.uwaterloo.ca Fri Oct 18 18:12:28 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA01189
  (5.65c/IDA-1.4.4 for <glove-list@KARAZM.MATH.UH.edu>); Fri, 18 Oct 1991 21:16:38 -0500
Received: by watserv1.uwaterloo.ca
	id <AA20225>; Fri, 18 Oct 91 22:12:28 -0400
Date: Fri, 18 Oct 91 22:12:28 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110190212.AA20225@watserv1.uwaterloo.ca>
To: dstamp@WATSERV1.uwaterloo.ca, glove-list@KARAZM.MATH.UH.edu,
        rrr@aberystwyth.ac.uk
Subject: Re:  TSR


From dstamp@watserv1.uwaterloo.ca Fri Oct 18 18:14:59 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA01196
  (5.65c/IDA-1.4.4 for <glove-list@KARAZM.MATH.UH.edu>); Fri, 18 Oct 1991 21:19:04 -0500
Received: by watserv1.uwaterloo.ca
	id <AA20259>; Fri, 18 Oct 91 22:14:59 -0400
Date: Fri, 18 Oct 91 22:14:59 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110190214.AA20259@watserv1.uwaterloo.ca>
To: dstamp@WATSERV1.uwaterloo.ca, glove-list@KARAZM.MATH.UH.edu,
        rrr@aberystwyth.ac.uk
Subject: Re:  TSR

> From glove-list-request@karazm.math.UH.EDU Wed Oct 16 10:29:06 1991
> From: rrr@aberystwyth.ac.uk
> To: dstamp@WATSERV1, glove-list@KARAZM.MATH.UH.edu
> Subject: TSR
> 
> 
> >If you're interested in other uses for hi-res, how about a TSR or adapter to
> replace a joystick for video games?  Shouldn't be too hard, esp. if the
> game is key-driven (Tetris looks like an easy one, and it's PD).
> >
> 
> Ive written a TSR for low res use og PowerGlove, it works for
> 
> most applications. I dont have time to rewrite my basic IO
> 
> stuff for hi res, but the TSR should work fine, Ill post the source
> 
> if anybodys interested.
> 
> Ronan
> 
> R M Ruairi, UCW Aberystwyth, rrr@UK.AC.Aber
> 
> ps the code interprets data from PG as keystrokes and stuffs the standard
>    buffer. Its written in Turbo Pascal v6.
> 
> 

Sure, send me a copy of the code.  I need something to look at for future
TSR endeavors.  I'm working with C, but the sequence and BIOS/DOS calls
should be clear.

-Dave Stampe

From druwy!mab@att.att.com Sat Oct 19 04:23:00 1991
Received: from att.att.com by karazm.math.UH.EDU with SMTP id AA02793
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 19 Oct 1991 11:35:05 -0500
Message-Id: <199110191635.AA02793@karazm.math.UH.EDU>
From: druwy!mab@att.att.com
Date: Sat, 19 Oct 91 10:23 MDT
To: att!glove-list
Subject: Amiga Hi-res code has been sent

I've sent copies of the PG Amiga hi-res code to everyone who asked me
for it.  There are more Amiga users on the list than I expected!  I've
also sent a copy to Eric to be placed in the ftp archive.  I won't
be following up on mailer problems, so if your copy doesn't arrive in
a reasonable amount of time, you can ftp it.  Please request it from
me only if you don't have access to ftp.

For the copies I sent out individually, you'll need to uudecode the
mail, and then use LZ or LHARC to extract the files.

One thing I didn't mention in the "readme" file is that I used
SAS/C 5.10A.  You may need to do some rework to port it to any other
compiler.  Currently the code only runs on unaccelerated Amigas.
I plan on fixing that soon.  The "readme" contains other details
about what may or may not work, so please read it.

Happy VR-ing!

Alan Bland
mab@druwy.att.com

From jdb9608@cs.rit.edu Sat Oct 19 15:53:32 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA03829
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 19 Oct 1991 18:53:58 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA17898; Sat, 19 Oct 91 19:49:54 -0400
Received: from texas.CS (texas.ARPA) by junior.rit.edu (4.1/5.17)
	id AA16333; Sat, 19 Oct 91 19:38:43 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110192338.AA16333@junior.rit.edu>
Subject: ST timing?
To: glove-list@karazm.math.uh.edu
Date: Sat, 19 Oct 91 19:53:32 EDT
X-Mailer: ELM [version 2.3 PL8]

I'm working on a timer/interrupt driven hi-res interface for the ST,
to free up the CPU.  I've got the timer/interrupt part working
(finally...), but the data packet from the glove is sometimes
out of sync.

Specifically, it sometimes shifts so that A0 and X are the
last bytes of the packet, sometimes A0 is the last byte,
and sometimes A0 is the first byte (like it should be).
Manfredo's suggestion of quickly making a fist or pressing
the center button both work to bring A0 back to the first
byte, but it goes out of whack too frequently (about once
per minute) to rely on that manual solution.  I suspect
it's a timing problem, as Greg Alt mentioned when he did
the PC version, but I tried changing the /7 to a /5 and /6
in the delay() macro (as he did) and it didn't help.

Has someone gotten the ST source to give them the packet
in the proper order?  I know it DOES work for Manfred Krauss,
and it doesn't work for several other people on this list
who've tried it on their ST's.  Who else with an ST is
getting the packets in the right order?  Did you change
the code?  Did it just work?  Is there some timing difference
in the hardware between different types of ST's?

I'll try changing the times of various parts of the protocol,
(especially reducing the delay times, since Greg's machine
is faster than mine), but I'd rather not guess.

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From dstamp@watserv1.uwaterloo.ca Sat Oct 19 17:04:46 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA03969
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 19 Oct 1991 20:08:49 -0500
Received: by watserv1.uwaterloo.ca
	id <AA23683>; Sat, 19 Oct 91 21:04:46 -0400
Date: Sat, 19 Oct 91 21:04:46 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110200104.AA23683@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu, jdb9608@cs.rit.edu
Subject: Re:  ST timing?

> From glove-list-request@karazm.math.UH.EDU Sat Oct 19 20:21:47 1991
> From: jdb9608@cs.rit.edu (John D Beutel)
> Subject: ST timing?
> To: glove-list@karazm.math.uh.edu
> 
> I'm working on a timer/interrupt driven hi-res interface for the ST,
> to free up the CPU.  I've got the timer/interrupt part working
> (finally...), but the data packet from the glove is sometimes
> out of sync.
> 
> Specifically, it sometimes shifts so that A0 and X are the
> last bytes of the packet, sometimes A0 is the last byte,
> and sometimes A0 is the first byte (like it should be).
> Manfredo's suggestion of quickly making a fist or pressing
> the center button both work to bring A0 back to the first
> byte, but it goes out of whack too frequently (about once
> per minute) to rely on that manual solution.  I suspect
> it's a timing problem, as Greg Alt mentioned when he did
> the PC version, but I tried changing the /7 to a /5 and /6
> in the delay() macro (as he did) and it didn't help.
> 
> Has someone gotten the ST source to give them the packet
> in the proper order?  I know it DOES work for Manfred Krauss,
> and it doesn't work for several other people on this list
> who've tried it on their ST's.  Who else with an ST is
> getting the packets in the right order?  Did you change
> the code?  Did it just work?  Is there some timing difference
> in the hardware between different types of ST's?
> 
> I'll try changing the times of various parts of the protocol,
> (especially reducing the delay times, since Greg's machine
> is faster than mine), but I'd rather not guess.
> 
> --
> J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."
> 

Look at the code I posted a few days ago for the IBM PC.  Basically, what you must do is:
1) Read from the glove until a $A0 is received.  Try every 3 or 4 mS, or the 
glove will start trashing data if you interrupt it too often (do this via
an interrupt.)
2) Immediately read 8 bytes, discarding the last 2-- this is the REAL glove
data packet.
3) Return to step 1

If the glove hasn't responded after 500 tries of step 1, reset it into the
hires mode (is crashed or the user changed the program).

The code I posted also contains noise reduction routines.  If you don't use
these, your cursor will jump aruond a lot.

The above procedure is FASTER than the fixed timing reads.  What happens is
that the glove takes longer to finish reading the finger positions when you
make a fist.  Hand open, you get 17 samples/sec, hand closed, you get 12.5
samples/sec.

- Dave Stampe

From narf@u.washington.edu Sat Oct 19 11:53:53 1991
Received: from milton.u.washington.edu by karazm.math.UH.EDU with SMTP id AA04000
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 19 Oct 1991 20:57:54 -0500
Received: by milton.u.washington.edu
	(5.65/UW-NDC Revision: 2.1 ) id AA10780; Sat, 19 Oct 91 18:53:53 -0700
Date: Sat, 19 Oct 91 18:53:53 -0700
From: Francis Taylor <narf@u.washington.edu>
Message-Id: <9110200153.AA10780@milton.u.washington.edu>
Sender: narf@milton.u.washington.edu
To: glove-list@karazm.math.uh.edu
Subject: Interfaces to VR devices
Reply-To: narf@hitl.washington.edu

Hi.  I'm hacking interfaces to user interface devices at the HIT Lab
in Seattle, and I've been watching this list with great interest.
Lately I've seen interface software going by, and I figured I should
get in my two cents' worth (I'm optomistic).  

There should be a standard for the software interfaces to devices like
the PowerGlove, the DataGlove, the Exos DHM, the Polhemus and Bird
position sensors... so we can all run the same software, whether we
use a $50 Mattel PowerGlove or a $5000 VPL Dataglove. And, of course,
who knows what wonderful sensors the future will bring.  Won't it
be nice to buy that great new device, plug it in, and get all its
functionality, even using the same software you've worked with so
much.

The precision, range, and units of data from the sensors will be
different. Also, people with floating-point processors will want to
work with floats, and others may want fixed-point numbers for speed.

In any event, efficiency is paramount.  If a standard interface
introduces significant overhead into a system, speed freaks won't use
it, and we VR hackers certainly qualify as speed freaks. If you show
me a computer made today that's 'fast enough' for VR, I'll buy it (I'm
broke, but I'm confident).

My solution to this problem (encompassing the famous Media-Lab "all of
the above" attitude) is that the interface provides the data in as
many different formats as suitable, and also provides the relative
costs of the different formats.  The application decides which formats
it wants, and informs the interface, which provides exactly what is
needed. The concept is similar to that of an Internet Telnet
connection; each figures out what the other's got so the most
featureful connection possible is established.

If the interface library can provide this kind of functionality by
clever use of preprocessor macros, then very efficient code can be
produced for a variety of different situations. For example, I've
written an RS-232 library that works with POSIX, BSD, System V, and
Macintosh systems.  Thanks to clever and careful use of macros, the
application code is generic, and the implementations are optimal.

If you're interested in pursuing these goals with me, or if you have
an idea, please send me e-mail.  All HIT Lab software carries the GNU
Copyleft Notice, in case you're concerned about proprietary ideas.


From jdb9608@cs.rit.edu Sat Oct 19 19:22:16 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA04174
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 19 Oct 1991 22:22:45 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA22805; Sat, 19 Oct 91 23:18:40 -0400
Received: from texas.CS (texas.ARPA) by junior.rit.edu (4.1/5.17)
	id AA16559; Sat, 19 Oct 91 23:07:27 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110200307.AA16559@junior.rit.edu>
Subject: sampling techniques and response time
To: glove-list@karazm.math.uh.edu
Date: Sat, 19 Oct 91 23:22:16 EDT
X-Mailer: ELM [version 2.3 PL8]

I've been thinking about continuous polling (via interrupts)
versus polling on demand.  There may be a problem with
synchronizing.

The way to increase the sample rate that Dave Stampe found
(thru excellent investigation--you're really helping, Dave!)
was by polling a byte every 2 to 4 ms, and watching for the A0.
(I haven't tried it yet.)  The samples per second range from
17 (= 58 ms) for open hand to 12.5 (= 80 ms) for closed hand.
The more samples per second, the better.

The problem may be the increase in time from when the sample
is taken to when the glove_data is utilized.  Someone mentioned
a figure like 100 ms as the maximum response time for coordinating
motion and vision.  Can anyone elaborate (I know there was an
expert on this out there...)?

If the calculation and rendering of the cursor is not synchronized
with the sampling of the glove, then in the worst case with
continuous polling the data could come in just after the program
begins to calculate the cursor's position, and sit around for
79 ms before being used to calculate the cursor's next position.
If the cursor's something complicated (like a picture of a glove),
or if the glove's own sample time (40 ms) gets in the way,
or especially if the data is used for something more complicated
like rendering the whole viewpoint (e.g., homemade eyephones),
then that pushes the delay way beyond the 100 ms limit.

On the other hand, if the glove can be polled on demand
(within certain constraints, like at least every 100 ms),
or even if the graphics are synchronized to the continuous
polling, then that eliminates the 79 ms lag time and
brings the picture that much closer to the motion.

The trick to the polling on demand (theoretically)
is to not sample the glove until you're ready to use
the glove_data, and then return as soon as you've
got the important data.  The juicy part of the packet
is the first 7 bytes (if the packet is in the right order),
which take less than 1 ms to sample!  The last 4 bytes
of the standard 12 byte packet take about 70 ms to sample,
but they're not needed and can be handled by an ISR
following the return of the main call, just to keep
the timing right.  Whether the data was freshly sampled
when it comes from the glove is another important question.

I'm assuming that the CPU time needed to handle the graphics
will expand to approximate whatever sample time is achieved
with the glove.  Any slower frame update rate than 13 fps
will look choppy, and any faster would be pointless since
if there's no new input sample then the picture won't need to
change anyway.  So, if it is possible to do the graphics
faster than the input sample rate then the programmer will
just make the graphics more complicated (hidden line removal,
polygon filling, polygon shading, more polygons... ad infinitum).
Since each graphics cycle will take about as long as
each glove sample, it'll be important to synchronize them
and avoid a doubling of the best-case delay time.

Whether to sync the glove to the code or the code to the glove
depends on how the glove makes its clicks.  I suppose the
glove must start its sample click 40 ms before it sends the
data to the computer, which means it must do so 39 ms before
the computer asks for it, which means that it must do so
whether the computer asks or not.  In that case, continuous
sampling would be best and the code must be sync'ed to the glove
(which is a pain, considering that there may be other devices
also being delt with, including another glove).  On the other hand,
if the glove always starts its clicks approximately 30 ms after the
last time the computer asked it for data, then sampling on demand
is best so the glove will be syncronized to the code.

Can a hardware guru look into this, please (Dave Stampe?)?

The time it takes to do the graphics rendering each frame
is independent of whether the glove's fingers are open or closed.
So, if continuous sampling is used and the graphics rate is
not syncronized to the glove, then as the glove sample rate
varies from 58 ms to 80 ms the graphics routines will
get out of sync and introduce an additional 80 ms lag time
(at worst) between movement and feedback (which is probably
unacceptable).  If the graphics rate IS synchronized to the
glove, the graphics routines will have to be designed to the
shortest interval (58 ms) and the additional 22 ms which
may or may not be there will be wasted every frame (i.e.,
wasting 27% of the CPU time).  On the other hand, if the
glove times its clicks according to when the on-demand sample
is made, then the graphics code can be designed to the
worst-case time (75 ms or however long it is), the CPU
will be fully utilized, and an additional 17 ms lag time
(at worst) will be the cost.  But, if the glove clicks away
at its own speed regardless of when on-demand samples are made,
then the lag time will be occuring as the data sits around
in the glove's internal buffer instead of in the computer's,
but the results will be the same (up to 80 ms as the glove
and computer become unsynchronized at their worst).
I think this would be a big performance problem.

I don't know enuf to find out myself which way the glove works.

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From dstamp@watserv1.uwaterloo.ca Wed Oct 19 21:11:49 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA04583
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 20 Oct 1991 00:15:52 -0500
Received: by watserv1.uwaterloo.ca
	id <AA00440>; Sun, 20 Oct 91 01:11:49 -0400
Date: Sun, 20 Oct 91 01:11:49 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110200511.AA00440@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu, jdb9608@cs.rit.edu
Subject: Re:  sampling techniques and response time

John D Beutel (jdb9608@cs.rit.edu) sends a message on:

- sampling rates on powerglove and delays of data
- motion-to-video delays
- polling of glove vs. interrupt delays in data

First, the REAL sampling rate for data is set by the powerglove itself, and
depends on the sum of all of its sample periods (thus its dependance on the
finger position).  If you wait longer than the sampleing period before you 
read the glove, you just get older data.  
Second, the interrupt-driven method I proposed (use an interrupt every 3-4 mS
to poll the glove) actually results in the freshest possible data.  Your
software can sit in a loop calling get_glove_data() and checking the .new
flag in the result: the glove doesn't care, and you're just looking at
the buffer contents until the interrupt gets new data and updates the buffer.
BTW, there's a good reason for using an interrupt instead of having your 
program poll the glove directly... actually, two.  First, this ensures the
glove is polled with proper spacing (if you see evenly spaced glitches in
the glove XY data, you're talking to the glove too often.  Second, the 
interrupt ensures that you're getting every sample: otherwise the deglitch()
noise reduction won't work properly.

The only way I can figure to speed up the glove sample rate (potentially to
25 Hz) is to disconnect the fingers, short them out (or ground the CPU
sample pin) and connect the finger sensors to an A/D converter (such as
a modified PC game port card).  Seems like a lot of work.

The motion-to-video delay problem IS serious, and isn't going to get any 
better.  If we assume an average of 60mS/2=30mS delay in the glove, 30 mS in
the transfer, 100 mS in rendering, and 16 mS in the display, we have about
180 mS altogether.  Now, I know of commercial aircraft simulators that
have that kind of delay, and they DON'T use eyephone-type displays-- but
their performance make experienced pilots run, not walk, to the nearest
washroom.  Of course, in our systems the field of view won't be so big, and
the amount of "motion sickness" should be less.  Also, if you're just
moving objects with your hand, you can learn to slow down a bit.

The problem is with eyephone displays-- picture movements won't match
head movements very well, so the user will experience dizzying effects
as the scene lags head movements.  (BTW, I have an idea how to partially fix
this, involving some tomfoolery with the sync for the displays, that I'd like
to discuss with someone who has a working system with a head position
sensor and good hardware experience).

The usual method for fixing delay is a Kalman or predictive filter, but I
don't think this will work with the power glove.  The noise filters I
wrote work on the position data, but don't affect velocity noise at all.
This means the Kalman filter would add significant noise.

I think this might be a good time to point out a couple of interesting points
that I think were'nt clear from past postings.  First, saying that a 100 mS
delay can cause "oscillation" by feedback thru the user doesn't imply that
the system is oscillating at 10 Hz.  The human nervous system contains
its own adaptive predictive filters with 100-300mS predictive power.  Add
these to the 100 mS delay and you get an unstable system that can oscillate
at <1 Hz.  This is worst in aircraft simulators where the simulator adds
more lowpass stuff, or when the user is trying for fine positioning.
Second... Hmm, can't remember now, so you KNOW I'm typing this inside of
mail! (B-{)

- Dave Stampe

From dstamp@watserv1.uwaterloo.ca Wed Oct 19 21:43:00 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA04863
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 20 Oct 1991 00:47:03 -0500
Received: by watserv1.uwaterloo.ca
	id <AA02928>; Sun, 20 Oct 91 01:43:00 -0400
Date: Sun, 20 Oct 91 01:43:00 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110200543.AA02928@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

I'd like to try something on for _size_ here, having to do with the number
of polys in a low-end VR database versus rendering capacity.

This means that mail and postings are solicited, on opinions, facts,
or whatever.  I'm trying to get a feel for the whole subject, as the
VR graphics project seems to be of interest right now.

First, I'm looking at the followup to Fundamentals of Interactive Computer
Graphics, which is titled Computer Graphics: Principles and Practice by
James Foley et al.  It seems pretty decent, if you avoid the inevitable
IRIS bias.  It has good stuff on transformations and a whole chapter on
various visible-surface determination algorithms.  I think I see a fast way
way to do the scan-line algorith that would take less than 25% of the rendering
time, and would result in each screen pixel being written to once (i.e 10 
frames per second, 320x200x256 colors on a 386/25 IBM PC).  Have to check
further, though.

Now, the main event.  I am proposing a top-down clipping sequence for a
10,000 polygon database (world, that is), that goes as follows:

database:	10,000 polys, arranged as objects with some extra fields
clipping 1:	4,000 polys, by known hidden objects (i.e behind user)
clipping 2:	2,000 polys, by quick plane tests to see if in viewport
backside:	1,000 polys, by removing polys on back of objects.

All this clipping can be done BEFORE converting the polys to viewport
(X,Y,depth) coordinate system.  Most of this is easily done during the
transversal of the database (i.e. movong the world model to the renderer).

1000 polys is a lot to have to draw, but it's within a factor of 3 of what
my proposed renderer *may* be able to do at 10 frames/sec.

SO...  Any comments?  Is the 10,000 poly database unrealisticly big?
Is my clipping estimate overoptimistic?  If so, how many polys SHOULD I
count on getting thru to the renderer?

All suggestions welcome.

- Dave Stampe

From jim@kaos.stanford.edu Sun Oct 20 04:27:27 1991
Received: from fou-local (fou.Stanford.EDU) by karazm.math.UH.EDU with SMTP id AA06189
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 20 Oct 1991 13:31:17 -0500
Received: from [127.0.0.1] by fou-local (4.1/inc-1.0)
	id AA01566; Sun, 20 Oct 91 11:27:41 PDT
Message-Id: <9110201827.AA01566@fou-local>
To: glove-list@karazm.math.uh.edu
Subject: Re: trying something on for _size_
In-Reply-To: Your message of "Sun, 20 Oct 91 01:43:00 EDT."
             <9110200543.AA02928@watserv1.uwaterloo.ca> 
Date: Sun, 20 Oct 91 11:27:27 -0700
From: James Helman <jim@kaos.stanford.edu>


1) Since Andy Van Dam was associated with Stellar and PHIGS/PHIGS+
(competitors to SGI & GL), I don't think that Foley+Van
Dam+Feiner+Hughes has an IRIS bias.  A high-end bias, perhaps.

2) Your proposed clipping is a first step, but if you want to maintain
anything resembling a constant frame rate in a complex world, consider
using multiple resolution models and switching between them depending
on their apparent size and scene complexity.

3) Texture mapping is the only way to make scenes with few polys look
halfway decent.  See Sense8's software running on ActionMedia cards in
a PC or on a vanilla SPARCStation GX.  Gullichsen has done a good job,
mostly in software.  Even the IRIS Indigo does texture mapping in
software.  The poly count / texture tradeoff is worth considering.

-jim

Jim Helman					Lab:  (415) 723-9127
Stanford University				FAX:  (415) 591-8165
(jim@KAOS.stanford.edu) 			Home: (415) 593-1233

"The power of the computer is locked behind a door with no knob."
							-B. Laurel


From wb1j+@andrew.cmu.edu Sun Oct 20 10:32:14 1991
Received: from PO5.ANDREW.CMU.EDU by karazm.math.UH.EDU with SMTP id AA06205
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 20 Oct 1991 13:38:15 -0500
Received: by po5.andrew.cmu.edu (5.54/3.15) id <AA07909> for glove-list@karazm.math.uh.edu; Sun, 20 Oct 91 14:34:07 EDT
Received: via switchmail; Sun, 20 Oct 1991 14:34:05 -0400 (EDT)
Received: from pcs8.andrew.cmu.edu via qmail
          ID </afs/andrew.cmu.edu/service/mailqs/q001/QF.cd0Qilq00WBM80aUR9>;
          Sun, 20 Oct 1991 14:32:18 -0400 (EDT)
Received: from pcs8.andrew.cmu.edu via qmail
          ID </afs/andrew.cmu.edu/usr21/wb1j/.Outgoing/QF.Ed0Qijm00WBMA1VW0o>;
          Sun, 20 Oct 1991 14:32:15 -0400 (EDT)
Received: from mms.0.1.871.EzMail.NeXT.2.0beta.2.CUILIB.3.45.SNAP.NOT.LINKED.pcs8.andrew.cmu.edu.pmax.ul4
          via MS.5.6.pcs8.andrew.cmu.edu.pmax_ul4;
          Sun, 20 Oct 1991 14:32:14 -0400 (EDT)
Message-Id: <0d0Qiiy00WBMQ1VVow@andrew.cmu.edu>
Date: Sun, 20 Oct 1991 14:32:14 -0400 (EDT)
From: "William M. Bumgarner" <wb1j+@andrew.cmu.edu>
To: glove-list@karazm.math.uh.edu
Subject: DataGlove 2 & NeXT
Cc: 


Seems I have come up w/access to a DataGlove 2.  I am going to use it
w/a NeXT ('040).  Anyone have any experience doing this?

BTW:  I'm going to write an IB palette for the glove.  If you want to
use the glove in a NeXTStep app, you can just drag an instance of the
glove off the palette and make a few connections....  

It will be free and source code will be included.

b.bum


b.bumgarner            | Disclaimer:  All opinions expressed are my own.
wb1j+@andrew.cmu.edu   | I officially don't represent anyone unless I
NeXT Campus Consultant | explicity say I am doing so. So there. <Thpppt!>
"I ride tandem with the random/Things don't run the way I planned them.."

From jim@kaos.stanford.edu Sun Oct 20 05:02:17 1991
Received: from fou-local (fou.Stanford.EDU) by karazm.math.UH.EDU with SMTP id AA06295
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 20 Oct 1991 14:06:04 -0500
Received: from LOCALHOST.Stanford.EDU by fou-local (4.1/inc-1.0)
	id AA01759; Sun, 20 Oct 91 12:02:19 PDT
Message-Id: <9110201902.AA01759@fou-local>
To: narf@hitl.washington.edu
Cc: glove-list@karazm.math.uh.edu
Subject: Re: Interfaces to VR devices 
In-Reply-To: Your message of "Sat, 19 Oct 91 18:53:53 PDT."
             <9110200153.AA10780@milton.u.washington.edu> 
Date: Sun, 20 Oct 91 12:02:17 -0700
From: James Helman <jim@kaos.stanford.edu>

Francis-

At least the Ascension, Polhemus and Logitech devices do roughly the
same thing: measure position and orientation of one or more sensors.

But providing a common interface to all the different gloves on the
market (Mattel PowerGlove, VPL DataGlove, Exos DHM, Virtex CyberGlove)
is another matter.  They all have different numbers and locations of
sensors, ranging from the PowerGlove on the low end to the 22 sensor
CyberGlove on the high end.  Combine this with varying built in
abilities to do gesture recog, internal calibration and force/tactile
feedback and the MIT "all of the above" strategy becomes, well,
challenging.

   The application decides which formats it wants, and informs the
   interface, which provides exactly what is needed.

A good idea in principal, but it would require the interface software
to do things like building a 22 degree-of-freedom hand model from
PowerGlove input (map all to high-end strategy) or only providing a
minimal PowerGlove hand model to all apps (lowest common denominator
strategy).  In the former case, many apps will behave strangely with
the low-end device guessing (better though than not behaving at all),
in the latter, you're throwing away $6K worth of hardware.

A more complex negotiation between the application's requests and the
device's capabilities would be possible, but increases (probably
unacceptably) the complexity both of the interface software and the
app.

I'd love to hear any ideas or progress the HIT lab makes on any of
this.

-jim

Jim Helman					Lab:  (415) 723-9127
Stanford University				FAX:  (415) 591-8165
(jim@KAOS.stanford.edu) 			Home: (415) 593-1233

"The power of the computer is locked behind a door with no knob."
							-B. Laurel


From yanek@mthvax.cs.miami.edu Sun Oct 20 12:11:32 1991
Received: from mthvax.cs.miami.edu by karazm.math.UH.EDU with SMTP id AA06503
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 20 Oct 1991 15:15:51 -0500
Received: by mthvax.cs.miami.edu id AA16502
  (5.65+/IDA-1.3.4 for glove-list@karazm.math.uh.edu); Sun, 20 Oct 91 16:11:34 -0400
From: Yanek Martinson <yanek@mthvax.cs.miami.edu>
Message-Id: <9110202011.AA16502@mthvax.cs.miami.edu>
Subject: Re: Interfaces to VR devices
To: jim@kaos.stanford.edu (James Helman)
Date: Sun, 20 Oct 91 16:11:32 EDT
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: <9110201902.AA01759@fou-local>; from "James Helman" at Oct 20, 91 12:02 pm
X-Mailer: ELM [version 2.3 PL11]

> But providing a common interface to all the different gloves on the
> market (Mattel PowerGlove, VPL DataGlove, Exos DHM, Virtex CyberGlove)
> is another matter.  They all have different numbers and locations of
> sensors, ranging from the PowerGlove on the low end to the 22 sensor
> CyberGlove on the high end.  Combine this with varying built in
> abilities to do gesture recog, internal calibration and force/tactile
> feedback and the MIT "all of the above" strategy becomes, well,
> challenging.

We could have some set of operations/functions that all interfaces
should support, either using the hardware feature or simulating it in
software. Then any application that uses only that basic set of
operations will work with any device. Then, there would be options
unique to a specific device. These interfaces would still support the
basic standard, but add on some new function calls. Then a program may
be written that requires a specific device.

Something like we have with modems. There is a basic command set (hayes
AT set) for neccessary things like RESET, DIAL, ANSWER, HANGUP, etc.
Any software that uses only these commands will work with most modems.
Then there are optional things some modems have, like MNP COMPRESSION,
protocols, interface speed locking, buffers, etc. A program can use
these features but then it will not work with other modems.

From tolman%asylum@cs.utah.edu Sun Oct 20 09:38:01 1991
Received: from cs.utah.edu by karazm.math.UH.EDU with SMTP id AA06740
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 20 Oct 1991 16:42:08 -0500
Received: from asylum.utah.edu by cs.utah.edu (5.65/utah-2.18-cs)
	id AA23819; Sun, 20 Oct 91 15:38:04 -0600
Received: by asylum.utah.edu (5.65/utah-2.12-leaf)
	id AA17900; Sun, 20 Oct 91 15:38:01 -0600
Date: Sun, 20 Oct 91 15:38:01 -0600
From: tolman%asylum@cs.utah.edu (Kenneth Tolman)
Message-Id: <9110202138.AA17900@asylum.utah.edu>
To: glove-list@karazm.math.uh.edu
Subject: Dataglove 2 and the SGI



  I also have gotten hold of some Dataglove 2's and I am trying to write
a driver for them, but on the Silicon Graphics workstations (the PI's for
now).  Is anyone else working on this or interested?

  I'll be happy to give away any code once it gets working.  For now I am
seeking a manual called "using the 6 port RS-232 option" to help work out
the definition of this new peripheral device.  

thanks

tom tolman
at the virtual virtual reality lab at University of Utah

From jdb9608@cs.rit.edu Sun Oct 20 18:28:39 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA07428
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 20 Oct 1991 21:29:32 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA27903; Sun, 20 Oct 91 22:25:02 -0400
Received: from texas.CS (texas.ARPA) by junior.rit.edu (4.1/5.17)
	id AA18542; Sun, 20 Oct 91 22:13:44 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110210213.AA18542@junior.rit.edu>
Subject: Re:  sampling techniques and response time
To: dstamp@watserv1.uwaterloo.ca (Dave Stampe-Psy+Eng)
Date: Sun, 20 Oct 91 22:28:39 EDT
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: <9110200511.AA00440@watserv1.uwaterloo.ca>; from "Dave Stampe-Psy+Eng" at Oct 20, 91 1:11 am
X-Mailer: ELM [version 2.3 PL8]

> First, the REAL sampling rate for data is set by the powerglove itself, and
> depends on the sum of all of its sample periods (thus its dependance on the
> finger position).  If you wait longer than the sampleing period before you 
> read the glove, you just get older data.  

That's what I'm wondering.  If the samples are made at a constant
rate (like by the original hi-res routine), then are the samples that
the glove makes itself limited by this?  I've listened to the clicks
that the glove makes while being sampled at a constant speed,
and I can't hear any difference between open and closed fingers.
I'm not sure I can tell the difference between 13 and 17 Hz,
but I suspect the glove has a constant sample rate when polled
with the original method, independent of finger position.

> Second, the interrupt-driven method I proposed (use an interrupt every 3-4 mS
> to poll the glove) actually results in the freshest possible data.  Your
> software can sit in a loop calling get_glove_data() and checking the .new
> flag in the result: the glove doesn't care, and you're just looking at
> the buffer contents until the interrupt gets new data and updates the buffer.

I agree; the quick-polling method you discovered should get
the data the fastest possible way.  I'm worrying about the
graphics routines and how much time they take.  However long
it is, it won't vary according to the polling rate of the glove.
So, there's a trade-off involved with quick-polling.
To keep the response time as fast as possible, the graphics
must be synchronized with the glove polling.  But, if the
fingers are open and there's only 58 ms between polls,
then that's all the time the graphics routines will have,
so they must be able to do their job in 58 ms.  If the
fingers are closed and there's 80 ms between polls, then
the extra 22 ms will be wasted (unless the graphics can
be written to do the minimum rendering in 58 ms and some
worthwhile extra rendering if more time (up to 22 ms) happens
to be available).  Wasting the CPU time on the long intervals
is the trade-off for having a quicker response time.
If the glove sync's itself to the rate it's polled (as it
seems to when polled with the old method) then the
graphics can be written to take a constant CPU time
(e.g., 80 ms), fully utilize the CPU, and still stay
in sync with the glove.  

However, the whole point to sync'ing the code and the glove
is to avoid an average 30 ms extra lag time, so if the
original polling method adds any extra lag time to the
quick-polling method, then it may not be worth sync'ing
(or it may be worth accepting the wasted CPU time).

Maybe I think about this too much.  It shouldn't be
really important unless the glove is being used on
eyephones, and in that case the fingers would be off anyway,
so the sample rate would be constant regardless of method.

I haven't gotten your quick-polling method working (yet)
(I haven't even gotten the original working in the right
order all the time yet), but I'm a little worried about
the "reset after 500 polls of no A0".  That sounds like
a 1 or 2 second interruption of data; how often does it happen?
When and why?

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From DAVID@asgard.clare.tased.edu.au Sun Oct 20 21:43:13 1991
Received: from diemen.utas.edu.au by karazm.math.UH.EDU with SMTP id AA07497
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.EDU>); Sun, 20 Oct 1991 21:43:13 -0500
Received: from ecc.tased.edu.au by diemen.utas.edu.au with SMTP id AA18964
  (5.65b/IDA-1.4.3 for glove-list@karazm.math.uh.EDU); Mon, 21 Oct 91 13:39:01 +1100
Received: from slick.clare.tased.edu.au by ecc.tased.edu.au (PMDF #12099) id
 <01GC0CZ7BIPS94E63S@ecc.tased.edu.au>; Mon, 21 Oct 1991 13:38 +1000
Received: from charon1.clare.tased.edu.au by slick.clare.tased.edu.au
 (4.1/SMI-4.1) id AA02089; Mon, 21 Oct 91 14:44:48 EST
Received: From ASGARD/WORKQUEUE by charon1.clare.tased.edu.au via Charon 3.4
 with IPX id 100.911021133945.336; 21 Oct 91 13:39:59 -0500
Date: 21 Oct 91 13:03:38
From: david <DAVID@asgard.clare.tased.edu.au>
Subject: subscibe me please
To: glove-list@karazm.math.uh.EDU
Message-Id: <MAILQUEUE-99.911021130337.336@asgard.clare.tased.edu.au>
X-Envelope-To: glove-list@karazm.math.uh.EDU
X-Mailer: Pegasus Mail v2.1b.


Please subscribe me to the list - I'm very interested in both it
and 6811 technology.

Thankyou

___________________________________________________________________________
David Ford                                        Voice :   +61 02 49 6887
Claremont College                                 Fax   :   +61 02 49 1984
Link Rd                             email : david@slick.clare.tased.edu.au
Claremont   TAS 7011
AUSTRALIA            The Internet : "Wherever you go...  There you are..."
                                                           Buckaroo Banzai

From jdb9608@cs.rit.edu Sun Oct 20 19:44:51 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA07612
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 20 Oct 1991 22:45:18 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA02939; Sun, 20 Oct 91 23:41:13 -0400
Received: from texas.CS (texas.ARPA) by junior.rit.edu (4.1/5.17)
	id AA18621; Sun, 20 Oct 91 23:29:56 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110210329.AA18621@junior.rit.edu>
Subject: Re: Interfaces to VR devices
To: yanek@mthvax.cs.miami.edu (Yanek Martinson)
Date: Sun, 20 Oct 91 23:44:51 EDT
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: <9110202011.AA16502@mthvax.cs.miami.edu>; from "Yanek Martinson" at Oct 20, 91 4:11 pm
X-Mailer: ELM [version 2.3 PL8]

> We could have some set of operations/functions that all interfaces
> should support, either using the hardware feature or simulating it in
> software.

It's difficult to plan the union of these fundamental functions
when constraints like speed are so important and most of these
devices are unknown.

Take the PowerGlove, for example.  I have to take back my
suggestion of a standard interface function called pre_glove().
Originally it was for the interrupt driven version of the
hi-res driver I was working on, to free up the CPU for graphics.
I thought that starting the glove poll about 70 ms before the
data was needed would be a crucial optimization, before it
occured to me that the important data should be gotten in the
first 1 ms so the poll could be started and the important
data returned in one function call.  Now, pre_glove() isn't
needed.

Since we're just starting to learn how to interface with the
glove, there may be more fundamental changes in the way we do
it.  So, we shouldn't make a standard yet.  On the other hand,
if we could nail down a standard interface before we had much
experience making programs for it, then the programs would be
compatable, which is desirable.  It's a catch-22.

The various techniques of using the PowerGlove have differences which
must be small compared to the ones of different devices, and I've never
used any of the other VR input devices, so I can't suggest what
the fundamentals should be.  Judging by the PowerGlove so far,
I do expect more differences than there at first seems to be.
Francis, I second the request for more info on what the
HIT Lab has learned on standards for the variety of VR devices.
Without practical experience with these other devices,
I think making a standard for their use would be largely
a waste of time.

I'd really like to see a nice PowerGlove standard, at least
on the fundamentals like how it'll be polled or interrupt
driven.  For example, people using fast polling with
interrupts, or especially people who get 68HC11 boards working
and send serial data only when it's ready, will probably want
a standard function that will be called by an interrupt whenever
the next data packet arrives.  That hasn't been mentioned
for the glove standard yet because nobody's implemented that
kind of interface yet.  But they will...

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From SAACC@CUNYVM.CUNY.EDU Sun Oct 20 19:56:51 1991
Received: from cunyvm.cuny.edu by karazm.math.UH.EDU with SMTP id AA07736
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 20 Oct 1991 23:03:46 -0500
Message-Id: <199110210403.AA07736@karazm.math.UH.EDU>
Received: from CUNYVM.BITNET by CUNYVM.CUNY.EDU (IBM VM SMTP R1.2.2MX) with BSMTP id 4795; Sun, 20 Oct 91 23:59:32 EDT
Received: by CUNYVM (Mailer R2.08) id 7607; Sun, 20 Oct 91 23:59:31 EDT
Date:         Sun, 20 Oct 91 23:56:51 EDT
From: Shermane Austin <SAACC@CUNYVM.CUNY.EDU>
Subject:      please change my address
To: glove-list <glove-list@karazm.math.uh.edu>

Please change my mailing address FROM saacc@cunyvm.cuny.edu
TO saasci@sci.ccny.cuny.edu. I am losing mail because my reader is
swamped.

Also is there an archive site, digest or summary for this list?
If so, please let me know where it is. Thanks.

From dstamp@watserv1.uwaterloo.ca Sun Oct 20 20:28:38 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA07850
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 20 Oct 1991 23:32:43 -0500
Received: by watserv1.uwaterloo.ca
	id <AA14274>; Mon, 21 Oct 91 00:28:38 -0400
Date: Mon, 21 Oct 91 00:28:38 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110210428.AA14274@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

 jdb9608@cs.rit.edu (John D Beutel) replies:

>That's what I'm wondering.  If the samples are made at a constant
>rate (like by the original hi-res routine), then are the samples that
>the glove makes itself limited by this?  I've listened to the clicks
>that the glove makes while being sampled at a constant speed,
>and I can't hear any difference between open and closed fingers.
>I'm not sure I can tell the difference between 13 and 17 Hz,
>but I suspect the glove has a constant sample rate when polled
>with the original method, independent of finger position.

Quite possible: I have'nt scoped the transmitter and glove read lines in
the glove myself.  I suspect that there *is* a small effect even if you read th
glove at a constant rate, in terms of how often the glove is readable.  What 
may happen is that the glove finishes reading the fingers ahead of time if
the hand is open, then starts the next cycle either when the cycle timer
expires (internal to the glove CPU) or it's asked for the data.  This explains
why you trash data if the glove is read too soon: there's nothing in the 
buffer yet to read, and the glove starts its next conversion cycle too soon.

>must be synchronized with the glove polling.  But, if the
>fingers are open and there's only 58 ms between polls,
>then that's all the time the graphics routines will have,
>so they must be able to do their job in 58 ms.  If the
>fingers are closed and there's 80 ms between polls, then
>the extra 22 ms will be wasted (unless the graphics can
>be written to do the minimum rendering in 58 ms and some
>worthwhile extra rendering if more time (up to 22 ms) happens
>to be available). 
>
>However, the whole point to sync'ing the code and the glove
>is to avoid an average 30 ms extra lag time, so if the
>original polling method adds any extra lag time to the
>quick-polling method, then it may not be worth sync'ing
>(or it may be worth accepting the wasted CPU time).
>
>--
>J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

True, but the AVERAGE delay is reduced by reading the glove as fast as 
possible.  In all likelihood it's going to be difficult to lock the
video rendering to the glove read rate anyway, and the system will be
asynchronous.  If you double-buffer the video, the renderer ends up
syncronized with the vertical sync of the video card (16.7 mS), so you have
to choose between 4 (66.6mS) and 5 (83.3mS) display periods anyway.

The REAL problem is going to be doing a decent job of rendering in the 
available time.  It takes 82mS just to access each pixel once on a 320x200x256
color IBM PC mode picture in assembly language (some cards may be faster)
although clearing it can be done in 22mS by reprogramming the hardware.  THat
means that unless wireframe graphics are used, we may have to use a lower
resolution mode such as 320x200x16 color.  Of course, partial screen updates
reduce the time, but if the system uses eyephones, pretty much the whole
scene must be redrawn when the user's head moves.

In case you're not using an IBM, video access is less of a problem.  However,
the problem now becomes the other stages of rendering: deciding what gets
shown and what is hidden.  Assuming a "world" database of 3000 polygons, at
LEAST 90% may have to be eliminated before rendering starts, so CPU power
comes into the picture.  Object-level clipping, partial screen updates, and
scan-line drawing algorithms are just some of techniques that will be 
needed.  (Scan-line algorithms attempt to access each pixel on the screen once
per drawing.)

As you can see, I'm thinking mostly about graphics problems right now.  Issues
such as how to represent polys, how many colors to use, Gorand shading and
texturized objects (and other future considerations) depend on the type
of rendering system chosen, as well as processor power and graphics hardware
of the computer.  BTW, using Gourand shading and textureing are practical, 
but both take a 30-40% "hit" in rendering performance.  I'll try to throw
up test ideas every now and then... I REALLY appreciate the feedback I'm
getting on this.

- Dave Stampe
 

From sck@watson.ibm.com Sun Oct 20 19:38:47 1991
Received: from watson.ibm.com by karazm.math.UH.EDU with SMTP id AA07870
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 20 Oct 1991 23:43:12 -0500
Received: from WATSON by watson.ibm.com (IBM VM SMTP V2R1) with BSMTP id 3794;
   Mon, 21 Oct 91 00:38:59 EDT
Received: from YKTVMZ by watson.vnet.ibm.com with "VAGENT.V1.0"
          id 1512; Mon, 21 Oct 1991 00:39:00 EDT
Received: from cyst.watson.ibm.com by yktvmz.watson.ibm.com (IBM VM SMTP V2R1)
   with TCP; Mon, 21 Oct 91 00:38:57 EDT
Received: from biko.watson.ibm.com by cyst.watson.ibm.com (AIX 1.3/900528)
  id AA39032; Mon, 21 Oct 91 00:38:51 -0400
Received: by biko.watson.ibm.com (AIX 3.1/UCB 5.61/900524)
          id AA03471; Mon, 21 Oct 91 00:38:49 -0400
Message-Id: <9110210438.AA03471@biko.watson.ibm.com>
To: Shermane Austin <SAACC@CUNYVM.CUNY.EDU>
Cc: glove-list <glove-list@karazm.math.uh.edu>, sck@biko.watson.ibm.com
Subject: Re: please change my address
In-Reply-To: (Your message of Sun, 20 Oct 91 23:56:51 EDT.)
             <199110210403.AA07736@karazm.math.UH.EDU>
Date: Mon, 21 Oct 91 00:38:47 -0500
From: Scott C. Kennedy (914) 945-1992 <sck@watson.ibm.com>

 from:  Shermane Austin <SAACC@CUNYVM.CUNY.EDU>
   Please change my mailing address FROM saacc@cunyvm.cuny.edu
   TO saasci@sci.ccny.cuny.edu. I am losing mail because my reader is
   swamped.

   Also is there an archive site, digest or summary for this list?
   If so, please let me know where it is. Thanks.
 don't know of the archive list but, I have all the mail (minus the
"subscribe-me") messages since it started. How much do you need?

Scott

From broehl@sunee.waterloo.edu Mon Oct 21 05:35:03 1991
Received: from sunee.waterloo.edu by karazm.math.UH.EDU with SMTP id AA09531
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 08:39:16 -0500
Received: by sunee.waterloo.edu
	id <AA28796>; Mon, 21 Oct 91 09:35:05 -0400
From: Bernie Roehl <broehl@sunee.waterloo.edu>
Message-Id: <9110211335.AA28796@sunee.waterloo.edu>
Subject: Revised code
To: glove-list@karazm.math.uh.edu
Date: Mon, 21 Oct 91 9:35:03 EDT
X-Mailer: ELM [version 2.3 PL11]

As promised, here's my (slight) revision to Dave Stampe's code.

There are four files included below:

glove.h    -- a header file
newglove.c -- the revised glove routines
glovgraf.c -- the (very simple) graphics demo
makefile

The latest version of these will always be available for anonymous ftp
from sunee.waterloo.edu, in the pub/glove directory.

-------------------- CUT HERE -- glove.h -------------------------------

/***** GLOVE DATA SPECIFICATIONS **************

 The glove_data array has been simplified. These are its functions:


x =   X position, 3mm per number
y =   Y position, 3mm per number
z =   distance,  14mm per number 
rot = wrist twist. 0 is up 1 is slightly CW, 5 is down, 11 is slightly CCW.
      About 30 to 40 degrees per count.

 Note: exact scaling of all above change with distance! Closer is higher res.

fingers = packed 2-bit values, 0 is open, 3 is (tight) fist:
	  Bit format: TtIiMmRr  for Thumb, Index, Middle, and Ring fingers.

keys: $FF or $80 is no key. Responds with 0 to 9 for keys "0" thru "9"
      $82 = START, $83 = SEL, $0A = "A", $0B = "B", 0 is "Center"
      Up,down,left,right are $0D,$0E,$0C,$0F respectively.



typedef struct glove_data { 
			  signed char x,y,z,rot,fingers,keys;
			  } glove_data;

/* prototypes */
 
void Hires (void);		 	/* puts glove in hires mode   */
void getglove (glove_data *);	/* get data packet from glove */
int  glove_ready(void);			/* returns 0 if not ready     */

void init_glove(int);		/* puts glove into mode */
int read_glove(glove_data *);	/* reads glove data, with de-glitching */
void reset_glove(void);     /* release the glove */

/* Modes passed to init_glove(mode) */

#define LORES 0
#define HIRES 1

/* End of glove.h */

----------------------- CUT HERE -- newglove.c --------------------------

/**********************************************************************
 
  Originally "power.c" (c) manfredo 9/91 (manfredo@opal.cs.tu-berlin.de)
  Developed on an ATARI 1040ST with TC 1.1 using a logic analyzer to get
  the correct timings.
 

/*********************************************************************
		      ported to PC compatibles by
			     Greg Alt 10/91
 
			    galt@peruvian.utah.edu
			 or galt@es.dsd.com
 

/*********************************************************************

 Substantially rewritten by Dave Stampe (c) 1991: PWRFILT.C
  No cash, no warranty, no flames.
  This stuff works great, so gimme credit.

 Goals <achieved> were:

  Higher speed, smaller code.
  Polled operation is now possible.
  Graphics test (VGA)
  Noise reduction added, gets rid of 99.5% of noise with NO DELAY!

  This runs on a 486/25 with an i/o card. 
  Someone should adapt it for the usual printer port adapter.
  It was compiled with Turbo C++ 2.0 but will probably
  work on any Turbo C directly. MSC will need library calls checked.


 dstamp@watserv1.uwaterloo.ca			17/10/91


/*********************************************************************
  Re-converted to use printer port by Dave Stampe and Bernie Roehl.
                                        October 18, 1991.

  I also split off Dave's graphics code into a separate file, and put some
  of the stuff that was shared between the two into glove.h

  I also added a little judicious whitespace here and there to enhance
  readability, and made a whole bunch of globals static.

  I also added init_glove(mode) and glove_read(glov), the latter of which
  calls getglove(glov), deglitch(glov) and dehyst(glov).

                                      --Bernie, October 18-19 1991
 ********************************************************************/

#define PC_PRINTER  1   /* use the PC Printer port for i/o */

#include <stdio.h>
#include <dos.h>

#include "glove.h"

#define XHYST 2			/* hysterisis for X, Y low noise reduction */
#define YHYST 2			/* 2 eliminates +/-3 quanta of noise */

#define XACC 8                  /* X, Y maximum accel/decel level. Should */
#define YACC 8			/* be 6-10, but too high limits gesturing */

#define XXTEND 2		/* stretches deglitching time */
#define YXTEND 1

#ifdef PC_PRINTER

#define N 1			/* delay scaled by N/D */
#define D 2
#define INPORT  0x379       	/* i/o port addresses */
#define OUTPORT 0x378

/* bits from parallel port */

#define		GDATA           0x10    /* PG data in */
#define		GLATCH          0x02    /* PG latch out */
#define		GCLOCK          0x01    /* PG clock out */
#define		GCLOLAT         0x03    /* clock + latch */

#define     SHIFTVAL        4       /* shift data right 4 bits */

/* delay values for sending and sampling data */
 
#define     D2BYTES      192      /* delay between 2 bytes   96 us */
#define     D2BITS       10       /* delay between 2 bits    22 us */
#define     D2SLOW       32760    /* 4 slow bytes in packet  14720 us */

#endif

#ifdef DSTAMPE      /* stuff from here down to #else is i/o card-specific */

#define N 1			/* delay scaled by N/D */
#define D 1     		/* these are 1,1 for 486 PC with i/o card */
#define INPORT  0x2A0       	/* i/o port addresses */
#define OUTPORT 0x2A0
 
/* bits for i/o ports */

#define		GDATA           0x01    /* PG data in */
#define		GLATCH          0x02    /* PG latch out */
#define		GCLOCK          0x01    /* PG clock out */
#define		GCLOLAT         0x03    /* clock + latch */

#define     SHIFTVAL        0       /* don't shift */

/* delay values for sending and sampling data */
 
#define     D2BYTES      150      /* delay between 2 bytes = 96 us  */
#define     D2BITS       6        /* delay between 2 bits = 3 us    */
#define     D2SLOW       8000     /* intertest delay = 2000-4000 us */

#endif

/* Delay timing: may not work in some IBM C's due to problems with LONGs */

static void fdelay(unsigned int val)
{
	register long i = N*val;
	for(; i > 0; i -= D) ;
}

void slowdelay()
	{
	fdelay(D2SLOW);
	}

/* defines for output line pair control */
 
#define     C0L0()       outportb(OUTPORT, 0)        /* clock 0 latch 0 */
#define     C0L1()       outportb(OUTPORT, GLATCH)   /* clock 0 latch 1 */
#define     C1L0()       outportb(OUTPORT, GCLOCK)   /* clock 1 latch 0 */
#define     C1L1()       outportb(OUTPORT, GCLOLAT)  /* clock 1 latch 1 */
 
static unsigned char getbyte ()  /* read a byte from glove <rolled code> */
	{
	register int i;
	register unsigned char x = 0;
    
	C1L0 ();	    		/* generate a reset (latch) pulse */
	C1L1 ();
	fdelay(D2BITS);    		/* hold for 5 us */
	C1L0 ();

	for(i = 0; i < 8; i++)
		{
		x = x<<1;
		x += ((inportb(INPORT) & GDATA) >> SHIFTVAL); 
		C0L0 ();
		C1L0 ();  /* pulse */
		}
	return(x);  /* return the byte */
	}

void getglove(buf)      /* read 6 byte data packet */
	glove_data *buf;
	{
	register unsigned char *bp = (unsigned char *) buf;

	*bp++ = getbyte ();	/* read data */
	fdelay(D2BYTES);
	*bp++ = getbyte ();
	fdelay(D2BYTES);
	*bp++ = getbyte ();
	fdelay(D2BYTES);
	*bp++ = getbyte ();
	fdelay(D2BYTES);
	*bp++ = getbyte ();
	fdelay(D2BYTES);
	*bp++ = getbyte ();
	fdelay(D2BYTES);
			/* throwaways (speeds up polling later) */
	getbyte ();	
	fdelay(D2BYTES);
	getbyte ();
	}

int glove_ready()	/* returns 1 if glove ready, 0 otherwise */
	{
	return (getbyte() == 0xA0) ? 1 : 0;
	}
 
/*  HIRES ENTRY CODES 
byte:
1- any value between $05 and $31
2- only $C1 and $81 work OK
3- no effect
4- no effect
5- no effect
6- only $FF works
7- seems to affect read rate slightly, 1 fastest


static int hires_code[7] = { 0x06, 0xC1, 0x08, 0x00, 0x02, 0xFF, 0x01 };
 
void Hires ()	/* enter HIRES mode <rolled code- speed unimportant> */
	{
	int i,j,k;
		      /* dummy read 4 bits from glove:  */
	C1L0 (); C1L1 ();    /* generate a reset (latch) pulse */
	fdelay(D2BITS);
	C1L0 ();

	fdelay(D2BITS);
	C0L0 (); C1L0 ();    /* pulse clock */
	fdelay(D2BITS);
	C0L0 (); C1L0 ();    /* pulse clock */
	fdelay(D2BITS);
	C0L0 (); C1L0 ();    /* pulse clock */
	fdelay(D2BITS);
	C0L0 (); C1L0 ();    /* pulse clock */
 
		 /* handshake for command code? */
	C1L0 ();
	fdelay(16950);  /* 7212 us delay */
	C1L1 ();
	fdelay(4750);   /* 2260 us delay */
 
	for (i = 0; i < 7; i++)   /* send 7 bytes */
		{
		k=hires_code[i];
		for (j = 0; j < 8; j++)     /* 8 bits per byte, MSB first */
			{
			if (k & 0x80) 
				{
				C1L1(); 
				C0L1();
				C1L1();
				}
			else
				{
				C1L0(); 
				C0L0();
				C1L0();
				}
			k = k<<1;
			fdelay(D2BITS);
			}
		fdelay(D2BYTES);
		}

	fdelay(1090);    /* 892 us delay (end of 7. byte) */
 
	C1L0 ();         /* drop the reset line */
	fdelay(30000);   /* some time for the glove controller to relax */
	fdelay(30000);
	}

static int ox = -1000;			/* last x,y for hysterisis */
static int oy = -1000;

static void dehyst(glove_data *g)		/* hysterisis deglitch (low noise removal) */
	{
	int x = g->x;
	int y = g->y;

	if(g->keys==0) ox = oy = 0;	/* handle recentering ("0"key or "Center") */

	if(x-ox>XHYST) ox = x-XHYST;	/* X hysterisis */
	if(ox-x>XHYST) ox = x+XHYST;

	if(y-oy>YHYST) oy = y-YHYST;	/* Y hysterisis */
	if(oy-y>YHYST) oy = y+YHYST;

	g->x = ox;			/* replace present X,Y data */
	g->y = oy;
	}

static int x1 = 0;		/* delayed 1 sample (for smoothed velocity test) */
static int y1 = 0;
static int x2 = 0;		/* delayed 2 samples */
static int y2 = 0;
static int lx = 0;		/* last good X,Y speed */
static int ly = 0;
static int lax = 0;		/* bad data "stretch" counter */
static int lay = 0;
static int lsx = 0;		/* X,Y "hold" values to replace bad data */
static int lsy = 0;
static int lcx = 0;		/* last X,Y speed for accel. calc. */
static int lcy = 0;

static void deglitch(glove_data *g)
{
	int vx, vy;

	int x = g->x;
	int y = g->y;

	if(g->keys == 0)		/* reset on recentering ("0" or "Center" key) */
		{
		x1 = x2 = y1 = y2 = 0;
		lx = ly = lax = lay = 0;
		lsx = lsy = lcx = lcy = 0;
		}

	vx = x-((x1+x2)>>1);		/* smoothed velocity */
	vy = y-((y1+y2)>>1);

	x2 = x1;			/* update last values */
	x1 = g->x;

	y2 = y1;
	y1 = g->y;

	if (abs(lcx-vx) > XACC) lax = XXTEND;	/* check for extreme acceleration */
	if (lax == 0) lx = vx;                   /* save only good velocity        */
	lcx = vx;                              /* save velocity for next accel.  */

	if (abs(lcy-vy) > YACC) lay = YXTEND;	/* same deal for Y accel. */
	if (lay == 0) ly=vy;
	lcy = vy;

	if (lax != 0)		/* hold X pos'n if glitch */
		{
		g->x = lsx;
		lax--;
		}

	if (lay != 0)             /* hold Y pos'n if glitch */
		{
		lay--;
		g->y = lsy;
		}

	lsx = g->x;		/* save position for X,Y hold */
	lsy = g->y;

	/* g->y = x;*/
	}

void init_glove(int mode)
	{
	if (mode == HIRES) Hires();
	}

int glove_read(glove_data *glov)
	{
	getglove(glov);
	deglitch(glov);		/* remove spikes and jumps */
	dehyst(glov);  		/* add hysteresis to remove LL noise */
	return 1;			/* for now */
	}

void reset_glove()
	{
	}

------------------------ CUT HERE -- glovgraf.c -------------------------

/* Graphics-mode demonstration code for PowerGlove */

/* Written by Dave Stampe, Modified by Bernie Roehl, October 1991 */

#include <dos.h>
#include <bios.h>
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include "glove.h"

int gdriver = DETECT;		/* for graphics plot and cursor */
int gmode = VGAHI;

void main()
	{
	glove_data glov;		/* glove data */
	unsigned unready;       /* number of unsuccessful tries to read glove */
	void drawp(), drawthing();

	initgraph(&gdriver, &gmode, "");
	if (graphresult() < 0) {
		printf("could not initialize graphics\n");
		exit(1);
		}
	cleardevice();
restart:
	init_glove(HIRES);

	while(!kbhit())
		{
		unready = 0; 			/* start polling glove */
		slowdelay();
		while(glove_ready()==0)              /* wait for glove to become ready */
			{
			if (unready++>500) 			 	/* reset mode if dead glove */
				goto restart;
			slowdelay();
			}
		glove_read(&glov);	 	/* read 6 byte packet */
#ifdef DEBUG
		drawp(&glov);  			/* plot x,y positions */
#endif
		drawthing(&glov);  		/* animate glove cursor */
		}

	getch();			/* exit when keyboard hit */
	reset_glove();
	textmode(LASTMODE);
	}

static void drawit(glove_data *g)		/* draw/erase box cursor */
	{
	int x = 320+2*(g->x);		/* compute X,Y center */
	int y = 240-2*(g->y);
	int z = 30+(g->z);		/* size prop. to Z */

	rectangle(x-z,y-z,x+z,y+z);
	}

static glove_data oldbuf;	/* used to store old state for drawing */

static int drawn = 0;		/* set if cursor to be erased */

void drawthing(glove_data *g)	/* draw square cursor */
	{
	if(g->keys==2) return;		/* hold down "2" to stop drawing */

	if(drawn)			/* erase old box */
		{
		setcolor(0);
		drawit(&oldbuf);
		}

	setcolor(15);			/* draw new box */
	drawit(g);
	drawn = 1;

	oldbuf.x = g->x;		/* save pos'n for next erase */
	oldbuf.y = g->y;
	oldbuf.z = g->z;
	}

static int xx = 0;           		/* plot position */

void drawp(glove_data *g)	/* plot X,Y data to test smoothing */
	{
	if(g->keys==4) 	/* restart at left edge if "4" pressed */
		{
		cleardevice();
		xx=0;
		}

	setcolor(0);
	line(xx,0,xx,479);
	line(xx+1,0,xx+1,479);
	setcolor(15);
	line(xx,240-2*g->x,xx+1,240-2*g->x);
	setcolor(12);
	line(xx+1,240-2*g->y,xx+2,240-2*g->y);
	xx++;
	xx++;
	if(xx > 639) xx = 0;
	}

------------------ CUT HERE -- makefile -----------------------------------

glovgraf.exe: glovgraf.obj newglove.obj
	tcc glovgraf.obj newglove.obj graphics.lib

glovgraf.obj: glovgraf.c glove.h
	tcc -c glovgraf

newglove.obj: newglove.c glove.h
	tcc -c newglove

From awilliam@qucis.queensu.ca Mon Oct 21 06:02:03 1991
Received: from QUCDN.QueensU.CA by karazm.math.UH.EDU with SMTP id AA09610
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 09:05:49 -0500
Received: from qucis.queensu.ca by QUCDN.QueensU.CA (IBM VM SMTP V2R1) with TCP;
   Mon, 21 Oct 91 10:02:20 EDT
Received: from qusuna.qucis.queensu.ca by qucis.queensu.ca (4.1/SMI-4.1-qs1.1)
	id AA25180; Mon, 21 Oct 91 10:02:05 EDT
From: awilliam@qucis.queensu.ca (Andrew Williams)
Received: by qusuna.qucis.queensu.ca (4.1/SMI-4.0-qc1.1)
	id AA20349; Mon, 21 Oct 91 10:02:03 EDT
Date: Mon, 21 Oct 91 10:02:03 EDT
Message-Id: <9110211402.AA20349@qusuna.qucis.queensu.ca>
To: glove-list@karazm.math.uh.edu
Subject: Ok.. what am I doing wrong??


  I have the glove.. I have the software.. whereas everyone else seems to 
complain about not gatting great resolution.. I can't get the darn thing 
to work at all! A few questions:
  Does the glove have to be in a particular mode before the HiRes Init 
  sequence is transmitted??
  Is there any sort of indicators as to which way to adjust the timing??
  Anyone thought of making a dart game based on this thing??

Any help appreciated..

Andrew Williams
ps. I'm not really as incompetant as this makes me appear. (at least I don't 
    think I am!)

From DTANNER%SJSUVM1.BITNET@CORNELLC.cit.cornell.edu Mon Oct 21 00:04:31 1991
Received: from CORNELLC.CIT.CORNELL.EDU by karazm.math.UH.EDU with SMTP id AA09707
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 09:08:57 -0500
Message-Id: <199110211408.AA09707@karazm.math.UH.EDU>
Received: from SJSUVM1.BITNET by CORNELLC.cit.cornell.edu (IBM VM SMTP V2R1)
   with BSMTP id 1724; Mon, 21 Oct 91 10:06:09 EDT
Received: from SJSUVM1 (DTANNER) by SJSUVM1.BITNET (Mailer R2.07) with BSMTP id
 5659; Mon, 21 Oct 91 07:04:40 PDT
Date:         Mon, 21 Oct 91 07:04:31 PDT
From: Don Tanner <DTANNER@SJSUVM1.bitnet>
Subject:      unsub
To: glove-list@karazm.math.uh.edu


From leh@manatee.cis.ufl.edu Mon Oct 21 07:10:23 1991
Received: from manatee.cis.ufl.edu by karazm.math.UH.EDU with SMTP id AA09894
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 10:14:32 -0500
Received:  from localhost  by manatee.cis.ufl.edu (5.61ufl/4.12)
	id AA08250; Mon, 21 Oct 91 11:10:25 -0400
Message-Id: <9110211510.AA08250@manatee.cis.ufl.edu>
To: glove-list@karazm.math.uh.edu
Subject: Amiga JOYMOUSE port :(
Date: Mon, 21 Oct 91 11:10:23 EDT
From: leh@manatee.cis.ufl.edu


The problem with the large capacitors on two of the three output
pins on each JOY/MOUSE port has proven insurmountable.  Use the
parallel port instead (as Alan Bland <mab@druwy.att.com> has 
already done.)

Les

From page%popeye.nosc.mil@nosc.mil Mon Oct 21 01:24:21 1991
Received: from trout.nosc.mil by karazm.math.UH.EDU with SMTP id AA10107
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 10:31:58 -0500
Received: from popeye.nosc.mil by trout.nosc.mil (5.59/1.27)
	id AA07138; Mon, 21 Oct 91 08:27:53 PDT
Received: by popeye.nosc.mil.four.four.four (4.0/SMI-4.0)
	id AA01637; Mon, 21 Oct 91 08:24:21 PDT
Date: Mon, 21 Oct 91 08:24:21 PDT
From: page@popeye.nosc.mil (Ward C. Page)
Message-Id: <9110211524.AA01637@popeye.nosc.mil.four.four.four>
To: glove-list@karazm.math.uh.edu
Subject: Please unsubscribe me


Please unsubscribe me from the glove list.

Thanks.

Ward Page
Naval Ocean Systems Center
San Diego
page@cod.nosc.mil

From texsun!sunbird!tellab5!sunJe!menelli@Moxie.Hou.TX.US Mon Oct 21 04:59:22 1991
Received: from Menudo.UH.EDU by karazm.math.UH.EDU with SMTP id AA11476
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 13:18:28 -0500
Received: from Moxie.Hou.TX.US by Menudo.UH.EDU with UUCP id AA14925
  (5.65c+/IDA-1.4.4 for karazm.math.uh.edu!glove-list); Mon, 21 Oct 1991 13:14:23 -0500
Received: by moxie.hou.tx.us (Smail3.1.19)
	id <m0kZ3cj-0002xDC@moxie.hou.tx.us>; Mon, 21 Oct 91 12:41 CDT
Received: from sunbird.Central.Sun.COM by texsun.Central.Sun.COM (4.1/SMI-4.1)
	id AA13973; Mon, 21 Oct 91 12:24:31 CDT
Received: from tellab5.UUCP by sunbird.Central.Sun.COM (4.1/SMI-4.1-900117)
	id AA10756; Mon, 21 Oct 91 12:24:29 CDT
Received: from sunJe.TELLABS.COM 
	by tellab5.tellabs.com (4.1/smail2.5/10-21-91)
	id AA11234; Mon, 21 Oct 91 11:14:59 CDT
Received: by sunJe.TELLABS.COM (4.0/4.7)
	id AA00375; Mon, 21 Oct 91 09:59:22 CDT
Date: Mon, 21 Oct 91 09:59:22 CDT
From: texsun!sunJe!menelli@Moxie.Hou.TX.US (Ron Menelli)
Message-Id: <9110211459.AA00375@sunJe.TELLABS.COM>
To: glove-list@karazm.math.uh.edu
Subject: 68HC11 Hi-Res in the works

With the large amount of code being produced for various platforms, it seems
that the microcontroller based approach is no longer being considered... Even
so, I have come up with a port of the various IBM PG driver sources (mostly
Dave Stampe's code) for the MC68HC11. It works well, but I have not yet added
the deglitching/hysterisis code, nor have I done any major fine tuning of the
code. It does, however, drive the glove correctly and output the data packet
over the serial port at 9600 baud (can be changed to a higher baud rate
depending on clock frequency and internal configuration). Taking my cue from
the AGE box, there is both a continuous mode that outputs the 6 bytes preceded
by an A0 (for lack of any better indicator), and a request mode that produces
the most recent set of 6 bytes on demand.
As I've noted previously, the code has not had its performance analyzed to
any great degree, but I think with some work this could help us out by freeing
up more precious CPU time. A minimum setup wouldn't even really cost that much-
I just bought an MC68HC811E2P, a version of the HC11 with 2k of EEPROM (more
than enough room for the code), for $16.61. The only other major component
needed is an RS-232 level shifter for a couple of dollars.
So, is anyone interested in this? If so, I'll post the code for everyone to
play with - BTW, this does run on the Motorola 68HC11 evaluation board, which
some people on this list have indicated they own.

Please send me any comments and suggestions,
Ron Menelli
menelli@tellabs.com

From dirish@math.utah.edu Mon Oct 21 06:48:40 1991
Received: from math.utah.edu (csc-sun.math.utah.edu) by karazm.math.UH.EDU with SMTP id AA11683
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 13:52:49 -0500
Received: from alfred.math.utah.edu by math.utah.edu (4.1/SMI-4.1-utah-csc-server)
	id AA15934; Mon, 21 Oct 91 12:48:41 MDT
Received: by alfred.math.utah.edu (5.57/Ultrix3.0-C)
	id AA24967; Mon, 21 Oct 91 12:48:40 -0600
Date: Mon, 21 Oct 91 12:48:40 -0600
From: dirish@math.utah.edu
Message-Id: <9110211848.AA24967@alfred.math.utah.edu>
To: glove-list@karazm.math.uh.edu
Subject: RE: 68HC11 Hi-Res in the works

I tried to respond directly to Ron Menelli, but the mail message
bounced, so I will let you all in on my thoughts about
micro-controllers.

I am interested in the microcontroller based approach, but not in
assembly code at the moment.  Also, I was planning on using a 6502
computer that I already have handy.  However, I could be convinced to
switch fairly easily.

Mainly I would request that people working on micro-controllers keep
us up to date on what they are doing.  In the near future, I am
probably going to be changing hardware platforms and may need a serial
interface.  In the mean time, I would like to know what the response
over the serial line is like.  I was thinking of connecting to my
micro-controller via the printer port for speed's sake.

Dudley Irish
________________________________________________________________________
Dudley Irish / dirish@math.utah.edu / Manager Computer Operations
Center for Scientific Computing, Dept of Mathematics, University of Utah

The views expressed in this message do not reflect the views of the
Dept of Mathematics, the University of Utah, or the State of Utah.

From totty@flute.cs.uiuc.edu Mon Oct 21 09:41:39 1991
Received: from a.cs.uiuc.edu by karazm.math.UH.EDU with SMTP id AA12172
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 14:45:48 -0500
Received: from flute.cs.uiuc.edu by a.cs.uiuc.edu with SMTP id AA17089
  (5.64+/IDA-1.3.4 for glove-list@karazm.math.uh.edu); Mon, 21 Oct 91 14:41:41 -0500
Received: by flute.cs.uiuc.edu (4.1/9.7)
	id AA01248; Mon, 21 Oct 91 14:41:39 CDT
Date: Mon, 21 Oct 91 14:41:39 CDT
From: totty@flute.cs.uiuc.edu (Brian Totty)
Message-Id: <9110211941.AA01248@flute.cs.uiuc.edu>
To: glove-list@karazm.math.uh.edu
Subject: I Very Much Would Like A Hardware Solution!


	There has been lots of excitement about the new Hires code for the
	ST/PC that has been posted.  People asked if a hardware solution is
	still desirable...

	YES!

	I personally would much prefer a hardware solution.  I want to
	hook the glove up via a serial port to a variety of workstations.
	I don't want to have to try to write precise timing UN*X device
	drivers for the glove.  The ideal hardware solution would have a
	low part count, easily accesible parts, be reliable and relatively
	low cost.  Greg Newby has put some time in thinking about glove
	"boxes".  Last I heard he was dealing with some legal stuff.  We
	were talking about fabbing some PC boards & possibly releasing a kit.
	I am still very much interested in this approach.

	By the way, how is the newsgroup idea progressing.  There has been
	quite a barrage of mail recently, so I'd love to see this thing turned
	into a newsgroup.

							--- Bri

   /                       Brian Totty             o o
  /__  __  o     Department of Computer Science     o  
 /  / /   /          1304 W. Springfield Ave       \_/  "We have corn in
/__/ /   /               Urbana, IL 61801                Massachusetts too!"
                        totty@cs.uiuc.edu

From broehl@sunee.waterloo.edu Mon Oct 21 13:30:44 1991
Received: from sunee.waterloo.edu by karazm.math.UH.EDU with SMTP id AA13247
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 16:35:17 -0500
Received: by sunee.waterloo.edu
	id <AA08954>; Mon, 21 Oct 91 17:30:45 -0400
From: Bernie Roehl <broehl@sunee.waterloo.edu>
Message-Id: <9110212130.AA08954@sunee.waterloo.edu>
Subject: Automatic calibration of delay loops
To: glove-list@karazm.math.uh.edu
Date: Mon, 21 Oct 91 17:30:44 EDT
X-Mailer: ELM [version 2.3 PL11]

Below is a modified version of the source, which does automatic calibration
of the delay loops.  It should work without change on any machine regardless
of clock speed.  (No more N and D -- yay!)

The D2BITS and D2BYTES values are now in microseconds.

I've also adopted the suggestion that was made about including a function
as a second parameter to init_glove(), though I currently don't do anything
with it.

My next step will be to look at reading the glove under timer interrupts.

(Everything below is on sunee.waterloo.edu in pub/glove)

--------- glove.h -------------

/***** GLOVE DATA SPECIFICATIONS **************

 The glove_data array has been simplified. These are its functions:

x =   X position, 3mm per number
y =   Y position, 3mm per number
z =   distance,  14mm per number 
rot = wrist twist. 0 is up 1 is slightly CW, 5 is down, 11 is slightly CCW.
      About 30 to 40 degrees per count.

 Note: exact scaling of all above change with distance! Closer is higher res.

fingers = packed 2-bit values, 0 is open, 3 is (tight) fist:
	  Bit format: TtIiMmRr  for Thumb, Index, Middle, and Ring fingers.

keys: $FF or $80 is no key. Responds with 0 to 9 for keys "0" thru "9"
      $82 = START, $83 = SEL, $0A = "A", $0B = "B", 0 is "Center"
      Up,down,left,right are $0D,$0E,$0C,$0F respectively.



typedef struct glove_data { 
			  signed char x,y,z,rot,fingers,keys;
			  } glove_data;

/* prototypes */
 
void Hires (void);		 	/* puts glove in hires mode   */
void getglove (glove_data *);	/* get data packet from glove */
int  glove_ready(void);			/* returns 0 if not ready     */

int init_glove(int mode, void (*function)());  /* returns actual mode used */
int read_glove(glove_data *glov);	/* reads glove data, with de-glitching */
void reset_glove(void);     /* release the glove */
void udelay(unsigned microseconds);  /* delay for a number of microseconds */

/* Modes passed to init_glove() */

#define LORES 0
#define HIRES 1

/* End of glove.h */

----------- newglove.c -------------

/**********************************************************************
 
  Originally "power.c" (c) manfredo 9/91 (manfredo@opal.cs.tu-berlin.de)
  Developed on an ATARI 1040ST with TC 1.1 using a logic analyzer to get
  the correct timings.
 

/*********************************************************************
		      ported to PC compatibles by
			     Greg Alt 10/91
 
			    galt@peruvian.utah.edu
			 or galt@es.dsd.com
 

/*********************************************************************

 Substantially rewritten by Dave Stampe (c) 1991: PWRFILT.C
  No cash, no warranty, no flames.
  This stuff works great, so gimme credit.

 Goals <achieved> were:

  Higher speed, smaller code.
  Polled operation is now possible.
  Graphics test (VGA)
  Noise reduction added, gets rid of 99.5% of noise with NO DELAY!

  This runs on a 486/25 with an i/o card. 
  Someone should adapt it for the usual printer port adapter.
  It was compiled with Turbo C++ 2.0 but will probably
  work on any Turbo C directly. MSC will need library calls checked.


 dstamp@watserv1.uwaterloo.ca			17/10/91


/*********************************************************************
  Re-converted to use printer port by Dave Stampe and Bernie Roehl.
                                        October 18, 1991.

  I also split off Dave's graphics code into a separate file, and put some
  of the stuff that was shared between the two into glove.h

  I also added a little judicious whitespace here and there to enhance
  readability, and made a whole bunch of globals static.

  I also added init_glove(mode) and glove_read(glov), the latter of which
  calls getglove(glov), deglitch(glov) and dehyst(glov).

                                      --Bernie, October 18-19 1991
 ********************************************************************/

/* More changes:

   init_glove() now auto-calibrates.  A new function (available outside
   of this module) called "udelay" delays for a certain number of micro-
   seconds.  Calls to fdelay have been replaced by udelay(),
   and the D2BITS and D2BYTES values are now in microseconds.

   init_glove() now takes an additional parameter, a pointer to a
   function (currently unused).

                                      --Bernie Roehl, October 21 1991
 */

#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <bios.h>

#include "glove.h"

#define PC_PRINTER  1   /* use the PC Printer port for i/o */

#define D2BITS		3			/* microseconds */
#define D2BYTES		96			/* microseconds */

#ifdef PC_PRINTER
#define INPORT  0x379       	/* i/o port addresses */
#define OUTPORT 0x378
/* bits from parallel port */
#define		GDATA           0x10    /* PG data in */
#define		GLATCH          0x02    /* PG latch out */
#define		GCLOCK          0x01    /* PG clock out */
#define		GCLOLAT         0x03    /* clock + latch */
#define     SHIFTVAL        4       /* shift data right 4 bits */
#endif

#ifdef DSTAMPE         /* stuff from here down to #else is i/o card-specific */
#define INPORT  0x2A0       	/* i/o port addresses */
#define OUTPORT 0x2A0
/* bits for i/o ports */
#define		GDATA           0x01    /* PG data in */
#define		GLATCH          0x02    /* PG latch out */
#define		GCLOCK          0x01    /* PG clock out */
#define		GCLOLAT         0x03    /* clock + latch */
#define     SHIFTVAL        0       /* don't shift */
#endif

static void fdelay(unsigned long val)
	{
	while (val--);
	}

static unsigned long microfactor = 0L;  /* usec/iteration times 91 */

void udelay(unsigned microseconds)
	{
	/* we do the divide here for precision */
	fdelay((microseconds * microfactor) / 91);
	}

void slowdelay()
	{
	udelay(4000);
	}

/* defines for output line pair control */
 
#define     C0L0()       outportb(OUTPORT, 0)        /* clock 0 latch 0 */
#define     C0L1()       outportb(OUTPORT, GLATCH)   /* clock 0 latch 1 */
#define     C1L0()       outportb(OUTPORT, GCLOCK)   /* clock 1 latch 0 */
#define     C1L1()       outportb(OUTPORT, GCLOLAT)  /* clock 1 latch 1 */
 
static unsigned char getbyte ()  /* read a byte from glove <rolled code> */
	{
	register int i;
	register unsigned char x = 0;
    
	C1L0 ();	    		/* generate a reset (latch) pulse */
	C1L1 ();
	udelay(D2BITS);    		/* hold for 3 us */
	C1L0 ();

	for(i = 0; i < 8; i++)
		{
		x = (x << 1) + ((inportb(INPORT) & GDATA) >> SHIFTVAL); 
		C0L0 ();
		C1L0 ();  /* pulse */
		}
	return(x);  /* return the byte */
	}

void getglove(buf)      /* read 6 byte data packet */
	glove_data *buf;
	{
	register unsigned char *bp = (unsigned char *) buf;
	register int i;
	for (i = 0; i < 6; ++i) {
		*bp++ = getbyte ();	/* read data */
		udelay(D2BYTES);
		}
	/* throwaways (speeds up polling later) */
	getbyte ();	
	udelay(D2BYTES);
	getbyte ();
	}

int glove_ready()	/* returns 1 if glove ready, 0 otherwise */
	{
	return (getbyte() == 0xA0) ? 1 : 0;
	}
 
/*  HIRES ENTRY CODES 
byte:
1- any value between $05 and $31
2- only $C1 and $81 work OK
3- no effect
4- no effect
5- no effect
6- only $FF works
7- seems to affect read rate slightly, 1 fastest


static int hires_code[7] = { 0x06, 0xC1, 0x08, 0x00, 0x02, 0xFF, 0x01 };
 
void Hires ()	/* enter HIRES mode <rolled code- speed unimportant> */
	{
	int i,j,k;
		      /* dummy read 4 bits from glove:  */
	C1L0 (); C1L1 ();    /* generate a reset (latch) pulse */
	udelay(D2BITS);
	C1L0 ();

	udelay(D2BITS);
	C0L0 (); C1L0 ();    /* pulse clock */
	udelay(D2BITS);
	C0L0 (); C1L0 ();    /* pulse clock */
	udelay(D2BITS);
	C0L0 (); C1L0 ();    /* pulse clock */
	udelay(D2BITS);
	C0L0 (); C1L0 ();    /* pulse clock */
 
		 /* handshake for command code? */
	C1L0 ();
	udelay(7212);   /* 7212 us delay */
	C1L1 ();
	udelay(2260);   /* 2260 us delay */
 
	for (i = 0; i < 7; i++)   /* send 7 bytes */
		{
		k=hires_code[i];
		for (j = 0; j < 8; j++)     /* 8 bits per byte, MSB first */
			{
			if (k & 0x80) 
				{
				C1L1(); 
				C0L1();
				C1L1();
				}
			else
				{
				C1L0(); 
				C0L0();
				C1L0();
				}
			k = k<<1;
			udelay(D2BITS);
			}
		udelay(D2BYTES);
		}

	udelay(892);    /* 892 us delay (end of 7. byte) */
 
	C1L0 ();         /* drop the reset line */
	udelay(100000);   /* some time for the glove controller to relax */
	udelay(100000);
	}

#define XHYST 2			/* hysterisis for X, Y low noise reduction */
#define YHYST 2			/* 2 eliminates +/-3 quanta of noise */

#define XACC 8                  /* X, Y maximum accel/decel level. Should */
#define YACC 8			/* be 6-10, but too high limits gesturing */

#define XXTEND 2		/* stretches deglitching time */
#define YXTEND 1

static int ox = -1000;			/* last x,y for hysterisis */
static int oy = -1000;

static void dehyst(glove_data *g)		/* hysterisis deglitch (low noise removal) */
	{
	int x = g->x;
	int y = g->y;

	if(g->keys==0) ox = oy = 0;	/* handle recentering ("0"key or "Center") */

	if(x-ox>XHYST) ox = x-XHYST;	/* X hysterisis */
	if(ox-x>XHYST) ox = x+XHYST;

	if(y-oy>YHYST) oy = y-YHYST;	/* Y hysterisis */
	if(oy-y>YHYST) oy = y+YHYST;

	g->x = ox;			/* replace present X,Y data */
	g->y = oy;
	}

static int x1 = 0;		/* delayed 1 sample (for smoothed velocity test) */
static int y1 = 0;
static int x2 = 0;		/* delayed 2 samples */
static int y2 = 0;
static int lx = 0;		/* last good X,Y speed */
static int ly = 0;
static int lax = 0;		/* bad data "stretch" counter */
static int lay = 0;
static int lsx = 0;		/* X,Y "hold" values to replace bad data */
static int lsy = 0;
static int lcx = 0;		/* last X,Y speed for accel. calc. */
static int lcy = 0;

static void deglitch(glove_data *g)
{
	int vx, vy;

	int x = g->x;
	int y = g->y;

	if(g->keys == 0)		/* reset on recentering ("0" or "Center" key) */
		{
		x1 = x2 = y1 = y2 = 0;
		lx = ly = lax = lay = 0;
		lsx = lsy = lcx = lcy = 0;
		}

	vx = x-((x1+x2)>>1);		/* smoothed velocity */
	vy = y-((y1+y2)>>1);

	x2 = x1;			/* update last values */
	x1 = g->x;

	y2 = y1;
	y1 = g->y;

	if (abs(lcx-vx) > XACC) lax = XXTEND;	/* check for extreme acceleration */
	if (lax == 0) lx = vx;                   /* save only good velocity        */
	lcx = vx;                              /* save velocity for next accel.  */

	if (abs(lcy-vy) > YACC) lay = YXTEND;	/* same deal for Y accel. */
	if (lay == 0) ly=vy;
	lcy = vy;

	if (lax != 0)		/* hold X pos'n if glitch */
		{
		g->x = lsx;
		lax--;
		}

	if (lay != 0)             /* hold Y pos'n if glitch */
		{
		lay--;
		g->y = lsy;
		}

	lsx = g->x;		/* save position for X,Y hold */
	lsy = g->y;

	/* g->y = x;*/
	}

static void (*upcall)() = NULL;

int init_glove(int mode, void (*function)())
	{
	unsigned long n;
	/* calibrate timing loop; note that instead of dividing by 18.2,
	   we multiply by 5 now and divide by 91 later */
	n = biostime(0, 0L);
	fdelay(1000000);  /* divide by a milllion to get microfactor */
	microfactor = (biostime(0, 0L) - n) * 5;
	if (mode == HIRES) Hires();
	upcall = function;
	return HIRES;     /* returns mode actually set */
	}

int glove_read(glove_data *glov)
	{
	getglove(glov);
	deglitch(glov);		/* remove spikes and jumps */
	dehyst(glov);  		/* add hysteresis to remove LL noise */
	return 1;			/* for now */
	}

void reset_glove()
	{
	upcall = NULL;
	}

-------- glovgraf.c ----------------

/* Graphics-mode demonstration code for PowerGlove */

/* Written by Dave Stampe, Modified by Bernie Roehl, October 1991 */

#include <dos.h>
#include <bios.h>
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include "glove.h"

int gdriver = DETECT;		/* for graphics plot and cursor */
int gmode = VGAHI;

void main()
	{
	glove_data glov;		/* glove data */
	unsigned unready;       /* number of unsuccessful tries to read glove */
	void drawp(), drawthing();

	initgraph(&gdriver, &gmode, "");
	if (graphresult() < 0) {
		printf("could not initialize graphics\n");
		exit(1);
		}
	cleardevice();
restart:
	init_glove(HIRES, NULL);

	while(!kbhit())
		{
		unready = 0; 			/* start polling glove */
		slowdelay();
		while(glove_ready()==0)              /* wait for glove to become ready */
			{
			if (unready++>500) 			 	/* reset mode if dead glove */
				goto restart;
			slowdelay();
			}
		glove_read(&glov);	 	/* read 6 byte packet */
#ifdef DEBUG
		drawp(&glov);  			/* plot x,y positions */
#endif
		drawthing(&glov);  		/* animate glove cursor */
		}

	getch();			/* exit when keyboard hit */
	reset_glove();
	textmode(LASTMODE);
	}

static void drawit(glove_data *g)		/* draw/erase box cursor */
	{
	int x = 320+2*(g->x);		/* compute X,Y center */
	int y = 240-2*(g->y);
	int z = 30+(g->z);		/* size prop. to Z */

	rectangle(x-z,y-z,x+z,y+z);
	}

static glove_data oldbuf;	/* used to store old state for drawing */

static int drawn = 0;		/* set if cursor to be erased */

void drawthing(glove_data *g)	/* draw square cursor */
	{
	if(g->keys==2) return;		/* hold down "2" to stop drawing */

	if(drawn)			/* erase old box */
		{
		setcolor(0);
		drawit(&oldbuf);
		}

	setcolor(15);			/* draw new box */
	drawit(g);
	drawn = 1;

	oldbuf.x = g->x;		/* save pos'n for next erase */
	oldbuf.y = g->y;
	oldbuf.z = g->z;
	}

static int xx = 0;           		/* plot position */

void drawp(glove_data *g)	/* plot X,Y data to test smoothing */
	{
	if(g->keys==4) 	/* restart at left edge if "4" pressed */
		{
		cleardevice();
		xx=0;
		}

	setcolor(0);
	line(xx,0,xx,479);
	line(xx+1,0,xx+1,479);
	setcolor(15);
	line(xx,240-2*g->x,xx+1,240-2*g->x);
	setcolor(12);
	line(xx+1,240-2*g->y,xx+2,240-2*g->y);
	xx++;
	xx++;
	if(xx > 639) xx = 0;
	}

------------- test.c ----------------

#include <stdio.h>
#include "glove.h"

void main()
	{
	glove_data glov;		/* glove data */
	unsigned unready;       /* number of unsuccessful tries to read glove */
restart:
	init_glove(HIRES, NULL);
	while(!kbhit())
		{
		unready = 0; 			/* start polling glove */
		slowdelay();
		while(glove_ready()==0)              /* wait for glove to become ready */
			{
			if (unready++>500) 			 	/* reset mode if dead glove */
				goto restart;
			slowdelay();
			}
		glove_read(&glov);	 	/* read 6 byte packet */
		printf("%3.3d %3.3d %3.3d %2.2d %02.2X %02.2X       \r",
			glov.x, glov.y, glov.z, 255&glov.rot,
			255&glov.fingers, 255&glov.keys);
		}
	reset_glove();
	}

--------- makefile ----------

test.exe: test.obj newglove.obj
	tcc test.obj newglove.obj

glovgraf.exe: glovgraf.obj newglove.obj
	tcc glovgraf.obj newglove.obj graphics.lib

glovgraf.obj: glovgraf.c glove.h
	tcc -c glovgraf

newglove.obj: newglove.c glove.h
	tcc -c newglove

test.obj: test.c glove.h
	tcc -c test

From dstamp@watserv1.uwaterloo.ca Mon Oct 21 14:08:26 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA13428
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 17:12:57 -0500
Received: by watserv1.uwaterloo.ca
	id <AA13846>; Mon, 21 Oct 91 18:08:26 -0400
Date: Mon, 21 Oct 91 18:08:26 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110212208.AA13846@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

I am posting this as a word of encouragement to garage VR folk, and as a
benchmark to judge prospective equipment against.  I apologize in advance if
I seem to be disparaging about equipment or performance of software: I am
stating numbers as I have them (mostly from the source below, and some from
assorted research, technical documents too long misplaced to give references
to, and personal experience).  Feel free to correct me, but be sure you are
looking at the same aspects I am (i.e average case vs. worst/best case).

The following is from "Reality Built for Two: A Virtual Reality Tool" in
Computer Graphics journal by C. Blanchard et al from VPL.  It is a 2 page
article, and the 2 most relevant paragraphs are quoted here in full, with
some of the other equipment mentioned summarized later on.



I've had the opportunity to work with the LEEP optical systems.  They give
a WIDE (90 degrees is possible, 100 degrees is *quoted*) field of view,
but distort the image.	The distortion is fixed by using an undistorting
lens and camera mounted on the IRIS monitor.  Now, maybe VPL has gotten
around this somehow, but they don't say...

The pixels in a LEEP display look about as big as the nail on your pinky
at arm's length. (1/2 to 1/3 of a visual degree)  The resolution (actually
USED area) of the LCD in the Eyephone is 280 by 240 pixels at most.  The
"proprietary diffusion" seems to be a rather simple diffuser, needed to
smear the RGB bands in the LCD panel out, and to prevent contrast band
effects having to do with the limited view angle of the LCD panels.  The
stereo conflict stuff just means that the diffused picture ALWAYS looks
out-of-focus.  Those dots will probably cause the problem all over again.

As for the headband, when I worked with these displays I discarded
it because it couldn't hold the displays steady enough, and replaced
it with a frame and a pilot's helmet.  Worked great, but was a little
hard to get on and off.  If I'm working with a $18,000 ($24,000 color)
set of displays, I don't want them falling off my head!



Hmm, that poly count is hard to interpret.  If we translate it into
2000 quadrilaterals, we probably are not underestimating things.  The
"simultaneously viewable" phrase either means the *possible* viewable
set of objects from any position (i.e the "chambers" mentioned later)
or the number of polys not clipped by viewpoint and sent to the Irises
to be rendered.  I suspect it is the former, so the number of polys
actually sent to the Iris for rendering might be 1000 or so.

The idea of "chambers" is a primitive way of pruning the rendering
input.	I suspect that the 1000-poly count is *way* higher than what
the renderer in a well-designed 3D video game would have to handle,
given the same world to draw.  (No solid data on this, but Jez San
claims to handle a 20,000 poly world on a 386 PC at a goodly frame
rate...).  Also, by reducing the viewport size from 80 by 100 degrees
down to a garage-VR size viewport (suitable for simple eyephone optics)
of 40 by 50 degrees, the area (and number of polys) is reduced by a
factor of 4.

So, 300 polys MIGHT be a good upper-limit for the renderer.  That still
means we need good "front-end" software to tell the renderer what to draw.
I believe this number is quite achievable on a home system.


A SUMMARY OF OTHER EQUIPMENT MENTIONED:

The DataGlove, of course.  Its problems and frailty has been summarized
by others.

The world model is updated by a Mac II (sorry, no info on what model)
which talks to the Irises by Ethernet.

The glove position (palm and tip of index finger) and the Eyephone unit
angle and position are returned by a Polhemus Isotrak magnetic tracking
system.  As I recall, the sampling rate on an Isotrak is 80/(# inputs)
so that's about 26 samples/sec, assuming 1 isotrak per user.
The Pohemus sensors suffer from some of the same noise and glitch problems
as the Powerglove's sensors.  They don't have to be pointed at the receiver
array, but they suffer from distortion from any nearby metal object
(screws, desks, you name it).


CONCLUSION

In relation to these numbers, achievable results from the garage VR
project don't look terribly bad.  I think the point is that any
system has its drawbacks and tradeoffs, and current high-end VR
systems have their share.  The difference is that they can throw
money at a problem and buy off-the-shelf equipment to save time,
whereas the "garage" VR folk have to make do.  In the end, I think
we will compare well.

DISCLAIMER:

Consider this a first draft, shown to collegues for criticism and evaluation.
There is NOTHING implied about the companies mentioned here: just an
evaluation from my POV.  Discussion invited.

-Dave Stampe

From cit@comp.vuw.ac.nz Mon Oct 21 18:05:20 1991
Received: from mailhost.comp.vuw.ac.nz (kaukau.comp.vuw.ac.nz) by karazm.math.UH.EDU with SMTP id AA15148
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 18:05:20 -0500
Received: from cit by mailhost.comp.vuw.ac.nz with 5.65cVUW/4.59
	id <AA10366@mailhost.comp.vuw.ac.nz>; Mon, 21 Oct 1991 19:01:09 -0400
Received: from cit1.cit.ac.nz by cit2.cit.ac.nz
	id aa00944; Mon, 21 Oct 91 17:38:40 NZT
From: frankv@cit.ac.nz (Tutor)
X-Mailer: SCO System V Mail (version 3.2)
To: glove-list@karazm.math.uh.edu
Date: Mon, 21 Oct 91 17:41:29 NZT
Message-Id:  <9110211741.aa05529@cit1.cit.ac.nz>

Commenting on Dave Stampe's suggestions for a standard PowerGlove
interface:

> I would like to define the minimum functionality as:

> - initialize with one call, which enters hi-res mode, sets up a timer
    interrupt every 4 mS, and initializes the code.
> - an interrupt handler which:
>        - polls the glove for $A0 start code, exits if not ready
>        - if the glove was not ready after 500 tries, resets the glove mode
>        - reads the 6-byte data packet, and 2 more throwaway bytes
>        - deglitches and denoises the X and Y data (deglitches Z???)
>        - stores the data int the glove_int_data buffer
>        - sets the glove_int_data.new flag
> - a glove_read routine which:
>        - disables interrupts
>        - copies the glove_int_data (including .new flag) to buffer
>        - clears the glove_int_data.new flag
>        - enables interrupts
> - a reset routine (onexit(?)) which resets the timer interrupt

> It is probably worthwhile to have a LORES and HIRES mode set on
> initialization, which means that only the .keys data field is valid.
> The timer interupt would happen less often, to reduce CPU interrupt
> load.  Total CPU load on a 386 looks to be about 3%.

> Proposed names for routines:

> int init_glove(int mode)
> #define LORES 0
> #define HIRES 1
> void reset_glove()
> int glove_read(glove_data *) /* returns 0 if old, 1 if new data */

> If we try to keep some interface stuff the same, everyone can develop
> code for their machine that meets the specs.  Then they can either be
> combined or distibuted seperatly.

I think this is a great idea. Here's my $0.02 worth:

1. Define what each function must do, not how to do it -- leave it as a
   black box. I intend to communicate with a glove-controller built here
   (when its done) via an RS-232 interface. In which case all this talk
   about interrupts is irrelevant.

2. I'd rather call change the name of reset_glove() to glove_quit() --
   reset implies to me get ready to start, not get ready to exit the
   program.

Frank.

From cit@comp.vuw.ac.nz Mon Oct 21 18:05:23 1991
Received: from mailhost.comp.vuw.ac.nz (kaukau.comp.vuw.ac.nz) by karazm.math.UH.EDU with SMTP id AA15149
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 18:05:23 -0500
Received: from cit by mailhost.comp.vuw.ac.nz with 5.65cVUW/4.59
	id <AA10361@mailhost.comp.vuw.ac.nz>; Mon, 21 Oct 1991 19:01:02 -0400
Received: from cit1.cit.ac.nz by cit2.cit.ac.nz
	id aa00942; Mon, 21 Oct 91 17:38:22 NZT
From: frankv@cit.ac.nz (Tutor)
X-Mailer: SCO System V Mail (version 3.2)
To: glove-list@karazm.math.uh.edu
Date: Mon, 21 Oct 91 17:41:11 NZT
Message-Id:  <9110211741.aa05523@cit1.cit.ac.nz>

> Hey, thanks for the 320x400x256 code fragment!  I had already figured out how
> get that resolution, and how to get 2 pictures, but I couln't figure out how
> to write the pictures without leaving the mode. (A bit misleading, calling
> SC#4 bit 3 "odd/even"!)  A bit expensive in time, constantly changing the plane
> write register, though.  Guess I'll have to figure out another damn 4-pass
> write algorithm. (B-{)

You don't think I actually write stuff using that display_pixel()
routine, do you ;-) That was just an example showing how to calculate
addresses, etc. The following fragment reads a file (produced by a
ray-tracer followed by quantising) which contains the four "planes" in
order. Note that setting the mask variable to F00, E00, C00, 800 writes
the first "plane" to all 4 planes in the VGA, the 2nd to planes 2-4,
etc. That fills the screen with a chunky image, then progressively
neatens it up. Alternatively you could initialise mask to 100, which
gives a vertical stripe effect.

void display_320x400()
{
int plane, mask;
char far *base;

	setvgapalette(&palette, colours);
        base = (char far *)0xa0000000L;

        mask = 0xf00;
	for (plane = 0; plane < 4; plane++, mask <<= 1) {
		outport(SC_INDEX, (mask & 0xf00) | MAP_MASK);
		fread(base, 400 * (320/4), 1, fp);
	}
}

> I think that VR applications would be better served by using 4 pages of
> 200 lines, as that cuts down the rendering time and allows double buffering.

I'm coming to the same conclusion: 320*200 gives a single-plane memory
map with corresponding benefits. Also, the size of the image is less
than 64K, giving benefits in address calculations.. I'm not sure whether
double-buffering of both images is needed -- update the right-eye view
while displaying the left-eye view may work.

> Any comments on using 16-color modes for even faster rendering?  Is there
> ANY way that so few colors is sufficient for filled-poly VR work?

I think that 16-colour (sorry to correct you spelling here :-) would
be worse, since each pixel (as far as I can tell) is represented by 1
bit in each of 4 bytes (remember the planes). Lots of bit-shuffling and
ANDing and ORing required too. Unless you're just flipping entire frames
up, 1 byte/pixel has to be better.

I can't comment on how many colours are needed for "filled-poly VR" --
I'm not familiar with that area. However, MS Flight Simulator does a
respectable job of displaying 3D material using only 16 colours.

> Which brings up the topic of reprogramming VGA cards to achieve new
> resolutions and timings.  Cheap LCD displays are going to need this to
> work properly. I did some work last summer on getting NTSC timings to
> run Sharp LCD panels, but I had to add a new clock source via the VGA
> feature connector. Any idea how cards from different manufacturers
> handle radical reprogramming of the registers?  Is the timing (i.e.
> blanking period) and "screwy" video modes reliable across all cards?

I don't know much about LCDs and VGAs. "My" 320x400 routine was simply
translated from assembler written by Michael Abrash in Programmers
Journal. He commented there that 320x400 should work on all VGA cards.

Frank.


From motcsd!roi!lance@apple.com Fri Oct 21 04:50:21 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA15316
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 19:06:55 -0500
Received: by apple.com (5.61/18-Oct-1991-eef)
	id AA00684; Mon, 21 Oct 91 16:02:05 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kZ4lO-0001FJC@motcsd.csd.mot.com>; Mon, 21 Oct 91 11:54 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA07291; 21 Oct 91 11:50:22 PDT (Mon)
To: glove-list@karazm.math.uh.edu
Subject: Re: Dataglove 2 and the SGI
Message-Id: <9110211150.AA07287@roi.ca41.csd.mot.com>
Date: 21 Oct 91 11:50:21 PDT (Mon)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>


Get the Graphics Interface '90 proceedings.  Chris Shaw and
his cohort whose name I've forgotten have a lot of sage advice
on this in "The DataPaper".  They also have a toolkit they're
planning to release soon.  Shaw posts here and on sci.v-w a lot.

Lance Norskog



From motcsd!roi!lance@apple.com Fri Oct 21 08:14:42 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA15332
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 19:15:29 -0500
Received: by apple.com (5.61/18-Oct-1991-eef)
	id AA04114; Mon, 21 Oct 91 16:20:29 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kZ7xE-0001FYC@motcsd.csd.mot.com>; Mon, 21 Oct 91 15:18 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA10177; 21 Oct 91 15:14:45 PDT (Mon)
To: jdb9608@cs.rit.edu
Subject:  Re:  sampling techniques and response time
Cc: glove-list@karazm.math.uh.edu
Message-Id: <9110211514.AA10165@roi.ca41.csd.mot.com>
Date: 21 Oct 91 15:14:42 PDT (Mon)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>


I think the amount of time control that you want to achieve
in glove interaction will only be available with an outboard
CPU controlling the glove.  The XYZ numbers are inaccurate,
and the finger resistors are useless for gesture recognition.

With an outboard CPU hooked directly to the cable between the
glove box and the hand stuff, you can trigger the spatial
sensors for your schedule, and get several bits' resolution
out of the fingers.

Lance Norskog

From motcsd!roi!lance@apple.com Fri Oct 21 06:54:28 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA15367
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.UH.EDU>); Mon, 21 Oct 1991 19:18:21 -0500
Received: by apple.com (5.61/18-Oct-1991-eef)
	id AA03823; Mon, 21 Oct 91 16:18:52 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kZ6hQ-0001QyC@motcsd.csd.mot.com>; Mon, 21 Oct 91 13:58 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA09357; 21 Oct 91 13:54:29 PDT (Mon)
To: dstamp@watserv1.uwaterloo.ca
Subject: IBM graphics performance
Cc: glove-list@karazm.math.uh.edu, glove-list@karazm.math.UH.EDU
Message-Id: <9110211354.AA09353@roi.ca41.csd.mot.com>
Date: 21 Oct 91 13:54:28 PDT (Mon)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>

> I think I see the problem here.  The difference is between the IBM and Amiga
> designs.  Any real graphics work on the IBM PC requires multiple I/O space
> accesses with inportb() and ouportb() type routines.  Since most of the 
> available C compilers do not replace these with inline code, this results
> in much slower operation than with assembly code.  Also, many of the good 
> instructions on the 80x86 (such as LOOP or REP STOSB) are not used by 
> compilers.  Again, assembly code is the only solution.  
	
Nope!  The IBM PC bus was designed to be cheap, and support text.
It was not designed with NTSC video bandwidth in mind, while the
Amiga was.  The hardware is at fault, not the software.  The Toaster
people said they can't port to the PC because it's 7 times too slow.

The PC VR software is going to have use scan-line techniques, or
paint in real RAM and copy that into the VGA frame buffer.  Multiple
touches of the same pixel would be the kiss of death.

Actually, the 8514/A clone cards are appearing mass-market for $500
from Western Digital etc.  These things include a raft of 2D graphics
commands which you just poke at it and go away.  They have a limited
range of RAM buffering techniques, and thus can possibly do double
buffering for animation but can't do quad-buffering for stereo
animation.  This is why I don't have one.  But for high-res non-stereo
work, they might make the nut.  Also, they might support two cards
in one machine but I don't think so.  One of these cards might
supply a very nice environment for stop-motion stereo or monoscopic
animation.

Lance Norskog

From motcsd!roi!lance@apple.com Fri Oct 21 09:49:43 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA15446
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 19:34:29 -0500
Received: by apple.com (5.61/18-Oct-1991-eef)
	id AA11160; Mon, 21 Oct 91 17:07:40 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kZ9R4-0000ZCC@motcsd.csd.mot.com>; Mon, 21 Oct 91 16:53 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA12016; 21 Oct 91 16:49:46 PDT (Mon)
To: menelli@tellabs.com
Subject: PG controller board
Cc: glove-list@karazm.math.uh.edu
Message-Id: <9110211649.AA12004@roi.ca41.csd.mot.com>
Date: 21 Oct 91 16:49:43 PDT (Mon)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>


This is excellent!  The software interface provided in high-res
mode is pretty weak.  For serious work I would much prefer your
outboard controller.  I have some software that does continuous
gesture recognition for mice, based on characterizing two single
input streams.  It mentions something about doing gloves via
multiple streams.  I can't use it with the glove because it
only does 2 bits.  (The software is on emsworth.andrew.cmu.edu
in /gestures.  It's by Dean Rubine, see the SIGGRAPH '91
proceedings.)

A point: the serial port approach does involve delays.  A parallel
port version would cut that down even farther.  Does the Motorola
evaluation board include enough parallel lines to make this
possible?  A parallel version would only involve one interrupt
per sample, and short polling loops.  

Another point: I would want a mode where the controller
board did as little interpretation as possible.  Just feed 
the raw counters in and let the big CPU with floating point 
handle X,Y,Z,rot issues.

A third point: does the Motorola chip include timers? A
global timestamp, based on the start of the sample cycle
in the board, would be very useful for doing synchronization
work.  There are algorithms for dealing with irregularly
spaced input streams; a prediction algorithm would need
accurate timestamps to operate properly.

Lance Norskog

From motcsd!roi!lance@apple.com Fri Oct 21 09:25:01 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA15462
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.UH.EDU>); Mon, 21 Oct 1991 19:37:14 -0500
Received: by apple.com (5.61/18-Oct-1991-eef)
	id AA11117; Mon, 21 Oct 91 17:07:18 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kZ93F-0000XzC@motcsd.csd.mot.com>; Mon, 21 Oct 91 16:28 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA11601; 21 Oct 91 16:25:03 PDT (Mon)
To: dstamp@watserv1.uwaterloo.ca
Subject: Re: IBM graphics performance
Cc: glove-list@karazm.math.UH.EDU
Message-Id: <9110211625.AA11595@roi.ca41.csd.mot.com>
Date: 21 Oct 91 16:25:01 PDT (Mon)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>

Dave Stamp says:

> I think I see the problem here.  The difference is between the IBM and Amiga
> designs.  Any real graphics work on the IBM PC requires multiple I/O space
> accesses with inportb() and ouportb() type routines.  Since most of the 
> available C compilers do not replace these with inline code, this results
> in much slower operation than with assembly code.  Also, many of the good 
> instructions on the 80x86 (such as LOOP or REP STOSB) are not used by 
> compilers.  Again, assembly code is the only solution.  
	
Nope!  The IBM PC bus was designed to be cheap, and support text.
It was not designed with NTSC video bandwidth in mind, while the
Amiga was.  The hardware is at fault, not the software.  

The PC VR software is going to have use scan-line techniques, or
paint in real RAM and copy that into the VGA frame buffer.  Multiple
touches of the same pixel would be the kiss of death.

Actually, the 8514/A clone cards are appearing mass-market for $500
from Western Digital etc.  These things include a raft of 2D graphics
commands which you just poke at it and go away.  They have a limited
range of RAM buffering techniques, and thus can possibly do double
buffering for animation but can't do quad-buffering for stereo
animation.  This is why I don't have one.  But for high-res non-stereo
work, they might make the nut.  Also, they might support two cards
in one machine but I don't think so.  One of these cards might
supply a very nice environment for stop-motion stereo or monoscopic
animation.

I remember now.  They do one buffer in 256-color mode and two
buffers in 16-color mode.  Classic IBM stupidity.

Lance Norskog


From dejavu!salnick@tau-ceti.isc-br.com Sun Oct 20 22:36:16 1991
Received: from tau-ceti.isc-br.com by karazm.math.UH.EDU with SMTP id AA15807
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 21:00:36 -0500
Received: by tau-ceti.isc-br.com (/\==/\ Smail3.1.21.1 #21.13)
	id <m0kZAQg-0000dwC@tau-ceti.isc-br.com>; Mon, 21 Oct 91 17:57 PDT
Received: by dejavu.spk.wa.us (V1.13/Amiga)
	id AA05682; Mon, 21 Oct 91 06:36:16 PST
Date: Mon, 21 Oct 91 06:36:16 PST
Message-Id: <9110211436.AA05682@dejavu.spk.wa.us>
From: salnick@dejavu.spk.wa.us (Bob Salnick)
To: glove-list-request@karazm.math.uh.edu
Cc: glove-list@karazm.math.uh.edu
Subject: Re: Interfaces to VR devices


> We could have some set of operations/functions that all interfaces
> should support, either using the hardware feature or simulating it in
> software. Then any application that uses only that basic set of
> operations will work with any device. Then, there would be options
> unique to a specific device. These interfaces would still support the
> basic standard, but add on some new function calls. Then a program may
> be written that requires a specific device.
> 
> Something like we have with modems. There is a basic command set (hayes
> AT set) for neccessary things like RESET, DIAL, ANSWER, HANGUP, etc.
> Any software that uses only these commands will work with most modems.
> Then there are optional things some modems have, like MNP COMPRESSION,
> protocols, interface speed locking, buffers, etc. A program can use
> these features but then it will not work with other modems.

A greate analogy might be the input equivalent to the way the Amiga handles
the printer:

There is one device which all software talks to: the PRT: device.  This
device is able to handle what ever printer is attached - to take
advantage of whatever functions the printer contains.  Software which
wants to print graphics, for example, will be told that this capability does
not exist if a daisy wheel printer is attached. 

To work in this faxhion, the software has to be broken into two parts - the
GLOVE: device, and the driver for the particular glove attached.  (In general,
I would suggest that the device be called INPUT: since assuming a glove may
be inappropriate for the future.)

bob

Bob Salnick, Spokane,WA |  USENET:     oliveb!isc-br!tau-ceti!DejaVu!salnick
  Amiga 1000, WB 1.3    |  INTERNET:   salnick@DejaVu.spk.wa.us
      WA9BVE            |         (FireStorm '91 survivor)

From dstamp@watserv1.uwaterloo.ca Mon Oct 21 19:04:44 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA16056
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 22:08:50 -0500
Received: by watserv1.uwaterloo.ca
	id <AA01211>; Mon, 21 Oct 91 23:04:44 -0400
Date: Mon, 21 Oct 91 23:04:44 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110220304.AA01211@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

Lance replied to a lot of my postings, so instead of a lot of little
postings, I'll try to handle them in one loner one:

From: Lance Norskog <lance@roi.ca41.csd.mot.com>

>Dave Stamp says:
>
>> I think I see the problem here.  The difference is between the IBM and Amiga
>> designs.  Any real graphics work on the IBM PC requires multiple I/O space
>> accesses with inportb() and ouportb() type routines.  Since most of the 
>> available C compilers do not replace these with inline code, this results
>> in much slower operation than with assembly code.  Also, many of the good 
>> instructions on the 80x86 (such as LOOP or REP STOSB) are not used by 
>> compilers.  Again, assembly code is the only solution.  
	
>Nope!  The IBM PC bus was designed to be cheap, and support text.
>It was not designed with NTSC video bandwidth in mind, while the
>Amiga was.  The hardware is at fault, not the software.  

I was referring to programming style as dictated _by_ the hardware, not the
hardware per se.

>The PC VR software is going to have use scan-line techniques, or
>paint in real RAM and copy that into the VGA frame buffer.  Multiple
>touches of the same pixel would be the kiss of death.

Exactly what I plan to do: use scan-line algorithms.  They have a big 
advantage over other methods in that they write each pixel once and
degrade gracefully with increasing numbers of polys.  The amount of 
optimization possible is pretty awesome.  Also, since you're drawing
each poly once, Gourand shading and texture mapping become less expensive.

Copying a buffer to the VGA card wastes more time than it saves unless
you're doing really wierd things that require multiple accesses to each pixel.
In this case, it's not warranted. 

>Actually, the 8514/A clone cards are appearing mass-market for $500
>from Western Digital etc.  These things include a raft of 2D graphics
>commands which you just poke at it and go away.

There are a couple of problems with the 8514/A cards.  First, using new
hardware violates the cheapness constraint on the system: less people
can get involved.  Second, as you pointed out, flexibility is less:
video modes can't be chosen easily.  Third, when you consider the time
used up stuffing the command FIFO versus the draw time, the performance
advantage for a scan-line renderer is pretty low, as you're just drawing
horizontal line segments.  Of course, if you're doing wireframe...
 
<in reference to my clipping message, which proposes a drawing rate
of >300 polys in 100 mS... or was it my database size of 10,000 polys?>

>I think you're off by an order or two of magnitude.
>But I have no hard numbers.

No, that's the beauty of the algorithm I'm working on!  I should get 
AT LEAST 200 polys per rendering cycle, and if I use 320x200x16 mode,
it takes about 50 mS-- plenty of time for the poly database processing.
I'm off by AT MOST a factor of 2.

>You should also consider that background walls and floors can be done
>by pre-rendering them onto pixmaps, then resampling the pixmaps
>onto the screen first.  Then, start drawing your wire-frames or
>filled polygons.

Yes, it is a possibility, IF you're using textures.  But this requires
"touching" each pixel twice...  Perhaps these areas could be copied out
of a buffer by the scan-line renderer where no polys cover.

>Again, check out BSP in the Computer Graphics book, and
>the ASP in Graphics Interface '90.  These are the front-runners
>for repetitive polygonal database update methods.

I have checked out these methods and, IMHO, they are not as useful 
as they appear.  They are best used to depth-sort polys for schemes
that draw ALL the polys over and over again.  They can help with object-
level rejection in the "front end" of the renderer, but no further.
The keyword is "repetitive" and we can't afford that on this machine.
I suspect even the Amiga starts getting into problems, as drawing a
poly takes significant CPU intervention to keep the hardware fed with
all those horizontal line commands that the Amiga's hardware supports.
Plus, as soon as you go to Gourand shading or texture mapping, it all
has to be done by the CPU anyway.

< a comment on the proposed glove interface >

>A tip: it will be much easier to get this stuff working right if
>you encode the whole process, both hi-res-mode-init and the
>polling loop, into a finite state machine.  Your TSR can then
>just do a case statement to decide what to do.  It's a little
>tougher to code than by hand, but it's the only way to fly
>in an interrupt-driven environment.

This isn't TSR code though: nor is it a device driver.  This is to be linked 
into a C program.  There really IS only one path through interrupts, with
early termination if the glove isn't ready yet.  I don't understand _why_
a state machine should be tougher-- it's just an implementation decision
after all.

Thanks for the feedback.  Can you please include at least the gist of the
original message?  I had trouble figuring out which one you were replying
to.  Ahh, the perils of asynchrony (B_{).

--------------------------------------------------------------------------
| My life is Hardware,                    |                              | 
| my destiny is Software,                 |         Dave Stampe          |
| my CPU is Wetware...                    |                              | 
| Anybody got a SDB I can borrow?         | dstamp@watserv1.uwaterloo.ca |
__________________________________________________________________________


From corp@gargoyle.uchicago.edu Mon Oct 21 18:15:12 1991
Received: from gargoyle.uchicago.edu by karazm.math.UH.EDU with SMTP id AA16323
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 23:19:17 -0500
Received: by gargoyle.uchicago.edu (4.0/1.14)
	id AA29037; Mon, 21 Oct 91 23:15:12 CDT
Date: Mon, 21 Oct 91 23:15:12 CDT
From: E. Corp Reed <corp@gargoyle.uchicago.edu>
Message-Id: <9110220415.AA29037@gargoyle.uchicago.edu>
To: glove-list@karazm.math.uh.edu
Subject: Long Postings.


Could people with long postings please put Control-L's in their postings.
It saves the lives of those (like me) who have real fast (tm) modems and
don't want to make coffee during source listings.

-C Reed
e-reed@uchicago.edu

From ralph@aplcen.apl.jhu.edu Mon Oct 21 20:17:19 1991
Received: from aplcen.apl.jhu.edu by karazm.math.UH.EDU with SMTP id AA16357
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 23:21:25 -0500
Received: by aplcen.apl.jhu.edu (5.57/Ultrix2.4-XDccg)
	id AA26638; Tue, 22 Oct 91 00:17:19 -0400
Date: Tue, 22 Oct 91 00:17:19 -0400
From: ralph@aplcen.apl.jhu.edu (Ralph Roland)
Message-Id: <9110220417.AA26638@aplcen.apl.jhu.edu>
To: glove-list@karazm.math.uh.edu
Subject: Question about the PG


Bieng new to this group, I was hoping somebody could answere 
a question for me...

I just purchased a PowerGlove, and have been playing around with
the Hires Code made available on this list, and have been
experiencing the following problem:

  When the Glove is centered and held at arms length pointing
  toward the center of the 'sensor-array' x-y-z are reading
  0,0,0 (close enough anyway).

  If I then bend my arm at the elbow (towards the left), rotating
  the glove around the z-axis (theoretically keeping the glove 
  'on' the x-y plane), the x-coord decreases (as it should),
  the z-cooord increases (as it should), but the y-coord also
  increases.

  The y-coord increases to about 0x30 by the time the sensors are
  out of the Field-of-View of the glove.

  If the same procedure is followed, except the rotation is to the
  right (much harder on the elbow I might add), the y-coord decreases
  in a similar manner.

This finally brings me to my question:

Does the PowerGlove *ALWAYS* screw-up the Y-coordinate, or did
I just manage to purchase a flakey unit?

Thanks in Advance for any light you may be able to shed...

Ralph Roland

From LEEK@QUCDN.QueensU.CA Mon Oct 21 19:44:00 1991
Received: from QUCDN.QueensU.CA by karazm.math.UH.EDU with SMTP id AA16629
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 21 Oct 1991 23:48:58 -0500
Message-Id: <199110220448.AA16629@karazm.math.UH.EDU>
Received: from QUCDN.QueensU.CA by QUCDN.QueensU.CA (IBM VM SMTP V2R1)
   with BSMTP id 6898; Tue, 22 Oct 91 00:45:27 EDT
Received: by QUCDN (Mailer R2.08) id 2997; Tue, 22 Oct 91 00:45:25 EDT
Date:    Mon, 21 Oct 1991 23:44 EDT
From: LEEK@QUCDN.QueensU.CA
To: glove-list@karazm.math.uh.edu
Subject: Re: Power glove standardization

Here is my 2 pennies worth of ideas on standardization of similiar glove
inputting device...   I think standardization is a good thing.  I would
like to suggest to move away from the powerglove data structure as it
seriously limits the possible type of performance for future devices.
Some  obvious limitations is the # of bits per finger and the rotational
angle resolution.  One  can easily get 6-7 bit of resolution if one
simply replaces the Glove CPU and add $3.00 worth of hardware.  At the
moment, the glove data structure might seem more convient.  I just
think it is worth while to set a proper standard.

I would also like to add a new function for the glove.  This function is
to be called after initialization.  This informs the host program of the
capabilities of the input device.  The host program can then perform the
necessary transformation(s) required to the input packet stream.

Inquire_Glove();

This function returns a pointer to a structure that contains the following:
   count - this tell the program how many words are there in a packet
   wordsize - the word size used in packet:byte,int,long
   tags  - this points to an array of tags that describe what each of the
           words in the packet are for and what is the maximum ranges of
           data to be expected.

Tags array:
Name - a char string with ASCII text identifying the corresponding word
       in the packet eg. "Finger 1", "Receiver 1", "Distance X", "Rotation"
       The ASCII text would have to be standardized.  New tags can be added
       for future devices as they becomes 'available'.  Programs would only
       read off tags that they understands and ignore the rest.
       Try to make it obvious and understandable by someone else.
       Avoid using obscure short form for tags as they make
       guess at it difficult and some programmers (like me) likes to
       use the tag as part of the items on menus (when they make sense)

Max - The maximum upper limit of the corresponding word in the packet.
(eg.  Max = 12 for the rotation from the glove.   For others, it might
      be 360 for 1 degree resolution. )

The function Read_Glove() would now return a pointer to a packet of
size count*wordsize bytes.

If any of the data in the packet is > than their corresponding Max
values, that means that piece of data is unavailable for the current
sample.  (eg.  One of the receiver misses)

It might also be possible to have the inquire function return a second
tags array describing the possible operating modes available from the
glove.  eg. possible modes:  "Joystick", "X,Y,Z,Rot,Fingers", "Raw",
"Sample on demand", "Sample rate".  An extra function is used to set
the glove into one or more operating modes.  The program might also
ask the glove to only include a selected list of data in each packet.
(ie.  The program get what it wants, not everything the glove gets.
This is to lower the overhead of data communication between the host
and the glove.)

I hope I have not gone way of tangent here.    I feel if we are going
to have a standard here, then we should do it right ie. not to limit
ourselves to a particular product or model (eg to save 5 machine cycles)
, allow for expansion in terms of new devices and/or higher resolution.
Some of the hard coder there might want to argue efficiency with me
about the extra processing required...   To me programming in bare metal
refers to laying out the transistor connections in a custom chip that
performs the equivalent software function.  :)  If I want speed, I'll
build some hardware for the task.

As for the interrupt/poll, leave it to the particular machine.  I like
the device model on my Amiga that provides both sync & async I/O.  Why
force your particular model (TSR, Interrupt, Polling, Multitasking) on
others ???


K. C. Lee
Elec. Eng. Grad. Student

From dstamp@watserv1.uwaterloo.ca Mon Oct 21 21:22:52 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA17189
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 00:26:58 -0500
Received: by watserv1.uwaterloo.ca
	id <AA09387>; Tue, 22 Oct 91 01:22:52 -0400
Date: Tue, 22 Oct 91 01:22:52 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110220522.AA09387@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

Lance replied to a lot of my postings, so instead of a lot of little
postings, I'll try to handle them in one loner one:

From: Lance Norskog <lance@roi.ca41.csd.mot.com>

>Dave Stamp says:
>
>> I think I see the problem here.  The difference is between the IBM and Amiga
>> designs.  Any real graphics work on the IBM PC requires multiple I/O space
>> accesses with inportb() and ouportb() type routines.  Since most of the 
>> available C compilers do not replace these with inline code, this results
>> in much slower operation than with assembly code.  Also, many of the good 
>> instructions on the 80x86 (such as LOOP or REP STOSB) are not used by 
>> compilers.  Again, assembly code is the only solution.  
	
>Nope!  The IBM PC bus was designed to be cheap, and support text.
>It was not designed with NTSC video bandwidth in mind, while the
>Amiga was.  The hardware is at fault, not the software.  

I was referring to programming style as dictated _by_ the hardware, not the
hardware per se.

>The PC VR software is going to have use scan-line techniques, or
>paint in real RAM and copy that into the VGA frame buffer.  Multiple
>touches of the same pixel would be the kiss of death.

Exactly what I plan to do: use scan-line algorithms.  They have a big 
advantage over other methods in that they write each pixel once and
degrade gracefully with increasing numbers of polys.  The amount of 
optimization possible is pretty awesome.  Also, since you're drawing
each poly once, Gourand shading and texture mapping become less expensive.

Copying a buffer to the VGA card wastes more time than it saves unless
you're doing really wierd things that require multiple accesses to each pixel.
In this case, it's not warranted. 

>Actually, the 8514/A clone cards are appearing mass-market for $500
>from Western Digital etc.  These things include a raft of 2D graphics
>commands which you just poke at it and go away.

There are a couple of problems with the 8514/A cards.  First, using new
hardware violates the cheapness constraint on the system: less people
can get involved.  Second, as you pointed out, flexibility is less:
video modes can't be chosen easily.  Third, when you consider the time
used up stuffing the command FIFO versus the draw time, the performance
advantage for a scan-line renderer is pretty low, as you're just drawing
horizontal line segments.  Of course, if you're doing wireframe...
 
<in reference to my clipping message, which proposes a drawing rate
of >300 polys in 100 mS... or was it my database size of 10,000 polys?>

>I think you're off by an order or two of magnitude.
>But I have no hard numbers.

No, that's the beauty of the algorithm I'm working on!  I should get 
AT LEAST 200 polys per rendering cycle, and if I use 320x200x16 mode,
it takes about 50 mS-- plenty of time for the poly database processing.
I'm off by AT MOST a factor of 2.

>You should also consider that background walls and floors can be done
>by pre-rendering them onto pixmaps, then resampling the pixmaps
>onto the screen first.  Then, start drawing your wire-frames or
>filled polygons.

Yes, it is a possibility, IF you're using textures.  But this requires
"touching" each pixel twice...  Perhaps these areas could be copied out
of a buffer by the scan-line renderer where no polys cover.

>Again, check out BSP in the Computer Graphics book, and
>the ASP in Graphics Interface '90.  These are the front-runners
>for repetitive polygonal database update methods.

I have checked out these methods and, IMHO, they are not as useful 
as they appear.  They are best used to depth-sort polys for schemes
that draw ALL the polys over and over again.  They can help with object-
level rejection in the "front end" of the renderer, but no further.
The keyword is "repetitive" and we can't afford that on this machine.
I suspect even the Amiga starts getting into problems, as drawing a
poly takes significant CPU intervention to keep the hardware fed with
all those horizontal line commands that the Amiga's hardware supports.
Plus, as soon as you go to Gourand shading or texture mapping, it all
has to be done by the CPU anyway.

< a comment on the proposed glove interface >

>A tip: it will be much easier to get this stuff working right if
>you encode the whole process, both hi-res-mode-init and the
>polling loop, into a finite state machine.  Your TSR can then
>just do a case statement to decide what to do.  It's a little
>tougher to code than by hand, but it's the only way to fly
>in an interrupt-driven environment.

This isn't TSR code though: nor is it a device driver.  This is to be linked 
into a C program.  There really IS only one path through interrupts, with
early termination if the glove isn't ready yet.  I don't understand _why_
a state machine should be tougher-- it's just an implementation decision
after all.

Thanks for the feedback.  Can you please include at least the gist of the
original message?  I had trouble figuring out which one you were replying
to.  Ahh, the perils of asynchrony (B_{).

--------------------------------------------------------------------------
| My life is Hardware,                    |                              | 
| my destiny is Software,                 |         Dave Stampe          |
| my CPU is Wetware...                    |                              | 
| Anybody got a SDB I can borrow?         | dstamp@watserv1.uwaterloo.ca |
__________________________________________________________________________


From dstamp@watserv1.uwaterloo.ca Mon Oct 21 21:30:55 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA17225
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 00:35:01 -0500
Received: by watserv1.uwaterloo.ca
	id <AA09571>; Tue, 22 Oct 91 01:30:55 -0400
Date: Tue, 22 Oct 91 01:30:55 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110220530.AA09571@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

< I think the mailer barfed this back at me: if you got it already, please
ignore...>

I am posting this as a word of encouragement to garage VR folk, and as a
benchmark to judge prospective equipment against.  I apologize in advance if
I seem to be disparaging about equipment or performance of software: I am
stating numbers as I have them (mostly from the source below, and some from
assorted research, technical documents too long misplaced to give references
to, and personal experience).  Feel free to correct me, but be sure you are
looking at the same aspects I am (i.e average case vs. worst/best case).

The following is from "Reality Built for Two: A Virtual Reality Tool" in
Computer Graphics journal by C. Blanchard et al from VPL.  It is a 2 page
article, and the 2 most relevant paragraphs are quoted here in full, with
some of the other equipment mentioned summarized later on.



I've had the opportunity to work with the LEEP optical systems.  They give
a WIDE (90 degrees is possible, 100 degrees is *quoted*) field of view,
but distort the image.	The distortion is fixed by using an undistorting
lens and camera mounted on the IRIS monitor.  Now, maybe VPL has gotten
around this somehow, but they don't say...

The pixels in a LEEP display look about as big as the nail on your pinky
at arm's length. (1/2 to 1/3 of a visual degree)  The resolution (actually
USED area) of the LCD in the Eyephone is 280 by 240 pixels at most.  The
"proprietary diffusion" seems to be a rather simple diffuser, needed to
smear the RGB bands in the LCD panel out, and to prevent contrast band
effects having to do with the limited view angle of the LCD panels.  The
stereo conflict stuff just means that the diffused picture ALWAYS looks
out-of-focus.  Those dots will probably cause the problem all over again.

As for the headband, when I worked with these displays I discarded
it because it couldn't hold the displays steady enough, and replaced
it with a frame and a pilot's helmet.  Worked great, but was a little
hard to get on and off.  If I'm working with a $18,000 ($24,000 color)
set of displays, I don't want them falling off my head!



Hmm, that poly count is hard to interpret.  If we translate it into
2000 quadrilaterals, we probably are not underestimating things.  The
"simultaneously viewable" phrase either means the *possible* viewable
set of objects from any position (i.e the "chambers" mentioned later)
or the number of polys not clipped by viewpoint and sent to the Irises
to be rendered.  I suspect it is the former, so the number of polys
actually sent to the Iris for rendering might be 1000 or so.

The idea of "chambers" is a primitive way of pruning the rendering
input.	I suspect that the 1000-poly count is *way* higher than what
the renderer in a well-designed 3D video game would have to handle,
given the same world to draw.  (No solid data on this, but Jez San
claims to handle a 20,000 poly world on a 386 PC at a goodly frame
rate...).  Also, by reducing the viewport size from 80 by 100 degrees
down to a garage-VR size viewport (suitable for simple eyephone optics)
of 40 by 50 degrees, the area (and number of polys) is reduced by a
factor of 4.

So, 300 polys MIGHT be a good upper-limit for the renderer.  That still
means we need good "front-end" software to tell the renderer what to draw.
I believe this number is quite achievable on a home system.


A SUMMARY OF OTHER EQUIPMENT MENTIONED:

The DataGlove, of course.  Its problems and frailty has been summarized
by others.

The world model is updated by a Mac II (sorry, no info on what model)
which talks to the Irises by Ethernet.

The glove position (palm and tip of index finger) and the Eyephone unit
angle and position are returned by a Polhemus Isotrak magnetic tracking
system.  As I recall, the sampling rate on an Isotrak is 80/(# inputs)
so that's about 26 samples/sec, assuming 1 isotrak per user.
The Pohemus sensors suffer from some of the same noise and glitch problems
as the Powerglove's sensors.  They don't have to be pointed at the receiver
array, but they suffer from distortion from any nearby metal object
(screws, desks, you name it).


CONCLUSION

In relation to these numbers, achievable results from the garage VR
project don't look terribly bad.  I think the point is that any
system has its drawbacks and tradeoffs, and current high-end VR
systems have their share.  The difference is that they can throw
money at a problem and buy off-the-shelf equipment to save time,
whereas the "garage" VR folk have to make do.  In the end, I think
we will compare well.

DISCLAIMER:

Consider this a first draft, shown to collegues for criticism and evaluation.
There is NOTHING implied about the companies mentioned here: just an
evaluation from my POV.  Discussion invited.

-Dave Stampe

From dstamp@watserv1.uwaterloo.ca Mon Oct 21 21:36:49 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA17270
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 00:40:55 -0500
Received: by watserv1.uwaterloo.ca
	id <AA09869>; Tue, 22 Oct 91 01:36:49 -0400
Date: Tue, 22 Oct 91 01:36:49 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110220536.AA09869@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

< I think the mailer barfed this back at me: if you got it already, please
ignore...>

I am posting this as a word of encouragement to garage VR folk, and as a
benchmark to judge prospective equipment against.  I apologize in advance if
I seem to be disparaging about equipment or performance of software: I am
stating numbers as I have them (mostly from the source below, and some from
assorted research, technical documents too long misplaced to give references
to, and personal experience).  Feel free to correct me, but be sure you are
looking at the same aspects I am (i.e average case vs. worst/best case).

The following is from "Reality Built for Two: A Virtual Reality Tool" in
Computer Graphics journal by C. Blanchard et al from VPL.  It is a 2 page
article, and the 2 most relevant paragraphs are quoted here in full, with
some of the other equipment mentioned summarized later on.



I've had the opportunity to work with the LEEP optical systems.  They give
a WIDE (90 degrees is possible, 100 degrees is *quoted*) field of view,
but distort the image.	The distortion is fixed by using an undistorting
lens and camera mounted on the IRIS monitor.  Now, maybe VPL has gotten
around this somehow, but they don't say...

The pixels in a LEEP display look about as big as the nail on your pinky
at arm's length. (1/2 to 1/3 of a visual degree)  The resolution (actually
USED area) of the LCD in the Eyephone is 280 by 240 pixels at most.  The
"proprietary diffusion" seems to be a rather simple diffuser, needed to
smear the RGB bands in the LCD panel out, and to prevent contrast band
effects having to do with the limited view angle of the LCD panels.  The
stereo conflict stuff just means that the diffused picture ALWAYS looks
out-of-focus.  Those dots will probably cause the problem all over again.

As for the headband, when I worked with these displays I discarded
it because it couldn't hold the displays steady enough, and replaced
it with a frame and a pilot's helmet.  Worked great, but was a little
hard to get on and off.  If I'm working with a $18,000 ($24,000 color)
set of displays, I don't want them falling off my head!



Hmm, that poly count is hard to interpret.  If we translate it into
2000 quadrilaterals, we probably are not underestimating things.  The
"simultaneously viewable" phrase either means the *possible* viewable
set of objects from any position (i.e the "chambers" mentioned later)
or the number of polys not clipped by viewpoint and sent to the Irises
to be rendered.  I suspect it is the former, so the number of polys
actually sent to the Iris for rendering might be 1000 or so.

The idea of "chambers" is a primitive way of pruning the rendering
input.	I suspect that the 1000-poly count is *way* higher than what
the renderer in a well-designed 3D video game would have to handle,
given the same world to draw.  (No solid data on this, but Jez San
claims to handle a 20,000 poly world on a 386 PC at a goodly frame
rate...).  Also, by reducing the viewport size from 80 by 100 degrees
down to a garage-VR size viewport (suitable for simple eyephone optics)
of 40 by 50 degrees, the area (and number of polys) is reduced by a
factor of 4.

So, 300 polys MIGHT be a good upper-limit for the renderer.  That still
means we need good "front-end" software to tell the renderer what to draw.
I believe this number is quite achievable on a home system.


A SUMMARY OF OTHER EQUIPMENT MENTIONED:

The DataGlove, of course.  Its problems and frailty has been summarized
by others.

The world model is updated by a Mac II (sorry, no info on what model)
which talks to the Irises by Ethernet.

The glove position (palm and tip of index finger) and the Eyephone unit
angle and position are returned by a Polhemus Isotrak magnetic tracking
system.  As I recall, the sampling rate on an Isotrak is 80/(# inputs)
so that's about 26 samples/sec, assuming 1 isotrak per user.
The Pohemus sensors suffer from some of the same noise and glitch problems
as the Powerglove's sensors.  They don't have to be pointed at the receiver
array, but they suffer from distortion from any nearby metal object
(screws, desks, you name it).


CONCLUSION

In relation to these numbers, achievable results from the garage VR
project don't look terribly bad.  I think the point is that any
system has its drawbacks and tradeoffs, and current high-end VR
systems have their share.  The difference is that they can throw
money at a problem and buy off-the-shelf equipment to save time,
whereas the "garage" VR folk have to make do.  In the end, I think
we will compare well.

DISCLAIMER:

Consider this a first draft, shown to collegues for criticism and evaluation.
There is NOTHING implied about the companies mentioned here: just an
evaluation from my POV.  Discussion invited.

-Dave Stampe

From dirish@math.utah.edu Tue Oct 22 02:23:37 1991
Received: from math.utah.edu (csc-sun.math.utah.edu) by karazm.math.UH.EDU with SMTP id AA18794
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 09:27:46 -0500
Received: from alfred.math.utah.edu by math.utah.edu (4.1/SMI-4.1-utah-csc-server)
	id AA25185; Tue, 22 Oct 91 08:23:40 MDT
Received: by alfred.math.utah.edu (5.57/Ultrix3.0-C)
	id AA10244; Tue, 22 Oct 91 08:23:37 -0600
Date: Tue, 22 Oct 91 08:23:37 -0600
From: dirish@math.utah.edu
Message-Id: <9110221423.AA10244@alfred.math.utah.edu>
To: glove-list@karazm.math.uh.edu
Subject: RE: PG controller board

Given the very experimental tendancy of this group I have a sugestion
for the people designing outboard controller cards.  I would love to
have one which I could down load the code to.  In my experience, being
able to down load a new version of the controller code, rather than
having to burn another prom is a big win.  Especially for those of us
who would have to burn the proms at work then bring them home to work
on.

Also, in terms of lower cost, such a system would let someone with
considerably less equipment start experimenting with a controller
card.  I haven't looked, but surely we can find a simple monitor for
one of these controllers which will allow down loading?

Dudley Irish
________________________________________________________________________
Dudley Irish / dirish@math.utah.edu / Manager Computer Operations
Center for Scientific Computing, Dept of Mathematics, University of Utah

The views expressed in this message do not reflect the views of the
Dept of Mathematics, the University of Utah, or the State of Utah.

From williams_stephen_d@ae.ge.com Tue Oct 22 07:06:25 1991
Received: from CRDGW1.GE.COM by karazm.math.UH.EDU with SMTP id AA18955
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 10:11:46 -0500
Received:  by crdgw1.ge.com (5.57/GE 1.114)
	 id AA24840; Tue, 22 Oct 91 11:07:33 EDT
Message-Id:  <9110221507.AA24840@crdgw1.ge.com>
Received: from hp600.ae.ge.com by hpmail.ae.ge.com with SMTP
	(15.11.1.6/15.6) id AA05319; Tue, 22 Oct 91 11:06:25 -0400
Received: by hp600.ae.ge.com
	(15.11.1.6/15.6) id AA02543; Tue, 22 Oct 91 11:06:27 -0400
From: U-E99999-Stephen Williams <williams_stephen_d@ae.ge.com>
Subject: 68hc811....
To: glove-list@karazm.math.uh.edu
Date: Tue, 22 Oct 91 11:06:25 EDT
Mailer: Elm [revision: 64.9]

The 68hc811 has 2k of eeprom and 6-800bytes of ram.  It has a mode where
it downloads a program from the serial port and then executes it.
The ideal setup is to have the public domain/portable assembler on a
PC (generic in this sense) with a serial cable.  Run the chip in
single chip mode with a toggle for bootstrapping.

I would suggest that someone (with more experience and time than I) do
the following:

Get together the simplest circuit possible for single chip mode or
a mode with some more ram.

Pinouts of an appropriate cable (serial and PG).

Re-distribute one of the portable assemblers and the PG source.

Provide a simple bootstrap that loads the executable image into
eeprom.

Coordinate PC software to interpret the data coming in from serial/parallel
port.



I believe this could be done with no evm/evb or eprom burner/eraser
and would cut the cost tremendously.

I am thinking of eventually selling a kit like this, but have a
very long queue of projects.  If anyone's interested, I also know
how to interface switches, relays, stepper motors, etc. very simply
to a standard parallel port.  I had a stepper spinning in either
direction with 4 transistors and a Basic program.

I have been looking at the 68hc811, but havn't had time to actually
do anything.

I have a lot of professional experience in many areas of software,
including industrial robotics, but I am hobbyist level in electronics.

If anyone would help me with the circuit and software initially, we
could produce these as a design, kit, and/or box.

Thanks.
sdw
--
Stephen D. Williams     SDW Systems (513) 439-5428   GE AEG (513) 552-5237
ICBM: 39 34N 85 15W     Internet: williams_stephen_d@ae.ge.com CIS 76244,210
                        sdw@world.std.com       Prodigy   TPGR01A
Object Oriented R&D     By Horse: 10028 Village Tree Ct., Miamisburg, OH 45342

From broehl@sunee.waterloo.edu Tue Oct 22 07:10:39 1991
Received: from sunee.waterloo.edu by karazm.math.UH.EDU with SMTP id AA18969
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 10:14:47 -0500
Received: by sunee.waterloo.edu
	id <AA19958>; Tue, 22 Oct 91 11:10:40 -0400
From: Bernie Roehl <broehl@sunee.waterloo.edu>
Message-Id: <9110221510.AA19958@sunee.waterloo.edu>
Subject: Standards
To: glove-list@karazm.math.uh.edu
Date: Tue, 22 Oct 91 11:10:39 EDT
X-Mailer: ELM [version 2.3 PL11]

Some micellaneous thoughts on standards:

After some careful thought, I've come to the conclusion that the various
VR input devices will be too varied to make a single, universal interface
practical.

What I suspect we'll see are increasing levels of data abstraction; the
glove routines we have now well work as currently defined, and a higher-level
routine will map glove movements, gestures and buttons to a more generic
form.  Don't make the lower levels more complex; instead let them do what
they do well and let the higher levels process the results.

Since we wll probably have a set of routines for each VR input device we
develop, I would propose a naming convention: all the routines related to
the glove we love will have names prefixed with "glove_".  Thus our
initialization routine would be glove_init(), our reading routine would
be glove_read(), and our wrapup routine would be called glove_quit()
(which, as an earlier poster pointed out, is probably more meaningful
than "glove_reset()").

As to the issue of external microcontrollers... I think it would be nice
to standardize a protocol for talking to them.  Even though I don't have
one (yet; we have a 68HC11, and I'm just waiting for the person who has
the code to post it), here is what I propose:

Host sends 'H' to board to put glove in hi-res mode
Host sends 'P' to board to poll it for a 6-byte packet
Host sends 'C' to board to tell it to send full 12-byte packet continuously
Host sends 'S' to board to stop continuous sending
Host sends 'D' to board, followed by a 1-byte byte count, followed by
     that number of bytes of data to load into a buffer and execute

-- 
	Bernie Roehl, University of Waterloo Electrical Engineering Dept
	Mail: broehl@sunee.waterloo.edu OR broehl@sunee.UWaterloo.ca
	BangPath: watmath!sunee!broehl
	Voice:  (519) 885-1211 x 2607 [work]

From ejdavies@watcgl.waterloo.edu Tue Oct 22 08:11:20 1991
Received: from watcgl.waterloo.edu by karazm.math.UH.EDU with SMTP id AA19428
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 11:15:27 -0500
Received: by watcgl.waterloo.edu
	id <AA26376>; Tue, 22 Oct 91 12:11:20 -0400
Date: Tue, 22 Oct 91 12:11:20 -0400
From: Eric Davies <ejdavies@watcgl.waterloo.edu>
Message-Id: <9110221611.AA26376@watcgl.waterloo.edu>
To: glove-list@karazm.math.uh.edu

Subject: standards and alternative position tracking schemes

One thought on standards: while the powerglove only gives you data about a
  finger as a whole, I would expect more sophisticated gloves (if not now,
  then in the future) to offer information about individual finger joints.
  [Allowing sign language, more involved puppetry?]
  Likely there are other options envisionable as well. Perhaps we could have
  a device driver which we pass a set of atoms (to use the Xwindows 
  terminology) to indicate which data items we are interested in and a buffer
  to store that information in. Data items that aren't supported by the driver
  are simply ignored. When the buffer got filled, the device driver
  would store the atom next to the data item to identify it. 
  Ideally, access to the driver would be a set of machine specific routines,
  to hide whether the driver was a library being linked in or a genuine 
  honest-to-goodness device driver.
  Given somebody/group willing to coordinate the allocation of atom values,
  (the way Commodore coordinates IFF chunk names) integer atoms should be
  sufficient.

Position tracking schemes: does anybody have any references to infrared
  position tracking schemes? It looks like you need to solve a nonlinear
  system of equations, making the math a bit uglier and probably slower,
  but removes a few other constraints.

Eric Davies

From SHEKOSKI@vx.acs.umn.edu Tue Oct 22 06:49:00 1991
Received: from vx.acs.umn.edu by karazm.math.UH.EDU with SMTP id AA19552
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 11:48:42 -0500
Date: Tue, 22 Oct 91 11:49 CDT
From: "Paul Shekoski,931-4333,Alliant" <SHEKOSKI@vx.acs.umn.edu>
Subject: Help in Getting Started
To: glove-list@karazm.math.uh.edu, Paul_Shekoski@Atk.Com
Message-Id: <F812253C24FF81106A@vx.acs.umn.edu>
X-Envelope-To: glove-list@karazm.math.uh.edu
X-Vms-To: IN%"glove-list@karazm.math.uh.edu"
X-Vms-Cc: SHEKOSKI


Can someone supply me with some information about getting started
constructing my own input devices, programs, interfaces, etc...?
I am very interested in some opinions about which hardware platform
I should start from, how I go about getting started on that platform,
and what things I can purchase on a very limited budget(e.g. my own).
I do have access to silicon graphics machines as well as other types of 
systems.  

Paul

From agodwin@acorn.co.uk Tue Oct 22 18:26:02 1991
Received: from eros.uknet.ac.uk by karazm.math.UH.EDU with SMTP id AA20184
  (5.65c/IDA-1.4.4 for <glove-list@KARAZM.MATH.UH.edu>); Tue, 22 Oct 1991 12:19:09 -0500
Received: from acorn.co.uk by eros.uknet.ac.uk with UUCP 
          id <1291-0@eros.uknet.ac.uk>; Tue, 22 Oct 1991 18:05:32 +0100
Received: from snark.acorn.co.uk by acorn.co.uk (4.1/Am31) id AA17116;
          Tue, 22 Oct 91 17:26:04 BST
From: agodwin@acorn.co.uk (Adrian Godwin)
Date: Tue, 22 Oct 91 17:26:02 +0100
Message-Id: <9110221626.AA03672@snark.acorn.co.uk>
To: glove-list@KARAZM.MATH.UH.edu
Subject: ACCESS.bus specs



I'm still waiting for Digital to send me specs on the ACCESS.bus standard :
can anyone here tell how it's related to the IIC bus ? Will the IIC devices
work with it ?

-adrian

From german@cgrg.ohio-state.edu Tue Oct 22 09:37:28 1991
Received: from sap.cgrg.ohio-state.edu by karazm.math.UH.EDU with SMTP id AA20332
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 12:41:35 -0500
Return-Path: <german@cgrg.ohio-state.edu>
Received: by sap.cgrg.ohio-state.edu (5.64/900625.02)
	id AA16482; Tue, 22 Oct 91 13:37:28 -0400
Date: Tue, 22 Oct 91 13:37:28 -0400
From: german@cgrg.ohio-state.edu (German Bauer)
Message-Id: <9110221737.AA16482@sap.cgrg.ohio-state.edu>
To: glove-list@karazm.math.uh.edu
Subject: ftp access


Could you pls mail me the number of karazm.math.uh.edu, since my host does
not "know" karazm.math.uh.edu. I would like to ftp the hires-code from there.
Thanks in advance, German B.

From gbnewby@alexia.lis.uiuc.edu Tue Oct 22 07:55:23 1991
Received: from alexia.lis.uiuc.edu by karazm.math.UH.EDU with SMTP id AA20556
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 13:10:08 -0500
Received: by alexia.lis.uiuc.edu id AA20679
  (5.61/ for jdb9608@cs.rit.edu); Tue, 22 Oct 91 12:55:23 -0500
Date: Tue, 22 Oct 91 12:55:23 -0500
From: Greg Newby <gbnewby@alexia.lis.uiuc.edu>
Message-Id: <9110221755.AA20679@alexia.lis.uiuc.edu>
To: glove-list@karazm.math.uh.edu, jdb9608@cs.rit.edu
Subject: Re:  ST timing?
Cc: gbnewby@alexia.lis.uiuc.edu

Hi.  I was out of town for a few days, so I hope no one already
responded to David's comments about synch. problems.

My response:  Isn't there a header byte somewhere?  As in, instead
of sampling in a "fixed loop," why not read when you can, and then
dynamically decide what sort of data you're reading?

If the datum is wrong (out of sync), transfer to a loop that waits
until the data are back in sync -- then return to the main loop.

Sorry this is vague right now.  The idea is that if you skip
one measly transmission of position, at least you can get the
next one after resynchronizing.  There are some header bytes or
whatever that I believe are now being skipped in the code.

Sorry for brevity, I gotta go teach in a few minutes....  
Later.
-- Greg
gbnewby@alexia.lis.uiuc.edu

From dstamp@watserv1.uwaterloo.ca Tue Oct 22 11:56:26 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA21298
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 15:00:41 -0500
Received: by watserv1.uwaterloo.ca
	id <AA24923>; Tue, 22 Oct 91 15:56:26 -0400
Date: Tue, 22 Oct 91 15:56:26 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110221956.AA24923@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

Replying to Lance Norskog <lance@roi.ca41.csd.mot.com>

>>>You should also consider that background walls and floors can be done
>>>by pre-rendering them onto pixmaps, then resampling the pixmaps
>>>onto the screen first.  Then, start drawing your wire-frames or
>>>filled polygons.
>>

>The VGA hardware is terminally weird.  It has this mode where you
>can copy from one part of card RAM to another faster than from
>main RAM.  This makes pre-rendered textures interesting, since 320x200
>is only 64k, and the VGA boards now support 1meg of RAM.

Well... that IS true, and you can copy 4 bytes with 2 CPU accesses, or
fill all 4 with 1 CPU access.  The 1 meg cards are'nt that good, though, as
accessing that extra RAM is highly card- and mode- specific.  So the
software will have to assume a 256K VGA card.

Now, the most memory used is for double-buffered 320x200x256 color mode in
stereo (4 pages) which eats up all but 1536 pixels worth of memory.. Still
possible, I guess.  But if we drop down to 320x200x16 colors, we get 8 pages
so it's quite possible there, and the copy takes less than 10 mS.  Quite
possible.  Except any major viewpoint shift wrecks your background...

< discussing BSP and ASP algorithms>

>You'll want four or five different polygon database management
>algorithms to handle different parts of the scene: walls&furniture,
>moving hard objects, moving flexible objects, glove cursor, etc.
>BSP and ASP help with models for moving hard objects and furniture.
>
>A once-every-time sort must be done on the database of large moving 
>and still objects, then each object must itself be added to the
>polygon list, then you do a scan-line render on a small polygon
>list.  This gets very complex, and may be slow.  In fact, this
>method may only get used when you're rendering animations in
>batch mode of fly-throughs which you've logged.  Autodesk animator
>does 320x200x256 colors, and of course you'll want to share
>your demos :-)

Hmm, are we discussing the same algorithms?  As I read Foley's latest book
"Computer Graphics: principles and practice" the BSP seems to help with
2 things:
- eliminating polys that fall outside the viewport efficiently
- generating an ordered list of polys so that masking is done by _drawing_
  the polygons.

Now I am aware that the conversion from an object tree to a poly list
(hopefully ordered in some way) is expensive and the BSP and ASP help
here, but there are other ways to optimize this.  I am proposing a
simple set of "enclosing" points for each object that would control
the sorting, masking and clipping of each object.  This would reduce
computations by 90% during list transversal.  Let me know what you think.

A technical point about BSP: what happens if another object intrudes into 
a concave object?  Is this a problem, or not?

IMHO, Foley does not cover the BSP that thoroughly.  Any other references?
CAN the BSP be used to eliminate polys inside the viewport BEFORE rendering
(no z-buffer here-- just draw and draw...)


--------------------------------------------------------------------------
| My life is Hardware,                    |                              | 
| my destiny is Software,                 |         Dave Stampe          |
| my CPU is Wetware...                    |                              | 
| Anybody got a SDB I can borrow?         | dstamp@watserv1.uwaterloo.ca |
__________________________________________________________________________


From jdb9608@cs.rit.edu Tue Oct 22 12:14:00 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA21584
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 15:17:09 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA13267; Tue, 22 Oct 91 16:12:35 -0400
Received: from cobalt.CS (cobalt.ARPA) by junior.rit.edu (4.1/5.17)
	id AA26701; Tue, 22 Oct 91 16:01:11 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110222001.AA26701@junior.rit.edu>
Subject: Re:  ST timing?
To: gbnewby@alexia.lis.uiuc.edu, glove-list@karazm.math.uh.edu
Date: Tue, 22 Oct 91 16:14:00 EDT
X-Mailer: ELM [version 2.3 PL8]

Greg has a good idea for re-sync'ing the packet by
simply reading a whole packet whenever an A0 comes in
(i.e., when it comes in as the 10'th byte, consider it
the 1st byte instead).

I'll probably wind up doing something like that.  I was
hoping that if I could get the packet order rock-solid,
then I could sync the glove to the program.  Skipping the
last few D2SLOW bytes will throw off the sync by 15 or 30
ms each time it happens.  I don't know why it happens.
Maybe if it's unavoidable I could just re-sync the program
at those points (costing that one frame but not the
following frames).

If this sync-the-glove-to-the-program stuff doesn't improve
the response time then I'll probably just use the method
Dave Stampe discovered, since it's faster.

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From broehl@sunee.waterloo.edu Tue Oct 22 12:25:52 1991
Received: from sunee.waterloo.edu by karazm.math.UH.EDU with SMTP id AA21658
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 15:30:04 -0500
Received: by sunee.waterloo.edu
	id <AA26957>; Tue, 22 Oct 91 16:25:54 -0400
From: Bernie Roehl <broehl@sunee.waterloo.edu>
Message-Id: <9110222025.AA26957@sunee.waterloo.edu>
Subject: clippin
To: glove-list@karazm.math.uh.edu
Date: Tue, 22 Oct 91 16:25:52 EDT
X-Mailer: ELM [version 2.3 PL11]

> Now I am aware that the conversion from an object tree to a poly list
> (hopefully ordered in some way) is expensive and the BSP and ASP help
> here, but there are other ways to optimize this.  I am proposing a
> simple set of "enclosing" points for each object that would control
> the sorting, masking and clipping of each object.  This would reduce
> computations by 90% during list transversal.  Let me know what you think.

Sounds like a good idea; assign each object a bounding box and then clip
by objects before even worrying about polygons.

-- 
	Bernie Roehl, University of Waterloo Electrical Engineering Dept
	Mail: broehl@sunee.waterloo.edu OR broehl@sunee.UWaterloo.ca
	BangPath: watmath!sunee!broehl
	Voice:  (519) 885-1211 x 2607 [work]

From jdb9608@cs.rit.edu Tue Oct 22 12:52:53 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA21789
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 15:55:44 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA14838; Tue, 22 Oct 91 16:51:27 -0400
Received: from cobalt.CS (cobalt.ARPA) by junior.rit.edu (4.1/5.17)
	id AA26923; Tue, 22 Oct 91 16:40:03 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110222040.AA26923@junior.rit.edu>
Subject: karazm's internet number
To: glove-list@karazm.math.uh.edu
Date: Tue, 22 Oct 91 16:52:53 EDT
X-Mailer: ELM [version 2.3 PL8]

From here, karazm.math.uh.edu seems to be 129.7.7.6.

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From gbnewby@alexia.lis.uiuc.edu Tue Oct 22 10:55:17 1991
Received: from alexia.lis.uiuc.edu by karazm.math.UH.EDU with SMTP id AA21809
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 15:59:49 -0500
Received: by alexia.lis.uiuc.edu id AA27246
  (5.61/ for glove-list@karazm.math.uh.edu); Tue, 22 Oct 91 15:55:17 -0500
Date: Tue, 22 Oct 91 15:55:17 -0500
From: Greg Newby <gbnewby@alexia.lis.uiuc.edu>
Message-Id: <9110222055.AA27246@alexia.lis.uiuc.edu>
To: dstamp@watserv1.uwaterloo.ca, glove-list@karazm.math.uh.edu
Subject: Specifics on VPL's Mac
Cc: gbnewby@alexia.lis.uiuc.edu

Thanks for the summary, Dave.  You mentioned that you didn't have
the specs for the Mac VPL uses for it's virtual reality setup:

They use a high-end model (Mac II cx or fx), 16 Meg ram.  The Mac runs
a proprietary program (set of programs, really), called "Body 
Electric."  I only used this a little bit, but it was basically
an object definition language -- the programmer would specify
objects and give them characteristics.  The programming language
didn't seem much different from Hypercard, or maybe a database
definition language.  Things such as:
	define ball
		 can move
		 has gravity
		 size = 10
		 shape = round
		 initial position..
etc.  That's not how the language looked, but those are the types
of characteristics that were defined.

The rumor is that they are now trying to remove the Mac from the
picture altogether -- with today's Iris', there's really no need
(older Iris' were a different story....). 

Didn't VPL have a demonstration at SIG/GRAPH with only one Iris?  Or
was it an Iris and a Mac...
  Anyway, that fills in a few details...
-- Greg
gbnewby@alexia.lis.uiuc.edu

From dstamp@watserv1.uwaterloo.ca Tue Oct 22 13:54:20 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA22143
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 16:58:40 -0500
Received: by watserv1.uwaterloo.ca
	id <AA02549>; Tue, 22 Oct 91 17:54:20 -0400
Date: Tue, 22 Oct 91 17:54:20 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110222154.AA02549@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu


Here's a "weird" proposal.  Read it and think about it before you reply...

Using Amiga 500's as graphics accelerators for IBM PC's ????

The idea is to interface (cheaply) 1 or 2 A500's to a 386 PC.  The output
of the A500's is NTSC video, perfect for driving those cheap Eyephone 
displays.  The 386 supplies the processing power for modelling, list
transversal and I/O; the A500 supplies faster low-level rendering.  The
BIG advantage here is that binocular 3-D is almost as fast as monocular
video.

Now, the cost of an A500 without monitor is under $500: about the cost of
a very cheap graphics coprocessor card for the PC.  Some sort of interface 
has to be implemented that can transfer data FAST without significant
loading of the CPU at either end of the link.  The A500 boots and runs off
a floppy automatically.

I'm not sure where the best place to interrupt the rendering chain for
division of labor is.  The A500 is capable of 3 or 4 times the graphics
performance of the PC in squirting stuff onto the screen; the PC is 
about 6-10x faster on the database and pre-rendering stuff.  Whether
to use a repetitive-drawing algorithm using tha A500's faster drawing
speed or a scan-line algorithm with the PC passing the A500 shading,
texture, and horizontal line segments to draw is another guestion.

My answer to "Why not just go with an A3000 right away" is that it's 
not really a good idea for IBM PC programmers who have a big investment
in their environments, etc.  Besides, see how VPL has been using a MAC
to drive their IRIS workstations: it's a case of software environment
in many cases.

Anyway, let's discuss it.  Is it cost-effective?  How much of a speedup
will it make?  (Oh, come on now.  Just think about for 15 seconds or so...)

 
--------------------------------------------------------------------------
| My life is Hardware,                    |                              | 
| my destiny is Software,                 |         Dave Stampe          |
| my CPU is Wetware...                    |                              | 
| Anybody got a SDB I can borrow?         | dstamp@watserv1.uwaterloo.ca |
__________________________________________________________________________

From jdb9608@cs.rit.edu Tue Oct 22 14:01:57 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA22192
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 17:04:50 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA17678; Tue, 22 Oct 91 18:00:36 -0400
Received: from cobalt.CS (cobalt.ARPA) by junior.rit.edu (4.1/5.17)
	id AA27119; Tue, 22 Oct 91 17:49:11 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110222149.AA27119@junior.rit.edu>
Subject: standard objectives
To: glove-list@karazm.math.uh.edu
Date: Tue, 22 Oct 91 18:01:57 EDT
X-Mailer: ELM [version 2.3 PL8]

There are great ideas on standards flying around.
I'm going to try to summarize them later, but at the moment
see how you like this attempt to list and prioritize
the objectives of the standard:

1.  allow programs to run independent of hardware (i.e., ST, PC, Amiga...)

2.  the interface the programmer needs is already written

3.  allow glove interfaces to be upwardly compatable (i.e., the
    old features always remain so old programs will always work).
    This is pretty easy if people choose to use the standard,
    but the longer there is no standard the more programs can't use it.

4.  allow glove interfaces to be downwardly compatable (i.e.,
    if the interface can't handle some option, it knows how
    to do something almost as good or at least it can
    gracefully inform the user about what it can't handle).
    This is more difficult because it involves substituting
    functions and predicting the future demands of applications
    and future capabilities of interfaces.

There are two main, opposing constraints:

hiding implementation details is good (here's what it does, nevermind how)

reducing functionality is bad (this one can do it, but that one can't)

	(e.g., some people will want the 17 Hz sample rate, but
	that forces an implementation using timers, which some
	hardware may lack.  That extra speed is worth the
	inconsistency of the uncommon hardware that can't do it;
	that hardware's interface will just have to do the next
	best thing, because the absolute lowest common denominator
	is too low.  This is the downward compatability problem again.)

I've seen some great ideas for solutions;  let's talk about them,
put together what we know we've got, and try to nail it down even tho
we can't predict the future.

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From cdshaw@cs.ualberta.ca Tue Oct 22 10:41:25 1991
Received: from scapa.cs.ualberta.ca by karazm.math.UH.EDU with SMTP id AA22445
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 17:47:36 -0500
Received: by scapa.cs.ualberta.ca id <42377>; Tue, 22 Oct 1991 16:42:51 -0600
Subject: Re: Dataglove 2 and the SGI
From: Chris Shaw <cdshaw@cs.ualberta.ca>
To: lance@roi.ca41.csd.mot.com (Lance Norskog), glove-list@karazm.math.uh.edu
Date: 	Tue, 22 Oct 1991 16:41:25 -0600
In-Reply-To: <9110211150.AA07287@roi.ca41.csd.mot.com>; from "Lance Norskog" at Oct 21, 91 12:50 pm
Organization: U of Alberta, Dept of Computing Science
Address: 713D General Services Building, U of A, Edmonton, Alberta, T6G 2H1
X-Mailer: ELM [version 2.3 PL11]
Message-Id: <91Oct22.164251mdt.42377@scapa.cs.ualberta.ca>

> Get the Graphics Interface '90 proceedings.  Chris Shaw and
> his cohort whose name I've forgotten have a lot of sage advice
> on this in "The DataPaper".  They also have a toolkit they're
> planning to release soon.  Shaw posts here and on sci.v-w a lot.
> 
> Lance Norskog

Thank for the references! My cohort = my boss = Mark Green.
We'll be releasing a beta version of the toolkit sometime this month.
Includes a version of our updated glove server, and our updated
isotrak server, plus our VR toolkit.

-- 
Chris Shaw               University of Alberta
cdshaw@cs.UAlberta.ca    CatchPhrase: Bogus as HELL !

From LEEK@QUCDN.QueensU.CA Tue Oct 22 14:51:00 1991
Received: from QUCDN.QueensU.CA by karazm.math.UH.EDU with SMTP id AA22487
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 17:59:19 -0500
Message-Id: <199110222259.AA22487@karazm.math.UH.EDU>
Received: from QUCDN.QueensU.CA by QUCDN.QueensU.CA (IBM VM SMTP V2R1)
   with BSMTP id 8322; Tue, 22 Oct 91 18:55:47 EDT
Received: by QUCDN (Mailer R2.08) id 8328; Tue, 22 Oct 91 18:55:46 EDT
Date:    Tue, 22 Oct 1991 18:51 EDT
From: LEEK@QUCDN.QueensU.CA
To: glove-list@karazm.math.uh.edu
Subject: Standardization Ideas....


Here is my 2 pennies worth of ideas on standardization of similiar glove
inputting device...   I think standardization is a good thing.  I would like to
suggest to move away from the powerglove data structure as it seriously limits
the possible type of performance for future devices. Some  obvious limitations
is the # of bits per finger and the rotational angle resolution.  One  can
easily get 6-7 bit of resolution if one simply replaces the Glove CPU and add
$3.00 worth of hardware.  At the moment, the glove data structure might seem
more convient.  I just think it is worth while to set a proper standard.

I would also like to add a new function for the glove.  This function is to be
called after initialization.  This informs the host program of the capabilities
of the input device.  The host program can then perform the necessary
transformation(s) required to the input packet stream.

Inquire_Glove();

This function returns a pointer to a structure that contains the following:
count - this tell the program how many words are there in a packet
wordsize - the word size used in packet:byte,int,long
tags  - this points to an array of tags that describe what each of the
        words in the packet are for and what is the maximum ranges of data to
        be expected.

Tags array:
Name - a char string with ASCII text identifying the corresponding word
in the packet eg. "Finger 1", "Receiver 1", "Distance X", "Rotation" The ASCII
text would have to be standardized.  New tags can be added for future devices
as they becomes 'available'.  Programs would only read off tags that they
understands and ignore the rest. Try to make it obvious and understandable by
someone else. Avoid using obscure short form for tags as they make guess at it
difficult and some programmers (like me) likes to use the tag as part of the
items on menus (when they make sense)

Max - The maximum upper limit of the corresponding word in the packet.
(eg. Max = 12 for the rotation from the glove.   For others, it might
     be 360 for 1 degree resolution. )

The function Read_Glove() would now return a pointer to a packet of size
count*wordsize bytes.

If any of the data in the packet is > than their corresponding Max values, that
means that piece of data is unavailable for the current sample.  (eg.  One of
the receiver misses)

It might also be possible to have the inquire function return a second tags
array describing the possible operating modes available from the glove.  eg.
possible modes:  "Joystick", "X,Y,Z,Rot,Fingers", "Raw", "Sample on demand",
"Sample rate".  An extra function is used to set the glove into one or more
operating modes.  The program might also ask the glove to only include a
selected list of data in each packet. (ie.  The program get what it wants, not
everything the glove gets. This is to lower the overhead of data communication
between the host and the glove.)

I hope I have not gone way of tangent here.    I feel if we are going
to have a standard here, then we should do it right ie. not to limit ourselves
to a particular product or model (eg to save 5 machine cycles) , allow for
expansion in terms of new devices and/or higher resolution. Some of the hard
coder there might want to argue efficiency with me about the extra processing
required...

To me programming in bare metal refers to laying out the transistor connections
in a custom chip that performs the equivalent software function.  :)  If I want
speed, I'll build some hardware for the task.

As for the interrupt/poll, leave it to the particular machine.  I like the
device model on my Amiga that provides both sync & async I/O.  Why force your
particular model (TSR, Interrupt, Polling, Multitasking) on others ???


K. C. Lee
Elec. Eng. Grad. Student


From cliff@jarthur.Claremont.edu Tue Oct 22 09:24:06 1991
Received: from JARTHUR.CLAREMONT.EDU by karazm.math.UH.EDU with SMTP id AA22612
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 18:28:55 -0500
Message-Id: <199110222328.AA22612@karazm.math.UH.EDU>
Date:     Tue, 22 Oct 91 16:24:06 PDT
From: Clifford Stein <cliff@jarthur.Claremont.edu>
To: glove-list@karazm.math.uh.edu
Subject:  standardization

I've been reading about all of the recent mail about standardization
ideas and want to express my concerns.

Standardization is fine and I would like some sort of hardware device as
long as it would be guaranteed to work on my machine (an ST).  Most
importantly, though, I want any hardware developed to be cheap.  I'm a
student and I don't have any full time jobs, tools, or lots of free time to
build/test/finance complex circuits.  I bought myself a glove because a
friend told me of "karazm" and Toys R Us was having a sale on them.  A
simple hardware thingie that just converts the bit stream into a byte stream
for the printer port would be easy to do (just a clock and a
serial-in/parallel-out circuit pretty much, right?).  I think I could even
design something like that myself, if I knew the timing schematics (i.e. for
how many usecs the latch/clocks/data lines stay on/off and such).  Or,
perhaps a little hardware interface that lets me plug it into my RS232 port
and let the computer read the bits coming in.  Either of these would leave
the CPU more free to do other things without worrying about dropping bits.
It would be, most importantly to me, cheap.  I don't particularly care about
standardization, i.e. upwards/backwards compatibility between different
devices and such.  Why not just wait to see if anything else comes out
instead of planning for something that mightn't happen, unless you are thinking
of existing devices like the "U-force" hand thingie?

Also, I've been working on an interrupt-driven assembly version of
"manfredo's" Hires source code for the ST.  Has anyone done this? (I don't
really want to duplicate the effort).  I don't know if I will ever finish
because I do have classes to worry about over here.  However, I wouldn't
mind suggestions, advice, comments or criticism from those who have done
things like this before.


--Cliff Stein
-------------
cliff@jarthur.claremont.edu   |  "Ted Striker?  Never heard of him.  Wait!
cliff@jarthur.uucp  	      |  That's not exactly true.  We were like
...uunet!jarthur!cliff	      |  brothers."
cstein@hmcvax.bitnet          |  		--Buck Murdoch


From motcsd!roi!lance@apple.com Sat Oct 22 10:09:19 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA22763
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 19:52:29 -0500
Received: by apple.com (5.61/18-Oct-1991-eef)
	id AA02350; Tue, 22 Oct 91 17:25:16 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kZWEV-0001QSC@motcsd.csd.mot.com>; Tue, 22 Oct 91 17:14 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA22034; 22 Oct 91 17:09:26 PDT (Tue)
To: menelli@tellabs.com
Subject: Re: PG controller board
Cc: glove-list@karazm.math.uh.edu
Message-Id: <9110221709.AA22019@roi.ca41.csd.mot.com>
Date: 22 Oct 91 17:09:19 PDT (Tue)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>


Handshaking.

	There's no built-in hardware handshake from the PC parallel port
	side.  The only dumb thing is that the parallel port has no
	5V output.  You have to assign an output line as the 5V reference 
	and leave it up all the time, and hope it doesn't source much
	current.

What else can you do with the outboard CPU box?

	If you leave the power glove control code to the dumbest possible,
	there may be enough RAM left over for the cpu could to control a 
	chord (one-handed) keyboard.  This is just a pet project of mine.

	The PC joystick interface is really crummy: it forces you to
	poll the hardware card.  But the hardware is real potentiometers.
	So being able to put a bunch of pots on the analog inputs of
	the 6811 would also be handy.

	Also, a plug for regular Nintendo joysticks would be nice.  
	(Where you buy these plugs I don't know).  There are some
	ergonomic ones appearing in the toy stores.  There was even
	a chest-mounted one (controlled by your chin or something)
	announced by Nintendo two years ago and never sold.

Lance Norskog

From newton@neworder.ils.nwu.edu Tue Oct 22 14:40:55 1991
Received: from casbah.acns.nwu.edu by karazm.math.UH.EDU with SMTP id AA22771
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 19:54:37 -0500
Received: from neworder.ils.nwu.edu by casbah.acns.nwu.edu (4.1/SMI-ACNS-1.03)
	id AA25265; Tue, 22 Oct 91 19:50:27 CDT
Return-Path: <newton@neworder.ils.nwu.edu>
Received: by neworder.ils.nwu.edu (4.0/SMI-4.0)
	id AA00261; Tue, 22 Oct 91 19:40:56 CDT
From: newton@neworder.ils.nwu.edu (Dave Newton)
Message-Id: <9110230040.AA00261@neworder.ils.nwu.edu>
Subject: Transputers...
To: glove-list@karazm.math.uh.edu
Date: Tue, 22 Oct 91 19:40:55 CDT
X-Mailer: ELM [version 2.3 PL11]

Howdy...

I'm trying to figure out why nobody on here has proposed using those $400
T400 transputer cards hooked into a slave-PC to use for rendering...

My idea was basically have a T400 card w/ 1Meg ($396) and perhaps a few
slave cards ($296?).  Each transputer has 10Mips sustained, 20 Mips
peak.  The C compiler will automagically take advantage of other processors
if the code is set up in a parallel fashion.  

Now, color me stupid, but wouldn't this be a cheap way to get a whole bunch
of power?  The transputers could either be used in the main PC or put out
in a slave PC somewhere.  I was planning on getting two dirt-cheap PC boards,
three transputer boards (one for the main CPU, one for each slave) and
communicate to the slave T400 boards using the on-board 20M data link...
Let the slave boards handle the image calculation and spit it out via
J. Random NTSC-board.

From dstamp@watserv1.uwaterloo.ca Tue Oct 22 18:53:13 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA23037
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 21:57:26 -0500
Received: by watserv1.uwaterloo.ca
	id <AA18321>; Tue, 22 Oct 91 22:53:13 -0400
Date: Tue, 22 Oct 91 22:53:13 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110230253.AA18321@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu, newton@neworder.ils.nwu.edu
Subject: Re:  Transputers...

> From glove-list-request@karazm.math.UH.EDU Tue Oct 22 21:09:29 1991
> From: newton@neworder.ils.nwu.edu (Dave Newton)
> Subject: Transputers...
> To: glove-list@karazm.math.uh.edu
> 
> Howdy...
> 
> I'm trying to figure out why nobody on here has proposed using those $400
> T400 transputer cards hooked into a slave-PC to use for rendering...
> 
> My idea was basically have a T400 card w/ 1Meg ($396) and perhaps a few
> slave cards ($296?).  Each transputer has 10Mips sustained, 20 Mips
> peak.  The C compiler will automagically take advantage of other processors
> if the code is set up in a parallel fashion.  
> 
> Now, color me stupid, but wouldn't this be a cheap way to get a whole bunch
> of power?  The transputers could either be used in the main PC or put out
> in a slave PC somewhere.  I was planning on getting two dirt-cheap PC boards,
> three transputer boards (one for the main CPU, one for each slave) and
> communicate to the slave T400 boards using the on-board 20M data link...
> Let the slave boards handle the image calculation and spit it out via
> J. Random NTSC-board.
> 

Yep.. that would give you power.  But what has to be considered is cost
for the power, and software development.  I wouldn't take on the task
myself, because I have little experience in programming the Transputer systems.
You'd have to do at least the rendering stuff in assembly, too.  Have
you got cost quotes on the video cards?  Do they double buffer?  

Eventually we'll have to get renderers on all sorts of platforms.  The
Amiga, Atari, IBM PC etc. are being considered first because they're
the most common.   The Amiga-IBM idea was suggested because of the
dedicated hardware in the Amiga for graphics.  If you can get some
estimates on how fast the Transputer can do graphics, it might be
worth discussing it.

Possible problems:  If the 20M(bit) transputer link is used to talk to the
video buffer, how much overhead is there (i.e. do you have to send both 
address ans data, or is there a burst mode)?  How many units can talk to
the video board at once? etc. etc.  I used to have access to the data
on this stuff, but not currently.  Hope you can fill me in again.

- Dave Stampe

From squier@babbage.ecs.csus.edu Tue Oct 22 12:53:18 1991
Received: from babbage.ecs.csus.edu by karazm.math.UH.EDU with SMTP id AA23044
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 21:58:33 -0500
Received: by babbage.ecs.csus.edu (5.61/1.34)
	id AA17216; Tue, 22 Oct 91 19:53:21 -0700
From: squier@babbage.ecs.csus.edu (Anthony Squier)
Message-Id: <9110230253.AA17216@babbage.ecs.csus.edu>
Subject: Glove Problems
To: glove-list@karazm.math.uh.edu
Date: Tue, 22 Oct 91 19:53:18 PDT
X-Mailer: ELM [version 2.3 PL0]


Subject: Glove Problems 
To: karazm.math.uh.edu@glove-list
From: squier@babbage.csus.ecs.edu
Date: Tue, 22 Oct 91 19:50:22 PDT
X-Mailer: ELM [version 2.3 PL0]

I am not sure if I have a glove that has gone bad or somthing else. 
I was successful in using the software from either Amazing Computing
or Amiga World to get the glove to work in lores on my Amiga. I've also written
my own code as well. But, when I moved the glove to the parallel port (from
the game port originally used for lores), it is now not working. I've not
been able to get the hires Amiga code to work that was posted earlier. The
glove will start to work, then hang. If I unplug the glove from the box and
re-run the program, it runs, then hangs again. Why can this happen.
Could the glove be defective or is it a timing problem? (Come to think of it,
lores code that I've written for the parallel port doesn't work either.)



Thanks

Tony...


From texsun!sunbird!tellab5!sunJe!menelli@Moxie.Hou.TX.US Tue Oct 22 10:38:09 1991
Received: from Menudo.UH.EDU by karazm.math.UH.EDU with SMTP id AA23231
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 22 Oct 1991 23:18:34 -0500
Received: from Moxie.Hou.TX.US by Menudo.UH.EDU with UUCP id AA11264
  (5.65c+/IDA-1.4.4 for karazm.math.uh.edu!glove-list); Tue, 22 Oct 1991 23:14:27 -0500
Received: by moxie.hou.tx.us (Smail3.1.19)
	id <m0kZUjc-0002vVC@moxie.hou.tx.us>; Tue, 22 Oct 91 17:38 CDT
Received: from sunbird.Central.Sun.COM by texsun.Central.Sun.COM (4.1/SMI-4.1)
	id AA24361; Tue, 22 Oct 91 17:20:46 CDT
Received: from tellab5.UUCP by sunbird.Central.Sun.COM (4.1/SMI-4.1-900117)
	id AA29385; Tue, 22 Oct 91 17:20:35 CDT
Received: from sunJe.TELLABS.COM 
	by tellab5.tellabs.com (4.1/smail2.5/10-21-91)
	id AA09170; Tue, 22 Oct 91 15:38:12 CDT
Received: by sunJe.TELLABS.COM (4.0/4.7)
	id AA02225; Tue, 22 Oct 91 15:38:09 CDT
Date: Tue, 22 Oct 91 15:38:09 CDT
From: menelli@sunje.tellabs.com (Ron Menelli)
Message-Id: <9110222038.AA02225@sunJe.TELLABS.COM>
To: glove-list@karazm.math.uh.edu
Subject: More info on 68HC11 controller

Some notes on the 68HC11 power glove controller:

The interface is working better thanks to the addition of Dave Stampe's
hysterisis code (the other deglitching code will be coming soon). I also
have a program similar to the VGA/PG test code that works on the Amiga
with the 68HC11 board interface.

Lance Norskog sent me a number of suggestions, which I plan to incorporate
in one way or another into the design:

    - Add a parallel port interface for added speed. - This should be no
      problem at all if I make sure that only internal processor memory
      is required. (Adding external memory uses up all of the useful
      ports that do handshaking). The only issue here is what type of
      handshaking should be used (I don't know what the IBM parallel port
      is capable of).

    - Don't do deglitching on the microcontroller. - I think since it seems
      to work so well, and it really doesn't take *that* long, I'll keep it
      in and include an option to turn it off.

    - Include a timestamp based on the start of the sample cycle. This
      would be used for synchronization on the receiving side.  - This
      shouldn't be much of a problem, except for potential hardware counter 
      limitations, which I'll look into.

Another plus to the 68HC11 approach is that it has a number of A/D converters
on board which could potentially be used to read the fingers, so we can
disconnect them from the CPU for a faster sample rate. From a quick look at
the HC11 reference manual, it says it can continuously cycle through 4 A/D
inputs and store the digitized values into four registers. The amount of
time it takes to read all four inputs is 64us from start to finish. The
process will run automatically with no software assistance - pretty ideal,
if you ask me. Now we just need to figure out an easy to interface to the
sensors...

Last but not least, if anyone has a 68HC11 evaluation board handy, I could
send you the current version of the code - the more people that use this,
the better we can make it due to all of the suggestions that will be
generated. I should be able to get a schematic made up soon so more people
can try putting it together.

Any more suggestions?
-Ron Menelli
menelli@tellabs.com



      



From jcross@ecel.uwa.oz.au Wed Oct 23 01:42:45 1991
Received: from decel.ecel.uwa.oz.au by karazm.math.UH.EDU with SMTP id AA24018
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 01:42:45 -0500
Received: from accfin.ecel.uwa.oz.au by decel.ecel.uwa.oz.au with SMTP (5.61+IDA+MU)
	id AA17208; Wed, 23 Oct 1991 14:40:59 +0800
From: jcross@ecel.uwa.oz.au (Jennifer Cross - pgmr)
Message-Id: <9110230650.AA17992@accfin.ecel.uwa.oz.au>
Subject: Re: Standards
To: glove-list@karazm.math.uh.edu
Date: Wed, 23 Oct 91 14:50:15 WST
X-Mailer: ELM [version 2.3 PL11]

Forwarded message:
> From: Bernie Roehl <broehl@sunee.waterloo.edu>
> Subject: Standards

> Some micellaneous thoughts on standards:
> 
> After some careful thought, I've come to the conclusion that the various
> VR input devices will be too varied to make a single, universal interface
> practical.
    Depends at which level of abstration you use.  SGI have a neat tool called
    "ConMan"  which uses a pipe type metaphor to "connect" processes.  With
    this, you could "connect" each of the PG output steams to various
    functions and customise the interface without any programming.
    (each process specifies it's input and output sockets to ConMan, and
    it manages the data flow).

 [...]

> Since we wll probably have a set of routines for each VR input device we
> develop, I would propose a naming convention: all the routines related to
> the glove we love will have names prefixed with "glove_".  Thus our
                                    ^^^^^^^^ no no no!  Suffixed!
  hence init_glove()   (perhaps open_glove() might be better)
	read_glove()
        reset_glove()  (Still has a place in life - to reset glove parameters!) 
	close_glove()  (alternative to quit_glove)
  This allows like routines to be grouped by function (again abstracting
  from the specific).  This would also make (next level up) routines like
        init(GLOVE)  reasonable. 

> initialization routine would be glove_init(), our reading routine would
> be glove_read(), and our wrapup routine would be called glove_quit()
> (which, as an earlier poster pointed out, is probably more meaningful
> than "glove_reset()").

  
  Alternatively, would using a "standard" nameing, like those in
  X <sadness>  or Silicon Graphics GL standard (now being adopted by
  several major vendors) be better?
> 
> As to the issue of external microcontrollers... I think it would be nice
> to standardize a protocol for talking to them.  Even though I don't have
> one (yet; we have a 68HC11, and I'm just waiting for the person who has
> the code to post it), here is what I propose:
> 
> Host sends 'H' to board to put glove in hi-res mode
> Host sends 'P' to board to poll it for a 6-byte packet
> Host sends 'C' to board to tell it to send full 12-byte packet continuously
> Host sends 'S' to board to stop continuous sending
> Host sends 'D' to board, followed by a 1-byte byte count, followed by
>      that number of bytes of data to load into a buffer and execute
  Single byte char command sequences will prove limiting very quickly
  (esp. if you want to stick to "meaningful" assignments ?What does D stand
  for anyway Debug/Dump/Directly exec?)  use numeric commands and reserve
  (top?) bit for "extended command"  - 127 "risc" standard commands and
  127 _Groups_ of additional commands.  so a command like "init" might
  use a group  - init/all, init/fingers, init/pos, etc. but a command like
  poll current position might be 82 (hex 0x52) anyone know the char? :-)

> -- 
> 	Bernie Roehl, University of Waterloo Electrical Engineering Dept
> 	Mail: broehl@sunee.waterloo.edu OR broehl@sunee.UWaterloo.ca
> 	BangPath: watmath!sunee!broehl
> 	Voice:  (519) 885-1211 x 2607 [work]
> 
Great Job - managed to provoke me to submit! (No I dont have a PG yet, just
can't afford a DG!)
--        ___
         (   >                  /)                        (voice) +61 9 362 6680
          __/_/> ____  ____  o //  _  __            (home)  cjcross@DIALix.oz.au
         / / (__/ / <_/ / <_<_//__</_/ (_ @ Beautiful Perth, Western Australia
        <_/                  />                     (work) jcross@ecel.uwa.oz.au
                            </                            (voice) +61 9 380 3879

From madsax@u.washington.edu Tue Oct 22 16:46:45 1991
Received: from milton.u.washington.edu by karazm.math.UH.EDU with SMTP id AA24037
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 01:50:53 -0500
Received: by milton.u.washington.edu
	(5.65/UW-NDC Revision: 2.1 ) id AA00500; Tue, 22 Oct 91 23:46:45 -0700
Date: Tue, 22 Oct 91 23:46:45 -0700
From: Mark A. DeLoura <madsax@u.washington.edu>
Message-Id: <9110230646.AA00500@milton.u.washington.edu>
Sender: madsax@milton.u.washington.edu
To: glove-list@karazm.math.uh.edu
Subject: Re: Specifics on VPL's Mac

Greg Newby says:
> They use a high-end model (Mac II cx or fx), 16 Meg ram.  The Mac runs
> a proprietary program (set of programs, really), called "Body 
> Electric."  I only used this a little bit, but it was basically
> an object definition language -- the programmer would specify
> objects and give them characteristics.  The programming language
> didn't seem much different from Hypercard, or maybe a database
> definition language.  Things such as:
> 	define ball
> 		 can move
> 		 has gravity
> 		 size = 10
> 		 shape = round
> 		 initial position..
> etc.  That's not how the language looked, but those are the types
> of characteristics that were defined.

	Actually, that's just the scripting language-- the main part
of the program consists of what looks amazingly like LogicWorks-- a
circuit-building program.  You drag a "+" object, connect it to a constant
and some other things, dee da dee da.  So, it's a dataflow language, 
essentially.  Which causes some problems...variables are a total pain
to try to work with (*WHAT* variables?), and the latest version I worked
with didn't have much support for floating point.  Anyway, I'm not
very fond of it. :)  Nice concept, though.
> 
> Didn't VPL have a demonstration at SIG/GRAPH with only one Iris?  Or
> was it an Iris and a Mac...
	
	We've got ours running on a Mac and an SGI, now-- using a splitter
board to get the stereo.  I hear that they're planning on creating a 
combination of Swivel-3D (the modeller), Body Electric (the dataflow
language), and extra tools-- all in one package, and running on the SGI
platform.  Sounds promising.
>   Anyway, that fills in a few details...
> -- Greg
> gbnewby@alexia.lis.uiuc.edu
	And, a few more details.	
		---Mark

===============================================================================
Mark A. DeLoura    madsax@milton.u.washington.edu      University of Washington
	"...the paneled room folded itself through a dozen impossible
	 angles, tumbling away into cyberspace like an origami crane." 
					--William Gibson, _Neuromancer_

From nik@bu-it.bu.edu Wed Oct 23 04:02:35 1991
Received: from BU-IT.BU.EDU by karazm.math.UH.EDU with SMTP id AA24527
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 07:06:58 -0500
Received: from BUITC.BU.EDU by bu-it.bu.edu (5.61+++/Spike-2.1)
	id AA29509; Wed, 23 Oct 91 08:02:39 -0400
From: nik@bu-it.bu.edu (Nik Conwell)
Received: by buitc.bu.edu (5.61+++/Spike-2.0)
	id AA19091; Wed, 23 Oct 91 08:02:35 -0400
Date: Wed, 23 Oct 91 08:02:35 -0400
Message-Id: <9110231202.AA19091@buitc.bu.edu>
To: ccnc@buacca.bu.edu, glove-list@karazm.math.uh.edu,
        squier@babbage.ecs.csus.edu
Subject: Re:  Glove Problems

squier@babbage.ecs.csus.edu (Anthony Squier) writes:

>I am not sure if I have a glove that has gone bad or somthing else.
>I was successful in using the software from either Amazing Computing
>or Amiga World to get the glove to work in lores on my Amiga. I've written
>my own code as well. But, when I moved the glove to the parallel port (from
>the game port originally used for lores), it is now not working. I've not
>been able to get the hires Amiga code to work that was posted earlier. The
>glove will start to work, then hang. If I unplug the glove from the box and
>re-run the program, it runs, then hangs again. Why can this happen.
>Could the glove be defective or is it a timing problem? (Come to think of it,
>lores code that I've written for the parallel port doesn't work either.)


I tried my glove last night using the hires hack (from mab@druwy.att.com).
(On a 2000 w/ 1.2 (soon to be 2.0 once I can find it somewhere.....)).

That code as supplied won't work with a glove wired in the Byte hack way
(Alan Bland used pin 4 where the byte hack uses pin 13).  My glove is also
wired the Byte hack way.  I looked at the code, and determined that to get
pin 13 data, you have to use cia b, instead of cia a (for the getbit() function
in glovehack/glove.c).  Looking the the manuals it appears that the & of
0x04 will mask out the correct bit (it's called select) and the >> 2 will
shift it to the rightmost bit.

When I start the code up, I get values for the x y z rot finger (etc) stuff.
I'm not sure if this stuff is valid or not, not knowing what a valid run has
in it.  Then, after a few seconds, all I seem to be getting in is 0xff, and
other runs of the characters.  The glove still works ok, and the directional
leds light up occasionally.

That's another problem.  Sometimes the directionals seem to be lighting up
totally randomly.  I point the glove down, and sometimes the up and right ones
will light up.  The finger ones seem to behave (after I've made a fist a few
times).  Also, when I run program 2, and center the glove, it still keeps on
beeping as though it wasn't at the center.  Is this an indication of noise,
and bad placement as others indicated before?  (My computer is placed in a 
corner, and I wasn't in the mood to unplug it, and move it all around yesterday
just to test this out).

Any insight is welcome.
Thanks.
-nik
--
nik@bu-it.bu.edu

From cygnus@wpi.WPI.EDU Wed Oct 23 05:34:23 1991
Received: from wpi.WPI.EDU by karazm.math.UH.EDU with SMTP id AA24774
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 09:38:43 -0500
Received: from yaya.WPI.EDU by wpi.WPI.EDU (5.65/4.7)
	id AA23665; Wed, 23 Oct 91 10:34:25 EST
From: cygnus@wpi.WPI.EDU (Marshall Robin)
Received: by rugsucker (5.65/CCC-2.0)
	id AA23321; Wed, 23 Oct 91 10:34:23 EST
Date: Wed, 23 Oct 91 10:34:23 EST
Message-Id: <9110231434.AA23321@rugsucker>
To: glove-list@karazm.math.uh.edu, madsax@u.washington.edu
Subject: Re: Specifics on VPL's Mac

Hello. I am looking at graduate schools to find one with a program in
VR (or whatever the new and trendy term for it is). Many people have mentioned
University of Washington, and I was wondering if you knew who would be the
person to contact with respect to that program/project. I have already
contacted graduate admissions, and received the admissions packet. I am looking
for in-depth information regarding the VR research program at UWashington.
Thank you in advance for your help.

Marshall Robin


From cygnus@wpi.WPI.EDU Wed Oct 23 05:45:45 1991
Received: from wpi.WPI.EDU by karazm.math.UH.EDU with SMTP id AA24885
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 09:49:55 -0500
Received: from yaya.WPI.EDU by wpi.WPI.EDU (5.65/4.7)
	id AA01390; Wed, 23 Oct 91 10:45:47 EST
From: cygnus@wpi.WPI.EDU (Marshall Robin)
Received: by rugsucker (5.65/CCC-2.0)
	id AA23421; Wed, 23 Oct 91 10:45:45 EST
Date: Wed, 23 Oct 91 10:45:45 EST
Message-Id: <9110231445.AA23421@rugsucker>
To: glove-list@karazm.math.uh.edu
Subject: Oops!


Sorry....please ignore that....

-marshall

From dstamp@watserv1.uwaterloo.ca Wed Oct 23 06:57:32 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA25063
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 10:01:47 -0500
Received: by watserv1.uwaterloo.ca
	id <AA21945>; Wed, 23 Oct 91 10:57:32 -0400
Date: Wed, 23 Oct 91 10:57:32 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110231457.AA21945@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu
Subject: eyephone projects


I would be interested to hear descriptions of any homebrew eyephone
projects that have been completed.  What diplays are you using?
Monochrome or color?  Binocular or monocular?  Field of view?
Optics?  Are you monitoring the user's head positon?  Weight?
I'm trying to get an idea of the level of sophistication that
is currently being used, for use in future postings.

Please post to the list, as I'm sure others care too!

- Dave Stampe

From nik@bu-it.bu.edu Wed Oct 23 07:48:34 1991
Received: from BU-IT.BU.EDU by karazm.math.UH.EDU with SMTP id AA25266
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.UH.EDU>); Wed, 23 Oct 1991 10:53:05 -0500
Received: from BUITC.BU.EDU by bu-it.bu.edu (5.61+++/Spike-2.1)
	id AA02209; Wed, 23 Oct 91 11:48:38 -0400
From: nik@bu-it.bu.edu (Nik Conwell)
Received: by buitc.bu.edu (5.61+++/Spike-2.0)
	id AA21674; Wed, 23 Oct 91 11:48:34 -0400
Date: Wed, 23 Oct 91 11:48:34 -0400
Message-Id: <9110231548.AA21674@buitc.bu.edu>
To: glove-list@karazm.math.UH.EDU, squier@babbage.ecs.csus.edu
Subject: Re:  Glove Problems   AND ALT.POWER-GLOVE anyone??
Cc: ccnc@buacca.bu.edu

squier@babbage.ecs.csus.edu (Anthony Squier) writes:

>nik@bu-it.bu.edu (Nik Conwell) writes:
>> When I start the code up, I get values for the x y z rot finger (etc) stuff.
>> I'm not sure if this stuff is valid or not, not knowing what a valid run has
>> in it.  Then, after a few seconds, all I seem to be getting in is 0xff, and
>> other runs of the characters.  The glove still works ok, and the directional
>> leds light up occasionally.

>My lights don't appear to be acting normally, but the glove does start giving
>data for a few seconds then hangs with 0xff like you described. I have to
>unplug it and start over.

Did you also try glove stuff?  I found that pressing start, and then making
a fist a few times, and then centering the glove, and pressing center seems to
help sometimes.  Perhaps the glove 'times out' or something like that, when
you don't make a fist (or something) within a short amount of time.  What does
everyone else do when they fire it up??


Also:  Does anybody have any software, or knowledge of how to relay a mailing
list to a newsgroup (and the other way too).  As has been mentioned before,
the traffic seems to warrant a newsgroup.  Why not make an alt.power-glove (we
can vote on a decent name if need be), and also mirror it to the mailing list,
so that non alt sites can get at the info too.  Can this relaying from list
to newsgroup be done anywhere or does it have to be done at the site where
the mailing list is done from??  If not, and this software works with NNTP,
without needing news admin, etc. stuff, then I guess I'm willing to run it
here.  Getting all this stuff in mail is a bit of a pain, when it seems to be
more newsgroup related.  Any comments??
-nik
--
nik@bu-it.bu.edu

From jxw1578@cs.rit.edu Wed Oct 23 07:44:53 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA25330
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 11:00:38 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA14935; Wed, 23 Oct 91 11:56:21 -0400
Received: from aird.CS (aird.ARPA) by junior.rit.edu (4.1/5.17)
	id AA29640; Wed, 23 Oct 91 11:44:53 EDT
Date: Wed, 23 Oct 91 11:44:53 EDT
From: jxw1578@cs.rit.edu (John X Whitehurst)
Message-Id: <9110231544.AA29640@junior.rit.edu>
To: glove-list@karazm.math.uh.edu
Subject: addition to the list


I'd like to be added to the power glove mailing list

	John Whitehurst
	jjw1578@ultb.isc.rit.edu

From dirish@math.utah.edu Wed Oct 23 04:22:20 1991
Received: from math.utah.edu (csc-sun.math.utah.edu) by karazm.math.UH.EDU with SMTP id AA25508
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 11:26:38 -0500
Received: from alfred.math.utah.edu by math.utah.edu (4.1/SMI-4.1-utah-csc-server)
	id AA06306; Wed, 23 Oct 91 10:22:23 MDT
Received: by alfred.math.utah.edu (5.57/Ultrix3.0-C)
	id AA28492; Wed, 23 Oct 91 10:22:20 -0600
Date: Wed, 23 Oct 91 10:22:20 -0600
From: dirish@math.utah.edu
Message-Id: <9110231622.AA28492@alfred.math.utah.edu>
To: glove-list@karazm.math.uh.edu
In-Reply-To: Dave Stampe-Psy+Eng's message of Tue, 22 Oct 91 22:53:13 -0400 <9110230253.AA18321@watserv1.uwaterloo.ca>
Subject:  Transputers...

I have also considered transputers for high speed rendering.  I was
interested in complex scenes with thousands of polygons rather than
stereo, but they should work for either.  My idea was one transputer
with lots of ram to store the display list and n transputers suitably
connected to video ram to do the rendering.  Then the PC would be used
to control the whole system and to talk to the user.  After seeing the
specs on the new T9000 (Byte, August 1991) I realized that these would
make a very powerful system.  However, at this point in time I don't
have the money to buy a bunch of transputers.  (Just an aside, there
really isn't an assembly language for the transputer.  If the C
compiler doesn't generate fast enough code for you then you would
write in OCCAM.  However, from what I have heard of the quality of the
C compiler, you are unlikely to need to do this.)

However, I haven't given up on the transputer.  If you have addresses
for companies which are selling PC transputer cards I would love it if
you sent them to me.

I really think that people who are interested in VR are going to have
to look at some kind of parallel architecture.  It is very unlikely
that you will be able to get a single serial CPU that is fast enough.
Also, VR is quite amenable to parallelizing.  A cpu for input devices,
a cpu (or more) for stereo output, a cpu for sound, a cpu for the
motion platform, a big cpu to coordinate things, and a collection of
cpu's to model objects.  The only question is whether 100Mbps
interconnect is fast enough.  Anybody know of a transputer board that
has NTSC output and another with a/d and parallel inputs?

Dudley Irish
________________________________________________________________________
Dudley Irish / dirish@math.utah.edu / Manager Computer Operations
Center for Scientific Computing, Dept of Mathematics, University of Utah

The views expressed in this message do not reflect the views of the
Dept of Mathematics, the University of Utah, or the State of Utah.

From jim@kaos.stanford.edu Wed Oct 23 03:28:31 1991
Received: from fou-local (fou.Stanford.EDU) by karazm.math.UH.EDU with SMTP id AA25989
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 12:32:13 -0500
Received: from localhost.Stanford.EDU by fou-local (4.1/inc-1.0)
	id AA18945; Wed, 23 Oct 91 10:28:32 PDT
Message-Id: <9110231728.AA18945@fou-local>
To: glove-list@karazm.math.uh.edu
Subject: Re: Transputers... 
In-Reply-To: Your message of "Wed, 23 Oct 91 10:22:20 MDT."
             <9110231622.AA28492@alfred.math.utah.edu> 
Date: Wed, 23 Oct 91 10:28:31 -0700
From: James Helman <jim@kaos.stanford.edu>


    A cpu for input devices, a cpu (or more) for stereo output, a cpu
    for sound, a cpu for the motion platform, a big cpu to coordinate
    things, and a collection of cpu's to model objects.

This is very close to what Division Ltd. system does.  Their ProVision
system even uses transputers (Iann Barron from Inmos is Division's
chairman) with a couple i860's thrown in for FP speed.  MP systems can
provide better price/performance.  The big question is whether the
general purpose MP's (off the shelf PCs, Suns or SGIs) will get cheap
enough, fast enough.  If not, special purpose systems whether home
brewed or off-the-shelf like PROVision look attractive.

-jim

Jim Helman					Lab:  (415) 723-9127
Stanford University				FAX:  (415) 591-8165
(jim@KAOS.stanford.edu) 			Home: (415) 593-1233

"The power of the computer is locked behind a door with no knob."
							-B. Laurel


From newton@neworder.ils.nwu.edu Wed Oct 23 07:22:17 1991
Received: from casbah.acns.nwu.edu by karazm.math.UH.EDU with SMTP id AA26037
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 12:36:00 -0500
Received: from neworder.ils.nwu.edu by casbah.acns.nwu.edu (4.1/SMI-ACNS-1.03)
	id AA22344; Wed, 23 Oct 91 12:31:49 CDT
Return-Path: <newton@neworder.ils.nwu.edu>
Received: by neworder.ils.nwu.edu (4.0/SMI-4.0)
	id AA00815; Wed, 23 Oct 91 12:22:18 CDT
From: newton@neworder.ils.nwu.edu (Dave Newton)
Message-Id: <9110231722.AA00815@neworder.ils.nwu.edu>
Subject: Re: Transputers...
To: glove-list@karazm.math.uh.edu
Date: Wed, 23 Oct 91 12:22:17 CDT
In-Reply-To: <9110231622.AA28492@alfred.math.utah.edu>; from "dirish@math.utah.edu" at Oct 23, 91 10:22 am
X-Mailer: ELM [version 2.3 PL11]

In a previous message, dirish@math.utah.edu said:
> (Just an aside, there really isn't an assembly language for the transputer.

   That strikes me as odd, since the $396 T400 board I mentioned comes with
C, Occam, and assembly.

> However, I haven't given up on the transputer.  If you have addresses
> for companies which are selling PC transputer cards I would love it if
> you sent them to me.

> The only question is whether 100Mbps interconnect is fast enough.

   Um, I would certainly hope so.  That two-page article about the VPL thing
was using straight ethernet for their interconnects.  If 100M isn't fast
enough, there's a serious software problem, I'd have to say.

From jet Wed Oct 23 08:00:54 1991
Received: by karazm.math.UH.EDU id AA26256
  (5.65c/IDA-1.4.4 for glove-list@karazm.math.uh.edu); Wed, 23 Oct 1991 13:00:54 -0500
From: J Eric Townsend <jet>
Message-Id: <199110231800.AA26256@karazm.math.UH.EDU>
Subject: Re: Transputers...
To: newton@neworder.ils.nwu.edu (Dave Newton)
Date: Wed, 23 Oct 91 13:00:54 CDT
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: <9110231722.AA00815@neworder.ils.nwu.edu>; from "Dave Newton" at Oct 23, 91 12:22 pm
X-Mailer: ELM [version 2.3 PL11]

>> The only question is whether 100Mbps interconnect is fast enough.
>   Um, I would certainly hope so.  That two-page article about the VPL thing
>was using straight ethernet for their interconnects.  If 100M isn't fast
>enough, there's a serious software problem, I'd have to say.


Ether isn't fast enough for parallel computing.. Intel found this out
with the iPSC/1.  The iPSC/2 and iPSC/860 use proprietary "Direct Connect"
technology that runs dedicated bit-stream lines w/ almost no protocol from
one node to the next.


-- 
J. Eric Townsend - jet@uh.edu - Systems Wrangler, UH Dept of Mathematics
vox: (713) 749-2126  '91 CB750, DoD# 0378, TMRA# 27834
PowerGlove mailing list: glove-list-request@karazm.math.uh.edu
"allow users to create more impactful documents" -- from an Apple press release

From jdb9608@cs.rit.edu Wed Oct 23 11:28:07 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA26638
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 14:28:33 -0500
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA23732; Wed, 23 Oct 91 15:24:19 -0400
Received: from texas.CS (texas.ARPA) by junior.rit.edu (4.1/5.17)
	id AA00679; Wed, 23 Oct 91 15:12:53 EDT
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110231912.AA00679@junior.rit.edu>
Subject: Re: Standardization Ideas....
To: LEEK@qucdn.queensu.ca
Date: Wed, 23 Oct 91 15:28:07 EDT
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: <199110222259.AA22487@karazm.math.UH.EDU>; from "LEEK@QUCDN.QueensU.CA" at Oct 22, 91 6:51 pm
X-Mailer: ELM [version 2.3 PL8]

> I hope I have not gone way of tangent here.    I feel if we are going
> to have a standard here, then we should do it right ie. not to limit
> ourselves to a particular product or model (eg to save 5 machine
> cycles) , allow for expansion in terms of new devices and/or higher
> resolution. Some of the hard coder there might want to argue
> efficiency with me about the extra processing required...

I agree!  A few microseconds every loop, much longer once in the
initialization, or more complex implementations of the standard
interface are all worth it.

> As for the interrupt/poll, leave it to the particular machine.  I like the
> device model on my Amiga that provides both sync & async I/O.  Why force
> your particular model (TSR, Interrupt, Polling, Multitasking) on others ???
> 
> K. C. Lee

I think it would be good to have the standard provide both, too.

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From dstamp@watserv1.uwaterloo.ca Wed Oct 23 11:31:19 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA26668
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 14:35:29 -0500
Received: by watserv1.uwaterloo.ca
	id <AA19069>; Wed, 23 Oct 91 15:31:19 -0400
Date: Wed, 23 Oct 91 15:31:19 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110231931.AA19069@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu, newton@neworder.ils.nwu.edu
Subject: Re: Transputers...

> From glove-list-request@karazm.math.UH.EDU Wed Oct 23 13:50:33 1991
> From: newton@neworder.ils.nwu.edu (Dave Newton)
> Subject: Re: Transputers...
> To: glove-list@karazm.math.uh.edu
> 
> In a previous message, dirish@math.utah.edu said:
> > (Just an aside, there really isn't an assembly language for the transputer.
> 
>    That strikes me as odd, since the $396 T400 board I mentioned comes with
> C, Occam, and assembly.
> 
> > However, I haven't given up on the transputer.  If you have addresses
> > for companies which are selling PC transputer cards I would love it if
> > you sent them to me.
> 
> > The only question is whether 100Mbps interconnect is fast enough.
> 
>    Um, I would certainly hope so.  That two-page article about the VPL thing
> was using straight ethernet for their interconnects.  If 100M isn't fast
> enough, there's a serious software problem, I'd have to say.
> 

Actually, VPL is just sending world database updates by Ethernet, which
is OK.  But we're talking about sending rendered pixels to the video board,
which, for a 500x500x24 bit picture, needs 6 Mbits/sec times the frame rate!
Can the video board handle this data rate???  If ypu use 4 transputers, can
they SEND this rate???  For our purposes, I think the world database
could reside on one transputer, which does preliminary clipping and
sends polygon and attribute lists to the other transputers.  IF the
video board can handle the input speed, this idea will work.  But not
if you have to design a custom video buffer... Or, how about using
4 video boards, genlocking them, and switching between them as their 
video segments occur???

Will I run out of "?????"'s???

- Dave Stampe

From motcsd!roi!lance@apple.com Sun Oct 23 05:50:27 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA27121
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 15:33:00 -0500
Received: by apple.com (5.61/18-Oct-1991-eef)
	id AA08528; Wed, 23 Oct 91 13:21:16 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kZofP-00010pC@motcsd.csd.mot.com>; Wed, 23 Oct 91 12:55 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA07488; 23 Oct 91 12:50:29 PDT (Wed)
To: jim@KAOS.stanford.edu
Subject: transputers and division
Cc: glove-list@karazm.math.uh.edu
Message-Id: <9110231250.AA07476@roi.ca41.csd.mot.com>
Date: 23 Oct 91 12:50:27 PDT (Wed)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>


Division's PC product board pair is one 860 on one card and
two Toshiba 3d rendering chips on the other.  I got Toshiba
to send me glossies on the chips.  They do 20k gouraud-shaded
tris a second, and I don't remember if they actually do 3d
projection matmuls or not.

Toshiba (San Jose) refused to send chip spec sheets, claiming 
that the chip was only for very high-volume customers who sent their
engineers to Toshiba Chip U in Japan to learn how to design
with the sucker.  Sounded like a shuck but you never know...

Lance Norskog

From narf@u.washington.edu Wed Oct 23 06:41:57 1991
Received: from milton.u.washington.edu by karazm.math.UH.EDU with SMTP id AA27154
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 15:46:08 -0500
Received: by milton.u.washington.edu
	(5.65/UW-NDC Revision: 2.1 ) id AA03324; Wed, 23 Oct 91 13:41:57 -0700
Date: Wed, 23 Oct 91 13:41:57 -0700
From: Francis Taylor <narf@u.washington.edu>
Message-Id: <9110232041.AA03324@milton.u.washington.edu>
Sender: narf@milton.u.washington.edu
To: glove-list@karazm.math.uh.edu
In-Reply-To: Lance Norskog's message of 22 Oct 91 17:09:19 PDT (Tue) <9110221709.AA22019@roi.ca41.csd.mot.com>
Subject: PG controller board
Reply-To: narf@hitl.washington.edu

Regarding getting +5 from signal lines on the printer port: you really
don't want to drag on the output lines in this way, unless you're
going to consume close-to-zero current. Look at the high-level current
output ratings for an LS244 and you'll see what I mean.

My favorite hack is to connect to a disk drive power supply connector
(the 4 pin white plastic guys).  You get lots of regulated +5 and +12.
It's usually pretty easy to snake an extra floppy cable out through a
hole in the back of the machine.

If you don't have an extra power connector, you can get a Y-adapter at
any half-decent computer store.

If you can't et to a floppy power cable, then you can use a plug-mount
power supply, and put the floppy power connector on the end of it, so
the interface can run from either.

From narf@u.washington.edu Wed Oct 23 06:49:33 1991
Received: from milton.u.washington.edu by karazm.math.UH.EDU with SMTP id AA27172
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 15:54:13 -0500
Received: by milton.u.washington.edu
	(5.65/UW-NDC Revision: 2.1 ) id AA06378; Wed, 23 Oct 91 13:49:33 -0700
Date: Wed, 23 Oct 91 13:49:33 -0700
From: Francis Taylor <narf@u.washington.edu>
Message-Id: <9110232049.AA06378@milton.u.washington.edu>
Sender: narf@milton.u.washington.edu
To: dstamp@watserv1.uwaterloo.ca
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: Dave Stampe-Psy+Eng's message of Wed, 23 Oct 91 10:57:32 -0400 <9110231457.AA21945@watserv1.uwaterloo.ca>
Subject: eyephone projects
Reply-To: narf@hitl.washington.edu

The folks at Reflection Technology are showing a gizmo with a welder's
helmet and two Private Eyes.  They stuck a Polhemus on top, and
they're running a flight simulator game.  It's pretty neat. It's
featherweight compared to VPL Eyephones. The contrast is AWESOME, but
the resolution and field-of-view are so-so.  

Disclaimer: I used to work at Reflection Technology and I worked on it
before I left. 

From aaronp@narrator.pen.tek.com Wed Oct 23 08:32:04 1991
Received: from relay.tek.com by karazm.math.UH.EDU with SMTP id AA28685
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 17:52:41 -0500
Received: by relay.tek.com id <AA27160@relay.tek.com>; Wed, 23 Oct 91 15:32:12 -0700
Received: from tekig7.map.tek.com by tektronix.TEK.COM (4.1/7.1)
	id AA25853; Wed, 23 Oct 91 15:32:00 PDT
Received: from narrator.PEN.TEK.COM (narrator.TEK) by tekig7.map.tek.com (4.1/7.1)
	id AA11478; Wed, 23 Oct 91 15:32:05 PDT
Received: from localhost.TEK by narrator.PEN.TEK.COM (4.1/7.1)
	id AA07268; Wed, 23 Oct 91 15:32:05 PDT
Message-Id: <9110232232.AA07268@narrator.PEN.TEK.COM>
To: glove-list@karazm.math.uh.edu
Subject: Moving List to Newsgroup
Date: Wed, 23 Oct 91 15:32:04 -0700
From: aaronp@narrator.pen.tek.com


Creating a new newsgroup is a good idea, but there are some hard questions
that must be answered first.  I am going to pose these questions along 
with some personal comments.

	1. 	Why don't people just start posting to sci.virtual-worlds?

	The moderators (Bob Jacobson and Mark DeLoura) have indicated that
	they would love to have posts on the topics presented here.  Although
	that newsgroup is moderated, it is by no means heavily filtered, all
	posts that are not blatent flames get through.  Discussions about
	high and low end technical issues are encouraged as well as the more
	phisosphical issues that seem to dominate. 

	2.	If a new newsgroup is created, what should it be called?
	
	The discussions have gone beyond the glove, peripherals, and even
	low-end	solutions; the discussions here are simply technical exchanges
	about virtual interface technology.  This is somewhat different from
	sci.virtual-worlds only because most of the posts are announcements
	or philosphical in nature -- but please refer to question #1, we could
	change that.

	Last week I received alot of mail on the naming subject, so I will try
	to summarize:
	
	alt.<anything>:	
		Not enough sites get alt groups so this would require a list
		to mirror the newsgroup as Nik Conwell describes.  Has the
		advantage of not requiring the lengthy newsgroup creation
		process.

	comp.periphs.glove or comp.periphs.virtual:
		Scope is not as broad as the discussions which take place
		here. As stated in the preface to this summary, the
		discussions here have simply gone beyond peripherals.

	comp.sys.virtual:
		comp.sys.* groups are for computer manufacturers, not broad
		application categories.
	
	sci.virtual-worlds.low-end or sci.virtual-worlds.homebrew:
		Those doing 'serious' research are working with both high
		and low end solutions, so it is difficult to draw an arbitrary
		line between what is homebrew and what is not; as the price
		of computer technology is always dropping, what was high-end
		yesterday will be low-end tommorow.  Besides, even if we
		can make a clear distinction, should we?  We have alot to
		learn from each-other and splitting our efforts could be
		counter-productive.

	sci.virtual-worlds.tech:
		Again, refer to question #1.  This name covers the scope of
		these discussions most completely.  It does not, however,
		inhibit high-end discussions as '.low-end' would.  The recent
		discussions on standardization across the high/low 'boundary'
		would fit in nicely.

	3.	If a new newsgroup is created, should it be moderated?

	Many people feel that moderation inhibits people from posting.
	Others stress that moderation provides a clean way to archive and
	produce FAQ answer lists.  Another concern is that all the 
	virtual-worlds traffic will go to the un-moderated (un-archived?)
	newsgroup, leaving the other in the cold.  Several people, including
	myself, have volunteered to moderate if the consensus leans towards
	this option.


I will post a straw-poll next so that I can easily tally up people's feelings
on the name and moderation issues; I will also be interested in hearing 
what people have to say about these questions and my comments.

--
"when there is no answer,
 we are free to think." -- 1991 Portland Creative Conference
--
        +--------------\
        | Aaron Pulkka  >       aaronp@narrator.PEN.TEK.COM
        +--------------/

From aaronp@narrator.pen.tek.com Wed Oct 23 09:03:35 1991
Received: from relay.tek.com by karazm.math.UH.EDU with SMTP id AA28826
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 18:18:23 -0500
Received: by relay.tek.com id <AA27284@relay.tek.com>; Wed, 23 Oct 91 16:03:44 -0700
Received: from tekig7.map.tek.com by tektronix.TEK.COM (4.1/7.1)
	id AA26999; Wed, 23 Oct 91 16:03:32 PDT
Received: from narrator.PEN.TEK.COM (narrator.TEK) by tekig7.map.tek.com (4.1/7.1)
	id AA12323; Wed, 23 Oct 91 16:03:34 PDT
Received: from localhost.TEK by narrator.PEN.TEK.COM (4.1/7.1)
	id AA07302; Wed, 23 Oct 91 16:03:37 PDT
Message-Id: <9110232303.AA07302@narrator.PEN.TEK.COM>
To: glove-list@karazm.math.uh.edu
Subject: STRAW-POLL: New Newsgroup Name
Date: Wed, 23 Oct 91 16:03:35 -0700
From: aaronp@narrator.pen.tek.com


Please reply directly to me, rather than the glove-list, with 'STRAW-POLL'
somewhere in the subject line.  In the body of the message indicate your
choice for the name and whether or not you think the group should be
moderated.

NAME (choose one):

	alt.glove
	comp.periphs.glove
	comp.periphs.virtual
	sci.virtual-worlds.homebrew
	sci.virtual-worlds.low-end
	sci.virtual-worlds.tech
	Other _____________________

MODERATION:

	Yes
	No
	Don't Care

Thank you for your input :)

        +--------------\
        | Aaron Pulkka  >       aaronp@narrator.PEN.TEK.COM
        +--------------/

From cliff@jarthur.Claremont.edu Wed Oct 23 09:18:16 1991
Received: from JARTHUR.CLAREMONT.EDU by karazm.math.UH.EDU with SMTP id AA28847
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 18:23:50 -0500
Message-Id: <199110232323.AA28847@karazm.math.UH.EDU>
Date:     Wed, 23 Oct 91 16:18:16 PDT
From: Clifford Stein <cliff@jarthur.Claremont.edu>
To: glove-list@karazm.math.uh.edu
Cc: cliff@jarthur.Claremont.edu
Subject:  [manfredo:  Re: standardization]

Manfred Krauss asked me to forward this to the list:

There's a PostScript PowerGlove timing thing at the end of this, so don't
nuke this message yet.

----- Forwarded message # 1:

Received: from opal.cs.tu-berlin.de by jarthur.Claremont.edu id aa09760;
          23 Oct 91 12:39 PDT
Received: from medap1.cs.tu-berlin.de by opal.cs.tu-berlin.de with SMTP id AA06367
  (5.65c/IDA-1.4.4 for <cliff@jarthur.claremont.edu>); Wed, 23 Oct 1991 20:36:42 +0100
Received: by medap1.cs.tu-berlin.de (4.1/SMI-4.1)
	id AA01135; Wed, 23 Oct 91 20:36:31 +0100
From: manfredo@medap1.cs.tu-berlin.de (Manfred Krauss)
Message-Id: <9110231936.AA01135@medap1.cs.tu-berlin.de>
Subject: Re: standardization
To: glove-list-request@karazm.math.UH.EDU (Clifford Stein)
Date: Wed, 23 Oct 91 20:36:30 MET
Cc: cliff@jarthur.claremont.edu
In-Reply-To: <199110222328.AA22612@karazm.math.UH.EDU>; from "Clifford Stein" at Oct 22, 91 4:24 pm
X-Mailer: ELM [version 2.3 PL6]

[...stuff deleted...]

Last week I've ported my power.c code to a quad i860 graphics hardware.
After I inserting a delay of 3us after every register access on this fast
hardware, the code works very well. Delays are made using a timer.
The solution of some jitter problems on the ST should be to use a timer
to get constant delays. For me the ST was only a tool to prove hires.
My aim is to use a 68HC11 evaluation board which I ordered from a local
dealer here in Berlin. Prices are as follows:

$55 Qty. of 1
$43 Qty. of 5
$39 Qty. of 10

Development $162.5 kit for IBM-PC with:

68HC11 evaluation board
RS232 interface module
serial cable to PC
documentation (in german)
terminal program to communicate with 68HC11 ev. board
eeprom burning software for 68HC11
X-assembler 
some tools

Board dimension is 51x54mm

The prices are are with german tax so outside of germany the
prices are lower I think.

All boards come up with a little monitor inside the eeprom to
make first steps.


BTW. I've drawn the PG timing (in POSTSCRIPT). 

Cliff could you please forward this mail to the glove-list,
I can't get through and get no bad message from my mailer so
jet what's on ???

Thanks in advance
manfredo

To extract the drawing, cut, uudecode, uncompress, print ....
Hope there is no bug in it.


---------------------- cut here ----------------------------
begin 664 pgtiming.ps.Z
M'YV0)4" @/)F#ITI8^2D@4.G19(V8<Z4T2&PC!P]9>J<H0.B31J.0M*P(6.Q
M!10Y;\[("=.F#0@K%N>D>>,&A)TW+D'(R.$"1 T7.6((K**D@8*  I,J7<J4
MI4 8/:'*@"$#!X@Z.6%0E+'5:, E.K@T*7($2I D3JAP@7*$2I(F1V+{body}lt; %E
M"M.[>//>-6KT1<B126/8L '"H$(W9T"0-,-70=*I2B'36>EF#ILP=,H8%5@C
M!HRD-W!\GC,F#!O-CO-^1DD',^K-,694%3A5-@BA6V[+MOKY<XO:,D!\U@E#
M=A>C>T",J2-'3ADW=,R(+ /B+QD0SL.005,&C^$TB


 >0,'1!^C:2!*-&JD
MO?OW\./+GT^_OOW[[=GCW\^_O__W^OTGX( $!DC@@0C:9V""##9HQ((.1C@@
MA!)6R!^%%F98'X8:=@@?AQZ&"&*('8Y(8H8FGEAABBI&R&*+#;X(8X(RSGA@
MC39.J$".(N[(8XD^_HABD$*N2&21+AZ)9(Q*+DECDT[>"&64.E+I((Y6SL>A
M:#!TZ>678(8IYIADEFFFET:=J>::;+999IHPW)"EE',^2: 0=3XX99[XL2@G
MGQ_N">B&@AZ()X]8#IIH?'\ZN2B?CR)XZ)"#"A@I?XV>>.F<FV8XJ:6%5AI?
MIPEFRB"I5*(*XZ>CABHJ@*X6:>I]JCH:ZZMZ&L$JKEK>FJ>IM2X9+)(I[@KH
ML$5"."NON3)+JZ_S&2LDLM-"NZR5U/Z8;7O2 NGLLQ5>"^.V.9)[7[<%0ENI
MN>^)F^2W"JH[([J]PDNHE>Y>*.^Q^T:Y*[OC]IMCOOD)7"? +2Y(KZ@(DRAG
MPYH:S*FO"PLK,7XS!&S$/,1?/#%V(+,K<5(%F'D?LMZ7*[(42)<\:DL9TC$
M?YT:J[*%$).8,WV3BI:Q?T7 8)3)NOHWZ<OR{body}lt;UH?SD8H72SGYHZ\\SU43U?
MTTM3:F^]KTY:Q T<RP=BTS*T]S-_9\= X!"S%G$VU^XUS39\:K?G-GQ-XV"?
MWO1A#=_-K6X-M^!%Y_KUU_TAKO<0;]_'N'M(Q_<TK(!G/'GA[65:A-I6S]=Y
M?&'_3=_.'I+N;;3N(=ZX?403O;I]K^MKQ.<'QF[WU?8M''K!F1/NGND:+NJU
MG+;+%SKQ_A6?(NT$%G]Y>WZC'BCH\@%.;,PD>YHZ\OP=;T3Q@8-_7_0'(D[?
M[N^1WZQ[XIO?;JK87\_C\-_WA_[;*8IO7]T)NB\?W^N#7GWNQKI96<].OH-5
MG8:GN(SA8 8/A,'&,C:$(1CE!N2SG 2#9@.UX6!6,Y#@[. S [4];@@QT%R<
MC" G(4A0A'@BP@>=!@/^O<=\%]25"&=6G**A4( F$XT'*;C!]CRP/1VTFP$E
M!#RM,<MK,>#8URRXHRD6+0<<@X$09I!!(S0M8TTCGOJJ(B<;#D{body}amp;',.BKOSG
MQ8W=H AHM ';[B88"A;!*#;<GAOA.#<3.BUC,PA;WHHV@Z]AS8%. ]O&:L W
M-K+0/TW$6?R2M2.O)5&*;U0DG@H)MAMPD83U:UH8K4BWNY$OBM_[FIQ,U;0I
MQN"."G@E((-F!+5],6ER<J4I-V:V5,I);NPC)05Y^;4'SLV1P)IDM1*HP'/I
M<80LM*(0#J?(-KXG8W*:61@YAK[Z@1&4U/S9@EJ)/$"&LHVWE%PNR]G&L/T,
M<<!,9'O<R4NJ91)Q7U.6X")YL@31SYJ<U-L]JYE!Q*719-R,CSGSEB9S4C./
M0&3G0M%9/W7*<Z+TE&<\0T=/*@*4FO(4';^8^3ME0NZ9A_Q>{body}amp;[PQBX1U(AJ
MXR0OAX#0+@70FVWT6?V"%J<9XNVB./VF*"L*'WRR,YX_FZ'<]!,Z$0[SD"!%
MIOQ(>M,<_3.E,[ !2\T7MK"I;FARXN;,NMG+;UXSI)N+#SF#>DZY.5*>JCNG
M43JJU78*T @XZ.A',QG2]_6(JE7-TE7+.IA$,G6>2O3E3,<ZGXF>U7T^C1M0
MS2G4]D"T8$;%*5(5NUEA\A*J?)4J DG*3T/ID3TIS<$-RL95Q%[4H!MCK'P<
MR[Z^LG&ME)6K N*)R\G:U9?PY&7]$CK<O696I/$";&G?]9Y_VA.OM?RC:UN'
MO&Q*=VX*/>=C?[;*G\)2HFVU9F_C^DUW@A28L-6K/:.ZQ.5>R:2(HM@S,0G=
MNJFMF@8]JG3==CG:]C*Z%\0FWJ8)WLJ*YEJ6T^\09L;)X":4",2=@2(Q>;@<
MDO6 ME(NR_Y)RID=2C3";>//OLG=]M0PNS- +2CQ*L%7JI7 ;#5P#V?K6[DQ
M^'M#L(%=.4:$8A*!/1+&)(7#6KV/:7A5[@&Q$7_FX7EF;,:TW-@&1?A(]D1V
MGJ^$0= :-001/HX&{body}amp;4;#J+XRC)WF99Q^F5C\4KFH&W9;5V>8 R&%J?B"!&O
M-D!D#X]H3#]FS4;N91*5(G>O0:E9/NHSE_H>Z41F!KH^+WOT?PY]TT63:-$8
MYAU5)3V@0W&:3J"\+#3G5>3!)?#3Z>(9O'"DTZ0-;'J,]AVJJ]3I/-4JRFO^
MZWO(&NMUP7=E&B(T$W\-Z(ME.GC$GM'.A-V?68/J1,>F-6F3_1]FE_3(2(JV
MV*B=,&Y'"%W.IIFW!V2]<$-RW#JKY+0)ETQLK]N9N#)WLY6D[>R]6U(A<S>F
M%(5N77O(VJ"^MX/J#3-]SZ^? H=VN@T^)V'+6W94(OC#]S/Q^/RKWZ7#.+G[
MI'%D&QS@\"/IPSK>Z%/+E]\,]RNS*@ZN;]O;T?TB>,EES6V0SSOE X\OSGG$
M)3>)"4X^#[K0AP[TH1M=YMO>N;U8GMQ-DUR22E_UTQ$.\ZA_B^F%3CC-K>XL
MK(]NZL/F^LK!SERM$\[KIMZZT\7.*[0G?>UP-_L^R?Y>ML>;[H*.>]4'95.(
M3]"(2 >VWDU.N!-?>S]C-K'^M(7W@@]>[2KWSQN=-FK!RWUK;@^<Y 5DLJ_)
MUN.//WOC1]N@Y^&G\S?XO+3W?OFE<]OT]T&]ZM_>>JG;G42/&Y#2C,(\S(\>
M09F'M:CBO+FTHC!3& I=TUY(0YO[F_70)]P'5=PT&-O':GAZ,%$M'WW(=_^&
M:@YCKZ7WR(3BR?E-K_W5?Q_P 55V\7\B6D(M?>[;,XS]J>Y0946=-?GS$H!9
M=R=9$GS-I'[_1E%7-A]*0S4)Q3C;@G[B9G^^QB=X,E1I=7T!<BC$165W)X$H
M!R\5:$W3)RC8AUA=M7@:@R2$1B^F0VBYEWZL%X)8\U;-Y1Y_0ES;IR+.AH(%
MPX,SXH.)1X"'9Q_B)TI"T%WUT4)$,V%% X'"!R\$-(0*Z(,M$H5/^#>P-U()
M(GYZ4QP"1A]$(P3V)&:?Q&Q"J&EG553G0X4+]U\W!(9]%7(ATF/S! --XV(#
MY%)=-F4T %W+<H:!!3N24Q]L2'J"J(8*&(?=5C)ULSEX F;VL8<L5C="HP S
M$P0<J#T1@Q^=DX4Y&&(T1G4(LCJ\1GDT:(C>5R1.N"F=>(CO 8#9%8$GLCJP
M.(BK1WB<:(L38R53@5<0= -[!D*TESO_X8GQT8L/]


!:#Q?YX'Q03O&>#JO
M$D69)%N?%$"%B#G\$8WO08V>)US7>'B]MW[.6"<98Q2<Q%BDE(9S,DLWP'O$
M5$WPX82;Z'+S6&Q*YXZ,A8.U]7*UE8XS!8HV*(<JLBOT*(6XZ'Z^E'T!N6)M
MF#P+&9 7EH(&.';ZYTT,*8D.B8H,0ED9V7=O&':AIX+ QS*M2(C>1&2\AH(0
M0UDJZ3FR6)%6PH+<=I+TX9(-&8N!*"0XR8_O03N 6"O0J&SXAY)@I)(8DHW"
MQHW_Z$4OB88C,W<S,I0B^6[FQ#?<M"Q*68S) V30-5,IHXV[.)*^MQ]7.4\]
M5D@ZR7TTADBQQ5^(>)#/9E465W=DZ1]89%VQ902&QXXSAY=SPX \E{body}lt;\%7AI
MYR0&Z7??9R%11C5WDX!QUGZ,N4-VXT"FHI$E68ZV1G?C>'-+TIDQN9A=,XPP
M8I/P!H,4Z)DRV8$GY22F61\Y@"=N%YL%*)HD0I4<*957(Y?W"#04IR2TZ7IY
M@INHF8KV8YAUZ9L[>3[(*8K&*7J::62 DI@!F)"V:7M;<W&\24G1.9:K^2I!
M691S^9WW1WY(\IJ'J9OD.8$"LIT#THKAV9VJUB#$J7GK:2.$QAY,69Z"\SGZ
M>9\S>86)R)H "BGB&9K6*3B>1B3N293RF6]D29T?6*";^: {body}gt;9WD>)>W*98P
MJ9BUYIJ:MI\3BJ$-8FU-=A^=\X#XV*&W YX'6G\D29\W):+2F4"RZ2LTRI;/
MZ1[U6:.VN93^N*-EJ:$9:H 2ZITD:I%$BA]'NJ(4ZJ,)*J3"N:1*.B@GBH'4
MUJ "*A_H.8 OJIJ(^9Z%,R*@*2&K*#%=ZJ!4^B,\Y2;HR&)>XD%?(J=?(F5&
M=Z=OH@!X&G1VZB4M]25_ZB5/]B6#*JAZ B9TVB6)ZB8F!"9]:E-[Z*=MZE*3
MND)@<HYZ2JA\J2;-R7FD*1_G]Y/:>*645Z9_*20F\SF3URZ3@R<C=U*9XJJB
M^BFDNA^I6GFWFCJ5%TU8B(9(.#*Q.GY>&I)&,ZK&^BFYZIR DJR9\S3LL:JP
M6H/!FBFD6JO\,35OV(HINB/0VJRB,ZW2RIW;>)HG1:O'FJVW*#@F X^LVJOA
M&JWPVA[5RJ'[@:VZRJZWHZJ3TZV/!*[Q"GJE1ZXC8ZX$BZZ?"IUPJ*_N^J^R
M^J_SFI]!8J_Y:K VN*_[VFL-"ZRYF2$Y&JH\>JZ\PZQ#JGN[RJ_\FK%%XZ_R
M"K((636X^K(*VZ[OH[(IVW)+TK&CRAX%JZNFZB VIRK:NK#>^JX:Z["Z8B#6
M6J\P2[%#6['?2K0I:VZMVHSE.JM6R[,M0I.ER;2\*K,,RVCZ@;(/*Z9!B[5>
MV[2]\R=AB['"FB>[YR,5X[$KN[,3JX._)[(F.SE&@;)\VVMCZYL26ZI<RZ\7
M=+$TB[(M R4X2[<CA*R[FIG?@K>P)+0U^[74RK+C&KC,FJH+DK=/:[D=@D(0
MQH$X\*9+)@1C%IFN5FV82ZHB6YP(*[F4V[<T^[?_8:_ZL;DE:[&?6[2^*Y*%
M5 -$14I3!&/B8HR)R;BN6WGQ>7J[.[ML6[N82[7PH;E+>[9=.Y"'V[8<=WIE
M1%3T)44--D "VX17N[)[R[55BB"RB[VT"[5CBR766[9.B[V_6KF_6YMK(T!G
MDUIF\XUPR+HW^K&,^[H0&B+M6[^@&Z_L8;O^,;^#R[LS2[0ZR[T,@C4W]E_I
M1&#HXHD8(K>->[Z"6Y '>R+TB[;9^[M"\*SP.[W7>KUUJ\ H_([<"K6(&R$8
M3%0_L\%? VX*,+7.I+S::,!52:\\<L(IS*L&\KY&R[C] <%FZ[0&8K+1"[42
MDL-GL\,5-4T7Y"Y 3(Q"[+@]6YV1.VKZX;DV7,4$+,*V.D+T^Y\Q*\/]FL:=
MNGV8&E(TU2A%H&/D*\ BO+QEVKP1#+W;>[E.[+P_MB,GG, SK,;Y"[G]^%]<
MY3Y%(+Q]7*QAG*V"G+F4>[*.C+\AO,;I^;&+_+SV^\DW3,:N6%&3K,?\UZ*0
M5I<[JQ^ W'4QP\A)S,2_2ZKP:*(P/,)R3,6%K+\)\C;O=(.4W(>7/)^P L(.
M3,3B6H6F+,>Z7#0Y),IS2[9,B\O"7(/7_,@.8LR)M3&47%<!O*7WF,E13)%.
MPLU3^ZHJ[+<NK+2E',=#&R#W6\T2(LYX3,F>9)^4Y\?8',HQ7,0U"*+KG,+/
M^LYT_,=&C**_S*P+W<FH;,%;R(Y:G&)!8DC+_- UJ,X%#:;]H:4/_(;X.L,,
MO<#9/-!/_+(G[<Z]"\JIW"!8HQ]9S+_;0W\!W9I@[-!B/,I3FHCVG,L5;<AL
M#"ZW6L^=;+@-#<EJQ8[V-;SRN+J8[-/7!LWKRY5#[<G#/-"UFB))O<W3W,A=
MK<K[$389_)5F16"GN+@_6<$#C=4'S)AC3=1EW;A(Z]$NJ]3VR]26BRR(LTF4
M%[[-RCU4/9]+W+I#_+B,QZ9US=7ONK9&S=(OS-?![->2;<7['%<S0[R*%%P#
MNI/):]4)G7%N^]AZJP#5++;SG(N6C<*%&]/Z+"$_M(=)=39\EF4:'=HCK=@_
M;9?.(KF=F]+Q/-DK?;L1/3O#3=%WO8B>*M#'3=# W+WXAM"YB]KW>-<.W-)4
M<]U(C,;:V]3*RB!?',L@/=TJJJ9<.LCN6]2D#;M0'-+@G;;B#:,S4MZJ)L3I
M6]IM=S$P7=^L7; U$M;K_-_AK=+H7"1N'2#/S-@7VB{body}amp;7MP4K,BM3;[Q/=U)
MW,T,K&YU3-=F[<R8*]</B:K8;<,LW,1'3<]BO=7[>N(2#BA<DB;EVVIU^#9=
M]C9!\\IYMZQ]:6*9:%,&<F"ON$))1N0UOFLS]A]=9D,Y?D,]OJD!!)(^GBE"
M7N0=CJ ?>M ZMZ8$FJ3];:&)"^8=DK3/"# DW;+KK:M:^*05XLL+>GU9"]P'
MDJ;L'*732=T0C8A(:N>@RI5;SN:/FZ-RSN>LJYRG.K)>WN6


M0EFIQU+J78
M">C\T:0[GN@N*N9!BK"2_N"$D\AZO;(D+)D)0N?/M^AW#M3231]CS"!:VR*D
M[M2FGJ%.V*.E#NGMZ>=E9^D,0NNP;NMMCNL>ZNM9+>Q?SN5FZN@;R^BQ;LL+
MA.RPJYZZSIZ;'N;&SI\R2>;5&^< O;5J/NC$KNB?#I,5L^JK=^8OW.V_B>E3
MU1\]9Z@"PNM87A_MOJ=W^LJH$JEFPM/;N";?;"'XSJF5WNB]B=QZ_NQ9SIWD
M3B"FJC1 NIR]HR$)G^Y(-O#>WB'F[O"@/H?.:[.Z:!\='O$83VH4'Y74&Z..
MAR @3_"L$_*\G81CCNJ"Y>QZ<O'^%.P6DO(E#94=#^PNCW X[R\W1?._KO,Y
M\O,EO/#E@S+CF>?2WN<C+^ZY"'5._YG$:M9,W]&&[O$E_.[4?O D[[+CGJ[[
M(?1P?J_Q@_0$DH53_/)V:_$RK[0%O^T^NTRBNJ&QI^_=RXT?G^LBK^4Y?]5]
M?^@LZB%H+Y9@K?00+]+]D>30U*:YI&5O9N2Q_/0P3Y>BCO(FW'2"#LM:G_AH
MWB#HXYAMI&9E@S4Z[?=1F=B5TNHJ8O2_6?C/?1](1R&N[SCPP3?:1$C09?HM
M1^EDGRZ_K^H!G^8KG_:(C^<M'2+H X S2&2FSR*4WO7,?)X2/^<;3[+XT2C!
M4ON1>/NP@C5>94VGC_?ACNUU7_T":-T^LOE7?\ZQ__E[;]KH8\[6%/Z\SZ1O
M_XSE3\Q#_^@?B^X2 O8AOYW6^61&LG,/\Z]1@+_;<?_*ER];$.S/ZPV_<Z?Q
M[M[(&'#'[^9QO/V5.MQ' Q1_8R__$;WS!P!)A!F:)-RO[ DHAL?SZ,/'(Q>[
MPV3TK[MR5\;?U\L5P4_@);@*V&@$8-;K>?E'^"F_-S0#Q0N<$C40PO<9*-0G
M)'">C/"!B2,#;CVXYR%V1UK[@$;A TX^)I@#1^#T*Q*="55 P7'%<>)?%115
M^PT$2A8CN 7)7ZTS+20C!;HL"XC]3(09-&A64+Q\0"WX!???N#-S;>_J1< Y
M6/P,GMYC>_&N/NR..W-7=@<?-$\W$.HY/#E(C":@RB.  =!Y+8I#Z/GD'H+8
M'2&H$:8/&E@)F2"+@'?!QN95"$K(HD $"_R!+E#J.3C:]CZ4CVNI@2%088BI
MN&<"/Q^WXWO_KQ V/-FW]%1@Z*J%:Q"?J$O& F[H.*+A#\BX26*,=C&LM\4
M_'O'L&;9PAXT0A[AU"-_OR]1.,-LMP.M'QU\?P#M#FJ(L!';0HK?N"7>4.9%
MOP.8_OY<QB-\UR\"<4(#6/%\G 1)/(EGR]B-*=-2/,8\3(0A0DO5"%9(_+">
M+ZQZ0% #JL(E<1#?FKII?P?H\IE#SI<)"PW[VX<2D1D."NI$IO9?J"MY=H\C
M)@EJF \C8J^;A?RI(A+"$M@CQB$)U(@W,;0-PP*X :D@E.J#OHP7TD.;& P-
M'@6\9#L1"&Z_:%;=F*!S@X-4C^5M1(=(!OF?11MU;]!"*$%+:(_\WSU$A%01
M)8+$54@/3\16'(#X219>0K#H_J2B2NP8;/$:ABG*]Q I8C&,$ Q1_\F]CR@%
M Z#;815P#<Z%O9-H%5,B)B0]+/{body}lt;ND2$^!6M'3C,18-1&H6[U@<1>^),;(NP
M$"Y:/9\H_4(@7<2(@U DBD ;$09%1N%+BE]''0;"KN@&HUYEK'R3+L/D17(H
M#/V<'8R+7#$5?L8@V OKD3'$C3MOE(W%CL@8/<2\<W=#SDUEJJF J.A=F\A&
MGE#).4<SH>,&8M'Q.?MA.HH))/BE(.',JW9-;]D-.TT7[4:4>"QID=&@M<:B
M]QJC(Z([C]^PI:7'9XC_$-KMV&3PL=#MNN!8&)5=L[LYH9'3.0O_5$6FW<'I
MCS1Q"8)'\_CM+IV-@DI$\>25QS4GFF1B9VR0CC$_9D@,&1XY)%XTB>A/ D;#
M$#4A%61"%%/I,;UYQ9?E( VDB,2)_C$[N<7#N.<\)(5<=*A11Y%'#=DA=Z2O
MBY 3,49".QXY&G7DD+21)K)$5J@%>2.'4_D#A+YQ)@9(T\8D=2-R>W.7,2-*
M2(77'E>DD,P3%0,_"KL<N1J5Y$_TD2\R+&Y))+DD7>2Z4Y)2+L-4R39I)NW#
MDXN21+))HLD6T:G$Y)Y\C_CBW07&+.GV8"372Y C+D^6#)2H_^:CEH2-#N+5
M&<HBM7>F9*8[DC4O,[Y$3&D\H*-ZJY/%2E-NQDCW"3=(F=D8*<1)@<JYIBC]
M@U)I(T( NZC'/_DE:R6,""ZC!,/X24X)*//$^VE;N[)7\DIF\4VR8'01C*ZQ
M-Y9#L&@I9^2&W),R"*_D"_-7%!L-D)24RY+9+<AH>8$NI; TBRT04H*[1C=4
MI&69;)6/LAH&RP-4+D]1<:24Z+)&%HDB-/JN(H*$EVSR3/()+L27_IGVZXXA
M,E_*2WO18YB*':HES5)5QLMA=9<ND",R I (["5+8 @-CUB7O)?:TDTB2XP8
M,#UC5+R/ !,MTDI2N3!/)(#4F'0/96J[NO@6DV3)%)##DF0*3(:I,NWAR[R0
M(Q-?YLR,N2IAYK?,?(YR5-;'J'C=;J:<K!/4\AZJR*>H%UNFOOR9,G-GCL>8
MJ3.I)L\TFM[25E9-J+DUM>;5G)FL$FSZ3*\Y-;GFUY2:Q<Y*/<DL=2X'7\)4
MBUB3/6))(0@N<^-1?)OO\FQ:S;))-M-FS\29>]-OQDVF.#A3YM\\FH<S:T;-
MP#DN&6>+3)QOLG VMCGY-/MFXS2;?'-Q8D[!*38!Y^:\G);S<4I.F]DY{body}gt;?H
M-)*?4W263L79-35GZ'R6<Z=;,H@[DWO"BJ>\#S.$/5"9J)8@JIR7W#5)A4'F
M3-4U.T],0)03B6=-NH<>(A!;1VA4,N.MVCP7PIDO<X"[W#RN"J&L$FZ4*,):
M#%E9]0;@F(O)@S?=X^O\#^F$02BA1/)!4(^S5%H<(P0=BO19#\VGBJ FM6]=
MMHC;&2BF22(Y'(KH0\9/6#FP0,V58U_5J&,Z3A[A@^P@Z@&@U]/Z#=!T8E9@
MXP$M'YFDIH5,RT@LLV7G<Y\TDC@VK-UF P=(=:QSU 1(YLVL-D4"B0,I&P3B
M!N$Q:3E#8( E0R!^0Z:$L;Q.'  #+55EHHO-1_!ATN^1E()#7+"AD;.!NDZ
MZL=4FS0KRWQTMGO"!ADE^7DC>>:<F),GZCB&"8_Y1 HT[662$O(_)T\)W92I
M$W>6D\YC_$:&^< 3^!.:=(KXXS1JP(VY)6J)1GE1\R47PP7;D $/-/7 Q"#I
M.AD398F@EVR=Y(IULHX"5A152R1&L:#/F:)B$--*N2_4I!39S]9I(PXI&PH0
M2D.1/I),&G@64!F-I(5$?% (8,(Q:M&/R#'_K,%T$M'(2:T


A6BF_3_49> 
M1DUD)U9THV-4Q-2/2L3U&A#_=!#?Q1T=CA-:.9U%TWA3%"0;40W'I)= 2@*"
MBKFD</VS6_J"7M@&^ITR$+@@SPLJ]H;E+<6EAY*:-K[0PDQ-S:1@I-L4IZ!3
M;RI<NFE95(3>)*JTT^AY/B6+.1%(O:UP!#8E8CYT6HV@HV4T5/U330J3<! /
MRA8W1I:2PEFY0,V2,,VCZ4\)=1>VEGH:F",5I$4@CA[2$#H?!JCYT4:F(Z+&
MT92G/S6$VL 360: UAJBL;=DZC0))*BD]MD3.,JK9D89<3/\JONML!U!AJI/
MF,J>./6+BDO5N22X4&QP&SV+0CR^.'$X7 I?D@&=! ))HCLCAIP&T1@SJ91Y
M< B3\?CZD$!Q$MF$:% %&L8V5.@]M1)1AG&\D2/R/L.*34E=?0<'Z!@B(/D.
MQ)WI$M'4LLP3=#17?1"5@0&7*!,)GD92-_3J[.BK>K*B"D_)&EG3:(^DK"YS
M=2Y1M DZ"VDMS9R?E7-R5J:*6>GDZ528FI5ZCE;8:5DG:VNMK/T4MGI6O?E:
M,^MJO:RUU;2F5L-Y6C]E;_V=H;6S!E?2FEN;Z7!EK;'5MI96XTI;DZMNO:VN
MU;DR5]#:7&<K=;VNHG6Y#LSBNEVE:W>UKMF5N]),R*E:M>MX_:U,$[VV3>@J
M6X\K;O6NYW6W3LZ:B3KA:]ADK\I5O-Y7\[I?]>O8!*_"M;JZU^@*8(FK??VO
M [:]"M@%BUT#;(,UL 46N4;8]SIA"6R"S:\'UG-F6-,I7TDG?GVN_!7!,MCP
MNF%9YXAUL"2VPBK8!RMA+RR(]:\:5L5B6!G[8DOL9@VQ,=;%3M<4JV._:X^-
MKQ_V3(JH)M<$6:9[V*?E%<9R6/S 4"4'X\N*9]1IUE</83T4J]"444#CV 0+
M5ZHFR^E]0+*SL8_:"$2:.HQ<)(FR\T1<0 RRTBUHU+# -'T0C?()6?FI.,8Q
M=1!(ECW0V2+!9NFFD;40<-8[&D6IXTC&41JA$N3CC-6'E1(ER K^.!)AEC^H
MCU/4.%IJH25"O+6*6C3ZAR0\2E&Q'=?41J@/6:E/BJLC.7UH=H6.PJ+B+CAM
MH@0=#\3-1!%3&1^29[7( 7$"A3".Q&-/R6RFK1".1,>E6@_*-$#'\?*U8?2L
MW0!;\DCLR*RPLOS4B-R-//I+T,<>N[.\,4<4 4A49P0BM 4?#0/7@HTH D%,
MR.KH,>7&I,R?9BM,X4.3%9EX2<2X3QUJ-^QH5HP2;F-Q7)%$\CKZ'9+  =/6
M?:J1ZL5&3,>Z!2^LEH/B,'E;1OT'7)*SE2*36K/=\EE ![:]8 Q7=2".)89L
MA^!!*2N?*)]TG*$R Z8H2-D>UW.32=QHN6B0;(AXIA27VI[<BD5.S]I,<1VZ
M\\D^O!\Q5'* R;6J*-??<E:)&WXT[;!-=B37Y/(55E5SLTX#HAK_M-3P7'0"
M1[6I.NFX)G8;#10UPPC=+=R,MZ+DYTH^QW=OJ8=8 ;F:\5/V7#BZ=,$/UGVU
M$.Z>\+%RR8Q4K8!8NV74R0+=2=D]B(DEB[I_AJ+B#KG!=AW)S$VOJ$KN"A#Z
M0U9(!]X]O. 'WOH[8C)BCB4)V7RH8J@<DS>R.B"OW:02( 6&TEVH]&Y;A.8M
MO-=BXTZ=A$) )(S>8!5J::DB",V;2W3,?:%<A!174!/V4#<&R5,KO2J"]OY/
MTV51VMFR?7A!1O+IK$C+9.]&Z] QT!-R])Y="5)Z;ZP4I*]HD#HWX;O'HDO;
M:+KX@:Y>,[WA2_\.DE@A2L/<-A-[&ELA2%2*34&C<0Q0/'D^G*_=@+Y6]NU^
M7O#+),KG?*T0/Z1PS TK"UFS[8% OT?6_"9<(JH8ERQMA+!UDV)Z"/_[9W4/
M'_.M2H[YVET><4#<B^LC'=WWZ](V#4QLS=&LD#<+1O(N"9=+2R?PQ6W!ZTO"
MV(L4W%)/+ 3.OKC5"J'8'7R#62R%_;']U<8F62'\:W&L U:R69?'VN 6NX1_
M<!.VL$]XQ2IA'PR%J; 4YL%,V K/6" L8K5PC:6Q.Q8+.V$O'(9[\!0^PV*X
M"J-A,YR&KS ;?L-9> W'X3:\A:-P'2;#/M8.?V$NG&/U<!F>PW!X#,MA04R'
M][ ?SL-X&,@:X21<B/\P(0[$:K@1(^)!'(DAL1L&Q//A."ZJ30RGO,2CDB#_
M+E!1*C21J42QFRA4@'53&:IVQXGGW2=^Q6WJ.G*J4%RI3#$J[B&72A4KJDYL
M//-4F6A4=>K??6)33(QU,2[65&+"7>0,!U;+$EH[O&P":'N=M\WE4765H(MP
M,NV35:M!R=U6W%*3;9_L?6ZH::S<B 0V#JJQ41K[- .ANUK1-2YQ",Y5Y;5#
MIN(*'#RF;[ JL?%?KC?+?$0SEF\23([U-G7<+!I<*7O'+"Z[:9IJMMTJFS?N
M:X<GGX7CB<&,%]MW"\@H;" W,[9%C@\RR1IJS_C%[;(*!^=>FYZ8;W,,P7G8
M;->1V1LT]E"KS;<]Y-N!D)=;>]-N)'FO:3)S?(]3LDB6C"CRO4VW<^RLY M!
MCF[_>"B35&:(C6.R<4MUU.W"G6/W]E:Y9$M.:"9K:.#>=)S&KG)!6U<_["-_
M8P GSP[9*4QN"7F"J6392Q:]LN":8A@YB6GDK]620>G+0LAC.1Z7Y?61-&&2
M24;)$AE<H9J*/"G@F$M&:=&X*Y\OC_K;OO)2MG!Y6217L*?<E]?;7X[+OVHR
M:[:U$0-&URO";3, =<U:R&@10]PORW!Q>2ZKL$%ID,4:7H;(S<7%96/*/!GU
MWV7^&UI9+?_D453)I)I7 1O&J^01YIF,F+'70-;''TTHM^,W])JE&)& ; BN
M(==CQSPSX#)SJV\8-+J<#<+&7T*RQ/1J%ODPHV:%&Y/=LN[*4889-NMEVNS+
MK$9Z!LC7>2T/"$%2/_2#__(E/6LXV^.T7+&$1T4SSW>YCS9EJHR4)R.$D,H]
M.3!OYA")Q?H1#[L!+T,_4V=WA<]2,U>FR\KY>EVWYER<US-IPQ$(FC_CX]V,
M,5=M6LMHW**'*2VWK)5%M%R^T/'LO+5HURR6U?-/1EF]+,6Y-N(\GG4S*$M?
M,J=!:[ MIDI6M$-+@TK91:/C


B41PB23LKGN4:_Y*_5[P*<CH9HM_F45>F)
MK)#Z42M+'1<8H@VP MV8,1Q@WGSO*P/)Y/W,G*5T<5;3.)D>[V@V+;,J-#BF
M6;4C#7WI>GOTUO2$MM$ONGN5YPSMD3W5MNK1'AH\MV>F-:,!M8+^5WG:2R,S
M&I8ZVJF$3M*1.5 7B_],J&ETB!S0<?I*P[F7=IH!,X{body}gt;19KFF,V39/;" #1_
M/F-HFE,K:N+,1F$P5H[+3EDHF\\0G:D?-3BS>OQL3SL-5RO\7'6@.-.)&4//
MZ@)7C6FRFT;4-WHO\RAN[)#I])0>T;.Y!&\D54W.]-@_(\W+.E^QXP0=JYOT
MPQK7A5JK96JG/(]%M4ZVUAT:6\MC!F4O]T/TN&GM-I&4T+]%R\+SK<[4JCD;
M8\G6;(\Y-+2N7)D-Q5&VZ8RIU;.B;6X$XEX[:*E60G-TN&[8USI0XS_DH]HX
M<J<NV,^:<"D Z/R3I?.<_M,EQ51#[ $AL06K=MX>[+!07.KE[*CWDRXTUZ8Y
M70,NFTS-3K7)QM([63QK.!(]GU<6;LL5:\WSKC=C7;-+M%YFVL[:ZH'J^O:S
MJ1:O=M2G.M4,5,L1CX0+7]$?,[M4M[BP;)QAM,#^V(XY-ZMK0)VK+S8,OMH9
MVU>#,BLZ6SA;(OG-],4&ANV@99T!=<#N6W5YHP5H0[VN??;$7=@G&V/':Y^<
MK3M%;4O%OBC).!#=)J;?VWLVTYBY7"MF;,:8:?5C3EB%6V5I9K==K5'VXL[,
M'&Y!4XEM?!&C&\V.VYJ;8;'FG.VIUW;&'JJ&6TX#;7B=X=2VO.;2+V=O"VT+
MS:21<]6ZV*_;%(5LL'R3J79.%GY*K6\'LZR->+\SF>;1R-K@#6KDG=S0<X%T
MT6W[>G,]]_R]A_>=5MU5N7)S[XN\U/PSSBY@W5M ]^3P+=TJ\X%&R[V:>N?>
M#PFU[UF00,E_VV.O;X.UH9<W(7/>_1BY9>GIO;)M->YA?#<.R>&X'D=G\DB<
MO.#0-OQ*/M_)8FP<!&=\%=S),;DXN>\L^(_+1!P\A2M?!1#!$:#./6L]CL@.
M1!,.'S XE5OA''P1WU@DO,.)\/]5K_0WR$YB2:R(>?@0!L-#W!+?84I\B1\Q
M)G;B4+P2/W$I'L6;.!6_XE8\BR]Q(AZ$D7@1]^$KV8@783'^PSOLE.7#1QB,
MG_%#_,6]>!='XXQ8B1OB1/S&V7@=I^-=F(EO<3GNB+'X'I_B6GR.ZW%!SL7S
M>"'OPW@<D0_R/DXB6+%]FP_)V(_7V$I%POV#=O3%0F<?^UEQ/)"02QG'KY<C
M LH<,9D"ETC9=>.'3<I:0Q4<84MYX#7 0KR-7LQ57H.Q8:EXY6Q9DD]@_KCU
M-/GG)8LY1W34\CD1RAVX)[_CKN[DF?)$+B>+^8'PY9S<8BI<7 [-!^UG=>8Q
M%"CWIVA^S.LU V;CV'SCP/)AZ<J[>3\DXR50E%]9+5S.(\\C!^*I_'/?BVHN
M@B-EA%CFN929<RQ>WH+I^08FCNJSF?AS"<PK4IL\7XQ'O,B*/7RNRVMD.!<0
M_)?IC",LP= 3^A)^Z%!4\$ZI=M[)UZL1QNB;YYT+.XZ^<W^Y/B^$B+(O#O/?
MB" JNC6WX\B4GZ/$@6Z(&)]C\E,T)*12U0+<&)_Y*U_I-RLX'M1''/H8X",A
M&\NP(9:*4JO&;^6,:NEQW/;AX-PGV/1&/-2^Y="E(W/0"=+[ SE%&,MOU<*6
MJTX@H;HYQ\"@7*:O\O0]!'&P**0\6%!)D'1O#G'A>#HWZ],\2R3 ->AI3099
MO^>X_"[&<NPWRXDA-[<2,=L]T+\%"-<GZ@.^Y6==6P-R$M'5W2--%^RWT*LJ
M0%+XUX/Y^P#JH-<6+8K+GL_K[NTH@M&CLT,RK=[0&69E[XO5&_01P348/;C$
M*S-5+X*U6_3K^MK7>CW'/:(*M:]:G5:=089NIY* KK<;=B_+9\_7'H0>(&*N
MUS'03MA3NF\O[8A=5/D-8VD$57M C^QYW:ZW0/8GFZ'3(NQ+C!T7;G*\WM&Q
M.Q\_$:\]19!V5I[90V']&^Z$,IM'9/+JU!6(.C?DYP,9OG7U/OA$NK":[R]]
MV"EWGAC$ ;" MR;*T+M+]@,/X#'Q@D?H=1VX:\,U6#]RGZ8MR( =O/_V#7OA
M8Z&!S^Y=JZ#Z4STAX=E[25>>.ASK_7>GG2<\<1!2  &1R-&2R"<NI/N)1^?C
M'4$A>,P.S!L$0Z?N)(X7#O76_DN-/%-'Y4$= KKX,+ZZ?_R+I^N??%B6^+2+
MW GFA'?G6!Y@E<@M+W4S_+#S\:=<O!_&&9_@Y?"_NU//=D_)XDM.Y]7$G*_S
M8T+O#AVUM4';_"%/XU >T*OY+ _D4>M@K_!5_(\G>D+^WMOXH*?R@3ZJ+WI&
MKNB9/**W](K\STMZ3"_H87JF;_1;'=1?^D!.Z1G]9#?UDSZ)G_I2S^I5?:IW
M])Z^TY_TW;[(73VGW_1-?,C3>%'_Z5=]F5_CLWZ,-W6T'N.%?:3OX<>>UFMZ
M9/_H@7VMA_7!GM />^ :ZW%]I2?UMA[;0WM105-C1=>%[7"WL&?[:Y]?@:\1
MN9,,_IQ7PU#OZ[=]K<6>#;[0$WLCWF?A(@1"\MJ>W3N(>A]GQ>RSU_>W7K:O
MI5*#[\D]JE\2W82 < A=3]^K/;-G=D,@UFJ9T5Q^KWRO?_4 7\&R#6:+//+8
MKU_N,!X=&OMF;^B57,5%'O13E7_\=4[>8KN\I_8)XN"R%:%('U^^RY_V ?[C
MSOQ97O /?KX_AMRDB4)N6{body}amp;";WZR'_F#XNDB;3"*U3.^P6_UYU7IR].F>?$#
MOK)_PZSW[S+]<-CG6?ZRO_JV3WSU$E$C; @&Q*# AWW<^_RB+?:_1VC@4&4_
MT S"G@_UD>GQ933)UZ73?;5?]U4$7?T3Y)=_K+U#7_5_/K5C^$0>YWMTLXGV
MHRW)G_?2-007_J?/]RL_ZPC3\5[Q9_ZCSQ]8</I!\()N[[M[,PSZ<[GAE_7_
M?M13_M'?[IW^VG_]?7_RPW[+[_IC/^K_^D@_VD/ZQP_S4[_LM_W6'M67_@J,
M^Z5]I*?G%*+Q=WEXGN8=/MC'^*I_]K-^Z/_[:7_T!_X/7_<[^^*_^YU_[O?]
MMY_7A__6?_VM_\H/]]8=^S]_JP_NV3K-7_^G/_BK_^_/_;>_^)?_YG_\4W_]
MS_Z-/^\W^O_?XJ?YH7\#8/.G_95\-I\ R/EY=?R!G9>IX'D0H)EPYT6 %& E
MHAU5<WO(!+B+.7(<H*,BC-%B8 (Q1LG]8NR"\F?,D7^RG_#VKP%JHE_ME_^Q
M9&@;YH:%\&P+H/V' EY),6"N8J?Y;=-?_]?]C4@R6EC&OO& D%\-B !6"O/*
MD^:OP6=$H$9G!!:!18H*R 1F;,S=$]C[H5A2H S8UYA]XP;:UP*6?^*;ZR:V
M+364&ESE_OF -J!5E@-.,[#:5K;_X7\]H 9DGC5KIYL)^,^]@=D?]1/&H&OF
M6]FV^06 ?Z"H<*+T:_#;$@%JGM6( !X-F6!1-DXEP &@CX8(TBNT6V/( $8
MZ4F"(MI",_S=@6C@$9CX]&\LA.^&FFV"7U[\E_V)+L037>6+B&;$DWS4J=EE
M2IH=V/ =@%"@6=*;G0V>S1 0G/%CBQF%4Z8U@HH@+7@%BE$O&V(!6_ 72QHG
M,KL5@GV@0&;F@7]PX">$T]P59@5 0@F&@=)-\G:P)8.FW^KG KY<1MO$]C-P
M,2,;P($)]FH&'>7T LX(#9I-,PUR,&K@ +<"]F=' C=X T:##XZ05E$\:,?&
M.;@^G&FDX!?XZ05KDQJ89OT$@=H@0*A:R8(C'I1'$*YJ>LP-Q0M^+$K@+S@)
M&H#08![8(#R$W5JE-I[X@[!;R%< +G]% D?H\=D-R@RQ!1+6@;-@1@C_Y0@F
MH<@%IO6#?IKBM@TR;^I@'-B.I&KCS$G(;\6#V&!"^+8L;O>?1DA<M6S[(,4&
M%-9O2Z#30 ?>A/.?_Q>%(84HFA)Q=#&%! L?. ^B-)K<B, 0FG0N(5(8U>""
M7%2KIFD0;%,@5_C-=5D_H$LHU:4U?$/2UG:I,BLA5%@% H*6()O20NP475O8
M\+6]3W5A]N;OU7^>()\@4V0,4]1<H43D;?/9!^?!37 C' WW'D@Y.1=_)Q4J
M*8_;C*$*YC;QUSKX$DI_WV!H" :*AM6?3@@:CH:H86GXW8&%#=AEZ!:ZAK)"
MS0=L!8.O85M(&-:"PB!M>!L.@_>@4=@;?H91H6U8% *'GB']-QP:A[\A<H@'
M$H>F87"8!L:&?EY,1Q(2?OP?GU &AG;/X&ZH&QZ'L"%W*!PFA]TA>/@=+H?*
M82>(&]:&SZ$IR!R2AM6A-Y@:MH>GH6KX'N*#70\I*!LF@@J@=)3O6(+'407H
M)G2#\2%\.!N*A$,30?(5BGG,7W7G]=TZA6'Z)Q\^B K."7CL-(11D(!8'!)Z
M!^)NM" F/?FA]Q<>.H@FDWL'X1!T(Z$V)QU:'F[5^S<8>H?I8?]@(EY164)1
MINZLAP/B71@;67S^3X:(".*%+=\U."%"@BHB?6@A#BLZXGJ4^,ERXZ%Y2.T5
MB143@*@@4H@>8I(8)$9@:5^-Z B6B CB/N?_I(B%G4 X)+(OCE]\!%=YB4*B
MAW,?9CE=H:# )-J(N:&6N.OI0'V2P+ FKHCB(7U@TPU$5I6;P>.A)FNB\Y$M
M'(ADHL"G2]5+2-WS@Z.8/#XB K,6HH<90ECGI%%<55U2UQ)9%9]&Z-?U)8H0
MG_>3##D_CAU*]R(:B8L2G4@>2H6.XEOGUW6*;&&R52!V/7,B:_C>[76FHJ38
M&HJ* =5YV"JVA/4?K'C?-78?7@#3@K1W9V \]R$JB0%>![39=7>HXEAE\@ .
M)>!V6"?&?+,=@<?BH8J845I$*YJ)!"*/&"'$0'J"<%?DH'NI(L#")8*($B*Q
M>"[E0=ZBM#@IDH@:8H1(_+&(#>*NX=QQ=M1BRV/EA4J9SJW()OI^>= [1"_V
MBO;BFU@_883B7GFH'I940P[_D-[)BO="G\@N/HGGH78HU8T,_B(H$M>MBWT/
M%SAF$8SPXK[WX($_!L)5)RQFC')?L.@>=EJ:!I%Q5T1X]>+(:"*.BRI?H)AD
MA0VRRC;4X3&,X>*9*":"7C*CP>@7[E)ZD':!9KE9V,,XY!5&B2VBG717>1!J
M@T!$0] 0!5&%*#!F2I_BNC<?^H;AD<.8'8I\0*+$V#4>=.G2M>A(A8EMXM<X
M*ZX*^$R,N"]ZC7FAA*#\C0COE-HH-@:(92*':#+69A2)OK@U/HLG8G2H'_5^
M>N.&."K>-UV"!E@!OF#E8M+@'_([#^#BZ!\:CC['0-<S#HL'(^5X,GZ)5R.-
M""'6C9HCYGCQ!827HI-X(4J)&%[U%CC>B]IBU8@?FHV#8]+H',:+C&+$V#'R
MAJTC[,@V<HQ\(^UH+K*.NV/;6#;ZCK&C[E@YIHF>8N[H+-:.)A[96"UBC;TC
M[H@\"H^7(^=H,$:/S&/E2#K2C=4C]=@Y2H^6(_:X/6:/WN/T&#YVCZ^C[&@\
MEHY'HM0(/I:/T".,P"PF&W;@Y'@]LH_'8_,X'19[Y./HZ#KJC[;C[%@_6H_[
M8W/(/YJ/S^/_J#V*C_1CA_@[.H_0H>#H(MZ/E2 #:1V6C'MC :E !H\&Y/@X
M/PZ0[6,"R3L"D/WC^?A!'I#YHP!I0K*'W.,&>4)FC@@D!YE!>I /B7VXORV0
M{body}amp;3?)$,FCB2D"HE"KH\NY 5Y.]:0JR/P^$.JCJECED@=II !Y [Y/2Z1+>0*
MN3GRD$ZDYRA%2GJ@XXS81**0R%^3<#KJC#0D$8DTAI 6Y BI02:1+&0)J41>
MD66D#IE&DI%/)!-I1JZ18*3]Z$5VD48D_JA&GG^GW!;I-X:10J2%$">"B5$D
M$AE'@I $I!Q91T:00&01N2@.D8<DEKA(^H\^)"0I1L*0$F0.R49.D5#D&?E&
MMI$.0D#46.4+LT;P)%U\)5;($U05<49W(R49SO 8:A7Q%=QP%]D$N\)2S X@
MSQFU9^T-J.,7J=ZD4#W5^F)_G1]L%##)>;13(DI9EQ,B<^'$]S![,&)$P%/A
M2QQ:]%:QQ3$!-#!C+DG')9,E%T#51^8.B.$(L4I@*_>+I)6+R C5Y-1(2&*3
MRV2V^&V4%ZJ#6V'82)/+"9J%.*Z-DN048D15%!%/:1%/>7R?!#_Y[-A ^Y0.
M-D=BD B"B_%/+1]"5-" I)TV[*08T1&B(Q]$#241#FN621L19<  -@ HUC2N
M{body}amp;%%W>!"@ Y%A!'005P@&=S<J$I6"#C %^&5^!#U!--G!H(1>E8[V1'*4J?B
M*U(#?!$]EU%!/-!G<T.#@48((XL#(R%#_(0XY!A9\LT--U7O<%*EB+3/.<%/
MNI/B5.#R1UA/B@3)E4@0#\$%2(%3"93#A%%@3 025:4C"24F#8AA,QG0K%MI
MH& #5?:3&E<F05:D%^+%S_!#996KRB:Q4IX50P9'<Q5.DNM@4/!'<&T!"9>E
M3K(N#>7WL%:24A8%6EE1S)4Y!#E!GP%>O41>B4$ C-LD'_GV]1(,R$Q1B$ ,
M@LI:>5C>$Q"%00'D4%SFE]_P*I$2YQ1>V7"%!N#BCJA+)@ZSU".A@0@7T%:@
MT5G.E)^EXG =)A:VD-N@Q6P,=85CB=.L#L-$+S59II(])'D36NR%O(1BJ( -
M"H7E)S%7M)7X!&&B,E(4HJ1,(5Q>5-F%9&D#R8]CEM6UA)@@D<Q(T4WZ5"P$
M.!E-+%WD VPQ7+8'?<AY<;>]EZ"$=UDE:I*07E01T# A( S2Q[55'P 4@#E0
M2)7Y!7VI5<B7-M745U(4EP.%8$E(MH\@A;W223P01A5?R;4)DR8#AIE4[2KX
MA%IR2X54 X47P5%Y)9"EVR=9L@U%WPQ9&P82(X,D$C2856&> PF1L!#9A#U1
M8YH86%5;M8"=&**$VS!Y0%,YAHC95BJ89L-G,U!TAH7D@YF)F1#(D^&!6!D!
MF @7Z2&(D@1$(Y%4[%5]U8TG+;T9,4 70DLP#DPFKV5"9!GOGIWA0CT.)27?
M14<^DB)D96E(LIE\9"5I5":9EN0@66?2F7-F!YE<NIE*9B399LJ9)V4C&40"
MFGLFH1E(9I)P))X9:,*9;^9825#RE8>F&WE'8I*2YB4I2"J:A68B^5J^D)GF
M0,E(,II])J2)7UJ:B"8GN4E2FFBDJ3EI7IIZ9J29:J*:IR:KR6FZFK%FJ0EK
MKIJVIJSI9\:9FN::Z6A^FK]F/6EHCIIV9IXY:Q*;F":MB6M6FL7FHAEL_IF]
MYJ/)9]Z9K2:R66TFFM>FJDEJ,IO)IK5Y;&*;WZ:VV6QVFH*F(OEL\IJ>IK 9
M;0*;RB.[Z02:F^VFNIEN0IOS)KI9;FZ:NV:C&6_2F_>FK[EOVIN@)K49;MZ:
MV^:KJ6N*FN!FOAEJ3IO&IL(I<#J<#2?"*6YVFPFGQ$EPCIO*9L%9:W*;V>;%
M27%.G!WGP<EP.IO_IK[Y;N*;%J?(.6Q6G",GN1EP1IPM9\:)<7J;$"?)>7+Z
MFS>GM+ER@IP#I\JY;LJ;_:;.^7/RFR^GS?DPHIPQYZ@Y D: D*/C.!TUG4XG
MO0-U1IUXRM2I'8UPVI'52742'8WCUEGG:9U>I\\!=OJ'6&>;,':&G6S"V8EV
M.H!KY]?9=;:=:X*. U[.G"SGSNEQAIRY9M[)<?:<>J?!V7=NG'[GWEESNISG
MILEY=.*<AZ?066\:GJXEXMEX*IY!I[N9>$J>CR?EZ2H2G87GPFEW^IR+I^8Y
M= *<F>?#F7+^G<MFX&EZ IZH9^F9>FJ<JF?KR7J^GG0GSSEXRIP?Y]W)=PJ>
MHR?NF736G9\GXWEY@IXEI^?9>8J>NZ?LF7N>GJYG[&E[SIXTY_&Y>BJ?G&?D
M"706G81G\$E\;IZD)^Q9>T:?U.>/0":HG7#G]_EVTGGSI(QY?2)WB)\U&38B
ME[1G[Y=^FI,KDXII>0Z6UQWRJ2R]BYBG]1G2.9\V4SFI*L*;@0=0YW_>E[SG
M_HDK\GI$T=SI,,"?QJ:YHX#Z/^_G'EDHL9_-9V69?LH;D4;H:%*^@%DD,S$W
M68;)IXA'?UY. ZCHV'[N&Q4D%@<S/J">':8XZW5!+"BT$8."BBFH\"EH1J B
MX@+6/P0K5^*@V7L"B[!F"O0I^#!6).I)//X(] CYAC<"GSEGAA!_5'*X4VBV
MTYB26-9] %A>4\9"\N$4G9_#YP(Z#=HLQ8LV.3XX""74,,&7B!-$ @H""EF-
M3>*7U3!"16=C&PI-H MCVK>PV6E0XN3=D&8F#9Z?Y"!WKC_($X8C4((AC<++
M<#E8&V!%\5@KQJ%ZC1+:[TTHFYVY5S@P))-43J0O!%IZA 2Q3'9>"D@ABDI.
M7S(;(UH*,:*%&91@JHR+N9UD(8DR&6(HIF6)TE*8*&\Y0G03G&AO(8<&0PS.
M+I0S[HRAS0?#TO&B26<D.F.FDV.HIG$53EJ7"6*QB5(/N0:'@B'0#B#/PL#^
M9*&*RRBJU E:OZ<X]UN@#?*B67-*1&S&EM<58M .M$B]<#9$:%3?(AHPPB!(
M@R="+YRB/2B?)%FT$E-&T(!FF@VO!,<6-N0V[5-H&0/(#1ME$C4KR!#(TY7I
M1:05:86MY5K8C.X!,@)1 B,5I0_EAKP,NX*@(XUB=^VH-9J.8J,$*)659,13
M) 989D2=$3YA/())C!5L!,#U1?"4GT@*P4FT$NX75=FML1%=!>^P*W@C@I0[
ML4U,I!X3N4CY2'D#8Y?UCC8=)6CRF -XE2@?PW5H11'^ ^N50*5\=PAG47%Y
M/U2ED.%%4 U?Q'<ACGH/H 1 (F34:N>HQX2 (3DSAN%1NN@I=<@0{body}lt;DH&4U%
M#^%5E*4>I;NU47(@E,H-!#V]I04#U8 G/#E(9ODY*QV+CT3NXV$*4TTI-)% 
M099F!6A3195+'(-BZ-<="N[(5OH6Z2,2B?L0EM9'N\._Y,:$#EM;5!(KS1._
MF>M 0:@9,P#7QIDRE_T(51*&]$\516E*>723*8O_8%15$%3DIOA90%7891QR
M:$4DB"F$1VG 7#_% B1%."5E!4TZ7;0E*EH#$H5<IL_"GQ UB"KH90&EEVHL
M@DUG,]A $W3(<!IK@#"O$*S0.MQ WQ-"(;A,IZBI;*G[;)['8GI1!/A<D\A.
M\?B$E1C)IM(X8"I8PZOD-$ 4Y1(HEF0L3\6!<2I<, \>R4QA4U 9E^EMM'U<
M+E<02SF)U@^A2BNAO$U3;%03)4"4HB%&1=JBL H,283:4M8L?L- U5_2DT:>
M;2I6L*<YU)"VFP(2.<3K4%X$EY:%^C!4Y!4AAD_!K2% KH6QT),(%WI6Y76+
M/CR9 H**.309JZGY8EWP5/;$-+5>K"T%6F/TG8HE1*JWDJO(*E;#:JJ72* >
MZ<JHDA !M$F)^CW89U,I(/%.UA99J9JQFXY"56F(D0/HJ/XIS;AMW*B[@U-!
M@_*HD0>V,BD J9[I0$*G>CKII;RR7I \\XI*M*1BJ",,M$*>CAI2ZJ/(+*2G
M1 8L40/H@G&EB0I0N'U@%!@A7XY>BU<#$C>D%(I(8TI467P+Q5/B6C"GG4^/
M"IW^J$5#D(J[]0YW:N9 !&@3>RJI:J[XJ1?J/9*K"*H:"YX:T$"ISL)UZ#=8
M%W!&(/I?S$\;JJ]Z64BJ?$7/]=2H$5D)]!"S-2+)*#'QXITE8(GR1E2\#'^"
MJ$K*C"EZRDMUJY(\NUB3FEYZ&*WJH7!BO*IN2(NRFG:K@XU+H;8-JE'JR+"+
M?5> Z3?1J[H1&0S6X$?0%WS#Z_53:!G%JA! J=87BJ'XXM<I#FL$Y@=;3$]-
M"5:2EH"8(-1D5*VF#@N"G-I2\E0+ZL[EK:8>#$:X.K&20(RJFK.:)C;)BBE5
ML[2K<QN>"9BF$ZM*9WC,U*0=1AURF:RG.(:.$9LHAC$ JX!K!12#21O1J&!1
M"1<W0<+E)=!$"E9#X*;N Q':R>DQV4Z3\3U1K(="W.A&&::C"_955Q8-?2K[
M,*YMJS5(R/K_X*JQZI63+3RA[P25 :V 8E0&7;5GL*+W:3/Q,(&9;@1?LF?E
M #.$7C6:;AG]J,N6B4(0=U)C4IELF4<$#M&Z54)(ZZ@:JM"I%>MV&JA:#1KK
M]Z0$DD!_JJQ*J&ZM@:F:,]/(GWYD]XEH="3)3R"RAM9'@>NUBJLRK22/)WJK
M)"N>3JWVN=Y$)TF0>E)HK: .U[JM@I+L1Z:Q,^R5Y:551"]LKO#&G)JTFB^$
M:]/*TY2N#VJ*)JWNA=9+U1-*,:DCA-*@O-:J[\.-4I0&=AWIPA4$(0W!B9]%
MD?*IN^O@6JH6#+XK]LI&R1;^DW5JGA:O'-Y.4YY2K3O-\GJTU#"=PU[XO/HJ
MN()!%2N,,=6K>8*.CJ-):P7S18&NF,-I*IJ:(H"$::J,QB%)Q=@E60"J=\P[
M<5:XK@24) HDXJ"Y D\'6RI; P0/RO2D"5/JRG*BC*M8ZZ=@EGH9>.)TD>08
M'@U+ #8H8A9/UEU*55DM0^I ]#.TEI;K98=V7!P%WA)J)89WNF33A1\9HD62
MHHA_ I\!J ;JW@V@R1\B:8#BL(E< JHNZ)%%993 L16A/6PVJHCBG:H5!&N"
MSCTC:-]HN2)Z%^B7DH'*C6HF--B!/DC1*_<9>NIW7>C3]+XRH$8GCBAEMF$K
MJ!!;"OX(&N,Q&<5*G_GG/3>#[JCQ*-)YREFQ/RR5R G:H"_GD,=R&*WT%?0Y
M&6Z=X&?X^7/H*7ZI]DG%VI^*K.Z)?5JR/R@7BL<RH9/G]'G&MK%2K":[Q1J?
MQ>?RR7]*LK<G);M]9I^5K"H[R3Z?JRPFF\96GTVH)ZM_@K)9;![;R>JRE:<M
M6\ORLJ$LS'G)NK*I+"S[RH:@QRPJRWP6H)NL[YG+<K*]+##[S#JS%"@S.\J:
MLJ6L&7O+TK*[+#0;S.*RU2PI.\P:L\4L,EO.*K.G;"M+SBZSXFPF*\RZL^!L
M#2K*?K+<;#3KS4ZSA"P]>X*RL]CL.&O.\K/:["][SX:S_2P\6\]^LP<M/CO/
M;K/[;#H;RQ*S "TK^]"NLPYM,JO._K,5[3E[T:*SV:Q$:]%.M!AM1RO+-K/Y
M+$-;@?JS'"U*N]&NM"!M2FO0-K0B[<@W9'FT&FU+VVQ*H@YL^NC'OK3XI8/Y
M/RBT[^PL"]-VHY_1'EK&TK01[4@[,6ZAS:4<R\8FM 3MC-!X*0"V0TX;T':S
MU*Q3D_!5M?%L&#M_5F417R$Q\1$?849(J]+:M!3GQE<O.5OBJ#Y[TO*TV*;,
M%TD1M8/L0BO0FIQR+9%9BNRQ9^U'RR#,'TU4U'58)(A"[5OKX&FJ-$4O,?1E
M=EFM5^O+2F!27XG9BKJTA:TU6WA&MF"45=O'.IX([:&9]:%=;6UG:]B2M,0G
MZU5Y71:2*%\+U[:S^%3;YWJ))>B#:EO9LK9B5-WP)R1?_I9F2]M>LU=MW?'W
M&1%I:PT7R0*U7>UFNX9%H+(M:7L:MHK)+6\KT4I^?6U-Z]=*MY>?/=O8&K=?
MK7S03C6W;JUE:])ZMW=M21O>VK58K7A;WI*WUJUY6_'(<)PM<0O55I!(YGOK
MV$JS42V3R-U^M\:G%^C4!K+JK6C[(<FS();U{body}amp;K]@.0.^T7=5J$NZ"#6<;UP
MRFWY&G[UH0=HI7"6 K(1+I,%.(@X;^R!@&2QF-@MA,5KN5!XQ0^57%Y:#56&
MJR'$HI>7FK7?-K%N*C:AV[JWP-9 *OSL#LX&BNO?4;CFI\V53X&-(&K),"M$
M#Q'K9#LG)%I5A!=CQ0(/Y(7^]=2.B2-;?*#CI)AWT:AEY(*WG6@^I4JMN [/
MMJ4V=%M!U.6*'(I;NE:Y]5S2J-.M$XI3$%-S4K[%2X0@]^0=.]_B3@&71D%6
M4$+X$3MAX%:.*Y==8>/6M2Q;QH55/EM\;AG&3LQ3!6T9-4%1%%/B47L@D%R!
ME".Q9PF$@^Z+V^,NCQB4%5%T35J*[HDK8BA=JI<.^@3&7H"$CO$V+41VH]U'
M3?P25L:=!.5B7,82>UI5%6##+8S;D1 -6<:!J=-FKBE3+S5W?7BHZ)[P>,V%
M&XE9*SW!%&'5!KKMZ;J+%T=:2?ZZE%9,"R/D'E2$A%$J(+Z5>B5[.*14>T\
MNC&@7C>)K$OEIK?%"%_1>WTEB(BNA'%P7YR71:$_W+?CK=LH[D(/U]?G@+ N
MN1D"]V5[]1IW SR3R**U'0G?,#]-$R <406%Y@DT!6#9?7F5BE7LM=/.MJ?D
MOE<W[#<#6*T%PQXP8VETP7Z9L$/M8I1N=4)<XYFXQN((3&P3:R,<>?W&;'0I
M('A""5*;T2:U129+BY8XN\(NPYL\-"?+10J6[2JUW:V%X-,FN#?+NHOELKOG
M;5#;X,JW'2Y]"^ 6M]X;%$O90G:?'<F!\SP/0"^XVR8==Y21^IG=OKG7[:3;
MWWJ[NVW.6^@.O1FOS*ORPKQ+KW.+\^*W7Z_9"]&NO&POV7L_\;?HK7^+,U&]
MF0^\%?)2J7'O,TOWVCU1K]R;]GJ]O:W?&_C^:D@LY*GV4K0B*.IP+?2]7._?
MBS[2;;O"JEOT#K1'KZT7^7:]:._@>_/*M.WMYML][KVFS=,;]H*]FB3HRW=)
MOECOUNOYQKRD[[<K^)(:3ZP=B_FVN^XC3!9CCK:'+^L;XAUVE^_:Z_;RN^5L
M[ROVGKVT+]&K];J,P"_+"\N:OE9OT[>. KYC;W2K\4Z^^5WRV_9*O]?O:NOX
M%K]%W.2:]ZZ^9:\DD6EXO_*.!VC^!F.,(YQ7B]5BQM@M=HNU8G,*+V8!TGFO
MF#"V_H: E8K[JXLU%"P&CBOWO'D 3RXF ,>_CIQ%6+9\K9A9[C:KY#6T*R)3
MNRUNN)LZMB:,L;CNOA&JQ37,BQ"HOOB1"7!70P@Z- WPW:.S*3'/&7%SMDF1
M$8_<9J51A!T;O(;A4KKY&\?&D"DV(?#*\\842)F;0J:LK;QERA(QS.2BS"#O
M)BJU;_6@ @R>U< #!!T8I;%MLMKK.Q5Q>2/:Z#:2!<&F&\*ALB%P(#"!F+S5
M:K=;$USA*G3%B0HLK8F!)IGZ>05'9S3P%^P"8T(HV?8F\E9Y.((8S)YY;J71
MP-$!8\%'<*:KN''!$##;LJ6ML3N0JF(-7<!D\#;S%#JA=S :3*'.*T@PZ :R
MP69PVN:V]@G"Q! AG V68SP:(AR?K68US,7FX8V(.MM$T[SMP*5G"FP$?\!K
M,/.ELAEO4W 6O,O!)Y9(F\8$-VF+Y ,AFDV&C4*:86?P'Z8PS0*DK8%(S!#L
MM;2!/MH,+,0TPL+'%LP&XVI>\/'+:NF"[L-NFD9\-M4O$#IR6,)0VFF6&4E5
MB7#)E@;OB\IP#DR6+0SL@L JC+83BD1G,M'];TL#-MP4:H,5[AGL#1_#/*\-
M_  ?;.49/P%:U!9QA33!-?3">' A+ 0'"_)PMG:QP2/(L*LQ K?!8 O<(L A
M">.@^6 ^Z% 7!,?@+@#$BK (LYS!@@Y#-VP0HR\M<(&6$ \B"W%J0[*=P!!Q
MBG;-3,3F@R)Q$2>^<K#E5KX)P1SP)ERS1,*>,&79\AUD-*!=(PG[/Q%Q_'';
MML2)[67D,<3$T]K?F@T'PS7QV<+"N,/FRDBLAG0WZ\_@U@73PM&L/W,+#5PO
M;S4<"TTKK#!62 <[#*+@T/81B\4?"S)<Q);$!QPI;.+&'M[:5KP[=*SK7=.!
M% >%^)LL-R(4Q,:P*TRYFFY\,#[<#,.]ND=<;*;.Q>"#,=G-W<5H,6#<]&$(
M>H]'W!?GP?2NYR8.JS05#%&D%1_&NP:1NY%2<T:P0/RG(< V\60\MS# BB);
M[+[(9H#;S6(8*Q_.)6CZBU;" ?$EO*W PTTQ ]?4H,(B<6I\#_^8); .'*.Y
MQJ"4#*6L[AKN$D8\#Z-!(?{body}gt;[/P^<Q[Q+ZRP]<:O,,7RGUS&T1K-,R*0A>,,
MO65G&<6#<$,#!&O{body}gt;3&59;%T+J$Q4R@5WQ!*L%7<!V/%J:\;(A$/Q5R&2UFR
MA,<VJ39&N]'$P U?K!_3PP=0.!RZ_<2%;Y>&5E@.WC' B-O1&^GQ4KP!JYC^
ML?0"(..]SC%V?!:#,*8#UF!]1!=Q!0OADV0[<7"#_ YKP_=29%P:_\=9\)\8
MO\W"WDR3>[RAC.ME-R1<.*A2A-!5+7U\C#%:.)0=PNIC$B(9H\B\ R/L&S_"
M+QE./!R[QO3%C2(-_Q:V0P_<#M?&@(Q6&-)HPJ?,X2*;563K\1HL(S+$\#$[
MPV< 74:.I1)(\'3*\5D\"/IC(S)3'"YTP&'Q"DP=@\(F32QLC0W(;C'TBTKB
MQ[^+=(P7E\&Y,3%\X"S'E+$L)""SR'5RH,L6'<4G&92<)C_(ET^$W,),R*K6
MH'P5$\C&+GND<H (.?)^7 7'PS^RA.P7YZ!"S6_,#$MCS4N9;!K;QIDP0=PI
M/\HB#$(\)#MF%G+#DK 54->5J0PDB\9OF> F^F8_J[+14A%J=Z^R4A:7>6=N
M</07IX!\4\Z0<\-E"BW<D1.RQ'#0,H3+C6!P-=P&MT($"!Q<LRQE>' 0+A 5
M&3HY:"Y_6BW?/M;R#1?K5LI,+Q#Z%\_&UN_O6^9FO\.O[XO]HG_D;W'K#-O+
MH,+X>_NZRP<NO%QN(AW"+_>+^]K)\K*8"/(PON"OR]LO\[BWKN%+,*.QZG*.
MZQ5/L>MRUMLP.[$_7<D;+R.^\W+'K/UJOI6O %DO+\P>\\9L&^K+.NS/JS);
M* #S9UP/&[WQL= K 1UJLN_V&_0BO1?S8ROU-I #21.Q*\^Q,O/#_.<POQSO
M_[GPMKZS[\UL_.;,QN/('#(/S)EOWHDR)\SM<LF,-#> 88*^7+V4%B/@O?S 
M(2H4,BYK^JH^KZBVQ<NA'4")G R"FKF>7/ Q%*I\HA,TVOF6)!7=0!=55:.)
M;O@G-T/-[V;=3#3)"V3>:KLWO\LC)]{body}lt;-0?.,?-:]!Q7S-8CW>LT@\H/9,%H
M-"=SC]WD#'DZSMS+H['ER1N#<V6<-./('%3 ["Y6/00(55PV.\P^'6XF+XC.
MU0+B[#-USN>GTQB51"I8AF?6"CXAAC.SYSK_C[ SQVRO]28,ANMP"RY]]6?N
M'';\S#ZIV=L[7\TPPC?Z'6$3B$-,4:Y.OXEO680\P\U/L^+,_0@RSO-_\5A.
MS\ECQ$PU8T9SW^BQ/%^Q>5SWG!2.$#HJLEROX6CXAW+'<@S.+6#T4 3L#K]E
M!@-_0*\WVZL0RL4GYS/?:#_CSW>%_GS\I(T,XND<)>W.2%\ K<U&#Q!&&L+/
MK X80N[,.K>;#/0LZT#SRXON3V*9_A?NH'T,YLFP(D,&3?W:<HNSH=Q4$7T?
M]/:!'*5[QG.!G$)71GB3S^PR,\ZV5?2P(;?/K6E?9#P#+:4N]@PY4\X*-'6G
M0\<:/#0/33U;SJ%B>X0VMPJHK\Q[1.-K$[0/71@]SDVT79:*;-#)9?0P]/V6
M_\7B(7091/MR5F1";X=<M,+\.P\D^%K+AH:ZSUJS DW]GM$[<^6\ZDX<'2H-
M=,>XT59T GTC,]$],L.</4],,[0,72D<I8);H_J?]M#%\[Q,1[_!]ESEK ;/
M6%C#JJ*E=J8BM#4,O;[,1U&0AT.31I]QS^>@9I9NR&$(/D/!%)[G7 '#0C)B
M F$Z_]'>'T^QY3X91 0"U*A(&3YT>/)(AW%I-,C<?F#.)'0#%O(N"KTT!]TU
M M,OY"[M-=>P)-@7:


?T.BRO:C?2G-R]"?-/C[3#QB2J]9-TOB0)(T^S[ZY
M,ZHA/V]0]//*+"KXS38TDF@W -#0M,5\0+/#U3,/I)@HTQUB,1W^CC<Q=,1(
M3R.T]K30_!PBTW#M/LU-?Z(?L]2\2:-O@#0@*3DWO_Q0-2TQ[YG8=&G6SFS3
MWW1##4L3QF+S04U-MM/]G1,=.J;-433S[(5&'F[S


+W>BC]M"]]'XB?<5[0
M00.$"<Q1U#D!ZGF.K/C)J("4-?7\ZR9TL1"=1EWU(LR#M,U<1X^^N>\]79?(
MKN;TODLX@WE,6D6M4B_3?#,J#6]=T/BR"AU56[=4M5&M-!/5_G1A>%(#S54U
M0[T8RP_7\U/--(^*^;31'%*?U>ZT6-U6O\5OM35-DL2^2C7)7%"SS0,0%KTT
M6]6N+QI[*635RJ_NVU6#M("U$UPPF\Q:]5 M1%O-135+FS*CT(&T2$W\;M6K
M(=>[5D/2??7X;%<CUFJTOWSHZ-5"M6'M.P,)4S-7'35/UCMBR^Q-:]:!=6(M
M6N.+%W78O%>[U:IO4,V&GM:'M61=PO5.?T*X7.1UO'*U:2TP:PCQ;<?$/$FP
MF,_RM+>RUI[U8$U<TXG>DZ*8P3[4PC5E?:%8I(P&8V'??8+8JM+;60N1T6AV
MO>;JQ,704.'_ZL&"]7?K^FC7Y+5[9UX'S;BU,3O@JCS4Z!5SD$)S0'7B'"%\
MN#V4B/N;Y%#%QY@9>/28#6]"3?GJURU"B\M"U"(F0MPX5&S(&-? %6"C2J8"
MU)M4K\TM0LPV2PBYI0;1\%X/V%Y$!5%TP1CY]0F=7R6Y]J N@I7F:_;<G,'"
M"0'14CBI,[_6Z6&2*SYD+"+K4-&'CE7K*8J9F\+7PS4GR4[LH1E+"8* ++[]
MPC^Z;D6EH[5N[3O;N3Z(TPISM1+=\M6P9)M+3G9Z'61+"(.N4;L^2-DB"'+R
MF1Y:5#:"?573V!I"I&NK(52(KI)[DUS96'8T'5HWOA8#J)M*\+A+B'7Z8?M1
M%1=PZF97UXHU@A5[Q50I=MT#H5{body}gt;78B_U!]?V3+V]VM;KX]=%9M1['8/=]6)
MT67<(3:;J_"]0A=QPA<R9S/7,"^T*^U2NWT.X'=BI&(/4\3T!N]44@:F737?
MU;EULC9$;R-'U'WZB%39LW98#5?7UF9V9OUHH]9H]JO-60O;6;9K36='O[!V
MD]U8$]O+]E*=;&O9UO7G'&P[VW,/78UA,]O.=7H%6I_9QS:PW6W'VMEV:_U=
M,];A=G,=7T/;@;:T_6TKV^6V,>UND]OGMK$-:L/;6[99S5=[3MLVLCUL4]LD
M;;Y-;T?;G_:O#6['V^/VLRUO"]SL-L&-;2O<_':SO5D7VP7WOOUP.]SB]L)=
M;^O;$+?%?3//U^CVM#UQ"\T,KL1=<3?<[79.PW!_W"?WR,UYE(6R-:#M<:O<
MC6*N/5OOVHZV9"+IVMNT=<W=X=[<[[;!'7$CS0CEE


VE-A0-;B9D;#/*;>Y
M?7$3O\;'>.UP7-B$;<;=(.A;8RI8/7,'U]SV_N)1M%)1-\6M=!-T5@0W<2ZO
MVQTWV5UC,R&$;L*]= _<2W?8[61\W>EVP-UK9UD.U<L-=]O=/7> YW9_J$XU
MQNUUY]WSV>115'77-3/.37/7"=]%9P,#P)CG-='-5K=79FMBI7,7W>KVO.US
M:]QQM^&-=?O:<[?<;6(#V0"WYFU@Q]6C-Z_]>>O:FW?EC7"7W9:WR'UWF]T_
M]]_];V?>?G?)?7F3W$DWX"U[W]XH]]JM=H?>M7?N/7OCW<,W[(UY$]^\-\S]
M>K?>4G?O#7Q[V\SW[NUZZ]ZV]_1=?$??U7?SK7Q3W\)W\KU\K]X'=^<M>@_4
M5W?I/7D_WN?WO>UY4][K-_H->M/>T#?X'7MGW]*W]OU]B]_!M^_->LO?Q[?Q
MC7OKW^'WZ5U^D]\NM__M?,/?;/?SG8 CX+\W [Y_X]_Q-P3^]FY28_>[0&CD
M<&,3H3&(SM]4AP.[@?N7KI*73=KZ(,TTU(U+ @T5.$;]@2N[3O *#HRJW_@@
MO\>E(([D0BW*@A/@!G)*=S,\H#*XQ?%)D1PV.+:+65<(0?B?P>XZ6I!&OU64
MD"))"-/!A <6?W8


MHNU\+'M\8K4- X'AB":Z\HY>CSVWZ?-;%6FK YD+6#
M2 HNF2 CO\@RXN2@O*X"&JZ,5)1T;0!>3JFUX@=;&RT:A3BI-3)JF>%58AX.
MCI /(K;UW7OFM2E?6K-S4J96Z<"'9B/B\^6N 6-+X+5F7@M9"C8>-R/^(;?7
M5C?FZI7F)&E6'5QX,UFW*<C5.%#B./A&&)%8JD^-S$TBN"-'-_JP==?5?5?0
MI]@^6>Z.O!&@^JQ41E[C+'@D>I:=XG7QW >XS75VX100P@LM*J"H.X(,=HGW
M=#42F\J, .,.^,J V=H.?'C-YXS7L-_A-?Z+]]_TT&=+9/HE@V2GRHFOUFBO
M.'Z)+^.0^/QHVHY]W>[P"ZTFJU[7F?*#U ]82=NZC>?<&N0Z[O;IJXHX/IZG
MN24+QL-%HR(-[L4[OK!.Q:KX:/LUV+9%9I>AE;3<@%9@\O+RI;'&PP&T"B9\
MR</[G '""7F'\-M"%Q5?MQC<4";2Q80;'XC@,2*:ZYC X:\(<NO4\GD&QV4]
M6,KDJ;<#]E4O543LQ:!"47?0[0I9OZZ>/_GU;5OWY/QN4%Y_BY@ ^'>]A7/2
MZ] H5Y3<DA YYRV %^#8=_<MB%_E]C?WG91SX_SW_ZV -^#(-U9^E-/?9+E5
MGI4+Y>FX'.Y^H][F]_L=EI_EWK=6_I4_X%-YUMV5!^,&^/:-EM?E4CG[/7X;
MT@<V7ZYZI^4<^%;NE4?CA?E<KI;SN?TAFZ#_YF(=X+'<<\ )]>_Y&P&*@"%@
M^[NI !WO+R\&_U* E7F= DO@OZ0Y,F::KV+(]5BN^/[$G@X5K)1!XRX01O84
M*\I1\9#LW<C"DS*&-@$?WD("[9+8]&_B:8A P_3*K7"@/ %)RN\QI=R62R?%
MLHZLN_#<>S%Q#LI@R6(U<BX8=\DY@RVLD(;)+,4N/$,VYYKR:]Z6.\K3L7J<
MB2/D1')RON'P43XN-%P?+T"JA7;Z!H/GKOES/H0S"M*YFXS7$ F?\'.M&E,S
MK/%#W-PA@ZIHKB WI,._SOM&'M_&+PMLWC'DYPTQ-MB?[W-LL?26'3L)B/3_
MTB@D&.[I_.5R*.@LL '\ACCHU4-TW+%YRL8YA6X=X\!T\I&\^07%W3%17$:K
M&NK8>(P!ES(D.GX^ Q;!4#&P/(&UQ^Y8BXX2 [4P>DBA0[G$"?JUT1K+@XY9
MCNZK0.AS<%JL!:_(N;F+7HJ'(M8'2URM%L6]#GV^H(LUNFUN!Z4+91,Z@&B=
M<\D_,0CV&L<-<_&"S+J Z+BR?<Z4E^@G,HK>&ZO(_SD*T[?\P:[Q?,&F.^+1
MJY=^HQO"FZIP/J9S;KZ@CPXGI^<]FI$\I.N%\T6 P!6/N8T.G&X;2\G7J:%>
MI\=FG;"$CHD;/Z$PMS(J*^<IR&:L?,S%([&@SAL[QTXZUK9;GLI"<G5L]@3I
MA+*5OA::ZG\Z D2B5S/I"W#.8:M/;[-9#*L;*^LQ1\RHH^F%LC\^SLQ0QS$"
M%(77)5M:L.*K.^C<\*9>GL?J#?.9/JHGZZIT.XY6T,<TZF:Y)PCJ<7J#?@>2
MY\7YFYR0:^MM<8S&3W#'1GHTS/0]"N0ZJFR/=1.JLK6>KDLWKK*L#BO3R;,R
M>UX2/A/.%T6\J2;$];J#;)>UZG&;X?8K2^G^NK!,N1#+@S&/H"%KI8)5AXQV
M?^BL.<MRN<GIYO&F[JA3YQ'[>=83G\1+.EKW,UH7\02-'$#A&^;:,NBY,>SQ
MVFR>$:?H=,TKO017Z8^Z/6M%#%1+\F;!L>=C]-JT3A:3;;KQS:ZN*T_L^BAL
MJ]?D2P:<TEOGPDG4F.R47^A,NGA.(*+KT_DWO"XW[3T;=FZ"K^:DL'-NKG/3
M7+M^CJW?YQ6RD)ZQ9,8+4\*^*.LJB5V'D+:/P?NYHNZ?B\JS2X NK<.+<GN9
MUJC=#C3[-DB5K>IKNXI^K..{body}gt;GK%+EC+[4B:,ERX%\1Z<M<.*2ON,<QU[+8+
MZ'OYA6ZCE^NMR.1^'O/HM+G>SK$ Z;BY>OZT$^8GDF::LC?&K+HT<K='Z2M+
M"'PTYND^,;<N9P<I@?O,'L;.[F0Z>1TI@.V->Y,&VO7N:[ F12H [SDQ<+JH
M_^NU^L3UMV]8R#M@W(MKZE5R0-RY0>S/N\0."0<)Q7(/6;V7*IAZ<!ZR9^^R
M6Z<.NY?ILV&H?IV3Z@>XJHXFB^AT>T?,W+3)>'OBGK/'R;0ZS_ZZJ^9F&_P,
MXM3G9_OYWBP(Z[>R>>Y$.^Y^^JNK%,)HD&_H\(]AA*<"&?!EUDHN7%]PE7+
MR[*R7,&[<-RR<<O>CO#4\B)++G?P1<Z5ZUUSY:S[8?Z6 _"*>6*.F+/P@OD7
M_L#;Y2T\7EZ5&^8Z_%VNE\?EG?M:/H #YJ3WE6[#\^9#?%0^F-?P?[D2?\1#
M[?EW#$_#^^51_ SOPN?E]S<37\6_\&4Y#__#B^5=O!1_Q>_P8GP/G\-_\7 Y
M&&^6P_!6O!FOQ4OA5#P<+\13Y3Y\%A_'+^!<_!H?QK?Q:'R$\"4 '><U0-,U
M4U=OWE+.QEM":;5N*% CERFU%\\[)O*!]B+OQ%^C85:@",DOYX%T#>WT<M23
M_-A[R:/7F?P='TD7T6-[MN%3=^O/-<WW1 <*-'D9WX*6="4U&G*3;T"-O!PO
M;GSR1I(D'V_6\D!\(HG+%YZZ_ W?&-W1I3P#&$^+U,$\*K_>L4+RXR_?D8?R
M?#Q+ET\6\U#C04,[HTJVLY>=5FO.%#5&_0O]T:(T\'QGIQ+"BQ(=/KNQWOS&
M6/"4SE!)*X]P.\^"S;MKSJ/2NZ7)D<Q#D+R\L*T^_PS?LWT\^#'5%M8]G_KF
M\XX\/&FWKL\WQET)0_-] OV<CA&5X/;" ,T36A,&="-]T0;S.P-!K\RG3!+]
MQ(9T9])7WA^9Y"W4??=^1(Z?Y^GS3T) VS&G-.@\QX^(4^+\W#35SQ[TAEZN
MSO,N_3.OSK/'*[-&K\I"T"WTVV",)X\(-'G4T!^=/KT:KT,']1)T=.3,1YY'
MO5R=U+_Q%<(1;=-7%"'T_GS,KYQ1/=N^D5;R0BR0V[%1T4V]15_1"M3IM$/M
MT#]77G22 T8STG"T*R_CB?((+C.>SNM[T8-A\];C]* Q%.\F)DBK/-%7>.?1
MBC0?;=:#\A/X^C#+HR93?;],V&NI: U<'R\\];%=5]_A-O;1?#%J24MJY^D;
MO=!7>I;]-XW98_+LX @3.MPQB@5?/U;[G0T]PC#:(_95B 4X2Y^AN#26@4O?
MSO2\(]W-D_:C?&R]U@>:VWSCL3E_*<MSB4WU5ASA'#L?0+CS9WRXP"CHTKO]
MT_3:'_(2$F6?2(;VC/-T_](;<M9]XHS=>_6/"T1OQW;WO[TPW3%/]0_H4Z]-
MY\W4=4CDVV_T:G<X'3]OTS(];>1XA_0E?6(/L?;TG+Q;[E?#TT9]=-^':?=Y
M/$5%WD^>WWUY3^ ;\9O>@;]Y6_;DPH+?\S7F+?7C.'Y"@#3UTWGA.YUAQIW2
MR$Y'0>P*/\;7\7)Y9A_$P^!;/!9?XA?X<OV*K^*?^,+\$D_7+^8Q_A//V_?E
MV[V,G^/;^ Q^BD_&F_B]O!I?T,/X2#P=W]R[^#\^BP_D"_DM/I'OU^/Q+WZ0
MG\9/^=1]DA_E,_E+/I6_QROY7/Z5K^7K\6#^D"_E5_DDOI-_X^OX*+XM7^,W
M\>T]CI_F0_E6?IQ?YH_Y6[Z73^8?^69^CZ_F%_DX/%4/EMOY=;Z<C^?3^6%^
MDT_HB_E8?I<OZ/OY=/F,+\,K^G-^H@_H%_I9_IW/Z-/X?+Z;O^;[^)'^EX_H
M>_J&OJ2_Z#OZ4_R.S^:7]T;^I?_H3_J?OJ5/ZH_X@[ZHW^F[^J8^IQ_K@_J5
M?J _Z^OZMSZM_^;_^:-^K;_G/_G _JY/Z4/ZO3ZOK^J7^K]^HR_LP_G&?JNO
M[+_Z;CRUW\=/^\]^L9_L'_NL?JB/ZR/[RSZL'^Y7^]F^L]_L8_K$OKF_Z0_[
M9SZ/3\2;WM:^'5_NH_OM_JF?WVO[X_ZUS^T'^^?^JL_OK_O0_K8O[>_[T;ZW
M[^L#_/A^O(_D%_RY/L$O\!O\V'Z_S^PC_.I^IO_7:W!XA+. R$Z&U7C#/_!S
M0#O0MU>>\" <C7__[X,I.Z_HP%06"B[X/5[QI_O;7P_>O(Z;1;B\R+#?]\*\
MS-\NSOLU/XWZXN+\%G_WTX\#])W\C!F'V_Q%?\"?[^-3GU:Z!]M':FZ=L14;
M=]T1_\8@\8WAM)84@N.ZX32,&IXZ9).H\\<?\QU?QE+']U;@H N"'ZZ3.KD=
M?YN/YI]XA'C(-1#B9R;IN^?O,_S9J"0N][.SECA !96?_#"_(@O8BN("?M*/
MG![:J/A[( /\X"+^PJR<SN+G5M"/J@$2'TDF8C)<%D!_X&_R#>.2;0:,*VCC
MF@;7?43:^CG?7D*,-PG,/3>ZVRCCVB0ZWN<K_#V"-][YEY,<@CG>^O_J\K[$
M#USIXQD#V0?_O>/V.-*?^U/\KB/O__992#>O02Z0DY?@/NS_;"_DR!?8 %G5
M&[.K1+Z7\*7'I9ZO]#O_DMO#$_@)X4\_T$"2/R;/UMF0^=?[=COZ_\V#]]O_
MO)_8[["C/[LO,A'E.YA1GNIS_YLL_2\?VO\3O^2?=QKR[K\TR_#/_R?_>_=E
M5CARW3H*V+6--^1_@A@<4,Y_VK^$7P!0W(?_._@1 -M_NC]R7P90WR?V\_A!
M_!Q^2[^%W\// T@";/Y- #6 Q#\[4Z]+2"#2@\4=GW(@GP:D6N./ _@![ ":
M #>  T#-'P7P!$@#+ %V^WR @#_U'P8P!=C_TP&B "^ $D <H @P!*C2$GJ$
M&]Y',\#FVD$B\V!MH_J! "N 53\DX,M/")@$) +N )6 >3X#H,D/[_<#O %Z
M 8^ 1L >H!E0"TCOBP!N =V ?R,FH-T. B@&M!89_B ]."XZX!VP#5@'3.*Y
M_=Q]>Z3&W)K@,:>IB,QM@#Q UY'0W&7N_@6HT,Q=*G(NDCD"6/P+  9W^O"1
M"?!K= ?Y'>AN1&>_JY+A[VAW;@RSUFZ.!UCS\(5U;(QVV+L#GE\#4%:@R8OH
M 5


T;KD3-8.9%?Q8-YYZE@JU#S7R?A.<G>N.]1YZN@/PQP(%KW."V:V"]WI
M] QW/;J2 OO.C1-,2X58ZA1V@AO1G;ZN:_>PTV!=O>2 U;N/70'/;K<J&]DI
M-MQY0+7FG,PN>=<)E&'8[%B!3*$4DQ[0-U>T X9Q H5S9;%5H)GL&V@#+ ,Z
M'G:!R0WHG*# %KB^6YSML;1S-@3N'$1*(97@P0?BZ,9SOL!^H&)L :AU<<_1
MJ.!SU+!TGD$03,?^0P;2YE!C2)@KASFL0*=B8!LH589V5CH=V> N4V? (VOL
MQN9WGS(/TI4C0R=)<4]UZ&Q8SH1GX'>


)@*- F6%(9UYHK+FOZD2*>ERQQ8
MQ))T&)K/G;VN25<.;%:@QY*!UL P((6,)PBN\Y#-Z,AV.! !73'P'>A$X =6
M9#XPN<!B1HI&**:A\PF&1I(@Q,#P'"U0U6(5I ?V 3->N+IF75?,;S01O->U
M]\J"0HSB3A10Z^*G4PMNNP)U84$"7B?B>E<2S'"$QK9W2<&Y&5PL4A<DF-3=
MN6!V';M"4/D.]]?2R<]=R;QVABV17EHPQ-89TXKD!<]"<SO"75'0+_BJ2^#I
M[]2 1+\$SV30,+BK^V3TZMR!];M4H)_L=V.G2P=^^V!<H\&YV+/N'A$+?)'!
M[GB!?ZF$X%50#CAL@]?U!!$+XKI8ADR0?J<9%*O!!1T:Z["Y8"CB6]<5! YV
M@]J"1{body}amp;47L,.*:@GD"H9L?H#OD$F=]J*@42'-)-!1=VFT$GO2B&A@*G+'U
MN=8(WXRF$?=@8U=M2PSV@F)W-4'.8+C"&Q@7U/0]0U9V,C+ZC'AJ-OBT*<WH
M!:F"W$"AQ3EP'GBY._%! <-=2;*IU*$EH] >)-K) O=D%$%X(-+.)H@._ R.
M "%FPX(O&9&#.W>&<LCE':"#6KL#R'$0/$/N> 6ZH$"$8\&UWHBP%2@=! 12
MUU"$9SO2&/JN0KB^&E5=!QMK(,*1H/DN0#@C-(@A[HP5J;]C8.T-<M<<PPWV
M!<UBE3NU'9"0](<%C DJ9H2"#K+4X)%P<E$,\PPN"96"?\ <@>\DU64N^^ Y
MRV8X%[P0%L"BA,>?0N&=>YAECB$D!Z[M#%'/,^/<_6YPX3\%4!XP*W@TLP"F
M 7. 7, WX%GP]4<*7 (V">N!04 XX)N0-_@:#!3N">V#=T(_89\02XCJLWSL
M[O) PD ZH9(" 5@I:P:Z !6%8,!#7PUP4P@$) ,:"O> @\(_(:=P#9@H9!3>
M^_2$H,(B8)Z0#Y@J_ *> 4&#J A*(=M. 6@%_&4U ,<-#T!)8=AO5&@/_!1F
M"9F$BT)-8:?P0M@KQ)J%@'1I8H(;8190,>'@<_PD^ Z%;[\W5K/0'Y?@,Q&B
MSZ:%\+TU3R5I!4C':K:I]SH.)C1J 0PP=O4GE.\M*^A[NL)KX CM5.C#XNDI
M!X6%J;-_D'7B61@LE/5I1+"%V2%ZH9"P "B!PA>V^2!\Z<*BT+008(#6"QBV
MF3YY7+/"7T7P3<4K!/]E"[51XK-'X<4OA!))F (*L:J Y[3 2RQ/L5<K;!C2
MS4YYRA5]H:!054C?\1>ZU42&UD*3DLD0E=?:,Q@.CLA[.8-=6LK0?"([$\!X
M8K!Y<0;<7DZ/4"A-8P.&"MUOY(-#0?#L?U'.:^GU]7Z%[4)TAWL!_< FS!; 
M\YPHT3/)GL8+NL?>LP,B#8T]*T&Z01JBGZ<\>,Z #-\X(D-VX9MPGU= J\\D
MX_IHM9]JH<LP2M#1"Z$):;1ZH4&3&49O;;CFZ.@-:3YZ<,.(X:TO7$@W7.) 
MT%9Z5;3#GL\PB/:YF1F>YX!Z5[W 85Q/8JC?6Z?U#>=,B,-^A%!OL:44 ?!!
M.\*&GY%@H(=@J9<X+.M915:&%S/,X4)F59(UC%?HJ+)Z:$-$\#P76A?NPGJ
M,&YZ1L/5WEE/83@R=!4^0]IZ;33/X6>OP.<Z,QP*C/)ZKT,CB&IO75@J%/F8
M'GR'=[U52T!#2V786QPN#*49LKR.833OL=>/B.P-#U,V7T-]B>BP4>CZJJ1Y
MV#A[E#C/WA*MCX,R5!+("LM86<-<Q6FO66!* ^FETFI-+<,X8'*IPZ%0RE;1
M]MQ25(;'36W/>9B5DQD^#H%[V4.QH2=M5?@SS!2F#@6(;J..!_+P>5BE:A=0
M#4EZ][]ZH9@'=#@IV1X^# N(5B\*XF]/;8@[R:FQG80.BAX*WTF.D;7AFXYD
M^.@\'[ZV'_>P6G8F: $R!%E>XT+KD*AP6,@S7!82$F&T$(7X0I1AXA 1 />
M{body}amp;V'Q4-[80WQ"BA!M!/^


V(M4,D8@[1WL<X?#XY 0\4!\)+(;G-8N@[P!C&
M_X: @T,@XA$15N@I["(2"WV%.T0FXKX0BQA$+!1Z$8>(@,(SX@R15+A%Q!,F
M$;F((T"FX8JK37A%[ +NJ"@ZKH54C$\! '@OFA.R#J]FY@.^02J&>>)_62#&
M"5=>V 7RB[="O;1&+!9^$1E^/H7XDJJJXF([,"1F_O )F2G&PFE0>LA&?",B
M,"@U]S.LQ7<L2V9#]"1B"JT\B(,(&BSCCH(H;".>$FEN@0W.U(H'BP#BDDB9
M$1^)N$2J7BRQVZ%6PBFPW%R)IL(FHK +<2"/L!HDI39L:H__H1\PC&CJPE\%
M-% I&+L7HAMQB7@_$;RQP)Z)%Y667P31@'A+S#],$6Z&0L->PBTE@S=-;!4J
M$46#TK^^0_<*E4*I"R:.{body}gt;V(P;760IU*BU)1("=2$_F%5\/GDSR1T>"<TGWP
M\[B)1D13(KEMGYA+F"2.5"X'ED1E(F7'.!:YRE.-' AMB[T>(AP1C9B=:6J=
ME6P*(15B%VZJB'=/)",&3)(GX8_VU+%$KC+M4B$F#Z.%9<2 8D<1G@A,A!<Z
M$BF*-,1&(AA1HEA.S">B"FV*K$*<(@8QBWA.U"GB$,V)$T69HAJQB%A*7"G>
M%)F)^$2DHD=1H.A2G"D*$W.*2D66(E-1B"A4S"56%6&*G42C(E21IOA*3"D6
M%8&*-<6HXE&1J^A.;!&*{body}lt;V*P$* XE?1IZA%G"IV$Z^*<$6B(A%1K3A7?!6&
M%<F*3<6A(ETQC6A5E"OR%;&*+\6XXE[18]A7'"S&%/V*A$7 HE/QG3A6?"KN
M%+V*=46>8E 1L7A8-"QF%<&*7<66(E61LGA99"OV%,6*6T7'XD_1LSA9M"P&
M%CF+IT73XF(1K9A4Q"MN%E6+>D6[8F;1K:A2Q"R6%2^(HT70XF-1L_A61"VN
M%G&+5[PJ"VN1[;:"&"4!%WV(*9<C 5E%66A1D7B4E>J(.0(J N"@,B-5)"L9
M6>X&_A..XJ"%Q'6Y(B72%NLY/;^W6S2IL3AKXRX>JVZ+@:SP8B^AT199)/:=
M6OH&GSK7HDCM"==8Z)#%%B6+GJZ#7G!*J_A=Z\+5%[]4\L4[GY:K7Z)EZ'*1
MJ1A?7#^O7S !>? *5'--4/035KAKUZZP\S-'R$F9#5B"UP3[XH1QQY'G B:0
M#V8&?,3.XM>!$==(Z0J:%'6+MB*WTKZ%4A52\2X&&"E$?3]:E(:QK;@G)+I0
M%-0'_ZC:HL2,%2>14"C,&!.+I#[C$M<%W7-TD1_=XGQQ*2[WH6@1]X;L0G3Q
MHI);H+\,(X#QI/B%:S+^JP($)T8:8I0QF)"BDB9R+/@*1@'12Z\H4K@U,,?Q
M!4$)[$6VW/SOW953..<M%3D>P#^H7,8 PI96K,ZQ&6,3/K:J86K1ZJ7\4WC5
M%K*+G\6^F_NE< !_T;G(0;Y %[F)'$3AN?A75/@%8#00213)00-%H0A$ 760
M_]PM&P0J1(GM!/)'Q,;A%V>+3#4((.O#R^AOD,% %T4M"Z53(^S(U*A=')7P
M_\: 9K:47VD1'_?W>S/:%O.*A479(GJ1@9A;?#&V%WF+.D84(XWQUOA:U#7B
M&A6+]T7(8J/1MYAL!#:N%86-@<8E8[21L1A:I#;N%K^+OT9LX[(1MIAK_#3N
M&@^)H$9B8V^1VXAL[#8J&X&,S$9SH[,QV\A?[#5*&V>-4J9!H".P$"@)C 2B
MO^Z-GA@Z@P?1PU="9!-\YG8Q'R#+W"@&4,'^(L50G7*%2(;A(+K"6!>UJ?_L
M!GDW(ANSV*Z07 <8;-OAOAZ.U)F3G3R03QB/&0=N N=D4[R'XVUN*R0?)"\"
M*_!WOKI1UT<-I1(+RPEB;SQB[$;MS65P4,>H6S<:-#".-J&"&+E1ZP4C[-\=
M%R-).{body}gt;AD$W,VAC+ZCF22"**HCVS8!4,,%/>L2/1Z-R# PT=H7M,X!1T' -9
MZ!@W RWP''G0.O=[JSHJH:8R\YU#5A5#39-RA#<R8U!W){body}gt;)H[L,((@+6YYT
MY\1<$0BC(\AQSP@9:==<JR".,,=)7_%"7@<1E,]E2^2.#<=VXXK$Z]@,PM;8
M'+L?!#H! D^I(E9(NY#5A"1E^!["8]IQXPAN!+3\+[X9'+H$@X?N30=UC-.U
MQY".5,:<V +'?_,GBY$P!9N#2+I:PW!P,>AS'&I)'@L:HK"D71/G]"A)23W>
M.@@R/T+BH+2*]59U)-4H:9Z"F3?:XY&.2W=[W,A,[R"$-<=M8Z/$:I&+&CV6
M'*5?L<%=0XGP2 !XW#T*%NL/KT<MD.R1X1=]1(  1HPRG<>AH/<.VEA/4SKF
M'/..OD:Z8$\H;C#U.PQN;,*/44*0">CQH99]!#OR&JN)Q3&Y6&50UN8=I-TP
M'*V/=:+Z8UW#.Y-FC*YT'V5C_,?7W96BXLAU]+L)(&U5IQO@X_#I -D14CV:
M.)1B8L&IHQU/Y%@5,P11"-59OL&F("]A*]$9/#[>!JETZ,:-25[J2KAT1#\N
M^4*0S<$1)'EFYOAQ##R>&P<=#\@8&"XQ._A'X#NZ;^"/F4$ Y/T1C69^%#KV
M"(F.]:ZM8$E!/5A18 \6*Q2.=)H"#N$G!^FH:3J.+/"#N0_]8->F^%BVPUQ(
M'5N/QB8JI'/F"*F&^=GMA8)VX @+9!=RZXB"3,"]'B\W%D'4D(9P:N=V[!"F
MYJ""-S'PW>.Q#5EL7-^A'=-"ST=XH^R@^A@84S>"/>R.@<'SX]"1[KB_(42"
MC8(E8L@(9 =&F>B(?)L!*"*1<<B?XRD+1?AY%,)@(M$8::- 7NB1\]B%S KQ
M9$9@)ZU(9.SQ PEK/!-Z\%)XH;\T89GE6X;!@_-IRVZ1T+*,WRQR7&;"6V1)
MCBB-K41M8PK2V-B'O{body}amp;*&-./PTAOX['Q^JB,+$8>'BN+Q,AQ8S0RV(B,A$8V
M(Z61UTAJY+OQKKB-##>2%KF12,AIXW"QNBANU$:&(P61S\AC9#?RVYA0[#0^
M&ZN1ZLAS)#AR'&ERU$1Z(\F/\TA[)#L2&(E23{body}lt;R(OV1O\519&MQ';F,3#>6
M&P^2S$ACY#]2&&F-5$@*^B(Y@L=@W'%DTNB.A)CU#LY_38IV)'ZO3MCF  LR
M%W-.&D1\I"4(^3>03,BM#'L^),F"I,2/LC<Y2DD:(B.2X\-I9/7-)2F2-!!N
MTO)KR+^98>Q+%$F/#!O5H4B-TZ&09#92%D*3[$?&PP*(^\@;$5.K)&E6Q!:V
M@(J2#<DV(BY/ 065!$CB_9A?]ZVJ9.51)4D\%$AB  \B"\0V(4\R\_ I0%*Y
M"8M 0LERI A&*UEM!)J%)*D[;,EWY*>B9JB!N!FB@LA6LD-G)(,O+KES/*L%
M#8TVPK.B80XBD3>#XDOV)*%/3T/HV?="B4;WZGO1)&=09,,9F=2PO<"/%&09
M/BJ3&)=N1!KB;0B_VNH9)7,''DFQ4KPE=4! JZ14]#1IRT14AV%RUXAA=!JL
M]#B374EWXZQM-=EL9.7\#76'C$FDI$,2X4:;_$8RG"*'833=X?NP+VE -$Q.
MCH"3DCUC'&L')QG%DFUQ#B6'PLF=)%"2U0&MPTQ*KWP7233B&6H29C:]<G-Q
M''


)P747G9R,*F;U$L6OGJ3RD?5!.[0HQ><C$W>(Z]8Z,FAI/((>)@[A$ZZ
M)P.2O,;XI%?2C$0]O!NV)[>35LEMGU92 =6?K"A8#Z=G)*^*I .D)DGH\Q[J
MT1(+X4/567DR&/D-,4NJ&C$NZL-(1B&ARTB>]$Q>&RTC^DGS9%%A%U.)H*7M
M#_6'K:"WI,LP1(F0S/8=^,A$+$IXY)6/,&F=U$A1$3]QK[QZC6/2.[F5%%%2
M>#"2S@Z-Y'!2KV-3VS<:'78;.S\VQ0?Q D3KJ?#EU. $(48;@<&Q3$"+,%+F
M&VN4MD;?9%(21YFE9%#Z*+V4V,C=Y$M2+1ESU%)R)>63Z4DQ98N2."F3+%."
M*<V1ATG99)QRV&BF_%+**/&3/<HP98!R3=FF3%/N*1.2?TJ#)*"2(1F/G%.*
M(_619THUY: 2)IF/W$_6(QV5;4E$I9V2(#FIE{body}gt;^)RF5>DI"Y4*247FIM%1N
M*:6(B<I )9L239F,5%0**D^5HTI39:I25-FG+%6R*DF544E-)9Y22#F=S%1R
M*C^5M4HXI:325DFF]%/**FN3M\I0Y:]R3%FGY%46*W65D,H/9:_253FLY%/"
M*@N5NTIDY1 2'=FL7%0N*V.5P<I*I:&26IFM-%:^*>62GDIA9;=26IFG)%?2
M*CF)F\IK);0R62FGC%:"*[>5C<II9;RR7/FN=%>Z*>^4P$IU9;KR6%FO9%?2
M*;^5]TI,I;D22TF.Y%<&+,.5VDI[I:]R7-FOE%=V*N&5#TN%);.287FPA%CB
M*M&5LTJ"Y:/287FQ/$O^*_&5Q$J Y<)27YFQ5%!.+$F6^4J#Y<A297FR9%EB
M*U&6(4N0I;-25=FJ?%FZ+->5'$MQ)<QR9OFJI%D^*_>5(LN69=#29CFTQ%G2
M*RN6$DNBI<S26GFS!%HN+5&5-4NCY;G28WFH]%=6+7.6"4NK);=2W&@].%\A
M++-RQ<60W-=2P'CA&CED&>N!/HA:VM%R90F5XQ#,{body}lt;Z6/TO6 ;A%N3AGE$!&
M*DUJ,JY,#-@ ;JFUC!BH%Q\'4\:SHM/&O)APX<.U5-2+3A0E(]+RKO=>K'+1
MX/Z']$4:0^#2:2E:#+80HA27?4N8EW]Q.:AET5AN([@MP AOB[I+8)E]2S"R
MY#A[3TOBI(-QW]+F"EE,+C>,=(,*HQXNN_"?R%66'MQ*%0P/8^&2.VF%HOMY
M%$J,^"38)4>BP^AD3"R<+3<9,<98A%N%)Z=BO'3M+N>5,@(>8^*O'S%TPTP*
M&7,*V#_,9=.RFG5DQ$ST(Y 3,R@KHZ;EQUBT]+]M&7L)22\NI1CE<+#K6C38
M%]E=YTN^T-C2AFCM0G1!0%Z7;37;'[[.1P";<CK>-ZPNXRY7"OGR,]F6T!/4
MX^2,Z"MXWY&H^@+ORC/J$52(NY(^8W^AH=BE=!(-&O]=Q36@0M:R7)1HO/XM
M&N53$4M'Y:-1 *A8P:ND+)F)>JN2W&6BP'B'K%;Z%>5QZDM"&N5R?MG^H6'^
M%3F-,4P5 :OQ%6B4FUI"JGQ0THA7H[KPK"9K+%@FN&J-W\FXY0DS=1FUG&%:
M+'66V\LE)NER<8FU]%8R,968,<LIYLJR?%FRS&$J*Z.864P;IM#RBNFS+&/V
M+,^8+LQ591JSB=G%!%5N,->68TPM9AQ3C*FTE&/6,>F84DO/Y1>3BRG%Q&,Z
M,9.6>4R3Y1WSB?G&]&'Z+]N5F<N.Y87R8VG'#&1Z,1&95<R!I2#3D>G&M&)>
M0^2- S#4G+WQ$(AOA%0X*F(Q_48KI00HE$DF^#=:V@2.9"N"8VD.I_/(6AP]
MUEIW0,A?4"<RV?.)E&"$(A>93\=2Y +L%'D/2T46(7\9J\A 9"O2\3BPR4""
M(<=XO4>UF?:1%3E6%.!)!8V9J;NB8OPB8E{body}gt;DT1"+ZF/-$CQX\Z.:=F,J&4N
M(KF9.+EL9OQ1"$G(O#=Y,\F09,PSGR-2%"3$.6<F[5A0$\'_8R$2#>3.+!BH
M'1];%,=$G9:,J/: U#C&-)*8JPV/HS93 ^DGY$"V(+^9@36V8QW2Q/!V) BF
M8U".J$;Y#&2E]%RM!{body}gt;--&92[Z]XWL.L1"?*QQ."2J14$N11CU3F,G&- ;1
M6UIV;@0>PP]2ETESA-Z5,Q])(\U[9B*3IA&#?%/TPS0)"<AGYG^P63#/]/3$
M-,<V=LNNA_!11G=L&-]](:.98<A?)OOFZEB G,0,-;=T932M8W-LG-G33,R]
M(6=BT\'0T%/3*VA:$,SH(<N. \"S(X4#[XC0Y*Q1(&U>SP:0)K32PX"(+ ]>
M-+>/7+RS9K=@4P.%=(PQ)2"12LW"(];1A7F S%%U-6.9EK&99N?II_G/A&,2
M@QR'#$7#X%Z)$SG6E&A^?0B;\D*>9%7AK*G;"MRQ'I&:=2=5I*BNK%GA.6LJ
MN;8WN<? )K OF>F!)&E:FF"0+<'OF!J2>Z73_-(E'R>6T\R[XUN3F>EU0VTF
MR!XJV,RZIL619]F]@&R6'B^$/,C$(W=P1J+6Y&.>OO*:D\?"9CKS8M<H4 ^N
ME)R0 1P3Y%30[#%_5/ A-P&1&HXSA*>%KY"%!")L(4F1(4'_HZX,LPE &FD2
M((.:GB S)$L)/I>&Y$*&-Q=A0<BJIK*MGUD/<D'*?^:0#,TZ9'' 0PC>E&D(
M-*F:@K3 HD%3$8G1S$?.:P";^\Q[)45S7N%\E&E2,H]J"$Z[9D@3I7;=7&::
M-LV8:K#B)B SB^7;-#R^-.UD<D<I)(ZEPQD*4M_A,L=A0IFCYMQ1R>3-9&JB
M-Y=O*IPNH0O'E:0M(^%AG6QFN,@0WB[R6289$I?Y(I.8&$Z*Y18SG;G&Q&+R
M-H6<<\P/)Q73L/G@Q%CV,96<0\Y&YA]3L&G)]&.V,6V72TY#YD<RR;GAO'(Z
M.<.84$XN)Y53DOG(9&1:.9^<74XTYYBS8<GDG')&,MF<6D[19)3SS GF3'/6
M.=><64X])B2SS>GEI%IN+<&81\Z=)3A3RMGG/'%>,[,$,D@)YER(AGH!'3N
M#/F<>D6PI)Z33_+D@3=1C: &6$XG4%K2T2G8B5'".04&*DH)A*=3C;E2?%%B
M)D>=8<XE'XTR"HB>S*\U)B>=2DF&(9YS94F9G&0N*.V<C4[JQ::SI'DG"$T"
M,8-.NTY<9Q4(U5GHA!BB\Z"8:SUBIZ S ,B2)%BB.N];/S18ISS$S0GIS$NF
M.I%].4EI9YI-H)/I]*-=0+2=<)=@Y[(S)J'LS'/VU#R4A<Q80;F3U^E-E'S4
M)?L.=\G]X4;RS]DH7'<*.QMF?TGV66!R,CFA)'*V&UF4-#W-I.Y#GH>@#"!F
M)7F4]TZ)7V22:VCMO.]).BN2D4G8I VBTLF1I$X>'LZ'"4^[X?H,'I&;1'>:
M.;<4]LX^IE@OE.C1.TW..XV8;)F0)Z<SWG&;M$_^)T^>54ZSXKK3B%;3<WGR
M.SV>"4^[8JL3,XF<Y*$I)T]Y.\HDY:Q3KO><?'EV/)M>MDX;Y;6S#&C5LWF>
M#BV'Q\YA9K7!UVGI%">%)VL+"KVCI]X0Y7D-47FR.^\N!H(O&BE$ZQGUC'DR
MH+R>.<_[


V2/7GSC!O>.2N"S\['88%RKU?P]'C*MHR3!,NYIVO!Y#FD3'N*
M*;.=K$,'I2(-D]8XD$Y^.1>4^;51VBTDBQ%74.CU/=-O]@VT9[Y2EG8_W&VH
M+E"4F8A=YS!'\KGR7/,Y)2F-7L\9U%12SPGP!'?N#M&8%,L!I>DS7@@L<GB*
M0,*2%$\J 2403& )A#L]6OA8/(*E4Y%R3V$I1*6),D\,:(=69IB@2BG*7'KV
E"OH"(X Q 'D@#5 &F ,$!A0#90#&@ )@#H &> /< >  $0'4 )B@
 
end


----- End of forwarded messages

From dstamp@watserv1.uwaterloo.ca Wed Oct 23 15:44:19 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA28998
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 18:48:28 -0500
Received: by watserv1.uwaterloo.ca
	id <AA07249>; Wed, 23 Oct 91 19:44:19 -0400
Date: Wed, 23 Oct 91 19:44:19 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110232344.AA07249@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

A reply to "Gary McTaggart" <gmt@reef.cis.ufl.edu>


>-When objects are moving in the "world", would it be appropriate to only
>recalculate the screen coordinates from the bottom up (world coordinates to
>screen coordinates) only every X number of frames, depending on the nature
>of the movement.
>

Not a bad idea... of course, you have to keep track of the object's position
_somewhere_ in full resolution (in case the user "moves" closer).  In
effect, you don't update the world database, or flag the object as moved
right away.

The problem is, (especially if you're using eyephones) that the viewpoint
is just as likely to move as the objects.  This requires almost all of the
objects on the screen to move significantly.  It would work fine if the
viewpoint doesn't change, though.

>-If the movement of the object in the view coordinate system is:
>    1. a small amount of rotation in on the X or Y axis
>    2. any amount of rotation along the Z axis
>    3. any small movement ("small" determined by experimentation)
> 
> , could we not treat the object as a 2D image and use the screen
>coordinates along with the previous Z view coordinate to approximate where
>the object should be?
>

This is practical in some cases: it depends whether you do partial or full
screen updates.  Again, I'm not sure if it's always appropriate for VR,
because the viewpoint often changes.

If the object rotates on _any_ axis, the rendered image will change.  
Because of aliasing effects, even subpixel motions will affect the image.
Whether the preservation of this effect is important, though, I don't know.

The 2D image idea isn't too bad for distant objects, though, as it takes BIG
changes in the viewpoint or the objects themselves to change them.  So, if
you have an "outdoor" VR world, it's worth it.  "Indoor" worlds with all
objects close might not be able to use it, though.

This whole idea is a form of partial updating, which can be useful if
there is only a few moving objects or the viewpoint is stationary.
I haven't started serious work on partial updating yet, because it falls
under the area of the graphics front-end that generates drawing lists.
I've been concentrating on the renderer because it sets the standards for
the rest of the software.  It seems that a good VR renderer should also
be able to redraw small areas of the screen, which is one form of what you
were suggesting.  I'm not sure whether keeping individual objects images
is a good idea, because small objects can be drawn fairly fast, doing a
"cutout" copy is quite expensive on a VGA video system, and close objects
that look big tend to move and change a lot.  Still, some good ideas to
consider, some of which WILL affect the renderer.

>I have not actually implemented the idea to test its effectiveness, and
>being that I'm new at this sort of thing, this could be a common practice.

Yes-- on lowend systems, and in video games.  We have to see if it can be
fit into a VR system.  I'm pretty new to 3D rendering myself, although
I have a lot of low-level graphics experience.  I'm not too thrilled about
programming the world database handler myself, as it's not really my
field.

And thanks for the input.


--------------------------------------------------------------------------
| My life is Hardware,                    |                              | 
| my destiny is Software,                 |         Dave Stampe          |
| my CPU is Wetware...                    |                              | 
| Anybody got a SDB I can borrow?         | dstamp@watserv1.uwaterloo.ca |
__________________________________________________________________________



From timd@twaddle.dell.com Wed Oct 23 12:52:24 1991
Received: from dell1.dell.com by karazm.math.UH.EDU with SMTP id AA29008
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 18:52:59 -0500
Received: from twaddle.dell.com. by dell1.dell.com (4.1/2.1-DELL-G)
	   id AA09199; Wed, 23 Oct 91 18:21:18 CDT
Received: by twaddle.dell.com. (4.1/SMI-4.1)
	id AA23869; Wed, 23 Oct 91 17:52:24 CDT
Date: Wed, 23 Oct 91 17:52:24 CDT
From: timd@twaddle.dell.com (Tim Deagan)
Message-Id: <9110232252.AA23869@twaddle.dell.com.>
To: glove-list@karazm.math.uh.edu
Subject: mailing list!!


PLEASE add me!!
timd@twaddle.dell.com

I have also been generating a net-list for the glove and
would share it.
I have the manuals for the COPs-800 (the family of microPs
the glove uses) and am pursuing a piggy-back solution to 
add another COP888 on top of the existing one to get VERY
detailed info form the glove.  I am trying to get dissassemblers
for the COP-800 family and would be glad to share info.
thanks,
Tim Deagan


From dstamp@watserv1.uwaterloo.ca Wed Oct 23 16:16:58 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA29130
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 19:21:12 -0500
Received: by watserv1.uwaterloo.ca
	id <AA08943>; Wed, 23 Oct 91 20:16:58 -0400
Date: Wed, 23 Oct 91 20:16:58 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110240016.AA08943@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

 Dave Wargo (dwargo@cs.ucsd.EDU) replies:

>>
>>I would be interested to hear descriptions of any homebrew eyephone
>>projects that have been completed.  What diplays are you using?
>>Monochrome or color?	Binocular or monocular?  Field of view?
>>Optics?  Are you monitoring the user's head positon?  Weight?
>>I'm trying to get an idea of the level of sophistication that
>>is currently being used, for use in future postings.
>>
>>Please post to the list, as I'm sure others care too!
>>
>>- Dave Stampe

>I am in the process of trying to put somthing together. I have tryed at
>first to use a couple of lcd tvs from radio shack and they just would not
>work for what I wanted to do.
>
>Right now we are trying a couple of sharp displays. I think the real trick
>is going to be the optics. This is not a trival task and I would be
>interested in hearing what can be done short of spending $800.00 for a pair
>of LEEP optics.
>
>Please pass along what you find out.
>
>Do you think that this could be the begining of a mail list for
>eyephone-list?
>
>Thanks
>
>Dave Wargo
>

What model of the Sharp displays are you using?  I recently did a (non-VR)
project using the 5" color NTSC/RGB displays (forget the model).  What did
you pay?  I can't seem to find smaller ones for less than $800 (maybe it's
my supplier though...)	and the really decent 5" models are over $1000.
From what I've seem recently, a lot of the newer pocket TV LCD display
have crummy resolution-- it's cheaper for them to digitally preprocess
the image than to use a decent LCD panel, I guess.

I guess the LEEP optics cost *is* dropping-- last time I talked to Eric
Howlett (designer of LEEP systems) they were still $3500 each.	Guess
he decided the big markup on 6 cheap plastic lenses and a case wasn't
helping sales (B_{) or maybe the production volume went up.
From what I know of the LEEP optics, though, it would be difficult to
add LCD panels, as the display's active areas must actually TOUCH at
the center to get a full display.  The monchrome LEEP units that I worked
with actually had part of the PCB cut away on each display, and bridged
with 40 or 50 wires, and the right panel was flipped over.  The original
NASA design used one 640x240 LCD panel to drive both eyes (not a bad
idea, if you can find one that has the right dimensions).

As for optics, I think that we should try to stick with single-lens
systems.  More lenses will either add distortion and chromatic abberation
or will reduce the field of view.  The LEEP system actually USES the
distortion and chromatic effects, and compensates for them at the
camera side.

The way to get a big FOV is to bring the displays close to the eye.  But
then the user can't focus properly, so a converging lens must be added.
I've checked out these types:

- Biconvex: Forget it , the distortion is TOO GREAT (unless you want it...)
- Planoconvex: Less distortion.  Fits nicely against glasses.
- Meniscus: Least distortion, but can interact with glasses.
- Aspherical prescription lenses: These have NO distortion over a fairly
  large FOV.  I think +10 or +12 Diopter is the strongest available
  with a decent FOV.  There is some interaction with glasses.  If you
  can get them, try out cataract surgery lenses.  Prescription lenses
  are special, as the back surface is ground to work properly with the
  eye "rolling" behind them.

A rig that Telepresence Systems in Vancouver put together abuot 3 years ago
(no they're not currently doing much on VR, concentrating instead on
3D video for telerobotics) used a pair of +10D glasses and color LCD
panels from handheld TVs.  There was a lot of other problems with the
system, but the optics worked (if you didn't need strong glasses).
Some adjustment was provided in the spacing between the displays and
the glasses, for about +/- 4 diopters for those who needed prescripton
eyewear.

It is probably better to mount the lenses on a frame than to use glasses,
because of the convenience factor.  Also, if the displays (mounted on
the headband) move with relation to the glasses on the head, it
causes a LOT of display shifting.

Some of the wholesalers for prescription eyewear stock preground plastic
lens blanks and may be willing to cut them to the desired shape.  I got
a set of +10D blanks cut at Imperial Optical in Toronto for $35 each
(or was it for the set? Lost the invoice).

Distortion may not be too great a consideration-- UNLESS you're using 2
displays for stereo!  Then the distortions cause a reverse-spherical
distortion in depth except at the center of the display, and loss of stereo
depth toward the display corners, due to vertical misalignment.  Look at
a sheet of grid paper thru the lenses you propose to use to judge the
amount of distortion.  To reduce the effect of distortion, set up the
displays and the 3D software for a 1 m convergence distance, as this
will minimuze disparity between the displays for a stereo range of
40 cm to infinity.

Another consideration with stereo displays is how to make the 2 displays
overlap in the visual field.  The average distance between a person's pupils
is about 6 cm, so unless you have small displays you can't just hang them
in front of the eyes-- they'll be too far apart.  One way to fix this is to
tilt the displays away from each other and use prisms to "bend" the images
back in front of the eyes.  This can also be achieved by offseting the lenses
(Brewster stereoscope).  Problem is, this causes a WEIRD warping of the
picture (vertical lines are bent), more color problems and blurring, and
greater distortion at the display edges.

The BEST method is to mount the displays SIDEWAYS and use 45 degree mirrors
to put the image in front of the eyes.	The picture gets flipped
left-to-right, though, but this isn't a problem if you can define new
fonts on the computer.	If you're using CRT-type displays, just exchange
the leads to the horizontal deflection yoke in the display, and everything's
back to normal.  Interestingly, this limits you to 54 degrees of horizontal
FOV, because the display must be as far from the lens as it is wide (draw a
picture and you'll see).
 
If you're REALLY picky, use front-surface mirrors to prevent double
reflections of bright lines on dark backgrounds.  Front surface mirrors
are pretty heavy, though, as they are usually 3/8" thick.  Edmund Scientific
(Efton in Canada) stocks then in various sizes.  If you want lighter
weight or cheaper mirrors, just get standard mirror glass.

You might also try flipping the LCD panels over, but that is difficult
with color LCD modules, because the electronics are then on the wrong side.
Also, the vertical view angle of the panels then gets flipped, causing
contrast mismatches between the left and right eye displays.

Now, how to decide on lens powers, display distances, etc?  The formula for
lens diopter is 1/D = 1/F - 1/d; where D is the lens diopter required,
F is the lens-to-display spacing, and d is the desired "apparant" distance
(I recommend 0.5 to 1.0 meters for comfort).  All distances are in meters.
Be aware that distortion increases with lens power!  Nondistorting
prescription glasses have smaller FOV's with increasing power, too.

For FOV, use tan(FOV/2) = s/d/2, where s is the pertinant dimension of the
display, and d is the lens-to-display distance.  Most display sizes are given
diagonally, with hsize 4/5 * diagonal, and vsize = 3/5 diagonal.  A factor
of 1.1 or 1.2 increase in effective FOV _MAY_ happen because of interactions
between strong lenses and eye movements.

There are some subtle problems with LCD displays.  First, the vertical viewing
angle range of these things is less than +/- 15 degrees, so if you have a
vertical FOV of 30 degrees or greater, the top and bottom of the scene
will be washed out or darkened.  This is why the new color LEEP optics use
a diffuser plate: the viewing angle increases at the cost of resolution.

The other problem with LCD color displays is the visible RGB pixel bands.
These may be a problem with wide-angle displays, due to the high
magnification.	And, in some cases, they cut down the usable resolution.
If a display's specs say "288 pixels H resolution, RGB stripe" then you
KNOW that there are 96 red pixels, 96 blue... etc: so if you want pure white,
your horizontal resolution is 96 pixels!  (This type of display gives good
apparant resolution for small FOV's, but not for large ones...)

What do I recommend for FOV and pixel size?  Well...  I think that we
should try for AT LEAST 54 degrees horizontally and 40 degrees vertically
(about 2 1/2 by 3 1/2 feet at arm's length).  This is sort of a happy
medium between psychophysical effects and the limits of single-lens
technology.  Pixel size should be LESS THAN 1/3 degree plus a diffuser
(actually, 1/10 degree or less is best, but let's not kid ourselves).
Using 320x200 resolution with the 54x40 degree FOV, we get 0.2x0.16 degree
pixels... hmm, not bad.  BTW, these numbers based on the human contrast
sensitivity function, which peaks at 10 pixels per degree.  This means
that bigger pixels will be tend to be seen as _pixels_ rather than a
continuous image.  A diffuser acts as a spatial lowpass filter, blurring
the pixels together.

Myself, I am _considering_ using some 4" portable B&W TV's because of
their low cast, rlatively large screen size and high resolution.
Also, pixel blurring can be done by adjusting the focus.  The only problem
is the weight-- they would have to be counterweighted, so the inertial load
on the head is pretty big.  Also no color... Have to think about it some more.

DISCLAIMER:
Some of the above is based on work with a 35x25 degree system, some is
knowledge of the technology and experience with an (older) LEEP system
I'm not the most knowledgable person about optics, so maybe someone
with more experience can design a cheap 2-lens system with less distortion
and the full FOV needed.  Myself, I subscribe to the KISS philosopy, but
it would be nice to have a higher lens power so smaller displays can be
used.


--------------------------------------------------------------------------
| My life is Hardware,                    |                              | 
| my destiny is Software,                 |         Dave Stampe          |
| my CPU is Wetware...                    |                              | 
| Anybody got a SDB I can borrow?         | dstamp@watserv1.uwaterloo.ca |
__________________________________________________________________________


From texsun!sunbird!tellab5!sunJe!menelli@Moxie.Hou.TX.US Wed Oct 23 08:42:47 1991
Received: from Menudo.UH.EDU by karazm.math.UH.EDU with SMTP id AA29205
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 19:36:20 -0500
Received: from Moxie.Hou.TX.US by Menudo.UH.EDU with UUCP id AA25965
  (5.65c+/IDA-1.4.4 for karazm.math.uh.edu!glove-list); Wed, 23 Oct 1991 19:32:11 -0500
Received: by moxie.hou.tx.us (Smail3.1.19)
	id <m0kZsZx-0002q5C@moxie.hou.tx.us>; Wed, 23 Oct 91 19:05 CDT
Received: from sunbird.Central.Sun.COM by texsun.Central.Sun.COM (4.1/SMI-4.1)
	id AA11794; Wed, 23 Oct 91 16:57:02 CDT
Received: from tellab5.UUCP by sunbird.Central.Sun.COM (4.1/SMI-4.1-900117)
	id AA05942; Wed, 23 Oct 91 16:57:00 CDT
Received: from sunJe.TELLABS.COM 
	by tellab5.tellabs.com (4.1/smail2.5/10-21-91)
	id AA15072; Wed, 23 Oct 91 13:42:50 CDT
Received: by sunJe.TELLABS.COM (4.0/4.7)
	id AA02654; Wed, 23 Oct 91 13:42:47 CDT
Date: Wed, 23 Oct 91 13:42:47 CDT
From: menelli@sunje.tellabs.com (Ron Menelli)
Message-Id: <9110231842.AA02654@sunJe.TELLABS.COM>
To: glove-list@karazm.math.uh.edu
Subject: RE: PG controller board

>Given the very experimental tendancy of this group I have a sugestion
>for the people designing outboard controller cards.  I would love to
>have one which I could down load the code to.  In my experience, being
>able to down load a new version of the controller code, rather than
>having to burn another prom is a big win.  Especially for those of us
>who would have to burn the proms at work then bring them home to work
>on.

This is another reason that I think that the 68HC811E2 is the way to go. The
2k of onboard EEPROM is more than enough for the current incarnation of the
driver software (about 800 bytes now w/deglitching code), and updates would be
very easy.

>Also, in terms of lower cost, such a system would let someone with
>considerably less equipment start experimenting with a controller
>card.  I haven't looked, but surely we can find a simple monitor for
>one of these controllers which will allow down loading?

I have written software for the Amiga that allows you to do that. A port should
be simple. The HC11 has a bootstrap mode where it loads 256 bytes from the
serial port into RAM and then executes it. My program sends a 256 byte
program that then executes a program on the HC11 when loads a variable length
into the EEPROM. No programming hardware is needed (except a jumper on the
board to select bootstrap mode).

-Ron Menelli
menelli@tellabs.com


From newton@neworder.ils.nwu.edu Wed Oct 23 14:39:33 1991
Received: from casbah.acns.nwu.edu by karazm.math.UH.EDU with SMTP id AA29233
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 19:53:13 -0500
Received: from neworder.ils.nwu.edu by casbah.acns.nwu.edu (4.1/SMI-ACNS-1.03)
	id AA08131; Wed, 23 Oct 91 19:49:05 CDT
Return-Path: <newton@neworder.ils.nwu.edu>
Received: by neworder.ils.nwu.edu (4.0/SMI-4.0)
	id AA01148; Wed, 23 Oct 91 19:39:34 CDT
From: newton@neworder.ils.nwu.edu (Dave Newton)
Message-Id: <9110240039.AA01148@neworder.ils.nwu.edu>
Subject: Re: Transputers...
To: glove-list@karazm.math.uh.edu
Date: Wed, 23 Oct 91 19:39:33 CDT
In-Reply-To: <9110231931.AA19069@watserv1.uwaterloo.ca>; from "Dave Stampe-Psy+Eng" at Oct 23, 91 3:31 pm
X-Mailer: ELM [version 2.3 PL11]

In a previous message, Dave Stampe-Psy+Eng said:
> Actually, VPL is just sending world database updates by Ethernet, which
> is OK.  But we're talking about sending rendered pixels to the video board,
> which, for a 500x500x24 bit picture, needs 6 Mbits/sec times the frame rate!
> Can the video board handle this data rate???  If ypu use 4 transputers, can
> they SEND this rate???  For our purposes, I think the world database
> could reside on one transputer, which does preliminary clipping and
> sends polygon and attribute lists to the other transputers.  IF the
> video board can handle the input speed, this idea will work.  But not
> if you have to design a custom video buffer... Or, how about using
> 4 video boards, genlocking them, and switching between them as their 
> video segments occur???

   Each set of transputers that is doing rendering would have a copy of
the world in it, so theoretically all it would have to do is blob-move
that memory into whatever yo uwere using for output.  If I'm going the
cheap eye-phone route, I'll probably not have 500x500x24 in the near
future.


From LEEK@QUCDN.QueensU.CA Wed Oct 23 17:50:00 1991
Received: from QUCDN.QueensU.CA by karazm.math.UH.EDU with SMTP id AA29497
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 21:23:22 -0500
Message-Id: <199110240223.AA29497@karazm.math.UH.EDU>
Received: from QUCDN.QueensU.CA by QUCDN.QueensU.CA (IBM VM SMTP V2R1)
   with BSMTP id 0519; Wed, 23 Oct 91 22:19:47 EDT
Received: by QUCDN (Mailer R2.08) id 6554; Wed, 23 Oct 91 22:19:46 EDT
Date:    Wed, 23 Oct 1991 21:50 EDT
From: LEEK@QUCDN.QueensU.CA
To: glove-list@karazm.math.uh.edu
Subject: Cheap eye-phones idea

A friend of mine recent bought a used colour video camera from a store.
(It's one of those pre-camcorder thing with external VCR required)
The video cameria comes with a attachable B/W monitor.  It comes with a
len to correct the focal distance for viewing through the eye piece.
These would be quite useful for mounting onto a helmet.  All the electronics
are built and accept a composite video (NTSC) and DC power.  No messing
around required.  There is a switch to flip the image (for viewing from the
other side of the camera.)  This comes in handy as you can get the two monitors
out of the way of each other by flipping one.

He got the whole thing for about $150 Canadian.  The owner of the store
told him that he might be able to find defunction camera for parts at a much
cheaper price...  Look around pawn shop & used video equipment store around,
you might be able to find something useable for a VR homebrew project.

My second idea involve splitting the screen into 2 side for each eye.  This
save you 50% cost & weight at the expense of losing resolution.  Some optic
trickery is required...

                                _______
                               |       |
                               |       | ---->   This half for the right eye
                              -+- - - -+-
   This half for the left<---- |       |
                               |_______|

                               (screen rotated
                                by 90 degrees)

By dividing the screen this way, you can get a wider aspect ratio as a side
effect. :)

Hope this sparks some new ideas...

K. C. Lee
Elec. Eng. Grad. Student

From dstamp@watserv1.uwaterloo.ca Wed Oct 23 19:22:02 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA29626
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 22:26:13 -0500
Received: by watserv1.uwaterloo.ca
	id <AA17551>; Wed, 23 Oct 91 23:22:02 -0400
Date: Wed, 23 Oct 91 23:22:02 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110240322.AA17551@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu, newton@neworder.ils.nwu.edu
Subject: Re: Transputers...

> From glove-list-request@karazm.math.UH.EDU Wed Oct 23 21:13:53 1991
> From: newton@neworder.ils.nwu.edu (Dave Newton)
> Subject: Re: Transputers...
> To: glove-list@karazm.math.uh.edu
> 
> In a previous message, Dave Stampe-Psy+Eng said:
> > Actually, VPL is just sending world database updates by Ethernet, which
> > is OK.  But we're talking about sending rendered pixels to the video board,
> > which, for a 500x500x24 bit picture, needs 6 Mbits/sec times the frame rate!
> > Can the video board handle this data rate???  If ypu use 4 transputers, can
> > they SEND this rate???  For our purposes, I think the world database
> > could reside on one transputer, which does preliminary clipping and
> > sends polygon and attribute lists to the other transputers.  IF the
> > video board can handle the input speed, this idea will work.  But not
> > if you have to design a custom video buffer... Or, how about using
> > 4 video boards, genlocking them, and switching between them as their 
> > video segments occur???
> 
>    Each set of transputers that is doing rendering would have a copy of
> the world in it, so theoretically all it would have to do is blob-move
> that memory into whatever yo uwere using for output.  If I'm going the
> cheap eye-phone route, I'll probably not have 500x500x24 in the near
> future.
> 
> 

Why???  A fair amount of the work involved in the preprocessing of the
world database (especially if you're using an object-oriented tree
or a BSP algorithm would then have to be done on each processor...
needless repetition, with little load involved in the transfer from
the central world-list handler you'd need.  

And the data rate to the central video board is STILL too high...
320x200x8 bit video, 20 frames/sec is 11 Mbit/sec, with no margin
for peak loads, repetitive writes to any pixel, etc.  Unless you
are using a PARALLEL interface...

As you can see, it's borderline.  And for the cost of the Transputers and 
the video buffer, I'd like to get something good for my money.  Not that I believe it's impossible, but I'm working without the transfer specs, and 
prefer to err on the side of caution.  (B-{)

So... can you post the transfer specs on the video card, prices, etc.  I AM
interested, just cautious.  It would be great to be able to put together
a 10Kpoly/sec system with Gourand shading, textures, GOOD color,
stereo video (2 outputs) and 20 frames/sec for under $1500 extra...

- Dave Stampe

From dstamp@watserv1.uwaterloo.ca Wed Oct 23 19:48:06 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA29744
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 22:52:16 -0500
Received: by watserv1.uwaterloo.ca
	id <AA18884>; Wed, 23 Oct 91 23:48:06 -0400
Date: Wed, 23 Oct 91 23:48:06 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110240348.AA18884@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

LEEK@QUCDN.QueensU.CA writes:

>A friend of mine recent bought a used colour video camera from a store.
>(It's one of those pre-camcorder thing with external VCR required)
>The video cameria comes with a attachable B/W monitor.  It comes with a
>len to correct the focal distance for viewing through the eye piece.
>These would be quite useful for mounting onto a helmet.  All the electronics
>are built and accept a composite video (NTSC) and DC power.  No messing
>around required.  There is a switch to flip the image (for viewing from the
>other side of the camera.)  This comes in handy as you can get the two monitors
>out of the way of each other by flipping one.
>
>He got the whole thing for about $150 Canadian.  The owner of the store
>told him that he might be able to find defunction camera for parts at a much
>cheaper price...  Look around pawn shop & used video equipment store around,
>you might be able to find something useable for a VR homebrew project.
>
>My second idea involve splitting the screen into 2 side for each eye.  This
>save you 50% cost & weight at the expense of losing resolution.  Some optic
>trickery is required...
>
>                                _______
>                              |       |
>                              |       | ---->   This half for the right eye
>                             -+- - - -+-
>  This half for the left<---- |       |
>                              |_______|
>
>                               (screen rotated
>                                by 90 degrees)
>
>By dividing the screen this way, you can get a wider aspect ratio as a side
>effect. :)

>K. C. Lee

The problem I see with the camera viewfinder is the tiny FOV (<20 degrees).
This makes it difficult to navigate in a virtual world.  A series of 
experiments performed recently (Restricting the Field of View:
Perceptual performance effects, in Perception and Motor Skills #70)
demonstrated severe degradation of visual-motor coordination and poor
"conceptual mapping" with display "windows" (actually holes cut in
a mask) for any size less than 30 degrees wide.  Subjects performed
a variety of simple tasks, including following a twisted line on the
floor and exploring a room.  Little degradation was seen with "display"
FOV's grater than 100 degrees.

I love the resolution, size and price of the camera viewfinders myself
and wish the FOV was better...  In fact, if I can do something about
the weight, I'm considering using 4" B&W TV's with a simple lens to 
make BIG viewfinders with 54x40 degree FOV's.

The split display idea will also result in a small FOV, mostly because the 
mirrors needed to get the image to the proper eyes will put them too
far optically from the eye-lenses.  Another possiblilty is to use a
640x200 monochrome LCD panel (they used to use them in compatibles) and
use one side for each eye.  Pretty easy to see how that would work, and
you can put it REALLY close to the eyes (= big FOV).  Now to find one...


--------------------------------------------------------------------------
| My life is Hardware,                    |                              | 
| my destiny is Software,                 |         Dave Stampe          |
| my CPU is Wetware...                    |                              | 
| Anybody got a SDB I can borrow?         | dstamp@watserv1.uwaterloo.ca |
__________________________________________________________________________


From broehl@sunee.waterloo.edu Wed Oct 23 20:16:50 1991
Received: from sunee.waterloo.edu by karazm.math.UH.EDU with SMTP id AA29956
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 23 Oct 1991 23:21:01 -0500
Received: by sunee.waterloo.edu
	id <AA19470>; Thu, 24 Oct 91 00:16:53 -0400
From: Bernie Roehl <broehl@sunee.waterloo.edu>
Message-Id: <9110240416.AA19470@sunee.waterloo.edu>
Subject: Re: Standards (fwd)
To: glove-list@karazm.math.uh.edu
Date: Thu, 24 Oct 91 0:16:50 EDT
X-Mailer: ELM [version 2.3 PL11]

> From: jcross@ecel.uwa.oz.au (Jennifer Cross - pgmr)
> > After some careful thought, I've come to the conclusion that the various
> > VR input devices will be too varied to make a single, universal interface
> > practical.
>     Depends at which level of abstration you use.  SGI have a neat tool called
>     "ConMan"  which uses a pipe type metaphor to "connect" processes.  With
>     this, you could "connect" each of the PG output steams to various
>     functions and customise the interface without any programming.
>     (each process specifies it's input and output sockets to ConMan, and
>     it manages the data flow).

Sounds great, but maybe a bit complex for what we're trying to do.
 
> > Since we wll probably have a set of routines for each VR input device we
> > develop, I would propose a naming convention: all the routines related to
> > the glove we love will have names prefixed with "glove_".  Thus our
>                                     ^^^^^^^^ no no no!  Suffixed!
>   This allows like routines to be grouped by function (again abstracting
>   from the specific).  This would also make (next level up) routines like
>         init(GLOVE)  reasonable. 

I'm flexible; what is the preference of the list?   (Bear in mind this
is easy to fix later with #define's)

> > Host sends 'H' to board to put glove in hi-res mode
> > Host sends 'P' to board to poll it for a 6-byte packet
> > [etc]
>   use numeric commands and reserve (top?) bit for "extended command"

Okay, how about 0x48 to put glove in high-res mode, 0x50 to poll the glove...
:-)

> Great Job - managed to provoke me to submit!

Welcome aboard -- the more minds, the better.

-- 
	Bernie Roehl, University of Waterloo Electrical Engineering Dept
	Mail: broehl@sunee.waterloo.edu OR broehl@sunee.UWaterloo.ca
	BangPath: watmath!sunee!broehl
	Voice:  (519) 885-1211 x 2607 [work]

From jcross@ecel.uwa.oz.au Thu Oct 24 00:05:29 1991
Received: from decel.ecel.uwa.oz.au by karazm.math.UH.EDU with SMTP id AA00462
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 24 Oct 1991 00:05:29 -0500
Received: from accfin.ecel.uwa.oz.au by decel.ecel.uwa.oz.au with SMTP (5.61+IDA+MU)
	id AA22045; Thu, 24 Oct 1991 13:03:48 +0800
From: jcross@ecel.uwa.oz.au (Jennifer Cross)
Message-Id: <9110240513.AA04532@accfin.ecel.uwa.oz.au>
Subject: >>> Standards
To: glove-list@karazm.math.uh.edu
Date: Thu, 24 Oct 91 13:13:14 WST
X-Mailer: ELM [version 2.3 PL11]

> From: Bernie Roehl <broehl@sunee.waterloo.edu>
> > From: jcross@ecel.uwa.oz.au (Jennifer Cross - pgmr)
> > > After some careful thought, I've come to the conclusion that the various
> > > VR input devices will be too varied to make a single, universal interface
> > > practical.
> >     Depends at which level of abstration you use.  SGI have a neat tool called
> >     "ConMan"  which uses a pipe type metaphor to "connect" processes.  With
> >     this, you could "connect" each of the PG output steams to various
> >     functions and customise the interface without any programming.
> >     (each process specifies it's input and output sockets to ConMan, and
> >     it manages the data flow).
> 
> Sounds great, but maybe a bit complex for what we're trying to do.
   just an example of a great idea (but might be just a little too hard
   for the 386 trying to run a VR environment.  But really this would work
   great on something like an (fast) Amiga since it has blindingly fast
   interprocess message passing, the "ConMan" (emulator) would only really
   take CPU during process registration (Sorry bout all those PC types
   with serious "interprocess" comms hassles.  Still, dedicate a segment
   as shared memory and a you could get decent xfer rates (even if not
   provided by OS).  And yes, I have an Amiga, and yes I work with
   PC's, Mac's, Suns and SG's all day (less SG for the moment <sadness>))

  [...]
> Okay, how about 0x48 to put glove in high-res mode, 0x50 to poll the glove...
> :-)
   Actually I think (IMHO) that to put the glove into hi-res a command
   init_glove(MODE,HIRES) -- 0x81 0x01 0x48  would be better
			       \    \	 `- High Res 
				\    `- set MODE command
				 `- Init command group
    or if you are certain there will be less than 255 Init settings,
    we could settle for     0x81 0x48  init MODE_HI_RES

    if performance is important on commands, impliment most critical
    as level 1 (1byte) commands.  If not enough of these use split
    secondary commands. (I love thinking up these things! - comes from
    implimenting CAD stuff on ComputerVision and CPM in fortran
    (I can feel my mind going Dave...)!! )

Thanks for the Welcome!
--        ___
         (   >                  /)                        (voice) +61 9 362 6680
          __/_/> ____  ____  o //  _  __            (home)  cjcross@DIALix.oz.au
         / / (__/ / <_/ / <_<_//__</_/ (_ @ Beautiful Perth, Western Australia
        <_/                  />                     (work) jcross@ecel.uwa.oz.au
                            </                            (voice) +61 9 380 3879

From langfod@atlantis.CS.ORST.EDU Wed Oct 23 15:48:14 1991
Received: from CS.ORST.EDU by karazm.math.UH.EDU with SMTP id AA00531
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 24 Oct 1991 00:40:53 -0500
Received: from atlantis.CS.ORST.EDU by CS.ORST.EDU (15.11/1.15)
	id AA27661; Wed, 23 Oct 91 22:36:42 pdt
Received: by atlantis.CS.ORST.EDU (5.61/1.14)
	id AA16701; Wed, 23 Oct 91 22:48:16 -0700
From: Maggot_Muncher <langfod@atlantis.CS.ORST.EDU>
Message-Id: <9110240548.AA16701@atlantis.CS.ORST.EDU>
Subject: * LCD Panels *
To: glove-list@karazm.math.uh.edu
Date: Wed, 23 Oct 91 22:48:14 PDT
X-Mailer: ELM [version 2.3 PL11]

Marlin P. Jones & Assoc. a mail order surplus etc. dealer
has some LCD panels in their latest(? Cat. 91-8) catalog.

640x400 ($55) w/ fluoro backlight        - 3735-OP
640x200 ($29.95) supertwist              - 3748-OP
256x64 ($16)   w/ electrolum. backlight  - 3793-OP

address: P.O. Box 12685      phone: (407) 848-8236
         Lake Park Fl.         fax: (407) 844-8764
	 33403-0685

BTW- I have no relation to them and have never ordered from them. 

-- 
 +----------------------------------------------------------------------------+
 | David Langford - Corvallis, OR      |  `Let the sweet breezes heal me      |
 |                                     |   As they rove around the girth      |
 | langfod@atlantis.cs.orst.edu        |   Of our lovely mother planet,       |
 | langfod@jacobs.cs.orst.edu          |   Of the cool green hills of Earth.' |
 |                                     |   _Green Hills of Earth_ -Heinlein   |
 +----------------------------------------------------------------------------+

From DAVID@asgard.clare.tased.edu.au Thu Oct 24 02:14:36 1991
Received: from diemen.utas.edu.au by karazm.math.UH.EDU with SMTP id AA00731
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.EDU>); Thu, 24 Oct 1991 02:14:36 -0500
Received: from ecc.tased.edu.au by diemen.utas.edu.au with SMTP id AA22348
  (5.65b/IDA-1.4.3 for glove-list@karazm.math.uh.EDU); Thu, 24 Oct 91 18:10:12 +1100
Received: from slick.clare.tased.edu.au by ecc.tased.edu.au (PMDF #12099) id
 <01GC4TBEHQEO94EHQZ@ecc.tased.edu.au>; Thu, 24 Oct 1991 18:09 +1000
Received: from  by slick.clare.tased.edu.au (4.1/SMI-4.1) id AB02734; Thu,
 24 Oct 91 19:15:55 EST
Received: From ASGARD/WORKQUEUE by charon1.clare.tased.edu.au via Charon 3.4
 with IPX id 100.911024181040.864; 24 Oct 91 18:11:12 -0500
Date: 24 Oct 91 18:10:00
From: david <DAVID@asgard.clare.tased.edu.au>
Subject: PC Hires Code - timing !
To: dstamp@watserv1.uwaterloo.CA, glove-list@karazm.math.uh.EDU
Message-Id: <MAILQUEUE-101.911024180958.816@asgard.clare.tased.edu.au>
X-Envelope-To: glove-list@karazm.math.uh.EDU, dstamp@watserv1.uwaterloo.CA
X-Mailer: Pegasus Mail v2.1b.



I'm trying to get the hires powerglove code to go, but I've
hit what looks to be a timing problem.  Could you answer a few questions
for me regarding the HIRES code for PC's

    1. What does the glove "do" when it's in hires mode ?
            does it beep when it enters the mode ?
            what do the lights do ?

    2. Is the timing in the hires setup code critical, and if so, within
        what errors do I have to work ?

    3. Has anybody produced assembler to read the glove in hires, and
        also to switch off all other interrupts, and autocalibrate ?

            There's some problems with the code that was posted - primarily
            to do with setup overhead on the while loops - Not all of
            us have 486's with hi speed long division and subtraction etc...

            I'm using a 16M 286 AND a friend is using a 10M XT !  So we've
            got to have portable code that autocalibrates and runs OK on
            either machine.  We may even end up writing some assembler module
            to do it for us, but we'd rather not do something anyone else
            has done.


Thankyou

___________________________________________________________________________
David Ford                                        Voice :   +61 02 49 6887
Claremont College                                 Fax   :   +61 02 49 1984
Link Rd                             email : david@slick.clare.tased.edu.au
Claremont   TAS 7011
AUSTRALIA            The Internet : "Wherever you go...  There you are..."
                                                           Buckaroo Banzai

From jim@kaos.stanford.edu Wed Oct 23 18:04:46 1991
Received: from fou-local (fou.Stanford.EDU) by karazm.math.UH.EDU with SMTP id AA00825
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 24 Oct 1991 03:08:29 -0500
Received: from localhost.Stanford.EDU by fou-local (4.1/inc-1.0)
	id AA25862; Thu, 24 Oct 91 01:04:48 PDT
Message-Id: <9110240804.AA25862@fou-local>
To: glove-list@karazm.math.uh.edu
In-Reply-To: Your message of "Wed, 23 Oct 91 20:16:58 EDT."
             <9110240016.AA08943@watserv1.uwaterloo.ca> 
Date: Thu, 24 Oct 91 01:04:46 -0700
From: James Helman <jim@kaos.stanford.edu>


Dave Wargo writes:

      I think the real trick is going to be the optics. This is not a
      trival task and I would be interested in hearing what can be
      done short of spending $800.00 for a pair of LEEP optics.

Dave Stamp writes:

   I guess the LEEP optics cost *is* dropping-- last time I talked to
   Eric Howlett (designer of LEEP systems) they were still $3500 each.

LEEP has a rather strong quantity based pricing policy.  Clearly group
purchases are in order:

   1st unit: $3000
   2nd-3rd:  $1500 each
   4th-7th:   $750 each

Jim Helman					Lab:  (415) 723-9127
Stanford University				FAX:  (415) 591-8165
(jim@KAOS.stanford.edu) 			Home: (415) 593-1233

"The power of the computer is locked behind a door with no knob."
							-B. Laurel


From broehl@sunee.waterloo.edu Thu Oct 24 03:52:25 1991
Received: from sunee.waterloo.edu by karazm.math.UH.EDU with SMTP id AA01208
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 24 Oct 1991 06:56:36 -0500
Received: by sunee.waterloo.edu
	id <AA25428>; Thu, 24 Oct 91 07:52:27 -0400
From: Bernie Roehl <broehl@sunee.waterloo.edu>
Message-Id: <9110241152.AA25428@sunee.waterloo.edu>
Subject: PC Hires Code - timing ! (fwd)
To: glove-list@karazm.math.uh.edu
Date: Thu, 24 Oct 91 7:52:25 EDT
X-Mailer: ELM [version 2.3 PL11]

>     2. Is the timing in the hires setup code critical, and if so, within
>         what errors do I have to work ?

Not sure about this, but the timing diagrams recently posted to the list
may have the answer (they're in Postscript and I have yet to print them
out).

> 
>     3. Has anybody produced assembler to read the glove in hires, and
>         also to switch off all other interrupts, and autocalibrate ?

No, but once I get the interrupt mode fully functional I may turn it into
a TSR.
 
>             There's some problems with the code that was posted - primarily
>             to do with setup overhead on the while loops - Not all of
>             us have 486's with hi speed long division and subtraction etc...

My fault -- will be fixed soon, maybe today.  I switched over to using
microseconds as my delay unit throughout, and was doing the conversion
(a multiply AND a divide!) for each bit.
 
>             I'm using a 16M 286 AND a friend is using a 10M XT !

Yikes!  Get a new machine!  (seriously!)

>             So we've
>             got to have portable code that autocalibrates and runs OK on
>             either machine.  We may even end up writing some assembler module
>             to do it for us, but we'd rather not do something anyone else
>             has done.

Wait a day or so till my fixes are in and try that... if it doesn't work,
you may be forced into coding in assembler or buying a faster machine.

-- 
	Bernie Roehl, University of Waterloo Electrical Engineering Dept
	Mail: broehl@sunee.waterloo.edu OR broehl@sunee.UWaterloo.ca
	BangPath: watmath!sunee!broehl
	Voice:  (519) 885-1211 x 2607 [work]

From broehl@sunee.waterloo.edu Thu Oct 24 04:37:46 1991
Received: from sunee.waterloo.edu by karazm.math.UH.EDU with SMTP id AA01420
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 24 Oct 1991 07:42:01 -0500
Received: by sunee.waterloo.edu
	id <AA25908>; Thu, 24 Oct 91 08:37:49 -0400
From: Bernie Roehl <broehl@sunee.waterloo.edu>
Message-Id: <9110241237.AA25908@sunee.waterloo.edu>
Subject: Some thoughts on shutter-glasses
To: glove-list@karazm.math.uh.edu
Date: Thu, 24 Oct 91 8:37:46 EDT
X-Mailer: ELM [version 2.3 PL11]

When interfacing to shutter-glasses, we ideally want to be able to switch
eyes every 1/60th of a second.

That means we want to do it on every vertical retrace; it would be really
nice if the VGA card were to generate an interrupt on vertical retrace,
but it doesn't.  That leaves only two approaches:

	- polling
	- using the timer interrupt

The problem with polling is that you have to pepper your high-level code
with calls to a routine that checks for vertical retrace and switches the
screens and the LCD glasses.  That's not too bad, though, since the routine
is very simple and very fast.  If you miss one swap, it's not the end of
the world.

The interrupt approach is good, but assumes that you can program the timer
to run at *exactly* the framing rate; even a small inaccuracy will cause you
to "drift" and miss the retrace.

Alternatively, you could reprogram the timer on each vertical retrace, and
thereby eliminate the inaccuracy.

Bear in mind that if you're supporting both the glasses and the glove, you
now have a few things to do on timer interrupts; this may be the way to
go, but requires some more thought.  (At least, *I* require some more thought).

(A first pass:)

The glove gets polled every 4 ms, the display gets swapped every 16 ms; so...

timer interrupt routine runs every 4 ms, and does the following:
	- increment a counter
	- if the counter reaches 4:
		- wait for a vertical retrace
		- reprogram the timer
		- swap the display
		- zero the counter
	- in any case, do the glove stuff

Now, waiting for a vertical retrace is a bad idea if we just missed one;
we'll miss glove events, for one thing.  However, this shouldn't happen
after the first time through.

Reprogramming the timer may be more serious; will we wind up with major
inaccuracies?  Will the system time-of-day clock drift?

Any feedback would be appreciated...

-- 
	Bernie Roehl, University of Waterloo Electrical Engineering Dept
	Mail: broehl@sunee.waterloo.edu OR broehl@sunee.UWaterloo.ca
	BangPath: watmath!sunee!broehl
	Voice:  (519) 885-1211 x 2607 [work]

From yonder@netcom.netcom.com Thu Oct 24 01:29:15 1991
Received: from netcomsv.netcom.com by karazm.math.UH.EDU with SMTP id AA01789
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 24 Oct 1991 10:34:20 -0500
Received: from netcom.netcom.com by netcomsv.netcom.com (4.1/SMI-4.1)
	id AA08319; Thu, 24 Oct 91 08:29:16 PDT
Received: by netcom.netcom.com (4.1/SMI-4.1)
	id AA05982; Thu, 24 Oct 91 08:29:16 PDT
From: yonder@netcom.com (Christopher Russell)
Message-Id: <9110241529.AA05982@netcom.netcom.com>
Subject: low-end eyephones idea..
To: glove-list@karazm.math.uh.edu (Power Glove mailing list)
Date: Thu, 24 Oct 91 8:29:15 PDT
X-Mailer: ELM [version 2.3 PL11]

I just kinda had a crazy idea and I was wondering what you more
experienced types think of it.  (Maybe this is already being done, I
don't know).  Maybe one small screen could be used with shutter
glasses in between the screen/optics and your eyes.  I've heard the
Sega glasses aren't too good, but assuming that good shutter glasses
were used, it seems to me one could get away with one screen and save
weight and money.  Though I'm not sure how you could place the screen
(private eye? lcd? ) without having to use mirrors to get it to both
eyes. hey, just brainstorming...  This might induce some SERIOUS
eyestrain.. Whatcha think...

-- 
Christopher L. Russell (yonderboy)  Phone: (408)378-9078 Campbell,CA
yonder@netcom.COM or clr40@amail.amdahl.com or chrisr@leland.stanford.edu


From dstamp@watserv1.uwaterloo.ca Thu Oct 24 08:31:11 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA02012
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 24 Oct 1991 11:35:22 -0500
Received: by watserv1.uwaterloo.ca
	id <AA29095>; Thu, 24 Oct 91 12:31:11 -0400
Date: Thu, 24 Oct 91 12:31:11 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110241631.AA29095@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

yonder@netcom.com (Christopher Russell) posts:

>I just kinda had a crazy idea and I was wondering what you more
>experienced types think of it.  (Maybe this is already being done, I
>don't know).  Maybe one small screen could be used with shutter
>glasses in between the screen/optics and your eyes.  I've heard the
>Sega glasses aren't too good, but assuming that good shutter glasses
>were used, it seems to me one could get away with one screen and save
>weight and money.  Though I'm not sure how you could place the screen
>(private eye? lcd? ) without having to use mirrors to get it to both
>eyes. hey, just brainstorming...  This might induce some SERIOUS
>eyestrain.. Whatcha think...

You're right-- the problem IS how to get the display image to both eyes.
Unless you use fiber optics (HAH!) you need mirrors to get both eyes
in the act.  The optical path is so long that you get a FOV of less
than 20 degrees.  If the images are'nt placed properly, you probably
won't be able to fuse the two inages, and the displays will LOOK close
(not good for the VR illusion.  You might try strong prisms to "bend" the
display into place, but this causes BIG distortions with the prism
power you'd need.  Also, each eye will see an image of the display tilted
in opposite directions.

That means that for non-stereo eyephones, you have the choice of:
1) using 2 displays, and feeding them both with the same signal
2) using one display, and covering/closing the other eye

BTW, is anyone SERIOUSLY planning to drive their eyephones with
stereo pictures, or is eyeryone going to start with a single image
(flat).  I'd like to suggest emulating the Sega glasses as a start for
eyephone stereo.

Switching the LCD backlights on and off won't work, as the image on the 
panels changes too slowly and the backights switch too slowly 
(I've measured their rise and fall times).  A better way is to switch
the video (but NOT the sync signals) to each display on and off.
This will have lower the contrast somewhat, of course.  If you're using
CRTs or camera viewfinders are used, blanking signals could be sent right
to the CRT driver electronics.


--------------------------------------------------------------------------
| My life is Hardware,                    |                              | 
| my destiny is Software,                 |         Dave Stampe          |
| my CPU is Wetware...                    |                              | 
| Anybody got a SDB I can borrow?         | dstamp@watserv1.uwaterloo.ca |
__________________________________________________________________________



From snowdond@computer-science.manchester.ac.uk Thu Oct 24 13:18:32 1991
Received: from sun2.nsfnet-relay.ac.uk by karazm.math.UH.EDU with SMTP id AA02470
  (5.65c/IDA-1.4.4 for <glove-list@KARAZM.MATH.UH.edu>); Thu, 24 Oct 1991 13:18:32 -0500
Received: from computer-science.manchester.ac.uk by sun2.nsfnet-relay.ac.uk 
          via JANET with NIFTP id <13545-6@sun2.nsfnet-relay.ac.uk>;
          Thu, 24 Oct 1991 13:40:39 +0100
Date: Thu, 24 Oct 91 13:00:59 BST
From: Dave Snowdon <snowdond@computer-science.manchester.ac.uk>
Message-Id: <9110241200.AA23286@r2i.cs.man.ac.uk>
To: glove-list@KARAZM.MATH.UH.edu
Subject: Transputers


  Here at Manchester we have a small vr group and were experimenting with
some existing transputer hardware built here at Manchester. 
  One thing to be wary of is that the quoted link speed (for a T800) is not
actually acheivable.

  For every 8 bits of data the link engine actually sends 11 bits. Also there
is a 2 bit acknowledgement, so if you're trying to get bi-directional
communication the link engine is effectively sending 13 bits for every useful
8 bits of data. This gives a max transmission rate of something less than 
one megabyte/sec. Because of overheads of setting up a communication you
also need to send messages of several bytes to approach even this.

  Some other hardware we're experimenting with is a frame-buffer which exists
as shared memory between 4 transputers. We can then use 16 links to
send data to the frame buffer.

			Dave

            Dave Snowdon (snowdond@cs.man.ac.uk)            
       The Devil may care... But I don't mind (T.S.o.M.)

From agodwin@acorn.co.uk Thu Oct 24 19:22:35 1991
Received: from eros.uknet.ac.uk by karazm.math.UH.EDU with SMTP id AA02490
  (5.65c/IDA-1.4.4 for <glove-list@KARAZM.MATH.UH.edu>); Thu, 24 Oct 1991 13:23:25 -0500
Received: from acorn.co.uk by eros.uknet.ac.uk with UUCP 
          id <5768-0@eros.uknet.ac.uk>; Thu, 24 Oct 1991 18:41:20 +0100
Received: from snark.acorn.co.uk by acorn.co.uk (4.1/Am31) id AA07820;
          Thu, 24 Oct 91 18:22:39 BST
From: agodwin@acorn.co.uk (Adrian Godwin)
Date: Thu, 24 Oct 91 18:22:35 +0100
Message-Id: <9110241722.AA00285@snark.acorn.co.uk>
To: broehl@SUNEE.WATERLOO.edu, glove-list@KARAZM.MATH.UH.edu
Subject: Re: Some thoughts on shutter-glasses


> That means we want to do it on every vertical retrace; it would be really
> nice if the VGA card were to generate an interrupt on vertical retrace,
> but it doesn't.  That leaves only two approaches:
>  
>         - polling
>         - using the timer interrupt
>  
> The problem with polling is that you have to pepper your high-level code
> with calls to a routine that checks for vertical retrace and switches the
> screens and the LCD glasses.  That's not too bad, though, since the routine
> is very simple and very fast.  If you miss one swap, it's not the end of
> the world.

This is ridiculous : you're solving the wrong problem, and it's costing you
a fortune in CPU resource to do it. If you need to do something on a vertical
retrace, (and if you can't get out of it by using interlace, say) then 
GENERATE THE INTERRUPT ! You need some hardware to drive the LCD shutter :
drive that hardware from the VSYNC signal and also feed it into an interrupt
input. There are lots of ways you can generate the interrupt - straight onto
the bus, a serial port status line change, the parallel port ACK input, a 
countertimer input .. just choose one !

-adrian


From jet Thu Oct 24 08:33:43 1991
Received: by karazm.math.UH.EDU id AA02542
  (5.65c/IDA-1.4.4 for glove-list@karazm.math.uh.edu); Thu, 24 Oct 1991 13:33:44 -0500
From: J Eric Townsend <jet>
Message-Id: <199110241833.AA02542@karazm.math.UH.EDU>
Subject: Re: Moving List to Newsgroup
To: aaronp@narrator.pen.tek.com
Date: Thu, 24 Oct 91 13:33:43 CDT
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: <9110232232.AA07268@narrator.PEN.TEK.COM>; from "aaronp@narrator.pen.tek.com" at Oct 23, 91 3:32 pm
X-Mailer: ELM [version 2.3 PL11]

you wrote:
>	2.	If a new newsgroup is created, what should it be called?
>	comp.periphs.glove or comp.periphs.virtual:
>		Scope is not as broad as the discussions which take place
>		here. As stated in the preface to this summary, the
>		discussions here have simply gone beyond peripherals.

Um, that's a problem I have with the list.  It was set up to discuss
hacking the glove, not to discuss what polygon rendering techniques work
best on which platform.


-- 
J. Eric Townsend - jet@uh.edu - Systems Wrangler, UH Dept of Mathematics
vox: (713) 749-2126  '91 CB750, DoD# 0378, TMRA# 27834
PowerGlove mailing list: glove-list-request@karazm.math.uh.edu
"allow users to create more impactful documents" -- from an Apple press release

From jet Thu Oct 24 08:40:33 1991
Received: by karazm.math.UH.EDU id AA02648
  (5.65c/IDA-1.4.4 for glove-list); Thu, 24 Oct 1991 13:40:34 -0500
From: J Eric Townsend <jet>
Message-Id: <199110241840.AA02648@karazm.math.UH.EDU>
Subject: Reminder of content of the list
To: glove-list
Date: Thu, 24 Oct 91 13:40:33 CDT
X-Mailer: ELM [version 2.3 PL11]


This list is for power glove stuff.  Not monitors, not scan-line techniques,
not anything else.  I'm beginning to get "unsubscribe me but keep me
updated on new source" requests from people who don't give a monkey's
about scan-line techniques for VGA.

I think they're right.

Please keep the stuff related to power gloves (or even data gloves in
general).

If you wanna talk about viewing systems, then maybe it's time for
a monitor-talk-list or somesuch.

Thanks for your cooperation,
 eric

-- 
J. Eric Townsend - jet@uh.edu - Systems Wrangler, UH Dept of Mathematics
vox: (713) 749-2126  '91 CB750, DoD# 0378, TMRA# 27834
PowerGlove mailing list: glove-list-request@karazm.math.uh.edu
"allow users to create more impactful documents" -- from an Apple press release

From kskelm@uccs.edu Thu Oct 24 07:50:44 1991
Received: from happy (happy.uccs.edu) by karazm.math.UH.EDU with SMTP id AA02702
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 24 Oct 1991 13:42:14 -0500
Received: by uccs.edu (MX V2.3-1) id 21323; Thu, 24 Oct 1991 11:50:44 EDT
Date: Thu, 24 Oct 1991 11:50:44 EDT
From: "NO, That's NOT a cord of wood in my pocket!" <kskelm@uccs.edu>
To: glove-list@karazm.math.uh.edu
Message-Id: <00950980.60961480.21323@uccs.edu>
Subject: eyephones

 
	This is just a stupid thought, but has anyone considered using the
REALLY tiny b/w screens found in the eyepieces of video cameras?  A benefit
here is that each can be independently focused.
 
	(and I assume they're available in abundance if you know where to look)
 
		Just a thought...

			Kevin

From motcsd!roi!lance@apple.com Mon Oct 24 04:17:39 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA02827
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 24 Oct 1991 13:50:59 -0500
Received: by apple.com (5.61/18-Oct-1991-eef)
	id AA14274; Thu, 24 Oct 91 11:26:27 -0700
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0ka9hV-0001FDC@motcsd.csd.mot.com>; Thu, 24 Oct 91 11:22 PDT
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA02346; 24 Oct 91 11:17:40 PDT (Thu)
To: broehl@sunee.waterloo.edu
Subject: VGA vertical retrace
Cc: glove-list@karazm.math.uh.edu
Message-Id: <9110241117.AA02342@roi.ca41.csd.mot.com>
Date: 24 Oct 91 11:17:39 PDT (Thu)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>


The answer is to get one of the many VGA cards which do support
vertical retrace interrupts.

Alan Killian discussed his work with LCD goggles awhile back
on sci.virtual-worlds, and we realized that the LCD timing
is such that it may be preferable to switch the goggles
ahead of the vertical retrace rather than on it.  Also,
we might want to separately control the two cells rather
than just have a left-right control line.

This would need an outboard box which read the horizontal
and vertical sync, counted up retraces, and switched the
LCD cells just before rather than "on the beat".

This sounds like another job for the outboard glove control board.
It could do the serial port AA and control line trick to control
the LCD cells.

Lance Norskog

From dstamp@watserv1.uwaterloo.ca Thu Oct 24 11:28:40 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA03303
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 24 Oct 1991 14:32:57 -0500
Received: by watserv1.uwaterloo.ca
	id <AA10942>; Thu, 24 Oct 91 15:28:40 -0400
Date: Thu, 24 Oct 91 15:28:40 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110241928.AA10942@watserv1.uwaterloo.ca>
To: broehl@sunee.uwaterloo.ca, lance@roi.ca41.csd.mot.com
Subject: Re:  VGA vertical retrace
Cc: glove-list@karazm.math.uh.edu

> From glove-list-request@karazm.math.UH.EDU Thu Oct 24 14:57:02 1991
> To: broehl@sunee
> Subject: VGA vertical retrace
> Cc: glove-list@karazm.math.uh.edu
> From: Lance Norskog <lance@roi.ca41.csd.mot.com>
> 
> 
> The answer is to get one of the many VGA cards which do support
> vertical retrace interrupts.
> 
> Alan Killian discussed his work with LCD goggles awhile back
> on sci.virtual-worlds, and we realized that the LCD timing
> is such that it may be preferable to switch the goggles
> ahead of the vertical retrace rather than on it.  Also,
> we might want to separately control the two cells rather
> than just have a left-right control line.
> 
> This would need an outboard box which read the horizontal
> and vertical sync, counted up retraces, and switched the
> LCD cells just before rather than "on the beat".
> 
> This sounds like another job for the outboard glove control board.
> It could do the serial port AA and control line trick to control
> the LCD cells.
> 
> Lance Norskog
> 

I've had no problems using Sega glasses with monitor VSYNC...  if
they're driven properly.  Some of the older models might have had
slower pi-cells.. I dunno.

- Dave Stampe

From dstamp@watserv1.uwaterloo.ca Thu Oct 24 11:42:36 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA03370
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.UH.EDU>); Thu, 24 Oct 1991 14:48:41 -0500
Received: by watserv1.uwaterloo.ca
	id <AA12247>; Thu, 24 Oct 91 15:42:36 -0400
Date: Thu, 24 Oct 91 15:42:36 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110241942.AA12247@watserv1.uwaterloo.ca>
To: JET@UH.EDU, glove-list@karazm.math.UH.EDU
Subject: Re:  Reminder of content of the list

> From JET@UH.EDU Thu Oct 24 14:53:20 1991
> From: J Eric Townsend <JET@UH.EDU>
> Subject: Reminder of content of the list
> To: glove-list@karazm.math.UH.EDU
> 
> 
> This list is for power glove stuff.  Not monitors, not scan-line techniques,
> not anything else.  I'm beginning to get "unsubscribe me but keep me
> updated on new source" requests from people who don't give a monkey's
> about scan-line techniques for VGA.
> 
> I think they're right.
> 
> Please keep the stuff related to power gloves (or even data gloves in
> general).
> 
> If you wanna talk about viewing systems, then maybe it's time for
> a monitor-talk-list or somesuch.
> 
> Thanks for your cooperation,
>  eric
> 
> -- 
> J. Eric Townsend - jet@uh.edu - Systems Wrangler, UH Dept of Mathematics
> vox: (713) 749-2126  '91 CB750, DoD# 0378, TMRA# 27834
> PowerGlove mailing list: glove-list-request@karazm.math.uh.edu
> "allow users to create more impactful documents" -- from an Apple press release
> 
I think SOMETHING should be done...  We've got a lot of momentum here, and
sci.virtual-worlds seems to be DOWN since Monday.  Could a temporary list
be set up until the new newsgroup is up?  If you don't want to, maybe someone
else can...  Any volenteers?

- Dave Stampe

From mwtilden@watmath.waterloo.edu Thu Oct 24 14:01:10 1991
Received: from watmath.waterloo.edu by karazm.math.UH.EDU with SMTP id AA04081
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 24 Oct 1991 17:05:22 -0500
Received: by watmath.waterloo.edu
	id <AA11152>; Thu, 24 Oct 91 18:01:10 -0400
Date: Thu, 24 Oct 91 18:01:10 -0400
From: "Mark W. Tilden" <mwtilden@watmath.waterloo.edu>
Message-Id: <9110242201.AA11152@watmath.waterloo.edu>
To: glove-list@karazm.math.uh.edu

Re: lenses.  For the system we're putting together, we find that slimline
freznel lense sheets (high density) work well.  Credit card sized units are
available through most science shops.

Re: Displays.  Sony last year discontinued the FDM-330 line of modular
tvs and replaced them with a substandard FDL-370.  The former were
expensive, but ideal because of their modularity.  We will be using 
370s, but they're going to require pruning.  Severe pruning.

The lenses seem to be about 10cm uniformly.  I only have two types right now
so I don't really have a database of types available.  The advantages
are that they are flexible, cascadeable, extremely lightweight, cheap.
We're going to be using two together for each eye to get a 4cm focal length.

Will post.  Is all.

Mark Tilden

From kilian@poplar.cray.com Thu Oct 24 13:05:00 1991
Received: from timbuk.cray.com by karazm.math.UH.EDU with SMTP id AA04229
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 24 Oct 1991 18:09:21 -0500
Received: from poplar14.cray.com by timbuk.cray.com (4.1/CRI-MX 1.6j)
	id AA28005; Thu, 24 Oct 91 18:05:04 CDT
Received: by poplar14.cray.com
	id AA20630; 4.1/CRI-5.6; Thu, 24 Oct 91 18:05:00 CDT
Date: Thu, 24 Oct 91 18:05:00 CDT
From: kilian@poplar.cray.com (Alan Kilian)
Message-Id: <9110242305.AA20630@poplar14.cray.com>
To: glove-list@karazm.math.uh.edu
Subject: LCD shutter switching timings

Folks,
  Here is my post to sci.virtual-worlds discussing the timing of LCD shutter
switching based on a vertical sync signal. If you want to get numbers for a
VGA display you need to have the video rate information ready. I do not have
that information but if someone gan give it to me I can do the computations
simply enough.
  My LCD glasses don't use a vertical sync signal but they have a photodetector
glued to the CRT to detect a right/left image signal. My framebuffer cannot
gurantee a different image every other frame so I came up with this synchronizing
scheme. Oh it's Patent-pending right now so I wouldn't build it into any real
systems you want to market until you can license it. Maybe sometime 1992.
  Here's the post:

--------------------------------------------------------------------------------
From: kilian@poplar.cray.com (Alan Kilian)
Subject: New LCD shutter timings
Date: Tue, 4 Jun 91 15:00:08 CDT


> lance@motcsd.csd.mot.com (lance.norskog) Asks:
> 
> 1) You reported that your Sega Goggles "don't go very dark".
>     Do you have an extinction ratio rating for them?

No, But I will measure them tonight and get a reading to you tomorrow.

> 2)
> The naive scheme is to switch between states based on the vertical
> retrace.

Another thing is that a vertical retrace does not give you a
left/right image identifier and it is up to the user to choose the
proper "Phase" for the glasses.

Also it is necessary to have a display system capable of insuring
alternation of left/right images every other frame time.
Most channel attached framebuffers can not do this. (A channel is a
wire connecting the supercomputer to an external device like a disk
drive or framebuffer).

I have developed a system using an optical detector and an area in each
frame dedicated to the left/right image identifier. This system allows
a device to remain in synchrony with images even if they are not alternating
every frame. It can be used for projection movies, regular computer CRTs
and video tape displays on conventional televisions. It is Patent Pending
though so no commercial applications can use it without paying something.

> It seems that you may want to decouple the square wave
> to each lens from being alternate portions of one square wave, and
> overlap them a bit, initiating the clear phase just before the 
> vertical retrace.

Hmmm let me think about that. Let's get some numbers in here. (Shuffle shuffle)
O.K. 120 frames per second. 1.3ms from full phosphor output to zero output.
2ms to switch the LCD from one state to another. (On ->Off or Off -> On)
How about 7ms for each frame to be drawn every 8ms.

Now if you switch at the vertical retrace time it will be about .5ms after the
last raster line was drawn and it will be 1ms from full extinction.
By the time the glasses get to their other states (1.3ms) The first 14% of
the raster lines are drawn and will be seen partly by the wrong eye.
Also since the switching time is greater than the phosphor extinction time
we don't have to worry about the lower part of the screen.
So you are right, we want to start switching earlier.
How much earlier? Well if ST is the SwitchingTime and ET is the ExtinctionTime
and IRG is the Inter Raster Gap ST=2ms, ET=1.3ms, IRG=1ms
We know we don't want to start switching any earlier then ST before the last
raster line gets drawn or we won't be able to see it. So how about .5*ST 
before the last raster line? I think that that would be O.K.
We also don't want to start switching any later than (LR+IRG)-ST otherwise the
first raster line will be seen in the wrong line.
So how does this new system fair?
We now start to switch and get fully switched before the first raster line,
but AFTER the last raster line has "gone out". Pretty good huh?
I am going to move my sensor to the bottom of the screen and recompute the
timing variables for this new system soon. Thanks.

> Perhaps the off phase should be initiated right around the
> bottom of the screen, so as to cut off dying phosphors because
> the colors decay at different rates.

That's exactly what I come up with going through the numbers. Good intuition.

> 3)
> The right solution for large screens (> 500 lines) would seem to be
> bifocal shutters.  The top half matches the top half of the screen,
> and the bottom shows the bottom of the screen.  This gives tighter
> control in matching the scan rate of the screen.

I don't really understand this system. Do these shutters go on my face or
on the CRTs face? If they go on my face then I don't see how I can control
where the shutters boundary lines up with the raster lines. I COULD rotate
my head 90 degrees and look at the screen sideways if I wanted to.
So I have to assume that they are in front of the CRTs face.
Now why would two independently controlled shutters help? I don't know but
I'll think about it. Hmmmmmmmmm.
O.K. I've got it. After the first half of the screen is drawn and goes extinct
you can switch the top half of the shutter to opaque and not worry about it.
Whoops I just realised that these things don't go opaque, they switch left/right
So I should say: When drawing a left eye image after the first half of the
screen is drawn and goes extinct, the upper half of the shutter can be switched
to the right eye mode in preparation of the first raster line. Then just before
the end of the left eye image you can begin to switch the lower half of the
shutter to the right eye mode as we computer above. Pretty cool. I think that
this would work just fine.

> 4)
> A hacker at Vision Research Group (another LCD shutter vendor)
> told me that the control waveforms should come out of a ROM
> instead of an analog circuit; this gives better performance somehow.

I don't buy it. Computer people are terribly intimidated by analog electronics
and seem to go to digital ROM things far too often. An analog circuit can have
variable resistors in them to tune for a particular application and be much
more versatile. A ROM based waveform thing needs a new ROM. Boo. I really
don't like burning ROMs.

> The next generation of LCD shutter gear should be designed based on
> these conclusions: Separate the duty cycle for the two lenses.
> Adjust the duty cycles of the lenses for the switching times
> of the lens and the phosphor decay times of the colors of the monitor.
> For big-screen work, try bifocals.

Good conclusions. I'll do just that. Thanks,
             -Alan "ROMs, we don't need no steenkeen ROMs!" Kilian

 -Alan Kilian kilian@cray.com                  612.683.5499
  Cray Research, Inc.           | "The Fragile X Syndrome may me the most
  655 F Lone Oak Drive          | frequent cause of inherited mental
  Eagan  MN,     55121          | retardation". Science 24-May-1991 PP1097



From texsun!sunbird!tellab5!sunJe!menelli@Moxie.Hou.TX.US Thu Oct 24 11:41:38 1991
Received: from Menudo.UH.EDU by karazm.math.UH.EDU with SMTP id AA04432
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 24 Oct 1991 19:23:36 -0500
Received: from Moxie.Hou.TX.US by Menudo.UH.EDU with UUCP id AA02410
  (5.65c+/IDA-1.4.4 for karazm.math.uh.edu!glove-list); Thu, 24 Oct 1991 19:19:26 -0500
Received: by moxie.hou.tx.us (Smail3.1.19)
	id <m0kaFEr-0002xrC@moxie.hou.tx.us>; Thu, 24 Oct 91 19:17 CDT
Received: from sunbird.Central.Sun.COM by texsun.Central.Sun.COM (4.1/SMI-4.1)
	id AA13053; Thu, 24 Oct 91 18:11:38 CDT
Received: from tellab5.UUCP by sunbird.Central.Sun.COM (4.1/SMI-4.1-900117)
	id AA13100; Thu, 24 Oct 91 18:11:35 CDT
Received: from sunJe.TELLABS.COM 
	by tellab5.tellabs.com (4.1/smail2.5/10-21-91)
	id AA04478; Thu, 24 Oct 91 16:41:41 CDT
Received: by sunJe.TELLABS.COM (4.0/4.7)
	id AA03488; Thu, 24 Oct 91 16:41:38 CDT
Date: Thu, 24 Oct 91 16:41:38 CDT
From: menelli@sunje.tellabs.com (Ron Menelli)
Message-Id: <9110242141.AA03488@sunJe.TELLABS.COM>
To: glove-list@karazm.math.uh.edu
Subject: 68HC11 power glove code (long)

Here's the 68HC11 power glove code. Notice that it does not include
deglitching. This is mainly because I think there is a problem in the
glove read routine, and I wanted it to be more obvious (for now). I 
haven't tried any of the other versions of the software, so I don't know
the proper behavior, but my code seems to receive a large amount of noise,
and it gets worse when you make a fist with the glove. My guess is that
there is some timing that is slightly off, and the reduced sample rate
when a fist is made makes it worse. I haven't had time to play with it,
and many people have been asking for the code, so I'll send it as is...

Please send me any comments/suggestions/corrections/flames or whatever!

-Ron Menelli
menellli@tellabs.com

------------------------cut here----------------------------------------


;/**********************************************************************
; 
;  Originally "power.c" (c) manfredo 9/91 (manfredo@opal.cs.tu-berlin.de)
;  Developed on an ATARI 1040ST with TC 1.1 using a logic analyzer to get
;  the correct timings.
; 
;**********************************************************************/
;/*********************************************************************
;             ported to PC compatibles by
;                Greg Alt 10/91
; 
;               galt@peruvian.utah.edu
;            or galt@es.dsd.com
; 
;**********************************************************************/
;/*********************************************************************
;
; Substantially rewritten by Dave Stampe (c) 1991: PWRFILT.C
;  No cash, no warranty, no flames.
;  This stuff works great, so gimme credit.
;
; Goals <achieved> were:
;
;  Higher speed, smaller code.
;  Polled operation is now possible.
;  Graphics test (VGA)
;  Noise reduction added, gets rid of 99.5% of noise with NO DELAY!
;
;  This runs on a 486/25 with an i/o card. 
;  Someone should adapt it for the usual printer port adapter.
;  It was compiled with Turbo C++ 2.0 but will probably
;  work on any Turbo C directly. MSC will need library calls checked.
;
;
; dstamp@watserv1.uwaterloo.ca          17/10/91
;**********************************************************************/
;
;
; 68HC11 version by Ron Menelli, 10/23/91
;
; A million thanks to the above people for taking this project as far
; as it has gone! This version runs on the MC68HC11 processor, specifically
; Motorola's MC68HC11EVB board. The assembler I used was Matt Dillon's
; DASM for the Amiga - this code will have to be converted a bit to be
; used on Motorola's freeware assembler.
;
; As it stands, this code is a direct port of Dave Stampe's code minus
; the IBM specific stuff (VGA, for example). The way this code works is
; by sending the data received from the Power Glove over the serial port
; at 9600 baud. By sending single character commands, the serial port
; action can be controlled as follows:
;
;       Send    Action
;       ====    =========
;        C      Start continuous mode - send every time the glove is read.
;               The data is sent with a certain byte preceding it as a
;               flag marking the beginning. The format I have used is:
;
;                   A0 X Y Z rot fingers keys
;
;                   ^
;                   +--- Flag character (A0 used for old time's sake!)
;
;        R      Start request mode - send the 6 byte data packet when
;               requested by user. Format is the same as above, minus
;               the flag character.
;
;        ?      In request mode, this causes the controller to report
;               the current glove data.
;
; *** Note that the deglitching code is not in this version
;
; Please send me any suggestions you have regarding improvements to this
; code!
;
; -Ron Menelli  menelli@tellabs.com
;

    PROCESSOR   68HC11          ; Needed for DAsm

    ORG         $D000           ; Jump to this address to start
                                ; This is the beginning of RAM for the EVB.
;
; Macro definitions
;

; Delay 3us (made a macro because a subroutine would be too slow)

    MAC DELAY3US

        NOP
        NOP
        NOP

    ENDM

; Set Clock = 0, Latch = 0

    MAC C0L0

        LDAB    #0
        STAB    PORTA

    ENDM

; Set Clock = 0, Latch = 1

    MAC C0L1

        LDAB    #GLATCH
        STAB    PORTA

    ENDM

; Set Clock = 1, Latch = 0

    MAC C1L0

        LDAB    #GCLOCK
        STAB    PORTA

    ENDM

; Set Clock = 1, Latch = 1

    MAC C1L1

        LDAB    #GCLOLAT
        STAB    PORTA

    ENDM

;
; RAM allocation
;

BITCNT      EQU     $0000
BYTECNT     EQU     $0001
GLOVEFLAG   EQU     $0002       ; Flag byte for continuous mode
GLOVEDATA   EQU     $0003       ; 7 byte array
UNREADY     EQU     $0009
MODEFLAG    EQU     $000A       ; Mode flag - continuous or request

;
; Port A definitions
;
; bit 0 - Data in
; bit 4 - Clock out
; bit 5 - Latch out
;

PORTA       EQU     $1000
PACTL       EQU     $1026
GDATA       EQU     $01
GCLOCK      EQU     $10
GLATCH      EQU     $20
GCLOLAT     EQU     $30

;
; Serial port definitions
;

BAUD        EQU     $102B
SCCR1       EQU     $102C
SCCR2       EQU     $102D
SCSR        EQU     $102E
SCDR        EQU     $102F

;
; Timing constants (for an 8Mhz crystal)
;

D2BYTES     EQU     30          ; 96us
D2SLOW      EQU     700         ; ~= 2100us

; Other stuff

CONTMODE    EQU     0           ; Continuous mode
REQMODE     EQU     1           ; Request mode
CONTCHAR    EQU     'C          ; Character to request cont. mode
REQCHAR     EQU     'R          ; Character to request request mode
QUERYCHAR   EQU     '?          ; Character to request a data packet
                                ; * Only valid in request mode
FLAGCHAR    EQU     $A0         ; Flag indicating beginning of packet in
                                ; continuous mode

;
; ***********************
; * Program begins here *
; ***********************
;

INIT:       LDS     #$00FF      ; Initialize stack pointer

            LDAA    #0          ; Disable pulse accumulator on port A
            STAA    PACTL

            LDAA    #$01        ; Set EVB to serial receive normally
            STAA    $4000

            LDAA    #$30        ; Set serial port for 9600 baud
                                ; (using 8 MHz XTAL)
                                ; (Set to $20 for 31.25 kbaud)
            STAA    BAUD
            LDAA    #$0C        ; Transmit & receive enable
            STAA    SCCR2

            LDAA    #FLAGCHAR   ; Set up flag character in buffer
            STAA    GLOVEFLAG

            LDAA    #CONTMODE   ; Start in request mode
            STAA    MODEFLAG

INITGLOVE:  JSR     HIRES       ; Set hi-res mode

;
; *********************
; * Main program loop *
; *********************
;

MAIN:       LDAA    #0          ; Zero the retry counter
            STAA    UNREADY
            LDX     #D2SLOW     ; Wait a while
            JSR     DELAY

CHECKRDY:   JSR     GETBYTE     ; Check to see if glove is ready
            CMPA    #$A0        ; Is it A0 (the start of the sequence?)
            BEQ     READDATA    ; Yes, read the rest of the data sequence

            INC     UNREADY     ; Increment retry counter
            BEQ     INITGLOVE   ; If 256 tries, initialize the glove again

            LDX     #D2SLOW     ; Wait and try again
            JSR     DELAY
            BRA     CHECKRDY

READDATA:   LDY     #GLOVEDATA
            JSR     GETGLOVE    ; Read glove data into buffer
            LDY     #GLOVEDATA

            LDAA    SCSR        ; Check serial port receive status
            ANDA    #$20
            BEQ     CHECKMODE

            LDAA    SCDR        ; Character received - check it

            CMPA    #QUERYCHAR  ; Is it the query character?
            BNE     NOTQRYCH    ; No - skip this
            LDAA    MODEFLAG    ; Yes - check to see what mode we're in
            CMPA    #REQMODE    ; If not in request mode, skip this
            BNE     CHECKMODE
            LDY     #GLOVEDATA  ; Send 6 bytes over the serial port
            LDAB    #6
            JSR     SENDSER     ; This does our pausing for us (6.25 ms)
            BRA     MAIN        ; No need to continue checking
            
NOTQRYCH:   CMPA    #CONTCHAR   ; Is it the cont. mode activator?
            BNE     NOTCONTCH   ; No - skip this
            LDAA    #CONTMODE   ; Yes - set continuous mode
            STAA    MODEFLAG
            BRA     CHECKMODE

NOTCONTCH:  CMPA    #REQCHAR    ; Is it the request mode activator?
            BNE     CHECKMODE   ; No - skip this
            LDAA    #REQMODE    ; Yes - set request mode
            STAA    MODEFLAG
            BRA     WAIT        ; No need to continue checking

CHECKMODE:  LDAA    MODEFLAG    ; Check the mode flag
            CMPA    #CONTMODE   ; Is it continuous mode?
            BNE     WAIT        ; No - wait and start the loop again
            LDY     #GLOVEFLAG  ; Send data (6 + Flag) over serial port
            LDAB    #7
            JSR     SENDSER     ; This provides approx. 7.29 ms of delay
                                ; at 9600 baud
            BRA     MAIN

WAIT:       LDX     #D2SLOW     ; Wait a while before continuing
            JSR     DELAY
            BRA     MAIN

;
; **************************************
; *          Delay subroutine          *
; * (Delay proportional to value in X) *
; **************************************
;

DELAY:      DEX
            BNE     DELAY
            RTS

;
; *******************
; * Set hi-res mode *
; *******************
;

HIRES:      C1L0                ; Dummy read 4 dummy bits from glove
            C1L1
            DELAY3US
            C1L0

            DELAY3US
            C0L0
            C1L0
            DELAY3US
            C0L0
            C1L0
            DELAY3US
            C0L0
            C1L0
            DELAY3US
            C0L0
            C1L0

            C1L0
            LDX     #2402       ; Delay 7212us
            JSR     DELAY

            C1L1
            LDX     #752        ; Delay 2260us
            JSR     DELAY

            LDAA    #7
            STAA    BYTECNT
            LDY     #HRCODE     ; Send the 7 byte code
BYTELOOP:   LDAA    #8
            STAA    BITCNT
            LDAA    0,Y
BITLOOP:    LSLA
            BCC     BITOFF
            C1L1
            C0L1
            C1L1
            BRA     NEXTLOOP
BITOFF:     C1L0
            C0L0
            C1L0
NEXTLOOP:   DELAY3US
            DEC     BITCNT
            BNE     BITLOOP

            LDX     #D2BYTES
            JSR     DELAY
            INY
            DEC     BYTECNT
            BNE     BYTELOOP

            LDX     #296        ; Delay 892us
            JSR     DELAY

            C1L0
            LDX     #20000      ; Delay a "long time"
            JSR     DELAY
            RTS

;
; Glove initialization bytes
;

HRCODE:     dc.b    $06,$C1,$08,$00,$02,$FF,$01

;
; *******************************************
; *        Get the 6 byte data packet       *
; * (Places data in buffer pointed to by Y) *
; *******************************************
;

GETGLOVE:   JSR     GETBYTE     ; Get each byte consecutively
            STAA    0,Y         ; and store in memory
            INY
            LDX     #D2BYTES
            JSR     DELAY

            JSR     GETBYTE
            STAA    0,Y
            INY
            LDX     #D2BYTES
            JSR     DELAY

            JSR     GETBYTE
            STAA    0,Y
            INY
            LDX     #D2BYTES
            JSR     DELAY

            JSR     GETBYTE
            STAA    0,Y
            INY
            LDX     #D2BYTES
            JSR     DELAY

            JSR     GETBYTE
            STAA    0,Y
            INY
            LDX     #D2BYTES
            JSR     DELAY

            JSR     GETBYTE
            STAA    0,Y
            LDX     #D2BYTES
            JSR     DELAY

            JSR     GETBYTE     ; Throw away last two bytes
            LDX     #D2BYTES
            JSR     DELAY
            JSR     GETBYTE
            RTS

;
; *****************************
; * Get a byte from the glove *
; *    (Returns byte in A)    *
; *****************************
;

GETBYTE:    C1L0                ; Pulse the latch line
            C1L1
            DELAY3US
            C1L0

            LDAA    #8
            STAA    BITCNT

GETLOOP:    LSLA                ; Read 8 bits sequentially
            LDAB    PORTA
            ANDB    #GDATA      ; Mask off other bits
            ABA                 ; Assemble the data byte
            C0L0
            C1L0
            DEC     BITCNT
            BNE     GETLOOP

            RTS

;
; ***********************************************
; * Send an X byte packet over the serial port  *
; * (Y contains the address of the data buffer, *
; *  B contains the number of bytes to send)    *
; ***********************************************
;

SENDSER:    LDAA    SCSR        ; Check status register for Tx ready
            ANDA    #$80
            BEQ     SENDSER     ; Try again if not ready

            LDAA    0,Y         ; Send byte to the serial port
            STAA    SCDR

            INY                 ; Move to next data byte
            DECB
            BNE     SENDSER     ; Send next byte if not done

            RTS

From dstamp@watserv1.uwaterloo.ca Thu Oct 24 17:07:52 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA04592
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 24 Oct 1991 20:23:56 -0500
Received: by watserv1.uwaterloo.ca
	id <AA29548>; Thu, 24 Oct 91 21:07:52 -0400
Date: Thu, 24 Oct 91 21:07:52 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110250107.AA29548@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

 kilian@poplar.cray.com (Alan Kilian) posts a file:

>Hmmm let me think about that. Let's get some numbers in here. 
>O.K. 120 frames per second. 1.3ms from full phosphor output to zero output.
>2ms to switch the LCD from one state to another. (On ->Off or Off -> On)
>How about 7ms for each frame to be drawn every 8ms.
>

That's assuming you've 
a) Got a Stereographics type frame rate doubler, or
b) A *very* high-end multisync monitor and reprogrammed the video hardware on
  <any of a LOT of home computers, including the IBM PC VGA card and including
   the Atarti, Amiga, and Mac>

Most of us *won't* be using such a monitor, so stereo will have to be at 30
left, 30 right frames/sec.  Sega glasses work GREAT at this rate.  That 
1.3 mS phospor delay can be fixed with a 555 timer chip, set to delay 1.3 mS
LESS than the vertical frame rate, and triggered off the photodetector.
Works stably enough.  If you've got the bucks for 120 Hz display system, you
can probably afford Stereogrophics "CrystalEyes", which blow the Sega glasses
out of the water on speed and transmissivity-- AND they're wireless. 

If you ARE reprogramming the hardware, you can set the vertical blanking time
to be long enough to let the Sega glasses switch, anyway.  Doesn't sound too
hard.  THe problem is the super-multisync monitor required, which is
currently running at $900-$1500 a pop.

Just noodjing,


--------------------------------------------------------------------------
| My life is Hardware,                    |                              | 
| my destiny is Software,                 |         Dave Stampe          |
| my CPU is Wetware...                    |                              | 
| Anybody got a SDB I can borrow?         | dstamp@watserv1.uwaterloo.ca |
__________________________________________________________________________


From dstamp@watserv1.uwaterloo.ca Thu Oct 24 19:19:37 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA05118
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 24 Oct 1991 22:23:54 -0500
Received: by watserv1.uwaterloo.ca
	id <AA05558>; Thu, 24 Oct 91 23:19:37 -0400
Date: Thu, 24 Oct 91 23:19:37 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110250319.AA05558@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

 
>    A minor nit. I believe the new enhanced Denise chip for Amiga's.
>(it comes with the new OS upgrade and in the newer Amiga's like the A3000
>and A500) can do programmable scan rates.
>    The slower the scan rate, the higher the resolution, and vice-versa.
>(Obviously, the bandwidth to video ram is fixed, so if you need to
>fetch data at a faster display rate, you have to fetch less of it.)
>There is program that runs the scan rate between 20-70hz floating around
>somewhere, I don't know if it can run any faster.
>
>  Why do we need 120 frames per second? If you can only render
>VR frames at 15-20 per second, I think  60fps is fast enough.

The problem isn't programming the video rate to 120 Hz, it's affording a 
monitor that can display it! (B-{))

The idea behind 120 Hz frame rates is to reduce flicker when using Sega
glasses: as half the frames go to the left eye and the other half to the
right, standard 60 Hz video is seen as 30 Hz, which flickers noticeably.
At the 120 Hz video rate, each eye sees 60 Hz, thus no flicker.  I don't
know if anyone's fooled with 100 Hz or 80 Hz video-- 80 Hz monitors
are a lot cheaper than 120 Hz capable multisync monitors.



--------------------------------------------------------------------------
| My life is Hardware,                    |                              | 
| my destiny is Software,                 |         Dave Stampe          |
| my CPU is Wetware...                    |                              | 
| Anybody got a SDB I can borrow?         | dstamp@watserv1.uwaterloo.ca |
__________________________________________________________________________


From dstamp@watserv1.uwaterloo.ca Fri Oct 25 09:09:37 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA07909
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 25 Oct 1991 12:13:59 -0500
Received: by watserv1.uwaterloo.ca
	id <AA11100>; Fri, 25 Oct 91 13:09:37 -0400
Date: Fri, 25 Oct 91 13:09:37 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110251709.AA11100@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu
Subject: straw poll


Can whoever was doing the straw poll send me a message?  My mailer ate the
last one, and the address in the message doesn't work.

- dstamp@watserv1.uwaterloo.ca

From dstamp@watserv1.uwaterloo.ca Fri Oct 25 10:47:37 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA08349
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 25 Oct 1991 13:51:51 -0500
Received: by watserv1.uwaterloo.ca
	id <AA19649>; Fri, 25 Oct 91 14:47:37 -0400
Date: Fri, 25 Oct 91 14:47:37 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110251847.AA19649@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

Coyt Watters sent me some mail.  I tried to get back to him, but the address 
didn't work.  So I'll post my reply here, as I think it's of general interest:


>Been following the thread on Sega LCD glasses.
>
>Why does 30hz to each eye cause a flicker, when 24hz (Film) does not?
>

I believe the reason is that the Sega glsses give you 50% duty cycle
on the images to each eye, and a movie projector gives over 90%.
This results in 5 times the 24 Hz/30Hz flicker (at least).  You can
see the flicker in movies if you have a fast-moving white object on
a dark background-- just look at the edges.

>
>Would it be possible to use two camcorder viewfinders, mounted at
>the sides of the head and projecting onto curved screens before the
>eyes?
>
>The center of vision would not be a problem, but there would be distortion
>at the edjes of vision due to the curving screen.  This could be overcome
>by the lens used to project the image.
>
>Attempt at picture
>               __   __
>              /  \ /  \  <-- screen
>             /    |    \               not to scale (of course!)
>             |   o^o   |
>               U(   )U <-----projector
>                 """
>                 ^
>               User
>Provided the screens were made of a tough, lightweight plastic, the unit would
>not weigh very much, and the weight of the video units would be centered
>of either side of the head, so their weight would balance.
>
>-Coyt D. Watters (cwatters@magnus.acs.ohio-state.edu)

Not that bad an idea.  There are a few implementation problems for
garage VR, though.  First, the mirrors must be a fairly special shape,
and making such a mirror is not trivial.  You'd have to have some way
to turn computer-generated shape data into a form to mold plastic around,
then get it coated.  Not my field, but someone else might know how.

The second, more serious problem has to do with the high mangification.
A slight shift of the mirrors on the head will cause motion in the image
proportional to the same shift in the progector CRT position.  For example,
a 1mm motion with a CRT 12mm wide (standard viewfinder CRT) shifts the
image by 1/12 of its width.  And unless the mirrors were REALLY light, it
is difficult to eliminate shifts entirely.

Still, I've seen military helmet-mounted displays that use this technique.
So perhaps these problems are more easily solved than I think.

BTW, sci.virtual-worlds is back up.  I guess we should take the eyephone
stuff back there (B-{))


--------------------------------------------------------------------------
| My life is Hardware,                    |                              | 
| my destiny is Software,                 |         Dave Stampe          |
| my CPU is Wetware...                    |                              | 
| Anybody got a SDB I can borrow?         | dstamp@watserv1.uwaterloo.ca |
__________________________________________________________________________


From chrisl@cbmvax.cbm.commodore.com Fri Oct 25 12:02:43 1991
Received: from RUTGERS.EDU by karazm.math.UH.EDU with SMTP id AA08995
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 25 Oct 1991 15:58:07 -0500
Received: from cbmvax.UUCP by rutgers.edu (5.59/SMI4.0/RU1.4/3.08) with UUCP 
	id AA23339; Fri, 25 Oct 91 16:05:10 EDT
Received: by cbmvax.cbm.commodore.com (5.57/UUCP-Project/Commodore 2/8/91)
	id AA13682; Fri, 25 Oct 91 16:02:44 EDT
From: chrisl@cbmvax.cbm.commodore.com (Christian Ludwig - CATS)
Message-Id: <9110252002.AA13682@cbmvax.cbm.commodore.com>
Subject: Re: why 30hz flickers and movies don't
To: dstamp@watserv1.uwaterloo.ca (Dave Stampe-Psy+Eng)
Date: Fri, 25 Oct 91 16:02:43 EDT
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: <9110251847.AA19649@watserv1.uwaterloo.ca>; from "Dave Stampe-Psy+Eng" at Oct 25, 91 2:47 pm
X-Mailer: ELM [version 2.2 PL0]

> >Been following the thread on Sega LCD glasses.
> >
> >Why does 30hz to each eye cause a flicker, when 24hz (Film) does not?
> >
> 
> I believe the reason is that the Sega glsses give you 50% duty cycle
> on the images to each eye, and a movie projector gives over 90%.
> This results in 5 times the 24 Hz/30Hz flicker (at least).  You can
> see the flicker in movies if you have a fast-moving white object on
> a dark background-- just look at the edges.
> 

Also...  movies are filmed at 24fps, but when projected, each frame is shown
TWICE in that 1/24sec bit of time.  This approximates the effect of 48fps,
hence, no (or at least far less) flicker.

Chris Ludwig

From dstamp@watserv1.uwaterloo.ca Fri Oct 25 13:38:14 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA09338
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 25 Oct 1991 16:42:40 -0500
Received: by watserv1.uwaterloo.ca
	id <AA29851>; Fri, 25 Oct 91 17:38:14 -0400
Date: Fri, 25 Oct 91 17:38:14 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110252138.AA29851@watserv1.uwaterloo.ca>
To: chrisl@cbmvax.cbm.commodore.com, dstamp@watserv1.uwaterloo.ca
Subject: Re: why 30hz flickers and movies don't
Cc: glove-list@karazm.math.uh.edu

> From glove-list-request@karazm.math.UH.EDU Fri Oct 25 17:01:23 1991
> From: chrisl@cbmvax.cbm.commodore.com (Christian Ludwig - CATS)
> Subject: Re: why 30hz flickers and movies don't
> To: dstamp@watserv1 (Dave Stampe-Psy+Eng)
> Cc: glove-list@karazm.math.uh.edu
> 
> > >Been following the thread on Sega LCD glasses.
> > >
> > >Why does 30hz to each eye cause a flicker, when 24hz (Film) does not?
> > >
> > 
> > I believe the reason is that the Sega glsses give you 50% duty cycle
> > on the images to each eye, and a movie projector gives over 90%.
> > This results in 5 times the 24 Hz/30Hz flicker (at least).  You can
> > see the flicker in movies if you have a fast-moving white object on
> > a dark background-- just look at the edges.
> > 
> 
> Also...  movies are filmed at 24fps, but when projected, each frame is shown
> TWICE in that 1/24sec bit of time.  This approximates the effect of 48fps,
> hence, no (or at least far less) flicker.
> 
> Chris Ludwig
> 
Depends on HOW you're showing the movie!  The film has to move SOMETIME,
and be blanked during the motion.  So you've got a MINIMUM blanking interval.
Adding TWICE the amount of TWICE the frequency (do a Fourier analysis of the
brightness versus time) will result in the same level of error thru a
first-order lowpass filter, which the human eye is.  Showing the same 
frame twice won't help that much.

- Dave Stampe

From nstar!bluemoon!moonhawk@iuvax.cs.indiana.edu Wed Oct 23 13:33:55 1991
Received: from RUTGERS.EDU by karazm.math.UH.EDU with SMTP id AA09405
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Fri, 25 Oct 1991 16:49:44 -0500
Received: from PORTAL.BCM.TMC.EDU by rutgers.edu (5.59/SMI4.0/RU1.4/3.08) 
	id AA01421; Fri, 25 Oct 91 17:45:28 EDT
Received: from GAZETTE.BCM.TMC.EDU by portal.bcm.tmc.edu id aa07325;
          25 Oct 91 15:58 CDT
Received: from bcm.tmc.edu by gazette.bcm.tmc.edu (AA05698); Thu, 24 Oct 91 02:30:48 CDT
Received: from lib.tmc.edu by bcm.tmc.edu (AA23055); Thu, 24 Oct 91 02:30:45 -0500
Received: by lib.tmc.edu; Thu, 24 Oct 91 02:33:32 CDT
Received: by iuvax.cs.indiana.edu 
Received: by nstar.rn.com (/\==/\ Smail3.1.20.1 #20.1)
	id <m0kZyyt-0002nXC@nstar.rn.com>; Thu, 24 Oct 91 01:55 EST
Received: by bluemoon.uucp (/\=-/\ Smail3.1.16.1 #16.27)
	id <m0kZqD6-0003Z8C@bluemoon.uucp>; Wed, 23 Oct 91 17:33 EDT
To: glove-list@karazm.math.uh.edu
Subject: Hey...
From: David Culberson <moonhawk@bluemoon.rn.com>
Comments: Life's good as long as there's a McDonalds!
Message-Id: <9qHaaB1w164w@bluemoon.rn.com>
Date: Wed, 23 Oct 91 17:33:55 EDT
Organization: Blue Moon BBS ((614) 868-998[024])

        I would like taken off the glove list; how do I go about doing so? 
 thanks.

moonhawk@bluemoon               moonhawk@bluemoon.rn.com

From tinman%agora.rain.com@m2xenix.psg.com Fri Oct 25 15:17:00 1991
Received: from m2xenix.psg.com by karazm.math.UH.EDU with SMTP id AA12078
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 26 Oct 1991 00:23:06 -0500
Received: by m2xenix.psg.com (/\==/\ Smail3.1.22.1 #22.3)
	id <m0kagPz-000EEkC@m2xenix.psg.com>; Fri, 25 Oct 91 22:18 PDT
Received: by agora.rain.com (/\==/\ Smail3.1.21.1 #21.6)
	id <m0kagOK-0001dSC@agora.rain.com>; Fri, 25 Oct 91 22:17 PDT
Message-Id: <m0kagOK-0001dSC@agora.rain.com>
Date: Fri, 25 Oct 91 22:17 PDT
From: tinman@agora.rain.com (David Tinnyo)
To: glove-list@karazm.math.uh.edu
Subject: Amiga Hires Code Please?


Could someone with the Amiga hires code please mail it to me.  I'm a poor
boy with no FTP access.  Thanks!

BTW, I've been trying to use the IBM code with no luck... Maybe my timer
routines are inaccurate?  What kind of tolerances are there for the delays?
Maybe the Amiga code answers these questions?

--David TinNyo                   tinman@agora.rain.com

From stm@sequent.com Fri Oct 25 15:22:05 1991
Received: from gateway.sequent.com ([138.95.19.12]) by karazm.math.UH.EDU with SMTP id AA12087
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 26 Oct 1991 00:27:19 -0500
Received: from time1.sequent.com by gateway.sequent.com (5.61/1.34)
	id AA00953; Fri, 25 Oct 91 22:23:57 -0700
Received: by time1.sequent.com (5.61/1.34)
	id AA09587; Fri, 25 Oct 91 22:22:06 -0700
From: Scott "Worf" MacQuarrie <stm@sequent.com>
Message-Id: <9110260522.AA09587@time1.sequent.com>
Subject: Re: Oops!
To: 
Date: Fri, 25 Oct 91 22:22:05 PDT
Cc: glove-list@karazm.math.uh.edu
Priority: normal
In-Reply-To: <9110231445.AA23421@rugsucker>; from "Marshall Robin" at Oct 23, 91 10:45 am
X-Mailer: ELM [version 2.2 CRG PL14c]


PLease remove me from this list.

Thanks,

-- 
Scott T. MacQuarrie                  Marketing Training Developer 
                                       Sequent Computer Systems   
     stm@sequent.com                Beaverton, OR      503-578-5456 
"Life is Good!"

From stm@sequent.com Fri Oct 25 15:22:57 1991
Received: from gateway.sequent.com ([138.95.19.12]) by karazm.math.UH.EDU with SMTP id AA12094
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 26 Oct 1991 00:28:10 -0500
Received: from time1.sequent.com by gateway.sequent.com (5.61/1.34)
	id AA00960; Fri, 25 Oct 91 22:24:48 -0700
Received: by time1.sequent.com (5.61/1.34)
	id AA09599; Fri, 25 Oct 91 22:22:58 -0700
From: Scott "Worf" MacQuarrie <stm@sequent.com>
Message-Id: <9110260522.AA09599@time1.sequent.com>
Subject: URGT* Removal from list
To: glove-list@karazm.math.uh.edu
Date: Fri, 25 Oct 91 22:22:57 PDT
Priority: urgent
X-Mailer: ELM [version 2.2 CRG PL14c]

Please remove me from this list.

Thanks,
-- 
Scott T. MacQuarrie                  Marketing Training Developer 
                                       Sequent Computer Systems   
     stm@sequent.com                Beaverton, OR      503-578-5456 
"Life is Good!"

From arellano@jetson.csc.ti.com Fri Oct 25 20:58:28 1991
Received: from TI.COM by karazm.math.UH.EDU with SMTP id AA12268
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 26 Oct 1991 02:03:57 -0500
Received: from tilde.csc.ti.com ([128.247.160.56]) by ti.com id AA24151; Sat, 26 Oct 1991 01:59:13 -0500
Received: from jetson.dsg.ti.com (jetson) by tilde.csc.ti.com id AA27100; Sat, 26 Oct 1991 01:58:43 -0500
Received: by jetson.dsg.ti.com (4.1/SMI-4.1)
	id AA05908; Sat, 26 Oct 91 01:58:28 CDT
Date: Sat, 26 Oct 91 01:58:28 CDT
Message-Id: <9110260658.AA05908@jetson.dsg.ti.com>
To: glove-list@karazm.math.uh.edu
From: arellano@itg.ti.com
Sender: arellano@jetson.csc.ti.com
Subject: remove from list


Please remove me from this list.

Many thanks.


From gibsonm@u.washington.edu Fri Oct 25 17:45:18 1991
Received: from milton.u.washington.edu by karazm.math.UH.EDU with SMTP id AA12314
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 26 Oct 1991 02:54:44 -0500
Received: by milton.u.washington.edu
	(5.65/UW-NDC Revision: 2.1 ) id AA27223; Sat, 26 Oct 91 00:45:18 -0700
Date: Sat, 26 Oct 91 00:45:18 -0700
From: Michael Gibson <gibsonm@u.washington.edu>
Message-Id: <9110260745.AA27223@milton.u.washington.edu>
Sender: gibsonm@milton.u.washington.edu
To: glove-list@karazm.math.uh.edu
Subject: Power Glove - Amiga - Interface hints please.


I've been following this list for a while, and I finally got a glove to
try and hook to my Amiga. I have never really played around with hardware,
so I am not quite sure how to go about making a connector for the glove. 
I think I can handle the amiga side, but what I am not sure about is how
to wire the connector to the powerglove side. Do I have to solder it to
the nintendo connector or something? Please help me with this, and when you
explain, please be very clear and explicit. I tried to get the amiga hires
code working, but I think that my interface to the nintendo side was very
bad. While I'm at it, I noticed that there is only one piece of code 
availiable for the Amiga and glove on  the archive at karazm.math.uh.edu
I'm sure there must be more out than this. If you have any code for the
Amiga at all, including older lores code, please post it to the karazm
archive (in /pub/VR/Sources I think) or mail it to me. I would sure
appreciate it. My friend has the Amazing Computing powerglove article, but
neither of us has a modula-2 compiler. Can someone who has that code
either post it or mail it to me? Thank you very much for the help.

Looking forward to 3-d input,

				Michael

				gibsonm@milton.u.washington.edu

From sjs@stekt.oulu.fi Sat Oct 26 11:00:06 1991
Received: from ousrvr.oulu.fi by karazm.math.UH.EDU with SMTP id AA12369
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 26 Oct 1991 03:03:12 -0500
Received: from stekt.oulu.fi by ousrvr.oulu.fi (4.0/SMI-4.0)
	id AA19607; Sat, 26 Oct 91 09:58:54 +0200
Received: by stekt.oulu.fi (4.1/SMI-4.1)
	id AA27241; Sat, 26 Oct 91 10:00:06 +0100
Date: Sat, 26 Oct 91 10:00:06 +0100
From: sjs@stekt.oulu.fi (Sami Sallinen)
Message-Id: <9110260900.AA27241@stekt.oulu.fi>
To: glove-list@karazm.math.uh.edu


  Howdy!

  I am an undergraduate student of computer engineering at the university
  of Oulu, Finland. I have a burning desire to get me a PoverGlove (primarily)
  and/or a pair of Sega LCD glasses, but the only supplier that i found for 
  the glove wouldnt deliver overseas. So I wonder if anybody on this list 
  would happen to have a glove to sell or would be as kind as to buy one for
  me and send it to me (after feceiving the money from me, of course).
  I am willing to pay some extra in the latter case.

  If anybody feels intrested, please e-mail me.

  Sami Sallinen    sjs@stekt.oulu.fi
  
  Tel +358-81-339179 (Voice)

  - Thanks in advance!


   

From mab@druwy.att.com Sat Oct 26 03:08:00 1991
Received: from att.att.com by karazm.math.UH.EDU with SMTP id AA13173
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 26 Oct 1991 10:14:25 -0500
Message-Id: <199110261514.AA13173@karazm.math.UH.EDU>
From: mab@druwy.att.com
Date: Sat, 26 Oct 91 09:08 MDT
To: att!glove-list
In-Reply-To: <9110260745.AA27223@milton.u.washington.edu>
Subject: Power Glove - Amiga - Interface hints please.

The common method of glove-interface requires you to find a Nintendo
extender cable.  That's about the only way to find those funky 7-pin
connectors.  You need to hook up your computer to the short glove
cable that normally plugs directly into the nintendo joystick port.

Of course, nobody around here carries extender cables anymore.  When I
asked around at toy stores, they suggested I use the new wireless
extenders, heh heh.

My actual interface hack on the glove side is just a bunch of wires
that I plug directly into the holes in the female glove connector.
I used non-stranded wires of the correct guage (I dunno which guage I
use) and they just insert into the nintendo connector and fit snugly.
I color-coded them so I know how to re-insert them if I ever remove them.
So I as able to do the interface without destroying the glove connector
and without finding an extender cable.

From mab@druwy.att.com Sat Oct 26 03:23:00 1991
Received: from att.att.com by karazm.math.UH.EDU with SMTP id AA13192
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 26 Oct 1991 10:29:22 -0500
Message-Id: <199110261529.AA13192@karazm.math.UH.EDU>
From: mab@druwy.att.com
Date: Sat, 26 Oct 91 09:23 MDT
To: att!glove-list
Subject: Amiga Hires Code

Attention everyone who wants the Amiga hi-res code but still doesn't
have it....

I have been *swamped* this week at work and hence have been ignoring my
e-mail.  There have been *many* more requests for the Amiga glove code
than I had anticipated.  I sent out about twenty copies last weekend
shortly after posting the initial announcement.  There have been lots
more requests since then, and combined with all the VGA scan-line trash
that's been appearing on the list, I've been pretty-much ignoring the
glove-list.  (side note: please stay on the topic of gloves *only*)

If you want the Amiga code and don't have it, it should be available at
the ftp site.  If you are *unable* to use ftp (i.e. your site doesn't
allow it, as opposed to you don't know how to use ftp) then send me your
request again specifically mentioning that you cannot get ftp access, and
I'll e-mail it to you.  I apologize to anyone whose requests for code I've
ignored, but I just can't keep up with the e-mail this week.


From mab@druwy.att.com Sat Oct 26 03:32:00 1991
Received: from att.att.com by karazm.math.UH.EDU with SMTP id AA13216
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 26 Oct 1991 10:39:23 -0500
Message-Id: <199110261539.AA13216@karazm.math.UH.EDU>
From: mab@druwy.att.com
Date: Sat, 26 Oct 91 09:32 MDT
To: att!glove-list
Subject: Amiga Hires Code - Timing

For those of you who have asked, the timing in my Amiga hi-res code
was determined by trial-and-error one Saturday morning.  It started
working on my A500, and it worked on a friend's A2000.  It doesn't
work as-is on my A3000 simply due to the timing loops not being right.

I get some flakey behavior on my setup too.  About half the time I run
it, I get all FF's or various bit patterns that don't correspond to the
glove protocol.  Stopping it and re-running it usually causes the glove
to beep and then it starts working.

The correct way to get the Amiga code to work would be to do the kind
of timing calibration done in one of the PC versions posted this week.
I was working on a similar calibration last weekend when trying to get
the glove to work on my A3000.  I wasn't having much success, and now that
the PC code is available, maybe I'll get time to port it instead.  The
postscript timing diagrams that appeared on the list should help too.

If anyone else has done any Amiga code for the glove, even lo-res, I'd
appreciate seeing it.

From timd@twaddle.dell.com Fri Oct 25 03:52:26 1991
Received: from dell1.dell.com by karazm.math.UH.EDU with SMTP id AA13381
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 26 Oct 1991 11:21:41 -0500
Received: from twaddle.dell.com. by dell1.dell.com (4.1/2.1-DELL-G)
	   id AA10950; Sat, 26 Oct 91 10:50:13 CDT
Received: by twaddle.dell.com. (4.1/SMI-4.1)
	id AA27044; Fri, 25 Oct 91 08:52:26 CDT
Date: Fri, 25 Oct 91 08:52:26 CDT
From: timd@twaddle.dell.com (Tim Deagan)
Message-Id: <9110251352.AA27044@twaddle.dell.com.>
To: glove-list@karazm.math.uh.edu
Subject: State machine boxes


Even though I already made loud noises that the 8051 was a
great choice for a pglove -> serial box, I have been thinking
about how simple a state machine without a microp could be.

Has anybody out there tried burning a EPROM or E2PROM to deliver
the hires start sequence?  In the same way that audio samples are
"pseudo-digitized" and burned onto a PROM then clocked out 
directly to a speaker to give a reasonable reproduction, any
digital sequence can be burned and reproduced at a consistent rate.

A xtal, a PROM, a MAX232 for serial output and assorted glue ought
to put the glove in hires and deliver the 12 byte packet to the 
serial port.  It could have a reset button on the box.  This would
still leave noise reduction and such to software, but timing would
no longer be an issue.

Good start for a MIDI controller box too...

More from less.
--Tim
timd@twaddle.dell.com


From timd@twaddle.dell.com Thu Oct 24 08:35:15 1991
Received: from dell1.dell.com by karazm.math.UH.EDU with SMTP id AA13388
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 26 Oct 1991 11:21:56 -0500
Received: from twaddle.dell.com. by dell1.dell.com (4.1/2.1-DELL-G)
	   id AA10968; Sat, 26 Oct 91 10:50:28 CDT
Received: by twaddle.dell.com. (4.1/SMI-4.1)
	id AA25495; Thu, 24 Oct 91 13:35:15 CDT
Date: Thu, 24 Oct 91 13:35:15 CDT
From: timd@twaddle.dell.com (Tim Deagan)
Message-Id: <9110241835.AA25495@twaddle.dell.com.>
To: glove-list@karazm.math.uh.edu
Subject: 8051s !!!


I'm suprised that there aren't scads of 8051 developers
working on a PGlove box.  I am!  The 8051 beats the 68HC11
for a couple of reasons in my book.
1) Lots of PD assemblers, dissassemblers, simulators
2) Reasonably priced pseudo-ICEs (approx $200)
3) Cheese-whiz Assembly code (includes such commands
     as ANL and ORL, gotta love it!)

Anyways the point is that it's a great hombrew platform.  
I've built a bunch of MIDI boxes at home with nothing but
a scope.  They also have a 8032AH with on-board BASIC, who could
ask for more?

I am trying as fast as I can to whip up a MIDI box for the glove,
I want to map my MIDI drum machine to the joystick space as a start.
Hires mode makes LOTS of stuff possible, especially if you include
one of those NINTENDO twister board things (power-pad?) that you
can walk around on and use as an input device.

Realistically it's probably easier to run the glove into a PC with
a MIDI card and develop SW there, but maybe not.  Have any of you
homebrewers looked at C&T's PC on a chip with SUPERSTATE?  LOTS and
LOTS of potential for low cost-high result development.

Forget the 68HC11, the 8051 is the industry workhorse for good reason.
Sorry if I'm stepping on any toes, but discourse is the soul of reason,
or something.

--Tim
timd@twaddle.dell.com


From james@panix.com Sat Oct 26 14:53:58 1991
Received: from cmcl2.NYU.EDU (NYU.EDU) by karazm.math.UH.EDU with SMTP id AA14107
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 26 Oct 1991 18:08:56 -0500
Received: by cmcl2.NYU.EDU (5.61/1.34)
	id AA27808; Sat, 26 Oct 91 19:04:37 -0400
Received: by panix.com (5.64/A/UX-2.01-AMR)
	id AA07269; Sat, 26 Oct 91 18:53:58 EDT
Date: Sat, 26 Oct 91 18:53:58 EDT
From: james@panix.com (James Britt)
Message-Id: <9110262253.AA07269@panix.com>
To: glove-list@karazm.math.uh.edu

I finally got a glove; Toys R Us in Manhattan, $30.00.  Could somebody
summurize what are the current options for interface to an IBM?
Thanks!

James Britt, NYC
:w

From nop@att1.Mankato.MSUS.EDU Sat Oct 26 11:57:16 1991
Received: from ATT1.Mankato.MSUS.EDU by karazm.math.UH.EDU with SMTP id AA14143
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 26 Oct 1991 18:36:40 -0500
Received:  by att1.Mankato.MSUS.EDU (5.59/25-eef)
	id AA02078; Sat, 26 Oct 91 16:57:16 CDT
Date: Sat, 26 Oct 91 16:57:16 CDT
From: Jay A. Carlson <nop@att1.Mankato.MSUS.EDU>
Message-Id: <9110262157.AA02078@att1.Mankato.MSUS.EDU>
To: timd@twaddle.dell.com
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: Tim Deagan's message of Thu, 24 Oct 91 13:35:15 CDT <9110241835.AA25495@twaddle.dell.com.>
Subject: 8051s !!!


> I'm suprised that there aren't scads of 8051 developers
> working on a PGlove box.  I am!  The 8051 beats the 68HC11
> for a couple of reasons in my book.

I'm not going to get into a my-controller-is-better-than-your-
controller thread, as the glove-list is not the place to do it.
However, I don't want the list to be mislead too far by either the
Intel or the Motorola partisans.

> 1) Lots of PD assemblers, dissassemblers, simulators

Motorola distributes a freeware assembler for the HC11 (and in fact,
their entire 8-bit processor line) with source.  It's nothing fancy,
but it gets the job done.  If you need a macro assembler, I can
heartily recommend Matt Dillon's freeware DASM.  I've used it for
several projects targeted to the HC11 and the 6502.

The PD MS-DOS program SIM68 does a good job of simulating an HC11.  I
don't have much use for it as I use an Amiga for all my development
stuff (and find that I don't *usually* make mistakes that are easily
solved with a simulator. :-)

> 2) Reasonably priced pseudo-ICEs (approx $200)

The HC11 was designed with cheap development tools in mind.
Motorola's 68HC11 EVB will do pseudo-ICE of the single chip modes for
$88.11.  Expanded mode pseudo-ICE can be done with Motorola's EVM, or
third-party products in the $300 range.  Real ICE's are simpler due to
a number of other features in the chip.

> 3) Cheese-whiz Assembly code (includes such commands
>      as ANL and ORL, gotta love it!)

No comment.

> Anyways the point is that it's a great hombrew platform.  
> I've built a bunch of MIDI boxes at home with nothing but
> a scope.  They also have a 8032AH with on-board BASIC, who could
> ask for more?

How 'bout a freeware BASIC that can run on any of the processor line?

Motorola distributes a multitasking real-time executive (MCX) for the
HC11, incidentally.  Is there anything like this available for the
Intel controllers?

Just off the top of my head, here are a few reasons to prefer the
HC11: fully static CMOS design, more orthagonal instruction set,
cleaner bus, not Intel.  :-/

> I am trying as fast as I can to whip up a MIDI box for the glove,
> I want to map my MIDI drum machine to the joystick space as a start.
> Hires mode makes LOTS of stuff possible, especially if you include
> one of those NINTENDO twister board things (power-pad?) that you
> can walk around on and use as an input device.

Just mapping the glove to continuous controllers would interest a lot
of my musician friends.  There are so many possibilities of things to
do with the glove that it's hard to come up with a single really
concrete ones.  Lemme know what you get working.

> Forget the 68HC11, the 8051 is the industry workhorse for good reason.
> Sorry if I'm stepping on any toes, but discourse is the soul of reason,
> or something.

Or something. :-)

> --Tim
> timd@twaddle.dell.com

  // Jay Carlson
\X/  nop@att1.mankato.msus.edu

To subscribe to the MC68HC11 list, email to mc68hc11-request@elden.cse.nau.edu.

From dstamp@watserv1.uwaterloo.ca Sat Oct 26 17:08:52 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA14354
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sat, 26 Oct 1991 20:13:05 -0500
Received: by watserv1.uwaterloo.ca
	id <AA27676>; Sat, 26 Oct 91 21:08:52 -0400
Date: Sat, 26 Oct 91 21:08:52 -0400
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110270108.AA27676@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu
Subject: VGA: 6400 polys/sec


OK: so I finally sat down and wrote some polygon (actually, triangle)
drawing code for the VGA card.  The code spends 70% of its time waiting
on the VGA card, so processor speed isn't a big factor.  On a 486/25, and
a Paradise VGA card, I get 6400 polys/sec, or 156 uS per poly.  This
is on a 320x200x16 color screen (same as most 3D video games use).

I'm not going to post the code now (maybe later) suffice to say, it's
assembler embedded in a Turbo C++ program.  Uses 32-bit math, so it'll
run on 386 and 486 IBM PC's only.

This is still borderline for a VR program using BSP-tree techniques:
Assume 50% of the time is used for poly drawing, and the polys are
3 deep on the screen on average (this is the usual statistic in the literature)
Now, that means 3200 polys/sec (300/sec with interface code) so we can
draw 300 polys per frame at 10 frames/sec.  This may be somewhat optimistic,
as it takes 10.4 mS just to clear the screen and 300 polys will cover less
than half the screen (3 deep).  More later.

Oh, BTW, the benchmark was done with 24x24 triangular shaded polys.

- Dave Stampe

From ecl6gum%sun.leeds.ac.uk@VTVM2.CC.VT.EDU Sun Oct 27 12:40:05 1991
Received: from vtvm2.cc.vt.edu by karazm.math.UH.EDU with SMTP id AA00582
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 27 Oct 1991 12:08:47 -0600
Received: from UKACRL.BITNET by VTVM2.CC.VT.EDU (IBM VM SMTP V2R1)
   with BSMTP id 6935; Sun, 27 Oct 91 09:02:33 EST
Received: from RL.IB by UKACRL.BITNET (Mailer R2.07) with BSMTP id 6098; Sun,
 27 Oct 91 14:03:28 GMT
Received: 
           from RL.IB by UK.AC.RL.IB (Mailer R2.07) with BSMTP id 7250; Sun, 27
            Oct 91 14:03:28 GMT
Via:        UK.AC.LEEDS.MAILER; 27 OCT 91 14:03:25 GMT
Received: 
           from sunserv1_ie0 by mailer.leeds.ac.uk; Sun, 27 Oct 91 12:42:30 gmt
Received:   from sun030.sun.leeds.ac.uk by sun.leeds.ac.uk; Sun, 27 Oct 91
            12:40:00 GM
From: ecl6gum@sun.leeds.ac.uk
Date:       Sun, 27 Oct 91 12:40:05 GMT
Message-Id: <1096.9110271240@sun030.sun.leeds.ac.uk>
To: glove-list@karazm.math.uh.edu
Subject:    Using the PowerGlove on a SG PI

This is my first post to the Glove-list, so please excuse any lack of protocol!

I've recently started (ie a week ago) my PhD study at the University of Leeds,
 England, and am looking into developing a VR system for use in CAD/Scientific
 Visualisation. I'll be using a SG PI machine, and am looking to connect the
 PowerGlove to it.

I've ftp'd Greg Newby et al.'s code for using the PowerGlove on the PI, but have
 no details on how to physically connect the PowerGlove and what is involved.
 Could someone on the list please enlighten me?

Thanks.

Gurm Bacchus,			e-mail: ecl6gum@uk.ac.leeds.sun
University of Leeds,		voice : (+UK) 0532-335406.
England.

From jet Sun Oct 27 06:53:48 1991
Received: by karazm.math.UH.EDU id AA01453
  (5.65c/IDA-1.4.4 for glove-list); Sun, 27 Oct 1991 12:53:50 -0600
From: J Eric Townsend <jet>
Message-Id: <199110271853.AA01453@karazm.math.UH.EDU>
Subject: ping/test pls ignore
To: glove-list
Date: Sun, 27 Oct 91 12:53:48 CST
X-Mailer: ELM [version 2.3 PL11]


boo.

-- 
J. Eric Townsend - jet@uh.edu - Systems Wrangler, UH Dept of Mathematics
vox: (713) 749-2126  '91 CB750, DoD# 0378, TMRA# 27834  AMA# I-forget
PowerGlove mailing list: glove-list-request@karazm.math.uh.edu
"allow users to create more impactful documents" -- from an Apple press release

From tinman%agora.rain.com@m2xenix.psg.com Sun Oct 27 04:34:00 1991
Received: from m2xenix.psg.com by karazm.math.UH.EDU with SMTP id AA02707
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 27 Oct 1991 14:40:04 -0600
Received: by m2xenix.psg.com (/\==/\ Smail3.1.22.1 #22.3)
	id <m0kbHCi-0006DCC@m2xenix.psg.com>; Sun, 27 Oct 91 12:35 PST
Received: by agora.rain.com (/\==/\ Smail3.1.21.1 #21.6)
	id <m0kbHBL-0001dbC@agora.rain.com>; Sun, 27 Oct 91 12:34 PST
Message-Id: <m0kbHBL-0001dbC@agora.rain.com>
Date: Sun, 27 Oct 91 12:34 PST
From: tinman@agora.rain.com (David Tinnyo)
To: glove-list@karazm.math.uh.edu
Subject: Help with amiga Hi-res


Okay, so I've got the amiga hi-res code, but it doesn't work.  I've an
Amiga 2000HD with 3Megs.  The code says its tested on a 2000, and I'm
sure my connections are sound.  What gives?  Anyone have any tips on
massaging the timing so it works on my machine?

By the way I think there's an error in the pinouts of the glove in
/glovehack/glove.c.  It says pin 7 of the glove is +5, an I'm quite sure
its pin 5.

--David Tin Nyo,              tinman@agora.rain.com

From blossom-jonathan@CS.YALE.EDU Sun Oct 27 11:47:07 1991
Received: from SUNED.ZOO.CS.YALE.EDU (ZOO-GW.CS.YALE.EDU) by karazm.math.UH.EDU with SMTP id AA03071
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 27 Oct 1991 15:51:21 -0600
Received: by SUNED.ZOO.CS.YALE.EDU; Sun, 27 Oct 91 16:47:07 EST
Date: Sun, 27 Oct 91 16:47:07 EST
From: Jonathan Blossom <blossom-jonathan@CS.YALE.EDU>
Message-Id: <9110272147.AA24006@SUNED.ZOO.CS.YALE.EDU>
Received: by suned (suned) 
          via WIMP-MAIL (Version 1.3/1.7) ; Sun Oct 27 16:47:06
To: glove-list@karazm.math.uh.edu
Subject: Mac interfaces and hi-res

  It sounds like most people are using the glove on IBMs and Amigas, but
I'd like to connect my glove to my Mac IIci. The interface designed by
Joe Britt may be a good idea, but it's limited to low-res mode. Can anyone
direct me to more information about connecting the glove to a Macintosh
serial port, activating and reading hi-res mode, and reading the glove
from within THINK C or MPW C??
  Thanks a lot!
        -Jon Blossom


From ralph@aplcen.apl.jhu.edu Sun Oct 27 11:58:16 1991
Received: from aplcen.apl.jhu.edu by karazm.math.UH.EDU with SMTP id AA03149
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 27 Oct 1991 16:02:30 -0600
Received: by aplcen.apl.jhu.edu (5.57/Ultrix2.4-XDccg)
	id AA08507; Sun, 27 Oct 91 16:58:16 -0500
Date: Sun, 27 Oct 91 16:58:16 -0500
From: ralph@aplcen.apl.jhu.edu (Ralph Roland)
Message-Id: <9110272158.AA08507@aplcen.apl.jhu.edu>
To: glove-list@karazm.math.uh.edu
Subject: connection suggestion, and other questions


mab@druwy.att.com writes :

>My actual interface hack on the glove side is just a bunch of wires
>that I plug directly into the holes in the female glove connector.
>I used non-stranded wires of the correct guage (I dunno which guage I
>use) and they just insert into the nintendo connector and fit snugly.
>I color-coded them so I know how to re-insert them if I ever remove them.
>So I as able to do the interface without destroying the glove connector
>and without finding an extender cable.

If you can't find an extender cable, a more permanent solution would
be to open the interface box (the one with the telephone number on it)
and solder a new cable directly to the PCB.  All five wires from the
seven pin connector attach directly to the nine pin connector, and 
right next to the 9Pin connector is an unused hole-pattern for another
9Pin wired in parallel.  It seems almost like it was made for this.

BTW, does anybody have details on how the sonics in the glove work
(i.e. Schematics, Theory of Operation, etc)?  Has anybody considered
seperating the receiver(?) boxes by more than the 1.5' to see if a 
larger 'field of view','range of motion',etc can be achieved (without
replacing the glove controller itself)?  Has anyone considered any
mods that could be done to the glove to allow multiple gloves to be 
used in the same room?  So many questions so little time...

Ralph Roland
/RER/


From dstamp@watserv1.uwaterloo.ca Sun Oct 27 12:16:18 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA03241
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 27 Oct 1991 16:20:32 -0600
Received: by watserv1.uwaterloo.ca
	id <AA05992>; Sun, 27 Oct 91 17:16:18 -0500
Date: Sun, 27 Oct 91 17:16:18 -0500
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110272216.AA05992@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu, ralph@aplcen.apl.jhu.edu
Subject: Re:  connection suggestion, and other questions

> From glove-list-request@karazm.math.UH.EDU Sun Oct 27 17:02:19 1991
> From: ralph@aplcen.apl.jhu.edu (Ralph Roland)
> To: glove-list@karazm.math.uh.edu
> Subject: connection suggestion, and other questions
> 
> 
> mab@druwy.att.com writes :
> 
> >My actual interface hack on the glove side is just a bunch of wires
> >that I plug directly into the holes in the female glove connector.
> >I used non-stranded wires of the correct guage (I dunno which guage I
> >use) and they just insert into the nintendo connector and fit snugly.
> >I color-coded them so I know how to re-insert them if I ever remove them.
> >So I as able to do the interface without destroying the glove connector
> >and without finding an extender cable.
> 
> If you can't find an extender cable, a more permanent solution would
> be to open the interface box (the one with the telephone number on it)
> and solder a new cable directly to the PCB.  All five wires from the
> seven pin connector attach directly to the nine pin connector, and 
> right next to the 9Pin connector is an unused hole-pattern for another
> 9Pin wired in parallel.  It seems almost like it was made for this.
> 
> BTW, does anybody have details on how the sonics in the glove work
> (i.e. Schematics, Theory of Operation, etc)?  Has anybody considered
> seperating the receiver(?) boxes by more than the 1.5' to see if a 
> larger 'field of view','range of motion',etc can be achieved (without
> replacing the glove controller itself)?  Has anyone considered any
> mods that could be done to the glove to allow multiple gloves to be 
> used in the same room?  So many questions so little time...
> 
> Ralph Roland
> /RER/
> 
> 
Yep... Look in the glovelist archives, if you can FTP karazm.math.uh.edu.  
They're in he PUB directory.   I think the June archive has wiring guides
and even a (low resolution hardware circuit for measuring distances.

If you spread the receiver boxes apart, you'll get less resolution but a 
larger range.  If you're putting the receivers on the floor and hanging
your arm down over them, Isuggect moving them closer together, as this allows you to bring the glove closer to the receivers, as they have trouble seeing
the glove if it's more than 30 degrees off their face directions (or, 
tilt the receivers toward the center...)

As for multiple gloves, you can choose one of: Slowing down the data rate
of each glove (just add a couple of transistors to alternate use of the 
glove's transmitters) or find some good 25 or 100 KHz ultrasonic
units.  I haven't been able to find any, and i'd LOVE to have them
for a head-angle sensor.

- Dave Stampe

From exv2447@ultb.isc.rit.edu Sun Oct 27 17:31:54 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA04226
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Sun, 27 Oct 1991 22:26:22 -0600
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA01092; Sun, 27 Oct 91 22:31:54 -0500
Date: Sun, 27 Oct 91 22:31:54 -0500
From: exv2447@ultb.isc.rit.edu (E.X. Vanhensbergen )
Message-Id: <9110280331.AA01092@ultb.isc.rit.edu>
To: glove-list@karazm.math.uh.edu
Subject: A Few Questions
Cc: emr4510@ultb.isc.rit.edu

My friends and I are working on the power glove to try to connect it to
the PC based on the byte magazine.  However, we've just recently begun
monitoring this confrence and virtual worlds and found out about hi-res
mode (which I assume is an analog interface bypassing the box).  I have
looked over the earlier messages of the last message archive and it seemed
no-one had cracked the encryption of the data.  So I pose the following
questions:
1) Is hi-res mode an analog mode of the glove?
2) Does someone have plans & source for hires on the PC?
3) Does anyone have any detailed PowerGlove schematics (how it
   actually works)?
4) I read something about external 5V power supplies not working
   and if this is true what is suggested to use for a power suppy
   for a laptop with only a serial, parrellel, modem, and VGA port and
   no other easy access to other sources internal (drive power, etc.)?
 
             Thanks in advance for your help,
                     Eric Van Hensbergen
                       R.I.T.

From ecl6gum%sun.leeds.ac.uk@VTVM2.CC.VT.EDU Mon Oct 28 13:03:24 1991
Received: from vtvm2.cc.vt.edu by karazm.math.UH.EDU with SMTP id AA05774
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 28 Oct 1991 07:32:10 -0600
Received: from UKACRL.BITNET by VTVM2.CC.VT.EDU (IBM VM SMTP V2R1)
   with BSMTP id 7559; Mon, 28 Oct 91 08:26:50 EST
Received: from RL.IB by UKACRL.BITNET (Mailer R2.07) with BSMTP id 9278; Mon,
 28 Oct 91 13:27:39 GMT
Received: 
           from RL.IB by UK.AC.RL.IB (Mailer R2.07) with BSMTP id 0369; Mon, 28
            Oct 91 13:27:38 GMT
Via:        UK.AC.LEEDS.MAILER; 28 OCT 91 13:23:12 GMT
Received: 
           from sunserv1_ie0 by mailer.leeds.ac.uk; Mon, 28 Oct 91 13:05:46 gmt
Received:   from sun031.sun.leeds.ac.uk by sun.leeds.ac.uk; Mon, 28 Oct 91
            13:03:08 GM
From: ecl6gum@sun.leeds.ac.uk
Date:       Mon, 28 Oct 91 13:03:24 GMT
Message-Id: <4227.9110281303@sun031.sun.leeds.ac.uk>
To: glove-list@karazm.math.uh.edu
Subject:    PowerGlove availablity in the UK

After a number of replies to my previous query about linking the PowerGlove to a
 SG PI machine, most wanted to know where to get the 'Glove from in the UK. The
 details are listed below:

	item   : PowerGlove
	price  : 49.95 english pounds (inc p+p)
	Company: Medlantic Hi-Tec (UK) Ltd.,
	         Dept GX,
		 Church Street,
		 Market Bosworth,
		 Warwickshire,
		 CV130LG,
		 UK.

	phone  : (+UK) 0455-291865 (general enquiries)
		 (+UK) 0455-292405 (credit card orders)

I rang them this morning just to make sure, and they are still selling the
 'Glove (their sales will no doubt greatly shoot up now !!). Delivery time is
 about two days with credit card orders.

Can someone still *please* tell me how wire this 'Glove up to a SG PI machine?

Gurm

From DAVID@asgard.clare.tased.edu.au Mon Oct 28 09:04:29 1991
Received: from diemen.utas.edu.au by karazm.math.UH.EDU with SMTP id AA05954
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.EDU>); Mon, 28 Oct 1991 09:04:29 -0600
Received: from ecc.tased.edu.au by diemen.utas.edu.au with SMTP id AA29851
  (5.65b/IDA-1.4.3 for glove-list@karazm.math.uh.EDU); Tue, 29 Oct 91 02:00:09 +1100
Received: from slick.clare.tased.edu.au by ecc.tased.edu.au (PMDF #12099) id
 <01GCAUWJ11XS9GVCSW@ecc.tased.edu.au>; Tue, 29 Oct 1991 01:59 +1000
Received: from charon1.clare.tased.edu.au by slick.clare.tased.edu.au
 (4.1/SMI-4.1) id AA03183; Tue, 29 Oct 91 03:04:23 EST
Received: From ASGARD/WORKQUEUE by charon1.clare.tased.edu.au via Charon 3.4
 with IPX id 100.911029015916.448; 29 Oct 91 02:00:16 -0500
Date: 29 Oct 91 01:58:43
From: david <DAVID@asgard.clare.tased.edu.au>
Subject: ping - ignore
To: glove-list@karazm.math.uh.EDU
Message-Id: <MAILQUEUE-99.911029015843.432@asgard.clare.tased.edu.au>
X-Envelope-To: glove-list@karazm.math.uh.EDU
X-Mailer: Pegasus Mail v2.1b.

Thankyou

___________________________________________________________________________
David Ford                                        Voice :   +61 02 49 6887
Claremont College                                 Fax   :   +61 02 49 1984
Link Rd                             email : david@slick.clare.tased.edu.au
Claremont   TAS 7011
AUSTRALIA            The Internet : "Wherever you go...  There you are..."
                                                           Buckaroo Banzai

From wb1j+@andrew.cmu.edu Mon Oct 28 05:37:54 1991
Received: from ANDREW.CMU.EDU by karazm.math.UH.EDU with SMTP id AA06036
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 28 Oct 1991 09:43:25 -0600
Received: by andrew.cmu.edu (5.54/3.15) id <AA06748> for glove-list@karazm.math.uh.edu; Mon, 28 Oct 91 10:38:58 EST
Received: via switchmail; Mon, 28 Oct 1991 10:38:57 -0500 (EST)
Received: from pcs12.andrew.cmu.edu via qmail
          ID </afs/andrew.cmu.edu/service/mailqs/q000/QF.wd32vVa00iUyA0bFBl>;
          Mon, 28 Oct 1991 10:38:10 -0500 (EST)
Received: from pcs12.andrew.cmu.edu via qmail
          ID </afs/andrew.cmu.edu/usr21/wb1j/.Outgoing/QF.sd32vOS00iUyQ1ql8R>;
          Mon, 28 Oct 1991 10:38:04 -0500 (EST)
Received: from mms.0.1.871.EzMail.NeXT.2.0beta.2.CUILIB.3.45.SNAP.NOT.LINKED.pcs12.andrew.cmu.edu.pmax.ul4
          via MS.5.6.pcs12.andrew.cmu.edu.pmax_ul4;
          Mon, 28 Oct 1991 10:37:54 -0500 (EST)
Message-Id: <od32vGy00iUy01qkxO@andrew.cmu.edu>
Date: Mon, 28 Oct 1991 10:37:54 -0500 (EST)
From: "William M. Bumgarner" <wb1j+@andrew.cmu.edu>
To: glove-list@karazm.math.uh.edu
Subject: Low Priced Gloves
Cc: 
In-Reply-To: <4227.9110281303@sun031.sun.leeds.ac.uk>
References: <4227.9110281303@sun031.sun.leeds.ac.uk>


For those living in CA (specifically, near the valley), Fry's
Electronics has PowerGloves for $20.  They don't do mail order, but they
do supply everything else you would need to build an interface.

b.bum


b.bumgarner            | Disclaimer:  All opinions expressed are my own.
wb1j+@andrew.cmu.edu   | I officially don't represent anyone unless I
NeXT Campus Consultant | explicity say I am doing so. So there. <Thpppt!>
"I ride tandem with the random/Things don't run the way I planned them.."

From ecl6gum%sun.leeds.ac.uk@VTVM2.CC.VT.EDU Mon Oct 28 16:17:55 1991
Received: from vtvm2.cc.vt.edu by karazm.math.UH.EDU with SMTP id AA06254
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 28 Oct 1991 10:23:26 -0600
Received: from UKACRL.BITNET by VTVM2.CC.VT.EDU (IBM VM SMTP V2R1)
   with BSMTP id 7843; Mon, 28 Oct 91 11:18:06 EST
Received: from RL.IB by UKACRL.BITNET (Mailer R2.07) with BSMTP id 4176; Mon,
 28 Oct 91 16:18:49 GMT
Received: 
           from RL.IB by UK.AC.RL.IB (Mailer R2.07) with BSMTP id 8814; Mon, 28
            Oct 91 16:18:48 GMT
Via:        UK.AC.LEEDS.MAILER; 28 OCT 91 16:18:31 GMT
Received: 
           from sunserv1_ie0 by mailer.leeds.ac.uk; Mon, 28 Oct 91 16:20:15 gmt
Received:   from sun031.sun.leeds.ac.uk by sun.leeds.ac.uk; Mon, 28 Oct 91
            16:17:38 GM
From: ecl6gum@sun.leeds.ac.uk
Date:       Mon, 28 Oct 91 16:17:55 GMT
Message-Id: <4532.9110281617@sun031.sun.leeds.ac.uk>
To: glove-list@karazm.math.uh.edu
Subject:    UK PowerGlove users

It seems that my query of interfacing the PowerGlove onto an SG PI has been
 answered by reading the archives of the list.

Has anyone in the UK managed to get hold of the AGE box? I don't particularily
 relish the thought of having to build a serial device (my background isn't in
 h/w), and would much rather pay Xpounds, fire the glove up and get writing some
 software.

Does anyone know of a UK or European supplier of such a device?


Gurm.				e-mail: ecl6gum@uk.ac.leeds.sun
University of Leeds.

From timd@twaddle.dell.com Mon Oct 28 06:42:29 1991
Received: from dell1.dell.com by karazm.math.UH.EDU with SMTP id AA07703
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 28 Oct 1991 13:42:47 -0600
Received: from twaddle.dell.com. by dell1.dell.com (4.1/2.1-DELL-G)
	   id AA13837; Mon, 28 Oct 91 13:11:27 CST
Received: by twaddle.dell.com. (4.1/SMI-4.1)
	id AA03324; Mon, 28 Oct 91 12:42:29 CST
Date: Mon, 28 Oct 91 12:42:29 CST
From: timd@twaddle.dell.com (Tim Deagan)
Message-Id: <9110281842.AA03324@twaddle.dell.com.>
To: hucaby@mri.uky.edu (David Hucaby)
Cc: glove-list@karazm.math.uh.edu
Subject: Re: 8051s

A lovely variety of 8051 development tools (most for DOS)
are available on the Circuit Cellar BBS 
24 hours
300/1200/2400 bps
8N1
(203)871-1988
This is a great BBS and an even better magazine for homebrew
types.  they also sell a variety of premade 8051 boards &
plans for ICE's and emulators and such.

--Tim
timd@twaddle.dell.com


From newton@neworder.ils.nwu.edu Mon Oct 28 07:55:36 1991
Received: from casbah.acns.nwu.edu by karazm.math.UH.EDU with SMTP id AA07862
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 28 Oct 1991 14:09:29 -0600
Received: from neworder.ils.nwu.edu by casbah.acns.nwu.edu (4.1/SMI-ACNS-1.03)
	id AA13873; Mon, 28 Oct 91 14:05:12 CST
Return-Path: <newton@neworder.ils.nwu.edu>
Received: by neworder.ils.nwu.edu (4.0/SMI-4.0)
	id AA05050; Mon, 28 Oct 91 13:55:37 CST
From: newton@neworder.ils.nwu.edu (Dave Newton)
Message-Id: <9110281955.AA05050@neworder.ils.nwu.edu>
Subject: Re: 8051s
To: glove-list@karazm.math.uh.edu
Date: Mon, 28 Oct 91 13:55:36 CST
In-Reply-To: <9110281842.AA03324@twaddle.dell.com.>; from "Tim Deagan" at Oct 28, 91 12:42 pm
X-Mailer: ELM [version 2.3 PL11]

SHould also probably add the Signetics BBS number to that list, as they make
a swell line of 8051-type parts.

1-800-451-6644, 1200/2400-N-8-1

It's an 800 number, so go easy on it, they're nice to have it set up like that.

From timd@twaddle.dell.com Mon Oct 28 10:27:40 1991
Received: from dell1.dell.com by karazm.math.UH.EDU with SMTP id AA09057
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 28 Oct 1991 17:28:20 -0600
Received: from twaddle.dell.com. by dell1.dell.com (4.1/2.1-DELL-G)
	   id AA14120; Mon, 28 Oct 91 16:57:04 CST
Received: by twaddle.dell.com. (4.1/SMI-4.1)
	id AA03673; Mon, 28 Oct 91 16:27:40 CST
Date: Mon, 28 Oct 91 16:27:40 CST
From: timd@twaddle.dell.com (Tim Deagan)
Message-Id: <9110282227.AA03673@twaddle.dell.com.>
To: glove-list@karazm.math.uh.edu
Subject: COP888 sort of Netlist


Here's my handmade netlist for the COP888 as used
in the Nintendo PowerGlove.  It's very primitive
but hopefully of use to someone.
 
COP888 - (port,type,alt. fun.1,alt. fun.2, MUX mode)

pin #	cop888			PowerGlove
-----------------------------------------------
1	C2,I/O, , ,		INPUT C on 4021
2	C3,I/O, , ,		INPUT D on 4021
3	G4,I/O,SO, ,  		?
4	G5,I/O,SK, ,		DATA LATCH
5	G6,I,SI, ,ME		DATA CLOCK
6	G7,I/CKO,HALT RESTART, ,	XTAL
7	CKI, , , ,		XTAL
8	Vcc			+5VDC
9	I0,I, ,	,		R1 pullup,SW8(Bdn),SW0,RGHT
10	I1,I, ,	,		R2 pullup,SW9(Boff),SW1(Aup),LEFT
11      I2,I, ,	,		R3 pullup,SW2(Aon),ENTER,DOWN
12	I3,I, ,	,		R4 pullup,SW3(Bup),PROG,UP
13	I4,I, ,	,		R5 pullup,SW4(Bon),START
14	I5,I, ,	,		R6 pullup,SW5(SloMo),SELECT
15	I6,I, ,	,		R7 pullup,SW6(Adn),B
16	I7,I, ,	,		R8 pullup,SW7(Aoff),A
17	L0,I/O,MIWU, ,		R26 gnd,THUMB
18	L1,I/O,MIWU, ,		R27 gnd,INDEX
19	L2,I/O,MIWU, ,		R28 gnd,MIDDLE
20	L3,I/O,MIWU, ,		R29 gnd,RING
21	C4,I/O, , ,		?
22	C5,I/O, , ,		SW0-7 & CENTER
23	C6,I/O, , ,		ENTER
24	C7,I/O, , ,		GND
25	L4,I/O,MIWU,T2A,	CLK on 4021
26	L5,I/O,MIWU,T2B,	RC net to LBlu,->|- red finger wires 
27	L6,I/O,MIWU, ,		?
28	L7,I/O,MIWU, ,		GRY from top of glove (XMTR2 ?)
29	D0,O, , ,I/O BIT 0	YEL from top of glove (XMTR1)
30	D1,O, , ,I/O BIT 1	GRN from top of glove (XMTR2)
31	D2,O, , ,I/O BIT 2	BLU from top of glove (BEEPER)
32	D3,O, , ,I/O BIT 3	PUR from top of glove (XMTR1 ?)
33	D4,O, , ,I/O BIT 4	INPUT E on 4021
34	D5,O, , ,I/O BIT 5	INPUT F on 4021
35	D6,O, , ,I/O BIT 6	INPUT G on 4021
36	D7,O, , ,I/O BIT 7	INPUT H on 4021
37	GND			GND
38	RESET# 			?
39	G0,I/O,INT, ,ALE	?
40	G1,WDOUT, , ,		?
41	G2,I/O,T1B, ,WR#	BRN to junct box (pin1 LM324 near rcvrs)
42	G3,I/O,T1A, ,RD#	ORG to junct box (RCs to LM324 nr rcvrs)
43	C0,I/O, , ,		INPUT A on 4021
44	C1,I/O, , ,		INPUT B on 4021

Disclaimer - NONE of this has ANYTHING to do with where I work!!
             My opinions and posts are MINE and MINE alone.
             My employer does NOT assume responsibility for
             what I write or say (unless I start making money
             off it, in which case they'll probably get interested
             quick :-)
--Tim
Tim Deagan			US Snail- 2506 Lehigh Dr.
timd@twaddle.dell.com			  Austin, TX. 78723
 ~.

From timd@twaddle.dell.com Mon Oct 28 11:03:41 1991
Received: from dell1.dell.com by karazm.math.UH.EDU with SMTP id AA09304
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Mon, 28 Oct 1991 18:03:54 -0600
Received: from twaddle.dell.com. by dell1.dell.com (4.1/2.1-DELL-G)
	   id AA14183; Mon, 28 Oct 91 17:32:38 CST
Received: by twaddle.dell.com. (4.1/SMI-4.1)
	id AA03751; Mon, 28 Oct 91 17:03:41 CST
Date: Mon, 28 Oct 91 17:03:41 CST
From: timd@twaddle.dell.com (Tim Deagan)
Message-Id: <9110282303.AA03751@twaddle.dell.com.>
To: glove-list@karazm.math.uh.edu
Subject: More on COP888 (w/ important note)

Here's more on the COP888

NOTE!!!- The pinouts listed in my previous message
are for the COP888CLMH.  There is a VERY good possiblity
that the powerglove is using a different varient.  If someone
can FOR SURE identify the varient used in the glove I'll find
the GARONTEED pin outs.  SORRY!! :-(

8 bit microP
CMOS
IDLE mode, IDLE timer to maintain real-time
HALT mode w/ low standby power
Memory mapped architecture
32K of Program mem and 32K of Data mem
1 ms instruction cycles
MICROWIRE/PLUS (tm) 3-wire serial, allows programming via serial lines
		Pglove uses this!! DATA CLOCK and DATA LATCH are wired
		to these directly.
3 or 4 timers (16 bit), microP independent PWM
MIWU - Multi-Input Wake Up from halt and IDLE w/ interrupts
Watchdog feature
Clock monitor
2 NMIs
14 maskable interrupts
XTAL or R/C osc single pin
5 8-bit I/O ports one w/high sink drive (D)
Lots of groovy registers
4Kbyte ROM
128-192 Kb RAM (depends on actual model)

more available on request

DISCLAIMER - My employer assumes NO RESPONSIBILITY for
             ANYTHING I write.  The info is from me as culled
             from the world around us.

--Tim
timd@twaddle.dell.com

From ecl6gum%sun.leeds.ac.uk@VTVM2.CC.VT.EDU Tue Oct 29 09:49:55 1991
Received: from vtvm2.cc.vt.edu by karazm.math.UH.EDU with SMTP id AA12709
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 29 Oct 1991 03:58:54 -0600
Received: from UKACRL.BITNET by VTVM2.CC.VT.EDU (IBM VM SMTP V2R1)
   with BSMTP id 9102; Tue, 29 Oct 91 04:53:33 EST
Received: from RL.IB by UKACRL.BITNET (Mailer R2.07) with BSMTP id 7781; Tue,
 29 Oct 91 09:54:30 GMT
Received: 
           from RL.IB by UK.AC.RL.IB (Mailer R2.07) with BSMTP id 2195; Tue, 29
            Oct 91 09:54:07 GMT
Via:        UK.AC.LEEDS.MAILER; 29 OCT 91  9:50:36 GMT
Received: 
           from sunserv1_ie0 by mailer.leeds.ac.uk; Tue, 29 Oct 91 09:52:21 gmt
Received:   from sun031.sun.leeds.ac.uk by sun.leeds.ac.uk; Tue, 29 Oct 91
            09:49:40 GM
From: ecl6gum@sun.leeds.ac.uk
Date:       Tue, 29 Oct 91 09:49:55 GMT
Message-Id: <410.9110290949@sun031.sun.leeds.ac.uk>
To: glove-list@karazm.math.uh.edu
Subject:    Are these micro-controller devices available in the UK?

reply to max@alias.com:

Max - thanks for the reply. I came to this conclusion after going through the
 archives of the power-glove list. From what I can gather, there aren't any
 outlets for such devices in the UK - we're only just getting shipments of the
 PowerGlove !!. If anyone knows of a dealer willing to ship such devices to the
 UK can they mail the address to the list? I'm sure there are many people in the
 UK waiting for them!

Gurm

From petersc@stallion.oz.au Tue Oct 29 19:50:36 1991
Received: from bunyip.cc.uq.oz.au by karazm.math.UH.EDU with SMTP id AA03120
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 29 Oct 1991 19:50:36 -0600
Received: from cc.uq.oz.au by bunyip.cc.uq.oz.au 
          id <17799-0@bunyip.cc.uq.oz.au>; Wed, 30 Oct 1991 12:44:03 +0000
Received: from cluster.stallion.oz.au by stallion.stallion.oz.au id aa12106;
          Wed, 30 Oct 91 12:19:54 AEST
From: Peter Calvert <petersc@stallion.oz.au>
X-Mailer: SCO System V Mail (version 3.2)
To: glove-list@karazm.math.uh.edu
Subject: subscribe
Date: Wed, 30 Oct 91 11:41:05 AEST
Message-Id: <9110301141.aa17347@cluster.stallion.oz.au>
Sender: petersc@stallion.oz.au

subscribe
please subscribe me, thankyou

From aaronp@narrator.pen.tek.com Tue Oct 29 09:56:16 1991
Received: from relay.tek.com by karazm.math.UH.EDU with SMTP id AA03279
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Tue, 29 Oct 1991 20:03:37 -0600
Received: by relay.tek.com id <AA15564@relay.tek.com>; Tue, 29 Oct 91 17:56:20 -0800
Received: from tekig7.map.tek.com by tektronix.TEK.COM (4.1/7.1)
	id AA22972; Tue, 29 Oct 91 17:56:18 PST
Received: from narrator.PEN.TEK.COM (narrator.TEK) by tekig7.map.tek.com (4.1/7.1)
	id AA27171; Tue, 29 Oct 91 17:56:17 PST
Received: from localhost.TEK by narrator.PEN.TEK.COM (4.1/7.1)
	id AA12468; Tue, 29 Oct 91 17:56:17 PST
Message-Id: <9110300156.AA12468@narrator.PEN.TEK.COM>
To: glove-list@karazm.math.uh.edu
Subject: Results of STRAW-POLL
Date: Tue, 29 Oct 91 17:56:16 -0800
From: aaronp@narrator.pen.tek.com

The following represents the results of the straw-poll which I
conducted last week.  The purpose of the straw-poll was to 
determine the 'best' name to use as a newsgroup to move the
discussions which are now taking place on the glove-list.

A total of 71 votes were received.  If anyone voted for two names
I did the following:  if one of the names was an 'Other'
or the two names seemed to have equal weight I gave them both a
half vote, whereas if one was clearly marked a first choice I
gave that a full vote and ignored the other name.  Sorry if this
bothers anyone, but I did clearly state 'choose one' and I had
to do something.

The results are as follows:

35.5	sci.virtual-worlds.tech
17.5	sci.virtual-worlds.homebrew
10.0	comp.periphs.virtual
 3.5	comp.periphs.glove
 2.0	sci.virtual-worlds.low-end
 1.0	comp.invisible.touch
 0.5	sci.virtual-worlds.glove
 0.5	comp.periphs.vr
 0.5	comp.virtual-worlds.interface
 0.0	alt.glove		

27.0	Moderated
25.0	Un-moderated
19.0	Don't care about moderation

Several people suggested that people simply begin posting to
sci.virtual-worlds and not create a new newsgroup...

Several others suggested not moving the mailing-list because
they don't have access to the Usenet newsgroups...

Conclusion:

	sci.virtual-worlds.tech is the obvious leader,

	whether or not to moderate it is still unclear.

All comments and suggestions are welcome; I will probably post
a RFD (Request for Discussion) in about a week.

        +--------------\
        | Aaron Pulkka  >       aaronp@narrator.PEN.TEK.COM
        +--------------/

From DAVID@asgard.clare.tased.edu.au Tue Oct 29 22:25:36 1991
Received: from diemen.utas.edu.au by karazm.math.UH.EDU with SMTP id AA04221
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.EDU>); Tue, 29 Oct 1991 22:25:36 -0600
Received: from ecc.tased.edu.au by diemen.utas.edu.au with SMTP id AA03473
  (5.65b/IDA-1.4.3 for glove-list@karazm.math.uh.EDU); Wed, 30 Oct 91 15:21:06 +1100
Received: from slick.clare.tased.edu.au by ecc.tased.edu.au (PMDF #12099) id
 <01GCD15ZJEG09GVG4C@ecc.tased.edu.au>; Wed, 30 Oct 1991 15:21 +1000
Received: from charon1.clare.tased.edu.au by slick.clare.tased.edu.au
 (4.1/SMI-4.1) id AA03481; Wed, 30 Oct 91 16:26:46 EST
Received: From ASGARD/WORKQUEUE by charon1.clare.tased.edu.au via Charon 3.4
 with IPX id 100.911030152158.336; 30 Oct 91 15:22:11 +1100
Date: 30 Oct 91 14:12:45
From: david <DAVID@asgard.clare.tased.edu.au>
Subject: IBM hires code
To: glove-list@karazm.math.uh.EDU
Message-Id: <MAILQUEUE-99.911030141245.480@asgard.clare.tased.edu.au>
X-Envelope-To: glove-list@karazm.math.uh.EDU
X-Mailer: Pegasus Mail v2.1b.


Has anyone done a machine code version of the IBM hires code (including
special timing tricks ?)

If they have, I'd appreciate a copy of the code - I still (even with
better timing tricks) have not had the HIRES code going on an AT
in TC.

Thankyou

___________________________________________________________________________
David Ford                                        Voice :   +61 02 49 6887
Claremont College                                 Fax   :   +61 02 49 1984
Link Rd                             email : david@slick.clare.tased.edu.au
Claremont   TAS 7011
AUSTRALIA            The Internet : "Wherever you go...  There you are..."
                                                           Buckaroo Banzai

From broehl@sunee.waterloo.edu Wed Oct 30 02:11:44 1991
Received: from sunee.waterloo.edu by karazm.math.UH.EDU with SMTP id AA05749
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 30 Oct 1991 06:16:02 -0600
Received: by sunee.waterloo.edu
	id <AA10597>; Wed, 30 Oct 91 07:11:45 -0500
From: Bernie Roehl <broehl@sunee.waterloo.edu>
Message-Id: <9110301211.AA10597@sunee.waterloo.edu>
Subject: Results of STRAW-POLL (fwd)
To: glove-list@karazm.math.uh.edu
Date: Wed, 30 Oct 91 7:11:44 EST
X-Mailer: ELM [version 2.3 PL11]

> Several people suggested that people simply begin posting to
> sci.virtual-worlds and not create a new newsgroup...
> 
> Several others suggested not moving the mailing-list because
> they don't have access to the Usenet newsgroups...

I would suggest that any newsgroup we set up be bi-directionally gatewayed
to the existing glove-list, so that people in the mailing-list-only
situation can still participate fully in the discussion.  (No, I'm not
in that situation myself... I just would hate to lose any of the contributors
to the list).

Software exists to do the gatewaying.

> 	whether or not to moderate it is still unclear.

Bear in mind that (a) moderation means tedious work for someone, and
(b) it makes the list sluggish.

-- 
	Bernie Roehl, University of Waterloo Electrical Engineering Dept
	Mail: broehl@sunee.waterloo.edu OR broehl@sunee.UWaterloo.ca
	BangPath: watmath!sunee!broehl
	Voice:  (519) 885-1211 x 2607 [work]

From jet Wed Oct 30 04:49:22 1991
Received: by karazm.math.UH.EDU id AA06524
  (5.65c/IDA-1.4.4 for glove-list@karazm.math.uh.edu); Wed, 30 Oct 1991 10:49:22 -0600
From: J Eric Townsend <jet>
Message-Id: <199110301649.AA06524@karazm.math.UH.EDU>
Subject: Re: Results of STRAW-POLL (fwd)
To: broehl@sunee.waterloo.edu (Bernie Roehl)
Date: Wed, 30 Oct 91 10:49:22 CST
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: <9110301211.AA10597@sunee.waterloo.edu>; from "Bernie Roehl" at Oct 30, 91 7:11 am
X-Mailer: ELM [version 2.3 PL11]

>Software exists to do the gatewaying.

Oh really?  Where can I get a copy?

>> 	whether or not to moderate it is still unclear.
>Bear in mind that (a) moderation means tedious work for someone, and
>(b) it makes the list sluggish.

However, it filters out the non-glove stuff that has caused at least
6-8 people to drop off the list.


If somebody could point me to moderation software, I'd be very happy to
moderate this list and/or a newsgroup.

However, I still think that comp.periphs.glove is the logical place for
the group.  It's a peripheral, and there's a peripheral heirarchy. Let
the discussion of the ethics of teledildonics and presidential campaigns
stay in sci.v-w.

If not that, how about:
comp.virtual.glove
comp.virtual.goggles
comp.virtual.mouse (for flying meeces)
comp.virtual.rendering
 etc etc etc

-- 
J. Eric Townsend - jet@uh.edu - Systems Wrangler, UH Dept of Mathematics
vox: (713) 749-2126  '91 CB750, DoD# 0378, TMRA# 27834  AMA# I-forget
PowerGlove mailing list: glove-list-request@karazm.math.uh.edu
"allow users to create more impactful documents" -- from an Apple press release

From jdb9608@cs.rit.edu Wed Oct 30 07:32:26 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA06943
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 30 Oct 1991 11:36:28 -0600
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA26196; Wed, 30 Oct 91 12:32:03 -0500
Received: from doha.CS (doha.ARPA) by junior.rit.edu (4.1/5.17)
	id AA24743; Wed, 30 Oct 91 12:20:02 EST
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110301720.AA24743@junior.rit.edu>
Subject: Re: Results of STRAW-POLL
To: broehl@sunee.waterloo.edu (Bernie Roehl)
Date: Wed, 30 Oct 91 12:32:26 EST
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: <9110301211.AA10597@sunee.waterloo.edu>; from "Bernie Roehl" at Oct 30, 91 7:11 am
X-Mailer: ELM [version 2.3 PL8]

> I would suggest that any newsgroup we set up be bi-directionally gatewayed
> to the existing glove-list, so that people in the mailing-list-only
> situation can still participate fully in the discussion.  (No, I'm not
> in that situation myself... I just would hate to lose any of the contributors
> to the list).

True.  However, the newsgroup we make should be for more than
just the glove.  I'm really interested in implementing graphic techniques
(altho not VGA), eyephones, MUDs, VR operating systems, etc...
Eric has mentioned that he doesn't really want all that stuff
on the glove-list, so maybe someone should make another
mailing list for the other-than-glove stuff?

> Software exists to do the gatewaying.

Does anyone know where this software is?

> > 	whether or not to moderate it is still unclear.
> 
> Bear in mind that (a) moderation means tedious work for someone, and
> (b) it makes the list sluggish.

I agree.  Plus, I don't like to lose the feeling of autonomy.

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From jdb9608@cs.rit.edu Wed Oct 30 08:02:25 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA07370
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 30 Oct 1991 12:06:20 -0600
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA28090; Wed, 30 Oct 91 13:02:03 -0500
Received: from doha.CS (doha.ARPA) by junior.rit.edu (4.1/5.17)
	id AA24868; Wed, 30 Oct 91 12:50:02 EST
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9110301750.AA24868@junior.rit.edu>
Subject: scope of newsgroup
To: glove-list@karazm.math.uh.edu
Date: Wed, 30 Oct 91 13:02:25 EST
X-Mailer: ELM [version 2.3 PL8]

Should the various VR discussions stay together in one newsgroup
or mailing list?  Or, should they be separated?

Separating them has the advantage of letting the readers
easily avoid subjects that aren't of interest.  Less readers
quit because there's too much stuff they don't care about.

But, keeping them together has the advantage of keeping
the critical mass of ideas flowing when some topics aren't hot.  
And, the cross-fertilization of ideas, and the consideration
of ideas from many viewpoints, makes them stronger.

I'd prefer to keep it all together unless the traffic continues
or grows from what it is now.  Then, we could split into specifics.

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."

From madsax@u.washington.edu Wed Oct 30 02:05:36 1991
Received: from milton.u.washington.edu by karazm.math.UH.EDU with SMTP id AA07388
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 30 Oct 1991 12:09:51 -0600
Received: by milton.u.washington.edu
	(5.65/UW-NDC Revision: 2.1 ) id AA28398; Wed, 30 Oct 91 10:05:36 -0800
Date: Wed, 30 Oct 91 10:05:36 -0800
From: Mark A. DeLoura <madsax@u.washington.edu>
Message-Id: <9110301805.AA28398@milton.u.washington.edu>
Sender: madsax@milton.u.washington.edu
To: glove-list@karazm.math.uh.edu
Subject:  Re: Results of STRAW-POLL (fwd)

J Eric Townsend <JET@UH.EDU> said:
> 
> If somebody could point me to moderation software, I'd be very happy to
> moderate this list and/or a newsgroup.
> 
	I've got moderation software.  Anyone wants it, let me know--
	it will do archival, a mailing-list and posting to a newsgroup.
	All you have to do is say "postit <filename>".

	It's juuuuuuust that easy!  :)

	---Mark

===============================================================================
Mark A. DeLoura    madsax@milton.u.washington.edu      University of Washington
               sci.virtual-worlds co-moderator/librarian

From wombat@key.amdahl.com Wed Oct 30 02:10:47 1991
Received: from CHARON.AMDAHL.COM by karazm.math.UH.EDU with SMTP id AA07423
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 30 Oct 1991 12:15:26 -0600
Received: from kilimanjaro.key.amdahl.com by charon.amdahl.com (4.0/SMI-4.1/DNS)
	id AA21816; Wed, 30 Oct 91 10:10:15 PST
Received: by kilimanjaro.key.amdahl.com (4.0/SMI-4.1/DNS)
	id AA19519; Wed, 30 Oct 91 10:10:48 PST
Message-Id: <9110301810.AA19519@kilimanjaro.key.amdahl.com>
To: glove-list@karazm.math.uh.edu
Reply-To: glove-list
Subject: Re: Results of STRAW-POLL 
In-Reply-To: Your message of Wed, 30 Oct 91 12:32:26 EST.
             <9110301720.AA24743@junior.rit.edu> 
Date: Wed, 30 Oct 91 10:10:47 PST
From: Joan Eslinger <wombat@key.amdahl.com>

Since there are some folks interested in just the glove traffic, if we
go with a broader-based newsgroup like "comp.virtual.tech" we could
adopt a convention of putting a keyword in the title so everyone can use
auto-kill / auto-select features in their news readers to see just the
stuff they're interested in;

	Subject: (GLOVE) Amiga hi-res code available

	Subject: (GLASSES) Source for SEGA and X-Specs in Australia

	Subject: (3D-GRAPHICS) (GLOVE) 3-d drawing application using glove

and so on. Could be tough to enforce without a moderator, but it might work.


From jet Wed Oct 30 06:35:44 1991
Received: by karazm.math.UH.EDU id AA07575
  (5.65c/IDA-1.4.4 for glove-list@karazm.math.uh.edu); Wed, 30 Oct 1991 12:35:45 -0600
From: J Eric Townsend <jet>
Message-Id: <199110301835.AA07575@karazm.math.UH.EDU>
Subject: Re: Results of STRAW-POLL
To: jdb9608@cs.rit.edu (John D Beutel)
Date: Wed, 30 Oct 91 12:35:44 CST
Cc: broehl@sunee.waterloo.edu, glove-list@karazm.math.uh.edu
In-Reply-To: <9110301720.AA24743@junior.rit.edu>; from "John D Beutel" at Oct 30, 91 12:32 pm
X-Mailer: ELM [version 2.3 PL11]

you wrote:
>True.  However, the newsgroup we make should be for more than
>just the glove.  I'm really interested in implementing graphic techniques

Then why not have a newsgroup for what you're discussing *and* a
series of technical newsgroups for the devices themselves.  Again,

comp.virtual.homebrew
comp.virtual.talk
comp.virtual.glove
comp.virtual.goggles
 .. etc etc etc ..

>(altho not VGA),

Nyuk

>Eric has mentioned that he doesn't really want all that stuff
>on the glove-list, so maybe someone should make another
>mailing list for the other-than-glove stuff?

Subdividing into specific topics makes things much easier for the
non-engrossed-in-the-subject.  Look at comp.sys.amiga.*.  Total
posting is *up*, and there's a lot of discussion about specific
ideas as opposed to everybody fighting in one newsgroup.  (And
it gets the "This is a stupid idea" people out of the technical
groups, usually.)



-- 
J. Eric Townsend - jet@uh.edu - Systems Wrangler, UH Dept of Mathematics
vox: (713) 749-2126  '91 CB750, DoD# 0378, TMRA# 27834  AMA# I-forget
PowerGlove mailing list: glove-list-request@karazm.math.uh.edu
"allow users to create more impactful documents" -- from an Apple press release

From wombat@key.amdahl.com Wed Oct 30 04:18:39 1991
Received: from CHARON.AMDAHL.COM by karazm.math.UH.EDU with SMTP id AA08447
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 30 Oct 1991 14:23:17 -0600
Received: from kilimanjaro.key.amdahl.com by charon.amdahl.com (4.0/SMI-4.1/DNS)
	id AA24774; Wed, 30 Oct 91 12:18:08 PST
Received: by kilimanjaro.key.amdahl.com (4.0/SMI-4.1/DNS)
	id AA19596; Wed, 30 Oct 91 12:18:40 PST
Message-Id: <9110302018.AA19596@kilimanjaro.key.amdahl.com>
To: glove-list@karazm.math.uh.edu
Subject: amiga hi-res on ab20
Date: Wed, 30 Oct 91 12:18:39 PST
From: Joan Eslinger <wombat@key.amdahl.com>

I was having trouble ftp'ing the hi-res amiga code from
karazm.math.uh.edu, so I requested it via e-mail. For others in the same
boat, I placed a copy on ab20.larc.nasa.gov in the incoming/amiga
directory as "pglovehires.lzh".

From timd@twaddle.dell.com Wed Oct 30 08:16:22 1991
Received: from dell1.dell.com by karazm.math.UH.EDU with SMTP id AA08810
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 30 Oct 1991 15:16:30 -0600
Received: from twaddle.dell.com. by dell1.dell.com (4.1/2.1-DELL-G)
	   id AA16780; Wed, 30 Oct 91 14:45:21 CST
Received: by twaddle.dell.com. (4.1/SMI-4.1)
	id AA07691; Wed, 30 Oct 91 14:16:22 CST
Date: Wed, 30 Oct 91 14:16:22 CST
From: timd@twaddle.dell.com (Tim Deagan)
Message-Id: <9110302016.AA07691@twaddle.dell.com.>
To: glove-list@karazm.math.uh.edu
Subject: Re: Results of STRAW-POLL


The only thing I'm not interested in is high-dollar
gear I'll never get to use.  I'd like to find out about any VR
homebrew activities involving PCs and low-cost (under $200) gear.
(PCs can include Amiga's, Macs, etc.  but I like DOS boxes cuz
their cheap and very functional.  I also like microC's.)

The big expensive stuff is lovely to read about in sci.v-w, but
the revolution will be feuled from below...

Okay, there's $.02 worth.  Basically I'd hate to miss a goodie
about goggles or Nintendo twister boards cause I missed subscribing
but frankly I'm grateful this exists at all and I don't mind a little
responsibility for meeting my own needs. ($.02 more for free!)

done now
--Tim
timd@twaddle.dell.com


From yonder@netcom.netcom.com Wed Oct 30 06:45:50 1991
Received: from netcomsv.netcom.com by karazm.math.UH.EDU with SMTP id AA11203
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 30 Oct 1991 17:44:14 -0600
Received: from netcom.netcom.com by netcomsv.netcom.com (4.1/SMI-4.1)
	id AA28965; Wed, 30 Oct 91 15:38:56 PST
Received: by netcom.netcom.com (4.1/SMI-4.1)
	id AA23182; Wed, 30 Oct 91 14:45:52 PST
From: yonder@netcom.netcom.com (Christopher Russell)
Message-Id: <9110302245.AA23182@netcom.netcom.com>
Subject: 68hc11 EVB vs. EVBU...
To: glove-list@karazm.math.uh.edu (Power Glove mailing list)
Date: Wed, 30 Oct 91 14:45:50 PST
X-Mailer: ELM [version 2.3 PL11]


I want to order myself one of the 6811 evaluation boards.  My problem
is that now there are two to choose from the EVB and the EVBU.  I'm
wondering if all of the tools developed for the EVB (PD assemblers,
compilers, etc.) will work for the EVBU.  Also from what I've gathered
so far the new EVBU has pluses and minuses.  For example, how much
modification would the code that was posted to control the glove need
before it could be used with the new board...  It seems like the new
board has more up-to-date components, but less of them: for example
less external RAM and only one serial port.  Well, any info would be
appreciated...

-- 
Christopher L. Russell (yonderboy)  Phone: (408)378-9078 Campbell,CA
yonder@netcom.COM or clr40@amail.amdahl.com or chrisr@leland.stanford.edu


From rick%hci.heriot-watt.ac.uk@cs.heriot-watt.ac.uk Wed Oct 30 17:03:12 1991
Received: from sun2.nsfnet-relay.ac.uk by karazm.math.UH.EDU with SMTP id AA11700
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 30 Oct 1991 18:33:15 -0600
Received: from cs.heriot-watt.ac.uk by sun2.nsfnet-relay.ac.uk via JANET 
          with NIFTP id <15135-0@sun2.nsfnet-relay.ac.uk>;
          Wed, 30 Oct 1991 17:51:21 +0000
Received: from glenlivet.hci.hw.ac.uk by helios.cs.hw.ac.uk;
          Wed, 30 Oct 91 16:52:50 GMT
Received: from mortlach.hci.hw.ac.uk by glenlivet.hci.hw.ac.uk;
          Wed, 30 Oct 91 16:45:34 GMT
Date: Wed, 30 Oct 91 17:03:12 GMT
Message-Id: <975.9110301703@mortlach.hci.hw.ac.uk>
From: Rick Innis <rick@hci.heriot-watt.ac.uk>
Subject: UK users
To: glove-list@karazm.math.uh.edu
X-Organisation: Big Yellow Bulldozer
X-Mailer: ream v4.15a - more a mail program than a way of life

Out of curiousity, how many of us are there and what are we hoping to
achieve? I'm hoping to use mine in my MSc thesis, probably part of some work
on either visualisation or animation - not fully decided yet, and it depends
on what facilities I can get access to as well. What of the rest of you?

	--Rick.


From taihou@iss.nus.sg Wed Oct 30 19:08:37 1991
Received: from nuscc.nus.sg by karazm.math.UH.EDU with SMTP id AA11775
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 30 Oct 1991 19:08:37 -0600
Received: from bochap.iss.nus.sg by nuscc.nus.sg (5.65/1.34)
	id AA29512; Thu, 31 Oct 91 09:04:16 +0800
Received: from suliman.iss.nus.sg by bochap.iss.nus.sg (4.1/SMI-4.1)
	id AA06596; Thu, 31 Oct 91 09:04:32 SST
Date: Thu, 31 Oct 91 09:04:32 SST
From: taihou@iss.nus.sg (Tng Tai Hou)
Message-Id: <9110310104.AA06596@bochap.iss.nus.sg>
To: glove-list@karazm.math.uh.edu
Subject: PowerGlove and Mac

Hello folks.
I am new to this list. I have just received my Mattel PowerGlove.
Now I intend to connect and use it with my Mac IIfx. Can someone
please guide me?
I have heard about the Age box and the GoldBrick hardware.
I am using ThinkC 5.0 and would like to use the Glove in
hires-mode.
If there are public domain circuits, all the more better for me.

Thanks in advance for your help.

Tai Hou
Singapore (please note this location).

From taihou@iss.nus.sg Wed Oct 30 19:11:11 1991
Received: from nuscc.nus.sg by karazm.math.UH.EDU with SMTP id AA11788
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 30 Oct 1991 19:11:11 -0600
Received: from bochap.iss.nus.sg by nuscc.nus.sg (5.65/1.34)
	id AA00727; Thu, 31 Oct 91 09:06:52 +0800
Received: from suliman.iss.nus.sg by bochap.iss.nus.sg (4.1/SMI-4.1)
	id AA06599; Thu, 31 Oct 91 09:07:08 SST
Date: Thu, 31 Oct 91 09:07:08 SST
From: taihou@iss.nus.sg (Tng Tai Hou)
Message-Id: <9110310107.AA06599@bochap.iss.nus.sg>
To: glove-list@karazm.math.uh.edu
Subject: ftp at karazm

I can't seem to ftp to karazm.
Is there some special tricks I need to know?

From motcsd!roi!lance@apple.com Sun Oct 30 08:29:47 1991
Received: from apple.com by karazm.math.UH.EDU with SMTP id AA12793
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 30 Oct 1991 21:30:16 -0600
Received: by apple.com (5.61/18-Oct-1991-eef)
	id AA17811; Wed, 30 Oct 91 19:13:16 -0800
	for 
Received: by motcsd.csd.mot.com (/\=-/\ Smail3.1.18.1 #18.4)
	id <m0kcQK9-0001HbC@motcsd.csd.mot.com>; Wed, 30 Oct 91 16:31 PST
Received: by roi.ca41.csd.mot.com (smail2.5/CSDmail1.0, Motorola Inc.)
	id AA07942; 30 Oct 91 16:29:48 PST (Wed)
To: glove-list@karazm.math.uh.edu
Subject: Frequently Asked Questions
Message-Id: <9110301629.AA07938@roi.ca41.csd.mot.com>
Date: 30 Oct 91 16:29:47 PST (Wed)
From: Lance Norskog <lance@roi.ca41.csd.mot.com>

Hello-

I'm compiling an FAQ posting.  

I've got most of the pertinent stuff (and wrote some of it).

How do you order the 6811 evaluation stuff, and
where is the free assembler available?

Lance Norskog

From dstamp@watserv1.uwaterloo.ca Wed Oct 30 19:11:25 1991
Received: from watserv1.uwaterloo.ca (watserv1.waterloo.edu) by karazm.math.UH.EDU with SMTP id AA13239
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Wed, 30 Oct 1991 23:15:59 -0600
Received: by watserv1.uwaterloo.ca
	id <AA19267>; Thu, 31 Oct 91 00:11:25 -0500
Date: Thu, 31 Oct 91 00:11:25 -0500
From: Dave Stampe-Psy+Eng <dstamp@watserv1.uwaterloo.ca>
Message-Id: <9110310511.AA19267@watserv1.uwaterloo.ca>
To: glove-list@karazm.math.uh.edu

I've had quite a few requests to look at the fast VGA poly blitter
code.  I'ts not done by any means, but this is what I have so far.
You'll notice that poly timing is done by subtracting a dummy call
time from that of the poly drawing call: this gives a better 
estimate of the poly code speed without the C call, procedure
and test parameter generation time.  Obviously a general poly
blitter with clipping will run a bit slower because of added
interface code, but right now fine timing is critical, as this
part of the blitter is called many times.

Timing as of now (on my Paradise VGA card (pretty slow one) and
a 486/25 is 6400 24x24 triangles or 4800 24x24 trapezoids per
second.  Thus, trapezoids are about 50% faster per pixel than
the triangles.  

THe code is compiled with Borland C++ or Turbo C++ (others may
need rewrites).  Note the inline assembler: this will be moved
to a seperate .asm file in the future, but this style seems to
work well for development.  

Please contact me if you have any questions.  More later.

--------------------- fpoly.c --------------------------

#pragma inline

#include <bios.h>
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <graphics.h>

union REGS regs;


#define PUT 0			/* defines of write modes */
#define AND 1
#define OR  2
#define XOR 3

int gdriver = VGA;
int gmode = VGAHI;

#define VGA 0x3CE		/* VGA controller port address */

int vmode = 0x0d;		/* 320x200x16 colors */

unsigned char stmask[320];	/* start, end mask fast lookup arrays */
unsigned char fnmask[320];

unsigned char smask[] = { 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01 };
unsigned char emask[] = { 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF };


make_data()			/* fill mask arrays */
{				/* wd. be code segment tables in assembler */
 int i,j;

 for(i=0;i<320;i++)
  {
   stmask[i] = smask[i&7];
   fnmask[i] = emask[i&7];
  }
}



main()
{
 long btime;
 float mtime;
 int i,j,k;

 initgraph(&gdriver,&gmode,"");
 regs.h.ah = 0;			/* set video mode */
 regs.h.al = vmode;		/* as driver doesn't sppt 320x200 */
 int86(0x10,&regs,&regs);

 make_data();                   /* create dummy asm tables */

 btime = biostime(0,0L);        /* dummy timer to find interface time */
 for(i=0;i<290;i++)
 for(k=0;k<170;k++)
   dpoly(i+20, i+20, i, i+24, k, 24+k, (i+k)%16);
 mtime = (float)(biostime(0,0L)-btime)/18.2;

 setup_hdwe(PUT);               /* setup VGA hardware */
 btime = biostime(0,0L);        /* draw 49300 24x24 triangles */
 for(i=0;i<290;i++)             /* of 288 pixels ea.          */
 for(k=0;k<170;k++)
   trpoly(i+20, i+20, i, i+24, k, 24+k, (i+k)%16);
 reset_hdwe();                  /* reset VGA hardware */

 printf("Triangle blits: %f\n", (float)(biostime(0,0L)-btime)/18.2-mtime);

 setup_hdwe(PUT);
 btime = biostime(0,0L);        /* draw 49300 24x24 trapezoids */
 for(i=0;i<290;i++)             /* of 576 pixels each          */
 for(k=0;k<170;k++)
   trpoly(i+7, i+30, i, i+25, k, 24+k, (i+k)%16);
 reset_hdwe();

 printf("Trapezoidal blits: %f\n", (float)(biostime(0,0L)-btime)/18.2-mtime);

 getch();
 textmode(-1);
}



setup_hdwe(int mode)       /* set VGA to draw in desired mode */
{                          /* do ONCE for all polys */
 asm {
	mov	dx,VGA
	mov	ah,BYTE PTR mode
	sal	ah,1
	sal	ah,1
	sal	ah,1
	mov	al,03h	           /* set mode */
	out	dx,ax		   /* assumed PUT by BIOS */
	mov	ax,0B05h	   /* write mode 3, read mode 1 */
	out	dx,ax
	mov	ax,0007h	   /* 0 to CDC for 0xFF read */
	out	dx,ax
	mov	ax,0FF08h	   /* bit mask = all       */
	out	dx,ax		   /* assumed 0xFF by BIOS */
	mov	ax,0FF01h	   /* ESR = 0x0F */
	out	dx,ax
     }
}



reset_hdwe()              /* reset VGA to expected state after drawing */
{
 asm {
	mov	dx,VGA
	mov	ax,0000
	out	dx,ax
	mov	ax,0001
	out	dx,ax
	mov	ax,0003
	out	dx,ax
	mov	ax,0005
	out	dx,ax
     }
}




/*  1  2 */  /* draw trapezoid: horizontal top, bottom          */
/*       */  /* do it as simply as possible: stack these to get */
/* 3  4  */  /* any 2 or 3-sided poly: quad is 50% faster per   */
	     /* pixel for 24x24 than triangles                  */
	     /* just make 2 points the same for triangle draw.  */

trpoly(int x1,int x2, int x3, int x4, int y1, int y3, int color)
{
 unsigned int vline = y1*40;  /* video line: offset in buffer  */
 long l_incr, r_incr;         /* side slopes (16-bit underflow */
 int lines = y3-y1;           /* line counter  */

 if(lines<1)return;

 asm {
      .386
      mov	dx,VGA
      xor	al,al
      mov	ah,BYTE PTR color           /* set color */
      out	dx,ax

      cld

      mov	ax,0a000h		    /* set segment */
      mov	es,ax
     }

 asm {
      xor	ecx,ecx		/* compute left incrementer */
      mov	ax,x3
      sub	ax,x1
      cwd
      movsx	eax,ax
      movsx	edx,dx          /* (x3-x1)/(y3-y1) */
      shl	eax,16
      mov	cx,lines
      idiv	ecx
      cmp 	eax,0           /* round up if + ( - already done) */
      jle	rnd1
      inc	eax
     }
rnd1:
 asm {
      mov	l_incr,eax

      mov	ax,x4           /* compute right incrementer */
      sub	ax,x2
      cwd
      movsx	eax,ax          /* (x4-x2)/(y4-y2) */
      movsx	edx,dx
      shl	eax,16
      mov	cx,lines
      idiv	ecx
      cmp 	eax,0           /* round up */
      jle	rnd2
      inc	eax
     }
rnd2:
 asm {
      mov	r_incr,eax

      mov	dx,x1		/* set start of left/right */
      mov	si,x2
      shl	edx,16          /* add zero frac. part     */
      shl	esi,16
      add	edx,08000h	/* add 0.5 to left, so it rounds up   */

      mov	bx,x1           /* faster to load reg's than to shift */
      mov	cx,x2
     }

nextline:

 /* bx=left side, cx=right side, vline=line start */

 asm {
      mov	al,[bx+stmask]     /* compute left side */
      shr	bx,3
      mov	di,cx              /* compute right side */
      mov	ah,[di+fnmask]     /* lookup 350 nS faster than shift */
      shr	cx,3

      mov	di,vline
      add	di,bx              /* compute start byte  */
      sub	cx,bx		   /* number of bytes - 1 */
      jz	onebyte
      jc	doneline	   /* skip if L>R     */

      and	es:[di],al	   /* mask start byte */
      inc	di
      dec	cx
				   /* cx==0 test not worth it:     */
      mov	al,0ffh		   /* faster to let REP handle 0's */
      rep	stosb		   /* fill center bytes            */

      and	es:[di],ah	   /* mask end byte */
     }
 goto doneline;

onebyte:
 asm {
      and	al,ah              /* only 1 byte to mask     */
      and	es:[di],al         /* combine start, end mask */
     }

doneline:

 asm {
      dec	WORD PTR lines
      jz	donetri

      mov	ax,40
      add	vline,ax

      add	edx,l_incr      /* add in slope */
      add	esi,r_incr
      mov	ebx,edx         /* throw away fraction: lt rounded up */
      sar	ebx,16
      mov	ecx,esi
      sar	ecx,16
      cmp	cx,0   		/* clip to 0 on left:     */
      jge	nextline	/* code auto-clip rt to 0 */

      xor	cx,cx
      jmp	nextline
     }
 donetri: ;
}



dpoly(int x1,int x2, int x3, int x4, int y1, int y3, int color)
{
 unsigned int vline = y1*40;
 long l_incr, r_incr;
 int lines = y3-y1;

 if(lines<1)return;

 asm {
      .386
      mov	dx,VGA
      xor	al,al
      mov	ah,BYTE PTR color           /* set color */
      out	dx,ax

      cld

      mov	ax,0a000h		    /* set segment */
      mov	es,ax
     }
}

---------------------- ends -----------------------


--------------------------------------------------------------------------
| My life is Hardware,                    |                              | 
| my destiny is Software,                 |         Dave Stampe          |
| my CPU is Wetware...                    |                              | 
| Anybody got a SDB I can borrow?         | dstamp@watserv1.uwaterloo.ca |
__________________________________________________________________________


From jet Wed Oct 30 17:37:05 1991
Received: by karazm.math.UH.EDU id AA13313
  (5.65c/IDA-1.4.4 for glove-list@karazm.math.uh.edu); Wed, 30 Oct 1991 23:37:05 -0600
From: J Eric Townsend <jet>
Message-Id: <199110310537.AA13313@karazm.math.UH.EDU>
Subject: Re: UK users
To: rick@hci.heriot-watt.ac.uk (Rick Innis)
Date: Wed, 30 Oct 91 23:37:05 CST
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: <975.9110301703@mortlach.hci.hw.ac.uk>; from "Rick Innis" at Oct 30, 91 5:03 pm
X-Mailer: ELM [version 2.3 PL11]

you wrote:
>Out of curiousity, how many of us are there and what are we hoping to

$ wc -l vr/glove-list/list
302 vr/glove-list/list

-- 
J. Eric Townsend - jet@uh.edu - Systems Wrangler, UH Dept of Mathematics
vox: (713) 749-2126  '91 CB750, DoD# 0378, TMRA# 27834  AMA# I-forget
PowerGlove mailing list: glove-list-request@karazm.math.uh.edu
"allow users to create more impactful documents" -- from an Apple press release

From DAVID@asgard.clare.tased.edu.au Thu Oct 31 01:24:47 1991
Received: from diemen.utas.edu.au by karazm.math.UH.EDU with SMTP id AA14178
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.EDU>); Thu, 31 Oct 1991 01:24:47 -0600
Received: from ecc.tased.edu.au by diemen.utas.edu.au with SMTP id AA27317
  (5.65b/IDA-1.4.3 for glove-list@karazm.math.uh.EDU); Thu, 31 Oct 91 18:20:20 +1100
Received: from slick.clare.tased.edu.au by ecc.tased.edu.au (PMDF #12099) id
 <01GCELPKXB5S9GVL0Q@ecc.tased.edu.au>; Thu, 31 Oct 1991 18:20 +1000
Received: from charon1.clare.tased.edu.au by slick.clare.tased.edu.au
 (4.1/SMI-4.1) id AA03866; Thu, 31 Oct 91 19:26:01 EST
Received: From ASGARD/WORKQUEUE by charon1.clare.tased.edu.au via Charon 3.4
 with IPX id 100.911031182115.416; 31 Oct 91 18:21:28 +1100
Date: 31 Oct 91 18:20:44
From: david <DAVID@asgard.clare.tased.edu.au>
Subject: IBM Hires code
To: glove-list@karazm.math.uh.EDU
Message-Id: <MAILQUEUE-99.911031182041.400@asgard.clare.tased.edu.au>
X-Envelope-To: glove-list@karazm.math.uh.EDU
X-Mailer: Pegasus Mail v2.1b.


Greetings from sunny Tassie !

I've produced yavotpgc -  Yet Another Version Of The Power Glove Code, and
I'll be posting it in the next few days.

 Advantages :
    o   No assembler
            has own hi resolution timing in C only.

    o   Autocalibrating timing [works on XT and AT so far - 486 code is
            already available]

    o   works on slow machines
            XT (even 4.77Mhz)
       and  AT (16 M)

    Also - the hardest part is to get the glove into hires mode - actually
    reading the glove is no real strain - So just use either a TSR which
    you slap with an INT to fire up hires mode, then use your favourite
    language from there, or - as I do, execute a hires exe at the beginning
    of the entire session.

PS
    Does anybody have any autocalibrating "read byte" code in turbo pas 6.0 ?
    This is for a student "toy", and they only know turbo pas - but I can
    exchange you for a drawing program one of then did which uses the glove,
    but which has hardcoded timing built into the glove unit.



Thankyou

___________________________________________________________________________
David Ford                                        Voice :   +61 02 49 6887
Claremont College                                 Fax   :   +61 02 49 1984
Link Rd                             email : david@slick.clare.tased.edu.au
Claremont   TAS 7011
AUSTRALIA            The Internet : "Wherever you go...  There you are..."
                                                           Buckaroo Banzai

From dbarberi@sugrfx.acs.syr.edu Wed Oct 30 23:41:06 1991
Received: from sugrfx.acs.syr.EDU by karazm.math.UH.EDU with SMTP id AA15000
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 31 Oct 1991 03:44:15 -0600
Date: Thu, 31 Oct 91 04:41:06 EST
From: dbarberi@sugrfx.acs.syr.edu (..Iris Freak..)
Received: by sugrfx.acs.syr.edu (4.1/2.1-Advanced Graphics Research Lab. - Syracuse University)
	id AA12376; Thu, 31 Oct 91 04:41:06 EST
Message-Id: <9110310941.AA12376@sugrfx.acs.syr.edu>
To: glove-list@karazm.math.uh.edu

Hey !

    Is it just me or has this list been REALLY quiet?

  Anyways.. anyone out there ever chop off all the plastic from the 
Powerglove and make a small kid size glove?  You'd be amazed at just
how much extra material is used to make the PowerGlove !



                             --=--------------------------------------------.
  _          _    _____                        David Barberi                |
  \\        //   ||---\\                       -------------                |
   \\      //    ||    ||               dbarberi@sugrfx.acs.syr.edu         |
    \\    //     ||___//                                                    |
     \\  //      ||---\\          Syracuse University Virtual Reality Lab   |
      \\//       ||    \\                 Syracuse, New York, USA           |
       \/        ||     \\            "Bringing cyberspace to the masses"   |
                             --=--------------------------------------------'

From motcid!zeus!smithju@uunet.UU.NET Thu Oct 31 09:16:22 1991
Received: from relay1.UU.NET by karazm.math.UH.EDU with SMTP id AA15080
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 31 Oct 1991 04:47:41 -0600
Received: from uunet.uu.net (via LOCALHOST.UU.NET) by relay1.UU.NET with SMTP 
	(5.61/UUNET-internet-primary) id AA29064; Thu, 31 Oct 91 05:43:24 -0500
Received: from motcid.UUCP by uunet.uu.net with UUCP/RMAIL
	(queueing-rmail) id 054245.22218; Thu, 31 Oct 1991 05:42:45 EST
Received: from zeus.swindon.rtsg.mot.com (hera) by rtsg.mot.com (4.0/SMI-4.1)
	id AA11827; Thu, 31 Oct 91 03:14:40 CST
Received: from mamba. by zeus.swindon.rtsg.mot.com (4.0/SMI-4.0)
	id AA19760; Thu, 31 Oct 91 09:16:22 GMT
Date: Thu, 31 Oct 91 09:16:22 GMT
From: motcid!zeus.swindon.SUBDOMAIN!smithju%zeus@uunet.UU.NET (Justin Smith)
Message-Id: <9110310916.AA19760@zeus.swindon.rtsg.mot.com>
To: glove-list@karazm.math.uh.edu
Subject: FAQ

Hi,
	I have some info on PD 6811 tools, and here it is.....

at SIMTEL20:

Directory PD1:<MSDOS.CROSSASM>
MOTOASMS.ZIP  B   92103  900314  Motorola 6800/01/04/05/09/11 cross assemblers
ASREF.ZIP     B   22588  900314  Reference manual for MOTOASMS cross assembers



also theres the moto BBS in Texas, the number is 512 891 3733.

the BBS has the above files, bug fixes, a PD kernel, a 6811 simulator for the PC
and a C compiler. I have most of these files from when i used to run a BBS, if
theres enough interest i could post them to the list or mail to individuals,
or perhaps we could put them on the archive site (although i dont have FTP)


I'll dig out what i`ve got.......


as far as EVBs go I dont know anything about them, although i'm trying to find
out where I can get one from.

Justin Smith

From nfotis@theseas.ntua.gr Thu Oct 31 06:05:57 1991
Received: from ariadne.csi.forth.gr by karazm.math.UH.EDU with SMTP id AA15249
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 31 Oct 1991 06:05:57 -0600
Received: from theseas.ntua.gr by ariadne.csi.forth.gr via ITEnet with SMTP;
	id AA07893 (5.61++/FORTH-CSI-2.21); Thu, 31 Oct 91 13:58:09 +0200
Received: by theseas.ntua.gr; Thu, 31 Oct 91 13:58:21 +0200
Received: by phgasos.ntua.gr ; Thu, 31 Oct 91 14:00:44 +0200
From: Nick (Nikolaos) C. Fotis <nfotis@theseas.ntua.gr>
Message-Id: <9110311200.AA12837@phgasos.ntua.gr>
Subject: Re: Results of STRAW-POLL
To: glove-list@karazm.math.uh.edu (Power Glove Mailing List)
Date: Thu, 31 Oct 91 14:00:43 EET
X-Mailer: ELM [version 2.3 PL11]

> From: J Eric Townsend <JET@uh.edu>
> Subject: Re: Results of STRAW-POLL (fwd)
> 
> However, I still think that comp.periphs.glove is the logical place for
> the group.  It's a peripheral, and there's a peripheral heirarchy. Let
> the discussion of the ethics of teledildonics and presidential campaigns
> stay in sci.v-w.
> 
> If not that, how about:
> comp.virtual.glove
> comp.virtual.goggles
> comp.virtual.mouse (for flying meeces)
> comp.virtual.rendering
>  etc etc etc

Personally, I would prefer the creation of a comp.periphs.glove group, because:

The comp. hierarchy is much more widely distributed in the Internet/EUnet, and
I want a distribution scheme that arrives at all places without trouble.

If we want a more general newsgroup?? I think that the volume of glove-list
is enough to maintain a comp.periphs.glove group, and cluttering with
irrespective material will be rather harmful.

Moderation?? I don't care too much, since I can select what to read with
the newsreader I use. I agree that moderation is useful, though.

(I'm on Eunet's borderline, and only the comp. hierarchy arrives
 here unschatched.)

The gyus that aren't on the Internet/uucp and cannot get news are going to
be hurt badly. Do we want such a thing???

 alt. hierarchy?? Forget it. We don't get alt.sex.*, so we shall not	
get glove-related material either ;-) ;-) ;-)


Greetings, and have a nice day,
Nick.

(WOW!! My first posting in the glove-list!! ;-) )

-- 
Nikolaos Fotis			National Technical Univ. of Athens, Greece
16 Esperidon St.,		UUCP:	mcsun!ariadne!theseas!nfotis
Halandri, GR - 152 32		or InterNet : nfotis@theseas.ntua.gr
Athens, GREECE			FAX: (+30 1) 77 84 578

From broehl@sunee.waterloo.edu Thu Oct 31 05:52:36 1991
Received: from sunee.waterloo.edu by karazm.math.UH.EDU with SMTP id AA15810
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 31 Oct 1991 09:57:06 -0600
Received: by sunee.waterloo.edu
	id <AA12211>; Thu, 31 Oct 91 10:52:37 -0500
From: Bernie Roehl <broehl@sunee.waterloo.edu>
Message-Id: <9110311552.AA12211@sunee.waterloo.edu>
Subject: Re: Results of STRAW-POLL (fwd)
To: glove-list@karazm.math.uh.edu
Date: Thu, 31 Oct 91 10:52:36 EST
X-Mailer: ELM [version 2.3 PL11]

> > comp.virtual.mouse (for flying meeces)

Perhaps comp.virtual.bats?  :-)

> Personally, I would prefer the creation of a comp.periphs.glove group

The thing is, once we've got the PowerGlove software fully operational
on a range of platforms, there really isn't much need for either a group
or a mailing list.  Now, a mailing list fading away once its job is done
is no problem, but newsgroups tend to be longer-lived.  I'd like a name
that reflects a broader-based (and longer-duration) area of interest.
Perhaps something about 3-D pointing devices in general?  Gloves, head-
mounted displays that track your head movements, datasuits, etc etc.

-- 
	Bernie Roehl, University of Waterloo Electrical Engineering Dept
	Mail: broehl@sunee.waterloo.edu OR broehl@sunee.UWaterloo.ca
	BangPath: watmath!sunee!broehl
	Voice:  (519) 885-1211 x 2607 [work]

From shrchin%susssys1.reading.ac.uk%subnode.susssys1.rdg.ac.uk@susssys1.reading.ac.uk Thu Oct 31 04:53:25 1991
Received: from sun2.nsfnet-relay.ac.uk by karazm.math.UH.EDU with SMTP id AA15869
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 31 Oct 1991 10:02:30 -0600
Received: from susssys1.reading.ac.uk by sun2.nsfnet-relay.ac.uk via JANET 
          with NIFTP id <29774-0@sun2.nsfnet-relay.ac.uk>;
          Thu, 31 Oct 1991 04:51:35 +0000
From: Jonathan "H." "N." Chin <shrchin@susssys1.reading.ac.uk>
Via: subnode.susssys1.rdg.ac.uk (shsscsc1); Thu, 31 Oct 91 04:53:19 GMT
Date: Thu, 31 Oct 91 04:53:25 GMT
Message-Id: <777.9110310453@subnode.susssys1.rdg.ac.uk>
To: glove-list@karazm.math.uh.edu

I've been watching this list for a little while, having started wondering about
the suitability of a power-glove for use in my research.  I would appreciate answers
to a few questions that spring to mind.  I have never seen a power-glove (PG)
except in pictures in the Byte article and in the CHI'91 conference proceedings.

(1) where can I get them in UK? 
(I've taken note of Medlantic Hi-Tec's address posted by ecl6gum)

(2) Would it be advantageous to get from US, considering postage and such,
    seeing as how it seems to be so much cheaper there?

(3) If yes to previous question, how do I go about it?

(4) What kind of resolution can I expect to get from it?
(in terms of joint angle, position, orientation, number of samples per second, etc.
 In short, where's the spec sheet?)

(5) How obstructive is the PG?
(in terms of restricting freedom of movement of the fingers, etc.)


On related note:

(6) What am I doing wrong when I try to ftp from karazm.math.uh.edu?
(It responds erratically to any commands, initially rejecting "anonymous" as
 a login, but allowing it after USER, and typically responding to about the
 third or fourth command *previous* to the current one. I tried mailing the 
 ftp-person but have received no reply.)


Finally, a PostScript file of glove timing was posted (from Manfred Krauss).
The top of my copy shows:

> %  PostSaript-Image:  erzeugt mit Bilder-Programm Version vom  29. 5.91  UJ
> %                     am  0. 0.2028 um  0: 2: 2
> % K:\MEGPAINT\PGTIMG11.PS 
> 
> /Bild   166 string def
> 
>    20    20 translate
>   510   780 scale
>           larotnge
            ^^^^^^^^what is this?
> 
>  1328  2032 1 [ 1328 0 0 -2032 0  2032]
> { currentfile Bild readhehstring pop ]
                     ^^^^^^^^^^^^^what is this?
> image

and, after the (presumably hex) data that follows, the file ends with:

> /#copies   1 def
  ^^^^^^^^where is this defined?
> showpage

(7) Has the file been trashed in transit? If not, would somebody please supply me
    with the translations necessary to make it printable?


Thank you,

Jonathan Chin
shrchin@uk.ac.rdg.susssys1
Department of Cybernetics, University of Reading, England.

From jet Thu Oct 31 04:28:01 1991
Received: by karazm.math.UH.EDU id AA16086
  (5.65c/IDA-1.4.4 for glove-list@karazm.math.uh.edu); Thu, 31 Oct 1991 10:28:01 -0600
From: J Eric Townsend <jet>
Message-Id: <199110311628.AA16086@karazm.math.UH.EDU>
Subject: Re: Results of STRAW-POLL (fwd)
To: broehl@sunee.waterloo.edu (Bernie Roehl)
Date: Thu, 31 Oct 91 10:28:01 CST
Cc: glove-list@karazm.math.uh.edu
In-Reply-To: <9110311552.AA12211@sunee.waterloo.edu>; from "Bernie Roehl" at Oct 31, 91 10:52 am
X-Mailer: ELM [version 2.3 PL11]

you wrote:
>The thing is, once we've got the PowerGlove software fully operational
>on a range of platforms, there really isn't much need for either a group
>or a mailing list.  Now, a mailing list fading away once its job is done

There are other gloves, and there will continue to be other gloves...


-- 
J. Eric Townsend - jet@uh.edu - Systems Wrangler, UH Dept of Mathematics
vox: (713) 749-2126  '91 CB750, DoD# 0378, TMRA# 27834  AMA# I-forget
PowerGlove mailing list: glove-list-request@karazm.math.uh.edu
"allow users to create more impactful documents" -- from an Apple press release

From agodwin@acorn.co.uk Thu Oct 31 13:20:00 1991
Received: from eros.uknet.ac.uk by karazm.math.UH.EDU with SMTP id AA17462
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 31 Oct 1991 13:05:45 -0600
Received: from acorn.co.uk by eros.uknet.ac.uk with UUCP 
          id <27341-0@eros.uknet.ac.uk>; Thu, 31 Oct 1991 13:41:47 +0000
Received: from snark.acorn.co.uk by acorn.co.uk (4.1/Am32) id AA21854;
          Thu, 31 Oct 91 13:20:11 GMT
From: agodwin@acorn.co.uk (Adrian Godwin)
Date: Thu, 31 Oct 91 13:20:00 GMT
Message-Id: <9110311320.AA13185@snark.acorn.co.uk>
To: JET@UH.edu, rick@hci.hw.ac.uk
Subject: Re: UK users
Cc: glove-list@karazm.math.uh.edu


you wrote:
> you wrote:
> >Out of curiousity, how many of us are there and what are we hoping to
> 
> $ wc -l vr/glove-list/list
> 302 vr/glove-list/list

But I think what was wanted was :

> $ grep uk vr/glove-list/list | wc -l

I'm interested in all the discussions that occur here, and enjoy thinking
about various possible developments in both hardware and software. However, 
I'm over-committed to a whole bunch of other work and non-work projects and 
suspect that I'll never find the time to do anything concrete.
I'm a virtual-virtual-reality person :-).

I have a particular interest in platform-independent developments (especially
non-PC developments). This was a reason for joining my present employer 
(a small UK hardware manufacturer, for those not familiar with Acorn) rather
than a consequence of working here.

-adrian


From exv2447@ultb.isc.rit.edu Thu Oct 31 09:37:06 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA17667
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 31 Oct 1991 13:41:28 -0600
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA18979; Thu, 31 Oct 91 14:37:06 -0500
Date: Thu, 31 Oct 91 14:37:06 -0500
From: exv2447@ultb.isc.rit.edu (E.X. Vanhensbergen )
Message-Id: <9110311937.AA18979@ultb.isc.rit.edu>
To: glove-list@karazm.math.uh.edu, yonder@netcom.netcom.com
Subject: Re:  68hc11 EVB vs. EVBU...
Cc: emr4510@ultb.isc.rit.edu

Where are you ordering the 6811 from?
			Eric
			-RIT

From jdb9608@cs.rit.edu Thu Oct 31 18:32:52 1991
Received: from ultb.isc.rit.edu by karazm.math.UH.EDU with SMTP id AA20066
  (5.65c/IDA-1.4.4 for <glove-list@karazm.math.uh.edu>); Thu, 31 Oct 1991 22:34:38 -0600
Received: by ultb.isc.rit.edu (5.57/5.3 (Postmaster DPMSYS))
	id AA13870; Thu, 31 Oct 91 23:30:18 -0500
Received: from boron.CS (boron.ARPA) by junior.rit.edu (4.1/5.17)
	id AA03666; Thu, 31 Oct 91 23:18:09 EST
From: jdb9608@cs.rit.edu (John D Beutel)
Message-Id: <9111010418.AA03666@junior.rit.edu>
Subject: glove interface standard
To: glove-list@karazm.math.uh.edu
Date: Thu, 31 Oct 91 23:32:52 EST
X-Mailer: ELM [version 2.3 PL8]

I hope there are at least a few people still interested in this.

I'd like the standard to do as much as it possibly can.
I suggest we make the glove interface standard complex and smart.
Normally I would prefer something simple and elegant, but since
we don't have diffinitive specs on the glove and we don't really
know what we'll figure out how to make it do next, we shouldn't
make a standard that will become obsolete in a few months.

The key is to abstract the glove functionality, so what the
glove does (and what the program expects it to do) is not
linked to a particular method.  Different machines and
different schemes will use different methods, which will
yield different capabilities, but if the standard can put
those capabilities in abstract terms then the program can
ask for what it needs and the interface can worry about how
to do it.

See how you like this for abstraction (any additions?):

        sample rate (Hz)
        x, y, z resolution
        each finger, w/ resolution
        response time (from physical sample to availability of data)
        synch glove to computer (or not)
        buttons, pad, and lo-res joystick data
        call a user function when data arrives (or not)

It's not easy to know how the abstraction should be done.
For example, should the X, Y, and Z values be handled
seperately or together?  Seperately makes more complexity,
but e.g. if someone invents a way of getting better Z resolution
than X & Y resolution then seperate would be better.

It's not just a question of the absolute capabilities of the interface
(software or hardware)---there are tradeoffs.  For example, what if we
find a way to turn off the fingers and get a faster sample rate?  If
the app just wants a 3D coordinate, then this is a good tradeoff.  If
the app needs the fingers too, then it isn't.  This futuristic
interface could do either faster sampling or finger data, but not
both.  So, it can't simply report its sampling rate or finger
resolution because it depends.

That's why I think a negotiation with the interface would be a great
way to do it (as someone already suggested).  Of course, it can't be
too complicated, or who'd want to use it?  One function call would be
best.  The application could give the interface its requirements for
each abstraction:

        minimum acceptable value
        maximum acceptable value
        prefered value
        priority

The interface resolves conflicts the best it can, making tradeoffs
in order of priority, and returns what it can do.
(E.g., you prefered a sample rate of 30 Hz but the best I can do is 17 Hz.
It's within your acceptable range, so here it is.)

If the application doesn't care about an abstraction (e.g.,
doesn't care what the X, Y, Z resolution is) it can say so
(e.g., specify -1 as its value requirements).  Likewise,
if the app doesn't need an abstraction at all (e.g., doesn't
want any lo-res data) then it can say so (e.g., specify 0 as
its priority).  The interface sorts the abstraction requirements
in order of priority, and then attempts to grant each its
prefered value.  If that becomes impossible, then it tries
to get it within the acceptable value range.  If that is still
impossible, then the interface could either do its best,
or sort the requirements in a different order than their priority
and try again.

The prefered value of a high priority may make impossible the
acceptable value of a lower priority, but if the lower priority
is satisfied first then the higher priority may still be able
to be within the acceptable range.  For 7 abstractions,
the 7! possible orders of priority are about 3000.
For 9 abstractions, the 9! orders go up to the impractical
area of 350,000.  So, doing all possible orders of
priority may be impossible, but it may be easy to swap a few of the
ones that the standard knows will make a difference.

Whether or not the interface implementation is smart enuf to do this
doesn't really matter.  If the interface doesn't try different orders,
or if it does but it still can't satisfy the application's request,
then it just returns what it can do.  The skill of the tradeoffs
that the interface makes---and its raw capability---will increase
with time, but at least right now if the interface can't do it,
it can say so thru the standard, and the app can decide for itself
whether it's good enuf or not.

If the interface can't satisfy the app's request, the app can always
make another request with looser constraints.  I doubt that app's
will do this very often---that's the idea of specifying an acceptable
range and priority; let the interface do all the work trying to
get it right.  In most cases, the app makes one call to the interface,
and the it does the best that it can, (initializes the glove?),
and returns what it's going to do (e.g., the finger data will range
from 0 to 3).  The app uses the return values (instead of constants)
to interpret the data.  So, if you wire your glove's fingers directly
to an IO port to get faster sampling and better resolution,
the interface you write returns that its finger data will range
from 0 to 255, and the application that only needs 0 to 3 will work
just as well with your better data.

Passing the abstraction requests via dynamic means (i.e., "tags")
also sounds like a good idea (someone else suggested earlier).
That way, if other abstractions are added later (e.g., a glove with
two X,Y,Z coordinates) then programs could request these new abstractions
from old interfaces and still compile.  If we put the standard names
in a datastructure, then the compiler won't work with the
older .h interface files, or the function call's arguments
will be wrong.  If we use "tags", then the interface can ignore the
things it doesn't know, or act intelligently by telling the app that
it can't do those things.  The app can decide for itself whether it
really needs that extra X,Y,Z coordinate or not.  Some apps may
really need it, and won't be written to be downwardly compatable.
Other apps may not need it---it may be strictly an option or a fringe.
For those apps, it would be a shame to not be able to use them
with older interfaces or simpler hardware just because the names
were hardcoded and the compiler won't compile the new names.

Using tags will make the interface a little more complicated, but
not significantly so, especially considering that the support
functions only need to be written once.  I wouldn't mind writing
them for the ST, and they'd be practically the same on any computer.
Here's an example of what the code might look like:

-------------------------- in stdglove.h -------------------------
struct negotiate_glove {
        char    *name;          /* the tag, standardized */
        long    minimum,        /* acceptable range, std bit length */
                preference,     /* prefered value */
                maximum;        /* acceptable range */
        int     priority;
        long    offer;          /* return value of what interface can do */
                                /* 0 == not available */
        /* double the number of elements here to allow for signed ranges? */
        /* e.g., -127..128 instead of just 255? */
}

--------------------------- in app.c ------------------------------

struct  negotiate_glove gn[6] = {
        {"rate", 1, 14, 30,     1, 0},
        {"sync", 1, 1, 1,       2, 0},
        {"xyz", 10, 255, 1000,  3, 0},
        {"finger1", -1, -1, -1, 4, 0},
        {"lores", 0, 0, 0,      0, 0},  /* actually, maybe for those */
                                        /* things we don't want it would */
                                        /* be easier to just not ask for */
                                        /* them. */
        {"end"}
}

main()
{
        init_glove( gn);

        if( get_offer( gn, "rate") != 14)
                fprintf( stderr, "warning: optimum sample rate unavailable");

        /* etc... */
}

We could include an option to init_glove so that if it
can't satisfy the app's request within the given acceptable values,
then it prints a nice error message and aborts,
so the app doesn't even have to worry about checking
the return values if it doesn't want to.

The tags do make the interface more complicated, but
not significantly so.  They will slow the initialization
a little, but it's not noticable.  They will slow the
retrieval of the sample data a little, but only a few
microseconds (unless someone can come up with a clever
macro for this?  I haven't thought much about it.)
Milliseconds are significant, but what's a few microseconds
at 30 Hz?

Please think about whether a complex standard like this
would be good for this glove environment, and express your opinion.

--
J. David Beutel  11011011  jdb9608@cs.rit.edu  "I am, therefore I am."