{"id":13621,"date":"2022-09-28T07:14:08","date_gmt":"2022-09-28T07:14:08","guid":{"rendered":"https:\/\/bryceautomation.com\/?p=13621"},"modified":"2022-10-31T15:57:11","modified_gmt":"2022-10-31T15:57:11","slug":"kim-1-scan-based-timer","status":"publish","type":"post","link":"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/","title":{"rendered":"Kim-1 Scan Based Timer"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction to the Kim-1 Scan Based Timer<\/h2>\n\n\n\n<p>In this post, I&#8217;ll cover some code I wrote for a Kim-1 Scan Based Timer.  I&#8217;ll be using the Kim UNO for this post.  You may have to modify the program for your own use.  You can calibrate this timer by changing the number of loops, or by adding NOP instructions to get it just right for your application.  I put this timer together to tune some PID loops.  Not all PID controllers have an accurate time base, so this gave me the ability to adjust how fast the timer runs.  It&#8217;s not a perfect way to run a timer, but it works well if you need something you can calibrate to a specific application.<\/p><div id=\"bryce-558119065\" class=\"bryce-afterfirst bryce-entity-placement\"><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-8316758073402323\" crossorigin=\"anonymous\"><\/script><ins class=\"adsbygoogle\" style=\"display:block;\" data-ad-client=\"ca-pub-8316758073402323\" \ndata-ad-slot=\"7728240895\" \ndata-ad-format=\"auto\"><\/ins>\n<script> \n(adsbygoogle = window.adsbygoogle || []).push({}); \n<\/script>\n<\/div>\n\n\n\n<p>The settings in this project are fairly accurate, but you might want to make some adjustments on your own to calibrate it further.  It&#8217;s set up to run as a stop watch.  Key #1 starts the timer, and Key #3 stops the timer.  After you stop the timer with Key #3, you can either reset the timer (#2), or exit (#4).  I used the<a href=\"https:\/\/www.masswerk.at\/6502\/assembler.html\"> 6502 Online Assembler <\/a>to compile this project before sending the OPCODES to the KIM.  <\/p>\n\n\n\n<p>After compiling the project,  you can just shut off the addresses in the online compiler, and copy\/paste the code into notepad.  Remove any Carriage Return \/ Linefeeds, and replace the spaces with &#8220;.&#8221; (be sure there is also one at the end).  After that, you can paste it into your KIM in TTY mode.   In this case, I set up the character and line delays for 10ms.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"336\" height=\"444\" data-src=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/09\/KimUno-1.png\" alt=\"\" class=\"wp-image-13624 lazyload\" data-srcset=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/09\/KimUno-1.png 336w, https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/09\/KimUno-1-227x300.png 227w\" data-sizes=\"(max-width: 336px) 100vw, 336px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 336px; --smush-placeholder-aspect-ratio: 336\/444;\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Initialize the Registers for the  Kim-1 Scan Based Timer<\/h2>\n\n\n\n<p>As usual, I always like to start off a project by initializing the registers.  It&#8217;s probably not a bad idea to CLD (Clear Decimal) as well, although I didn&#8217;t worry about that in this project.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n.ORG $0200\n\nRESTART:\nLDA #00  ; Load Zeros to Registers\nLDX #00\nLDY #00\nSTA $F9  ; Store Zeros to Display\nSTA $FA\nSTA $FB <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Wait for User Input<\/h2>\n\n\n\n<p>At this point, we need to wait for the user to press a key.  We&#8217;ll continue to update the display while we wait this user input.  After that, if they press 2, then we will clear all registers.  Basically, this just restarts the program.  If they press 4, then we jump to $1C64, which exits back to KIM.  If there is no user input, then we jump back to the WAIT label.  However, if they did press key 1, then we jump to the BEGIN Label.  We&#8217;ll describe this logic in the next segment of this post.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>WAIT:\nJSR $1F1F  ; SCANDS (Update Display)\nJSR $1F6A  ; GETKEY (Check keys on Keypad)\nCMP #$02   ; If 2, then Restart at Zero\nBEQ RESTART\nCMP #$04   ; If 4, then Exit to KIM\nBNE CONT4  ; I had to BNE, since $1C64 is out of branch reach.\nJMP $1C64  ; Exit \n\nCONT4:\nCMP #$01   ; If 1, then go to BEGIN to start the timer\nBNE WAIT\nJMP BEGIN <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Running the Kim-1 Scan Based Timer<\/h2>\n\n\n\n<p>This next section is where we set up the delay loop, and can calibrate the timer.  As you can see, we start off by updating the display.  After that, we load 9 into the X register.  Think of this value as a &#8220;course adjust&#8221; for calibrating the timer.  The NOPS are just there to burn some time.  While we are waiting in this loop, we might as well check the buttons again as well.  If we see a 3, then we&#8217;ll enter wait mode.<\/p>\n\n\n\n<p>Remember X started off as 9, so now that we&#8217;ve burned some time, we&#8217;ll decrement X, and jump back up to the DELAY Label.  We&#8217;ll continue in this loop until X=0.<\/p>\n\n\n\n<p>Next we need to increment our hundredths of a second.  Since our loop took almost exactly .02 seconds to complete, we&#8217;ll load 2 into the accumulator.  After that, we have a NOP, and you can add more, or remove this NOP for &#8220;fine&#8221; calibration of the timer.<\/p>\n\n\n\n<p>Next, we clear carry and overflow (CLC and CLV).  We switch to decimal mode with SED, because we want to display the numbers in decimal instead of hex.  Finally, we&#8217;ll add whatever is on the display at $F9 to the accumulator, and store the result back to $F9.  This is the right-most digits on your KIM display.  Then we&#8217;ll clear decimal mode with CLD.<\/p>\n\n\n\n<p>If Carry was set, then that means we&#8217;ve gotten to 100 hundredths, and it&#8217;s time to increment the seconds, so we&#8217;ll branch to the INCSEC label.  If not then, we need to restart the delay loop again.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nBEGIN:\nJSR $1F1F  ; SCANDS\n\nLDX #$09   ; Calibration for timer\nDELAY:\nNOP\nNOP\nNOP\nJSR $1F6A  ; GETKEY\nCMP #$03   ; If 3, then enter WAIT mode\nBEQ WAIT \n\nAFTERKEYCHECK:\nDEX\nBNE DELAY  ; Continue loop until it's time to increment hundredths by two.  ie. wait .02 seconds\nNOP\nCLC        ; Clear Carry Flag\nCLV        ; Clear Overflow Flag\nSED        ; Set Decimal Flag\nLDA #2     ; Load 2 into the accumulator\nADC $F9    ; Add right most digits to accumulator (increment by 2)\nSTA $F9    ; Store the incremented value back to the display\nCLD        ; Clear Decimal Flag \n\nBCS INCSEC ; If Carry is set, then it's time to increment seconds.\nJMP BEGIN  ; Go back to BEGIN <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Incrementing Seconds<\/h2>\n\n\n\n<p>Recall for the last section that if we saw a carry bit, then it&#8217;s time to increment our seconds.  This routine will handle that.  Basically, we clear the carry (CLC), and set decimal mode (SED).  We only want to increment the seconds by 1.  Therefore, we will load 1 into the accumulator.  After that, we&#8217;ll add whatever is in $FA to the accumulator.  Next, we store the result back to $FA  Effectively, this increments $FA.  $FA is the middle two digits on your KIM display.  Next, we clear decimal and check for carry.  If we have a carry, then we know it&#8217;s time to increment the hundreds of seconds.  If we don&#8217;t have a carry, then we simply jump back up to execute to the delay loop again.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>INCSEC:\nCLC        ; Clear Carry Flag\nSED        ; Set Decimal Flag\nLDA #01    ; Load 1 to Accumulator\nADC $FA    ; Add middle 2 digits to accumulator (increments by 1)\nSTA $FA    ; Store the value back to the middle 2 digits\nCLD        ; Clear Decimal Flag\n\nBCS INCHUN ; If Carry is set, it's time to increment the left digits\nJMP BEGIN  ; Go back to BEGIN <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Incrementing Hundreds<\/h2>\n\n\n\n<p>This routine works almost exactly like INCSEC.  The exception is that we just increment the left-most digits instead of the middle digits.  This is at memory location $FB.  Just like in the last second, we clear carry and set decimal.  We load 1 into the accumulator, then add $FB to the accumulator.  After that, we store the result to $FB.  Then we&#8217;ll clear decimal, clear carry, and jump back up to our loop.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>INCHUN:\nCLC        ; Clear Carry Flag\nSED        ; Set Decimal Flag\nLDA #01    ; Load 1 to Accumulator\nADC $FB    ; Add left most digits to accumulator (increment by 1)\nSTA $FB    ; Store the incremented value back to the display\nCLD        ; Clear Decimal Flag\nCLC        ; Clear the Carry Flag\n\nJMP BEGIN  ; Back to BEGIN <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Object Code @ .org $0200 for Kim Uno<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>A9.00.A2.00.A0.00.85.F9.85.FA.85.FB.20.1F.1F.20.6A.1F.C9.02.F0.EA.C9.04.D0.03.4C.64.1C.C9.01.D0.EB.4C.24.02.20.1F.1F.A2.09.EA.EA.EA.20.6A.1F.C9.03.F0.D9.CA.D0.F3.EA.18.B8.F8.A9.02.65.F9.85.F9.D8.B0.03.4C.24.02.18.F8.A9.01.65.FA.85.FA.D8.B0.03.4C.24.02.18.F8.A9.01.65.FB.85.FB.D8.18.4C.24.02.\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Using the PAL-1 @ .org $0200<\/h2>\n\n\n\n<p>When setting this up on the PAL-1, I ran into a couple issues.  It seemed like the X register did not decrement like I thought it would, and the keypad reads #$15 when not pressing the keys.  I&#8217;ve modified the object code, so this should run on the PAL-1.  You may need to adjust the delay loops in order for the timer to work properly.  Basically, this is the same program with an extra inner delay loop, and counts in tenths instead of hundredths.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>A9.00.A2.00.A0.00.85.F9.85.FA.85.FB.20.1F.1F.20.6A.1F.C9.02.F0.EA.C9.04.D0.03.4C.64.1C.C9.01.D0.EB.20.6A.1F.20.1F.1F.C9.15.F0.F6.4C.2E.02.20.1F.1F.A9.13.85.10.A9.4E.85.11.C6.11.D0.FC.20.1F.1F.20.6A.1F.C9.03.F0.C5.C6.10.A5.10.D0.E8.EA.18.B8.F8.A9.0A.65.F9.85.F9.D8.B0.03.4C.2E.02.18.F8.A9.01.65.FA.85.FA.D8.B0.03.4C.2E.02.18.F8.A9.01.65.FB.85.FB.D8.18.4C.2E.02.<\/code><\/pre>\n\n\n\n<p>Give it a shot, and if you have questions, or comments please post below!<\/p>\n\n\n\n<p>For more information, visit the <a href=\"https:\/\/bryceautomation.com\/index.php\/category\/vintage-computers\/kim-1\/\">KIM-1 Category Page!<\/a><\/p>\n\n\n\n<p>&#8212; Ricky Bryce<\/p>\n<div id=\"bryce-3540558346\" class=\"bryce-after-content bryce-entity-placement\"><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-8316758073402323\" crossorigin=\"anonymous\"><\/script><ins class=\"adsbygoogle\" style=\"display:block;\" data-ad-client=\"ca-pub-8316758073402323\" \ndata-ad-slot=\"4667596182\" \ndata-ad-format=\"auto\"><\/ins>\n<script> \n(adsbygoogle = window.adsbygoogle || []).push({}); \n<\/script>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Introduction to the Kim-1 Scan Based Timer In this post, I&#8217;ll cover some code I wrote for a Kim-1 Scan Based Timer. I&#8217;ll be using the Kim UNO for this post. You may have to modify the program for your own use. You can calibrate this timer by changing the number of loops, or by <a class=\"moretag btn btn-primary\" href=\"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/\">Read More \u00bb<\/a><\/p>\n","protected":false},"author":1,"featured_media":13624,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[783,727],"tags":[817],"class_list":{"0":"post-13621","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-kim-1","8":"category-vintage-computers","9":"tag-kim-1-timer","10":"czr-hentry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kim-1 Scan Based Timer - Bryce Automation<\/title>\n<meta name=\"description\" content=\"Writing a Kim-1 Scan Based Timer. We&#039;ll cover the assembly code to build a simple Kim-1 scan based timer that you can calibrate.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kim-1 Scan Based Timer - Bryce Automation\" \/>\n<meta property=\"og:description\" content=\"Writing a Kim-1 Scan Based Timer. We&#039;ll cover the assembly code to build a simple Kim-1 scan based timer that you can calibrate.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/\" \/>\n<meta property=\"og:site_name\" content=\"Bryce Automation\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/ricky.bryce.7\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-28T07:14:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-10-31T15:57:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/09\/KimUno-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"336\" \/>\n\t<meta property=\"og:image:height\" content=\"444\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ricky\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/09\\\/28\\\/kim-1-scan-based-timer\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/09\\\/28\\\/kim-1-scan-based-timer\\\/\"},\"author\":{\"name\":\"Ricky\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#\\\/schema\\\/person\\\/5d5b0f6f6ad768f1ee52968338e63af7\"},\"headline\":\"Kim-1 Scan Based Timer\",\"datePublished\":\"2022-09-28T07:14:08+00:00\",\"dateModified\":\"2022-10-31T15:57:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/09\\\/28\\\/kim-1-scan-based-timer\\\/\"},\"wordCount\":1013,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/09\\\/28\\\/kim-1-scan-based-timer\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/KimUno-1.png\",\"keywords\":[\"Kim-1 timer\"],\"articleSection\":[\"Kim-1\",\"Vintage Computers\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/09\\\/28\\\/kim-1-scan-based-timer\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/09\\\/28\\\/kim-1-scan-based-timer\\\/\",\"url\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/09\\\/28\\\/kim-1-scan-based-timer\\\/\",\"name\":\"Kim-1 Scan Based Timer - Bryce Automation\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/09\\\/28\\\/kim-1-scan-based-timer\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/09\\\/28\\\/kim-1-scan-based-timer\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/KimUno-1.png\",\"datePublished\":\"2022-09-28T07:14:08+00:00\",\"dateModified\":\"2022-10-31T15:57:11+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#\\\/schema\\\/person\\\/5d5b0f6f6ad768f1ee52968338e63af7\"},\"description\":\"Writing a Kim-1 Scan Based Timer. We'll cover the assembly code to build a simple Kim-1 scan based timer that you can calibrate.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/09\\\/28\\\/kim-1-scan-based-timer\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/09\\\/28\\\/kim-1-scan-based-timer\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/09\\\/28\\\/kim-1-scan-based-timer\\\/#primaryimage\",\"url\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/KimUno-1.png\",\"contentUrl\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/KimUno-1.png\",\"width\":336,\"height\":444,\"caption\":\"Kim-1 (UNO) Scan Timer\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/09\\\/28\\\/kim-1-scan-based-timer\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bryceautomation.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kim-1 Scan Based Timer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#website\",\"url\":\"https:\\\/\\\/bryceautomation.com\\\/\",\"name\":\"Bryce Automation\",\"description\":\"Automating Home and Industry...\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/bryceautomation.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#\\\/schema\\\/person\\\/5d5b0f6f6ad768f1ee52968338e63af7\",\"name\":\"Ricky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/wphb-cache\\\/gravatar\\\/a8f\\\/a8fe6bf79d292b388ffee281ccb12488x96.jpg\",\"url\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/wphb-cache\\\/gravatar\\\/a8f\\\/a8fe6bf79d292b388ffee281ccb12488x96.jpg\",\"contentUrl\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/wphb-cache\\\/gravatar\\\/a8f\\\/a8fe6bf79d292b388ffee281ccb12488x96.jpg\",\"caption\":\"Ricky\"},\"sameAs\":[\"http:\\\/\\\/bryceautomation.com\",\"https:\\\/\\\/www.facebook.com\\\/ricky.bryce.7\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/ricky-bryce-4367a416\\\/\"],\"url\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/author\\\/ricky\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kim-1 Scan Based Timer - Bryce Automation","description":"Writing a Kim-1 Scan Based Timer. We'll cover the assembly code to build a simple Kim-1 scan based timer that you can calibrate.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/","og_locale":"en_US","og_type":"article","og_title":"Kim-1 Scan Based Timer - Bryce Automation","og_description":"Writing a Kim-1 Scan Based Timer. We'll cover the assembly code to build a simple Kim-1 scan based timer that you can calibrate.","og_url":"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/","og_site_name":"Bryce Automation","article_author":"https:\/\/www.facebook.com\/ricky.bryce.7","article_published_time":"2022-09-28T07:14:08+00:00","article_modified_time":"2022-10-31T15:57:11+00:00","og_image":[{"width":336,"height":444,"url":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/09\/KimUno-1.png","type":"image\/png"}],"author":"Ricky","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/#article","isPartOf":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/"},"author":{"name":"Ricky","@id":"https:\/\/bryceautomation.com\/#\/schema\/person\/5d5b0f6f6ad768f1ee52968338e63af7"},"headline":"Kim-1 Scan Based Timer","datePublished":"2022-09-28T07:14:08+00:00","dateModified":"2022-10-31T15:57:11+00:00","mainEntityOfPage":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/"},"wordCount":1013,"commentCount":0,"image":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/#primaryimage"},"thumbnailUrl":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/09\/KimUno-1.png","keywords":["Kim-1 timer"],"articleSection":["Kim-1","Vintage Computers"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/","url":"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/","name":"Kim-1 Scan Based Timer - Bryce Automation","isPartOf":{"@id":"https:\/\/bryceautomation.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/#primaryimage"},"image":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/#primaryimage"},"thumbnailUrl":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/09\/KimUno-1.png","datePublished":"2022-09-28T07:14:08+00:00","dateModified":"2022-10-31T15:57:11+00:00","author":{"@id":"https:\/\/bryceautomation.com\/#\/schema\/person\/5d5b0f6f6ad768f1ee52968338e63af7"},"description":"Writing a Kim-1 Scan Based Timer. We'll cover the assembly code to build a simple Kim-1 scan based timer that you can calibrate.","breadcrumb":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/#primaryimage","url":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/09\/KimUno-1.png","contentUrl":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/09\/KimUno-1.png","width":336,"height":444,"caption":"Kim-1 (UNO) Scan Timer"},{"@type":"BreadcrumbList","@id":"https:\/\/bryceautomation.com\/index.php\/2022\/09\/28\/kim-1-scan-based-timer\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bryceautomation.com\/"},{"@type":"ListItem","position":2,"name":"Kim-1 Scan Based Timer"}]},{"@type":"WebSite","@id":"https:\/\/bryceautomation.com\/#website","url":"https:\/\/bryceautomation.com\/","name":"Bryce Automation","description":"Automating Home and Industry...","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bryceautomation.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/bryceautomation.com\/#\/schema\/person\/5d5b0f6f6ad768f1ee52968338e63af7","name":"Ricky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bryceautomation.com\/wp-content\/wphb-cache\/gravatar\/a8f\/a8fe6bf79d292b388ffee281ccb12488x96.jpg","url":"https:\/\/bryceautomation.com\/wp-content\/wphb-cache\/gravatar\/a8f\/a8fe6bf79d292b388ffee281ccb12488x96.jpg","contentUrl":"https:\/\/bryceautomation.com\/wp-content\/wphb-cache\/gravatar\/a8f\/a8fe6bf79d292b388ffee281ccb12488x96.jpg","caption":"Ricky"},"sameAs":["http:\/\/bryceautomation.com","https:\/\/www.facebook.com\/ricky.bryce.7","https:\/\/www.linkedin.com\/in\/ricky-bryce-4367a416\/"],"url":"https:\/\/bryceautomation.com\/index.php\/author\/ricky\/"}]}},"_links":{"self":[{"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/posts\/13621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/comments?post=13621"}],"version-history":[{"count":0,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/posts\/13621\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/media\/13624"}],"wp:attachment":[{"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/media?parent=13621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/categories?post=13621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/tags?post=13621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}