<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6504844</id><updated>2012-01-10T08:26:56.165-08:00</updated><title type='text'>My Stuff</title><subtitle type='html'>My Techiestuff.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default?start-index=101&amp;max-results=100'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>307</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6504844.post-1721757260022940350</id><published>2011-11-06T16:37:00.000-08:00</published><updated>2011-11-06T16:37:55.942-08:00</updated><title type='text'>TinyXML</title><content type='html'>&lt;pre&gt;#include &amp;ltltinyxml.h&amp;gt;&lt;br /&gt;&lt;br /&gt;// ----------------------------------------------------------------------&lt;br /&gt;// STDOUT dump and indenting utility functions&lt;br /&gt;// ----------------------------------------------------------------------&lt;br /&gt;const unsigned int NUM_INDENTS_PER_SPACE=2;&lt;br /&gt;&lt;br /&gt;const char * getIndent( unsigned int numIndents )&lt;br /&gt;{&lt;br /&gt; static const char * pINDENT="                                      + ";&lt;br /&gt; static const unsigned int LENGTH=strlen( pINDENT );&lt;br /&gt; unsigned int n=numIndents*NUM_INDENTS_PER_SPACE;&lt;br /&gt; if ( n &gt; LENGTH ) n = LENGTH;&lt;br /&gt; &lt;br /&gt; return &amp;pINDENT[ LENGTH-n ];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// same as getIndent but no "+" at the end&lt;br /&gt;const char * getIndentAlt( unsigned int numIndents )&lt;br /&gt;{&lt;br /&gt; static const char * pINDENT="                                        ";&lt;br /&gt; static const unsigned int LENGTH=strlen( pINDENT );&lt;br /&gt; unsigned int n=numIndents*NUM_INDENTS_PER_SPACE;&lt;br /&gt; if ( n &gt; LENGTH ) n = LENGTH;&lt;br /&gt; &lt;br /&gt; return &amp;pINDENT[ LENGTH-n ];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int dump_attribs_to_stdout(TiXmlElement* pElement, unsigned int indent)&lt;br /&gt;{&lt;br /&gt; if ( !pElement ) return 0;&lt;br /&gt; &lt;br /&gt; TiXmlAttribute* pAttrib=pElement-&gt;FirstAttribute();&lt;br /&gt; int i=0;&lt;br /&gt; int ival;&lt;br /&gt; double dval;&lt;br /&gt; const char* pIndent=getIndent(indent);&lt;br /&gt; printf("\n");&lt;br /&gt; while (pAttrib)&lt;br /&gt; {&lt;br /&gt;  printf( "%s%s: value=[%s]", pIndent, pAttrib-&gt;Name(), pAttrib-&gt;Value());&lt;br /&gt;  &lt;br /&gt;  if (pAttrib-&gt;QueryIntValue(&amp;ival)==TIXML_SUCCESS)    printf( " int=%d", ival);&lt;br /&gt;  if (pAttrib-&gt;QueryDoubleValue(&amp;dval)==TIXML_SUCCESS) printf( " d=%1.1f", dval);&lt;br /&gt;  printf( "\n" );&lt;br /&gt;  i++;&lt;br /&gt;  pAttrib=pAttrib-&gt;Next();&lt;br /&gt; }&lt;br /&gt; return i;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void dump_to_stdout( TiXmlNode* pParent, unsigned int indent = 0 )&lt;br /&gt;{&lt;br /&gt; if ( !pParent ) return;&lt;br /&gt; &lt;br /&gt; TiXmlNode* pChild;&lt;br /&gt; TiXmlText* pText;&lt;br /&gt; int t = pParent-&gt;Type();&lt;br /&gt; printf( "%s", getIndent(indent));&lt;br /&gt; int num;&lt;br /&gt; &lt;br /&gt; switch ( t )&lt;br /&gt; {&lt;br /&gt;  case TiXmlNode::TINYXML_DOCUMENT:&lt;br /&gt;   printf( "Document" );&lt;br /&gt;   break;&lt;br /&gt;   &lt;br /&gt;  case TiXmlNode::TINYXML_ELEMENT:&lt;br /&gt;   printf( "Element [%s]", pParent-&gt;Value() );&lt;br /&gt;   num=dump_attribs_to_stdout(pParent-&gt;ToElement(), indent+1);&lt;br /&gt;   switch(num)&lt;br /&gt;   {&lt;br /&gt;    case 0:  printf( " (No attributes)"); break;&lt;br /&gt;    case 1:  printf( "%s1 attribute", getIndentAlt(indent)); break;&lt;br /&gt;    default: printf( "%s%d attributes", getIndentAlt(indent), num); break;&lt;br /&gt;   }&lt;br /&gt;   break;&lt;br /&gt;   &lt;br /&gt;    case TiXmlNode::TINYXML_COMMENT:&lt;br /&gt;     printf( "Comment: [%s]", pParent-&gt;Value());&lt;br /&gt;     break;&lt;br /&gt;     &lt;br /&gt;    case TiXmlNode::TINYXML_UNKNOWN:&lt;br /&gt;     printf( "Unknown" );&lt;br /&gt;     break;&lt;br /&gt;     &lt;br /&gt;    case TiXmlNode::TINYXML_TEXT:&lt;br /&gt;     pText = pParent-&gt;ToText();&lt;br /&gt;     printf( "Text: [%s]", pText-&gt;Value() );&lt;br /&gt;     break;&lt;br /&gt;     &lt;br /&gt;    case TiXmlNode::TINYXML_DECLARATION:&lt;br /&gt;     printf( "Declaration" );&lt;br /&gt;     break;&lt;br /&gt;    default:&lt;br /&gt;     break;&lt;br /&gt; }&lt;br /&gt; printf( "\n" );&lt;br /&gt; for ( pChild = pParent-&gt;FirstChild(); pChild != 0; pChild = pChild-&gt;NextSibling())&lt;br /&gt; {&lt;br /&gt;  dump_to_stdout( pChild, indent+1 );&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// load the named file and dump its structure to STDOUT&lt;br /&gt;void dump_to_stdout(const char* pFilename)&lt;br /&gt;{&lt;br /&gt; TiXmlDocument doc(pFilename);&lt;br /&gt; bool loadOkay = doc.LoadFile();&lt;br /&gt; if (loadOkay)&lt;br /&gt; {&lt;br /&gt;  printf("\n%s:\n", pFilename);&lt;br /&gt;  dump_to_stdout( &amp;doc ); // defined later in the tutorial&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt;  printf("Failed to load file \"%s\"\n", pFilename);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void build_simple_doc( )&lt;br /&gt;{&lt;br /&gt; // Make xml: &lt;?xml ..&gt;&lt;Hello&gt;World&lt;/Hello&gt;&lt;br /&gt; TiXmlDocument doc;&lt;br /&gt;&lt;br /&gt; TiXmlDeclaration * declaration = new TiXmlDeclaration( "1.0", "UTF-8", "" );&lt;br /&gt; TiXmlElement * root = new TiXmlElement( "mipsdiag" );&lt;br /&gt;&lt;br /&gt; doc.LinkEndChild( declaration );&lt;br /&gt; doc.LinkEndChild( root );&lt;br /&gt;&lt;br /&gt; TiXmlElement * cpu = new TiXmlElement( "cpu" );&lt;br /&gt; root-&gt;LinkEndChild(cpu);&lt;br /&gt; &lt;br /&gt; TiXmlComment * comment = new TiXmlComment();&lt;br /&gt; comment-&gt;SetValue("-- CPU utilization --" );&lt;br /&gt; cpu-&gt;LinkEndChild(comment);&lt;br /&gt;&lt;br /&gt; TiXmlElement *cpu_res = new TiXmlElement("cpu_resouce");&lt;br /&gt; cpu_res-&gt;SetAttribute("type", "utilization");&lt;br /&gt; cpu_res-&gt;SetAttribute("units", "percent");&lt;br /&gt; cpu-&gt;LinkEndChild(cpu_res);&lt;br /&gt;&lt;br /&gt; TiXmlText *cpu_utilization = new TiXmlText("0.11");&lt;br /&gt; cpu_res-&gt;LinkEndChild(cpu_utilization);&lt;br /&gt;&lt;br /&gt; dump_to_stdout( &amp;doc );&lt;br /&gt; doc.SaveFile( "mipsdiag.xml" );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt; build_simple_doc();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-1721757260022940350?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/1721757260022940350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=1721757260022940350' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1721757260022940350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1721757260022940350'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/11/tinyxml.html' title='TinyXML'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-7636686556639228727</id><published>2011-10-18T09:11:00.000-07:00</published><updated>2011-10-18T09:11:16.376-07:00</updated><title type='text'>Ooma has dialtone, but unable to make calls</title><content type='html'>There might be a bug in Old Ooma Broadband Voip device which for some reason could not establish voice connection (although it could connect to Ooma gateway&amp;nbsp; and we could hear its unique dialtone).&lt;br /&gt;&lt;br /&gt;To fix it is actually very simple, just unplug the power to it and leave it like that for about 15 seconds, and than replug it&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-7636686556639228727?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/7636686556639228727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=7636686556639228727' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7636686556639228727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7636686556639228727'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/10/ooma-has-dialtone-but-unable-to-make.html' title='Ooma has dialtone, but unable to make calls'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-4293904677974046179</id><published>2011-10-18T09:07:00.001-07:00</published><updated>2011-10-18T09:07:49.411-07:00</updated><title type='text'>iTunes fails to upgrade iPad with error 1611</title><content type='html'>This issue was due to SIM card.&lt;br /&gt;&lt;br /&gt;Try remove the SIM card while doing upgrade.&amp;nbsp; Once the upgrade is complete, we can reinsert the SIM card.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-4293904677974046179?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/4293904677974046179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=4293904677974046179' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/4293904677974046179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/4293904677974046179'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/10/itunes-fails-to-upgrade-ipad-with-error.html' title='iTunes fails to upgrade iPad with error 1611'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-1808355981297837420</id><published>2011-09-05T17:08:00.000-07:00</published><updated>2011-09-05T17:08:40.915-07:00</updated><title type='text'>Recover file name copied from iPod/iPhone</title><content type='html'>With gtkPod, we are able to connect to iPhone/iPod and copy all the files, but the filenames are all cryptic (they are all in four letters).  With the following script, we can recover the file names and convert them into readable format in the form of "artist - album" pattern.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;FULLPATH=$1&lt;br /&gt;FILE=${FULLPATH##*/}&lt;br /&gt;FILENAME=${FILE%.*}&lt;br /&gt;EXT=${FILE##*.}&lt;br /&gt;#echo "FILENAME=$FILENAME"&lt;br /&gt;#echo "EXTension=$EXT"&lt;br /&gt;shift&lt;br /&gt;OPTS=$@&lt;br /&gt;echo filename=$FILENAME&lt;br /&gt;&lt;br /&gt;meta=`mp4info "$FULLPATH" | awk '/Metadata / {sub(/^[ \t]+/, "")};1'`&lt;br /&gt;#echo meta=$meta&lt;br /&gt;TITLE=`echo "$meta" | awk '/Metadata Name: / {gsub(/Metadata Name: /,""); print }'`&lt;br /&gt;ARTIST=`echo "$meta" | awk '/Metadata Artist: / {gsub(/Metadata Artist: /,""); print }'`&lt;br /&gt;&lt;br /&gt;if [ -z "$TITLE" ]&lt;br /&gt;then&lt;br /&gt; TITLE="unknown"&lt;br /&gt;else&lt;br /&gt; echo TITLE=$TITLE&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;if [ -z "$ARTIST" ]&lt;br /&gt;then&lt;br /&gt; ARTIST="unknown"&lt;br /&gt;else&lt;br /&gt; echo ARTIST=$ARTIST&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;TARGET="$ARTIST - $TITLE.$EXT"&lt;br /&gt;cp "$FULLPATH" "$TARGET"&lt;br /&gt;&lt;br /&gt;if [ -n $ "$TARGET" ]&lt;br /&gt;then&lt;br /&gt; rm "$FULLPATH"&lt;br /&gt;fi&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Save the above script into an executable file, say mp4fixname.&lt;br /&gt;&lt;br /&gt;To fix a filename, just run it and pass the encoded filename.&lt;br /&gt;For example, if the file name is NXJA.m4a, we just run the script as below:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;mp4fixname NXJA.m4a&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;The original filename will be replaced in artist and song name format according to metadata/tags stored in the original file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-1808355981297837420?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/1808355981297837420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=1808355981297837420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1808355981297837420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1808355981297837420'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/09/recover-file-name-copied-from.html' title='Recover file name copied from iPod/iPhone'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-8782850115324706633</id><published>2011-09-05T15:43:00.000-07:00</published><updated>2011-09-05T15:57:46.562-07:00</updated><title type='text'>Converting m4a song to mp3 format</title><content type='html'>Sometimes, I need to convert files I bought from iTunes to MP3 format. Well, actually not all songs we buy convertable to MP3.  Only non-DRM format (with m4a extension) can be converted.  The protected format with m4p extension still cannot be converted, theoritically at least (there is a hack to remove the DRM.  But that's not easy and won't be covered here).&lt;br /&gt;&lt;br /&gt;The following script converts an MP4 file to MP3 format.&lt;br /&gt;It copies all the tags stored in the original file into the target file.&lt;br /&gt;Make sure you have ffmpeg, mp4info, awk, and bc installed.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;FULLPATH=$1&lt;br /&gt;file=${FULLPATH##*/}&lt;br /&gt;FILENAME=${file%.*}&lt;br /&gt;EXT=${file##*.}&lt;br /&gt;#echo "FILENAME=$FILENAME"&lt;br /&gt;#echo "EXTension=$EXT"&lt;br /&gt;shift&lt;br /&gt;OPTS=$@&lt;br /&gt;&lt;br /&gt;if [ `echo $EXT | tr [:upper:] [:lower:]` = "m4a" ]&lt;br /&gt;then&lt;br /&gt; bitratekbps=`mp4info "$FULLPATH" | awk '$1 ~ /([0-9]+) kbps/g {print $8}'`&lt;br /&gt; bitratebps=`echo "scale=10; $bitratekbps*1000" | bc -l`&lt;br /&gt; hz=`mp4info "$FULLPATH" | awk '$1 ~ /([0-9]+) kbps/g {print $10}'`&lt;br /&gt;&lt;br /&gt; ffmpeg -i "$FILENAME.m4a" -aq 1 -ab $bitratebps -ar $hz -f mp3 \&lt;br /&gt;        -metadata major_brand="MP3" \&lt;br /&gt;         -metadata compatible_brands="MP3 libmp3lame" \&lt;br /&gt;        "$FILENAME.mp3" $OPTS&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Save the file, say, to m4a2mp3 and make it executable.&lt;br /&gt;&lt;br /&gt;To convert a song:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;m4a2mp3 song.m4a &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The target file name is the same, except the extension now is MP3.  Also, some tags/metadata are replaced to reflect the new format.  If you want to add other options, you can put that after file name.  For example: &lt;b&gt;m4a2mp3 song.m4a -metadata mymeta="converted from m4a"&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-8782850115324706633?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/8782850115324706633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=8782850115324706633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/8782850115324706633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/8782850115324706633'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/09/sometimes-i-need-to-convert-files-i.html' title='Converting m4a song to mp3 format'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-5223393113661816896</id><published>2011-08-08T04:48:00.000-07:00</published><updated>2011-08-08T14:09:24.791-07:00</updated><title type='text'>Assembly in Linux</title><content type='html'>&lt;pre&gt;section .data&lt;br /&gt;    hello:     db 'Hello world!',10    ; 'Hello world!' plus a linefeed character&lt;br /&gt;    helloLen:  equ $-hello             ; Length of the 'Hello world!' string&lt;br /&gt;&lt;br /&gt;section .text&lt;br /&gt;    global _start&lt;br /&gt;&lt;br /&gt;    _start:&lt;br /&gt;    mov ecx,5            ; display the string 5 times&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;_loop:&lt;br /&gt;    mov eax,4            ; The system call for write (sys_write)&lt;br /&gt;    mov ebx,1            ; File descriptor 1 - standard output&lt;br /&gt;    push ecx             ; save ecx as it is gonna be used as param to sys_write&lt;br /&gt;    mov ecx,hello        ; Put the offset of hello in ecx&lt;br /&gt;    mov edx,helloLen     ; helloLen is a constant, so we don't need to say&lt;br /&gt;                         ;  mov edx,[helloLen] to get it's actual value&lt;br /&gt;    int 80h              ; Call the kernel&lt;br /&gt;    pop ecx              ; restore ecx (counter)&lt;br /&gt;    loop _loop&lt;br /&gt;    mov eax,1            ; The system call for exit (sys_exit)&lt;br /&gt;    mov ebx,0            ; Exit with return code of 0 (no error)&lt;br /&gt;    int 80h&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Steps:&lt;ol&gt;&lt;li&gt;Save the file as syscall.asm  &lt;/li&gt;&lt;li&gt;Execute: &lt;b&gt;nasm -f elf syscall.asm&lt;/b&gt;  &lt;/li&gt;&lt;li&gt;Execute: &lt;b&gt;ld -s -o syscall syscall.o&lt;/b&gt;  &lt;/li&gt;&lt;li&gt;run it as: &lt;b&gt;./syscall&lt;/b&gt;   &lt;/li&gt;&lt;li&gt;To check the object file, we can use &lt;strong&gt;objdump&lt;/strong&gt;, &lt;strong&gt;elfdump&lt;/strong&gt;, or &lt;strong&gt;readelf.&lt;/strong&gt; For example:  &lt;/li&gt;&lt;/ol&gt;&lt;br&gt;&lt;pre&gt;&lt;br /&gt;$ readelf -a ./syscall.o&lt;br /&gt;ELF Header:&lt;br /&gt;  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00&lt;br /&gt;  Class:                             ELF32&lt;br /&gt;  Data:                              2's complement, little endian&lt;br /&gt;  Version:                           1 (current)&lt;br /&gt;  OS/ABI:                            UNIX - System V&lt;br /&gt;  ABI Version:                       0&lt;br /&gt;  Type:                              REL (Relocatable file)&lt;br /&gt;  Machine:                           Intel 80386&lt;br /&gt;  Version:                           0x1&lt;br /&gt;  Entry point address:               0x0&lt;br /&gt;  Start of program headers:          0 (bytes into file)&lt;br /&gt;  Start of section headers:          64 (bytes into file)&lt;br /&gt;  Flags:                             0x0&lt;br /&gt;  Size of this header:               52 (bytes)&lt;br /&gt;  Size of program headers:           0 (bytes)&lt;br /&gt;  Number of program headers:         0&lt;br /&gt;  Size of section headers:           40 (bytes)&lt;br /&gt;  Number of section headers:         7&lt;br /&gt;  Section header string table index: 3&lt;br /&gt;&lt;br /&gt;Section Headers:&lt;br /&gt;  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al&lt;br /&gt;&lt;br /&gt;  [ 0]                   NULL            00000000 000000 000000 00      0   0  0&lt;br /&gt;&lt;br /&gt;  [ 1] .data             PROGBITS        00000000 000160 00000d 00  WA  0   0  4&lt;br /&gt;&lt;br /&gt;  [ 2] .text             PROGBITS        00000000 000170 00002b 00  AX  0   0 16&lt;br /&gt;&lt;br /&gt;  [ 3] .shstrtab         STRTAB          00000000 0001a0 000031 00      0   0  1&lt;br /&gt;&lt;br /&gt;  [ 4] .symtab           SYMTAB          00000000 0001e0 000080 10      5   7  4&lt;br /&gt;&lt;br /&gt;  [ 5] .strtab           STRTAB          00000000 000260 000029 00      0   0  1&lt;br /&gt;&lt;br /&gt;  [ 6] .rel.text         REL             00000000 000290 000008 08      4   2  4&lt;br /&gt;$ readelf -a ./syscall.o&lt;br /&gt;ELF Header:s:&lt;br /&gt;  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00&lt;br /&gt;  Class:                             ELF32unknown)&lt;br /&gt;  Data:                              2's complement, little endianpecific)&lt;br /&gt;  Version:                           1 (current)&lt;br /&gt;  OS/ABI:                            UNIX - System V&lt;br /&gt;  ABI Version:                       0&lt;br /&gt;  Type:                              REL (Relocatable file)&lt;br /&gt;  Machine:                           Intel 80386&lt;br /&gt;  Version:                           0x1 0x290 contains 1 entries:&lt;br /&gt;  Entry point address:               0x0Value  Sym. Name&lt;br /&gt;  Start of program headers:          0 (bytes into file)&lt;br /&gt;  Start of section headers:          64 (bytes into file)&lt;br /&gt;  Flags:                             0x0e.&lt;br /&gt;  Size of this header:               52 (bytes)&lt;br /&gt;  Size of program headers:           0 (bytes)&lt;br /&gt;  Number of program headers:         0Vis      Ndx Name&lt;br /&gt;  Size of section headers:           40 (bytes)UND&lt;br /&gt;  Number of section headers:         7DEFAULT  ABS syscall.asm&lt;br /&gt;  Section header string table index: 3DEFAULT    1&lt;br /&gt;     3: 00000000     0 SECTION LOCAL  DEFAULT    2&lt;br /&gt;Section Headers:     0 NOTYPE  LOCAL  DEFAULT    1 hello&lt;br /&gt;  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al&lt;br /&gt;  [ 0]                   NULL            00000000 000000 000000 00      0   0  0&lt;br /&gt;  [ 1] .data             PROGBITS        00000000 000160 00000d 00  WA  0   0  4&lt;br /&gt;  [ 2] .text             PROGBITS        00000000 000170 00002b 00  AX  0   0 16&lt;br /&gt;  [ 3] .shstrtab         STRTAB          00000000 0001a0 000031 00      0   0  1&lt;br /&gt;  [ 4] .symtab           SYMTAB          00000000 0001e0 000080 10      5   7  4&lt;br /&gt;  [ 5] .strtab           STRTAB          00000000 000260 000029 00      0   0  1&lt;br /&gt;  [ 6] .rel.text         REL             00000000 000290 000008 08      4   2  4&lt;br /&gt;Key to Flags:&lt;br /&gt;  W (write), A (alloc), X (execute), M (merge), S (strings)&lt;br /&gt;  I (info), L (link order), G (group), x (unknown)&lt;br /&gt;  O (extra OS processing required) o (OS specific), p (processor specific)&lt;br /&gt;&lt;br /&gt;There are no section groups in this file.&lt;br /&gt;&lt;br /&gt;There are no program headers in this file.&lt;br /&gt;&lt;br /&gt;Relocation section '.rel.text' at offset 0x290 contains 1 entries:&lt;br /&gt; Offset     Info    Type            Sym.Value  Sym. Name&lt;br /&gt;00000011  00000201 R_386_32          00000000   .data&lt;br /&gt;&lt;br /&gt;There are no unwind sections in this file.&lt;br /&gt;&lt;br /&gt;Symbol table '.symtab' contains 8 entries:&lt;br /&gt;   Num:    Value  Size Type    Bind   Vis      Ndx Name&lt;br /&gt;     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND&lt;br /&gt;     1: 00000000     0 FILE    LOCAL  DEFAULT  ABS syscall.asm&lt;br /&gt;     2: 00000000     0 SECTION LOCAL  DEFAULT    1&lt;br /&gt;     3: 00000000     0 SECTION LOCAL  DEFAULT    2&lt;br /&gt;     4: 00000000     0 NOTYPE  LOCAL  DEFAULT    1 hello&lt;br /&gt;     5: 0000000d     0 NOTYPE  LOCAL  DEFAULT  ABS helloLen&lt;br /&gt;     6: 00000005     0 NOTYPE  LOCAL  DEFAULT    2 _loop&lt;br /&gt;     7: 00000000     0 NOTYPE  GLOBAL DEFAULT    2 _start&lt;br /&gt;&lt;br /&gt;No version information found in this file.&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-5223393113661816896?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/5223393113661816896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=5223393113661816896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5223393113661816896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5223393113661816896'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/08/assembly-in-linux.html' title='Assembly in Linux'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-183702410177986674</id><published>2011-07-05T20:07:00.000-07:00</published><updated>2011-07-05T20:07:22.001-07:00</updated><title type='text'>Relacing OpenJDK with Oracle/Sun Java SDK as default java</title><content type='html'>According to some sources, Sun/Oracle JDK or JRE is slightly faster than OpenJDK.&amp;nbsp; To install the SunJDK without removing the OpenJDK is as follow:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download the SDK from &lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u26-download-400750.html"&gt;here&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Install the SDK.&amp;nbsp; For example: &lt;b&gt;sudo rpm -Uvih &amp;lt;sdk rpmfile&amp;gt;&lt;/b&gt; or &lt;b&gt;sudo sh ./&amp;lt;sdk bin file&amp;gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Once it is installed, copy-paste the following script and execute it&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;#!/bin/sh&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;for FP in /usr/java/default/bin/* ; do&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;NAME=${FP##*/}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;echo installing $NAME&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;sudo alternatives --install /usr/bin/${NAME} ${NAME} /usr/java/default/bin/${NAME} 20000&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;alternatives --display "${NAME}" | grep "${NAME}"&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;done&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-183702410177986674?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/183702410177986674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=183702410177986674' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/183702410177986674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/183702410177986674'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/07/relacing-openjdk-with-oraclesun-java.html' title='Relacing OpenJDK with Oracle/Sun Java SDK as default java'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-7856907018245009932</id><published>2011-06-12T20:56:00.001-07:00</published><updated>2011-06-13T20:38:18.412-07:00</updated><title type='text'>New Nook v.s. Amazon Kindle</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Today I went to Barnes &amp;amp; Noble store and attracted with a Nook display.  Coincidentally, I was also carrying my Kindle with me, so now I have a chance to compare it visually.  First of all, the overall physical size of the new Nook is smaller than Kindle, because it has got rid of physical keyboard.  Instead, a visual keyboard would be displayed whenever needed.  As you might have known, this new Nook is now equipped with touch screen and I guess it is capacitive touch screen as it is very responsive.  The screen area is actually about the same as Kindle's screen.&lt;br /&gt;&lt;br /&gt;For the resolution, Kindle is tad better.  This is based on my visual check by starring at each screen very closely (I got to remove my glasses to get better visual).  Letters on Kindle are darker and smoother (but not much better), but Nook screen is whiter.  Screen refresh rate (refresh between page) is faster on the Nook.  Page buttons are located the same as Kindle (page-up and page-down are on left and right edge of the body).  For the weight, I guess Kindle is slightly lighter on my hand, but it's hard to make a correct and accurate judgment without put them on scale.&lt;br /&gt;&lt;br /&gt;Something interesting is the power life.  Nook is apparently is the winner, at least according to the sales person.  It can last up to 2 months with Wi-Fi turned off, while on Kindle is about a month.  Price wise, Kindle is a bit cheaper, especially if we're OK with ads-supplied screen-saver version of it.  On Amazon website, the ads-supported version is $114 (with no sales tax if we buy from California, and no shipping cost), while the Nook is $139 + sales tax.  The web browser on Nook is better.&lt;br /&gt;&lt;br /&gt;For the collection of books available, Amazon seems has little bit more selection, but B&amp;amp;N is catching up quickly too.  A feature that's not available on Kindle is "Rent" and "Read in store", and this would make Nook very appealing for some users who want to borrow a book from friend or just want to read a book in B&amp;amp;N store (although not all e-books can be read or rented).  I hope Amazon will match it with the similar offering.  Nook is also EPUB-compatible reader, while Amazon's Kindle uses a proprietary format (Mobile-pocket-based MOBI format with DRM added).  While many books can be converted with a tool such as Calibre (EPUB to MOBI and vice versa), others are nonconvertible.&lt;br /&gt;&lt;br /&gt;Internally, they both are based on Linux, although Nook is Android-base.  No surprise the Nook is faster because it uses more recent hardware, while Kindle has been a year old in the market.  I think Amazon is preparing a next gen one.  Just wait and see a couple of months as rumors say the will introduce the new one.  The rumor also says Kindle might have a touch screen too (some people in the internet forum wish Amazon not to arm it with a touch screen.  I don't understand what's the reason behind it yet).&lt;br /&gt;&lt;br /&gt;Overall, I guess they tie in many comparisons.  Only our preferences can tell which one to buy. If I haven't had Kindle, I might buy this new Nook because it's cute (very portable and almost fit in my shirt pocket) and has some features not available on Kindle.&lt;br /&gt;&lt;br /&gt;=-=-=-=-=&lt;br /&gt;&lt;i&gt;Powered by &lt;b&gt;&lt;a href="http://blogilo.gnufolks.org/"&gt;Blogilo&lt;/a&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-7856907018245009932?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/7856907018245009932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=7856907018245009932' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7856907018245009932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7856907018245009932'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/06/new-nook-vs-amazon-kindle.html' title='New Nook v.s. Amazon Kindle'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-5106163002478755086</id><published>2011-06-09T22:49:00.000-07:00</published><updated>2011-06-09T22:49:17.183-07:00</updated><title type='text'>Fedora 15 &amp; GNOME 3 Crash.</title><content type='html'>Some PCs have issues when installed with Fedora 15 and GNOME 3 as its desktop manager.&amp;nbsp; On my Compaq Presario R3000 labptop, I was unable to login due to crash in subsystem (gnome-shell).&amp;nbsp; When I tried to login, it display a message something like "unrecovered ...".&lt;br /&gt;&lt;br /&gt;The problem is that GNOME3 is not stable enough to be run on some machines/video cards with 3D (perhaps Nouveau driver unable to execute 100% of the required GNOME3 features?).&amp;nbsp; Some people in the Internet said that by executing the following command it should fix the issue, but not in my case:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;gsettings set org.gnome.desktop.session session-name gnome-fallback&lt;/div&gt;&lt;br /&gt;After googling around, I found a good solution:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo rpm --nodeps -e gnome-shell &lt;/div&gt;&lt;br /&gt;This has fixed my GNOME problem.&amp;nbsp; I could now login to the fallback mode (GNOME2-like)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-5106163002478755086?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/5106163002478755086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=5106163002478755086' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5106163002478755086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5106163002478755086'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/06/fedora-15-gnome-3-crash.html' title='Fedora 15 &amp; GNOME 3 Crash.'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-8041148080174341197</id><published>2011-05-25T17:31:00.000-07:00</published><updated>2011-06-12T20:31:55.676-07:00</updated><title type='text'>PlayList format and translation</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;Sandisk Sansa mp3 player may have playlists of mp3 files.  These files are stored in \PLAYLIST.&lt;br/&gt;The format of playlist is actullay in UTF-16LE.  In order to translate it to an ASCII (UTF-8) format, we can use a command line tool in Unix/Linux (available in Cygwin for Windows too).&lt;br/&gt;&lt;br/&gt;Here's an example how to convert a playlist to a text format:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;bash-3.2$ iconv -f UTF-16LE -t UTF-8 playlist.pla&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;PLP PLAYLIST&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;VERSION 1.20&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;&lt;br/&gt;&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\James Blunt\All The Lost Souls\10_-_i_can't_hear_the_music_-_all_the_lost_souls.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\James Blunt\All The Lost Souls\09_-_annie_-_all_the_lost_souls.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\James Blunt\All The Lost Souls\04_-_same_mistake_-_all_the_lost_souls.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\James Blunt\All The Lost Souls\01_-_1973_-_all_the_lost_souls.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Queen\Queen - Greatest Hits Cd1\01_-_bohemian_rhapsody_-_queen_-_greatest_hits_cd1.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Queen\Queen - Greatest Hits Cd1\05_-_bicycle_race_-_queen_-_greatest_hits_cd1.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Queen\Queen - Greatest Hits Cd1\16_-_we_will_rock_you_-_queen_-_greatest_hits_cd1.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Queen\Queen - Greatest Hits Cd1\17_-_we_are_the_champions_-_queen_-_greatest_hits_cd1.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Queen\Queen - Greatest Hits Cd2\07_-_it's_a_hard_life_-_queen_-_greatest_hits_cd2.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Queen\Queen - Greatest Hits Cd2\11_-_the_miracle_-_queen_-_greatest_hits_cd2.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Queen\Queen - Greatest Hits Cd2\15_-_friends_will_be_friends_-_queen_-_greatest_hits_cd2.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Queen\Queen - Greatest Hits Cd2\16_-_the_show_must_go_on_-_queen_-_greatest_hits_cd2.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Eric Clapton\Unplugged\07_-_layla_-_unplugged.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Rihanna\Good Girl Gone Bad\{1]03_-_don't_stop_the_music_-_good_girl_gone_bad.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\OneRepublic\Dreaming Out Loud\{1]03_-_stop_and_stare_-_dreaming_out_loud.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Colbie Caillat\Coco\{1]07_-_realize_-_coco.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Timbaland\Shock Value\{1]16_-_apologize_(feat._one_republic)_-_shock_value.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Ennio Morricone\Kill Bill Vol.2\03_-_il_tramanto_-_kill_bill_vol.2.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Charlie Feathers\Kill Bill Vol.2\04_-_cant_hardly_stand_it_-_kill_bill_vol.2.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Lole Y Manuel\Kill Bill Vol.2\05_-_tu_mira_(edit)_-_kill_bill_vol.2.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Luis Bacalov\Kill Bill Vol.2\06_-_summertime_killer_-_kill_bill_vol.2.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Alan Reeves Phil Steele And P\Kill Bill Vol.2\07_-_the_chase_-_kill_bill_vol.2.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Ennio Morricone\Kill Bill Vol.2\09_-_l_arena_-_kill_bill_vol.2.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Malcolm Mclaren\Kill Bill Vol.2\12_-_about_her_-_kill_bill_vol.2.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Chingon\Kill Bill Vol.2\14_-_malaguena_salerosa_-_kill_bill_vol.2.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;HARP, MUSIC\Meiko Kaji\Kill Bill Vol.2\15_-_urami_bushi_-_kill_bill_vol.2.mp3&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;bash-3.2$&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;Courier New&amp;apos;;'&gt;&lt;br/&gt;&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;inherit&amp;apos;;'&gt;To create a playlist, we just reverse the format and redirect the output to a file (with extension pla) and then copy the generated file to Sansa's PLAYLIST folder.  Just to remember, the path of each file is relative to MUSIC folder.&lt;/span&gt;&lt;br/&gt;&lt;span style=' font-family:&amp;apos;inherit&amp;apos;;'&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img height='1' width='1' src='https://blogger.googleusercontent.com/tracker/6504844-8041148080174341197?l=technostuff.blogspot.com'/&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-8041148080174341197?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/8041148080174341197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=8041148080174341197' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/8041148080174341197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/8041148080174341197'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/05/playlist-format-and-translation.html' title='PlayList format and translation'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-2201644833544145350</id><published>2011-05-24T14:16:00.000-07:00</published><updated>2011-05-24T14:16:57.839-07:00</updated><title type='text'>Script to find latitude and longitude</title><content type='html'>The following script utilize Yahoo geocode API to find longitude and langitude of any location.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;#!/bin/sh&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;converter="http://api.maps.yahoo.com/ajax/geocode?appid=onestep&amp;amp;qt=1&amp;amp;id=m&amp;amp;qs="&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;addr="$(echo $1 | sed 's/ /+/g')"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;values="$(curl -s $converter$addr | cut -d\" -f13,15 |sed 's/[^0-9\.\,\-]//g; s/,$//')"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;lat1=$(echo $values | cut -d, -f1)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;long1=$(echo $values | cut -d, -f2)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;echo "Lat=$lat1"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;echo "Long=$long1"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;(Save the above script to file and chmod to be executable).&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;For example:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;latlong 1465 mcdowell blvd, petaluma ca 94954&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Lat=-33.869629&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Long=151.206955&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&lt;b&gt;latlong jakarta, indonesia&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Lat=-6.17144&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Long=106.82782&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-2201644833544145350?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/2201644833544145350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=2201644833544145350' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2201644833544145350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2201644833544145350'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/05/script-to-find-latitude-and-longitude.html' title='Script to find latitude and longitude'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-266719539396304056</id><published>2011-05-03T21:58:00.000-07:00</published><updated>2011-05-03T21:58:44.236-07:00</updated><title type='text'>iMac v.s. AsusTek All-in-One PC</title><content type='html'>AsusTek All-in-One PC:&lt;br /&gt;&lt;span class="base-price"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="base-price"&gt;Price: &lt;b&gt;$1,719.26&lt;/b&gt; at 2020pc.com (free shipping + no tax)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;table class="table-style table-long-section"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="table-label table-header first" colspan="2" id="techSpecSect0"&gt;General&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Type&lt;/td&gt;  &lt;td&gt;Personal computer &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Product Form Factor&lt;/td&gt;  &lt;td&gt;All-in-one &lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Built-in Devices&lt;/td&gt;  &lt;td&gt;Touch screen &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Width&lt;/td&gt;  &lt;td&gt;22.9 in &lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Depth&lt;/td&gt;  &lt;td&gt;2 in &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Height&lt;/td&gt;  &lt;td&gt;19.5 in &lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Weight&lt;/td&gt;  &lt;td&gt;28.7 lbs &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Color&lt;/td&gt;  &lt;td&gt;Black &lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Bundled with&lt;/td&gt;  &lt;td&gt;3D glasses &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect1"&gt;Processor&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Type&lt;/td&gt;  &lt;td&gt;Intel Core i7 740QM / 1.73 GHz &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Multi-Core Technology&lt;/td&gt;  &lt;td&gt;Quad-Core &lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;64-bit Computing&lt;/td&gt;  &lt;td&gt;Yes &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Installed Qty&lt;/td&gt;  &lt;td&gt;1 &lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Max Supported Qty&lt;/td&gt;  &lt;td&gt;1 &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect2"&gt;Mainboard&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Chipset Type&lt;/td&gt;  &lt;td&gt;Mobile Intel HM55 Express &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect3"&gt;RAM&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Installed Size&lt;/td&gt;  &lt;td&gt;8 GB / 8 GB (max) &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Technology&lt;/td&gt;  &lt;td&gt;DDR3 SDRAM &lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Memory Speed&lt;/td&gt;  &lt;td&gt;1333 MHz &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Form Factor&lt;/td&gt;  &lt;td&gt;SO DIMM 204-pin &lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Configuration Features&lt;/td&gt;  &lt;td&gt;4 x 2 GB &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect4"&gt;Storage Controller&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Type&lt;/td&gt;  &lt;td&gt;1 x Serial ATA - integrated &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Controller Interface Type&lt;/td&gt;  &lt;td&gt;Serial ATA-300 &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect5"&gt;Storage&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Hard Drive&lt;/td&gt;  &lt;td&gt;1 x 1 TB - standard - Serial ATA-300 - 7200 rpm &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect6"&gt;Optical Storage&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Type&lt;/td&gt;  &lt;td&gt;DVD-Writer / BD-ROM &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect7"&gt;Card Reader&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Type&lt;/td&gt;  &lt;td&gt;Card reader &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Supported Flash Memory Cards&lt;/td&gt;  &lt;td&gt;SD Memory Card, SDXC Memory Card &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect8"&gt;Monitor&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Monitor Type&lt;/td&gt;  &lt;td&gt;LCD display - 3D Ready - TFT active matrix - Multi-Touch &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Diagonal Size&lt;/td&gt;  &lt;td&gt;23.6" &lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Max Resolution&lt;/td&gt;  &lt;td&gt;1920 x 1080 ( Full HD ) &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Widescreen Display&lt;/td&gt;  &lt;td&gt;Yes &lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Image Aspect Ratio&lt;/td&gt;  &lt;td&gt;16:9 &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect9"&gt;Graphics Controller&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Type&lt;/td&gt;  &lt;td&gt;Plug-in card &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Graphics Processor / Vendor&lt;/td&gt;  &lt;td&gt;NVIDIA GeForce GTX 460M &lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Video Memory&lt;/td&gt;  &lt;td&gt;1.5 GB &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Digital Video Standard&lt;/td&gt;  &lt;td&gt;High-Definition Multimedia Interface (HDMI) &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect10"&gt;Multimedia Functionality&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;TV Tuner Type&lt;/td&gt;  &lt;td&gt;Digital TV &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Digital TV Reception&lt;/td&gt;  &lt;td&gt;ATSC &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect11"&gt;Audio Output&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Type&lt;/td&gt;  &lt;td&gt;Sound card &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Sound Output Mode&lt;/td&gt;  &lt;td&gt;Stereo &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect12"&gt;Camera&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Form Factor&lt;/td&gt;  &lt;td&gt;Integrated &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Sensor Resolution&lt;/td&gt;  &lt;td&gt;1.3 Megapixel &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect13"&gt;Input Device&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Type&lt;/td&gt;  &lt;td&gt;Mouse, keyboard &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect14"&gt;Keyboard&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Connectivity&lt;/td&gt;  &lt;td&gt;Wireless &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect15"&gt;Mouse&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Connectivity&lt;/td&gt;  &lt;td&gt;Wireless &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect16"&gt;Audio Input&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Type&lt;/td&gt;  &lt;td&gt;Microphone &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect17"&gt;Networking&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Networking&lt;/td&gt;  &lt;td&gt;Network adapter &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Wireless LAN Supported&lt;/td&gt;  &lt;td&gt;Yes &lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Data Link Protocol&lt;/td&gt;  &lt;td&gt;Ethernet, Fast Ethernet, Gigabit Ethernet, IEEE 802.11b, IEEE 802.11g, IEEE 802.11n, Bluetooth 3.0 &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Compliant Standards&lt;/td&gt;  &lt;td&gt;IEEE 802.11b, IEEE 802.11g, IEEE 802.11n, Bluetooth 3.0 &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect18"&gt;Expansion / Connectivity&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Expansion Bays Total (Free)&lt;/td&gt;  &lt;td&gt;Internal - 3.5" &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Expansion Slots Total (Free)&lt;/td&gt;  &lt;td&gt;1 ( 0 ) x processor 4 ( 0 ) x memory - SO DIMM 204-pin &lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Interfaces&lt;/td&gt;  &lt;td&gt;4 x Hi-Speed USB - 4 pin USB Type A 1 x network - Ethernet  10Base-T/100Base-TX/1000Base-T - RJ-45 2 x SuperSpeed USB - 9 pin USB  Type A 1 x microphone - input - mini-phone 3.5 mm 1 x headphones -  output - mini-phone stereo 3.5 mm 1 x display / video - VGA input - 15  pin HD D-Sub (HD-15) 1 x audio / video - HDMI - 19 pin HDMI Type A 1 x  display / video - TV-in &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect19"&gt;Miscellaneous&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Included Accessories&lt;/td&gt;  &lt;td&gt;Remote control &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Features&lt;/td&gt;  &lt;td&gt;ASUS Super Hybrid Engine, ASUS SonicMaster &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect20"&gt;Power&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Device Type&lt;/td&gt;  &lt;td&gt;Power adapter &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Power Provided&lt;/td&gt;  &lt;td&gt;230 Watt &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect21"&gt;Operating System / Software&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;OS Provided&lt;/td&gt;  &lt;td&gt;Microsoft Windows 7 Home Premium 64-bit Edition &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Microsoft Office Preloaded&lt;/td&gt;  &lt;td&gt;Includes a pre-loaded image of select Microsoft Office 2010 suites.  Purchase an Office 2010 Product Key Card or disc to activate preloaded  software on this PC. &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect22"&gt;Environmental Standards&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;ENERGY STAR Qualified&lt;/td&gt;  &lt;td&gt;Yes &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect23"&gt;Manufacturer Warranty&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Service &amp;amp; Support&lt;/td&gt;  &lt;td&gt;1 year warranty &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Service &amp;amp; Support Details&lt;/td&gt;  &lt;td&gt;Limited warranty - 1 year &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label table-header " colspan="2" id="techSpecSect24"&gt;Universal Product Identifiers&lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;Brand&lt;/td&gt;  &lt;td&gt;ASUSTeK COMPUTER &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td class="table-label"&gt;Part Number&lt;/td&gt;  &lt;td&gt;ET2400XVT-B011E &lt;/td&gt;  &lt;/tr&gt;&lt;tr class="table-alt"&gt;  &lt;td class="table-label"&gt;GTIN&lt;/td&gt;  &lt;td&gt;00610839324255 &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Advantage: USB-3&lt;br /&gt;&lt;br /&gt;&lt;h4&gt; &lt;a href="http://store.apple.com/us/product/Z0M5?mco=MjIwNTQzODA"&gt; 21.5-inch iMac &lt;/a&gt; &lt;/h4&gt;&lt;div class="shipping-product-admin section"&gt; &lt;div class="product-admin"&gt; &lt;a class="product-remove first-link" href="http://store.apple.com/us/cart#" id="cart-c467438d-93ba-4f25-850f-f97abf619e67-remove"&gt; &lt;/a&gt;&lt;/div&gt;&lt;ul class="price-quantity"&gt;&lt;li class="quantity-price"&gt;&lt;strong&gt;$1,899.00 at Apple Store/online (free shipping, but there's sales tax)&lt;/strong&gt;&lt;/li&gt;&lt;li class="quantity-price"&gt;&lt;strong&gt;$100 discount for students&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt; &lt;a href="http://store.apple.com/us/product/Z0M5?mco=MjIwNTQzODA"&gt; 21.5-inch iMac &lt;/a&gt; &lt;/h4&gt;&lt;div class="product-admin"&gt;&lt;a class="product-save" href="http://store.apple.com/us/cart#" id="cart-c467438d-93ba-4f25-850f-f97abf619e67-saveForLater"&gt;&lt;/a&gt; &lt;/div&gt;&lt;ul class="product-shipping"&gt;&lt;li class="lead-quote"&gt; Ships: &lt;span&gt; 1-3 business days &lt;/span&gt; &lt;/li&gt;&lt;li class="part-number"&gt; Part number: &lt;span&gt;Z0M5&lt;/span&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="product-config section clearfix"&gt; &lt;div class="product-config-edit"&gt;&lt;strong&gt;Configuration&lt;/strong&gt;&lt;/div&gt;&lt;ul class="product-specs column1"&gt;&lt;li&gt;2.8GHz Quad-Core Intel Core i7&lt;/li&gt;&lt;li&gt;8GB 1333MHz DDR3 SDRAM - 2x4GB&lt;/li&gt;&lt;li&gt;1TB Serial ATA Drive&lt;/li&gt;&lt;li&gt;AMD Radeon HD 6770M 512MB GDDR5&lt;/li&gt;&lt;/ul&gt;&lt;ul class="product-specs column2"&gt;&lt;li&gt;Apple Magic Mouse&lt;/li&gt;&lt;li&gt;Apple Wireless Keyboard (English) &amp;amp; User's Guide&lt;/li&gt;&lt;li&gt;Accessory Kit&lt;/li&gt;&lt;/ul&gt;Advantage: Thunderbolt connection (10 Gbps) &lt;br /&gt;&lt;br /&gt;At the end, almost-apple-to-apple comparison (for students) is: 1799+167.11% (CA sales tax) - 1719.25 = 1966.11 - about $250 difference (that's more than the cost for 2 TB USB-3.0 external Hard Drive )&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-266719539396304056?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/266719539396304056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=266719539396304056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/266719539396304056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/266719539396304056'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/05/imac-vs-asustek-all-in-one-pc.html' title='iMac v.s. AsusTek All-in-One PC'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-5452794428700529438</id><published>2011-03-27T11:28:00.000-07:00</published><updated>2011-03-27T11:28:20.344-07:00</updated><title type='text'>NVIDIA Legacy 96.43.xx with Linux Kernel 2.6.37 or newer</title><content type='html'>The NVIDIA driver below proven to work with Linux kernel 2.6.37:&lt;br /&gt;&lt;br /&gt;&lt;a href="ftp://download.nvidia.com/XFree86/Linux-x86/96.43.19/README/chapter-01.html"&gt;ftp://download.nvidia.com/XFree86/Linux-x86/96.43.19/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just run and install the *-pkg1.run&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-5452794428700529438?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/5452794428700529438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=5452794428700529438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5452794428700529438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5452794428700529438'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/03/nvidia-legacy-9643xx-with-linux-kernel.html' title='NVIDIA Legacy 96.43.xx with Linux Kernel 2.6.37 or newer'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-7573660479514100248</id><published>2011-03-26T00:13:00.000-07:00</published><updated>2011-03-26T00:24:23.298-07:00</updated><title type='text'>Binary-tree test</title><content type='html'>&lt;pre&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdarg.h&amp;gt;&lt;br /&gt;#include &amp;lt;time.h&amp;gt;&lt;br /&gt;&lt;br /&gt;/* &lt;br /&gt; Helper function that allocates a new node with the given data and NULL left and right pointers. &lt;br /&gt;*/ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;typedef struct node {&lt;br /&gt; int data;&lt;br /&gt; struct node *left;&lt;br /&gt; struct node *right;&lt;br /&gt;} NodeT;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;NodeT* NewNode(int data);&lt;br /&gt;void BTreeLog(const char *fmt, ...);&lt;br /&gt;&lt;br /&gt;typedef int (*BTreeCompFunc)(NodeT* node, void *data);&lt;br /&gt;&lt;br /&gt;NodeT* BTreeNewNode(int data) &lt;br /&gt;{ &lt;br /&gt; NodeT* node = (NodeT*)malloc(sizeof(NodeT));    // "new" is like "malloc" &lt;br /&gt; node-&amp;gt;data = data; &lt;br /&gt; node-&amp;gt;left = NULL; &lt;br /&gt; node-&amp;gt;right = NULL;&lt;br /&gt; BTreeLog("BTreeNewNode: new node=0x%X, data=%d\n", node, data);&lt;br /&gt;    return(node); &lt;br /&gt;} &lt;br /&gt;     &lt;br /&gt;&lt;br /&gt;void BTreeLog(const char *fmt, ...)&lt;br /&gt;{&lt;br /&gt;#ifdef __ENABLE_LOG__  &lt;br /&gt; char buf[256];&lt;br /&gt; va_list ap;&lt;br /&gt; int n;&lt;br /&gt; &lt;br /&gt; va_start(ap, fmt);&lt;br /&gt; n = vsnprintf(buf, sizeof(buf), fmt, ap);&lt;br /&gt; printf("%s", buf);&lt;br /&gt; va_end(ap);&lt;br /&gt;#endif &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int BTreeCompare(NodeT* node, void *data)&lt;br /&gt;{&lt;br /&gt; if (*((int*)data) &amp;lt; node-&amp;gt;data)&lt;br /&gt;  return -1;&lt;br /&gt; if (*((int*)data) &amp;gt; node-&amp;gt;data)&lt;br /&gt;  return 1;&lt;br /&gt; return 0;&lt;br /&gt;}  &lt;br /&gt;/* &lt;br /&gt;  Give a binary search tree and a number, BTreeInserts a new node &lt;br /&gt;  with the given number in the correct place in the tree. &lt;br /&gt;  Returns the new root pointer which the caller should &lt;br /&gt;  then use (the standard trick to avoid using reference &lt;br /&gt;  parameters). &lt;br /&gt;*/ &lt;br /&gt;&lt;br /&gt;NodeT* BTreeInsert(NodeT* node, int data, BTreeCompFunc comp)&lt;br /&gt;{ &lt;br /&gt; // 1. If the tree is empty, return a new, single node &lt;br /&gt; if (NULL == node) &lt;br /&gt; { &lt;br /&gt;  BTreeLog("New Entry: %d\n", data);&lt;br /&gt;  return BTreeNewNode(data); &lt;br /&gt;    } &lt;br /&gt; else { &lt;br /&gt;  // 2. Otherwise, recur down the tree &lt;br /&gt;     if (comp(node, &amp;amp;data) == -1) {&lt;br /&gt;   /*BTreeLog("BTreeInsert: left; data=%d, node=0x%X, left=0x%X, right=0x%X\n", &lt;br /&gt;       data, node, node-&amp;gt;left, node-&amp;gt;right);&lt;br /&gt;   */    &lt;br /&gt;   node-&amp;gt;left = BTreeInsert(node-&amp;gt;left, data, comp); &lt;br /&gt;  } &lt;br /&gt;  else {&lt;br /&gt;   /* &lt;br /&gt;   BTreeLog("BTreeInsert: right; data=%d, node=0x%X, left=0x%X, right=0x%X\n", &lt;br /&gt;       data, node, node-&amp;gt;left, node-&amp;gt;right);&lt;br /&gt;   */    &lt;br /&gt;   node-&amp;gt;right = BTreeInsert(node-&amp;gt;right, data, comp);&lt;br /&gt;  } &lt;br /&gt; }&lt;br /&gt; return(node); // return the (unchanged) node pointer &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void BTreeDeleteAll(NodeT* pNode)&lt;br /&gt;{&lt;br /&gt; if (pNode)&lt;br /&gt; {&lt;br /&gt;  if (pNode-&amp;gt;left)&lt;br /&gt;  {&lt;br /&gt;   BTreeDeleteAll(pNode-&amp;gt;left);&lt;br /&gt;  } &lt;br /&gt;  if (pNode-&amp;gt;right)&lt;br /&gt;  {&lt;br /&gt;   BTreeDeleteAll(pNode-&amp;gt;right);&lt;br /&gt;  } &lt;br /&gt;  BTreeLog("BTreeDeleteAll: pNode=0x%X, data=%d\n", pNode, pNode-&amp;gt;data);&lt;br /&gt;  free(pNode);&lt;br /&gt;  //pNode-&amp;gt;left = NULL;&lt;br /&gt;  //pNode-&amp;gt;right = NULL;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;NodeT *BTreeSearch(NodeT* pNode, int data, BTreeCompFunc comp)&lt;br /&gt;{&lt;br /&gt; int cmp; &lt;br /&gt; if (pNode) {&lt;br /&gt;  cmp = comp(pNode, &amp;amp;data); &lt;br /&gt;  if (cmp == 0)&lt;br /&gt;   return pNode;&lt;br /&gt;  else &lt;br /&gt;  if (cmp == -1)&lt;br /&gt;  {&lt;br /&gt;   /* data &amp;lt; pnode-&amp;gt;data */&lt;br /&gt;   pNode = BTreeSearch(pNode-&amp;gt;left, data, comp); &lt;br /&gt;  }&lt;br /&gt;  else {&lt;br /&gt;   pNode = BTreeSearch(pNode-&amp;gt;right, data, comp);&lt;br /&gt;  } &lt;br /&gt; }&lt;br /&gt; //BTreeLog("Comp...\n");&lt;br /&gt; return pNode;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt; NodeT* root = NULL;&lt;br /&gt; NodeT* node;&lt;br /&gt; unsigned int n,i;&lt;br /&gt; int data1, data2;&lt;br /&gt; unsigned int count;&lt;br /&gt;&lt;br /&gt; srand(time(NULL));&lt;br /&gt; BTreeLog("BTree demo\n");&lt;br /&gt; n = rand() % 100;&lt;br /&gt; root = BTreeInsert(root, n, BTreeCompare);&lt;br /&gt; data2 = 4750;&lt;br /&gt; n = 10000000;&lt;br /&gt; for (i=0, count=0; i&amp;lt;n; i++)&lt;br /&gt; {&lt;br /&gt;  data1 = rand()%n;&lt;br /&gt;  /* insert unique entry */&lt;br /&gt;  if (BTreeSearch(root, data1, BTreeCompare) == NULL) {&lt;br /&gt;   BTreeInsert(root, data1, BTreeCompare);&lt;br /&gt;   count++;&lt;br /&gt;  } &lt;br /&gt; }&lt;br /&gt; BTreeInsert(root, data2, BTreeCompare);&lt;br /&gt; printf("Just inserted %d entries into Binary-tree\n", count+1);&lt;br /&gt; node = BTreeSearch(root, data2, BTreeCompare);&lt;br /&gt; printf("\n\n\n\n");&lt;br /&gt; if (node) {&lt;br /&gt;  printf("!!!!!!!!!!!!!!!!!!!!!!!!Found node=0x%X for data=%d\n", node, data2);&lt;br /&gt; }&lt;br /&gt; printf("\n\n\n\n");&lt;br /&gt; BTreeDeleteAll(root);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-7573660479514100248?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/7573660479514100248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=7573660479514100248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7573660479514100248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7573660479514100248'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/03/binary-tree-test.html' title='Binary-tree test'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-436968222730574152</id><published>2011-03-23T19:19:00.000-07:00</published><updated>2011-03-23T19:19:12.450-07:00</updated><title type='text'>Linux Init</title><content type='html'>LINUX INIT&lt;br /&gt;--------------&lt;br /&gt;This is the mother of all other userspace's processes.&lt;br /&gt;&lt;br /&gt;Where to find it?&lt;br /&gt;In the util-linux package (to be found at ftp.*.kernel.org) for simpleinit or&amp;nbsp;in the sysvinit package for SysV init.&lt;br /&gt;&lt;br /&gt;Probably also in [sunsite|metalab].unc.edu or ftp.debian.org&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Title:&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; sysvinit and utilities&lt;br /&gt;Version:&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;2.78&lt;br /&gt;Entered-Date:&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;11FEB2000&lt;br /&gt;Description:&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;This is the Linux System V init.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The source package has the debian build files included.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;This version can be compiled with glibc 2.0.6 and up.&lt;br /&gt;Author:&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; miquels@cistron.nl (Miquel van Smoorenburg)&lt;br /&gt;Primary-Site:&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;sunsite.unc.edu /pub/Linux/system/daemons/init&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;109K sysvinit-2.78.tar.gz&lt;br /&gt;Alternate-Site:&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;ftp.cistron.nl /pub/people/miquels/software&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;109K sysvinit-2.78.tar.gz&lt;br /&gt;Alternate-Site:&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;ftp.debian.org /debian/dists/potato/main/source/base&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;108K sysvinit_2.78-X.tar.gz&lt;br /&gt;Copying-Policy:&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;GPL&lt;br /&gt;Keywords:&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;init shutdown halt reboot&lt;br /&gt;End&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ftp.debian.org:/debian/dists/potato/main/source/base/sysvinit_2.78-2.tar.gz&lt;br /&gt;&lt;br /&gt;https://build.opensuse.org/package/files?package=sysvinit&amp;amp;project=YaST%3AWeb&lt;br /&gt;&lt;br /&gt;Some properties:&lt;br /&gt;&lt;br /&gt;#define VT_MASTER&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"/dev/tty0"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Virtual console master */&lt;br /&gt;#define CONSOLE&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"/dev/console"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; /* Logical system console */&lt;br /&gt;#define SECURETTY&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"/etc/securetty"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; /* List of root terminals */&lt;br /&gt;#define SDALLOW&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"/etc/shutdown.allow"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; /* Users allowed to shutdown */&lt;br /&gt;#define INITTAB&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"/etc/inittab"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; /* Location of inittab */&lt;br /&gt;#define INIT&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"/sbin/init"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; /* Location of init itself. */&lt;br /&gt;#define NOLOGIN&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"/etc/nologin"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; /* Stop user logging in. */&lt;br /&gt;#define FASTBOOT&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"/fastboot"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Enable fast boot. */&lt;br /&gt;#define FORCEFSCK&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"/forcefsck"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; /* Force fsck on boot */&lt;br /&gt;#define SDPID&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"/var/run/shutdown.pid"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; /* PID of shutdown program */&lt;br /&gt;#define SHELL&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"/bin/sh"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Default shell */&lt;br /&gt;#define SULOGIN&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"/sbin/sulogin"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; /* Sulogin */&lt;br /&gt;#define INITSCRIPT&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"/etc/initscript"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; /* Initscript. */&lt;br /&gt;#define PWRSTAT_OLD&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"/etc/powerstatus"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; /* COMPAT: SIGPWR reason (OK/BAD) */&lt;br /&gt;#define PWRSTAT&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"/var/run/powerstatus"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; /* COMPAT: SIGPWR reason (OK/BAD) */&lt;br /&gt;&lt;br /&gt;#if 0&lt;br /&gt;#define INITLVL&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"/etc/initrunlvl"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; /* COMPAT: New runlevel */&lt;br /&gt;#define INITLVL2&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"/var/log/initrunlvl"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; /* COMPAT: New runlevel */&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Note: INITLVL2 definition needs INITLVL */&lt;br /&gt;#define HALTSCRIPT1&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"/etc/init.d/halt"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; /* Called by "fast" shutdown */&lt;br /&gt;#define HALTSCRIPT2&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"/etc/rc.d/rc.0"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; /* Called by "fast" shutdown */&lt;br /&gt;#define REBOOTSCRIPT1&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"/etc/init.d/reboot" /* Ditto. */&lt;br /&gt;#define REBOOTSCRIPT2&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"/etc/rc.d/rc.6"&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; /* Ditto. */&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- It exits if UID is != 0 (root)&lt;br /&gt;- It exits if PID != 1 (the first process in Kernel's userspace)&lt;br /&gt;- It check command-line args:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;"single", "-s" &amp;nbsp; &amp;nbsp; &amp;nbsp;: dfl_level is set to 'S'&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;"-a", "auto" &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: set environment "AUTOBOOT=YES"&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;"-b", "emergency" &amp;nbsp; : emerg_shell = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;"-z" &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: ignore -z xxxx&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;any of [0-9],[sS] &amp;nbsp; : dfl_level is set accordingly to that level&lt;br /&gt;&lt;br /&gt;- set default environment PATH to "/sbin:/usr/sbin:/bin:/usr/bin"&lt;br /&gt;- say "@(#) init version 2.89 &amp;nbsp;DATE 26-Mar-2010 &amp;nbsp;miquels@cistron.nl booting" into syslog&lt;br /&gt;- spawn/fork to emergency shell if emerg_shell == 1&lt;br /&gt;- read inittab and configure setting based on the settings stored in INITTAB&lt;br /&gt;&lt;br /&gt;init.c: main() ---&amp;gt; setproctitle()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;|&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;|&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;V&lt;br /&gt;init_main() ----------------------------&amp;gt; read_inittab()&lt;br /&gt;&amp;nbsp;| &amp;nbsp;| &amp;nbsp; |&lt;br /&gt;&amp;nbsp;| &amp;nbsp;| &amp;nbsp; |&lt;br /&gt;&amp;nbsp;| &amp;nbsp;| &amp;nbsp; V&lt;br /&gt;&amp;nbsp;| &amp;nbsp;| &amp;nbsp; init_reboot(BMAGIC_SOFT)&lt;br /&gt;&amp;nbsp;| &amp;nbsp;|&lt;br /&gt;&amp;nbsp;| &amp;nbsp;|&lt;br /&gt;&amp;nbsp;| &amp;nbsp;V&lt;br /&gt;&amp;nbsp;| ioctl(f, KDSIGACCEPT, SIGWINCH): tell kernel SIGACCEPT&lt;br /&gt;&amp;nbsp;|&lt;br /&gt;&amp;nbsp;+---&amp;gt; set a bunch of signals' flags&lt;br /&gt;&amp;nbsp;|&lt;br /&gt;&amp;nbsp;+----&amp;gt; console_init(), open /dev/CONSOLE (or otherwise if specified in env "CONSOLE") for O_RDONLY&lt;br /&gt;&amp;nbsp;|&lt;br /&gt;&amp;nbsp;+----&amp;gt; console_stty() : Set terminal settings to reasonable defaults&lt;br /&gt;&amp;nbsp;|&lt;br /&gt;&amp;nbsp;+----&amp;gt; set default environment PATH to "/sbin:/usr/sbin:/bin:/usr/bin"&lt;br /&gt;&amp;nbsp;|&lt;br /&gt;&amp;nbsp;loop forever by doing this stuf:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;1) boot transitions&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;2) Read from the init FIFO by calling check_init_fifo():&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2.1) try to create /dev/initctl if not present.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2.2) If /dev/initctl is open, stat the file to see if it is still the _same_ inode&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2.3) try to open /dev/initctl&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2.4) Read data from the pipe, return on EINTR&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2.5) console_init&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2.6) process requests (e.g., runlevel change request, power fail request, set env)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;3) check the 'failing' flags&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;4) process any signal:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4.1) SIGPWR event/signal&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4.2) SIGINT&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4.3) SIGWINCH&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4.4) SIGALRM&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4.5) SIGCHLD&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4.6) SIGHUP&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;5) See whether we need to start up (again)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;BOOT TRANSITION FSM&lt;br /&gt;--------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'#' (SYSINIT) --+-----&amp;gt; '*' (BOOT) ------&amp;gt; (NORMAL)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;^&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; newlevel=='S'| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| !did_boot &amp;amp;&amp;amp; newlevel != 'S'&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+-----&amp;gt; 'S' (INIT)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ^&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; start here&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-436968222730574152?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/436968222730574152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=436968222730574152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/436968222730574152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/436968222730574152'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/03/linux-init.html' title='Linux Init'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-4779310849391454626</id><published>2011-03-03T16:50:00.000-08:00</published><updated>2011-03-03T16:50:38.586-08:00</updated><title type='text'>Interactive map of Linux kernel</title><content type='html'>&lt;a href="http://www.makelinux.net/kernel_map"&gt;Interactive map of Linux kernel&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-4779310849391454626?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.makelinux.net/kernel_map' title='Interactive map of Linux kernel'/><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/4779310849391454626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=4779310849391454626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/4779310849391454626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/4779310849391454626'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/03/interactive-map-of-linux-kernel.html' title='Interactive map of Linux kernel'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-7625201666211857524</id><published>2011-02-15T15:53:00.000-08:00</published><updated>2011-02-15T15:53:17.943-08:00</updated><title type='text'>Are We Ready with e-Magazine?</title><content type='html'>Today Apple's Steve Jobs announced the subscription service for magazine subscription is now supported. &amp;nbsp;The similar service has been available in Amazon for its Kindle for sometime. &amp;nbsp;But regardless the availability, Dol we really want to read magazines on an electronic gadget?&lt;br /&gt;&lt;br /&gt;Here's my experience using different e-readers, both on PC, iPhone, iPad and Kindle. &amp;nbsp;First of all, reading magazines on iPad has the most interesting experience because its bigger footprint than iPhone and interactivity thru its touch screen. &amp;nbsp;For the easiness to our eyes, Kindle prevails, but with no color as its main downside. &amp;nbsp;Reading on PC's monitor is also a good experience, except it's too bulky to carry notebook during travel, let alone reading on desktop.&lt;br /&gt;&lt;br /&gt;Another aspect we need to pay attention is the cost of subscription (and yes, this is really a turnoff, at least for me). &amp;nbsp;For example, I subscribe to Reader's Digest for about $2 a year, while on Amazon they charge about $2 per edition (one magazine a year, so total subscription is about $20). &amp;nbsp;A paper TIME magazine subscription, through Ad subsidy, only charge me about $15/year. &amp;nbsp;Amazon charges about $2 per magazine. &amp;nbsp;I bet Apple will charge about the same. &amp;nbsp;It's so non-sense and doesn't make sense! Both Apple, Amazon and the publishers want to rip us off and trick us to pay so much for less! &amp;nbsp;Publishing an e-Magazine costs almost nothing (99.9% of the cost is from the operational costs including the editors/writers, unlike paper-based magazines where they have to print it and distribute it).&lt;br /&gt;&lt;br /&gt;Another issue with e-Magazine is the magazines we already one are unsharable, unless they are DRM-free. &amp;nbsp;With paper magazine, we can lend the magazine to friends and let them read free-of-charge and as long as we let them borrow it. &amp;nbsp;Some e-book readers have this borrow-a-book feature, but it is still limited and not convenience to use. &amp;nbsp;Also, format compatibility is a big issue right now, at least between Amazon's AZW and others' EPUB (iBook uses EPUB as well as Nook and other majority of e-readers). If we buy a magazine from Amazon, it cannot be read on iPad, unless we install Kindle-for-iPad/iPhone application for it.&lt;br /&gt;&lt;br /&gt;The only benefit of subscribing to e-Magazine right now is that it reduces clutters of magazines. &amp;nbsp;A Kindle can store thousands of magazines (depends on the content. &amp;nbsp;If the magazine has alot of pictures, the size will be bigger), iPad can even store much more.&lt;br /&gt;&lt;br /&gt;So, the bottom line is that we're (or at least me) not ready to migrate to read e-magazine yet. &amp;nbsp;Maybe some people can take some advantages of reading an e-magazine, but for most people it is not cost-effective yet. &amp;nbsp;Once it's become so ubiquitous and ads are everywhere in the e-magazines to offset the cost, perhaps it's the time we shall migrate to this environment-friendly magazine. &amp;nbsp;Oh, don't forget also by reading paper e-magazine, we support many people's live too, from workers at printing facilities, paper companies, newstand guys to truck drivers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-7625201666211857524?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/7625201666211857524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=7625201666211857524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7625201666211857524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7625201666211857524'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/02/are-we-ready-with-e-magazine.html' title='Are We Ready with e-Magazine?'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-776286069477988630</id><published>2011-02-15T13:44:00.000-08:00</published><updated>2011-02-15T13:44:42.904-08:00</updated><title type='text'>Android vs iOS based Tablets</title><content type='html'>Many web sites do comparison between Android-based tablets and iPad, but unfortunately almost none of them mention about one important thing: upward/downward binary-compatibility.&lt;br /&gt;&lt;br /&gt;What does that mean? OK, we now that a software or an application is actually stored in file. &amp;nbsp;On desktop operating systems (Windows, Mac, Linux etc.), these files are executable on their respective O/S, but only for specific machine. &lt;br /&gt;&lt;br /&gt;iPad (or iPhone) Applications are actually binary applications similar the ones we find on Windows or Mac in that they contain machine instructions directly instruct each step to be taken by CPU. &amp;nbsp;The instruction set is specific to the CPU it is built on (for example, iPad app cannot run on Windows or Linux, unless we have an emulator to translate the machine code on-the-fly).&lt;br /&gt;&lt;br /&gt;The mechanism of running application is Android is slightly different. &amp;nbsp;Although Android O/S kernel is based on Linux, its applications run on top of a Java virtual machine called "Dalvik". &amp;nbsp;It specifies its own instruction set, outside the platform it runs on (Linux). &amp;nbsp;It acts as a new realm in a realm. The benefit is that we can run Android application on any machine we like (as long as we have the Android O/S compiled and run on the specific CPU). &amp;nbsp;theoritically, an application built for Android running on MIPS CPU can also run on Intel CPU so on.&lt;br /&gt;&lt;br /&gt;Why it is important? because developers are no more tied to develop an application specific to a CPU. &amp;nbsp;They can just develop once and it will run on various machines.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-776286069477988630?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/776286069477988630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=776286069477988630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/776286069477988630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/776286069477988630'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/02/android-vs-ios-based-tablets.html' title='Android vs iOS based Tablets'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-2973516965571798978</id><published>2011-02-12T11:39:00.000-08:00</published><updated>2011-02-12T11:39:58.511-08:00</updated><title type='text'>Query syntax in Google Spreadsheet</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;I was calculating my expenses related to medical for the purpose of Tax report.  All my data is recorded in a spreadsheet in Google Spreadsheet.  After experimenting, I am now pleased with its formula, especially the power of query syntax (similar to SQL syntax).&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;Assume a spreadsheet named "2010" where it contains tax-deductible data.  Row 1 cells contain title.  Actual data starts from row 2 to row 419 (range is A2 to J419)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;Cells in column G contains expenses related to medical.  Each Cell in column J contain text, where for medical-related expense it should contain "&lt;i&gt;medical&lt;/i&gt;" etc.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;Now, to calculate the sum of all medical-related expenses, we can put the following formula somewhere in empty cell down below as:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;&lt;b&gt;=query('2010'!$G$2:$J$419;"select&amp;nbsp;sum(G)&amp;nbsp;where&amp;nbsp;J&amp;nbsp;contains&amp;nbsp;'edical'&amp;nbsp;";&amp;nbsp;0)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;b&gt;contains&lt;/b&gt;&lt;i style="font-weight: bold;"&gt; &lt;/i&gt;query is not exact-matching, so the logic is still TRUE even if we have "medical" or "Medical".&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;The reason I omit "m" in "medical" is to avoid case-sensitive query (I might put "Medical" instead of "medical" in my data).  We can also put LOWER() function for J to force case-insensitive matching so it will still match any case of the letters, for example:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: 'Times New Roman'; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;&lt;b&gt;=query('2010'!$G$2:$J$419;"select&amp;nbsp;sum(G)&amp;nbsp;where&amp;nbsp;LOWER(J)&amp;nbsp;contains&amp;nbsp;'medical'&amp;nbsp;";&amp;nbsp;0)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;In this case, I put the formula in another spreadsheet (that's why you see prefix '2010' there to refer to spreadsheet named "2010").&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;To do logical NOT, the syntax is "NOT J contains 'edical".  If you want to do logical AND, put AND in front of NOT, so it will be: &lt;b&gt;"NOT J contains 'medical' AND NOT J contains 'dental' "&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans, sans-serif; font-size: 13px; white-space: pre;"&gt;There are many more formulas we can experiment: MATCH(), FILTER() and so on. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-2973516965571798978?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/2973516965571798978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=2973516965571798978' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2973516965571798978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2973516965571798978'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/02/query-syntax-in-google-spreadsheet.html' title='Query syntax in Google Spreadsheet'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-6485318957219798620</id><published>2011-01-04T16:44:00.000-08:00</published><updated>2011-01-04T16:44:14.721-08:00</updated><title type='text'>Another Interview Question</title><content type='html'>This is an interview question for software engineer position at USAA:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;"A train leaves San Antonio for Houston at 60 mph. Another train leaves Houston for San Antonio at 80 mph. &amp;nbsp;Houston and San Antonio are 300 miles apart. &amp;nbsp;If a bird leaves San Antonio at 100 mph, and turns around and flies back once it reaches the Houston train, and continues to fly between the two, how far will it have flown when they collide?"&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;First, we need to draw a line to analyze this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;|&amp;lt;------------------------- 300 ------------------------------|&lt;br /&gt;SA                                                            H&lt;br /&gt; --------60-------&amp;gt;             &amp;lt;--------80 ------------------|                            &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;When these two trains collide, the distance between them is d = 0, or 60*t = 300 - 80*t, solving this equation we get t &amp;nbsp;= 300/140 &amp;nbsp;hours = 15/7 = 2.143 hours.  Meanwhile, for the bird the equation is: 100*t = 300 - 80*t, or t = 300/180 = 1.667 hours. &amp;nbsp;This is the time when the bird reaches Houston train and turns around. &amp;nbsp;How far it has traveled from SA? 100*1.667 = 166.7 miles. &amp;nbsp;For this duration, SA train has traveled 60*1.667 = 100.02 miles toward Houston. &amp;nbsp;The distance between the bird (now flying back toward SA) and SA train is = 166.7 - 100.02 =&amp;nbsp;66.68 miles. &amp;nbsp;How many minutes before the bird hits the SA train? We use the similar equation:   &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;|&amp;lt;------------------------- 66.68 ------------------------------|&lt;br /&gt;SA                                                            H&lt;br /&gt; --------60-------&amp;gt;             &amp;lt;--------100 -------------------|&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Or, 60*T = 66.68 - 100*T T = 66.68/160 =&amp;nbsp;0.41675 hours.  Total travel time for the bird: t + T = 1.667 +&amp;nbsp;0.41675 =&amp;nbsp;2.08375 hours (and it occurs before these two trains collide each other). &amp;nbsp;Total travel distance for the bird: 100 mph *&amp;nbsp;2.08375 hours = &lt;b&gt;208.375 miles&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-6485318957219798620?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/6485318957219798620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=6485318957219798620' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/6485318957219798620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/6485318957219798620'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/01/another-interview-question.html' title='Another Interview Question'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-6458565756956829688</id><published>2011-01-04T14:51:00.000-08:00</published><updated>2011-01-05T09:06:54.349-08:00</updated><title type='text'>Interesting Algorithm question in Facebook Interview</title><content type='html'>The question is: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;"Given a number in range of 1 to n, what is minimum number of guesses needed to find a specific number if you're just given an answer either "higher" or "lower" for each guess you make"&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;It sounds tricky, but actually the answer is very simple. &lt;br /&gt;&lt;br /&gt;Here's the illustration:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;the number to be guessed&lt;br /&gt;                                             |  &lt;br /&gt;                                             V&lt;br /&gt;|----------------------------------------------------------------------|&lt;br /&gt;min                              ^                                    max&lt;br /&gt;                                 |&lt;br /&gt;                                 |&lt;br /&gt;                             your guess&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Using common method of binary searching, our guess starts from: min + (max-min)/2 or a number in the middle of the range (divide-and-conquer). If our guess is lower than the number, we're given "LOWER" and vice versa.&lt;br /&gt;&lt;br /&gt;As the number to be guessed is random, it is possible the number falls right in the middle of the range and matches our first guess. &amp;nbsp;So the answer of this question is (the key of this question is "minimum number of guesses") is 1.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-6458565756956829688?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/6458565756956829688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=6458565756956829688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/6458565756956829688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/6458565756956829688'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2011/01/interesting-algorithm-question-in.html' title='Interesting Algorithm question in Facebook Interview'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-1995666389493087680</id><published>2010-12-30T16:14:00.000-08:00</published><updated>2010-12-30T16:14:57.579-08:00</updated><title type='text'>SSE built-in functions in GCC</title><content type='html'>&lt;pre&gt;int __builtin_ia32_comieq (v4sf, v4sf)&lt;br /&gt;int __builtin_ia32_comineq (v4sf, v4sf)&lt;br /&gt;int __builtin_ia32_comilt (v4sf, v4sf)&lt;br /&gt;int __builtin_ia32_comile (v4sf, v4sf)&lt;br /&gt;int __builtin_ia32_comigt (v4sf, v4sf)&lt;br /&gt;int __builtin_ia32_comige (v4sf, v4sf)&lt;br /&gt;int __builtin_ia32_ucomieq (v4sf, v4sf)&lt;br /&gt;int __builtin_ia32_ucomineq (v4sf, v4sf)&lt;br /&gt;int __builtin_ia32_ucomilt (v4sf, v4sf)&lt;br /&gt;int __builtin_ia32_ucomile (v4sf, v4sf)&lt;br /&gt;int __builtin_ia32_ucomigt (v4sf, v4sf)&lt;br /&gt;int __builtin_ia32_ucomige (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_addps (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_subps (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_mulps (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_divps (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_addss (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_subss (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_mulss (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_divss (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpeqps (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpltps (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpleps (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpgtps (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpgeps (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpunordps (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpneqps (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpnltps (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpnleps (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpngtps (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpngeps (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpordps (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpeqss (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpltss (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpless (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpunordss (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpneqss (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpnlts (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpnless (v4sf, v4sf)&lt;br /&gt;v4si __builtin_ia32_cmpordss (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_maxps (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_maxss (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_minps (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_minss (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_andps (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_andnps (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_orps (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_xorps (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_movss (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_movhlps (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_movlhps (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_unpckhps (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_unpcklps (v4sf, v4sf)&lt;br /&gt;v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)&lt;br /&gt;v4sf __builtin_ia32_cvtsi2ss (v4sf, int)&lt;br /&gt;v2si __builtin_ia32_cvtps2pi (v4sf)&lt;br /&gt;int __builtin_ia32_cvtss2si (v4sf)&lt;br /&gt;v2si __builtin_ia32_cvttps2pi (v4sf)&lt;br /&gt;int __builtin_ia32_cvttss2si (v4sf)&lt;br /&gt;v4sf __builtin_ia32_rcpps (v4sf)&lt;br /&gt;v4sf __builtin_ia32_rsqrtps (v4sf)&lt;br /&gt;v4sf __builtin_ia32_sqrtps (v4sf)&lt;br /&gt;v4sf __builtin_ia32_rcpss (v4sf)&lt;br /&gt;v4sf __builtin_ia32_rsqrtss (v4sf)&lt;br /&gt;v4sf __builtin_ia32_sqrtss (v4sf)&lt;br /&gt;v4sf __builtin_ia32_shufps (v4sf, v4sf, int)&lt;br /&gt;void __builtin_ia32_movntps (float *, v4sf)&lt;br /&gt;int __builtin_ia32_movmskps (v4sf)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The following built-in functions are available when -msse is used.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;v4sf __builtin_ia32_loadaps (float *)&lt;br /&gt;Generates the movaps machine instruction as a load from memory. &lt;br /&gt;void __builtin_ia32_storeaps (float *, v4sf)&lt;br /&gt;Generates the movaps machine instruction as a store to memory. &lt;br /&gt;v4sf __builtin_ia32_loadups (float *)&lt;br /&gt;Generates the movups machine instruction as a load from memory. &lt;br /&gt;void __builtin_ia32_storeups (float *, v4sf)&lt;br /&gt;Generates the movups machine instruction as a store to memory. &lt;br /&gt;v4sf __builtin_ia32_loadsss (float *)&lt;br /&gt;Generates the movss machine instruction as a load from memory. &lt;br /&gt;void __builtin_ia32_storess (float *, v4sf)&lt;br /&gt;Generates the movss machine instruction as a store to memory. &lt;br /&gt;v4sf __builtin_ia32_loadhps (v4sf, v2si *)&lt;br /&gt;Generates the movhps machine instruction as a load from memory. &lt;br /&gt;v4sf __builtin_ia32_loadlps (v4sf, v2si *)&lt;br /&gt;Generates the movlps machine instruction as a load from memory &lt;br /&gt;void __builtin_ia32_storehps (v4sf, v2si *)&lt;br /&gt;Generates the movhps machine instruction as a store to memory. &lt;br /&gt;void __builtin_ia32_storelps (v4sf, v2si *)&lt;br /&gt;Generates the movlps machine instruction as a store to memory.&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-1995666389493087680?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/1995666389493087680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=1995666389493087680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1995666389493087680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1995666389493087680'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/12/sse-built-in-functions-in-gcc.html' title='SSE built-in functions in GCC'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-7672782759957812018</id><published>2010-12-29T13:35:00.000-08:00</published><updated>2010-12-29T13:40:47.941-08:00</updated><title type='text'>Vector Addition using SIMD</title><content type='html'>&lt;pre&gt;#include &lt;stdio.h&gt;&lt;br /&gt;&lt;br /&gt;#define VECTOR_SIZE         4&lt;br /&gt;typedef float v4sf __attribute__ ((vector_size(sizeof(float)*VECTOR_SIZE))); // vector of four singl&lt;br /&gt;e floats&lt;br /&gt;&lt;br /&gt;typedef union f4vector&lt;br /&gt;{&lt;br /&gt;    v4sf    v;&lt;br /&gt;    float   f[VECTOR_SIZE];&lt;br /&gt;} f4vector;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void print_vector (f4vector *v)&lt;br /&gt;{&lt;br /&gt;    printf("%f,%f,%f,%f\n", v-&amp;gt;f[0], v-&amp;gt;f[1], v-&amp;gt;f[2], v-&amp;gt;f[3]);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    union f4vector a, b, c;&lt;br /&gt;&lt;br /&gt;    a.v = (v4sf){1., 2., 3., 4.};&lt;br /&gt;    b.v = (v4sf){5., 6., 7., 8.};&lt;br /&gt;    c.v = a.v + b.v;&lt;br /&gt;&lt;br /&gt;    print_vector(&amp;amp;a);&lt;br /&gt;    print_vector(&amp;amp;b);&lt;br /&gt;    print_vector(&amp;amp;c);&lt;br /&gt;}&lt;br /&gt;&lt;/stdio.h&gt;&lt;/pre&gt;&lt;br /&gt;Compile with the following command:&lt;br /&gt;&lt;pre&gt;&lt;b&gt;gcc -ggdb -mtune=pentium3 -march=pentium3 -c -O3 -ffast-math -mfpmath=sse -msse5 sse.c&lt;/b&gt;&lt;/pre&gt;&lt;br /&gt;To test, just link the object code to binary:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;b&gt;gcc -lm sse.o -o sse&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;$&lt;b&gt; ./sse&lt;/b&gt;&lt;br /&gt;1.000000,2.000000,3.000000,4.000000&lt;br /&gt;5.000000,6.000000,7.000000,8.000000&lt;br /&gt;6.000000,8.000000,10.000000,12.000000&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The assembled code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ &lt;b&gt;objdump -dS ./sse.o | grep -2 c.v | tail -8&lt;/b&gt;&lt;br /&gt;  7c:   0f 58 c1                addps  %xmm1,%xmm0&lt;br /&gt;  7f:   0f 29 45 c8             movaps %xmm0,-0x38(%ebp)&lt;br /&gt;--&lt;br /&gt; 120:   f2 0f 11 44 24 04       movsd  %xmm0,0x4(%esp)&lt;br /&gt; 126:   e8 00 00 00 00          call   12b &amp;lt;_main+0xdb&amp;gt;&lt;br /&gt;        c.v = a.v + b.v;&lt;br /&gt;&lt;br /&gt;        print_vector(&amp;amp;a);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As we can see, it's very optimized where adding 4 components of vector a and b is done in one SSE instruction (addps) instead of multiple instructions if we don't use &lt;b&gt;-msse&lt;/b&gt; and &lt;b&gt;-mfpmath=sse&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;How fast is the program?&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ &lt;b&gt;time ./sse&lt;/b&gt;&lt;br /&gt;1.000000,2.000000,3.000000,4.000000&lt;br /&gt;5.000000,6.000000,7.000000,8.000000&lt;br /&gt;6.000000,8.000000,10.000000,12.000000&lt;br /&gt;&lt;br /&gt;real    0m0.109s&lt;br /&gt;user    0m0.046s&lt;br /&gt;sys     0m0.030s&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-7672782759957812018?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/7672782759957812018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=7672782759957812018' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7672782759957812018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7672782759957812018'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/12/vector-multiplication-using-simd.html' title='Vector Addition using SIMD'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-5460553737564388418</id><published>2010-12-23T10:40:00.000-08:00</published><updated>2010-12-23T10:40:57.012-08:00</updated><title type='text'>Mac OSX Lion: Another Windows remake?</title><content type='html'>Apple has just updated its website and now it announces that they plan to release another Mac OS-X named "Lion". &amp;nbsp;A sneak peak to the features, some of the features are not really "wow" me and even seems too-old to be a breakthrough. &amp;nbsp;For example, "LauchPad". &amp;nbsp;Windows xx has had it for long time as "Desktop icons". &amp;nbsp;Another one is "Mission Control" which the similar feature has been in Windows 7 for awhile.&lt;br /&gt;&lt;br /&gt;Unfortunately, Apple has not revealed all the features they plan to put in OS-X. &amp;nbsp;Not sure if the upgrade worth the cost of upgrade (well, if it is only $25 upgrade I'll just go ahead and upgrade mine).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-5460553737564388418?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/5460553737564388418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=5460553737564388418' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5460553737564388418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5460553737564388418'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/12/mac-osx-lion-another-windows-remake.html' title='Mac OSX Lion: Another Windows remake?'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-7666921802337398425</id><published>2010-11-20T12:54:00.001-08:00</published><updated>2010-11-20T12:54:32.172-08:00</updated><title type='text'>Running Linux on USB Flash from VirtualBox</title><content type='html'>See&amp;nbsp;&lt;a href="http://www.pendrivelinux.com/boot-a-usb-flash-drive-in-virtualbox/#more-3606"&gt;http://www.pendrivelinux.com/boot-a-usb-flash-drive-in-virtualbox/#more-3606&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-7666921802337398425?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/7666921802337398425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=7666921802337398425' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7666921802337398425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7666921802337398425'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/11/running-linux-on-usb-flash-from.html' title='Running Linux on USB Flash from VirtualBox'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-1225965203114709779</id><published>2010-11-14T20:37:00.000-08:00</published><updated>2010-11-14T20:55:49.539-08:00</updated><title type='text'>Downsampling MP3 file</title><content type='html'>&lt;pre&gt;#!/usr/bin/tclsh&lt;br /&gt;&lt;br /&gt;set ffmpeg [exec which ffmpeg]&lt;br /&gt;puts "ffmpeg  = $ffmpeg"&lt;br /&gt;if { [llength $argv] &lt; 2 } {&lt;br /&gt;    puts "\n$argv0 &lt;input_file&gt; &lt;new_bitrate&gt;n bps\n"&lt;br /&gt;    exit -1&lt;br /&gt;}&lt;br /&gt;set fi [lindex $argv 0]&lt;br /&gt;set br [lindex $argv 1]&lt;br /&gt;puts "$fi"&lt;br /&gt;puts "target $br bps"&lt;br /&gt;&lt;br /&gt;if { [regexp -all {(.*)\.([mM][pP]3)} $fi a b c] } {&lt;br /&gt;    set fo "${b}_${br}bps.$c"&lt;br /&gt;    puts "$fi ==&gt; $fo, ext=$c, new bitrate=$br"&lt;br /&gt;    set id3 [exec id3v2 -l $fi]&lt;br /&gt;    set id3par ""&lt;br /&gt;    if { [regexp -line {TIT2.*: (.*)\n} $id3 dummy title c] } { puts Title=$title }&lt;br /&gt;    if { [regexp -line {TPE1.*: (.*)\n} $id3 dummy singer c] } { puts singer=$singer }&lt;br /&gt;    if { [regexp -line {TALB.*: (.*)\n} $id3 dummy album c] } { puts album=$album }&lt;br /&gt;    if { [regexp -line {TYER.*: (.*)\n} $id3 dummy year c] } { puts year=$year }&lt;br /&gt;    if { [regexp -line {TCON.*\(([0-9]+)\)\n} $id3 dummy genre c] } { puts genre=$genre }&lt;br /&gt;    set cmd "$ffmpeg -threads 16 -y -ab $br -i $fi $fo"&lt;br /&gt;    if {![file exists $fo]} {&lt;br /&gt;        if { [catch { set res [eval exec $cmd] fid }] } {&lt;br /&gt;            #puts stderr "Could not execute $cmd"&lt;br /&gt;            if {[info exists fid] } { puts stderr $fid" }&lt;br /&gt;            #exit 1&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    if {[info exists title]} { append idpar " --TIT2 \"$title\"" }&lt;br /&gt;    if {[info exists singer]} { append idpar " --TPE1 \"$singer\"" }&lt;br /&gt;    if {[info exists album]} { append idpar " --TALB \"$album\"" }&lt;br /&gt;    if {[info exists year]} { append idpar " --TYER \"$year\"" }&lt;br /&gt;    if {[info exists genre]} { append idpar " --TCON \"$genre\"" }&lt;br /&gt;    set cmd "id3v2 $idpar $fo"&lt;br /&gt;    puts $cmd&lt;br /&gt;    if { [file exists $fo]} {&lt;br /&gt;        eval exec $cmd&lt;br /&gt;    }&lt;br /&gt;} else {&lt;br /&gt;    puts "Not an MP3 file"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-1225965203114709779?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/1225965203114709779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=1225965203114709779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1225965203114709779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1225965203114709779'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/11/downsampling-mp3-file.html' title='Downsampling MP3 file'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-2186236091813905002</id><published>2010-11-14T10:30:00.001-08:00</published><updated>2010-11-14T10:30:18.563-08:00</updated><title type='text'>PAM Security explained</title><content type='html'>PAM Security:&amp;nbsp;&lt;a href="http://articles.techrepublic.com.com/5100-10878_11-1055269.html"&gt;http://articles.techrepublic.com.com/5100-10878_11-1055269.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-2186236091813905002?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/2186236091813905002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=2186236091813905002' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2186236091813905002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2186236091813905002'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/11/pam-security-explained.html' title='PAM Security explained'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-7212363733486235438</id><published>2010-11-14T09:55:00.000-08:00</published><updated>2010-11-14T15:02:57.556-08:00</updated><title type='text'>Login restriction/Limitation based on time schedue</title><content type='html'>This is how to limit a user (in this case, his name is "Joko") to access computer during weekdays and weekends at certain time duration.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Edit file &lt;pre&gt;&lt;b&gt;/etc/pam.d/common-account&lt;/b&gt;&lt;/pre&gt;and add a line "account required    pam_time.so"&lt;/li&gt;&lt;li&gt;Edit file&lt;pre&gt;&lt;b&gt;/etc/security/time.conf&lt;/b&gt;&lt;/pre&gt;and add the following lines to the end of file.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;pre&gt;#services  ttys users   times&lt;br /&gt;#&lt;br /&gt;# allow Joko to use computer during weekdays 3 pm-8:30pm OR weekends 9:00am - 9:00pm&lt;br /&gt;* ; * ; joko; Wk1500-2030 | Wk0900-2100&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This will not allow joko to login during weekdays before 3 pm or after 8:30 pm or weekends outside 9 am - 9 pm.  To disallow certain service, replace '*' in the first entry with a PAM service name (e.g, login, etc.).  Files in /etc/pam.d reflect the service names.&lt;br /&gt;&lt;br /&gt;On my computer, the following files are the service names can be used:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;-rw-r--r-- 1 root root 217 2010-07-05 04:57 atd&lt;br /&gt;-rw-r--r-- 1 root root 167 2010-07-05 06:44 chage&lt;br /&gt;-rw-r--r-- 1 root root 218 2010-07-05 06:44 chfn&lt;br /&gt;-rw-r--r-- 1 root root 218 2010-07-05 06:44 chsh&lt;br /&gt;lrwxrwxrwx 1 root root  17 2010-09-13 10:39 common-account -&amp;gt; common-account-pc&lt;br /&gt;-rw-r--r-- 1 root root 378 2010-07-05 05:15 common-account.pam-config-backup&lt;br /&gt;-rw-r--r-- 1 root root 446 2010-11-14 09:01 common-account-pc&lt;br /&gt;lrwxrwxrwx 1 root root  14 2010-09-13 10:39 common-auth -&amp;gt; common-auth-pc&lt;br /&gt;-rw-r--r-- 1 root root 448 2010-07-05 05:15 common-auth.pam-config-backup&lt;br /&gt;-rw-r--r-- 1 root root 557 2010-11-14 09:01 common-auth-pc&lt;br /&gt;lrwxrwxrwx 1 root root  18 2010-09-13 10:39 common-password -&amp;gt; common-password-pc&lt;br /&gt;-rw-r--r-- 1 root root 855 2010-07-05 05:15 common-password.pam-config-backup&lt;br /&gt;-rw-r--r-- 1 root root 506 2010-11-14 09:01 common-password-pc&lt;br /&gt;lrwxrwxrwx 1 root root  17 2010-09-13 10:39 common-session -&amp;gt; common-session-pc&lt;br /&gt;-rw-r--r-- 1 root root 435 2010-07-05 05:15 common-session.pam-config-backup&lt;br /&gt;-rw-r--r-- 1 root root 573 2010-11-14 09:01 common-session-pc&lt;br /&gt;-rw-r--r-- 1 root root 287 2010-07-05 04:56 crond&lt;br /&gt;-rw-r--r-- 1 root root  56 2010-09-15 13:49 cups&lt;br /&gt;-rw-r--r-- 1 root root 204 2010-07-05 16:24 gdm&lt;br /&gt;-rw-r--r-- 1 root root 206 2010-07-05 16:24 gdm-autologin&lt;br /&gt;-rw-r--r-- 1 root root 239 2010-07-05 08:06 gnomesu-pam&lt;br /&gt;-rw-r--r-- 1 root root 216 2010-07-28 09:45 init&lt;br /&gt;-rw-r--r-- 1 root root 419 2010-07-05 22:36 login&lt;br /&gt;-rw-r--r-- 1 root root 251 2010-07-05 05:15 other&lt;br /&gt;-rw-r--r-- 1 root root 133 2010-07-05 06:44 passwd&lt;br /&gt;-rw-r--r-- 1 root root 165 2010-07-05 06:18 polkit&lt;br /&gt;-rw-r--r-- 1 root root 165 2010-07-05 07:10 polkit-1&lt;br /&gt;-rw-r--r-- 1 root root 173 2010-07-05 14:34 ppp&lt;br /&gt;-rw-r--r-- 1 root root 481 2010-07-05 05:32 remote&lt;br /&gt;-rw-r--r-- 1 root root 165 2010-09-15 14:14 samba&lt;br /&gt;-rw-r--r-- 1 root root 209 2010-07-05 06:44 shadow&lt;br /&gt;-rw-r--r-- 1 root root 165 2010-09-14 07:07 smtp&lt;br /&gt;-rw-r--r-- 1 root root 268 2010-07-05 14:41 sshd&lt;br /&gt;-rw-r--r-- 1 root root 239 2010-07-05 05:00 su&lt;br /&gt;-rw-r--r-- 1 root root 203 2010-09-07 06:01 sudo&lt;br /&gt;-rw-r--r-- 1 root root 239 2010-07-05 05:00 su-l&lt;br /&gt;-rw-r--r-- 1 root root 172 2010-07-05 06:44 useradd&lt;br /&gt;-rw-r--r-- 1 root root 569 2010-07-05 05:58 vsftpd&lt;br /&gt;-rw-r--r-- 1 root root 241 2010-07-29 04:36 wxconsole&lt;br /&gt;-rw-r--r-- 1 root root 204 2008-09-03 08:45 xdm&lt;br /&gt;-rw-r--r-- 1 root root 166 2008-09-03 08:45 xdm-np&lt;br /&gt;-rw-r--r-- 1 root root 265 2010-08-23 16:44 xen-api&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;A good solution to limit use of computer from kids during school days!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-7212363733486235438?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/7212363733486235438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=7212363733486235438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7212363733486235438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7212363733486235438'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/11/login-restrictionlimitation.html' title='Login restriction/Limitation based on time schedue'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-7706265858119380961</id><published>2010-11-08T23:21:00.000-08:00</published><updated>2010-11-08T23:21:56.746-08:00</updated><title type='text'>My First Objective-C</title><content type='html'>&lt;b&gt;&lt;i&gt;List.h:&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#import &amp;lt;objc/Object.h&amp;gt;&lt;br /&gt;&lt;br /&gt;@interface List : Object                          // List is a subclass of the superclass Object&lt;br /&gt;{&lt;br /&gt;    int list[100];                                // These are instance variables.&lt;br /&gt;    int size;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* Public methods */&lt;br /&gt;- free;&lt;br /&gt;- (int) addEntry: (int) num;&lt;br /&gt;- print;&lt;br /&gt;&lt;br /&gt;/* Private methods */&lt;br /&gt;/* Other programs should not use these methods. */&lt;br /&gt;&lt;br /&gt;- resetSize;&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;List.m:&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#import "List.h"&lt;br /&gt;&lt;br /&gt;@implementation List&lt;br /&gt;&lt;br /&gt;+ new                                           // factory method&lt;br /&gt;{&lt;br /&gt;    self = [super new];&lt;br /&gt;    [self resetSize];&lt;br /&gt;    return self;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- free&lt;br /&gt;{&lt;br /&gt;    return [super free];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- (int) addEntry: (int) num&lt;br /&gt;{&lt;br /&gt;    list[size++] = num;&lt;br /&gt;    return size;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- print&lt;br /&gt;{&lt;br /&gt;    int i;&lt;br /&gt;&lt;br /&gt;    printf("\n");&lt;br /&gt;    for (i = 0; i &lt; size; ++i)&lt;br /&gt;        printf ("%i ", list[i]);&lt;br /&gt;        puts("");&lt;br /&gt;    return self;                                // Always return self&lt;br /&gt;                                                                                                // if n&lt;br /&gt;othing else makes sense.&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- resetSize&lt;br /&gt;{&lt;br /&gt;    size = 0;&lt;br /&gt;    return self;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;i&gt;&lt;b&gt;Stack.h:&lt;/b&gt;&lt;/i&gt;&lt;pre&gt;#import &amp;lt;objc/Object.h&amp;gt;&lt;br /&gt;&lt;br /&gt;typedef struct StackLink {&lt;br /&gt;        struct StackLink        *next;&lt;br /&gt;        //void                  *data;&lt;br /&gt;        int                     data;&lt;br /&gt;} StackLink;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@interface Stack : Object&lt;br /&gt;{&lt;br /&gt;        StackLink *top;&lt;br /&gt;    unsigned int size;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- free;&lt;br /&gt;- push: (int) anInt;&lt;br /&gt;- addEntry: (int) anInt;&lt;br /&gt;- (int) pop;&lt;br /&gt;- (unsigned int) size;&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;&lt;i&gt;Stack.m:&lt;/i&gt;&lt;/b&gt;&lt;pre&gt;#import "Stack.h"&lt;br /&gt;#import &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;&lt;br /&gt;@implementation Stack&lt;br /&gt;&lt;br /&gt;#define NULL_LINK (StackLink *) 0&lt;br /&gt;&lt;br /&gt;+ new&lt;br /&gt;{&lt;br /&gt;    self = [super new];&lt;br /&gt;    top = NULL_LINK; //(StackLink *) 0;&lt;br /&gt;    return self;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- free&lt;br /&gt;{&lt;br /&gt;    StackLink *next;&lt;br /&gt;&lt;br /&gt;    while (top != NULL_LINK)&lt;br /&gt;    {&lt;br /&gt;        next = top-&gt;next;&lt;br /&gt;        free ((char *) top);&lt;br /&gt;        top = next;&lt;br /&gt;    }&lt;br /&gt;    return [super free];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- push: (int) value&lt;br /&gt;{&lt;br /&gt;    StackLink *newLink;&lt;br /&gt;&lt;br /&gt;    newLink = (StackLink *) malloc (sizeof (StackLink));&lt;br /&gt;    if (newLink == 0)&lt;br /&gt;    {&lt;br /&gt;        fprintf(stderr, "Out of memory\n");&lt;br /&gt;        return nil;&lt;br /&gt;    }&lt;br /&gt;    newLink-&gt;data = value;&lt;br /&gt;    newLink-&gt;next = top;&lt;br /&gt;    top = newLink;&lt;br /&gt;    size++;&lt;br /&gt;&lt;br /&gt;    return self;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- addEntry: (int) value&lt;br /&gt;{&lt;br /&gt;        return [self push: value];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (int) pop&lt;br /&gt;{&lt;br /&gt;    int value;&lt;br /&gt;    StackLink *topLink;&lt;br /&gt;&lt;br /&gt;    if (0 != size)&lt;br /&gt;    {&lt;br /&gt;        topLink = top;&lt;br /&gt;        top = top-&gt;next;&lt;br /&gt;        value = topLink-&gt;data;&lt;br /&gt;        free (topLink);&lt;br /&gt;        size--;&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    {&lt;br /&gt;        value = 0;&lt;br /&gt;    }&lt;br /&gt;    return value;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- (unsigned int) size&lt;br /&gt;{&lt;br /&gt;    return size;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- print&lt;br /&gt;{&lt;br /&gt;        StackLink *startLink;&lt;br /&gt;        int i = size;&lt;br /&gt;&lt;br /&gt;        startLink = top;&lt;br /&gt;&lt;br /&gt;        while (startLink) {&lt;br /&gt;                printf("Stack[%d] = %d\n", i, startLink-&gt;data);&lt;br /&gt;                startLink = startLink-&gt;next;&lt;br /&gt;                i--;&lt;br /&gt;        }&lt;br /&gt;        return self;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;/pre&gt;&lt;i&gt;&lt;b&gt;main.m:&lt;/b&gt;&lt;/i&gt;&lt;pre&gt;#import &amp;lt;objc/Object.h&amp;gt;&lt;br /&gt;#import "List.h"&lt;br /&gt;#import "Stack.h"&lt;br /&gt;&lt;br /&gt;//int main(int argc, char *argv[])&lt;br /&gt;&lt;br /&gt;void perform (id obj)&lt;br /&gt;{&lt;br /&gt;        [obj addEntry: 5];&lt;br /&gt;        [obj print];&lt;br /&gt;        [obj addEntry: 6];&lt;br /&gt;        [obj addEntry: 3];&lt;br /&gt;        [obj print];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;        id list;&lt;br /&gt;&lt;br /&gt;        list = [List new];&lt;br /&gt;        perform(list);&lt;br /&gt;        [list free];&lt;br /&gt;&lt;br /&gt;        id stack;&lt;br /&gt;        stack = [Stack new];&lt;br /&gt;        perform(stack);&lt;br /&gt;        [stack free];&lt;br /&gt;        printf("\n");&lt;br /&gt;        return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;i&gt;&lt;b&gt;Makefile:&lt;/b&gt;&lt;/i&gt;&lt;pre&gt;.SUFFIXES: .o .m&lt;br /&gt;&lt;br /&gt;.m.o:&lt;br /&gt;        $(CC) -c $(CFLAGS) $&lt; -o $@&lt;br /&gt;&lt;br /&gt;# Macros&lt;br /&gt;&lt;br /&gt;CC=gcc&lt;br /&gt;&lt;br /&gt;#CFLAGS=-Wall -Wno-import -mtune=core2 -mfpmath=sse -ffast-math -msse3 -fobjc-exceptions&lt;br /&gt;CFLAGS=-Wno-import -mtune=core2 -g&lt;br /&gt;&lt;br /&gt;LDFLAGS=-lobjc&lt;br /&gt;SRCS=main.m List.m Stack.m&lt;br /&gt;OBJS=$(SRCS:.m=.o)&lt;br /&gt;EXECUTABLE=main&lt;br /&gt;&lt;br /&gt;.PHONY: all&lt;br /&gt;&lt;br /&gt;all: $(EXECUTABLE)&lt;br /&gt;&lt;br /&gt;$(EXECUTABLE): $(OBJS)&lt;br /&gt;        $(CC) $(LDFLAGS) -o $@ $(OBJS)&lt;br /&gt;&lt;br /&gt;#$(OBJS): $(SRCS)&lt;br /&gt;#       echo "$(CC) -c $(CFLAGS) $&lt; -o $@"&lt;br /&gt;&lt;br /&gt;clean:&lt;br /&gt;        rm -f *.o $(EXECUTABLE)&lt;br /&gt;&lt;br /&gt;TAGS: $(SRCS)&lt;br /&gt;        ctags -R $(SRCS)&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-7706265858119380961?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/7706265858119380961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=7706265858119380961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7706265858119380961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7706265858119380961'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/11/my-first-objective-c.html' title='My First Objective-C'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-4910604550864586481</id><published>2010-11-02T14:11:00.000-07:00</published><updated>2010-11-02T14:12:21.803-07:00</updated><title type='text'>MiniDuckSimulator.java</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: medium;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: medium;"&gt;import java&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;.&lt;/span&gt;io&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;.&lt;/span&gt;Console&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;;&lt;/span&gt;&lt;span class="comment" style="color: #999999; font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * @author mlutfi&lt;br /&gt; *&lt;br /&gt; */&lt;/span&gt;&lt;span class="keyword" style="color: #990000;"&gt;&lt;br /&gt;public class&lt;/span&gt; MiniDuckSimulator&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt; {&lt;/span&gt;&lt;span class="comment" style="color: #999999; font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * @param args&lt;br /&gt;  */&lt;/span&gt;&lt;span class="keyword" style="color: #990000;"&gt;&lt;br /&gt; public static&lt;/span&gt;&lt;span class="type" style="color: #ff6633;"&gt; void&lt;/span&gt;&lt;span class="keyword" style="color: #990000;"&gt; main&lt;/span&gt;&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;(&lt;/span&gt;String&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;[]&lt;/span&gt; args&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;) {&lt;/span&gt;&lt;span class="comment" style="color: #999999; font-style: italic;"&gt;&lt;br /&gt;  // TODO Auto-generated method stub&lt;br /&gt;&lt;/span&gt;  Duck mallard&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt; =&lt;/span&gt;&lt;span class="keyword" style="color: #990000;"&gt; new&lt;/span&gt; MallardDuck&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;();&lt;/span&gt;&lt;br /&gt;  mallard&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;.&lt;/span&gt;display&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;();&lt;/span&gt;&lt;br /&gt;  mallard&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;.&lt;/span&gt;performQuack&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;();&lt;/span&gt;&lt;br /&gt;  mallard&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;.&lt;/span&gt;performFly&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;();&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;  Duck model&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt; =&lt;/span&gt;&lt;span class="keyword" style="color: #990000;"&gt; new&lt;/span&gt; ModelDuck&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;();&lt;/span&gt;&lt;br /&gt;  model&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;.&lt;/span&gt;display&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;();&lt;/span&gt;&lt;br /&gt;  model&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;.&lt;/span&gt;performFly&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;();&lt;/span&gt;&lt;br /&gt;  model&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;.&lt;/span&gt;setFlyBehavior&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span class="keyword" style="color: #990000;"&gt;new&lt;/span&gt; FlyRocketPowered&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;());&lt;/span&gt;&lt;br /&gt;  model&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;.&lt;/span&gt;performFly&lt;span class="operator" style="color: #663300; font-weight: bold;"&gt;();&lt;br /&gt; }&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-4910604550864586481?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/4910604550864586481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=4910604550864586481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/4910604550864586481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/4910604550864586481'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/11/import-java.html' title='MiniDuckSimulator.java'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-1935694722513803744</id><published>2010-10-31T18:04:00.000-07:00</published><updated>2010-10-31T18:04:42.591-07:00</updated><title type='text'>How to block certain inbound IP addresses</title><content type='html'>Create a file /etc/iptables/blockip.sh:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#!/bin/bash&lt;br /&gt;# Simple iptables IP/subnet block script&lt;br /&gt;# -------------------------------------------------------------------------&lt;br /&gt;IPT=`which iptables`&lt;br /&gt;SPAMLIST="spamlist"&lt;br /&gt;SPAMDROPMSG="SPAM LIST DROP"&lt;br /&gt;BADIPS=$(egrep -v -e "^#|^$" /etc/iptables/blocked.ips)&lt;br /&gt;&lt;br /&gt;# create a new iptables list&lt;br /&gt;$IPT -N $SPAMLIST&lt;br /&gt;&lt;br /&gt;for ipblock in $BADIPS&lt;br /&gt;do&lt;br /&gt;   $IPT -A $SPAMLIST -s $ipblock -j LOG --log-prefix "$SPAMDROPMSG"&lt;br /&gt;   $IPT -A $SPAMLIST -s $ipblock -j DROP&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;$IPT -I INPUT -j $SPAMLIST&lt;br /&gt;$IPT -I OUTPUT -j $SPAMLIST&lt;br /&gt;$IPT -I FORWARD -j $SPAMLIST&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Create a file /etc/iptables/blocked.ips:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;put IP addresses here! (one per line)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;edit file /etc/boot.local and add this line:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/etc/iptables/blockip.sh&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-1935694722513803744?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/1935694722513803744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=1935694722513803744' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1935694722513803744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1935694722513803744'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/10/how-to-block-certain-inbound-ip-address.html' title='How to block certain inbound IP addresses'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-5167900435996834532</id><published>2010-10-30T23:42:00.000-07:00</published><updated>2010-10-31T12:09:53.296-07:00</updated><title type='text'>Error in compiling QEMU-XEN</title><content type='html'>The following errors occurs when I did "make tool".  For some reason, the file "cpu.h" in subdir &lt;br /&gt;&lt;pre&gt;+ test -d git://xenbits.xensource.com/qemu-xen-4.0-testing.git&lt;br /&gt;+ '[' '!' -d ioemu-remote ']'&lt;br /&gt;+ rm -f ioemu-dir&lt;br /&gt;+ ln -sf ioemu-remote ioemu-dir&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c: In function `kvm_arch_init_vcpu':&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:47:5: warning: implicit declaration of function `cpu_x86_cpuid'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c: In function `kvm_has_msr_star':&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:159:49: error: `MSR_STAR' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:159:49: note: each undeclared identifier is reported only once for each function it appears in&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c: In function `set_seg':&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:219:27: error: `DESC_TYPE_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:220:29: error: `DESC_P_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:222:25: error: `DESC_B_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:223:23: error: `DESC_S_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:224:24: error: `DESC_L_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:225:23: error: `DESC_G_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:226:25: error: `DESC_AVL_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c: In function `get_seg':&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:236:16: error: `DESC_TYPE_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:237:20: error: `DESC_P_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:238:17: error: `DESC_DPL_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:239:16: error: `DESC_B_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:240:14: error: `DESC_S_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:241:15: error: `DESC_L_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:242:14: error: `DESC_G_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:243:16: error: `DESC_AVL_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c: In function `kvm_getput_regs':&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:265:35: error: `CPUX86State' has no member named `regs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:265:42: error: `R_EAX' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:266:35: error: `CPUX86State' has no member named `regs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:266:42: error: `R_EBX' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:267:35: error: `CPUX86State' has no member named `regs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:267:42: error: `R_ECX' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:268:35: error: `CPUX86State' has no member named `regs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:268:42: error: `R_EDX' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:269:35: error: `CPUX86State' has no member named `regs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:269:42: error: `R_ESI' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:270:35: error: `CPUX86State' has no member named `regs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:270:42: error: `R_EDI' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:271:35: error: `CPUX86State' has no member named `regs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:271:42: error: `R_ESP' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:272:35: error: `CPUX86State' has no member named `regs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:272:42: error: `R_EBP' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:284:38: error: `CPUX86State' has no member named `eflags'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:285:35: error: `CPUX86State' has no member named `eip'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c: In function `kvm_put_fpu':&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:299:18: error: `CPUX86State' has no member named `fpus'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:300:20: error: `CPUX86State' has no member named `fpstt'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:301:18: error: `CPUX86State' has no member named `fpuc'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:303:19: error: `CPUX86State' has no member named `fptags'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:304:24: error: `CPUX86State' has no member named `fpregs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:304:44: error: `CPUX86State' has no member named `fpregs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:305:24: error: `CPUX86State' has no member named `xmm_regs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:305:46: error: `CPUX86State' has no member named `xmm_regs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:306:20: error: `CPUX86State' has no member named `mxcsr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c: In function `kvm_put_sregs':&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:316:15: error: `CPUX86State' has no member named `interrupt_bitmap'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:319:13: error: `CPUX86State' has no member named `eflags'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:319:24: error: `VM_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:320:35: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:320:42: error: `R_CS' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:321:35: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:321:42: error: `R_DS' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:322:35: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:322:42: error: `R_ES' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:323:35: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:323:42: error: `R_FS' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:324:35: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:324:42: error: `R_GS' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:325:35: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:325:42: error: `R_SS' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:327:29: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:328:29: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:329:29: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:330:29: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:331:29: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:332:29: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:334:13: error: `CPUX86State' has no member named `cr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:334:23: error: `CR0_PE_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:342:28: error: `CPUX86State' has no member named `tr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:343:29: error: `CPUX86State' has no member named `ldt'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:345:26: error: `CPUX86State' has no member named `idt'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:346:25: error: `CPUX86State' has no member named `idt'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:347:26: error: `CPUX86State' has no member named `gdt'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:348:25: error: `CPUX86State' has no member named `gdt'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:350:20: error: `CPUX86State' has no member named `cr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:351:20: error: `CPUX86State' has no member named `cr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:352:20: error: `CPUX86State' has no member named `cr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:353:20: error: `CPUX86State' has no member named `cr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:355:5: warning: implicit declaration of function `cpu_get_apic_tpr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:356:5: warning: implicit declaration of function `cpu_get_apic_base'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:358:21: error: `CPUX86State' has no member named `efer'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c: In function `kvm_put_msrs':&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:379:35: error: `MSR_IA32_SYSENTER_CS' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:379:60: error: `CPUX86State' has no member named `sysenter_cs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:380:35: error: `MSR_IA32_SYSENTER_ESP' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:380:61: error: `CPUX86State' has no member named `sysenter_esp'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:381:35: error: `MSR_IA32_SYSENTER_EIP' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:381:61: error: `CPUX86State' has no member named `sysenter_eip'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:383:32: error: `MSR_STAR' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:383:45: error: `CPUX86State' has no member named `star'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:384:35: error: `MSR_IA32_TSC' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:384:52: error: `CPUX86State' has no member named `tsc'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c: In function `kvm_get_fpu':&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:408:8: error: `CPUX86State' has no member named `fpstt'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:409:8: error: `CPUX86State' has no member named `fpus'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:410:8: error: `CPUX86State' has no member named `fpuc'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:412:5: error: `CPUX86State' has no member named `fptags'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:413:15: error: `CPUX86State' has no member named `fpregs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:413:44: error: `CPUX86State' has no member named `fpregs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:414:15: error: `CPUX86State' has no member named `xmm_regs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:414:46: error: `CPUX86State' has no member named `xmm_regs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:415:8: error: `CPUX86State' has no member named `mxcsr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c: In function `kvm_get_sregs': &lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:430:15: error: `CPUX86State' has no member named `interrupt_bitmap'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:434:17: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:434:24: error: `R_CS' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:435:17: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:435:24: error: `R_DS' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:436:17: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:436:24: error: `R_ES' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:437:17: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:437:24: error: `R_FS' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:438:17: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:438:24: error: `R_GS' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:439:17: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:439:24: error: `R_SS' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:441:17: error: `CPUX86State' has no member named `tr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:442:17: error: `CPUX86State' has no member named `ldt'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:444:8: error: `CPUX86State' has no member named `idt'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:445:8: error: `CPUX86State' has no member named `idt'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:446:8: error: `CPUX86State' has no member named `gdt'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:447:8: error: `CPUX86State' has no member named `gdt'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:449:8: error: `CPUX86State' has no member named `cr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:450:8: error: `CPUX86State' has no member named `cr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:451:8: error: `CPUX86State' has no member named `cr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:452:8: error: `CPUX86State' has no member named `cr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:454:5: warning: implicit declaration of function `cpu_set_apic_base'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:456:8: error: `CPUX86State' has no member named `efer'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:467:18: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:467:40: error: `DESC_DPL_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:467:58: error: `HF_CPL_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:468:19: error: `CPUX86State' has no member named `cr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:468:29: error: `CR0_PE_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:468:46: error: `HF_PE_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:468:60: error: `CR0_PE_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:469:19: error: `CPUX86State' has no member named `cr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:469:31: error: `HF_MP_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:469:45: error: `CR0_MP_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:470:7: error: `HF_MP_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:470:20: error: `HF_EM_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:470:33: error: `HF_TS_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:471:19: error: `CPUX86State' has no member named `eflags'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:471:31: error: `HF_TF_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:471:44: error: `HF_VM_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:471:57: error: `HF_IOPL_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:472:19: error: `CPUX86State' has no member named `cr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:472:29: error: `CR4_OSFXSR_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:473:7: error: `HF_OSFXSR_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:473:25: error: `CR4_OSFXSR_SHIFT'  undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:475:12: error: `CPUX86State' has no member named `efer'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:475:21: error: `MSR_EFER_LMA' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:476:19: error: `HF_LMA_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:479:39: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:479:60: error: `DESC_L_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:480:19: error: `HF_CS32_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:480:34: error: `HF_SS32_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:480:49: error: `HF_CS64_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:482:23: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:482:44: error: `DESC_B_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:483:4: error: `DESC_B_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:483:19: error: `HF_CS32_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:484:23: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:485:19: error: `HF_SS32_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:486:18: error: `CPUX86State' has no member named `cr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:487:24: error: `CPUX86State' has no member named `eflags'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:487:35: error: `VM_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:489:27: error: `HF_ADDSEG_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:491:32: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:492:36: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:493:36: error: `CPUX86State' has no member named `segs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:494:21: error: `HF_ADDSEG_SHIFT' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:497:8: error: `CPUX86State' has no member named `hflags'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:497:23: error: `CPUX86State' has no member named `hflags'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:497:34: error: `HF_PE_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:497:34: error: `HF_OSFXSR_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c: In function `kvm_get_msrs':&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:512:23: error: `MSR_IA32_SYSENTER_CS' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:513:23: error: `MSR_IA32_SYSENTER_ESP' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:514:23: error: `MSR_IA32_SYSENTER_EIP' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:516:20: error: `MSR_STAR' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:517:23: error: `MSR_IA32_TSC' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:533:16: error: `CPUX86State' has no member named `sysenter_cs'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:536:16: error: `CPUX86State' has no member named `sysenter_esp'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:539:16: error: `CPUX86State' has no member named `sysenter_eip'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:542:16: error: `CPUX86State' has no member named `star'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:559:16: error: `CPUX86State' has no member named `tsc'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c: In function `kvm_arch_pre_run':&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:618:13: error: `CPUX86State' has no member named `eflags'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:618:24: error: `IF_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c: In function `kvm_arch_post_run':&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:650:12: error: `CPUX86State' has no member named `eflags'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:650:24: error: `IF_MASK' undeclared (first use in this function)&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:652:12: error: `CPUX86State' has no member named `eflags'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:654:5: warning: implicit declaration of function `cpu_set_apic_tpr'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c: In function `kvm_handle_halt':&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:663:15: error: `CPUX86State' has no member named `eflags'&lt;br /&gt;/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c:663:26: error: `IF_MASK' undeclared (first use in this function)&lt;br /&gt;make[3]: *** [kvm.o] Error 1&lt;br /&gt;make[2]: *** [subdir-i386-dm] Error 2&lt;br /&gt;make[1]: *** [subdir-all-ioemu-dir] Error 2&lt;br /&gt;make: *** [subdirs-all] Error 2&lt;br /&gt;&lt;/pre&gt;'&lt;br /&gt;&lt;br /&gt;Quick fix: goto dir "target-i386" and perform:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;myname@linux-bvhg:~/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386&gt; gcc -I. -I.. -I/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386 -I/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir -MMD -MT kvm.o -MP -DNEED_CPU_H -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/tcg -I/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/tcg/x86_64 -I/home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/fpu  -DHAS_AUDIO -DHAS_AUDIO_CHOICE -DHAS_AUDIO -I/home/myname/src/xen-4.0-testing.hg//tools/libxc -I/home/myname/src/xen-4.0-testing.hg//tools/xenstore -I/home/myname/src/xen-4.0-testing.hg//tools/include -I/home/myname/src/xen-4.0-testing.hg//tools/blktap/lib -mtune=core2 -msse3 -O2 -m64 -mfpmath=sse -ffast-math -O2 -fomit-frame-pointer -m64 &lt;br /&gt; -fno-strict-aliasing -std=gnu99 -Wall -Wstrict-prototypes -Wno-unused-value -Wdeclaration-after-statement  -D__XEN_TOOLS__ -MMD -MF .subdirs-all.d  -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE  -O2 -fomit-frame-pointer -m64 -fno-strict-aliasing -std=gnu99 -Wall  -Wstrict-prototypes -Wno-unused-value -Wdeclaration-after-statement  -D__XEN_TOOLS__ -MMD -MF .ioemu-dir-find.d  -D_LARGEFILE_SOURCE -D_LARGEFILE64 _SOURCE  -O2 -g -fno-strict-aliasing -Wall -Wundef -W endif-labels -Wwrite-strings -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -O2 -fomit-frame-pointer -m64 -fno-strict-aliasing -std=gnu99 -Wall -Wstrict-prototypes -Wno-unused-value -Wdeclaration-after-statement  -D__XEN_TOOLS__ -MMD -MF .kvm.o.d  -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE  -Wno-unused -Wno-declaration-after-statement -Wno-pointer-sign  -DCONFIG_PASSTHROUGH  -I../hw  -m64 -Wno-unused -Wno-declaration-after-statement -Wno-pointer-sign  -DCONFIG_PASSTHROUGH   -c -o kvm.o /home/myname/src/xen-4.0-testing.hg/tools/ioemu-dir/target-i386/kvm.c&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-5167900435996834532?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/5167900435996834532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=5167900435996834532' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5167900435996834532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5167900435996834532'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/10/error-in-comping-qemu-xen.html' title='Error in compiling QEMU-XEN'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-3107583180768160577</id><published>2010-10-30T22:08:00.000-07:00</published><updated>2010-10-30T22:08:30.004-07:00</updated><title type='text'>Xen Installation &amp; Compilation</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h2 id="head-82f2c6da80e39276dbc01f43c9a0a2b8737c01bc" style="color: #1d3d62; font-family: Arial, Helvetica, sans-serif; font-size: 1.5em !important; font-weight: bold; margin-bottom: 0.75em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0.75em !important;"&gt;Installation from source&lt;/h2&gt;&lt;span class="anchor" id="line-79"&gt;&lt;/span&gt;&lt;div class="line862" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;4.0&lt;/strong&gt;&amp;nbsp;source code mercurial (hg) repository and changelog:&amp;nbsp;&lt;a class="http" href="http://xenbits.xen.org/xen-4.0-testing.hg" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; text-decoration: none;"&gt;http://&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;bits.&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;.org/&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;-&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;4.0&lt;/strong&gt;-testing.hg&lt;/a&gt;&lt;span class="anchor" id="line-80"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-81"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line874" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;You can get&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;4.0&lt;/strong&gt;&amp;nbsp;with mercurial using the following command:&lt;span class="anchor" id="line-82"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-83"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="anchor" id="line-84"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;hg clone http://&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;bits.&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;.org/&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;-&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;4.0&lt;/strong&gt;-testing.hg&lt;/pre&gt;&lt;span class="anchor" id="line-85"&gt;&lt;/span&gt;&lt;div class="line874" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Note that this will give you the LATEST version in&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;-&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;4.0&lt;/strong&gt;-testing.hg repository! It might be a release candidate for next release or just some developer snapshot. See the changelog above for current status. You can also get a specific 'tag' from the repository like this:&lt;span class="anchor" id="line-86"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-87"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="anchor" id="line-88"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;hg clone -r RELEASE-&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;4.0&lt;/strong&gt;.1 http://&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;bits.&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;.org/&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;-&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;4.0&lt;/strong&gt;-testing.hg&lt;/pre&gt;&lt;span class="anchor" id="line-89"&gt;&lt;/span&gt;&lt;div class="line862" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Alternatively you can download the&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;4.0&lt;/strong&gt;.x source tarball from&amp;nbsp;&lt;a class="http" href="http://www.xen.org/products/xen_source.html" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; text-decoration: none;"&gt;http://www.&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;.org/products/&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;_source.html&amp;nbsp;&lt;/a&gt;. Note that if you're planning to use&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;4.0&lt;/strong&gt;.0 tarball please see the Known Issues below for a note about supported pvops dom0 kernel versions.&lt;span class="anchor" id="line-90"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-91"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong&gt;NOTE!! during the&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;&amp;nbsp;build process outbound git-protocol needs to be open in your network firewall!&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;&amp;nbsp;build scripts need to access git:// repositories on git.kernel.org and&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;bits.&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;.org. Some people have reported issues accessing the remote repositories - these problems are most often caused by a broken Internet connection, broken firewall, or a broken NAT router you use.&lt;/strong&gt;&lt;span class="anchor" id="line-92"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-93"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line874" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;This example will only build the new&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;4.0&lt;/strong&gt;&amp;nbsp;hypervisor and tools. This method does NOT download or build a (dom0) kernel from the&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;.git repository. "make tools" part will download the&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;&amp;nbsp;qemu-dm ioemu for hvm guests from&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;bits git repository and tools tarballs (unless you've already downloaded them yourself before building).&lt;span class="anchor" id="line-94"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-95"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="anchor" id="line-96"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;cd &lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;-&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;4.0&lt;/strong&gt;-testing.hg &lt;br /&gt;&lt;span class="anchor" id="line-97"&gt;&lt;/span&gt;make &lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt; &lt;br /&gt;&lt;span class="anchor" id="line-98"&gt;&lt;/span&gt;make tools &lt;br /&gt;&lt;span class="anchor" id="line-99"&gt;&lt;/span&gt;make stubdom&lt;/pre&gt;&lt;span class="anchor" id="line-100"&gt;&lt;/span&gt;&lt;div class="line874" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;When the compilation process finishes you'll have the&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;&amp;nbsp;hypervisor/tools binaries in "dist/" directory ready for installation:&lt;span class="anchor" id="line-101"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-102"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="anchor" id="line-103"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;make install-&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt; &lt;br /&gt;&lt;span class="anchor" id="line-104"&gt;&lt;/span&gt;make install-tools &lt;br /&gt;&lt;span class="anchor" id="line-105"&gt;&lt;/span&gt;make install-stubdom&lt;/pre&gt;&lt;span class="anchor" id="line-106"&gt;&lt;/span&gt;&lt;div class="line874" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;And then compile your chosen new dom0 kernel, or use your existing dom0 kernel. Also update grub.conf to use the newly installed&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;4.0&lt;/strong&gt;&amp;nbsp;hypervisor.&lt;span class="anchor" id="line-107"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-108"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line862" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;See&amp;nbsp;&lt;a href="http://wiki.xen.org/xenwiki/XenDom0Kernels" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; text-decoration: none;"&gt;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;Dom0Kernels&lt;/a&gt;&amp;nbsp;wiki page for information about all the available&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;&amp;nbsp;Dom0 capable kernels, and&amp;nbsp;&lt;a href="http://wiki.xen.org/xenwiki/XenParavirtOps" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; text-decoration: none;"&gt;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;ParavirtOps&lt;/a&gt;&amp;nbsp;wiki page for more detailed information about&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;&amp;nbsp;pvops dom0 kernels.&lt;span class="anchor" id="line-109"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-110"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line874" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;You can also compile&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;4.0&lt;/strong&gt;&amp;nbsp;together with the new default pvops dom0 kernel (Linux 2.6.32.x in&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;4.0&lt;/strong&gt;.1 and newer versions). This method downloads the kernel sources from&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;.git repository during the build process:&lt;span class="anchor" id="line-111"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-112"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="anchor" id="line-113"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;make world&lt;/pre&gt;&lt;span class="anchor" id="line-114"&gt;&lt;/span&gt;&lt;div class="line862" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;This will download the latest pvops dom0 kernel 2.6.32.x from Jeremy's&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;.git repository during the build process. See the&amp;nbsp;&lt;a href="http://wiki.xen.org/xenwiki/XenParavirtOps" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; text-decoration: none;"&gt;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;ParavirtOps&lt;/a&gt;&amp;nbsp;wiki page for more information about different pvops dom0 kernel versions. Also see the Known Issues below for supported pvops dom0 kernel versions.&lt;span class="anchor" id="line-115"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-116"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line874" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;NOTE about the old&amp;nbsp;&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;Xen&lt;/strong&gt;linux linux-2.6.18-&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;&amp;nbsp;kernels:&lt;span class="anchor" id="line-117"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-118"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867" style="color: #333333; font-size: 12px; margin-bottom: 1.12em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1.12em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="anchor" id="line-119"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;make kernels KERNELS="linux-2.6-&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;0 linux-2.6-&lt;strong class="highlight" style="background-color: #cce0ff; padding-bottom: 1pt; padding-left: 1pt; padding-right: 1pt; padding-top: 1pt;"&gt;xen&lt;/strong&gt;U"&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-3107583180768160577?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://wiki.xen.org/xenwiki/Xen4.0' title='Xen Installation &amp; Compilation'/><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/3107583180768160577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=3107583180768160577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/3107583180768160577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/3107583180768160577'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/10/xen-installation-compilation.html' title='Xen Installation &amp; Compilation'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-2473121245575471248</id><published>2010-10-30T21:38:00.000-07:00</published><updated>2010-10-30T21:38:07.033-07:00</updated><title type='text'>Xen compilation</title><content type='html'>When I was trying to compile Xen-4.0.1, I got these messages:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;make[1]: Entering directory `/xen-4.0-testing.hg/xen'&lt;br /&gt;make -f Rules.mk _install&lt;br /&gt;make[2]: Entering directory `/xen-4.0-testing.hg/xen'&lt;br /&gt;make -C tools&lt;br /&gt;make[3]: Entering directory `/xen-4.0-testing.hg/xen/tools'&lt;br /&gt;[ -d figlet ] &amp;amp;&amp;amp; make -C figlet&lt;br /&gt;make[4]: Entering directory `/xen-4.0-testing.hg/xen/tools/figlet'&lt;br /&gt;make[4]: `figlet' is up to date.&lt;br /&gt;make[4]: Leaving directory `/xen-4.0-testing.hg/xen/tools/figlet'&lt;br /&gt;make symbols&lt;br /&gt;make[4]: Entering directory `/xen-4.0-testing.hg/xen/tools'&lt;br /&gt;make[4]: `symbols' is up to date.&lt;br /&gt;make[4]: Leaving directory `/xen-4.0-testing.hg/xen/tools'&lt;br /&gt;make[3]: Leaving directory `/xen-4.0-testing.hg/xen/tools'&lt;br /&gt;make -f /xen-4.0-testing.hg/xen/Rules.mk include/xen/compile.h&lt;br /&gt;make[3]: Entering directory `/xen-4.0-testing.hg/xen'&lt;br /&gt; __  __            _  _    ___   ____              _                   &lt;br /&gt; \ \/ /___ _ __   | || |  / _ \ |___ \    _ __ ___/ |   _ __  _ __ ___ &lt;br /&gt;  \  // _ \ '_ \  | || |_| | | |  __) |__| '__/ __| |__| '_ \| '__/ _ \&lt;br /&gt;  /  \  __/ | | | |__   _| |_| | / __/|__| | | (__| |__| |_) | | |  __/&lt;br /&gt; /_/\_\___|_| |_|    |_|(_)___(_)_____|  |_|  \___|_|  | .__/|_|  \___|&lt;br /&gt;                                                       |_|             &lt;br /&gt;make[3]: Leaving directory `/xen-4.0-testing.hg/xen'&lt;br /&gt;[ -e include/asm ] || ln -sf asm-x86 include/asm&lt;br /&gt;make -f /xen-4.0-testing.hg/xen/Rules.mk -C include&lt;br /&gt;make[3]: Entering directory `/xen-4.0-testing.hg/xen/include'&lt;br /&gt;make[3]: Nothing to be done for `all'.&lt;br /&gt;make[3]: Leaving directory `/xen-4.0-testing.hg/xen/include'&lt;br /&gt;make -f /xen-4.0-testing.hg/xen/Rules.mk -C arch/x86 asm-offsets.s&lt;br /&gt;make[3]: Entering directory `/xen-4.0-testing.hg/xen/arch/x86'&lt;br /&gt;make[3]: `asm-offsets.s' is up to date.&lt;br /&gt;make[3]: Leaving directory `/xen-4.0-testing.hg/xen/arch/x86'&lt;br /&gt;make -f /xen-4.0-testing.hg/xen/Rules.mk include/asm-x86/asm-offsets.h&lt;br /&gt;make[3]: Entering directory `/xen-4.0-testing.hg/xen'&lt;br /&gt;make[3]: `include/asm-x86/asm-offsets.h' is up to date.&lt;br /&gt;make[3]: Leaving directory `/xen-4.0-testing.hg/xen'&lt;br /&gt;make -f /xen-4.0-testing.hg/xen/Rules.mk -C arch/x86 /xen-4.0-testing.hg/xen/xen&lt;br /&gt;make[3]: Entering directory `/xen-4.0-testing.hg/xen/arch/x86'&lt;br /&gt;make -f /xen-4.0-testing.hg/xen/Rules.mk -C /xen-4.0-testing.hg/xen/arch/x86/boot built_in.o&lt;br /&gt;make[4]: Entering directory `/xen-4.0-testing.hg/xen/arch/x86/boot'&lt;br /&gt;RELOC=0x7c000 XEN_BITSPERLONG=64 make -f build32.mk reloc.S&lt;br /&gt;make[5]: Entering directory `/xen-4.0-testing.hg/xen/arch/x86/boot'&lt;br /&gt;make[5]: *** ../../../../.config: Is a directory.  Stop.&lt;br /&gt;make[5]: Leaving directory `/xen-4.0-testing.hg/xen/arch/x86/boot'&lt;br /&gt;make[4]: *** [reloc.S] Error 2&lt;br /&gt;make[4]: Leaving directory `/xen-4.0-testing.hg/xen/arch/x86/boot'&lt;br /&gt;make[3]: *** [/xen-4.0-testing.hg/xen/arch/x86/boot/built_in.o] Error 2&lt;br /&gt;make[3]: Leaving directory `/xen-4.0-testing.hg/xen/arch/x86'&lt;br /&gt;make[2]: *** [/xen-4.0-testing.hg/xen/xen] Error 2&lt;br /&gt;make[2]: Leaving directory `/xen-4.0-testing.hg/xen'&lt;br /&gt;make[1]: *** [install] Error 2&lt;br /&gt;make[1]: Leaving directory `/xen-4.0-testing.hg/xen'&lt;br /&gt;make: *** [install-xen] Error 2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The message showed me that it was expecting the .config exist in the root folder.  I copied the file from /usr/src/linux (kernel source) and recompile.  it worked!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-2473121245575471248?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/2473121245575471248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=2473121245575471248' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2473121245575471248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2473121245575471248'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/10/xen-compilation.html' title='Xen compilation'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-4359147715447355287</id><published>2010-10-30T12:08:00.000-07:00</published><updated>2010-10-30T12:08:01.244-07:00</updated><title type='text'>USB plug-in rule for TI MSP-EXP43xx LaunchPad Kit</title><content type='html'>Content of file /etc/udev/rules.d/udev/46-TI_launchpad.rules:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;ATTRS{idVendor}=="0451", ATTRS{idProduct}=="2036", MODE="0660", GROUP="plugdev"&lt;br /&gt;ATTRS{idVendor}=="0451", ATTRS{idProduct}=="F432", MODE="0660", GROUP="plugdev"&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-4359147715447355287?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/4359147715447355287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=4359147715447355287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/4359147715447355287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/4359147715447355287'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/10/usb-plug-in-rule-for-ti-msp-exp43xx.html' title='USB plug-in rule for TI MSP-EXP43xx LaunchPad Kit'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-2010813075719353370</id><published>2010-10-29T23:33:00.000-07:00</published><updated>2010-10-29T23:33:27.493-07:00</updated><title type='text'>Script to remove tailing "(00)" in filenames</title><content type='html'>&lt;pre&gt;#!/usr/bin/tclsh&lt;br /&gt;&lt;br /&gt;foreach f [glob *.*] {&lt;br /&gt;    if {[regexp -all -nocase {(.*)\.(.*)} $f dummy fullname ext] } {&lt;br /&gt;        if { [regexp -all -nocase {(.*)\(00\)} $fullname dummy name ] } {&lt;br /&gt;             set cmd "file rename -force \"$f\" \"$name.$ext\""&lt;br /&gt;             puts $cmd&lt;br /&gt;             eval $cmd&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-2010813075719353370?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/2010813075719353370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=2010813075719353370' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2010813075719353370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2010813075719353370'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/10/script-to-remove-tailing-00-in.html' title='Script to remove tailing &quot;(00)&quot; in filenames'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-720581131707841689</id><published>2010-10-28T23:27:00.000-07:00</published><updated>2010-10-28T23:27:43.651-07:00</updated><title type='text'>To find function declaration in static library</title><content type='html'>The following command finds a reference to function "&lt;i&gt;gtk_widget_get_pango_context&lt;/i&gt;" in static library libwxOil.a:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;linux-bvhg:~/&amp;gt; nm -l -C libwxOil.a  | grep gtk_widget_get_pango_context&lt;br /&gt;                 U gtk_widget_get_pango_context(_GtkWidget*)  /home/myname/src/XaraLX/wxOil/ftfonts.cpp:868&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-720581131707841689?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/720581131707841689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=720581131707841689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/720581131707841689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/720581131707841689'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/10/to-find-function-declaration-in-static.html' title='To find function declaration in static library'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-6956815990375750902</id><published>2010-10-28T22:01:00.000-07:00</published><updated>2010-10-28T22:22:49.972-07:00</updated><title type='text'>GLIB and wxWidget Class conflict</title><content type='html'>When compiling XaraLX, there is a conflict between GLIB-2.0 and &amp;nbsp;wxWidget 2.8 as shown below:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/usr/local/include/glib-2.0/gio/giotypes.h:127:47: error: conflicting declaration `typedef struct _GSocket GSocket'&lt;br /&gt;/usr/include/wx-2.8/wx/unix/gsockunx.h:41:1: error: `class GSocket' has a previous declaration as `class GSocket'&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;br /&gt;The quick solution is to modify &amp;lt;XaraLX directory&amp;gt;/wxOil/ftfonts.cpp. &amp;nbsp;Edit this file and change from:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#ifdef __WXGTK20__&lt;br /&gt;#include &amp;lt;gtk/gtk.h&amp;gt;&lt;br /&gt;extern GtkWidget *wxGetRootWindow();&lt;br /&gt;#endif&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;to:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#ifdef __WXGTK20__&lt;br /&gt;//#include &amp;lt;gtk/gtk.h&amp;gt;&lt;br /&gt;extern PangoContext *gtk_widget_get_pango_context &amp;nbsp; &amp;nbsp;(GtkWidget &amp;nbsp; *widget);&lt;br /&gt;extern GtkWidget *wxGetRootWindow();&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-6956815990375750902?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/6956815990375750902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=6956815990375750902' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/6956815990375750902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/6956815990375750902'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/10/glib-and-wxwidget-class-conflict.html' title='GLIB and wxWidget Class conflict'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-574710432501236679</id><published>2010-10-28T14:25:00.000-07:00</published><updated>2010-10-28T14:27:16.472-07:00</updated><title type='text'>Microsoft is officially all out to promote Windows 7 mobile</title><content type='html'>Check this out:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://create.msdn.com/en-US/home/about/how_it_works_create"&gt;http://create.msdn.com/en-US/home/about/how_it_works_create&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&amp;amp;displaylang=en&lt;/a&gt;&lt;br /&gt;&lt;a href="https://microsoft.promo.eprize.com/windowsphone7/"&gt;https://microsoft.promo.eprize.com/windowsphone7/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-574710432501236679?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/574710432501236679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=574710432501236679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/574710432501236679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/574710432501236679'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/10/microsoft-is-officially-all-out-to.html' title='Microsoft is officially all out to promote Windows 7 mobile'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-8578721906191420308</id><published>2010-10-14T13:58:00.000-07:00</published><updated>2010-10-14T14:01:09.265-07:00</updated><title type='text'>To find dependency in Linux dynamic object file/library</title><content type='html'>&lt;pre&gt;linux-bvhg:~&amp;gt; &lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;objdump -x `which ffmpeg`&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;/usr/local/bin/ffmpeg:     file format elf64-x86-64&lt;br /&gt;/usr/local/bin/ffmpeg&lt;br /&gt;architecture: i386:x86-64, flags 0x00000112:&lt;br /&gt;EXEC_P, HAS_SYMS, D_PAGED&lt;br /&gt;start address 0x0000000000405360&lt;br /&gt;&lt;br /&gt;Program Header:&lt;br /&gt;PHDR off    0x0000000000000040 vaddr 0x0000000000400040 paddr 0x0000000000400040 align 2**3&lt;br /&gt;filesz 0x00000000000001f8 memsz 0x00000000000001f8 flags r-x&lt;br /&gt;INTERP off    0x0000000000000238 vaddr 0x0000000000400238 paddr 0x0000000000400238 align 2**0&lt;br /&gt;filesz 0x000000000000001c memsz 0x000000000000001c flags r--&lt;br /&gt;LOAD off    0x0000000000000000 vaddr 0x0000000000400000 paddr 0x0000000000400000 align 2**21&lt;br /&gt;filesz 0x0000000000017124 memsz 0x0000000000017124 flags r-x&lt;br /&gt;LOAD off    0x00000000000179c8 vaddr 0x00000000006179c8 paddr 0x00000000006179c8 align 2**21&lt;br /&gt;filesz 0x0000000000001e18 memsz 0x00000000000038a0 flags rw-&lt;br /&gt;DYNAMIC off    0x0000000000018d10 vaddr 0x0000000000618d10 paddr 0x0000000000618d10 align 2**3&lt;br /&gt;filesz 0x0000000000000240 memsz 0x0000000000000240 flags rw-&lt;br /&gt;NOTE off    0x0000000000000254 vaddr 0x0000000000400254 paddr 0x0000000000400254 align 2**2&lt;br /&gt;filesz 0x000000000000005c memsz 0x000000000000005c flags r--&lt;br /&gt;EH_FRAME off    0x0000000000015db0 vaddr 0x0000000000415db0 paddr 0x0000000000415db0 align 2**2&lt;br /&gt;filesz 0x0000000000000304 memsz 0x0000000000000304 flags r--&lt;br /&gt;STACK off    0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**3&lt;br /&gt;filesz 0x0000000000000000 memsz 0x0000000000000000 flags rw-&lt;br /&gt;RELRO off    0x00000000000179c8 vaddr 0x00000000006179c8 paddr 0x00000000006179c8 align 2**0&lt;br /&gt;filesz 0x0000000000001638 memsz 0x0000000000001638 flags r--&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0c343d;"&gt;&lt;br /&gt;Dynamic Section:&lt;br /&gt;NEEDED               libavdevice.so.52&lt;br /&gt;NEEDED               libavfilter.so.1&lt;br /&gt;NEEDED               libavformat.so.52&lt;br /&gt;NEEDED               libavcodec.so.52&lt;br /&gt;NEEDED               libpostproc.so.51&lt;br /&gt;NEEDED               libswscale.so.0&lt;br /&gt;NEEDED               libavcore.so.0&lt;br /&gt;NEEDED               libavutil.so.50&lt;br /&gt;NEEDED               libpthread.so.0&lt;br /&gt;NEEDED               libm.so.6&lt;br /&gt;NEEDED               libc.so.6&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;INIT                 0x0000000000404670&lt;br /&gt;FINI                 0x00000000004124e8&lt;br /&gt;HASH                 0x00000000004002b0&lt;br /&gt;GNU_HASH             0x0000000000400960&lt;br /&gt;STRTAB               0x0000000000401f48&lt;br /&gt;SYMTAB               0x00000000004009d0&lt;br /&gt;STRSZ                0x0000000000000f0d&lt;br /&gt;SYMENT               0x0000000000000018&lt;br /&gt;DEBUG                0x0000000000000000&lt;br /&gt;PLTGOT               0x0000000000618fe8&lt;br /&gt;PLTRELSZ             0x0000000000001320&lt;br /&gt;PLTREL               0x0000000000000007&lt;br /&gt;JMPREL               0x0000000000403350&lt;br /&gt;RELA                 0x00000000004031a0&lt;br /&gt;RELASZ               0x00000000000001b0&lt;br /&gt;RELAENT              0x0000000000000018&lt;br /&gt;VERNEED              0x0000000000403020&lt;br /&gt;VERNEEDNUM           0x000000000000000b&lt;br /&gt;VERSYM               0x0000000000402e56&lt;br /&gt;&lt;br /&gt;Version References:&lt;br /&gt;required from libpostproc.so.51:&lt;br /&gt;0x0826df11 0x00 14 LIBPOSTPROC_51&lt;br /&gt;required from libavcore.so.0:&lt;br /&gt;0x0a34bd40 0x00 12 LIBAVCORE_0&lt;br /&gt;required from libm.so.6:&lt;br /&gt;0x09691a75 0x00 11 GLIBC_2.2.5&lt;br /&gt;required from libavfilter.so.1:&lt;br /&gt;0x0ececed1 0x00 10 LIBAVFILTER_1&lt;br /&gt;required from libavdevice.so.52:&lt;br /&gt;0x07b11f22 0x00 09 LIBAVDEVICE_52&lt;br /&gt;required from libavcodec.so.52:&lt;br /&gt;0x035ff8b2 0x00 08 LIBAVCODEC_52&lt;br /&gt;required from libavutil.so.50:&lt;br /&gt;0x0f818430 0x00 07 LIBAVUTIL_50&lt;br /&gt;required from libswscale.so.0:&lt;br /&gt;0x027973e0 0x00 05 LIBSWSCALE_0&lt;br /&gt;required from libavformat.so.52:&lt;br /&gt;0x0c7032c2 0x00 04 LIBAVFORMAT_52&lt;br /&gt;required from libpthread.so.0:&lt;br /&gt;0x09691a75 0x00 03 GLIBC_2.2.5&lt;br /&gt;required from libc.so.6:&lt;br /&gt;0x0d696917 0x00 13 GLIBC_2.7&lt;br /&gt;0x0d696913 0x00 06 GLIBC_2.3&lt;br /&gt;0x09691a75 0x00 02 GLIBC_2.2.5&lt;br /&gt;&lt;br /&gt;Sections:&lt;br /&gt;Idx Name          Size      VMA               LMA               File off  Algn&lt;br /&gt;0 .interp       0000001c  0000000000400238  0000000000400238  00000238  2**0&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, DATA&lt;br /&gt;1 .note.ABI-tag 00000020  0000000000400254  0000000000400254  00000254  2**2&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, DATA&lt;br /&gt;2 .note.SuSE    00000018  0000000000400274  0000000000400274  00000274  2**2&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, DATA&lt;br /&gt;3 .note.gnu.build-id 00000024  000000000040028c  000000000040028c  0000028c  2**2&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, DATA&lt;br /&gt;4 .hash         000006b0  00000000004002b0  00000000004002b0  000002b0  2**3&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, DATA&lt;br /&gt;5 .gnu.hash     0000006c  0000000000400960  0000000000400960  00000960  2**3&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, DATA&lt;br /&gt;6 .dynsym       00001578  00000000004009d0  00000000004009d0  000009d0  2**3&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, DATA&lt;br /&gt;7 .dynstr       00000f0d  0000000000401f48  0000000000401f48  00001f48  2**0&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, DATA&lt;br /&gt;8 .gnu.version  000001ca  0000000000402e56  0000000000402e56  00002e56  2**1&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, DATA&lt;br /&gt;9 .gnu.version_r 00000180  0000000000403020  0000000000403020  00003020  2**3&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, DATA&lt;br /&gt;10 .rela.dyn     000001b0  00000000004031a0  00000000004031a0  000031a0  2**3&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, DATA&lt;br /&gt;11 .rela.plt     00001320  0000000000403350  0000000000403350  00003350  2**3&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, DATA&lt;br /&gt;12 .init         00000018  0000000000404670  0000000000404670  00004670  2**2&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, CODE&lt;br /&gt;13 .plt          00000cd0  0000000000404688  0000000000404688  00004688  2**2&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, CODE&lt;br /&gt;14 .text         0000d188  0000000000405360  0000000000405360  00005360  2**4&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, CODE&lt;br /&gt;15 .fini         0000000e  00000000004124e8  00000000004124e8  000124e8  2**2&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, CODE&lt;br /&gt;16 .rodata       000038b0  0000000000412500  0000000000412500  00012500  2**4&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, DATA&lt;br /&gt;17 .eh_frame_hdr 00000304  0000000000415db0  0000000000415db0  00015db0  2**2&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, DATA&lt;br /&gt;18 .eh_frame     0000106c  00000000004160b8  00000000004160b8  000160b8  2**3&lt;br /&gt;CONTENTS, ALLOC, LOAD, READONLY, DATA&lt;br /&gt;19 .ctors        00000010  00000000006179c8  00000000006179c8  000179c8  2**3&lt;br /&gt;CONTENTS, ALLOC, LOAD, DATA&lt;br /&gt;20 .dtors        00000010  00000000006179d8  00000000006179d8  000179d8  2**3&lt;br /&gt;CONTENTS, ALLOC, LOAD, DATA&lt;br /&gt;21 .jcr          00000008  00000000006179e8  00000000006179e8  000179e8  2**3&lt;br /&gt;CONTENTS, ALLOC, LOAD, DATA&lt;br /&gt;22 .data.rel.ro  00001310  0000000000617a00  0000000000617a00  00017a00  2**5&lt;br /&gt;CONTENTS, ALLOC, LOAD, DATA&lt;br /&gt;23 .dynamic      00000240  0000000000618d10  0000000000618d10  00018d10  2**3&lt;br /&gt;CONTENTS, ALLOC, LOAD, DATA&lt;br /&gt;24 .got          00000098  0000000000618f50  0000000000618f50  00018f50  2**3&lt;br /&gt;CONTENTS, ALLOC, LOAD, DATA&lt;br /&gt;25 .got.plt      00000678  0000000000618fe8  0000000000618fe8  00018fe8  2**3&lt;br /&gt;CONTENTS, ALLOC, LOAD, DATA&lt;br /&gt;26 .data         00000180  0000000000619660  0000000000619660  00019660  2**5&lt;br /&gt;CONTENTS, ALLOC, LOAD, DATA&lt;br /&gt;27 .bss          00001a88  00000000006197e0  00000000006197e0  000197e0  2**5&lt;br /&gt;ALLOC&lt;br /&gt;28 .comment.SUSE.OPTs 00000006  0000000000000000  0000000000000000  000197e0  2**0&lt;br /&gt;CONTENTS, READONLY&lt;br /&gt;29 .comment      00000042  0000000000000000  0000000000000000  000197e6  2**0&lt;br /&gt;CONTENTS, READONLY&lt;br /&gt;SYMBOL TABLE:&lt;br /&gt;no symbols&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-8578721906191420308?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/8578721906191420308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=8578721906191420308' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/8578721906191420308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/8578721906191420308'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/10/to-find-dependency-in-linux-dynamic.html' title='To find dependency in Linux dynamic object file/library'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-3434190880720092193</id><published>2010-10-12T08:45:00.000-07:00</published><updated>2010-10-12T09:04:53.186-07:00</updated><title type='text'>To test Prime Number</title><content type='html'>&lt;pre&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;typedef enum {&lt;br /&gt;    FALSE = 0,&lt;br /&gt;    TRUE = 1&lt;br /&gt;} BOOL;&lt;br /&gt;&lt;br /&gt;char *boolstr[] = {"FALSE", "TRUE"};&lt;br /&gt;&lt;br /&gt;BOOL is_even(unsigned int k)&lt;br /&gt;{&lt;br /&gt;    if (k % 2) return FALSE;&lt;br /&gt;    return TRUE;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;BOOL is_prime(unsigned long k, unsigned long *divisor)&lt;br /&gt;{&lt;br /&gt;    unsigned long testnum,testlimit;&lt;br /&gt;    BOOL ret = FALSE;&lt;br /&gt;&lt;br /&gt;    if (k == 1) return FALSE; // 1 is neigher prime neither composite&lt;br /&gt;    if (k == 2) return TRUE;&lt;br /&gt;    if (is_even(k)) return FALSE; // even numbers are never prime, except 2&lt;br /&gt;    testlimit = k;&lt;br /&gt;    testnum = 3;&lt;br /&gt;    while (testnum &amp;lt; testlimit) {&lt;br /&gt;        //printf("highest prime divisor=%lu\n",*divisor);&lt;br /&gt;        if ( (k % testnum) == 0)&lt;br /&gt;        {&lt;br /&gt;            *divisor = testnum;&lt;br /&gt;            printf("div=%lu\n", *divisor);&lt;br /&gt;            return FALSE; //return TRUE;&lt;br /&gt;            // k is not prime as it is divisable by l&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;        testlimit = k/testnum;&lt;br /&gt;        testnum += 2;&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;    return TRUE;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    unsigned long k,divisor;&lt;br /&gt;&lt;br /&gt;    divisor=1;&lt;br /&gt;    printf("Enter an integer: ");&lt;br /&gt;    scanf("%lu", &amp;amp;k);&lt;br /&gt;    printf("k=%lu is even? %s\n", k, boolstr[is_even(k)]);&lt;br /&gt;    if (is_prime(k, &amp;amp;divisor))&lt;br /&gt;    {&lt;br /&gt;        printf("k=%lu is prime? %s\n", k, boolstr[TRUE]);&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    {&lt;br /&gt;        printf("%lu is NOT prime\n", k);&lt;br /&gt;        //printf("highest prime divisor = %lu\n", divisor);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-3434190880720092193?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/3434190880720092193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=3434190880720092193' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/3434190880720092193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/3434190880720092193'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/10/to-test-prime-number.html' title='To test Prime Number'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-2477548280445046814</id><published>2010-10-05T22:58:00.000-07:00</published><updated>2010-10-05T22:58:22.344-07:00</updated><title type='text'>3D Entertainment</title><content type='html'>While 3D televisions are more available in the stores, their price is still high and not many people are getting into it. &amp;nbsp;Perhaps because there is still few BD 3Dd movies. &amp;nbsp;But now 3D camcoders are going into the market. &amp;nbsp;We will see if this change how people buy LCD TVs. &lt;br /&gt;&lt;br /&gt;Today, when I went to Costco, the 42" 120 Hz LED 3D TV is already below $2000.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-2477548280445046814?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/2477548280445046814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=2477548280445046814' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2477548280445046814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2477548280445046814'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/10/3d-entertainment.html' title='3D Entertainment'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-1803904081901309337</id><published>2010-10-04T10:33:00.000-07:00</published><updated>2010-10-04T10:33:10.791-07:00</updated><title type='text'>Power consumption and Cost saving of Using Ooma (revised)</title><content type='html'>After awhile, I observed that this Ooma + router consume less power when the temperature is lower. &amp;nbsp;In the previous blog, I said the average power when its idling is 27 W @ 25 C, but in the early morning when temperature is lower (at about 20 C), the idling power is only 14 W and 17 W when the handset is off-hook.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-1803904081901309337?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/1803904081901309337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=1803904081901309337' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1803904081901309337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1803904081901309337'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/10/power-consumption-and-cost-saving-of_04.html' title='Power consumption and Cost saving of Using Ooma (revised)'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-4925419739737356059</id><published>2010-10-03T19:34:00.000-07:00</published><updated>2010-10-03T19:45:52.867-07:00</updated><title type='text'>Power consumption and Cost saving of Using Ooma</title><content type='html'>Devices measured:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Ooma hub&lt;/li&gt;&lt;li&gt;Linksys WRT54g wireless router&lt;/li&gt;&lt;li&gt;Traditional wired phoneset connected to Ooma&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Power-meter: Kill-A-Watt EZ&lt;br /&gt;&lt;br /&gt;Result:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;System idle: 27 watt&lt;/li&gt;&lt;li&gt;Phone is off hook (dial tone): 30 Watt&lt;/li&gt;&lt;li&gt;Phone is dialing: 30 Watt&lt;/li&gt;&lt;li&gt;During talk: 30 Watt&lt;/li&gt;&lt;li&gt;Check voice mail tru the hub: 28 Watt&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;How much the electricity cost we pay monthly?&lt;br /&gt;For Northern California, PGE has a chart describing the rate. &amp;nbsp;The average KWH rate for residential seasonal schedule E-8 is $0.22832 (this is just an average, the actual calculation depends on the tier/how much we consume electricity above its baseline). &amp;nbsp;So, the maximum KWH for Oma in a day is: 30 Watt * 24 hours =&amp;nbsp;720 WH = 0.72 KWH. &amp;nbsp;In a month (30 days) = 21.6 KWH or it costs = $4.32&lt;br /&gt;&lt;br /&gt;If we don't subscribe to Ooma premier service, there is no additional cost, so it is the actual monthly cost we pay. &amp;nbsp;If we subscribe to annual Ooma premier service which $&lt;span class="Apple-style-span" style="color: #555555; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 16px;"&gt;119.99&lt;/span&gt;/year, we end up paying: $&lt;span class="Apple-style-span" style="color: #555555; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 16px;"&gt;119.99&lt;/span&gt;/12 + $4.32 = &amp;nbsp;&lt;b&gt;$14.32&lt;/b&gt; (rounded up) per month. &lt;br /&gt;&lt;br /&gt;As a comparison, when I subscribed to AT&amp;amp;T landline local service (local unlimited), I paid (total, including all the fees and taxes) $27.15. &amp;nbsp;This did not include caller-ID and all other features. &amp;nbsp;It was just bare minimum. &amp;nbsp;With Ooma premier, besides we get caller-ID, we also get two lines, call forwarding (or simultaneous ringing to another number), broadband voice mail (with MP3 file can be sent to email we specified), and other features. &amp;nbsp;AT&amp;amp;T could have charged those features for additional $15 or more.&lt;br /&gt;&lt;br /&gt;Now, how much we save by using Ooma? &amp;nbsp;OK, first we need to take to the account the broadband portion used for Ooma. &amp;nbsp;For example, I pay AT&amp;amp;T U-Verse 10 Mbps/1 Mbps (downstream/upstream) $45 a month. &amp;nbsp;In average, Ooma uses a fractional bandwidth, which is about 256 Kbps. &amp;nbsp;The max fraction of cost (hypothetically) is then = 0.256/10 * $45/month = $1.152, or about $1.2/month. &amp;nbsp;Assume we use Ooma premier, the total monthly cost is then $14.32 + 1.2 = $15.52/month. &amp;nbsp;The saving is = $27.15 - $15.52 = &amp;nbsp;&lt;b&gt;$11.63/month.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;The price of Ooma hub (including one Ooma scout) is $219.99 (at www.ooma.com) +sales tax (which is 9.25% in my area) or $240.34. &amp;nbsp;The number of months to recover the cost using the amount of money we save above is then $240.34/$11.63 = 20.66 months, or say 21 months (&lt;b&gt;1.75 years&lt;/b&gt;). &amp;nbsp;After that, the saving we collect is going to our pocket. &amp;nbsp;If you decide not to use Ooma more than 1.75 years, you won't save any.&lt;br /&gt;&lt;br /&gt;Note: the calculation above does not include power consumption of Ooma scout, but I surely is smaller than the hub's.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-4925419739737356059?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/4925419739737356059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=4925419739737356059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/4925419739737356059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/4925419739737356059'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/10/power-consumption-and-cost-saving-of.html' title='Power consumption and Cost saving of Using Ooma'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-7233813552867076795</id><published>2010-09-29T23:32:00.000-07:00</published><updated>2010-09-29T23:32:24.375-07:00</updated><title type='text'>ReadyNAS Duo Internals</title><content type='html'>This very cool NAS Box runs a version of Linux (I think Debian):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;nas-D0-E9-23:/c/home/admin# uname -a&lt;br /&gt;Linux nas-D0-E9-23 2.6.17.8ReadyNAS #1 Tue Jun 9 13:59:28 PDT 2009 padre unknown&lt;br /&gt;&lt;br /&gt;nas-D0-E9-23:/c/home/admin# cat /proc/cpuinfo&lt;br /&gt;cpu : Infrant Technologics, Inc. - neon version: 0&lt;br /&gt;fpu : Softfpu&lt;br /&gt;ncpus probed : 1&lt;br /&gt;ncpus active : 1&lt;br /&gt;BogoMips : 186.36&lt;br /&gt;MMU : version: 0&lt;br /&gt;LP : HW.FW version: 0.1&lt;br /&gt;FPGA : fpga000000-0 Configuration: 0&lt;br /&gt;AHB arbitraion : 7&lt;br /&gt;CPU id : 0&lt;br /&gt;Switch : 0&lt;br /&gt;ASIC : IT3107&lt;br /&gt;&lt;br /&gt;nas-D0-E9-23:/c/home/admin# lspci&lt;br /&gt;0000:00:17.0 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 62)&lt;br /&gt;0000:00:17.1 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 62)&lt;br /&gt;0000:00:17.2 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 65)&lt;br /&gt;&lt;br /&gt;nas-D0-E9-23:/proc# fdisk -l /dev/hdc&lt;br /&gt;&lt;br /&gt;Disk /dev/hdc: 999.9 GB, 999991611392 bytes&lt;br /&gt;255 heads, 63 sectors/track, 121575 cylinders&lt;br /&gt;Units = cylinders of 16065 * 512 = 8225280 bytes&lt;br /&gt;Disk identifier: 0x00000000&lt;br /&gt;&lt;br /&gt;Device Boot Start End Blocks Id System&lt;br /&gt;/dev/hdc1 1 255 2048000 83 Linux&lt;br /&gt;Partition 1 does not end on cylinder boundary.&lt;br /&gt;/dev/hdc2 255 287 256000 82 Linux swap / Solaris&lt;br /&gt;Partition 2 does not end on cylinder boundary.&lt;br /&gt;/dev/hdc3 287 121575 974242116 5 Extended&lt;br /&gt;/dev/hdc5 287 121575 974242115+ 8e Linux LVM&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Compared to my HP desktop machine, this NAS Box is away slower:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;processor       : 1&lt;br /&gt;vendor_id       : GenuineIntel&lt;br /&gt;cpu family      : 6&lt;br /&gt;model           : 15&lt;br /&gt;model name      : Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz&lt;br /&gt;stepping        : 11&lt;br /&gt;cpu MHz         : 1600.000&lt;br /&gt;cache size      : 4096 KB&lt;br /&gt;physical id     : 0&lt;br /&gt;siblings        : 4&lt;br /&gt;core id         : 1&lt;br /&gt;cpu cores       : 4&lt;br /&gt;apicid          : 1&lt;br /&gt;initial apicid  : 1&lt;br /&gt;fpu             : yes&lt;br /&gt;fpu_exception   : yes&lt;br /&gt;cpuid level     : 10&lt;br /&gt;wp              : yes&lt;br /&gt;flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dt&lt;br /&gt;s acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aper&lt;br /&gt;fmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm lahf_lm tpr_shadow vnmi flexpriori&lt;br /&gt;ty&lt;br /&gt;bogomips        : 12479.54&lt;br /&gt;clflush size    : 64&lt;br /&gt;cache_alignment : 64&lt;br /&gt;address sizes   : 36 bits physical, 48 bits virtual&lt;br /&gt;power management:&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Despite the fact, I love this new toy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-7233813552867076795?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/7233813552867076795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=7233813552867076795' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7233813552867076795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7233813552867076795'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/09/readynas-duo-internals.html' title='ReadyNAS Duo Internals'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-2254285364237938066</id><published>2010-09-26T21:52:00.001-07:00</published><updated>2010-09-26T21:52:31.704-07:00</updated><title type='text'>Useful status line in vi</title><content type='html'>:set statusline=%F%m%r%h%w\ [FORMAT=%{&amp;ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-2254285364237938066?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/2254285364237938066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=2254285364237938066' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2254285364237938066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2254285364237938066'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/09/useful-status-line-in-vi.html' title='Useful status line in vi'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-6119946657438567736</id><published>2010-09-14T16:44:00.001-07:00</published><updated>2010-09-14T16:46:54.124-07:00</updated><title type='text'></title><content type='html'>Cool Real gauge measuring your PC performance:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;   function Timer(){this.t={};this.tick=function(a,b){this.t[a]=[(new Date).getTime(),b]};this.tick("start")}var loadTimer=new Timer;window.jstiming={Timer:Timer,load:loadTimer};if(window.external&amp;&amp;window.external.pageT)window.jstiming.pt=window.external.pageT;if(window.jstiming)window.jstiming.report=function(g,d){var c="";if(window.jstiming.pt){c+="&amp;srt="+window.jstiming.pt;delete window.jstiming.pt}if(window.external&amp;&amp;window.external.tran)c+="&amp;tran="+window.external.tran;var a=g.t,h=a.start;delete a.start;var i=[],e=[];for(var b in a){if(b.indexOf("_")==0)continue;var f=a[b][1];if(f)a[f][0]&amp;&amp;e.push(b+"."+(a[b][0]-a[f][0]));else h&amp;&amp;i.push(b+"."+(a[b][0]-h[0]))}if(d)for(var j in d)c+="&amp;"+j+"="+d[j];(new Image).src=["http://csi.gstatic.com/csi?v=3","&amp;s=gviz&amp;action=",g.name,e.length?"&amp;it="+e.join(",")+c:c,"&amp;rt=",i.join(",")].join("")};&lt;/script&gt; &lt;br /&gt; &lt;br /&gt;&lt;script type="text/javascript"&gt;  var csi_timer = new window.jstiming.Timer();csi_timer.name = 'docs_gauge'; google.setOnLoadCallback(drawChart); function drawChart() {   csi_timer.tick('load');   var data = new google.visualization.DataTable();  data.addColumn('string', 'Label');  data.addColumn('number', 'Value');  data.addRows(3);  data.setValue(0, 0, 'Memory');  data.setValue(0, 1, 80);  data.setValue(1, 0, 'CPU');  data.setValue(1, 1, 55);  data.setValue(2, 0, 'Network');  data.setValue(2, 1, 68);   csi_timer.tick('data');   var chart = new google.visualization.Gauge(document.getElementById('chart_div'));   csi_timer.tick('new');   var options = {width: 400, height: 120, redFrom: 90, redTo: 100,      yellowFrom:75, yellowTo: 90, minorTicks: 5};  chart.draw(data, options);   csi_timer.tick('draw');  window.jstiming.report(csi_timer);     setInterval(function() {    data.setValue(0, 1, 40 + Math.round(60 * Math.random()));    chart.draw(data, options);  }, 13000);  setInterval(function() {    data.setValue(1, 1, 40 + Math.round(60 * Math.random()));    chart.draw(data, options);  }, 5000);  setInterval(function() {    data.setValue(2, 1, 60 + Math.round(20 * Math.random()));    chart.draw(data, options);  }, 26000);}&lt;/script&gt;&lt;br /&gt;&lt;div id="chart_div"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-6119946657438567736?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/6119946657438567736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=6119946657438567736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/6119946657438567736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/6119946657438567736'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/09/cool-real-gauge-measuring-your-pc.html' title=''/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-5586401260932357149</id><published>2010-09-14T15:37:00.000-07:00</published><updated>2010-09-14T15:37:44.068-07:00</updated><title type='text'>Google Graph</title><content type='html'>Cool way to draw gauges via Google Graph API:&lt;br /&gt;&lt;a href="http://code.google.com/apis/visualization/documentation/gallery/gauge.html"&gt;http://code.google.com/apis/visualization/documentation/gallery/gauge.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-5586401260932357149?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/5586401260932357149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=5586401260932357149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5586401260932357149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5586401260932357149'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/09/google-graph.html' title='Google Graph'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-5319930584227646665</id><published>2010-07-17T01:45:00.001-07:00</published><updated>2010-07-17T19:11:25.949-07:00</updated><title type='text'>Array of Strings</title><content type='html'>// strtok.cpp : Defines the entry point for the console application.&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;#include "stdafx.h"&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;&lt;br /&gt;char *SkipChars(char *buf, const char charToSkip)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char *p = buf;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while (p &amp;amp;&amp;amp; (*p) &amp;amp;&amp;amp; (*p == charToSkip)) p++;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return p;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;char *SkipString(char *buf, const char *str)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char *p;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;p = strstr(buf, str);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (p) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p += strlen(str);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return p;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;char *GetToken(char *buf, char *tok, int toksize)&lt;br /&gt;{&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;char *start;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;int i = 0;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;start = SkipChars(buf, ' ');&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;while (start &amp;amp;&amp;amp; (*start != 0) &amp;amp;&amp;amp; (*start != ' ') &amp;amp;&amp;amp; (i &amp;lt; toksize)) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;tok[i++] = *start;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;start++;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;tok[i] = 0;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;return start;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int ParseLine(char *buf, char delim, char **toks, int tokSize, int n)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char *start, *item;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int i = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if ((!buf) || (!toks)) return NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;start = SkipChars(buf, delim);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;if (*start==0) return NULL;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;while (start &amp;amp;&amp;amp; (*start) &amp;amp;&amp;amp; (i&amp;lt;n)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;/* convert to first-major pointer */&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;item = ((char *)&amp;amp;toks[0] + tokSize*i);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;start = GetToken(start, (char *)item, tokSize);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;i++;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return i;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;char *GetStringVal(char *buf, char *key, char *val, int valSize)&lt;br /&gt;{&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;char *p = SkipString(buf, key);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;if (p) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;p = GetToken(p, val, valSize);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;return val;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;const char desc[] = "This is just an example for skipstring function";&lt;br /&gt;char res[] = "Mac &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Type &amp;nbsp; &amp;nbsp; &amp;nbsp;Interface\n"&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "1111.2222.3333 &amp;nbsp;S &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fe0/0\n"&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "aabc.ddef.8754 &amp;nbsp;S &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fe0/0\n"&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "553a.4455.6789 &amp;nbsp;D &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fe0/1\n"&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "Total Macs 0\n";&lt;br /&gt;char set[] = "mac-learning alarm 90 clear 60";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#define TOKEN_LEN 80&lt;br /&gt;int _tmain(int argc, _TCHAR* argv[])&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int i,balance,len;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char *p, *q, **pp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char token[100];&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;char tokens[3][TOKEN_LEN] = {"saya", "makan", "nasi"};&lt;br /&gt;&lt;br /&gt;#if 0&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Program entry point */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (argc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for( i=0; i&amp;lt;argc; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("argv[%d] = %s\n", i, argv[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p = SkipChars(argv[i], ' ');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p = SkipChars(p, '"');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (p) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (balance) balance=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end = SkipChars(p, '"');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (end) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;balance = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;len = end-p;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;strncpy(token, p, len);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;token[len] = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("token=%s\n", token);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p = end;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("p = %s\n", p);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((!balance) || (!len))&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf("original string: %s\n", desc);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;p = SkipString((char*)&amp;amp;desc[0], "an example for ");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (p) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("After SkipString: %s\n", p);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;p = SkipString((char *)res, "Interface\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (p) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p = strtok(p, "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//printf("original p=%s\n", p);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (p) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (strstr(p, "Total Mac")) break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("\n\n--------------------------------------\n");&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;printf("address of tokens[0][0] = %X\n", &amp;amp;tokens[0][0]);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;//printf("q = %X\n", q);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;len = ParseLine(p, ' ', (char **)&amp;amp;tokens, TOKEN_LEN, 3);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;for(i=0; i&amp;lt;len; i++) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;printf("token%d = %s\n", i+1, tokens[i]);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("%s\n", p);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("--------------------------------------\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p = strtok(NULL, "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;printf("alarm=%s\n", GetStringVal(set, "alarm", token, sizeof(token)));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;printf("clear=%s\n", GetStringVal(set, "clear", token, sizeof(token)));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;return 0;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-5319930584227646665?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/5319930584227646665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=5319930584227646665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5319930584227646665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5319930584227646665'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/07/array-of-strings.html' title='Array of Strings'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-2379449677933383041</id><published>2010-07-16T10:50:00.003-07:00</published><updated>2010-07-16T10:50:38.671-07:00</updated><title type='text'>Get String</title><content type='html'>// strtok.cpp : Defines the entry point for the console application.&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;#include "stdafx.h"&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;&lt;br /&gt;char *SkipChars(char *buf, const char charToSkip)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char *p = buf;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while (p &amp;amp;&amp;amp; (*p) &amp;amp;&amp;amp; (*p == charToSkip)) p++;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return p;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;char *SkipString(char *buf, const char *str)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char *p;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;p = strstr(buf, str);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (p) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p += strlen(str);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return p;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;char *ParseLine(char *buf, char delim, char *token)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char *start, *end;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int len;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if ((!buf) || (!token)) return NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;start = SkipChars(buf, delim);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;if (*start==0) return NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end=NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (start) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end = start;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ((end) &amp;amp;&amp;amp; (*end) &amp;amp;&amp;amp; (*end != delim)) end++;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; len = end-start;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; strncpy(token, start, len);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; token[len] = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;start = SkipChars(end, delim);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return start;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;char *GetStringVal(char *buf, char *key, char *val)&lt;br /&gt;{&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;char *p = SkipString(buf, key);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;if (p) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;p = ParseLine(p, ' ', val);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;return val;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;const char desc[] = "This is just an example for skipstring function";&lt;br /&gt;char res[] = "Mac &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Type &amp;nbsp; &amp;nbsp; &amp;nbsp;Interface\n"&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "1111.2222.3333 &amp;nbsp;S &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fe0/0\n"&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "aabc.ddef.8754 &amp;nbsp;S &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fe0/0\n"&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "553a.4455.6789 &amp;nbsp;D &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fe0/1\n"&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "Total Macs 0\n";&lt;br /&gt;char set[] = "mac-learning alarm 90 clear 60";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int _tmain(int argc, _TCHAR* argv[])&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int i,balance,len;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char *p, *end;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char token[100];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char *saveptr;&lt;br /&gt;&lt;br /&gt;#if 0&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Program entry point */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (argc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for( i=0; i&amp;lt;argc; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("argv[%d] = %s\n", i, argv[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p = SkipChars(argv[i], ' ');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p = SkipChars(p, '"');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (p) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (balance) balance=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end = SkipChars(p, '"');&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (end) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;balance = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;len = end-p;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;strncpy(token, p, len);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;token[len] = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("token=%s\n", token);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p = end;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("p = %s\n", p);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((!balance) || (!len))&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf("original string: %s\n", desc);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;p = SkipString((char*)&amp;amp;desc[0], "an example for ");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (p) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("After SkipString: %s\n", p);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;p = SkipString((char *)res, "Interface\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (p) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p = strtok(p, "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//printf("original p=%s\n", p);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (p) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (strstr(p, "Total Mac")) break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("\n\n--------------------------------------\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#if 1&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end = ParseLine(p, ' ', token);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("end=%s\n", end);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;i = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (end){&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p = end;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("Token%d=%s\n", i+1, token);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end = ParseLine(p, ' ', token);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;i++;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("%s\n", p);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("--------------------------------------\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p = strtok(NULL, "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;printf("alarm=%s\n", GetStringVal(set, "alarm", token));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;printf("clear=%s\n", GetStringVal(set, "clear", token));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;return 0;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-2379449677933383041?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/2379449677933383041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=2379449677933383041' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2379449677933383041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2379449677933383041'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/07/get-string.html' title='Get String'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-7763797584425207316</id><published>2010-07-16T02:10:00.000-07:00</published><updated>2010-07-16T02:12:13.802-07:00</updated><title type='text'>Parse token</title><content type='html'>&lt;pre&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;&lt;br /&gt;char *SkipChars(char *buf, const char charToSkip)&lt;br /&gt;{&lt;br /&gt;    char *p = buf;&lt;br /&gt;    while (p &amp;amp;&amp;amp; (*p == charToSkip)) p++;&lt;br /&gt;    return p;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;char *SkipString(char *buf, const char *str)&lt;br /&gt;{&lt;br /&gt;    char *p;&lt;br /&gt;    p = strstr(buf, str);&lt;br /&gt;    if (p) {&lt;br /&gt;        p += strlen(str);&lt;br /&gt;    }&lt;br /&gt;    return p;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;char *ParseLine(char *buf, char delim, char *token)&lt;br /&gt;{&lt;br /&gt;    char *start, *end;&lt;br /&gt;    int len;&lt;br /&gt;&lt;br /&gt;    if ((!buf) || (!token)) return NULL;&lt;br /&gt;    start = SkipChars(buf, delim);&lt;br /&gt;    if (!*start) return NULL;&lt;br /&gt;    end=NULL;&lt;br /&gt;    if (start) {&lt;br /&gt;         end = start;&lt;br /&gt;         while ((end) &amp;amp;&amp;amp; (*end) &amp;amp;&amp;amp; (*end != delim)) end++;&lt;br /&gt;         len = end-start;&lt;br /&gt;         strncpy(token, start, len);&lt;br /&gt;         token[len] = 0;&lt;br /&gt;    }&lt;br /&gt;    return end;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;const char desc[] = "This is just an example for skipstring function";&lt;br /&gt;char res[] = "Mac             Type      Interface\n"&lt;br /&gt;             "1111.2222.3333  S         fe0/0\n"&lt;br /&gt;             "aabc.ddef.8754  S         fe0/0\n"&lt;br /&gt;             "553a.4455.6789  D         fe0/1\n"&lt;br /&gt;             "Total Macs 0\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void main( int argc, char **argv )&lt;br /&gt;{&lt;br /&gt;    int i,balance,len;&lt;br /&gt;    char *p, *end;&lt;br /&gt;    char token[100];&lt;br /&gt;    char *saveptr;&lt;br /&gt;&lt;br /&gt;    /* Program entry point */&lt;br /&gt;    if (argc) {&lt;br /&gt;        for( i=0; i&amp;lt;argc; i++) {&lt;br /&gt;            printf("argv[%d] = %s\n", i, argv[i]);&lt;br /&gt;            p = SkipChars(argv[i], ' ');&lt;br /&gt;            p = SkipChars(p, '"');&lt;br /&gt;            while (p) {&lt;br /&gt;                if (balance) balance=0;&lt;br /&gt;                 end = SkipChars(p, '"');&lt;br /&gt;                 if (end) {&lt;br /&gt;                    balance = 1;&lt;br /&gt;                    len = end-p;&lt;br /&gt;                    strncpy(token, p, len);&lt;br /&gt;                    token[len] = 0;&lt;br /&gt;                    printf("token=%s\n", token);&lt;br /&gt;                    p = end;&lt;br /&gt;                    //printf("p = %s\n", p);&lt;br /&gt;                }&lt;br /&gt;                if ((!balance) || (!len))&lt;br /&gt;                    break;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    printf("original string: %s\n", desc);&lt;br /&gt;    p = SkipString((char*)&amp;amp;desc[0], "an example for ");&lt;br /&gt;    if (p) {&lt;br /&gt;        printf("After SkipString: %s\n", p);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    p = SkipString((char *)res, "Interface\n");&lt;br /&gt;    if (p) {&lt;br /&gt;        p = strtok(p, "\n");&lt;br /&gt;        //printf("original p=%s\n", p);&lt;br /&gt;        while (p) {&lt;br /&gt;            if (strstr(p, "Total Mac")) break;&lt;br /&gt;            printf("\n\n--------------------------------------\n");&lt;br /&gt;            end = ParseLine(p, ' ', token);&lt;br /&gt;            //printf("end=%s\n", end);&lt;br /&gt;            i = 0;&lt;br /&gt;            while (end){&lt;br /&gt;                p = end;&lt;br /&gt;                //printf("end:**%s\n", p);&lt;br /&gt;                printf("Token%d=%s,\t", i+1, token);&lt;br /&gt;                end = ParseLine(p, ' ', token);&lt;br /&gt;                i++;&lt;br /&gt;            }&lt;br /&gt;            printf("\n");&lt;br /&gt;            printf("%s\n", p);&lt;br /&gt;            printf("--------------------------------------\n");&lt;br /&gt;            p = strtok(NULL, "\n");&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-7763797584425207316?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/7763797584425207316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=7763797584425207316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7763797584425207316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7763797584425207316'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/07/parse-token.html' title='Parse token'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-7336620632804350422</id><published>2010-07-15T11:32:00.000-07:00</published><updated>2010-07-15T11:32:55.571-07:00</updated><title type='text'>Trick to get (almost) free International call on AT&amp;T cellphones</title><content type='html'>&lt;ol&gt;&lt;li&gt;Subscribe to Skype, set automatic withdrawal from your credit card&lt;/li&gt;&lt;li&gt;Activate Skype To-Go service and select a local number from its list (US)&lt;/li&gt;&lt;li&gt;Goto www.att.com/wireless and activate "A-List" feature/service (which is free). &amp;nbsp;Please remember that this service is only available if you have family plan and/or $60/month or more in monthly bill.&lt;/li&gt;&lt;li&gt;Add the Skype To-Go number in A-List&lt;/li&gt;&lt;li&gt;Now you're ready to make an international calls for a very cheap from your cellphone. &amp;nbsp;Just call the Skype To-Go number and follow voice instruction to dial in an international numbers. &amp;nbsp;You will only pay Skype calls (which is damned cheap, for example to call to Jakarta it's only 4c/minute). &amp;nbsp;That's it!&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-7336620632804350422?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/7336620632804350422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=7336620632804350422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7336620632804350422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7336620632804350422'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/07/trick-to-get-almost-free-international.html' title='Trick to get (almost) free International call on AT&amp;T cellphones'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-1237019236201046998</id><published>2010-06-10T01:00:00.000-07:00</published><updated>2010-06-12T18:16:38.971-07:00</updated><title type='text'>CLIE UDEV RULES to support pilot device in Linux</title><content type='html'>Content of my udev rules to have /dev/pilot whenever my Sony CLIE NX70 PDE is syncing:&lt;br /&gt;&lt;br /&gt;my-desktop:/dev/.udev/rules.d$ cat 10-local.rules &lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SUBSYSTEMS=="usb", ATTRS{product}=="Palm Handheld", KERNEL=="ttyUSB*", SYMLINK+="pilot"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;BUS=="usb", SYSFS{product}=="Palm Handheld*", KERNEL=="ttyUSB[13579]", SYMLINK+="pilot"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On my Ubuntu 10.04 Karmic, actually there's a rule definition already written, but it is missing SYMLINK.&amp;nbsp; Below is my modified rule file.&lt;br /&gt;&lt;br /&gt;vi /lib/udev/rules.d/40-libpisock9.rules&amp;nbsp; reveals:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# $Id: 60-libpisock.rules,v 1.4 2007/02/16 18:26:41 desrod Exp $&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;#&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# udev rules file for pilot-link's libpisock library, enabled for libusb&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;#&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SUBSYSTEMS!="usb", ACTION!="add", GOTO="libpisock_rules_end"&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# Sony handheld devices&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0038", GROUP="dialout", MODE="0664"&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0066", GROUP="dialout", MODE="0664"&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0095", GROUP="dialout", MODE="0664"&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ATTRS{idVendor}=="054c", ATTRS{idProduct}=="009a", GROUP="dialout", MODE="0664"&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;b style="color: #cc0000;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ATTRS{idVendor}=="054c", ATTRS{idProduct}=="00da", GROUP="dialout", MODE="0664",SYMLINK+="pilot"&lt;/span&gt;&lt;/b&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ATTRS{idVendor}=="054c", ATTRS{idProduct}=="00e9", GROUP="dialout", MODE="0664"&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0144", GROUP="dialout", MODE="0664"&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0169", GROUP="dialout", MODE="0664"&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;....&lt;/div&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-1237019236201046998?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/1237019236201046998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=1237019236201046998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1237019236201046998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1237019236201046998'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/06/clie-udev-rules-to-support-pilot-device.html' title='CLIE UDEV RULES to support pilot device in Linux'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-5805846096460385368</id><published>2010-05-22T09:07:00.000-07:00</published><updated>2010-05-22T15:29:34.723-07:00</updated><title type='text'>Small script to build Linux Kernel</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Make sure we have busybox, otherwise install it:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sudo apt-get install busybox&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;And then save the following lines to o file and execute it:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;VERSION=2.6.34-p4&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;make&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;make modules &amp;amp;&amp;amp; sudo make modules_install&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sudo make install&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sudo mkinitramfs -o /boot/initrd.img-${VERSION} ${VERSION}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-5805846096460385368?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/5805846096460385368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=5805846096460385368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5805846096460385368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5805846096460385368'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/05/small-script-to-build-linux-kernel.html' title='Small script to build Linux Kernel'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-4732668498794424561</id><published>2010-05-06T08:49:00.000-07:00</published><updated>2010-05-06T08:49:05.533-07:00</updated><title type='text'>How to calculate tax</title><content type='html'>The following code is to calculate tax amount we will pay for tax year 2010.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;#include &amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;#include &amp;lt;math.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;typedef struct {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;double min;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;double max;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;double taxPct;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;} Bracket_t;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;typedef enum {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;single,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;married_jointly,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;married_separately,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;head_of_household&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;} FilingStatus_t;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;// married filing separately&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Bracket_t BracketTable2008[] = {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{0.0, 8025.0, .10},&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{8025.0,32550.0, .15},&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{32550.0,65725.0, .25},&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{65725.0,100150.0, .28},&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{100150.0,178850.0, .33},&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{178850.0,-1.0, .35},&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{-1.0,-1.0,0.0}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;};&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Bracket_t BracketTable2010[] = {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{0.0, 16750.0, .10},&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{16750.0,68000.0, .15},&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{68000.0,137300.0, .25},&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{137300.0,209250.0, .28},&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{209250.0,373650.0, .33},&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{373650.0,-1.0, .35},&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{-1.0,-1.0,0.0}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;};&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;double TaxCalc(double agi, Bracket_t *brYear)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;int i;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;double totalTax, tax, income;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;if (!brYear)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;return -0.0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;i = 0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;tax = 0.0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;totalTax = 0.0;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;income = agi;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;printf("agi = %9.2lf\n", income);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;while (brYear[i].min &amp;gt; -1.0) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;if ((brYear[i].max &amp;gt; -1.0) &amp;amp;&amp;amp; (income &amp;gt; brYear[i].max))&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;tax = (brYear[i].max - brYear[i].min) * brYear[i].taxPct;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;tax = (income - brYear[i].min) * brYear[i].taxPct;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;totalTax += tax;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;printf("end of tax; bracket=%4.2lf, tax = %9.2lf\n", brYear[i].taxPct, tax);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;totalTax += tax;&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;printf("%d) tax = %9.2lf (%4.2lf), taxable income = %9.2lf\n", i, tax, brYear[i].taxPct, income);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;i++;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;printf("%d) taxable income = %9.2lf =&amp;gt; tax = %9.2lf\n", i, income, totalTax);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;return totalTax;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;int main(const int argc, const char *argv[])&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;double agi, tax;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Bracket_t *tbl;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;if (argc &amp;gt; 1)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;printf("You entered %s\n", argv[1]);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;agi = strtod(argv[1], NULL);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;tbl = BracketTable2010;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;else {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// demo only for tax year 2008&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;tbl = BracketTable2008;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;agi = 1e5;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;tax = TaxCalc(agi, tbl);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;printf("Final tax amount = %9.2lf (%4.2lf%%)\n", tax, tax/agi * 100.0);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Example:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;$ ./tax 100000&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;You entered 100000&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;agi = 100000.00&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;0) tax = &amp;nbsp; 1675.00 (0.10), taxable income = 100000.00&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;1) tax = &amp;nbsp; 7687.50 (0.15), taxable income = 100000.00&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;end of tax; bracket=0.25, tax = &amp;nbsp; 8000.00&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;2) taxable income = 100000.00 =&amp;gt; tax = &amp;nbsp;17362.50&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Final tax amount = &amp;nbsp;17362.50 (17.36%)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The income we enter is the AGI (Adjusted Gross Income), which is our total gross income minus all the deductions.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-4732668498794424561?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/4732668498794424561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=4732668498794424561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/4732668498794424561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/4732668498794424561'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/05/how-to-calculate-tax.html' title='How to calculate tax'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-6469690741261273729</id><published>2010-03-30T12:06:00.001-07:00</published><updated>2010-03-30T12:06:08.193-07:00</updated><title type='text'>EE Times, March 2010</title><content type='html'>EE Times Magazine, March 2010: Robotics Special Edition:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nxtbook.com/nxtbooks/cmp/eetimes_robotics_20100329/index.php#/1/OnePage"&gt;http://www.nxtbook.com/nxtbooks/cmp/eetimes_robotics_20100329/index.php#/1/OnePage&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-6469690741261273729?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/6469690741261273729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=6469690741261273729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/6469690741261273729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/6469690741261273729'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/03/ee-times-march-2010.html' title='EE Times, March 2010'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-2488515386728995250</id><published>2010-03-28T23:34:00.000-07:00</published><updated>2010-03-28T23:38:14.923-07:00</updated><title type='text'>To add a new user into Samba server</title><content type='html'>Have you ever had problem accessing a remote Linux machine from your windows, but Windows (XP/etc.) keeps asking for password (in other word, our account is always denied)? If you have, most likely is that our Linux server doesn't have the credentials to allow such username. &amp;nbsp;This occurs if we don't use PDC.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;When you check the log (/var/log/samba/log.*), you would find something like this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;[2010/03/28 23:26:35, &amp;nbsp;1] smbd/service.c:676(make_connection_snum)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;create_connection_server_info failed: NT_STATUS_ACCESS_DENIED&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The following simple command will create a new user in Samba server (e.g, "newuser" should match with the user in the Linux machine managed by PAM module).&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;mnt$ sudo smbpasswd -a -U newuser&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;New SMB password:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Retype new SMB password:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Added user newuser&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Now, from Windows explorer, we can just type "\\linuxserver\newuser". &amp;nbsp;It will then ask for password. &amp;nbsp;Use the password we entered above.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-2488515386728995250?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/2488515386728995250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=2488515386728995250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2488515386728995250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2488515386728995250'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/03/to-add-new-user-into-samba-server.html' title='To add a new user into Samba server'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-8559744349585948859</id><published>2010-02-09T22:26:00.000-08:00</published><updated>2010-02-09T22:26:44.629-08:00</updated><title type='text'>2010 Technologies for PC</title><content type='html'>Year 2010 or early 2011 will be interesting for PC buyers who are thinking to buy a new computer. &amp;nbsp;First of all, The USB 3.0 (SuperSpeed USB) will be available on many PC motherboards late this year. &amp;nbsp;Another thing is a series of new microprocessors from Intel which intergrate GPU in their dice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-8559744349585948859?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/8559744349585948859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=8559744349585948859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/8559744349585948859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/8559744349585948859'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/02/2010-technologies-for-pc.html' title='2010 Technologies for PC'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-3299804246279553303</id><published>2010-02-05T12:19:00.001-08:00</published><updated>2010-02-05T12:19:32.081-08:00</updated><title type='text'>Embedded Systems Design Magazine</title><content type='html'>"Embedded Systems design" magazine ed. Feb 2010:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nxtbook.com/nxtbooks/cmp/esd0110/index.php#/0"&gt;http://www.nxtbook.com/nxtbooks/cmp/esd0110/index.php#/0&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-3299804246279553303?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.nxtbook.com/nxtbooks/cmp/esd0110/index.php#/0' title='Embedded Systems Design Magazine'/><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/3299804246279553303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=3299804246279553303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/3299804246279553303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/3299804246279553303'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/02/embedded-systems-design-magazine.html' title='Embedded Systems Design Magazine'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-4732380367062430042</id><published>2010-02-02T00:39:00.000-08:00</published><updated>2010-02-02T00:39:25.647-08:00</updated><title type='text'>iPad, iSlate, Kindle or what?</title><content type='html'>Apple iPad was introduced by its CEO, Steve Jobs, last week. &amp;nbsp;Despite its slickness and coolness, it still runs LED LCD screen. &amp;nbsp;The new HP Tablet to-be-released will also be running LCD. &amp;nbsp;Kindle from Amazon is in different direction. &amp;nbsp;It uses a like-book screen from E Ink ( a spun off of MIT-lab company), but it only is black-and-white (though can display different grades of grey) and too slow for most of computing works today, except for reading e-books.&lt;br /&gt;&lt;br /&gt;There is a new startup founded by Mary Lou Epsen (does OLPC [One Laptop Per Child] project click you?) that goes to a little bit different. &amp;nbsp;Their claim the new LCD screen they are producing is a marriage between both worlds: the fast-response and colorful of LCD with reflection-light and power-saving of E-ink.&lt;br /&gt;&lt;br /&gt;Looking at their website (http://www.pixelqi.com/about_us), most of their executives and board members hold Ph.D, either in optics, electrical engineering or physics. &amp;nbsp;Quite impressive. &amp;nbsp;The product they're making is called "&lt;i&gt;Pixel Qi&lt;/i&gt;".&lt;br /&gt;&lt;br /&gt;I was wondering why iPad doesn't use their screen for iPad? too expensive? I am eager to see a computer company to use their product for a power-efficient next generation tablet PC (I am no fan of Netbook. &amp;nbsp;I agreed with Mr. Jobs in his presentation that Netbook is just a slow smaller-than-laptop PC running memory-hungry Windows XP or not-that-popular Linux).&lt;br /&gt;&lt;br /&gt;I was thinking to get this iPad, but after reading an article about this Pixel-Qi on &lt;i&gt;Popular Science&lt;/i&gt;&amp;nbsp;magazine, I am thinking to just wait and see how people's responses surface later on and will decide later.&lt;br /&gt;&lt;br /&gt;If you're in the market ready to throw some money for a new netbook, be patient and wait for the getting-hotter market of tablet computers to select the best of the breed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-4732380367062430042?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/4732380367062430042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=4732380367062430042' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/4732380367062430042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/4732380367062430042'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/02/ipad-islate-kindle-or-what.html' title='iPad, iSlate, Kindle or what?'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-816427721316072897</id><published>2010-01-28T00:53:00.000-08:00</published><updated>2010-01-28T00:53:58.542-08:00</updated><title type='text'>How to Add HP-1020 on CUPS to Windows XP</title><content type='html'>This is the instruction to share a printer which is served by a Linux running CUPS server to Windows clients.&lt;br /&gt;&lt;br /&gt;Assume the class name of the printer (as defined in CUPS) is HP_LaserJet_1020, and the Linux server's IP address is 192.168.0.11.&lt;br /&gt;&lt;br /&gt;Add a network printer and in URI box, add: &lt;a href="http://%3cip-address/"&gt;http://%3cip-address/&lt;/a&gt; of cups server&amp;gt;/classes/&amp;lt;classname&amp;gt;&lt;br /&gt;&lt;br /&gt;or, in this example:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://192.168.0.11/classes/HP_LaserJet_1020"&gt;http://192.168.0.11/classes/HP_LaserJet_1020&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-816427721316072897?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/816427721316072897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=816427721316072897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/816427721316072897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/816427721316072897'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2010/01/how-to-add-hp-1020-on-cups-to-windows.html' title='How to Add HP-1020 on CUPS to Windows XP'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-1077931669686490270</id><published>2009-12-17T22:02:00.001-08:00</published><updated>2009-12-17T22:02:52.057-08:00</updated><title type='text'>LOGVECT.C</title><content type='html'>/*&amp;nbsp;&amp;nbsp;&amp;nbsp; RESET AND INTERRUPT VECTORS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Modified-version of COSMIC-France's vector.c&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (c) M. Lutfi Shahab&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; First creation : 8-Jan-1995&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Modifications :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Bugs found in Whitesmiths's vector.c (vector 9 contains Division&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by Zero).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - RESET: Whitesmith always defined zk and sk by zero, but in this&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file, user can modified it.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - exception handler now can only be a near address (appropiate use&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for EVB under MCX16 kernel operation).&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;#define _WSC_&lt;br /&gt;#include "mcx16.h"&lt;br /&gt;&lt;br /&gt;extern SYSTABLE SysTable;&lt;br /&gt;extern @port void&amp;nbsp; _stext(void);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* startup routine */&lt;br /&gt;extern @port void SCITrmIsr(void);&amp;nbsp; /* SCI transmit interrupt handler */&lt;br /&gt;extern @port void SCIRcvIsr(void);&amp;nbsp; /* SCI receive interrupt handler */&lt;br /&gt;extern @port void _BerrIsr(void);&lt;br /&gt;extern @port void DivZero(void);&lt;br /&gt;extern @port void IllegalOpcode(void);&lt;br /&gt;extern @port void _default(void);&lt;br /&gt;static @port void _dummit(void);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;const struct reset {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @far @port void (*rst)(void);&amp;nbsp;&amp;nbsp;&amp;nbsp; /* reset + code extension */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int isp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* initial stack pointer */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int dpp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* direct page pointer */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @port void (*vector[58])(void);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* interrupt vectors */&lt;br /&gt;} _reset = {&lt;br /&gt;/*0000:*/&amp;nbsp; /*&amp;nbsp; vector 0: (ixksk) = $0110&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bank 0, stack at $1xxxx&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; start address :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [15:12] = reserved&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [11:8]&amp;nbsp; = initial ZK&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [7:4]&amp;nbsp;&amp;nbsp; = initial SK&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3:0]&amp;nbsp;&amp;nbsp; = initial PK&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;/*0002: */&amp;nbsp;&amp;nbsp; _stext,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 1, initial PC&amp;nbsp; */&lt;br /&gt;/*0004: */&amp;nbsp;&amp;nbsp; 0x002E,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 2, Stack Pointer, [15:0]&amp;nbsp; = initial SP */&lt;br /&gt;/*0006:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0000,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 3, direct page pointer,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; initial IZ (Direct Page Pointer) */&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* BEGIN VECTORS */&lt;br /&gt;/*000A:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 5, Bus Error (BERR) */&lt;br /&gt;/*0008:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 4, Breakpoint (BKPT) */&lt;br /&gt;/*000C:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; (@port void *)0x02FA,&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 6, Software Interrupt (SWI) to call MCX16 services */&lt;br /&gt;/*000E:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _default,&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 7, Illegal Instruction */&lt;br /&gt;/*0010:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _default,&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 8, Divide by Zero */&lt;br /&gt;/*0012:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 9, Unassigned, Reserved */&lt;br /&gt;/*0014:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector A, Unassigned, Reserved */&lt;br /&gt;/*0016:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector B, Unassigned, , Reserved */&lt;br /&gt;/*0018:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector C, Unassigned, Reserved */&lt;br /&gt;/*001A:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector D, Unassigned, Reserved */&lt;br /&gt;/*001C:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector E, Unassigned, Reserved */&lt;br /&gt;/*001E:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector F, Uninitialized Interrupt */&lt;br /&gt;/*0020:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 10, Unassigned, Reserved */&lt;br /&gt;/*0022:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 11, Level 1 Interrupt Autovector */&lt;br /&gt;/*0024:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Vector 12, Level 2 Interrupt Autovector */&lt;br /&gt;/*0026:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Vector 13, Level 3 Interrupt Autovector */&lt;br /&gt;/*0028:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Vector 14, Level 4 Interrupt Autovector */&lt;br /&gt;/*002A:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Vector 15, Level 5 Interrupt Autovector */&lt;br /&gt;/*002C:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Vector 16, Level 6 Interrupt Autovector */&lt;br /&gt;/*002E:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Vector 17, Level 7 Interrupt Autovector */&lt;br /&gt;/*0030:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Vector 18, Spurious Interrupt */&lt;br /&gt;/*0032:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 19 user-defined interrupt */&lt;br /&gt;/*0034:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 1A user-defined interrupt */&lt;br /&gt;/*0036:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 1B user-defined interrupt */&lt;br /&gt;/*0038:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 1C user-defined interrupt */&lt;br /&gt;/*003A:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 1E user-defined interrupt */&lt;br /&gt;/*003C:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 1E user-defined interrupt */&lt;br /&gt;/*003E:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 1F user-defined interrupt */&lt;br /&gt;/*0040:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 20 user-defined interrupt */&lt;br /&gt;/*0042:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 21 user-defined interrupt */&lt;br /&gt;/*0044:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 22 user-defined interrupt */&lt;br /&gt;/*0046:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 23 user-defined interrupt */&lt;br /&gt;/*0048:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 24 user-defined interrupt */&lt;br /&gt;/*004A:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 25 user-defined interrupt */&lt;br /&gt;/*004C:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 26 user-defined interrupt */&lt;br /&gt;/*004E:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 27 user-defined interrupt */&lt;br /&gt;/*0050:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 28 user-defined interrupt */&lt;br /&gt;/*0052:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 29 user-defined interrupt */&lt;br /&gt;/*0054:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 2A user-defined interrupt */&lt;br /&gt;/*0056:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 2B user-defined interrupt */&lt;br /&gt;/*0058:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 2C user-defined interrupt */&lt;br /&gt;/*005A:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 2D user-defined interrupt */&lt;br /&gt;/*005C:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 2E user-defined interrupt */&lt;br /&gt;/*005E:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 2F user-defined interrupt */&lt;br /&gt;/*0060:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 30 user-defined interrupt */&lt;br /&gt;/*0062:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 31 user-defined interrupt */&lt;br /&gt;/*0064:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 32 user-defined interrupt */&lt;br /&gt;/*0066:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 33 user-defined interrupt */&lt;br /&gt;/*0068:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 34 user-defined interrupt */&lt;br /&gt;/*006A:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 35 user-defined interrupt */&lt;br /&gt;/*006C:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 36 user-defined interrupt */&lt;br /&gt;/*006E:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; _dummit,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector 37 user-defined interrupt */&lt;br /&gt;/*0070:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; (@port void *)&amp;amp;SysTable,&amp;nbsp;&amp;nbsp; /* vector 38 points to SysTable address */&lt;br /&gt;/*0072:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; (@port void *)0x81E,&amp;nbsp; /* vector 39 as a null task */&lt;br /&gt;/*0074:*/&amp;nbsp;&amp;nbsp;&amp;nbsp; SCIIsr,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Vector 3A, Interrupt Service Routine SCI */&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* empty function to receive an undefined interrupt&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;static @port void _dummit(void) /* just contains rti */&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* enter background debug mode */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _asm("BGND\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _asm("nop\n");&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-1077931669686490270?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/1077931669686490270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=1077931669686490270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1077931669686490270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/1077931669686490270'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2009/12/logvectc.html' title='LOGVECT.C'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-2502030894293976126</id><published>2009-12-17T22:01:00.001-08:00</published><updated>2009-12-17T22:01:11.831-08:00</updated><title type='text'>ADCTASK.C</title><content type='html'>/******************************************************************************&lt;br /&gt;�����������������������������������������������������������������������������͸&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ANALOG-TO-DIGITAL CONVERTING TASK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Copyright (c) June, 1995&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by Lutfi Shahab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Instrumentation and Controls Laboratory&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dept. of Engineering Physics&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Faculty of Industrial Technology&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Institut Teknologi Bandung&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp; Date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20/11/94&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp; Platform : Motorola 68HC16 Microcontroller&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp; Compiler : Whitesmith HC16 Compiler&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp; Target&amp;nbsp;&amp;nbsp; : EPROM-targeted binary code&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp; Description: -Task and routines to access ADC-module of 68HC16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp; Functions:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp; Summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp; The ADC module is mapped into 32 words of address space. Five words are&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp; control/status registers, one word is digital port data, and 24 words&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp; provide access to the results of ADC conversion (eight addresses for each �&lt;br /&gt;�&amp;nbsp;&amp;nbsp; type of converted data). Two words are reserved for expansion.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp; The ADC module base address is determined by the value of the MODMAP bit&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp; int the system integration module configuration register (SIMMCR).&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp; The base address is normaly $FFF700 in the MC68HC16Z1.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Internally, the ADC has both a differential data bus and a buffered&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp; IMB data bus. Registers not directly associated with AD conversion&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp; functions, such as the MCR, the MTR, and the PDR, reside on the bufferd&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp; bus, while conversion registers and result registers reside on the&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp; differential bus.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp; Registers that must be set prior operation:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADMCR:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STOP = 0 (normal operation)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FRZ&amp;nbsp; = 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SUPV = 1 (supervisory mode)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADCTL0:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PRS&amp;nbsp;&amp;nbsp; = 1 (ADC clock = system clock/4 = 16.667 MHz/4)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STS&amp;nbsp;&amp;nbsp; = 0 (4 A/D clock periods in the sample time)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RES10 = 1 (10-bit conversion)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADCTL1:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SCAN&amp;nbsp; = 1 (continuous conversion)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MULT&amp;nbsp; = 1 (sequential conversion of four or eight channels&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; selected by [CD:CA])&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S8CM&amp;nbsp; = 1 (eight-conversion sequence)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CD&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0 (measured data at each channel stored into his register)&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�����������������������������������������������������������������������������;&lt;br /&gt;******************************************************************************/&lt;br /&gt;#define _FAR_&lt;br /&gt;&lt;br /&gt;#include &amp;lt;wslxa.h&amp;gt;&lt;br /&gt;#include "_adc.h"&lt;br /&gt;#include "mcx16.h"&lt;br /&gt;#include "sysdef.h"&lt;br /&gt;&lt;br /&gt;#define CLICK_T&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (16.256E-3) /* 1 clock tick = 16.256 mS */&lt;br /&gt;#define TICK1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1000/16) /* 1 second */&lt;br /&gt;#define TICK2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1000/16)&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; It's difficult to find out how time constant of thermocouple is,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; but for bare thermocouple, however, extensive reseach and testing&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; have provided semi-empirical formulas that allow calculation of the time&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; constant with fair accuracy. One such relation useful for temperatures&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from 160 - 1600 F, wire diameter 0.016 - 0.051 in, mass velocity 3 - 50&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lbm/(ft3.s), and static pressure of 1 atm is:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t = (3500*rho*c*d^1.25 * pow(G, -15.8* sqrt(T)))/T, where&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rho = mass density of two thermocouple materials, lbm/ft3&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c&amp;nbsp;&amp;nbsp; = average specific heat of two thermocouple materials, Btu/(lbm.F)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; d&amp;nbsp;&amp;nbsp; = wire diameter (in)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; G&amp;nbsp;&amp;nbsp; = flow mass velocity, lbm/(ft2.s)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; T&amp;nbsp;&amp;nbsp; = stagnation temperature, R&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (adapted from Doebelin, MEASUREMENT SYSTEMS,...)&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;/*********&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; THIS JUST FOR CLARITY !&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADC has been initialized by STARTUP.S&lt;br /&gt;*******/&lt;br /&gt;/*****&lt;br /&gt;void ADC_init(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; admcr.reg = ADMCR_SUPV;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; admcr.reg = 0x0010;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adctl0.reg = 0x0083;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adctl1.reg = 0x0077;&lt;br /&gt;}&lt;br /&gt;******/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WORD adcdata[N_ADC_CHANNELS];&lt;br /&gt;&lt;br /&gt;void ADC_Task(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; int i;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; _mcx_timer(TICK1, TICK2, SAMP_SEMA); /* install timer */&lt;br /&gt;&amp;nbsp;&amp;nbsp; FOREVER&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* wait until sample period begin */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mcx_wait(SAMP_SEMA);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* SCF is cleared when ADCTL1 is written and a conversion sequence begin */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; adctl1.reg = 0x0077;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } while (adstat.w.ccf==0); /* all channels completely converted ? */&lt;br /&gt;&lt;br /&gt;&amp;nbsp; /*******&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if last channel scanned&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; send data to mailbox if polling has reached last channel.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; signalling other task with ADC_SEMA&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rescan ADC channels, starting from first channel&lt;br /&gt;&amp;nbsp; *******/&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=ADC_1; i&amp;lt;=N_ADC_CHANNELS; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; adcdata[i] = ur_adc_rslt[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mcx_send_mbx(ADC_MBX, &amp;amp;adcdata, ADC_SEMA);&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-2502030894293976126?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/2502030894293976126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=2502030894293976126' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2502030894293976126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/2502030894293976126'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2009/12/adctaskc.html' title='ADCTASK.C'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-6338914771489100551</id><published>2009-12-17T21:57:00.001-08:00</published><updated>2009-12-17T21:57:47.029-08:00</updated><title type='text'>COMTASK.C</title><content type='html'>/*****************************************************************************&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; COMMUNICATION TASK FOR 68HC16-BASED TERMO-LOGGER&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WITH&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SLIP PROTOCOL AS DATA-LINK LAYER&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (c) June 1995&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by M. Lutfi&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Engineering Physics Dept&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Faculty of Industrial Technology&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Institut Teknologi Bandung&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =======================================================&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Each received character is copied into&amp;nbsp; a queue by the interrupt&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; routine and each character will be send by SCI_trm_task&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; periodically then gives a semaphore to other tasks via SCI_SEMA.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Before data copied to other segment/buffer, data must be&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; depacketized. ComTask always calls Depacketizer routine when&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; he receives data. MCX16 manages timing each period.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; We don't need interrupt handler, because we don't use it.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; To transmitting a character, just put it into SCI_TRM_QUEUE&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If needed, QSPI routines can be added as request.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (c) M. Lutfi, 1995&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Last updated: 5-June-1995 at MKN, Suropati 231&lt;br /&gt;******************************************************************************/&lt;br /&gt;#define _WSC_&lt;br /&gt;&lt;br /&gt;#include "mcx16.h"&lt;br /&gt;#include "sysdef.h"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#define SCI_IV&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x3A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* interrupt vector number */&lt;br /&gt;#define IL_QSPI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* QSPI has lowest priority */&lt;br /&gt;#define IL_SCI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* SCI has highest priority */&lt;br /&gt;#define SIZE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 512&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* buffer size */&lt;br /&gt;#define TDRE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* transmit ready bit */&lt;br /&gt;#define SYS_CLOCK&amp;nbsp;&amp;nbsp; 16780000L&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* HC16EVB's system clock */&lt;br /&gt;#define BAUD_RATE(bps)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SYS_CLOCK/(bps*32))&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;&amp;nbsp; SLIP special character codes&lt;br /&gt;*/&lt;br /&gt;#define FR_END&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xC0 /* indicates end of packet */&lt;br /&gt;#define FR_ESC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xDB /* indicates byte stuffing */&lt;br /&gt;#define T_FR_END&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xDC /* FR_ESC T_FR_END means END data byte */&lt;br /&gt;#define T_FR_ESC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xDD /* FR_ESC T_FR_ESC means ESC data byte */&lt;br /&gt;&lt;br /&gt;#ifdef _WSC_&amp;nbsp;&amp;nbsp;&amp;nbsp; /* if WSC compiler */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #include &amp;lt;wslxa.h&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #include "_qsm.h"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #include "sysdef.h"&lt;br /&gt;&lt;br /&gt;#else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* this not for WSC compiler */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #include &amp;lt;dos.h&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define FOREVER&amp;nbsp;&amp;nbsp;&amp;nbsp; for(;;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int scsr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int scdr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int qmcr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int qilr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int qilr_ilqspi;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int qilr_ilsci;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int qivr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int sccr0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int sccr1, sccr1_pe, sccr1_m, sccr1_te, sccr1_re;&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; /* below are values for SCBR baud rates */&lt;br /&gt;#define BPS_110&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1748&lt;br /&gt;#define BPS_600&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 874&lt;br /&gt;#define BPS_1200&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 437&lt;br /&gt;#define BPS_2400&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 218&lt;br /&gt;#define BPS_4800&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 109&lt;br /&gt;#define BPS_9600&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 55&lt;br /&gt;#define BPS_19200&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 27&lt;br /&gt;#define BPS_32768&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 16&lt;br /&gt;#define&amp;nbsp;&amp;nbsp;&amp;nbsp; BPS_38400&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 14&lt;br /&gt;#define BPS_500000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**************************** GLOBAL VARIABLES *******************************&lt;br /&gt;char in_char;&lt;br /&gt;char out_char;&lt;br /&gt;******************************************************************************/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/******************************************************************************&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SEND_PACKET:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sends a packet of length "len", starting at location "p"&lt;br /&gt;******************************************************************************/&lt;br /&gt;void send_packet(void *data, int len)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; /* send an initial END character to flush out any data (garbage) that&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * have accumulated in the receiver due to line noise&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; char *p;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; p = (char *)data;&lt;br /&gt;&amp;nbsp;&amp;nbsp; send_char(FR_END);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; /* for each byte in the packet, send the appropriate character&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * sequence&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; while (len--) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (*p==FR_END) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; send_char(FR_ESC);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; send_char(T_FR_END);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (*p==FR_ESC) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; send_char(FR_ESC);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; send_char(T_FR_ESC);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp; /* otherwise, we just send the character */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; send_char(*p);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p++;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; /* tell the receiver that we're done sending the packet */&lt;br /&gt;&amp;nbsp;&amp;nbsp; send_char(FR_END);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/***************************** RECV_PACKET ***********************************&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; receive a packet into the queue located at "p".&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If more than len bytes are received, the packet will be&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; truncated.&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Returns the number of bytes stored in the buffer.&lt;br /&gt;&amp;nbsp;*****************************************************************************/&lt;br /&gt;int recv_packet(void *p, int len)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; char c;&lt;br /&gt;&amp;nbsp;&amp;nbsp; int received = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; /* sit in a loop reading bytes until we put together a whole packet.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Make sure not to copy them into the packet if we run out of room.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; while (1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* get a character to process */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c = get_char();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* handle bytestuffing if necessary */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (c==FR_END) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* a minor optimization: if there is no data in the packet,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * ignore it. This is meant to avoid bothering IP with all&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * the empty packets generated by the duplicate FR_END char-&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * racters which are in turn sent to try to detect line noise.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (received)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (received);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (c==FR_ESC) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c = get_char();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* if "c" is not and FR_ESC character, wait and get another&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * character and then figure out what to store in the packet&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * based on that.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (c==T_FR_END)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c = FR_END;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (c==T_FR_ESC)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c = FR_ESC;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto STORE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STORE:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* here we fall into the default handler and let it store&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * the charater for us&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (received &amp;lt; len)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p[received++] = c;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; _mcx_signal(SCI_RCV_SEMA);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/****************************************************************************&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SCI driver Initialization&lt;br /&gt;&amp;nbsp;&amp;gt; Sets up the ACIA and starts an infinite loop of receive transmit&lt;br /&gt;&amp;nbsp;&amp;gt; QSM configuration summary:&lt;br /&gt;&amp;nbsp;&amp;nbsp; * After reset, the QSM remains in an idle state, requiring initialization&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; of several registers before any serial operations may begin execution.&lt;br /&gt;&amp;nbsp;&amp;nbsp; * The type of serial frame (8 or 9 bit) and the use of partiy must be&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; determined by M. PE and PT.&lt;br /&gt;&amp;nbsp;&amp;nbsp; * For receive operation, WAKE, RWU, ILT, ILIE must be considered.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The receiver must be enabled (RE) and, usually, RIE should be set.&lt;br /&gt;&amp;nbsp;&amp;nbsp; * For transmit operation, the transmitter must be enabled (TE) and,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usually, TIE should be set. The use of wired-OR mode (WOMS) must also&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; be decided. Once the transmitter is configured, data is not sent&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; until TDRE and TC are cleared. To clear TDRE and TC, the SCSR read&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; must be followed by a write to SCDR (either the lower byte or the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; entire word).&lt;br /&gt;&amp;nbsp;&amp;nbsp; * QIVR should be programmed to one of the user-defined vectors ($40-$FF)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; during initialization of the QSM.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; After reset, QIVR determines which two vectors in the exception vector&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; table are to be used for QSM interrupts. The QSPI and SCI submodules&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; have separate interrupt vectors adjacent to each other.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Both submodules use the same interrupt vector which LSB:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1: interrupt generated by QSPI&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0: interrupt generated by QSCI&lt;br /&gt;&amp;nbsp;&amp;gt; Detail Configurations in QSM:&lt;br /&gt;&amp;nbsp;&amp;nbsp; * QMCR:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STOP = 0 (Normal QSM clock operation)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FRZ1 = 0 (Ignore the FREEZE signal on the IMB)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SUPV = 1 (supervisor access)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IARB = $A (priority = 10; $F = highest priority, used by timer)&lt;br /&gt;&amp;nbsp;&amp;nbsp; * QILR:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ILQSPI = 1 (lowest priority)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ILSCI&amp;nbsp; = 7 (highest priority)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; QIVR&amp;nbsp;&amp;nbsp; = set to SCI interrupt handler's address&lt;br /&gt;&lt;br /&gt;****************************************************************************/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-6338914771489100551?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/6338914771489100551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=6338914771489100551' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/6338914771489100551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/6338914771489100551'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2009/12/comtaskc.html' title='COMTASK.C'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-7138321300520653123</id><published>2009-12-17T21:56:00.001-08:00</published><updated>2009-12-17T21:56:46.076-08:00</updated><title type='text'>TCTASK.C</title><content type='html'>/*&lt;br /&gt;���������������������������������������������������������������������������͸&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; THERMOCOUPLE TASK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Copyright (c) 1994&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by Lutfi Shahab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Instrumentation and Controls Laboratory&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dept. of Engineering Physics&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Institut Teknologi Bandung&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp; Date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20/11/94&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp; Platform : Motorola 68HC16 Microcontroller&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; running mcx16 multitasking kernel&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp; Compiler : Whitesmith HC16 Compiler&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp; Target&amp;nbsp;&amp;nbsp; : EPROM-targeted binary code&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp; Description:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This module contains routines for Thermocouple Linearization using&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp; polynomial curvefitting. Only thermocouple type K can be calculated.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp; Temperature adjusted to Celcius.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;���������������������������������������������������������������������������;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#define _WSC_&lt;br /&gt;#define _FAR_&lt;br /&gt;&lt;br /&gt;#ifdef _WSC_&lt;br /&gt;#include &amp;lt;wslxa.h&amp;gt;&lt;br /&gt;#else&lt;br /&gt;enum {ADC_1, ADC_2, ADC_3, ADC_4, ADC_5,ADC_6, ADC_7, ADC_8, N_ADC_CHANNELS};&lt;br /&gt;#endif&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;ctype.h&amp;gt;&lt;br /&gt;#include &amp;lt;math.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#ifdef _WSC_&lt;br /&gt;#include "mcxapi.h"&lt;br /&gt;#include "sysdef.h"&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;#define VREF_PLUS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +2500.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* mV */&lt;br /&gt;#define VREF_MIN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -2500.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* mV */&lt;br /&gt;#define RESOLUTION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* bits */&lt;br /&gt;#define KELVIN_TO_C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 273.20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* based on IPTS-68 */&lt;br /&gt;#define LM335_VT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10.00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* mV per Kelvin degree */&lt;br /&gt;#define TC_GAIN_AMP&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (10000/40)&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* gain of TC op-amp; uV/uV */&lt;br /&gt;#define DIGIT_TO_MILLIVOLT(d)&amp;nbsp;&amp;nbsp;&amp;nbsp; (((d)*scale)+VREF_MIN) /* mV */&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* seebeck coefficients for all TC types */&lt;br /&gt;#define SEEBECK_COEF_K&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40.01 /* uV/K */&lt;br /&gt;#define SEEBECK_COEF_TC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.20&lt;br /&gt;#define SEEBECK_COEF_BN&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;18.05&lt;br /&gt;#define SEEBECK_COEF_E&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;59.80&lt;br /&gt;#define SEEBECK_COEF_JT&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;51.08&lt;br /&gt;#define SEEBECK_COEF_JP&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;17.94&lt;br /&gt;#define SEEBECK_COEF_JN&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;33.10&lt;br /&gt;#define SEEBECK_COEF_K&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;40.01&lt;br /&gt;#define SEEBECK_COEF_KP &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;26.47&lt;br /&gt;#define SEEBECK_COEF_KN &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;13.54&lt;br /&gt;#define SEEBECK_COEF_R&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 5.62&lt;br /&gt;#define SEEBECK_COEF_S&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 5.70&lt;br /&gt;#define SEEBECK_COEF_T&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;39.67&lt;br /&gt;#define SEEBECK_COEF_TP &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 6.33&lt;br /&gt;#define SEEBECK_COEF_TN &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;33.32&lt;br /&gt;&lt;br /&gt;#define SEEBECK_COEF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SEEBECK_COEF_K&lt;br /&gt;&lt;br /&gt;/* number of linearization polynomial equations as T(V) */&lt;br /&gt;#define NUMEQN_V&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;br /&gt;&lt;br /&gt;/* number of linearization polynomial equations as V(T) */&lt;br /&gt;#define NUMEQN_T&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;&lt;br /&gt;#define ORDE_T&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&lt;br /&gt;#define ORDE_V&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;br /&gt;#define TC_VOLT_MIN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tc_table.v_range[0].min&lt;br /&gt;#define TC_VOLT_MAX&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tc_table.v_range[NUMEQN_V-1].max&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;typedef struct {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double min, max;&lt;br /&gt;}RANGE;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;typedef struct {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RANGE t_range[NUMEQN_T];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* temperature range */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RANGE v_range[NUMEQN_V];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* voltage range */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double coef_t[NUMEQN_T][ORDE_T+1];&amp;nbsp;&amp;nbsp; /* polynomial coefficients for every equation of V(T) */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double coef_v[NUMEQN_V][ORDE_V+1];&amp;nbsp;&amp;nbsp; /* polynomial coefficients for every equation of T(V) */&lt;br /&gt;} TCRECTYPE;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TCRECTYPE tc_table = {&lt;br /&gt;&amp;nbsp; /* Temperature ranges (in C) for each polynomial equation of type K */&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {-270.00,&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; 0.00, 1372.00},&lt;br /&gt;&amp;nbsp; },&lt;br /&gt;&amp;nbsp; /* Voltage ranges in microvolts */&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {-6.457816e+03, -6.441148e+03},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {-6.441148e+03, -5.891361e+03},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {-5.891361e+03,&amp;nbsp; 1.853306e+01},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 1.853306e+01,&amp;nbsp; 8.136555e+03},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 8.136555e+03,&amp;nbsp; 5.487490e+04}&lt;br /&gt;&amp;nbsp; },&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; /* Coefficients for each polynomial equation V(T) */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0000000000E+00, 3.9475433139E+01, 2.7465251138E-02,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -1.6565406716E-04,-1.5190912392E-06,-2.4581670924E-08,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -2.4757917816E-10,-1.5585276173E-12,-5.9729921255E-0015,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -1.2688801216E-17,-1.1382797374E-20&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -1.8533063273E+01, 3.8918344612E+01, 1.6645154356E-02,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -7.8702374448E-05, 2.2835785557E-07,-3.5700231258E-10,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.9932909136E-13,-1.2849848798E-16, 2.2239974336E-20,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00, 0.00&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; },&lt;br /&gt;&lt;br /&gt;&amp;nbsp; /* Coefficients for each polynomial equation T(V) in C */&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {-8.887677e+05,-2.054743e+02, 1.307316e-02, 5.611858e-06, 3.034392e-10},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {-1.215521e+06,-7.993152e+02,-1.971155e-01,-2.160351e-05,-8.879453e-10},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {0.0000000e+00, 2.382475e-02,-2.372981e-06,-6.567714e-10,-9.208444e-14},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {0.0000000e+00, 2.548081e-02,-5.270562e-07, 7.989244e-11,-3.520933e-15},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {-1.035821e+01, 2.712314e-02,-1.781781e-07, 3.243000e-12,-1.166816e-17}&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;double scale;&amp;nbsp;&amp;nbsp; /* transformation scale */&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* calculate seebeck voltage value for a given temperature and TC */&lt;br /&gt;/*&lt;br /&gt;double calc_seebeck(double tempin)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; return (SEEBECK_COEF * tempin);&lt;br /&gt;}&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* calculate TC temperature given volts using polynomial equations */&lt;br /&gt;double volt2temp_poly(double voltin)&amp;nbsp;&amp;nbsp; /* input voltage */&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; int pi; /* index to appropriate polynom */&lt;br /&gt;&amp;nbsp; int i;&lt;br /&gt;&amp;nbsp; double yout;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if (voltin &amp;lt; TC_VOLT_MIN)&amp;nbsp; /* check to see if voltage in valid range */&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; voltin = TC_VOLT_MIN;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else if (voltin &amp;gt; TC_VOLT_MAX)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; voltin = TC_VOLT_MAX;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; pi = 0;&lt;br /&gt;&amp;nbsp; /* search through breakpoint list looking for proper interval */&lt;br /&gt;&amp;nbsp; while ( (pi &amp;lt; NUMEQN_V) &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; !((voltin &amp;gt;= tc_table.v_range[pi].min) &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; (voltin &amp;lt;= tc_table.v_range[pi].max)))&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pi++;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; /* calculate TC temperature as a function of volts */&lt;br /&gt;&amp;nbsp; yout = tc_table.coef_v[pi][ORDE_V];&lt;br /&gt;&lt;br /&gt;&amp;nbsp; for (i=ORDE_V-1; i&amp;lt;=0; i--)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* efficient, nested polynomial calculation */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; yout = yout*voltin+tc_table.coef_v[pi][i];&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return (yout);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/******************************************************************************&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONVERTS TC VOLTS TO TEMPERATURE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Reference temperature sensored by IC LM335Z, which has output&lt;br /&gt;&amp;nbsp;&amp;nbsp; characteristic: 10 mV/K. Scale has been stated 5/1023 = 4.9 mV/LSB,&lt;br /&gt;&amp;nbsp;&amp;nbsp; so if we have vi (in integer), it must be multiplied by scale to convert&lt;br /&gt;&amp;nbsp;&amp;nbsp; to voltage temperature, and divided it by resolution of sensor to get&lt;br /&gt;&amp;nbsp;&amp;nbsp; real temperature. ref_scale = scale/LM335_VT = (4.9 mV/LSB)/(10 mV/K) =&lt;br /&gt;&amp;nbsp;&amp;nbsp; 0.49 K/LSB. Increasing vi in its LSB will increase temperature by 0.49 K.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When calibrate (T=25 C), LM335 generate 2.982 volts (273.2+25) according&lt;br /&gt;&amp;nbsp;&amp;nbsp; to his current temperature. In Differential op-amp, this temperature-based&lt;br /&gt;&amp;nbsp;&amp;nbsp; voltage used to compute temperature reference. We don't need to compute it&lt;br /&gt;&amp;nbsp;&amp;nbsp; in MCU.&lt;br /&gt;&amp;nbsp;&amp;nbsp; All of 'kerumitan' has been handled by op-amps.&lt;br /&gt;*******************************************************************************/&lt;br /&gt;void tc_converter(unsigned int *vi,&amp;nbsp;&amp;nbsp;&amp;nbsp; /* measured TC volts&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; double *temp)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* linearized temperature */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* return: error code, 0 = no error */&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; int i;&lt;br /&gt;&amp;nbsp;&amp;nbsp; double v;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; for (i=ADC_1; i&amp;lt;=ADC_8; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v = DIGIT_TO_MILLIVOLT(vi[i])/TC_GAIN_AMP*1000; /* unit in microvolts !*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp[i] = volt2temp_poly(&amp;amp;v);&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;double lin_t[N_ADC_CHANNELS];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* linearized temperature */&lt;br /&gt;&lt;br /&gt;void TC_Task(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int *mbx;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* ADC resolution */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; scale = (double)(VREF_PLUS-VREF_MIN)/(double)((1&amp;lt;&amp;lt;RESOLUTION)-1); /* mV/bit */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #ifdef _WSC_&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FOREVER&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mbx = _mcx_receive_w(CNV_SEMA);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tc_converter((mbx, (double *)lin_t);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mcx_send_mbx_w(TC_MBX, lin_t, CNV_FINISH_SEMA);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mcx_msg_done(mbx);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-7138321300520653123?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/7138321300520653123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=7138321300520653123' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7138321300520653123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/7138321300520653123'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2009/12/tctaskc.html' title='TCTASK.C'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-5790936502626877774</id><published>2009-12-17T21:55:00.001-08:00</published><updated>2009-12-17T21:55:33.862-08:00</updated><title type='text'>SLIISR.S</title><content type='html'>;����������������������������������������������������������������������������Ŀ&lt;br /&gt;;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SLIP PROTOCOL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTERRUPT HANDLER&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for 68HC16Z1 Microcontroller running MCX-16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; compiled with Whitesmiths C compiler&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (c) June 1995&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; M. Lutfi&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Engineering Physics Dept.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Faculty of Industrial Tech.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Institut Technologi Bandung&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;;������������������������������������������������������������������������������&lt;br /&gt;&lt;br /&gt;.PROCESSOR M68HC16&lt;br /&gt;.TITLE "Thesis Project : SLIP - communication handler"&lt;br /&gt;.INCLUDE "hc16regs.mac"&lt;br /&gt;.INCLUDE "mcx16.mac"&lt;br /&gt;.INCLUDE "lgrset.mac"&lt;br /&gt;&lt;br /&gt;;*******************************************************************************&lt;br /&gt;;*&amp;nbsp; SCI DRIVER DATA VARIABLES&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*******************************************************************************&lt;br /&gt;.PUBLIC _in_char, _out_char&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .psect&amp;nbsp; _data&lt;br /&gt;&lt;br /&gt;_in_char:&amp;nbsp;&amp;nbsp;&amp;nbsp; .BYTE (1)&lt;br /&gt;_out_char:&amp;nbsp;&amp;nbsp; .BYTE (1)&lt;br /&gt;_dest_temp:&amp;nbsp; .BYTE (1)&lt;br /&gt;_src_temp:&amp;nbsp;&amp;nbsp; .BYTE (1)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .psect&amp;nbsp;&amp;nbsp;&amp;nbsp; _text&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .even&lt;br /&gt;&lt;br /&gt;.LIST + .MACRO&lt;br /&gt;&lt;br /&gt;;*******************************************************************************&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S C I&amp;nbsp;&amp;nbsp; I N P U T&amp;nbsp;&amp;nbsp; D R I V E R&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*******************************************************************************&lt;br /&gt;.PUBLIC _sciidrv&lt;br /&gt;_sciidrv:&lt;br /&gt;&lt;br /&gt;rdclr:&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Get current status of SCI&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitb&amp;nbsp;&amp;nbsp; #RDRF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; See if receive data ready&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq&amp;nbsp;&amp;nbsp;&amp;nbsp; scirdy&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; if not SCI is a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; SCDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Read input data&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bra&amp;nbsp;&amp;nbsp;&amp;nbsp; rdclr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Loop until clear&lt;br /&gt;scirdy:&amp;nbsp;&amp;nbsp; andp&amp;nbsp;&amp;nbsp; #0FF1Fh&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Turn interrupts on again&lt;br /&gt;&lt;br /&gt;inloop:&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; bank 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbek&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; EK = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbxk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; XK = 1 (K=$11xx)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #SCI_RCV_SEMA&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; #MCX_WAIT_&amp;nbsp; ; Wait for input character&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; swi&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; _in_char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Get input character captured by isr&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldx&amp;nbsp;&amp;nbsp;&amp;nbsp; #_src_temp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Move it to safe place&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; staa&amp;nbsp;&amp;nbsp; 0,x&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #SCI_RCV_Q&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Then move the character into SCIIQ&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; #MCX_ENQUEUE_W_&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; swi&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bra&amp;nbsp;&amp;nbsp;&amp;nbsp; inloop&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Loop forever&lt;br /&gt;&lt;br /&gt;;*******************************************************************************&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S C I&amp;nbsp;&amp;nbsp; O U T P U T&amp;nbsp;&amp;nbsp; D R I V E R&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*******************************************************************************&lt;br /&gt;&lt;br /&gt;sciodrv:&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #0Fh&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbek&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; EK=F&amp;nbsp; (K=$Fxxx)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbxk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; XK=1&amp;nbsp; (K=$F1xx)&lt;br /&gt;&lt;br /&gt;scioloop:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldx&amp;nbsp;&amp;nbsp;&amp;nbsp; #_dest_temp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #SCI_TRM_Q&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Get next character from SCI_TRM_Q and put it into&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; #MCX_DEQUEUE_W_ ; _dest_temp as temporary location&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; swi&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; 0,x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Get the character&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmpb&amp;nbsp;&amp;nbsp; #0Ah&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; New Line?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bne&amp;nbsp;&amp;nbsp;&amp;nbsp; notnl&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Branch if not "\n"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Get SCI status&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; #0Dh&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; staa&amp;nbsp;&amp;nbsp; SCDR+1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Output a "\r"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; #RIE+RE+TE+TIE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std&amp;nbsp;&amp;nbsp;&amp;nbsp; SCCR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Enable transmitter interrupts&lt;br /&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #RIE+RE+TE+TIE&lt;br /&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stab&amp;nbsp;&amp;nbsp; SCCR1+1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Enable transmitter interrupts&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #SCI_TRM_SEMA&amp;nbsp;&amp;nbsp; ; Wait for it to be output completely&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; #MCX_WAIT_&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; swi&lt;br /&gt;&lt;br /&gt;notnl:&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Read status&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; 0,x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Get character to output&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; staa&amp;nbsp;&amp;nbsp; SCDR+1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Output it&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; #RIE+RE+TE+TIE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std&amp;nbsp;&amp;nbsp;&amp;nbsp; SCCR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Enable transmitter interrupts&lt;br /&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #RIE+RE+TE+TIE&lt;br /&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stab&amp;nbsp;&amp;nbsp; SCCR1+1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Enable transmitter interrupts&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #SCI_TRM_SEMA&amp;nbsp;&amp;nbsp; ; Wait for it to be output completely&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; #MCX_WAIT_&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; swi&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bra&amp;nbsp;&amp;nbsp;&amp;nbsp; scioloop&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Loop forever&lt;br /&gt;&lt;br /&gt;;*******************************************************************************&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S C I&amp;nbsp;&amp;nbsp; I N T E R R U P T&amp;nbsp;&amp;nbsp; S E R V I C E&amp;nbsp;&amp;nbsp; R O U T I N E&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*******************************************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sciisr:&amp;nbsp;&amp;nbsp; orp&amp;nbsp;&amp;nbsp;&amp;nbsp; #INTS_OFF&amp;nbsp;&amp;nbsp; ; Save the interrupt context&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pshm&amp;nbsp;&amp;nbsp; d,e,x,y,z,k&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbek&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; EK=1&amp;nbsp; (K=$1xxx)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbyk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; YK=1&amp;nbsp; (K=$1x1x)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbzk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ZK=1&amp;nbsp; (K=$1x11)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clrb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbxk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; XK=0&amp;nbsp; (K=$1011)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldx&amp;nbsp;&amp;nbsp;&amp;nbsp; 0000h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; x = [$10000]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tst&amp;nbsp;&amp;nbsp;&amp;nbsp; 000Ah&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bne&amp;nbsp;&amp;nbsp;&amp;nbsp; notlvl0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldy&amp;nbsp;&amp;nbsp;&amp;nbsp; 0004h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; y = [$10004]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sts&amp;nbsp;&amp;nbsp;&amp;nbsp; 8,y&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; [y+8] = SP&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lds&amp;nbsp;&amp;nbsp;&amp;nbsp; 14h,x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; SP = [X+20]&lt;br /&gt;notlvl0:&amp;nbsp; inc&amp;nbsp;&amp;nbsp;&amp;nbsp; 000Ah&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; [$1000A] = [$1000A]+1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; andp&amp;nbsp;&amp;nbsp; #SCIINTON&amp;nbsp;&amp;nbsp; ; Interrupts back on&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldz&amp;nbsp;&amp;nbsp;&amp;nbsp; 12h,x&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #0Fh&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; EK = F&amp;nbsp; (K=$Fx11)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbek&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbxk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; XK = 1&amp;nbsp; (K=$F111)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldx&amp;nbsp;&amp;nbsp;&amp;nbsp; #0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;h&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldy&amp;nbsp;&amp;nbsp;&amp;nbsp; #_in_char&amp;nbsp;&amp;nbsp; ; y = &amp;amp;inchar&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCCR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; If TDRE is set, see if SCCR1 has TIE set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitb&amp;nbsp;&amp;nbsp; #TIE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq&amp;nbsp;&amp;nbsp;&amp;nbsp; notout&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; If not, this is not an output interrupt&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Check SCI status register for TDRE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bita&amp;nbsp;&amp;nbsp; #TDRE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq&amp;nbsp;&amp;nbsp;&amp;nbsp; chkrd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; TDRE not set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; #RIE+RE+TE&amp;nbsp; ; If so, this is a transmitter interrupt, turn&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp; TIE off now that the character is out&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std&amp;nbsp;&amp;nbsp;&amp;nbsp; SCCR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Update SCCR1. That takes care of the output side&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Now treat a possible input interrupt that is&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp; simultaneous with the output. Reread the status&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitb&amp;nbsp;&amp;nbsp; #RDRF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Check for RDRF set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq&amp;nbsp;&amp;nbsp;&amp;nbsp; noin&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Branch if no input occurred&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Yes it did. Read the input character&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; andb&amp;nbsp;&amp;nbsp; #7Fh&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Strip it to 7 bits&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stab&amp;nbsp;&amp;nbsp; 0,y&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Store in temporary location (inchar)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSHSEMA SCI_TRM_SEMA&amp;nbsp;&amp;nbsp; ; Put SCI_TRM_SEMA into Signal List&lt;br /&gt;noin:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; #SCI_TRM_SEMA&amp;nbsp;&amp;nbsp; ; Now signal the SCI output semaphore&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jmp&amp;nbsp;&amp;nbsp;&amp;nbsp; isrrtn&lt;br /&gt;&lt;br /&gt;notout:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Read status again&lt;br /&gt;chkrd:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitb&amp;nbsp;&amp;nbsp; #RDRF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; See if this is an input interrupt. Check RDRF&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq&amp;nbsp;&amp;nbsp;&amp;nbsp; notin&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; It is not an input interrupt. So what was it?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; If it was an input interrupt, get the character&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stab&amp;nbsp;&amp;nbsp; 0,y&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Store in temporary location (inchar)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; That takes care of the input. Now see if there&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp; was a simultaneous output interrupt&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Check SCI status register for TDRE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bita&amp;nbsp;&amp;nbsp; #TDRE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq&amp;nbsp;&amp;nbsp;&amp;nbsp; noout&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; TDRE not set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCCR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; If TDRE is set, see if SCCR1 has TIE set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitb&amp;nbsp;&amp;nbsp; #TIE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq&amp;nbsp;&amp;nbsp;&amp;nbsp; noout&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; If not, this cannot be an output interrupt&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; #RIE+RE+TE&amp;nbsp; ; If so, this is a transmitter interrupt, turn&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp; TIE off now that the character is out&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std&amp;nbsp;&amp;nbsp;&amp;nbsp; SCCR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Update SCCR1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSHSEMA SCI_TRM_SEMA&amp;nbsp;&amp;nbsp; ; Signal SCI Output Semaphore&lt;br /&gt;&lt;br /&gt;noout:&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; #SCI_RCV_SEMA&amp;nbsp;&amp;nbsp; ; Now signal the input semaphore&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jmp&amp;nbsp;&amp;nbsp;&amp;nbsp; isrrtn&lt;br /&gt;&lt;br /&gt;notin:&amp;nbsp;&amp;nbsp;&amp;nbsp; clra&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; This wasn't a recognizable SCI interrupt&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jmp&amp;nbsp;&amp;nbsp;&amp;nbsp; isrrtn&lt;br /&gt;&lt;br /&gt;;*******************************************************************************&lt;br /&gt;;*&amp;nbsp; SCI VECTOR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*******************************************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.END&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6504844-5790936502626877774?l=technostuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technostuff.blogspot.com/feeds/5790936502626877774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6504844&amp;postID=5790936502626877774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5790936502626877774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6504844/posts/default/5790936502626877774'/><link rel='alternate' type='text/html' href='http://technostuff.blogspot.com/2009/12/sliisrs.html' title='SLIISR.S'/><author><name>MLS</name><uri>http://www.blogger.com/profile/07163015487982507289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6504844.post-5350188827254197748</id><published>2009-12-17T21:54:00.001-08:00</published><updated>2009-12-17T21:54:34.361-08:00</updated><title type='text'>SCIDRV.S</title><content type='html'>;*****************************************************************************&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S C I&amp;nbsp;&amp;nbsp; D R I V E R&amp;nbsp;&amp;nbsp; M O D U L E&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UNDER HC16 MULTITASKING EXECUTIVE (MCX16)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WITH SLIP PROTOCOL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Compiled with Whitesmith Cross Assember ver 1.9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (c) 11 December 1994&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by M. Lutfi&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thesis Project&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Instrumentation and Controls lab.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Department of Engineering Physics&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FACULTY OF INDUSTRIAL TECHNOLOGY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BANDUNG INSTITUTE OF TECHNOLOGY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*****************************************************************************&lt;br /&gt;.PROCESSOR M68HC16&lt;br /&gt;.TITLE "SCI DRIVER MODULE"&lt;br /&gt;&lt;br /&gt;.INCLUDE "lgrset.s"&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .PAGE "SCIDRV"&lt;br /&gt;;*******************************************************************************&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S C I&amp;nbsp;&amp;nbsp; I N P U T&amp;nbsp;&amp;nbsp; D R I V E R&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; with SLIP data-link layer protocol&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*******************************************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sciidrv:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; orp&amp;nbsp;&amp;nbsp;&amp;nbsp; #INTS_OFF&amp;nbsp;&amp;nbsp; ; Turn off interrupts while enabling SCI&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #0Fh&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbek&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; EK = F (K=Fxxxh)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; #008Ah&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std&amp;nbsp;&amp;nbsp;&amp;nbsp; QMCR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Set IARB=10 for intermodule bus arbitration&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; QILR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Get content of QSM Interrupt Levels Register&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; anda&amp;nbsp;&amp;nbsp; #0E8h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Clear out ILSCI field&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oraa&amp;nbsp;&amp;nbsp; #SCIINTLV&amp;nbsp;&amp;nbsp; ; Set SCI interrupt level in ILSCI field&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #SCIINTV&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Load SCI Interrupt Vector #&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std&amp;nbsp;&amp;nbsp;&amp;nbsp; QILR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Update QILR&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; #RIE+RE+TE&amp;nbsp; ; Receiver enabled with interrupts active,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Transmitter enabled without interrupts,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 1 Start Bit, 1 Stop Bit, 8 Data Bits&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std&amp;nbsp;&amp;nbsp;&amp;nbsp; SCCR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Set up SCI operating conditions&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; #BR9600&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Set up 9600 baud rate&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std&amp;nbsp;&amp;nbsp;&amp;nbsp; SCCR0&lt;br /&gt;&lt;br /&gt;rdclr:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Get current status of SCI&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitb&amp;nbsp;&amp;nbsp; #RDRF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; See if receive data ready&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq&amp;nbsp;&amp;nbsp;&amp;nbsp; scirdy&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; if not SCI is a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; SCDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Read input data&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bra&amp;nbsp;&amp;nbsp;&amp;nbsp; rdclr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Loop until clear&lt;br /&gt;&lt;br /&gt;scirdy:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; andp&amp;nbsp;&amp;nbsp; #0FF1Fh&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Turn interrupts on again&lt;br /&gt;&lt;br /&gt;inloop:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbek&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; EK = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbxk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; XK = 1 (K=11xxh)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #SCIISEMA&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; #MCX_WAIT&amp;nbsp;&amp;nbsp; ; Wait for input character&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; swi&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; inchar&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Get input character captured by isr&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldx&amp;nbsp;&amp;nbsp;&amp;nbsp; #EQ3src&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Move it to safe place&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; staa&amp;nbsp;&amp;nbsp; 0,x&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #SCIIQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Then move the character into SCIIQ&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; #MCX_ENQUEUE_W&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; swi&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bra&amp;nbsp;&amp;nbsp;&amp;nbsp; inloop&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Loop forever&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .PAGE "SCIDRV"&lt;br /&gt;;*******************************************************************************&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S C I&amp;nbsp;&amp;nbsp; O U T P U T&amp;nbsp;&amp;nbsp; D R I V E R&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;;*******************************************************************************&lt;br /&gt;&lt;br /&gt;sciodrv:&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #0Fh&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbek&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; EK=F&amp;nbsp; (K=Fxxxh)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbxk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; XK=1&amp;nbsp; (K=F1xxh)&lt;br /&gt;&lt;br /&gt;scioloop: ldx&amp;nbsp;&amp;nbsp;&amp;nbsp; #DQ4dest&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #SCIOQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Get next character from SCIOQ and put it into&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; #MCX_QUEUE_W&amp;nbsp; ; DQ4dest as temporary location&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; swi&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; 0,x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Get the character&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmpb&amp;nbsp;&amp;nbsp; #0Ah&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; New Line?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bne&amp;nbsp;&amp;nbsp;&amp;nbsp; notnl&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Branch if not "\n"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Get SCI status&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; #0Dh&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; staa&amp;nbsp;&amp;nbsp; SCDR+1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Output a "\r"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; #RIE+RE+TE+TIE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std&amp;nbsp;&amp;nbsp;&amp;nbsp; SCCR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Enable transmitter interrupts&lt;br /&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #RIE+RE+TE+TIE&lt;br /&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stab&amp;nbsp;&amp;nbsp; SCCR1+1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Enable transmitter interrupts&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #SCIOSEMA&amp;nbsp;&amp;nbsp; ; Wait for it to be output completely&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; #MCX_WAIT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; swi&lt;br /&gt;&lt;br /&gt;notnl:&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Read status&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; 0,x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Get character to output&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; staa&amp;nbsp;&amp;nbsp; SCDR+1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Output it&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; #RIE+RE+TE+TIE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std&amp;nbsp;&amp;nbsp;&amp;nbsp; SCCR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Enable transmitter interrupts&lt;br /&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #RIE+RE+TE+TIE&lt;br /&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stab&amp;nbsp;&amp;nbsp; SCCR1+1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Enable transmitter interrupts&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #SCIOSEMA&amp;nbsp;&amp;nbsp; ; Wait for it to be output completely&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; #MCX_WAIT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; swi&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bra&amp;nbsp;&amp;nbsp;&amp;nbsp; scioloop&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Loop forever&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .PAGE "SCIDRV"&lt;br /&gt;;�����������������������������������������������������������������������������Ŀ&lt;br /&gt;;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; S C I&amp;nbsp;&amp;nbsp; I N T E R R U P T&amp;nbsp;&amp;nbsp; S E R V I C E&amp;nbsp;&amp;nbsp; R O U T I N E&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;;�&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; �&lt;br /&gt;&amp;nbsp;�������������������������������������������������������������������������������&lt;br /&gt;&lt;br /&gt;.MACRO pshsema&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; ?1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; orp&amp;nbsp;&amp;nbsp;&amp;nbsp; #INTS_OFF&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lde&amp;nbsp;&amp;nbsp;&amp;nbsp; 06h,x&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stab&amp;nbsp;&amp;nbsp; e,z&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; incw&amp;nbsp;&amp;nbsp; 06h,x&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; andp&amp;nbsp;&amp;nbsp; #SCIINTON&lt;br /&gt;&amp;nbsp;.EXITM&lt;br /&gt;&lt;br /&gt;sciisr:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; orp&amp;nbsp;&amp;nbsp;&amp;nbsp; #INTS_OFF&amp;nbsp;&amp;nbsp; ; Save the interrupt context&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pshm&amp;nbsp;&amp;nbsp; d,e,x,y,z,k&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbek&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; EK=1&amp;nbsp; (K=1xxxh)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbyk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; YK=1&amp;nbsp; (K=1x1xh)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbzk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ZK=1&amp;nbsp; (K=1x11h)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clrb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbxk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; XK=0&amp;nbsp; (K=1011h)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldx&amp;nbsp;&amp;nbsp;&amp;nbsp; 0000h&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tst&amp;nbsp;&amp;nbsp;&amp;nbsp; 000Ah&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bne&amp;nbsp;&amp;nbsp;&amp;nbsp; notlvl0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldy&amp;nbsp;&amp;nbsp;&amp;nbsp; 0004&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sts&amp;nbsp;&amp;nbsp;&amp;nbsp; 8,y&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lds&amp;nbsp;&amp;nbsp;&amp;nbsp; 14h,x&lt;br /&gt;notlvl0:&amp;nbsp; inc&amp;nbsp;&amp;nbsp;&amp;nbsp; 000Ah&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; andp&amp;nbsp;&amp;nbsp; #SCIINTON&amp;nbsp;&amp;nbsp; ; Interrupts back on&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldz&amp;nbsp;&amp;nbsp;&amp;nbsp; 12h,x&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #0Fh&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; EK = F&amp;nbsp; (K=$Fx11)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbek&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldab&amp;nbsp;&amp;nbsp; #1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbxk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; XK = 1&amp;nbsp; (K=$F111)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldx&amp;nbsp;&amp;nbsp;&amp;nbsp; #0000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldy&amp;nbsp;&amp;nbsp;&amp;nbsp; #inchar&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCCR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; If TDRE is set, see if SCCR1 has TIE set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitb&amp;nbsp;&amp;nbsp; #TIE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq&amp;nbsp;&amp;nbsp;&amp;nbsp; notout&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; If not, this is not an output interrupt&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Check SCI status register for TDRE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bita&amp;nbsp;&amp;nbsp; #TDRE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq&amp;nbsp;&amp;nbsp;&amp;nbsp; chkrd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; TDRE not set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; #RIE+RE+TE&amp;nbsp; ; If so, this is a transmitter interrupt, turn&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp; TIE off now that the character is out&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std&amp;nbsp;&amp;nbsp;&amp;nbsp; SCCR1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Update SCCR1. That takes care of the output side&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Now treat a possible input interrupt that is&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp; simultaneous with the output. Reread the status&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitb&amp;nbsp;&amp;nbsp; #RDRF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Check for RDRF set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq&amp;nbsp;&amp;nbsp;&amp;nbsp; noin&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Branch if no input occurred&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Yes it did. Read the input character&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; andb&amp;nbsp;&amp;nbsp; #7Fh&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Strip it to 7 bits&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stab&amp;nbsp;&amp;nbsp; 0,y&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Store in temporary location (inchar)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pshsema SCIISEMA&amp;nbsp;&amp;nbsp; ; Put SCIISEMA into Signal List&lt;br /&gt;noin:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldaa&amp;nbsp;&amp;nbsp; #SCIOSEMA&amp;nbsp;&amp;nbsp; ; Now signal the SCI output semaphore&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jmp&amp;nbsp;&amp;nbsp;&amp;nbsp; isrrtn&lt;br /&gt;&lt;br /&gt;notout:&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCSR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Read status again&lt;br /&gt;chkrd:&amp;nbsp;&amp;nbsp;&amp;nbsp; bitb&amp;nbsp;&amp;nbsp; #RDRF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; See if this is an input interrupt. Check RDRF&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq&amp;nbsp;&amp;nbsp;&amp;nbsp; notin&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; It is not an input interrupt. So what was it?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldd&amp;nbsp;&amp;nbsp;&amp;nbsp; SCDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp
