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