<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
<channel>
  <title>Linux Format forums</title>
  <link>http://linuxformat.com/forums/index.php</link>
  <description>Help, discussion, magazine feedback and more</description>
  <language>english</language>
  <copyright>(c) Copyright Fri May 24, 2013 12:18 am by Linux Format forums</copyright>
  <managingEditor>webmaster@linuxformat.com</managingEditor>
  <webMaster>webmaster@linuxformat.com</webMaster>
  <pubDate>Fri May 24, 2013 12:18 am</pubDate>
  <lastBuildDate>Fri May 24, 2013 12:18 am</lastBuildDate>
  <docs>http://backend.userland.com/rss</docs>
  <generator>phpBB2 RSS Syndication Mod by Lucas</generator>
  <ttl>1</ttl>

  <image>
    <title>Linux Format forums</title>
    <url></url>
    <link>http://linuxformat.com/forums/</link>
    <description>Help, discussion, magazine feedback and more</description>
  </image>

                                      <item>
                                        <title>The MikeOS KB I/O project assembly routines...</title>
                                        <link>http://linuxformat.com/forums/viewtopic.php?p=88292#88292</link>
                                        <description>&lt;br /&gt;
                                      Author: &lt;a href='http://linuxformat.com/forums/profile.php?mode=viewprofile&amp;u=58561'&gt;Bazza&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
                                      Posted: Thu Apr 22, 2010 7:34 pm&lt;br /&gt;&lt;br /&gt;
                                      &lt;br /&gt;&lt;br /&gt;
                                      Hi all...&lt;br /&gt;
&lt;br /&gt;
As promised the assembler code to use a modified KB as I/O&lt;br /&gt;
inside MikeOS and running from a netbook... :-O&lt;br /&gt;
Notice I have kept these as separate subroutines rather than&lt;br /&gt;
a single piece of code which would of course be smaller in&lt;br /&gt;
compiled size...&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;table width=&quot;90%&quot; cellspacing=&quot;1&quot; cellpadding=&quot;3&quot; border=&quot;0&quot; align=&quot;center&quot;&gt;&lt;tr&gt; 	  &lt;td&gt;&lt;span class=&quot;genmed&quot;&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;	&lt;/tr&gt;	&lt;tr&gt;	  &lt;td class=&quot;code&quot;&gt;&lt;br /&gt;
; CAPSLOCK ON/OFF sub-routines for MikeOS.&lt;br /&gt;
; Original copyright, &amp;#40;C&amp;#41;2010, B.Walker, G0LCU.&lt;br /&gt;
; For use with MikeBASIC and issued as Public Domain.&lt;br /&gt;
&lt;br /&gt;
; CAPSLOCK.ASM, Version 0.00.10, assembly code.&lt;br /&gt;
&lt;br /&gt;
; Assembled under MS-DOS using the AD86 combination.&lt;br /&gt;
; The binary is 48 bytes in size.&lt;br /&gt;
&lt;br /&gt;
;CAPSON&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;pushf&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;Store flags and all of the used&lt;br /&gt;
&amp;nbsp; &amp;nbsp;push&amp;nbsp; &amp;nbsp;ax&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;registers.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;push&amp;nbsp; &amp;nbsp;dx&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;push&amp;nbsp; &amp;nbsp;ds&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;mov&amp;nbsp; &amp;nbsp;dx,0040h&amp;nbsp; &amp;nbsp;;Point to the SEGMENT to access&lt;br /&gt;
&amp;nbsp; &amp;nbsp;mov&amp;nbsp; &amp;nbsp;ds,dx&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;the REAL time BYTE KB storage.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;mov&amp;nbsp; &amp;nbsp;al,&amp;#91;0017h&amp;#93;&amp;nbsp; &amp;nbsp;;Move the BYTE value from memory&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;into the AL register.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;or&amp;nbsp; &amp;nbsp;al,040h&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;SET the required bit, &amp;#40;bit 6&amp;#41;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;to a ~1~.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;NOTE, change this value for NUMLOCK!&lt;br /&gt;
&amp;nbsp; &amp;nbsp;mov&amp;nbsp; &amp;nbsp;&amp;#91;0017h&amp;#93;,al&amp;nbsp; &amp;nbsp;;Replace the modified byte back&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;into the memory location.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;int&amp;nbsp; &amp;nbsp;9&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;Now execute the necessary interrupt.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;pop&amp;nbsp; &amp;nbsp;ds&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;Restore the registers back to&lt;br /&gt;
&amp;nbsp; &amp;nbsp;pop&amp;nbsp; &amp;nbsp;dx&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;their original values...&lt;br /&gt;
&amp;nbsp; &amp;nbsp;pop&amp;nbsp; &amp;nbsp;ax&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;popf&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;And the flags too.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;ret&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;Return to the calling routine.&lt;br /&gt;
&lt;br /&gt;
;CAPSOFF&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;pushf&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;Store flags and all of the used&lt;br /&gt;
&amp;nbsp; &amp;nbsp;push&amp;nbsp; &amp;nbsp;ax&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;registers.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;push&amp;nbsp; &amp;nbsp;dx&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;push&amp;nbsp; &amp;nbsp;ds&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;mov&amp;nbsp; &amp;nbsp;dx,0040h&amp;nbsp; &amp;nbsp;;Point to the SEGMENT to access&lt;br /&gt;
&amp;nbsp; &amp;nbsp;mov&amp;nbsp; &amp;nbsp;ds,dx&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;the REAL time BYTE KB storage.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;mov&amp;nbsp; &amp;nbsp;al,&amp;#91;0017h&amp;#93;&amp;nbsp; &amp;nbsp;;Move the BYTE value from memory&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;into the AL register.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;and&amp;nbsp; &amp;nbsp;al,0bfh&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;RESET the required bit, &amp;#40;bit 6&amp;#41;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;to a ~0~, keeping all other bits intact.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;NOTE, change this value for NUMLOCK!&lt;br /&gt;
&amp;nbsp; &amp;nbsp;mov&amp;nbsp; &amp;nbsp;&amp;#91;0017h&amp;#93;,al&amp;nbsp; &amp;nbsp;;Replace the modified byte back&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;into the memory location.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;int&amp;nbsp; &amp;nbsp;9&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;Now execute the necessary interrupt.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;pop&amp;nbsp; &amp;nbsp;ds&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;Restore the registers back to&lt;br /&gt;
&amp;nbsp; &amp;nbsp;pop&amp;nbsp; &amp;nbsp;dx&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;their original values...&lt;br /&gt;
&amp;nbsp; &amp;nbsp;pop&amp;nbsp; &amp;nbsp;ax&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;popf&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;And the flags too.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;ret&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;Return to the calling routine.&lt;br /&gt;
&lt;br /&gt;
; CAPSLOCK.ASM assembly code end.&lt;br /&gt;
&lt;br /&gt;
; KBFALGS.ASM, Version 0.00.10.&lt;br /&gt;
&lt;br /&gt;
; Keyboard flags memory location in &amp;quot;real time&amp;quot; READ only mode.&lt;br /&gt;
; Issued as PD for MikeOS and LXF.&lt;br /&gt;
; To work in conjuction with MikeBASIC.&lt;br /&gt;
&lt;br /&gt;
; Keyoard HW modification, &amp;#40;C&amp;#41;2010, B.Walker, G0LCU.&lt;br /&gt;
; 8088 CPU instruction set compatible.&lt;br /&gt;
; Assembled under MS-DOS using AD86 combination,&lt;br /&gt;
&lt;br /&gt;
;KBFLAGS&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;pushf&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;Push all used registers&lt;br /&gt;
&amp;nbsp; &amp;nbsp;push&amp;nbsp; &amp;nbsp;ax&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;and flags.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;push&amp;nbsp; &amp;nbsp;dx&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;push&amp;nbsp; &amp;nbsp;ds&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;mov&amp;nbsp; &amp;nbsp;dx,0040h&amp;nbsp; &amp;nbsp;;Point to the SEGMENT 0x0040h.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;mov&amp;nbsp; &amp;nbsp;ds,dx&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;Do it.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;mov&amp;nbsp; &amp;nbsp;al,&amp;#91;0017h&amp;#93;&amp;nbsp; &amp;nbsp;;Read the memory offset 0x0017h&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;and place into the al register.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;pop&amp;nbsp; &amp;nbsp;ds&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;Pop these two registers back.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;pop&amp;nbsp; &amp;nbsp;dx&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;mov&amp;nbsp; &amp;nbsp;&amp;#91;store&amp;#93;,al&amp;nbsp; &amp;nbsp;;Move the value in the registsr&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;~AL~ into a known MikeOS memory&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;location.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;pop&amp;nbsp; &amp;nbsp;ax&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;Now pop the ~AX~ register back&lt;br /&gt;
&amp;nbsp; &amp;nbsp;popf&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;and the flags.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;ret&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;Return back to calling routine.&lt;br /&gt;
store&amp;nbsp; &amp;nbsp;db&amp;nbsp; &amp;nbsp;0c3h&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;The keyboard flags stored for&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;;my usage...&lt;br /&gt;
; END of flags read routine.&lt;br /&gt;
&lt;/td&gt;	&lt;/tr&gt;&lt;/table&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
I have not given an explanation here as this will be part of&lt;br /&gt;
the project for MikeOS, but I suspect that there is enough&lt;br /&gt;
info inside the code...&lt;br /&gt;
&lt;br /&gt;
For more information Google &amp;quot;segment:offset 0040:0017&amp;quot;...</description>
                                        <comments>http://linuxformat.com/forums/viewtopic.php?p=88292#88292</comments>
                                        <author>Bazza</author>
                                        <pubDate>Thu Apr 22, 2010 7:34 pm</pubDate>
                                        <guid isPermaLink="true">http://linuxformat.com/forums/viewtopic.php?p=88292#88292</guid>
                                      </item></channel></rss>