1From dblank@comp.uark.edu  Wed Jul  1 13:17:17 1998
2Received: from aleve.media.mit.edu by hub.media.mit.edu; (5.65v3.2/1.1/06Jun95-8.2MPM)
3	id AA10324; Wed, 1 Jul 1998 13:17:17 -0400
4Received: from comp.uark.edu (root@comp.uark.edu [130.184.252.197])
5	by aleve.media.mit.edu (8.8.7/ML970927) with ESMTP id LAA00083
6	for <handyboard@media.mit.edu>; Wed, 1 Jul 1998 11:56:44 -0400 (EDT)
7Received: from comp.uark.edu (IDENT:dblank@dangermouse.uark.edu [130.184.201.233])
8	by comp.uark.edu (8.9.0/8.9.0) with ESMTP id KAA12202;
9	Wed, 1 Jul 1998 10:56:30 -0500 (CDT)
10Sender: dblank@comp.uark.edu
11Message-Id: <359A5C2E.202B4BA3@comp.uark.edu>
12Date: Wed, 01 Jul 1998 10:56:30 -0500
13From: Douglas Blank <dblank@comp.uark.edu>
14Organization: University of Arkansas, CS
15X-Mailer: Mozilla 4.04 [en] (X11; I; Linux 2.0.33 i686)
16Mime-Version: 1.0
17To: Aaron Edsinger <aarone@sirius.com>
18Cc: handy <handyboard@media.mit.edu>
19Subject: Re: Serial Interface
20References: <199807010601.XAA26862@mail3.sirius.com>
21Content-Type: text/plain; charset=us-ascii
22Content-Transfer-Encoding: 7bit
23
24Aaron Edsinger wrote:
25
26> Hello,
27>         I've been having some problems using my HandyBoard to talk directly to my
28> PC via the serial interface.  I disable Interactive C and then Poke() and
29> Peek() as has been described on this list.  I  send short character strings
30> from my PC to the HandyBoard under Windows 95.  If I send strings longer
31> than 2 characters, it seems that some of the characters get lost. This
32> behavior seems to be affected by repositioning or slightly modifying the
33> code, suggesting perhaps a timing issue.
34
35Although there is the HEXMON program, I too, have been trying to do what
36you describe, and encountered the same problems. I found it to be a
37timing issue, and, through trial and error, have a found some settings
38that seem to work most of the time.
39
40My goal was to make C code that looked the same when compiled and run on
41the Host is the code that ran under IC.
42
43I am including the host and HB programs here. If anyone knows of a
44better way of communicating, please let us know.
45
46-Doug Blank
47
48=====================================================================
49dblank@comp.uark.edu            Douglas Blank, University of Arkansas
50Assistant Professor                                  Computer Science
51==================== http://www.uark.edu/~dblank ====================
52
53This code was written for MS C++4.0 running on Win95.
54
55//************** BEGIN: serial_HOST.c
56
57/* VC++4.0 HandyBoard Host Programming System
58   Dr. Douglas S. Blank
59   University of Arkansas, Department of Computer Science
60   www.uark.edu/~dblank
61
62   This code runs on a host PC.
63*/
64
65#include <ctype.h>
66#include <conio.h>
67#include <stdlib.h>
68#include <stdio.h>
69
70#include "serial_HOST.h"
71
72void main(int argc, char *argv[])
73{
74        motor(0, 100);
75        motor(1, 100);
76        motor(2, 100);
77        motor(3, 100);
78        sleep(1000);
79        motor(0, -100);
80        motor(1, -100);
81        motor(2, -100);
82        motor(3, -100);
83        sleep(1000);
84        ao();
85        print("\nThis is a test");
86        printf("Knob is %d\n", knob() );
87        printf("Analog(0) is %d\n", analog(0));
88        printf("Digital(0) is %d\n", digital(0));
89        printf("Analog(1) is %d\n", analog(1));
90        printf("Digital(1) is %d\n", digital(1));
91        printf("Analog(2) is %d\n", analog(2));
92        printf("Digital(2) is %d\n", digital(2));
93        printf("Analog(3) is %d\n", analog(3));
94        printf("Digital(3) is %d\n", digital(3));
95        printf("Analog(4) is %d\n", analog(4));
96        printf("Digital(4) is %d\n", digital(4));
97        printf("Analog(5) is %d\n", analog(5));
98        printf("Digital(5) is %d\n", digital(5));
99        printf("Analog(6) is %d\n", analog(6));
100        printf("Digital(6) is %d\n", digital(6));
101        printf("Analog(7) is %d\n", analog(7));
102        printf("Digital(7) is %d\n", digital(7));
103        printf("Analog(8) is %d\n", analog(8));
104        printf("Digital(8) is %d\n", digital(8));
105        printf("Analog(9) is %d\n", analog(9));
106        printf("Digital(9) is %d\n", digital(9));
107        printf("Analog(10) is %d\n", analog(10));
108        printf("Digital(10) is %d\n", digital(10));
109        printf("Analog(11) is %d\n", analog(11));
110        printf("Digital(11) is %d\n", digital(11));
111        printf("Analog(12) is %d\n", analog(12));
112        printf("Digital(12) is %d\n", digital(12));
113        printf("Analog(13) is %d\n", analog(13));
114        printf("Digital(13) is %d\n", digital(13));
115        printf("Analog(14) is %d\n", analog(14));
116        printf("Digital(14) is %d\n", digital(14));
117        printf("Analog(15) is %d\n", analog(15));
118        printf("Digital(15) is %d\n", digital(15));
119        beep();
120        sleep(1000);
121        while (! stop_button() ) {
122                sprintf(buffer, "%d.0", (knob() * 10));
123                tone( buffer, "0.1");
124        }
125}
126
127//************** END: serial_HOST.c
128
129//************** BEGIN: serial_HOST.h
130
131/* VC++4.0 HandyBoard Host Programming System
132   Dr. Douglas S. Blank
133   University of Arkansas, Department of Computer Science
134   www.uark.edu/~dblank
135*/
136
137#define MOTOR     0
138#define AO        1
139#define ANALOG    2
140#define DIGITAL   3
141#define PRINTF    4
142#define KNOB      5
143#define BEEP      6
144#define TONE      7
145#define START_BUTTON 8
146#define STOP_BUTTON  9
147#define QUIT    113
148
149#define sleep(NUM) _sleep(NUM)
150#define SERIALWAIT  5
151
152unsigned short PORT = 0x3f8; // LPT1: 0x378 COM1: 0x3f8
153
154int send(int i) {
155        int retval;
156        retval = _outp( PORT, i);
157        _sleep(SERIALWAIT);
158        return retval;
159}
160
161int receive() {
162        int retval;
163        retval = _inp( PORT);
164        _sleep(SERIALWAIT);
165        retval = _inp( PORT);
166        return retval;
167}
168
169void hangup() {
170        send(QUIT);
171}
172
173void print(char buffer[]) {
174        int i;
175        send(PRINTF);
176        for (i = 0; buffer[i] != 0; i++)
177                send(buffer[i]);
178        send('\0');
179}
180
181void motor(int motornum, int power) {
182        send(MOTOR);
183        send(motornum);
184        send(power + 100); // taken off on the other end
185}
186
187int analog(int sensor) {
188        send(ANALOG);
189        send(sensor);
190        return receive();
191}
192
193int digital(int sensor) {
194        send(DIGITAL);
195        send(sensor);
196        return receive();
197}
198
199void ao() {
200        send(AO);
201}
202
203int knob() {
204        send(KNOB);
205        return receive();
206}
207
208void beep() {
209        send(BEEP);
210}
211
212void tone(char f1[], char f2[]) {
213        int i;
214        send(TONE);
215        for (i = 0; f1[i] != 0; i++)
216                send(f1[i]);
217        send('\0');
218        for (i = 0; f2[i] != 0; i++)
219                send(f2[i]);
220        send('\0');
221        _sleep((unsigned long) (atof(f2) * 1000)); // to keep from
222overflowing serial line
223}
224
225void interactive()
226{
227        char c;
228        char key = ' ';
229        while (key != 'q') {
230                key = getch();
231                send(key);
232                printf("Sent %c\n", key);
233                c = receive();
234                printf("Got %c as a return value\n", c);
235        }
236}
237
238int start_button() {
239        send(START_BUTTON);
240        return receive();
241}
242
243int stop_button() {
244        send(STOP_BUTTON);
245        return receive();
246}
247//************** END: serial_HOST.h
248
249//************** BEGIN: serial_HB.c
250
251/* VC++4.0 HandyBoard Programming System
252   (Parts taken from other HB programs)
253   Dr. Douglas S. Blank
254   University of Arkansas, Department of Computer Science
255   www.uark.edu/~dblank
256
257   This code runs on the HB
258*/
259
260#define MOTOR     0
261#define AO        1
262#define ANALOG    2
263#define DIGITAL   3
264#define PRINTF    4
265#define KNOB      5
266#define BEEP    6
267#define TONE    7
268#define START_BUTTON 8
269#define STOP_BUTTON  9
270#define QUIT    113
271
272int _isspace(int a)         /* returns 1 for space or tab, 0
273otherwise     */
274                            /* internal routine used by atof() and
275cgets() */
276
277{
278    return ((a == 32) || (a == 9));     /* 32 is space, 9 is tab */
279}
280
281/*****************************************************************************/
282
283int _isdigit(int a)         /* returns 1 if a digit 0-9, 0 otherwise */
284                            /* internal routine used by atof()       */
285
286{
287    return ((a >= 48) && (a <= 57));    /* 48 is '0', 57 is '9' */
288}
289
290float atof(char s[])    /* Convert a string containing a number in
291ASCII     */
292                        /* form (integer, float, or exponential float)
293to a  */
294                        /* float.  Strips whitespace characters (space
295and   */
296                        /* tab) from the front of the string, but
297stops      */
298                        /* parsing at the first (unexpected)
299non-numeric     */
300                        /* character if the string has garbage at the
301end.   */
302                        /* This means that "  34.3foo78" translates to
30334.3. */
304                        /* Modified from atof() function in the
305standard     */
306                        /* library of the Hi-Tec C compiler for
307CP/M.        */
308                        /* Note:  all string literals converted to
309decimal   */
310                        /* form because IC can't deal with string
311literals   */
312                        /* in math
313calculations.                             */
314                        /* Also note:  very ugly code because IC will
315not    */
316                        /* allow any math operations on pointers!  Thus,
317the */
318                        /* the number string has to be treated as an
319array!  */
320                        /* Also also note:  no error handling; assumes
321that  */
322                        /* the string is a valid representation of a
323number! */
324                        /* Valid range for exponential-format numbers
325is     */
326                        /* approximately 2.0e-38 to
3273.4e+38.                 */
328
329{
330    int     i=0;            /* index into string array */
331    int     sign=0;         /* mantissa sign flag:  0=positive,
3321=negative */
333    int     exp0=0;         /* mantissa exponent counter */
334    int     eexp=0;         /* E-form exponent counter */
335    int     expsign=0;      /* exponent sign flag:  0=positive,
3361=negative */
337    float   m=0.0;          /* mantissa accumulator */
338
339    /* skip any leading whitespace (space, tab) */
340    while (_isspace(s[i]))
341        i++;                                /* skip it */
342
343    /* check for mantissa sign */
344    if (s[i] == 45)                         /* 45 is '-' */
345    {
346        sign = 1;                           /* flag minus sign */
347        i++;                                /* point to next */
348    }
349    else if (s[i] == 43)                    /* 43 is '+' */
350        i++;                                /* point to next */
351
352    /* now get all digits up to either a decimal point or an e/E */
353    while (_isdigit(s[i]))
354    {
355        m = 10.0*m + (float)(s[i] - 48);    /* 48 is '0' */
356        i++;                                /* point to next */
357    }
358
359    /* no more digits, so check for decimal point */
360    if (s[i] == 46)                         /* 46 is '.' */
361    {
362        i++;                                /* point to next */
363        /* get all digits after decimal point */
364        while (_isdigit(s[i]))
365        {
366            exp0--;
367            m = 10.0*m + (float)(s[i] - 48);    /* 48 is '0' */
368            i++;                                /* point to next */
369        }
370    }
371
372    /* check for e/E exponential form */
373    if ((s[i] == 101) || (s[i] == 69))      /* 101 is 'e', 69 is 'E' */
374    {
375        i++;                                /* point to next */
376        /* check for exponent sign */
377        if (s[i] == 45)                     /* 45 is '-' */
378        {
379            expsign = 1;                    /* flag negative exponent */
380            i++;                            /* point to next */
381        }
382        else if (s[i] == 43)                /* 43 is '+' */
383            i++;                            /* point to next */
384
385        /* now get exponent */
386        while (_isdigit(s[i]))
387        {
388            eexp = eexp*10 + s[i] - 48;     /* 48 is '0' */
389            i++;                            /* point to next */
390        }
391
392        /* adjust exponent sign */
393        if (expsign)
394            eexp = -eexp;                   /* make it negative */
395    }
396
397    /* compute absolute value of final float */
398    exp0 += eexp;
399    while (exp0 < 0)                    /* for negative exponents */
400    {
401        m = m / 10.0;
402        exp0++;
403    }
404    while (exp0 > 0)                    /* for positive exponents */
405    {
406        m = m * 10.0;
407        exp0--;
408    }
409
410    /* adjust final float sign from mantissa */
411    if (sign)
412        return (-m);                    /* negative */
413    else
414        return (m);                     /* positive */
415}
416
417void disable_pcode_serial()
418/* necessary to receive characters using serial_getchar */
419{
420   poke(0x3c, 1);
421}
422
423void reenable_pcode_serial()
424/* necessary for IC to interact with board again */
425{
426   poke(0x3c, 0);
427}
428
429/*
430======================================================================
431For sending and receiving single bytes, you can use Randy's IC code:
432*/
433
434void serial_putchar(int c)
435{
436   while (!(peek(0x102e) & 0x80));  /* wait until serial transmit empty
437*/
438   poke(0x102f, c);  /* send character */
439}
440
441int serial_getchar()
442{
443   while (!(peek(0x102e) & 0x20)); /* wait for received character */
444   return peek(0x102f);
445}
446
447void main(void) {
448        int pos, c = ' ', var1, var2;
449        float f1, f2;
450        char buffer[80];
451        disable_pcode_serial();
452        beep();
453        printf("\nSerial IO Mode!");
454        printf("Listening...");
455        msleep(500L);
456        while (c != 'q') {
457                c = serial_getchar();
458/*              printf("[%d] ", c); */
459                if (c == MOTOR) {
460                        var1 = serial_getchar();
461                        var2 = serial_getchar() - 100;
462                        motor(var1, var2);
463                } else if (c == AO) {
464                        ao();
465                } else if (c == ANALOG) {
466                        var1 = serial_getchar();
467                        serial_putchar(analog(var1));
468                } else if (c == DIGITAL) {
469                        var1 = serial_getchar();
470                        serial_putchar(digital(var1));
471                } else if (c == PRINTF) {
472                        pos = 0;
473                        while (c != 0) {
474                                buffer[pos++] = c;
475                                c = serial_getchar();
476                        }
477                        buffer[pos] = '\0';
478                        printf(buffer);
479                } else if (c == TONE) {
480                        pos = 0;
481                        c = serial_getchar();
482                        while (c != 0) {
483                                buffer[pos++] = c;
484                                c = serial_getchar();
485                        }
486                        buffer[pos] = '\0';
487                        f1 = atof(buffer);
488                        pos = 0;
489                        c = serial_getchar();
490                        while (c != 0) {
491                                buffer[pos++] = c;
492                                c = serial_getchar();
493                        }
494                        buffer[pos] = '\0';
495                        f2 = atof(buffer);
496                        tone(f1, f2);
497                } else if (c == START_BUTTON) {
498                        serial_putchar(start_button());
499                } else if (c == STOP_BUTTON) {
500                        serial_putchar(stop_button());
501                } else if (c == BEEP) {
502                        beep();
503                } else if (c == KNOB) {
504                        serial_putchar(knob());
505                }
506      }
507        reenable_pcode_serial();
508        printf("\nHB Mode!");
509}
510
511//************** END: serial_HB.c
512
513From goldt@et.byu.edu  Tue Jul  7 20:33:03 1998
514Received: from aleve.media.mit.edu by hub.media.mit.edu; (5.65v3.2/1.1/06Jun95-8.2MPM)
515	id AA32480; Tue, 7 Jul 1998 20:33:03 -0400
516Received: from wormwood.ee.byu.edu (wormwood.ee.byu.edu [128.187.30.54])
517	by aleve.media.mit.edu (8.8.7/ML970927) with ESMTP id TAA30127
518	for <handyboard@media.mit.edu>; Tue, 7 Jul 1998 19:48:43 -0400 (EDT)
519Received: from wormwood (localhost [127.0.0.1]) by wormwood.ee.byu.edu with SMTP (8.7.6/8.7.1) id RAA26916 for <handyboard@media.mit.edu>; Tue, 7 Jul 1998 17:48:42 -0600 (MDT)
520Sender: goldt@ee.byu.edu
521Message-Id: <35A2B3D9.1260@et.byu.edu>
522Date: Tue, 07 Jul 1998 17:48:41 -0600
523From: "Timothy B. Gold" <goldt@et.byu.edu>
524X-Mailer: Mozilla 3.04Gold (X11; I; HP-UX B.10.20 9000/780)
525Mime-Version: 1.0
526To: handyboard@media.mit.edu
527Subject: Interrupt Handler for Serial communication
528Content-Type: multipart/mixed; boundary="------------18CC6AC44E2E"
529
530This is a multi-part message in MIME format.
531
532--------------18CC6AC44E2E
533Content-Type: text/plain; charset=us-ascii
534Content-Transfer-Encoding: 7bit
535
536Here's a bit of code that will buffer incoming serial information so
537that no information will be lost when transmitting to the handy board.
538There are two files: serial_isr.c and serial_isr.asm.  You'll need to
539assemble the .asm file using as11_ic, and then both the .c file and the
540.icb file need to be loaded onto the handy board.  I'm sure improvements
541could be made to the code to clean it up a little, but it's a start (and
542I haven't had any problems with it yet).  Enjoy!
543
544--------------18CC6AC44E2E
545Content-Type: text/plain; charset=us-ascii; name="serial_isr.c"
546Content-Transfer-Encoding: 7bit
547Content-Disposition: inline; filename="serial_isr.c"
548
549/* C program to read serial port with interrupt service routine */
550/* First version:  Written by Anton Wirsch   20 Nov 1997 */
551
552/*
553
554   Second Version: Written by Tim Gold   27 May 1998
555                              BYU Robotics Lab
556			      goldt@et.byu.edu
557
558     Really, the only thing left from the original code are a few
559     lines in the .asm file.  Everything else I pretty much had to
560     rewrite from scratch to get it to work the way I wanted to.
561     But the orignal code by Anton was a very helpful starting point.
562
563  Needed files:   serial_isr.c
564                  serial_isr.icb
565		  serial_isr.asm (needed to change the buffer size)
566
567  The buffer size here is 32 bytes (probably much larger than it needs
568  to be.)  To change the buffer size, do the following:
569              1. Change the BUFFER_SIZE constant below to the
570	         desired number of bytes.
571	      2. Edit the line(s) in the serial_isr.asm which contain
572	         the word "EDIT" in the comment so that the value
573		 matches that of BUFFER_SIZE.
574	      3. Recreate the serial_isr.icb file by typing the following:
575	         > as11_ic serial_isr.asm
576
577 */
578
579
580
581
582#define BUFFER_SIZE 32  /* change buffer size here  -- see above */
583
584/* various constants used by the program... */
585#define BAUD 0x102b   /* baud rate set to 9600 */
586#define SCCR2 0x102d
587#define SCCR1 0x102c
588#define SCSR 0x102e
589#define SCDR 0x102f
590
591int buffer[BUFFER_SIZE]; /* this is the actual buffer */
592
593
594void initSerial()
595{
596  /* Call this routine to activate the serial interrupt handler. */
597  int i,temp;
598
599  /* clear out buffer */
600  for(i=0; i<BUFFER_SIZE; i++)
601    buffer[i] = 0;
602
603  /* clear vairous flags */
604  DATA_FLAG = 0;
605  INCOMING = 0;
606  CURRENT = 0;
607
608  /* pass address of buffer to interrupt routine */
609  buffer_ptr = (int) buffer;
610  BASE_ADDR = (int) buffer;
611
612  /* activate interrupt routine */
613  temp = peek(SCCR2);
614  temp |= 0x24;
615  poke(SCCR2, temp);
616  poke(0x3c, 1);
617}
618
619void closeSerial()
620{
621  int temp;
622
623  /* deactivate the interrupt routine */
624  temp = peek(SCCR2);
625  temp &= 0xdf;
626  poke(SCCR2, temp);
627  READ_SERIAL = 0x0000;
628  poke(0x3c, 0);
629
630}
631
632void serialPutChar(int c)
633{
634  /* call this function to write a character to the serial port */
635
636  while (!(peek(0x102e) & 0x80));
637  poke(0x102f, c);
638
639}
640
641
642int dataAvailable()
643{
644  /* This function can be used to check to see if any data is available */
645  return DATA_FLAG;
646}
647
648
649int serialGetChar()
650{
651  /* Create blocking getchar for serial port... */
652  int return_char;
653
654  /* loop until data is available */
655  while(!DATA_FLAG);
656
657  /* get the character to return */
658  return_char = buffer[CURRENT];
659
660  /* check for wrap around... */
661  CURRENT++;
662  if(CURRENT == BUFFER_SIZE)
663    CURRENT = 0;
664  if(CURRENT == INCOMING)
665    DATA_FLAG = 0;
666  return return_char;
667
668}
669
670
671
672
673
674--------------18CC6AC44E2E
675Content-Type: text/plain; charset=us-ascii; name="serial_isr.asm"
676Content-Transfer-Encoding: 7bit
677Content-Disposition: inline; filename="serial_isr.asm"
678
679/* This sets up the serial interrupt service routine */
680/* First Version:	Written by Anton L. Wirsch  20 Nov 1997 */
681/* Second Version: Written by Tim Gold   27 May 1998
682                              BYU Robotics Lab
683		              goldt@et.byu.edu
684
685     Really, the only thing left from the original code are a few
686     lines in the .asm file.  Everything else I pretty much had to
687     rewrite from scratch to get it to work the way I wanted to.
688     But the orignal code by Anton was a very helpful starting point.
689
690  Needed files:   serial_isr.c
691                  serial_isr.icb
692		  serial_isr.asm (needed to change the buffer size)
693
694  The buffer size here is 32 bytes (probably much larger than it needs
695  to be.)  To change the buffer size, do the following:
696              1. Change the BUFFER_SIZE constant in serial_isr.c to the
697	         desired number of bytes.
698	      2. Edit the line in this fils which contains
699	         the word "EDIT" in the comment so that the value
700		 matches that of BUFFER_SIZE.
701	      3. Recreate the serial_isr.icb file by typing the following:
702	         > as11_ic serial_isr.asm
703*/
704
705
706/* change this line to match your library path... */
707#include "/usr/local/ic/libs/6811regs.asm"
708
709        ORG MAIN_START
710variable_CURRENT:
711	FDB    00        * ptr to next data to be read by user
712
713variable_INCOMING:
714        FDB    00        * number of bytes received (circular count)
715
716variable_BASE_ADDR:
717	FDB    00        * base address of buffer (to be set by init routine)
718
719variable_DATA_FLAG:
720        FDB    00        * flag set when data is available
721
722variable_buffer_ptr:
723        FDB    00        * pointer to CURRENT buffer
724
725subroutine_initialize_module:
726/* change this line to match your library path... */
727#include "/usr/local/ic/libs/ldxibase.asm"
728
729        ldd     SCIINT,X
730        std     interrupt_code_exit+1
731        ldd     #interrupt_code_start
732        std     SCIINT,X
733
734	rts
735
736interrupt_code_start:
737        ldad    variable_INCOMING       * store INCOMING into AB
738        cmpb    #00                     * compare B with 0
739        bhi     skip                    * goto "skip" if (B > 0)
740        ldx     variable_BASE_ADDR      * STORE ADDRESS OF ARRY IN X
741        inx                             * SKIP THE FIRST (?)
742        inx                             * TWO BYTES      (?)
743        inx                             * OFFSET TO THE HIGHER BYTE (?)
744        stx     variable_buffer_ptr     * SAVE PTR VALUE
745        bra     cont
746
747skip:
748        ldx     variable_buffer_ptr     * load buffer pointer into x
749cont:
750        ldad    variable_INCOMING       * load INCOMING into AB
751        incb                            * increment INCOMING
752	cmpb    #32                     * compare B and 32   --EDIT TO CHANGE BUFFER SIZE--
753	beq     reset_count             * if a=32, goto reset_count
754	bra     cont1
755reset_count:
756	ldad    #00                     * set count to zero
757cont1:
758        stad    variable_INCOMING       * store AB into INCOMING
759
760        ldab    SCSR                    * load SCSR (SCI status register) into B (why?)
761        ldab    SCDR                    * load SCSR (SCI data register) into B
762
763        stab    ,X                      * store data in array
764        inx                             * increment by two bytes
765        inx
766        stx     variable_buffer_ptr     * save the pointer value
767	ldad    #01                     * load 1 into AB
768	stad    variable_DATA_FLAG      * store AB into DATA_FLAG (indicating data is available)
769interrupt_code_exit:
770        jmp     $0000
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787--------------18CC6AC44E2E--
788
789
790
791From aarone@sirius.com  Wed Jul  1 02:44:06 1998
792Received: from aleve.media.mit.edu by hub.media.mit.edu; (5.65v3.2/1.1/06Jun95-8.2MPM)
793	id AA22669; Wed, 1 Jul 1998 02:44:06 -0400
794Received: from mail3.sirius.com (mail3.sirius.com [205.134.253.133])
795	by aleve.media.mit.edu (8.8.7/ML970927) with ESMTP id CAA13214
796	for <handyboard@media.mit.edu>; Wed, 1 Jul 1998 02:01:55 -0400 (EDT)
797Received: from edsinger (ppp-asfm03--126.sirius.net [205.134.240.126])
798	by mail3.sirius.com (8.8.7/Sirius-8.8.7-97.08.12) with ESMTP id XAA26862
799	for <handyboard@media.mit.edu>; Tue, 30 Jun 1998 23:01:54 -0700 (PDT)
800Message-Id: <199807010601.XAA26862@mail3.sirius.com>
801From: "Aaron Edsinger" <aarone@sirius.com>
802To: "handy" <handyboard@media.mit.edu>
803Subject: Serial Interface
804Date: Wed, 1 Jul 1998 02:06:39 +0100
805X-Msmail-Priority: Normal
806X-Priority: 3
807X-Mailer: Microsoft Internet Mail 4.70.1162
808Mime-Version: 1.0
809Content-Type: text/plain; charset=ISO-8859-1
810Content-Transfer-Encoding: 7bit
811
812Hello,
813	I've been having some problems using my HandyBoard to talk directly to my
814PC via the serial interface.  I disable Interactive C and then Poke() and
815Peek() as has been described on this list.  I  send short character strings
816from my PC to the HandyBoard under Windows 95.  If I send strings longer
817than 2 characters, it seems that some of the characters get lost. This
818behavior seems to be affected by repositioning or slightly modifying the
819code, suggesting perhaps a timing issue.
820
821Why might this be?  Is there any way to check for an error situation?
822
823Thanks for any help,
824		Aaron
825From cmcmanis@freegate.com  Thu Jul 16 03:13:49 1998
826Received: from aleve.media.mit.edu by hub.media.mit.edu; (5.65v3.2/1.1/06Jun95-8.2MPM)
827	id AA23518; Thu, 16 Jul 1998 03:13:49 -0400
828Received: from hq.freegate.com ([208.226.86.1])
829	by aleve.media.mit.edu (8.8.7/ML970927) with SMTP id CAA18991
830	for <handyboard@media.mit.edu>; Thu, 16 Jul 1998 02:17:47 -0400 (EDT)
831Received: (qmail+freegate 6968 invoked by alias); 16 Jul 1998 06:17:38 -0000
832Received: from dialip-04.hq.freegate.com (HELO freegate.com) (208.226.86.222)
833  by hq.freegate.com with SMTP; 16 Jul 1998 06:17:38 -0000
834Message-Id: <35AD9BDA.3A9EC8F7@freegate.com>
835Date: Wed, 15 Jul 1998 23:21:14 -0700
836From: Chuck McManis <cmcmanis@freegate.com>
837Reply-To: cmcmanis@freegate.com
838Organization: Freegate Corporation
839X-Mailer: Mozilla 4.04 [en] (Win95; I)
840Mime-Version: 1.0
841To: David Rye <rye@mech.eng.usyd.edu.au>
842Cc: handyboard@media.mit.edu
843Subject: Re: Handyboard/RWP without p-code
844References: <3.0.32.19980716151646.00809d20@nemo.mech.eng.usyd.edu.au>
845Content-Type: text/plain; charset=us-ascii
846Content-Transfer-Encoding: 7bit
847
848Get a copy of icc11 v5.0 or later (from www.imagecraft.com) and use the
849handyboard library from their site.
850
851--Chuck
852
853From Scott.Seaton@Aus.Sun.COM  Thu Jul 16 03:42:38 1998
854Received: from aleve.media.mit.edu by hub.media.mit.edu; (5.65v3.2/1.1/06Jun95-8.2MPM)
855	id AA24945; Thu, 16 Jul 1998 03:42:38 -0400
856Received: from mercury.Sun.COM (mercury.Sun.COM [192.9.25.1])
857	by aleve.media.mit.edu (8.8.7/ML970927) with SMTP id CAA07415
858	for <handyboard@media.mit.edu>; Thu, 16 Jul 1998 02:44:58 -0400 (EDT)
859Received: from Aus.Sun.COM ([129.158.80.6]) by mercury.Sun.COM (SMI-8.6/mail.byaddr) with SMTP id XAA29734; Wed, 15 Jul 1998 23:44:52 -0700
860Received: from war.Aus.Sun.COM by Aus.Sun.COM id QAA03011
861	(SMI-8.6/SMI-4.1 for <>); Thu, 16 Jul 1998 16:44:50 +1000
862Received: from drone by war.Aus.Sun.COM (SMI-8.6/SMI-SVR4)
863	id QAA10921; Thu, 16 Jul 1998 16:44:20 +1000
864Message-Id: <199807160644.QAA10921@war.Aus.Sun.COM>
865Date: Thu, 16 Jul 1998 16:41:56 +1000 (EST)
866From: Scott Seaton - Systems Consultant - ESG <Scott.Seaton@Aus.Sun.COM>
867Reply-To: Scott Seaton - Systems Consultant - ESG <Scott.Seaton@Aus.Sun.COM>
868Subject: Re: Handyboard/RWP without p-code
869To: handyboard@media.mit.edu, rye@mech.eng.usyd.edu.au
870Mime-Version: 1.0
871Content-Type: MULTIPART/mixed; BOUNDARY=Troop_of_Baboons_752_000
872X-Mailer: dtmail 1.2.0 CDE Version 1.2 SunOS 5.6 sun4u sparc
873
874--Troop_of_Baboons_752_000
875Content-Type: TEXT/plain; charset=us-ascii
876Content-MD5: i/HKSIa/Vk0mZT5ml+q21A==
877
878Hi
879
880I suggest that you contact ImageCraft.
881http://www.imagecraft.com/software/index.html  or  info@imagecraft.com
882
883They have a C compiler for 68HC11 CPU's that will do what you want, including a
884library for the HandyBoard (see attached e-mail) !
885
886I have no affiliation with ImageCraft (other than as a satisfied customer).
887
888Hope this helps
889Scott
890==============================================================================
891 ,-_|\       Scott Seaton - Sun Enterprise Services -  Systems Consultant
892/     \  Sun Microsystems Australia Pty Ltd  E-mail : scott.seaton@aus.sun.com
893\_,-\_+  828 Pacific Highway                  Phone : +61 2 9844 5381
894     v   Gordon, N.S.W., 2072, AUSTRALIA        Fax : +61 2 9844 5161
895==============================================================================
896
897--Troop_of_Baboons_752_000
898Content-Type: MESSAGE/rfc822; name=Mailbox
899Content-Description: Mailbox
900
901From someone@imagecraft.com  Fri Jul 10 18:59:26 1998
902Return-Path: <icc11-list-errors@lists.best.com>
903Received: from Aus.Sun.COM by war.Aus.Sun.COM (SMI-8.6/SMI-SVR4)
904	id SAA14426; Fri, 10 Jul 1998 18:59:26 +1000
905Received: from earth.sun.com by Aus.Sun.COM id SAA24238
906	(SMI-8.6/SMI-4.1 for <<scott.seaton@aus.sun.com>>); Fri, 10 Jul 1998 18:59:48 +1000
907Received: from iisesun.iise.CSIRO.AU (iisesun.iise.csiro.au [130.155.5.44])
908	by earth.sun.com (8.8.8/8.8.8) with SMTP id BAA18609
909	for <scott.seaton@aus.sun.com>; Fri, 10 Jul 1998 01:59:44 -0700 (PDT)
910Received: from lists1.best.com (lists1.best.com [206.86.8.15]) by iisesun.iise.CSIRO.AU (SMI-8.6/8.6.12-IISE-SWA) with ESMTP id SAA25847 for <sseaton@iise.csiro.au>; Fri, 10 Jul 1998 18:49:31 +1000
911Received: (from daemon@localhost) by lists1.best.com (8.9.0/8.8.BEST) id BAA15320 for icc11-list-errors@lists.best.com; Fri, 10 Jul 1998 01:04:34 -0700 (PDT)
912Message-Id: <199807100804.BAA15320@lists1.best.com>
913From: Christina Willrich & Richard Man <someone@imagecraft.com>
914Subject: icc11 Handyboard library available
915Date: Fri, 10 Jul 1998 00:58:49 -0700
916BestServHost: lists.best.com
917MIME-Version: 1.0
918Content-Type: text/plain; charset="us-ascii"
919Sender: icc11-list-errors@lists.best.com
920Errors-To: icc11-list-errors@lists.best.com
921Reply-To: icc11-list@lists.best.com
922To: icc11-list@lists.best.com
923content-length: 399
924Status: RO
925X-Status: $$$$
926X-UID: 0000000001
927
928At long last, I dusted off Chuck McManis Handyboard library and ported it
929to V5. No reason why it can't work with V4.5 either ;-) Anyway, to try it
930out, point your browser to
931
932ftp://ftp.imagecraft.com/pub/libhb.zip
933
934Chuck really did a great job with the LCD. There are commands to scroll,
935move etc. Make sure you try the lcdtest2.c test.
936
937// richard
938someone@imagecraft.com http://www.imagecraft.com
939
940
941--Troop_of_Baboons_752_000--
942
943From dakott@alpha.delta.edu  Wed Jul  1 05:33:51 1998
944Received: from aleve.media.mit.edu by hub.media.mit.edu; (5.65v3.2/1.1/06Jun95-8.2MPM)
945	id AA20653; Wed, 1 Jul 1998 05:33:51 -0400
946Received: from alpha.delta.edu (alpha.delta.edu [161.133.129.3])
947	by aleve.media.mit.edu (8.8.7/ML970927) with SMTP id EAA12514
948	for <handyboard@media.mit.edu>; Wed, 1 Jul 1998 04:41:22 -0400 (EDT)
949Received: from pm295-18.dialip.mich.net by alpha.delta.edu; (5.65v3.0/1.1.8.2/06Jan97-0932AM)
950	id AA31111; Wed, 1 Jul 1998 04:44:45 -0400
951Received: from kott.my.domain (dakott@kott.my.domain [192.168.0.1])
952	by kott.my.domain (8.8.8/8.8.5) with SMTP id WAA20239;
953	Tue, 30 Jun 1998 22:34:32 -0400 (EDT)
954Date: Tue, 30 Jun 1998 22:34:31 -0400 (EDT)
955From: David Kott <dakott@alpha.delta.edu>
956Sender: dakott@kott.my.domain
957To: brian-c@technologist.com
958Cc: handyboard@media.mit.edu
959Subject: Re: microcontroller
960In-Reply-To: <199806291430.KAA07909@web01.globecomm.net>
961Message-Id: <Pine.BSF.3.96.980630222514.20212A-100000@kott.my.domain>
962Mime-Version: 1.0
963Content-Type: TEXT/PLAIN; charset=US-ASCII
964
965On Mon, 29 Jun 1998 brian-c@technologist.com wrote:
966
967> -I'd like to say thanks to all the folks who replied
968> to my question on the microcontroller speeds.
969>
970> Here's another general question about them though.
971> Should any unused pins be left open or should they
972> be grounded?
973>
974
975Eeeeeeeeeeek!  Outputs left floating, CMOS inputs taken to ground with a
9764.7K resistor... presuming, of course, that a Logic 0 on that input won't
977generate adverse effects, e.g. a grounded active low interrupt line
978might be a problem.  Such inputs should be taken to +5 with a 4.7K
979resistor.
980
981Floating CMOS inputs have a tendency to oscillate with the merest whisper
982of a voltage.
983
984TTL inputs may be left floating.
985
986Driving an output externally will just heat up your CPU.. or worse.
987
988							-d
989
990--
991 The box said "Requires Windows 95/NT or better"...
992                                                 So I got Unix.
993
994Free the Source.  Free your Computer... http://www.FreeBSD.org
995                                          http://www.NetBSD.org
996                                            http://www.OpenBSD.org
997
998From rshirk@sfgate.com  Sun Mar 22 01:52:45 1998
999Received: from aleve.media.mit.edu by hub.media.mit.edu; (5.65v3.2/1.1/06Jun95-8.2MPM)
1000	id AA06355; Sun, 22 Mar 1998 01:52:45 -0500
1001Received: from cyber.sfgate.com (cyber.sfgate.com [198.93.154.11])
1002	by aleve.media.mit.edu (8.8.7/ML970927) with SMTP id BAA23676
1003	for <handyboard@media.mit.edu>; Sun, 22 Mar 1998 01:08:09 -0500 (EST)
1004Received: from localhost by cyber.sfgate.com  with smtp
1005	(Smail3.2 #1) id m0yGduz-000Is1C; Sat, 21 Mar 1998 22:07:37 -0800 (PST)
1006Date: Sat, 21 Mar 1998 22:07:37 -0800 (PST)
1007From: Richard <rshirk@sfgate.com>
1008X-Sender: rshirk@cyber
1009To: handyboard@media.mit.edu
1010Subject: Frob nobs and IR
1011Message-Id: <Pine.SOL.3.96.980321212443.21628C-200000@cyber>
1012Mime-Version: 1.0
1013Content-Type: MULTIPART/MIXED; BOUNDARY="-559023410-1804928587-890546857=:21628"
1014
1015  This message is in MIME format.  The first part should be readable text,
1016  while the remaining parts are likely unreadable without MIME-aware tools.
1017  Send mail to mime@docserver.cac.washington.edu for more info.
1018
1019---559023410-1804928587-890546857=:21628
1020Content-Type: TEXT/PLAIN; charset=US-ASCII
1021
1022OK...Im now pretty happy with states of things but I still have a few
1023questions I hope you can help me answer. The code attached works and
1024everything, but only when i take the bit about playing the songs out.
1025
1026problem 1)
1027 It
1028keeps saying that play is undefined.  I saw that before and fixed it by
1029changing the names of the labels of the songs.  I tried it this time and
1030it didnt work...i was wondering if anyone out there knows why it does this
1031and how to correct it....
1032
1033problem 2)
1034
1035I figured out (thanks to you guys) how to work the built in IR sensor to
1036detect and act upon 4 signals. One is for behing hostile, 3 is for
1037seeking, signal 5 is when it gets annoyed, and 7 it just beeps and ignores
1038it.
1039The signal for being Hostile responds quickly and prints H on the screen
1040but the others lag and  i was wondering if you knew why this was.
1041
1042-Richard
1043
1044---559023410-1804928587-890546857=:21628
1045Content-Type: TEXT/PLAIN; charset=US-ASCII; name="xbump2.c"
1046Content-Transfer-Encoding: BASE64
1047Content-ID: <Pine.SOL.3.96.980321220737.21628D@cyber>
1048Content-Description:
1049
1050LyogVGhpcyBpcyAoc2xpZ2h0bHkgbW9kaWZpZWQpIGRlZmF1bHQgdG91Y2gg
1051bmF2aWdhdGlvbiAqLw0gICAgICAgICBjaGFyIHBuX3NvbmdbXT0gIjEjZCA0
1052ZTNyMSNmNGczcjEjZCAzZTEjZjNnMWMzYkQxZTNnMWIgOCZiMmIyYTJnMmUy
1053ZDEwZSAgICAgIDdyMSNkIDRlM3IxI2Y0ZzNyMSNkIDNlMSNmM2cxYzNiMWcz
1054YjFlIDI4JmUgRDNyMSNkIDRlM3IxI2Y0ZzNyMSNkICAgICAgM2UxI2YzZzFj
1055M2JEMWUzZzFiIDgmYjJiMmEyZzJlMmQxMGUgMTJyIFUzZTFkM2IxYTNnMSNm
1056ICAgICAgMSZiM2ExJmIzYTEmYjNhMSZiM2EgMmcyZTJkMjBlIjsNDSAgY2hh
1057ciBsdHVuZV9zb25nW109ICJVM2UxZDJjMmQyZTJkMmUyYzJkMmQyZDZkMnIg
1058M2QxYzJiMmMyZDIjYzJkMmIyYzJjMmM2YyI7DQ0Ndm9pZCBtYWluKCApDXsN
1059ICAgLyogdGltaW5nIHBhcmFtZXRlcnMgKG1pbGxpc2Vjb25kcykgKi8NICAg
1060bG9uZyByZXZlcnNlX3RpbWUgPSA1MDBMLCB0dXJuX3RpbWUgPSA1MDBMLCB0
1061dXJuYXJvdW5kX3RpbWUgPSAxMDAwTDsNICAgIHNvbnlfaW5pdCAoMSk7DSAg
1062ICBwcmludGYoIkF1dG9ub21vdXNcbiIpOw0gICAgbXNsZWVwKDUwMEwpOw0g
1063ICAgcHJpbnRmKCJSb2JvdGljXG4iKTsNICAgIG1zbGVlcCg1MDBMKTsNICAg
1064IHByaW50ZigiTmF2aWdhdGlvblxuIik7DSAgICBtc2xlZXAoNTAwTCk7DSAg
1065ICB7DSAgICAgICAgIGlmICgoIGtub2IoICkgKSA9PSAyNTUpDSAgICAgICAg
1066IHsNICAgICAgICAgICAgICAgcGxheSAocG5fc29uZyk7DSAgICAgICAgICB9
1067DSAgICAgICAgICBlbHNlIGlmICgoIGtub2IoICkgKSA9PSAwKQ0gICAgICAg
1068ICAgew0gICAgICAgICAgICAgICAgcGxheSAobHR1bmVfc29uZyk7DSAgICAg
1069ICAgICB9DSAgICAgICAgICAgICAgICBlbHNlIGlmICgoIGtub2IoICkgKSA9
1070PSAxMTYpDSAgICAgICAgICB7DSAgICAgICAgICAgICAgICBwcmludGYoIkhF
1071TExPLCBKVURHRVMhXG4iKTsNICAgICAgICAgICAgICAgIG1zbGVlcCg1MDBM
1072KTsNICAgICAgICAgIH0NICAgIH0NDSAgIHByaW50ZiggIlByZXNzIFNUQVJU
1073XG4iICk7DSAgIHN0YXJ0X3ByZXNzKCk7ICAgLyogd2FpdCAndGlsIGJ1dHRv
1074biBpcyBwcmVzc2VkICovDSAgIGJlZXAoKTsNICAgcHJpbnRmKCAiU3RhbmQg
1075YmFjay4uLlxuIiApOw0gICBzbGVlcCggMS4wICk7IA0gICAvKiBpbml0aWF0
1076ZSBmb3J3YXJkIG1vdGlvbiAqLw0gICBmZCggMiApOw0gICBmZCggMyApOw0g
1077ICB3aGlsZSggMSApICAgLyogZmVlZGJhY2sgbG9vcCAqLw0gICB7DSAgICAg
1078IGlmKCAhIGRpZ2l0YWwoIDcgKSApICAgLyogY2hlY2sgbGVmdCBidW1wZXIg
1079Ki8NICAgICAgew0gICAgICAgICAvKiByZXZlcnNlICovDSAgICAgICAgIGJl
1080ZXAoKTsNICAgICAgICAgYmsoIDIgKTsNICAgICAgICAgYmsoIDMgKTsNICAg
1081ICAgICAgbXNsZWVwKCByZXZlcnNlX3RpbWUgKTsNDSAgICAgICAgIC8qIHR1
1082cm4gcmlnaHQgKi8NICAgICAgICAgZmQoIDIgKTsNICAgICAgICAgYmsoIDMg
1083KTsNICAgICAgICAgbXNsZWVwKCB0dXJuX3RpbWUgKTsNDSAgICAgICAgIC8q
1084IHJlc2V0IGZvcndhcmQgbW90aW9uICovDSAgICAgICAgIHByaW50ZiggIjAi
1085ICk7DSAgICAgICAgIGZkKCAyICk7DSAgICAgICAgIGZkKCAzICk7DQ0gICAg
1086ICB9DQ0gICAgICBlbHNlIGlmKCAhIGRpZ2l0YWwoIDExICkgKSAgIC8qIGNo
1087ZWNrIG1pZGRsZSBidW1wZXIgKi8NICAgICAgew0gICAgICAgICAvKiByZXZl
1088cnNlICovDSAgICAgICAgIGJlZXAoKTsNICAgICAgICAgYmsoIDIgKTsNICAg
1089ICAgICAgYmsoIDMgKTsNICAgICAgICAgbXNsZWVwKCByZXZlcnNlX3RpbWUg
1090KTsNDSAgICAgICAgIC8qIHR1cm4gYXJvdW5kICovDSAgICAgICAgIGZkKCAy
1091ICk7DSAgICAgICAgIGJrKCAzICk7DSAgICAgICAgIG1zbGVlcCggdHVybmFy
1092b3VuZF90aW1lICk7DQ0gICAgICAgICAvKiByZXNldCBmb3J3YXJkIG1vdGlv
1093biAqLw0gICAgICAgICBwcmludGYoICIxIiApOw0gICAgICAgICBmZCggMiAp
1094Ow0gICAgICAgICBmZCggMyApOw0gICAgICB9DQ0gICAgICBlbHNlIGlmKCAh
1095IGRpZ2l0YWwoIDE1ICkgKSAgIC8qIGNoZWNrIHJpZ2h0IGJ1bXBlciAqLw0g
1096ICAgICB7DSAgICAgICAgIC8qIHJldmVyc2UgKi8NICAgICAgICAgYmVlcCgp
1097Ow0gICAgICAgICBiayggMiApOw0gICAgICAgICBiayggMyApOw0gICAgICAg
1098ICBtc2xlZXAoIHJldmVyc2VfdGltZSApOw0NICAgICAgICAgLyogdHVybiBs
1099ZWZ0ICovDSAgICAgICAgIGJrKCAyICk7DSAgICAgICAgIGZkKCAzICk7DSAg
1100ICAgICAgIG1zbGVlcCggdHVybl90aW1lICk7DQ0gICAgICAgICAvKiByZXNl
1101dCBmb3J3YXJkIG1vdGlvbiAqLw0gICAgICAgICBwcmludGYoICIyIiApOw0g
1102ICAgICAgICBmZCggMiApOw0gICAgICAgICBmZCggMyApOw0gICAgIH0NICAg
1103ICBlbHNlIGlmKGlyX2RhdGEoIDAgKSA9PSAxMjggKSAvKkNoZWNrIElSIHJl
1104Y2lldmVyKi8NICAgICAgew0gICAgICAgICAgcHJpbnRmKCJIIik7DSAgICAg
1105ICAgIC8qIHR1cm4gcmlnaHQgKi8NICAgICAgICAgZmQoIDIgKTsNICAgICAg
1106ICAgYmsoIDMgKTsNICAgICAgICAgbXNsZWVwKCB0dXJuX3RpbWUgKTsNICAg
1107ICAgICAgIC8qQXR0YWNrLi4uUm9ib3QgaXMgSG9zdGlsZSAqLw0gICAgICAg
1108ICAgYmVlcCgpOyANICAgICAgICAgIGZkKCAyICk7DSAgICAgICAgICBmZCgg
1109MyApOw0gICAgICAgICAgYmVlcCgpOw0gICAgIH0NICAgICBlbHNlIGlmKGly
1110X2RhdGEoIDAgKSA9PSAxMzAgKSAvKkNoZWNrIElSIHJlY2lldmVyKi8NICAg
1111ICAgew0gICAgICAgICAgcHJpbnRmKCJTIik7DSAgICAgICAgIC8qIHR1cm4g
1112cmlnaHQgKi8NICAgICAgICAgZmQoIDIgKTsNICAgICAgICAgYmsoIDMgKTsN
1113ICAgICAgICAgbXNsZWVwKCB0dXJuX3RpbWUgKTsNICAgICAgICAgIC8qUm9i
1114b3QgaXMgaW4gbG92ZSEgRG8gYSBsaWwgZGFuY2UhICovDSAgICAgICAgICBi
1115ZWVwKCk7DSAgICAgICAgICBiZWVwKCk7IA0gICAgICAgICAgZmQoIDIgKTsN
1116ICAgICAgICAgIGZkKCAzICk7DSAgICAgICAgICBtc2xlZXAoIHR1cm5fdGlt
1117ZSApOw0gICAgICAgICAgYmsoIDIgKTsNICAgICAgICAgIGJrKCAzICk7DSAg
1118ICAgICAgICBtc2xlZXAoIHJldmVyc2VfdGltZSApOyANICAgICAgICAgIC8q
1119R28gZm9yd2FyZCEqLw0gICAgICAgICAgZmQoIDIgKTsNICAgICAgICAgIGZk
1120KCAzICk7DSAgICAgICAgICBiZWVwKCk7DSAgICAgICAgICBiZWVwKCk7DSAg
1121ICAgfQ0gICAgIGVsc2UgaWYoaXJfZGF0YSggMCApID09IDEzMiApIC8qQ2hl
1122Y2sgSVIgcmVjaWV2ZXIqLw0gICAgICB7DSAgICAgICAgICBwcmludGYoIkEi
1123KTsNICAgICAgICAvKiByZXZlcnNlICovDSAgICAgICAgIGJlZXAoKTsNICAg
1124ICAgICAgYmsoIDIgKTsNICAgICAgICAgYmsoIDMgKTsNICAgICAgICAgbXNs
1125ZWVwKCByZXZlcnNlX3RpbWUgKTsNICAgICAgICAgIC8qUm9ib3QgaXMgQW5u
1126b3llZCEgVHVybnMgY29tcGxldGVseSBhcm91bmQgaW4gZGlndXN0Ki8gICAg
1127ICAgDSAgICAgICAgIGJlZXAoKTsNICAgICAgICAgYmVlcCgpOyANICAgICAg
1128ICAgYmVlcCgpOw0gICAgICAgICBmZCggMiApOw0gICAgICAgICBiayggMyAp
1129Ow0gICAgICAgICBtc2xlZXAoIHR1cm5hcm91bmRfdGltZSApOw0gICAgICAg
1130ICAgZmQoIDIgKTsNICAgICAgICAgIGZkKCAzICk7DSAgICAgICAgICBiZWVw
1131KCk7DSAgICAgICAgICBiZWVwKCk7IA0gICAgICAgICAgYmVlcCgpOw0NICAg
1132ICB9DSAgICAgZWxzZSBpZihpcl9kYXRhKCAwICkgPT0gMTM0ICkgLypDaGVj
1133ayBJUiByZWNpZXZlciovDSAgICAgIHsNICAgICAgICAgIHByaW50ZigiSSIp
1134Ow0gICAgICAgICAgLypSb2JvdCBkb2Vzbid0IGNhcmUgKi8NICAgICAgICAg
1135IGJlZXAoKTsgDSAgICAgICAgICBiZWVwKCk7DSAgICAgICAgICBiZWVwKCk7
1136IA0gICAgICAgICAgYmVlcCgpOw0gICAgICAgICAgZmQoIDIgKTsNICAgICAg
1137ICAgIGZkKCAzICk7DSAgICAgICAgICBiZWVwKCk7DSAgICAgICAgICBiZWVw
1138KCk7DSAgICAgICAgICBiZWVwKCk7IA0gICAgICAgICAgYmVlcCgpOw0gDSAg
1139ICB9DQ0gICB9DX0N
1140---559023410-1804928587-890546857=:21628--
1141
1142From wallace@theory.phys.vt.edu  Mon Jul 27 18:34:05 1998
1143Received: from aleve.media.mit.edu by hub.media.mit.edu; (5.65v3.2/1.1/06Jun95-8.2MPM)
1144	id AA00723; Mon, 27 Jul 1998 18:34:05 -0400
1145Received: from theory.phys.vt.edu (theory.phys.vt.edu [128.173.176.33])
1146	by aleve.media.mit.edu (8.8.7/ML970927) with ESMTP id RAA19984
1147	for <handyboard@media.mit.edu>; Mon, 27 Jul 1998 17:22:26 -0400 (EDT)
1148Received: from localhost (wallace@localhost)
1149	by theory.phys.vt.edu (8.8.5/8.8.5) with SMTP id RAA00312
1150	for <handyboard@media.mit.edu>; Mon, 27 Jul 1998 17:22:24 -0400 (EDT)
1151Date: Mon, 27 Jul 1998 17:22:24 -0400 (EDT)
1152From: Mark Wallace <wallace@theory.phys.vt.edu>
1153To: handyboard@media.mit.edu
1154Subject: sonar.c for the handyboard
1155Message-Id: <Pine.SOL.3.92.980727164935.159A-100000@theory.phys.vt.edu>
1156Mime-Version: 1.0
1157Content-Type: TEXT/PLAIN; charset=US-ASCII
1158
1159Hello,
1160	I have a handyboard and 6500 series poloroid ultrasonic ranging
1161system.  I have downloaded the sonar.c programs used to drive the
1162transducer for distance measurements.  There appears to be a problem, or
1163atleast I think there is, with it.  The sonar device is supposed to give
1164distances of up to 35ft but the TCNC time register is 16 bit and in the
1165program it says "if ((peekwork(0x100e)-start_time) < 0)" too much time has
1166elapsed and it returns -1.  Therefore as soon as about 32700 counts goes
1167by, that value will go negative. I believe hex goes from 0 to 32768 then
1168-32768 to -1. In this case the difference will be < 0 if the object
1169is greater then about 9 ft.  I have taken this out of the program and can
1170get accurate measurements up to atleast 30 ft but I have to look at the
1171value given and add multiples of 2^16 to it to figure out where it is.
1172Taking this out of the program also can get you stuck if you really are
1173out of range.
1174	I have looked on the motorola web pages to see about this clock
1175and it says that the clock goes till it reachs $ffff and then flags
1176somewhere that there is an overflow and then starts over.  I don't know
1177how to find out were in the chip this information might be stored.  I know
1178the TCNT time register is at 0x100e from the notes on Simplified Sonar for
1179the Handy Board but I don't know where that overflow flag is stored.  I
1180thought that maybe by setting this flag and using it in the loop you might
1181be about to get a greater distance out of you measurement.
1182	Another question I have is about IC.  I would like to display
1183numbers greater then 32000 and right now there are several int type
1184variables and normal C comands don't seem to work to make a "long" or any
1185other type that are larger then 32000.  How does IC handle larger numbers?
1186	I am only a student and don't have much experience with this stuff
1187so I would appreciate any feedback I can get on either of these problems.
1188Thanks.
1189
1190Mark Wallace
1191
1192 e-mail  mawalla3@vt.edu
1193         wallace@astro.phys.vt.edu
1194Web page http://sps1.phys.vt.edu/~mwallace/index.html
1195
1196"What a waste it would be after 4 billion tortuous years of evolution if
1197the dominant organism contrived its own self-destruction"
1198                                        Carl Sagan
1199
1200
1201From mwallace@sps1.phys.vt.edu  Mon Aug  3 12:05:51 1998
1202Received: from aleve.media.mit.edu by hub.media.mit.edu; (5.65v3.2/1.1/06Jun95-8.2MPM)
1203	id AA15988; Mon, 3 Aug 1998 12:05:51 -0400
1204Received: from sps1.phys.vt.edu (sps1.phys.vt.edu [128.173.176.53])
1205	by aleve.media.mit.edu (8.8.7/ML970927) with ESMTP id LAA12381
1206	for <handyboard@media.mit.edu>; Mon, 3 Aug 1998 11:16:53 -0400 (EDT)
1207Received: from localhost (mwallace@localhost)
1208	by sps1.phys.vt.edu (8.8.7/8.8.7) with SMTP id LAA20283;
1209	Mon, 3 Aug 1998 11:16:50 -0400
1210Date: Mon, 3 Aug 1998 11:16:50 -0400 (EDT)
1211From: Mark Wallace <mwallace@sps1.phys.vt.edu>
1212To: alf.kuchenbuch@usa.net
1213Cc: handyboard@media.mit.edu
1214Subject: Re: Polaroid trouble again
1215In-Reply-To: <35C5C521.446B@eikon.e-technik.tu-muenchen.de>
1216Message-Id: <Pine.LNX.3.96.980803105221.20258A-100000@sps1.phys.vt.edu>
1217Mime-Version: 1.0
1218Content-Type: TEXT/PLAIN; charset=US-ASCII
1219
1220	I had this same problem when I got mine a few weeks ago.  I ended up
1221putting a capacitor from pin 1 to pin 3 on U2 of the sonar driver board.
1222I also had to take out the 1k resistor from the BINH.  It kept
1223BINH at 1 V instead of Zero and that seamed to cause problems.
1224	As for the 6 ft problem,  it should be closer to 9 ft.  I think
1225the problem there is the IC code you used.  If you used the code for
1226SONAR.C from the HB web site then there is a problem with it.  What that
1227program does is take the difference in time from the internal clock.  the
1228problem is that in the code it says that if the difference between start
1229time and currnet time is negative too much time has elapsed.  Well,  this
1230has a 16 bit counter so when the difference is greater the about 32,700 it
1231becomes negative.  If you do the math, that means at about 9 ft that
1232happens so it tell you you are out of range.
1233	The way I fixed this was to slow the clock down.
1234
1235I looked up information on the motorola web page and found where the
1236prescalers were for the clock.
1237	If you want to slow it down by a factor of four you can just add
1238this line to you program in sonar_init()
1239
1240	bit_set(0x1024, 1);
1241
1242I believe bit_set(0x1024, 2); will slow it down by a factor of 8 and
1243bit_set(0x1024, 3); will slow it down by a factor of 16.
1244	There are better ways of fixing this problem but they appear much
1245more complicated.  For example the motorola chip has an overflow flag that
1246says when the internal clock flips.  You could incorporate that into your
1247code instead of slowing the clock down.  Good luck and I hope this helps.
1248
1249Mark Wallace
1250
1251 e-mail  mawalla3@vt.edu
1252         mwallace@sps1.phys.vt.edu
1253Web page http://sps1.phys.vt.edu/~mwallace/index.html
1254
1255"What a waste it would be after 4 billion tortuous years of evolution if
1256the dominant organism contrived its own self-destruction"
1257                                        Carl Sagan
1258
1259On Mon, 3 Aug 1998, Alf Kuchenbuch wrote:
1260
1261> Hi!
1262> I am having trouble with my Polaroid sonar:
1263> When I keep my HB hooked up
1264> to external power, I will only get correct readings up to 20 inches. As
1265> soon as I use battery power without hooking it up to external power, the
1266> readings are correct up to 6 feet, not more! This sound like EMI, I
1267> guess. I tried all the capacitor tricks from HB mailing list, but in
1268> vain. Do you know a fix that works?
1269>
1270> Alf H. Kuchenbuch
1271>
1272
1273
1274From mawalla3@vt.edu  Wed Aug 12 13:10:06 1998
1275Received: from aleve.media.mit.edu by hub.media.mit.edu; (5.65v3.2/1.1/06Jun95-8.2MPM)
1276	id AA07529; Wed, 12 Aug 1998 13:10:06 -0400
1277Received: from quackerjack.cc.vt.edu (root@quackerjack.cc.vt.edu [198.82.160.250])
1278	by aleve.media.mit.edu (8.8.7/ML970927) with ESMTP id MAA05729
1279	for <Handyboard@media.mit.edu>; Wed, 12 Aug 1998 12:13:53 -0400 (EDT)
1280Received: from sable.cc.vt.edu (sable.cc.vt.edu [128.173.16.30])
1281	by quackerjack.cc.vt.edu (8.8.8/8.8.8) with ESMTP id MAA20678
1282	for <Handyboard@media.mit.edu>; Wed, 12 Aug 1998 12:20:09 -0400 (EDT)
1283Received: from research10.phys.vt.edu (dhcp9.phys.vt.edu [128.173.176.166])
1284	by sable.cc.vt.edu (8.8.8/8.8.8) with SMTP id MAA05159
1285	for <Handyboard@media.mit.edu>; Wed, 12 Aug 1998 12:13:51 -0400 (EDT)
1286Message-Id: <3.0.5.32.19980812121345.00796960@mail.vt.edu>
1287X-Sender: mawalla3@mail.vt.edu (Unverified)
1288X-Mailer: QUALCOMM Windows Eudora Light Version 3.0.5 (32)
1289Date: Wed, 12 Aug 1998 12:13:45 -0400
1290To: Handyboard@media.mit.edu
1291From: Mark Wallace <mawalla3@vt.edu>
1292Subject: serial library for C++
1293Mime-Version: 1.0
1294Content-Type: text/plain; charset="us-ascii"
1295
1296Hello,
1297	I have a handy board with poloroid transducers and I am trying use the
1298results of my distance measurments in a C++ program on the computer.  I
1299have found programs on the handyboard web page that should alow the
1300handyboard to transmit information over the serial line.  What I am looking
1301for is if anyone knows were I could find a serial for Microsofts
1302Visual C++ 5.0.  I would like to find one that is free or sharware but any
1303information on any serial that will work would be appreciated.
1304Thanks.
1305Mark Wallace
1306
1307 e-mail  mawalla3@vt.edu
1308	 mwallace@sps1.phys.vt.edu
1309web page http://sps1.phys.vt.ede/~mwallace
1310
1311"What a waist it would be after 4 billion tortuous years of evolution if
1312the dominant organism contrived its own self-distruction"
1313			Carl Sagan
1314
1315
1316From aarone@sirius.com  Wed Sep 30 12:35:05 1998
1317Received: from aleve.media.mit.edu by hub.media.mit.edu; (5.65v4.0/1.1/06Jun95-8.2MPM)
1318	id AA09172; Wed, 30 Sep 1998 12:35:05 -0400
1319Received: from mail3.sirius.com (mail3.sirius.com [205.134.253.133])
1320	by aleve.media.mit.edu (8.8.7/ML970927) with ESMTP id KAA02849
1321	for <handyboard@media.mit.edu>; Wed, 30 Sep 1998 10:46:53 -0400 (EDT)
1322Received: from aarone (ppp-asfm03--129.sirius.net [205.134.240.129])
1323	by mail3.sirius.com (8.8.7/Sirius-8.8.7-97.08.12) with SMTP id HAA08635;
1324	Wed, 30 Sep 1998 07:46:49 -0700 (PDT)
1325Message-Id: <008901bdec9a$76f469d0$63f186cd@aarone.sirius.com>
1326From: "Aaron Edsinger" <aarone@sirius.com>
1327To: "Keith - Lui" <luikeith@egr.msu.edu>
1328Cc: "handy" <handyboard@media.mit.edu>
1329Subject: Re: output to file
1330Date: Wed, 30 Sep 1998 10:47:58 -0700
1331Mime-Version: 1.0
1332Content-Type: text/plain;
1333	charset="iso-8859-1"
1334Content-Transfer-Encoding: 7bit
1335X-Priority: 3
1336X-Msmail-Priority: Normal
1337X-Mailer: Microsoft Outlook Express 4.72.2106.4
1338X-Mimeole: Produced By Microsoft MimeOLE V4.72.2106.4
1339
1340Yes,
1341        Write a dos/windows client that reads the serial line and then
1342writes it to file using the C stdio library.
1343
1344
1345-----Original Message-----
1346From: Keith - Lui <luikeith@egr.msu.edu>
1347To: handyboard@media.mit.edu <handyboard@media.mit.edu>
1348Date: Wednesday, September 30, 1998 6:55 AM
1349Subject: output to file
1350
1351
1352>Dear all,
1353>
1354>I would like to output some HB data to a file, is that possible?
1355>
1356>Keith
1357>
1358
1359
1360
1361From aarone@sirius.com  Wed Aug 12 13:42:19 1998
1362Received: from aleve.media.mit.edu by hub.media.mit.edu; (5.65v3.2/1.1/06Jun95-8.2MPM)
1363	id AA13439; Wed, 12 Aug 1998 13:42:19 -0400
1364Received: from mail3.sirius.com (mail3.sirius.com [205.134.253.133])
1365	by aleve.media.mit.edu (8.8.7/ML970927) with ESMTP id MAA10630
1366	for <handyboard@media.mit.edu>; Wed, 12 Aug 1998 12:48:27 -0400 (EDT)
1367Received: from aarone (ppp-asfm05--041.sirius.net [205.134.241.41])
1368	by mail3.sirius.com (8.8.7/Sirius-8.8.7-97.08.12) with SMTP id JAA20821;
1369	Wed, 12 Aug 1998 09:48:24 -0700 (PDT)
1370Message-Id: <004401bdc62a$e8ecc8c0$70f086cd@aarone.sirius.com>
1371From: "Aaron Edsinger" <aarone@sirius.com>
1372To: "Mark Wallace" <mawalla3@vt.edu>
1373Cc: "handy" <handyboard@media.mit.edu>
1374Subject: Re: serial library for C++
1375Date: Wed, 12 Aug 1998 12:53:41 -0700
1376Mime-Version: 1.0
1377Content-Type: text/plain;
1378	charset="iso-8859-1"
1379Content-Transfer-Encoding: 7bit
1380X-Priority: 3
1381X-Msmail-Priority: Normal
1382X-Mailer: Microsoft Outlook Express 4.72.2106.4
1383X-Mimeole: Produced By Microsoft MimeOLE V4.72.2106.4
1384
1385
1386  Check out this site.  It works well.  The only problem I had was timing
1387issues when trying to read and write to the port too quickly.
1388
1389http://www.codeguru.com/show.cgi?general=/misc/misc_toc.shtml
1390
1391
1392-----Original Message-----
1393From: Mark Wallace <mawalla3@vt.edu>
1394To: Handyboard@media.mit.edu <Handyboard@media.mit.edu>
1395Date: Wednesday, August 12, 1998 9:25 AM
1396Subject: serial library for C++
1397
1398
1399>Hello,
1400> I have a handy board with poloroid transducers and I am trying use the
1401>results of my distance measurments in a C++ program on the computer.  I
1402>have found programs on the handyboard web page that should alow the
1403>handyboard to transmit information over the serial line.  What I am looking
1404>for is if anyone knows were I could find a serial library for Microsofts
1405>Visual C++ 5.0.  I would like to find one that is free or sharware but any
1406>information on any serial librarys that will work would be appreciated.
1407>Thanks.
1408>Mark Wallace
1409>
1410> e-mail  mawalla3@vt.edu
1411> mwallace@sps1.phys.vt.edu
1412>web page http://sps1.phys.vt.ede/~mwallace
1413>
1414>"What a waist it would be after 4 billion tortuous years of evolution if
1415>the dominant organism contrived its own self-distruction"
1416> Carl Sagan
1417>
1418
1419From brian-c@technologist.com  Mon Jul  6 11:54:19 1998
1420Received: from aleve.media.mit.edu by hub.media.mit.edu; (5.65v3.2/1.1/06Jun95-8.2MPM)
1421	id AA03667; Mon,  6 Jul 1998 11:54:19 -0400
1422Received: from web04.globecomm.net (web04.globecomm.net [207.51.48.104])
1423	by aleve.media.mit.edu (8.8.7/ML970927) with ESMTP id TAA30534
1424	for <handyboard@media.mit.edu>; Mon, 6 Jul 1998 19:24:28 -0400 (EDT)
1425From: brian-c@technologist.com
1426Received: (from root@localhost) by web04.globecomm.net (8.8.8/8.8.0) id TAA03097; Mon, 6 Jul 1998 11:24:27 -0400 (EDT)
1427Date: Mon, 6 Jul 1998 11:24:27 -0400 (EDT)
1428Message-Id: <199807062324.TAA03097@web04.globecomm.net>
1429Content-Type: multipart/mixed; boundary="0-0-0-0-0-0-0-0-____====$%&"
1430Mime-Version: 1.0
1431To: Terri A Mortvedt <terrim@iastate.edu>, handyboard@media.mit.edu
1432Subject: Re: Steppers
1433
1434--0-0-0-0-0-0-0-0-____====$%&
1435Content-Type: text/plain
1436Content-Transfer-Encoding: quoted-printable
1437X-MIME-Autoconverted: from 8bit to quoted-printable by aleve.media.mit.edu id TAA30534
1438
1439Dear Terri,
1440
1441If the motors turn sparatically, that means the coils
1442are probably not hooked up in the correct order. Try
1443swapping them around and see if anything improves.
1444
1445The motors you are using are the bipolar type. There=20
1446is a decent way of hooking up unipolar steppers to
1447the HB at http://www.cctc.demon.co.uk/stepper.htm
1448A basic difference between bipolar and unipolar is
1449that unipolar motors have additional wires are=20
1450connected to the power supply. Bipolars also have more
1451torque.
1452
1453Using fd(); and bk(); commands to power steppers is
1454probably a lot to handle. I recommend trying the=20
1455method found on that link. There's even sample coding.
1456You will have to modify some variables for the turn
1457functions because your turning radius varies according
1458to your distance between motors.
1459
1460I modified the step(); function to produce a gradual=20
1461increase in speed, and a gradual decrease in speed once
1462the specified steps are almost complete.=20
1463
1464I will attach my motors.c file as is.
1465
1466
1467
1468_________________________________________________
1469=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=
1470=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF
1471Brian Carvalho              [ brian-c@ieee.org ]
1472DeVRY Institute
1473New Jersey
1474_________________________________________________
1475=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=
1476=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF
1477---------------------------------------------------
1478Get free personalized email at http://www.iname.com
1479
1480--0-0-0-0-0-0-0-0-____====$%&
1481Content-Type: application/octet-stream
1482Content-disposition: inline; filename=Motors.c
1483Content-Transfer-Encoding: base64
1484
1485
1486
1487LyogTW90b3JzLmMgKi8NCg0KLyoqKiBERUNMQVJBVElPTlMgKioqLw0KDQppbnQgRk9SV0FSRFMg
1488PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2YXJpYWJsZXMgZm9yIGRpcmVj
1489dGlvbiAqLw0KaW50IEJBQ0tXQVJEUyA9IDE7DQogDQppbnQgSEFMRlRVUk4gPSA3MDsgICAgICAg
1490ICAgICAgICAgICAgICAgICAgICAgIC8qIHZhcmlhYmxlcyBmb3IgdHVybmluZyAqLw0KaW50IFFV
1491QVJURVJUVVJOID0gSEFMRlRVUk4gLyAyOw0KIA0KaW50IFJJR0hUID0gMjsgICAgICAgICAgICAg
1492ICAgICAgICAgICAgICAgICAgICAgLyogdmFsdWVzIGZvciB0dXJucyAqLw0KaW50IExFRlQgPSA4
1493Ow0KDQppbnQgcmlnaHRfbW90b3JfcG9pbnRlciA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBt
1494b3RvciBjb250cm9sIHZhbHVlcyAqLw0KaW50IGxlZnRfbW90b3JfcG9pbnRlciA9IDA7DQogDQog
1495DQppbnQgY3ljbGVfbGVuZ3RoID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBoYWxm
1496IHN0ZXBwaW5nIHZhbHVlcyAqLw0KaW50IGxlZnRfc3RlcF90YWJsZVs0XSA9IHs0OCw0OSw1MSw1
1497MH07DQppbnQgcmlnaHRfc3RlcF90YWJsZVs0XSA9IHsxOTIsMTk2LDIwNCwyMDB9Ow0KDQpsb25n
1498IFNMT1cgPSAyNUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWlsbGlzZWNv
1499bmQgcGF1c2VzICovDQpsb25nIEZBU1QgPSA4TDsNCg0KLyoqKiBGVU5DVElPTlMgKioqLw0KDQoN
1500CnZvaWQgc2V0ZmFzdChsb25nIEYpDQp7DQoJCQlGQVNUID0gRjsNCn0NCg0Kdm9pZCBzZXRzbG93
1501KGxvbmcgUykNCnsNCgkJCVNMT1cgPSBTOw0KfQ0KDQoNCnZvaWQgc3RlcHBlcnNfb3V0KHZvaWQp
1502DQp7DQoJCQlpbnQgY29udHJvbF9ieXRlID0gMDsNCgkJCWNvbnRyb2xfYnl0ZSArPSBsZWZ0X3N0
1503ZXBfdGFibGVbbGVmdF9tb3Rvcl9wb2ludGVyXTsNCgkJCWNvbnRyb2xfYnl0ZSArPSByaWdodF9z
1504dGVwX3RhYmxlW3JpZ2h0X21vdG9yX3BvaW50ZXJdOw0KCQkJcG9rZSgweDBlLGNvbnRyb2xfYnl0
1505ZSk7DQp9DQoNCnZvaWQgcmlnaHRfc3RlcChpbnQgZGlyZWN0aW9uKSAgICAgICAgICAgICAgICAg
1506IC8qIHJpZ2h0IG1vdG9yIGNvbnRyb2wgKi8NCnsNCgkJCWlmIChkaXJlY3Rpb24gPT0gRk9SV0FS
1507RFMpDQoJCQkJCSAgcmlnaHRfbW90b3JfcG9pbnRlciArPTE7DQoJCQllbHNlDQoJCQkJCSAgcmln
1508aHRfbW90b3JfcG9pbnRlciArPSAoY3ljbGVfbGVuZ3RoIC0gMSk7DQoNCgkJCXJpZ2h0X21vdG9y
1509X3BvaW50ZXIgJj0gKGN5Y2xlX2xlbmd0aCAtIDEpOw0KDQp9DQoNCnZvaWQgbGVmdF9zdGVwKGlu
1510dCBkaXJlY3Rpb24pICAgICAgICAgICAgICAgICAgIC8qIGxlZnQgbW90b3IgY29udHJvbCovDQp7
1511DQoJCQlpZiAoZGlyZWN0aW9uID09IEZPUldBUkRTKQ0KCQkJCQkgIGxlZnRfbW90b3JfcG9pbnRl
1512ciArPSAxOw0KCQkJZWxzZQ0KCQkJCQkgIGxlZnRfbW90b3JfcG9pbnRlciArPSAoY3ljbGVfbGVu
1513Z3RoIC0gMSk7DQoNCgkJCWxlZnRfbW90b3JfcG9pbnRlciAmPSAoY3ljbGVfbGVuZ3RoIC0gMSk7
1514DQoNCn0NCg0Kdm9pZCBhYm91dF9mYWNlKGludCBkaXIpICAgICAgICAgICAgICAgIC8qIDE4MCBk
1515ZWdyZWUgdHVybiBvbiBhIGRpbWUgKi8NCnsNCglpbnQgaTsNCg0KCWlmIChkaXIgPT0gUklHSFQp
1516DQoJCWZvciAoaT0wO2k8PUhBTEZUVVJOO2krKykNCgkJew0KCQkJbGVmdF9zdGVwKEZPUldBUkRT
1517KTsNCgkJCXJpZ2h0X3N0ZXAoQkFDS1dBUkRTKTsNCgkJCXN0ZXBwZXJzX291dCgpOw0KCQkJbXNs
1518ZWVwKFNMT1cpOw0KCQkJYW8oKTsNCgkJIH0NCg0KCSBlbHNlDQoJCSBmb3IgKGk9MDtpPD1IQUxG
1519VFVSTjtpKyspDQoJCSB7DQoJCQlsZWZ0X3N0ZXAoQkFDS1dBUkRTKTsNCgkJCXJpZ2h0X3N0ZXAo
1520Rk9SV0FSRFMpOw0KCQkJc3RlcHBlcnNfb3V0KCk7DQoJCQltc2xlZXAoU0xPVyk7DQoJCQlhbygp
1521Ow0KCQkgIH0NCn0NCg0Kdm9pZCByaWdodF90dXJuKCkgICAgICAgICAgICAgICAgICAgICAgIC8q
1522IDkwIGRlZ3JlZSByaWdodCB0dXJuIG9uIGEgZGltZSAqLw0Kew0KCQkJaW50IGk7DQoNCgkJCWZv
1523ciAoaT0wO2k8PVFVQVJURVJUVVJOO2krKykNCgkJCXsNCgkJCQkJICBsZWZ0X3N0ZXAoRk9SV0FS
1524RFMpOw0KCQkJCQkgIHJpZ2h0X3N0ZXAoQkFDS1dBUkRTKTsNCgkJCQkJICBzdGVwcGVyc19vdXQo
1525KTsNCgkJCQkJICBtc2xlZXAoU0xPVyk7DQoJCQkJCSAgYW8oKTsNCgkJCX0NCg0KfQ0KDQp2b2lk
1526IGxlZnRfdHVybigpICAgICAgICAgICAgICAgICAgICAgICAgLyogOTAgZGVncmVlIGxlZnQgdHVy
1527biBvbiBhIGRpbWUgKi8NCnsNCgkJCWludCBpOw0KDQoJCQlmb3IgKGk9MDtpPD1RVUFSVEVSVFVS
1528TjtpKyspDQoJCQl7DQoJCQkJCSAgbGVmdF9zdGVwKEJBQ0tXQVJEUyk7DQoJCQkJCSAgcmlnaHRf
1529c3RlcChGT1JXQVJEUyk7DQoJCQkJCSAgc3RlcHBlcnNfb3V0KCk7DQoJCQkJCSAgbXNsZWVwKFNM
1530T1cpOw0KCQkJCQkgIGFvKCk7DQoJCQl9DQp9DQoNCnZvaWQgcmlnaHRfd2hlZWwoKSAgICAgICAg
1531ICAgICAgICAgICAgICAvKiBncmFkdWFsIHJpZ2h0IHR1cm4gKi8NCnsNCgkJCWludCBpOw0KDQoJ
1532CQlmb3IgKGk9MDtpPD1IQUxGVFVSTjtpKyspDQoJCQl7DQoJCQkJCSAgbGVmdF9zdGVwKEZPUldB
1533UkRTKTsNCgkJCQkJICBzdGVwcGVyc19vdXQoKTsNCgkJCQkJICBtc2xlZXAoU0xPVyk7DQoJCQl9
1534DQp9DQoNCnZvaWQgbGVmdF93aGVlbCgpICAgICAgICAgICAgICAgICAgICAgICAvKiBncmFkdWFs
1535IGxlZnQgdHVybiAqLw0Kew0KCQkJaW50IGk7DQoNCgkJCWZvciAoaT0wO2k8PUhBTEZUVVJOO2kr
1536KykNCgkJCXsNCgkJCQkJICByaWdodF9zdGVwKEZPUldBUkRTKTsNCgkJCQkJICBzdGVwcGVyc19v
1537dXQoKTsNCgkJCQkJICBtc2xlZXAoU0xPVyk7DQoJCQl9DQp9DQoNCg0Kdm9pZCBzdGVwIChpbnQg
1538ZGlyLCBpbnQgbnVtc3RlcHMsIGludCBkZWxheSkNCnsNCiAgICAgICAgaW50IHN0ZXAsc3RwOw0K
1539ICAgICAgICBpbnQgYmVnaW49bnVtc3RlcHMvMTA7DQoJaW50IGNvbnRpbnVlOw0KICAgICAgICBs
1540b25nIGdyYWQ9KGxvbmcpYmVnaW47DQoNCglzeXN0ZW1fcHdtX29mZigpOw0KDQoJZm9yIChzdGVw
1541PTA7c3RlcDxiZWdpbjtzdGVwKyspDQoJew0KCQltc2xlZXAoZ3JhZCk7DQoJCWxlZnRfc3RlcChk
1542aXIpOw0KCQlyaWdodF9zdGVwKGRpcik7DQoJCXN0ZXBwZXJzX291dCgpOw0KCQljb250aW51ZT1z
1543dGVwOw0KICAgICAgICAgICAgICAgIGdyYWQ9Z3JhZC0xTDsNCg0KCX0NCiAgICAgICAgd2hpbGUo
1544Y29udGludWU8YmVnaW4qOSkNCgl7DQoJCW1zbGVlcCgobG9uZylkZWxheSk7DQoJCWxlZnRfc3Rl
1545cChkaXIpOw0KCQlyaWdodF9zdGVwKGRpcik7DQoJCXN0ZXBwZXJzX291dCgpOw0KCQljb250aW51
1546ZSsrOw0KICAgICAgICAgICAgICAgIHN0cD1jb250aW51ZTsNCgkgfQ0KDQogICAgICAgICB3aGls
1547ZShzdHA8bnVtc3RlcHMpDQogICAgICAgICB7DQogICAgICAgICAgICAgIGRlbGF5PWRlbGF5KzE7
1548DQogICAgICAgICAgICAgIG1zbGVlcCgobG9uZylkZWxheSk7DQogICAgICAgICAgICAgIGxlZnRf
1549c3RlcChkaXIpOw0KICAgICAgICAgICAgICByaWdodF9zdGVwKGRpcik7DQogICAgICAgICAgICAg
1550IHN0ZXBwZXJzX291dCgpOw0KICAgICAgICAgICAgICBzdHArKzsNCiAgICAgICAgIH0NCglhbygp
1551Ow0KDQp9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCg0K
1552
1553
1554--0-0-0-0-0-0-0-0-____====$%&--
1555